@machina.ai/cell-cli 1.0.13-rc9 → 1.0.21-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 (579) hide show
  1. package/dist/package.json +11 -7
  2. package/dist/src/commands/mcp/add.d.ts +7 -0
  3. package/dist/src/commands/mcp/add.js +166 -0
  4. package/dist/src/commands/mcp/add.js.map +1 -0
  5. package/dist/src/commands/mcp/list.d.ts +8 -0
  6. package/dist/src/commands/mcp/list.js +110 -0
  7. package/dist/src/commands/mcp/list.js.map +1 -0
  8. package/dist/src/commands/mcp/remove.d.ts +7 -0
  9. package/dist/src/commands/mcp/remove.js +44 -0
  10. package/dist/src/commands/mcp/remove.js.map +1 -0
  11. package/dist/src/commands/mcp.d.ts +7 -0
  12. package/dist/src/commands/mcp.js +23 -0
  13. package/dist/src/commands/mcp.js.map +1 -0
  14. package/dist/src/config/auth.test.d.ts +6 -0
  15. package/dist/src/config/auth.test.js +28 -0
  16. package/dist/src/config/auth.test.js.map +1 -0
  17. package/dist/src/config/config.d.ts +6 -3
  18. package/dist/src/config/config.js +177 -90
  19. package/dist/src/config/config.js.map +1 -1
  20. package/dist/src/config/extension.d.ts +1 -0
  21. package/dist/src/config/extension.js +4 -0
  22. package/dist/src/config/extension.js.map +1 -1
  23. package/dist/src/config/keyBindings.d.ts +66 -0
  24. package/dist/src/config/keyBindings.js +141 -0
  25. package/dist/src/config/keyBindings.js.map +1 -0
  26. package/dist/src/config/keyBindings.test.d.ts +6 -0
  27. package/dist/src/config/keyBindings.test.js +51 -0
  28. package/dist/src/config/keyBindings.test.js.map +1 -0
  29. package/dist/src/config/sandboxConfig.js +3 -3
  30. package/dist/src/config/sandboxConfig.js.map +1 -1
  31. package/dist/src/config/settings.d.ts +6 -41
  32. package/dist/src/config/settings.js +137 -52
  33. package/dist/src/config/settings.js.map +1 -1
  34. package/dist/src/config/settingsSchema.d.ts +533 -0
  35. package/dist/src/config/settingsSchema.js +507 -0
  36. package/dist/src/config/settingsSchema.js.map +1 -0
  37. package/dist/src/config/settingsSchema.test.d.ts +6 -0
  38. package/dist/src/config/settingsSchema.test.js +195 -0
  39. package/dist/src/config/settingsSchema.test.js.map +1 -0
  40. package/dist/src/config/trustedFolders.d.ts +37 -0
  41. package/dist/src/config/trustedFolders.js +118 -0
  42. package/dist/src/config/trustedFolders.js.map +1 -0
  43. package/dist/src/config/trustedFolders.test.d.ts +6 -0
  44. package/dist/src/config/trustedFolders.test.js +160 -0
  45. package/dist/src/config/trustedFolders.test.js.map +1 -0
  46. package/dist/src/gemini.d.ts +3 -0
  47. package/dist/src/gemini.js +106 -68
  48. package/dist/src/gemini.js.map +1 -1
  49. package/dist/src/gemini.test.d.ts +6 -0
  50. package/dist/src/gemini.test.js +193 -0
  51. package/dist/src/gemini.test.js.map +1 -0
  52. package/dist/src/generated/git-commit.d.ts +2 -1
  53. package/dist/src/generated/git-commit.js +3 -2
  54. package/dist/src/generated/git-commit.js.map +1 -1
  55. package/dist/src/nonInteractiveCli.js +35 -55
  56. package/dist/src/nonInteractiveCli.js.map +1 -1
  57. package/dist/src/patches/is-in-ci.d.ts +7 -0
  58. package/dist/src/patches/is-in-ci.js +15 -0
  59. package/dist/src/patches/is-in-ci.js.map +1 -0
  60. package/dist/src/services/BuiltinCommandLoader.js +12 -0
  61. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  62. package/dist/src/services/BuiltinCommandLoader.test.d.ts +6 -0
  63. package/dist/src/services/BuiltinCommandLoader.test.js +108 -0
  64. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -0
  65. package/dist/src/services/CommandService.d.ts +8 -4
  66. package/dist/src/services/CommandService.js +24 -8
  67. package/dist/src/services/CommandService.js.map +1 -1
  68. package/dist/src/services/CommandService.test.d.ts +6 -0
  69. package/dist/src/services/CommandService.test.js +232 -0
  70. package/dist/src/services/CommandService.test.js.map +1 -0
  71. package/dist/src/services/FileCommandLoader.d.ts +15 -3
  72. package/dist/src/services/FileCommandLoader.js +115 -38
  73. package/dist/src/services/FileCommandLoader.js.map +1 -1
  74. package/dist/src/services/McpPromptLoader.d.ts +25 -0
  75. package/dist/src/services/McpPromptLoader.js +192 -0
  76. package/dist/src/services/McpPromptLoader.js.map +1 -0
  77. package/dist/src/services/prompt-processors/argumentProcessor.d.ts +16 -0
  78. package/dist/src/services/prompt-processors/argumentProcessor.js +20 -0
  79. package/dist/src/services/prompt-processors/argumentProcessor.js.map +1 -0
  80. package/dist/src/services/prompt-processors/shellProcessor.d.ts +35 -0
  81. package/dist/src/services/prompt-processors/shellProcessor.js +170 -0
  82. package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -0
  83. package/dist/src/services/prompt-processors/types.d.ts +40 -0
  84. package/dist/src/services/prompt-processors/types.js +16 -0
  85. package/dist/src/services/prompt-processors/types.js.map +1 -0
  86. package/dist/src/test-utils/customMatchers.d.ts +14 -0
  87. package/dist/src/test-utils/customMatchers.js +46 -0
  88. package/dist/src/test-utils/customMatchers.js.map +1 -0
  89. package/dist/src/test-utils/mockCommandContext.d.ts +18 -0
  90. package/dist/src/test-utils/mockCommandContext.js +86 -0
  91. package/dist/src/test-utils/mockCommandContext.js.map +1 -0
  92. package/dist/src/test-utils/mockCommandContext.test.d.ts +6 -0
  93. package/dist/src/test-utils/mockCommandContext.test.js +51 -0
  94. package/dist/src/test-utils/mockCommandContext.test.js.map +1 -0
  95. package/dist/src/test-utils/render.d.ts +8 -0
  96. package/dist/src/test-utils/render.js +10 -0
  97. package/dist/src/test-utils/render.js.map +1 -0
  98. package/dist/src/ui/App.js +229 -67
  99. package/dist/src/ui/App.js.map +1 -1
  100. package/dist/src/ui/IdeIntegrationNudge.d.ts +16 -0
  101. package/dist/src/ui/IdeIntegrationNudge.js +52 -0
  102. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -0
  103. package/dist/src/ui/colors.js +6 -0
  104. package/dist/src/ui/colors.js.map +1 -1
  105. package/dist/src/ui/commands/aboutCommand.js +9 -5
  106. package/dist/src/ui/commands/aboutCommand.js.map +1 -1
  107. package/dist/src/ui/commands/bugCommand.js +13 -5
  108. package/dist/src/ui/commands/bugCommand.js.map +1 -1
  109. package/dist/src/ui/commands/chatCommand.js +66 -6
  110. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  111. package/dist/src/ui/commands/directoryCommand.d.ts +8 -0
  112. package/dist/src/ui/commands/directoryCommand.js +134 -0
  113. package/dist/src/ui/commands/directoryCommand.js.map +1 -0
  114. package/dist/src/ui/commands/docsCommand.js +1 -1
  115. package/dist/src/ui/commands/docsCommand.js.map +1 -1
  116. package/dist/src/ui/commands/helpCommand.js +7 -6
  117. package/dist/src/ui/commands/helpCommand.js.map +1 -1
  118. package/dist/src/ui/commands/ideCommand.js +179 -109
  119. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  120. package/dist/src/ui/commands/initCommand.d.ts +7 -0
  121. package/dist/src/ui/commands/initCommand.js +76 -0
  122. package/dist/src/ui/commands/initCommand.js.map +1 -0
  123. package/dist/src/ui/commands/mcpCommand.js +244 -26
  124. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  125. package/dist/src/ui/commands/memoryCommand.js +9 -4
  126. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  127. package/dist/src/ui/commands/settingsCommand.d.ts +7 -0
  128. package/dist/src/ui/commands/settingsCommand.js +16 -0
  129. package/dist/src/ui/commands/settingsCommand.js.map +1 -0
  130. package/dist/src/ui/commands/setupGithubCommand.d.ts +7 -0
  131. package/dist/src/ui/commands/setupGithubCommand.js +115 -0
  132. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -0
  133. package/dist/src/ui/commands/setupGithubCommand.test.d.ts +6 -0
  134. package/dist/src/ui/commands/setupGithubCommand.test.js +74 -0
  135. package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -0
  136. package/dist/src/ui/commands/terminalSetupCommand.d.ts +13 -0
  137. package/dist/src/ui/commands/terminalSetupCommand.js +41 -0
  138. package/dist/src/ui/commands/terminalSetupCommand.js.map +1 -0
  139. package/dist/src/ui/commands/types.d.ts +42 -3
  140. package/dist/src/ui/commands/types.js +1 -0
  141. package/dist/src/ui/commands/types.js.map +1 -1
  142. package/dist/src/ui/commands/vimCommand.d.ts +7 -0
  143. package/dist/src/ui/commands/vimCommand.js +23 -0
  144. package/dist/src/ui/commands/vimCommand.js.map +1 -0
  145. package/dist/src/ui/components/AboutBox.d.ts +1 -0
  146. package/dist/src/ui/components/AboutBox.js +1 -1
  147. package/dist/src/ui/components/AboutBox.js.map +1 -1
  148. package/dist/src/ui/components/AsciiArt.d.ts +3 -2
  149. package/dist/src/ui/components/AsciiArt.js +23 -12
  150. package/dist/src/ui/components/AsciiArt.js.map +1 -1
  151. package/dist/src/ui/components/AuthDialog.js +12 -6
  152. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  153. package/dist/src/ui/components/AuthDialog.test.d.ts +6 -0
  154. package/dist/src/ui/components/AuthDialog.test.js +114 -0
  155. package/dist/src/ui/components/AuthDialog.test.js.map +1 -0
  156. package/dist/src/ui/components/AuthInProgress.js +5 -4
  157. package/dist/src/ui/components/AuthInProgress.js.map +1 -1
  158. package/dist/src/ui/components/ContextSummaryDisplay.d.ts +2 -2
  159. package/dist/src/ui/components/ContextSummaryDisplay.js +31 -34
  160. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  161. package/dist/src/ui/components/ContextUsageDisplay.d.ts +9 -0
  162. package/dist/src/ui/components/ContextUsageDisplay.js +14 -0
  163. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -0
  164. package/dist/src/ui/components/DebugProfiler.d.ts +6 -0
  165. package/dist/src/ui/components/DebugProfiler.js +27 -0
  166. package/dist/src/ui/components/DebugProfiler.js.map +1 -0
  167. package/dist/src/ui/components/EditorSettingsDialog.js +6 -5
  168. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
  169. package/dist/src/ui/components/FolderTrustDialog.d.ts +16 -0
  170. package/dist/src/ui/components/FolderTrustDialog.js +39 -0
  171. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -0
  172. package/dist/src/ui/components/FolderTrustDialog.test.d.ts +6 -0
  173. package/dist/src/ui/components/FolderTrustDialog.test.js +26 -0
  174. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -0
  175. package/dist/src/ui/components/Footer.d.ts +2 -0
  176. package/dist/src/ui/components/Footer.js +18 -7
  177. package/dist/src/ui/components/Footer.js.map +1 -1
  178. package/dist/src/ui/components/Header.d.ts +0 -1
  179. package/dist/src/ui/components/Header.js +13 -5
  180. package/dist/src/ui/components/Header.js.map +1 -1
  181. package/dist/src/ui/components/Header.test.d.ts +6 -0
  182. package/dist/src/ui/components/Header.test.js +44 -0
  183. package/dist/src/ui/components/Header.test.js.map +1 -0
  184. package/dist/src/ui/components/Help.js +2 -2
  185. package/dist/src/ui/components/Help.js.map +1 -1
  186. package/dist/src/ui/components/HistoryItemDisplay.d.ts +2 -0
  187. package/dist/src/ui/components/HistoryItemDisplay.js +2 -1
  188. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  189. package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +6 -0
  190. package/dist/src/ui/components/HistoryItemDisplay.test.js +91 -0
  191. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -0
  192. package/dist/src/ui/components/InputPrompt.d.ts +3 -0
  193. package/dist/src/ui/components/InputPrompt.js +179 -126
  194. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  195. package/dist/src/ui/components/LoadingIndicator.js +10 -5
  196. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  197. package/dist/src/ui/components/LoadingIndicator.test.d.ts +6 -0
  198. package/dist/src/ui/components/LoadingIndicator.test.js +190 -0
  199. package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -0
  200. package/dist/src/ui/components/PrepareLabel.d.ts +15 -0
  201. package/dist/src/ui/components/PrepareLabel.js +16 -0
  202. package/dist/src/ui/components/PrepareLabel.js.map +1 -0
  203. package/dist/src/ui/components/SettingsDialog.d.ts +14 -0
  204. package/dist/src/ui/components/SettingsDialog.js +519 -0
  205. package/dist/src/ui/components/SettingsDialog.js.map +1 -0
  206. package/dist/src/ui/components/SettingsDialog.test.d.ts +6 -0
  207. package/dist/src/ui/components/SettingsDialog.test.js +568 -0
  208. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -0
  209. package/dist/src/ui/components/ShellConfirmationDialog.d.ts +15 -0
  210. package/dist/src/ui/components/ShellConfirmationDialog.js +46 -0
  211. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -0
  212. package/dist/src/ui/components/ShellConfirmationDialog.test.d.ts +6 -0
  213. package/dist/src/ui/components/ShellConfirmationDialog.test.js +40 -0
  214. package/dist/src/ui/components/ShellConfirmationDialog.test.js.map +1 -0
  215. package/dist/src/ui/components/StatsDisplay.js +8 -7
  216. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  217. package/dist/src/ui/components/SuggestionsDisplay.d.ts +1 -0
  218. package/dist/src/ui/components/SuggestionsDisplay.js +3 -3
  219. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  220. package/dist/src/ui/components/ThemeDialog.js +20 -25
  221. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  222. package/dist/src/ui/components/Tips.js +1 -1
  223. package/dist/src/ui/components/Tips.js.map +1 -1
  224. package/dist/src/ui/components/messages/DiffRenderer.js +21 -11
  225. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  226. package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +6 -0
  227. package/dist/src/ui/components/messages/DiffRenderer.test.js +239 -0
  228. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +1 -0
  229. package/dist/src/ui/components/messages/InfoMessage.js +2 -1
  230. package/dist/src/ui/components/messages/InfoMessage.js.map +1 -1
  231. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +52 -18
  232. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  233. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +6 -0
  234. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +37 -0
  235. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -0
  236. package/dist/src/ui/components/messages/ToolMessage.test.d.ts +6 -0
  237. package/dist/src/ui/components/messages/ToolMessage.test.js +118 -0
  238. package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -0
  239. package/dist/src/ui/components/messages/UserMessage.js +4 -1
  240. package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
  241. package/dist/src/ui/components/shared/MaxSizedBox.js +1 -1
  242. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  243. package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +6 -0
  244. package/dist/src/ui/components/shared/MaxSizedBox.test.js +154 -0
  245. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -0
  246. package/dist/src/ui/components/shared/RadioButtonSelect.js +11 -9
  247. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  248. package/dist/src/ui/components/shared/RadioButtonSelect.test.d.ts +6 -0
  249. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +111 -0
  250. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -0
  251. package/dist/src/ui/components/shared/text-buffer.d.ts +286 -3
  252. package/dist/src/ui/components/shared/text-buffer.js +612 -89
  253. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  254. package/dist/src/ui/components/shared/vim-buffer-actions.d.ts +72 -0
  255. package/dist/src/ui/components/shared/vim-buffer-actions.js +552 -0
  256. package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -0
  257. package/dist/src/ui/contexts/KeypressContext.d.ts +30 -0
  258. package/dist/src/ui/contexts/KeypressContext.js +309 -0
  259. package/dist/src/ui/contexts/KeypressContext.js.map +1 -0
  260. package/dist/src/ui/contexts/KeypressContext.test.d.ts +6 -0
  261. package/dist/src/ui/contexts/KeypressContext.test.js +219 -0
  262. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -0
  263. package/dist/src/ui/contexts/SessionContext.d.ts +3 -0
  264. package/dist/src/ui/contexts/SessionContext.js +2 -1
  265. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  266. package/dist/src/ui/contexts/SettingsContext.d.ts +9 -0
  267. package/dist/src/ui/contexts/SettingsContext.js +15 -0
  268. package/dist/src/ui/contexts/SettingsContext.js.map +1 -0
  269. package/dist/src/ui/contexts/VimModeContext.d.ts +19 -0
  270. package/dist/src/ui/contexts/VimModeContext.js +48 -0
  271. package/dist/src/ui/contexts/VimModeContext.js.map +1 -0
  272. package/dist/src/ui/editors/editorSettingsManager.js +6 -13
  273. package/dist/src/ui/editors/editorSettingsManager.js.map +1 -1
  274. package/dist/src/ui/hooks/atCommandProcessor.js +82 -62
  275. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  276. package/dist/src/ui/hooks/atCommandProcessor.test.d.ts +6 -0
  277. package/dist/src/ui/hooks/atCommandProcessor.test.js +809 -0
  278. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -0
  279. package/dist/src/ui/hooks/shellCommandProcessor.d.ts +1 -0
  280. package/dist/src/ui/hooks/shellCommandProcessor.js +139 -196
  281. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  282. package/dist/src/ui/hooks/shellCommandProcessor.test.d.ts +6 -0
  283. package/dist/src/ui/hooks/shellCommandProcessor.test.js +328 -0
  284. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -0
  285. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +11 -3
  286. package/dist/src/ui/hooks/slashCommandProcessor.js +237 -90
  287. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  288. package/dist/src/ui/hooks/useAtCompletion.d.ts +23 -0
  289. package/dist/src/ui/hooks/useAtCompletion.js +178 -0
  290. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -0
  291. package/dist/src/ui/hooks/useAutoAcceptIndicator.js +5 -5
  292. package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +1 -1
  293. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.d.ts +6 -0
  294. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +191 -0
  295. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -0
  296. package/dist/src/ui/hooks/useCommandCompletion.d.ts +29 -0
  297. package/dist/src/ui/hooks/useCommandCompletion.js +165 -0
  298. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -0
  299. package/dist/src/ui/hooks/useCompletion.d.ts +5 -3
  300. package/dist/src/ui/hooks/useCompletion.js +7 -312
  301. package/dist/src/ui/hooks/useCompletion.js.map +1 -1
  302. package/dist/src/ui/hooks/useConsoleMessages.js +53 -37
  303. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  304. package/dist/src/ui/hooks/useEditorSettings.test.d.ts +6 -0
  305. package/dist/src/ui/hooks/useEditorSettings.test.js +164 -0
  306. package/dist/src/ui/hooks/useEditorSettings.test.js.map +1 -0
  307. package/dist/src/ui/hooks/useFocus.d.ts +4 -0
  308. package/dist/src/ui/hooks/useFocus.js +4 -4
  309. package/dist/src/ui/hooks/useFocus.js.map +1 -1
  310. package/dist/src/ui/hooks/useFolderTrust.d.ts +12 -0
  311. package/dist/src/ui/hooks/useFolderTrust.js +55 -0
  312. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -0
  313. package/dist/src/ui/hooks/useGeminiStream.d.ts +2 -1
  314. package/dist/src/ui/hooks/useGeminiStream.js +40 -26
  315. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  316. package/dist/src/ui/hooks/useGitBranchName.test.d.ts +6 -0
  317. package/dist/src/ui/hooks/useGitBranchName.test.js +175 -0
  318. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -0
  319. package/dist/src/ui/hooks/useHistoryManager.test.d.ts +6 -0
  320. package/dist/src/ui/hooks/useHistoryManager.test.js +171 -0
  321. package/dist/src/ui/hooks/useHistoryManager.test.js.map +1 -0
  322. package/dist/src/ui/hooks/useInputHistory.d.ts +1 -1
  323. package/dist/src/ui/hooks/useInputHistory.test.d.ts +6 -0
  324. package/dist/src/ui/hooks/useInputHistory.test.js +207 -0
  325. package/dist/src/ui/hooks/useInputHistory.test.js.map +1 -0
  326. package/dist/src/ui/hooks/useKeypress.d.ts +4 -16
  327. package/dist/src/ui/hooks/useKeypress.js +8 -137
  328. package/dist/src/ui/hooks/useKeypress.js.map +1 -1
  329. package/dist/src/ui/hooks/useKittyKeyboardProtocol.d.ts +15 -0
  330. package/dist/src/ui/hooks/useKittyKeyboardProtocol.js +20 -0
  331. package/dist/src/ui/hooks/useKittyKeyboardProtocol.js.map +1 -0
  332. package/dist/src/ui/hooks/useLoadingIndicator.test.d.ts +6 -0
  333. package/dist/src/ui/hooks/useLoadingIndicator.test.js +91 -0
  334. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -0
  335. package/dist/src/ui/hooks/useMessageQueue.d.ts +22 -0
  336. package/dist/src/ui/hooks/useMessageQueue.js +49 -0
  337. package/dist/src/ui/hooks/useMessageQueue.js.map +1 -0
  338. package/dist/src/ui/hooks/useMessageQueue.test.d.ts +6 -0
  339. package/dist/src/ui/hooks/useMessageQueue.test.js +158 -0
  340. package/dist/src/ui/hooks/useMessageQueue.test.js.map +1 -0
  341. package/dist/src/ui/hooks/usePhraseCycler.js +3 -5
  342. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  343. package/dist/src/ui/hooks/usePrivacySettings.js +6 -2
  344. package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -1
  345. package/dist/src/ui/hooks/usePrivacySettings.test.d.ts +6 -0
  346. package/dist/src/ui/hooks/usePrivacySettings.test.js +154 -0
  347. package/dist/src/ui/hooks/usePrivacySettings.test.js.map +1 -0
  348. package/dist/src/ui/hooks/useReactToolScheduler.d.ts +1 -1
  349. package/dist/src/ui/hooks/useReactToolScheduler.js +18 -17
  350. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  351. package/dist/src/ui/hooks/useReverseSearchCompletion.d.ts +19 -0
  352. package/dist/src/ui/hooks/useReverseSearchCompletion.js +56 -0
  353. package/dist/src/ui/hooks/useReverseSearchCompletion.js.map +1 -0
  354. package/dist/src/ui/hooks/useReverseSearchCompletion.test.d.ts +6 -0
  355. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js +163 -0
  356. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js.map +1 -0
  357. package/dist/src/ui/hooks/useSettingsCommand.d.ts +10 -0
  358. package/dist/src/ui/hooks/useSettingsCommand.js +21 -0
  359. package/dist/src/ui/hooks/useSettingsCommand.js.map +1 -0
  360. package/dist/src/ui/hooks/useShellHistory.d.ts +4 -2
  361. package/dist/src/ui/hooks/useShellHistory.js +30 -7
  362. package/dist/src/ui/hooks/useShellHistory.js.map +1 -1
  363. package/dist/src/ui/hooks/useShellHistory.test.d.ts +6 -0
  364. package/dist/src/ui/hooks/useShellHistory.test.js +159 -0
  365. package/dist/src/ui/hooks/useShellHistory.test.js.map +1 -0
  366. package/dist/src/ui/hooks/useSlashCompletion.d.ts +20 -0
  367. package/dist/src/ui/hooks/useSlashCompletion.js +135 -0
  368. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -0
  369. package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +6 -0
  370. package/dist/src/ui/hooks/useSlashCompletion.test.js +272 -0
  371. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -0
  372. package/dist/src/ui/hooks/useThemeCommand.js +1 -1
  373. package/dist/src/ui/hooks/useThemeCommand.js.map +1 -1
  374. package/dist/src/ui/hooks/useTimer.test.d.ts +6 -0
  375. package/dist/src/ui/hooks/useTimer.test.js +90 -0
  376. package/dist/src/ui/hooks/useTimer.test.js.map +1 -0
  377. package/dist/src/ui/hooks/useToolScheduler.test.d.ts +6 -0
  378. package/dist/src/ui/hooks/useToolScheduler.test.js +846 -0
  379. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -0
  380. package/dist/src/ui/hooks/vim.d.ts +28 -0
  381. package/dist/src/ui/hooks/vim.js +639 -0
  382. package/dist/src/ui/hooks/vim.js.map +1 -0
  383. package/dist/src/ui/keyMatchers.d.ts +26 -0
  384. package/dist/src/ui/keyMatchers.js +68 -0
  385. package/dist/src/ui/keyMatchers.js.map +1 -0
  386. package/dist/src/ui/keyMatchers.test.d.ts +6 -0
  387. package/dist/src/ui/keyMatchers.test.js +276 -0
  388. package/dist/src/ui/keyMatchers.test.js.map +1 -0
  389. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +5 -4
  390. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -1
  391. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.js +5 -4
  392. package/dist/src/ui/privacy/CloudPaidPrivacyNotice.js.map +1 -1
  393. package/dist/src/ui/privacy/GeminiPrivacyNotice.js +5 -4
  394. package/dist/src/ui/privacy/GeminiPrivacyNotice.js.map +1 -1
  395. package/dist/src/ui/semantic-colors.d.ts +7 -0
  396. package/dist/src/ui/semantic-colors.js +24 -0
  397. package/dist/src/ui/semantic-colors.js.map +1 -0
  398. package/dist/src/ui/themes/ansi-light.js +4 -1
  399. package/dist/src/ui/themes/ansi-light.js.map +1 -1
  400. package/dist/src/ui/themes/ansi.js +4 -1
  401. package/dist/src/ui/themes/ansi.js.map +1 -1
  402. package/dist/src/ui/themes/atom-one-dark.js +4 -1
  403. package/dist/src/ui/themes/atom-one-dark.js.map +1 -1
  404. package/dist/src/ui/themes/ayu-light.js +5 -2
  405. package/dist/src/ui/themes/ayu-light.js.map +1 -1
  406. package/dist/src/ui/themes/ayu.js +5 -2
  407. package/dist/src/ui/themes/ayu.js.map +1 -1
  408. package/dist/src/ui/themes/color-utils.test.d.ts +6 -0
  409. package/dist/src/ui/themes/color-utils.test.js +197 -0
  410. package/dist/src/ui/themes/color-utils.test.js.map +1 -0
  411. package/dist/src/ui/themes/default-light.js +2 -1
  412. package/dist/src/ui/themes/default-light.js.map +1 -1
  413. package/dist/src/ui/themes/default.js +2 -1
  414. package/dist/src/ui/themes/default.js.map +1 -1
  415. package/dist/src/ui/themes/dracula.js +4 -1
  416. package/dist/src/ui/themes/dracula.js.map +1 -1
  417. package/dist/src/ui/themes/github-dark.js +4 -1
  418. package/dist/src/ui/themes/github-dark.js.map +1 -1
  419. package/dist/src/ui/themes/github-light.js +4 -1
  420. package/dist/src/ui/themes/github-light.js.map +1 -1
  421. package/dist/src/ui/themes/googlecode.js +4 -1
  422. package/dist/src/ui/themes/googlecode.js.map +1 -1
  423. package/dist/src/ui/themes/no-color.js +32 -1
  424. package/dist/src/ui/themes/no-color.js.map +1 -1
  425. package/dist/src/ui/themes/semantic-tokens.d.ts +37 -0
  426. package/dist/src/ui/themes/semantic-tokens.js +94 -0
  427. package/dist/src/ui/themes/semantic-tokens.js.map +1 -0
  428. package/dist/src/ui/themes/shades-of-purple.js +4 -1
  429. package/dist/src/ui/themes/shades-of-purple.js.map +1 -1
  430. package/dist/src/ui/themes/theme-manager.d.ts +6 -0
  431. package/dist/src/ui/themes/theme-manager.js +18 -2
  432. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  433. package/dist/src/ui/themes/theme-manager.test.d.ts +6 -0
  434. package/dist/src/ui/themes/theme-manager.test.js +83 -0
  435. package/dist/src/ui/themes/theme-manager.test.js.map +1 -0
  436. package/dist/src/ui/themes/theme.d.ts +48 -2
  437. package/dist/src/ui/themes/theme.js +102 -92
  438. package/dist/src/ui/themes/theme.js.map +1 -1
  439. package/dist/src/ui/themes/xcode.js +4 -1
  440. package/dist/src/ui/themes/xcode.js.map +1 -1
  441. package/dist/src/ui/types.d.ts +13 -2
  442. package/dist/src/ui/types.js +1 -0
  443. package/dist/src/ui/types.js.map +1 -1
  444. package/dist/src/ui/utils/CodeColorizer.d.ts +3 -1
  445. package/dist/src/ui/utils/CodeColorizer.js +22 -9
  446. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  447. package/dist/src/ui/utils/ConsolePatcher.d.ts +3 -1
  448. package/dist/src/ui/utils/ConsolePatcher.js +18 -8
  449. package/dist/src/ui/utils/ConsolePatcher.js.map +1 -1
  450. package/dist/src/ui/utils/InlineMarkdownRenderer.js +8 -1
  451. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
  452. package/dist/src/ui/utils/MarkdownDisplay.js +4 -2
  453. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  454. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +6 -0
  455. package/dist/src/ui/utils/MarkdownDisplay.test.js +151 -0
  456. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -0
  457. package/dist/src/ui/utils/clipboardUtils.test.d.ts +6 -0
  458. package/dist/src/ui/utils/clipboardUtils.test.js +65 -0
  459. package/dist/src/ui/utils/clipboardUtils.test.js.map +1 -0
  460. package/dist/src/ui/utils/commandUtils.d.ts +1 -0
  461. package/dist/src/ui/utils/commandUtils.js +22 -1
  462. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  463. package/dist/src/ui/utils/commandUtils.test.d.ts +6 -0
  464. package/dist/src/ui/utils/commandUtils.test.js +294 -0
  465. package/dist/src/ui/utils/commandUtils.test.js.map +1 -0
  466. package/dist/src/ui/utils/computeStats.js +3 -1
  467. package/dist/src/ui/utils/computeStats.js.map +1 -1
  468. package/dist/src/ui/utils/displayUtils.test.d.ts +6 -0
  469. package/dist/src/ui/utils/displayUtils.test.js +42 -0
  470. package/dist/src/ui/utils/displayUtils.test.js.map +1 -0
  471. package/dist/src/ui/utils/formatters.test.d.ts +6 -0
  472. package/dist/src/ui/utils/formatters.test.js +56 -0
  473. package/dist/src/ui/utils/formatters.test.js.map +1 -0
  474. package/dist/src/ui/utils/isNarrowWidth.d.ts +6 -0
  475. package/dist/src/ui/utils/isNarrowWidth.js +9 -0
  476. package/dist/src/ui/utils/isNarrowWidth.js.map +1 -0
  477. package/dist/src/ui/utils/kittyProtocolDetector.d.ts +13 -0
  478. package/dist/src/ui/utils/kittyProtocolDetector.js +88 -0
  479. package/dist/src/ui/utils/kittyProtocolDetector.js.map +1 -0
  480. package/dist/src/ui/utils/markdownUtilities.test.d.ts +6 -0
  481. package/dist/src/ui/utils/markdownUtilities.test.js +42 -0
  482. package/dist/src/ui/utils/markdownUtilities.test.js.map +1 -0
  483. package/dist/src/ui/utils/platformConstants.d.ts +43 -0
  484. package/dist/src/ui/utils/platformConstants.js +44 -0
  485. package/dist/src/ui/utils/platformConstants.js.map +1 -0
  486. package/dist/src/ui/utils/terminalSetup.d.ts +30 -0
  487. package/dist/src/ui/utils/terminalSetup.js +281 -0
  488. package/dist/src/ui/utils/terminalSetup.js.map +1 -0
  489. package/dist/src/ui/utils/textUtils.d.ts +0 -8
  490. package/dist/src/ui/utils/textUtils.js +0 -22
  491. package/dist/src/ui/utils/textUtils.js.map +1 -1
  492. package/dist/src/ui/utils/updateCheck.d.ts +7 -1
  493. package/dist/src/ui/utils/updateCheck.js +47 -9
  494. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  495. package/dist/src/ui/utils/updateCheck.test.d.ts +6 -0
  496. package/dist/src/ui/utils/updateCheck.test.js +145 -0
  497. package/dist/src/ui/utils/updateCheck.test.js.map +1 -0
  498. package/dist/src/utils/checks.d.ts +19 -0
  499. package/dist/src/utils/checks.js +24 -0
  500. package/dist/src/utils/checks.js.map +1 -0
  501. package/dist/src/utils/cleanup.d.ts +2 -2
  502. package/dist/src/utils/cleanup.js +2 -2
  503. package/dist/src/utils/cleanup.js.map +1 -1
  504. package/dist/src/utils/dialogScopeUtils.d.ts +31 -0
  505. package/dist/src/utils/dialogScopeUtils.js +48 -0
  506. package/dist/src/utils/dialogScopeUtils.js.map +1 -0
  507. package/dist/src/utils/events.d.ts +11 -0
  508. package/dist/src/utils/events.js +13 -0
  509. package/dist/src/utils/events.js.map +1 -0
  510. package/dist/src/utils/gitUtils.d.ts +30 -0
  511. package/dist/src/utils/gitUtils.js +89 -0
  512. package/dist/src/utils/gitUtils.js.map +1 -0
  513. package/dist/src/utils/gitUtils.test.d.ts +6 -0
  514. package/dist/src/utils/gitUtils.test.js +113 -0
  515. package/dist/src/utils/gitUtils.test.js.map +1 -0
  516. package/dist/src/utils/handleAutoUpdate.d.ts +11 -0
  517. package/dist/src/utils/handleAutoUpdate.js +101 -0
  518. package/dist/src/utils/handleAutoUpdate.js.map +1 -0
  519. package/dist/src/utils/installationInfo.d.ts +23 -0
  520. package/dist/src/utils/installationInfo.js +154 -0
  521. package/dist/src/utils/installationInfo.js.map +1 -0
  522. package/dist/src/utils/installationInfo.test.d.ts +6 -0
  523. package/dist/src/utils/installationInfo.test.js +242 -0
  524. package/dist/src/utils/installationInfo.test.js.map +1 -0
  525. package/dist/src/utils/readStdin.js +10 -0
  526. package/dist/src/utils/readStdin.js.map +1 -1
  527. package/dist/src/utils/resolvePath.d.ts +6 -0
  528. package/dist/src/utils/resolvePath.js +21 -0
  529. package/dist/src/utils/resolvePath.js.map +1 -0
  530. package/dist/src/utils/sandbox-macos-permissive-closed.sb +6 -0
  531. package/dist/src/utils/sandbox-macos-permissive-open.sb +6 -0
  532. package/dist/src/utils/sandbox-macos-permissive-proxied.sb +6 -0
  533. package/dist/src/utils/sandbox-macos-restrictive-closed.sb +6 -0
  534. package/dist/src/utils/sandbox-macos-restrictive-open.sb +6 -0
  535. package/dist/src/utils/sandbox-macos-restrictive-proxied.sb +6 -0
  536. package/dist/src/utils/sandbox.d.ts +2 -2
  537. package/dist/src/utils/sandbox.js +448 -397
  538. package/dist/src/utils/sandbox.js.map +1 -1
  539. package/dist/src/utils/settingsUtils.d.ts +134 -0
  540. package/dist/src/utils/settingsUtils.js +336 -0
  541. package/dist/src/utils/settingsUtils.js.map +1 -0
  542. package/dist/src/utils/settingsUtils.test.d.ts +6 -0
  543. package/dist/src/utils/settingsUtils.test.js +514 -0
  544. package/dist/src/utils/settingsUtils.test.js.map +1 -0
  545. package/dist/src/utils/spawnWrapper.d.ts +7 -0
  546. package/dist/src/utils/spawnWrapper.js +8 -0
  547. package/dist/src/utils/spawnWrapper.js.map +1 -0
  548. package/dist/src/utils/updateEventEmitter.d.ts +11 -0
  549. package/dist/src/utils/updateEventEmitter.js +12 -0
  550. package/dist/src/utils/updateEventEmitter.js.map +1 -0
  551. package/dist/src/utils/userStartupWarnings.test.d.ts +6 -0
  552. package/dist/src/utils/userStartupWarnings.test.js +67 -0
  553. package/dist/src/utils/userStartupWarnings.test.js.map +1 -0
  554. package/dist/src/utils/version.js +1 -1
  555. package/dist/src/utils/version.js.map +1 -1
  556. package/dist/src/validateNonInterActiveAuth.d.ts +7 -0
  557. package/dist/src/validateNonInterActiveAuth.js +37 -0
  558. package/dist/src/validateNonInterActiveAuth.js.map +1 -0
  559. package/dist/src/zed-integration/acp.d.ts +63 -0
  560. package/dist/src/{acp → zed-integration}/acp.js +76 -44
  561. package/dist/src/zed-integration/acp.js.map +1 -0
  562. package/dist/src/zed-integration/fileSystemService.d.ts +19 -0
  563. package/dist/src/zed-integration/fileSystemService.js +43 -0
  564. package/dist/src/zed-integration/fileSystemService.js.map +1 -0
  565. package/dist/src/zed-integration/schema.d.ts +11679 -0
  566. package/dist/src/zed-integration/schema.js +305 -0
  567. package/dist/src/zed-integration/schema.js.map +1 -0
  568. package/dist/src/zed-integration/zedIntegration.d.ts +10 -0
  569. package/dist/src/{acp/acpPeer.js → zed-integration/zedIntegration.js} +336 -169
  570. package/dist/src/zed-integration/zedIntegration.js.map +1 -0
  571. package/dist/tsconfig.tsbuildinfo +1 -1
  572. package/package.json +13 -8
  573. package/dist/src/acp/acp.d.ts +0 -208
  574. package/dist/src/acp/acp.js.map +0 -1
  575. package/dist/src/acp/acpPeer.d.ts +0 -8
  576. package/dist/src/acp/acpPeer.js.map +0 -1
  577. package/dist/src/ui/utils/errorParsing.d.ts +0 -7
  578. package/dist/src/ui/utils/errorParsing.js +0 -90
  579. package/dist/src/ui/utils/errorParsing.js.map +0 -1
@@ -0,0 +1,232 @@
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 { CommandService } from './CommandService.js';
8
+ import { CommandKind } from '../ui/commands/types.js';
9
+ const createMockCommand = (name, kind) => ({
10
+ name,
11
+ description: `Description for ${name}`,
12
+ kind,
13
+ action: vi.fn(),
14
+ });
15
+ const mockCommandA = createMockCommand('command-a', CommandKind.BUILT_IN);
16
+ const mockCommandB = createMockCommand('command-b', CommandKind.BUILT_IN);
17
+ const mockCommandC = createMockCommand('command-c', CommandKind.FILE);
18
+ const mockCommandB_Override = createMockCommand('command-b', CommandKind.FILE);
19
+ class MockCommandLoader {
20
+ commandsToLoad;
21
+ constructor(commandsToLoad) {
22
+ this.commandsToLoad = commandsToLoad;
23
+ }
24
+ loadCommands = vi.fn(async () => Promise.resolve(this.commandsToLoad));
25
+ }
26
+ describe('CommandService', () => {
27
+ beforeEach(() => {
28
+ vi.spyOn(console, 'debug').mockImplementation(() => { });
29
+ });
30
+ afterEach(() => {
31
+ vi.restoreAllMocks();
32
+ });
33
+ it('should load commands from a single loader', async () => {
34
+ const mockLoader = new MockCommandLoader([mockCommandA, mockCommandB]);
35
+ const service = await CommandService.create([mockLoader], new AbortController().signal);
36
+ const commands = service.getCommands();
37
+ expect(mockLoader.loadCommands).toHaveBeenCalledTimes(1);
38
+ expect(commands).toHaveLength(2);
39
+ expect(commands).toEqual(expect.arrayContaining([mockCommandA, mockCommandB]));
40
+ });
41
+ it('should aggregate commands from multiple loaders', async () => {
42
+ const loader1 = new MockCommandLoader([mockCommandA]);
43
+ const loader2 = new MockCommandLoader([mockCommandC]);
44
+ const service = await CommandService.create([loader1, loader2], new AbortController().signal);
45
+ const commands = service.getCommands();
46
+ expect(loader1.loadCommands).toHaveBeenCalledTimes(1);
47
+ expect(loader2.loadCommands).toHaveBeenCalledTimes(1);
48
+ expect(commands).toHaveLength(2);
49
+ expect(commands).toEqual(expect.arrayContaining([mockCommandA, mockCommandC]));
50
+ });
51
+ it('should override commands from earlier loaders with those from later loaders', async () => {
52
+ const loader1 = new MockCommandLoader([mockCommandA, mockCommandB]);
53
+ const loader2 = new MockCommandLoader([
54
+ mockCommandB_Override,
55
+ mockCommandC,
56
+ ]);
57
+ const service = await CommandService.create([loader1, loader2], new AbortController().signal);
58
+ const commands = service.getCommands();
59
+ expect(commands).toHaveLength(3); // Should be A, C, and the overridden B.
60
+ // The final list should contain the override from the *last* loader.
61
+ const commandB = commands.find((cmd) => cmd.name === 'command-b');
62
+ expect(commandB).toBeDefined();
63
+ expect(commandB?.kind).toBe(CommandKind.FILE); // Verify it's the overridden version.
64
+ expect(commandB).toEqual(mockCommandB_Override);
65
+ // Ensure the other commands are still present.
66
+ expect(commands).toEqual(expect.arrayContaining([
67
+ mockCommandA,
68
+ mockCommandC,
69
+ mockCommandB_Override,
70
+ ]));
71
+ });
72
+ it('should handle loaders that return an empty array of commands gracefully', async () => {
73
+ const loader1 = new MockCommandLoader([mockCommandA]);
74
+ const emptyLoader = new MockCommandLoader([]);
75
+ const loader3 = new MockCommandLoader([mockCommandB]);
76
+ const service = await CommandService.create([loader1, emptyLoader, loader3], new AbortController().signal);
77
+ const commands = service.getCommands();
78
+ expect(emptyLoader.loadCommands).toHaveBeenCalledTimes(1);
79
+ expect(commands).toHaveLength(2);
80
+ expect(commands).toEqual(expect.arrayContaining([mockCommandA, mockCommandB]));
81
+ });
82
+ it('should load commands from successful loaders even if one fails', async () => {
83
+ const successfulLoader = new MockCommandLoader([mockCommandA]);
84
+ const failingLoader = new MockCommandLoader([]);
85
+ const error = new Error('Loader failed');
86
+ vi.spyOn(failingLoader, 'loadCommands').mockRejectedValue(error);
87
+ const service = await CommandService.create([successfulLoader, failingLoader], new AbortController().signal);
88
+ const commands = service.getCommands();
89
+ expect(commands).toHaveLength(1);
90
+ expect(commands).toEqual([mockCommandA]);
91
+ expect(console.debug).toHaveBeenCalledWith('A command loader failed:', error);
92
+ });
93
+ it('getCommands should return a readonly array that cannot be mutated', async () => {
94
+ const service = await CommandService.create([new MockCommandLoader([mockCommandA])], new AbortController().signal);
95
+ const commands = service.getCommands();
96
+ // Expect it to throw a TypeError at runtime because the array is frozen.
97
+ expect(() => {
98
+ // @ts-expect-error - Testing immutability is intentional here.
99
+ commands.push(mockCommandB);
100
+ }).toThrow();
101
+ // Verify the original array was not mutated.
102
+ expect(service.getCommands()).toHaveLength(1);
103
+ });
104
+ it('should pass the abort signal to all loaders', async () => {
105
+ const controller = new AbortController();
106
+ const signal = controller.signal;
107
+ const loader1 = new MockCommandLoader([mockCommandA]);
108
+ const loader2 = new MockCommandLoader([mockCommandB]);
109
+ await CommandService.create([loader1, loader2], signal);
110
+ expect(loader1.loadCommands).toHaveBeenCalledTimes(1);
111
+ expect(loader1.loadCommands).toHaveBeenCalledWith(signal);
112
+ expect(loader2.loadCommands).toHaveBeenCalledTimes(1);
113
+ expect(loader2.loadCommands).toHaveBeenCalledWith(signal);
114
+ });
115
+ it('should rename extension commands when they conflict', async () => {
116
+ const builtinCommand = createMockCommand('deploy', CommandKind.BUILT_IN);
117
+ const userCommand = createMockCommand('sync', CommandKind.FILE);
118
+ const extensionCommand1 = {
119
+ ...createMockCommand('deploy', CommandKind.FILE),
120
+ extensionName: 'firebase',
121
+ description: '[firebase] Deploy to Firebase',
122
+ };
123
+ const extensionCommand2 = {
124
+ ...createMockCommand('sync', CommandKind.FILE),
125
+ extensionName: 'git-helper',
126
+ description: '[git-helper] Sync with remote',
127
+ };
128
+ const mockLoader1 = new MockCommandLoader([builtinCommand]);
129
+ const mockLoader2 = new MockCommandLoader([
130
+ userCommand,
131
+ extensionCommand1,
132
+ extensionCommand2,
133
+ ]);
134
+ const service = await CommandService.create([mockLoader1, mockLoader2], new AbortController().signal);
135
+ const commands = service.getCommands();
136
+ expect(commands).toHaveLength(4);
137
+ // Built-in command keeps original name
138
+ const deployBuiltin = commands.find((cmd) => cmd.name === 'deploy' && !cmd.extensionName);
139
+ expect(deployBuiltin).toBeDefined();
140
+ expect(deployBuiltin?.kind).toBe(CommandKind.BUILT_IN);
141
+ // Extension command conflicting with built-in gets renamed
142
+ const deployExtension = commands.find((cmd) => cmd.name === 'firebase.deploy');
143
+ expect(deployExtension).toBeDefined();
144
+ expect(deployExtension?.extensionName).toBe('firebase');
145
+ // User command keeps original name
146
+ const syncUser = commands.find((cmd) => cmd.name === 'sync' && !cmd.extensionName);
147
+ expect(syncUser).toBeDefined();
148
+ expect(syncUser?.kind).toBe(CommandKind.FILE);
149
+ // Extension command conflicting with user command gets renamed
150
+ const syncExtension = commands.find((cmd) => cmd.name === 'git-helper.sync');
151
+ expect(syncExtension).toBeDefined();
152
+ expect(syncExtension?.extensionName).toBe('git-helper');
153
+ });
154
+ it('should handle user/project command override correctly', async () => {
155
+ const builtinCommand = createMockCommand('help', CommandKind.BUILT_IN);
156
+ const userCommand = createMockCommand('help', CommandKind.FILE);
157
+ const projectCommand = createMockCommand('deploy', CommandKind.FILE);
158
+ const userDeployCommand = createMockCommand('deploy', CommandKind.FILE);
159
+ const mockLoader1 = new MockCommandLoader([builtinCommand]);
160
+ const mockLoader2 = new MockCommandLoader([
161
+ userCommand,
162
+ userDeployCommand,
163
+ projectCommand,
164
+ ]);
165
+ const service = await CommandService.create([mockLoader1, mockLoader2], new AbortController().signal);
166
+ const commands = service.getCommands();
167
+ expect(commands).toHaveLength(2);
168
+ // User command overrides built-in
169
+ const helpCommand = commands.find((cmd) => cmd.name === 'help');
170
+ expect(helpCommand).toBeDefined();
171
+ expect(helpCommand?.kind).toBe(CommandKind.FILE);
172
+ // Project command overrides user command (last wins)
173
+ const deployCommand = commands.find((cmd) => cmd.name === 'deploy');
174
+ expect(deployCommand).toBeDefined();
175
+ expect(deployCommand?.kind).toBe(CommandKind.FILE);
176
+ });
177
+ it('should handle secondary conflicts when renaming extension commands', async () => {
178
+ // User has both /deploy and /gcp.deploy commands
179
+ const userCommand1 = createMockCommand('deploy', CommandKind.FILE);
180
+ const userCommand2 = createMockCommand('gcp.deploy', CommandKind.FILE);
181
+ // Extension also has a deploy command that will conflict with user's /deploy
182
+ const extensionCommand = {
183
+ ...createMockCommand('deploy', CommandKind.FILE),
184
+ extensionName: 'gcp',
185
+ description: '[gcp] Deploy to Google Cloud',
186
+ };
187
+ const mockLoader = new MockCommandLoader([
188
+ userCommand1,
189
+ userCommand2,
190
+ extensionCommand,
191
+ ]);
192
+ const service = await CommandService.create([mockLoader], new AbortController().signal);
193
+ const commands = service.getCommands();
194
+ expect(commands).toHaveLength(3);
195
+ // Original user command keeps its name
196
+ const deployUser = commands.find((cmd) => cmd.name === 'deploy' && !cmd.extensionName);
197
+ expect(deployUser).toBeDefined();
198
+ // User's dot notation command keeps its name
199
+ const gcpDeployUser = commands.find((cmd) => cmd.name === 'gcp.deploy' && !cmd.extensionName);
200
+ expect(gcpDeployUser).toBeDefined();
201
+ // Extension command gets renamed with suffix due to secondary conflict
202
+ const deployExtension = commands.find((cmd) => cmd.name === 'gcp.deploy1' && cmd.extensionName === 'gcp');
203
+ expect(deployExtension).toBeDefined();
204
+ expect(deployExtension?.description).toBe('[gcp] Deploy to Google Cloud');
205
+ });
206
+ it('should handle multiple secondary conflicts with incrementing suffixes', async () => {
207
+ // User has /deploy, /gcp.deploy, and /gcp.deploy1
208
+ const userCommand1 = createMockCommand('deploy', CommandKind.FILE);
209
+ const userCommand2 = createMockCommand('gcp.deploy', CommandKind.FILE);
210
+ const userCommand3 = createMockCommand('gcp.deploy1', CommandKind.FILE);
211
+ // Extension has a deploy command
212
+ const extensionCommand = {
213
+ ...createMockCommand('deploy', CommandKind.FILE),
214
+ extensionName: 'gcp',
215
+ description: '[gcp] Deploy to Google Cloud',
216
+ };
217
+ const mockLoader = new MockCommandLoader([
218
+ userCommand1,
219
+ userCommand2,
220
+ userCommand3,
221
+ extensionCommand,
222
+ ]);
223
+ const service = await CommandService.create([mockLoader], new AbortController().signal);
224
+ const commands = service.getCommands();
225
+ expect(commands).toHaveLength(4);
226
+ // Extension command gets renamed with suffix 2 due to multiple conflicts
227
+ const deployExtension = commands.find((cmd) => cmd.name === 'gcp.deploy2' && cmd.extensionName === 'gcp');
228
+ expect(deployExtension).toBeDefined();
229
+ expect(deployExtension?.description).toBe('[gcp] Deploy to Google Cloud');
230
+ });
231
+ });
232
+ //# sourceMappingURL=CommandService.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandService.test.js","sourceRoot":"","sources":["../../../src/services/CommandService.test.ts"],"names":[],"mappings":"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"}
@@ -21,16 +21,28 @@ export declare class FileCommandLoader implements ICommandLoader {
21
21
  private readonly projectRoot;
22
22
  constructor(config: Config | null);
23
23
  /**
24
- * Loads all commands, applying the precedence rule where project-level
25
- * commands override user-level commands with the same name.
24
+ * Loads all commands from user, project, and extension directories.
25
+ * Returns commands in order: user project extensions (alphabetically).
26
+ *
27
+ * Order is important for conflict resolution in CommandService:
28
+ * - User/project commands (without extensionName) use "last wins" strategy
29
+ * - Extension commands (with extensionName) get renamed if conflicts exist
30
+ *
26
31
  * @param signal An AbortSignal to cancel the loading process.
27
- * @returns A promise that resolves to an array of loaded SlashCommands.
32
+ * @returns A promise that resolves to an array of all loaded SlashCommands.
28
33
  */
29
34
  loadCommands(signal: AbortSignal): Promise<SlashCommand[]>;
35
+ /**
36
+ * Get all command directories in order for loading.
37
+ * User commands → Project commands → Extension commands
38
+ * This order ensures extension commands can detect all conflicts.
39
+ */
40
+ private getCommandDirectories;
30
41
  /**
31
42
  * Parses a single .toml file and transforms it into a SlashCommand object.
32
43
  * @param filePath The absolute path to the .toml file.
33
44
  * @param baseDir The root command directory for name calculation.
45
+ * @param extensionName Optional extension name to prefix commands with.
34
46
  * @returns A promise resolving to a SlashCommand, or null if the file is invalid.
35
47
  */
36
48
  private parseAndAdaptFile;
@@ -9,7 +9,10 @@ import toml from '@iarna/toml';
9
9
  import { glob } from 'glob';
10
10
  import { z } from 'zod';
11
11
  import { getProjectCommandsDir, getUserCommandsDir, } from '@machina.ai/cell-cli-core';
12
- import { CommandKind } from '../ui/commands/types.js';
12
+ import { CommandKind, } from '../ui/commands/types.js';
13
+ import { DefaultArgumentProcessor } from './prompt-processors/argumentProcessor.js';
14
+ import { SHORTHAND_ARGS_PLACEHOLDER, SHELL_INJECTION_TRIGGER, } from './prompt-processors/types.js';
15
+ import { ConfirmationRequiredError, ShellProcessor, } from './prompt-processors/shellProcessor.js';
13
16
  /**
14
17
  * Defines the Zod schema for a command definition file. This serves as the
15
18
  * single source of truth for both validation and type inference.
@@ -39,54 +42,78 @@ export class FileCommandLoader {
39
42
  this.projectRoot = config?.getProjectRoot() || process.cwd();
40
43
  }
41
44
  /**
42
- * Loads all commands, applying the precedence rule where project-level
43
- * commands override user-level commands with the same name.
45
+ * Loads all commands from user, project, and extension directories.
46
+ * Returns commands in order: user project extensions (alphabetically).
47
+ *
48
+ * Order is important for conflict resolution in CommandService:
49
+ * - User/project commands (without extensionName) use "last wins" strategy
50
+ * - Extension commands (with extensionName) get renamed if conflicts exist
51
+ *
44
52
  * @param signal An AbortSignal to cancel the loading process.
45
- * @returns A promise that resolves to an array of loaded SlashCommands.
53
+ * @returns A promise that resolves to an array of all loaded SlashCommands.
46
54
  */
47
55
  async loadCommands(signal) {
48
- const commandMap = new Map();
56
+ const allCommands = [];
49
57
  const globOptions = {
50
58
  nodir: true,
51
59
  dot: true,
52
60
  signal,
61
+ follow: true,
53
62
  };
54
- try {
55
- // User Commands
56
- const userDir = getUserCommandsDir();
57
- const userFiles = await glob('**/*.toml', {
58
- ...globOptions,
59
- cwd: userDir,
60
- });
61
- const userCommandPromises = userFiles.map((file) => this.parseAndAdaptFile(path.join(userDir, file), userDir));
62
- const userCommands = (await Promise.all(userCommandPromises)).filter((cmd) => cmd !== null);
63
- for (const cmd of userCommands) {
64
- commandMap.set(cmd.name, cmd);
63
+ // Load commands from each directory
64
+ const commandDirs = this.getCommandDirectories();
65
+ for (const dirInfo of commandDirs) {
66
+ try {
67
+ const files = await glob('**/*.toml', {
68
+ ...globOptions,
69
+ cwd: dirInfo.path,
70
+ });
71
+ const commandPromises = files.map((file) => this.parseAndAdaptFile(path.join(dirInfo.path, file), dirInfo.path, dirInfo.extensionName));
72
+ const commands = (await Promise.all(commandPromises)).filter((cmd) => cmd !== null);
73
+ // Add all commands without deduplication
74
+ allCommands.push(...commands);
65
75
  }
66
- // Project Commands (these intentionally override user commands)
67
- const projectDir = getProjectCommandsDir(this.projectRoot);
68
- const projectFiles = await glob('**/*.toml', {
69
- ...globOptions,
70
- cwd: projectDir,
71
- });
72
- const projectCommandPromises = projectFiles.map((file) => this.parseAndAdaptFile(path.join(projectDir, file), projectDir));
73
- const projectCommands = (await Promise.all(projectCommandPromises)).filter((cmd) => cmd !== null);
74
- for (const cmd of projectCommands) {
75
- commandMap.set(cmd.name, cmd);
76
+ catch (error) {
77
+ if (error.code !== 'ENOENT') {
78
+ console.error(`[FileCommandLoader] Error loading commands from ${dirInfo.path}:`, error);
79
+ }
76
80
  }
77
81
  }
78
- catch (error) {
79
- console.error(`[FileCommandLoader] Error during file search:`, error);
82
+ return allCommands;
83
+ }
84
+ /**
85
+ * Get all command directories in order for loading.
86
+ * User commands → Project commands → Extension commands
87
+ * This order ensures extension commands can detect all conflicts.
88
+ */
89
+ getCommandDirectories() {
90
+ const dirs = [];
91
+ // 1. User commands
92
+ dirs.push({ path: getUserCommandsDir() });
93
+ // 2. Project commands (override user commands)
94
+ dirs.push({ path: getProjectCommandsDir(this.projectRoot) });
95
+ // 3. Extension commands (processed last to detect all conflicts)
96
+ if (this.config) {
97
+ const activeExtensions = this.config
98
+ .getExtensions()
99
+ .filter((ext) => ext.isActive)
100
+ .sort((a, b) => a.name.localeCompare(b.name)); // Sort alphabetically for deterministic loading
101
+ const extensionCommandDirs = activeExtensions.map((ext) => ({
102
+ path: path.join(ext.path, 'commands'),
103
+ extensionName: ext.name,
104
+ }));
105
+ dirs.push(...extensionCommandDirs);
80
106
  }
81
- return Array.from(commandMap.values());
107
+ return dirs;
82
108
  }
83
109
  /**
84
110
  * Parses a single .toml file and transforms it into a SlashCommand object.
85
111
  * @param filePath The absolute path to the .toml file.
86
112
  * @param baseDir The root command directory for name calculation.
113
+ * @param extensionName Optional extension name to prefix commands with.
87
114
  * @returns A promise resolving to a SlashCommand, or null if the file is invalid.
88
115
  */
89
- async parseAndAdaptFile(filePath, baseDir) {
116
+ async parseAndAdaptFile(filePath, baseDir, extensionName) {
90
117
  let fileContent;
91
118
  try {
92
119
  fileContent = await fs.readFile(filePath, 'utf-8');
@@ -111,22 +138,72 @@ export class FileCommandLoader {
111
138
  const validDef = validationResult.data;
112
139
  const relativePathWithExt = path.relative(baseDir, filePath);
113
140
  const relativePath = relativePathWithExt.substring(0, relativePathWithExt.length - 5);
114
- const commandName = relativePath
141
+ const baseCommandName = relativePath
115
142
  .split(path.sep)
116
143
  // Sanitize each path segment to prevent ambiguity. Since ':' is our
117
144
  // namespace separator, we replace any literal colons in filenames
118
145
  // with underscores to avoid naming conflicts.
119
146
  .map((segment) => segment.replaceAll(':', '_'))
120
147
  .join(':');
148
+ // Add extension name tag for extension commands
149
+ const defaultDescription = `Custom command from ${path.basename(filePath)}`;
150
+ let description = validDef.description || defaultDescription;
151
+ if (extensionName) {
152
+ description = `[${extensionName}] ${description}`;
153
+ }
154
+ const processors = [];
155
+ const usesArgs = validDef.prompt.includes(SHORTHAND_ARGS_PLACEHOLDER);
156
+ const usesShellInjection = validDef.prompt.includes(SHELL_INJECTION_TRIGGER);
157
+ // Interpolation (Shell Execution and Argument Injection)
158
+ // If the prompt uses either shell injection OR argument placeholders,
159
+ // we must use the ShellProcessor.
160
+ if (usesShellInjection || usesArgs) {
161
+ processors.push(new ShellProcessor(baseCommandName));
162
+ }
163
+ // Default Argument Handling
164
+ // If NO explicit argument injection ({{args}}) was used, we append the raw invocation.
165
+ if (!usesArgs) {
166
+ processors.push(new DefaultArgumentProcessor());
167
+ }
121
168
  return {
122
- name: commandName,
123
- description: validDef.description ||
124
- `Custom command from ${path.basename(filePath)}`,
169
+ name: baseCommandName,
170
+ description,
125
171
  kind: CommandKind.FILE,
126
- action: async () => ({
127
- type: 'submit_prompt',
128
- content: validDef.prompt,
129
- }),
172
+ extensionName,
173
+ action: async (context, _args) => {
174
+ if (!context.invocation) {
175
+ console.error(`[FileCommandLoader] Critical error: Command '${baseCommandName}' was executed without invocation context.`);
176
+ return {
177
+ type: 'submit_prompt',
178
+ content: validDef.prompt, // Fallback to unprocessed prompt
179
+ };
180
+ }
181
+ try {
182
+ let processedPrompt = validDef.prompt;
183
+ for (const processor of processors) {
184
+ processedPrompt = await processor.process(processedPrompt, context);
185
+ }
186
+ return {
187
+ type: 'submit_prompt',
188
+ content: processedPrompt,
189
+ };
190
+ }
191
+ catch (e) {
192
+ // Check if it's our specific error type
193
+ if (e instanceof ConfirmationRequiredError) {
194
+ // Halt and request confirmation from the UI layer.
195
+ return {
196
+ type: 'confirm_shell_commands',
197
+ commandsToConfirm: e.commandsToConfirm,
198
+ originalInvocation: {
199
+ raw: context.invocation.raw,
200
+ },
201
+ };
202
+ }
203
+ // Re-throw other errors to be handled by the global error handler.
204
+ throw e;
205
+ }
206
+ },
130
207
  };
131
208
  }
132
209
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FileCommandLoader.js","sourceRoot":"","sources":["../../../src/services/FileCommandLoader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileCommandLoader.js","sourceRoot":"","sources":["../../../src/services/FileCommandLoader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,aAAa,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAEL,WAAW,GAGZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,EAEL,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,yBAAyB,EACzB,cAAc,GACf,MAAM,uCAAuC,CAAC;AAO/C;;;GAGG;AACH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,cAAc,EAAE,iCAAiC;QACjD,kBAAkB,EAAE,sCAAsC;KAC3D,CAAC;IACF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,OAAO,iBAAiB;IAGC;IAFZ,WAAW,CAAS;IAErC,YAA6B,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;QAChD,IAAI,CAAC,WAAW,GAAG,MAAM,EAAE,cAAc,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/D,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,YAAY,CAAC,MAAmB;QACpC,MAAM,WAAW,GAAmB,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG;YAClB,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,IAAI;YACT,MAAM;YACN,MAAM,EAAE,IAAI;SACb,CAAC;QAEF,oCAAoC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACjD,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE;oBACpC,GAAG,WAAW;oBACd,GAAG,EAAE,OAAO,CAAC,IAAI;iBAClB,CAAC,CAAC;gBAEH,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACzC,IAAI,CAAC,iBAAiB,CACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAC7B,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,aAAa,CACtB,CACF,CAAC;gBAEF,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAC1D,CAAC,GAAG,EAAuB,EAAE,CAAC,GAAG,KAAK,IAAI,CAC3C,CAAC;gBAEF,yCAAyC;gBACzC,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;YAChC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACvD,OAAO,CAAC,KAAK,CACX,mDAAmD,OAAO,CAAC,IAAI,GAAG,EAClE,KAAK,CACN,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACK,qBAAqB;QAC3B,MAAM,IAAI,GAAuB,EAAE,CAAC;QAEpC,mBAAmB;QACnB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAE1C,+CAA+C;QAC/C,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAE7D,iEAAiE;QACjE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM;iBACjC,aAAa,EAAE;iBACf,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC;iBAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gDAAgD;YAEjG,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC1D,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;gBACrC,aAAa,EAAE,GAAG,CAAC,IAAI;aACxB,CAAC,CAAC,CAAC;YAEJ,IAAI,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,iBAAiB,CAC7B,QAAgB,EAChB,OAAe,EACf,aAAsB;QAEtB,IAAI,WAAmB,CAAC;QACxB,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CACX,2CAA2C,QAAQ,GAAG,EACtD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CACX,iDAAiD,QAAQ,GAAG,EAC5D,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEhE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,CACX,sDAAsD,QAAQ,sBAAsB,EACpF,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,CACjC,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC;QAEvC,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,mBAAmB,CAAC,SAAS,CAChD,CAAC,EACD,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAC/B,CAAC;QACF,MAAM,eAAe,GAAG,YAAY;aACjC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YAChB,oEAAoE;YACpE,kEAAkE;YAClE,8CAA8C;aAC7C,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aAC9C,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,gDAAgD;QAChD,MAAM,kBAAkB,GAAG,uBAAuB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5E,IAAI,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,kBAAkB,CAAC;QAC7D,IAAI,aAAa,EAAE,CAAC;YAClB,WAAW,GAAG,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;QACpD,CAAC;QAED,MAAM,UAAU,GAAuB,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;QACtE,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CACjD,uBAAuB,CACxB,CAAC;QAEF,yDAAyD;QACzD,sEAAsE;QACtE,kCAAkC;QAClC,IAAI,kBAAkB,IAAI,QAAQ,EAAE,CAAC;YACnC,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,4BAA4B;QAC5B,uFAAuF;QACvF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,UAAU,CAAC,IAAI,CAAC,IAAI,wBAAwB,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,OAAO;YACL,IAAI,EAAE,eAAe;YACrB,WAAW;YACX,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,aAAa;YACb,MAAM,EAAE,KAAK,EACX,OAAuB,EACvB,KAAa,EACsB,EAAE;gBACrC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;oBACxB,OAAO,CAAC,KAAK,CACX,gDAAgD,eAAe,4CAA4C,CAC5G,CAAC;oBACF,OAAO;wBACL,IAAI,EAAE,eAAe;wBACrB,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,iCAAiC;qBAC5D,CAAC;gBACJ,CAAC;gBAED,IAAI,CAAC;oBACH,IAAI,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC;oBACtC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;wBACnC,eAAe,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;oBACtE,CAAC;oBAED,OAAO;wBACL,IAAI,EAAE,eAAe;wBACrB,OAAO,EAAE,eAAe;qBACzB,CAAC;gBACJ,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,wCAAwC;oBACxC,IAAI,CAAC,YAAY,yBAAyB,EAAE,CAAC;wBAC3C,mDAAmD;wBACnD,OAAO;4BACL,IAAI,EAAE,wBAAwB;4BAC9B,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;4BACtC,kBAAkB,EAAE;gCAClB,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG;6BAC5B;yBACF,CAAC;oBACJ,CAAC;oBACD,mEAAmE;oBACnE,MAAM,CAAC,CAAC;gBACV,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Config } from '@machina.ai/cell-cli-core';
7
+ import { SlashCommand } from '../ui/commands/types.js';
8
+ import { ICommandLoader } from './types.js';
9
+ /**
10
+ * Discovers and loads executable slash commands from prompts exposed by
11
+ * Model-Context-Protocol (MCP) servers.
12
+ */
13
+ export declare class McpPromptLoader implements ICommandLoader {
14
+ private readonly config;
15
+ constructor(config: Config | null);
16
+ /**
17
+ * Loads all available prompts from all configured MCP servers and adapts
18
+ * them into executable SlashCommand objects.
19
+ *
20
+ * @param _signal An AbortSignal (unused for this synchronous loader).
21
+ * @returns A promise that resolves to an array of loaded SlashCommands.
22
+ */
23
+ loadCommands(_signal: AbortSignal): Promise<SlashCommand[]>;
24
+ private parseArgs;
25
+ }