Commit Graph
100 Commits
Author SHA1 Message Date
nesquena-hermes 89b6ab5c34 Merge pull request #5654 from nesquena/review-5554
Release: redesign cron preset schedule builder — sentence UI (#5554)
2026-07-05 18:40:07 -07:00
nesquena-hermes 8cdb4ea27b Merge pull request #5652 from nesquena/review-5506
Release: restore prose-level fade for Transparent Stream (#5506)
2026-07-05 17:35:47 -07:00
nesquena-hermes de1ff837e3 Merge pull request #5650 from nesquena/review-5502
Release: reuse the rich model picker in Preferences (#5502)
2026-07-05 16:26:14 -07:00
nesquena-hermes 2f3e42dc64 Merge pull request #5648 from nesquena/review-5548
Release: copyable workspace relative paths (#5548)
2026-07-05 15:31:01 -07:00
nesquena-hermes 6d0ff92fa7 Merge pull request #5647 from nesquena/release/stage-tiny
Release: sidebar auto-refresh (#5632) + composer-divider fix (#5499)
2026-07-05 14:48:29 -07:00
nesquena-hermes 1870f77839 Merge pull request #5646 from nesquena/ship-5538
Release: compression-recovery action — focused continuation on compression_exhausted (#5538)
2026-07-05 14:19:03 -07:00
nesquena-hermes 9b18ea9f99 Merge pull request #5643 from nesquena/release/stage-i18n2
Release: complete 664 UI translations across 8 locales (#5535)
2026-07-05 10:48:54 -07:00
nesquena-hermes bb0d33d343 Merge pull request #5642 from nesquena/release/stage-mobile2
Release: fix live mobile scroll jump-back regression (#5638, #5635)
2026-07-05 10:36:12 -07:00
nesquena-hermes 866a25b253 Merge pull request #5640 from nesquena/release/stage-lr1
Release: low-risk docs+tests batch (#5536, #5549, #5537, #5589)
2026-07-05 10:24:13 -07:00
nesquena-hermes 8dc47b83c0 Merge pull request #5629 from nesquena/release/stage-5626
release #5626: ignore inactive compacted state-db rows in context replay
2026-07-05 02:18:28 -07:00
nesquena-hermes 35464be634 Merge pull request #5627 from nesquena/fix/5588-auth-cache-isolation
fix(#5588): reset memoized password-hash cache around every test (isolation flake)
2026-07-05 01:53:12 -07:00
nesquena-hermes c922f179f7 Merge pull request #5625 from nesquena/release/stage-5582
release #5582: keep fork children out of compression stitch
2026-07-05 01:20:03 -07:00
nesquena-hermes f1f4514799 Merge pull request #5623 from nesquena/release/stage-5459
release #5459: include attachments in steer submissions
2026-07-05 00:24:21 -07:00
nesquena-hermes abdf6c7ae3 Merge pull request #5620 from nesquena/fix/mobile-sidebar-header-icon-align
fix(ui): align mobile sidebar close/new-conversation header icons
2026-07-04 23:49:05 -07:00
nesquena-hermes 58e857ec95 Merge pull request #5617 from nesquena/release/stage-5602
release #5602: iOS PWA session-switch instant sidebar close + race guard
2026-07-04 22:46:39 -07:00
nesquena-hermes b0340a7b3e Merge pull request #5616 from nesquena/release/stage-5611
release #5611: opencode-go uses curated static model list (no probe 404s)
2026-07-04 22:18:12 -07:00
nesquena-hermes 0bbf7c3d37 Merge pull request #5615 from nesquena/release/stage-5505
release #5505: improve session-list retry feedback
2026-07-04 22:01:28 -07:00
nesquena-hermes bbcd6d19cd Merge pull request #5613 from nesquena/release/stage-5539
release #5539: increase approval card height cap on mobile
2026-07-04 21:25:57 -07:00
nesquena-hermes 035e84ae00 Merge pull request #5612 from nesquena/release/stage-5534
release #5534: CORS preflight echoes only same-origin or allowlisted origins
2026-07-04 19:48:27 -07:00
nesquena-hermes 49a9560c45 Merge pull request #5610 from nesquena/release/stage-5584
release #5584: skip clear-sentinel backups during recovery
2026-07-04 19:15:06 -07:00
nesquena-hermes 03b64ebeb1 Merge pull request #5609 from nesquena/release/stage-5573
release #5573: guard viewport anchor key against lone surrogates
2026-07-04 19:09:34 -07:00
nesquena-hermes daf5cc1bb0 Merge pull request #5607 from nesquena/release/stage-5593
release #5593: keep active CLI sessions visible before final output
2026-07-04 18:33:40 -07:00
nesquena-hermes 73f77cb42a Merge pull request #5606 from nesquena/release/stage-5592
release #5592: preserve completed assistant replies during settle
2026-07-04 18:19:31 -07:00
nesquena-hermes 5eb081d30e Merge pull request #5603 from nesquena/release/stage-5565
release #5565: distinct Mermaid fullscreen toolbar icon
2026-07-04 18:10:58 -07:00
nesquena-hermes 1bbecb9f2c Merge pull request #5600 from nesquena/release/stage-5559
release #5559: classify credential-pool exhaustion with an actionable hint
2026-07-04 17:39:14 -07:00
nesquena-hermes 94e5778feb Merge pull request #5599 from nesquena/release/stage-5579-r2
release #5578: stop login next= param nesting / URL explosion
2026-07-04 17:27:27 -07:00
nesquena-hermes 1f68c8cfa5 Merge pull request #5596 from nesquena/release/stage-5577
release #5567: context-local HERMES_HOME override for background workers
2026-07-04 16:55:18 -07:00
nesquena-hermes 73643f21b6 Merge pull request #5595 from nesquena/release/stage-5564
release #5564: mint stable per-message ids for large-session fork alignment
2026-07-04 16:28:22 -07:00
nesquena-hermes b504fe3057 Merge pull request #5591 from nesquena/release/stage-5562
release #5562: refresh sidebar recency after missed session events
2026-07-04 15:38:58 -07:00
nesquena-hermes 2cc2eb2b3c Merge pull request #5590 from nesquena/release/stage-5558
release #5558: keep Transparent Stream final replies visible after settle
2026-07-04 15:23:21 -07:00
nesquena-hermes f09d9bd446 Merge pull request #5586 from nesquena/release/stage-5541-r3
release #5541: iOS PWA streaming freeze + SSE reconnect reliability
2026-07-04 15:06:02 -07:00
nesquena-hermes 56a133cc72 Merge pull request #5581 from nesquena/release/stage-5543-r3
release #5543: fire-and-forget memory commit + drain-safe managed stop
2026-07-04 14:44:22 -07:00
nesquena-hermes 04717ad305 Merge pull request #5580 from nesquena/release/stage-5544-r3
release #5544: re-pin auto-scroll at true bottom after scroll-to-bottom
2026-07-04 14:39:02 -07:00
nesquena-hermes 627c6a173c Merge pull request #5576 from nesquena/release/stage-5563-r2
release #5563: align forked context to display for large/compacted sessions
2026-07-04 14:15:49 -07:00
nesquena-hermes 4dfeb78bd0 Merge pull request #5574 from nesquena/release/stage-5532b
Release — clear-conversation P0 data-loss (#5532, #5556, #5553)
2026-07-04 13:18:48 -07:00
nesquena-hermes 4154f949fb Merge pull request #5569 from nesquena/fix/5542-debrittle-rfc-anchors
fix(#5542): de-brittle SSE-contract RFC anchors — cite by symbol, not line number
2026-07-04 12:54:58 -07:00
nesquena-hermes 4c89fcfaab Merge pull request #5566 from nesquena/release/stage-5547
Release — Transparent Stream running-tool status (#5547, #5523)
2026-07-04 12:25:01 -07:00
nesquena-hermes 971629af4e Merge pull request #5561 from nesquena/fix/suite-flakes
Fix the two chronic full-suite test flakes (nous_picker + service_tier)
2026-07-04 12:10:30 -07:00
nesquena-hermes 980e98dc7e Merge pull request #5528 from nesquena/release/stage-5471
Release — composer draft-restore suppression, root-fixed (#5471)
2026-07-04 01:55:23 -07:00
nesquena-hermes edfccb9cd4 Merge pull request #5526 from nesquena/release/stage-5522
Release — Windows git.exe resolution for version/cache-busting (#5522)
2026-07-04 01:19:58 -07:00
nesquena-hermes 72746342d3 Merge pull request #5524 from nesquena/release/stage-5456
Release — Transparent Stream churn reduction (#5456, #5367)
2026-07-04 01:04:38 -07:00
nesquena-hermes 2981f71181 Merge pull request #5521 from nesquena/release/stage-5511
Release — route user-defined providers: models (#5511), hardened
2026-07-04 00:42:19 -07:00
nesquena-hermes 8e26cc03d0 Merge pull request #5520 from nesquena/release/stage-p1
Release — session SSE contract RFC (#5513, addresses #4812)
2026-07-03 23:55:45 -07:00
nesquena-hermes 46b630db52 Merge pull request #5518 from nesquena/release/stage-5516
Release — transcript re-pin when composer grows (#5516, closes #5514/#5515)
2026-07-03 23:20:18 -07:00
nesquena-hermes 259729bb0a Merge pull request #5517 from nesquena/release/stage-5504
Release — deleted-session ghost fix (#5504, closes #5498)
2026-07-03 22:52:28 -07:00
nesquena-hermes 7e7e71f695 fix(chat): widen composer re-pin observer to #composerWrap (Fable #5516 finding)
Fable senior review (COMMENT, no blockers) + DRY nit:

- Widen the ResizeObserver from #msg to the whole #composerWrap so growth from the
  attachment tray / selection chips (not just textarea rows) also re-pins a bottom-
  pinned reader. Fable flagged tray/chip growth as a likely REMAINING #5515 trigger
  — same viewport-shrink physics, now covered by the same guarded re-pin at one seam.
  #composerWrap contains #msg, so the textarea path is still covered.
- DRY: _repinMessagesAfterComposerResize() now reuses _messageBottomDistance()
  instead of re-implementing the bottom-distance expression inline.

Re-verified live (composer grow -> bottomDist stays 0) + 524 scroll/composer
regression tests green + 6 issue tests green.
2026-07-04 05:52:14 +00:00
nesquena-hermes dde008748e fix(chat): re-pin transcript to bottom when the composer grows (#5514, #5515)
#5514 (deterministic): with the chat pinned to the bottom, growing the composer
past one row (multi-line typing, Shift+Enter, a multi-line / WisprFlow paste)
shrinks the flex:1 .messages viewport by the same delta. scrollTop is unchanged
but max-scrollTop rose by delta, so the reader is stranded delta-px above the
bottom — the transcript 'scrolls up one row per composer row.' autoResize()
resized the textarea and called updateSendBtn() but never re-pinned the transcript.
Reproduced live: composer 176px -> viewport shrank 745->613 -> transcript stranded
132px above bottom while _scrollPinned stayed true.

#5515 (intermittent 'random scroll up'): the same viewport-shrink from composer
growth via paths that don't route through input->autoResize (paste, draft restore,
programmatic value set, reflow) reads to the user as a random upward jump. Covered
by a ResizeObserver seam (below).

Fix: new _repinMessagesAfterComposerResize() (static/ui.js) re-pins to the bottom
ONLY when the reader is genuinely still pinned (honors _messageUserUnpinned /
_scrollPinned — never yanks a reader who scrolled away; verified live). Called from:
 (a) autoResize() after the height write, and
 (b) a ResizeObserver on the #msg textarea that re-pins on GROW only, catching
     every composer height-change path (not just the typed-input seam).

Verified live on a 40-message seeded session: pinned reader stays at bottomDist=0
after a 4-line composer grow; an unpinned (scrolled-up) reader is NOT moved.

Tests: tests/test_issue5514_composer_grow_scroll_pin.py (3 static wiring + 3 node-vm
behavioral). 524 scroll/composer regression tests across 39 files still green.

NOTE on #5515: this resolves the composer-growth cause (which the reporter's
WisprFlow-paste symptom points at). If a purely non-composer intermittent jump
persists, the remaining suspect is touch-device overflow-anchor:auto on content-
above height change — that path has no repro yet and is tracked as needinfo on
#5515.
2026-07-04 05:41:33 +00:00
nesquena-hermes 43f989eaa5 Merge pull request #5509 from nesquena/release/stage-b2
Release — session-switch stray-pointerup guard (#5487) + IPv4-first extension gallery (#5458)
2026-07-03 21:02:30 -07:00
nesquena-hermes 98a3b0718c Merge pull request #5507 from nesquena/release/stage-5460
Release — replace cross-profile empty sessions on profile switch (#5460)
2026-07-03 20:37:57 -07:00
nesquena-hermes 843e7748cc Merge pull request #5503 from nesquena/release/stage-5496
Release — refresh dictation recognition.lang after locale change (#5496)
2026-07-03 19:48:30 -07:00
nesquena-hermes 5e0d4d1e3d Merge pull request #5495 from nesquena/release/stage-5480
Release — stale WebUI client recovery banner (#5480)
2026-07-03 18:32:52 -07:00
nesquena-hermes f38cf44569 Merge pull request #5492 from nesquena/release/stage-5452
Release — fit fullscreen Mermaid diagrams to the lightbox (#5452)
2026-07-03 17:21:26 -07:00
nesquena-hermes 7a700b96db Merge pull request #5489 from nesquena/release/stage-5467
Release v0.51.842 — sidebar render-skip on idle polls (#5467)
2026-07-03 16:48:46 -07:00
nesquena-hermes f217f76862 Merge pull request #5491 from nesquena/release/stage-5488
Release v0.51.843 — failed-send draft restore hardening (#5488)
2026-07-03 16:40:00 -07:00
nesquena-hermes 1e4c5ee101 docs(changelog): #5488 hardening for #5472 failed-send draft restore 2026-07-03 23:36:53 +00:00
nesquena-hermes 5c54fd598c fix(#5472): order draft re-persist after clear + honest happy-path test (#5488)
* fix(#5472): harden failed-send draft restore — order persist after clear, honest test

Two NIT-level follow-ups from the Opus review of #5484 (both on already-shipped
v0.51.842 code; neither is a functional break):

1. Draft clear/save ordering. send() fires an unawaited _clearComposerDraft POST
   (text:'') at send time, and the failed-send restore fired a separate
   _saveComposerDraftNow POST (text:<draft>). Under HTTP/2 multiplexing those two
   same-origin writes can be reordered, leaving the SERVER draft empty after a
   reload (the in-memory composer restore was always fine). send() now captures
   the clear POST's promise and passes it to the restore helper, which chains the
   re-persist after the clear resolves (falls back to immediate persist if the
   promise is absent/rejects).

2. Honest happy-path test. test_send_still_clears_composer_on_the_happy_path
   asserted a bare $('msg').value='' string that matches ~13 sites, so it would
   pass even if the MAIN-path clear were removed. It now anchors to the unique
   main-path _clearComposerDraft line and window-checks the composer wipe
   immediately precedes it.

Tests: +2 (promise-ordering behavioral via node-vm microtask ordering; absent-promise
fallback), signature/call assertions updated. 14 in the #5472 file, 93 across the
related composer/send/draft/upload surface — all green.

* fix(#5472): make deferred draft persist stale-aware (Codex #5488 catch)

The promise-ordering fix introduced a regression: the deferred _persist saved the
CAPTURED snapshot and its _saveComposerDraftNow clearTimeout cancelled any newer
debounced save. So if the user edited the restored composer before the clear POST
settled, the delayed persist overwrote their edit with the stale original text
(lost on reload).

Restructure the helper so the deferred persist is stale-aware at FIRE time:
- If the failed session is still visible, re-read the LIVE composer (.value
  + current S.pendingFiles) instead of the captured snapshot — a post-restore edit
  is captured, not clobbered.
- If we restored the visible session but the user has since switched away, SKIP the
  stale write entirely (the session-switch save path already saved that session).
- Background failure (sid never visible): persist the captured snapshot, since
  there's no live composer to read — it's the only copy.

The visible-composer restore + session guard are unchanged in behavior (moved above
the persist). Helper now returns whether it restored the VISIBLE composer.

Tests: +3 regression cases (post-restore edit captured; switch-away skip; background
snapshot persist), signature/guard assertions updated. 17 in the #5472 file, 87
across the related surface — all green.
2026-07-03 16:36:21 -07:00
nesquena-hermes 4e8363035e Merge pull request #5486 from nesquena/release/stage-5472
Release v0.51.842 — preserve composer draft on failed send (#5472)
2026-07-03 16:04:48 -07:00
nesquena-hermes 88bc4feffe docs(changelog): #5472 preserve composer draft on failed send 2026-07-03 22:58:49 +00:00
nesquena-hermesandnesquena-hermes 603375d71c fix(#5472): preserve composer draft when a send fails (#5484)
* fix(#5472): preserve composer draft when a send fails

When a provider/background error aborts a send, send() has already cleared
the composer and the persisted draft before /api/chat/start durably accepts
the turn. On a start-time throw the turn is never persisted, so the user's
typed message is lost and must be retyped.

Add _restoreComposerDraftAfterFailedSend(text, sid): restores the typed text
into the composer, keeps staged files in S.pendingFiles, and re-persists the
draft (via _saveComposerDraftNow) so it also survives a reload. Guarded to
no-op when there's nothing to restore and to never clobber a new message the
user began typing during the async send window. Wired into the /api/chat/start
throw handler's general-error branch. Mirrors the existing _trySteer /
_stashClarifyDraft draft-restore idioms.

Tests: tests/test_issue5472_preserve_draft_on_failed_send.py — 3 static wiring
assertions + 4 node-vm behavioral tests of the helper's branching logic.

* fix(#5472): address gate findings — original-payload snapshot, re-stage files, session-guard

Codex + Opus gate on the first commit converged on three real edges:

1. /moa and bundle sends rewrite `text` before /api/chat/start, so restoring
   `text` replayed the transformed payload, not the user's typed command.
   Fix: capture an immutable _failedSendDraftText snapshot right after the
   post-flush trim, before any slash rewrite, and restore that.

2. uploadPendingFiles() clears S.pendingFiles=[] before the start call, so the
   original 'keep staged files' assumption was false — a resend silently
   dropped attachments. Fix: snapshot S.pendingFiles before the upload drain
   (_failedSendFilesSnapshot) and re-stage from it (+ renderTray()) on failure.

3. A start failure after a session switch could write the failed old session's
   draft into the currently-visible composer. Fix: the helper now only mutates
   the visible composer/tray when sid === the visible session; the sid-keyed
   _saveComposerDraftNow persist stays unconditional so the draft survives a
   switch-back/reload.

Helper signature is now (draftText, filesSnapshot, sid). Tests expanded to 11
(5 static + 6 node-vm behavioral) covering all three edges: original-vs-mutated
payload, re-stage drained attachments, and cross-session no-pollution.

* test(#5472): bound send() body slice to LIVE_STREAMS instead of fixed char window

The #5472 snapshot-capture lines added ~400 chars near the top of send(), which
pushed 'cancelStream' (in the busy-interrupt branch) past the arbitrary
[send_idx:send_idx+5000] window that test_1062's structural assertions used —
a real CI failure (shard 1, all 3 Pythons) caused by a brittle test, not by the
fix logic. Bound both send()-body slices in test_1062 to the actual function
extent (up to the 'const LIVE_STREAMS=' decl that immediately follows send()) so
future additions near the top of send() don't false-fail these assertions.

---------

Co-authored-by: nesquena-hermes <nesquena-hermes@users.noreply.github.com>
2026-07-03 15:57:33 -07:00
nesquena-hermes 8f86ac73cc Merge pull request #5485 from nesquena/release/stage-5469
Release v0.51.841 — desktop scroll jump-back fix (#5469)
2026-07-03 15:45:43 -07:00
nesquena-hermes 7fa8b967ff Merge pull request #5482 from nesquena/release/stage-5438b
Release v0.51.840 — preset cron schedule builder (#5438)
2026-07-03 15:31:12 -07:00
nesquena-hermes 0654e958ef Merge pull request #5481 from nesquena/release/stage-5466
Release v0.51.839 — incremental live streaming render, O(n²)→O(n) (#5466)
2026-07-03 15:07:53 -07:00
nesquena-hermes b9813af66c Merge pull request #5476 from nesquena/release/stage-p1c
Release v0.51.838 — sidebar read-only projection (#5464) + pause hidden-tab polling (#5465)
2026-07-03 13:48:00 -07:00
nesquena-hermes 97821f5b3f Merge pull request #5475 from nesquena/release/stage-5442
Release v0.51.837 — persist TTS and voice preferences server-side (#5442)
2026-07-03 13:18:16 -07:00
nesquena-hermes 8399241bab Merge pull request #5474 from nesquena/release/stage-p1a
Release v0.51.836 — profile overflow-model validation (#5453) + read-only fork guard (#5449)
2026-07-03 13:02:10 -07:00
nesquena-hermes d5e1274258 Merge pull request #5470 from nesquena/release/stage-5454
Release v0.51.835 — remove transparent-stream live-row entrance animation (#5454)
2026-07-03 11:35:03 -07:00
nesquena-hermes 312d3faba4 Merge pull request #5448 from nesquena/release/stage-5434
Release — restore readable inline Mermaid sizing (#5434, fixes #5413)
2026-07-02 15:49:01 -07:00
nesquena-hermes 2829b2adf7 Merge pull request #5447 from nesquena/release/stage-5437
Release — harden ElevenLabs TTS transport guards (#5437, fixes #5430)
2026-07-02 14:48:04 -07:00
nesquena-hermes 3ba8f0780c Merge pull request #5446 from nesquena/release/stage-5441
Release — cap generated update summary cache (#5441, fixes #5435)
2026-07-02 14:27:48 -07:00
nesquena-hermes 86d64d913c Merge pull request #5445 from nesquena/release/stage-5408
Release — self-hosted provider setup (Ollama/LM Studio) in Settings (#5408, closes #3260)
2026-07-02 13:52:00 -07:00
nesquena-hermes 9e0f0259cf Merge pull request #5443 from nesquena/release/stage-5404
Release — hide inactive approval/clarify dialogs from screen readers (#5404)
2026-07-02 13:09:13 -07:00
nesquena-hermes 7cddabbb8c Merge pull request #5440 from nesquena/release/stage-5392
Release — mobile transcript jump-back root fix (#5392, residual #4856)
2026-07-02 12:50:02 -07:00
nesquena-hermes 7ee6a12e44 Merge pull request #5436 from nesquena/release/stage-5402
Release — sidebar action menu stays open during chat scroll (#5402, closes #5347)
2026-07-02 12:26:40 -07:00
nesquena-hermes 6fe063fe23 Merge pull request #5433 from nesquena/release/stage-5400
Release — Transparent Stream flicker/row-drop fix (#5400, closes #5367)
2026-07-02 12:01:33 -07:00
nesquena-hermes 4130b91988 Merge pull request #5432 from nesquena/release/stage-5412
Release — instant profile-dropdown open (#5412) + gate-found brick fix
2026-07-02 11:42:22 -07:00
nesquena-hermes 1e1a3dd6f0 Merge pull request #5429 from nesquena/release/stage-5407
Release — TTS DNS-rebinding SSRF hardening (#5407) + CGNAT/Tailscale blocklist follow-up
2026-07-02 11:16:29 -07: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)
2026-07-02 10:22:20 -07: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)
2026-07-01 22:54:32 -07: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
2026-07-01 22:26:39 -07: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)
2026-07-01 21:44:48 -07: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)
2026-07-01 20:38:07 -07: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)
2026-07-01 19:58:52 -07:00
nesquena-hermes d505b5b54a Merge pull request #5395 from nesquena/gate-rebase/4968-export-html2
Release — export chat to self-contained themed HTML (#4968)
2026-07-01 19:41:31 -07:00
nesquena-hermes 193723c7e0 Merge pull request #5393 from nesquena/gate-rebase/5390-blank-turn
Release — fix blank assistant turn after dropped stream (#5390)
2026-07-01 19:29:01 -07:00
nesquena-hermes 4e61f9a8ef Merge pull request #5391 from nesquena/gate-rebase/5213-cc-toggle
Release — Show Claude Code sessions sidebar toggle (#5213, #4714)
2026-07-01 19:12:19 -07:00
nesquena-hermes f05679b09a Merge pull request #5389 from nesquena/gate-rebase/5142-office-docs
Release — Office document preview + safe docx editing (#5142, #540)
2026-07-01 18:34:56 -07: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)
2026-07-01 18:11:45 -07:00
nesquena-hermes e8d2b9cfc7 Merge pull request #5387 from nesquena/gate-rebase/5228-ext-proxy
Release — opt-in extension loopback sidecar proxy (#5228, #4747)
2026-07-01 17:35:29 -07: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
2026-07-01 16:42:36 -07:00
nesquena-hermes 651c45614e Merge pull request #5383 from nesquena/rel-5374
Release — manual title regen honors configured aux timeout (#5374)
2026-07-01 16:01:35 -07:00
nesquena-hermes bd7e9d797c Merge pull request #5382 from nesquena/rel-5301
Release — MoA picker + Copilot catalog fixes (#5301)
2026-07-01 15:45:21 -07:00
nesquena-hermes af860647af Merge pull request #5381 from nesquena/rel-5368
Release — fix profile skills-stats thundering herd at cold startup (#5364)
2026-07-01 15:21:30 -07:00
nesquena-hermes d04bf7d805 Merge pull request #5380 from nesquena/rel-5326
Release — link EXTENSIONS.md to the vetted extension library repo (#5326)
2026-07-01 14:28:47 -07:00
nesquena-hermes d7dcf16009 Merge pull request #5378 from nesquena/rel-5317
Release — repair bare custom-provider models from active config (#5314/#5127/#1855)
2026-07-01 14:13:37 -07:00
nesquena-hermes f79d52bddc Merge pull request #5377 from nesquena/rel-5370
Release — stop wakeup from reverting picker model/provider (#4251)
2026-07-01 14:09:00 -07:00
nesquena-hermes 5cbff743c4 Merge pull request #5376 from nesquena/rel-5373
Release — model catalog self-heals after upgrade (#4737)
2026-07-01 13:51:57 -07:00
nesquena-hermes 0678f02b2e Merge pull request #5375 from nesquena/rel-5365
Release — local-time pasted-text filenames (#5340)
2026-07-01 13:38:37 -07:00
nesquena-hermes f2a06afe3c Merge pull request #5371 from nesquena/chore/changelog-restore
docs(changelog): restore 3 entries dropped in merge conflicts (#4765/#5313/#5335)
2026-07-01 12:56:01 -07:00
nesquena-hermes b84bf1c38e Merge pull request #5369 from nesquena/rel-5335
Release — more complete zh-CN localization (#5335)
2026-07-01 12:50:06 -07:00
nesquena-hermes 0286d5e2e5 Merge pull request #5366 from nesquena/rel-5313
Release — per-provider reasoning_efforts in config.yaml (#5313)
2026-07-01 12:38:36 -07:00