@evalops/maestro 0.10.23 → 0.10.25

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 (376) hide show
  1. package/README.md +4 -4
  2. package/dist/agent/agent.d.ts +2 -2
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/agent.js +1 -1
  5. package/dist/agent/agent.js.map +1 -1
  6. package/dist/agent/keys.d.ts +2 -5
  7. package/dist/agent/keys.d.ts.map +1 -1
  8. package/dist/agent/keys.js +4 -5
  9. package/dist/agent/keys.js.map +1 -1
  10. package/dist/agent/modes.d.ts +2 -2
  11. package/dist/agent/modes.d.ts.map +1 -1
  12. package/dist/agent/modes.js +6 -7
  13. package/dist/agent/modes.js.map +1 -1
  14. package/dist/agent/providers/anthropic.d.ts.map +1 -1
  15. package/dist/agent/providers/anthropic.js +4 -4
  16. package/dist/agent/providers/anthropic.js.map +1 -1
  17. package/dist/agent/providers/google.js +1 -1
  18. package/dist/agent/swarm/executor.d.ts +2 -0
  19. package/dist/agent/swarm/executor.d.ts.map +1 -1
  20. package/dist/agent/swarm/executor.js +208 -35
  21. package/dist/agent/swarm/executor.js.map +1 -1
  22. package/dist/agent/swarm/types.d.ts +2 -0
  23. package/dist/agent/swarm/types.d.ts.map +1 -1
  24. package/dist/agent/swarm/types.js.map +1 -1
  25. package/dist/agent/tool-capability-types.d.ts +36 -0
  26. package/dist/agent/tool-capability-types.d.ts.map +1 -0
  27. package/dist/agent/tool-capability-types.js +2 -0
  28. package/dist/agent/tool-capability-types.js.map +1 -0
  29. package/dist/agent/transport/tool-execution-bridge.d.ts +13 -0
  30. package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
  31. package/dist/agent/transport/tool-execution-bridge.js +28 -15
  32. package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
  33. package/dist/agent/transport/transport-utils.d.ts.map +1 -1
  34. package/dist/agent/transport/transport-utils.js +2 -3
  35. package/dist/agent/transport/transport-utils.js.map +1 -1
  36. package/dist/agent/transport.js +1 -1
  37. package/dist/agent/transport.js.map +1 -1
  38. package/dist/agent/type-guards.d.ts +1 -1
  39. package/dist/agent/type-guards.js +1 -1
  40. package/dist/agent/type-guards.js.map +1 -1
  41. package/dist/agent/types.d.ts +5 -3
  42. package/dist/agent/types.d.ts.map +1 -1
  43. package/dist/agent/types.js +2 -2
  44. package/dist/agent/types.js.map +1 -1
  45. package/dist/app-server/daemon-lifecycle-api.d.ts +31 -0
  46. package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -0
  47. package/dist/app-server/daemon-lifecycle-api.js +259 -0
  48. package/dist/app-server/daemon-lifecycle-api.js.map +1 -0
  49. package/dist/app-server/external-agent-import-api.d.ts +30 -0
  50. package/dist/app-server/external-agent-import-api.d.ts.map +1 -0
  51. package/dist/app-server/external-agent-import-api.js +553 -0
  52. package/dist/app-server/external-agent-import-api.js.map +1 -0
  53. package/dist/app-server/host-control-api.d.ts +30 -0
  54. package/dist/app-server/host-control-api.d.ts.map +1 -0
  55. package/dist/app-server/host-control-api.js +343 -0
  56. package/dist/app-server/host-control-api.js.map +1 -0
  57. package/dist/app-server/in-process-client.d.ts +2 -2
  58. package/dist/app-server/in-process-client.d.ts.map +1 -1
  59. package/dist/app-server/in-process-client.js.map +1 -1
  60. package/dist/app-server/network-governance-api.d.ts +26 -0
  61. package/dist/app-server/network-governance-api.d.ts.map +1 -0
  62. package/dist/app-server/network-governance-api.js +476 -0
  63. package/dist/app-server/network-governance-api.js.map +1 -0
  64. package/dist/app-server/plugin-bundle-api.d.ts +17 -0
  65. package/dist/app-server/plugin-bundle-api.d.ts.map +1 -0
  66. package/dist/app-server/plugin-bundle-api.js +219 -0
  67. package/dist/app-server/plugin-bundle-api.js.map +1 -0
  68. package/dist/app-server/policy-control-api.d.ts +14 -0
  69. package/dist/app-server/policy-control-api.d.ts.map +1 -0
  70. package/dist/app-server/policy-control-api.js +200 -0
  71. package/dist/app-server/policy-control-api.js.map +1 -0
  72. package/dist/app-server/protocol-modes-api.d.ts +22 -0
  73. package/dist/app-server/protocol-modes-api.d.ts.map +1 -0
  74. package/dist/app-server/protocol-modes-api.js +124 -0
  75. package/dist/app-server/protocol-modes-api.js.map +1 -0
  76. package/dist/app-server/sandbox-proof-api.d.ts +21 -0
  77. package/dist/app-server/sandbox-proof-api.d.ts.map +1 -0
  78. package/dist/app-server/sandbox-proof-api.js +127 -0
  79. package/dist/app-server/sandbox-proof-api.js.map +1 -0
  80. package/dist/app-server/session-api.d.ts +93 -3
  81. package/dist/app-server/session-api.d.ts.map +1 -1
  82. package/dist/app-server/session-api.js +706 -18
  83. package/dist/app-server/session-api.js.map +1 -1
  84. package/dist/audit/logger.d.ts +1 -1
  85. package/dist/bootstrap/auth-setup.d.ts.map +1 -1
  86. package/dist/bootstrap/auth-setup.js +17 -2
  87. package/dist/bootstrap/auth-setup.js.map +1 -1
  88. package/dist/bootstrap/model-resolution-setup.d.ts.map +1 -1
  89. package/dist/bootstrap/model-resolution-setup.js +19 -4
  90. package/dist/bootstrap/model-resolution-setup.js.map +1 -1
  91. package/dist/cli/args.d.ts +2 -2
  92. package/dist/cli/args.d.ts.map +1 -1
  93. package/dist/cli/args.js +2 -2
  94. package/dist/cli/args.js.map +1 -1
  95. package/dist/cli/commands/a2a.d.ts.map +1 -1
  96. package/dist/cli/commands/a2a.js +226 -14
  97. package/dist/cli/commands/a2a.js.map +1 -1
  98. package/dist/cli/commands/anthropic.d.ts +1 -1
  99. package/dist/cli/commands/anthropic.d.ts.map +1 -1
  100. package/dist/cli/commands/anthropic.js +3 -68
  101. package/dist/cli/commands/anthropic.js.map +1 -1
  102. package/dist/cli/commands/modes.js +1 -1
  103. package/dist/cli/commands/modes.js.map +1 -1
  104. package/dist/cli/help.d.ts.map +1 -1
  105. package/dist/cli/help.js +5 -7
  106. package/dist/cli/help.js.map +1 -1
  107. package/dist/cli/rpc-mode.d.ts +1 -1
  108. package/dist/cli/rpc-mode.js +1 -1
  109. package/dist/cli/rpc-mode.js.map +1 -1
  110. package/dist/cli/session.js +1 -1
  111. package/dist/cli/session.js.map +1 -1
  112. package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
  113. package/dist/cli-tui/commands/command-catalog.js +7 -12
  114. package/dist/cli-tui/commands/command-catalog.js.map +1 -1
  115. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts +1 -1
  116. package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -1
  117. package/dist/cli-tui/commands/subcommands/auth-commands.js +4 -12
  118. package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -1
  119. package/dist/cli-tui/custom-editor.d.ts +1 -1
  120. package/dist/cli-tui/custom-editor.js +2 -2
  121. package/dist/cli-tui/custom-editor.js.map +1 -1
  122. package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
  123. package/dist/cli-tui/oauth/oauth-flow-controller.js +19 -23
  124. package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
  125. package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
  126. package/dist/cli-tui/selectors/model-selector.js +0 -1
  127. package/dist/cli-tui/selectors/model-selector.js.map +1 -1
  128. package/dist/cli-tui/selectors/oauth-selector-view.d.ts +2 -2
  129. package/dist/cli-tui/selectors/oauth-selector-view.d.ts.map +1 -1
  130. package/dist/cli-tui/selectors/oauth-selector-view.js.map +1 -1
  131. package/dist/cli-tui/selectors/oauth-selector.d.ts +2 -2
  132. package/dist/cli-tui/selectors/oauth-selector.d.ts.map +1 -1
  133. package/dist/cli-tui/selectors/oauth-selector.js +3 -4
  134. package/dist/cli-tui/selectors/oauth-selector.js.map +1 -1
  135. package/dist/cli-tui/tui-renderer/mcp-events-setup.js +1 -1
  136. package/dist/cli-tui/tui-renderer/mcp-events-setup.js.map +1 -1
  137. package/dist/cli-tui/tui-renderer.js +2 -2
  138. package/dist/cli-tui/tui-renderer.js.map +1 -1
  139. package/dist/cli-tui/utils/footer-utils.d.ts +1 -1
  140. package/dist/cli-tui/utils/footer-utils.js +1 -1
  141. package/dist/cli-tui/utils/footer-utils.js.map +1 -1
  142. package/dist/cli.js +15156 -14232
  143. package/dist/commands/prompts.d.ts +1 -1
  144. package/dist/commands/prompts.js +1 -1
  145. package/dist/commands/prompts.js.map +1 -1
  146. package/dist/config/constants.d.ts +2 -2
  147. package/dist/config/constants.d.ts.map +1 -1
  148. package/dist/config/constants.js +2 -2
  149. package/dist/config/constants.js.map +1 -1
  150. package/dist/config/index.d.ts +1 -1
  151. package/dist/config/index.js +1 -1
  152. package/dist/config/index.js.map +1 -1
  153. package/dist/config/toml-config.js +3 -3
  154. package/dist/config/toml-config.js.map +1 -1
  155. package/dist/db/client.d.ts +2 -2
  156. package/dist/db/client.js +2 -2
  157. package/dist/db/client.js.map +1 -1
  158. package/dist/db/migrate.d.ts +1 -1
  159. package/dist/db/migrate.js +1 -1
  160. package/dist/db/migrate.js.map +1 -1
  161. package/dist/db/schema.d.ts +2 -2
  162. package/dist/db/schema.js +1 -1
  163. package/dist/db/schema.js.map +1 -1
  164. package/dist/errors/index.d.ts +2 -2
  165. package/dist/errors/index.js +2 -2
  166. package/dist/errors/index.js.map +1 -1
  167. package/dist/main.d.ts +4 -5
  168. package/dist/main.d.ts.map +1 -1
  169. package/dist/main.js +17 -14
  170. package/dist/main.js.map +1 -1
  171. package/dist/mcp/config.d.ts +15 -2
  172. package/dist/mcp/config.d.ts.map +1 -1
  173. package/dist/mcp/config.js +50 -26
  174. package/dist/mcp/config.js.map +1 -1
  175. package/dist/mcp/fathom-cua.d.ts.map +1 -1
  176. package/dist/mcp/fathom-cua.js +10 -0
  177. package/dist/mcp/fathom-cua.js.map +1 -1
  178. package/dist/mcp/manager.d.ts.map +1 -1
  179. package/dist/mcp/manager.js +32 -1
  180. package/dist/mcp/manager.js.map +1 -1
  181. package/dist/mcp/tool-bridge.d.ts.map +1 -1
  182. package/dist/mcp/tool-bridge.js +12 -3
  183. package/dist/mcp/tool-bridge.js.map +1 -1
  184. package/dist/mcp/tool-capabilities.d.ts +5 -0
  185. package/dist/mcp/tool-capabilities.d.ts.map +1 -0
  186. package/dist/mcp/tool-capabilities.js +271 -0
  187. package/dist/mcp/tool-capabilities.js.map +1 -0
  188. package/dist/mcp/types.d.ts +6 -1
  189. package/dist/mcp/types.d.ts.map +1 -1
  190. package/dist/mcp/types.js.map +1 -1
  191. package/dist/models/config-loader.d.ts +1 -1
  192. package/dist/models/factory-integration.d.ts +1 -1
  193. package/dist/models/factory-integration.js +1 -1
  194. package/dist/models/factory-integration.js.map +1 -1
  195. package/dist/node_modules/@evalops/contracts/dist/index.d.ts +3 -3
  196. package/dist/node_modules/@evalops/contracts/dist/index.js +2 -2
  197. package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
  198. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +1182 -14
  199. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -1
  200. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js +450 -1
  201. package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -1
  202. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  203. package/dist/node_modules/@evalops/tui/package.json +1 -1
  204. package/dist/oauth/connectors.d.ts +2 -2
  205. package/dist/oauth/connectors.d.ts.map +1 -1
  206. package/dist/oauth/connectors.js +3 -5
  207. package/dist/oauth/connectors.js.map +1 -1
  208. package/dist/oauth/github-copilot.d.ts +1 -1
  209. package/dist/oauth/github-copilot.js +1 -1
  210. package/dist/oauth/github-copilot.js.map +1 -1
  211. package/dist/oauth/index.d.ts +10 -8
  212. package/dist/oauth/index.d.ts.map +1 -1
  213. package/dist/oauth/index.js +54 -31
  214. package/dist/oauth/index.js.map +1 -1
  215. package/dist/oauth/openai.d.ts +1 -1
  216. package/dist/oauth/openai.js +2 -2
  217. package/dist/oauth/openai.js.map +1 -1
  218. package/dist/platform/a2a-completion-audit.d.ts +41 -0
  219. package/dist/platform/a2a-completion-audit.d.ts.map +1 -0
  220. package/dist/platform/a2a-completion-audit.js +177 -0
  221. package/dist/platform/a2a-completion-audit.js.map +1 -0
  222. package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
  223. package/dist/platform/a2a-task-ledger.js +17 -0
  224. package/dist/platform/a2a-task-ledger.js.map +1 -1
  225. package/dist/platform/a2a-telemetry-inspect.d.ts +58 -0
  226. package/dist/platform/a2a-telemetry-inspect.d.ts.map +1 -0
  227. package/dist/platform/a2a-telemetry-inspect.js +224 -0
  228. package/dist/platform/a2a-telemetry-inspect.js.map +1 -0
  229. package/dist/platform/agent-registry-client.d.ts +8 -0
  230. package/dist/platform/agent-registry-client.d.ts.map +1 -1
  231. package/dist/platform/agent-registry-client.js +9 -1
  232. package/dist/platform/agent-registry-client.js.map +1 -1
  233. package/dist/providers/api-keys.d.ts +2 -2
  234. package/dist/providers/api-keys.js +2 -2
  235. package/dist/providers/api-keys.js.map +1 -1
  236. package/dist/providers/auth.d.ts +3 -6
  237. package/dist/providers/auth.d.ts.map +1 -1
  238. package/dist/providers/auth.js +1 -40
  239. package/dist/providers/auth.js.map +1 -1
  240. package/dist/rpc/index.d.ts +2 -2
  241. package/dist/rpc/index.js +2 -2
  242. package/dist/rpc/index.js.map +1 -1
  243. package/dist/rpc/rpc-types.d.ts +1 -1
  244. package/dist/rpc/rpc-types.js +1 -1
  245. package/dist/rpc/rpc-types.js.map +1 -1
  246. package/dist/safety/nested-agent-guard.js +1 -1
  247. package/dist/safety/nested-agent-guard.js.map +1 -1
  248. package/dist/safety/policy.d.ts +2 -2
  249. package/dist/safety/policy.js +2 -2
  250. package/dist/safety/policy.js.map +1 -1
  251. package/dist/safety/validators/network-policy-validator.d.ts +8 -0
  252. package/dist/safety/validators/network-policy-validator.d.ts.map +1 -1
  253. package/dist/safety/validators/network-policy-validator.js +29 -4
  254. package/dist/safety/validators/network-policy-validator.js.map +1 -1
  255. package/dist/sandbox/local-sandbox.d.ts +1 -1
  256. package/dist/sandbox/local-sandbox.js +1 -1
  257. package/dist/sandbox/local-sandbox.js.map +1 -1
  258. package/dist/server/app-context.d.ts +2 -0
  259. package/dist/server/app-context.d.ts.map +1 -1
  260. package/dist/server/app-context.js.map +1 -1
  261. package/dist/server/handlers/attachments.d.ts.map +1 -1
  262. package/dist/server/handlers/attachments.js +1 -0
  263. package/dist/server/handlers/attachments.js.map +1 -1
  264. package/dist/server/handlers/models.d.ts.map +1 -1
  265. package/dist/server/handlers/models.js +3 -1
  266. package/dist/server/handlers/models.js.map +1 -1
  267. package/dist/server/handlers/session-attachments.d.ts.map +1 -1
  268. package/dist/server/handlers/session-attachments.js +2 -0
  269. package/dist/server/handlers/session-attachments.js.map +1 -1
  270. package/dist/server/handlers/sessions.js +1 -1
  271. package/dist/server/handlers/sessions.js.map +1 -1
  272. package/dist/server/handlers/status.d.ts +2 -0
  273. package/dist/server/handlers/status.d.ts.map +1 -1
  274. package/dist/server/handlers/status.js +3 -2
  275. package/dist/server/handlers/status.js.map +1 -1
  276. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  277. package/dist/server/headless-runtime-service.js +32 -3
  278. package/dist/server/headless-runtime-service.js.map +1 -1
  279. package/dist/server/hosted-session-manager.d.ts +2 -0
  280. package/dist/server/hosted-session-manager.d.ts.map +1 -1
  281. package/dist/server/hosted-session-manager.js +9 -0
  282. package/dist/server/hosted-session-manager.js.map +1 -1
  283. package/dist/server/model-selection.d.ts.map +1 -1
  284. package/dist/server/model-selection.js +9 -1
  285. package/dist/server/model-selection.js.map +1 -1
  286. package/dist/server/rate-limiter.d.ts +1 -1
  287. package/dist/server/rate-limiter.js +1 -1
  288. package/dist/server/rate-limiter.js.map +1 -1
  289. package/dist/server/router.d.ts +2 -2
  290. package/dist/server/router.js.map +1 -1
  291. package/dist/server/session-serialization.d.ts +9 -9
  292. package/dist/server/session-serialization.js +15 -15
  293. package/dist/server/session-serialization.js.map +1 -1
  294. package/dist/session/manager.d.ts +5 -0
  295. package/dist/session/manager.d.ts.map +1 -1
  296. package/dist/session/manager.js +56 -8
  297. package/dist/session/manager.js.map +1 -1
  298. package/dist/session/session-catalog.d.ts +2 -0
  299. package/dist/session/session-catalog.d.ts.map +1 -1
  300. package/dist/session/session-catalog.js +6 -0
  301. package/dist/session/session-catalog.js.map +1 -1
  302. package/dist/session/session-context.d.ts +2 -0
  303. package/dist/session/session-context.d.ts.map +1 -1
  304. package/dist/session/session-context.js +15 -0
  305. package/dist/session/session-context.js.map +1 -1
  306. package/dist/session/types.d.ts +7 -0
  307. package/dist/session/types.d.ts.map +1 -1
  308. package/dist/session/types.js.map +1 -1
  309. package/dist/session/wire-format.generated.d.ts +1 -0
  310. package/dist/session/wire-format.generated.d.ts.map +1 -1
  311. package/dist/session/wire-format.generated.js +1 -0
  312. package/dist/session/wire-format.generated.js.map +1 -1
  313. package/dist/shared-memory/contract.d.ts +4 -4
  314. package/dist/shared-memory/contract.js +2 -2
  315. package/dist/shared-memory/contract.js.map +1 -1
  316. package/dist/telemetry/index.d.ts +2 -2
  317. package/dist/telemetry/index.d.ts.map +1 -1
  318. package/dist/telemetry/index.js +2 -2
  319. package/dist/telemetry/index.js.map +1 -1
  320. package/dist/telemetry/maestro-event-bus.d.ts +57 -0
  321. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  322. package/dist/telemetry/maestro-event-bus.js +59 -1
  323. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  324. package/dist/telemetry/maestro-event-catalog.d.ts +17 -1
  325. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  326. package/dist/telemetry/maestro-event-catalog.js +24 -0
  327. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  328. package/dist/telemetry/mcp-beacon.d.ts +2 -0
  329. package/dist/telemetry/mcp-beacon.d.ts.map +1 -1
  330. package/dist/telemetry/mcp-beacon.js +15 -0
  331. package/dist/telemetry/mcp-beacon.js.map +1 -1
  332. package/dist/telemetry/metrics.d.ts +62 -0
  333. package/dist/telemetry/metrics.d.ts.map +1 -1
  334. package/dist/telemetry/metrics.js +84 -0
  335. package/dist/telemetry/metrics.js.map +1 -1
  336. package/dist/telemetry.d.ts +44 -0
  337. package/dist/telemetry.d.ts.map +1 -1
  338. package/dist/telemetry.js +84 -2
  339. package/dist/telemetry.js.map +1 -1
  340. package/dist/theme/theme-loader.js +2 -2
  341. package/dist/theme/theme-loader.js.map +1 -1
  342. package/dist/theme/theme-schema.json +2 -2
  343. package/dist/theme/theme.d.ts +1 -1
  344. package/dist/theme/theme.js.map +1 -1
  345. package/dist/tools/background/task-types.d.ts +1 -1
  346. package/dist/tools/extract-document.d.ts +1 -0
  347. package/dist/tools/extract-document.d.ts.map +1 -1
  348. package/dist/tools/extract-document.js +2 -1
  349. package/dist/tools/extract-document.js.map +1 -1
  350. package/dist/tools/index.d.ts +55 -55
  351. package/dist/tools/index.js +1 -1
  352. package/dist/tools/index.js.map +1 -1
  353. package/dist/tools/tool-dsl.d.ts +1 -1
  354. package/dist/tools/tool-dsl.js +1 -1
  355. package/dist/tools/tool-dsl.js.map +1 -1
  356. package/dist/utils/document-extractor.d.ts +1 -0
  357. package/dist/utils/document-extractor.d.ts.map +1 -1
  358. package/dist/utils/document-extractor.js +320 -40
  359. package/dist/utils/document-extractor.js.map +1 -1
  360. package/dist/utils/logger.d.ts +1 -1
  361. package/dist/utils/logger.js +1 -1
  362. package/dist/utils/logger.js.map +1 -1
  363. package/dist/version.json +2 -2
  364. package/dist/web-server.d.ts +1 -1
  365. package/dist/web-server.d.ts.map +1 -1
  366. package/dist/web-server.js +12 -8
  367. package/dist/web-server.js.map +1 -1
  368. package/package.json +4 -2
  369. package/dist/oauth/anthropic.d.ts +0 -17
  370. package/dist/oauth/anthropic.d.ts.map +0 -1
  371. package/dist/oauth/anthropic.js +0 -81
  372. package/dist/oauth/anthropic.js.map +0 -1
  373. package/dist/providers/anthropic-auth.d.ts +0 -75
  374. package/dist/providers/anthropic-auth.d.ts.map +0 -1
  375. package/dist/providers/anthropic-auth.js +0 -221
  376. package/dist/providers/anthropic-auth.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MCP Client Manager - Model Context Protocol integration.\n *\n * This module manages connections to MCP (Model Context Protocol) servers,\n * which provide extended capabilities to the agent through a standardized\n * interface. MCP servers can expose:\n *\n * - **Tools**: Functions the agent can call (e.g., database queries, APIs)\n * - **Resources**: Data the agent can read (e.g., files, configurations)\n * - **Prompts**: Pre-defined prompt templates\n *\n * ## Architecture\n *\n * The McpClientManager maintains connections to multiple MCP servers\n * simultaneously. Each server can use either:\n * - **Stdio transport**: Spawns a subprocess, communicates via stdin/stdout\n * - **SSE transport**: Connects to HTTP server using Server-Sent Events\n *\n * ## Security\n *\n * - Environment variables are NOT passed to MCP server subprocesses\n * - Only essential variables (PATH, HOME, USER, SHELL, TERM) are included\n * - Server-specific env vars must be explicitly configured\n *\n * ## Events\n *\n * The manager emits events for monitoring:\n * - `connected`: Server successfully connected\n * - `disconnected`: Server disconnected\n * - `error`: Connection or operation error\n * - `tools_changed`: Server's tool list updated\n * - `resources_changed`: Server's resource list updated\n * - `prompts_changed`: Server's prompt list updated\n * - `progress`: Progress update from long-running operations\n * - `log`: Log message from server\n */\n\nimport { execFile } from \"node:child_process\";\nimport { EventEmitter } from \"node:events\";\nimport { promisify } from \"node:util\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { Transport } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport {\n\tElicitRequestSchema,\n\tLoggingMessageNotificationSchema,\n\ttype Prompt as McpPrompt,\n\ttype Tool as McpTool,\n\tProgressNotificationSchema,\n\tPromptListChangedNotificationSchema,\n\tResourceListChangedNotificationSchema,\n\ttype ServerCapabilities,\n\tToolListChangedNotificationSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { getPackageVersion } from \"../package-metadata.js\";\nimport {\n\temitMcpConnectionBeacon,\n\temitMcpToolUsageBeacon,\n} from \"../telemetry/mcp-beacon.js\";\nimport { parseCommandArguments } from \"../tools/shell-utils.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { getHomeDir } from \"../utils/path-expansion.js\";\nimport {\n\tbuildMcpElicitationToolCallId,\n\tgetCurrentMcpClientToolService,\n\tnormalizeMcpElicitationArgs,\n\tparseMcpElicitationClientToolResult,\n} from \"./elicitation.js\";\nimport {\n\tgetMcpRemoteHost,\n\tgetOfficialMcpRegistryMatch,\n} from \"./official-registry.js\";\nimport { getProjectMcpServerApprovalStatus } from \"./project-approvals.js\";\nimport type {\n\tMcpAuthPresetConfig,\n\tMcpAuthPresetStatus,\n\tMcpConfig,\n\tMcpManagerStatus,\n\tMcpProjectApprovalStatus,\n\tMcpPromptDefinition,\n\tMcpServerConfig,\n\tMcpServerStatus,\n\tMcpToolParallelSafety,\n} from \"./types.js\";\nimport { ensureMcpWorkspaceTrusted } from \"./workspace-trust.js\";\n\nconst logger = createLogger(\"mcp:manager\");\nconst execFileAsync = promisify(execFile);\n\n/**\n * Result from calling an MCP tool.\n * Content can be text, binary data, or other MIME types.\n */\nexport interface McpToolCallResult {\n\tcontent: Array<{\n\t\ttype: string;\n\t\ttext?: string;\n\t\tdata?: string;\n\t\tmimeType?: string;\n\t}>;\n\tstructuredContent?: unknown;\n\tisError?: boolean;\n}\n\n// Connection timeout for initial server handshake\nconst DEFAULT_TIMEOUT_MS = 30000;\n\n// Delay between reconnection attempts (doubles each retry)\nconst DEFAULT_RECONNECT_DELAY_MS = 5000;\n\n// Maximum number of automatic reconnection attempts\nconst MAX_RECONNECT_ATTEMPTS = 3;\nconst PARALLEL_SAFETY_EXPERIMENTAL_KEYS = [\n\t\"evalops.maestro.parallelSafety\",\n\t\"evalops.maestro/parallelSafety\",\n\t\"maestro.parallelSafety\",\n];\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n\treturn value && typeof value === \"object\" && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: undefined;\n}\n\nfunction positiveInteger(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value > 0\n\t\t? Math.floor(value)\n\t\t: undefined;\n}\n\nfunction serverParallelSafetyAdvertisement(\n\tcapabilities: ServerCapabilities | undefined,\n): Record<string, unknown> | undefined {\n\tconst experimental = asRecord(capabilities?.experimental);\n\tif (!experimental) {\n\t\treturn undefined;\n\t}\n\tfor (const key of PARALLEL_SAFETY_EXPERIMENTAL_KEYS) {\n\t\tconst advertisement = asRecord(experimental[key]);\n\t\tif (advertisement) {\n\t\t\treturn advertisement;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction resolveToolParallelSafety({\n\tconfig,\n\tserverCapabilities,\n\ttool,\n}: {\n\tconfig: McpServerConfig;\n\tserverCapabilities?: ServerCapabilities;\n\ttool: McpTool;\n}): McpToolParallelSafety {\n\tconst advertisement = serverParallelSafetyAdvertisement(serverCapabilities);\n\tconst advertisedTools = asRecord(advertisement?.tools);\n\tconst advertisedTool =\n\t\tasRecord(advertisedTools?.[tool.name]) ?? asRecord(advertisedTools?.[\"*\"]);\n\tconst toolSupportsParallel = advertisedTool?.supportsParallelToolCalls;\n\tconst advertisedSupports =\n\t\ttoolSupportsParallel === true ||\n\t\t(toolSupportsParallel !== false &&\n\t\t\tadvertisement?.supportsParallelToolCalls === true);\n\tconst maxConcurrency =\n\t\tpositiveInteger(advertisedTool?.maxConcurrency) ??\n\t\tpositiveInteger(advertisement?.maxConcurrency);\n\n\tif (config.supportsParallelToolCalls === true) {\n\t\treturn {\n\t\t\tsupportsParallelToolCalls: true,\n\t\t\tprovenance: \"static_config\",\n\t\t\t...(maxConcurrency ? { maxConcurrency } : {}),\n\t\t\t...(advertisedTool?.readOnlyHint === true ? { readOnlyHint: true } : {}),\n\t\t};\n\t}\n\tif (advertisedSupports) {\n\t\treturn {\n\t\t\tsupportsParallelToolCalls: true,\n\t\t\tprovenance: \"server_capability\",\n\t\t\t...(maxConcurrency ? { maxConcurrency } : {}),\n\t\t\t...(advertisedTool?.readOnlyHint === true ? { readOnlyHint: true } : {}),\n\t\t};\n\t}\n\treturn {\n\t\tsupportsParallelToolCalls: false,\n\t\tprovenance: \"none\",\n\t\t...(advertisedTool?.readOnlyHint === true ? { readOnlyHint: true } : {}),\n\t};\n}\n\nfunction resolveParallelSafetyByTool({\n\tconfig,\n\tserverCapabilities,\n\ttools,\n}: {\n\tconfig: McpServerConfig;\n\tserverCapabilities?: ServerCapabilities;\n\ttools: McpTool[];\n}): Map<string, McpToolParallelSafety> {\n\treturn new Map(\n\t\ttools.map((tool) => [\n\t\t\ttool.name,\n\t\t\tresolveToolParallelSafety({\n\t\t\t\tconfig,\n\t\t\t\tserverCapabilities,\n\t\t\t\ttool,\n\t\t\t}),\n\t\t]),\n\t);\n}\n\nfunction summarizeServerParallelSafety(\n\tconfig: McpServerConfig,\n\tconnected: ConnectedServer | undefined,\n): McpServerStatus[\"parallelSafety\"] {\n\tif (!connected) {\n\t\treturn {\n\t\t\tsupportsParallelToolCalls: config.supportsParallelToolCalls === true,\n\t\t\tprovenance:\n\t\t\t\tconfig.supportsParallelToolCalls === true ? \"static_config\" : \"none\",\n\t\t};\n\t}\n\tconst values = [...connected.parallelSafetyByTool.values()];\n\tconst supportsParallelToolCalls = values.some(\n\t\t(value) => value.supportsParallelToolCalls === true,\n\t);\n\tconst staticConfig = values.some(\n\t\t(value) => value.provenance === \"static_config\",\n\t);\n\tconst serverCapability = values.some(\n\t\t(value) => value.provenance === \"server_capability\",\n\t);\n\tconst maxConcurrencyValues = values\n\t\t.map((value) => value.maxConcurrency)\n\t\t.filter((value): value is number => typeof value === \"number\");\n\treturn {\n\t\tsupportsParallelToolCalls,\n\t\tprovenance: staticConfig\n\t\t\t? \"static_config\"\n\t\t\t: serverCapability\n\t\t\t\t? \"server_capability\"\n\t\t\t\t: \"none\",\n\t\t...(maxConcurrencyValues.length > 0\n\t\t\t? { maxConcurrency: Math.min(...maxConcurrencyValues) }\n\t\t\t: {}),\n\t};\n}\n\nfunction arraysEqual(\n\tleft: readonly string[] | undefined,\n\tright: readonly string[] | undefined,\n): boolean {\n\tif (left === right) {\n\t\treturn true;\n\t}\n\tif (!left || !right || left.length !== right.length) {\n\t\treturn false;\n\t}\n\treturn left.every((value, index) => value === right[index]);\n}\n\nfunction recordsEqual(\n\tleft: Record<string, string> | undefined,\n\tright: Record<string, string> | undefined,\n): boolean {\n\tif (left === right) {\n\t\treturn true;\n\t}\n\tif (!left || !right) {\n\t\treturn false;\n\t}\n\tconst leftEntries = Object.entries(left).sort(([leftKey], [rightKey]) =>\n\t\tleftKey.localeCompare(rightKey),\n\t);\n\tconst rightEntries = Object.entries(right).sort(([leftKey], [rightKey]) =>\n\t\tleftKey.localeCompare(rightKey),\n\t);\n\tif (leftEntries.length !== rightEntries.length) {\n\t\treturn false;\n\t}\n\treturn leftEntries.every(\n\t\t([leftKey, leftValue], index) =>\n\t\t\tleftKey === rightEntries[index]?.[0] &&\n\t\t\tleftValue === rightEntries[index]?.[1],\n\t);\n}\n\ninterface ResolvedRemoteAuthConfig {\n\theaders?: Record<string, string>;\n\theadersHelper?: string;\n\tpreset?: McpAuthPresetConfig;\n}\n\nfunction buildAuthPresetMap(\n\tauthPresets: readonly McpAuthPresetConfig[],\n): Map<string, McpAuthPresetConfig> {\n\treturn new Map(\n\t\t(authPresets ?? []).map((authPreset) => [authPreset.name, authPreset]),\n\t);\n}\n\nfunction resolveRemoteAuthConfig(\n\tconfig: McpServerConfig,\n\tauthPresetMap: ReadonlyMap<string, McpAuthPresetConfig>,\n): ResolvedRemoteAuthConfig {\n\tif (config.transport !== \"http\" && config.transport !== \"sse\") {\n\t\treturn {\n\t\t\theaders: config.headers,\n\t\t\theadersHelper: config.headersHelper,\n\t\t};\n\t}\n\n\tconst preset = config.authPreset\n\t\t? authPresetMap.get(config.authPreset)\n\t\t: undefined;\n\tconst headers = {\n\t\t...(preset?.headers ?? {}),\n\t\t...(config.headers ?? {}),\n\t};\n\n\treturn {\n\t\theaders: Object.keys(headers).length > 0 ? headers : undefined,\n\t\theadersHelper: config.headersHelper ?? preset?.headersHelper,\n\t\tpreset,\n\t};\n}\n\nfunction buildComparableServerConfig(\n\tconfig: McpServerConfig,\n\tauthPresetMap: ReadonlyMap<string, McpAuthPresetConfig>,\n): McpServerConfig {\n\tconst resolvedAuth = resolveRemoteAuthConfig(config, authPresetMap);\n\treturn {\n\t\t...config,\n\t\theaders: resolvedAuth.headers,\n\t\theadersHelper: resolvedAuth.headersHelper,\n\t};\n}\n\nfunction serverConfigsEqual(\n\tleft: McpServerConfig,\n\tright: McpServerConfig,\n): boolean {\n\treturn (\n\t\tleft.name === right.name &&\n\t\tleft.transport === right.transport &&\n\t\tleft.command === right.command &&\n\t\tarraysEqual(left.args, right.args) &&\n\t\trecordsEqual(left.env, right.env) &&\n\t\tleft.cwd === right.cwd &&\n\t\tleft.url === right.url &&\n\t\trecordsEqual(left.headers, right.headers) &&\n\t\tleft.headersHelper === right.headersHelper &&\n\t\tleft.enabled === right.enabled &&\n\t\tleft.disabled === right.disabled &&\n\t\tleft.timeout === right.timeout &&\n\t\tleft.scope === right.scope\n\t);\n}\n\nfunction buildProjectApprovalMap(\n\tconfig: McpConfig,\n): Map<string, McpProjectApprovalStatus> {\n\tconst approvals = new Map<string, McpProjectApprovalStatus>();\n\tif (!config.projectRoot) {\n\t\treturn approvals;\n\t}\n\tfor (const server of config.servers ?? []) {\n\t\tconst approval = getProjectMcpServerApprovalStatus({\n\t\t\tprojectRoot: config.projectRoot,\n\t\t\tserver,\n\t\t\tauthPresets: config.authPresets ?? [],\n\t\t});\n\t\tif (approval) {\n\t\t\tapprovals.set(server.name, approval);\n\t\t}\n\t}\n\treturn approvals;\n}\n\nfunction canConnectServer(\n\tserver: McpServerConfig,\n\tapprovalMap: ReadonlyMap<string, McpProjectApprovalStatus>,\n): boolean {\n\tconst approval = approvalMap.get(server.name);\n\treturn approval !== \"pending\" && approval !== \"denied\";\n}\n\nfunction buildSafeEnv(\n\texplicitEnv?: Record<string, string>,\n\textraEnv?: Record<string, string>,\n): Record<string, string> {\n\tconst safeBaseEnv: Record<string, string> = {};\n\tif (process.env.PATH) safeBaseEnv.PATH = process.env.PATH;\n\tif (process.env.HOME) {\n\t\tsafeBaseEnv.HOME = process.env.HOME;\n\t} else {\n\t\tconst homeDir = getHomeDir();\n\t\tif (homeDir) safeBaseEnv.HOME = homeDir;\n\t}\n\tif (process.env.USER) {\n\t\tsafeBaseEnv.USER = process.env.USER;\n\t} else if (process.env.USERNAME) {\n\t\tsafeBaseEnv.USER = process.env.USERNAME;\n\t}\n\tif (process.env.SHELL) safeBaseEnv.SHELL = process.env.SHELL;\n\tif (process.env.TERM) safeBaseEnv.TERM = process.env.TERM;\n\n\treturn Object.fromEntries(\n\t\tObject.entries({ ...safeBaseEnv, ...explicitEnv, ...extraEnv }).filter(\n\t\t\t([, value]) => value !== undefined,\n\t\t),\n\t) as Record<string, string>;\n}\n\nasync function resolveHeadersHelper(\n\tconfig: McpServerConfig,\n\theadersHelper = config.headersHelper,\n): Promise<Record<string, string> | undefined> {\n\tif (!headersHelper) {\n\t\treturn undefined;\n\t}\n\n\tlet command: string[];\n\ttry {\n\t\tcommand = parseCommandArguments(headersHelper);\n\t} catch (error) {\n\t\tlogger.warn(\"Invalid MCP headers helper command\", {\n\t\t\tname: config.name,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tif (command.length === 0) {\n\t\tlogger.warn(\"Empty MCP headers helper command\", { name: config.name });\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst { stdout } = await execFileAsync(command[0]!, command.slice(1), {\n\t\t\tcwd: config.cwd,\n\t\t\tenv: buildSafeEnv(config.env, {\n\t\t\t\tMAESTRO_MCP_SERVER_NAME: config.name,\n\t\t\t\tMAESTRO_MCP_SERVER_URL: config.url ?? \"\",\n\t\t\t}),\n\t\t\ttimeout: config.timeout ?? DEFAULT_TIMEOUT_MS,\n\t\t\tmaxBuffer: 1024 * 1024,\n\t\t\tencoding: \"utf8\",\n\t\t\twindowsHide: true,\n\t\t});\n\n\t\tconst trimmed = stdout.trim();\n\t\tif (!trimmed) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst parsed = JSON.parse(trimmed) as unknown;\n\t\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\t\tthrow new Error(\"headersHelper must return a JSON object\");\n\t\t}\n\n\t\tconst headers: Record<string, string> = {};\n\t\tfor (const [key, value] of Object.entries(parsed)) {\n\t\t\tif (typeof value !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`headersHelper must return string values for key \"${key}\"`,\n\t\t\t\t);\n\t\t\t}\n\t\t\theaders[key] = value;\n\t\t}\n\n\t\treturn headers;\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to resolve MCP headers helper\", {\n\t\t\tname: config.name,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t});\n\t\treturn undefined;\n\t}\n}\n\nasync function buildRemoteRequestInit(\n\tconfig: McpServerConfig,\n\tauthPresetMap: ReadonlyMap<string, McpAuthPresetConfig>,\n): Promise<RequestInit | undefined> {\n\tconst resolvedAuth = resolveRemoteAuthConfig(config, authPresetMap);\n\tconst helperHeaders = await resolveHeadersHelper(\n\t\tconfig,\n\t\tresolvedAuth.headersHelper,\n\t);\n\tconst headers = {\n\t\t...(resolvedAuth.headers ?? {}),\n\t\t...(helperHeaders ?? {}),\n\t};\n\n\treturn Object.keys(headers).length > 0 ? { headers } : undefined;\n}\n\n/**\n * Internal state for a connected MCP server.\n * Tracks the client, transport, and cached capabilities.\n */\ninterface ConnectedServer {\n\t/** Original configuration */\n\tconfig: McpServerConfig;\n\t/** MCP client instance */\n\tclient: Client;\n\t/** Transport layer (stdio or SSE) */\n\ttransport: Transport;\n\t/** Cached list of available tools */\n\ttools: McpTool[];\n\t/** Cached list of resource URIs */\n\tresources: string[];\n\t/** Cached list of prompt names */\n\tprompts: string[];\n\t/** Cached prompt metadata for structured prompt UIs */\n\tpromptDetails: McpPromptDefinition[];\n\t/** Per-tool parallel safety resolved from static config or server handshake. */\n\tparallelSafetyByTool: ReadonlyMap<string, McpToolParallelSafety>;\n\t/** Counter for reconnection attempts */\n\treconnectAttempts: number;\n}\n\nfunction normalizePromptDefinition(prompt: McpPrompt): McpPromptDefinition {\n\treturn {\n\t\tname: prompt.name,\n\t\ttitle: prompt.title,\n\t\tdescription: prompt.description,\n\t\targuments:\n\t\t\tprompt.arguments?.map((argument) => ({\n\t\t\t\tname: argument.name,\n\t\t\t\tdescription: argument.description,\n\t\t\t\trequired: argument.required,\n\t\t\t})) ?? [],\n\t};\n}\n\nfunction getPromptNames(\n\tpromptDetails: readonly McpPromptDefinition[],\n): string[] {\n\treturn promptDetails.map((prompt) => prompt.name);\n}\n\n/**\n * Manager for MCP (Model Context Protocol) server connections.\n *\n * Handles connection lifecycle, tool discovery, and message routing\n * for multiple MCP servers. Supports automatic reconnection on failure.\n */\nexport class McpClientManager extends EventEmitter {\n\t/** Map of server name to connected server state */\n\tprivate servers = new Map<string, ConnectedServer>();\n\n\t/** Map of server name to in-flight connection promise (prevents duplicates) */\n\tprivate connecting = new Map<string, Promise<void>>();\n\n\t/** Map of server name to pending reconnect timer */\n\tprivate reconnectTimers = new Map<string, ReturnType<typeof setTimeout>>();\n\n\t/** Last connection or runtime error reported for each configured server */\n\tprivate lastErrors = new Map<string, string>();\n\n\t/** Current configuration */\n\tprivate config: McpConfig = { servers: [], authPresets: [] };\n\n\t/**\n\t * Apply a new configuration, connecting/disconnecting servers as needed.\n\t *\n\t * Compares old and new configs to determine which servers to add or remove,\n\t * then performs the necessary connect/disconnect operations.\n\t *\n\t * @param config - New MCP configuration with server list\n\t */\n\tasync configure(config: McpConfig): Promise<void> {\n\t\tconst nextConfig: McpConfig = {\n\t\t\tservers: config.servers ?? [],\n\t\t\tauthPresets: config.authPresets ?? [],\n\t\t\tprojectRoot: config.projectRoot,\n\t\t\ttrustedWorkspaces: config.trustedWorkspaces,\n\t\t\tworkspaceTrustDefault: config.workspaceTrustDefault,\n\t\t\tenvLimits: config.envLimits,\n\t\t};\n\t\tconst previousAuthPresetMap = buildAuthPresetMap(this.config.authPresets);\n\t\tconst nextAuthPresetMap = buildAuthPresetMap(nextConfig.authPresets);\n\t\tconst previousApprovalMap = buildProjectApprovalMap(this.config);\n\t\tconst nextApprovalMap = buildProjectApprovalMap(nextConfig);\n\t\tconst previousServers = new Map(\n\t\t\tthis.config.servers.map((server) => [server.name, server]),\n\t\t);\n\t\tconst oldServerNames = new Set(previousServers.keys());\n\t\tconst newServerNames = new Set(nextConfig.servers.map((s) => s.name));\n\n\t\t// Find servers to remove (in old but not in new)\n\t\tconst toRemove = [...oldServerNames].filter((n) => !newServerNames.has(n));\n\n\t\t// Reconnect servers whose config changed in place.\n\t\tconst toReconnect = nextConfig.servers.filter((server) => {\n\t\t\tconst previous = previousServers.get(server.name);\n\t\t\treturn (\n\t\t\t\tprevious &&\n\t\t\t\t(!serverConfigsEqual(\n\t\t\t\t\tbuildComparableServerConfig(previous, previousAuthPresetMap),\n\t\t\t\t\tbuildComparableServerConfig(server, nextAuthPresetMap),\n\t\t\t\t) ||\n\t\t\t\t\tcanConnectServer(previous, previousApprovalMap) !==\n\t\t\t\t\t\tcanConnectServer(server, nextApprovalMap))\n\t\t\t);\n\t\t});\n\t\tconst reconnectNames = new Set(toReconnect.map((server) => server.name));\n\n\t\t// Find servers to add (in new but not in old)\n\t\tconst toAdd = nextConfig.servers.filter(\n\t\t\t(server) => !oldServerNames.has(server.name),\n\t\t);\n\t\tconst toAddNames = new Set(toAdd.map((server) => server.name));\n\n\t\tthis.config = nextConfig;\n\n\t\t// Disconnect removed servers (don't wait for success)\n\t\tawait Promise.allSettled(\n\t\t\ttoRemove.map((name) => this.disconnectServer(name)),\n\t\t);\n\n\t\t// Disconnect and reconnect updated servers so in-place edits take effect.\n\t\tawait Promise.allSettled(\n\t\t\ttoReconnect.map(async (server) => {\n\t\t\t\tconst pendingConnection = this.connecting.get(server.name);\n\t\t\t\tif (pendingConnection) {\n\t\t\t\t\tawait Promise.allSettled([pendingConnection]);\n\t\t\t\t}\n\t\t\t\tawait this.disconnectServer(server.name);\n\t\t\t\tif (canConnectServer(server, nextApprovalMap)) {\n\t\t\t\t\tawait this.connectServer(server);\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\n\t\t// Connect new servers and unchanged servers that were explicitly disconnected.\n\t\tawait Promise.allSettled(\n\t\t\tnextConfig.servers\n\t\t\t\t.filter(\n\t\t\t\t\t(server) =>\n\t\t\t\t\t\t(toAddNames.has(server.name) ||\n\t\t\t\t\t\t\t(oldServerNames.has(server.name) &&\n\t\t\t\t\t\t\t\t!reconnectNames.has(server.name) &&\n\t\t\t\t\t\t\t\t!this.servers.has(server.name))) &&\n\t\t\t\t\t\tcanConnectServer(server, nextApprovalMap),\n\t\t\t\t)\n\t\t\t\t.map((server) => this.connectServer(server)),\n\t\t);\n\t}\n\n\t/**\n\t * Connect to all configured servers.\n\t * Non-blocking - returns after connection attempts are started.\n\t */\n\tasync connectAll(): Promise<void> {\n\t\tconst approvalMap = buildProjectApprovalMap(this.config);\n\t\tconst promises = this.config.servers\n\t\t\t.filter((server) => canConnectServer(server, approvalMap))\n\t\t\t.map((server) => this.connectServer(server));\n\t\tawait Promise.allSettled(promises);\n\t}\n\n\t/**\n\t * Disconnect from all servers and cancel pending reconnects.\n\t */\n\tasync disconnectAll(): Promise<void> {\n\t\t// Clear all pending reconnect timers first\n\t\tfor (const [name, timer] of this.reconnectTimers) {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t\tthis.reconnectTimers.clear();\n\n\t\t// Disconnect all servers\n\t\tconst promises = Array.from(this.servers.keys()).map((name) =>\n\t\t\tthis.disconnectServer(name),\n\t\t);\n\t\tawait Promise.allSettled(promises);\n\t}\n\n\t/**\n\t * Internal: Connect to a single server.\n\t * Handles deduplication of concurrent connection attempts.\n\t */\n\tprivate async connectServer(config: McpServerConfig): Promise<void> {\n\t\tconst { name } = config;\n\n\t\t// Avoid duplicate connections\n\t\tif (this.servers.has(name)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check for in-flight connection (prevent race conditions)\n\t\tconst existing = this.connecting.get(name);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\n\t\t// Track this connection attempt\n\t\tconst task = this.doConnect(config);\n\t\tthis.connecting.set(name, task);\n\n\t\ttry {\n\t\t\tawait task;\n\t\t} finally {\n\t\t\tthis.connecting.delete(name);\n\t\t}\n\t}\n\n\t/**\n\t * Internal: Perform the actual connection to an MCP server.\n\t *\n\t * Creates the appropriate transport (stdio or SSE), establishes connection,\n\t * fetches server capabilities (tools, resources, prompts), and sets up\n\t * notification handlers.\n\t *\n\t * @param config - Server configuration\n\t * @param isReconnect - Whether this is a reconnection attempt\n\t */\n\tprivate async doConnect(\n\t\tconfig: McpServerConfig,\n\t\tisReconnect = false,\n\t): Promise<void> {\n\t\tconst { name, transport: transportType } = config;\n\n\t\ttry {\n\t\t\tlet transport: Transport;\n\n\t\t\t// Create transport based on configuration\n\t\t\tif (transportType === \"http\" || transportType === \"sse\") {\n\t\t\t\t// HTTP/SSE transport - connect to remote server\n\t\t\t\tif (!config.url) {\n\t\t\t\t\tlogger.warn(\"No URL specified for HTTP server\", { name });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst requestInit = await buildRemoteRequestInit(\n\t\t\t\t\tconfig,\n\t\t\t\t\tbuildAuthPresetMap(this.config.authPresets),\n\t\t\t\t);\n\t\t\t\tconst transportOptions = requestInit ? { requestInit } : undefined;\n\n\t\t\t\tif (transportType === \"http\") {\n\t\t\t\t\ttransport = new StreamableHTTPClientTransport(\n\t\t\t\t\t\tnew URL(config.url),\n\t\t\t\t\t\ttransportOptions,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\ttransport = new SSEClientTransport(\n\t\t\t\t\t\tnew URL(config.url),\n\t\t\t\t\t\ttransportOptions,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Stdio transport - spawn subprocess\n\t\t\t\tif (!config.command) {\n\t\t\t\t\tlogger.warn(\"No command specified for server\", { name });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// SECURITY: Only pass essential env vars plus explicit config\n\t\t\t\t// Do NOT pass process.env - this would leak API keys and secrets\n\t\t\t\ttransport = new StdioClientTransport({\n\t\t\t\t\tcommand: config.command,\n\t\t\t\t\targs: config.args,\n\t\t\t\t\tenv: buildSafeEnv(config.env),\n\t\t\t\t\tcwd: config.cwd,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst client = new Client(\n\t\t\t\t{\n\t\t\t\t\tname: \"composer\",\n\t\t\t\t\tversion: \"1.0.0\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\telicitation: {\n\t\t\t\t\t\t\tform: { applyDefaults: true },\n\t\t\t\t\t\t\turl: {},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tclient.setRequestHandler(ElicitRequestSchema, async (request, extra) => {\n\t\t\t\tconst clientToolService = getCurrentMcpClientToolService();\n\t\t\t\tif (!clientToolService) {\n\t\t\t\t\treturn { action: \"cancel\" };\n\t\t\t\t}\n\n\t\t\t\tconst requestId =\n\t\t\t\t\textra.requestId ??\n\t\t\t\t\t(\"elicitationId\" in request.params\n\t\t\t\t\t\t? request.params.elicitationId\n\t\t\t\t\t\t: \"unknown\");\n\t\t\t\tconst toolCallId = buildMcpElicitationToolCallId(name, requestId);\n\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await clientToolService.requestExecution(\n\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\t\"mcp_elicitation\",\n\t\t\t\t\t\tnormalizeMcpElicitationArgs(name, requestId, request.params),\n\t\t\t\t\t\textra.signal,\n\t\t\t\t\t);\n\t\t\t\t\treturn parseMcpElicitationClientToolResult(\n\t\t\t\t\t\tresult.content,\n\t\t\t\t\t\tresult.isError,\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.warn(\"Failed to resolve MCP elicitation request\", {\n\t\t\t\t\t\tname,\n\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t});\n\t\t\t\t\treturn { action: \"cancel\" };\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tawait client.connect(transport, {\n\t\t\t\ttimeout: config.timeout ?? DEFAULT_TIMEOUT_MS,\n\t\t\t});\n\n\t\t\t// Fetch capabilities\n\t\t\tconst tools = await this.fetchTools(client);\n\t\t\tconst resources = await this.fetchResources(client);\n\t\t\tconst promptDetails = await this.fetchPrompts(client);\n\t\t\tconst prompts = getPromptNames(promptDetails);\n\t\t\tconst serverCapabilities = client.getServerCapabilities();\n\t\t\tconst parallelSafetyByTool = resolveParallelSafetyByTool({\n\t\t\t\tconfig,\n\t\t\t\tserverCapabilities,\n\t\t\t\ttools,\n\t\t\t});\n\n\t\t\tthis.servers.set(name, {\n\t\t\t\tconfig,\n\t\t\t\tclient,\n\t\t\t\ttransport,\n\t\t\t\ttools,\n\t\t\t\tresources,\n\t\t\t\tprompts,\n\t\t\t\tpromptDetails,\n\t\t\t\tparallelSafetyByTool,\n\t\t\t\treconnectAttempts: 0,\n\t\t\t});\n\t\t\tthis.lastErrors.delete(name);\n\n\t\t\t// Set up notification handlers after adding to servers map\n\t\t\t// to avoid race condition where notifications arrive before server is tracked\n\t\t\tthis.setupNotificationHandlers(client, name);\n\n\t\t\tthis.emit(\"connected\", { name, tools: tools.length, isReconnect });\n\t\t\tvoid emitMcpConnectionBeacon({\n\t\t\t\tserverName: name,\n\t\t\t\ttransport: transportType,\n\t\t\t\tremoteHost: config.url ? getMcpRemoteHost(config.url) : undefined,\n\t\t\t\ttoolCount: tools.length,\n\t\t\t\tresourceCount: resources.length,\n\t\t\t\tpromptCount: prompts.length,\n\t\t\t\tisReconnect,\n\t\t\t\tclientVersion: getPackageVersion(),\n\t\t\t}).catch(() => undefined);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.lastErrors.set(name, message);\n\t\t\tlogger.error(\n\t\t\t\t\"Failed to connect to server\",\n\t\t\t\terror instanceof Error ? error : new Error(message),\n\t\t\t\t{ name },\n\t\t\t);\n\t\t\tthis.emit(\"error\", { name, error: message });\n\n\t\t\t// Schedule reconnection for non-reconnect attempts\n\t\t\tif (!isReconnect) {\n\t\t\t\tthis.scheduleReconnect(config, 0);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate scheduleReconnect(config: McpServerConfig, attempt: number): void {\n\t\tif (attempt >= MAX_RECONNECT_ATTEMPTS) {\n\t\t\tlogger.warn(\"Max reconnection attempts reached\", { name: config.name });\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear any existing timer for this server\n\t\tconst existingTimer = this.reconnectTimers.get(config.name);\n\t\tif (existingTimer) {\n\t\t\tclearTimeout(existingTimer);\n\t\t}\n\n\t\tconst delay = DEFAULT_RECONNECT_DELAY_MS * 2 ** attempt;\n\t\tlogger.info(\"Scheduling reconnect\", {\n\t\t\tserver: config.name,\n\t\t\tdelayMs: delay,\n\t\t\tattempt: attempt + 1,\n\t\t\tmaxAttempts: MAX_RECONNECT_ATTEMPTS,\n\t\t});\n\n\t\tconst timeoutId = setTimeout(async () => {\n\t\t\tthis.reconnectTimers.delete(config.name);\n\n\t\t\tif (this.servers.has(config.name)) {\n\t\t\t\treturn; // Already reconnected\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait this.doConnect(config, true);\n\t\t\t\t// If doConnect succeeded (server is now connected), we're done\n\t\t\t\tif (!this.servers.has(config.name)) {\n\t\t\t\t\t// Connection failed (doConnect caught the error), schedule retry\n\t\t\t\t\tthis.scheduleReconnect(config, attempt + 1);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Unexpected error, schedule retry\n\t\t\t\tthis.scheduleReconnect(config, attempt + 1);\n\t\t\t}\n\t\t}, delay);\n\n\t\tthis.reconnectTimers.set(config.name, timeoutId);\n\t}\n\n\t/**\n\t * Manually trigger reconnection for a server\n\t */\n\tasync reconnect(name: string): Promise<boolean> {\n\t\tconst config = this.config.servers.find((s) => s.name === name);\n\t\tif (!config) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!canConnectServer(config, buildProjectApprovalMap(this.config))) {\n\t\t\tawait this.disconnectServer(name);\n\t\t\treturn false;\n\t\t}\n\n\t\tawait this.disconnectServer(name);\n\t\tawait this.doConnect(config, true);\n\t\treturn this.servers.has(name);\n\t}\n\n\tprivate async fetchTools(client: Client): Promise<McpTool[]> {\n\t\ttry {\n\t\t\tconst caps = client.getServerCapabilities();\n\t\t\tif (!caps?.tools) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst result = await client.listTools();\n\t\t\treturn result.tools;\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate async fetchResources(client: Client): Promise<string[]> {\n\t\ttry {\n\t\t\tconst caps = client.getServerCapabilities();\n\t\t\tif (!caps?.resources) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst result = await client.listResources();\n\t\t\treturn result.resources.map((r) => r.uri);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate async fetchPrompts(client: Client): Promise<McpPromptDefinition[]> {\n\t\ttry {\n\t\t\tconst caps = client.getServerCapabilities();\n\t\t\tif (!caps?.prompts) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst result = await client.listPrompts();\n\t\t\treturn result.prompts.map(normalizePromptDefinition);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate setupNotificationHandlers(client: Client, serverName: string): void {\n\t\t// Tool list changes - refresh tools when server notifies\n\t\tclient.setNotificationHandler(\n\t\t\tToolListChangedNotificationSchema,\n\t\t\tasync () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst server = this.servers.get(serverName);\n\t\t\t\t\tif (server) {\n\t\t\t\t\t\tserver.tools = await this.fetchTools(client);\n\t\t\t\t\t\tserver.parallelSafetyByTool = resolveParallelSafetyByTool({\n\t\t\t\t\t\t\tconfig: server.config,\n\t\t\t\t\t\t\tserverCapabilities: client.getServerCapabilities(),\n\t\t\t\t\t\t\ttools: server.tools,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.emit(\"tools_changed\", {\n\t\t\t\t\t\t\tname: serverName,\n\t\t\t\t\t\t\ttools: server.tools,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"Failed to refresh tools\",\n\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\t{ serverName },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t// Resource list changes\n\t\tclient.setNotificationHandler(\n\t\t\tResourceListChangedNotificationSchema,\n\t\t\tasync () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst server = this.servers.get(serverName);\n\t\t\t\t\tif (server) {\n\t\t\t\t\t\tserver.resources = await this.fetchResources(client);\n\t\t\t\t\t\tthis.emit(\"resources_changed\", {\n\t\t\t\t\t\t\tname: serverName,\n\t\t\t\t\t\t\tresources: server.resources,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"Failed to refresh resources\",\n\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\t{ serverName },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t// Prompt list changes\n\t\tclient.setNotificationHandler(\n\t\t\tPromptListChangedNotificationSchema,\n\t\t\tasync () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst server = this.servers.get(serverName);\n\t\t\t\t\tif (server) {\n\t\t\t\t\t\tserver.promptDetails = await this.fetchPrompts(client);\n\t\t\t\t\t\tserver.prompts = getPromptNames(server.promptDetails);\n\t\t\t\t\t\tthis.emit(\"prompts_changed\", {\n\t\t\t\t\t\t\tname: serverName,\n\t\t\t\t\t\t\tprompts: server.prompts,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"Failed to refresh prompts\",\n\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\t{ serverName },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t// Progress notifications for long-running operations\n\t\tclient.setNotificationHandler(\n\t\t\tProgressNotificationSchema,\n\t\t\t(notification) => {\n\t\t\t\tthis.emit(\"progress\", {\n\t\t\t\t\tname: serverName,\n\t\t\t\t\tprogressToken: notification.params.progressToken,\n\t\t\t\t\tprogress: notification.params.progress,\n\t\t\t\t\ttotal: notification.params.total,\n\t\t\t\t\tmessage: notification.params.message,\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\n\t\t// Logging messages from MCP servers\n\t\tclient.setNotificationHandler(\n\t\t\tLoggingMessageNotificationSchema,\n\t\t\t(notification) => {\n\t\t\t\tthis.emit(\"log\", {\n\t\t\t\t\tname: serverName,\n\t\t\t\t\tlevel: notification.params.level,\n\t\t\t\t\tlogger: notification.params.logger,\n\t\t\t\t\tdata: notification.params.data,\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\t}\n\n\tprivate async disconnectServer(name: string): Promise<void> {\n\t\t// Clear any pending reconnect timer for this server\n\t\tconst timer = this.reconnectTimers.get(name);\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\tthis.reconnectTimers.delete(name);\n\t\t}\n\n\t\tconst server = this.servers.get(name);\n\t\tif (!server) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait server.client.close();\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Error closing client\", {\n\t\t\t\tname,\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t}\n\n\t\t// Also close the transport to clean up underlying resources\n\t\ttry {\n\t\t\tawait server.transport.close();\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Error closing transport\", {\n\t\t\t\tname,\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t}\n\n\t\tthis.servers.delete(name);\n\t\tthis.emit(\"disconnected\", { name });\n\t}\n\n\tasync callTool(\n\t\tserverName: string,\n\t\ttoolName: string,\n\t\targs: Record<string, unknown>,\n\t): Promise<McpToolCallResult> {\n\t\tconst server = this.servers.get(serverName);\n\t\tif (!server) {\n\t\t\tthrow new Error(`MCP server '${serverName}' not connected`);\n\t\t}\n\t\tawait ensureMcpWorkspaceTrusted({\n\t\t\tconfig: this.config,\n\t\t\tserver: buildComparableServerConfig(\n\t\t\t\tserver.config,\n\t\t\t\tbuildAuthPresetMap(this.config.authPresets),\n\t\t\t),\n\t\t\ttoolName,\n\t\t\tclientToolService: getCurrentMcpClientToolService(),\n\t\t});\n\n\t\tvoid emitMcpToolUsageBeacon({\n\t\t\tserverName,\n\t\t\ttransport: server.config.transport,\n\t\t\tremoteHost: server.config.url\n\t\t\t\t? getMcpRemoteHost(server.config.url)\n\t\t\t\t: undefined,\n\t\t\ttoolName,\n\t\t\tclientVersion: getPackageVersion(),\n\t\t}).catch(() => undefined);\n\n\t\tconst result = await server.client.callTool({\n\t\t\tname: toolName,\n\t\t\targuments: args,\n\t\t});\n\n\t\t// Normalize the result to our interface\n\t\tconst content = Array.isArray(result.content)\n\t\t\t? result.content.map((c: Record<string, unknown>) => ({\n\t\t\t\t\ttype: String(c.type ?? \"unknown\"),\n\t\t\t\t\ttext: typeof c.text === \"string\" ? c.text : undefined,\n\t\t\t\t\tdata: typeof c.data === \"string\" ? c.data : undefined,\n\t\t\t\t\tmimeType: typeof c.mimeType === \"string\" ? c.mimeType : undefined,\n\t\t\t\t}))\n\t\t\t: [];\n\n\t\treturn {\n\t\t\tcontent,\n\t\t\tstructuredContent:\n\t\t\t\t\"structuredContent\" in result ? result.structuredContent : undefined,\n\t\t\tisError: typeof result.isError === \"boolean\" ? result.isError : undefined,\n\t\t};\n\t}\n\n\tgetAllTools(): Array<{\n\t\tserver: string;\n\t\ttool: McpTool;\n\t\tsupportsParallelToolCalls: boolean;\n\t\tparallelSafety: McpToolParallelSafety;\n\t}> {\n\t\tconst tools: Array<{\n\t\t\tserver: string;\n\t\t\ttool: McpTool;\n\t\t\tsupportsParallelToolCalls: boolean;\n\t\t\tparallelSafety: McpToolParallelSafety;\n\t\t}> = [];\n\t\tfor (const [serverName, server] of this.servers) {\n\t\t\tfor (const tool of server.tools) {\n\t\t\t\tconst parallelSafety =\n\t\t\t\t\tserver.parallelSafetyByTool.get(tool.name) ??\n\t\t\t\t\tresolveToolParallelSafety({\n\t\t\t\t\t\tconfig: server.config,\n\t\t\t\t\t\tserverCapabilities: server.client.getServerCapabilities(),\n\t\t\t\t\t\ttool,\n\t\t\t\t\t});\n\t\t\t\ttools.push({\n\t\t\t\t\tserver: serverName,\n\t\t\t\t\ttool,\n\t\t\t\t\tsupportsParallelToolCalls:\n\t\t\t\t\t\tparallelSafety.supportsParallelToolCalls === true,\n\t\t\t\t\tparallelSafety,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn tools;\n\t}\n\n\tgetStatus(): McpManagerStatus {\n\t\tconst servers: McpServerStatus[] = [];\n\t\tconst authPresets: McpAuthPresetStatus[] = (\n\t\t\tthis.config.authPresets ?? []\n\t\t).map((authPreset) => ({\n\t\t\tname: authPreset.name,\n\t\t\tscope: authPreset.scope,\n\t\t\theaderKeys: authPreset.headers\n\t\t\t\t? Object.keys(authPreset.headers).sort()\n\t\t\t\t: [],\n\t\t\theadersHelper: authPreset.headersHelper,\n\t\t}));\n\t\tconst authPresetMap = buildAuthPresetMap(this.config.authPresets ?? []);\n\t\tconst approvalMap = buildProjectApprovalMap(this.config);\n\n\t\t// Include configured but not connected servers\n\t\tfor (const config of this.config.servers) {\n\t\t\tconst connected = this.servers.get(config.name);\n\t\t\tconst projectApproval = approvalMap.get(config.name);\n\t\t\tconst resolvedAuth = resolveRemoteAuthConfig(config, authPresetMap);\n\t\t\tconst remoteUrl =\n\t\t\t\tconfig.transport === \"http\" || config.transport === \"sse\"\n\t\t\t\t\t? config.url\n\t\t\t\t\t: undefined;\n\t\t\tconst remoteHost = remoteUrl ? getMcpRemoteHost(remoteUrl) : undefined;\n\t\t\tconst remoteRegistryMatch = remoteUrl\n\t\t\t\t? getOfficialMcpRegistryMatch(remoteUrl)\n\t\t\t\t: undefined;\n\t\t\tservers.push({\n\t\t\t\tname: config.name,\n\t\t\t\tconnected: !!connected,\n\t\t\t\terror:\n\t\t\t\t\tprojectApproval === \"pending\" || projectApproval === \"denied\"\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: this.lastErrors.get(config.name),\n\t\t\t\tscope: config.scope,\n\t\t\t\ttransport: config.transport,\n\t\t\t\ttools: connected?.tools ?? [],\n\t\t\t\tresources: connected?.resources ?? [],\n\t\t\t\tprompts: connected?.prompts ?? [],\n\t\t\t\tpromptDetails:\n\t\t\t\t\tconnected && connected.promptDetails.length > 0\n\t\t\t\t\t\t? connected.promptDetails\n\t\t\t\t\t\t: undefined,\n\t\t\t\tcommand: config.transport === \"stdio\" ? config.command : undefined,\n\t\t\t\targs: config.transport === \"stdio\" ? config.args : undefined,\n\t\t\t\tcwd: config.transport === \"stdio\" ? config.cwd : undefined,\n\t\t\t\tenvKeys: config.env ? Object.keys(config.env).sort() : [],\n\t\t\t\tremoteUrl,\n\t\t\t\tremoteHost,\n\t\t\t\theaderKeys: resolvedAuth.headers\n\t\t\t\t\t? Object.keys(resolvedAuth.headers).sort()\n\t\t\t\t\t: [],\n\t\t\t\theadersHelper: resolvedAuth.headersHelper,\n\t\t\t\tauthPreset: config.authPreset,\n\t\t\t\ttimeout: config.timeout,\n\t\t\t\tsupportsParallelToolCalls: config.supportsParallelToolCalls === true,\n\t\t\t\tparallelSafety: summarizeServerParallelSafety(config, connected),\n\t\t\t\tremoteTrust: remoteRegistryMatch?.trust,\n\t\t\t\tofficialRegistry: remoteRegistryMatch?.info,\n\t\t\t\tprojectApproval,\n\t\t\t});\n\t\t}\n\n\t\treturn { servers, authPresets };\n\t}\n\n\tgetServer(name: string): ConnectedServer | undefined {\n\t\treturn this.servers.get(name);\n\t}\n\n\tisConnected(name: string): boolean {\n\t\treturn this.servers.has(name);\n\t}\n\n\t/**\n\t * Read a resource from an MCP server\n\t */\n\tasync readResource(\n\t\tserverName: string,\n\t\turi: string,\n\t): Promise<{\n\t\tcontents: Array<{\n\t\t\turi: string;\n\t\t\ttext?: string;\n\t\t\tblob?: string;\n\t\t\tmimeType?: string;\n\t\t}>;\n\t}> {\n\t\tconst server = this.servers.get(serverName);\n\t\tif (!server) {\n\t\t\tthrow new Error(`MCP server '${serverName}' not connected`);\n\t\t}\n\n\t\tconst result = await server.client.readResource({ uri });\n\t\treturn {\n\t\t\tcontents: result.contents.map((c) => ({\n\t\t\t\turi: c.uri,\n\t\t\t\ttext: \"text\" in c ? c.text : undefined,\n\t\t\t\tblob: \"blob\" in c ? c.blob : undefined,\n\t\t\t\tmimeType: c.mimeType,\n\t\t\t})),\n\t\t};\n\t}\n\n\t/**\n\t * Get a prompt from an MCP server\n\t */\n\tasync getPrompt(\n\t\tserverName: string,\n\t\tpromptName: string,\n\t\targs?: Record<string, string>,\n\t): Promise<{\n\t\tdescription?: string;\n\t\tmessages: Array<{ role: string; content: string }>;\n\t}> {\n\t\tconst server = this.servers.get(serverName);\n\t\tif (!server) {\n\t\t\tthrow new Error(`MCP server '${serverName}' not connected`);\n\t\t}\n\n\t\tconst result = await server.client.getPrompt({\n\t\t\tname: promptName,\n\t\t\targuments: args,\n\t\t});\n\t\treturn {\n\t\t\tdescription: result.description,\n\t\t\tmessages: result.messages.map((m) => ({\n\t\t\t\trole: m.role,\n\t\t\t\tcontent:\n\t\t\t\t\ttypeof m.content === \"string\"\n\t\t\t\t\t\t? m.content\n\t\t\t\t\t\t: m.content.type === \"text\"\n\t\t\t\t\t\t\t? m.content.text\n\t\t\t\t\t\t\t: \"[non-text content]\",\n\t\t\t})),\n\t\t};\n\t}\n}\n\n/**\n * Singleton MCP client manager instance.\n *\n * Use this for all MCP operations in the application.\n * Configure with `mcpManager.configure(config)` at startup.\n */\nexport const mcpManager = new McpClientManager();\n"]}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MCP Client Manager - Model Context Protocol integration.\n *\n * This module manages connections to MCP (Model Context Protocol) servers,\n * which provide extended capabilities to the agent through a standardized\n * interface. MCP servers can expose:\n *\n * - **Tools**: Functions the agent can call (e.g., database queries, APIs)\n * - **Resources**: Data the agent can read (e.g., files, configurations)\n * - **Prompts**: Pre-defined prompt templates\n *\n * ## Architecture\n *\n * The McpClientManager maintains connections to multiple MCP servers\n * simultaneously. Each server can use either:\n * - **Stdio transport**: Spawns a subprocess, communicates via stdin/stdout\n * - **SSE transport**: Connects to HTTP server using Server-Sent Events\n *\n * ## Security\n *\n * - Environment variables are NOT passed to MCP server subprocesses\n * - Only essential variables (PATH, HOME, USER, SHELL, TERM) are included\n * - Server-specific env vars must be explicitly configured\n *\n * ## Events\n *\n * The manager emits events for monitoring:\n * - `connected`: Server successfully connected\n * - `disconnected`: Server disconnected\n * - `error`: Connection or operation error\n * - `tools_changed`: Server's tool list updated\n * - `resources_changed`: Server's resource list updated\n * - `prompts_changed`: Server's prompt list updated\n * - `progress`: Progress update from long-running operations\n * - `log`: Log message from server\n */\n\nimport { execFile } from \"node:child_process\";\nimport { EventEmitter } from \"node:events\";\nimport { promisify } from \"node:util\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { Transport } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport {\n\tElicitRequestSchema,\n\tLoggingMessageNotificationSchema,\n\ttype Prompt as McpPrompt,\n\ttype Tool as McpTool,\n\tProgressNotificationSchema,\n\tPromptListChangedNotificationSchema,\n\tResourceListChangedNotificationSchema,\n\ttype ServerCapabilities,\n\tToolListChangedNotificationSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { getPackageVersion } from \"../package-metadata.js\";\nimport {\n\temitMcpConnectionBeacon,\n\temitMcpToolUsageBeacon,\n} from \"../telemetry/mcp-beacon.js\";\nimport { parseCommandArguments } from \"../tools/shell-utils.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { getHomeDir } from \"../utils/path-expansion.js\";\nimport {\n\tbuildMcpElicitationToolCallId,\n\tgetCurrentMcpClientToolService,\n\tnormalizeMcpElicitationArgs,\n\tparseMcpElicitationClientToolResult,\n} from \"./elicitation.js\";\nimport {\n\tgetMcpRemoteHost,\n\tgetOfficialMcpRegistryMatch,\n} from \"./official-registry.js\";\nimport { getProjectMcpServerApprovalStatus } from \"./project-approvals.js\";\nimport {\n\tclassifyToolCapability,\n\tsummarizeToolCapabilities,\n} from \"./tool-capabilities.js\";\nimport type {\n\tMcpAuthPresetConfig,\n\tMcpAuthPresetStatus,\n\tMcpConfig,\n\tMcpManagerStatus,\n\tMcpProjectApprovalStatus,\n\tMcpPromptDefinition,\n\tMcpServerConfig,\n\tMcpServerStatus,\n\tMcpToolParallelSafety,\n\tMcpToolStatus,\n} from \"./types.js\";\nimport { ensureMcpWorkspaceTrusted } from \"./workspace-trust.js\";\n\nconst logger = createLogger(\"mcp:manager\");\nconst execFileAsync = promisify(execFile);\n\n/**\n * Result from calling an MCP tool.\n * Content can be text, binary data, or other MIME types.\n */\nexport interface McpToolCallResult {\n\tcontent: Array<{\n\t\ttype: string;\n\t\ttext?: string;\n\t\tdata?: string;\n\t\tmimeType?: string;\n\t}>;\n\tstructuredContent?: unknown;\n\tisError?: boolean;\n}\n\n// Connection timeout for initial server handshake\nconst DEFAULT_TIMEOUT_MS = 30000;\n\n// Delay between reconnection attempts (doubles each retry)\nconst DEFAULT_RECONNECT_DELAY_MS = 5000;\n\n// Maximum number of automatic reconnection attempts\nconst MAX_RECONNECT_ATTEMPTS = 3;\nconst PARALLEL_SAFETY_EXPERIMENTAL_KEYS = [\n\t\"evalops.maestro.parallelSafety\",\n\t\"evalops.maestro/parallelSafety\",\n\t\"maestro.parallelSafety\",\n];\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n\treturn value && typeof value === \"object\" && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: undefined;\n}\n\nfunction positiveInteger(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value > 0\n\t\t? Math.floor(value)\n\t\t: undefined;\n}\n\nfunction serverParallelSafetyAdvertisement(\n\tcapabilities: ServerCapabilities | undefined,\n): Record<string, unknown> | undefined {\n\tconst experimental = asRecord(capabilities?.experimental);\n\tif (!experimental) {\n\t\treturn undefined;\n\t}\n\tfor (const key of PARALLEL_SAFETY_EXPERIMENTAL_KEYS) {\n\t\tconst advertisement = asRecord(experimental[key]);\n\t\tif (advertisement) {\n\t\t\treturn advertisement;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction resolveToolParallelSafety({\n\tconfig,\n\tserverCapabilities,\n\ttool,\n}: {\n\tconfig: McpServerConfig;\n\tserverCapabilities?: ServerCapabilities;\n\ttool: McpTool;\n}): McpToolParallelSafety {\n\tconst advertisement = serverParallelSafetyAdvertisement(serverCapabilities);\n\tconst advertisedTools = asRecord(advertisement?.tools);\n\tconst advertisedTool =\n\t\tasRecord(advertisedTools?.[tool.name]) ?? asRecord(advertisedTools?.[\"*\"]);\n\tconst toolSupportsParallel = advertisedTool?.supportsParallelToolCalls;\n\tconst advertisedSupports =\n\t\ttoolSupportsParallel === true ||\n\t\t(toolSupportsParallel !== false &&\n\t\t\tadvertisement?.supportsParallelToolCalls === true);\n\tconst maxConcurrency =\n\t\tpositiveInteger(advertisedTool?.maxConcurrency) ??\n\t\tpositiveInteger(advertisement?.maxConcurrency);\n\n\tif (config.supportsParallelToolCalls === true) {\n\t\treturn {\n\t\t\tsupportsParallelToolCalls: true,\n\t\t\tprovenance: \"static_config\",\n\t\t\t...(maxConcurrency ? { maxConcurrency } : {}),\n\t\t\t...(advertisedTool?.readOnlyHint === true ? { readOnlyHint: true } : {}),\n\t\t};\n\t}\n\tif (advertisedSupports) {\n\t\treturn {\n\t\t\tsupportsParallelToolCalls: true,\n\t\t\tprovenance: \"server_capability\",\n\t\t\t...(maxConcurrency ? { maxConcurrency } : {}),\n\t\t\t...(advertisedTool?.readOnlyHint === true ? { readOnlyHint: true } : {}),\n\t\t};\n\t}\n\treturn {\n\t\tsupportsParallelToolCalls: false,\n\t\tprovenance: \"none\",\n\t\t...(advertisedTool?.readOnlyHint === true ? { readOnlyHint: true } : {}),\n\t};\n}\n\nfunction resolveParallelSafetyByTool({\n\tconfig,\n\tserverCapabilities,\n\ttools,\n}: {\n\tconfig: McpServerConfig;\n\tserverCapabilities?: ServerCapabilities;\n\ttools: McpTool[];\n}): Map<string, McpToolParallelSafety> {\n\treturn new Map(\n\t\ttools.map((tool) => [\n\t\t\ttool.name,\n\t\t\tresolveToolParallelSafety({\n\t\t\t\tconfig,\n\t\t\t\tserverCapabilities,\n\t\t\t\ttool,\n\t\t\t}),\n\t\t]),\n\t);\n}\n\nfunction summarizeServerParallelSafety(\n\tconfig: McpServerConfig,\n\tconnected: ConnectedServer | undefined,\n): McpServerStatus[\"parallelSafety\"] {\n\tif (!connected) {\n\t\treturn {\n\t\t\tsupportsParallelToolCalls: config.supportsParallelToolCalls === true,\n\t\t\tprovenance:\n\t\t\t\tconfig.supportsParallelToolCalls === true ? \"static_config\" : \"none\",\n\t\t};\n\t}\n\tconst values = [...connected.parallelSafetyByTool.values()];\n\tconst supportsParallelToolCalls = values.some(\n\t\t(value) => value.supportsParallelToolCalls === true,\n\t);\n\tconst staticConfig = values.some(\n\t\t(value) => value.provenance === \"static_config\",\n\t);\n\tconst serverCapability = values.some(\n\t\t(value) => value.provenance === \"server_capability\",\n\t);\n\tconst maxConcurrencyValues = values\n\t\t.map((value) => value.maxConcurrency)\n\t\t.filter((value): value is number => typeof value === \"number\");\n\treturn {\n\t\tsupportsParallelToolCalls,\n\t\tprovenance: staticConfig\n\t\t\t? \"static_config\"\n\t\t\t: serverCapability\n\t\t\t\t? \"server_capability\"\n\t\t\t\t: \"none\",\n\t\t...(maxConcurrencyValues.length > 0\n\t\t\t? { maxConcurrency: Math.min(...maxConcurrencyValues) }\n\t\t\t: {}),\n\t};\n}\n\nfunction toolsWithCapabilityStatus(\n\tserverName: string,\n\ttools: readonly McpTool[],\n\tparallelSafetyByTool?: ReadonlyMap<string, McpToolParallelSafety>,\n): McpToolStatus[] {\n\treturn tools.map((tool) => ({\n\t\t...tool,\n\t\tcapability: classifyToolCapability({\n\t\t\tserver: serverName,\n\t\t\ttoolName: tool.name,\n\t\t\tannotations: capabilityAnnotations(\n\t\t\t\ttool,\n\t\t\t\tparallelSafetyByTool?.get(tool.name),\n\t\t\t),\n\t\t}),\n\t}));\n}\n\nfunction capabilityAnnotations(\n\ttool: McpTool,\n\tparallelSafety: McpToolParallelSafety | undefined,\n): Record<string, unknown> | undefined {\n\tconst annotations = asRecord(tool.annotations);\n\tif (\n\t\tparallelSafety?.readOnlyHint !== true ||\n\t\tannotations?.readOnlyHint !== undefined\n\t) {\n\t\treturn annotations;\n\t}\n\treturn { ...annotations, readOnlyHint: true };\n}\n\nfunction arraysEqual(\n\tleft: readonly string[] | undefined,\n\tright: readonly string[] | undefined,\n): boolean {\n\tif (left === right) {\n\t\treturn true;\n\t}\n\tif (!left || !right || left.length !== right.length) {\n\t\treturn false;\n\t}\n\treturn left.every((value, index) => value === right[index]);\n}\n\nfunction recordsEqual(\n\tleft: Record<string, string> | undefined,\n\tright: Record<string, string> | undefined,\n): boolean {\n\tif (left === right) {\n\t\treturn true;\n\t}\n\tif (!left || !right) {\n\t\treturn false;\n\t}\n\tconst leftEntries = Object.entries(left).sort(([leftKey], [rightKey]) =>\n\t\tleftKey.localeCompare(rightKey),\n\t);\n\tconst rightEntries = Object.entries(right).sort(([leftKey], [rightKey]) =>\n\t\tleftKey.localeCompare(rightKey),\n\t);\n\tif (leftEntries.length !== rightEntries.length) {\n\t\treturn false;\n\t}\n\treturn leftEntries.every(\n\t\t([leftKey, leftValue], index) =>\n\t\t\tleftKey === rightEntries[index]?.[0] &&\n\t\t\tleftValue === rightEntries[index]?.[1],\n\t);\n}\n\ninterface ResolvedRemoteAuthConfig {\n\theaders?: Record<string, string>;\n\theadersHelper?: string;\n\tpreset?: McpAuthPresetConfig;\n}\n\nfunction buildAuthPresetMap(\n\tauthPresets: readonly McpAuthPresetConfig[],\n): Map<string, McpAuthPresetConfig> {\n\treturn new Map(\n\t\t(authPresets ?? []).map((authPreset) => [authPreset.name, authPreset]),\n\t);\n}\n\nfunction resolveRemoteAuthConfig(\n\tconfig: McpServerConfig,\n\tauthPresetMap: ReadonlyMap<string, McpAuthPresetConfig>,\n): ResolvedRemoteAuthConfig {\n\tif (config.transport !== \"http\" && config.transport !== \"sse\") {\n\t\treturn {\n\t\t\theaders: config.headers,\n\t\t\theadersHelper: config.headersHelper,\n\t\t};\n\t}\n\n\tconst preset = config.authPreset\n\t\t? authPresetMap.get(config.authPreset)\n\t\t: undefined;\n\tconst headers = {\n\t\t...(preset?.headers ?? {}),\n\t\t...(config.headers ?? {}),\n\t};\n\n\treturn {\n\t\theaders: Object.keys(headers).length > 0 ? headers : undefined,\n\t\theadersHelper: config.headersHelper ?? preset?.headersHelper,\n\t\tpreset,\n\t};\n}\n\nfunction buildComparableServerConfig(\n\tconfig: McpServerConfig,\n\tauthPresetMap: ReadonlyMap<string, McpAuthPresetConfig>,\n): McpServerConfig {\n\tconst resolvedAuth = resolveRemoteAuthConfig(config, authPresetMap);\n\treturn {\n\t\t...config,\n\t\theaders: resolvedAuth.headers,\n\t\theadersHelper: resolvedAuth.headersHelper,\n\t};\n}\n\nfunction serverConfigsEqual(\n\tleft: McpServerConfig,\n\tright: McpServerConfig,\n): boolean {\n\treturn (\n\t\tleft.name === right.name &&\n\t\tleft.transport === right.transport &&\n\t\tleft.command === right.command &&\n\t\tarraysEqual(left.args, right.args) &&\n\t\trecordsEqual(left.env, right.env) &&\n\t\tleft.cwd === right.cwd &&\n\t\tleft.url === right.url &&\n\t\trecordsEqual(left.headers, right.headers) &&\n\t\tleft.headersHelper === right.headersHelper &&\n\t\tleft.enabled === right.enabled &&\n\t\tleft.disabled === right.disabled &&\n\t\tleft.timeout === right.timeout &&\n\t\tleft.scope === right.scope\n\t);\n}\n\nfunction buildProjectApprovalMap(\n\tconfig: McpConfig,\n): Map<string, McpProjectApprovalStatus> {\n\tconst approvals = new Map<string, McpProjectApprovalStatus>();\n\tif (!config.projectRoot) {\n\t\treturn approvals;\n\t}\n\tfor (const server of config.servers ?? []) {\n\t\tconst approval = getProjectMcpServerApprovalStatus({\n\t\t\tprojectRoot: config.projectRoot,\n\t\t\tserver,\n\t\t\tauthPresets: config.authPresets ?? [],\n\t\t});\n\t\tif (approval) {\n\t\t\tapprovals.set(server.name, approval);\n\t\t}\n\t}\n\treturn approvals;\n}\n\nfunction canConnectServer(\n\tserver: McpServerConfig,\n\tapprovalMap: ReadonlyMap<string, McpProjectApprovalStatus>,\n): boolean {\n\tconst approval = approvalMap.get(server.name);\n\treturn approval !== \"pending\" && approval !== \"denied\";\n}\n\nfunction buildSafeEnv(\n\texplicitEnv?: Record<string, string>,\n\textraEnv?: Record<string, string>,\n): Record<string, string> {\n\tconst safeBaseEnv: Record<string, string> = {};\n\tif (process.env.PATH) safeBaseEnv.PATH = process.env.PATH;\n\tif (process.env.HOME) {\n\t\tsafeBaseEnv.HOME = process.env.HOME;\n\t} else {\n\t\tconst homeDir = getHomeDir();\n\t\tif (homeDir) safeBaseEnv.HOME = homeDir;\n\t}\n\tif (process.env.USER) {\n\t\tsafeBaseEnv.USER = process.env.USER;\n\t} else if (process.env.USERNAME) {\n\t\tsafeBaseEnv.USER = process.env.USERNAME;\n\t}\n\tif (process.env.SHELL) safeBaseEnv.SHELL = process.env.SHELL;\n\tif (process.env.TERM) safeBaseEnv.TERM = process.env.TERM;\n\n\treturn Object.fromEntries(\n\t\tObject.entries({ ...safeBaseEnv, ...explicitEnv, ...extraEnv }).filter(\n\t\t\t([, value]) => value !== undefined,\n\t\t),\n\t) as Record<string, string>;\n}\n\nasync function resolveHeadersHelper(\n\tconfig: McpServerConfig,\n\theadersHelper = config.headersHelper,\n): Promise<Record<string, string> | undefined> {\n\tif (!headersHelper) {\n\t\treturn undefined;\n\t}\n\n\tlet command: string[];\n\ttry {\n\t\tcommand = parseCommandArguments(headersHelper);\n\t} catch (error) {\n\t\tlogger.warn(\"Invalid MCP headers helper command\", {\n\t\t\tname: config.name,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tif (command.length === 0) {\n\t\tlogger.warn(\"Empty MCP headers helper command\", { name: config.name });\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst { stdout } = await execFileAsync(command[0]!, command.slice(1), {\n\t\t\tcwd: config.cwd,\n\t\t\tenv: buildSafeEnv(config.env, {\n\t\t\t\tMAESTRO_MCP_SERVER_NAME: config.name,\n\t\t\t\tMAESTRO_MCP_SERVER_URL: config.url ?? \"\",\n\t\t\t}),\n\t\t\ttimeout: config.timeout ?? DEFAULT_TIMEOUT_MS,\n\t\t\tmaxBuffer: 1024 * 1024,\n\t\t\tencoding: \"utf8\",\n\t\t\twindowsHide: true,\n\t\t});\n\n\t\tconst trimmed = stdout.trim();\n\t\tif (!trimmed) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst parsed = JSON.parse(trimmed) as unknown;\n\t\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\t\tthrow new Error(\"headersHelper must return a JSON object\");\n\t\t}\n\n\t\tconst headers: Record<string, string> = {};\n\t\tfor (const [key, value] of Object.entries(parsed)) {\n\t\t\tif (typeof value !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`headersHelper must return string values for key \"${key}\"`,\n\t\t\t\t);\n\t\t\t}\n\t\t\theaders[key] = value;\n\t\t}\n\n\t\treturn headers;\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to resolve MCP headers helper\", {\n\t\t\tname: config.name,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t});\n\t\treturn undefined;\n\t}\n}\n\nasync function buildRemoteRequestInit(\n\tconfig: McpServerConfig,\n\tauthPresetMap: ReadonlyMap<string, McpAuthPresetConfig>,\n): Promise<RequestInit | undefined> {\n\tconst resolvedAuth = resolveRemoteAuthConfig(config, authPresetMap);\n\tconst helperHeaders = await resolveHeadersHelper(\n\t\tconfig,\n\t\tresolvedAuth.headersHelper,\n\t);\n\tconst headers = {\n\t\t...(resolvedAuth.headers ?? {}),\n\t\t...(helperHeaders ?? {}),\n\t};\n\n\treturn Object.keys(headers).length > 0 ? { headers } : undefined;\n}\n\n/**\n * Internal state for a connected MCP server.\n * Tracks the client, transport, and cached capabilities.\n */\ninterface ConnectedServer {\n\t/** Original configuration */\n\tconfig: McpServerConfig;\n\t/** MCP client instance */\n\tclient: Client;\n\t/** Transport layer (stdio or SSE) */\n\ttransport: Transport;\n\t/** Cached list of available tools */\n\ttools: McpTool[];\n\t/** Cached list of resource URIs */\n\tresources: string[];\n\t/** Cached list of prompt names */\n\tprompts: string[];\n\t/** Cached prompt metadata for structured prompt UIs */\n\tpromptDetails: McpPromptDefinition[];\n\t/** Per-tool parallel safety resolved from static config or server handshake. */\n\tparallelSafetyByTool: ReadonlyMap<string, McpToolParallelSafety>;\n\t/** Counter for reconnection attempts */\n\treconnectAttempts: number;\n}\n\nfunction normalizePromptDefinition(prompt: McpPrompt): McpPromptDefinition {\n\treturn {\n\t\tname: prompt.name,\n\t\ttitle: prompt.title,\n\t\tdescription: prompt.description,\n\t\targuments:\n\t\t\tprompt.arguments?.map((argument) => ({\n\t\t\t\tname: argument.name,\n\t\t\t\tdescription: argument.description,\n\t\t\t\trequired: argument.required,\n\t\t\t})) ?? [],\n\t};\n}\n\nfunction getPromptNames(\n\tpromptDetails: readonly McpPromptDefinition[],\n): string[] {\n\treturn promptDetails.map((prompt) => prompt.name);\n}\n\n/**\n * Manager for MCP (Model Context Protocol) server connections.\n *\n * Handles connection lifecycle, tool discovery, and message routing\n * for multiple MCP servers. Supports automatic reconnection on failure.\n */\nexport class McpClientManager extends EventEmitter {\n\t/** Map of server name to connected server state */\n\tprivate servers = new Map<string, ConnectedServer>();\n\n\t/** Map of server name to in-flight connection promise (prevents duplicates) */\n\tprivate connecting = new Map<string, Promise<void>>();\n\n\t/** Map of server name to pending reconnect timer */\n\tprivate reconnectTimers = new Map<string, ReturnType<typeof setTimeout>>();\n\n\t/** Last connection or runtime error reported for each configured server */\n\tprivate lastErrors = new Map<string, string>();\n\n\t/** Current configuration */\n\tprivate config: McpConfig = { servers: [], authPresets: [] };\n\n\t/**\n\t * Apply a new configuration, connecting/disconnecting servers as needed.\n\t *\n\t * Compares old and new configs to determine which servers to add or remove,\n\t * then performs the necessary connect/disconnect operations.\n\t *\n\t * @param config - New MCP configuration with server list\n\t */\n\tasync configure(config: McpConfig): Promise<void> {\n\t\tconst nextConfig: McpConfig = {\n\t\t\tservers: config.servers ?? [],\n\t\t\tauthPresets: config.authPresets ?? [],\n\t\t\tprojectRoot: config.projectRoot,\n\t\t\ttrustedWorkspaces: config.trustedWorkspaces,\n\t\t\tworkspaceTrustDefault: config.workspaceTrustDefault,\n\t\t\tenvLimits: config.envLimits,\n\t\t};\n\t\tconst previousAuthPresetMap = buildAuthPresetMap(this.config.authPresets);\n\t\tconst nextAuthPresetMap = buildAuthPresetMap(nextConfig.authPresets);\n\t\tconst previousApprovalMap = buildProjectApprovalMap(this.config);\n\t\tconst nextApprovalMap = buildProjectApprovalMap(nextConfig);\n\t\tconst previousServers = new Map(\n\t\t\tthis.config.servers.map((server) => [server.name, server]),\n\t\t);\n\t\tconst oldServerNames = new Set(previousServers.keys());\n\t\tconst newServerNames = new Set(nextConfig.servers.map((s) => s.name));\n\n\t\t// Find servers to remove (in old but not in new)\n\t\tconst toRemove = [...oldServerNames].filter((n) => !newServerNames.has(n));\n\n\t\t// Reconnect servers whose config changed in place.\n\t\tconst toReconnect = nextConfig.servers.filter((server) => {\n\t\t\tconst previous = previousServers.get(server.name);\n\t\t\treturn (\n\t\t\t\tprevious &&\n\t\t\t\t(!serverConfigsEqual(\n\t\t\t\t\tbuildComparableServerConfig(previous, previousAuthPresetMap),\n\t\t\t\t\tbuildComparableServerConfig(server, nextAuthPresetMap),\n\t\t\t\t) ||\n\t\t\t\t\tcanConnectServer(previous, previousApprovalMap) !==\n\t\t\t\t\t\tcanConnectServer(server, nextApprovalMap))\n\t\t\t);\n\t\t});\n\t\tconst reconnectNames = new Set(toReconnect.map((server) => server.name));\n\n\t\t// Find servers to add (in new but not in old)\n\t\tconst toAdd = nextConfig.servers.filter(\n\t\t\t(server) => !oldServerNames.has(server.name),\n\t\t);\n\t\tconst toAddNames = new Set(toAdd.map((server) => server.name));\n\n\t\tthis.config = nextConfig;\n\n\t\t// Disconnect removed servers (don't wait for success)\n\t\tawait Promise.allSettled(\n\t\t\ttoRemove.map((name) => this.disconnectServer(name)),\n\t\t);\n\n\t\t// Disconnect and reconnect updated servers so in-place edits take effect.\n\t\tawait Promise.allSettled(\n\t\t\ttoReconnect.map(async (server) => {\n\t\t\t\tconst pendingConnection = this.connecting.get(server.name);\n\t\t\t\tif (pendingConnection) {\n\t\t\t\t\tawait Promise.allSettled([pendingConnection]);\n\t\t\t\t}\n\t\t\t\tawait this.disconnectServer(server.name);\n\t\t\t\tif (canConnectServer(server, nextApprovalMap)) {\n\t\t\t\t\tawait this.connectServer(server);\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\n\t\t// Connect new servers and unchanged servers that were explicitly disconnected.\n\t\tawait Promise.allSettled(\n\t\t\tnextConfig.servers\n\t\t\t\t.filter(\n\t\t\t\t\t(server) =>\n\t\t\t\t\t\t(toAddNames.has(server.name) ||\n\t\t\t\t\t\t\t(oldServerNames.has(server.name) &&\n\t\t\t\t\t\t\t\t!reconnectNames.has(server.name) &&\n\t\t\t\t\t\t\t\t!this.servers.has(server.name))) &&\n\t\t\t\t\t\tcanConnectServer(server, nextApprovalMap),\n\t\t\t\t)\n\t\t\t\t.map((server) => this.connectServer(server)),\n\t\t);\n\t}\n\n\t/**\n\t * Connect to all configured servers.\n\t * Non-blocking - returns after connection attempts are started.\n\t */\n\tasync connectAll(): Promise<void> {\n\t\tconst approvalMap = buildProjectApprovalMap(this.config);\n\t\tconst promises = this.config.servers\n\t\t\t.filter((server) => canConnectServer(server, approvalMap))\n\t\t\t.map((server) => this.connectServer(server));\n\t\tawait Promise.allSettled(promises);\n\t}\n\n\t/**\n\t * Disconnect from all servers and cancel pending reconnects.\n\t */\n\tasync disconnectAll(): Promise<void> {\n\t\t// Clear all pending reconnect timers first\n\t\tfor (const [name, timer] of this.reconnectTimers) {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t\tthis.reconnectTimers.clear();\n\n\t\t// Disconnect all servers\n\t\tconst promises = Array.from(this.servers.keys()).map((name) =>\n\t\t\tthis.disconnectServer(name),\n\t\t);\n\t\tawait Promise.allSettled(promises);\n\t}\n\n\t/**\n\t * Internal: Connect to a single server.\n\t * Handles deduplication of concurrent connection attempts.\n\t */\n\tprivate async connectServer(config: McpServerConfig): Promise<void> {\n\t\tconst { name } = config;\n\n\t\t// Avoid duplicate connections\n\t\tif (this.servers.has(name)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check for in-flight connection (prevent race conditions)\n\t\tconst existing = this.connecting.get(name);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\n\t\t// Track this connection attempt\n\t\tconst task = this.doConnect(config);\n\t\tthis.connecting.set(name, task);\n\n\t\ttry {\n\t\t\tawait task;\n\t\t} finally {\n\t\t\tthis.connecting.delete(name);\n\t\t}\n\t}\n\n\t/**\n\t * Internal: Perform the actual connection to an MCP server.\n\t *\n\t * Creates the appropriate transport (stdio or SSE), establishes connection,\n\t * fetches server capabilities (tools, resources, prompts), and sets up\n\t * notification handlers.\n\t *\n\t * @param config - Server configuration\n\t * @param isReconnect - Whether this is a reconnection attempt\n\t */\n\tprivate async doConnect(\n\t\tconfig: McpServerConfig,\n\t\tisReconnect = false,\n\t): Promise<void> {\n\t\tconst { name, transport: transportType } = config;\n\n\t\ttry {\n\t\t\tlet transport: Transport;\n\n\t\t\t// Create transport based on configuration\n\t\t\tif (transportType === \"http\" || transportType === \"sse\") {\n\t\t\t\t// HTTP/SSE transport - connect to remote server\n\t\t\t\tif (!config.url) {\n\t\t\t\t\tlogger.warn(\"No URL specified for HTTP server\", { name });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst requestInit = await buildRemoteRequestInit(\n\t\t\t\t\tconfig,\n\t\t\t\t\tbuildAuthPresetMap(this.config.authPresets),\n\t\t\t\t);\n\t\t\t\tconst transportOptions = requestInit ? { requestInit } : undefined;\n\n\t\t\t\tif (transportType === \"http\") {\n\t\t\t\t\ttransport = new StreamableHTTPClientTransport(\n\t\t\t\t\t\tnew URL(config.url),\n\t\t\t\t\t\ttransportOptions,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\ttransport = new SSEClientTransport(\n\t\t\t\t\t\tnew URL(config.url),\n\t\t\t\t\t\ttransportOptions,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Stdio transport - spawn subprocess\n\t\t\t\tif (!config.command) {\n\t\t\t\t\tlogger.warn(\"No command specified for server\", { name });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// SECURITY: Only pass essential env vars plus explicit config\n\t\t\t\t// Do NOT pass process.env - this would leak API keys and secrets\n\t\t\t\ttransport = new StdioClientTransport({\n\t\t\t\t\tcommand: config.command,\n\t\t\t\t\targs: config.args,\n\t\t\t\t\tenv: buildSafeEnv(config.env),\n\t\t\t\t\tcwd: config.cwd,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst client = new Client(\n\t\t\t\t{\n\t\t\t\t\tname: \"composer\",\n\t\t\t\t\tversion: \"1.0.0\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\telicitation: {\n\t\t\t\t\t\t\tform: { applyDefaults: true },\n\t\t\t\t\t\t\turl: {},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tclient.setRequestHandler(ElicitRequestSchema, async (request, extra) => {\n\t\t\t\tconst clientToolService = getCurrentMcpClientToolService();\n\t\t\t\tif (!clientToolService) {\n\t\t\t\t\treturn { action: \"cancel\" };\n\t\t\t\t}\n\n\t\t\t\tconst requestId =\n\t\t\t\t\textra.requestId ??\n\t\t\t\t\t(\"elicitationId\" in request.params\n\t\t\t\t\t\t? request.params.elicitationId\n\t\t\t\t\t\t: \"unknown\");\n\t\t\t\tconst toolCallId = buildMcpElicitationToolCallId(name, requestId);\n\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await clientToolService.requestExecution(\n\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\t\"mcp_elicitation\",\n\t\t\t\t\t\tnormalizeMcpElicitationArgs(name, requestId, request.params),\n\t\t\t\t\t\textra.signal,\n\t\t\t\t\t);\n\t\t\t\t\treturn parseMcpElicitationClientToolResult(\n\t\t\t\t\t\tresult.content,\n\t\t\t\t\t\tresult.isError,\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.warn(\"Failed to resolve MCP elicitation request\", {\n\t\t\t\t\t\tname,\n\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t});\n\t\t\t\t\treturn { action: \"cancel\" };\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tawait client.connect(transport, {\n\t\t\t\ttimeout: config.timeout ?? DEFAULT_TIMEOUT_MS,\n\t\t\t});\n\n\t\t\t// Fetch capabilities\n\t\t\tconst tools = await this.fetchTools(client);\n\t\t\tconst resources = await this.fetchResources(client);\n\t\t\tconst promptDetails = await this.fetchPrompts(client);\n\t\t\tconst prompts = getPromptNames(promptDetails);\n\t\t\tconst serverCapabilities = client.getServerCapabilities();\n\t\t\tconst parallelSafetyByTool = resolveParallelSafetyByTool({\n\t\t\t\tconfig,\n\t\t\t\tserverCapabilities,\n\t\t\t\ttools,\n\t\t\t});\n\t\t\tconst toolCapabilitySummary = summarizeToolCapabilities(\n\t\t\t\ttoolsWithCapabilityStatus(name, tools, parallelSafetyByTool)\n\t\t\t\t\t.map((tool) => tool.capability)\n\t\t\t\t\t.filter((capability) => capability !== undefined),\n\t\t\t);\n\n\t\t\tthis.servers.set(name, {\n\t\t\t\tconfig,\n\t\t\t\tclient,\n\t\t\t\ttransport,\n\t\t\t\ttools,\n\t\t\t\tresources,\n\t\t\t\tprompts,\n\t\t\t\tpromptDetails,\n\t\t\t\tparallelSafetyByTool,\n\t\t\t\treconnectAttempts: 0,\n\t\t\t});\n\t\t\tthis.lastErrors.delete(name);\n\n\t\t\t// Set up notification handlers after adding to servers map\n\t\t\t// to avoid race condition where notifications arrive before server is tracked\n\t\t\tthis.setupNotificationHandlers(client, name);\n\n\t\t\tthis.emit(\"connected\", { name, tools: tools.length, isReconnect });\n\t\t\tvoid emitMcpConnectionBeacon({\n\t\t\t\tserverName: name,\n\t\t\t\ttransport: transportType,\n\t\t\t\tremoteHost: config.url ? getMcpRemoteHost(config.url) : undefined,\n\t\t\t\ttoolCount: tools.length,\n\t\t\t\tresourceCount: resources.length,\n\t\t\t\tpromptCount: prompts.length,\n\t\t\t\ttoolCapabilitySummary,\n\t\t\t\tisReconnect,\n\t\t\t\tclientVersion: getPackageVersion(),\n\t\t\t}).catch(() => undefined);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.lastErrors.set(name, message);\n\t\t\tlogger.error(\n\t\t\t\t\"Failed to connect to server\",\n\t\t\t\terror instanceof Error ? error : new Error(message),\n\t\t\t\t{ name },\n\t\t\t);\n\t\t\tthis.emit(\"error\", { name, error: message });\n\n\t\t\t// Schedule reconnection for non-reconnect attempts\n\t\t\tif (!isReconnect) {\n\t\t\t\tthis.scheduleReconnect(config, 0);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate scheduleReconnect(config: McpServerConfig, attempt: number): void {\n\t\tif (attempt >= MAX_RECONNECT_ATTEMPTS) {\n\t\t\tlogger.warn(\"Max reconnection attempts reached\", { name: config.name });\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear any existing timer for this server\n\t\tconst existingTimer = this.reconnectTimers.get(config.name);\n\t\tif (existingTimer) {\n\t\t\tclearTimeout(existingTimer);\n\t\t}\n\n\t\tconst delay = DEFAULT_RECONNECT_DELAY_MS * 2 ** attempt;\n\t\tlogger.info(\"Scheduling reconnect\", {\n\t\t\tserver: config.name,\n\t\t\tdelayMs: delay,\n\t\t\tattempt: attempt + 1,\n\t\t\tmaxAttempts: MAX_RECONNECT_ATTEMPTS,\n\t\t});\n\n\t\tconst timeoutId = setTimeout(async () => {\n\t\t\tthis.reconnectTimers.delete(config.name);\n\n\t\t\tif (this.servers.has(config.name)) {\n\t\t\t\treturn; // Already reconnected\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait this.doConnect(config, true);\n\t\t\t\t// If doConnect succeeded (server is now connected), we're done\n\t\t\t\tif (!this.servers.has(config.name)) {\n\t\t\t\t\t// Connection failed (doConnect caught the error), schedule retry\n\t\t\t\t\tthis.scheduleReconnect(config, attempt + 1);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Unexpected error, schedule retry\n\t\t\t\tthis.scheduleReconnect(config, attempt + 1);\n\t\t\t}\n\t\t}, delay);\n\n\t\tthis.reconnectTimers.set(config.name, timeoutId);\n\t}\n\n\t/**\n\t * Manually trigger reconnection for a server\n\t */\n\tasync reconnect(name: string): Promise<boolean> {\n\t\tconst config = this.config.servers.find((s) => s.name === name);\n\t\tif (!config) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!canConnectServer(config, buildProjectApprovalMap(this.config))) {\n\t\t\tawait this.disconnectServer(name);\n\t\t\treturn false;\n\t\t}\n\n\t\tawait this.disconnectServer(name);\n\t\tawait this.doConnect(config, true);\n\t\treturn this.servers.has(name);\n\t}\n\n\tprivate async fetchTools(client: Client): Promise<McpTool[]> {\n\t\ttry {\n\t\t\tconst caps = client.getServerCapabilities();\n\t\t\tif (!caps?.tools) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst result = await client.listTools();\n\t\t\treturn result.tools;\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate async fetchResources(client: Client): Promise<string[]> {\n\t\ttry {\n\t\t\tconst caps = client.getServerCapabilities();\n\t\t\tif (!caps?.resources) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst result = await client.listResources();\n\t\t\treturn result.resources.map((r) => r.uri);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate async fetchPrompts(client: Client): Promise<McpPromptDefinition[]> {\n\t\ttry {\n\t\t\tconst caps = client.getServerCapabilities();\n\t\t\tif (!caps?.prompts) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst result = await client.listPrompts();\n\t\t\treturn result.prompts.map(normalizePromptDefinition);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate setupNotificationHandlers(client: Client, serverName: string): void {\n\t\t// Tool list changes - refresh tools when server notifies\n\t\tclient.setNotificationHandler(\n\t\t\tToolListChangedNotificationSchema,\n\t\t\tasync () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst server = this.servers.get(serverName);\n\t\t\t\t\tif (server) {\n\t\t\t\t\t\tserver.tools = await this.fetchTools(client);\n\t\t\t\t\t\tserver.parallelSafetyByTool = resolveParallelSafetyByTool({\n\t\t\t\t\t\t\tconfig: server.config,\n\t\t\t\t\t\t\tserverCapabilities: client.getServerCapabilities(),\n\t\t\t\t\t\t\ttools: server.tools,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.emit(\"tools_changed\", {\n\t\t\t\t\t\t\tname: serverName,\n\t\t\t\t\t\t\ttools: server.tools,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"Failed to refresh tools\",\n\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\t{ serverName },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t// Resource list changes\n\t\tclient.setNotificationHandler(\n\t\t\tResourceListChangedNotificationSchema,\n\t\t\tasync () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst server = this.servers.get(serverName);\n\t\t\t\t\tif (server) {\n\t\t\t\t\t\tserver.resources = await this.fetchResources(client);\n\t\t\t\t\t\tthis.emit(\"resources_changed\", {\n\t\t\t\t\t\t\tname: serverName,\n\t\t\t\t\t\t\tresources: server.resources,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"Failed to refresh resources\",\n\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\t{ serverName },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t// Prompt list changes\n\t\tclient.setNotificationHandler(\n\t\t\tPromptListChangedNotificationSchema,\n\t\t\tasync () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst server = this.servers.get(serverName);\n\t\t\t\t\tif (server) {\n\t\t\t\t\t\tserver.promptDetails = await this.fetchPrompts(client);\n\t\t\t\t\t\tserver.prompts = getPromptNames(server.promptDetails);\n\t\t\t\t\t\tthis.emit(\"prompts_changed\", {\n\t\t\t\t\t\t\tname: serverName,\n\t\t\t\t\t\t\tprompts: server.prompts,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"Failed to refresh prompts\",\n\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\t{ serverName },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t// Progress notifications for long-running operations\n\t\tclient.setNotificationHandler(\n\t\t\tProgressNotificationSchema,\n\t\t\t(notification) => {\n\t\t\t\tthis.emit(\"progress\", {\n\t\t\t\t\tname: serverName,\n\t\t\t\t\tprogressToken: notification.params.progressToken,\n\t\t\t\t\tprogress: notification.params.progress,\n\t\t\t\t\ttotal: notification.params.total,\n\t\t\t\t\tmessage: notification.params.message,\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\n\t\t// Logging messages from MCP servers\n\t\tclient.setNotificationHandler(\n\t\t\tLoggingMessageNotificationSchema,\n\t\t\t(notification) => {\n\t\t\t\tthis.emit(\"log\", {\n\t\t\t\t\tname: serverName,\n\t\t\t\t\tlevel: notification.params.level,\n\t\t\t\t\tlogger: notification.params.logger,\n\t\t\t\t\tdata: notification.params.data,\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\t}\n\n\tprivate async disconnectServer(name: string): Promise<void> {\n\t\t// Clear any pending reconnect timer for this server\n\t\tconst timer = this.reconnectTimers.get(name);\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\tthis.reconnectTimers.delete(name);\n\t\t}\n\n\t\tconst server = this.servers.get(name);\n\t\tif (!server) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait server.client.close();\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Error closing client\", {\n\t\t\t\tname,\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t}\n\n\t\t// Also close the transport to clean up underlying resources\n\t\ttry {\n\t\t\tawait server.transport.close();\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Error closing transport\", {\n\t\t\t\tname,\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t}\n\n\t\tthis.servers.delete(name);\n\t\tthis.emit(\"disconnected\", { name });\n\t}\n\n\tasync callTool(\n\t\tserverName: string,\n\t\ttoolName: string,\n\t\targs: Record<string, unknown>,\n\t): Promise<McpToolCallResult> {\n\t\tconst server = this.servers.get(serverName);\n\t\tif (!server) {\n\t\t\tthrow new Error(`MCP server '${serverName}' not connected`);\n\t\t}\n\t\tawait ensureMcpWorkspaceTrusted({\n\t\t\tconfig: this.config,\n\t\t\tserver: buildComparableServerConfig(\n\t\t\t\tserver.config,\n\t\t\t\tbuildAuthPresetMap(this.config.authPresets),\n\t\t\t),\n\t\t\ttoolName,\n\t\t\tclientToolService: getCurrentMcpClientToolService(),\n\t\t});\n\n\t\tvoid emitMcpToolUsageBeacon({\n\t\t\tserverName,\n\t\t\ttransport: server.config.transport,\n\t\t\tremoteHost: server.config.url\n\t\t\t\t? getMcpRemoteHost(server.config.url)\n\t\t\t\t: undefined,\n\t\t\ttoolName,\n\t\t\tclientVersion: getPackageVersion(),\n\t\t}).catch(() => undefined);\n\n\t\tconst result = await server.client.callTool({\n\t\t\tname: toolName,\n\t\t\targuments: args,\n\t\t});\n\n\t\t// Normalize the result to our interface\n\t\tconst content = Array.isArray(result.content)\n\t\t\t? result.content.map((c: Record<string, unknown>) => ({\n\t\t\t\t\ttype: String(c.type ?? \"unknown\"),\n\t\t\t\t\ttext: typeof c.text === \"string\" ? c.text : undefined,\n\t\t\t\t\tdata: typeof c.data === \"string\" ? c.data : undefined,\n\t\t\t\t\tmimeType: typeof c.mimeType === \"string\" ? c.mimeType : undefined,\n\t\t\t\t}))\n\t\t\t: [];\n\n\t\treturn {\n\t\t\tcontent,\n\t\t\tstructuredContent:\n\t\t\t\t\"structuredContent\" in result ? result.structuredContent : undefined,\n\t\t\tisError: typeof result.isError === \"boolean\" ? result.isError : undefined,\n\t\t};\n\t}\n\n\tgetAllTools(): Array<{\n\t\tserver: string;\n\t\ttool: McpTool;\n\t\tsupportsParallelToolCalls: boolean;\n\t\tparallelSafety: McpToolParallelSafety;\n\t}> {\n\t\tconst tools: Array<{\n\t\t\tserver: string;\n\t\t\ttool: McpTool;\n\t\t\tsupportsParallelToolCalls: boolean;\n\t\t\tparallelSafety: McpToolParallelSafety;\n\t\t}> = [];\n\t\tfor (const [serverName, server] of this.servers) {\n\t\t\tfor (const tool of server.tools) {\n\t\t\t\tconst parallelSafety =\n\t\t\t\t\tserver.parallelSafetyByTool.get(tool.name) ??\n\t\t\t\t\tresolveToolParallelSafety({\n\t\t\t\t\t\tconfig: server.config,\n\t\t\t\t\t\tserverCapabilities: server.client.getServerCapabilities(),\n\t\t\t\t\t\ttool,\n\t\t\t\t\t});\n\t\t\t\ttools.push({\n\t\t\t\t\tserver: serverName,\n\t\t\t\t\ttool,\n\t\t\t\t\tsupportsParallelToolCalls:\n\t\t\t\t\t\tparallelSafety.supportsParallelToolCalls === true,\n\t\t\t\t\tparallelSafety,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn tools;\n\t}\n\n\tgetStatus(): McpManagerStatus {\n\t\tconst servers: McpServerStatus[] = [];\n\t\tconst authPresets: McpAuthPresetStatus[] = (\n\t\t\tthis.config.authPresets ?? []\n\t\t).map((authPreset) => ({\n\t\t\tname: authPreset.name,\n\t\t\tscope: authPreset.scope,\n\t\t\theaderKeys: authPreset.headers\n\t\t\t\t? Object.keys(authPreset.headers).sort()\n\t\t\t\t: [],\n\t\t\theadersHelper: authPreset.headersHelper,\n\t\t}));\n\t\tconst authPresetMap = buildAuthPresetMap(this.config.authPresets ?? []);\n\t\tconst approvalMap = buildProjectApprovalMap(this.config);\n\n\t\t// Include configured but not connected servers\n\t\tfor (const config of this.config.servers) {\n\t\t\tconst connected = this.servers.get(config.name);\n\t\t\tconst tools = connected\n\t\t\t\t? toolsWithCapabilityStatus(\n\t\t\t\t\t\tconfig.name,\n\t\t\t\t\t\tconnected.tools,\n\t\t\t\t\t\tconnected.parallelSafetyByTool,\n\t\t\t\t\t)\n\t\t\t\t: [];\n\t\t\tconst projectApproval = approvalMap.get(config.name);\n\t\t\tconst resolvedAuth = resolveRemoteAuthConfig(config, authPresetMap);\n\t\t\tconst remoteUrl =\n\t\t\t\tconfig.transport === \"http\" || config.transport === \"sse\"\n\t\t\t\t\t? config.url\n\t\t\t\t\t: undefined;\n\t\t\tconst remoteHost = remoteUrl ? getMcpRemoteHost(remoteUrl) : undefined;\n\t\t\tconst remoteRegistryMatch = remoteUrl\n\t\t\t\t? getOfficialMcpRegistryMatch(remoteUrl)\n\t\t\t\t: undefined;\n\t\t\tservers.push({\n\t\t\t\tname: config.name,\n\t\t\t\tconnected: !!connected,\n\t\t\t\terror:\n\t\t\t\t\tprojectApproval === \"pending\" || projectApproval === \"denied\"\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: this.lastErrors.get(config.name),\n\t\t\t\tscope: config.scope,\n\t\t\t\ttransport: config.transport,\n\t\t\t\ttools,\n\t\t\t\ttoolCapabilitySummary:\n\t\t\t\t\ttools.length > 0\n\t\t\t\t\t\t? summarizeToolCapabilities(\n\t\t\t\t\t\t\t\ttools\n\t\t\t\t\t\t\t\t\t.map((tool) => tool.capability)\n\t\t\t\t\t\t\t\t\t.filter((capability) => capability !== undefined),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: undefined,\n\t\t\t\tresources: connected?.resources ?? [],\n\t\t\t\tprompts: connected?.prompts ?? [],\n\t\t\t\tpromptDetails:\n\t\t\t\t\tconnected && connected.promptDetails.length > 0\n\t\t\t\t\t\t? connected.promptDetails\n\t\t\t\t\t\t: undefined,\n\t\t\t\tcommand: config.transport === \"stdio\" ? config.command : undefined,\n\t\t\t\targs: config.transport === \"stdio\" ? config.args : undefined,\n\t\t\t\tcwd: config.transport === \"stdio\" ? config.cwd : undefined,\n\t\t\t\tenvKeys: config.env ? Object.keys(config.env).sort() : [],\n\t\t\t\tremoteUrl,\n\t\t\t\tremoteHost,\n\t\t\t\theaderKeys: resolvedAuth.headers\n\t\t\t\t\t? Object.keys(resolvedAuth.headers).sort()\n\t\t\t\t\t: [],\n\t\t\t\theadersHelper: resolvedAuth.headersHelper,\n\t\t\t\tauthPreset: config.authPreset,\n\t\t\t\ttimeout: config.timeout,\n\t\t\t\tsupportsParallelToolCalls: config.supportsParallelToolCalls === true,\n\t\t\t\tparallelSafety: summarizeServerParallelSafety(config, connected),\n\t\t\t\tremoteTrust: remoteRegistryMatch?.trust,\n\t\t\t\tofficialRegistry: remoteRegistryMatch?.info,\n\t\t\t\tprojectApproval,\n\t\t\t});\n\t\t}\n\n\t\treturn { servers, authPresets };\n\t}\n\n\tgetServer(name: string): ConnectedServer | undefined {\n\t\treturn this.servers.get(name);\n\t}\n\n\tisConnected(name: string): boolean {\n\t\treturn this.servers.has(name);\n\t}\n\n\t/**\n\t * Read a resource from an MCP server\n\t */\n\tasync readResource(\n\t\tserverName: string,\n\t\turi: string,\n\t): Promise<{\n\t\tcontents: Array<{\n\t\t\turi: string;\n\t\t\ttext?: string;\n\t\t\tblob?: string;\n\t\t\tmimeType?: string;\n\t\t}>;\n\t}> {\n\t\tconst server = this.servers.get(serverName);\n\t\tif (!server) {\n\t\t\tthrow new Error(`MCP server '${serverName}' not connected`);\n\t\t}\n\n\t\tconst result = await server.client.readResource({ uri });\n\t\treturn {\n\t\t\tcontents: result.contents.map((c) => ({\n\t\t\t\turi: c.uri,\n\t\t\t\ttext: \"text\" in c ? c.text : undefined,\n\t\t\t\tblob: \"blob\" in c ? c.blob : undefined,\n\t\t\t\tmimeType: c.mimeType,\n\t\t\t})),\n\t\t};\n\t}\n\n\t/**\n\t * Get a prompt from an MCP server\n\t */\n\tasync getPrompt(\n\t\tserverName: string,\n\t\tpromptName: string,\n\t\targs?: Record<string, string>,\n\t): Promise<{\n\t\tdescription?: string;\n\t\tmessages: Array<{ role: string; content: string }>;\n\t}> {\n\t\tconst server = this.servers.get(serverName);\n\t\tif (!server) {\n\t\t\tthrow new Error(`MCP server '${serverName}' not connected`);\n\t\t}\n\n\t\tconst result = await server.client.getPrompt({\n\t\t\tname: promptName,\n\t\t\targuments: args,\n\t\t});\n\t\treturn {\n\t\t\tdescription: result.description,\n\t\t\tmessages: result.messages.map((m) => ({\n\t\t\t\trole: m.role,\n\t\t\t\tcontent:\n\t\t\t\t\ttypeof m.content === \"string\"\n\t\t\t\t\t\t? m.content\n\t\t\t\t\t\t: m.content.type === \"text\"\n\t\t\t\t\t\t\t? m.content.text\n\t\t\t\t\t\t\t: \"[non-text content]\",\n\t\t\t})),\n\t\t};\n\t}\n}\n\n/**\n * Singleton MCP client manager instance.\n *\n * Use this for all MCP operations in the application.\n * Configure with `mcpManager.configure(config)` at startup.\n */\nexport const mcpManager = new McpClientManager();\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tool-bridge.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,KAAK,OAAO,EAAQ,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EACX,SAAS,EACT,eAAe,EAEf,MAAM,mBAAmB,CAAC;AAU3B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,UAAU,cAAc;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,kBAAkB,CAAC;IACrC,kBAAkB,CAAC,EAAE,6BAA6B,CAAC;CACnD;AAED,eAAO,MAAM,kCAAkC,mDACE,CAAC;AAElD,MAAM,MAAM,yBAAyB,GAClC,mBAAmB,GACnB,kBAAkB,GAClB,yBAAyB,GACzB,QAAQ,GACR,cAAc,CAAC;AAElB,MAAM,MAAM,iCAAiC,GAC1C,kBAAkB,GAClB,wBAAwB,GACxB,qBAAqB,GACrB,QAAQ,CAAC;AAEZ,MAAM,WAAW,6BAA6B;IAC7C,aAAa,EAAE,OAAO,kCAAkC,CAAC;IACzD,SAAS,EAAE,oBAAoB,CAAC;IAChC,KAAK,EAAE,iCAAiC,CAAC;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,yBAAyB,CAAC;IAC1C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IAClC,cAAc,EACX,mBAAmB,GACnB,kBAAkB,GAClB,yBAAyB,GACzB,QAAQ,GACR,cAAc,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,iCAAiC,CAChD,OAAO,EAAE,kBAAkB,GAAG,SAAS,GACrC,6BAA6B,GAAG,SAAS,CA0C3C;AAuSD,wBAAgB,oBAAoB,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;IACT,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACvC;;;;;;;;;;;;;;;;;;;;GAsFD;AAED,wBAAgB,cAAc,IAAI,SAAS,EAAE,CAY5C;AAED,wBAAgB,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAsBtD;AAMD,UAAU,sBAAsB;IAC/B,OAAO,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC,CAAC;CACH;AAWD;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;EA8C/B,CAAC;AAEH,UAAU,sBAAsB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,KAAK,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACH;AAWD;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;EA+C9B,CAAC;AAEH,UAAU,oBAAoB;IAC7B,OAAO,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC,CAAC;CACH;AAWD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;EA8C7B,CAAC;AAEH,UAAU,gBAAgB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnD;AAmBD;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;EA8C3B,CAAC;AAEH;;GAEG;AACH,wBAAgB,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAElC"}
1
+ {"version":3,"file":"tool-bridge.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-bridge.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { createTool } from "../tools/tool-dsl.js";
4
4
  import { promptSafeText } from "../utils/prompt-safe-text.js";
5
5
  import { mcpManager } from "./manager.js";
6
6
  import { buildMcpToolName } from "./names.js";
7
+ import { classifyToolCapability } from "./tool-capabilities.js";
7
8
  export const MCP_GOVERNED_TOOL_EXECUTION_SCHEMA = "evalops.maestro.mcp-governed-tool-execution.v1";
8
9
  export function normalizeMcpGovernedToolExecution(outcome) {
9
10
  if (!outcome) {
@@ -286,20 +287,28 @@ export function createMcpToolWrapper(serverName, mcpTool, options) {
286
287
  const parallelSafetyProvenance = options?.parallelSafety?.provenance ??
287
288
  (options?.supportsParallelToolCalls === true ? "static_config" : "none");
288
289
  const parallelMaxConcurrency = options?.parallelSafety?.maxConcurrency;
289
- const advertisedParallelReadOnly = supportsParallelToolCalls && options?.parallelSafety?.readOnlyHint === true;
290
- const annotations = mcpAnnotations || advertisedParallelReadOnly
290
+ const advertisedReadOnly = options?.parallelSafety?.readOnlyHint === true;
291
+ const annotations = mcpAnnotations || advertisedReadOnly
291
292
  ? {
292
293
  readOnlyHint: mcpAnnotations?.readOnlyHint ??
293
- (advertisedParallelReadOnly ? true : undefined),
294
+ (advertisedReadOnly ? true : undefined),
294
295
  destructiveHint: mcpAnnotations?.destructiveHint,
295
296
  idempotentHint: mcpAnnotations?.idempotentHint,
296
297
  openWorldHint: mcpAnnotations?.openWorldHint,
297
298
  }
298
299
  : undefined;
300
+ const capabilityAnnotations = annotations
301
+ ? Object.fromEntries(Object.entries(annotations).filter(([, value]) => value !== undefined))
302
+ : undefined;
299
303
  const source = {
300
304
  type: "mcp",
301
305
  server: serverName,
302
306
  tool: mcpTool.name,
307
+ capability: classifyToolCapability({
308
+ server: serverName,
309
+ toolName: mcpTool.name,
310
+ annotations: capabilityAnnotations,
311
+ }),
303
312
  supportsParallelToolCalls,
304
313
  parallelSafetyProvenance,
305
314
  ...(parallelMaxConcurrency ? { parallelMaxConcurrency } : {}),