diff --git a/src/cli/components/CollapsedOutputDisplay.tsx b/src/cli/components/CollapsedOutputDisplay.tsx index 9e1eb1c..aad13c9 100644 --- a/src/cli/components/CollapsedOutputDisplay.tsx +++ b/src/cli/components/CollapsedOutputDisplay.tsx @@ -1,7 +1,9 @@ import { Box, Text } from "ink"; import { memo } from "react"; +import { useTerminalWidth } from "../hooks/useTerminalWidth"; const COLLAPSED_LINES = 3; +const PREFIX_WIDTH = 5; // " ⎿ " or " " interface CollapsedOutputDisplayProps { output: string; // Full output from completion @@ -10,10 +12,14 @@ interface CollapsedOutputDisplayProps { /** * Display component for bash output after completion. * Shows first 3 lines with count of hidden lines. + * Uses proper two-column layout with width constraints for correct wrapping. * Note: expand/collapse (ctrl+o) is deferred to a future PR. */ export const CollapsedOutputDisplay = memo( ({ output }: CollapsedOutputDisplayProps) => { + const columns = useTerminalWidth(); + const contentWidth = Math.max(0, columns - PREFIX_WIDTH); + // Keep empty lines for accurate display (don't filter them out) const lines = output.split("\n"); // Remove trailing empty line from final newline @@ -31,23 +37,36 @@ export const CollapsedOutputDisplay = memo( return ( {/* L-bracket on first line - matches ToolCallMessageRich format " ⎿ " */} - - {" ⎿ "} - {visibleLines[0]} + + + {" ⎿ "} + + + {visibleLines[0]} + {/* Remaining visible lines with indent (5 spaces to align with content after bracket) */} {visibleLines.slice(1).map((line, i) => ( // biome-ignore lint/suspicious/noArrayIndexKey: Lines are positional output, stable order within render - - {" "} - {line} - + + + {" "} + + + {line} + + ))} {/* Hidden count hint */} {hiddenCount > 0 && ( - - {" "}… +{hiddenCount} lines - + + + {" "} + + + … +{hiddenCount} lines + + )} );