@machina.ai/cell-cli 1.19.4-rc3 → 1.22.5-rc1

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 (500) hide show
  1. package/dist/package.json +3 -3
  2. package/dist/src/commands/extensions/disable.js.map +1 -1
  3. package/dist/src/commands/extensions/disable.test.js.map +1 -1
  4. package/dist/src/commands/extensions/enable.js.map +1 -1
  5. package/dist/src/commands/extensions/enable.test.js.map +1 -1
  6. package/dist/src/commands/extensions/examples/mcp-server/example.test.js +1 -1
  7. package/dist/src/commands/extensions/examples/mcp-server/example.test.js.map +1 -1
  8. package/dist/src/commands/extensions/examples/mcp-server/example.test.ts +4 -12
  9. package/dist/src/commands/extensions/link.d.ts +1 -0
  10. package/dist/src/commands/extensions/link.js +15 -2
  11. package/dist/src/commands/extensions/link.js.map +1 -1
  12. package/dist/src/commands/extensions/link.test.js +6 -0
  13. package/dist/src/commands/extensions/link.test.js.map +1 -1
  14. package/dist/src/commands/extensions/list.test.js +0 -1
  15. package/dist/src/commands/extensions/list.test.js.map +1 -1
  16. package/dist/src/commands/extensions/settings.d.ts +7 -0
  17. package/dist/src/commands/extensions/settings.js +111 -0
  18. package/dist/src/commands/extensions/settings.js.map +1 -0
  19. package/dist/src/commands/extensions/uninstall.js.map +1 -1
  20. package/dist/src/commands/extensions/uninstall.test.js.map +1 -1
  21. package/dist/src/commands/extensions/update.test.js.map +1 -1
  22. package/dist/src/commands/extensions/utils.d.ts +13 -0
  23. package/dist/src/commands/extensions/utils.js +29 -0
  24. package/dist/src/commands/extensions/utils.js.map +1 -0
  25. package/dist/src/commands/extensions.js +2 -0
  26. package/dist/src/commands/extensions.js.map +1 -1
  27. package/dist/src/commands/hooks/migrate.d.ts +11 -0
  28. package/dist/src/commands/hooks/migrate.js +206 -0
  29. package/dist/src/commands/hooks/migrate.js.map +1 -0
  30. package/dist/src/commands/hooks/migrate.test.js +389 -0
  31. package/dist/src/commands/hooks/migrate.test.js.map +1 -0
  32. package/dist/src/commands/hooks.d.ts +7 -0
  33. package/dist/src/commands/hooks.js +22 -0
  34. package/dist/src/commands/hooks.js.map +1 -0
  35. package/dist/src/commands/mcp/add.js +4 -2
  36. package/dist/src/commands/mcp/add.js.map +1 -1
  37. package/dist/src/commands/mcp/add.test.js +23 -1
  38. package/dist/src/commands/mcp/add.test.js.map +1 -1
  39. package/dist/src/commands/mcp/list.js +1 -1
  40. package/dist/src/commands/mcp/list.js.map +1 -1
  41. package/dist/src/config/config.js +15 -5
  42. package/dist/src/config/config.js.map +1 -1
  43. package/dist/src/config/config.test.js +31 -11
  44. package/dist/src/config/config.test.js.map +1 -1
  45. package/dist/src/config/extension-manager.d.ts +1 -0
  46. package/dist/src/config/extension-manager.js +51 -9
  47. package/dist/src/config/extension-manager.js.map +1 -1
  48. package/dist/src/config/extension.test.js +88 -5
  49. package/dist/src/config/extension.test.js.map +1 -1
  50. package/dist/src/config/extensions/consent.d.ts +1 -1
  51. package/dist/src/config/extensions/consent.js +9 -6
  52. package/dist/src/config/extensions/consent.js.map +1 -1
  53. package/dist/src/config/extensions/consent.test.js +17 -7
  54. package/dist/src/config/extensions/consent.test.js.map +1 -1
  55. package/dist/src/config/extensions/extensionSettings.d.ts +6 -0
  56. package/dist/src/config/extensions/extensionSettings.js +87 -17
  57. package/dist/src/config/extensions/extensionSettings.js.map +1 -1
  58. package/dist/src/config/extensions/extensionSettings.test.js +189 -54
  59. package/dist/src/config/extensions/extensionSettings.test.js.map +1 -1
  60. package/dist/src/config/extensions/github.d.ts +4 -1
  61. package/dist/src/config/extensions/github.js +34 -8
  62. package/dist/src/config/extensions/github.js.map +1 -1
  63. package/dist/src/config/extensions/github.test.js +188 -0
  64. package/dist/src/config/extensions/github.test.js.map +1 -1
  65. package/dist/src/config/extensions/github_fetch.js.map +1 -1
  66. package/dist/src/config/extensions/storage.js +1 -1
  67. package/dist/src/config/extensions/storage.js.map +1 -1
  68. package/dist/src/config/settings-validation.d.ts +23 -0
  69. package/dist/src/config/settings-validation.js +249 -0
  70. package/dist/src/config/settings-validation.js.map +1 -0
  71. package/dist/src/{utils/version.d.ts → config/settings-validation.test.d.ts} +1 -1
  72. package/dist/src/config/settings-validation.test.js +322 -0
  73. package/dist/src/config/settings-validation.test.js.map +1 -0
  74. package/dist/src/config/settings.js +41 -2
  75. package/dist/src/config/settings.js.map +1 -1
  76. package/dist/src/config/settings.test.js +27 -4
  77. package/dist/src/config/settings.test.js.map +1 -1
  78. package/dist/src/config/settingsSchema.d.ts +196 -5
  79. package/dist/src/config/settingsSchema.js +234 -4
  80. package/dist/src/config/settingsSchema.js.map +1 -1
  81. package/dist/src/config/settingsSchema.test.js +10 -0
  82. package/dist/src/config/settingsSchema.test.js.map +1 -1
  83. package/dist/src/config/settings_repro.test.d.ts +6 -0
  84. package/dist/src/config/settings_repro.test.js +162 -0
  85. package/dist/src/config/settings_repro.test.js.map +1 -0
  86. package/dist/src/core/initializer.js +3 -1
  87. package/dist/src/core/initializer.js.map +1 -1
  88. package/dist/src/gemini.js +61 -14
  89. package/dist/src/gemini.js.map +1 -1
  90. package/dist/src/gemini.test.js +204 -130
  91. package/dist/src/gemini.test.js.map +1 -1
  92. package/dist/src/gemini_cleanup.test.js +2 -1
  93. package/dist/src/gemini_cleanup.test.js.map +1 -1
  94. package/dist/src/generated/git-commit.d.ts +2 -2
  95. package/dist/src/generated/git-commit.js +2 -2
  96. package/dist/src/nonInteractiveCli.js +8 -10
  97. package/dist/src/nonInteractiveCli.js.map +1 -1
  98. package/dist/src/nonInteractiveCli.test.js +24 -10
  99. package/dist/src/nonInteractiveCli.test.js.map +1 -1
  100. package/dist/src/services/BuiltinCommandLoader.js +5 -0
  101. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  102. package/dist/src/services/BuiltinCommandLoader.test.js +4 -0
  103. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
  104. package/dist/src/services/FeedbackService.js.map +1 -1
  105. package/dist/src/services/FileCommandLoader.test.js.map +1 -1
  106. package/dist/src/services/McpPromptLoader.js +1 -0
  107. package/dist/src/services/McpPromptLoader.js.map +1 -1
  108. package/dist/src/services/McpPromptLoader.test.js +40 -0
  109. package/dist/src/services/McpPromptLoader.test.js.map +1 -1
  110. package/dist/src/test-utils/render.js +1 -0
  111. package/dist/src/test-utils/render.js.map +1 -1
  112. package/dist/src/ui/AppContainer.js +76 -69
  113. package/dist/src/ui/AppContainer.js.map +1 -1
  114. package/dist/src/ui/AppContainer.test.js +205 -75
  115. package/dist/src/ui/AppContainer.test.js.map +1 -1
  116. package/dist/src/ui/auth/ApiAuthDialog.js +36 -3
  117. package/dist/src/ui/auth/ApiAuthDialog.js.map +1 -1
  118. package/dist/src/ui/auth/ApiAuthDialog.test.js +26 -2
  119. package/dist/src/ui/auth/ApiAuthDialog.test.js.map +1 -1
  120. package/dist/src/ui/auth/AuthDialog.js +12 -4
  121. package/dist/src/ui/auth/AuthDialog.js.map +1 -1
  122. package/dist/src/ui/auth/AuthDialog.test.js +14 -3
  123. package/dist/src/ui/auth/AuthDialog.test.js.map +1 -1
  124. package/dist/src/ui/auth/useAuth.js +14 -4
  125. package/dist/src/ui/auth/useAuth.js.map +1 -1
  126. package/dist/src/ui/auth/useAuth.test.js +13 -2
  127. package/dist/src/ui/auth/useAuth.test.js.map +1 -1
  128. package/dist/src/ui/commands/aboutCommand.js +3 -3
  129. package/dist/src/ui/commands/aboutCommand.js.map +1 -1
  130. package/dist/src/ui/commands/aboutCommand.test.js +3 -6
  131. package/dist/src/ui/commands/aboutCommand.test.js.map +1 -1
  132. package/dist/src/ui/commands/authCommand.js +1 -0
  133. package/dist/src/ui/commands/authCommand.js.map +1 -1
  134. package/dist/src/ui/commands/bugCommand.js +3 -3
  135. package/dist/src/ui/commands/bugCommand.js.map +1 -1
  136. package/dist/src/ui/commands/bugCommand.test.js +3 -3
  137. package/dist/src/ui/commands/bugCommand.test.js.map +1 -1
  138. package/dist/src/ui/commands/chatCommand.js +8 -2
  139. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  140. package/dist/src/ui/commands/chatCommand.test.js +16 -16
  141. package/dist/src/ui/commands/chatCommand.test.js.map +1 -1
  142. package/dist/src/ui/commands/clearCommand.js +19 -1
  143. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  144. package/dist/src/ui/commands/clearCommand.test.js +2 -0
  145. package/dist/src/ui/commands/clearCommand.test.js.map +1 -1
  146. package/dist/src/ui/commands/compressCommand.js +1 -0
  147. package/dist/src/ui/commands/compressCommand.js.map +1 -1
  148. package/dist/src/ui/commands/copyCommand.js +1 -0
  149. package/dist/src/ui/commands/copyCommand.js.map +1 -1
  150. package/dist/src/ui/commands/corgiCommand.js +1 -0
  151. package/dist/src/ui/commands/corgiCommand.js.map +1 -1
  152. package/dist/src/ui/commands/directoryCommand.js +1 -0
  153. package/dist/src/ui/commands/directoryCommand.js.map +1 -1
  154. package/dist/src/ui/commands/directoryCommand.test.js +2 -0
  155. package/dist/src/ui/commands/directoryCommand.test.js.map +1 -1
  156. package/dist/src/ui/commands/docsCommand.js +1 -0
  157. package/dist/src/ui/commands/docsCommand.js.map +1 -1
  158. package/dist/src/ui/commands/editorCommand.js +1 -0
  159. package/dist/src/ui/commands/editorCommand.js.map +1 -1
  160. package/dist/src/ui/commands/extensionsCommand.js +8 -0
  161. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  162. package/dist/src/ui/commands/helpCommand.js +1 -0
  163. package/dist/src/ui/commands/helpCommand.js.map +1 -1
  164. package/dist/src/ui/commands/hooksCommand.d.ts +7 -0
  165. package/dist/src/ui/commands/hooksCommand.js +207 -0
  166. package/dist/src/ui/commands/hooksCommand.js.map +1 -0
  167. package/dist/src/ui/commands/hooksCommand.test.d.ts +6 -0
  168. package/dist/src/ui/commands/hooksCommand.test.js +396 -0
  169. package/dist/src/ui/commands/hooksCommand.test.js.map +1 -0
  170. package/dist/src/ui/commands/ideCommand.js +6 -0
  171. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  172. package/dist/src/ui/commands/ideCommand.test.js.map +1 -1
  173. package/dist/src/ui/commands/initCommand.js +11 -50
  174. package/dist/src/ui/commands/initCommand.js.map +1 -1
  175. package/dist/src/ui/commands/initCommand.test.js.map +1 -1
  176. package/dist/src/ui/commands/mcpCommand.js +32 -8
  177. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  178. package/dist/src/ui/commands/mcpCommand.test.js +29 -0
  179. package/dist/src/ui/commands/mcpCommand.test.js.map +1 -1
  180. package/dist/src/ui/commands/memoryCommand.js +5 -0
  181. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  182. package/dist/src/ui/commands/modelCommand.js +11 -5
  183. package/dist/src/ui/commands/modelCommand.js.map +1 -1
  184. package/dist/src/ui/commands/modelCommand.test.js +12 -1
  185. package/dist/src/ui/commands/modelCommand.test.js.map +1 -1
  186. package/dist/src/ui/commands/permissionsCommand.js +2 -0
  187. package/dist/src/ui/commands/permissionsCommand.js.map +1 -1
  188. package/dist/src/ui/commands/policiesCommand.js +2 -0
  189. package/dist/src/ui/commands/policiesCommand.js.map +1 -1
  190. package/dist/src/ui/commands/privacyCommand.js +1 -0
  191. package/dist/src/ui/commands/privacyCommand.js.map +1 -1
  192. package/dist/src/ui/commands/profileCommand.js +1 -0
  193. package/dist/src/ui/commands/profileCommand.js.map +1 -1
  194. package/dist/src/ui/commands/quitCommand.js +1 -0
  195. package/dist/src/ui/commands/quitCommand.js.map +1 -1
  196. package/dist/src/ui/commands/restoreCommand.d.ts +1 -1
  197. package/dist/src/ui/commands/restoreCommand.js +38 -32
  198. package/dist/src/ui/commands/restoreCommand.js.map +1 -1
  199. package/dist/src/ui/commands/restoreCommand.test.js +6 -6
  200. package/dist/src/ui/commands/restoreCommand.test.js.map +1 -1
  201. package/dist/src/ui/commands/resumeCommand.js +1 -0
  202. package/dist/src/ui/commands/resumeCommand.js.map +1 -1
  203. package/dist/src/ui/commands/settingsCommand.js +1 -0
  204. package/dist/src/ui/commands/settingsCommand.js.map +1 -1
  205. package/dist/src/ui/commands/setupGithubCommand.js +4 -1
  206. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  207. package/dist/src/ui/commands/setupGithubCommand.test.js +55 -14
  208. package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -1
  209. package/dist/src/ui/commands/statsCommand.js +15 -5
  210. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  211. package/dist/src/ui/commands/statsCommand.test.js +17 -0
  212. package/dist/src/ui/commands/statsCommand.test.js.map +1 -1
  213. package/dist/src/ui/commands/terminalSetupCommand.js +2 -0
  214. package/dist/src/ui/commands/terminalSetupCommand.js.map +1 -1
  215. package/dist/src/ui/commands/themeCommand.js +1 -0
  216. package/dist/src/ui/commands/themeCommand.js.map +1 -1
  217. package/dist/src/ui/commands/toolsCommand.js +1 -0
  218. package/dist/src/ui/commands/toolsCommand.js.map +1 -1
  219. package/dist/src/ui/commands/types.d.ts +9 -37
  220. package/dist/src/ui/commands/types.js.map +1 -1
  221. package/dist/src/ui/commands/vimCommand.js +1 -0
  222. package/dist/src/ui/commands/vimCommand.js.map +1 -1
  223. package/dist/src/ui/components/AnsiOutput.js +1 -1
  224. package/dist/src/ui/components/AnsiOutput.js.map +1 -1
  225. package/dist/src/ui/components/AppHeader.test.js +8 -0
  226. package/dist/src/ui/components/AppHeader.test.js.map +1 -1
  227. package/dist/src/ui/components/AsciiArt.d.ts +6 -6
  228. package/dist/src/ui/components/AsciiArt.js +6 -6
  229. package/dist/src/ui/components/ConfigInitDisplay.js +15 -2
  230. package/dist/src/ui/components/ConfigInitDisplay.js.map +1 -1
  231. package/dist/src/ui/components/ConfigInitDisplay.test.js +34 -4
  232. package/dist/src/ui/components/ConfigInitDisplay.test.js.map +1 -1
  233. package/dist/src/ui/components/DetailedMessagesDisplay.js +3 -3
  234. package/dist/src/ui/components/DetailedMessagesDisplay.js.map +1 -1
  235. package/dist/src/ui/components/DetailedMessagesDisplay.test.js +2 -12
  236. package/dist/src/ui/components/DetailedMessagesDisplay.test.js.map +1 -1
  237. package/dist/src/ui/components/DialogManager.js +1 -1
  238. package/dist/src/ui/components/DialogManager.js.map +1 -1
  239. package/dist/src/ui/components/EditorSettingsDialog.test.js +7 -0
  240. package/dist/src/ui/components/EditorSettingsDialog.test.js.map +1 -1
  241. package/dist/src/ui/components/FolderTrustDialog.js +6 -2
  242. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
  243. package/dist/src/ui/components/FolderTrustDialog.test.js +2 -1
  244. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
  245. package/dist/src/ui/components/Footer.js +2 -2
  246. package/dist/src/ui/components/Footer.js.map +1 -1
  247. package/dist/src/ui/components/GeminiRespondingSpinner.test.js +3 -0
  248. package/dist/src/ui/components/GeminiRespondingSpinner.test.js.map +1 -1
  249. package/dist/src/ui/components/Header.js +3 -1
  250. package/dist/src/ui/components/Header.js.map +1 -1
  251. package/dist/src/ui/components/Header.test.js +3 -1
  252. package/dist/src/ui/components/Header.test.js.map +1 -1
  253. package/dist/src/ui/components/HistoryItemDisplay.js +2 -1
  254. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  255. package/dist/src/ui/components/IdeTrustChangeDialog.js +1 -0
  256. package/dist/src/ui/components/IdeTrustChangeDialog.js.map +1 -1
  257. package/dist/src/ui/components/InputPrompt.d.ts +1 -1
  258. package/dist/src/ui/components/InputPrompt.js +45 -18
  259. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  260. package/dist/src/ui/components/InputPrompt.test.js +286 -17
  261. package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
  262. package/dist/src/ui/components/ModelDialog.js +116 -39
  263. package/dist/src/ui/components/ModelDialog.js.map +1 -1
  264. package/dist/src/ui/components/ModelDialog.test.js +157 -148
  265. package/dist/src/ui/components/ModelDialog.test.js.map +1 -1
  266. package/dist/src/ui/components/ModelStatsDisplay.js +3 -3
  267. package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -1
  268. package/dist/src/ui/components/ModelStatsDisplay.test.js +9 -2
  269. package/dist/src/ui/components/ModelStatsDisplay.test.js.map +1 -1
  270. package/dist/src/ui/components/MultiFolderTrustDialog.js +1 -0
  271. package/dist/src/ui/components/MultiFolderTrustDialog.js.map +1 -1
  272. package/dist/src/ui/components/Notifications.js +2 -0
  273. package/dist/src/ui/components/Notifications.js.map +1 -1
  274. package/dist/src/ui/components/PermissionsModifyTrustDialog.js +1 -0
  275. package/dist/src/ui/components/PermissionsModifyTrustDialog.js.map +1 -1
  276. package/dist/src/ui/components/ProQuotaDialog.js +14 -12
  277. package/dist/src/ui/components/ProQuotaDialog.js.map +1 -1
  278. package/dist/src/ui/components/ProQuotaDialog.test.js +20 -21
  279. package/dist/src/ui/components/ProQuotaDialog.test.js.map +1 -1
  280. package/dist/src/ui/components/QuittingDisplay.test.js.map +1 -1
  281. package/dist/src/ui/components/SessionBrowser.js +2 -0
  282. package/dist/src/ui/components/SessionBrowser.js.map +1 -1
  283. package/dist/src/ui/components/SessionSummaryDisplay.test.js +1 -0
  284. package/dist/src/ui/components/SessionSummaryDisplay.test.js.map +1 -1
  285. package/dist/src/ui/components/SettingsDialog.js +135 -66
  286. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  287. package/dist/src/ui/components/SettingsDialog.test.js +98 -10
  288. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  289. package/dist/src/ui/components/ShellConfirmationDialog.js +4 -4
  290. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
  291. package/dist/src/ui/components/ShellConfirmationDialog.test.js +4 -4
  292. package/dist/src/ui/components/ShellConfirmationDialog.test.js.map +1 -1
  293. package/dist/src/ui/components/StatsDisplay.d.ts +2 -0
  294. package/dist/src/ui/components/StatsDisplay.js +88 -12
  295. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  296. package/dist/src/ui/components/StatsDisplay.test.js +94 -7
  297. package/dist/src/ui/components/StatsDisplay.test.js.map +1 -1
  298. package/dist/src/ui/components/ToolStatsDisplay.js.map +1 -1
  299. package/dist/src/ui/components/messages/Todo.js.map +1 -1
  300. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +54 -19
  301. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  302. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +40 -4
  303. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
  304. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +45 -1
  305. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
  306. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.d.ts +1 -1
  307. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js +1 -1
  308. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js.map +1 -1
  309. package/dist/src/ui/components/shared/VirtualizedList.js.map +1 -1
  310. package/dist/src/ui/components/shared/text-buffer.js +46 -39
  311. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  312. package/dist/src/ui/components/shared/text-buffer.test.js +100 -0
  313. package/dist/src/ui/components/shared/text-buffer.test.js.map +1 -1
  314. package/dist/src/ui/components/views/HooksList.d.ts +22 -0
  315. package/dist/src/ui/components/views/HooksList.js +23 -0
  316. package/dist/src/ui/components/views/HooksList.js.map +1 -0
  317. package/dist/src/ui/components/views/McpStatus.d.ts +2 -1
  318. package/dist/src/ui/components/views/McpStatus.js +13 -3
  319. package/dist/src/ui/components/views/McpStatus.js.map +1 -1
  320. package/dist/src/ui/components/views/McpStatus.test.js +13 -0
  321. package/dist/src/ui/components/views/McpStatus.test.js.map +1 -1
  322. package/dist/src/ui/constants/tips.js +0 -1
  323. package/dist/src/ui/constants/tips.js.map +1 -1
  324. package/dist/src/ui/contexts/KeypressContext.test.js +6 -0
  325. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
  326. package/dist/src/ui/contexts/SessionContext.d.ts +1 -0
  327. package/dist/src/ui/contexts/SessionContext.js +2 -1
  328. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  329. package/dist/src/ui/contexts/SessionContext.test.js +3 -0
  330. package/dist/src/ui/contexts/SessionContext.test.js.map +1 -1
  331. package/dist/src/ui/contexts/UIActionsContext.d.ts +1 -1
  332. package/dist/src/ui/hooks/atCommandProcessor.d.ts +7 -6
  333. package/dist/src/ui/hooks/atCommandProcessor.js +141 -28
  334. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  335. package/dist/src/ui/hooks/atCommandProcessor.test.js +124 -32
  336. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -1
  337. package/dist/src/ui/hooks/shellCommandProcessor.js +2 -0
  338. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  339. package/dist/src/ui/hooks/slashCommandProcessor.js +3 -0
  340. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  341. package/dist/src/ui/hooks/useAtCompletion.js +52 -2
  342. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
  343. package/dist/src/ui/hooks/useAtCompletion.test.js +21 -0
  344. package/dist/src/ui/hooks/useAtCompletion.test.js.map +1 -1
  345. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +1 -1
  346. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -1
  347. package/dist/src/ui/hooks/useCommandCompletion.d.ts +10 -1
  348. package/dist/src/ui/hooks/useCommandCompletion.js +50 -6
  349. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
  350. package/dist/src/ui/hooks/useCommandCompletion.test.js +4 -5
  351. package/dist/src/ui/hooks/useCommandCompletion.test.js.map +1 -1
  352. package/dist/src/ui/hooks/useExtensionUpdates.js +2 -0
  353. package/dist/src/ui/hooks/useExtensionUpdates.js.map +1 -1
  354. package/dist/src/ui/hooks/useFolderTrust.js +5 -3
  355. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
  356. package/dist/src/ui/hooks/useFolderTrust.test.js +4 -4
  357. package/dist/src/ui/hooks/useFolderTrust.test.js.map +1 -1
  358. package/dist/src/ui/hooks/useGeminiStream.js +19 -56
  359. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  360. package/dist/src/ui/hooks/useGeminiStream.test.js +4 -0
  361. package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
  362. package/dist/src/ui/hooks/useGitBranchName.js +3 -0
  363. package/dist/src/ui/hooks/useGitBranchName.js.map +1 -1
  364. package/dist/src/ui/hooks/useIdeTrustListener.js +2 -0
  365. package/dist/src/ui/hooks/useIdeTrustListener.js.map +1 -1
  366. package/dist/src/ui/hooks/useIncludeDirsTrust.js +2 -0
  367. package/dist/src/ui/hooks/useIncludeDirsTrust.js.map +1 -1
  368. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js.map +1 -1
  369. package/dist/src/ui/hooks/useLoadingIndicator.test.js +1 -0
  370. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  371. package/dist/src/ui/hooks/useMessageQueue.d.ts +1 -1
  372. package/dist/src/ui/hooks/useMessageQueue.js +8 -12
  373. package/dist/src/ui/hooks/useMessageQueue.js.map +1 -1
  374. package/dist/src/ui/hooks/useMessageQueue.test.js +7 -19
  375. package/dist/src/ui/hooks/useMessageQueue.test.js.map +1 -1
  376. package/dist/src/ui/hooks/usePrivacySettings.js +5 -16
  377. package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -1
  378. package/dist/src/ui/hooks/usePrivacySettings.test.js +3 -9
  379. package/dist/src/ui/hooks/usePrivacySettings.test.js.map +1 -1
  380. package/dist/src/ui/hooks/usePromptCompletion.js +1 -0
  381. package/dist/src/ui/hooks/usePromptCompletion.js.map +1 -1
  382. package/dist/src/ui/hooks/useQuotaAndFallback.js +20 -21
  383. package/dist/src/ui/hooks/useQuotaAndFallback.js.map +1 -1
  384. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +7 -7
  385. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +1 -1
  386. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  387. package/dist/src/ui/hooks/useSelectionList.js.map +1 -1
  388. package/dist/src/ui/hooks/useSelectionList.test.js +2 -0
  389. package/dist/src/ui/hooks/useSelectionList.test.js.map +1 -1
  390. package/dist/src/ui/hooks/useSessionResume.js +1 -0
  391. package/dist/src/ui/hooks/useSessionResume.js.map +1 -1
  392. package/dist/src/ui/hooks/useShellHistory.js +2 -0
  393. package/dist/src/ui/hooks/useShellHistory.js.map +1 -1
  394. package/dist/src/ui/hooks/useSlashCompletion.d.ts +3 -0
  395. package/dist/src/ui/hooks/useSlashCompletion.js +21 -0
  396. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
  397. package/dist/src/ui/hooks/useSnowfall.d.ts +6 -0
  398. package/dist/src/ui/hooks/useSnowfall.js +126 -0
  399. package/dist/src/ui/hooks/useSnowfall.js.map +1 -0
  400. package/dist/src/ui/hooks/useSnowfall.test.d.ts +6 -0
  401. package/dist/src/ui/hooks/useSnowfall.test.js +88 -0
  402. package/dist/src/ui/hooks/useSnowfall.test.js.map +1 -0
  403. package/dist/src/ui/hooks/useToolScheduler.test.js +14 -4
  404. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  405. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +1 -0
  406. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -1
  407. package/dist/src/ui/types.d.ts +28 -3
  408. package/dist/src/ui/types.js +1 -0
  409. package/dist/src/ui/types.js.map +1 -1
  410. package/dist/src/ui/utils/InlineMarkdownRenderer.js +1 -1
  411. package/dist/src/ui/utils/InlineMarkdownRenderer.test.d.ts +6 -0
  412. package/dist/src/ui/utils/InlineMarkdownRenderer.test.js +21 -0
  413. package/dist/src/ui/utils/InlineMarkdownRenderer.test.js.map +1 -0
  414. package/dist/src/ui/utils/clipboardUtils.d.ts +25 -0
  415. package/dist/src/ui/utils/clipboardUtils.js +98 -12
  416. package/dist/src/ui/utils/clipboardUtils.js.map +1 -1
  417. package/dist/src/ui/utils/clipboardUtils.test.js +123 -1
  418. package/dist/src/ui/utils/clipboardUtils.test.js.map +1 -1
  419. package/dist/src/ui/utils/commandUtils.d.ts +12 -0
  420. package/dist/src/ui/utils/commandUtils.js +125 -1
  421. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  422. package/dist/src/ui/utils/commandUtils.test.js +163 -6
  423. package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
  424. package/dist/src/ui/utils/computeStats.js +2 -0
  425. package/dist/src/ui/utils/computeStats.js.map +1 -1
  426. package/dist/src/ui/utils/computeStats.test.js +9 -0
  427. package/dist/src/ui/utils/computeStats.test.js.map +1 -1
  428. package/dist/src/ui/utils/highlight.js +5 -1
  429. package/dist/src/ui/utils/highlight.js.map +1 -1
  430. package/dist/src/ui/utils/terminalSetup.test.js +5 -0
  431. package/dist/src/ui/utils/terminalSetup.test.js.map +1 -1
  432. package/dist/src/ui/utils/textOutput.d.ts +2 -0
  433. package/dist/src/ui/utils/textOutput.js +5 -1
  434. package/dist/src/ui/utils/textOutput.js.map +1 -1
  435. package/dist/src/utils/cleanup.d.ts +6 -0
  436. package/dist/src/utils/cleanup.js +19 -1
  437. package/dist/src/utils/cleanup.js.map +1 -1
  438. package/dist/src/utils/deepMerge.js +7 -2
  439. package/dist/src/utils/deepMerge.js.map +1 -1
  440. package/dist/src/utils/deepMerge.test.js +58 -0
  441. package/dist/src/utils/deepMerge.test.js.map +1 -1
  442. package/dist/src/utils/envVarResolver.js.map +1 -1
  443. package/dist/src/utils/envVarResolver.test.js.map +1 -1
  444. package/dist/src/utils/errors.js +4 -4
  445. package/dist/src/utils/errors.js.map +1 -1
  446. package/dist/src/utils/errors.test.js +20 -2
  447. package/dist/src/utils/errors.test.js.map +1 -1
  448. package/dist/src/utils/handleAutoUpdate.d.ts +1 -1
  449. package/dist/src/utils/handleAutoUpdate.js +7 -10
  450. package/dist/src/utils/handleAutoUpdate.js.map +1 -1
  451. package/dist/src/utils/handleAutoUpdate.test.js +13 -11
  452. package/dist/src/utils/handleAutoUpdate.test.js.map +1 -1
  453. package/dist/src/utils/installationInfo.js +1 -1
  454. package/dist/src/utils/installationInfo.js.map +1 -1
  455. package/dist/src/utils/installationInfo.test.js +1 -1
  456. package/dist/src/utils/installationInfo.test.js.map +1 -1
  457. package/dist/src/utils/sandbox.js +2 -2
  458. package/dist/src/utils/sandbox.js.map +1 -1
  459. package/dist/src/utils/sandboxUtils.js +3 -2
  460. package/dist/src/utils/sandboxUtils.js.map +1 -1
  461. package/dist/src/utils/sandboxUtils.test.js +3 -0
  462. package/dist/src/utils/sandboxUtils.test.js.map +1 -1
  463. package/dist/src/utils/sessionCleanup.integration.test.js +3 -3
  464. package/dist/src/utils/sessionCleanup.integration.test.js.map +1 -1
  465. package/dist/src/utils/sessionUtils.d.ts +9 -0
  466. package/dist/src/utils/sessionUtils.js +16 -1
  467. package/dist/src/utils/sessionUtils.js.map +1 -1
  468. package/dist/src/utils/sessionUtils.test.js +201 -1
  469. package/dist/src/utils/sessionUtils.test.js.map +1 -1
  470. package/dist/src/utils/sessions.js +6 -4
  471. package/dist/src/utils/sessions.js.map +1 -1
  472. package/dist/src/utils/sessions.test.js +26 -0
  473. package/dist/src/utils/sessions.test.js.map +1 -1
  474. package/dist/src/validateNonInterActiveAuth.js +3 -3
  475. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  476. package/dist/src/zed-integration/acp.js +4 -4
  477. package/dist/src/zed-integration/acp.js.map +1 -1
  478. package/dist/src/zed-integration/acp.test.js +8 -21
  479. package/dist/src/zed-integration/acp.test.js.map +1 -1
  480. package/dist/src/zed-integration/connection.js +2 -0
  481. package/dist/src/zed-integration/connection.js.map +1 -1
  482. package/dist/src/zed-integration/fileSystemService.d.ts +0 -1
  483. package/dist/src/zed-integration/fileSystemService.js +0 -3
  484. package/dist/src/zed-integration/fileSystemService.js.map +1 -1
  485. package/dist/src/zed-integration/fileSystemService.test.js +0 -8
  486. package/dist/src/zed-integration/fileSystemService.test.js.map +1 -1
  487. package/dist/src/zed-integration/schema.d.ts +0 -46
  488. package/dist/src/zed-integration/schema.js +0 -1
  489. package/dist/src/zed-integration/schema.js.map +1 -1
  490. package/dist/src/zed-integration/zedIntegration.js +17 -11
  491. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  492. package/dist/src/zed-integration/zedIntegration.test.js +0 -5
  493. package/dist/src/zed-integration/zedIntegration.test.js.map +1 -1
  494. package/dist/tsconfig.tsbuildinfo +1 -1
  495. package/package.json +3 -3
  496. package/dist/src/utils/version.js +0 -15
  497. package/dist/src/utils/version.js.map +0 -1
  498. package/dist/src/utils/version.test.js +0 -39
  499. package/dist/src/utils/version.test.js.map +0 -1
  500. /package/dist/src/{utils/version.test.d.ts → commands/hooks/migrate.test.d.ts} +0 -0
@@ -12,6 +12,7 @@ import { enableCommand } from './extensions/enable.js';
12
12
  import { linkCommand } from './extensions/link.js';
13
13
  import { newCommand } from './extensions/new.js';
14
14
  import { validateCommand } from './extensions/validate.js';
15
+ import { settingsCommand } from './extensions/settings.js';
15
16
  import { initializeOutputListenersAndFlush } from '../gemini.js';
16
17
  export const extensionsCommand = {
17
18
  command: 'extensions <command>',
@@ -28,6 +29,7 @@ export const extensionsCommand = {
28
29
  .command(linkCommand)
29
30
  .command(newCommand)
30
31
  .command(validateCommand)
32
+ .command(settingsCommand)
31
33
  .demandCommand(1, 'You need at least one command before continuing.')
32
34
  .version(false),
33
35
  handler: () => {
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../../src/commands/extensions.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,iCAAiC,EAAE,MAAM,cAAc,CAAC;AAEjE,MAAM,CAAC,MAAM,iBAAiB,GAAkB;IAC9C,OAAO,EAAE,sBAAsB;IAC/B,OAAO,EAAE,CAAC,WAAW,CAAC;IACtB,QAAQ,EAAE,6BAA6B;IACvC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,UAAU,CAAC,GAAG,EAAE,CAAC,iCAAiC,EAAE,CAAC;SACrD,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,gBAAgB,CAAC;SACzB,OAAO,CAAC,WAAW,CAAC;SACpB,OAAO,CAAC,aAAa,CAAC;SACtB,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,aAAa,CAAC;SACtB,OAAO,CAAC,WAAW,CAAC;SACpB,OAAO,CAAC,UAAU,CAAC;SACnB,OAAO,CAAC,eAAe,CAAC;SACxB,aAAa,CAAC,CAAC,EAAE,kDAAkD,CAAC;SACpE,OAAO,CAAC,KAAK,CAAC;IACnB,OAAO,EAAE,GAAG,EAAE;QACZ,4DAA4D;QAC5D,iCAAiC;IACnC,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../../src/commands/extensions.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,iCAAiC,EAAE,MAAM,cAAc,CAAC;AAEjE,MAAM,CAAC,MAAM,iBAAiB,GAAkB;IAC9C,OAAO,EAAE,sBAAsB;IAC/B,OAAO,EAAE,CAAC,WAAW,CAAC;IACtB,QAAQ,EAAE,6BAA6B;IACvC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,UAAU,CAAC,GAAG,EAAE,CAAC,iCAAiC,EAAE,CAAC;SACrD,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,gBAAgB,CAAC;SACzB,OAAO,CAAC,WAAW,CAAC;SACpB,OAAO,CAAC,aAAa,CAAC;SACtB,OAAO,CAAC,cAAc,CAAC;SACvB,OAAO,CAAC,aAAa,CAAC;SACtB,OAAO,CAAC,WAAW,CAAC;SACpB,OAAO,CAAC,UAAU,CAAC;SACnB,OAAO,CAAC,eAAe,CAAC;SACxB,OAAO,CAAC,eAAe,CAAC;SACxB,aAAa,CAAC,CAAC,EAAE,kDAAkD,CAAC;SACpE,OAAO,CAAC,KAAK,CAAC;IACnB,OAAO,EAAE,GAAG,EAAE;QACZ,4DAA4D;QAC5D,iCAAiC;IACnC,CAAC;CACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { CommandModule } from 'yargs';
7
+ /**
8
+ * Handle migration from Claude Code
9
+ */
10
+ export declare function handleMigrateFromClaude(): Promise<void>;
11
+ export declare const migrateCommand: CommandModule;
@@ -0,0 +1,206 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import * as fs from 'node:fs';
7
+ import * as path from 'node:path';
8
+ import { debugLogger, getErrorMessage } from '@google/gemini-cli-core';
9
+ import { loadSettings, SettingScope } from '../../config/settings.js';
10
+ import { exitCli } from '../utils.js';
11
+ import stripJsonComments from 'strip-json-comments';
12
+ /**
13
+ * Mapping from Claude Code event names to Gemini event names
14
+ */
15
+ const EVENT_MAPPING = {
16
+ PreToolUse: 'BeforeTool',
17
+ PostToolUse: 'AfterTool',
18
+ UserPromptSubmit: 'BeforeAgent',
19
+ Stop: 'AfterAgent',
20
+ SubAgentStop: 'AfterAgent', // Gemini doesn't have sub-agents, map to AfterAgent
21
+ SessionStart: 'SessionStart',
22
+ SessionEnd: 'SessionEnd',
23
+ PreCompact: 'PreCompress',
24
+ Notification: 'Notification',
25
+ };
26
+ /**
27
+ * Mapping from Claude Code tool names to Gemini tool names
28
+ */
29
+ const TOOL_NAME_MAPPING = {
30
+ Edit: 'replace',
31
+ Bash: 'run_shell_command',
32
+ Read: 'read_file',
33
+ Write: 'write_file',
34
+ Glob: 'glob',
35
+ Grep: 'grep',
36
+ LS: 'ls',
37
+ };
38
+ /**
39
+ * Transform a matcher regex to update tool names from Claude to Gemini
40
+ */
41
+ function transformMatcher(matcher) {
42
+ if (!matcher)
43
+ return matcher;
44
+ let transformed = matcher;
45
+ for (const [claudeName, geminiName] of Object.entries(TOOL_NAME_MAPPING)) {
46
+ // Replace exact matches and matches within regex alternations
47
+ transformed = transformed.replace(new RegExp(`\\b${claudeName}\\b`, 'g'), geminiName);
48
+ }
49
+ return transformed;
50
+ }
51
+ /**
52
+ * Migrate a Claude Code hook configuration to Gemini format
53
+ */
54
+ function migrateClaudeHook(claudeHook) {
55
+ if (!claudeHook || typeof claudeHook !== 'object') {
56
+ return claudeHook;
57
+ }
58
+ const hook = claudeHook;
59
+ const migrated = {};
60
+ // Map command field
61
+ if ('command' in hook) {
62
+ migrated['command'] = hook['command'];
63
+ // Replace CLAUDE_PROJECT_DIR with GEMINI_PROJECT_DIR in command
64
+ if (typeof migrated['command'] === 'string') {
65
+ migrated['command'] = migrated['command'].replace(/\$CLAUDE_PROJECT_DIR/g, '$GEMINI_PROJECT_DIR');
66
+ }
67
+ }
68
+ // Map type field
69
+ if ('type' in hook && hook['type'] === 'command') {
70
+ migrated['type'] = 'command';
71
+ }
72
+ // Map timeout field (Claude uses seconds, Gemini uses seconds)
73
+ if ('timeout' in hook && typeof hook['timeout'] === 'number') {
74
+ migrated['timeout'] = hook['timeout'];
75
+ }
76
+ return migrated;
77
+ }
78
+ /**
79
+ * Migrate Claude Code hooks configuration to Gemini format
80
+ */
81
+ function migrateClaudeHooks(claudeConfig) {
82
+ if (!claudeConfig || typeof claudeConfig !== 'object') {
83
+ return {};
84
+ }
85
+ const config = claudeConfig;
86
+ const geminiHooks = {};
87
+ // Check if there's a hooks section
88
+ const hooksSection = config['hooks'];
89
+ if (!hooksSection || typeof hooksSection !== 'object') {
90
+ return {};
91
+ }
92
+ for (const [eventName, eventConfig] of Object.entries(hooksSection)) {
93
+ // Map event name
94
+ const geminiEventName = EVENT_MAPPING[eventName] || eventName;
95
+ if (!Array.isArray(eventConfig)) {
96
+ continue;
97
+ }
98
+ // Migrate each hook definition
99
+ const migratedDefinitions = eventConfig.map((def) => {
100
+ if (!def || typeof def !== 'object') {
101
+ return def;
102
+ }
103
+ const definition = def;
104
+ const migratedDef = {};
105
+ // Transform matcher
106
+ if ('matcher' in definition &&
107
+ typeof definition['matcher'] === 'string') {
108
+ migratedDef['matcher'] = transformMatcher(definition['matcher']);
109
+ }
110
+ // Copy sequential flag
111
+ if ('sequential' in definition) {
112
+ migratedDef['sequential'] = definition['sequential'];
113
+ }
114
+ // Migrate hooks array
115
+ if ('hooks' in definition && Array.isArray(definition['hooks'])) {
116
+ migratedDef['hooks'] = definition['hooks'].map(migrateClaudeHook);
117
+ }
118
+ return migratedDef;
119
+ });
120
+ geminiHooks[geminiEventName] = migratedDefinitions;
121
+ }
122
+ return geminiHooks;
123
+ }
124
+ /**
125
+ * Handle migration from Claude Code
126
+ */
127
+ export async function handleMigrateFromClaude() {
128
+ const workingDir = process.cwd();
129
+ // Look for Claude settings in .claude directory
130
+ const claudeDir = path.join(workingDir, '.claude');
131
+ const claudeSettingsPath = path.join(claudeDir, 'settings.json');
132
+ const claudeLocalSettingsPath = path.join(claudeDir, 'settings.local.json');
133
+ let claudeSettings = null;
134
+ let sourceFile = '';
135
+ // Try to read settings.local.json first, then settings.json
136
+ if (fs.existsSync(claudeLocalSettingsPath)) {
137
+ sourceFile = claudeLocalSettingsPath;
138
+ try {
139
+ const content = fs.readFileSync(claudeLocalSettingsPath, 'utf-8');
140
+ claudeSettings = JSON.parse(stripJsonComments(content));
141
+ }
142
+ catch (error) {
143
+ debugLogger.error(`Error reading ${claudeLocalSettingsPath}: ${getErrorMessage(error)}`);
144
+ }
145
+ }
146
+ else if (fs.existsSync(claudeSettingsPath)) {
147
+ sourceFile = claudeSettingsPath;
148
+ try {
149
+ const content = fs.readFileSync(claudeSettingsPath, 'utf-8');
150
+ claudeSettings = JSON.parse(stripJsonComments(content));
151
+ }
152
+ catch (error) {
153
+ debugLogger.error(`Error reading ${claudeSettingsPath}: ${getErrorMessage(error)}`);
154
+ }
155
+ }
156
+ else {
157
+ debugLogger.error('No Claude Code settings found in .claude directory. Expected settings.json or settings.local.json');
158
+ return;
159
+ }
160
+ if (!claudeSettings) {
161
+ return;
162
+ }
163
+ debugLogger.log(`Found Claude Code settings in: ${sourceFile}`);
164
+ // Migrate hooks
165
+ const migratedHooks = migrateClaudeHooks(claudeSettings);
166
+ if (Object.keys(migratedHooks).length === 0) {
167
+ debugLogger.log('No hooks found in Claude Code settings to migrate.');
168
+ return;
169
+ }
170
+ debugLogger.log(`Migrating ${Object.keys(migratedHooks).length} hook event(s)...`);
171
+ // Load current Gemini settings
172
+ const settings = loadSettings(workingDir);
173
+ // Merge migrated hooks with existing hooks
174
+ const existingHooks = settings.merged.hooks || {};
175
+ const mergedHooks = { ...existingHooks, ...migratedHooks };
176
+ // Update settings (setValue automatically saves)
177
+ try {
178
+ settings.setValue(SettingScope.Workspace, 'hooks', mergedHooks);
179
+ debugLogger.log('✓ Hooks successfully migrated to .cell-cli/settings.json');
180
+ debugLogger.log('\nMigration complete! Please review the migrated hooks in .cell-cli/settings.json');
181
+ debugLogger.log('Note: Set tools.enableHooks to true in your settings to enable the hook system.');
182
+ }
183
+ catch (error) {
184
+ debugLogger.error(`Error saving migrated hooks: ${getErrorMessage(error)}`);
185
+ }
186
+ }
187
+ export const migrateCommand = {
188
+ command: 'migrate',
189
+ describe: 'Migrate hooks from Claude Code to Cell CLI',
190
+ builder: (yargs) => yargs.option('from-claude', {
191
+ describe: 'Migrate from Claude Code hooks',
192
+ type: 'boolean',
193
+ default: false,
194
+ }),
195
+ handler: async (argv) => {
196
+ const args = argv;
197
+ if (args.fromClaude) {
198
+ await handleMigrateFromClaude();
199
+ }
200
+ else {
201
+ debugLogger.log('Usage: gemini hooks migrate --from-claude\n\nMigrate hooks from Claude Code to Cell CLI format.');
202
+ }
203
+ await exitCli();
204
+ },
205
+ };
206
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../../src/commands/hooks/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,389 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach, afterEach, } from 'vitest';
7
+ import * as fs from 'node:fs';
8
+ import { loadSettings, SettingScope } from '../../config/settings.js';
9
+ import { debugLogger } from '@google/gemini-cli-core';
10
+ import { handleMigrateFromClaude } from './migrate.js';
11
+ vi.mock('node:fs');
12
+ vi.mock('../utils.js', () => ({
13
+ exitCli: vi.fn(),
14
+ }));
15
+ vi.mock('../../config/settings.js', async () => {
16
+ const actual = await vi.importActual('../../config/settings.js');
17
+ return {
18
+ ...actual,
19
+ loadSettings: vi.fn(),
20
+ };
21
+ });
22
+ const mockedLoadSettings = loadSettings;
23
+ const mockedFs = vi.mocked(fs);
24
+ describe('migrate command', () => {
25
+ let mockSetValue;
26
+ let debugLoggerLogSpy;
27
+ let debugLoggerErrorSpy;
28
+ let originalCwd;
29
+ beforeEach(() => {
30
+ vi.resetAllMocks();
31
+ mockSetValue = vi.fn();
32
+ debugLoggerLogSpy = vi
33
+ .spyOn(debugLogger, 'log')
34
+ .mockImplementation(() => { });
35
+ debugLoggerErrorSpy = vi
36
+ .spyOn(debugLogger, 'error')
37
+ .mockImplementation(() => { });
38
+ // Mock process.cwd()
39
+ originalCwd = process.cwd;
40
+ process.cwd = vi.fn(() => '/test/project');
41
+ mockedLoadSettings.mockReturnValue({
42
+ merged: {
43
+ hooks: {},
44
+ },
45
+ setValue: mockSetValue,
46
+ workspace: { path: '/test/project/.cell-cli' },
47
+ });
48
+ });
49
+ afterEach(() => {
50
+ process.cwd = originalCwd;
51
+ vi.restoreAllMocks();
52
+ });
53
+ it('should log error when no Claude settings files exist', async () => {
54
+ mockedFs.existsSync.mockReturnValue(false);
55
+ await handleMigrateFromClaude();
56
+ expect(debugLoggerErrorSpy).toHaveBeenCalledWith('No Claude Code settings found in .claude directory. Expected settings.json or settings.local.json');
57
+ expect(mockSetValue).not.toHaveBeenCalled();
58
+ });
59
+ it('should migrate hooks from settings.json when it exists', async () => {
60
+ const claudeSettings = {
61
+ hooks: {
62
+ PreToolUse: [
63
+ {
64
+ matcher: 'Edit',
65
+ hooks: [
66
+ {
67
+ type: 'command',
68
+ command: 'echo "Before Edit"',
69
+ timeout: 30,
70
+ },
71
+ ],
72
+ },
73
+ ],
74
+ },
75
+ };
76
+ mockedFs.existsSync.mockImplementation((path) => path.toString().endsWith('settings.json'));
77
+ mockedFs.readFileSync.mockReturnValue(JSON.stringify(claudeSettings));
78
+ await handleMigrateFromClaude();
79
+ expect(mockSetValue).toHaveBeenCalledWith(SettingScope.Workspace, 'hooks', expect.objectContaining({
80
+ BeforeTool: expect.arrayContaining([
81
+ expect.objectContaining({
82
+ matcher: 'replace',
83
+ hooks: expect.arrayContaining([
84
+ expect.objectContaining({
85
+ command: 'echo "Before Edit"',
86
+ type: 'command',
87
+ timeout: 30,
88
+ }),
89
+ ]),
90
+ }),
91
+ ]),
92
+ }));
93
+ expect(debugLoggerLogSpy).toHaveBeenCalledWith(expect.stringContaining('Found Claude Code settings'));
94
+ expect(debugLoggerLogSpy).toHaveBeenCalledWith(expect.stringContaining('Migrating 1 hook event'));
95
+ expect(debugLoggerLogSpy).toHaveBeenCalledWith('✓ Hooks successfully migrated to .cell-cli/settings.json');
96
+ });
97
+ it('should prefer settings.local.json over settings.json', async () => {
98
+ const localSettings = {
99
+ hooks: {
100
+ SessionStart: [
101
+ {
102
+ hooks: [
103
+ {
104
+ type: 'command',
105
+ command: 'echo "Local session start"',
106
+ },
107
+ ],
108
+ },
109
+ ],
110
+ },
111
+ };
112
+ mockedFs.existsSync.mockReturnValue(true);
113
+ mockedFs.readFileSync.mockReturnValue(JSON.stringify(localSettings));
114
+ await handleMigrateFromClaude();
115
+ expect(mockedFs.readFileSync).toHaveBeenCalledWith(expect.stringContaining('settings.local.json'), 'utf-8');
116
+ expect(mockSetValue).toHaveBeenCalledWith(SettingScope.Workspace, 'hooks', expect.objectContaining({
117
+ SessionStart: expect.any(Array),
118
+ }));
119
+ });
120
+ it('should migrate all supported event types', async () => {
121
+ const claudeSettings = {
122
+ hooks: {
123
+ PreToolUse: [{ hooks: [{ type: 'command', command: 'echo 1' }] }],
124
+ PostToolUse: [{ hooks: [{ type: 'command', command: 'echo 2' }] }],
125
+ UserPromptSubmit: [{ hooks: [{ type: 'command', command: 'echo 3' }] }],
126
+ Stop: [{ hooks: [{ type: 'command', command: 'echo 4' }] }],
127
+ SubAgentStop: [{ hooks: [{ type: 'command', command: 'echo 5' }] }],
128
+ SessionStart: [{ hooks: [{ type: 'command', command: 'echo 6' }] }],
129
+ SessionEnd: [{ hooks: [{ type: 'command', command: 'echo 7' }] }],
130
+ PreCompact: [{ hooks: [{ type: 'command', command: 'echo 8' }] }],
131
+ Notification: [{ hooks: [{ type: 'command', command: 'echo 9' }] }],
132
+ },
133
+ };
134
+ mockedFs.existsSync.mockReturnValue(true);
135
+ mockedFs.readFileSync.mockReturnValue(JSON.stringify(claudeSettings));
136
+ await handleMigrateFromClaude();
137
+ const migratedHooks = mockSetValue.mock.calls[0][2];
138
+ expect(migratedHooks).toHaveProperty('BeforeTool');
139
+ expect(migratedHooks).toHaveProperty('AfterTool');
140
+ expect(migratedHooks).toHaveProperty('BeforeAgent');
141
+ expect(migratedHooks).toHaveProperty('AfterAgent');
142
+ expect(migratedHooks).toHaveProperty('SessionStart');
143
+ expect(migratedHooks).toHaveProperty('SessionEnd');
144
+ expect(migratedHooks).toHaveProperty('PreCompress');
145
+ expect(migratedHooks).toHaveProperty('Notification');
146
+ });
147
+ it('should transform tool names in matchers', async () => {
148
+ const claudeSettings = {
149
+ hooks: {
150
+ PreToolUse: [
151
+ {
152
+ matcher: 'Edit|Bash|Read|Write|Glob|Grep',
153
+ hooks: [{ type: 'command', command: 'echo "test"' }],
154
+ },
155
+ ],
156
+ },
157
+ };
158
+ mockedFs.existsSync.mockReturnValue(true);
159
+ mockedFs.readFileSync.mockReturnValue(JSON.stringify(claudeSettings));
160
+ await handleMigrateFromClaude();
161
+ const migratedHooks = mockSetValue.mock.calls[0][2];
162
+ expect(migratedHooks.BeforeTool[0].matcher).toBe('replace|run_shell_command|read_file|write_file|glob|grep');
163
+ });
164
+ it('should replace $CLAUDE_PROJECT_DIR with $GEMINI_PROJECT_DIR', async () => {
165
+ const claudeSettings = {
166
+ hooks: {
167
+ PreToolUse: [
168
+ {
169
+ hooks: [
170
+ {
171
+ type: 'command',
172
+ command: 'cd $CLAUDE_PROJECT_DIR && ls',
173
+ },
174
+ ],
175
+ },
176
+ ],
177
+ },
178
+ };
179
+ mockedFs.existsSync.mockReturnValue(true);
180
+ mockedFs.readFileSync.mockReturnValue(JSON.stringify(claudeSettings));
181
+ await handleMigrateFromClaude();
182
+ const migratedHooks = mockSetValue.mock.calls[0][2];
183
+ expect(migratedHooks.BeforeTool[0].hooks[0].command).toBe('cd $GEMINI_PROJECT_DIR && ls');
184
+ });
185
+ it('should preserve sequential flag', async () => {
186
+ const claudeSettings = {
187
+ hooks: {
188
+ PreToolUse: [
189
+ {
190
+ sequential: true,
191
+ hooks: [{ type: 'command', command: 'echo "test"' }],
192
+ },
193
+ ],
194
+ },
195
+ };
196
+ mockedFs.existsSync.mockReturnValue(true);
197
+ mockedFs.readFileSync.mockReturnValue(JSON.stringify(claudeSettings));
198
+ await handleMigrateFromClaude();
199
+ const migratedHooks = mockSetValue.mock.calls[0][2];
200
+ expect(migratedHooks.BeforeTool[0].sequential).toBe(true);
201
+ });
202
+ it('should preserve timeout values', async () => {
203
+ const claudeSettings = {
204
+ hooks: {
205
+ PreToolUse: [
206
+ {
207
+ hooks: [
208
+ {
209
+ type: 'command',
210
+ command: 'echo "test"',
211
+ timeout: 60,
212
+ },
213
+ ],
214
+ },
215
+ ],
216
+ },
217
+ };
218
+ mockedFs.existsSync.mockReturnValue(true);
219
+ mockedFs.readFileSync.mockReturnValue(JSON.stringify(claudeSettings));
220
+ await handleMigrateFromClaude();
221
+ const migratedHooks = mockSetValue.mock.calls[0][2];
222
+ expect(migratedHooks.BeforeTool[0].hooks[0].timeout).toBe(60);
223
+ });
224
+ it('should merge with existing Gemini hooks', async () => {
225
+ const claudeSettings = {
226
+ hooks: {
227
+ PreToolUse: [
228
+ {
229
+ hooks: [{ type: 'command', command: 'echo "claude"' }],
230
+ },
231
+ ],
232
+ },
233
+ };
234
+ mockedLoadSettings.mockReturnValue({
235
+ merged: {
236
+ hooks: {
237
+ AfterTool: [
238
+ {
239
+ hooks: [{ type: 'command', command: 'echo "existing"' }],
240
+ },
241
+ ],
242
+ },
243
+ },
244
+ setValue: mockSetValue,
245
+ workspace: { path: '/test/project/.cell-cli' },
246
+ });
247
+ mockedFs.existsSync.mockReturnValue(true);
248
+ mockedFs.readFileSync.mockReturnValue(JSON.stringify(claudeSettings));
249
+ await handleMigrateFromClaude();
250
+ const migratedHooks = mockSetValue.mock.calls[0][2];
251
+ expect(migratedHooks).toHaveProperty('BeforeTool');
252
+ expect(migratedHooks).toHaveProperty('AfterTool');
253
+ expect(migratedHooks.AfterTool[0].hooks[0].command).toBe('echo "existing"');
254
+ expect(migratedHooks.BeforeTool[0].hooks[0].command).toBe('echo "claude"');
255
+ });
256
+ it('should handle JSON with comments', async () => {
257
+ const claudeSettingsWithComments = `{
258
+ // This is a comment
259
+ "hooks": {
260
+ /* Block comment */
261
+ "PreToolUse": [
262
+ {
263
+ "hooks": [
264
+ {
265
+ "type": "command",
266
+ "command": "echo test" // Inline comment
267
+ }
268
+ ]
269
+ }
270
+ ]
271
+ }
272
+ }`;
273
+ mockedFs.existsSync.mockReturnValue(true);
274
+ mockedFs.readFileSync.mockReturnValue(claudeSettingsWithComments);
275
+ await handleMigrateFromClaude();
276
+ expect(mockSetValue).toHaveBeenCalledWith(SettingScope.Workspace, 'hooks', expect.objectContaining({
277
+ BeforeTool: expect.any(Array),
278
+ }));
279
+ });
280
+ it('should handle malformed JSON gracefully', async () => {
281
+ mockedFs.existsSync.mockReturnValue(true);
282
+ mockedFs.readFileSync.mockReturnValue('{ invalid json }');
283
+ await handleMigrateFromClaude();
284
+ expect(debugLoggerErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Error reading'));
285
+ expect(mockSetValue).not.toHaveBeenCalled();
286
+ });
287
+ it('should log info when no hooks are found in Claude settings', async () => {
288
+ const claudeSettings = {
289
+ someOtherSetting: 'value',
290
+ };
291
+ mockedFs.existsSync.mockReturnValue(true);
292
+ mockedFs.readFileSync.mockReturnValue(JSON.stringify(claudeSettings));
293
+ await handleMigrateFromClaude();
294
+ expect(debugLoggerLogSpy).toHaveBeenCalledWith('No hooks found in Claude Code settings to migrate.');
295
+ expect(mockSetValue).not.toHaveBeenCalled();
296
+ });
297
+ it('should handle setValue errors gracefully', async () => {
298
+ const claudeSettings = {
299
+ hooks: {
300
+ PreToolUse: [
301
+ {
302
+ hooks: [{ type: 'command', command: 'echo "test"' }],
303
+ },
304
+ ],
305
+ },
306
+ };
307
+ mockedFs.existsSync.mockReturnValue(true);
308
+ mockedFs.readFileSync.mockReturnValue(JSON.stringify(claudeSettings));
309
+ mockSetValue.mockImplementation(() => {
310
+ throw new Error('Failed to save');
311
+ });
312
+ await handleMigrateFromClaude();
313
+ expect(debugLoggerErrorSpy).toHaveBeenCalledWith('Error saving migrated hooks: Failed to save');
314
+ });
315
+ it('should handle hooks with matcher but no command', async () => {
316
+ const claudeSettings = {
317
+ hooks: {
318
+ PreToolUse: [
319
+ {
320
+ matcher: 'Edit',
321
+ hooks: [
322
+ {
323
+ type: 'command',
324
+ },
325
+ ],
326
+ },
327
+ ],
328
+ },
329
+ };
330
+ mockedFs.existsSync.mockReturnValue(true);
331
+ mockedFs.readFileSync.mockReturnValue(JSON.stringify(claudeSettings));
332
+ await handleMigrateFromClaude();
333
+ const migratedHooks = mockSetValue.mock.calls[0][2];
334
+ expect(migratedHooks.BeforeTool[0].matcher).toBe('replace');
335
+ expect(migratedHooks.BeforeTool[0].hooks[0].type).toBe('command');
336
+ });
337
+ it('should handle empty hooks array', async () => {
338
+ const claudeSettings = {
339
+ hooks: {
340
+ PreToolUse: [
341
+ {
342
+ hooks: [],
343
+ },
344
+ ],
345
+ },
346
+ };
347
+ mockedFs.existsSync.mockReturnValue(true);
348
+ mockedFs.readFileSync.mockReturnValue(JSON.stringify(claudeSettings));
349
+ await handleMigrateFromClaude();
350
+ const migratedHooks = mockSetValue.mock.calls[0][2];
351
+ expect(migratedHooks.BeforeTool[0].hooks).toEqual([]);
352
+ });
353
+ it('should handle non-array event config gracefully', async () => {
354
+ const claudeSettings = {
355
+ hooks: {
356
+ PreToolUse: 'not an array',
357
+ PostToolUse: [
358
+ {
359
+ hooks: [{ type: 'command', command: 'echo "test"' }],
360
+ },
361
+ ],
362
+ },
363
+ };
364
+ mockedFs.existsSync.mockReturnValue(true);
365
+ mockedFs.readFileSync.mockReturnValue(JSON.stringify(claudeSettings));
366
+ await handleMigrateFromClaude();
367
+ const migratedHooks = mockSetValue.mock.calls[0][2];
368
+ expect(migratedHooks).not.toHaveProperty('BeforeTool');
369
+ expect(migratedHooks).toHaveProperty('AfterTool');
370
+ });
371
+ it('should display migration instructions after successful migration', async () => {
372
+ const claudeSettings = {
373
+ hooks: {
374
+ PreToolUse: [
375
+ {
376
+ hooks: [{ type: 'command', command: 'echo "test"' }],
377
+ },
378
+ ],
379
+ },
380
+ };
381
+ mockedFs.existsSync.mockReturnValue(true);
382
+ mockedFs.readFileSync.mockReturnValue(JSON.stringify(claudeSettings));
383
+ await handleMigrateFromClaude();
384
+ expect(debugLoggerLogSpy).toHaveBeenCalledWith('✓ Hooks successfully migrated to .cell-cli/settings.json');
385
+ expect(debugLoggerLogSpy).toHaveBeenCalledWith('\nMigration complete! Please review the migrated hooks in .cell-cli/settings.json');
386
+ expect(debugLoggerLogSpy).toHaveBeenCalledWith('Note: Set tools.enableHooks to true in your settings to enable the hook system.');
387
+ });
388
+ });
389
+ //# sourceMappingURL=migrate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.test.js","sourceRoot":"","sources":["../../../../src/commands/hooks/migrate.test.ts"],"names":[],"mappings":"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"}