@google/gemini-cli 0.1.10-dev.15 → 0.1.11-nightly.250713.4442e893

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 (170) hide show
  1. package/README.md +16 -2
  2. package/dist/google-gemini-cli-0.1.11.tgz +0 -0
  3. package/dist/package.json +7 -8
  4. package/dist/src/config/auth.js +6 -5
  5. package/dist/src/config/auth.js.map +1 -1
  6. package/dist/src/config/config.d.ts +23 -2
  7. package/dist/src/config/config.js +78 -54
  8. package/dist/src/config/config.js.map +1 -1
  9. package/dist/src/config/extension.d.ts +1 -0
  10. package/dist/src/config/extension.js +34 -6
  11. package/dist/src/config/extension.js.map +1 -1
  12. package/dist/src/config/sandboxConfig.d.ts +1 -1
  13. package/dist/src/config/sandboxConfig.js +1 -1
  14. package/dist/src/config/sandboxConfig.js.map +1 -1
  15. package/dist/src/config/settings.d.ts +8 -2
  16. package/dist/src/config/settings.js +101 -3
  17. package/dist/src/config/settings.js.map +1 -1
  18. package/dist/src/gemini.js +53 -29
  19. package/dist/src/gemini.js.map +1 -1
  20. package/dist/src/generated/git-commit.d.ts +1 -1
  21. package/dist/src/generated/git-commit.js +1 -1
  22. package/dist/src/nonInteractiveCli.d.ts +1 -1
  23. package/dist/src/nonInteractiveCli.js +12 -3
  24. package/dist/src/nonInteractiveCli.js.map +1 -1
  25. package/dist/src/services/CommandService.d.ts +13 -0
  26. package/dist/src/services/CommandService.js +32 -0
  27. package/dist/src/services/CommandService.js.map +1 -0
  28. package/dist/src/ui/App.d.ts +1 -0
  29. package/dist/src/ui/App.js +138 -26
  30. package/dist/src/ui/App.js.map +1 -1
  31. package/dist/src/ui/commands/clearCommand.d.ts +7 -0
  32. package/dist/src/ui/commands/clearCommand.js +15 -0
  33. package/dist/src/ui/commands/clearCommand.js.map +1 -0
  34. package/dist/src/ui/commands/helpCommand.d.ts +7 -0
  35. package/dist/src/ui/commands/helpCommand.js +18 -0
  36. package/dist/src/ui/commands/helpCommand.js.map +1 -0
  37. package/dist/src/ui/commands/memoryCommand.d.ts +7 -0
  38. package/dist/src/ui/commands/memoryCommand.js +81 -0
  39. package/dist/src/ui/commands/memoryCommand.js.map +1 -0
  40. package/dist/src/ui/commands/themeCommand.d.ts +7 -0
  41. package/dist/src/ui/commands/themeCommand.js +14 -0
  42. package/dist/src/ui/commands/themeCommand.js.map +1 -0
  43. package/dist/src/ui/commands/types.d.ts +63 -0
  44. package/dist/src/{gemini.test.d.ts → ui/commands/types.js} +1 -0
  45. package/dist/src/ui/commands/types.js.map +1 -0
  46. package/dist/src/ui/components/AuthDialog.js +36 -8
  47. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  48. package/dist/src/ui/components/Footer.d.ts +1 -0
  49. package/dist/src/ui/components/Footer.js +3 -2
  50. package/dist/src/ui/components/Footer.js.map +1 -1
  51. package/dist/src/ui/components/Header.d.ts +2 -0
  52. package/dist/src/ui/components/Header.js +3 -3
  53. package/dist/src/ui/components/Header.js.map +1 -1
  54. package/dist/src/ui/components/Help.d.ts +1 -1
  55. package/dist/src/ui/components/Help.js +3 -2
  56. package/dist/src/ui/components/Help.js.map +1 -1
  57. package/dist/src/ui/components/InputPrompt.d.ts +2 -1
  58. package/dist/src/ui/components/InputPrompt.js +153 -155
  59. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  60. package/dist/src/ui/components/LoadingIndicator.js +2 -1
  61. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  62. package/dist/src/ui/components/ThemeDialog.js +18 -17
  63. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  64. package/dist/src/ui/components/messages/CompressionMessage.js +1 -1
  65. package/dist/src/ui/components/shared/MaxSizedBox.js +1 -1
  66. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  67. package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +10 -7
  68. package/dist/src/ui/components/shared/RadioButtonSelect.js +57 -40
  69. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  70. package/dist/src/ui/components/shared/text-buffer.d.ts +2 -1
  71. package/dist/src/ui/components/shared/text-buffer.js +3 -3
  72. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  73. package/dist/src/ui/contexts/SessionContext.d.ts +4 -1
  74. package/dist/src/ui/contexts/SessionContext.js +12 -2
  75. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  76. package/dist/src/ui/hooks/atCommandProcessor.js +5 -7
  77. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  78. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +6 -10
  79. package/dist/src/ui/hooks/slashCommandProcessor.js +221 -129
  80. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  81. package/dist/src/ui/hooks/useAuthCommand.js +12 -2
  82. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  83. package/dist/src/ui/hooks/useCompletion.d.ts +2 -2
  84. package/dist/src/ui/hooks/useCompletion.js +106 -56
  85. package/dist/src/ui/hooks/useCompletion.js.map +1 -1
  86. package/dist/src/ui/hooks/useGeminiStream.d.ts +3 -3
  87. package/dist/src/ui/hooks/useGeminiStream.js +54 -28
  88. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  89. package/dist/src/ui/hooks/useKeypress.js +74 -4
  90. package/dist/src/ui/hooks/useKeypress.js.map +1 -1
  91. package/dist/src/ui/types.d.ts +10 -0
  92. package/dist/src/ui/utils/ConsolePatcher.d.ts +23 -0
  93. package/dist/src/ui/utils/ConsolePatcher.js +42 -0
  94. package/dist/src/ui/utils/ConsolePatcher.js.map +1 -0
  95. package/dist/src/ui/utils/InlineMarkdownRenderer.d.ts +16 -0
  96. package/dist/src/ui/utils/InlineMarkdownRenderer.js +104 -0
  97. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -0
  98. package/dist/src/ui/utils/MarkdownDisplay.js +30 -101
  99. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  100. package/dist/src/ui/utils/TableRenderer.js +50 -32
  101. package/dist/src/ui/utils/TableRenderer.js.map +1 -1
  102. package/dist/src/ui/utils/clipboardUtils.d.ts +22 -0
  103. package/dist/src/ui/utils/clipboardUtils.js +127 -0
  104. package/dist/src/ui/utils/clipboardUtils.js.map +1 -0
  105. package/dist/src/ui/utils/errorParsing.d.ts +2 -10
  106. package/dist/src/ui/utils/errorParsing.js +34 -23
  107. package/dist/src/ui/utils/errorParsing.js.map +1 -1
  108. package/dist/src/utils/cleanup.d.ts +2 -0
  109. package/dist/src/utils/cleanup.js +15 -0
  110. package/dist/src/utils/cleanup.js.map +1 -1
  111. package/dist/src/utils/sandbox-macos-permissive-proxied.sb +1 -1
  112. package/dist/src/utils/sandbox-macos-restrictive-proxied.sb +1 -1
  113. package/dist/src/utils/userStartupWarnings.d.ts +6 -0
  114. package/dist/src/utils/userStartupWarnings.js +33 -0
  115. package/dist/src/utils/userStartupWarnings.js.map +1 -0
  116. package/dist/tsconfig.tsbuildinfo +1 -1
  117. package/package.json +8 -9
  118. package/dist/src/gemini.test.js +0 -122
  119. package/dist/src/gemini.test.js.map +0 -1
  120. package/dist/src/ui/App.test.d.ts +0 -6
  121. package/dist/src/ui/App.test.js +0 -299
  122. package/dist/src/ui/App.test.js.map +0 -1
  123. package/dist/src/ui/components/AuthDialog.test.d.ts +0 -6
  124. package/dist/src/ui/components/AuthDialog.test.js +0 -69
  125. package/dist/src/ui/components/AuthDialog.test.js.map +0 -1
  126. package/dist/src/ui/components/ConsolePatcher.d.ts +0 -12
  127. package/dist/src/ui/components/ConsolePatcher.js +0 -40
  128. package/dist/src/ui/components/ConsolePatcher.js.map +0 -1
  129. package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +0 -6
  130. package/dist/src/ui/components/HistoryItemDisplay.test.js +0 -81
  131. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +0 -1
  132. package/dist/src/ui/components/InputPrompt.test.d.ts +0 -6
  133. package/dist/src/ui/components/InputPrompt.test.js +0 -154
  134. package/dist/src/ui/components/InputPrompt.test.js.map +0 -1
  135. package/dist/src/ui/components/LoadingIndicator.test.d.ts +0 -6
  136. package/dist/src/ui/components/LoadingIndicator.test.js +0 -141
  137. package/dist/src/ui/components/LoadingIndicator.test.js.map +0 -1
  138. package/dist/src/ui/components/ModelStatsDisplay.test.d.ts +0 -6
  139. package/dist/src/ui/components/ModelStatsDisplay.test.js +0 -217
  140. package/dist/src/ui/components/ModelStatsDisplay.test.js.map +0 -1
  141. package/dist/src/ui/components/SessionSummaryDisplay.test.d.ts +0 -6
  142. package/dist/src/ui/components/SessionSummaryDisplay.test.js +0 -60
  143. package/dist/src/ui/components/SessionSummaryDisplay.test.js.map +0 -1
  144. package/dist/src/ui/components/StatsDisplay.test.d.ts +0 -6
  145. package/dist/src/ui/components/StatsDisplay.test.js +0 -275
  146. package/dist/src/ui/components/StatsDisplay.test.js.map +0 -1
  147. package/dist/src/ui/components/ToolStatsDisplay.test.d.ts +0 -6
  148. package/dist/src/ui/components/ToolStatsDisplay.test.js +0 -160
  149. package/dist/src/ui/components/ToolStatsDisplay.test.js.map +0 -1
  150. package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +0 -6
  151. package/dist/src/ui/components/messages/DiffRenderer.test.js +0 -239
  152. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +0 -1
  153. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +0 -6
  154. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +0 -37
  155. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +0 -1
  156. package/dist/src/ui/components/messages/ToolMessage.test.d.ts +0 -6
  157. package/dist/src/ui/components/messages/ToolMessage.test.js +0 -116
  158. package/dist/src/ui/components/messages/ToolMessage.test.js.map +0 -1
  159. package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +0 -6
  160. package/dist/src/ui/components/shared/MaxSizedBox.test.js +0 -134
  161. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +0 -1
  162. package/dist/src/ui/contexts/SessionContext.test.d.ts +0 -6
  163. package/dist/src/ui/contexts/SessionContext.test.js +0 -96
  164. package/dist/src/ui/contexts/SessionContext.test.js.map +0 -1
  165. package/dist/src/ui/hooks/useGeminiStream.test.d.ts +0 -6
  166. package/dist/src/ui/hooks/useGeminiStream.test.js +0 -775
  167. package/dist/src/ui/hooks/useGeminiStream.test.js.map +0 -1
  168. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +0 -6
  169. package/dist/src/ui/utils/MarkdownDisplay.test.js +0 -176
  170. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +0 -1
@@ -4,7 +4,8 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { useState, useCallback, useEffect } from 'react';
7
- import { clearCachedCredentialFile, getErrorMessage, } from '@google/gemini-cli-core';
7
+ import { AuthType, clearCachedCredentialFile, getErrorMessage, } from '@google/gemini-cli-core';
8
+ import { runExitCleanup } from '../../utils/cleanup.js';
8
9
  export const useAuthCommand = (settings, setAuthError, config) => {
9
10
  const [isAuthDialogOpen, setIsAuthDialogOpen] = useState(settings.merged.selectedAuthType === undefined);
10
11
  const openAuthDialog = useCallback(() => {
@@ -36,10 +37,19 @@ export const useAuthCommand = (settings, setAuthError, config) => {
36
37
  if (authType) {
37
38
  await clearCachedCredentialFile();
38
39
  settings.setValue(scope, 'selectedAuthType', authType);
40
+ if (authType === AuthType.LOGIN_WITH_GOOGLE && config.getNoBrowser()) {
41
+ runExitCleanup();
42
+ console.log(`
43
+ ----------------------------------------------------------------
44
+ Logging in with Google... Please restart Gemini CLI to continue.
45
+ ----------------------------------------------------------------
46
+ `);
47
+ process.exit(0);
48
+ }
39
49
  }
40
50
  setIsAuthDialogOpen(false);
41
51
  setAuthError(null);
42
- }, [settings, setAuthError]);
52
+ }, [settings, setAuthError, config]);
43
53
  const cancelAuthentication = useCallback(() => {
44
54
  setIsAuthenticating(false);
45
55
  }, []);
@@ -1 +1 @@
1
- {"version":3,"file":"useAuthCommand.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useAuthCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAGL,yBAAyB,EACzB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,QAAwB,EACxB,YAA4C,EAC5C,MAAc,EACd,EAAE;IACF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CACtD,QAAQ,CAAC,MAAM,CAAC,gBAAgB,KAAK,SAAS,CAC/C,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;YAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAClD,IAAI,gBAAgB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAC1B,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,IAAI,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,YAAY,CAAC,6BAA6B,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChE,cAAc,EAAE,CAAC;YACnB,CAAC;oBAAS,CAAC;gBACT,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,QAAQ,EAAE,CAAC;IAClB,CAAC,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;IAEvE,MAAM,gBAAgB,GAAG,WAAW,CAClC,KAAK,EAAE,QAA8B,EAAE,KAAmB,EAAE,EAAE;QAC5D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,yBAAyB,EAAE,CAAC;YAClC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QACzD,CAAC;QACD,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3B,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,EACD,CAAC,QAAQ,EAAE,YAAY,CAAC,CACzB,CAAC;IAEF,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5C,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,gBAAgB;QAChB,cAAc;QACd,gBAAgB;QAChB,gBAAgB;QAChB,oBAAoB;KACrB,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"useAuthCommand.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useAuthCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EACL,QAAQ,EAER,yBAAyB,EACzB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,QAAwB,EACxB,YAA4C,EAC5C,MAAc,EACd,EAAE;IACF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CACtD,QAAQ,CAAC,MAAM,CAAC,gBAAgB,KAAK,SAAS,CAC/C,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;YAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAClD,IAAI,gBAAgB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAC1B,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,IAAI,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,YAAY,CAAC,6BAA6B,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChE,cAAc,EAAE,CAAC;YACnB,CAAC;oBAAS,CAAC;gBACT,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,QAAQ,EAAE,CAAC;IAClB,CAAC,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;IAEvE,MAAM,gBAAgB,GAAG,WAAW,CAClC,KAAK,EAAE,QAA8B,EAAE,KAAmB,EAAE,EAAE;QAC5D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,yBAAyB,EAAE,CAAC;YAClC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC;YACvD,IAAI,QAAQ,KAAK,QAAQ,CAAC,iBAAiB,IAAI,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;gBACrE,cAAc,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CACT;;;;aAIC,CACF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3B,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,EACD,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,CACjC,CAAC;IAEF,MAAM,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5C,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,gBAAgB;QAChB,cAAc;QACd,gBAAgB;QAChB,gBAAgB;QAChB,oBAAoB;KACrB,CAAC;AACJ,CAAC,CAAC"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { Config } from '@google/gemini-cli-core';
7
7
  import { Suggestion } from '../components/SuggestionsDisplay.js';
8
- import { SlashCommand } from './slashCommandProcessor.js';
8
+ import { CommandContext, SlashCommand } from '../commands/types.js';
9
9
  export interface UseCompletionReturn {
10
10
  suggestions: Suggestion[];
11
11
  activeSuggestionIndex: number;
@@ -18,4 +18,4 @@ export interface UseCompletionReturn {
18
18
  navigateUp: () => void;
19
19
  navigateDown: () => void;
20
20
  }
21
- export declare function useCompletion(query: string, cwd: string, isActive: boolean, slashCommands: SlashCommand[], config?: Config): UseCompletionReturn;
21
+ export declare function useCompletion(query: string, cwd: string, isActive: boolean, slashCommands: SlashCommand[], commandContext: CommandContext, config?: Config): UseCompletionReturn;
@@ -9,7 +9,7 @@ import * as path from 'path';
9
9
  import { glob } from 'glob';
10
10
  import { isNodeError, escapePath, unescapePath, getErrorMessage, } from '@google/gemini-cli-core';
11
11
  import { MAX_SUGGESTIONS_TO_SHOW, } from '../components/SuggestionsDisplay.js';
12
- export function useCompletion(query, cwd, isActive, slashCommands, config) {
12
+ export function useCompletion(query, cwd, isActive, slashCommands, commandContext, config) {
13
13
  const [suggestions, setSuggestions] = useState([]);
14
14
  const [activeSuggestionIndex, setActiveSuggestionIndex] = useState(-1);
15
15
  const [visibleStartIndex, setVisibleStartIndex] = useState(0);
@@ -74,62 +74,100 @@ export function useCompletion(query, cwd, isActive, slashCommands, config) {
74
74
  resetCompletionState();
75
75
  return;
76
76
  }
77
- const trimmedQuery = query.trimStart(); // Trim leading whitespace
78
- // --- Handle Slash Command Completion ---
77
+ const trimmedQuery = query.trimStart();
79
78
  if (trimmedQuery.startsWith('/')) {
80
- const parts = trimmedQuery.substring(1).split(' ');
81
- const commandName = parts[0];
82
- const subCommand = parts.slice(1).join(' ');
83
- const command = slashCommands.find((cmd) => cmd.name === commandName || cmd.altName === commandName);
84
- // Continue to show command help until user types past command name.
85
- if (command && command.completion && parts.length > 1) {
79
+ const fullPath = trimmedQuery.substring(1);
80
+ const hasTrailingSpace = trimmedQuery.endsWith(' ');
81
+ // Get all non-empty parts of the command.
82
+ const rawParts = fullPath.split(/\s+/).filter((p) => p);
83
+ let commandPathParts = rawParts;
84
+ let partial = '';
85
+ // If there's no trailing space, the last part is potentially a partial segment.
86
+ // We tentatively separate it.
87
+ if (!hasTrailingSpace && rawParts.length > 0) {
88
+ partial = rawParts[rawParts.length - 1];
89
+ commandPathParts = rawParts.slice(0, -1);
90
+ }
91
+ // Traverse the Command Tree using the tentative completed path
92
+ let currentLevel = slashCommands;
93
+ let leafCommand = null;
94
+ for (const part of commandPathParts) {
95
+ if (!currentLevel) {
96
+ leafCommand = null;
97
+ currentLevel = [];
98
+ break;
99
+ }
100
+ const found = currentLevel.find((cmd) => cmd.name === part || cmd.altName === part);
101
+ if (found) {
102
+ leafCommand = found;
103
+ currentLevel = found.subCommands;
104
+ }
105
+ else {
106
+ leafCommand = null;
107
+ currentLevel = [];
108
+ break;
109
+ }
110
+ }
111
+ // Handle the Ambiguous Case
112
+ if (!hasTrailingSpace && currentLevel) {
113
+ const exactMatchAsParent = currentLevel.find((cmd) => (cmd.name === partial || cmd.altName === partial) &&
114
+ cmd.subCommands);
115
+ if (exactMatchAsParent) {
116
+ // It's a perfect match for a parent command. Override our initial guess.
117
+ // Treat it as a completed command path.
118
+ leafCommand = exactMatchAsParent;
119
+ currentLevel = exactMatchAsParent.subCommands;
120
+ partial = ''; // We now want to suggest ALL of its sub-commands.
121
+ }
122
+ }
123
+ const depth = commandPathParts.length;
124
+ // Provide Suggestions based on the now-corrected context
125
+ // Argument Completion
126
+ if (leafCommand?.completion &&
127
+ (hasTrailingSpace ||
128
+ (rawParts.length > depth && depth > 0 && partial !== ''))) {
86
129
  const fetchAndSetSuggestions = async () => {
87
130
  setIsLoadingSuggestions(true);
88
- if (command.completion) {
89
- const results = await command.completion();
90
- const filtered = results.filter((r) => r.startsWith(subCommand));
91
- const newSuggestions = filtered.map((s) => ({
92
- label: s,
93
- value: s,
94
- }));
95
- setSuggestions(newSuggestions);
96
- setShowSuggestions(newSuggestions.length > 0);
97
- setActiveSuggestionIndex(newSuggestions.length > 0 ? 0 : -1);
98
- }
131
+ const argString = rawParts.slice(depth).join(' ');
132
+ const results = (await leafCommand.completion(commandContext, argString)) || [];
133
+ const finalSuggestions = results.map((s) => ({ label: s, value: s }));
134
+ setSuggestions(finalSuggestions);
135
+ setShowSuggestions(finalSuggestions.length > 0);
136
+ setActiveSuggestionIndex(finalSuggestions.length > 0 ? 0 : -1);
99
137
  setIsLoadingSuggestions(false);
100
138
  };
101
139
  fetchAndSetSuggestions();
102
140
  return;
103
141
  }
104
- const partialCommand = trimmedQuery.substring(1);
105
- const filteredSuggestions = slashCommands
106
- .filter((cmd) => cmd.name.startsWith(partialCommand) ||
107
- cmd.altName?.startsWith(partialCommand))
108
- // Filter out ? and any other single character commands unless it's the only char
109
- .filter((cmd) => {
110
- const nameMatch = cmd.name.startsWith(partialCommand);
111
- const altNameMatch = cmd.altName?.startsWith(partialCommand);
112
- if (partialCommand.length === 1) {
113
- return nameMatch || altNameMatch; // Allow single char match if query is single char
142
+ // Command/Sub-command Completion
143
+ const commandsToSearch = currentLevel || [];
144
+ if (commandsToSearch.length > 0) {
145
+ let potentialSuggestions = commandsToSearch.filter((cmd) => cmd.description &&
146
+ (cmd.name.startsWith(partial) || cmd.altName?.startsWith(partial)));
147
+ // If a user's input is an exact match and it is a leaf command,
148
+ // enter should submit immediately.
149
+ if (potentialSuggestions.length > 0 && !hasTrailingSpace) {
150
+ const perfectMatch = potentialSuggestions.find((s) => s.name === partial);
151
+ if (perfectMatch && !perfectMatch.subCommands) {
152
+ potentialSuggestions = [];
153
+ }
114
154
  }
115
- return ((nameMatch && cmd.name.length > 1) ||
116
- (altNameMatch && cmd.altName && cmd.altName.length > 1));
117
- })
118
- .filter((cmd) => cmd.description)
119
- .map((cmd) => ({
120
- label: cmd.name, // Always show the main name as label
121
- value: cmd.name, // Value should be the main command name for execution
122
- description: cmd.description,
123
- }))
124
- .sort((a, b) => a.label.localeCompare(b.label));
125
- setSuggestions(filteredSuggestions);
126
- setShowSuggestions(filteredSuggestions.length > 0);
127
- setActiveSuggestionIndex(filteredSuggestions.length > 0 ? 0 : -1);
128
- setVisibleStartIndex(0);
129
- setIsLoadingSuggestions(false);
155
+ const finalSuggestions = potentialSuggestions.map((cmd) => ({
156
+ label: cmd.name,
157
+ value: cmd.name,
158
+ description: cmd.description,
159
+ }));
160
+ setSuggestions(finalSuggestions);
161
+ setShowSuggestions(finalSuggestions.length > 0);
162
+ setActiveSuggestionIndex(finalSuggestions.length > 0 ? 0 : -1);
163
+ setIsLoadingSuggestions(false);
164
+ return;
165
+ }
166
+ // If we fall through, no suggestions are available.
167
+ resetCompletionState();
130
168
  return;
131
169
  }
132
- // --- Handle At Command Completion ---
170
+ // Handle At Command Completion
133
171
  const atIndex = query.lastIndexOf('@');
134
172
  if (atIndex === -1) {
135
173
  resetCompletionState();
@@ -145,7 +183,7 @@ export function useCompletion(query, cwd, isActive, slashCommands, config) {
145
183
  : partialPath.substring(lastSlashIndex + 1));
146
184
  const baseDirAbsolute = path.resolve(cwd, baseDirRelative);
147
185
  let isMounted = true;
148
- const findFilesRecursively = async (startDir, searchPrefix, fileDiscovery, currentRelativePath = '', depth = 0, maxDepth = 10, // Limit recursion depth
186
+ const findFilesRecursively = async (startDir, searchPrefix, fileDiscovery, filterOptions, currentRelativePath = '', depth = 0, maxDepth = 10, // Limit recursion depth
149
187
  maxResults = 50) => {
150
188
  if (depth > maxDepth) {
151
189
  return [];
@@ -163,9 +201,9 @@ export function useCompletion(query, cwd, isActive, slashCommands, config) {
163
201
  if (!searchPrefix.startsWith('.') && entry.name.startsWith('.')) {
164
202
  continue;
165
203
  }
166
- // Check if this entry should be ignored by git-aware filtering
204
+ // Check if this entry should be ignored by filtering options
167
205
  if (fileDiscovery &&
168
- fileDiscovery.shouldGitIgnoreFile(entryPathFromRoot)) {
206
+ fileDiscovery.shouldIgnoreFile(entryPathFromRoot, filterOptions)) {
169
207
  continue;
170
208
  }
171
209
  if (entry.name.toLowerCase().startsWith(lowerSearchPrefix)) {
@@ -179,7 +217,7 @@ export function useCompletion(query, cwd, isActive, slashCommands, config) {
179
217
  !entry.name.startsWith('.')) {
180
218
  if (foundSuggestions.length < maxResults) {
181
219
  foundSuggestions = foundSuggestions.concat(await findFilesRecursively(path.join(startDir, entry.name), searchPrefix, // Pass original searchPrefix for recursive calls
182
- fileDiscovery, entryPathRelative, depth + 1, maxDepth, maxResults - foundSuggestions.length));
220
+ fileDiscovery, filterOptions, entryPathRelative, depth + 1, maxDepth, maxResults - foundSuggestions.length));
183
221
  }
184
222
  }
185
223
  }
@@ -189,7 +227,7 @@ export function useCompletion(query, cwd, isActive, slashCommands, config) {
189
227
  }
190
228
  return foundSuggestions.slice(0, maxResults);
191
229
  };
192
- const findFilesWithGlob = async (searchPrefix, fileDiscoveryService, maxResults = 50) => {
230
+ const findFilesWithGlob = async (searchPrefix, fileDiscoveryService, filterOptions, maxResults = 50) => {
193
231
  const globPattern = `**/${searchPrefix}*`;
194
232
  const files = await glob(globPattern, {
195
233
  cwd,
@@ -206,7 +244,7 @@ export function useCompletion(query, cwd, isActive, slashCommands, config) {
206
244
  })
207
245
  .filter((s) => {
208
246
  if (fileDiscoveryService) {
209
- return !fileDiscoveryService.shouldGitIgnoreFile(s.label); // relative path
247
+ return !fileDiscoveryService.shouldIgnoreFile(s.label, filterOptions); // relative path
210
248
  }
211
249
  return true;
212
250
  })
@@ -218,16 +256,20 @@ export function useCompletion(query, cwd, isActive, slashCommands, config) {
218
256
  let fetchedSuggestions = [];
219
257
  const fileDiscoveryService = config ? config.getFileService() : null;
220
258
  const enableRecursiveSearch = config?.getEnableRecursiveFileSearch() ?? true;
259
+ const filterOptions = {
260
+ respectGitIgnore: config?.getFileFilteringRespectGitIgnore() ?? true,
261
+ respectGeminiIgnore: true,
262
+ };
221
263
  try {
222
264
  // If there's no slash, or it's the root, do a recursive search from cwd
223
265
  if (partialPath.indexOf('/') === -1 &&
224
266
  prefix &&
225
267
  enableRecursiveSearch) {
226
268
  if (fileDiscoveryService) {
227
- fetchedSuggestions = await findFilesWithGlob(prefix, fileDiscoveryService);
269
+ fetchedSuggestions = await findFilesWithGlob(prefix, fileDiscoveryService, filterOptions);
228
270
  }
229
271
  else {
230
- fetchedSuggestions = await findFilesRecursively(cwd, prefix, fileDiscoveryService);
272
+ fetchedSuggestions = await findFilesRecursively(cwd, prefix, fileDiscoveryService, filterOptions);
231
273
  }
232
274
  }
233
275
  else {
@@ -247,7 +289,7 @@ export function useCompletion(query, cwd, isActive, slashCommands, config) {
247
289
  continue;
248
290
  const relativePath = path.relative(cwd, path.join(baseDirAbsolute, entry.name));
249
291
  if (fileDiscoveryService &&
250
- fileDiscoveryService.shouldGitIgnoreFile(relativePath)) {
292
+ fileDiscoveryService.shouldIgnoreFile(relativePath, filterOptions)) {
251
293
  continue;
252
294
  }
253
295
  filteredEntries.push(entry);
@@ -305,7 +347,15 @@ export function useCompletion(query, cwd, isActive, slashCommands, config) {
305
347
  isMounted = false;
306
348
  clearTimeout(debounceTimeout);
307
349
  };
308
- }, [query, cwd, isActive, resetCompletionState, slashCommands, config]);
350
+ }, [
351
+ query,
352
+ cwd,
353
+ isActive,
354
+ resetCompletionState,
355
+ slashCommands,
356
+ commandContext,
357
+ config,
358
+ ]);
309
359
  return {
310
360
  suggestions,
311
361
  activeSuggestionIndex,
@@ -1 +1 @@
1
- {"version":3,"file":"useCompletion.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useCompletion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useCompletion.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useCompletion.ts"],"names":[],"mappings":"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"}
@@ -5,18 +5,18 @@
5
5
  */
6
6
  import { Config, GeminiClient, EditorType, ThoughtSummary } from '@google/gemini-cli-core';
7
7
  import { type PartListUnion } from '@google/genai';
8
- import { StreamingState, HistoryItem, HistoryItemWithoutId } from '../types.js';
8
+ import { StreamingState, HistoryItem, HistoryItemWithoutId, SlashCommandProcessorResult } from '../types.js';
9
9
  import { UseHistoryManagerReturn } from './useHistoryManager.js';
10
10
  export declare function mergePartListUnions(list: PartListUnion[]): PartListUnion;
11
11
  /**
12
12
  * Manages the Gemini stream, including user input, command processing,
13
13
  * API interaction, and tool call lifecycle.
14
14
  */
15
- export declare const useGeminiStream: (geminiClient: GeminiClient, history: HistoryItem[], addItem: UseHistoryManagerReturn["addItem"], setShowHelp: React.Dispatch<React.SetStateAction<boolean>>, config: Config, onDebugMessage: (message: string) => void, handleSlashCommand: (cmd: PartListUnion) => Promise<import("./slashCommandProcessor.js").SlashCommandActionReturn | boolean>, shellModeActive: boolean, getPreferredEditor: () => EditorType | undefined, onAuthError: () => void, performMemoryRefresh: () => Promise<void>) => {
15
+ export declare const useGeminiStream: (geminiClient: GeminiClient, history: HistoryItem[], addItem: UseHistoryManagerReturn["addItem"], setShowHelp: React.Dispatch<React.SetStateAction<boolean>>, config: Config, onDebugMessage: (message: string) => void, handleSlashCommand: (cmd: PartListUnion) => Promise<SlashCommandProcessorResult | false>, shellModeActive: boolean, getPreferredEditor: () => EditorType | undefined, onAuthError: () => void, performMemoryRefresh: () => Promise<void>, modelSwitchedFromQuotaError: boolean, setModelSwitchedFromQuotaError: React.Dispatch<React.SetStateAction<boolean>>) => {
16
16
  streamingState: StreamingState;
17
17
  submitQuery: (query: PartListUnion, options?: {
18
18
  isContinuation: boolean;
19
- }) => Promise<void>;
19
+ }, prompt_id?: string) => Promise<void>;
20
20
  initError: string | null;
21
21
  pendingHistoryItems: HistoryItemWithoutId[];
22
22
  thought: ThoughtSummary | null;
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
7
7
  import { useInput } from 'ink';
8
- import { GeminiEventType as ServerGeminiEventType, getErrorMessage, isNodeError, MessageSenderType, logUserPrompt, GitService, UnauthorizedError, UserPromptEvent, } from '@google/gemini-cli-core';
8
+ import { GeminiEventType as ServerGeminiEventType, getErrorMessage, isNodeError, MessageSenderType, logUserPrompt, GitService, UnauthorizedError, UserPromptEvent, DEFAULT_GEMINI_FLASH_MODEL, } from '@google/gemini-cli-core';
9
9
  import { StreamingState, MessageType, ToolCallStatus, } from '../types.js';
10
10
  import { isAtCommand } from '../utils/commandUtils.js';
11
11
  import { parseAndFormatApiError } from '../utils/errorParsing.js';
@@ -17,6 +17,7 @@ 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';
20
21
  export function mergePartListUnions(list) {
21
22
  const resultParts = [];
22
23
  for (const item of list) {
@@ -39,7 +40,7 @@ var StreamProcessingStatus;
39
40
  * Manages the Gemini stream, including user input, command processing,
40
41
  * API interaction, and tool call lifecycle.
41
42
  */
42
- export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, config, onDebugMessage, handleSlashCommand, shellModeActive, getPreferredEditor, onAuthError, performMemoryRefresh) => {
43
+ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, config, onDebugMessage, handleSlashCommand, shellModeActive, getPreferredEditor, onAuthError, performMemoryRefresh, modelSwitchedFromQuotaError, setModelSwitchedFromQuotaError) => {
43
44
  const [initError, setInitError] = useState(null);
44
45
  const abortControllerRef = useRef(null);
45
46
  const turnCancelledRef = useRef(false);
@@ -47,6 +48,7 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
47
48
  const [thought, setThought] = useState(null);
48
49
  const [pendingHistoryItemRef, setPendingHistoryItem] = useStateAndRef(null);
49
50
  const processedMemoryToolsRef = useRef(new Set());
51
+ const { startNewPrompt, getPromptCount } = useSessionStats();
50
52
  const logger = useLogger();
51
53
  const gitService = useMemo(() => {
52
54
  if (!config.getProjectRoot()) {
@@ -105,7 +107,7 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
105
107
  setIsResponding(false);
106
108
  }
107
109
  });
108
- const prepareQueryForGemini = useCallback(async (query, userMessageTimestamp, abortSignal) => {
110
+ const prepareQueryForGemini = useCallback(async (query, userMessageTimestamp, abortSignal, prompt_id) => {
109
111
  if (turnCancelledRef.current) {
110
112
  return { queryToSend: null, shouldProceed: false };
111
113
  }
@@ -115,29 +117,24 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
115
117
  let localQueryToSendToGemini = null;
116
118
  if (typeof query === 'string') {
117
119
  const trimmedQuery = query.trim();
118
- logUserPrompt(config, new UserPromptEvent(trimmedQuery.length, trimmedQuery));
120
+ logUserPrompt(config, new UserPromptEvent(trimmedQuery.length, prompt_id, config.getContentGeneratorConfig()?.authType, trimmedQuery));
119
121
  onDebugMessage(`User query: '${trimmedQuery}'`);
120
122
  await logger?.logMessage(MessageSenderType.USER, trimmedQuery);
121
123
  // Handle UI-only commands first
122
124
  const slashCommandResult = await handleSlashCommand(trimmedQuery);
123
- if (typeof slashCommandResult === 'boolean' && slashCommandResult) {
124
- // Command was handled, and it doesn't require a tool call from here
125
- return { queryToSend: null, shouldProceed: false };
126
- }
127
- else if (typeof slashCommandResult === 'object' &&
128
- slashCommandResult.shouldScheduleTool) {
129
- // Slash command wants to schedule a tool call (e.g., /memory add)
130
- const { toolName, toolArgs } = slashCommandResult;
131
- if (toolName && toolArgs) {
125
+ if (slashCommandResult) {
126
+ if (slashCommandResult.type === 'schedule_tool') {
127
+ const { toolName, toolArgs } = slashCommandResult;
132
128
  const toolCallRequest = {
133
129
  callId: `${toolName}-${Date.now()}-${Math.random().toString(16).slice(2)}`,
134
130
  name: toolName,
135
131
  args: toolArgs,
136
132
  isClientInitiated: true,
133
+ prompt_id,
137
134
  };
138
135
  scheduleToolCalls([toolCallRequest], abortSignal);
139
136
  }
140
- return { queryToSend: null, shouldProceed: false }; // Handled by scheduling the tool
137
+ return { queryToSend: null, shouldProceed: false };
141
138
  }
142
139
  if (shellModeActive && handleShellCommand(trimmedQuery, abortSignal)) {
143
140
  return { queryToSend: null, shouldProceed: false };
@@ -259,7 +256,7 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
259
256
  }
260
257
  addItem({
261
258
  type: MessageType.ERROR,
262
- text: parseAndFormatApiError(eventValue.error, config.getContentGeneratorConfig().authType),
259
+ text: parseAndFormatApiError(eventValue.error, config.getContentGeneratorConfig()?.authType, undefined, config.getModel(), DEFAULT_GEMINI_FLASH_MODEL),
263
260
  }, userMessageTimestamp);
264
261
  }, [addItem, pendingHistoryItemRef, setPendingHistoryItem, config]);
265
262
  const handleChatCompressionEvent = useCallback((eventValue) => addItem({
@@ -269,6 +266,11 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
269
266
  `${eventValue?.originalTokenCount ?? 'unknown'} to ` +
270
267
  `${eventValue?.newTokenCount ?? 'unknown'} tokens).`,
271
268
  }, Date.now()), [addItem, config]);
269
+ const handleMaxSessionTurnsEvent = useCallback(() => addItem({
270
+ type: 'info',
271
+ text: `The session has reached the maximum number of turns: ${config.getMaxSessionTurns()}. ` +
272
+ `Please update this limit in your setting.json file.`,
273
+ }, Date.now()), [addItem, config]);
272
274
  const processGeminiStreamEvents = useCallback(async (stream, userMessageTimestamp, signal) => {
273
275
  let geminiMessageBuffer = '';
274
276
  const toolCallRequests = [];
@@ -296,6 +298,9 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
296
298
  case ServerGeminiEventType.ToolCallResponse:
297
299
  // do nothing
298
300
  break;
301
+ case ServerGeminiEventType.MaxSessionTurns:
302
+ handleMaxSessionTurnsEvent();
303
+ break;
299
304
  default: {
300
305
  // enforces exhaustive switch-case
301
306
  const unreachable = event;
@@ -313,25 +318,37 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
313
318
  handleErrorEvent,
314
319
  scheduleToolCalls,
315
320
  handleChatCompressionEvent,
321
+ handleMaxSessionTurnsEvent,
316
322
  ]);
317
- const submitQuery = useCallback(async (query, options) => {
323
+ const submitQuery = useCallback(async (query, options, prompt_id) => {
318
324
  if ((streamingState === StreamingState.Responding ||
319
325
  streamingState === StreamingState.WaitingForConfirmation) &&
320
326
  !options?.isContinuation)
321
327
  return;
322
328
  const userMessageTimestamp = Date.now();
323
329
  setShowHelp(false);
330
+ // Reset quota error flag when starting a new query (not a continuation)
331
+ if (!options?.isContinuation) {
332
+ setModelSwitchedFromQuotaError(false);
333
+ config.setQuotaErrorOccurred(false);
334
+ }
324
335
  abortControllerRef.current = new AbortController();
325
336
  const abortSignal = abortControllerRef.current.signal;
326
337
  turnCancelledRef.current = false;
327
- const { queryToSend, shouldProceed } = await prepareQueryForGemini(query, userMessageTimestamp, abortSignal);
338
+ if (!prompt_id) {
339
+ prompt_id = config.getSessionId() + '########' + getPromptCount();
340
+ }
341
+ const { queryToSend, shouldProceed } = await prepareQueryForGemini(query, userMessageTimestamp, abortSignal, prompt_id);
328
342
  if (!shouldProceed || queryToSend === null) {
329
343
  return;
330
344
  }
345
+ if (!options?.isContinuation) {
346
+ startNewPrompt();
347
+ }
331
348
  setIsResponding(true);
332
349
  setInitError(null);
333
350
  try {
334
- const stream = geminiClient.sendMessageStream(queryToSend, abortSignal);
351
+ const stream = geminiClient.sendMessageStream(queryToSend, abortSignal, prompt_id);
335
352
  const processingStatus = await processGeminiStreamEvents(stream, userMessageTimestamp, abortSignal);
336
353
  if (processingStatus === StreamProcessingStatus.UserCancelled) {
337
354
  return;
@@ -348,7 +365,7 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
348
365
  else if (!isNodeError(error) || error.name !== 'AbortError') {
349
366
  addItem({
350
367
  type: MessageType.ERROR,
351
- text: parseAndFormatApiError(getErrorMessage(error) || 'Unknown error', config.getContentGeneratorConfig().authType),
368
+ text: parseAndFormatApiError(getErrorMessage(error) || 'Unknown error', config.getContentGeneratorConfig()?.authType, undefined, config.getModel(), DEFAULT_GEMINI_FLASH_MODEL),
352
369
  }, userMessageTimestamp);
353
370
  }
354
371
  }
@@ -358,6 +375,7 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
358
375
  }, [
359
376
  streamingState,
360
377
  setShowHelp,
378
+ setModelSwitchedFromQuotaError,
361
379
  prepareQueryForGemini,
362
380
  processGeminiStreamEvents,
363
381
  pendingHistoryItemRef,
@@ -367,6 +385,8 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
367
385
  geminiClient,
368
386
  onAuthError,
369
387
  config,
388
+ startNewPrompt,
389
+ getPromptCount,
370
390
  ]);
371
391
  const handleCompletedTools = useCallback(async (completedToolCallsFromScheduler) => {
372
392
  if (isResponding) {
@@ -408,22 +428,22 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
408
428
  // We need to manually add the function responses to the history
409
429
  // so the model knows the tools were cancelled.
410
430
  const responsesToAdd = geminiTools.flatMap((toolCall) => toolCall.response.responseParts);
431
+ const combinedParts = [];
411
432
  for (const response of responsesToAdd) {
412
- let parts;
413
433
  if (Array.isArray(response)) {
414
- parts = response;
434
+ combinedParts.push(...response);
415
435
  }
416
436
  else if (typeof response === 'string') {
417
- parts = [{ text: response }];
437
+ combinedParts.push({ text: response });
418
438
  }
419
439
  else {
420
- parts = [response];
440
+ combinedParts.push(response);
421
441
  }
422
- geminiClient.addHistory({
423
- role: 'user',
424
- parts,
425
- });
426
442
  }
443
+ geminiClient.addHistory({
444
+ role: 'user',
445
+ parts: combinedParts,
446
+ });
427
447
  }
428
448
  const callIdsToMarkAsSubmitted = geminiTools.map((toolCall) => toolCall.request.callId);
429
449
  markToolsAsSubmitted(callIdsToMarkAsSubmitted);
@@ -431,16 +451,22 @@ export const useGeminiStream = (geminiClient, history, addItem, setShowHelp, con
431
451
  }
432
452
  const responsesToSend = geminiTools.map((toolCall) => toolCall.response.responseParts);
433
453
  const callIdsToMarkAsSubmitted = geminiTools.map((toolCall) => toolCall.request.callId);
454
+ const prompt_ids = geminiTools.map((toolCall) => toolCall.request.prompt_id);
434
455
  markToolsAsSubmitted(callIdsToMarkAsSubmitted);
456
+ // Don't continue if model was switched due to quota error
457
+ if (modelSwitchedFromQuotaError) {
458
+ return;
459
+ }
435
460
  submitQuery(mergePartListUnions(responsesToSend), {
436
461
  isContinuation: true,
437
- });
462
+ }, prompt_ids[0]);
438
463
  }, [
439
464
  isResponding,
440
465
  submitQuery,
441
466
  markToolsAsSubmitted,
442
467
  geminiClient,
443
468
  performMemoryRefresh,
469
+ modelSwitchedFromQuotaError,
444
470
  ]);
445
471
  const pendingHistoryItems = [
446
472
  pendingHistoryItemRef.current,