@contextvm/mcp-sdk 1.27.1-contextvm.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +141 -0
  3. package/dist/cjs/client/index.d.ts +588 -0
  4. package/dist/cjs/client/index.d.ts.map +1 -0
  5. package/dist/cjs/client/index.js +629 -0
  6. package/dist/cjs/client/index.js.map +1 -0
  7. package/dist/cjs/client/stdio.d.ts +77 -0
  8. package/dist/cjs/client/stdio.d.ts.map +1 -0
  9. package/dist/cjs/client/stdio.js +199 -0
  10. package/dist/cjs/client/stdio.js.map +1 -0
  11. package/dist/cjs/experimental/index.d.ts +13 -0
  12. package/dist/cjs/experimental/index.d.ts.map +1 -0
  13. package/dist/cjs/experimental/index.js +29 -0
  14. package/dist/cjs/experimental/index.js.map +1 -0
  15. package/dist/cjs/experimental/tasks/client.d.ts +121 -0
  16. package/dist/cjs/experimental/tasks/client.d.ts.map +1 -0
  17. package/dist/cjs/experimental/tasks/client.js +188 -0
  18. package/dist/cjs/experimental/tasks/client.js.map +1 -0
  19. package/dist/cjs/experimental/tasks/helpers.d.ts +47 -0
  20. package/dist/cjs/experimental/tasks/helpers.d.ts.map +1 -0
  21. package/dist/cjs/experimental/tasks/helpers.js +68 -0
  22. package/dist/cjs/experimental/tasks/helpers.js.map +1 -0
  23. package/dist/cjs/experimental/tasks/index.d.ts +16 -0
  24. package/dist/cjs/experimental/tasks/index.d.ts.map +1 -0
  25. package/dist/cjs/experimental/tasks/index.js +39 -0
  26. package/dist/cjs/experimental/tasks/index.js.map +1 -0
  27. package/dist/cjs/experimental/tasks/interfaces.d.ts +232 -0
  28. package/dist/cjs/experimental/tasks/interfaces.d.ts.map +1 -0
  29. package/dist/cjs/experimental/tasks/interfaces.js +19 -0
  30. package/dist/cjs/experimental/tasks/interfaces.js.map +1 -0
  31. package/dist/cjs/experimental/tasks/mcp-server.d.ts +77 -0
  32. package/dist/cjs/experimental/tasks/mcp-server.d.ts.map +1 -0
  33. package/dist/cjs/experimental/tasks/mcp-server.js +36 -0
  34. package/dist/cjs/experimental/tasks/mcp-server.js.map +1 -0
  35. package/dist/cjs/experimental/tasks/server.d.ts +170 -0
  36. package/dist/cjs/experimental/tasks/server.d.ts.map +1 -0
  37. package/dist/cjs/experimental/tasks/server.js +250 -0
  38. package/dist/cjs/experimental/tasks/server.js.map +1 -0
  39. package/dist/cjs/experimental/tasks/stores/in-memory.d.ts +94 -0
  40. package/dist/cjs/experimental/tasks/stores/in-memory.d.ts.map +1 -0
  41. package/dist/cjs/experimental/tasks/stores/in-memory.js +251 -0
  42. package/dist/cjs/experimental/tasks/stores/in-memory.js.map +1 -0
  43. package/dist/cjs/experimental/tasks/types.d.ts +10 -0
  44. package/dist/cjs/experimental/tasks/types.d.ts.map +1 -0
  45. package/dist/cjs/experimental/tasks/types.js +28 -0
  46. package/dist/cjs/experimental/tasks/types.js.map +1 -0
  47. package/dist/cjs/inMemory.d.ts +31 -0
  48. package/dist/cjs/inMemory.d.ts.map +1 -0
  49. package/dist/cjs/inMemory.js +51 -0
  50. package/dist/cjs/inMemory.js.map +1 -0
  51. package/dist/cjs/package.json +1 -0
  52. package/dist/cjs/server/completable.d.ts +38 -0
  53. package/dist/cjs/server/completable.d.ts.map +1 -0
  54. package/dist/cjs/server/completable.js +48 -0
  55. package/dist/cjs/server/completable.js.map +1 -0
  56. package/dist/cjs/server/index.d.ts +196 -0
  57. package/dist/cjs/server/index.d.ts.map +1 -0
  58. package/dist/cjs/server/index.js +444 -0
  59. package/dist/cjs/server/index.js.map +1 -0
  60. package/dist/cjs/server/mcp.d.ts +364 -0
  61. package/dist/cjs/server/mcp.d.ts.map +1 -0
  62. package/dist/cjs/server/mcp.js +918 -0
  63. package/dist/cjs/server/mcp.js.map +1 -0
  64. package/dist/cjs/server/stdio.d.ts +28 -0
  65. package/dist/cjs/server/stdio.d.ts.map +1 -0
  66. package/dist/cjs/server/stdio.js +82 -0
  67. package/dist/cjs/server/stdio.js.map +1 -0
  68. package/dist/cjs/server/zod-compat.d.ts +84 -0
  69. package/dist/cjs/server/zod-compat.d.ts.map +1 -0
  70. package/dist/cjs/server/zod-compat.js +244 -0
  71. package/dist/cjs/server/zod-compat.js.map +1 -0
  72. package/dist/cjs/server/zod-json-schema-compat.d.ts +12 -0
  73. package/dist/cjs/server/zod-json-schema-compat.d.ts.map +1 -0
  74. package/dist/cjs/server/zod-json-schema-compat.js +79 -0
  75. package/dist/cjs/server/zod-json-schema-compat.js.map +1 -0
  76. package/dist/cjs/shared/auth-info.d.ts +32 -0
  77. package/dist/cjs/shared/auth-info.d.ts.map +1 -0
  78. package/dist/cjs/shared/auth-info.js +3 -0
  79. package/dist/cjs/shared/auth-info.js.map +1 -0
  80. package/dist/cjs/shared/metadataUtils.d.ts +16 -0
  81. package/dist/cjs/shared/metadataUtils.d.ts.map +1 -0
  82. package/dist/cjs/shared/metadataUtils.js +25 -0
  83. package/dist/cjs/shared/metadataUtils.js.map +1 -0
  84. package/dist/cjs/shared/protocol.d.ts +443 -0
  85. package/dist/cjs/shared/protocol.d.ts.map +1 -0
  86. package/dist/cjs/shared/protocol.js +1104 -0
  87. package/dist/cjs/shared/protocol.js.map +1 -0
  88. package/dist/cjs/shared/responseMessage.d.ts +45 -0
  89. package/dist/cjs/shared/responseMessage.d.ts.map +1 -0
  90. package/dist/cjs/shared/responseMessage.js +23 -0
  91. package/dist/cjs/shared/responseMessage.js.map +1 -0
  92. package/dist/cjs/shared/stdio.d.ts +13 -0
  93. package/dist/cjs/shared/stdio.d.ts.map +1 -0
  94. package/dist/cjs/shared/stdio.js +37 -0
  95. package/dist/cjs/shared/stdio.js.map +1 -0
  96. package/dist/cjs/shared/toolNameValidation.d.ts +31 -0
  97. package/dist/cjs/shared/toolNameValidation.d.ts.map +1 -0
  98. package/dist/cjs/shared/toolNameValidation.js +97 -0
  99. package/dist/cjs/shared/toolNameValidation.js.map +1 -0
  100. package/dist/cjs/shared/transport.d.ts +89 -0
  101. package/dist/cjs/shared/transport.d.ts.map +1 -0
  102. package/dist/cjs/shared/transport.js +43 -0
  103. package/dist/cjs/shared/transport.js.map +1 -0
  104. package/dist/cjs/shared/uriTemplate.d.ts +25 -0
  105. package/dist/cjs/shared/uriTemplate.d.ts.map +1 -0
  106. package/dist/cjs/shared/uriTemplate.js +243 -0
  107. package/dist/cjs/shared/uriTemplate.js.map +1 -0
  108. package/dist/cjs/spec.types.d.ts +2299 -0
  109. package/dist/cjs/spec.types.d.ts.map +1 -0
  110. package/dist/cjs/spec.types.js +27 -0
  111. package/dist/cjs/spec.types.js.map +1 -0
  112. package/dist/cjs/types.d.ts +8137 -0
  113. package/dist/cjs/types.d.ts.map +1 -0
  114. package/dist/cjs/types.js +2092 -0
  115. package/dist/cjs/types.js.map +1 -0
  116. package/dist/cjs/validation/ajv-provider.d.ts +53 -0
  117. package/dist/cjs/validation/ajv-provider.d.ts.map +1 -0
  118. package/dist/cjs/validation/ajv-provider.js +94 -0
  119. package/dist/cjs/validation/ajv-provider.js.map +1 -0
  120. package/dist/cjs/validation/cfworker-provider.d.ts +51 -0
  121. package/dist/cjs/validation/cfworker-provider.d.ts.map +1 -0
  122. package/dist/cjs/validation/cfworker-provider.js +69 -0
  123. package/dist/cjs/validation/cfworker-provider.js.map +1 -0
  124. package/dist/cjs/validation/index.d.ts +29 -0
  125. package/dist/cjs/validation/index.d.ts.map +1 -0
  126. package/dist/cjs/validation/index.js +30 -0
  127. package/dist/cjs/validation/index.js.map +1 -0
  128. package/dist/cjs/validation/types.d.ts +65 -0
  129. package/dist/cjs/validation/types.d.ts.map +1 -0
  130. package/dist/cjs/validation/types.js +3 -0
  131. package/dist/cjs/validation/types.js.map +1 -0
  132. package/dist/esm/client/index.d.ts +588 -0
  133. package/dist/esm/client/index.d.ts.map +1 -0
  134. package/dist/esm/client/index.js +624 -0
  135. package/dist/esm/client/index.js.map +1 -0
  136. package/dist/esm/client/stdio.d.ts +77 -0
  137. package/dist/esm/client/stdio.d.ts.map +1 -0
  138. package/dist/esm/client/stdio.js +191 -0
  139. package/dist/esm/client/stdio.js.map +1 -0
  140. package/dist/esm/experimental/index.d.ts +13 -0
  141. package/dist/esm/experimental/index.d.ts.map +1 -0
  142. package/dist/esm/experimental/index.js +13 -0
  143. package/dist/esm/experimental/index.js.map +1 -0
  144. package/dist/esm/experimental/tasks/client.d.ts +121 -0
  145. package/dist/esm/experimental/tasks/client.d.ts.map +1 -0
  146. package/dist/esm/experimental/tasks/client.js +184 -0
  147. package/dist/esm/experimental/tasks/client.js.map +1 -0
  148. package/dist/esm/experimental/tasks/helpers.d.ts +47 -0
  149. package/dist/esm/experimental/tasks/helpers.d.ts.map +1 -0
  150. package/dist/esm/experimental/tasks/helpers.js +64 -0
  151. package/dist/esm/experimental/tasks/helpers.js.map +1 -0
  152. package/dist/esm/experimental/tasks/index.d.ts +16 -0
  153. package/dist/esm/experimental/tasks/index.d.ts.map +1 -0
  154. package/dist/esm/experimental/tasks/index.js +20 -0
  155. package/dist/esm/experimental/tasks/index.js.map +1 -0
  156. package/dist/esm/experimental/tasks/interfaces.d.ts +232 -0
  157. package/dist/esm/experimental/tasks/interfaces.d.ts.map +1 -0
  158. package/dist/esm/experimental/tasks/interfaces.js +16 -0
  159. package/dist/esm/experimental/tasks/interfaces.js.map +1 -0
  160. package/dist/esm/experimental/tasks/mcp-server.d.ts +77 -0
  161. package/dist/esm/experimental/tasks/mcp-server.d.ts.map +1 -0
  162. package/dist/esm/experimental/tasks/mcp-server.js +32 -0
  163. package/dist/esm/experimental/tasks/mcp-server.js.map +1 -0
  164. package/dist/esm/experimental/tasks/server.d.ts +170 -0
  165. package/dist/esm/experimental/tasks/server.d.ts.map +1 -0
  166. package/dist/esm/experimental/tasks/server.js +246 -0
  167. package/dist/esm/experimental/tasks/server.js.map +1 -0
  168. package/dist/esm/experimental/tasks/stores/in-memory.d.ts +94 -0
  169. package/dist/esm/experimental/tasks/stores/in-memory.d.ts.map +1 -0
  170. package/dist/esm/experimental/tasks/stores/in-memory.js +246 -0
  171. package/dist/esm/experimental/tasks/stores/in-memory.js.map +1 -0
  172. package/dist/esm/experimental/tasks/types.d.ts +10 -0
  173. package/dist/esm/experimental/tasks/types.d.ts.map +1 -0
  174. package/dist/esm/experimental/tasks/types.js +10 -0
  175. package/dist/esm/experimental/tasks/types.js.map +1 -0
  176. package/dist/esm/inMemory.d.ts +31 -0
  177. package/dist/esm/inMemory.d.ts.map +1 -0
  178. package/dist/esm/inMemory.js +47 -0
  179. package/dist/esm/inMemory.js.map +1 -0
  180. package/dist/esm/package.json +1 -0
  181. package/dist/esm/server/completable.d.ts +38 -0
  182. package/dist/esm/server/completable.d.ts.map +1 -0
  183. package/dist/esm/server/completable.js +41 -0
  184. package/dist/esm/server/completable.js.map +1 -0
  185. package/dist/esm/server/index.d.ts +196 -0
  186. package/dist/esm/server/index.d.ts.map +1 -0
  187. package/dist/esm/server/index.js +440 -0
  188. package/dist/esm/server/index.js.map +1 -0
  189. package/dist/esm/server/mcp.d.ts +364 -0
  190. package/dist/esm/server/mcp.d.ts.map +1 -0
  191. package/dist/esm/server/mcp.js +913 -0
  192. package/dist/esm/server/mcp.js.map +1 -0
  193. package/dist/esm/server/stdio.d.ts +28 -0
  194. package/dist/esm/server/stdio.d.ts.map +1 -0
  195. package/dist/esm/server/stdio.js +75 -0
  196. package/dist/esm/server/stdio.js.map +1 -0
  197. package/dist/esm/server/zod-compat.d.ts +84 -0
  198. package/dist/esm/server/zod-compat.d.ts.map +1 -0
  199. package/dist/esm/server/zod-compat.js +209 -0
  200. package/dist/esm/server/zod-compat.js.map +1 -0
  201. package/dist/esm/server/zod-json-schema-compat.d.ts +12 -0
  202. package/dist/esm/server/zod-json-schema-compat.d.ts.map +1 -0
  203. package/dist/esm/server/zod-json-schema-compat.js +51 -0
  204. package/dist/esm/server/zod-json-schema-compat.js.map +1 -0
  205. package/dist/esm/shared/auth-info.d.ts +32 -0
  206. package/dist/esm/shared/auth-info.d.ts.map +1 -0
  207. package/dist/esm/shared/auth-info.js +2 -0
  208. package/dist/esm/shared/auth-info.js.map +1 -0
  209. package/dist/esm/shared/metadataUtils.d.ts +16 -0
  210. package/dist/esm/shared/metadataUtils.d.ts.map +1 -0
  211. package/dist/esm/shared/metadataUtils.js +22 -0
  212. package/dist/esm/shared/metadataUtils.js.map +1 -0
  213. package/dist/esm/shared/protocol.d.ts +443 -0
  214. package/dist/esm/shared/protocol.d.ts.map +1 -0
  215. package/dist/esm/shared/protocol.js +1099 -0
  216. package/dist/esm/shared/protocol.js.map +1 -0
  217. package/dist/esm/shared/responseMessage.d.ts +45 -0
  218. package/dist/esm/shared/responseMessage.d.ts.map +1 -0
  219. package/dist/esm/shared/responseMessage.js +19 -0
  220. package/dist/esm/shared/responseMessage.js.map +1 -0
  221. package/dist/esm/shared/stdio.d.ts +13 -0
  222. package/dist/esm/shared/stdio.d.ts.map +1 -0
  223. package/dist/esm/shared/stdio.js +31 -0
  224. package/dist/esm/shared/stdio.js.map +1 -0
  225. package/dist/esm/shared/toolNameValidation.d.ts +31 -0
  226. package/dist/esm/shared/toolNameValidation.d.ts.map +1 -0
  227. package/dist/esm/shared/toolNameValidation.js +92 -0
  228. package/dist/esm/shared/toolNameValidation.js.map +1 -0
  229. package/dist/esm/shared/transport.d.ts +89 -0
  230. package/dist/esm/shared/transport.d.ts.map +1 -0
  231. package/dist/esm/shared/transport.js +39 -0
  232. package/dist/esm/shared/transport.js.map +1 -0
  233. package/dist/esm/shared/uriTemplate.d.ts +25 -0
  234. package/dist/esm/shared/uriTemplate.d.ts.map +1 -0
  235. package/dist/esm/shared/uriTemplate.js +239 -0
  236. package/dist/esm/shared/uriTemplate.js.map +1 -0
  237. package/dist/esm/spec.types.d.ts +2299 -0
  238. package/dist/esm/spec.types.d.ts.map +1 -0
  239. package/dist/esm/spec.types.js +24 -0
  240. package/dist/esm/spec.types.js.map +1 -0
  241. package/dist/esm/types.d.ts +8137 -0
  242. package/dist/esm/types.d.ts.map +1 -0
  243. package/dist/esm/types.js +2052 -0
  244. package/dist/esm/types.js.map +1 -0
  245. package/dist/esm/validation/ajv-provider.d.ts +53 -0
  246. package/dist/esm/validation/ajv-provider.d.ts.map +1 -0
  247. package/dist/esm/validation/ajv-provider.js +87 -0
  248. package/dist/esm/validation/ajv-provider.js.map +1 -0
  249. package/dist/esm/validation/cfworker-provider.d.ts +51 -0
  250. package/dist/esm/validation/cfworker-provider.d.ts.map +1 -0
  251. package/dist/esm/validation/cfworker-provider.js +65 -0
  252. package/dist/esm/validation/cfworker-provider.js.map +1 -0
  253. package/dist/esm/validation/index.d.ts +29 -0
  254. package/dist/esm/validation/index.d.ts.map +1 -0
  255. package/dist/esm/validation/index.js +29 -0
  256. package/dist/esm/validation/index.js.map +1 -0
  257. package/dist/esm/validation/types.d.ts +65 -0
  258. package/dist/esm/validation/types.d.ts.map +1 -0
  259. package/dist/esm/validation/types.js +2 -0
  260. package/dist/esm/validation/types.js.map +1 -0
  261. package/package.json +124 -0
@@ -0,0 +1,77 @@
1
+ import { IOType } from 'node:child_process';
2
+ import { Stream } from 'node:stream';
3
+ import { Transport } from '../shared/transport.js';
4
+ import { JSONRPCMessage } from '../types.js';
5
+ export type StdioServerParameters = {
6
+ /**
7
+ * The executable to run to start the server.
8
+ */
9
+ command: string;
10
+ /**
11
+ * Command line arguments to pass to the executable.
12
+ */
13
+ args?: string[];
14
+ /**
15
+ * The environment to use when spawning the process.
16
+ *
17
+ * If not specified, the result of getDefaultEnvironment() will be used.
18
+ */
19
+ env?: Record<string, string>;
20
+ /**
21
+ * How to handle stderr of the child process. This matches the semantics of Node's `child_process.spawn`.
22
+ *
23
+ * The default is "inherit", meaning messages to stderr will be printed to the parent process's stderr.
24
+ */
25
+ stderr?: IOType | Stream | number;
26
+ /**
27
+ * The working directory to use when spawning the process.
28
+ *
29
+ * If not specified, the current working directory will be inherited.
30
+ */
31
+ cwd?: string;
32
+ };
33
+ /**
34
+ * Environment variables to inherit by default, if an environment is not explicitly given.
35
+ */
36
+ export declare const DEFAULT_INHERITED_ENV_VARS: string[];
37
+ /**
38
+ * Returns a default environment object including only environment variables deemed safe to inherit.
39
+ */
40
+ export declare function getDefaultEnvironment(): Record<string, string>;
41
+ /**
42
+ * Client transport for stdio: this will connect to a server by spawning a process and communicating with it over stdin/stdout.
43
+ *
44
+ * This transport is only available in Node.js environments.
45
+ */
46
+ export declare class StdioClientTransport implements Transport {
47
+ private _process?;
48
+ private _readBuffer;
49
+ private _serverParams;
50
+ private _stderrStream;
51
+ onclose?: () => void;
52
+ onerror?: (error: Error) => void;
53
+ onmessage?: (message: JSONRPCMessage) => void;
54
+ constructor(server: StdioServerParameters);
55
+ /**
56
+ * Starts the server process and prepares to communicate with it.
57
+ */
58
+ start(): Promise<void>;
59
+ /**
60
+ * The stderr stream of the child process, if `StdioServerParameters.stderr` was set to "pipe" or "overlapped".
61
+ *
62
+ * If stderr piping was requested, a PassThrough stream is returned _immediately_, allowing callers to
63
+ * attach listeners before the start method is invoked. This prevents loss of any early
64
+ * error output emitted by the child process.
65
+ */
66
+ get stderr(): Stream | null;
67
+ /**
68
+ * The child process pid spawned by this transport.
69
+ *
70
+ * This is only available after the transport has been started.
71
+ */
72
+ get pid(): number | null;
73
+ private processReadBuffer;
74
+ close(): Promise<void>;
75
+ send(message: JSONRPCMessage): Promise<void>;
76
+ }
77
+ //# sourceMappingURL=stdio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/client/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EAAE,MAAM,EAAe,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,qBAAqB,GAAG;IAChC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAElC;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,UAiBuB,CAAC;AAE/D;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkB9D;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,SAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,aAAa,CAA4B;IAEjD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;gBAElC,MAAM,EAAE,qBAAqB;IAOzC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqD5B;;;;;;OAMG;IACH,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,CAM1B;IAED;;;;OAIG;IACH,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,CAEvB;IAED,OAAO,CAAC,iBAAiB;IAenB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC5B,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAc/C"}
@@ -0,0 +1,191 @@
1
+ import spawn from 'cross-spawn';
2
+ import process from 'node:process';
3
+ import { PassThrough } from 'node:stream';
4
+ import { ReadBuffer, serializeMessage } from '../shared/stdio.js';
5
+ /**
6
+ * Environment variables to inherit by default, if an environment is not explicitly given.
7
+ */
8
+ export const DEFAULT_INHERITED_ENV_VARS = process.platform === 'win32'
9
+ ? [
10
+ 'APPDATA',
11
+ 'HOMEDRIVE',
12
+ 'HOMEPATH',
13
+ 'LOCALAPPDATA',
14
+ 'PATH',
15
+ 'PROCESSOR_ARCHITECTURE',
16
+ 'SYSTEMDRIVE',
17
+ 'SYSTEMROOT',
18
+ 'TEMP',
19
+ 'USERNAME',
20
+ 'USERPROFILE',
21
+ 'PROGRAMFILES'
22
+ ]
23
+ : /* list inspired by the default env inheritance of sudo */
24
+ ['HOME', 'LOGNAME', 'PATH', 'SHELL', 'TERM', 'USER'];
25
+ /**
26
+ * Returns a default environment object including only environment variables deemed safe to inherit.
27
+ */
28
+ export function getDefaultEnvironment() {
29
+ const env = {};
30
+ for (const key of DEFAULT_INHERITED_ENV_VARS) {
31
+ const value = process.env[key];
32
+ if (value === undefined) {
33
+ continue;
34
+ }
35
+ if (value.startsWith('()')) {
36
+ // Skip functions, which are a security risk.
37
+ continue;
38
+ }
39
+ env[key] = value;
40
+ }
41
+ return env;
42
+ }
43
+ /**
44
+ * Client transport for stdio: this will connect to a server by spawning a process and communicating with it over stdin/stdout.
45
+ *
46
+ * This transport is only available in Node.js environments.
47
+ */
48
+ export class StdioClientTransport {
49
+ constructor(server) {
50
+ this._readBuffer = new ReadBuffer();
51
+ this._stderrStream = null;
52
+ this._serverParams = server;
53
+ if (server.stderr === 'pipe' || server.stderr === 'overlapped') {
54
+ this._stderrStream = new PassThrough();
55
+ }
56
+ }
57
+ /**
58
+ * Starts the server process and prepares to communicate with it.
59
+ */
60
+ async start() {
61
+ if (this._process) {
62
+ throw new Error('StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.');
63
+ }
64
+ return new Promise((resolve, reject) => {
65
+ this._process = spawn(this._serverParams.command, this._serverParams.args ?? [], {
66
+ // merge default env with server env because mcp server needs some env vars
67
+ env: {
68
+ ...getDefaultEnvironment(),
69
+ ...this._serverParams.env
70
+ },
71
+ stdio: ['pipe', 'pipe', this._serverParams.stderr ?? 'inherit'],
72
+ shell: false,
73
+ windowsHide: process.platform === 'win32' && isElectron(),
74
+ cwd: this._serverParams.cwd
75
+ });
76
+ this._process.on('error', error => {
77
+ reject(error);
78
+ this.onerror?.(error);
79
+ });
80
+ this._process.on('spawn', () => {
81
+ resolve();
82
+ });
83
+ this._process.on('close', _code => {
84
+ this._process = undefined;
85
+ this.onclose?.();
86
+ });
87
+ this._process.stdin?.on('error', error => {
88
+ this.onerror?.(error);
89
+ });
90
+ this._process.stdout?.on('data', chunk => {
91
+ this._readBuffer.append(chunk);
92
+ this.processReadBuffer();
93
+ });
94
+ this._process.stdout?.on('error', error => {
95
+ this.onerror?.(error);
96
+ });
97
+ if (this._stderrStream && this._process.stderr) {
98
+ this._process.stderr.pipe(this._stderrStream);
99
+ }
100
+ });
101
+ }
102
+ /**
103
+ * The stderr stream of the child process, if `StdioServerParameters.stderr` was set to "pipe" or "overlapped".
104
+ *
105
+ * If stderr piping was requested, a PassThrough stream is returned _immediately_, allowing callers to
106
+ * attach listeners before the start method is invoked. This prevents loss of any early
107
+ * error output emitted by the child process.
108
+ */
109
+ get stderr() {
110
+ if (this._stderrStream) {
111
+ return this._stderrStream;
112
+ }
113
+ return this._process?.stderr ?? null;
114
+ }
115
+ /**
116
+ * The child process pid spawned by this transport.
117
+ *
118
+ * This is only available after the transport has been started.
119
+ */
120
+ get pid() {
121
+ return this._process?.pid ?? null;
122
+ }
123
+ processReadBuffer() {
124
+ while (true) {
125
+ try {
126
+ const message = this._readBuffer.readMessage();
127
+ if (message === null) {
128
+ break;
129
+ }
130
+ this.onmessage?.(message);
131
+ }
132
+ catch (error) {
133
+ this.onerror?.(error);
134
+ }
135
+ }
136
+ }
137
+ async close() {
138
+ if (this._process) {
139
+ const processToClose = this._process;
140
+ this._process = undefined;
141
+ const closePromise = new Promise(resolve => {
142
+ processToClose.once('close', () => {
143
+ resolve();
144
+ });
145
+ });
146
+ try {
147
+ processToClose.stdin?.end();
148
+ }
149
+ catch {
150
+ // ignore
151
+ }
152
+ await Promise.race([closePromise, new Promise(resolve => setTimeout(resolve, 2000).unref())]);
153
+ if (processToClose.exitCode === null) {
154
+ try {
155
+ processToClose.kill('SIGTERM');
156
+ }
157
+ catch {
158
+ // ignore
159
+ }
160
+ await Promise.race([closePromise, new Promise(resolve => setTimeout(resolve, 2000).unref())]);
161
+ }
162
+ if (processToClose.exitCode === null) {
163
+ try {
164
+ processToClose.kill('SIGKILL');
165
+ }
166
+ catch {
167
+ // ignore
168
+ }
169
+ }
170
+ }
171
+ this._readBuffer.clear();
172
+ }
173
+ send(message) {
174
+ return new Promise(resolve => {
175
+ if (!this._process?.stdin) {
176
+ throw new Error('Not connected');
177
+ }
178
+ const json = serializeMessage(message);
179
+ if (this._process.stdin.write(json)) {
180
+ resolve();
181
+ }
182
+ else {
183
+ this._process.stdin.once('drain', resolve);
184
+ }
185
+ });
186
+ }
187
+ }
188
+ function isElectron() {
189
+ return 'type' in process;
190
+ }
191
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/client/stdio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Experimental MCP SDK features.
3
+ * WARNING: These APIs are experimental and may change without notice.
4
+ *
5
+ * Import experimental features from this module:
6
+ * ```typescript
7
+ * import { TaskStore, InMemoryTaskStore } from '@modelcontextprotocol/sdk/experimental';
8
+ * ```
9
+ *
10
+ * @experimental
11
+ */
12
+ export * from './tasks/index.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/experimental/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Experimental MCP SDK features.
3
+ * WARNING: These APIs are experimental and may change without notice.
4
+ *
5
+ * Import experimental features from this module:
6
+ * ```typescript
7
+ * import { TaskStore, InMemoryTaskStore } from '@modelcontextprotocol/sdk/experimental';
8
+ * ```
9
+ *
10
+ * @experimental
11
+ */
12
+ export * from './tasks/index.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/experimental/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Experimental client task features for MCP SDK.
3
+ * WARNING: These APIs are experimental and may change without notice.
4
+ *
5
+ * @experimental
6
+ */
7
+ import type { Client } from '../../client/index.js';
8
+ import type { RequestOptions } from '../../shared/protocol.js';
9
+ import type { ResponseMessage } from '../../shared/responseMessage.js';
10
+ import type { AnyObjectSchema, SchemaOutput } from '../../server/zod-compat.js';
11
+ import type { CallToolRequest, ClientRequest, Notification, Request, Result } from '../../types.js';
12
+ import { CallToolResultSchema, type CompatibilityCallToolResultSchema } from '../../types.js';
13
+ import type { GetTaskResult, ListTasksResult, CancelTaskResult } from './types.js';
14
+ /**
15
+ * Experimental task features for MCP clients.
16
+ *
17
+ * Access via `client.experimental.tasks`:
18
+ * ```typescript
19
+ * const stream = client.experimental.tasks.callToolStream({ name: 'tool', arguments: {} });
20
+ * const task = await client.experimental.tasks.getTask(taskId);
21
+ * ```
22
+ *
23
+ * @experimental
24
+ */
25
+ export declare class ExperimentalClientTasks<RequestT extends Request = Request, NotificationT extends Notification = Notification, ResultT extends Result = Result> {
26
+ private readonly _client;
27
+ constructor(_client: Client<RequestT, NotificationT, ResultT>);
28
+ /**
29
+ * Calls a tool and returns an AsyncGenerator that yields response messages.
30
+ * The generator is guaranteed to end with either a 'result' or 'error' message.
31
+ *
32
+ * This method provides streaming access to tool execution, allowing you to
33
+ * observe intermediate task status updates for long-running tool calls.
34
+ * Automatically validates structured output if the tool has an outputSchema.
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * const stream = client.experimental.tasks.callToolStream({ name: 'myTool', arguments: {} });
39
+ * for await (const message of stream) {
40
+ * switch (message.type) {
41
+ * case 'taskCreated':
42
+ * console.log('Tool execution started:', message.task.taskId);
43
+ * break;
44
+ * case 'taskStatus':
45
+ * console.log('Tool status:', message.task.status);
46
+ * break;
47
+ * case 'result':
48
+ * console.log('Tool result:', message.result);
49
+ * break;
50
+ * case 'error':
51
+ * console.error('Tool error:', message.error);
52
+ * break;
53
+ * }
54
+ * }
55
+ * ```
56
+ *
57
+ * @param params - Tool call parameters (name and arguments)
58
+ * @param resultSchema - Zod schema for validating the result (defaults to CallToolResultSchema)
59
+ * @param options - Optional request options (timeout, signal, task creation params, etc.)
60
+ * @returns AsyncGenerator that yields ResponseMessage objects
61
+ *
62
+ * @experimental
63
+ */
64
+ callToolStream<T extends typeof CallToolResultSchema | typeof CompatibilityCallToolResultSchema>(params: CallToolRequest['params'], resultSchema?: T, options?: RequestOptions): AsyncGenerator<ResponseMessage<SchemaOutput<T>>, void, void>;
65
+ /**
66
+ * Gets the current status of a task.
67
+ *
68
+ * @param taskId - The task identifier
69
+ * @param options - Optional request options
70
+ * @returns The task status
71
+ *
72
+ * @experimental
73
+ */
74
+ getTask(taskId: string, options?: RequestOptions): Promise<GetTaskResult>;
75
+ /**
76
+ * Retrieves the result of a completed task.
77
+ *
78
+ * @param taskId - The task identifier
79
+ * @param resultSchema - Zod schema for validating the result
80
+ * @param options - Optional request options
81
+ * @returns The task result
82
+ *
83
+ * @experimental
84
+ */
85
+ getTaskResult<T extends AnyObjectSchema>(taskId: string, resultSchema?: T, options?: RequestOptions): Promise<SchemaOutput<T>>;
86
+ /**
87
+ * Lists tasks with optional pagination.
88
+ *
89
+ * @param cursor - Optional pagination cursor
90
+ * @param options - Optional request options
91
+ * @returns List of tasks with optional next cursor
92
+ *
93
+ * @experimental
94
+ */
95
+ listTasks(cursor?: string, options?: RequestOptions): Promise<ListTasksResult>;
96
+ /**
97
+ * Cancels a running task.
98
+ *
99
+ * @param taskId - The task identifier
100
+ * @param options - Optional request options
101
+ *
102
+ * @experimental
103
+ */
104
+ cancelTask(taskId: string, options?: RequestOptions): Promise<CancelTaskResult>;
105
+ /**
106
+ * Sends a request and returns an AsyncGenerator that yields response messages.
107
+ * The generator is guaranteed to end with either a 'result' or 'error' message.
108
+ *
109
+ * This method provides streaming access to request processing, allowing you to
110
+ * observe intermediate task status updates for task-augmented requests.
111
+ *
112
+ * @param request - The request to send
113
+ * @param resultSchema - Zod schema for validating the result
114
+ * @param options - Optional request options (timeout, signal, task creation params, etc.)
115
+ * @returns AsyncGenerator that yields ResponseMessage objects
116
+ *
117
+ * @experimental
118
+ */
119
+ requestStream<T extends AnyObjectSchema>(request: ClientRequest | RequestT, resultSchema: T, options?: RequestOptions): AsyncGenerator<ResponseMessage<SchemaOutput<T>>, void, void>;
120
+ }
121
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/experimental/tasks/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,oBAAoB,EAAE,KAAK,iCAAiC,EAAuB,MAAM,gBAAgB,CAAC;AAEnH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAgBnF;;;;;;;;;;GAUG;AACH,qBAAa,uBAAuB,CAChC,QAAQ,SAAS,OAAO,GAAG,OAAO,EAClC,aAAa,SAAS,YAAY,GAAG,YAAY,EACjD,OAAO,SAAS,MAAM,GAAG,MAAM;IAEnB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC;IAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACI,cAAc,CAAC,CAAC,SAAS,OAAO,oBAAoB,GAAG,OAAO,iCAAiC,EAClG,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,EACjC,YAAY,GAAE,CAA6B,EAC3C,OAAO,CAAC,EAAE,cAAc,GACzB,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAyE/D;;;;;;;;OAQG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAM/E;;;;;;;;;OASG;IACG,aAAa,CAAC,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAapI;;;;;;;;OAQG;IACG,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IASpF;;;;;;;OAOG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;IASrF;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,CAAC,SAAS,eAAe,EACnC,OAAO,EAAE,aAAa,GAAG,QAAQ,EACjC,YAAY,EAAE,CAAC,EACf,OAAO,CAAC,EAAE,cAAc,GACzB,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;CAWlE"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Experimental client task features for MCP SDK.
3
+ * WARNING: These APIs are experimental and may change without notice.
4
+ *
5
+ * @experimental
6
+ */
7
+ import { CallToolResultSchema, McpError, ErrorCode } from '../../types.js';
8
+ /**
9
+ * Experimental task features for MCP clients.
10
+ *
11
+ * Access via `client.experimental.tasks`:
12
+ * ```typescript
13
+ * const stream = client.experimental.tasks.callToolStream({ name: 'tool', arguments: {} });
14
+ * const task = await client.experimental.tasks.getTask(taskId);
15
+ * ```
16
+ *
17
+ * @experimental
18
+ */
19
+ export class ExperimentalClientTasks {
20
+ constructor(_client) {
21
+ this._client = _client;
22
+ }
23
+ /**
24
+ * Calls a tool and returns an AsyncGenerator that yields response messages.
25
+ * The generator is guaranteed to end with either a 'result' or 'error' message.
26
+ *
27
+ * This method provides streaming access to tool execution, allowing you to
28
+ * observe intermediate task status updates for long-running tool calls.
29
+ * Automatically validates structured output if the tool has an outputSchema.
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * const stream = client.experimental.tasks.callToolStream({ name: 'myTool', arguments: {} });
34
+ * for await (const message of stream) {
35
+ * switch (message.type) {
36
+ * case 'taskCreated':
37
+ * console.log('Tool execution started:', message.task.taskId);
38
+ * break;
39
+ * case 'taskStatus':
40
+ * console.log('Tool status:', message.task.status);
41
+ * break;
42
+ * case 'result':
43
+ * console.log('Tool result:', message.result);
44
+ * break;
45
+ * case 'error':
46
+ * console.error('Tool error:', message.error);
47
+ * break;
48
+ * }
49
+ * }
50
+ * ```
51
+ *
52
+ * @param params - Tool call parameters (name and arguments)
53
+ * @param resultSchema - Zod schema for validating the result (defaults to CallToolResultSchema)
54
+ * @param options - Optional request options (timeout, signal, task creation params, etc.)
55
+ * @returns AsyncGenerator that yields ResponseMessage objects
56
+ *
57
+ * @experimental
58
+ */
59
+ async *callToolStream(params, resultSchema = CallToolResultSchema, options) {
60
+ // Access Client's internal methods
61
+ const clientInternal = this._client;
62
+ // Add task creation parameters if server supports it and not explicitly provided
63
+ const optionsWithTask = {
64
+ ...options,
65
+ // We check if the tool is known to be a task during auto-configuration, but assume
66
+ // the caller knows what they're doing if they pass this explicitly
67
+ task: options?.task ?? (clientInternal.isToolTask(params.name) ? {} : undefined)
68
+ };
69
+ const stream = clientInternal.requestStream({ method: 'tools/call', params }, resultSchema, optionsWithTask);
70
+ // Get the validator for this tool (if it has an output schema)
71
+ const validator = clientInternal.getToolOutputValidator(params.name);
72
+ // Iterate through the stream and validate the final result if needed
73
+ for await (const message of stream) {
74
+ // If this is a result message and the tool has an output schema, validate it
75
+ if (message.type === 'result' && validator) {
76
+ const result = message.result;
77
+ // If tool has outputSchema, it MUST return structuredContent (unless it's an error)
78
+ if (!result.structuredContent && !result.isError) {
79
+ yield {
80
+ type: 'error',
81
+ error: new McpError(ErrorCode.InvalidRequest, `Tool ${params.name} has an output schema but did not return structured content`)
82
+ };
83
+ return;
84
+ }
85
+ // Only validate structured content if present (not when there's an error)
86
+ if (result.structuredContent) {
87
+ try {
88
+ // Validate the structured content against the schema
89
+ const validationResult = validator(result.structuredContent);
90
+ if (!validationResult.valid) {
91
+ yield {
92
+ type: 'error',
93
+ error: new McpError(ErrorCode.InvalidParams, `Structured content does not match the tool's output schema: ${validationResult.errorMessage}`)
94
+ };
95
+ return;
96
+ }
97
+ }
98
+ catch (error) {
99
+ if (error instanceof McpError) {
100
+ yield { type: 'error', error };
101
+ return;
102
+ }
103
+ yield {
104
+ type: 'error',
105
+ error: new McpError(ErrorCode.InvalidParams, `Failed to validate structured content: ${error instanceof Error ? error.message : String(error)}`)
106
+ };
107
+ return;
108
+ }
109
+ }
110
+ }
111
+ // Yield the message (either validated result or any other message type)
112
+ yield message;
113
+ }
114
+ }
115
+ /**
116
+ * Gets the current status of a task.
117
+ *
118
+ * @param taskId - The task identifier
119
+ * @param options - Optional request options
120
+ * @returns The task status
121
+ *
122
+ * @experimental
123
+ */
124
+ async getTask(taskId, options) {
125
+ return this._client.getTask({ taskId }, options);
126
+ }
127
+ /**
128
+ * Retrieves the result of a completed task.
129
+ *
130
+ * @param taskId - The task identifier
131
+ * @param resultSchema - Zod schema for validating the result
132
+ * @param options - Optional request options
133
+ * @returns The task result
134
+ *
135
+ * @experimental
136
+ */
137
+ async getTaskResult(taskId, resultSchema, options) {
138
+ // Delegate to the client's underlying Protocol method
139
+ return this._client.getTaskResult({ taskId }, resultSchema, options);
140
+ }
141
+ /**
142
+ * Lists tasks with optional pagination.
143
+ *
144
+ * @param cursor - Optional pagination cursor
145
+ * @param options - Optional request options
146
+ * @returns List of tasks with optional next cursor
147
+ *
148
+ * @experimental
149
+ */
150
+ async listTasks(cursor, options) {
151
+ // Delegate to the client's underlying Protocol method
152
+ return this._client.listTasks(cursor ? { cursor } : undefined, options);
153
+ }
154
+ /**
155
+ * Cancels a running task.
156
+ *
157
+ * @param taskId - The task identifier
158
+ * @param options - Optional request options
159
+ *
160
+ * @experimental
161
+ */
162
+ async cancelTask(taskId, options) {
163
+ // Delegate to the client's underlying Protocol method
164
+ return this._client.cancelTask({ taskId }, options);
165
+ }
166
+ /**
167
+ * Sends a request and returns an AsyncGenerator that yields response messages.
168
+ * The generator is guaranteed to end with either a 'result' or 'error' message.
169
+ *
170
+ * This method provides streaming access to request processing, allowing you to
171
+ * observe intermediate task status updates for task-augmented requests.
172
+ *
173
+ * @param request - The request to send
174
+ * @param resultSchema - Zod schema for validating the result
175
+ * @param options - Optional request options (timeout, signal, task creation params, etc.)
176
+ * @returns AsyncGenerator that yields ResponseMessage objects
177
+ *
178
+ * @experimental
179
+ */
180
+ requestStream(request, resultSchema, options) {
181
+ return this._client.requestStream(request, resultSchema, options);
182
+ }
183
+ }
184
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/experimental/tasks/client.ts"],"names":[],"mappings":"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"}