Commit Graph

2793 Commits

Author SHA1 Message Date
nesquena-hermes 4da2a8e21a Stamp CHANGELOG for v0.51.110 (Release CH / stage-403 / 2-PR batch) 2026-05-22 16:20:41 +00:00
fxd-jason 84ef8a63a6 fix: remove xai from has_key test (CI env has no XAI_API_KEY) 2026-05-22 16:13:46 +00:00
fxd-jason 7e556614f9 test: add sort order tests for providers and model picker 2026-05-22 16:13:46 +00:00
fxd-jason 56575bd393 feat: sort configured/custom providers to top in model picker and settings 2026-05-22 16:13:46 +00:00
s010mn 4153a47d0f feat: new_session() reads display.personality from config as default
When display.personality is set in config.yaml (e.g. personality: taleb),
new sessions now inherit it automatically instead of starting with
personality=None and requiring an explicit /personality command.

This makes the selected personality sticky across new conversations rather
than requiring per-session activation.

Behavior:
- display.personality values 'none', 'default', 'neutral', '' are treated
  as no personality (personality=None), matching TUI gateway semantics.
- Config read is wrapped in try/except — if it fails, personality falls
  back to None (no crash, no regression).
- Case-insensitive: 'Taleb' normalizes to 'taleb'.

The /personality slash command still works for per-session overrides as
before; this change only affects the initial default.
2026-05-22 16:13:33 +00:00
nesquena-hermes 6498043b5e Merge pull request #2755 from nesquena/release/stage-402
Release CG: v0.51.109 (stage-402 — 2-PR batch — sidebar action menu click stability + chat panel sidebar resync after navigation)
v0.51.109
2026-05-22 09:07:30 -07:00
nesquena-hermes 0a1e22d0a2 Stamp CHANGELOG for v0.51.109 (Release CG / stage-402 / 2-PR batch) 2026-05-22 15:55:12 +00:00
nesquena-hermes cab60bcd3b Stage 402: PR #2736 2026-05-22 15:51:12 +00:00
nesquena-hermes 78233e91dc Stage 402: PR #2741
# Conflicts:
#	CHANGELOG.md
2026-05-22 15:51:09 +00:00
nesquena-hermes 05c63b5611 Merge pull request #2754 from nesquena/release/stage-401
Release CF: v0.51.108 (stage-401 — 4-PR batch — session-index dedup + update-check redaction + handoff-summary sqlite leak + RuntimeAdapter Slice 4d gate docs)
v0.51.108
2026-05-22 08:39:18 -07:00
nesquena-hermes 46661ede93 Stamp CHANGELOG for v0.51.108 (Release CF / stage-401 / 4-PR batch) 2026-05-22 15:29:02 +00:00
nesquena-hermes bbaa4f83e3 Stage 401: PR #2744
# Conflicts:
#	CHANGELOG.md
2026-05-22 15:22:30 +00:00
nesquena-hermes d71b8977d6 Stage 401: PR #2742 2026-05-22 15:22:01 +00:00
nesquena-hermes 742c9cbd9b Stage 401: PR #2730 2026-05-22 15:21:32 +00:00
nesquena-hermes cc2d41d7c7 Stage 401: PR #2738 2026-05-22 15:21:32 +00:00
Michael Lam bda91a6edd docs(runtime): define runner route gate 2026-05-22 04:08:59 -07:00
Isla-Liu 5b41f03a92 fix(webui): close sqlite3 connections in handoff-summary path (#2233)
Two functions on the /api/session/handoff-summary hot path were opening
sqlite3.connect(...) inside a bare `with` statement, which commits the
transaction at scope exit but does NOT close the connection. Per-turn
invocations accumulated state.db / state.db-wal file descriptors and
CPython heap pages on long-lived worker threads, surfacing as the
multi-GB VmRSS and 6x duplicated state.db fds observed on the live
instance (D0 pre-restart baseline: VmRSS 1,334,248 kB, 55 fds; cold
baseline after restart: VmRSS 136,668 kB, 10 fds).

Wrap both call sites with contextlib.closing(...) (already imported and
used at seven other sites in the same files) so the connection is
closed deterministically:

  - api/models.py :: count_conversation_rounds
  - api/routes.py :: _persist_handoff_summary_to_state_db

Regression test:
  tests/test_issue2233_sqlite_connection_leak.py loops both functions
  20 times against a tmp state.db and asserts /proc/<pid>/fd count
  does not grow more than 2. Linux-only via sys.platform skip.

D1 live soak against a freshly-built worktree server (port 8799,
isolated HERMES_HOME / HERMES_WEBUI_STATE_DIR) hitting
/api/session/handoff-summary 20 times:

  fd_before      = 5
  fd_after       = 5     (growth 0, threshold < 5)
  vmrss_before   = 52636 kB
  vmrss_after    = 52636 kB  (growth 0 kB, threshold < 30 MB)

The patched fix curve trends below the leak curve.

Rollback: single git revert <this-sha> reverts both file edits.

Refs #2233.
2026-05-22 18:34:06 +08:00
ai-ag2026 dabe7b0ea5 fix(session): keep conversation actions menu clickable 2026-05-22 12:21:10 +02:00
wdzhou a4e6ffccd9 fix(session): deduplicate _write_session_index full rebuild entries by session_id
The full rebuild path scans SESSION_DIR via glob('*.json') and appends every loaded session to a plain list without deduplicating by session_id. When old-format session_*.json files coexist alongside WebUI-format xxx.json files (both sharing session_id), the index gets duplicate entries, causing frontend Vue key crashes.

Fix: use dict[session_id -> compact_entry] to naturally deduplicate.
2026-05-22 18:02:49 +08:00
wdzhou 16f9887846 fix(session): deduplicate _write_session_index full rebuild by session_id
The full rebuild path of _write_session_index scans SESSION_DIR via
glob('*.json') and appends every loaded session to a plain list without
deduplicating by session_id. When old-format session_*.json files coexist
alongside WebUI-format xxx.json files (both sharing the same session_id),
the same session appears multiple times in the index, causing frontend
Vue key collisions and a blank page.

Fix: use dict[session_id -> compact_entry] to naturally deduplicate.
Prefer the entry with the larger message_count when conflicts arise.
2026-05-22 16:13:42 +08:00
ai-ag2026 77b0ca6e02 fix(chat): preserve session actions after panel resync 2026-05-22 09:25:15 +02:00
ai-ag2026 f81d24ec4c fix(chat): resync sidebar after panel switch 2026-05-22 09:25:15 +02:00
Ashish Vaja b63bdae09b fix: redact update-check git diagnostics 2026-05-22 02:28:17 +00: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