@google/gemini-cli 0.5.5 → 0.6.0-preview.0

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 (342) hide show
  1. package/LICENSE +2 -2
  2. package/README.md +12 -2
  3. package/dist/index.js +0 -0
  4. package/dist/package.json +3 -3
  5. package/dist/src/commands/extensions/disable.d.ts +1 -1
  6. package/dist/src/commands/extensions/disable.js +3 -3
  7. package/dist/src/commands/extensions/disable.js.map +1 -1
  8. package/dist/src/commands/extensions/enable.d.ts +1 -1
  9. package/dist/src/commands/extensions/enable.js +5 -7
  10. package/dist/src/commands/extensions/enable.js.map +1 -1
  11. package/dist/src/commands/extensions/install.d.ts +1 -0
  12. package/dist/src/commands/extensions/install.js +10 -2
  13. package/dist/src/commands/extensions/install.js.map +1 -1
  14. package/dist/src/commands/extensions/install.test.js +75 -2
  15. package/dist/src/commands/extensions/install.test.js.map +1 -1
  16. package/dist/src/commands/extensions/update.js +14 -4
  17. package/dist/src/commands/extensions/update.js.map +1 -1
  18. package/dist/src/config/config.d.ts +1 -1
  19. package/dist/src/config/config.js +19 -5
  20. package/dist/src/config/config.js.map +1 -1
  21. package/dist/src/config/extension.d.ts +17 -8
  22. package/dist/src/config/extension.js +192 -73
  23. package/dist/src/config/extension.js.map +1 -1
  24. package/dist/src/config/extensions/extensionEnablement.d.ts +30 -0
  25. package/dist/src/config/extensions/extensionEnablement.js +113 -0
  26. package/dist/src/config/extensions/extensionEnablement.js.map +1 -0
  27. package/dist/src/config/extensions/extensionEnablement.test.js +116 -0
  28. package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -0
  29. package/dist/src/config/extensions/variableSchema.d.ts +8 -0
  30. package/dist/src/config/extensions/variableSchema.js +4 -0
  31. package/dist/src/config/extensions/variableSchema.js.map +1 -1
  32. package/dist/src/config/keyBindings.d.ts +4 -1
  33. package/dist/src/config/keyBindings.js +8 -0
  34. package/dist/src/config/keyBindings.js.map +1 -1
  35. package/dist/src/config/settings.d.ts +3 -0
  36. package/dist/src/config/settings.js +54 -15
  37. package/dist/src/config/settings.js.map +1 -1
  38. package/dist/src/config/settingsSchema.d.ts +67 -1
  39. package/dist/src/config/settingsSchema.js +64 -1
  40. package/dist/src/config/settingsSchema.js.map +1 -1
  41. package/dist/src/config/settingsSchema.test.js +6 -0
  42. package/dist/src/config/settingsSchema.test.js.map +1 -1
  43. package/dist/src/config/trustedFolders.d.ts +1 -1
  44. package/dist/src/config/trustedFolders.js +9 -4
  45. package/dist/src/config/trustedFolders.js.map +1 -1
  46. package/dist/src/config/trustedFolders.test.js +41 -25
  47. package/dist/src/config/trustedFolders.test.js.map +1 -1
  48. package/dist/src/core/initializer.js +6 -1
  49. package/dist/src/core/initializer.js.map +1 -1
  50. package/dist/src/gemini.js +29 -46
  51. package/dist/src/gemini.js.map +1 -1
  52. package/dist/src/gemini.test.js +11 -15
  53. package/dist/src/gemini.test.js.map +1 -1
  54. package/dist/src/generated/git-commit.d.ts +2 -2
  55. package/dist/src/generated/git-commit.js +2 -2
  56. package/dist/src/generated/git-commit.js.map +1 -1
  57. package/dist/src/nonInteractiveCli.js +23 -9
  58. package/dist/src/nonInteractiveCli.js.map +1 -1
  59. package/dist/src/services/McpPromptLoader.js +43 -8
  60. package/dist/src/services/McpPromptLoader.js.map +1 -1
  61. package/dist/src/services/McpPromptLoader.test.js +228 -1
  62. package/dist/src/services/McpPromptLoader.test.js.map +1 -1
  63. package/dist/src/services/prompt-processors/shellProcessor.js +8 -1
  64. package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -1
  65. package/dist/src/ui/AppContainer.js +69 -32
  66. package/dist/src/ui/AppContainer.js.map +1 -1
  67. package/dist/src/ui/AppContainer.test.js +36 -0
  68. package/dist/src/ui/AppContainer.test.js.map +1 -1
  69. package/dist/src/ui/IdeIntegrationNudge.js +2 -1
  70. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
  71. package/dist/src/ui/auth/AuthDialog.js +2 -2
  72. package/dist/src/ui/auth/AuthDialog.js.map +1 -1
  73. package/dist/src/ui/auth/AuthInProgress.js +2 -2
  74. package/dist/src/ui/auth/AuthInProgress.js.map +1 -1
  75. package/dist/src/ui/commands/chatCommand.d.ts +2 -0
  76. package/dist/src/ui/commands/chatCommand.js +82 -3
  77. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  78. package/dist/src/ui/commands/extensionsCommand.js +70 -16
  79. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  80. package/dist/src/ui/commands/ideCommand.js +2 -2
  81. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  82. package/dist/src/ui/commands/types.d.ts +4 -1
  83. package/dist/src/ui/commands/types.js +0 -1
  84. package/dist/src/ui/commands/types.js.map +1 -1
  85. package/dist/src/ui/components/AboutBox.js +2 -2
  86. package/dist/src/ui/components/AboutBox.js.map +1 -1
  87. package/dist/src/ui/components/AnsiOutput.d.ts +13 -0
  88. package/dist/src/ui/components/AnsiOutput.js +12 -0
  89. package/dist/src/ui/components/AnsiOutput.js.map +1 -0
  90. package/dist/src/ui/components/AnsiOutput.test.d.ts +6 -0
  91. package/dist/src/ui/components/AnsiOutput.test.js +97 -0
  92. package/dist/src/ui/components/AnsiOutput.test.js.map +1 -0
  93. package/dist/src/ui/components/AutoAcceptIndicator.js +4 -4
  94. package/dist/src/ui/components/AutoAcceptIndicator.js.map +1 -1
  95. package/dist/src/ui/components/Composer.js +10 -5
  96. package/dist/src/ui/components/Composer.js.map +1 -1
  97. package/dist/src/ui/components/ConfigInitDisplay.js +2 -1
  98. package/dist/src/ui/components/ConfigInitDisplay.js.map +1 -1
  99. package/dist/src/ui/components/ConsoleSummaryDisplay.js +2 -2
  100. package/dist/src/ui/components/ConsoleSummaryDisplay.js.map +1 -1
  101. package/dist/src/ui/components/ContextSummaryDisplay.js +3 -3
  102. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  103. package/dist/src/ui/components/ContextUsageDisplay.js +2 -2
  104. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -1
  105. package/dist/src/ui/components/DebugProfiler.js +2 -2
  106. package/dist/src/ui/components/DebugProfiler.js.map +1 -1
  107. package/dist/src/ui/components/DetailedMessagesDisplay.js +7 -7
  108. package/dist/src/ui/components/DetailedMessagesDisplay.js.map +1 -1
  109. package/dist/src/ui/components/DialogManager.js +9 -5
  110. package/dist/src/ui/components/DialogManager.js.map +1 -1
  111. package/dist/src/ui/components/EditorSettingsDialog.js +5 -5
  112. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
  113. package/dist/src/ui/components/FolderTrustDialog.js +6 -14
  114. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
  115. package/dist/src/ui/components/FolderTrustDialog.test.js +13 -13
  116. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
  117. package/dist/src/ui/components/Footer.d.ts +3 -0
  118. package/dist/src/ui/components/Footer.js +8 -3
  119. package/dist/src/ui/components/Footer.js.map +1 -1
  120. package/dist/src/ui/components/GeminiRespondingSpinner.js +3 -2
  121. package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -1
  122. package/dist/src/ui/components/Header.js +2 -2
  123. package/dist/src/ui/components/Header.js.map +1 -1
  124. package/dist/src/ui/components/Help.js +5 -5
  125. package/dist/src/ui/components/Help.js.map +1 -1
  126. package/dist/src/ui/components/HistoryItemDisplay.d.ts +2 -0
  127. package/dist/src/ui/components/HistoryItemDisplay.js +2 -1
  128. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  129. package/dist/src/ui/components/InputPrompt.d.ts +3 -0
  130. package/dist/src/ui/components/InputPrompt.js +97 -19
  131. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  132. package/dist/src/ui/components/LoadingIndicator.js +2 -2
  133. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  134. package/dist/src/ui/components/LoopDetectionConfirmation.d.ts +13 -0
  135. package/dist/src/ui/components/LoopDetectionConfirmation.js +35 -0
  136. package/dist/src/ui/components/LoopDetectionConfirmation.js.map +1 -0
  137. package/dist/src/ui/components/LoopDetectionConfirmation.test.d.ts +6 -0
  138. package/dist/src/ui/components/LoopDetectionConfirmation.test.js +25 -0
  139. package/dist/src/ui/components/LoopDetectionConfirmation.test.js.map +1 -0
  140. package/dist/src/ui/components/MainContent.js +1 -1
  141. package/dist/src/ui/components/MainContent.js.map +1 -1
  142. package/dist/src/ui/components/MemoryUsageDisplay.js +6 -4
  143. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -1
  144. package/dist/src/ui/components/ModelStatsDisplay.js +7 -7
  145. package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -1
  146. package/dist/src/ui/components/Notifications.js +2 -2
  147. package/dist/src/ui/components/Notifications.js.map +1 -1
  148. package/dist/src/ui/components/PrepareLabel.d.ts +5 -5
  149. package/dist/src/ui/components/PrepareLabel.js +67 -11
  150. package/dist/src/ui/components/PrepareLabel.js.map +1 -1
  151. package/dist/src/ui/components/PrepareLabel.test.d.ts +6 -0
  152. package/dist/src/ui/components/PrepareLabel.test.js +71 -0
  153. package/dist/src/ui/components/PrepareLabel.test.js.map +1 -0
  154. package/dist/src/ui/components/ProQuotaDialog.js +2 -2
  155. package/dist/src/ui/components/ProQuotaDialog.js.map +1 -1
  156. package/dist/src/ui/components/SettingsDialog.d.ts +2 -1
  157. package/dist/src/ui/components/SettingsDialog.js +73 -17
  158. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  159. package/dist/src/ui/components/SettingsDialog.test.js +291 -0
  160. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  161. package/dist/src/ui/components/ShellConfirmationDialog.js +2 -2
  162. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
  163. package/dist/src/ui/components/ShellInputPrompt.d.ts +11 -0
  164. package/dist/src/ui/components/ShellInputPrompt.js +36 -0
  165. package/dist/src/ui/components/ShellInputPrompt.js.map +1 -0
  166. package/dist/src/ui/components/ShellModeIndicator.js +2 -2
  167. package/dist/src/ui/components/ShellModeIndicator.js.map +1 -1
  168. package/dist/src/ui/components/ShowMoreLines.js +2 -2
  169. package/dist/src/ui/components/ShowMoreLines.js.map +1 -1
  170. package/dist/src/ui/components/StatsDisplay.js +6 -6
  171. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  172. package/dist/src/ui/components/SuggestionsDisplay.d.ts +5 -2
  173. package/dist/src/ui/components/SuggestionsDisplay.js +17 -11
  174. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  175. package/dist/src/ui/components/ThemeDialog.js +4 -4
  176. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  177. package/dist/src/ui/components/ThemeDialog.test.js +10 -0
  178. package/dist/src/ui/components/ThemeDialog.test.js.map +1 -1
  179. package/dist/src/ui/components/Tips.js +2 -2
  180. package/dist/src/ui/components/Tips.js.map +1 -1
  181. package/dist/src/ui/components/ToolStatsDisplay.js +4 -4
  182. package/dist/src/ui/components/ToolStatsDisplay.js.map +1 -1
  183. package/dist/src/ui/components/UpdateNotification.js +2 -2
  184. package/dist/src/ui/components/UpdateNotification.js.map +1 -1
  185. package/dist/src/ui/components/WorkspaceMigrationDialog.js +4 -4
  186. package/dist/src/ui/components/WorkspaceMigrationDialog.js.map +1 -1
  187. package/dist/src/ui/components/messages/CompressionMessage.d.ts +1 -2
  188. package/dist/src/ui/components/messages/CompressionMessage.js +37 -8
  189. package/dist/src/ui/components/messages/CompressionMessage.js.map +1 -1
  190. package/dist/src/ui/components/messages/CompressionMessage.test.d.ts +6 -0
  191. package/dist/src/ui/components/messages/CompressionMessage.test.js +160 -0
  192. package/dist/src/ui/components/messages/CompressionMessage.test.js.map +1 -0
  193. package/dist/src/ui/components/messages/DiffRenderer.d.ts +2 -1
  194. package/dist/src/ui/components/messages/DiffRenderer.js +14 -22
  195. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  196. package/dist/src/ui/components/messages/ErrorMessage.js +2 -2
  197. package/dist/src/ui/components/messages/ErrorMessage.js.map +1 -1
  198. package/dist/src/ui/components/messages/GeminiMessage.js +2 -2
  199. package/dist/src/ui/components/messages/GeminiMessage.js.map +1 -1
  200. package/dist/src/ui/components/messages/InfoMessage.js +2 -2
  201. package/dist/src/ui/components/messages/InfoMessage.js.map +1 -1
  202. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +31 -19
  203. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  204. package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +3 -0
  205. package/dist/src/ui/components/messages/ToolGroupMessage.js +10 -6
  206. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  207. package/dist/src/ui/components/messages/ToolMessage.d.ts +4 -0
  208. package/dist/src/ui/components/messages/ToolMessage.js +17 -10
  209. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  210. package/dist/src/ui/components/messages/ToolMessage.test.js +33 -1
  211. package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -1
  212. package/dist/src/ui/components/messages/UserMessage.js +3 -3
  213. package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
  214. package/dist/src/ui/components/messages/UserShellMessage.js +2 -2
  215. package/dist/src/ui/components/messages/UserShellMessage.js.map +1 -1
  216. package/dist/src/ui/components/shared/MaxSizedBox.js +2 -2
  217. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  218. package/dist/src/ui/components/shared/RadioButtonSelect.js +12 -12
  219. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  220. package/dist/src/ui/components/shared/text-buffer.d.ts +19 -2
  221. package/dist/src/ui/components/shared/text-buffer.js +191 -133
  222. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  223. package/dist/src/ui/components/views/ExtensionsList.d.ts +6 -0
  224. package/dist/src/ui/components/views/ExtensionsList.js +47 -0
  225. package/dist/src/ui/components/views/ExtensionsList.js.map +1 -0
  226. package/dist/src/ui/components/views/ExtensionsList.test.d.ts +6 -0
  227. package/dist/src/ui/components/views/ExtensionsList.test.js +97 -0
  228. package/dist/src/ui/components/views/ExtensionsList.test.js.map +1 -0
  229. package/dist/src/ui/contexts/UIStateContext.d.ts +6 -1
  230. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  231. package/dist/src/ui/hooks/keyToAnsi.d.ts +15 -0
  232. package/dist/src/ui/hooks/keyToAnsi.js +67 -0
  233. package/dist/src/ui/hooks/keyToAnsi.js.map +1 -0
  234. package/dist/src/ui/hooks/shellCommandProcessor.d.ts +2 -1
  235. package/dist/src/ui/hooks/shellCommandProcessor.js +58 -15
  236. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  237. package/dist/src/ui/hooks/shellCommandProcessor.test.js +196 -17
  238. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -1
  239. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +3 -1
  240. package/dist/src/ui/hooks/slashCommandProcessor.js +14 -44
  241. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  242. package/dist/src/ui/hooks/useAutoAcceptIndicator.d.ts +3 -2
  243. package/dist/src/ui/hooks/useAutoAcceptIndicator.js +9 -5
  244. package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +1 -1
  245. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +69 -0
  246. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -1
  247. package/dist/src/ui/hooks/useGeminiStream.d.ts +11 -1
  248. package/dist/src/ui/hooks/useGeminiStream.js +75 -18
  249. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  250. package/dist/src/ui/hooks/useGitBranchName.js +15 -18
  251. package/dist/src/ui/hooks/useGitBranchName.js.map +1 -1
  252. package/dist/src/ui/hooks/useGitBranchName.test.js +49 -53
  253. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -1
  254. package/dist/src/ui/hooks/useIdeTrustListener.js +2 -2
  255. package/dist/src/ui/hooks/useIdeTrustListener.js.map +1 -1
  256. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +0 -2
  257. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +1 -1
  258. package/dist/src/ui/hooks/useReactToolScheduler.d.ts +3 -2
  259. package/dist/src/ui/hooks/useReactToolScheduler.js +21 -17
  260. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  261. package/dist/src/ui/hooks/useReverseSearchCompletion.d.ts +1 -1
  262. package/dist/src/ui/hooks/useReverseSearchCompletion.js +67 -20
  263. package/dist/src/ui/hooks/useReverseSearchCompletion.js.map +1 -1
  264. package/dist/src/ui/hooks/useSlashCompletion.d.ts +1 -1
  265. package/dist/src/ui/hooks/useSlashCompletion.js +12 -1
  266. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  267. package/dist/src/ui/hooks/useSlashCompletion.test.js +14 -2
  268. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
  269. package/dist/src/ui/hooks/useToolScheduler.test.js +6 -4
  270. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  271. package/dist/src/ui/keyMatchers.test.js +8 -0
  272. package/dist/src/ui/keyMatchers.test.js.map +1 -1
  273. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +5 -5
  274. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -1
  275. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.js +2 -2
  276. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.js.map +1 -1
  277. package/dist/src/ui/privacy/GeminiPrivacyNotice.js +2 -2
  278. package/dist/src/ui/privacy/GeminiPrivacyNotice.js.map +1 -1
  279. package/dist/src/ui/state/extensions.d.ts +14 -0
  280. package/dist/src/ui/state/extensions.js +16 -0
  281. package/dist/src/ui/state/extensions.js.map +1 -0
  282. package/dist/src/ui/themes/ayu.js +1 -1
  283. package/dist/src/ui/themes/dracula.js +2 -2
  284. package/dist/src/ui/themes/github-dark.js +1 -1
  285. package/dist/src/ui/themes/theme.js +17 -17
  286. package/dist/src/ui/themes/theme.js.map +1 -1
  287. package/dist/src/ui/types.d.ts +12 -2
  288. package/dist/src/ui/types.js +1 -0
  289. package/dist/src/ui/types.js.map +1 -1
  290. package/dist/src/ui/utils/CodeColorizer.js +3 -2
  291. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  292. package/dist/src/ui/utils/InlineMarkdownRenderer.js +7 -7
  293. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
  294. package/dist/src/ui/utils/MarkdownDisplay.js +10 -10
  295. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  296. package/dist/src/ui/utils/MarkdownDisplay.test.js +6 -2
  297. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
  298. package/dist/src/ui/utils/TableRenderer.js +4 -4
  299. package/dist/src/ui/utils/TableRenderer.js.map +1 -1
  300. package/dist/src/ui/utils/clipboardUtils.js +5 -6
  301. package/dist/src/ui/utils/clipboardUtils.js.map +1 -1
  302. package/dist/src/ui/utils/displayUtils.js +4 -4
  303. package/dist/src/ui/utils/displayUtils.js.map +1 -1
  304. package/dist/src/ui/utils/textUtils.d.ts +9 -0
  305. package/dist/src/ui/utils/textUtils.js +52 -3
  306. package/dist/src/ui/utils/textUtils.js.map +1 -1
  307. package/dist/src/utils/commands.d.ts +20 -0
  308. package/dist/src/utils/commands.js +53 -0
  309. package/dist/src/utils/commands.js.map +1 -0
  310. package/dist/src/utils/commands.test.d.ts +6 -0
  311. package/dist/src/utils/commands.test.js +115 -0
  312. package/dist/src/utils/commands.test.js.map +1 -0
  313. package/dist/src/utils/commentJson.d.ts +9 -0
  314. package/dist/src/utils/commentJson.js +48 -0
  315. package/dist/src/utils/commentJson.js.map +1 -0
  316. package/dist/src/utils/commentJson.test.d.ts +6 -0
  317. package/dist/src/utils/commentJson.test.js +146 -0
  318. package/dist/src/utils/commentJson.test.js.map +1 -0
  319. package/dist/src/utils/errors.d.ts +21 -0
  320. package/dist/src/utils/errors.js +93 -0
  321. package/dist/src/utils/errors.js.map +1 -1
  322. package/dist/src/utils/errors.test.d.ts +6 -0
  323. package/dist/src/utils/errors.test.js +303 -0
  324. package/dist/src/utils/errors.test.js.map +1 -0
  325. package/dist/src/utils/sandbox.d.ts +1 -1
  326. package/dist/src/utils/sandbox.js +10 -17
  327. package/dist/src/utils/sandbox.js.map +1 -1
  328. package/dist/src/utils/settingsUtils.test.js +37 -2
  329. package/dist/src/utils/settingsUtils.test.js.map +1 -1
  330. package/dist/src/validateNonInterActiveAuth.js +30 -18
  331. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  332. package/dist/src/zed-integration/schema.d.ts +18 -18
  333. package/dist/src/zed-integration/zedIntegration.js +10 -7
  334. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  335. package/dist/tsconfig.tsbuildinfo +1 -1
  336. package/package.json +5 -5
  337. package/dist/src/utils/processUtils.d.ts +0 -13
  338. package/dist/src/utils/processUtils.js +0 -18
  339. package/dist/src/utils/processUtils.js.map +0 -1
  340. package/dist/src/utils/processUtils.test.js +0 -20
  341. package/dist/src/utils/processUtils.test.js.map +0 -1
  342. /package/dist/src/{utils/processUtils.test.d.ts → config/extensions/extensionEnablement.test.d.ts} +0 -0
@@ -4,9 +4,37 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { McpPromptLoader } from './McpPromptLoader.js';
7
- import { describe, it, expect } from 'vitest';
7
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
8
+ import { CommandKind } from '../ui/commands/types.js';
9
+ import * as cliCore from '@google/gemini-cli-core';
10
+ // Define the mock prompt data at a higher scope
11
+ const mockPrompt = {
12
+ name: 'test-prompt',
13
+ description: 'A test prompt.',
14
+ serverName: 'test-server',
15
+ arguments: [
16
+ { name: 'name', required: true, description: "The animal's name." },
17
+ { name: 'age', required: true, description: "The animal's age." },
18
+ { name: 'species', required: true, description: "The animal's species." },
19
+ {
20
+ name: 'enclosure',
21
+ required: false,
22
+ description: "The animal's enclosure.",
23
+ },
24
+ { name: 'trail', required: false, description: "The animal's trail." },
25
+ ],
26
+ invoke: vi.fn().mockResolvedValue({
27
+ messages: [{ content: { text: 'Hello, world!' } }],
28
+ }),
29
+ };
8
30
  describe('McpPromptLoader', () => {
9
31
  const mockConfig = {};
32
+ // Use a beforeEach to set up and clean a spy for each test
33
+ beforeEach(() => {
34
+ vi.clearAllMocks();
35
+ vi.spyOn(cliCore, 'getMCPServerPrompts').mockReturnValue([mockPrompt]);
36
+ });
37
+ // --- `parseArgs` tests remain the same ---
10
38
  describe('parseArgs', () => {
11
39
  it('should handle multi-word positional arguments', () => {
12
40
  const loader = new McpPromptLoader(mockConfig);
@@ -110,5 +138,204 @@ describe('McpPromptLoader', () => {
110
138
  });
111
139
  });
112
140
  });
141
+ describe('loadCommands', () => {
142
+ const mockConfigWithPrompts = {
143
+ getMcpServers: () => ({
144
+ 'test-server': { httpUrl: 'https://test-server.com' },
145
+ }),
146
+ };
147
+ it('should load prompts as slash commands', async () => {
148
+ const loader = new McpPromptLoader(mockConfigWithPrompts);
149
+ const commands = await loader.loadCommands(new AbortController().signal);
150
+ expect(commands).toHaveLength(1);
151
+ expect(commands[0].name).toBe('test-prompt');
152
+ expect(commands[0].description).toBe('A test prompt.');
153
+ expect(commands[0].kind).toBe(CommandKind.MCP_PROMPT);
154
+ });
155
+ it('should handle prompt invocation successfully', async () => {
156
+ const loader = new McpPromptLoader(mockConfigWithPrompts);
157
+ const commands = await loader.loadCommands(new AbortController().signal);
158
+ const action = commands[0].action;
159
+ const context = {};
160
+ const result = await action(context, 'test-name 123 tiger');
161
+ expect(mockPrompt.invoke).toHaveBeenCalledWith({
162
+ name: 'test-name',
163
+ age: '123',
164
+ species: 'tiger',
165
+ });
166
+ expect(result).toEqual({
167
+ type: 'submit_prompt',
168
+ content: JSON.stringify('Hello, world!'),
169
+ });
170
+ });
171
+ it('should return an error for missing required arguments', async () => {
172
+ const loader = new McpPromptLoader(mockConfigWithPrompts);
173
+ const commands = await loader.loadCommands(new AbortController().signal);
174
+ const action = commands[0].action;
175
+ const context = {};
176
+ const result = await action(context, 'test-name');
177
+ expect(result).toEqual({
178
+ type: 'message',
179
+ messageType: 'error',
180
+ content: 'Missing required argument(s): --age, --species',
181
+ });
182
+ });
183
+ it('should return an error message if prompt invocation fails', async () => {
184
+ vi.spyOn(mockPrompt, 'invoke').mockRejectedValue(new Error('Invocation failed!'));
185
+ const loader = new McpPromptLoader(mockConfigWithPrompts);
186
+ const commands = await loader.loadCommands(new AbortController().signal);
187
+ const action = commands[0].action;
188
+ const context = {};
189
+ const result = await action(context, 'test-name 123 tiger');
190
+ expect(result).toEqual({
191
+ type: 'message',
192
+ messageType: 'error',
193
+ content: 'Error: Invocation failed!',
194
+ });
195
+ });
196
+ it('should return an empty array if config is not available', async () => {
197
+ const loader = new McpPromptLoader(null);
198
+ const commands = await loader.loadCommands(new AbortController().signal);
199
+ expect(commands).toEqual([]);
200
+ });
201
+ describe('completion', () => {
202
+ it('should suggest no arguments when using positional arguments', async () => {
203
+ const loader = new McpPromptLoader(mockConfigWithPrompts);
204
+ const commands = await loader.loadCommands(new AbortController().signal);
205
+ const completion = commands[0].completion;
206
+ const context = {};
207
+ const suggestions = await completion(context, 'test-name 6 tiger');
208
+ expect(suggestions).toEqual([]);
209
+ });
210
+ it('should suggest all arguments when none are present', async () => {
211
+ const loader = new McpPromptLoader(mockConfigWithPrompts);
212
+ const commands = await loader.loadCommands(new AbortController().signal);
213
+ const completion = commands[0].completion;
214
+ const context = {
215
+ invocation: {
216
+ raw: '/find ',
217
+ name: 'find',
218
+ args: '',
219
+ },
220
+ };
221
+ const suggestions = await completion(context, '');
222
+ expect(suggestions).toEqual([
223
+ '--name="',
224
+ '--age="',
225
+ '--species="',
226
+ '--enclosure="',
227
+ '--trail="',
228
+ ]);
229
+ });
230
+ it('should suggest remaining arguments when some are present', async () => {
231
+ const loader = new McpPromptLoader(mockConfigWithPrompts);
232
+ const commands = await loader.loadCommands(new AbortController().signal);
233
+ const completion = commands[0].completion;
234
+ const context = {
235
+ invocation: {
236
+ raw: '/find --name="test-name" --age="6" ',
237
+ name: 'find',
238
+ args: '--name="test-name" --age="6"',
239
+ },
240
+ };
241
+ const suggestions = await completion(context, '');
242
+ expect(suggestions).toEqual([
243
+ '--species="',
244
+ '--enclosure="',
245
+ '--trail="',
246
+ ]);
247
+ });
248
+ it('should suggest no arguments when all are present', async () => {
249
+ const loader = new McpPromptLoader(mockConfigWithPrompts);
250
+ const commands = await loader.loadCommands(new AbortController().signal);
251
+ const completion = commands[0].completion;
252
+ const context = {};
253
+ const suggestions = await completion(context, '--name="test-name" --age="6" --species="tiger" --enclosure="Tiger Den" --trail="Jungle"');
254
+ expect(suggestions).toEqual([]);
255
+ });
256
+ it('should suggest nothing for prompts with no arguments', async () => {
257
+ // Temporarily override the mock to return a prompt with no args
258
+ vi.spyOn(cliCore, 'getMCPServerPrompts').mockReturnValue([
259
+ { ...mockPrompt, arguments: [] },
260
+ ]);
261
+ const loader = new McpPromptLoader(mockConfigWithPrompts);
262
+ const commands = await loader.loadCommands(new AbortController().signal);
263
+ const completion = commands[0].completion;
264
+ const context = {};
265
+ const suggestions = await completion(context, '');
266
+ expect(suggestions).toEqual([]);
267
+ });
268
+ it('should suggest arguments matching a partial argument', async () => {
269
+ const loader = new McpPromptLoader(mockConfigWithPrompts);
270
+ const commands = await loader.loadCommands(new AbortController().signal);
271
+ const completion = commands[0].completion;
272
+ const context = {
273
+ invocation: {
274
+ raw: '/find --s',
275
+ name: 'find',
276
+ args: '--s',
277
+ },
278
+ };
279
+ const suggestions = await completion(context, '--s');
280
+ expect(suggestions).toEqual(['--species="']);
281
+ });
282
+ it('should suggest arguments even when a partial argument is parsed as a value', async () => {
283
+ const loader = new McpPromptLoader(mockConfigWithPrompts);
284
+ const commands = await loader.loadCommands(new AbortController().signal);
285
+ const completion = commands[0].completion;
286
+ const context = {
287
+ invocation: {
288
+ raw: '/find --name="test" --a',
289
+ name: 'find',
290
+ args: '--name="test" --a',
291
+ },
292
+ };
293
+ const suggestions = await completion(context, '--a');
294
+ expect(suggestions).toEqual(['--age="']);
295
+ });
296
+ it('should auto-close the quote for a named argument value', async () => {
297
+ const loader = new McpPromptLoader(mockConfigWithPrompts);
298
+ const commands = await loader.loadCommands(new AbortController().signal);
299
+ const completion = commands[0].completion;
300
+ const context = {
301
+ invocation: {
302
+ raw: '/find --name="test',
303
+ name: 'find',
304
+ args: '--name="test',
305
+ },
306
+ };
307
+ const suggestions = await completion(context, '--name="test');
308
+ expect(suggestions).toEqual(['--name="test"']);
309
+ });
310
+ it('should auto-close the quote for an empty named argument value', async () => {
311
+ const loader = new McpPromptLoader(mockConfigWithPrompts);
312
+ const commands = await loader.loadCommands(new AbortController().signal);
313
+ const completion = commands[0].completion;
314
+ const context = {
315
+ invocation: {
316
+ raw: '/find --name="',
317
+ name: 'find',
318
+ args: '--name="',
319
+ },
320
+ };
321
+ const suggestions = await completion(context, '--name="');
322
+ expect(suggestions).toEqual(['--name=""']);
323
+ });
324
+ it('should not add a quote if already present', async () => {
325
+ const loader = new McpPromptLoader(mockConfigWithPrompts);
326
+ const commands = await loader.loadCommands(new AbortController().signal);
327
+ const completion = commands[0].completion;
328
+ const context = {
329
+ invocation: {
330
+ raw: '/find --name="test"',
331
+ name: 'find',
332
+ args: '--name="test"',
333
+ },
334
+ };
335
+ const suggestions = await completion(context, '--name="test"');
336
+ expect(suggestions).toEqual([]);
337
+ });
338
+ });
339
+ });
113
340
  });
114
341
  //# sourceMappingURL=McpPromptLoader.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"McpPromptLoader.test.js","sourceRoot":"","sources":["../../../src/services/McpPromptLoader.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,MAAM,UAAU,GAAG,EAAY,CAAC;IAEhC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAqB;gBACnC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;aACjC,CAAC;YACF,MAAM,QAAQ,GAAG,aAAa,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAqB;gBACnC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;aACjC,CAAC;YACF,MAAM,QAAQ,GAAG,mBAAmB,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;YACxE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAqB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACxE,MAAM,QAAQ,GAAG,aAAa,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAqB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACxE,MAAM,QAAQ,GAAG,qBAAqB,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAqB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACxE,MAAM,QAAQ,GAAG,kBAAkB,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAqB;gBACnC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;gBACjC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;aAChC,CAAC;YACF,MAAM,QAAQ,GAAG,4BAA4B,CAAC;YAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAqB;gBACnC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;aAClC,CAAC;YACF,MAAM,QAAQ,GAAG,4BAA4B,CAAC;YAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAqB;gBACnC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;gBACjC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;aACjC,CAAC;YACF,MAAM,QAAQ,GAAG,uBAAuB,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAqB;gBACnC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;aACjC,CAAC;YACF,MAAM,QAAQ,GAAG,gBAAgB,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAqB;gBACnC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAClC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAClC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;aACjC,CAAC;YACF,MAAM,QAAQ,GACZ,8EAA8E,CAAC;YACjF,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,kBAAkB;aACzB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"McpPromptLoader.test.js","sourceRoot":"","sources":["../../../src/services/McpPromptLoader.test.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  import { ApprovalMode, checkCommandPermissions, escapeShellArg, getShellConfiguration, ShellExecutionService, flatMapTextParts, } from '@google/gemini-cli-core';
7
7
  import { SHELL_INJECTION_TRIGGER, SHORTHAND_ARGS_PLACEHOLDER, } from './types.js';
8
8
  import { extractInjections } from './injectionParser.js';
9
+ import { themeManager } from '../../ui/themes/theme-manager.js';
9
10
  export class ConfirmationRequiredError extends Error {
10
11
  commandsToConfirm;
11
12
  constructor(message, commandsToConfirm) {
@@ -90,7 +91,13 @@ export class ShellProcessor {
90
91
  processedPrompt += segment.replaceAll(SHORTHAND_ARGS_PLACEHOLDER, userArgsRaw);
91
92
  // Execute the resolved command (which already has ESCAPED input).
92
93
  if (injection.resolvedCommand) {
93
- const { result } = await ShellExecutionService.execute(injection.resolvedCommand, config.getTargetDir(), () => { }, new AbortController().signal, config.getShouldUseNodePtyShell());
94
+ const activeTheme = themeManager.getActiveTheme();
95
+ const shellExecutionConfig = {
96
+ ...config.getShellExecutionConfig(),
97
+ defaultFg: activeTheme.colors.Foreground,
98
+ defaultBg: activeTheme.colors.Background,
99
+ };
100
+ const { result } = await ShellExecutionService.execute(injection.resolvedCommand, config.getTargetDir(), () => { }, new AbortController().signal, config.getShouldUseNodePtyShell(), shellExecutionConfig);
94
101
  const executionResult = await result;
95
102
  // Handle Spawn Errors
96
103
  if (executionResult.error && !executionResult.aborted) {
@@ -1 +1 @@
1
- {"version":3,"file":"shellProcessor.js","sourceRoot":"","sources":["../../../../src/services/prompt-processors/shellProcessor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EACL,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAkB,MAAM,sBAAsB,CAAC;AAEzE,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAGzC;IAFT,YACE,OAAe,EACR,iBAA2B;QAElC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFR,sBAAiB,GAAjB,iBAAiB,CAAU;QAGlC,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAWD;;;;;;;;;GASG;AACH,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,WAAmB;QAAnB,gBAAW,GAAX,WAAW,CAAQ;IAAG,CAAC;IAEpD,KAAK,CAAC,OAAO,CACX,MAA6B,EAC7B,OAAuB;QAEvB,OAAO,gBAAgB,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CACvC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAClC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,MAAc,EACd,OAAuB;QAEvB,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC;QAEnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC9C,OAAO;gBACL,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,0BAA0B,EAAE,WAAW,CAAC,EAAE;aACrE,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,mFAAmF,IAAI,CAAC,WAAW,cAAc,CAClH,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;QAElD,MAAM,UAAU,GAAG,iBAAiB,CAClC,MAAM,EACN,uBAAuB,EACvB,IAAI,CAAC,WAAW,CACjB,CAAC;QAEF,gFAAgF;QAChF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,0BAA0B,EAAE,WAAW,CAAC,EAAE;aACrE,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,GAAG,qBAAqB,EAAE,CAAC;QAC1C,MAAM,eAAe,GAAG,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAE3D,MAAM,kBAAkB,GAA6B,UAAU,CAAC,GAAG,CACjE,CAAC,SAAS,EAAE,EAAE;YACZ,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YAElC,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBACnB,OAAO,EAAE,GAAG,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC;YACtD,CAAC;YAED,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CACxC,0BAA0B,EAC1B,eAAe,CAChB,CAAC;YACF,OAAO,EAAE,GAAG,SAAS,EAAE,eAAe,EAAE,CAAC;QAC3C,CAAC,CACF,CAAC;QAEF,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC5C,KAAK,MAAM,SAAS,IAAI,kBAAkB,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,eAAe,CAAC;YAE1C,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,uDAAuD;YACvD,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,GACjE,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC;YAElE,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,WAAW,qCAAqC,OAAO,cAAc,WAAW,IAAI,2BAA2B,EAAE,CAC1H,CAAC;gBACJ,CAAC;gBAED,4DAA4D;gBAC5D,IAAI,MAAM,CAAC,eAAe,EAAE,KAAK,YAAY,CAAC,IAAI,EAAE,CAAC;oBACnD,kBAAkB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,yBAAyB,CACjC,qCAAqC,EACrC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAC9B,CAAC;QACJ,CAAC;QAED,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,MAAM,SAAS,IAAI,kBAAkB,EAAE,CAAC;YAC3C,sFAAsF;YACtF,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;YAClE,eAAe,IAAI,OAAO,CAAC,UAAU,CACnC,0BAA0B,EAC1B,WAAW,CACZ,CAAC;YAEF,kEAAkE;YAClE,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;gBAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,qBAAqB,CAAC,OAAO,CACpD,SAAS,CAAC,eAAe,EACzB,MAAM,CAAC,YAAY,EAAE,EACrB,GAAG,EAAE,GAAE,CAAC,EACR,IAAI,eAAe,EAAE,CAAC,MAAM,EAC5B,MAAM,CAAC,wBAAwB,EAAE,CAClC,CAAC;gBAEF,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC;gBAErC,sBAAsB;gBACtB,IAAI,eAAe,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;oBACtD,MAAM,IAAI,KAAK,CACb,qCAAqC,IAAI,CAAC,WAAW,MAAM,eAAe,CAAC,KAAK,CAAC,OAAO,cAAc,SAAS,CAAC,eAAe,EAAE,CAClI,CAAC;gBACJ,CAAC;gBAED,2DAA2D;gBAC3D,eAAe,IAAI,eAAe,CAAC,MAAM,CAAC;gBAE1C,0DAA0D;gBAC1D,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;oBAC5B,eAAe,IAAI,qBAAqB,SAAS,CAAC,eAAe,YAAY,CAAC;gBAChF,CAAC;qBAAM,IACL,eAAe,CAAC,QAAQ,KAAK,CAAC;oBAC9B,eAAe,CAAC,QAAQ,KAAK,IAAI,EACjC,CAAC;oBACD,eAAe,IAAI,qBAAqB,SAAS,CAAC,eAAe,sBAAsB,eAAe,CAAC,QAAQ,GAAG,CAAC;gBACrH,CAAC;qBAAM,IAAI,eAAe,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;oBAC3C,eAAe,IAAI,qBAAqB,SAAS,CAAC,eAAe,0BAA0B,eAAe,CAAC,MAAM,GAAG,CAAC;gBACvH,CAAC;YACH,CAAC;YAED,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC;QACjC,CAAC;QAED,4FAA4F;QAC5F,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACjD,eAAe,IAAI,YAAY,CAAC,UAAU,CACxC,0BAA0B,EAC1B,WAAW,CACZ,CAAC;QAEF,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IACrC,CAAC;CACF"}
1
+ {"version":3,"file":"shellProcessor.js","sourceRoot":"","sources":["../../../../src/services/prompt-processors/shellProcessor.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
4
4
  * Copyright 2025 Google LLC
5
5
  * SPDX-License-Identifier: Apache-2.0
6
6
  */
7
- import { useMemo, useState, useCallback, useEffect, useRef } from 'react';
7
+ import { useMemo, useState, useCallback, useEffect, useRef, useLayoutEffect, } from 'react';
8
8
  import { measureElement } from 'ink';
9
9
  import { App } from './App.js';
10
10
  import { AppContext } from './contexts/AppContext.js';
@@ -13,7 +13,7 @@ import { UIActionsContext, } from './contexts/UIActionsContext.js';
13
13
  import { ConfigContext } from './contexts/ConfigContext.js';
14
14
  import { ToolCallStatus, AuthState, } from './types.js';
15
15
  import { MessageType, StreamingState } from './types.js';
16
- import { DEFAULT_GEMINI_FLASH_MODEL, IdeClient, ideContext, getErrorMessage, getAllGeminiMdFilenames, AuthType, clearCachedCredentialFile, } from '@google/gemini-cli-core';
16
+ import { DEFAULT_GEMINI_FLASH_MODEL, IdeClient, ideContextStore, getErrorMessage, getAllGeminiMdFilenames, AuthType, clearCachedCredentialFile, ShellExecutionService, } from '@google/gemini-cli-core';
17
17
  import { validateAuthMethod } from '../config/auth.js';
18
18
  import { loadHierarchicalGeminiMemory } from '../config/config.js';
19
19
  import process from 'node:process';
@@ -54,6 +54,7 @@ import { useAutoAcceptIndicator } from './hooks/useAutoAcceptIndicator.js';
54
54
  import { useWorkspaceMigration } from './hooks/useWorkspaceMigration.js';
55
55
  import { useSessionStats } from './contexts/SessionContext.js';
56
56
  import { useGitBranchName } from './hooks/useGitBranchName.js';
57
+ import { checkForAllExtensionUpdates } from '../config/extension.js';
57
58
  const CTRL_EXIT_PROMPT_DURATION_MS = 1000;
58
59
  function isToolExecuting(pendingHistoryItems) {
59
60
  return pendingHistoryItems.some((item) => {
@@ -63,6 +64,16 @@ function isToolExecuting(pendingHistoryItems) {
63
64
  return false;
64
65
  });
65
66
  }
67
+ /**
68
+ * The fraction of the terminal width to allocate to the shell.
69
+ * This provides horizontal padding.
70
+ */
71
+ const SHELL_WIDTH_FRACTION = 0.89;
72
+ /**
73
+ * The number of lines to subtract from the available terminal height
74
+ * for the shell. This provides vertical padding and space for other UI elements.
75
+ */
76
+ const SHELL_HEIGHT_PADDING = 10;
66
77
  export const AppContainer = (props) => {
67
78
  const { settings, config, initializationResult } = props;
68
79
  const historyManager = useHistory();
@@ -72,12 +83,14 @@ export const AppContainer = (props) => {
72
83
  const [showPrivacyNotice, setShowPrivacyNotice] = useState(false);
73
84
  const [themeError, setThemeError] = useState(initializationResult.themeError);
74
85
  const [isProcessing, setIsProcessing] = useState(false);
86
+ const [shellFocused, setShellFocused] = useState(false);
75
87
  const [geminiMdFileCount, setGeminiMdFileCount] = useState(initializationResult.geminiMdFileCount);
76
88
  const [shellModeActive, setShellModeActive] = useState(false);
77
89
  const [modelSwitchedFromQuotaError, setModelSwitchedFromQuotaError] = useState(false);
78
90
  const [historyRemountKey, setHistoryRemountKey] = useState(0);
79
91
  const [updateInfo, setUpdateInfo] = useState(null);
80
92
  const [isTrustedFolder, setIsTrustedFolder] = useState(config.isTrustedFolder());
93
+ const [extensionsUpdateState, setExtensionsUpdateState] = useState(new Map());
81
94
  // Helper to determine the effective model, considering the fallback state.
82
95
  const getEffectiveModel = useCallback(() => {
83
96
  if (config.isInFallbackMode()) {
@@ -88,11 +101,6 @@ export const AppContainer = (props) => {
88
101
  const [currentModel, setCurrentModel] = useState(getEffectiveModel());
89
102
  const [userTier, setUserTier] = useState(undefined);
90
103
  const [isConfigInitialized, setConfigInitialized] = useState(false);
91
- // Auto-accept indicator
92
- const showAutoAcceptIndicator = useAutoAcceptIndicator({
93
- config,
94
- addItem: historyManager.addItem,
95
- });
96
104
  const logger = useLogger(config.storage);
97
105
  const [userMessages, setUserMessages] = useState([]);
98
106
  // Terminal and layout hooks
@@ -141,7 +149,7 @@ export const AppContainer = (props) => {
141
149
  }, [handleNewMessage, config]);
142
150
  const widthFraction = 0.9;
143
151
  const inputWidth = Math.max(20, Math.floor(terminalWidth * widthFraction) - 3);
144
- const suggestionsWidth = Math.max(20, Math.floor(terminalWidth * 0.8));
152
+ const suggestionsWidth = Math.max(20, Math.floor(terminalWidth * 1.0));
145
153
  const mainAreaWidth = Math.floor(terminalWidth * 0.9);
146
154
  const staticAreaMaxItemHeight = Math.max(terminalHeight * 4, 100);
147
155
  const isValidPath = useCallback((filePath) => {
@@ -276,6 +284,7 @@ Logging in with Google... Please restart Gemini CLI to continue.
276
284
  },
277
285
  setDebugMessage,
278
286
  toggleCorgiMode: () => setCorgiMode((prev) => !prev),
287
+ setExtensionsUpdateState,
279
288
  }), [
280
289
  setAuthState,
281
290
  openThemeDialog,
@@ -285,8 +294,9 @@ Logging in with Google... Please restart Gemini CLI to continue.
285
294
  setDebugMessage,
286
295
  setShowPrivacyNotice,
287
296
  setCorgiMode,
297
+ setExtensionsUpdateState,
288
298
  ]);
289
- const { handleSlashCommand, slashCommands, pendingHistoryItems: pendingSlashCommandHistoryItems, commandContext, shellConfirmationRequest, confirmationRequest, } = useSlashCommandProcessor(config, settings, historyManager.addItem, historyManager.clearItems, historyManager.loadHistory, refreshStatic, toggleVimEnabled, setIsProcessing, setGeminiMdFileCount, slashCommandActions, isConfigInitialized);
299
+ const { handleSlashCommand, slashCommands, pendingHistoryItems: pendingSlashCommandHistoryItems, commandContext, shellConfirmationRequest, confirmationRequest, } = useSlashCommandProcessor(config, settings, historyManager.addItem, historyManager.clearItems, historyManager.loadHistory, refreshStatic, toggleVimEnabled, setIsProcessing, setGeminiMdFileCount, slashCommandActions, extensionsUpdateState, isConfigInitialized);
290
300
  const performMemoryRefresh = useCallback(async () => {
291
301
  historyManager.addItem({
292
302
  type: MessageType.INFO,
@@ -320,7 +330,13 @@ Logging in with Google... Please restart Gemini CLI to continue.
320
330
  }
321
331
  }, [config, historyManager, settings.merged]);
322
332
  const cancelHandlerRef = useRef(() => { });
323
- const { streamingState, submitQuery, initError, pendingHistoryItems: pendingGeminiHistoryItems, thought, cancelOngoingRequest, } = useGeminiStream(config.getGeminiClient(), historyManager.history, historyManager.addItem, config, settings, setDebugMessage, handleSlashCommand, shellModeActive, () => settings.merged.general?.preferredEditor, onAuthError, performMemoryRefresh, modelSwitchedFromQuotaError, setModelSwitchedFromQuotaError, refreshStatic, () => cancelHandlerRef.current());
333
+ const { streamingState, submitQuery, initError, pendingHistoryItems: pendingGeminiHistoryItems, thought, cancelOngoingRequest, handleApprovalModeChange, activePtyId, loopDetectionConfirmationRequest, } = useGeminiStream(config.getGeminiClient(), historyManager.history, historyManager.addItem, config, settings, setDebugMessage, handleSlashCommand, shellModeActive, () => settings.merged.general?.preferredEditor, onAuthError, performMemoryRefresh, modelSwitchedFromQuotaError, setModelSwitchedFromQuotaError, refreshStatic, () => cancelHandlerRef.current(), setShellFocused, terminalWidth, terminalHeight, shellFocused);
334
+ // Auto-accept indicator
335
+ const showAutoAcceptIndicator = useAutoAcceptIndicator({
336
+ config,
337
+ addItem: historyManager.addItem,
338
+ onApprovalModeChange: handleApprovalModeChange,
339
+ });
324
340
  const { messageQueue, addMessage, clearQueue, getQueuedMessagesText } = useMessageQueue({
325
341
  isConfigInitialized,
326
342
  streamingState,
@@ -376,14 +392,23 @@ Logging in with Google... Please restart Gemini CLI to continue.
376
392
  (streamingState === StreamingState.Idle ||
377
393
  streamingState === StreamingState.Responding) &&
378
394
  !proQuotaRequest;
379
- // Compute available terminal height based on controls measurement
380
- const availableTerminalHeight = useMemo(() => {
395
+ const [controlsHeight, setControlsHeight] = useState(0);
396
+ useLayoutEffect(() => {
381
397
  if (mainControlsRef.current) {
382
398
  const fullFooterMeasurement = measureElement(mainControlsRef.current);
383
- return terminalHeight - fullFooterMeasurement.height - staticExtraHeight;
399
+ if (fullFooterMeasurement.height > 0) {
400
+ setControlsHeight(fullFooterMeasurement.height);
401
+ }
384
402
  }
385
- return terminalHeight - staticExtraHeight;
386
- }, [terminalHeight]);
403
+ }, [buffer, terminalWidth, terminalHeight]);
404
+ // Compute available terminal height based on controls measurement
405
+ const availableTerminalHeight = Math.max(0, terminalHeight - controlsHeight - staticExtraHeight - 2);
406
+ config.setShellExecutionConfig({
407
+ terminalWidth: Math.floor(terminalWidth * SHELL_WIDTH_FRACTION),
408
+ terminalHeight: Math.max(Math.floor(availableTerminalHeight - SHELL_HEIGHT_PADDING), 1),
409
+ pager: settings.merged.tools?.shell?.pager,
410
+ showColor: settings.merged.tools?.shell?.showColor,
411
+ });
387
412
  const isFocused = useFocus();
388
413
  useBracketedPaste();
389
414
  // Context file names computation
@@ -399,6 +424,11 @@ Logging in with Google... Please restart Gemini CLI to continue.
399
424
  const initialPrompt = useMemo(() => config.getQuestion(), [config]);
400
425
  const initialPromptSubmitted = useRef(false);
401
426
  const geminiClient = config.getGeminiClient();
427
+ useEffect(() => {
428
+ if (activePtyId) {
429
+ ShellExecutionService.resizePty(activePtyId, Math.floor(terminalWidth * SHELL_WIDTH_FRACTION), Math.max(Math.floor(availableTerminalHeight - SHELL_HEIGHT_PADDING), 1));
430
+ }
431
+ }, [terminalWidth, availableTerminalHeight, activePtyId]);
402
432
  useEffect(() => {
403
433
  if (initialPrompt &&
404
434
  isConfigInitialized &&
@@ -469,8 +499,8 @@ Logging in with Google... Please restart Gemini CLI to continue.
469
499
  };
470
500
  }, [terminalWidth, refreshStatic]);
471
501
  useEffect(() => {
472
- const unsubscribe = ideContext.subscribeToIdeContext(setIdeContextState);
473
- setIdeContextState(ideContext.getIdeContext());
502
+ const unsubscribe = ideContextStore.subscribe(setIdeContextState);
503
+ setIdeContextState(ideContextStore.get());
474
504
  return unsubscribe;
475
505
  }, []);
476
506
  useEffect(() => {
@@ -572,6 +602,11 @@ Logging in with Google... Please restart Gemini CLI to continue.
572
602
  !enteringConstrainHeightMode) {
573
603
  setConstrainHeight(false);
574
604
  }
605
+ else if (keyMatchers[Command.TOGGLE_SHELL_INPUT_FOCUS](key)) {
606
+ if (activePtyId || shellFocused) {
607
+ setShellFocused((prev) => !prev);
608
+ }
609
+ }
575
610
  }, [
576
611
  constrainHeight,
577
612
  setConstrainHeight,
@@ -596,6 +631,8 @@ Logging in with Google... Please restart Gemini CLI to continue.
596
631
  isSettingsDialogOpen,
597
632
  isFolderTrustDialogOpen,
598
633
  showPrivacyNotice,
634
+ activePtyId,
635
+ shellFocused,
599
636
  settings.merged.general?.debugKeystrokeLogging,
600
637
  ]);
601
638
  useKeypress(handleGlobalKeypress, { isActive: true });
@@ -615,31 +652,19 @@ Logging in with Google... Please restart Gemini CLI to continue.
615
652
  .filter((msg) => msg.type === 'error')
616
653
  .reduce((total, msg) => total + msg.count, 0), [filteredConsoleMessages]);
617
654
  const nightly = props.version.includes('nightly');
618
- const dialogsVisible = useMemo(() => showWorkspaceMigrationDialog ||
655
+ const dialogsVisible = showWorkspaceMigrationDialog ||
619
656
  shouldShowIdePrompt ||
620
657
  isFolderTrustDialogOpen ||
621
658
  !!shellConfirmationRequest ||
622
659
  !!confirmationRequest ||
660
+ !!loopDetectionConfirmationRequest ||
623
661
  isThemeDialogOpen ||
624
662
  isSettingsDialogOpen ||
625
663
  isAuthenticating ||
626
664
  isAuthDialogOpen ||
627
665
  isEditorDialogOpen ||
628
666
  showPrivacyNotice ||
629
- !!proQuotaRequest, [
630
- showWorkspaceMigrationDialog,
631
- shouldShowIdePrompt,
632
- isFolderTrustDialogOpen,
633
- shellConfirmationRequest,
634
- confirmationRequest,
635
- isThemeDialogOpen,
636
- isSettingsDialogOpen,
637
- isAuthenticating,
638
- isAuthDialogOpen,
639
- isEditorDialogOpen,
640
- showPrivacyNotice,
641
- proQuotaRequest,
642
- ]);
667
+ !!proQuotaRequest;
643
668
  const pendingHistoryItems = useMemo(() => [...pendingSlashCommandHistoryItems, ...pendingGeminiHistoryItems], [pendingSlashCommandHistoryItems, pendingGeminiHistoryItems]);
644
669
  const uiState = useMemo(() => ({
645
670
  history: historyManager.history,
@@ -661,6 +686,7 @@ Logging in with Google... Please restart Gemini CLI to continue.
661
686
  commandContext,
662
687
  shellConfirmationRequest,
663
688
  confirmationRequest,
689
+ loopDetectionConfirmationRequest,
664
690
  geminiMdFileCount,
665
691
  streamingState,
666
692
  initError,
@@ -712,6 +738,9 @@ Logging in with Google... Please restart Gemini CLI to continue.
712
738
  updateInfo,
713
739
  showIdeRestartPrompt,
714
740
  isRestarting,
741
+ extensionsUpdateState,
742
+ activePtyId,
743
+ shellFocused,
715
744
  }), [
716
745
  historyManager.history,
717
746
  isThemeDialogOpen,
@@ -732,6 +761,7 @@ Logging in with Google... Please restart Gemini CLI to continue.
732
761
  commandContext,
733
762
  shellConfirmationRequest,
734
763
  confirmationRequest,
764
+ loopDetectionConfirmationRequest,
735
765
  geminiMdFileCount,
736
766
  streamingState,
737
767
  initError,
@@ -783,6 +813,9 @@ Logging in with Google... Please restart Gemini CLI to continue.
783
813
  showIdeRestartPrompt,
784
814
  isRestarting,
785
815
  currentModel,
816
+ extensionsUpdateState,
817
+ activePtyId,
818
+ shellFocused,
786
819
  ]);
787
820
  const uiActions = useMemo(() => ({
788
821
  handleThemeSelect,
@@ -828,6 +861,10 @@ Logging in with Google... Please restart Gemini CLI to continue.
828
861
  onWorkspaceMigrationDialogClose,
829
862
  handleProQuotaChoice,
830
863
  ]);
864
+ const extensions = config.getExtensions();
865
+ useEffect(() => {
866
+ checkForAllExtensionUpdates(extensions, setExtensionsUpdateState);
867
+ }, [extensions, setExtensionsUpdateState]);
831
868
  return (_jsx(UIStateContext.Provider, { value: uiState, children: _jsx(UIActionsContext.Provider, { value: uiActions, children: _jsx(ConfigContext.Provider, { value: config, children: _jsx(AppContext.Provider, { value: {
832
869
  version: props.version,
833
870
  startupWarnings: props.startupWarnings || [],