import { Box, Text } from "ink"; import { memo } from "react"; import { useTerminalWidth } from "../hooks/useTerminalWidth"; import { BlinkDot } from "./BlinkDot.js"; import { colors } from "./colors.js"; import { MarkdownDisplay } from "./MarkdownDisplay.js"; type CommandLine = { kind: "command"; id: string; input: string; output: string; phase?: "running" | "finished"; success?: boolean; dimOutput?: boolean; }; /** * CommandMessage - Rich formatting version with two-column layout * Matches the formatting pattern used by other message types * * Features: * - Two-column layout with left gutter (2 chars) and right content area * - Proper terminal width calculation and wrapping * - Markdown rendering for output * - Consistent symbols (● for command, ⎿ for result) */ export const CommandMessage = memo(({ line }: { line: CommandLine }) => { const columns = useTerminalWidth(); const rightWidth = Math.max(0, columns - 2); // gutter is 2 cols // Determine dot state based on phase and success const getDotElement = () => { if (!line.phase || line.phase === "finished") { // Show red dot for failed commands, green for successful if (line.success === false) { return ; } return ; } if (line.phase === "running") { return ; } return ; }; return ( {/* Command input */} {getDotElement()} {line.input} {/* Command output (if present) */} {line.output && ( {" ⎿ "} )} ); }); CommandMessage.displayName = "CommandMessage";