effect 4.0.6 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (978) hide show
  1. package/README.md +1 -1
  2. package/dist/Arbitrary.d.ts +10 -2
  3. package/dist/Arbitrary.d.ts.map +1 -1
  4. package/dist/Arbitrary.js +2 -1
  5. package/dist/Arbitrary.js.map +1 -1
  6. package/dist/BigDecimal.d.ts.map +1 -1
  7. package/dist/BigDecimal.js +3 -0
  8. package/dist/BigDecimal.js.map +1 -1
  9. package/dist/Channel.d.ts +12 -6
  10. package/dist/Channel.d.ts.map +1 -1
  11. package/dist/Channel.js +30 -9
  12. package/dist/Channel.js.map +1 -1
  13. package/dist/Config.d.ts +7 -1
  14. package/dist/Config.d.ts.map +1 -1
  15. package/dist/Config.js.map +1 -1
  16. package/dist/Context.d.ts +18 -1
  17. package/dist/Context.d.ts.map +1 -1
  18. package/dist/Context.js +27 -8
  19. package/dist/Context.js.map +1 -1
  20. package/dist/Cron.d.ts +81 -11
  21. package/dist/Cron.d.ts.map +1 -1
  22. package/dist/Cron.js +101 -26
  23. package/dist/Cron.js.map +1 -1
  24. package/dist/Data.d.ts +54 -235
  25. package/dist/Data.d.ts.map +1 -1
  26. package/dist/Data.js.map +1 -1
  27. package/dist/Duration.d.ts +78 -0
  28. package/dist/Duration.d.ts.map +1 -1
  29. package/dist/Duration.js +123 -0
  30. package/dist/Duration.js.map +1 -1
  31. package/dist/Effect.d.ts +165 -8
  32. package/dist/Effect.d.ts.map +1 -1
  33. package/dist/Effect.js +12 -2
  34. package/dist/Effect.js.map +1 -1
  35. package/dist/Equal.d.ts.map +1 -1
  36. package/dist/Equal.js +8 -1
  37. package/dist/Equal.js.map +1 -1
  38. package/dist/Exit.d.ts +3 -3
  39. package/dist/Exit.d.ts.map +1 -1
  40. package/dist/Exit.js.map +1 -1
  41. package/dist/FileSystem.d.ts +59 -4
  42. package/dist/FileSystem.d.ts.map +1 -1
  43. package/dist/FileSystem.js +9 -2
  44. package/dist/FileSystem.js.map +1 -1
  45. package/dist/Formatter.d.ts.map +1 -1
  46. package/dist/Formatter.js +27 -13
  47. package/dist/Formatter.js.map +1 -1
  48. package/dist/Glob.d.ts +165 -0
  49. package/dist/Glob.d.ts.map +1 -0
  50. package/dist/Glob.js +127 -0
  51. package/dist/Glob.js.map +1 -0
  52. package/dist/Hash.d.ts.map +1 -1
  53. package/dist/Hash.js +4 -1
  54. package/dist/Hash.js.map +1 -1
  55. package/dist/JsonPatch.js +4 -0
  56. package/dist/JsonPatch.js.map +1 -1
  57. package/dist/JsonSchema.d.ts.map +1 -1
  58. package/dist/JsonSchema.js +13 -40
  59. package/dist/JsonSchema.js.map +1 -1
  60. package/dist/Match.d.ts +86 -0
  61. package/dist/Match.d.ts.map +1 -1
  62. package/dist/Match.js +72 -0
  63. package/dist/Match.js.map +1 -1
  64. package/dist/Metric.d.ts +3 -3
  65. package/dist/MutableList.d.ts +5 -2
  66. package/dist/MutableList.d.ts.map +1 -1
  67. package/dist/MutableList.js +7 -5
  68. package/dist/MutableList.js.map +1 -1
  69. package/dist/MutableRef.d.ts.map +1 -1
  70. package/dist/MutableRef.js +7 -0
  71. package/dist/MutableRef.js.map +1 -1
  72. package/dist/PartitionedSemaphore.d.ts +2 -1
  73. package/dist/PartitionedSemaphore.d.ts.map +1 -1
  74. package/dist/PartitionedSemaphore.js +22 -12
  75. package/dist/PartitionedSemaphore.js.map +1 -1
  76. package/dist/Pool.d.ts +51 -0
  77. package/dist/Pool.d.ts.map +1 -1
  78. package/dist/Pool.js +136 -36
  79. package/dist/Pool.js.map +1 -1
  80. package/dist/PubSub.d.ts.map +1 -1
  81. package/dist/PubSub.js +5 -6
  82. package/dist/PubSub.js.map +1 -1
  83. package/dist/Random.d.ts.map +1 -1
  84. package/dist/Random.js +3 -3
  85. package/dist/Random.js.map +1 -1
  86. package/dist/RcMap.d.ts.map +1 -1
  87. package/dist/RcMap.js +8 -2
  88. package/dist/RcMap.js.map +1 -1
  89. package/dist/Ref.d.ts.map +1 -1
  90. package/dist/Ref.js +8 -0
  91. package/dist/Ref.js.map +1 -1
  92. package/dist/Schedule.d.ts +18 -1
  93. package/dist/Schedule.d.ts.map +1 -1
  94. package/dist/Schedule.js +8 -3
  95. package/dist/Schedule.js.map +1 -1
  96. package/dist/Schema.d.ts +690 -49
  97. package/dist/Schema.d.ts.map +1 -1
  98. package/dist/Schema.js +687 -28
  99. package/dist/Schema.js.map +1 -1
  100. package/dist/SchemaAST.d.ts +4 -2
  101. package/dist/SchemaAST.d.ts.map +1 -1
  102. package/dist/SchemaAST.js +14 -17
  103. package/dist/SchemaAST.js.map +1 -1
  104. package/dist/SchemaGetter.d.ts +6 -1
  105. package/dist/SchemaGetter.d.ts.map +1 -1
  106. package/dist/SchemaGetter.js +22 -11
  107. package/dist/SchemaGetter.js.map +1 -1
  108. package/dist/SchemaParser.d.ts.map +1 -1
  109. package/dist/SchemaParser.js +48 -22
  110. package/dist/SchemaParser.js.map +1 -1
  111. package/dist/SchemaRepresentation.d.ts +33 -10
  112. package/dist/SchemaRepresentation.d.ts.map +1 -1
  113. package/dist/SchemaRepresentation.js +39 -13
  114. package/dist/SchemaRepresentation.js.map +1 -1
  115. package/dist/SchemaTransformation.d.ts +12 -4
  116. package/dist/SchemaTransformation.d.ts.map +1 -1
  117. package/dist/SchemaTransformation.js +15 -5
  118. package/dist/SchemaTransformation.js.map +1 -1
  119. package/dist/ScopedCache.d.ts.map +1 -1
  120. package/dist/ScopedCache.js +5 -7
  121. package/dist/ScopedCache.js.map +1 -1
  122. package/dist/Semaphore.d.ts +130 -0
  123. package/dist/Semaphore.d.ts.map +1 -1
  124. package/dist/Semaphore.js +94 -35
  125. package/dist/Semaphore.js.map +1 -1
  126. package/dist/Sink.d.ts.map +1 -1
  127. package/dist/Sink.js +7 -2
  128. package/dist/Sink.js.map +1 -1
  129. package/dist/Stream.d.ts +13 -4
  130. package/dist/Stream.d.ts.map +1 -1
  131. package/dist/Stream.js +31 -10
  132. package/dist/Stream.js.map +1 -1
  133. package/dist/String.d.ts +3 -0
  134. package/dist/String.d.ts.map +1 -1
  135. package/dist/String.js +3 -0
  136. package/dist/String.js.map +1 -1
  137. package/dist/Terminal.d.ts +18 -1
  138. package/dist/Terminal.d.ts.map +1 -1
  139. package/dist/Terminal.js +1 -1
  140. package/dist/Terminal.js.map +1 -1
  141. package/dist/Tracer.d.ts +11 -1
  142. package/dist/Tracer.d.ts.map +1 -1
  143. package/dist/Tracer.js +6 -1
  144. package/dist/Tracer.js.map +1 -1
  145. package/dist/ai/AiError.d.ts +43 -116
  146. package/dist/ai/AiError.d.ts.map +1 -1
  147. package/dist/ai/AiError.js +53 -72
  148. package/dist/ai/AiError.js.map +1 -1
  149. package/dist/ai/Decision.d.ts +196 -15
  150. package/dist/ai/Decision.d.ts.map +1 -1
  151. package/dist/ai/Decision.js +130 -0
  152. package/dist/ai/Decision.js.map +1 -1
  153. package/dist/ai/DecisionModel.d.ts +54 -13
  154. package/dist/ai/DecisionModel.d.ts.map +1 -1
  155. package/dist/ai/DecisionModel.js +123 -12
  156. package/dist/ai/DecisionModel.js.map +1 -1
  157. package/dist/ai/LanguageModel.d.ts.map +1 -1
  158. package/dist/ai/LanguageModel.js +9 -0
  159. package/dist/ai/LanguageModel.js.map +1 -1
  160. package/dist/ai/McpSchema.d.ts +110 -110
  161. package/dist/ai/McpSchema.d.ts.map +1 -1
  162. package/dist/ai/McpServer.d.ts +630 -29
  163. package/dist/ai/McpServer.d.ts.map +1 -1
  164. package/dist/ai/McpServer.js +583 -131
  165. package/dist/ai/McpServer.js.map +1 -1
  166. package/dist/ai/McpTest.d.ts +130 -0
  167. package/dist/ai/McpTest.d.ts.map +1 -0
  168. package/dist/ai/McpTest.js +237 -0
  169. package/dist/ai/McpTest.js.map +1 -0
  170. package/dist/ai/Prompt.d.ts +52 -0
  171. package/dist/ai/Prompt.d.ts.map +1 -1
  172. package/dist/ai/Prompt.js +38 -0
  173. package/dist/ai/Prompt.js.map +1 -1
  174. package/dist/ai/Response.d.ts +17 -28
  175. package/dist/ai/Response.d.ts.map +1 -1
  176. package/dist/ai/Response.js +5 -10
  177. package/dist/ai/Response.js.map +1 -1
  178. package/dist/ai/Tool.d.ts +43 -1
  179. package/dist/ai/Tool.d.ts.map +1 -1
  180. package/dist/ai/Tool.js +5 -2
  181. package/dist/ai/Tool.js.map +1 -1
  182. package/dist/ai/Toolkit.d.ts.map +1 -1
  183. package/dist/ai/Toolkit.js +8 -1
  184. package/dist/ai/Toolkit.js.map +1 -1
  185. package/dist/ai/index.d.ts +5 -0
  186. package/dist/ai/index.d.ts.map +1 -1
  187. package/dist/ai/index.js +5 -0
  188. package/dist/ai/index.js.map +1 -1
  189. package/dist/ai/internal/mcpCore.js +17 -12
  190. package/dist/ai/internal/mcpCore.js.map +1 -1
  191. package/dist/ai/internal/mcpProtocol/v2024_11_05.js +4 -5
  192. package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
  193. package/dist/ai/internal/mcpProtocol/v2025_03_26.js +4 -5
  194. package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
  195. package/dist/ai/internal/mcpProtocol/v2025_06_18.js +4 -5
  196. package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
  197. package/dist/ai/internal/mcpProtocol/v2025_11_25.js +4 -5
  198. package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
  199. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +18 -10
  200. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  201. package/dist/ai/internal/mcpProtocol.js +13 -0
  202. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  203. package/dist/ai/internal/mcpRuntime.js +5 -3
  204. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  205. package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
  206. package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
  207. package/dist/cli/Argument.d.ts +21 -0
  208. package/dist/cli/Argument.d.ts.map +1 -1
  209. package/dist/cli/Argument.js +7 -0
  210. package/dist/cli/Argument.js.map +1 -1
  211. package/dist/cli/CliError.d.ts +78 -0
  212. package/dist/cli/CliError.d.ts.map +1 -1
  213. package/dist/cli/CliError.js +65 -3
  214. package/dist/cli/CliError.js.map +1 -1
  215. package/dist/cli/CliOutput.d.ts +220 -7
  216. package/dist/cli/CliOutput.d.ts.map +1 -1
  217. package/dist/cli/CliOutput.js +156 -43
  218. package/dist/cli/CliOutput.js.map +1 -1
  219. package/dist/cli/Command.d.ts +47 -16
  220. package/dist/cli/Command.d.ts.map +1 -1
  221. package/dist/cli/Command.js +67 -29
  222. package/dist/cli/Command.js.map +1 -1
  223. package/dist/cli/Completions.d.ts +58 -0
  224. package/dist/cli/Completions.d.ts.map +1 -1
  225. package/dist/cli/Completions.js +49 -9
  226. package/dist/cli/Completions.js.map +1 -1
  227. package/dist/cli/Flag.d.ts +122 -0
  228. package/dist/cli/Flag.d.ts.map +1 -1
  229. package/dist/cli/Flag.js +42 -0
  230. package/dist/cli/Flag.js.map +1 -1
  231. package/dist/cli/GlobalFlag.d.ts.map +1 -1
  232. package/dist/cli/GlobalFlag.js +15 -7
  233. package/dist/cli/GlobalFlag.js.map +1 -1
  234. package/dist/cli/HelpDoc.d.ts +15 -1
  235. package/dist/cli/HelpDoc.d.ts.map +1 -1
  236. package/dist/cli/Param.d.ts +15 -0
  237. package/dist/cli/Param.d.ts.map +1 -1
  238. package/dist/cli/Param.js +23 -2
  239. package/dist/cli/Param.js.map +1 -1
  240. package/dist/cli/Primitive.d.ts +14 -0
  241. package/dist/cli/Primitive.d.ts.map +1 -1
  242. package/dist/cli/Primitive.js +15 -1
  243. package/dist/cli/Primitive.js.map +1 -1
  244. package/dist/cli/Prompt.d.ts +1 -0
  245. package/dist/cli/Prompt.d.ts.map +1 -1
  246. package/dist/cli/Prompt.js +1 -0
  247. package/dist/cli/Prompt.js.map +1 -1
  248. package/dist/cli/TerminalCapabilities.d.ts +3 -2
  249. package/dist/cli/TerminalCapabilities.d.ts.map +1 -1
  250. package/dist/cli/TerminalCapabilities.js +3 -1
  251. package/dist/cli/TerminalCapabilities.js.map +1 -1
  252. package/dist/cli/internal/completions/bash.js +73 -27
  253. package/dist/cli/internal/completions/bash.js.map +1 -1
  254. package/dist/cli/internal/help.d.ts.map +1 -1
  255. package/dist/cli/internal/help.js +17 -10
  256. package/dist/cli/internal/help.js.map +1 -1
  257. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  258. package/dist/cluster/ClusterWorkflowEngine.js +45 -10
  259. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  260. package/dist/cluster/MessageStorage.d.ts +23 -45
  261. package/dist/cluster/MessageStorage.d.ts.map +1 -1
  262. package/dist/cluster/MessageStorage.js +6 -7
  263. package/dist/cluster/MessageStorage.js.map +1 -1
  264. package/dist/cluster/Sharding.d.ts.map +1 -1
  265. package/dist/cluster/Sharding.js +151 -49
  266. package/dist/cluster/Sharding.js.map +1 -1
  267. package/dist/cluster/ShardingConfig.d.ts +76 -0
  268. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  269. package/dist/cluster/ShardingConfig.js +4 -0
  270. package/dist/cluster/ShardingConfig.js.map +1 -1
  271. package/dist/cluster/SingleRunner.d.ts +3 -3
  272. package/dist/cluster/SingleRunner.d.ts.map +1 -1
  273. package/dist/cluster/SingleRunner.js +1 -1
  274. package/dist/cluster/Snowflake.d.ts.map +1 -1
  275. package/dist/cluster/Snowflake.js +3 -7
  276. package/dist/cluster/Snowflake.js.map +1 -1
  277. package/dist/cluster/SqlMessageStorage.d.ts +37 -6
  278. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  279. package/dist/cluster/SqlMessageStorage.js +34 -7
  280. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  281. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  282. package/dist/cluster/SqlRunnerStorage.js +109 -46
  283. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  284. package/dist/cluster/internal/entityManager.js +54 -20
  285. package/dist/cluster/internal/entityManager.js.map +1 -1
  286. package/dist/crypto/Aead.d.ts +322 -0
  287. package/dist/crypto/Aead.d.ts.map +1 -0
  288. package/dist/crypto/Aead.js +331 -0
  289. package/dist/crypto/Aead.js.map +1 -0
  290. package/dist/crypto/Cipher.d.ts +235 -0
  291. package/dist/crypto/Cipher.d.ts.map +1 -0
  292. package/dist/crypto/Cipher.js +233 -0
  293. package/dist/crypto/Cipher.js.map +1 -0
  294. package/dist/crypto/CryptoError.d.ts +212 -0
  295. package/dist/crypto/CryptoError.d.ts.map +1 -0
  296. package/dist/crypto/CryptoError.js +202 -0
  297. package/dist/crypto/CryptoError.js.map +1 -0
  298. package/dist/crypto/Digest.d.ts +143 -0
  299. package/dist/crypto/Digest.d.ts.map +1 -0
  300. package/dist/crypto/Digest.js +146 -0
  301. package/dist/crypto/Digest.js.map +1 -0
  302. package/dist/crypto/Kdf.d.ts +220 -0
  303. package/dist/crypto/Kdf.d.ts.map +1 -0
  304. package/dist/crypto/Kdf.js +212 -0
  305. package/dist/crypto/Kdf.js.map +1 -0
  306. package/dist/crypto/KeyAgreement.d.ts +323 -0
  307. package/dist/crypto/KeyAgreement.d.ts.map +1 -0
  308. package/dist/crypto/KeyAgreement.js +303 -0
  309. package/dist/crypto/KeyAgreement.js.map +1 -0
  310. package/dist/crypto/KeyFormat.d.ts +309 -0
  311. package/dist/crypto/KeyFormat.d.ts.map +1 -0
  312. package/dist/crypto/KeyFormat.js +556 -0
  313. package/dist/crypto/KeyFormat.js.map +1 -0
  314. package/dist/crypto/KeyWrap.d.ts +389 -0
  315. package/dist/crypto/KeyWrap.d.ts.map +1 -0
  316. package/dist/crypto/KeyWrap.js +381 -0
  317. package/dist/crypto/KeyWrap.js.map +1 -0
  318. package/dist/crypto/Mac.d.ts +277 -0
  319. package/dist/crypto/Mac.d.ts.map +1 -0
  320. package/dist/crypto/Mac.js +288 -0
  321. package/dist/crypto/Mac.js.map +1 -0
  322. package/dist/crypto/SecureRandom.d.ts +340 -0
  323. package/dist/crypto/SecureRandom.d.ts.map +1 -0
  324. package/dist/crypto/SecureRandom.js +257 -0
  325. package/dist/crypto/SecureRandom.js.map +1 -0
  326. package/dist/crypto/Signature.d.ts +448 -0
  327. package/dist/crypto/Signature.d.ts.map +1 -0
  328. package/dist/crypto/Signature.js +484 -0
  329. package/dist/crypto/Signature.js.map +1 -0
  330. package/dist/crypto/WebCrypto.d.ts +61 -0
  331. package/dist/crypto/WebCrypto.d.ts.map +1 -0
  332. package/dist/crypto/WebCrypto.js +63 -0
  333. package/dist/crypto/WebCrypto.js.map +1 -0
  334. package/dist/crypto/index.d.ts +65 -0
  335. package/dist/crypto/index.d.ts.map +1 -0
  336. package/dist/crypto/index.js +66 -0
  337. package/dist/crypto/index.js.map +1 -0
  338. package/dist/crypto/internal/asymmetric.d.ts +2 -0
  339. package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
  340. package/dist/crypto/internal/asymmetric.js +210 -0
  341. package/dist/crypto/internal/asymmetric.js.map +1 -0
  342. package/dist/crypto/internal/chacha.d.ts +46 -0
  343. package/dist/crypto/internal/chacha.d.ts.map +1 -0
  344. package/dist/crypto/internal/chacha.js +885 -0
  345. package/dist/crypto/internal/chacha.js.map +1 -0
  346. package/dist/crypto/internal/der.d.ts +6 -0
  347. package/dist/crypto/internal/der.d.ts.map +1 -0
  348. package/dist/crypto/internal/der.js +86 -0
  349. package/dist/crypto/internal/der.js.map +1 -0
  350. package/dist/crypto/internal/digest.d.ts +2 -0
  351. package/dist/crypto/internal/digest.d.ts.map +1 -0
  352. package/dist/crypto/internal/digest.js +15 -0
  353. package/dist/crypto/internal/digest.js.map +1 -0
  354. package/dist/crypto/internal/key.d.ts +2 -0
  355. package/dist/crypto/internal/key.d.ts.map +1 -0
  356. package/dist/crypto/internal/key.js +170 -0
  357. package/dist/crypto/internal/key.js.map +1 -0
  358. package/dist/crypto/internal/md5.d.ts +39 -0
  359. package/dist/crypto/internal/md5.d.ts.map +1 -0
  360. package/dist/crypto/internal/md5.js +179 -0
  361. package/dist/crypto/internal/md5.js.map +1 -0
  362. package/dist/crypto/internal/webCrypto.d.ts +2 -0
  363. package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
  364. package/dist/crypto/internal/webCrypto.js +111 -0
  365. package/dist/crypto/internal/webCrypto.js.map +1 -0
  366. package/dist/devtools/DevToolsClient.d.ts.map +1 -1
  367. package/dist/devtools/DevToolsClient.js +2 -0
  368. package/dist/devtools/DevToolsClient.js.map +1 -1
  369. package/dist/encoding/Base64.js +36 -0
  370. package/dist/encoding/Base64.js.map +1 -1
  371. package/dist/encoding/Base64Url.d.ts.map +1 -1
  372. package/dist/encoding/Base64Url.js +3 -2
  373. package/dist/encoding/Base64Url.js.map +1 -1
  374. package/dist/encoding/Csv.d.ts +608 -0
  375. package/dist/encoding/Csv.d.ts.map +1 -0
  376. package/dist/encoding/Csv.js +718 -0
  377. package/dist/encoding/Csv.js.map +1 -0
  378. package/dist/encoding/Hex.d.ts +3 -2
  379. package/dist/encoding/Hex.d.ts.map +1 -1
  380. package/dist/encoding/Hex.js +3 -2
  381. package/dist/encoding/Hex.js.map +1 -1
  382. package/dist/encoding/SchemaBinary.d.ts.map +1 -1
  383. package/dist/encoding/SchemaBinary.js +42 -4
  384. package/dist/encoding/SchemaBinary.js.map +1 -1
  385. package/dist/encoding/Sse.d.ts.map +1 -1
  386. package/dist/encoding/Sse.js +3 -3
  387. package/dist/encoding/Sse.js.map +1 -1
  388. package/dist/encoding/Toml.d.ts +17 -3
  389. package/dist/encoding/Toml.d.ts.map +1 -1
  390. package/dist/encoding/Toml.js +124 -31
  391. package/dist/encoding/Toml.js.map +1 -1
  392. package/dist/encoding/Yaml.d.ts +8 -1
  393. package/dist/encoding/Yaml.d.ts.map +1 -1
  394. package/dist/encoding/Yaml.js +54 -18
  395. package/dist/encoding/Yaml.js.map +1 -1
  396. package/dist/encoding/index.d.ts +5 -0
  397. package/dist/encoding/index.d.ts.map +1 -1
  398. package/dist/encoding/index.js +5 -0
  399. package/dist/encoding/index.js.map +1 -1
  400. package/dist/eventlog/EventJournal.d.ts.map +1 -1
  401. package/dist/eventlog/EventJournal.js +6 -3
  402. package/dist/eventlog/EventJournal.js.map +1 -1
  403. package/dist/eventlog/EventLog.d.ts +119 -4
  404. package/dist/eventlog/EventLog.d.ts.map +1 -1
  405. package/dist/eventlog/EventLog.js +200 -12
  406. package/dist/eventlog/EventLog.js.map +1 -1
  407. package/dist/eventlog/EventLogEncryption.d.ts +41 -4
  408. package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
  409. package/dist/eventlog/EventLogEncryption.js +83 -64
  410. package/dist/eventlog/EventLogEncryption.js.map +1 -1
  411. package/dist/eventlog/EventLogMessage.d.ts +279 -0
  412. package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
  413. package/dist/eventlog/EventLogMessage.js +217 -1
  414. package/dist/eventlog/EventLogMessage.js.map +1 -1
  415. package/dist/eventlog/EventLogRemote.d.ts +200 -28
  416. package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
  417. package/dist/eventlog/EventLogRemote.js +186 -16
  418. package/dist/eventlog/EventLogRemote.js.map +1 -1
  419. package/dist/eventlog/EventLogServer.d.ts +3 -0
  420. package/dist/eventlog/EventLogServer.d.ts.map +1 -1
  421. package/dist/eventlog/EventLogServer.js +18 -10
  422. package/dist/eventlog/EventLogServer.js.map +1 -1
  423. package/dist/eventlog/EventLogServerEncrypted.d.ts +326 -5
  424. package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  425. package/dist/eventlog/EventLogServerEncrypted.js +769 -14
  426. package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
  427. package/dist/eventlog/EventLogSessionAuth.d.ts +5 -3
  428. package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
  429. package/dist/eventlog/EventLogSessionAuth.js +41 -64
  430. package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
  431. package/dist/eventlog/EventRow.d.ts +4 -0
  432. package/dist/eventlog/EventRow.d.ts.map +1 -1
  433. package/dist/eventlog/EventRow.js +12 -2
  434. package/dist/eventlog/EventRow.js.map +1 -1
  435. package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
  436. package/dist/eventlog/SqlEventJournal.js +47 -27
  437. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  438. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
  439. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  440. package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
  441. package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  442. package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
  443. package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  444. package/dist/eventlog/internal/batches.d.ts +12 -0
  445. package/dist/eventlog/internal/batches.d.ts.map +1 -0
  446. package/dist/eventlog/internal/batches.js +26 -0
  447. package/dist/eventlog/internal/batches.js.map +1 -0
  448. package/dist/eventlog/internal/compaction.d.ts +38 -0
  449. package/dist/eventlog/internal/compaction.d.ts.map +1 -0
  450. package/dist/eventlog/internal/compaction.js +33 -0
  451. package/dist/eventlog/internal/compaction.js.map +1 -0
  452. package/dist/eventlog/internal/conflicts.d.ts +0 -1
  453. package/dist/eventlog/internal/conflicts.d.ts.map +1 -1
  454. package/dist/eventlog/internal/conflicts.js +0 -3
  455. package/dist/eventlog/internal/conflicts.js.map +1 -1
  456. package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
  457. package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
  458. package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
  459. package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
  460. package/dist/eventlog/internal/remoteCompaction.js +76 -0
  461. package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
  462. package/dist/http/Cookies.d.ts +172 -0
  463. package/dist/http/Cookies.d.ts.map +1 -1
  464. package/dist/http/Cookies.js +153 -10
  465. package/dist/http/Cookies.js.map +1 -1
  466. package/dist/http/FetchHttpClient.d.ts +26 -2
  467. package/dist/http/FetchHttpClient.d.ts.map +1 -1
  468. package/dist/http/FetchHttpClient.js +78 -15
  469. package/dist/http/FetchHttpClient.js.map +1 -1
  470. package/dist/http/HttpClient.d.ts +502 -8
  471. package/dist/http/HttpClient.d.ts.map +1 -1
  472. package/dist/http/HttpClient.js +296 -12
  473. package/dist/http/HttpClient.js.map +1 -1
  474. package/dist/http/HttpClientError.d.ts +8 -1
  475. package/dist/http/HttpClientError.d.ts.map +1 -1
  476. package/dist/http/HttpClientError.js +37 -1
  477. package/dist/http/HttpClientError.js.map +1 -1
  478. package/dist/http/HttpClientRequest.d.ts +9 -5
  479. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  480. package/dist/http/HttpClientRequest.js +3 -4
  481. package/dist/http/HttpClientRequest.js.map +1 -1
  482. package/dist/http/HttpClientResponse.d.ts.map +1 -1
  483. package/dist/http/HttpClientResponse.js +3 -2
  484. package/dist/http/HttpClientResponse.js.map +1 -1
  485. package/dist/http/HttpMethod.d.ts +7 -1
  486. package/dist/http/HttpMethod.d.ts.map +1 -1
  487. package/dist/http/HttpMethod.js +3 -8
  488. package/dist/http/HttpMethod.js.map +1 -1
  489. package/dist/http/HttpMiddleware.d.ts +1 -1
  490. package/dist/http/HttpMiddleware.d.ts.map +1 -1
  491. package/dist/http/HttpMiddleware.js +14 -16
  492. package/dist/http/HttpMiddleware.js.map +1 -1
  493. package/dist/http/HttpRouter.d.ts.map +1 -1
  494. package/dist/http/HttpRouter.js +2 -1
  495. package/dist/http/HttpRouter.js.map +1 -1
  496. package/dist/http/HttpServerError.js +2 -2
  497. package/dist/http/HttpServerError.js.map +1 -1
  498. package/dist/http/HttpServerRequest.d.ts +11 -3
  499. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  500. package/dist/http/HttpServerRequest.js +77 -25
  501. package/dist/http/HttpServerRequest.js.map +1 -1
  502. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  503. package/dist/http/HttpServerResponse.js +3 -2
  504. package/dist/http/HttpServerResponse.js.map +1 -1
  505. package/dist/http/HttpStaticServer.d.ts.map +1 -1
  506. package/dist/http/HttpStaticServer.js +48 -21
  507. package/dist/http/HttpStaticServer.js.map +1 -1
  508. package/dist/http/HttpTraceContext.d.ts +2 -1
  509. package/dist/http/HttpTraceContext.d.ts.map +1 -1
  510. package/dist/http/HttpTraceContext.js +7 -5
  511. package/dist/http/HttpTraceContext.js.map +1 -1
  512. package/dist/http/MultipartParser/internal/contentType.js +3 -3
  513. package/dist/http/ProblemDetails.d.ts +96 -0
  514. package/dist/http/ProblemDetails.d.ts.map +1 -0
  515. package/dist/http/ProblemDetails.js +98 -0
  516. package/dist/http/ProblemDetails.js.map +1 -0
  517. package/dist/http/UrlParams.d.ts +3 -1
  518. package/dist/http/UrlParams.d.ts.map +1 -1
  519. package/dist/http/UrlParams.js +4 -2
  520. package/dist/http/UrlParams.js.map +1 -1
  521. package/dist/http/index.d.ts +5 -0
  522. package/dist/http/index.d.ts.map +1 -1
  523. package/dist/http/index.js +5 -0
  524. package/dist/http/index.js.map +1 -1
  525. package/dist/http/internal/compression.js +4 -5
  526. package/dist/http/internal/compression.js.map +1 -1
  527. package/dist/http/internal/decompression.js +6 -2
  528. package/dist/http/internal/decompression.js.map +1 -1
  529. package/dist/http/internal/httpBody.js +8 -1
  530. package/dist/http/internal/httpBody.js.map +1 -1
  531. package/dist/http/internal/urlParams.js +33 -0
  532. package/dist/http/internal/urlParams.js.map +1 -1
  533. package/dist/http-api/HttpApi.d.ts +3 -6
  534. package/dist/http-api/HttpApi.d.ts.map +1 -1
  535. package/dist/http-api/HttpApi.js +3 -6
  536. package/dist/http-api/HttpApi.js.map +1 -1
  537. package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
  538. package/dist/http-api/HttpApiBuilder.js +43 -13
  539. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  540. package/dist/http-api/HttpApiClient.d.ts +140 -7
  541. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  542. package/dist/http-api/HttpApiClient.js +193 -44
  543. package/dist/http-api/HttpApiClient.js.map +1 -1
  544. package/dist/http-api/HttpApiEndpoint.d.ts +24 -7
  545. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  546. package/dist/http-api/HttpApiEndpoint.js +123 -32
  547. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  548. package/dist/http-api/HttpApiError.d.ts +185 -13
  549. package/dist/http-api/HttpApiError.d.ts.map +1 -1
  550. package/dist/http-api/HttpApiError.js +128 -0
  551. package/dist/http-api/HttpApiError.js.map +1 -1
  552. package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
  553. package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
  554. package/dist/http-api/HttpApiMiddleware.js +85 -1
  555. package/dist/http-api/HttpApiMiddleware.js.map +1 -1
  556. package/dist/http-api/HttpApiSchema.d.ts +142 -33
  557. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  558. package/dist/http-api/HttpApiSchema.js +123 -59
  559. package/dist/http-api/HttpApiSchema.js.map +1 -1
  560. package/dist/http-api/HttpApiTest.d.ts.map +1 -1
  561. package/dist/http-api/HttpApiTest.js +3 -2
  562. package/dist/http-api/HttpApiTest.js.map +1 -1
  563. package/dist/http-api/OpenApi.d.ts.map +1 -1
  564. package/dist/http-api/OpenApi.js +25 -16
  565. package/dist/http-api/OpenApi.js.map +1 -1
  566. package/dist/http-api/internal/toCodecHttpProperties.d.ts +2 -0
  567. package/dist/http-api/internal/toCodecHttpProperties.d.ts.map +1 -0
  568. package/dist/http-api/internal/toCodecHttpProperties.js +38 -0
  569. package/dist/http-api/internal/toCodecHttpProperties.js.map +1 -0
  570. package/dist/index.d.ts +5 -5
  571. package/dist/index.d.ts.map +1 -1
  572. package/dist/index.js +5 -5
  573. package/dist/index.js.map +1 -1
  574. package/dist/internal/arbitrary/runner.d.ts.map +1 -1
  575. package/dist/internal/arbitrary/runner.js +120 -44
  576. package/dist/internal/arbitrary/runner.js.map +1 -1
  577. package/dist/internal/core.js +2 -0
  578. package/dist/internal/core.js.map +1 -1
  579. package/dist/internal/effect.js +46 -27
  580. package/dist/internal/effect.js.map +1 -1
  581. package/dist/internal/equal.js +14 -0
  582. package/dist/internal/equal.js.map +1 -1
  583. package/dist/internal/glob.d.ts +2 -0
  584. package/dist/internal/glob.d.ts.map +1 -0
  585. package/dist/internal/glob.js +630 -0
  586. package/dist/internal/glob.js.map +1 -0
  587. package/dist/internal/jsonSchema.d.ts +2 -0
  588. package/dist/internal/jsonSchema.d.ts.map +1 -0
  589. package/dist/internal/jsonSchema.js +28 -0
  590. package/dist/internal/jsonSchema.js.map +1 -0
  591. package/dist/internal/matcher.js +11 -1
  592. package/dist/internal/matcher.js.map +1 -1
  593. package/dist/internal/persistence.js +9 -0
  594. package/dist/internal/persistence.js.map +1 -1
  595. package/dist/internal/rcRef.js +4 -1
  596. package/dist/internal/rcRef.js.map +1 -1
  597. package/dist/internal/schema/compilerRegistry.js +4 -1
  598. package/dist/internal/schema/compilerRegistry.js.map +1 -1
  599. package/dist/internal/schema/content.d.ts +2 -0
  600. package/dist/internal/schema/content.d.ts.map +1 -0
  601. package/dist/internal/schema/content.js +13 -0
  602. package/dist/internal/schema/content.js.map +1 -0
  603. package/dist/internal/schema/fromJsonSchemaDocument.js +173 -185
  604. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
  605. package/dist/internal/schema/fromRepresentation.js +2 -1
  606. package/dist/internal/schema/fromRepresentation.js.map +1 -1
  607. package/dist/internal/schema/standardSchema.js +8 -2
  608. package/dist/internal/schema/standardSchema.js.map +1 -1
  609. package/dist/internal/schema/toCodeDocument.js +9 -6
  610. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  611. package/dist/internal/schema/toCodec.js +21 -24
  612. package/dist/internal/schema/toCodec.js.map +1 -1
  613. package/dist/internal/schema/toJsonSchemaDocument.js +205 -140
  614. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
  615. package/dist/internal/schema/toRepresentation.js +107 -129
  616. package/dist/internal/schema/toRepresentation.js.map +1 -1
  617. package/dist/internal/sql.d.ts +2 -0
  618. package/dist/internal/sql.d.ts.map +1 -0
  619. package/dist/internal/sql.js +13 -0
  620. package/dist/internal/sql.js.map +1 -0
  621. package/dist/internal/trie.js +42 -13
  622. package/dist/internal/trie.js.map +1 -1
  623. package/dist/internal/ulid.js +41 -0
  624. package/dist/internal/ulid.js.map +1 -1
  625. package/dist/internal/uuid.js +52 -8
  626. package/dist/internal/uuid.js.map +1 -1
  627. package/dist/internal/version.js +1 -1
  628. package/dist/observability/Otlp.d.ts +15 -4
  629. package/dist/observability/Otlp.d.ts.map +1 -1
  630. package/dist/observability/Otlp.js +10 -0
  631. package/dist/observability/Otlp.js.map +1 -1
  632. package/dist/observability/OtlpProxy.d.ts +154 -0
  633. package/dist/observability/OtlpProxy.d.ts.map +1 -0
  634. package/dist/observability/OtlpProxy.js +235 -0
  635. package/dist/observability/OtlpProxy.js.map +1 -0
  636. package/dist/observability/OtlpResource.d.ts +7 -0
  637. package/dist/observability/OtlpResource.d.ts.map +1 -1
  638. package/dist/observability/OtlpResource.js +11 -1
  639. package/dist/observability/OtlpResource.js.map +1 -1
  640. package/dist/observability/OtlpTracer.d.ts.map +1 -1
  641. package/dist/observability/OtlpTracer.js +4 -0
  642. package/dist/observability/OtlpTracer.js.map +1 -1
  643. package/dist/observability/index.d.ts +5 -0
  644. package/dist/observability/index.d.ts.map +1 -1
  645. package/dist/observability/index.js +5 -0
  646. package/dist/observability/index.js.map +1 -1
  647. package/dist/persistence/CircuitBreaker.d.ts +897 -0
  648. package/dist/persistence/CircuitBreaker.d.ts.map +1 -0
  649. package/dist/persistence/CircuitBreaker.js +1165 -0
  650. package/dist/persistence/CircuitBreaker.js.map +1 -0
  651. package/dist/persistence/KeyValueStore.d.ts +47 -2
  652. package/dist/persistence/KeyValueStore.d.ts.map +1 -1
  653. package/dist/persistence/KeyValueStore.js +129 -18
  654. package/dist/persistence/KeyValueStore.js.map +1 -1
  655. package/dist/persistence/PersistedQueue.d.ts +9 -0
  656. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  657. package/dist/persistence/PersistedQueue.js +94 -52
  658. package/dist/persistence/PersistedQueue.js.map +1 -1
  659. package/dist/persistence/Persistence.d.ts +10 -4
  660. package/dist/persistence/Persistence.d.ts.map +1 -1
  661. package/dist/persistence/Persistence.js +18 -11
  662. package/dist/persistence/Persistence.js.map +1 -1
  663. package/dist/persistence/Redis.d.ts +78 -2
  664. package/dist/persistence/Redis.d.ts.map +1 -1
  665. package/dist/persistence/Redis.js +62 -7
  666. package/dist/persistence/Redis.js.map +1 -1
  667. package/dist/persistence/index.d.ts +5 -0
  668. package/dist/persistence/index.d.ts.map +1 -1
  669. package/dist/persistence/index.js +5 -0
  670. package/dist/persistence/index.js.map +1 -1
  671. package/dist/process/ChildProcess.d.ts +237 -71
  672. package/dist/process/ChildProcess.d.ts.map +1 -1
  673. package/dist/process/ChildProcess.js +56 -158
  674. package/dist/process/ChildProcess.js.map +1 -1
  675. package/dist/process/ChildProcessSpawner.d.ts +35 -0
  676. package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
  677. package/dist/process/ChildProcessSpawner.js +5 -2
  678. package/dist/process/ChildProcessSpawner.js.map +1 -1
  679. package/dist/process/CommandLine.d.ts +294 -0
  680. package/dist/process/CommandLine.d.ts.map +1 -0
  681. package/dist/process/CommandLine.js +481 -0
  682. package/dist/process/CommandLine.js.map +1 -0
  683. package/dist/process/index.d.ts +5 -0
  684. package/dist/process/index.d.ts.map +1 -1
  685. package/dist/process/index.js +5 -0
  686. package/dist/process/index.js.map +1 -1
  687. package/dist/reactivity/AsyncResult.d.ts +1 -1
  688. package/dist/reactivity/AsyncResult.d.ts.map +1 -1
  689. package/dist/reactivity/Atom.d.ts +2 -1
  690. package/dist/reactivity/Atom.d.ts.map +1 -1
  691. package/dist/reactivity/Atom.js +3 -4
  692. package/dist/reactivity/Atom.js.map +1 -1
  693. package/dist/reactivity/AtomRegistry.js.map +1 -1
  694. package/dist/rpc/RpcClient.d.ts +16 -1
  695. package/dist/rpc/RpcClient.d.ts.map +1 -1
  696. package/dist/rpc/RpcClient.js +59 -24
  697. package/dist/rpc/RpcClient.js.map +1 -1
  698. package/dist/rpc/RpcMessage.d.ts +10 -1
  699. package/dist/rpc/RpcMessage.d.ts.map +1 -1
  700. package/dist/rpc/RpcMessage.js +1 -0
  701. package/dist/rpc/RpcMessage.js.map +1 -1
  702. package/dist/rpc/RpcSerialization.d.ts +14 -0
  703. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  704. package/dist/rpc/RpcSerialization.js +26 -8
  705. package/dist/rpc/RpcSerialization.js.map +1 -1
  706. package/dist/rpc/RpcServer.d.ts +31 -0
  707. package/dist/rpc/RpcServer.d.ts.map +1 -1
  708. package/dist/rpc/RpcServer.js +139 -56
  709. package/dist/rpc/RpcServer.js.map +1 -1
  710. package/dist/rpc/RpcTest.d.ts +1 -0
  711. package/dist/rpc/RpcTest.d.ts.map +1 -1
  712. package/dist/rpc/RpcTest.js +1 -0
  713. package/dist/rpc/RpcTest.js.map +1 -1
  714. package/dist/schema/Model.d.ts +14 -0
  715. package/dist/schema/Model.d.ts.map +1 -1
  716. package/dist/schema/Model.js +18 -3
  717. package/dist/schema/Model.js.map +1 -1
  718. package/dist/sql/Migrator.d.ts +2 -20
  719. package/dist/sql/Migrator.d.ts.map +1 -1
  720. package/dist/sql/Migrator.js +13 -55
  721. package/dist/sql/Migrator.js.map +1 -1
  722. package/dist/sql/MigratorFileSystem.d.ts +21 -0
  723. package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
  724. package/dist/sql/MigratorFileSystem.js +57 -0
  725. package/dist/sql/MigratorFileSystem.js.map +1 -0
  726. package/dist/sql/SqlClient.d.ts +9 -4
  727. package/dist/sql/SqlClient.d.ts.map +1 -1
  728. package/dist/sql/SqlClient.js +13 -10
  729. package/dist/sql/SqlClient.js.map +1 -1
  730. package/dist/sql/SqlResolver.d.ts +4 -0
  731. package/dist/sql/SqlResolver.d.ts.map +1 -1
  732. package/dist/sql/SqlResolver.js +18 -4
  733. package/dist/sql/SqlResolver.js.map +1 -1
  734. package/dist/sql/Statement.d.ts +27 -6
  735. package/dist/sql/Statement.d.ts.map +1 -1
  736. package/dist/sql/Statement.js +21 -15
  737. package/dist/sql/Statement.js.map +1 -1
  738. package/dist/sql/index.js +1 -1
  739. package/dist/testing/index.d.ts +0 -5
  740. package/dist/testing/index.d.ts.map +1 -1
  741. package/dist/testing/index.js +0 -5
  742. package/dist/testing/index.js.map +1 -1
  743. package/dist/workflow/DurableDeferred.d.ts.map +1 -1
  744. package/dist/workflow/DurableDeferred.js +21 -2
  745. package/dist/workflow/DurableDeferred.js.map +1 -1
  746. package/dist/workflow/internal/crypto.js +9 -8
  747. package/dist/workflow/internal/crypto.js.map +1 -1
  748. package/package.json +3 -1
  749. package/src/Arbitrary.ts +10 -2
  750. package/src/BigDecimal.ts +3 -0
  751. package/src/Channel.ts +64 -29
  752. package/src/Config.ts +7 -1
  753. package/src/Context.ts +34 -10
  754. package/src/Cron.ts +178 -29
  755. package/src/Data.ts +60 -265
  756. package/src/Duration.ts +140 -0
  757. package/src/Effect.ts +915 -86
  758. package/src/Equal.ts +8 -1
  759. package/src/Exit.ts +3 -3
  760. package/src/FileSystem.ts +65 -4
  761. package/src/Formatter.ts +28 -13
  762. package/src/Glob.ts +205 -0
  763. package/src/Hash.ts +4 -1
  764. package/src/JsonPatch.ts +4 -0
  765. package/src/JsonSchema.ts +12 -40
  766. package/src/Match.ts +127 -0
  767. package/src/Metric.ts +3 -3
  768. package/src/MutableList.ts +7 -5
  769. package/src/MutableRef.ts +8 -1
  770. package/src/PartitionedSemaphore.ts +24 -13
  771. package/src/Pool.ts +182 -52
  772. package/src/PubSub.ts +5 -6
  773. package/src/Random.ts +3 -3
  774. package/src/RcMap.ts +5 -1
  775. package/src/Ref.ts +8 -0
  776. package/src/Schedule.ts +27 -4
  777. package/src/Schema.ts +1237 -87
  778. package/src/SchemaAST.ts +20 -20
  779. package/src/SchemaGetter.ts +27 -11
  780. package/src/SchemaParser.ts +51 -18
  781. package/src/SchemaRepresentation.ts +50 -34
  782. package/src/SchemaTransformation.ts +17 -5
  783. package/src/ScopedCache.ts +5 -9
  784. package/src/Semaphore.ts +208 -40
  785. package/src/Sink.ts +15 -2
  786. package/src/Stream.ts +48 -22
  787. package/src/String.ts +3 -0
  788. package/src/Terminal.ts +19 -1
  789. package/src/Tracer.ts +15 -1
  790. package/src/ai/AiError.ts +56 -80
  791. package/src/ai/Decision.ts +257 -6
  792. package/src/ai/DecisionModel.ts +171 -28
  793. package/src/ai/LanguageModel.ts +9 -0
  794. package/src/ai/McpServer.ts +1283 -299
  795. package/src/ai/McpTest.ts +380 -0
  796. package/src/ai/Prompt.ts +65 -0
  797. package/src/ai/Response.ts +36 -31
  798. package/src/ai/Tool.ts +65 -10
  799. package/src/ai/Toolkit.ts +4 -1
  800. package/src/ai/index.ts +6 -0
  801. package/src/ai/internal/mcpCore.ts +78 -44
  802. package/src/ai/internal/mcpProtocol/v2024_11_05.ts +4 -7
  803. package/src/ai/internal/mcpProtocol/v2025_03_26.ts +4 -7
  804. package/src/ai/internal/mcpProtocol/v2025_06_18.ts +4 -7
  805. package/src/ai/internal/mcpProtocol/v2025_11_25.ts +4 -7
  806. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +15 -10
  807. package/src/ai/internal/mcpProtocol.ts +29 -0
  808. package/src/ai/internal/mcpRuntime.ts +9 -5
  809. package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
  810. package/src/cli/Argument.ts +21 -0
  811. package/src/cli/CliError.ts +90 -3
  812. package/src/cli/CliOutput.ts +300 -55
  813. package/src/cli/Command.ts +76 -41
  814. package/src/cli/Completions.ts +51 -0
  815. package/src/cli/Flag.ts +122 -0
  816. package/src/cli/GlobalFlag.ts +6 -7
  817. package/src/cli/HelpDoc.ts +18 -1
  818. package/src/cli/Param.ts +35 -6
  819. package/src/cli/Primitive.ts +16 -1
  820. package/src/cli/Prompt.ts +1 -0
  821. package/src/cli/TerminalCapabilities.ts +6 -3
  822. package/src/cli/internal/completions/bash.ts +79 -29
  823. package/src/cli/internal/help.ts +21 -9
  824. package/src/cluster/ClusterWorkflowEngine.ts +46 -16
  825. package/src/cluster/MessageStorage.ts +19 -14
  826. package/src/cluster/Sharding.ts +176 -47
  827. package/src/cluster/ShardingConfig.ts +43 -0
  828. package/src/cluster/SingleRunner.ts +3 -3
  829. package/src/cluster/Snowflake.ts +3 -7
  830. package/src/cluster/SqlMessageStorage.ts +49 -17
  831. package/src/cluster/SqlRunnerStorage.ts +143 -70
  832. package/src/cluster/internal/entityManager.ts +75 -22
  833. package/src/crypto/Aead.ts +517 -0
  834. package/src/crypto/Cipher.ts +326 -0
  835. package/src/crypto/CryptoError.ts +242 -0
  836. package/src/crypto/Digest.ts +167 -0
  837. package/src/crypto/Kdf.ts +315 -0
  838. package/src/crypto/KeyAgreement.ts +489 -0
  839. package/src/crypto/KeyFormat.ts +712 -0
  840. package/src/crypto/KeyWrap.ts +639 -0
  841. package/src/crypto/Mac.ts +386 -0
  842. package/src/crypto/SecureRandom.ts +459 -0
  843. package/src/crypto/Signature.ts +673 -0
  844. package/src/crypto/WebCrypto.ts +64 -0
  845. package/src/crypto/index.ts +78 -0
  846. package/src/crypto/internal/asymmetric.ts +329 -0
  847. package/src/crypto/internal/chacha.ts +1088 -0
  848. package/src/crypto/internal/der.ts +110 -0
  849. package/src/crypto/internal/digest.ts +16 -0
  850. package/src/crypto/internal/key.ts +235 -0
  851. package/src/crypto/internal/md5.ts +170 -0
  852. package/src/crypto/internal/webCrypto.ts +150 -0
  853. package/src/devtools/DevToolsClient.ts +2 -0
  854. package/src/encoding/Base64.ts +38 -0
  855. package/src/encoding/Base64Url.ts +5 -2
  856. package/src/encoding/Csv.ts +1298 -0
  857. package/src/encoding/Hex.ts +3 -2
  858. package/src/encoding/SchemaBinary.ts +40 -4
  859. package/src/encoding/Sse.ts +4 -3
  860. package/src/encoding/Toml.ts +117 -35
  861. package/src/encoding/Yaml.ts +61 -18
  862. package/src/encoding/index.ts +6 -0
  863. package/src/eventlog/EventJournal.ts +4 -3
  864. package/src/eventlog/EventLog.ts +340 -15
  865. package/src/eventlog/EventLogEncryption.ts +118 -110
  866. package/src/eventlog/EventLogMessage.ts +273 -1
  867. package/src/eventlog/EventLogRemote.ts +367 -23
  868. package/src/eventlog/EventLogServer.ts +23 -8
  869. package/src/eventlog/EventLogServerEncrypted.ts +1130 -67
  870. package/src/eventlog/EventLogSessionAuth.ts +56 -70
  871. package/src/eventlog/EventRow.ts +12 -3
  872. package/src/eventlog/SqlEventJournal.ts +68 -45
  873. package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
  874. package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
  875. package/src/eventlog/internal/batches.ts +30 -0
  876. package/src/eventlog/internal/compaction.ts +64 -0
  877. package/src/eventlog/internal/conflicts.ts +0 -4
  878. package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
  879. package/src/eventlog/internal/remoteCompaction.ts +92 -0
  880. package/src/http/Cookies.ts +291 -12
  881. package/src/http/FetchHttpClient.ts +88 -16
  882. package/src/http/HttpClient.ts +636 -29
  883. package/src/http/HttpClientError.ts +35 -1
  884. package/src/http/HttpClientRequest.ts +21 -10
  885. package/src/http/HttpClientResponse.ts +3 -2
  886. package/src/http/HttpMethod.ts +10 -2
  887. package/src/http/HttpMiddleware.ts +15 -18
  888. package/src/http/HttpRouter.ts +2 -1
  889. package/src/http/HttpServerError.ts +2 -2
  890. package/src/http/HttpServerRequest.ts +101 -30
  891. package/src/http/HttpServerResponse.ts +3 -2
  892. package/src/http/HttpStaticServer.ts +51 -22
  893. package/src/http/HttpTraceContext.ts +7 -4
  894. package/src/http/MultipartParser/internal/contentType.ts +3 -3
  895. package/src/http/ProblemDetails.ts +149 -0
  896. package/src/http/UrlParams.ts +6 -1
  897. package/src/http/index.ts +6 -0
  898. package/src/http/internal/compression.ts +4 -5
  899. package/src/http/internal/decompression.ts +10 -4
  900. package/src/http/internal/httpBody.ts +10 -2
  901. package/src/http/internal/urlParams.ts +37 -0
  902. package/src/http-api/HttpApi.ts +3 -6
  903. package/src/http-api/HttpApiBuilder.ts +61 -19
  904. package/src/http-api/HttpApiClient.ts +284 -72
  905. package/src/http-api/HttpApiEndpoint.ts +135 -35
  906. package/src/http-api/HttpApiError.ts +250 -0
  907. package/src/http-api/HttpApiMiddleware.ts +95 -1
  908. package/src/http-api/HttpApiSchema.ts +236 -52
  909. package/src/http-api/HttpApiTest.ts +3 -2
  910. package/src/http-api/OpenApi.ts +20 -17
  911. package/src/http-api/internal/toCodecHttpProperties.ts +56 -0
  912. package/src/index.ts +6 -6
  913. package/src/internal/arbitrary/runner.ts +133 -36
  914. package/src/internal/core.ts +2 -0
  915. package/src/internal/effect.ts +58 -34
  916. package/src/internal/equal.ts +17 -0
  917. package/src/internal/glob.ts +736 -0
  918. package/src/internal/jsonSchema.ts +27 -0
  919. package/src/internal/matcher.ts +18 -1
  920. package/src/internal/persistence.ts +11 -0
  921. package/src/internal/rcRef.ts +4 -1
  922. package/src/internal/schema/compilerRegistry.ts +6 -1
  923. package/src/internal/schema/content.ts +18 -0
  924. package/src/internal/schema/fromJsonSchemaDocument.ts +228 -190
  925. package/src/internal/schema/fromRepresentation.ts +2 -1
  926. package/src/internal/schema/standardSchema.ts +2 -2
  927. package/src/internal/schema/toCodeDocument.ts +11 -7
  928. package/src/internal/schema/toCodec.ts +26 -22
  929. package/src/internal/schema/toJsonSchemaDocument.ts +189 -167
  930. package/src/internal/schema/toRepresentation.ts +122 -140
  931. package/src/internal/sql.ts +14 -0
  932. package/src/internal/trie.ts +43 -14
  933. package/src/internal/ulid.ts +44 -0
  934. package/src/internal/uuid.ts +57 -16
  935. package/src/internal/version.ts +1 -1
  936. package/src/observability/Otlp.ts +21 -4
  937. package/src/observability/OtlpProxy.ts +314 -0
  938. package/src/observability/OtlpResource.ts +9 -1
  939. package/src/observability/OtlpTracer.ts +4 -0
  940. package/src/observability/index.ts +6 -0
  941. package/src/persistence/CircuitBreaker.ts +1678 -0
  942. package/src/persistence/KeyValueStore.ts +219 -22
  943. package/src/persistence/PersistedQueue.ts +128 -59
  944. package/src/persistence/Persistence.ts +20 -13
  945. package/src/persistence/Redis.ts +129 -8
  946. package/src/persistence/index.ts +6 -0
  947. package/src/process/ChildProcess.ts +285 -264
  948. package/src/process/ChildProcessSpawner.ts +46 -2
  949. package/src/process/CommandLine.ts +630 -0
  950. package/src/process/index.ts +6 -0
  951. package/src/reactivity/AsyncResult.ts +1 -1
  952. package/src/reactivity/Atom.ts +5 -5
  953. package/src/reactivity/AtomRegistry.ts +1 -1
  954. package/src/rpc/RpcClient.ts +75 -36
  955. package/src/rpc/RpcMessage.ts +10 -1
  956. package/src/rpc/RpcSerialization.ts +35 -9
  957. package/src/rpc/RpcServer.ts +176 -63
  958. package/src/rpc/RpcTest.ts +3 -0
  959. package/src/schema/Model.ts +26 -3
  960. package/src/sql/Migrator.ts +15 -69
  961. package/src/sql/MigratorFileSystem.ts +71 -0
  962. package/src/sql/SqlClient.ts +13 -20
  963. package/src/sql/SqlResolver.ts +23 -9
  964. package/src/sql/Statement.ts +38 -9
  965. package/src/sql/index.ts +1 -1
  966. package/src/testing/index.ts +0 -6
  967. package/src/workflow/DurableDeferred.ts +23 -6
  968. package/src/workflow/internal/crypto.ts +15 -11
  969. package/dist/Crypto.d.ts +0 -244
  970. package/dist/Crypto.d.ts.map +0 -1
  971. package/dist/Crypto.js +0 -139
  972. package/dist/Crypto.js.map +0 -1
  973. package/dist/testing/TestCrypto.d.ts +0 -73
  974. package/dist/testing/TestCrypto.d.ts.map +0 -1
  975. package/dist/testing/TestCrypto.js +0 -87
  976. package/dist/testing/TestCrypto.js.map +0 -1
  977. package/src/Crypto.ts +0 -347
  978. package/src/testing/TestCrypto.ts +0 -94
@@ -16,6 +16,7 @@ import * as Cause from "../Cause.js";
16
16
  import * as Context from "../Context.js";
17
17
  import * as Data from "../Data.js";
18
18
  import * as Deferred from "../Deferred.js";
19
+ import * as Duration from "../Duration.js";
19
20
  import * as Effect from "../Effect.js";
20
21
  import * as ErrorReporter from "../ErrorReporter.js";
21
22
  import * as Exit from "../Exit.js";
@@ -43,6 +44,7 @@ import * as Schema from "../Schema.js";
43
44
  import * as SchemaAST from "../SchemaAST.js";
44
45
  import * as Scope from "../Scope.js";
45
46
  import * as Stream from "../Stream.js";
47
+ import * as Tracer from "../Tracer.js";
46
48
  import * as AiError from "./AiError.js";
47
49
  import * as McpCore from "./internal/mcpCore.js";
48
50
  import * as McpProtocolInternal from "./internal/mcpProtocol.js";
@@ -106,8 +108,18 @@ const toInternalServerNotification = message => {
106
108
  return undefined;
107
109
  }
108
110
  };
109
- // Request services must come from the invocation, including when a handler is registered during a request.
110
- const omitRequestServices = /*#__PURE__*/Context.omit(McpRequestContext, McpServerClient, HttpServerRequest.HttpServerRequest, CurrentLogLevel);
111
+ const middlewareKeyPrefix = "effect/ai/McpServer/Middleware-";
112
+ // Do not capture request services or middleware stacks at registration.
113
+ const requestServiceKeys = /*#__PURE__*/new Set([McpRequestContext.key, McpServerClient.key, HttpServerRequest.HttpServerRequest.key, HttpServerRequest.ParsedSearchParams.key, HttpRouter.RouteContext.key, CurrentLogLevel.key, Scope.Scope.key, Tracer.ParentSpan.key]);
114
+ const omitRequestServices = context => {
115
+ const services = new Map();
116
+ for (const [key, value] of context.mapUnsafe) {
117
+ if (!requestServiceKeys.has(key) && !key.startsWith(middlewareKeyPrefix)) {
118
+ services.set(key, value);
119
+ }
120
+ }
121
+ return Context.makeUnsafe(services);
122
+ };
111
123
  const provideInvocationContext = (effect, invocation) => {
112
124
  let provided = Effect.provideService(effect, McpRequestContext, invocation.requestContext);
113
125
  const requestMetadata = invocation.requestContext.requestMetadata;
@@ -117,6 +129,329 @@ const provideInvocationContext = (effect, invocation) => {
117
129
  }
118
130
  return invocation.serverClient === undefined ? provided : Effect.provideService(provided, McpServerClient, invocation.serverClient);
119
131
  };
132
+ const MiddlewareTypeId = "~effect/ai/McpServer/Middleware";
133
+ /**
134
+ * Creates MCP middleware that runs around `tools/call`, `resources/read`,
135
+ * `prompts/get` and `completion/complete` requests.
136
+ *
137
+ * **Details**
138
+ *
139
+ * Middleware is how request-level dependencies are satisfied: declare the
140
+ * services it provides with `middleware<{ provides: S }>()` and provide them to
141
+ * the handler effect. It receives the request headers, session id and request
142
+ * context, so it can resolve the current user per request.
143
+ *
144
+ * Pass a function, or an Effect that builds the function. Services the Effect
145
+ * reads are requirements of the middleware layer. Services the function reads
146
+ * per request, other than `McpRequestContext`, are per-request requirements
147
+ * of the result; see {@link Middleware} for how they are met.
148
+ *
149
+ * Failures must be `McpErrorBase` values. A middleware failure is sent as a
150
+ * JSON-RPC error with its `code`, `message` and `data`, never as a tool
151
+ * result. Pick custom codes from the implementation-defined range
152
+ * (-32000 to -32019): any numeric `code` is sent as is. Defects are logged,
153
+ * reported to the `ErrorReporter` and sent as `InternalError("Internal error")`.
154
+ * Interruption propagates.
155
+ *
156
+ * Local middleware runs inside global middleware, and middleware provided both
157
+ * locally and globally runs once. Middleware never runs for `initialize`. It
158
+ * runs for list requests only when it wraps a {@link visibility}, so that the
159
+ * visibility check can read the services it provides.
160
+ *
161
+ * **Example** (Resolving the current user per request)
162
+ *
163
+ * ```ts
164
+ * import { Context, Effect, Layer, Schema } from "effect"
165
+ * import { McpSchema, McpServer, Tool, Toolkit } from "effect/ai"
166
+ *
167
+ * class CurrentUser extends Context.Service<CurrentUser, { readonly id: string }>()("CurrentUser") {}
168
+ *
169
+ * class Unauthorized extends Schema.Error<Unauthorized>("Unauthorized")({
170
+ * ...McpSchema.McpErrorBase.fields,
171
+ * _tag: Schema.tag("Unauthorized"),
172
+ * code: Schema.tag(-32001)
173
+ * }) {}
174
+ *
175
+ * const WhoAmI = Tool.make("WhoAmI", { success: Schema.String, dependencies: [CurrentUser] })
176
+ * const Tools = Toolkit.make(WhoAmI)
177
+ *
178
+ * const Auth = McpServer.middleware<{ provides: CurrentUser }>()((effect, { headers }) => {
179
+ * const token = headers["authorization"]
180
+ * return token === undefined
181
+ * ? Effect.fail(new Unauthorized({ message: "Missing credentials" }))
182
+ * : Effect.provideService(effect, CurrentUser, { id: token })
183
+ * })
184
+ *
185
+ * const Registrations = McpServer.toolkit(Tools).pipe(
186
+ * Layer.provide(Auth.layer),
187
+ * Layer.provide(Tools.toLayer({
188
+ * WhoAmI: () => Effect.map(CurrentUser, (user) => user.id)
189
+ * }))
190
+ * )
191
+ * ```
192
+ *
193
+ * @stability unstable
194
+ * @category middleware
195
+ * @since 4.0.0
196
+ */
197
+ export const middleware = function () {
198
+ if (arguments.length === 0) {
199
+ return makeMiddleware;
200
+ }
201
+ return makeMiddleware(arguments[0], arguments[1]);
202
+ };
203
+ /**
204
+ * Creates middleware that hides registrations per request.
205
+ *
206
+ * **Details**
207
+ *
208
+ * The check runs for every registration the middleware is provided to, on list
209
+ * requests and on calls, reads, gets and completions. When it returns `false`
210
+ * the registration is left out of list results, and requests for it fail as if
211
+ * it was not registered.
212
+ *
213
+ * The result is a `Middleware` and composes like one. The check receives the
214
+ * same {@link MiddlewareOptions} as middleware, and services it reads per
215
+ * request, other than `McpRequestContext`, are met the same way. Scope a
216
+ * visibility to some tools by providing its layer to their toolkit only, or
217
+ * branch on `target`.
218
+ *
219
+ * On a list request, the check and the middleware outside the innermost
220
+ * visibility run once for each registration. Middleware inside it does not
221
+ * run. A failure of that middleware or of a check fails the whole list
222
+ * request. It never hides a registration.
223
+ *
224
+ * Unlike `EnabledWhen`, a visibility runs the middleware around it on list
225
+ * requests, and middleware sees requests for hidden registrations.
226
+ *
227
+ * **Example** (Hiding admin tools from other users)
228
+ *
229
+ * ```ts
230
+ * import { Context, Effect, Layer, Schema } from "effect"
231
+ * import { McpServer, Tool, Toolkit } from "effect/ai"
232
+ *
233
+ * class CurrentUser extends Context.Service<CurrentUser, { readonly isAdmin: boolean }>()("CurrentUser") {}
234
+ *
235
+ * const AdminTools = Toolkit.make(Tool.make("DeleteUser", { success: Schema.String }))
236
+ *
237
+ * const Auth = McpServer.middleware<{ provides: CurrentUser }>()((effect, { headers }) =>
238
+ * Effect.provideService(effect, CurrentUser, { isAdmin: headers["x-role"] === "admin" })
239
+ * )
240
+ * const AdminOnly = McpServer.visibility(() => Effect.map(CurrentUser, (user) => user.isAdmin))
241
+ *
242
+ * const Registrations = McpServer.toolkit(AdminTools).pipe(
243
+ * Layer.provide(AdminOnly.combine(Auth).layer),
244
+ * Layer.provide(AdminTools.toLayer({ DeleteUser: () => Effect.succeed("deleted") }))
245
+ * )
246
+ * ```
247
+ *
248
+ * @see {@link middleware} for providing the services a check reads
249
+ *
250
+ * @stability unstable
251
+ * @category middleware
252
+ * @since 4.0.0
253
+ */
254
+ export const visibility = (check, options) => makeMiddleware(Effect.isEffect(check) ? Effect.map(check, makeGate) : makeGate(check), options);
255
+ // Raised by a visibility gate. It is left out of the types because `makeInvoke`
256
+ // replaces it with the not-found error of the request. It still has the shape
257
+ // of an MCP error, since middleware outside the gate sees it as one.
258
+ class Hidden extends /*#__PURE__*/Data.TaggedError("effect/ai/McpServer/Hidden") {}
259
+ const failHidden = /*#__PURE__*/Effect.fail(/*#__PURE__*/new Hidden({
260
+ code: McpSchema.INVALID_PARAMS_ERROR_CODE,
261
+ message: "Not found"
262
+ }));
263
+ // Marks the middleware functions created by `visibility`.
264
+ const gates = /*#__PURE__*/new WeakSet();
265
+ const makeGate = check => {
266
+ const gate = (effect, options) => Effect.flatMap(check(options), visible => visible ? effect : failHidden);
267
+ gates.add(gate);
268
+ return gate;
269
+ };
270
+ class MiddlewareFn extends /*#__PURE__*/Context.Service()("effect/ai/McpServer/MiddlewareFn") {}
271
+ const makeMiddleware = (fn, options) => {
272
+ const middleware = new MiddlewareImpl(Effect.isEffect(fn) ? Layer.effect(MiddlewareFn)(fn) : Layer.succeed(MiddlewareFn, fn));
273
+ return options?.global ? middleware.layerGlobal : middleware;
274
+ };
275
+ let middlewareId = 0;
276
+ class MiddlewareImpl {
277
+ [MiddlewareTypeId] = {};
278
+ layer;
279
+ layerGlobal;
280
+ layerFn;
281
+ dependencies;
282
+ constructor(layerFn, dependencies) {
283
+ this.layerFn = layerFn;
284
+ this.dependencies = dependencies;
285
+ const contextKey = `${middlewareKeyPrefix}${++middlewareId}`;
286
+ this.layer = Layer.effectContext(Effect.gen(function* () {
287
+ const stack = [yield* MiddlewareFn];
288
+ if (dependencies) {
289
+ const memoMap = yield* Layer.CurrentMemoMap;
290
+ const scope = yield* Effect.scope;
291
+ stack.push(...getMiddleware(yield* Layer.buildWithMemoMap(dependencies, memoMap, scope)));
292
+ }
293
+ return Context.makeUnsafe(new Map([[contextKey, stack]]));
294
+ })).pipe(Layer.provide(layerFn));
295
+ this.layerGlobal = Layer.effectDiscard(Effect.gen(function* () {
296
+ const stack = Context.getOrUndefinedUnsafe(yield* Effect.context(), contextKey);
297
+ const {
298
+ globalMiddleware
299
+ } = internalState.get(yield* McpServer);
300
+ yield* Effect.acquireRelease(Effect.sync(() => {
301
+ globalMiddleware.push(...stack);
302
+ }), () => Effect.sync(() => {
303
+ for (const fn of stack) {
304
+ const index = globalMiddleware.indexOf(fn);
305
+ if (index !== -1) globalMiddleware.splice(index, 1);
306
+ }
307
+ }));
308
+ })).pipe(Layer.provide(this.layer));
309
+ }
310
+ combine(other) {
311
+ return new MiddlewareImpl(this.layerFn, this.dependencies ? Layer.provideMerge(this.dependencies, other.layer) : other.layer);
312
+ }
313
+ }
314
+ // The innermost middleware comes first.
315
+ const getMiddleware = context => {
316
+ const stacks = [];
317
+ let maxLength = 0;
318
+ for (const [key, value] of context.mapUnsafe) {
319
+ if (key.startsWith(middlewareKeyPrefix)) {
320
+ stacks.push(value);
321
+ maxLength = Math.max(maxLength, value.length);
322
+ }
323
+ }
324
+ const unique = new Set();
325
+ for (let i = maxLength - 1; i >= 0; i--) {
326
+ for (const stack of stacks) {
327
+ if (i < stack.length) unique.add(stack[i]);
328
+ }
329
+ }
330
+ return Arr.fromIterable(unique).reverse();
331
+ };
332
+ const isMcpError = error => Predicate.hasProperty(error, "code") && typeof error.code === "number" && Predicate.hasProperty(error, "message") && typeof error.message === "string";
333
+ // Distinguishes handler failures from failures raised or rewritten by middleware.
334
+ const HandlerFailure = /*#__PURE__*/Context.Reference("effect/ai/McpServer/HandlerFailure", {
335
+ defaultValue: () => false
336
+ });
337
+ const handlerFailure = /*#__PURE__*/Context.make(HandlerFailure, true);
338
+ const internalError = /*#__PURE__*/new InternalError({
339
+ message: "Internal error"
340
+ });
341
+ const rejectWith = error => Effect.fail(new McpCore.RequestRejected({
342
+ code: error.code,
343
+ message: error.message,
344
+ data: error.data,
345
+ error
346
+ }));
347
+ const notFound = (method, target) => {
348
+ switch (method) {
349
+ case "tools/call":
350
+ return new McpCore.ToolNotFound({
351
+ name: target
352
+ });
353
+ case "resources/read":
354
+ return new McpCore.ResourceNotFound({
355
+ uri: target
356
+ });
357
+ case "prompts/get":
358
+ return new McpCore.PromptNotFound({
359
+ name: target
360
+ });
361
+ case "completion/complete":
362
+ return new InvalidParams({
363
+ message: "Unknown completion reference or argument"
364
+ });
365
+ }
366
+ };
367
+ const isHidden = error => error instanceof Hidden;
368
+ // Recovers a request rejected by a visibility gate. Any other cause, including
369
+ // one that also holds an interrupt, is propagated unchanged.
370
+ const catchHidden = onHidden => self => Effect.catchCause(self, cause => {
371
+ const failure = Cause.findFail(cause);
372
+ return !Cause.hasInterrupts(cause) && Result.isSuccess(failure) && isHidden(failure.success.error) ? onHidden() : Effect.failCause(cause);
373
+ });
374
+ // The innermost middleware comes first. Middleware provided both locally and
375
+ // globally runs once, at its outermost position.
376
+ const middlewareStack = (localMiddleware, globalMiddleware) => {
377
+ if (globalMiddleware.length === 0) {
378
+ return localMiddleware;
379
+ }
380
+ if (localMiddleware.length === 0) {
381
+ return globalMiddleware;
382
+ }
383
+ const stack = [...localMiddleware, ...globalMiddleware];
384
+ return stack.filter((fn, index) => stack.lastIndexOf(fn) === index);
385
+ };
386
+ // Runs a handler inside middleware. The handler's own failures pass through, a
387
+ // visibility gate fails with `Hidden`, and other failures become
388
+ // `RequestRejected`: middleware failures as JSON-RPC errors, anything else as
389
+ // a reported internal error.
390
+ const runMiddleware = (handler, middleware, invocation, request) => {
391
+ const effect = middleware.length === 0 ? handler : Effect.withFiber(fiber => {
392
+ const headers = Context.getOrUndefined(fiber.context, HttpServerRequest.HttpServerRequest)?.headers ?? Headers.empty;
393
+ const options = {
394
+ ...request,
395
+ requestContext: invocation.requestContext,
396
+ headers,
397
+ sessionId: headers[MCP_SESSION_ID_HEADER]
398
+ };
399
+ const handled = Effect.catchCause(handler, cause => Effect.failCause(Cause.annotate(cause, handlerFailure)));
400
+ return middleware.reduce((effect, fn) => fn(effect, options), handled);
401
+ });
402
+ return provideInvocationContext(effect, invocation).pipe(Effect.catchCause(cause => {
403
+ if (Cause.hasInterrupts(cause)) {
404
+ return Effect.failCause(cause);
405
+ }
406
+ const failure = Cause.findFail(cause);
407
+ if (Result.isSuccess(failure) && !Cause.hasDies(cause)) {
408
+ const error = failure.success.error;
409
+ if (isHidden(error)) {
410
+ return Effect.fail(error);
411
+ }
412
+ if (middleware.length === 0 || Context.get(Cause.reasonAnnotations(failure.success), HandlerFailure)) {
413
+ return Effect.failCause(cause);
414
+ }
415
+ if (isMcpError(error)) {
416
+ return rejectWith(error);
417
+ }
418
+ }
419
+ return Effect.logError(cause).pipe(Effect.andThen(ErrorReporter.report(cause)), Effect.andThen(rejectWith(internalError)));
420
+ }));
421
+ };
422
+ // Request services override captured services; global middleware wraps local middleware.
423
+ const makeInvoke = (context, globalMiddleware) => {
424
+ const services = context === undefined ? Context.empty() : omitRequestServices(context);
425
+ const localMiddleware = context === undefined ? [] : getMiddleware(context);
426
+ const invoke = (handler, invocation, request) => runMiddleware(services.mapUnsafe.size === 0 ? handler : Effect.updateContext(handler, context => Context.merge(services, context)), middlewareStack(localMiddleware, globalMiddleware), invocation, request).pipe(catchHidden(() => Effect.fail(notFound(request.method, request.target))));
427
+ // On list requests only the middleware outside the innermost visibility runs.
428
+ const visible = (method, target) => invocation => {
429
+ const middleware = middlewareStack(localMiddleware, globalMiddleware);
430
+ const innermost = middleware.findIndex(fn => gates.has(fn));
431
+ if (innermost === -1) {
432
+ return Effect.succeed(true);
433
+ }
434
+ return runMiddleware(Effect.void, middleware.slice(innermost), invocation, {
435
+ method,
436
+ target,
437
+ payload: undefined
438
+ }).pipe(Effect.as(true), catchHidden(() => Effect.succeed(false)));
439
+ };
440
+ return {
441
+ invoke,
442
+ visible
443
+ };
444
+ };
445
+ // Applies the `EnabledWhen` annotation of a registration.
446
+ const isEnabled = annotations => {
447
+ const enabledWhen = Context.getOrUndefined(annotations, EnabledWhen);
448
+ return profile => enabledWhen === undefined || enabledWhen({
449
+ protocolVersion: profile.protocolVersion,
450
+ capabilities: profile.clientCapabilities,
451
+ clientInfo: profile.clientInfo
452
+ });
453
+ };
454
+ const rejectedError = rejected => Effect.fail(rejected.error);
120
455
  /**
121
456
  * Service that stores and serves an MCP server's registered tools, resources,
122
457
  * prompts, completions, and outgoing notifications.
@@ -144,6 +479,7 @@ export class McpServer extends /*#__PURE__*/Context.Service()("effect/ai/McpServ
144
479
  const resourceTemplates = [];
145
480
  const prompts = [];
146
481
  const notificationsQueue = yield* Queue.make();
482
+ const globalMiddleware = [];
147
483
  const notificationDelivery = {
148
484
  consumers: 0,
149
485
  listChangeRevision: 0,
@@ -233,18 +569,22 @@ export class McpServer extends /*#__PURE__*/Context.Service()("effect/ai/McpServ
233
569
  } else {
234
570
  tools[existingIndex] = options;
235
571
  }
236
- const enabledWhen = Context.getOrUndefined(options.annotations, EnabledWhen);
572
+ const {
573
+ invoke,
574
+ visible
575
+ } = makeInvoke(options.services, globalMiddleware);
237
576
  yield* internalCore.tools.register({
238
577
  descriptor: new McpTool({
239
578
  ...options.tool,
240
579
  title: options.tool.title ?? options.tool.annotations?.title
241
580
  }),
242
- isVisible: profile => enabledWhen === undefined || enabledWhen({
243
- protocolVersion: profile.protocolVersion,
244
- capabilities: profile.clientCapabilities,
245
- clientInfo: profile.clientInfo
246
- }),
247
- handle: (call, invocation) => provideInvocationContext(options.handle(call.arguments), invocation).pipe(Effect.catchTags({
581
+ visible: visible("tools/list", options.tool.name),
582
+ isVisible: isEnabled(options.annotations),
583
+ handle: (call, invocation) => invoke(options.handle(call.arguments), invocation, {
584
+ method: "tools/call",
585
+ target: call.name,
586
+ payload: call
587
+ }).pipe(Effect.catchTags({
248
588
  InternalError: error => Effect.fail(new McpCore.ToolExecutionError({
249
589
  name: options.tool.name,
250
590
  message: error.message
@@ -259,9 +599,9 @@ export class McpServer extends /*#__PURE__*/Context.Service()("effect/ai/McpServ
259
599
  }),
260
600
  callTool: Effect.fnUntraced(function* (request) {
261
601
  const client = yield* McpServerClient;
262
- const result = yield* internalCore.tools.call(request, McpProtocolInternal.invocationFromClient(client)).pipe(Effect.mapError(error => new InvalidParams({
602
+ const result = yield* internalCore.tools.call(request, McpProtocolInternal.invocationFromClient(client)).pipe(Effect.catch(error => error._tag === "RequestRejected" ? rejectedError(error) : Effect.fail(new InvalidParams({
263
603
  message: error._tag === "ToolNotFound" ? `Tool '${error.name}' not found` : error.message
264
- })));
604
+ }))));
265
605
  if (result._tag === "InputRequired") {
266
606
  return yield* new InvalidParams({
267
607
  message: "Client input is not supported by this MCP protocol"
@@ -284,17 +624,21 @@ export class McpServer extends /*#__PURE__*/Context.Service()("effect/ai/McpServ
284
624
  } else {
285
625
  resources[existingIndex] = options;
286
626
  }
627
+ const {
628
+ invoke,
629
+ visible
630
+ } = makeInvoke(options.services, globalMiddleware);
287
631
  yield* internalCore.resources.register({
288
632
  descriptor: options.resource,
289
- isVisible: profile => {
290
- const enabledWhen = Context.getOrUndefined(options.annotations, EnabledWhen);
291
- return enabledWhen === undefined || enabledWhen({
292
- protocolVersion: profile.protocolVersion,
293
- capabilities: profile.clientCapabilities,
294
- clientInfo: profile.clientInfo
295
- });
296
- },
297
- read: invocation => provideInvocationContext(options.handle, invocation)
633
+ visible: visible("resources/list", options.resource.uri),
634
+ isVisible: isEnabled(options.annotations),
635
+ read: invocation => invoke(options.handle, invocation, {
636
+ method: "resources/read",
637
+ target: options.resource.uri,
638
+ payload: {
639
+ uri: options.resource.uri
640
+ }
641
+ })
298
642
  });
299
643
  yield* notifications.client["notifications/resources/list_changed"]({});
300
644
  }),
@@ -303,6 +647,7 @@ export class McpServer extends /*#__PURE__*/Context.Service()("effect/ai/McpServ
303
647
  completions,
304
648
  handle,
305
649
  routerPath,
650
+ services,
306
651
  template
307
652
  }) {
308
653
  const existingIndex = resourceTemplates.findIndex(({
@@ -319,18 +664,16 @@ export class McpServer extends /*#__PURE__*/Context.Service()("effect/ai/McpServ
319
664
  annotations
320
665
  };
321
666
  }
667
+ const {
668
+ invoke,
669
+ visible
670
+ } = makeInvoke(services, globalMiddleware);
322
671
  const templateMatcher = makeUriMatcher();
323
672
  templateMatcher.add(routerPath, true);
324
673
  yield* internalCore.resources.registerTemplate({
325
674
  descriptor: template,
326
- isVisible: profile => {
327
- const enabledWhen = Context.getOrUndefined(annotations, EnabledWhen);
328
- return enabledWhen === undefined || enabledWhen({
329
- protocolVersion: profile.protocolVersion,
330
- capabilities: profile.clientCapabilities,
331
- clientInfo: profile.clientInfo
332
- });
333
- },
675
+ visible: visible("resources/templates/list", template.uriTemplate),
676
+ isVisible: isEnabled(annotations),
334
677
  match: uri => {
335
678
  const match = templateMatcher.find(uri);
336
679
  if (match === undefined) {
@@ -342,10 +685,20 @@ export class McpServer extends /*#__PURE__*/Context.Service()("effect/ai/McpServ
342
685
  }
343
686
  return params;
344
687
  },
345
- read: (uri, params, invocation) => provideInvocationContext(handle(uri, Array.from(params)), invocation)
688
+ read: (uri, params, invocation) => invoke(handle(uri, Array.from(params)), invocation, {
689
+ method: "resources/read",
690
+ target: uri,
691
+ payload: {
692
+ uri
693
+ }
694
+ })
346
695
  });
347
696
  for (const [param, handle] of Object.entries(completions)) {
348
- yield* internalCore.completions.register(`resource/${template.uriTemplate}/${param}`, (request, invocation) => provideInvocationContext(handle(request.argument.value, request.context), invocation).pipe(Effect.map(result => ({
697
+ yield* internalCore.completions.register(`resource/${template.uriTemplate}/${param}`, (request, invocation) => invoke(handle(request.argument.value, request.context), invocation, {
698
+ method: "completion/complete",
699
+ target: template.uriTemplate,
700
+ payload: request
701
+ }).pipe(Effect.map(result => ({
349
702
  values: result.completion.values,
350
703
  total: result.completion.total,
351
704
  hasMore: result.completion.hasMore,
@@ -356,9 +709,12 @@ export class McpServer extends /*#__PURE__*/Context.Service()("effect/ai/McpServ
356
709
  }),
357
710
  findResource: Effect.fnUntraced(function* (uri) {
358
711
  const client = yield* McpServerClient;
359
- return yield* internalCore.resources.read(uri, McpProtocolInternal.invocationFromClient(client)).pipe(Effect.catchTag("ResourceNotFound", error => Effect.fail(new InvalidParams({
360
- message: `Resource '${error.uri}' not found`
361
- }))));
712
+ return yield* internalCore.resources.read(uri, McpProtocolInternal.invocationFromClient(client)).pipe(Effect.catchTags({
713
+ ResourceNotFound: error => Effect.fail(new InvalidParams({
714
+ message: `Resource '${error.uri}' not found`
715
+ })),
716
+ RequestRejected: rejectedError
717
+ }));
362
718
  }),
363
719
  get prompts() {
364
720
  return prompts;
@@ -372,20 +728,29 @@ export class McpServer extends /*#__PURE__*/Context.Service()("effect/ai/McpServ
372
728
  } else {
373
729
  prompts[existingIndex] = options;
374
730
  }
731
+ const {
732
+ invoke,
733
+ visible
734
+ } = makeInvoke(options.services, globalMiddleware);
375
735
  yield* internalCore.prompts.register({
376
736
  descriptor: options.prompt,
377
- isVisible: profile => {
378
- const enabledWhen = Context.getOrUndefined(options.annotations, EnabledWhen);
379
- return enabledWhen === undefined || enabledWhen({
380
- protocolVersion: profile.protocolVersion,
381
- capabilities: profile.clientCapabilities,
382
- clientInfo: profile.clientInfo
383
- });
384
- },
385
- get: (params, invocation) => provideInvocationContext(options.handle(params), invocation).pipe(Effect.map(result => Predicate.isTagged(result, "InputRequired") ? McpCore.OperationOutcome.InputRequired(result) : McpCore.OperationOutcome.Complete(result)))
737
+ visible: visible("prompts/list", options.prompt.name),
738
+ isVisible: isEnabled(options.annotations),
739
+ get: (params, invocation) => invoke(options.handle(params), invocation, {
740
+ method: "prompts/get",
741
+ target: options.prompt.name,
742
+ payload: {
743
+ name: options.prompt.name,
744
+ arguments: params
745
+ }
746
+ }).pipe(Effect.map(result => Predicate.isTagged(result, "InputRequired") ? McpCore.OperationOutcome.InputRequired(result) : McpCore.OperationOutcome.Complete(result)))
386
747
  });
387
748
  for (const [param, handle] of Object.entries(options.completions)) {
388
- yield* internalCore.completions.register(`prompt/${options.prompt.name}/${param}`, (request, invocation) => provideInvocationContext(handle(request.argument.value, request.context), invocation).pipe(Effect.map(result => ({
749
+ yield* internalCore.completions.register(`prompt/${options.prompt.name}/${param}`, (request, invocation) => invoke(handle(request.argument.value, request.context), invocation, {
750
+ method: "completion/complete",
751
+ target: options.prompt.name,
752
+ payload: request
753
+ }).pipe(Effect.map(result => ({
389
754
  values: result.completion.values,
390
755
  total: result.completion.total,
391
756
  hasMore: result.completion.hasMore,
@@ -399,9 +764,12 @@ export class McpServer extends /*#__PURE__*/Context.Service()("effect/ai/McpServ
399
764
  name
400
765
  }) {
401
766
  const client = yield* McpServerClient;
402
- const outcome = yield* internalCore.prompts.get(name, params ?? {}, McpProtocolInternal.invocationFromClient(client)).pipe(Effect.catchTag("PromptNotFound", () => new InvalidParams({
403
- message: `Prompt '${name}' not found`
404
- })));
767
+ const outcome = yield* internalCore.prompts.get(name, params ?? {}, McpProtocolInternal.invocationFromClient(client)).pipe(Effect.catchTags({
768
+ PromptNotFound: () => new InvalidParams({
769
+ message: `Prompt '${name}' not found`
770
+ }),
771
+ RequestRejected: rejectedError
772
+ }));
405
773
  return outcome._tag === "Complete" ? outcome.value : yield* new InvalidParams({
406
774
  message: "Client input is not supported by this MCP protocol"
407
775
  });
@@ -419,7 +787,7 @@ export class McpServer extends /*#__PURE__*/Context.Service()("effect/ai/McpServ
419
787
  },
420
788
  argument: complete.argument,
421
789
  context: complete.context
422
- }, McpProtocolInternal.invocationFromClient(client));
790
+ }, McpProtocolInternal.invocationFromClient(client)).pipe(Effect.catchTag("RequestRejected", rejectedError));
423
791
  return {
424
792
  _meta: result.metadata,
425
793
  completion: {
@@ -433,12 +801,19 @@ export class McpServer extends /*#__PURE__*/Context.Service()("effect/ai/McpServ
433
801
  internalState.set(service, {
434
802
  core: internalCore,
435
803
  notifications: notificationsQueue,
436
- notificationDelivery
804
+ notificationDelivery,
805
+ globalMiddleware
437
806
  });
438
807
  return service;
439
808
  });
440
809
  /**
441
- * Layer that provides the MCP server and client services.
810
+ * Layer that provides the MCP server service.
811
+ *
812
+ * **Details**
813
+ *
814
+ * It doesn't run a transport or discharge request-level dependencies. Use it
815
+ * to call registrations in process, providing their request-level
816
+ * dependencies with MCP middleware.
442
817
  *
443
818
  * @stability unstable
444
819
  * @since 4.0.0
@@ -452,6 +827,26 @@ const cancelledResponses = /*#__PURE__*/new WeakMap();
452
827
  const httpPostResponses = /*#__PURE__*/new WeakMap();
453
828
  const requestKey = requestId => `${typeof requestId}:${requestId}`;
454
829
  class McpClientKey extends Data.Class {}
830
+ // Converts each hint to the wire's nonnegative integer `ttlMs` once, when the server is built.
831
+ const normalizeCacheHints = cacheHints => {
832
+ if (cacheHints === undefined) return Effect.succeed(undefined);
833
+ const normalized = {};
834
+ for (const [name, hint] of Object.entries(cacheHints)) {
835
+ if (hint === undefined) continue;
836
+ const ttlMs = Option.match(Duration.fromInput(hint.ttl), {
837
+ onNone: () => NaN,
838
+ onSome: ttl => Math.floor(Duration.toMillis(ttl))
839
+ });
840
+ if (!Number.isSafeInteger(ttlMs) || ttlMs < 0 || hint.cacheScope !== "private") {
841
+ return Effect.fail(new Cause.IllegalArgumentError(`McpServer cacheHints.${name} must have a finite, nonnegative ttl and a "private" cacheScope`));
842
+ }
843
+ normalized[name] = {
844
+ ttlMs,
845
+ cacheScope: "private"
846
+ };
847
+ }
848
+ return Effect.succeed(normalized);
849
+ };
455
850
  /**
456
851
  * Runs an MCP server over the current `RpcServer.Protocol`.
457
852
  *
@@ -466,9 +861,13 @@ class McpClientKey extends Data.Class {}
466
861
  * @since 4.0.0
467
862
  */
468
863
  export const run = /*#__PURE__*/Effect.fnUntraced(function* (options) {
864
+ const cacheHints = yield* normalizeCacheHints(options.cacheHints);
469
865
  const runtimeOption = yield* Effect.serviceOption(McpRuntime.ServerRuntime);
470
866
  const runtime = Option.isSome(runtimeOption) ? runtimeOption.value : yield* McpRuntime.make(options.protocols);
471
- return yield* runWithRuntime(options, runtime, "custom");
867
+ return yield* runWithRuntime({
868
+ ...options,
869
+ cacheHints
870
+ }, runtime, "custom");
472
871
  });
473
872
  const runWithRuntime = /*#__PURE__*/Effect.fnUntraced(function* (options, runtime, transport, requestScoped) {
474
873
  const protocol = yield* RpcServer.Protocol;
@@ -483,14 +882,26 @@ const runWithRuntime = /*#__PURE__*/Effect.fnUntraced(function* (options, runtim
483
882
  clientStates.delete(clientId);
484
883
  runtime.disconnect(clientId);
485
884
  };
486
- const sendRequestError = (clientId, requestId, error) => protocol.send(clientId, {
885
+ // The exit is sent already encoded, so it must carry only the JSON-RPC error members.
886
+ const sendRequestError = (clientId, requestId, {
887
+ code,
888
+ data,
889
+ message
890
+ }) => protocol.send(clientId, {
487
891
  _tag: "Exit",
488
892
  requestId,
489
893
  exit: {
490
894
  _tag: "Failure",
491
895
  cause: [{
492
896
  _tag: "Fail",
493
- error
897
+ error: data === undefined ? {
898
+ code,
899
+ message
900
+ } : {
901
+ code,
902
+ message,
903
+ data
904
+ }
494
905
  }]
495
906
  }
496
907
  });
@@ -682,18 +1093,9 @@ const runWithRuntime = /*#__PURE__*/Effect.fnUntraced(function* (options, runtim
682
1093
  return protocol.send(clientId, response);
683
1094
  }
684
1095
  if (response.exit._tag === "Failure" && !response.exit.cause.some(failure => failure._tag === "Fail")) {
685
- return protocol.send(clientId, {
686
- _tag: "Exit",
687
- requestId: response.requestId,
688
- exit: {
689
- _tag: "Failure",
690
- cause: [{
691
- _tag: "Fail",
692
- error: new InternalError({
693
- message: "Internal error"
694
- })
695
- }]
696
- }
1096
+ return sendRequestError(clientId, response.requestId, {
1097
+ code: McpSchema.INTERNAL_ERROR_CODE,
1098
+ message: "Internal error"
697
1099
  });
698
1100
  }
699
1101
  }
@@ -972,7 +1374,7 @@ const runWithRuntime = /*#__PURE__*/Effect.fnUntraced(function* (options, runtim
972
1374
  if (requestContext?.clientId !== clientId || !isLoggingLevel(level) || McpSchema.LoggingLevel.literals.indexOf(notification.level) < McpSchema.LoggingLevel.literals.indexOf(level)) {
973
1375
  return;
974
1376
  }
975
- } else if (!runtime.canDeliver(clientId, (requestContext?.clientId === clientId ? requestHeaders : undefined) ?? clientStates.get(clientId)?.sessionHeaders ?? Headers.empty, notification, defaultLogLevel)) {
1377
+ } else if (!runtime.canDeliver(clientId, (requestContext?.clientId === clientId ? requestHeaders : undefined) ?? clientStates.get(clientId)?.sessionHeaders ?? Headers.empty, notification, defaultLogLevel, listChangeRevision)) {
976
1378
  return;
977
1379
  }
978
1380
  const rpc = selectedProtocol.serverNotificationRpcs.requests.get(projected.tag);
@@ -1025,6 +1427,11 @@ const runWithRuntime = /*#__PURE__*/Effect.fnUntraced(function* (options, runtim
1025
1427
  * `McpServer.layer`, so registration layers can use the `McpServer` service
1026
1428
  * while the server is running.
1027
1429
  *
1430
+ * Pass registration layers as `registrations` to build them before the server
1431
+ * reads its first request. The transport discharges the request-level
1432
+ * dependencies it supplies (see `ProvidedServices`); any other `McpRequest`
1433
+ * marker stays in the layer's requirements and must be met by MCP middleware.
1434
+ *
1028
1435
  * **Gotchas**
1029
1436
  *
1030
1437
  * Unlike `layerStdio` and `layerHttp`, this layer does not install a concrete
@@ -1040,9 +1447,13 @@ const runWithRuntime = /*#__PURE__*/Effect.fnUntraced(function* (options, runtim
1040
1447
  */
1041
1448
  export const layer = options => layerWithRuntime(options, "custom").pipe(Layer.provide(McpRuntime.layer(options.protocols)));
1042
1449
  const layerWithRuntime = (options, transport) => Layer.effectDiscard(Effect.gen(function* () {
1450
+ const cacheHints = yield* normalizeCacheHints(options.cacheHints);
1043
1451
  const runtime = yield* McpRuntime.ServerRuntime;
1044
- yield* Effect.forkScoped(runWithRuntime(options, runtime, transport));
1045
- })).pipe(Layer.provideMerge(McpServer.layer));
1452
+ yield* Effect.forkScoped(runWithRuntime({
1453
+ ...options,
1454
+ cacheHints
1455
+ }, runtime, transport));
1456
+ })).pipe(Layer.provide(options.registrations ?? Layer.empty), Layer.provideMerge(McpServer.layer));
1046
1457
  /**
1047
1458
  * Creates a layer that runs an MCP server over standard input and output.
1048
1459
  *
@@ -1058,6 +1469,11 @@ const layerWithRuntime = (options, transport) => Layer.effectDiscard(Effect.gen(
1058
1469
  * `McpRequestContext` and legacy `McpServerClient` services to handlers, and
1059
1470
  * requires `Stdio`.
1060
1471
  *
1472
+ * Pass registration layers as `registrations` to build them before the server
1473
+ * reads its first request. The transport discharges the request-level
1474
+ * dependencies it supplies (see `ProvidedServices`); any other `McpRequest`
1475
+ * marker stays in the layer's requirements and must be met by MCP middleware.
1476
+ *
1061
1477
  * @see {@link layer} for running over an existing `RpcServer.Protocol`
1062
1478
  * @see {@link layerHttp} for the single-endpoint HTTP transport
1063
1479
  *
@@ -1158,6 +1574,13 @@ const mcpStdioSerialization = protocols => {
1158
1574
  * serverless hosts where execution must belong to each request, use
1159
1575
  * `layerHttpRequestScoped` instead.
1160
1576
  *
1577
+ * Pass registration layers as `registrations` to build them before the
1578
+ * endpoint serves its first request. The transport discharges the
1579
+ * request-level dependencies it supplies (see `ProvidedServices`) and converts
1580
+ * the remaining `McpRequest` markers into `HttpRouter.Request` markers, so
1581
+ * `HttpRouter.middleware` can provide them, for example to authenticate the
1582
+ * request and resolve the current user.
1583
+ *
1161
1584
  * `layerHttp` always implements the single-endpoint Streamable HTTP topology.
1162
1585
  * Using `v2024_11_05` here is a custom compatibility transport for that
1163
1586
  * revision's schema. It does not implement the historical two-endpoint
@@ -1207,6 +1630,10 @@ export const layerHttp = options => {
1207
1630
  * Configuring a sessionful protocol through an untyped caller fails layer
1208
1631
  * construction with `IllegalArgumentError`.
1209
1632
  *
1633
+ * Registrations passed as `registrations` are built once, before the routes
1634
+ * are added, and shared by every POST. Remaining `McpRequest` markers become
1635
+ * `HttpRouter.Request` markers, as with `layerHttp`.
1636
+ *
1210
1637
  * @see {@link layerHttp} for the long-lived HTTP transport and HTTP admission policy
1211
1638
  *
1212
1639
  * @stability unstable
@@ -1219,6 +1646,10 @@ export const layerHttpRequestScoped = options => Layer.effectDiscard(Effect.gen(
1219
1646
  if (stateful !== undefined) {
1220
1647
  return yield* new Cause.IllegalArgumentError(`McpServer.layerHttpRequestScoped does not support the sessionful MCP protocol ${stateful.protocolVersion}`);
1221
1648
  }
1649
+ const serverOptions = {
1650
+ ...options,
1651
+ cacheHints: yield* normalizeCacheHints(options.cacheHints)
1652
+ };
1222
1653
  const server = yield* McpServer;
1223
1654
  const {
1224
1655
  core,
@@ -1232,7 +1663,7 @@ export const layerHttpRequestScoped = options => Layer.effectDiscard(Effect.gen(
1232
1663
  subscribeServerNotifications: Effect.die("Subscriptions are disabled for request-scoped MCP servers"),
1233
1664
  getListChangeRevision: () => notificationDelivery.listChangeRevision,
1234
1665
  defaultLogLevel: yield* CurrentLogLevel,
1235
- serverInfo: options
1666
+ serverInfo: serverOptions
1236
1667
  });
1237
1668
  yield* Effect.acquireRelease(Effect.sync(() => {
1238
1669
  notificationDelivery.requestEndpoints++;
@@ -1247,7 +1678,7 @@ export const layerHttpRequestScoped = options => Layer.effectDiscard(Effect.gen(
1247
1678
  protocol
1248
1679
  } = yield* RpcServer.makeProtocolWithHttpEffect().pipe(Effect.provideService(RpcSerialization.RpcSerialization, mcpHttpSerialization));
1249
1680
  const notifications = yield* Queue.make();
1250
- yield* runWithRuntime(options, runtime, "http", {
1681
+ yield* runWithRuntime(serverOptions, runtime, "http", {
1251
1682
  notifications,
1252
1683
  handlers
1253
1684
  }).pipe(Effect.provideService(RpcServer.Protocol, protocol), Effect.provideService(McpServer, server), Effect.forkScoped({
@@ -1255,7 +1686,7 @@ export const layerHttpRequestScoped = options => Layer.effectDiscard(Effect.gen(
1255
1686
  }));
1256
1687
  return yield* Effect.provideService(httpEffect, RequestNotificationQueue, notifications);
1257
1688
  }));
1258
- })).pipe(Layer.provideMerge(McpServer.layer), Layer.provide(McpRuntime.layer(options.protocols)));
1689
+ })).pipe(Layer.provide(options.registrations ?? Layer.empty), Layer.provideMerge(McpServer.layer), Layer.provide(McpRuntime.layer(options.protocols)));
1259
1690
  const layerMcpProtocolHttp = options => Layer.effect(RpcServer.Protocol)(Effect.gen(function* () {
1260
1691
  const {
1261
1692
  httpEffect,
@@ -1366,7 +1797,10 @@ const normalizeMcpJsonRpcResponse = response => {
1366
1797
  } : response;
1367
1798
  };
1368
1799
  function mcpJsonRpcSerialization(options) {
1369
- const serialization = RpcSerialization.jsonRpc(options);
1800
+ const serialization = RpcSerialization.jsonRpc({
1801
+ ...options,
1802
+ controlMessages: false
1803
+ });
1370
1804
  return RpcSerialization.RpcSerialization.of({
1371
1805
  ...serialization,
1372
1806
  makeUnsafe: () => {
@@ -1474,6 +1908,13 @@ const toolResultContent = encoded => encoded === undefined ? [] : [{
1474
1908
  /**
1475
1909
  * Registers a `Toolkit` with the `McpServer`.
1476
1910
  *
1911
+ * **Details**
1912
+ *
1913
+ * The MCP middleware in the current context, provided with
1914
+ * `Effect.provide(middleware.layer)`, runs around every call to the toolkit.
1915
+ *
1916
+ * @see {@link ToolkitRequirements} for which services are request-level
1917
+ *
1477
1918
  * @stability unstable
1478
1919
  * @category handlers
1479
1920
  * @since 4.0.0
@@ -1494,12 +1935,11 @@ export const registerToolkit = /*#__PURE__*/Effect.fnUntraced(function* (toolkit
1494
1935
  }
1495
1936
  return Context.makeUnsafe(services);
1496
1937
  }));
1497
- const services = omitRequestServices(yield* Effect.context());
1498
- const reportCause = cause => Effect.provideContext(ErrorReporter.report(cause), services);
1938
+ const services = yield* Effect.context();
1499
1939
  // Interruption propagates; anything else is logged, reported and scrubbed.
1500
1940
  const internalToolError = cause => {
1501
1941
  const failure = Cause.findFail(cause);
1502
- return Result.isFailure(failure) && !Cause.hasDies(cause) ? Effect.failCause(failure.failure) : Effect.logError(cause).pipe(Effect.andThen(reportCause(cause)), Effect.as(toolErrorResult(INTERNAL_TOOL_ERROR_MESSAGE)));
1942
+ return Result.isFailure(failure) && !Cause.hasDies(cause) ? Effect.failCause(failure.failure) : Effect.logError(cause).pipe(Effect.andThen(ErrorReporter.report(cause)), Effect.as(toolErrorResult(INTERNAL_TOOL_ERROR_MESSAGE)));
1503
1943
  };
1504
1944
  const registrations = [];
1505
1945
  for (const tool of Object.values(built.tools)) {
@@ -1564,8 +2004,9 @@ export const registerToolkit = /*#__PURE__*/Effect.fnUntraced(function* (toolkit
1564
2004
  isError: result.isFailure,
1565
2005
  structuredContent: result.isFailure ? undefined : result.encodedResult,
1566
2006
  content: toolResultContent(result.encodedResult)
1567
- }))), Effect.catchCause(handleCause), Effect.provideContext(services));
1568
- }
2007
+ }))), Effect.catchCause(handleCause));
2008
+ },
2009
+ services
1569
2010
  });
1570
2011
  }
1571
2012
  for (const registration of registrations) {
@@ -1592,13 +2033,31 @@ const toolJsonSchema = (schema, strict) => {
1592
2033
  };
1593
2034
  };
1594
2035
  /**
1595
- * Registers an `AiToolkit` with the `McpServer`.
2036
+ * Creates a layer that registers a `Toolkit` with the `McpServer`.
2037
+ *
2038
+ * **Details**
2039
+ *
2040
+ * The layer requires `McpServer`. Pass it to a transport through the
2041
+ * `registrations` option, or provide the transport layer to it.
2042
+ *
2043
+ * @see {@link ToolkitRequirements} for which services are request-level
1596
2044
  *
1597
2045
  * @stability unstable
1598
2046
  * @category layers
1599
2047
  * @since 4.0.0
1600
2048
  */
1601
- export const toolkit = toolkit => Layer.effectDiscard(registerToolkit(toolkit)).pipe(Layer.provide(McpServer.layer));
2049
+ export const toolkit = toolkit => Layer.effectDiscard(registerToolkit(toolkit));
2050
+ // Leave defects and interruption to makeInvoke; convert only expected failures.
2051
+ const handlerFailureToInternalError = cause => Cause.hasDies(cause) || Cause.hasInterrupts(cause) ? Effect.failCause(cause) : Effect.fail(new InternalError({
2052
+ message: Cause.prettyErrors(cause)[0].message
2053
+ }));
2054
+ const completionHandler = (handle, encodeValues) => (input, context) => handle(input, context).pipe(Effect.flatMap(encodeValues), Effect.map(values => ({
2055
+ completion: {
2056
+ values: values,
2057
+ total: values.length,
2058
+ hasMore: false
2059
+ }
2060
+ })), Effect.catchCause(handlerFailureToInternalError));
1602
2061
  /**
1603
2062
  * Registers an MCP resource or resource template from an Effect program.
1604
2063
  *
@@ -1612,19 +2071,15 @@ export const registerResource = function () {
1612
2071
  if (arguments.length === 1) {
1613
2072
  const options = arguments[0];
1614
2073
  return Effect.gen(function* () {
1615
- const services = omitRequestServices(yield* Effect.context());
2074
+ const services = yield* Effect.context();
1616
2075
  const registry = yield* McpServer;
1617
2076
  yield* registry.addResource({
1618
2077
  resource: new Resource({
1619
2078
  ...options,
1620
2079
  annotations: options
1621
2080
  }),
1622
- handle: options.content.pipe(Effect.provideContext(services), Effect.map(content => resolveResourceContent(options.uri, content)), Effect.catchCause(cause => {
1623
- const prettyError = Cause.prettyErrors(cause)[0];
1624
- return Effect.fail(new InternalError({
1625
- message: prettyError.message
1626
- }));
1627
- })),
2081
+ services,
2082
+ handle: options.content.pipe(Effect.map(content => resolveResourceContent(options.uri, content)), Effect.catchCause(handlerFailureToInternalError)),
1628
2083
  annotations: options.annotations ?? Context.empty()
1629
2084
  });
1630
2085
  });
@@ -1636,7 +2091,7 @@ export const registerResource = function () {
1636
2091
  uriPath
1637
2092
  } = compileUriTemplate(...arguments);
1638
2093
  return Effect.fnUntraced(function* (options) {
1639
- const services = omitRequestServices(yield* Effect.context());
2094
+ const services = yield* Effect.context();
1640
2095
  const registry = yield* McpServer;
1641
2096
  const decode = Schema.decodeUnknownEffect(schema);
1642
2097
  const template = new ResourceTemplate({
@@ -1646,41 +2101,32 @@ export const registerResource = function () {
1646
2101
  });
1647
2102
  const completions = Object.create(null);
1648
2103
  for (const [param, handle] of Object.entries(options.completion ?? {})) {
1649
- const encodeArray = Schema.encodeUnknownEffect(Schema.Array(params[param]));
1650
- const handler = (input, context) => handle(input, context).pipe(Effect.flatMap(encodeArray), Effect.map(values => ({
1651
- completion: {
1652
- values: values,
1653
- total: values.length,
1654
- hasMore: false
1655
- }
1656
- })), Effect.catchCause(cause => {
1657
- const prettyError = Cause.prettyErrors(cause)[0];
1658
- return Effect.fail(new InternalError({
1659
- message: prettyError.message
1660
- }));
1661
- }), Effect.provideContext(services));
1662
- completions[param] = handler;
2104
+ completions[param] = completionHandler(handle, Schema.encodeUnknownEffect(Schema.Array(params[param])));
1663
2105
  }
1664
2106
  yield* registry.addResourceTemplate({
1665
2107
  template,
1666
2108
  routerPath,
1667
2109
  completions,
2110
+ services,
1668
2111
  annotations: options.annotations ?? Context.empty(),
1669
2112
  handle: (uri, params) => decode(params).pipe(Effect.mapError(error => new InvalidParams({
1670
2113
  message: error.message
1671
- })), Effect.flatMap(params => options.content(uri, ...params).pipe(Effect.map(content => resolveResourceContent(uri, content)), Effect.catchCause(cause => {
1672
- const prettyError = Cause.prettyErrors(cause)[0];
1673
- return Effect.fail(new InternalError({
1674
- message: prettyError.message
1675
- }));
1676
- }))), Effect.provideContext(services))
2114
+ })), Effect.flatMap(params => options.content(uri, ...params).pipe(Effect.map(content => resolveResourceContent(uri, content)), Effect.catchCause(handlerFailureToInternalError))))
1677
2115
  });
1678
2116
  });
1679
2117
  };
1680
2118
  /**
1681
2119
  * Creates a layer that registers an MCP resource or resource template.
1682
2120
  *
2121
+ * **Details**
2122
+ *
2123
+ * Services read by the content and completion handlers are request-level, so
2124
+ * providing them with `Layer.provide` doesn't satisfy them. Read
2125
+ * construction-time services in an enclosing `Layer.unwrap` and close over
2126
+ * them, and provide per-request services with MCP middleware.
2127
+ *
1683
2128
  * @see {@link registerResource} for the Effect-level resource registration API
2129
+ * @see {@link middleware} for providing request-level dependencies
1684
2130
  *
1685
2131
  * @stability unstable
1686
2132
  * @category layers
@@ -1688,10 +2134,10 @@ export const registerResource = function () {
1688
2134
  */
1689
2135
  export const resource = function () {
1690
2136
  if (arguments.length === 1) {
1691
- return Layer.effectDiscard(registerResource(arguments[0])).pipe(Layer.provide(McpServer.layer));
2137
+ return Layer.effectDiscard(registerResource(arguments[0]));
1692
2138
  }
1693
2139
  const register = registerResource(...arguments);
1694
- return options => Layer.effectDiscard(register(options)).pipe(Layer.provide(McpServer.layer));
2140
+ return options => Layer.effectDiscard(register(options));
1695
2141
  };
1696
2142
  /**
1697
2143
  * Registers an MCP prompt from an Effect program.
@@ -1727,36 +2173,19 @@ export const registerPrompt = options => {
1727
2173
  const completion = options.completion ?? {};
1728
2174
  return Effect.gen(function* () {
1729
2175
  const registry = yield* McpServer;
1730
- const services = omitRequestServices(yield* Effect.context());
2176
+ const services = yield* Effect.context();
1731
2177
  const completions = Object.create(null);
1732
2178
  for (const [param, handle] of Object.entries(completion)) {
1733
- const encodeArray = Schema.encodeEffect(Schema.Array(props[param]));
1734
- const handler = (input, context) => handle(input, context).pipe(Effect.flatMap(encodeArray), Effect.map(values => ({
1735
- completion: {
1736
- values: values,
1737
- total: values.length,
1738
- hasMore: false
1739
- }
1740
- })), Effect.catchCause(cause => {
1741
- const prettyError = Cause.prettyErrors(cause)[0];
1742
- return Effect.fail(new InternalError({
1743
- message: prettyError.message
1744
- }));
1745
- }), Effect.provide(services));
1746
- completions[param] = handler;
2179
+ completions[param] = completionHandler(handle, Schema.encodeUnknownEffect(Schema.Array(props[param])));
1747
2180
  }
1748
2181
  yield* registry.addPrompt({
1749
2182
  prompt,
1750
2183
  completions,
2184
+ services,
1751
2185
  annotations: options.annotations ?? Context.empty(),
1752
2186
  handle: params => decode(params).pipe(Effect.mapError(error => new InvalidParams({
1753
2187
  message: error.message
1754
- })), Effect.flatMap(params => options.content(params).pipe(Effect.catchCause(cause => {
1755
- const prettyError = Cause.prettyErrors(cause)[0];
1756
- return Effect.fail(new InternalError({
1757
- message: prettyError.message
1758
- }));
1759
- }))), Effect.map(messages => {
2188
+ })), Effect.flatMap(params => options.content(params).pipe(Effect.catchCause(handlerFailureToInternalError))), Effect.map(messages => {
1760
2189
  messages = typeof messages === "string" ? [{
1761
2190
  role: "user",
1762
2191
  content: TextContent.make({
@@ -1767,20 +2196,28 @@ export const registerPrompt = options => {
1767
2196
  messages,
1768
2197
  description: prompt.description
1769
2198
  });
1770
- }), Effect.provideContext(services))
2199
+ }))
1771
2200
  });
1772
2201
  });
1773
2202
  };
1774
2203
  /**
1775
2204
  * Creates a layer that registers an MCP prompt.
1776
2205
  *
2206
+ * **Details**
2207
+ *
2208
+ * Services read by the content and completion handlers are request-level, so
2209
+ * providing them with `Layer.provide` doesn't satisfy them. Read
2210
+ * construction-time services in an enclosing `Layer.unwrap` and close over
2211
+ * them, and provide per-request services with MCP middleware.
2212
+ *
1777
2213
  * @see {@link registerPrompt} for the Effect-level prompt registration API
2214
+ * @see {@link middleware} for providing request-level dependencies
1778
2215
  *
1779
2216
  * @stability unstable
1780
2217
  * @category layers
1781
2218
  * @since 4.0.0
1782
2219
  */
1783
- export const prompt = options => Layer.effectDiscard(registerPrompt(options)).pipe(Layer.provide(McpServer.layer));
2220
+ export const prompt = options => Layer.effectDiscard(registerPrompt(options));
1784
2221
  /**
1785
2222
  * Collects structured input from the current MCP client and decodes the
1786
2223
  * accepted response with `schema`.
@@ -1828,6 +2265,21 @@ export const elicit = /*#__PURE__*/Effect.fnUntraced(function* (options) {
1828
2265
  * @since 4.0.0
1829
2266
  */
1830
2267
  export const clientCapabilities = /*#__PURE__*/McpRequestContext.useSync(_ => _.clientCapabilities);
2268
+ /**
2269
+ * Decodes an `Mcp-Name` header, including base64-wrapped values.
2270
+ * Returns `undefined` for malformed values.
2271
+ *
2272
+ * **Details**
2273
+ *
2274
+ * Use in `HttpRouter.middleware` to identify the tool, prompt or resource
2275
+ * targeted by a `2026-07-28` request. Earlier protocols carry the name only
2276
+ * in the JSON-RPC body.
2277
+ *
2278
+ * @stability unstable
2279
+ * @category decoding
2280
+ * @since 4.0.0
2281
+ */
2282
+ export const decodeNameHeader = value => McpProtocolInternal.decodeRoutingHeader(value);
1831
2283
  // -----------------------------------------------------------------------------
1832
2284
  // Internal
1833
2285
  // -----------------------------------------------------------------------------