Commit Graph
100 Commits
Author SHA1 Message Date
Rod Boev 001d7985bc feat(#6006): instrument send-to-first-token latency 2026-07-13 17:56:44 -04:00
Rod Boev 3ada146d48 fix(#5989): keep colon-suffixed proxy models distinct 2026-07-13 18:57:15 +00:00
Rod Boev ff89f2ebd6 fix(#5989): keep cross-provider live rows selectable 2026-07-13 18:57:15 +00:00
Rod Boev 58725d5de9 fix(#5989): separate picker dedup from restore matching 2026-07-13 18:57:15 +00:00
Rod Boev 052effcfc4 fix(#5989): deduplicate proxy and catalog model rows in the picker 2026-07-13 18:57:15 +00:00
Rod Boev 064ad82ee6 fix(#5940): key pending-turn recovery to exact checkpoints 2026-07-13 03:41:39 +00:00
Rod Boev 0c8f647e9c fix(#5940): drop unused gateway error adapter 2026-07-13 03:41:39 +00:00
Rod Boev a87977da33 fix(#5940): settle gateway terminal errors before emitting apperror 2026-07-13 03:41:39 +00:00
Rod Boev e6dea2a32e fix(#5940): attach session identity to gateway apperrors 2026-07-13 03:41:39 +00:00
Rod Boev 60ec437393 fix(#5940): preserve gateway terminal errors after stream failures 2026-07-13 03:41:39 +00:00
Rod Boev bc692cc8ac fix(#5940): classify gateway terminal provider errors instead of generic empty turns 2026-07-13 03:41:39 +00:00
Rod Boev 2e39bb8418 fix(#5884): focus composer after URL prefill 2026-07-10 11:04:44 -04:00
Rod Boev 4cbc70c778 fix(#4812): satisfy replay boundary lint gate 2026-07-10 10:51:34 -04:00
Rod Boev 956c276362 fix(#4812): close session SSE replay recovery gaps 2026-07-10 10:46:47 -04:00
Rod Boev da885659bd fix(streaming): satisfy session SSE lint gate 2026-07-10 07:37:16 -04:00
Rod Boev b2a9ca28ad fix(streaming): harden session SSE replay (#4812) 2026-07-10 07:31:00 -04:00
Rod Boev e592498664 fix(chat): keep live reasoning on one renderer path (#5720) 2026-07-09 03:12:37 +00:00
Rod Boev 837a552746 fix(chat): contain streaming code block layout (#5760) 2026-07-09 03:08:19 +00:00
Rod Boev 745e0be0df fix(#5699): keep child streams from moving parent sidebar buckets 2026-07-09 02:35:52 +00:00
Rod Boev f4172f73b0 fix(mcp): preserve config overrides for profile reads (#5619) 2026-07-08 16:18:52 +00:00
Rod Boev 3c8d9f851e fix(mcp): scope list config reads to active profile (#5619) 2026-07-08 16:18:52 +00:00
rodboev 8b02a8c260 fix(#5723): complete stale-busy cleanup on dead-run recovery (Fable UX-gate)
_steerClearCurrentOwnerDeadRun cleared busy/activeStreamId/inflight but left
the status line, elapsed timer, and optimistic streaming badge lingering after
a recovered dead run. Add the rest of the app's stale-busy cleanup idiom
(setStatus/setComposerStatus/_clearActivityElapsedTimer/clearOptimisticSessionStreaming),
still bypassing setBusy(false) so its queue-drain can't clobber the restored draft.
2026-07-07 16:32:26 +00:00
rodboev 56a395c5f3 fix(#5701): ignore pinch-zoom scale in keyboard-inset (Fable UX-gate)
vv.scale != 1 means the visual-viewport shrinkage reflects zoom, not the
keyboard; on Chromium 'force enable zoom' that produced a large spurious inset
that jittered on pan. Bail out of the inset when |vv.scale-1|>0.05. + test.
2026-07-07 05:07:19 +00:00
Rod Boev 815d06f10f feat(worklog): show Transparent Stream event timestamps (#5700) 2026-07-07 01:05:59 -04:00
rodboevandnesquena-hermes ae8d0bf3fb fix(#5701): keep the composer above iPad keyboards
On touch-primary devices (iPad Safari) the on-screen keyboard shrinks the
visual viewport but not the layout viewport, so the bottom-pinned composer
sits behind the keyboard. Compute a --keyboard-bottom-inset from visualViewport
and pad the composer up by it; clear it when the keyboard closes / on
non-touch / no-visualViewport. Reuses the existing visualViewport + pageshow
hooks; no-op on desktop/fine-pointer.

Co-authored-by: nesquena-hermes <nesquena-hermes@users.noreply.github.com>
2026-07-07 05:05:11 +00:00
Rod Boev 54ce5932f2 fix(streaming): clean up session SSE subscribers on replay disconnect (#4812) 2026-07-06 15:49:14 -04:00
Rod Boev 631ec800e7 Stop tracking pr-sweep proof scratch that fought the publish gate every push 2026-07-06 14:47:55 -04:00
Rod Boev 9b3538f1a6 fix(streaming): reject hostile session SSE cursors (#4812) 2026-07-06 11:25:59 -04:00
Rod Boev 624e03c60a refactor(#2695): centralize WebUI static asset resolution 2026-07-06 06:45:36 -04:00
Rod Boev 3e53ef505c Preserve the RFC source anchor while sharing parser logic 2026-07-06 06:26:53 -04:00
Rod Boev 54a6292954 Share the run-journal event cursor parser 2026-07-06 06:23:03 -04:00
Rod Boev 3439bb8a46 Keep session stream source guards pointed at the live handlers 2026-07-06 06:14:03 -04:00
Rod Boev aba74c762d Keep session SSE recovery tied to the live handler contract 2026-07-06 06:08:21 -04:00
Rod Boev 4bc405d708 Keep cursorless active SSE backlog from disappearing 2026-07-06 05:42:03 -04:00
Rod Boev 720e4191ad feat(#4812): add resumable session SSE stream 2026-07-06 05:16:18 -04:00
Rod Boev 80ee386827 Preserve lineage authority through serializer and refresh pass 2026-07-06 05:08:23 -04:00
Rod Boev 409be9bcd4 fix(#5598): stabilize lineage grouping across live refreshes 2026-07-06 04:49:24 -04:00
Rod Boev cdcb31a948 docs(#2781): document proxy auth PWA update caveat 2026-07-06 04:41:45 -04:00
Rod Boev e82cb801de feat(#5665): add shared layout-assertion helpers for browser tests 2026-07-06 01:23:21 -04:00
Rod Boev e19eefbe59 ci(#5658): add restore-keys for graceful cache fallback on version bumps 2026-07-05 22:59:37 -04:00
Rod Boev f09e5d0b33 ci(#5658): install Playwright in pytest CI so browser tests run 2026-07-05 22:54:44 -04:00
Rod Boev 9f9ebc9746 fix(#5583): keep mobile nav actions visible 2026-07-05 18:40:41 -04:00
Rod Boev 00a6952191 test(#5619): carry config path through quota helper state 2026-07-05 17:24:41 -04:00
Rod Boev b7234ee72a test(#5619): pin named custom helper to active config path 2026-07-05 17:18:07 -04:00
Rod Boev 05e14b6339 test(#5619): pin same-path model helper fixtures 2026-07-05 17:13:07 -04:00
Rod Boev 29e9a27299 fix(#5619): preserve same-path cfg overrides on reload 2026-07-05 17:08:20 -04:00
Rod Boev 17ee8b5edc test(#5619): pin codex helper to the active config path 2026-07-05 17:01:39 -04:00
Rod Boev 1124fd882a fix(#5619): reload model payloads on profile switch 2026-07-05 16:44:33 -04:00
Rod Boev c83ccf069a fix(#5641): keep table boundary scoped to spaces 2026-07-05 16:39:54 -04:00
Rod Boev 2f815f040c fix(#5619): clear stale cfg overrides on profile switch 2026-07-05 16:33:01 -04:00
Rod Boev 1075d6e3a1 fix(#5641): tolerate edge whitespace in markdown table parsing 2026-07-05 16:25:59 -04:00
Rod Boev 4c3a4e011e fix(#5619): reload config cache on profile switch 2026-07-05 16:22:35 -04:00
Rod Boev f650b1b725 fix(#5583): strip mobile nav mirror handlers 2026-07-04 23:31:37 -04:00
Rod Boev 2c66f7b65f fix(#5583): keep mobile nav actions visible 2026-07-04 21:23:42 -04:00
Rod Boev f34fd8ed42 test(layout): match resize minima constants exactly (#5545) 2026-07-04 20:01:25 -04:00
Rod Boev 33d9b9f2a7 test(layout): keep css contract failures focused on assertions (#5545) 2026-07-04 19:55:37 -04:00
Rod Boev 0fc78da5ff fix(#5545): keep center pane readable in three-panel layout 2026-07-04 19:11:05 -04:00
Rod Boev cc7896cfab test(#5572): prove imported transcript survives clear 2026-07-04 18:39:51 -04:00
Rod Boev b19f447dd7 test(#5572): remove unused messaging coverage import 2026-07-04 18:34:10 -04:00
Rod Boev 1b65794d1a test(#5572): cover messaging clear watermark semantics 2026-07-04 18:07:48 -04:00
Rod Boev 11eed2af54 fix(session): harden cron branch source gate (#5477) 2026-07-04 16:41:15 -04:00
Rod Boev cbc164de0c feat(#5477): fork read-only cron sessions 2026-07-04 16:38:27 -04:00
Rod Boev bac619e767 fix(i18n): add relative path labels (#5533) 2026-07-04 15:47:50 -04:00
Rod Boev 2e27ff64d6 fix(cron): harden preset controls after review 2026-07-04 15:37:10 -04:00
Rod Boev 71a6259c84 Align copied paths with chat references 2026-07-04 15:26:25 -04:00
Rod Boev ea2dc31c09 fix(#5532): prevent clear from replaying state.db history 2026-07-04 15:08:26 -04:00
Rod Boev 9742fd8e60 feat(#5552): add time and day controls to cron presets 2026-07-04 14:32:27 -04:00
Rod Boev 670976a280 Prevent duplicate preview path copy requests 2026-07-04 13:55:28 -04:00
Rod Boev 6cf5706f78 test(#5523): align persisted anchor status invariant 2026-07-04 13:51:32 -04:00
Rod Boev 0ec29b14ec test(#5269): keep approval docs reads in tests 2026-07-04 13:46:59 -04:00
Rod Boev 3d483d3701 test(#5523): harden transparent status regression slice 2026-07-04 13:46:59 -04:00
Rod Boev 7ebd898c5e feat(#5533): make preview file paths copyable 2026-07-04 13:37:39 -04:00
Rod Boev 06764e0924 docs(#5269): document gateway approval runs API opt-in 2026-07-04 13:37:39 -04:00
Rod Boev c85db4f3d7 fix(#5523): show running tools as running in Transparent Stream 2026-07-04 13:37:39 -04:00
Rod Boev 0c1bdce023 fix(#5493): honor reduced motion for transparent fade 2026-07-04 10:07:34 -04:00
Rod Boev 45a203b36b fix(#5493): preserve anchor prose before body mount 2026-07-04 10:04:15 -04:00
Rod Boev 3918dd132e Fade transparent prose without preference gate 2026-07-04 10:04:15 -04:00
Rod Boev 662f492b2f Clean up transparent fade spans after animation 2026-07-04 10:04:15 -04:00
Rod Boev 86e55c7856 Feed transparent fade rows revealed text 2026-07-04 10:03:35 -04:00
Rod Boev 854949b07c Keep streamed fade rows stationary 2026-07-04 10:03:35 -04:00
Rod Boev 26eda1adbd Make appended token fade perceptible 2026-07-04 10:02:39 -04:00
Rod Boev 28d058ad2e Start fade spans when appended 2026-07-04 10:02:39 -04:00
Rod Boev af2f534f21 Append fade spans instead of replaying streamed prose 2026-07-04 10:02:39 -04:00
Rod Boev fbebd0bd30 Preserve transparent fade DOM during live row refresh 2026-07-04 10:02:39 -04:00
Rod Boev c15cb84867 fix(#5493): restore transparent stream prose fade 2026-07-04 10:02:39 -04:00
Rod Boev dcaf5a69aa test(docs): harden heartbeat rfc contract guard (#4812) 2026-07-04 01:49:24 -04:00
Rod Boev 55ca782c31 docs(#4812): keep session sse rfc citations current 2026-07-04 01:21:52 -04:00
Rod Boev fc21c3f38e fix(#5498): keep tombstoned backups out of repair audit 2026-07-04 00:53:03 -04:00
Rod Boev c17ed6371e fix(#5498): preserve messaging sessions outside WebUI tombstones 2026-07-04 00:42:07 -04:00
Rod Boev 308041c269 fix(#5498): remove unreachable tombstone recovery branch 2026-07-03 23:36:10 -04:00
Rod Boev 433f2a860e fix(#5498): skip durable delete tombstones in recovery audit 2026-07-03 23:27:48 -04:00
Rod Boev f566dc1d01 docs(#4812): add session sse contract rfc 2026-07-03 23:16:16 -04:00
Rod Boev 9e13ec9e03 fix(#5498): prevent deleted WebUI sessions from resurrecting from state.db 2026-07-03 23:05:44 -04:00
Rod Boev 087c694c8d feat(#5497): reuse the rich model picker in Preferences 2026-07-03 22:32:50 -04:00
Rod Boev f32938021c fix(#5428): surface stale WebUI client recovery 2026-07-03 17:43:46 -04:00
Rod Boev af3eb88225 Drop redundant live-row suppression after removing the animation source 2026-07-03 13:48:20 -04:00
Rod Boev a9eb90a0d0 test(#5435): preserve raw speech settings between API cases 2026-07-03 09:22:50 -04:00
Rod Boev 8c82ed8f11 fix(#5435): read voice silence timeout at use time 2026-07-03 08:57:44 -04:00
Rod Boev 7a21825722 fix(#5435): keep speech settings payload sparse 2026-07-03 00:22:39 -04:00
Rod Boev 904d741ed2 fix(#5367): suppress transparent stream live row animation 2026-07-02 23:31:57 -04:00