effect 4.0.7 → 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 (679) hide show
  1. package/README.md +1 -1
  2. package/dist/BigDecimal.d.ts.map +1 -1
  3. package/dist/BigDecimal.js +3 -0
  4. package/dist/BigDecimal.js.map +1 -1
  5. package/dist/Channel.d.ts +12 -6
  6. package/dist/Channel.d.ts.map +1 -1
  7. package/dist/Channel.js +9 -3
  8. package/dist/Channel.js.map +1 -1
  9. package/dist/Config.d.ts +7 -1
  10. package/dist/Config.d.ts.map +1 -1
  11. package/dist/Config.js.map +1 -1
  12. package/dist/Context.d.ts +18 -1
  13. package/dist/Context.d.ts.map +1 -1
  14. package/dist/Context.js +27 -8
  15. package/dist/Context.js.map +1 -1
  16. package/dist/Cron.d.ts +81 -11
  17. package/dist/Cron.d.ts.map +1 -1
  18. package/dist/Cron.js +101 -26
  19. package/dist/Cron.js.map +1 -1
  20. package/dist/Duration.d.ts +78 -0
  21. package/dist/Duration.d.ts.map +1 -1
  22. package/dist/Duration.js +123 -0
  23. package/dist/Duration.js.map +1 -1
  24. package/dist/Effect.d.ts +164 -7
  25. package/dist/Effect.d.ts.map +1 -1
  26. package/dist/Effect.js +11 -1
  27. package/dist/Effect.js.map +1 -1
  28. package/dist/FileSystem.d.ts +59 -4
  29. package/dist/FileSystem.d.ts.map +1 -1
  30. package/dist/FileSystem.js +9 -2
  31. package/dist/FileSystem.js.map +1 -1
  32. package/dist/Glob.d.ts +165 -0
  33. package/dist/Glob.d.ts.map +1 -0
  34. package/dist/Glob.js +127 -0
  35. package/dist/Glob.js.map +1 -0
  36. package/dist/Match.d.ts +86 -0
  37. package/dist/Match.d.ts.map +1 -1
  38. package/dist/Match.js +72 -0
  39. package/dist/Match.js.map +1 -1
  40. package/dist/Pool.d.ts +51 -0
  41. package/dist/Pool.d.ts.map +1 -1
  42. package/dist/Pool.js +59 -9
  43. package/dist/Pool.js.map +1 -1
  44. package/dist/Random.d.ts.map +1 -1
  45. package/dist/Random.js +3 -3
  46. package/dist/Random.js.map +1 -1
  47. package/dist/RcMap.d.ts.map +1 -1
  48. package/dist/RcMap.js +8 -2
  49. package/dist/RcMap.js.map +1 -1
  50. package/dist/Schedule.d.ts +18 -1
  51. package/dist/Schedule.d.ts.map +1 -1
  52. package/dist/Schedule.js +7 -2
  53. package/dist/Schedule.js.map +1 -1
  54. package/dist/Schema.d.ts +666 -41
  55. package/dist/Schema.d.ts.map +1 -1
  56. package/dist/Schema.js +650 -0
  57. package/dist/Schema.js.map +1 -1
  58. package/dist/SchemaGetter.d.ts +6 -1
  59. package/dist/SchemaGetter.d.ts.map +1 -1
  60. package/dist/SchemaGetter.js +22 -11
  61. package/dist/SchemaGetter.js.map +1 -1
  62. package/dist/SchemaRepresentation.d.ts +14 -0
  63. package/dist/SchemaRepresentation.d.ts.map +1 -1
  64. package/dist/SchemaRepresentation.js +16 -0
  65. package/dist/SchemaRepresentation.js.map +1 -1
  66. package/dist/SchemaTransformation.d.ts +8 -3
  67. package/dist/SchemaTransformation.d.ts.map +1 -1
  68. package/dist/SchemaTransformation.js +6 -3
  69. package/dist/SchemaTransformation.js.map +1 -1
  70. package/dist/ScopedCache.d.ts.map +1 -1
  71. package/dist/ScopedCache.js +5 -7
  72. package/dist/ScopedCache.js.map +1 -1
  73. package/dist/Semaphore.d.ts +130 -0
  74. package/dist/Semaphore.d.ts.map +1 -1
  75. package/dist/Semaphore.js +40 -0
  76. package/dist/Semaphore.js.map +1 -1
  77. package/dist/Stream.d.ts +13 -4
  78. package/dist/Stream.d.ts.map +1 -1
  79. package/dist/Stream.js +9 -0
  80. package/dist/Stream.js.map +1 -1
  81. package/dist/Terminal.d.ts +18 -1
  82. package/dist/Terminal.d.ts.map +1 -1
  83. package/dist/Terminal.js +1 -1
  84. package/dist/Terminal.js.map +1 -1
  85. package/dist/ai/AiError.d.ts +43 -116
  86. package/dist/ai/AiError.d.ts.map +1 -1
  87. package/dist/ai/AiError.js +53 -72
  88. package/dist/ai/AiError.js.map +1 -1
  89. package/dist/ai/Decision.d.ts +196 -15
  90. package/dist/ai/Decision.d.ts.map +1 -1
  91. package/dist/ai/Decision.js +130 -0
  92. package/dist/ai/Decision.js.map +1 -1
  93. package/dist/ai/DecisionModel.d.ts +54 -13
  94. package/dist/ai/DecisionModel.d.ts.map +1 -1
  95. package/dist/ai/DecisionModel.js +123 -12
  96. package/dist/ai/DecisionModel.js.map +1 -1
  97. package/dist/ai/McpServer.d.ts +630 -29
  98. package/dist/ai/McpServer.d.ts.map +1 -1
  99. package/dist/ai/McpServer.js +562 -116
  100. package/dist/ai/McpServer.js.map +1 -1
  101. package/dist/ai/McpTest.d.ts +130 -0
  102. package/dist/ai/McpTest.d.ts.map +1 -0
  103. package/dist/ai/McpTest.js +237 -0
  104. package/dist/ai/McpTest.js.map +1 -0
  105. package/dist/ai/Response.d.ts +1 -25
  106. package/dist/ai/Response.d.ts.map +1 -1
  107. package/dist/ai/Response.js +1 -10
  108. package/dist/ai/Response.js.map +1 -1
  109. package/dist/ai/Tool.d.ts +19 -1
  110. package/dist/ai/Tool.d.ts.map +1 -1
  111. package/dist/ai/Tool.js.map +1 -1
  112. package/dist/ai/index.d.ts +5 -0
  113. package/dist/ai/index.d.ts.map +1 -1
  114. package/dist/ai/index.js +5 -0
  115. package/dist/ai/index.js.map +1 -1
  116. package/dist/ai/internal/mcpCore.js +17 -12
  117. package/dist/ai/internal/mcpCore.js.map +1 -1
  118. package/dist/ai/internal/mcpProtocol/v2024_11_05.js +4 -5
  119. package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
  120. package/dist/ai/internal/mcpProtocol/v2025_03_26.js +4 -5
  121. package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
  122. package/dist/ai/internal/mcpProtocol/v2025_06_18.js +4 -5
  123. package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
  124. package/dist/ai/internal/mcpProtocol/v2025_11_25.js +4 -5
  125. package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
  126. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +18 -10
  127. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  128. package/dist/ai/internal/mcpProtocol.js +13 -0
  129. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  130. package/dist/ai/internal/mcpRuntime.js +5 -3
  131. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  132. package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
  133. package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
  134. package/dist/cli/Argument.d.ts +6 -0
  135. package/dist/cli/Argument.d.ts.map +1 -1
  136. package/dist/cli/Argument.js +2 -0
  137. package/dist/cli/Argument.js.map +1 -1
  138. package/dist/cli/CliOutput.d.ts +65 -1
  139. package/dist/cli/CliOutput.d.ts.map +1 -1
  140. package/dist/cli/CliOutput.js +94 -37
  141. package/dist/cli/CliOutput.js.map +1 -1
  142. package/dist/cli/Command.d.ts +23 -0
  143. package/dist/cli/Command.d.ts.map +1 -1
  144. package/dist/cli/Command.js +8 -0
  145. package/dist/cli/Command.js.map +1 -1
  146. package/dist/cli/Flag.d.ts +107 -0
  147. package/dist/cli/Flag.d.ts.map +1 -1
  148. package/dist/cli/Flag.js +37 -0
  149. package/dist/cli/Flag.js.map +1 -1
  150. package/dist/cli/HelpDoc.d.ts +15 -1
  151. package/dist/cli/HelpDoc.d.ts.map +1 -1
  152. package/dist/cli/Param.d.ts +6 -0
  153. package/dist/cli/Param.d.ts.map +1 -1
  154. package/dist/cli/Param.js +2 -0
  155. package/dist/cli/Param.js.map +1 -1
  156. package/dist/cli/Primitive.d.ts +14 -0
  157. package/dist/cli/Primitive.d.ts.map +1 -1
  158. package/dist/cli/Primitive.js +15 -1
  159. package/dist/cli/Primitive.js.map +1 -1
  160. package/dist/cli/Prompt.d.ts +1 -0
  161. package/dist/cli/Prompt.d.ts.map +1 -1
  162. package/dist/cli/Prompt.js +1 -0
  163. package/dist/cli/Prompt.js.map +1 -1
  164. package/dist/cli/internal/help.d.ts.map +1 -1
  165. package/dist/cli/internal/help.js +17 -10
  166. package/dist/cli/internal/help.js.map +1 -1
  167. package/dist/cluster/Sharding.d.ts.map +1 -1
  168. package/dist/cluster/Sharding.js +90 -28
  169. package/dist/cluster/Sharding.js.map +1 -1
  170. package/dist/cluster/ShardingConfig.d.ts +72 -6
  171. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  172. package/dist/cluster/ShardingConfig.js +4 -0
  173. package/dist/cluster/ShardingConfig.js.map +1 -1
  174. package/dist/cluster/SingleRunner.d.ts +3 -3
  175. package/dist/cluster/SingleRunner.d.ts.map +1 -1
  176. package/dist/cluster/SingleRunner.js +1 -1
  177. package/dist/cluster/SqlMessageStorage.d.ts +37 -6
  178. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  179. package/dist/cluster/SqlMessageStorage.js +34 -7
  180. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  181. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  182. package/dist/cluster/SqlRunnerStorage.js +23 -8
  183. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  184. package/dist/crypto/Aead.d.ts +322 -0
  185. package/dist/crypto/Aead.d.ts.map +1 -0
  186. package/dist/crypto/Aead.js +331 -0
  187. package/dist/crypto/Aead.js.map +1 -0
  188. package/dist/crypto/Cipher.d.ts +235 -0
  189. package/dist/crypto/Cipher.d.ts.map +1 -0
  190. package/dist/crypto/Cipher.js +233 -0
  191. package/dist/crypto/Cipher.js.map +1 -0
  192. package/dist/crypto/CryptoError.d.ts +212 -0
  193. package/dist/crypto/CryptoError.d.ts.map +1 -0
  194. package/dist/crypto/CryptoError.js +202 -0
  195. package/dist/crypto/CryptoError.js.map +1 -0
  196. package/dist/crypto/Digest.d.ts +143 -0
  197. package/dist/crypto/Digest.d.ts.map +1 -0
  198. package/dist/crypto/Digest.js +146 -0
  199. package/dist/crypto/Digest.js.map +1 -0
  200. package/dist/crypto/Kdf.d.ts +220 -0
  201. package/dist/crypto/Kdf.d.ts.map +1 -0
  202. package/dist/crypto/Kdf.js +212 -0
  203. package/dist/crypto/Kdf.js.map +1 -0
  204. package/dist/crypto/KeyAgreement.d.ts +323 -0
  205. package/dist/crypto/KeyAgreement.d.ts.map +1 -0
  206. package/dist/crypto/KeyAgreement.js +303 -0
  207. package/dist/crypto/KeyAgreement.js.map +1 -0
  208. package/dist/crypto/KeyFormat.d.ts +309 -0
  209. package/dist/crypto/KeyFormat.d.ts.map +1 -0
  210. package/dist/crypto/KeyFormat.js +556 -0
  211. package/dist/crypto/KeyFormat.js.map +1 -0
  212. package/dist/crypto/KeyWrap.d.ts +389 -0
  213. package/dist/crypto/KeyWrap.d.ts.map +1 -0
  214. package/dist/crypto/KeyWrap.js +381 -0
  215. package/dist/crypto/KeyWrap.js.map +1 -0
  216. package/dist/crypto/Mac.d.ts +277 -0
  217. package/dist/crypto/Mac.d.ts.map +1 -0
  218. package/dist/crypto/Mac.js +288 -0
  219. package/dist/crypto/Mac.js.map +1 -0
  220. package/dist/crypto/SecureRandom.d.ts +340 -0
  221. package/dist/crypto/SecureRandom.d.ts.map +1 -0
  222. package/dist/crypto/SecureRandom.js +257 -0
  223. package/dist/crypto/SecureRandom.js.map +1 -0
  224. package/dist/crypto/Signature.d.ts +448 -0
  225. package/dist/crypto/Signature.d.ts.map +1 -0
  226. package/dist/crypto/Signature.js +484 -0
  227. package/dist/crypto/Signature.js.map +1 -0
  228. package/dist/crypto/WebCrypto.d.ts +61 -0
  229. package/dist/crypto/WebCrypto.d.ts.map +1 -0
  230. package/dist/crypto/WebCrypto.js +63 -0
  231. package/dist/crypto/WebCrypto.js.map +1 -0
  232. package/dist/crypto/index.d.ts +65 -0
  233. package/dist/crypto/index.d.ts.map +1 -0
  234. package/dist/crypto/index.js +66 -0
  235. package/dist/crypto/index.js.map +1 -0
  236. package/dist/crypto/internal/asymmetric.d.ts +2 -0
  237. package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
  238. package/dist/crypto/internal/asymmetric.js +210 -0
  239. package/dist/crypto/internal/asymmetric.js.map +1 -0
  240. package/dist/crypto/internal/chacha.d.ts +46 -0
  241. package/dist/crypto/internal/chacha.d.ts.map +1 -0
  242. package/dist/crypto/internal/chacha.js +885 -0
  243. package/dist/crypto/internal/chacha.js.map +1 -0
  244. package/dist/crypto/internal/der.d.ts +6 -0
  245. package/dist/crypto/internal/der.d.ts.map +1 -0
  246. package/dist/crypto/internal/der.js +86 -0
  247. package/dist/crypto/internal/der.js.map +1 -0
  248. package/dist/crypto/internal/digest.d.ts +2 -0
  249. package/dist/crypto/internal/digest.d.ts.map +1 -0
  250. package/dist/crypto/internal/digest.js +15 -0
  251. package/dist/crypto/internal/digest.js.map +1 -0
  252. package/dist/crypto/internal/key.d.ts +2 -0
  253. package/dist/crypto/internal/key.d.ts.map +1 -0
  254. package/dist/crypto/internal/key.js +170 -0
  255. package/dist/crypto/internal/key.js.map +1 -0
  256. package/dist/crypto/internal/md5.d.ts +39 -0
  257. package/dist/crypto/internal/md5.d.ts.map +1 -0
  258. package/dist/crypto/internal/md5.js +179 -0
  259. package/dist/crypto/internal/md5.js.map +1 -0
  260. package/dist/crypto/internal/webCrypto.d.ts +2 -0
  261. package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
  262. package/dist/crypto/internal/webCrypto.js +111 -0
  263. package/dist/crypto/internal/webCrypto.js.map +1 -0
  264. package/dist/encoding/Base64Url.d.ts.map +1 -1
  265. package/dist/encoding/Base64Url.js +3 -2
  266. package/dist/encoding/Base64Url.js.map +1 -1
  267. package/dist/encoding/Csv.d.ts +608 -0
  268. package/dist/encoding/Csv.d.ts.map +1 -0
  269. package/dist/encoding/Csv.js +718 -0
  270. package/dist/encoding/Csv.js.map +1 -0
  271. package/dist/encoding/Hex.d.ts +3 -2
  272. package/dist/encoding/Hex.d.ts.map +1 -1
  273. package/dist/encoding/Hex.js +3 -2
  274. package/dist/encoding/Hex.js.map +1 -1
  275. package/dist/encoding/SchemaBinary.d.ts.map +1 -1
  276. package/dist/encoding/SchemaBinary.js +42 -4
  277. package/dist/encoding/SchemaBinary.js.map +1 -1
  278. package/dist/encoding/Toml.d.ts +17 -3
  279. package/dist/encoding/Toml.d.ts.map +1 -1
  280. package/dist/encoding/Toml.js +104 -16
  281. package/dist/encoding/Toml.js.map +1 -1
  282. package/dist/encoding/Yaml.d.ts +8 -1
  283. package/dist/encoding/Yaml.d.ts.map +1 -1
  284. package/dist/encoding/Yaml.js +54 -18
  285. package/dist/encoding/Yaml.js.map +1 -1
  286. package/dist/encoding/index.d.ts +5 -0
  287. package/dist/encoding/index.d.ts.map +1 -1
  288. package/dist/encoding/index.js +5 -0
  289. package/dist/encoding/index.js.map +1 -1
  290. package/dist/eventlog/EventJournal.d.ts.map +1 -1
  291. package/dist/eventlog/EventJournal.js +6 -3
  292. package/dist/eventlog/EventJournal.js.map +1 -1
  293. package/dist/eventlog/EventLog.d.ts +119 -4
  294. package/dist/eventlog/EventLog.d.ts.map +1 -1
  295. package/dist/eventlog/EventLog.js +200 -12
  296. package/dist/eventlog/EventLog.js.map +1 -1
  297. package/dist/eventlog/EventLogEncryption.d.ts +41 -4
  298. package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
  299. package/dist/eventlog/EventLogEncryption.js +83 -64
  300. package/dist/eventlog/EventLogEncryption.js.map +1 -1
  301. package/dist/eventlog/EventLogMessage.d.ts +279 -0
  302. package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
  303. package/dist/eventlog/EventLogMessage.js +217 -1
  304. package/dist/eventlog/EventLogMessage.js.map +1 -1
  305. package/dist/eventlog/EventLogRemote.d.ts +200 -28
  306. package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
  307. package/dist/eventlog/EventLogRemote.js +186 -16
  308. package/dist/eventlog/EventLogRemote.js.map +1 -1
  309. package/dist/eventlog/EventLogServer.d.ts +3 -0
  310. package/dist/eventlog/EventLogServer.d.ts.map +1 -1
  311. package/dist/eventlog/EventLogServer.js +18 -10
  312. package/dist/eventlog/EventLogServer.js.map +1 -1
  313. package/dist/eventlog/EventLogServerEncrypted.d.ts +326 -5
  314. package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  315. package/dist/eventlog/EventLogServerEncrypted.js +769 -14
  316. package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
  317. package/dist/eventlog/EventLogSessionAuth.d.ts +5 -3
  318. package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
  319. package/dist/eventlog/EventLogSessionAuth.js +41 -64
  320. package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
  321. package/dist/eventlog/EventRow.d.ts +4 -0
  322. package/dist/eventlog/EventRow.d.ts.map +1 -1
  323. package/dist/eventlog/EventRow.js +12 -2
  324. package/dist/eventlog/EventRow.js.map +1 -1
  325. package/dist/eventlog/SqlEventJournal.js +2 -2
  326. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  327. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
  328. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  329. package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
  330. package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  331. package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
  332. package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  333. package/dist/eventlog/internal/batches.d.ts +12 -0
  334. package/dist/eventlog/internal/batches.d.ts.map +1 -0
  335. package/dist/eventlog/internal/batches.js +26 -0
  336. package/dist/eventlog/internal/batches.js.map +1 -0
  337. package/dist/eventlog/internal/compaction.d.ts +38 -0
  338. package/dist/eventlog/internal/compaction.d.ts.map +1 -0
  339. package/dist/eventlog/internal/compaction.js +33 -0
  340. package/dist/eventlog/internal/compaction.js.map +1 -0
  341. package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
  342. package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
  343. package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
  344. package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
  345. package/dist/eventlog/internal/remoteCompaction.js +76 -0
  346. package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
  347. package/dist/http/Cookies.d.ts +172 -0
  348. package/dist/http/Cookies.d.ts.map +1 -1
  349. package/dist/http/Cookies.js +143 -1
  350. package/dist/http/Cookies.js.map +1 -1
  351. package/dist/http/FetchHttpClient.d.ts +26 -2
  352. package/dist/http/FetchHttpClient.d.ts.map +1 -1
  353. package/dist/http/FetchHttpClient.js +78 -15
  354. package/dist/http/FetchHttpClient.js.map +1 -1
  355. package/dist/http/HttpClient.d.ts +79 -8
  356. package/dist/http/HttpClient.d.ts.map +1 -1
  357. package/dist/http/HttpClient.js +65 -5
  358. package/dist/http/HttpClient.js.map +1 -1
  359. package/dist/http/HttpClientRequest.d.ts +9 -5
  360. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  361. package/dist/http/HttpClientRequest.js +2 -3
  362. package/dist/http/HttpClientRequest.js.map +1 -1
  363. package/dist/http/HttpClientResponse.d.ts.map +1 -1
  364. package/dist/http/HttpClientResponse.js +3 -2
  365. package/dist/http/HttpClientResponse.js.map +1 -1
  366. package/dist/http/HttpMethod.d.ts +7 -1
  367. package/dist/http/HttpMethod.d.ts.map +1 -1
  368. package/dist/http/HttpMethod.js +3 -8
  369. package/dist/http/HttpMethod.js.map +1 -1
  370. package/dist/http/HttpServerRequest.d.ts +5 -2
  371. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  372. package/dist/http/HttpServerRequest.js +6 -17
  373. package/dist/http/HttpServerRequest.js.map +1 -1
  374. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  375. package/dist/http/HttpServerResponse.js +3 -2
  376. package/dist/http/HttpServerResponse.js.map +1 -1
  377. package/dist/http/HttpTraceContext.d.ts +2 -1
  378. package/dist/http/HttpTraceContext.d.ts.map +1 -1
  379. package/dist/http/HttpTraceContext.js +7 -5
  380. package/dist/http/HttpTraceContext.js.map +1 -1
  381. package/dist/http/ProblemDetails.d.ts +96 -0
  382. package/dist/http/ProblemDetails.d.ts.map +1 -0
  383. package/dist/http/ProblemDetails.js +98 -0
  384. package/dist/http/ProblemDetails.js.map +1 -0
  385. package/dist/http/index.d.ts +5 -0
  386. package/dist/http/index.d.ts.map +1 -1
  387. package/dist/http/index.js +5 -0
  388. package/dist/http/index.js.map +1 -1
  389. package/dist/http/internal/decompression.js +3 -2
  390. package/dist/http/internal/decompression.js.map +1 -1
  391. package/dist/http/internal/urlParams.js +8 -0
  392. package/dist/http/internal/urlParams.js.map +1 -1
  393. package/dist/http-api/HttpApiBuilder.js +19 -5
  394. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  395. package/dist/http-api/HttpApiClient.d.ts +63 -0
  396. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  397. package/dist/http-api/HttpApiClient.js +51 -0
  398. package/dist/http-api/HttpApiClient.js.map +1 -1
  399. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  400. package/dist/http-api/HttpApiEndpoint.js +14 -5
  401. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  402. package/dist/http-api/HttpApiError.d.ts +185 -13
  403. package/dist/http-api/HttpApiError.d.ts.map +1 -1
  404. package/dist/http-api/HttpApiError.js +128 -0
  405. package/dist/http-api/HttpApiError.js.map +1 -1
  406. package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
  407. package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
  408. package/dist/http-api/HttpApiMiddleware.js +85 -1
  409. package/dist/http-api/HttpApiMiddleware.js.map +1 -1
  410. package/dist/http-api/HttpApiSchema.d.ts +76 -14
  411. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  412. package/dist/http-api/HttpApiSchema.js +53 -0
  413. package/dist/http-api/HttpApiSchema.js.map +1 -1
  414. package/dist/index.d.ts +5 -5
  415. package/dist/index.d.ts.map +1 -1
  416. package/dist/index.js +5 -5
  417. package/dist/index.js.map +1 -1
  418. package/dist/internal/effect.js +25 -14
  419. package/dist/internal/effect.js.map +1 -1
  420. package/dist/internal/glob.d.ts +2 -0
  421. package/dist/internal/glob.d.ts.map +1 -0
  422. package/dist/internal/glob.js +630 -0
  423. package/dist/internal/glob.js.map +1 -0
  424. package/dist/internal/matcher.js +10 -0
  425. package/dist/internal/matcher.js.map +1 -1
  426. package/dist/internal/persistence.js +9 -0
  427. package/dist/internal/persistence.js.map +1 -1
  428. package/dist/internal/rcRef.js +4 -1
  429. package/dist/internal/rcRef.js.map +1 -1
  430. package/dist/internal/schema/toCodeDocument.js +6 -3
  431. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  432. package/dist/internal/trie.js +42 -13
  433. package/dist/internal/trie.js.map +1 -1
  434. package/dist/internal/ulid.js +41 -0
  435. package/dist/internal/ulid.js.map +1 -1
  436. package/dist/internal/uuid.js +52 -8
  437. package/dist/internal/uuid.js.map +1 -1
  438. package/dist/internal/version.js +1 -1
  439. package/dist/observability/Otlp.d.ts +15 -4
  440. package/dist/observability/Otlp.d.ts.map +1 -1
  441. package/dist/observability/Otlp.js +10 -0
  442. package/dist/observability/Otlp.js.map +1 -1
  443. package/dist/observability/OtlpResource.d.ts +7 -0
  444. package/dist/observability/OtlpResource.d.ts.map +1 -1
  445. package/dist/observability/OtlpResource.js +11 -1
  446. package/dist/observability/OtlpResource.js.map +1 -1
  447. package/dist/persistence/KeyValueStore.d.ts +47 -2
  448. package/dist/persistence/KeyValueStore.d.ts.map +1 -1
  449. package/dist/persistence/KeyValueStore.js +129 -18
  450. package/dist/persistence/KeyValueStore.js.map +1 -1
  451. package/dist/persistence/PersistedQueue.d.ts +9 -0
  452. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  453. package/dist/persistence/PersistedQueue.js +94 -52
  454. package/dist/persistence/PersistedQueue.js.map +1 -1
  455. package/dist/persistence/Persistence.d.ts +10 -4
  456. package/dist/persistence/Persistence.d.ts.map +1 -1
  457. package/dist/persistence/Persistence.js +18 -11
  458. package/dist/persistence/Persistence.js.map +1 -1
  459. package/dist/process/ChildProcess.d.ts +207 -67
  460. package/dist/process/ChildProcess.d.ts.map +1 -1
  461. package/dist/process/ChildProcess.js +56 -158
  462. package/dist/process/ChildProcess.js.map +1 -1
  463. package/dist/process/ChildProcessSpawner.d.ts +5 -0
  464. package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
  465. package/dist/process/ChildProcessSpawner.js.map +1 -1
  466. package/dist/process/CommandLine.d.ts +294 -0
  467. package/dist/process/CommandLine.d.ts.map +1 -0
  468. package/dist/process/CommandLine.js +481 -0
  469. package/dist/process/CommandLine.js.map +1 -0
  470. package/dist/process/index.d.ts +5 -0
  471. package/dist/process/index.d.ts.map +1 -1
  472. package/dist/process/index.js +5 -0
  473. package/dist/process/index.js.map +1 -1
  474. package/dist/reactivity/Atom.d.ts +2 -1
  475. package/dist/reactivity/Atom.d.ts.map +1 -1
  476. package/dist/reactivity/Atom.js +3 -4
  477. package/dist/reactivity/Atom.js.map +1 -1
  478. package/dist/reactivity/AtomRegistry.js.map +1 -1
  479. package/dist/rpc/RpcClient.d.ts +16 -1
  480. package/dist/rpc/RpcClient.d.ts.map +1 -1
  481. package/dist/rpc/RpcClient.js +50 -16
  482. package/dist/rpc/RpcClient.js.map +1 -1
  483. package/dist/rpc/RpcMessage.d.ts +10 -1
  484. package/dist/rpc/RpcMessage.d.ts.map +1 -1
  485. package/dist/rpc/RpcMessage.js +1 -0
  486. package/dist/rpc/RpcMessage.js.map +1 -1
  487. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  488. package/dist/rpc/RpcSerialization.js +6 -0
  489. package/dist/rpc/RpcSerialization.js.map +1 -1
  490. package/dist/rpc/RpcServer.d.ts +31 -0
  491. package/dist/rpc/RpcServer.d.ts.map +1 -1
  492. package/dist/rpc/RpcServer.js +139 -66
  493. package/dist/rpc/RpcServer.js.map +1 -1
  494. package/dist/schema/Model.d.ts +14 -0
  495. package/dist/schema/Model.d.ts.map +1 -1
  496. package/dist/schema/Model.js +18 -3
  497. package/dist/schema/Model.js.map +1 -1
  498. package/dist/sql/Migrator.d.ts +0 -19
  499. package/dist/sql/Migrator.d.ts.map +1 -1
  500. package/dist/sql/Migrator.js +3 -48
  501. package/dist/sql/Migrator.js.map +1 -1
  502. package/dist/sql/MigratorFileSystem.d.ts +21 -0
  503. package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
  504. package/dist/sql/MigratorFileSystem.js +57 -0
  505. package/dist/sql/MigratorFileSystem.js.map +1 -0
  506. package/dist/sql/SqlClient.d.ts.map +1 -1
  507. package/dist/sql/SqlClient.js +5 -9
  508. package/dist/sql/SqlClient.js.map +1 -1
  509. package/dist/sql/Statement.d.ts +20 -6
  510. package/dist/sql/Statement.d.ts.map +1 -1
  511. package/dist/sql/Statement.js +0 -13
  512. package/dist/sql/Statement.js.map +1 -1
  513. package/dist/sql/index.js +1 -1
  514. package/dist/testing/index.d.ts +0 -5
  515. package/dist/testing/index.d.ts.map +1 -1
  516. package/dist/testing/index.js +0 -5
  517. package/dist/testing/index.js.map +1 -1
  518. package/dist/workflow/internal/crypto.js +9 -8
  519. package/dist/workflow/internal/crypto.js.map +1 -1
  520. package/package.json +3 -1
  521. package/src/BigDecimal.ts +3 -0
  522. package/src/Channel.ts +17 -11
  523. package/src/Config.ts +7 -1
  524. package/src/Context.ts +34 -10
  525. package/src/Cron.ts +178 -29
  526. package/src/Duration.ts +140 -0
  527. package/src/Effect.ts +914 -85
  528. package/src/FileSystem.ts +65 -4
  529. package/src/Glob.ts +205 -0
  530. package/src/Match.ts +127 -0
  531. package/src/Pool.ts +73 -15
  532. package/src/Random.ts +3 -3
  533. package/src/RcMap.ts +5 -1
  534. package/src/Schedule.ts +26 -3
  535. package/src/Schema.ts +1189 -62
  536. package/src/SchemaGetter.ts +27 -11
  537. package/src/SchemaRepresentation.ts +19 -0
  538. package/src/SchemaTransformation.ts +8 -3
  539. package/src/ScopedCache.ts +5 -9
  540. package/src/Semaphore.ts +141 -0
  541. package/src/Stream.ts +15 -6
  542. package/src/Terminal.ts +19 -1
  543. package/src/ai/AiError.ts +56 -80
  544. package/src/ai/Decision.ts +257 -6
  545. package/src/ai/DecisionModel.ts +171 -28
  546. package/src/ai/McpServer.ts +1269 -286
  547. package/src/ai/McpTest.ts +380 -0
  548. package/src/ai/Response.ts +2 -22
  549. package/src/ai/Tool.ts +27 -8
  550. package/src/ai/index.ts +6 -0
  551. package/src/ai/internal/mcpCore.ts +78 -44
  552. package/src/ai/internal/mcpProtocol/v2024_11_05.ts +4 -7
  553. package/src/ai/internal/mcpProtocol/v2025_03_26.ts +4 -7
  554. package/src/ai/internal/mcpProtocol/v2025_06_18.ts +4 -7
  555. package/src/ai/internal/mcpProtocol/v2025_11_25.ts +4 -7
  556. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +15 -10
  557. package/src/ai/internal/mcpProtocol.ts +29 -0
  558. package/src/ai/internal/mcpRuntime.ts +9 -5
  559. package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
  560. package/src/cli/Argument.ts +6 -0
  561. package/src/cli/CliOutput.ts +117 -49
  562. package/src/cli/Command.ts +23 -0
  563. package/src/cli/Flag.ts +107 -0
  564. package/src/cli/HelpDoc.ts +18 -1
  565. package/src/cli/Param.ts +6 -0
  566. package/src/cli/Primitive.ts +16 -1
  567. package/src/cli/Prompt.ts +1 -0
  568. package/src/cli/internal/help.ts +21 -9
  569. package/src/cluster/Sharding.ts +93 -26
  570. package/src/cluster/ShardingConfig.ts +41 -3
  571. package/src/cluster/SingleRunner.ts +3 -3
  572. package/src/cluster/SqlMessageStorage.ts +49 -17
  573. package/src/cluster/SqlRunnerStorage.ts +37 -27
  574. package/src/crypto/Aead.ts +517 -0
  575. package/src/crypto/Cipher.ts +326 -0
  576. package/src/crypto/CryptoError.ts +242 -0
  577. package/src/crypto/Digest.ts +167 -0
  578. package/src/crypto/Kdf.ts +315 -0
  579. package/src/crypto/KeyAgreement.ts +489 -0
  580. package/src/crypto/KeyFormat.ts +712 -0
  581. package/src/crypto/KeyWrap.ts +639 -0
  582. package/src/crypto/Mac.ts +386 -0
  583. package/src/crypto/SecureRandom.ts +459 -0
  584. package/src/crypto/Signature.ts +673 -0
  585. package/src/crypto/WebCrypto.ts +64 -0
  586. package/src/crypto/index.ts +78 -0
  587. package/src/crypto/internal/asymmetric.ts +329 -0
  588. package/src/crypto/internal/chacha.ts +1088 -0
  589. package/src/crypto/internal/der.ts +110 -0
  590. package/src/crypto/internal/digest.ts +16 -0
  591. package/src/crypto/internal/key.ts +235 -0
  592. package/src/crypto/internal/md5.ts +170 -0
  593. package/src/crypto/internal/webCrypto.ts +150 -0
  594. package/src/encoding/Base64Url.ts +5 -2
  595. package/src/encoding/Csv.ts +1298 -0
  596. package/src/encoding/Hex.ts +3 -2
  597. package/src/encoding/SchemaBinary.ts +40 -4
  598. package/src/encoding/Toml.ts +85 -20
  599. package/src/encoding/Yaml.ts +61 -18
  600. package/src/encoding/index.ts +6 -0
  601. package/src/eventlog/EventJournal.ts +4 -3
  602. package/src/eventlog/EventLog.ts +340 -15
  603. package/src/eventlog/EventLogEncryption.ts +118 -110
  604. package/src/eventlog/EventLogMessage.ts +273 -1
  605. package/src/eventlog/EventLogRemote.ts +367 -23
  606. package/src/eventlog/EventLogServer.ts +23 -8
  607. package/src/eventlog/EventLogServerEncrypted.ts +1130 -67
  608. package/src/eventlog/EventLogSessionAuth.ts +56 -70
  609. package/src/eventlog/EventRow.ts +12 -3
  610. package/src/eventlog/SqlEventJournal.ts +2 -2
  611. package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
  612. package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
  613. package/src/eventlog/internal/batches.ts +30 -0
  614. package/src/eventlog/internal/compaction.ts +64 -0
  615. package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
  616. package/src/eventlog/internal/remoteCompaction.ts +92 -0
  617. package/src/http/Cookies.ts +281 -1
  618. package/src/http/FetchHttpClient.ts +88 -16
  619. package/src/http/HttpClient.ts +89 -22
  620. package/src/http/HttpClientRequest.ts +12 -9
  621. package/src/http/HttpClientResponse.ts +3 -2
  622. package/src/http/HttpMethod.ts +10 -2
  623. package/src/http/HttpServerRequest.ts +15 -30
  624. package/src/http/HttpServerResponse.ts +3 -2
  625. package/src/http/HttpTraceContext.ts +7 -4
  626. package/src/http/ProblemDetails.ts +149 -0
  627. package/src/http/index.ts +6 -0
  628. package/src/http/internal/decompression.ts +4 -4
  629. package/src/http/internal/urlParams.ts +8 -0
  630. package/src/http-api/HttpApiBuilder.ts +24 -12
  631. package/src/http-api/HttpApiClient.ts +67 -1
  632. package/src/http-api/HttpApiEndpoint.ts +14 -5
  633. package/src/http-api/HttpApiError.ts +250 -0
  634. package/src/http-api/HttpApiMiddleware.ts +95 -1
  635. package/src/http-api/HttpApiSchema.ts +105 -14
  636. package/src/index.ts +6 -6
  637. package/src/internal/effect.ts +34 -18
  638. package/src/internal/glob.ts +736 -0
  639. package/src/internal/matcher.ts +17 -0
  640. package/src/internal/persistence.ts +11 -0
  641. package/src/internal/rcRef.ts +4 -1
  642. package/src/internal/schema/toCodeDocument.ts +7 -3
  643. package/src/internal/trie.ts +43 -14
  644. package/src/internal/ulid.ts +44 -0
  645. package/src/internal/uuid.ts +57 -16
  646. package/src/internal/version.ts +1 -1
  647. package/src/observability/Otlp.ts +21 -4
  648. package/src/observability/OtlpResource.ts +9 -1
  649. package/src/persistence/KeyValueStore.ts +219 -22
  650. package/src/persistence/PersistedQueue.ts +128 -59
  651. package/src/persistence/Persistence.ts +20 -13
  652. package/src/process/ChildProcess.ts +255 -260
  653. package/src/process/ChildProcessSpawner.ts +5 -0
  654. package/src/process/CommandLine.ts +630 -0
  655. package/src/process/index.ts +6 -0
  656. package/src/reactivity/Atom.ts +5 -5
  657. package/src/reactivity/AtomRegistry.ts +1 -1
  658. package/src/rpc/RpcClient.ts +62 -26
  659. package/src/rpc/RpcMessage.ts +10 -1
  660. package/src/rpc/RpcSerialization.ts +3 -0
  661. package/src/rpc/RpcServer.ts +176 -78
  662. package/src/schema/Model.ts +26 -3
  663. package/src/sql/Migrator.ts +4 -63
  664. package/src/sql/MigratorFileSystem.ts +71 -0
  665. package/src/sql/SqlClient.ts +2 -16
  666. package/src/sql/Statement.ts +8 -7
  667. package/src/sql/index.ts +1 -1
  668. package/src/testing/index.ts +0 -6
  669. package/src/workflow/internal/crypto.ts +15 -11
  670. package/dist/Crypto.d.ts +0 -244
  671. package/dist/Crypto.d.ts.map +0 -1
  672. package/dist/Crypto.js +0 -139
  673. package/dist/Crypto.js.map +0 -1
  674. package/dist/testing/TestCrypto.d.ts +0 -73
  675. package/dist/testing/TestCrypto.d.ts.map +0 -1
  676. package/dist/testing/TestCrypto.js +0 -87
  677. package/dist/testing/TestCrypto.js.map +0 -1
  678. package/src/Crypto.ts +0 -347
  679. package/src/testing/TestCrypto.ts +0 -94
@@ -1535,7 +1535,10 @@ export function stringifyJson(options?: StringifyJsonOptions): Getter<string, un
1535
1535
  * The getter is pure and never fails. It splits the string by `separator`
1536
1536
  * (default `,`) and then each pair at the first `keyValueSeparator` (default `=`),
1537
1537
  * preserving the rest of the value. An empty `keyValueSeparator` uses the first
1538
- * two characters as the key and value. Pairs missing a key or value are skipped.
1538
+ * two characters as the key and value. Pairs without a `keyValueSeparator` or
1539
+ * with an empty key are skipped. Pairs with an empty value are skipped unless
1540
+ * `keepEmptyValues` is `true`, in which case the value is `""`. When `trim` is
1541
+ * `true`, keys and values are trimmed before these checks.
1539
1542
  *
1540
1543
  * **Example** (Parsing a key-value string)
1541
1544
  *
@@ -1557,23 +1560,32 @@ export function stringifyJson(options?: StringifyJsonOptions): Getter<string, un
1557
1560
  export function splitKeyValue<E extends string>(options?: {
1558
1561
  readonly separator?: string | undefined
1559
1562
  readonly keyValueSeparator?: string | undefined
1563
+ readonly trim?: boolean | undefined
1564
+ readonly keepEmptyValues?: boolean | undefined
1560
1565
  }): Getter<Record<string, string>, E> {
1561
1566
  const separator = options?.separator ?? ","
1562
1567
  const keyValueSeparator = options?.keyValueSeparator ?? "="
1568
+ const trim = options?.trim ?? false
1569
+ const keepEmptyValues = options?.keepEmptyValues ?? false
1563
1570
  return transform((input) =>
1564
1571
  input.split(separator).reduce((acc, pair) => {
1572
+ let key: string
1573
+ let value: string
1565
1574
  if (keyValueSeparator === "") {
1566
- const [key, value] = pair.split("")
1567
- if (key && value) InternalRecord.assignProperty(acc, key, value)
1568
- return acc
1575
+ key = pair.slice(0, 1)
1576
+ value = pair.slice(1, 2)
1577
+ } else {
1578
+ const index = pair.indexOf(keyValueSeparator)
1579
+ if (index === -1) return acc
1580
+ key = pair.slice(0, index)
1581
+ value = pair.slice(index + keyValueSeparator.length)
1569
1582
  }
1570
- const index = pair.indexOf(keyValueSeparator)
1571
- if (index <= 0) return acc
1572
- const key = pair.slice(0, index)
1573
- const value = pair.slice(index + keyValueSeparator.length)
1574
- if (value) {
1575
- InternalRecord.assignProperty(acc, key, value)
1583
+ if (trim) {
1584
+ key = key.trim()
1585
+ value = value.trim()
1576
1586
  }
1587
+ if (key === "" || (value === "" && !keepEmptyValues)) return acc
1588
+ InternalRecord.assignProperty(acc, key, value)
1577
1589
  return acc
1578
1590
  }, {} as Record<string, string>)
1579
1591
  )
@@ -2271,7 +2283,11 @@ function bracketPathToTokens(bracketPath: string): Array<string | number> {
2271
2283
  return [""]
2272
2284
  }
2273
2285
 
2274
- const replaced = bracketPath.replace(/\[(.*?)\]/g, ".$1")
2286
+ // Consume unmatched bracket runs too, avoiding repeated scans for a closing bracket.
2287
+ const replaced = bracketPath.replace(
2288
+ /\[([^\]\r\n\u2028\u2029]*)(\])?/g,
2289
+ (match, content, closing) => closing ? `.${content}` : match
2290
+ )
2275
2291
  const parts = replaced.split(".")
2276
2292
  // if bracket path started with "[...]" we get ".foo" => ["", "foo"]; drop the synthetic first ""
2277
2293
  const start = replaced.startsWith(".") ? 1 : 0
@@ -928,6 +928,25 @@ export const isULIDReviver: FilterReviver<null> = makeReviverFilter(
928
928
  ({ annotations }) => Schema.isULID(annotations)
929
929
  )
930
930
 
931
+ /**
932
+ * Reviver for persisted `isAscii` checks.
933
+ *
934
+ * **When to use**
935
+ *
936
+ * Use when reconstructing documents that may contain checks created by {@link Schema.isAscii}.
937
+ *
938
+ * @see {@link Schema.isAscii} for creating the corresponding check
939
+ *
940
+ * @stability unstable
941
+ * @category validation
942
+ * @since 4.0.6
943
+ */
944
+ export const isAsciiReviver: FilterReviver<null> = makeReviverFilter(
945
+ "effect/schema/isAscii",
946
+ Schema.Null,
947
+ ({ annotations }) => Schema.isAscii(annotations)
948
+ )
949
+
931
950
  /**
932
951
  * Reviver for persisted `isBase64` checks.
933
952
  *
@@ -812,9 +812,12 @@ export function uncapitalize(): Transformation<string, string> {
812
812
  * **Details**
813
813
  *
814
814
  * Decoding splits the string by `separator` (default `","`) into pairs, then
815
- * splits each pair by `keyValueSeparator` (default `"="`). Encoding joins the
816
- * record back into a string using the same separators. The transformation is
817
- * round-trippable when keys and values do not contain the separators.
815
+ * splits each pair by `keyValueSeparator` (default `"="`). Set `trim` to trim
816
+ * keys and values, and `keepEmptyValues` to keep pairs with an empty value as
817
+ * `""` instead of skipping them (see {@link SchemaGetter.splitKeyValue}).
818
+ * Encoding joins the record back into a string using the same separators. The
819
+ * transformation is round-trippable when keys and values do not contain the
820
+ * separators and, with `trim`, have no surrounding whitespace.
818
821
  *
819
822
  * **Example** (Parsing key-value pairs)
820
823
  *
@@ -840,6 +843,8 @@ export function uncapitalize(): Transformation<string, string> {
840
843
  export function splitKeyValue(options?: {
841
844
  readonly separator?: string | undefined
842
845
  readonly keyValueSeparator?: string | undefined
846
+ readonly trim?: boolean | undefined
847
+ readonly keepEmptyValues?: boolean | undefined
843
848
  }): Transformation<Record<string, string>, string> {
844
849
  return new Transformation(
845
850
  SchemaGetter.splitKeyValue(options),
@@ -29,7 +29,6 @@ import * as MutableHashMap from "./MutableHashMap.ts"
29
29
  import * as Option from "./Option.ts"
30
30
  import type { Pipeable } from "./Pipeable.ts"
31
31
  import * as Predicate from "./Predicate.ts"
32
- import { UnhandledLogLevel } from "./References.ts"
33
32
  import * as Scope from "./Scope.ts"
34
33
 
35
34
  const TypeId = "~effect/ScopedCache"
@@ -411,12 +410,9 @@ const hasExpired = <A, E>(entry: Entry<A, E>, fiber: Fiber.Fiber<unknown, unknow
411
410
 
412
411
  // Expiry and capacity eviction report cleanup failures without failing unrelated readers.
413
412
  const closeEvicted = <A, E>(entry: Entry<A, E>): Effect.Effect<void> =>
414
- effect.catchCause(Scope.close(entry.scope, effect.exitVoid), reportUnhandledError)
415
-
416
- const reportUnhandledError = <E>(cause: Cause.Cause<E>): Effect.Effect<void> =>
417
- core.withFiber((fiber) => {
418
- const level = fiber.getRef(UnhandledLogLevel)
419
- return level ? effect.logWithLevel(level)("Unhandled error in ScopedCache finalizer", cause) : effect.void
413
+ effect.ignoreCause(Scope.close(entry.scope, effect.exitVoid), {
414
+ log: "Unhandled",
415
+ message: "Unhandled error in ScopedCache finalizer"
420
416
  })
421
417
 
422
418
  const checkCapacity = <K, A, E>(
@@ -1184,7 +1180,7 @@ export const keys = <Key, A, E, R>(self: ScopedCache<Key, A, E, R>): Effect.Effe
1184
1180
  keys.push(key)
1185
1181
  } else {
1186
1182
  MutableHashMap.remove(state.map, key)
1187
- fibers.push(effect.forkUnsafe(fiber, Scope.close(entry.scope, effect.exitVoid), true, true))
1183
+ fibers.push(effect.forkUnsafe(fiber, closeEvicted(entry), true, true))
1188
1184
  }
1189
1185
  }
1190
1186
  return fibers.length === 0 ? effect.succeed(keys) : effect.as(effect.fiberAwaitAll(fibers), keys)
@@ -1249,7 +1245,7 @@ export const entries = <Key, A, E, R>(self: ScopedCache<Key, A, E, R>): Effect.E
1249
1245
  }
1250
1246
  } else {
1251
1247
  MutableHashMap.remove(state.map, key)
1252
- fibers.push(effect.forkUnsafe(fiber, Scope.close(entry.scope, effect.exitVoid), true, true))
1248
+ fibers.push(effect.forkUnsafe(fiber, closeEvicted(entry), true, true))
1253
1249
  }
1254
1250
  }
1255
1251
  return fibers.length === 0
package/src/Semaphore.ts CHANGED
@@ -17,6 +17,7 @@ import { dual, identity } from "./Function.ts"
17
17
  import * as core from "./internal/core.ts"
18
18
  import * as internal from "./internal/effect.ts"
19
19
  import type * as Option from "./Option.ts"
20
+ import type * as Scope from "./Scope.ts"
20
21
 
21
22
  /**
22
23
  * A counting semaphore that coordinates concurrent access with permits.
@@ -134,6 +135,24 @@ export interface Semaphore {
134
135
  */
135
136
  take(this: Semaphore, permits: number): Effect.Effect<number>
136
137
 
138
+ /**
139
+ * Acquires the specified number of permits for the lifetime of the current
140
+ * scope, suspending the task if they are not yet available.
141
+ *
142
+ * **When to use**
143
+ *
144
+ * Use to hold permits until a scope closes, such as while a scoped resource
145
+ * is leased.
146
+ *
147
+ * **Details**
148
+ *
149
+ * Waiting can be interrupted unless the caller is uninterruptible. The
150
+ * permits are taken and their release is added to the scope in one
151
+ * uninterruptible step, so acquired permits are always returned when the
152
+ * scope closes.
153
+ */
154
+ takeScoped(this: Semaphore, permits: number): Effect.Effect<void, never, Scope.Scope>
155
+
137
156
  /**
138
157
  * Acquires the specified number of permits only if they are immediately
139
158
  * available.
@@ -281,6 +300,15 @@ class SemaphoreImpl implements Semaphore {
281
300
  return takePermits(this, n, () => internal.succeed(n))
282
301
  }
283
302
 
303
+ takeScoped(n: number): Effect.Effect<void, never, Scope.Scope> {
304
+ return internal.uninterruptibleMask((restore) =>
305
+ internal.flatMap(
306
+ internal.scope,
307
+ (scope) => takePermits(this, n, () => internal.scopeAddFinalizer(scope, this.release(n)), restore)
308
+ )
309
+ )
310
+ }
311
+
284
312
  takeIfAvailable(n: number): Effect.Effect<boolean> {
285
313
  return internal.suspend(() => {
286
314
  if (this.free < n) return internal.succeed(false)
@@ -747,6 +775,119 @@ export const take: {
747
775
  (self: Semaphore, permits: number): Effect.Effect<number>
748
776
  } = dual(2, (self: Semaphore, permits: number) => self.take(permits))
749
777
 
778
+ /**
779
+ * Acquires the specified number of permits until the current scope closes.
780
+ *
781
+ * **When to use**
782
+ *
783
+ * Use when permits should be held for the lifetime of a scope, such as while a
784
+ * scoped resource is leased.
785
+ *
786
+ * **Details**
787
+ *
788
+ * The effect waits until enough permits are available. The wait can be
789
+ * interrupted unless the caller is uninterruptible. The permits are taken and
790
+ * their release is added to the scope in one uninterruptible step, so acquired
791
+ * permits are always returned when the scope closes.
792
+ *
793
+ * **Example** (Holding a permit for a scope)
794
+ *
795
+ * ```ts import.meta.vitest
796
+ * import { Effect, Semaphore } from "effect"
797
+ *
798
+ * const program = Effect.gen(function*() {
799
+ * const semaphore = yield* Semaphore.make(1)
800
+ * yield* Effect.scoped(Semaphore.takeScoped(semaphore, 1))
801
+ * return yield* Semaphore.takeIfAvailable(semaphore, 1)
802
+ * })
803
+ *
804
+ * Effect.runSync(program) // => true
805
+ * ```
806
+ *
807
+ * @see {@link take} for acquiring permits that are released manually
808
+ * @see {@link withPermits} for holding permits while one effect runs
809
+ *
810
+ * @stability stable
811
+ * @category combinators
812
+ * @since 4.0.7
813
+ */
814
+ export const takeScoped: {
815
+ /**
816
+ * Acquires the specified number of permits until the current scope closes.
817
+ *
818
+ * **When to use**
819
+ *
820
+ * Use when permits should be held for the lifetime of a scope, such as while a
821
+ * scoped resource is leased.
822
+ *
823
+ * **Details**
824
+ *
825
+ * The effect waits until enough permits are available. The wait can be
826
+ * interrupted unless the caller is uninterruptible. The permits are taken and
827
+ * their release is added to the scope in one uninterruptible step, so acquired
828
+ * permits are always returned when the scope closes.
829
+ *
830
+ * **Example** (Holding a permit for a scope)
831
+ *
832
+ * ```ts import.meta.vitest
833
+ * import { Effect, Semaphore } from "effect"
834
+ *
835
+ * const program = Effect.gen(function*() {
836
+ * const semaphore = yield* Semaphore.make(1)
837
+ * yield* Effect.scoped(Semaphore.takeScoped(semaphore, 1))
838
+ * return yield* Semaphore.takeIfAvailable(semaphore, 1)
839
+ * })
840
+ *
841
+ * Effect.runSync(program) // => true
842
+ * ```
843
+ *
844
+ * @see {@link take} for acquiring permits that are released manually
845
+ * @see {@link withPermits} for holding permits while one effect runs
846
+ *
847
+ * @stability stable
848
+ * @category combinators
849
+ * @since 4.0.7
850
+ */
851
+ (permits: number): (self: Semaphore) => Effect.Effect<void, never, Scope.Scope>
852
+ /**
853
+ * Acquires the specified number of permits until the current scope closes.
854
+ *
855
+ * **When to use**
856
+ *
857
+ * Use when permits should be held for the lifetime of a scope, such as while a
858
+ * scoped resource is leased.
859
+ *
860
+ * **Details**
861
+ *
862
+ * The effect waits until enough permits are available. The wait can be
863
+ * interrupted unless the caller is uninterruptible. The permits are taken and
864
+ * their release is added to the scope in one uninterruptible step, so acquired
865
+ * permits are always returned when the scope closes.
866
+ *
867
+ * **Example** (Holding a permit for a scope)
868
+ *
869
+ * ```ts import.meta.vitest
870
+ * import { Effect, Semaphore } from "effect"
871
+ *
872
+ * const program = Effect.gen(function*() {
873
+ * const semaphore = yield* Semaphore.make(1)
874
+ * yield* Effect.scoped(Semaphore.takeScoped(semaphore, 1))
875
+ * return yield* Semaphore.takeIfAvailable(semaphore, 1)
876
+ * })
877
+ *
878
+ * Effect.runSync(program) // => true
879
+ * ```
880
+ *
881
+ * @see {@link take} for acquiring permits that are released manually
882
+ * @see {@link withPermits} for holding permits while one effect runs
883
+ *
884
+ * @stability stable
885
+ * @category combinators
886
+ * @since 4.0.7
887
+ */
888
+ (self: Semaphore, permits: number): Effect.Effect<void, never, Scope.Scope>
889
+ } = dual(2, (self: Semaphore, permits: number) => self.takeScoped(permits))
890
+
750
891
  /**
751
892
  * Acquires the specified number of permits only if they are immediately
752
893
  * available.
package/src/Stream.ts CHANGED
@@ -10247,6 +10247,9 @@ export const orDie = <A, E, R>(self: Stream<A, E, R>): Stream<A, never, R> => fr
10247
10247
  *
10248
10248
  * The `log` option controls whether the failure is logged before the stream
10249
10249
  * terminates.
10250
+ * Set `log: "Unhandled"` to read `References.UnhandledLogLevel` when the
10251
+ * failure occurs; `undefined` disables logging. Minimum log level filtering
10252
+ * still applies.
10250
10253
  *
10251
10254
  * **Gotchas**
10252
10255
  *
@@ -10295,12 +10298,12 @@ export const orDie = <A, E, R>(self: Stream<A, E, R>): Stream<A, never, R> => fr
10295
10298
  */
10296
10299
  export const ignore: <
10297
10300
  Arg extends Stream<any, any, any> | {
10298
- readonly log?: boolean | Severity | undefined
10301
+ readonly log?: boolean | Severity | "Unhandled" | undefined
10299
10302
  } | undefined
10300
10303
  >(
10301
10304
  selfOrOptions: Arg,
10302
10305
  options?: {
10303
- readonly log?: boolean | Severity | undefined
10306
+ readonly log?: boolean | Severity | "Unhandled" | undefined
10304
10307
  } | undefined
10305
10308
  ) => [Arg] extends [Stream<infer A, infer _E, infer R>] ? Stream<A, never, R>
10306
10309
  : <A, E, R>(self: Stream<A, E, R>) => Stream<A, never, R> = dual(
@@ -10308,7 +10311,7 @@ export const ignore: <
10308
10311
  <A, E, R>(
10309
10312
  self: Stream<A, E, R>,
10310
10313
  options?: {
10311
- readonly log?: boolean | Severity | undefined
10314
+ readonly log?: boolean | Severity | "Unhandled" | undefined
10312
10315
  } | undefined
10313
10316
  ): Stream<A, never, R> => fromChannel(Channel.ignore(self.channel, options))
10314
10317
  )
@@ -10321,6 +10324,12 @@ export const ignore: <
10321
10324
  * Use when you need to silently suppress a stream's entire failure cause,
10322
10325
  * including both typed errors and defects, rather than propagate it downstream.
10323
10326
  *
10327
+ * **Details**
10328
+ *
10329
+ * Set `log: "Unhandled"` to read `References.UnhandledLogLevel` when the
10330
+ * failure occurs; `undefined` disables logging. Minimum log level filtering
10331
+ * still applies.
10332
+ *
10324
10333
  * **Example** (Ignoring stream failure causes)
10325
10334
  *
10326
10335
  * ```ts import.meta.vitest
@@ -10345,19 +10354,19 @@ export const ignore: <
10345
10354
  */
10346
10355
  export const ignoreCause: <
10347
10356
  Arg extends Stream<any, any, any> | {
10348
- readonly log?: boolean | Severity | undefined
10357
+ readonly log?: boolean | Severity | "Unhandled" | undefined
10349
10358
  } | undefined
10350
10359
  >(
10351
10360
  streamOrOptions: Arg,
10352
10361
  options?: {
10353
- readonly log?: boolean | Severity | undefined
10362
+ readonly log?: boolean | Severity | "Unhandled" | undefined
10354
10363
  } | undefined
10355
10364
  ) => [Arg] extends [Stream<infer A, infer _E, infer R>] ? Stream<A, never, R>
10356
10365
  : <A, E, R>(self: Stream<A, E, R>) => Stream<A, never, R> = dual(
10357
10366
  (args) => isStream(args[0]),
10358
10367
  <A, E, R>(
10359
10368
  self: Stream<A, E, R>,
10360
- options?: { readonly log?: boolean | Severity | undefined } | undefined
10369
+ options?: { readonly log?: boolean | Severity | "Unhandled" | undefined } | undefined
10361
10370
  ): Stream<A, never, R> => fromChannel(Channel.ignoreCause(self.channel, options))
10362
10371
  )
10363
10372
 
package/src/Terminal.ts CHANGED
@@ -42,6 +42,12 @@ export interface Terminal {
42
42
  */
43
43
 
44
44
  readonly rows: Effect.Effect<number>
45
+ /**
46
+ * Subscribes to terminal size changes. The queue starts with the current
47
+ * dimensions, receives each resize until the scope closes, and keeps only the
48
+ * latest size.
49
+ */
50
+ readonly size: Effect.Effect<Queue.Dequeue<Size, Cause.Done>, never, Scope.Scope>
45
51
  /**
46
52
  * Reads input events from the default standard input.
47
53
  */
@@ -56,6 +62,18 @@ export interface Terminal {
56
62
  readonly display: (text: string) => Effect.Effect<void, PlatformError>
57
63
  }
58
64
 
65
+ /**
66
+ * Terminal dimensions measured in character cells.
67
+ *
68
+ * @stability unstable
69
+ * @category models
70
+ * @since 4.0.0
71
+ */
72
+ export interface Size {
73
+ readonly columns: number
74
+ readonly rows: number
75
+ }
76
+
59
77
  /**
60
78
  * Keyboard key metadata for terminal input, including the key name and
61
79
  * modifier state.
@@ -183,7 +201,7 @@ export const Terminal: Context.Service<Terminal, Terminal> = Context.Service("ef
183
201
  *
184
202
  * **Details**
185
203
  *
186
- * The implementation object supplies `columns`, `rows`, `readInput`,
204
+ * The implementation object supplies `columns`, `rows`, `size`, `readInput`,
187
205
  * `readLine`, and `display`; `make` attaches the `Terminal` service marker so
188
206
  * the result can be provided through the `Terminal` context service.
189
207
  *
package/src/ai/AiError.ts CHANGED
@@ -15,51 +15,9 @@
15
15
  import * as Duration from "../Duration.ts"
16
16
  import * as Effect from "../Effect.ts"
17
17
  import type * as HttpClientError from "../http/HttpClientError.ts"
18
- import * as InternalRecord from "../internal/record.ts"
19
- import * as Option from "../Option.ts"
20
18
  import * as Predicate from "../Predicate.ts"
21
- import { redact } from "../Redactable.ts"
22
- import * as Redacted from "../Redacted.ts"
23
19
  import * as Schema from "../Schema.ts"
24
20
 
25
- /**
26
- * Schema for HTTP requests to an AI provider.
27
- *
28
- * **Example** (Describing an HTTP request)
29
- *
30
- * ```ts import.meta.vitest
31
- * import type { AiError } from "effect/ai"
32
- *
33
- * const requestDetails: typeof AiError.HttpRequestDetails.Type = {
34
- * method: "POST",
35
- * url: "https://api.openai.com/v1/responses",
36
- * urlParams: [],
37
- * hash: undefined,
38
- * headers: { "Content-Type": "application/json" }
39
- * }
40
- * const result = [requestDetails.method, requestDetails.urlParams] // => ["POST", []]
41
- * ```
42
- *
43
- * @stability unstable
44
- * @category schemas
45
- * @since 4.0.0
46
- */
47
- export const HttpRequestDetails = Schema.Struct({
48
- method: Schema.Literals(["GET", "POST", "PATCH", "PUT", "DELETE", "HEAD", "OPTIONS", "TRACE", "QUERY"]),
49
- url: Schema.String,
50
- urlParams: Schema.Array(
51
- Schema.Tuple([Schema.String, Schema.Union([Schema.String, Schema.Redacted(Schema.String)])])
52
- ),
53
- hash: Schema.optional(Schema.String),
54
- headers: Schema.Record(
55
- Schema.String,
56
- Schema.Union([
57
- Schema.String,
58
- Schema.Redacted(Schema.String)
59
- ])
60
- )
61
- }).annotate({ identifier: "HttpRequestDetails" })
62
-
63
21
  /**
64
22
  * Schema for HTTP responses from an AI provider.
65
23
  *
@@ -101,16 +59,6 @@ const providerMetadataWithDefaults = <Metadata extends ProviderMetadata>() =>
101
59
  Schema.withDecodingDefault(Effect.succeed({}))
102
60
  )
103
61
 
104
- const redactHeaders = (headers: Record<string, string>): Record<string, string> => {
105
- const redacted = redact(headers) as Record<string, string | Redacted.Redacted>
106
- const result: Record<string, string> = {}
107
- for (const key in redacted) {
108
- const value = redacted[key]
109
- InternalRecord.assignProperty(result, key, Redacted.isRedacted(value) ? value.toString() : value)
110
- }
111
- return result
112
- }
113
-
114
62
  // =============================================================================
115
63
  // Http Request Error
116
64
  // =============================================================================
@@ -124,6 +72,10 @@ const redactHeaders = (headers: Record<string, string>): Record<string, string>
124
72
  * such as network connectivity problems, request encoding issues, or invalid
125
73
  * URLs.
126
74
  *
75
+ * When created with `NetworkError.fromHttpClientError`, `cause` holds the
76
+ * `HttpClientError` the request failed with. It is stored unchanged, so it
77
+ * carries the runtime's original error text without redaction.
78
+ *
127
79
  * **Example** (Creating a network error)
128
80
  *
129
81
  * ```ts import.meta.vitest
@@ -131,13 +83,8 @@ const redactHeaders = (headers: Record<string, string>): Record<string, string>
131
83
  *
132
84
  * const error = new AiError.NetworkError({
133
85
  * reason: "TransportError",
134
- * request: {
135
- * method: "POST",
136
- * url: "https://api.openai.com/v1/completions",
137
- * urlParams: [],
138
- * hash: undefined,
139
- * headers: { "Content-Type": "application/json" }
140
- * },
86
+ * method: "POST",
87
+ * url: "https://api.openai.com/v1/completions",
141
88
  * description: "Connection timeout after 30 seconds"
142
89
  * })
143
90
  *
@@ -153,8 +100,10 @@ export class NetworkError extends Schema.Error<NetworkError>(
153
100
  )({
154
101
  _tag: Schema.tag("NetworkError"),
155
102
  reason: Schema.Literals(["TransportError", "EncodeError", "InvalidUrlError"]),
156
- request: HttpRequestDetails,
157
- description: Schema.optional(Schema.String)
103
+ method: Schema.String,
104
+ url: Schema.String,
105
+ description: Schema.optional(Schema.String),
106
+ cause: Schema.optional(Schema.Defect())
158
107
  }) {
159
108
  /**
160
109
  * Marks `NetworkError` as a semantic AI error reason for runtime guards.
@@ -199,18 +148,52 @@ export class NetworkError extends Schema.Error<NetworkError>(
199
148
  return new NetworkError({
200
149
  description: error.description,
201
150
  reason: error._tag,
202
- request: {
203
- hash: Option.getOrUndefined(error.request.hash),
204
- headers: redactHeaders(error.request.headers),
205
- method: error.request.method,
206
- url: error.request.url,
207
- urlParams: Array.from(error.request.urlParams)
208
- }
151
+ method: error.request.method,
152
+ url: error.request.url
153
+ })
154
+ }
155
+
156
+ /**
157
+ * Creates a NetworkError from a platform HttpClientError whose reason is a
158
+ * request error, keeping the HttpClientError as `cause`.
159
+ *
160
+ * **Example** (Creating a network error from an HTTP client error)
161
+ *
162
+ * ```ts import.meta.vitest
163
+ * import { AiError } from "effect/ai"
164
+ * import { HttpClientError, HttpClientRequest } from "effect/http"
165
+ *
166
+ * const platformError = new HttpClientError.HttpClientError({
167
+ * reason: new HttpClientError.TransportError({
168
+ * request: HttpClientRequest.get("https://example.com/models"),
169
+ * description: "Connection refused"
170
+ * })
171
+ * })
172
+ *
173
+ * const aiError = AiError.NetworkError.fromHttpClientError(
174
+ * platformError as HttpClientError.HttpClientError & { readonly reason: HttpClientError.RequestError }
175
+ * )
176
+ * aiError.reason // => "TransportError"
177
+ * aiError.cause === platformError // => true
178
+ * ```
179
+ *
180
+ * @stability unstable
181
+ * @since 4.1.0
182
+ */
183
+ static fromHttpClientError(
184
+ error: HttpClientError.HttpClientError & { readonly reason: HttpClientError.RequestError }
185
+ ): NetworkError {
186
+ return new NetworkError({
187
+ description: error.reason.description,
188
+ reason: error.reason._tag,
189
+ method: error.reason.request.method,
190
+ url: error.reason.request.url,
191
+ cause: error
209
192
  })
210
193
  }
211
194
 
212
195
  override get message(): string {
213
- const methodAndUrl = `${this.request.method} ${this.request.url}`
196
+ const methodAndUrl = `${this.method} ${this.url}`
214
197
 
215
198
  let baseMessage = this.description
216
199
  ? `${this.reason}: ${this.description}`
@@ -418,15 +401,9 @@ export const UsageInfo = Schema.Struct({
418
401
  *
419
402
  * **When to use**
420
403
  *
421
- * Use to attach request details, optional response details, and optional body
422
- * text to AI provider errors.
423
- *
424
- * **Details**
425
- *
426
- * Includes the required request details plus optional response details and raw
427
- * response body.
404
+ * Use to attach optional response details and optional body text to AI
405
+ * provider errors.
428
406
  *
429
- * @see {@link HttpRequestDetails} for captured request details
430
407
  * @see {@link HttpResponseDetails} for captured response details
431
408
  *
432
409
  * @stability unstable
@@ -434,7 +411,6 @@ export const UsageInfo = Schema.Struct({
434
411
  * @since 4.0.0
435
412
  */
436
413
  export const HttpContext = Schema.Struct({
437
- request: HttpRequestDetails,
438
414
  response: Schema.optional(HttpResponseDetails),
439
415
  body: Schema.optional(Schema.String)
440
416
  }).annotate({ identifier: "HttpContext" })
@@ -849,8 +825,8 @@ export class InternalProviderError extends Schema.Error<InternalProviderError>(
849
825
  * **Details**
850
826
  *
851
827
  * Invalid response errors are not retryable because retrying does not resolve an
852
- * incompatible provider response format. Optional HTTP context can retain request
853
- * and response details for diagnosis.
828
+ * incompatible provider response format. Optional HTTP context can retain response
829
+ * details for diagnosis.
854
830
  *
855
831
  * @see {@link InvalidOutputError} for retryable model-generated output failures
856
832
  * @stability unstable