effect 4.0.5 → 4.0.7

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 (1177) hide show
  1. package/ai-docs/package.json +1 -1
  2. package/ai-docs/src/06_schedule/10_schedules.ts +5 -4
  3. package/ai-docs/tsconfig.json +3 -1
  4. package/dist/Arbitrary.d.ts +10 -2
  5. package/dist/Arbitrary.d.ts.map +1 -1
  6. package/dist/Arbitrary.js +2 -1
  7. package/dist/Arbitrary.js.map +1 -1
  8. package/dist/Array.d.ts +117 -52
  9. package/dist/Array.d.ts.map +1 -1
  10. package/dist/Array.js +41 -20
  11. package/dist/Array.js.map +1 -1
  12. package/dist/Bytes.d.ts +79 -0
  13. package/dist/Bytes.d.ts.map +1 -0
  14. package/dist/Bytes.js +109 -0
  15. package/dist/Bytes.js.map +1 -0
  16. package/dist/Channel.d.ts +181 -13
  17. package/dist/Channel.d.ts.map +1 -1
  18. package/dist/Channel.js +144 -34
  19. package/dist/Channel.js.map +1 -1
  20. package/dist/ChannelSchema.d.ts.map +1 -1
  21. package/dist/ChannelSchema.js.map +1 -1
  22. package/dist/Chunk.d.ts +39 -21
  23. package/dist/Chunk.d.ts.map +1 -1
  24. package/dist/Chunk.js +26 -17
  25. package/dist/Chunk.js.map +1 -1
  26. package/dist/Config.d.ts.map +1 -1
  27. package/dist/Config.js +8 -3
  28. package/dist/Config.js.map +1 -1
  29. package/dist/ConfigProvider.d.ts.map +1 -1
  30. package/dist/ConfigProvider.js +2 -1
  31. package/dist/ConfigProvider.js.map +1 -1
  32. package/dist/Cron.d.ts +2 -2
  33. package/dist/Cron.d.ts.map +1 -1
  34. package/dist/Cron.js +6 -3
  35. package/dist/Cron.js.map +1 -1
  36. package/dist/Data.d.ts +54 -235
  37. package/dist/Data.d.ts.map +1 -1
  38. package/dist/Data.js.map +1 -1
  39. package/dist/Duration.d.ts.map +1 -1
  40. package/dist/Duration.js +56 -16
  41. package/dist/Duration.js.map +1 -1
  42. package/dist/Effect.d.ts +488 -164
  43. package/dist/Effect.d.ts.map +1 -1
  44. package/dist/Effect.js +204 -38
  45. package/dist/Effect.js.map +1 -1
  46. package/dist/Equal.d.ts.map +1 -1
  47. package/dist/Equal.js +8 -1
  48. package/dist/Equal.js.map +1 -1
  49. package/dist/Equivalence.d.ts +2 -1
  50. package/dist/Equivalence.d.ts.map +1 -1
  51. package/dist/Equivalence.js +12 -8
  52. package/dist/Equivalence.js.map +1 -1
  53. package/dist/Exit.d.ts +27 -12
  54. package/dist/Exit.d.ts.map +1 -1
  55. package/dist/Exit.js +8 -3
  56. package/dist/Exit.js.map +1 -1
  57. package/dist/FiberHandle.d.ts +2 -0
  58. package/dist/FiberHandle.d.ts.map +1 -1
  59. package/dist/FiberHandle.js +9 -4
  60. package/dist/FiberHandle.js.map +1 -1
  61. package/dist/FiberMap.d.ts +2 -0
  62. package/dist/FiberMap.d.ts.map +1 -1
  63. package/dist/FiberMap.js +5 -2
  64. package/dist/FiberMap.js.map +1 -1
  65. package/dist/FileSystem.d.ts +5 -0
  66. package/dist/FileSystem.d.ts.map +1 -1
  67. package/dist/FileSystem.js +3 -0
  68. package/dist/FileSystem.js.map +1 -1
  69. package/dist/Formatter.d.ts.map +1 -1
  70. package/dist/Formatter.js +27 -13
  71. package/dist/Formatter.js.map +1 -1
  72. package/dist/Graph.d.ts.map +1 -1
  73. package/dist/Graph.js.map +1 -1
  74. package/dist/Hash.d.ts.map +1 -1
  75. package/dist/Hash.js +4 -1
  76. package/dist/Hash.js.map +1 -1
  77. package/dist/HashSet.d.ts.map +1 -1
  78. package/dist/HashSet.js.map +1 -1
  79. package/dist/Iterable.d.ts.map +1 -1
  80. package/dist/Iterable.js +18 -17
  81. package/dist/Iterable.js.map +1 -1
  82. package/dist/JsonPatch.js +4 -0
  83. package/dist/JsonPatch.js.map +1 -1
  84. package/dist/JsonSchema.d.ts +9 -3
  85. package/dist/JsonSchema.d.ts.map +1 -1
  86. package/dist/JsonSchema.js +32 -43
  87. package/dist/JsonSchema.js.map +1 -1
  88. package/dist/Layer.d.ts.map +1 -1
  89. package/dist/Layer.js +2 -2
  90. package/dist/Layer.js.map +1 -1
  91. package/dist/ManagedRuntime.d.ts +19 -1
  92. package/dist/ManagedRuntime.d.ts.map +1 -1
  93. package/dist/ManagedRuntime.js +62 -6
  94. package/dist/ManagedRuntime.js.map +1 -1
  95. package/dist/Metric.d.ts +135 -3
  96. package/dist/Metric.d.ts.map +1 -1
  97. package/dist/Metric.js +197 -25
  98. package/dist/Metric.js.map +1 -1
  99. package/dist/MutableHashMap.d.ts.map +1 -1
  100. package/dist/MutableHashMap.js.map +1 -1
  101. package/dist/MutableList.d.ts +5 -2
  102. package/dist/MutableList.d.ts.map +1 -1
  103. package/dist/MutableList.js +7 -5
  104. package/dist/MutableList.js.map +1 -1
  105. package/dist/MutableRef.d.ts.map +1 -1
  106. package/dist/MutableRef.js +7 -0
  107. package/dist/MutableRef.js.map +1 -1
  108. package/dist/Number.js +2 -2
  109. package/dist/Number.js.map +1 -1
  110. package/dist/Optic.d.ts.map +1 -1
  111. package/dist/Optic.js.map +1 -1
  112. package/dist/PartitionedSemaphore.d.ts +2 -1
  113. package/dist/PartitionedSemaphore.d.ts.map +1 -1
  114. package/dist/PartitionedSemaphore.js +22 -12
  115. package/dist/PartitionedSemaphore.js.map +1 -1
  116. package/dist/Path.d.ts.map +1 -1
  117. package/dist/Path.js +8 -1
  118. package/dist/Path.js.map +1 -1
  119. package/dist/Pool.d.ts.map +1 -1
  120. package/dist/Pool.js +77 -27
  121. package/dist/Pool.js.map +1 -1
  122. package/dist/PubSub.d.ts.map +1 -1
  123. package/dist/PubSub.js +17 -13
  124. package/dist/PubSub.js.map +1 -1
  125. package/dist/Queue.d.ts +4 -1
  126. package/dist/Queue.d.ts.map +1 -1
  127. package/dist/Queue.js +4 -1
  128. package/dist/Queue.js.map +1 -1
  129. package/dist/Random.d.ts.map +1 -1
  130. package/dist/Random.js +1 -1
  131. package/dist/Random.js.map +1 -1
  132. package/dist/RcMap.d.ts +12 -7
  133. package/dist/RcMap.d.ts.map +1 -1
  134. package/dist/RcMap.js +9 -6
  135. package/dist/RcMap.js.map +1 -1
  136. package/dist/Record.d.ts +51 -0
  137. package/dist/Record.d.ts.map +1 -1
  138. package/dist/Record.js +17 -0
  139. package/dist/Record.js.map +1 -1
  140. package/dist/Ref.d.ts.map +1 -1
  141. package/dist/Ref.js +8 -0
  142. package/dist/Ref.js.map +1 -1
  143. package/dist/References.d.ts +5 -4
  144. package/dist/References.d.ts.map +1 -1
  145. package/dist/References.js +5 -4
  146. package/dist/References.js.map +1 -1
  147. package/dist/RequestResolver.d.ts +31 -1
  148. package/dist/RequestResolver.d.ts.map +1 -1
  149. package/dist/RequestResolver.js +39 -4
  150. package/dist/RequestResolver.js.map +1 -1
  151. package/dist/Resource.js +1 -1
  152. package/dist/Resource.js.map +1 -1
  153. package/dist/Runtime.d.ts +3 -3
  154. package/dist/Runtime.d.ts.map +1 -1
  155. package/dist/Runtime.js +18 -15
  156. package/dist/Runtime.js.map +1 -1
  157. package/dist/Schedule.d.ts.map +1 -1
  158. package/dist/Schedule.js +1 -1
  159. package/dist/Schedule.js.map +1 -1
  160. package/dist/Schema.d.ts +408 -340
  161. package/dist/Schema.d.ts.map +1 -1
  162. package/dist/Schema.js +370 -47
  163. package/dist/Schema.js.map +1 -1
  164. package/dist/SchemaAST.d.ts +9 -7
  165. package/dist/SchemaAST.d.ts.map +1 -1
  166. package/dist/SchemaAST.js +38 -25
  167. package/dist/SchemaAST.js.map +1 -1
  168. package/dist/SchemaGetter.d.ts +8 -3
  169. package/dist/SchemaGetter.d.ts.map +1 -1
  170. package/dist/SchemaGetter.js +15 -5
  171. package/dist/SchemaGetter.js.map +1 -1
  172. package/dist/SchemaIssue.d.ts +4 -4
  173. package/dist/SchemaIssue.d.ts.map +1 -1
  174. package/dist/SchemaIssue.js +29 -51
  175. package/dist/SchemaIssue.js.map +1 -1
  176. package/dist/SchemaParser.d.ts.map +1 -1
  177. package/dist/SchemaParser.js +48 -22
  178. package/dist/SchemaParser.js.map +1 -1
  179. package/dist/SchemaRepresentation.d.ts +75 -11
  180. package/dist/SchemaRepresentation.d.ts.map +1 -1
  181. package/dist/SchemaRepresentation.js +41 -13
  182. package/dist/SchemaRepresentation.js.map +1 -1
  183. package/dist/SchemaTransformation.d.ts +5 -2
  184. package/dist/SchemaTransformation.d.ts.map +1 -1
  185. package/dist/SchemaTransformation.js +10 -3
  186. package/dist/SchemaTransformation.js.map +1 -1
  187. package/dist/Scope.d.ts +12 -2
  188. package/dist/Scope.d.ts.map +1 -1
  189. package/dist/Scope.js +5 -0
  190. package/dist/Scope.js.map +1 -1
  191. package/dist/ScopedCache.d.ts +10 -7
  192. package/dist/ScopedCache.d.ts.map +1 -1
  193. package/dist/ScopedCache.js +9 -5
  194. package/dist/ScopedCache.js.map +1 -1
  195. package/dist/SemVer.d.ts +1196 -0
  196. package/dist/SemVer.d.ts.map +1 -0
  197. package/dist/SemVer.js +756 -0
  198. package/dist/SemVer.js.map +1 -0
  199. package/dist/SemVerRange.d.ts +559 -0
  200. package/dist/SemVerRange.d.ts.map +1 -0
  201. package/dist/SemVerRange.js +551 -0
  202. package/dist/SemVerRange.js.map +1 -0
  203. package/dist/Semaphore.d.ts.map +1 -1
  204. package/dist/Semaphore.js +54 -35
  205. package/dist/Semaphore.js.map +1 -1
  206. package/dist/Sink.d.ts.map +1 -1
  207. package/dist/Sink.js +13 -4
  208. package/dist/Sink.js.map +1 -1
  209. package/dist/Stream.d.ts +235 -8
  210. package/dist/Stream.d.ts.map +1 -1
  211. package/dist/Stream.js +167 -70
  212. package/dist/Stream.js.map +1 -1
  213. package/dist/String.d.ts +7 -2
  214. package/dist/String.d.ts.map +1 -1
  215. package/dist/String.js +11 -6
  216. package/dist/String.js.map +1 -1
  217. package/dist/TextDiff.d.ts +399 -0
  218. package/dist/TextDiff.d.ts.map +1 -0
  219. package/dist/TextDiff.js +634 -0
  220. package/dist/TextDiff.js.map +1 -0
  221. package/dist/Tracer.d.ts +11 -1
  222. package/dist/Tracer.d.ts.map +1 -1
  223. package/dist/Tracer.js +6 -1
  224. package/dist/Tracer.js.map +1 -1
  225. package/dist/TxHashMap.d.ts.map +1 -1
  226. package/dist/TxHashMap.js.map +1 -1
  227. package/dist/TxHashSet.d.ts.map +1 -1
  228. package/dist/TxHashSet.js.map +1 -1
  229. package/dist/ai/AiError.d.ts +68 -4
  230. package/dist/ai/AiError.d.ts.map +1 -1
  231. package/dist/ai/AiError.js +50 -2
  232. package/dist/ai/AiError.js.map +1 -1
  233. package/dist/ai/Chat.d.ts +1 -2
  234. package/dist/ai/Chat.d.ts.map +1 -1
  235. package/dist/ai/Chat.js +6 -3
  236. package/dist/ai/Chat.js.map +1 -1
  237. package/dist/ai/Decision.d.ts +46 -1
  238. package/dist/ai/Decision.d.ts.map +1 -1
  239. package/dist/ai/Decision.js.map +1 -1
  240. package/dist/ai/DecisionModel.d.ts +129 -11
  241. package/dist/ai/DecisionModel.d.ts.map +1 -1
  242. package/dist/ai/DecisionModel.js +182 -94
  243. package/dist/ai/DecisionModel.js.map +1 -1
  244. package/dist/ai/EmbeddingModel.d.ts +10 -0
  245. package/dist/ai/EmbeddingModel.d.ts.map +1 -1
  246. package/dist/ai/EmbeddingModel.js +21 -7
  247. package/dist/ai/EmbeddingModel.js.map +1 -1
  248. package/dist/ai/LanguageModel.d.ts.map +1 -1
  249. package/dist/ai/LanguageModel.js +9 -0
  250. package/dist/ai/LanguageModel.js.map +1 -1
  251. package/dist/ai/McpClient.d.ts +289 -0
  252. package/dist/ai/McpClient.d.ts.map +1 -0
  253. package/dist/ai/McpClient.js +819 -0
  254. package/dist/ai/McpClient.js.map +1 -0
  255. package/dist/ai/McpClientError.d.ts +254 -0
  256. package/dist/ai/McpClientError.d.ts.map +1 -0
  257. package/dist/ai/McpClientError.js +260 -0
  258. package/dist/ai/McpClientError.js.map +1 -0
  259. package/dist/ai/McpProtocol.d.ts +2 -2
  260. package/dist/ai/McpProtocol.d.ts.map +1 -1
  261. package/dist/ai/McpSchema.d.ts +258 -125
  262. package/dist/ai/McpSchema.d.ts.map +1 -1
  263. package/dist/ai/McpSchema.js +94 -24
  264. package/dist/ai/McpSchema.js.map +1 -1
  265. package/dist/ai/McpServer.d.ts.map +1 -1
  266. package/dist/ai/McpServer.js +46 -37
  267. package/dist/ai/McpServer.js.map +1 -1
  268. package/dist/ai/Prompt.d.ts +74 -20
  269. package/dist/ai/Prompt.d.ts.map +1 -1
  270. package/dist/ai/Prompt.js +61 -1
  271. package/dist/ai/Prompt.js.map +1 -1
  272. package/dist/ai/Response.d.ts +160 -3
  273. package/dist/ai/Response.d.ts.map +1 -1
  274. package/dist/ai/Response.js +39 -37
  275. package/dist/ai/Response.js.map +1 -1
  276. package/dist/ai/Tool.d.ts +36 -4
  277. package/dist/ai/Tool.d.ts.map +1 -1
  278. package/dist/ai/Tool.js +5 -2
  279. package/dist/ai/Tool.js.map +1 -1
  280. package/dist/ai/Toolkit.d.ts +48 -1
  281. package/dist/ai/Toolkit.d.ts.map +1 -1
  282. package/dist/ai/Toolkit.js +73 -13
  283. package/dist/ai/Toolkit.js.map +1 -1
  284. package/dist/ai/index.d.ts +10 -0
  285. package/dist/ai/index.d.ts.map +1 -1
  286. package/dist/ai/index.js +10 -0
  287. package/dist/ai/index.js.map +1 -1
  288. package/dist/ai/internal/mcpCore.js.map +1 -1
  289. package/dist/ai/internal/mcpProtocol/v2024_11_05.js +1 -1
  290. package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
  291. package/dist/ai/internal/mcpProtocol/v2025_03_26.js +1 -1
  292. package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
  293. package/dist/ai/internal/mcpProtocol/v2025_06_18.js +2 -2
  294. package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
  295. package/dist/ai/internal/mcpProtocol/v2025_11_25.js +2 -2
  296. package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
  297. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +4 -7
  298. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  299. package/dist/ai/internal/mcpProtocol.js +16 -2
  300. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  301. package/dist/ai/internal/mcpRuntime.js +3 -4
  302. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  303. package/dist/ai/internal/mcpSchema/v2024_11_05.js +19 -13
  304. package/dist/ai/internal/mcpSchema/v2024_11_05.js.map +1 -1
  305. package/dist/ai/internal/mcpSchema/v2025_03_26.js +3 -2
  306. package/dist/ai/internal/mcpSchema/v2025_03_26.js.map +1 -1
  307. package/dist/ai/internal/mcpSchema/v2025_06_18.js +7 -7
  308. package/dist/ai/internal/mcpSchema/v2025_06_18.js.map +1 -1
  309. package/dist/ai/internal/mcpSchema/v2025_11_25.js +8 -8
  310. package/dist/ai/internal/mcpSchema/v2025_11_25.js.map +1 -1
  311. package/dist/ai/internal/mcpSchema/v2026_07_28.js +43 -42
  312. package/dist/ai/internal/mcpSchema/v2026_07_28.js.map +1 -1
  313. package/dist/cli/Argument.d.ts +15 -0
  314. package/dist/cli/Argument.d.ts.map +1 -1
  315. package/dist/cli/Argument.js +5 -0
  316. package/dist/cli/Argument.js.map +1 -1
  317. package/dist/cli/CliError.d.ts +120 -2
  318. package/dist/cli/CliError.d.ts.map +1 -1
  319. package/dist/cli/CliError.js +106 -5
  320. package/dist/cli/CliError.js.map +1 -1
  321. package/dist/cli/CliOutput.d.ts +155 -6
  322. package/dist/cli/CliOutput.d.ts.map +1 -1
  323. package/dist/cli/CliOutput.js +62 -6
  324. package/dist/cli/CliOutput.js.map +1 -1
  325. package/dist/cli/Command.d.ts +310 -18
  326. package/dist/cli/Command.d.ts.map +1 -1
  327. package/dist/cli/Command.js +164 -33
  328. package/dist/cli/Command.js.map +1 -1
  329. package/dist/cli/Completions.d.ts +63 -0
  330. package/dist/cli/Completions.d.ts.map +1 -1
  331. package/dist/cli/Completions.js +49 -9
  332. package/dist/cli/Completions.js.map +1 -1
  333. package/dist/cli/Flag.d.ts +130 -0
  334. package/dist/cli/Flag.d.ts.map +1 -1
  335. package/dist/cli/Flag.js +61 -0
  336. package/dist/cli/Flag.js.map +1 -1
  337. package/dist/cli/GlobalFlag.d.ts.map +1 -1
  338. package/dist/cli/GlobalFlag.js +14 -6
  339. package/dist/cli/GlobalFlag.js.map +1 -1
  340. package/dist/cli/Param.d.ts +116 -0
  341. package/dist/cli/Param.d.ts.map +1 -1
  342. package/dist/cli/Param.js +77 -2
  343. package/dist/cli/Param.js.map +1 -1
  344. package/dist/cli/TerminalCapabilities.d.ts +85 -0
  345. package/dist/cli/TerminalCapabilities.d.ts.map +1 -0
  346. package/dist/cli/TerminalCapabilities.js +124 -0
  347. package/dist/cli/TerminalCapabilities.js.map +1 -0
  348. package/dist/cli/index.d.ts +5 -0
  349. package/dist/cli/index.d.ts.map +1 -1
  350. package/dist/cli/index.js +5 -0
  351. package/dist/cli/index.js.map +1 -1
  352. package/dist/cli/internal/command.d.ts +2 -1
  353. package/dist/cli/internal/command.d.ts.map +1 -1
  354. package/dist/cli/internal/command.js +5 -2
  355. package/dist/cli/internal/command.js.map +1 -1
  356. package/dist/cli/internal/completions/bash.js +77 -30
  357. package/dist/cli/internal/completions/bash.js.map +1 -1
  358. package/dist/cli/internal/completions/descriptor.js +9 -1
  359. package/dist/cli/internal/completions/descriptor.js.map +1 -1
  360. package/dist/cli/internal/completions/fish.js +10 -8
  361. package/dist/cli/internal/completions/fish.js.map +1 -1
  362. package/dist/cli/internal/completions/powershell.js +18 -9
  363. package/dist/cli/internal/completions/powershell.js.map +1 -1
  364. package/dist/cli/internal/completions/zsh.js +8 -5
  365. package/dist/cli/internal/completions/zsh.js.map +1 -1
  366. package/dist/cli/internal/formatter.d.ts +2 -0
  367. package/dist/cli/internal/formatter.d.ts.map +1 -0
  368. package/dist/cli/internal/formatter.js +15 -0
  369. package/dist/cli/internal/formatter.js.map +1 -0
  370. package/dist/cli/internal/lexer.js +24 -10
  371. package/dist/cli/internal/lexer.js.map +1 -1
  372. package/dist/cli/internal/parser.js +24 -12
  373. package/dist/cli/internal/parser.js.map +1 -1
  374. package/dist/cluster/ClusterCron.d.ts +29 -1
  375. package/dist/cluster/ClusterCron.d.ts.map +1 -1
  376. package/dist/cluster/ClusterCron.js +64 -32
  377. package/dist/cluster/ClusterCron.js.map +1 -1
  378. package/dist/cluster/ClusterMetrics.d.ts +143 -7
  379. package/dist/cluster/ClusterMetrics.d.ts.map +1 -1
  380. package/dist/cluster/ClusterMetrics.js +151 -7
  381. package/dist/cluster/ClusterMetrics.js.map +1 -1
  382. package/dist/cluster/ClusterWorkflowEngine.d.ts +1 -1
  383. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  384. package/dist/cluster/ClusterWorkflowEngine.js +82 -21
  385. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  386. package/dist/cluster/Entity.d.ts +2 -0
  387. package/dist/cluster/Entity.d.ts.map +1 -1
  388. package/dist/cluster/Entity.js.map +1 -1
  389. package/dist/cluster/MessageStorage.d.ts +44 -45
  390. package/dist/cluster/MessageStorage.d.ts.map +1 -1
  391. package/dist/cluster/MessageStorage.js +6 -7
  392. package/dist/cluster/MessageStorage.js.map +1 -1
  393. package/dist/cluster/Runners.d.ts.map +1 -1
  394. package/dist/cluster/Runners.js +54 -15
  395. package/dist/cluster/Runners.js.map +1 -1
  396. package/dist/cluster/Sharding.d.ts +1 -0
  397. package/dist/cluster/Sharding.d.ts.map +1 -1
  398. package/dist/cluster/Sharding.js +155 -52
  399. package/dist/cluster/Sharding.js.map +1 -1
  400. package/dist/cluster/ShardingConfig.d.ts +30 -0
  401. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  402. package/dist/cluster/ShardingConfig.js +4 -0
  403. package/dist/cluster/ShardingConfig.js.map +1 -1
  404. package/dist/cluster/Snowflake.d.ts.map +1 -1
  405. package/dist/cluster/Snowflake.js +3 -7
  406. package/dist/cluster/Snowflake.js.map +1 -1
  407. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  408. package/dist/cluster/SqlMessageStorage.js +40 -50
  409. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  410. package/dist/cluster/SqlRunnerStorage.d.ts +2 -2
  411. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  412. package/dist/cluster/SqlRunnerStorage.js +97 -43
  413. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  414. package/dist/cluster/internal/entityManager.js +119 -28
  415. package/dist/cluster/internal/entityManager.js.map +1 -1
  416. package/dist/devtools/DevTools.d.ts +3 -2
  417. package/dist/devtools/DevTools.d.ts.map +1 -1
  418. package/dist/devtools/DevTools.js +3 -2
  419. package/dist/devtools/DevTools.js.map +1 -1
  420. package/dist/devtools/DevToolsClient.d.ts +11 -0
  421. package/dist/devtools/DevToolsClient.d.ts.map +1 -1
  422. package/dist/devtools/DevToolsClient.js +33 -4
  423. package/dist/devtools/DevToolsClient.js.map +1 -1
  424. package/dist/encoding/Base64.js +36 -0
  425. package/dist/encoding/Base64.js.map +1 -1
  426. package/dist/encoding/Base64Url.d.ts +29 -0
  427. package/dist/encoding/Base64Url.d.ts.map +1 -1
  428. package/dist/encoding/Base64Url.js +29 -0
  429. package/dist/encoding/Base64Url.js.map +1 -1
  430. package/dist/encoding/Ini.d.ts.map +1 -1
  431. package/dist/encoding/Ini.js +3 -0
  432. package/dist/encoding/Ini.js.map +1 -1
  433. package/dist/encoding/JsonArray.d.ts +270 -0
  434. package/dist/encoding/JsonArray.d.ts.map +1 -0
  435. package/dist/encoding/JsonArray.js +691 -0
  436. package/dist/encoding/JsonArray.js.map +1 -0
  437. package/dist/encoding/Ndjson.d.ts +43 -4
  438. package/dist/encoding/Ndjson.d.ts.map +1 -1
  439. package/dist/encoding/Ndjson.js +169 -18
  440. package/dist/encoding/Ndjson.js.map +1 -1
  441. package/dist/encoding/SchemaBinary.d.ts +9 -1
  442. package/dist/encoding/SchemaBinary.d.ts.map +1 -1
  443. package/dist/encoding/SchemaBinary.js +12 -19
  444. package/dist/encoding/SchemaBinary.js.map +1 -1
  445. package/dist/encoding/Sse.d.ts.map +1 -1
  446. package/dist/encoding/Sse.js +3 -3
  447. package/dist/encoding/Sse.js.map +1 -1
  448. package/dist/encoding/Tar.d.ts +309 -0
  449. package/dist/encoding/Tar.d.ts.map +1 -0
  450. package/dist/encoding/Tar.js +1182 -0
  451. package/dist/encoding/Tar.js.map +1 -0
  452. package/dist/encoding/Toml.d.ts.map +1 -1
  453. package/dist/encoding/Toml.js +24 -19
  454. package/dist/encoding/Toml.js.map +1 -1
  455. package/dist/encoding/Xml.d.ts +464 -0
  456. package/dist/encoding/Xml.d.ts.map +1 -0
  457. package/dist/encoding/Xml.js +1619 -0
  458. package/dist/encoding/Xml.js.map +1 -0
  459. package/dist/encoding/Yaml.d.ts +6 -2
  460. package/dist/encoding/Yaml.d.ts.map +1 -1
  461. package/dist/encoding/Yaml.js +97 -34
  462. package/dist/encoding/Yaml.js.map +1 -1
  463. package/dist/encoding/Zip.d.ts +413 -0
  464. package/dist/encoding/Zip.d.ts.map +1 -0
  465. package/dist/encoding/Zip.js +1255 -0
  466. package/dist/encoding/Zip.js.map +1 -0
  467. package/dist/encoding/index.d.ts +20 -0
  468. package/dist/encoding/index.d.ts.map +1 -1
  469. package/dist/encoding/index.js +20 -0
  470. package/dist/encoding/index.js.map +1 -1
  471. package/dist/eventlog/EventJournal.d.ts +90 -5
  472. package/dist/eventlog/EventJournal.d.ts.map +1 -1
  473. package/dist/eventlog/EventJournal.js +488 -228
  474. package/dist/eventlog/EventJournal.js.map +1 -1
  475. package/dist/eventlog/EventLog.d.ts +180 -12
  476. package/dist/eventlog/EventLog.d.ts.map +1 -1
  477. package/dist/eventlog/EventLog.js +394 -146
  478. package/dist/eventlog/EventLog.js.map +1 -1
  479. package/dist/eventlog/EventLogEncryption.d.ts +36 -30
  480. package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
  481. package/dist/eventlog/EventLogEncryption.js +97 -38
  482. package/dist/eventlog/EventLogEncryption.js.map +1 -1
  483. package/dist/eventlog/EventLogMessage.d.ts +74 -34
  484. package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
  485. package/dist/eventlog/EventLogMessage.js +45 -11
  486. package/dist/eventlog/EventLogMessage.js.map +1 -1
  487. package/dist/eventlog/EventLogRemote.d.ts +45 -8
  488. package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
  489. package/dist/eventlog/EventLogRemote.js +51 -14
  490. package/dist/eventlog/EventLogRemote.js.map +1 -1
  491. package/dist/eventlog/EventLogServer.d.ts +46 -3
  492. package/dist/eventlog/EventLogServer.d.ts.map +1 -1
  493. package/dist/eventlog/EventLogServer.js +119 -19
  494. package/dist/eventlog/EventLogServer.js.map +1 -1
  495. package/dist/eventlog/EventLogServerEncrypted.d.ts +23 -33
  496. package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  497. package/dist/eventlog/EventLogServerEncrypted.js +97 -70
  498. package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
  499. package/dist/eventlog/EventLogServerUnencrypted.d.ts +39 -5
  500. package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
  501. package/dist/eventlog/EventLogServerUnencrypted.js +151 -69
  502. package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
  503. package/dist/eventlog/EventRow.d.ts +288 -0
  504. package/dist/eventlog/EventRow.d.ts.map +1 -0
  505. package/dist/eventlog/EventRow.js +435 -0
  506. package/dist/eventlog/EventRow.js.map +1 -0
  507. package/dist/eventlog/SqlEventJournal.d.ts +18 -18
  508. package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
  509. package/dist/eventlog/SqlEventJournal.js +417 -169
  510. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  511. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +10 -18
  512. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  513. package/dist/eventlog/SqlEventLogServerEncrypted.js +179 -69
  514. package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  515. package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts +23 -3
  516. package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts.map +1 -1
  517. package/dist/eventlog/SqlEventLogServerUnencrypted.js +102 -51
  518. package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  519. package/dist/eventlog/index.d.ts +5 -0
  520. package/dist/eventlog/index.d.ts.map +1 -1
  521. package/dist/eventlog/index.js +5 -0
  522. package/dist/eventlog/index.js.map +1 -1
  523. package/dist/eventlog/internal/conflicts.d.ts +46 -0
  524. package/dist/eventlog/internal/conflicts.d.ts.map +1 -0
  525. package/dist/eventlog/internal/conflicts.js +89 -0
  526. package/dist/eventlog/internal/conflicts.js.map +1 -0
  527. package/dist/graphql/GraphQLClientError.d.ts +2 -2
  528. package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
  529. package/dist/graphql/GraphQLClientError.js +4 -18
  530. package/dist/graphql/GraphQLClientError.js.map +1 -1
  531. package/dist/graphql/GraphQLProtocol.d.ts +12 -9
  532. package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
  533. package/dist/graphql/GraphQLProtocol.js +4 -3
  534. package/dist/graphql/GraphQLProtocol.js.map +1 -1
  535. package/dist/graphql/GraphQLResolver.d.ts +2 -0
  536. package/dist/graphql/GraphQLResolver.d.ts.map +1 -1
  537. package/dist/graphql/GraphQLResolver.js +74 -32
  538. package/dist/graphql/GraphQLResolver.js.map +1 -1
  539. package/dist/http/Cookies.d.ts.map +1 -1
  540. package/dist/http/Cookies.js +10 -9
  541. package/dist/http/Cookies.js.map +1 -1
  542. package/dist/http/FetchHttpClient.d.ts +8 -1
  543. package/dist/http/FetchHttpClient.d.ts.map +1 -1
  544. package/dist/http/FetchHttpClient.js +51 -4
  545. package/dist/http/FetchHttpClient.js.map +1 -1
  546. package/dist/http/FindMyWay/internal/router.js +10 -0
  547. package/dist/http/FindMyWay/internal/router.js.map +1 -1
  548. package/dist/http/Headers.d.ts +227 -0
  549. package/dist/http/Headers.d.ts.map +1 -1
  550. package/dist/http/Headers.js +261 -0
  551. package/dist/http/Headers.js.map +1 -1
  552. package/dist/http/HttpClient.d.ts +516 -0
  553. package/dist/http/HttpClient.d.ts.map +1 -1
  554. package/dist/http/HttpClient.js +286 -23
  555. package/dist/http/HttpClient.js.map +1 -1
  556. package/dist/http/HttpClientError.d.ts +8 -1
  557. package/dist/http/HttpClientError.d.ts.map +1 -1
  558. package/dist/http/HttpClientError.js +37 -1
  559. package/dist/http/HttpClientError.js.map +1 -1
  560. package/dist/http/HttpClientRequest.d.ts +127 -3
  561. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  562. package/dist/http/HttpClientRequest.js +45 -3
  563. package/dist/http/HttpClientRequest.js.map +1 -1
  564. package/dist/http/HttpClientResponse.d.ts +53 -0
  565. package/dist/http/HttpClientResponse.d.ts.map +1 -1
  566. package/dist/http/HttpClientResponse.js +47 -0
  567. package/dist/http/HttpClientResponse.js.map +1 -1
  568. package/dist/http/HttpEffect.d.ts +6 -2
  569. package/dist/http/HttpEffect.d.ts.map +1 -1
  570. package/dist/http/HttpEffect.js +21 -17
  571. package/dist/http/HttpEffect.js.map +1 -1
  572. package/dist/http/HttpIncomingMessage.d.ts +2 -1
  573. package/dist/http/HttpIncomingMessage.d.ts.map +1 -1
  574. package/dist/http/HttpIncomingMessage.js +3 -23
  575. package/dist/http/HttpIncomingMessage.js.map +1 -1
  576. package/dist/http/HttpMiddleware.d.ts +119 -2
  577. package/dist/http/HttpMiddleware.d.ts.map +1 -1
  578. package/dist/http/HttpMiddleware.js +173 -29
  579. package/dist/http/HttpMiddleware.js.map +1 -1
  580. package/dist/http/HttpRouter.d.ts.map +1 -1
  581. package/dist/http/HttpRouter.js +9 -3
  582. package/dist/http/HttpRouter.js.map +1 -1
  583. package/dist/http/HttpServerError.d.ts +5 -2
  584. package/dist/http/HttpServerError.d.ts.map +1 -1
  585. package/dist/http/HttpServerError.js +7 -5
  586. package/dist/http/HttpServerError.js.map +1 -1
  587. package/dist/http/HttpServerRequest.d.ts +30 -5
  588. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  589. package/dist/http/HttpServerRequest.js +109 -20
  590. package/dist/http/HttpServerRequest.js.map +1 -1
  591. package/dist/http/HttpServerResponse.d.ts +17 -8
  592. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  593. package/dist/http/HttpServerResponse.js +37 -21
  594. package/dist/http/HttpServerResponse.js.map +1 -1
  595. package/dist/http/HttpStaticServer.d.ts +0 -12
  596. package/dist/http/HttpStaticServer.d.ts.map +1 -1
  597. package/dist/http/HttpStaticServer.js +65 -24
  598. package/dist/http/HttpStaticServer.js.map +1 -1
  599. package/dist/http/MultipartParser/internal/contentType.d.ts +15 -1
  600. package/dist/http/MultipartParser/internal/contentType.d.ts.map +1 -1
  601. package/dist/http/MultipartParser/internal/contentType.js +89 -7
  602. package/dist/http/MultipartParser/internal/contentType.js.map +1 -1
  603. package/dist/http/MultipartParser/internal/headers.d.ts.map +1 -1
  604. package/dist/http/MultipartParser/internal/headers.js +4 -12
  605. package/dist/http/MultipartParser/internal/headers.js.map +1 -1
  606. package/dist/http/MultipartParser/internal/multipart.d.ts.map +1 -1
  607. package/dist/http/MultipartParser/internal/multipart.js +6 -27
  608. package/dist/http/MultipartParser/internal/multipart.js.map +1 -1
  609. package/dist/http/Url.d.ts.map +1 -1
  610. package/dist/http/Url.js +6 -1
  611. package/dist/http/Url.js.map +1 -1
  612. package/dist/http/UrlParams.d.ts +3 -1
  613. package/dist/http/UrlParams.d.ts.map +1 -1
  614. package/dist/http/UrlParams.js +4 -2
  615. package/dist/http/UrlParams.js.map +1 -1
  616. package/dist/http/internal/compression.js +4 -5
  617. package/dist/http/internal/compression.js.map +1 -1
  618. package/dist/http/internal/decompression.js +20 -11
  619. package/dist/http/internal/decompression.js.map +1 -1
  620. package/dist/http/internal/httpBody.js +8 -1
  621. package/dist/http/internal/httpBody.js.map +1 -1
  622. package/dist/http/internal/lazyStream.d.ts +2 -0
  623. package/dist/http/internal/lazyStream.d.ts.map +1 -0
  624. package/dist/http/internal/lazyStream.js +18 -0
  625. package/dist/http/internal/lazyStream.js.map +1 -0
  626. package/dist/http/internal/requestState.d.ts +2 -0
  627. package/dist/http/internal/requestState.d.ts.map +1 -0
  628. package/dist/http/internal/requestState.js +28 -0
  629. package/dist/http/internal/requestState.js.map +1 -0
  630. package/dist/http/internal/urlParams.js +25 -0
  631. package/dist/http/internal/urlParams.js.map +1 -1
  632. package/dist/http/internal/webResponse.d.ts +2 -0
  633. package/dist/http/internal/webResponse.d.ts.map +1 -0
  634. package/dist/http/internal/webResponse.js +12 -0
  635. package/dist/http/internal/webResponse.js.map +1 -0
  636. package/dist/http-api/HttpApi.d.ts +3 -6
  637. package/dist/http-api/HttpApi.d.ts.map +1 -1
  638. package/dist/http-api/HttpApi.js +4 -7
  639. package/dist/http-api/HttpApi.js.map +1 -1
  640. package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
  641. package/dist/http-api/HttpApiBuilder.js +142 -23
  642. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  643. package/dist/http-api/HttpApiClient.d.ts +99 -4
  644. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  645. package/dist/http-api/HttpApiClient.js +218 -60
  646. package/dist/http-api/HttpApiClient.js.map +1 -1
  647. package/dist/http-api/HttpApiEndpoint.d.ts +72 -29
  648. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  649. package/dist/http-api/HttpApiEndpoint.js +140 -14
  650. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  651. package/dist/http-api/HttpApiError.d.ts +58 -0
  652. package/dist/http-api/HttpApiError.d.ts.map +1 -1
  653. package/dist/http-api/HttpApiError.js +38 -12
  654. package/dist/http-api/HttpApiError.js.map +1 -1
  655. package/dist/http-api/HttpApiScalar.d.ts +2 -1
  656. package/dist/http-api/HttpApiScalar.d.ts.map +1 -1
  657. package/dist/http-api/HttpApiScalar.js +6 -3
  658. package/dist/http-api/HttpApiScalar.js.map +1 -1
  659. package/dist/http-api/HttpApiSchema.d.ts +242 -13
  660. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  661. package/dist/http-api/HttpApiSchema.js +149 -5
  662. package/dist/http-api/HttpApiSchema.js.map +1 -1
  663. package/dist/http-api/HttpApiSwagger.d.ts +5 -0
  664. package/dist/http-api/HttpApiSwagger.d.ts.map +1 -1
  665. package/dist/http-api/HttpApiSwagger.js +14 -4
  666. package/dist/http-api/HttpApiSwagger.js.map +1 -1
  667. package/dist/http-api/HttpApiTest.d.ts +13 -2
  668. package/dist/http-api/HttpApiTest.d.ts.map +1 -1
  669. package/dist/http-api/HttpApiTest.js +33 -11
  670. package/dist/http-api/HttpApiTest.js.map +1 -1
  671. package/dist/http-api/OpenApi.d.ts +17 -3
  672. package/dist/http-api/OpenApi.d.ts.map +1 -1
  673. package/dist/http-api/OpenApi.js +81 -47
  674. package/dist/http-api/OpenApi.js.map +1 -1
  675. package/dist/http-api/internal/path.js +35 -10
  676. package/dist/http-api/internal/path.js.map +1 -1
  677. package/dist/http-api/internal/toCodecHttpProperties.d.ts +2 -0
  678. package/dist/http-api/internal/toCodecHttpProperties.d.ts.map +1 -0
  679. package/dist/http-api/internal/toCodecHttpProperties.js +38 -0
  680. package/dist/http-api/internal/toCodecHttpProperties.js.map +1 -0
  681. package/dist/index.d.ts +20 -0
  682. package/dist/index.d.ts.map +1 -1
  683. package/dist/index.js +20 -0
  684. package/dist/index.js.map +1 -1
  685. package/dist/internal/arbitrary/runner.d.ts.map +1 -1
  686. package/dist/internal/arbitrary/runner.js +120 -44
  687. package/dist/internal/arbitrary/runner.js.map +1 -1
  688. package/dist/internal/core.js +3 -1
  689. package/dist/internal/core.js.map +1 -1
  690. package/dist/internal/dateTime.js +19 -7
  691. package/dist/internal/dateTime.js.map +1 -1
  692. package/dist/internal/effect.js +106 -87
  693. package/dist/internal/effect.js.map +1 -1
  694. package/dist/internal/equal.js +14 -0
  695. package/dist/internal/equal.js.map +1 -1
  696. package/dist/internal/hashMap.js +2 -2
  697. package/dist/internal/hashMap.js.map +1 -1
  698. package/dist/internal/hydration.d.ts +2 -0
  699. package/dist/internal/hydration.d.ts.map +1 -0
  700. package/dist/internal/hydration.js +15 -0
  701. package/dist/internal/hydration.js.map +1 -0
  702. package/dist/internal/inflate.d.ts +2 -0
  703. package/dist/internal/inflate.d.ts.map +1 -0
  704. package/dist/internal/inflate.js +680 -0
  705. package/dist/internal/inflate.js.map +1 -0
  706. package/dist/internal/jsonSchema.d.ts +2 -0
  707. package/dist/internal/jsonSchema.d.ts.map +1 -0
  708. package/dist/internal/jsonSchema.js +28 -0
  709. package/dist/internal/jsonSchema.js.map +1 -0
  710. package/dist/internal/matcher.js +1 -1
  711. package/dist/internal/matcher.js.map +1 -1
  712. package/dist/internal/record.js +6 -0
  713. package/dist/internal/record.js.map +1 -1
  714. package/dist/internal/request.js +20 -7
  715. package/dist/internal/request.js.map +1 -1
  716. package/dist/internal/schedule.js +17 -22
  717. package/dist/internal/schedule.js.map +1 -1
  718. package/dist/internal/schema/compilerRegistry.js +4 -1
  719. package/dist/internal/schema/compilerRegistry.js.map +1 -1
  720. package/dist/internal/schema/content.d.ts +2 -0
  721. package/dist/internal/schema/content.d.ts.map +1 -0
  722. package/dist/internal/schema/content.js +13 -0
  723. package/dist/internal/schema/content.js.map +1 -0
  724. package/dist/internal/schema/fromJsonSchemaDocument.js +253 -255
  725. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
  726. package/dist/internal/schema/fromRepresentation.js +2 -1
  727. package/dist/internal/schema/fromRepresentation.js.map +1 -1
  728. package/dist/internal/schema/interpreter.js +51 -36
  729. package/dist/internal/schema/interpreter.js.map +1 -1
  730. package/dist/internal/schema/standardSchema.js +42 -35
  731. package/dist/internal/schema/standardSchema.js.map +1 -1
  732. package/dist/internal/schema/toCodeDocument.js +10 -5
  733. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  734. package/dist/internal/schema/toCodec.js +99 -17
  735. package/dist/internal/schema/toCodec.js.map +1 -1
  736. package/dist/internal/schema/toFormatter.js +5 -5
  737. package/dist/internal/schema/toFormatter.js.map +1 -1
  738. package/dist/internal/schema/toJsonSchemaDocument.js +257 -170
  739. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
  740. package/dist/internal/schema/toRepresentation.js +107 -129
  741. package/dist/internal/schema/toRepresentation.js.map +1 -1
  742. package/dist/internal/sql.d.ts +2 -0
  743. package/dist/internal/sql.d.ts.map +1 -0
  744. package/dist/internal/sql.js +13 -0
  745. package/dist/internal/sql.js.map +1 -0
  746. package/dist/internal/trie.js +1 -3
  747. package/dist/internal/trie.js.map +1 -1
  748. package/dist/internal/uuid.js +7 -3
  749. package/dist/internal/uuid.js.map +1 -1
  750. package/dist/internal/version.js +1 -1
  751. package/dist/net/NetAddress.d.ts.map +1 -1
  752. package/dist/net/NetAddress.js +2 -8
  753. package/dist/net/NetAddress.js.map +1 -1
  754. package/dist/observability/OtlpExporter.d.ts.map +1 -1
  755. package/dist/observability/OtlpExporter.js +5 -12
  756. package/dist/observability/OtlpExporter.js.map +1 -1
  757. package/dist/observability/OtlpMetrics.d.ts.map +1 -1
  758. package/dist/observability/OtlpMetrics.js +5 -3
  759. package/dist/observability/OtlpMetrics.js.map +1 -1
  760. package/dist/observability/OtlpProxy.d.ts +154 -0
  761. package/dist/observability/OtlpProxy.d.ts.map +1 -0
  762. package/dist/observability/OtlpProxy.js +235 -0
  763. package/dist/observability/OtlpProxy.js.map +1 -0
  764. package/dist/observability/OtlpResource.d.ts +3 -1
  765. package/dist/observability/OtlpResource.d.ts.map +1 -1
  766. package/dist/observability/OtlpResource.js +11 -4
  767. package/dist/observability/OtlpResource.js.map +1 -1
  768. package/dist/observability/OtlpSerialization.d.ts +5 -0
  769. package/dist/observability/OtlpSerialization.d.ts.map +1 -1
  770. package/dist/observability/OtlpSerialization.js +14 -3
  771. package/dist/observability/OtlpSerialization.js.map +1 -1
  772. package/dist/observability/OtlpTracer.d.ts.map +1 -1
  773. package/dist/observability/OtlpTracer.js +4 -0
  774. package/dist/observability/OtlpTracer.js.map +1 -1
  775. package/dist/observability/index.d.ts +5 -0
  776. package/dist/observability/index.d.ts.map +1 -1
  777. package/dist/observability/index.js +5 -0
  778. package/dist/observability/index.js.map +1 -1
  779. package/dist/observability/internal/protobuf.d.ts +0 -9
  780. package/dist/observability/internal/protobuf.d.ts.map +1 -1
  781. package/dist/observability/internal/protobuf.js +2 -10
  782. package/dist/observability/internal/protobuf.js.map +1 -1
  783. package/dist/persistence/CircuitBreaker.d.ts +897 -0
  784. package/dist/persistence/CircuitBreaker.d.ts.map +1 -0
  785. package/dist/persistence/CircuitBreaker.js +1165 -0
  786. package/dist/persistence/CircuitBreaker.js.map +1 -0
  787. package/dist/persistence/PersistedCache.d.ts.map +1 -1
  788. package/dist/persistence/PersistedCache.js +1 -1
  789. package/dist/persistence/PersistedCache.js.map +1 -1
  790. package/dist/persistence/PersistedQueue.d.ts +6 -2
  791. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  792. package/dist/persistence/PersistedQueue.js +162 -84
  793. package/dist/persistence/PersistedQueue.js.map +1 -1
  794. package/dist/persistence/Persistence.d.ts +28 -0
  795. package/dist/persistence/Persistence.d.ts.map +1 -1
  796. package/dist/persistence/Persistence.js +36 -8
  797. package/dist/persistence/Persistence.js.map +1 -1
  798. package/dist/persistence/RateLimiter.d.ts.map +1 -1
  799. package/dist/persistence/RateLimiter.js +8 -12
  800. package/dist/persistence/RateLimiter.js.map +1 -1
  801. package/dist/persistence/Redis.d.ts +78 -2
  802. package/dist/persistence/Redis.d.ts.map +1 -1
  803. package/dist/persistence/Redis.js +62 -7
  804. package/dist/persistence/Redis.js.map +1 -1
  805. package/dist/persistence/UserDirectories.d.ts +129 -0
  806. package/dist/persistence/UserDirectories.d.ts.map +1 -0
  807. package/dist/persistence/UserDirectories.js +178 -0
  808. package/dist/persistence/UserDirectories.js.map +1 -0
  809. package/dist/persistence/index.d.ts +10 -0
  810. package/dist/persistence/index.d.ts.map +1 -1
  811. package/dist/persistence/index.js +10 -0
  812. package/dist/persistence/index.js.map +1 -1
  813. package/dist/process/ChildProcess.d.ts +32 -5
  814. package/dist/process/ChildProcess.d.ts.map +1 -1
  815. package/dist/process/ChildProcess.js.map +1 -1
  816. package/dist/process/ChildProcessSpawner.d.ts +30 -0
  817. package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
  818. package/dist/process/ChildProcessSpawner.js +5 -2
  819. package/dist/process/ChildProcessSpawner.js.map +1 -1
  820. package/dist/reactivity/AsyncResult.d.ts +1 -1
  821. package/dist/reactivity/AsyncResult.d.ts.map +1 -1
  822. package/dist/reactivity/AsyncResult.js +1 -1
  823. package/dist/reactivity/AsyncResult.js.map +1 -1
  824. package/dist/reactivity/Atom.d.ts +69 -30
  825. package/dist/reactivity/Atom.d.ts.map +1 -1
  826. package/dist/reactivity/Atom.js +40 -15
  827. package/dist/reactivity/Atom.js.map +1 -1
  828. package/dist/reactivity/AtomHttpApi.d.ts +5 -5
  829. package/dist/reactivity/AtomHttpApi.d.ts.map +1 -1
  830. package/dist/reactivity/AtomHttpApi.js +1 -1
  831. package/dist/reactivity/AtomHttpApi.js.map +1 -1
  832. package/dist/reactivity/AtomRegistry.d.ts +2 -2
  833. package/dist/reactivity/AtomRegistry.d.ts.map +1 -1
  834. package/dist/reactivity/AtomRegistry.js +44 -9
  835. package/dist/reactivity/AtomRegistry.js.map +1 -1
  836. package/dist/reactivity/AtomRpc.d.ts +3 -3
  837. package/dist/reactivity/AtomRpc.d.ts.map +1 -1
  838. package/dist/reactivity/AtomRpc.js +1 -1
  839. package/dist/reactivity/AtomRpc.js.map +1 -1
  840. package/dist/reactivity/Hydration.d.ts.map +1 -1
  841. package/dist/reactivity/Hydration.js +46 -12
  842. package/dist/reactivity/Hydration.js.map +1 -1
  843. package/dist/reactivity/Reactivity.d.ts +71 -7
  844. package/dist/reactivity/Reactivity.d.ts.map +1 -1
  845. package/dist/reactivity/Reactivity.js +21 -12
  846. package/dist/reactivity/Reactivity.js.map +1 -1
  847. package/dist/rpc/Rpc.d.ts +18 -0
  848. package/dist/rpc/Rpc.d.ts.map +1 -1
  849. package/dist/rpc/Rpc.js +20 -0
  850. package/dist/rpc/Rpc.js.map +1 -1
  851. package/dist/rpc/RpcClient.d.ts +26 -2
  852. package/dist/rpc/RpcClient.d.ts.map +1 -1
  853. package/dist/rpc/RpcClient.js +198 -61
  854. package/dist/rpc/RpcClient.js.map +1 -1
  855. package/dist/rpc/RpcSerialization.d.ts +29 -0
  856. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  857. package/dist/rpc/RpcSerialization.js +41 -13
  858. package/dist/rpc/RpcSerialization.js.map +1 -1
  859. package/dist/rpc/RpcServer.d.ts.map +1 -1
  860. package/dist/rpc/RpcServer.js +20 -19
  861. package/dist/rpc/RpcServer.js.map +1 -1
  862. package/dist/rpc/RpcTest.d.ts +1 -0
  863. package/dist/rpc/RpcTest.d.ts.map +1 -1
  864. package/dist/rpc/RpcTest.js +1 -0
  865. package/dist/rpc/RpcTest.js.map +1 -1
  866. package/dist/schema/Model.d.ts +1 -1
  867. package/dist/schema/VariantSchema.d.ts +22 -3
  868. package/dist/schema/VariantSchema.d.ts.map +1 -1
  869. package/dist/schema/VariantSchema.js +32 -18
  870. package/dist/schema/VariantSchema.js.map +1 -1
  871. package/dist/socket/Socket.d.ts +23 -1
  872. package/dist/socket/Socket.d.ts.map +1 -1
  873. package/dist/socket/Socket.js +36 -3
  874. package/dist/socket/Socket.js.map +1 -1
  875. package/dist/sql/Migrator.d.ts +2 -1
  876. package/dist/sql/Migrator.d.ts.map +1 -1
  877. package/dist/sql/Migrator.js +21 -6
  878. package/dist/sql/Migrator.js.map +1 -1
  879. package/dist/sql/SqlClient.d.ts +148 -5
  880. package/dist/sql/SqlClient.d.ts.map +1 -1
  881. package/dist/sql/SqlClient.js +155 -27
  882. package/dist/sql/SqlClient.js.map +1 -1
  883. package/dist/sql/SqlResolver.d.ts +13 -0
  884. package/dist/sql/SqlResolver.d.ts.map +1 -1
  885. package/dist/sql/SqlResolver.js +27 -4
  886. package/dist/sql/SqlResolver.js.map +1 -1
  887. package/dist/sql/Statement.d.ts +10 -1
  888. package/dist/sql/Statement.d.ts.map +1 -1
  889. package/dist/sql/Statement.js +45 -7
  890. package/dist/sql/Statement.js.map +1 -1
  891. package/dist/testing/TestClock.d.ts.map +1 -1
  892. package/dist/testing/TestClock.js +4 -2
  893. package/dist/testing/TestClock.js.map +1 -1
  894. package/dist/testing/TestSchema.d.ts +7 -1
  895. package/dist/testing/TestSchema.d.ts.map +1 -1
  896. package/dist/testing/TestSchema.js +9 -3
  897. package/dist/testing/TestSchema.js.map +1 -1
  898. package/dist/workflow/DurableDeferred.d.ts.map +1 -1
  899. package/dist/workflow/DurableDeferred.js +21 -2
  900. package/dist/workflow/DurableDeferred.js.map +1 -1
  901. package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
  902. package/dist/workflow/WorkflowEngine.js +18 -4
  903. package/dist/workflow/WorkflowEngine.js.map +1 -1
  904. package/package.json +13 -3
  905. package/src/Arbitrary.ts +10 -2
  906. package/src/Array.ts +128 -55
  907. package/src/Bytes.ts +111 -0
  908. package/src/Channel.ts +308 -452
  909. package/src/ChannelSchema.ts +1 -49
  910. package/src/Chunk.ts +55 -61
  911. package/src/Config.ts +12 -86
  912. package/src/ConfigProvider.ts +2 -1
  913. package/src/Cron.ts +6 -3
  914. package/src/Data.ts +60 -265
  915. package/src/Duration.ts +66 -16
  916. package/src/Effect.ts +503 -168
  917. package/src/Equal.ts +8 -1
  918. package/src/Equivalence.ts +7 -4
  919. package/src/Exit.ts +27 -12
  920. package/src/FiberHandle.ts +10 -9
  921. package/src/FiberMap.ts +13 -66
  922. package/src/FileSystem.ts +10 -0
  923. package/src/Formatter.ts +28 -13
  924. package/src/Graph.ts +171 -1263
  925. package/src/Hash.ts +4 -1
  926. package/src/HashSet.ts +0 -60
  927. package/src/Iterable.ts +15 -14
  928. package/src/JsonPatch.ts +4 -0
  929. package/src/JsonSchema.ts +40 -43
  930. package/src/Layer.ts +2 -2
  931. package/src/ManagedRuntime.ts +72 -6
  932. package/src/Metric.ts +252 -510
  933. package/src/MutableHashMap.ts +4 -473
  934. package/src/MutableList.ts +7 -5
  935. package/src/MutableRef.ts +8 -1
  936. package/src/Number.ts +2 -2
  937. package/src/Optic.ts +17 -332
  938. package/src/PartitionedSemaphore.ts +24 -13
  939. package/src/Path.ts +9 -1
  940. package/src/Pool.ts +109 -37
  941. package/src/PubSub.ts +17 -13
  942. package/src/Queue.ts +5 -37
  943. package/src/Random.ts +1 -1
  944. package/src/RcMap.ts +14 -8
  945. package/src/Record.ts +51 -0
  946. package/src/Ref.ts +15 -104
  947. package/src/References.ts +5 -4
  948. package/src/RequestResolver.ts +46 -87
  949. package/src/Resource.ts +1 -1
  950. package/src/Runtime.ts +19 -18
  951. package/src/Schedule.ts +3 -95
  952. package/src/Schema.ts +639 -381
  953. package/src/SchemaAST.ts +40 -29
  954. package/src/SchemaGetter.ts +22 -5
  955. package/src/SchemaIssue.ts +44 -53
  956. package/src/SchemaParser.ts +51 -18
  957. package/src/SchemaRepresentation.ts +95 -35
  958. package/src/SchemaTransformation.ts +10 -3
  959. package/src/Scope.ts +12 -2
  960. package/src/ScopedCache.ts +17 -142
  961. package/src/SemVer.ts +1528 -0
  962. package/src/SemVerRange.ts +883 -0
  963. package/src/Semaphore.ts +67 -40
  964. package/src/Sink.ts +21 -4
  965. package/src/Stream.ts +367 -1027
  966. package/src/String.ts +11 -8
  967. package/src/TextDiff.ts +766 -0
  968. package/src/Tracer.ts +15 -1
  969. package/src/TxHashMap.ts +1 -103
  970. package/src/TxHashSet.ts +48 -753
  971. package/src/ai/AiError.ts +66 -4
  972. package/src/ai/Chat.ts +10 -5
  973. package/src/ai/Decision.ts +49 -1
  974. package/src/ai/DecisionModel.ts +264 -108
  975. package/src/ai/EmbeddingModel.ts +25 -13
  976. package/src/ai/LanguageModel.ts +9 -0
  977. package/src/ai/McpClient.ts +1211 -0
  978. package/src/ai/McpClientError.ts +329 -0
  979. package/src/ai/McpProtocol.ts +2 -2
  980. package/src/ai/McpSchema.ts +153 -35
  981. package/src/ai/McpServer.ts +231 -233
  982. package/src/ai/Prompt.ts +114 -35
  983. package/src/ai/Response.ts +220 -65
  984. package/src/ai/Tool.ts +50 -6
  985. package/src/ai/Toolkit.ts +82 -11
  986. package/src/ai/index.ts +12 -0
  987. package/src/ai/internal/mcpCore.ts +13 -14
  988. package/src/ai/internal/mcpProtocol/v2024_11_05.ts +1 -1
  989. package/src/ai/internal/mcpProtocol/v2025_03_26.ts +1 -1
  990. package/src/ai/internal/mcpProtocol/v2025_06_18.ts +3 -3
  991. package/src/ai/internal/mcpProtocol/v2025_11_25.ts +3 -3
  992. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +12 -14
  993. package/src/ai/internal/mcpProtocol.ts +22 -2
  994. package/src/ai/internal/mcpRuntime.ts +3 -4
  995. package/src/ai/internal/mcpSchema/v2024_11_05.ts +20 -13
  996. package/src/ai/internal/mcpSchema/v2025_03_26.ts +4 -2
  997. package/src/ai/internal/mcpSchema/v2025_06_18.ts +7 -7
  998. package/src/ai/internal/mcpSchema/v2025_11_25.ts +8 -8
  999. package/src/ai/internal/mcpSchema/v2026_07_28.ts +44 -42
  1000. package/src/cli/Argument.ts +15 -0
  1001. package/src/cli/CliError.ts +136 -4
  1002. package/src/cli/CliOutput.ts +183 -6
  1003. package/src/cli/Command.ts +367 -48
  1004. package/src/cli/Completions.ts +56 -0
  1005. package/src/cli/Flag.ts +132 -0
  1006. package/src/cli/GlobalFlag.ts +5 -6
  1007. package/src/cli/Param.ts +151 -6
  1008. package/src/cli/TerminalCapabilities.ts +159 -0
  1009. package/src/cli/index.ts +6 -0
  1010. package/src/cli/internal/command.ts +8 -3
  1011. package/src/cli/internal/completions/bash.ts +83 -32
  1012. package/src/cli/internal/completions/descriptor.ts +11 -1
  1013. package/src/cli/internal/completions/fish.ts +10 -8
  1014. package/src/cli/internal/completions/powershell.ts +23 -14
  1015. package/src/cli/internal/completions/zsh.ts +8 -5
  1016. package/src/cli/internal/formatter.ts +18 -0
  1017. package/src/cli/internal/lexer.ts +12 -5
  1018. package/src/cli/internal/parser.ts +31 -11
  1019. package/src/cluster/ClusterCron.ts +94 -35
  1020. package/src/cluster/ClusterMetrics.ts +149 -7
  1021. package/src/cluster/ClusterWorkflowEngine.ts +130 -57
  1022. package/src/cluster/Entity.ts +4 -0
  1023. package/src/cluster/MessageStorage.ts +26 -14
  1024. package/src/cluster/Runners.ts +76 -25
  1025. package/src/cluster/Sharding.ts +200 -58
  1026. package/src/cluster/ShardingConfig.ts +20 -0
  1027. package/src/cluster/Snowflake.ts +3 -7
  1028. package/src/cluster/SqlMessageStorage.ts +58 -55
  1029. package/src/cluster/SqlRunnerStorage.ts +120 -51
  1030. package/src/cluster/internal/entityManager.ts +155 -32
  1031. package/src/devtools/DevTools.ts +3 -2
  1032. package/src/devtools/DevToolsClient.ts +29 -10
  1033. package/src/encoding/Base64.ts +38 -0
  1034. package/src/encoding/Base64Url.ts +31 -0
  1035. package/src/encoding/Ini.ts +3 -0
  1036. package/src/encoding/JsonArray.ts +849 -0
  1037. package/src/encoding/Ndjson.ts +211 -20
  1038. package/src/encoding/SchemaBinary.ts +14 -48
  1039. package/src/encoding/Sse.ts +4 -3
  1040. package/src/encoding/Tar.ts +1417 -0
  1041. package/src/encoding/Toml.ts +36 -19
  1042. package/src/encoding/Xml.ts +2037 -0
  1043. package/src/encoding/Yaml.ts +108 -36
  1044. package/src/encoding/Zip.ts +1558 -0
  1045. package/src/encoding/index.ts +24 -0
  1046. package/src/eventlog/EventJournal.ts +611 -227
  1047. package/src/eventlog/EventLog.ts +496 -196
  1048. package/src/eventlog/EventLogEncryption.ts +128 -43
  1049. package/src/eventlog/EventLogMessage.ts +62 -11
  1050. package/src/eventlog/EventLogRemote.ts +77 -21
  1051. package/src/eventlog/EventLogServer.ts +162 -20
  1052. package/src/eventlog/EventLogServerEncrypted.ts +121 -80
  1053. package/src/eventlog/EventLogServerUnencrypted.ts +180 -77
  1054. package/src/eventlog/EventRow.ts +706 -0
  1055. package/src/eventlog/SqlEventJournal.ts +496 -193
  1056. package/src/eventlog/SqlEventLogServerEncrypted.ts +212 -83
  1057. package/src/eventlog/SqlEventLogServerUnencrypted.ts +141 -62
  1058. package/src/eventlog/index.ts +6 -0
  1059. package/src/eventlog/internal/conflicts.ts +119 -0
  1060. package/src/graphql/GraphQLClientError.ts +5 -12
  1061. package/src/graphql/GraphQLProtocol.ts +12 -9
  1062. package/src/graphql/GraphQLResolver.ts +90 -239
  1063. package/src/http/Cookies.ts +10 -11
  1064. package/src/http/FetchHttpClient.ts +56 -6
  1065. package/src/http/FindMyWay/internal/router.ts +11 -0
  1066. package/src/http/Headers.ts +337 -154
  1067. package/src/http/HttpClient.ts +673 -142
  1068. package/src/http/HttpClientError.ts +35 -1
  1069. package/src/http/HttpClientRequest.ts +151 -5
  1070. package/src/http/HttpClientResponse.ts +71 -0
  1071. package/src/http/HttpEffect.ts +25 -33
  1072. package/src/http/HttpIncomingMessage.ts +3 -23
  1073. package/src/http/HttpMiddleware.ts +194 -40
  1074. package/src/http/HttpRouter.ts +10 -3
  1075. package/src/http/HttpServerError.ts +8 -5
  1076. package/src/http/HttpServerRequest.ts +172 -27
  1077. package/src/http/HttpServerResponse.ts +49 -23
  1078. package/src/http/HttpStaticServer.ts +71 -26
  1079. package/src/http/MultipartParser/internal/contentType.ts +109 -8
  1080. package/src/http/MultipartParser/internal/headers.ts +4 -16
  1081. package/src/http/MultipartParser/internal/multipart.ts +10 -32
  1082. package/src/http/Url.ts +6 -1
  1083. package/src/http/UrlParams.ts +6 -1
  1084. package/src/http/internal/compression.ts +4 -5
  1085. package/src/http/internal/decompression.ts +32 -17
  1086. package/src/http/internal/httpBody.ts +10 -2
  1087. package/src/http/internal/lazyStream.ts +25 -0
  1088. package/src/http/internal/requestState.ts +33 -0
  1089. package/src/http/internal/urlParams.ts +29 -0
  1090. package/src/http/internal/webResponse.ts +20 -0
  1091. package/src/http-api/HttpApi.ts +4 -7
  1092. package/src/http-api/HttpApiBuilder.ts +190 -32
  1093. package/src/http-api/HttpApiClient.ts +364 -90
  1094. package/src/http-api/HttpApiEndpoint.ts +248 -46
  1095. package/src/http-api/HttpApiError.ts +55 -0
  1096. package/src/http-api/HttpApiScalar.ts +4 -3
  1097. package/src/http-api/HttpApiSchema.ts +373 -18
  1098. package/src/http-api/HttpApiSwagger.ts +11 -4
  1099. package/src/http-api/HttpApiTest.ts +36 -11
  1100. package/src/http-api/OpenApi.ts +103 -58
  1101. package/src/http-api/internal/path.ts +40 -12
  1102. package/src/http-api/internal/toCodecHttpProperties.ts +56 -0
  1103. package/src/index.ts +24 -0
  1104. package/src/internal/arbitrary/runner.ts +133 -36
  1105. package/src/internal/core.ts +3 -1
  1106. package/src/internal/dateTime.ts +20 -7
  1107. package/src/internal/effect.ts +144 -100
  1108. package/src/internal/equal.ts +17 -0
  1109. package/src/internal/hashMap.ts +2 -2
  1110. package/src/internal/hydration.ts +15 -0
  1111. package/src/internal/inflate.ts +710 -0
  1112. package/src/internal/jsonSchema.ts +27 -0
  1113. package/src/internal/matcher.ts +1 -1
  1114. package/src/internal/record.ts +6 -0
  1115. package/src/internal/request.ts +21 -6
  1116. package/src/internal/schedule.ts +20 -39
  1117. package/src/internal/schema/compilerRegistry.ts +6 -1
  1118. package/src/internal/schema/content.ts +18 -0
  1119. package/src/internal/schema/fromJsonSchemaDocument.ts +458 -351
  1120. package/src/internal/schema/fromRepresentation.ts +2 -1
  1121. package/src/internal/schema/interpreter.ts +58 -45
  1122. package/src/internal/schema/standardSchema.ts +34 -32
  1123. package/src/internal/schema/toCodeDocument.ts +12 -7
  1124. package/src/internal/schema/toCodec.ts +134 -15
  1125. package/src/internal/schema/toFormatter.ts +6 -6
  1126. package/src/internal/schema/toJsonSchemaDocument.ts +246 -194
  1127. package/src/internal/schema/toRepresentation.ts +122 -140
  1128. package/src/internal/sql.ts +14 -0
  1129. package/src/internal/trie.ts +1 -3
  1130. package/src/internal/uuid.ts +15 -10
  1131. package/src/internal/version.ts +1 -1
  1132. package/src/net/NetAddress.ts +2 -9
  1133. package/src/observability/OtlpExporter.ts +5 -12
  1134. package/src/observability/OtlpMetrics.ts +5 -3
  1135. package/src/observability/OtlpProxy.ts +314 -0
  1136. package/src/observability/OtlpResource.ts +16 -6
  1137. package/src/observability/OtlpSerialization.ts +17 -3
  1138. package/src/observability/OtlpTracer.ts +4 -0
  1139. package/src/observability/index.ts +6 -0
  1140. package/src/observability/internal/protobuf.ts +2 -10
  1141. package/src/persistence/CircuitBreaker.ts +1678 -0
  1142. package/src/persistence/PersistedCache.ts +3 -1
  1143. package/src/persistence/PersistedQueue.ts +223 -153
  1144. package/src/persistence/Persistence.ts +64 -30
  1145. package/src/persistence/RateLimiter.ts +18 -21
  1146. package/src/persistence/Redis.ts +129 -8
  1147. package/src/persistence/UserDirectories.ts +273 -0
  1148. package/src/persistence/index.ts +12 -0
  1149. package/src/process/ChildProcess.ts +32 -5
  1150. package/src/process/ChildProcessSpawner.ts +41 -2
  1151. package/src/reactivity/AsyncResult.ts +5 -39
  1152. package/src/reactivity/Atom.ts +134 -166
  1153. package/src/reactivity/AtomHttpApi.ts +10 -16
  1154. package/src/reactivity/AtomRegistry.ts +50 -29
  1155. package/src/reactivity/AtomRpc.ts +6 -22
  1156. package/src/reactivity/Hydration.ts +53 -12
  1157. package/src/reactivity/Reactivity.ts +97 -39
  1158. package/src/rpc/Rpc.ts +21 -0
  1159. package/src/rpc/RpcClient.ts +283 -104
  1160. package/src/rpc/RpcSerialization.ts +53 -14
  1161. package/src/rpc/RpcServer.ts +27 -21
  1162. package/src/rpc/RpcTest.ts +3 -0
  1163. package/src/schema/VariantSchema.ts +86 -22
  1164. package/src/socket/Socket.ts +45 -20
  1165. package/src/sql/Migrator.ts +26 -11
  1166. package/src/sql/SqlClient.ts +273 -29
  1167. package/src/sql/SqlResolver.ts +32 -9
  1168. package/src/sql/Statement.ts +65 -10
  1169. package/src/testing/TestClock.ts +4 -1
  1170. package/src/testing/TestSchema.ts +9 -3
  1171. package/src/workflow/DurableDeferred.ts +23 -6
  1172. package/src/workflow/WorkflowEngine.ts +34 -10
  1173. package/dist/http/internal/preResponseHandler.d.ts +0 -2
  1174. package/dist/http/internal/preResponseHandler.d.ts.map +0 -1
  1175. package/dist/http/internal/preResponseHandler.js +0 -14
  1176. package/dist/http/internal/preResponseHandler.js.map +0 -1
  1177. package/src/http/internal/preResponseHandler.ts +0 -19
@@ -0,0 +1,1211 @@
1
+ /**
2
+ * Connects to MCP servers with scoped Effect clients.
3
+ *
4
+ * Clients discover tools, prompts and resources using the protocol revision selected by
5
+ * their transport. `callTool` returns tool-reported errors as results; supplying a schema
6
+ * turns them into a `ToolError` reason that retains the original result. Transport and
7
+ * protocol failures fail the Effect. Interactive server requests, subscriptions, OAuth
8
+ * and retries are not included.
9
+ *
10
+ * @stability experimental
11
+ * @since 4.0.6
12
+ */
13
+ import * as ByteSize from "../ByteSize.ts"
14
+ import type * as Cause from "../Cause.ts"
15
+ import * as Context from "../Context.ts"
16
+ import * as Deferred from "../Deferred.ts"
17
+ import * as Duration from "../Duration.ts"
18
+ import * as Effect from "../Effect.ts"
19
+ import * as Base64 from "../encoding/Base64.ts"
20
+ import * as Sse from "../encoding/Sse.ts"
21
+ import * as HttpClient from "../http/HttpClient.ts"
22
+ import * as HttpClientRequest from "../http/HttpClientRequest.ts"
23
+ import type * as HttpClientResponse from "../http/HttpClientResponse.ts"
24
+ import * as Layer from "../Layer.ts"
25
+ import * as Option from "../Option.ts"
26
+ import * as Predicate from "../Predicate.ts"
27
+ import type * as ChildProcess from "../process/ChildProcess.ts"
28
+ import { ChildProcessSpawner } from "../process/ChildProcessSpawner.ts"
29
+ import * as Queue from "../Queue.ts"
30
+ import type * as Rpc from "../rpc/Rpc.ts"
31
+ import * as Schema from "../Schema.ts"
32
+ import type * as Scope from "../Scope.ts"
33
+ import * as Stream from "../Stream.ts"
34
+ import { BASE64_SENTINEL_PREFIX, BASE64_SENTINEL_SUFFIX } from "./internal/mcpProtocol.ts"
35
+ import {
36
+ ClosedError,
37
+ ConfigurationError,
38
+ HttpError,
39
+ isMcpClientError,
40
+ LimitError,
41
+ McpClientError,
42
+ type McpClientErrorReason,
43
+ ProtocolError,
44
+ TimeoutError,
45
+ ToolError,
46
+ TransportError,
47
+ UnsupportedError,
48
+ ValidationError
49
+ } from "./McpClientError.ts"
50
+ import type * as McpProtocol from "./McpProtocol.ts"
51
+ import * as McpSchema from "./McpSchema.ts"
52
+ import * as Tool from "./Tool.ts"
53
+ import * as Toolkit from "./Toolkit.ts"
54
+
55
+ // =============================================================================
56
+ // Models
57
+ // =============================================================================
58
+
59
+ /**
60
+ * Supported MCP wire protocol revisions.
61
+ *
62
+ * @stability experimental
63
+ * @category models
64
+ * @since 4.0.6
65
+ */
66
+ export type ProtocolVersion = "2025-11-25" | "2026-07-28"
67
+
68
+ /**
69
+ * Service tag for applications that provide one default MCP connection.
70
+ *
71
+ * @stability experimental
72
+ * @category services
73
+ * @since 4.0.6
74
+ */
75
+ export const McpClient: Context.Service<McpClient, McpClient> = Context.Service<McpClient>("effect/ai/McpClient")
76
+
77
+ /**
78
+ * A scoped connection to one MCP server.
79
+ *
80
+ * @stability experimental
81
+ * @category models
82
+ * @since 4.0.6
83
+ */
84
+ export interface McpClient {
85
+ readonly [TypeId]: typeof TypeId
86
+ readonly protocolVersion: ProtocolVersion
87
+ readonly serverInfo: McpSchema.Implementation | undefined
88
+ readonly instructions?: string | undefined
89
+ /**
90
+ * Returns every tool page as one snapshot, bounded by the deadline, 100 pages and 10,000 tools.
91
+ * `timeout` overrides the client's discovery deadline.
92
+ */
93
+ readonly listTools: (
94
+ options?: { readonly timeout?: Duration.Input | undefined }
95
+ ) => Effect.Effect<ReadonlyArray<McpSchema.Tool>, McpClientError>
96
+ /** Returns every prompt page as one snapshot with the same bounds as `listTools`. */
97
+ readonly listPrompts: (
98
+ options?: { readonly timeout?: Duration.Input | undefined }
99
+ ) => Effect.Effect<ReadonlyArray<McpSchema.Prompt>, McpClientError>
100
+ /** Gets the messages for a discovered prompt. Unbounded unless `timeout` is supplied. */
101
+ readonly getPrompt: (
102
+ params: {
103
+ readonly prompt: McpSchema.Prompt
104
+ readonly arguments?: typeof McpSchema.GetPrompt.payloadSchema.Type["arguments"]
105
+ },
106
+ options?: { readonly timeout?: Duration.Input | undefined }
107
+ ) => Effect.Effect<McpSchema.GetPromptResult, McpClientError>
108
+ /** Returns every resource page as one snapshot with the same bounds as `listTools`. */
109
+ readonly listResources: (
110
+ options?: { readonly timeout?: Duration.Input | undefined }
111
+ ) => Effect.Effect<ReadonlyArray<McpSchema.Resource>, McpClientError>
112
+ /** Reads the complete contents of a resource URI. Unbounded unless `timeout` is supplied. */
113
+ readonly readResource: (
114
+ params: { readonly uri: string },
115
+ options?: { readonly timeout?: Duration.Input | undefined }
116
+ ) => Effect.Effect<McpSchema.ReadResourceResult, McpClientError>
117
+ /**
118
+ * Calls a discovered tool, optionally decoding with a schema. Errors retain the full result.
119
+ * Unbounded unless `timeout` is supplied.
120
+ */
121
+ readonly callTool: {
122
+ (
123
+ params: {
124
+ readonly tool: McpSchema.Tool
125
+ readonly schema?: undefined
126
+ readonly arguments?: typeof McpSchema.CallTool.payloadSchema.Type["arguments"]
127
+ },
128
+ options?: { readonly timeout?: Duration.Input | undefined }
129
+ ): Effect.Effect<McpSchema.CallToolResult, McpClientError>
130
+ <S extends Schema.Top>(
131
+ params: {
132
+ readonly tool: McpSchema.Tool
133
+ readonly schema: S
134
+ readonly arguments?: typeof McpSchema.CallTool.payloadSchema.Type["arguments"]
135
+ },
136
+ options?: { readonly timeout?: Duration.Input | undefined }
137
+ ): Effect.Effect<S["Type"], McpClientError, S["DecodingServices"]>
138
+ <S extends Schema.Top = never>(
139
+ params: {
140
+ readonly tool: McpSchema.Tool
141
+ readonly schema?: S | undefined
142
+ readonly arguments?: typeof McpSchema.CallTool.payloadSchema.Type["arguments"]
143
+ },
144
+ options?: { readonly timeout?: Duration.Input | undefined }
145
+ ): Effect.Effect<McpSchema.CallToolResult | S["Type"], McpClientError, S["DecodingServices"]>
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Returns whether a value is an MCP client.
151
+ *
152
+ * @stability experimental
153
+ * @category guards
154
+ * @since 4.0.6
155
+ */
156
+ export const isMcpClient = (value: unknown): value is McpClient => Predicate.hasProperty(value, TypeId)
157
+
158
+ // =============================================================================
159
+ // Constructors
160
+ // =============================================================================
161
+
162
+ /**
163
+ * Constructs and connects a client using the supplied MCP transport service and its protocol adapter.
164
+ *
165
+ * **Details**
166
+ *
167
+ * `name`, `version` and the optional `title`, `description`, `websiteUrl` and
168
+ * `icons` identify the client to the server. `timeout` defaults to 60 seconds
169
+ * and bounds initialization and each complete `listTools`, `listPrompts` or
170
+ * `listResources` scan. `callTool`, `getPrompt` and `readResource` have no
171
+ * deadline unless their own `timeout` option is supplied.
172
+ * Schema decoding requires the schema's services from the caller.
173
+ *
174
+ * @stability experimental
175
+ * @category constructors
176
+ * @since 4.0.6
177
+ */
178
+ export const make: (options: {
179
+ readonly name: string
180
+ readonly version: string
181
+ readonly title?: string | undefined
182
+ readonly description?: string | undefined
183
+ readonly websiteUrl?: string | undefined
184
+ readonly icons?: ReadonlyArray<McpSchema.Icon> | undefined
185
+ readonly timeout?: Duration.Input | undefined
186
+ }) => Effect.Effect<
187
+ McpClient,
188
+ McpClientError,
189
+ Scope.Scope | Transport
190
+ > = Effect.fnUntraced(function*(options: Options): Effect.fn.Return<
191
+ McpClient,
192
+ McpClientError,
193
+ Scope.Scope | Transport
194
+ > {
195
+ const transport = yield* Transport
196
+ const protocol = transport.protocol
197
+ const version = protocol.protocolVersion
198
+ const modern = version === "2026-07-28"
199
+ const timeout = options.timeout ?? DEFAULT_TIMEOUT
200
+ const closed = yield* Deferred.make<never, McpClientError>()
201
+ yield* Effect.addFinalizer(() =>
202
+ Deferred.fail(closed, fail(new ClosedError({ description: "MCP client scope closed" })))
203
+ )
204
+ let nextId = 1
205
+
206
+ const clientInfo = encodeImplementation({
207
+ name: options.name,
208
+ title: options.title,
209
+ version: options.version,
210
+ description: options.description,
211
+ websiteUrl: options.websiteUrl,
212
+ icons: options.icons
213
+ })
214
+
215
+ // Modern requests carry the client identity in every request.
216
+ // https://modelcontextprotocol.io/specification/2026-07-28/basic/index
217
+ const meta = {
218
+ "io.modelcontextprotocol/protocolVersion": version,
219
+ "io.modelcontextprotocol/clientInfo": clientInfo,
220
+ "io.modelcontextprotocol/clientCapabilities": {}
221
+ }
222
+
223
+ const request = Effect.fnUntraced(function*<A>(
224
+ method: string,
225
+ params: Record<string, unknown>,
226
+ tool?: McpSchema.Tool
227
+ ): Effect.fn.Return<A, McpClientError> {
228
+ const rpc = protocol.clientRpcs.requests.get(method) as Rpc.AnyWithProps | undefined
229
+ if (rpc === undefined) {
230
+ return yield* fail(new UnsupportedError({ description: `Unsupported MCP method: ${method}` }))
231
+ }
232
+
233
+ const codecs = protocol.payloadCodecs(rpc)
234
+ const payload = yield* codecs.decode(modern ? { ...params, _meta: meta } : params).pipe(
235
+ Effect.flatMap(codecs.encode),
236
+ Effect.mapError(validationError)
237
+ )
238
+
239
+ const response = yield* transport.request(
240
+ { jsonrpc: "2.0", id: nextId++, method, params: payload as Readonly<Record<string, unknown>> },
241
+ tool
242
+ )
243
+ if ("error" in response) {
244
+ return yield* fail(
245
+ new ProtocolError({
246
+ code: response.error.code,
247
+ data: response.error.data,
248
+ description: response.error.message
249
+ })
250
+ )
251
+ }
252
+
253
+ let result: unknown = response.result
254
+ // Older modern peers may omit the complete discriminator.
255
+ if (modern && isRecord(result) && result.resultType === undefined) result = { ...result, resultType: "complete" }
256
+ if (method === "tools/list" && isRecord(result) && Array.isArray(result.tools)) {
257
+ result = { ...result, tools: result.tools.filter((tool) => !requiresTasks(tool)) }
258
+ }
259
+
260
+ const validated = yield* decodeUnknown(rpc.successSchema, result)
261
+ if (isRecord(result) && result.resultType === "input_required") {
262
+ return yield* fail(new UnsupportedError({ description: "MCP input continuation is not supported" }))
263
+ }
264
+ const publicRpc = publicRpcs.get(method)
265
+ return (publicRpc === undefined ? validated : yield* decodeUnknown(publicRpc.successSchema, result)) as A
266
+ })
267
+
268
+ // Initialization and discovery default to `timeout`; other operations are bounded only on request.
269
+ const withDeadline = <A, E, R>(
270
+ effect: Effect.Effect<A, E, R>,
271
+ operation: string,
272
+ duration: Duration.Input | undefined
273
+ ) => {
274
+ const open = Effect.raceFirst(effect, Deferred.await(closed))
275
+ return duration === undefined ? open : open.pipe(
276
+ Effect.timeoutOrElse({
277
+ duration,
278
+ orElse: () => Effect.fail(fail(new TimeoutError({ operation })))
279
+ })
280
+ )
281
+ }
282
+
283
+ const initialize = Effect.gen(function*() {
284
+ if (!modern) {
285
+ return yield* request<InitializeResult>("initialize", {
286
+ protocolVersion: version,
287
+ capabilities: {},
288
+ clientInfo
289
+ })
290
+ }
291
+ const discover = request<InitializeResult>("server/discover", {})
292
+ // Retry once when the server rejects a version that it reports as supported.
293
+ return yield* discover.pipe(Effect.catchIf((error) => {
294
+ const reason = error.reason
295
+ if (reason._tag !== "ProtocolError" && reason._tag !== "HttpError") return false
296
+ const rejection = Option.getOrUndefined(decodeVersionRejection(reason.data))
297
+ return reason.code === McpSchema.UNSUPPORTED_PROTOCOL_VERSION_ERROR_CODE && rejection?.requested === version &&
298
+ rejection.supported.includes(version)
299
+ }, () => discover))
300
+ })
301
+
302
+ const { capabilities, instructions, serverInfo } = yield* withDeadline(
303
+ Effect.gen(function*() {
304
+ const result = yield* initialize
305
+ if (modern ? !result.supportedVersions?.includes(version) : result.protocolVersion !== version) {
306
+ return yield* fail(
307
+ new UnsupportedError({ description: "Server does not support the explicitly selected protocol version" })
308
+ )
309
+ }
310
+ const identity = modern ? result._meta?.["io.modelcontextprotocol/serverInfo"] : result.serverInfo
311
+ const capabilities = yield* decodeServerCapabilities(result.capabilities)
312
+ const serverInfo = identity === undefined ? undefined : yield* decodeImplementation(identity)
313
+ if (!modern) yield* transport.notify({ jsonrpc: "2.0", method: "notifications/initialized" })
314
+ return { capabilities, instructions: result.instructions, serverInfo }
315
+ }).pipe(
316
+ Effect.mapError((cause) =>
317
+ Schema.isSchemaError(cause)
318
+ ? fail(new ProtocolError({ description: "Invalid MCP initialization result", cause }))
319
+ : cause
320
+ )
321
+ ),
322
+ "initialization",
323
+ timeout
324
+ )
325
+
326
+ // Retrieval requires the capability; discovery treats a missing one as empty.
327
+ const call = <A>(
328
+ kind: Capability,
329
+ method: string,
330
+ params: Record<string, unknown>,
331
+ tool?: McpSchema.Tool
332
+ ): Effect.Effect<A, McpClientError> =>
333
+ capabilities[kind] === undefined
334
+ ? Effect.fail(fail(new UnsupportedError({ description: `Server does not advertise ${kind}` })))
335
+ : request<A>(method, params, tool)
336
+
337
+ const list = <K extends Capability, A>(kind: K) =>
338
+ Effect.fnUntraced(
339
+ function*(_options?: CallOptions) {
340
+ if (capabilities[kind] === undefined) return []
341
+ const items: Array<A> = []
342
+ const cursors = new Set<string>()
343
+ let cursor: string | undefined
344
+ for (let page = 0; page < MAX_DISCOVERY_PAGES; page++) {
345
+ const result = yield* request<ListResult<K, A>>(`${kind}/list`, cursor === undefined ? {} : { cursor })
346
+ if (items.length + result[kind].length > MAX_DISCOVERY_ITEMS) {
347
+ return yield* limitError(`MCP ${kind} discovery exceeded its item limit`)
348
+ }
349
+ items.push(...result[kind])
350
+ if (result.nextCursor === undefined) return items
351
+ if (cursors.has(result.nextCursor)) {
352
+ return yield* limitError(`MCP ${kind} discovery repeated a cursor`)
353
+ }
354
+ cursors.add(cursor = result.nextCursor)
355
+ }
356
+ return yield* limitError(`MCP ${kind} discovery exceeded its page limit`)
357
+ },
358
+ (effect, callOptions) => withDeadline(effect, `${kind} discovery`, callOptions?.timeout ?? timeout)
359
+ )
360
+
361
+ const listTools = list<"tools", McpSchema.Tool>("tools")
362
+
363
+ const callTool = Effect.fnUntraced(
364
+ function*<S extends Schema.Top>(
365
+ params: {
366
+ readonly tool: McpSchema.Tool
367
+ readonly schema?: S | undefined
368
+ readonly arguments?: typeof McpSchema.CallTool.payloadSchema.Type["arguments"]
369
+ },
370
+ _options?: CallOptions
371
+ ) {
372
+ const result = yield* call<McpSchema.CallToolResult>(
373
+ "tools",
374
+ "tools/call",
375
+ { name: params.tool.name, ...(params.arguments === undefined ? {} : { arguments: params.arguments }) },
376
+ params.tool
377
+ )
378
+ if (params.schema === undefined) return result
379
+ if (result.isError === true) {
380
+ return yield* fail(new ToolError({ result }))
381
+ }
382
+ return yield* Schema.decodeUnknownEffect(params.schema)(result.structuredContent).pipe(
383
+ Effect.mapError((cause) =>
384
+ fail(new ValidationError({ description: "MCP structured result validation failed", cause }))
385
+ )
386
+ )
387
+ },
388
+ (effect, _params, callOptions) => withDeadline(effect, "tools/call", callOptions?.timeout)
389
+ )
390
+
391
+ return {
392
+ [TypeId]: TypeId,
393
+ protocolVersion: version,
394
+ serverInfo,
395
+ instructions,
396
+ listTools: (callOptions) =>
397
+ listTools(callOptions).pipe(Effect.map((tools) => tools.filter((tool) => transport.isCallable(tool)))),
398
+ listPrompts: list("prompts"),
399
+ listResources: list("resources"),
400
+ getPrompt: (params, callOptions) =>
401
+ withDeadline(
402
+ call<McpSchema.GetPromptResult>("prompts", "prompts/get", {
403
+ name: params.prompt.name,
404
+ ...(params.arguments === undefined ? {} : { arguments: params.arguments })
405
+ }),
406
+ "prompts/get",
407
+ callOptions?.timeout
408
+ ),
409
+ readResource: (params, callOptions) =>
410
+ withDeadline(
411
+ call<McpSchema.ReadResourceResult>("resources", "resources/read", { uri: params.uri }),
412
+ "resources/read",
413
+ callOptions?.timeout
414
+ ),
415
+ callTool: callTool as McpClient["callTool"]
416
+ }
417
+ })
418
+
419
+ // =============================================================================
420
+ // Toolkit
421
+ // =============================================================================
422
+
423
+ /**
424
+ * Discovers remote tools and binds their handlers using the standard Toolkit implementation.
425
+ *
426
+ * **Details**
427
+ *
428
+ * Pass an optional prefix such as `"reports__"` to qualify model tool names.
429
+ * Remote JSON Schemas are advertised without local schema import. Results become
430
+ * text; tool-reported and operational failures fail the Effect. Use `Tool.make`
431
+ * or `Tool.dynamic` with `Toolkit.make` for custom validation, approval or results.
432
+ * Build a new toolkit to discover changes between model turns.
433
+ *
434
+ * @stability experimental
435
+ * @category constructors
436
+ * @since 4.0.6
437
+ */
438
+ export const toolkit: (client: McpClient, prefix?: string) => Effect.Effect<
439
+ Toolkit.WithHandler<
440
+ Record<
441
+ string,
442
+ Tool.Tool<string, {
443
+ readonly parameters: typeof Schema.Unknown
444
+ readonly success: typeof Schema.String
445
+ readonly failure: typeof McpClientError
446
+ readonly failureMode: "error"
447
+ }>
448
+ >
449
+ >,
450
+ McpClientError
451
+ > = Effect.fnUntraced(function*(client: McpClient, prefix = "") {
452
+ const descriptors = yield* client.listTools()
453
+ const tools: Array<
454
+ Tool.Tool<string, {
455
+ readonly parameters: typeof Schema.Unknown
456
+ readonly success: typeof Schema.String
457
+ readonly failure: typeof McpClientError
458
+ readonly failureMode: "error"
459
+ }>
460
+ > = []
461
+ const handlers: Record<string, (params: unknown) => Effect.Effect<string, McpClientError>> = Object.create(null)
462
+
463
+ for (const descriptor of descriptors) {
464
+ const name = `${prefix}${descriptor.name}`
465
+ if (!/^[a-zA-Z0-9_-]{1,64}$/.test(name) || Object.hasOwn(handlers, name)) {
466
+ return yield* fail(new ConfigurationError({ description: `Invalid or duplicate MCP model tool name: ${name}` }))
467
+ }
468
+ tools.push(
469
+ Tool.dynamic(name, {
470
+ parameters: descriptor.inputSchema,
471
+ description: descriptor.description,
472
+ success: Schema.String,
473
+ failure: McpClientError
474
+ }).annotate(Tool.Strict, false)
475
+ )
476
+ handlers[name] = Effect.fnUntraced(function*(params: unknown) {
477
+ const args = yield* decodeToolArguments(params).pipe(
478
+ Effect.mapError((cause) =>
479
+ fail(new ValidationError({ description: "MCP tool arguments must be a JSON object", cause }))
480
+ )
481
+ )
482
+ const result = yield* client.callTool({ tool: descriptor, arguments: args })
483
+ if (result.isError === true) {
484
+ return yield* fail(new ToolError({ result }))
485
+ }
486
+ return yield* toText(result)
487
+ })
488
+ }
489
+
490
+ const toolkit = Toolkit.make(...tools)
491
+ return yield* toolkit.pipe(Effect.provideContext(yield* toolkit.toHandlers(handlers)))
492
+ })
493
+
494
+ // =============================================================================
495
+ // Transports
496
+ // =============================================================================
497
+
498
+ /**
499
+ * Service supplied by the built-in MCP transport constructors and layers.
500
+ *
501
+ * **Details**
502
+ *
503
+ * Transport construction owns cleanup through its Effect scope.
504
+ *
505
+ * @stability experimental
506
+ * @category services
507
+ * @since 4.0.6
508
+ */
509
+ export const Transport: Context.Service<Transport, Transport> = Context.Service<Transport>(
510
+ "effect/ai/McpClient/Transport"
511
+ )
512
+
513
+ /**
514
+ * Exchanges JSON-RPC messages with one MCP server using its protocol adapter.
515
+ *
516
+ * @stability experimental
517
+ * @category models
518
+ * @since 4.0.6
519
+ */
520
+ export interface Transport {
521
+ readonly [TransportTypeId]: typeof TransportTypeId
522
+ readonly protocol: McpProtocol.ProtocolAdapter<ProtocolVersion>
523
+ /** Sends a request and waits for its response. `tool` supplies header routing for tool calls. */
524
+ readonly request: (
525
+ message: McpSchema.JsonRpcRequest,
526
+ tool?: McpSchema.Tool
527
+ ) => Effect.Effect<McpSchema.JsonRpcResponse, McpClientError>
528
+ /** Sends a notification without waiting for a reply. */
529
+ readonly notify: (message: McpSchema.JsonRpcNotification) => Effect.Effect<void, McpClientError>
530
+ /** Returns whether the transport can route a call to the tool. */
531
+ readonly isCallable: (tool: McpSchema.Tool) => boolean
532
+ }
533
+
534
+ /**
535
+ * Starts a scoped subprocess using newline-delimited JSON-RPC.
536
+ *
537
+ * @stability experimental
538
+ * @category constructors
539
+ * @since 4.0.6
540
+ */
541
+ export const stdio: (options: {
542
+ readonly command: ChildProcess.Command
543
+ readonly protocol: McpProtocol.ProtocolAdapter<ProtocolVersion>
544
+ readonly maxMessageBytes?: ByteSize.Input | undefined
545
+ }) => Effect.Effect<Transport, McpClientError, ChildProcessSpawner | Scope.Scope> = Effect.fnUntraced(
546
+ function*(options: {
547
+ readonly command: ChildProcess.Command
548
+ readonly protocol: Protocol
549
+ readonly maxMessageBytes?: ByteSize.Input | undefined
550
+ }): Effect.fn.Return<Transport, McpClientError, ChildProcessSpawner | Scope.Scope> {
551
+ const maxBytes = yield* messageLimit(options.maxMessageBytes)
552
+ const spawner = yield* ChildProcessSpawner
553
+ const process = yield* spawner.spawn(options.command).pipe(
554
+ Effect.mapError((cause) => fail(new TransportError({ description: "Cannot spawn MCP server", cause })))
555
+ )
556
+
557
+ const pending = new Map<McpSchema.RequestId, Deferred.Deferred<McpSchema.JsonRpcResponse>>()
558
+ const failure = yield* Deferred.make<never, McpClientError>()
559
+ let failed: McpClientError | undefined
560
+
561
+ const close = (error: McpClientError) =>
562
+ Effect.suspend(() => {
563
+ failed ??= error
564
+ return Deferred.fail(failure, failed)
565
+ })
566
+
567
+ const input = yield* Queue.unbounded<string, Cause.Done>()
568
+
569
+ const write = Effect.fnUntraced(function*(message: McpSchema.JsonRpcMessage) {
570
+ if (failed !== undefined) return yield* failed
571
+ const json = yield* encodeMessage(message, maxBytes)
572
+ yield* Queue.offer(input, json + "\n")
573
+ })
574
+
575
+ const receive = Effect.fnUntraced(function*(message: McpSchema.JsonRpcMessage) {
576
+ if (isRequest(message)) return yield* write(replyToServer(message))
577
+ if (!isResponse(message)) return
578
+ // Without an ID the error cannot be correlated, so no pending request can be trusted.
579
+ if (message.id === undefined || message.id === null) {
580
+ return yield* fail(new ProtocolError({ description: "Server returned an uncorrelated JSON-RPC error" }))
581
+ }
582
+ const response = pending.get(message.id)
583
+ if (response !== undefined) yield* Deferred.succeed(response, message)
584
+ })
585
+
586
+ yield* Stream.fromQueue(input).pipe(
587
+ Stream.encodeText,
588
+ Stream.run(process.stdin),
589
+ Effect.catch((cause) => close(fail(new TransportError({ description: "MCP stdin failed", cause })))),
590
+ Effect.forkScoped
591
+ )
592
+ yield* Stream.runDrain(process.stderr).pipe(Effect.ignore, Effect.forkScoped)
593
+ const drained = yield* Deferred.make<void>()
594
+ let buffer = ""
595
+ yield* process.stdout.pipe(
596
+ Stream.decodeText(),
597
+ Stream.runForEach(Effect.fnUntraced(function*(chunk) {
598
+ buffer += chunk
599
+ let start = 0
600
+ let index: number
601
+ while ((index = buffer.indexOf("\n", start)) >= 0) {
602
+ const line = buffer.slice(start, index)
603
+ start = index + 1
604
+ if (line.trim() !== "") yield* receive(yield* parseMessage(line, maxBytes))
605
+ }
606
+ buffer = buffer.slice(start)
607
+ if (buffer.length > maxBytes) {
608
+ return yield* limitError("MCP message exceeds maxMessageBytes")
609
+ }
610
+ })),
611
+ Effect.mapError((cause) =>
612
+ isMcpClientError(cause)
613
+ ? cause
614
+ : fail(new TransportError({ description: "MCP stdout failed", cause }))
615
+ ),
616
+ Effect.andThen(Effect.fail(fail(new TransportError({ description: "MCP server closed stdout" })))),
617
+ Effect.catch(close),
618
+ Effect.ensuring(Deferred.succeed(drained, undefined)),
619
+ Effect.forkScoped
620
+ )
621
+ // Output written just before exit is delivered before pending requests fail.
622
+ yield* process.exitCode.pipe(
623
+ Effect.map((code) => `MCP process exited (${code})`),
624
+ Effect.orElseSucceed(() => "MCP process exited"),
625
+ Effect.tap(() => Deferred.await(drained).pipe(Effect.timeoutOption(CLOSE_TIMEOUT))),
626
+ Effect.flatMap((description) => close(fail(new TransportError({ description })))),
627
+ Effect.forkScoped
628
+ )
629
+
630
+ // Close stdin, then escalate to SIGTERM and SIGKILL if the server does not exit.
631
+ // https://modelcontextprotocol.io/specification/2025-11-25/basic/lifecycle#stdio
632
+ yield* Effect.addFinalizer(Effect.fnUntraced(function*() {
633
+ yield* close(fail(new ClosedError({ description: "MCP transport closed" })))
634
+ yield* Queue.end(input)
635
+ const exited = yield* process.exitCode.pipe(Effect.timeoutOption(CLOSE_TIMEOUT), Effect.option)
636
+ if (Option.isNone(exited) || Option.isNone(exited.value)) {
637
+ yield* process.kill({ killSignal: "SIGTERM", forceKillAfter: Duration.toMillis(CLOSE_TIMEOUT) }).pipe(
638
+ Effect.ignore
639
+ )
640
+ }
641
+ }))
642
+
643
+ return {
644
+ [TransportTypeId]: TransportTypeId,
645
+ protocol: options.protocol,
646
+ isCallable: () => true,
647
+ notify: write,
648
+ request: Effect.fnUntraced(function*(message) {
649
+ const response = yield* Deferred.make<McpSchema.JsonRpcResponse>()
650
+ pending.set(message.id, response)
651
+
652
+ return yield* write(message).pipe(
653
+ Effect.andThen(Deferred.await(response)),
654
+ Effect.raceFirst(Deferred.await(failure)),
655
+ Effect.onInterrupt(() =>
656
+ message.method === "initialize"
657
+ ? Effect.void
658
+ : Deferred.isDone(response).pipe(
659
+ Effect.flatMap((done) => done ? Effect.void : write(cancelled(message.id)).pipe(Effect.ignore))
660
+ )
661
+ ),
662
+ Effect.ensuring(Effect.sync(() => pending.delete(message.id)))
663
+ )
664
+ })
665
+ }
666
+ }
667
+ )
668
+
669
+ /**
670
+ * Provides a connected MCP client over stdio using the child process spawner.
671
+ *
672
+ * **Details**
673
+ *
674
+ * The layer scope owns the client and subprocess. The options are those of
675
+ * {@link make} and {@link stdio}.
676
+ *
677
+ * @see {@link layerHttp}
678
+ * @stability experimental
679
+ * @category layers
680
+ * @since 4.0.6
681
+ */
682
+ export const layerStdio: (options: {
683
+ readonly name: string
684
+ readonly version: string
685
+ readonly title?: string | undefined
686
+ readonly description?: string | undefined
687
+ readonly websiteUrl?: string | undefined
688
+ readonly icons?: ReadonlyArray<McpSchema.Icon> | undefined
689
+ readonly timeout?: Duration.Input | undefined
690
+ readonly command: ChildProcess.Command
691
+ readonly protocol: McpProtocol.ProtocolAdapter<ProtocolVersion>
692
+ readonly maxMessageBytes?: ByteSize.Input | undefined
693
+ }) => Layer.Layer<
694
+ McpClient,
695
+ McpClientError,
696
+ ChildProcessSpawner
697
+ > = (options) => Layer.effect(McpClient)(make(options)).pipe(Layer.provide(Layer.effect(Transport)(stdio(options))))
698
+
699
+ /**
700
+ * Creates a Streamable HTTP transport with request-owned JSON or SSE responses.
701
+ *
702
+ * @stability experimental
703
+ * @category constructors
704
+ * @since 4.0.6
705
+ */
706
+ export const http: (options: {
707
+ readonly url: string | URL
708
+ readonly protocol: McpProtocol.ProtocolAdapter<ProtocolVersion>
709
+ readonly headers?: Readonly<Record<string, string>> | undefined
710
+ readonly maxMessageBytes?: ByteSize.Input | undefined
711
+ }) => Effect.Effect<Transport, McpClientError, HttpClient.HttpClient | Scope.Scope> = Effect.fnUntraced(
712
+ function*(options: {
713
+ readonly url: string | URL
714
+ readonly protocol: Protocol
715
+ readonly headers?: Readonly<Record<string, string>> | undefined
716
+ readonly maxMessageBytes?: ByteSize.Input | undefined
717
+ }): Effect.fn.Return<Transport, McpClientError, HttpClient.HttpClient | Scope.Scope> {
718
+ const maxBytes = yield* messageLimit(options.maxMessageBytes)
719
+ const client = HttpClient.withScope(yield* HttpClient.HttpClient)
720
+ const modern = options.protocol.protocolVersion === "2026-07-28"
721
+ const closed = yield* Deferred.make<never, McpClientError>()
722
+ let failed: McpClientError | undefined
723
+ // Legacy servers may assign a session during initialization.
724
+ let session: string | undefined
725
+
726
+ const baseHeaders = {
727
+ ...options.headers,
728
+ accept: "application/json, text/event-stream",
729
+ "mcp-protocol-version": options.protocol.protocolVersion
730
+ }
731
+ const headers = (): Record<string, string> =>
732
+ session === undefined ? baseHeaders : { ...baseHeaders, "mcp-session-id": session }
733
+
734
+ const httpError = Effect.fnUntraced(function*(response: HttpClientResponse.HttpClientResponse) {
735
+ // Error bodies may carry a JSON-RPC error without an ID, e.g. an unsupported protocol version.
736
+ const remote = mediaType(response) === "application/json"
737
+ ? yield* readBody(response, maxBytes).pipe(
738
+ Effect.flatMap((text) => parseMessage(text, maxBytes)),
739
+ Effect.map((message) => "error" in message ? message.error : undefined),
740
+ Effect.orElseSucceed(() => undefined)
741
+ )
742
+ : undefined
743
+ return yield* fail(
744
+ new HttpError({
745
+ status: response.status,
746
+ code: remote?.code,
747
+ data: remote?.data,
748
+ description: remote?.message,
749
+ wwwAuthenticate: response.headers["www-authenticate"],
750
+ retryAfter: response.headers["retry-after"]
751
+ })
752
+ )
753
+ })
754
+
755
+ // Posts one message and returns the successful response, tracking legacy sessions.
756
+ const send = Effect.fnUntraced(function*(message: McpSchema.JsonRpcMessage, tool?: McpSchema.Tool) {
757
+ if (failed !== undefined) return yield* failed
758
+ const body = yield* encodeMessage(message, maxBytes)
759
+ const request = HttpClientRequest.post(options.url).pipe(
760
+ HttpClientRequest.setHeaders({ ...headers(), ...(modern ? yield* routingHeaders(message, tool) : {}) }),
761
+ HttpClientRequest.bodyText(body, "application/json")
762
+ )
763
+ const response = yield* client.execute(request).pipe(
764
+ // Clients using `filterStatusOk` surface error responses as failures.
765
+ Effect.catch((cause) =>
766
+ cause.response === undefined
767
+ ? Effect.fail(fail(new TransportError({ description: "MCP HTTP request failed", cause })))
768
+ : Effect.succeed(cause.response)
769
+ )
770
+ )
771
+
772
+ // A legacy session ends when the server no longer recognizes its ID.
773
+ if (session !== undefined && response.status === 404) {
774
+ failed ??= fail(new ClosedError({ sessionExpired: true }))
775
+ return yield* failed
776
+ }
777
+ if (response.status < 200 || response.status >= 300) return yield* httpError(response)
778
+ if (!modern) session = response.headers["mcp-session-id"] ?? session
779
+ return response
780
+ })
781
+
782
+ const exchange = <A>(effect: Effect.Effect<A, unknown, Scope.Scope>) =>
783
+ effect.pipe(
784
+ Effect.mapError((cause) =>
785
+ isMcpClientError(cause)
786
+ ? cause
787
+ : fail(new TransportError({ description: "Cannot read MCP response", cause }))
788
+ ),
789
+ Effect.raceFirst(Deferred.await(closed)),
790
+ Effect.scoped
791
+ )
792
+
793
+ const notify = (message: McpSchema.JsonRpcNotification | McpSchema.JsonRpcResponse) =>
794
+ exchange(Effect.asVoid(send(message)))
795
+
796
+ const readResponse = Effect.fnUntraced(function*(
797
+ response: HttpClientResponse.HttpClientResponse,
798
+ request: McpSchema.JsonRpcRequest
799
+ ) {
800
+ const match = Effect.fnUntraced(function*(message: McpSchema.JsonRpcMessage) {
801
+ if (isRequest(message)) {
802
+ yield* notify(replyToServer(message))
803
+ return undefined
804
+ }
805
+ if (!isResponse(message)) return undefined
806
+ // A response on this exchange belongs to its request; an error may omit the ID.
807
+ if (message.id !== request.id && !("error" in message && message.id == null)) {
808
+ return yield* fail(new ProtocolError({ description: "HTTP MCP response id does not match its request" }))
809
+ }
810
+ return message
811
+ })
812
+
813
+ switch (mediaType(response)) {
814
+ case "application/json": {
815
+ const message = yield* match(yield* parseMessage(yield* readBody(response, maxBytes), maxBytes))
816
+ if (message === undefined) break
817
+ return message
818
+ }
819
+ case "text/event-stream": {
820
+ const events: Array<string> = []
821
+ const parser = Sse.makeParser((event) => {
822
+ // Resumption is unsupported, so retry directives and event IDs are ignored.
823
+ if (event._tag === "Event" && event.data !== "") events.push(event.data)
824
+ }, { maxEventSize: maxBytes })
825
+ const message = yield* response.stream.pipe(
826
+ Stream.decodeText(),
827
+ Stream.flatMap((chunk) => {
828
+ const error = parser.feed(chunk)
829
+ const parsed = Stream.fromIterable(events.splice(0))
830
+ // Events before an oversized one can still complete the request.
831
+ return error === undefined ? parsed : parsed.pipe(
832
+ Stream.concat(Stream.fail(limitError("MCP SSE event exceeds maxMessageBytes")))
833
+ )
834
+ }),
835
+ Stream.mapEffect((data) => parseMessage(data, maxBytes).pipe(Effect.flatMap(match))),
836
+ Stream.filter(Predicate.isNotUndefined),
837
+ Stream.runHead
838
+ )
839
+ if (Option.isNone(message)) break
840
+ return message.value
841
+ }
842
+ default: {
843
+ return yield* fail(new ProtocolError({ description: "Unsupported MCP response Content-Type" }))
844
+ }
845
+ }
846
+ return yield* fail(new TransportError({ description: "MCP response ended before the terminal response" }))
847
+ })
848
+
849
+ yield* Effect.addFinalizer(Effect.fnUntraced(function*() {
850
+ failed ??= fail(new ClosedError({ description: "MCP HTTP transport closed" }))
851
+ yield* Deferred.fail(closed, failed)
852
+ if (session === undefined || failed.reason._tag !== "ClosedError" || failed.reason.sessionExpired) return
853
+ // Explicitly terminate a legacy session.
854
+ // https://modelcontextprotocol.io/specification/2025-11-25/basic/transports#session-management
855
+ yield* client.execute(HttpClientRequest.delete(options.url).pipe(HttpClientRequest.setHeaders(headers()))).pipe(
856
+ Effect.scoped,
857
+ Effect.timeoutOption(CLOSE_TIMEOUT),
858
+ Effect.ignore
859
+ )
860
+ }))
861
+
862
+ return {
863
+ [TransportTypeId]: TransportTypeId,
864
+ protocol: options.protocol,
865
+ isCallable: (tool) => !modern || headerParameters(tool) !== undefined,
866
+ notify,
867
+ request: (message, tool) =>
868
+ exchange(
869
+ send(message, tool).pipe(
870
+ Effect.flatMap((response) =>
871
+ response.status === 202 || response.status === 204
872
+ ? fail(new ProtocolError({ description: "MCP request received no response" }))
873
+ : readResponse(response, message)
874
+ )
875
+ )
876
+ ).pipe(
877
+ // Modern servers treat a closed response stream as cancellation.
878
+ Effect.onInterrupt(() =>
879
+ modern || message.method === "initialize"
880
+ ? Effect.void
881
+ : notify(cancelled(message.id)).pipe(Effect.timeoutOption(CLOSE_TIMEOUT), Effect.ignore)
882
+ )
883
+ )
884
+ }
885
+ }
886
+ )
887
+
888
+ /**
889
+ * Provides a connected MCP client over Streamable HTTP using the HTTP client.
890
+ *
891
+ * **Details**
892
+ *
893
+ * The layer scope owns the client and connection. The options are those of
894
+ * {@link make} and {@link http}.
895
+ *
896
+ * **Example** (Providing an HTTP client connection)
897
+ *
898
+ * ```ts import.meta.vitest
899
+ * import { Layer } from "effect"
900
+ * import { McpClient, McpProtocol } from "effect/ai"
901
+ * import { FetchHttpClient } from "effect/http"
902
+ *
903
+ * const ClientLayer = McpClient.layerHttp({
904
+ * name: "report-workflow",
905
+ * version: "1.0.0",
906
+ * protocol: McpProtocol.v2026_07_28,
907
+ * url: "http://localhost:3000/mcp"
908
+ * }).pipe(Layer.provide(FetchHttpClient.layer))
909
+ * ```
910
+ *
911
+ * @see {@link layerStdio}
912
+ * @stability experimental
913
+ * @category layers
914
+ * @since 4.0.6
915
+ */
916
+ export const layerHttp: (options: {
917
+ readonly name: string
918
+ readonly version: string
919
+ readonly title?: string | undefined
920
+ readonly description?: string | undefined
921
+ readonly websiteUrl?: string | undefined
922
+ readonly icons?: ReadonlyArray<McpSchema.Icon> | undefined
923
+ readonly timeout?: Duration.Input | undefined
924
+ readonly url: string | URL
925
+ readonly protocol: McpProtocol.ProtocolAdapter<ProtocolVersion>
926
+ readonly headers?: Readonly<Record<string, string>> | undefined
927
+ readonly maxMessageBytes?: ByteSize.Input | undefined
928
+ }) => Layer.Layer<
929
+ McpClient,
930
+ McpClientError,
931
+ HttpClient.HttpClient
932
+ > = (options) => Layer.effect(McpClient)(make(options)).pipe(Layer.provide(Layer.effect(Transport)(http(options))))
933
+
934
+ // =============================================================================
935
+ // Internal
936
+ // =============================================================================
937
+
938
+ const TypeId = "~effect/ai/McpClient" as const
939
+ const TransportTypeId = "~effect/ai/McpClient/Transport" as const
940
+ const DEFAULT_MAX_MESSAGE_BYTES = ByteSize.mebibytes(16)
941
+ const DEFAULT_TIMEOUT = Duration.seconds(60)
942
+ const CLOSE_TIMEOUT = Duration.seconds(5)
943
+ const MAX_DISCOVERY_PAGES = 100
944
+ const MAX_DISCOVERY_ITEMS = 10_000
945
+ const HEADER_TOKEN = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/
946
+ const encoder = new TextEncoder()
947
+ const decoder = new TextDecoder()
948
+
949
+ type Protocol = McpProtocol.ProtocolAdapter<ProtocolVersion>
950
+
951
+ type Options = Parameters<typeof make>[0]
952
+
953
+ type Capability = "tools" | "prompts" | "resources"
954
+
955
+ interface CallOptions {
956
+ readonly timeout?: Duration.Input | undefined
957
+ }
958
+
959
+ interface InitializeResult {
960
+ readonly protocolVersion?: string
961
+ readonly supportedVersions?: ReadonlyArray<string>
962
+ readonly capabilities: unknown
963
+ readonly serverInfo?: unknown
964
+ readonly instructions?: string
965
+ readonly _meta?: Record<string, unknown>
966
+ }
967
+
968
+ type ListResult<K extends string, A> = Record<K, ReadonlyArray<A>> & { readonly nextCursor?: string }
969
+ const fail = (reason: McpClientErrorReason) => new McpClientError({ reason })
970
+ const limitError = (description: string) => fail(new LimitError({ description }))
971
+
972
+ const validationError = (cause: Schema.SchemaError) =>
973
+ fail(new ValidationError({ description: "Invalid MCP payload", cause }))
974
+
975
+ const isRecord = Predicate.isReadonlyObject
976
+ const decodeMessage = Schema.decodeUnknownEffect(McpSchema.JsonRpcMessage, { onExcessProperty: "error" })
977
+
978
+ const decodeVersionRejection = Schema.decodeUnknownOption(Schema.Struct({
979
+ requested: Schema.String,
980
+ supported: Schema.Array(Schema.String)
981
+ }))
982
+
983
+ const decodeServerCapabilities = Schema.decodeUnknownEffect(McpSchema.ServerCapabilities)
984
+ const decodeImplementation = Schema.decodeUnknownEffect(McpSchema.Implementation)
985
+ const encodeImplementation = Schema.encodeSync(McpSchema.Implementation)
986
+
987
+ // The protocol payload codec validates argument values; the toolkit only checks for an object.
988
+ const decodeToolArguments = Schema.decodeUnknownEffect(Schema.Record(Schema.String, Schema.Unknown))
989
+
990
+ const decodeUnknown = (schema: Schema.Constraint, value: unknown) =>
991
+ Schema.decodeUnknownEffect(schema as Schema.ConstraintCodec<unknown, unknown>)(value).pipe(
992
+ Effect.mapError(validationError)
993
+ )
994
+
995
+ const publicRpcs: ReadonlyMap<string, { readonly successSchema: Schema.Constraint }> =
996
+ McpSchema.ClientRequestRpcs.requests
997
+
998
+ // Tools that require task-augmented execution cannot be called without the tasks extension.
999
+ const requiresTasks = (tool: unknown) =>
1000
+ isRecord(tool) && isRecord(tool.execution) && tool.execution.taskSupport === "required"
1001
+
1002
+ const messageLimit = (input: ByteSize.Input = DEFAULT_MAX_MESSAGE_BYTES) => {
1003
+ const bytes = Option.flatMap(ByteSize.fromInput(input), ByteSize.toNumber)
1004
+ return Option.isSome(bytes) && bytes.value > 0
1005
+ ? Effect.succeed(bytes.value)
1006
+ : Effect.fail(fail(new ConfigurationError({ description: "maxMessageBytes must be a positive safe integer" })))
1007
+ }
1008
+
1009
+ const encodeMessage = Effect.fnUntraced(function*(message: McpSchema.JsonRpcMessage, maxBytes: number) {
1010
+ const json = yield* Effect.try({
1011
+ try: () => JSON.stringify(message),
1012
+ catch: (cause) => fail(new TransportError({ description: "Cannot encode MCP message", cause }))
1013
+ })
1014
+ if (encoder.encode(json).length > maxBytes) {
1015
+ return yield* limitError("MCP message exceeds maxMessageBytes")
1016
+ }
1017
+ return json
1018
+ })
1019
+
1020
+ const parseMessage = Effect.fnUntraced(function*(text: string, maxBytes: number) {
1021
+ if (encoder.encode(text).length > maxBytes) {
1022
+ return yield* limitError("MCP message exceeds maxMessageBytes")
1023
+ }
1024
+ const json = yield* Effect.try({
1025
+ try: () => JSON.parse(text) as unknown,
1026
+ catch: (cause) => fail(new ProtocolError({ description: "Invalid MCP JSON", cause }))
1027
+ })
1028
+ return yield* decodeMessage(json).pipe(
1029
+ Effect.mapError((cause) => fail(new ProtocolError({ description: "Invalid JSON-RPC message", cause })))
1030
+ )
1031
+ })
1032
+
1033
+ const isRequest = (message: McpSchema.JsonRpcMessage): message is McpSchema.JsonRpcRequest =>
1034
+ "method" in message && "id" in message
1035
+
1036
+ const isResponse = (message: McpSchema.JsonRpcMessage): message is McpSchema.JsonRpcResponse => !("method" in message)
1037
+
1038
+ // The client advertises no capabilities, so it answers pings and declines every other server request.
1039
+ const replyToServer = (request: McpSchema.JsonRpcRequest): McpSchema.JsonRpcResponse =>
1040
+ request.method === "ping"
1041
+ ? { jsonrpc: "2.0", id: request.id, result: {} }
1042
+ : {
1043
+ jsonrpc: "2.0",
1044
+ id: request.id,
1045
+ error: { code: McpSchema.METHOD_NOT_FOUND_ERROR_CODE, message: `Unsupported MCP method: ${request.method}` }
1046
+ }
1047
+
1048
+ const cancelled = (id: McpSchema.RequestId): McpSchema.JsonRpcNotification => ({
1049
+ jsonrpc: "2.0",
1050
+ method: "notifications/cancelled",
1051
+ params: { requestId: id }
1052
+ })
1053
+
1054
+ // =============================================================================
1055
+ // Internal: Streamable HTTP
1056
+ // =============================================================================
1057
+
1058
+ const mediaType = (response: HttpClientResponse.HttpClientResponse) =>
1059
+ response.headers["content-type"]?.split(";", 1)[0].trim().toLowerCase()
1060
+
1061
+ const readBody = (response: HttpClientResponse.HttpClientResponse, maxBytes: number) =>
1062
+ response.stream.pipe(
1063
+ Stream.mapError((cause) => fail(new TransportError({ description: "Cannot read MCP response", cause }))),
1064
+ Stream.limitBytes(maxBytes, () => Stream.fail(limitError("MCP response exceeds maxMessageBytes"))),
1065
+ Stream.mkUint8Array,
1066
+ Effect.map((bytes) => decoder.decode(bytes))
1067
+ )
1068
+
1069
+ // Values that are not plain visible ASCII are sent Base64 encoded.
1070
+ // https://modelcontextprotocol.io/specification/2026-07-28/basic/transports#custom-headers-from-tool-parameters
1071
+ const headerValue = (value: string) =>
1072
+ /^[\x20-\x7e]*$/.test(value) && value.trim() === value &&
1073
+ !(value.startsWith(BASE64_SENTINEL_PREFIX) && value.endsWith(BASE64_SENTINEL_SUFFIX))
1074
+ ? value
1075
+ : `${BASE64_SENTINEL_PREFIX}${Base64.encode(value)}${BASE64_SENTINEL_SUFFIX}`
1076
+
1077
+ interface HeaderParameter {
1078
+ readonly path: ReadonlyArray<string>
1079
+ readonly header: string
1080
+ readonly type: string
1081
+ }
1082
+
1083
+ // JSON Schema keywords whose values are schemas, maps of schemas or arrays of schemas.
1084
+ const SCHEMA_KEYWORDS = new Set([
1085
+ "additionalProperties",
1086
+ "unevaluatedProperties",
1087
+ "propertyNames",
1088
+ "items",
1089
+ "additionalItems",
1090
+ "unevaluatedItems",
1091
+ "contains",
1092
+ "not",
1093
+ "if",
1094
+ "then",
1095
+ "else",
1096
+ "contentSchema"
1097
+ ])
1098
+
1099
+ const SCHEMA_MAP_KEYWORDS = new Set([
1100
+ "properties",
1101
+ "patternProperties",
1102
+ "$defs",
1103
+ "definitions",
1104
+ "dependentSchemas",
1105
+ "dependencies"
1106
+ ])
1107
+
1108
+ const SCHEMA_ARRAY_KEYWORDS = new Set(["allOf", "anyOf", "oneOf", "prefixItems", "items"])
1109
+
1110
+ // Collects `x-mcp-header` annotations along chains of `properties` keys, or
1111
+ // returns undefined when an annotation is invalid or found anywhere else.
1112
+ // https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/streamable-http#schema-extension
1113
+ const headerParameters = (tool: McpSchema.Tool): ReadonlyArray<HeaderParameter> | undefined => {
1114
+ const parameters: Array<HeaderParameter> = []
1115
+ const names = new Set<string>()
1116
+
1117
+ // `path` is undefined once the traversal leaves a properties-only chain.
1118
+ const visit = (schema: unknown, path: ReadonlyArray<string> | undefined): boolean => {
1119
+ if (!isRecord(schema)) return true
1120
+ const name = schema["x-mcp-header"]
1121
+ if (name !== undefined) {
1122
+ if (
1123
+ path === undefined || path.length === 0 || typeof name !== "string" || !HEADER_TOKEN.test(name) ||
1124
+ names.has(name.toLowerCase()) || !["string", "integer", "boolean"].includes(schema.type as string)
1125
+ ) return false
1126
+ names.add(name.toLowerCase())
1127
+ parameters.push({ path, header: `mcp-param-${name.toLowerCase()}`, type: schema.type as string })
1128
+ }
1129
+ return Object.entries(schema).every(([keyword, value]) => {
1130
+ if (SCHEMA_MAP_KEYWORDS.has(keyword) && isRecord(value)) {
1131
+ return Object.entries(value).every(([key, child]) =>
1132
+ visit(child, keyword === "properties" && path !== undefined ? [...path, key] : undefined)
1133
+ )
1134
+ }
1135
+ if (Array.isArray(value)) {
1136
+ return !SCHEMA_ARRAY_KEYWORDS.has(keyword) || value.every((child) => visit(child, undefined))
1137
+ }
1138
+ return !SCHEMA_KEYWORDS.has(keyword) || visit(value, undefined)
1139
+ })
1140
+ }
1141
+
1142
+ return visit(tool.inputSchema, []) ? parameters : undefined
1143
+ }
1144
+
1145
+ const routingHeaders = Effect.fnUntraced(function*(message: McpSchema.JsonRpcMessage, tool?: McpSchema.Tool) {
1146
+ if (!("method" in message)) return {}
1147
+ const headers: Record<string, string> = { "mcp-method": message.method }
1148
+ const params = message.params ?? {}
1149
+ const name = message.method === "resources/read" ? params.uri : params.name
1150
+ if (
1151
+ typeof name === "string" &&
1152
+ (message.method === "tools/call" || message.method === "prompts/get" || message.method === "resources/read")
1153
+ ) {
1154
+ headers["mcp-name"] = headerValue(name)
1155
+ }
1156
+ if (message.method !== "tools/call") return headers
1157
+
1158
+ const parameters = tool === undefined ? undefined : headerParameters(tool)
1159
+ if (parameters === undefined) {
1160
+ return yield* fail(new UnsupportedError({ description: "Tool has invalid x-mcp-header annotations" }))
1161
+ }
1162
+ for (const { header, path, type } of parameters) {
1163
+ let value: unknown = params.arguments
1164
+ for (const key of path) value = isRecord(value) && Object.hasOwn(value, key) ? value[key] : undefined
1165
+ if (value === undefined || value === null) continue
1166
+ if (type === "integer" ? !Number.isSafeInteger(value) : typeof value !== type) {
1167
+ return yield* fail(new ValidationError({ description: `Invalid value for MCP header parameter ${header}` }))
1168
+ }
1169
+ headers[header] = headerValue(String(value))
1170
+ }
1171
+ return headers
1172
+ })
1173
+
1174
+ // =============================================================================
1175
+ // Internal: Toolkit
1176
+ // =============================================================================
1177
+
1178
+ const toText = (result: McpSchema.CallToolResult): Effect.Effect<string, McpClientError> => {
1179
+ const unsupported = (content: string) =>
1180
+ Effect.fail(
1181
+ fail(new UnsupportedError({ description: `MCP ${content} requires an application text converter`, result }))
1182
+ )
1183
+ const parts: Array<string> = []
1184
+ for (const block of result.content) {
1185
+ switch (block.type) {
1186
+ case "text": {
1187
+ parts.push(block.text)
1188
+ break
1189
+ }
1190
+ case "resource_link": {
1191
+ parts.push(
1192
+ `${block.title ?? block.name}: ${block.uri}${block.description === undefined ? "" : `\n${block.description}`}`
1193
+ )
1194
+ break
1195
+ }
1196
+ case "resource": {
1197
+ if (!("text" in block.resource)) return unsupported("binary resources")
1198
+ parts.push(block.resource.text)
1199
+ break
1200
+ }
1201
+ default: {
1202
+ return unsupported(`${block.type} content`)
1203
+ }
1204
+ }
1205
+ }
1206
+ return Effect.succeed(
1207
+ parts.length === 0 && result.structuredContent !== undefined
1208
+ ? JSON.stringify(result.structuredContent)
1209
+ : parts.join("\n")
1210
+ )
1211
+ }