Commit Graph

2771 Commits

Author SHA1 Message Date
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