@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,192 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { getErrorMessage, getMCPServerPrompts, } from '@machina.ai/cell-cli-core';
7
+ import { CommandKind, } from '../ui/commands/types.js';
8
+ /**
9
+ * Discovers and loads executable slash commands from prompts exposed by
10
+ * Model-Context-Protocol (MCP) servers.
11
+ */
12
+ export class McpPromptLoader {
13
+ config;
14
+ constructor(config) {
15
+ this.config = config;
16
+ }
17
+ /**
18
+ * Loads all available prompts from all configured MCP servers and adapts
19
+ * them into executable SlashCommand objects.
20
+ *
21
+ * @param _signal An AbortSignal (unused for this synchronous loader).
22
+ * @returns A promise that resolves to an array of loaded SlashCommands.
23
+ */
24
+ loadCommands(_signal) {
25
+ const promptCommands = [];
26
+ if (!this.config) {
27
+ return Promise.resolve([]);
28
+ }
29
+ const mcpServers = this.config.getMcpServers() || {};
30
+ for (const serverName in mcpServers) {
31
+ const prompts = getMCPServerPrompts(this.config, serverName) || [];
32
+ for (const prompt of prompts) {
33
+ const commandName = `${prompt.name}`;
34
+ const newPromptCommand = {
35
+ name: commandName,
36
+ description: prompt.description || `Invoke prompt ${prompt.name}`,
37
+ kind: CommandKind.MCP_PROMPT,
38
+ subCommands: [
39
+ {
40
+ name: 'help',
41
+ description: 'Show help for this prompt',
42
+ kind: CommandKind.MCP_PROMPT,
43
+ action: async () => {
44
+ if (!prompt.arguments || prompt.arguments.length === 0) {
45
+ return {
46
+ type: 'message',
47
+ messageType: 'info',
48
+ content: `Prompt "${prompt.name}" has no arguments.`,
49
+ };
50
+ }
51
+ let helpMessage = `Arguments for "${prompt.name}":\n\n`;
52
+ if (prompt.arguments && prompt.arguments.length > 0) {
53
+ helpMessage += `You can provide arguments by name (e.g., --argName="value") or by position.\n\n`;
54
+ helpMessage += `e.g., ${prompt.name} ${prompt.arguments?.map((_) => `"foo"`)} is equivalent to ${prompt.name} ${prompt.arguments?.map((arg) => `--${arg.name}="foo"`)}\n\n`;
55
+ }
56
+ for (const arg of prompt.arguments) {
57
+ helpMessage += ` --${arg.name}\n`;
58
+ if (arg.description) {
59
+ helpMessage += ` ${arg.description}\n`;
60
+ }
61
+ helpMessage += ` (required: ${arg.required ? 'yes' : 'no'})\n\n`;
62
+ }
63
+ return {
64
+ type: 'message',
65
+ messageType: 'info',
66
+ content: helpMessage,
67
+ };
68
+ },
69
+ },
70
+ ],
71
+ action: async (context, args) => {
72
+ if (!this.config) {
73
+ return {
74
+ type: 'message',
75
+ messageType: 'error',
76
+ content: 'Config not loaded.',
77
+ };
78
+ }
79
+ const promptInputs = this.parseArgs(args, prompt.arguments);
80
+ if (promptInputs instanceof Error) {
81
+ return {
82
+ type: 'message',
83
+ messageType: 'error',
84
+ content: promptInputs.message,
85
+ };
86
+ }
87
+ try {
88
+ const mcpServers = this.config.getMcpServers() || {};
89
+ const mcpServerConfig = mcpServers[serverName];
90
+ if (!mcpServerConfig) {
91
+ return {
92
+ type: 'message',
93
+ messageType: 'error',
94
+ content: `MCP server config not found for '${serverName}'.`,
95
+ };
96
+ }
97
+ const result = await prompt.invoke(promptInputs);
98
+ if (result['error']) {
99
+ return {
100
+ type: 'message',
101
+ messageType: 'error',
102
+ content: `Error invoking prompt: ${result['error']}`,
103
+ };
104
+ }
105
+ if (!result.messages?.[0]?.content?.['text']) {
106
+ return {
107
+ type: 'message',
108
+ messageType: 'error',
109
+ content: 'Received an empty or invalid prompt response from the server.',
110
+ };
111
+ }
112
+ return {
113
+ type: 'submit_prompt',
114
+ content: JSON.stringify(result.messages[0].content.text),
115
+ };
116
+ }
117
+ catch (error) {
118
+ return {
119
+ type: 'message',
120
+ messageType: 'error',
121
+ content: `Error: ${getErrorMessage(error)}`,
122
+ };
123
+ }
124
+ },
125
+ completion: async (_, partialArg) => {
126
+ if (!prompt || !prompt.arguments) {
127
+ return [];
128
+ }
129
+ const suggestions = [];
130
+ const usedArgNames = new Set((partialArg.match(/--([^=]+)/g) || []).map((s) => s.substring(2)));
131
+ for (const arg of prompt.arguments) {
132
+ if (!usedArgNames.has(arg.name)) {
133
+ suggestions.push(`--${arg.name}=""`);
134
+ }
135
+ }
136
+ return suggestions;
137
+ },
138
+ };
139
+ promptCommands.push(newPromptCommand);
140
+ }
141
+ }
142
+ return Promise.resolve(promptCommands);
143
+ }
144
+ parseArgs(userArgs, promptArgs) {
145
+ const argValues = {};
146
+ const promptInputs = {};
147
+ // arg parsing: --key="value" or --key=value
148
+ const namedArgRegex = /--([^=]+)=(?:"((?:\\.|[^"\\])*)"|([^ ]*))/g;
149
+ let match;
150
+ const remainingArgs = [];
151
+ let lastIndex = 0;
152
+ while ((match = namedArgRegex.exec(userArgs)) !== null) {
153
+ const key = match[1];
154
+ const value = match[2] ?? match[3]; // Quoted or unquoted value
155
+ argValues[key] = value;
156
+ // Capture text between matches as potential positional args
157
+ if (match.index > lastIndex) {
158
+ remainingArgs.push(userArgs.substring(lastIndex, match.index).trim());
159
+ }
160
+ lastIndex = namedArgRegex.lastIndex;
161
+ }
162
+ // Capture any remaining text after the last named arg
163
+ if (lastIndex < userArgs.length) {
164
+ remainingArgs.push(userArgs.substring(lastIndex).trim());
165
+ }
166
+ const positionalArgs = remainingArgs.join(' ').split(/ +/);
167
+ if (!promptArgs) {
168
+ return promptInputs;
169
+ }
170
+ for (const arg of promptArgs) {
171
+ if (argValues[arg.name]) {
172
+ promptInputs[arg.name] = argValues[arg.name];
173
+ }
174
+ }
175
+ const unfilledArgs = promptArgs.filter((arg) => arg.required && !promptInputs[arg.name]);
176
+ const missingArgs = [];
177
+ for (let i = 0; i < unfilledArgs.length; i++) {
178
+ if (positionalArgs.length > i && positionalArgs[i]) {
179
+ promptInputs[unfilledArgs[i].name] = positionalArgs[i];
180
+ }
181
+ else {
182
+ missingArgs.push(unfilledArgs[i].name);
183
+ }
184
+ }
185
+ if (missingArgs.length > 0) {
186
+ const missingArgNames = missingArgs.map((name) => `--${name}`).join(', ');
187
+ return new Error(`Missing required argument(s): ${missingArgNames}`);
188
+ }
189
+ return promptInputs;
190
+ }
191
+ }
192
+ //# sourceMappingURL=McpPromptLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpPromptLoader.js","sourceRoot":"","sources":["../../../src/services/McpPromptLoader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { IPromptProcessor } from './types.js';
7
+ import { CommandContext } from '../../ui/commands/types.js';
8
+ /**
9
+ * Appends the user's full command invocation to the prompt if arguments are
10
+ * provided, allowing the model to perform its own argument parsing.
11
+ *
12
+ * This processor is only used if the prompt does NOT contain {{args}}.
13
+ */
14
+ export declare class DefaultArgumentProcessor implements IPromptProcessor {
15
+ process(prompt: string, context: CommandContext): Promise<string>;
16
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Appends the user's full command invocation to the prompt if arguments are
8
+ * provided, allowing the model to perform its own argument parsing.
9
+ *
10
+ * This processor is only used if the prompt does NOT contain {{args}}.
11
+ */
12
+ export class DefaultArgumentProcessor {
13
+ async process(prompt, context) {
14
+ if (context.invocation.args) {
15
+ return `${prompt}\n\n${context.invocation.raw}`;
16
+ }
17
+ return prompt;
18
+ }
19
+ }
20
+ //# sourceMappingURL=argumentProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"argumentProcessor.js","sourceRoot":"","sources":["../../../../src/services/prompt-processors/argumentProcessor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;;;GAKG;AACH,MAAM,OAAO,wBAAwB;IACnC,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,OAAuB;QACnD,IAAI,OAAO,CAAC,UAAW,CAAC,IAAI,EAAE,CAAC;YAC7B,OAAO,GAAG,MAAM,OAAO,OAAO,CAAC,UAAW,CAAC,GAAG,EAAE,CAAC;QACnD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CommandContext } from '../../ui/commands/types.js';
7
+ import { IPromptProcessor } from './types.js';
8
+ export declare class ConfirmationRequiredError extends Error {
9
+ commandsToConfirm: string[];
10
+ constructor(message: string, commandsToConfirm: string[]);
11
+ }
12
+ /**
13
+ * Handles prompt interpolation, including shell command execution (`!{...}`)
14
+ * and context-aware argument injection (`{{args}}`).
15
+ *
16
+ * This processor ensures that:
17
+ * 1. `{{args}}` outside `!{...}` are replaced with raw input.
18
+ * 2. `{{args}}` inside `!{...}` are replaced with shell-escaped input.
19
+ * 3. Shell commands are executed securely after argument substitution.
20
+ * 4. Parsing correctly handles nested braces.
21
+ */
22
+ export declare class ShellProcessor implements IPromptProcessor {
23
+ private readonly commandName;
24
+ constructor(commandName: string);
25
+ process(prompt: string, context: CommandContext): Promise<string>;
26
+ /**
27
+ * Iteratively parses the prompt string to extract shell injections (!{...}),
28
+ * correctly handling nested braces within the command.
29
+ *
30
+ * @param prompt The prompt string to parse.
31
+ * @returns An array of extracted ShellInjection objects.
32
+ * @throws Error if an unclosed injection (`!{`) is found.
33
+ */
34
+ private extractInjections;
35
+ }
@@ -0,0 +1,170 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { ApprovalMode, checkCommandPermissions, escapeShellArg, getShellConfiguration, ShellExecutionService, } from '@machina.ai/cell-cli-core';
7
+ import { SHELL_INJECTION_TRIGGER, SHORTHAND_ARGS_PLACEHOLDER, } from './types.js';
8
+ export class ConfirmationRequiredError extends Error {
9
+ commandsToConfirm;
10
+ constructor(message, commandsToConfirm) {
11
+ super(message);
12
+ this.commandsToConfirm = commandsToConfirm;
13
+ this.name = 'ConfirmationRequiredError';
14
+ }
15
+ }
16
+ /**
17
+ * Handles prompt interpolation, including shell command execution (`!{...}`)
18
+ * and context-aware argument injection (`{{args}}`).
19
+ *
20
+ * This processor ensures that:
21
+ * 1. `{{args}}` outside `!{...}` are replaced with raw input.
22
+ * 2. `{{args}}` inside `!{...}` are replaced with shell-escaped input.
23
+ * 3. Shell commands are executed securely after argument substitution.
24
+ * 4. Parsing correctly handles nested braces.
25
+ */
26
+ export class ShellProcessor {
27
+ commandName;
28
+ constructor(commandName) {
29
+ this.commandName = commandName;
30
+ }
31
+ async process(prompt, context) {
32
+ const userArgsRaw = context.invocation?.args || '';
33
+ if (!prompt.includes(SHELL_INJECTION_TRIGGER)) {
34
+ return prompt.replaceAll(SHORTHAND_ARGS_PLACEHOLDER, userArgsRaw);
35
+ }
36
+ const config = context.services.config;
37
+ if (!config) {
38
+ throw new Error(`Security configuration not loaded. Cannot verify shell command permissions for '${this.commandName}'. Aborting.`);
39
+ }
40
+ const { sessionShellAllowlist } = context.session;
41
+ const injections = this.extractInjections(prompt);
42
+ // If extractInjections found no closed blocks (and didn't throw), treat as raw.
43
+ if (injections.length === 0) {
44
+ return prompt.replaceAll(SHORTHAND_ARGS_PLACEHOLDER, userArgsRaw);
45
+ }
46
+ const { shell } = getShellConfiguration();
47
+ const userArgsEscaped = escapeShellArg(userArgsRaw, shell);
48
+ const resolvedInjections = injections.map((injection) => {
49
+ if (injection.command === '') {
50
+ return injection;
51
+ }
52
+ // Replace {{args}} inside the command string with the escaped version.
53
+ const resolvedCommand = injection.command.replaceAll(SHORTHAND_ARGS_PLACEHOLDER, userArgsEscaped);
54
+ return { ...injection, resolvedCommand };
55
+ });
56
+ const commandsToConfirm = new Set();
57
+ for (const injection of resolvedInjections) {
58
+ const command = injection.resolvedCommand;
59
+ if (!command)
60
+ continue;
61
+ // Security check on the final, escaped command string.
62
+ const { allAllowed, disallowedCommands, blockReason, isHardDenial } = checkCommandPermissions(command, config, sessionShellAllowlist);
63
+ if (!allAllowed) {
64
+ if (isHardDenial) {
65
+ throw new Error(`${this.commandName} cannot be run. Blocked command: "${command}". Reason: ${blockReason || 'Blocked by configuration.'}`);
66
+ }
67
+ // If not a hard denial, respect YOLO mode and auto-approve.
68
+ if (config.getApprovalMode() !== ApprovalMode.YOLO) {
69
+ disallowedCommands.forEach((uc) => commandsToConfirm.add(uc));
70
+ }
71
+ }
72
+ }
73
+ // Handle confirmation requirements.
74
+ if (commandsToConfirm.size > 0) {
75
+ throw new ConfirmationRequiredError('Shell command confirmation required', Array.from(commandsToConfirm));
76
+ }
77
+ let processedPrompt = '';
78
+ let lastIndex = 0;
79
+ for (const injection of resolvedInjections) {
80
+ // Append the text segment BEFORE the injection, substituting {{args}} with RAW input.
81
+ const segment = prompt.substring(lastIndex, injection.startIndex);
82
+ processedPrompt += segment.replaceAll(SHORTHAND_ARGS_PLACEHOLDER, userArgsRaw);
83
+ // Execute the resolved command (which already has ESCAPED input).
84
+ if (injection.resolvedCommand) {
85
+ const { result } = ShellExecutionService.execute(injection.resolvedCommand, config.getTargetDir(), () => { }, new AbortController().signal);
86
+ const executionResult = await result;
87
+ // Handle Spawn Errors
88
+ if (executionResult.error && !executionResult.aborted) {
89
+ throw new Error(`Failed to start shell command in '${this.commandName}': ${executionResult.error.message}. Command: ${injection.resolvedCommand}`);
90
+ }
91
+ // Append the output, making stderr explicit for the model.
92
+ if (executionResult.stdout) {
93
+ processedPrompt += executionResult.stdout;
94
+ }
95
+ if (executionResult.stderr) {
96
+ if (executionResult.stdout) {
97
+ processedPrompt += '\n';
98
+ }
99
+ processedPrompt += `--- STDERR ---\n${executionResult.stderr}`;
100
+ }
101
+ // Append a status message if the command did not succeed.
102
+ if (executionResult.aborted) {
103
+ processedPrompt += `\n[Shell command '${injection.resolvedCommand}' aborted]`;
104
+ }
105
+ else if (executionResult.exitCode !== 0 &&
106
+ executionResult.exitCode !== null) {
107
+ processedPrompt += `\n[Shell command '${injection.resolvedCommand}' exited with code ${executionResult.exitCode}]`;
108
+ }
109
+ else if (executionResult.signal !== null) {
110
+ processedPrompt += `\n[Shell command '${injection.resolvedCommand}' terminated by signal ${executionResult.signal}]`;
111
+ }
112
+ }
113
+ lastIndex = injection.endIndex;
114
+ }
115
+ // Append the remaining text AFTER the last injection, substituting {{args}} with RAW input.
116
+ const finalSegment = prompt.substring(lastIndex);
117
+ processedPrompt += finalSegment.replaceAll(SHORTHAND_ARGS_PLACEHOLDER, userArgsRaw);
118
+ return processedPrompt;
119
+ }
120
+ /**
121
+ * Iteratively parses the prompt string to extract shell injections (!{...}),
122
+ * correctly handling nested braces within the command.
123
+ *
124
+ * @param prompt The prompt string to parse.
125
+ * @returns An array of extracted ShellInjection objects.
126
+ * @throws Error if an unclosed injection (`!{`) is found.
127
+ */
128
+ extractInjections(prompt) {
129
+ const injections = [];
130
+ let index = 0;
131
+ while (index < prompt.length) {
132
+ const startIndex = prompt.indexOf(SHELL_INJECTION_TRIGGER, index);
133
+ if (startIndex === -1) {
134
+ break;
135
+ }
136
+ let currentIndex = startIndex + SHELL_INJECTION_TRIGGER.length;
137
+ let braceCount = 1;
138
+ let foundEnd = false;
139
+ while (currentIndex < prompt.length) {
140
+ const char = prompt[currentIndex];
141
+ // We count literal braces. This parser does not interpret shell quoting/escaping.
142
+ if (char === '{') {
143
+ braceCount++;
144
+ }
145
+ else if (char === '}') {
146
+ braceCount--;
147
+ if (braceCount === 0) {
148
+ const commandContent = prompt.substring(startIndex + SHELL_INJECTION_TRIGGER.length, currentIndex);
149
+ const endIndex = currentIndex + 1;
150
+ injections.push({
151
+ command: commandContent.trim(),
152
+ startIndex,
153
+ endIndex,
154
+ });
155
+ index = endIndex;
156
+ foundEnd = true;
157
+ break;
158
+ }
159
+ }
160
+ currentIndex++;
161
+ }
162
+ // Check if the inner loop finished without finding the closing brace.
163
+ if (!foundEnd) {
164
+ throw new Error(`Invalid syntax in command '${this.commandName}': Unclosed shell injection starting at index ${startIndex} ('!{'). Ensure braces are balanced.`);
165
+ }
166
+ }
167
+ return injections;
168
+ }
169
+ }
170
+ //# sourceMappingURL=shellProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shellProcessor.js","sourceRoot":"","sources":["../../../../src/services/prompt-processors/shellProcessor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CommandContext } from '../../ui/commands/types.js';
7
+ /**
8
+ * Defines the interface for a prompt processor, a module that can transform
9
+ * a prompt string before it is sent to the model. Processors are chained
10
+ * together to create a processing pipeline.
11
+ */
12
+ export interface IPromptProcessor {
13
+ /**
14
+ * Processes a prompt string, applying a specific transformation as part of a pipeline.
15
+ *
16
+ * Each processor in a command's pipeline receives the output of the previous
17
+ * processor. This method provides the full command context, allowing for
18
+ * complex transformations that may require access to invocation details,
19
+ * application services, or UI state.
20
+ *
21
+ * @param prompt The current state of the prompt string. This may have been
22
+ * modified by previous processors in the pipeline.
23
+ * @param context The full command context, providing access to invocation
24
+ * details (like `context.invocation.raw` and `context.invocation.args`),
25
+ * application services, and UI handlers.
26
+ * @returns A promise that resolves to the transformed prompt string, which
27
+ * will be passed to the next processor or, if it's the last one, sent to the model.
28
+ */
29
+ process(prompt: string, context: CommandContext): Promise<string>;
30
+ }
31
+ /**
32
+ * The placeholder string for shorthand argument injection in custom commands.
33
+ * When used outside of !{...}, arguments are injected raw.
34
+ * When used inside !{...}, arguments are shell-escaped.
35
+ */
36
+ export declare const SHORTHAND_ARGS_PLACEHOLDER = "{{args}}";
37
+ /**
38
+ * The trigger string for shell command injection in custom commands.
39
+ */
40
+ export declare const SHELL_INJECTION_TRIGGER = "!{";
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * The placeholder string for shorthand argument injection in custom commands.
8
+ * When used outside of !{...}, arguments are injected raw.
9
+ * When used inside !{...}, arguments are shell-escaped.
10
+ */
11
+ export const SHORTHAND_ARGS_PLACEHOLDER = '{{args}}';
12
+ /**
13
+ * The trigger string for shell command injection in custom commands.
14
+ */
15
+ export const SHELL_INJECTION_TRIGGER = '!{';
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/services/prompt-processors/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6BH;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAC;AAErD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ declare module 'vitest' {
7
+ interface Assertion<T> {
8
+ toHaveOnlyValidCharacters(): T;
9
+ }
10
+ interface AsymmetricMatchersContaining {
11
+ toHaveOnlyValidCharacters(): void;
12
+ }
13
+ }
14
+ export {};
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /// <reference types="vitest/globals" />
7
+ /**
8
+ * @license
9
+ * Copyright 2025 Google LLC
10
+ * SPDX-License-Identifier: Apache-2.0
11
+ */
12
+ import { expect } from 'vitest';
13
+ // RegExp to detect invalid characters: backspace, and ANSI escape codes
14
+ // eslint-disable-next-line no-control-regex
15
+ const invalidCharsRegex = /[\b\x1b]/;
16
+ function toHaveOnlyValidCharacters(buffer) {
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+ const { isNot } = this;
19
+ let pass = true;
20
+ const invalidLines = [];
21
+ for (let i = 0; i < buffer.lines.length; i++) {
22
+ const line = buffer.lines[i];
23
+ if (line.includes('\n')) {
24
+ pass = false;
25
+ invalidLines.push({ line: i, content: line });
26
+ break; // Fail fast on newlines
27
+ }
28
+ if (invalidCharsRegex.test(line)) {
29
+ pass = false;
30
+ invalidLines.push({ line: i, content: line });
31
+ }
32
+ }
33
+ return {
34
+ pass,
35
+ message: () => `Expected buffer ${isNot ? 'not ' : ''}to have only valid characters, but found invalid characters in lines:\n${invalidLines
36
+ .map((l) => ` [${l.line}]: "${l.content}"`) /* This line was changed */
37
+ .join('\n')}`,
38
+ actual: buffer.lines,
39
+ expected: 'Lines with no line breaks, backspaces, or escape codes.',
40
+ };
41
+ }
42
+ expect.extend({
43
+ toHaveOnlyValidCharacters,
44
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
+ });
46
+ //# sourceMappingURL=customMatchers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customMatchers.js","sourceRoot":"","sources":["../../../src/test-utils/customMatchers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wCAAwC;AAExC;;;;GAIG;AAEH,OAAO,EAAa,MAAM,EAAE,MAAM,QAAQ,CAAC;AAG3C,wEAAwE;AACxE,4CAA4C;AAC5C,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAErC,SAAS,yBAAyB,CAAkB,MAAkB;IACpE,8DAA8D;IAC9D,MAAM,EAAE,KAAK,EAAE,GAAG,IAAW,CAAC;IAC9B,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,MAAM,YAAY,GAA6C,EAAE,CAAC;IAElE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,IAAI,GAAG,KAAK,CAAC;YACb,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,MAAM,CAAC,wBAAwB;QACjC,CAAC;QACD,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,IAAI,GAAG,KAAK,CAAC;YACb,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,GAAG,EAAE,CACZ,mBAAmB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,0EAA0E,YAAY;aACzH,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,2BAA2B;aACvE,IAAI,CAAC,IAAI,CAAC,EAAE;QACjB,MAAM,EAAE,MAAM,CAAC,KAAK;QACpB,QAAQ,EAAE,yDAAyD;KACpE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,CAAC;IACZ,yBAAyB;IACzB,8DAA8D;CACxD,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CommandContext } from '../ui/commands/types.js';
7
+ type DeepPartial<T> = T extends object ? {
8
+ [P in keyof T]?: DeepPartial<T[P]>;
9
+ } : T;
10
+ /**
11
+ * Creates a deep, fully-typed mock of the CommandContext for use in tests.
12
+ * All functions are pre-mocked with `vi.fn()`.
13
+ *
14
+ * @param overrides - A deep partial object to override any default mock values.
15
+ * @returns A complete, mocked CommandContext object.
16
+ */
17
+ export declare const createMockCommandContext: (overrides?: DeepPartial<CommandContext>) => CommandContext;
18
+ export {};