diff options
| author | Jacob Richman <[email protected]> | 2025-06-24 22:31:55 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-06-24 22:31:55 +0000 |
| commit | 8bd5645dd487574763325fb44e15feb97771607c (patch) | |
| tree | 888a860ebdae6150f6ea3bc4dd5685e1b9d17ee3 | |
| parent | 1f6fe59defa2045955ad66ecb19aa55777f7ad6d (diff) | |
Truncate all strings before displaying in a tool messages to avoid stack overflows (#1395)
| -rw-r--r-- | packages/cli/src/ui/components/messages/ToolMessage.tsx | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/packages/cli/src/ui/components/messages/ToolMessage.tsx b/packages/cli/src/ui/components/messages/ToolMessage.tsx index 6cb3f8f3..e96d185d 100644 --- a/packages/cli/src/ui/components/messages/ToolMessage.tsx +++ b/packages/cli/src/ui/components/messages/ToolMessage.tsx @@ -18,6 +18,9 @@ const RESERVED_LINE_COUNT = 5; // for tool name, status, padding etc. const STATUS_INDICATOR_WIDTH = 3; const MIN_LINES_SHOWN = 2; // show at least this many lines +// Large threshold to ensure we don't cause performance issues for very large +// outputs that will get truncated further MaxSizedBox anyway. +const MAXIMUM_RESULT_DISPLAY_CHARACTERS = 1000000; export type TextEmphasis = 'high' | 'medium' | 'low'; export interface ToolMessageProps extends IndividualToolCallDisplay { @@ -52,7 +55,13 @@ export const ToolMessage: React.FC<ToolMessageProps> = ({ } const childWidth = terminalWidth - 3; // account for padding. - + if (typeof resultDisplay === 'string') { + if (resultDisplay.length > MAXIMUM_RESULT_DISPLAY_CHARACTERS) { + // Truncate the result display to fit within the available width. + resultDisplay = + '...' + resultDisplay.slice(-MAXIMUM_RESULT_DISPLAY_CHARACTERS); + } + } return ( <Box paddingX={1} paddingY={0} flexDirection="column"> <Box minHeight={1}> |
