import { useMemo, useState, type JSX } from "react"; import { AgentToolScrollArea } from "../AgentToolScrollArea"; const MAX_OUTPUT_LINES = 200; export function AgentTerminalBlock({ command, stdout, stderr, status }: { command: string | null; stdout: string; stderr: string; exitCode: number | null; durationMs: number | null; status: "running" | "completed" | "failed" | "unknown"; }): JSX.Element | null { "use memo"; const [expanded, setExpanded] = useState(false); const outputText = useMemo( () => [stdout, stderr].filter(Boolean).join("\n"), [stdout, stderr] ); const outputLines = useMemo( () => (outputText ? outputText.split("\n") : []), [outputText] ); const truncated = !expanded && outputLines.length > MAX_OUTPUT_LINES; const visibleOutput = truncated ? outputLines.slice(0, MAX_OUTPUT_LINES).join("\n") : outputText; const failed = status === "failed"; const hasOutput = Boolean(visibleOutput); const disclosureButton = outputLines.length > MAX_OUTPUT_LINES ? ( ) : null; return (
{visibleOutput}
{disclosureButton}