summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui/components/messages/ToolMessage.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src/ui/components/messages/ToolMessage.tsx')
-rw-r--r--packages/cli/src/ui/components/messages/ToolMessage.tsx45
1 files changed, 38 insertions, 7 deletions
diff --git a/packages/cli/src/ui/components/messages/ToolMessage.tsx b/packages/cli/src/ui/components/messages/ToolMessage.tsx
index 3b58c052..220578de 100644
--- a/packages/cli/src/ui/components/messages/ToolMessage.tsx
+++ b/packages/cli/src/ui/components/messages/ToolMessage.tsx
@@ -12,14 +12,38 @@ import { DiffRenderer } from './DiffRenderer.js';
import { Colors } from '../../colors.js';
import { MarkdownDisplay } from '../../utils/MarkdownDisplay.js';
-export const ToolMessage: React.FC<IndividualToolCallDisplay> = ({
+export interface ToolMessageProps extends IndividualToolCallDisplay {
+ availableTerminalHeight: number;
+}
+
+export const ToolMessage: React.FC<ToolMessageProps> = ({
name,
description,
resultDisplay,
status,
+ availableTerminalHeight,
}) => {
const statusIndicatorWidth = 3;
const hasResult = resultDisplay && resultDisplay.toString().trim().length > 0;
+ const staticHeight = /* Header */ 1;
+ availableTerminalHeight -= staticHeight;
+
+ let displayableResult = resultDisplay;
+ let hiddenLines = 0;
+
+ // Truncate the overall string content if it's too long.
+ // MarkdownRenderer will handle specific truncation for code blocks within this content.
+ if (typeof resultDisplay === 'string' && resultDisplay.length > 0) {
+ const lines = resultDisplay.split('\n');
+ // Estimate available height for this specific tool message content area
+ // This is a rough estimate; ideally, we'd have a more precise measurement.
+ const contentHeightEstimate = availableTerminalHeight - 5; // Subtracting lines for tool name, status, padding etc.
+ if (lines.length > contentHeightEstimate && contentHeightEstimate > 0) {
+ displayableResult = lines.slice(0, contentHeightEstimate).join('\n');
+ hiddenLines = lines.length - contentHeightEstimate;
+ }
+ }
+
return (
<Box paddingX={1} paddingY={0} flexDirection="column">
<Box minHeight={1}>
@@ -56,15 +80,22 @@ export const ToolMessage: React.FC<IndividualToolCallDisplay> = ({
</Box>
{hasResult && (
<Box paddingLeft={statusIndicatorWidth} width="100%">
- <Box flexDirection="row">
- {/* Use default text color (white) or gray instead of dimColor */}
- {typeof resultDisplay === 'string' && (
+ <Box flexDirection="column">
+ {typeof displayableResult === 'string' && (
<Box flexDirection="column">
- <MarkdownDisplay text={resultDisplay} />
+ <MarkdownDisplay text={displayableResult} />
</Box>
)}
- {typeof resultDisplay === 'object' && (
- <DiffRenderer diffContent={resultDisplay.fileDiff} />
+ {typeof displayableResult === 'object' && (
+ <DiffRenderer diffContent={displayableResult.fileDiff} />
+ )}
+ {hiddenLines > 0 && (
+ <Box>
+ <Text color={Colors.SubtleComment}>
+ ... {hiddenLines} more line{hiddenLines === 1 ? '' : 's'}{' '}
+ hidden ...
+ </Text>
+ </Box>
)}
</Box>
</Box>