Commit Graph

919 Commits

Author SHA1 Message Date
Hermes Agent 1f9520d3f9 Merge pull request #2178 into stage-350
fix(ui): custom models not displayed in model configuration list (hualong1009)
2026-05-13 20:44:55 +00:00
Hermes Agent 3f851051cf Merge pull request #2151 into stage-350
fix: clarify cancelled chat turn status (Jordan-SkyLF)

Conflict resolution on api/streaming.py:4549-4567 (the cancel-handler
ownership guard). Both this PR and the already-shipped PR #2136 add a
guard at the same site against stale stream writebacks, from different
angles:

  - PR #2136 (HEAD): _stream_writeback_is_current(_cs, stream_id) — strictly
    dominates by checking the active_stream_id token equality.
  - PR #2151: 'worker won the race' check via (active_stream_id != stream_id
    and not pending_user_message), with _emit_cancel_event = False to suppress
    the terminal cancel event.

Resolution merges both: keep #2136's strictly-stronger condition for skip
detection, and adopt #2151's _emit_cancel_event = False semantic so the
cancel event isn't emitted in addition to skipping the writeback (when
client may have already received the successful done payload).

55/55 tests pass across cancelled-turn-status + stale-stream-writeback +
the four cancel/data-loss sibling test files.
2026-05-13 20:44:44 +00:00
Hermes Agent 73b47ec4b5 Merge pull request #2203 into stage-350
Activity highlight animation (dobby-d-elf)
2026-05-13 20:41:35 +00:00
dobby-d-elf efce9ebdd6 Merge remote-tracking branch 'origin/master' into tools-animation-version-b
# Conflicts:
#	static/ui.js
2026-05-13 13:11:35 -06:00
Hermes Agent 7150e9fe70 Merge pull request #2202 into stage-349
feat: show early session titles on chat start (Jordan-SkyLF)
2026-05-13 19:03:03 +00:00
Hermes Agent 26e726c17e Merge pull request #2200 into stage-349
fix: stabilize Firefox session sidebar scrolling (Jordan-SkyLF)
2026-05-13 19:03:01 +00:00
Hermes Agent 97b60c68b8 Merge pull request #2198 into stage-349
Fix fork-from-here keep count for truncated sessions (Michaelyklam)
2026-05-13 19:02:59 +00:00
dobby-d-elf 11d9687483 Polish version B Activity highlight sweep 2026-05-13 13:02:07 -06:00
Jordan SkyLF 0381294f1c feat: add early session provisional titles 2026-05-13 11:37:11 -07:00
Jordan SkyLF 2dfe765b60 fix: stabilize Firefox session sidebar scrolling 2026-05-13 11:30:06 -07:00
Michael Lam c522384c6d Fix fork-from-here keep count for truncated sessions 2026-05-13 09:57:40 -07:00
Hermes Agent ef042ad8c2 Merge pull request #2188 into stage-348
fix: refresh context ring after compression (LumenYoung)
2026-05-13 16:34:42 +00:00
Hermes Agent fbd1e27181 Merge pull request #2185 into stage-348
fix: prevent 404 on /api/session/compress/status during session switch (jasonjcwu)
2026-05-13 16:34:40 +00:00
Hermes Agent 479e388be8 Merge pull request #2182 into stage-348
fix: keep compression banner attached to the compaction marker (LumenYoung)
2026-05-13 16:34:39 +00:00
Hermes Agent 63a1855b95 Merge pull request #2187 into stage-348
feat: show steer messages in chat with visual badge (jasonjcwu, split from #2164)
2026-05-13 16:34:38 +00:00
Hermes Agent 785b1fe7e9 Merge pull request #2186 into stage-348
fix: prevent concurrent send() from losing messages or swallowing stream output (jasonjcwu, split from #2164)
2026-05-13 16:34:36 +00:00
Hermes Agent acefaa180e Merge pull request #2190 into stage-348
fix: preserve thinking card state during reasoning updates (xz-dev)
2026-05-13 16:34:34 +00:00
dobby-d-elf f6a5fc2885 Widen version B Activity highlight sweep 2026-05-13 09:21:59 -06:00
dobby-d-elf a183378a05 Refine version B Activity highlight sweep 2026-05-13 08:17:12 -06:00
dobby-d-elf 3640cd8edf Version B: use gold Activity highlight sweep 2026-05-13 08:08:49 -06:00
dobby-d-elf a60c222e76 Version A: tune Activity sweep animation 2026-05-13 08:07:52 -06:00
dobby-d-elf 7b263cea03 save 2026-05-13 07:40:21 -06:00
Xiangzhe 0b97f6d7ee fix: preserve thinking card state during reasoning updates 2026-05-13 20:58:50 +08:00
Xiangzhe 1a4e0522a0 fix: keep background metering from overwriting visible session usage 2026-05-13 20:58:50 +08:00
dobby-d-elf de3dba3c62 feat: soften sweep edges and widen band for Activity animation 2026-05-13 06:40:38 -06:00
fxd-jason a8816fe22f feat: show steer indicator as transient DOM element
When busy_input_mode is 'steer' and the steer is accepted by the server,
show a transient indicator in the chat area (not in S.messages).

This mirrors the CLI/Gateway approach: steer text is never stored in the
message array. The done event's S.messages=d.session.messages replacement
therefore doesn't cause a flash where all SSE content vanishes and re-appears.

The indicator is an independent DOM element (.steer-indicator) appended to
msgInner. It naturally disappears when renderMessages rebuilds msgInner on
turn completion (done/cancel/error).
2026-05-13 20:30:44 +08:00
Lumen Yang 3289c44fb6 fix: refresh context ring after compression 2026-05-13 14:02:28 +02:00
Lumen Yang 7f01abf931 fix: ignore stale compaction markers when placing banner 2026-05-13 13:27:51 +02:00
fxd-jason 676d1f965e fix: prevent concurrent send() from losing messages or swallowing stream output
Problem: When two messages are sent in rapid succession, the second
send() can pass the S.busy check because setBusy(true) only runs after
the first await inside send(). This creates a window where two async
send() calls run concurrently, leading to:
- Streaming output from the first response getting swallowed when the
  second response's done event overwrites S.messages
- User messages disappearing when server returns 409 for the duplicate
  chat/start request

Root cause: send() is async and has awaits (uploadPendingFiles,
api('/api/chat/start')) before setBusy(true) at line 198. During those
await yields, S.busy is still false, allowing a second send() to enter.

Fix: Add a synchronous _sendInProgress guard at the very top of send()
(before any await). Concurrent calls re-queue the message instead of
silently dropping it. try/finally ensures the flag resets on all exit
paths.

Also widens the text-extraction window in
test_1062_busy_input_modes.py from 3000 to 5000 chars to accommodate
the new guard block at the top of send().
2026-05-13 19:21:50 +08:00
fxd-jason 9e45de463d fix: prevent 404 on /api/session/compress/status during session switch
Two-part fix:
- Backend: handle_get returns True (not None from j()) for compress/status
  route, preventing edge-case 404 fallback in do_GET
- Frontend: resumeManualCompressionForSession silently returns on 404
  instead of showing "Compression failed: not found" toast

Includes 6 regression tests covering backend return value, idle/empty
session responses, and frontend 404 guard presence.
2026-05-13 18:56:55 +08:00
Lumen Yang bc6a949272 fix: place compression banner at persisted marker 2026-05-13 10:59:36 +02:00
Hermes Agent afe42b96c1 Merge pull request #2156 into stage-346
Issue #2057 Slice 2: Add guarded worktree remove action
2026-05-13 06:56:25 +00:00
Hermes Agent cc1df0c6c7 Merge pull request #2166 into stage-346
Consolidate session post-render processing

# Conflicts:
#	CHANGELOG.md
2026-05-13 06:56:24 +00:00
Hermes Agent e665d36847 Merge pull request #2161 into stage-346
Localize logs severity filters (closes #2098)

# Conflicts:
#	CHANGELOG.md
2026-05-13 06:56:18 +00:00
Hermes Agent 7e88ba391a Merge pull request #2175 into stage-346
Soften session lineage count badge (refs #2155)
2026-05-13 06:56:14 +00:00
Lumen Yang d13a174fe1 fix: keep compression anchor stable in windowed transcript 2026-05-13 08:49:25 +02:00
王浩生 a49c0fbf8b fix(ui): Fix the issue where custom models are not displayed in the model configuration list
- Fix the issue where custom models are not shown
- Fix the issue where custom models are not ollama but go through the ollama model processing function, causing the hyphen '-' in the model name to be replaced with a space " " and the last letter to be lowercase
2026-05-13 14:42:03 +08:00
Michael Lam 29f5dea835 Soften session lineage count badge 2026-05-12 22:41:41 -07:00
Frank Song 02ca306ffc Consolidate session post-render processing 2026-05-13 11:50:31 +08:00
Frank Song f1ca07c186 Localize logs severity filters 2026-05-13 10:55:59 +08:00
Frank Song f4efe0790b Complete worktree remove i18n coverage 2026-05-13 09:57:24 +08:00
Frank Song 46c62851ad Harden worktree removal safeguards 2026-05-13 09:49:15 +08:00
Frank Song 93b7d35bfa Issue #2057 Slice 2: Add worktree remove action
Backend:
- POST /api/session/worktree/remove — removes a session's git worktree
- Guards: stream/terminal lock, dirty/untracked without force
- remove_worktree_for_session() in api/worktrees.py

Frontend:
- 'Remove Worktree' context menu item + confirm modal
- i18n keys for all 11 locales

Tests:
- 5 tests: clean remove, missing worktree, no-path, route success, 404
2026-05-13 09:11:55 +08:00
Jordan SkyLF 062ef74ec0 fix: guard provider quota refresh fallback button state 2026-05-12 15:41:19 -07:00
Jordan SkyLF e4d16e93c7 fix: clarify cancelled chat turn status 2026-05-12 13:26:49 -07:00
Jordan SkyLF b1f752ad3f feat: add provider quota refresh control 2026-05-12 13:17:27 -07:00
Hermes Agent 9c7eb42658 Merge pull request #2142 into stage-344
i18n: add French (fr) locale (938 keys, alphabetical en→fr→it position)
2026-05-12 16:13:48 +00:00
Hermes Agent c677c19a8f Merge pull request #2128 into stage-344
Fix manual compression proxy timeouts (closes #2087)

# Conflicts:
#	CHANGELOG.md
2026-05-12 16:13:01 +00:00
Hermes Agent 23425b23c8 Merge pull request #2129 into stage-344
fix: purge missing inflight sessions (closes #2092)
2026-05-12 16:12:57 +00:00
Hermes Agent 8520755bd2 Merge pull request #2130 into stage-344
feat: load full lineage segments on demand
2026-05-12 16:12:52 +00:00