Commit graph

5347 commits

Author SHA1 Message Date
nesquena-hermes
ffef6fa4ec
Release YG (v0.51.677): render cron run output as literal pre/code (#4977)
Release YG (v0.51.677): render cron run output as literal pre/code (#4977)
2026-06-26 05:11:28 -07:00
nesquena-hermes
5c0cda025a Release YG (v0.51.677): render cron run output as literal pre/code (#4977) 2026-06-26 12:08:01 +00:00
luandnh
046a0f68b8 fix: render cron run output as literal pre code, not via renderMd
Cron run output is never authored Markdown -- it is logs/JSON/plain text.
Using renderMd() with any heuristic or synthetic fence is fragile:
- Content starting with #, |, > becomes headings/tables/blockquotes
- Embedded triple-backtick in content breaks the synthetic fence

Fix: use DOM-created pre/code with textContent throughout:
- No heuristic, no synthetic fence -- every byte renders verbatim
- Both render paths (initial load + View full output) use the same approach
2026-06-26 11:56:09 +00:00
luandnh
ca1a4ee2dd fix: extract _wrapCronOutput helper, expand heuristic per review
- Extracted duplicated detection logic into shared _wrapCronOutput(text)
- Expanded heuristic to cover ~~~, -, *, _, [ markers
- Added empty-output guard (returns '' for falsy/empty text)
- Fixes Greptile review P2-P3
2026-06-26 11:56:09 +00:00
luandnh
92e8b6a0ba fix: wrap raw cron run output in code block for proper formatting
When viewing cron job run logs (prompt/response), the raw content
was passed through renderMd() which broke formatting for JSON and
plain text (single newlines collapsed, special chars interpreted).
Now detects if content looks like markdown and wraps raw content
in triple backticks so it renders as a proper code block with
preserved whitespace and formatting.
2026-06-26 11:56:09 +00:00
nesquena-hermes
f6910eeed8
Release YF (v0.51.676): scope pending user-turn dedupe to current tail (#4826, fixes #4825)
Release YF (v0.51.676): scope pending user-turn dedupe to current tail (#4826, fixes #4825)
2026-06-26 04:27:23 -07:00
nesquena-hermes
148d7b1e99 Release YF (v0.51.676): scope pending user-turn dedupe to current tail (#4826, fixes #4825) 2026-06-26 11:23:49 +00:00
Frank Song
ecf2eda433 Update pending user reattach regression
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-26 11:12:50 +00:00
Frank Song
2d21eff780 Fix pending user dedupe current-turn scope
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-26 11:12:50 +00:00
Frank Song
540d36d0b0 Fix inflight tail merge harness dependency 2026-06-26 11:12:50 +00:00
Frank Song
24b6e87aea Scope active user turn dedupe to current turn 2026-06-26 11:12:50 +00:00
Frank Song
035a2609f1 Harden active user turn dedupe tests 2026-06-26 11:12:50 +00:00
Frank Song
709f133d76 Fix active user turn replay dedupe 2026-06-26 11:12:50 +00:00
nesquena-hermes
42b3ada3f2
Release YE (v0.51.675): bounded state.db tail reads for paginated session loads (#4920, fixes #4918 P1)
Release YE (v0.51.675): bounded state.db tail reads for paginated session loads (#4920, fixes #4918 P1)
2026-06-26 03:57:13 -07:00
nesquena-hermes
fdfed7a0d5 Release YE (v0.51.675): bounded state.db tail reads for paginated session loads (#4920, fixes #4918 P1) 2026-06-26 10:54:13 +00:00
Frank Song
f15f178b5e Guard state db prefix keys with tool calls
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-26 10:43:28 +00:00
Frank Song
7a38b09af1 Fix lint for state db prefix key guard
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-26 10:43:28 +00:00
Frank Song
fd81b6cb08 Guard state db tail reads by prefix keys
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-26 10:43:28 +00:00
Frank Song
dc9d6275cb Address state db tail-window coordinate guards 2026-06-26 10:43:27 +00:00
Frank Song
91f7e7f816 Address state db tail window review 2026-06-26 10:43:27 +00:00
Frank Song
8bd31891e3 Bound state.db reads for paginated session loads 2026-06-26 10:43:27 +00:00
nesquena-hermes
bb2920180e
Release YD (v0.51.674): process-global request-diagnostics watchdog (#4973)
Release YD (v0.51.674): process-global request-diagnostics watchdog (#4973)
2026-06-26 01:07:25 -07:00
nesquena-hermes
b80d1f1a40 Release YD (v0.51.674): process-global request-diagnostics watchdog (#4973) 2026-06-26 08:04:27 +00:00
nesquena-hermes
2f7c5f01ee fix(#4973): replace per-request diagnostics Timer with a process-global watchdog thread
A threading.Timer per RequestDiagnostics spawns one OS thread per request, held
alive until finish() cancels it. Under sustained /api/sessions poll load this
exhausts the per-process thread cap (RuntimeError: can't start new thread) and
the server stops accepting connections. Replace with a single lazy-init
watchdog daemon thread that scans pending diags every ~1s; public API
unchanged. Caps timeout-tracking at 1 thread/process regardless of request rate.
2026-06-26 07:58:13 +00:00
nesquena-hermes
6dd1c5e0fa
Release YC (v0.51.673): stale local approval card clears instead of dead-ending (#4955, #4948 local variant, #4771 follow-up)
Release YC (v0.51.673): stale local approval card clears instead of dead-ending (#4955)
2026-06-26 00:13:03 -07:00
nesquena-hermes
4331999858 Release YC (v0.51.673): stale local approval card clears instead of dead-ending (#4955, #4948 local variant, #4771 follow-up) 2026-06-26 07:09:27 +00:00
Nathan Esquenazi
1ae73b3949 docs(changelog): add [Unreleased] entry for #4948 local stale-approval fix
AGENTS.md requires a CHANGELOG entry for user-visible behavior changes, and
this is one (a stale approval card went from a stuck "Approval response not
accepted." dead-end to clearing cleanly). The PR shipped the routes.js +
messages.js fix without a changelog note; this adds the [Unreleased] -> Fixed
entry crediting santastabber / b3nw, noting the #527 guard is preserved.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 23:57:11 -07:00
nesquena-hermes
74cee77738 fix(approval): stale local approval card clears instead of dead-ending (#4948 local variant, #4771 follow-up)
On the default local in-process backend, an approval card whose stream
ended while still pending (cancel/fork/provider-error/completion) left the
agent queue entry dropped and the _pending mirror reconciled away. Clicking
Approve/Deny then sent an approval_id that matched nothing, so the handler
returned a bare {ok:false}; since #4771 the frontend surfaces that as
'Approval response not accepted.' with a stuck card (reported by
@santastabber on v0.51.666 and b3nw).

Distinguish a genuinely stale card (no pending approval for the session ->
benign {ok:true, stale_cleared:true} so the UI clears the orphan) from a
stale-id click made while a DIFFERENT approval is live (still ok:false so it
can never resolve the wrong command -- #527 guard preserved). Frontend
clears the orphan card on stale_cleared even if the displayed id drifted.

Co-authored-by: b3nw <b3nw@users.noreply.github.com>
2026-06-26 06:46:22 +00:00
nesquena-hermes
66d0278659
Release YB (v0.51.672): pre-aggregate cron sidebar ordering for missing-index scans (#4962)
Release YB (v0.51.672): pre-aggregate cron sidebar ordering for missing-index scans (#4962)
2026-06-25 20:20:04 -07:00
nesquena-hermes
a58e1c8343 Release YB (v0.51.672): pre-aggregate cron sidebar latest-message ordering for missing-index scans (#4962) 2026-06-26 03:17:11 +00:00
Rod Boev
3979ea6023 fix(sidebar): restrict cron pre-aggregation to missing-index scans 2026-06-26 03:06:40 +00:00
Rod Boev
810707d47a fix(sidebar): gate cron pre-aggregation to large scans 2026-06-26 03:06:40 +00:00
Rod Boev
eb10cecf0b fix(sidebar): keep cron candidate ordering scoped 2026-06-26 03:06:40 +00:00
Rod Boev
709086a29b docs(sidebar): update the index-prime rationale 2026-06-26 03:06:40 +00:00
Rod Boev
814fe56150 perf(#4842): pre-aggregate latest-message ordering for cold CLI scans 2026-06-26 03:06:40 +00:00
nesquena-hermes
a59fb8290e
Release YA (v0.51.671): move CLI sidebar cache rebuild out of the lock (#4952, closes #4842)
Release YA (v0.51.671): move CLI sidebar cache rebuild out of the lock (#4952, closes #4842)
2026-06-25 19:57:10 -07:00
nesquena-hermes
1c7b0b1abe Release YA (v0.51.671): move CLI sidebar cache rebuild out of the lock (SWR+singleflight) (#4952, closes #4842) 2026-06-26 02:54:15 +00:00
Rod Boev
97b551c528 fix(cli): restore all-profiles session scans after the cache rework (#4842) 2026-06-26 02:43:11 +00:00
Rod Boev
0301c8f8d2 fix(cli): keep CLI cache followers from hanging or dropping rows (#4842) 2026-06-26 02:43:11 +00:00
Rod Boev
8f0ede0e8b Make cache invalidation atomic across rebuild stores 2026-06-26 02:43:11 +00:00
Rod Boev
5b29b97993 Keep the retry path valid under ruff 2026-06-26 02:43:11 +00:00
Rod Boev
9130edbc31 Keep CLI cache rebuilds singleflight across invalidation 2026-06-26 02:43:11 +00:00
Rod Boev
6a5a514e8c Keep the review branch publishable 2026-06-26 02:43:11 +00:00
Rod Boev
c1bb1a42e9 fix(#4842): stop lock-held CLI cache rebuild stalls during streaming 2026-06-26 02:43:10 +00:00
nesquena-hermes
443e1063b5
Release XZ (v0.51.670): chronological tool-call rows before final answer incl equal-ts (#4893)
Release XZ (v0.51.670): chronological tool-call rows before final answer incl equal-ts (#4893)
2026-06-25 19:40:45 -07:00
nesquena-hermes
1c0a86f556 Release XZ (v0.51.670): chronological tool-call rows before final answer incl equal-ts (#4893) 2026-06-26 02:37:08 +00:00
nesquena-hermes
20727e142e test(#4893): close Opus coverage gaps — multi-tool equal-ts tie + tool-result block no-split 2026-06-26 02:25:07 +00:00
Frank Song
5b0e409d3b Handle equal-timestamp tool-call tail ordering 2026-06-26 02:18:18 +00:00
Frank Song
7e8834d8ca Fix tool-call tail ordering in session merge 2026-06-26 02:18:18 +00:00
nesquena-hermes
76eb548007
Release XY (v0.51.669): persist OpenAI priority service_tier (#4543, fixes #4536)
Release XY (v0.51.669): persist OpenAI priority service_tier in main-model settings (#4543, fixes #4536)
2026-06-25 19:12:18 -07:00