Commit Graph
100 Commits
Author SHA1 Message Date
Frank Song 155a727ec1 docs: refresh current snapshot for v0.51.54 2026-05-13 16:56:21 +08:00
Frank Song 65fa18c7d9 docs: add agent onboarding entrypoint 2026-05-13 16:47:14 +08:00
Frank Song be32b90cea docs: refresh current project snapshot 2026-05-13 16:47:14 +08:00
Frank Song d5dda03ec2 Fix ctl Python wrapper ownership 2026-05-13 13:09:42 +08:00
Frank Song e78945e7ca Skip CLI metadata lookup for native sessions 2026-05-13 12:35:12 +08: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 57ee0ce069 Add CSP report collector endpoint 2026-05-13 10:52:59 +08:00
Frank Song 5ae63ddd13 Fix stale stream state in session list 2026-05-13 10:28:12 +08:00
Frank Song 9ea4f1145d Fix stale stream exception writeback guards 2026-05-13 10:23:03 +08:00
Frank Song f4efe0790b Complete worktree remove i18n coverage 2026-05-13 09:57:24 +08:00
Frank Song e177f64e78 Add worktree remove PR screenshots 2026-05-13 09:53:56 +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
Frank Song 76e611d49f Preserve fallback provider credential hints 2026-05-12 20:42:55 +08:00
Frank Song b3f8bee96f Fix settings system mobile version wrapping 2026-05-12 20:42:55 +08:00
Frank Song b718220077 Fix login health probe credentials 2026-05-12 20:09:54 +08:00
Frank Song b7c5ba640c Fix custom live model scoping 2026-05-12 20:05:28 +08:00
Frank Song 8fa92c680f Fix manual compression proxy timeouts 2026-05-12 17:33:59 +08:00
Frank Song 4e8899592d Prefer worktree retention responses in session UI 2026-05-12 10:17:12 +08:00
Frank Song 6e1e9fafbe Add worktree status endpoint 2026-05-12 10:08:01 +08:00
Frank Song 2da4f108c5 Clarify worktree session archive/delete semantics
(cherry picked from commit f5c8fb58d1892f2c964389295530e8be5d84323f)
2026-05-12 00:05:05 +00:00
Frank Song 6a52edf2ab Fix stale inflight purge runtime lookup 2026-05-11 21:53:43 +08:00
Frank Song 18124ced62 Refactor compression anchor visibility helpers 2026-05-11 20:56:30 +08:00
Frank Song c8d110a7f0 test: align sidebar spinner state assertions 2026-05-11 20:31:00 +08:00
Frank Song a0e9c06102 Fix HERMES_HOME skill cache patching 2026-05-11 19:12:02 +08:00
Frank Song c60078b356 fix(ui): prevent stuck sidebar spinner on completed sessions (closes #2066)
The spinner (.session-state-indicator.is-streaming) can remain spinning
indefinitely on completed sessions when the INFLIGHT in-memory cache is
not cleaned up due to abnormal stream termination (page refresh, network
disconnect, gateway restart).

Add a staleness guard in _isSessionLocallyStreaming: if the server
reports is_streaming=false and last_message_at is older than 5 minutes,
force the streaming state to false regardless of stale INFLIGHT entries.
2026-05-11 17:54:14 +08:00
Frank Song f6115b78c6 Fix custom provider name slugs with ports 2026-05-11 17:24:53 +08:00
Frank Song 2cd10868aa Fix session recovery polish 2026-05-11 16:30:25 +08:00
Frank Song 5a445e7562 Fix duplicate assistant transcript merge 2026-05-11 13:09:16 +08:00
Frank Song db6857ba86 Address worktree session review notes 2026-05-11 12:51:57 +08:00
Frank Song 186453ea0e Add worktree-backed session creation 2026-05-11 12:12:40 +08:00
Frank Song 7aa1a5f42c docs: add first-run onboarding guide 2026-05-11 11:47:26 +08:00
Frank Song 642249747f Fix session message identity dedup 2026-05-11 08:14:50 +08:00
Frank Song 128e734df4 Fix Xiaomi API key env detection 2026-05-11 07:33:52 +08:00
Frank Song a27f1bf7db Clarify one-shot cron schedules 2026-05-11 07:03:17 +08:00
Frank Song e64e02479f Fix CLI session patch diff rendering 2026-05-10 20:44:34 +08:00
Frank Song 1bec8070f2 fix(1833): persist compression anchor summary for reload UI 2026-05-10 16:45:16 +08:00
Frank Song 2e6b3601bd fix(clarify): honor clarify.timeout config in webui prompts 2026-05-10 16:05:50 +08:00
Frank Song ba51efec26 test(kanban): assert profile-cache invalidation on profile delete 2026-05-10 15:49:14 +08:00
Frank Song 2427f1e598 test(kanban): harden locale-block parsing for quoted locales 2026-05-10 15:48:18 +08:00
Frank Song 1e1a9481b4 fix(i18n): localize /goal runtime status strings 2026-05-10 15:21:24 +08:00
Frank Song 4c95d9274e test: add kanban modal locale parity regression 2026-05-10 15:03:21 +08:00
Frank Song 42a23818b3 Fix 1974: trap focus in kanban modals 2026-05-10 14:57:51 +08:00
Frank Song 45a5253292 fix(i18n): add kanban status hint key to all locales for #1994 2026-05-10 14:49:30 +08:00
Frank Song b67d2676e4 fix(kanban): show original status hint in edit modal 2026-05-10 14:40:46 +08:00
Frank Song b06eb99d91 fix(kanban): invalidate profile cache for assignee select 2026-05-10 14:37:37 +08:00
Frank Song 8f077d37f7 Fix German profile_skill_count interpolation 2026-05-10 14:25:08 +08:00
Frank Song a0b757a9d4 Fix Kanban dispatch double-click race guard 2026-05-10 14:18:50 +08:00
Frank Song b38cc2f1ea Mute stale stopped gateway heartbeat 2026-05-09 14:53:42 +08:00
Frank Song 3dfd692d75 Localize session jump controls 2026-05-09 10:03:27 +08:00
Frank Song e8fd8dac5d Persist login rate limit attempts 2026-05-08 20:48:41 +00:00
Frank Song 431705e498 Remove dead Kanban start i18n key 2026-05-08 20:48:37 +00:00
Frank Song ccdc055c36 Fix workspace prefix sentinel handling 2026-05-08 16:40:17 +00:00
Frank Song 8c02bfacd2 Restore explicit tool-segment reset calls for legacy assertions 2026-05-08 15:37:09 +00:00
Frank Song c1a9d7ce79 fix: overwrite session usage per turn 2026-05-08 15:37:09 +00:00
Frank Song 82c7367cef Add interim_assistant streaming path to WebUI 2026-05-08 15:37:09 +00:00
Frank Song 7e2709e281 fix: add request wedge diagnostics 2026-05-08 15:37:08 +00:00
Frank Song 6808e06083 fix: isolate profile quota usage probes 2026-05-08 15:37:07 +00:00
Frank Song 6879390b8f Fix Kanban lifecycle controls
- Remove Kanban card Start and bulk Running controls (PATCH to running was unsafe)
- Rename "Nudge dispatcher" → "Preview dispatcher" (matches dry-run semantics)
- Add empty-board guidance kanban_work_queue_hint

Rebased onto master post-v0.51.23 by maintainer; preserves Japanese translations
from #1863 (kanban_nudge_dispatcher: ディスパッチャープレビュー).

Closes #1885

Co-authored-by: Frank Song <franksong2702@gmail.com>
2026-05-08 15:19:04 +00:00
Frank Song 29829c3edf fix: preflight oversized browser uploads 2026-05-08 15:16:19 +00:00
Frank Song 414c474d97 fix: preserve local custom provider model ids 2026-05-08 15:16:18 +00:00
Frank Song ee0828f53d fix: disable workspace heading affordance without workspace 2026-05-08 13:32:05 +08:00
Frank Song b0876982c4 fix: use cron edit snapshot for no-agent saves 2026-05-08 13:18:29 +08:00
Frank Song 153c34cac0 fix: tighten Kanban stale-client heuristic 2026-05-08 13:12:16 +08:00
Frank Song b684317554 test: parametrize kanban double-404 guard across HTTP methods 2026-05-08 12:48:23 +08:00
Frank Song 8bc2677691 fix: repair file picker and html preview interactions 2026-05-07 16:59:00 +00:00
Frank Song f7902776d4 fix: use live Codex models in providers card 2026-05-07 16:58:16 +00:00
Frank Song b763f22f36 fix: clarify Codex quota window labels 2026-05-07 16:58:15 +00:00
Frank Song 3ac89c2696 fix: route named custom provider model selections 2026-05-07 21:40:23 +08:00
Frank Song a6b88c8c1e feat: show account limits in provider quota 2026-05-07 17:36:04 +08:00
Frank Song 91f99d8194 fix(oauth): serialize Anthropic env fallback reads 2026-05-07 02:47:19 +00:00
Frank Song d76ef2a2b6 Cover CLI compression lineage filtering 2026-05-05 01:52:42 +00:00
Frank Song 8981d33543 Fix CLI session CI compatibility 2026-05-05 01:52:42 +00:00
Frank Song 79d0762d8c Filter low-value CLI agent sessions 2026-05-05 01:52:42 +00:00
Frank Song 59efb42dcd Show Hermes Agent version in settings 2026-05-04 23:57:56 +08:00
Frank Song 3f56ed7283 Polish forked session indicator 2026-05-04 21:50:40 +08:00
Frank Song 26208e46ae fix(server): clean up dead socket code and fix macOS keepalive (closes #1583)
- Delete QuietHTTPServer.server_bind() override entirely:
  TCP_KEEP* setsockopts on the listening socket are no-ops without
  SO_KEEPALIVE, and SO_REUSEADDR=1 is already set by the parent class.
  The actual fix lives entirely in Handler.setup().

- Restructure Handler.setup() with per-platform branches so
  SO_KEEPALIVE=1 is always applied before timing params, and macOS
  (TCP_KEEPALIVE) gets keepalive instead of aborting on TCP_KEEPIDLE.
2026-05-04 16:35:42 +08:00
Frank Song cdcd6021cc fix(cron): tighten worker-side broad-except in _run_cron_tracked (closes #1578)
Remove the try/except Exception wrapper around
cron_profile_context_for_home(...).__enter__() in _run_cron_tracked.
A silent fallback to ctx=None would leave the worker thread unpinned
against process-global HERMES_HOME, silently corrupting cross-profile
state — the same class of bug as #1573.

Add regression test to catch any future re-introduction.
2026-05-04 16:28:33 +08:00
Frank Song 7689046305 Polish handoff flyout alignment 2026-05-03 16:35:50 +00:00
Frank Song c7e52084ba Harden messaging channel handoff 2026-05-03 16:35:50 +00:00
Frank Song 20ef643bb8 Add messaging session handoff summary 2026-05-03 16:35:22 +00:00
Frank Song 57eb2fbf56 fix: update test assertion to match corrected Unicode codepoint (\u2442) 2026-05-03 15:36:05 +08:00
Frank Song dc7b142bb5 fix: use correct Unicode codepoint for branch indicator (⑂ not ⒂)
\u2482 (PARENTHESIZED DIGIT FIFTEEN, displayed as ⒂) → \u2442 (OCR FORK, displayed as ⑂)

Fixes #1522
2026-05-03 15:31:15 +08:00
Frank Song ac3d336875 fix: onboarding API-key input loses focus when probe completes (#1503)
The onboarding wizard's API-key input calls _scheduleOnboardingProbe()
on every keystroke (oninput). When the 400ms-debounced probe completes,
_setOnboardingProbeState() calls _renderOnboardingBody() which rebuilds
the entire form — destroying and recreating the <input> element. The
user's focus and cursor position are lost.

On fast connections (localhost) the probe completes between keystrokes
so the bug window is narrow. On slow networks (VPN, corporate proxy,
cold-start vLLM) the re-render routinely lands mid-typing.

Fix: remove _scheduleOnboardingProbe() from the api-key input's
oninput handler. The probe still fires on:
- baseUrl input change (oninput + debounce, unchanged)
- api-key field blur (onblur, added)
- 'Test connection' button click (unchanged)
- nextOnboardingStep() before Continue (unchanged)

The baseUrl input retains the oninput probe because the UX trade-off
is acceptable there (text input preserves visible content on re-render).
2026-05-03 15:05:40 +08:00
Frank Song f32989d5bb fix: voice-mode pref toggle-off now stops the recognizer (#1491)
When a user disables 'Hands-free voice mode' in Settings while voice
mode is active, the button hides but the SpeechRecognition keeps
running — the user can't stop it because the button is invisible.

Fix: _applyVoiceModePref() now checks if voice mode is active and
calls _deactivate() when the pref is toggled off. Move
_voiceModeActive declaration above the function to avoid TDZ.

Also removes a duplicate window._applyVoiceModePref assignment.
2026-05-03 15:03:17 +08:00
Frank Song 8f3dbe185d fix: consolidate __CACHE_VERSION__ → __WEBUI_VERSION__ (#1509)
__CACHE_VERSION__ (sw.js) and __WEBUI_VERSION__ (index.html) are
functionally identical — both resolve to quote(WEBUI_VERSION, safe='')
at request time. Two names exist for historical reasons (different files
added at different times).

Rename __CACHE_VERSION__ → __WEBUI_VERSION__ in:
- static/sw.js (CACHE_NAME + VQ constant + comment)
- api/routes.py (substitution string)
- tests/test_pwa_manifest_sw.py (all assertions)

Single canonical name. No behavior change — same ?v=vX.Y.Z query strings
on the same URLs.
2026-05-03 14:59:37 +08:00
Frank Song b57e80f706 fix: YAML code blocks collapse newlines due to Prism token white-space (#1463)
Prism's YAML grammar wraps tokens in <span> elements where white-space
defaults to normal, collapsing \n characters into spaces. The DOM
textContent is correct (confirmed by reporter's probe), so the bug is
purely CSS.

Force white-space:pre on .token elements inside language-yaml code
blocks for both .msg-body and .preview-md contexts.
2026-05-03 14:54:34 +08:00
Frank Song d9a66d1ace fix: update Korean locale test to match renamed i18n key 2026-05-01 22:55:46 +08:00
Frank Song 5679ef039c fix: rename 'CLI sessions' to 'non-WebUI sessions' in Settings toggle
The Settings toggle label previously said 'Show CLI sessions' or 'Show
agent sessions', but the feature actually surfaces conversations from
CLI, Telegram, Discord, Slack, WeChat, and other non-WebUI channels.

- Rename i18n key: settings_label_cli_sessions → settings_label_external_sessions
- Rename i18n key: settings_desc_cli_sessions → settings_desc_external_sessions
- Update all 8 languages (en, zh, zh-TW, ru, es, de, pt, ko)
- Reorder channel examples by global adoption: Telegram, Discord, Slack
- Update HTML fallback text to match new English strings
2026-05-01 22:40:53 +08:00
Frank Song 9350af6fd7 Update reasoning metadata guards for context split 2026-04-29 16:46:32 +08:00
Frank Song 22cf29d477 Restore terminal resize and collapse controls 2026-04-29 16:45:26 +08:00
Frank Song 1ed1ce219d Preserve transcript across context compaction 2026-04-29 16:37:08 +08:00
Frank Song b277e195fe Fix MiniMax China provider visibility 2026-04-29 15:50:32 +08:00
Frank Song 2f0d036455 Add terminal locale coverage 2026-04-29 04:37:31 +00:00
Frank Song eb9614854e Refine embedded terminal card entrypoint 2026-04-29 04:37:31 +00:00
Frank Song 940c82b2da Synchronize initial terminal open layout 2026-04-29 04:37:30 +00:00
Frank Song 70417359e3 Synchronize dock expand layout 2026-04-29 04:37:28 +00:00
Frank Song 8e67e4aa78 Add controlled terminal card resizing 2026-04-29 04:37:27 +00:00
Frank Song 4575cae9db Keep terminal card from covering transcript 2026-04-29 04:37:26 +00:00