Commit graph

4720 commits

Author SHA1 Message Date
Michael Lam
0736e45485 fix: dedupe tool-only partial recovery markers 2026-05-19 11:16:21 -07:00
Michael Lam
bc7648271f fix: preserve provider for configured model picker selections 2026-05-19 08:05:52 -07:00
Lumen Yang
a8d429775c fix(webui): preserve casual chat compaction guard 2026-05-19 14:34:58 +00:00
AJV20
d3a07b8df6 test: Use generic redaction fixture 2026-05-19 10:28:00 -04:00
AJV20
d43de57180 test: Use generic redaction fixture 2026-05-19 10:27:58 -04:00
AJV20
f93e288214 Fix stale stream recovery writeback race 2026-05-19 10:26:45 -04:00
Florian Krause
646f18c696 fix: prevent queued follow-up message from draining into wrong chat
When a queued message was waiting for the active stream to finish,
the 120ms setTimeout drain in setBusy(false) would write the queued
text to the shared #msg composer and call send(), which reads
S.session.session_id at call time. If the user switched to a different
chat during the 120ms window, the queued message was sent to the
wrong session.

Two fixes:

1. setBusy(false) drain: guard the setTimeout callback — if the
   currently viewed session no longer matches the drain session,
   put the message back into the original session's queue instead
   of sending it.

2. _sendInProgress re-queue: track _sendInProgressSid alongside
   _sendInProgress so that when a concurrent send() is caught by the
   guard, the re-queued message targets the in-flight session rather
   than the currently viewed one.
2026-05-19 15:50:12 +02:00
dobby-d-elf
2a95c1e482 Fix profile-aware assistant display names 2026-05-19 07:17:11 -06:00
Michael Lam
71d8a8fb1b fix: reap terminal shells on shutdown 2026-05-19 04:57:51 -07:00
Michael Lam
79652935d3 fix: centralize workspace tree toggle width 2026-05-19 01:49:52 -07:00
starship-s
2e9ca283dc fix: display canonical cache hit percentage 2026-05-19 02:27:12 -06:00
Lumen Yang
600bb48970 fix(webui): use active state db for metadata summary 2026-05-19 08:02:43 +00:00
Lumen Yang
6ca63e5815 perf(webui): keep external refresh metadata cheap 2026-05-19 08:02:43 +00:00
Lumen Yang
a63ab310b5 fix(webui): preserve reconciled session invariants 2026-05-19 08:02:43 +00:00
Lumen Yang
f12fef280d fix(webui): clear stale prompts on external refresh
Force same-session external refreshes to dismiss stale approval and clarification prompts immediately so completed state.db updates do not leave the composer blocked.
2026-05-19 08:02:43 +00:00
Lumen Yang
467ef33a24 feat(webui): reconcile external session updates
When API server runs append messages directly to state.db, reconcile WebUI sidecar sessions with those canonical rows across API responses, model-facing streaming context, and active browser refresh.

Add append-only state.db merge helpers, metadata-only counts for refresh polling, and regression coverage for API visibility, context incorporation, and frontend refresh behavior.
2026-05-19 08:02:43 +00:00
dobby-d-elf
11e1e9a342 Fix settled rendering for file markdown links 2026-05-18 22:32:20 -06:00
dobby-d-elf
ebf60ba7f9 Merge remote-tracking branch 'origin/master' into fix/session-list-touch-actions 2026-05-18 22:22:35 -06:00
Michael Lam
960c95cfe3 docs(runtime): define runner sidecar gate 2026-05-18 21:06:05 -07:00
Michael Lam
209b8928c4 Merge origin/master into CLI sessions PR 2026-05-18 20:56:38 -07:00
nesquena-hermes
71c70352c1
Merge pull request #2570 from nesquena/stage-385
Stage 385 / v0.51.92 — Release BP — 7-PR full sweep batch
2026-05-18 20:37:24 -07:00
nesquena-hermes
a978612b76 Update brittle-source-string assertions for widened compressed-event guard 2026-05-19 03:21:26 +00:00
nesquena-hermes
e5831043a1 Stamp CHANGELOG for v0.51.92 (Release BP / stage-385 / 7-PR full sweep batch) 2026-05-19 03:14:54 +00:00
nesquena-hermes
3da564a9c3 Move PR #2548 screenshots into docs/pr-media/2548 (project convention) 2026-05-19 03:14:04 +00:00
nesquena-hermes
d880e9c4b3 Stage 385: PR #2548 2026-05-19 03:13:47 +00:00
nesquena-hermes
54875f2110 Stage 385: PR #2550 2026-05-19 03:13:47 +00:00
nesquena-hermes
d92e44ef5a Stage 385: PR #2568
# Conflicts:
#	CHANGELOG.md
2026-05-19 03:13:47 +00:00
nesquena-hermes
e9079548ab Stage 385: PR #2567
# Conflicts:
#	CHANGELOG.md
2026-05-19 03:13:47 +00:00
nesquena-hermes
975928ffb7 Stage 385: PR #2561 2026-05-19 03:13:46 +00:00
nesquena-hermes
ed4e7e67ce Stage 385: PR #2563
# Conflicts:
#	CHANGELOG.md
2026-05-19 03:13:46 +00:00
nesquena-hermes
dfddf25233 Stage 385: PR #2560 2026-05-19 03:13:46 +00:00
Michael Lam
1827ea3efd fix: add Grok OAuth provider catalog support 2026-05-18 19:51:01 -07:00
Dennis Soong
ea978a1989 fix: surface auto-compression handoff 2026-05-19 10:45:43 +08:00
Bryan Bartley
6caf86ba96 feat(workspace): download folder as zip via /api/folder/download
Adds a "Download Folder" item to the workspace file-tree right-click
menu and a GET /api/folder/download endpoint that streams the
directory as a zip with Content-Disposition: attachment.

Configurable caps:
  HERMES_WEBUI_FOLDER_ZIP_MAX_MB    (default 1024)
  HERMES_WEBUI_FOLDER_ZIP_MAX_FILES (default 50000)

Pre-flights the walk so cap-exceeded returns 413 + JSON BEFORE any
zip bytes are sent. Symlinks resolving outside the workspace are
skipped. Mirrors the existing _handle_file_raw shape (session_id
resolution, safe_resolve, RFC 5987 filename via
_content_disposition_value). Stdlib zipfile only; no new dependencies.

Tests: 11 static-inspection tests matching the style of
tests/test_issue1867_upload_size_preflight.py. All passing on
Python 3.11/3.12/3.13.
2026-05-18 21:40:02 -05:00
Michael Lam
b473b21a2f fix: align workspace tree file icons 2026-05-18 18:38:13 -07:00
AJV20
ac19de9526 Merge remote-tracking branch 'origin/master' into fix/webui-context-parity
# Conflicts:
#	CHANGELOG.md
2026-05-18 21:37:52 -04:00
Michael Lam
a48e47dd1c feat: separate CLI sessions in sidebar 2026-05-18 17:29:51 -07:00
Nanook Claw
b6b9deca4c
fix: refresh project move cache 2026-05-19 00:08:07 +00:00
keyos
a5a0de2ad6 screenshots: PWA viewport gate evidence for PR #2548 2026-05-18 23:42:39 +00:00
Michael Lam
11bcf812e0 docs(runtime): clarify queue adapter staging 2026-05-18 16:34:16 -07:00
nesquena-hermes
718a4c7615
Merge pull request #2557 from nesquena/stage-384
Stage 384 / v0.51.91 — Release BO — 5-PR full sweep batch
2026-05-18 15:54:07 -07:00
nesquena-hermes
0bb8fde586 Mark ControlResult unsafe_hash=False with explainer (Opus advisor followup) 2026-05-18 22:50:45 +00:00
nesquena-hermes
4a49226439 Stamp CHANGELOG for v0.51.91 (Release BO / stage-384 / 5-PR full sweep batch) 2026-05-18 22:45:57 +00:00
nesquena-hermes
4f90fc5339 Stage 384: PR #2544 2026-05-18 22:44:02 +00:00
nesquena-hermes
589e0bf490 Stage 384: PR #2556
# Conflicts:
#	CHANGELOG.md
2026-05-18 22:44:02 +00:00
nesquena-hermes
91099051c6 Stage 384: PR #2505
# Conflicts:
#	CHANGELOG.md
2026-05-18 22:44:02 +00:00
nesquena-hermes
2675b6266d Stage 384: PR #2520
# Conflicts:
#	CHANGELOG.md
2026-05-18 22:44:02 +00:00
nesquena-hermes
c13f15b2fc Stage 384: PR #2536 2026-05-18 22:43:52 +00:00
Michael Lam
6917b9a0e7 fix: sanitize custom provider env hints 2026-05-18 15:18:20 -07:00
Ruslan
6d8e5031fc
Merge branch 'master' into fix/archive-extract-respects-attachment-dir 2026-05-18 23:01:23 +03:00