Commit Graph

1255 Commits

Author SHA1 Message Date
nesquena-hermes 54f1a2acae Stage 373: PR #2415 — fix: ignore provider config flags in model picker by @Michaelyklam (fixes #2399) 2026-05-17 00:21:50 +00:00
nesquena-hermes 3480e75e13 Stage 372: PR #2413 — feat(quota-chip): add Settings toggle, flip default to off 2026-05-16 23:05:09 +00:00
nesquena-hermes 780bddca04 Stage 372: PR #2411 — fix: preserve named custom provider model selections by @Michaelyklam (fixes #2405) 2026-05-16 23:04:53 +00:00
nesquena-hermes 862d32ce27 Stage 372: PR #2408 — fix: split live Activity groups at auto-compression by @Michaelyklam (fixes #2404) 2026-05-16 23:04:18 +00:00
nesquena-hermes 9abf17b4f4 Stage 372: PR #2406 — fix: sanitize sync chat history with config by @Michaelyklam (fixes #2398) 2026-05-16 23:03:38 +00:00
nesquena-hermes cf23d47e2d fix(stage-371): apply Opus SHOULD-FIX — KaTeX/CSV/diff stay LTR + chip 1px boundary
Opus advisor on stage-371 caught three issues during pre-release review:

1. RTL salvage missed KaTeX math (display equations + inline LaTeX), diff
   blocks, CSV tables (column order must read left-to-right regardless of
   chat direction), and .skill-file-path. The first salvage commit only
   covered pre/code/kbd/samp/tt and tool-call bodies. Added a second
   force-LTR block covering: .katex, .katex-block, .katex-display,
   .katex-html, .katex-inline, .diff-block (+children), .csv-table-wrap,
   .csv-table (+children), .skill-file-path. Severity: KaTeX is the most
   user-visible gap — any user rendering math under RTL would see flipped
   equations.

2. Quota chip @media (max-width:1400px) hide rule conflicted at exactly
   1400px with the existing @media (min-width:1400px) .messages-inner
   rule — chip was hidden AT the wide-desktop boundary where it should
   first appear. Changed to (max-width:1399.98px). Visually verified at
   1400px: chip now correctly visible there.

3. Dead .icon-btn.provider-quota-chip selector — chip never has icon-btn
   class. Removed.

Test added: test_rtl_math_and_tables_stay_ltr (pins the 4 new LTR
surfaces). Also removed dead code in test_rtl_code_blocks_stay_ltr
(unused code_block variable).

Per stage-fix protocol: SHIP-with-followup applied on the stage rather
than the source PR, since #2409 is already merged-into-stage and
nesquena-approved. Stage-371 review-bypass batch path still holds.
2026-05-16 22:22:38 +00:00
nesquena-hermes a4ab7d4d27 Stage 371: PR #2409 — Stuck-PR sweep: salvage RTL chat from #1721 + override quota chip from #2082 by @malulian and @ai-ag2026
Co-authored-by: malulian <malulian@users.noreply.github.com>
Co-authored-by: ai-ag2026 <ai-ag2026@users.noreply.github.com>
2026-05-16 22:04:56 +00:00
Hermes Agent b937cf3583 Stage 370: PR #2390 — Fix live progress Activity grouping by @franksong2702
# Conflicts:
#	CHANGELOG.md
2026-05-16 20:21:58 +00:00
Hermes Agent 9441e32adb test(stage-369): widen brittle setCompressionUi({ assertion
PR #2347 hoisted the inline state object to a `state` variable so the
auto-compression handler could share it with appendLiveCompressionCard.
Behavior is identical — same setCompressionUi() dispatch, same calm
compression-card path — but tests/test_run_journal_frontend_static.py
pinned the literal substring `setCompressionUi({` to verify the call
site. Relax the assertion to accept either inline (`{...}`) or hoisted
(`state`) argument form. Both forms route through the same compression
card path; the over-specific substring was the bug.
2026-05-16 20:11:06 +00:00
Hermes Agent ade7401ae1 Stage 369: PR #2396 — fix(streaming): preserve session agents for credential pools by @starship-s 2026-05-16 20:03:44 +00:00
Hermes Agent 41f8b77a0b Stage 369: PR #2393 — fix: cap live chat stream transports by @Michaelyklam
# Conflicts:
#	CHANGELOG.md
2026-05-16 20:03:44 +00:00
Hermes Agent 757f63ee27 Stage 369: PR #2195 — Add OpenRouter cost history backend by @Michaelyklam 2026-05-16 20:03:43 +00:00
Hermes Agent 8b4f8b0600 Stage 369: PR #2347 — Preserve live agent timeline across session switches by @franksong2702 2026-05-16 20:03:43 +00:00
Hermes Agent 20bd845416 fix(tests): permanent os.execv guard to stop pytest self-restart loop
api.updates._schedule_restart() spawns a daemon thread that calls
os.execv() after a short sleep. Tests in test_update_banner_fixes.py
monkeypatch os.execv to a no-op, but monkeypatch teardown can win the
race against the daemon thread — when the thread wakes up after
teardown, the real os.execv is back, and it re-execs pytest with the
original argv. From the outside this looked like pytest hanging at 99%
and then restarting the entire suite from 0% in a loop.

The fix shadows os.execv with a permanent no-op wrapper at conftest
module-import time, so late-firing daemon threads can't escape. Tests
that need to verify execv was called still patch it themselves; their
patches sit on top of the wrapper for their lifetime.

Also adds tests/test_pytest_execv_guard.py to pin the guard against
future conftest refactors.
2026-05-16 19:32:49 +00:00
starship-s 727e3c9c8f fix(streaming): preserve session agents for credential pools 2026-05-16 13:05:25 -06:00
Michael Lam 0b64e21264 fix: cap live chat stream transports 2026-05-16 10:27:28 -07:00
Hermes Agent 8f4d6c1431 Stage 368: PR #2391 — fix: reduce browser storage pressure by @Michaelyklam 2026-05-16 17:19:08 +00:00
Hermes Agent 89be2ef458 Stage 368: PR #2387 — fix: guard localStorage quota writes by @Michaelyklam 2026-05-16 17:19:08 +00:00
Hermes Agent bcf44e586a Stage 368: PR #2377 — Add run-journal replay timeline parity checks by @franksong2702 2026-05-16 17:19:07 +00:00
Hermes Agent a1da489770 Stage 368: PR #2368 — fix: hybridize background profile env routing by @Michaelyklam 2026-05-16 17:19:07 +00:00
Hermes Agent 57199f16ec Stage 368: PR #2382 — fix: serve raw chat attachments from inbox by @Michaelyklam 2026-05-16 17:19:06 +00:00
Hermes Agent 026a9957f4 Stage 368: PR #2385 — Keep fuller compression snapshots reachable in sidebar by @franksong2702 2026-05-16 17:19:05 +00:00
Hermes Agent e994c8820e Stage 368: PR #2371 — Clarify interrupted turn recovery after WebUI restart by @franksong2702 2026-05-16 17:19:05 +00:00
Hermes Agent 8a6457c60f Stage 368: PR #2378 — fix: strip historical images in text mode by @Michaelyklam 2026-05-16 17:19:05 +00:00
Hermes Agent a1d048af29 Stage 368: PR #2375 — fix: keep markdown tables block-level by @Michaelyklam 2026-05-16 17:19:04 +00:00
Michael Lam 48b82d57db fix: reduce browser storage pressure 2026-05-16 08:44:04 -07:00
Frank Song 2dfe3ffb42 Fix live progress activity grouping 2026-05-16 23:37:44 +08:00
Michael Lam 3bb8c7b276 fix: guard localStorage quota writes 2026-05-16 07:31:44 -07:00
Frank Song 4899ae17b9 Keep fuller compression snapshots reachable 2026-05-16 20:58:44 +08:00
Michael Lam e4dad1c25d fix: serve raw chat attachments from inbox 2026-05-16 05:13:58 -07:00
Frank Song 11796fe7a8 Avoid magic cursor-loop test window 2026-05-16 20:05:19 +08:00
Michael Lam 2284d42695 fix: interpolate German session time labels 2026-05-16 04:31:48 -07:00
Michael Lam 962b3840e6 fix: strip historical images in text mode 2026-05-16 03:55:12 -07:00
Frank Song 574ee36460 Add run journal replay timeline parity checks 2026-05-16 17:52:35 +08:00
Michael Lam 3cbe206832 fix: keep markdown tables block-level 2026-05-16 02:12:52 -07:00
Michael Lam 5bd1f1441d fix: route background worker credentials through profile env 2026-05-16 01:02:19 -07:00
Frank Song 49bea3ad01 Clarify interrupted turn recovery marker 2026-05-16 14:29:58 +08:00
Michael Lam 9894157120 fix: hybridize background profile env routing 2026-05-15 23:19:37 -07:00
Frank Song 240fc42ad8 Align pending-user reattach test with live snapshot restore 2026-05-16 14:12:08 +08:00
Frank Song cdef039613 Update inflight restore static test windows 2026-05-16 14:12:08 +08:00
Frank Song faedcab739 Preserve live agent timeline across session switches 2026-05-16 14:12:08 +08:00
Hermes Agent fcc9329ae5 Stage 367: PR #2365 — Fix: support YAML list format for custom_providers.models in model dropdown by @mccxj 2026-05-16 05:43:27 +00:00
BonyFish b48e44a24a Add tests for list-format custom_providers.models
Covers 9 scenarios: plain string list, dict list, unnamed provider,
mixed formats, dedup, empty list, fallback keys, @-prefix routing,
and mixed list/dict items from multiple providers.
2026-05-16 05:43:09 +00:00
Frank Song 80be1d08dc Fix Markdown table cell paragraph spacing 2026-05-16 05:43:04 +00:00
Michael Lam 15513b81f4 fix: harden OpenRouter cost snapshots 2026-05-15 21:28:54 -07:00
Michael Lam 690b666887 Add OpenRouter cost history backend 2026-05-15 21:28:54 -07:00
Frank Song 433ad29939 Fix compression reference card anchoring 2026-05-16 04:25:22 +00:00
Hermes Agent 4dac7940e7 Stage 365: PR #2348 — Suppress interim text echoes in Thinking cards by @franksong2702 2026-05-16 04:08:42 +00:00
Frank Song d94320b4bf Avoid duplicate Thinking echo helper names 2026-05-16 04:07:03 +00:00
Frank Song dd5f3ff9b5 Suppress interim text echoes in Thinking cards 2026-05-16 04:07:03 +00:00