diff --git a/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame-Full-Terminal-Tool-Confirmation-Snapshot-renders-tool-confirmation-box-in-the-frame-of-the-entire-terminal.snap.svg b/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame-Full-Terminal-Tool-Confirmation-Snapshot-renders-tool-confirmation-box-in-the-frame-of-the-entire-terminal.snap.svg index 97b01f3025..b83d79928c 100644 --- a/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame-Full-Terminal-Tool-Confirmation-Snapshot-renders-tool-confirmation-box-in-the-frame-of-the-entire-terminal.snap.svg +++ b/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame-Full-Terminal-Tool-Confirmation-Snapshot-renders-tool-confirmation-box-in-the-frame-of-the-entire-terminal.snap.svg @@ -4,16 +4,14 @@ - - ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ - - - > - - Can you edit InputPrompt.tsx for me? - - - ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + + + > + + Can you edit InputPrompt.tsx for me? + + + ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ╭─────────────────────────────────────────────────────────────────────────────────────────────────╮ Action Required @@ -55,7 +53,7 @@ true ; - + 48 const diff --git a/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame.test.tsx.snap b/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame.test.tsx.snap index 98853434df..6841182785 100644 --- a/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame.test.tsx.snap +++ b/packages/cli/src/ui/__snapshots__/ToolConfirmationFullFrame.test.tsx.snap @@ -1,9 +1,9 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`Full Terminal Tool Confirmation Snapshot > renders tool confirmation box in the frame of the entire terminal 1`] = ` -"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ - > Can you edit InputPrompt.tsx for me? +" > Can you edit InputPrompt.tsx for me? ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + ╭─────────────────────────────────────────────────────────────────────────────────────────────────╮ │ Action Required │ │ │ @@ -12,7 +12,7 @@ exports[`Full Terminal Tool Confirmation Snapshot > renders tool confirmation bo │ ... first 44 lines hidden (Ctrl+O to show) ... │ │ 45 const line45 = true; │ │ 46 const line46 = true; │ -│ 47 const line47 = true; │█ +│ 47 const line47 = true; │▄ │ 48 const line48 = true; │█ │ 49 const line49 = true; │█ │ 50 const line50 = true; │█ diff --git a/packages/cli/src/ui/components/HistoryItemDisplay.tsx b/packages/cli/src/ui/components/HistoryItemDisplay.tsx index 6fb142b2eb..dc98af93e8 100644 --- a/packages/cli/src/ui/components/HistoryItemDisplay.tsx +++ b/packages/cli/src/ui/components/HistoryItemDisplay.tsx @@ -49,6 +49,7 @@ interface HistoryItemDisplayProps { isExpandable?: boolean; isFirstThinking?: boolean; isFirstAfterThinking?: boolean; + isToolGroupBoundary?: boolean; suppressNarration?: boolean; } @@ -62,14 +63,17 @@ export const HistoryItemDisplay: React.FC = ({ isExpandable, isFirstThinking = false, isFirstAfterThinking = false, + isToolGroupBoundary = false, suppressNarration = false, }) => { const settings = useSettings(); const inlineThinkingMode = getInlineThinkingMode(settings); const itemForDisplay = useMemo(() => escapeAnsiCtrlCodes(item), [item]); - const needsTopMarginAfterThinking = - isFirstAfterThinking && inlineThinkingMode !== 'off'; + const needTopMargin = !!( + (isFirstAfterThinking && inlineThinkingMode !== 'off') || + isToolGroupBoundary + ); // If there's a topic update in this turn, we suppress the regular narration // and thoughts as they are being "replaced" by the update_topic tool. @@ -87,7 +91,7 @@ export const HistoryItemDisplay: React.FC = ({ flexDirection="column" key={itemForDisplay.id} width={terminalWidth} - marginTop={needsTopMarginAfterThinking ? 1 : 0} + marginTop={needTopMargin ? 1 : 0} > {/* Render standard message types */} {itemForDisplay.type === 'thinking' && inlineThinkingMode !== 'off' && ( @@ -214,6 +218,7 @@ export const HistoryItemDisplay: React.FC = ({ borderTop={itemForDisplay.borderTop} borderBottom={itemForDisplay.borderBottom} isExpandable={isExpandable} + isToolGroupBoundary={isToolGroupBoundary} /> )} {itemForDisplay.type === 'subagent' && ( diff --git a/packages/cli/src/ui/components/MainContent.tsx b/packages/cli/src/ui/components/MainContent.tsx index c4e395c612..9ca5260988 100644 --- a/packages/cli/src/ui/components/MainContent.tsx +++ b/packages/cli/src/ui/components/MainContent.tsx @@ -103,12 +103,16 @@ export const MainContent = () => { item.type === 'thinking' && prevType !== 'thinking'; const isFirstAfterThinking = item.type !== 'thinking' && prevType === 'thinking'; + const isToolGroupBoundary = + (item.type !== 'tool_group' && prevType === 'tool_group') || + (item.type === 'tool_group' && prevType !== 'tool_group'); return { item, isExpandable: i > lastUserPromptIndex, isFirstThinking, isFirstAfterThinking, + isToolGroupBoundary, suppressNarration: suppressNarrationFlags[i] ?? false, }; }), @@ -123,6 +127,7 @@ export const MainContent = () => { isExpandable, isFirstThinking, isFirstAfterThinking, + isToolGroupBoundary, suppressNarration, }) => ( { isExpandable={isExpandable} isFirstThinking={isFirstThinking} isFirstAfterThinking={isFirstAfterThinking} + isToolGroupBoundary={isToolGroupBoundary} suppressNarration={suppressNarration} /> ), @@ -175,6 +181,9 @@ export const MainContent = () => { item.type === 'thinking' && prevType !== 'thinking'; const isFirstAfterThinking = item.type !== 'thinking' && prevType === 'thinking'; + const isToolGroupBoundary = + (item.type !== 'tool_group' && prevType === 'tool_group') || + (item.type === 'tool_group' && prevType !== 'tool_group'); const suppressNarration = suppressNarrationFlags[uiState.history.length + i] ?? false; @@ -191,6 +200,7 @@ export const MainContent = () => { isExpandable={true} isFirstThinking={isFirstThinking} isFirstAfterThinking={isFirstAfterThinking} + isToolGroupBoundary={isToolGroupBoundary} suppressNarration={suppressNarration} /> ); @@ -224,6 +234,7 @@ export const MainContent = () => { isExpandable, isFirstThinking, isFirstAfterThinking, + isToolGroupBoundary, suppressNarration, }) => ({ type: 'history' as const, @@ -231,6 +242,7 @@ export const MainContent = () => { isExpandable, isFirstThinking, isFirstAfterThinking, + isToolGroupBoundary, suppressNarration, }), ), @@ -266,6 +278,7 @@ export const MainContent = () => { isExpandable={item.isExpandable} isFirstThinking={item.isFirstThinking} isFirstAfterThinking={item.isFirstAfterThinking} + isToolGroupBoundary={item.isToolGroupBoundary} suppressNarration={item.suppressNarration} /> ); diff --git a/packages/cli/src/ui/components/__snapshots__/AlternateBufferQuittingDisplay.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/AlternateBufferQuittingDisplay.test.tsx.snap index 68e202752e..d4dc67bbc6 100644 --- a/packages/cli/src/ui/components/__snapshots__/AlternateBufferQuittingDisplay.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/AlternateBufferQuittingDisplay.test.tsx.snap @@ -43,12 +43,10 @@ Tips for getting started: │ ✓ tool1 Description for tool 1 │ │ │ ╰──────────────────────────────────────────────────────────────────────────╯ - ╭──────────────────────────────────────────────────────────────────────────╮ │ ✓ tool2 Description for tool 2 │ │ │ ╰──────────────────────────────────────────────────────────────────────────╯ - ╭──────────────────────────────────────────────────────────────────────────╮ │ o tool3 Description for tool 3 │ │ │ @@ -95,7 +93,6 @@ Tips for getting started: │ ✓ tool1 Description for tool 1 │ │ │ ╰──────────────────────────────────────────────────────────────────────────╯ - ╭──────────────────────────────────────────────────────────────────────────╮ │ ✓ tool2 Description for tool 2 │ │ │ diff --git a/packages/cli/src/ui/components/__snapshots__/MainContent.test.tsx.snap b/packages/cli/src/ui/components/__snapshots__/MainContent.test.tsx.snap index f0260ddc91..7dab229ecd 100644 --- a/packages/cli/src/ui/components/__snapshots__/MainContent.test.tsx.snap +++ b/packages/cli/src/ui/components/__snapshots__/MainContent.test.tsx.snap @@ -3,6 +3,7 @@ exports[`MainContent > MainContent Tool Output Height Logic > 'ASB mode - Focused shell should expand' 1`] = ` "ScrollableList AppHeader(full) + ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ ⠋ Shell Command Running a long command... │ │ │ @@ -23,6 +24,7 @@ AppHeader(full) exports[`MainContent > MainContent Tool Output Height Logic > 'ASB mode - Unfocused shell' 1`] = ` "ScrollableList AppHeader(full) + ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ ⠋ Shell Command Running a long command... │ │ │ @@ -42,6 +44,7 @@ AppHeader(full) exports[`MainContent > MainContent Tool Output Height Logic > 'Normal mode - Constrained height' 1`] = ` "AppHeader(full) + ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ ⠋ Shell Command Running a long command... │ │ │ @@ -61,6 +64,7 @@ exports[`MainContent > MainContent Tool Output Height Logic > 'Normal mode - Con exports[`MainContent > MainContent Tool Output Height Logic > 'Normal mode - Unconstrained height' 1`] = ` "AppHeader(full) + ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ ⠋ Shell Command Running a long command... │ │ │ @@ -93,6 +97,7 @@ exports[`MainContent > renders a ToolConfirmationQueue without an extra line whe ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ > Apply plan ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + ╭──────────────────────────────────────────────────────────────────────────────╮ │ Ready to start implementation? │ │ │ @@ -103,6 +108,7 @@ exports[`MainContent > renders a ToolConfirmationQueue without an extra line whe exports[`MainContent > renders a split tool group without a gap between static and pending areas 1`] = ` "AppHeader(full) + ╭──────────────────────────────────────────────────────────────────────────╮ │ ✓ test-tool A tool for testing │ │ │ @@ -128,6 +134,7 @@ exports[`MainContent > renders a subagent with a complete box including bottom b ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ > Investigate ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + ╭──────────────────────────────────────────────────────────────────────────╮ │ ≡ Running Agent... (ctrl+o to collapse) │ │ │ diff --git a/packages/cli/src/ui/components/messages/ToolGroupMessage.tsx b/packages/cli/src/ui/components/messages/ToolGroupMessage.tsx index ee740787c2..2e9fb2d41d 100644 --- a/packages/cli/src/ui/components/messages/ToolGroupMessage.tsx +++ b/packages/cli/src/ui/components/messages/ToolGroupMessage.tsx @@ -113,6 +113,7 @@ interface ToolGroupMessageProps { borderTop?: boolean; borderBottom?: boolean; isExpandable?: boolean; + isToolGroupBoundary?: boolean; } // Main component renders the border and maps the tools using ToolMessage @@ -126,6 +127,7 @@ export const ToolGroupMessage: React.FC = ({ borderTop: borderTopOverride, borderBottom: borderBottomOverride, isExpandable, + isToolGroupBoundary, }) => { const settings = useSettings(); const isLowErrorVerbosity = settings.merged.ui?.errorVerbosity !== 'full'; @@ -219,10 +221,11 @@ export const ToolGroupMessage: React.FC = ({ const staticHeight = useMemo(() => { let height = 0; + for (let i = 0; i < groupedTools.length; i++) { const group = groupedTools[i]; - const isFirst = i === 0; const isLast = i === groupedTools.length - 1; + const prevGroup = i > 0 ? groupedTools[i - 1] : null; const prevIsCompact = prevGroup && @@ -235,42 +238,85 @@ export const ToolGroupMessage: React.FC = ({ !Array.isArray(nextGroup) && isCompactTool(nextGroup, isCompactModeEnabled); + const nextIsTopicToolCall = + nextGroup && !Array.isArray(nextGroup) && isTopicTool(nextGroup.name); + const isAgentGroup = Array.isArray(group); const isCompact = !isAgentGroup && isCompactTool(group, isCompactModeEnabled); + const isTopicToolCall = !isAgentGroup && isTopicTool(group.name); - const showClosingBorder = !isCompact && (nextIsCompact || isLast); - - if (isFirst) { - height += borderTopOverride ? 1 : 0; - } else if (isCompact !== prevIsCompact) { - // Add a 1-line gap when transitioning between compact and standard tools (or vice versa) - height += 1; + // Align isFirst logic with rendering + let isFirst = i === 0; + if (!isFirst) { + // Check if all previous tools were topics (matches rendering logic exactly) + let allPreviousTopics = true; + for (let j = 0; j < i; j++) { + const prevGroupItem = groupedTools[j]; + if ( + Array.isArray(prevGroupItem) || + !isTopicTool(prevGroupItem.name) + ) { + allPreviousTopics = false; + break; + } + } + isFirst = allPreviousTopics; } const isFirstProp = !!(isFirst ? (borderTopOverride ?? true) : prevIsCompact); + const showClosingBorder = + !isCompact && + !isTopicToolCall && + (nextIsCompact || nextIsTopicToolCall || isLast); + if (isAgentGroup) { - // Agent group - height += 1; // Header - height += group.length; // 1 line per agent - if (isFirstProp) height += 1; // Top border - if (showClosingBorder) height += 1; // Bottom border + // Agent Group Spacing Breakdown: + // 1. Top Boundary (0 or 1): Only present via borderTop if isFirstProp is true. + // 2. Header Content (1): The "≡ Running Agent..." status text. + // 3. Agent List (group.length lines): One line per agent in the group. + // 4. Closing Border (1): Added if transition logic (showClosingBorder) requires it. + height += + (isFirstProp ? 1 : 0) + + 1 + + group.length + + (showClosingBorder ? 1 : 0); + } else if (isTopicToolCall) { + // Topic Message Spacing Breakdown: + // 1. Top Margin (1): Present unless it's the very first item following a boundary. + // 2. Topic Content (1). + // 3. Bottom Margin (1): Always present around TopicMessage for breathing room. + const hasTopMargin = !(isFirst && isToolGroupBoundary); + height += (hasTopMargin ? 1 : 0) + 1 + 1; + } else if (isCompact) { + // Compact Tool: Always renders as a single dense line. + height += 1; } else { - if (isCompact) { - height += 1; // Base height for compact tool - } else { - // Static overhead for standard tool header: - height += - TOOL_RESULT_STATIC_HEIGHT + - TOOL_RESULT_STANDARD_RESERVED_LINE_COUNT; - } + // Standard Tool (ToolMessage / ShellToolMessage) Spacing Breakdown: + // 1. TOOL_RESULT_STANDARD_RESERVED_LINE_COUNT (4) accounts for the top boundary, + // internal separator, header padding, and the group closing border. + // (Subtract 1 to isolate the group-level closing border.) + // 2. Header Content (1): TOOL_RESULT_STATIC_HEIGHT (the tool name/status). + // 3. Output File Message (1): (conditional) if outputFile is present. + // 4. Group Closing Border (1): (conditional) if transition logic (showClosingBorder) requires it. + height += + TOOL_RESULT_STANDARD_RESERVED_LINE_COUNT - + 1 + + TOOL_RESULT_STATIC_HEIGHT + + (group.outputFile ? 1 : 0) + + (showClosingBorder ? 1 : 0); } } return height; - }, [groupedTools, isCompactModeEnabled, borderTopOverride]); + }, [ + groupedTools, + isCompactModeEnabled, + borderTopOverride, + isToolGroupBoundary, + ]); let countToolCallsWithResults = 0; for (const tool of visibleToolCalls) { @@ -325,9 +371,7 @@ export const ToolGroupMessage: React.FC = ({ */ width={terminalWidth} paddingRight={TOOL_MESSAGE_HORIZONTAL_MARGIN} - // When border will be present, add margin of 1 to create spacing from the - // previous message. - marginBottom={(borderBottomOverride ?? true) ? 1 : 0} + marginBottom={0} > {visibleToolCalls.length === 0 && isExplicitClosingSlice && @@ -371,41 +415,27 @@ export const ToolGroupMessage: React.FC = ({ nextGroup && !Array.isArray(nextGroup) && isCompactTool(nextGroup, isCompactModeEnabled); + const nextIsTopicToolCall = + nextGroup && !Array.isArray(nextGroup) && isTopicTool(nextGroup.name); const isAgentGroup = Array.isArray(group); const isCompact = !isAgentGroup && isCompactTool(group, isCompactModeEnabled); const isTopicToolCall = !isAgentGroup && isTopicTool(group.name); - // When border is present, add margin of 1 to create spacing from the - // previous message. - let marginTop = 0; - if (isFirst) { - marginTop = (borderTopOverride ?? false) ? 1 : 0; - } else if (isCompact && prevIsCompact) { - marginTop = 0; - } else if (isCompact || prevIsCompact) { - marginTop = 1; - } else { - // For subsequent standard tools scenarios, the ToolMessage and - // ShellToolMessage components manage their own top spacing by passing - // `isFirst=false` to their internal StickyHeader which then applies - // a paddingTop=1 to create desired gap between standard tool outputs. - marginTop = 0; - } - const isFirstProp = !!(isFirst ? (borderTopOverride ?? true) : prevIsCompact); const showClosingBorder = - !isCompact && !isTopicToolCall && (nextIsCompact || isLast); + !isCompact && + !isTopicToolCall && + (nextIsCompact || nextIsTopicToolCall || isLast); if (isAgentGroup) { return ( @@ -450,16 +480,16 @@ export const ToolGroupMessage: React.FC = ({ return ( - + {isCompact ? ( ) : isTopicToolCall ? ( - + + + ) : isShellToolCall ? ( ) : ( diff --git a/packages/cli/src/ui/components/messages/__snapshots__/ToolGroupMessage.compact.test.tsx.snap b/packages/cli/src/ui/components/messages/__snapshots__/ToolGroupMessage.compact.test.tsx.snap index 37b111ed1e..a60ac429c7 100644 --- a/packages/cli/src/ui/components/messages/__snapshots__/ToolGroupMessage.compact.test.tsx.snap +++ b/packages/cli/src/ui/components/messages/__snapshots__/ToolGroupMessage.compact.test.tsx.snap @@ -2,7 +2,6 @@ exports[`ToolGroupMessage Compact Rendering > does not add an extra empty line between a compact tool and a standard tool 1`] = ` " ✓ ReadFolder Listing files → file1.txt - ╭──────────────────────────────────────────────────────────────────────────╮ │ ✓ non-compact-tool Doing something │ │ │ @@ -17,7 +16,6 @@ exports[`ToolGroupMessage Compact Rendering > does not add an extra empty line b │ │ │ some large output │ ╰──────────────────────────────────────────────────────────────────────────╯ - ✓ ReadFolder Listing files → file1.txt " `; diff --git a/packages/cli/src/ui/components/messages/__snapshots__/ToolGroupMessage.test.tsx.snap b/packages/cli/src/ui/components/messages/__snapshots__/ToolGroupMessage.test.tsx.snap index af0aa58a9e..270f8e1b8f 100644 --- a/packages/cli/src/ui/components/messages/__snapshots__/ToolGroupMessage.test.tsx.snap +++ b/packages/cli/src/ui/components/messages/__snapshots__/ToolGroupMessage.test.tsx.snap @@ -62,8 +62,9 @@ exports[` > Golden Snapshots > renders empty tool calls arra exports[` > Golden Snapshots > renders header when scrolled 1`] = ` "╭──────────────────────────────────────────────────────────────────────────╮ -│ ✓ tool-1 Description 1. This is a long description that will need to b… │ -│──────────────────────────────────────────────────────────────────────────│ ▄ +│ ✓ tool-1 Description 1. This is a long description that will need to b… │ ▄ +│──────────────────────────────────────────────────────────────────────────│ █ +│ line3 │ █ │ line4 │ █ │ line5 │ █ │ │ █ @@ -72,12 +73,13 @@ exports[` > Golden Snapshots > renders header when scrolled │ line1 │ █ │ line2 │ █ ╰──────────────────────────────────────────────────────────────────────────╯ █ - █ " `; exports[` > Golden Snapshots > renders mixed tool calls including update_topic 1`] = ` -" Testing Topic: This is the description +" + Testing Topic: This is the description + ╭──────────────────────────────────────────────────────────────────────────╮ │ ✓ read_file Read a file │ │ │ @@ -131,17 +133,18 @@ exports[` > Golden Snapshots > renders tool call with output `; exports[` > Golden Snapshots > renders two tool groups where only the last line of the previous group is visible 1`] = ` -"╭──────────────────────────────────────────────────────────────────────────╮ +"╰──────────────────────────────────────────────────────────────────────────╯ +╭──────────────────────────────────────────────────────────────────────────╮ │ ✓ tool-2 Description 2 │ -│ │ -│ line1 │ ▄ +│ │ ▄ +│ line1 │ █ ╰──────────────────────────────────────────────────────────────────────────╯ █ - █ " `; exports[` > Golden Snapshots > renders update_topic tool call using TopicMessage > update_topic_tool 1`] = ` -" Testing Topic: This is the description +" + Testing Topic: This is the description " `; diff --git a/packages/cli/src/ui/components/messages/__snapshots__/ToolStickyHeaderRegression.test.tsx.snap b/packages/cli/src/ui/components/messages/__snapshots__/ToolStickyHeaderRegression.test.tsx.snap index 66ca527b4b..dda93c1c21 100644 --- a/packages/cli/src/ui/components/messages/__snapshots__/ToolStickyHeaderRegression.test.tsx.snap +++ b/packages/cli/src/ui/components/messages/__snapshots__/ToolStickyHeaderRegression.test.tsx.snap @@ -2,7 +2,7 @@ exports[`ToolMessage Sticky Header Regression > verifies that ShellToolMessage in a ToolGroupMessage in a ScrollableList has sticky headers 1`] = ` "╭────────────────────────────────────────────────────────────────────────╮ █ -│ ✓ Shell Command Description for Shell Command │ ▀ +│ ✓ Shell Command Description for Shell Command │ █ │ │ │ shell-01 │ │ shell-02 │ @@ -11,7 +11,7 @@ exports[`ToolMessage Sticky Header Regression > verifies that ShellToolMessage i exports[`ToolMessage Sticky Header Regression > verifies that ShellToolMessage in a ToolGroupMessage in a ScrollableList has sticky headers 2`] = ` "╭────────────────────────────────────────────────────────────────────────╮ -│ ✓ Shell Command Description for Shell Command │ +│ ✓ Shell Command Description for Shell Command │ ▄ │────────────────────────────────────────────────────────────────────────│ █ │ shell-06 │ ▀ │ shell-07 │ diff --git a/packages/cli/src/ui/utils/__snapshots__/borderStyles-MainContent-tool-group-border-SVG-snapshots-should-render-SVG-snapshot-for-a-pending-search-dialog-google_web_search-.snap.svg b/packages/cli/src/ui/utils/__snapshots__/borderStyles-MainContent-tool-group-border-SVG-snapshots-should-render-SVG-snapshot-for-a-pending-search-dialog-google_web_search-.snap.svg index beaa216162..f52f42f205 100644 --- a/packages/cli/src/ui/utils/__snapshots__/borderStyles-MainContent-tool-group-border-SVG-snapshots-should-render-SVG-snapshot-for-a-pending-search-dialog-google_web_search-.snap.svg +++ b/packages/cli/src/ui/utils/__snapshots__/borderStyles-MainContent-tool-group-border-SVG-snapshots-should-render-SVG-snapshot-for-a-pending-search-dialog-google_web_search-.snap.svg @@ -1,8 +1,8 @@ - + - + @@ -30,16 +30,16 @@ for more information 3. Ask coding questions, edit code or run commands 4. Be specific for the best results - ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ - - - google_web_search - + ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ + + google_web_search - Searching... - ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ + + Searching... + + ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/borderStyles-MainContent-tool-group-border-SVG-snapshots-should-render-SVG-snapshot-for-a-shell-tool.snap.svg b/packages/cli/src/ui/utils/__snapshots__/borderStyles-MainContent-tool-group-border-SVG-snapshots-should-render-SVG-snapshot-for-a-shell-tool.snap.svg index 85a715cc01..32f2849814 100644 --- a/packages/cli/src/ui/utils/__snapshots__/borderStyles-MainContent-tool-group-border-SVG-snapshots-should-render-SVG-snapshot-for-a-shell-tool.snap.svg +++ b/packages/cli/src/ui/utils/__snapshots__/borderStyles-MainContent-tool-group-border-SVG-snapshots-should-render-SVG-snapshot-for-a-shell-tool.snap.svg @@ -1,8 +1,8 @@ - + - + @@ -30,16 +30,16 @@ for more information 3. Ask coding questions, edit code or run commands 4. Be specific for the best results - ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ - - - run_shell_command - + ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ + + run_shell_command - Running command... - ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ + + Running command... + + ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/borderStyles-MainContent-tool-group-border-SVG-snapshots-should-render-SVG-snapshot-for-an-empty-slice-following-a-search-tool.snap.svg b/packages/cli/src/ui/utils/__snapshots__/borderStyles-MainContent-tool-group-border-SVG-snapshots-should-render-SVG-snapshot-for-an-empty-slice-following-a-search-tool.snap.svg index beaa216162..f52f42f205 100644 --- a/packages/cli/src/ui/utils/__snapshots__/borderStyles-MainContent-tool-group-border-SVG-snapshots-should-render-SVG-snapshot-for-an-empty-slice-following-a-search-tool.snap.svg +++ b/packages/cli/src/ui/utils/__snapshots__/borderStyles-MainContent-tool-group-border-SVG-snapshots-should-render-SVG-snapshot-for-an-empty-slice-following-a-search-tool.snap.svg @@ -1,8 +1,8 @@ - + - + @@ -30,16 +30,16 @@ for more information 3. Ask coding questions, edit code or run commands 4. Be specific for the best results - ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ - - - google_web_search - + ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ + + google_web_search - Searching... - ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ + + Searching... + + ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ \ No newline at end of file diff --git a/packages/cli/src/ui/utils/__snapshots__/borderStyles.test.tsx.snap b/packages/cli/src/ui/utils/__snapshots__/borderStyles.test.tsx.snap index 19ca84853a..31da966437 100644 --- a/packages/cli/src/ui/utils/__snapshots__/borderStyles.test.tsx.snap +++ b/packages/cli/src/ui/utils/__snapshots__/borderStyles.test.tsx.snap @@ -15,12 +15,12 @@ Tips for getting started: 2. /help for more information 3. Ask coding questions, edit code or run commands 4. Be specific for the best results + ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ ⊶ google_web_search │ │ │ │ Searching... │ -╰──────────────────────────────────────────────────────────────────────────────────────────────╯ -" +╰──────────────────────────────────────────────────────────────────────────────────────────────╯" `; exports[`MainContent tool group border SVG snapshots > should render SVG snapshot for a shell tool 1`] = ` @@ -38,12 +38,12 @@ Tips for getting started: 2. /help for more information 3. Ask coding questions, edit code or run commands 4. Be specific for the best results + ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ ⊶ run_shell_command │ │ │ │ Running command... │ -╰──────────────────────────────────────────────────────────────────────────────────────────────╯ -" +╰──────────────────────────────────────────────────────────────────────────────────────────────╯" `; exports[`MainContent tool group border SVG snapshots > should render SVG snapshot for an empty slice following a search tool 1`] = ` @@ -61,10 +61,10 @@ Tips for getting started: 2. /help for more information 3. Ask coding questions, edit code or run commands 4. Be specific for the best results + ╭──────────────────────────────────────────────────────────────────────────────────────────────╮ │ ⊶ google_web_search │ │ │ │ Searching... │ -╰──────────────────────────────────────────────────────────────────────────────────────────────╯ -" +╰──────────────────────────────────────────────────────────────────────────────────────────────╯" `;