@machina.ai/cell-cli-core 1.11.0-rc1 → 1.13.0-rc2

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 (432) hide show
  1. package/dist/index.d.ts +5 -0
  2. package/dist/index.js +4 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/package.json +9 -3
  5. package/dist/src/agents/executor.d.ts +19 -0
  6. package/dist/src/agents/executor.js +226 -32
  7. package/dist/src/agents/executor.js.map +1 -1
  8. package/dist/src/agents/executor.test.js +335 -9
  9. package/dist/src/agents/executor.test.js.map +1 -1
  10. package/dist/src/agents/subagent-tool-wrapper.test.js +2 -4
  11. package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
  12. package/dist/src/agents/types.d.ts +2 -1
  13. package/dist/src/agents/types.js +1 -0
  14. package/dist/src/agents/types.js.map +1 -1
  15. package/dist/src/code_assist/experiments/client_metadata.d.ts +12 -0
  16. package/dist/src/code_assist/experiments/client_metadata.js +49 -0
  17. package/dist/src/code_assist/experiments/client_metadata.js.map +1 -0
  18. package/dist/src/code_assist/experiments/experiments.d.ts +17 -0
  19. package/dist/src/code_assist/experiments/experiments.js +36 -0
  20. package/dist/src/code_assist/experiments/experiments.js.map +1 -0
  21. package/dist/src/code_assist/experiments/types.d.ts +35 -0
  22. package/dist/src/code_assist/experiments/types.js +7 -0
  23. package/dist/src/code_assist/experiments/types.js.map +1 -0
  24. package/dist/src/code_assist/oauth-credential-storage.js +5 -4
  25. package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
  26. package/dist/src/code_assist/oauth-credential-storage.test.js +15 -3
  27. package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
  28. package/dist/src/code_assist/oauth2.d.ts +2 -2
  29. package/dist/src/code_assist/oauth2.js +53 -41
  30. package/dist/src/code_assist/oauth2.js.map +1 -1
  31. package/dist/src/code_assist/oauth2.test.js +65 -33
  32. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  33. package/dist/src/code_assist/server.d.ts +6 -4
  34. package/dist/src/code_assist/server.js +11 -0
  35. package/dist/src/code_assist/server.js.map +1 -1
  36. package/dist/src/code_assist/server.test.js +17 -0
  37. package/dist/src/code_assist/server.test.js.map +1 -1
  38. package/dist/src/code_assist/setup.d.ts +2 -2
  39. package/dist/src/code_assist/setup.js.map +1 -1
  40. package/dist/src/code_assist/types.d.ts +1 -1
  41. package/dist/src/code_assist/types.js.map +1 -1
  42. package/dist/src/commands/extensions.d.ts +7 -0
  43. package/dist/src/commands/extensions.js +9 -0
  44. package/dist/src/commands/extensions.js.map +1 -0
  45. package/dist/src/commands/extensions.test.d.ts +6 -0
  46. package/dist/src/commands/extensions.test.js +19 -0
  47. package/dist/src/commands/extensions.test.js.map +1 -0
  48. package/dist/src/config/config.d.ts +72 -24
  49. package/dist/src/config/config.js +168 -55
  50. package/dist/src/config/config.js.map +1 -1
  51. package/dist/src/config/config.test.js +59 -23
  52. package/dist/src/config/config.test.js.map +1 -1
  53. package/dist/src/config/models.d.ts +1 -1
  54. package/dist/src/config/models.js +2 -2
  55. package/dist/src/config/models.js.map +1 -1
  56. package/dist/src/config/storage.d.ts +3 -0
  57. package/dist/src/config/storage.js +20 -0
  58. package/dist/src/config/storage.js.map +1 -1
  59. package/dist/src/core/apiKeyCredentialStorage.d.ts +17 -0
  60. package/dist/src/core/apiKeyCredentialStorage.js +64 -0
  61. package/dist/src/core/apiKeyCredentialStorage.js.map +1 -0
  62. package/dist/src/core/apiKeyCredentialStorage.test.d.ts +6 -0
  63. package/dist/src/core/apiKeyCredentialStorage.test.js +71 -0
  64. package/dist/src/core/apiKeyCredentialStorage.test.js.map +1 -0
  65. package/dist/src/core/client.d.ts +2 -11
  66. package/dist/src/core/client.js +28 -168
  67. package/dist/src/core/client.js.map +1 -1
  68. package/dist/src/core/client.test.js +107 -409
  69. package/dist/src/core/client.test.js.map +1 -1
  70. package/dist/src/core/contentGenerator.js +64 -59
  71. package/dist/src/core/contentGenerator.js.map +1 -1
  72. package/dist/src/core/contentGenerator.test.js +38 -4
  73. package/dist/src/core/contentGenerator.test.js.map +1 -1
  74. package/dist/src/core/coreToolScheduler.d.ts +7 -8
  75. package/dist/src/core/coreToolScheduler.js +316 -187
  76. package/dist/src/core/coreToolScheduler.js.map +1 -1
  77. package/dist/src/core/coreToolScheduler.test.js +240 -10
  78. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  79. package/dist/src/core/fakeContentGenerator.d.ts +33 -0
  80. package/dist/src/core/fakeContentGenerator.js +58 -0
  81. package/dist/src/core/fakeContentGenerator.js.map +1 -0
  82. package/dist/src/core/fakeContentGenerator.test.d.ts +6 -0
  83. package/dist/src/core/fakeContentGenerator.test.js +127 -0
  84. package/dist/src/core/fakeContentGenerator.test.js.map +1 -0
  85. package/dist/src/core/geminiChat.d.ts +2 -0
  86. package/dist/src/core/geminiChat.js +6 -2
  87. package/dist/src/core/geminiChat.js.map +1 -1
  88. package/dist/src/core/geminiChat.test.js +15 -3
  89. package/dist/src/core/geminiChat.test.js.map +1 -1
  90. package/dist/src/core/logger.js +10 -9
  91. package/dist/src/core/logger.js.map +1 -1
  92. package/dist/src/core/loggingContentGenerator.d.ts +1 -0
  93. package/dist/src/core/loggingContentGenerator.js +113 -33
  94. package/dist/src/core/loggingContentGenerator.js.map +1 -1
  95. package/dist/src/core/nonInteractiveToolExecutor.js +5 -4
  96. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  97. package/dist/src/core/prompts.js +104 -55
  98. package/dist/src/core/prompts.js.map +1 -1
  99. package/dist/src/core/prompts.test.js +30 -108
  100. package/dist/src/core/prompts.test.js.map +1 -1
  101. package/dist/src/core/recordingContentGenerator.d.ts +18 -0
  102. package/dist/src/core/recordingContentGenerator.js +77 -0
  103. package/dist/src/core/recordingContentGenerator.js.map +1 -0
  104. package/dist/src/core/recordingContentGenerator.test.d.ts +6 -0
  105. package/dist/src/core/recordingContentGenerator.test.js +101 -0
  106. package/dist/src/core/recordingContentGenerator.test.js.map +1 -0
  107. package/dist/src/fallback/handler.js +2 -0
  108. package/dist/src/fallback/handler.js.map +1 -1
  109. package/dist/src/generated/git-commit.d.ts +2 -2
  110. package/dist/src/generated/git-commit.js +2 -2
  111. package/dist/src/hooks/hookPlanner.d.ts +46 -0
  112. package/dist/src/hooks/hookPlanner.js +108 -0
  113. package/dist/src/hooks/hookPlanner.js.map +1 -0
  114. package/dist/src/hooks/hookPlanner.test.d.ts +6 -0
  115. package/dist/src/hooks/hookPlanner.test.js +255 -0
  116. package/dist/src/hooks/hookPlanner.test.js.map +1 -0
  117. package/dist/src/hooks/hookRegistry.d.ts +87 -0
  118. package/dist/src/hooks/hookRegistry.js +198 -0
  119. package/dist/src/hooks/hookRegistry.js.map +1 -0
  120. package/dist/src/hooks/hookRegistry.test.d.ts +6 -0
  121. package/dist/src/hooks/hookRegistry.test.js +341 -0
  122. package/dist/src/hooks/hookRegistry.test.js.map +1 -0
  123. package/dist/src/hooks/hookTranslator.d.ts +113 -0
  124. package/dist/src/hooks/hookTranslator.js +232 -0
  125. package/dist/src/hooks/hookTranslator.js.map +1 -0
  126. package/dist/src/hooks/hookTranslator.test.d.ts +6 -0
  127. package/dist/src/hooks/hookTranslator.test.js +192 -0
  128. package/dist/src/hooks/hookTranslator.test.js.map +1 -0
  129. package/dist/src/hooks/types.d.ts +384 -0
  130. package/dist/src/hooks/types.js +284 -0
  131. package/dist/src/hooks/types.js.map +1 -0
  132. package/dist/src/hooks/types.test.d.ts +6 -0
  133. package/dist/src/hooks/types.test.js +35 -0
  134. package/dist/src/hooks/types.test.js.map +1 -0
  135. package/dist/src/index.d.ts +11 -0
  136. package/dist/src/index.js +14 -0
  137. package/dist/src/index.js.map +1 -1
  138. package/dist/src/mcp/google-auth-provider.d.ts +2 -0
  139. package/dist/src/mcp/google-auth-provider.js +21 -3
  140. package/dist/src/mcp/google-auth-provider.js.map +1 -1
  141. package/dist/src/mcp/google-auth-provider.test.js +42 -9
  142. package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
  143. package/dist/src/mcp/mcpLauncher.d.ts +26 -0
  144. package/dist/src/mcp/mcpLauncher.js +238 -0
  145. package/dist/src/mcp/mcpLauncher.js.map +1 -0
  146. package/dist/src/mcp/oauth-provider.d.ts +8 -5
  147. package/dist/src/mcp/oauth-provider.js +120 -36
  148. package/dist/src/mcp/oauth-provider.js.map +1 -1
  149. package/dist/src/mcp/oauth-provider.test.js +191 -2
  150. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  151. package/dist/src/mcp/oauth-token-storage.js +5 -4
  152. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  153. package/dist/src/mcp/oauth-token-storage.test.js +17 -11
  154. package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
  155. package/dist/src/mcp/oauth-utils.d.ts +7 -0
  156. package/dist/src/mcp/oauth-utils.js +19 -0
  157. package/dist/src/mcp/oauth-utils.js.map +1 -1
  158. package/dist/src/mcp/oauth-utils.test.js +32 -0
  159. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  160. package/dist/src/mcp/sa-impersonation-provider.d.ts +0 -6
  161. package/dist/src/mcp/sa-impersonation-provider.js +6 -23
  162. package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
  163. package/dist/src/mcp/token-storage/base-token-storage.test.js +75 -84
  164. package/dist/src/mcp/token-storage/base-token-storage.test.js.map +1 -1
  165. package/dist/src/mcp/token-storage/file-token-storage.js +1 -1
  166. package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
  167. package/dist/src/mcp/token-storage/file-token-storage.test.js +7 -5
  168. package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -1
  169. package/dist/src/mcp/token-storage/hybrid-token-storage.js +1 -1
  170. package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -1
  171. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js +2 -2
  172. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js.map +1 -1
  173. package/dist/src/mcp/token-storage/keychain-token-storage.d.ts +6 -2
  174. package/dist/src/mcp/token-storage/keychain-token-storage.js +63 -7
  175. package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
  176. package/dist/src/mcp/token-storage/keychain-token-storage.test.js +54 -3
  177. package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -1
  178. package/dist/src/mcp/token-storage/types.d.ts +6 -0
  179. package/dist/src/mcp/token-storage/types.js.map +1 -1
  180. package/dist/src/policy/config.d.ts +31 -0
  181. package/dist/src/policy/config.js +197 -0
  182. package/dist/src/policy/config.js.map +1 -0
  183. package/dist/src/policy/config.test.d.ts +6 -0
  184. package/dist/src/policy/config.test.js +404 -0
  185. package/dist/src/policy/config.test.js.map +1 -0
  186. package/dist/src/policy/index.d.ts +2 -0
  187. package/dist/src/policy/index.js +2 -0
  188. package/dist/src/policy/index.js.map +1 -1
  189. package/dist/src/policy/policies/read-only.toml +56 -0
  190. package/dist/src/policy/policies/write.toml +63 -0
  191. package/dist/src/policy/policies/yolo.toml +31 -0
  192. package/dist/src/policy/policy-engine.js +4 -0
  193. package/dist/src/policy/policy-engine.js.map +1 -1
  194. package/dist/src/policy/toml-loader.d.ts +46 -0
  195. package/dist/src/policy/toml-loader.js +314 -0
  196. package/dist/src/policy/toml-loader.js.map +1 -0
  197. package/dist/src/policy/toml-loader.test.d.ts +6 -0
  198. package/dist/src/policy/toml-loader.test.js +522 -0
  199. package/dist/src/policy/toml-loader.test.js.map +1 -0
  200. package/dist/src/policy/types.d.ts +18 -0
  201. package/dist/src/policy/types.js +6 -0
  202. package/dist/src/policy/types.js.map +1 -1
  203. package/dist/src/services/chatCompressionService.d.ts +32 -0
  204. package/dist/src/services/chatCompressionService.js +162 -0
  205. package/dist/src/services/chatCompressionService.js.map +1 -0
  206. package/dist/src/services/chatCompressionService.test.d.ts +6 -0
  207. package/dist/src/services/chatCompressionService.test.js +209 -0
  208. package/dist/src/services/chatCompressionService.test.js.map +1 -0
  209. package/dist/src/services/chatRecordingService.js +9 -8
  210. package/dist/src/services/chatRecordingService.js.map +1 -1
  211. package/dist/src/services/fileDiscoveryService.d.ts +2 -14
  212. package/dist/src/services/fileDiscoveryService.js +19 -55
  213. package/dist/src/services/fileDiscoveryService.js.map +1 -1
  214. package/dist/src/services/fileDiscoveryService.test.js +91 -11
  215. package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
  216. package/dist/src/services/loopDetectionService.d.ts +1 -1
  217. package/dist/src/services/loopDetectionService.js +26 -13
  218. package/dist/src/services/loopDetectionService.js.map +1 -1
  219. package/dist/src/services/loopDetectionService.test.js +119 -11
  220. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  221. package/dist/src/services/shellExecutionService.js +22 -6
  222. package/dist/src/services/shellExecutionService.js.map +1 -1
  223. package/dist/src/services/shellExecutionService.test.js +32 -6
  224. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  225. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +4 -1
  226. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +84 -33
  227. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  228. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +40 -61
  229. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
  230. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
  231. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +6 -0
  232. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  233. package/dist/src/telemetry/gcp-exporters.js +0 -1
  234. package/dist/src/telemetry/gcp-exporters.js.map +1 -1
  235. package/dist/src/telemetry/gcp-exporters.test.js +1 -1
  236. package/dist/src/telemetry/gcp-exporters.test.js.map +1 -1
  237. package/dist/src/telemetry/index.d.ts +2 -1
  238. package/dist/src/telemetry/index.js +3 -2
  239. package/dist/src/telemetry/index.js.map +1 -1
  240. package/dist/src/telemetry/loggers.d.ts +2 -1
  241. package/dist/src/telemetry/loggers.js +37 -26
  242. package/dist/src/telemetry/loggers.js.map +1 -1
  243. package/dist/src/telemetry/loggers.test.js +199 -44
  244. package/dist/src/telemetry/loggers.test.js.map +1 -1
  245. package/dist/src/telemetry/metrics.d.ts +55 -6
  246. package/dist/src/telemetry/metrics.js +89 -1
  247. package/dist/src/telemetry/metrics.js.map +1 -1
  248. package/dist/src/telemetry/metrics.test.js +172 -213
  249. package/dist/src/telemetry/metrics.test.js.map +1 -1
  250. package/dist/src/telemetry/semantic.d.ts +82 -0
  251. package/dist/src/telemetry/semantic.js +269 -0
  252. package/dist/src/telemetry/semantic.js.map +1 -0
  253. package/dist/src/telemetry/semantic.test.d.ts +6 -0
  254. package/dist/src/telemetry/semantic.test.js +387 -0
  255. package/dist/src/telemetry/semantic.test.js.map +1 -0
  256. package/dist/src/telemetry/telemetry-utils.test.js +29 -28
  257. package/dist/src/telemetry/telemetry-utils.test.js.map +1 -1
  258. package/dist/src/telemetry/trace.d.ts +46 -0
  259. package/dist/src/telemetry/trace.js +121 -0
  260. package/dist/src/telemetry/trace.js.map +1 -0
  261. package/dist/src/telemetry/types.d.ts +64 -28
  262. package/dist/src/telemetry/types.js +163 -55
  263. package/dist/src/telemetry/types.js.map +1 -1
  264. package/dist/src/telemetry/uiTelemetry.js +6 -6
  265. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  266. package/dist/src/telemetry/uiTelemetry.test.js +88 -66
  267. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  268. package/dist/src/tools/edit.d.ts +3 -2
  269. package/dist/src/tools/edit.js +16 -12
  270. package/dist/src/tools/edit.js.map +1 -1
  271. package/dist/src/tools/edit.test.js +78 -1
  272. package/dist/src/tools/edit.test.js.map +1 -1
  273. package/dist/src/tools/glob.js +9 -13
  274. package/dist/src/tools/glob.js.map +1 -1
  275. package/dist/src/tools/glob.test.js +203 -199
  276. package/dist/src/tools/glob.test.js.map +1 -1
  277. package/dist/src/tools/grep.js +2 -2
  278. package/dist/src/tools/grep.js.map +1 -1
  279. package/dist/src/tools/ls.js +7 -13
  280. package/dist/src/tools/ls.js.map +1 -1
  281. package/dist/src/tools/ls.test.js +2 -9
  282. package/dist/src/tools/ls.test.js.map +1 -1
  283. package/dist/src/tools/mcp-client-manager.d.ts +49 -4
  284. package/dist/src/tools/mcp-client-manager.js +209 -23
  285. package/dist/src/tools/mcp-client-manager.js.map +1 -1
  286. package/dist/src/tools/mcp-client-manager.test.js +130 -33
  287. package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
  288. package/dist/src/tools/mcp-client.d.ts +5 -1
  289. package/dist/src/tools/mcp-client.js +72 -92
  290. package/dist/src/tools/mcp-client.js.map +1 -1
  291. package/dist/src/tools/mcp-client.test.js +65 -6
  292. package/dist/src/tools/mcp-client.test.js.map +1 -1
  293. package/dist/src/tools/mcp-tool.d.ts +4 -2
  294. package/dist/src/tools/mcp-tool.js +14 -10
  295. package/dist/src/tools/mcp-tool.js.map +1 -1
  296. package/dist/src/tools/memoryTool.d.ts +5 -3
  297. package/dist/src/tools/memoryTool.js +10 -8
  298. package/dist/src/tools/memoryTool.js.map +1 -1
  299. package/dist/src/tools/modifiable-tool.js +3 -2
  300. package/dist/src/tools/modifiable-tool.js.map +1 -1
  301. package/dist/src/tools/read-file.js +7 -3
  302. package/dist/src/tools/read-file.js.map +1 -1
  303. package/dist/src/tools/read-file.test.js +25 -2
  304. package/dist/src/tools/read-file.test.js.map +1 -1
  305. package/dist/src/tools/read-many-files.js +8 -29
  306. package/dist/src/tools/read-many-files.js.map +1 -1
  307. package/dist/src/tools/shell.d.ts +6 -4
  308. package/dist/src/tools/shell.js +23 -16
  309. package/dist/src/tools/shell.js.map +1 -1
  310. package/dist/src/tools/shell.test.js +8 -1
  311. package/dist/src/tools/shell.test.js.map +1 -1
  312. package/dist/src/tools/smart-edit.d.ts +3 -2
  313. package/dist/src/tools/smart-edit.js +23 -12
  314. package/dist/src/tools/smart-edit.js.map +1 -1
  315. package/dist/src/tools/smart-edit.test.js +62 -1
  316. package/dist/src/tools/smart-edit.test.js.map +1 -1
  317. package/dist/src/tools/tool-registry.d.ts +6 -19
  318. package/dist/src/tools/tool-registry.js +11 -47
  319. package/dist/src/tools/tool-registry.js.map +1 -1
  320. package/dist/src/tools/tool-registry.test.js +2 -24
  321. package/dist/src/tools/tool-registry.test.js.map +1 -1
  322. package/dist/src/tools/tools.d.ts +8 -1
  323. package/dist/src/tools/tools.js +32 -18
  324. package/dist/src/tools/tools.js.map +1 -1
  325. package/dist/src/tools/web-fetch.js +4 -18
  326. package/dist/src/tools/web-fetch.js.map +1 -1
  327. package/dist/src/tools/web-fetch.test.js +3 -3
  328. package/dist/src/tools/web-fetch.test.js.map +1 -1
  329. package/dist/src/tools/write-file.d.ts +2 -1
  330. package/dist/src/tools/write-file.js +7 -7
  331. package/dist/src/tools/write-file.js.map +1 -1
  332. package/dist/src/tools/write-file.test.js +1 -1
  333. package/dist/src/tools/write-file.test.js.map +1 -1
  334. package/dist/src/tools/write-todos.d.ts +2 -1
  335. package/dist/src/tools/write-todos.js +5 -2
  336. package/dist/src/tools/write-todos.js.map +1 -1
  337. package/dist/src/utils/channel.d.ts +19 -0
  338. package/dist/src/utils/channel.js +49 -0
  339. package/dist/src/utils/channel.js.map +1 -0
  340. package/dist/src/utils/channel.test.d.ts +6 -0
  341. package/dist/src/utils/channel.test.js +170 -0
  342. package/dist/src/utils/channel.test.js.map +1 -0
  343. package/dist/src/utils/environmentContext.d.ts +2 -1
  344. package/dist/src/utils/environmentContext.js +18 -0
  345. package/dist/src/utils/environmentContext.js.map +1 -1
  346. package/dist/src/utils/errorParsing.d.ts +1 -1
  347. package/dist/src/utils/errorParsing.js +5 -33
  348. package/dist/src/utils/errorParsing.js.map +1 -1
  349. package/dist/src/utils/errorParsing.test.js +0 -88
  350. package/dist/src/utils/errorParsing.test.js.map +1 -1
  351. package/dist/src/utils/errors.d.ts +3 -0
  352. package/dist/src/utils/errors.js +6 -0
  353. package/dist/src/utils/errors.js.map +1 -1
  354. package/dist/src/utils/events.d.ts +88 -0
  355. package/dist/src/utils/events.js +77 -0
  356. package/dist/src/utils/events.js.map +1 -0
  357. package/dist/src/utils/events.test.d.ts +6 -0
  358. package/dist/src/utils/events.test.js +131 -0
  359. package/dist/src/utils/events.test.js.map +1 -0
  360. package/dist/src/utils/extensionLoader.d.ts +78 -0
  361. package/dist/src/utils/extensionLoader.js +162 -0
  362. package/dist/src/utils/extensionLoader.js.map +1 -0
  363. package/dist/src/utils/extensionLoader.test.d.ts +6 -0
  364. package/dist/src/utils/extensionLoader.test.js +90 -0
  365. package/dist/src/utils/extensionLoader.test.js.map +1 -0
  366. package/dist/src/utils/fetch.js +1 -6
  367. package/dist/src/utils/fetch.js.map +1 -1
  368. package/dist/src/utils/flashFallback.test.js +26 -45
  369. package/dist/src/utils/flashFallback.test.js.map +1 -1
  370. package/dist/src/utils/getFolderStructure.js +7 -16
  371. package/dist/src/utils/getFolderStructure.js.map +1 -1
  372. package/dist/src/utils/gitIgnoreParser.d.ts +4 -1
  373. package/dist/src/utils/gitIgnoreParser.js +21 -4
  374. package/dist/src/utils/gitIgnoreParser.js.map +1 -1
  375. package/dist/src/utils/gitIgnoreParser.test.js +28 -0
  376. package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
  377. package/dist/src/utils/googleErrors.d.ts +104 -0
  378. package/dist/src/utils/googleErrors.js +152 -0
  379. package/dist/src/utils/googleErrors.js.map +1 -0
  380. package/dist/src/utils/googleErrors.test.d.ts +6 -0
  381. package/dist/src/utils/googleErrors.test.js +301 -0
  382. package/dist/src/utils/googleErrors.test.js.map +1 -0
  383. package/dist/src/utils/googleQuotaErrors.d.ts +36 -0
  384. package/dist/src/utils/googleQuotaErrors.js +149 -0
  385. package/dist/src/utils/googleQuotaErrors.js.map +1 -0
  386. package/dist/src/utils/googleQuotaErrors.test.d.ts +6 -0
  387. package/dist/src/utils/googleQuotaErrors.test.js +311 -0
  388. package/dist/src/utils/googleQuotaErrors.test.js.map +1 -0
  389. package/dist/src/utils/ignorePatterns.test.js +26 -30
  390. package/dist/src/utils/ignorePatterns.test.js.map +1 -1
  391. package/dist/src/utils/installationManager.js +2 -1
  392. package/dist/src/utils/installationManager.js.map +1 -1
  393. package/dist/src/utils/installationManager.test.js +3 -3
  394. package/dist/src/utils/installationManager.test.js.map +1 -1
  395. package/dist/src/utils/llm-edit-fixer.d.ts +1 -1
  396. package/dist/src/utils/llm-edit-fixer.js +27 -3
  397. package/dist/src/utils/llm-edit-fixer.js.map +1 -1
  398. package/dist/src/utils/llm-edit-fixer.test.js +21 -0
  399. package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
  400. package/dist/src/utils/memoryDiscovery.d.ts +11 -2
  401. package/dist/src/utils/memoryDiscovery.js +140 -2
  402. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  403. package/dist/src/utils/memoryDiscovery.test.js +153 -37
  404. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  405. package/dist/src/utils/package.d.ts +12 -0
  406. package/dist/src/utils/package.js +15 -0
  407. package/dist/src/utils/package.js.map +1 -0
  408. package/dist/src/utils/paths.js +126 -26
  409. package/dist/src/utils/paths.js.map +1 -1
  410. package/dist/src/utils/paths.test.js +200 -68
  411. package/dist/src/utils/paths.test.js.map +1 -1
  412. package/dist/src/utils/quotaErrorDetection.d.ts +0 -2
  413. package/dist/src/utils/quotaErrorDetection.js +0 -46
  414. package/dist/src/utils/quotaErrorDetection.js.map +1 -1
  415. package/dist/src/utils/retry.js +41 -145
  416. package/dist/src/utils/retry.js.map +1 -1
  417. package/dist/src/utils/retry.test.js +31 -110
  418. package/dist/src/utils/retry.test.js.map +1 -1
  419. package/dist/src/utils/shell-utils.js +29 -1
  420. package/dist/src/utils/shell-utils.js.map +1 -1
  421. package/dist/src/utils/shell-utils.test.js +88 -0
  422. package/dist/src/utils/shell-utils.test.js.map +1 -1
  423. package/dist/src/utils/summarizer.js +2 -1
  424. package/dist/src/utils/summarizer.js.map +1 -1
  425. package/dist/src/utils/summarizer.test.js +0 -1
  426. package/dist/src/utils/summarizer.test.js.map +1 -1
  427. package/dist/src/utils/workspaceContext.js +1 -1
  428. package/dist/src/utils/workspaceContext.js.map +1 -1
  429. package/dist/src/utils/workspaceContext.test.js +2 -2
  430. package/dist/src/utils/workspaceContext.test.js.map +1 -1
  431. package/dist/tsconfig.tsbuildinfo +1 -1
  432. package/package.json +9 -3
@@ -3,7 +3,7 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { afterEach, describe, expect, it, vi } from 'vitest';
6
+ import { afterEach, beforeEach, describe, expect, it, vi, } from 'vitest';
7
7
  import { McpClientManager } from './mcp-client-manager.js';
8
8
  import { McpClient } from './mcp-client.js';
9
9
  vi.mock('./mcp-client.js', async () => {
@@ -11,58 +11,155 @@ vi.mock('./mcp-client.js', async () => {
11
11
  return {
12
12
  ...originalModule,
13
13
  McpClient: vi.fn(),
14
- populateMcpServerCommand: vi.fn(() => ({
15
- 'test-server': {},
16
- })),
17
14
  };
18
15
  });
19
16
  describe('McpClientManager', () => {
20
- afterEach(() => {
21
- vi.restoreAllMocks();
22
- });
23
- it('should discover tools from all servers', async () => {
24
- const mockedMcpClient = {
17
+ let mockedMcpClient;
18
+ let mockConfig;
19
+ beforeEach(() => {
20
+ mockedMcpClient = vi.mockObject({
25
21
  connect: vi.fn(),
26
22
  discover: vi.fn(),
27
23
  disconnect: vi.fn(),
28
24
  getStatus: vi.fn(),
29
- };
25
+ getServerConfig: vi.fn(),
26
+ });
30
27
  vi.mocked(McpClient).mockReturnValue(mockedMcpClient);
31
- const manager = new McpClientManager({});
32
- await manager.discoverAllMcpTools({
33
- isTrustedFolder: () => true,
34
- getMcpServers: () => ({
35
- 'test-server': {},
36
- }),
37
- getMcpServerCommand: () => '',
28
+ mockConfig = vi.mockObject({
29
+ isTrustedFolder: vi.fn().mockReturnValue(true),
30
+ getMcpServers: vi.fn().mockReturnValue({}),
38
31
  getPromptRegistry: () => { },
39
32
  getDebugMode: () => false,
40
33
  getWorkspaceContext: () => { },
34
+ getAllowedMcpServers: vi.fn().mockReturnValue([]),
35
+ getBlockedMcpServers: vi.fn().mockReturnValue([]),
36
+ getMcpServerCommand: vi.fn().mockReturnValue(''),
37
+ getGeminiClient: vi.fn().mockReturnValue({
38
+ isInitialized: vi.fn(),
39
+ }),
40
+ });
41
+ });
42
+ afterEach(() => {
43
+ vi.restoreAllMocks();
44
+ });
45
+ it('should discover tools from all configured', async () => {
46
+ mockConfig.getMcpServers.mockReturnValue({
47
+ 'test-server': {},
41
48
  });
49
+ const manager = new McpClientManager({}, mockConfig);
50
+ await manager.startConfiguredMcpServers();
42
51
  expect(mockedMcpClient.connect).toHaveBeenCalledOnce();
43
52
  expect(mockedMcpClient.discover).toHaveBeenCalledOnce();
44
53
  });
45
54
  it('should not discover tools if folder is not trusted', async () => {
46
- const mockedMcpClient = {
47
- connect: vi.fn(),
48
- discover: vi.fn(),
49
- disconnect: vi.fn(),
50
- getStatus: vi.fn(),
51
- };
52
- vi.mocked(McpClient).mockReturnValue(mockedMcpClient);
53
- const manager = new McpClientManager({});
54
- await manager.discoverAllMcpTools({
55
- isTrustedFolder: () => false,
56
- getMcpServers: () => ({
55
+ mockConfig.getMcpServers.mockReturnValue({
56
+ 'test-server': {},
57
+ });
58
+ mockConfig.isTrustedFolder.mockReturnValue(false);
59
+ const manager = new McpClientManager({}, mockConfig);
60
+ await manager.startConfiguredMcpServers();
61
+ expect(mockedMcpClient.connect).not.toHaveBeenCalled();
62
+ expect(mockedMcpClient.discover).not.toHaveBeenCalled();
63
+ });
64
+ it('should not start blocked servers', async () => {
65
+ mockConfig.getMcpServers.mockReturnValue({
66
+ 'test-server': {},
67
+ });
68
+ mockConfig.getBlockedMcpServers.mockReturnValue(['test-server']);
69
+ const manager = new McpClientManager({}, mockConfig);
70
+ await manager.startConfiguredMcpServers();
71
+ expect(mockedMcpClient.connect).not.toHaveBeenCalled();
72
+ expect(mockedMcpClient.discover).not.toHaveBeenCalled();
73
+ });
74
+ it('should only start allowed servers if allow list is not empty', async () => {
75
+ mockConfig.getMcpServers.mockReturnValue({
76
+ 'test-server': {},
77
+ 'another-server': {},
78
+ });
79
+ mockConfig.getAllowedMcpServers.mockReturnValue(['another-server']);
80
+ const manager = new McpClientManager({}, mockConfig);
81
+ await manager.startConfiguredMcpServers();
82
+ expect(mockedMcpClient.connect).toHaveBeenCalledOnce();
83
+ expect(mockedMcpClient.discover).toHaveBeenCalledOnce();
84
+ });
85
+ it('should start servers from extensions', async () => {
86
+ const manager = new McpClientManager({}, mockConfig);
87
+ await manager.startExtension({
88
+ name: 'test-extension',
89
+ mcpServers: {
57
90
  'test-server': {},
58
- }),
59
- getMcpServerCommand: () => '',
60
- getPromptRegistry: () => { },
61
- getDebugMode: () => false,
62
- getWorkspaceContext: () => { },
91
+ },
92
+ isActive: true,
93
+ version: '1.0.0',
94
+ path: '/some-path',
95
+ contextFiles: [],
96
+ id: '123',
97
+ });
98
+ expect(mockedMcpClient.connect).toHaveBeenCalledOnce();
99
+ expect(mockedMcpClient.discover).toHaveBeenCalledOnce();
100
+ });
101
+ it('should not start servers from disabled extensions', async () => {
102
+ const manager = new McpClientManager({}, mockConfig);
103
+ await manager.startExtension({
104
+ name: 'test-extension',
105
+ mcpServers: {
106
+ 'test-server': {},
107
+ },
108
+ isActive: false,
109
+ version: '1.0.0',
110
+ path: '/some-path',
111
+ contextFiles: [],
112
+ id: '123',
63
113
  });
64
114
  expect(mockedMcpClient.connect).not.toHaveBeenCalled();
65
115
  expect(mockedMcpClient.discover).not.toHaveBeenCalled();
66
116
  });
117
+ it('should add blocked servers to the blockedMcpServers list', async () => {
118
+ mockConfig.getMcpServers.mockReturnValue({
119
+ 'test-server': {},
120
+ });
121
+ mockConfig.getBlockedMcpServers.mockReturnValue(['test-server']);
122
+ const manager = new McpClientManager({}, mockConfig);
123
+ await manager.startConfiguredMcpServers();
124
+ expect(manager.getBlockedMcpServers()).toEqual([
125
+ { name: 'test-server', extensionName: '' },
126
+ ]);
127
+ });
128
+ describe('restart', () => {
129
+ it('should restart all running servers', async () => {
130
+ mockConfig.getMcpServers.mockReturnValue({
131
+ 'test-server': {},
132
+ });
133
+ mockedMcpClient.getServerConfig.mockReturnValue({});
134
+ const manager = new McpClientManager({}, mockConfig);
135
+ await manager.startConfiguredMcpServers();
136
+ expect(mockedMcpClient.connect).toHaveBeenCalledTimes(1);
137
+ expect(mockedMcpClient.discover).toHaveBeenCalledTimes(1);
138
+ await manager.restart();
139
+ expect(mockedMcpClient.disconnect).toHaveBeenCalledTimes(1);
140
+ expect(mockedMcpClient.connect).toHaveBeenCalledTimes(2);
141
+ expect(mockedMcpClient.discover).toHaveBeenCalledTimes(2);
142
+ });
143
+ });
144
+ describe('restartServer', () => {
145
+ it('should restart the specified server', async () => {
146
+ mockConfig.getMcpServers.mockReturnValue({
147
+ 'test-server': {},
148
+ });
149
+ mockedMcpClient.getServerConfig.mockReturnValue({});
150
+ const manager = new McpClientManager({}, mockConfig);
151
+ await manager.startConfiguredMcpServers();
152
+ expect(mockedMcpClient.connect).toHaveBeenCalledTimes(1);
153
+ expect(mockedMcpClient.discover).toHaveBeenCalledTimes(1);
154
+ await manager.restartServer('test-server');
155
+ expect(mockedMcpClient.disconnect).toHaveBeenCalledTimes(1);
156
+ expect(mockedMcpClient.connect).toHaveBeenCalledTimes(2);
157
+ expect(mockedMcpClient.discover).toHaveBeenCalledTimes(2);
158
+ });
159
+ it('should throw an error if the server does not exist', async () => {
160
+ const manager = new McpClientManager({}, mockConfig);
161
+ await expect(manager.restartServer('non-existent')).rejects.toThrow('No MCP server registered with the name "non-existent"');
162
+ });
163
+ });
67
164
  });
68
165
  //# sourceMappingURL=mcp-client-manager.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-client-manager.test.js","sourceRoot":"","sources":["../../../src/tools/mcp-client-manager.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-client-manager.test.js","sourceRoot":"","sources":["../../../src/tools/mcp-client-manager.test.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ import type { FunctionDeclaration } from '@google/genai';
12
12
  import type { PromptRegistry } from '../prompts/prompt-registry.js';
13
13
  import type { WorkspaceContext } from '../utils/workspaceContext.js';
14
14
  import type { ToolRegistry } from './tool-registry.js';
15
+ import type { MessageBus } from '../confirmation-bus/message-bus.js';
15
16
  export declare const MCP_DEFAULT_TIMEOUT_MSEC: number;
16
17
  export type DiscoveredMCPPrompt = Prompt & {
17
18
  serverName: string;
@@ -78,6 +79,7 @@ export declare class McpClient {
78
79
  private assertConnected;
79
80
  private discoverTools;
80
81
  private discoverPrompts;
82
+ getServerConfig(): MCPServerConfig;
81
83
  }
82
84
  /**
83
85
  * Map to track which MCP servers have been discovered to require OAuth
@@ -143,10 +145,12 @@ export declare function connectAndDiscover(mcpServerName: string, mcpServerConfi
143
145
  * @param mcpServerName The name of the MCP server.
144
146
  * @param mcpServerConfig The configuration for the MCP server.
145
147
  * @param mcpClient The active MCP client instance.
148
+ * @param cliConfig The CLI configuration object.
149
+ * @param messageBus Optional message bus for policy engine integration.
146
150
  * @returns A promise that resolves to an array of discovered and enabled tools.
147
151
  * @throws An error if no enabled tools are found or if the server provides invalid function declarations.
148
152
  */
149
- export declare function discoverTools(mcpServerName: string, mcpServerConfig: MCPServerConfig, mcpClient: Client, cliConfig: Config): Promise<DiscoveredMCPTool[]>;
153
+ export declare function discoverTools(mcpServerName: string, mcpServerConfig: MCPServerConfig, mcpClient: Client, cliConfig: Config, messageBus?: MessageBus): Promise<DiscoveredMCPTool[]>;
150
154
  /**
151
155
  * Discovers and logs prompts from a connected MCP client.
152
156
  * It retrieves prompt declarations from the client and logs their names.
@@ -59,6 +59,7 @@ import { MCPOAuthTokenStorage } from '../mcp/oauth-token-storage.js';
59
59
  import { OAuthUtils } from '../mcp/oauth-utils.js';
60
60
  import { getErrorMessage } from '../utils/errors.js';
61
61
  import { debugLogger } from '../utils/debugLogger.js';
62
+ import { coreEvents } from '../utils/events.js';
62
63
  export const MCP_DEFAULT_TIMEOUT_MSEC = 10 * 60 * 1000; // default to 10 minutes
63
64
  /**
64
65
  * Enum representing the connection status of an MCP server
@@ -127,7 +128,7 @@ export class McpClient {
127
128
  }
128
129
  if (originalOnError)
129
130
  originalOnError(error);
130
- console.error(`MCP ERROR (${this.serverName}):`, error.toString());
131
+ coreEvents.emitFeedback('error', `MCP ERROR (${this.serverName})`, error);
131
132
  this.updateStatus(MCPServerStatus.DISCONNECTED);
132
133
  };
133
134
  this.updateStatus(MCPServerStatus.CONNECTED);
@@ -158,6 +159,8 @@ export class McpClient {
158
159
  if (this.status !== MCPServerStatus.CONNECTED) {
159
160
  return;
160
161
  }
162
+ this.toolRegistry.removeMcpToolsByServer(this.serverName);
163
+ this.promptRegistry.removePromptsByServer(this.serverName);
161
164
  this.updateStatus(MCPServerStatus.DISCONNECTING);
162
165
  const client = this.client;
163
166
  this.client = undefined;
@@ -186,12 +189,15 @@ export class McpClient {
186
189
  }
187
190
  async discoverTools(cliConfig) {
188
191
  this.assertConnected();
189
- return discoverTools(this.serverName, this.serverConfig, this.client, cliConfig);
192
+ return discoverTools(this.serverName, this.serverConfig, this.client, cliConfig, this.toolRegistry.getMessageBus());
190
193
  }
191
194
  async discoverPrompts() {
192
195
  this.assertConnected();
193
196
  return discoverPrompts(this.serverName, this.client, this.promptRegistry);
194
197
  }
198
+ getServerConfig() {
199
+ return this.serverConfig;
200
+ }
195
201
  }
196
202
  /**
197
203
  * Map to track the status of each MCP server within the core package
@@ -296,7 +302,7 @@ async function handleAutomaticOAuth(mcpServerName, mcpServerConfig, wwwAuthentic
296
302
  oauthConfig = await OAuthUtils.discoverOAuthConfig(baseUrl);
297
303
  }
298
304
  if (!oauthConfig) {
299
- console.error(`❌ Could not configure OAuth for '${mcpServerName}' - please authenticate manually with /mcp auth ${mcpServerName}`);
305
+ coreEvents.emitFeedback('error', `Could not configure OAuth for '${mcpServerName}' - please authenticate manually with /mcp auth ${mcpServerName}`);
300
306
  return false;
301
307
  }
302
308
  // OAuth configuration discovered - proceed with authentication
@@ -317,7 +323,7 @@ async function handleAutomaticOAuth(mcpServerName, mcpServerConfig, wwwAuthentic
317
323
  return true;
318
324
  }
319
325
  catch (error) {
320
- console.error(`Failed to handle automatic OAuth for server '${mcpServerName}': ${getErrorMessage(error)}`);
326
+ coreEvents.emitFeedback('error', `Failed to handle automatic OAuth for server '${mcpServerName}': ${getErrorMessage(error)}`, error);
321
327
  return false;
322
328
  }
323
329
  }
@@ -357,7 +363,7 @@ async function createTransportWithOAuth(mcpServerName, mcpServerConfig, accessTo
357
363
  return null;
358
364
  }
359
365
  catch (error) {
360
- console.error(`Failed to create OAuth transport for server '${mcpServerName}': ${getErrorMessage(error)}`);
366
+ coreEvents.emitFeedback('error', `Failed to create OAuth transport for server '${mcpServerName}': ${getErrorMessage(error)}`, error);
361
367
  return null;
362
368
  }
363
369
  }
@@ -414,12 +420,12 @@ export async function connectAndDiscover(mcpServerName, mcpServerConfig, toolReg
414
420
  try {
415
421
  mcpClient = await connectToMcpServer(mcpServerName, mcpServerConfig, debugMode, workspaceContext);
416
422
  mcpClient.onerror = (error) => {
417
- console.error(`MCP ERROR (${mcpServerName}):`, error.toString());
423
+ coreEvents.emitFeedback('error', `MCP ERROR (${mcpServerName}):`, error);
418
424
  updateMCPServerStatus(mcpServerName, MCPServerStatus.DISCONNECTED);
419
425
  };
420
426
  // Attempt to discover both prompts and tools
421
427
  const prompts = await discoverPrompts(mcpServerName, mcpClient, promptRegistry);
422
- const tools = await discoverTools(mcpServerName, mcpServerConfig, mcpClient, cliConfig);
428
+ const tools = await discoverTools(mcpServerName, mcpServerConfig, mcpClient, cliConfig, toolRegistry.getMessageBus());
423
429
  // If we have neither prompts nor tools, it's a failed discovery
424
430
  if (prompts.length === 0 && tools.length === 0) {
425
431
  throw new Error('No prompts or tools found on the server.');
@@ -435,7 +441,7 @@ export async function connectAndDiscover(mcpServerName, mcpServerConfig, toolReg
435
441
  if (mcpClient) {
436
442
  mcpClient.close();
437
443
  }
438
- console.error(`Error connecting to MCP server '${mcpServerName}': ${getErrorMessage(error)}`);
444
+ coreEvents.emitFeedback('error', `Error connecting to MCP server '${mcpServerName}': ${getErrorMessage(error)}`, error);
439
445
  updateMCPServerStatus(mcpServerName, MCPServerStatus.DISCONNECTED);
440
446
  }
441
447
  }
@@ -447,10 +453,12 @@ export async function connectAndDiscover(mcpServerName, mcpServerConfig, toolReg
447
453
  * @param mcpServerName The name of the MCP server.
448
454
  * @param mcpServerConfig The configuration for the MCP server.
449
455
  * @param mcpClient The active MCP client instance.
456
+ * @param cliConfig The CLI configuration object.
457
+ * @param messageBus Optional message bus for policy engine integration.
450
458
  * @returns A promise that resolves to an array of discovered and enabled tools.
451
459
  * @throws An error if no enabled tools are found or if the server provides invalid function declarations.
452
460
  */
453
- export async function discoverTools(mcpServerName, mcpServerConfig, mcpClient, cliConfig) {
461
+ export async function discoverTools(mcpServerName, mcpServerConfig, mcpClient, cliConfig, messageBus) {
454
462
  try {
455
463
  // Only request tools if the server supports them.
456
464
  if (mcpClient.getServerCapabilities()?.tools == null)
@@ -469,10 +477,11 @@ export async function discoverTools(mcpServerName, mcpServerConfig, mcpClient, c
469
477
  if (!isEnabled(funcDecl, mcpServerName, mcpServerConfig)) {
470
478
  continue;
471
479
  }
472
- discoveredTools.push(new DiscoveredMCPTool(mcpCallableTool, mcpServerName, funcDecl.name, funcDecl.description ?? '', funcDecl.parametersJsonSchema ?? { type: 'object', properties: {} }, mcpServerConfig.trust, undefined, cliConfig, mcpServerConfig.extension?.id));
480
+ const tool = new DiscoveredMCPTool(mcpCallableTool, mcpServerName, funcDecl.name, funcDecl.description ?? '', funcDecl.parametersJsonSchema ?? { type: 'object', properties: {} }, mcpServerConfig.trust, undefined, cliConfig, mcpServerConfig.extension?.name, mcpServerConfig.extension?.id, messageBus);
481
+ discoveredTools.push(tool);
473
482
  }
474
483
  catch (error) {
475
- console.error(`Error discovering tool: '${funcDecl.name}' from MCP server '${mcpServerName}': ${error.message}`);
484
+ coreEvents.emitFeedback('error', `Error discovering tool: '${funcDecl.name}' from MCP server '${mcpServerName}': ${error.message}`, error);
476
485
  }
477
486
  }
478
487
  return discoveredTools;
@@ -480,7 +489,7 @@ export async function discoverTools(mcpServerName, mcpServerConfig, mcpClient, c
480
489
  catch (error) {
481
490
  if (error instanceof Error &&
482
491
  !error.message?.includes('Method not found')) {
483
- console.error(`Error discovering tools from ${mcpServerName}: ${getErrorMessage(error)}`);
492
+ coreEvents.emitFeedback('error', `Error discovering tools from ${mcpServerName}: ${getErrorMessage(error)}`, error);
484
493
  }
485
494
  return [];
486
495
  }
@@ -512,7 +521,7 @@ export async function discoverPrompts(mcpServerName, mcpClient, promptRegistry)
512
521
  // Don't log an error if the method is not found, which is a common case.
513
522
  if (error instanceof Error &&
514
523
  !error.message?.includes('Method not found')) {
515
- console.error(`Error discovering prompts from ${mcpServerName}: ${getErrorMessage(error)}`);
524
+ coreEvents.emitFeedback('error', `Error discovering prompts from ${mcpServerName}: ${getErrorMessage(error)}`, error);
516
525
  }
517
526
  return [];
518
527
  }
@@ -540,7 +549,7 @@ export async function invokeMcpPrompt(mcpServerName, mcpClient, promptName, prom
540
549
  catch (error) {
541
550
  if (error instanceof Error &&
542
551
  !error.message?.includes('Method not found')) {
543
- console.error(`Error invoking prompt '${promptName}' from ${mcpServerName} ${promptParams}: ${getErrorMessage(error)}`);
552
+ coreEvents.emitFeedback('error', `Error invoking prompt '${promptName}' from ${mcpServerName} ${promptParams}: ${getErrorMessage(error)}`, error);
544
553
  }
545
554
  throw error;
546
555
  }
@@ -642,11 +651,11 @@ export async function connectToMcpServer(mcpServerName, mcpServerConfig, debugMo
642
651
  clientId: credentials.clientId,
643
652
  });
644
653
  if (hasStoredTokens) {
645
- debugLogger.log(`Stored OAuth token for SSE server '${mcpServerName}' was rejected. ` +
654
+ coreEvents.emitFeedback('error', `Stored OAuth token for SSE server '${mcpServerName}' was rejected. ` +
646
655
  `Please re-authenticate using: /mcp auth ${mcpServerName}`);
647
656
  }
648
657
  else {
649
- debugLogger.log(`401 error received for SSE server '${mcpServerName}' without OAuth configuration. ` +
658
+ coreEvents.emitFeedback('error', `401 error received for SSE server '${mcpServerName}' without OAuth configuration. ` +
650
659
  `Please authenticate using: /mcp auth ${mcpServerName}`);
651
660
  }
652
661
  }
@@ -701,35 +710,25 @@ export async function connectToMcpServer(mcpServerName, mcpServerConfig, debugMo
701
710
  // Create transport with OAuth token
702
711
  const oauthTransport = await createTransportWithOAuth(mcpServerName, mcpServerConfig, accessToken);
703
712
  if (oauthTransport) {
704
- try {
705
- await mcpClient.connect(oauthTransport, {
706
- timeout: mcpServerConfig.timeout ?? MCP_DEFAULT_TIMEOUT_MSEC,
707
- });
708
- // Connection successful with OAuth
709
- return mcpClient;
710
- }
711
- catch (retryError) {
712
- console.error(`Failed to connect with OAuth token: ${getErrorMessage(retryError)}`);
713
- throw retryError;
714
- }
713
+ await mcpClient.connect(oauthTransport, {
714
+ timeout: mcpServerConfig.timeout ?? MCP_DEFAULT_TIMEOUT_MSEC,
715
+ });
716
+ // Connection successful with OAuth
717
+ return mcpClient;
715
718
  }
716
719
  else {
717
- console.error(`Failed to create OAuth transport for server '${mcpServerName}'`);
718
720
  throw new Error(`Failed to create OAuth transport for server '${mcpServerName}'`);
719
721
  }
720
722
  }
721
723
  else {
722
- console.error(`Failed to get OAuth token for server '${mcpServerName}'`);
723
724
  throw new Error(`Failed to get OAuth token for server '${mcpServerName}'`);
724
725
  }
725
726
  }
726
727
  else {
727
- console.error(`Failed to get credentials for server '${mcpServerName}' after successful OAuth authentication`);
728
728
  throw new Error(`Failed to get credentials for server '${mcpServerName}' after successful OAuth authentication`);
729
729
  }
730
730
  }
731
731
  else {
732
- console.error(`Failed to handle automatic OAuth for server '${mcpServerName}'`);
733
732
  throw new Error(`Failed to handle automatic OAuth for server '${mcpServerName}'`);
734
733
  }
735
734
  }
@@ -748,11 +747,11 @@ export async function connectToMcpServer(mcpServerName, mcpServerConfig, debugMo
748
747
  clientId: credentials.clientId,
749
748
  });
750
749
  if (hasStoredTokens) {
751
- debugLogger.log(`Stored OAuth token for SSE server '${mcpServerName}' was rejected. ` +
750
+ coreEvents.emitFeedback('error', `Stored OAuth token for SSE server '${mcpServerName}' was rejected. ` +
752
751
  `Please re-authenticate using: /mcp auth ${mcpServerName}`);
753
752
  }
754
753
  else {
755
- debugLogger.log(`401 error received for SSE server '${mcpServerName}' without OAuth configuration. ` +
754
+ coreEvents.emitFeedback('error', `401 error received for SSE server '${mcpServerName}' without OAuth configuration. ` +
756
755
  `Please authenticate using: /mcp auth ${mcpServerName}`);
757
756
  }
758
757
  }
@@ -764,76 +763,59 @@ export async function connectToMcpServer(mcpServerName, mcpServerConfig, debugMo
764
763
  if (hasNetworkTransport(mcpServerConfig)) {
765
764
  const serverUrl = new URL(mcpServerConfig.httpUrl || mcpServerConfig.url);
766
765
  const baseUrl = `${serverUrl.protocol}//${serverUrl.host}`;
767
- try {
768
- // Try to discover OAuth configuration from the base URL
769
- const oauthConfig = await OAuthUtils.discoverOAuthConfig(baseUrl);
770
- if (oauthConfig) {
771
- debugLogger.log(`Discovered OAuth configuration from base URL for server '${mcpServerName}'`);
772
- // Create OAuth configuration for authentication
773
- const oauthAuthConfig = {
774
- enabled: true,
775
- authorizationUrl: oauthConfig.authorizationUrl,
776
- tokenUrl: oauthConfig.tokenUrl,
777
- scopes: oauthConfig.scopes || [],
778
- };
779
- // Perform OAuth authentication
780
- // Pass the server URL for proper discovery
781
- const authServerUrl = mcpServerConfig.httpUrl || mcpServerConfig.url;
782
- debugLogger.log(`Starting OAuth authentication for server '${mcpServerName}'...`);
783
- const authProvider = new MCPOAuthProvider(new MCPOAuthTokenStorage());
784
- await authProvider.authenticate(mcpServerName, oauthAuthConfig, authServerUrl);
785
- // Retry connection with OAuth token
786
- const tokenStorage = new MCPOAuthTokenStorage();
787
- const credentials = await tokenStorage.getCredentials(mcpServerName);
788
- if (credentials) {
789
- const authProvider = new MCPOAuthProvider(tokenStorage);
790
- const accessToken = await authProvider.getValidToken(mcpServerName, {
791
- // Pass client ID if available
792
- clientId: credentials.clientId,
793
- });
794
- if (accessToken) {
795
- // Create transport with OAuth token
796
- const oauthTransport = await createTransportWithOAuth(mcpServerName, mcpServerConfig, accessToken);
797
- if (oauthTransport) {
798
- try {
799
- await mcpClient.connect(oauthTransport, {
800
- timeout: mcpServerConfig.timeout ?? MCP_DEFAULT_TIMEOUT_MSEC,
801
- });
802
- // Connection successful with OAuth
803
- return mcpClient;
804
- }
805
- catch (retryError) {
806
- console.error(`Failed to connect with OAuth token: ${getErrorMessage(retryError)}`);
807
- throw retryError;
808
- }
809
- }
810
- else {
811
- console.error(`Failed to create OAuth transport for server '${mcpServerName}'`);
812
- throw new Error(`Failed to create OAuth transport for server '${mcpServerName}'`);
813
- }
766
+ // Try to discover OAuth configuration from the base URL
767
+ const oauthConfig = await OAuthUtils.discoverOAuthConfig(baseUrl);
768
+ if (oauthConfig) {
769
+ debugLogger.log(`Discovered OAuth configuration from base URL for server '${mcpServerName}'`);
770
+ // Create OAuth configuration for authentication
771
+ const oauthAuthConfig = {
772
+ enabled: true,
773
+ authorizationUrl: oauthConfig.authorizationUrl,
774
+ tokenUrl: oauthConfig.tokenUrl,
775
+ scopes: oauthConfig.scopes || [],
776
+ };
777
+ // Perform OAuth authentication
778
+ // Pass the server URL for proper discovery
779
+ const authServerUrl = mcpServerConfig.httpUrl || mcpServerConfig.url;
780
+ debugLogger.log(`Starting OAuth authentication for server '${mcpServerName}'...`);
781
+ const authProvider = new MCPOAuthProvider(new MCPOAuthTokenStorage());
782
+ await authProvider.authenticate(mcpServerName, oauthAuthConfig, authServerUrl);
783
+ // Retry connection with OAuth token
784
+ const tokenStorage = new MCPOAuthTokenStorage();
785
+ const credentials = await tokenStorage.getCredentials(mcpServerName);
786
+ if (credentials) {
787
+ const authProvider = new MCPOAuthProvider(tokenStorage);
788
+ const accessToken = await authProvider.getValidToken(mcpServerName, {
789
+ // Pass client ID if available
790
+ clientId: credentials.clientId,
791
+ });
792
+ if (accessToken) {
793
+ // Create transport with OAuth token
794
+ const oauthTransport = await createTransportWithOAuth(mcpServerName, mcpServerConfig, accessToken);
795
+ if (oauthTransport) {
796
+ await mcpClient.connect(oauthTransport, {
797
+ timeout: mcpServerConfig.timeout ?? MCP_DEFAULT_TIMEOUT_MSEC,
798
+ });
799
+ // Connection successful with OAuth
800
+ return mcpClient;
814
801
  }
815
802
  else {
816
- console.error(`Failed to get OAuth token for server '${mcpServerName}'`);
817
- throw new Error(`Failed to get OAuth token for server '${mcpServerName}'`);
803
+ throw new Error(`Failed to create OAuth transport for server '${mcpServerName}'`);
818
804
  }
819
805
  }
820
806
  else {
821
- console.error(`Failed to get stored credentials for server '${mcpServerName}'`);
822
- throw new Error(`Failed to get stored credentials for server '${mcpServerName}'`);
807
+ throw new Error(`Failed to get OAuth token for server '${mcpServerName}'`);
823
808
  }
824
809
  }
825
810
  else {
826
- console.error(`❌ Could not configure OAuth for '${mcpServerName}' - please authenticate manually with /mcp auth ${mcpServerName}`);
827
- throw new Error(`OAuth configuration failed for '${mcpServerName}'. Please authenticate manually with /mcp auth ${mcpServerName}`);
811
+ throw new Error(`Failed to get stored credentials for server '${mcpServerName}'`);
828
812
  }
829
813
  }
830
- catch (discoveryError) {
831
- console.error(`❌ OAuth discovery failed for '${mcpServerName}' - please authenticate manually with /mcp auth ${mcpServerName}`);
832
- throw discoveryError;
814
+ else {
815
+ throw new Error(`OAuth configuration failed for '${mcpServerName}'. Please authenticate manually with /mcp auth ${mcpServerName}`);
833
816
  }
834
817
  }
835
818
  else {
836
- console.error(`❌ '${mcpServerName}' requires authentication but no OAuth configuration found`);
837
819
  throw new Error(`MCP server '${mcpServerName}' requires authentication. Please configure OAuth or check server settings.`);
838
820
  }
839
821
  }
@@ -896,8 +878,6 @@ export async function createTransport(mcpServerName, mcpServerConfig, debugMode)
896
878
  const authProvider = new MCPOAuthProvider(tokenStorage);
897
879
  accessToken = await authProvider.getValidToken(mcpServerName, mcpServerConfig.oauth);
898
880
  if (!accessToken) {
899
- console.error(`MCP server '${mcpServerName}' requires OAuth authentication. ` +
900
- `Please authenticate using the /mcp auth command.`);
901
881
  throw new Error(`MCP server '${mcpServerName}' requires OAuth authentication. ` +
902
882
  `Please authenticate using the /mcp auth command.`);
903
883
  }