180 Commits

Author SHA1 Message Date
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
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 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