Commit Graph

6211 Commits

Author SHA1 Message Date
nesquena-hermes 24eb618571 Merge #5407: pin OpenAI TTS proxy connect target vs DNS-rebind TOCTOU (#5291) [rodboev] 2026-07-02 17:45:04 +00:00
nesquena-hermes 8c69382a01 Merge pull request #5426 from nesquena/release/stage-p1a
Release p1a — profile-switch new-session 404 (#5423) + health Bearer auth (#5424)
v0.51.824
2026-07-02 10:22:20 -07:00
nesquena-hermes 27df663246 docs(changelog): #5423 profile-switch new-session 404 + #5424 health Bearer auth 2026-07-02 17:08:16 +00:00
nesquena-hermes b184588e8a Merge #5424: Bearer auth on remote /health/detailed probe (#5418) [nankingjing] 2026-07-02 17:07:51 +00:00
nesquena-hermes 2f353e7a16 Merge #5423: unblock session/new after profile switch (#5420) [nankingjing] 2026-07-02 17:07:51 +00:00
nesquena-hermes 32baf1302b fix(routes): unblock session/new after profile switch (#5420)
Clean rebase of nankingjing's #5423 (rebase-first).

Co-authored-by: nankingjing <nankingjing@users.noreply.github.com>
2026-07-02 16:34:37 +00:00
nesquena-hermes 4d7fad06e6 fix(health): send Bearer auth on remote /health/detailed probe (#5418)
Clean rebase of nankingjing's #5424 (rebase-first).

Co-authored-by: nankingjing <nankingjing@users.noreply.github.com>
2026-07-02 16:24:39 +00:00
nesquena-hermes 56889fa35e fix(#5291): pin OpenAI TTS proxy + iterate vetted RRset (DNS-rebind TOCTOU)
Clean rebase of rodboev's #5407 (rebase-first).

Co-authored-by: rodboev <rodboev@users.noreply.github.com>
2026-07-02 14:38:09 +00:00
nesquena-hermes d096b5f5d9 Merge pull request #5405 from nesquena/gate-rebase/5162-steer-v3
Release v0.51.823: #5162 default message mode rename + steer default (#5145)
v0.51.823
2026-07-01 22:54:32 -07:00
nesquena-hermes 9714122c98 chore(changelog): #5162 default message mode rename + steer default 2026-07-02 05:45:54 +00:00
nesquena-hermes b931ae2f9b fix(settings): reconcile #5145 rename+steer-flip onto master's #5170 mirror
Rebase PR #5162 (rename busy_input_mode -> default_message_mode; flip the
default from 'queue' to 'steer') onto current origin/master WITHOUT dropping
the shipped #5170 localStorage persistence mirror.

Rename the mirror machinery to the new setting name for consistency:
  _BUSY_INPUT_MODES        -> _DEFAULT_MESSAGE_MODES        (values unchanged)
  _normalizeBusyInputMode  -> _normalizeDefaultMessageMode  (fallback now 'steer')
  _persistBusyInputMode    -> _persistDefaultMessageMode
  _readPersistedBusyInputMode -> _readPersistedDefaultMessageMode
  window._busyInputMode    -> window._defaultMessageMode (+ renamed exports)

localStorage: write the new 'hermes-default-message-mode' key; read it with a
fallback to the legacy 'hermes-busy-input-mode' key so an existing user's
persisted preference survives the rename.

Preserve #5170 behavior at every mirror site under the new names:
  - boot success  -> window._defaultMessageMode=_persistDefaultMessageMode(...)
  - boot FAILURE  -> window._defaultMessageMode=_readPersistedDefaultMessageMode()
    (NOT a hardcoded 'steer' — a saved 'interrupt'/'queue' must still apply when
    the server is unreachable; do not regress #5167/#5132)
  - preferences autosave, settings-panel load, and _applySavedSettingsUi all
    persist through _persistDefaultMessageMode(...)

Tests updated for the rename while keeping the persistence-behavior assertions
(test_1062, test_5145, test_5167); test_5167 gains explicit guards that the
load-failure path reads the persisted pref and never hardcodes a literal mode,
plus autosave/panel-load mirror-write coverage.

Co-authored-by: Rod Boev <rod.boev@gmail.com>
2026-07-02 05:44:48 +00:00
nesquena-hermes 1f2dac90df Merge pull request #5403 from nesquena/stage-batch-5399-5209
Release v0.51.822: #5399 session-list 502 retry + #5209 update-summary expand
v0.51.822
2026-07-01 22:26:39 -07:00
nesquena-hermes 404585a831 chore(changelog): #5399 session-list 502 retry + #5209 update-summary expand 2026-07-02 05:23:01 +00:00
nankingjing cabbb9a841 fix(ux): add expand control for update summary panel (#4705)
Move scrolling to an inner container and add an Expand/Collapse toggle
so long generated summaries are readable on narrow viewports.

Fixes #4705
2026-07-02 05:14:00 +00:00
nesquena-hermes 3fde698232 fix(sessions): always retry sidebar session-list GET on 502/503/504 (#5394)
The sidebar session-list GET had 502/503/504 retry logic, but it was gated
to cold boot only. Once `_sessionListHasLoadedOnce` flipped true, every later
refresh (profile switch, focus/visible/reconnect) shipped no retryStatuses, so
a transient 502 during an nginx->backend restart window failed on the first
attempt and left the sidebar stale until a hard reload (Ctrl+F5).

The session-list GET is idempotent, so retrying it is safe unconditionally.
This moves `retries:1` + `retryStatuses:[502,503,504]` into the base request
options so they apply to every refresh, while keeping the larger boot timeout
(`_SESSION_LIST_BOOT_TIMEOUT_MS`) and `retryTimeouts` boot-only. The api()
wrapper in static/workspace.js already retries when the error status is in
retryStatuses, so no other change is needed.

Extends the existing source-string regression test to assert the retry
options are now always present (declared before the boot-only gate) while the
boot path still carries the timeout + timeout retry.

Reported and root-caused by @weidzhou, who traced the boot-only retry gate.

Co-authored-by: weidzhou <weidzhou@users.noreply.github.com>
2026-07-02 05:13:59 +00:00
nesquena-hermes daed2da7c1 Merge pull request #5401 from nesquena/gate-rebase/5398-cron-optin
Release: #5398 — stop auto-creating Cron Jobs project without opt-in (#5379)
v0.51.821
2026-07-01 21:44:48 -07:00
nesquena-hermes da33f1e3d8 chore(changelog): #5398 stop auto-creating Cron Jobs project without opt-in 2026-07-02 04:37:11 +00:00
Rod Boev 581bd3044b test(cron): isolate legacy mocks from PROJECTS_FILE reads (#5379) 2026-07-02 04:36:45 +00:00
Rod Boev fd4d57b6da test(cron): align the legacy fixture with PROJECTS_FILE (#5379) 2026-07-02 04:36:45 +00:00
Rod Boev 8e398cd1b3 fix(cron): stop auto-creating the Cron Jobs project without project opt-in (#5379) 2026-07-02 04:36:45 +00:00
nesquena-hermes 4a46c834e2 Merge pull request #5397 from nesquena/feat-export-html-sidebar-menu
Export-to-HTML: move to the sidebar conversation menu (#4968 follow-up)
v0.51.820
2026-07-01 20:38:07 -07:00
nesquena-hermes 21f321c06c test: update read-only action-menu shape assertion for the appended Export item 2026-07-02 03:34:36 +00:00
nesquena-hermes f50b1d84e1 feat(sessions): move Export-to-HTML into the sidebar conversation menu
Follow-up to v0.51.819 which removed the export button from the composer footer
(it tripped the footer overflow-collapse, hiding model/workspace labels). Per
design consult (Fable) + ChatGPT/Open-WebUI convention, export now lives in the
per-conversation sidebar three-dot action menu, right after Duplicate:
- exportSessionHTML(session) parameterized (was active-session-only); Settings
  button now wired ()=>exportSessionHTML() and still exports the active session
- new _appendSessionExportHtmlAction() added after Duplicate + in the read-only
  early-return branch (export is non-mutating; imported sessions re-exportable)
- exports THAT row's conversation, not just the active one
- download icon added to ICONS; session_export_html[_desc] added to 14 locales
- Settings HTML button retained as secondary data-management entry
2026-07-02 03:21:18 +00:00
nesquena-hermes ca939cd006 Merge pull request #5396 from nesquena/fix-composer-export-footer
Hotfix — remove Export-to-HTML button from composer footer (restores model/workspace labels)
v0.51.819
2026-07-01 19:58:52 -07:00
nesquena-hermes efe72238bc chore(changelog): composer-footer export-button removal hotfix 2026-07-02 02:51:42 +00:00
nesquena-hermes 219615b5a7 fix(composer): remove Export-to-HTML button from composer footer (keep settings-panel export)
The #4968 export button was hard-inserted into the composer footer .composer-left
row, bypassing the configurable composer-control framework. On desktop it pushed the
footer over its overflow threshold, tripping _fitComposerFooter into cf-icons mode
which HIDES the model/workspace/profile text labels. Removing it restores label
visibility. Export stays available via the settings-panel HTML button (#btnExportHTML).
2026-07-02 02:48:45 +00:00
nesquena-hermes d505b5b54a Merge pull request #5395 from nesquena/gate-rebase/4968-export-html2
Release — export chat to self-contained themed HTML (#4968)
v0.51.818
2026-07-01 19:41:31 -07:00
nesquena-hermes a28b991ce3 chore(changelog): #4968 export chat to themed HTML 2026-07-02 02:38:01 +00:00
nesquena-hermes b31f3fab3b #4968: export chat to self-contained themed HTML, rebased on master 2026-07-02 02:36:09 +00:00
nesquena-hermes 193723c7e0 Merge pull request #5393 from nesquena/gate-rebase/5390-blank-turn
Release — fix blank assistant turn after dropped stream (#5390)
v0.51.817
2026-07-01 19:29:01 -07:00
nesquena-hermes a7618555ac chore(changelog): #5390 blank assistant turn fix 2026-07-02 02:25:18 +00:00
nesquena-hermes da03745b79 #5390: don't preserve dead empty live-turn shell across DOM wipe (blank assistant turn), rebased on master 2026-07-02 02:24:55 +00:00
nesquena-hermes 4e61f9a8ef Merge pull request #5391 from nesquena/gate-rebase/5213-cc-toggle
Release — Show Claude Code sessions sidebar toggle (#5213, #4714)
v0.51.816
2026-07-01 19:12:19 -07:00
nesquena-hermes c34bc28b3f chore(changelog): #5213 Claude Code sidebar visibility toggle 2026-07-02 02:02:30 +00:00
nesquena-hermes 4bbb64bcc1 #5213: Claude Code sidebar visibility toggle (#4714), rebased on master 2026-07-02 01:40:19 +00:00
nesquena-hermes f05679b09a Merge pull request #5389 from nesquena/gate-rebase/5142-office-docs
Release — Office document preview + safe docx editing (#5142, #540)
v0.51.815
2026-07-01 18:34:56 -07:00
nesquena-hermes 76d6cc7f74 #5142: office-doc preview + safe docx editing (#540), rebased on master; optional deps 2026-07-02 01:15:57 +00:00
nesquena-hermes 747e42e788 Merge pull request #5388 from nesquena/gate-rebase/4682-cross-profile-cron
Release — Tasks panel: read-only other-profile cron visibility (#4682, #3947)
v0.51.814
2026-07-01 18:11:45 -07:00
nesquena-hermes 6af9cc3244 chore(changelog): #4682 cross-profile cron visibility 2026-07-02 01:08:12 +00:00
nesquena-hermes 728caf5ec6 #4682: surface read-only other-profile cron jobs in Tasks panel (#3947), rebased on master 2026-07-02 00:44:24 +00:00
nesquena-hermes e8d2b9cfc7 Merge pull request #5387 from nesquena/gate-rebase/5228-ext-proxy
Release — opt-in extension loopback sidecar proxy (#5228, #4747)
v0.51.813
2026-07-01 17:35:29 -07:00
nesquena-hermes b709ae6fc2 #5228: require browser provenance on all proxy methods (close GET/POST asymmetry from gate); CHANGELOG 2026-07-02 00:23:10 +00:00
nesquena-hermes 3d99763f3a #5228: opt-in extension loopback proxy (#4747), rebased on master; union urllib imports 2026-07-01 23:49:25 +00:00
nesquena-hermes 086d082149 Merge pull request #5386 from nesquena/rel-p1-1782949053
Release — MoA fail-closed on gateway, ctl.sh .env load, push-to-talk hold gesture
v0.51.812
2026-07-01 16:42:36 -07:00
nesquena-hermes 01520b8076 chore(changelog): Phase-1 batch — #5153 MoA fail-closed, #5309 ctl.sh .env, #5310 push-to-talk 2026-07-01 23:37:33 +00:00
nesquena-hermes 9fb2731848 #5310: push-to-talk hold gesture (#3700) 2026-07-01 23:26:15 +00:00
nesquena-hermes b1a02bdb72 #5309: ctl.sh load ~/.hermes/.env 2026-07-01 23:24:38 +00:00
nesquena-hermes 36643867f4 #5153: MoA gateway fail-closed routing 2026-07-01 23:24:38 +00:00
nesquena-hermes 651c45614e Merge pull request #5383 from nesquena/rel-5374
Release — manual title regen honors configured aux timeout (#5374)
v0.51.811
2026-07-01 16:01:35 -07:00
nesquena-hermes c49f451402 docs(changelog): manual title regen honors aux timeout (#5374) 2026-07-01 22:58:01 +00:00