Repository navigation
Agent pane: in Minimal Mode another agent's message is one line that opens in place - #25002
Conversation
In cmux's Minimal Mode (sidebar.minimal, which the host now sends with the chat's display keys) a closed incoming agent message draws as its line alone: the sender's chip (still opening that chat), the message's first line with an ellipsis, and a chevron. The line opens the full card in place through the transcript's shared fold and closes it again. Normal mode is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16f9b-2fcb-7c72-b06e-af8fce00adcb&host=cosmic-gray
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16f9b-2fcb-7c72-b06e-af8fce00adcb&host=cosmic-gray
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. |
|
Owned by claude-sr2/subsession-card on cosmic-gray · session |
…mal-message-collapse # Conflicts: # webviews/src/gallery/format.ts # webviews/src/gallery/frame/agentPane.ts
|
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)
Probably yours: CI failed on
Failures:
Matched log linesNot re-run automatically: Written by red: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base ce5e5c3; does not block Tour of Gallery before/after for |
|
Bead |
|
Found 21 test failures on Blacksmith runners: Failures
...and 11 more test failures. View all on Blacksmith: run 40155781857, run 40155781870
|
…preview) - A Minimal Mode toggle forgets incoming-message rows' drawn heights, so offscreen rows place by the new estimate (one pass on the toggle). - The line's card opens with no fade-in: useFold/useAnchoredCollapse take fadeIn (default true, other users unchanged); closing still fades. - A sent reply's "Replied" note hides while the message is folded. - messagePreview skips code fence markers (first code line), lone quote markers and reference definitions, and strips links with parens in the URL, titles, references, images and autolinks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16f9b-2fcb-7c72-b06e-af8fce00adcb&host=cosmic-gray
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16f9b-2fcb-7c72-b06e-af8fce00adcb&host=cosmic-gray
- A new chat look (a Minimal Mode toggle included) places every row again: the placement keeps no prefix across a look change, so offscreen incoming rows with no drawn height move to the new estimate too. - messagePreview drops single *italic* and _italic_ (not snake_case), closes a fence only on its own marker at least as long with nothing after it, and reads a shortcut reference [docs] as its label when the message defines it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16f9b-2fcb-7c72-b06e-af8fce00adcb&host=cosmic-gray
… refs) - The opened state of another agent's message moves to incomingOpened.ts, and the row estimator reads it: in Minimal Mode an opened message estimates as its whole card, a closed one as its line. - messagePreview finds link definitions outside fenced code only, reads [label][id] and [label][] as the label only when the id is defined, and skips thematic breaks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16f9b-2fcb-7c72-b06e-af8fce00adcb&host=cosmic-gray
…t fix) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16f9b-2fcb-7c72-b06e-af8fce00adcb&host=cosmic-gray
From the PR autofix's pr-autofix-patch (run 40154314645). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16f9b-2fcb-7c72-b06e-af8fce00adcb&host=cosmic-gray
…mal-message-collapse
|
Shipped in:
|
The envelope's fold ran in Minimal Mode too, animating Details and leaving the envelope mounted while it closed; #25002 shows and hides it at once there. The fold now runs only out of Minimal Mode. From the review of #24085. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-26b034d85e005a5da1d0
…ithout moving the view (#24085) * Agent pane: another agent's message opens below its line, animated, without moving the view The card's line and its Details are anchored collapses (useAnchoredCollapse, the transcript's shared hook from #24050): the line the reader clicked (chevron, plain sender name, Reply, or the cut card) stays on its pixel while the card under it changes, inside the virtualized transcript. Before, at the latest row the view followed the card's growth and the line jumped 235 px up. A cut card slides open to its whole height and back (fold.ts playResize: height over --cv-fold-duration, easing out); Details and its envelope fold in and out in height and opacity. At once under Reduce Motion; Find opening a message for its match does not animate. useAnchoredCollapse.ts, ANCHORED_COLLAPSE_EVENT and App.tsx's holdAsked listener are #24050's, byte for byte, so this rebases onto it cleanly once it lands. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16028-eee2-75a1-b075-2e4023976100&host=Air-Blue * Agent pane: Reply opens a message without holding its line, so the editor is in view Holding the line while Reply opened a long message left the focused editor below the view at the latest row. Reply now opens the card as before (the view follows the editor), still animated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16028-eee2-75a1-b075-2e4023976100&host=Air-Blue * Agent pane: a cut message's card never shrinks a frame as it opens Show more leaves at once while the text slides from its cut height, so the card was a button shorter for one frame; at the latest row that pulled the transcript's end, and the held line, 24 px up. The text now starts at the height that keeps the card as tall as it was drawn. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-26b034d85e005a5da1d0 * Agent pane: Find opening a closing message stops its slide A card sliding shut that Find opened again kept playing its resize, clipped until it ended and then snapped open. Find's open now cancels it (fold.ts cancelResize). From the review of #24085. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-26b034d85e005a5da1d0 * Agent pane: Minimal Mode's Details opens and closes at once, as before The envelope's fold ran in Minimal Mode too, animating Details and leaving the envelope mounted while it closed; #25002 shows and hides it at once there. The fold now runs only out of Minimal Mode. From the review of #24085. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-26b034d85e005a5da1d0 * Agent pane: rows below a message's card follow its slide before paint playResize now marks its row as folding (heightFoldInFlight), as useFold does, so the transcript places the rows under a sliding card synchronously instead of a frame late. A long message with no Details had nothing else marking it. From the review of #24085. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-26b034d85e005a5da1d0 * Agent pane: Find stops a message's slide even when it is already open Find's reveal cancelled the text's resize only through the [open] effect, so a card the reader had just opened kept sliding when Find landed on it. The reveal now cancels it directly. From the review of #24085. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-26b034d85e005a5da1d0 * Agent pane: a cancelled message slide lets go of its clip at once cancelResize cleared the text's overflow only from the animation's cancel event, which comes after the next paint, so Find opening a sliding card could show it clipped for a frame. It now clears it before cancelling. From the review of #24085. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-26b034d85e005a5da1d0 * Agent pane: each display mode folds its own message box Minimal Mode's card and the normal card's Details row shared one collapse, so switching Minimal Mode mid-close moved its ref to a new box while the old fold played on, and the whole card showed under the preview until it ended. Each mode now has its own collapse; the one not drawn changes at once. From the review of #24085. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-26b034d85e005a5da1d0 --------- 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)
Leo, 2026-10-24:
What changed
With cmux's Minimal Mode on (
sidebar.minimal, the palette's Enable Minimal Mode), another agent's message in the agent pane is one line:<button>witharia-expanded), opens today's full glass card in place. Clicking again closes it.useAnchoredCollapse/useFold, the same one tool rows use). The line stays where it is drawn, and Reduce Motion or the host's animations-off setting makes it happen at once.How the page knows about Minimal Mode:
AgentPaneDisplaySetting(Swift) now also sendssidebar.minimalin the chat'sdisplaypush, andchatDisplay.tsreads it asminimal. The page cannot write that key (writablePathrefuses it, and a test covers this). The row estimator (model.ts) counts a closed message in Minimal Mode as its line alone.Transcript placement (App.tsx), after review:
useFold's newfadeIn: false, which defaults to true, so other folds are unchanged). Closing still fades out.>lines and link definitions. It strips links (parentheses in the URL, titles, references, defined shortcut references, images and autolinks) and single*/_emphasis, but not snake_case.Other changes:
messagePreview(incomingMessage.ts, which nothing else used) now drops a link's target, so the line shows "Opened fix(next): keep composer drafts on whole lines #24772", not the URL.message.collapsedLabel("Message from {from}: {preview}"), the closed line's accessible name, is in Localizable.xcstrings with all 21 locales.displayon a variant, which is how the Minimal Mode variants turn it on.Hooks and cleanup: the change adds no timer, observer or animation loop of its own. The fold is the existing
useAnchoredCollapse/useFold: its Web Animation is cancelled on the next toggle and on unmount, and its motion-policyMutationObserveris disconnected when the fold ends. The text box's existingResizeObservermeasure keeps itsdisconnect()cleanup and now also re-runs when the mode switches, because the card moves into a new box. The change does no per-token work: the preview is memoized on the message body.Before / after (gallery
agent-pane.incoming-message, Linux Chromium, 560 px)Before is the base with the same gallery file and Minimal Mode on. On base, Minimal Mode does not reach the chat.
The long report's line opened (
minimal-open), and Minimal Mode off (minimal-off, identical to base):Variants (gallery only, except A)
I picked A.
Why not B or C:
B and C are drawn in the gallery only (
minimal-fade-count,minimal-inline-name), as a stylesheet over the shipped line.Risk
Small and contained: this only changes how incoming agent messages render in Minimal Mode, plus one read-only key added to the host's
displaypush. Nothing changes with Minimal Mode off. No default changes, and no existing component is removed or replaced.Overlap: #24085 (anchored, animated open in normal mode) edits the same
togglein IncomingMessageCard.tsx. This PR leaves normal mode's toggle as it is, and whichever lands second rebases.The Swift part (
AgentPaneDisplaySetting+ its test) was not compiled locally, because Mac builds don't run on this machine. CI's Swift compile and tests cover it.Tests
On huge-blue (Linux):
webviews/test/incoming-minimal-collapse.test.tsx. It checks:sidebar.minimal === true.aria-expandedandaria-controlsset;messagePreviewlink case added toincomingMessage.test.ts.AgentPaneDisplaySettingTests.thePageFollowsMinimalMode, andsidebar.minimaladded to the not-writable keys (Swift, runs in CI).bun teston the new test,incoming-sender-chip,incomingMessage,agent-pane-chat-display,transcript-received-messagesandrowEstimates: 70 pass, 0 fail.vp check --no-fmt --no-lint(typecheck): no errors.vp fmt --checkandvp linton the touched files: clean.check:catalog-keys,check:motion-scale,check:design-tokensandcheck:layerspass.No capture: the one native change (AgentPaneDisplaySetting.swift) draws no UI. It forwards the existing
sidebar.minimalsetting into the chat page, and everything that draws is the webview, captured above from the gallery in light and dark at the base and at this head (galleryagent-pane.incoming-message).Agent session: cosmic-gray
🤖 Generated with Claude Code