Commit graph

299 commits

Author SHA1 Message Date
nesquena-hermes
c7e7029ab4 Merge pull request #2950
# Conflicts:
#	CHANGELOG.md
2026-05-26 23:51:39 +00:00
nesquena-hermes
ac64f5c7fc Merge pull request #2972
# Conflicts:
#	CHANGELOG.md
2026-05-26 23:50:51 +00:00
Michael Lam
1b05d6031e docs(runtime): define runner client backend gate 2026-05-26 04:06:12 -07:00
Sanjay Santhanam
cf94f2f7c4 docs(docker): promote scheduled-jobs section to H2 + runnable verify command (review feedback from @nesquena-hermes) 2026-05-25 23:11:59 -07:00
Frank Song
fb2b1ebd19 Clarify contract routing coverage boundary 2026-05-26 11:32:34 +08:00
Frank Song
8f152a005e docs: require contract change routing 2026-05-26 10:06:50 +08:00
Frank Song
26fb71839e fix(chat): keep visible interim progress in timeline 2026-05-26 09:53:55 +08:00
Sanjay Santhanam
655b5f9101 docs(docker): point gateway-not-configured banner at a real fix
Scheduled cron jobs created in the Tasks panel never tick on a
single-container Docker install because the WebUI doesn't run the
gateway daemon itself. The maintainer's analysis on #2785 spells this
out: the gateway ticks the scheduler every 60s, and without it
'Gateway not configured' just sits there.

The Tasks panel already shows a banner explaining this, but doesn't
give the user anywhere to go. Two small docs-shaped changes:

1. Add a 'Scheduled jobs require a gateway daemon' section to
   docs/docker.md under 'What goes wrong' with the two-container
   compose command and a verify step. Cross-linked from the existing
   short paragraph higher up so both entry points land on the same
   fix.

2. Append a 'How to enable scheduled jobs in Docker' link to the
   cron panel banner (loadCronGatewayNotice) pointing at the new
   docs anchor when the gateway is unconfigured. The banner text
   itself is unchanged.

Verified locally by serving the WebUI without a gateway, opening
Tasks, and confirming the banner now shows the new link; clicked it
and confirmed it lands on the new docs section. With the gateway
running the banner stays hidden as before.

Refs #2785
2026-05-25 11:35:24 -07:00
nesquena-hermes
f7ff8b5297 Merge pull request #2919
# Conflicts:
#	CHANGELOG.md
2026-05-25 17:02:33 +00:00
ai-ag2026
5e1b51d16f docs: add canonical session resolution contract 2026-05-25 11:14:15 +02:00
Frank Song
10463158f8 docs: add clarify dialog screenshot evidence 2026-05-25 16:25:11 +08:00
Harlan Zhou
f8a7726e09 fix(windows): align WebUI defaults with Hermes Agent home path 2026-05-25 01:58:32 +00:00
ai-ag2026
8a2f11c770 fix(chat): log sanitized client sse diagnostics
(cherry picked from commit 749ca6e18c5e307fbf7e7fb5fffce97249545017)
2026-05-25 02:06:42 +02:00
ai-ag2026
2f1ca959f1 fix(chat): classify interrupted response causes
(cherry picked from commit 5c1e802cd6ee8565da74c7ffe57e6407fe21bf02)
2026-05-25 02:06:42 +02:00
ai-ag2026
efe3d7c296 fix(chat): avoid false restart wording for interrupted responses
(cherry picked from commit ef8fd879682aeb729a7b7afa1e7c46478ca5ebb6)
2026-05-25 02:06:42 +02:00
Michael Lam
dd7648d56c feat(runtime): wire runner route selection harness 2026-05-24 18:26:55 +00:00
Frank Song
f1586daa3b fix(cron): surface gateway scheduling guidance 2026-05-24 15:52:35 +00:00
Michael Lam
581da3da2b feat: make clarify prompt collapsible 2026-05-22 17:45:40 +00:00
Michael Lam
bda91a6edd docs(runtime): define runner route gate 2026-05-22 04:08:59 -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
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
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
45c7a693af Stage 394: PR #2625 2026-05-20 23:53:04 +00:00
nesquena-hermes
e35c94bf55 Stage 393: PR #2615 2026-05-20 22:23:53 +00:00
nesquena-hermes
360a57164a Stage 389: PR #2627
# Conflicts:
#	CHANGELOG.md
2026-05-20 16:41:45 +00:00
nesquena-hermes
dd36d09f89 Stage 389: PR #2626
# Conflicts:
#	CHANGELOG.md
2026-05-20 16:41:45 +00:00
nesquena-hermes
84f6bf5323 Stage 389: PR #2619
# Conflicts:
#	CHANGELOG.md
2026-05-20 16:41:45 +00:00
Isla Liu
98106c809b docs(session): clarify lazy retry trigger for metadata-only polling 2026-05-20 20:55:08 +08:00
Michael Lam
680d0cbc92 docs(runtime): define runner backend harness gate 2026-05-20 04:05:36 -07:00
stocky789
9ac94d3ef6 fix(workspace): tighten git subprocess trust boundary 2026-05-20 11:02:45 +00:00
Michael Lam
c3eafa34f8 fix: surface custom provider model endpoint errors 2026-05-20 03:12:33 -07:00
stocky789
898e15a899 fix(workspace): restore branch changes on switch 2026-05-20 08:14:30 +00:00
Michael Lam
471b75d762 docs: move Hermes overview out of agent context root 2026-05-19 23:55:58 -07:00
Isla Liu
9870e8f111 fix(session): address Copilot review — scope tool-card dedupe by stream id + tighten docs
Four code-review comments from the automated Copilot reviewer on this PR:

1. `_journal_tool_already_present` dedupe was session-wide, so a
   legitimately-repeated tool (e.g. a second `terminal: ls` in an
   earlier turn) could cause the retry path to falsely skip
   materializing the recovered tool card.  The helper now takes a
   keyword `stream_id` argument; when supplied, a tool card whose
   `_recovered_stream_id` is set AND differs from the candidate is no
   longer treated as a duplicate.  Untagged tool cards (live tools, or
   tool cards carried over from a pre-tagging core transcript) still
   match, preserving the existing 'core transcript already has this
   tool, don't duplicate' invariant.  Two new tests in
   `TestJournalToolDedupeScoping` cover both legs of the rule.

2./3. The troubleshooting FAQ pointed at `~/.hermes/webui/sessions/session_<sid>.json`
   and `~/.hermes/_run_journal/...`.  The actual sidecar filename has
   no `session_` prefix and the run-journal lives under the WebUI
   sessions dir (`~/.hermes/webui/sessions/_run_journal/<sid>/<stream>.jsonl`,
   default).  Both paths fixed and an explicit note added about
   `HERMES_WEBUI_STATE_DIR` overriding the state root.

4. Drop unused `json` / `queue` / `Path` imports from
   `tests/test_session_lost_response_regression.py` so the file stops
   carrying noise that future linting would flag.
2026-05-20 12:18:03 +08:00
Isla Liu
66b6d8f019 docs(session): CHANGELOG entry + troubleshooting FAQ for the lost-response self-heal
CHANGELOG: append an Unreleased / Fixed entry describing the user-visible
behaviour change (interrupted-turn marker now self-heals on the next
session read; gives up gracefully after 12 retries or 24h).

docs/troubleshooting.md: add a 'Symptom → Why → Diagnostic → Fix →
Caps → When to file a bug' entry for the
'no agent output was recovered' marker so users who hit the lost-response
shape on WSL2 / network FS can recognise it, verify the run-journal on
disk, and know that reloading the session is enough.
2026-05-20 11:59:06 +08:00
Michael Lam
9ca846eb8f feat: cap pinned sessions from sidebar 2026-05-19 20:50:26 -07:00
Eleanor Berger
86d43751ad docs: include Geist Contrast in contracts index 2026-05-20 00:09:06 +00:00
Eleanor Berger
4598adfd04 feat: add Geist Contrast skin 2026-05-20 00:09:06 +00:00
Michael Lam
5770323188 feat(runtime): add runner adapter facade 2026-05-19 12:06:57 -07: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
3da564a9c3 Move PR #2548 screenshots into docs/pr-media/2548 (project convention) 2026-05-19 03:14:04 +00:00
nesquena-hermes
ed4e7e67ce Stage 385: PR #2563
# Conflicts:
#	CHANGELOG.md
2026-05-19 03:13:46 +00:00
Michael Lam
b473b21a2f fix: align workspace tree file icons 2026-05-18 18:38:13 -07:00
Michael Lam
a48e47dd1c feat: separate CLI sessions in sidebar 2026-05-18 17:29:51 -07:00
Michael Lam
11bcf812e0 docs(runtime): clarify queue adapter staging 2026-05-18 16:34:16 -07:00
Michael Lam
6a68bab114 fix(runtime): clarify goal adapter seam semantics 2026-05-18 12:10:17 -07:00
Michael Lam
b23fb6ccaa feat(runtime): route goal through adapter seam 2026-05-18 10:30:26 -07:00
nesquena-hermes
d161e9a074 Stage 383: PR #2528
# Conflicts:
#	CHANGELOG.md
2026-05-18 16:44:36 +00:00
nesquena-hermes
3bf2b10a68 Stage 383: PR #2509
# Conflicts:
#	CHANGELOG.md
2026-05-18 16:44:35 +00:00
nesquena-hermes
cd7ee68e02 Stage 383: PR #2511
# Conflicts:
#	CHANGELOG.md
2026-05-18 16:44:35 +00:00
Michael Lam
b76d698a79 fix: guard new conversation cold-start clicks 2026-05-18 06:48:05 -07:00
Frank Song
9d6eb5f0df Fix board selector label overlap 2026-05-18 16:02:56 +08:00
Michael Lam
9f1ff51950 docs(runtime): tighten queue goal gate 2026-05-17 23:17:46 -07:00
Frank Song
46029e0b1c docs: align uiux demo theme controls 2026-05-18 12:50:25 +08:00
Michael Lam
2a3c4abc60 docs(runtime): define queue goal control gate 2026-05-17 21:06:13 -07:00
nesquena-hermes
715017924c Stage 382: PR #2503 2026-05-18 03:45:42 +00:00
nesquena-hermes
a27f8c8c24
Merge pull request #2487 from Michaelyklam/docs/issue-1925-approval-clarify-gate
docs(runtime): define approval clarify control gate
2026-05-17 18:22:59 -07:00
Michaelyklam
d9e6dcf3ef docs(runtime): define approval clarify control gate 2026-05-18 01:06:26 +00:00
Michael Lam
310d69bed8 docs: inventory agent source boundary 2026-05-17 16:11:29 -07:00
Michael Lam
f2c5048741 docs(runtime): define cancel control gate 2026-05-17 11:30:50 -07:00
nesquena-hermes
5cc8b6c654 docs(docker): document agent-image upgrade flow + read-only WebUI source mount
The hermes-agent-src named volume in the two- and three-container compose
files is initialised from the agent image's /opt/hermes on first `up` and
Docker reuses it verbatim on every subsequent `up` — even after a fresh
`docker pull` of the agent image. This was the root cause of #1416 (the
'missing entrypoint' symptom was a stale cached volume hiding the new
image's source tree).

Changes:

- Add an 'Upgrading the agent container' section to docs/docker.md with
  the canonical `down → docker volume rm → pull → up -d` recipe, plus the
  same pointer as a comment block in both multi-container compose files
  near the volume declarations.
- Switch the WebUI's hermes-agent-src mount to `:ro` in both multi-container
  compose files. The WebUI only reads this volume to install the agent's
  Python deps at startup; mounting it read-only enforces that at the kernel
  layer and brings the actual mount mode in line with the existing
  docs/docker.md architecture diagram (which already labelled this edge as
  read-only).
- Align the workspace bind default in both multi-container compose files
  with the single-container convention — `${HERMES_WORKSPACE:-${HOME}/workspace}`
  instead of `${HERMES_WORKSPACE:-~/workspace}` — so the default resolves
  the same way across Linux, macOS, WSL2, and Docker Desktop on Windows.
- Add a 'What the multi-container setup isolates (and what it doesn't)'
  section to docs/docker.md to frame the two/three-container setups as
  process/network/resource isolation, not filesystem isolation, so users
  don't reach for multi-container expecting a trust boundary it doesn't
  provide.
- Cross-link #1416 from the Related issues section.

Adds 9 regression tests in tests/test_docker_docs_and_readonly.py covering:
- :ro on the WebUI side of hermes-agent-src in both files
- agent side stays read-write (still needs to populate /opt/hermes on first run)
- ${HOME} (not ~) in workspace bind defaults in both files
- single-container file already uses ${HOME} (pin to prevent drift)
- docs/docker.md has the 'Upgrading the agent container' section + recipe
- compose files reference docs/docker.md + show the upgrade step inline
- docs/docker.md frames the isolation model honestly

Test suite: 42 passed (33 existing Docker tests + 9 new). No behaviour
change for users who set HERMES_WORKSPACE explicitly, and no migration is
required for existing deployments — Docker rebinds the existing volume
read-only on next `up`. Users upgrading the agent image should now follow
the documented `docker volume rm hermes-agent-src` recipe.

Closes #1416 (documented upgrade procedure) and addresses the read-only
half of the multi-container coupling concern raised on #2453.
2026-05-17 17:18:39 +00:00
Michael Lam
2785065a09 feat: add thinking card copy button 2026-05-17 03:57:54 -07:00
nesquena-hermes
e9c6b7f06c Stage 375: PR #2432 — feat(theme): add Catppuccin appearance skin (Latte + Mocha palettes) by @Michaelyklam (closes #2426)
Co-authored-by: Michael Lam <michael@example.local>
2026-05-17 03:35:19 +00:00
Michael Lam
b985ca54dc docs: define runtime adapter seam contract 2026-05-17 00:41:20 +00:00
nesquena-hermes
55f2d6792b Stage 372: PR #2407 — docs: advance runtime adapter gate by @Michaelyklam 2026-05-16 23:02:42 +00:00
Hermes Agent
8b4f8b0600 Stage 369: PR #2347 — Preserve live agent timeline across session switches by @franksong2702 2026-05-16 20:03:43 +00:00
Frank Song
574ee36460 Add run journal replay timeline parity checks 2026-05-16 17:52:35 +08:00
Frank Song
faedcab739 Preserve live agent timeline across session switches 2026-05-16 14:12:08 +08:00
Frank Song
58a43d7abd Document WebUI run state consistency contract 2026-05-16 05:43:06 +00:00
Hermes Agent
d510b8d2d5 Merge pull request #2303 into stage-359
Add assistant question jump buttons (franksong2702, fixes #2246)

# Conflicts:
#	CHANGELOG.md
2026-05-15 14:55:15 +00:00
Hermes Agent
f7d98cdf3f Merge pull request #2301 into stage-359
Add cron detail expansion controls (franksong2702, fixes #2289)
2026-05-15 14:55:13 +00:00
Frank Song
05a5ed5af1 Add assistant question jump buttons 2026-05-15 19:39:27 +08:00
Frank Song
079d6b4e86 Add cron detail expansion controls 2026-05-15 18:04:53 +08:00
Jordan SkyLF
fb869bbeb3 Add offline banner comparison screenshots 2026-05-15 01:51:35 -07:00
Jordan SkyLF
2601d41149 Add offline banner theme screenshots 2026-05-15 01:03:48 -07:00
Hermes Agent
29c166d813 Merge pull request #2234 into stage-355
fix: refine update summary category handling (Jordan-SkyLF, post-v0.51.61 rebase)

# Conflicts:
#	CHANGELOG.md
2026-05-14 15:15:09 +00:00
Hermes Agent
673a927975 Merge pull request #2238 into stage-355
Improve phone sidebar panel navigation (franksong2702, fixes #2231)
2026-05-14 15:15:06 +00:00
Hermes Agent
116167ce00 Merge pull request #2250 into stage-355
[codex] Fix blank skill detail views (franksong2702, refs #1880)

# Conflicts:
#	CHANGELOG.md
2026-05-14 15:13:46 +00:00
Hermes Agent
6f5f5edb56 Merge pull request #2253 into stage-355
[codex] Show skill detail API errors (franksong2702)

# Conflicts:
#	CHANGELOG.md
2026-05-14 15:13:44 +00:00
Frank Song
a56ec43d29 Show skill detail API errors 2026-05-14 22:57:15 +08:00
Frank Song
5ba5551d05 Clarify runtime adapter replay gates 2026-05-14 22:42:15 +08:00
Frank Song
93de0d8c31 Add skill detail screenshot evidence 2026-05-14 22:35:02 +08:00
Frank Song
b2b38354db Update runtime adapter RFC gates 2026-05-14 22:34:51 +08:00
Jordan SkyLF
a291ffdde6 fix: refine update summary category handling
Keep distinct generated summary categories, route update-summary generation through the configured auxiliary model first, disclose capped large-range summary input, and constrain long summary panels.
2026-05-14 01:07:47 -07:00
Frank Song
6beb59d61f Improve mobile sidebar panel navigation 2026-05-14 15:16:33 +08:00
Hermes Agent
efad585b86 Merge pull request #2228 into stage-354
Add model picker to profile creation (franksong2702, refs #749)
2026-05-14 07:15:14 +00:00
Jordan SkyLF
afbcc9a6d5 fix: wrap update banner on mobile 2026-05-13 23:51:48 -07:00
Frank Song
8b30ade923 Add profile creation model picker 2026-05-14 12:13:49 +08:00
Hermes Agent
bfb62abe35 Merge pull request #2225 into stage-353
Add extra-large Appearance font size option (franksong2702)
2026-05-14 03:43:52 +00:00
Frank Song
e2f319d730 Add extra large font size option 2026-05-14 11:09:21 +08:00
Frank Song
3d2f9cf699 Fix Appearance endless scroll label markup 2026-05-14 10:44:16 +08:00
Frank Song
996d4f9a8c Hide session lineage metadata in compact sidebar 2026-05-14 10:14:15 +08:00
Hermes Agent
70f09aaeb6 Merge pull request #2207 into stage-351
feat: add per-target update summaries with separate WebUI/Agent What's-new links (Jordan-SkyLF, fixes #1579)
2026-05-13 23:51:28 +00:00
Jordan SkyLF
25ce490e24 docs: add update banner summary mode screenshots 2026-05-13 16:27:06 -07:00
Jordan SkyLF
7d0a2c3621 docs: refresh update banner screenshots 2026-05-13 16:12:29 -07:00
Jordan SkyLF
cfc0f68d23 fix: show update whats-new links for webui and agent 2026-05-13 15:53:01 -07:00
Jordan SkyLF
9b2c402253 Add MCP tools overflow PR screenshots 2026-05-13 15:50:48 -07:00
Frank Song
65fa18c7d9 docs: add agent onboarding entrypoint 2026-05-13 16:47:14 +08:00
Frank Song
e177f64e78 Add worktree remove PR screenshots 2026-05-13 09:53:56 +08:00
Hermes Agent
2cccb8abcc Merge pull request #2120 into stage-344
fix: bucket long-range daily token charts (closes #2103)
2026-05-12 16:12:11 +00:00
Michael Lam
442f01bbca docs: document turn journal fsync tradeoff 2026-05-12 04:11:14 -07:00
Michael Lam
245288c00d fix: bucket long-range daily token charts 2026-05-11 23:01:13 -07:00
nesquena-hermes
43677b046d docs(rfcs): add anti-speculative-implementation conventions guidance
When merging PR #2105 (Hermes Run Adapter RFC) the standing concern was
that landing the RFC unconfirmed would invite the speculative-fragment
implementation pattern we just had to put on hold with PR #2071 — well-
written 651-LOC standalone scripts with no callers.

Add a single bullet to the conventions block so the contract is explicit:
an RFC is a design direction, not an invitation to PR fragments against
it. Implementation slices need maintainer confirmation first.

Applied during stage-341 build, not requested from @Michaelyklam — the
guardrail belongs in the conventions doc itself rather than as a one-off
ask on this PR.
2026-05-12 00:05:28 +00:00
Frank Song
2da4f108c5 Clarify worktree session archive/delete semantics
(cherry picked from commit f5c8fb58d1892f2c964389295530e8be5d84323f)
2026-05-12 00:05:05 +00:00
Michael Lam
de982d40a0 docs: add Hermes run adapter RFC
(cherry picked from commit 95cdaa6a1ff99ac1828faedb4ea68cc025a9f2e1)
2026-05-12 00:04:15 +00:00
nesquena-hermes
44e7378be8 Merge PR #2053: feat: worktree-backed session creation
# Conflicts:
#	CHANGELOG.md
2026-05-11 05:12:00 +00: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
nesquena-hermes
0c26ab3425 test(conftest): strip HERMES_WEBUI_SKIP_ONBOARDING env globally; rfcs: note discussion-first for contributor RFCs
Two follow-ups from Opus pre-release review of stage-336:

1. tests/conftest.py — autouse session fixture that removes
   HERMES_WEBUI_SKIP_ONBOARDING from os.environ for the whole pytest run, and
   restores it after. Hosting providers and isolated harnesses set this var
   to short-circuit the onboarding wizard, but it leaked into pytest and
   caused tests that exercise apply_onboarding_setup() to fail with cryptic
   FileNotFoundError. Tests that specifically validate the short-circuit
   behavior can opt back in with monkeypatch.setenv. Surgical per-test
   delenv calls remain as defense-in-depth but are now redundant.

2. docs/rfcs/README.md — one-line note that first-time contributor RFCs
   should be discussed in an issue before opening a PR. Gates drive-by
   design-doc PRs without us having to decline them on contribution.

Verified: 96 onboarding-related tests pass with HERMES_WEBUI_SKIP_ONBOARDING=1
exported in the test runner env (would have failed before this fixture).
2026-05-11 03:02:01 +00:00
nesquena-hermes
7690e08e70 docs(rfcs): establish docs/rfcs/ convention and polish turn-journal RFC
Moves docs/turn-journal-rfc.md → docs/rfcs/turn-journal.md, establishing
the convention for future design documents on hermes-webui's data-at-rest
and recovery surfaces. Adds docs/rfcs/README.md describing when an RFC
applies (large changes, durability/recovery semantics, new infrastructure
primitives) and the simple status header convention.

Polish on turn-journal.md:
- Added 3-line status header (Status / Author / Created) at top.
- Light tone edits on two flourishes that read fine in a PR description
  but felt off in permanent repo documentation. Author's voice preserved
  throughout the rest of the document.

Co-authored-by: ai-ag2026 <261867348+ai-ag2026@users.noreply.github.com>
2026-05-11 02:45:38 +00:00
ai-ag2026
c710efb463 docs: propose crash-safe turn journal 2026-05-11 02:43:00 +00:00
Michael Lam
c7afae0e07 fix: lengthen auto-compression toast 2026-05-09 19:35:05 -07:00
Michael Lam
b1b0cedbe9 security: harden production Docker image 2026-05-08 20:48:39 +00:00
Michael Lam
8e513b596b fix: surface goal evaluation status 2026-05-08 17:12:01 +00:00
Michael Lam
0db5bc6b76 feat: add WebUI goal command support 2026-05-08 17:12:01 +00:00
Michael Lam
6c4b769324 fix: scope skills endpoints to active profile 2026-05-08 16:07:49 +00:00
Frank Song
ee0828f53d fix: disable workspace heading affordance without workspace 2026-05-08 13:32:05 +08:00
Michael Lam
78c09e1fd9 fix: keep shell route errors html 2026-05-07 18:41:13 +00:00
Michael Lam
e31b7e72d6 fix: show auto-compression running state 2026-05-07 18:41:13 +00:00
Michael Lam
48773e8ff7 fix: allow no-agent cron edits without prompt 2026-05-07 17:59:23 +00:00
hermes-agent
0ed63968b6 Stage 314: PR #1827 — sync Codex provider card models with picker by @Michaelyklam
Note: PR #1827 was branched before v0.51.19 shipped #1812, which
introduced an initial (pure live-fetch) Codex provider card hook in
api/providers.py at the same line range. The contributor's PR was
filed AFTER #1812 shipped but their diff didn't yet account for it.
Stage 314 absorbs the contributor's intent (visible Codex cache
merge for gpt-5.3-codex-spark visibility) by replacing the v0.51.19
hook with the richer merged version directly in stage. Production
code change ≡ what the contributor's PR would have produced if
rebased onto current master. Test file + pr-media adopted verbatim.
Marker commit so the stage log makes the absorption visible.
2026-05-07 17:58:52 +00:00
Michael Lam
bb75707331 fix: surface stale Kanban client recovery 2026-05-07 17:57:09 +00:00
Michael Lam
f704fb52e8 fix: make error toasts copy-friendly 2026-05-07 16:59:00 +00:00
Michael Lam
20861b6721 fix: preserve first-turn sidebar row during refresh 2026-05-07 16:58:39 +00:00
Michael Lam
eeedccec58 fix: preserve sidebar scrolling while streaming 2026-05-07 06:25:17 +00:00
Michael Lam
f90f283b73 docs: add workspace breadcrumb before screenshot 2026-05-07 06:25:17 +00:00
Michael Lam
ee5600e46c fix: keep workspace open from preview breadcrumb 2026-05-07 06:25:17 +00:00
Michael Lam
048f1fa24e fix: keep assistant-only stream deltas on current turn 2026-05-07 06:25:16 +00:00
Michael Lam
24f76bcf37 fix: reset model picker on session switch 2026-05-07 02:52:01 +00:00
Michael Lam
0bd65ef0bf fix: preserve CLI session tool metadata 2026-05-07 02:47:19 +00:00
Michael Lam
2d20842450 fix: surface Codex usage exhaustion errors 2026-05-07 01:39:52 +00:00
Michael Lam
fdd6b83acb fix: allow profile switching during active streams 2026-05-06 16:11:46 +00:00
Michael Lam
ee9ae29596 fix: persist activity disclosure state 2026-05-06 06:30:32 +00:00
Michael Lam
47a3073882 docs: add compact activity summary screenshots 2026-05-06 06:27:14 +00:00
Michael Lam
e509faec44 feat: link Claude Code OAuth in onboarding 2026-05-06 06:26:43 +00:00
Michael Lam
ecdbc8d4df fix: prevent sticky sidebar hover drag state 2026-05-05 19:17:27 -07:00
nesquena-hermes
29878259ca docs(troubleshooting): bake the #1695 diagnostic flow into the error message + a new troubleshooting doc
Closes #1695.

@Patrick-81 reported the bare "AIAgent not available -- check that
hermes-agent is on sys.path" error on a symlinked install (~/Programmes/hermes-agent
linked to ~/hermes-agent). The maintainer's response — three diagnostic
commands plus `pip install -e .` in the agent dir — fixed it for them.
This PR captures both halves of that learning so the next user with the
same shape doesn't have to file a new issue:

1. **Error message diagnostic block.** New helper
   `_aiagent_import_error_detail()` in api/streaming.py builds a multi-line
   diagnostic when the import fails, including:
     - the running Python interpreter
     - HERMES_WEBUI_AGENT_DIR (set value, or "(not set)")
     - sys.path entries that mention hermes/agent (or "no entries mention..."
       — itself a strong diagnostic signal)
     - the most-common fix (`pip install -e .` in the agent dir)
     - a pointer to docs/troubleshooting.md

   The original error message string is preserved as the FIRST line so
   existing log scrapers and docs-search keep matching.

   Helper is kept as a separate function so it stays out of the hot path
   until we actually need to raise — building it on every successful import
   would be wasted work.

2. **New docs/troubleshooting.md.** Symptom → Why → Diagnostic commands →
   Fix → When-to-file-a-bug template, with one entry to start: the
   "AIAgent not available" flow Patrick-81 walked through. Future
   recurring failure modes follow the same template. Required a one-line
   addition to .gitignore — docs/* is gitignored with an allowlist, and
   the new file needed `!docs/troubleshooting.md` to be tracked.

3. **README link.** docs/troubleshooting.md added to the `## Docs` section
   so users know where to look first.

13 regression tests in tests/test_1695_aiagent_import_error_detail.py:
9 for the helper output shape (preserves original message line, includes
running python, shows HERMES_WEBUI_AGENT_DIR set/unset both ways, includes
pip-install-e hint, points at troubleshooting doc, lists relevant sys.path
entries when present, says "no entries..." when absent, output is multi-line)
plus 4 for the docs-presence regression (file exists, has the AIAgent
section, includes pip install -e ., describes the diagnostic chain with
readlink + agent/__init__.py verification).

190 streaming/aiagent tests pass after the change. ast.parse on
api/streaming.py clean.

CI failure on prior push was due to the docs/* gitignore swallowing the
new troubleshooting.md file silently — this commit adds the allowlist
entry so the file is tracked.
2026-05-05 22:14:07 +00:00
Nathan Esquenazi
b6567addb1 Stage 303: PR #1719 2026-05-05 21:58:21 +00:00
Michael Lam
2c5acb9725 feat: show active elapsed timer in compact activity 2026-05-05 13:42:47 -07:00
Michael Lam
dd2bc38473 fix: preserve activity count across chat focus changes 2026-05-05 13:42:45 -07:00
test
b59164b0a8 Stage 302: PR #1688 2026-05-05 17:31:01 +00:00
Michael Lam
fe9e4645ac fix: move system health panel into insights 2026-05-05 17:30:56 +00:00
Michael Lam
fdeac578da feat: add VPS resource health panel 2026-05-05 17:30:56 +00:00
Michael Lam
311e69b0ba fix: preserve scroll on stream completion 2026-05-05 09:23:29 -07:00
Nathan Esquenazi
debb4c5282 Stage 301: PR #1702 2026-05-05 15:41:43 +00:00
Nathan Esquenazi
8e7a9b1632 Stage 301: PR #1684 2026-05-05 15:41:43 +00:00
Michael Lam
c4ef5b6945 fix: invalidate model cache on auth-store drift 2026-05-05 08:33:44 -07:00
Michael Lam
ff232493ce fix: keep workspace rename double-click reachable 2026-05-05 08:33:34 -07:00
Michael Lam
03949f8093 fix: clarify update network failures 2026-05-04 21:02:03 -07:00