You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
all - full tool output, edit diffs expanded, thinking visible
A chat used to start at overview, the most-collapsed level, so reaching the middle state took a Ctrl+O on every launch. Requested change: make the middle level the default.
Changes
Flip the two startup initializers in InteractiveMode (editDiffsExpanded: false -> true, hideThinkingBlock: true -> false) so every chat start - new, resumed, or attached - renders in details. toolOutputExpanded stays false, so tool output remains summarized at startup exactly as before.
The cycle itself is untouched: toggleToolOutputExpansion still walks overview -> details -> all, setChatDetail stays presentation-only (never persisted to settings or the session trace), and the fullscreen anchor logic is unchanged. Only the starting point moves one step.
Re-anchor the two regression suites that construct the real InteractiveMode from a startup-overview anchor to startup-details (cycle expectations shift by one step; full ring and every distinct assertion preserved - see Tests).
Changeset fragment in packages/coding-agent/.changes/chat-detail-middle-default.md.
Tests
No new test lines are added (the 1:1 test-line budget caps additions at the 2 changed source lines); the startup default is covered by the existing startup assertions, re-anchored to the new default:
2193-chat-detail-cycle.test.ts: the startup assertion now expects details for fresh, streamed, and reopened chats (it fails on base, where hideThinkingBlock: true collapses thinking at startup). The full details -> all -> overview -> details ring is still exercised, and the JSONL/settings-immutability assertions are unchanged.
2193-visible-message-spacing.test.ts: the two real-mode detail loops rotate [0, 1, 2, 0] -> [1, 2, 0, 1] (same asserted states, same ring); the third loop drives components directly and is untouched.
Two assertion pairs that used to run at different levels now run at the same startup level; they are kept intentionally so no assertion is removed, and their level coverage is not lost (the overview equivalents are still asserted later in the same tests).
All other interactive-mode tests drive explicit state (Object.create(InteractiveMode.prototype) with their own flags) and are unaffected.
Validation
Targeted vitest (all green): 2193-chat-detail-cycle 5/5, 2193-visible-message-spacing 5/5 (2 of 5 failed before the loop re-anchor), conversation-detail-status 4/4, compaction-message-components 10/10, interactive-mode-streaming 2/2, thinking-visibility 2/2, 2193-shell-completion-presentation 15/15, a 12-file interactive-mode surface batch 147/147, and a 5-file consumer sweep (2193-rendering-review, prompt-context-line, interactive-mode-status, plus repeats) 77/77.
TEST_POLICY_BASE=origin/main npm run check:test-policy passes: source +2, net test additions -4 (+8/-12).
npm run check passes: biome, test-policy, tsgo --noEmit, installer, browser-smoke.
Empirical pre-push probes (scratch vitest, deleted afterward): a real InteractiveMode starts at exactly the setChatDetail("details") triple; Ctrl+O walks details -> all -> overview -> details with per-level render semantics identical to base; reopened saved chats start at the new default; JSONL and settings stay byte-identical across cycles.
Note
Low Risk
Presentation-only default flags with no persistence or session trace changes; cycle behavior unchanged aside from the starting level.
Overview
New, resumed, and reopened chats now open in the details conversation-detail level instead of overview, so edit diffs and thinking are visible on launch while tool output stays summarized.
Startup defaults in InteractiveMode flip editDiffsExpanded to true and hideThinkingBlock to false; toolOutputExpanded stays false. Ctrl+O still cycles overview → details → all; only the initial step changes.
Regression tests in 2193-chat-detail-cycle and 2193-visible-message-spacing re-anchor cycle loops and startup assertions to details. A changeset note documents the behavior change.
Reviewed by Cursor Bugbot for commit 77544df. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Start InteractiveMode chats at the middle conversation-detail level
New interactive chats now open in the details state: edit diffs are expanded, thinking blocks are visible, and tool output stays collapsed. The Ctrl+O cycle order is unchanged. Regression tests for chat-detail cycling, visible-message spacing, and shell-notification ordering are updated to begin from the new details-first initial state.
Behavioral Change: InteractiveMode initial state changes from overview (collapsed diffs, hidden thinking) to details (expanded diffs, visible thinking). Reopened and live chats both start at details and cycle details -> all-output -> overview.
Main resolved at 2026-09-17T20:12:20.355515+00:00. Harness e2fb7bfa.
Linux x64, 4 vCPU, 8 GB RAM, 20 GB disk; region us.
Image: node:24-bookworm@sha256:be23f54a88d34e8824c741b19b91064094f92c1c97b194144bfc8b50d67258e2.
Stock tools, skills, daemon, and Python bootstrap enabled; fresh homes and a fixed Git fixture.
Onboarding is dismissed; the editor starts without a selected model or submitted prompt.
Medians shown. Arrows require a 20% timing/memory change plus absolute floors and IQR.
These practical noise floors are not a statistical significance test.
Cold means stopped Prime processes; OS filesystem caches are not flushed.
No model requests or credentials. Installation excludes build/setup time.
Installer tarballs use loopback; npm/Python downloads use the network with fresh caches.
Artifact size counts release tarballs; footprint after first use includes registry packages.
MB is decimal. Summed RSS can double-count shared pages; PSS is recorded when available.
Provisioning, setup, and build durations are recorded separately in the raw results.
Kernel probes use the installed JSONL runtime, outside the TUI/TypeScript host.
Per trial: 50 Python cells, 5 calls per shell case, and one 35-cell mix (9 git status calls).
Cell/shell values are batch means; other runtime timings are single operations.
State fixture: a 10,000-row × 8-column integer DataFrame and a 10,000-integer list.
Restore runs in a fresh kernel, including pandas imports; kernel startup is excluded.
Kernel RSS covers the isolated Python process; loaded RSS follows the pandas workload.
UI trials use a fresh fixture set: 194 top-level sessions including one ~40 MB transcript,
40 ledger fan-out children, and a 6-deep subagent chain (~46 spawn edges).
Large fixtures hold 1,999 complete triples (~5 MB JSONL); medium 119; subagents 399 each.
Interactions: cold --resume of a large session, warm /resume switch, left-arrow to agents view,
roster settle with many saved sessions, search-and-open of another large session,
reattaching to that resident session, opening the chain parent, and drilling to depth 6.
Readiness is the rendered transcript tail plus a confirmed editor echo.
CPU metrics sum utime+stime across the whole benchmark-user process tree per interaction.
UI memory sums RSS after the interactions; PTY byte counts are in the raw results.
A separate catalog fixture has 2,300 sessions, 2,298 edges, and 13 paused scheduled-job owners.
Catalog timings cover first/repeated reads and cold worker creation under three pending scans.
All expected jobs and owner metadata are checked; worker readiness excludes TUI rendering.
Costs estimate full sandbox lifetimes at configured rates, including setup and build.
Budget target: $1; not a billing cap. Performance changes are informational.
Failed or incomplete execution fails the workflow; saved artifacts remain available.
Each side stops a phase after 2 identical consecutive failures.
Skipped trials are not attempted samples. Warm startup requires a successful cold launch.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context
Ctrl+O (
app.tools.expand, "Cycle conversation detail") cycles three chat-detail levels,overview -> details -> all:A chat used to start at overview, the most-collapsed level, so reaching the middle state took a Ctrl+O on every launch. Requested change: make the middle level the default.
Changes
InteractiveMode(editDiffsExpanded: false -> true,hideThinkingBlock: true -> false) so every chat start - new, resumed, or attached - renders in details.toolOutputExpandedstaysfalse, so tool output remains summarized at startup exactly as before.toggleToolOutputExpansionstill walksoverview -> details -> all,setChatDetailstays presentation-only (never persisted to settings or the session trace), and the fullscreen anchor logic is unchanged. Only the starting point moves one step.InteractiveModefrom a startup-overviewanchor to startup-details(cycle expectations shift by one step; full ring and every distinct assertion preserved - see Tests).packages/coding-agent/.changes/chat-detail-middle-default.md.Tests
No new test lines are added (the 1:1 test-line budget caps additions at the 2 changed source lines); the startup default is covered by the existing startup assertions, re-anchored to the new default:
2193-chat-detail-cycle.test.ts: the startup assertion now expectsdetailsfor fresh, streamed, and reopened chats (it fails on base, wherehideThinkingBlock: truecollapses thinking at startup). The fulldetails -> all -> overview -> detailsring is still exercised, and the JSONL/settings-immutability assertions are unchanged.2193-visible-message-spacing.test.ts: the two real-mode detail loops rotate[0, 1, 2, 0]->[1, 2, 0, 1](same asserted states, same ring); the third loop drives components directly and is untouched.overviewequivalents are still asserted later in the same tests).All other interactive-mode tests drive explicit state (
Object.create(InteractiveMode.prototype)with their own flags) and are unaffected.Validation
2193-chat-detail-cycle5/5,2193-visible-message-spacing5/5 (2 of 5 failed before the loop re-anchor),conversation-detail-status4/4,compaction-message-components10/10,interactive-mode-streaming2/2,thinking-visibility2/2,2193-shell-completion-presentation15/15, a 12-file interactive-mode surface batch 147/147, and a 5-file consumer sweep (2193-rendering-review,prompt-context-line,interactive-mode-status, plus repeats) 77/77.TEST_POLICY_BASE=origin/main npm run check:test-policypasses: source +2, net test additions -4 (+8/-12).npm run checkpasses: biome, test-policy,tsgo --noEmit, installer, browser-smoke.InteractiveModestarts at exactly thesetChatDetail("details")triple; Ctrl+O walksdetails -> all -> overview -> detailswith per-level render semantics identical to base; reopened saved chats start at the new default; JSONL and settings stay byte-identical across cycles.Note
Low Risk
Presentation-only default flags with no persistence or session trace changes; cycle behavior unchanged aside from the starting level.
Overview
New, resumed, and reopened chats now open in the details conversation-detail level instead of overview, so edit diffs and thinking are visible on launch while tool output stays summarized.
Startup defaults in
InteractiveModeflipeditDiffsExpandedtotrueandhideThinkingBlocktofalse;toolOutputExpandedstaysfalse. Ctrl+O still cycles overview → details → all; only the initial step changes.Regression tests in
2193-chat-detail-cycleand2193-visible-message-spacingre-anchor cycle loops and startup assertions to details. A changeset note documents the behavior change.Reviewed by Cursor Bugbot for commit 77544df. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Start
InteractiveModechats at the middle conversation-detail levelNew interactive chats now open in the details state: edit diffs are expanded, thinking blocks are visible, and tool output stays collapsed. The
Ctrl+Ocycle order is unchanged. Regression tests for chat-detail cycling, visible-message spacing, and shell-notification ordering are updated to begin from the new details-first initial state.InteractiveModeinitial state changes from overview (collapsed diffs, hidden thinking) to details (expanded diffs, visible thinking). Reopened and live chats both start at details and cycle details -> all-output -> overview.Macroscope summarized 77544df.