Commit graph

3039 commits

Author SHA1 Message Date
nesquena-hermes
0be9874549 Merge pull request #2918
# Conflicts:
#	CHANGELOG.md
2026-05-25 17:17:31 +00:00
nesquena-hermes
6eaddada93 Merge pull request #2934
# Conflicts:
#	CHANGELOG.md
2026-05-25 17:17:06 +00:00
nesquena-hermes
a0ab1687b1
Merge pull request #2944 from nesquena/release/stage-batch17
Release DG — stage-batch17 — 9-PR small-fix batch (v0.51.135)
2026-05-25 10:14:51 -07:00
nesquena-hermes
fe9d95e22b stage-batch17: skip #2927 test file when hermes-agent module not available (CI fix) 2026-05-25 17:11:59 +00:00
nesquena-hermes
41e424b3d5 stage-batch17: stamp v0.51.135 / Release DG 2026-05-25 17:06:27 +00:00
nesquena-hermes
fa9881445a stage-batch17: backfill CHANGELOG entries for #2906 and #2940 2026-05-25 17:03:00 +00:00
nesquena-hermes
f7ff8b5297 Merge pull request #2919
# Conflicts:
#	CHANGELOG.md
2026-05-25 17:02:33 +00:00
nesquena-hermes
bf28f400ec Merge pull request #2921
# Conflicts:
#	CHANGELOG.md
2026-05-25 17:02:16 +00:00
nesquena-hermes
67b41b2b54 Merge pull request #2927 2026-05-25 17:02:02 +00:00
nesquena-hermes
fdb0ccb392 Merge pull request #2940 2026-05-25 17:02:02 +00:00
nesquena-hermes
84218ce5a9 Merge pull request #2936
# Conflicts:
#	CHANGELOG.md
2026-05-25 17:02:02 +00:00
nesquena-hermes
d86aa6013f Merge pull request #2906 2026-05-25 17:01:47 +00:00
nesquena-hermes
da25aad946 Merge pull request #2912
# Conflicts:
#	CHANGELOG.md
2026-05-25 17:01:47 +00:00
nesquena-hermes
c876724ff4 Merge pull request #2922 2026-05-25 17:01:32 +00:00
nesquena-hermes
6b80df8252 Merge pull request #2917 2026-05-25 17:01:27 +00:00
george-andraws
fe597c1cdf fix chat upload attachment paths 2026-05-25 09:12:14 -07:00
Frank Song
aa6daf82f2 fix(gateway): treat active sessions as configured 2026-05-25 21:48:51 +08:00
Frank Song
e265389116 perf(sessions): prime missing index in background 2026-05-25 21:21:20 +08:00
carryzuo00
2881fcec89 fix(agent_health): detect profile-scoped gateway.pid for correct status
_gateway_root_pid_path() unconditionally returned <hermes_root>/gateway.pid.
Profile-scoped gateways (started with --profile <name> or via active_profile)
write their runtime files under <hermes_root>/profiles/<name>/ instead of the
root, so the root-level path never existed.

build_agent_health_payload() therefore always received a non-existent pid_path,
fell through to the stale root-level gateway_state.json, and returned alive=None.
This caused the cron/scheduled-jobs page to display "Gateway not configured" even
when a gateway was actively running.

Fix: after failing to find a root-level gateway.pid, fall back to the active
profile directory via get_active_hermes_home(). Root-level wins when it exists,
so deployments that do write there are unaffected. Errors from profile lookup are
swallowed and the root path is returned, preserving the previous safe default.

Adds five focused unit tests covering the new fallback, the priority rule, and
the error-handling path.
2026-05-25 10:35:37 +00:00
ai-ag2026
5e1b51d16f docs: add canonical session resolution contract 2026-05-25 11:14:15 +02:00
Frank Song
cfca26f2e8 Repaint sidebar after session archive or delete 2026-05-25 16:31:15 +08:00
Frank Song
10463158f8 docs: add clarify dialog screenshot evidence 2026-05-25 16:25:11 +08:00
Frank Song
89d8c3a94c fix: cap live tool prompt estimate per turn 2026-05-25 16:04:40 +08:00
Frank Song
85e13a6121 fix: reserve space for clarify dialogs 2026-05-25 15:58:27 +08:00
Frank Song
21e981a166 test: cover metadata-only profile routing 2026-05-25 15:50:47 +08:00
ai-ag2026
21655af09b fix(chat): accept session_id URL parameter 2026-05-25 07:59:21 +02:00
ai-ag2026
17233293ac fix(chat): dedupe uploaded-file pending turns 2026-05-25 06:11:22 +02:00
nesquena-hermes
4ea762ae0d
Merge pull request #2903 from nesquena/release/stage-batch16
Release DF / v0.51.134 — stage-batch16 (Windows path defaults align with agent)
2026-05-24 19:07:57 -07:00
nesquena-hermes
cc8a79cec4 Stamp CHANGELOG for v0.51.134 (Release DF / stage-batch16)
Single-PR Windows-paths align fix:
- PR #2897 (chouzz) — align WebUI default state/config paths with Hermes Agent's
  %LOCALAPPDATA%\hermes on Windows. POSIX behavior unchanged.

Cherry-picked clean from contributor tip to dodge stale-base trap (net master→PR
delta was -2184 LOC due to ~2-week-old base).

Gates passed:
- Pre-Opus: Python ast.parse on api/config.py, api/profiles.py, new test file
- Stale-base check: cherry-picked diff matches contributor's actual change (6 files, +55/-17)
- Opus advisor: SHIP-AS-IS, Linux no-op invariant verified
- Full pytest sequential: 6540 passed, 6 skipped, 3 xpassed, 0 failures (179s)

Closes #2840.
2026-05-25 02:04:15 +00:00
nesquena-hermes
0645cfe7d2 chore(changelog): add Unreleased entry for #2897 Windows paths fix 2026-05-25 02:03:26 +00:00
Harlan Zhou
e8b426d825 test: avoid global env-coupled defaults regression 2026-05-25 01:58:32 +00:00
Harlan Zhou
f8a7726e09 fix(windows): align WebUI defaults with Hermes Agent home path 2026-05-25 01:58:32 +00:00
nesquena-hermes
75e0e67af2
Merge pull request #2900 from nesquena/release/stage-batch15
Release DE / v0.51.133 — stage-batch15 (6 low-risk contributor PRs)
2026-05-24 18:57:01 -07:00
nesquena-hermes
36cd8acb98 Stamp CHANGELOG for v0.51.133 (Release DE / stage-batch15)
Six-PR low-risk contributor batch:
- PR #2891 (franksong2702) — validate auxiliary model task slots
- PR #2892 (franksong2702) — gate workspace artifact mutation paths
- PR #2893 (franksong2702) — reject update apply with no targets
- PR #2895 (franksong2702) — preserve cached agent prefill context
- PR #2894 (franksong2702) — Joplin token in Authorization header
- PR #2896 (franksong2702) — localize third-party notes drawer copy

Pre-Opus gates: Python/JS syntax OK, no merge markers, all entries present.
Opus advisor: SHIP-AS-IS (no MUST-FIX, no SHOULD-FIX).
Full pytest sequential: 6545 passed, 6 skipped, 3 xpassed, 0 failures (174s).
2026-05-25 01:53:51 +00:00
nesquena-hermes
ba4f1e58ed chore(changelog): add missing #2892 Unreleased entry 2026-05-25 01:47:49 +00:00
nesquena-hermes
18c94ad324 Merge pull request #2896 — localize third-party notes drawer copy
# Conflicts:
#	CHANGELOG.md
2026-05-25 01:47:24 +00:00
nesquena-hermes
7e22c4edd5 Merge pull request #2894 — send Joplin token in Authorization header
# Conflicts:
#	CHANGELOG.md
2026-05-25 01:47:23 +00:00
nesquena-hermes
15dc7373c1 Merge pull request #2895 — preserve cached agent prefill context
# Conflicts:
#	CHANGELOG.md
2026-05-25 01:47:23 +00:00
nesquena-hermes
e8ab7410df Merge pull request #2893 — reject update apply with no selected target
# Conflicts:
#	CHANGELOG.md
2026-05-25 01:47:23 +00:00
nesquena-hermes
16983d3ab8 Merge pull request #2892 — gate workspace artifact read-only tool paths
# Conflicts:
#	CHANGELOG.md
2026-05-25 01:47:23 +00:00
nesquena-hermes
d513c4cd45 Merge pull request #2891 — validate auxiliary task slots 2026-05-25 01:46:49 +00:00
Frank Song
d2e4dfabb4 fix: localize external notes drawer copy 2026-05-25 08:51:44 +08:00
Frank Song
dc86841547 fix: send joplin token in auth header 2026-05-25 08:51:44 +08:00
Frank Song
535c238285 fix: preserve cached agent prefill context 2026-05-25 08:51:44 +08:00
Frank Song
3836b5eee0 fix: block update apply without targets 2026-05-25 08:51:44 +08:00
Frank Song
3c9b72f75a fix: gate workspace artifact mutation paths 2026-05-25 08:51:44 +08:00
Frank Song
826e719a29 fix: validate auxiliary model task slots 2026-05-25 08:51:44 +08:00
nesquena-hermes
4132085e0c
Merge pull request #2889 from nesquena/release/stage-batch14
Release/stage-batch14
2026-05-24 17:39:33 -07:00
nesquena-hermes
a1e5f89ce8 Stamp CHANGELOG for v0.51.132 (Release DD / stage-batch14)
4-PR low-risk batch:
- #2685 LumenYoung: replayed-context dedup fix + live tool prompt cap
- #2739 ai-ag2026: interrupted-response classification + SSE diagnostics
  (rate-limited 30/60s, 4KB body cap, payload sanitized)
- #2824 gavinssr: shutdown server affordance — relocated to Settings
- #2859 AJV20: passkey/WebAuthn sign-in (opt-in default-off behind
  HERMES_WEBUI_PASSKEY / webui_passkey_enabled feature flag)

Opus Advisor verdict: SHIP-WITH-SHOULD-FIXES applied.
Zero MUST-FIX. 4/5 SHOULD-FIX patched inline. 1 deferred to follow-up
(live tool metering cumulative cap).
2026-05-25 00:27:30 +00:00
nesquena-hermes
1c2d574882 Stage-batch14: Opus advisor SHOULD-FIX patches (UX + defense-in-depth)
Inline fixes for 4 of 5 Opus SHOULD-FIX items before tag:

1. /api/auth/status now gates passkeys_enabled / passwordless_enabled on
   _passkey_feature_flag_enabled() — when flag is off, status reports
   no credentials even if passkeys.json has legacy entries. New
   passkey_feature_flag field added to the response for the frontend.

2. Settings → System Passkeys block (passkeysSettingsBlock) now starts
   display:none and loadPasskeys() reveals it only when the server
   confirms passkey_feature_flag === true AND /api/auth/passkeys
   doesn't return {disabled: true}. Stops the broken-affordance trap
   where users would see Add passkey → click → 404.

3. /api/settings/save now refuses to set passwordless mode when the
   passkey feature flag is off. Closes the auth-bypass path Opus flagged:
   user goes passwordless while flag on → admin unsets flag → restart
   serves the WebUI fully unauthenticated.

4. CHANGELOG entries added for PR #2685 (replayed-context dedup +
   per-turn metering cap) and PR #2824 (Stop server affordance,
   relocated to Settings) — both PRs had functional changes but no
   release-notes entries. Also enriched the rate-limit detail on the
   #2739 entry (30 events / 60s / 4KB body cap).

Deferred to follow-up issue (#5 in Opus review):
- Live tool metering cumulative cap across many tool calls — non-trivial
  refactor of _bump_live_prompt_estimate, will be a separate PR
2026-05-25 00:26:40 +00:00