diff options
Diffstat (limited to 'packages/cli/src')
| -rw-r--r-- | packages/cli/src/ui/components/messages/ToolMessage.tsx | 3 | ||||
| -rw-r--r-- | packages/cli/src/ui/hooks/useGeminiStream.ts | 27 | ||||
| -rw-r--r-- | packages/cli/src/ui/types.ts | 1 |
3 files changed, 30 insertions, 1 deletions
diff --git a/packages/cli/src/ui/components/messages/ToolMessage.tsx b/packages/cli/src/ui/components/messages/ToolMessage.tsx index 4d5fca37..1d8c478c 100644 --- a/packages/cli/src/ui/components/messages/ToolMessage.tsx +++ b/packages/cli/src/ui/components/messages/ToolMessage.tsx @@ -25,7 +25,8 @@ export const ToolMessage: React.FC<IndividualToolCallDisplay> = ({ <Box minHeight={1}> {/* Status Indicator */} <Box minWidth={statusIndicatorWidth}> - {status === ToolCallStatus.Pending && <Spinner type="dots" />} + {(status === ToolCallStatus.Pending || + status === ToolCallStatus.Executing) && <Spinner type="dots" />} {status === ToolCallStatus.Success && ( <Text color={Colors.AccentGreen}>✔</Text> )} diff --git a/packages/cli/src/ui/hooks/useGeminiStream.ts b/packages/cli/src/ui/hooks/useGeminiStream.ts index 611ea3e7..40c688a3 100644 --- a/packages/cli/src/ui/hooks/useGeminiStream.ts +++ b/packages/cli/src/ui/hooks/useGeminiStream.ts @@ -396,6 +396,32 @@ export const useGeminiStream = ( // Call the original server-side handler first originalConfirmationDetails.onConfirm(outcome); + // Ensure UI updates before potentially long-running operations + if (currentToolGroupMessageId !== null) { + updateItem( + currentToolGroupMessageId, + (currentItem: HistoryItem) => { + if (currentItem?.type !== 'tool_group') + return currentItem as Partial<Omit<HistoryItem, 'id'>>; + return { + ...currentItem, + tools: (currentItem.tools || []).map((tool) => + tool.callId === request.callId + ? { + ...tool, + confirmationDetails: undefined, + status: ToolCallStatus.Executing, + } + : tool, + ), + } as Partial<Omit<HistoryItem, 'id'>>; + }, + ); + refreshStatic(); + } + + await new Promise((resolve) => setTimeout(resolve, 0)); // Allow UI to re-render + if (outcome === ToolConfirmationOutcome.Cancel) { let resultDisplay: ToolResultDisplay | undefined; if ('fileDiff' in originalConfirmationDetails) { @@ -470,6 +496,7 @@ export const useGeminiStream = ( setShowHelp, toolRegistry, setInitError, + refreshStatic, ], ); diff --git a/packages/cli/src/ui/types.ts b/packages/cli/src/ui/types.ts index 4e1ab9cc..d6279598 100644 --- a/packages/cli/src/ui/types.ts +++ b/packages/cli/src/ui/types.ts @@ -27,6 +27,7 @@ export enum ToolCallStatus { Pending = 'Pending', Canceled = 'Canceled', Confirming = 'Confirming', + Executing = 'Executing', Success = 'Success', Error = 'Error', } |
