@kamilio/wire 0.1.9 → 0.1.10

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 (1453) hide show
  1. package/dist/adapters/root.d.ts +2 -1
  2. package/dist/adapters/root.d.ts.map +1 -1
  3. package/dist/adapters/root.js +12 -2
  4. package/dist/adapters/root.js.map +1 -1
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +5 -1
  7. package/dist/cli.js.map +1 -1
  8. package/dist/executable.d.ts.map +1 -1
  9. package/dist/executable.js +2 -1
  10. package/dist/executable.js.map +1 -1
  11. package/dist/mcp.d.ts +2 -3
  12. package/dist/mcp.d.ts.map +1 -1
  13. package/node_modules/provider-slack/dist/index.d.ts +1 -1
  14. package/node_modules/provider-slack/dist/index.d.ts.map +1 -1
  15. package/node_modules/provider-slack/dist/index.js +1 -1
  16. package/node_modules/provider-slack/dist/index.js.map +1 -1
  17. package/node_modules/provider-slack/dist/slack.d.ts +10 -0
  18. package/node_modules/provider-slack/dist/slack.d.ts.map +1 -1
  19. package/node_modules/provider-slack/dist/slack.js +395 -22
  20. package/node_modules/provider-slack/dist/slack.js.map +1 -1
  21. package/node_modules/provider-slack/package.json +10 -4
  22. package/node_modules/provider-slack/src/index.ts +1 -1
  23. package/node_modules/provider-slack/src/slack.ts +314 -20
  24. package/node_modules/toolcraft/LICENSE +21 -0
  25. package/node_modules/toolcraft/README.md +268 -23
  26. package/node_modules/toolcraft/composition.json +165 -0
  27. package/node_modules/toolcraft/dist/agent-defs.d.ts +1 -0
  28. package/node_modules/toolcraft/dist/agent-defs.js +1 -0
  29. package/node_modules/toolcraft/dist/agent-mcp-config.d.ts +1 -0
  30. package/node_modules/toolcraft/dist/agent-mcp-config.js +1 -0
  31. package/node_modules/toolcraft/dist/applied-default.d.ts +3 -0
  32. package/node_modules/toolcraft/dist/applied-default.js +16 -0
  33. package/node_modules/toolcraft/dist/auth-store.d.ts +1 -0
  34. package/node_modules/toolcraft/dist/auth-store.js +1 -0
  35. package/node_modules/toolcraft/dist/cli.compile-check.js +20 -2
  36. package/node_modules/toolcraft/dist/cli.d.ts +97 -4
  37. package/node_modules/toolcraft/dist/cli.js +1322 -412
  38. package/node_modules/toolcraft/dist/composition.d.ts +15 -0
  39. package/node_modules/toolcraft/dist/composition.js +10 -0
  40. package/node_modules/toolcraft/dist/composition.json +165 -0
  41. package/node_modules/toolcraft/dist/config-mutations.d.ts +1 -0
  42. package/node_modules/toolcraft/dist/config-mutations.js +1 -0
  43. package/node_modules/toolcraft/dist/design/help-formatter.d.ts +2 -2
  44. package/node_modules/toolcraft/dist/design/help-formatter.js +1 -1
  45. package/node_modules/toolcraft/dist/design/render-markdown-plaintext.d.ts +2 -0
  46. package/node_modules/toolcraft/dist/design/render-markdown-plaintext.js +1 -0
  47. package/node_modules/toolcraft/dist/design/render-markdown.d.ts +2 -0
  48. package/node_modules/toolcraft/dist/design/render-markdown.js +1 -0
  49. package/node_modules/toolcraft/dist/discriminator.d.ts +9 -0
  50. package/node_modules/toolcraft/dist/discriminator.js +32 -0
  51. package/node_modules/toolcraft/dist/error-report.d.ts +12 -17
  52. package/node_modules/toolcraft/dist/error-report.js +25 -16
  53. package/node_modules/toolcraft/dist/file-change-renderer.d.ts +9 -0
  54. package/node_modules/toolcraft/dist/file-change-renderer.js +10 -0
  55. package/node_modules/toolcraft/dist/frontmatter.d.ts +1 -0
  56. package/node_modules/toolcraft/dist/frontmatter.js +1 -0
  57. package/node_modules/toolcraft/dist/http-hosted-oauth.compile-check.js +60 -0
  58. package/node_modules/toolcraft/dist/http-hosted-oauth.d.ts +124 -0
  59. package/node_modules/toolcraft/dist/http-hosted-oauth.js +473 -0
  60. package/node_modules/toolcraft/dist/http.compile-check.js +31 -0
  61. package/node_modules/toolcraft/dist/http.d.ts +31 -0
  62. package/node_modules/toolcraft/dist/http.js +161 -0
  63. package/node_modules/toolcraft/dist/human-in-loop/approval-tasks.d.ts +8 -2
  64. package/node_modules/toolcraft/dist/human-in-loop/approval-tasks.js +33 -19
  65. package/node_modules/toolcraft/dist/human-in-loop/approvals-commands.d.ts +3 -3
  66. package/node_modules/toolcraft/dist/human-in-loop/approvals-commands.js +27 -33
  67. package/node_modules/toolcraft/dist/human-in-loop/config.js +3 -0
  68. package/node_modules/toolcraft/dist/human-in-loop/gate.d.ts +7 -3
  69. package/node_modules/toolcraft/dist/human-in-loop/gate.js +33 -31
  70. package/node_modules/toolcraft/dist/human-in-loop/index.d.ts +4 -1
  71. package/node_modules/toolcraft/dist/human-in-loop/index.js +2 -0
  72. package/node_modules/toolcraft/dist/human-in-loop/plan-hash.d.ts +13 -0
  73. package/node_modules/toolcraft/dist/human-in-loop/plan-hash.js +78 -0
  74. package/node_modules/toolcraft/dist/human-in-loop/runner.d.ts +1 -1
  75. package/node_modules/toolcraft/dist/human-in-loop/runner.js +45 -32
  76. package/node_modules/toolcraft/dist/human-in-loop/runtime-options.d.ts +19 -0
  77. package/node_modules/toolcraft/dist/human-in-loop/runtime.d.ts +2 -0
  78. package/node_modules/toolcraft/dist/human-in-loop/runtime.js +14 -0
  79. package/node_modules/toolcraft/dist/human-in-loop/spawn.d.ts +2 -2
  80. package/node_modules/toolcraft/dist/human-in-loop/types.d.ts +14 -14
  81. package/node_modules/toolcraft/dist/human-in-loop/wiring.d.ts +11 -0
  82. package/node_modules/toolcraft/dist/human-in-loop/wiring.js +36 -0
  83. package/node_modules/toolcraft/dist/index.compile-check.js +50 -1
  84. package/node_modules/toolcraft/dist/index.d.ts +1 -210
  85. package/node_modules/toolcraft/dist/index.js +1 -475
  86. package/node_modules/toolcraft/dist/json-schema-converter.d.ts +14 -6
  87. package/node_modules/toolcraft/dist/json-schema-converter.js +150 -20
  88. package/node_modules/toolcraft/dist/mcp-proxy-metadata.d.ts +2 -0
  89. package/node_modules/toolcraft/dist/mcp-proxy-metadata.js +13 -0
  90. package/node_modules/toolcraft/dist/mcp-proxy.d.ts +2 -1
  91. package/node_modules/toolcraft/dist/mcp-proxy.js +69 -64
  92. package/node_modules/toolcraft/dist/mcp-result.d.ts +3 -0
  93. package/node_modules/toolcraft/dist/mcp-result.js +10 -0
  94. package/node_modules/toolcraft/dist/mcp.compile-check.js +4 -1
  95. package/node_modules/toolcraft/dist/mcp.d.ts +13 -3
  96. package/node_modules/toolcraft/dist/mcp.js +391 -217
  97. package/node_modules/toolcraft/dist/node-require-shim.js +4 -0
  98. package/node_modules/toolcraft/dist/package-metadata.js +9 -2
  99. package/node_modules/toolcraft/dist/process-runner.d.ts +1 -0
  100. package/node_modules/toolcraft/dist/process-runner.js +1 -0
  101. package/node_modules/toolcraft/dist/project-root.d.ts +1 -0
  102. package/node_modules/toolcraft/dist/project-root.js +15 -0
  103. package/node_modules/toolcraft/dist/redaction.js +26 -17
  104. package/node_modules/toolcraft/dist/renderer.d.ts +1 -1
  105. package/node_modules/toolcraft/dist/renderer.js +43 -42
  106. package/node_modules/toolcraft/dist/runtime/io.d.ts +5 -0
  107. package/node_modules/toolcraft/dist/runtime/io.js +59 -0
  108. package/node_modules/toolcraft/dist/runtime-platform.d.ts +2 -0
  109. package/node_modules/toolcraft/dist/runtime-platform.js +2 -0
  110. package/node_modules/toolcraft/dist/runtime-platform.workerd.d.ts +3 -0
  111. package/node_modules/toolcraft/dist/runtime-platform.workerd.js +10 -0
  112. package/node_modules/toolcraft/dist/runtime.d.ts +266 -0
  113. package/node_modules/toolcraft/dist/runtime.js +576 -0
  114. package/node_modules/toolcraft/dist/safe-bash-capabilities.compile-check.js +11 -0
  115. package/node_modules/toolcraft/dist/safe-bash.compile-check.js +16 -0
  116. package/node_modules/toolcraft/dist/safe-bash.d.ts +75 -0
  117. package/node_modules/toolcraft/dist/safe-bash.js +226 -0
  118. package/node_modules/toolcraft/dist/schema-member-names.d.ts +2 -0
  119. package/node_modules/toolcraft/dist/schema-member-names.js +39 -0
  120. package/node_modules/toolcraft/dist/schema-scope.d.ts +1 -0
  121. package/node_modules/toolcraft/dist/schema-scope.js +29 -16
  122. package/node_modules/toolcraft/dist/schema-standard.compile-check.js +4 -0
  123. package/node_modules/toolcraft/dist/schema.d.ts +2 -0
  124. package/node_modules/toolcraft/dist/schema.js +1 -0
  125. package/node_modules/toolcraft/dist/sdk.compile-check.js +31 -1
  126. package/node_modules/toolcraft/dist/sdk.d.ts +22 -13
  127. package/node_modules/toolcraft/dist/sdk.js +237 -108
  128. package/node_modules/toolcraft/dist/stream.d.ts +19 -0
  129. package/node_modules/toolcraft/dist/stream.js +93 -0
  130. package/node_modules/toolcraft/dist/testing/diagnostic-value.d.ts +1 -0
  131. package/node_modules/toolcraft/dist/testing/diagnostic-value.js +57 -0
  132. package/node_modules/toolcraft/dist/testing/fakes.d.ts +20 -0
  133. package/node_modules/toolcraft/dist/testing/fakes.js +84 -0
  134. package/node_modules/toolcraft/dist/testing/fixtures.d.ts +8 -0
  135. package/node_modules/toolcraft/dist/testing/fixtures.js +248 -0
  136. package/node_modules/toolcraft/dist/testing/harness.d.ts +97 -0
  137. package/node_modules/toolcraft/dist/testing/harness.js +490 -0
  138. package/node_modules/toolcraft/dist/testing/hosted-oauth-storage.d.ts +6 -0
  139. package/node_modules/toolcraft/dist/testing/hosted-oauth-storage.js +140 -0
  140. package/node_modules/toolcraft/dist/testing/index.d.ts +5 -0
  141. package/node_modules/toolcraft/dist/testing/index.js +4 -0
  142. package/node_modules/toolcraft/dist/testing/memory-fs.d.ts +11 -0
  143. package/node_modules/toolcraft/dist/testing/memory-fs.js +102 -0
  144. package/node_modules/toolcraft/dist/testing/parity.d.ts +25 -0
  145. package/node_modules/toolcraft/dist/testing/parity.js +428 -0
  146. package/node_modules/toolcraft/dist/testing/render-capture.d.ts +6 -0
  147. package/node_modules/toolcraft/dist/testing/render-capture.js +55 -0
  148. package/node_modules/toolcraft/dist/tiny-mcp-client.d.ts +1 -0
  149. package/node_modules/toolcraft/dist/tiny-mcp-client.js +1 -0
  150. package/node_modules/toolcraft/dist/union-validation.d.ts +5 -0
  151. package/node_modules/toolcraft/dist/union-validation.js +36 -0
  152. package/node_modules/toolcraft/dist/user-error.d.ts +8 -0
  153. package/node_modules/toolcraft/dist/user-error.js +10 -0
  154. package/node_modules/toolcraft/node_modules/@noble/hashes/LICENSE +21 -0
  155. package/node_modules/toolcraft/node_modules/@noble/hashes/README.md +478 -0
  156. package/node_modules/toolcraft/node_modules/@noble/hashes/_blake.d.ts +20 -0
  157. package/node_modules/toolcraft/node_modules/@noble/hashes/_blake.js +59 -0
  158. package/node_modules/toolcraft/node_modules/@noble/hashes/_md.d.ts +95 -0
  159. package/node_modules/toolcraft/node_modules/@noble/hashes/_md.js +209 -0
  160. package/node_modules/toolcraft/node_modules/@noble/hashes/_u64.d.ts +36 -0
  161. package/node_modules/toolcraft/node_modules/@noble/hashes/_u64.js +77 -0
  162. package/node_modules/toolcraft/node_modules/@noble/hashes/argon2.d.ts +148 -0
  163. package/node_modules/toolcraft/node_modules/@noble/hashes/argon2.js +577 -0
  164. package/node_modules/toolcraft/node_modules/@noble/hashes/blake1.d.ts +162 -0
  165. package/node_modules/toolcraft/node_modules/@noble/hashes/blake1.js +630 -0
  166. package/node_modules/toolcraft/node_modules/@noble/hashes/blake2.d.ts +203 -0
  167. package/node_modules/toolcraft/node_modules/@noble/hashes/blake2.js +573 -0
  168. package/node_modules/toolcraft/node_modules/@noble/hashes/blake3.d.ts +68 -0
  169. package/node_modules/toolcraft/node_modules/@noble/hashes/blake3.js +310 -0
  170. package/node_modules/toolcraft/node_modules/@noble/hashes/eskdf.d.ts +91 -0
  171. package/node_modules/toolcraft/node_modules/@noble/hashes/eskdf.js +225 -0
  172. package/node_modules/toolcraft/node_modules/@noble/hashes/hkdf.d.ts +70 -0
  173. package/node_modules/toolcraft/node_modules/@noble/hashes/hkdf.js +152 -0
  174. package/node_modules/toolcraft/node_modules/@noble/hashes/hmac.d.ts +50 -0
  175. package/node_modules/toolcraft/node_modules/@noble/hashes/hmac.js +93 -0
  176. package/node_modules/toolcraft/node_modules/@noble/hashes/index.js +34 -0
  177. package/node_modules/toolcraft/node_modules/@noble/hashes/legacy.d.ts +107 -0
  178. package/node_modules/toolcraft/node_modules/@noble/hashes/legacy.js +348 -0
  179. package/node_modules/toolcraft/node_modules/@noble/hashes/package.json +91 -0
  180. package/node_modules/toolcraft/node_modules/@noble/hashes/pbkdf2.d.ts +66 -0
  181. package/node_modules/toolcraft/node_modules/@noble/hashes/pbkdf2.js +176 -0
  182. package/node_modules/toolcraft/node_modules/@noble/hashes/scrypt.d.ts +98 -0
  183. package/node_modules/toolcraft/node_modules/@noble/hashes/scrypt.js +304 -0
  184. package/node_modules/toolcraft/node_modules/@noble/hashes/sha2.d.ts +176 -0
  185. package/node_modules/toolcraft/node_modules/@noble/hashes/sha2.js +446 -0
  186. package/node_modules/toolcraft/node_modules/@noble/hashes/sha3-addons.d.ts +533 -0
  187. package/node_modules/toolcraft/node_modules/@noble/hashes/sha3-addons.js +973 -0
  188. package/node_modules/toolcraft/node_modules/@noble/hashes/sha3.d.ts +208 -0
  189. package/node_modules/toolcraft/node_modules/@noble/hashes/sha3.js +475 -0
  190. package/node_modules/toolcraft/node_modules/@noble/hashes/src/_blake.ts +67 -0
  191. package/node_modules/toolcraft/node_modules/@noble/hashes/src/_md.ts +227 -0
  192. package/node_modules/toolcraft/node_modules/@noble/hashes/src/_u64.ts +111 -0
  193. package/node_modules/toolcraft/node_modules/@noble/hashes/src/argon2.ts +693 -0
  194. package/node_modules/toolcraft/node_modules/@noble/hashes/src/blake1.ts +677 -0
  195. package/node_modules/toolcraft/node_modules/@noble/hashes/src/blake2.ts +648 -0
  196. package/node_modules/toolcraft/node_modules/@noble/hashes/src/blake3.ts +344 -0
  197. package/node_modules/toolcraft/node_modules/@noble/hashes/src/eskdf.ts +265 -0
  198. package/node_modules/toolcraft/node_modules/@noble/hashes/src/hkdf.ts +161 -0
  199. package/node_modules/toolcraft/node_modules/@noble/hashes/src/hmac.ts +130 -0
  200. package/node_modules/toolcraft/node_modules/@noble/hashes/src/index.ts +33 -0
  201. package/node_modules/toolcraft/node_modules/@noble/hashes/src/legacy.ts +361 -0
  202. package/node_modules/toolcraft/node_modules/@noble/hashes/src/pbkdf2.ts +219 -0
  203. package/node_modules/toolcraft/node_modules/@noble/hashes/src/scrypt.ts +375 -0
  204. package/node_modules/toolcraft/node_modules/@noble/hashes/src/sha2.ts +486 -0
  205. package/node_modules/toolcraft/node_modules/@noble/hashes/src/sha3-addons.ts +1157 -0
  206. package/node_modules/toolcraft/node_modules/@noble/hashes/src/sha3.ts +525 -0
  207. package/node_modules/toolcraft/node_modules/@noble/hashes/src/utils.ts +978 -0
  208. package/node_modules/toolcraft/node_modules/@noble/hashes/src/webcrypto.ts +283 -0
  209. package/node_modules/toolcraft/node_modules/@noble/hashes/utils.d.ts +560 -0
  210. package/node_modules/toolcraft/node_modules/@noble/hashes/utils.js +687 -0
  211. package/node_modules/toolcraft/node_modules/@noble/hashes/webcrypto.d.ts +121 -0
  212. package/node_modules/toolcraft/node_modules/@noble/hashes/webcrypto.js +228 -0
  213. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/LICENSE +21 -0
  214. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/README.md +15 -2
  215. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/agents/claude-code.js +2 -1
  216. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/agents/claude-desktop.js +1 -0
  217. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/agents/codex.js +2 -1
  218. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/agents/cursor.js +1 -0
  219. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/agents/gemini-cli.js +2 -1
  220. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/agents/goose.js +1 -0
  221. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/agents/index.d.ts +1 -1
  222. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/agents/index.js +1 -1
  223. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/agents/opencode.js +2 -1
  224. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/agents/{kimi.d.ts → pi.d.ts} +1 -1
  225. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/agents/pi.js +15 -0
  226. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/agents/poe-agent.js +1 -0
  227. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/capabilities.d.ts +14 -0
  228. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/capabilities.js +63 -0
  229. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/index.d.ts +3 -2
  230. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/index.js +2 -1
  231. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/registry.js +5 -2
  232. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/types.d.ts +8 -1
  233. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/package.json +11 -5
  234. package/node_modules/toolcraft/node_modules/@poe-code/agent-human-in-loop/LICENSE +21 -0
  235. package/node_modules/toolcraft/node_modules/@poe-code/agent-human-in-loop/README.md +12 -2
  236. package/node_modules/toolcraft/node_modules/@poe-code/agent-human-in-loop/package.json +10 -4
  237. package/node_modules/toolcraft/node_modules/@poe-code/agent-mcp-config/LICENSE +21 -0
  238. package/node_modules/toolcraft/node_modules/@poe-code/agent-mcp-config/README.md +7 -7
  239. package/node_modules/toolcraft/node_modules/@poe-code/agent-mcp-config/dist/apply.js +23 -9
  240. package/node_modules/toolcraft/node_modules/@poe-code/agent-mcp-config/dist/configs.js +0 -6
  241. package/node_modules/toolcraft/node_modules/@poe-code/agent-mcp-config/package.json +9 -6
  242. package/node_modules/toolcraft/node_modules/@poe-code/config-mutations/LICENSE +21 -0
  243. package/node_modules/toolcraft/node_modules/@poe-code/config-mutations/README.md +17 -8
  244. package/node_modules/toolcraft/node_modules/@poe-code/config-mutations/dist/execution/apply-mutation.js +17 -19
  245. package/node_modules/toolcraft/node_modules/@poe-code/config-mutations/dist/execution/path-utils.d.ts +3 -3
  246. package/node_modules/toolcraft/node_modules/@poe-code/config-mutations/dist/execution/path-utils.js +4 -4
  247. package/node_modules/toolcraft/node_modules/@poe-code/config-mutations/dist/formats/json.js +1 -3
  248. package/node_modules/toolcraft/node_modules/@poe-code/config-mutations/dist/formats/toml.js +1 -3
  249. package/node_modules/toolcraft/node_modules/@poe-code/config-mutations/dist/formats/yaml.js +1 -3
  250. package/node_modules/toolcraft/node_modules/@poe-code/config-mutations/dist/template/render.js +1 -1
  251. package/node_modules/toolcraft/node_modules/@poe-code/config-mutations/dist/testing/mock-fs.d.ts +2 -2
  252. package/node_modules/toolcraft/node_modules/@poe-code/config-mutations/dist/testing/mock-fs.js +3 -6
  253. package/node_modules/toolcraft/node_modules/@poe-code/config-mutations/dist/types.d.ts +5 -1
  254. package/node_modules/toolcraft/node_modules/@poe-code/config-mutations/dist/types.js +1 -1
  255. package/node_modules/toolcraft/node_modules/@poe-code/config-mutations/package.json +9 -8
  256. package/node_modules/toolcraft/node_modules/@poe-code/frontmatter/LICENSE +21 -0
  257. package/node_modules/toolcraft/node_modules/@poe-code/frontmatter/README.md +7 -2
  258. package/node_modules/toolcraft/node_modules/@poe-code/frontmatter/dist/index.d.ts +1 -1
  259. package/node_modules/toolcraft/node_modules/@poe-code/frontmatter/dist/index.js +1 -1
  260. package/node_modules/toolcraft/node_modules/@poe-code/frontmatter/dist/parse.d.ts +9 -0
  261. package/node_modules/toolcraft/node_modules/@poe-code/frontmatter/dist/parse.js +16 -0
  262. package/node_modules/toolcraft/node_modules/@poe-code/frontmatter/package.json +7 -5
  263. package/node_modules/toolcraft/node_modules/@poe-code/process-runner/LICENSE +21 -0
  264. package/node_modules/toolcraft/node_modules/@poe-code/process-runner/README.md +5 -2
  265. package/node_modules/toolcraft/node_modules/@poe-code/process-runner/dist/docker/build-context.js +2 -3
  266. package/node_modules/toolcraft/node_modules/@poe-code/process-runner/dist/docker/docker-execution-env.js +66 -34
  267. package/node_modules/toolcraft/node_modules/@poe-code/process-runner/dist/host/host-execution-env.js +1 -0
  268. package/node_modules/toolcraft/node_modules/@poe-code/process-runner/dist/transfer-filesystem.d.ts +1 -0
  269. package/node_modules/toolcraft/node_modules/@poe-code/process-runner/dist/transfer-filesystem.js +1 -0
  270. package/node_modules/toolcraft/node_modules/@poe-code/process-runner/dist/transfer-filesystem.workerd.d.ts +2 -0
  271. package/node_modules/toolcraft/node_modules/@poe-code/process-runner/dist/transfer-filesystem.workerd.js +1 -0
  272. package/node_modules/toolcraft/node_modules/@poe-code/process-runner/dist/types.d.ts +12 -5
  273. package/node_modules/toolcraft/node_modules/@poe-code/process-runner/dist/workspace-transfer.d.ts +6 -5
  274. package/node_modules/toolcraft/node_modules/@poe-code/process-runner/dist/workspace-transfer.js +67 -29
  275. package/node_modules/toolcraft/node_modules/@poe-code/process-runner/package.json +22 -7
  276. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/LICENSE +21 -0
  277. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/PROVENANCE.json +428 -0
  278. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/README.md +453 -0
  279. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/bridge/confinement.d.ts +3 -0
  280. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/bridge/confinement.js +171 -0
  281. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/bridge/filesystem.d.ts +93 -0
  282. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/bridge/filesystem.js +453 -0
  283. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/bridge/index.d.ts +7 -0
  284. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/bridge/index.js +19 -0
  285. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/bridge/stats.d.ts +4 -0
  286. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/bridge/stats.js +37 -0
  287. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/bridge/types.d.ts +81 -0
  288. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/bridge/values.d.ts +6 -0
  289. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/bridge/values.js +65 -0
  290. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/config/memory.d.ts +3 -0
  291. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/config/memory.js +7 -0
  292. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/config/real.d.ts +5 -0
  293. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/config/real.js +16 -0
  294. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/config/registry.d.ts +2 -0
  295. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/config/registry.js +15 -0
  296. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/config.d.ts +15 -0
  297. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/config.js +46 -0
  298. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/config.node.d.ts +2 -0
  299. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/config.node.js +11 -0
  300. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/config.portable.d.ts +3 -0
  301. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/config.portable.js +9 -0
  302. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/abort.d.ts +5 -0
  303. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/abort.js +34 -0
  304. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/cleanup.d.ts +1 -0
  305. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/cleanup.js +9 -0
  306. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/descriptor.d.ts +38 -0
  307. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/descriptor.js +1 -0
  308. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/errors.d.ts +53 -0
  309. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/errors.js +99 -0
  310. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/filesystem.d.ts +411 -0
  311. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/filesystem.js +1 -0
  312. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/index.d.ts +6 -0
  313. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/index.js +6 -0
  314. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/io.d.ts +12 -0
  315. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/io.js +321 -0
  316. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/object.d.ts +134 -0
  317. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/object.js +97 -0
  318. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/path.d.ts +3 -0
  319. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/path.js +2 -0
  320. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/portable-path.d.ts +21 -0
  321. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/portable-path.js +78 -0
  322. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/virtual-path.d.ts +15 -0
  323. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/contracts/virtual-path.js +162 -0
  324. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/core.d.ts +21 -0
  325. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/core.js +19 -0
  326. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/capabilities.d.ts +10 -0
  327. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/capabilities.js +223 -0
  328. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/conditional-chmod.d.ts +7 -0
  329. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/conditional-chmod.js +19 -0
  330. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/descriptor.d.ts +21 -0
  331. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/descriptor.js +279 -0
  332. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/devices/index.d.ts +62 -0
  333. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/devices/index.js +926 -0
  334. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/devices/path.d.ts +7 -0
  335. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/devices/path.js +256 -0
  336. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/devices/plain-path.d.ts +2 -0
  337. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/devices/plain-path.js +3 -0
  338. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/devices/stream.d.ts +6 -0
  339. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/devices/stream.js +136 -0
  340. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/directory-admission.d.ts +3 -0
  341. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/directory-admission.js +14 -0
  342. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/memory/atomic-view.d.ts +12 -0
  343. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/memory/atomic-view.js +13 -0
  344. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/memory/index.d.ts +190 -0
  345. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/memory/index.js +3862 -0
  346. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/memory/ledger.d.ts +27 -0
  347. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/memory/ledger.js +90 -0
  348. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/memory/limits.d.ts +13 -0
  349. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/memory/limits.js +26 -0
  350. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/memory/missing-target.d.ts +15 -0
  351. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/memory/missing-target.js +144 -0
  352. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/mount/comparison.d.ts +19 -0
  353. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/mount/comparison.js +118 -0
  354. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/mount/identity.d.ts +6 -0
  355. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/mount/identity.js +29 -0
  356. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/mount/index.d.ts +79 -0
  357. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/mount/index.js +1490 -0
  358. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/object-authority.d.ts +27 -0
  359. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/object-authority.js +287 -0
  360. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/object-publication/index.d.ts +46 -0
  361. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/object-publication/index.js +536 -0
  362. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/overlay/index.d.ts +91 -0
  363. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/overlay/index.js +1305 -0
  364. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/overlay/memory-publication.d.ts +43 -0
  365. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/overlay/memory-publication.js +583 -0
  366. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/path-namespace.d.ts +4 -0
  367. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/path-namespace.js +63 -0
  368. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/quota/index.d.ts +12 -0
  369. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/quota/index.js +525 -0
  370. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/read-file-stream.d.ts +7 -0
  371. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/read-file-stream.js +103 -0
  372. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/readonly/index.d.ts +38 -0
  373. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/readonly/index.js +218 -0
  374. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/real/allocation.d.ts +1 -0
  375. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/real/allocation.js +8 -0
  376. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/real/index.d.ts +109 -0
  377. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/real/index.js +1393 -0
  378. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/authority.d.ts +7 -0
  379. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/authority.js +38 -0
  380. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/filesystem.d.ts +131 -0
  381. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/filesystem.js +1176 -0
  382. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/bytes.d.ts +1 -0
  383. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/bytes.js +9 -0
  384. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/index.d.ts +2 -0
  385. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/index.js +1 -0
  386. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request-fetch.d.ts +15 -0
  387. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request-fetch.js +74 -0
  388. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request-node.d.ts +4 -0
  389. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request-node.js +111 -0
  390. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request.d.ts +17 -0
  391. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/request.js +89 -0
  392. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/signature.d.ts +20 -0
  393. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/signature.js +76 -0
  394. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/transport.d.ts +3 -0
  395. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/transport.js +478 -0
  396. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/types.d.ts +30 -0
  397. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/types.js +1 -0
  398. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/xml.d.ts +14 -0
  399. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/http/xml.js +192 -0
  400. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/index.d.ts +8 -0
  401. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/index.js +4 -0
  402. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/key-order.d.ts +2 -0
  403. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/key-order.js +11 -0
  404. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/manifest-admission.d.ts +8 -0
  405. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/manifest-admission.js +167 -0
  406. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/mock.d.ts +48 -0
  407. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/mock.js +249 -0
  408. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/namespace.d.ts +13 -0
  409. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/namespace.js +400 -0
  410. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/registry.d.ts +10 -0
  411. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/registry.js +73 -0
  412. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/transport.d.ts +103 -0
  413. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/s3/transport.js +28 -0
  414. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/scoped.d.ts +20 -0
  415. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/scoped.js +668 -0
  416. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/staging-ancestry.d.ts +8 -0
  417. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/staging-ancestry.js +115 -0
  418. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/staging-cleanup.d.ts +5 -0
  419. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/staging-cleanup.js +63 -0
  420. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/webdav/index.d.ts +2 -0
  421. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/webdav/index.js +1 -0
  422. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/webdav/resource-id.d.ts +18 -0
  423. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/webdav/resource-id.js +109 -0
  424. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/webdav/webdav.d.ts +141 -0
  425. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/webdav/webdav.js +1377 -0
  426. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/webdav/xml.d.ts +15 -0
  427. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/fs/webdav/xml.js +59 -0
  428. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/index.d.ts +26 -0
  429. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/index.js +22 -0
  430. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/native/fs-seek/linux-x64-glibc.node +0 -0
  431. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/native/fs-seek/loader.d.ts +5 -0
  432. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/native/fs-seek/loader.mjs +120 -0
  433. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/native/fs-seek/manifest.json +46 -0
  434. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node/filesystem.d.ts +19 -0
  435. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node/filesystem.js +30 -0
  436. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node/host.d.ts +3 -0
  437. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node/host.js +78 -0
  438. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node/index.d.ts +3 -0
  439. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node/index.js +2 -0
  440. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node/native-seek-unavailable.d.ts +1 -0
  441. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node/native-seek-unavailable.js +5 -0
  442. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node/native-seek.d.ts +3 -0
  443. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node/native-seek.js +54 -0
  444. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node/stats.d.ts +1 -0
  445. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node/stats.js +1 -0
  446. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node/values.d.ts +1 -0
  447. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node/values.js +1 -0
  448. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node-host.d.ts +1 -0
  449. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node-host.js +1 -0
  450. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node-unavailable.d.ts +1 -0
  451. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/node-unavailable.js +1 -0
  452. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/package.json +29 -0
  453. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/platform/browser-path.d.ts +1 -0
  454. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/platform/browser-path.js +1 -0
  455. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/platform/browser.d.ts +26 -0
  456. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/platform/browser.js +58 -0
  457. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/platform/node-path.d.ts +1 -0
  458. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/platform/node-path.js +1 -0
  459. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/platform/node.d.ts +26 -0
  460. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/platform/node.js +64 -0
  461. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/platform/transport-budget.d.ts +9 -0
  462. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/platform/transport-budget.js +17 -0
  463. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/directory.d.ts +9 -0
  464. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/directory.js +38 -0
  465. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/emscripten.d.ts +15 -0
  466. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/emscripten.js +372 -0
  467. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/filesystem.d.ts +51 -0
  468. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/filesystem.js +258 -0
  469. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/flags.d.ts +3 -0
  470. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/flags.js +14 -0
  471. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/index.d.ts +9 -0
  472. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/index.js +5 -0
  473. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/native.d.ts +18 -0
  474. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/native.js +477 -0
  475. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/request.d.ts +2 -0
  476. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/request.js +62 -0
  477. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/stat.d.ts +8 -0
  478. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/python/stat.js +34 -0
  479. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/runtime-core.d.ts +28 -0
  480. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/runtime-core.js +58 -0
  481. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/storage.d.ts +81 -0
  482. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/storage.js +430 -0
  483. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/testing/atomic-filesystem.d.ts +16 -0
  484. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/testing/atomic-filesystem.js +496 -0
  485. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/testing/object-io-control.d.ts +23 -0
  486. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/testing/object-io-control.js +39 -0
  487. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/testing/object-io-metrics.d.ts +31 -0
  488. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/testing/object-io-metrics.js +144 -0
  489. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/testing/object-publication.d.ts +19 -0
  490. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/testing/object-publication.js +209 -0
  491. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/xml.d.ts +1 -0
  492. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/dist/xml.js +1 -0
  493. package/node_modules/toolcraft/node_modules/@poe-code/safe-fs/package.json +196 -0
  494. package/node_modules/toolcraft/node_modules/@poe-code/task-list/LICENSE +21 -0
  495. package/node_modules/toolcraft/node_modules/@poe-code/task-list/README.md +28 -3
  496. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/backends/gh-issues-client.d.ts +1 -1
  497. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/backends/gh-issues-client.js +15 -4
  498. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/backends/markdown-dir.js +3 -4
  499. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/backends/utils.js +36 -43
  500. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/backends/yaml-file.js +2 -5
  501. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/default-host.d.ts +2 -0
  502. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/default-host.js +2 -0
  503. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/default-host.workerd.d.ts +4 -0
  504. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/default-host.workerd.js +6 -0
  505. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/filesystem.d.ts +3 -0
  506. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/filesystem.js +32 -0
  507. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/move.js +3 -3
  508. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/open.js +2 -5
  509. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/paths.d.ts +12 -0
  510. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/paths.js +7 -0
  511. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/schema/ids.d.ts +2 -0
  512. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/schema/ids.js +6 -0
  513. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/types.d.ts +7 -5
  514. package/node_modules/toolcraft/node_modules/@poe-code/task-list/package.json +16 -5
  515. package/node_modules/toolcraft/node_modules/@poe-code/terminal-text/LICENSE +21 -0
  516. package/node_modules/toolcraft/node_modules/@poe-code/terminal-text/README.md +12 -0
  517. package/node_modules/toolcraft/node_modules/@poe-code/terminal-text/dist/index.d.ts +2 -0
  518. package/node_modules/toolcraft/node_modules/@poe-code/terminal-text/dist/index.js +20 -0
  519. package/node_modules/toolcraft/node_modules/@poe-code/terminal-text/package.json +22 -0
  520. package/node_modules/toolcraft/node_modules/@poe-code/user-error/README.md +56 -0
  521. package/node_modules/toolcraft/node_modules/@poe-code/user-error/dist/index.d.ts +17 -0
  522. package/node_modules/toolcraft/node_modules/@poe-code/user-error/dist/index.js +21 -0
  523. package/node_modules/toolcraft/node_modules/{mcp-oauth → @poe-code/user-error}/package.json +4 -10
  524. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/LICENSE +21 -0
  525. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/README.md +139 -0
  526. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/dist/attributes.d.ts +69 -0
  527. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/dist/attributes.js +62 -0
  528. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/dist/characters.d.ts +3 -0
  529. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/dist/characters.js +53 -0
  530. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/dist/errors.d.ts +4 -0
  531. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/dist/errors.js +7 -0
  532. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/dist/frames.d.ts +67 -0
  533. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/dist/frames.js +87 -0
  534. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/dist/index.d.ts +101 -0
  535. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/dist/index.js +945 -0
  536. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/dist/source.d.ts +28 -0
  537. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/dist/source.js +71 -0
  538. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/dist/stream.d.ts +32 -0
  539. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/dist/stream.js +179 -0
  540. package/node_modules/toolcraft/node_modules/@poe-code/xml-ast/package.json +25 -0
  541. package/node_modules/toolcraft/node_modules/auth-store/LICENSE +21 -0
  542. package/node_modules/toolcraft/node_modules/auth-store/README.md +77 -0
  543. package/node_modules/toolcraft/node_modules/auth-store/dist/create-secret-store.d.ts +3 -1
  544. package/node_modules/toolcraft/node_modules/auth-store/dist/create-secret-store.js +3 -2
  545. package/node_modules/toolcraft/node_modules/auth-store/dist/encrypted-file-store.d.ts +6 -0
  546. package/node_modules/toolcraft/node_modules/auth-store/dist/encrypted-file-store.js +16 -0
  547. package/node_modules/toolcraft/node_modules/auth-store/dist/index.browser.d.ts +4 -0
  548. package/node_modules/toolcraft/node_modules/auth-store/dist/index.browser.js +2 -0
  549. package/node_modules/toolcraft/node_modules/auth-store/dist/index.d.ts +2 -1
  550. package/node_modules/toolcraft/node_modules/auth-store/dist/index.js +1 -1
  551. package/node_modules/toolcraft/node_modules/auth-store/dist/keychain-store.d.ts +8 -0
  552. package/node_modules/toolcraft/node_modules/auth-store/dist/keychain-store.js +13 -0
  553. package/node_modules/toolcraft/node_modules/auth-store/dist/provider-store.d.ts +1 -1
  554. package/node_modules/toolcraft/node_modules/auth-store/dist/provider-store.js +3 -0
  555. package/node_modules/toolcraft/node_modules/auth-store/dist/safe-fs-secret-store.d.ts +21 -0
  556. package/node_modules/toolcraft/node_modules/auth-store/dist/safe-fs-secret-store.js +119 -0
  557. package/node_modules/toolcraft/node_modules/auth-store/dist/secret-store.d.ts +12 -0
  558. package/node_modules/toolcraft/node_modules/auth-store/dist/secret-store.js +1 -0
  559. package/node_modules/toolcraft/node_modules/auth-store/dist/transaction-lock.d.ts +22 -0
  560. package/node_modules/toolcraft/node_modules/auth-store/dist/transaction-lock.js +153 -0
  561. package/node_modules/toolcraft/node_modules/auth-store/dist/types.d.ts +2 -7
  562. package/node_modules/toolcraft/node_modules/auth-store/package.json +21 -6
  563. package/node_modules/toolcraft/node_modules/fast-string-truncated-width/dist/index.d.ts +4 -0
  564. package/node_modules/toolcraft/node_modules/fast-string-truncated-width/dist/index.js +111 -0
  565. package/node_modules/toolcraft/node_modules/fast-string-truncated-width/dist/types.d.ts +19 -0
  566. package/node_modules/toolcraft/node_modules/fast-string-truncated-width/dist/types.js +2 -0
  567. package/node_modules/toolcraft/node_modules/fast-string-truncated-width/dist/utils.d.ts +4 -0
  568. package/node_modules/toolcraft/node_modules/fast-string-truncated-width/dist/utils.js +20 -0
  569. package/node_modules/toolcraft/node_modules/fast-string-truncated-width/license +21 -0
  570. package/node_modules/toolcraft/node_modules/fast-string-truncated-width/package.json +35 -0
  571. package/node_modules/toolcraft/node_modules/fast-string-truncated-width/readme.md +59 -0
  572. package/node_modules/toolcraft/node_modules/fast-string-width/dist/index.d.ts +4 -0
  573. package/node_modules/toolcraft/node_modules/fast-string-width/dist/index.js +14 -0
  574. package/node_modules/toolcraft/node_modules/fast-string-width/license +21 -0
  575. package/node_modules/toolcraft/node_modules/fast-string-width/package.json +34 -0
  576. package/node_modules/toolcraft/node_modules/fast-string-width/readme.md +42 -0
  577. package/node_modules/toolcraft/node_modules/fast-wrap-ansi/LICENSE +23 -0
  578. package/node_modules/toolcraft/node_modules/fast-wrap-ansi/README.md +26 -0
  579. package/node_modules/toolcraft/node_modules/fast-wrap-ansi/lib/main.d.ts +6 -0
  580. package/node_modules/toolcraft/node_modules/fast-wrap-ansi/lib/main.js +218 -0
  581. package/node_modules/toolcraft/node_modules/fast-wrap-ansi/package.json +51 -0
  582. package/node_modules/toolcraft/node_modules/ignore/LICENSE-MIT +21 -0
  583. package/node_modules/toolcraft/node_modules/ignore/README.md +412 -0
  584. package/node_modules/toolcraft/node_modules/ignore/index.d.ts +61 -0
  585. package/node_modules/toolcraft/node_modules/ignore/index.js +636 -0
  586. package/node_modules/toolcraft/node_modules/ignore/legacy.js +559 -0
  587. package/node_modules/toolcraft/node_modules/ignore/package.json +74 -0
  588. package/node_modules/toolcraft/node_modules/jose/LICENSE.md +21 -0
  589. package/node_modules/toolcraft/node_modules/jose/README.md +153 -0
  590. package/node_modules/toolcraft/node_modules/jose/dist/types/index.d.ts +55 -0
  591. package/node_modules/toolcraft/node_modules/jose/dist/types/jwe/compact/decrypt.d.ts +31 -0
  592. package/node_modules/toolcraft/node_modules/jose/dist/types/jwe/compact/encrypt.d.ts +65 -0
  593. package/node_modules/toolcraft/node_modules/jose/dist/types/jwe/flattened/decrypt.d.ts +31 -0
  594. package/node_modules/toolcraft/node_modules/jose/dist/types/jwe/flattened/encrypt.d.ts +83 -0
  595. package/node_modules/toolcraft/node_modules/jose/dist/types/jwe/general/decrypt.d.ts +38 -0
  596. package/node_modules/toolcraft/node_modules/jose/dist/types/jwe/general/encrypt.d.ts +74 -0
  597. package/node_modules/toolcraft/node_modules/jose/dist/types/jwk/embedded.d.ts +17 -0
  598. package/node_modules/toolcraft/node_modules/jose/dist/types/jwk/thumbprint.d.ts +32 -0
  599. package/node_modules/toolcraft/node_modules/jose/dist/types/jwks/local.d.ts +29 -0
  600. package/node_modules/toolcraft/node_modules/jose/dist/types/jwks/remote.d.ts +237 -0
  601. package/node_modules/toolcraft/node_modules/jose/dist/types/jws/compact/sign.d.ts +36 -0
  602. package/node_modules/toolcraft/node_modules/jose/dist/types/jws/compact/verify.d.ts +33 -0
  603. package/node_modules/toolcraft/node_modules/jose/dist/types/jws/flattened/sign.d.ts +42 -0
  604. package/node_modules/toolcraft/node_modules/jose/dist/types/jws/flattened/verify.d.ts +33 -0
  605. package/node_modules/toolcraft/node_modules/jose/dist/types/jws/general/sign.d.ts +53 -0
  606. package/node_modules/toolcraft/node_modules/jose/dist/types/jws/general/verify.d.ts +41 -0
  607. package/node_modules/toolcraft/node_modules/jose/dist/types/jwt/decrypt.d.ts +35 -0
  608. package/node_modules/toolcraft/node_modules/jose/dist/types/jwt/encrypt.d.ts +91 -0
  609. package/node_modules/toolcraft/node_modules/jose/dist/types/jwt/sign.d.ts +43 -0
  610. package/node_modules/toolcraft/node_modules/jose/dist/types/jwt/unsecured.d.ts +43 -0
  611. package/node_modules/toolcraft/node_modules/jose/dist/types/jwt/verify.d.ts +37 -0
  612. package/node_modules/toolcraft/node_modules/jose/dist/types/key/export.d.ts +33 -0
  613. package/node_modules/toolcraft/node_modules/jose/dist/types/key/generate_key_pair.d.ts +47 -0
  614. package/node_modules/toolcraft/node_modules/jose/dist/types/key/generate_secret.d.ts +35 -0
  615. package/node_modules/toolcraft/node_modules/jose/dist/types/key/import.d.ts +83 -0
  616. package/node_modules/toolcraft/node_modules/jose/dist/types/types.d.ts +852 -0
  617. package/node_modules/toolcraft/node_modules/jose/dist/types/util/base64url.d.ts +9 -0
  618. package/node_modules/toolcraft/node_modules/jose/dist/types/util/decode_jwt.d.ts +18 -0
  619. package/node_modules/toolcraft/node_modules/jose/dist/types/util/decode_protected_header.d.ts +17 -0
  620. package/node_modules/toolcraft/node_modules/jose/dist/types/util/errors.d.ts +213 -0
  621. package/node_modules/toolcraft/node_modules/jose/dist/webapi/index.js +32 -0
  622. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jwe/compact/decrypt.js +27 -0
  623. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jwe/compact/encrypt.js +27 -0
  624. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jwe/flattened/decrypt.js +159 -0
  625. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jwe/flattened/encrypt.js +167 -0
  626. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jwe/general/decrypt.js +31 -0
  627. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jwe/general/encrypt.js +182 -0
  628. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jwk/embedded.js +17 -0
  629. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jwk/thumbprint.js +68 -0
  630. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jwks/local.js +119 -0
  631. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jwks/remote.js +179 -0
  632. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jws/compact/sign.js +18 -0
  633. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jws/compact/verify.js +21 -0
  634. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jws/flattened/sign.js +89 -0
  635. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jws/flattened/verify.js +110 -0
  636. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jws/general/sign.js +70 -0
  637. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jws/general/verify.js +24 -0
  638. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jwt/decrypt.js +23 -0
  639. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jwt/encrypt.js +101 -0
  640. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jwt/sign.js +52 -0
  641. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jwt/unsecured.js +63 -0
  642. package/node_modules/toolcraft/node_modules/jose/dist/webapi/jwt/verify.js +15 -0
  643. package/node_modules/toolcraft/node_modules/jose/dist/webapi/key/export.js +11 -0
  644. package/node_modules/toolcraft/node_modules/jose/dist/webapi/key/generate_key_pair.js +97 -0
  645. package/node_modules/toolcraft/node_modules/jose/dist/webapi/key/generate_secret.js +40 -0
  646. package/node_modules/toolcraft/node_modules/jose/dist/webapi/key/import.js +57 -0
  647. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/aesgcmkw.js +15 -0
  648. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/aeskw.js +25 -0
  649. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/asn1.js +243 -0
  650. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/base64.js +22 -0
  651. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/buffer_utils.js +43 -0
  652. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/check_key_type.js +122 -0
  653. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/content_encryption.js +217 -0
  654. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/crypto_key.js +136 -0
  655. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/deflate.js +44 -0
  656. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/ecdhes.js +52 -0
  657. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/helpers.js +19 -0
  658. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/invalid_key_input.js +27 -0
  659. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/is_key_like.js +17 -0
  660. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/jwk_to_key.js +107 -0
  661. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/jwt_claims_set.js +238 -0
  662. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/key_management.js +186 -0
  663. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/key_to_jwk.js +31 -0
  664. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/normalize_key.js +166 -0
  665. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/pbes2kw.js +42 -0
  666. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/rsaes.js +24 -0
  667. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/signing.js +68 -0
  668. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/type_checks.js +40 -0
  669. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/validate_algorithms.js +10 -0
  670. package/node_modules/toolcraft/node_modules/jose/dist/webapi/lib/validate_crit.js +33 -0
  671. package/node_modules/toolcraft/node_modules/jose/dist/webapi/util/base64url.js +30 -0
  672. package/node_modules/toolcraft/node_modules/jose/dist/webapi/util/decode_jwt.js +32 -0
  673. package/node_modules/toolcraft/node_modules/jose/dist/webapi/util/decode_protected_header.js +34 -0
  674. package/node_modules/toolcraft/node_modules/jose/dist/webapi/util/errors.js +99 -0
  675. package/node_modules/toolcraft/node_modules/jose/package.json +200 -0
  676. package/node_modules/toolcraft/node_modules/jsonc-parser/CHANGELOG.md +76 -0
  677. package/node_modules/toolcraft/node_modules/jsonc-parser/LICENSE.md +21 -0
  678. package/node_modules/toolcraft/node_modules/jsonc-parser/README.md +364 -0
  679. package/node_modules/toolcraft/node_modules/jsonc-parser/SECURITY.md +41 -0
  680. package/node_modules/toolcraft/node_modules/jsonc-parser/lib/esm/impl/edit.js +185 -0
  681. package/node_modules/toolcraft/node_modules/jsonc-parser/lib/esm/impl/format.js +261 -0
  682. package/node_modules/toolcraft/node_modules/jsonc-parser/lib/esm/impl/parser.js +659 -0
  683. package/node_modules/toolcraft/node_modules/jsonc-parser/lib/esm/impl/scanner.js +443 -0
  684. package/node_modules/toolcraft/node_modules/jsonc-parser/lib/esm/impl/string-intern.js +29 -0
  685. package/node_modules/toolcraft/node_modules/jsonc-parser/lib/esm/main.d.ts +351 -0
  686. package/node_modules/toolcraft/node_modules/jsonc-parser/lib/esm/main.js +178 -0
  687. package/node_modules/toolcraft/node_modules/jsonc-parser/lib/umd/impl/edit.js +201 -0
  688. package/node_modules/toolcraft/node_modules/jsonc-parser/lib/umd/impl/format.js +275 -0
  689. package/node_modules/toolcraft/node_modules/jsonc-parser/lib/umd/impl/parser.js +682 -0
  690. package/node_modules/toolcraft/node_modules/jsonc-parser/lib/umd/impl/scanner.js +456 -0
  691. package/node_modules/toolcraft/node_modules/jsonc-parser/lib/umd/impl/string-intern.js +42 -0
  692. package/node_modules/toolcraft/node_modules/jsonc-parser/lib/umd/main.d.ts +351 -0
  693. package/node_modules/toolcraft/node_modules/jsonc-parser/lib/umd/main.js +194 -0
  694. package/node_modules/toolcraft/node_modules/jsonc-parser/package.json +37 -0
  695. package/node_modules/toolcraft/node_modules/mcp-oauth-server/LICENSE +21 -0
  696. package/node_modules/toolcraft/node_modules/mcp-oauth-server/README.md +192 -0
  697. package/node_modules/toolcraft/node_modules/mcp-oauth-server/dist/index.d.ts +161 -0
  698. package/node_modules/toolcraft/node_modules/mcp-oauth-server/dist/index.js +723 -0
  699. package/node_modules/toolcraft/node_modules/mcp-oauth-server/package.json +34 -0
  700. package/node_modules/toolcraft/node_modules/saxes/README.md +323 -0
  701. package/node_modules/toolcraft/node_modules/saxes/package.json +71 -0
  702. package/node_modules/toolcraft/node_modules/saxes/saxes.d.ts +635 -0
  703. package/node_modules/toolcraft/node_modules/saxes/saxes.js +2053 -0
  704. package/node_modules/toolcraft/node_modules/saxes/saxes.js.map +1 -0
  705. package/node_modules/toolcraft/node_modules/sisteransi/license +21 -0
  706. package/node_modules/toolcraft/node_modules/sisteransi/package.json +34 -0
  707. package/node_modules/toolcraft/node_modules/sisteransi/readme.md +113 -0
  708. package/node_modules/toolcraft/node_modules/sisteransi/src/index.js +58 -0
  709. package/node_modules/toolcraft/node_modules/sisteransi/src/sisteransi.d.ts +35 -0
  710. package/node_modules/toolcraft/node_modules/smol-toml/LICENSE +24 -0
  711. package/node_modules/toolcraft/node_modules/smol-toml/README.md +404 -0
  712. package/node_modules/toolcraft/node_modules/smol-toml/dist/date.d.ts +42 -0
  713. package/node_modules/toolcraft/node_modules/smol-toml/dist/date.d.ts.map +1 -0
  714. package/node_modules/toolcraft/node_modules/smol-toml/dist/date.js +128 -0
  715. package/node_modules/toolcraft/node_modules/smol-toml/dist/date.js.map +1 -0
  716. package/node_modules/toolcraft/node_modules/smol-toml/dist/error.d.ts +39 -0
  717. package/node_modules/toolcraft/node_modules/smol-toml/dist/error.d.ts.map +1 -0
  718. package/node_modules/toolcraft/node_modules/smol-toml/dist/error.js +64 -0
  719. package/node_modules/toolcraft/node_modules/smol-toml/dist/error.js.map +1 -0
  720. package/node_modules/toolcraft/node_modules/smol-toml/dist/extract.d.ts +31 -0
  721. package/node_modules/toolcraft/node_modules/smol-toml/dist/extract.d.ts.map +1 -0
  722. package/node_modules/toolcraft/node_modules/smol-toml/dist/extract.js +101 -0
  723. package/node_modules/toolcraft/node_modules/smol-toml/dist/extract.js.map +1 -0
  724. package/node_modules/toolcraft/node_modules/smol-toml/dist/index.cjs +708 -0
  725. package/node_modules/toolcraft/node_modules/smol-toml/dist/index.cjs.map +1 -0
  726. package/node_modules/toolcraft/node_modules/smol-toml/dist/index.d.ts +44 -0
  727. package/node_modules/toolcraft/node_modules/smol-toml/dist/index.d.ts.map +1 -0
  728. package/node_modules/toolcraft/node_modules/smol-toml/dist/index.js +34 -0
  729. package/node_modules/toolcraft/node_modules/smol-toml/dist/index.js.map +1 -0
  730. package/node_modules/toolcraft/node_modules/smol-toml/dist/parse.d.ts +38 -0
  731. package/node_modules/toolcraft/node_modules/smol-toml/dist/parse.d.ts.map +1 -0
  732. package/node_modules/toolcraft/node_modules/smol-toml/dist/parse.js +148 -0
  733. package/node_modules/toolcraft/node_modules/smol-toml/dist/parse.js.map +1 -0
  734. package/node_modules/toolcraft/node_modules/smol-toml/dist/primitive.d.ts +32 -0
  735. package/node_modules/toolcraft/node_modules/smol-toml/dist/primitive.d.ts.map +1 -0
  736. package/node_modules/toolcraft/node_modules/smol-toml/dist/primitive.js +237 -0
  737. package/node_modules/toolcraft/node_modules/smol-toml/dist/primitive.js.map +1 -0
  738. package/node_modules/toolcraft/node_modules/smol-toml/dist/stringify.d.ts +32 -0
  739. package/node_modules/toolcraft/node_modules/smol-toml/dist/stringify.d.ts.map +1 -0
  740. package/node_modules/toolcraft/node_modules/smol-toml/dist/stringify.js +168 -0
  741. package/node_modules/toolcraft/node_modules/smol-toml/dist/stringify.js.map +1 -0
  742. package/node_modules/toolcraft/node_modules/smol-toml/dist/struct.d.ts +33 -0
  743. package/node_modules/toolcraft/node_modules/smol-toml/dist/struct.d.ts.map +1 -0
  744. package/node_modules/toolcraft/node_modules/smol-toml/dist/struct.js +179 -0
  745. package/node_modules/toolcraft/node_modules/smol-toml/dist/struct.js.map +1 -0
  746. package/node_modules/toolcraft/node_modules/smol-toml/dist/util.d.ts +42 -0
  747. package/node_modules/toolcraft/node_modules/smol-toml/dist/util.d.ts.map +1 -0
  748. package/node_modules/toolcraft/node_modules/smol-toml/dist/util.js +86 -0
  749. package/node_modules/toolcraft/node_modules/smol-toml/dist/util.js.map +1 -0
  750. package/node_modules/toolcraft/node_modules/smol-toml/package.json +64 -0
  751. package/node_modules/toolcraft/node_modules/smol-toml/src/date.ts +152 -0
  752. package/node_modules/toolcraft/node_modules/smol-toml/src/error.ts +77 -0
  753. package/node_modules/toolcraft/node_modules/smol-toml/src/extract.ts +112 -0
  754. package/node_modules/toolcraft/node_modules/smol-toml/src/index.ts +42 -0
  755. package/node_modules/toolcraft/node_modules/smol-toml/src/parse.ts +184 -0
  756. package/node_modules/toolcraft/node_modules/smol-toml/src/primitive.ts +247 -0
  757. package/node_modules/toolcraft/node_modules/smol-toml/src/stringify.ts +191 -0
  758. package/node_modules/toolcraft/node_modules/smol-toml/src/struct.ts +199 -0
  759. package/node_modules/toolcraft/node_modules/smol-toml/src/util.ts +101 -0
  760. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/LICENSE +21 -0
  761. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/README.md +836 -0
  762. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/auth.d.ts +69 -0
  763. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/auth.js +261 -0
  764. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/cli.d.ts +20 -0
  765. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/cli.js +493 -0
  766. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/composition.json +65 -0
  767. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/express-middleware.d.ts +18 -0
  768. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/express-middleware.js +90 -0
  769. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/fetch-body.d.ts +6 -0
  770. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/fetch-body.js +47 -0
  771. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/fetch.d.ts +23 -0
  772. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/fetch.js +130 -0
  773. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/http-server.d.ts +53 -0
  774. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/http-server.js +262 -0
  775. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/http-transport.d.ts +173 -0
  776. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/http-transport.js +1097 -0
  777. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/index.d.ts +13 -0
  778. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/index.js +6 -0
  779. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/load-oauth-verifier.d.ts +6 -0
  780. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/load-oauth-verifier.js +43 -0
  781. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/modern-headers.d.ts +3 -0
  782. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/modern-headers.js +34 -0
  783. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/parse-body.d.ts +23 -0
  784. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/parse-body.js +161 -0
  785. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/server.d.ts +9 -0
  786. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/server.js +4 -0
  787. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/session.d.ts +18 -0
  788. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/session.js +37 -0
  789. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/sse.d.ts +11 -0
  790. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/sse.js +22 -0
  791. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/test-support.d.ts +10 -0
  792. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/test-support.js +415 -0
  793. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/testing.d.ts +59 -0
  794. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/dist/testing.js +192 -0
  795. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/LICENSE +21 -0
  796. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/README.md +390 -0
  797. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/auth-store-session-store.d.ts +17 -0
  798. package/node_modules/toolcraft/node_modules/{mcp-oauth → tiny-http-mcp-server/node_modules/mcp-oauth}/dist/client/auth-store-session-store.js +61 -36
  799. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/authorization-error.d.ts +7 -0
  800. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/authorization-error.js +16 -0
  801. package/node_modules/toolcraft/node_modules/{mcp-oauth → tiny-http-mcp-server/node_modules/mcp-oauth}/dist/client/authorization-state.js +4 -4
  802. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/bounded-json.d.ts +2 -0
  803. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/bounded-json.js +44 -0
  804. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/cancellable-operation.d.ts +2 -0
  805. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/cancellable-operation.js +18 -0
  806. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/client-registration.d.ts +6 -0
  807. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/client-registration.js +118 -0
  808. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/default-oauth-client-provider.js +841 -0
  809. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/loopback-authorization.d.ts +36 -0
  810. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/loopback-authorization.js +317 -0
  811. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/oauth-form.d.ts +10 -0
  812. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/oauth-form.js +20 -0
  813. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/persistence-options.d.ts +3 -0
  814. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/persistence-options.js +10 -0
  815. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/pkce.js +8 -0
  816. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/redirect-target.d.ts +10 -0
  817. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/redirect-target.js +42 -0
  818. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/register-client.d.ts +20 -0
  819. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/register-client.js +68 -0
  820. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/resource-bound-store.d.ts +20 -0
  821. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/resource-bound-store.js +179 -0
  822. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/resumable.d.ts +66 -0
  823. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/resumable.js +153 -0
  824. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/revoke-token.d.ts +12 -0
  825. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/revoke-token.js +23 -0
  826. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/scope.d.ts +2 -0
  827. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/scope.js +9 -0
  828. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/session-transaction.d.ts +6 -0
  829. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/session-transaction.js +50 -0
  830. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/token-auth-method.d.ts +2 -0
  831. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/token-auth-method.js +7 -0
  832. package/node_modules/toolcraft/node_modules/{mcp-oauth → tiny-http-mcp-server/node_modules/mcp-oauth}/dist/client/token-endpoint.d.ts +11 -3
  833. package/node_modules/toolcraft/node_modules/{mcp-oauth → tiny-http-mcp-server/node_modules/mcp-oauth}/dist/client/token-endpoint.js +66 -29
  834. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/token-grant.d.ts +10 -0
  835. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/token-grant.js +56 -0
  836. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/types.d.ts +196 -0
  837. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/client/types.js +1 -0
  838. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/http-fetch.d.ts +1 -0
  839. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/http-fetch.js +45 -0
  840. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/http-response.d.ts +1 -0
  841. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/http-response.js +50 -0
  842. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/index.browser.d.ts +24 -0
  843. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/index.browser.js +31 -0
  844. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/index.d.ts +25 -0
  845. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/index.js +19 -0
  846. package/node_modules/toolcraft/node_modules/{mcp-oauth → tiny-http-mcp-server/node_modules/mcp-oauth}/dist/server/jwks-token-verifier.d.ts +4 -0
  847. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/server/jwks-token-verifier.js +406 -0
  848. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/dist/types.compile-check.d.ts +1 -0
  849. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/node_modules/mcp-oauth/package.json +35 -0
  850. package/node_modules/toolcraft/node_modules/tiny-http-mcp-server/package.json +65 -0
  851. package/node_modules/toolcraft/node_modules/tiny-mcp-client/LICENSE +21 -0
  852. package/node_modules/toolcraft/node_modules/tiny-mcp-client/README.md +150 -49
  853. package/node_modules/toolcraft/node_modules/tiny-mcp-client/dist/index.browser.d.ts +909 -0
  854. package/node_modules/toolcraft/node_modules/tiny-mcp-client/dist/index.browser.js +6923 -0
  855. package/node_modules/toolcraft/node_modules/tiny-mcp-client/dist/index.d.ts +909 -2
  856. package/node_modules/toolcraft/node_modules/tiny-mcp-client/dist/index.js +10285 -1
  857. package/node_modules/toolcraft/node_modules/tiny-mcp-client/package.json +42 -3
  858. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/LICENSE +21 -0
  859. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/README.md +296 -0
  860. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/base64.d.ts +1 -0
  861. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/base64.js +10 -0
  862. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/composition.json +15 -0
  863. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/audio.d.ts +18 -0
  864. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/audio.js +84 -0
  865. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/convert.d.ts +20 -0
  866. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/convert.js +96 -0
  867. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/file-type.d.ts +11 -0
  868. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/file-type.js +93 -0
  869. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/file.d.ts +33 -0
  870. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/file.js +110 -0
  871. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/image.d.ts +18 -0
  872. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/image.js +72 -0
  873. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/index.d.ts +7 -0
  874. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/index.js +9 -0
  875. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/mime.d.ts +7 -0
  876. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/mime.js +52 -0
  877. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/remote.d.ts +5 -0
  878. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/content/remote.js +69 -0
  879. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/core.d.ts +8 -0
  880. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/core.js +4 -0
  881. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/headers.d.ts +10 -0
  882. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/headers.js +181 -0
  883. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/index.d.ts +9 -0
  884. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/index.js +7 -0
  885. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/input-request-schema.d.ts +220 -0
  886. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/input-request-schema.js +1995 -0
  887. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/jsonrpc.d.ts +15 -0
  888. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/jsonrpc.js +131 -0
  889. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/metadata.d.ts +2 -0
  890. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/metadata.js +37 -0
  891. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/protocol-server.d.ts +48 -0
  892. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/protocol-server.js +1169 -0
  893. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/protocol-validation.d.ts +4 -0
  894. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/protocol-validation.js +53 -0
  895. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/protocol.d.ts +17 -0
  896. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/protocol.js +228 -0
  897. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/request-cancellation.d.ts +1 -0
  898. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/request-cancellation.js +18 -0
  899. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/sampling-messages.d.ts +18 -0
  900. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/sampling-messages.js +34 -0
  901. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/schema.d.ts +26 -0
  902. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/schema.js +26 -0
  903. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/server.d.ts +4 -0
  904. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/server.js +7 -0
  905. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/standard-schema.compile-check.d.ts +1 -0
  906. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/standard-schema.compile-check.js +15 -0
  907. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/stdio-input.d.ts +11 -0
  908. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/stdio-input.js +67 -0
  909. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/stdio-output.d.ts +24 -0
  910. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/stdio-output.js +131 -0
  911. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/subscriptions.d.ts +11 -0
  912. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/subscriptions.js +128 -0
  913. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/testing.d.ts +7 -0
  914. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/testing.js +20 -0
  915. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/tool-call-admission.d.ts +9 -0
  916. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/tool-call-admission.js +51 -0
  917. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/tool-schema.d.ts +13 -0
  918. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/tool-schema.js +53 -0
  919. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/types.d.ts +299 -0
  920. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/types.js +23 -0
  921. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/uri-template.d.ts +6 -0
  922. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/uri-template.js +363 -0
  923. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/uri.d.ts +1 -0
  924. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/dist/uri.js +41 -0
  925. package/node_modules/toolcraft/node_modules/tiny-stdio-mcp-server/package.json +66 -0
  926. package/node_modules/toolcraft/node_modules/toolcraft-design/LICENSE +21 -0
  927. package/node_modules/toolcraft/node_modules/toolcraft-design/README.md +47 -7
  928. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/acp/components.d.ts +8 -1
  929. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/acp/components.js +11 -6
  930. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/acp/index.d.ts +3 -0
  931. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/acp/index.js +1 -0
  932. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/acp/plan.d.ts +10 -0
  933. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/acp/plan.js +50 -0
  934. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/command-registry.d.ts +11 -0
  935. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/command-registry.js +24 -0
  936. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/components/command-errors.d.ts +2 -0
  937. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/components/command-errors.js +8 -2
  938. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/components/file-changes.d.ts +16 -0
  939. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/components/file-changes.js +162 -0
  940. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/components/help-formatter-plain.js +61 -25
  941. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/components/help-formatter.d.ts +17 -0
  942. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/components/help-formatter.js +128 -29
  943. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/components/index.d.ts +5 -3
  944. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/components/index.js +3 -2
  945. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/components/table.d.ts +1 -0
  946. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/components/table.js +58 -5
  947. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/components/template.d.ts +9 -0
  948. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/components/template.js +27 -2
  949. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/ansi.d.ts +2 -0
  950. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/ansi.js +81 -27
  951. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/buffer.js +39 -25
  952. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/components/border.js +6 -5
  953. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/components/context-pane.d.ts +4 -0
  954. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/components/context-pane.js +22 -0
  955. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/components/footer.d.ts +2 -2
  956. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/components/footer.js +46 -24
  957. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/components/output-pane.d.ts +6 -2
  958. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/components/output-pane.js +128 -10
  959. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/components/run-view.d.ts +27 -0
  960. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/components/run-view.js +283 -0
  961. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/components/stats-pane.d.ts +3 -2
  962. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/components/stats-pane.js +60 -19
  963. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/composer-layout.d.ts +12 -0
  964. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/composer-layout.js +45 -0
  965. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/composer.d.ts +24 -0
  966. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/composer.js +107 -0
  967. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/dashboard.d.ts +8 -0
  968. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/dashboard.js +268 -13
  969. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/elapsed.d.ts +1 -0
  970. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/elapsed.js +8 -0
  971. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/index.d.ts +4 -1
  972. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/index.js +2 -0
  973. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/keymap.js +26 -6
  974. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/layout.d.ts +1 -0
  975. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/layout.js +19 -3
  976. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/line-buffer.d.ts +9 -0
  977. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/line-buffer.js +63 -0
  978. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/output-preview.d.ts +9 -0
  979. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/output-preview.js +70 -0
  980. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/snapshot.js +3 -1
  981. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/store.js +10 -3
  982. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/terminal-strings.d.ts +6 -0
  983. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/terminal-strings.js +108 -0
  984. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/terminal-width.d.ts +1 -0
  985. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/terminal-width.js +27 -2
  986. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/terminal.js +39 -12
  987. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/testing/pipeline-scenario.d.ts +1 -0
  988. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/testing/pipeline-scenario.js +128 -0
  989. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/dashboard/types.d.ts +47 -1
  990. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/escape-terminal-text.d.ts +1 -0
  991. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/escape-terminal-text.js +1 -0
  992. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/event-groups.d.ts +19 -0
  993. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/event-groups.js +49 -0
  994. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/actions.d.ts +8 -2
  995. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/actions.js +52 -4
  996. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/demo.js +3 -3
  997. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/detail-content.d.ts +6 -0
  998. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/detail-content.js +24 -0
  999. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/events.d.ts +12 -2
  1000. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/filter.js +48 -9
  1001. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/index.d.ts +2 -4
  1002. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/index.js +1 -2
  1003. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/jobs.d.ts +2 -1
  1004. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/jobs.js +29 -3
  1005. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/keymap.d.ts +13 -3
  1006. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/keymap.js +89 -348
  1007. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/layout.d.ts +2 -0
  1008. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/layout.js +22 -4
  1009. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/reducer.js +198 -45
  1010. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/render/detail.d.ts +2 -2
  1011. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/render/detail.js +37 -31
  1012. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/render/footer.d.ts +1 -1
  1013. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/render/footer.js +18 -3
  1014. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/render/header.d.ts +1 -1
  1015. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/render/header.js +6 -2
  1016. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/render/index.d.ts +1 -1
  1017. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/render/index.js +2 -1
  1018. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/render/list.d.ts +16 -2
  1019. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/render/list.js +49 -43
  1020. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/render/modal.d.ts +1 -1
  1021. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/render/modal.js +26 -13
  1022. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/render/pane.d.ts +6 -3
  1023. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/render/pane.js +10 -14
  1024. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/render/test-fixtures.js +3 -4
  1025. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/runtime.js +141 -75
  1026. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/runtime.test-helpers.d.ts +23 -37
  1027. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/runtime.test-helpers.js +32 -83
  1028. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/state.d.ts +95 -8
  1029. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/state.js +77 -22
  1030. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/help-formatter.d.ts +2 -2
  1031. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/help-formatter.js +1 -1
  1032. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/index.d.ts +22 -9
  1033. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/index.js +15 -6
  1034. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/inline-notice.d.ts +14 -0
  1035. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/inline-notice.js +28 -0
  1036. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/metric.d.ts +8 -0
  1037. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/metric.js +21 -0
  1038. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/overlay-manager.d.ts +6 -0
  1039. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/overlay-manager.js +10 -0
  1040. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/primitives.d.ts +12 -0
  1041. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/primitives.js +7 -0
  1042. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/progress-group.d.ts +7 -0
  1043. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/progress-group.js +10 -0
  1044. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/prompts/interactive/core.d.ts +9 -2
  1045. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/prompts/interactive/core.js +208 -31
  1046. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/prompts/interactive/multiselect.js +3 -2
  1047. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/prompts/interactive/pagination.js +21 -27
  1048. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/prompts/interactive/password.js +11 -8
  1049. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/prompts/interactive/select.js +3 -2
  1050. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/prompts/interactive/text.js +12 -9
  1051. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/prompts/primitives/note.d.ts +1 -1
  1052. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/prompts/primitives/note.js +4 -4
  1053. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/prompts/primitives/spinner.js +2 -1
  1054. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/render-markdown-plaintext.d.ts +2 -0
  1055. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/render-markdown-plaintext.js +1 -0
  1056. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/render-performance.d.ts +33 -0
  1057. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/render-performance.js +71 -0
  1058. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/screen/ansi-text.d.ts +2 -0
  1059. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/screen/ansi-text.js +35 -0
  1060. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/screen/screen.d.ts +40 -0
  1061. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/screen/screen.js +122 -0
  1062. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/screen/style.d.ts +16 -0
  1063. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/screen/style.js +55 -0
  1064. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/task-tree.d.ts +22 -0
  1065. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/task-tree.js +79 -0
  1066. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/terminal/driver.d.ts +34 -0
  1067. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/terminal/driver.js +65 -0
  1068. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/terminal/input.d.ts +25 -0
  1069. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/terminal/input.js +197 -0
  1070. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/terminal/output.d.ts +10 -0
  1071. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/terminal/output.js +44 -0
  1072. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/terminal-markdown/index.d.ts +2 -0
  1073. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/terminal-markdown/index.js +1 -0
  1074. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/terminal-markdown/parser/frontmatter.js +2 -1
  1075. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/terminal-markdown/parser/inline.js +64 -13
  1076. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/terminal-markdown/parser.js +2 -1
  1077. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/terminal-markdown/plaintext-renderer.d.ts +11 -0
  1078. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/terminal-markdown/plaintext-renderer.js +228 -0
  1079. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/viewport.d.ts +18 -0
  1080. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/viewport.js +56 -0
  1081. package/node_modules/toolcraft/node_modules/toolcraft-design/package.json +13 -9
  1082. package/node_modules/toolcraft/node_modules/toolcraft-schema/LICENSE +21 -0
  1083. package/node_modules/toolcraft/node_modules/toolcraft-schema/README.md +151 -0
  1084. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/clone-default.d.ts +1 -0
  1085. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/clone-default.js +26 -0
  1086. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/index.compile-check.d.ts +1 -0
  1087. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/index.compile-check.js +18 -0
  1088. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/index.d.ts +220 -0
  1089. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/index.js +354 -0
  1090. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema/compiler.d.ts +12 -0
  1091. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema/compiler.js +396 -0
  1092. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema/evaluate.d.ts +3 -0
  1093. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema/evaluate.js +445 -0
  1094. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema/index.d.ts +5 -0
  1095. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema/index.js +19 -0
  1096. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema/normalize-nullability.d.ts +1 -0
  1097. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema/normalize-nullability.js +69 -0
  1098. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema/properties.d.ts +16 -0
  1099. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema/properties.js +129 -0
  1100. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema/types.d.ts +34 -0
  1101. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema/types.js +1 -0
  1102. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema/utils.d.ts +19 -0
  1103. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema/utils.js +174 -0
  1104. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema-document.d.ts +14 -0
  1105. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json-schema-document.js +17 -0
  1106. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json.compile-check.d.ts +1 -0
  1107. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json.compile-check.js +2 -0
  1108. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json.d.ts +23 -0
  1109. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/json.js +81 -0
  1110. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/native-json-schema.d.ts +13 -0
  1111. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/native-json-schema.js +12 -0
  1112. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/oneof.compile-check.d.ts +1 -0
  1113. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/oneof.compile-check.js +12 -0
  1114. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/oneof.d.ts +16 -0
  1115. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/oneof.js +19 -0
  1116. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/record.compile-check.d.ts +1 -0
  1117. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/record.compile-check.js +2 -0
  1118. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/record.d.ts +6 -0
  1119. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/record.js +7 -0
  1120. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/standard.compile-check.d.ts +1 -0
  1121. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/standard.compile-check.js +20 -0
  1122. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/standard.d.ts +92 -0
  1123. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/standard.js +38 -0
  1124. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/union.compile-check.d.ts +1 -0
  1125. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/union.compile-check.js +9 -0
  1126. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/union.d.ts +9 -0
  1127. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/union.js +46 -0
  1128. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/validate.d.ts +21 -0
  1129. package/node_modules/toolcraft/node_modules/toolcraft-schema/dist/validate.js +393 -0
  1130. package/node_modules/toolcraft/node_modules/toolcraft-schema/package.json +33 -0
  1131. package/node_modules/toolcraft/node_modules/xmlchars/LICENSE +18 -0
  1132. package/node_modules/toolcraft/node_modules/xmlchars/README.md +33 -0
  1133. package/node_modules/toolcraft/node_modules/xmlchars/package.json +51 -0
  1134. package/node_modules/toolcraft/node_modules/xmlchars/xml/1.0/ed4.d.ts +31 -0
  1135. package/node_modules/toolcraft/node_modules/xmlchars/xml/1.0/ed4.js +44 -0
  1136. package/node_modules/toolcraft/node_modules/xmlchars/xml/1.0/ed4.js.map +1 -0
  1137. package/node_modules/toolcraft/node_modules/xmlchars/xml/1.0/ed5.d.ts +51 -0
  1138. package/node_modules/toolcraft/node_modules/xmlchars/xml/1.0/ed5.js +105 -0
  1139. package/node_modules/toolcraft/node_modules/xmlchars/xml/1.0/ed5.js.map +1 -0
  1140. package/node_modules/toolcraft/node_modules/xmlchars/xml/1.1/ed2.d.ts +73 -0
  1141. package/node_modules/toolcraft/node_modules/xmlchars/xml/1.1/ed2.js +145 -0
  1142. package/node_modules/toolcraft/node_modules/xmlchars/xml/1.1/ed2.js.map +1 -0
  1143. package/node_modules/toolcraft/node_modules/xmlchars/xmlchars.d.ts +170 -0
  1144. package/node_modules/toolcraft/node_modules/xmlchars/xmlchars.js +191 -0
  1145. package/node_modules/toolcraft/node_modules/xmlchars/xmlchars.js.map +1 -0
  1146. package/node_modules/toolcraft/node_modules/xmlchars/xmlns/1.0/ed3.d.ts +28 -0
  1147. package/node_modules/toolcraft/node_modules/xmlchars/xmlns/1.0/ed3.js +65 -0
  1148. package/node_modules/toolcraft/node_modules/xmlchars/xmlns/1.0/ed3.js.map +1 -0
  1149. package/node_modules/toolcraft/node_modules/yaml/LICENSE +13 -0
  1150. package/node_modules/toolcraft/node_modules/yaml/README.md +172 -0
  1151. package/node_modules/toolcraft/node_modules/yaml/bin.mjs +11 -0
  1152. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/compose-collection.js +88 -0
  1153. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/compose-doc.js +43 -0
  1154. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/compose-node.js +109 -0
  1155. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/compose-scalar.js +86 -0
  1156. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/composer.js +219 -0
  1157. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/resolve-block-map.js +115 -0
  1158. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +198 -0
  1159. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +49 -0
  1160. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/resolve-end.js +37 -0
  1161. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +207 -0
  1162. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +225 -0
  1163. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/resolve-props.js +146 -0
  1164. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/util-contains-newline.js +34 -0
  1165. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js +26 -0
  1166. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js +15 -0
  1167. package/node_modules/toolcraft/node_modules/yaml/browser/dist/compose/util-map-includes.js +13 -0
  1168. package/node_modules/toolcraft/node_modules/yaml/browser/dist/doc/Document.js +335 -0
  1169. package/node_modules/toolcraft/node_modules/yaml/browser/dist/doc/anchors.js +71 -0
  1170. package/node_modules/toolcraft/node_modules/yaml/browser/dist/doc/applyReviver.js +55 -0
  1171. package/node_modules/toolcraft/node_modules/yaml/browser/dist/doc/createNode.js +88 -0
  1172. package/node_modules/toolcraft/node_modules/yaml/browser/dist/doc/directives.js +176 -0
  1173. package/node_modules/toolcraft/node_modules/yaml/browser/dist/errors.js +57 -0
  1174. package/node_modules/toolcraft/node_modules/yaml/browser/dist/index.js +17 -0
  1175. package/node_modules/toolcraft/node_modules/yaml/browser/dist/log.js +11 -0
  1176. package/node_modules/toolcraft/node_modules/yaml/browser/dist/nodes/Alias.js +116 -0
  1177. package/node_modules/toolcraft/node_modules/yaml/browser/dist/nodes/Collection.js +147 -0
  1178. package/node_modules/toolcraft/node_modules/yaml/browser/dist/nodes/Node.js +38 -0
  1179. package/node_modules/toolcraft/node_modules/yaml/browser/dist/nodes/Pair.js +36 -0
  1180. package/node_modules/toolcraft/node_modules/yaml/browser/dist/nodes/Scalar.js +24 -0
  1181. package/node_modules/toolcraft/node_modules/yaml/browser/dist/nodes/YAMLMap.js +144 -0
  1182. package/node_modules/toolcraft/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +113 -0
  1183. package/node_modules/toolcraft/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +63 -0
  1184. package/node_modules/toolcraft/node_modules/yaml/browser/dist/nodes/identity.js +36 -0
  1185. package/node_modules/toolcraft/node_modules/yaml/browser/dist/nodes/toJS.js +37 -0
  1186. package/node_modules/toolcraft/node_modules/yaml/browser/dist/parse/cst-scalar.js +214 -0
  1187. package/node_modules/toolcraft/node_modules/yaml/browser/dist/parse/cst-stringify.js +61 -0
  1188. package/node_modules/toolcraft/node_modules/yaml/browser/dist/parse/cst-visit.js +97 -0
  1189. package/node_modules/toolcraft/node_modules/yaml/browser/dist/parse/cst.js +98 -0
  1190. package/node_modules/toolcraft/node_modules/yaml/browser/dist/parse/lexer.js +721 -0
  1191. package/node_modules/toolcraft/node_modules/yaml/browser/dist/parse/line-counter.js +39 -0
  1192. package/node_modules/toolcraft/node_modules/yaml/browser/dist/parse/parser.js +975 -0
  1193. package/node_modules/toolcraft/node_modules/yaml/browser/dist/public-api.js +102 -0
  1194. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/Schema.js +37 -0
  1195. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/common/map.js +17 -0
  1196. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/common/null.js +15 -0
  1197. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/common/seq.js +17 -0
  1198. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/common/string.js +14 -0
  1199. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/core/bool.js +19 -0
  1200. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/core/float.js +43 -0
  1201. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/core/int.js +38 -0
  1202. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/core/schema.js +23 -0
  1203. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/json/schema.js +62 -0
  1204. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/tags.js +96 -0
  1205. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js +58 -0
  1206. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js +26 -0
  1207. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js +46 -0
  1208. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js +71 -0
  1209. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +67 -0
  1210. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +74 -0
  1211. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +78 -0
  1212. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +39 -0
  1213. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js +93 -0
  1214. package/node_modules/toolcraft/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
  1215. package/node_modules/toolcraft/node_modules/yaml/browser/dist/stringify/foldFlowLines.js +146 -0
  1216. package/node_modules/toolcraft/node_modules/yaml/browser/dist/stringify/stringify.js +129 -0
  1217. package/node_modules/toolcraft/node_modules/yaml/browser/dist/stringify/stringifyCollection.js +153 -0
  1218. package/node_modules/toolcraft/node_modules/yaml/browser/dist/stringify/stringifyComment.js +20 -0
  1219. package/node_modules/toolcraft/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +85 -0
  1220. package/node_modules/toolcraft/node_modules/yaml/browser/dist/stringify/stringifyNumber.js +25 -0
  1221. package/node_modules/toolcraft/node_modules/yaml/browser/dist/stringify/stringifyPair.js +150 -0
  1222. package/node_modules/toolcraft/node_modules/yaml/browser/dist/stringify/stringifyString.js +336 -0
  1223. package/node_modules/toolcraft/node_modules/yaml/browser/dist/util.js +11 -0
  1224. package/node_modules/toolcraft/node_modules/yaml/browser/dist/visit.js +233 -0
  1225. package/node_modules/toolcraft/node_modules/yaml/browser/index.js +5 -0
  1226. package/node_modules/toolcraft/node_modules/yaml/browser/package.json +3 -0
  1227. package/node_modules/toolcraft/node_modules/yaml/dist/cli.d.ts +8 -0
  1228. package/node_modules/toolcraft/node_modules/yaml/dist/cli.mjs +201 -0
  1229. package/node_modules/toolcraft/node_modules/yaml/dist/compose/compose-collection.d.ts +11 -0
  1230. package/node_modules/toolcraft/node_modules/yaml/dist/compose/compose-collection.js +90 -0
  1231. package/node_modules/toolcraft/node_modules/yaml/dist/compose/compose-doc.d.ts +7 -0
  1232. package/node_modules/toolcraft/node_modules/yaml/dist/compose/compose-doc.js +45 -0
  1233. package/node_modules/toolcraft/node_modules/yaml/dist/compose/compose-node.d.ts +29 -0
  1234. package/node_modules/toolcraft/node_modules/yaml/dist/compose/compose-node.js +112 -0
  1235. package/node_modules/toolcraft/node_modules/yaml/dist/compose/compose-scalar.d.ts +5 -0
  1236. package/node_modules/toolcraft/node_modules/yaml/dist/compose/compose-scalar.js +88 -0
  1237. package/node_modules/toolcraft/node_modules/yaml/dist/compose/composer.d.ts +63 -0
  1238. package/node_modules/toolcraft/node_modules/yaml/dist/compose/composer.js +224 -0
  1239. package/node_modules/toolcraft/node_modules/yaml/dist/compose/resolve-block-map.d.ts +6 -0
  1240. package/node_modules/toolcraft/node_modules/yaml/dist/compose/resolve-block-map.js +117 -0
  1241. package/node_modules/toolcraft/node_modules/yaml/dist/compose/resolve-block-scalar.d.ts +11 -0
  1242. package/node_modules/toolcraft/node_modules/yaml/dist/compose/resolve-block-scalar.js +200 -0
  1243. package/node_modules/toolcraft/node_modules/yaml/dist/compose/resolve-block-seq.d.ts +6 -0
  1244. package/node_modules/toolcraft/node_modules/yaml/dist/compose/resolve-block-seq.js +51 -0
  1245. package/node_modules/toolcraft/node_modules/yaml/dist/compose/resolve-end.d.ts +6 -0
  1246. package/node_modules/toolcraft/node_modules/yaml/dist/compose/resolve-end.js +39 -0
  1247. package/node_modules/toolcraft/node_modules/yaml/dist/compose/resolve-flow-collection.d.ts +7 -0
  1248. package/node_modules/toolcraft/node_modules/yaml/dist/compose/resolve-flow-collection.js +209 -0
  1249. package/node_modules/toolcraft/node_modules/yaml/dist/compose/resolve-flow-scalar.d.ts +10 -0
  1250. package/node_modules/toolcraft/node_modules/yaml/dist/compose/resolve-flow-scalar.js +227 -0
  1251. package/node_modules/toolcraft/node_modules/yaml/dist/compose/resolve-props.d.ts +23 -0
  1252. package/node_modules/toolcraft/node_modules/yaml/dist/compose/resolve-props.js +148 -0
  1253. package/node_modules/toolcraft/node_modules/yaml/dist/compose/util-contains-newline.d.ts +2 -0
  1254. package/node_modules/toolcraft/node_modules/yaml/dist/compose/util-contains-newline.js +36 -0
  1255. package/node_modules/toolcraft/node_modules/yaml/dist/compose/util-empty-scalar-position.d.ts +2 -0
  1256. package/node_modules/toolcraft/node_modules/yaml/dist/compose/util-empty-scalar-position.js +28 -0
  1257. package/node_modules/toolcraft/node_modules/yaml/dist/compose/util-flow-indent-check.d.ts +3 -0
  1258. package/node_modules/toolcraft/node_modules/yaml/dist/compose/util-flow-indent-check.js +17 -0
  1259. package/node_modules/toolcraft/node_modules/yaml/dist/compose/util-map-includes.d.ts +4 -0
  1260. package/node_modules/toolcraft/node_modules/yaml/dist/compose/util-map-includes.js +15 -0
  1261. package/node_modules/toolcraft/node_modules/yaml/dist/doc/Document.d.ts +141 -0
  1262. package/node_modules/toolcraft/node_modules/yaml/dist/doc/Document.js +337 -0
  1263. package/node_modules/toolcraft/node_modules/yaml/dist/doc/anchors.d.ts +24 -0
  1264. package/node_modules/toolcraft/node_modules/yaml/dist/doc/anchors.js +76 -0
  1265. package/node_modules/toolcraft/node_modules/yaml/dist/doc/applyReviver.d.ts +9 -0
  1266. package/node_modules/toolcraft/node_modules/yaml/dist/doc/applyReviver.js +57 -0
  1267. package/node_modules/toolcraft/node_modules/yaml/dist/doc/createNode.d.ts +17 -0
  1268. package/node_modules/toolcraft/node_modules/yaml/dist/doc/createNode.js +90 -0
  1269. package/node_modules/toolcraft/node_modules/yaml/dist/doc/directives.d.ts +49 -0
  1270. package/node_modules/toolcraft/node_modules/yaml/dist/doc/directives.js +178 -0
  1271. package/node_modules/toolcraft/node_modules/yaml/dist/errors.d.ts +21 -0
  1272. package/node_modules/toolcraft/node_modules/yaml/dist/errors.js +62 -0
  1273. package/node_modules/toolcraft/node_modules/yaml/dist/index.d.ts +25 -0
  1274. package/node_modules/toolcraft/node_modules/yaml/dist/index.js +50 -0
  1275. package/node_modules/toolcraft/node_modules/yaml/dist/log.d.ts +3 -0
  1276. package/node_modules/toolcraft/node_modules/yaml/dist/log.js +19 -0
  1277. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/Alias.d.ts +29 -0
  1278. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/Alias.js +118 -0
  1279. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/Collection.d.ts +73 -0
  1280. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/Collection.js +151 -0
  1281. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/Node.d.ts +53 -0
  1282. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/Node.js +40 -0
  1283. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/Pair.d.ts +22 -0
  1284. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/Pair.js +39 -0
  1285. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/Scalar.d.ts +47 -0
  1286. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/Scalar.js +27 -0
  1287. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/YAMLMap.d.ts +53 -0
  1288. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/YAMLMap.js +147 -0
  1289. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/YAMLSeq.d.ts +60 -0
  1290. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/YAMLSeq.js +115 -0
  1291. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/addPairToJSMap.d.ts +4 -0
  1292. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/addPairToJSMap.js +65 -0
  1293. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/identity.d.ts +23 -0
  1294. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/identity.js +53 -0
  1295. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/toJS.d.ts +29 -0
  1296. package/node_modules/toolcraft/node_modules/yaml/dist/nodes/toJS.js +39 -0
  1297. package/node_modules/toolcraft/node_modules/yaml/dist/options.d.ts +350 -0
  1298. package/node_modules/toolcraft/node_modules/yaml/dist/parse/cst-scalar.d.ts +64 -0
  1299. package/node_modules/toolcraft/node_modules/yaml/dist/parse/cst-scalar.js +218 -0
  1300. package/node_modules/toolcraft/node_modules/yaml/dist/parse/cst-stringify.d.ts +8 -0
  1301. package/node_modules/toolcraft/node_modules/yaml/dist/parse/cst-stringify.js +63 -0
  1302. package/node_modules/toolcraft/node_modules/yaml/dist/parse/cst-visit.d.ts +39 -0
  1303. package/node_modules/toolcraft/node_modules/yaml/dist/parse/cst-visit.js +99 -0
  1304. package/node_modules/toolcraft/node_modules/yaml/dist/parse/cst.d.ts +109 -0
  1305. package/node_modules/toolcraft/node_modules/yaml/dist/parse/cst.js +112 -0
  1306. package/node_modules/toolcraft/node_modules/yaml/dist/parse/lexer.d.ts +87 -0
  1307. package/node_modules/toolcraft/node_modules/yaml/dist/parse/lexer.js +723 -0
  1308. package/node_modules/toolcraft/node_modules/yaml/dist/parse/line-counter.d.ts +22 -0
  1309. package/node_modules/toolcraft/node_modules/yaml/dist/parse/line-counter.js +41 -0
  1310. package/node_modules/toolcraft/node_modules/yaml/dist/parse/parser.d.ts +84 -0
  1311. package/node_modules/toolcraft/node_modules/yaml/dist/parse/parser.js +980 -0
  1312. package/node_modules/toolcraft/node_modules/yaml/dist/public-api.d.ts +44 -0
  1313. package/node_modules/toolcraft/node_modules/yaml/dist/public-api.js +107 -0
  1314. package/node_modules/toolcraft/node_modules/yaml/dist/schema/Schema.d.ts +17 -0
  1315. package/node_modules/toolcraft/node_modules/yaml/dist/schema/Schema.js +39 -0
  1316. package/node_modules/toolcraft/node_modules/yaml/dist/schema/common/map.d.ts +2 -0
  1317. package/node_modules/toolcraft/node_modules/yaml/dist/schema/common/map.js +19 -0
  1318. package/node_modules/toolcraft/node_modules/yaml/dist/schema/common/null.d.ts +4 -0
  1319. package/node_modules/toolcraft/node_modules/yaml/dist/schema/common/null.js +17 -0
  1320. package/node_modules/toolcraft/node_modules/yaml/dist/schema/common/seq.d.ts +2 -0
  1321. package/node_modules/toolcraft/node_modules/yaml/dist/schema/common/seq.js +19 -0
  1322. package/node_modules/toolcraft/node_modules/yaml/dist/schema/common/string.d.ts +2 -0
  1323. package/node_modules/toolcraft/node_modules/yaml/dist/schema/common/string.js +16 -0
  1324. package/node_modules/toolcraft/node_modules/yaml/dist/schema/core/bool.d.ts +4 -0
  1325. package/node_modules/toolcraft/node_modules/yaml/dist/schema/core/bool.js +21 -0
  1326. package/node_modules/toolcraft/node_modules/yaml/dist/schema/core/float.d.ts +4 -0
  1327. package/node_modules/toolcraft/node_modules/yaml/dist/schema/core/float.js +47 -0
  1328. package/node_modules/toolcraft/node_modules/yaml/dist/schema/core/int.d.ts +4 -0
  1329. package/node_modules/toolcraft/node_modules/yaml/dist/schema/core/int.js +42 -0
  1330. package/node_modules/toolcraft/node_modules/yaml/dist/schema/core/schema.d.ts +1 -0
  1331. package/node_modules/toolcraft/node_modules/yaml/dist/schema/core/schema.js +25 -0
  1332. package/node_modules/toolcraft/node_modules/yaml/dist/schema/json/schema.d.ts +2 -0
  1333. package/node_modules/toolcraft/node_modules/yaml/dist/schema/json/schema.js +64 -0
  1334. package/node_modules/toolcraft/node_modules/yaml/dist/schema/json-schema.d.ts +69 -0
  1335. package/node_modules/toolcraft/node_modules/yaml/dist/schema/tags.d.ts +48 -0
  1336. package/node_modules/toolcraft/node_modules/yaml/dist/schema/tags.js +99 -0
  1337. package/node_modules/toolcraft/node_modules/yaml/dist/schema/types.d.ts +92 -0
  1338. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/binary.d.ts +2 -0
  1339. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/binary.js +70 -0
  1340. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/bool.d.ts +7 -0
  1341. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/bool.js +29 -0
  1342. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/float.d.ts +4 -0
  1343. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/float.js +50 -0
  1344. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/int.d.ts +5 -0
  1345. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/int.js +76 -0
  1346. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
  1347. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/merge.js +71 -0
  1348. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/omap.d.ts +22 -0
  1349. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/omap.js +77 -0
  1350. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/pairs.d.ts +10 -0
  1351. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +82 -0
  1352. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/schema.d.ts +1 -0
  1353. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/schema.js +41 -0
  1354. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/set.d.ts +28 -0
  1355. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/set.js +96 -0
  1356. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
  1357. package/node_modules/toolcraft/node_modules/yaml/dist/schema/yaml-1.1/timestamp.js +105 -0
  1358. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/foldFlowLines.d.ts +34 -0
  1359. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/foldFlowLines.js +151 -0
  1360. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/stringify.d.ts +21 -0
  1361. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/stringify.js +132 -0
  1362. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/stringifyCollection.d.ts +17 -0
  1363. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/stringifyCollection.js +155 -0
  1364. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/stringifyComment.d.ts +10 -0
  1365. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/stringifyComment.js +24 -0
  1366. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/stringifyDocument.d.ts +4 -0
  1367. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/stringifyDocument.js +87 -0
  1368. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/stringifyNumber.d.ts +2 -0
  1369. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/stringifyNumber.js +27 -0
  1370. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/stringifyPair.d.ts +3 -0
  1371. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/stringifyPair.js +152 -0
  1372. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/stringifyString.d.ts +9 -0
  1373. package/node_modules/toolcraft/node_modules/yaml/dist/stringify/stringifyString.js +338 -0
  1374. package/node_modules/toolcraft/node_modules/yaml/dist/test-events.d.ts +4 -0
  1375. package/node_modules/toolcraft/node_modules/yaml/dist/test-events.js +134 -0
  1376. package/node_modules/toolcraft/node_modules/yaml/dist/util.d.ts +16 -0
  1377. package/node_modules/toolcraft/node_modules/yaml/dist/util.js +28 -0
  1378. package/node_modules/toolcraft/node_modules/yaml/dist/visit.d.ts +102 -0
  1379. package/node_modules/toolcraft/node_modules/yaml/dist/visit.js +236 -0
  1380. package/node_modules/toolcraft/node_modules/yaml/package.json +97 -0
  1381. package/node_modules/toolcraft/node_modules/yaml/util.js +2 -0
  1382. package/node_modules/toolcraft/package.json +121 -12
  1383. package/package.json +2 -2
  1384. package/src/adapters/root.ts +12 -2
  1385. package/src/cli.ts +3 -1
  1386. package/src/executable.ts +3 -1
  1387. package/src/mcp.ts +1 -1
  1388. package/node_modules/toolcraft/dist/design/run-two-pane-explorer.d.ts +0 -2
  1389. package/node_modules/toolcraft/dist/design/run-two-pane-explorer.js +0 -1
  1390. package/node_modules/toolcraft/node_modules/@poe-code/agent-defs/dist/agents/kimi.js +0 -16
  1391. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/schema/store.schema.json +0 -32
  1392. package/node_modules/toolcraft/node_modules/@poe-code/task-list/dist/schema/task.schema.json +0 -33
  1393. package/node_modules/toolcraft/node_modules/mcp-oauth/README.md +0 -31
  1394. package/node_modules/toolcraft/node_modules/mcp-oauth/dist/client/auth-store-session-store.d.ts +0 -14
  1395. package/node_modules/toolcraft/node_modules/mcp-oauth/dist/client/default-oauth-client-provider.js +0 -627
  1396. package/node_modules/toolcraft/node_modules/mcp-oauth/dist/client/loopback-authorization.d.ts +0 -20
  1397. package/node_modules/toolcraft/node_modules/mcp-oauth/dist/client/loopback-authorization.js +0 -207
  1398. package/node_modules/toolcraft/node_modules/mcp-oauth/dist/client/pkce.js +0 -7
  1399. package/node_modules/toolcraft/node_modules/mcp-oauth/dist/client/types.d.ts +0 -113
  1400. package/node_modules/toolcraft/node_modules/mcp-oauth/dist/index.d.ts +0 -10
  1401. package/node_modules/toolcraft/node_modules/mcp-oauth/dist/index.js +0 -7
  1402. package/node_modules/toolcraft/node_modules/mcp-oauth/dist/server/jwks-token-verifier.js +0 -304
  1403. package/node_modules/toolcraft/node_modules/tiny-mcp-client/.turbo/turbo-build.log +0 -7
  1404. package/node_modules/toolcraft/node_modules/tiny-mcp-client/dist/internal.d.ts +0 -556
  1405. package/node_modules/toolcraft/node_modules/tiny-mcp-client/dist/internal.js +0 -2688
  1406. package/node_modules/toolcraft/node_modules/tiny-mcp-client/dist/jsonrpc-types.compile-check.js +0 -37
  1407. package/node_modules/toolcraft/node_modules/tiny-mcp-client/dist/mcp-lifecycle-types.compile-check.js +0 -50
  1408. package/node_modules/toolcraft/node_modules/tiny-mcp-client/dist/mcp-prompt-types.compile-check.js +0 -50
  1409. package/node_modules/toolcraft/node_modules/tiny-mcp-client/dist/mcp-resource-types.compile-check.js +0 -51
  1410. package/node_modules/toolcraft/node_modules/tiny-mcp-client/dist/mcp-tool-types.compile-check.js +0 -99
  1411. package/node_modules/toolcraft/node_modules/tiny-mcp-client/dist/mcp-transport-types.compile-check.js +0 -56
  1412. package/node_modules/toolcraft/node_modules/tiny-mcp-client/dist/mcp-utility-types.compile-check.js +0 -145
  1413. package/node_modules/toolcraft/node_modules/tiny-mcp-client/dist/oauth-discovery.d.ts +0 -24
  1414. package/node_modules/toolcraft/node_modules/tiny-mcp-client/dist/oauth-discovery.js +0 -382
  1415. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/http-oauth.integration.test.ts +0 -808
  1416. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/http-oauth.test.ts +0 -922
  1417. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/index.ts +0 -94
  1418. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/internal.ts +0 -3904
  1419. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/jsonrpc-types.compile-check.ts +0 -66
  1420. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/mcp-client-http-transport.integration.test.ts +0 -222
  1421. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/mcp-client-sdk.test.ts +0 -1326
  1422. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/mcp-client-tiny-stdio-test-server-tools.test.ts +0 -143
  1423. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/mcp-lifecycle-types.compile-check.ts +0 -65
  1424. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/mcp-prompt-types.compile-check.ts +0 -66
  1425. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/mcp-resource-types.compile-check.ts +0 -70
  1426. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/mcp-tool-types.compile-check.ts +0 -127
  1427. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/mcp-transport-types.compile-check.ts +0 -75
  1428. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/mcp-utility-types.compile-check.ts +0 -181
  1429. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/mock-servers.test.ts +0 -980
  1430. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/oauth-discovery.ts +0 -578
  1431. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/package-runtime.test.ts +0 -25
  1432. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/transports.test.ts +0 -9018
  1433. package/node_modules/toolcraft/node_modules/tiny-mcp-client/src/utilities.test.ts +0 -372
  1434. package/node_modules/toolcraft/node_modules/tiny-mcp-client/tsconfig.json +0 -11
  1435. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/two-pane.d.ts +0 -102
  1436. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/explorer/two-pane.js +0 -510
  1437. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/run-two-pane-explorer.d.ts +0 -2
  1438. package/node_modules/toolcraft/node_modules/toolcraft-design/dist/run-two-pane-explorer.js +0 -1
  1439. /package/node_modules/toolcraft/{node_modules/mcp-oauth/dist/client/types.js → dist/http-hosted-oauth.compile-check.d.ts} +0 -0
  1440. /package/node_modules/toolcraft/{node_modules/mcp-oauth/dist/types.compile-check.d.ts → dist/http.compile-check.d.ts} +0 -0
  1441. /package/node_modules/toolcraft/{node_modules/tiny-mcp-client/dist/jsonrpc-types.compile-check.d.ts → dist/human-in-loop/runtime-options.js} +0 -0
  1442. /package/node_modules/toolcraft/{node_modules/tiny-mcp-client/dist/mcp-lifecycle-types.compile-check.d.ts → dist/node-require-shim.d.ts} +0 -0
  1443. /package/node_modules/toolcraft/{node_modules/tiny-mcp-client/dist/mcp-prompt-types.compile-check.d.ts → dist/safe-bash-capabilities.compile-check.d.ts} +0 -0
  1444. /package/node_modules/toolcraft/{node_modules/tiny-mcp-client/dist/mcp-resource-types.compile-check.d.ts → dist/safe-bash.compile-check.d.ts} +0 -0
  1445. /package/node_modules/toolcraft/{node_modules/tiny-mcp-client/dist/mcp-tool-types.compile-check.d.ts → dist/schema-standard.compile-check.d.ts} +0 -0
  1446. /package/node_modules/toolcraft/node_modules/{tiny-mcp-client/dist/mcp-transport-types.compile-check.d.ts → @noble/hashes/index.d.ts} +0 -0
  1447. /package/node_modules/toolcraft/node_modules/{tiny-mcp-client/dist/mcp-utility-types.compile-check.d.ts → @poe-code/safe-fs/dist/bridge/types.js} +0 -0
  1448. /package/node_modules/toolcraft/node_modules/{mcp-oauth → tiny-http-mcp-server/node_modules/mcp-oauth}/dist/client/authorization-state.d.ts +0 -0
  1449. /package/node_modules/toolcraft/node_modules/{mcp-oauth → tiny-http-mcp-server/node_modules/mcp-oauth}/dist/client/default-oauth-client-provider.d.ts +0 -0
  1450. /package/node_modules/toolcraft/node_modules/{mcp-oauth → tiny-http-mcp-server/node_modules/mcp-oauth}/dist/client/pkce.d.ts +0 -0
  1451. /package/node_modules/toolcraft/node_modules/{mcp-oauth → tiny-http-mcp-server/node_modules/mcp-oauth}/dist/resource-indicator.d.ts +0 -0
  1452. /package/node_modules/toolcraft/node_modules/{mcp-oauth → tiny-http-mcp-server/node_modules/mcp-oauth}/dist/resource-indicator.js +0 -0
  1453. /package/node_modules/toolcraft/node_modules/{mcp-oauth → tiny-http-mcp-server/node_modules/mcp-oauth}/dist/types.compile-check.js +0 -0
@@ -1,3904 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import type { ChildProcessWithoutNullStreams, SpawnOptions } from "node:child_process";
3
- import { PassThrough } from "node:stream";
4
- import type { Readable, Writable } from "node:stream";
5
- import type { JSONRPCMessage as SdkJsonRpcMessage } from "@modelcontextprotocol/sdk/types.js";
6
- import {
7
- createOAuthClientProvider,
8
- OAuthError,
9
- type OAuthClientProvider,
10
- type OAuthClientProviderOptions,
11
- } from "mcp-oauth";
12
- import type { Server as TinyStdioMcpServer } from "tiny-stdio-mcp-server";
13
- import {
14
- OAuthMetadataDiscovery,
15
- parseBearerWwwAuthenticateHeader,
16
- } from "./oauth-discovery.js";
17
- import type {
18
- OAuthDiscoveryCache,
19
- } from "./oauth-discovery.js";
20
-
21
- export {
22
- OAuthMetadataDiscovery,
23
- discoverOAuthMetadata,
24
- parseBearerWwwAuthenticateHeader,
25
- resolveAuthorizationServerMetadataUrl,
26
- resolveProtectedResourceMetadataUrl,
27
- } from "./oauth-discovery.js";
28
- export {
29
- createAuthStoreSessionStore,
30
- createDefaultOAuthClientProvider,
31
- } from "mcp-oauth";
32
- export type {
33
- OAuthDiscoveryCache,
34
- } from "./oauth-discovery.js";
35
- export type { OAuthAuthorizationServerMetadata, OAuthDiscoveryResult, OAuthMetadataFetch, OAuthProtectedResourceMetadata, OAuthUnauthorizedChallenge } from "./oauth-discovery.js";
36
- export type {
37
- DefaultOAuthClientProviderOptions,
38
- OAuthClientProvider,
39
- OAuthClientProviderOptions,
40
- OAuthSessionStore,
41
- StoredOAuthSession,
42
- } from "mcp-oauth";
43
-
44
- export type RequestId = number | string;
45
-
46
- export interface Implementation {
47
- name: string;
48
- version: string;
49
- }
50
-
51
- export interface ClientCapabilities {
52
- roots?: {
53
- listChanged?: boolean;
54
- [key: string]: unknown;
55
- };
56
- sampling?: {
57
- [key: string]: unknown;
58
- };
59
- experimental?: Record<string, unknown>;
60
- }
61
-
62
- export interface ServerCapabilities {
63
- prompts?: {
64
- listChanged?: boolean;
65
- [key: string]: unknown;
66
- };
67
- resources?: {
68
- subscribe?: boolean;
69
- listChanged?: boolean;
70
- [key: string]: unknown;
71
- };
72
- tools?: {
73
- listChanged?: boolean;
74
- [key: string]: unknown;
75
- };
76
- logging?: {
77
- [key: string]: unknown;
78
- };
79
- completions?: {
80
- [key: string]: unknown;
81
- };
82
- experimental?: Record<string, unknown>;
83
- }
84
-
85
- export interface InitializeParams {
86
- protocolVersion: string;
87
- capabilities: ClientCapabilities;
88
- clientInfo: Implementation;
89
- }
90
-
91
- export interface InitializeResult {
92
- protocolVersion: string;
93
- capabilities: ServerCapabilities;
94
- serverInfo: Implementation;
95
- instructions?: string;
96
- }
97
-
98
- export interface McpClientOptions {
99
- clientInfo: Implementation;
100
- requestTimeoutMs?: number;
101
- capabilities?: ClientCapabilities;
102
- onToolsChanged?: () => void | Promise<void>;
103
- onResourcesChanged?: () => void | Promise<void>;
104
- onResourceUpdated?: (uri: string) => void | Promise<void>;
105
- onPromptsChanged?: () => void | Promise<void>;
106
- onLog?: (message: LogMessage) => void | Promise<void>;
107
- onProgress?: (params: ProgressParams) => void | Promise<void>;
108
- onSamplingRequest?: (
109
- params: CreateMessageParams
110
- ) => CreateMessageResult | Promise<CreateMessageResult>;
111
- onRootsList?: () => Root[] | Promise<Root[]>;
112
- }
113
-
114
- const MCP_PROTOCOL_VERSION = "2025-03-26";
115
-
116
- export class McpClient {
117
- private currentState: "disconnected" | "initializing" | "ready" | "closed" = "disconnected";
118
- private currentServerCapabilities: ServerCapabilities | null = null;
119
- private currentClientCapabilities: ClientCapabilities | null = null;
120
- private currentServerInfo: Implementation | null = null;
121
- private currentInstructions: string | undefined;
122
- private readonly subscribedResourceUris = new Set<string>();
123
- private readonly activeProgressTokens = new Map<ProgressToken, number>();
124
- private readonly options: McpClientOptions;
125
- private transport: McpTransport | null = null;
126
- private messageLayer: JsonRpcMessageLayer | null = null;
127
-
128
- constructor(options: McpClientOptions) {
129
- this.options = options;
130
- }
131
-
132
- get state(): "disconnected" | "initializing" | "ready" | "closed" {
133
- return this.currentState;
134
- }
135
-
136
- get serverCapabilities(): ServerCapabilities | null {
137
- return this.currentServerCapabilities === null
138
- ? null
139
- : structuredClone(this.currentServerCapabilities);
140
- }
141
-
142
- get serverInfo(): Implementation | null {
143
- return this.currentServerInfo;
144
- }
145
-
146
- get instructions(): string | undefined {
147
- return this.currentInstructions;
148
- }
149
-
150
- private getMessageLayerOrThrow(): JsonRpcMessageLayer {
151
- if (this.currentState === "disconnected") {
152
- throw new Error("MCP client is disconnected");
153
- }
154
-
155
- if (this.currentState === "closed") {
156
- throw new Error("MCP client is closed");
157
- }
158
-
159
- if (this.messageLayer === null) {
160
- throw new Error("MCP client is disconnected");
161
- }
162
-
163
- return this.messageLayer;
164
- }
165
-
166
- async connect(transport: McpTransport): Promise<InitializeResult> {
167
- if (this.currentState !== "disconnected" && this.currentState !== "closed") {
168
- throw new Error("MCP client is already connected");
169
- }
170
-
171
- this.currentServerCapabilities = null;
172
- this.currentClientCapabilities = null;
173
- this.currentServerInfo = null;
174
- this.currentInstructions = undefined;
175
- this.subscribedResourceUris.clear();
176
- this.activeProgressTokens.clear();
177
-
178
- const transportClosedReason = transport.closed
179
- .then((closedEvent) => closedEvent.reason)
180
- .catch((error: unknown) =>
181
- error instanceof Error ? error : new Error(String(error))
182
- );
183
- const messageLayer = new JsonRpcMessageLayer(
184
- transport.readable,
185
- transport.writable,
186
- this.options.requestTimeoutMs,
187
- transportClosedReason
188
- );
189
- const {
190
- onSamplingRequest,
191
- onRootsList,
192
- onToolsChanged,
193
- onResourcesChanged,
194
- onResourceUpdated,
195
- onPromptsChanged,
196
- onLog,
197
- onProgress,
198
- } = this.options;
199
-
200
- messageLayer.onRequest("ping", () => ({}));
201
-
202
- if (onSamplingRequest !== undefined) {
203
- messageLayer.onRequest("sampling/createMessage", (params) =>
204
- onSamplingRequest(params as CreateMessageParams)
205
- );
206
- }
207
-
208
- messageLayer.onNotification("notifications/tools/list_changed", async () => {
209
- if (onToolsChanged === undefined || this.currentServerCapabilities?.tools?.listChanged !== true) {
210
- return;
211
- }
212
-
213
- await onToolsChanged();
214
- });
215
- messageLayer.onNotification("notifications/resources/list_changed", async () => {
216
- if (
217
- onResourcesChanged === undefined
218
- || this.currentServerCapabilities?.resources?.listChanged !== true
219
- ) {
220
- return;
221
- }
222
-
223
- await onResourcesChanged();
224
- });
225
- messageLayer.onNotification("notifications/resources/updated", async (params) => {
226
- if (onResourceUpdated === undefined) {
227
- return;
228
- }
229
-
230
- if (typeof params !== "object" || params === null || Array.isArray(params)) {
231
- return;
232
- }
233
-
234
- const { uri } = params as { uri?: unknown };
235
- if (typeof uri !== "string" || !this.subscribedResourceUris.has(uri)) {
236
- return;
237
- }
238
-
239
- await onResourceUpdated(uri);
240
- });
241
- messageLayer.onNotification("notifications/prompts/list_changed", async () => {
242
- if (
243
- onPromptsChanged === undefined
244
- || this.currentServerCapabilities?.prompts?.listChanged !== true
245
- ) {
246
- return;
247
- }
248
-
249
- await onPromptsChanged();
250
- });
251
- messageLayer.onNotification("notifications/message", async (params) => {
252
- if (onLog === undefined || !isObjectRecord(params) || !isLogLevel(params.level)) {
253
- return;
254
- }
255
-
256
- if (!hasOwn(params, "data")) {
257
- return;
258
- }
259
-
260
- const message: LogMessage = {
261
- level: params.level,
262
- data: params.data,
263
- };
264
-
265
- if (params.logger !== undefined) {
266
- if (typeof params.logger !== "string") {
267
- return;
268
- }
269
-
270
- message.logger = params.logger;
271
- }
272
-
273
- await onLog(message);
274
- });
275
- messageLayer.onNotification("notifications/progress", async (params) => {
276
- if (onProgress === undefined || !isObjectRecord(params)) {
277
- return;
278
- }
279
-
280
- const { progressToken, progress } = params;
281
- if (
282
- !isRequestId(progressToken) ||
283
- typeof progress !== "number" ||
284
- !this.activeProgressTokens.has(progressToken)
285
- ) {
286
- return;
287
- }
288
-
289
- const progressParams: ProgressParams = {
290
- progressToken,
291
- progress,
292
- };
293
-
294
- if (params.total !== undefined) {
295
- if (typeof params.total !== "number") {
296
- return;
297
- }
298
-
299
- progressParams.total = params.total;
300
- }
301
-
302
- if (params.message !== undefined) {
303
- if (typeof params.message !== "string") {
304
- return;
305
- }
306
-
307
- progressParams.message = params.message;
308
- }
309
-
310
- await onProgress(progressParams);
311
- });
312
- messageLayer.onNotification("notifications/cancelled", () => undefined);
313
-
314
- this.transport = transport;
315
- this.messageLayer = messageLayer;
316
- this.currentState = "initializing";
317
- this.subscribedResourceUris.clear();
318
- this.activeProgressTokens.clear();
319
- transport.closed
320
- .then((closedEvent) => {
321
- if (this.transport !== transport) {
322
- return;
323
- }
324
-
325
- this.messageLayer?.dispose(closedEvent.reason);
326
- this.messageLayer = null;
327
- this.transport = null;
328
- this.currentState = "closed";
329
- })
330
- .catch((error: unknown) => {
331
- if (this.transport !== transport) {
332
- return;
333
- }
334
-
335
- const reason = error instanceof Error ? error : new Error(String(error));
336
- this.messageLayer?.dispose(reason);
337
- this.messageLayer = null;
338
- this.transport = null;
339
- this.currentState = "closed";
340
- });
341
-
342
- const capabilities: ClientCapabilities = {
343
- ...(this.options.capabilities ?? {}),
344
- };
345
-
346
- if (onSamplingRequest !== undefined && capabilities.sampling === undefined) {
347
- capabilities.sampling = {};
348
- }
349
-
350
- if (onRootsList !== undefined) {
351
- capabilities.roots = {
352
- ...(capabilities.roots ?? {}),
353
- };
354
- }
355
-
356
- this.currentClientCapabilities = structuredClone(capabilities);
357
-
358
- try {
359
- const initializeResultValue = await messageLayer.sendRequest("initialize", {
360
- protocolVersion: MCP_PROTOCOL_VERSION,
361
- clientInfo: this.options.clientInfo,
362
- capabilities,
363
- });
364
-
365
- if (!isInitializeResult(initializeResultValue)) {
366
- throw new McpError(ERROR_INVALID_REQUEST, "Invalid initialize result");
367
- }
368
-
369
- const initializeResult = initializeResultValue;
370
-
371
- if (initializeResult.protocolVersion !== MCP_PROTOCOL_VERSION) {
372
- throw new McpError(
373
- ERROR_INVALID_REQUEST,
374
- `Unsupported protocol version: ${initializeResult.protocolVersion}`
375
- );
376
- }
377
-
378
- this.currentServerCapabilities = structuredClone(initializeResult.capabilities);
379
- this.currentServerInfo = { ...initializeResult.serverInfo };
380
- this.currentInstructions = initializeResult.instructions;
381
- if (onRootsList !== undefined) {
382
- messageLayer.onRequest("roots/list", async () => ({
383
- roots: await onRootsList(),
384
- }));
385
- }
386
- messageLayer.sendNotification("notifications/initialized");
387
- this.currentState = "ready";
388
-
389
- return initializeResult;
390
- } catch (error) {
391
- if (this.transport === transport) {
392
- const reason = error instanceof Error ? error : new Error(String(error));
393
- messageLayer.dispose(reason);
394
- transport.dispose(reason);
395
- this.messageLayer = null;
396
- this.transport = null;
397
- this.currentState = "disconnected";
398
- }
399
-
400
- throw error;
401
- }
402
- }
403
-
404
- private getServerCapabilitiesOrThrow(): ServerCapabilities {
405
- if (this.currentServerCapabilities === null) {
406
- throw new Error("MCP client has not completed initialization");
407
- }
408
-
409
- return this.currentServerCapabilities;
410
- }
411
-
412
- async listTools(params: PaginatedParams = {}): Promise<{ tools: Tool[]; nextCursor?: string }> {
413
- const messageLayer = this.getMessageLayerOrThrow();
414
- const serverCapabilities = this.getServerCapabilitiesOrThrow();
415
- if (serverCapabilities.tools === undefined) {
416
- throw new Error("Server does not support tools");
417
- }
418
-
419
- const requestParams = params.cursor === undefined ? undefined : { cursor: params.cursor };
420
- const result = await messageLayer.sendRequest("tools/list", requestParams);
421
- if (!isToolsListResult(result)) {
422
- throw new McpError(ERROR_INVALID_REQUEST, "Invalid tools/list result");
423
- }
424
-
425
- return result;
426
- }
427
-
428
- async callTool(params: CallToolParams, options: CallToolOptions = {}): Promise<CallToolResult> {
429
- const messageLayer = this.getMessageLayerOrThrow();
430
- const serverCapabilities = this.getServerCapabilitiesOrThrow();
431
- if (serverCapabilities.tools === undefined) {
432
- throw new Error("Server does not support tools");
433
- }
434
-
435
- if (options.signal?.aborted) {
436
- throw options.signal.reason;
437
- }
438
-
439
- const requestParams =
440
- options.progressToken === undefined
441
- ? params
442
- : {
443
- ...params,
444
- _meta: {
445
- progressToken: options.progressToken,
446
- },
447
- };
448
-
449
- if (options.progressToken !== undefined) {
450
- this.activeProgressTokens.set(
451
- options.progressToken,
452
- (this.activeProgressTokens.get(options.progressToken) ?? 0) + 1
453
- );
454
- }
455
-
456
- try {
457
- let requestId: RequestId | undefined;
458
- let cancellationSent = false;
459
- const sendCancellationNotification = () => {
460
- if (requestId === undefined || cancellationSent) {
461
- return;
462
- }
463
- cancellationSent = true;
464
- messageLayer.sendNotification("notifications/cancelled", { requestId });
465
- };
466
- const requestPromise = messageLayer.sendRequest("tools/call", requestParams, {
467
- onRequestId: (nextRequestId) => {
468
- requestId = nextRequestId;
469
- },
470
- onTimeout: sendCancellationNotification,
471
- }).then((result) => {
472
- if (!isCallToolResult(result)) {
473
- throw new McpError(ERROR_INVALID_REQUEST, "Invalid tool result");
474
- }
475
-
476
- return result;
477
- });
478
- if (options.signal === undefined) {
479
- return await requestPromise;
480
- }
481
- const signal = options.signal;
482
-
483
- let abortListener: (() => void) | undefined;
484
- const abortPromise = new Promise<CallToolResult>((_, reject) => {
485
- const rejectWithAbortReason = () => {
486
- sendCancellationNotification();
487
- if (requestId !== undefined) {
488
- messageLayer.cancelRequest(requestId, signal.reason);
489
- }
490
- reject(signal.reason);
491
- };
492
-
493
- abortListener = rejectWithAbortReason;
494
- signal.addEventListener("abort", abortListener, { once: true });
495
- if (signal.aborted) {
496
- signal.removeEventListener("abort", abortListener);
497
- rejectWithAbortReason();
498
- }
499
- });
500
-
501
- try {
502
- return (await Promise.race([requestPromise, abortPromise])) as CallToolResult;
503
- } finally {
504
- if (abortListener !== undefined) {
505
- signal.removeEventListener("abort", abortListener);
506
- }
507
- }
508
- } finally {
509
- if (options.progressToken !== undefined) {
510
- const activeCount = this.activeProgressTokens.get(options.progressToken);
511
- if (activeCount === 1) {
512
- this.activeProgressTokens.delete(options.progressToken);
513
- } else if (activeCount !== undefined) {
514
- this.activeProgressTokens.set(options.progressToken, activeCount - 1);
515
- }
516
- }
517
- }
518
- }
519
-
520
- async listResources(
521
- params: PaginatedParams = {}
522
- ): Promise<{ resources: Resource[]; nextCursor?: string }> {
523
- const messageLayer = this.getMessageLayerOrThrow();
524
- const serverCapabilities = this.getServerCapabilitiesOrThrow();
525
- if (serverCapabilities.resources === undefined) {
526
- throw new Error("Server does not support resources");
527
- }
528
-
529
- const requestParams = params.cursor === undefined ? undefined : { cursor: params.cursor };
530
- const result = await messageLayer.sendRequest("resources/list", requestParams);
531
- if (!isResourcesListResult(result)) {
532
- throw new McpError(ERROR_INVALID_REQUEST, "Invalid resources/list result");
533
- }
534
-
535
- return result;
536
- }
537
-
538
- async listResourceTemplates(
539
- params: PaginatedParams = {}
540
- ): Promise<{ resourceTemplates: ResourceTemplate[]; nextCursor?: string }> {
541
- const messageLayer = this.getMessageLayerOrThrow();
542
- const serverCapabilities = this.getServerCapabilitiesOrThrow();
543
- if (serverCapabilities.resources === undefined) {
544
- throw new Error("Server does not support resources");
545
- }
546
-
547
- const requestParams = params.cursor === undefined ? undefined : { cursor: params.cursor };
548
- const result = await messageLayer.sendRequest("resources/templates/list", requestParams);
549
- if (!isResourceTemplatesListResult(result)) {
550
- throw new McpError(ERROR_INVALID_REQUEST, "Invalid resources/templates/list result");
551
- }
552
-
553
- return result;
554
- }
555
-
556
- async readResource(params: ReadResourceParams): Promise<{ contents: ResourceContents[] }> {
557
- const messageLayer = this.getMessageLayerOrThrow();
558
- const serverCapabilities = this.getServerCapabilitiesOrThrow();
559
- if (serverCapabilities.resources === undefined) {
560
- throw new Error("Server does not support resources");
561
- }
562
-
563
- const result = await messageLayer.sendRequest("resources/read", params);
564
- if (!isReadResourceResult(result)) {
565
- throw new McpError(ERROR_INVALID_REQUEST, "Invalid resources/read result");
566
- }
567
-
568
- return result;
569
- }
570
-
571
- async subscribe(uri: string): Promise<void> {
572
- const messageLayer = this.getMessageLayerOrThrow();
573
- const serverCapabilities = this.getServerCapabilitiesOrThrow();
574
- if (serverCapabilities.resources?.subscribe !== true) {
575
- throw new Error("Server does not support resource subscriptions");
576
- }
577
-
578
- await messageLayer.sendRequest("resources/subscribe", { uri });
579
- this.subscribedResourceUris.add(uri);
580
- }
581
-
582
- async unsubscribe(uri: string): Promise<void> {
583
- const messageLayer = this.getMessageLayerOrThrow();
584
- const serverCapabilities = this.getServerCapabilitiesOrThrow();
585
- if (serverCapabilities.resources?.subscribe !== true) {
586
- throw new Error("Server does not support resource subscriptions");
587
- }
588
-
589
- await messageLayer.sendRequest("resources/unsubscribe", { uri });
590
- this.subscribedResourceUris.delete(uri);
591
- }
592
-
593
- async listPrompts(params: PaginatedParams = {}): Promise<{ prompts: Prompt[]; nextCursor?: string }> {
594
- const messageLayer = this.getMessageLayerOrThrow();
595
- const serverCapabilities = this.getServerCapabilitiesOrThrow();
596
- if (serverCapabilities.prompts === undefined) {
597
- throw new Error("Server does not support prompts");
598
- }
599
-
600
- const requestParams = params.cursor === undefined ? undefined : { cursor: params.cursor };
601
- return (await messageLayer.sendRequest("prompts/list", requestParams)) as {
602
- prompts: Prompt[];
603
- nextCursor?: string;
604
- };
605
- }
606
-
607
- async getPrompt(params: GetPromptParams): Promise<GetPromptResult> {
608
- const messageLayer = this.getMessageLayerOrThrow();
609
- const serverCapabilities = this.getServerCapabilitiesOrThrow();
610
- if (serverCapabilities.prompts === undefined) {
611
- throw new Error("Server does not support prompts");
612
- }
613
-
614
- const result = await messageLayer.sendRequest("prompts/get", params);
615
- if (!isGetPromptResult(result)) {
616
- throw new McpError(ERROR_INVALID_REQUEST, "Invalid prompts/get result");
617
- }
618
-
619
- return result;
620
- }
621
-
622
- async complete(params: CompleteParams): Promise<CompleteResult> {
623
- const messageLayer = this.getMessageLayerOrThrow();
624
- const serverCapabilities = this.getServerCapabilitiesOrThrow();
625
- if (serverCapabilities.completions === undefined) {
626
- throw new Error("Server does not support completions");
627
- }
628
-
629
- const result = await messageLayer.sendRequest("completion/complete", params);
630
- if (!isCompleteResult(result)) {
631
- throw new McpError(ERROR_INVALID_REQUEST, "Invalid completion/complete result");
632
- }
633
-
634
- return result;
635
- }
636
-
637
- async setLogLevel(level: LogLevel): Promise<void> {
638
- const messageLayer = this.getMessageLayerOrThrow();
639
- const serverCapabilities = this.getServerCapabilitiesOrThrow();
640
- if (serverCapabilities.logging === undefined) {
641
- throw new Error("Server does not support logging");
642
- }
643
-
644
- await messageLayer.sendRequest("logging/setLevel", { level });
645
- }
646
-
647
- async cancel(requestId: RequestId, reason?: string): Promise<void> {
648
- const messageLayer = this.getMessageLayerOrThrow();
649
- const params: { requestId: RequestId; reason?: string } = { requestId };
650
-
651
- if (reason !== undefined) {
652
- params.reason = reason;
653
- }
654
-
655
- messageLayer.sendNotification("notifications/cancelled", params);
656
- }
657
-
658
- async sendRootsChanged(): Promise<void> {
659
- const messageLayer = this.getMessageLayerOrThrow();
660
- if (this.currentClientCapabilities?.roots?.listChanged !== true) {
661
- throw new Error("Client did not advertise roots list changes");
662
- }
663
-
664
- messageLayer.sendNotification("notifications/roots/list_changed");
665
- }
666
-
667
- async ping(): Promise<void> {
668
- const messageLayer = this.getMessageLayerOrThrow();
669
- await messageLayer.sendRequest("ping");
670
- }
671
-
672
- async close(): Promise<void> {
673
- if (this.currentState === "closed") {
674
- return;
675
- }
676
-
677
- const closeError = new Error("MCP client closed");
678
- this.messageLayer?.dispose(closeError);
679
- this.transport?.dispose(closeError);
680
- this.messageLayer = null;
681
- this.transport = null;
682
- this.currentServerCapabilities = null;
683
- this.currentClientCapabilities = null;
684
- this.currentServerInfo = null;
685
- this.currentInstructions = undefined;
686
- this.subscribedResourceUris.clear();
687
- this.activeProgressTokens.clear();
688
- this.currentState = "closed";
689
- }
690
- }
691
-
692
- export interface Tool {
693
- name: string;
694
- description?: string;
695
- inputSchema: Record<string, unknown>;
696
- outputSchema?: Record<string, unknown>;
697
- annotations?: ToolAnnotations;
698
- }
699
-
700
- export interface ToolAnnotations {
701
- title?: string;
702
- readOnlyHint?: boolean;
703
- destructiveHint?: boolean;
704
- idempotentHint?: boolean;
705
- openWorldHint?: boolean;
706
- }
707
-
708
- export interface CallToolParams {
709
- name: string;
710
- arguments?: Record<string, unknown>;
711
- }
712
-
713
- export interface CallToolOptions {
714
- signal?: AbortSignal;
715
- progressToken?: ProgressToken;
716
- }
717
-
718
- export interface ReadResourceParams {
719
- uri: string;
720
- }
721
-
722
- export interface Resource {
723
- uri: string;
724
- name: string;
725
- description?: string;
726
- mimeType?: string;
727
- size?: number;
728
- }
729
-
730
- export interface ResourceTemplate {
731
- uriTemplate: string;
732
- name: string;
733
- description?: string;
734
- mimeType?: string;
735
- }
736
-
737
- export interface PaginatedParams {
738
- cursor?: string;
739
- }
740
-
741
- export interface PaginatedResult {
742
- nextCursor?: string;
743
- }
744
-
745
- export interface TextResourceContents {
746
- uri: string;
747
- mimeType?: string;
748
- text: string;
749
- }
750
-
751
- export interface BlobResourceContents {
752
- uri: string;
753
- mimeType?: string;
754
- blob: string;
755
- }
756
-
757
- export type ResourceContents = TextResourceContents | BlobResourceContents;
758
-
759
- export interface TextContent {
760
- type: "text";
761
- text: string;
762
- }
763
-
764
- export interface ImageContent {
765
- type: "image";
766
- data: string;
767
- mimeType: string;
768
- }
769
-
770
- export interface AudioContent {
771
- type: "audio";
772
- data: string;
773
- mimeType: string;
774
- }
775
-
776
- export interface EmbeddedResource {
777
- type: "resource";
778
- resource: ResourceContents;
779
- }
780
-
781
- export type ContentItem = TextContent | ImageContent | AudioContent | EmbeddedResource;
782
-
783
- export interface Prompt {
784
- name: string;
785
- description?: string;
786
- arguments?: PromptArgument[];
787
- }
788
-
789
- export interface PromptArgument {
790
- name: string;
791
- description?: string;
792
- required?: boolean;
793
- }
794
-
795
- export interface PromptMessage {
796
- role: "user" | "assistant";
797
- content: ContentItem;
798
- }
799
-
800
- export interface GetPromptResult {
801
- description?: string;
802
- messages: PromptMessage[];
803
- }
804
-
805
- export interface GetPromptParams {
806
- name: string;
807
- arguments?: Record<string, string>;
808
- }
809
-
810
- export interface CallToolResult {
811
- content: ContentItem[];
812
- structuredContent?: Record<string, unknown>;
813
- isError?: boolean;
814
- }
815
-
816
- export interface Root {
817
- uri: string;
818
- name?: string;
819
- }
820
-
821
- export type LogLevel =
822
- | "debug"
823
- | "info"
824
- | "notice"
825
- | "warning"
826
- | "error"
827
- | "critical"
828
- | "alert"
829
- | "emergency";
830
-
831
- export interface LogMessage {
832
- level: LogLevel;
833
- logger?: string;
834
- data: unknown;
835
- }
836
-
837
- export type ProgressToken = RequestId;
838
-
839
- export interface ProgressParams {
840
- progressToken: ProgressToken;
841
- progress: number;
842
- total?: number;
843
- message?: string;
844
- }
845
-
846
- export interface ModelHint {
847
- name?: string;
848
- }
849
-
850
- export interface ModelPreferences {
851
- hints?: ModelHint[];
852
- costPriority?: number;
853
- speedPriority?: number;
854
- intelligencePriority?: number;
855
- }
856
-
857
- export interface SamplingMessage {
858
- role: "user" | "assistant";
859
- content: ContentItem | ContentItem[];
860
- }
861
-
862
- export type IncludeContext = "none" | "thisServer" | "allServers";
863
-
864
- export interface CreateMessageParams {
865
- messages: SamplingMessage[];
866
- modelPreferences?: ModelPreferences;
867
- systemPrompt?: string;
868
- includeContext?: IncludeContext;
869
- temperature?: number;
870
- maxTokens: number;
871
- stopSequences?: string[];
872
- metadata?: Record<string, unknown>;
873
- }
874
-
875
- export interface CreateMessageResult {
876
- model: string;
877
- content: ContentItem | ContentItem[];
878
- role: "user" | "assistant";
879
- stopReason: string;
880
- }
881
-
882
- export interface PromptReference {
883
- type: "ref/prompt";
884
- name: string;
885
- }
886
-
887
- export interface ResourceReference {
888
- type: "ref/resource";
889
- uri: string;
890
- }
891
-
892
- export interface CompleteArgument {
893
- name: string;
894
- value: string;
895
- }
896
-
897
- export interface CompleteParams {
898
- ref: PromptReference | ResourceReference;
899
- argument: CompleteArgument;
900
- }
901
-
902
- export interface Completion {
903
- values: string[];
904
- hasMore?: boolean;
905
- total?: number;
906
- }
907
-
908
- export interface CompleteResult {
909
- completion: Completion;
910
- }
911
-
912
- export const ERROR_PARSE = -32700;
913
- export const ERROR_INVALID_REQUEST = -32600;
914
- export const ERROR_METHOD_NOT_FOUND = -32601;
915
- export const ERROR_INVALID_PARAMS = -32602;
916
- export const ERROR_INTERNAL = -32603;
917
-
918
- export interface McpTransportClosedEvent {
919
- reason: Error;
920
- code?: number;
921
- signal?: NodeJS.Signals;
922
- }
923
-
924
- export interface McpTransport {
925
- readable: Readable;
926
- writable: Writable;
927
- closed: Promise<McpTransportClosedEvent>;
928
- dispose(reason?: Error): void;
929
- }
930
-
931
- export interface InMemoryServerTransport {
932
- readable: Readable;
933
- writable: Writable;
934
- }
935
-
936
- export interface InMemoryTransportPair {
937
- clientTransport: McpTransport;
938
- serverTransport: InMemoryServerTransport;
939
- }
940
-
941
- export function createInMemoryTransportPair(): InMemoryTransportPair {
942
- const clientToServer = new PassThrough();
943
- const serverToClient = new PassThrough();
944
- let disposed = false;
945
- let resolveClosed:
946
- | ((closedEvent: McpTransportClosedEvent) => void)
947
- | undefined;
948
-
949
- const closed = new Promise<McpTransportClosedEvent>((resolve) => {
950
- resolveClosed = resolve;
951
- });
952
-
953
- const resolveClosedOnce = (reason: Error): void => {
954
- if (resolveClosed === undefined) {
955
- return;
956
- }
957
-
958
- const currentResolve = resolveClosed;
959
- resolveClosed = undefined;
960
- currentResolve({ reason });
961
- };
962
-
963
- const dispose = (reason = new Error("In-memory transport disposed")): void => {
964
- if (disposed) {
965
- return;
966
- }
967
-
968
- disposed = true;
969
-
970
- if (!clientToServer.destroyed && !clientToServer.writableEnded) {
971
- clientToServer.end();
972
- }
973
-
974
- if (!serverToClient.destroyed && !serverToClient.writableEnded) {
975
- serverToClient.end();
976
- }
977
-
978
- resolveClosedOnce(reason);
979
- };
980
-
981
- clientToServer.once("error", (error) => {
982
- dispose(error instanceof Error ? error : new Error(String(error)));
983
- });
984
- serverToClient.once("error", (error) => {
985
- dispose(error instanceof Error ? error : new Error(String(error)));
986
- });
987
-
988
- return {
989
- clientTransport: {
990
- readable: serverToClient,
991
- writable: clientToServer,
992
- closed,
993
- dispose,
994
- },
995
- serverTransport: {
996
- readable: clientToServer,
997
- writable: serverToClient,
998
- },
999
- };
1000
- }
1001
-
1002
- interface SdkTransportAdapterInput {
1003
- onclose?: () => void;
1004
- onerror?: (error: Error) => void;
1005
- onmessage?: (message: SdkJsonRpcMessage, extra?: any) => void;
1006
- start(): Promise<void>;
1007
- close(): Promise<void>;
1008
- send(message: SdkJsonRpcMessage): Promise<void>;
1009
- }
1010
-
1011
- export interface McpClientConnection {
1012
- connect(transport: McpTransport): Promise<void>;
1013
- close(): Promise<void>;
1014
- }
1015
-
1016
- interface SdkServerConnection {
1017
- connect(transport: unknown): Promise<void>;
1018
- }
1019
-
1020
- export interface SdkTestPair<TClient extends McpClientConnection> {
1021
- client: TClient;
1022
- cleanup: () => Promise<void>;
1023
- }
1024
-
1025
- export class SdkTransportAdapter implements McpTransport {
1026
- readonly readable: Readable;
1027
- readonly writable: Writable;
1028
- readonly closed: Promise<McpTransportClosedEvent>;
1029
- private readonly sdkTransport: SdkTransportAdapterInput;
1030
- private readonly readStream = new PassThrough();
1031
- private readonly writeStream = new PassThrough();
1032
- private resolveClosed:
1033
- | ((closedEvent: McpTransportClosedEvent) => void)
1034
- | undefined;
1035
- private disposed = false;
1036
-
1037
- constructor(sdkTransport: SdkTransportAdapterInput) {
1038
- this.sdkTransport = sdkTransport;
1039
- this.readable = this.readStream;
1040
- this.writable = this.writeStream;
1041
- this.closed = new Promise((resolve) => {
1042
- this.resolveClosed = resolve;
1043
- });
1044
-
1045
- this.sdkTransport.onmessage = (message) => {
1046
- this.readStream.write(serializeJsonRpcMessage(message as JsonRpcMessage));
1047
- };
1048
- this.sdkTransport.onclose = () => {
1049
- this.dispose(new Error("SDK transport closed"));
1050
- };
1051
- this.sdkTransport.onerror = (error) => {
1052
- this.dispose(error instanceof Error ? error : new Error(String(error)));
1053
- };
1054
-
1055
- this.readStream.once("error", (error) => {
1056
- this.dispose(error instanceof Error ? error : new Error(String(error)));
1057
- });
1058
- this.writeStream.once("error", (error) => {
1059
- this.dispose(error instanceof Error ? error : new Error(String(error)));
1060
- });
1061
-
1062
- this.consumeWrittenLines().catch((error) => {
1063
- this.dispose(error instanceof Error ? error : new Error(String(error)));
1064
- });
1065
- this.sdkTransport.start().catch((error) => {
1066
- this.dispose(error instanceof Error ? error : new Error(String(error)));
1067
- });
1068
- }
1069
-
1070
- dispose(reason = new Error("SDK transport adapter disposed")): void {
1071
- if (this.disposed) {
1072
- return;
1073
- }
1074
-
1075
- this.disposed = true;
1076
-
1077
- if (!this.writeStream.destroyed && !this.writeStream.writableEnded) {
1078
- this.writeStream.end();
1079
- }
1080
-
1081
- if (!this.readStream.destroyed && !this.readStream.writableEnded) {
1082
- this.readStream.end();
1083
- }
1084
-
1085
- if (this.resolveClosed !== undefined) {
1086
- const resolveClosed = this.resolveClosed;
1087
- this.resolveClosed = undefined;
1088
- resolveClosed({ reason });
1089
- }
1090
-
1091
- this.sdkTransport.close().catch(() => undefined);
1092
- }
1093
-
1094
- private async consumeWrittenLines(): Promise<void> {
1095
- for await (const line of readLines(this.writeStream)) {
1096
- if (this.disposed || line.length === 0) {
1097
- continue;
1098
- }
1099
-
1100
- let parsedMessage: unknown;
1101
- try {
1102
- parsedMessage = JSON.parse(line);
1103
- } catch {
1104
- throw new Error(`Malformed JSON line: ${line}`);
1105
- }
1106
-
1107
- if (typeof parsedMessage !== "object" || parsedMessage === null || Array.isArray(parsedMessage)) {
1108
- throw new Error(`Malformed JSON line: ${line}`);
1109
- }
1110
-
1111
- await this.sdkTransport.send(parsedMessage as SdkJsonRpcMessage);
1112
- }
1113
- }
1114
- }
1115
-
1116
- export async function createSdkTestPair<TClient extends McpClientConnection>(
1117
- server: SdkServerConnection,
1118
- createClient: () => TClient
1119
- ): Promise<SdkTestPair<TClient>> {
1120
- const { InMemoryTransport } = await import("@modelcontextprotocol/sdk/inMemory.js");
1121
- const [clientSdkTransport, serverSdkTransport] = InMemoryTransport.createLinkedPair();
1122
- const clientTransport = new SdkTransportAdapter(clientSdkTransport);
1123
- const serverPromise = server.connect(serverSdkTransport);
1124
- const client = createClient();
1125
-
1126
- try {
1127
- await client.connect(clientTransport);
1128
- } catch (error) {
1129
- clientTransport.dispose(new Error("SDK test pair setup failed"));
1130
- await clientSdkTransport.close();
1131
- await serverSdkTransport.close();
1132
- await serverPromise;
1133
- throw error;
1134
- }
1135
-
1136
- const cleanup = async (): Promise<void> => {
1137
- await client.close();
1138
- clientTransport.dispose(new Error("SDK test pair cleanup"));
1139
- await clientSdkTransport.close();
1140
- await serverSdkTransport.close();
1141
- await serverPromise;
1142
- };
1143
-
1144
- return { client, cleanup };
1145
- }
1146
-
1147
- export async function createMockEchoToolServer(): Promise<SdkServerConnection> {
1148
- const [{ Server }, { CallToolRequestSchema, ListToolsRequestSchema }] =
1149
- await Promise.all([
1150
- import("@modelcontextprotocol/sdk/server/index.js"),
1151
- import("@modelcontextprotocol/sdk/types.js"),
1152
- ]);
1153
-
1154
- const server = new Server(
1155
- { name: "mock-echo-tool-server", version: "1.0.0" },
1156
- { capabilities: { tools: {} } }
1157
- );
1158
- const echoTool = {
1159
- name: "echo",
1160
- description: "Echoes the provided message.",
1161
- inputSchema: {
1162
- type: "object" as const,
1163
- properties: {
1164
- message: {
1165
- type: "string",
1166
- },
1167
- },
1168
- required: ["message"],
1169
- },
1170
- };
1171
-
1172
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
1173
- tools: [echoTool],
1174
- }));
1175
-
1176
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
1177
- if (request.params.name !== "echo") {
1178
- throw new Error(`Unknown tool: ${request.params.name}`);
1179
- }
1180
-
1181
- const message = request.params.arguments?.message;
1182
- if (typeof message !== "string") {
1183
- throw new Error("Echo tool requires a string message argument");
1184
- }
1185
-
1186
- return {
1187
- content: [
1188
- {
1189
- type: "text" as const,
1190
- text: message,
1191
- },
1192
- ],
1193
- };
1194
- });
1195
-
1196
- return server;
1197
- }
1198
-
1199
- export async function createMockMultiToolServer(): Promise<SdkServerConnection> {
1200
- const [{ Server }, { CallToolRequestSchema, ListToolsRequestSchema }] =
1201
- await Promise.all([
1202
- import("@modelcontextprotocol/sdk/server/index.js"),
1203
- import("@modelcontextprotocol/sdk/types.js"),
1204
- ]);
1205
-
1206
- const server = new Server(
1207
- { name: "mock-multi-tool-server", version: "1.0.0" },
1208
- { capabilities: { tools: {} } }
1209
- );
1210
- const tools = [
1211
- {
1212
- name: "add",
1213
- description: "Adds two numbers and returns the sum as text.",
1214
- inputSchema: {
1215
- type: "object" as const,
1216
- properties: {
1217
- a: { type: "number" },
1218
- b: { type: "number" },
1219
- },
1220
- required: ["a", "b"],
1221
- },
1222
- },
1223
- {
1224
- name: "greet",
1225
- description: "Greets a user with optional formal tone.",
1226
- inputSchema: {
1227
- type: "object" as const,
1228
- properties: {
1229
- name: { type: "string" },
1230
- formal: { type: "boolean" },
1231
- },
1232
- required: ["name"],
1233
- },
1234
- },
1235
- {
1236
- name: "fail",
1237
- description: "Returns an intentional tool error payload.",
1238
- inputSchema: {
1239
- type: "object" as const,
1240
- properties: {},
1241
- },
1242
- },
1243
- ];
1244
-
1245
- server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools }));
1246
-
1247
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
1248
- if (request.params.name === "add") {
1249
- const a = request.params.arguments?.a;
1250
- const b = request.params.arguments?.b;
1251
-
1252
- if (typeof a !== "number" || typeof b !== "number") {
1253
- throw new Error("Add tool requires numeric a and b arguments");
1254
- }
1255
-
1256
- return {
1257
- content: [
1258
- {
1259
- type: "text" as const,
1260
- text: String(a + b),
1261
- },
1262
- ],
1263
- };
1264
- }
1265
-
1266
- if (request.params.name === "greet") {
1267
- const name = request.params.arguments?.name;
1268
- const formal = request.params.arguments?.formal;
1269
-
1270
- if (typeof name !== "string") {
1271
- throw new Error("Greet tool requires a string name argument");
1272
- }
1273
- if (formal !== undefined && typeof formal !== "boolean") {
1274
- throw new Error("Greet tool formal argument must be boolean when provided");
1275
- }
1276
-
1277
- return {
1278
- content: [
1279
- {
1280
- type: "text" as const,
1281
- text: formal ? `Good day, ${name}.` : `Hello, ${name}!`,
1282
- },
1283
- ],
1284
- };
1285
- }
1286
-
1287
- if (request.params.name === "fail") {
1288
- return {
1289
- isError: true,
1290
- content: [
1291
- {
1292
- type: "text" as const,
1293
- text: "Intentional tool failure.",
1294
- },
1295
- ],
1296
- };
1297
- }
1298
-
1299
- throw new Error(`Unknown tool: ${request.params.name}`);
1300
- });
1301
-
1302
- return server;
1303
- }
1304
-
1305
- export async function createMockPaginatedToolsServer(): Promise<SdkServerConnection> {
1306
- const [{ Server }, { ListToolsRequestSchema }] = await Promise.all([
1307
- import("@modelcontextprotocol/sdk/server/index.js"),
1308
- import("@modelcontextprotocol/sdk/types.js"),
1309
- ]);
1310
-
1311
- const server = new Server(
1312
- { name: "mock-paginated-tools-server", version: "1.0.0" },
1313
- { capabilities: { tools: {} } }
1314
- );
1315
- const pageSize = 5;
1316
- const tools = Array.from({ length: 20 }, (_, index) => ({
1317
- name: `tool-${index + 1}`,
1318
- description: `Mock paginated tool ${index + 1}.`,
1319
- inputSchema: {
1320
- type: "object" as const,
1321
- properties: {},
1322
- },
1323
- }));
1324
-
1325
- server.setRequestHandler(ListToolsRequestSchema, async (request) => {
1326
- const cursor = request.params?.cursor;
1327
- const startIndex = cursor === undefined ? 0 : Number(cursor);
1328
-
1329
- if (
1330
- !Number.isInteger(startIndex) ||
1331
- startIndex < 0 ||
1332
- startIndex > tools.length ||
1333
- startIndex % pageSize !== 0
1334
- ) {
1335
- throw new Error(`Invalid cursor: ${String(cursor)}`);
1336
- }
1337
-
1338
- const pageTools = tools.slice(startIndex, startIndex + pageSize);
1339
- const nextIndex = startIndex + pageSize;
1340
- if (nextIndex >= tools.length) {
1341
- return { tools: pageTools };
1342
- }
1343
-
1344
- return {
1345
- tools: pageTools,
1346
- nextCursor: String(nextIndex),
1347
- };
1348
- });
1349
-
1350
- return server;
1351
- }
1352
-
1353
- export async function createMockResourceServer(): Promise<SdkServerConnection> {
1354
- const [
1355
- { Server },
1356
- {
1357
- ListResourcesRequestSchema,
1358
- ListResourceTemplatesRequestSchema,
1359
- ReadResourceRequestSchema,
1360
- },
1361
- ] = await Promise.all([
1362
- import("@modelcontextprotocol/sdk/server/index.js"),
1363
- import("@modelcontextprotocol/sdk/types.js"),
1364
- ]);
1365
-
1366
- const server = new Server(
1367
- { name: "mock-resource-server", version: "1.0.0" },
1368
- { capabilities: { resources: {} } }
1369
- );
1370
- const resources = [
1371
- {
1372
- uri: "file:///readme.txt",
1373
- name: "readme.txt",
1374
- mimeType: "text/plain",
1375
- },
1376
- {
1377
- uri: "file:///image.png",
1378
- name: "image.png",
1379
- mimeType: "image/png",
1380
- },
1381
- ];
1382
- const resourceContentsByUri = new Map<string, ResourceContents>([
1383
- [
1384
- "file:///readme.txt",
1385
- {
1386
- uri: "file:///readme.txt",
1387
- mimeType: "text/plain",
1388
- text: "This is a mock README resource.",
1389
- },
1390
- ],
1391
- [
1392
- "file:///image.png",
1393
- {
1394
- uri: "file:///image.png",
1395
- mimeType: "image/png",
1396
- blob: "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8Xw8AAoMBgL9qj3QAAAAASUVORK5CYII=",
1397
- },
1398
- ],
1399
- ]);
1400
- const resourceTemplates = [
1401
- {
1402
- uriTemplate: "file:///{path}",
1403
- name: "file-template",
1404
- },
1405
- ];
1406
-
1407
- server.setRequestHandler(ListResourcesRequestSchema, async () => ({
1408
- resources,
1409
- }));
1410
-
1411
- server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
1412
- const resourceContent = resourceContentsByUri.get(request.params.uri);
1413
- if (resourceContent === undefined) {
1414
- throw new Error(`Unknown resource: ${request.params.uri}`);
1415
- }
1416
-
1417
- return {
1418
- contents: [resourceContent],
1419
- };
1420
- });
1421
-
1422
- server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => ({
1423
- resourceTemplates,
1424
- }));
1425
-
1426
- return server;
1427
- }
1428
-
1429
- export async function createMockSubscribableResourceServer(): Promise<
1430
- SdkServerConnection & {
1431
- triggerResourceUpdated: (uri: string, updatedText?: string) => Promise<void>;
1432
- triggerResourceListChanged: () => Promise<void>;
1433
- }
1434
- > {
1435
- const [
1436
- { Server },
1437
- {
1438
- ListResourcesRequestSchema,
1439
- ReadResourceRequestSchema,
1440
- SubscribeRequestSchema,
1441
- UnsubscribeRequestSchema,
1442
- },
1443
- ] =
1444
- await Promise.all([
1445
- import("@modelcontextprotocol/sdk/server/index.js"),
1446
- import("@modelcontextprotocol/sdk/types.js"),
1447
- ]);
1448
-
1449
- const server = new Server(
1450
- { name: "mock-subscribable-resource-server", version: "1.0.0" },
1451
- { capabilities: { resources: { subscribe: true, listChanged: true } } }
1452
- );
1453
- const resources = [
1454
- {
1455
- uri: "file:///readme.txt",
1456
- name: "readme.txt",
1457
- mimeType: "text/plain",
1458
- },
1459
- ];
1460
- const resourceContentsByUri = new Map<string, ResourceContents>([
1461
- [
1462
- "file:///readme.txt",
1463
- {
1464
- uri: "file:///readme.txt",
1465
- mimeType: "text/plain",
1466
- text: "Initial subscribable resource text.",
1467
- },
1468
- ],
1469
- ]);
1470
- const subscribedUris = new Set<string>();
1471
-
1472
- server.setRequestHandler(ListResourcesRequestSchema, async () => ({
1473
- resources,
1474
- }));
1475
-
1476
- server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
1477
- const resourceContent = resourceContentsByUri.get(request.params.uri);
1478
- if (resourceContent === undefined) {
1479
- throw new Error(`Unknown resource: ${request.params.uri}`);
1480
- }
1481
-
1482
- return {
1483
- contents: [resourceContent],
1484
- };
1485
- });
1486
-
1487
- server.setRequestHandler(SubscribeRequestSchema, async (request) => {
1488
- subscribedUris.add(request.params.uri);
1489
- return {};
1490
- });
1491
-
1492
- server.setRequestHandler(UnsubscribeRequestSchema, async (request) => {
1493
- subscribedUris.delete(request.params.uri);
1494
- return {};
1495
- });
1496
-
1497
- return Object.assign(server, {
1498
- triggerResourceUpdated: async (uri: string, updatedText?: string): Promise<void> => {
1499
- if (updatedText !== undefined) {
1500
- const existingContent = resourceContentsByUri.get(uri);
1501
- if (existingContent === undefined || "blob" in existingContent) {
1502
- throw new Error(`Unknown text resource: ${uri}`);
1503
- }
1504
-
1505
- resourceContentsByUri.set(uri, {
1506
- uri,
1507
- mimeType: existingContent.mimeType,
1508
- text: updatedText,
1509
- });
1510
- }
1511
-
1512
- if (!subscribedUris.has(uri)) {
1513
- return;
1514
- }
1515
-
1516
- await server.sendResourceUpdated({ uri });
1517
- },
1518
- triggerResourceListChanged: async (): Promise<void> => {
1519
- await server.sendResourceListChanged();
1520
- },
1521
- });
1522
- }
1523
-
1524
- export async function createMockPromptServer(): Promise<SdkServerConnection> {
1525
- const [
1526
- { Server },
1527
- { ErrorCode, GetPromptRequestSchema, ListPromptsRequestSchema, McpError: SdkMcpError },
1528
- ] =
1529
- await Promise.all([
1530
- import("@modelcontextprotocol/sdk/server/index.js"),
1531
- import("@modelcontextprotocol/sdk/types.js"),
1532
- ]);
1533
-
1534
- const server = new Server(
1535
- { name: "mock-prompt-server", version: "1.0.0" },
1536
- { capabilities: { prompts: {} } }
1537
- );
1538
- const promptTemplates = [
1539
- {
1540
- prompt: {
1541
- name: "code_review",
1542
- description: "Review code for correctness and maintainability.",
1543
- arguments: [
1544
- {
1545
- name: "code",
1546
- description: "Code to review.",
1547
- required: true,
1548
- },
1549
- ],
1550
- },
1551
- messages: [
1552
- {
1553
- role: "user" as const,
1554
- textTemplate: "Please review the following code:\n{{code}}",
1555
- },
1556
- {
1557
- role: "assistant" as const,
1558
- textTemplate: "I will review the code for potential issues and improvements.",
1559
- },
1560
- ],
1561
- },
1562
- {
1563
- prompt: {
1564
- name: "summarize",
1565
- description: "Summarize the provided text.",
1566
- },
1567
- messages: [
1568
- {
1569
- role: "user" as const,
1570
- textTemplate: "Please summarize the provided text.",
1571
- },
1572
- ],
1573
- },
1574
- ];
1575
- const promptsByName = new Map(promptTemplates.map((template) => [template.prompt.name, template]));
1576
-
1577
- const renderPromptMessage = (
1578
- textTemplate: string,
1579
- argumentsMap: Record<string, unknown> | undefined
1580
- ): string => {
1581
- if (argumentsMap === undefined) {
1582
- return textTemplate;
1583
- }
1584
-
1585
- let renderedText = textTemplate;
1586
- for (const [name, value] of Object.entries(argumentsMap)) {
1587
- if (typeof value !== "string") {
1588
- continue;
1589
- }
1590
-
1591
- renderedText = renderedText.split(`{{${name}}}`).join(value);
1592
- }
1593
-
1594
- return renderedText;
1595
- };
1596
-
1597
- server.setRequestHandler(ListPromptsRequestSchema, async () => ({
1598
- prompts: promptTemplates.map((template) => template.prompt),
1599
- }));
1600
-
1601
- server.setRequestHandler(GetPromptRequestSchema, async (request) => {
1602
- const template = promptsByName.get(request.params.name);
1603
- if (template === undefined) {
1604
- throw new SdkMcpError(ErrorCode.InvalidParams, `Unknown prompt: ${request.params.name}`);
1605
- }
1606
-
1607
- const requestArguments = request.params.arguments;
1608
- for (const argument of template.prompt.arguments ?? []) {
1609
- if (!argument.required) {
1610
- continue;
1611
- }
1612
-
1613
- const value = requestArguments?.[argument.name];
1614
- if (typeof value !== "string") {
1615
- throw new SdkMcpError(
1616
- ErrorCode.InvalidParams,
1617
- `Missing required prompt argument: ${argument.name}`
1618
- );
1619
- }
1620
- }
1621
-
1622
- return {
1623
- description: template.prompt.description,
1624
- messages: template.messages.map((message) => ({
1625
- role: message.role,
1626
- content: {
1627
- type: "text" as const,
1628
- text: renderPromptMessage(message.textTemplate, requestArguments),
1629
- },
1630
- })),
1631
- };
1632
- });
1633
-
1634
- return server;
1635
- }
1636
-
1637
- export async function createMockCompletionServer(): Promise<SdkServerConnection> {
1638
- const [{ Server }, { CompleteRequestSchema }] = await Promise.all([
1639
- import("@modelcontextprotocol/sdk/server/index.js"),
1640
- import("@modelcontextprotocol/sdk/types.js"),
1641
- ]);
1642
-
1643
- const server = new Server(
1644
- { name: "mock-completion-server", version: "1.0.0" },
1645
- { capabilities: { completions: {} } }
1646
- );
1647
- const promptArgumentCompletions = new Map<string, string[]>([
1648
- ["code_review:language", ["python", "pydantic", "pytest", "pytorch", "pyright", "rust"]],
1649
- ]);
1650
- const maxValues = 3;
1651
-
1652
- server.setRequestHandler(CompleteRequestSchema, async (request) => {
1653
- if (request.params.ref.type !== "ref/prompt") {
1654
- return {
1655
- completion: {
1656
- values: [],
1657
- },
1658
- };
1659
- }
1660
-
1661
- const completionKey = `${request.params.ref.name}:${request.params.argument.name}`;
1662
- const candidates = promptArgumentCompletions.get(completionKey) ?? [];
1663
- const partialValue = request.params.argument.value.toLowerCase();
1664
- const matchingValues = candidates.filter((candidate) =>
1665
- candidate.toLowerCase().startsWith(partialValue)
1666
- );
1667
- const values = matchingValues.slice(0, maxValues);
1668
-
1669
- if (values.length < matchingValues.length) {
1670
- return {
1671
- completion: {
1672
- values,
1673
- hasMore: true,
1674
- total: matchingValues.length,
1675
- },
1676
- };
1677
- }
1678
-
1679
- return {
1680
- completion: {
1681
- values,
1682
- },
1683
- };
1684
- });
1685
-
1686
- return server;
1687
- }
1688
-
1689
- export async function createMockProgressServer(): Promise<SdkServerConnection> {
1690
- const [{ Server }, { CallToolRequestSchema, ListToolsRequestSchema }] =
1691
- await Promise.all([
1692
- import("@modelcontextprotocol/sdk/server/index.js"),
1693
- import("@modelcontextprotocol/sdk/types.js"),
1694
- ]);
1695
-
1696
- const server = new Server(
1697
- { name: "mock-progress-server", version: "1.0.0" },
1698
- { capabilities: { tools: {} } }
1699
- );
1700
- const totalSteps = 4;
1701
- const tool = {
1702
- name: "slow_task",
1703
- description: "Runs a simulated slow task and streams progress updates.",
1704
- inputSchema: {
1705
- type: "object" as const,
1706
- properties: {},
1707
- additionalProperties: false,
1708
- },
1709
- };
1710
-
1711
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
1712
- tools: [tool],
1713
- }));
1714
-
1715
- server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
1716
- if (request.params.name !== "slow_task") {
1717
- throw new Error(`Unknown tool: ${request.params.name}`);
1718
- }
1719
-
1720
- const progressToken = request.params._meta?.progressToken;
1721
- if (progressToken !== undefined) {
1722
- for (let step = 1; step <= totalSteps; step += 1) {
1723
- await extra.sendNotification({
1724
- method: "notifications/progress",
1725
- params: {
1726
- progressToken,
1727
- progress: step,
1728
- total: totalSteps,
1729
- message: `Completed step ${step} of ${totalSteps}`,
1730
- },
1731
- });
1732
-
1733
- await new Promise<void>((resolve) => {
1734
- setTimeout(resolve, 5);
1735
- });
1736
- }
1737
- }
1738
-
1739
- return {
1740
- content: [
1741
- {
1742
- type: "text" as const,
1743
- text: "slow_task complete",
1744
- },
1745
- ],
1746
- };
1747
- });
1748
-
1749
- return server;
1750
- }
1751
-
1752
- export interface MockSlowToolServerOptions {
1753
- delayMs?: number;
1754
- pollIntervalMs?: number;
1755
- }
1756
-
1757
- export async function createMockSlowToolServer(
1758
- options: MockSlowToolServerOptions = {}
1759
- ): Promise<
1760
- SdkServerConnection & {
1761
- wasStarted: () => boolean;
1762
- getStartedRequestIds: () => RequestId[];
1763
- wasCancelled: () => boolean;
1764
- getCancelledRequestIds: () => RequestId[];
1765
- }
1766
- > {
1767
- const [{ Server }, { CallToolRequestSchema, ListToolsRequestSchema }] =
1768
- await Promise.all([
1769
- import("@modelcontextprotocol/sdk/server/index.js"),
1770
- import("@modelcontextprotocol/sdk/types.js"),
1771
- ]);
1772
-
1773
- const defaultDelayMs = options.delayMs ?? 1_000;
1774
- const pollIntervalMs = options.pollIntervalMs ?? 10;
1775
- if (!Number.isFinite(defaultDelayMs) || defaultDelayMs < 0) {
1776
- throw new Error("createMockSlowToolServer delayMs must be a finite non-negative number");
1777
- }
1778
- if (!Number.isFinite(pollIntervalMs) || pollIntervalMs <= 0) {
1779
- throw new Error("createMockSlowToolServer pollIntervalMs must be a finite positive number");
1780
- }
1781
-
1782
- const server = new Server(
1783
- { name: "mock-slow-tool-server", version: "1.0.0" },
1784
- { capabilities: { tools: {} } }
1785
- );
1786
- const startedRequestIds = new Set<RequestId>();
1787
- const cancelledRequestIds = new Set<RequestId>();
1788
- const tool = {
1789
- name: "slow",
1790
- description: "Delays the response and supports cancellation.",
1791
- inputSchema: {
1792
- type: "object" as const,
1793
- properties: {
1794
- delayMs: {
1795
- type: "number",
1796
- },
1797
- },
1798
- additionalProperties: false,
1799
- },
1800
- };
1801
-
1802
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
1803
- tools: [tool],
1804
- }));
1805
-
1806
- server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
1807
- if (request.params.name !== "slow") {
1808
- throw new Error(`Unknown tool: ${request.params.name}`);
1809
- }
1810
- startedRequestIds.add(extra.requestId);
1811
-
1812
- const delayArgument = request.params.arguments?.delayMs;
1813
- const delayMs =
1814
- delayArgument === undefined
1815
- ? defaultDelayMs
1816
- : typeof delayArgument === "number" && Number.isFinite(delayArgument) && delayArgument >= 0
1817
- ? delayArgument
1818
- : NaN;
1819
- if (!Number.isFinite(delayMs)) {
1820
- throw new Error("slow tool delayMs argument must be a finite non-negative number");
1821
- }
1822
-
1823
- const startedAt = Date.now();
1824
- while (Date.now() - startedAt < delayMs) {
1825
- if (extra.signal.aborted) {
1826
- cancelledRequestIds.add(extra.requestId);
1827
- throw new Error("slow tool cancelled");
1828
- }
1829
-
1830
- const elapsedMs = Date.now() - startedAt;
1831
- const remainingMs = delayMs - elapsedMs;
1832
- await new Promise<void>((resolve) => {
1833
- setTimeout(resolve, Math.max(0, Math.min(pollIntervalMs, remainingMs)));
1834
- });
1835
- }
1836
-
1837
- if (extra.signal.aborted) {
1838
- cancelledRequestIds.add(extra.requestId);
1839
- throw new Error("slow tool cancelled");
1840
- }
1841
-
1842
- return {
1843
- content: [
1844
- {
1845
- type: "text" as const,
1846
- text: `slow complete after ${delayMs}ms`,
1847
- },
1848
- ],
1849
- };
1850
- });
1851
-
1852
- return Object.assign(server, {
1853
- wasStarted: (): boolean => startedRequestIds.size > 0,
1854
- getStartedRequestIds: (): RequestId[] => Array.from(startedRequestIds),
1855
- wasCancelled: (): boolean => cancelledRequestIds.size > 0,
1856
- getCancelledRequestIds: (): RequestId[] => Array.from(cancelledRequestIds),
1857
- });
1858
- }
1859
-
1860
- export async function createMockErrorServer(): Promise<SdkServerConnection> {
1861
- const [
1862
- { Server },
1863
- { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError: SdkMcpError },
1864
- ] = await Promise.all([
1865
- import("@modelcontextprotocol/sdk/server/index.js"),
1866
- import("@modelcontextprotocol/sdk/types.js"),
1867
- ]);
1868
-
1869
- const server = new Server(
1870
- { name: "mock-error-server", version: "1.0.0" },
1871
- { capabilities: { tools: {} } }
1872
- );
1873
- const tools = [
1874
- {
1875
- name: "invalid_params",
1876
- description: "Returns a JSON-RPC Invalid Params error.",
1877
- inputSchema: {
1878
- type: "object" as const,
1879
- properties: {},
1880
- additionalProperties: false,
1881
- },
1882
- },
1883
- {
1884
- name: "is_error",
1885
- description: "Returns a tools/call result with isError: true.",
1886
- inputSchema: {
1887
- type: "object" as const,
1888
- properties: {},
1889
- additionalProperties: false,
1890
- },
1891
- },
1892
- {
1893
- name: "internal_error",
1894
- description: "Throws an internal server error.",
1895
- inputSchema: {
1896
- type: "object" as const,
1897
- properties: {},
1898
- additionalProperties: false,
1899
- },
1900
- },
1901
- ];
1902
-
1903
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
1904
- tools,
1905
- }));
1906
-
1907
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
1908
- if (request.params.name === "invalid_params") {
1909
- throw new SdkMcpError(
1910
- ErrorCode.InvalidParams,
1911
- "Intentional invalid params error from mock-error-server."
1912
- );
1913
- }
1914
-
1915
- if (request.params.name === "is_error") {
1916
- return {
1917
- isError: true,
1918
- content: [
1919
- {
1920
- type: "text" as const,
1921
- text: "Intentional isError tool failure.",
1922
- },
1923
- ],
1924
- };
1925
- }
1926
-
1927
- if (request.params.name === "internal_error") {
1928
- throw new Error("Intentional internal error from mock-error-server.");
1929
- }
1930
-
1931
- throw new Error(`Unknown tool: ${request.params.name}`);
1932
- });
1933
-
1934
- return server;
1935
- }
1936
-
1937
- export async function createMockSamplingServer(): Promise<SdkServerConnection> {
1938
- const [{ Server }, { CallToolRequestSchema, ListToolsRequestSchema }] =
1939
- await Promise.all([
1940
- import("@modelcontextprotocol/sdk/server/index.js"),
1941
- import("@modelcontextprotocol/sdk/types.js"),
1942
- ]);
1943
-
1944
- const server = new Server(
1945
- { name: "mock-sampling-server", version: "1.0.0" },
1946
- { capabilities: { tools: {} } }
1947
- );
1948
- const tool = {
1949
- name: "sample_message",
1950
- description: "Requests sampling/createMessage from the client and returns the sampled text.",
1951
- inputSchema: {
1952
- type: "object" as const,
1953
- properties: {
1954
- topic: {
1955
- type: "string",
1956
- },
1957
- },
1958
- required: ["topic"],
1959
- additionalProperties: false,
1960
- },
1961
- };
1962
-
1963
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
1964
- tools: [tool],
1965
- }));
1966
-
1967
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
1968
- if (request.params.name !== "sample_message") {
1969
- throw new Error(`Unknown tool: ${request.params.name}`);
1970
- }
1971
-
1972
- const topic = request.params.arguments?.topic;
1973
- if (typeof topic !== "string") {
1974
- throw new Error("sample_message requires a string topic argument");
1975
- }
1976
-
1977
- const samplingResult = await server.createMessage({
1978
- messages: [
1979
- {
1980
- role: "user",
1981
- content: {
1982
- type: "text",
1983
- text: `Provide a concise sentence about ${topic}.`,
1984
- },
1985
- },
1986
- ],
1987
- maxTokens: 64,
1988
- modelPreferences: {
1989
- hints: [{ name: "mock-sampling-model" }],
1990
- speedPriority: 0.2,
1991
- intelligencePriority: 0.9,
1992
- },
1993
- systemPrompt: "Return exactly one concise sentence.",
1994
- });
1995
-
1996
- const sampledText =
1997
- samplingResult.content.type === "text"
1998
- ? samplingResult.content.text
1999
- : JSON.stringify(samplingResult.content);
2000
-
2001
- return {
2002
- content: [
2003
- {
2004
- type: "text" as const,
2005
- text: `Sampled response: ${sampledText}`,
2006
- },
2007
- ],
2008
- };
2009
- });
2010
-
2011
- return server;
2012
- }
2013
-
2014
- export async function createMockRootsServer(): Promise<SdkServerConnection> {
2015
- const [
2016
- { Server },
2017
- {
2018
- CallToolRequestSchema,
2019
- ListToolsRequestSchema,
2020
- RootsListChangedNotificationSchema,
2021
- },
2022
- ] =
2023
- await Promise.all([
2024
- import("@modelcontextprotocol/sdk/server/index.js"),
2025
- import("@modelcontextprotocol/sdk/types.js"),
2026
- ]);
2027
-
2028
- const server = new Server(
2029
- { name: "mock-roots-server", version: "1.0.0" },
2030
- { capabilities: { tools: {} } }
2031
- );
2032
- const tool = {
2033
- name: "roots_summary",
2034
- description: "Requests roots/list from the client and returns a summary of roots.",
2035
- inputSchema: {
2036
- type: "object" as const,
2037
- properties: {},
2038
- additionalProperties: false,
2039
- },
2040
- };
2041
-
2042
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
2043
- tools: [tool],
2044
- }));
2045
-
2046
- server.setNotificationHandler(RootsListChangedNotificationSchema, async () => {
2047
- await server.listRoots();
2048
- });
2049
-
2050
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
2051
- if (request.params.name !== "roots_summary") {
2052
- throw new Error(`Unknown tool: ${request.params.name}`);
2053
- }
2054
-
2055
- const rootsResult = await server.listRoots();
2056
- const rootSummary = rootsResult.roots
2057
- .map((root) => (root.name === undefined ? root.uri : `${root.name} (${root.uri})`))
2058
- .join(", ");
2059
-
2060
- return {
2061
- content: [
2062
- {
2063
- type: "text" as const,
2064
- text: rootSummary.length === 0 ? "Roots: none" : `Roots: ${rootSummary}`,
2065
- },
2066
- ],
2067
- };
2068
- });
2069
-
2070
- return server;
2071
- }
2072
-
2073
- export async function createMockLoggingServer(): Promise<SdkServerConnection> {
2074
- const [{ Server }, { CallToolRequestSchema, ListToolsRequestSchema }] =
2075
- await Promise.all([
2076
- import("@modelcontextprotocol/sdk/server/index.js"),
2077
- import("@modelcontextprotocol/sdk/types.js"),
2078
- ]);
2079
-
2080
- const server = new Server(
2081
- { name: "mock-logging-server", version: "1.0.0" },
2082
- { capabilities: { tools: {}, logging: {} } }
2083
- );
2084
- const tool = {
2085
- name: "emit_logs",
2086
- description: "Emits mock log messages at multiple levels.",
2087
- inputSchema: {
2088
- type: "object" as const,
2089
- properties: {},
2090
- additionalProperties: false,
2091
- },
2092
- };
2093
-
2094
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
2095
- tools: [tool],
2096
- }));
2097
-
2098
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
2099
- if (request.params.name !== "emit_logs") {
2100
- throw new Error(`Unknown tool: ${request.params.name}`);
2101
- }
2102
-
2103
- await server.sendLoggingMessage({
2104
- level: "debug",
2105
- logger: "mock-logging-server",
2106
- data: { message: "Debug message" },
2107
- });
2108
- await server.sendLoggingMessage({
2109
- level: "info",
2110
- logger: "mock-logging-server",
2111
- data: { message: "Info message" },
2112
- });
2113
- await server.sendLoggingMessage({
2114
- level: "error",
2115
- logger: "mock-logging-server",
2116
- data: { message: "Error message" },
2117
- });
2118
-
2119
- return {
2120
- content: [
2121
- {
2122
- type: "text" as const,
2123
- text: "Emitted log messages.",
2124
- },
2125
- ],
2126
- };
2127
- });
2128
-
2129
- return server;
2130
- }
2131
-
2132
- export async function createMockFullFeaturedServer(): Promise<SdkServerConnection> {
2133
- const [
2134
- { Server },
2135
- {
2136
- CallToolRequestSchema,
2137
- CompleteRequestSchema,
2138
- GetPromptRequestSchema,
2139
- ListPromptsRequestSchema,
2140
- ListResourcesRequestSchema,
2141
- ListToolsRequestSchema,
2142
- ReadResourceRequestSchema,
2143
- },
2144
- ] = await Promise.all([
2145
- import("@modelcontextprotocol/sdk/server/index.js"),
2146
- import("@modelcontextprotocol/sdk/types.js"),
2147
- ]);
2148
-
2149
- const server = new Server(
2150
- { name: "mock-full-featured-server", version: "1.0.0" },
2151
- {
2152
- capabilities: {
2153
- tools: {},
2154
- resources: {},
2155
- prompts: {},
2156
- logging: {},
2157
- completions: {},
2158
- },
2159
- }
2160
- );
2161
- const tool = {
2162
- name: "full_featured_ping",
2163
- description: "Returns a text response and emits an info log.",
2164
- inputSchema: {
2165
- type: "object" as const,
2166
- properties: {},
2167
- additionalProperties: false,
2168
- },
2169
- };
2170
- const resources = [
2171
- {
2172
- uri: "file:///full-featured.txt",
2173
- name: "full-featured.txt",
2174
- mimeType: "text/plain",
2175
- },
2176
- ];
2177
- const prompts = [
2178
- {
2179
- name: "full_featured_prompt",
2180
- description: "Returns a short prompt message for a topic.",
2181
- arguments: [
2182
- {
2183
- name: "topic",
2184
- description: "Topic to include in the prompt output.",
2185
- required: false,
2186
- },
2187
- ],
2188
- },
2189
- ];
2190
- const completionValues = ["alpha", "beta", "gamma"];
2191
-
2192
- server.setRequestHandler(ListToolsRequestSchema, async () => ({
2193
- tools: [tool],
2194
- }));
2195
-
2196
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
2197
- if (request.params.name !== "full_featured_ping") {
2198
- throw new Error(`Unknown tool: ${request.params.name}`);
2199
- }
2200
-
2201
- await server.sendLoggingMessage({
2202
- level: "info",
2203
- logger: "mock-full-featured-server",
2204
- data: {
2205
- message: "full_featured_ping called",
2206
- },
2207
- });
2208
-
2209
- return {
2210
- content: [
2211
- {
2212
- type: "text" as const,
2213
- text: "full_featured_ping ok",
2214
- },
2215
- ],
2216
- };
2217
- });
2218
-
2219
- server.setRequestHandler(ListResourcesRequestSchema, async () => ({
2220
- resources,
2221
- }));
2222
-
2223
- server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
2224
- if (request.params.uri !== "file:///full-featured.txt") {
2225
- throw new Error(`Unknown resource: ${request.params.uri}`);
2226
- }
2227
-
2228
- return {
2229
- contents: [
2230
- {
2231
- uri: "file:///full-featured.txt",
2232
- mimeType: "text/plain",
2233
- text: "Mock full-featured resource",
2234
- },
2235
- ],
2236
- };
2237
- });
2238
-
2239
- server.setRequestHandler(ListPromptsRequestSchema, async () => ({
2240
- prompts,
2241
- }));
2242
-
2243
- server.setRequestHandler(GetPromptRequestSchema, async (request) => {
2244
- if (request.params.name !== "full_featured_prompt") {
2245
- throw new Error(`Unknown prompt: ${request.params.name}`);
2246
- }
2247
-
2248
- const topic = request.params.arguments?.topic;
2249
- const topicText = typeof topic === "string" && topic.length > 0 ? topic : "general";
2250
-
2251
- return {
2252
- description: "Mock prompt from full-featured server.",
2253
- messages: [
2254
- {
2255
- role: "user" as const,
2256
- content: {
2257
- type: "text" as const,
2258
- text: `Provide a short summary for ${topicText}.`,
2259
- },
2260
- },
2261
- ],
2262
- };
2263
- });
2264
-
2265
- server.setRequestHandler(CompleteRequestSchema, async (request) => {
2266
- if (
2267
- request.params.ref.type !== "ref/prompt" ||
2268
- request.params.ref.name !== "full_featured_prompt" ||
2269
- request.params.argument.name !== "topic"
2270
- ) {
2271
- return {
2272
- completion: {
2273
- values: [],
2274
- },
2275
- };
2276
- }
2277
-
2278
- const partialValue = request.params.argument.value.toLowerCase();
2279
- const values = completionValues.filter((value) => value.startsWith(partialValue));
2280
-
2281
- return {
2282
- completion: {
2283
- values,
2284
- },
2285
- };
2286
- });
2287
-
2288
- return server;
2289
- }
2290
-
2291
- export async function createTestPair<TClient extends McpClientConnection>(
2292
- server: TinyStdioMcpServer,
2293
- createClient: () => TClient
2294
- ): Promise<SdkTestPair<TClient>> {
2295
- const { clientTransport, serverTransport } = createInMemoryTransportPair();
2296
- const serverPromise = server.connect(serverTransport);
2297
- const client = createClient();
2298
-
2299
- try {
2300
- await client.connect(clientTransport);
2301
- } catch (error) {
2302
- clientTransport.dispose(new Error("tiny-stdio-mcp-server test pair setup failed"));
2303
- await serverPromise;
2304
- throw error;
2305
- }
2306
-
2307
- const cleanup = async (): Promise<void> => {
2308
- await client.close();
2309
- clientTransport.dispose(new Error("tiny-stdio-mcp-server test pair cleanup"));
2310
- await serverPromise;
2311
- };
2312
-
2313
- return { client, cleanup };
2314
- }
2315
-
2316
- export type StdioSpawn = (
2317
- command: string,
2318
- args: ReadonlyArray<string>,
2319
- options: SpawnOptions
2320
- ) => ChildProcessWithoutNullStreams;
2321
-
2322
- export interface StdioTransportOptions {
2323
- command: string;
2324
- args?: string[];
2325
- cwd?: string;
2326
- env?: NodeJS.ProcessEnv;
2327
- spawn?: StdioSpawn;
2328
- }
2329
-
2330
- export type HttpTransportFetch = (
2331
- input: string | URL,
2332
- init?: RequestInit
2333
- ) => Promise<Response>;
2334
-
2335
- export interface HttpTransportOptions {
2336
- url: string;
2337
- headers?: HeadersInit;
2338
- fetch?: HttpTransportFetch;
2339
- oauth?: OAuthClientProviderOptions;
2340
- oauthDiscoveryCache?: OAuthDiscoveryCache;
2341
- }
2342
-
2343
- function defaultStdioSpawn(
2344
- command: string,
2345
- args: ReadonlyArray<string>,
2346
- options: SpawnOptions
2347
- ): ChildProcessWithoutNullStreams {
2348
- return spawn(command, args, options) as ChildProcessWithoutNullStreams;
2349
- }
2350
-
2351
- function defaultHttpTransportFetch(input: string | URL, init?: RequestInit): Promise<Response> {
2352
- return fetch(input, init);
2353
- }
2354
-
2355
- export class StdioTransport implements McpTransport {
2356
- readonly readable: Readable;
2357
- readonly writable: Writable;
2358
- readonly closed: Promise<McpTransportClosedEvent>;
2359
- private readonly child: ChildProcessWithoutNullStreams;
2360
- private disposed = false;
2361
- private stderrOutput = "";
2362
- private static readonly STDERR_MAX_LENGTH = 65_536;
2363
-
2364
- constructor({
2365
- command,
2366
- args = [],
2367
- cwd,
2368
- env,
2369
- spawn: spawnProcess = defaultStdioSpawn,
2370
- }: StdioTransportOptions) {
2371
- this.child = spawnProcess(command, args, {
2372
- cwd,
2373
- env,
2374
- stdio: ["pipe", "pipe", "pipe"],
2375
- });
2376
-
2377
- const child = this.child;
2378
-
2379
- this.readable = child.stdout;
2380
- this.writable = child.stdin;
2381
- const stderrDecoder = new TextDecoder();
2382
- child.stderr.on("data", (chunk: unknown) => {
2383
- const decoded =
2384
- chunk instanceof Uint8Array
2385
- ? stderrDecoder.decode(chunk, { stream: true })
2386
- : `${stderrDecoder.decode()}${String(chunk)}`;
2387
- this.appendStderrOutput(decoded);
2388
- });
2389
- child.stderr.once("end", () => {
2390
- this.appendStderrOutput(stderrDecoder.decode());
2391
- });
2392
- this.closed = new Promise((resolve) => {
2393
- let settled = false;
2394
- const resolveClosed = (event: McpTransportClosedEvent) => {
2395
- if (settled) {
2396
- return;
2397
- }
2398
-
2399
- settled = true;
2400
- resolve(event);
2401
- };
2402
-
2403
- child.once("exit", (code, signal) => {
2404
- const closedEvent: McpTransportClosedEvent = {
2405
- reason: new Error("Stdio transport process exited"),
2406
- };
2407
-
2408
- if (code !== null) {
2409
- closedEvent.code = code;
2410
- }
2411
-
2412
- if (signal !== null) {
2413
- closedEvent.signal = signal;
2414
- }
2415
-
2416
- resolveClosed(closedEvent);
2417
- });
2418
-
2419
- child.once("error", (error) => {
2420
- const closedEvent: McpTransportClosedEvent = {
2421
- reason: error instanceof Error ? error : new Error(String(error)),
2422
- };
2423
-
2424
- if (child.exitCode !== null) {
2425
- closedEvent.code = child.exitCode;
2426
- }
2427
-
2428
- if (child.signalCode !== null) {
2429
- closedEvent.signal = child.signalCode;
2430
- }
2431
-
2432
- resolveClosed(closedEvent);
2433
- });
2434
- });
2435
- }
2436
-
2437
- getStderrOutput(): string {
2438
- return this.stderrOutput;
2439
- }
2440
-
2441
- private appendStderrOutput(chunk: string): void {
2442
- if (chunk.length === 0) {
2443
- return;
2444
- }
2445
-
2446
- this.stderrOutput += chunk;
2447
- if (this.stderrOutput.length > StdioTransport.STDERR_MAX_LENGTH) {
2448
- this.stderrOutput = this.stderrOutput.slice(-StdioTransport.STDERR_MAX_LENGTH);
2449
- }
2450
- }
2451
-
2452
- dispose(reason = new Error("Stdio transport disposed")): void {
2453
- void reason;
2454
-
2455
- if (this.disposed) {
2456
- return;
2457
- }
2458
-
2459
- this.disposed = true;
2460
-
2461
- if (!this.child.stdin.destroyed && !this.child.stdin.writableEnded) {
2462
- this.child.stdin.end();
2463
- }
2464
-
2465
- if (this.child.exitCode === null && this.child.signalCode === null && !this.child.killed) {
2466
- this.child.kill("SIGTERM");
2467
- }
2468
- }
2469
- }
2470
-
2471
- export class HttpTransport implements McpTransport {
2472
- readonly readable: Readable;
2473
- readonly writable: Writable;
2474
- readonly closed: Promise<McpTransportClosedEvent>;
2475
- private readonly url: string;
2476
- private readonly headers: HeadersInit;
2477
- private readonly fetchImpl: HttpTransportFetch;
2478
- private readonly readStream = new PassThrough();
2479
- private readonly writeStream = new PassThrough();
2480
- private resolveClosed:
2481
- | ((closedEvent: McpTransportClosedEvent) => void)
2482
- | undefined;
2483
- private sessionId: string | undefined;
2484
- private lastEventId: string | undefined;
2485
- private getSseStreamStarted = false;
2486
- private disposed = false;
2487
- private readonly oauthProvider: OAuthClientProvider | undefined;
2488
- private readonly oauthMetadataDiscovery: OAuthMetadataDiscovery | undefined;
2489
- private readonly inFlightFetchAbortControllers = new Set<AbortController>();
2490
- private readonly openSseReaders = new Set<ReadableStreamDefaultReader<Uint8Array>>();
2491
-
2492
- constructor({
2493
- url,
2494
- headers = {},
2495
- fetch: fetchImpl = defaultHttpTransportFetch,
2496
- oauth,
2497
- oauthDiscoveryCache,
2498
- }: HttpTransportOptions) {
2499
- this.url = url;
2500
- this.headers = headers;
2501
- this.fetchImpl = fetchImpl;
2502
- this.oauthProvider = oauth === undefined
2503
- ? undefined
2504
- : createOAuthClientProvider(oauth);
2505
- this.oauthMetadataDiscovery = oauth === undefined
2506
- ? undefined
2507
- : new OAuthMetadataDiscovery({
2508
- fetch: (input, init) => this.fetchWithAbort(input, init ?? {}),
2509
- cache: oauthDiscoveryCache,
2510
- });
2511
- this.readable = this.readStream;
2512
- this.writable = this.writeStream;
2513
- this.closed = new Promise((resolve) => {
2514
- this.resolveClosed = resolve;
2515
- });
2516
-
2517
- this.readStream.once("error", (error) => {
2518
- this.dispose(error instanceof Error ? error : new Error(String(error)));
2519
- });
2520
- this.writeStream.once("error", (error) => {
2521
- this.dispose(error instanceof Error ? error : new Error(String(error)));
2522
- });
2523
-
2524
- this.consumeWrittenLines().catch((error) => {
2525
- this.dispose(error instanceof Error ? error : new Error(String(error)));
2526
- });
2527
- }
2528
-
2529
- dispose(reason = new Error("HTTP transport disposed")): void {
2530
- if (this.disposed) {
2531
- return;
2532
- }
2533
-
2534
- this.disposed = true;
2535
- this.abortInFlightFetches();
2536
- this.cancelOpenSseReaders();
2537
-
2538
- if (!this.writeStream.destroyed && !this.writeStream.writableEnded) {
2539
- this.writeStream.end();
2540
- }
2541
-
2542
- if (!this.readStream.destroyed && !this.readStream.writableEnded) {
2543
- this.readStream.end();
2544
- }
2545
-
2546
- void this.closeWithSessionTermination(reason);
2547
- }
2548
-
2549
- private async closeWithSessionTermination(reason: Error): Promise<void> {
2550
- let closeReason = reason;
2551
- if (this.sessionId !== undefined) {
2552
- const sessionId = this.sessionId;
2553
- this.sessionId = undefined;
2554
- try {
2555
- await this.sendSessionTerminationRequest(sessionId);
2556
- } catch (error) {
2557
- closeReason = error instanceof Error ? error : new Error(String(error));
2558
- }
2559
- }
2560
-
2561
- const resolveClosed = this.resolveClosed;
2562
- this.resolveClosed = undefined;
2563
- resolveClosed?.({ reason: closeReason });
2564
- }
2565
-
2566
- private abortInFlightFetches(): void {
2567
- for (const abortController of this.inFlightFetchAbortControllers) {
2568
- abortController.abort();
2569
- }
2570
-
2571
- this.inFlightFetchAbortControllers.clear();
2572
- }
2573
-
2574
- private cancelOpenSseReaders(): void {
2575
- for (const reader of this.openSseReaders) {
2576
- void reader.cancel().catch(() => undefined);
2577
- }
2578
-
2579
- this.openSseReaders.clear();
2580
- }
2581
-
2582
- private async fetchWithAbort(input: string | URL, init: RequestInit): Promise<Response> {
2583
- const abortController = new AbortController();
2584
- this.inFlightFetchAbortControllers.add(abortController);
2585
-
2586
- try {
2587
- return await this.fetchImpl(input, {
2588
- ...init,
2589
- signal: abortController.signal,
2590
- });
2591
- } finally {
2592
- this.inFlightFetchAbortControllers.delete(abortController);
2593
- }
2594
- }
2595
-
2596
- private async consumeWrittenLines(): Promise<void> {
2597
- for await (const line of readLines(this.writeStream)) {
2598
- if (this.disposed || line.length === 0) {
2599
- continue;
2600
- }
2601
-
2602
- const hasSessionId = this.sessionId !== undefined;
2603
- const response = await this.fetchWithOAuthRetry({
2604
- method: "POST",
2605
- createHeaders: () => this.createPostHeaders(),
2606
- body: line,
2607
- });
2608
-
2609
- if (hasSessionId && response.status === 404) {
2610
- this.sessionId = undefined;
2611
- this.dispose(new Error("HTTP transport session expired (404 response)"));
2612
- return;
2613
- }
2614
-
2615
- await this.throwForPostHttpError(response);
2616
- this.captureSessionId(response);
2617
- this.maybeOpenGetSseStream();
2618
- void this.forwardResponseMessages(response).catch((error) => {
2619
- this.dispose(error instanceof Error ? error : new Error(String(error)));
2620
- });
2621
- }
2622
- }
2623
-
2624
- private async createPostHeaders(): Promise<Headers> {
2625
- const headers = new Headers(this.headers);
2626
- headers.set("Accept", "application/json, text/event-stream");
2627
- headers.set("Content-Type", "application/json");
2628
- if (this.sessionId !== undefined) {
2629
- headers.set("Mcp-Session-Id", this.sessionId);
2630
- headers.set("MCP-Protocol-Version", MCP_PROTOCOL_VERSION);
2631
- }
2632
- return this.authorizeRequestHeaders(headers);
2633
- }
2634
-
2635
- private async createGetHeaders(): Promise<Headers> {
2636
- const headers = new Headers(this.headers);
2637
- headers.set("Accept", "text/event-stream");
2638
- if (this.sessionId !== undefined) {
2639
- headers.set("Mcp-Session-Id", this.sessionId);
2640
- headers.set("MCP-Protocol-Version", MCP_PROTOCOL_VERSION);
2641
- }
2642
- if (this.lastEventId !== undefined) {
2643
- headers.set("Last-Event-ID", this.lastEventId);
2644
- }
2645
- return this.authorizeRequestHeaders(headers);
2646
- }
2647
-
2648
- private async createDeleteHeaders(sessionId: string): Promise<Headers> {
2649
- const headers = new Headers(this.headers);
2650
- headers.set("Mcp-Session-Id", sessionId);
2651
- headers.set("MCP-Protocol-Version", MCP_PROTOCOL_VERSION);
2652
- return this.authorizeRequestHeaders(headers);
2653
- }
2654
-
2655
- private async authorizeRequestHeaders(headers: Headers): Promise<Headers> {
2656
- await this.oauthProvider?.authorizeRequest?.({
2657
- requestUrl: new URL(this.url),
2658
- headers,
2659
- fetch: this.fetchImpl,
2660
- });
2661
- return headers;
2662
- }
2663
-
2664
- private captureSessionId(response: Response): void {
2665
- const sessionId = response.headers.get("Mcp-Session-Id");
2666
- if (sessionId === null || sessionId.length === 0) {
2667
- return;
2668
- }
2669
-
2670
- if (this.sessionId !== undefined && this.sessionId !== sessionId) {
2671
- throw new Error("HTTP transport response changed active session ID");
2672
- }
2673
-
2674
- this.sessionId = sessionId;
2675
- }
2676
-
2677
- private maybeOpenGetSseStream(): void {
2678
- if (this.disposed || this.sessionId === undefined || this.getSseStreamStarted) {
2679
- return;
2680
- }
2681
-
2682
- this.getSseStreamStarted = true;
2683
- this.consumeGetSseStream().catch((error) => {
2684
- if (error instanceof HttpTransportGetSseNotSupportedError || this.disposed) {
2685
- return;
2686
- }
2687
-
2688
- this.dispose(error instanceof Error ? error : new Error(String(error)));
2689
- });
2690
- }
2691
-
2692
- private async sendSessionTerminationRequest(sessionId: string): Promise<void> {
2693
- const response = await this.fetchImpl(this.url, {
2694
- method: "DELETE",
2695
- headers: await this.createDeleteHeaders(sessionId),
2696
- });
2697
-
2698
- if (response.status === 405 || response.ok) {
2699
- return;
2700
- }
2701
-
2702
- const responseBody = (await response.text()).trim();
2703
- const statusDescriptor = `${response.status} ${response.statusText}`.trim();
2704
- const message = responseBody.length === 0
2705
- ? `HTTP transport DELETE failed (${statusDescriptor})`
2706
- : `HTTP transport DELETE failed (${statusDescriptor}): ${responseBody}`;
2707
- throw new Error(message);
2708
- }
2709
-
2710
- private async consumeGetSseStream(): Promise<void> {
2711
- const response = await this.fetchWithOAuthRetry({
2712
- method: "GET",
2713
- createHeaders: () => this.createGetHeaders(),
2714
- });
2715
-
2716
- if (response.status === 405) {
2717
- throw new HttpTransportGetSseNotSupportedError();
2718
- }
2719
-
2720
- if (response.status === 404) {
2721
- this.sessionId = undefined;
2722
- throw new Error("HTTP transport session expired (GET 404 response)");
2723
- }
2724
-
2725
- if (!response.ok) {
2726
- const responseBody = (await response.text()).trim();
2727
- const statusDescriptor = `${response.status} ${response.statusText}`.trim();
2728
- const message = responseBody.length === 0
2729
- ? `HTTP transport GET failed (${statusDescriptor})`
2730
- : `HTTP transport GET failed (${statusDescriptor}): ${responseBody}`;
2731
- throw new Error(message);
2732
- }
2733
-
2734
- const contentType = response.headers.get("Content-Type");
2735
- if (contentType === null) {
2736
- return;
2737
- }
2738
-
2739
- if (contentType.toLowerCase().includes("text/event-stream")) {
2740
- await this.forwardSseResponseMessages(response);
2741
- this.getSseStreamStarted = false;
2742
- if (!this.disposed && this.sessionId !== undefined && this.lastEventId !== undefined) {
2743
- this.maybeOpenGetSseStream();
2744
- }
2745
- return;
2746
- }
2747
-
2748
- return;
2749
- }
2750
-
2751
- private async throwForPostHttpError(response: Response): Promise<void> {
2752
- if (response.status < 400) {
2753
- return;
2754
- }
2755
-
2756
- const responseBody = (await response.text()).trim();
2757
- const statusDescriptor = `${response.status} ${response.statusText}`.trim();
2758
- const message = responseBody.length === 0
2759
- ? `HTTP transport POST failed (${statusDescriptor})`
2760
- : `HTTP transport POST failed (${statusDescriptor}): ${responseBody}`;
2761
- throw new Error(message);
2762
- }
2763
-
2764
- private async maybeHandleUnauthorizedResponse(response: Response): Promise<boolean> {
2765
- if (response.status !== 401 || this.oauthProvider === undefined) {
2766
- return false;
2767
- }
2768
-
2769
- const discoveryClient = this.oauthMetadataDiscovery;
2770
- if (discoveryClient === undefined) {
2771
- return false;
2772
- }
2773
-
2774
- const challenge = parseBearerWwwAuthenticateHeader(response.headers.get("WWW-Authenticate"));
2775
- const resourceMetadataUrl = challenge?.params.resource_metadata;
2776
- const discovery = await discoveryClient.discover(this.url, {
2777
- resourceMetadataUrl,
2778
- });
2779
- const result = await this.oauthProvider.handleUnauthorized({
2780
- requestUrl: new URL(this.url),
2781
- response: response.clone(),
2782
- challenge,
2783
- discovery,
2784
- fetch: this.fetchImpl,
2785
- });
2786
-
2787
- if (result.action === "retry") {
2788
- return true;
2789
- }
2790
-
2791
- if (result.error !== undefined) {
2792
- throw result.error;
2793
- }
2794
-
2795
- return false;
2796
- }
2797
-
2798
- private async forwardResponseMessages(response: Response): Promise<void> {
2799
- if (response.status === 202) {
2800
- return;
2801
- }
2802
-
2803
- const contentType = response.headers.get("Content-Type");
2804
- if (contentType === null) {
2805
- return;
2806
- }
2807
-
2808
- const normalizedContentType = contentType.toLowerCase();
2809
- if (normalizedContentType.includes("text/event-stream")) {
2810
- await this.forwardSseResponseMessages(response);
2811
- return;
2812
- }
2813
-
2814
- if (normalizedContentType.includes("application/json")) {
2815
- await this.forwardJsonResponseMessage(response);
2816
- return;
2817
- }
2818
-
2819
- throw new Error("HTTP transport POST returned an unsupported response content type");
2820
- }
2821
-
2822
- private async forwardSseResponseMessages(response: Response): Promise<void> {
2823
- if (response.body === null) {
2824
- return;
2825
- }
2826
-
2827
- const parser = new SseParser();
2828
- const decoder = new TextDecoder();
2829
- const reader = response.body.getReader();
2830
- this.openSseReaders.add(reader);
2831
-
2832
- try {
2833
- while (true) {
2834
- const { done, value } = await reader.read();
2835
- if (done) {
2836
- break;
2837
- }
2838
-
2839
- if (value === undefined) {
2840
- continue;
2841
- }
2842
-
2843
- const messages = parser.push(decoder.decode(value, { stream: true }));
2844
- this.writeSseMessages(messages);
2845
- this.lastEventId = parser.lastEventId;
2846
- }
2847
-
2848
- const trailingChunk = decoder.decode();
2849
- if (trailingChunk.length > 0) {
2850
- this.writeSseMessages(parser.push(trailingChunk));
2851
- this.lastEventId = parser.lastEventId;
2852
- }
2853
-
2854
- this.writeSseMessages(parser.flush());
2855
- this.lastEventId = parser.lastEventId;
2856
- } finally {
2857
- this.openSseReaders.delete(reader);
2858
- reader.releaseLock();
2859
- }
2860
- }
2861
-
2862
- private async forwardJsonResponseMessage(response: Response): Promise<void> {
2863
- const payload = await response.text();
2864
- if (payload.length === 0) {
2865
- return;
2866
- }
2867
-
2868
- const parsedPayload = JSON.parse(payload) as unknown;
2869
- this.writeReadableLine(JSON.stringify(parsedPayload));
2870
- }
2871
-
2872
- private writeSseMessages(messages: ParsedSseMessage[]): void {
2873
- for (const message of messages) {
2874
- this.writeReadableLine(message.data);
2875
- }
2876
- }
2877
-
2878
- private writeReadableLine(line: string): void {
2879
- if (this.disposed || this.readStream.destroyed || this.readStream.writableEnded) {
2880
- return;
2881
- }
2882
-
2883
- this.readStream.write(`${line}\n`);
2884
- }
2885
-
2886
- private async fetchWithOAuthRetry(input: {
2887
- method: "GET" | "POST";
2888
- createHeaders: () => Promise<Headers>;
2889
- body?: BodyInit;
2890
- }): Promise<Response> {
2891
- const request = async (): Promise<Response> =>
2892
- this.fetchWithAbort(this.url, {
2893
- method: input.method,
2894
- headers: await input.createHeaders(),
2895
- body: input.body,
2896
- });
2897
-
2898
- let response = await request();
2899
- if (await this.maybeHandleUnauthorizedResponse(response)) {
2900
- response = await request();
2901
- }
2902
-
2903
- const oauthError = this.oauthProvider === undefined
2904
- ? null
2905
- : this.readOAuthChallengeError(response);
2906
- if (oauthError !== null) {
2907
- throw oauthError;
2908
- }
2909
-
2910
- return response;
2911
- }
2912
-
2913
- private readOAuthChallengeError(response: Response): OAuthError | null {
2914
- if (response.status !== 401 && response.status !== 403) {
2915
- return null;
2916
- }
2917
-
2918
- const challenge = parseBearerWwwAuthenticateHeader(response.headers.get("WWW-Authenticate"));
2919
- const error = challenge?.params.error;
2920
- if (error === undefined || error.length === 0) {
2921
- return null;
2922
- }
2923
-
2924
- return new OAuthError(
2925
- {
2926
- error,
2927
- error_description: challenge?.params.error_description,
2928
- error_uri: challenge?.params.error_uri,
2929
- },
2930
- response.status
2931
- );
2932
- }
2933
- }
2934
-
2935
- class HttpTransportGetSseNotSupportedError extends Error {
2936
- constructor() {
2937
- super("HTTP transport server does not support GET SSE streams");
2938
- }
2939
- }
2940
-
2941
- export interface JsonRpcRequest {
2942
- jsonrpc: "2.0";
2943
- id: RequestId;
2944
- method: string;
2945
- params?: unknown;
2946
- }
2947
-
2948
- export interface JsonRpcNotification {
2949
- jsonrpc: "2.0";
2950
- method: string;
2951
- params?: unknown;
2952
- }
2953
-
2954
- export interface JsonRpcErrorObject {
2955
- code: number;
2956
- message: string;
2957
- data?: unknown;
2958
- }
2959
-
2960
- export class McpError extends Error {
2961
- readonly code: number;
2962
- declare readonly data?: unknown;
2963
-
2964
- constructor(code: number, message: string, data?: unknown) {
2965
- super(message);
2966
- this.name = "McpError";
2967
- this.code = code;
2968
- if (data !== undefined) {
2969
- this.data = data;
2970
- }
2971
- }
2972
- }
2973
-
2974
- export interface JsonRpcSuccessResponse {
2975
- jsonrpc: "2.0";
2976
- id: RequestId;
2977
- result: unknown;
2978
- }
2979
-
2980
- export interface JsonRpcErrorResponse {
2981
- jsonrpc: "2.0";
2982
- id: RequestId;
2983
- error: JsonRpcErrorObject;
2984
- }
2985
-
2986
- export type JsonRpcResponse = JsonRpcSuccessResponse | JsonRpcErrorResponse;
2987
- export type JsonRpcMessage = JsonRpcRequest | JsonRpcNotification | JsonRpcResponse;
2988
-
2989
- export type ParsedJsonRpcMessage =
2990
- | {
2991
- type: "request";
2992
- message: JsonRpcRequest;
2993
- }
2994
- | {
2995
- type: "notification";
2996
- message: JsonRpcNotification;
2997
- }
2998
- | {
2999
- type: "response";
3000
- message: JsonRpcResponse;
3001
- }
3002
- | {
3003
- type: "invalid";
3004
- id: RequestId | null;
3005
- error: McpError;
3006
- };
3007
-
3008
- export function serializeJsonRpcMessage(message: JsonRpcMessage): string {
3009
- return `${JSON.stringify(message)}\n`;
3010
- }
3011
-
3012
- function normalizeLine(line: string): string {
3013
- return line.endsWith("\r") ? line.slice(0, -1) : line;
3014
- }
3015
-
3016
- export async function* readLines(stream: Readable): AsyncGenerator<string> {
3017
- let buffer = "";
3018
- const decoder = new TextDecoder();
3019
-
3020
- for await (const chunk of stream as AsyncIterable<unknown>) {
3021
- buffer +=
3022
- chunk instanceof Uint8Array
3023
- ? decoder.decode(chunk, { stream: true })
3024
- : decoder.decode() + String(chunk);
3025
-
3026
- while (true) {
3027
- const newlineIndex = buffer.indexOf("\n");
3028
- if (newlineIndex === -1) {
3029
- break;
3030
- }
3031
-
3032
- const line = buffer.slice(0, newlineIndex);
3033
- buffer = buffer.slice(newlineIndex + 1);
3034
- yield normalizeLine(line);
3035
- }
3036
- }
3037
-
3038
- buffer += decoder.decode();
3039
-
3040
- if (buffer.length > 0) {
3041
- yield normalizeLine(buffer);
3042
- }
3043
- }
3044
-
3045
- export interface ParsedSseMessage {
3046
- data: string;
3047
- id?: string;
3048
- }
3049
-
3050
- export class SseParser {
3051
- private buffer = "";
3052
- private eventType: string | undefined;
3053
- private dataLines: string[] = [];
3054
- private eventId = "";
3055
- private hasEventId = false;
3056
- private _lastEventId: string | undefined;
3057
-
3058
- get lastEventId(): string | undefined {
3059
- return this._lastEventId;
3060
- }
3061
-
3062
- push(chunk: string): ParsedSseMessage[] {
3063
- if (chunk.length === 0) {
3064
- return [];
3065
- }
3066
-
3067
- this.buffer += chunk;
3068
- const messages: ParsedSseMessage[] = [];
3069
-
3070
- while (true) {
3071
- const newlineIndex = this.buffer.indexOf("\n");
3072
- if (newlineIndex === -1) {
3073
- break;
3074
- }
3075
-
3076
- const line = normalizeLine(this.buffer.slice(0, newlineIndex));
3077
- this.buffer = this.buffer.slice(newlineIndex + 1);
3078
- this.consumeLine(line, messages);
3079
- }
3080
-
3081
- return messages;
3082
- }
3083
-
3084
- flush(): ParsedSseMessage[] {
3085
- const messages: ParsedSseMessage[] = [];
3086
-
3087
- if (this.buffer.length > 0) {
3088
- this.consumeLine(normalizeLine(this.buffer), messages);
3089
- this.buffer = "";
3090
- }
3091
-
3092
- this.emitEvent(messages);
3093
- return messages;
3094
- }
3095
-
3096
- private consumeLine(line: string, messages: ParsedSseMessage[]): void {
3097
- if (line.length === 0) {
3098
- this.emitEvent(messages);
3099
- return;
3100
- }
3101
-
3102
- if (line.startsWith(":")) {
3103
- return;
3104
- }
3105
-
3106
- const separatorIndex = line.indexOf(":");
3107
- const field = separatorIndex === -1 ? line : line.slice(0, separatorIndex);
3108
- const rawValue = separatorIndex === -1 ? "" : line.slice(separatorIndex + 1);
3109
- const value = rawValue.startsWith(" ") ? rawValue.slice(1) : rawValue;
3110
-
3111
- if (field === "event") {
3112
- this.eventType = value;
3113
- return;
3114
- }
3115
-
3116
- if (field === "data") {
3117
- this.dataLines.push(value);
3118
- return;
3119
- }
3120
-
3121
- if (field === "id") {
3122
- if (value.includes("\0")) {
3123
- return;
3124
- }
3125
-
3126
- this.eventId = value;
3127
- this.hasEventId = true;
3128
- }
3129
- }
3130
-
3131
- private emitEvent(messages: ParsedSseMessage[]): void {
3132
- const eventType = this.eventType ?? "message";
3133
-
3134
- if (this.hasEventId) {
3135
- this._lastEventId = this.eventId;
3136
- }
3137
-
3138
- if (this.dataLines.length === 0 || eventType !== "message") {
3139
- this.resetEvent();
3140
- return;
3141
- }
3142
-
3143
- const message: ParsedSseMessage = {
3144
- data: this.dataLines.join("\n"),
3145
- };
3146
-
3147
- if (this.hasEventId) {
3148
- message.id = this.eventId;
3149
- }
3150
-
3151
- messages.push(message);
3152
- this.resetEvent();
3153
- }
3154
-
3155
- private resetEvent(): void {
3156
- this.eventType = undefined;
3157
- this.dataLines = [];
3158
- this.eventId = "";
3159
- this.hasEventId = false;
3160
- }
3161
- }
3162
-
3163
- interface PendingRequest {
3164
- resolve: (result: unknown) => void;
3165
- reject: (error: unknown) => void;
3166
- timeout: ReturnType<typeof setTimeout>;
3167
- }
3168
-
3169
- interface ActiveIncomingRequest {
3170
- cancelled: boolean;
3171
- }
3172
-
3173
- export interface JsonRpcRequestOptions {
3174
- timeoutMs?: number;
3175
- onRequestId?: (requestId: RequestId) => void;
3176
- onTimeout?: (requestId: RequestId) => void;
3177
- }
3178
-
3179
- interface JsonRpcRequestContext {
3180
- id: RequestId;
3181
- method: string;
3182
- }
3183
-
3184
- type JsonRpcRequestHandler = (
3185
- params: unknown,
3186
- context: JsonRpcRequestContext
3187
- ) => unknown | Promise<unknown>;
3188
-
3189
- interface JsonRpcNotificationContext {
3190
- method: string;
3191
- }
3192
-
3193
- type JsonRpcNotificationHandler = (
3194
- params: unknown,
3195
- context: JsonRpcNotificationContext
3196
- ) => unknown | Promise<unknown>;
3197
-
3198
- export class JsonRpcMessageLayer {
3199
- readonly requestTimeoutMs: number;
3200
- private readonly input: Readable;
3201
- private readonly output: Writable;
3202
- private readonly inputClosedReason: Promise<Error> | undefined;
3203
- private nextRequestId = 1;
3204
- private disposedError: Error | undefined;
3205
- private readonly pendingRequests = new Map<RequestId, PendingRequest>();
3206
- private readonly activeIncomingRequests = new Map<RequestId, ActiveIncomingRequest>();
3207
- private readonly requestHandlers = new Map<string, JsonRpcRequestHandler>();
3208
- private readonly notificationHandlers = new Map<string, JsonRpcNotificationHandler>();
3209
-
3210
- constructor(
3211
- input: Readable,
3212
- output: Writable,
3213
- requestTimeoutMs = 30_000,
3214
- inputClosedReason?: Promise<Error>
3215
- ) {
3216
- if (!Number.isFinite(requestTimeoutMs) || requestTimeoutMs < 0) {
3217
- throw new Error("requestTimeoutMs must be a non-negative finite number");
3218
- }
3219
-
3220
- this.input = input;
3221
- this.output = output;
3222
- this.inputClosedReason = inputClosedReason;
3223
- this.requestTimeoutMs = requestTimeoutMs;
3224
- this.consumeInput().catch(() => undefined);
3225
- }
3226
-
3227
- sendNotification(method: string, params?: unknown): void {
3228
- if (this.disposedError !== undefined) {
3229
- throw this.disposedError;
3230
- }
3231
-
3232
- const message: JsonRpcNotification = {
3233
- jsonrpc: "2.0",
3234
- method,
3235
- };
3236
-
3237
- if (params !== undefined) {
3238
- message.params = params;
3239
- }
3240
-
3241
- this.output.write(serializeJsonRpcMessage(message));
3242
- }
3243
-
3244
- onRequest(method: string, handler: JsonRpcRequestHandler): void {
3245
- this.requestHandlers.set(method, handler);
3246
- }
3247
-
3248
- onNotification(method: string, handler: JsonRpcNotificationHandler): void {
3249
- this.notificationHandlers.set(method, handler);
3250
- }
3251
-
3252
- sendRequest(
3253
- method: string,
3254
- params?: unknown,
3255
- options: JsonRpcRequestOptions = {}
3256
- ): Promise<unknown> {
3257
- if (this.disposedError !== undefined) {
3258
- throw this.disposedError;
3259
- }
3260
-
3261
- const id = this.nextRequestId;
3262
- this.nextRequestId += 1;
3263
- const timeoutMs = options.timeoutMs ?? this.requestTimeoutMs;
3264
-
3265
- if (!Number.isFinite(timeoutMs) || timeoutMs < 0) {
3266
- throw new Error("timeoutMs must be a non-negative finite number");
3267
- }
3268
- if (options.onRequestId !== undefined) {
3269
- options.onRequestId(id);
3270
- }
3271
-
3272
- const message: JsonRpcRequest = {
3273
- jsonrpc: "2.0",
3274
- id,
3275
- method,
3276
- };
3277
-
3278
- if (params !== undefined) {
3279
- message.params = params;
3280
- }
3281
-
3282
- return new Promise((resolve, reject) => {
3283
- const timeout = setTimeout(() => {
3284
- this.pendingRequests.delete(id);
3285
- options.onTimeout?.(id);
3286
- reject(new Error(`JSON-RPC request "${method}" timed out after ${timeoutMs}ms`));
3287
- }, timeoutMs);
3288
-
3289
- this.pendingRequests.set(id, { resolve, reject, timeout });
3290
-
3291
- try {
3292
- this.output.write(serializeJsonRpcMessage(message));
3293
- } catch (error) {
3294
- clearTimeout(timeout);
3295
- this.pendingRequests.delete(id);
3296
- reject(error);
3297
- }
3298
- });
3299
- }
3300
-
3301
- cancelRequest(requestId: RequestId, reason: unknown): boolean {
3302
- const pending = this.pendingRequests.get(requestId);
3303
- if (pending === undefined) {
3304
- return false;
3305
- }
3306
-
3307
- this.pendingRequests.delete(requestId);
3308
- clearTimeout(pending.timeout);
3309
- pending.reject(reason);
3310
- return true;
3311
- }
3312
-
3313
- dispose(reason = new Error("JSON-RPC message layer disposed")): void {
3314
- if (this.disposedError !== undefined) {
3315
- return;
3316
- }
3317
-
3318
- this.disposedError = reason;
3319
-
3320
- for (const pending of this.pendingRequests.values()) {
3321
- clearTimeout(pending.timeout);
3322
- pending.reject(reason);
3323
- }
3324
-
3325
- this.pendingRequests.clear();
3326
- this.activeIncomingRequests.clear();
3327
- }
3328
-
3329
- private async consumeInput(): Promise<void> {
3330
- try {
3331
- for await (const line of readLines(this.input)) {
3332
- if (this.disposedError !== undefined) {
3333
- break;
3334
- }
3335
-
3336
- if (line.length === 0) {
3337
- continue;
3338
- }
3339
-
3340
- let parsedLine: unknown;
3341
- try {
3342
- parsedLine = JSON.parse(line);
3343
- } catch {
3344
- await this.processParsedMessage({
3345
- type: "invalid",
3346
- id: null,
3347
- error: parseError(),
3348
- });
3349
- continue;
3350
- }
3351
-
3352
- if (Array.isArray(parsedLine)) {
3353
- for (const message of parsedLine) {
3354
- if (this.disposedError !== undefined) {
3355
- break;
3356
- }
3357
-
3358
- await this.processParsedMessage(parseJsonRpcPayload(message));
3359
- }
3360
- continue;
3361
- }
3362
-
3363
- await this.processParsedMessage(parseJsonRpcPayload(parsedLine));
3364
- }
3365
- } catch (error) {
3366
- if (this.disposedError === undefined) {
3367
- this.dispose(
3368
- error instanceof Error
3369
- ? error
3370
- : new Error(`JSON-RPC input stream failed: ${String(error)}`)
3371
- );
3372
- }
3373
- return;
3374
- }
3375
-
3376
- if (this.disposedError === undefined) {
3377
- const streamClosedReason = await this.resolveInputStreamClosedReason();
3378
- if (this.disposedError === undefined) {
3379
- this.dispose(streamClosedReason);
3380
- }
3381
- }
3382
- }
3383
-
3384
- private async resolveInputStreamClosedReason(): Promise<Error> {
3385
- const streamClosedError = new Error("JSON-RPC input stream closed");
3386
- if (this.inputClosedReason === undefined) {
3387
- return streamClosedError;
3388
- }
3389
-
3390
- try {
3391
- return await Promise.race([
3392
- this.inputClosedReason,
3393
- new Promise<Error>((resolve) => {
3394
- setTimeout(() => {
3395
- resolve(streamClosedError);
3396
- }, 50);
3397
- }),
3398
- ]);
3399
- } catch {
3400
- return streamClosedError;
3401
- }
3402
- }
3403
-
3404
- private async processParsedMessage(parsed: ParsedJsonRpcMessage): Promise<void> {
3405
- if (parsed.type === "request") {
3406
- const handler = this.requestHandlers.get(parsed.message.method);
3407
- if (handler === undefined) {
3408
- this.output.write(
3409
- serializeJsonRpcMessage({
3410
- jsonrpc: "2.0",
3411
- id: parsed.message.id,
3412
- error: {
3413
- code: ERROR_METHOD_NOT_FOUND,
3414
- message: `Method not found: ${parsed.message.method}`,
3415
- },
3416
- })
3417
- );
3418
- return;
3419
- }
3420
-
3421
- this.handleIncomingRequest(parsed.message, handler);
3422
- return;
3423
- }
3424
-
3425
- if (parsed.type === "notification") {
3426
- if (parsed.message.method === "notifications/cancelled") {
3427
- this.handleCancellationNotification(parsed.message.params);
3428
- }
3429
-
3430
- const handler = this.notificationHandlers.get(parsed.message.method);
3431
- if (handler === undefined) {
3432
- return;
3433
- }
3434
-
3435
- try {
3436
- await handler(parsed.message.params, {
3437
- method: parsed.message.method,
3438
- });
3439
- } catch {
3440
- return;
3441
- }
3442
- return;
3443
- }
3444
-
3445
- if (parsed.type === "invalid") {
3446
- const errorResponse: {
3447
- jsonrpc: "2.0";
3448
- id: RequestId | null;
3449
- error: JsonRpcErrorObject;
3450
- } = {
3451
- jsonrpc: "2.0",
3452
- id: parsed.id,
3453
- error: {
3454
- code: parsed.error.code,
3455
- message: parsed.error.message,
3456
- },
3457
- };
3458
-
3459
- if (parsed.error.data !== undefined) {
3460
- errorResponse.error.data = parsed.error.data;
3461
- }
3462
-
3463
- this.output.write(`${JSON.stringify(errorResponse)}\n`);
3464
- return;
3465
- }
3466
-
3467
- if (parsed.type !== "response") {
3468
- return;
3469
- }
3470
-
3471
- const pending = this.pendingRequests.get(parsed.message.id);
3472
- if (pending === undefined) {
3473
- return;
3474
- }
3475
-
3476
- this.pendingRequests.delete(parsed.message.id);
3477
- clearTimeout(pending.timeout);
3478
- if ("result" in parsed.message) {
3479
- pending.resolve(parsed.message.result);
3480
- return;
3481
- }
3482
-
3483
- pending.reject(
3484
- new McpError(
3485
- parsed.message.error.code,
3486
- parsed.message.error.message,
3487
- parsed.message.error.data
3488
- )
3489
- );
3490
- }
3491
-
3492
- private handleIncomingRequest(message: JsonRpcRequest, handler: JsonRpcRequestHandler): void {
3493
- const activeRequest: ActiveIncomingRequest = {
3494
- cancelled: false,
3495
- };
3496
- this.activeIncomingRequests.set(message.id, activeRequest);
3497
-
3498
- void (async () => {
3499
- try {
3500
- const result = await handler(message.params, {
3501
- id: message.id,
3502
- method: message.method,
3503
- });
3504
-
3505
- if (this.disposedError !== undefined || activeRequest.cancelled) {
3506
- return;
3507
- }
3508
-
3509
- this.output.write(
3510
- serializeJsonRpcMessage({
3511
- jsonrpc: "2.0",
3512
- id: message.id,
3513
- result,
3514
- })
3515
- );
3516
- } catch (error) {
3517
- if (this.disposedError !== undefined || activeRequest.cancelled) {
3518
- return;
3519
- }
3520
-
3521
- const errorMessage = error instanceof Error ? error.message : String(error);
3522
- this.output.write(
3523
- serializeJsonRpcMessage({
3524
- jsonrpc: "2.0",
3525
- id: message.id,
3526
- error: {
3527
- code: ERROR_INTERNAL,
3528
- message: errorMessage,
3529
- },
3530
- })
3531
- );
3532
- } finally {
3533
- const inFlightRequest = this.activeIncomingRequests.get(message.id);
3534
- if (inFlightRequest === activeRequest) {
3535
- this.activeIncomingRequests.delete(message.id);
3536
- }
3537
- }
3538
- })();
3539
- }
3540
-
3541
- private handleCancellationNotification(params: unknown): void {
3542
- if (!isObjectRecord(params)) {
3543
- return;
3544
- }
3545
-
3546
- const requestId = params.requestId;
3547
- if (!isRequestId(requestId)) {
3548
- return;
3549
- }
3550
-
3551
- const activeRequest = this.activeIncomingRequests.get(requestId);
3552
- if (activeRequest === undefined) {
3553
- return;
3554
- }
3555
-
3556
- activeRequest.cancelled = true;
3557
- this.activeIncomingRequests.delete(requestId);
3558
- }
3559
- }
3560
-
3561
- function isObjectRecord(value: unknown): value is Record<string, unknown> {
3562
- return typeof value === "object" && value !== null && !Array.isArray(value);
3563
- }
3564
-
3565
- function isInitializeResult(value: unknown): value is InitializeResult {
3566
- if (!isObjectRecord(value) || typeof value.protocolVersion !== "string") {
3567
- return false;
3568
- }
3569
-
3570
- if (!isServerCapabilities(value.capabilities)) {
3571
- return false;
3572
- }
3573
-
3574
- if (
3575
- !isObjectRecord(value.serverInfo)
3576
- || typeof value.serverInfo.name !== "string"
3577
- || value.serverInfo.name.length === 0
3578
- || typeof value.serverInfo.version !== "string"
3579
- || value.serverInfo.version.length === 0
3580
- ) {
3581
- return false;
3582
- }
3583
-
3584
- return value.instructions === undefined || typeof value.instructions === "string";
3585
- }
3586
-
3587
- function isServerCapabilities(value: unknown): value is ServerCapabilities {
3588
- if (!isObjectRecord(value)) {
3589
- return false;
3590
- }
3591
-
3592
- for (const capability of ["prompts", "resources", "tools", "logging", "completions", "experimental"] as const) {
3593
- if (value[capability] !== undefined && !isObjectRecord(value[capability])) {
3594
- return false;
3595
- }
3596
- }
3597
-
3598
- return true;
3599
- }
3600
-
3601
- function isCallToolResult(value: unknown): value is CallToolResult {
3602
- if (!isObjectRecord(value) || !Array.isArray(value.content)) {
3603
- return false;
3604
- }
3605
-
3606
- if (value.structuredContent !== undefined && !isObjectRecord(value.structuredContent)) {
3607
- return false;
3608
- }
3609
-
3610
- if (value.isError !== undefined && typeof value.isError !== "boolean") {
3611
- return false;
3612
- }
3613
-
3614
- return value.content.every(isContentItem);
3615
- }
3616
-
3617
- function isToolsListResult(value: unknown): value is { tools: Tool[]; nextCursor?: string } {
3618
- return isObjectRecord(value)
3619
- && Array.isArray(value.tools)
3620
- && (value.nextCursor === undefined || typeof value.nextCursor === "string");
3621
- }
3622
-
3623
- function isResourcesListResult(value: unknown): value is { resources: Resource[]; nextCursor?: string } {
3624
- return isObjectRecord(value)
3625
- && Array.isArray(value.resources)
3626
- && value.resources.every(isResource)
3627
- && (value.nextCursor === undefined || typeof value.nextCursor === "string");
3628
- }
3629
-
3630
- function isResourceTemplatesListResult(
3631
- value: unknown
3632
- ): value is { resourceTemplates: ResourceTemplate[]; nextCursor?: string } {
3633
- return isObjectRecord(value)
3634
- && Array.isArray(value.resourceTemplates)
3635
- && value.resourceTemplates.every(isResourceTemplate)
3636
- && (value.nextCursor === undefined || typeof value.nextCursor === "string");
3637
- }
3638
-
3639
- function isReadResourceResult(value: unknown): value is { contents: ResourceContents[] } {
3640
- return isObjectRecord(value)
3641
- && Array.isArray(value.contents)
3642
- && value.contents.every(isResourceContents);
3643
- }
3644
-
3645
- function isGetPromptResult(value: unknown): value is GetPromptResult {
3646
- return isObjectRecord(value)
3647
- && (value.description === undefined || typeof value.description === "string")
3648
- && Array.isArray(value.messages)
3649
- && value.messages.every(isPromptMessage);
3650
- }
3651
-
3652
- function isCompleteResult(value: unknown): value is CompleteResult {
3653
- return isObjectRecord(value)
3654
- && isObjectRecord(value.completion)
3655
- && Array.isArray(value.completion.values)
3656
- && value.completion.values.every((candidate) => typeof candidate === "string")
3657
- && (value.completion.hasMore === undefined || typeof value.completion.hasMore === "boolean")
3658
- && (value.completion.total === undefined || typeof value.completion.total === "number");
3659
- }
3660
-
3661
- function isResource(value: unknown): value is Resource {
3662
- return isObjectRecord(value)
3663
- && typeof value.uri === "string"
3664
- && typeof value.name === "string"
3665
- && (value.description === undefined || typeof value.description === "string")
3666
- && (value.mimeType === undefined || typeof value.mimeType === "string")
3667
- && (value.size === undefined || typeof value.size === "number");
3668
- }
3669
-
3670
- function isResourceTemplate(value: unknown): value is ResourceTemplate {
3671
- return isObjectRecord(value)
3672
- && typeof value.uriTemplate === "string"
3673
- && typeof value.name === "string"
3674
- && (value.description === undefined || typeof value.description === "string")
3675
- && (value.mimeType === undefined || typeof value.mimeType === "string");
3676
- }
3677
-
3678
- function isResourceContents(value: unknown): value is ResourceContents {
3679
- if (!isObjectRecord(value) || typeof value.uri !== "string") {
3680
- return false;
3681
- }
3682
-
3683
- if (value.mimeType !== undefined && typeof value.mimeType !== "string") {
3684
- return false;
3685
- }
3686
-
3687
- const hasText = value.text !== undefined;
3688
- const hasBlob = value.blob !== undefined;
3689
-
3690
- if (!hasText && !hasBlob) {
3691
- return false;
3692
- }
3693
-
3694
- return (!hasText || typeof value.text === "string")
3695
- && (!hasBlob || typeof value.blob === "string");
3696
- }
3697
-
3698
- function isPromptMessage(value: unknown): value is PromptMessage {
3699
- return isObjectRecord(value)
3700
- && (value.role === "user" || value.role === "assistant")
3701
- && isContentItem(value.content);
3702
- }
3703
-
3704
- function isContentItem(value: unknown): value is ContentItem {
3705
- if (!isObjectRecord(value)) {
3706
- return false;
3707
- }
3708
-
3709
- if (value.type === "text") {
3710
- return typeof value.text === "string";
3711
- }
3712
-
3713
- if (value.type === "image" || value.type === "audio") {
3714
- return typeof value.data === "string" && typeof value.mimeType === "string";
3715
- }
3716
-
3717
- if (value.type !== "resource" || !isObjectRecord(value.resource)) {
3718
- return false;
3719
- }
3720
-
3721
- return isResourceContents(value.resource);
3722
- }
3723
-
3724
- function hasOwn(
3725
- value: Record<string, unknown>,
3726
- property: string
3727
- ): property is keyof typeof value {
3728
- return Object.prototype.hasOwnProperty.call(value, property);
3729
- }
3730
-
3731
- function isRequestId(value: unknown): value is RequestId {
3732
- return typeof value === "string" || typeof value === "number";
3733
- }
3734
-
3735
- function isLogLevel(value: unknown): value is LogLevel {
3736
- return (
3737
- value === "debug" ||
3738
- value === "info" ||
3739
- value === "notice" ||
3740
- value === "warning" ||
3741
- value === "error" ||
3742
- value === "critical" ||
3743
- value === "alert" ||
3744
- value === "emergency"
3745
- );
3746
- }
3747
-
3748
- function toRequestId(value: unknown): RequestId | null {
3749
- return isRequestId(value) ? value : null;
3750
- }
3751
-
3752
- function parseError(): McpError {
3753
- return new McpError(ERROR_PARSE, "Parse error");
3754
- }
3755
-
3756
- function invalidRequest(): McpError {
3757
- return new McpError(ERROR_INVALID_REQUEST, "Invalid Request");
3758
- }
3759
-
3760
- function isJsonRpcErrorObject(value: unknown): value is JsonRpcErrorObject {
3761
- if (!isObjectRecord(value)) {
3762
- return false;
3763
- }
3764
-
3765
- if (typeof value.code !== "number" || typeof value.message !== "string") {
3766
- return false;
3767
- }
3768
-
3769
- return value.data === undefined || hasOwn(value, "data");
3770
- }
3771
-
3772
- export function parseJsonRpcMessage(line: string): ParsedJsonRpcMessage {
3773
- let parsed: unknown;
3774
- try {
3775
- parsed = JSON.parse(line);
3776
- } catch {
3777
- return {
3778
- type: "invalid",
3779
- id: null,
3780
- error: parseError(),
3781
- };
3782
- }
3783
-
3784
- return parseJsonRpcPayload(parsed);
3785
- }
3786
-
3787
- function parseJsonRpcPayload(parsed: unknown): ParsedJsonRpcMessage {
3788
- if (!isObjectRecord(parsed)) {
3789
- return {
3790
- type: "invalid",
3791
- id: null,
3792
- error: invalidRequest(),
3793
- };
3794
- }
3795
-
3796
- const id = toRequestId(parsed.id);
3797
-
3798
- if (parsed.jsonrpc !== "2.0") {
3799
- return {
3800
- type: "invalid",
3801
- id,
3802
- error: invalidRequest(),
3803
- };
3804
- }
3805
-
3806
- const hasMethod = hasOwn(parsed, "method");
3807
- const hasId = hasOwn(parsed, "id");
3808
-
3809
- if (hasMethod) {
3810
- if (typeof parsed.method !== "string") {
3811
- return {
3812
- type: "invalid",
3813
- id,
3814
- error: invalidRequest(),
3815
- };
3816
- }
3817
-
3818
- if (hasId) {
3819
- if (!isRequestId(parsed.id)) {
3820
- return {
3821
- type: "invalid",
3822
- id: null,
3823
- error: invalidRequest(),
3824
- };
3825
- }
3826
-
3827
- const request: JsonRpcRequest = {
3828
- jsonrpc: "2.0",
3829
- id: parsed.id,
3830
- method: parsed.method,
3831
- };
3832
-
3833
- if (hasOwn(parsed, "params")) {
3834
- request.params = parsed.params;
3835
- }
3836
-
3837
- return {
3838
- type: "request",
3839
- message: request,
3840
- };
3841
- }
3842
-
3843
- const notification: JsonRpcNotification = {
3844
- jsonrpc: "2.0",
3845
- method: parsed.method,
3846
- };
3847
-
3848
- if (hasOwn(parsed, "params")) {
3849
- notification.params = parsed.params;
3850
- }
3851
-
3852
- return {
3853
- type: "notification",
3854
- message: notification,
3855
- };
3856
- }
3857
-
3858
- if (!hasId || !isRequestId(parsed.id)) {
3859
- return {
3860
- type: "invalid",
3861
- id,
3862
- error: invalidRequest(),
3863
- };
3864
- }
3865
-
3866
- const hasResult = hasOwn(parsed, "result");
3867
- const hasError = hasOwn(parsed, "error");
3868
-
3869
- if (hasResult === hasError) {
3870
- return {
3871
- type: "invalid",
3872
- id: parsed.id,
3873
- error: invalidRequest(),
3874
- };
3875
- }
3876
-
3877
- if (hasResult) {
3878
- return {
3879
- type: "response",
3880
- message: {
3881
- jsonrpc: "2.0",
3882
- id: parsed.id,
3883
- result: parsed.result,
3884
- },
3885
- };
3886
- }
3887
-
3888
- if (!isJsonRpcErrorObject(parsed.error)) {
3889
- return {
3890
- type: "invalid",
3891
- id: parsed.id,
3892
- error: invalidRequest(),
3893
- };
3894
- }
3895
-
3896
- return {
3897
- type: "response",
3898
- message: {
3899
- jsonrpc: "2.0",
3900
- id: parsed.id,
3901
- error: parsed.error,
3902
- },
3903
- };
3904
- }