Repository navigation
agent transcript: toggle holds last a fixed minimum, a sideways wheel keeps them, and a stale press is never reused (follow-up to #28780) - #28324
Conversation
…cked Leo (ask-a736047107): "AND IT'S SO FUCKING AWKWARD TO SEE THEM THERE AT THE BOTTOM SINCE WHEN I EXPAND THEM IT JUMPS ME DOWN AND WHEN I COLLAPSE IT JUMPS ME UP" A click on a transcript disclosure now keeps the content at least as tall as the view's end, so closing a body near the transcript's end leaves room under the rows instead of the browser clamping the offset and bringing every row (and the clicked line) down by what closed. The room follows the view's end as the reader scrolls up and goes once the rows reach it, on a send, on Jump to latest and on a chat switch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ggle holds its place Leo (ask-486cb2cec3): "why the fuck did you guys ffucking ellipsis EVERYTHING WITH NO WAY TO EXPAND WHAT WAS SAID TO SEE" - A tool call that is not a shell always opens, and opened its label wraps whole (a long search pattern, URL or path); a call with no output opens to that alone. - A dispatch report keeps its whole text (no 2,000-character cut). - An opened agent message names its other chat whole; an opened sub-session line shows its whole state. - FOLD_TOGGLE now holds every control that opens something in a row (Show more, Show all lines, Raw, +N more, a sent message line, an agent message line's words); one under its body holds its row's top. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…transcript-expand-anchor
…transcript-expand-anchor
…r the view covers it Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
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)
Gallery before/after for
States
Pick other states with a Passes: CI passes on CI passes on Written by web and size checks: green Shipped in:
|
|
Found 1 test failure on Blacksmith runners: Failure
|
|
Owned by an agent session · session |
…ot toggles; an opened name wraps Review findings at d32bcfe: a collapse that leaves room stops following, and a followed view drops the room; a click on a control inside a toggle (a sent line's recipient, Copy) holds nothing; an opened agent message's name wraps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review (codex gpt-6-astra high, next-review): SHIP at abd00d3 No blocking findings. Review coverage was limited by the omitted |
…ed time Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ine settles Wrap lines (aria-pressed) and a diagram's chart/code toggle now hold their line. The hold starts on pointerdown, flushes drawn heights synchronously while it holds, extends while the line still moves (capped at 1.5 s, so Reduce Motion gets a real hold), and a sideways wheel no longer lets go. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
A hold that started on pointerdown re-placed the row under the pointer, so a tall prompt's Show less got its press and release on different nodes and never clicked. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
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. |
|
Review (codex gpt-6-astra high, next-review): BLOCK at 5e59e44
|
…ile the line moves An extending hold kept putting a tall prompt back while the view was scrolled to it, so its Show less missed its click. A toggle with no fold (Reduce Motion) now holds for at least 400 ms. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
…ck's pressed place Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
…transcript-expand-anchor # Conflicts: # webviews/src/agent-session/acpmux/App.tsx
|
Review (codex gpt-6-astra high fast, review-router): SHIP at f24b1cd
Visual: no after images were attached to this review (the body's media had not been posted); visual verdict to follow from the gallery run at this head. |
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. |
…eps the hold; no dangling aria-controls Pin and Read aloud (aria-pressed, no height change) no longer start a hold that could stop following. Wrap lines and a diagram's toggle say they fold (data-fold-toggle). cancelProgrammatic keeps the hold through a horizontal wheel. A no-output call names no body it does not draw. A keyboard click or a cancelled press never reuses an abandoned press place. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
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. |
…transcript-expand-anchor # Conflicts: # webviews/test/agent-pane-tool-group-scroll.test.ts
|
Review (codex gpt-6.1-sol xhigh, next-review): SHIP at 798d36e SHIP at 798d36e Visual verdict: supplied before/after screenshots look clean; no clipping, bloated menu, or off-screen layout.
Validation: targeted tests could not run because Follow-ups:
|
…line; a file link is no toggle Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
…d collapsing keep your place (carry #28324) (#28780) * agent transcript: closing a line at the end keeps it where it was clicked Leo (ask-a736047107): "AND IT'S SO FUCKING AWKWARD TO SEE THEM THERE AT THE BOTTOM SINCE WHEN I EXPAND THEM IT JUMPS ME DOWN AND WHEN I COLLAPSE IT JUMPS ME UP" A click on a transcript disclosure now keeps the content at least as tall as the view's end, so closing a body near the transcript's end leaves room under the rows instead of the browser clamping the offset and bringing every row (and the clicked line) down by what closed. The room follows the view's end as the reader scrolls up and goes once the rows reach it, on a send, on Jump to latest and on a chat switch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * agent transcript: every cut row opens to its whole text, and every toggle holds its place Leo (ask-486cb2cec3): "why the fuck did you guys ffucking ellipsis EVERYTHING WITH NO WAY TO EXPAND WHAT WAS SAID TO SEE" - A tool call that is not a shell always opens, and opened its label wraps whole (a long search pattern, URL or path); a call with no output opens to that alone. - A dispatch report keeps its whole text (no 2,000-character cut). - An opened agent message names its other chat whole; an opened sub-session line shows its whole state. - FOLD_TOGGLE now holds every control that opens something in a row (Show more, Show all lines, Raw, +N more, a sent message line, an agent message line's words); one under its body holds its row's top. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * agent transcript: the kept collapse room lets go once the hold ends or the view covers it Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * agent transcript: no fold room while following; nested controls are not toggles; an opened name wraps Review findings at d32bcfe: a collapse that leaves room stops following, and a followed view drops the room; a click on a control inside a toggle (a sent line's recipient, Copy) holds nothing; an opened agent message's name wraps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * test(transcript): fold-keeps-place waits on painted frames, not a fixed time Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Hold every height toggle from the press, and keep holding while the line settles Wrap lines (aria-pressed) and a diagram's chart/code toggle now hold their line. The hold starts on pointerdown, flushes drawn heights synchronously while it holds, extends while the line still moves (capped at 1.5 s, so Reduce Motion gets a real hold), and a sideways wheel no longer lets go. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100 * test(transcript): step the settling hold to its cap Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100 * agent transcript: the press notes the line's place; only the click holds A hold that started on pointerdown re-placed the row under the pointer, so a tall prompt's Show less got its press and release on different nodes and never clicked. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100 * agent transcript: Show less scrolled down to keeps the clicked control in view Review BLOCK at 5e59e44 (foldAnchor.ts): a control under its body held its row's top, so closing a long output from Show less, scrolled down to at the transcript's end, closed the row up above the view and the kept fold room left the view blank. A row whose top is above the view now holds the clicked control instead, and once no hold is in flight the kept room goes when the rows end above the view's top, so the view is never only room. Tests: foldAnchor.test.ts (red before: 2 fail), and transcript gallery states cut-line-closed, cut-line-open and show-less-keeps-place, whose plays check the whole label and the clicked control in view (agent-pane-show-less-keeps-place.test.ts runs them). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639 * gallery: the cut-line states find the call's line by its toggle, so base renders them too Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639 * agent transcript: a reply's Pin and Read aloud no longer hold the row or stop following FOLD_TOGGLE's `button[aria-pressed]` also matched a reply's Pin and Read aloud, so toggling either while a reply streamed entered the folding pass and called follow(false). An aria-pressed button is now held only when it says it changes its block's height (`data-fold-toggle`: Wrap lines in code, diff and output blocks, and a tool output's Raw). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639 * gallery: Show less's play scrolls down with a wheel, as the reader does The play set the transcript's offset with scrollIntoView while the hold that Show all's click started was still on, so the transcript put the row back where the click held it and the wait for Show less at the view's foot never held (scrollTop stayed 0 for the whole 5 s cap). A wheel first lets go of the hold, as a reader's scroll does (App.tsx `release`). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639 * gallery: Show less's play scrolls only once the opened output has landed The wheel alone was not enough: the play scrolled to Show less while the opened output's fold was still playing and the rows under it still placing, so the content grew past the offset it set (scrollHeight 2653 at the scroll, 3300 after) and Show less never reached the view's foot within the 5 s cap. The play now waits for three frames at one content height with nothing animating, then scrolls with a one-pixel wheel (whose glide moves nothing that matters) and scrollIntoView. Three runs in a row pass on CI at ef3f3ae with this change applied. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-63b9964940c20354b639 --------- Co-authored-by: ci <ci@example.invalid> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…transcript-expand-anchor # Conflicts: # webviews/src/agent-session/acpmux/App.tsx # webviews/src/agent-session/acpmux/conversation/TruncatedRowsReachable.test.tsx # webviews/src/agent-session/acpmux/conversation/foldAnchor.test.ts # webviews/src/agent-session/acpmux/conversation/foldAnchor.ts
…lery play names the minimum hold Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
|
Review (codex gpt-6.1-sol xhigh, next-review): BLOCK at ee6c53d BLOCK at ee6c53d Visual verdict: compared all 17 supplied before/after pairs; no additional visual findings.
Validation: changed TypeScript files parse; focused helper and report checks passed. Bun/browser tests could not run because the runtimes and dependencies are absent. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-06adbde0c46733e12100
|
Review (gpt-6-astra high, router-review range 625b1ca..4a6266a): SHIP at 4a6266a. Earlier PR-form review (gpt-6.1-sol xhigh) gave SHIP at ee6c53d with images viewed; this head adds only the base merge with #28780 and its conflict resolution. cmux-ci at the merged head: typecheck, browser-lanes, fixed-waits and fmt clean; 613 unit and 53 transcript browser tests pass. |
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Leo's words:
#28780 carried this PR's earlier head (5e59e44) to
feat-cmux-next: every cut row opens to its whole text, every toggle holds its place, and the collapse room. This PR is now the remainder. It holds the toggle-hold fixes made after that head, merged with the current base. Its diff against base is about 60 lines.What this changes
foldAnchor.ts). Base extends a hold by 150 ms every time its line moves, up to 1.5 s. While the view was scrolled to a tall prompt, that kept re-placing the prompt under the pointer, and its Show less missed the click (transcript-fold-anchor-browser: "Show less on a prompt several screens tall, with motion off" failed with it). Every hold now lastsmax(foldMs + FOLD_SETTLE_MS, FOLD_HOLD_MIN_MS = 400 ms). A toggle with no fold under Reduce Motion, which used to get 150 ms, is still held while what it opened is measured and placed.App.tsxcancelProgrammatic). Base exempted a horizontal wheel only inrelease. The user-scroll intent listener cleared the hold first, so scrolling a code block sideways still let go.App.tsx). A keyboard click (detail === 0) does not reuse an earlier, abandoned press, andpointercanceldrops it. The row's own anchored-collapse event (holdAsked) keeps the click's pressed place instead of replacing it with where the line is now.NESTED_CONTROLgains[role="link"], the roleWriteLabel's file name uses).aria-controls(ToolRow.tsx). Since every call opens, an opened call with no output names a body only when one is drawn.DiagramBlock's toggle carriesdata-fold-toggletoo, like Wrap lines and Raw.Stop and cleanup
Nothing new animates. A hold is a timestamp checked on each placement pass, with no timer. It ends at
max(foldMs + FOLD_SETTLE_MS, FOLD_HOLD_MIN_MS)after the click, or at once on a vertical wheel, a key, a touch or a drag. Thepointercancellistener is added and removed with thepointerdownandclicklisteners. Nothing runs per streamed token.Tests
conversation/foldAnchor.test.ts:FOLD_HOLD_MIN_MSconversation/TruncatedRowsReachable.test.tsx: an opened call'saria-controlsnames a body that exists, and a call with no output names none.cmux-cion Linux Chromium:check:browser-lanes,check:fixed-waits,vp fmtMedia
Linux Chromium gallery,
agent-pane.tool-row-column(variantcolumn), with the tool group opened. Captured throughcmux-ciusing a public gallery fixture. It shows what #28780 shipped and this PR keeps: every call row opens. This PR changes no layout.Risk
Low. Hold timing only:
Performance
Follow-ups from review (not in this PR)
rowsEndand stop following.outputSummaryno longer caps text forbriefs,steeranddispatch, not only reports.Agent session: agent session
🤖 Generated with Claude Code