Commit graph

5792 commits

Author SHA1 Message Date
Rod Boev
2ea5fe06fa fix(#3825): harden oidc endpoint and claim validation 2026-06-30 20:59:19 -04:00
Rod Boev
600f1d3a61 test(#3825): fix OIDC regression checks 2026-06-29 22:31:45 -04:00
Rod Boev
39fbcb493b fix(auth): harden OIDC issuer and EC token checks (#3825) 2026-06-29 22:31:45 -04:00
Rod Boev
3b26cab859 fix(auth): keep OIDC startup warnings off the optional crypto path (#3825) 2026-06-29 22:31:45 -04:00
Rod Boev
f7a9c98810 fix(auth): harden OIDC key selection and startup guidance (#3825) 2026-06-29 22:28:53 -04:00
Rod Boev
7d0e86ecc5 fix(auth): require an explicit OIDC allowlist (#3825) 2026-06-29 22:28:53 -04:00
Rod Boev
1167617e74 fix(auth): harden OIDC login links and token handling (#3825) 2026-06-29 22:28:53 -04:00
Rod Boev
585fab50c2 fix(auth): keep login rendering stable while adding OIDC (#3825) 2026-06-29 22:28:53 -04:00
Rod Boev
e0e10cb106 feat(auth): add native OIDC login for WebUI sessions (#3825) 2026-06-29 22:28:53 -04:00
nesquena-hermes
ae8f42ec13
Merge pull request #5249 — fail closed on ambiguous truncate matches (#5212, @rodboev)
Release v0.51.760 — fail closed on ambiguous truncate matches (#5212, @rodboev)
2026-06-29 18:50:35 -07:00
nesquena-hermes
2f7fca5b40 docs(changelog): fail closed on ambiguous truncate matches, preserve kept turn + tool rows (#5212) 2026-06-30 01:47:41 +00:00
Rod Boev
07a8c7dc6f fix(session): preserve kept tool rows on ambiguous truncate (#5134) 2026-06-30 01:40:07 +00:00
Rod Boev
e9387f8aa5 fix(session): fail closed on ambiguous truncate context matches (#5134) 2026-06-30 01:40:07 +00:00
Rod Boev
02a3750488 fix(session): keep truncate rewind on complete turns (#5134) 2026-06-30 01:40:07 +00:00
Rod Boev
3627c9e5d8 fix(session): drop interleaved tool rows after mid-history truncate (#5134) 2026-06-30 01:40:07 +00:00
nesquena-hermes
edc20875fe
Merge pull request #5247 — repair bare custom-provider suffix on resolver slow path (#5246, @claw-io)
Release v0.51.759 — repair bare custom-provider suffix on resolver slow path (#5246, @claw-io)
2026-06-29 18:16:55 -07:00
nesquena-hermes
15492b9f29 docs(changelog): repair bare custom-provider suffix on resolver slow path (#5246) 2026-06-30 01:13:48 +00:00
b3nw
da43de72b8 fix(model): repair bare custom-provider suffix on resolver slow path (#5225)
Mirror the #5128 fast-path suffix repair when profile context is present
but requested_provider is omitted, which async delegation completion can
trigger via process_wakeup.

Co-authored-by: b3nw <b3nw@users.noreply.github.com>
2026-06-30 01:01:17 +00:00
nesquena-hermes
c229243f6d
Merge pull request #5243 — gate settled anchor fallbacks by raw index (#5242, @franksong2702)
Release v0.51.758 — gate settled anchor fallbacks by raw index (#5242, @franksong2702)
2026-06-29 17:22:52 -07:00
nesquena-hermes
de433e583b docs(changelog): gate settled anchor fallbacks by raw index (#5242) 2026-06-30 00:19:54 +00:00
Frank Song
eff01bf322 Gate settled anchor fallbacks by raw index 2026-06-30 08:00:54 +08:00
nesquena-hermes
dd4d4b2e90
Merge pull request #5241 — page archived sidebar rows + archived-search refetch (#5200, @santastabber)
Release v0.51.757 — page archived sidebar rows + archived-search refetch (#5200, @santastabber)
2026-06-29 15:38:06 -07:00
nesquena-hermes
b753a11895 docs(changelog): page archived sidebar rows + archived-search refetch (#5200) 2026-06-29 22:35:32 +00:00
Jamie (Hermes)
0674a0198c perf(sessions): page archived sidebar rows 2026-06-29 22:24:35 +00:00
nesquena-hermes
61f07f6005
Merge pull request #5238 — collapse post-restart config reload stampede (#5235, @rodboev)
Release v0.51.756 — collapse post-restart config reload stampede (#5235, @rodboev)
2026-06-29 14:01:13 -07:00
nesquena-hermes
2add66f66d docs(changelog): collapse post-restart config reload stampede (#5235) 2026-06-29 20:58:04 +00:00
Rod Boev
affdb40a1c fix(config): route stale model reads through shared reload gate (#5220) 2026-06-29 20:50:34 +00:00
Rod Boev
6653b7bd2f fix(config): collapse post-restart config reload stampede (#5220) 2026-06-29 20:50:34 +00:00
nesquena-hermes
45dabb2e15
Merge pull request #5236 — Neuralwatt provider env-var mapping (#4810, @b-yelverton)
Release v0.51.755 — Neuralwatt provider env-var mapping (#4810, @b-yelverton)
2026-06-29 13:49:08 -07:00
nesquena-hermes
cd67e67af1 docs(changelog): add Neuralwatt provider env-var mapping (#4810) 2026-06-29 20:42:54 +00:00
Brett Yelverton
6c73e417e0 test: add regression coverage for neuralwatt provider env-var mapping
Mirrors test_issue2025_xiaomi_env_key.py pattern:
- _PROVIDER_ENV_VAR['neuralwatt'] == 'NEURALWATT_API_KEY'
- _provider_has_key('neuralwatt') with env var set
- _provider_has_key('neuralwatt') without env var
- model group appears in get_available_models() when config lists models
2026-06-29 20:41:16 +00:00
Brett Yelverton
0c338711df feat: add Neuralwatt provider support (env var mapping) 2026-06-29 20:41:16 +00:00
nesquena-hermes
31000a9ec1
Merge pull request #5234 — configurable voice silence timeout + continuous recognition (#5176, @ChonSong)
Release v0.51.754 — configurable voice silence timeout + continuous recognition (#5176, @ChonSong)
2026-06-29 13:37:37 -07:00
nesquena-hermes
5fd6051743 test(#5176): update sprint20 continuous-recognition assertion for the new opt-in default-false form 2026-06-29 20:28:26 +00:00
nesquena-hermes
2643f990c4 docs(changelog): configurable voice silence timeout + continuous recognition (#5176) 2026-06-29 20:22:26 +00:00
nesquena-hermes
0aea4c7e18 harden(#5176): clamp configurable voice silence timeout (maintainer hardening)
Apply the warm-review polish: parseInt radix 10, fall back to 1800 for
missing/NaN/non-positive values, and floor at 200ms so a mistyped tiny/negative
hermes-voice-silence-ms can't make the recognizer auto-send instantly. De-brittle
the source-string test to assert behavior (reads key / 1800 fallback / guards
non-positive) instead of one literal expression. Default behavior unchanged.
2026-06-29 20:21:22 +00:00
Sean
5bfa9a8ec0 feat(voice): make silence timeout and continuous recognition configurable via localStorage
The voice-mode loop hardcoded SILENCE_MS=1800 and
_recognition.continuous=false, giving users no way to tune the
auto-send timing or keep the mic open across natural pauses.

Changes:
- SILENCE_MS now reads from localStorage key 'hermes-voice-silence-ms'
  with 1800ms fallback — users set it from the dev console or a future
  settings toggle
- _recognition.continuous reads from 'hermes-voice-continuous' (default
  false) — set to 'true' to keep the mic open across pauses within an
  utterance, with the silence timer remaining the sole send decision

New test file (tests/test_issue4761_voice_mode_config.py, 8 tests)
pins both localStorage reads and verifies the surrounding voice-mode
infrastructure is intact.

Refs #4761
2026-06-29 20:19:40 +00:00
nesquena-hermes
ca507138f7
Merge pull request #5233 — reduce false Connection Lost flapping under large session state (#5201, @franksong2702)
Release v0.51.753 — reduce false Connection Lost flapping under large session state (#5201, @franksong2702)
2026-06-29 13:16:25 -07:00
nesquena-hermes
978c5108bd docs(changelog): reduce false Connection Lost flapping under large session state (#5201) 2026-06-29 20:07:25 +00:00
nesquena-hermes
62fde9c32b test(#5201): widen hidden-tab skip-block window to 2900 after rebase (maintainer rebase-fix)
#5201 grows startSessionStream, pushing the hidden early-return skip path to
offset ~2247; #5172's test sliced an outer 2400 window that truncated the
skip_block before _startHiddenActiveStreamPoll(sid). Widen to 2900 so the
assertion reaches it. Both production hidden-poll paths are intact (Codex
verified); test-window only.
2026-06-29 20:06:18 +00:00
nesquena-hermes
ac9d9b8f8c test(#5201): widen sse-visibility reopen window to 2200 after master-rebase (maintainer rebase-fix)
The rebase onto current master (which carries #5172's window bumps) left the
reopen-path test window at 1600, but #5201 grows startSessionStream so the
'else if (_sessionStreamHiddenSid)' reopen assertion now lands at offset ~1741.
Widen to 2200 (matching #5201's sibling windows) so the assertion reaches the
code. Test-window only; production unchanged.
2026-06-29 19:53:25 +00:00
Frank Song
afbb3e5010 Fix session stream resume after live stream end
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-29 19:52:02 +00:00
Frank Song
47d8ac94d3 Harden connection flapping aftercare
Keep sidebar retries boot-scoped, preserve immediate source-change cache rebuilds, and tighten session stream ownership before closing duplicate SSE sockets.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-29 19:52:02 +00:00
Frank Song
cbb644da69 Reduce connection lost flapping under large session state 2026-06-29 19:52:02 +00:00
nesquena-hermes
ce425c7127
Merge pull request #5232 — anchor-fallback render-ownership regression harness (#5197, @franksong2702)
Release v0.51.752 — anchor-fallback render-ownership regression harness (#5197, @franksong2702)
2026-06-29 12:48:00 -07:00
nesquena-hermes
765460cb79 docs(changelog): anchor-fallback render-ownership regression harness (#5197) 2026-06-29 19:45:07 +00:00
Frank Song
7f98952db0 test: harden anchor fallback harness 2026-06-29 19:37:37 +00:00
Frank Song
7cdcadcbc4 test: lock anchor fallback render ownership 2026-06-29 19:37:37 +00:00
nesquena-hermes
99f487697d
Merge pull request #5230 — Polish virtualize-transcript i18n + BOM strip (#5216, @leszek3737)
Release v0.51.751 — translate Polish virtualize-transcript setting + strip BOM (#5216, @leszek3737)
2026-06-29 12:08:16 -07:00
nesquena-hermes
80b0b6d74b docs(changelog): translate Polish virtualize-transcript setting + strip BOM (#5216) 2026-06-29 19:05:29 +00:00