ai-ag2026
dabe7b0ea5
fix(session): keep conversation actions menu clickable
2026-05-22 12:21:10 +02:00
nesquena-hermes
5abd142f34
Merge pull request #2725 from nesquena/release/stage-400
...
Release CE — stage-400 — v0.51.107 — 8-PR low-risk batch (pin-cap getter rename + upload-turn dedup + active-run repair + KaTeX incremental + profile default model + French locale + update-check error surfacing + update apply path)
v0.51.107
2026-05-21 16:18:12 -07:00
Hermes Agent
9d10390852
Stamp CHANGELOG for v0.51.107 (Release CE / stage-400 / 8-PR batch)
2026-05-21 23:13:31 +00:00
Hermes Agent
0718770fe1
Stage 400: PR #2719 — fix: apply release update target (clear sessionStorage check-once stamp + force banner re-evaluation on user click)
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 22:59:56 +00:00
Hermes Agent
b14aae4ee5
Stage 400: PR #2717 — fix: surface update check fetch errors instead of failing silently
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 22:59:54 +00:00
Hermes Agent
d1f09a9e9b
Stage 400: PR #2722 — i18n: complete French (fr) locale (+93 missing keys, 88.8% → 96.7% coverage)
...
Co-authored-by: victorwhale <victorwhale@users.noreply.github.com >
2026-05-21 22:59:51 +00:00
Hermes Agent
80356c3a47
Stage 400: PR #2709 — fix(model): prefer profile default model on fresh boot when localStorage has no persisted pick
...
Co-authored-by: starship-s <starship-s@users.noreply.github.com >
2026-05-21 22:59:48 +00:00
Hermes Agent
cc36711b9f
Stage 400: PR #2710 — fix: render streamed math incrementally (no flash when delta completes a KaTeX expression)
...
Co-authored-by: Michaelyklam <Michaelyklam@users.noreply.github.com >
2026-05-21 22:59:46 +00:00
Hermes Agent
654f62e0bd
Stage 400: PR #2721 — fix(session): treat active runs as live during repair (skip restart-stale prune for sessions with live streams)
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 22:59:43 +00:00
Hermes Agent
0fae9cbdf1
Stage 400: PR #2723 — fix(chat): dedupe uploaded-file optimistic user turns
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 22:59:40 +00:00
Hermes Agent
4f3eb9f7f8
Stage 400: PR #2718 — fix: rename _pinnedSessionsLimit() to _getPinnedSessionsLimit() (follow-up to v0.51.105 #2700 , matches sessions.js getter convention)
...
Co-authored-by: eslicarrillo <eslicarrillo@users.noreply.github.com >
2026-05-21 22:59:37 +00:00
nesquena-hermes
79af205fb8
Merge pull request #2711 from nesquena/release/stage-399
...
Release CD — stage-399 — v0.51.106 — 3-PR runtime-context batch (restamped state.db replay dedupe + context_messages dedupe so agent doesn't see duplicates + empty _partial bloat fix)
v0.51.106
2026-05-21 11:06:10 -07:00
Hermes Agent
af76e3ec0b
Stamp CHANGELOG for v0.51.106 (Release CD / stage-399 / 3-PR batch)
2026-05-21 17:57:22 +00:00
Hermes Agent
3874781a57
Stage 399: PR #2704 — fix(streaming): prevent exponential empty _partial accumulation across reasoning-only cancellations
...
Co-authored-by: wirtsi <wirtsi@users.noreply.github.com >
2026-05-21 17:56:46 +00:00
Hermes Agent
7152da2756
Stage 399: PR #2705 — fix(api): dedupe replayed context_messages so the agent doesn't see duplicates (follow-up to v0.51.96 #2620 )
...
Co-authored-by: AlexeyDsov <AlexeyDsov@users.noreply.github.com >
2026-05-21 17:56:43 +00:00
Hermes Agent
4db8df5e29
Stage 399: PR #2686 — fix(session): dedupe restamped state.db replay rows in /api/session display merge
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 17:56:40 +00:00
nesquena-hermes
bcf73084ad
Merge pull request #2708 from nesquena/release/stage-398
...
Release CC — stage-398 — v0.51.105 — 4-PR low-risk batch (hide suggestions + Docker version detection + runner adapter slice 4c + configurable pin cap)
v0.51.105
2026-05-21 10:53:15 -07:00
Hermes Agent
37bc59c99a
Stamp CHANGELOG for v0.51.105 (Release CC / stage-398 / 4-PR batch)
2026-05-21 17:49:34 +00:00
Hermes Agent
905b3eba5e
Stage 398: PR #2700 — feat: make pinned session limit configurable (builds on shipped #2614 3-cap)
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 17:43:56 +00:00
Hermes Agent
f563d37244
Stage 398: PR #2696 — feat(runtime): add runner-local adapter selection (RuntimeAdapter slice 4c, feature-flagged)
...
Co-authored-by: Michaelyklam <Michaelyklam@users.noreply.github.com >
2026-05-21 17:43:54 +00:00
Hermes Agent
6864739e55
Stage 398: PR #2703 — fix: detect agent version from copied source (Docker two-container System panel) ( closes #2691 )
...
Closes #2691
Co-authored-by: Michaelyklam <Michaelyklam@users.noreply.github.com >
2026-05-21 17:43:51 +00:00
Hermes Agent
7d3013245a
Stage 398: PR #2687 — feat: hide suggestions preference ( closes #2679 )
...
Closes #2679
Co-authored-by: Michaelyklam <Michaelyklam@users.noreply.github.com >
2026-05-21 17:43:48 +00:00
nesquena-hermes
c70ec3ba19
Merge pull request #2707 from nesquena/release/stage-397
...
Release CB — stage-397 — v0.51.104 — 9-PR low-risk batch (i18n + geist polish + tablet kbd + Codex slash repair + SSE jitter + inline cron + inflight race + model picker resync + sidebar clamp + transcript cache)
v0.51.104
2026-05-21 10:41:17 -07:00
Hermes Agent
e6d51c2c48
Stamp CHANGELOG for v0.51.104 (Release CB / stage-397 / 9-PR batch)
2026-05-21 17:37:47 +00:00
Hermes Agent
8e1ac89baa
Stage 397: PR #2692 — fix(ui): invalidate transcript cache on same-count content changes
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 17:14:37 +00:00
Hermes Agent
e2338f696f
Stage 397: PR #2688 — fix: resync virtualized sidebar after scroll clamp
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 17:14:36 +00:00
Hermes Agent
d5dcd60981
Stage 397: PR #2674 — fix: new-chat default model provider sync when model id matches but provider differs
...
Co-authored-by: AJV20 <AJV20@users.noreply.github.com >
2026-05-21 17:14:34 +00:00
Hermes Agent
3dd2ace4e1
Stage 397: PR #2689 — fix(chat): preserve inflight send state during start race
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 17:14:33 +00:00
Hermes Agent
12a92dd50a
Stage 397: PR #2671 — fix: SSE reconnect jitter + cron run row inline expansion
...
Closes #2629
Closes #2661
Co-authored-by: AJV20 <AJV20@users.noreply.github.com >
2026-05-21 17:13:59 +00:00
Hermes Agent
92f1896754
Stage 397: PR #2684 — fix: repair stale Codex OpenAI slash-qualified model state
...
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com >
2026-05-21 17:13:56 +00:00
Hermes Agent
345762cf70
Stage 397: PR #2706 — fix: tablet hardware keyboard Enter sends (treat iPad with attached keyboard like desktop)
...
Co-authored-by: dobby-d-elf <dobby-d-elf@users.noreply.github.com >
2026-05-21 17:13:52 +00:00
Hermes Agent
958762bcfe
Stage 397: PR #2701 — fix: geist-contrast skin composer UI improvements (light-mode text, scrollbar, send button color)
...
Co-authored-by: jasonjcwu <jasonjcwu@users.noreply.github.com >
2026-05-21 17:13:49 +00:00
Hermes Agent
2752e23b84
Stage 397: PR #2690 — i18n: correct zh-CN/zh-TW cron_status_active translations (运行中→已启用 / 活躍中→已啟用)
...
Co-authored-by: laiaman <laiaman@users.noreply.github.com >
2026-05-21 17:13:46 +00:00
nesquena-hermes
7057c94277
Merge pull request #2667 from nesquena/release/stage-396
...
Release v0.51.103 (Release CA / stage-396 / 1-PR follow-on)
v0.51.103
2026-05-20 17:38:18 -07:00
nesquena-hermes
85d2e80cfe
Stage-396 locale fix: add plugins_active_provider + plugins_provider_no_hooks to all 10 non-English locales
...
The original PR #2663 added 2 new English i18n keys but didn't extend them
to the 10 non-English locale blocks. Five locale-coverage tests
(zh/ja/ko/ru/es) failed because they verify every English key has a paired
entry in their locale. Added the keys to all 10 locales:
- zh + zh-Hant: actual translations
- it/ja/ru/es/de/pt/ko/fr: English + // TODO: translate markers (the
repo's established pattern for these locales)
2026-05-21 00:35:22 +00:00
nesquena-hermes
32c006a6fd
Stamp CHANGELOG for v0.51.103 (Release CA / stage-396 / 1-PR follow-on)
2026-05-21 00:27:07 +00:00
nesquena-hermes
c6587091a2
Stage 396: PR #2663
2026-05-21 00:26:54 +00:00
nesquena-hermes
78be555460
Merge pull request #2666 from nesquena/release/stage-395
...
Release v0.51.102 (Release BZ / stage-395 / 1-PR follow-on)
v0.51.102
2026-05-20 17:19:03 -07:00
nesquena-hermes
70fe39a09f
Stamp CHANGELOG for v0.51.102 (Release BZ / stage-395 / 1-PR follow-on)
2026-05-21 00:15:04 +00:00
nesquena-hermes
f867b4520b
Stage 395: PR #2662
2026-05-21 00:14:45 +00:00
nesquena-hermes
4cae511d15
Merge pull request #2665 from nesquena/release/stage-394
...
Release v0.51.101 (Release BY / stage-394 / 2-PR deep-review batch)
v0.51.101
2026-05-20 17:09:59 -07:00
nesquena-hermes
7479af462b
Stage-394 test fix: set destructive env in test_git_commit_route_rejects_active_stream
...
The test was calling _handle_git_commit() directly in-process, but the
HERMES_WEBUI_WORKSPACE_GIT_DESTRUCTIVE=1 env var was only being set on the
test_server subprocess (via conftest.py L539). In-process the destructive
gate (returns 403) fires before the active-stream gate (returns 409), so
the test never reached the assertion it was trying to verify.
monkeypatch.setenv() restores the test's intent: confirm that when
destructive mode IS enabled, an active stream still blocks mutations with
the more specific 409 code.
2026-05-21 00:06:53 +00:00
nesquena-hermes
0774235987
Stamp CHANGELOG for v0.51.101 (Release BY / stage-394 / 2-PR deep-review batch)
2026-05-20 23:54:00 +00:00
nesquena-hermes
cc5f6e3a78
Stage 394: PR #2636
2026-05-20 23:53:04 +00:00
nesquena-hermes
45c7a693af
Stage 394: PR #2625
2026-05-20 23:53:04 +00:00
nesquena-hermes
ea8305d5e2
Stage-394 chip CSS contrast: dark text on filled chips for light-theme readability
...
Light-theme review revealed white text on gold chips (color: var(--bg-page)) was
washed out and hard to read. Switched to fixed dark text #1a1a1a with font-weight
600 so the on-state reads clearly on the gold accent in both light and dark
themes. Off-state unchanged (muted text on transparent).
2026-05-20 23:38:51 +00:00
nesquena-hermes
38933b288d
Stage-394 follow-up: profile-switch reconciliation + a11y switch role + server-side chat/settings filter
...
Per deep-review verdict SHIP-WITH-FIXES on PR #2636 :
1. Profile-switch reconciliation: _refreshProfileSwitchBackground now re-fetches
/api/settings and re-applies hidden_tabs for the new profile. Without this,
Profile A's hidden-tabs choice stayed in effect under Profile B until the
user opened Settings → Appearance.
2. A11y: switched chips from role=button + aria-pressed to role=switch +
aria-checked. The pressed/not-pressed wording confused screen-reader users
because chip-off looks like the off state. Added role=group +
aria-labelledby on the container, and a :focus-visible style on the chips.
3. Server-side belt-and-suspenders: api/config.py now strips 'chat' and
'settings' from hidden_tabs at validation time, matching the client's apply-
time filter. A tampered POST can no longer persist the forbidden values.
3 new regression tests added (chat/settings rejection, profile-switch wiring,
chip a11y attributes).
Co-authored-by: FrancescoFarinola <francesco.farinola@example.com >
2026-05-20 23:05:19 +00:00
Francesco Farinola
5491a54285
fix: address PR review feedback on sidebar tab visibility
...
Three tweaks from reviewer:
1. Harden _applyTabVisibility to skip always-visible panels even if
they appear in hidden_tabs (localStorage tampering, stale server
data). Forces shouldHide=false so stale nav-tab-hidden classes
on chat/settings get removed, not just skipped.
2. Add synchronous inline <script> flash-prevention after sidebar-nav
in index.html. On slow networks, defer scripts run after the
browser incrementally renders the DOM, causing hidden tabs to
flash visible before JS executes. The inline script reads
hermes-webui-hidden-tabs from localStorage and applies
nav-tab-hidden classes before first paint, mirroring the existing
theme/skin/font-size pattern. The boot.js IIFE becomes a secondary
fallback (comment updated).
3. Remove _settingsHiddenTabsOnOpen dead state. It was tracked but
never read for revert — _revertSettingsPreview is intentionally
a no-op for appearance autosave. Removing the tracking makes
the code honest about what it actually does. Also removes the
test_settings_session_tracking test that validated this dead code.
2026-05-20 22:57:36 +00:00
Francesco Farinola
7f1feca3fe
feat: sidebar tab visibility toggle in Settings > Appearance
...
Add chip row in Settings > Appearance that lets users toggle individual
sidebar/rail tabs on or off. Chat and Settings are always visible.
- Backend: hidden_tabs list setting with validation (no bool coerce)
- Frontend: pill chips that scan rail buttons, autosave via appearance
- Boot: _restoreTabVisibility IIFE applies hidden tabs before first paint
- i18n: 11 locales (label + description)
- Tests: 5 regression tests covering backend, frontend contracts,
boot restore, i18n coverage, and settings session tracking
2026-05-20 22:57:36 +00:00
Michael Lam
f17d4e204f
fix: keep resumed CLI sessions in sidebar cap
2026-05-20 15:54:44 -07:00