Repository navigation
Agent chat: the thread rail shows every prompt of the chat, read in the background - #25160
teamleaderleo wants to merge 1 commit into
Conversation
|
Owned by an agent session · session |
|
Found 1 test failure on Blacksmith runners: Failure
|
|
Bead |
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Unclear: CI failed on
Failures:
Matched log linesNot re-run automatically: Written by web and size checks: green
Agents: Gallery before/after for
States
Pick other states with a |
…their keys, load in O(n) Review of #25160 (gpt-6-astra): - A prompt sent now that goes on with the turn it stopped (`continues`) got a tick of its own while unloaded and lost it once loaded. The rail now reads the records that decide that (queue_order, turn_result, queue_removed, prompt_refused) with the prompts and applies the transcript's rule (TurnStarts), across page edges too. - A tick's key is the prompt's promptId (else its row id), never its shown text, which changes when an addressed message's sender is listed late; the earlier rows are built again then, on their own senders. - Pages append their own rows (no copy of the ones before), and the rail reads them from their own store instead of the pane's snapshot, told once the prompts grow by half: O(log n) rail draws, no pane render per page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16f7b-11f6-73e0-8276-7c0e3bb3ead4&host=huge-blue
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
e52a5df to
45609b6
Compare
|
|
|
|
|
|
|
Orphaned: no activity for 14 h, and no lane holds a lease on it. The orphan sweep could not merge |
|
Review (codex gpt-6-astra xhigh, next-review): BLOCK at 45609b6
|
45609b6 to
c5d207f
Compare
c5d207f to
f26869f
Compare
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
f26869f to
61bd0b5
Compare
61bd0b5 to
e5e3c33
Compare
e5e3c33 to
0fd067f
Compare
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
0fd067f to
02e62c5
Compare
…(acpmux prompt index) (#29632) * Agent chat: the thread rail lays out every turn from the first frame acpmux answers one prompt index read (_acpmux/events promptIndex: each prompt's seq, promptId and the start of its text, parsing only prompt lines); the snapshot's earlierPrompts carries the prompts older than the held rows, and the rail draws their ticks at their final places. Older pages fill them in instead of adding ticks. The rail half carries 02e62c5 from #25160 onto this data source. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-d750cf10922c785efa64 * test(agent-pane): history paging counts the rail's one prompt index read apart Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-d750cf10922c785efa64 * fix(agent-chat): the rail's earlier prompts never reuse a committed list Review at 5e99538: the combined list reused an array a committed result still held. It is now a new array whenever its parts change, ticks stay while only a reply streams, the band never sits on an unloaded prompt, a pending jump belongs to its chat, and the index is read again for a replaced history. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-d750cf10922c785efa64 * test(agent-chat): no findLast in the rail layout test (tsc lib) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-d750cf10922c785efa64 * style(agent-chat): vp fmt the rail's prompt index code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-d750cf10922c785efa64 * test(agent-pane): chat open trips count the rail's prompt index read apart Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-d750cf10922c785efa64 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
HOLD: base red
web / react-apps-checkhides webview test signal on feat-cmux-next (owner nx-ci); this PR touches webviews/ and lands once that check is green again.Leo (2026-10-25, the thread rail): "if you haven't loaded in chats ... the session rails ... should be able to still, like, gradually load that stuff in".
This is PR #25160, the rail integration stacked on PR #26033 (
rail-opus-earlier-prompts-index). PR A owns the prompt index, backward event paging,client.earlier, andloadThrough(seq); this PR lands after A and consumes that contract. The branch is mine and was rebuilt fromfeat-cmux-next.What changed
minimapTurnsprepends indexed prompts withindex: -1above the loaded window, counts the complete prompt set through each tick'saria-setsize, and retains the current promptId/row-id keys and Agent chat: polish minimap hover cards #25960 card metadata.ThreadMinimapsubscribes toclient.earlier. Clicking or scrubbing an unloaded prompt asksloadThrough(seq)to materialize it, then hands the existing jump path the real row; no second scroll compensator is introduced.thread-rail-every-prompt.test.tsis a real Chromium browser test: it pages a tail-only attach, verifies the fullaria-setsize, clicks the first unloaded tick, and waits foruser-1to materialize through history paging.Coordination
big-red/nx-chatacknowledgedACK-nx-history-contract-1027. nx-chat owns logical/physical history coordinates and the existing row-id prepend anchor (preserveScrollAnchorTopinconversation/scrollAnchor.ts, called byVirtualTranscript). PR A owns the complementary prompt index.Public shapes consumed from PR A:
Tests
Rebased onto A
181d9797847473707e927b7e4cda26e60090a22f. The rail-only commit is unchanged (git range-diff). A's unknown-boundary and equal-count regressions fail on8885fc97and pass on the current stack. The 235 generated page/byte splits still match whole-transcript keys. The failed-result regressions for read failure and the 200-page cap fail on1c1fd5d4and pass on this stack; the next prompt appears and is published exactly once.Current stack: 31 focused tests pass, one history browser-lane test is skipped in the ordinary local run, and
CMUX_BROWSER_TESTS=1 bun test test/thread-rail-every-prompt.test.tspasses in Chromium. A's PR body records the 320,000 worst-case transition bound and cap retention measurements (5,749,799 serialized transition bytes while unresolved, zero on completion; prompt display/refresh storage and JS overhead excluded).thread-rail-every-prompt.test.tsChromium browser lane passes withCMUX_BROWSER_TESTS=1.f6262e04and pass on the new stacked head: cross-page continuation state and final failed-read batch publication.bun run typecheck,check:fixed-waits,check:layers,check:design-tokens, targeted formatting, andgit diff --checkpass.python3 scripts/cmux-next/prepush-gate.pypasses on the exact stacked head; no native build was run.Perf (same harness, windowed rail, readDelay 300 ms, cmux-ci Chromium, 3 runs each; identical across runs)
02151f8c61bd0b5c02151f8c61bd0b5c(68 ticks drawn by the window)These are the same-harness windowed-rail measurements as the original PR, with the rebuilt stacked head recorded above.
Timers and stop conditions
close(); every stop cancels pending idle work.loadThroughuses the existing history guards and stops on exhaustion, no progress, stale selection/epoch, or client close; it never writesscrollTop.Changelog
Changed: the left prompt rail now represents every prompt in a long chat and materializes an unloaded prompt through the existing history/anchor path.
Agent session: agent session