diff --git a/packages/cli/src/ui/hooks/useGeminiStream.ts b/packages/cli/src/ui/hooks/useGeminiStream.ts index 7ab30463..6ff41d2f 100644 --- a/packages/cli/src/ui/hooks/useGeminiStream.ts +++ b/packages/cli/src/ui/hooks/useGeminiStream.ts @@ -333,8 +333,6 @@ export const useGeminiStream = ( { type: 'error', text: `[API Error: ${event.value.message}]` }, userMessageTimestamp, ); - setStreamingState(StreamingState.Idle); - // Allow stream to end naturally } } // End stream loop diff --git a/packages/server/src/core/client.ts b/packages/server/src/core/client.ts index 0b1e8ecf..fc6080ab 100644 --- a/packages/server/src/core/client.ts +++ b/packages/server/src/core/client.ts @@ -16,7 +16,7 @@ import { } from '@google/genai'; import process from 'node:process'; import { getFolderStructure } from '../utils/getFolderStructure.js'; -import { Turn, ServerGeminiStreamEvent } from './turn.js'; +import { Turn, ServerGeminiStreamEvent, GeminiEventType } from './turn.js'; import { Config } from '../config/config.js'; import { getCoreSystemPrompt } from './prompts.js'; import { ReadManyFilesTool } from '../tools/read-many-files.js'; @@ -156,7 +156,10 @@ export class GeminiClient { turns++; const turn = new Turn(chat, availableTools); const resultStream = turn.run(request, signal); + let seenError = false; for await (const event of resultStream) { + seenError = + seenError === false ? false : event.type === GeminiEventType.Error; yield event; } @@ -176,6 +179,11 @@ export class GeminiClient { } } request = fnResponses; + + if (seenError) { + // We saw an error, lets stop processing to prevent unexpected consequences. + break; + } } if (turns >= this.MAX_TURNS) { console.warn('sendMessageStream: Reached maximum tool call turns limit.');