@google/gemini-cli 0.10.0-preview.1 → 0.11.0-nightly.20251020.a96f0659

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 (417) hide show
  1. package/README.md +9 -0
  2. package/dist/google-gemini-cli-0.11.0-nightly.20251015.203bad7c.tgz +0 -0
  3. package/dist/package.json +2 -2
  4. package/dist/src/commands/extensions/examples/mcp-server/example.d.ts +6 -0
  5. package/dist/src/commands/extensions/examples/mcp-server/example.js +46 -0
  6. package/dist/src/commands/extensions/examples/mcp-server/example.js.map +1 -0
  7. package/dist/src/commands/extensions/install.d.ts +1 -0
  8. package/dist/src/commands/extensions/install.js +15 -2
  9. package/dist/src/commands/extensions/install.js.map +1 -1
  10. package/dist/src/commands/extensions/list.js +3 -2
  11. package/dist/src/commands/extensions/list.js.map +1 -1
  12. package/dist/src/commands/extensions/update.js +2 -2
  13. package/dist/src/commands/extensions/update.js.map +1 -1
  14. package/dist/src/commands/mcp/add.test.d.ts +6 -0
  15. package/dist/src/commands/mcp/add.test.js +234 -0
  16. package/dist/src/commands/mcp/add.test.js.map +1 -0
  17. package/dist/src/commands/mcp/list.js +5 -3
  18. package/dist/src/commands/mcp/list.js.map +1 -1
  19. package/dist/src/commands/mcp/list.test.d.ts +6 -0
  20. package/dist/src/commands/mcp/list.test.js +117 -0
  21. package/dist/src/commands/mcp/list.test.js.map +1 -0
  22. package/dist/src/commands/mcp/remove.test.d.ts +6 -0
  23. package/dist/src/commands/mcp/remove.test.js +175 -0
  24. package/dist/src/commands/mcp/remove.test.js.map +1 -0
  25. package/dist/src/commands/mcp.test.d.ts +6 -0
  26. package/dist/src/commands/mcp.test.js +62 -0
  27. package/dist/src/commands/mcp.test.js.map +1 -0
  28. package/dist/src/config/auth.js +3 -1
  29. package/dist/src/config/auth.js.map +1 -1
  30. package/dist/src/config/auth.test.js +3 -1
  31. package/dist/src/config/auth.test.js.map +1 -1
  32. package/dist/src/config/config.d.ts +0 -11
  33. package/dist/src/config/config.integration.test.d.ts +6 -0
  34. package/dist/src/config/config.integration.test.js +351 -0
  35. package/dist/src/config/config.integration.test.js.map +1 -0
  36. package/dist/src/config/config.js +19 -74
  37. package/dist/src/config/config.js.map +1 -1
  38. package/dist/src/config/config.test.d.ts +6 -0
  39. package/dist/src/config/config.test.js +2001 -0
  40. package/dist/src/config/config.test.js.map +1 -0
  41. package/dist/src/config/extension.d.ts +1 -4
  42. package/dist/src/config/extension.js +64 -69
  43. package/dist/src/config/extension.js.map +1 -1
  44. package/dist/src/config/extension.test.d.ts +6 -0
  45. package/dist/src/config/extension.test.js +1176 -0
  46. package/dist/src/config/extension.test.js.map +1 -0
  47. package/dist/src/config/extensions/extensionEnablement.d.ts +1 -1
  48. package/dist/src/config/extensions/extensionEnablement.js +4 -3
  49. package/dist/src/config/extensions/extensionEnablement.js.map +1 -1
  50. package/dist/src/config/extensions/extensionEnablement.test.js +21 -18
  51. package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -1
  52. package/dist/src/config/extensions/github.d.ts +15 -7
  53. package/dist/src/config/extensions/github.js +95 -21
  54. package/dist/src/config/extensions/github.js.map +1 -1
  55. package/dist/src/config/extensions/github.test.js +14 -12
  56. package/dist/src/config/extensions/github.test.js.map +1 -1
  57. package/dist/src/config/extensions/update.test.js +9 -9
  58. package/dist/src/config/extensions/update.test.js.map +1 -1
  59. package/dist/src/config/keyBindings.d.ts +2 -1
  60. package/dist/src/config/keyBindings.js +4 -2
  61. package/dist/src/config/keyBindings.js.map +1 -1
  62. package/dist/src/config/policy.js +13 -14
  63. package/dist/src/config/policy.js.map +1 -1
  64. package/dist/src/config/policy.test.js +3 -3
  65. package/dist/src/config/policy.test.js.map +1 -1
  66. package/dist/src/config/sandboxConfig.d.ts +0 -1
  67. package/dist/src/config/sandboxConfig.js +1 -3
  68. package/dist/src/config/sandboxConfig.js.map +1 -1
  69. package/dist/src/config/settings.test.d.ts +6 -0
  70. package/dist/src/config/settings.test.js +1937 -0
  71. package/dist/src/config/settings.test.js.map +1 -0
  72. package/dist/src/gemini.js +12 -10
  73. package/dist/src/gemini.js.map +1 -1
  74. package/dist/src/gemini.test.js +34 -11
  75. package/dist/src/gemini.test.js.map +1 -1
  76. package/dist/src/generated/git-commit.d.ts +2 -2
  77. package/dist/src/generated/git-commit.js +2 -2
  78. package/dist/src/generated/git-commit.js.map +1 -1
  79. package/dist/src/nonInteractiveCli.js +91 -3
  80. package/dist/src/nonInteractiveCli.js.map +1 -1
  81. package/dist/src/nonInteractiveCli.test.d.ts +6 -0
  82. package/dist/src/nonInteractiveCli.test.js +711 -0
  83. package/dist/src/nonInteractiveCli.test.js.map +1 -0
  84. package/dist/src/services/FileCommandLoader.test.d.ts +6 -0
  85. package/dist/src/services/FileCommandLoader.test.js +971 -0
  86. package/dist/src/services/FileCommandLoader.test.js.map +1 -0
  87. package/dist/src/services/prompt-processors/argumentProcessor.test.d.ts +6 -0
  88. package/dist/src/services/prompt-processors/argumentProcessor.test.js +40 -0
  89. package/dist/src/services/prompt-processors/argumentProcessor.test.js.map +1 -0
  90. package/dist/src/services/prompt-processors/shellProcessor.test.d.ts +6 -0
  91. package/dist/src/services/prompt-processors/shellProcessor.test.js +482 -0
  92. package/dist/src/services/prompt-processors/shellProcessor.test.js.map +1 -0
  93. package/dist/src/test-utils/render.d.ts +2 -1
  94. package/dist/src/test-utils/render.js +5 -2
  95. package/dist/src/test-utils/render.js.map +1 -1
  96. package/dist/src/ui/App.test.d.ts +6 -0
  97. package/dist/src/ui/App.test.js +110 -0
  98. package/dist/src/ui/App.test.js.map +1 -0
  99. package/dist/src/ui/AppContainer.js +39 -26
  100. package/dist/src/ui/AppContainer.js.map +1 -1
  101. package/dist/src/ui/AppContainer.test.js +35 -9
  102. package/dist/src/ui/AppContainer.test.js.map +1 -1
  103. package/dist/src/ui/auth/AuthDialog.d.ts +1 -1
  104. package/dist/src/ui/auth/AuthDialog.js +3 -1
  105. package/dist/src/ui/auth/AuthDialog.js.map +1 -1
  106. package/dist/src/ui/auth/useAuth.d.ts +1 -1
  107. package/dist/src/ui/auth/useAuth.js +3 -1
  108. package/dist/src/ui/auth/useAuth.js.map +1 -1
  109. package/dist/src/ui/commands/aboutCommand.js +1 -1
  110. package/dist/src/ui/commands/aboutCommand.test.d.ts +6 -0
  111. package/dist/src/ui/commands/aboutCommand.test.js +130 -0
  112. package/dist/src/ui/commands/aboutCommand.test.js.map +1 -0
  113. package/dist/src/ui/commands/authCommand.js +1 -1
  114. package/dist/src/ui/commands/authCommand.test.d.ts +6 -0
  115. package/dist/src/ui/commands/authCommand.test.js +30 -0
  116. package/dist/src/ui/commands/authCommand.test.js.map +1 -0
  117. package/dist/src/ui/commands/bugCommand.js +1 -1
  118. package/dist/src/ui/commands/bugCommand.test.d.ts +6 -0
  119. package/dist/src/ui/commands/bugCommand.test.js +105 -0
  120. package/dist/src/ui/commands/bugCommand.test.js.map +1 -0
  121. package/dist/src/ui/commands/chatCommand.js +1 -1
  122. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  123. package/dist/src/ui/commands/chatCommand.test.d.ts +6 -0
  124. package/dist/src/ui/commands/chatCommand.test.js +555 -0
  125. package/dist/src/ui/commands/chatCommand.test.js.map +1 -0
  126. package/dist/src/ui/commands/clearCommand.js +1 -1
  127. package/dist/src/ui/commands/clearCommand.test.d.ts +6 -0
  128. package/dist/src/ui/commands/clearCommand.test.js +76 -0
  129. package/dist/src/ui/commands/clearCommand.test.js.map +1 -0
  130. package/dist/src/ui/commands/compressCommand.js +1 -1
  131. package/dist/src/ui/commands/compressCommand.js.map +1 -1
  132. package/dist/src/ui/commands/compressCommand.test.d.ts +6 -0
  133. package/dist/src/ui/commands/compressCommand.test.js +98 -0
  134. package/dist/src/ui/commands/compressCommand.test.js.map +1 -0
  135. package/dist/src/ui/commands/copyCommand.test.d.ts +6 -0
  136. package/dist/src/ui/commands/copyCommand.test.js +242 -0
  137. package/dist/src/ui/commands/copyCommand.test.js.map +1 -0
  138. package/dist/src/ui/commands/corgiCommand.js +1 -1
  139. package/dist/src/ui/commands/corgiCommand.js.map +1 -1
  140. package/dist/src/ui/commands/corgiCommand.test.d.ts +6 -0
  141. package/dist/src/ui/commands/corgiCommand.test.js +28 -0
  142. package/dist/src/ui/commands/corgiCommand.test.js.map +1 -0
  143. package/dist/src/ui/commands/directoryCommand.test.d.ts +6 -0
  144. package/dist/src/ui/commands/directoryCommand.test.js +145 -0
  145. package/dist/src/ui/commands/directoryCommand.test.js.map +1 -0
  146. package/dist/src/ui/commands/docsCommand.js +1 -1
  147. package/dist/src/ui/commands/docsCommand.test.d.ts +6 -0
  148. package/dist/src/ui/commands/docsCommand.test.js +72 -0
  149. package/dist/src/ui/commands/docsCommand.test.js.map +1 -0
  150. package/dist/src/ui/commands/editorCommand.js +1 -1
  151. package/dist/src/ui/commands/editorCommand.test.d.ts +6 -0
  152. package/dist/src/ui/commands/editorCommand.test.js +27 -0
  153. package/dist/src/ui/commands/editorCommand.test.js.map +1 -0
  154. package/dist/src/ui/commands/extensionsCommand.test.d.ts +6 -0
  155. package/dist/src/ui/commands/extensionsCommand.test.js +241 -0
  156. package/dist/src/ui/commands/extensionsCommand.test.js.map +1 -0
  157. package/dist/src/ui/commands/helpCommand.js +1 -1
  158. package/dist/src/ui/commands/helpCommand.test.d.ts +6 -0
  159. package/dist/src/ui/commands/helpCommand.test.js +42 -0
  160. package/dist/src/ui/commands/helpCommand.test.js.map +1 -0
  161. package/dist/src/ui/commands/ideCommand.js +6 -6
  162. package/dist/src/ui/commands/ideCommand.test.d.ts +6 -0
  163. package/dist/src/ui/commands/ideCommand.test.js +203 -0
  164. package/dist/src/ui/commands/ideCommand.test.js.map +1 -0
  165. package/dist/src/ui/commands/initCommand.js +1 -1
  166. package/dist/src/ui/commands/initCommand.js.map +1 -1
  167. package/dist/src/ui/commands/initCommand.test.d.ts +6 -0
  168. package/dist/src/ui/commands/initCommand.test.js +80 -0
  169. package/dist/src/ui/commands/initCommand.test.js.map +1 -0
  170. package/dist/src/ui/commands/mcpCommand.js +98 -88
  171. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  172. package/dist/src/ui/commands/mcpCommand.test.d.ts +6 -0
  173. package/dist/src/ui/commands/mcpCommand.test.js +148 -0
  174. package/dist/src/ui/commands/mcpCommand.test.js.map +1 -0
  175. package/dist/src/ui/commands/memoryCommand.js +5 -5
  176. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  177. package/dist/src/ui/commands/memoryCommand.test.d.ts +6 -0
  178. package/dist/src/ui/commands/memoryCommand.test.js +266 -0
  179. package/dist/src/ui/commands/memoryCommand.test.js.map +1 -0
  180. package/dist/src/ui/commands/privacyCommand.js +1 -1
  181. package/dist/src/ui/commands/privacyCommand.test.d.ts +6 -0
  182. package/dist/src/ui/commands/privacyCommand.test.js +32 -0
  183. package/dist/src/ui/commands/privacyCommand.test.js.map +1 -0
  184. package/dist/src/ui/commands/quitCommand.js +1 -1
  185. package/dist/src/ui/commands/quitCommand.test.d.ts +6 -0
  186. package/dist/src/ui/commands/quitCommand.test.js +50 -0
  187. package/dist/src/ui/commands/quitCommand.test.js.map +1 -0
  188. package/dist/src/ui/commands/restoreCommand.test.d.ts +6 -0
  189. package/dist/src/ui/commands/restoreCommand.test.js +190 -0
  190. package/dist/src/ui/commands/restoreCommand.test.js.map +1 -0
  191. package/dist/src/ui/commands/settingsCommand.test.d.ts +6 -0
  192. package/dist/src/ui/commands/settingsCommand.test.js +30 -0
  193. package/dist/src/ui/commands/settingsCommand.test.js.map +1 -0
  194. package/dist/src/ui/commands/setupGithubCommand.test.js +1 -2
  195. package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -1
  196. package/dist/src/ui/commands/statsCommand.js +3 -3
  197. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  198. package/dist/src/ui/commands/statsCommand.test.d.ts +6 -0
  199. package/dist/src/ui/commands/statsCommand.test.js +53 -0
  200. package/dist/src/ui/commands/statsCommand.test.js.map +1 -0
  201. package/dist/src/ui/commands/terminalSetupCommand.test.d.ts +6 -0
  202. package/dist/src/ui/commands/terminalSetupCommand.test.js +66 -0
  203. package/dist/src/ui/commands/terminalSetupCommand.test.js.map +1 -0
  204. package/dist/src/ui/commands/themeCommand.js +1 -1
  205. package/dist/src/ui/commands/themeCommand.test.d.ts +6 -0
  206. package/dist/src/ui/commands/themeCommand.test.js +32 -0
  207. package/dist/src/ui/commands/themeCommand.test.js.map +1 -0
  208. package/dist/src/ui/commands/toolsCommand.js +1 -1
  209. package/dist/src/ui/commands/toolsCommand.test.d.ts +6 -0
  210. package/dist/src/ui/commands/toolsCommand.test.js +100 -0
  211. package/dist/src/ui/commands/toolsCommand.test.js.map +1 -0
  212. package/dist/src/ui/commands/vimCommand.js +1 -1
  213. package/dist/src/ui/components/Composer.js +5 -3
  214. package/dist/src/ui/components/Composer.js.map +1 -1
  215. package/dist/src/ui/components/Composer.test.js +16 -1
  216. package/dist/src/ui/components/Composer.test.js.map +1 -1
  217. package/dist/src/ui/components/ContextSummaryDisplay.d.ts +0 -1
  218. package/dist/src/ui/components/ContextSummaryDisplay.js +2 -12
  219. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  220. package/dist/src/ui/components/ContextSummaryDisplay.test.d.ts +6 -0
  221. package/dist/src/ui/components/ContextSummaryDisplay.test.js +66 -0
  222. package/dist/src/ui/components/ContextSummaryDisplay.test.js.map +1 -0
  223. package/dist/src/ui/components/DialogManager.js +1 -5
  224. package/dist/src/ui/components/DialogManager.js.map +1 -1
  225. package/dist/src/ui/components/EditorSettingsDialog.js +1 -1
  226. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
  227. package/dist/src/ui/components/FolderTrustDialog.test.js +7 -3
  228. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
  229. package/dist/src/ui/components/Footer.js +1 -1
  230. package/dist/src/ui/components/Footer.js.map +1 -1
  231. package/dist/src/ui/components/Footer.test.d.ts +6 -0
  232. package/dist/src/ui/components/Footer.test.js +231 -0
  233. package/dist/src/ui/components/Footer.test.js.map +1 -0
  234. package/dist/src/ui/components/InputPrompt.d.ts +4 -0
  235. package/dist/src/ui/components/InputPrompt.js +53 -4
  236. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  237. package/dist/src/ui/components/InputPrompt.test.d.ts +6 -0
  238. package/dist/src/ui/components/InputPrompt.test.js +1716 -0
  239. package/dist/src/ui/components/InputPrompt.test.js.map +1 -0
  240. package/dist/src/ui/components/ModelStatsDisplay.test.d.ts +6 -0
  241. package/dist/src/ui/components/ModelStatsDisplay.test.js +285 -0
  242. package/dist/src/ui/components/ModelStatsDisplay.test.js.map +1 -0
  243. package/dist/src/ui/components/PermissionsModifyTrustDialog.js +22 -18
  244. package/dist/src/ui/components/PermissionsModifyTrustDialog.js.map +1 -1
  245. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +10 -2
  246. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +1 -1
  247. package/dist/src/ui/components/QueuedMessageDisplay.js +3 -3
  248. package/dist/src/ui/components/QueuedMessageDisplay.js.map +1 -1
  249. package/dist/src/ui/components/QueuedMessageDisplay.test.js +4 -0
  250. package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +1 -1
  251. package/dist/src/ui/components/RawMarkdownIndicator.d.ts +7 -0
  252. package/dist/src/ui/components/RawMarkdownIndicator.js +8 -0
  253. package/dist/src/ui/components/RawMarkdownIndicator.js.map +1 -0
  254. package/dist/src/ui/components/SessionSummaryDisplay.test.d.ts +6 -0
  255. package/dist/src/ui/components/SessionSummaryDisplay.test.js +74 -0
  256. package/dist/src/ui/components/SessionSummaryDisplay.test.js.map +1 -0
  257. package/dist/src/ui/components/SettingsDialog.js +8 -8
  258. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  259. package/dist/src/ui/components/SettingsDialog.test.js +188 -56
  260. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  261. package/dist/src/ui/components/StatsDisplay.test.d.ts +6 -0
  262. package/dist/src/ui/components/StatsDisplay.test.js +351 -0
  263. package/dist/src/ui/components/StatsDisplay.test.js.map +1 -0
  264. package/dist/src/ui/components/ThemeDialog.d.ts +4 -2
  265. package/dist/src/ui/components/ThemeDialog.js +3 -3
  266. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  267. package/dist/src/ui/components/ThemeDialog.test.js +13 -0
  268. package/dist/src/ui/components/ThemeDialog.test.js.map +1 -1
  269. package/dist/src/ui/components/ToolStatsDisplay.test.d.ts +6 -0
  270. package/dist/src/ui/components/ToolStatsDisplay.test.js +227 -0
  271. package/dist/src/ui/components/ToolStatsDisplay.test.js.map +1 -0
  272. package/dist/src/ui/components/messages/GeminiMessage.js +3 -1
  273. package/dist/src/ui/components/messages/GeminiMessage.js.map +1 -1
  274. package/dist/src/ui/components/messages/GeminiMessage.test.d.ts +6 -0
  275. package/dist/src/ui/components/messages/GeminiMessage.test.js +35 -0
  276. package/dist/src/ui/components/messages/GeminiMessage.test.js.map +1 -0
  277. package/dist/src/ui/components/messages/GeminiMessageContent.js +3 -1
  278. package/dist/src/ui/components/messages/GeminiMessageContent.js.map +1 -1
  279. package/dist/src/ui/components/messages/Todo.d.ts +7 -0
  280. package/dist/src/ui/components/messages/Todo.js +59 -0
  281. package/dist/src/ui/components/messages/Todo.js.map +1 -0
  282. package/dist/src/ui/components/messages/Todo.test.d.ts +6 -0
  283. package/dist/src/ui/components/messages/Todo.test.js +113 -0
  284. package/dist/src/ui/components/messages/Todo.test.js.map +1 -0
  285. package/dist/src/ui/components/messages/ToolGroupMessage.js +1 -1
  286. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  287. package/dist/src/ui/components/messages/ToolMessage.js +8 -3
  288. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  289. package/dist/src/ui/components/messages/ToolMessage.test.js +2 -2
  290. package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -1
  291. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.d.ts +6 -0
  292. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js +30 -0
  293. package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js.map +1 -0
  294. package/dist/src/ui/components/messages/UserShellMessage.js +1 -1
  295. package/dist/src/ui/components/messages/UserShellMessage.js.map +1 -1
  296. package/dist/src/ui/components/shared/BaseSelectionList.test.js +1 -1
  297. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +1 -1
  298. package/dist/src/ui/components/shared/text-buffer.test.d.ts +6 -0
  299. package/dist/src/ui/components/shared/text-buffer.test.js +1554 -0
  300. package/dist/src/ui/components/shared/text-buffer.test.js.map +1 -0
  301. package/dist/src/ui/components/shared/vim-buffer-actions.test.d.ts +6 -0
  302. package/dist/src/ui/components/shared/vim-buffer-actions.test.js +951 -0
  303. package/dist/src/ui/components/shared/vim-buffer-actions.test.js.map +1 -0
  304. package/dist/src/ui/components/views/McpStatus.d.ts +0 -1
  305. package/dist/src/ui/components/views/McpStatus.js +2 -2
  306. package/dist/src/ui/components/views/McpStatus.js.map +1 -1
  307. package/dist/src/ui/components/views/McpStatus.test.js +0 -5
  308. package/dist/src/ui/components/views/McpStatus.test.js.map +1 -1
  309. package/dist/src/ui/components/views/ToolsList.test.js +4 -4
  310. package/dist/src/ui/components/views/ToolsList.test.js.map +1 -1
  311. package/dist/src/ui/contexts/KeypressContext.d.ts +1 -0
  312. package/dist/src/ui/contexts/KeypressContext.js +176 -50
  313. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  314. package/dist/src/ui/contexts/KeypressContext.test.js +413 -14
  315. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
  316. package/dist/src/ui/contexts/SessionContext.test.d.ts +6 -0
  317. package/dist/src/ui/contexts/SessionContext.test.js +177 -0
  318. package/dist/src/ui/contexts/SessionContext.test.js.map +1 -0
  319. package/dist/src/ui/contexts/UIActionsContext.d.ts +5 -4
  320. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  321. package/dist/src/ui/contexts/UIStateContext.d.ts +3 -3
  322. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  323. package/dist/src/ui/hooks/slashCommandProcessor.test.d.ts +6 -0
  324. package/dist/src/ui/hooks/slashCommandProcessor.test.js +779 -0
  325. package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +1 -0
  326. package/dist/src/ui/hooks/useAtCompletion.js +2 -2
  327. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
  328. package/dist/src/ui/hooks/useAtCompletion.test.d.ts +6 -0
  329. package/dist/src/ui/hooks/useAtCompletion.test.js +385 -0
  330. package/dist/src/ui/hooks/useAtCompletion.test.js.map +1 -0
  331. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +0 -1
  332. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -1
  333. package/dist/src/ui/hooks/useCommandCompletion.d.ts +1 -1
  334. package/dist/src/ui/hooks/useCommandCompletion.js +5 -3
  335. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
  336. package/dist/src/ui/hooks/useCommandCompletion.test.d.ts +6 -0
  337. package/dist/src/ui/hooks/useCommandCompletion.test.js +375 -0
  338. package/dist/src/ui/hooks/useCommandCompletion.test.js.map +1 -0
  339. package/dist/src/ui/hooks/useConsoleMessages.test.d.ts +6 -0
  340. package/dist/src/ui/hooks/useConsoleMessages.test.js +110 -0
  341. package/dist/src/ui/hooks/useConsoleMessages.test.js.map +1 -0
  342. package/dist/src/ui/hooks/useExtensionUpdates.test.js +3 -3
  343. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +1 -1
  344. package/dist/src/ui/hooks/useFocus.test.d.ts +6 -0
  345. package/dist/src/ui/hooks/useFocus.test.js +115 -0
  346. package/dist/src/ui/hooks/useFocus.test.js.map +1 -0
  347. package/dist/src/ui/hooks/useFolderTrust.test.d.ts +6 -0
  348. package/dist/src/ui/hooks/useFolderTrust.test.js +164 -0
  349. package/dist/src/ui/hooks/useFolderTrust.test.js.map +1 -0
  350. package/dist/src/ui/hooks/useGeminiStream.js +33 -31
  351. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  352. package/dist/src/ui/hooks/useGeminiStream.test.d.ts +6 -0
  353. package/dist/src/ui/hooks/useGeminiStream.test.js +1936 -0
  354. package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -0
  355. package/dist/src/ui/hooks/useKeypress.test.d.ts +6 -0
  356. package/dist/src/ui/hooks/useKeypress.test.js +234 -0
  357. package/dist/src/ui/hooks/useKeypress.test.js.map +1 -0
  358. package/dist/src/ui/hooks/useLoadingIndicator.test.js +5 -0
  359. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  360. package/dist/src/ui/hooks/useMessageQueue.d.ts +1 -0
  361. package/dist/src/ui/hooks/useMessageQueue.js +14 -0
  362. package/dist/src/ui/hooks/useMessageQueue.js.map +1 -1
  363. package/dist/src/ui/hooks/useMessageQueue.test.js +121 -0
  364. package/dist/src/ui/hooks/useMessageQueue.test.js.map +1 -1
  365. package/dist/src/ui/hooks/usePhraseCycler.d.ts +1 -0
  366. package/dist/src/ui/hooks/usePhraseCycler.js +156 -5
  367. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  368. package/dist/src/ui/hooks/usePhraseCycler.test.d.ts +6 -0
  369. package/dist/src/ui/hooks/usePhraseCycler.test.js +155 -0
  370. package/dist/src/ui/hooks/usePhraseCycler.test.js.map +1 -0
  371. package/dist/src/ui/hooks/useThemeCommand.d.ts +2 -1
  372. package/dist/src/ui/hooks/useThemeCommand.js +6 -0
  373. package/dist/src/ui/hooks/useThemeCommand.js.map +1 -1
  374. package/dist/src/ui/hooks/useToolScheduler.test.js +3 -0
  375. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  376. package/dist/src/ui/hooks/vim.test.d.ts +6 -0
  377. package/dist/src/ui/hooks/vim.test.js +1389 -0
  378. package/dist/src/ui/hooks/vim.test.js.map +1 -0
  379. package/dist/src/ui/keyMatchers.test.js +9 -3
  380. package/dist/src/ui/keyMatchers.test.js.map +1 -1
  381. package/dist/src/ui/themes/theme.test.d.ts +6 -0
  382. package/dist/src/ui/themes/theme.test.js +85 -0
  383. package/dist/src/ui/themes/theme.test.js.map +1 -0
  384. package/dist/src/ui/types.d.ts +0 -1
  385. package/dist/src/ui/types.js.map +1 -1
  386. package/dist/src/ui/utils/CodeColorizer.d.ts +1 -1
  387. package/dist/src/ui/utils/CodeColorizer.js +4 -2
  388. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  389. package/dist/src/ui/utils/MarkdownDisplay.d.ts +1 -0
  390. package/dist/src/ui/utils/MarkdownDisplay.js +8 -1
  391. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  392. package/dist/src/ui/utils/commandUtils.js +18 -2
  393. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  394. package/dist/src/ui/utils/commandUtils.test.js +61 -6
  395. package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
  396. package/dist/src/ui/utils/updateCheck.d.ts +2 -1
  397. package/dist/src/ui/utils/updateCheck.js +4 -1
  398. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  399. package/dist/src/ui/utils/updateCheck.test.js +25 -10
  400. package/dist/src/ui/utils/updateCheck.test.js.map +1 -1
  401. package/dist/src/utils/errors.d.ts +1 -0
  402. package/dist/src/utils/errors.js +66 -5
  403. package/dist/src/utils/errors.js.map +1 -1
  404. package/dist/src/validateNonInterActiveAuth.test.d.ts +6 -0
  405. package/dist/src/validateNonInterActiveAuth.test.js +336 -0
  406. package/dist/src/validateNonInterActiveAuth.test.js.map +1 -0
  407. package/dist/src/zed-integration/zedIntegration.js +1 -2
  408. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  409. package/dist/tsconfig.tsbuildinfo +1 -1
  410. package/package.json +3 -3
  411. package/dist/google-gemini-cli-0.10.0-preview.0.tgz +0 -0
  412. package/dist/src/ui/components/WorkspaceMigrationDialog.d.ts +0 -11
  413. package/dist/src/ui/components/WorkspaceMigrationDialog.js +0 -44
  414. package/dist/src/ui/components/WorkspaceMigrationDialog.js.map +0 -1
  415. package/dist/src/ui/hooks/useWorkspaceMigration.d.ts +0 -13
  416. package/dist/src/ui/hooks/useWorkspaceMigration.js +0 -59
  417. package/dist/src/ui/hooks/useWorkspaceMigration.js.map +0 -1
@@ -103,7 +103,7 @@ export const ideCommand = async () => {
103
103
  if (!currentIDE) {
104
104
  return {
105
105
  name: 'ide',
106
- description: 'manage IDE integration',
106
+ description: 'Manage IDE integration',
107
107
  kind: CommandKind.BUILT_IN,
108
108
  action: () => ({
109
109
  type: 'message',
@@ -114,13 +114,13 @@ export const ideCommand = async () => {
114
114
  }
115
115
  const ideSlashCommand = {
116
116
  name: 'ide',
117
- description: 'manage IDE integration',
117
+ description: 'Manage IDE integration',
118
118
  kind: CommandKind.BUILT_IN,
119
119
  subCommands: [],
120
120
  };
121
121
  const statusCommand = {
122
122
  name: 'status',
123
- description: 'check status of IDE integration',
123
+ description: 'Check status of IDE integration',
124
124
  kind: CommandKind.BUILT_IN,
125
125
  action: async () => {
126
126
  const { messageType, content } = await getIdeStatusMessageWithFiles(ideClient);
@@ -133,7 +133,7 @@ export const ideCommand = async () => {
133
133
  };
134
134
  const installCommand = {
135
135
  name: 'install',
136
- description: `install required IDE companion for ${ideClient.getDetectedIdeDisplayName()}`,
136
+ description: `Install required IDE companion for ${ideClient.getDetectedIdeDisplayName()}`,
137
137
  kind: CommandKind.BUILT_IN,
138
138
  action: async (context) => {
139
139
  const installer = getIdeInstaller(currentIDE);
@@ -182,7 +182,7 @@ export const ideCommand = async () => {
182
182
  };
183
183
  const enableCommand = {
184
184
  name: 'enable',
185
- description: 'enable IDE integration',
185
+ description: 'Enable IDE integration',
186
186
  kind: CommandKind.BUILT_IN,
187
187
  action: async (context) => {
188
188
  context.services.settings.setValue(SettingScope.User, 'ide.enabled', true);
@@ -196,7 +196,7 @@ export const ideCommand = async () => {
196
196
  };
197
197
  const disableCommand = {
198
198
  name: 'disable',
199
- description: 'disable IDE integration',
199
+ description: 'Disable IDE integration',
200
200
  kind: CommandKind.BUILT_IN,
201
201
  action: async (context) => {
202
202
  context.services.settings.setValue(SettingScope.User, 'ide.enabled', false);
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,203 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
7
+ import { ideCommand } from './ideCommand.js';
8
+ import {} from './types.js';
9
+ import { IDE_DEFINITIONS } from '@google/gemini-cli-core';
10
+ import * as core from '@google/gemini-cli-core';
11
+ vi.mock('@google/gemini-cli-core', async (importOriginal) => {
12
+ const original = await importOriginal();
13
+ return {
14
+ ...original,
15
+ getOauthClient: vi.fn(original.getOauthClient),
16
+ getIdeInstaller: vi.fn(original.getIdeInstaller),
17
+ IdeClient: {
18
+ getInstance: vi.fn(),
19
+ },
20
+ };
21
+ });
22
+ describe('ideCommand', () => {
23
+ let mockContext;
24
+ let mockIdeClient;
25
+ let platformSpy;
26
+ beforeEach(() => {
27
+ vi.resetAllMocks();
28
+ mockIdeClient = {
29
+ reconnect: vi.fn(),
30
+ disconnect: vi.fn(),
31
+ connect: vi.fn(),
32
+ getCurrentIde: vi.fn(),
33
+ getConnectionStatus: vi.fn(),
34
+ getDetectedIdeDisplayName: vi.fn(),
35
+ };
36
+ vi.mocked(core.IdeClient.getInstance).mockResolvedValue(mockIdeClient);
37
+ vi.mocked(mockIdeClient.getDetectedIdeDisplayName).mockReturnValue('VS Code');
38
+ mockContext = {
39
+ ui: {
40
+ addItem: vi.fn(),
41
+ },
42
+ services: {
43
+ settings: {
44
+ setValue: vi.fn(),
45
+ },
46
+ config: {
47
+ getIdeMode: vi.fn(),
48
+ setIdeMode: vi.fn(),
49
+ getUsageStatisticsEnabled: vi.fn().mockReturnValue(false),
50
+ },
51
+ },
52
+ };
53
+ platformSpy = vi.spyOn(process, 'platform', 'get');
54
+ });
55
+ afterEach(() => {
56
+ vi.restoreAllMocks();
57
+ });
58
+ it('should return the ide command', async () => {
59
+ vi.mocked(mockIdeClient.getCurrentIde).mockReturnValue(IDE_DEFINITIONS.vscode);
60
+ vi.mocked(mockIdeClient.getConnectionStatus).mockReturnValue({
61
+ status: core.IDEConnectionStatus.Disconnected,
62
+ });
63
+ const command = await ideCommand();
64
+ expect(command).not.toBeNull();
65
+ expect(command.name).toBe('ide');
66
+ expect(command.subCommands).toHaveLength(3);
67
+ expect(command.subCommands?.[0].name).toBe('enable');
68
+ expect(command.subCommands?.[1].name).toBe('status');
69
+ expect(command.subCommands?.[2].name).toBe('install');
70
+ });
71
+ it('should show disable command when connected', async () => {
72
+ vi.mocked(mockIdeClient.getCurrentIde).mockReturnValue(IDE_DEFINITIONS.vscode);
73
+ vi.mocked(mockIdeClient.getConnectionStatus).mockReturnValue({
74
+ status: core.IDEConnectionStatus.Connected,
75
+ });
76
+ const command = await ideCommand();
77
+ expect(command).not.toBeNull();
78
+ const subCommandNames = command.subCommands?.map((cmd) => cmd.name);
79
+ expect(subCommandNames).toContain('disable');
80
+ expect(subCommandNames).not.toContain('enable');
81
+ });
82
+ describe('status subcommand', () => {
83
+ beforeEach(() => {
84
+ vi.mocked(mockIdeClient.getCurrentIde).mockReturnValue(IDE_DEFINITIONS.vscode);
85
+ });
86
+ it('should show connected status', async () => {
87
+ vi.mocked(mockIdeClient.getConnectionStatus).mockReturnValue({
88
+ status: core.IDEConnectionStatus.Connected,
89
+ });
90
+ const command = await ideCommand();
91
+ const result = await command.subCommands.find((c) => c.name === 'status').action(mockContext, '');
92
+ expect(vi.mocked(mockIdeClient.getConnectionStatus)).toHaveBeenCalled();
93
+ expect(result).toEqual({
94
+ type: 'message',
95
+ messageType: 'info',
96
+ content: '🟢 Connected to VS Code',
97
+ });
98
+ });
99
+ it('should show connecting status', async () => {
100
+ vi.mocked(mockIdeClient.getConnectionStatus).mockReturnValue({
101
+ status: core.IDEConnectionStatus.Connecting,
102
+ });
103
+ const command = await ideCommand();
104
+ const result = await command.subCommands.find((c) => c.name === 'status').action(mockContext, '');
105
+ expect(vi.mocked(mockIdeClient.getConnectionStatus)).toHaveBeenCalled();
106
+ expect(result).toEqual({
107
+ type: 'message',
108
+ messageType: 'info',
109
+ content: `🟡 Connecting...`,
110
+ });
111
+ });
112
+ it('should show disconnected status', async () => {
113
+ vi.mocked(mockIdeClient.getConnectionStatus).mockReturnValue({
114
+ status: core.IDEConnectionStatus.Disconnected,
115
+ });
116
+ const command = await ideCommand();
117
+ const result = await command.subCommands.find((c) => c.name === 'status').action(mockContext, '');
118
+ expect(vi.mocked(mockIdeClient.getConnectionStatus)).toHaveBeenCalled();
119
+ expect(result).toEqual({
120
+ type: 'message',
121
+ messageType: 'error',
122
+ content: `🔴 Disconnected`,
123
+ });
124
+ });
125
+ it('should show disconnected status with details', async () => {
126
+ const details = 'Something went wrong';
127
+ vi.mocked(mockIdeClient.getConnectionStatus).mockReturnValue({
128
+ status: core.IDEConnectionStatus.Disconnected,
129
+ details,
130
+ });
131
+ const command = await ideCommand();
132
+ const result = await command.subCommands.find((c) => c.name === 'status').action(mockContext, '');
133
+ expect(vi.mocked(mockIdeClient.getConnectionStatus)).toHaveBeenCalled();
134
+ expect(result).toEqual({
135
+ type: 'message',
136
+ messageType: 'error',
137
+ content: `🔴 Disconnected: ${details}`,
138
+ });
139
+ });
140
+ });
141
+ describe('install subcommand', () => {
142
+ const mockInstall = vi.fn();
143
+ beforeEach(() => {
144
+ vi.mocked(mockIdeClient.getCurrentIde).mockReturnValue(IDE_DEFINITIONS.vscode);
145
+ vi.mocked(mockIdeClient.getConnectionStatus).mockReturnValue({
146
+ status: core.IDEConnectionStatus.Disconnected,
147
+ });
148
+ vi.mocked(core.getIdeInstaller).mockReturnValue({
149
+ install: mockInstall,
150
+ });
151
+ platformSpy.mockReturnValue('linux');
152
+ });
153
+ it('should install the extension', async () => {
154
+ vi.useFakeTimers();
155
+ mockInstall.mockResolvedValue({
156
+ success: true,
157
+ message: 'Successfully installed.',
158
+ });
159
+ const command = await ideCommand();
160
+ // For the polling loop inside the action.
161
+ vi.mocked(mockIdeClient.getConnectionStatus).mockReturnValue({
162
+ status: core.IDEConnectionStatus.Connected,
163
+ });
164
+ const actionPromise = command.subCommands.find((c) => c.name === 'install').action(mockContext, '');
165
+ await vi.runAllTimersAsync();
166
+ await actionPromise;
167
+ expect(core.getIdeInstaller).toHaveBeenCalledWith(IDE_DEFINITIONS.vscode);
168
+ expect(mockInstall).toHaveBeenCalled();
169
+ expect(mockContext.ui.addItem).toHaveBeenCalledWith(expect.objectContaining({
170
+ type: 'info',
171
+ text: `Installing IDE companion...`,
172
+ }), expect.any(Number));
173
+ expect(mockContext.ui.addItem).toHaveBeenCalledWith(expect.objectContaining({
174
+ type: 'info',
175
+ text: 'Successfully installed.',
176
+ }), expect.any(Number));
177
+ expect(mockContext.ui.addItem).toHaveBeenCalledWith(expect.objectContaining({
178
+ type: 'info',
179
+ text: '🟢 Connected to VS Code',
180
+ }), expect.any(Number));
181
+ vi.useRealTimers();
182
+ }, 10000);
183
+ it('should show an error if installation fails', async () => {
184
+ mockInstall.mockResolvedValue({
185
+ success: false,
186
+ message: 'Installation failed.',
187
+ });
188
+ const command = await ideCommand();
189
+ await command.subCommands.find((c) => c.name === 'install').action(mockContext, '');
190
+ expect(core.getIdeInstaller).toHaveBeenCalledWith(IDE_DEFINITIONS.vscode);
191
+ expect(mockInstall).toHaveBeenCalled();
192
+ expect(mockContext.ui.addItem).toHaveBeenCalledWith(expect.objectContaining({
193
+ type: 'info',
194
+ text: `Installing IDE companion...`,
195
+ }), expect.any(Number));
196
+ expect(mockContext.ui.addItem).toHaveBeenCalledWith(expect.objectContaining({
197
+ type: 'error',
198
+ text: 'Installation failed.',
199
+ }), expect.any(Number));
200
+ });
201
+ });
202
+ });
203
+ //# sourceMappingURL=ideCommand.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ideCommand.test.js","sourceRoot":"","sources":["../../../../src/ui/commands/ideCommand.test.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ import * as path from 'node:path';
8
8
  import { CommandKind } from './types.js';
9
9
  export const initCommand = {
10
10
  name: 'init',
11
- description: 'Analyzes the project and creates a tailored GEMINI.md file.',
11
+ description: 'Analyzes the project and creates a tailored GEMINI.md file',
12
12
  kind: CommandKind.BUILT_IN,
13
13
  action: async (context, _args) => {
14
14
  if (!context.services.config) {
@@ -1 +1 @@
1
- {"version":3,"file":"initCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/initCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAMlC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,6DAA6D;IAC1E,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EACX,OAAuB,EACvB,KAAa,EACsB,EAAE;QACrC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,8BAA8B;aACxC,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAEvD,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,MAAM;gBACnB,OAAO,EACL,0EAA0E;aAC7E,CAAC;QACJ,CAAC;QAED,iCAAiC;QACjC,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAE3C,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,oEAAoE;SAC3E,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCd;SACI,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"initCommand.js","sourceRoot":"","sources":["../../../../src/ui/commands/initCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAMlC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,4DAA4D;IACzE,IAAI,EAAE,WAAW,CAAC,QAAQ;IAC1B,MAAM,EAAE,KAAK,EACX,OAAuB,EACvB,KAAa,EACsB,EAAE;QACrC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,OAAO;gBACpB,OAAO,EAAE,8BAA8B;aACxC,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAEvD,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,MAAM;gBACnB,OAAO,EACL,0EAA0E;aAC7E,CAAC;QACJ,CAAC;QAED,iCAAiC;QACjC,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAE3C,OAAO,CAAC,EAAE,CAAC,OAAO,CAChB;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,oEAAoE;SAC3E,EACD,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCd;SACI,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,80 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
7
+ import * as fs from 'node:fs';
8
+ import * as path from 'node:path';
9
+ import { initCommand } from './initCommand.js';
10
+ import { createMockCommandContext } from '../../test-utils/mockCommandContext.js';
11
+ // Mock the 'fs' module
12
+ vi.mock('fs', () => ({
13
+ existsSync: vi.fn(),
14
+ writeFileSync: vi.fn(),
15
+ }));
16
+ describe('initCommand', () => {
17
+ let mockContext;
18
+ const targetDir = '/test/dir';
19
+ const geminiMdPath = path.join(targetDir, 'GEMINI.md');
20
+ beforeEach(() => {
21
+ // Create a fresh mock context for each test
22
+ mockContext = createMockCommandContext({
23
+ services: {
24
+ config: {
25
+ getTargetDir: () => targetDir,
26
+ },
27
+ },
28
+ });
29
+ });
30
+ afterEach(() => {
31
+ // Clear all mocks after each test
32
+ vi.clearAllMocks();
33
+ });
34
+ it('should inform the user if GEMINI.md already exists', async () => {
35
+ // Arrange: Simulate that the file exists
36
+ vi.mocked(fs.existsSync).mockReturnValue(true);
37
+ // Act: Run the command's action
38
+ const result = await initCommand.action(mockContext, '');
39
+ // Assert: Check for the correct informational message
40
+ expect(result).toEqual({
41
+ type: 'message',
42
+ messageType: 'info',
43
+ content: 'A GEMINI.md file already exists in this directory. No changes were made.',
44
+ });
45
+ // Assert: Ensure no file was written
46
+ expect(fs.writeFileSync).not.toHaveBeenCalled();
47
+ });
48
+ it('should create GEMINI.md and submit a prompt if it does not exist', async () => {
49
+ // Arrange: Simulate that the file does not exist
50
+ vi.mocked(fs.existsSync).mockReturnValue(false);
51
+ // Act: Run the command's action
52
+ const result = (await initCommand.action(mockContext, ''));
53
+ // Assert: Check that writeFileSync was called correctly
54
+ expect(fs.writeFileSync).toHaveBeenCalledWith(geminiMdPath, '', 'utf8');
55
+ // Assert: Check that an informational message was added to the UI
56
+ expect(mockContext.ui.addItem).toHaveBeenCalledWith({
57
+ type: 'info',
58
+ text: 'Empty GEMINI.md created. Now analyzing the project to populate it.',
59
+ }, expect.any(Number));
60
+ // Assert: Check that the correct prompt is submitted
61
+ expect(result.type).toBe('submit_prompt');
62
+ expect(result.content).toContain('You are an AI agent that brings the power of Gemini');
63
+ });
64
+ it('should return an error if config is not available', async () => {
65
+ // Arrange: Create a context without config
66
+ const noConfigContext = createMockCommandContext();
67
+ if (noConfigContext.services) {
68
+ noConfigContext.services.config = null;
69
+ }
70
+ // Act: Run the command's action
71
+ const result = await initCommand.action(noConfigContext, '');
72
+ // Assert: Check for the correct error message
73
+ expect(result).toEqual({
74
+ type: 'message',
75
+ messageType: 'error',
76
+ content: 'Configuration not available.',
77
+ });
78
+ });
79
+ });
80
+ //# sourceMappingURL=initCommand.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initCommand.test.js","sourceRoot":"","sources":["../../../../src/ui/commands/initCommand.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAGlF,uBAAuB;AACvB,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACnB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;IACnB,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;CACvB,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,WAA2B,CAAC;IAChC,MAAM,SAAS,GAAG,WAAW,CAAC;IAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAEvD,UAAU,CAAC,GAAG,EAAE;QACd,4CAA4C;QAC5C,WAAW,GAAG,wBAAwB,CAAC;YACrC,QAAQ,EAAE;gBACR,MAAM,EAAE;oBACN,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS;iBAC9B;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,kCAAkC;QAClC,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,yCAAyC;QACzC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE/C,gCAAgC;QAChC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAE1D,sDAAsD;QACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,MAAM;YACnB,OAAO,EACL,0EAA0E;SAC7E,CAAC,CAAC;QACH,qCAAqC;QACrC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,iDAAiD;QACjD,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAEhD,gCAAgC;QAChC,MAAM,MAAM,GAAG,CAAC,MAAM,WAAW,CAAC,MAAO,CACvC,WAAW,EACX,EAAE,CACH,CAA6B,CAAC;QAE/B,wDAAwD;QACxD,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAExE,kEAAkE;QAClE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,oBAAoB,CACjD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,oEAAoE;SAC3E,EACD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CACnB,CAAC;QAEF,qDAAqD;QACrD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAC9B,qDAAqD,CACtD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,2CAA2C;QAC3C,MAAM,eAAe,GAAG,wBAAwB,EAAE,CAAC;QACnD,IAAI,eAAe,CAAC,QAAQ,EAAE,CAAC;YAC7B,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;QACzC,CAAC;QAED,gCAAgC;QAChC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAE9D,8CAA8C;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,OAAO;YACpB,OAAO,EAAE,8BAA8B;SACxC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -113,98 +113,105 @@ const authCommand = {
113
113
  return Object.keys(mcpServers).filter((name) => name.startsWith(partialArg));
114
114
  },
115
115
  };
116
- const listCommand = {
117
- name: 'list',
118
- description: 'List configured MCP servers and tools',
119
- kind: CommandKind.BUILT_IN,
120
- action: async (context, args) => {
121
- const { config } = context.services;
122
- if (!config) {
123
- return {
124
- type: 'message',
125
- messageType: 'error',
126
- content: 'Config not loaded.',
127
- };
128
- }
129
- const toolRegistry = config.getToolRegistry();
130
- if (!toolRegistry) {
131
- return {
132
- type: 'message',
133
- messageType: 'error',
134
- content: 'Could not retrieve tool registry.',
135
- };
136
- }
137
- const lowerCaseArgs = args.toLowerCase().split(/\s+/).filter(Boolean);
138
- const hasDesc = lowerCaseArgs.includes('desc') || lowerCaseArgs.includes('descriptions');
139
- const hasNodesc = lowerCaseArgs.includes('nodesc') ||
140
- lowerCaseArgs.includes('nodescriptions');
141
- const showSchema = lowerCaseArgs.includes('schema');
142
- const showDescriptions = !hasNodesc && (hasDesc || showSchema);
143
- const showTips = lowerCaseArgs.length === 0;
144
- const mcpServers = config.getMcpServers() || {};
145
- const serverNames = Object.keys(mcpServers);
146
- const blockedMcpServers = config.getBlockedMcpServers() || [];
147
- const connectingServers = serverNames.filter((name) => getMCPServerStatus(name) === MCPServerStatus.CONNECTING);
148
- const discoveryState = getMCPDiscoveryState();
149
- const discoveryInProgress = discoveryState === MCPDiscoveryState.IN_PROGRESS ||
150
- connectingServers.length > 0;
151
- const allTools = toolRegistry.getAllTools();
152
- const mcpTools = allTools.filter((tool) => tool instanceof DiscoveredMCPTool);
153
- const promptRegistry = await config.getPromptRegistry();
154
- const mcpPrompts = promptRegistry
155
- .getAllPrompts()
156
- .filter((prompt) => 'serverName' in prompt &&
157
- serverNames.includes(prompt.serverName));
158
- const authStatus = {};
159
- const tokenStorage = new MCPOAuthTokenStorage();
160
- for (const serverName of serverNames) {
161
- const server = mcpServers[serverName];
162
- if (server.oauth?.enabled) {
163
- const creds = await tokenStorage.getCredentials(serverName);
164
- if (creds) {
165
- if (creds.token.expiresAt && creds.token.expiresAt < Date.now()) {
166
- authStatus[serverName] = 'expired';
167
- }
168
- else {
169
- authStatus[serverName] = 'authenticated';
170
- }
116
+ const listAction = async (context, showDescriptions = false, showSchema = false) => {
117
+ const { config } = context.services;
118
+ if (!config) {
119
+ return {
120
+ type: 'message',
121
+ messageType: 'error',
122
+ content: 'Config not loaded.',
123
+ };
124
+ }
125
+ const toolRegistry = config.getToolRegistry();
126
+ if (!toolRegistry) {
127
+ return {
128
+ type: 'message',
129
+ messageType: 'error',
130
+ content: 'Could not retrieve tool registry.',
131
+ };
132
+ }
133
+ const mcpServers = config.getMcpServers() || {};
134
+ const serverNames = Object.keys(mcpServers);
135
+ const blockedMcpServers = config.getBlockedMcpServers() || [];
136
+ const connectingServers = serverNames.filter((name) => getMCPServerStatus(name) === MCPServerStatus.CONNECTING);
137
+ const discoveryState = getMCPDiscoveryState();
138
+ const discoveryInProgress = discoveryState === MCPDiscoveryState.IN_PROGRESS ||
139
+ connectingServers.length > 0;
140
+ const allTools = toolRegistry.getAllTools();
141
+ const mcpTools = allTools.filter((tool) => tool instanceof DiscoveredMCPTool);
142
+ const promptRegistry = await config.getPromptRegistry();
143
+ const mcpPrompts = promptRegistry
144
+ .getAllPrompts()
145
+ .filter((prompt) => 'serverName' in prompt &&
146
+ serverNames.includes(prompt.serverName));
147
+ const authStatus = {};
148
+ const tokenStorage = new MCPOAuthTokenStorage();
149
+ for (const serverName of serverNames) {
150
+ const server = mcpServers[serverName];
151
+ if (server.oauth?.enabled) {
152
+ const creds = await tokenStorage.getCredentials(serverName);
153
+ if (creds) {
154
+ if (creds.token.expiresAt && creds.token.expiresAt < Date.now()) {
155
+ authStatus[serverName] = 'expired';
171
156
  }
172
157
  else {
173
- authStatus[serverName] = 'unauthenticated';
158
+ authStatus[serverName] = 'authenticated';
174
159
  }
175
160
  }
176
161
  else {
177
- authStatus[serverName] = 'not-configured';
162
+ authStatus[serverName] = 'unauthenticated';
178
163
  }
179
164
  }
180
- const mcpStatusItem = {
181
- type: MessageType.MCP_STATUS,
182
- servers: mcpServers,
183
- tools: mcpTools.map((tool) => ({
184
- serverName: tool.serverName,
185
- name: tool.name,
186
- description: tool.description,
187
- schema: tool.schema,
188
- })),
189
- prompts: mcpPrompts.map((prompt) => ({
190
- serverName: prompt.serverName,
191
- name: prompt.name,
192
- description: prompt.description,
193
- })),
194
- authStatus,
195
- blockedServers: blockedMcpServers,
196
- discoveryInProgress,
197
- connectingServers,
198
- showDescriptions,
199
- showSchema,
200
- showTips,
201
- };
202
- context.ui.addItem(mcpStatusItem, Date.now());
203
- },
165
+ else {
166
+ authStatus[serverName] = 'not-configured';
167
+ }
168
+ }
169
+ const mcpStatusItem = {
170
+ type: MessageType.MCP_STATUS,
171
+ servers: mcpServers,
172
+ tools: mcpTools.map((tool) => ({
173
+ serverName: tool.serverName,
174
+ name: tool.name,
175
+ description: tool.description,
176
+ schema: tool.schema,
177
+ })),
178
+ prompts: mcpPrompts.map((prompt) => ({
179
+ serverName: prompt.serverName,
180
+ name: prompt.name,
181
+ description: prompt.description,
182
+ })),
183
+ authStatus,
184
+ blockedServers: blockedMcpServers,
185
+ discoveryInProgress,
186
+ connectingServers,
187
+ showDescriptions,
188
+ showSchema,
189
+ };
190
+ context.ui.addItem(mcpStatusItem, Date.now());
191
+ };
192
+ const listCommand = {
193
+ name: 'list',
194
+ altNames: ['ls', 'nodesc', 'nodescription'],
195
+ description: 'List configured MCP servers and tools',
196
+ kind: CommandKind.BUILT_IN,
197
+ action: (context) => listAction(context),
198
+ };
199
+ const descCommand = {
200
+ name: 'desc',
201
+ altNames: ['description'],
202
+ description: 'List configured MCP servers and tools with descriptions',
203
+ kind: CommandKind.BUILT_IN,
204
+ action: (context) => listAction(context, true),
205
+ };
206
+ const schemaCommand = {
207
+ name: 'schema',
208
+ description: 'List configured MCP servers and tools with descriptions and schemas',
209
+ kind: CommandKind.BUILT_IN,
210
+ action: (context) => listAction(context, true, true),
204
211
  };
205
212
  const refreshCommand = {
206
213
  name: 'refresh',
207
- description: 'Restarts MCP servers.',
214
+ description: 'Restarts MCP servers',
208
215
  kind: CommandKind.BUILT_IN,
209
216
  action: async (context) => {
210
217
  const { config } = context.services;
@@ -240,12 +247,15 @@ const refreshCommand = {
240
247
  };
241
248
  export const mcpCommand = {
242
249
  name: 'mcp',
243
- description: 'list configured MCP servers and tools, or authenticate with OAuth-enabled servers',
250
+ description: 'Manage configured Model Context Protocol (MCP) servers',
244
251
  kind: CommandKind.BUILT_IN,
245
- subCommands: [listCommand, authCommand, refreshCommand],
246
- // Default action when no subcommand is provided
247
- action: async (context, args) =>
248
- // If no subcommand, run the list command
249
- listCommand.action(context, args),
252
+ subCommands: [
253
+ listCommand,
254
+ descCommand,
255
+ schemaCommand,
256
+ authCommand,
257
+ refreshCommand,
258
+ ],
259
+ action: async (context) => listAction(context),
250
260
  };
251
261
  //# sourceMappingURL=mcpCommand.js.map