@google/gemini-cli 0.1.7 → 0.1.8-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +8 -2
  2. package/dist/google-gemini-cli-0.1.8-rc.1.tgz +0 -0
  3. package/dist/package.json +15 -11
  4. package/dist/src/config/auth.js +1 -1
  5. package/dist/src/config/auth.js.map +1 -1
  6. package/dist/src/config/config.js +1 -1
  7. package/dist/src/config/config.js.map +1 -1
  8. package/dist/src/config/settings.d.ts +1 -0
  9. package/dist/src/config/settings.js.map +1 -1
  10. package/dist/src/gemini.js +2 -2
  11. package/dist/src/gemini.js.map +1 -1
  12. package/dist/src/generated/git-commit.d.ts +1 -1
  13. package/dist/src/generated/git-commit.js +1 -1
  14. package/dist/src/nonInteractiveCli.js +4 -1
  15. package/dist/src/nonInteractiveCli.js.map +1 -1
  16. package/dist/src/ui/App.js +4 -25
  17. package/dist/src/ui/App.js.map +1 -1
  18. package/dist/src/ui/App.test.js +19 -0
  19. package/dist/src/ui/App.test.js.map +1 -1
  20. package/dist/src/ui/components/AuthDialog.d.ts +3 -3
  21. package/dist/src/ui/components/AuthDialog.js +3 -6
  22. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  23. package/dist/src/ui/components/AuthDialog.test.js +3 -3
  24. package/dist/src/ui/components/AuthDialog.test.js.map +1 -1
  25. package/dist/src/ui/components/Footer.d.ts +0 -2
  26. package/dist/src/ui/components/Footer.js +2 -2
  27. package/dist/src/ui/components/Footer.js.map +1 -1
  28. package/dist/src/ui/components/Help.js +3 -1
  29. package/dist/src/ui/components/Help.js.map +1 -1
  30. package/dist/src/ui/components/HistoryItemDisplay.js +3 -1
  31. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  32. package/dist/src/ui/components/HistoryItemDisplay.test.js +19 -25
  33. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -1
  34. package/dist/src/ui/components/ModelStatsDisplay.d.ts +7 -0
  35. package/dist/src/ui/components/ModelStatsDisplay.js +33 -0
  36. package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -0
  37. package/dist/src/ui/components/ModelStatsDisplay.test.js +217 -0
  38. package/dist/src/ui/components/ModelStatsDisplay.test.js.map +1 -0
  39. package/dist/src/ui/components/SessionSummaryDisplay.d.ts +0 -2
  40. package/dist/src/ui/components/SessionSummaryDisplay.js +3 -19
  41. package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -1
  42. package/dist/src/ui/components/SessionSummaryDisplay.test.js +46 -27
  43. package/dist/src/ui/components/SessionSummaryDisplay.test.js.map +1 -1
  44. package/dist/src/ui/components/StatsDisplay.d.ts +1 -3
  45. package/dist/src/ui/components/StatsDisplay.js +34 -20
  46. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  47. package/dist/src/ui/components/StatsDisplay.test.js +261 -37
  48. package/dist/src/ui/components/StatsDisplay.test.js.map +1 -1
  49. package/dist/src/ui/components/ToolStatsDisplay.d.ts +7 -0
  50. package/dist/src/ui/components/ToolStatsDisplay.js +41 -0
  51. package/dist/src/ui/components/ToolStatsDisplay.js.map +1 -0
  52. package/dist/src/ui/components/ToolStatsDisplay.test.d.ts +6 -0
  53. package/dist/src/ui/components/ToolStatsDisplay.test.js +160 -0
  54. package/dist/src/ui/components/ToolStatsDisplay.test.js.map +1 -0
  55. package/dist/src/ui/components/messages/UserMessage.js +1 -1
  56. package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
  57. package/dist/src/ui/components/shared/MaxSizedBox.js +5 -4
  58. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  59. package/dist/src/ui/components/shared/MaxSizedBox.test.js +1 -1
  60. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -1
  61. package/dist/src/ui/contexts/SessionContext.d.ts +17 -19
  62. package/dist/src/ui/contexts/SessionContext.js +20 -103
  63. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  64. package/dist/src/ui/contexts/SessionContext.test.js +66 -121
  65. package/dist/src/ui/contexts/SessionContext.test.js.map +1 -1
  66. package/dist/src/ui/editors/editorSettingsManager.js +4 -0
  67. package/dist/src/ui/editors/editorSettingsManager.js.map +1 -1
  68. package/dist/src/ui/hooks/slashCommandProcessor.js +36 -18
  69. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  70. package/dist/src/ui/hooks/useAuthCommand.d.ts +2 -3
  71. package/dist/src/ui/hooks/useAuthCommand.js +7 -13
  72. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  73. package/dist/src/ui/hooks/useConsoleMessages.js +3 -2
  74. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  75. package/dist/src/ui/hooks/useGeminiStream.js +64 -92
  76. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  77. package/dist/src/ui/hooks/useGeminiStream.test.js +86 -134
  78. package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
  79. package/dist/src/ui/hooks/useReactToolScheduler.js +2 -2
  80. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  81. package/dist/src/ui/hooks/useStateAndRef.d.ts +1 -1
  82. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +7 -2
  83. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -1
  84. package/dist/src/ui/privacy/PrivacyNotice.js +1 -1
  85. package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
  86. package/dist/src/ui/themes/shades-of-purple.d.ts +11 -0
  87. package/dist/src/ui/themes/shades-of-purple.js +302 -0
  88. package/dist/src/ui/themes/shades-of-purple.js.map +1 -0
  89. package/dist/src/ui/themes/theme-manager.js +2 -0
  90. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  91. package/dist/src/ui/types.d.ts +17 -8
  92. package/dist/src/ui/types.js +2 -0
  93. package/dist/src/ui/types.js.map +1 -1
  94. package/dist/src/ui/utils/MarkdownDisplay.js +55 -0
  95. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  96. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +6 -0
  97. package/dist/src/ui/utils/MarkdownDisplay.test.js +176 -0
  98. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -0
  99. package/dist/src/ui/utils/TableRenderer.d.ts +17 -0
  100. package/dist/src/ui/utils/TableRenderer.js +66 -0
  101. package/dist/src/ui/utils/TableRenderer.js.map +1 -0
  102. package/dist/src/ui/utils/computeStats.d.ts +10 -0
  103. package/dist/src/ui/utils/computeStats.js +55 -0
  104. package/dist/src/ui/utils/computeStats.js.map +1 -0
  105. package/dist/src/ui/utils/displayUtils.d.ts +17 -0
  106. package/dist/src/ui/utils/displayUtils.js +24 -0
  107. package/dist/src/ui/utils/displayUtils.js.map +1 -0
  108. package/dist/src/ui/utils/errorParsing.js +1 -1
  109. package/dist/src/ui/utils/errorParsing.js.map +1 -1
  110. package/dist/src/ui/utils/formatters.js +1 -1
  111. package/dist/src/ui/utils/formatters.js.map +1 -1
  112. package/dist/src/ui/utils/textUtils.js +2 -2
  113. package/dist/src/ui/utils/textUtils.js.map +1 -1
  114. package/dist/src/ui/utils/updateCheck.js +3 -1
  115. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  116. package/dist/tsconfig.tsbuildinfo +1 -1
  117. package/package.json +15 -11
  118. package/dist/google-gemini-cli-0.1.7.tgz +0 -0
  119. package/dist/src/ui/components/Stats.d.ts +0 -39
  120. package/dist/src/ui/components/Stats.js +0 -23
  121. package/dist/src/ui/components/Stats.js.map +0 -1
  122. package/dist/src/ui/components/Stats.test.js +0 -57
  123. package/dist/src/ui/components/Stats.test.js.map +0 -1
  124. /package/dist/src/ui/components/{Stats.test.d.ts → ModelStatsDisplay.test.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useConsoleMessages.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useConsoleMessages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useConsoleMessages.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useConsoleMessages.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,6 @@ import { useLogger } from './useLogger.js';
17
17
  import { promises as fs } from 'fs';
18
18
  import path from 'path';
19
19
  import { useReactToolScheduler, mapToDisplay as mapTrackedToolCallsToDisplay, } from './useReactToolScheduler.js';
20
- import { useSessionStats } from '../contexts/SessionContext.js';
21
20
  export function mergePartListUnions(list) {
22
21
  const resultParts = [];
23
22
  for (const item of list) {
@@ -49,19 +48,19 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
49
48
  const [pendingHistoryItemRef, setPendingHistoryItem] = useStateAndRef(null);
50
49
  const processedMemoryToolsRef = useRef(new Set());
51
50
  const logger = useLogger();
52
- const { startNewTurn, addUsage } = useSessionStats();
53
51
  const gitService = useMemo(() => {
54
52
  if (!config.getProjectRoot()) {
55
53
  return;
56
54
  }
57
55
  return new GitService(config.getProjectRoot());
58
56
  }, [config]);
59
- const [toolCalls, scheduleToolCalls, markToolsAsSubmitted] = useReactToolScheduler((completedToolCallsFromScheduler) => {
57
+ const [toolCalls, scheduleToolCalls, markToolsAsSubmitted] = useReactToolScheduler(async (completedToolCallsFromScheduler) => {
60
58
  // This onComplete is called when ALL scheduled tools for a given batch are done.
61
59
  if (completedToolCallsFromScheduler.length > 0) {
62
60
  // Add the final state of these tools to the history for display.
63
- // The new useEffect will handle submitting their responses.
64
61
  addItem(mapTrackedToolCallsToDisplay(completedToolCallsFromScheduler), Date.now());
62
+ // Handle tool response submission immediately when tools complete
63
+ await handleCompletedTools(completedToolCallsFromScheduler);
65
64
  }
66
65
  }, config, setPendingHistoryItem, getPreferredEditor);
67
66
  const pendingToolCallGroupDisplay = useMemo(() => toolCalls.length ? mapTrackedToolCallsToDisplay(toolCalls) : undefined, [toolCalls]);
@@ -293,9 +292,6 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
293
292
  case ServerGeminiEventType.ChatCompressed:
294
293
  handleChatCompressionEvent(event.value);
295
294
  break;
296
- case ServerGeminiEventType.UsageMetadata:
297
- addUsage(event.value);
298
- break;
299
295
  case ServerGeminiEventType.ToolCallConfirmation:
300
296
  case ServerGeminiEventType.ToolCallResponse:
301
297
  // do nothing
@@ -317,7 +313,6 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
317
313
  handleErrorEvent,
318
314
  scheduleToolCalls,
319
315
  handleChatCompressionEvent,
320
- addUsage,
321
316
  ]);
322
317
  const submitQuery = useCallback(async (query, options) => {
323
318
  if ((streamingState === StreamingState.Responding ||
@@ -333,9 +328,6 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
333
328
  if (!shouldProceed || queryToSend === null) {
334
329
  return;
335
330
  }
336
- if (!options?.isContinuation) {
337
- startNewTurn();
338
- }
339
331
  setIsResponding(true);
340
332
  setInitError(null);
341
333
  try {
@@ -373,100 +365,80 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
373
365
  setPendingHistoryItem,
374
366
  setInitError,
375
367
  geminiClient,
376
- startNewTurn,
377
368
  onAuthError,
378
369
  config,
379
370
  ]);
380
- /**
381
- * Automatically submits responses for completed tool calls.
382
- * This effect runs when `toolCalls` or `isResponding` changes.
383
- * It ensures that tool responses are sent back to Gemini only when
384
- * all processing for a given set of tools is finished and Gemini
385
- * is not already generating a response.
386
- */
387
- useEffect(() => {
388
- const run = async () => {
389
- if (isResponding) {
390
- return;
391
- }
392
- const completedAndReadyToSubmitTools = toolCalls.filter((tc) => {
393
- const isTerminalState = tc.status === 'success' ||
394
- tc.status === 'error' ||
395
- tc.status === 'cancelled';
396
- if (isTerminalState) {
397
- const completedOrCancelledCall = tc;
398
- return (!completedOrCancelledCall.responseSubmittedToGemini &&
399
- completedOrCancelledCall.response?.responseParts !== undefined);
400
- }
401
- return false;
402
- });
403
- // Finalize any client-initiated tools as soon as they are done.
404
- const clientTools = completedAndReadyToSubmitTools.filter((t) => t.request.isClientInitiated);
405
- if (clientTools.length > 0) {
406
- markToolsAsSubmitted(clientTools.map((t) => t.request.callId));
407
- }
408
- // Identify new, successful save_memory calls that we haven't processed yet.
409
- const newSuccessfulMemorySaves = completedAndReadyToSubmitTools.filter((t) => t.request.name === 'save_memory' &&
410
- t.status === 'success' &&
411
- !processedMemoryToolsRef.current.has(t.request.callId));
412
- if (newSuccessfulMemorySaves.length > 0) {
413
- // Perform the refresh only if there are new ones.
414
- void performMemoryRefresh();
415
- // Mark them as processed so we don't do this again on the next render.
416
- newSuccessfulMemorySaves.forEach((t) => processedMemoryToolsRef.current.add(t.request.callId));
417
- }
418
- // Only proceed with submitting to Gemini if ALL tools are complete.
419
- const allToolsAreComplete = toolCalls.length > 0 &&
420
- toolCalls.length === completedAndReadyToSubmitTools.length;
421
- if (!allToolsAreComplete) {
422
- return;
423
- }
424
- const geminiTools = completedAndReadyToSubmitTools.filter((t) => !t.request.isClientInitiated);
425
- if (geminiTools.length === 0) {
426
- return;
371
+ const handleCompletedTools = useCallback(async (completedToolCallsFromScheduler) => {
372
+ if (isResponding) {
373
+ return;
374
+ }
375
+ const completedAndReadyToSubmitTools = completedToolCallsFromScheduler.filter((tc) => {
376
+ const isTerminalState = tc.status === 'success' ||
377
+ tc.status === 'error' ||
378
+ tc.status === 'cancelled';
379
+ if (isTerminalState) {
380
+ const completedOrCancelledCall = tc;
381
+ return (completedOrCancelledCall.response?.responseParts !== undefined);
427
382
  }
428
- // If all the tools were cancelled, don't submit a response to Gemini.
429
- const allToolsCancelled = geminiTools.every((tc) => tc.status === 'cancelled');
430
- if (allToolsCancelled) {
431
- if (geminiClient) {
432
- // We need to manually add the function responses to the history
433
- // so the model knows the tools were cancelled.
434
- const responsesToAdd = geminiTools.flatMap((toolCall) => toolCall.response.responseParts);
435
- for (const response of responsesToAdd) {
436
- let parts;
437
- if (Array.isArray(response)) {
438
- parts = response;
439
- }
440
- else if (typeof response === 'string') {
441
- parts = [{ text: response }];
442
- }
443
- else {
444
- parts = [response];
445
- }
446
- geminiClient.addHistory({
447
- role: 'user',
448
- parts,
449
- });
383
+ return false;
384
+ });
385
+ // Finalize any client-initiated tools as soon as they are done.
386
+ const clientTools = completedAndReadyToSubmitTools.filter((t) => t.request.isClientInitiated);
387
+ if (clientTools.length > 0) {
388
+ markToolsAsSubmitted(clientTools.map((t) => t.request.callId));
389
+ }
390
+ // Identify new, successful save_memory calls that we haven't processed yet.
391
+ const newSuccessfulMemorySaves = completedAndReadyToSubmitTools.filter((t) => t.request.name === 'save_memory' &&
392
+ t.status === 'success' &&
393
+ !processedMemoryToolsRef.current.has(t.request.callId));
394
+ if (newSuccessfulMemorySaves.length > 0) {
395
+ // Perform the refresh only if there are new ones.
396
+ void performMemoryRefresh();
397
+ // Mark them as processed so we don't do this again on the next render.
398
+ newSuccessfulMemorySaves.forEach((t) => processedMemoryToolsRef.current.add(t.request.callId));
399
+ }
400
+ const geminiTools = completedAndReadyToSubmitTools.filter((t) => !t.request.isClientInitiated);
401
+ if (geminiTools.length === 0) {
402
+ return;
403
+ }
404
+ // If all the tools were cancelled, don't submit a response to Gemini.
405
+ const allToolsCancelled = geminiTools.every((tc) => tc.status === 'cancelled');
406
+ if (allToolsCancelled) {
407
+ if (geminiClient) {
408
+ // We need to manually add the function responses to the history
409
+ // so the model knows the tools were cancelled.
410
+ const responsesToAdd = geminiTools.flatMap((toolCall) => toolCall.response.responseParts);
411
+ for (const response of responsesToAdd) {
412
+ let parts;
413
+ if (Array.isArray(response)) {
414
+ parts = response;
450
415
  }
416
+ else if (typeof response === 'string') {
417
+ parts = [{ text: response }];
418
+ }
419
+ else {
420
+ parts = [response];
421
+ }
422
+ geminiClient.addHistory({
423
+ role: 'user',
424
+ parts,
425
+ });
451
426
  }
452
- const callIdsToMarkAsSubmitted = geminiTools.map((toolCall) => toolCall.request.callId);
453
- markToolsAsSubmitted(callIdsToMarkAsSubmitted);
454
- return;
455
427
  }
456
- const responsesToSend = geminiTools.map((toolCall) => toolCall.response.responseParts);
457
428
  const callIdsToMarkAsSubmitted = geminiTools.map((toolCall) => toolCall.request.callId);
458
429
  markToolsAsSubmitted(callIdsToMarkAsSubmitted);
459
- submitQuery(mergePartListUnions(responsesToSend), {
460
- isContinuation: true,
461
- });
462
- };
463
- void run();
430
+ return;
431
+ }
432
+ const responsesToSend = geminiTools.map((toolCall) => toolCall.response.responseParts);
433
+ const callIdsToMarkAsSubmitted = geminiTools.map((toolCall) => toolCall.request.callId);
434
+ markToolsAsSubmitted(callIdsToMarkAsSubmitted);
435
+ submitQuery(mergePartListUnions(responsesToSend), {
436
+ isContinuation: true,
437
+ });
464
438
  }, [
465
- toolCalls,
466
439
  isResponding,
467
440
  submitQuery,
468
441
  markToolsAsSubmitted,
469
- addItem,
470
442
  geminiClient,
471
443
  performMemoryRefresh,
472
444
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"useGeminiStream.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useGeminiStream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useGeminiStream.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useGeminiStream.ts"],"names":[],"mappings":"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"}
@@ -397,22 +397,18 @@ describe('useGeminiStream', () => {
397
397
  response: { callId: 'call2', responseParts: toolCall2ResponseParts },
398
398
  },
399
399
  ];
400
- // 1. On the first render, there are no tool calls.
401
- mockUseReactToolScheduler.mockReturnValue([
402
- [],
403
- mockScheduleToolCalls,
404
- mockMarkToolsAsSubmitted,
405
- ]);
406
- const { rerender } = renderHook(() => useGeminiStream(new MockedGeminiClientClass(mockConfig), [], mockAddItem, mockSetShowHelp, mockConfig, mockOnDebugMessage, mockHandleSlashCommand, false, () => 'vscode', () => { }, () => Promise.resolve()));
407
- // 2. Before the second render, change the mock to return the completed tools.
408
- mockUseReactToolScheduler.mockReturnValue([
409
- completedToolCalls,
410
- mockScheduleToolCalls,
411
- mockMarkToolsAsSubmitted,
412
- ]);
413
- // 3. Trigger a re-render. The hook will now receive the completed tools, causing the effect to run.
414
- act(() => {
415
- rerender();
400
+ // Capture the onComplete callback
401
+ let capturedOnComplete = null;
402
+ mockUseReactToolScheduler.mockImplementation((onComplete) => {
403
+ capturedOnComplete = onComplete;
404
+ return [[], mockScheduleToolCalls, mockMarkToolsAsSubmitted];
405
+ });
406
+ renderHook(() => useGeminiStream(new MockedGeminiClientClass(mockConfig), [], mockAddItem, mockSetShowHelp, mockConfig, mockOnDebugMessage, mockHandleSlashCommand, false, () => 'vscode', () => { }, () => Promise.resolve()));
407
+ // Trigger the onComplete callback with completed tools
408
+ await act(async () => {
409
+ if (capturedOnComplete) {
410
+ await capturedOnComplete(completedToolCalls);
411
+ }
416
412
  });
417
413
  await waitFor(() => {
418
414
  expect(mockMarkToolsAsSubmitted).toHaveBeenCalledTimes(1);
@@ -439,22 +435,18 @@ describe('useGeminiStream', () => {
439
435
  },
440
436
  ];
441
437
  const client = new MockedGeminiClientClass(mockConfig);
442
- // 1. First render: no tool calls.
443
- mockUseReactToolScheduler.mockReturnValue([
444
- [],
445
- mockScheduleToolCalls,
446
- mockMarkToolsAsSubmitted,
447
- ]);
448
- const { rerender } = renderHook(() => useGeminiStream(client, [], mockAddItem, mockSetShowHelp, mockConfig, mockOnDebugMessage, mockHandleSlashCommand, false, () => 'vscode', () => { }, () => Promise.resolve()));
449
- // 2. Second render: tool calls are now cancelled.
450
- mockUseReactToolScheduler.mockReturnValue([
451
- cancelledToolCalls,
452
- mockScheduleToolCalls,
453
- mockMarkToolsAsSubmitted,
454
- ]);
455
- // 3. Trigger the re-render.
456
- act(() => {
457
- rerender();
438
+ // Capture the onComplete callback
439
+ let capturedOnComplete = null;
440
+ mockUseReactToolScheduler.mockImplementation((onComplete) => {
441
+ capturedOnComplete = onComplete;
442
+ return [[], mockScheduleToolCalls, mockMarkToolsAsSubmitted];
443
+ });
444
+ renderHook(() => useGeminiStream(client, [], mockAddItem, mockSetShowHelp, mockConfig, mockOnDebugMessage, mockHandleSlashCommand, false, () => 'vscode', () => { }, () => Promise.resolve()));
445
+ // Trigger the onComplete callback with cancelled tools
446
+ await act(async () => {
447
+ if (capturedOnComplete) {
448
+ await capturedOnComplete(cancelledToolCalls);
449
+ }
458
450
  });
459
451
  await waitFor(() => {
460
452
  expect(mockMarkToolsAsSubmitted).toHaveBeenCalledWith(['1']);
@@ -466,69 +458,18 @@ describe('useGeminiStream', () => {
466
458
  expect(mockSendMessageStream).not.toHaveBeenCalled();
467
459
  });
468
460
  });
469
- describe('Session Stats Integration', () => {
470
- it('should call startNewTurn and addUsage for a simple prompt', async () => {
471
- const mockMetadata = { totalTokenCount: 123 };
472
- const mockStream = (async function* () {
473
- yield { type: 'content', value: 'Response' };
474
- yield { type: 'usage_metadata', value: mockMetadata };
475
- })();
476
- mockSendMessageStream.mockReturnValue(mockStream);
477
- const { result } = renderTestHook();
478
- await act(async () => {
479
- await result.current.submitQuery('Hello, world!');
480
- });
481
- expect(mockStartNewTurn).toHaveBeenCalledTimes(1);
482
- expect(mockAddUsage).toHaveBeenCalledTimes(1);
483
- expect(mockAddUsage).toHaveBeenCalledWith(mockMetadata);
484
- });
485
- it('should only call addUsage for a tool continuation prompt', async () => {
486
- const mockMetadata = { totalTokenCount: 456 };
487
- const mockStream = (async function* () {
488
- yield { type: 'content', value: 'Final Answer' };
489
- yield { type: 'usage_metadata', value: mockMetadata };
490
- })();
491
- mockSendMessageStream.mockReturnValue(mockStream);
492
- const { result } = renderTestHook();
493
- await act(async () => {
494
- await result.current.submitQuery([{ text: 'tool response' }], {
495
- isContinuation: true,
496
- });
497
- });
498
- expect(mockStartNewTurn).not.toHaveBeenCalled();
499
- expect(mockAddUsage).toHaveBeenCalledTimes(1);
500
- expect(mockAddUsage).toHaveBeenCalledWith(mockMetadata);
501
- });
502
- it('should not call addUsage if the stream contains no usage metadata', async () => {
503
- // Arrange: A stream that yields content but never a usage_metadata event
504
- const mockStream = (async function* () {
505
- yield { type: 'content', value: 'Some response text' };
506
- })();
507
- mockSendMessageStream.mockReturnValue(mockStream);
508
- const { result } = renderTestHook();
509
- await act(async () => {
510
- await result.current.submitQuery('Query with no usage data');
511
- });
512
- expect(mockStartNewTurn).toHaveBeenCalledTimes(1);
513
- expect(mockAddUsage).not.toHaveBeenCalled();
514
- });
515
- it('should not call startNewTurn for a slash command', async () => {
516
- mockHandleSlashCommand.mockReturnValue(true);
517
- const { result } = renderTestHook();
518
- await act(async () => {
519
- await result.current.submitQuery('/stats');
520
- });
521
- expect(mockStartNewTurn).not.toHaveBeenCalled();
522
- expect(mockSendMessageStream).not.toHaveBeenCalled();
523
- });
524
- });
525
461
  it('should not flicker streaming state to Idle between tool completion and submission', async () => {
526
462
  const toolCallResponseParts = [
527
463
  { text: 'tool 1 final response' },
528
464
  ];
529
465
  const initialToolCalls = [
530
466
  {
531
- request: { callId: 'call1', name: 'tool1', args: {} },
467
+ request: {
468
+ callId: 'call1',
469
+ name: 'tool1',
470
+ args: {},
471
+ isClientInitiated: false,
472
+ },
532
473
  status: 'executing',
533
474
  responseSubmittedToGemini: false,
534
475
  tool: {
@@ -552,35 +493,47 @@ describe('useGeminiStream', () => {
552
493
  endTime: Date.now(),
553
494
  },
554
495
  ];
555
- const { result, rerender, client } = renderTestHook(initialToolCalls);
496
+ // Capture the onComplete callback
497
+ let capturedOnComplete = null;
498
+ let currentToolCalls = initialToolCalls;
499
+ mockUseReactToolScheduler.mockImplementation((onComplete) => {
500
+ capturedOnComplete = onComplete;
501
+ return [
502
+ currentToolCalls,
503
+ mockScheduleToolCalls,
504
+ mockMarkToolsAsSubmitted,
505
+ ];
506
+ });
507
+ const { result, rerender } = renderHook(() => useGeminiStream(new MockedGeminiClientClass(mockConfig), [], mockAddItem, mockSetShowHelp, mockConfig, mockOnDebugMessage, mockHandleSlashCommand, false, () => 'vscode', () => { }, () => Promise.resolve()));
556
508
  // 1. Initial state should be Responding because a tool is executing.
557
509
  expect(result.current.streamingState).toBe(StreamingState.Responding);
558
- // 2. Rerender with the completed tool call.
559
- // The useEffect should pick this up but hasn't called submitQuery yet.
510
+ // 2. Update the tool calls to completed state and rerender
511
+ currentToolCalls = completedToolCalls;
512
+ mockUseReactToolScheduler.mockImplementation((onComplete) => {
513
+ capturedOnComplete = onComplete;
514
+ return [
515
+ completedToolCalls,
516
+ mockScheduleToolCalls,
517
+ mockMarkToolsAsSubmitted,
518
+ ];
519
+ });
560
520
  act(() => {
561
- rerender({
562
- client,
563
- history: [],
564
- addItem: mockAddItem,
565
- setShowHelp: mockSetShowHelp,
566
- config: mockConfig,
567
- onDebugMessage: mockOnDebugMessage,
568
- handleSlashCommand: mockHandleSlashCommand,
569
- shellModeActive: false,
570
- loadedSettings: mockLoadedSettings,
571
- // This is the key part of the test: update the toolCalls array
572
- // to simulate the tool finishing.
573
- toolCalls: completedToolCalls,
574
- });
521
+ rerender();
575
522
  });
576
523
  // 3. The state should *still* be Responding, not Idle.
577
524
  // This is because the completed tool's response has not been submitted yet.
578
525
  expect(result.current.streamingState).toBe(StreamingState.Responding);
579
- // 4. Wait for the useEffect to call submitQuery.
526
+ // 4. Trigger the onComplete callback to simulate tool completion
527
+ await act(async () => {
528
+ if (capturedOnComplete) {
529
+ await capturedOnComplete(completedToolCalls);
530
+ }
531
+ });
532
+ // 5. Wait for submitQuery to be called
580
533
  await waitFor(() => {
581
534
  expect(mockSendMessageStream).toHaveBeenCalledWith(toolCallResponseParts, expect.any(AbortSignal));
582
535
  });
583
- // 5. After submission, the state should remain Responding.
536
+ // 6. After submission, the state should remain Responding until the stream completes.
584
537
  expect(result.current.streamingState).toBe(StreamingState.Responding);
585
538
  });
586
539
  describe('User Cancellation', () => {
@@ -721,27 +674,22 @@ describe('useGeminiStream', () => {
721
674
  getDescription: vi.fn(),
722
675
  },
723
676
  };
724
- // 1. Initial render state: no tool calls
725
- mockUseReactToolScheduler.mockReturnValue([
726
- [],
727
- mockScheduleToolCalls,
728
- mockMarkToolsAsSubmitted,
729
- ]);
730
- const { result, rerender } = renderHook(() => useGeminiStream(new MockedGeminiClientClass(mockConfig), [], mockAddItem, mockSetShowHelp, mockConfig, mockOnDebugMessage, mockHandleSlashCommand, false, () => 'vscode', () => { }, () => Promise.resolve()));
677
+ // Capture the onComplete callback
678
+ let capturedOnComplete = null;
679
+ mockUseReactToolScheduler.mockImplementation((onComplete) => {
680
+ capturedOnComplete = onComplete;
681
+ return [[], mockScheduleToolCalls, mockMarkToolsAsSubmitted];
682
+ });
683
+ const { result } = renderHook(() => useGeminiStream(new MockedGeminiClientClass(mockConfig), [], mockAddItem, mockSetShowHelp, mockConfig, mockOnDebugMessage, mockHandleSlashCommand, false, () => 'vscode', () => { }, () => Promise.resolve()));
731
684
  // --- User runs the slash command ---
732
685
  await act(async () => {
733
686
  await result.current.submitQuery('/memory add "test fact"');
734
687
  });
735
- // The command handler schedules the tool. Now we simulate the tool completing.
736
- // 2. Before the next render, set the mock to return the completed tool.
737
- mockUseReactToolScheduler.mockReturnValue([
738
- [completedToolCall],
739
- mockScheduleToolCalls,
740
- mockMarkToolsAsSubmitted,
741
- ]);
742
- // 3. Trigger a re-render to process the completed tool.
743
- act(() => {
744
- rerender();
688
+ // Trigger the onComplete callback with the completed client-initiated tool
689
+ await act(async () => {
690
+ if (capturedOnComplete) {
691
+ await capturedOnComplete([completedToolCall]);
692
+ }
745
693
  });
746
694
  // --- Assert the outcome ---
747
695
  await waitFor(() => {
@@ -778,14 +726,18 @@ describe('useGeminiStream', () => {
778
726
  getDescription: vi.fn(),
779
727
  },
780
728
  };
781
- mockUseReactToolScheduler.mockReturnValue([
782
- [completedToolCall],
783
- mockScheduleToolCalls,
784
- mockMarkToolsAsSubmitted,
785
- ]);
786
- const { rerender } = renderHook(() => useGeminiStream(new MockedGeminiClientClass(mockConfig), [], mockAddItem, mockSetShowHelp, mockConfig, mockOnDebugMessage, mockHandleSlashCommand, false, () => 'vscode', () => { }, mockPerformMemoryRefresh));
787
- act(() => {
788
- rerender();
729
+ // Capture the onComplete callback
730
+ let capturedOnComplete = null;
731
+ mockUseReactToolScheduler.mockImplementation((onComplete) => {
732
+ capturedOnComplete = onComplete;
733
+ return [[], mockScheduleToolCalls, mockMarkToolsAsSubmitted];
734
+ });
735
+ renderHook(() => useGeminiStream(new MockedGeminiClientClass(mockConfig), [], mockAddItem, mockSetShowHelp, mockConfig, mockOnDebugMessage, mockHandleSlashCommand, false, () => 'vscode', () => { }, mockPerformMemoryRefresh));
736
+ // Trigger the onComplete callback with the completed save_memory tool
737
+ await act(async () => {
738
+ if (capturedOnComplete) {
739
+ await capturedOnComplete([completedToolCall]);
740
+ }
789
741
  });
790
742
  await waitFor(() => {
791
743
  expect(mockPerformMemoryRefresh).toHaveBeenCalledTimes(1);
@@ -796,7 +748,7 @@ describe('useGeminiStream', () => {
796
748
  it('should call parseAndFormatApiError with the correct authType on stream initialization failure', async () => {
797
749
  // 1. Setup
798
750
  const mockError = new Error('Rate limit exceeded');
799
- const mockAuthType = AuthType.LOGIN_WITH_GOOGLE_PERSONAL;
751
+ const mockAuthType = AuthType.LOGIN_WITH_GOOGLE;
800
752
  mockParseAndFormatApiError.mockClear();
801
753
  mockSendMessageStream.mockReturnValue((async function* () {
802
754
  yield { type: 'content', value: '' };