From 80b04dc505bf1c784a54c5d80d971310b05144cc Mon Sep 17 00:00:00 2001 From: Taylor Mullen Date: Tue, 22 Apr 2025 07:48:12 -0400 Subject: Update UI of tool messages - Bring tool messages in line with original envisioned UI of: https://screenshot.googleplex.com/9yZCX636LzpMrgc - In particular this represents more descriptive names. FWIW we already had this tech we just weren't passing around information correctly (`displayName` vs. `name`) - Add gray to our list of color pallete's and removed Background (unused) - Re-enabled representing canceled messages - Migrated back towards a cleaner tool message design of status symbols & border colors vs. overly verbose text. - Removed border from confirmation diffs. Fixes https://b.corp.google.com/issues/412598909 --- .../cli/src/ui/components/messages/ToolMessage.tsx | 103 +++++++++------------ 1 file changed, 46 insertions(+), 57 deletions(-) (limited to 'packages/cli/src/ui/components/messages/ToolMessage.tsx') diff --git a/packages/cli/src/ui/components/messages/ToolMessage.tsx b/packages/cli/src/ui/components/messages/ToolMessage.tsx index 53f31db2..ab590f53 100644 --- a/packages/cli/src/ui/components/messages/ToolMessage.tsx +++ b/packages/cli/src/ui/components/messages/ToolMessage.tsx @@ -9,74 +9,63 @@ import { Box, Text } from 'ink'; import Spinner from 'ink-spinner'; import { IndividualToolCallDisplay, ToolCallStatus } from '../../types.js'; import { DiffRenderer } from './DiffRenderer.js'; -import { FileDiff, ToolResultDisplay } from '@gemini-code/server'; import { Colors } from '../../colors.js'; +import { MarkdownRenderer } from '../../utils/MarkdownRenderer.js'; export const ToolMessage: React.FC = ({ - callId, name, description, resultDisplay, status, }) => { - const typedResultDisplay = resultDisplay as ToolResultDisplay | undefined; - - let color = Colors.SubtleComment; - let prefix = ''; - switch (status) { - case ToolCallStatus.Pending: - prefix = 'Pending:'; - break; - case ToolCallStatus.Invoked: - prefix = 'Executing:'; - break; - case ToolCallStatus.Confirming: - color = Colors.AccentYellow; - prefix = 'Confirm:'; - break; - case ToolCallStatus.Success: - color = Colors.AccentGreen; - prefix = 'Success:'; - break; - case ToolCallStatus.Error: - color = Colors.AccentRed; - prefix = 'Error:'; - break; - default: - // Handle unexpected status if necessary, or just break - break; - } - - const title = `${prefix} ${name}`; - + const statusIndicatorWidth = 3; + const hasResult = resultDisplay && resultDisplay.toString().trim().length > 0; return ( - - - {status === ToolCallStatus.Invoked && ( - - - + + + {/* Status Indicator */} + + {status === ToolCallStatus.Pending && } + {status === ToolCallStatus.Success && ( + + )} + {status === ToolCallStatus.Confirming && ( + ? + )} + {status === ToolCallStatus.Canceled && ( + + - - - )} - - {title} - - - {status === ToolCallStatus.Error && typedResultDisplay - ? `: ${typedResultDisplay}` - : ` - ${description}`} - - - {status === ToolCallStatus.Success && typedResultDisplay && ( - - {typeof typedResultDisplay === 'string' ? ( - {typedResultDisplay} - ) : ( - )} + {status === ToolCallStatus.Error && ( + + x + + )} + + + + {name}{' '} + {description} + + + + {hasResult && ( + + + {/* Use default text color (white) or gray instead of dimColor */} + {typeof resultDisplay === 'string' && ( + + {MarkdownRenderer.render(resultDisplay)} + + )} + {typeof resultDisplay === 'object' && ( + + )} + )} -- cgit v1.2.3