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)
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)
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)
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)
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
fxd-jason
59ffe4fca5
fix: geist-contrast skin composer UI improvements
...
- Light mode: override white user-bubble-text so textarea text is black (#111 )
- Remove scrollbar from textarea (scrollbar-width:none + webkit)
- Remove double border on focus: split composer-box:focus-within from
textarea:focus to prevent stacking box-shadows
- Remove composer-box border (border:none) to eliminate double-border ring
2026-05-22 00:46:57 +08:00
dobby-d-elf
ad88c92155
clean up & refactor
2026-05-21 08:25:04 -06:00
dobby-d-elf
13fa0de891
refined iOS enter animations
2026-05-21 07:59:16 -06:00
dobby-d-elf
c4fffff205
refine archive/restore animations
2026-05-21 07:52:42 -06:00
dobby-d-elf
a277bbd42c
refactor
2026-05-21 07:41:08 -06:00
dobby-d-elf
1d8d0bfeb7
optimize performance
2026-05-21 07:30:41 -06:00
dobby-d-elf
03266c2644
fix: preserve touch swipe exit animations
2026-05-21 06:52:33 -06:00
dobby-d-elf
6c96423231
v4 effects save
2026-05-21 06:35:07 -06:00
dobby-d-elf
ca6736407e
Checkpoint polished session swipe interactions
2026-05-20 21:24:35 -06:00