@chances-ai/engine 24.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/dist/agents/discover.d.ts +30 -0
  2. package/dist/agents/discover.d.ts.map +1 -0
  3. package/dist/agents/discover.js +183 -0
  4. package/dist/agents/discover.js.map +1 -0
  5. package/dist/agents/index.d.ts +20 -0
  6. package/dist/agents/index.d.ts.map +1 -0
  7. package/dist/agents/index.js +52 -0
  8. package/dist/agents/index.js.map +1 -0
  9. package/dist/agents/parse.d.ts +61 -0
  10. package/dist/agents/parse.d.ts.map +1 -0
  11. package/dist/agents/parse.js +527 -0
  12. package/dist/agents/parse.js.map +1 -0
  13. package/dist/agents/types.d.ts +52 -0
  14. package/dist/agents/types.d.ts.map +1 -0
  15. package/dist/agents/types.js +8 -0
  16. package/dist/agents/types.js.map +1 -0
  17. package/dist/ai/adapters/ai-sdk-stream.d.ts +19 -0
  18. package/dist/ai/adapters/ai-sdk-stream.d.ts.map +1 -0
  19. package/dist/ai/adapters/ai-sdk-stream.js +125 -0
  20. package/dist/ai/adapters/ai-sdk-stream.js.map +1 -0
  21. package/dist/ai/adapters/ai-sdk.d.ts +56 -0
  22. package/dist/ai/adapters/ai-sdk.d.ts.map +1 -0
  23. package/dist/ai/adapters/ai-sdk.js +112 -0
  24. package/dist/ai/adapters/ai-sdk.js.map +1 -0
  25. package/dist/ai/adapters/mock.d.ts +13 -0
  26. package/dist/ai/adapters/mock.d.ts.map +1 -0
  27. package/dist/ai/adapters/mock.js +54 -0
  28. package/dist/ai/adapters/mock.js.map +1 -0
  29. package/dist/ai/adapters/openai-compatible.d.ts +23 -0
  30. package/dist/ai/adapters/openai-compatible.d.ts.map +1 -0
  31. package/dist/ai/adapters/openai-compatible.js +45 -0
  32. package/dist/ai/adapters/openai-compatible.js.map +1 -0
  33. package/dist/ai/cost.d.ts +3 -0
  34. package/dist/ai/cost.d.ts.map +1 -0
  35. package/dist/ai/cost.js +5 -0
  36. package/dist/ai/cost.js.map +1 -0
  37. package/dist/ai/index.d.ts +12 -0
  38. package/dist/ai/index.d.ts.map +1 -0
  39. package/dist/ai/index.js +11 -0
  40. package/dist/ai/index.js.map +1 -0
  41. package/dist/ai/known-models.d.ts +20 -0
  42. package/dist/ai/known-models.d.ts.map +1 -0
  43. package/dist/ai/known-models.js +129 -0
  44. package/dist/ai/known-models.js.map +1 -0
  45. package/dist/ai/registry.d.ts +12 -0
  46. package/dist/ai/registry.d.ts.map +1 -0
  47. package/dist/ai/registry.js +24 -0
  48. package/dist/ai/registry.js.map +1 -0
  49. package/dist/ai/retry.d.ts +11 -0
  50. package/dist/ai/retry.d.ts.map +1 -0
  51. package/dist/ai/retry.js +14 -0
  52. package/dist/ai/retry.js.map +1 -0
  53. package/dist/ai/router.d.ts +25 -0
  54. package/dist/ai/router.d.ts.map +1 -0
  55. package/dist/ai/router.js +36 -0
  56. package/dist/ai/router.js.map +1 -0
  57. package/dist/ai/setup.d.ts +23 -0
  58. package/dist/ai/setup.d.ts.map +1 -0
  59. package/dist/ai/setup.js +47 -0
  60. package/dist/ai/setup.js.map +1 -0
  61. package/dist/ai/summarizer.d.ts +24 -0
  62. package/dist/ai/summarizer.d.ts.map +1 -0
  63. package/dist/ai/summarizer.js +56 -0
  64. package/dist/ai/summarizer.js.map +1 -0
  65. package/dist/ai/types.d.ts +83 -0
  66. package/dist/ai/types.d.ts.map +1 -0
  67. package/dist/ai/types.js +2 -0
  68. package/dist/ai/types.js.map +1 -0
  69. package/dist/core/compaction/circuit-breaker.d.ts +32 -0
  70. package/dist/core/compaction/circuit-breaker.d.ts.map +1 -0
  71. package/dist/core/compaction/circuit-breaker.js +42 -0
  72. package/dist/core/compaction/circuit-breaker.js.map +1 -0
  73. package/dist/core/compaction/compactor.d.ts +75 -0
  74. package/dist/core/compaction/compactor.d.ts.map +1 -0
  75. package/dist/core/compaction/compactor.js +261 -0
  76. package/dist/core/compaction/compactor.js.map +1 -0
  77. package/dist/core/compaction/estimate.d.ts +39 -0
  78. package/dist/core/compaction/estimate.d.ts.map +1 -0
  79. package/dist/core/compaction/estimate.js +74 -0
  80. package/dist/core/compaction/estimate.js.map +1 -0
  81. package/dist/core/compaction/index.d.ts +5 -0
  82. package/dist/core/compaction/index.d.ts.map +1 -0
  83. package/dist/core/compaction/index.js +5 -0
  84. package/dist/core/compaction/index.js.map +1 -0
  85. package/dist/core/compaction/prune.d.ts +43 -0
  86. package/dist/core/compaction/prune.d.ts.map +1 -0
  87. package/dist/core/compaction/prune.js +51 -0
  88. package/dist/core/compaction/prune.js.map +1 -0
  89. package/dist/core/engine.d.ts +268 -0
  90. package/dist/core/engine.d.ts.map +1 -0
  91. package/dist/core/engine.js +767 -0
  92. package/dist/core/engine.js.map +1 -0
  93. package/dist/core/index.d.ts +6 -0
  94. package/dist/core/index.d.ts.map +1 -0
  95. package/dist/core/index.js +6 -0
  96. package/dist/core/index.js.map +1 -0
  97. package/dist/core/task-tool.d.ts +175 -0
  98. package/dist/core/task-tool.d.ts.map +1 -0
  99. package/dist/core/task-tool.js +901 -0
  100. package/dist/core/task-tool.js.map +1 -0
  101. package/dist/core/workspace-query.d.ts +83 -0
  102. package/dist/core/workspace-query.d.ts.map +1 -0
  103. package/dist/core/workspace-query.js +217 -0
  104. package/dist/core/workspace-query.js.map +1 -0
  105. package/dist/core/worktree/active-marker.d.ts +31 -0
  106. package/dist/core/worktree/active-marker.d.ts.map +1 -0
  107. package/dist/core/worktree/active-marker.js +109 -0
  108. package/dist/core/worktree/active-marker.js.map +1 -0
  109. package/dist/core/worktree/create.d.ts +40 -0
  110. package/dist/core/worktree/create.d.ts.map +1 -0
  111. package/dist/core/worktree/create.js +121 -0
  112. package/dist/core/worktree/create.js.map +1 -0
  113. package/dist/core/worktree/errors.d.ts +7 -0
  114. package/dist/core/worktree/errors.d.ts.map +1 -0
  115. package/dist/core/worktree/errors.js +11 -0
  116. package/dist/core/worktree/errors.js.map +1 -0
  117. package/dist/core/worktree/gc.d.ts +39 -0
  118. package/dist/core/worktree/gc.d.ts.map +1 -0
  119. package/dist/core/worktree/gc.js +146 -0
  120. package/dist/core/worktree/gc.js.map +1 -0
  121. package/dist/core/worktree/git.d.ts +53 -0
  122. package/dist/core/worktree/git.d.ts.map +1 -0
  123. package/dist/core/worktree/git.js +166 -0
  124. package/dist/core/worktree/git.js.map +1 -0
  125. package/dist/core/worktree/index.d.ts +8 -0
  126. package/dist/core/worktree/index.d.ts.map +1 -0
  127. package/dist/core/worktree/index.js +8 -0
  128. package/dist/core/worktree/index.js.map +1 -0
  129. package/dist/core/worktree/paths.d.ts +26 -0
  130. package/dist/core/worktree/paths.d.ts.map +1 -0
  131. package/dist/core/worktree/paths.js +57 -0
  132. package/dist/core/worktree/paths.js.map +1 -0
  133. package/dist/core/worktree/slug.d.ts +6 -0
  134. package/dist/core/worktree/slug.d.ts.map +1 -0
  135. package/dist/core/worktree/slug.js +21 -0
  136. package/dist/core/worktree/slug.js.map +1 -0
  137. package/dist/local-vault/file-store.d.ts +64 -0
  138. package/dist/local-vault/file-store.d.ts.map +1 -0
  139. package/dist/local-vault/file-store.js +225 -0
  140. package/dist/local-vault/file-store.js.map +1 -0
  141. package/dist/local-vault/index.d.ts +57 -0
  142. package/dist/local-vault/index.d.ts.map +1 -0
  143. package/dist/local-vault/index.js +68 -0
  144. package/dist/local-vault/index.js.map +1 -0
  145. package/dist/local-vault/keychain.d.ts +58 -0
  146. package/dist/local-vault/keychain.d.ts.map +1 -0
  147. package/dist/local-vault/keychain.js +200 -0
  148. package/dist/local-vault/keychain.js.map +1 -0
  149. package/dist/local-vault/mutex.d.ts +20 -0
  150. package/dist/local-vault/mutex.d.ts.map +1 -0
  151. package/dist/local-vault/mutex.js +44 -0
  152. package/dist/local-vault/mutex.js.map +1 -0
  153. package/dist/local-vault/passphrase.d.ts +30 -0
  154. package/dist/local-vault/passphrase.d.ts.map +1 -0
  155. package/dist/local-vault/passphrase.js +72 -0
  156. package/dist/local-vault/passphrase.js.map +1 -0
  157. package/dist/lsp/config.d.ts +34 -0
  158. package/dist/lsp/config.d.ts.map +1 -0
  159. package/dist/lsp/config.js +68 -0
  160. package/dist/lsp/config.js.map +1 -0
  161. package/dist/lsp/detect.d.ts +7 -0
  162. package/dist/lsp/detect.d.ts.map +1 -0
  163. package/dist/lsp/detect.js +78 -0
  164. package/dist/lsp/detect.js.map +1 -0
  165. package/dist/lsp/errors.d.ts +11 -0
  166. package/dist/lsp/errors.d.ts.map +1 -0
  167. package/dist/lsp/errors.js +11 -0
  168. package/dist/lsp/errors.js.map +1 -0
  169. package/dist/lsp/formatters.d.ts +147 -0
  170. package/dist/lsp/formatters.d.ts.map +1 -0
  171. package/dist/lsp/formatters.js +259 -0
  172. package/dist/lsp/formatters.js.map +1 -0
  173. package/dist/lsp/index.d.ts +31 -0
  174. package/dist/lsp/index.d.ts.map +1 -0
  175. package/dist/lsp/index.js +31 -0
  176. package/dist/lsp/index.js.map +1 -0
  177. package/dist/lsp/instance.d.ts +72 -0
  178. package/dist/lsp/instance.d.ts.map +1 -0
  179. package/dist/lsp/instance.js +489 -0
  180. package/dist/lsp/instance.js.map +1 -0
  181. package/dist/lsp/lazy-load.d.ts +27 -0
  182. package/dist/lsp/lazy-load.d.ts.map +1 -0
  183. package/dist/lsp/lazy-load.js +57 -0
  184. package/dist/lsp/lazy-load.js.map +1 -0
  185. package/dist/lsp/manager.d.ts +59 -0
  186. package/dist/lsp/manager.d.ts.map +1 -0
  187. package/dist/lsp/manager.js +242 -0
  188. package/dist/lsp/manager.js.map +1 -0
  189. package/dist/lsp/ops.d.ts +13 -0
  190. package/dist/lsp/ops.d.ts.map +1 -0
  191. package/dist/lsp/ops.js +225 -0
  192. package/dist/lsp/ops.js.map +1 -0
  193. package/dist/lsp/rpc.d.ts +47 -0
  194. package/dist/lsp/rpc.d.ts.map +1 -0
  195. package/dist/lsp/rpc.js +134 -0
  196. package/dist/lsp/rpc.js.map +1 -0
  197. package/dist/lsp/safe-uri.d.ts +18 -0
  198. package/dist/lsp/safe-uri.d.ts.map +1 -0
  199. package/dist/lsp/safe-uri.js +96 -0
  200. package/dist/lsp/safe-uri.js.map +1 -0
  201. package/dist/lsp/types.d.ts +70 -0
  202. package/dist/lsp/types.d.ts.map +1 -0
  203. package/dist/lsp/types.js +16 -0
  204. package/dist/lsp/types.js.map +1 -0
  205. package/dist/mcp/bridge.d.ts +57 -0
  206. package/dist/mcp/bridge.d.ts.map +1 -0
  207. package/dist/mcp/bridge.js +98 -0
  208. package/dist/mcp/bridge.js.map +1 -0
  209. package/dist/mcp/category.d.ts +22 -0
  210. package/dist/mcp/category.d.ts.map +1 -0
  211. package/dist/mcp/category.js +11 -0
  212. package/dist/mcp/category.js.map +1 -0
  213. package/dist/mcp/client.d.ts +228 -0
  214. package/dist/mcp/client.d.ts.map +1 -0
  215. package/dist/mcp/client.js +352 -0
  216. package/dist/mcp/client.js.map +1 -0
  217. package/dist/mcp/content.d.ts +86 -0
  218. package/dist/mcp/content.d.ts.map +1 -0
  219. package/dist/mcp/content.js +147 -0
  220. package/dist/mcp/content.js.map +1 -0
  221. package/dist/mcp/env.d.ts +19 -0
  222. package/dist/mcp/env.d.ts.map +1 -0
  223. package/dist/mcp/env.js +50 -0
  224. package/dist/mcp/env.js.map +1 -0
  225. package/dist/mcp/host.d.ts +199 -0
  226. package/dist/mcp/host.d.ts.map +1 -0
  227. package/dist/mcp/host.js +530 -0
  228. package/dist/mcp/host.js.map +1 -0
  229. package/dist/mcp/index.d.ts +18 -0
  230. package/dist/mcp/index.d.ts.map +1 -0
  231. package/dist/mcp/index.js +17 -0
  232. package/dist/mcp/index.js.map +1 -0
  233. package/dist/mcp/load-mcp-host.d.ts +32 -0
  234. package/dist/mcp/load-mcp-host.d.ts.map +1 -0
  235. package/dist/mcp/load-mcp-host.js +49 -0
  236. package/dist/mcp/load-mcp-host.js.map +1 -0
  237. package/dist/mcp/oauth/callback-server.d.ts +73 -0
  238. package/dist/mcp/oauth/callback-server.d.ts.map +1 -0
  239. package/dist/mcp/oauth/callback-server.js +280 -0
  240. package/dist/mcp/oauth/callback-server.js.map +1 -0
  241. package/dist/mcp/oauth/config-hash.d.ts +24 -0
  242. package/dist/mcp/oauth/config-hash.d.ts.map +1 -0
  243. package/dist/mcp/oauth/config-hash.js +55 -0
  244. package/dist/mcp/oauth/config-hash.js.map +1 -0
  245. package/dist/mcp/oauth/error-normalize.d.ts +39 -0
  246. package/dist/mcp/oauth/error-normalize.d.ts.map +1 -0
  247. package/dist/mcp/oauth/error-normalize.js +91 -0
  248. package/dist/mcp/oauth/error-normalize.js.map +1 -0
  249. package/dist/mcp/oauth/provider.d.ts +190 -0
  250. package/dist/mcp/oauth/provider.d.ts.map +1 -0
  251. package/dist/mcp/oauth/provider.js +305 -0
  252. package/dist/mcp/oauth/provider.js.map +1 -0
  253. package/dist/mcp/oauth/refresh-coalescer.d.ts +46 -0
  254. package/dist/mcp/oauth/refresh-coalescer.d.ts.map +1 -0
  255. package/dist/mcp/oauth/refresh-coalescer.js +77 -0
  256. package/dist/mcp/oauth/refresh-coalescer.js.map +1 -0
  257. package/dist/mcp/oauth/sdk-shapes.d.ts +77 -0
  258. package/dist/mcp/oauth/sdk-shapes.d.ts.map +1 -0
  259. package/dist/mcp/oauth/sdk-shapes.js +21 -0
  260. package/dist/mcp/oauth/sdk-shapes.js.map +1 -0
  261. package/dist/mcp/parse.d.ts +28 -0
  262. package/dist/mcp/parse.d.ts.map +1 -0
  263. package/dist/mcp/parse.js +209 -0
  264. package/dist/mcp/parse.js.map +1 -0
  265. package/dist/mcp/prompts.d.ts +31 -0
  266. package/dist/mcp/prompts.d.ts.map +1 -0
  267. package/dist/mcp/prompts.js +71 -0
  268. package/dist/mcp/prompts.js.map +1 -0
  269. package/dist/mcp/redact.d.ts +62 -0
  270. package/dist/mcp/redact.d.ts.map +1 -0
  271. package/dist/mcp/redact.js +87 -0
  272. package/dist/mcp/redact.js.map +1 -0
  273. package/dist/mcp/resources.d.ts +70 -0
  274. package/dist/mcp/resources.d.ts.map +1 -0
  275. package/dist/mcp/resources.js +170 -0
  276. package/dist/mcp/resources.js.map +1 -0
  277. package/dist/mcp/types.d.ts +123 -0
  278. package/dist/mcp/types.d.ts.map +1 -0
  279. package/dist/mcp/types.js +2 -0
  280. package/dist/mcp/types.js.map +1 -0
  281. package/dist/memory/frontmatter.d.ts +18 -0
  282. package/dist/memory/frontmatter.d.ts.map +1 -0
  283. package/dist/memory/frontmatter.js +81 -0
  284. package/dist/memory/frontmatter.js.map +1 -0
  285. package/dist/memory/index.d.ts +5 -0
  286. package/dist/memory/index.d.ts.map +1 -0
  287. package/dist/memory/index.js +5 -0
  288. package/dist/memory/index.js.map +1 -0
  289. package/dist/memory/store.d.ts +44 -0
  290. package/dist/memory/store.d.ts.map +1 -0
  291. package/dist/memory/store.js +237 -0
  292. package/dist/memory/store.js.map +1 -0
  293. package/dist/memory/tools.d.ts +11 -0
  294. package/dist/memory/tools.d.ts.map +1 -0
  295. package/dist/memory/tools.js +159 -0
  296. package/dist/memory/tools.js.map +1 -0
  297. package/dist/memory/types.d.ts +32 -0
  298. package/dist/memory/types.d.ts.map +1 -0
  299. package/dist/memory/types.js +20 -0
  300. package/dist/memory/types.js.map +1 -0
  301. package/dist/plugin-api/index.d.ts +167 -0
  302. package/dist/plugin-api/index.d.ts.map +1 -0
  303. package/dist/plugin-api/index.js +151 -0
  304. package/dist/plugin-api/index.js.map +1 -0
  305. package/dist/plugin-logger/index.d.ts +21 -0
  306. package/dist/plugin-logger/index.d.ts.map +1 -0
  307. package/dist/plugin-logger/index.js +59 -0
  308. package/dist/plugin-logger/index.js.map +1 -0
  309. package/dist/session/index.d.ts +125 -0
  310. package/dist/session/index.d.ts.map +1 -0
  311. package/dist/session/index.js +202 -0
  312. package/dist/session/index.js.map +1 -0
  313. package/dist/tools/approval.d.ts +33 -0
  314. package/dist/tools/approval.d.ts.map +1 -0
  315. package/dist/tools/approval.js +53 -0
  316. package/dist/tools/approval.js.map +1 -0
  317. package/dist/tools/builtins/_shared.d.ts +94 -0
  318. package/dist/tools/builtins/_shared.d.ts.map +1 -0
  319. package/dist/tools/builtins/_shared.js +246 -0
  320. package/dist/tools/builtins/_shared.js.map +1 -0
  321. package/dist/tools/builtins/ask-user-question.d.ts +27 -0
  322. package/dist/tools/builtins/ask-user-question.d.ts.map +1 -0
  323. package/dist/tools/builtins/ask-user-question.js +191 -0
  324. package/dist/tools/builtins/ask-user-question.js.map +1 -0
  325. package/dist/tools/builtins/bash.d.ts +3 -0
  326. package/dist/tools/builtins/bash.d.ts.map +1 -0
  327. package/dist/tools/builtins/bash.js +158 -0
  328. package/dist/tools/builtins/bash.js.map +1 -0
  329. package/dist/tools/builtins/diff.d.ts +3 -0
  330. package/dist/tools/builtins/diff.d.ts.map +1 -0
  331. package/dist/tools/builtins/diff.js +83 -0
  332. package/dist/tools/builtins/diff.js.map +1 -0
  333. package/dist/tools/builtins/edit.d.ts +3 -0
  334. package/dist/tools/builtins/edit.d.ts.map +1 -0
  335. package/dist/tools/builtins/edit.js +40 -0
  336. package/dist/tools/builtins/edit.js.map +1 -0
  337. package/dist/tools/builtins/glob.d.ts +3 -0
  338. package/dist/tools/builtins/glob.d.ts.map +1 -0
  339. package/dist/tools/builtins/glob.js +37 -0
  340. package/dist/tools/builtins/glob.js.map +1 -0
  341. package/dist/tools/builtins/grep.d.ts +3 -0
  342. package/dist/tools/builtins/grep.d.ts.map +1 -0
  343. package/dist/tools/builtins/grep.js +81 -0
  344. package/dist/tools/builtins/grep.js.map +1 -0
  345. package/dist/tools/builtins/lsp.d.ts +3 -0
  346. package/dist/tools/builtins/lsp.d.ts.map +1 -0
  347. package/dist/tools/builtins/lsp.js +102 -0
  348. package/dist/tools/builtins/lsp.js.map +1 -0
  349. package/dist/tools/builtins/pty.d.ts +64 -0
  350. package/dist/tools/builtins/pty.d.ts.map +1 -0
  351. package/dist/tools/builtins/pty.js +536 -0
  352. package/dist/tools/builtins/pty.js.map +1 -0
  353. package/dist/tools/builtins/read.d.ts +3 -0
  354. package/dist/tools/builtins/read.d.ts.map +1 -0
  355. package/dist/tools/builtins/read.js +18 -0
  356. package/dist/tools/builtins/read.js.map +1 -0
  357. package/dist/tools/builtins/web-fetch.d.ts +4 -0
  358. package/dist/tools/builtins/web-fetch.d.ts.map +1 -0
  359. package/dist/tools/builtins/web-fetch.js +353 -0
  360. package/dist/tools/builtins/web-fetch.js.map +1 -0
  361. package/dist/tools/builtins/write.d.ts +3 -0
  362. package/dist/tools/builtins/write.d.ts.map +1 -0
  363. package/dist/tools/builtins/write.js +48 -0
  364. package/dist/tools/builtins/write.js.map +1 -0
  365. package/dist/tools/builtins.d.ts +9 -0
  366. package/dist/tools/builtins.d.ts.map +1 -0
  367. package/dist/tools/builtins.js +29 -0
  368. package/dist/tools/builtins.js.map +1 -0
  369. package/dist/tools/diff.d.ts +18 -0
  370. package/dist/tools/diff.d.ts.map +1 -0
  371. package/dist/tools/diff.js +57 -0
  372. package/dist/tools/diff.js.map +1 -0
  373. package/dist/tools/index.d.ts +10 -0
  374. package/dist/tools/index.d.ts.map +1 -0
  375. package/dist/tools/index.js +9 -0
  376. package/dist/tools/index.js.map +1 -0
  377. package/dist/tools/permission.d.ts +120 -0
  378. package/dist/tools/permission.d.ts.map +1 -0
  379. package/dist/tools/permission.js +208 -0
  380. package/dist/tools/permission.js.map +1 -0
  381. package/dist/tools/registry.d.ts +12 -0
  382. package/dist/tools/registry.d.ts.map +1 -0
  383. package/dist/tools/registry.js +19 -0
  384. package/dist/tools/registry.js.map +1 -0
  385. package/dist/tools/types.d.ts +244 -0
  386. package/dist/tools/types.d.ts.map +1 -0
  387. package/dist/tools/types.js +15 -0
  388. package/dist/tools/types.js.map +1 -0
  389. package/package.json +109 -0
@@ -0,0 +1,228 @@
1
+ import type { McpCallToolClient, McpCallToolResult, McpToolDescriptor } from "./bridge.js";
2
+ import type { McpPrompt, McpPromptMessage, McpResource, McpResourceContent, McpServerConfig } from "./types.js";
3
+ type Redactor = (msg: string) => string;
4
+ /**
5
+ * Identity the SDK announces to the server during the initialize handshake.
6
+ * Library default — almost always overridden by callers (the CLI passes its
7
+ * own `package.json` name/version, which the existing `version.ts` pattern
8
+ * has proven works under `bun build --compile`). Keeping the import-time
9
+ * read out of this file avoids the unverified "binary embeds a transitive
10
+ * workspace JSON import" path that codex flagged.
11
+ */
12
+ export interface ClientIdentity {
13
+ name: string;
14
+ version: string;
15
+ }
16
+ /**
17
+ * Minimal SDK surface this module touches. Defined as a structural type so
18
+ * tests can construct an in-memory pair via `McpClient.fromExisting` without
19
+ * loading the real SDK at all.
20
+ */
21
+ export interface SdkLikeTransport {
22
+ start?(): Promise<void>;
23
+ close(): Promise<void>;
24
+ /**
25
+ * Optional cooperative session teardown. Streamable HTTP transports
26
+ * expose this; stdio does not. We call it best-effort before `close()`
27
+ * so the server can free session state (per MCP spec, clients SHOULD
28
+ * issue HTTP DELETE on session shutdown).
29
+ */
30
+ terminateSession?(): Promise<void>;
31
+ }
32
+ export interface SdkLikeClient {
33
+ connect(transport: SdkLikeTransport): Promise<void>;
34
+ close(): Promise<void>;
35
+ /** (5.4) Register an inbound request handler — used to answer the
36
+ * server-initiated `roots/list`. Optional on the structural type so
37
+ * hand-rolled test fakes need not implement it. */
38
+ setRequestHandler?(schema: unknown, handler: (req: unknown) => unknown | Promise<unknown>): void;
39
+ listTools(params?: unknown, options?: {
40
+ signal?: AbortSignal;
41
+ timeout?: number;
42
+ }): Promise<{
43
+ tools: McpToolDescriptor[];
44
+ }>;
45
+ callTool(params: {
46
+ name: string;
47
+ arguments: Record<string, unknown>;
48
+ }, resultSchema?: unknown, options?: {
49
+ signal?: AbortSignal;
50
+ timeout?: number;
51
+ }): Promise<McpCallToolResult>;
52
+ listResources?(params?: unknown, options?: {
53
+ signal?: AbortSignal;
54
+ timeout?: number;
55
+ }): Promise<{
56
+ resources?: SdkResourceWire[];
57
+ }>;
58
+ readResource?(params: {
59
+ uri: string;
60
+ }, options?: {
61
+ signal?: AbortSignal;
62
+ timeout?: number;
63
+ }): Promise<{
64
+ contents?: SdkResourceContentWire[];
65
+ }>;
66
+ listPrompts?(params?: unknown, options?: {
67
+ signal?: AbortSignal;
68
+ timeout?: number;
69
+ }): Promise<{
70
+ prompts?: SdkPromptWire[];
71
+ }>;
72
+ getPrompt?(params: {
73
+ name: string;
74
+ arguments?: Record<string, string>;
75
+ }, options?: {
76
+ signal?: AbortSignal;
77
+ timeout?: number;
78
+ }): Promise<{
79
+ messages?: SdkPromptMessageWire[];
80
+ description?: string;
81
+ }>;
82
+ }
83
+ /** Wire shapes the SDK returns for resources/prompts (the subset we read). */
84
+ interface SdkResourceWire {
85
+ uri: string;
86
+ name?: string;
87
+ description?: string;
88
+ mimeType?: string;
89
+ }
90
+ interface SdkResourceContentWire {
91
+ uri?: string;
92
+ mimeType?: string;
93
+ text?: string;
94
+ blob?: string;
95
+ }
96
+ interface SdkPromptWire {
97
+ name: string;
98
+ description?: string;
99
+ arguments?: {
100
+ name: string;
101
+ description?: string;
102
+ required?: boolean;
103
+ }[];
104
+ }
105
+ interface SdkPromptMessageWire {
106
+ role: "user" | "assistant";
107
+ content: unknown;
108
+ }
109
+ /**
110
+ * Connected MCP client. Wraps an SDK `Client` + transport pair, exposes the
111
+ * narrow surface the bridge / host actually need, and owns disposal.
112
+ *
113
+ * Two constructors:
114
+ * - `McpClient.connect(serverId, config, opts)`: production path. Lazily
115
+ * loads the SDK via dynamic import and surfaces a labeled error if the
116
+ * optional peer dep isn't installed.
117
+ * - `McpClient.fromExisting(client, transport, timeoutMs?)`: test path.
118
+ * Lets the caller wire `InMemoryTransport` pairs from the SDK or a
119
+ * hand-rolled fake without any dynamic import.
120
+ */
121
+ export declare class McpClient implements McpCallToolClient {
122
+ private readonly client;
123
+ private readonly transport;
124
+ private readonly timeoutMs;
125
+ private readonly redact;
126
+ private constructor();
127
+ static connect(serverId: string, config: McpServerConfig, opts?: {
128
+ connectTimeoutMs?: number;
129
+ redact?: Redactor;
130
+ clientIdentity?: ClientIdentity;
131
+ /** (3.7) When set, the SDK wires this provider into the HTTP
132
+ * transport's OAuth helper so 401s trigger the `auth()` flow. */
133
+ authProvider?: unknown;
134
+ /** (5.4 D6′) Absolute workspace root advertised to the server via a
135
+ * `roots/list` handler. Only used when `advertiseRoots` is true. */
136
+ workspaceRoot?: string;
137
+ /** (5.4 D6′ / S5) Advertise the `roots` capability + answer
138
+ * `roots/list` with `workspaceRoot`. Default false at the library
139
+ * layer; the CLI passes `config.mcp.advertiseRoots` (default true).
140
+ * `listChanged` is always false — we don't push live root changes. */
141
+ advertiseRoots?: boolean;
142
+ }): Promise<McpClient>;
143
+ /** Test seam — see class docstring. */
144
+ static fromExisting(client: SdkLikeClient, transport: SdkLikeTransport, timeoutMs?: number, redact?: Redactor): McpClient;
145
+ /** Exposed so the bridge can scrub MCP tool errors with the same secret bag. */
146
+ redactor(): Redactor;
147
+ listTools(): Promise<McpToolDescriptor[]>;
148
+ callTool(name: string, args: Record<string, unknown>, opts: {
149
+ signal: AbortSignal;
150
+ timeoutMs?: number;
151
+ }): Promise<McpCallToolResult>;
152
+ /** `resources/list`. Returns the server's resources (no `server` stamp). */
153
+ listResources(): Promise<Omit<McpResource, "server">[]>;
154
+ /** `resources/read`. Returns the content items (text xor blob). */
155
+ readResource(uri: string, opts: {
156
+ signal: AbortSignal;
157
+ timeoutMs?: number;
158
+ }): Promise<McpResourceContent[]>;
159
+ /** `prompts/list`. Returns the server's prompts (no `server` stamp). */
160
+ listPrompts(): Promise<Omit<McpPrompt, "server">[]>;
161
+ /** `prompts/get`. Returns the prompt's messages + optional description. */
162
+ getPrompt(name: string, args: Record<string, string>, opts: {
163
+ signal: AbortSignal;
164
+ timeoutMs?: number;
165
+ }): Promise<{
166
+ messages: McpPromptMessage[];
167
+ description?: string;
168
+ }>;
169
+ dispose(): Promise<void>;
170
+ }
171
+ /**
172
+ * Loaded SDK module shape we depend on. The actual import returns far more
173
+ * than this — narrowing keeps the load path self-documenting.
174
+ *
175
+ * **(3.7 codex Round-1 MUST-FIX #6)** All specifiers are computed at runtime
176
+ * (`["@modelcontextprotocol", "sdk", ...].join("/")`) so `bun build --compile`
177
+ * does NOT statically resolve them. Literal `import("@modelcontextprotocol/sdk/...")`
178
+ * would force the SDK to be present at compile time even though it's an
179
+ * OPTIONAL peer dep — the resulting binary would fail to build for
180
+ * consumers who don't enable MCP. The 3.6 OTel pass established the
181
+ * pattern; 3.7 closes the latent 3.1 hole here.
182
+ */
183
+ export interface LoadedSdk {
184
+ Client: new (info: ClientIdentity, options?: unknown) => unknown;
185
+ /** (5.4) Zod schema for `roots/list`, used to register the inbound handler.
186
+ * Loaded from `…/sdk/types.js`. Absent → roots advertisement is skipped. */
187
+ ListRootsRequestSchema?: unknown;
188
+ StdioClientTransport: new (params: {
189
+ command: string;
190
+ args?: string[];
191
+ env?: Record<string, string>;
192
+ cwd?: string;
193
+ }) => SdkLikeTransport;
194
+ StreamableHTTPClientTransport: new (url: URL, opts?: {
195
+ requestInit?: {
196
+ headers?: Record<string, string>;
197
+ };
198
+ /** (3.7) When supplied, the SDK wires this provider into its OAuth
199
+ * helper so 401s trigger the `auth()` orchestrator. */
200
+ authProvider?: unknown;
201
+ }) => SdkLikeTransport;
202
+ /** (3.7) Loaded lazily via `loadSdkAuth()`. Tests may inject a stub
203
+ * via `__setAuthFnForTest`. */
204
+ auth?: (provider: unknown, options: {
205
+ serverUrl: string | URL;
206
+ authorizationCode?: string;
207
+ scope?: string;
208
+ resourceMetadataUrl?: URL;
209
+ }) => Promise<"AUTHORIZED" | "REDIRECT">;
210
+ }
211
+ /** @internal */
212
+ export declare function __setSdkLoaderForTest(loader: () => Promise<LoadedSdk>): void;
213
+ /** @internal */
214
+ export declare function __resetSdkLoaderForTest(): void;
215
+ /** @internal */
216
+ export declare function __setAuthFnForTest(loader: () => Promise<LoadedSdk["auth"]>): void;
217
+ /** @internal */
218
+ export declare function __resetAuthFnForTest(): void;
219
+ /**
220
+ * Lazily loads `@modelcontextprotocol/sdk/client/auth.js` via a computed
221
+ * specifier so the optional peer dep is NOT pulled into a non-MCP
222
+ * `bun build --compile` binary. Cached after first success.
223
+ *
224
+ * Throws an `AppError(Config)` when the SDK isn't installed.
225
+ */
226
+ export declare function loadSdkAuth(): Promise<NonNullable<LoadedSdk["auth"]>>;
227
+ export {};
228
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,KAAK,QAAQ,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;AAGxC;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AASD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB;;;;;OAKG;IACH,gBAAgB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB;;wDAEoD;IACpD,iBAAiB,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACjG,SAAS,CACP,MAAM,CAAC,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC;QAAE,KAAK,EAAE,iBAAiB,EAAE,CAAA;KAAE,CAAC,CAAC;IAC3C,QAAQ,CACN,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAC5D,YAAY,CAAC,EAAE,OAAO,EACtB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAK9B,aAAa,CAAC,CACZ,MAAM,CAAC,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC;QAAE,SAAS,CAAC,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC,CAAC;IAC9C,YAAY,CAAC,CACX,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,EACvB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC;QAAE,QAAQ,CAAC,EAAE,sBAAsB,EAAE,CAAA;KAAE,CAAC,CAAC;IACpD,WAAW,CAAC,CACV,MAAM,CAAC,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;KAAE,CAAC,CAAC;IAC1C,SAAS,CAAC,CACR,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,EAC5D,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACnD,OAAO,CAAC;QAAE,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzE;AAED,8EAA8E;AAC9E,UAAU,eAAe;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AACD,UAAU,sBAAsB;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AACD,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CAC1E;AACD,UAAU,oBAAoB;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,SAAU,YAAW,iBAAiB;IAE/C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO;WAOM,OAAO,CAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE;QACJ,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,MAAM,CAAC,EAAE,QAAQ,CAAC;QAClB,cAAc,CAAC,EAAE,cAAc,CAAC;QAChC;0EACkE;QAClE,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB;6EACqE;QACrE,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB;;;+EAGuE;QACvE,cAAc,CAAC,EAAE,OAAO,CAAC;KACrB,GACL,OAAO,CAAC,SAAS,CAAC;IAmDrB,uCAAuC;IACvC,MAAM,CAAC,YAAY,CACjB,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,gBAAgB,EAC3B,SAAS,GAAE,MAA2B,EACtC,MAAM,GAAE,QAAmB,GAC1B,SAAS;IAIZ,gFAAgF;IAChF,QAAQ,IAAI,QAAQ;IAId,SAAS,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAKzC,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAChD,OAAO,CAAC,iBAAiB,CAAC;IAe7B,4EAA4E;IACtE,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC;IAa7D,mEAAmE;IAC7D,YAAY,CAChB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAChD,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAgBhC,wEAAwE;IAClE,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;IAgBzD,2EAA2E;IACrE,SAAS,CACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,IAAI,EAAE;QAAE,MAAM,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAChD,OAAO,CAAC;QAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAc5D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CA4B/B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,KAAK,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;IACjE;iFAC6E;IAC7E,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,oBAAoB,EAAE,KAAK,MAAM,EAAE;QACjC,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,KAAK,gBAAgB,CAAC;IACvB,6BAA6B,EAAE,KAC7B,GAAG,EAAE,GAAG,EACR,IAAI,CAAC,EAAE;QACL,WAAW,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CAAC;QACnD;gEACwD;QACxD,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,KACE,gBAAgB,CAAC;IACtB;oCACgC;IAChC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,GAAG,CAAA;KAAE,KAAK,OAAO,CAAC,YAAY,GAAG,UAAU,CAAC,CAAC;CAC/K;AAQD,gBAAgB;AAChB,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAE5E;AAED,gBAAgB;AAChB,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAEjF;AAED,gBAAgB;AAChB,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C;AAYD;;;;;;GAMG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAgC3E"}
@@ -0,0 +1,352 @@
1
+ import { pathToFileURL } from "node:url";
2
+ import { AppError, ErrorCode } from "@chances-ai/runtime";
3
+ const identity = (m) => m;
4
+ const DEFAULT_CLIENT_IDENTITY = {
5
+ name: "@chances-ai/cli",
6
+ version: "0.0.0-dev",
7
+ };
8
+ const DEFAULT_TIMEOUT_MS = 30_000;
9
+ /**
10
+ * Connected MCP client. Wraps an SDK `Client` + transport pair, exposes the
11
+ * narrow surface the bridge / host actually need, and owns disposal.
12
+ *
13
+ * Two constructors:
14
+ * - `McpClient.connect(serverId, config, opts)`: production path. Lazily
15
+ * loads the SDK via dynamic import and surfaces a labeled error if the
16
+ * optional peer dep isn't installed.
17
+ * - `McpClient.fromExisting(client, transport, timeoutMs?)`: test path.
18
+ * Lets the caller wire `InMemoryTransport` pairs from the SDK or a
19
+ * hand-rolled fake without any dynamic import.
20
+ */
21
+ export class McpClient {
22
+ client;
23
+ transport;
24
+ timeoutMs;
25
+ redact;
26
+ constructor(client, transport, timeoutMs, redact) {
27
+ this.client = client;
28
+ this.transport = transport;
29
+ this.timeoutMs = timeoutMs;
30
+ this.redact = redact;
31
+ }
32
+ static async connect(serverId, config, opts = {}) {
33
+ const redact = opts.redact ?? identity;
34
+ const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
35
+ const sdk = await loadSdk();
36
+ const transport = await buildTransport(config, sdk, opts.authProvider);
37
+ // (5.4 D6′) Advertise `roots` (workspace root) when asked. `listChanged:
38
+ // false` because we never emit `notifications/roots/list_changed`.
39
+ // (5.4 R2 S5) Gate the capability on `ListRootsRequestSchema` being loaded
40
+ // too — otherwise we'd advertise a capability we can't answer, and a server
41
+ // could send `roots/list` to a missing handler.
42
+ const advertiseRoots = opts.advertiseRoots === true && !!opts.workspaceRoot && !!sdk.ListRootsRequestSchema;
43
+ const clientOptions = advertiseRoots
44
+ ? { capabilities: { roots: { listChanged: false } } }
45
+ : undefined;
46
+ const client = new sdk.Client(opts.clientIdentity ?? DEFAULT_CLIENT_IDENTITY, clientOptions);
47
+ if (advertiseRoots && typeof client.setRequestHandler === "function") {
48
+ const rootUri = pathToFileURL(opts.workspaceRoot).href;
49
+ client.setRequestHandler(sdk.ListRootsRequestSchema, async () => ({
50
+ roots: [{ uri: rootUri, name: "workspace" }],
51
+ }));
52
+ }
53
+ try {
54
+ await withTimeout(client.connect(transport), opts.connectTimeoutMs ?? timeoutMs, `mcp '${serverId}': connect timed out after ${opts.connectTimeoutMs ?? timeoutMs}ms`);
55
+ }
56
+ catch (e) {
57
+ // Best-effort transport teardown so we don't leak a child process if
58
+ // the initialize handshake stalled.
59
+ try {
60
+ await transport.close();
61
+ }
62
+ catch {
63
+ // swallow — the original error is what the caller needs to see
64
+ }
65
+ if (e instanceof AppError) {
66
+ // The labeled message from withTimeout has no secrets; preserve it.
67
+ throw e;
68
+ }
69
+ throw new AppError(ErrorCode.Provider, redact(`mcp '${serverId}': failed to connect: ${e.message}`));
70
+ }
71
+ return new McpClient(client, transport, timeoutMs, redact);
72
+ }
73
+ /** Test seam — see class docstring. */
74
+ static fromExisting(client, transport, timeoutMs = DEFAULT_TIMEOUT_MS, redact = identity) {
75
+ return new McpClient(client, transport, timeoutMs, redact);
76
+ }
77
+ /** Exposed so the bridge can scrub MCP tool errors with the same secret bag. */
78
+ redactor() {
79
+ return this.redact;
80
+ }
81
+ async listTools() {
82
+ const result = await this.client.listTools(undefined, { timeout: this.timeoutMs });
83
+ return result.tools ?? [];
84
+ }
85
+ async callTool(name, args, opts) {
86
+ return this.client.callTool({ name, arguments: args }, undefined, { signal: opts.signal, timeout: opts.timeoutMs ?? this.timeoutMs });
87
+ }
88
+ // ─── 5.4 resources + prompts ─────────────────────────────────────────
89
+ //
90
+ // Each guards `typeof fn === "function"` and throws a clear AppError when
91
+ // the SDK/server doesn't expose the method, so the host can downgrade the
92
+ // feature to "unsupported" rather than failing the whole server. Results are
93
+ // returned WITHOUT the `server` stamp — the host adds it (it owns the id).
94
+ /** `resources/list`. Returns the server's resources (no `server` stamp). */
95
+ async listResources() {
96
+ if (typeof this.client.listResources !== "function") {
97
+ throw new AppError(ErrorCode.Provider, "server does not support resources/list");
98
+ }
99
+ const result = await this.client.listResources(undefined, { timeout: this.timeoutMs });
100
+ return (result.resources ?? []).map((r) => ({
101
+ uri: r.uri,
102
+ name: r.name,
103
+ description: r.description,
104
+ mimeType: r.mimeType,
105
+ }));
106
+ }
107
+ /** `resources/read`. Returns the content items (text xor blob). */
108
+ async readResource(uri, opts) {
109
+ if (typeof this.client.readResource !== "function") {
110
+ throw new AppError(ErrorCode.Provider, "server does not support resources/read");
111
+ }
112
+ const result = await this.client.readResource({ uri }, { signal: opts.signal, timeout: opts.timeoutMs ?? this.timeoutMs });
113
+ return (result.contents ?? []).map((c) => ({
114
+ uri: c.uri,
115
+ mimeType: c.mimeType,
116
+ text: c.text,
117
+ blob: c.blob,
118
+ }));
119
+ }
120
+ /** `prompts/list`. Returns the server's prompts (no `server` stamp). */
121
+ async listPrompts() {
122
+ if (typeof this.client.listPrompts !== "function") {
123
+ throw new AppError(ErrorCode.Provider, "server does not support prompts/list");
124
+ }
125
+ const result = await this.client.listPrompts(undefined, { timeout: this.timeoutMs });
126
+ return (result.prompts ?? []).map((p) => ({
127
+ name: p.name,
128
+ description: p.description,
129
+ arguments: p.arguments?.map((a) => ({
130
+ name: a.name,
131
+ description: a.description,
132
+ required: a.required,
133
+ })),
134
+ }));
135
+ }
136
+ /** `prompts/get`. Returns the prompt's messages + optional description. */
137
+ async getPrompt(name, args, opts) {
138
+ if (typeof this.client.getPrompt !== "function") {
139
+ throw new AppError(ErrorCode.Provider, "server does not support prompts/get");
140
+ }
141
+ const result = await this.client.getPrompt({ name, arguments: args }, { signal: opts.signal, timeout: opts.timeoutMs ?? this.timeoutMs });
142
+ return {
143
+ messages: (result.messages ?? []).map((m) => ({ role: m.role, content: m.content })),
144
+ description: result.description,
145
+ };
146
+ }
147
+ async dispose() {
148
+ // Three legs, all best-effort: terminateSession (HTTP only, lets the
149
+ // server drop session state), client.close, transport.close. We want
150
+ // the host's overall `dispose()` to finish even if one is wedged.
151
+ let firstError;
152
+ if (typeof this.transport.terminateSession === "function") {
153
+ try {
154
+ await this.transport.terminateSession();
155
+ }
156
+ catch (e) {
157
+ firstError = e;
158
+ }
159
+ }
160
+ try {
161
+ await this.client.close();
162
+ }
163
+ catch (e) {
164
+ firstError ??= e;
165
+ }
166
+ try {
167
+ await this.transport.close();
168
+ }
169
+ catch (e) {
170
+ firstError ??= e;
171
+ }
172
+ if (firstError) {
173
+ const wrapped = new Error(this.redact(firstError.message));
174
+ wrapped.stack = firstError.stack;
175
+ throw wrapped;
176
+ }
177
+ }
178
+ }
179
+ /** Test seam: overridable loader so unit tests can avoid the dynamic import. */
180
+ let sdkLoader = defaultSdkLoader;
181
+ /** Test seam: overridable auth-function loader. Returns `undefined` when
182
+ * not in test mode — `loadSdkAuth()` falls back to the live SDK then. */
183
+ let authFnLoader;
184
+ /** @internal */
185
+ export function __setSdkLoaderForTest(loader) {
186
+ sdkLoader = loader;
187
+ }
188
+ /** @internal */
189
+ export function __resetSdkLoaderForTest() {
190
+ sdkLoader = defaultSdkLoader;
191
+ }
192
+ /** @internal */
193
+ export function __setAuthFnForTest(loader) {
194
+ authFnLoader = loader;
195
+ }
196
+ /** @internal */
197
+ export function __resetAuthFnForTest() {
198
+ authFnLoader = undefined;
199
+ cachedSdkAuth = undefined;
200
+ }
201
+ async function loadSdk() {
202
+ return sdkLoader();
203
+ }
204
+ /** (codex Round-2 NICE #1) Module-level cache for the resolved
205
+ * `auth()` function. ESM module caching already prevents re-execution
206
+ * of the imported file, but caching the resolved property dodges
207
+ * redundant Promise allocation + property lookup on every /mcp login. */
208
+ let cachedSdkAuth;
209
+ /**
210
+ * Lazily loads `@modelcontextprotocol/sdk/client/auth.js` via a computed
211
+ * specifier so the optional peer dep is NOT pulled into a non-MCP
212
+ * `bun build --compile` binary. Cached after first success.
213
+ *
214
+ * Throws an `AppError(Config)` when the SDK isn't installed.
215
+ */
216
+ export async function loadSdkAuth() {
217
+ // Test seam takes precedence so per-test fakes always win over the cache.
218
+ if (authFnLoader) {
219
+ const fn = await authFnLoader();
220
+ if (fn)
221
+ return fn;
222
+ }
223
+ if (cachedSdkAuth)
224
+ return cachedSdkAuth;
225
+ const specifier = ["@modelcontextprotocol", "sdk", "client", "auth.js"].join("/");
226
+ try {
227
+ const mod = (await import(specifier));
228
+ if (typeof mod.auth !== "function") {
229
+ throw new AppError(ErrorCode.Config, `mcp: '${specifier}' loaded but does not export an 'auth()' function`);
230
+ }
231
+ cachedSdkAuth = mod.auth;
232
+ return cachedSdkAuth;
233
+ }
234
+ catch (e) {
235
+ if (e instanceof AppError)
236
+ throw e;
237
+ if (isModuleNotFound(e, "@modelcontextprotocol/sdk")) {
238
+ throw new AppError(ErrorCode.Config, `mcp: optional peer dependency '@modelcontextprotocol/sdk' is not installed. ` +
239
+ `OAuth flows require the SDK — run \`bun add @modelcontextprotocol/sdk\` first.`);
240
+ }
241
+ throw new AppError(ErrorCode.Config, `mcp: failed to load OAuth helper '${specifier}': ${e.message}`);
242
+ }
243
+ }
244
+ async function defaultSdkLoader() {
245
+ // Computed specifiers: see LoadedSdk docstring + § 16 of 3.7-design.md.
246
+ const ROOT = ["@modelcontextprotocol", "sdk", "client", "index.js"].join("/");
247
+ const STDIO = ["@modelcontextprotocol", "sdk", "client", "stdio.js"].join("/");
248
+ const HTTP = ["@modelcontextprotocol", "sdk", "client", "streamableHttp.js"].join("/");
249
+ const TYPES = ["@modelcontextprotocol", "sdk", "types.js"].join("/");
250
+ let probe;
251
+ try {
252
+ await import(ROOT);
253
+ probe = { ok: true };
254
+ }
255
+ catch (e) {
256
+ probe = { ok: false, error: e };
257
+ }
258
+ if (!probe.ok) {
259
+ if (isModuleNotFound(probe.error, "@modelcontextprotocol/sdk")) {
260
+ throw new AppError(ErrorCode.Config, `mcp: optional peer dependency '@modelcontextprotocol/sdk' is not installed. ` +
261
+ `Run \`bun add @modelcontextprotocol/sdk\` (or \`npm i\` / \`pnpm add\`) to use MCP servers.`);
262
+ }
263
+ throw new AppError(ErrorCode.Config, `mcp: failed to load '${ROOT}': ${probe.error.message}`);
264
+ }
265
+ const [clientMod, stdioMod, httpMod, typesMod] = await Promise.all([
266
+ import(ROOT),
267
+ import(STDIO).catch((e) => {
268
+ throw new AppError(ErrorCode.Config, `mcp: failed to load stdio transport: ${e.message}`);
269
+ }),
270
+ import(HTTP).catch((e) => {
271
+ throw new AppError(ErrorCode.Config, `mcp: failed to load streamableHttp transport: ${e.message}`);
272
+ }),
273
+ // (5.4) types.js carries the request schemas. Non-fatal if it can't
274
+ // load — roots advertisement just stays off (the core tools/resources
275
+ // path doesn't depend on it).
276
+ import(TYPES).catch(() => undefined),
277
+ ]);
278
+ return {
279
+ Client: clientMod.Client,
280
+ ListRootsRequestSchema: typesMod
281
+ ?.ListRootsRequestSchema,
282
+ StdioClientTransport: stdioMod
283
+ .StdioClientTransport,
284
+ StreamableHTTPClientTransport: httpMod.StreamableHTTPClientTransport,
285
+ };
286
+ }
287
+ /** Heuristic: Node throws `MODULE_NOT_FOUND` (CJS path), `ERR_MODULE_NOT_FOUND`
288
+ * (ESM path), or sometimes a TypeError with `Cannot find module`. We match the
289
+ * code first, then verify the *requested* specifier (in the first quoted
290
+ * segment of the message) matches ours. Just substring-matching the whole
291
+ * message would mis-classify a missing transitive dep — e.g. `Cannot find
292
+ * package 'foo' imported from .../@modelcontextprotocol/sdk/...` — as the SDK
293
+ * itself being absent.
294
+ */
295
+ function isModuleNotFound(err, specifier) {
296
+ const code = err.code;
297
+ const hasMissingCode = code === "MODULE_NOT_FOUND" ||
298
+ code === "ERR_MODULE_NOT_FOUND" ||
299
+ /Cannot find (module|package)/.test(err.message);
300
+ if (!hasMissingCode)
301
+ return false;
302
+ // The first quoted token after "Cannot find package/module" is the
303
+ // requested specifier; match against that, not the whole message.
304
+ const requested = /Cannot find (?:package|module) ['"]([^'"]+)['"]/.exec(err.message);
305
+ if (requested && requested[1] !== undefined) {
306
+ return requested[1] === specifier || requested[1].startsWith(`${specifier}/`);
307
+ }
308
+ // Older Node versions or non-standard formats may not have the quoted
309
+ // requested specifier — fall through to an endsWith check on the SDK name
310
+ // tokens. Defensive but rare path.
311
+ const tokens = err.message.split(/\s+/);
312
+ return tokens.some((t) => t === specifier || t.startsWith(`${specifier}/`));
313
+ }
314
+ async function buildTransport(config, sdk, authProvider) {
315
+ if (config.type === "stdio") {
316
+ return new sdk.StdioClientTransport({
317
+ command: config.command,
318
+ args: config.args,
319
+ env: config.env,
320
+ cwd: config.cwd,
321
+ });
322
+ }
323
+ let url;
324
+ try {
325
+ url = new URL(config.url);
326
+ }
327
+ catch {
328
+ // Intentionally do not echo the URL — it can carry an env-substituted
329
+ // bearer token in the query string or userinfo. The user can read
330
+ // their config to see what they put there.
331
+ throw new AppError(ErrorCode.Config, "mcp http transport: invalid url (see config)");
332
+ }
333
+ const httpOpts = {};
334
+ if (config.headers)
335
+ httpOpts.requestInit = { headers: config.headers };
336
+ if (authProvider)
337
+ httpOpts.authProvider = authProvider;
338
+ return new sdk.StreamableHTTPClientTransport(url, httpOpts);
339
+ }
340
+ async function withTimeout(p, ms, message) {
341
+ return new Promise((resolve, reject) => {
342
+ const timer = setTimeout(() => reject(new AppError(ErrorCode.Provider, message)), ms);
343
+ p.then((v) => {
344
+ clearTimeout(timer);
345
+ resolve(v);
346
+ }, (e) => {
347
+ clearTimeout(timer);
348
+ reject(e);
349
+ });
350
+ });
351
+ }
352
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"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"}