centaurus-cli 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (552) hide show
  1. package/dist/ai/types.js +0 -1
  2. package/dist/ai/types.js.map +1 -1
  3. package/dist/cli-adapter.js +5047 -5158
  4. package/dist/cli-adapter.js.map +1 -1
  5. package/dist/commands/CommandParser.js +372 -315
  6. package/dist/commands/CommandParser.js.map +1 -1
  7. package/dist/config/build-config.js +11 -42
  8. package/dist/config/build-config.js.map +1 -1
  9. package/dist/config/defaultConfig.js +94 -82
  10. package/dist/config/defaultConfig.js.map +1 -1
  11. package/dist/config/manager.js +144 -160
  12. package/dist/config/manager.js.map +1 -1
  13. package/dist/config/mcp-config-manager.js +411 -364
  14. package/dist/config/mcp-config-manager.js.map +1 -1
  15. package/dist/config/models.js +118 -185
  16. package/dist/config/models.js.map +1 -1
  17. package/dist/config/slash-commands.js +186 -184
  18. package/dist/config/slash-commands.js.map +1 -1
  19. package/dist/config/types.js +33 -26
  20. package/dist/config/types.js.map +1 -1
  21. package/dist/context/command-detector.js +63 -67
  22. package/dist/context/command-detector.js.map +1 -1
  23. package/dist/context/context-manager.js +533 -518
  24. package/dist/context/context-manager.js.map +1 -1
  25. package/dist/context/handlers/docker-handler.js +518 -576
  26. package/dist/context/handlers/docker-handler.js.map +1 -1
  27. package/dist/context/handlers/ssh-handler.js +1050 -1109
  28. package/dist/context/handlers/ssh-handler.js.map +1 -1
  29. package/dist/context/handlers/wsl-handler.js +558 -630
  30. package/dist/context/handlers/wsl-handler.js.map +1 -1
  31. package/dist/context/index.js +42 -6
  32. package/dist/context/index.js.map +1 -1
  33. package/dist/context/subshell-handler.js +0 -4
  34. package/dist/context/subshell-handler.js.map +1 -1
  35. package/dist/context/types.js +20 -31
  36. package/dist/context/types.js.map +1 -1
  37. package/dist/hooks/useConnectivity.js +13 -10
  38. package/dist/hooks/useConnectivity.js.map +1 -1
  39. package/dist/hooks/useTerminalDimensions.js +67 -79
  40. package/dist/hooks/useTerminalDimensions.js.map +1 -1
  41. package/dist/index.js +228 -251
  42. package/dist/index.js.map +1 -1
  43. package/dist/mcp/mcp-command-handler.js +297 -260
  44. package/dist/mcp/mcp-command-handler.js.map +1 -1
  45. package/dist/mcp/mcp-server-manager.js +139 -155
  46. package/dist/mcp/mcp-server-manager.js.map +1 -1
  47. package/dist/mcp/mcp-tool-wrapper.js +74 -94
  48. package/dist/mcp/mcp-tool-wrapper.js.map +1 -1
  49. package/dist/services/ai-autocomplete-agent.js +169 -181
  50. package/dist/services/ai-autocomplete-agent.js.map +1 -1
  51. package/dist/services/ai-context-injector.js +180 -93
  52. package/dist/services/ai-context-injector.js.map +1 -1
  53. package/dist/services/ai-service-client.js +513 -456
  54. package/dist/services/ai-service-client.js.map +1 -1
  55. package/dist/services/api-client.js +443 -441
  56. package/dist/services/api-client.js.map +1 -1
  57. package/dist/services/auth-handler.js +162 -198
  58. package/dist/services/auth-handler.js.map +1 -1
  59. package/dist/services/background-task-manager.js +258 -282
  60. package/dist/services/background-task-manager.js.map +1 -1
  61. package/dist/services/checkpoint-manager.js +1526 -1512
  62. package/dist/services/checkpoint-manager.js.map +1 -1
  63. package/dist/services/clipboard-service.js +151 -200
  64. package/dist/services/clipboard-service.js.map +1 -1
  65. package/dist/services/connectivity-manager.js +63 -65
  66. package/dist/services/connectivity-manager.js.map +1 -1
  67. package/dist/services/conversation-manager.js +118 -121
  68. package/dist/services/conversation-manager.js.map +1 -1
  69. package/dist/services/environment-context-injector.js +160 -187
  70. package/dist/services/environment-context-injector.js.map +1 -1
  71. package/dist/services/fast-context-agent.js +203 -243
  72. package/dist/services/fast-context-agent.js.map +1 -1
  73. package/dist/services/input-detection-agent.js +190 -202
  74. package/dist/services/input-detection-agent.js.map +1 -1
  75. package/dist/services/input-requirement-detector.js +155 -189
  76. package/dist/services/input-requirement-detector.js.map +1 -1
  77. package/dist/services/local-chat-storage.js +342 -365
  78. package/dist/services/local-chat-storage.js.map +1 -1
  79. package/dist/services/monitored-shell-manager.js +225 -233
  80. package/dist/services/monitored-shell-manager.js.map +1 -1
  81. package/dist/services/ollama-service.js +293 -310
  82. package/dist/services/ollama-service.js.map +1 -1
  83. package/dist/services/rules-storage.js +142 -0
  84. package/dist/services/rules-storage.js.map +1 -0
  85. package/dist/services/session-quota-manager.js +219 -235
  86. package/dist/services/session-quota-manager.js.map +1 -1
  87. package/dist/services/shell-input-agent.js +299 -334
  88. package/dist/services/shell-input-agent.js.map +1 -1
  89. package/dist/services/sub-agent-manager.js +459 -501
  90. package/dist/services/sub-agent-manager.js.map +1 -1
  91. package/dist/services/warpify-detector.js +133 -183
  92. package/dist/services/warpify-detector.js.map +1 -1
  93. package/dist/services/workflow-storage.js +202 -217
  94. package/dist/services/workflow-storage.js.map +1 -1
  95. package/dist/test-ssh-handler.js +148 -193
  96. package/dist/test-ssh-handler.js.map +1 -1
  97. package/dist/tools/add-mcp.js +161 -0
  98. package/dist/tools/add-mcp.js.map +1 -0
  99. package/dist/tools/background-command.js +240 -273
  100. package/dist/tools/background-command.js.map +1 -1
  101. package/dist/tools/command.js +447 -440
  102. package/dist/tools/command.js.map +1 -1
  103. package/dist/tools/create-image.js +172 -202
  104. package/dist/tools/create-image.js.map +1 -1
  105. package/dist/tools/enter-remote-session.js +169 -215
  106. package/dist/tools/enter-remote-session.js.map +1 -1
  107. package/dist/tools/fast-context.js +60 -67
  108. package/dist/tools/fast-context.js.map +1 -1
  109. package/dist/tools/file-ops.js +601 -572
  110. package/dist/tools/file-ops.js.map +1 -1
  111. package/dist/tools/find-files.js +262 -303
  112. package/dist/tools/find-files.js.map +1 -1
  113. package/dist/tools/get-diff.js +423 -406
  114. package/dist/tools/get-diff.js.map +1 -1
  115. package/dist/tools/grep-search.js +966 -948
  116. package/dist/tools/grep-search.js.map +1 -1
  117. package/dist/tools/inspect-symbol.js +308 -323
  118. package/dist/tools/inspect-symbol.js.map +1 -1
  119. package/dist/tools/plan-mode.js +459 -503
  120. package/dist/tools/plan-mode.js.map +1 -1
  121. package/dist/tools/read-binary-file.js +160 -190
  122. package/dist/tools/read-binary-file.js.map +1 -1
  123. package/dist/tools/registry.js +100 -84
  124. package/dist/tools/registry.js.map +1 -1
  125. package/dist/tools/reproduce_issue.js +170 -151
  126. package/dist/tools/reproduce_issue.js.map +1 -1
  127. package/dist/tools/sub-agent.js +223 -228
  128. package/dist/tools/sub-agent.js.map +1 -1
  129. package/dist/tools/task-complete.js +28 -27
  130. package/dist/tools/task-complete.js.map +1 -1
  131. package/dist/tools/types.js +0 -1
  132. package/dist/tools/types.js.map +1 -1
  133. package/dist/tools/validation.js +96 -118
  134. package/dist/tools/validation.js.map +1 -1
  135. package/dist/tools/web-search.js +194 -194
  136. package/dist/tools/web-search.js.map +1 -1
  137. package/dist/tools/workflow-tool.js +77 -82
  138. package/dist/tools/workflow-tool.js.map +1 -1
  139. package/dist/types/index.js +0 -1
  140. package/dist/types/index.js.map +1 -1
  141. package/dist/types/rule.js +1 -0
  142. package/dist/types/rule.js.map +1 -0
  143. package/dist/types/workflow.js +0 -7
  144. package/dist/types/workflow.js.map +1 -1
  145. package/dist/ui/components/AgentTimer.js +24 -25
  146. package/dist/ui/components/AgentTimer.js.map +1 -1
  147. package/dist/ui/components/App.js +3266 -3263
  148. package/dist/ui/components/App.js.map +1 -1
  149. package/dist/ui/components/AuthScreen.js +22 -34
  150. package/dist/ui/components/AuthScreen.js.map +1 -1
  151. package/dist/ui/components/AuthWelcomeScreen.js +30 -24
  152. package/dist/ui/components/AuthWelcomeScreen.js.map +1 -1
  153. package/dist/ui/components/Breadcrumbs.js +53 -82
  154. package/dist/ui/components/Breadcrumbs.js.map +1 -1
  155. package/dist/ui/components/CircularSelectInput.js +59 -67
  156. package/dist/ui/components/CircularSelectInput.js.map +1 -1
  157. package/dist/ui/components/ClipboardFileAutocomplete.js +78 -39
  158. package/dist/ui/components/ClipboardFileAutocomplete.js.map +1 -1
  159. package/dist/ui/components/CodeBlock.js +24 -42
  160. package/dist/ui/components/CodeBlock.js.map +1 -1
  161. package/dist/ui/components/ConfigViewer.js +18 -25
  162. package/dist/ui/components/ConfigViewer.js.map +1 -1
  163. package/dist/ui/components/ConfirmPrompt.js +49 -71
  164. package/dist/ui/components/ConfirmPrompt.js.map +1 -1
  165. package/dist/ui/components/ConnectionStatusMessage.js +32 -83
  166. package/dist/ui/components/ConnectionStatusMessage.js.map +1 -1
  167. package/dist/ui/components/ContextWindowIndicator.js +34 -49
  168. package/dist/ui/components/ContextWindowIndicator.js.map +1 -1
  169. package/dist/ui/components/DetailedPlanReviewScreen.js +104 -106
  170. package/dist/ui/components/DetailedPlanReviewScreen.js.map +1 -1
  171. package/dist/ui/components/DiffViewer.js +68 -121
  172. package/dist/ui/components/DiffViewer.js.map +1 -1
  173. package/dist/ui/components/ErrorBoundary.js +40 -48
  174. package/dist/ui/components/ErrorBoundary.js.map +1 -1
  175. package/dist/ui/components/FileCreationPreview.js +29 -60
  176. package/dist/ui/components/FileCreationPreview.js.map +1 -1
  177. package/dist/ui/components/FileOperation.js +34 -29
  178. package/dist/ui/components/FileOperation.js.map +1 -1
  179. package/dist/ui/components/FileTagAutocomplete.js +55 -25
  180. package/dist/ui/components/FileTagAutocomplete.js.map +1 -1
  181. package/dist/ui/components/FontRecommendation.js.map +1 -1
  182. package/dist/ui/components/GitDiffBreadcrumb.js +29 -0
  183. package/dist/ui/components/GitDiffBreadcrumb.js.map +1 -0
  184. package/dist/ui/components/InputBox.js +1620 -2150
  185. package/dist/ui/components/InputBox.js.map +1 -1
  186. package/dist/ui/components/InteractiveShell.js +234 -352
  187. package/dist/ui/components/InteractiveShell.js.map +1 -1
  188. package/dist/ui/components/KeyboardHelp.js +34 -35
  189. package/dist/ui/components/KeyboardHelp.js.map +1 -1
  190. package/dist/ui/components/LoadingIndicator.js +22 -25
  191. package/dist/ui/components/LoadingIndicator.js.map +1 -1
  192. package/dist/ui/components/MCPAddScreen.js +40 -51
  193. package/dist/ui/components/MCPAddScreen.js.map +1 -1
  194. package/dist/ui/components/MCPListScreen.js +40 -48
  195. package/dist/ui/components/MCPListScreen.js.map +1 -1
  196. package/dist/ui/components/MCPServerListScreen.js +49 -56
  197. package/dist/ui/components/MCPServerListScreen.js.map +1 -1
  198. package/dist/ui/components/MarkdownRenderer.js +69 -96
  199. package/dist/ui/components/MarkdownRenderer.js.map +1 -1
  200. package/dist/ui/components/MessageBox.js +66 -48
  201. package/dist/ui/components/MessageBox.js.map +1 -1
  202. package/dist/ui/components/MessageDisplay.js +150 -142
  203. package/dist/ui/components/MessageDisplay.js.map +1 -1
  204. package/dist/ui/components/MonitorModeAIPanel.js +46 -65
  205. package/dist/ui/components/MonitorModeAIPanel.js.map +1 -1
  206. package/dist/ui/components/MultiLineInput.js +243 -277
  207. package/dist/ui/components/MultiLineInput.js.map +1 -1
  208. package/dist/ui/components/PasswordPrompt.js +37 -18
  209. package/dist/ui/components/PasswordPrompt.js.map +1 -1
  210. package/dist/ui/components/PlanAcceptedMessage.js +27 -38
  211. package/dist/ui/components/PlanAcceptedMessage.js.map +1 -1
  212. package/dist/ui/components/PlanReviewScreen.js +46 -50
  213. package/dist/ui/components/PlanReviewScreen.js.map +1 -1
  214. package/dist/ui/components/RulesEditorScreen.js +81 -0
  215. package/dist/ui/components/RulesEditorScreen.js.map +1 -0
  216. package/dist/ui/components/SelectPrompt.js +19 -8
  217. package/dist/ui/components/SelectPrompt.js.map +1 -1
  218. package/dist/ui/components/ShimmerText.js +44 -0
  219. package/dist/ui/components/ShimmerText.js.map +1 -0
  220. package/dist/ui/components/SlashCommandAutocomplete.js +49 -22
  221. package/dist/ui/components/SlashCommandAutocomplete.js.map +1 -1
  222. package/dist/ui/components/StatusBar.js +56 -87
  223. package/dist/ui/components/StatusBar.js.map +1 -1
  224. package/dist/ui/components/StreamingMessageDisplay.js +116 -99
  225. package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
  226. package/dist/ui/components/TaskCompletedMessage.js +28 -23
  227. package/dist/ui/components/TaskCompletedMessage.js.map +1 -1
  228. package/dist/ui/components/TaskProgressIndicator.js +44 -70
  229. package/dist/ui/components/TaskProgressIndicator.js.map +1 -1
  230. package/dist/ui/components/ThinkingDisplay.js +44 -41
  231. package/dist/ui/components/ThinkingDisplay.js.map +1 -1
  232. package/dist/ui/components/ToolExecutionMessage.js +772 -1326
  233. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  234. package/dist/ui/components/ToolExecutionStatus.js +53 -84
  235. package/dist/ui/components/ToolExecutionStatus.js.map +1 -1
  236. package/dist/ui/components/ToolResult.js +22 -15
  237. package/dist/ui/components/ToolResult.js.map +1 -1
  238. package/dist/ui/components/VersionUpdatePrompt.js +88 -120
  239. package/dist/ui/components/VersionUpdatePrompt.js.map +1 -1
  240. package/dist/ui/components/WelcomeBanner.js +176 -26
  241. package/dist/ui/components/WelcomeBanner.js.map +1 -1
  242. package/dist/ui/components/WorkflowCreatorScreen.js +94 -161
  243. package/dist/ui/components/WorkflowCreatorScreen.js.map +1 -1
  244. package/dist/utils/ansi-encoder.js +30 -61
  245. package/dist/utils/ansi-encoder.js.map +1 -1
  246. package/dist/utils/chat-formatter.js +327 -305
  247. package/dist/utils/chat-formatter.js.map +1 -1
  248. package/dist/utils/command-history.js +152 -174
  249. package/dist/utils/command-history.js.map +1 -1
  250. package/dist/utils/context-sanitizer.js +49 -112
  251. package/dist/utils/context-sanitizer.js.map +1 -1
  252. package/dist/utils/conversation-logger.js +292 -324
  253. package/dist/utils/conversation-logger.js.map +1 -1
  254. package/dist/utils/custom-commands-manager.js +126 -131
  255. package/dist/utils/custom-commands-manager.js.map +1 -1
  256. package/dist/utils/editor-utils.js +732 -837
  257. package/dist/utils/editor-utils.js.map +1 -1
  258. package/dist/utils/file.js +174 -213
  259. package/dist/utils/file.js.map +1 -1
  260. package/dist/utils/git-stats.js +169 -0
  261. package/dist/utils/git-stats.js.map +1 -0
  262. package/dist/utils/input-classifier.js +960 -482
  263. package/dist/utils/input-classifier.js.map +1 -1
  264. package/dist/utils/logger.js +48 -73
  265. package/dist/utils/logger.js.map +1 -1
  266. package/dist/utils/markdown-parser.js +277 -310
  267. package/dist/utils/markdown-parser.js.map +1 -1
  268. package/dist/utils/rule-reference-resolver.js +54 -0
  269. package/dist/utils/rule-reference-resolver.js.map +1 -0
  270. package/dist/utils/shell.js +144 -156
  271. package/dist/utils/shell.js.map +1 -1
  272. package/dist/utils/state.js +23 -22
  273. package/dist/utils/state.js.map +1 -1
  274. package/dist/utils/syntax-checker.js +279 -327
  275. package/dist/utils/syntax-checker.js.map +1 -1
  276. package/dist/utils/terminal-output.js +199 -302
  277. package/dist/utils/terminal-output.js.map +1 -1
  278. package/dist/utils/text-clipboard.js +47 -70
  279. package/dist/utils/text-clipboard.js.map +1 -1
  280. package/dist/utils/unicode-sanitizer.js +134 -197
  281. package/dist/utils/unicode-sanitizer.js.map +1 -1
  282. package/dist/utils/version-checker.js +46 -56
  283. package/dist/utils/version-checker.js.map +1 -1
  284. package/package.json +6 -4
  285. package/dist/ai/types.d.ts +0 -20
  286. package/dist/ai/types.d.ts.map +0 -1
  287. package/dist/cli-adapter.d.ts +0 -514
  288. package/dist/cli-adapter.d.ts.map +0 -1
  289. package/dist/commands/CommandParser.d.ts +0 -27
  290. package/dist/commands/CommandParser.d.ts.map +0 -1
  291. package/dist/config/build-config.d.ts +0 -42
  292. package/dist/config/build-config.d.ts.map +0 -1
  293. package/dist/config/defaultConfig.d.ts +0 -79
  294. package/dist/config/defaultConfig.d.ts.map +0 -1
  295. package/dist/config/manager.d.ts +0 -62
  296. package/dist/config/manager.d.ts.map +0 -1
  297. package/dist/config/mcp-config-manager.d.ts +0 -79
  298. package/dist/config/mcp-config-manager.d.ts.map +0 -1
  299. package/dist/config/models.d.ts +0 -83
  300. package/dist/config/models.d.ts.map +0 -1
  301. package/dist/config/slash-commands.d.ts +0 -23
  302. package/dist/config/slash-commands.d.ts.map +0 -1
  303. package/dist/config/types.d.ts +0 -35
  304. package/dist/config/types.d.ts.map +0 -1
  305. package/dist/context/command-detector.d.ts +0 -50
  306. package/dist/context/command-detector.d.ts.map +0 -1
  307. package/dist/context/context-manager.d.ts +0 -157
  308. package/dist/context/context-manager.d.ts.map +0 -1
  309. package/dist/context/handlers/docker-handler.d.ts +0 -130
  310. package/dist/context/handlers/docker-handler.d.ts.map +0 -1
  311. package/dist/context/handlers/ssh-handler.d.ts +0 -201
  312. package/dist/context/handlers/ssh-handler.d.ts.map +0 -1
  313. package/dist/context/handlers/wsl-handler.d.ts +0 -146
  314. package/dist/context/handlers/wsl-handler.d.ts.map +0 -1
  315. package/dist/context/index.d.ts +0 -8
  316. package/dist/context/index.d.ts.map +0 -1
  317. package/dist/context/subshell-handler.d.ts +0 -165
  318. package/dist/context/subshell-handler.d.ts.map +0 -1
  319. package/dist/context/types.d.ts +0 -70
  320. package/dist/context/types.d.ts.map +0 -1
  321. package/dist/hooks/useConnectivity.d.ts +0 -2
  322. package/dist/hooks/useConnectivity.d.ts.map +0 -1
  323. package/dist/hooks/useTerminalDimensions.d.ts +0 -41
  324. package/dist/hooks/useTerminalDimensions.d.ts.map +0 -1
  325. package/dist/index.d.ts +0 -9
  326. package/dist/index.d.ts.map +0 -1
  327. package/dist/mcp/mcp-command-handler.d.ts +0 -47
  328. package/dist/mcp/mcp-command-handler.d.ts.map +0 -1
  329. package/dist/mcp/mcp-server-manager.d.ts +0 -30
  330. package/dist/mcp/mcp-server-manager.d.ts.map +0 -1
  331. package/dist/mcp/mcp-tool-wrapper.d.ts +0 -12
  332. package/dist/mcp/mcp-tool-wrapper.d.ts.map +0 -1
  333. package/dist/services/ai-autocomplete-agent.d.ts +0 -39
  334. package/dist/services/ai-autocomplete-agent.d.ts.map +0 -1
  335. package/dist/services/ai-context-injector.d.ts +0 -41
  336. package/dist/services/ai-context-injector.d.ts.map +0 -1
  337. package/dist/services/ai-service-client.d.ts +0 -128
  338. package/dist/services/ai-service-client.d.ts.map +0 -1
  339. package/dist/services/api-client.d.ts +0 -353
  340. package/dist/services/api-client.d.ts.map +0 -1
  341. package/dist/services/auth-handler.d.ts +0 -30
  342. package/dist/services/auth-handler.d.ts.map +0 -1
  343. package/dist/services/background-task-manager.d.ts +0 -114
  344. package/dist/services/background-task-manager.d.ts.map +0 -1
  345. package/dist/services/checkpoint-manager.d.ts +0 -204
  346. package/dist/services/checkpoint-manager.d.ts.map +0 -1
  347. package/dist/services/clipboard-service.d.ts +0 -37
  348. package/dist/services/clipboard-service.d.ts.map +0 -1
  349. package/dist/services/connectivity-manager.d.ts +0 -18
  350. package/dist/services/connectivity-manager.d.ts.map +0 -1
  351. package/dist/services/conversation-manager.d.ts +0 -73
  352. package/dist/services/conversation-manager.d.ts.map +0 -1
  353. package/dist/services/environment-context-injector.d.ts +0 -69
  354. package/dist/services/environment-context-injector.d.ts.map +0 -1
  355. package/dist/services/fast-context-agent.d.ts +0 -12
  356. package/dist/services/fast-context-agent.d.ts.map +0 -1
  357. package/dist/services/input-detection-agent.d.ts +0 -40
  358. package/dist/services/input-detection-agent.d.ts.map +0 -1
  359. package/dist/services/input-requirement-detector.d.ts +0 -28
  360. package/dist/services/input-requirement-detector.d.ts.map +0 -1
  361. package/dist/services/local-chat-storage.d.ts +0 -182
  362. package/dist/services/local-chat-storage.d.ts.map +0 -1
  363. package/dist/services/monitored-shell-manager.d.ts +0 -120
  364. package/dist/services/monitored-shell-manager.d.ts.map +0 -1
  365. package/dist/services/ollama-service.d.ts +0 -197
  366. package/dist/services/ollama-service.d.ts.map +0 -1
  367. package/dist/services/session-quota-manager.d.ts +0 -101
  368. package/dist/services/session-quota-manager.d.ts.map +0 -1
  369. package/dist/services/shell-input-agent.d.ts +0 -89
  370. package/dist/services/shell-input-agent.d.ts.map +0 -1
  371. package/dist/services/sub-agent-manager.d.ts +0 -140
  372. package/dist/services/sub-agent-manager.d.ts.map +0 -1
  373. package/dist/services/warpify-detector.d.ts +0 -43
  374. package/dist/services/warpify-detector.d.ts.map +0 -1
  375. package/dist/services/workflow-storage.d.ts +0 -72
  376. package/dist/services/workflow-storage.d.ts.map +0 -1
  377. package/dist/test-ssh-handler.d.ts +0 -8
  378. package/dist/test-ssh-handler.d.ts.map +0 -1
  379. package/dist/tools/background-command.d.ts +0 -11
  380. package/dist/tools/background-command.d.ts.map +0 -1
  381. package/dist/tools/command.d.ts +0 -3
  382. package/dist/tools/command.d.ts.map +0 -1
  383. package/dist/tools/create-image.d.ts +0 -10
  384. package/dist/tools/create-image.d.ts.map +0 -1
  385. package/dist/tools/enter-remote-session.d.ts +0 -48
  386. package/dist/tools/enter-remote-session.d.ts.map +0 -1
  387. package/dist/tools/fast-context.d.ts +0 -3
  388. package/dist/tools/fast-context.d.ts.map +0 -1
  389. package/dist/tools/file-ops.d.ts +0 -7
  390. package/dist/tools/file-ops.d.ts.map +0 -1
  391. package/dist/tools/find-files.d.ts +0 -49
  392. package/dist/tools/find-files.d.ts.map +0 -1
  393. package/dist/tools/get-diff.d.ts +0 -14
  394. package/dist/tools/get-diff.d.ts.map +0 -1
  395. package/dist/tools/grep-search.d.ts +0 -155
  396. package/dist/tools/grep-search.d.ts.map +0 -1
  397. package/dist/tools/inspect-symbol.d.ts +0 -32
  398. package/dist/tools/inspect-symbol.d.ts.map +0 -1
  399. package/dist/tools/plan-mode.d.ts +0 -140
  400. package/dist/tools/plan-mode.d.ts.map +0 -1
  401. package/dist/tools/read-binary-file.d.ts +0 -10
  402. package/dist/tools/read-binary-file.d.ts.map +0 -1
  403. package/dist/tools/registry.d.ts +0 -31
  404. package/dist/tools/registry.d.ts.map +0 -1
  405. package/dist/tools/reproduce_issue.d.ts +0 -2
  406. package/dist/tools/reproduce_issue.d.ts.map +0 -1
  407. package/dist/tools/sub-agent.d.ts +0 -9
  408. package/dist/tools/sub-agent.d.ts.map +0 -1
  409. package/dist/tools/task-complete.d.ts +0 -3
  410. package/dist/tools/task-complete.d.ts.map +0 -1
  411. package/dist/tools/types.d.ts +0 -40
  412. package/dist/tools/types.d.ts.map +0 -1
  413. package/dist/tools/validation.d.ts +0 -47
  414. package/dist/tools/validation.d.ts.map +0 -1
  415. package/dist/tools/web-search.d.ts +0 -24
  416. package/dist/tools/web-search.d.ts.map +0 -1
  417. package/dist/tools/workflow-tool.d.ts +0 -11
  418. package/dist/tools/workflow-tool.d.ts.map +0 -1
  419. package/dist/types/index.d.ts +0 -123
  420. package/dist/types/index.d.ts.map +0 -1
  421. package/dist/types/workflow.d.ts +0 -110
  422. package/dist/types/workflow.d.ts.map +0 -1
  423. package/dist/ui/components/AgentTimer.d.ts +0 -7
  424. package/dist/ui/components/AgentTimer.d.ts.map +0 -1
  425. package/dist/ui/components/App.d.ts +0 -197
  426. package/dist/ui/components/App.d.ts.map +0 -1
  427. package/dist/ui/components/AuthScreen.d.ts +0 -8
  428. package/dist/ui/components/AuthScreen.d.ts.map +0 -1
  429. package/dist/ui/components/AuthWelcomeScreen.d.ts +0 -8
  430. package/dist/ui/components/AuthWelcomeScreen.d.ts.map +0 -1
  431. package/dist/ui/components/Breadcrumbs.d.ts +0 -13
  432. package/dist/ui/components/Breadcrumbs.d.ts.map +0 -1
  433. package/dist/ui/components/CircularSelectInput.d.ts +0 -24
  434. package/dist/ui/components/CircularSelectInput.d.ts.map +0 -1
  435. package/dist/ui/components/ClipboardFileAutocomplete.d.ts +0 -10
  436. package/dist/ui/components/ClipboardFileAutocomplete.d.ts.map +0 -1
  437. package/dist/ui/components/CodeBlock.d.ts +0 -9
  438. package/dist/ui/components/CodeBlock.d.ts.map +0 -1
  439. package/dist/ui/components/ConfigViewer.d.ts +0 -11
  440. package/dist/ui/components/ConfigViewer.d.ts.map +0 -1
  441. package/dist/ui/components/ConfirmPrompt.d.ts +0 -13
  442. package/dist/ui/components/ConfirmPrompt.d.ts.map +0 -1
  443. package/dist/ui/components/ConnectionStatusMessage.d.ts +0 -17
  444. package/dist/ui/components/ConnectionStatusMessage.d.ts.map +0 -1
  445. package/dist/ui/components/ContextWindowIndicator.d.ts +0 -8
  446. package/dist/ui/components/ContextWindowIndicator.d.ts.map +0 -1
  447. package/dist/ui/components/DetailedPlanReviewScreen.d.ts +0 -17
  448. package/dist/ui/components/DetailedPlanReviewScreen.d.ts.map +0 -1
  449. package/dist/ui/components/DiffViewer.d.ts +0 -9
  450. package/dist/ui/components/DiffViewer.d.ts.map +0 -1
  451. package/dist/ui/components/ErrorBoundary.d.ts +0 -17
  452. package/dist/ui/components/ErrorBoundary.d.ts.map +0 -1
  453. package/dist/ui/components/FileCreationPreview.d.ts +0 -8
  454. package/dist/ui/components/FileCreationPreview.d.ts.map +0 -1
  455. package/dist/ui/components/FileOperation.d.ts +0 -10
  456. package/dist/ui/components/FileOperation.d.ts.map +0 -1
  457. package/dist/ui/components/FileTagAutocomplete.d.ts +0 -11
  458. package/dist/ui/components/FileTagAutocomplete.d.ts.map +0 -1
  459. package/dist/ui/components/FontRecommendation.d.ts +0 -1
  460. package/dist/ui/components/FontRecommendation.d.ts.map +0 -1
  461. package/dist/ui/components/InputBox.d.ts +0 -42
  462. package/dist/ui/components/InputBox.d.ts.map +0 -1
  463. package/dist/ui/components/InteractiveShell.d.ts +0 -30
  464. package/dist/ui/components/InteractiveShell.d.ts.map +0 -1
  465. package/dist/ui/components/KeyboardHelp.d.ts +0 -7
  466. package/dist/ui/components/KeyboardHelp.d.ts.map +0 -1
  467. package/dist/ui/components/LoadingIndicator.d.ts +0 -3
  468. package/dist/ui/components/LoadingIndicator.d.ts.map +0 -1
  469. package/dist/ui/components/MCPAddScreen.d.ts +0 -13
  470. package/dist/ui/components/MCPAddScreen.d.ts.map +0 -1
  471. package/dist/ui/components/MCPListScreen.d.ts +0 -17
  472. package/dist/ui/components/MCPListScreen.d.ts.map +0 -1
  473. package/dist/ui/components/MCPServerListScreen.d.ts +0 -16
  474. package/dist/ui/components/MCPServerListScreen.d.ts.map +0 -1
  475. package/dist/ui/components/MarkdownRenderer.d.ts +0 -8
  476. package/dist/ui/components/MarkdownRenderer.d.ts.map +0 -1
  477. package/dist/ui/components/MessageBox.d.ts +0 -10
  478. package/dist/ui/components/MessageBox.d.ts.map +0 -1
  479. package/dist/ui/components/MessageDisplay.d.ts +0 -14
  480. package/dist/ui/components/MessageDisplay.d.ts.map +0 -1
  481. package/dist/ui/components/MonitorModeAIPanel.d.ts +0 -23
  482. package/dist/ui/components/MonitorModeAIPanel.d.ts.map +0 -1
  483. package/dist/ui/components/MultiLineInput.d.ts +0 -13
  484. package/dist/ui/components/MultiLineInput.d.ts.map +0 -1
  485. package/dist/ui/components/PasswordPrompt.d.ts +0 -9
  486. package/dist/ui/components/PasswordPrompt.d.ts.map +0 -1
  487. package/dist/ui/components/PlanAcceptedMessage.d.ts +0 -20
  488. package/dist/ui/components/PlanAcceptedMessage.d.ts.map +0 -1
  489. package/dist/ui/components/PlanReviewScreen.d.ts +0 -14
  490. package/dist/ui/components/PlanReviewScreen.d.ts.map +0 -1
  491. package/dist/ui/components/SelectPrompt.d.ts +0 -12
  492. package/dist/ui/components/SelectPrompt.d.ts.map +0 -1
  493. package/dist/ui/components/SlashCommandAutocomplete.d.ts +0 -13
  494. package/dist/ui/components/SlashCommandAutocomplete.d.ts.map +0 -1
  495. package/dist/ui/components/StatusBar.d.ts +0 -14
  496. package/dist/ui/components/StatusBar.d.ts.map +0 -1
  497. package/dist/ui/components/StreamingMessageDisplay.d.ts +0 -15
  498. package/dist/ui/components/StreamingMessageDisplay.d.ts.map +0 -1
  499. package/dist/ui/components/TaskCompletedMessage.d.ts +0 -14
  500. package/dist/ui/components/TaskCompletedMessage.d.ts.map +0 -1
  501. package/dist/ui/components/TaskProgressIndicator.d.ts +0 -18
  502. package/dist/ui/components/TaskProgressIndicator.d.ts.map +0 -1
  503. package/dist/ui/components/ThinkingDisplay.d.ts +0 -15
  504. package/dist/ui/components/ThinkingDisplay.d.ts.map +0 -1
  505. package/dist/ui/components/ToolExecutionMessage.d.ts +0 -8
  506. package/dist/ui/components/ToolExecutionMessage.d.ts.map +0 -1
  507. package/dist/ui/components/ToolExecutionStatus.d.ts +0 -10
  508. package/dist/ui/components/ToolExecutionStatus.d.ts.map +0 -1
  509. package/dist/ui/components/ToolResult.d.ts +0 -10
  510. package/dist/ui/components/ToolResult.d.ts.map +0 -1
  511. package/dist/ui/components/VersionUpdatePrompt.d.ts +0 -9
  512. package/dist/ui/components/VersionUpdatePrompt.d.ts.map +0 -1
  513. package/dist/ui/components/WelcomeBanner.d.ts +0 -3
  514. package/dist/ui/components/WelcomeBanner.d.ts.map +0 -1
  515. package/dist/ui/components/WorkflowCreatorScreen.d.ts +0 -25
  516. package/dist/ui/components/WorkflowCreatorScreen.d.ts.map +0 -1
  517. package/dist/utils/ansi-encoder.d.ts +0 -7
  518. package/dist/utils/ansi-encoder.d.ts.map +0 -1
  519. package/dist/utils/chat-formatter.d.ts +0 -12
  520. package/dist/utils/chat-formatter.d.ts.map +0 -1
  521. package/dist/utils/command-history.d.ts +0 -24
  522. package/dist/utils/command-history.d.ts.map +0 -1
  523. package/dist/utils/context-sanitizer.d.ts +0 -50
  524. package/dist/utils/context-sanitizer.d.ts.map +0 -1
  525. package/dist/utils/conversation-logger.d.ts +0 -142
  526. package/dist/utils/conversation-logger.d.ts.map +0 -1
  527. package/dist/utils/custom-commands-manager.d.ts +0 -59
  528. package/dist/utils/custom-commands-manager.d.ts.map +0 -1
  529. package/dist/utils/editor-utils.d.ts +0 -101
  530. package/dist/utils/editor-utils.d.ts.map +0 -1
  531. package/dist/utils/file.d.ts +0 -61
  532. package/dist/utils/file.d.ts.map +0 -1
  533. package/dist/utils/input-classifier.d.ts +0 -25
  534. package/dist/utils/input-classifier.d.ts.map +0 -1
  535. package/dist/utils/logger.d.ts +0 -17
  536. package/dist/utils/logger.d.ts.map +0 -1
  537. package/dist/utils/markdown-parser.d.ts +0 -60
  538. package/dist/utils/markdown-parser.d.ts.map +0 -1
  539. package/dist/utils/shell.d.ts +0 -47
  540. package/dist/utils/shell.d.ts.map +0 -1
  541. package/dist/utils/state.d.ts +0 -13
  542. package/dist/utils/state.d.ts.map +0 -1
  543. package/dist/utils/syntax-checker.d.ts +0 -24
  544. package/dist/utils/syntax-checker.d.ts.map +0 -1
  545. package/dist/utils/terminal-output.d.ts +0 -25
  546. package/dist/utils/terminal-output.d.ts.map +0 -1
  547. package/dist/utils/text-clipboard.d.ts +0 -12
  548. package/dist/utils/text-clipboard.d.ts.map +0 -1
  549. package/dist/utils/unicode-sanitizer.d.ts +0 -44
  550. package/dist/utils/unicode-sanitizer.d.ts.map +0 -1
  551. package/dist/utils/version-checker.d.ts +0 -14
  552. package/dist/utils/version-checker.d.ts.map +0 -1
@@ -1,198 +1,153 @@
1
- /**
2
- * Manual test script for SSH Handler
3
- *
4
- * This script provides basic verification of the SSH Handler implementation.
5
- * Run with: npx ts-node test-ssh-handler.ts
6
- */
7
- import { SSHHandler } from './context/handlers/ssh-handler.js';
1
+ import { SSHHandler } from "./context/handlers/ssh-handler.js";
8
2
  async function runTests() {
9
- console.log('🧪 SSH Handler Test Suite\n');
10
- const handler = new SSHHandler();
11
- let passedTests = 0;
12
- let failedTests = 0;
13
- // Test 1: Detection patterns
14
- console.log('Test 1: Command detection');
3
+ console.log("\u{1F9EA} SSH Handler Test Suite\n");
4
+ const handler = new SSHHandler();
5
+ let passedTests = 0;
6
+ let failedTests = 0;
7
+ console.log("Test 1: Command detection");
8
+ try {
9
+ const test1 = handler.detect("ssh user@host");
10
+ const test2 = handler.detect("ssh -p 2222 user@host");
11
+ const test3 = !handler.detect("ls -la");
12
+ if (test1 && test2 && test3) {
13
+ console.log("\u2705 PASS: Command detection works correctly");
14
+ passedTests++;
15
+ } else {
16
+ console.log("\u274C FAIL: Command detection failed");
17
+ failedTests++;
18
+ }
19
+ } catch (error) {
20
+ console.log("\u274C FAIL: Command detection threw error:", error);
21
+ failedTests++;
22
+ }
23
+ console.log("\nTest 2: SSH command parsing");
24
+ try {
25
+ const config1 = handler.parseSSHCommand("ssh user@example.com");
26
+ const config2 = handler.parseSSHCommand("ssh -p 2222 user@example.com");
27
+ if (config1.host === "example.com" && config1.username === "user" && config1.port === 22 && config2.port === 2222) {
28
+ console.log("\u2705 PASS: SSH command parsing works correctly");
29
+ passedTests++;
30
+ } else {
31
+ console.log("\u274C FAIL: SSH command parsing failed");
32
+ console.log(" Config1:", config1);
33
+ console.log(" Config2:", config2);
34
+ failedTests++;
35
+ }
36
+ } catch (error) {
37
+ console.log("\u274C FAIL: SSH command parsing threw error:", error);
38
+ failedTests++;
39
+ }
40
+ console.log("\nTest 3: Breadcrumb generation");
41
+ try {
42
+ const emptyBreadcrumbs = handler.getBreadcrumbs();
43
+ handler.config = {
44
+ host: "example.com",
45
+ username: "testuser",
46
+ port: 22
47
+ };
48
+ const breadcrumbs = handler.getBreadcrumbs();
49
+ if (emptyBreadcrumbs.length === 0 && breadcrumbs.length === 2 && breadcrumbs[0].label === "ssh" && breadcrumbs[1].label === "testuser@example.com") {
50
+ console.log("\u2705 PASS: Breadcrumb generation works correctly");
51
+ passedTests++;
52
+ } else {
53
+ console.log("\u274C FAIL: Breadcrumb generation failed");
54
+ console.log(" Empty breadcrumbs:", emptyBreadcrumbs);
55
+ console.log(" Breadcrumbs:", breadcrumbs);
56
+ failedTests++;
57
+ }
58
+ } catch (error) {
59
+ console.log("\u274C FAIL: Breadcrumb generation threw error:", error);
60
+ failedTests++;
61
+ }
62
+ console.log("\nTest 4: Path resolution");
63
+ try {
64
+ handler.currentWorkingDirectory = "/home/user";
65
+ const absolutePath = handler.resolveAbsolutePath("/etc/hosts");
66
+ const homePath = handler.resolveAbsolutePath("~/documents");
67
+ const relativePath = handler.resolveAbsolutePath("documents/file.txt");
68
+ if (absolutePath === "/etc/hosts" && homePath === "~/documents" && relativePath === "/home/user/documents/file.txt") {
69
+ console.log("\u2705 PASS: Path resolution works correctly");
70
+ passedTests++;
71
+ } else {
72
+ console.log("\u274C FAIL: Path resolution failed");
73
+ console.log(" Absolute:", absolutePath);
74
+ console.log(" Home:", homePath);
75
+ console.log(" Relative:", relativePath);
76
+ failedTests++;
77
+ }
78
+ } catch (error) {
79
+ console.log("\u274C FAIL: Path resolution threw error:", error);
80
+ failedTests++;
81
+ }
82
+ console.log("\nTest 5: Shell integration scripts");
83
+ try {
84
+ handler.sessionId = "test-session-id";
85
+ handler.shellType = "bash";
86
+ const bashScript = handler.getShellIntegrationScript();
87
+ handler.shellType = "zsh";
88
+ const zshScript = handler.getShellIntegrationScript();
89
+ handler.shellType = "fish";
90
+ const fishScript = handler.getShellIntegrationScript();
91
+ if (bashScript.includes("CENTAURUS_SUBSHELL=1") && bashScript.includes("PROMPT_COMMAND") && zshScript.includes("precmd_functions") && fishScript.includes("fish_prompt")) {
92
+ console.log("\u2705 PASS: Shell integration scripts generated correctly");
93
+ passedTests++;
94
+ } else {
95
+ console.log("\u274C FAIL: Shell integration scripts failed");
96
+ failedTests++;
97
+ }
98
+ } catch (error) {
99
+ console.log("\u274C FAIL: Shell integration scripts threw error:", error);
100
+ failedTests++;
101
+ }
102
+ console.log("\nTest 6: Error handling");
103
+ try {
104
+ let errorThrown = false;
15
105
  try {
16
- const test1 = handler.detect('ssh user@host');
17
- const test2 = handler.detect('ssh -p 2222 user@host');
18
- const test3 = !handler.detect('ls -la');
19
- if (test1 && test2 && test3) {
20
- console.log('✅ PASS: Command detection works correctly');
21
- passedTests++;
22
- }
23
- else {
24
- console.log('❌ FAIL: Command detection failed');
25
- failedTests++;
26
- }
27
- }
28
- catch (error) {
29
- console.log('❌ FAIL: Command detection threw error:', error);
30
- failedTests++;
31
- }
32
- // Test 2: SSH command parsing
33
- console.log('\nTest 2: SSH command parsing');
34
- try {
35
- const config1 = handler.parseSSHCommand('ssh user@example.com');
36
- const config2 = handler.parseSSHCommand('ssh -p 2222 user@example.com');
37
- if (config1.host === 'example.com' &&
38
- config1.username === 'user' &&
39
- config1.port === 22 &&
40
- config2.port === 2222) {
41
- console.log('✅ PASS: SSH command parsing works correctly');
42
- passedTests++;
43
- }
44
- else {
45
- console.log('❌ FAIL: SSH command parsing failed');
46
- console.log(' Config1:', config1);
47
- console.log(' Config2:', config2);
48
- failedTests++;
49
- }
50
- }
51
- catch (error) {
52
- console.log('❌ FAIL: SSH command parsing threw error:', error);
53
- failedTests++;
54
- }
55
- // Test 3: Breadcrumbs
56
- console.log('\nTest 3: Breadcrumb generation');
57
- try {
58
- const emptyBreadcrumbs = handler.getBreadcrumbs();
59
- // Simulate config being set
60
- handler.config = {
61
- host: 'example.com',
62
- username: 'testuser',
63
- port: 22,
64
- };
65
- const breadcrumbs = handler.getBreadcrumbs();
66
- if (emptyBreadcrumbs.length === 0 &&
67
- breadcrumbs.length === 2 &&
68
- breadcrumbs[0].label === 'ssh' &&
69
- breadcrumbs[1].label === 'testuser@example.com') {
70
- console.log('✅ PASS: Breadcrumb generation works correctly');
71
- passedTests++;
72
- }
73
- else {
74
- console.log('❌ FAIL: Breadcrumb generation failed');
75
- console.log(' Empty breadcrumbs:', emptyBreadcrumbs);
76
- console.log(' Breadcrumbs:', breadcrumbs);
77
- failedTests++;
78
- }
79
- }
80
- catch (error) {
81
- console.log('❌ FAIL: Breadcrumb generation threw error:', error);
82
- failedTests++;
83
- }
84
- // Test 4: Path resolution
85
- console.log('\nTest 4: Path resolution');
86
- try {
87
- handler.currentWorkingDirectory = '/home/user';
88
- const absolutePath = handler.resolveAbsolutePath('/etc/hosts');
89
- const homePath = handler.resolveAbsolutePath('~/documents');
90
- const relativePath = handler.resolveAbsolutePath('documents/file.txt');
91
- if (absolutePath === '/etc/hosts' &&
92
- homePath === '~/documents' &&
93
- relativePath === '/home/user/documents/file.txt') {
94
- console.log('✅ PASS: Path resolution works correctly');
95
- passedTests++;
96
- }
97
- else {
98
- console.log('❌ FAIL: Path resolution failed');
99
- console.log(' Absolute:', absolutePath);
100
- console.log(' Home:', homePath);
101
- console.log(' Relative:', relativePath);
102
- failedTests++;
103
- }
104
- }
105
- catch (error) {
106
- console.log('❌ FAIL: Path resolution threw error:', error);
107
- failedTests++;
108
- }
109
- // Test 5: Shell integration scripts
110
- console.log('\nTest 5: Shell integration scripts');
111
- try {
112
- handler.sessionId = 'test-session-id';
113
- handler.shellType = 'bash';
114
- const bashScript = handler.getShellIntegrationScript();
115
- handler.shellType = 'zsh';
116
- const zshScript = handler.getShellIntegrationScript();
117
- handler.shellType = 'fish';
118
- const fishScript = handler.getShellIntegrationScript();
119
- if (bashScript.includes('CENTAURUS_SUBSHELL=1') &&
120
- bashScript.includes('PROMPT_COMMAND') &&
121
- zshScript.includes('precmd_functions') &&
122
- fishScript.includes('fish_prompt')) {
123
- console.log('✅ PASS: Shell integration scripts generated correctly');
124
- passedTests++;
125
- }
126
- else {
127
- console.log('❌ FAIL: Shell integration scripts failed');
128
- failedTests++;
129
- }
130
- }
131
- catch (error) {
132
- console.log('❌ FAIL: Shell integration scripts threw error:', error);
133
- failedTests++;
134
- }
135
- // Test 6: Error handling for invalid commands
136
- console.log('\nTest 6: Error handling');
137
- try {
138
- let errorThrown = false;
139
- try {
140
- handler.parseSSHCommand('ssh');
141
- }
142
- catch (e) {
143
- errorThrown = true;
144
- }
145
- if (errorThrown) {
146
- console.log('✅ PASS: Error handling works correctly');
147
- passedTests++;
148
- }
149
- else {
150
- console.log('❌ FAIL: Error handling failed - no error thrown for invalid command');
151
- failedTests++;
152
- }
153
- }
154
- catch (error) {
155
- console.log('❌ FAIL: Error handling test threw unexpected error:', error);
156
- failedTests++;
157
- }
158
- // Test 7: Handler type and patterns
159
- console.log('\nTest 7: Handler metadata');
160
- try {
161
- if (handler.type === 'ssh' &&
162
- handler.detectionPatterns.length > 0 &&
163
- handler.detectionPatterns[0] instanceof RegExp) {
164
- console.log('✅ PASS: Handler metadata is correct');
165
- passedTests++;
166
- }
167
- else {
168
- console.log('❌ FAIL: Handler metadata is incorrect');
169
- failedTests++;
170
- }
171
- }
172
- catch (error) {
173
- console.log('❌ FAIL: Handler metadata test threw error:', error);
174
- failedTests++;
175
- }
176
- // Summary
177
- console.log('\n' + '='.repeat(50));
178
- console.log(`Test Results: ${passedTests} passed, ${failedTests} failed`);
179
- console.log('='.repeat(50));
180
- if (failedTests === 0) {
181
- console.log('\n✅ All tests passed!');
182
- console.log('\nNote: These are unit tests for the SSH Handler logic.');
183
- console.log('Integration tests with an actual SSH server would require:');
184
- console.log(' - A test SSH server running');
185
- console.log(' - Environment variables: TEST_SSH_HOST, TEST_SSH_USER, TEST_SSH_PASSWORD');
186
- console.log(' - Running the skipped integration tests in the test file');
187
- }
188
- else {
189
- console.log('\n❌ Some tests failed. Please review the implementation.');
190
- process.exit(1);
191
- }
192
- }
193
- // Run tests
194
- runTests().catch(error => {
195
- console.error('Test suite failed with error:', error);
106
+ handler.parseSSHCommand("ssh");
107
+ } catch (e) {
108
+ errorThrown = true;
109
+ }
110
+ if (errorThrown) {
111
+ console.log("\u2705 PASS: Error handling works correctly");
112
+ passedTests++;
113
+ } else {
114
+ console.log("\u274C FAIL: Error handling failed - no error thrown for invalid command");
115
+ failedTests++;
116
+ }
117
+ } catch (error) {
118
+ console.log("\u274C FAIL: Error handling test threw unexpected error:", error);
119
+ failedTests++;
120
+ }
121
+ console.log("\nTest 7: Handler metadata");
122
+ try {
123
+ if (handler.type === "ssh" && handler.detectionPatterns.length > 0 && handler.detectionPatterns[0] instanceof RegExp) {
124
+ console.log("\u2705 PASS: Handler metadata is correct");
125
+ passedTests++;
126
+ } else {
127
+ console.log("\u274C FAIL: Handler metadata is incorrect");
128
+ failedTests++;
129
+ }
130
+ } catch (error) {
131
+ console.log("\u274C FAIL: Handler metadata test threw error:", error);
132
+ failedTests++;
133
+ }
134
+ console.log("\n" + "=".repeat(50));
135
+ console.log(`Test Results: ${passedTests} passed, ${failedTests} failed`);
136
+ console.log("=".repeat(50));
137
+ if (failedTests === 0) {
138
+ console.log("\n\u2705 All tests passed!");
139
+ console.log("\nNote: These are unit tests for the SSH Handler logic.");
140
+ console.log("Integration tests with an actual SSH server would require:");
141
+ console.log(" - A test SSH server running");
142
+ console.log(" - Environment variables: TEST_SSH_HOST, TEST_SSH_USER, TEST_SSH_PASSWORD");
143
+ console.log(" - Running the skipped integration tests in the test file");
144
+ } else {
145
+ console.log("\n\u274C Some tests failed. Please review the implementation.");
196
146
  process.exit(1);
147
+ }
148
+ }
149
+ runTests().catch((error) => {
150
+ console.error("Test suite failed with error:", error);
151
+ process.exit(1);
197
152
  });
198
153
  //# sourceMappingURL=test-ssh-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-ssh-handler.js","sourceRoot":"","sources":["../src/test-ssh-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../src/test-ssh-handler.ts"],"sourcesContent":["/**\r\n * Manual test script for SSH Handler\r\n * \r\n * This script provides basic verification of the SSH Handler implementation.\r\n * Run with: npx ts-node test-ssh-handler.ts\r\n */\r\n\r\nimport { SSHHandler } from './context/handlers/ssh-handler.js';\r\n\r\nasync function runTests() {\r\n console.log('🧪 SSH Handler Test Suite\\n');\r\n \r\n const handler = new SSHHandler();\r\n let passedTests = 0;\r\n let failedTests = 0;\r\n\r\n // Test 1: Detection patterns\r\n console.log('Test 1: Command detection');\r\n try {\r\n const test1 = handler.detect('ssh user@host');\r\n const test2 = handler.detect('ssh -p 2222 user@host');\r\n const test3 = !handler.detect('ls -la');\r\n \r\n if (test1 && test2 && test3) {\r\n console.log('✅ PASS: Command detection works correctly');\r\n passedTests++;\r\n } else {\r\n console.log('❌ FAIL: Command detection failed');\r\n failedTests++;\r\n }\r\n } catch (error) {\r\n console.log('❌ FAIL: Command detection threw error:', error);\r\n failedTests++;\r\n }\r\n\r\n // Test 2: SSH command parsing\r\n console.log('\\nTest 2: SSH command parsing');\r\n try {\r\n const config1 = (handler as any).parseSSHCommand('ssh user@example.com');\r\n const config2 = (handler as any).parseSSHCommand('ssh -p 2222 user@example.com');\r\n \r\n if (\r\n config1.host === 'example.com' &&\r\n config1.username === 'user' &&\r\n config1.port === 22 &&\r\n config2.port === 2222\r\n ) {\r\n console.log('✅ PASS: SSH command parsing works correctly');\r\n passedTests++;\r\n } else {\r\n console.log('❌ FAIL: SSH command parsing failed');\r\n console.log(' Config1:', config1);\r\n console.log(' Config2:', config2);\r\n failedTests++;\r\n }\r\n } catch (error) {\r\n console.log('❌ FAIL: SSH command parsing threw error:', error);\r\n failedTests++;\r\n }\r\n\r\n // Test 3: Breadcrumbs\r\n console.log('\\nTest 3: Breadcrumb generation');\r\n try {\r\n const emptyBreadcrumbs = handler.getBreadcrumbs();\r\n \r\n // Simulate config being set\r\n (handler as any).config = {\r\n host: 'example.com',\r\n username: 'testuser',\r\n port: 22,\r\n };\r\n \r\n const breadcrumbs = handler.getBreadcrumbs();\r\n \r\n if (\r\n emptyBreadcrumbs.length === 0 &&\r\n breadcrumbs.length === 2 &&\r\n breadcrumbs[0].label === 'ssh' &&\r\n breadcrumbs[1].label === 'testuser@example.com'\r\n ) {\r\n console.log('✅ PASS: Breadcrumb generation works correctly');\r\n passedTests++;\r\n } else {\r\n console.log('❌ FAIL: Breadcrumb generation failed');\r\n console.log(' Empty breadcrumbs:', emptyBreadcrumbs);\r\n console.log(' Breadcrumbs:', breadcrumbs);\r\n failedTests++;\r\n }\r\n } catch (error) {\r\n console.log('❌ FAIL: Breadcrumb generation threw error:', error);\r\n failedTests++;\r\n }\r\n\r\n // Test 4: Path resolution\r\n console.log('\\nTest 4: Path resolution');\r\n try {\r\n (handler as any).currentWorkingDirectory = '/home/user';\r\n \r\n const absolutePath = (handler as any).resolveAbsolutePath('/etc/hosts');\r\n const homePath = (handler as any).resolveAbsolutePath('~/documents');\r\n const relativePath = (handler as any).resolveAbsolutePath('documents/file.txt');\r\n \r\n if (\r\n absolutePath === '/etc/hosts' &&\r\n homePath === '~/documents' &&\r\n relativePath === '/home/user/documents/file.txt'\r\n ) {\r\n console.log('✅ PASS: Path resolution works correctly');\r\n passedTests++;\r\n } else {\r\n console.log('❌ FAIL: Path resolution failed');\r\n console.log(' Absolute:', absolutePath);\r\n console.log(' Home:', homePath);\r\n console.log(' Relative:', relativePath);\r\n failedTests++;\r\n }\r\n } catch (error) {\r\n console.log('❌ FAIL: Path resolution threw error:', error);\r\n failedTests++;\r\n }\r\n\r\n // Test 5: Shell integration scripts\r\n console.log('\\nTest 5: Shell integration scripts');\r\n try {\r\n (handler as any).sessionId = 'test-session-id';\r\n \r\n (handler as any).shellType = 'bash';\r\n const bashScript = (handler as any).getShellIntegrationScript();\r\n \r\n (handler as any).shellType = 'zsh';\r\n const zshScript = (handler as any).getShellIntegrationScript();\r\n \r\n (handler as any).shellType = 'fish';\r\n const fishScript = (handler as any).getShellIntegrationScript();\r\n \r\n if (\r\n bashScript.includes('CENTAURUS_SUBSHELL=1') &&\r\n bashScript.includes('PROMPT_COMMAND') &&\r\n zshScript.includes('precmd_functions') &&\r\n fishScript.includes('fish_prompt')\r\n ) {\r\n console.log('✅ PASS: Shell integration scripts generated correctly');\r\n passedTests++;\r\n } else {\r\n console.log('❌ FAIL: Shell integration scripts failed');\r\n failedTests++;\r\n }\r\n } catch (error) {\r\n console.log('❌ FAIL: Shell integration scripts threw error:', error);\r\n failedTests++;\r\n }\r\n\r\n // Test 6: Error handling for invalid commands\r\n console.log('\\nTest 6: Error handling');\r\n try {\r\n let errorThrown = false;\r\n try {\r\n (handler as any).parseSSHCommand('ssh');\r\n } catch (e) {\r\n errorThrown = true;\r\n }\r\n \r\n if (errorThrown) {\r\n console.log('✅ PASS: Error handling works correctly');\r\n passedTests++;\r\n } else {\r\n console.log('❌ FAIL: Error handling failed - no error thrown for invalid command');\r\n failedTests++;\r\n }\r\n } catch (error) {\r\n console.log('❌ FAIL: Error handling test threw unexpected error:', error);\r\n failedTests++;\r\n }\r\n\r\n // Test 7: Handler type and patterns\r\n console.log('\\nTest 7: Handler metadata');\r\n try {\r\n if (\r\n handler.type === 'ssh' &&\r\n handler.detectionPatterns.length > 0 &&\r\n handler.detectionPatterns[0] instanceof RegExp\r\n ) {\r\n console.log('✅ PASS: Handler metadata is correct');\r\n passedTests++;\r\n } else {\r\n console.log('❌ FAIL: Handler metadata is incorrect');\r\n failedTests++;\r\n }\r\n } catch (error) {\r\n console.log('❌ FAIL: Handler metadata test threw error:', error);\r\n failedTests++;\r\n }\r\n\r\n // Summary\r\n console.log('\\n' + '='.repeat(50));\r\n console.log(`Test Results: ${passedTests} passed, ${failedTests} failed`);\r\n console.log('='.repeat(50));\r\n\r\n if (failedTests === 0) {\r\n console.log('\\n✅ All tests passed!');\r\n console.log('\\nNote: These are unit tests for the SSH Handler logic.');\r\n console.log('Integration tests with an actual SSH server would require:');\r\n console.log(' - A test SSH server running');\r\n console.log(' - Environment variables: TEST_SSH_HOST, TEST_SSH_USER, TEST_SSH_PASSWORD');\r\n console.log(' - Running the skipped integration tests in the test file');\r\n } else {\r\n console.log('\\n❌ Some tests failed. Please review the implementation.');\r\n process.exit(1);\r\n }\r\n}\r\n\r\n// Run tests\r\nrunTests().catch(error => {\r\n console.error('Test suite failed with error:', error);\r\n process.exit(1);\r\n});\r\n"],"mappings":"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","names":[]}
@@ -0,0 +1,161 @@
1
+ const addMcpTool = {
2
+ schema: {
3
+ name: "add_mcp",
4
+ description: `Add and connect an MCP (Model Context Protocol) server at runtime. This tool saves the server configuration, connects to it, and registers all of its tools so you can immediately use them.
5
+
6
+ USE THIS TOOL WHEN:
7
+ - The user asks you to interact with an external service or application (browser, Slack, GitHub, database, etc.) and no matching MCP tools are currently available.
8
+ - You have searched the web and found the correct MCP server package and its configuration for the desired capability.
9
+ - You need to add a new integration on the fly without the user manually editing config files.
10
+
11
+ HOW IT WORKS:
12
+ 1. You provide the MCP server config (name, command, args, env).
13
+ 2. The tool saves it to the MCP config file (~/.centaurus/mcp-config.json).
14
+ 3. It connects to the server process via stdio.
15
+ 4. It discovers and registers all tools the server exposes.
16
+ 5. It returns the connection status and list of new tools available to you.
17
+ 6. You can then immediately call those tools (they will appear as mcp_<serverName>_<toolName>).
18
+
19
+ CONFIG FORMAT:
20
+ Most MCP servers are npm packages run via npx. Common patterns:
21
+
22
+ npx-based server:
23
+ name: "browser"
24
+ command: "npx"
25
+ args: ["-y", "@anthropic/mcp-browser"]
26
+
27
+ node-based server:
28
+ name: "github"
29
+ command: "node"
30
+ args: ["/path/to/server.js"]
31
+
32
+ python-based server:
33
+ name: "postgres"
34
+ command: "uvx"
35
+ args: ["mcp-server-postgres", "--connection-string", "postgresql://..."]
36
+
37
+ docker-based server:
38
+ name: "custom-server"
39
+ command: "docker"
40
+ args: ["run", "-i", "--rm", "mcp/custom-server"]
41
+
42
+ Environment variables (for API keys, tokens, etc.):
43
+ name: "slack"
44
+ command: "npx"
45
+ args: ["-y", "@anthropic/mcp-slack"]
46
+ env: { "SLACK_BOT_TOKEN": "xoxb-..." }
47
+
48
+ IMPORTANT NOTES:
49
+ - The "name" must be unique across all configured MCP servers.
50
+ - The "command" is the executable to run (npx, node, python, uvx, docker, etc.).
51
+ - The "args" array contains all arguments passed to the command.
52
+ - The "env" object is optional and sets additional environment variables for the server process.
53
+ - If the connection fails, the config is automatically rolled back (removed).
54
+ - The tool returns detailed logs so you can debug connection issues.
55
+ - After a successful add, the new MCP tools are IMMEDIATELY available for you to call.`,
56
+ parameters: {
57
+ type: "object",
58
+ properties: {
59
+ reason_text: {
60
+ type: "string",
61
+ description: 'REQUIRED: A brief explanation of why you are adding this MCP server. Shown to the user before execution. Example: "Adding browser-control MCP server to navigate to YouTube"'
62
+ },
63
+ name: {
64
+ type: "string",
65
+ description: 'A unique name for this MCP server (e.g., "browser", "slack", "github"). Must be alphanumeric with hyphens/underscores only.'
66
+ },
67
+ command: {
68
+ type: "string",
69
+ description: 'The executable command to start the MCP server (e.g., "npx", "node", "python", "uvx", "docker").'
70
+ },
71
+ args: {
72
+ type: "array",
73
+ items: { type: "string" },
74
+ description: 'Arguments passed to the command. For npx packages, include "-y" to auto-install. Example: ["-y", "@anthropic/mcp-browser"]'
75
+ },
76
+ env: {
77
+ type: "object",
78
+ description: 'Optional environment variables for the server process. Use this for API keys, tokens, connection strings, etc. Example: { "GITHUB_TOKEN": "ghp_..." }'
79
+ },
80
+ timeout: {
81
+ type: "number",
82
+ description: "Optional connection timeout in seconds. Default is 60 seconds. Increase for servers that take longer to start (e.g., Docker-based or servers that need to download dependencies). Example: 120 for 2 minutes."
83
+ }
84
+ },
85
+ required: ["reason_text", "name", "command"]
86
+ }
87
+ },
88
+ async execute(args, context) {
89
+ const { name, command, args: serverArgs, env, timeout } = args;
90
+ if (!name || typeof name !== "string" || !name.trim()) {
91
+ throw new Error('Server "name" is required and must be a non-empty string.');
92
+ }
93
+ if (!command || typeof command !== "string" || !command.trim()) {
94
+ throw new Error('Server "command" is required and must be a non-empty string.');
95
+ }
96
+ if (!/^[a-zA-Z0-9_-]+$/.test(name.trim())) {
97
+ throw new Error("Server name must contain only alphanumeric characters, hyphens, and underscores.");
98
+ }
99
+ const approved = await context.requireApproval(
100
+ `Add MCP server: "${name}" (command: ${command} ${(serverArgs || []).join(" ")})`,
101
+ true
102
+ // MCP server installation is a risky operation
103
+ );
104
+ if (!approved || typeof approved === "object" && !approved.approved) {
105
+ return "MCP server addition cancelled by user.";
106
+ }
107
+ const serverConfig = {
108
+ name: name.trim(),
109
+ command: command.trim(),
110
+ args: Array.isArray(serverArgs) ? serverArgs : void 0,
111
+ env: env && typeof env === "object" && !Array.isArray(env) ? env : void 0,
112
+ enabled: true
113
+ };
114
+ const cliAdapter = context.cliAdapter;
115
+ if (!cliAdapter || typeof cliAdapter.mcpAddAndConnect !== "function") {
116
+ throw new Error("MCP subsystem is not available. The CLI may not be fully initialized.");
117
+ }
118
+ const timeoutMs = timeout && typeof timeout === "number" && timeout > 0 ? Math.round(timeout * 1e3) : 6e4;
119
+ const result = await cliAdapter.mcpAddAndConnect(serverConfig, timeoutMs);
120
+ let response = "";
121
+ if (result.success) {
122
+ response += `SUCCESS: MCP server "${result.serverName}" is now connected and ready.
123
+
124
+ `;
125
+ response += `Available tools (${result.tools.length}):
126
+ `;
127
+ for (const toolName of result.tools) {
128
+ response += ` - mcp_${result.serverName}_${toolName}
129
+ `;
130
+ }
131
+ response += `
132
+ You can now call these tools directly. They are registered and available for use.
133
+ `;
134
+ } else {
135
+ response += `FAILED: Could not connect to MCP server "${result.serverName}".
136
+ `;
137
+ response += `Error: ${result.error}
138
+ `;
139
+ response += `
140
+ The server config has been rolled back. You may need to:
141
+ `;
142
+ response += ` 1. Check that the package/command exists and is spelled correctly.
143
+ `;
144
+ response += ` 2. Ensure any required environment variables (API keys, tokens) are provided in the "env" parameter.
145
+ `;
146
+ response += ` 3. Try a different MCP server package or version.
147
+ `;
148
+ }
149
+ if (result.logs) {
150
+ response += `
151
+ Connection logs:
152
+ ${result.logs}
153
+ `;
154
+ }
155
+ return response;
156
+ }
157
+ };
158
+ export {
159
+ addMcpTool
160
+ };
161
+ //# sourceMappingURL=add-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/tools/add-mcp.ts"],"sourcesContent":["/**\r\n * Add MCP Tool\r\n *\r\n * Allows the AI agent to programmatically add MCP (Model Context Protocol) server\r\n * configurations at runtime. The tool saves the config, connects to the server,\r\n * registers the server's tools into the tool registry, and returns connection status\r\n * and available tools so the agent can immediately use them.\r\n *\r\n * This enables \"auto-provisioning\": the agent can search the web for an MCP server\r\n * that provides the capabilities it needs (e.g., browser control, Slack, GitHub),\r\n * add it on the fly, and then use the new tools without the user having to manually\r\n * configure anything.\r\n */\r\n\r\nimport { Tool, ToolExecutionContext } from './types.js';\r\n\r\nexport const addMcpTool: Tool = {\r\n schema: {\r\n name: 'add_mcp',\r\n description: `Add and connect an MCP (Model Context Protocol) server at runtime. This tool saves the server configuration, connects to it, and registers all of its tools so you can immediately use them.\r\n\r\nUSE THIS TOOL WHEN:\r\n- The user asks you to interact with an external service or application (browser, Slack, GitHub, database, etc.) and no matching MCP tools are currently available.\r\n- You have searched the web and found the correct MCP server package and its configuration for the desired capability.\r\n- You need to add a new integration on the fly without the user manually editing config files.\r\n\r\nHOW IT WORKS:\r\n1. You provide the MCP server config (name, command, args, env).\r\n2. The tool saves it to the MCP config file (~/.centaurus/mcp-config.json).\r\n3. It connects to the server process via stdio.\r\n4. It discovers and registers all tools the server exposes.\r\n5. It returns the connection status and list of new tools available to you.\r\n6. You can then immediately call those tools (they will appear as mcp_<serverName>_<toolName>).\r\n\r\nCONFIG FORMAT:\r\nMost MCP servers are npm packages run via npx. Common patterns:\r\n\r\n npx-based server:\r\n name: \"browser\"\r\n command: \"npx\"\r\n args: [\"-y\", \"@anthropic/mcp-browser\"]\r\n\r\n node-based server:\r\n name: \"github\"\r\n command: \"node\"\r\n args: [\"/path/to/server.js\"]\r\n\r\n python-based server:\r\n name: \"postgres\"\r\n command: \"uvx\"\r\n args: [\"mcp-server-postgres\", \"--connection-string\", \"postgresql://...\"]\r\n\r\n docker-based server:\r\n name: \"custom-server\"\r\n command: \"docker\"\r\n args: [\"run\", \"-i\", \"--rm\", \"mcp/custom-server\"]\r\n\r\n Environment variables (for API keys, tokens, etc.):\r\n name: \"slack\"\r\n command: \"npx\"\r\n args: [\"-y\", \"@anthropic/mcp-slack\"]\r\n env: { \"SLACK_BOT_TOKEN\": \"xoxb-...\" }\r\n\r\nIMPORTANT NOTES:\r\n- The \"name\" must be unique across all configured MCP servers.\r\n- The \"command\" is the executable to run (npx, node, python, uvx, docker, etc.).\r\n- The \"args\" array contains all arguments passed to the command.\r\n- The \"env\" object is optional and sets additional environment variables for the server process.\r\n- If the connection fails, the config is automatically rolled back (removed).\r\n- The tool returns detailed logs so you can debug connection issues.\r\n- After a successful add, the new MCP tools are IMMEDIATELY available for you to call.`,\r\n parameters: {\r\n type: 'object',\r\n properties: {\r\n reason_text: {\r\n type: 'string',\r\n description: 'REQUIRED: A brief explanation of why you are adding this MCP server. Shown to the user before execution. Example: \"Adding browser-control MCP server to navigate to YouTube\"',\r\n },\r\n name: {\r\n type: 'string',\r\n description: 'A unique name for this MCP server (e.g., \"browser\", \"slack\", \"github\"). Must be alphanumeric with hyphens/underscores only.',\r\n },\r\n command: {\r\n type: 'string',\r\n description: 'The executable command to start the MCP server (e.g., \"npx\", \"node\", \"python\", \"uvx\", \"docker\").',\r\n },\r\n args: {\r\n type: 'array',\r\n items: { type: 'string' },\r\n description: 'Arguments passed to the command. For npx packages, include \"-y\" to auto-install. Example: [\"-y\", \"@anthropic/mcp-browser\"]',\r\n },\r\n env: {\r\n type: 'object',\r\n description: 'Optional environment variables for the server process. Use this for API keys, tokens, connection strings, etc. Example: { \"GITHUB_TOKEN\": \"ghp_...\" }',\r\n },\r\n timeout: {\r\n type: 'number',\r\n description: 'Optional connection timeout in seconds. Default is 60 seconds. Increase for servers that take longer to start (e.g., Docker-based or servers that need to download dependencies). Example: 120 for 2 minutes.',\r\n },\r\n },\r\n required: ['reason_text', 'name', 'command'],\r\n },\r\n },\r\n\r\n async execute(args: Record<string, any>, context: ToolExecutionContext): Promise<string> {\r\n const { name, command, args: serverArgs, env, timeout } = args;\r\n\r\n // Validate required fields\r\n if (!name || typeof name !== 'string' || !name.trim()) {\r\n throw new Error('Server \"name\" is required and must be a non-empty string.');\r\n }\r\n\r\n if (!command || typeof command !== 'string' || !command.trim()) {\r\n throw new Error('Server \"command\" is required and must be a non-empty string.');\r\n }\r\n\r\n // Validate name format (alphanumeric, hyphens, underscores)\r\n if (!/^[a-zA-Z0-9_-]+$/.test(name.trim())) {\r\n throw new Error('Server name must contain only alphanumeric characters, hyphens, and underscores.');\r\n }\r\n\r\n // Request user approval since this installs/runs external software\r\n const approved = await context.requireApproval(\r\n `Add MCP server: \"${name}\" (command: ${command} ${(serverArgs || []).join(' ')})`,\r\n true // MCP server installation is a risky operation\r\n );\r\n\r\n if (!approved || (typeof approved === 'object' && !approved.approved)) {\r\n return 'MCP server addition cancelled by user.';\r\n }\r\n\r\n // Build the server config\r\n const serverConfig = {\r\n name: name.trim(),\r\n command: command.trim(),\r\n args: Array.isArray(serverArgs) ? serverArgs : undefined,\r\n env: env && typeof env === 'object' && !Array.isArray(env) ? env : undefined,\r\n enabled: true,\r\n };\r\n\r\n // Access the CLI adapter to perform the add-and-connect operation\r\n const cliAdapter = context.cliAdapter;\r\n if (!cliAdapter || typeof cliAdapter.mcpAddAndConnect !== 'function') {\r\n throw new Error('MCP subsystem is not available. The CLI may not be fully initialized.');\r\n }\r\n\r\n // Convert timeout from seconds to milliseconds (default 60s)\r\n const timeoutMs = timeout && typeof timeout === 'number' && timeout > 0\r\n ? Math.round(timeout * 1000)\r\n : 60000;\r\n\r\n const result = await cliAdapter.mcpAddAndConnect(serverConfig, timeoutMs);\r\n\r\n // Format the response for the AI\r\n let response = '';\r\n\r\n if (result.success) {\r\n response += `SUCCESS: MCP server \"${result.serverName}\" is now connected and ready.\\n\\n`;\r\n response += `Available tools (${result.tools.length}):\\n`;\r\n for (const toolName of result.tools) {\r\n response += ` - mcp_${result.serverName}_${toolName}\\n`;\r\n }\r\n response += `\\nYou can now call these tools directly. They are registered and available for use.\\n`;\r\n } else {\r\n response += `FAILED: Could not connect to MCP server \"${result.serverName}\".\\n`;\r\n response += `Error: ${result.error}\\n`;\r\n response += `\\nThe server config has been rolled back. You may need to:\\n`;\r\n response += ` 1. Check that the package/command exists and is spelled correctly.\\n`;\r\n response += ` 2. Ensure any required environment variables (API keys, tokens) are provided in the \"env\" parameter.\\n`;\r\n response += ` 3. Try a different MCP server package or version.\\n`;\r\n }\r\n\r\n if (result.logs) {\r\n response += `\\nConnection logs:\\n${result.logs}\\n`;\r\n }\r\n\r\n return response;\r\n },\r\n};\r\n"],"mappings":"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","names":[]}