@qodo/sdk 0.13.4 → 2.0.0-next.1

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 (764) hide show
  1. package/LICENSE +31 -118
  2. package/README.md +133 -121
  3. package/bin/qodo-skills.mjs +13 -0
  4. package/bundled-skills/code-review/SKILL.md +41 -0
  5. package/bundled-skills/pr-summary/SKILL.md +59 -0
  6. package/bundled-skills/test-gen/SKILL.md +47 -0
  7. package/dist/auth/index.browser.d.ts +38 -0
  8. package/dist/auth/index.browser.d.ts.map +1 -0
  9. package/dist/auth/index.browser.js +62 -0
  10. package/dist/auth/index.browser.js.map +1 -0
  11. package/dist/auth/index.d.ts +44 -30
  12. package/dist/auth/index.d.ts.map +1 -1
  13. package/dist/auth/index.js +57 -110
  14. package/dist/auth/index.js.map +1 -1
  15. package/dist/client/AgentsClient.d.ts +33 -0
  16. package/dist/client/AgentsClient.d.ts.map +1 -0
  17. package/dist/client/AgentsClient.js +40 -0
  18. package/dist/client/AgentsClient.js.map +1 -0
  19. package/dist/client/ArtifactsClient.d.ts +43 -0
  20. package/dist/client/ArtifactsClient.d.ts.map +1 -0
  21. package/dist/client/ArtifactsClient.js +54 -0
  22. package/dist/client/ArtifactsClient.js.map +1 -0
  23. package/dist/client/BulletinClient.d.ts +45 -0
  24. package/dist/client/BulletinClient.d.ts.map +1 -0
  25. package/dist/client/BulletinClient.js +51 -0
  26. package/dist/client/BulletinClient.js.map +1 -0
  27. package/dist/client/InfoClient.d.ts +58 -0
  28. package/dist/client/InfoClient.d.ts.map +1 -0
  29. package/dist/client/InfoClient.js +135 -0
  30. package/dist/client/InfoClient.js.map +1 -0
  31. package/dist/client/PipelineClient.d.ts +162 -0
  32. package/dist/client/PipelineClient.d.ts.map +1 -0
  33. package/dist/client/PipelineClient.js +340 -0
  34. package/dist/client/PipelineClient.js.map +1 -0
  35. package/dist/client/QarRegistryClient.d.ts +396 -0
  36. package/dist/client/QarRegistryClient.d.ts.map +1 -0
  37. package/dist/client/QarRegistryClient.js +536 -0
  38. package/dist/client/QarRegistryClient.js.map +1 -0
  39. package/dist/client/QodoClient.d.ts +296 -0
  40. package/dist/client/QodoClient.d.ts.map +1 -0
  41. package/dist/client/QodoClient.js +803 -0
  42. package/dist/client/QodoClient.js.map +1 -0
  43. package/dist/client/SpecsClient.d.ts +121 -0
  44. package/dist/client/SpecsClient.d.ts.map +1 -0
  45. package/dist/client/SpecsClient.js +252 -0
  46. package/dist/client/SpecsClient.js.map +1 -0
  47. package/dist/client/StateClient.d.ts +35 -0
  48. package/dist/client/StateClient.d.ts.map +1 -0
  49. package/dist/client/StateClient.js +36 -0
  50. package/dist/client/StateClient.js.map +1 -0
  51. package/dist/client/TaskClient.d.ts +706 -0
  52. package/dist/client/TaskClient.d.ts.map +1 -0
  53. package/dist/client/TaskClient.js +2522 -0
  54. package/dist/client/TaskClient.js.map +1 -0
  55. package/dist/client/ToolClient.d.ts +278 -0
  56. package/dist/client/ToolClient.d.ts.map +1 -0
  57. package/dist/client/ToolClient.js +1139 -0
  58. package/dist/client/ToolClient.js.map +1 -0
  59. package/dist/client/a2a/index.d.ts +10 -0
  60. package/dist/client/a2a/index.d.ts.map +1 -0
  61. package/dist/client/a2a/index.js +9 -0
  62. package/dist/client/a2a/index.js.map +1 -0
  63. package/dist/client/a2a/registerA2A.d.ts +170 -0
  64. package/dist/client/a2a/registerA2A.d.ts.map +1 -0
  65. package/dist/client/a2a/registerA2A.js +85 -0
  66. package/dist/client/a2a/registerA2A.js.map +1 -0
  67. package/dist/client/connection.d.ts +893 -0
  68. package/dist/client/connection.d.ts.map +1 -0
  69. package/dist/client/connection.js +2189 -0
  70. package/dist/client/connection.js.map +1 -0
  71. package/dist/client/errors.d.ts +735 -0
  72. package/dist/client/errors.d.ts.map +1 -0
  73. package/dist/client/errors.js +921 -0
  74. package/dist/client/errors.js.map +1 -0
  75. package/dist/client/index.d.ts +26 -0
  76. package/dist/client/index.d.ts.map +1 -0
  77. package/dist/client/index.js +20 -0
  78. package/dist/client/index.js.map +1 -0
  79. package/dist/client/inlineGraph.d.ts +66 -0
  80. package/dist/client/inlineGraph.d.ts.map +1 -0
  81. package/dist/client/inlineGraph.js +500 -0
  82. package/dist/client/inlineGraph.js.map +1 -0
  83. package/dist/client/internal/thenable.d.ts +27 -0
  84. package/dist/client/internal/thenable.d.ts.map +1 -0
  85. package/dist/client/internal/thenable.js +31 -0
  86. package/dist/client/internal/thenable.js.map +1 -0
  87. package/dist/client/iterator.d.ts +32 -0
  88. package/dist/client/iterator.d.ts.map +1 -0
  89. package/dist/client/iterator.js +73 -0
  90. package/dist/client/iterator.js.map +1 -0
  91. package/dist/client/mcp/McpClientPool.browser.d.ts +76 -0
  92. package/dist/client/mcp/McpClientPool.browser.d.ts.map +1 -0
  93. package/dist/client/mcp/McpClientPool.browser.js +78 -0
  94. package/dist/client/mcp/McpClientPool.browser.js.map +1 -0
  95. package/dist/client/mcp/McpClientPool.d.ts +236 -0
  96. package/dist/client/mcp/McpClientPool.d.ts.map +1 -0
  97. package/dist/client/mcp/McpClientPool.js +585 -0
  98. package/dist/client/mcp/McpClientPool.js.map +1 -0
  99. package/dist/client/mcp/projection.d.ts +109 -0
  100. package/dist/client/mcp/projection.d.ts.map +1 -0
  101. package/dist/client/mcp/projection.js +446 -0
  102. package/dist/client/mcp/projection.js.map +1 -0
  103. package/dist/client/mcp/substituteEnv.browser.d.ts +18 -0
  104. package/dist/client/mcp/substituteEnv.browser.d.ts.map +1 -0
  105. package/dist/client/mcp/substituteEnv.browser.js +20 -0
  106. package/dist/client/mcp/substituteEnv.browser.js.map +1 -0
  107. package/dist/client/mcp/substituteEnv.d.ts +45 -0
  108. package/dist/client/mcp/substituteEnv.d.ts.map +1 -0
  109. package/dist/client/mcp/substituteEnv.js +63 -0
  110. package/dist/client/mcp/substituteEnv.js.map +1 -0
  111. package/dist/client/observers.d.ts +57 -0
  112. package/dist/client/observers.d.ts.map +1 -0
  113. package/dist/client/observers.js +203 -0
  114. package/dist/client/observers.js.map +1 -0
  115. package/dist/client/options.d.ts +269 -0
  116. package/dist/client/options.d.ts.map +1 -0
  117. package/dist/client/options.js +9 -0
  118. package/dist/client/options.js.map +1 -0
  119. package/dist/client/tools/_readlineApprovalPrompt.browser.d.ts +17 -0
  120. package/dist/client/tools/_readlineApprovalPrompt.browser.d.ts.map +1 -0
  121. package/dist/client/tools/_readlineApprovalPrompt.browser.js +24 -0
  122. package/dist/client/tools/_readlineApprovalPrompt.browser.js.map +1 -0
  123. package/dist/client/tools/_readlineApprovalPrompt.d.ts +33 -0
  124. package/dist/client/tools/_readlineApprovalPrompt.d.ts.map +1 -0
  125. package/dist/client/tools/_readlineApprovalPrompt.js +90 -0
  126. package/dist/client/tools/_readlineApprovalPrompt.js.map +1 -0
  127. package/dist/client/tools/approval.d.ts +280 -0
  128. package/dist/client/tools/approval.d.ts.map +1 -0
  129. package/dist/client/tools/approval.js +229 -0
  130. package/dist/client/tools/approval.js.map +1 -0
  131. package/dist/client/tools/bindFunctionToolDefs.d.ts +156 -0
  132. package/dist/client/tools/bindFunctionToolDefs.d.ts.map +1 -0
  133. package/dist/client/tools/bindFunctionToolDefs.js +360 -0
  134. package/dist/client/tools/bindFunctionToolDefs.js.map +1 -0
  135. package/dist/client/tools/defineFunctionTool.d.ts +277 -0
  136. package/dist/client/tools/defineFunctionTool.d.ts.map +1 -0
  137. package/dist/client/tools/defineFunctionTool.js +190 -0
  138. package/dist/client/tools/defineFunctionTool.js.map +1 -0
  139. package/dist/client/transport.browser.d.ts +20 -0
  140. package/dist/client/transport.browser.d.ts.map +1 -0
  141. package/dist/client/transport.browser.js +29 -0
  142. package/dist/client/transport.browser.js.map +1 -0
  143. package/dist/client/transport.d.ts +47 -0
  144. package/dist/client/transport.d.ts.map +1 -0
  145. package/dist/client/transport.js +102 -0
  146. package/dist/client/transport.js.map +1 -0
  147. package/dist/client/transport.shared.d.ts +30 -0
  148. package/dist/client/transport.shared.d.ts.map +1 -0
  149. package/dist/client/transport.shared.js +40 -0
  150. package/dist/client/transport.shared.js.map +1 -0
  151. package/dist/client/uuid.d.ts +32 -0
  152. package/dist/client/uuid.d.ts.map +1 -0
  153. package/dist/client/uuid.js +65 -0
  154. package/dist/client/uuid.js.map +1 -0
  155. package/dist/index.d.ts +88 -39
  156. package/dist/index.d.ts.map +1 -1
  157. package/dist/index.js +166 -43
  158. package/dist/index.js.map +1 -1
  159. package/dist/observability/attributes.d.ts +136 -0
  160. package/dist/observability/attributes.d.ts.map +1 -0
  161. package/dist/observability/attributes.js +184 -0
  162. package/dist/observability/attributes.js.map +1 -0
  163. package/dist/observability/index.d.ts +14 -0
  164. package/dist/observability/index.d.ts.map +1 -0
  165. package/dist/observability/index.js +11 -0
  166. package/dist/observability/index.js.map +1 -0
  167. package/dist/observability/resolveOTel.browser.d.ts +13 -0
  168. package/dist/observability/resolveOTel.browser.d.ts.map +1 -0
  169. package/dist/observability/resolveOTel.browser.js +14 -0
  170. package/dist/observability/resolveOTel.browser.js.map +1 -0
  171. package/dist/observability/resolveOTel.d.ts +28 -0
  172. package/dist/observability/resolveOTel.d.ts.map +1 -0
  173. package/dist/observability/resolveOTel.js +74 -0
  174. package/dist/observability/resolveOTel.js.map +1 -0
  175. package/dist/observability/spans.d.ts +198 -0
  176. package/dist/observability/spans.d.ts.map +1 -0
  177. package/dist/observability/spans.js +300 -0
  178. package/dist/observability/spans.js.map +1 -0
  179. package/dist/observability/traceContext.d.ts +51 -0
  180. package/dist/observability/traceContext.d.ts.map +1 -0
  181. package/dist/observability/traceContext.js +151 -0
  182. package/dist/observability/traceContext.js.map +1 -0
  183. package/dist/observability/transportMetrics.d.ts +58 -0
  184. package/dist/observability/transportMetrics.d.ts.map +1 -0
  185. package/dist/observability/transportMetrics.js +55 -0
  186. package/dist/observability/transportMetrics.js.map +1 -0
  187. package/dist/qar/agentSpec.d.ts +93 -0
  188. package/dist/qar/agentSpec.d.ts.map +1 -0
  189. package/dist/qar/agentSpec.js +184 -0
  190. package/dist/qar/agentSpec.js.map +1 -0
  191. package/dist/qar/clientEvents.d.ts +86 -0
  192. package/dist/qar/clientEvents.d.ts.map +1 -0
  193. package/dist/qar/clientEvents.js +36 -0
  194. package/dist/qar/clientEvents.js.map +1 -0
  195. package/dist/qar/envelopes.d.ts +227 -0
  196. package/dist/qar/envelopes.d.ts.map +1 -0
  197. package/dist/qar/envelopes.js +67 -0
  198. package/dist/qar/envelopes.js.map +1 -0
  199. package/dist/qar/generated/envelope.d.ts +332 -0
  200. package/dist/qar/generated/envelope.d.ts.map +1 -0
  201. package/dist/qar/generated/envelope.js +15 -0
  202. package/dist/qar/generated/envelope.js.map +1 -0
  203. package/dist/qar/generated/qar-info.d.ts +76 -0
  204. package/dist/qar/generated/qar-info.d.ts.map +1 -0
  205. package/dist/qar/generated/qar-info.js +15 -0
  206. package/dist/qar/generated/qar-info.js.map +1 -0
  207. package/dist/qar/generated/qodo-task-start-payload.d.ts +54 -0
  208. package/dist/qar/generated/qodo-task-start-payload.d.ts.map +1 -0
  209. package/dist/qar/generated/qodo-task-start-payload.js +15 -0
  210. package/dist/qar/generated/qodo-task-start-payload.js.map +1 -0
  211. package/dist/qar/ids.d.ts +19 -0
  212. package/dist/qar/ids.d.ts.map +1 -0
  213. package/dist/qar/ids.js +11 -0
  214. package/dist/qar/ids.js.map +1 -0
  215. package/dist/qar/index.d.ts +24 -0
  216. package/dist/qar/index.d.ts.map +1 -0
  217. package/dist/qar/index.js +16 -0
  218. package/dist/qar/index.js.map +1 -0
  219. package/dist/qar/info.d.ts +37 -0
  220. package/dist/qar/info.d.ts.map +1 -0
  221. package/dist/qar/info.js +17 -0
  222. package/dist/qar/info.js.map +1 -0
  223. package/dist/qar/json.d.ts +14 -0
  224. package/dist/qar/json.d.ts.map +1 -0
  225. package/dist/qar/json.js +9 -0
  226. package/dist/qar/json.js.map +1 -0
  227. package/dist/qar/payloads.d.ts +480 -0
  228. package/dist/qar/payloads.d.ts.map +1 -0
  229. package/dist/qar/payloads.js +37 -0
  230. package/dist/qar/payloads.js.map +1 -0
  231. package/dist/qar/specs.d.ts +604 -0
  232. package/dist/qar/specs.d.ts.map +1 -0
  233. package/dist/qar/specs.js +29 -0
  234. package/dist/qar/specs.js.map +1 -0
  235. package/dist/qar/taskEvents.d.ts +25 -0
  236. package/dist/qar/taskEvents.d.ts.map +1 -0
  237. package/dist/qar/taskEvents.js +22 -0
  238. package/dist/qar/taskEvents.js.map +1 -0
  239. package/dist/qar/trace.d.ts +12 -0
  240. package/dist/qar/trace.d.ts.map +1 -0
  241. package/dist/qar/trace.js +12 -0
  242. package/dist/qar/trace.js.map +1 -0
  243. package/dist/skills/activation.d.ts +177 -0
  244. package/dist/skills/activation.d.ts.map +1 -0
  245. package/dist/skills/activation.js +428 -0
  246. package/dist/skills/activation.js.map +1 -0
  247. package/dist/skills/cli/index.browser.d.ts +18 -0
  248. package/dist/skills/cli/index.browser.d.ts.map +1 -0
  249. package/dist/skills/cli/index.browser.js +27 -0
  250. package/dist/skills/cli/index.browser.js.map +1 -0
  251. package/dist/skills/cli/index.d.ts +37 -0
  252. package/dist/skills/cli/index.d.ts.map +1 -0
  253. package/dist/skills/cli/index.js +494 -0
  254. package/dist/skills/cli/index.js.map +1 -0
  255. package/dist/skills/events.d.ts +255 -0
  256. package/dist/skills/events.d.ts.map +1 -0
  257. package/dist/skills/events.js +224 -0
  258. package/dist/skills/events.js.map +1 -0
  259. package/dist/skills/index.d.ts +45 -0
  260. package/dist/skills/index.d.ts.map +1 -0
  261. package/dist/skills/index.js +34 -0
  262. package/dist/skills/index.js.map +1 -0
  263. package/dist/skills/inject.d.ts +57 -0
  264. package/dist/skills/inject.d.ts.map +1 -0
  265. package/dist/skills/inject.js +162 -0
  266. package/dist/skills/inject.js.map +1 -0
  267. package/dist/skills/lockfile.browser.d.ts +56 -0
  268. package/dist/skills/lockfile.browser.d.ts.map +1 -0
  269. package/dist/skills/lockfile.browser.js +55 -0
  270. package/dist/skills/lockfile.browser.js.map +1 -0
  271. package/dist/skills/lockfile.d.ts +137 -0
  272. package/dist/skills/lockfile.d.ts.map +1 -0
  273. package/dist/skills/lockfile.js +423 -0
  274. package/dist/skills/lockfile.js.map +1 -0
  275. package/dist/skills/manager.browser.d.ts +94 -0
  276. package/dist/skills/manager.browser.d.ts.map +1 -0
  277. package/dist/skills/manager.browser.js +159 -0
  278. package/dist/skills/manager.browser.js.map +1 -0
  279. package/dist/skills/manager.d.ts +362 -0
  280. package/dist/skills/manager.d.ts.map +1 -0
  281. package/dist/skills/manager.js +1386 -0
  282. package/dist/skills/manager.js.map +1 -0
  283. package/dist/skills/mcp/index.d.ts +15 -0
  284. package/dist/skills/mcp/index.d.ts.map +1 -0
  285. package/dist/skills/mcp/index.js +12 -0
  286. package/dist/skills/mcp/index.js.map +1 -0
  287. package/dist/skills/mcp/path.browser.d.ts +27 -0
  288. package/dist/skills/mcp/path.browser.d.ts.map +1 -0
  289. package/dist/skills/mcp/path.browser.js +33 -0
  290. package/dist/skills/mcp/path.browser.js.map +1 -0
  291. package/dist/skills/mcp/path.d.ts +57 -0
  292. package/dist/skills/mcp/path.d.ts.map +1 -0
  293. package/dist/skills/mcp/path.js +150 -0
  294. package/dist/skills/mcp/path.js.map +1 -0
  295. package/dist/skills/mcp/server.browser.d.ts +32 -0
  296. package/dist/skills/mcp/server.browser.d.ts.map +1 -0
  297. package/dist/skills/mcp/server.browser.js +53 -0
  298. package/dist/skills/mcp/server.browser.js.map +1 -0
  299. package/dist/skills/mcp/server.d.ts +144 -0
  300. package/dist/skills/mcp/server.d.ts.map +1 -0
  301. package/dist/skills/mcp/server.js +841 -0
  302. package/dist/skills/mcp/server.js.map +1 -0
  303. package/dist/skills/mcp/types.d.ts +72 -0
  304. package/dist/skills/mcp/types.d.ts.map +1 -0
  305. package/dist/skills/mcp/types.js +20 -0
  306. package/dist/skills/mcp/types.js.map +1 -0
  307. package/dist/skills/mcp/wireDefs.d.ts +58 -0
  308. package/dist/skills/mcp/wireDefs.d.ts.map +1 -0
  309. package/dist/skills/mcp/wireDefs.js +141 -0
  310. package/dist/skills/mcp/wireDefs.js.map +1 -0
  311. package/dist/skills/parser.d.ts +63 -0
  312. package/dist/skills/parser.d.ts.map +1 -0
  313. package/dist/skills/parser.js +755 -0
  314. package/dist/skills/parser.js.map +1 -0
  315. package/dist/skills/prefilter.d.ts +104 -0
  316. package/dist/skills/prefilter.d.ts.map +1 -0
  317. package/dist/skills/prefilter.js +398 -0
  318. package/dist/skills/prefilter.js.map +1 -0
  319. package/dist/skills/preprocess.d.ts +169 -0
  320. package/dist/skills/preprocess.d.ts.map +1 -0
  321. package/dist/skills/preprocess.js +535 -0
  322. package/dist/skills/preprocess.js.map +1 -0
  323. package/dist/skills/render.d.ts +83 -0
  324. package/dist/skills/render.d.ts.map +1 -0
  325. package/dist/skills/render.js +397 -0
  326. package/dist/skills/render.js.map +1 -0
  327. package/dist/skills/sources/index.browser.d.ts +29 -0
  328. package/dist/skills/sources/index.browser.d.ts.map +1 -0
  329. package/dist/skills/sources/index.browser.js +16 -0
  330. package/dist/skills/sources/index.browser.js.map +1 -0
  331. package/dist/skills/sources/index.d.ts +59 -0
  332. package/dist/skills/sources/index.d.ts.map +1 -0
  333. package/dist/skills/sources/index.js +471 -0
  334. package/dist/skills/sources/index.js.map +1 -0
  335. package/dist/skills/sources/walk.browser.d.ts +17 -0
  336. package/dist/skills/sources/walk.browser.d.ts.map +1 -0
  337. package/dist/skills/sources/walk.browser.js +19 -0
  338. package/dist/skills/sources/walk.browser.js.map +1 -0
  339. package/dist/skills/sources/walk.d.ts +68 -0
  340. package/dist/skills/sources/walk.d.ts.map +1 -0
  341. package/dist/skills/sources/walk.js +264 -0
  342. package/dist/skills/sources/walk.js.map +1 -0
  343. package/dist/skills/substitute.d.ts +87 -0
  344. package/dist/skills/substitute.d.ts.map +1 -0
  345. package/dist/skills/substitute.js +322 -0
  346. package/dist/skills/substitute.js.map +1 -0
  347. package/dist/skills/testing/SkillKit.browser.d.ts +62 -0
  348. package/dist/skills/testing/SkillKit.browser.d.ts.map +1 -0
  349. package/dist/skills/testing/SkillKit.browser.js +41 -0
  350. package/dist/skills/testing/SkillKit.browser.js.map +1 -0
  351. package/dist/skills/testing/SkillKit.d.ts +130 -0
  352. package/dist/skills/testing/SkillKit.d.ts.map +1 -0
  353. package/dist/skills/testing/SkillKit.js +316 -0
  354. package/dist/skills/testing/SkillKit.js.map +1 -0
  355. package/dist/skills/testing/index.d.ts +9 -0
  356. package/dist/skills/testing/index.d.ts.map +1 -0
  357. package/dist/skills/testing/index.js +8 -0
  358. package/dist/skills/testing/index.js.map +1 -0
  359. package/dist/skills/trust.d.ts +72 -0
  360. package/dist/skills/trust.d.ts.map +1 -0
  361. package/dist/skills/trust.js +183 -0
  362. package/dist/skills/trust.js.map +1 -0
  363. package/dist/skills/types.d.ts +627 -0
  364. package/dist/skills/types.d.ts.map +1 -0
  365. package/dist/skills/types.js +85 -0
  366. package/dist/skills/types.js.map +1 -0
  367. package/dist/skills/validator.d.ts +95 -0
  368. package/dist/skills/validator.d.ts.map +1 -0
  369. package/dist/skills/validator.js +486 -0
  370. package/dist/skills/validator.js.map +1 -0
  371. package/dist/tracing/PipelineTracer.d.ts +35 -22
  372. package/dist/tracing/PipelineTracer.d.ts.map +1 -1
  373. package/dist/tracing/PipelineTracer.js +106 -61
  374. package/dist/tracing/PipelineTracer.js.map +1 -1
  375. package/dist/tracing/SdkTracer.d.ts +63 -61
  376. package/dist/tracing/SdkTracer.d.ts.map +1 -1
  377. package/dist/tracing/SdkTracer.js +185 -177
  378. package/dist/tracing/SdkTracer.js.map +1 -1
  379. package/dist/tracing/index.d.ts +10 -1
  380. package/dist/tracing/index.d.ts.map +1 -1
  381. package/dist/tracing/index.js +9 -0
  382. package/dist/tracing/index.js.map +1 -1
  383. package/dist/tracing/types.d.ts +89 -16
  384. package/dist/tracing/types.d.ts.map +1 -1
  385. package/dist/tracing/types.js +17 -4
  386. package/dist/tracing/types.js.map +1 -1
  387. package/dist/types.d.ts +6 -1
  388. package/dist/types.d.ts.map +1 -1
  389. package/dist/types.js +4 -0
  390. package/dist/types.js.map +1 -1
  391. package/dist/version.d.ts.map +1 -1
  392. package/dist/version.js +10 -20
  393. package/dist/version.js.map +1 -1
  394. package/package.json +53 -39
  395. package/.claude/skills/qodo-agent/SKILL.md +0 -974
  396. package/.claude/skills/qodo-agent/assets/programmatic-agent.ts +0 -407
  397. package/.claude/skills/qodo-agent/references/builtin-tools.md +0 -342
  398. package/.claude/skills/qodo-agent/references/common-issues.md +0 -537
  399. package/bin/rg +0 -0
  400. package/dist/api/agent.d.ts +0 -105
  401. package/dist/api/agent.d.ts.map +0 -1
  402. package/dist/api/agent.js +0 -963
  403. package/dist/api/agent.js.map +0 -1
  404. package/dist/api/analytics.d.ts +0 -43
  405. package/dist/api/analytics.d.ts.map +0 -1
  406. package/dist/api/analytics.js +0 -163
  407. package/dist/api/analytics.js.map +0 -1
  408. package/dist/api/http.d.ts +0 -5
  409. package/dist/api/http.d.ts.map +0 -1
  410. package/dist/api/http.js +0 -62
  411. package/dist/api/http.js.map +0 -1
  412. package/dist/api/index.d.ts +0 -12
  413. package/dist/api/index.d.ts.map +0 -1
  414. package/dist/api/index.js +0 -17
  415. package/dist/api/index.js.map +0 -1
  416. package/dist/api/taskTracking.d.ts +0 -54
  417. package/dist/api/taskTracking.d.ts.map +0 -1
  418. package/dist/api/taskTracking.js +0 -208
  419. package/dist/api/taskTracking.js.map +0 -1
  420. package/dist/api/types.d.ts +0 -93
  421. package/dist/api/types.d.ts.map +0 -1
  422. package/dist/api/types.js +0 -2
  423. package/dist/api/types.js.map +0 -1
  424. package/dist/api/utils.d.ts +0 -8
  425. package/dist/api/utils.d.ts.map +0 -1
  426. package/dist/api/utils.js +0 -63
  427. package/dist/api/utils.js.map +0 -1
  428. package/dist/api/websocket.d.ts +0 -203
  429. package/dist/api/websocket.d.ts.map +0 -1
  430. package/dist/api/websocket.js +0 -1166
  431. package/dist/api/websocket.js.map +0 -1
  432. package/dist/bin/install-skill.d.ts +0 -14
  433. package/dist/bin/install-skill.d.ts.map +0 -1
  434. package/dist/bin/install-skill.js +0 -125
  435. package/dist/bin/install-skill.js.map +0 -1
  436. package/dist/bin/run-helpers.d.ts +0 -34
  437. package/dist/bin/run-helpers.d.ts.map +0 -1
  438. package/dist/bin/run-helpers.js +0 -186
  439. package/dist/bin/run-helpers.js.map +0 -1
  440. package/dist/bin/run.d.ts +0 -13
  441. package/dist/bin/run.d.ts.map +0 -1
  442. package/dist/bin/run.js +0 -57
  443. package/dist/bin/run.js.map +0 -1
  444. package/dist/clients/index.d.ts +0 -10
  445. package/dist/clients/index.d.ts.map +0 -1
  446. package/dist/clients/index.js +0 -8
  447. package/dist/clients/index.js.map +0 -1
  448. package/dist/clients/info/InfoClient.d.ts +0 -37
  449. package/dist/clients/info/InfoClient.d.ts.map +0 -1
  450. package/dist/clients/info/InfoClient.js +0 -69
  451. package/dist/clients/info/InfoClient.js.map +0 -1
  452. package/dist/clients/info/index.d.ts +0 -4
  453. package/dist/clients/info/index.d.ts.map +0 -1
  454. package/dist/clients/info/index.js +0 -2
  455. package/dist/clients/info/index.js.map +0 -1
  456. package/dist/clients/info/types.d.ts +0 -21
  457. package/dist/clients/info/types.d.ts.map +0 -1
  458. package/dist/clients/info/types.js +0 -2
  459. package/dist/clients/info/types.js.map +0 -1
  460. package/dist/clients/sessions/SessionsClient.d.ts +0 -34
  461. package/dist/clients/sessions/SessionsClient.d.ts.map +0 -1
  462. package/dist/clients/sessions/SessionsClient.js +0 -71
  463. package/dist/clients/sessions/SessionsClient.js.map +0 -1
  464. package/dist/clients/sessions/index.d.ts +0 -4
  465. package/dist/clients/sessions/index.d.ts.map +0 -1
  466. package/dist/clients/sessions/index.js +0 -2
  467. package/dist/clients/sessions/index.js.map +0 -1
  468. package/dist/clients/sessions/types.d.ts +0 -20
  469. package/dist/clients/sessions/types.d.ts.map +0 -1
  470. package/dist/clients/sessions/types.js +0 -2
  471. package/dist/clients/sessions/types.js.map +0 -1
  472. package/dist/clients/tools/ToolsClient.d.ts +0 -39
  473. package/dist/clients/tools/ToolsClient.d.ts.map +0 -1
  474. package/dist/clients/tools/ToolsClient.js +0 -95
  475. package/dist/clients/tools/ToolsClient.js.map +0 -1
  476. package/dist/clients/tools/index.d.ts +0 -4
  477. package/dist/clients/tools/index.d.ts.map +0 -1
  478. package/dist/clients/tools/index.js +0 -2
  479. package/dist/clients/tools/index.js.map +0 -1
  480. package/dist/clients/tools/types.d.ts +0 -14
  481. package/dist/clients/tools/types.d.ts.map +0 -1
  482. package/dist/clients/tools/types.js +0 -2
  483. package/dist/clients/tools/types.js.map +0 -1
  484. package/dist/config/ConfigManager.d.ts +0 -43
  485. package/dist/config/ConfigManager.d.ts.map +0 -1
  486. package/dist/config/ConfigManager.js +0 -472
  487. package/dist/config/ConfigManager.js.map +0 -1
  488. package/dist/config/index.d.ts +0 -6
  489. package/dist/config/index.d.ts.map +0 -1
  490. package/dist/config/index.js +0 -7
  491. package/dist/config/index.js.map +0 -1
  492. package/dist/config/urlConfig.d.ts +0 -15
  493. package/dist/config/urlConfig.d.ts.map +0 -1
  494. package/dist/config/urlConfig.js +0 -75
  495. package/dist/config/urlConfig.js.map +0 -1
  496. package/dist/constants/errors.d.ts +0 -2
  497. package/dist/constants/errors.d.ts.map +0 -1
  498. package/dist/constants/errors.js +0 -2
  499. package/dist/constants/errors.js.map +0 -1
  500. package/dist/constants/index.d.ts +0 -7
  501. package/dist/constants/index.d.ts.map +0 -1
  502. package/dist/constants/index.js +0 -11
  503. package/dist/constants/index.js.map +0 -1
  504. package/dist/constants/tools.d.ts +0 -4
  505. package/dist/constants/tools.d.ts.map +0 -1
  506. package/dist/constants/tools.js +0 -4
  507. package/dist/constants/tools.js.map +0 -1
  508. package/dist/constants/versions.d.ts +0 -2
  509. package/dist/constants/versions.d.ts.map +0 -1
  510. package/dist/constants/versions.js +0 -2
  511. package/dist/constants/versions.js.map +0 -1
  512. package/dist/context/buildUserContext.d.ts +0 -18
  513. package/dist/context/buildUserContext.d.ts.map +0 -1
  514. package/dist/context/buildUserContext.js +0 -34
  515. package/dist/context/buildUserContext.js.map +0 -1
  516. package/dist/context/index.d.ts +0 -9
  517. package/dist/context/index.d.ts.map +0 -1
  518. package/dist/context/index.js +0 -9
  519. package/dist/context/index.js.map +0 -1
  520. package/dist/context/messageManager.d.ts +0 -42
  521. package/dist/context/messageManager.d.ts.map +0 -1
  522. package/dist/context/messageManager.js +0 -322
  523. package/dist/context/messageManager.js.map +0 -1
  524. package/dist/context/taskFocus.d.ts +0 -2
  525. package/dist/context/taskFocus.d.ts.map +0 -1
  526. package/dist/context/taskFocus.js +0 -26
  527. package/dist/context/taskFocus.js.map +0 -1
  528. package/dist/context/userInput.d.ts +0 -3
  529. package/dist/context/userInput.d.ts.map +0 -1
  530. package/dist/context/userInput.js +0 -20
  531. package/dist/context/userInput.js.map +0 -1
  532. package/dist/mcp/MCPManager.d.ts +0 -109
  533. package/dist/mcp/MCPManager.d.ts.map +0 -1
  534. package/dist/mcp/MCPManager.js +0 -592
  535. package/dist/mcp/MCPManager.js.map +0 -1
  536. package/dist/mcp/approvedTools.d.ts +0 -4
  537. package/dist/mcp/approvedTools.d.ts.map +0 -1
  538. package/dist/mcp/approvedTools.js +0 -19
  539. package/dist/mcp/approvedTools.js.map +0 -1
  540. package/dist/mcp/baseServer.d.ts +0 -75
  541. package/dist/mcp/baseServer.d.ts.map +0 -1
  542. package/dist/mcp/baseServer.js +0 -107
  543. package/dist/mcp/baseServer.js.map +0 -1
  544. package/dist/mcp/builtinServers.d.ts +0 -15
  545. package/dist/mcp/builtinServers.d.ts.map +0 -1
  546. package/dist/mcp/builtinServers.js +0 -141
  547. package/dist/mcp/builtinServers.js.map +0 -1
  548. package/dist/mcp/dynamicBEServer.d.ts +0 -20
  549. package/dist/mcp/dynamicBEServer.d.ts.map +0 -1
  550. package/dist/mcp/dynamicBEServer.js +0 -52
  551. package/dist/mcp/dynamicBEServer.js.map +0 -1
  552. package/dist/mcp/index.d.ts +0 -18
  553. package/dist/mcp/index.d.ts.map +0 -1
  554. package/dist/mcp/index.js +0 -23
  555. package/dist/mcp/index.js.map +0 -1
  556. package/dist/mcp/mcpInitialization.d.ts +0 -2
  557. package/dist/mcp/mcpInitialization.d.ts.map +0 -1
  558. package/dist/mcp/mcpInitialization.js +0 -56
  559. package/dist/mcp/mcpInitialization.js.map +0 -1
  560. package/dist/mcp/servers/filesystem.d.ts +0 -44
  561. package/dist/mcp/servers/filesystem.d.ts.map +0 -1
  562. package/dist/mcp/servers/filesystem.js +0 -776
  563. package/dist/mcp/servers/filesystem.js.map +0 -1
  564. package/dist/mcp/servers/git.d.ts +0 -18
  565. package/dist/mcp/servers/git.d.ts.map +0 -1
  566. package/dist/mcp/servers/git.js +0 -441
  567. package/dist/mcp/servers/git.js.map +0 -1
  568. package/dist/mcp/servers/ripgrep.d.ts +0 -39
  569. package/dist/mcp/servers/ripgrep.d.ts.map +0 -1
  570. package/dist/mcp/servers/ripgrep.js +0 -550
  571. package/dist/mcp/servers/ripgrep.js.map +0 -1
  572. package/dist/mcp/servers/shell.d.ts +0 -20
  573. package/dist/mcp/servers/shell.d.ts.map +0 -1
  574. package/dist/mcp/servers/shell.js +0 -519
  575. package/dist/mcp/servers/shell.js.map +0 -1
  576. package/dist/mcp/serversRegistry.d.ts +0 -55
  577. package/dist/mcp/serversRegistry.d.ts.map +0 -1
  578. package/dist/mcp/serversRegistry.js +0 -416
  579. package/dist/mcp/serversRegistry.js.map +0 -1
  580. package/dist/mcp/toolProcessor.d.ts +0 -82
  581. package/dist/mcp/toolProcessor.d.ts.map +0 -1
  582. package/dist/mcp/toolProcessor.js +0 -392
  583. package/dist/mcp/toolProcessor.js.map +0 -1
  584. package/dist/mcp/types.d.ts +0 -29
  585. package/dist/mcp/types.d.ts.map +0 -1
  586. package/dist/mcp/types.js +0 -2
  587. package/dist/mcp/types.js.map +0 -1
  588. package/dist/messages/index.d.ts +0 -8
  589. package/dist/messages/index.d.ts.map +0 -1
  590. package/dist/messages/index.js +0 -7
  591. package/dist/messages/index.js.map +0 -1
  592. package/dist/messages/openai.d.ts +0 -26
  593. package/dist/messages/openai.d.ts.map +0 -1
  594. package/dist/messages/openai.js +0 -55
  595. package/dist/messages/openai.js.map +0 -1
  596. package/dist/messages/types.d.ts +0 -73
  597. package/dist/messages/types.d.ts.map +0 -1
  598. package/dist/messages/types.js +0 -78
  599. package/dist/messages/types.js.map +0 -1
  600. package/dist/parser/index.d.ts +0 -72
  601. package/dist/parser/index.d.ts.map +0 -1
  602. package/dist/parser/index.js +0 -967
  603. package/dist/parser/index.js.map +0 -1
  604. package/dist/parser/types.d.ts +0 -153
  605. package/dist/parser/types.d.ts.map +0 -1
  606. package/dist/parser/types.js +0 -6
  607. package/dist/parser/types.js.map +0 -1
  608. package/dist/parser/utils.d.ts +0 -18
  609. package/dist/parser/utils.d.ts.map +0 -1
  610. package/dist/parser/utils.js +0 -64
  611. package/dist/parser/utils.js.map +0 -1
  612. package/dist/sdk/QodoSDK.d.ts +0 -218
  613. package/dist/sdk/QodoSDK.d.ts.map +0 -1
  614. package/dist/sdk/QodoSDK.js +0 -1115
  615. package/dist/sdk/QodoSDK.js.map +0 -1
  616. package/dist/sdk/artifacts.d.ts +0 -156
  617. package/dist/sdk/artifacts.d.ts.map +0 -1
  618. package/dist/sdk/artifacts.js +0 -166
  619. package/dist/sdk/artifacts.js.map +0 -1
  620. package/dist/sdk/bootstrap.d.ts +0 -16
  621. package/dist/sdk/bootstrap.d.ts.map +0 -1
  622. package/dist/sdk/bootstrap.js +0 -28
  623. package/dist/sdk/bootstrap.js.map +0 -1
  624. package/dist/sdk/builders.d.ts +0 -54
  625. package/dist/sdk/builders.d.ts.map +0 -1
  626. package/dist/sdk/builders.js +0 -117
  627. package/dist/sdk/builders.js.map +0 -1
  628. package/dist/sdk/defaults.d.ts +0 -11
  629. package/dist/sdk/defaults.d.ts.map +0 -1
  630. package/dist/sdk/defaults.js +0 -39
  631. package/dist/sdk/defaults.js.map +0 -1
  632. package/dist/sdk/discovery.d.ts +0 -2
  633. package/dist/sdk/discovery.d.ts.map +0 -1
  634. package/dist/sdk/discovery.js +0 -25
  635. package/dist/sdk/discovery.js.map +0 -1
  636. package/dist/sdk/events.d.ts +0 -269
  637. package/dist/sdk/events.d.ts.map +0 -1
  638. package/dist/sdk/events.js +0 -69
  639. package/dist/sdk/events.js.map +0 -1
  640. package/dist/sdk/exit-expression.d.ts +0 -13
  641. package/dist/sdk/exit-expression.d.ts.map +0 -1
  642. package/dist/sdk/exit-expression.js +0 -35
  643. package/dist/sdk/exit-expression.js.map +0 -1
  644. package/dist/sdk/index.d.ts +0 -17
  645. package/dist/sdk/index.d.ts.map +0 -1
  646. package/dist/sdk/index.js +0 -17
  647. package/dist/sdk/index.js.map +0 -1
  648. package/dist/sdk/middleware.d.ts +0 -59
  649. package/dist/sdk/middleware.d.ts.map +0 -1
  650. package/dist/sdk/middleware.js +0 -69
  651. package/dist/sdk/middleware.js.map +0 -1
  652. package/dist/sdk/pipeline/PipelineBuilder.d.ts +0 -79
  653. package/dist/sdk/pipeline/PipelineBuilder.d.ts.map +0 -1
  654. package/dist/sdk/pipeline/PipelineBuilder.js +0 -129
  655. package/dist/sdk/pipeline/PipelineBuilder.js.map +0 -1
  656. package/dist/sdk/pipeline/PipelineRunner.d.ts +0 -28
  657. package/dist/sdk/pipeline/PipelineRunner.d.ts.map +0 -1
  658. package/dist/sdk/pipeline/PipelineRunner.js +0 -326
  659. package/dist/sdk/pipeline/PipelineRunner.js.map +0 -1
  660. package/dist/sdk/pipeline/compiler.d.ts +0 -24
  661. package/dist/sdk/pipeline/compiler.d.ts.map +0 -1
  662. package/dist/sdk/pipeline/compiler.js +0 -199
  663. package/dist/sdk/pipeline/compiler.js.map +0 -1
  664. package/dist/sdk/pipeline/declarative.d.ts +0 -34
  665. package/dist/sdk/pipeline/declarative.d.ts.map +0 -1
  666. package/dist/sdk/pipeline/declarative.js +0 -9
  667. package/dist/sdk/pipeline/declarative.js.map +0 -1
  668. package/dist/sdk/pipeline/index.d.ts +0 -20
  669. package/dist/sdk/pipeline/index.d.ts.map +0 -1
  670. package/dist/sdk/pipeline/index.js +0 -19
  671. package/dist/sdk/pipeline/index.js.map +0 -1
  672. package/dist/sdk/pipeline/types.d.ts +0 -93
  673. package/dist/sdk/pipeline/types.d.ts.map +0 -1
  674. package/dist/sdk/pipeline/types.js +0 -10
  675. package/dist/sdk/pipeline/types.js.map +0 -1
  676. package/dist/sdk/policies.d.ts +0 -163
  677. package/dist/sdk/policies.d.ts.map +0 -1
  678. package/dist/sdk/policies.js +0 -243
  679. package/dist/sdk/policies.js.map +0 -1
  680. package/dist/sdk/runner/AgentRunner.d.ts +0 -22
  681. package/dist/sdk/runner/AgentRunner.d.ts.map +0 -1
  682. package/dist/sdk/runner/AgentRunner.js +0 -222
  683. package/dist/sdk/runner/AgentRunner.js.map +0 -1
  684. package/dist/sdk/runner/finalize.d.ts +0 -56
  685. package/dist/sdk/runner/finalize.d.ts.map +0 -1
  686. package/dist/sdk/runner/finalize.js +0 -155
  687. package/dist/sdk/runner/finalize.js.map +0 -1
  688. package/dist/sdk/runner/formats.d.ts +0 -7
  689. package/dist/sdk/runner/formats.d.ts.map +0 -1
  690. package/dist/sdk/runner/formats.js +0 -76
  691. package/dist/sdk/runner/formats.js.map +0 -1
  692. package/dist/sdk/runner/index.d.ts +0 -9
  693. package/dist/sdk/runner/index.d.ts.map +0 -1
  694. package/dist/sdk/runner/index.js +0 -9
  695. package/dist/sdk/runner/index.js.map +0 -1
  696. package/dist/sdk/runner/progress.d.ts +0 -3
  697. package/dist/sdk/runner/progress.d.ts.map +0 -1
  698. package/dist/sdk/runner/progress.js +0 -16
  699. package/dist/sdk/runner/progress.js.map +0 -1
  700. package/dist/sdk/schemas.d.ts +0 -72
  701. package/dist/sdk/schemas.d.ts.map +0 -1
  702. package/dist/sdk/schemas.js +0 -282
  703. package/dist/sdk/schemas.js.map +0 -1
  704. package/dist/sdk/trigger-context.d.ts +0 -24
  705. package/dist/sdk/trigger-context.d.ts.map +0 -1
  706. package/dist/sdk/trigger-context.js +0 -136
  707. package/dist/sdk/trigger-context.js.map +0 -1
  708. package/dist/session/SessionContext.d.ts +0 -89
  709. package/dist/session/SessionContext.d.ts.map +0 -1
  710. package/dist/session/SessionContext.js +0 -410
  711. package/dist/session/SessionContext.js.map +0 -1
  712. package/dist/session/environment.d.ts +0 -52
  713. package/dist/session/environment.d.ts.map +0 -1
  714. package/dist/session/environment.js +0 -27
  715. package/dist/session/environment.js.map +0 -1
  716. package/dist/session/history.d.ts +0 -18
  717. package/dist/session/history.d.ts.map +0 -1
  718. package/dist/session/history.js +0 -68
  719. package/dist/session/history.js.map +0 -1
  720. package/dist/session/index.d.ts +0 -10
  721. package/dist/session/index.d.ts.map +0 -1
  722. package/dist/session/index.js +0 -9
  723. package/dist/session/index.js.map +0 -1
  724. package/dist/session/serverData.d.ts +0 -38
  725. package/dist/session/serverData.d.ts.map +0 -1
  726. package/dist/session/serverData.js +0 -261
  727. package/dist/session/serverData.js.map +0 -1
  728. package/dist/tracing/pipelineHelpers.d.ts +0 -29
  729. package/dist/tracing/pipelineHelpers.d.ts.map +0 -1
  730. package/dist/tracing/pipelineHelpers.js +0 -224
  731. package/dist/tracing/pipelineHelpers.js.map +0 -1
  732. package/dist/tracking/Tracker.d.ts +0 -55
  733. package/dist/tracking/Tracker.d.ts.map +0 -1
  734. package/dist/tracking/Tracker.js +0 -217
  735. package/dist/tracking/Tracker.js.map +0 -1
  736. package/dist/tracking/index.d.ts +0 -8
  737. package/dist/tracking/index.d.ts.map +0 -1
  738. package/dist/tracking/index.js +0 -8
  739. package/dist/tracking/index.js.map +0 -1
  740. package/dist/tracking/schemas.d.ts +0 -292
  741. package/dist/tracking/schemas.d.ts.map +0 -1
  742. package/dist/tracking/schemas.js +0 -91
  743. package/dist/tracking/schemas.js.map +0 -1
  744. package/dist/utils/extractSetFlags.d.ts +0 -6
  745. package/dist/utils/extractSetFlags.d.ts.map +0 -1
  746. package/dist/utils/extractSetFlags.js +0 -16
  747. package/dist/utils/extractSetFlags.js.map +0 -1
  748. package/dist/utils/formatTimeAgo.d.ts +0 -2
  749. package/dist/utils/formatTimeAgo.d.ts.map +0 -1
  750. package/dist/utils/formatTimeAgo.js +0 -20
  751. package/dist/utils/formatTimeAgo.js.map +0 -1
  752. package/dist/utils/index.d.ts +0 -12
  753. package/dist/utils/index.d.ts.map +0 -1
  754. package/dist/utils/index.js +0 -12
  755. package/dist/utils/index.js.map +0 -1
  756. package/dist/utils/machineId.d.ts +0 -14
  757. package/dist/utils/machineId.d.ts.map +0 -1
  758. package/dist/utils/machineId.js +0 -66
  759. package/dist/utils/machineId.js.map +0 -1
  760. package/dist/utils/pathUtils.d.ts +0 -22
  761. package/dist/utils/pathUtils.d.ts.map +0 -1
  762. package/dist/utils/pathUtils.js +0 -54
  763. package/dist/utils/pathUtils.js.map +0 -1
  764. package/scripts/download-ripgrep.js +0 -269
@@ -0,0 +1,585 @@
1
+ /**
2
+ * `McpClientPool` — owns the connected `@modelcontextprotocol/sdk` `Client`
3
+ * instances for remote (Streamable HTTP / SSE) and stdio MCPs registered via
4
+ * `client.qar.registerMcp`. The SDK does not invent a wheel here — every
5
+ * piece of MCP protocol mechanics (JSON-RPC framing, initialize handshake,
6
+ * capability negotiation, tool listing, tool invocation) is owned by the
7
+ * canonical MCP TypeScript SDK; this pool is the thin facade that maps the
8
+ * SDK's `McpConfig` discriminator onto the right `Transport` constructor,
9
+ * holds the live `Client`, and dispatches `callTool` round-trips.
10
+ *
11
+ * **Lifecycle.**
12
+ * - `register(name, config)` is sync — it instantiates the right transport
13
+ * + `Client`, kicks off `client.connect(transport)` in the background,
14
+ * and stores the in-flight `Promise<void>` so `ready(name)` /
15
+ * `callTool(...)` can await it. Errors during connect surface as a
16
+ * typed {@link QodoMcpClientError} on the first awaited call.
17
+ * - `removeAndClose(name)` is fire-and-forget — closes the underlying
18
+ * `Client` if connected, awaits the in-flight connect if any, and
19
+ * drops the entry. Idempotent.
20
+ * - `dispose()` closes every entry in parallel. Called from
21
+ * `QodoClient.disconnect()`.
22
+ *
23
+ * **Tool catalog.** Each entry caches the result of `Client.listTools()`
24
+ * during connect. `resolveMcpForTool(name)` lets the SDK's generic
25
+ * `tool.request` bridge map a `ToolCall.name` string onto the owning MCP
26
+ * — accepting both bare names (`'search_qodo_documentation'`) and
27
+ * server-prefixed forms (`'qodo-docs.search_qodo_documentation'`,
28
+ * `'qodo-docs:search_qodo_documentation'`, `'qodo-docs/...'`). The
29
+ * prefix form is verified against the registered MCP set, but the suffix
30
+ * is not validated against the cached catalog — `callTool` round-trips
31
+ * the canonical "unknown tool" surface from the MCP itself.
32
+ *
33
+ * **Header substitution.** `${ENV_VAR}` references inside header values
34
+ * (and stdio `env` map values) are resolved against `process.env` at
35
+ * connect time. Preserved verbatim from SDK1's `mcpServers` ergonomic.
36
+ *
37
+ * **No backwards-compat shims.** This is the 2.x clean-slate path —
38
+ * the SDK does not adapt SDK1 configs at runtime. Consumers wiring
39
+ * SDK1 configs map them onto the new transport names at the call
40
+ * site.
41
+ */
42
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
43
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
44
+ import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
45
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
46
+ import { ToolListChangedNotificationSchema } from '@modelcontextprotocol/sdk/types.js';
47
+ import { QodoMcpClientError, QodoMcpToolError } from '../errors.js';
48
+ import { substituteEnvInHeaders, substituteEnvInString } from './substituteEnv.js';
49
+ import { getCurrentVersion } from '../../version.js';
50
+ /** Bracketed prefix separators tried in `resolveMcpForTool` (registration order). */
51
+ const PREFIX_SEPARATORS = ['.', ':', '/'];
52
+ export class McpClientPool {
53
+ entries = new Map();
54
+ /**
55
+ * Register a remote / stdio MCP. Sync — the actual `Client.connect` runs
56
+ * in the background; the `entry.connect` promise is the seam every
57
+ * dependent surface (`ready`, `callTool`, `listTools`) awaits.
58
+ *
59
+ * **Atomic register.** {@link prepareEntry} constructs the `Client` +
60
+ * `Transport` (throws synchronously on bad URL) and stores no state;
61
+ * {@link commitEntry} installs the prepared entry into the pool and
62
+ * fires the background connect. Callers needing to sequence the
63
+ * prepare-then-commit cycle around their own state mutations should use
64
+ * the two-phase form (`QarRegistryClient.registerMcp` does this so a
65
+ * synchronous prepare throw never leaves the registry / pool / count
66
+ * out of sync). The single-call form is kept for ad-hoc callers
67
+ * (tests, future direct-pool consumers) — it just runs prepare +
68
+ * commit in sequence.
69
+ *
70
+ * Throws synchronously on the supported discriminators only (the
71
+ * `transport: 'sdk'` case never reaches here — `QarRegistryClient` routes
72
+ * those through the in-process handler). On any other discriminator the
73
+ * caller already passed a typescript-impossible shape; surface a runtime
74
+ * error rather than silently storing a never-callable entry.
75
+ */
76
+ register(name, config) {
77
+ const prepared = this.prepareEntry(name, config);
78
+ this.commitEntry(name, prepared);
79
+ }
80
+ /**
81
+ * Two-phase commit, phase 1 — construct `Client` + `Transport` without
82
+ * mutating pool state. Throws synchronously on bad URL / unsupported
83
+ * transport. Cheap to discard if the caller's surrounding validation
84
+ * fails after this returns: nothing is fired up yet.
85
+ */
86
+ prepareEntry(name, config) {
87
+ const client = new Client({ name: '@qodo/sdk', version: getCurrentVersion() }, { capabilities: {} });
88
+ let transport;
89
+ try {
90
+ transport = this.buildTransport(name, config);
91
+ }
92
+ catch (err) {
93
+ const transportLabel = config.transport;
94
+ throw new QodoMcpClientError(name, transportLabel, `Failed to construct ${transportLabel} transport for MCP '${name}': ${errorMessage(err)}`, err);
95
+ }
96
+ return { client, transport, transportLabel: config.transport };
97
+ }
98
+ /**
99
+ * Two-phase commit, phase 2 — install the prepared entry into the pool
100
+ * and fire the background connect. Never throws (the only failure mode
101
+ * was synchronous and already surfaced from {@link prepareEntry}).
102
+ * Overwrites any same-named entry without closing it; callers wanting
103
+ * close-then-replace semantics should call {@link removeAndClose}
104
+ * before this.
105
+ */
106
+ commitEntry(name, prepared) {
107
+ // Mint an opaque identity token before firing `startConnect` so the
108
+ // async `listTools()` resolve path can detect that the entry it was
109
+ // filling has since been replaced (fast `removeAndClose → register`
110
+ // cycle on the same name).
111
+ const identity = Symbol(`mcp-pool-entry:${name}`);
112
+ const connect = this.startConnect(name, identity, prepared.transportLabel, prepared.client, prepared.transport);
113
+ // Suppress unobserved-rejection warnings — `connect` is the awaitable
114
+ // seam every dependent surface (`ready`, `callTool`, `listTools`) opts
115
+ // into. A consumer who never calls any of those (registered the MCP
116
+ // and dropped the client) would surface "UnhandledPromiseRejection"
117
+ // on connection failure without this guard; the extra `.catch(() => {})`
118
+ // doesn't suppress the rejection itself — waiters still see it via
119
+ // their own await/then handlers.
120
+ void connect.catch(() => {
121
+ /* unobserved-rejection guard; see comment above */
122
+ });
123
+ const entry = {
124
+ identity,
125
+ transport: prepared.transportLabel,
126
+ client: prepared.client,
127
+ connect,
128
+ tools: undefined,
129
+ closed: false,
130
+ };
131
+ this.entries.set(name, entry);
132
+ }
133
+ /**
134
+ * Resolve when the MCP's connect + tool-catalog pre-fetch have finished.
135
+ * Resolves immediately for unknown names (mirrors the idempotency posture
136
+ * of `removeAndClose`); rejects with `QodoMcpClientError` if connect
137
+ * failed.
138
+ */
139
+ async ready(name) {
140
+ const entry = this.entries.get(name);
141
+ if (entry === undefined)
142
+ return;
143
+ await entry.connect;
144
+ }
145
+ /**
146
+ * Return the cached tool catalog. Awaits any in-flight connect.
147
+ * `undefined` for unknown names; throws `QodoMcpClientError` when the
148
+ * pool entry was closed before catalog resolution.
149
+ */
150
+ async listTools(name) {
151
+ const entry = this.entries.get(name);
152
+ if (entry === undefined)
153
+ return undefined;
154
+ await entry.connect;
155
+ if (entry.closed) {
156
+ throw new QodoMcpClientError(name, entry.transport, `MCP '${name}' was closed before listTools resolved`);
157
+ }
158
+ return entry.tools;
159
+ }
160
+ /**
161
+ * Invoke `Client.callTool` against the named MCP. Awaits any in-flight
162
+ * connect. Errors:
163
+ * - Unknown MCP name → `QodoMcpClientError` (consumer registered the
164
+ * name with `transport: 'sdk'`, then asked the pool to dispatch —
165
+ * shouldn't happen via the SDK's own bridge, but defensive).
166
+ * - Connect failure → `QodoMcpClientError` (propagated from the
167
+ * stored `entry.connect` Promise).
168
+ * - `callTool` transport failure → `QodoMcpToolError` with the
169
+ * underlying error on `.cause`.
170
+ * - MCP envelope `isError: true` → `QodoMcpToolError` with `mcpResult`
171
+ * populated so callers can read the per-content array.
172
+ */
173
+ async callTool(name, toolName, args) {
174
+ const entry = this.entries.get(name);
175
+ if (entry === undefined) {
176
+ throw new QodoMcpClientError(name, '(unregistered)', `MCP '${name}' is not registered in the remote/stdio pool`);
177
+ }
178
+ // Propagate connect failures verbatim — already a `QodoMcpClientError`.
179
+ await entry.connect;
180
+ if (entry.closed) {
181
+ throw new QodoMcpClientError(name, entry.transport, `MCP '${name}' was closed before callTool('${toolName}') dispatched`);
182
+ }
183
+ let result;
184
+ try {
185
+ // Pass `arguments` as a fresh shallow-clone — the MCP SDK consumes the
186
+ // params object directly, and consumers may pass frozen / Object.create
187
+ // shapes that the SDK's internal JSON serialization tolerates but we'd
188
+ // rather not couple to.
189
+ result = (await entry.client.callTool({
190
+ name: toolName,
191
+ arguments: { ...args },
192
+ }));
193
+ }
194
+ catch (err) {
195
+ throw new QodoMcpToolError(name, toolName, `MCP '${name}' tool '${toolName}' transport error: ${errorMessage(err)}`, { cause: err });
196
+ }
197
+ if (result.isError === true) {
198
+ // `content` is an MCP `Content[]`; the first text content (if any) is
199
+ // the conventional human-readable error. Preserve the full envelope
200
+ // on the typed error so consumers can introspect.
201
+ const firstText = result.content.find((c) => typeof c === 'object' && c !== null && c.type === 'text' &&
202
+ typeof c.text === 'string');
203
+ const message = firstText?.text ?? 'tool returned isError: true';
204
+ throw new QodoMcpToolError(name, toolName, `MCP '${name}' tool '${toolName}' returned an error: ${message}`, { mcpResult: { content: result.content, isError: true } });
205
+ }
206
+ return result;
207
+ }
208
+ /**
209
+ * Resolve a `ToolCall.name` string to the owning MCP + bare tool name.
210
+ * Prefix forms (`mcp.tool`, `mcp:tool`, `mcp/tool`) win over bare-name
211
+ * scanning when the prefix matches a registered MCP — disambiguates
212
+ * collisions when two MCPs advertise the same tool. Bare matching
213
+ * scans in registration order.
214
+ */
215
+ resolveMcpForTool(toolNameOrPrefixed) {
216
+ // 1. Prefix forms first.
217
+ for (const sep of PREFIX_SEPARATORS) {
218
+ const idx = toolNameOrPrefixed.indexOf(sep);
219
+ if (idx <= 0)
220
+ continue;
221
+ const candidateMcp = toolNameOrPrefixed.slice(0, idx);
222
+ const candidateTool = toolNameOrPrefixed.slice(idx + sep.length);
223
+ if (candidateTool.length === 0)
224
+ continue;
225
+ if (this.entries.has(candidateMcp)) {
226
+ return { mcpName: candidateMcp, toolName: candidateTool };
227
+ }
228
+ }
229
+ // 2. Bare-name scan across cached catalogs.
230
+ for (const [mcpName, entry] of this.entries) {
231
+ if (entry.closed)
232
+ continue;
233
+ const catalog = entry.tools;
234
+ if (catalog === undefined)
235
+ continue;
236
+ for (const tool of catalog) {
237
+ if (tool.name === toolNameOrPrefixed) {
238
+ return { mcpName, toolName: toolNameOrPrefixed };
239
+ }
240
+ }
241
+ }
242
+ return undefined;
243
+ }
244
+ /**
245
+ * Close + drop the named entry. Idempotent on unknown names. Awaits the
246
+ * in-flight connect (best-effort — a still-connecting client must be
247
+ * given the chance to land before its `close()` works correctly) but
248
+ * never rethrows: close errors are logged via `console.error` with the
249
+ * `[@qodo/sdk]` breadcrumb prefix so structured-logging consumers see
250
+ * them, but the calling surface (`unregisterMcp`, `replace: true` flow,
251
+ * `dispose`) keeps its sync-ish contract.
252
+ */
253
+ removeAndClose(name) {
254
+ const entry = this.entries.get(name);
255
+ if (entry === undefined)
256
+ return;
257
+ entry.closed = true;
258
+ this.entries.delete(name);
259
+ // Wait for connect to settle so close() runs against a fully-initialised
260
+ // client (or against a known-failed one — either way doesn't leak a
261
+ // half-open transport).
262
+ entry.connect
263
+ .catch(() => {
264
+ // Connect already failed — nothing to close.
265
+ return undefined;
266
+ })
267
+ .then(() => {
268
+ // After connect settles (resolved or swallowed), close the underlying
269
+ // protocol. `Client.close()` cleanly drives the transport close
270
+ // handler too.
271
+ return entry.client.close().catch((err) => {
272
+ // eslint-disable-next-line no-console
273
+ console.error(`[@qodo/sdk] failed to close MCP client '${name}' (transport=${entry.transport}): ${errorMessage(err)}`);
274
+ });
275
+ });
276
+ }
277
+ /**
278
+ * Close every entry. Awaitable so `QodoClient.disconnect()` can sequence
279
+ * MCP teardown ahead of the WS close span's completion (the connect
280
+ * promises are awaited; close calls run in parallel).
281
+ */
282
+ async dispose() {
283
+ const snapshot = [...this.entries.entries()];
284
+ this.entries.clear();
285
+ await Promise.all(snapshot.map(async ([name, entry]) => {
286
+ entry.closed = true;
287
+ // Do NOT bail on connect-rejection. The MCP SDK's `Client.connect()`
288
+ // may have already spawned a stdio child (or opened a fetch
289
+ // keep-alive) before the protocol-level initialize handshake
290
+ // failed; close() needs to run to reap those resources. Mirror
291
+ // `removeAndClose()`'s posture — swallow the connect failure,
292
+ // still call close.
293
+ try {
294
+ await entry.connect;
295
+ }
296
+ catch {
297
+ /* connect failed — fall through and close anyway */
298
+ }
299
+ try {
300
+ await entry.client.close();
301
+ }
302
+ catch (err) {
303
+ // eslint-disable-next-line no-console
304
+ console.error(`[@qodo/sdk] failed to close MCP client '${name}' during dispose (transport=${entry.transport}): ${errorMessage(err)}`);
305
+ }
306
+ }));
307
+ }
308
+ /**
309
+ * Await every pending MCP's `connect + listTools` cycle. Used by the
310
+ * `tool.request` bridge before falling back to "unresolved" so a tool
311
+ * call arriving immediately after `registerMcp` (before the background
312
+ * connect populates the cached catalog) doesn't race-lose against a
313
+ * legitimate bare-name lookup.
314
+ *
315
+ * Failures on a per-MCP `connect` are swallowed (the resolver only
316
+ * needs the catalog to populate or fail definitively; it doesn't care
317
+ * about the failure mode — the next dispatch will surface the typed
318
+ * error via {@link callTool}). Resolves quickly when every entry
319
+ * already has a populated `tools` field.
320
+ *
321
+ * `timeoutMs` bounds the wait so a slow / unreachable MCP doesn't
322
+ * strand the dispatch hot path. If catalog population doesn't complete
323
+ * within the budget the resolver proceeds with whatever it currently
324
+ * has (typically: marks the call unresolved → bridge emits a
325
+ * deterministic error response). Default 250ms — short enough to keep
326
+ * the dispatch latency contract, long enough that a fast LAN MCP
327
+ * populates well inside the window.
328
+ */
329
+ async waitForCatalogsToSettle(timeoutMs = 250) {
330
+ const pending = [];
331
+ for (const entry of this.entries.values()) {
332
+ if (entry.closed)
333
+ continue;
334
+ if (entry.tools !== undefined)
335
+ continue;
336
+ pending.push(entry.connect.catch(() => undefined));
337
+ }
338
+ if (pending.length === 0)
339
+ return;
340
+ let timer;
341
+ const timeout = new Promise((resolve) => {
342
+ timer = setTimeout(resolve, timeoutMs);
343
+ });
344
+ try {
345
+ await Promise.race([Promise.all(pending).then(() => undefined), timeout]);
346
+ }
347
+ finally {
348
+ if (timer !== undefined)
349
+ clearTimeout(timer);
350
+ }
351
+ }
352
+ /** @internal — exposed for tests that need to inspect pool state. */
353
+ _hasEntry(name) {
354
+ return this.entries.has(name);
355
+ }
356
+ /**
357
+ * @internal — MCP projection layer sync accessor. Returns a snapshot
358
+ * `Map<mcpName, catalog>` where `catalog === undefined` means the MCP
359
+ * is registered but its `tools/list` pre-fetch hasn't populated (cold
360
+ * start or in-flight). Callers should `await waitForCatalogsToSettle()`
361
+ * first so `undefined` reliably means "unreachable", not "still loading".
362
+ *
363
+ * The returned map is detached from the pool — mutations don't write
364
+ * back; new pool entries after the snapshot don't appear.
365
+ */
366
+ getCatalogSnapshot() {
367
+ const snapshot = new Map();
368
+ for (const [name, entry] of this.entries) {
369
+ if (entry.closed)
370
+ continue;
371
+ snapshot.set(name, entry.tools);
372
+ }
373
+ return snapshot;
374
+ }
375
+ /** @internal — list of every registered MCP name (closed entries excluded). */
376
+ listRegisteredNames() {
377
+ const names = [];
378
+ for (const [name, entry] of this.entries) {
379
+ if (entry.closed)
380
+ continue;
381
+ names.push(name);
382
+ }
383
+ return names;
384
+ }
385
+ // -------------------------------------------------------------------------
386
+ // Internals
387
+ // -------------------------------------------------------------------------
388
+ buildTransport(name, config) {
389
+ switch (config.transport) {
390
+ case 'remote-streamable-http':
391
+ return this.buildStreamableHttpTransport(config);
392
+ case 'remote-sse':
393
+ return this.buildSseTransport(config);
394
+ case 'stdio':
395
+ return this.buildStdioTransport(config);
396
+ default: {
397
+ // TS-exhaustive on McpConfig variants; the runtime branch exists so a
398
+ // JS caller (or a future un-narrowed discriminant) gets a typed error
399
+ // rather than `transport.start is not a function` later in the pipe.
400
+ const unknown = config;
401
+ throw new QodoMcpClientError(name, unknown.transport, `unsupported MCP transport '${unknown.transport}' for '${name}'`);
402
+ }
403
+ }
404
+ }
405
+ buildStreamableHttpTransport(config) {
406
+ const url = new URL(config.url);
407
+ const resolvedHeaders = substituteEnvInHeaders(config.headers);
408
+ const baseInit = config.requestInit !== undefined ? { ...config.requestInit } : {};
409
+ if (resolvedHeaders !== undefined && Object.keys(resolvedHeaders).length > 0) {
410
+ // Use the fetch `Headers` API for the merge so case-insensitive
411
+ // replacement works correctly. Spread-merging plain records is
412
+ // case-SENSITIVE (`authorization` and `Authorization` are distinct
413
+ // keys); fetch then normalizes headers case-insensitively at request
414
+ // time and combines duplicate-by-name keys into a single
415
+ // comma-separated value — turning `{authorization: 'old',
416
+ // Authorization: 'Bearer new'}` into the invalid wire header
417
+ // `old, Bearer new`. The Headers API does case-insensitive set, so
418
+ // a same-name (case-insensitively) consumer-side header wins cleanly.
419
+ baseInit.headers = mergeHeadersCaseInsensitively(baseInit.headers, resolvedHeaders);
420
+ }
421
+ return new StreamableHTTPClientTransport(url, { requestInit: baseInit });
422
+ }
423
+ buildSseTransport(config) {
424
+ const url = new URL(config.url);
425
+ const resolvedHeaders = substituteEnvInHeaders(config.headers);
426
+ const init = resolvedHeaders !== undefined && Object.keys(resolvedHeaders).length > 0
427
+ ? { headers: resolvedHeaders }
428
+ : undefined;
429
+ return new SSEClientTransport(url, init !== undefined ? { requestInit: init } : undefined);
430
+ }
431
+ buildStdioTransport(config) {
432
+ const resolvedEnv = config.env !== undefined
433
+ ? Object.fromEntries(Object.entries(config.env).map(([k, v]) => [k, substituteEnvInString(v)]))
434
+ : undefined;
435
+ return new StdioClientTransport({
436
+ command: config.command,
437
+ args: config.args !== undefined ? [...config.args] : undefined,
438
+ env: resolvedEnv,
439
+ cwd: config.cwd,
440
+ });
441
+ }
442
+ startConnect(name, identity, transportLabel, client, transport) {
443
+ return (async () => {
444
+ try {
445
+ await client.connect(transport);
446
+ }
447
+ catch (err) {
448
+ throw new QodoMcpClientError(name, transportLabel, `Failed to connect to MCP '${name}' over ${transportLabel}: ${errorMessage(err)}`, err);
449
+ }
450
+ // Install the `tools/list_changed` notification handler
451
+ // IMMEDIATELY post-connect, BEFORE the initial `listTools`
452
+ // round-trip. An MCP that emits `list_changed` between the
453
+ // handshake and our first list call would otherwise have its
454
+ // notification land before any handler is wired and get dropped;
455
+ // the upstream MCP SDK queues notifications until a handler
456
+ // registers, but installing eagerly is the safe contract regardless.
457
+ //
458
+ // The handler is best-effort: it fires `client.listTools()` in
459
+ // the background, identity-checks the entry, and replaces the
460
+ // cached catalog. Failures (transport blip, MCP refusing the
461
+ // re-list) are logged but never thrown — the next task.start will
462
+ // see the previous catalog rather than the task hanging.
463
+ //
464
+ // Defensive `typeof` guard: every real
465
+ // `@modelcontextprotocol/sdk` `Client` has `setNotificationHandler`,
466
+ // but hand-rolled test fakes that bypass `prepareEntry` may not.
467
+ // Skipping the handler install on a non-conforming client keeps the
468
+ // pool usable in tests without coupling them to the real protocol.
469
+ if (typeof client.setNotificationHandler === 'function') {
470
+ client.setNotificationHandler(ToolListChangedNotificationSchema, () => {
471
+ // Don't await — fire-and-forget so the MCP SDK's notification
472
+ // pump keeps draining other notifications. The race against a
473
+ // concurrent in-flight refresh is handled by the identity
474
+ // check + last-write-wins semantics on `entry.tools`.
475
+ void this.refreshToolsForEntry(name, identity).catch((err) => {
476
+ // eslint-disable-next-line no-console
477
+ console.error(`[@qodo/sdk] tool catalog refresh failed to re-list tools for MCP '${name}' (transport=${transportLabel}): ${errorMessage(err)}`);
478
+ });
479
+ });
480
+ }
481
+ // Pre-fetch the tool catalog so bare-name resolution works on the
482
+ // first dispatch. A consumer who only needs `callTool` against a
483
+ // prefix-form name (`mcp.tool`) doesn't actually depend on this — the
484
+ // prefix path is keyed off the registered MCP set — but the cost is
485
+ // a single round-trip per MCP at connect time and the bare-name
486
+ // ergonomic (AgentSpec.tools[]) needs it.
487
+ try {
488
+ const result = await client.listTools();
489
+ // Re-check that the entry under this name is still the one we
490
+ // were filling. A fast `removeAndClose(name) → register(name, ...)`
491
+ // cycle while `listTools()` is in flight would otherwise let this
492
+ // resolution corrupt the new entry's catalog with the old client's
493
+ // tool list.
494
+ const entry = this.entries.get(name);
495
+ if (entry !== undefined && entry.identity === identity) {
496
+ entry.tools = result.tools ?? [];
497
+ }
498
+ }
499
+ catch (err) {
500
+ throw new QodoMcpClientError(name, transportLabel, `Failed to list tools from MCP '${name}' over ${transportLabel}: ${errorMessage(err)}`, err);
501
+ }
502
+ })();
503
+ }
504
+ /**
505
+ * Tool-catalog refresh helper. Re-fires `client.listTools()` against
506
+ * the same pool entry and replaces the cached catalog if the entry
507
+ * is still the one we're filling (identity check). Used by the
508
+ * `notifications/tools/list_changed` handler installed in
509
+ * {@link startConnect}.
510
+ *
511
+ * Identity-checked twice: once to find the entry before the round-
512
+ * trip (so a fast `removeAndClose` between notification and refresh
513
+ * skips the call entirely), and once after to avoid corrupting a
514
+ * post-replace entry with the prior client's results. Same pattern
515
+ * as the initial connect-time pre-fetch.
516
+ */
517
+ async refreshToolsForEntry(name, identity) {
518
+ const entryBefore = this.entries.get(name);
519
+ if (entryBefore === undefined || entryBefore.identity !== identity)
520
+ return;
521
+ if (entryBefore.closed)
522
+ return;
523
+ const result = await entryBefore.client.listTools();
524
+ const entryAfter = this.entries.get(name);
525
+ if (entryAfter !== undefined && entryAfter.identity === identity && !entryAfter.closed) {
526
+ entryAfter.tools = result.tools ?? [];
527
+ }
528
+ }
529
+ }
530
+ function errorMessage(err) {
531
+ if (err instanceof Error)
532
+ return err.message;
533
+ return String(err);
534
+ }
535
+ /**
536
+ * Normalize any valid `RequestInit['headers']` shape (record, `Headers`
537
+ * instance, or `[string, string][]` tuple array) into a plain record so
538
+ * `{...existing, ...resolved}` merging works uniformly. Returns an empty
539
+ * record for the absent / unknown-shape cases — callers concat with
540
+ * resolved headers immediately after, so an empty base is correct.
541
+ *
542
+ * @deprecated Use {@link mergeHeadersCaseInsensitively} instead.
543
+ * Spread-merging is case-SENSITIVE which produces invalid duplicates
544
+ * that fetch then combines as `value-a, value-b`. Kept for parity with
545
+ * the pre-fix call sites (none remain in source).
546
+ */
547
+ function headersInitAsRecord(headers) {
548
+ if (headers === undefined || headers === null)
549
+ return {};
550
+ if (typeof Headers !== 'undefined' && headers instanceof Headers) {
551
+ return Object.fromEntries(headers.entries());
552
+ }
553
+ if (Array.isArray(headers)) {
554
+ // Tuple array — each entry is `[name, value]`.
555
+ return Object.fromEntries(headers);
556
+ }
557
+ // Plain record (the typical case). Spread to a fresh object so the
558
+ // caller's merge doesn't mutate the consumer's input.
559
+ return { ...headers };
560
+ }
561
+ /**
562
+ * Case-insensitive header merge using the fetch `Headers` API.
563
+ * `Headers.set(name, value)` performs case-insensitive replacement, so a
564
+ * consumer-side `{ Authorization: '...' }` cleanly overwrites a
565
+ * `{ authorization: '...' }` that came in on `RequestInit.headers`
566
+ * (the typical case after an `${ENV_VAR}` substitution carried through
567
+ * a custom `requestInit`). Returns a fresh `Headers` instance so the
568
+ * consumer's input is not mutated.
569
+ *
570
+ * Exported for test access — tests must assert on the actual merged
571
+ * value, not just no-throw of the build step. Marked `@internal` so the
572
+ * documented public surface stays narrow.
573
+ *
574
+ * @internal
575
+ */
576
+ export function mergeHeadersCaseInsensitively(base, overrides) {
577
+ // `new Headers(undefined)` is valid and produces an empty Headers.
578
+ // For arrays / records, the constructor accepts both shapes natively.
579
+ const h = new Headers(base === null ? undefined : base);
580
+ for (const [name, value] of Object.entries(overrides)) {
581
+ h.set(name, value);
582
+ }
583
+ return h;
584
+ }
585
+ //# sourceMappingURL=McpClientPool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"McpClientPool.js","sourceRoot":"","sources":["../../../src/client/mcp/McpClientPool.ts"],"names":[],"mappings":"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"}