diff --git a/src/cli/components/CollapsedOutputDisplay.tsx b/src/cli/components/CollapsedOutputDisplay.tsx
index 558a2e3..cfddf63 100644
--- a/src/cli/components/CollapsedOutputDisplay.tsx
+++ b/src/cli/components/CollapsedOutputDisplay.tsx
@@ -10,6 +10,7 @@ const PREFIX_WIDTH = 5; // " ⎿ " or " "
interface CollapsedOutputDisplayProps {
output: string; // Full output from completion
maxLines?: number; // Max lines to show before collapsing (Infinity = show all)
+ maxChars?: number; // Max chars to show before clipping
}
/**
@@ -22,12 +23,24 @@ export const CollapsedOutputDisplay = memo(
({
output,
maxLines = DEFAULT_COLLAPSED_LINES,
+ maxChars,
}: CollapsedOutputDisplayProps) => {
const columns = useTerminalWidth();
const contentWidth = Math.max(0, columns - PREFIX_WIDTH);
+ let displayOutput = output;
+ let clippedByChars = false;
+ if (
+ typeof maxChars === "number" &&
+ maxChars > 0 &&
+ output.length > maxChars
+ ) {
+ displayOutput = `${output.slice(0, maxChars)}…`;
+ clippedByChars = true;
+ }
+
// Keep empty lines for accurate display (don't filter them out)
- const lines = output.split("\n");
+ const lines = displayOutput.split("\n");
// Remove trailing empty line from final newline
if (lines.length > 0 && lines[lines.length - 1] === "") {
lines.pop();
@@ -75,6 +88,17 @@ export const CollapsedOutputDisplay = memo(
)}
+ {/* Character clipping hint */}
+ {clippedByChars && (
+
+
+ {" "}
+
+
+ … output clipped
+
+
+ )}
);
},
diff --git a/src/cli/components/ToolCallMessageRich.tsx b/src/cli/components/ToolCallMessageRich.tsx
index 85e10b6..6475a2c 100644
--- a/src/cli/components/ToolCallMessageRich.tsx
+++ b/src/cli/components/ToolCallMessageRich.tsx
@@ -855,7 +855,7 @@ export const ToolCallMessage = memo(
line.phase === "finished" &&
line.resultText &&
line.resultOk !== false && (
-
+
)}
{/* Tool result for non-shell tools or shell tool errors */}