effect 4.0.0-beta.99 → 4.0.0-rc.109

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 (1904) hide show
  1. package/AGENTS.md +395 -0
  2. package/CLAUDE.md +395 -0
  3. package/README.md +19 -23
  4. package/ai-docs/README.md +44 -0
  5. package/ai-docs/package.json +36 -0
  6. package/ai-docs/src/01_effect/01_basics/01_effect-gen.ts +30 -0
  7. package/ai-docs/src/01_effect/01_basics/02_effect-fn.ts +39 -0
  8. package/ai-docs/src/01_effect/01_basics/10_creating-effects.ts +74 -0
  9. package/ai-docs/src/01_effect/01_basics/index.md +5 -0
  10. package/ai-docs/src/01_effect/02_schema/10_schema-basics.ts +43 -0
  11. package/ai-docs/src/01_effect/02_schema/index.md +7 -0
  12. package/ai-docs/src/01_effect/03_services/01_service.ts +45 -0
  13. package/ai-docs/src/01_effect/03_services/10_reference.ts +10 -0
  14. package/ai-docs/src/01_effect/03_services/20_layer-composition.ts +70 -0
  15. package/ai-docs/src/01_effect/03_services/20_layer-unwrap.ts +66 -0
  16. package/ai-docs/src/01_effect/03_services/index.md +5 -0
  17. package/ai-docs/src/01_effect/04_errors/01_error-handling.ts +30 -0
  18. package/ai-docs/src/01_effect/04_errors/10_catch-tags.ts +24 -0
  19. package/ai-docs/src/01_effect/04_errors/20_reason-errors.ts +64 -0
  20. package/ai-docs/src/01_effect/04_errors/index.md +1 -0
  21. package/ai-docs/src/01_effect/05_resources/10_acquire-release.ts +105 -0
  22. package/ai-docs/src/01_effect/05_resources/20_layer-side-effects.ts +31 -0
  23. package/ai-docs/src/01_effect/05_resources/30_layer-map.ts +86 -0
  24. package/ai-docs/src/01_effect/05_resources/index.md +3 -0
  25. package/ai-docs/src/01_effect/06_running/10_run-main.ts +30 -0
  26. package/ai-docs/src/01_effect/06_running/20_layer-launch.ts +27 -0
  27. package/ai-docs/src/01_effect/06_running/index.md +1 -0
  28. package/ai-docs/src/01_effect/07_pubsub/10_pubsub.ts +56 -0
  29. package/ai-docs/src/01_effect/07_pubsub/index.md +3 -0
  30. package/ai-docs/src/03_stream/10_creating-streams.ts +103 -0
  31. package/ai-docs/src/03_stream/20_consuming-streams.ts +137 -0
  32. package/ai-docs/src/03_stream/30_encoding.ts +165 -0
  33. package/ai-docs/src/03_stream/index.md +4 -0
  34. package/ai-docs/src/04_integration/10_managed-runtime.ts +129 -0
  35. package/ai-docs/src/04_integration/index.md +5 -0
  36. package/ai-docs/src/05_batching/10_request-resolver.ts +89 -0
  37. package/ai-docs/src/05_batching/index.md +3 -0
  38. package/ai-docs/src/06_schedule/10_schedules.ts +110 -0
  39. package/ai-docs/src/06_schedule/index.md +3 -0
  40. package/ai-docs/src/07_datetime/10_creating-and-formatting.ts +30 -0
  41. package/ai-docs/src/07_datetime/20_time-zones.ts +44 -0
  42. package/ai-docs/src/07_datetime/index.md +5 -0
  43. package/ai-docs/src/08_observability/10_logging.ts +66 -0
  44. package/ai-docs/src/08_observability/20_otlp-tracing.ts +95 -0
  45. package/ai-docs/src/08_observability/index.md +7 -0
  46. package/ai-docs/src/09_testing/10_effect-tests.ts +55 -0
  47. package/ai-docs/src/09_testing/20_layer-tests.ts +138 -0
  48. package/ai-docs/src/09_testing/index.md +1 -0
  49. package/ai-docs/src/10_predicate/01_basics.ts +14 -0
  50. package/ai-docs/src/10_predicate/index.md +9 -0
  51. package/ai-docs/src/40_sql/10_basics.ts +175 -0
  52. package/ai-docs/src/40_sql/index.md +6 -0
  53. package/ai-docs/src/50_http-client/10_basics.ts +102 -0
  54. package/ai-docs/src/50_http-client/index.md +3 -0
  55. package/ai-docs/src/51_http-server/10_basics.ts +118 -0
  56. package/ai-docs/src/51_http-server/20_testing.ts +100 -0
  57. package/ai-docs/src/51_http-server/fixtures/api/Api.ts +14 -0
  58. package/ai-docs/src/51_http-server/fixtures/api/Authorization.ts +36 -0
  59. package/ai-docs/src/51_http-server/fixtures/api/System.ts +10 -0
  60. package/ai-docs/src/51_http-server/fixtures/api/Users.ts +107 -0
  61. package/ai-docs/src/51_http-server/fixtures/domain/User.ts +21 -0
  62. package/ai-docs/src/51_http-server/fixtures/domain/UserErrors.ts +22 -0
  63. package/ai-docs/src/51_http-server/fixtures/server/Authorization.ts +37 -0
  64. package/ai-docs/src/51_http-server/fixtures/server/Users/http.ts +80 -0
  65. package/ai-docs/src/51_http-server/fixtures/server/Users.ts +183 -0
  66. package/ai-docs/src/51_http-server/index.md +3 -0
  67. package/ai-docs/src/60_child-process/10_working-with-child-processes.ts +117 -0
  68. package/ai-docs/src/60_child-process/index.md +3 -0
  69. package/ai-docs/src/70_cli/10_basics.ts +160 -0
  70. package/ai-docs/src/70_cli/index.md +5 -0
  71. package/ai-docs/src/71_ai/10_language-model.ts +156 -0
  72. package/ai-docs/src/71_ai/20_tools.ts +226 -0
  73. package/ai-docs/src/71_ai/30_chat.ts +158 -0
  74. package/ai-docs/src/71_ai/fixtures/domain/LaunchPlan.ts +9 -0
  75. package/ai-docs/src/71_ai/index.md +5 -0
  76. package/ai-docs/src/80_cluster/10_entities.ts +97 -0
  77. package/ai-docs/src/80_cluster/index.md +4 -0
  78. package/ai-docs/src/index.md +10 -0
  79. package/ai-docs/tsconfig.json +24 -0
  80. package/dist/Array.d.ts +971 -1037
  81. package/dist/Array.d.ts.map +1 -1
  82. package/dist/Array.js +462 -412
  83. package/dist/Array.js.map +1 -1
  84. package/dist/BigDecimal.d.ts +433 -756
  85. package/dist/BigDecimal.d.ts.map +1 -1
  86. package/dist/BigDecimal.js +200 -325
  87. package/dist/BigDecimal.js.map +1 -1
  88. package/dist/BigInt.d.ts +207 -267
  89. package/dist/BigInt.d.ts.map +1 -1
  90. package/dist/BigInt.js +107 -135
  91. package/dist/BigInt.js.map +1 -1
  92. package/dist/Boolean.d.ts +146 -188
  93. package/dist/Boolean.d.ts.map +1 -1
  94. package/dist/Boolean.js +64 -84
  95. package/dist/Boolean.js.map +1 -1
  96. package/dist/Brand.d.ts +3 -3
  97. package/dist/Brand.d.ts.map +1 -1
  98. package/dist/Brand.js +4 -3
  99. package/dist/Brand.js.map +1 -1
  100. package/dist/Cache.d.ts +409 -256
  101. package/dist/Cache.d.ts.map +1 -1
  102. package/dist/Cache.js +213 -134
  103. package/dist/Cache.js.map +1 -1
  104. package/dist/Cause.d.ts +167 -277
  105. package/dist/Cause.d.ts.map +1 -1
  106. package/dist/Cause.js +122 -176
  107. package/dist/Cause.js.map +1 -1
  108. package/dist/Channel.d.ts +756 -769
  109. package/dist/Channel.d.ts.map +1 -1
  110. package/dist/Channel.js +588 -449
  111. package/dist/Channel.js.map +1 -1
  112. package/dist/ChannelSchema.d.ts +1 -1
  113. package/dist/ChannelSchema.d.ts.map +1 -1
  114. package/dist/ChannelSchema.js.map +1 -1
  115. package/dist/Chunk.d.ts +834 -1173
  116. package/dist/Chunk.d.ts.map +1 -1
  117. package/dist/Chunk.js +326 -439
  118. package/dist/Chunk.js.map +1 -1
  119. package/dist/Clock.d.ts +180 -49
  120. package/dist/Clock.d.ts.map +1 -1
  121. package/dist/Clock.js +96 -31
  122. package/dist/Clock.js.map +1 -1
  123. package/dist/Combiner.d.ts +20 -33
  124. package/dist/Combiner.d.ts.map +1 -1
  125. package/dist/Combiner.js +18 -30
  126. package/dist/Combiner.js.map +1 -1
  127. package/dist/Config.d.ts +226 -174
  128. package/dist/Config.d.ts.map +1 -1
  129. package/dist/Config.js +361 -267
  130. package/dist/Config.js.map +1 -1
  131. package/dist/ConfigProvider.d.ts +229 -71
  132. package/dist/ConfigProvider.d.ts.map +1 -1
  133. package/dist/ConfigProvider.js +164 -95
  134. package/dist/ConfigProvider.js.map +1 -1
  135. package/dist/Console.d.ts +233 -33
  136. package/dist/Console.d.ts.map +1 -1
  137. package/dist/Console.js +232 -32
  138. package/dist/Console.js.map +1 -1
  139. package/dist/Context.d.ts +160 -277
  140. package/dist/Context.d.ts.map +1 -1
  141. package/dist/Context.js +179 -236
  142. package/dist/Context.js.map +1 -1
  143. package/dist/Cron.d.ts +144 -176
  144. package/dist/Cron.d.ts.map +1 -1
  145. package/dist/Cron.js +227 -162
  146. package/dist/Cron.js.map +1 -1
  147. package/dist/Crypto.d.ts +13 -15
  148. package/dist/Crypto.d.ts.map +1 -1
  149. package/dist/Crypto.js +24 -39
  150. package/dist/Crypto.js.map +1 -1
  151. package/dist/Data.d.ts +60 -80
  152. package/dist/Data.d.ts.map +1 -1
  153. package/dist/Data.js +18 -24
  154. package/dist/Data.js.map +1 -1
  155. package/dist/DateTime.d.ts +562 -660
  156. package/dist/DateTime.d.ts.map +1 -1
  157. package/dist/DateTime.js +307 -362
  158. package/dist/DateTime.js.map +1 -1
  159. package/dist/Deferred.d.ts +253 -256
  160. package/dist/Deferred.d.ts.map +1 -1
  161. package/dist/Deferred.js +110 -98
  162. package/dist/Deferred.js.map +1 -1
  163. package/dist/Duration.d.ts +216 -308
  164. package/dist/Duration.d.ts.map +1 -1
  165. package/dist/Duration.js +157 -188
  166. package/dist/Duration.js.map +1 -1
  167. package/dist/Effect.d.ts +3157 -3360
  168. package/dist/Effect.d.ts.map +1 -1
  169. package/dist/Effect.js +1457 -1574
  170. package/dist/Effect.js.map +1 -1
  171. package/dist/Effectable.js.map +1 -1
  172. package/dist/Encoding.d.ts +22 -40
  173. package/dist/Encoding.d.ts.map +1 -1
  174. package/dist/Encoding.js +22 -40
  175. package/dist/Encoding.js.map +1 -1
  176. package/dist/Equal.d.ts +33 -37
  177. package/dist/Equal.d.ts.map +1 -1
  178. package/dist/Equal.js +39 -23
  179. package/dist/Equal.js.map +1 -1
  180. package/dist/Equivalence.d.ts +103 -105
  181. package/dist/Equivalence.d.ts.map +1 -1
  182. package/dist/Equivalence.js +77 -79
  183. package/dist/Equivalence.js.map +1 -1
  184. package/dist/ErrorReporter.d.ts +52 -28
  185. package/dist/ErrorReporter.d.ts.map +1 -1
  186. package/dist/ErrorReporter.js +51 -27
  187. package/dist/ErrorReporter.js.map +1 -1
  188. package/dist/ExecutionPlan.d.ts +86 -55
  189. package/dist/ExecutionPlan.d.ts.map +1 -1
  190. package/dist/ExecutionPlan.js +8 -29
  191. package/dist/ExecutionPlan.js.map +1 -1
  192. package/dist/Exit.d.ts +116 -192
  193. package/dist/Exit.d.ts.map +1 -1
  194. package/dist/Exit.js +82 -130
  195. package/dist/Exit.js.map +1 -1
  196. package/dist/Fiber.d.ts +83 -147
  197. package/dist/Fiber.d.ts.map +1 -1
  198. package/dist/Fiber.js +48 -87
  199. package/dist/Fiber.js.map +1 -1
  200. package/dist/FiberHandle.d.ts +152 -105
  201. package/dist/FiberHandle.d.ts.map +1 -1
  202. package/dist/FiberHandle.js +109 -75
  203. package/dist/FiberHandle.js.map +1 -1
  204. package/dist/FiberMap.d.ts +213 -168
  205. package/dist/FiberMap.d.ts.map +1 -1
  206. package/dist/FiberMap.js +114 -89
  207. package/dist/FiberMap.js.map +1 -1
  208. package/dist/FiberSet.d.ts +123 -81
  209. package/dist/FiberSet.d.ts.map +1 -1
  210. package/dist/FiberSet.js +86 -60
  211. package/dist/FiberSet.js.map +1 -1
  212. package/dist/FileSystem.d.ts +154 -265
  213. package/dist/FileSystem.d.ts.map +1 -1
  214. package/dist/FileSystem.js +42 -147
  215. package/dist/FileSystem.js.map +1 -1
  216. package/dist/Filter.d.ts +61 -33
  217. package/dist/Filter.d.ts.map +1 -1
  218. package/dist/Filter.js +26 -15
  219. package/dist/Filter.js.map +1 -1
  220. package/dist/Formatter.d.ts +24 -32
  221. package/dist/Formatter.d.ts.map +1 -1
  222. package/dist/Formatter.js +55 -60
  223. package/dist/Formatter.js.map +1 -1
  224. package/dist/Function.d.ts +106 -148
  225. package/dist/Function.d.ts.map +1 -1
  226. package/dist/Function.js +81 -62
  227. package/dist/Function.js.map +1 -1
  228. package/dist/Graph.d.ts +360 -714
  229. package/dist/Graph.d.ts.map +1 -1
  230. package/dist/Graph.js +168 -297
  231. package/dist/Graph.js.map +1 -1
  232. package/dist/HKT.d.ts +12 -6
  233. package/dist/HKT.d.ts.map +1 -1
  234. package/dist/Hash.d.ts +47 -83
  235. package/dist/Hash.d.ts.map +1 -1
  236. package/dist/Hash.js +46 -68
  237. package/dist/Hash.js.map +1 -1
  238. package/dist/HashMap.d.ts +319 -411
  239. package/dist/HashMap.d.ts.map +1 -1
  240. package/dist/HashMap.js +122 -166
  241. package/dist/HashMap.js.map +1 -1
  242. package/dist/HashRing.d.ts.map +1 -1
  243. package/dist/HashRing.js +1 -0
  244. package/dist/HashRing.js.map +1 -1
  245. package/dist/HashSet.d.ts +177 -284
  246. package/dist/HashSet.d.ts.map +1 -1
  247. package/dist/HashSet.js +68 -109
  248. package/dist/HashSet.js.map +1 -1
  249. package/dist/Inspectable.d.ts +19 -18
  250. package/dist/Inspectable.d.ts.map +1 -1
  251. package/dist/Inspectable.js +20 -16
  252. package/dist/Inspectable.js.map +1 -1
  253. package/dist/Iterable.d.ts +620 -786
  254. package/dist/Iterable.d.ts.map +1 -1
  255. package/dist/Iterable.js +241 -317
  256. package/dist/Iterable.js.map +1 -1
  257. package/dist/JsonPatch.d.ts +11 -13
  258. package/dist/JsonPatch.d.ts.map +1 -1
  259. package/dist/JsonPatch.js +46 -103
  260. package/dist/JsonPatch.js.map +1 -1
  261. package/dist/JsonPointer.d.ts +8 -8
  262. package/dist/JsonPointer.js +8 -8
  263. package/dist/JsonPointer.js.map +1 -1
  264. package/dist/JsonSchema.d.ts +98 -44
  265. package/dist/JsonSchema.d.ts.map +1 -1
  266. package/dist/JsonSchema.js +319 -241
  267. package/dist/JsonSchema.js.map +1 -1
  268. package/dist/Latch.d.ts +23 -35
  269. package/dist/Latch.d.ts.map +1 -1
  270. package/dist/Latch.js +16 -28
  271. package/dist/Latch.js.map +1 -1
  272. package/dist/Layer.d.ts +362 -263
  273. package/dist/Layer.d.ts.map +1 -1
  274. package/dist/Layer.js +203 -181
  275. package/dist/Layer.js.map +1 -1
  276. package/dist/LayerMap.d.ts +42 -29
  277. package/dist/LayerMap.d.ts.map +1 -1
  278. package/dist/LayerMap.js +31 -21
  279. package/dist/LayerMap.js.map +1 -1
  280. package/dist/LayerRef.d.ts +6 -2
  281. package/dist/LayerRef.d.ts.map +1 -1
  282. package/dist/LayerRef.js +6 -2
  283. package/dist/LayerRef.js.map +1 -1
  284. package/dist/LogLevel.d.ts +114 -214
  285. package/dist/LogLevel.d.ts.map +1 -1
  286. package/dist/LogLevel.js +41 -76
  287. package/dist/LogLevel.js.map +1 -1
  288. package/dist/Logger.d.ts +219 -468
  289. package/dist/Logger.d.ts.map +1 -1
  290. package/dist/Logger.js +209 -454
  291. package/dist/Logger.js.map +1 -1
  292. package/dist/ManagedRuntime.d.ts +16 -5
  293. package/dist/ManagedRuntime.d.ts.map +1 -1
  294. package/dist/ManagedRuntime.js +10 -5
  295. package/dist/ManagedRuntime.js.map +1 -1
  296. package/dist/Match.d.ts +217 -252
  297. package/dist/Match.d.ts.map +1 -1
  298. package/dist/Match.js +150 -183
  299. package/dist/Match.js.map +1 -1
  300. package/dist/Metric.d.ts +442 -993
  301. package/dist/Metric.d.ts.map +1 -1
  302. package/dist/Metric.js +202 -645
  303. package/dist/Metric.js.map +1 -1
  304. package/dist/MutableHashMap.d.ts +144 -173
  305. package/dist/MutableHashMap.d.ts.map +1 -1
  306. package/dist/MutableHashMap.js +68 -79
  307. package/dist/MutableHashMap.js.map +1 -1
  308. package/dist/MutableHashSet.d.ts +84 -89
  309. package/dist/MutableHashSet.d.ts.map +1 -1
  310. package/dist/MutableHashSet.js +44 -47
  311. package/dist/MutableHashSet.js.map +1 -1
  312. package/dist/MutableList.d.ts +71 -370
  313. package/dist/MutableList.d.ts.map +1 -1
  314. package/dist/MutableList.js +63 -284
  315. package/dist/MutableList.js.map +1 -1
  316. package/dist/MutableRef.d.ts +420 -243
  317. package/dist/MutableRef.d.ts.map +1 -1
  318. package/dist/MutableRef.js +209 -120
  319. package/dist/MutableRef.js.map +1 -1
  320. package/dist/Newtype.d.ts +21 -14
  321. package/dist/Newtype.d.ts.map +1 -1
  322. package/dist/Newtype.js +15 -13
  323. package/dist/Newtype.js.map +1 -1
  324. package/dist/NonEmptyIterable.d.ts +7 -137
  325. package/dist/NonEmptyIterable.d.ts.map +1 -1
  326. package/dist/NonEmptyIterable.js +5 -93
  327. package/dist/NonEmptyIterable.js.map +1 -1
  328. package/dist/Number.d.ts +196 -233
  329. package/dist/Number.d.ts.map +1 -1
  330. package/dist/Number.js +90 -109
  331. package/dist/Number.js.map +1 -1
  332. package/dist/Optic.d.ts +132 -210
  333. package/dist/Optic.d.ts.map +1 -1
  334. package/dist/Optic.js +221 -324
  335. package/dist/Optic.js.map +1 -1
  336. package/dist/Option.d.ts +447 -812
  337. package/dist/Option.d.ts.map +1 -1
  338. package/dist/Option.js +213 -393
  339. package/dist/Option.js.map +1 -1
  340. package/dist/Order.d.ts +109 -109
  341. package/dist/Order.js +91 -91
  342. package/dist/Order.js.map +1 -1
  343. package/dist/Ordering.d.ts +20 -23
  344. package/dist/Ordering.d.ts.map +1 -1
  345. package/dist/Ordering.js +8 -9
  346. package/dist/Ordering.js.map +1 -1
  347. package/dist/PartitionedSemaphore.d.ts.map +1 -1
  348. package/dist/PartitionedSemaphore.js +1 -4
  349. package/dist/PartitionedSemaphore.js.map +1 -1
  350. package/dist/Path.d.ts +38 -41
  351. package/dist/Path.d.ts.map +1 -1
  352. package/dist/Path.js +3 -4
  353. package/dist/Path.js.map +1 -1
  354. package/dist/Pipeable.d.ts +6 -5
  355. package/dist/Pipeable.d.ts.map +1 -1
  356. package/dist/Pipeable.js +2 -2
  357. package/dist/Pipeable.js.map +1 -1
  358. package/dist/PlatformError.d.ts +4 -4
  359. package/dist/PlatformError.js +3 -3
  360. package/dist/PlatformError.js.map +1 -1
  361. package/dist/Pool.d.ts +4 -2
  362. package/dist/Pool.d.ts.map +1 -1
  363. package/dist/Pool.js +4 -2
  364. package/dist/Pool.js.map +1 -1
  365. package/dist/Predicate.d.ts +200 -181
  366. package/dist/Predicate.d.ts.map +1 -1
  367. package/dist/Predicate.js +100 -108
  368. package/dist/Predicate.js.map +1 -1
  369. package/dist/PrimaryKey.d.ts +7 -7
  370. package/dist/PrimaryKey.js +5 -5
  371. package/dist/PrimaryKey.js.map +1 -1
  372. package/dist/PubSub.d.ts +425 -494
  373. package/dist/PubSub.d.ts.map +1 -1
  374. package/dist/PubSub.js +373 -362
  375. package/dist/PubSub.js.map +1 -1
  376. package/dist/Pull.d.ts +24 -18
  377. package/dist/Pull.d.ts.map +1 -1
  378. package/dist/Pull.js +11 -9
  379. package/dist/Pull.js.map +1 -1
  380. package/dist/Queue.d.ts +200 -159
  381. package/dist/Queue.d.ts.map +1 -1
  382. package/dist/Queue.js +166 -138
  383. package/dist/Queue.js.map +1 -1
  384. package/dist/Random.d.ts +49 -74
  385. package/dist/Random.d.ts.map +1 -1
  386. package/dist/Random.js +35 -54
  387. package/dist/Random.js.map +1 -1
  388. package/dist/RcMap.d.ts +121 -63
  389. package/dist/RcMap.d.ts.map +1 -1
  390. package/dist/RcMap.js +42 -21
  391. package/dist/RcMap.js.map +1 -1
  392. package/dist/RcRef.d.ts +24 -13
  393. package/dist/RcRef.d.ts.map +1 -1
  394. package/dist/RcRef.js +15 -9
  395. package/dist/RcRef.js.map +1 -1
  396. package/dist/Record.d.ts +361 -466
  397. package/dist/Record.d.ts.map +1 -1
  398. package/dist/Record.js +163 -216
  399. package/dist/Record.js.map +1 -1
  400. package/dist/Redactable.d.ts +6 -2
  401. package/dist/Redactable.d.ts.map +1 -1
  402. package/dist/Redactable.js +7 -2
  403. package/dist/Redactable.js.map +1 -1
  404. package/dist/Redacted.d.ts +25 -25
  405. package/dist/Redacted.d.ts.map +1 -1
  406. package/dist/Redacted.js +19 -20
  407. package/dist/Redacted.js.map +1 -1
  408. package/dist/Reducer.d.ts +8 -15
  409. package/dist/Reducer.d.ts.map +1 -1
  410. package/dist/Reducer.js +6 -12
  411. package/dist/Reducer.js.map +1 -1
  412. package/dist/Ref.d.ts +95 -165
  413. package/dist/Ref.d.ts.map +1 -1
  414. package/dist/Ref.js +75 -122
  415. package/dist/Ref.js.map +1 -1
  416. package/dist/References.d.ts +102 -213
  417. package/dist/References.d.ts.map +1 -1
  418. package/dist/References.js +102 -213
  419. package/dist/References.js.map +1 -1
  420. package/dist/RegExp.d.ts +10 -14
  421. package/dist/RegExp.d.ts.map +1 -1
  422. package/dist/RegExp.js +10 -14
  423. package/dist/RegExp.js.map +1 -1
  424. package/dist/Request.d.ts +31 -21
  425. package/dist/Request.d.ts.map +1 -1
  426. package/dist/Request.js +25 -19
  427. package/dist/Request.js.map +1 -1
  428. package/dist/RequestResolver.d.ts +201 -90
  429. package/dist/RequestResolver.d.ts.map +1 -1
  430. package/dist/RequestResolver.js +87 -41
  431. package/dist/RequestResolver.js.map +1 -1
  432. package/dist/Resource.js.map +1 -1
  433. package/dist/Result.d.ts +302 -470
  434. package/dist/Result.d.ts.map +1 -1
  435. package/dist/Result.js +135 -218
  436. package/dist/Result.js.map +1 -1
  437. package/dist/Runtime.d.ts +50 -75
  438. package/dist/Runtime.d.ts.map +1 -1
  439. package/dist/Runtime.js +39 -60
  440. package/dist/Runtime.js.map +1 -1
  441. package/dist/Schedule.d.ts +292 -1638
  442. package/dist/Schedule.d.ts.map +1 -1
  443. package/dist/Schedule.js +164 -805
  444. package/dist/Schedule.js.map +1 -1
  445. package/dist/Scheduler.d.ts +5 -5
  446. package/dist/Scheduler.d.ts.map +1 -1
  447. package/dist/Scheduler.js +18 -6
  448. package/dist/Scheduler.js.map +1 -1
  449. package/dist/Schema.d.ts +2056 -1269
  450. package/dist/Schema.d.ts.map +1 -1
  451. package/dist/Schema.js +2868 -1135
  452. package/dist/Schema.js.map +1 -1
  453. package/dist/SchemaAST.d.ts +64 -72
  454. package/dist/SchemaAST.d.ts.map +1 -1
  455. package/dist/SchemaAST.js +698 -468
  456. package/dist/SchemaAST.js.map +1 -1
  457. package/dist/SchemaGetter.d.ts +236 -188
  458. package/dist/SchemaGetter.d.ts.map +1 -1
  459. package/dist/SchemaGetter.js +281 -234
  460. package/dist/SchemaGetter.js.map +1 -1
  461. package/dist/SchemaIssue.d.ts +219 -190
  462. package/dist/SchemaIssue.d.ts.map +1 -1
  463. package/dist/SchemaIssue.js +303 -309
  464. package/dist/SchemaIssue.js.map +1 -1
  465. package/dist/SchemaParser.d.ts +32 -2
  466. package/dist/SchemaParser.d.ts.map +1 -1
  467. package/dist/SchemaParser.js +170 -118
  468. package/dist/SchemaParser.js.map +1 -1
  469. package/dist/SchemaRepresentation.d.ts +433 -1511
  470. package/dist/SchemaRepresentation.d.ts.map +1 -1
  471. package/dist/SchemaRepresentation.js +301 -2854
  472. package/dist/SchemaRepresentation.js.map +1 -1
  473. package/dist/SchemaTransformation.d.ts +117 -77
  474. package/dist/SchemaTransformation.d.ts.map +1 -1
  475. package/dist/SchemaTransformation.js +139 -104
  476. package/dist/SchemaTransformation.js.map +1 -1
  477. package/dist/Scope.d.ts +123 -151
  478. package/dist/Scope.d.ts.map +1 -1
  479. package/dist/Scope.js +72 -92
  480. package/dist/Scope.js.map +1 -1
  481. package/dist/ScopedCache.js +1 -1
  482. package/dist/ScopedCache.js.map +1 -1
  483. package/dist/ScopedRef.d.ts +3 -3
  484. package/dist/ScopedRef.d.ts.map +1 -1
  485. package/dist/ScopedRef.js +2 -2
  486. package/dist/ScopedRef.js.map +1 -1
  487. package/dist/Semaphore.d.ts +101 -13
  488. package/dist/Semaphore.d.ts.map +1 -1
  489. package/dist/Semaphore.js +78 -39
  490. package/dist/Semaphore.js.map +1 -1
  491. package/dist/Sink.d.ts +118 -108
  492. package/dist/Sink.d.ts.map +1 -1
  493. package/dist/Sink.js +107 -100
  494. package/dist/Sink.js.map +1 -1
  495. package/dist/Stdio.d.ts +18 -5
  496. package/dist/Stdio.d.ts.map +1 -1
  497. package/dist/Stdio.js +6 -3
  498. package/dist/Stdio.js.map +1 -1
  499. package/dist/Stream.d.ts +2467 -2962
  500. package/dist/Stream.d.ts.map +1 -1
  501. package/dist/Stream.js +1154 -1413
  502. package/dist/Stream.js.map +1 -1
  503. package/dist/String.d.ts +262 -308
  504. package/dist/String.d.ts.map +1 -1
  505. package/dist/String.js +184 -215
  506. package/dist/String.js.map +1 -1
  507. package/dist/Struct.d.ts +109 -114
  508. package/dist/Struct.d.ts.map +1 -1
  509. package/dist/Struct.js +46 -54
  510. package/dist/Struct.js.map +1 -1
  511. package/dist/SubscriptionRef.d.ts +282 -250
  512. package/dist/SubscriptionRef.d.ts.map +1 -1
  513. package/dist/SubscriptionRef.js +104 -92
  514. package/dist/SubscriptionRef.js.map +1 -1
  515. package/dist/Symbol.d.ts +3 -3
  516. package/dist/Symbol.js +3 -3
  517. package/dist/Symbol.js.map +1 -1
  518. package/dist/SynchronizedRef.js +1 -1
  519. package/dist/SynchronizedRef.js.map +1 -1
  520. package/dist/Take.js.map +1 -1
  521. package/dist/Terminal.d.ts +2 -2
  522. package/dist/Terminal.js +2 -2
  523. package/dist/Terminal.js.map +1 -1
  524. package/dist/Tracer.d.ts +100 -54
  525. package/dist/Tracer.d.ts.map +1 -1
  526. package/dist/Tracer.js +41 -24
  527. package/dist/Tracer.js.map +1 -1
  528. package/dist/Trie.d.ts +287 -679
  529. package/dist/Trie.d.ts.map +1 -1
  530. package/dist/Trie.js +109 -251
  531. package/dist/Trie.js.map +1 -1
  532. package/dist/Tuple.d.ts +98 -131
  533. package/dist/Tuple.d.ts.map +1 -1
  534. package/dist/Tuple.js +42 -57
  535. package/dist/Tuple.js.map +1 -1
  536. package/dist/TxChunk.d.ts +201 -121
  537. package/dist/TxChunk.d.ts.map +1 -1
  538. package/dist/TxChunk.js +85 -56
  539. package/dist/TxChunk.js.map +1 -1
  540. package/dist/TxDeferred.d.ts +62 -46
  541. package/dist/TxDeferred.d.ts.map +1 -1
  542. package/dist/TxDeferred.js +30 -22
  543. package/dist/TxDeferred.js.map +1 -1
  544. package/dist/TxHashMap.d.ts +631 -779
  545. package/dist/TxHashMap.d.ts.map +1 -1
  546. package/dist/TxHashMap.js +268 -330
  547. package/dist/TxHashMap.js.map +1 -1
  548. package/dist/TxHashSet.d.ts +297 -236
  549. package/dist/TxHashSet.d.ts.map +1 -1
  550. package/dist/TxHashSet.js +130 -100
  551. package/dist/TxHashSet.js.map +1 -1
  552. package/dist/TxPriorityQueue.d.ts +126 -95
  553. package/dist/TxPriorityQueue.d.ts.map +1 -1
  554. package/dist/TxPriorityQueue.js +74 -56
  555. package/dist/TxPriorityQueue.js.map +1 -1
  556. package/dist/TxPubSub.d.ts +101 -88
  557. package/dist/TxPubSub.d.ts.map +1 -1
  558. package/dist/TxPubSub.js +87 -66
  559. package/dist/TxPubSub.js.map +1 -1
  560. package/dist/TxQueue.d.ts +200 -180
  561. package/dist/TxQueue.d.ts.map +1 -1
  562. package/dist/TxQueue.js +161 -137
  563. package/dist/TxQueue.js.map +1 -1
  564. package/dist/TxReentrantLock.d.ts +89 -114
  565. package/dist/TxReentrantLock.d.ts.map +1 -1
  566. package/dist/TxReentrantLock.js +75 -53
  567. package/dist/TxReentrantLock.js.map +1 -1
  568. package/dist/TxRef.d.ts +51 -32
  569. package/dist/TxRef.d.ts.map +1 -1
  570. package/dist/TxRef.js +23 -15
  571. package/dist/TxRef.js.map +1 -1
  572. package/dist/TxSemaphore.d.ts +129 -95
  573. package/dist/TxSemaphore.d.ts.map +1 -1
  574. package/dist/TxSemaphore.js +85 -70
  575. package/dist/TxSemaphore.js.map +1 -1
  576. package/dist/TxSubscriptionRef.d.ts +97 -70
  577. package/dist/TxSubscriptionRef.d.ts.map +1 -1
  578. package/dist/TxSubscriptionRef.js +44 -34
  579. package/dist/TxSubscriptionRef.js.map +1 -1
  580. package/dist/Types.d.ts +127 -70
  581. package/dist/Types.d.ts.map +1 -1
  582. package/dist/UndefinedOr.js.map +1 -1
  583. package/dist/Unify.d.ts +45 -65
  584. package/dist/Unify.d.ts.map +1 -1
  585. package/dist/Unify.js +6 -9
  586. package/dist/Unify.js.map +1 -1
  587. package/dist/Utils.d.ts +23 -16
  588. package/dist/Utils.d.ts.map +1 -1
  589. package/dist/Utils.js +3 -7
  590. package/dist/Utils.js.map +1 -1
  591. package/dist/index.d.ts +0 -8
  592. package/dist/index.d.ts.map +1 -1
  593. package/dist/index.js +0 -8
  594. package/dist/index.js.map +1 -1
  595. package/dist/internal/array.js.map +1 -1
  596. package/dist/internal/core.js +4 -3
  597. package/dist/internal/core.js.map +1 -1
  598. package/dist/internal/dateTime.js +5 -1
  599. package/dist/internal/dateTime.js.map +1 -1
  600. package/dist/internal/doNotation.js.map +1 -1
  601. package/dist/internal/effect.js +254 -114
  602. package/dist/internal/effect.js.map +1 -1
  603. package/dist/internal/equal.js.map +1 -1
  604. package/dist/internal/errors.js.map +1 -1
  605. package/dist/internal/executionPlan.js +52 -3
  606. package/dist/internal/executionPlan.js.map +1 -1
  607. package/dist/internal/hashMap.js +12 -8
  608. package/dist/internal/hashMap.js.map +1 -1
  609. package/dist/internal/hashSet.js.map +1 -1
  610. package/dist/internal/layer.js.map +1 -1
  611. package/dist/internal/matcher.js +2 -2
  612. package/dist/internal/matcher.js.map +1 -1
  613. package/dist/internal/metric.js.map +1 -1
  614. package/dist/internal/option.js.map +1 -1
  615. package/dist/internal/persistence.d.ts +2 -0
  616. package/dist/internal/persistence.d.ts.map +1 -0
  617. package/dist/internal/persistence.js +3 -0
  618. package/dist/internal/persistence.js.map +1 -0
  619. package/dist/internal/random.js.map +1 -1
  620. package/dist/internal/rcRef.js +18 -13
  621. package/dist/internal/rcRef.js.map +1 -1
  622. package/dist/internal/record.d.ts +0 -3
  623. package/dist/internal/record.d.ts.map +1 -1
  624. package/dist/internal/record.js +10 -5
  625. package/dist/internal/record.js.map +1 -1
  626. package/dist/internal/redacted.js.map +1 -1
  627. package/dist/internal/references.js +3 -4
  628. package/dist/internal/references.js.map +1 -1
  629. package/dist/internal/request.js.map +1 -1
  630. package/dist/internal/result.js.map +1 -1
  631. package/dist/internal/schedule.js.map +1 -1
  632. package/dist/internal/schema/annotations.js +15 -1
  633. package/dist/internal/schema/annotations.js.map +1 -1
  634. package/dist/internal/schema/cause.js.map +1 -1
  635. package/dist/internal/schema/fromJsonSchemaDocument.d.ts +2 -0
  636. package/dist/internal/schema/fromJsonSchemaDocument.d.ts.map +1 -0
  637. package/dist/internal/schema/fromJsonSchemaDocument.js +761 -0
  638. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -0
  639. package/dist/internal/schema/fromRepresentation.d.ts +2 -0
  640. package/dist/internal/schema/fromRepresentation.d.ts.map +1 -0
  641. package/dist/internal/schema/fromRepresentation.js +245 -0
  642. package/dist/internal/schema/fromRepresentation.js.map +1 -0
  643. package/dist/internal/schema/parser.d.ts +14 -0
  644. package/dist/internal/schema/parser.d.ts.map +1 -0
  645. package/dist/internal/schema/parser.js +13 -0
  646. package/dist/internal/schema/parser.js.map +1 -0
  647. package/dist/internal/schema/schema.js +29 -49
  648. package/dist/internal/schema/schema.js.map +1 -1
  649. package/dist/internal/schema/toArbitrary.d.ts +2 -0
  650. package/dist/internal/schema/toArbitrary.d.ts.map +1 -0
  651. package/dist/internal/schema/{arbitrary.js → toArbitrary.js} +8 -83
  652. package/dist/internal/schema/toArbitrary.js.map +1 -0
  653. package/dist/internal/schema/toCodeDocument.d.ts +2 -0
  654. package/dist/internal/schema/toCodeDocument.d.ts.map +1 -0
  655. package/dist/internal/schema/toCodeDocument.js +438 -0
  656. package/dist/internal/schema/toCodeDocument.js.map +1 -0
  657. package/dist/internal/schema/toEquivalence.d.ts +2 -0
  658. package/dist/internal/schema/toEquivalence.d.ts.map +1 -0
  659. package/dist/internal/schema/{equivalence.js → toEquivalence.js} +15 -13
  660. package/dist/internal/schema/toEquivalence.js.map +1 -0
  661. package/dist/internal/schema/toJsonSchemaDocument.d.ts +2 -0
  662. package/dist/internal/schema/toJsonSchemaDocument.d.ts.map +1 -0
  663. package/dist/internal/schema/toJsonSchemaDocument.js +522 -0
  664. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -0
  665. package/dist/internal/schema/toRepresentation.d.ts +2 -0
  666. package/dist/internal/schema/toRepresentation.d.ts.map +1 -0
  667. package/dist/internal/schema/toRepresentation.js +351 -0
  668. package/dist/internal/schema/toRepresentation.js.map +1 -0
  669. package/dist/internal/stackTraceLimit.js +3 -6
  670. package/dist/internal/stackTraceLimit.js.map +1 -1
  671. package/dist/internal/stream.js.map +1 -1
  672. package/dist/internal/tracer.js.map +1 -1
  673. package/dist/internal/trie.js +24 -10
  674. package/dist/internal/trie.js.map +1 -1
  675. package/dist/internal/uuid.d.ts +3 -0
  676. package/dist/internal/uuid.d.ts.map +1 -0
  677. package/dist/internal/uuid.js +30 -0
  678. package/dist/internal/uuid.js.map +1 -0
  679. package/dist/testing/FastCheck.d.ts +8 -7
  680. package/dist/testing/FastCheck.d.ts.map +1 -1
  681. package/dist/testing/FastCheck.js +8 -7
  682. package/dist/testing/FastCheck.js.map +1 -1
  683. package/dist/testing/TestClock.d.ts +58 -29
  684. package/dist/testing/TestClock.d.ts.map +1 -1
  685. package/dist/testing/TestClock.js +79 -24
  686. package/dist/testing/TestClock.js.map +1 -1
  687. package/dist/testing/TestConsole.d.ts +32 -31
  688. package/dist/testing/TestConsole.d.ts.map +1 -1
  689. package/dist/testing/TestConsole.js +24 -22
  690. package/dist/testing/TestConsole.js.map +1 -1
  691. package/dist/testing/TestSchema.d.ts +31 -31
  692. package/dist/testing/TestSchema.d.ts.map +1 -1
  693. package/dist/testing/TestSchema.js +35 -34
  694. package/dist/testing/TestSchema.js.map +1 -1
  695. package/dist/testing/index.js.map +1 -1
  696. package/dist/unstable/ai/AiError.d.ts +121 -144
  697. package/dist/unstable/ai/AiError.d.ts.map +1 -1
  698. package/dist/unstable/ai/AiError.js +118 -140
  699. package/dist/unstable/ai/AiError.js.map +1 -1
  700. package/dist/unstable/ai/AnthropicStructuredOutput.d.ts +22 -7
  701. package/dist/unstable/ai/AnthropicStructuredOutput.d.ts.map +1 -1
  702. package/dist/unstable/ai/AnthropicStructuredOutput.js +87 -317
  703. package/dist/unstable/ai/AnthropicStructuredOutput.js.map +1 -1
  704. package/dist/unstable/ai/Chat.d.ts +132 -97
  705. package/dist/unstable/ai/Chat.d.ts.map +1 -1
  706. package/dist/unstable/ai/Chat.js +56 -52
  707. package/dist/unstable/ai/Chat.js.map +1 -1
  708. package/dist/unstable/ai/EmbeddingModel.d.ts +1 -1
  709. package/dist/unstable/ai/EmbeddingModel.js +1 -1
  710. package/dist/unstable/ai/EmbeddingModel.js.map +1 -1
  711. package/dist/unstable/ai/IdGenerator.d.ts +32 -28
  712. package/dist/unstable/ai/IdGenerator.d.ts.map +1 -1
  713. package/dist/unstable/ai/IdGenerator.js +26 -21
  714. package/dist/unstable/ai/IdGenerator.js.map +1 -1
  715. package/dist/unstable/ai/LanguageModel.d.ts +111 -68
  716. package/dist/unstable/ai/LanguageModel.d.ts.map +1 -1
  717. package/dist/unstable/ai/LanguageModel.js +127 -83
  718. package/dist/unstable/ai/LanguageModel.js.map +1 -1
  719. package/dist/unstable/ai/McpProtocol.d.ts +116 -0
  720. package/dist/unstable/ai/McpProtocol.d.ts.map +1 -0
  721. package/dist/unstable/ai/McpProtocol.js +32 -0
  722. package/dist/unstable/ai/McpProtocol.js.map +1 -0
  723. package/dist/unstable/ai/McpSchema.d.ts +378 -223
  724. package/dist/unstable/ai/McpSchema.d.ts.map +1 -1
  725. package/dist/unstable/ai/McpSchema.js +135 -87
  726. package/dist/unstable/ai/McpSchema.js.map +1 -1
  727. package/dist/unstable/ai/McpServer.d.ts +89 -100
  728. package/dist/unstable/ai/McpServer.d.ts.map +1 -1
  729. package/dist/unstable/ai/McpServer.js +1037 -361
  730. package/dist/unstable/ai/McpServer.js.map +1 -1
  731. package/dist/unstable/ai/Model.d.ts +8 -19
  732. package/dist/unstable/ai/Model.d.ts.map +1 -1
  733. package/dist/unstable/ai/Model.js +9 -20
  734. package/dist/unstable/ai/Model.js.map +1 -1
  735. package/dist/unstable/ai/OpenAiStructuredOutput.d.ts +33 -11
  736. package/dist/unstable/ai/OpenAiStructuredOutput.d.ts.map +1 -1
  737. package/dist/unstable/ai/OpenAiStructuredOutput.js +194 -378
  738. package/dist/unstable/ai/OpenAiStructuredOutput.js.map +1 -1
  739. package/dist/unstable/ai/Prompt.d.ts +131 -44
  740. package/dist/unstable/ai/Prompt.d.ts.map +1 -1
  741. package/dist/unstable/ai/Prompt.js +100 -36
  742. package/dist/unstable/ai/Prompt.js.map +1 -1
  743. package/dist/unstable/ai/Response.d.ts +47 -33
  744. package/dist/unstable/ai/Response.d.ts.map +1 -1
  745. package/dist/unstable/ai/Response.js +23 -18
  746. package/dist/unstable/ai/Response.js.map +1 -1
  747. package/dist/unstable/ai/ResponseIdTracker.js.map +1 -1
  748. package/dist/unstable/ai/Telemetry.d.ts +46 -13
  749. package/dist/unstable/ai/Telemetry.d.ts.map +1 -1
  750. package/dist/unstable/ai/Telemetry.js +18 -7
  751. package/dist/unstable/ai/Telemetry.js.map +1 -1
  752. package/dist/unstable/ai/Tokenizer.d.ts +14 -3
  753. package/dist/unstable/ai/Tokenizer.d.ts.map +1 -1
  754. package/dist/unstable/ai/Tokenizer.js +10 -2
  755. package/dist/unstable/ai/Tokenizer.js.map +1 -1
  756. package/dist/unstable/ai/Tool.d.ts +63 -44
  757. package/dist/unstable/ai/Tool.d.ts.map +1 -1
  758. package/dist/unstable/ai/Tool.js +59 -42
  759. package/dist/unstable/ai/Tool.js.map +1 -1
  760. package/dist/unstable/ai/Toolkit.d.ts +35 -9
  761. package/dist/unstable/ai/Toolkit.d.ts.map +1 -1
  762. package/dist/unstable/ai/Toolkit.js +32 -14
  763. package/dist/unstable/ai/Toolkit.js.map +1 -1
  764. package/dist/unstable/ai/index.d.ts +4 -0
  765. package/dist/unstable/ai/index.d.ts.map +1 -1
  766. package/dist/unstable/ai/index.js +4 -0
  767. package/dist/unstable/ai/index.js.map +1 -1
  768. package/dist/unstable/ai/internal/codec-transformer.js +15 -12
  769. package/dist/unstable/ai/internal/codec-transformer.js.map +1 -1
  770. package/dist/unstable/ai/internal/mcpCore.d.ts +7 -0
  771. package/dist/unstable/ai/internal/mcpCore.d.ts.map +1 -0
  772. package/dist/unstable/ai/internal/mcpCore.js +152 -0
  773. package/dist/unstable/ai/internal/mcpCore.js.map +1 -0
  774. package/dist/unstable/ai/internal/mcpProtocol/v2024_11_05.d.ts +2 -0
  775. package/dist/unstable/ai/internal/mcpProtocol/v2024_11_05.d.ts.map +1 -0
  776. package/dist/unstable/ai/internal/mcpProtocol/v2024_11_05.js +259 -0
  777. package/dist/unstable/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -0
  778. package/dist/unstable/ai/internal/mcpProtocol/v2025_03_26.d.ts +2 -0
  779. package/dist/unstable/ai/internal/mcpProtocol/v2025_03_26.d.ts.map +1 -0
  780. package/dist/unstable/ai/internal/mcpProtocol/v2025_03_26.js +279 -0
  781. package/dist/unstable/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -0
  782. package/dist/unstable/ai/internal/mcpProtocol/v2025_06_18.d.ts +2 -0
  783. package/dist/unstable/ai/internal/mcpProtocol/v2025_06_18.d.ts.map +1 -0
  784. package/dist/unstable/ai/internal/mcpProtocol/v2025_06_18.js +281 -0
  785. package/dist/unstable/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -0
  786. package/dist/unstable/ai/internal/mcpProtocol.d.ts +2 -0
  787. package/dist/unstable/ai/internal/mcpProtocol.d.ts.map +1 -0
  788. package/dist/unstable/ai/internal/mcpProtocol.js +153 -0
  789. package/dist/unstable/ai/internal/mcpProtocol.js.map +1 -0
  790. package/dist/unstable/ai/internal/mcpProtocolRegistry.d.ts +2 -0
  791. package/dist/unstable/ai/internal/mcpProtocolRegistry.d.ts.map +1 -0
  792. package/dist/unstable/ai/internal/mcpProtocolRegistry.js +47 -0
  793. package/dist/unstable/ai/internal/mcpProtocolRegistry.js.map +1 -0
  794. package/dist/unstable/ai/internal/mcpSchema/v2024_11_05.d.ts +1185 -0
  795. package/dist/unstable/ai/internal/mcpSchema/v2024_11_05.d.ts.map +1 -0
  796. package/dist/unstable/ai/internal/mcpSchema/v2024_11_05.js +404 -0
  797. package/dist/unstable/ai/internal/mcpSchema/v2024_11_05.js.map +1 -0
  798. package/dist/unstable/ai/internal/mcpSchema/v2025_03_26.d.ts +825 -0
  799. package/dist/unstable/ai/internal/mcpSchema/v2025_03_26.d.ts.map +1 -0
  800. package/dist/unstable/ai/internal/mcpSchema/v2025_03_26.js +138 -0
  801. package/dist/unstable/ai/internal/mcpSchema/v2025_03_26.js.map +1 -0
  802. package/dist/unstable/ai/internal/mcpSchema/v2025_06_18.d.ts +1462 -0
  803. package/dist/unstable/ai/internal/mcpSchema/v2025_06_18.d.ts.map +1 -0
  804. package/dist/unstable/ai/internal/mcpSchema/v2025_06_18.js +309 -0
  805. package/dist/unstable/ai/internal/mcpSchema/v2025_06_18.js.map +1 -0
  806. package/dist/unstable/ai/internal/structured-output.d.ts +2 -0
  807. package/dist/unstable/ai/internal/structured-output.d.ts.map +1 -0
  808. package/dist/unstable/ai/internal/structured-output.js +315 -0
  809. package/dist/unstable/ai/internal/structured-output.js.map +1 -0
  810. package/dist/unstable/cli/Argument.d.ts +279 -72
  811. package/dist/unstable/cli/Argument.d.ts.map +1 -1
  812. package/dist/unstable/cli/Argument.js +113 -34
  813. package/dist/unstable/cli/Argument.js.map +1 -1
  814. package/dist/unstable/cli/CliConfig.js.map +1 -1
  815. package/dist/unstable/cli/CliError.d.ts +126 -76
  816. package/dist/unstable/cli/CliError.d.ts.map +1 -1
  817. package/dist/unstable/cli/CliError.js +136 -76
  818. package/dist/unstable/cli/CliError.js.map +1 -1
  819. package/dist/unstable/cli/CliOutput.d.ts +35 -54
  820. package/dist/unstable/cli/CliOutput.d.ts.map +1 -1
  821. package/dist/unstable/cli/CliOutput.js +26 -42
  822. package/dist/unstable/cli/CliOutput.js.map +1 -1
  823. package/dist/unstable/cli/Command.d.ts +736 -115
  824. package/dist/unstable/cli/Command.d.ts.map +1 -1
  825. package/dist/unstable/cli/Command.js +282 -56
  826. package/dist/unstable/cli/Command.js.map +1 -1
  827. package/dist/unstable/cli/Completions.js.map +1 -1
  828. package/dist/unstable/cli/Flag.d.ts +418 -138
  829. package/dist/unstable/cli/Flag.d.ts.map +1 -1
  830. package/dist/unstable/cli/Flag.js +197 -71
  831. package/dist/unstable/cli/Flag.js.map +1 -1
  832. package/dist/unstable/cli/GlobalFlag.d.ts +1 -1
  833. package/dist/unstable/cli/GlobalFlag.js.map +1 -1
  834. package/dist/unstable/cli/HelpDoc.d.ts +12 -4
  835. package/dist/unstable/cli/HelpDoc.d.ts.map +1 -1
  836. package/dist/unstable/cli/Param.d.ts +299 -83
  837. package/dist/unstable/cli/Param.d.ts.map +1 -1
  838. package/dist/unstable/cli/Param.js +146 -60
  839. package/dist/unstable/cli/Param.js.map +1 -1
  840. package/dist/unstable/cli/Primitive.d.ts +370 -149
  841. package/dist/unstable/cli/Primitive.d.ts.map +1 -1
  842. package/dist/unstable/cli/Primitive.js +377 -162
  843. package/dist/unstable/cli/Primitive.js.map +1 -1
  844. package/dist/unstable/cli/Prompt.d.ts +23 -14
  845. package/dist/unstable/cli/Prompt.d.ts.map +1 -1
  846. package/dist/unstable/cli/Prompt.js +54 -31
  847. package/dist/unstable/cli/Prompt.js.map +1 -1
  848. package/dist/unstable/cli/index.js.map +1 -1
  849. package/dist/unstable/cli/internal/ansi.js +2 -2
  850. package/dist/unstable/cli/internal/ansi.js.map +1 -1
  851. package/dist/unstable/cli/internal/auto-suggest.js.map +1 -1
  852. package/dist/unstable/cli/internal/command.d.ts +5 -3
  853. package/dist/unstable/cli/internal/command.d.ts.map +1 -1
  854. package/dist/unstable/cli/internal/command.js +21 -13
  855. package/dist/unstable/cli/internal/command.js.map +1 -1
  856. package/dist/unstable/cli/internal/completions/bash.js +69 -9
  857. package/dist/unstable/cli/internal/completions/bash.js.map +1 -1
  858. package/dist/unstable/cli/internal/completions/descriptor.js +24 -18
  859. package/dist/unstable/cli/internal/completions/descriptor.js.map +1 -1
  860. package/dist/unstable/cli/internal/completions/fish.js +5 -5
  861. package/dist/unstable/cli/internal/completions/fish.js.map +1 -1
  862. package/dist/unstable/cli/internal/completions/zsh.js.map +1 -1
  863. package/dist/unstable/cli/internal/config.d.ts +0 -48
  864. package/dist/unstable/cli/internal/config.d.ts.map +1 -1
  865. package/dist/unstable/cli/internal/config.js +8 -10
  866. package/dist/unstable/cli/internal/config.js.map +1 -1
  867. package/dist/unstable/cli/internal/help.d.ts.map +1 -1
  868. package/dist/unstable/cli/internal/help.js +4 -2
  869. package/dist/unstable/cli/internal/help.js.map +1 -1
  870. package/dist/unstable/cli/internal/lexer.js +17 -7
  871. package/dist/unstable/cli/internal/lexer.js.map +1 -1
  872. package/dist/unstable/cli/internal/parser.js +5 -5
  873. package/dist/unstable/cli/internal/parser.js.map +1 -1
  874. package/dist/unstable/cli/internal/wizard.js +2 -2
  875. package/dist/unstable/cli/internal/wizard.js.map +1 -1
  876. package/dist/unstable/cluster/ClusterCron.js.map +1 -1
  877. package/dist/unstable/cluster/ClusterError.d.ts +3 -1
  878. package/dist/unstable/cluster/ClusterError.d.ts.map +1 -1
  879. package/dist/unstable/cluster/ClusterError.js +10 -8
  880. package/dist/unstable/cluster/ClusterError.js.map +1 -1
  881. package/dist/unstable/cluster/ClusterMetrics.js.map +1 -1
  882. package/dist/unstable/cluster/ClusterSchema.d.ts +8 -8
  883. package/dist/unstable/cluster/ClusterSchema.js +8 -8
  884. package/dist/unstable/cluster/ClusterSchema.js.map +1 -1
  885. package/dist/unstable/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  886. package/dist/unstable/cluster/ClusterWorkflowEngine.js +43 -21
  887. package/dist/unstable/cluster/ClusterWorkflowEngine.js.map +1 -1
  888. package/dist/unstable/cluster/DeliverAt.js.map +1 -1
  889. package/dist/unstable/cluster/Entity.d.ts +12 -12
  890. package/dist/unstable/cluster/Entity.d.ts.map +1 -1
  891. package/dist/unstable/cluster/Entity.js +9 -9
  892. package/dist/unstable/cluster/Entity.js.map +1 -1
  893. package/dist/unstable/cluster/EntityAddress.js.map +1 -1
  894. package/dist/unstable/cluster/EntityId.js.map +1 -1
  895. package/dist/unstable/cluster/EntityProxy.d.ts +7 -5
  896. package/dist/unstable/cluster/EntityProxy.d.ts.map +1 -1
  897. package/dist/unstable/cluster/EntityProxy.js +8 -5
  898. package/dist/unstable/cluster/EntityProxy.js.map +1 -1
  899. package/dist/unstable/cluster/EntityProxyServer.js.map +1 -1
  900. package/dist/unstable/cluster/EntityResource.d.ts +4 -4
  901. package/dist/unstable/cluster/EntityResource.d.ts.map +1 -1
  902. package/dist/unstable/cluster/EntityResource.js +14 -2
  903. package/dist/unstable/cluster/EntityResource.js.map +1 -1
  904. package/dist/unstable/cluster/EntityType.js.map +1 -1
  905. package/dist/unstable/cluster/Envelope.d.ts +3 -3
  906. package/dist/unstable/cluster/Envelope.d.ts.map +1 -1
  907. package/dist/unstable/cluster/Envelope.js +5 -4
  908. package/dist/unstable/cluster/Envelope.js.map +1 -1
  909. package/dist/unstable/cluster/HttpRunner.d.ts +2 -2
  910. package/dist/unstable/cluster/HttpRunner.d.ts.map +1 -1
  911. package/dist/unstable/cluster/HttpRunner.js +6 -4
  912. package/dist/unstable/cluster/HttpRunner.js.map +1 -1
  913. package/dist/unstable/cluster/K8sHttpClient.d.ts +2 -2
  914. package/dist/unstable/cluster/K8sHttpClient.d.ts.map +1 -1
  915. package/dist/unstable/cluster/K8sHttpClient.js +8 -0
  916. package/dist/unstable/cluster/K8sHttpClient.js.map +1 -1
  917. package/dist/unstable/cluster/K8sTypes.d.ts +2327 -0
  918. package/dist/unstable/cluster/K8sTypes.d.ts.map +1 -0
  919. package/dist/unstable/cluster/K8sTypes.js +29 -0
  920. package/dist/unstable/cluster/K8sTypes.js.map +1 -0
  921. package/dist/unstable/cluster/MachineId.js.map +1 -1
  922. package/dist/unstable/cluster/Message.d.ts +9 -9
  923. package/dist/unstable/cluster/Message.js +6 -6
  924. package/dist/unstable/cluster/Message.js.map +1 -1
  925. package/dist/unstable/cluster/MessageStorage.d.ts +66 -22
  926. package/dist/unstable/cluster/MessageStorage.d.ts.map +1 -1
  927. package/dist/unstable/cluster/MessageStorage.js +56 -13
  928. package/dist/unstable/cluster/MessageStorage.js.map +1 -1
  929. package/dist/unstable/cluster/Reply.d.ts +8 -0
  930. package/dist/unstable/cluster/Reply.d.ts.map +1 -1
  931. package/dist/unstable/cluster/Reply.js +17 -5
  932. package/dist/unstable/cluster/Reply.js.map +1 -1
  933. package/dist/unstable/cluster/Runner.d.ts +1 -1
  934. package/dist/unstable/cluster/Runner.js +1 -1
  935. package/dist/unstable/cluster/Runner.js.map +1 -1
  936. package/dist/unstable/cluster/RunnerAddress.d.ts +1 -1
  937. package/dist/unstable/cluster/RunnerAddress.js +1 -1
  938. package/dist/unstable/cluster/RunnerAddress.js.map +1 -1
  939. package/dist/unstable/cluster/RunnerHealth.d.ts +1 -1
  940. package/dist/unstable/cluster/RunnerHealth.js +1 -1
  941. package/dist/unstable/cluster/RunnerHealth.js.map +1 -1
  942. package/dist/unstable/cluster/RunnerServer.d.ts +2 -1
  943. package/dist/unstable/cluster/RunnerServer.d.ts.map +1 -1
  944. package/dist/unstable/cluster/RunnerServer.js +29 -23
  945. package/dist/unstable/cluster/RunnerServer.js.map +1 -1
  946. package/dist/unstable/cluster/RunnerStorage.d.ts +3 -4
  947. package/dist/unstable/cluster/RunnerStorage.d.ts.map +1 -1
  948. package/dist/unstable/cluster/RunnerStorage.js +8 -7
  949. package/dist/unstable/cluster/RunnerStorage.js.map +1 -1
  950. package/dist/unstable/cluster/Runners.d.ts +11 -15
  951. package/dist/unstable/cluster/Runners.d.ts.map +1 -1
  952. package/dist/unstable/cluster/Runners.js +32 -22
  953. package/dist/unstable/cluster/Runners.js.map +1 -1
  954. package/dist/unstable/cluster/ShardId.js +1 -1
  955. package/dist/unstable/cluster/ShardId.js.map +1 -1
  956. package/dist/unstable/cluster/Sharding.d.ts +2 -2
  957. package/dist/unstable/cluster/Sharding.d.ts.map +1 -1
  958. package/dist/unstable/cluster/Sharding.js +293 -46
  959. package/dist/unstable/cluster/Sharding.js.map +1 -1
  960. package/dist/unstable/cluster/ShardingConfig.d.ts +57 -5
  961. package/dist/unstable/cluster/ShardingConfig.d.ts.map +1 -1
  962. package/dist/unstable/cluster/ShardingConfig.js +11 -3
  963. package/dist/unstable/cluster/ShardingConfig.js.map +1 -1
  964. package/dist/unstable/cluster/ShardingRegistrationEvent.js.map +1 -1
  965. package/dist/unstable/cluster/SingleRunner.d.ts +4 -2
  966. package/dist/unstable/cluster/SingleRunner.d.ts.map +1 -1
  967. package/dist/unstable/cluster/SingleRunner.js +2 -1
  968. package/dist/unstable/cluster/SingleRunner.js.map +1 -1
  969. package/dist/unstable/cluster/Singleton.js.map +1 -1
  970. package/dist/unstable/cluster/SingletonAddress.d.ts +1 -1
  971. package/dist/unstable/cluster/SingletonAddress.js +1 -1
  972. package/dist/unstable/cluster/SingletonAddress.js.map +1 -1
  973. package/dist/unstable/cluster/Snowflake.d.ts +8 -8
  974. package/dist/unstable/cluster/Snowflake.js +8 -8
  975. package/dist/unstable/cluster/Snowflake.js.map +1 -1
  976. package/dist/unstable/cluster/SocketRunner.js.map +1 -1
  977. package/dist/unstable/cluster/SqlMessageStorage.d.ts +21 -9
  978. package/dist/unstable/cluster/SqlMessageStorage.d.ts.map +1 -1
  979. package/dist/unstable/cluster/SqlMessageStorage.js +130 -43
  980. package/dist/unstable/cluster/SqlMessageStorage.js.map +1 -1
  981. package/dist/unstable/cluster/SqlRunnerStorage.d.ts.map +1 -1
  982. package/dist/unstable/cluster/SqlRunnerStorage.js +141 -79
  983. package/dist/unstable/cluster/SqlRunnerStorage.js.map +1 -1
  984. package/dist/unstable/cluster/TestRunner.js.map +1 -1
  985. package/dist/unstable/cluster/index.d.ts +4 -0
  986. package/dist/unstable/cluster/index.d.ts.map +1 -1
  987. package/dist/unstable/cluster/index.js +4 -0
  988. package/dist/unstable/cluster/index.js.map +1 -1
  989. package/dist/unstable/cluster/internal/entityManager.js +33 -13
  990. package/dist/unstable/cluster/internal/entityManager.js.map +1 -1
  991. package/dist/unstable/cluster/internal/entityReaper.js.map +1 -1
  992. package/dist/unstable/cluster/internal/hash.js.map +1 -1
  993. package/dist/unstable/cluster/internal/interruptors.js.map +1 -1
  994. package/dist/unstable/cluster/internal/resourceMap.js +8 -2
  995. package/dist/unstable/cluster/internal/resourceMap.js.map +1 -1
  996. package/dist/unstable/cluster/internal/resourceRef.js +17 -0
  997. package/dist/unstable/cluster/internal/resourceRef.js.map +1 -1
  998. package/dist/unstable/cluster/internal/shardLock.d.ts +2 -0
  999. package/dist/unstable/cluster/internal/shardLock.d.ts.map +1 -0
  1000. package/dist/unstable/cluster/internal/shardLock.js +4 -0
  1001. package/dist/unstable/cluster/internal/shardLock.js.map +1 -0
  1002. package/dist/unstable/devtools/DevTools.js.map +1 -1
  1003. package/dist/unstable/devtools/DevToolsClient.d.ts.map +1 -1
  1004. package/dist/unstable/devtools/DevToolsClient.js +7 -2
  1005. package/dist/unstable/devtools/DevToolsClient.js.map +1 -1
  1006. package/dist/unstable/devtools/DevToolsSchema.d.ts +20 -20
  1007. package/dist/unstable/devtools/DevToolsSchema.d.ts.map +1 -1
  1008. package/dist/unstable/devtools/DevToolsSchema.js +8 -5
  1009. package/dist/unstable/devtools/DevToolsSchema.js.map +1 -1
  1010. package/dist/unstable/devtools/DevToolsServer.js.map +1 -1
  1011. package/dist/unstable/devtools/index.js.map +1 -1
  1012. package/dist/unstable/encoding/Ini.d.ts +20 -0
  1013. package/dist/unstable/encoding/Ini.d.ts.map +1 -0
  1014. package/dist/unstable/encoding/Ini.js +153 -0
  1015. package/dist/unstable/encoding/Ini.js.map +1 -0
  1016. package/dist/unstable/encoding/Msgpack.d.ts +2 -1
  1017. package/dist/unstable/encoding/Msgpack.d.ts.map +1 -1
  1018. package/dist/unstable/encoding/Msgpack.js +31 -19
  1019. package/dist/unstable/encoding/Msgpack.js.map +1 -1
  1020. package/dist/unstable/encoding/Ndjson.d.ts.map +1 -1
  1021. package/dist/unstable/encoding/Ndjson.js +7 -1
  1022. package/dist/unstable/encoding/Ndjson.js.map +1 -1
  1023. package/dist/unstable/encoding/Sse.d.ts +72 -8
  1024. package/dist/unstable/encoding/Sse.d.ts.map +1 -1
  1025. package/dist/unstable/encoding/Sse.js +72 -31
  1026. package/dist/unstable/encoding/Sse.js.map +1 -1
  1027. package/dist/unstable/encoding/Toml.d.ts +19 -0
  1028. package/dist/unstable/encoding/Toml.d.ts.map +1 -0
  1029. package/dist/unstable/encoding/Toml.js +434 -0
  1030. package/dist/unstable/encoding/Toml.js.map +1 -0
  1031. package/dist/unstable/encoding/Yaml.d.ts +19 -0
  1032. package/dist/unstable/encoding/Yaml.d.ts.map +1 -0
  1033. package/dist/unstable/encoding/Yaml.js +461 -0
  1034. package/dist/unstable/encoding/Yaml.js.map +1 -0
  1035. package/dist/unstable/encoding/index.d.ts +12 -0
  1036. package/dist/unstable/encoding/index.d.ts.map +1 -1
  1037. package/dist/unstable/encoding/index.js +12 -0
  1038. package/dist/unstable/encoding/index.js.map +1 -1
  1039. package/dist/unstable/eventlog/Event.d.ts +20 -20
  1040. package/dist/unstable/eventlog/Event.js.map +1 -1
  1041. package/dist/unstable/eventlog/EventGroup.d.ts +4 -4
  1042. package/dist/unstable/eventlog/EventGroup.js.map +1 -1
  1043. package/dist/unstable/eventlog/EventJournal.d.ts +30 -17
  1044. package/dist/unstable/eventlog/EventJournal.d.ts.map +1 -1
  1045. package/dist/unstable/eventlog/EventJournal.js +30 -35
  1046. package/dist/unstable/eventlog/EventJournal.js.map +1 -1
  1047. package/dist/unstable/eventlog/EventLog.d.ts +3 -3
  1048. package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
  1049. package/dist/unstable/eventlog/EventLog.js +18 -14
  1050. package/dist/unstable/eventlog/EventLog.js.map +1 -1
  1051. package/dist/unstable/eventlog/EventLogEncryption.d.ts +8 -7
  1052. package/dist/unstable/eventlog/EventLogEncryption.d.ts.map +1 -1
  1053. package/dist/unstable/eventlog/EventLogEncryption.js +16 -14
  1054. package/dist/unstable/eventlog/EventLogEncryption.js.map +1 -1
  1055. package/dist/unstable/eventlog/EventLogMessage.d.ts +31 -31
  1056. package/dist/unstable/eventlog/EventLogMessage.d.ts.map +1 -1
  1057. package/dist/unstable/eventlog/EventLogMessage.js +12 -8
  1058. package/dist/unstable/eventlog/EventLogMessage.js.map +1 -1
  1059. package/dist/unstable/eventlog/EventLogRemote.d.ts +15 -15
  1060. package/dist/unstable/eventlog/EventLogRemote.js +5 -5
  1061. package/dist/unstable/eventlog/EventLogRemote.js.map +1 -1
  1062. package/dist/unstable/eventlog/EventLogServer.d.ts +11 -2
  1063. package/dist/unstable/eventlog/EventLogServer.d.ts.map +1 -1
  1064. package/dist/unstable/eventlog/EventLogServer.js +45 -21
  1065. package/dist/unstable/eventlog/EventLogServer.js.map +1 -1
  1066. package/dist/unstable/eventlog/EventLogServerEncrypted.d.ts +4 -4
  1067. package/dist/unstable/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  1068. package/dist/unstable/eventlog/EventLogServerEncrypted.js +17 -8
  1069. package/dist/unstable/eventlog/EventLogServerEncrypted.js.map +1 -1
  1070. package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts +5 -5
  1071. package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
  1072. package/dist/unstable/eventlog/EventLogServerUnencrypted.js +15 -7
  1073. package/dist/unstable/eventlog/EventLogServerUnencrypted.js.map +1 -1
  1074. package/dist/unstable/eventlog/EventLogSessionAuth.d.ts +1 -1
  1075. package/dist/unstable/eventlog/EventLogSessionAuth.js +1 -1
  1076. package/dist/unstable/eventlog/EventLogSessionAuth.js.map +1 -1
  1077. package/dist/unstable/eventlog/SqlEventJournal.d.ts +10 -0
  1078. package/dist/unstable/eventlog/SqlEventJournal.d.ts.map +1 -1
  1079. package/dist/unstable/eventlog/SqlEventJournal.js +4 -7
  1080. package/dist/unstable/eventlog/SqlEventJournal.js.map +1 -1
  1081. package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js +1 -1
  1082. package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  1083. package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js +3 -3
  1084. package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  1085. package/dist/unstable/eventlog/index.js.map +1 -1
  1086. package/dist/unstable/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
  1087. package/dist/unstable/http/Cookies.d.ts +2 -2
  1088. package/dist/unstable/http/Cookies.d.ts.map +1 -1
  1089. package/dist/unstable/http/Cookies.js +54 -40
  1090. package/dist/unstable/http/Cookies.js.map +1 -1
  1091. package/dist/unstable/http/Etag.d.ts +1 -1
  1092. package/dist/unstable/http/Etag.js +1 -1
  1093. package/dist/unstable/http/Etag.js.map +1 -1
  1094. package/dist/unstable/http/FetchHttpClient.d.ts.map +1 -1
  1095. package/dist/unstable/http/FetchHttpClient.js +1 -1
  1096. package/dist/unstable/http/FetchHttpClient.js.map +1 -1
  1097. package/dist/unstable/http/FindMyWay/internal/queryString.d.ts +11 -0
  1098. package/dist/unstable/http/FindMyWay/internal/queryString.d.ts.map +1 -0
  1099. package/dist/unstable/http/FindMyWay/internal/queryString.js +259 -0
  1100. package/dist/unstable/http/FindMyWay/internal/queryString.js.map +1 -0
  1101. package/dist/unstable/http/FindMyWay/internal/router.d.ts +2 -0
  1102. package/dist/unstable/http/FindMyWay/internal/router.d.ts.map +1 -0
  1103. package/dist/unstable/http/FindMyWay/internal/router.js +665 -0
  1104. package/dist/unstable/http/FindMyWay/internal/router.js.map +1 -0
  1105. package/dist/unstable/http/FindMyWay.d.ts +33 -8
  1106. package/dist/unstable/http/FindMyWay.d.ts.map +1 -1
  1107. package/dist/unstable/http/FindMyWay.js +4 -7
  1108. package/dist/unstable/http/FindMyWay.js.map +1 -1
  1109. package/dist/unstable/http/Headers.d.ts +2 -2
  1110. package/dist/unstable/http/Headers.js +10 -10
  1111. package/dist/unstable/http/Headers.js.map +1 -1
  1112. package/dist/unstable/http/HttpBody.d.ts +5 -3
  1113. package/dist/unstable/http/HttpBody.d.ts.map +1 -1
  1114. package/dist/unstable/http/HttpBody.js +11 -5
  1115. package/dist/unstable/http/HttpBody.js.map +1 -1
  1116. package/dist/unstable/http/HttpClient.d.ts +110 -47
  1117. package/dist/unstable/http/HttpClient.d.ts.map +1 -1
  1118. package/dist/unstable/http/HttpClient.js +79 -36
  1119. package/dist/unstable/http/HttpClient.js.map +1 -1
  1120. package/dist/unstable/http/HttpClientError.js +1 -1
  1121. package/dist/unstable/http/HttpClientError.js.map +1 -1
  1122. package/dist/unstable/http/HttpClientRequest.d.ts +44 -0
  1123. package/dist/unstable/http/HttpClientRequest.d.ts.map +1 -1
  1124. package/dist/unstable/http/HttpClientRequest.js +16 -12
  1125. package/dist/unstable/http/HttpClientRequest.js.map +1 -1
  1126. package/dist/unstable/http/HttpClientResponse.d.ts +4 -4
  1127. package/dist/unstable/http/HttpClientResponse.js +3 -18
  1128. package/dist/unstable/http/HttpClientResponse.js.map +1 -1
  1129. package/dist/unstable/http/HttpEffect.d.ts +7 -9
  1130. package/dist/unstable/http/HttpEffect.d.ts.map +1 -1
  1131. package/dist/unstable/http/HttpEffect.js +14 -15
  1132. package/dist/unstable/http/HttpEffect.js.map +1 -1
  1133. package/dist/unstable/http/HttpIncomingMessage.js.map +1 -1
  1134. package/dist/unstable/http/HttpMethod.d.ts +6 -9
  1135. package/dist/unstable/http/HttpMethod.d.ts.map +1 -1
  1136. package/dist/unstable/http/HttpMethod.js +6 -9
  1137. package/dist/unstable/http/HttpMethod.js.map +1 -1
  1138. package/dist/unstable/http/HttpMiddleware.d.ts +75 -9
  1139. package/dist/unstable/http/HttpMiddleware.d.ts.map +1 -1
  1140. package/dist/unstable/http/HttpMiddleware.js +164 -39
  1141. package/dist/unstable/http/HttpMiddleware.js.map +1 -1
  1142. package/dist/unstable/http/HttpPlatform.d.ts +76 -0
  1143. package/dist/unstable/http/HttpPlatform.d.ts.map +1 -1
  1144. package/dist/unstable/http/HttpPlatform.js +53 -3
  1145. package/dist/unstable/http/HttpPlatform.js.map +1 -1
  1146. package/dist/unstable/http/HttpRouter.d.ts +91 -92
  1147. package/dist/unstable/http/HttpRouter.d.ts.map +1 -1
  1148. package/dist/unstable/http/HttpRouter.js +79 -80
  1149. package/dist/unstable/http/HttpRouter.js.map +1 -1
  1150. package/dist/unstable/http/HttpServer.d.ts +13 -13
  1151. package/dist/unstable/http/HttpServer.js +6 -6
  1152. package/dist/unstable/http/HttpServer.js.map +1 -1
  1153. package/dist/unstable/http/HttpServerError.d.ts +2 -2
  1154. package/dist/unstable/http/HttpServerError.js +2 -2
  1155. package/dist/unstable/http/HttpServerError.js.map +1 -1
  1156. package/dist/unstable/http/HttpServerRequest.d.ts +4 -4
  1157. package/dist/unstable/http/HttpServerRequest.d.ts.map +1 -1
  1158. package/dist/unstable/http/HttpServerRequest.js +23 -15
  1159. package/dist/unstable/http/HttpServerRequest.js.map +1 -1
  1160. package/dist/unstable/http/HttpServerRespondable.js.map +1 -1
  1161. package/dist/unstable/http/HttpServerResponse.d.ts +22 -0
  1162. package/dist/unstable/http/HttpServerResponse.d.ts.map +1 -1
  1163. package/dist/unstable/http/HttpServerResponse.js +17 -5
  1164. package/dist/unstable/http/HttpServerResponse.js.map +1 -1
  1165. package/dist/unstable/http/HttpStaticServer.d.ts +35 -7
  1166. package/dist/unstable/http/HttpStaticServer.d.ts.map +1 -1
  1167. package/dist/unstable/http/HttpStaticServer.js +35 -7
  1168. package/dist/unstable/http/HttpStaticServer.js.map +1 -1
  1169. package/dist/unstable/http/HttpStatus.d.ts +99 -0
  1170. package/dist/unstable/http/HttpStatus.d.ts.map +1 -0
  1171. package/dist/unstable/http/HttpStatus.js +91 -0
  1172. package/dist/unstable/http/HttpStatus.js.map +1 -0
  1173. package/dist/unstable/http/HttpTraceContext.js.map +1 -1
  1174. package/dist/unstable/http/Multipart.d.ts +28 -9
  1175. package/dist/unstable/http/Multipart.d.ts.map +1 -1
  1176. package/dist/unstable/http/Multipart.js +65 -35
  1177. package/dist/unstable/http/Multipart.js.map +1 -1
  1178. package/dist/unstable/http/MultipartParser/HeadersParser.d.ts +53 -0
  1179. package/dist/unstable/http/MultipartParser/HeadersParser.d.ts.map +1 -0
  1180. package/dist/unstable/http/MultipartParser/HeadersParser.js +14 -0
  1181. package/dist/unstable/http/MultipartParser/HeadersParser.js.map +1 -0
  1182. package/dist/unstable/http/MultipartParser/Search.d.ts +11 -0
  1183. package/dist/unstable/http/MultipartParser/Search.d.ts.map +1 -0
  1184. package/dist/unstable/http/MultipartParser/Search.js +14 -0
  1185. package/dist/unstable/http/MultipartParser/Search.js.map +1 -0
  1186. package/dist/unstable/http/MultipartParser/internal/contentType.d.ts +5 -0
  1187. package/dist/unstable/http/MultipartParser/internal/contentType.d.ts.map +1 -0
  1188. package/dist/unstable/http/MultipartParser/internal/contentType.js +82 -0
  1189. package/dist/unstable/http/MultipartParser/internal/contentType.js.map +1 -0
  1190. package/dist/unstable/http/MultipartParser/internal/headers.d.ts +3 -0
  1191. package/dist/unstable/http/MultipartParser/internal/headers.d.ts.map +1 -0
  1192. package/dist/unstable/http/MultipartParser/internal/headers.js +208 -0
  1193. package/dist/unstable/http/MultipartParser/internal/headers.js.map +1 -0
  1194. package/dist/unstable/http/MultipartParser/internal/multipart.d.ts +8 -0
  1195. package/dist/unstable/http/MultipartParser/internal/multipart.d.ts.map +1 -0
  1196. package/dist/unstable/http/MultipartParser/internal/multipart.js +241 -0
  1197. package/dist/unstable/http/MultipartParser/internal/multipart.js.map +1 -0
  1198. package/dist/unstable/http/MultipartParser/internal/search.d.ts +5 -0
  1199. package/dist/unstable/http/MultipartParser/internal/search.d.ts.map +1 -0
  1200. package/dist/unstable/http/MultipartParser/internal/search.js +120 -0
  1201. package/dist/unstable/http/MultipartParser/internal/search.js.map +1 -0
  1202. package/dist/unstable/http/MultipartParser.d.ts +98 -0
  1203. package/dist/unstable/http/MultipartParser.d.ts.map +1 -0
  1204. package/dist/unstable/http/MultipartParser.js +23 -0
  1205. package/dist/unstable/http/MultipartParser.js.map +1 -0
  1206. package/dist/unstable/http/Template.d.ts.map +1 -1
  1207. package/dist/unstable/http/Template.js +3 -3
  1208. package/dist/unstable/http/Template.js.map +1 -1
  1209. package/dist/unstable/http/Url.d.ts +33 -63
  1210. package/dist/unstable/http/Url.d.ts.map +1 -1
  1211. package/dist/unstable/http/Url.js +14 -28
  1212. package/dist/unstable/http/Url.js.map +1 -1
  1213. package/dist/unstable/http/UrlParams.d.ts +10 -18
  1214. package/dist/unstable/http/UrlParams.d.ts.map +1 -1
  1215. package/dist/unstable/http/UrlParams.js +26 -31
  1216. package/dist/unstable/http/UrlParams.js.map +1 -1
  1217. package/dist/unstable/http/index.d.ts +5 -1
  1218. package/dist/unstable/http/index.d.ts.map +1 -1
  1219. package/dist/unstable/http/index.js +5 -1
  1220. package/dist/unstable/http/index.js.map +1 -1
  1221. package/dist/unstable/http/internal/compression.d.ts +2 -0
  1222. package/dist/unstable/http/internal/compression.d.ts.map +1 -0
  1223. package/dist/unstable/http/internal/compression.js +155 -0
  1224. package/dist/unstable/http/internal/compression.js.map +1 -0
  1225. package/dist/unstable/http/internal/httpBody.d.ts +2 -0
  1226. package/dist/unstable/http/internal/httpBody.d.ts.map +1 -0
  1227. package/dist/unstable/http/internal/httpBody.js +10 -0
  1228. package/dist/unstable/http/internal/httpBody.js.map +1 -0
  1229. package/dist/unstable/http/internal/preResponseHandler.js.map +1 -1
  1230. package/dist/unstable/httpapi/HttpApi.d.ts.map +1 -1
  1231. package/dist/unstable/httpapi/HttpApi.js +9 -9
  1232. package/dist/unstable/httpapi/HttpApi.js.map +1 -1
  1233. package/dist/unstable/httpapi/HttpApiBuilder.d.ts +1 -1
  1234. package/dist/unstable/httpapi/HttpApiBuilder.d.ts.map +1 -1
  1235. package/dist/unstable/httpapi/HttpApiBuilder.js +82 -30
  1236. package/dist/unstable/httpapi/HttpApiBuilder.js.map +1 -1
  1237. package/dist/unstable/httpapi/HttpApiClient.d.ts +4 -5
  1238. package/dist/unstable/httpapi/HttpApiClient.d.ts.map +1 -1
  1239. package/dist/unstable/httpapi/HttpApiClient.js +89 -51
  1240. package/dist/unstable/httpapi/HttpApiClient.js.map +1 -1
  1241. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts +48 -46
  1242. package/dist/unstable/httpapi/HttpApiEndpoint.d.ts.map +1 -1
  1243. package/dist/unstable/httpapi/HttpApiEndpoint.js +73 -16
  1244. package/dist/unstable/httpapi/HttpApiEndpoint.js.map +1 -1
  1245. package/dist/unstable/httpapi/HttpApiError.d.ts +18 -18
  1246. package/dist/unstable/httpapi/HttpApiError.d.ts.map +1 -1
  1247. package/dist/unstable/httpapi/HttpApiError.js +30 -30
  1248. package/dist/unstable/httpapi/HttpApiError.js.map +1 -1
  1249. package/dist/unstable/httpapi/HttpApiGroup.d.ts +15 -15
  1250. package/dist/unstable/httpapi/HttpApiGroup.js +2 -2
  1251. package/dist/unstable/httpapi/HttpApiGroup.js.map +1 -1
  1252. package/dist/unstable/httpapi/HttpApiMiddleware.d.ts +71 -24
  1253. package/dist/unstable/httpapi/HttpApiMiddleware.d.ts.map +1 -1
  1254. package/dist/unstable/httpapi/HttpApiMiddleware.js +57 -10
  1255. package/dist/unstable/httpapi/HttpApiMiddleware.js.map +1 -1
  1256. package/dist/unstable/httpapi/HttpApiScalar.d.ts +0 -12
  1257. package/dist/unstable/httpapi/HttpApiScalar.d.ts.map +1 -1
  1258. package/dist/unstable/httpapi/HttpApiScalar.js.map +1 -1
  1259. package/dist/unstable/httpapi/HttpApiSchema.d.ts +227 -71
  1260. package/dist/unstable/httpapi/HttpApiSchema.d.ts.map +1 -1
  1261. package/dist/unstable/httpapi/HttpApiSchema.js +176 -69
  1262. package/dist/unstable/httpapi/HttpApiSchema.js.map +1 -1
  1263. package/dist/unstable/httpapi/HttpApiSecurity.js.map +1 -1
  1264. package/dist/unstable/httpapi/HttpApiSwagger.js.map +1 -1
  1265. package/dist/unstable/httpapi/HttpApiTest.js.map +1 -1
  1266. package/dist/unstable/httpapi/OpenApi.d.ts +21 -13
  1267. package/dist/unstable/httpapi/OpenApi.d.ts.map +1 -1
  1268. package/dist/unstable/httpapi/OpenApi.js +110 -57
  1269. package/dist/unstable/httpapi/OpenApi.js.map +1 -1
  1270. package/dist/unstable/httpapi/index.js.map +1 -1
  1271. package/dist/unstable/httpapi/internal/html.js.map +1 -1
  1272. package/dist/unstable/httpapi/internal/httpApiScalar.js.map +1 -1
  1273. package/dist/unstable/httpapi/internal/httpApiSwagger.js.map +1 -1
  1274. package/dist/unstable/httpapi/internal/mediaType.js.map +1 -1
  1275. package/dist/unstable/observability/Otlp.js.map +1 -1
  1276. package/dist/unstable/observability/OtlpExporter.d.ts +71 -2
  1277. package/dist/unstable/observability/OtlpExporter.d.ts.map +1 -1
  1278. package/dist/unstable/observability/OtlpExporter.js +86 -7
  1279. package/dist/unstable/observability/OtlpExporter.js.map +1 -1
  1280. package/dist/unstable/observability/OtlpLogger.d.ts +4 -3
  1281. package/dist/unstable/observability/OtlpLogger.d.ts.map +1 -1
  1282. package/dist/unstable/observability/OtlpLogger.js +4 -4
  1283. package/dist/unstable/observability/OtlpLogger.js.map +1 -1
  1284. package/dist/unstable/observability/OtlpMetrics.d.ts +11 -4
  1285. package/dist/unstable/observability/OtlpMetrics.d.ts.map +1 -1
  1286. package/dist/unstable/observability/OtlpMetrics.js +31 -15
  1287. package/dist/unstable/observability/OtlpMetrics.js.map +1 -1
  1288. package/dist/unstable/observability/OtlpResource.d.ts +16 -7
  1289. package/dist/unstable/observability/OtlpResource.d.ts.map +1 -1
  1290. package/dist/unstable/observability/OtlpResource.js +21 -12
  1291. package/dist/unstable/observability/OtlpResource.js.map +1 -1
  1292. package/dist/unstable/observability/OtlpSerialization.js.map +1 -1
  1293. package/dist/unstable/observability/OtlpTracer.d.ts +4 -3
  1294. package/dist/unstable/observability/OtlpTracer.d.ts.map +1 -1
  1295. package/dist/unstable/observability/OtlpTracer.js +3 -3
  1296. package/dist/unstable/observability/OtlpTracer.js.map +1 -1
  1297. package/dist/unstable/observability/PrometheusMetrics.d.ts +13 -4
  1298. package/dist/unstable/observability/PrometheusMetrics.d.ts.map +1 -1
  1299. package/dist/unstable/observability/PrometheusMetrics.js +10 -3
  1300. package/dist/unstable/observability/PrometheusMetrics.js.map +1 -1
  1301. package/dist/unstable/observability/index.js.map +1 -1
  1302. package/dist/unstable/observability/internal/otlpEnv.js +1 -1
  1303. package/dist/unstable/observability/internal/otlpEnv.js.map +1 -1
  1304. package/dist/unstable/observability/internal/otlpProtobuf.js.map +1 -1
  1305. package/dist/unstable/observability/internal/protobuf.js +3 -0
  1306. package/dist/unstable/observability/internal/protobuf.js.map +1 -1
  1307. package/dist/unstable/persistence/KeyValueStore.d.ts +8 -3
  1308. package/dist/unstable/persistence/KeyValueStore.d.ts.map +1 -1
  1309. package/dist/unstable/persistence/KeyValueStore.js +22 -13
  1310. package/dist/unstable/persistence/KeyValueStore.js.map +1 -1
  1311. package/dist/unstable/persistence/Persistable.d.ts +8 -8
  1312. package/dist/unstable/persistence/Persistable.d.ts.map +1 -1
  1313. package/dist/unstable/persistence/Persistable.js +2 -1
  1314. package/dist/unstable/persistence/Persistable.js.map +1 -1
  1315. package/dist/unstable/persistence/PersistedCache.js.map +1 -1
  1316. package/dist/unstable/persistence/PersistedQueue.d.ts +6 -6
  1317. package/dist/unstable/persistence/PersistedQueue.d.ts.map +1 -1
  1318. package/dist/unstable/persistence/PersistedQueue.js +97 -86
  1319. package/dist/unstable/persistence/PersistedQueue.js.map +1 -1
  1320. package/dist/unstable/persistence/Persistence.d.ts +3 -3
  1321. package/dist/unstable/persistence/Persistence.d.ts.map +1 -1
  1322. package/dist/unstable/persistence/Persistence.js +108 -22
  1323. package/dist/unstable/persistence/Persistence.js.map +1 -1
  1324. package/dist/unstable/persistence/RateLimiter.d.ts +47 -26
  1325. package/dist/unstable/persistence/RateLimiter.d.ts.map +1 -1
  1326. package/dist/unstable/persistence/RateLimiter.js +31 -47
  1327. package/dist/unstable/persistence/RateLimiter.js.map +1 -1
  1328. package/dist/unstable/persistence/Redis.d.ts +2 -2
  1329. package/dist/unstable/persistence/Redis.d.ts.map +1 -1
  1330. package/dist/unstable/persistence/Redis.js +4 -4
  1331. package/dist/unstable/persistence/Redis.js.map +1 -1
  1332. package/dist/unstable/persistence/index.js.map +1 -1
  1333. package/dist/unstable/process/ChildProcess.d.ts +72 -21
  1334. package/dist/unstable/process/ChildProcess.d.ts.map +1 -1
  1335. package/dist/unstable/process/ChildProcess.js +14 -5
  1336. package/dist/unstable/process/ChildProcess.js.map +1 -1
  1337. package/dist/unstable/process/ChildProcessSpawner.d.ts +21 -10
  1338. package/dist/unstable/process/ChildProcessSpawner.d.ts.map +1 -1
  1339. package/dist/unstable/process/ChildProcessSpawner.js +4 -2
  1340. package/dist/unstable/process/ChildProcessSpawner.js.map +1 -1
  1341. package/dist/unstable/process/index.js.map +1 -1
  1342. package/dist/unstable/reactivity/AsyncResult.d.ts +8 -8
  1343. package/dist/unstable/reactivity/AsyncResult.d.ts.map +1 -1
  1344. package/dist/unstable/reactivity/AsyncResult.js +14 -13
  1345. package/dist/unstable/reactivity/AsyncResult.js.map +1 -1
  1346. package/dist/unstable/reactivity/Atom.d.ts +131 -30
  1347. package/dist/unstable/reactivity/Atom.d.ts.map +1 -1
  1348. package/dist/unstable/reactivity/Atom.js +55 -43
  1349. package/dist/unstable/reactivity/Atom.js.map +1 -1
  1350. package/dist/unstable/reactivity/AtomHttpApi.d.ts +1 -1
  1351. package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
  1352. package/dist/unstable/reactivity/AtomHttpApi.js +4 -1
  1353. package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
  1354. package/dist/unstable/reactivity/AtomRef.js.map +1 -1
  1355. package/dist/unstable/reactivity/AtomRegistry.js +25 -4
  1356. package/dist/unstable/reactivity/AtomRegistry.js.map +1 -1
  1357. package/dist/unstable/reactivity/AtomRpc.d.ts +1 -1
  1358. package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
  1359. package/dist/unstable/reactivity/AtomRpc.js +4 -1
  1360. package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
  1361. package/dist/unstable/reactivity/Hydration.d.ts +1 -1
  1362. package/dist/unstable/reactivity/Hydration.js +1 -1
  1363. package/dist/unstable/reactivity/Hydration.js.map +1 -1
  1364. package/dist/unstable/reactivity/Reactivity.js +1 -1
  1365. package/dist/unstable/reactivity/Reactivity.js.map +1 -1
  1366. package/dist/unstable/reactivity/index.js.map +1 -1
  1367. package/dist/unstable/rpc/Rpc.d.ts +35 -33
  1368. package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
  1369. package/dist/unstable/rpc/Rpc.js +4 -2
  1370. package/dist/unstable/rpc/Rpc.js.map +1 -1
  1371. package/dist/unstable/rpc/RpcClient.d.ts +26 -12
  1372. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  1373. package/dist/unstable/rpc/RpcClient.js +41 -23
  1374. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  1375. package/dist/unstable/rpc/RpcClientError.js +2 -2
  1376. package/dist/unstable/rpc/RpcClientError.js.map +1 -1
  1377. package/dist/unstable/rpc/RpcGroup.d.ts +8 -8
  1378. package/dist/unstable/rpc/RpcGroup.js +2 -2
  1379. package/dist/unstable/rpc/RpcGroup.js.map +1 -1
  1380. package/dist/unstable/rpc/RpcMessage.d.ts +31 -30
  1381. package/dist/unstable/rpc/RpcMessage.d.ts.map +1 -1
  1382. package/dist/unstable/rpc/RpcMessage.js +6 -6
  1383. package/dist/unstable/rpc/RpcMessage.js.map +1 -1
  1384. package/dist/unstable/rpc/RpcMiddleware.d.ts +10 -10
  1385. package/dist/unstable/rpc/RpcMiddleware.js +1 -1
  1386. package/dist/unstable/rpc/RpcMiddleware.js.map +1 -1
  1387. package/dist/unstable/rpc/RpcSchema.d.ts +4 -4
  1388. package/dist/unstable/rpc/RpcSchema.js +3 -3
  1389. package/dist/unstable/rpc/RpcSchema.js.map +1 -1
  1390. package/dist/unstable/rpc/RpcSerialization.d.ts +58 -7
  1391. package/dist/unstable/rpc/RpcSerialization.d.ts.map +1 -1
  1392. package/dist/unstable/rpc/RpcSerialization.js +178 -97
  1393. package/dist/unstable/rpc/RpcSerialization.js.map +1 -1
  1394. package/dist/unstable/rpc/RpcServer.d.ts +13 -13
  1395. package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
  1396. package/dist/unstable/rpc/RpcServer.js +23 -18
  1397. package/dist/unstable/rpc/RpcServer.js.map +1 -1
  1398. package/dist/unstable/rpc/RpcTest.js.map +1 -1
  1399. package/dist/unstable/rpc/RpcWorker.d.ts +5 -5
  1400. package/dist/unstable/rpc/RpcWorker.js +4 -4
  1401. package/dist/unstable/rpc/RpcWorker.js.map +1 -1
  1402. package/dist/unstable/rpc/Utils.js.map +1 -1
  1403. package/dist/unstable/rpc/index.js.map +1 -1
  1404. package/dist/unstable/schema/Model.d.ts +66 -51
  1405. package/dist/unstable/schema/Model.d.ts.map +1 -1
  1406. package/dist/unstable/schema/Model.js +39 -52
  1407. package/dist/unstable/schema/Model.js.map +1 -1
  1408. package/dist/unstable/schema/VariantSchema.d.ts +11 -12
  1409. package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
  1410. package/dist/unstable/schema/VariantSchema.js +28 -17
  1411. package/dist/unstable/schema/VariantSchema.js.map +1 -1
  1412. package/dist/unstable/schema/index.js.map +1 -1
  1413. package/dist/unstable/socket/Socket.d.ts +12 -4
  1414. package/dist/unstable/socket/Socket.d.ts.map +1 -1
  1415. package/dist/unstable/socket/Socket.js +38 -17
  1416. package/dist/unstable/socket/Socket.js.map +1 -1
  1417. package/dist/unstable/socket/SocketServer.js.map +1 -1
  1418. package/dist/unstable/socket/index.js.map +1 -1
  1419. package/dist/unstable/sql/Migrator.d.ts +9 -1
  1420. package/dist/unstable/sql/Migrator.d.ts.map +1 -1
  1421. package/dist/unstable/sql/Migrator.js +15 -2
  1422. package/dist/unstable/sql/Migrator.js.map +1 -1
  1423. package/dist/unstable/sql/SqlClient.d.ts +1 -1
  1424. package/dist/unstable/sql/SqlClient.d.ts.map +1 -1
  1425. package/dist/unstable/sql/SqlClient.js +11 -7
  1426. package/dist/unstable/sql/SqlClient.js.map +1 -1
  1427. package/dist/unstable/sql/SqlConnection.js.map +1 -1
  1428. package/dist/unstable/sql/SqlError.d.ts +2 -2
  1429. package/dist/unstable/sql/SqlError.js +15 -15
  1430. package/dist/unstable/sql/SqlError.js.map +1 -1
  1431. package/dist/unstable/sql/SqlModel.d.ts +2 -2
  1432. package/dist/unstable/sql/SqlModel.js +2 -2
  1433. package/dist/unstable/sql/SqlModel.js.map +1 -1
  1434. package/dist/unstable/sql/SqlResolver.d.ts +5 -5
  1435. package/dist/unstable/sql/SqlResolver.d.ts.map +1 -1
  1436. package/dist/unstable/sql/SqlResolver.js +33 -26
  1437. package/dist/unstable/sql/SqlResolver.js.map +1 -1
  1438. package/dist/unstable/sql/SqlSchema.js.map +1 -1
  1439. package/dist/unstable/sql/SqlStream.js.map +1 -1
  1440. package/dist/unstable/sql/Statement.d.ts +6 -6
  1441. package/dist/unstable/sql/Statement.d.ts.map +1 -1
  1442. package/dist/unstable/sql/Statement.js +30 -27
  1443. package/dist/unstable/sql/Statement.js.map +1 -1
  1444. package/dist/unstable/sql/index.js.map +1 -1
  1445. package/dist/unstable/workers/Transferable.d.ts +1 -1
  1446. package/dist/unstable/workers/Transferable.js +1 -1
  1447. package/dist/unstable/workers/Transferable.js.map +1 -1
  1448. package/dist/unstable/workers/Worker.d.ts +2 -2
  1449. package/dist/unstable/workers/Worker.d.ts.map +1 -1
  1450. package/dist/unstable/workers/Worker.js +13 -14
  1451. package/dist/unstable/workers/Worker.js.map +1 -1
  1452. package/dist/unstable/workers/WorkerError.d.ts +7 -7
  1453. package/dist/unstable/workers/WorkerError.js +11 -11
  1454. package/dist/unstable/workers/WorkerError.js.map +1 -1
  1455. package/dist/unstable/workers/WorkerRunner.d.ts +1 -1
  1456. package/dist/unstable/workers/WorkerRunner.js +1 -1
  1457. package/dist/unstable/workers/WorkerRunner.js.map +1 -1
  1458. package/dist/unstable/workers/index.js.map +1 -1
  1459. package/dist/unstable/workflow/Activity.d.ts +2 -2
  1460. package/dist/unstable/workflow/Activity.js +2 -2
  1461. package/dist/unstable/workflow/Activity.js.map +1 -1
  1462. package/dist/unstable/workflow/DurableClock.d.ts +1 -1
  1463. package/dist/unstable/workflow/DurableClock.js +1 -1
  1464. package/dist/unstable/workflow/DurableClock.js.map +1 -1
  1465. package/dist/unstable/workflow/DurableDeferred.d.ts +10 -10
  1466. package/dist/unstable/workflow/DurableDeferred.d.ts.map +1 -1
  1467. package/dist/unstable/workflow/DurableDeferred.js +13 -8
  1468. package/dist/unstable/workflow/DurableDeferred.js.map +1 -1
  1469. package/dist/unstable/workflow/DurableQueue.d.ts +22 -20
  1470. package/dist/unstable/workflow/DurableQueue.d.ts.map +1 -1
  1471. package/dist/unstable/workflow/DurableQueue.js +22 -20
  1472. package/dist/unstable/workflow/DurableQueue.js.map +1 -1
  1473. package/dist/unstable/workflow/Workflow.d.ts +21 -21
  1474. package/dist/unstable/workflow/Workflow.d.ts.map +1 -1
  1475. package/dist/unstable/workflow/Workflow.js +13 -14
  1476. package/dist/unstable/workflow/Workflow.js.map +1 -1
  1477. package/dist/unstable/workflow/WorkflowEngine.d.ts +26 -3
  1478. package/dist/unstable/workflow/WorkflowEngine.d.ts.map +1 -1
  1479. package/dist/unstable/workflow/WorkflowEngine.js +72 -6
  1480. package/dist/unstable/workflow/WorkflowEngine.js.map +1 -1
  1481. package/dist/unstable/workflow/WorkflowProxy.d.ts +4 -2
  1482. package/dist/unstable/workflow/WorkflowProxy.d.ts.map +1 -1
  1483. package/dist/unstable/workflow/WorkflowProxy.js +4 -2
  1484. package/dist/unstable/workflow/WorkflowProxy.js.map +1 -1
  1485. package/dist/unstable/workflow/WorkflowProxyServer.js.map +1 -1
  1486. package/dist/unstable/workflow/index.js.map +1 -1
  1487. package/dist/unstable/workflow/internal/crypto.js.map +1 -1
  1488. package/package.json +10 -16
  1489. package/src/Array.ts +1068 -1070
  1490. package/src/BigDecimal.ts +433 -756
  1491. package/src/BigInt.ts +213 -269
  1492. package/src/Boolean.ts +146 -188
  1493. package/src/Brand.ts +4 -4
  1494. package/src/Cache.ts +469 -851
  1495. package/src/Cause.ts +167 -277
  1496. package/src/Channel.ts +982 -831
  1497. package/src/ChannelSchema.ts +1 -1
  1498. package/src/Chunk.ts +841 -1181
  1499. package/src/Clock.ts +181 -49
  1500. package/src/Combiner.ts +20 -33
  1501. package/src/Config.ts +642 -335
  1502. package/src/ConfigProvider.ts +267 -135
  1503. package/src/Console.ts +289 -39
  1504. package/src/Context.ts +336 -405
  1505. package/src/Cron.ts +271 -219
  1506. package/src/Crypto.ts +33 -63
  1507. package/src/Data.ts +63 -82
  1508. package/src/DateTime.ts +564 -660
  1509. package/src/Deferred.ts +259 -258
  1510. package/src/Duration.ts +244 -311
  1511. package/src/Effect.ts +3241 -3410
  1512. package/src/Encoding.ts +22 -40
  1513. package/src/Equal.ts +59 -41
  1514. package/src/Equivalence.ts +103 -105
  1515. package/src/ErrorReporter.ts +52 -28
  1516. package/src/ExecutionPlan.ts +91 -56
  1517. package/src/Exit.ts +116 -192
  1518. package/src/Fiber.ts +82 -149
  1519. package/src/FiberHandle.ts +155 -107
  1520. package/src/FiberMap.ts +225 -174
  1521. package/src/FiberSet.ts +125 -83
  1522. package/src/FileSystem.ts +156 -264
  1523. package/src/Filter.ts +61 -33
  1524. package/src/Formatter.ts +69 -76
  1525. package/src/Function.ts +119 -151
  1526. package/src/Graph.ts +416 -770
  1527. package/src/HKT.ts +12 -6
  1528. package/src/Hash.ts +52 -83
  1529. package/src/HashMap.ts +319 -411
  1530. package/src/HashRing.ts +1 -0
  1531. package/src/HashSet.ts +177 -284
  1532. package/src/Inspectable.ts +22 -20
  1533. package/src/Iterable.ts +633 -797
  1534. package/src/JsonPatch.ts +60 -113
  1535. package/src/JsonPointer.ts +8 -8
  1536. package/src/JsonSchema.ts +408 -251
  1537. package/src/Latch.ts +23 -35
  1538. package/src/Layer.ts +369 -268
  1539. package/src/LayerMap.ts +49 -29
  1540. package/src/LayerRef.ts +6 -2
  1541. package/src/LogLevel.ts +114 -214
  1542. package/src/Logger.ts +349 -701
  1543. package/src/ManagedRuntime.ts +20 -5
  1544. package/src/Match.ts +217 -252
  1545. package/src/Metric.ts +520 -1092
  1546. package/src/MutableHashMap.ts +218 -255
  1547. package/src/MutableHashSet.ts +84 -89
  1548. package/src/MutableList.ts +77 -370
  1549. package/src/MutableRef.ts +420 -243
  1550. package/src/Newtype.ts +21 -14
  1551. package/src/NonEmptyIterable.ts +7 -137
  1552. package/src/Number.ts +196 -233
  1553. package/src/Optic.ts +303 -441
  1554. package/src/Option.ts +449 -813
  1555. package/src/Order.ts +109 -109
  1556. package/src/Ordering.ts +20 -23
  1557. package/src/PartitionedSemaphore.ts +1 -4
  1558. package/src/Path.ts +38 -41
  1559. package/src/Pipeable.ts +6 -5
  1560. package/src/PlatformError.ts +4 -4
  1561. package/src/Pool.ts +4 -2
  1562. package/src/Predicate.ts +200 -181
  1563. package/src/PrimaryKey.ts +7 -7
  1564. package/src/PubSub.ts +526 -552
  1565. package/src/Pull.ts +24 -18
  1566. package/src/Queue.ts +204 -165
  1567. package/src/Random.ts +49 -74
  1568. package/src/RcMap.ts +121 -63
  1569. package/src/RcRef.ts +24 -13
  1570. package/src/Record.ts +387 -487
  1571. package/src/Redactable.ts +10 -3
  1572. package/src/Redacted.ts +25 -25
  1573. package/src/Reducer.ts +8 -15
  1574. package/src/Ref.ts +221 -361
  1575. package/src/References.ts +102 -214
  1576. package/src/RegExp.ts +10 -14
  1577. package/src/Request.ts +36 -28
  1578. package/src/RequestResolver.ts +202 -91
  1579. package/src/Result.ts +314 -485
  1580. package/src/Runtime.ts +50 -75
  1581. package/src/Schedule.ts +311 -1737
  1582. package/src/Scheduler.ts +20 -7
  1583. package/src/Schema.ts +3475 -1913
  1584. package/src/SchemaAST.ts +902 -573
  1585. package/src/SchemaGetter.ts +351 -233
  1586. package/src/SchemaIssue.ts +367 -334
  1587. package/src/SchemaParser.ts +254 -148
  1588. package/src/SchemaRepresentation.ts +732 -3414
  1589. package/src/SchemaTransformation.ts +186 -97
  1590. package/src/Scope.ts +123 -151
  1591. package/src/ScopedCache.ts +1 -1
  1592. package/src/ScopedRef.ts +6 -4
  1593. package/src/Semaphore.ts +157 -54
  1594. package/src/Sink.ts +129 -114
  1595. package/src/Stdio.ts +24 -5
  1596. package/src/Stream.ts +2745 -3173
  1597. package/src/String.ts +275 -312
  1598. package/src/Struct.ts +114 -118
  1599. package/src/SubscriptionRef.ts +284 -252
  1600. package/src/Symbol.ts +3 -3
  1601. package/src/SynchronizedRef.ts +1 -1
  1602. package/src/Terminal.ts +3 -3
  1603. package/src/Tracer.ts +102 -55
  1604. package/src/Trie.ts +287 -679
  1605. package/src/Tuple.ts +99 -131
  1606. package/src/TxChunk.ts +201 -121
  1607. package/src/TxDeferred.ts +62 -46
  1608. package/src/TxHashMap.ts +645 -799
  1609. package/src/TxHashSet.ts +443 -356
  1610. package/src/TxPriorityQueue.ts +130 -98
  1611. package/src/TxPubSub.ts +107 -80
  1612. package/src/TxQueue.ts +215 -184
  1613. package/src/TxReentrantLock.ts +136 -101
  1614. package/src/TxRef.ts +51 -32
  1615. package/src/TxSemaphore.ts +129 -95
  1616. package/src/TxSubscriptionRef.ts +97 -70
  1617. package/src/Types.ts +127 -70
  1618. package/src/Unify.ts +45 -65
  1619. package/src/Utils.ts +23 -16
  1620. package/src/index.ts +0 -10
  1621. package/src/internal/core.ts +6 -5
  1622. package/src/internal/dateTime.ts +7 -1
  1623. package/src/internal/effect.ts +319 -149
  1624. package/src/internal/executionPlan.ts +106 -10
  1625. package/src/internal/hashMap.ts +20 -14
  1626. package/src/internal/matcher.ts +3 -3
  1627. package/src/internal/persistence.ts +2 -0
  1628. package/src/internal/rcRef.ts +24 -16
  1629. package/src/internal/record.ts +11 -7
  1630. package/src/internal/references.ts +3 -7
  1631. package/src/internal/schedule.ts +4 -4
  1632. package/src/internal/schema/annotations.ts +48 -1
  1633. package/src/internal/schema/fromJsonSchemaDocument.ts +977 -0
  1634. package/src/internal/schema/fromRepresentation.ts +339 -0
  1635. package/src/internal/schema/parser.ts +22 -0
  1636. package/src/internal/schema/schema.ts +46 -63
  1637. package/src/internal/schema/{arbitrary.ts → toArbitrary.ts} +9 -81
  1638. package/src/internal/schema/toCodeDocument.ts +572 -0
  1639. package/src/internal/schema/{equivalence.ts → toEquivalence.ts} +12 -7
  1640. package/src/internal/schema/toJsonSchemaDocument.ts +549 -0
  1641. package/src/internal/schema/toRepresentation.ts +404 -0
  1642. package/src/internal/stackTraceLimit.ts +3 -7
  1643. package/src/internal/trie.ts +21 -12
  1644. package/src/internal/uuid.ts +51 -0
  1645. package/src/testing/FastCheck.ts +8 -7
  1646. package/src/testing/TestClock.ts +103 -36
  1647. package/src/testing/TestConsole.ts +32 -31
  1648. package/src/testing/TestSchema.ts +40 -40
  1649. package/src/unstable/ai/AiError.ts +119 -141
  1650. package/src/unstable/ai/AnthropicStructuredOutput.ts +103 -334
  1651. package/src/unstable/ai/Chat.ts +133 -98
  1652. package/src/unstable/ai/EmbeddingModel.ts +1 -1
  1653. package/src/unstable/ai/IdGenerator.ts +32 -28
  1654. package/src/unstable/ai/LanguageModel.ts +141 -97
  1655. package/src/unstable/ai/McpProtocol.ts +137 -0
  1656. package/src/unstable/ai/McpSchema.ts +199 -100
  1657. package/src/unstable/ai/McpServer.ts +1360 -455
  1658. package/src/unstable/ai/Model.ts +9 -20
  1659. package/src/unstable/ai/OpenAiStructuredOutput.ts +231 -396
  1660. package/src/unstable/ai/Prompt.ts +212 -63
  1661. package/src/unstable/ai/Response.ts +52 -38
  1662. package/src/unstable/ai/Telemetry.ts +46 -13
  1663. package/src/unstable/ai/Tokenizer.ts +14 -3
  1664. package/src/unstable/ai/Tool.ts +81 -48
  1665. package/src/unstable/ai/Toolkit.ts +45 -15
  1666. package/src/unstable/ai/index.ts +5 -0
  1667. package/src/unstable/ai/internal/codec-transformer.ts +13 -7
  1668. package/src/unstable/ai/internal/mcpCore.ts +457 -0
  1669. package/src/unstable/ai/internal/mcpProtocol/v2024_11_05.ts +321 -0
  1670. package/src/unstable/ai/internal/mcpProtocol/v2025_03_26.ts +347 -0
  1671. package/src/unstable/ai/internal/mcpProtocol/v2025_06_18.ts +361 -0
  1672. package/src/unstable/ai/internal/mcpProtocol.ts +336 -0
  1673. package/src/unstable/ai/internal/mcpProtocolRegistry.ts +102 -0
  1674. package/src/unstable/ai/internal/mcpSchema/v2024_11_05.ts +521 -0
  1675. package/src/unstable/ai/internal/mcpSchema/v2025_03_26.ts +204 -0
  1676. package/src/unstable/ai/internal/mcpSchema/v2025_06_18.ts +404 -0
  1677. package/src/unstable/ai/internal/structured-output.ts +453 -0
  1678. package/src/unstable/cli/Argument.ts +279 -72
  1679. package/src/unstable/cli/CliError.ts +159 -91
  1680. package/src/unstable/cli/CliOutput.ts +44 -58
  1681. package/src/unstable/cli/Command.ts +764 -124
  1682. package/src/unstable/cli/Flag.ts +418 -138
  1683. package/src/unstable/cli/GlobalFlag.ts +1 -1
  1684. package/src/unstable/cli/HelpDoc.ts +12 -4
  1685. package/src/unstable/cli/Param.ts +336 -100
  1686. package/src/unstable/cli/Primitive.ts +383 -156
  1687. package/src/unstable/cli/Prompt.ts +64 -34
  1688. package/src/unstable/cli/internal/ansi.ts +2 -2
  1689. package/src/unstable/cli/internal/command.ts +28 -15
  1690. package/src/unstable/cli/internal/completions/bash.ts +59 -9
  1691. package/src/unstable/cli/internal/completions/descriptor.ts +14 -20
  1692. package/src/unstable/cli/internal/completions/fish.ts +5 -7
  1693. package/src/unstable/cli/internal/config.ts +8 -10
  1694. package/src/unstable/cli/internal/help.ts +4 -2
  1695. package/src/unstable/cli/internal/lexer.ts +8 -2
  1696. package/src/unstable/cli/internal/parser.ts +5 -5
  1697. package/src/unstable/cli/internal/wizard.ts +2 -2
  1698. package/src/unstable/cluster/ClusterError.ts +10 -8
  1699. package/src/unstable/cluster/ClusterSchema.ts +8 -8
  1700. package/src/unstable/cluster/ClusterWorkflowEngine.ts +65 -39
  1701. package/src/unstable/cluster/Entity.ts +23 -19
  1702. package/src/unstable/cluster/EntityProxy.ts +16 -7
  1703. package/src/unstable/cluster/EntityResource.ts +5 -5
  1704. package/src/unstable/cluster/Envelope.ts +5 -4
  1705. package/src/unstable/cluster/HttpRunner.ts +6 -4
  1706. package/src/unstable/cluster/K8sHttpClient.ts +2 -2
  1707. package/src/unstable/cluster/K8sTypes.ts +2467 -0
  1708. package/src/unstable/cluster/Message.ts +9 -9
  1709. package/src/unstable/cluster/MessageStorage.ts +106 -33
  1710. package/src/unstable/cluster/Reply.ts +26 -7
  1711. package/src/unstable/cluster/Runner.ts +1 -1
  1712. package/src/unstable/cluster/RunnerAddress.ts +1 -1
  1713. package/src/unstable/cluster/RunnerHealth.ts +1 -1
  1714. package/src/unstable/cluster/RunnerServer.ts +45 -18
  1715. package/src/unstable/cluster/RunnerStorage.ts +11 -9
  1716. package/src/unstable/cluster/Runners.ts +48 -26
  1717. package/src/unstable/cluster/ShardId.ts +1 -1
  1718. package/src/unstable/cluster/Sharding.ts +360 -65
  1719. package/src/unstable/cluster/ShardingConfig.ts +46 -4
  1720. package/src/unstable/cluster/SingleRunner.ts +4 -2
  1721. package/src/unstable/cluster/SingletonAddress.ts +1 -1
  1722. package/src/unstable/cluster/Snowflake.ts +8 -8
  1723. package/src/unstable/cluster/SqlMessageStorage.ts +212 -60
  1724. package/src/unstable/cluster/SqlRunnerStorage.ts +223 -133
  1725. package/src/unstable/cluster/index.ts +5 -0
  1726. package/src/unstable/cluster/internal/entityManager.ts +72 -27
  1727. package/src/unstable/cluster/internal/entityReaper.ts +2 -3
  1728. package/src/unstable/cluster/internal/resourceMap.ts +13 -2
  1729. package/src/unstable/cluster/internal/resourceRef.ts +27 -5
  1730. package/src/unstable/cluster/internal/shardLock.ts +9 -0
  1731. package/src/unstable/devtools/DevToolsClient.ts +3 -2
  1732. package/src/unstable/devtools/DevToolsSchema.ts +10 -5
  1733. package/src/unstable/encoding/Ini.ts +174 -0
  1734. package/src/unstable/encoding/Msgpack.ts +61 -40
  1735. package/src/unstable/encoding/Ndjson.ts +9 -1
  1736. package/src/unstable/encoding/Sse.ts +109 -37
  1737. package/src/unstable/encoding/Toml.ts +504 -0
  1738. package/src/unstable/encoding/Yaml.ts +541 -0
  1739. package/src/unstable/encoding/index.ts +15 -0
  1740. package/src/unstable/eventlog/Event.ts +20 -20
  1741. package/src/unstable/eventlog/EventGroup.ts +4 -4
  1742. package/src/unstable/eventlog/EventJournal.ts +33 -25
  1743. package/src/unstable/eventlog/EventLog.ts +24 -14
  1744. package/src/unstable/eventlog/EventLogEncryption.ts +17 -18
  1745. package/src/unstable/eventlog/EventLogMessage.ts +15 -9
  1746. package/src/unstable/eventlog/EventLogRemote.ts +5 -5
  1747. package/src/unstable/eventlog/EventLogServer.ts +41 -7
  1748. package/src/unstable/eventlog/EventLogServerEncrypted.ts +16 -8
  1749. package/src/unstable/eventlog/EventLogServerUnencrypted.ts +15 -7
  1750. package/src/unstable/eventlog/EventLogSessionAuth.ts +1 -1
  1751. package/src/unstable/eventlog/SqlEventJournal.ts +9 -7
  1752. package/src/unstable/eventlog/SqlEventLogServerEncrypted.ts +1 -1
  1753. package/src/unstable/eventlog/SqlEventLogServerUnencrypted.ts +6 -3
  1754. package/src/unstable/http/Cookies.ts +64 -45
  1755. package/src/unstable/http/Etag.ts +1 -1
  1756. package/src/unstable/http/FetchHttpClient.ts +4 -2
  1757. package/src/unstable/http/FindMyWay/internal/queryString.ts +420 -0
  1758. package/src/unstable/http/FindMyWay/internal/router.ts +950 -0
  1759. package/src/unstable/http/FindMyWay.ts +65 -6
  1760. package/src/unstable/http/Headers.ts +10 -10
  1761. package/src/unstable/http/HttpBody.ts +20 -5
  1762. package/src/unstable/http/HttpClient.ts +215 -78
  1763. package/src/unstable/http/HttpClientError.ts +1 -1
  1764. package/src/unstable/http/HttpClientRequest.ts +59 -12
  1765. package/src/unstable/http/HttpClientResponse.ts +5 -21
  1766. package/src/unstable/http/HttpEffect.ts +27 -26
  1767. package/src/unstable/http/HttpMethod.ts +6 -9
  1768. package/src/unstable/http/HttpMiddleware.ts +202 -39
  1769. package/src/unstable/http/HttpPlatform.ts +129 -6
  1770. package/src/unstable/http/HttpRouter.ts +110 -102
  1771. package/src/unstable/http/HttpServer.ts +13 -13
  1772. package/src/unstable/http/HttpServerError.ts +2 -2
  1773. package/src/unstable/http/HttpServerRequest.ts +31 -17
  1774. package/src/unstable/http/HttpServerResponse.ts +38 -6
  1775. package/src/unstable/http/HttpStaticServer.ts +35 -7
  1776. package/src/unstable/http/HttpStatus.ts +100 -0
  1777. package/src/unstable/http/Multipart.ts +67 -36
  1778. package/src/unstable/http/MultipartParser/HeadersParser.ts +68 -0
  1779. package/src/unstable/http/MultipartParser/Search.ts +17 -0
  1780. package/src/unstable/http/MultipartParser/internal/contentType.ts +103 -0
  1781. package/src/unstable/http/MultipartParser/internal/headers.ts +244 -0
  1782. package/src/unstable/http/MultipartParser/internal/multipart.ts +279 -0
  1783. package/src/unstable/http/MultipartParser/internal/search.ts +167 -0
  1784. package/src/unstable/http/MultipartParser.ts +115 -0
  1785. package/src/unstable/http/Template.ts +7 -6
  1786. package/src/unstable/http/Url.ts +33 -63
  1787. package/src/unstable/http/UrlParams.ts +27 -32
  1788. package/src/unstable/http/index.ts +6 -1
  1789. package/src/unstable/http/internal/compression.ts +196 -0
  1790. package/src/unstable/http/internal/httpBody.ts +15 -0
  1791. package/src/unstable/httpapi/HttpApi.ts +10 -11
  1792. package/src/unstable/httpapi/HttpApiBuilder.ts +154 -33
  1793. package/src/unstable/httpapi/HttpApiClient.ts +142 -61
  1794. package/src/unstable/httpapi/HttpApiEndpoint.ts +159 -71
  1795. package/src/unstable/httpapi/HttpApiError.ts +46 -52
  1796. package/src/unstable/httpapi/HttpApiGroup.ts +17 -17
  1797. package/src/unstable/httpapi/HttpApiMiddleware.ts +71 -24
  1798. package/src/unstable/httpapi/HttpApiScalar.ts +0 -12
  1799. package/src/unstable/httpapi/HttpApiSchema.ts +362 -73
  1800. package/src/unstable/httpapi/OpenApi.ts +153 -62
  1801. package/src/unstable/observability/OtlpExporter.ts +130 -12
  1802. package/src/unstable/observability/OtlpLogger.ts +8 -6
  1803. package/src/unstable/observability/OtlpMetrics.ts +42 -21
  1804. package/src/unstable/observability/OtlpResource.ts +26 -17
  1805. package/src/unstable/observability/OtlpTracer.ts +9 -5
  1806. package/src/unstable/observability/PrometheusMetrics.ts +13 -4
  1807. package/src/unstable/observability/internal/otlpEnv.ts +1 -1
  1808. package/src/unstable/observability/internal/protobuf.ts +3 -0
  1809. package/src/unstable/persistence/KeyValueStore.ts +72 -49
  1810. package/src/unstable/persistence/Persistable.ts +11 -10
  1811. package/src/unstable/persistence/PersistedQueue.ts +129 -108
  1812. package/src/unstable/persistence/Persistence.ts +153 -26
  1813. package/src/unstable/persistence/RateLimiter.ts +79 -45
  1814. package/src/unstable/persistence/Redis.ts +5 -5
  1815. package/src/unstable/process/ChildProcess.ts +72 -21
  1816. package/src/unstable/process/ChildProcessSpawner.ts +22 -11
  1817. package/src/unstable/reactivity/AsyncResult.ts +23 -18
  1818. package/src/unstable/reactivity/Atom.ts +170 -56
  1819. package/src/unstable/reactivity/AtomHttpApi.ts +5 -4
  1820. package/src/unstable/reactivity/AtomRegistry.ts +25 -4
  1821. package/src/unstable/reactivity/AtomRpc.ts +5 -4
  1822. package/src/unstable/reactivity/Hydration.ts +1 -1
  1823. package/src/unstable/reactivity/Reactivity.ts +1 -1
  1824. package/src/unstable/rpc/Rpc.ts +35 -33
  1825. package/src/unstable/rpc/RpcClient.ts +66 -30
  1826. package/src/unstable/rpc/RpcClientError.ts +2 -2
  1827. package/src/unstable/rpc/RpcGroup.ts +9 -9
  1828. package/src/unstable/rpc/RpcMessage.ts +31 -30
  1829. package/src/unstable/rpc/RpcMiddleware.ts +10 -10
  1830. package/src/unstable/rpc/RpcSchema.ts +4 -4
  1831. package/src/unstable/rpc/RpcSerialization.ts +168 -69
  1832. package/src/unstable/rpc/RpcServer.ts +28 -22
  1833. package/src/unstable/rpc/RpcWorker.ts +5 -5
  1834. package/src/unstable/schema/Model.ts +60 -58
  1835. package/src/unstable/schema/VariantSchema.ts +51 -43
  1836. package/src/unstable/socket/Socket.ts +42 -19
  1837. package/src/unstable/sql/Migrator.ts +22 -9
  1838. package/src/unstable/sql/SqlClient.ts +71 -60
  1839. package/src/unstable/sql/SqlError.ts +15 -15
  1840. package/src/unstable/sql/SqlModel.ts +2 -2
  1841. package/src/unstable/sql/SqlResolver.ts +44 -33
  1842. package/src/unstable/sql/Statement.ts +44 -37
  1843. package/src/unstable/workers/Transferable.ts +1 -1
  1844. package/src/unstable/workers/Worker.ts +15 -16
  1845. package/src/unstable/workers/WorkerError.ts +12 -12
  1846. package/src/unstable/workers/WorkerRunner.ts +1 -1
  1847. package/src/unstable/workflow/Activity.ts +2 -2
  1848. package/src/unstable/workflow/DurableClock.ts +1 -1
  1849. package/src/unstable/workflow/DurableDeferred.ts +18 -13
  1850. package/src/unstable/workflow/DurableQueue.ts +22 -20
  1851. package/src/unstable/workflow/Workflow.ts +23 -26
  1852. package/src/unstable/workflow/WorkflowEngine.ts +111 -8
  1853. package/src/unstable/workflow/WorkflowProxy.ts +4 -2
  1854. package/dist/SchemaError.d.ts +0 -53
  1855. package/dist/SchemaError.d.ts.map +0 -1
  1856. package/dist/SchemaError.js +0 -61
  1857. package/dist/SchemaError.js.map +0 -1
  1858. package/dist/SchemaUtils.d.ts +0 -28
  1859. package/dist/SchemaUtils.d.ts.map +0 -1
  1860. package/dist/SchemaUtils.js +0 -45
  1861. package/dist/SchemaUtils.js.map +0 -1
  1862. package/dist/internal/schema/arbitrary.d.ts +0 -5
  1863. package/dist/internal/schema/arbitrary.d.ts.map +0 -1
  1864. package/dist/internal/schema/arbitrary.js.map +0 -1
  1865. package/dist/internal/schema/equivalence.d.ts +0 -2
  1866. package/dist/internal/schema/equivalence.d.ts.map +0 -1
  1867. package/dist/internal/schema/equivalence.js.map +0 -1
  1868. package/dist/internal/schema/representation.d.ts +0 -2
  1869. package/dist/internal/schema/representation.d.ts.map +0 -1
  1870. package/dist/internal/schema/representation.js +0 -865
  1871. package/dist/internal/schema/representation.js.map +0 -1
  1872. package/dist/internal/version.d.ts +0 -3
  1873. package/dist/internal/version.d.ts.map +0 -1
  1874. package/dist/internal/version.js +0 -2
  1875. package/dist/internal/version.js.map +0 -1
  1876. package/dist/unstable/http/Multipasta/HeadersParser.d.ts +0 -14
  1877. package/dist/unstable/http/Multipasta/HeadersParser.d.ts.map +0 -1
  1878. package/dist/unstable/http/Multipasta/HeadersParser.js +0 -14
  1879. package/dist/unstable/http/Multipasta/HeadersParser.js.map +0 -1
  1880. package/dist/unstable/http/Multipasta/Node.d.ts +0 -14
  1881. package/dist/unstable/http/Multipasta/Node.d.ts.map +0 -1
  1882. package/dist/unstable/http/Multipasta/Node.js +0 -14
  1883. package/dist/unstable/http/Multipasta/Node.js.map +0 -1
  1884. package/dist/unstable/http/Multipasta/Search.d.ts +0 -14
  1885. package/dist/unstable/http/Multipasta/Search.d.ts.map +0 -1
  1886. package/dist/unstable/http/Multipasta/Search.js +0 -14
  1887. package/dist/unstable/http/Multipasta/Search.js.map +0 -1
  1888. package/dist/unstable/http/Multipasta/Web.d.ts +0 -14
  1889. package/dist/unstable/http/Multipasta/Web.d.ts.map +0 -1
  1890. package/dist/unstable/http/Multipasta/Web.js +0 -14
  1891. package/dist/unstable/http/Multipasta/Web.js.map +0 -1
  1892. package/dist/unstable/http/Multipasta.d.ts +0 -15
  1893. package/dist/unstable/http/Multipasta.d.ts.map +0 -1
  1894. package/dist/unstable/http/Multipasta.js +0 -15
  1895. package/dist/unstable/http/Multipasta.js.map +0 -1
  1896. package/src/SchemaError.ts +0 -64
  1897. package/src/SchemaUtils.ts +0 -51
  1898. package/src/internal/schema/representation.ts +0 -795
  1899. package/src/internal/version.ts +0 -2
  1900. package/src/unstable/http/Multipasta/HeadersParser.ts +0 -14
  1901. package/src/unstable/http/Multipasta/Node.ts +0 -14
  1902. package/src/unstable/http/Multipasta/Search.ts +0 -14
  1903. package/src/unstable/http/Multipasta/Web.ts +0 -14
  1904. package/src/unstable/http/Multipasta.ts +0 -15
@@ -13,20 +13,23 @@
13
13
  import * as Arr from "../../Array.ts"
14
14
  import * as Cause from "../../Cause.ts"
15
15
  import * as Context from "../../Context.ts"
16
+ import * as Data from "../../Data.ts"
16
17
  import * as Effect from "../../Effect.ts"
17
18
  import * as Exit from "../../Exit.ts"
18
19
  import * as Fiber from "../../Fiber.ts"
19
20
  import * as Layer from "../../Layer.ts"
21
+ import * as LogLevel from "../../LogLevel.ts"
20
22
  import * as Option from "../../Option.ts"
23
+ import * as Predicate from "../../Predicate.ts"
21
24
  import * as Queue from "../../Queue.ts"
22
25
  import * as RcMap from "../../RcMap.ts"
23
26
  import { CurrentLogLevel } from "../../References.ts"
27
+ import * as Result from "../../Result.ts"
24
28
  import * as Schema from "../../Schema.ts"
25
29
  import * as SchemaAST from "../../SchemaAST.ts"
26
30
  import * as Sink from "../../Sink.ts"
27
31
  import type { Stdio } from "../../Stdio.ts"
28
32
  import * as Stream from "../../Stream.ts"
29
- import type * as Types from "../../Types.ts"
30
33
  import * as FindMyWay from "../http/FindMyWay.ts"
31
34
  import * as Headers from "../http/Headers.ts"
32
35
  import { appendPreResponseHandlerUnsafe } from "../http/HttpEffect.ts"
@@ -35,42 +38,46 @@ import * as HttpServerRequest from "../http/HttpServerRequest.ts"
35
38
  import * as HttpServerResponse from "../http/HttpServerResponse.ts"
36
39
  import * as Rpc from "../rpc/Rpc.ts"
37
40
  import * as RpcClient from "../rpc/RpcClient.ts"
38
- import type * as RpcGroup from "../rpc/RpcGroup.ts"
41
+ import * as RpcGroup from "../rpc/RpcGroup.ts"
39
42
  import * as RpcMessage from "../rpc/RpcMessage.ts"
40
43
  import * as RpcSerialization from "../rpc/RpcSerialization.ts"
41
44
  import * as RpcServer from "../rpc/RpcServer.ts"
45
+ import * as AiError from "./AiError.ts"
46
+ import * as McpCore from "./internal/mcpCore.ts"
47
+ import * as McpProtocolInternal from "./internal/mcpProtocol.ts"
48
+ import * as McpProtocolRegistry from "./internal/mcpProtocolRegistry.ts"
49
+ import type * as McpProtocol from "./McpProtocol.ts"
50
+ import * as McpSchema from "./McpSchema.ts"
42
51
  import {
43
52
  CallToolResult,
44
- ClientNotificationRpcs,
45
- ClientRpcs,
46
- CompleteResult,
47
53
  Elicit,
48
54
  ElicitationDeclined,
49
55
  EnabledWhen,
50
56
  GetPromptResult,
57
+ Initialize,
51
58
  InternalError,
52
59
  InvalidParams,
60
+ InvalidRequest,
53
61
  isParam,
54
- ListPromptsResult,
55
- ListResourcesResult,
56
- ListResourceTemplatesResult,
57
- ListToolsResult,
58
62
  McpServerClient,
59
63
  McpServerClientMiddleware,
64
+ MethodNotFound,
65
+ Ping,
60
66
  Prompt,
61
67
  Resource,
62
68
  ResourceTemplate,
63
69
  ServerNotificationRpcs,
64
- ServerRequestRpcs,
65
70
  TextContent,
66
- Tool as McpTool
71
+ Tool as McpTool,
72
+ ToolJsonSchema
67
73
  } from "./McpSchema.ts"
68
74
  import type {
69
75
  CallTool,
70
76
  ClientCapabilities,
71
77
  Complete,
78
+ CompleteResult,
72
79
  GetPrompt,
73
- Initialize,
80
+ McpErrorBase,
74
81
  Param,
75
82
  PromptArgument,
76
83
  PromptMessage,
@@ -80,6 +87,71 @@ import type {
80
87
  import * as Tool from "./Tool.ts"
81
88
  import type * as Toolkit from "./Toolkit.ts"
82
89
 
90
+ type CompletionContext = typeof Complete.payloadSchema.Type["context"]
91
+
92
+ const internalState = new WeakMap<object, {
93
+ readonly core: McpCore.McpCore
94
+ readonly notifications: Queue.Dequeue<McpCore.ServerNotification>
95
+ }>()
96
+ type ServerExtensions = NonNullable<typeof ServerCapabilities.Type["extensions"]>
97
+ type ServerNotificationRequest<
98
+ R extends Rpc.Any = RpcGroup.Rpcs<typeof ServerNotificationRpcs>
99
+ > = R extends Rpc.Any ? RpcMessage.Request<R> : never
100
+
101
+ const validateStructuredContent = (
102
+ toolName: string,
103
+ value: unknown
104
+ ): Effect.Effect<Schema.Json, McpCore.ToolResultProjectionError> =>
105
+ Schema.is(Schema.Json)(value)
106
+ ? Effect.succeed(value)
107
+ : Effect.fail(
108
+ new McpCore.ToolResultProjectionError({
109
+ name: toolName,
110
+ message: `Tool '${toolName}' returned structured content that is not valid JSON`
111
+ })
112
+ )
113
+
114
+ const toInternalServerNotification = (
115
+ message: ServerNotificationRequest
116
+ ): McpCore.ServerNotification | undefined => {
117
+ switch (message.tag) {
118
+ case "notifications/cancelled":
119
+ return McpCore.ServerNotification.Cancelled({
120
+ requestId: message.payload.requestId,
121
+ reason: message.payload.reason,
122
+ metadata: message.payload._meta
123
+ })
124
+ case "notifications/progress":
125
+ return McpCore.ServerNotification.Progress({
126
+ progressToken: message.payload.progressToken,
127
+ progress: message.payload.progress,
128
+ total: message.payload.total,
129
+ message: message.payload.message,
130
+ metadata: message.payload._meta
131
+ })
132
+ case "notifications/message":
133
+ return McpCore.ServerNotification.LoggingMessage({
134
+ level: message.payload.level,
135
+ logger: message.payload.logger,
136
+ data: message.payload.data,
137
+ metadata: message.payload._meta
138
+ })
139
+ case "notifications/resources/updated":
140
+ return McpCore.ServerNotification.ResourceUpdated({
141
+ uri: message.payload.uri,
142
+ metadata: message.payload._meta
143
+ })
144
+ case "notifications/resources/list_changed":
145
+ return McpCore.ServerNotification.ResourcesChanged({ metadata: message.payload?._meta })
146
+ case "notifications/tools/list_changed":
147
+ return McpCore.ServerNotification.ToolsChanged({ metadata: message.payload?._meta })
148
+ case "notifications/prompts/list_changed":
149
+ return McpCore.ServerNotification.PromptsChanged({ metadata: message.payload?._meta })
150
+ default:
151
+ return undefined
152
+ }
153
+ }
154
+
83
155
  /**
84
156
  * Service that stores and serves an MCP server's registered tools, resources,
85
157
  * prompts, completions, and outgoing notifications.
@@ -89,14 +161,12 @@ import type * as Toolkit from "./Toolkit.ts"
89
161
  * Handlers use this service to register capabilities and resolve incoming MCP
90
162
  * requests.
91
163
  *
92
- * @category server
164
+ * @category services
93
165
  * @since 4.0.0
94
166
  */
95
167
  export class McpServer extends Context.Service<McpServer, {
96
168
  readonly notifications: RpcClient.RpcClient<RpcGroup.Rpcs<typeof ServerNotificationRpcs>>
97
- readonly notificationsQueue: Queue.Dequeue<RpcMessage.Request<any>>
98
169
  readonly initializedClients: Set<number>
99
-
100
170
  readonly tools: ReadonlyArray<{
101
171
  readonly tool: McpTool
102
172
  readonly annotations: Context.Context<never>
@@ -104,7 +174,7 @@ export class McpServer extends Context.Service<McpServer, {
104
174
  readonly addTool: (options: {
105
175
  readonly tool: McpTool
106
176
  readonly annotations: Context.Context<never>
107
- readonly handle: (payload: any) => Effect.Effect<CallToolResult, never, McpServerClient>
177
+ readonly handle: (payload: any) => Effect.Effect<CallToolResult, InternalError | InvalidParams, McpServerClient>
108
178
  }) => Effect.Effect<void>
109
179
  readonly callTool: (
110
180
  requests: typeof CallTool.payloadSchema.Type
@@ -129,17 +199,27 @@ export class McpServer extends Context.Service<McpServer, {
129
199
  readonly template: ResourceTemplate
130
200
  readonly annotations: Context.Context<never>
131
201
  readonly routerPath: string
132
- readonly completions: Record<string, (input: string) => Effect.Effect<CompleteResult, InternalError>>
202
+ readonly completions: Record<
203
+ string,
204
+ (
205
+ input: string,
206
+ context: CompletionContext
207
+ ) => Effect.Effect<CompleteResult, InternalError>
208
+ >
133
209
  readonly handle: (
134
210
  uri: string,
135
211
  params: Array<string>
136
- ) => Effect.Effect<typeof ReadResourceResult.Type, InvalidParams | InternalError, McpServerClient>
212
+ ) => Effect.Effect<
213
+ typeof ReadResourceResult.Type,
214
+ InvalidParams | InternalError,
215
+ McpServerClient
216
+ >
137
217
  }
138
218
  ) => Effect.Effect<void>
139
219
 
140
220
  readonly findResource: (
141
221
  uri: string
142
- ) => Effect.Effect<typeof ReadResourceResult.Type, InvalidParams | InternalError, McpServerClient>
222
+ ) => Effect.Effect<typeof ReadResourceResult.Type, McpErrorBase | InvalidParams | InternalError, McpServerClient>
143
223
 
144
224
  readonly prompts: ReadonlyArray<{
145
225
  readonly prompt: Prompt
@@ -150,7 +230,10 @@ export class McpServer extends Context.Service<McpServer, {
150
230
  readonly annotations: Context.Context<never>
151
231
  readonly completions: Record<
152
232
  string,
153
- (input: string) => Effect.Effect<CompleteResult, InternalError, McpServerClient>
233
+ (
234
+ input: string,
235
+ context: CompletionContext
236
+ ) => Effect.Effect<CompleteResult, InternalError, McpServerClient>
154
237
  >
155
238
  readonly handle: (
156
239
  params: Record<string, string>
@@ -162,7 +245,7 @@ export class McpServer extends Context.Service<McpServer, {
162
245
 
163
246
  readonly completion: (
164
247
  complete: typeof Complete.payloadSchema.Type
165
- ) => Effect.Effect<CompleteResult, InternalError, McpServerClient>
248
+ ) => Effect.Effect<CompleteResult, InvalidParams | InternalError, McpServerClient>
166
249
  }>()("effect/ai/McpServer") {
167
250
  /**
168
251
  * Builds an MCP server service from registered tools, prompts, resources, and completions.
@@ -170,23 +253,11 @@ export class McpServer extends Context.Service<McpServer, {
170
253
  * @since 4.0.0
171
254
  */
172
255
  static readonly make = Effect.gen(function*() {
173
- const matcher = makeUriMatcher<
174
- {
175
- readonly _tag: "ResourceTemplate"
176
- readonly handle: (
177
- uri: string,
178
- params: Array<string>
179
- ) => Effect.Effect<typeof ReadResourceResult.Type, InternalError | InvalidParams, McpServerClient>
180
- } | {
181
- readonly _tag: "Resource"
182
- readonly effect: Effect.Effect<typeof ReadResourceResult.Type, InternalError, McpServerClient>
183
- }
184
- >()
256
+ const internalCore = yield* McpCore.make
185
257
  const tools = Arr.empty<{
186
258
  readonly tool: McpTool
187
259
  readonly annotations: Context.Context<never>
188
260
  }>()
189
- const toolMap = new Map<string, (payload: any) => Effect.Effect<CallToolResult, InternalError, McpServerClient>>()
190
261
  const resources: Array<{
191
262
  readonly resource: Resource
192
263
  readonly annotations: Context.Context<never>
@@ -199,15 +270,7 @@ export class McpServer extends Context.Service<McpServer, {
199
270
  readonly prompt: Prompt
200
271
  readonly annotations: Context.Context<never>
201
272
  }> = []
202
- const promptMap = new Map<
203
- string,
204
- (params: Record<string, string>) => Effect.Effect<GetPromptResult, InternalError | InvalidParams, McpServerClient>
205
- >()
206
- const completionsMap = new Map<
207
- string,
208
- (input: string) => Effect.Effect<CompleteResult, InternalError, McpServerClient>
209
- >()
210
- const notificationsQueue = yield* Queue.make<RpcMessage.Request<any>>()
273
+ const notificationsQueue = yield* Queue.make<McpCore.ServerNotification>()
211
274
  const listChangedHandles = new Map<string, any>()
212
275
  const notifications = yield* RpcClient.makeNoSerialization(ServerNotificationRpcs, {
213
276
  spanPrefix: "McpServer/Notifications",
@@ -217,48 +280,114 @@ export class McpServer extends Context.Service<McpServer, {
217
280
  if (message._tag !== "Request") {
218
281
  return Effect.void
219
282
  }
283
+ const notification = toInternalServerNotification(message)
284
+ if (notification === undefined) {
285
+ return Effect.void
286
+ }
220
287
  if (message.tag.includes("list_changed")) {
221
288
  if (!listChangedHandles.has(message.tag)) {
222
289
  listChangedHandles.set(
223
290
  message.tag,
224
291
  setTimeout(() => {
225
- Queue.offerUnsafe(notificationsQueue, message)
292
+ Queue.offerUnsafe(notificationsQueue, notification)
226
293
  listChangedHandles.delete(message.tag)
227
294
  }, 0)
228
295
  )
229
296
  }
230
297
  } else {
231
- Queue.offerUnsafe(notificationsQueue, message)
298
+ Queue.offerUnsafe(notificationsQueue, notification)
232
299
  }
233
300
  return notifications.write({
234
301
  clientId: 0,
235
302
  requestId: message.id,
236
303
  _tag: "Exit",
237
- exit: Exit.void as any
304
+ exit: Exit.void
238
305
  })
239
306
  })
240
307
  })
241
308
 
242
- return McpServer.of({
309
+ const service = McpServer.of({
243
310
  notifications: notifications.client,
244
- notificationsQueue,
245
311
  initializedClients: new Set(),
246
312
  get tools() {
247
313
  return tools
248
314
  },
249
315
  addTool: (options) =>
250
- Effect.suspend(() => {
251
- tools.push(options)
252
- toolMap.set(options.tool.name, options.handle)
253
- return notifications.client["notifications/tools/list_changed"]({})
316
+ Effect.gen(function*() {
317
+ const existingIndex = tools.findIndex(({ tool }) => tool.name === options.tool.name)
318
+ if (existingIndex === -1) {
319
+ tools.push(options)
320
+ } else {
321
+ tools[existingIndex] = options
322
+ }
323
+ const enabledWhen = Context.getOrUndefined(options.annotations, EnabledWhen)
324
+ yield* internalCore.tools.register({
325
+ descriptor: new McpTool({
326
+ ...options.tool,
327
+ title: options.tool.title ?? options.tool.annotations?.title
328
+ }),
329
+ isVisible: (profile) =>
330
+ enabledWhen === undefined || enabledWhen(
331
+ {
332
+ protocolVersion: profile.protocolVersion,
333
+ capabilities: profile.clientCapabilities,
334
+ clientInfo: profile.clientInfo
335
+ }
336
+ ),
337
+ handle: (call, invocation) =>
338
+ options.handle(call.arguments).pipe(
339
+ Effect.provideService(
340
+ McpServerClient,
341
+ invocation.requestContext
342
+ ),
343
+ Effect.catchTags({
344
+ InternalError: (error) =>
345
+ Effect.fail(
346
+ new McpCore.ToolExecutionError({
347
+ name: options.tool.name,
348
+ message: error.message
349
+ })
350
+ ),
351
+ InvalidParams: (error) =>
352
+ Effect.fail(
353
+ new McpCore.InvalidToolInput({
354
+ name: options.tool.name,
355
+ message: error.message
356
+ })
357
+ )
358
+ }),
359
+ Effect.flatMap((result) =>
360
+ result.structuredContent === undefined
361
+ ? Effect.succeed(result)
362
+ : validateStructuredContent(options.tool.name, result.structuredContent).pipe(
363
+ Effect.as(result)
364
+ )
365
+ )
366
+ )
367
+ })
368
+ yield* notifications.client["notifications/tools/list_changed"]({})
254
369
  }),
255
370
  callTool: (request) =>
256
- Effect.suspend((): Effect.Effect<CallToolResult, InternalError | InvalidParams, McpServerClient> => {
257
- const handle = toolMap.get(request.name)
258
- if (!handle) {
259
- return Effect.fail(new InvalidParams({ message: `Tool '${request.name}' not found` }))
260
- }
261
- return handle(request.arguments)
371
+ Effect.gen(function*() {
372
+ const client = yield* McpServerClient
373
+ const result = yield* internalCore.tools.call(request, {
374
+ clientId: client.clientId,
375
+ protocol: {
376
+ protocolVersion: client.protocolVersion,
377
+ clientCapabilities: client.initializePayload.capabilities,
378
+ clientInfo: client.initializePayload.clientInfo
379
+ },
380
+ requestContext: client
381
+ }).pipe(
382
+ Effect.mapError((error) =>
383
+ new InvalidParams({
384
+ message: error._tag === "ToolNotFound"
385
+ ? `Tool '${error.name}' not found`
386
+ : error.message
387
+ })
388
+ )
389
+ )
390
+ return result
262
391
  }),
263
392
  get resources() {
264
393
  return resources
@@ -267,62 +396,179 @@ export class McpServer extends Context.Service<McpServer, {
267
396
  return resourceTemplates
268
397
  },
269
398
  addResource: (options) =>
270
- Effect.suspend(() => {
271
- resources.push(options)
272
- matcher.add(options.resource.uri, { _tag: "Resource", effect: options.handle })
273
- return notifications.client["notifications/resources/list_changed"]({})
399
+ Effect.gen(function*() {
400
+ const existingIndex = resources.findIndex(({ resource }) => resource.uri === options.resource.uri)
401
+ if (existingIndex === -1) {
402
+ resources.push(options)
403
+ } else {
404
+ resources[existingIndex] = options
405
+ }
406
+ yield* internalCore.resources.register({
407
+ descriptor: options.resource,
408
+ isVisible: (profile) => {
409
+ const enabledWhen = Context.getOrUndefined(options.annotations, EnabledWhen)
410
+ return enabledWhen === undefined || enabledWhen({
411
+ protocolVersion: profile.protocolVersion,
412
+ capabilities: profile.clientCapabilities,
413
+ clientInfo: profile.clientInfo
414
+ })
415
+ },
416
+ read: (invocation) =>
417
+ options.handle.pipe(
418
+ Effect.provideService(McpServerClient, invocation.requestContext)
419
+ )
420
+ })
421
+ yield* notifications.client["notifications/resources/list_changed"]({})
274
422
  }),
275
423
  addResourceTemplate: ({ annotations, completions, handle, routerPath, template }) =>
276
- Effect.suspend(() => {
277
- resourceTemplates.push({ template, annotations })
278
- matcher.add(routerPath, { _tag: "ResourceTemplate", handle })
424
+ Effect.gen(function*() {
425
+ const existingIndex = resourceTemplates.findIndex(({ template: current }) =>
426
+ current.uriTemplate === template.uriTemplate
427
+ )
428
+ if (existingIndex === -1) {
429
+ resourceTemplates.push({ template, annotations })
430
+ } else {
431
+ resourceTemplates[existingIndex] = { template, annotations }
432
+ }
433
+ const templateMatcher = makeUriMatcher<true>()
434
+ templateMatcher.add(routerPath, true)
435
+ yield* internalCore.resources.registerTemplate({
436
+ descriptor: template,
437
+ isVisible: (profile) => {
438
+ const enabledWhen = Context.getOrUndefined(annotations, EnabledWhen)
439
+ return enabledWhen === undefined || enabledWhen({
440
+ protocolVersion: profile.protocolVersion,
441
+ capabilities: profile.clientCapabilities,
442
+ clientInfo: profile.clientInfo
443
+ })
444
+ },
445
+ match: (uri) => {
446
+ const match = templateMatcher.find(uri)
447
+ if (match === undefined) {
448
+ return undefined
449
+ }
450
+ const params: Array<string> = []
451
+ for (const key of Object.keys(match.params)) {
452
+ params[Number(key)] = match.params[key]!
453
+ }
454
+ return params
455
+ },
456
+ read: (uri, params, invocation) =>
457
+ handle(uri, Array.from(params)).pipe(
458
+ Effect.provideService(McpServerClient, invocation.requestContext)
459
+ )
460
+ })
279
461
  for (const [param, handle] of Object.entries(completions)) {
280
- completionsMap.set(`ref/resource/${template.uriTemplate}/${param}`, handle)
462
+ yield* internalCore.completions.register(
463
+ `resource/${template.uriTemplate}/${param}`,
464
+ (request) =>
465
+ handle(request.argument.value, request.context).pipe(
466
+ Effect.map((result) => ({
467
+ values: result.completion.values,
468
+ total: result.completion.total,
469
+ hasMore: result.completion.hasMore,
470
+ metadata: result._meta
471
+ }))
472
+ )
473
+ )
281
474
  }
282
- return notifications.client["notifications/resources/list_changed"]({})
475
+ yield* notifications.client["notifications/resources/list_changed"]({})
283
476
  }),
284
477
  findResource: (uri) =>
285
- Effect.suspend(() => {
286
- const match = matcher.find(uri)
287
- if (!match) {
288
- return Effect.succeed({ contents: [] })
289
- } else if (match.handler._tag === "Resource") {
290
- return match.handler.effect
291
- }
292
- const params: Array<string> = []
293
- for (const key of Object.keys(match.params)) {
294
- params[Number(key)] = match.params[key]!
295
- }
296
- return match.handler.handle(uri, params)
478
+ Effect.gen(function*() {
479
+ const client = yield* McpServerClient
480
+ return yield* internalCore.resources.read(uri, {
481
+ clientId: client.clientId,
482
+ protocol: {
483
+ protocolVersion: client.protocolVersion,
484
+ clientCapabilities: client.clientCapabilities,
485
+ clientInfo: client.clientInfo,
486
+ requestMetadata: client.initializePayload._meta
487
+ },
488
+ requestContext: client
489
+ }).pipe(
490
+ Effect.catchTag("ResourceNotFound", (error) =>
491
+ Effect.fail(new InvalidParams({ message: `Resource '${error.uri}' not found` })))
492
+ )
297
493
  }),
298
494
  get prompts() {
299
495
  return prompts
300
496
  },
301
497
  addPrompt: (options) =>
302
- Effect.suspend(() => {
303
- prompts.push(options)
304
- promptMap.set(options.prompt.name, options.handle)
498
+ Effect.gen(function*() {
499
+ const existingIndex = prompts.findIndex(({ prompt }) => prompt.name === options.prompt.name)
500
+ if (existingIndex === -1) {
501
+ prompts.push(options)
502
+ } else {
503
+ prompts[existingIndex] = options
504
+ }
505
+ yield* internalCore.prompts.register({
506
+ descriptor: options.prompt,
507
+ isVisible: (profile) => {
508
+ const enabledWhen = Context.getOrUndefined(options.annotations, EnabledWhen)
509
+ return enabledWhen === undefined || enabledWhen({
510
+ protocolVersion: profile.protocolVersion,
511
+ capabilities: profile.clientCapabilities,
512
+ clientInfo: profile.clientInfo
513
+ })
514
+ },
515
+ get: (params, invocation) =>
516
+ options.handle(params).pipe(
517
+ Effect.provideService(McpServerClient, invocation.requestContext)
518
+ )
519
+ })
305
520
  for (const [param, handle] of Object.entries(options.completions)) {
306
- completionsMap.set(`ref/prompt/${options.prompt.name}/${param}`, handle)
521
+ yield* internalCore.completions.register(
522
+ `prompt/${options.prompt.name}/${param}`,
523
+ (request, invocation) =>
524
+ handle(request.argument.value, request.context).pipe(
525
+ Effect.provideService(
526
+ McpServerClient,
527
+ invocation.requestContext
528
+ ),
529
+ Effect.map((result) => ({
530
+ values: result.completion.values,
531
+ total: result.completion.total,
532
+ hasMore: result.completion.hasMore,
533
+ metadata: result._meta
534
+ }))
535
+ )
536
+ )
307
537
  }
308
- return notifications.client["notifications/prompts/list_changed"]({})
538
+ yield* notifications.client["notifications/prompts/list_changed"]({})
309
539
  }),
310
540
  getPromptResult: Effect.fnUntraced(function*({ arguments: params, name }) {
311
- const handler = promptMap.get(name)
312
- if (!handler) {
313
- return yield* new InvalidParams({ message: `Prompt '${name}' not found` })
314
- }
315
- return yield* handler(params ?? {})
541
+ const client = yield* McpServerClient
542
+ return yield* internalCore.prompts.get(
543
+ name,
544
+ params ?? {},
545
+ McpProtocolInternal.invocationFromClient(client)
546
+ ).pipe(
547
+ Effect.catchTag("PromptNotFound", () => new InvalidParams({ message: `Prompt '${name}' not found` }))
548
+ )
316
549
  }),
317
550
  completion: Effect.fnUntraced(function*(complete) {
551
+ const client = yield* McpServerClient
318
552
  const ref = complete.ref
319
- const key = ref.type === "ref/resource"
320
- ? `ref/resource/${ref.uri}/${complete.argument.name}`
321
- : `ref/prompt/${ref.name}/${complete.argument.name}`
322
- const handler = completionsMap.get(key)
323
- return handler ? yield* handler(complete.argument.value) : CompleteResult.empty
553
+ const result = yield* internalCore.completions.complete({
554
+ reference: ref.type === "ref/resource"
555
+ ? { type: "resourceTemplate", uriTemplate: ref.uri }
556
+ : { type: "prompt", name: ref.name },
557
+ argument: complete.argument,
558
+ context: complete.context
559
+ }, McpProtocolInternal.invocationFromClient(client))
560
+ return {
561
+ _meta: result.metadata,
562
+ completion: {
563
+ values: result.values,
564
+ total: result.total,
565
+ hasMore: result.hasMore
566
+ }
567
+ }
324
568
  })
325
569
  })
570
+ internalState.set(service, { core: internalCore, notifications: notificationsQueue })
571
+ return service
326
572
  })
327
573
 
328
574
  /**
@@ -333,15 +579,57 @@ export class McpServer extends Context.Service<McpServer, {
333
579
  static readonly layer: Layer.Layer<McpServer | McpServerClient> = Layer.effect(McpServer)(McpServer.make) as any
334
580
  }
335
581
 
336
- const LATEST_PROTOCOL_VERSION = "2025-06-18"
337
- const SUPPORTED_PROTOCOL_VERSIONS = [
338
- LATEST_PROTOCOL_VERSION,
339
- "2025-03-26",
340
- "2024-11-05",
341
- "2024-10-07"
342
- ]
343
- const mcpSessionIdHeader = "mcp-session-id"
344
- const mcpProtocolVersionHeader = "mcp-protocol-version"
582
+ const MCP_SESSION_ID_HEADER = "mcp-session-id"
583
+ const MCP_PROTOCOL_VERSION_HEADER = "mcp-protocol-version"
584
+ const MCP_INVALID_BATCH_METHOD = "invalid/json-rpc-batch"
585
+ const requestKey = (requestId: string | number): string => `${typeof requestId}:${requestId}`
586
+
587
+ type SessionLogLevel =
588
+ | { readonly _tag: "Effect"; readonly level: LogLevel.LogLevel }
589
+ | { readonly _tag: "Mcp"; readonly level: McpSchema.LoggingLevel }
590
+
591
+ interface Session {
592
+ readonly initializePayload: typeof Initialize.payloadSchema.Type
593
+ readonly negotiatedProfile: McpCore.NegotiatedProtocolProfile
594
+ readonly protocol: McpProtocol.ProtocolAdapter
595
+ readonly resourceSubscriptions: Set<string> | undefined
596
+ logLevel: SessionLogLevel
597
+ }
598
+
599
+ interface Sessions {
600
+ readonly bySessionId: Map<string, Session>
601
+ readonly byClientId: Map<number, Session>
602
+ }
603
+
604
+ class McpClientKey extends Data.Class<{
605
+ readonly clientId: number
606
+ readonly profile: McpCore.NegotiatedProtocolProfile
607
+ }> {}
608
+
609
+ class McpProtocolState extends Context.Service<McpProtocolState, {
610
+ readonly sessions: Sessions
611
+ readonly protocolRegistry: McpProtocolRegistry.ProtocolRegistry<McpProtocol.ProtocolAdapter>
612
+ }>()("effect/ai/McpServer/McpProtocolState") {}
613
+
614
+ const makeMcpProtocolState = Effect.fnUntraced(function*(
615
+ protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
616
+ ) {
617
+ // TODO: Replace the shared session map with an adapter-owned lifecycle strategy
618
+ // before v2026-07-28. The strategy must let sessionful revisions pin a profile
619
+ // after initialize while stateless revisions select and derive it per request.
620
+ return McpProtocolState.of({
621
+ sessions: {
622
+ bySessionId: new Map(),
623
+ byClientId: new Map()
624
+ },
625
+ protocolRegistry: yield* McpProtocolRegistry.make(protocols)
626
+ })
627
+ })
628
+
629
+ const layerMcpProtocolState = (
630
+ protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
631
+ ): Layer.Layer<McpProtocolState, Cause.IllegalArgumentError> =>
632
+ Layer.effect(McpProtocolState)(makeMcpProtocolState(protocols))
345
633
 
346
634
  /**
347
635
  * Runs an MCP server over the current `RpcServer.Protocol`.
@@ -352,55 +640,76 @@ const mcpProtocolVersionHeader = "mcp-protocol-version"
352
640
  * tools, resources, and prompts, and forwards queued server notifications to
353
641
  * initialized clients.
354
642
  *
355
- * @category constructors
643
+ * @category running
356
644
  * @since 4.0.0
357
645
  */
358
646
  export const run: (options: {
359
647
  readonly name: string
360
648
  readonly version: string
361
- readonly extensions?: Record<`${string}/${string}`, unknown> | undefined
649
+ readonly protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
650
+ readonly extensions?: ServerExtensions | undefined
362
651
  }) => Effect.Effect<
363
652
  never,
364
- never,
653
+ Cause.IllegalArgumentError,
365
654
  McpServer | RpcServer.Protocol
366
655
  > = Effect.fnUntraced(function*(options: {
367
656
  readonly name: string
368
657
  readonly version: string
658
+ readonly protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
659
+ readonly extensions?: ServerExtensions | undefined
369
660
  }) {
661
+ const protocolStateOption = yield* Effect.serviceOption(McpProtocolState)
662
+ const protocolState = Option.isSome(protocolStateOption)
663
+ ? protocolStateOption.value
664
+ : yield* makeMcpProtocolState(options.protocols)
665
+ return yield* runWithProtocolState(options, protocolState)
666
+ })
667
+
668
+ const runWithProtocolState = Effect.fnUntraced(function*(options: {
669
+ readonly name: string
670
+ readonly version: string
671
+ readonly extensions?: ServerExtensions | undefined
672
+ }, protocolState: McpProtocolState["Service"]) {
673
+ const protocolRegistry = protocolState.protocolRegistry
674
+ const serverScope = yield* Effect.scope
370
675
  const protocol = yield* RpcServer.Protocol
371
676
  const server = yield* McpServer
677
+ const defaultLogLevel = yield* CurrentLogLevel
372
678
  const isHttp = Option.isSome(yield* Effect.serviceOption(HttpRouter.HttpRouter))
373
- const clientSessions = new Map<string, typeof Initialize.payloadSchema.Type>()
374
- const handlers = yield* Layer.build(layerHandlers(options, { clientSessions }))
679
+ const sessions = protocolState.sessions
680
+ const clientProtocols = new Map<number, McpProtocol.ProtocolAdapter>()
681
+ const activeRequests = new Map<number, Map<string, boolean>>()
682
+ const clientProfiles = new Map<number, McpCore.NegotiatedProtocolProfile>()
683
+ const handlers = yield* Layer.build(layerHandlers(options, {
684
+ sessions,
685
+ protocolRegistry
686
+ }))
375
687
 
376
688
  const clients = yield* RcMap.make({
377
- lookup: Effect.fnUntraced(function*(clientId: number) {
689
+ lookup: Effect.fnUntraced(function*(key: McpClientKey) {
690
+ const selectedProtocol = protocolRegistry.select(key.profile.protocolVersion)
378
691
  let write!: (message: RpcMessage.FromServerEncoded) => Effect.Effect<void>
379
- const client = yield* RpcClient.make(ServerRequestRpcs, {
380
- spanPrefix: "McpServer/Client"
381
- }).pipe(
382
- Effect.provideServiceEffect(
383
- RpcClient.Protocol,
384
- RpcClient.Protocol.make(Effect.fnUntraced(function*(writeResponse) {
385
- let cid = 0
386
- write = (message) => writeResponse(cid, message)
387
- return {
388
- send(id, request, _transferables) {
389
- cid = id
390
- return protocol.send(clientId, {
391
- ...request,
392
- headers: undefined,
393
- traceId: undefined,
394
- spanId: undefined,
395
- sampled: undefined
396
- } as any)
397
- },
398
- supportsAck: true,
399
- supportsTransferables: false,
400
- supportsStructuredClone: false
401
- }
402
- }))
403
- )
692
+ const reverseProtocol = yield* RpcClient.Protocol.make(Effect.fnUntraced(function*(writeResponse) {
693
+ let cid = 0
694
+ write = (message) => writeResponse(cid, message)
695
+ return {
696
+ send(id, request, _transferables) {
697
+ cid = id
698
+ return protocol.send(key.clientId, {
699
+ ...request,
700
+ headers: undefined,
701
+ traceId: undefined,
702
+ spanId: undefined,
703
+ sampled: undefined
704
+ } as any)
705
+ },
706
+ supportsAck: true,
707
+ supportsTransferables: false,
708
+ supportsStructuredClone: false
709
+ }
710
+ }))
711
+ const client = yield* selectedProtocol.makeReverseClient(key.profile).pipe(
712
+ Effect.provideService(RpcClient.Protocol, reverseProtocol)
404
713
  )
405
714
 
406
715
  return { client, write } as const
@@ -408,109 +717,359 @@ export const run: (options: {
408
717
  idleTimeToLive: 10000
409
718
  })
410
719
 
411
- const clientMiddleware = McpServerClientMiddleware.of((effect, { client, headers, rpc }) => {
412
- const initializePayload = getInitializedClient(clientSessions, client.id, headers)
413
- const isInitialize = rpc._tag === "initialize"
414
- if (!isInitialize && !initializePayload) {
720
+ const clientMiddleware = McpServerClientMiddleware.of((effect, { client, headers, payload, rpc }) => {
721
+ const session = getClientSession(sessions, client.id, headers)
722
+ const isInitialize = rpc._tag.endsWith("/initialize")
723
+ if (!isInitialize && !session) {
415
724
  const fiber = Fiber.getCurrent()!
416
725
  const httpRequest = Context.getOrUndefined(fiber.context, HttpServerRequest.HttpServerRequest)
417
726
  if (httpRequest) {
418
727
  appendPreResponseHandlerUnsafe(
419
728
  httpRequest,
420
- () => Effect.succeed(HttpServerResponse.empty({ status: 404 }))
729
+ () =>
730
+ Effect.succeed(
731
+ HttpServerResponse.empty({
732
+ status: headers[MCP_SESSION_ID_HEADER] === undefined ? 400 : 404
733
+ })
734
+ )
421
735
  )
422
736
  }
423
737
  return Effect.die(new Error(`Mcp-Session-Id does not exist`))
424
738
  }
739
+ const selectedProtocol = session?.protocol ?? protocolForInternalTag(protocolRegistry, rpc._tag)
740
+ // NOTE: RPC middleware erases the correlation between the initialize tag
741
+ // and its decoded payload. Restore it once after non-initialize requests
742
+ // without a session have been rejected above.
743
+ const initializePayload = session?.initializePayload ?? payload as typeof Initialize.payloadSchema.Type
744
+ const profile = session?.negotiatedProfile ?? {
745
+ protocolVersion: selectedProtocol.protocolVersion,
746
+ clientCapabilities: initializePayload.capabilities,
747
+ clientInfo: initializePayload.clientInfo
748
+ }
749
+ clientProfiles.set(client.id, profile)
425
750
  return Effect.provideService(
426
- effect,
427
- McpServerClient,
428
- McpServerClient.of({
429
- clientId: client.id,
430
- initializePayload: initializePayload!,
431
- getClient: RcMap.get(clients, client.id).pipe(
432
- Effect.map(({ client }) => client)
433
- )
434
- })
751
+ Effect.provideService(
752
+ effect,
753
+ McpServerClient,
754
+ McpServerClient.of({
755
+ clientId: client.id,
756
+ protocolVersion: session?.negotiatedProfile.protocolVersion ?? selectedProtocol.protocolVersion,
757
+ clientCapabilities: profile.clientCapabilities,
758
+ clientInfo: profile.clientInfo,
759
+ initializePayload,
760
+ getClient: RcMap.get(
761
+ clients,
762
+ new McpClientKey({
763
+ clientId: client.id,
764
+ profile
765
+ })
766
+ ).pipe(
767
+ Effect.map(({ client }) => client)
768
+ )
769
+ })
770
+ ),
771
+ CurrentLogLevel,
772
+ effectLogLevel(session?.logLevel, defaultLogLevel)
435
773
  )
436
774
  })
437
775
 
438
776
  const patchedProtocol = RpcServer.Protocol.of({
439
777
  ...protocol,
778
+ send: (clientId, response) => {
779
+ if (response._tag === "Exit") {
780
+ const requests = activeRequests.get(clientId)
781
+ const key = requestKey(response.requestId)
782
+ const cancelled = requests?.get(key)
783
+ if (requests !== undefined && requests.delete(key) && requests.size === 0) {
784
+ activeRequests.delete(clientId)
785
+ }
786
+ if (cancelled === true) {
787
+ return Effect.void
788
+ }
789
+ if (
790
+ response.exit._tag === "Failure" &&
791
+ !response.exit.cause.some((failure) => failure._tag === "Fail")
792
+ ) {
793
+ return protocol.send(clientId, {
794
+ _tag: "Exit",
795
+ requestId: response.requestId,
796
+ exit: {
797
+ _tag: "Failure",
798
+ cause: [{
799
+ _tag: "Fail",
800
+ error: new InternalError({ message: "Internal error" })
801
+ }]
802
+ }
803
+ })
804
+ }
805
+ }
806
+ return protocol.send(clientId, response)
807
+ },
440
808
  run: (f) =>
441
809
  protocol.run((clientId, request_) => {
442
- const request = request_ as any as
810
+ const fiber = Fiber.getCurrent()!
811
+ const request = request_ as unknown as
443
812
  | RpcMessage.FromServerEncoded
444
813
  | RpcMessage.FromClientEncoded
814
+ const httpRequest = isHttp
815
+ ? Context.getOrUndefined(fiber.context, HttpServerRequest.HttpServerRequest)
816
+ : undefined
817
+ if (httpRequest !== undefined && request._tag !== "Eof") {
818
+ appendPreResponseHandlerUnsafe(httpRequest, (_, response) =>
819
+ Effect.succeed(
820
+ response.status === 200 &&
821
+ response.body._tag === "Uint8Array" &&
822
+ response.body.contentLength === 0
823
+ ? HttpServerResponse.empty({
824
+ headers: Headers.remove(response.headers, "content-type"),
825
+ status: 202
826
+ })
827
+ : response
828
+ ))
829
+ }
445
830
  switch (request._tag) {
446
831
  case "Request": {
832
+ const headers = isHttp
833
+ ? Context.getUnsafe(
834
+ Fiber.getCurrent()!.context,
835
+ HttpServerRequest.HttpServerRequest
836
+ ).headers
837
+ : Headers.fromInput(request.headers)
838
+ const session = getClientSession(sessions, clientId, headers)
839
+ const selectedProtocol = session?.protocol ??
840
+ (request.tag === "initialize"
841
+ ? protocolRegistry.select(getOfferedProtocolVersion(request.payload))
842
+ : protocolRegistry.protocols[0])
843
+ // Selection happens before dated payload decoding. Once a
844
+ // session exists, all later messages reuse its pinned adapter.
845
+ clientProtocols.set(clientId, selectedProtocol)
846
+ if (request.tag === MCP_INVALID_BATCH_METHOD) {
847
+ return protocol.send(clientId, {
848
+ _tag: "Exit",
849
+ requestId: request.id,
850
+ exit: {
851
+ _tag: "Failure",
852
+ cause: [{
853
+ _tag: "Fail",
854
+ error: new InvalidRequest({ message: "JSON-RPC batches are not supported" })
855
+ }]
856
+ }
857
+ })
858
+ }
447
859
  if (isHttp) {
448
860
  const fiber = Fiber.getCurrent()!
449
861
  const httpRequest = Context.getUnsafe(fiber.context, HttpServerRequest.HttpServerRequest)
450
- const client = getInitializedClient(clientSessions, clientId, httpRequest.headers)
451
- if (client) {
862
+ if (session) {
452
863
  appendPreResponseHandlerUnsafe(httpRequest, (_, res) =>
453
864
  Effect.succeed(
454
- HttpServerResponse.setHeader(res, mcpProtocolVersionHeader, client.protocolVersion)
865
+ HttpServerResponse.setHeader(
866
+ res,
867
+ MCP_PROTOCOL_VERSION_HEADER,
868
+ session.protocol.protocolVersion
869
+ )
455
870
  ))
456
871
  }
457
872
  }
458
- const rpc = ClientNotificationRpcs.requests.get(request.tag)
459
- if (rpc) {
460
- if (request.tag === "notifications/cancelled") {
461
- return f(clientId, {
462
- _tag: "Interrupt",
463
- requestId: String((request.payload as any).requestId)
464
- })
873
+ const routedRequest = protocolRegistry.routeClientRequest(selectedProtocol, request)
874
+ const rpc = protocolRegistry.clientRpcs.requests.get(routedRequest.tag)
875
+ if (
876
+ rpc &&
877
+ selectedProtocol.clientNotificationRpcs.requests.has(request.tag)
878
+ ) {
879
+ if (!session) {
880
+ if (httpRequest) {
881
+ appendPreResponseHandlerUnsafe(
882
+ httpRequest,
883
+ () =>
884
+ Effect.succeed(
885
+ HttpServerResponse.empty({
886
+ status: headers[MCP_SESSION_ID_HEADER] === undefined ? 400 : 404
887
+ })
888
+ )
889
+ )
890
+ }
891
+ return Effect.void
465
892
  }
466
- const handler = handlers.mapUnsafe.get(request.tag) as Rpc.Handler<string>
467
- return handler
468
- ? handler.handler(request.payload, {
469
- rpc,
470
- requestId: RpcMessage.RequestId(request.id),
471
- client: new Rpc.ServerClient(clientId),
472
- headers: Headers.fromInput(request.headers)
473
- }) as any as Effect.Effect<void>
474
- : Effect.void
893
+ const decode = selectedProtocol.payloadCodecs(rpc).decode(request.payload)
894
+ return decode.pipe(
895
+ Effect.flatMap((payload) => {
896
+ if (
897
+ request.tag === "notifications/roots/list_changed" &&
898
+ session.initializePayload.capabilities.roots?.listChanged === true &&
899
+ httpRequest === undefined
900
+ ) {
901
+ return RcMap.get(
902
+ clients,
903
+ new McpClientKey({
904
+ clientId,
905
+ profile: session.negotiatedProfile
906
+ })
907
+ ).pipe(
908
+ Effect.flatMap(({ client }) => client.listRoots()),
909
+ Effect.scoped,
910
+ Effect.ignoreCause,
911
+ Effect.forkIn(serverScope),
912
+ Effect.asVoid
913
+ )
914
+ }
915
+ if (request.tag === "notifications/cancelled") {
916
+ return selectedProtocol.normalizeCancellation(payload).pipe(
917
+ Effect.flatMap((cancellation) => {
918
+ const key = requestKey(cancellation.requestId)
919
+ const requests = activeRequests.get(clientId)
920
+ if (requests?.has(key) !== true) {
921
+ return Effect.void
922
+ }
923
+ requests.set(key, true)
924
+ return f(clientId, {
925
+ _tag: "Interrupt",
926
+ requestId: String(cancellation.requestId)
927
+ })
928
+ })
929
+ )
930
+ }
931
+ const handler = handlers.mapUnsafe.get(rpc.key) as Rpc.Handler<string> | undefined
932
+ return handler
933
+ ? handler.handler(payload, {
934
+ rpc,
935
+ requestId: RpcMessage.RequestId(request.id),
936
+ client: new Rpc.ServerClient(clientId),
937
+ headers
938
+ }) as any as Effect.Effect<void>
939
+ : Effect.void
940
+ }),
941
+ Effect.ignoreCause
942
+ )
475
943
  }
476
- return f(clientId, request)
944
+ if (!rpc) {
945
+ if (request.isNotification) {
946
+ return Effect.void
947
+ }
948
+ return protocol.send(clientId, {
949
+ _tag: "Exit",
950
+ requestId: request.id,
951
+ exit: {
952
+ _tag: "Failure",
953
+ cause: [{ _tag: "Fail", error: new MethodNotFound({ message: `Method not found: ${request.tag}` }) }]
954
+ }
955
+ })
956
+ }
957
+ return selectedProtocol.payloadCodecs(rpc).decode(request.payload).pipe(
958
+ Effect.matchEffect({
959
+ onSuccess: () => {
960
+ if (request.isNotification !== true) {
961
+ const requests = activeRequests.get(clientId) ?? new Map<string, boolean>()
962
+ requests.set(requestKey(request.id), false)
963
+ activeRequests.set(clientId, requests)
964
+ }
965
+ return f(clientId, routedRequest)
966
+ },
967
+ onFailure: () =>
968
+ request.isNotification
969
+ ? Effect.void
970
+ : protocol.send(clientId, {
971
+ _tag: "Exit",
972
+ requestId: request.id,
973
+ exit: {
974
+ _tag: "Failure",
975
+ cause: [{ _tag: "Fail", error: new InvalidParams({ message: "Invalid method parameters" }) }]
976
+ }
977
+ })
978
+ })
979
+ )
477
980
  }
478
981
  case "Ping":
479
982
  case "Ack":
480
983
  case "Interrupt":
984
+ return f(clientId, request)
481
985
  case "Eof":
986
+ activeRequests.delete(clientId)
987
+ clientProtocols.delete(clientId)
988
+ clientProfiles.delete(clientId)
989
+ if (!isHttp) {
990
+ sessions.byClientId.delete(clientId)
991
+ }
482
992
  return f(clientId, request)
483
993
  case "Pong":
484
994
  case "Exit":
485
995
  case "Chunk":
486
996
  case "ClientProtocolError":
487
- case "Defect":
488
- return RcMap.get(clients, clientId).pipe(
997
+ case "Defect": {
998
+ const selectedProtocol = getProtocolForClient(clientProtocols, clientId, protocolRegistry)
999
+ const profile = clientProfiles.get(clientId) ?? {
1000
+ protocolVersion: selectedProtocol.protocolVersion,
1001
+ clientCapabilities: {},
1002
+ clientInfo: { name: "unknown", version: "unknown" }
1003
+ }
1004
+ return RcMap.get(
1005
+ clients,
1006
+ new McpClientKey({
1007
+ clientId,
1008
+ profile
1009
+ })
1010
+ ).pipe(
489
1011
  Effect.flatMap(({ write }) => write(request)),
490
1012
  Effect.scoped
491
1013
  )
1014
+ }
492
1015
  }
493
1016
  })
494
1017
  })
495
1018
 
496
- const encodeNotification = Schema.encodeUnknownEffect(
497
- Schema.Union(Array.from(ServerNotificationRpcs.requests.values(), (rpc) => rpc.payloadSchema))
498
- )
499
- yield* Queue.take(server.notificationsQueue).pipe(
500
- Effect.flatMap(Effect.fnUntraced(function*(request) {
501
- const encoded = yield* encodeNotification(request.payload)
502
- const message: RpcMessage.RequestEncoded = {
503
- _tag: "Request",
504
- tag: request.tag,
505
- payload: encoded
506
- } as any
1019
+ yield* Queue.take(internalState.get(server)!.notifications).pipe(
1020
+ Effect.flatMap(Effect.fnUntraced(function*(notification) {
507
1021
  const clientIds = yield* patchedProtocol.clientIds
1022
+ for (const clientId of clientProtocols.keys()) {
1023
+ if (!clientIds.has(clientId)) {
1024
+ clientProtocols.delete(clientId)
1025
+ clientProfiles.delete(clientId)
1026
+ // HTTP client IDs are request-scoped; their UUID sessions outlive them.
1027
+ if (!isHttp) {
1028
+ sessions.byClientId.delete(clientId)
1029
+ }
1030
+ }
1031
+ }
508
1032
  for (const clientId of server.initializedClients.keys()) {
509
1033
  if (!clientIds.has(clientId)) {
510
1034
  server.initializedClients.delete(clientId)
511
1035
  continue
512
1036
  }
513
- yield* patchedProtocol.send(clientId, message as any)
1037
+ const selectedProtocol = clientProtocols.get(clientId)
1038
+ if (!selectedProtocol) {
1039
+ continue
1040
+ }
1041
+ yield* Effect.gen(function*() {
1042
+ const projected = yield* selectedProtocol.projectNotification(notification)
1043
+ if (projected === undefined) {
1044
+ return
1045
+ }
1046
+ const session = sessions.byClientId.get(clientId)
1047
+ if (
1048
+ notification._tag === "LoggingMessage" &&
1049
+ !isMcpLogLevelEnabled(notification.level, session?.logLevel, defaultLogLevel)
1050
+ ) {
1051
+ return
1052
+ }
1053
+ if (
1054
+ notification._tag === "ResourceUpdated" &&
1055
+ session?.resourceSubscriptions?.has(notification.uri) !== true
1056
+ ) {
1057
+ return
1058
+ }
1059
+ const rpc = selectedProtocol.serverNotificationRpcs.requests.get(projected.tag)
1060
+ if (!rpc) {
1061
+ return
1062
+ }
1063
+ const encoded = yield* selectedProtocol.payloadCodecs(rpc).encode(projected.payload)
1064
+ // TODO: Extend RpcServer.Protocol's outbound message contract with server-originated
1065
+ // notifications so MCP does not need to treat this notification as an RPC response.
1066
+ const message: RpcMessage.RequestEncoded = {
1067
+ _tag: "Request",
1068
+ tag: projected.tag,
1069
+ payload: encoded
1070
+ } as any
1071
+ yield* patchedProtocol.send(clientId, message as any)
1072
+ }).pipe(Effect.catchCause(() => Effect.void))
514
1073
  }
515
1074
  })),
516
1075
  Effect.catchCause(() => Effect.void),
@@ -518,7 +1077,7 @@ export const run: (options: {
518
1077
  Effect.forkScoped
519
1078
  )
520
1079
 
521
- return yield* RpcServer.make(ClientRpcs, {
1080
+ return yield* RpcServer.make(protocolRegistry.clientRpcs, {
522
1081
  spanPrefix: "McpServer",
523
1082
  disableFatalDefects: true
524
1083
  }).pipe(
@@ -560,66 +1119,43 @@ export const run: (options: {
560
1119
  export const layer = (options: {
561
1120
  readonly name: string
562
1121
  readonly version: string
563
- readonly extensions?: Record<`${string}/${string}`, unknown> | undefined
564
- }): Layer.Layer<McpServer | McpServerClient, never, RpcServer.Protocol> =>
565
- Layer.effectDiscard(Effect.forkScoped(run(options))).pipe(
1122
+ readonly protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
1123
+ readonly extensions?: ServerExtensions | undefined
1124
+ }): Layer.Layer<McpServer | McpServerClient, Cause.IllegalArgumentError, RpcServer.Protocol> =>
1125
+ layerWithProtocolState(options).pipe(
1126
+ Layer.provide(layerMcpProtocolState(options.protocols))
1127
+ )
1128
+
1129
+ const layerWithProtocolState = (options: {
1130
+ readonly name: string
1131
+ readonly version: string
1132
+ readonly extensions?: ServerExtensions | undefined
1133
+ }): Layer.Layer<McpServer | McpServerClient, never, RpcServer.Protocol | McpProtocolState> =>
1134
+ Layer.effectDiscard(
1135
+ Effect.gen(function*() {
1136
+ const protocolState = yield* McpProtocolState
1137
+ yield* Effect.forkScoped(runWithProtocolState(options, protocolState))
1138
+ })
1139
+ ).pipe(
566
1140
  Layer.provideMerge(McpServer.layer)
567
1141
  )
568
1142
 
569
1143
  /**
570
- * Runs the McpServer, using stdio for input and output.
571
- *
572
- * **Example** (Running an MCP server over stdio)
573
- *
574
- * ```ts
575
- * import { Effect, Layer, Logger, Schema } from "effect"
576
- * import { NodeRuntime, NodeStdio } from "@effect/platform-node"
577
- * import { McpSchema, McpServer } from "effect/unstable/ai"
1144
+ * Creates a layer that runs an MCP server over standard input and output.
578
1145
  *
579
- * const idParam = McpSchema.param("id", Schema.Number)
1146
+ * **When to use**
580
1147
  *
581
- * // Define a resource template for a README file
582
- * const ReadmeTemplate = McpServer.resource`file://readme/${idParam}`({
583
- * name: "README Template",
584
- * // You can add auto-completion for the ID parameter
585
- * completion: {
586
- * id: (_) => Effect.succeed([1, 2, 3, 4, 5])
587
- * },
588
- * content: Effect.fn(function*(_uri, id) {
589
- * return `# MCP Server Demo - ID: ${id}`
590
- * })
591
- * })
1148
+ * Use when an MCP client launches the server as a subprocess and communicates
1149
+ * through newline-delimited JSON-RPC messages.
592
1150
  *
593
- * // Define a test prompt with parameters
594
- * const TestPrompt = McpServer.prompt({
595
- * name: "Test Prompt",
596
- * description: "A test prompt to demonstrate MCP server capabilities",
597
- * parameters: {
598
- * flightNumber: Schema.String
599
- * },
600
- * completion: {
601
- * flightNumber: () => Effect.succeed(["FL123", "FL456", "FL789"])
602
- * },
603
- * content: ({ flightNumber }) =>
604
- * Effect.succeed(`Get the booking details for flight number: ${flightNumber}`)
605
- * })
1151
+ * **Details**
606
1152
  *
607
- * // Merge all the resources and prompts into a single server layer
608
- * const ServerLayer = Layer.mergeAll(
609
- * ReadmeTemplate,
610
- * TestPrompt
611
- * ).pipe(
612
- * // Provide the MCP server implementation
613
- * Layer.provide(McpServer.layerStdio({
614
- * name: "Demo Server",
615
- * version: "1.0.0",
616
- * })),
617
- * Layer.provide(NodeStdio.layer),
618
- * Layer.provide(Layer.succeed(Logger.LogToStderr)(true))
619
- * )
1153
+ * The selected protocol adapter controls the dated RPC schemas and JSON-RPC
1154
+ * batch policy. The layer provides `McpServer` and `McpServerClient` and
1155
+ * requires `Stdio`.
620
1156
  *
621
- * Layer.launch(ServerLayer).pipe(NodeRuntime.runMain)
622
- * ```
1157
+ * @see {@link layer} for running over an existing `RpcServer.Protocol`
1158
+ * @see {@link layerHttp} for the single-endpoint HTTP transport
623
1159
  *
624
1160
  * @category layers
625
1161
  * @since 4.0.0
@@ -627,16 +1163,83 @@ export const layer = (options: {
627
1163
  export const layerStdio = (options: {
628
1164
  readonly name: string
629
1165
  readonly version: string
630
- readonly extensions?: Record<`${string}/${string}`, unknown> | undefined
631
- }): Layer.Layer<McpServer | McpServerClient, never, Stdio> =>
1166
+ readonly protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
1167
+ readonly extensions?: ServerExtensions | undefined
1168
+ }): Layer.Layer<McpServer | McpServerClient, Cause.IllegalArgumentError, Stdio> =>
632
1169
  layer(options).pipe(
633
1170
  Layer.provide(RpcServer.layerProtocolStdio),
634
- Layer.provide(RpcSerialization.layerNdJsonRpc())
1171
+ Layer.provide(Layer.succeed(
1172
+ RpcSerialization.RpcSerialization,
1173
+ mcpStdioSerialization(options.protocols)
1174
+ ))
635
1175
  )
636
1176
 
1177
+ const mcpStdioSerialization = (
1178
+ protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
1179
+ ): RpcSerialization.RpcSerialization["Service"] => {
1180
+ const serialization = RpcSerialization.jsonRpc({
1181
+ contentType: "application/json-rpc"
1182
+ })
1183
+ return RpcSerialization.RpcSerialization.of({
1184
+ contentType: serialization.contentType,
1185
+ includesFraming: true,
1186
+ makeUnsafe: () => {
1187
+ const frames = RpcSerialization.ndjson.makeUnsafe()
1188
+ const parser = serialization.makeUnsafe()
1189
+ let selectedProtocol: McpProtocol.ProtocolAdapter | undefined
1190
+ return {
1191
+ decode: (data) => {
1192
+ const decoded: Array<unknown> = []
1193
+ for (const frame of frames.decode(data)) {
1194
+ if (Array.isArray(frame)) {
1195
+ const acceptsBatch = selectedProtocol?.transport.acceptsJsonRpcBatches === true
1196
+ if (
1197
+ !acceptsBatch ||
1198
+ frame.length === 0 ||
1199
+ frame.some(isInitializeJsonRpcMessage)
1200
+ ) {
1201
+ decoded.push({
1202
+ _tag: "Request",
1203
+ id: null,
1204
+ tag: MCP_INVALID_BATCH_METHOD,
1205
+ payload: null,
1206
+ headers: []
1207
+ })
1208
+ continue
1209
+ }
1210
+ } else if (isInitializeJsonRpcMessage(frame)) {
1211
+ const offered = getJsonRpcProtocolVersion(frame)
1212
+ selectedProtocol = protocols.find((protocol) => protocol.protocolVersion === offered) ??
1213
+ protocols[0]
1214
+ }
1215
+ decoded.push(...parser.decode(JSON.stringify(frame)))
1216
+ }
1217
+ return decoded
1218
+ },
1219
+ encode: (response) => {
1220
+ const invalidBatchExit = decodeInvalidBatchExit(response)
1221
+ if (Result.isSuccess(invalidBatchExit)) {
1222
+ return JSON.stringify({
1223
+ jsonrpc: "2.0",
1224
+ id: null,
1225
+ error: {
1226
+ _tag: "Cause",
1227
+ code: McpSchema.INVALID_REQUEST_ERROR_CODE,
1228
+ message: "JSON-RPC batches are not supported",
1229
+ data: invalidBatchExit.success.exit.cause
1230
+ }
1231
+ }) + "\n"
1232
+ }
1233
+ const encoded = parser.encode(response)
1234
+ return encoded === undefined ? undefined : `${encoded}\n`
1235
+ }
1236
+ }
1237
+ }
1238
+ })
1239
+ }
1240
+
637
1241
  /**
638
- * Registers an HTTP POST JSON-RPC route at `options.path` on the current
639
- * `HttpRouter`.
1242
+ * Registers a Streamable HTTP MCP endpoint at `options.path`.
640
1243
  *
641
1244
  * **When to use**
642
1245
  *
@@ -644,8 +1247,18 @@ export const layerStdio = (options: {
644
1247
  *
645
1248
  * **Details**
646
1249
  *
647
- * This layer composes `layer(options)`, `RpcServer.layerProtocolHttp(options)`,
648
- * and `RpcSerialization.layerJsonRpc()`.
1250
+ * POST serves JSON-RPC and accepted notification-only requests return `202`.
1251
+ * Unsupported protocol versions return `400`; methods without MCP handlers
1252
+ * return `405`. Requests carrying an `Origin` header are rejected unless the
1253
+ * exact origin appears in `allowedOrigins`; Origin-less non-browser clients
1254
+ * remain valid. The surrounding HTTP server remains responsible for binding
1255
+ * to an appropriate interface and installing authentication.
1256
+ *
1257
+ * `layerHttp` always implements the single-endpoint Streamable HTTP topology.
1258
+ * Using `v2024_11_05` here is a custom compatibility transport for that
1259
+ * revision's schema. It does not implement the historical two-endpoint
1260
+ * HTTP+SSE transport, GET SSE, event resumption, session expiry, or client
1261
+ * session termination.
649
1262
  *
650
1263
  * @see {@link layerStdio} for exposing the server over stdio
651
1264
  * @see {@link layer} for the base MCP server layer without a transport protocol
@@ -657,17 +1270,200 @@ export const layerHttp = (options: {
657
1270
  readonly name: string
658
1271
  readonly version: string
659
1272
  readonly path: HttpRouter.PathInput
660
- readonly extensions?: Record<`${string}/${string}`, unknown> | undefined
661
- }): Layer.Layer<McpServer | McpServerClient, never, HttpRouter.HttpRouter> =>
662
- layer(options).pipe(
663
- Layer.provide(RpcServer.layerProtocolHttp(options)),
1273
+ readonly protocols: Arr.NonEmptyReadonlyArray<McpProtocol.ProtocolAdapter>
1274
+ readonly extensions?: ServerExtensions | undefined
1275
+ readonly allowedOrigins?: ReadonlyArray<string> | undefined
1276
+ }): Layer.Layer<McpServer | McpServerClient, Cause.IllegalArgumentError, HttpRouter.HttpRouter> => {
1277
+ const protocolState = layerMcpProtocolState(options.protocols)
1278
+ const methodNotAllowedResponse = HttpServerResponse.empty({
1279
+ status: 405,
1280
+ headers: { allow: "POST" }
1281
+ })
1282
+ const methodNotAllowed = (request: HttpServerRequest.HttpServerRequest) =>
1283
+ isAllowedMcpOrigin(request, options.allowedOrigins)
1284
+ ? Effect.succeed(methodNotAllowedResponse)
1285
+ : Effect.succeed(HttpServerResponse.empty({ status: 403 }))
1286
+ const routes = Layer.mergeAll(
1287
+ HttpRouter.add("GET", options.path, methodNotAllowed),
1288
+ HttpRouter.add("PUT", options.path, methodNotAllowed),
1289
+ HttpRouter.add("PATCH", options.path, methodNotAllowed),
1290
+ HttpRouter.add("DELETE", options.path, methodNotAllowed),
1291
+ HttpRouter.add("OPTIONS", options.path, methodNotAllowed)
1292
+ )
1293
+ return Layer.merge(layerWithProtocolState(options), routes).pipe(
1294
+ Layer.provide(layerMcpProtocolHttp(options)),
1295
+ Layer.provide(protocolState),
664
1296
  Layer.provide(RpcSerialization.layerJsonRpc())
665
1297
  )
1298
+ }
1299
+
1300
+ const layerMcpProtocolHttp = (options: {
1301
+ readonly path: HttpRouter.PathInput
1302
+ readonly allowedOrigins?: ReadonlyArray<string> | undefined
1303
+ }): Layer.Layer<
1304
+ RpcServer.Protocol,
1305
+ never,
1306
+ McpProtocolState | RpcSerialization.RpcSerialization | HttpRouter.HttpRouter
1307
+ > =>
1308
+ Layer.effect(RpcServer.Protocol)(Effect.gen(function*() {
1309
+ const state = yield* McpProtocolState
1310
+ const { httpEffect, protocol } = yield* RpcServer.makeProtocolWithHttpEffect
1311
+ const router = yield* HttpRouter.HttpRouter
1312
+ yield* router.add("POST", options.path, (request) => {
1313
+ if (!isAllowedMcpOrigin(request, options.allowedOrigins)) {
1314
+ return Effect.succeed(HttpServerResponse.empty({ status: 403 }))
1315
+ }
1316
+ if (mcpMediaTypes(request.headers["content-type"])[0] !== "application/json") {
1317
+ return Effect.succeed(HttpServerResponse.empty({ status: 415 }))
1318
+ }
1319
+ const accepted = mcpMediaTypes(request.headers["accept"])
1320
+ if (!accepted.includes("application/json") || !accepted.includes("text/event-stream")) {
1321
+ return Effect.succeed(HttpServerResponse.empty({ status: 406 }))
1322
+ }
1323
+ const protocolVersion = request.headers[MCP_PROTOCOL_VERSION_HEADER]
1324
+ const sessionId = request.headers[MCP_SESSION_ID_HEADER]
1325
+ const session = sessionId === undefined
1326
+ ? undefined
1327
+ : state.sessions.bySessionId.get(sessionId)
1328
+ if (sessionId !== undefined && session === undefined) {
1329
+ return Effect.succeed(HttpServerResponse.empty({ status: 404 }))
1330
+ }
1331
+ if (
1332
+ protocolVersion !== undefined &&
1333
+ !state.protocolRegistry.protocols.some((protocol) => protocol.protocolVersion === protocolVersion)
1334
+ ) {
1335
+ return Effect.succeed(HttpServerResponse.empty({ status: 400 }))
1336
+ }
1337
+ if (
1338
+ session?.protocol.transport.requiresVersionHeader === true &&
1339
+ protocolVersion !== session.protocol.protocolVersion
1340
+ ) {
1341
+ return Effect.succeed(HttpServerResponse.empty({ status: 400 }))
1342
+ }
1343
+ return request.text.pipe(
1344
+ Effect.matchEffect({
1345
+ onFailure: () =>
1346
+ Effect.succeed(HttpServerResponse.jsonUnsafe({
1347
+ jsonrpc: "2.0",
1348
+ id: null,
1349
+ error: new McpSchema.ParseError({ message: "Parse error" })
1350
+ })),
1351
+ onSuccess: (body) =>
1352
+ Effect.matchEffect(Schema.decodeUnknownEffect(Schema.UnknownFromJsonString)(body), {
1353
+ onFailure: () =>
1354
+ Effect.succeed(HttpServerResponse.jsonUnsafe({
1355
+ jsonrpc: "2.0",
1356
+ id: null,
1357
+ error: new McpSchema.ParseError({ message: "Parse error" })
1358
+ })),
1359
+ onSuccess: (input) => {
1360
+ if (!Array.isArray(input)) {
1361
+ const hasId = Predicate.hasProperty(input, "id")
1362
+ const id = hasId && (typeof input.id === "string" || typeof input.id === "number")
1363
+ ? input.id
1364
+ : null
1365
+ const isJsonRpc = Predicate.hasProperty(input, "jsonrpc") && input.jsonrpc === "2.0"
1366
+ const hasValidRequestId = !hasId || typeof input.id === "string" || typeof input.id === "number"
1367
+ const isRequest = isJsonRpc && hasValidRequestId &&
1368
+ Predicate.hasProperty(input, "method") && typeof input.method === "string"
1369
+ const hasValidResponseId = hasId &&
1370
+ (typeof input.id === "string" || typeof input.id === "number" || input.id === null)
1371
+ const hasResult = Predicate.hasProperty(input, "result")
1372
+ const hasError = Predicate.hasProperty(input, "error")
1373
+ const isResponse = isJsonRpc && hasValidResponseId && hasResult !== hasError
1374
+ if (!isRequest && !isResponse) {
1375
+ return Effect.succeed(HttpServerResponse.jsonUnsafe({
1376
+ jsonrpc: "2.0",
1377
+ id,
1378
+ error: new InvalidRequest({ message: "Invalid Request" })
1379
+ }))
1380
+ }
1381
+ const isInitialize = isInitializeJsonRpcMessage(input)
1382
+ if (isInitialize && sessionId !== undefined) {
1383
+ return Effect.succeed(HttpServerResponse.empty({ status: 400 }))
1384
+ }
1385
+ if (!isInitialize && isRequest && sessionId === undefined) {
1386
+ return Effect.succeed(HttpServerResponse.empty({ status: 400 }))
1387
+ }
1388
+ return httpEffect
1389
+ }
1390
+ if (input.length === 0) {
1391
+ return Effect.succeed(HttpServerResponse.jsonUnsafe({
1392
+ jsonrpc: "2.0",
1393
+ id: null,
1394
+ error: new InvalidRequest({ message: "Invalid Request" })
1395
+ }, { status: 400 }))
1396
+ }
1397
+ if (input.some(isInitializeJsonRpcMessage) || session === undefined) {
1398
+ return Effect.succeed(HttpServerResponse.empty({ status: 400 }))
1399
+ }
1400
+ const selectedProtocol = session.protocol
1401
+ return selectedProtocol.transport.acceptsJsonRpcBatches
1402
+ ? httpEffect
1403
+ : Effect.succeed(HttpServerResponse.empty({ status: 400 }))
1404
+ }
1405
+ })
1406
+ })
1407
+ )
1408
+ })
1409
+ return protocol
1410
+ }))
1411
+
1412
+ const isAllowedMcpOrigin = (
1413
+ request: HttpServerRequest.HttpServerRequest,
1414
+ allowedOrigins: ReadonlyArray<string> | undefined
1415
+ ): boolean => {
1416
+ const origin = request.headers["origin"]
1417
+ return origin === undefined || (allowedOrigins ?? []).includes(origin)
1418
+ }
1419
+
1420
+ const mcpMediaTypes = (header: string | undefined): ReadonlyArray<string> =>
1421
+ header === undefined
1422
+ ? []
1423
+ : header.split(",").flatMap((part) => {
1424
+ const [mediaType, ...parameters] = part.split(";")
1425
+ const quality = parameters
1426
+ .map((parameter) => parameter.trim().toLowerCase())
1427
+ .find((parameter) => parameter.startsWith("q="))
1428
+ if (quality !== undefined) {
1429
+ const value = Number(quality.slice(2))
1430
+ if (!Number.isFinite(value) || value <= 0 || value > 1) {
1431
+ return []
1432
+ }
1433
+ }
1434
+ return [mediaType.trim().toLowerCase()]
1435
+ })
1436
+
1437
+ const InitializeJsonRpcMessage = Schema.Struct({
1438
+ method: Schema.Literal("initialize")
1439
+ })
1440
+
1441
+ const isInitializeJsonRpcMessage = (message: unknown): boolean =>
1442
+ Result.isSuccess(Schema.decodeUnknownResult(InitializeJsonRpcMessage)(message))
1443
+
1444
+ const JsonRpcProtocolVersion = Schema.Struct({
1445
+ params: Schema.Struct({
1446
+ protocolVersion: Schema.String
1447
+ })
1448
+ })
1449
+
1450
+ const getJsonRpcProtocolVersion = (message: unknown): string | undefined => {
1451
+ const decoded = Schema.decodeUnknownResult(JsonRpcProtocolVersion)(message)
1452
+ return Result.isSuccess(decoded) ? decoded.success.params.protocolVersion : undefined
1453
+ }
1454
+
1455
+ const INTERNAL_TOOL_ERROR_MESSAGE = "Tool execution failed due to an internal server error."
1456
+
1457
+ const toolErrorResult = (message: string): CallToolResult =>
1458
+ new CallToolResult({
1459
+ isError: true,
1460
+ content: [{ type: "text", text: message }]
1461
+ })
666
1462
 
667
1463
  /**
668
1464
  * Registers a `Toolkit` with the `McpServer`.
669
1465
  *
670
- * @category tools
1466
+ * @category handlers
671
1467
  * @since 4.0.0
672
1468
  */
673
1469
  export const registerToolkit: <Tools extends Record<string, Tool.Any>>(
@@ -689,10 +1485,19 @@ export const registerToolkit: <Tools extends Record<string, Tool.Any>>(
689
1485
  for (const tool of Object.values(built.tools)) {
690
1486
  const annotations = tool.annotations
691
1487
  const toolMeta = Context.getOrUndefined(annotations, Tool.Meta)
1488
+ const isDeclaredFailure = Schema.is(tool.failureSchema)
1489
+ const outputJsonSchema = Tool.getJsonSchemaFromSchema(tool.successSchema)
1490
+ const outputSchema = outputJsonSchema.type === "object"
1491
+ ? yield* Schema.decodeUnknownEffect(ToolJsonSchema)(outputJsonSchema).pipe(Effect.orDie)
1492
+ : undefined
1493
+ const inputSchema = yield* Schema.decodeUnknownEffect(ToolJsonSchema)(
1494
+ Tool.getJsonSchema(tool)
1495
+ ).pipe(Effect.orDie)
692
1496
  const mcpTool = new McpTool({
693
1497
  name: tool.name,
694
1498
  description: Tool.getDescription(tool),
695
- inputSchema: Tool.getJsonSchema(tool),
1499
+ inputSchema,
1500
+ ...(outputSchema === undefined ? {} : { outputSchema }),
696
1501
  annotations: {
697
1502
  ...(Context.getOption(tool.annotations, Tool.Title).pipe(
698
1503
  Option.map((title) => ({ title })),
@@ -709,32 +1514,41 @@ export const registerToolkit: <Tools extends Record<string, Tool.Any>>(
709
1514
  tool: mcpTool,
710
1515
  annotations,
711
1516
  handle(payload) {
712
- return built.handle(tool.name as any, payload).pipe(
1517
+ return built.handle(tool.name as keyof Tools, payload ?? {}).pipe(
713
1518
  Stream.unwrap,
714
1519
  Stream.run(Sink.last()),
715
1520
  Effect.flatMap(Effect.fromOption),
716
- Effect.provideContext(services as Context.Context<any>),
717
- Effect.matchCause({
718
- onFailure: (cause) =>
719
- new CallToolResult({
720
- isError: true,
721
- content: [{
722
- type: "text",
723
- text: Cause.pretty(cause)
724
- }]
725
- }),
726
- onSuccess: (result: any) =>
727
- new CallToolResult({
728
- isError: false,
729
- structuredContent: typeof result.encodedResult === "object" ? result.encodedResult : undefined,
730
- content: [{
731
- type: "text",
732
- text: JSON.stringify(result.encodedResult)
733
- }]
734
- })
1521
+ Effect.provideContext(
1522
+ services as Context.Context<Tool.HandlerServices<Tools[keyof Tools]>>
1523
+ ),
1524
+ Effect.map((result) =>
1525
+ new CallToolResult({
1526
+ isError: false,
1527
+ structuredContent: typeof result.encodedResult === "object" ? result.encodedResult : undefined,
1528
+ content: result.encodedResult === undefined ? [] : [{
1529
+ type: "text",
1530
+ text: JSON.stringify(result.encodedResult)
1531
+ }]
1532
+ })
1533
+ ),
1534
+ Effect.tapCause(Effect.logError),
1535
+ Effect.catch((error) => {
1536
+ if (AiError.isAiError(error)) {
1537
+ const reason = (error as AiError.AiError).reason
1538
+ return reason._tag === "ToolParameterValidationError"
1539
+ ? Effect.fail(new InvalidParams({ message: reason.message }))
1540
+ : Effect.succeed(toolErrorResult(INTERNAL_TOOL_ERROR_MESSAGE))
1541
+ }
1542
+ if (isDeclaredFailure(error)) {
1543
+ const message = error instanceof Error
1544
+ ? error.message
1545
+ : INTERNAL_TOOL_ERROR_MESSAGE
1546
+ return Effect.succeed(toolErrorResult(message))
1547
+ }
1548
+ return Effect.succeed(toolErrorResult(INTERNAL_TOOL_ERROR_MESSAGE))
735
1549
  }),
736
- Effect.tapCause(Effect.log)
737
- ) as any
1550
+ Effect.catchDefect(() => Effect.succeed(toolErrorResult(INTERNAL_TOOL_ERROR_MESSAGE)))
1551
+ )
738
1552
  }
739
1553
  })
740
1554
  }
@@ -743,7 +1557,7 @@ export const registerToolkit: <Tools extends Record<string, Tool.Any>>(
743
1557
  /**
744
1558
  * Registers an `AiToolkit` with the `McpServer`.
745
1559
  *
746
- * @category tools
1560
+ * @category layers
747
1561
  * @since 4.0.0
748
1562
  */
749
1563
  export const toolkit = <Tools extends Record<string, Tool.Any>>(
@@ -767,7 +1581,11 @@ export const toolkit = <Tools extends Record<string, Tool.Any>>(
767
1581
  export type ValidateCompletions<Completions, Keys extends string> =
768
1582
  & Completions
769
1583
  & {
770
- readonly [K in keyof Completions]: K extends Keys ? (input: string) => any : never
1584
+ readonly [K in keyof Completions]: K extends Keys ? (
1585
+ input: string,
1586
+ context: CompletionContext
1587
+ ) => any
1588
+ : never
771
1589
  }
772
1590
 
773
1591
  /**
@@ -786,7 +1604,10 @@ export type ResourceCompletions<Schemas extends ReadonlyArray<Schema.Constraint>
786
1604
  readonly [
787
1605
  K in Extract<keyof Schemas, `${number}`> as Schemas[K] extends Param<infer Id, infer _S> ? Id
788
1606
  : `param${K}`
789
- ]: (input: string) => Effect.Effect<Array<Schemas[K]["Type"]>, any, any>
1607
+ ]: (
1608
+ input: string,
1609
+ context: CompletionContext
1610
+ ) => Effect.Effect<Array<Schemas[K]["Type"]>, any, any>
790
1611
  }
791
1612
 
792
1613
  /**
@@ -800,7 +1621,7 @@ export type ResourceCompletions<Schemas extends ReadonlyArray<Schema.Constraint>
800
1621
  *
801
1622
  * @see {@link resource} for the layer-based resource registration wrapper
802
1623
  *
803
- * @category resources
1624
+ * @category handlers
804
1625
  * @since 4.0.0
805
1626
  */
806
1627
  export const registerResource: {
@@ -815,7 +1636,7 @@ export const registerResource: {
815
1636
  *
816
1637
  * @see {@link resource} for the layer-based resource registration wrapper
817
1638
  *
818
- * @category resources
1639
+ * @category handlers
819
1640
  * @since 4.0.0
820
1641
  */
821
1642
  <E, R>(
@@ -845,7 +1666,7 @@ export const registerResource: {
845
1666
  *
846
1667
  * @see {@link resource} for the layer-based resource registration wrapper
847
1668
  *
848
- * @category resources
1669
+ * @category handlers
849
1670
  * @since 4.0.0
850
1671
  */
851
1672
  <const Schemas extends ReadonlyArray<Schema.Constraint>>(segments: TemplateStringsArray, ...schemas: Schemas): <
@@ -923,7 +1744,15 @@ export const registerResource: {
923
1744
  readonly mimeType?: string | undefined
924
1745
  readonly audience?: ReadonlyArray<"user" | "assistant"> | undefined
925
1746
  readonly priority?: number | undefined
926
- readonly completion?: Record<string, (input: string) => Effect.Effect<any>> | undefined
1747
+ readonly completion?:
1748
+ | Record<
1749
+ string,
1750
+ (
1751
+ input: string,
1752
+ context: CompletionContext
1753
+ ) => Effect.Effect<any>
1754
+ >
1755
+ | undefined
927
1756
  readonly content: (uri: string, ...params: Array<any>) => Effect.Effect<
928
1757
  typeof ReadResourceResult.Type | string | Uint8Array,
929
1758
  E,
@@ -939,11 +1768,20 @@ export const registerResource: {
939
1768
  uriTemplate: uriPath,
940
1769
  annotations: options!
941
1770
  })
942
- const completions: Record<string, (input: string) => Effect.Effect<CompleteResult, InternalError>> = {}
1771
+ const completions: Record<
1772
+ string,
1773
+ (
1774
+ input: string,
1775
+ context: CompletionContext
1776
+ ) => Effect.Effect<CompleteResult, InternalError>
1777
+ > = Object.create(null)
943
1778
  for (const [param, handle] of Object.entries(options.completion ?? {})) {
944
1779
  const encodeArray = Schema.encodeUnknownEffect(Schema.Array(params[param]))
945
- const handler = (input: string) =>
946
- handle(input).pipe(
1780
+ const handler = (
1781
+ input: string,
1782
+ context: CompletionContext
1783
+ ) =>
1784
+ handle(input, context).pipe(
947
1785
  Effect.flatMap(encodeArray),
948
1786
  Effect.map((values) => ({
949
1787
  completion: {
@@ -992,7 +1830,7 @@ export const registerResource: {
992
1830
  *
993
1831
  * @see {@link registerResource} for the Effect-level resource registration API
994
1832
  *
995
- * @category resources
1833
+ * @category layers
996
1834
  * @since 4.0.0
997
1835
  */
998
1836
  export const resource: {
@@ -1005,7 +1843,7 @@ export const resource: {
1005
1843
  *
1006
1844
  * @see {@link registerResource} for the Effect-level resource registration API
1007
1845
  *
1008
- * @category resources
1846
+ * @category layers
1009
1847
  * @since 4.0.0
1010
1848
  */
1011
1849
  <E, R>(
@@ -1032,7 +1870,7 @@ export const resource: {
1032
1870
  *
1033
1871
  * @see {@link registerResource} for the Effect-level resource registration API
1034
1872
  *
1035
- * @category resources
1873
+ * @category layers
1036
1874
  * @since 4.0.0
1037
1875
  */
1038
1876
  <const Schemas extends ReadonlyArray<Schema.Constraint>>(segments: TemplateStringsArray, ...schemas: Schemas): <
@@ -1091,7 +1929,7 @@ export const resource: {
1091
1929
  *
1092
1930
  * @see {@link prompt} for the layer-based prompt registration wrapper
1093
1931
  *
1094
- * @category prompts
1932
+ * @category handlers
1095
1933
  * @since 4.0.0
1096
1934
  */
1097
1935
  export const registerPrompt = <
@@ -1099,7 +1937,10 @@ export const registerPrompt = <
1099
1937
  R,
1100
1938
  Params extends Schema.Struct.Fields = {},
1101
1939
  const Completions extends {
1102
- readonly [K in keyof Params]?: (input: string) => Effect.Effect<Array<Params[K]>, any, any>
1940
+ readonly [K in keyof Params]?: (
1941
+ input: string,
1942
+ context: CompletionContext
1943
+ ) => Effect.Effect<Array<Params[K]>, any, any>
1103
1944
  } = {}
1104
1945
  >(
1105
1946
  options: {
@@ -1128,18 +1969,30 @@ export const registerPrompt = <
1128
1969
  const decode = options.parameters
1129
1970
  ? Schema.decodeEffect(Schema.Struct(props))
1130
1971
  : () => Effect.succeed({} as Params)
1131
- const completion: Record<string, (input: string) => Effect.Effect<any>> = options.completion ?? {}
1972
+ const completion: Record<
1973
+ string,
1974
+ (
1975
+ input: string,
1976
+ context: CompletionContext
1977
+ ) => Effect.Effect<any>
1978
+ > = options.completion ?? {}
1132
1979
  return Effect.gen(function*() {
1133
1980
  const registry = yield* McpServer
1134
1981
  const services = yield* Effect.context<Exclude<R | Schema.Struct.DecodingServices<Params>, McpServerClient>>()
1135
1982
  const completions: Record<
1136
1983
  string,
1137
- (input: string) => Effect.Effect<CompleteResult, InternalError, McpServerClient>
1138
- > = {}
1984
+ (
1985
+ input: string,
1986
+ context: CompletionContext
1987
+ ) => Effect.Effect<CompleteResult, InternalError, McpServerClient>
1988
+ > = Object.create(null)
1139
1989
  for (const [param, handle] of Object.entries(completion)) {
1140
1990
  const encodeArray = Schema.encodeEffect(Schema.Array(props[param]))
1141
- const handler = (input: string) =>
1142
- handle(input).pipe(
1991
+ const handler = (
1992
+ input: string,
1993
+ context: CompletionContext
1994
+ ) =>
1995
+ handle(input, context).pipe(
1143
1996
  Effect.flatMap(encodeArray),
1144
1997
  Effect.map((values) => ({
1145
1998
  completion: {
@@ -1163,7 +2016,14 @@ export const registerPrompt = <
1163
2016
  handle: (params) =>
1164
2017
  decode(params).pipe(
1165
2018
  Effect.mapError((error) => new InvalidParams({ message: error.message })),
1166
- Effect.flatMap((params) => options.content(params as any)),
2019
+ Effect.flatMap((params) =>
2020
+ options.content(params as any).pipe(
2021
+ Effect.catchCause((cause) => {
2022
+ const prettyError = Cause.prettyErrors(cause)[0]
2023
+ return Effect.fail(new InternalError({ message: prettyError.message }))
2024
+ })
2025
+ )
2026
+ ),
1167
2027
  Effect.map((messages) => {
1168
2028
  messages = typeof messages === "string" ?
1169
2029
  [{
@@ -1173,10 +2033,6 @@ export const registerPrompt = <
1173
2033
  messages
1174
2034
  return new GetPromptResult({ messages, description: prompt.description })
1175
2035
  }),
1176
- Effect.catchCause((cause) => {
1177
- const prettyError = Cause.prettyErrors(cause)[0]
1178
- return Effect.fail(new InternalError({ message: prettyError.message }))
1179
- }),
1180
2036
  Effect.provideContext(services as Context.Context<unknown>)
1181
2037
  )
1182
2038
  })
@@ -1198,7 +2054,7 @@ export const registerPrompt = <
1198
2054
  *
1199
2055
  * @see {@link registerPrompt} for the Effect-level prompt registration API
1200
2056
  *
1201
- * @category prompts
2057
+ * @category layers
1202
2058
  * @since 4.0.0
1203
2059
  */
1204
2060
  export const prompt = <
@@ -1206,7 +2062,10 @@ export const prompt = <
1206
2062
  R,
1207
2063
  Params extends Schema.Struct.Fields = {},
1208
2064
  const Completions extends {
1209
- readonly [K in keyof Params]?: (input: string) => Effect.Effect<Array<Params[K]["Type"]>, any, any>
2065
+ readonly [K in keyof Params]?: (
2066
+ input: string,
2067
+ context: CompletionContext
2068
+ ) => Effect.Effect<Array<Params[K]["Type"]>, any, any>
1210
2069
  } = {}
1211
2070
  >(
1212
2071
  options: {
@@ -1233,7 +2092,7 @@ export const prompt = <
1233
2092
  * Accepted content is decoded with the supplied schema, declined requests fail
1234
2093
  * with `ElicitationDeclined`, and canceled requests interrupt the effect.
1235
2094
  *
1236
- * @category elicitation
2095
+ * @category accessors
1237
2096
  * @since 4.0.0
1238
2097
  */
1239
2098
  export const elicit: <S extends Schema.ConstraintEncoder<Record<string, unknown>, unknown>>(options: {
@@ -1254,7 +2113,7 @@ export const elicit: <S extends Schema.ConstraintEncoder<Record<string, unknown>
1254
2113
  message: options.message,
1255
2114
  requestedSchema: Tool.getJsonSchemaFromSchema(schema)
1256
2115
  })
1257
- const res = yield* client["elicitation/create"](request).pipe(
2116
+ const res = yield* client.elicit(request).pipe(
1258
2117
  Effect.catchCause((cause) => Effect.fail(new ElicitationDeclined({ cause: Cause.squash(cause), request })))
1259
2118
  )
1260
2119
  switch (res.action) {
@@ -1270,14 +2129,14 @@ export const elicit: <S extends Schema.ConstraintEncoder<Record<string, unknown>
1270
2129
  /**
1271
2130
  * Accesses the current client's capabilities.
1272
2131
  *
1273
- * @category capabilities
2132
+ * @category accessors
1274
2133
  * @since 4.0.0
1275
2134
  */
1276
2135
  export const clientCapabilities: Effect.Effect<
1277
2136
  ClientCapabilities,
1278
2137
  never,
1279
2138
  McpServerClient
1280
- > = McpServerClient.useSync((_) => _.initializePayload.capabilities)
2139
+ > = McpServerClient.useSync((_) => _.clientCapabilities)
1281
2140
 
1282
2141
  // -----------------------------------------------------------------------------
1283
2142
  // Internal
@@ -1300,7 +2159,7 @@ const makeUriMatcher = <A>() => {
1300
2159
  const compileUriTemplate = (segments: TemplateStringsArray, ...schemas: ReadonlyArray<Schema.Constraint>) => {
1301
2160
  let routerPath = segments[0].replace(":", "::")
1302
2161
  let uriPath = segments[0]
1303
- const params: Record<string, Schema.Top> = {}
2162
+ const params: Record<string, Schema.Top> = Object.create(null)
1304
2163
  let pathSchema = Schema.Tuple([]) as Schema.Top
1305
2164
  if (schemas.length > 0) {
1306
2165
  const arr: Array<Schema.Top> = []
@@ -1325,143 +2184,143 @@ const compileUriTemplate = (segments: TemplateStringsArray, ...schemas: Readonly
1325
2184
  } as const
1326
2185
  }
1327
2186
 
2187
+ const PingRpcs = RpcGroup.make(Ping).middleware(McpServerClientMiddleware)
1328
2188
  const layerHandlers = (serverInfo: {
1329
2189
  readonly name: string
1330
2190
  readonly version: string
1331
- readonly extensions?: Record<`${string}/${string}`, unknown> | undefined
2191
+ readonly extensions?: ServerExtensions | undefined
1332
2192
  }, options: {
1333
- readonly clientSessions: Map<string, typeof Initialize.payloadSchema.Type>
2193
+ readonly sessions: Sessions
2194
+ readonly protocolRegistry: McpProtocolRegistry.ProtocolRegistry<McpProtocol.ProtocolAdapter>
1334
2195
  }) =>
1335
- ClientRpcs.toLayer(
2196
+ Layer.effectContext(
1336
2197
  Effect.gen(function*() {
1337
2198
  const server = yield* McpServer
1338
- let currentLogLevel = yield* CurrentLogLevel
1339
-
1340
- return ClientRpcs.of({
1341
- // Requests
1342
- ping: () => Effect.succeed({}),
1343
- initialize(params, { client }) {
1344
- const requestedVersion = SUPPORTED_PROTOCOL_VERSIONS.includes(params.protocolVersion)
1345
- ? params.protocolVersion
1346
- : LATEST_PROTOCOL_VERSION
1347
- if (requestedVersion !== params.protocolVersion) {
1348
- params = {
1349
- ...params,
1350
- protocolVersion: requestedVersion
1351
- }
1352
- }
1353
- const capabilities: Types.DeepMutable<typeof ServerCapabilities.Type> = {
1354
- completions: {}
1355
- }
1356
- if (server.tools.length > 0) {
1357
- capabilities.tools = { listChanged: true }
1358
- }
1359
- if (server.resources.length > 0 || server.resourceTemplates.length > 0) {
1360
- capabilities.resources = {
1361
- listChanged: true,
1362
- subscribe: false
1363
- }
1364
- }
1365
- if (server.prompts.length > 0) {
1366
- capabilities.prompts = { listChanged: true }
1367
- }
1368
- if (serverInfo.extensions) {
1369
- capabilities.extensions = serverInfo.extensions as any
1370
- }
1371
- return Effect.withFiber((fiber) => {
1372
- const httpRequest = Context.getOrUndefined(fiber.context, HttpServerRequest.HttpServerRequest)
1373
- if (httpRequest) {
1374
- const sessionId = crypto.randomUUID()
1375
- options.clientSessions.set(sessionId, params)
1376
- appendPreResponseHandlerUnsafe(httpRequest, (_req, res) =>
1377
- Effect.succeed(HttpServerResponse.setHeaders(res, {
1378
- [mcpSessionIdHeader]: sessionId,
1379
- [mcpProtocolVersionHeader]: requestedVersion
1380
- })))
1381
- } else {
1382
- options.clientSessions.set(String(client.id), params)
2199
+ const defaultLogLevel = yield* CurrentLogLevel
2200
+ const contextMap = new Map<string, unknown>()
2201
+ const internalCore = internalState.get(server)!.core
2202
+ const handlerTarget = options.protocolRegistry.handlerTarget(contextMap)
2203
+
2204
+ for (const protocol of options.protocolRegistry.protocols) {
2205
+ const wireHandlers = PingRpcs.of({
2206
+ // Requests
2207
+ ping: () => Effect.succeed({})
2208
+ })
2209
+ yield* handlerTarget.install(protocol, PingRpcs, wireHandlers)
2210
+ const lifecycle: McpProtocolInternal.LifecycleRuntime = {
2211
+ initialize: Effect.fnUntraced(
2212
+ function*(protocolVersion, profile, clientId) {
2213
+ const presence = yield* internalCore.registrationPresence
2214
+ let capabilities: McpCore.CanonicalServerCapabilities = {
2215
+ completions: true,
2216
+ logging: true
2217
+ }
2218
+ if (presence.tools) {
2219
+ capabilities = { ...capabilities, tools: { listChanged: true } }
2220
+ }
2221
+ if (presence.resources) {
2222
+ capabilities = {
2223
+ ...capabilities,
2224
+ resources: {
2225
+ listChanged: true,
2226
+ subscribe: true
2227
+ }
2228
+ }
2229
+ }
2230
+ if (presence.prompts) {
2231
+ capabilities = { ...capabilities, prompts: { listChanged: true } }
2232
+ }
2233
+ if (serverInfo.extensions) {
2234
+ capabilities = {
2235
+ ...capabilities,
2236
+ extensions: serverInfo.extensions
2237
+ }
2238
+ }
2239
+ return yield* Effect.withFiber((fiber) => {
2240
+ const httpRequest = Context.getOrUndefined(fiber.context, HttpServerRequest.HttpServerRequest)
2241
+ if (httpRequest !== undefined && capabilities.resources !== undefined) {
2242
+ capabilities = {
2243
+ ...capabilities,
2244
+ resources: { ...capabilities.resources, subscribe: false }
2245
+ }
2246
+ }
2247
+ const initializePayload = Initialize.payloadSchema.make({
2248
+ protocolVersion,
2249
+ capabilities: profile.clientCapabilities,
2250
+ clientInfo: profile.clientInfo,
2251
+ _meta: profile.requestMetadata
2252
+ })
2253
+ const session: Session = {
2254
+ initializePayload,
2255
+ negotiatedProfile: profile,
2256
+ protocol,
2257
+ resourceSubscriptions: httpRequest === undefined && capabilities.resources?.subscribe === true
2258
+ ? new Set()
2259
+ : undefined,
2260
+ logLevel: { _tag: "Effect", level: defaultLogLevel }
2261
+ }
2262
+ if (httpRequest) {
2263
+ const sessionId = crypto.randomUUID()
2264
+ options.sessions.bySessionId.set(sessionId, session)
2265
+ appendPreResponseHandlerUnsafe(httpRequest, (_req, res) =>
2266
+ Effect.succeed(HttpServerResponse.setHeaders(res, {
2267
+ [MCP_SESSION_ID_HEADER]: sessionId,
2268
+ [MCP_PROTOCOL_VERSION_HEADER]: protocol.protocolVersion
2269
+ })))
2270
+ } else {
2271
+ options.sessions.byClientId.set(clientId, session)
2272
+ }
2273
+ return Effect.succeed({
2274
+ capabilities,
2275
+ serverInfo: {
2276
+ name: serverInfo.name,
2277
+ version: serverInfo.version
2278
+ }
2279
+ })
2280
+ })
1383
2281
  }
1384
- return Effect.succeed({
1385
- capabilities,
1386
- serverInfo,
1387
- protocolVersion: requestedVersion
1388
- })
1389
- })
1390
- },
1391
- "completion/complete": (r) =>
1392
- server.completion(r).pipe(
1393
- Effect.provideService(CurrentLogLevel, currentLogLevel)
1394
2282
  ),
1395
- "logging/setLevel": ({ level }) =>
1396
- Effect.sync(() => {
1397
- switch (level) {
1398
- case "notice":
1399
- case "info":
1400
- currentLogLevel = "Info"
1401
- break
1402
- case "error":
1403
- currentLogLevel = "Error"
1404
- break
1405
- case "debug":
1406
- currentLogLevel = "Debug"
1407
- break
1408
- case "warning":
1409
- currentLogLevel = "Warn"
1410
- break
1411
- case "critical":
1412
- case "alert":
1413
- case "emergency":
1414
- currentLogLevel = "Fatal"
1415
- break
2283
+ setLogLevel: Effect.fnUntraced(function*(level, clientId, headers) {
2284
+ const session = getClientSession(options.sessions, clientId, headers)
2285
+ if (session === undefined) {
2286
+ return
1416
2287
  }
2288
+ session.logLevel = { _tag: "Mcp", level }
1417
2289
  }),
1418
- "prompts/get": (r) =>
1419
- server.getPromptResult(r).pipe(
1420
- Effect.provideService(CurrentLogLevel, currentLogLevel)
1421
- ),
1422
- "prompts/list": (_, { client, headers }) =>
1423
- Effect.sync(() => {
1424
- const initialized = getInitializedClient(options.clientSessions, client.id, headers)
1425
- return new ListPromptsResult({ prompts: filterByClient(initialized, server.prompts, "prompt") })
1426
- }),
1427
- "resources/list": (_, { client, headers }) =>
1428
- Effect.sync(() => {
1429
- const initialized = getInitializedClient(options.clientSessions, client.id, headers)
1430
- return new ListResourcesResult({ resources: filterByClient(initialized, server.resources, "resource") })
1431
- }),
1432
- "resources/read": ({ uri }) =>
1433
- server.findResource(uri).pipe(
1434
- Effect.provideService(CurrentLogLevel, currentLogLevel)
1435
- ),
1436
- "resources/subscribe": () =>
1437
- InternalError.notImplemented,
1438
- "resources/unsubscribe": () =>
1439
- InternalError.notImplemented,
1440
- "resources/templates/list": (_, { client, headers }) =>
1441
- Effect.sync(() => {
1442
- const initialized = getInitializedClient(options.clientSessions, client.id, headers)
1443
- return new ListResourceTemplatesResult({
1444
- resourceTemplates: filterByClient(initialized, server.resourceTemplates, "template")
1445
- })
2290
+ subscribe: Effect.fnUntraced(function*(uri, clientId, headers) {
2291
+ const subscriptions = getClientSession(options.sessions, clientId, headers)?.resourceSubscriptions
2292
+ if (subscriptions === undefined) {
2293
+ return yield* new McpProtocolInternal.ProtocolError({
2294
+ code: McpSchema.METHOD_NOT_FOUND_ERROR_CODE,
2295
+ message: "Resource subscriptions are not supported"
2296
+ })
2297
+ }
2298
+ subscriptions.add(uri)
1446
2299
  }),
1447
- "tools/call": (r) =>
1448
- server.callTool(r).pipe(
1449
- Effect.provideService(CurrentLogLevel, currentLogLevel)
1450
- ),
1451
- "tools/list": (_, { client, headers }) =>
1452
- Effect.sync(() => {
1453
- const initialized = getInitializedClient(options.clientSessions, client.id, headers)
1454
- return new ListToolsResult({
1455
- tools: filterByClient(initialized, server.tools, "tool")
1456
- })
2300
+ unsubscribe: Effect.fnUntraced(function*(uri, clientId, headers) {
2301
+ const subscriptions = getClientSession(options.sessions, clientId, headers)?.resourceSubscriptions
2302
+ if (subscriptions === undefined) {
2303
+ return yield* new McpProtocolInternal.ProtocolError({
2304
+ code: McpSchema.METHOD_NOT_FOUND_ERROR_CODE,
2305
+ message: "Resource subscriptions are not supported"
2306
+ })
2307
+ }
2308
+ subscriptions.delete(uri)
1457
2309
  }),
1458
-
1459
- // Notifications
1460
- "notifications/cancelled": (_) => Effect.void,
1461
- "notifications/initialized": (_) => Effect.void,
1462
- "notifications/progress": (_) => Effect.void,
1463
- "notifications/roots/list_changed": (_) => Effect.void
1464
- })
2310
+ clientNotification: Effect.fnUntraced(function*(notification, clientId) {
2311
+ if (notification._tag === "Initialized") {
2312
+ server.initializedClients.add(clientId)
2313
+ }
2314
+ return
2315
+ })
2316
+ }
2317
+ yield* protocol.installHandlers(
2318
+ internalCore,
2319
+ lifecycle,
2320
+ handlerTarget
2321
+ )
2322
+ }
2323
+ return Context.makeUnsafe(contextMap)
1465
2324
  })
1466
2325
  )
1467
2326
 
@@ -1487,38 +2346,84 @@ const resolveResourceContent = (
1487
2346
  return content
1488
2347
  }
1489
2348
 
1490
- const filterByClient = <
1491
- A extends {
1492
- readonly annotations: Context.Context<never>
1493
- },
1494
- P extends keyof A
1495
- >(
1496
- client: typeof Initialize.payloadSchema.Type | undefined,
1497
- items: ReadonlyArray<A>,
1498
- prop: P
1499
- ): Array<A[P]> => {
1500
- if (!client) {
1501
- return items.map((item) => item[prop])
1502
- }
1503
- const out = Arr.empty<A[P]>()
1504
- for (let i = 0; i < items.length; i++) {
1505
- const item = items[i]
1506
- const enabledWhen = Context.getOrUndefined(item.annotations, EnabledWhen)
1507
- if (!enabledWhen || enabledWhen(client)) {
1508
- out.push(item[prop])
1509
- }
1510
- }
1511
- return out
1512
- }
1513
-
1514
- const getInitializedClient = (
1515
- sessions: Map<string, typeof Initialize.payloadSchema.Type>,
2349
+ const getClientSession = (
2350
+ sessions: Sessions,
1516
2351
  clientId: number,
1517
2352
  headers: Headers.Headers
1518
2353
  ) => {
1519
- const sessionId = headers[mcpSessionIdHeader]
2354
+ const sessionId = headers[MCP_SESSION_ID_HEADER]
1520
2355
  if (sessionId === undefined) {
1521
- return sessions.get(String(clientId))
2356
+ return sessions.byClientId.get(clientId)
1522
2357
  }
1523
- return sessions.get(sessionId)
2358
+ return sessions.bySessionId.get(sessionId)
1524
2359
  }
2360
+
2361
+ const InvalidBatchExit = Schema.Struct({
2362
+ _tag: Schema.Literal("Exit"),
2363
+ requestId: Schema.Null,
2364
+ exit: Schema.Struct({
2365
+ _tag: Schema.Literal("Failure"),
2366
+ cause: Schema.Unknown
2367
+ })
2368
+ })
2369
+
2370
+ const decodeInvalidBatchExit = Schema.decodeUnknownResult(InvalidBatchExit)
2371
+
2372
+ const mcpLogLevels: Record<McpSchema.LoggingLevel, { readonly effect: LogLevel.LogLevel; readonly order: number }> = {
2373
+ debug: { effect: "Debug", order: 0 },
2374
+ info: { effect: "Info", order: 1 },
2375
+ notice: { effect: "Info", order: 2 },
2376
+ warning: { effect: "Warn", order: 3 },
2377
+ error: { effect: "Error", order: 4 },
2378
+ critical: { effect: "Fatal", order: 5 },
2379
+ alert: { effect: "Fatal", order: 6 },
2380
+ emergency: { effect: "Fatal", order: 7 }
2381
+ }
2382
+
2383
+ const effectLogLevel = (logLevel: SessionLogLevel | undefined, fallback: LogLevel.LogLevel): LogLevel.LogLevel =>
2384
+ logLevel?._tag === "Mcp" ? mcpLogLevels[logLevel.level].effect : logLevel?.level ?? fallback
2385
+
2386
+ const isMcpLogLevelEnabled = (
2387
+ level: McpSchema.LoggingLevel,
2388
+ minimum: SessionLogLevel | undefined,
2389
+ fallback: LogLevel.LogLevel
2390
+ ): boolean =>
2391
+ minimum?._tag === "Mcp"
2392
+ ? mcpLogLevels[level].order >= mcpLogLevels[minimum.level].order
2393
+ : LogLevel.isGreaterThanOrEqualTo(mcpLogLevels[level].effect, minimum?.level ?? fallback)
2394
+
2395
+ const OfferedProtocolVersion = Schema.Struct({
2396
+ protocolVersion: Schema.String
2397
+ })
2398
+
2399
+ const getOfferedProtocolVersion = (payload: unknown): string => {
2400
+ const decoded = Schema.decodeUnknownResult(OfferedProtocolVersion)(payload)
2401
+ return Result.isSuccess(decoded) ? decoded.success.protocolVersion : ""
2402
+ }
2403
+
2404
+ const protocolForInternalTag = (
2405
+ registry: McpProtocolRegistry.ProtocolRegistry<McpProtocol.ProtocolAdapter>,
2406
+ tag: string
2407
+ ): McpProtocol.ProtocolAdapter => {
2408
+ for (const protocol of registry.protocols) {
2409
+ const routed = registry.routeClientRequest(protocol, {
2410
+ _tag: "Request",
2411
+ id: 0,
2412
+ tag: "",
2413
+ payload: undefined,
2414
+ headers: []
2415
+ })
2416
+ if (tag.startsWith(routed.tag)) {
2417
+ return protocol
2418
+ }
2419
+ }
2420
+ return registry.protocols[0]
2421
+ }
2422
+
2423
+ const getProtocolForClient = (
2424
+ clientProtocols: Map<number, McpProtocol.ProtocolAdapter>,
2425
+ clientId: number,
2426
+ registry: McpProtocolRegistry.ProtocolRegistry<McpProtocol.ProtocolAdapter>
2427
+ ): McpProtocol.ProtocolAdapter =>
2428
+ clientProtocols.get(clientId) ??
2429
+ registry.protocols[0]