effect 4.0.7 → 4.1.1

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 (863) hide show
  1. package/README.md +31 -1
  2. package/THIRD_PARTY_NOTICES.md +62 -0
  3. package/dist/BigDecimal.d.ts +139 -7
  4. package/dist/BigDecimal.d.ts.map +1 -1
  5. package/dist/BigDecimal.js +86 -14
  6. package/dist/BigDecimal.js.map +1 -1
  7. package/dist/Channel.d.ts +12 -6
  8. package/dist/Channel.d.ts.map +1 -1
  9. package/dist/Channel.js +9 -3
  10. package/dist/Channel.js.map +1 -1
  11. package/dist/Config.d.ts +7 -1
  12. package/dist/Config.d.ts.map +1 -1
  13. package/dist/Config.js.map +1 -1
  14. package/dist/Context.d.ts +18 -1
  15. package/dist/Context.d.ts.map +1 -1
  16. package/dist/Context.js +27 -8
  17. package/dist/Context.js.map +1 -1
  18. package/dist/Cron.d.ts +81 -11
  19. package/dist/Cron.d.ts.map +1 -1
  20. package/dist/Cron.js +101 -26
  21. package/dist/Cron.js.map +1 -1
  22. package/dist/Duration.d.ts +78 -0
  23. package/dist/Duration.d.ts.map +1 -1
  24. package/dist/Duration.js +123 -0
  25. package/dist/Duration.js.map +1 -1
  26. package/dist/Effect.d.ts +164 -7
  27. package/dist/Effect.d.ts.map +1 -1
  28. package/dist/Effect.js +11 -1
  29. package/dist/Effect.js.map +1 -1
  30. package/dist/Equal.d.ts +2 -2
  31. package/dist/Equal.d.ts.map +1 -1
  32. package/dist/Equal.js +3 -3
  33. package/dist/Equal.js.map +1 -1
  34. package/dist/FileSystem.d.ts +59 -4
  35. package/dist/FileSystem.d.ts.map +1 -1
  36. package/dist/FileSystem.js +9 -2
  37. package/dist/FileSystem.js.map +1 -1
  38. package/dist/Glob.d.ts +165 -0
  39. package/dist/Glob.d.ts.map +1 -0
  40. package/dist/Glob.js +127 -0
  41. package/dist/Glob.js.map +1 -0
  42. package/dist/Hash.d.ts +3 -2
  43. package/dist/Hash.d.ts.map +1 -1
  44. package/dist/Hash.js +5 -4
  45. package/dist/Hash.js.map +1 -1
  46. package/dist/Iterable.d.ts.map +1 -1
  47. package/dist/Iterable.js +11 -8
  48. package/dist/Iterable.js.map +1 -1
  49. package/dist/Match.d.ts +86 -0
  50. package/dist/Match.d.ts.map +1 -1
  51. package/dist/Match.js +72 -0
  52. package/dist/Match.js.map +1 -1
  53. package/dist/Path.d.ts.map +1 -1
  54. package/dist/Path.js +5 -1
  55. package/dist/Path.js.map +1 -1
  56. package/dist/Pool.d.ts +51 -0
  57. package/dist/Pool.d.ts.map +1 -1
  58. package/dist/Pool.js +61 -10
  59. package/dist/Pool.js.map +1 -1
  60. package/dist/Random.d.ts.map +1 -1
  61. package/dist/Random.js +3 -3
  62. package/dist/Random.js.map +1 -1
  63. package/dist/RcMap.d.ts.map +1 -1
  64. package/dist/RcMap.js +8 -2
  65. package/dist/RcMap.js.map +1 -1
  66. package/dist/Schedule.d.ts +18 -1
  67. package/dist/Schedule.d.ts.map +1 -1
  68. package/dist/Schedule.js +7 -2
  69. package/dist/Schedule.js.map +1 -1
  70. package/dist/Schema.d.ts +668 -42
  71. package/dist/Schema.d.ts.map +1 -1
  72. package/dist/Schema.js +652 -1
  73. package/dist/Schema.js.map +1 -1
  74. package/dist/SchemaGetter.d.ts +6 -1
  75. package/dist/SchemaGetter.d.ts.map +1 -1
  76. package/dist/SchemaGetter.js +22 -11
  77. package/dist/SchemaGetter.js.map +1 -1
  78. package/dist/SchemaRepresentation.d.ts +18 -2
  79. package/dist/SchemaRepresentation.d.ts.map +1 -1
  80. package/dist/SchemaRepresentation.js +20 -2
  81. package/dist/SchemaRepresentation.js.map +1 -1
  82. package/dist/SchemaTransformation.d.ts +10 -5
  83. package/dist/SchemaTransformation.d.ts.map +1 -1
  84. package/dist/SchemaTransformation.js +8 -5
  85. package/dist/SchemaTransformation.js.map +1 -1
  86. package/dist/ScopedCache.d.ts.map +1 -1
  87. package/dist/ScopedCache.js +5 -7
  88. package/dist/ScopedCache.js.map +1 -1
  89. package/dist/Semaphore.d.ts +130 -0
  90. package/dist/Semaphore.d.ts.map +1 -1
  91. package/dist/Semaphore.js +40 -0
  92. package/dist/Semaphore.js.map +1 -1
  93. package/dist/Stream.d.ts +13 -4
  94. package/dist/Stream.d.ts.map +1 -1
  95. package/dist/Stream.js +9 -0
  96. package/dist/Stream.js.map +1 -1
  97. package/dist/Terminal.d.ts +18 -1
  98. package/dist/Terminal.d.ts.map +1 -1
  99. package/dist/Terminal.js +1 -1
  100. package/dist/Terminal.js.map +1 -1
  101. package/dist/ai/AiError.d.ts +43 -116
  102. package/dist/ai/AiError.d.ts.map +1 -1
  103. package/dist/ai/AiError.js +53 -72
  104. package/dist/ai/AiError.js.map +1 -1
  105. package/dist/ai/Decision.d.ts +196 -15
  106. package/dist/ai/Decision.d.ts.map +1 -1
  107. package/dist/ai/Decision.js +130 -0
  108. package/dist/ai/Decision.js.map +1 -1
  109. package/dist/ai/DecisionModel.d.ts +54 -13
  110. package/dist/ai/DecisionModel.d.ts.map +1 -1
  111. package/dist/ai/DecisionModel.js +123 -12
  112. package/dist/ai/DecisionModel.js.map +1 -1
  113. package/dist/ai/McpClient.d.ts +171 -19
  114. package/dist/ai/McpClient.d.ts.map +1 -1
  115. package/dist/ai/McpClient.js +277 -66
  116. package/dist/ai/McpClient.js.map +1 -1
  117. package/dist/ai/McpSchema.d.ts +108 -0
  118. package/dist/ai/McpSchema.d.ts.map +1 -1
  119. package/dist/ai/McpSchema.js +99 -0
  120. package/dist/ai/McpSchema.js.map +1 -1
  121. package/dist/ai/McpServer.d.ts +744 -29
  122. package/dist/ai/McpServer.d.ts.map +1 -1
  123. package/dist/ai/McpServer.js +763 -136
  124. package/dist/ai/McpServer.js.map +1 -1
  125. package/dist/ai/McpTest.d.ts +130 -0
  126. package/dist/ai/McpTest.d.ts.map +1 -0
  127. package/dist/ai/McpTest.js +237 -0
  128. package/dist/ai/McpTest.js.map +1 -0
  129. package/dist/ai/Prompt.d.ts.map +1 -1
  130. package/dist/ai/Prompt.js +20 -11
  131. package/dist/ai/Prompt.js.map +1 -1
  132. package/dist/ai/Response.d.ts +1 -25
  133. package/dist/ai/Response.d.ts.map +1 -1
  134. package/dist/ai/Response.js +1 -10
  135. package/dist/ai/Response.js.map +1 -1
  136. package/dist/ai/Tool.d.ts +19 -1
  137. package/dist/ai/Tool.d.ts.map +1 -1
  138. package/dist/ai/Tool.js +5 -7
  139. package/dist/ai/Tool.js.map +1 -1
  140. package/dist/ai/index.d.ts +5 -0
  141. package/dist/ai/index.d.ts.map +1 -1
  142. package/dist/ai/index.js +5 -0
  143. package/dist/ai/index.js.map +1 -1
  144. package/dist/ai/internal/mcpCore.js +89 -15
  145. package/dist/ai/internal/mcpCore.js.map +1 -1
  146. package/dist/ai/internal/mcpProtocol/v2024_11_05.js +7 -6
  147. package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
  148. package/dist/ai/internal/mcpProtocol/v2025_03_26.js +7 -6
  149. package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
  150. package/dist/ai/internal/mcpProtocol/v2025_06_18.js +7 -6
  151. package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
  152. package/dist/ai/internal/mcpProtocol/v2025_11_25.js +7 -6
  153. package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
  154. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +60 -17
  155. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  156. package/dist/ai/internal/mcpProtocol.js +25 -0
  157. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  158. package/dist/ai/internal/mcpRuntime.js +8 -6
  159. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  160. package/dist/ai/internal/mcpSkills.d.ts +2 -0
  161. package/dist/ai/internal/mcpSkills.d.ts.map +1 -0
  162. package/dist/ai/internal/mcpSkills.js +428 -0
  163. package/dist/ai/internal/mcpSkills.js.map +1 -0
  164. package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
  165. package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
  166. package/dist/cli/Argument.d.ts +6 -0
  167. package/dist/cli/Argument.d.ts.map +1 -1
  168. package/dist/cli/Argument.js +2 -0
  169. package/dist/cli/Argument.js.map +1 -1
  170. package/dist/cli/CliOutput.d.ts +65 -1
  171. package/dist/cli/CliOutput.d.ts.map +1 -1
  172. package/dist/cli/CliOutput.js +94 -37
  173. package/dist/cli/CliOutput.js.map +1 -1
  174. package/dist/cli/Command.d.ts +23 -0
  175. package/dist/cli/Command.d.ts.map +1 -1
  176. package/dist/cli/Command.js +8 -0
  177. package/dist/cli/Command.js.map +1 -1
  178. package/dist/cli/Flag.d.ts +107 -0
  179. package/dist/cli/Flag.d.ts.map +1 -1
  180. package/dist/cli/Flag.js +37 -0
  181. package/dist/cli/Flag.js.map +1 -1
  182. package/dist/cli/HelpDoc.d.ts +15 -1
  183. package/dist/cli/HelpDoc.d.ts.map +1 -1
  184. package/dist/cli/Param.d.ts +6 -0
  185. package/dist/cli/Param.d.ts.map +1 -1
  186. package/dist/cli/Param.js +2 -0
  187. package/dist/cli/Param.js.map +1 -1
  188. package/dist/cli/Primitive.d.ts +14 -0
  189. package/dist/cli/Primitive.d.ts.map +1 -1
  190. package/dist/cli/Primitive.js +15 -1
  191. package/dist/cli/Primitive.js.map +1 -1
  192. package/dist/cli/Prompt.d.ts +1 -0
  193. package/dist/cli/Prompt.d.ts.map +1 -1
  194. package/dist/cli/Prompt.js +1 -0
  195. package/dist/cli/Prompt.js.map +1 -1
  196. package/dist/cli/internal/help.d.ts.map +1 -1
  197. package/dist/cli/internal/help.js +17 -10
  198. package/dist/cli/internal/help.js.map +1 -1
  199. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  200. package/dist/cluster/ClusterWorkflowEngine.js +15 -5
  201. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  202. package/dist/cluster/Reply.d.ts +1 -1
  203. package/dist/cluster/Reply.d.ts.map +1 -1
  204. package/dist/cluster/Reply.js.map +1 -1
  205. package/dist/cluster/Sharding.d.ts.map +1 -1
  206. package/dist/cluster/Sharding.js +93 -28
  207. package/dist/cluster/Sharding.js.map +1 -1
  208. package/dist/cluster/ShardingConfig.d.ts +72 -6
  209. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  210. package/dist/cluster/ShardingConfig.js +4 -0
  211. package/dist/cluster/ShardingConfig.js.map +1 -1
  212. package/dist/cluster/SingleRunner.d.ts +3 -3
  213. package/dist/cluster/SingleRunner.d.ts.map +1 -1
  214. package/dist/cluster/SingleRunner.js +1 -1
  215. package/dist/cluster/SqlMessageStorage.d.ts +37 -6
  216. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  217. package/dist/cluster/SqlMessageStorage.js +34 -7
  218. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  219. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  220. package/dist/cluster/SqlRunnerStorage.js +23 -8
  221. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  222. package/dist/cluster/internal/entityManager.js +15 -7
  223. package/dist/cluster/internal/entityManager.js.map +1 -1
  224. package/dist/crypto/Aead.d.ts +323 -0
  225. package/dist/crypto/Aead.d.ts.map +1 -0
  226. package/dist/crypto/Aead.js +331 -0
  227. package/dist/crypto/Aead.js.map +1 -0
  228. package/dist/crypto/Cipher.d.ts +236 -0
  229. package/dist/crypto/Cipher.d.ts.map +1 -0
  230. package/dist/crypto/Cipher.js +233 -0
  231. package/dist/crypto/Cipher.js.map +1 -0
  232. package/dist/crypto/CryptoError.d.ts +212 -0
  233. package/dist/crypto/CryptoError.d.ts.map +1 -0
  234. package/dist/crypto/CryptoError.js +202 -0
  235. package/dist/crypto/CryptoError.js.map +1 -0
  236. package/dist/crypto/Digest.d.ts +143 -0
  237. package/dist/crypto/Digest.d.ts.map +1 -0
  238. package/dist/crypto/Digest.js +146 -0
  239. package/dist/crypto/Digest.js.map +1 -0
  240. package/dist/crypto/Kdf.d.ts +220 -0
  241. package/dist/crypto/Kdf.d.ts.map +1 -0
  242. package/dist/crypto/Kdf.js +212 -0
  243. package/dist/crypto/Kdf.js.map +1 -0
  244. package/dist/crypto/KeyAgreement.d.ts +324 -0
  245. package/dist/crypto/KeyAgreement.d.ts.map +1 -0
  246. package/dist/crypto/KeyAgreement.js +303 -0
  247. package/dist/crypto/KeyAgreement.js.map +1 -0
  248. package/dist/crypto/KeyFormat.d.ts +341 -0
  249. package/dist/crypto/KeyFormat.d.ts.map +1 -0
  250. package/dist/crypto/KeyFormat.js +556 -0
  251. package/dist/crypto/KeyFormat.js.map +1 -0
  252. package/dist/crypto/KeyWrap.d.ts +390 -0
  253. package/dist/crypto/KeyWrap.d.ts.map +1 -0
  254. package/dist/crypto/KeyWrap.js +381 -0
  255. package/dist/crypto/KeyWrap.js.map +1 -0
  256. package/dist/crypto/Mac.d.ts +278 -0
  257. package/dist/crypto/Mac.d.ts.map +1 -0
  258. package/dist/crypto/Mac.js +288 -0
  259. package/dist/crypto/Mac.js.map +1 -0
  260. package/dist/crypto/SecureRandom.d.ts +340 -0
  261. package/dist/crypto/SecureRandom.d.ts.map +1 -0
  262. package/dist/crypto/SecureRandom.js +257 -0
  263. package/dist/crypto/SecureRandom.js.map +1 -0
  264. package/dist/crypto/Signature.d.ts +449 -0
  265. package/dist/crypto/Signature.d.ts.map +1 -0
  266. package/dist/crypto/Signature.js +484 -0
  267. package/dist/crypto/Signature.js.map +1 -0
  268. package/dist/crypto/WebCrypto.d.ts +80 -0
  269. package/dist/crypto/WebCrypto.d.ts.map +1 -0
  270. package/dist/crypto/WebCrypto.js +63 -0
  271. package/dist/crypto/WebCrypto.js.map +1 -0
  272. package/dist/crypto/index.d.ts +65 -0
  273. package/dist/crypto/index.d.ts.map +1 -0
  274. package/dist/crypto/index.js +66 -0
  275. package/dist/crypto/index.js.map +1 -0
  276. package/dist/crypto/internal/asymmetric.d.ts +2 -0
  277. package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
  278. package/dist/crypto/internal/asymmetric.js +210 -0
  279. package/dist/crypto/internal/asymmetric.js.map +1 -0
  280. package/dist/crypto/internal/chacha.d.ts +46 -0
  281. package/dist/crypto/internal/chacha.d.ts.map +1 -0
  282. package/dist/crypto/internal/chacha.js +885 -0
  283. package/dist/crypto/internal/chacha.js.map +1 -0
  284. package/dist/crypto/internal/der.d.ts +6 -0
  285. package/dist/crypto/internal/der.d.ts.map +1 -0
  286. package/dist/crypto/internal/der.js +86 -0
  287. package/dist/crypto/internal/der.js.map +1 -0
  288. package/dist/crypto/internal/digest.d.ts +2 -0
  289. package/dist/crypto/internal/digest.d.ts.map +1 -0
  290. package/dist/crypto/internal/digest.js +15 -0
  291. package/dist/crypto/internal/digest.js.map +1 -0
  292. package/dist/crypto/internal/key.d.ts +2 -0
  293. package/dist/crypto/internal/key.d.ts.map +1 -0
  294. package/dist/crypto/internal/key.js +171 -0
  295. package/dist/crypto/internal/key.js.map +1 -0
  296. package/dist/crypto/internal/md5.d.ts +39 -0
  297. package/dist/crypto/internal/md5.d.ts.map +1 -0
  298. package/dist/crypto/internal/md5.js +179 -0
  299. package/dist/crypto/internal/md5.js.map +1 -0
  300. package/dist/crypto/internal/webCrypto.d.ts +2 -0
  301. package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
  302. package/dist/crypto/internal/webCrypto.js +111 -0
  303. package/dist/crypto/internal/webCrypto.js.map +1 -0
  304. package/dist/encoding/Base64Url.d.ts.map +1 -1
  305. package/dist/encoding/Base64Url.js +29 -5
  306. package/dist/encoding/Base64Url.js.map +1 -1
  307. package/dist/encoding/Csv.d.ts +608 -0
  308. package/dist/encoding/Csv.d.ts.map +1 -0
  309. package/dist/encoding/Csv.js +718 -0
  310. package/dist/encoding/Csv.js.map +1 -0
  311. package/dist/encoding/Hex.d.ts +3 -2
  312. package/dist/encoding/Hex.d.ts.map +1 -1
  313. package/dist/encoding/Hex.js +3 -2
  314. package/dist/encoding/Hex.js.map +1 -1
  315. package/dist/encoding/Ndjson.d.ts +5 -4
  316. package/dist/encoding/Ndjson.d.ts.map +1 -1
  317. package/dist/encoding/Ndjson.js +6 -5
  318. package/dist/encoding/Ndjson.js.map +1 -1
  319. package/dist/encoding/SchemaBinary.d.ts.map +1 -1
  320. package/dist/encoding/SchemaBinary.js +42 -4
  321. package/dist/encoding/SchemaBinary.js.map +1 -1
  322. package/dist/encoding/Sse.d.ts +3 -1
  323. package/dist/encoding/Sse.d.ts.map +1 -1
  324. package/dist/encoding/Sse.js +5 -3
  325. package/dist/encoding/Sse.js.map +1 -1
  326. package/dist/encoding/Toml.d.ts +17 -3
  327. package/dist/encoding/Toml.d.ts.map +1 -1
  328. package/dist/encoding/Toml.js +104 -16
  329. package/dist/encoding/Toml.js.map +1 -1
  330. package/dist/encoding/Yaml.d.ts +8 -1
  331. package/dist/encoding/Yaml.d.ts.map +1 -1
  332. package/dist/encoding/Yaml.js +54 -18
  333. package/dist/encoding/Yaml.js.map +1 -1
  334. package/dist/encoding/index.d.ts +5 -0
  335. package/dist/encoding/index.d.ts.map +1 -1
  336. package/dist/encoding/index.js +5 -0
  337. package/dist/encoding/index.js.map +1 -1
  338. package/dist/eventlog/EventJournal.d.ts.map +1 -1
  339. package/dist/eventlog/EventJournal.js +6 -3
  340. package/dist/eventlog/EventJournal.js.map +1 -1
  341. package/dist/eventlog/EventLog.d.ts +126 -4
  342. package/dist/eventlog/EventLog.d.ts.map +1 -1
  343. package/dist/eventlog/EventLog.js +207 -12
  344. package/dist/eventlog/EventLog.js.map +1 -1
  345. package/dist/eventlog/EventLogEncryption.d.ts +41 -4
  346. package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
  347. package/dist/eventlog/EventLogEncryption.js +83 -64
  348. package/dist/eventlog/EventLogEncryption.js.map +1 -1
  349. package/dist/eventlog/EventLogMessage.d.ts +279 -0
  350. package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
  351. package/dist/eventlog/EventLogMessage.js +217 -1
  352. package/dist/eventlog/EventLogMessage.js.map +1 -1
  353. package/dist/eventlog/EventLogRemote.d.ts +200 -28
  354. package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
  355. package/dist/eventlog/EventLogRemote.js +186 -16
  356. package/dist/eventlog/EventLogRemote.js.map +1 -1
  357. package/dist/eventlog/EventLogServer.d.ts +10 -1
  358. package/dist/eventlog/EventLogServer.d.ts.map +1 -1
  359. package/dist/eventlog/EventLogServer.js +45 -22
  360. package/dist/eventlog/EventLogServer.js.map +1 -1
  361. package/dist/eventlog/EventLogServerEncrypted.d.ts +336 -5
  362. package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  363. package/dist/eventlog/EventLogServerEncrypted.js +769 -14
  364. package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
  365. package/dist/eventlog/EventLogServerUnencrypted.d.ts +17 -0
  366. package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
  367. package/dist/eventlog/EventLogServerUnencrypted.js +14 -2
  368. package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
  369. package/dist/eventlog/EventLogSessionAuth.d.ts +26 -3
  370. package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
  371. package/dist/eventlog/EventLogSessionAuth.js +63 -64
  372. package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
  373. package/dist/eventlog/EventRow.d.ts +4 -0
  374. package/dist/eventlog/EventRow.d.ts.map +1 -1
  375. package/dist/eventlog/EventRow.js +12 -2
  376. package/dist/eventlog/EventRow.js.map +1 -1
  377. package/dist/eventlog/SqlEventJournal.js +2 -2
  378. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  379. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
  380. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  381. package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
  382. package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  383. package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
  384. package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  385. package/dist/eventlog/internal/batches.d.ts +12 -0
  386. package/dist/eventlog/internal/batches.d.ts.map +1 -0
  387. package/dist/eventlog/internal/batches.js +26 -0
  388. package/dist/eventlog/internal/batches.js.map +1 -0
  389. package/dist/eventlog/internal/compaction.d.ts +38 -0
  390. package/dist/eventlog/internal/compaction.d.ts.map +1 -0
  391. package/dist/eventlog/internal/compaction.js +33 -0
  392. package/dist/eventlog/internal/compaction.js.map +1 -0
  393. package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
  394. package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
  395. package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
  396. package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
  397. package/dist/eventlog/internal/remoteCompaction.js +76 -0
  398. package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
  399. package/dist/graphql/GraphQLClient.d.ts +3 -1
  400. package/dist/graphql/GraphQLClient.d.ts.map +1 -1
  401. package/dist/graphql/GraphQLClient.js.map +1 -1
  402. package/dist/graphql/GraphQLClientError.d.ts +14 -9
  403. package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
  404. package/dist/graphql/GraphQLClientError.js +14 -21
  405. package/dist/graphql/GraphQLClientError.js.map +1 -1
  406. package/dist/graphql/GraphQLProtocol.d.ts +12 -3
  407. package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
  408. package/dist/graphql/GraphQLProtocol.js +4 -1
  409. package/dist/graphql/GraphQLProtocol.js.map +1 -1
  410. package/dist/http/Cookies.d.ts +172 -0
  411. package/dist/http/Cookies.d.ts.map +1 -1
  412. package/dist/http/Cookies.js +143 -1
  413. package/dist/http/Cookies.js.map +1 -1
  414. package/dist/http/FetchHttpClient.d.ts +26 -2
  415. package/dist/http/FetchHttpClient.d.ts.map +1 -1
  416. package/dist/http/FetchHttpClient.js +78 -15
  417. package/dist/http/FetchHttpClient.js.map +1 -1
  418. package/dist/http/HttpClient.d.ts +268 -15
  419. package/dist/http/HttpClient.d.ts.map +1 -1
  420. package/dist/http/HttpClient.js +140 -7
  421. package/dist/http/HttpClient.js.map +1 -1
  422. package/dist/http/HttpClientRequest.d.ts +9 -5
  423. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  424. package/dist/http/HttpClientRequest.js +2 -3
  425. package/dist/http/HttpClientRequest.js.map +1 -1
  426. package/dist/http/HttpClientResponse.d.ts.map +1 -1
  427. package/dist/http/HttpClientResponse.js +3 -2
  428. package/dist/http/HttpClientResponse.js.map +1 -1
  429. package/dist/http/HttpMethod.d.ts +7 -1
  430. package/dist/http/HttpMethod.d.ts.map +1 -1
  431. package/dist/http/HttpMethod.js +3 -8
  432. package/dist/http/HttpMethod.js.map +1 -1
  433. package/dist/http/HttpServerRequest.d.ts +5 -2
  434. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  435. package/dist/http/HttpServerRequest.js +44 -39
  436. package/dist/http/HttpServerRequest.js.map +1 -1
  437. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  438. package/dist/http/HttpServerResponse.js +3 -2
  439. package/dist/http/HttpServerResponse.js.map +1 -1
  440. package/dist/http/HttpTraceContext.d.ts +2 -1
  441. package/dist/http/HttpTraceContext.d.ts.map +1 -1
  442. package/dist/http/HttpTraceContext.js +7 -5
  443. package/dist/http/HttpTraceContext.js.map +1 -1
  444. package/dist/http/ProblemDetails.d.ts +96 -0
  445. package/dist/http/ProblemDetails.d.ts.map +1 -0
  446. package/dist/http/ProblemDetails.js +98 -0
  447. package/dist/http/ProblemDetails.js.map +1 -0
  448. package/dist/http/index.d.ts +5 -0
  449. package/dist/http/index.d.ts.map +1 -1
  450. package/dist/http/index.js +5 -0
  451. package/dist/http/index.js.map +1 -1
  452. package/dist/http/internal/decompression.js +3 -2
  453. package/dist/http/internal/decompression.js.map +1 -1
  454. package/dist/http/internal/mimeTypes.d.ts +4 -1
  455. package/dist/http/internal/mimeTypes.d.ts.map +1 -1
  456. package/dist/http/internal/mimeTypes.js +4 -1
  457. package/dist/http/internal/mimeTypes.js.map +1 -1
  458. package/dist/http/internal/urlParams.js +8 -0
  459. package/dist/http/internal/urlParams.js.map +1 -1
  460. package/dist/http-api/HttpApiBuilder.js +19 -5
  461. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  462. package/dist/http-api/HttpApiClient.d.ts +63 -0
  463. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  464. package/dist/http-api/HttpApiClient.js +51 -0
  465. package/dist/http-api/HttpApiClient.js.map +1 -1
  466. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  467. package/dist/http-api/HttpApiEndpoint.js +14 -5
  468. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  469. package/dist/http-api/HttpApiError.d.ts +185 -13
  470. package/dist/http-api/HttpApiError.d.ts.map +1 -1
  471. package/dist/http-api/HttpApiError.js +128 -0
  472. package/dist/http-api/HttpApiError.js.map +1 -1
  473. package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
  474. package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
  475. package/dist/http-api/HttpApiMiddleware.js +85 -1
  476. package/dist/http-api/HttpApiMiddleware.js.map +1 -1
  477. package/dist/http-api/HttpApiSchema.d.ts +76 -14
  478. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  479. package/dist/http-api/HttpApiSchema.js +54 -1
  480. package/dist/http-api/HttpApiSchema.js.map +1 -1
  481. package/dist/index.d.ts +5 -5
  482. package/dist/index.d.ts.map +1 -1
  483. package/dist/index.js +5 -5
  484. package/dist/index.js.map +1 -1
  485. package/dist/internal/dateTime.js +49 -24
  486. package/dist/internal/dateTime.js.map +1 -1
  487. package/dist/internal/effect.js +35 -14
  488. package/dist/internal/effect.js.map +1 -1
  489. package/dist/internal/glob.d.ts +2 -0
  490. package/dist/internal/glob.d.ts.map +1 -0
  491. package/dist/internal/glob.js +808 -0
  492. package/dist/internal/glob.js.map +1 -0
  493. package/dist/internal/graphql.js +21 -7
  494. package/dist/internal/graphql.js.map +1 -1
  495. package/dist/internal/graphqlHeaders.d.ts +7 -0
  496. package/dist/internal/graphqlHeaders.d.ts.map +1 -1
  497. package/dist/internal/graphqlHeaders.js +11 -0
  498. package/dist/internal/graphqlHeaders.js.map +1 -1
  499. package/dist/internal/matcher.js +10 -0
  500. package/dist/internal/matcher.js.map +1 -1
  501. package/dist/internal/persistence.js +9 -0
  502. package/dist/internal/persistence.js.map +1 -1
  503. package/dist/internal/rcRef.js +4 -1
  504. package/dist/internal/rcRef.js.map +1 -1
  505. package/dist/internal/request.js +29 -42
  506. package/dist/internal/request.js.map +1 -1
  507. package/dist/internal/schema/fromJsonSchemaDocument.js +7 -8
  508. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
  509. package/dist/internal/schema/toCodeDocument.js +6 -3
  510. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  511. package/dist/internal/trie.js +42 -13
  512. package/dist/internal/trie.js.map +1 -1
  513. package/dist/internal/ulid.js +41 -0
  514. package/dist/internal/ulid.js.map +1 -1
  515. package/dist/internal/uuid.js +52 -8
  516. package/dist/internal/uuid.js.map +1 -1
  517. package/dist/internal/version.js +1 -1
  518. package/dist/jose/JoseError.d.ts +285 -0
  519. package/dist/jose/JoseError.d.ts.map +1 -0
  520. package/dist/jose/JoseError.js +269 -0
  521. package/dist/jose/JoseError.js.map +1 -0
  522. package/dist/jose/Jwe.d.ts +128 -0
  523. package/dist/jose/Jwe.d.ts.map +1 -0
  524. package/dist/jose/Jwe.js +134 -0
  525. package/dist/jose/Jwe.js.map +1 -0
  526. package/dist/jose/Jwk.d.ts +597 -0
  527. package/dist/jose/Jwk.d.ts.map +1 -0
  528. package/dist/jose/Jwk.js +503 -0
  529. package/dist/jose/Jwk.js.map +1 -0
  530. package/dist/jose/Jwks.d.ts +236 -0
  531. package/dist/jose/Jwks.d.ts.map +1 -0
  532. package/dist/jose/Jwks.js +306 -0
  533. package/dist/jose/Jwks.js.map +1 -0
  534. package/dist/jose/Jws.d.ts +177 -0
  535. package/dist/jose/Jws.d.ts.map +1 -0
  536. package/dist/jose/Jws.js +183 -0
  537. package/dist/jose/Jws.js.map +1 -0
  538. package/dist/jose/Jwt.d.ts +270 -0
  539. package/dist/jose/Jwt.d.ts.map +1 -0
  540. package/dist/jose/Jwt.js +293 -0
  541. package/dist/jose/Jwt.js.map +1 -0
  542. package/dist/jose/index.d.ts +51 -0
  543. package/dist/jose/index.d.ts.map +1 -0
  544. package/dist/jose/index.js +52 -0
  545. package/dist/jose/index.js.map +1 -0
  546. package/dist/jose/internal/compact.d.ts +2 -0
  547. package/dist/jose/internal/compact.d.ts.map +1 -0
  548. package/dist/jose/internal/compact.js +179 -0
  549. package/dist/jose/internal/compact.js.map +1 -0
  550. package/dist/net/Host.d.ts.map +1 -1
  551. package/dist/net/Host.js +5 -10
  552. package/dist/net/Host.js.map +1 -1
  553. package/dist/observability/Otlp.d.ts +15 -4
  554. package/dist/observability/Otlp.d.ts.map +1 -1
  555. package/dist/observability/Otlp.js +10 -0
  556. package/dist/observability/Otlp.js.map +1 -1
  557. package/dist/observability/OtlpResource.d.ts +7 -0
  558. package/dist/observability/OtlpResource.d.ts.map +1 -1
  559. package/dist/observability/OtlpResource.js +11 -1
  560. package/dist/observability/OtlpResource.js.map +1 -1
  561. package/dist/observability/OtlpSerialization.d.ts +1 -1
  562. package/dist/observability/OtlpSerialization.d.ts.map +1 -1
  563. package/dist/observability/OtlpSerialization.js +10 -4
  564. package/dist/observability/OtlpSerialization.js.map +1 -1
  565. package/dist/observability/internal/otlpProtobuf.js +3 -3
  566. package/dist/observability/internal/otlpProtobuf.js.map +1 -1
  567. package/dist/observability/internal/protobuf.js +6 -0
  568. package/dist/observability/internal/protobuf.js.map +1 -1
  569. package/dist/persistence/CircuitBreaker.d.ts +98 -38
  570. package/dist/persistence/CircuitBreaker.d.ts.map +1 -1
  571. package/dist/persistence/CircuitBreaker.js +67 -29
  572. package/dist/persistence/CircuitBreaker.js.map +1 -1
  573. package/dist/persistence/KeyValueStore.d.ts +47 -2
  574. package/dist/persistence/KeyValueStore.d.ts.map +1 -1
  575. package/dist/persistence/KeyValueStore.js +129 -18
  576. package/dist/persistence/KeyValueStore.js.map +1 -1
  577. package/dist/persistence/PersistedQueue.d.ts +9 -0
  578. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  579. package/dist/persistence/PersistedQueue.js +94 -52
  580. package/dist/persistence/PersistedQueue.js.map +1 -1
  581. package/dist/persistence/Persistence.d.ts +10 -4
  582. package/dist/persistence/Persistence.d.ts.map +1 -1
  583. package/dist/persistence/Persistence.js +18 -11
  584. package/dist/persistence/Persistence.js.map +1 -1
  585. package/dist/persistence/RateLimiter.d.ts +8 -0
  586. package/dist/persistence/RateLimiter.d.ts.map +1 -1
  587. package/dist/persistence/RateLimiter.js +63 -12
  588. package/dist/persistence/RateLimiter.js.map +1 -1
  589. package/dist/persistence/index.d.ts +1 -1
  590. package/dist/persistence/index.js +1 -1
  591. package/dist/process/ChildProcess.d.ts +207 -67
  592. package/dist/process/ChildProcess.d.ts.map +1 -1
  593. package/dist/process/ChildProcess.js +56 -158
  594. package/dist/process/ChildProcess.js.map +1 -1
  595. package/dist/process/ChildProcessSpawner.d.ts +5 -0
  596. package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
  597. package/dist/process/ChildProcessSpawner.js.map +1 -1
  598. package/dist/process/CommandLine.d.ts +294 -0
  599. package/dist/process/CommandLine.d.ts.map +1 -0
  600. package/dist/process/CommandLine.js +481 -0
  601. package/dist/process/CommandLine.js.map +1 -0
  602. package/dist/process/index.d.ts +5 -0
  603. package/dist/process/index.d.ts.map +1 -1
  604. package/dist/process/index.js +5 -0
  605. package/dist/process/index.js.map +1 -1
  606. package/dist/reactivity/Atom.d.ts +2 -1
  607. package/dist/reactivity/Atom.d.ts.map +1 -1
  608. package/dist/reactivity/Atom.js +3 -4
  609. package/dist/reactivity/Atom.js.map +1 -1
  610. package/dist/reactivity/AtomRegistry.js +17 -7
  611. package/dist/reactivity/AtomRegistry.js.map +1 -1
  612. package/dist/rpc/Rpc.d.ts +1 -1
  613. package/dist/rpc/Rpc.d.ts.map +1 -1
  614. package/dist/rpc/Rpc.js.map +1 -1
  615. package/dist/rpc/RpcClient.d.ts +28 -1
  616. package/dist/rpc/RpcClient.d.ts.map +1 -1
  617. package/dist/rpc/RpcClient.js +78 -27
  618. package/dist/rpc/RpcClient.js.map +1 -1
  619. package/dist/rpc/RpcMessage.d.ts +13 -3
  620. package/dist/rpc/RpcMessage.d.ts.map +1 -1
  621. package/dist/rpc/RpcMessage.js +1 -0
  622. package/dist/rpc/RpcMessage.js.map +1 -1
  623. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  624. package/dist/rpc/RpcSerialization.js +6 -0
  625. package/dist/rpc/RpcSerialization.js.map +1 -1
  626. package/dist/rpc/RpcServer.d.ts +31 -0
  627. package/dist/rpc/RpcServer.d.ts.map +1 -1
  628. package/dist/rpc/RpcServer.js +139 -66
  629. package/dist/rpc/RpcServer.js.map +1 -1
  630. package/dist/schema/Model.d.ts +14 -0
  631. package/dist/schema/Model.d.ts.map +1 -1
  632. package/dist/schema/Model.js +18 -3
  633. package/dist/schema/Model.js.map +1 -1
  634. package/dist/sql/Migrator.d.ts +9 -20
  635. package/dist/sql/Migrator.d.ts.map +1 -1
  636. package/dist/sql/Migrator.js +20 -53
  637. package/dist/sql/Migrator.js.map +1 -1
  638. package/dist/sql/MigratorFileSystem.d.ts +21 -0
  639. package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
  640. package/dist/sql/MigratorFileSystem.js +57 -0
  641. package/dist/sql/MigratorFileSystem.js.map +1 -0
  642. package/dist/sql/SqlClient.d.ts +38 -3
  643. package/dist/sql/SqlClient.d.ts.map +1 -1
  644. package/dist/sql/SqlClient.js +9 -12
  645. package/dist/sql/SqlClient.js.map +1 -1
  646. package/dist/sql/Statement.d.ts +61 -9
  647. package/dist/sql/Statement.d.ts.map +1 -1
  648. package/dist/sql/Statement.js +24 -33
  649. package/dist/sql/Statement.js.map +1 -1
  650. package/dist/sql/index.js +1 -1
  651. package/dist/testing/index.d.ts +0 -5
  652. package/dist/testing/index.d.ts.map +1 -1
  653. package/dist/testing/index.js +0 -5
  654. package/dist/testing/index.js.map +1 -1
  655. package/dist/workflow/Workflow.d.ts +4 -0
  656. package/dist/workflow/Workflow.d.ts.map +1 -1
  657. package/dist/workflow/Workflow.js.map +1 -1
  658. package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
  659. package/dist/workflow/WorkflowEngine.js +5 -0
  660. package/dist/workflow/WorkflowEngine.js.map +1 -1
  661. package/dist/workflow/internal/crypto.js +9 -8
  662. package/dist/workflow/internal/crypto.js.map +1 -1
  663. package/package.json +7 -1
  664. package/src/BigDecimal.ts +173 -16
  665. package/src/Channel.ts +17 -11
  666. package/src/Config.ts +7 -1
  667. package/src/Context.ts +34 -10
  668. package/src/Cron.ts +178 -29
  669. package/src/Duration.ts +140 -0
  670. package/src/Effect.ts +914 -85
  671. package/src/Equal.ts +3 -3
  672. package/src/FileSystem.ts +65 -4
  673. package/src/Glob.ts +205 -0
  674. package/src/Hash.ts +5 -4
  675. package/src/Iterable.ts +8 -5
  676. package/src/Match.ts +127 -0
  677. package/src/Path.ts +6 -1
  678. package/src/Pool.ts +75 -16
  679. package/src/Random.ts +3 -3
  680. package/src/RcMap.ts +5 -1
  681. package/src/Schedule.ts +26 -3
  682. package/src/Schema.ts +1191 -63
  683. package/src/SchemaGetter.ts +27 -11
  684. package/src/SchemaRepresentation.ts +23 -2
  685. package/src/SchemaTransformation.ts +10 -5
  686. package/src/ScopedCache.ts +5 -9
  687. package/src/Semaphore.ts +141 -0
  688. package/src/Stream.ts +15 -6
  689. package/src/Terminal.ts +19 -1
  690. package/src/ai/AiError.ts +56 -80
  691. package/src/ai/Decision.ts +257 -6
  692. package/src/ai/DecisionModel.ts +171 -28
  693. package/src/ai/McpClient.ts +488 -91
  694. package/src/ai/McpSchema.ts +119 -0
  695. package/src/ai/McpServer.ts +1525 -319
  696. package/src/ai/McpTest.ts +380 -0
  697. package/src/ai/Prompt.ts +16 -11
  698. package/src/ai/Response.ts +2 -22
  699. package/src/ai/Tool.ts +32 -18
  700. package/src/ai/index.ts +6 -0
  701. package/src/ai/internal/mcpCore.ts +243 -56
  702. package/src/ai/internal/mcpProtocol/v2024_11_05.ts +7 -8
  703. package/src/ai/internal/mcpProtocol/v2025_03_26.ts +7 -8
  704. package/src/ai/internal/mcpProtocol/v2025_06_18.ts +7 -8
  705. package/src/ai/internal/mcpProtocol/v2025_11_25.ts +7 -8
  706. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +56 -17
  707. package/src/ai/internal/mcpProtocol.ts +44 -0
  708. package/src/ai/internal/mcpRuntime.ts +15 -8
  709. package/src/ai/internal/mcpSkills.ts +480 -0
  710. package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
  711. package/src/cli/Argument.ts +6 -0
  712. package/src/cli/CliOutput.ts +117 -49
  713. package/src/cli/Command.ts +23 -0
  714. package/src/cli/Flag.ts +107 -0
  715. package/src/cli/HelpDoc.ts +18 -1
  716. package/src/cli/Param.ts +6 -0
  717. package/src/cli/Primitive.ts +16 -1
  718. package/src/cli/Prompt.ts +1 -0
  719. package/src/cli/internal/help.ts +21 -9
  720. package/src/cluster/ClusterWorkflowEngine.ts +22 -8
  721. package/src/cluster/Reply.ts +1 -1
  722. package/src/cluster/Sharding.ts +96 -26
  723. package/src/cluster/ShardingConfig.ts +41 -3
  724. package/src/cluster/SingleRunner.ts +3 -3
  725. package/src/cluster/SqlMessageStorage.ts +49 -17
  726. package/src/cluster/SqlRunnerStorage.ts +37 -27
  727. package/src/cluster/internal/entityManager.ts +24 -10
  728. package/src/crypto/Aead.ts +517 -0
  729. package/src/crypto/Cipher.ts +326 -0
  730. package/src/crypto/CryptoError.ts +242 -0
  731. package/src/crypto/Digest.ts +167 -0
  732. package/src/crypto/Kdf.ts +315 -0
  733. package/src/crypto/KeyAgreement.ts +489 -0
  734. package/src/crypto/KeyFormat.ts +741 -0
  735. package/src/crypto/KeyWrap.ts +639 -0
  736. package/src/crypto/Mac.ts +386 -0
  737. package/src/crypto/SecureRandom.ts +459 -0
  738. package/src/crypto/Signature.ts +673 -0
  739. package/src/crypto/WebCrypto.ts +84 -0
  740. package/src/crypto/index.ts +78 -0
  741. package/src/crypto/internal/asymmetric.ts +330 -0
  742. package/src/crypto/internal/chacha.ts +1088 -0
  743. package/src/crypto/internal/der.ts +110 -0
  744. package/src/crypto/internal/digest.ts +16 -0
  745. package/src/crypto/internal/key.ts +242 -0
  746. package/src/crypto/internal/md5.ts +170 -0
  747. package/src/crypto/internal/webCrypto.ts +150 -0
  748. package/src/encoding/Base64Url.ts +32 -5
  749. package/src/encoding/Csv.ts +1298 -0
  750. package/src/encoding/Hex.ts +3 -2
  751. package/src/encoding/Ndjson.ts +6 -5
  752. package/src/encoding/SchemaBinary.ts +40 -4
  753. package/src/encoding/Sse.ts +5 -3
  754. package/src/encoding/Toml.ts +85 -20
  755. package/src/encoding/Yaml.ts +61 -18
  756. package/src/encoding/index.ts +6 -0
  757. package/src/eventlog/EventJournal.ts +4 -3
  758. package/src/eventlog/EventLog.ts +347 -15
  759. package/src/eventlog/EventLogEncryption.ts +118 -110
  760. package/src/eventlog/EventLogMessage.ts +273 -1
  761. package/src/eventlog/EventLogRemote.ts +367 -23
  762. package/src/eventlog/EventLogServer.ts +54 -20
  763. package/src/eventlog/EventLogServerEncrypted.ts +1135 -67
  764. package/src/eventlog/EventLogServerUnencrypted.ts +19 -2
  765. package/src/eventlog/EventLogSessionAuth.ts +82 -70
  766. package/src/eventlog/EventRow.ts +12 -3
  767. package/src/eventlog/SqlEventJournal.ts +2 -2
  768. package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
  769. package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
  770. package/src/eventlog/internal/batches.ts +30 -0
  771. package/src/eventlog/internal/compaction.ts +64 -0
  772. package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
  773. package/src/eventlog/internal/remoteCompaction.ts +92 -0
  774. package/src/graphql/GraphQLClient.ts +3 -1
  775. package/src/graphql/GraphQLClientError.ts +15 -22
  776. package/src/graphql/GraphQLProtocol.ts +12 -3
  777. package/src/http/Cookies.ts +281 -1
  778. package/src/http/FetchHttpClient.ts +88 -16
  779. package/src/http/HttpClient.ts +299 -33
  780. package/src/http/HttpClientRequest.ts +12 -9
  781. package/src/http/HttpClientResponse.ts +3 -2
  782. package/src/http/HttpMethod.ts +10 -2
  783. package/src/http/HttpServerRequest.ts +76 -53
  784. package/src/http/HttpServerResponse.ts +3 -2
  785. package/src/http/HttpTraceContext.ts +7 -4
  786. package/src/http/ProblemDetails.ts +149 -0
  787. package/src/http/index.ts +6 -0
  788. package/src/http/internal/decompression.ts +4 -4
  789. package/src/http/internal/mimeTypes.ts +4 -1
  790. package/src/http/internal/urlParams.ts +8 -0
  791. package/src/http-api/HttpApiBuilder.ts +24 -12
  792. package/src/http-api/HttpApiClient.ts +67 -1
  793. package/src/http-api/HttpApiEndpoint.ts +14 -5
  794. package/src/http-api/HttpApiError.ts +250 -0
  795. package/src/http-api/HttpApiMiddleware.ts +95 -1
  796. package/src/http-api/HttpApiSchema.ts +106 -15
  797. package/src/index.ts +6 -6
  798. package/src/internal/dateTime.ts +54 -24
  799. package/src/internal/effect.ts +40 -18
  800. package/src/internal/glob.ts +952 -0
  801. package/src/internal/graphql.ts +27 -9
  802. package/src/internal/graphqlHeaders.ts +13 -0
  803. package/src/internal/matcher.ts +17 -0
  804. package/src/internal/persistence.ts +11 -0
  805. package/src/internal/rcRef.ts +4 -1
  806. package/src/internal/request.ts +51 -58
  807. package/src/internal/schema/fromJsonSchemaDocument.ts +11 -10
  808. package/src/internal/schema/toCodeDocument.ts +7 -3
  809. package/src/internal/trie.ts +43 -14
  810. package/src/internal/ulid.ts +44 -0
  811. package/src/internal/uuid.ts +57 -16
  812. package/src/internal/version.ts +1 -1
  813. package/src/jose/JoseError.ts +329 -0
  814. package/src/jose/Jwe.ts +196 -0
  815. package/src/jose/Jwk.ts +777 -0
  816. package/src/jose/Jwks.ts +418 -0
  817. package/src/jose/Jws.ts +312 -0
  818. package/src/jose/Jwt.ts +493 -0
  819. package/src/jose/index.ts +58 -0
  820. package/src/jose/internal/compact.ts +195 -0
  821. package/src/net/Host.ts +5 -10
  822. package/src/observability/Otlp.ts +21 -4
  823. package/src/observability/OtlpResource.ts +9 -1
  824. package/src/observability/OtlpSerialization.ts +13 -5
  825. package/src/observability/internal/otlpProtobuf.ts +6 -6
  826. package/src/observability/internal/protobuf.ts +10 -0
  827. package/src/persistence/CircuitBreaker.ts +113 -48
  828. package/src/persistence/KeyValueStore.ts +219 -22
  829. package/src/persistence/PersistedQueue.ts +128 -59
  830. package/src/persistence/Persistence.ts +20 -13
  831. package/src/persistence/RateLimiter.ts +84 -15
  832. package/src/persistence/index.ts +1 -1
  833. package/src/process/ChildProcess.ts +255 -260
  834. package/src/process/ChildProcessSpawner.ts +5 -0
  835. package/src/process/CommandLine.ts +630 -0
  836. package/src/process/index.ts +6 -0
  837. package/src/reactivity/Atom.ts +5 -5
  838. package/src/reactivity/AtomRegistry.ts +20 -9
  839. package/src/rpc/Rpc.ts +3 -1
  840. package/src/rpc/RpcClient.ts +94 -38
  841. package/src/rpc/RpcMessage.ts +13 -3
  842. package/src/rpc/RpcSerialization.ts +3 -0
  843. package/src/rpc/RpcServer.ts +176 -78
  844. package/src/schema/Model.ts +26 -3
  845. package/src/sql/Migrator.ts +38 -80
  846. package/src/sql/MigratorFileSystem.ts +71 -0
  847. package/src/sql/SqlClient.ts +45 -24
  848. package/src/sql/Statement.ts +60 -29
  849. package/src/sql/index.ts +1 -1
  850. package/src/testing/index.ts +0 -6
  851. package/src/workflow/Workflow.ts +4 -0
  852. package/src/workflow/WorkflowEngine.ts +5 -0
  853. package/src/workflow/internal/crypto.ts +15 -11
  854. package/dist/Crypto.d.ts +0 -244
  855. package/dist/Crypto.d.ts.map +0 -1
  856. package/dist/Crypto.js +0 -139
  857. package/dist/Crypto.js.map +0 -1
  858. package/dist/testing/TestCrypto.d.ts +0 -73
  859. package/dist/testing/TestCrypto.d.ts.map +0 -1
  860. package/dist/testing/TestCrypto.js +0 -87
  861. package/dist/testing/TestCrypto.js.map +0 -1
  862. package/src/Crypto.ts +0 -347
  863. package/src/testing/TestCrypto.ts +0 -94
@@ -20,6 +20,7 @@ import { format } from "../Formatter.ts"
20
20
  import { identity } from "../Function.ts"
21
21
  import * as Path_ from "../Path.ts"
22
22
  import * as Redacted_ from "../Redacted.ts"
23
+ import * as Result from "../Result.ts"
23
24
  import * as Schema from "../Schema.ts"
24
25
  import type { Formatter } from "../SchemaIssue.ts"
25
26
  import type * as Struct from "../Struct.ts"
@@ -45,6 +46,7 @@ const TypeId = "~effect/cli/Primitive"
45
46
  * Layer.succeed(Terminal.Terminal, Terminal.make({
46
47
  * columns: Effect.succeed(80),
47
48
  * rows: Effect.succeed(24),
49
+ * size: Effect.die("unused"),
48
50
  * readInput: Effect.die("unused"),
49
51
  * readLine: Effect.die("unused"),
50
52
  * display: () => Effect.void
@@ -157,6 +159,7 @@ const makeSchemaPrimitive = <T>(
157
159
  * Layer.succeed(Terminal.Terminal, Terminal.make({
158
160
  * columns: Effect.succeed(80),
159
161
  * rows: Effect.succeed(24),
162
+ * size: Effect.die("unused"),
160
163
  * readInput: Effect.die("unused"),
161
164
  * readLine: Effect.die("unused"),
162
165
  * display: () => Effect.void
@@ -203,6 +206,7 @@ export const Boolean: Primitive<boolean> = makeSchemaPrimitive(
203
206
  * Layer.succeed(Terminal.Terminal, Terminal.make({
204
207
  * columns: Effect.succeed(80),
205
208
  * rows: Effect.succeed(24),
209
+ * size: Effect.die("unused"),
206
210
  * readInput: Effect.die("unused"),
207
211
  * readLine: Effect.die("unused"),
208
212
  * display: () => Effect.void
@@ -248,6 +252,7 @@ export const Finite: Primitive<number> = makeSchemaPrimitive(
248
252
  * Layer.succeed(Terminal.Terminal, Terminal.make({
249
253
  * columns: Effect.succeed(80),
250
254
  * rows: Effect.succeed(24),
255
+ * size: Effect.die("unused"),
251
256
  * readInput: Effect.die("unused"),
252
257
  * readLine: Effect.die("unused"),
253
258
  * display: () => Effect.void
@@ -293,6 +298,7 @@ export const Int: Primitive<number> = makeSchemaPrimitive(
293
298
  * Layer.succeed(Terminal.Terminal, Terminal.make({
294
299
  * columns: Effect.succeed(80),
295
300
  * rows: Effect.succeed(24),
301
+ * size: Effect.die("unused"),
296
302
  * readInput: Effect.die("unused"),
297
303
  * readLine: Effect.die("unused"),
298
304
  * display: () => Effect.void
@@ -337,6 +343,7 @@ export const Date: Primitive<globalThis.Date> = makeSchemaPrimitive(
337
343
  * Layer.succeed(Terminal.Terminal, Terminal.make({
338
344
  * columns: Effect.succeed(80),
339
345
  * rows: Effect.succeed(24),
346
+ * size: Effect.die("unused"),
340
347
  * readInput: Effect.die("unused"),
341
348
  * readLine: Effect.die("unused"),
342
349
  * display: () => Effect.void
@@ -379,6 +386,7 @@ export const String: Primitive<string> = makePrimitive("String", (value) => Effe
379
386
  * Layer.succeed(Terminal.Terminal, Terminal.make({
380
387
  * columns: Effect.succeed(80),
381
388
  * rows: Effect.succeed(24),
389
+ * size: Effect.die("unused"),
382
390
  * readInput: Effect.die("unused"),
383
391
  * readLine: Effect.die("unused"),
384
392
  * display: () => Effect.void
@@ -470,6 +478,7 @@ export type PathType = "file" | "directory" | "either"
470
478
  * Layer.succeed(Terminal.Terminal, Terminal.make({
471
479
  * columns: Effect.succeed(80),
472
480
  * rows: Effect.succeed(24),
481
+ * size: Effect.die("unused"),
473
482
  * readInput: Effect.die("unused"),
474
483
  * readLine: Effect.die("unused"),
475
484
  * display: () => Effect.void
@@ -560,6 +569,7 @@ export const Path = (
560
569
  * Layer.succeed(Terminal.Terminal, Terminal.make({
561
570
  * columns: Effect.succeed(80),
562
571
  * rows: Effect.succeed(24),
572
+ * size: Effect.die("unused"),
563
573
  * readInput: Effect.die("unused"),
564
574
  * readLine: Effect.die("unused"),
565
575
  * display: () => Effect.void
@@ -608,6 +618,7 @@ export const Redacted: Primitive<Redacted_.Redacted<string>> = makePrimitive(
608
618
  * Layer.succeed(Terminal.Terminal, Terminal.make({
609
619
  * columns: Effect.succeed(80),
610
620
  * rows: Effect.succeed(24),
621
+ * size: Effect.die("unused"),
611
622
  * readInput: Effect.die("unused"),
612
623
  * readLine: Effect.die("unused"),
613
624
  * display: () => Effect.void
@@ -686,7 +697,7 @@ export type FileParseOptions = {
686
697
  const fileParsers: Record<string, (content: string) => unknown> = {
687
698
  ini: (content: string) => Ini.parse(content),
688
699
  json: (content: string) => JSON.parse(content),
689
- toml: (content: string) => Toml.parse(content),
700
+ toml: (content: string) => Result.getOrThrow(Toml.parse(content)),
690
701
  yml: (content: string) => Yaml.parse(content),
691
702
  yaml: (content: string) => Yaml.parse(content)
692
703
  }
@@ -718,6 +729,7 @@ const fileParsers: Record<string, (content: string) => unknown> = {
718
729
  * Layer.succeed(Terminal.Terminal, Terminal.make({
719
730
  * columns: Effect.succeed(80),
720
731
  * rows: Effect.succeed(24),
732
+ * size: Effect.die("unused"),
721
733
  * readInput: Effect.die("unused"),
722
734
  * readLine: Effect.die("unused"),
723
735
  * display: () => Effect.void
@@ -795,6 +807,7 @@ export type FileSchemaOptions = Struct.Simplify<
795
807
  * Layer.succeed(Terminal.Terminal, Terminal.make({
796
808
  * columns: Effect.succeed(80),
797
809
  * rows: Effect.succeed(24),
810
+ * size: Effect.die("unused"),
798
811
  * readInput: Effect.die("unused"),
799
812
  * readLine: Effect.die("unused"),
800
813
  * display: () => Effect.void
@@ -862,6 +875,7 @@ export const FileSchema = <A>(
862
875
  * Layer.succeed(Terminal.Terminal, Terminal.make({
863
876
  * columns: Effect.succeed(80),
864
877
  * rows: Effect.succeed(24),
878
+ * size: Effect.die("unused"),
865
879
  * readInput: Effect.die("unused"),
866
880
  * readLine: Effect.die("unused"),
867
881
  * display: () => Effect.void
@@ -923,6 +937,7 @@ export const KeyValuePair: Primitive<Record<string, string>> = makePrimitive(
923
937
  * Layer.succeed(Terminal.Terminal, Terminal.make({
924
938
  * columns: Effect.succeed(80),
925
939
  * rows: Effect.succeed(24),
940
+ * size: Effect.die("unused"),
926
941
  * readInput: Effect.die("unused"),
927
942
  * readLine: Effect.die("unused"),
928
943
  * display: () => Effect.void
package/src/cli/Prompt.ts CHANGED
@@ -791,6 +791,7 @@ export declare namespace All {
791
791
  * const terminal = Terminal.make({
792
792
  * columns: Effect.succeed(80),
793
793
  * rows: Effect.succeed(24),
794
+ * size: Effect.die("unused"),
794
795
  * readInput: Effect.succeed({} as never),
795
796
  * readLine: Effect.die("unused"),
796
797
  * display: () => Effect.void
@@ -96,7 +96,7 @@ const collectDeclaredGlobalFlags = (command: Command.Any): ReadonlyArray<GlobalF
96
96
  return dedupeGlobalFlags(collected)
97
97
  }
98
98
 
99
- const getSharedFlagsForCommandPath = (
99
+ const getInheritedFlagsForCommandPath = (
100
100
  commands: ReadonlyArray<Command.Any>,
101
101
  currentFlags: ReadonlyArray<FlagDoc>
102
102
  ): ReadonlyArray<FlagDoc> => {
@@ -105,7 +105,7 @@ const getSharedFlagsForCommandPath = (
105
105
  }
106
106
 
107
107
  const seen = new Set(currentFlags.map((flag) => flag.name))
108
- const sharedFlags: Array<FlagDoc> = []
108
+ const inheritedFlags: Array<FlagDoc> = []
109
109
 
110
110
  for (const ancestor of commands.slice(0, -1)) {
111
111
  const ancestorImpl = toImpl(ancestor)
@@ -116,19 +116,16 @@ const getSharedFlagsForCommandPath = (
116
116
  if (seen.has(single.name)) {
117
117
  continue
118
118
  }
119
- // Hidden ancestor flags are excluded from the shared-flags section
120
- // of subcommand help, the same way they're excluded from the owning
121
- // command's own help output.
122
119
  if (single.hidden) {
123
120
  continue
124
121
  }
125
122
  seen.add(single.name)
126
- sharedFlags.push(toFlagDoc(single, metadata))
123
+ inheritedFlags.push(toFlagDoc(single, metadata))
127
124
  }
128
125
  }
129
126
  }
130
127
 
131
- return sharedFlags
128
+ return inheritedFlags
132
129
  }
133
130
 
134
131
  /**
@@ -160,7 +157,7 @@ export const getHelpForCommandPath = <Name extends string, Input, E, R, ContextI
160
157
 
161
158
  const baseDoc = toImpl(currentCommand).buildHelpDoc(commandPath)
162
159
 
163
- const sharedFlags = getSharedFlagsForCommandPath(commands, baseDoc.flags)
160
+ const inheritedFlags = getInheritedFlagsForCommandPath(commands, baseDoc.flags)
164
161
 
165
162
  const flags = getGlobalFlagsForCommandPath(command, commandPath, builtIns)
166
163
  const globalFlagDocs: Array<FlagDoc> = []
@@ -179,5 +176,20 @@ export const getHelpForCommandPath = <Name extends string, Input, E, R, ContextI
179
176
  }
180
177
  }
181
178
 
182
- return { ...baseDoc, flags: [...sharedFlags, ...baseDoc.flags], globalFlags: globalFlagDocs }
179
+ // Globals accumulate along the path, so the deepest declaring scope lists them all.
180
+ let scopeLength = 1
181
+ for (let i = commands.length - 1; i > 0; i--) {
182
+ if (toImpl(commands[i]).globalFlags.length > 0) {
183
+ scopeLength = i + 1
184
+ break
185
+ }
186
+ }
187
+
188
+ return {
189
+ ...baseDoc,
190
+ inheritedFlags,
191
+ globalFlags: globalFlagDocs,
192
+ globalFlagsScope: commandPath.slice(0, scopeLength),
193
+ commandPath
194
+ }
183
195
  })
@@ -535,14 +535,15 @@ export const make = Effect.gen(function*() {
535
535
  if (instance.abandoned) {
536
536
  instance.suspended = false
537
537
  }
538
+ // Abandoned runs never wake the parent; another owner replays them.
539
+ const resumeParent = parent && !parent.detached && !instance.abandoned
540
+ ? ensureSuccess(sendResumeParent(parent, executionId))
541
+ : Effect.void
538
542
  if (
539
543
  !instance.suspended &&
540
544
  !instance.abandoned &&
541
545
  !(suspendOnFailure && exit._tag === "Failure")
542
546
  ) {
543
- const resumeParent = parent && !parent.detached
544
- ? ensureSuccess(sendResumeParent(parent, executionId))
545
- : Effect.void
546
547
  if (exit._tag === "Success" || !Cause.hasInterruptsOnly(exit.cause)) {
547
548
  return resumeParent
548
549
  }
@@ -568,9 +569,13 @@ export const make = Effect.gen(function*() {
568
569
  }
569
570
  instance.suspended = false
570
571
  instance.interrupted = true
571
- return Effect.andThen(
572
- Effect.ignore(clearClock({ workflow, executionId })),
573
- Effect.withFiber<void>((fiber) => Effect.interruptible(Fiber.interrupt(fiber)))
572
+ // The interrupt completes the run, so wake the parent
573
+ // to observe it.
574
+ return Effect.ignore(clearClock({ workflow, executionId })).pipe(
575
+ Effect.andThen(resumeParent),
576
+ Effect.andThen(
577
+ Effect.withFiber<void>((fiber) => Effect.interruptible(Fiber.interrupt(fiber)))
578
+ )
574
579
  )
575
580
  }),
576
581
  Effect.orDie
@@ -760,7 +765,7 @@ export const make = Effect.gen(function*() {
760
765
  // A pending interrupt replays only to rebuild compensations, so it must
761
766
  // not run new activities. Finalizers run once `interrupted` is set.
762
767
  if (!instance.interrupted && (yield* interruptPending(instance))) {
763
- const reply = yield* Effect.orDie(requestReply({
768
+ const reply = yield* retryPersistence(requestReply({
764
769
  workflow: instance.workflow,
765
770
  entityType: `Workflow/${instance.workflow._tag}`,
766
771
  executionId: instance.executionId,
@@ -777,7 +782,7 @@ export const make = Effect.gen(function*() {
777
782
  if (!activities.has(activityId)) {
778
783
  activities.set(activityId, { activity, context: services })
779
784
  }
780
- const result = yield* Effect.orDie(
785
+ const result = yield* retryPersistence(
781
786
  client.activity({
782
787
  name: activity.name,
783
788
  attempt,
@@ -917,6 +922,15 @@ const retryPolicy = Schedule.min([
917
922
  Schedule.spaced("1 minute")
918
923
  ])
919
924
 
925
+ // A transient storage failure must not become the workflow result. Requests
926
+ // are saved under a primary key, so a retry after a lost acknowledgement is
927
+ // deduplicated instead of running the activity again.
928
+ const retryPersistence = <A, E extends { readonly _tag: string }, R>(effect: Effect.Effect<A, E, R>) =>
929
+ effect.pipe(
930
+ Effect.retry({ schedule: retryPolicy, while: (e) => e._tag === "PersistenceError" }),
931
+ Effect.orDie
932
+ )
933
+
920
934
  // A cluster abandonment means this owner can no longer complete the effect, so
921
935
  // retrying it would only wait on a retired run. Re-raise it as an annotated
922
936
  // interrupt, so the activation can unwind and its shard can be released.
@@ -220,7 +220,7 @@ export class Chunk<R extends Rpc.Any> extends Data.TaggedClass("Chunk")<{
220
220
  * @stability unstable
221
221
  * @since 4.0.0
222
222
  */
223
- static readonly Any = Schema.declare((u): u is Chunk<never> => isReply(u) && u._tag === "Chunk")
223
+ static readonly Any = Schema.declare((u): u is Chunk<Rpc.Any> => isReply(u) && u._tag === "Chunk")
224
224
 
225
225
  /**
226
226
  * Transformation between encoded chunk records and `Chunk` instances.
@@ -19,7 +19,7 @@ import type { Input } from "../Duration.ts"
19
19
  import * as Duration from "../Duration.ts"
20
20
  import * as Effect from "../Effect.ts"
21
21
  import * as Equal from "../Equal.ts"
22
- import type * as Exit from "../Exit.ts"
22
+ import * as Exit from "../Exit.ts"
23
23
  import * as Fiber from "../Fiber.ts"
24
24
  import * as FiberMap from "../FiberMap.ts"
25
25
  import { constant, flow } from "../Function.ts"
@@ -281,6 +281,9 @@ const make = Effect.gen(function*() {
281
281
  // shards still held by this runner while their entities stop and their locks
282
282
  // are released
283
283
  const releasingShards = MutableHashSet.empty<ShardId>()
284
+ // runners that joined after the first assignment, kept out of the hash rings
285
+ // until the healthy set settles (see `runnerJoinDebounce`)
286
+ const pendingRunners = MutableHashSet.empty<Runner>()
284
287
  // The releasing gauge reports to the metric registry and attributes the
285
288
  // layer was built with.
286
289
  const updateReleasingShardsGauge = () =>
@@ -611,6 +614,13 @@ const make = Effect.gen(function*() {
611
614
  continue
612
615
  }
613
616
 
617
+ // While joins are pending the assignments are about to change, so take
618
+ // no new shards; otherwise a shard released for a joining runner could
619
+ // be taken here and handed off again. Publishing reopens the latch.
620
+ if (MutableHashSet.size(pendingRunners) > 0) {
621
+ continue
622
+ }
623
+
614
624
  // if a shard has been assigned to this runner, we acquire it
615
625
  const unacquiredShards = MutableHashSet.empty<ShardId>()
616
626
  for (const shardId of selfShards) {
@@ -635,13 +645,16 @@ const make = Effect.gen(function*() {
635
645
  Effect.ignore,
636
646
  Effect.timeoutOption(shardLockInterval)
637
647
  )
638
- // A forced release can start while `acquire` is in flight, so re-check
639
- // it here as well as before acquiring.
648
+ // A forced release or a pending join can begin while `acquire` is in
649
+ // flight, so re-check both. Shards locked meanwhile are released
650
+ // without running anything on them.
640
651
  const forcedReleasePending = forcedShardReleasePending()
652
+ const joinsPending = MutableHashSet.size(pendingRunners) > 0
641
653
  for (const shardId of acquired) {
642
654
  if (
643
655
  !shardLocksHealthyLatch.isOpen() ||
644
656
  forcedReleasePending ||
657
+ joinsPending ||
645
658
  MutableHashSet.has(releasingShards, shardId) ||
646
659
  !MutableHashSet.has(selfShards, shardId)
647
660
  ) {
@@ -1415,10 +1428,33 @@ const make = Effect.gen(function*() {
1415
1428
  ClusterMetrics.runnersHealthy.updateUnsafe(BigInt(1), Context.empty())
1416
1429
  }
1417
1430
 
1431
+ // Kept outside the loop so a restart after a storage failure does not drop
1432
+ // this state and publish pending joins early.
1433
+ const hashRings = new Map<string, HashRing.HashRing<RunnerAddress>>()
1434
+ let nextRunners = MutableHashMap.empty<Runner, boolean>()
1435
+ const healthyRunners = MutableHashSet.empty<Runner>()
1436
+ const joinDebounce = Duration.toMillis(Duration.fromInputUnsafe(config.runnerJoinDebounce))
1437
+ // when the first pending join and the latest pending change were observed
1438
+ let pendingSince = 0
1439
+ let pendingChangedAt = 0
1440
+ // the initial assignment never waits, even if this runner ends up with no shards
1441
+ let assignmentsPublished = false
1442
+ // stays set until the assignments are actually recomputed
1443
+ let changed = false
1444
+
1445
+ const addToRings = (runner: Runner) => {
1446
+ for (let i = 0; i < runner.groups.length; i++) {
1447
+ const group = runner.groups[i]
1448
+ let ring = hashRings.get(group)
1449
+ if (!ring) {
1450
+ ring = HashRing.make()
1451
+ hashRings.set(group, ring)
1452
+ }
1453
+ HashRing.add(ring, runner.address, { weight: runner.weight })
1454
+ }
1455
+ }
1456
+
1418
1457
  yield* Effect.gen(function*() {
1419
- const hashRings = new Map<string, HashRing.HashRing<RunnerAddress>>()
1420
- let nextRunners = MutableHashMap.empty<Runner, boolean>()
1421
- const healthyRunners = MutableHashSet.empty<Runner>()
1422
1458
  const withTimeout = Effect.timeout(Duration.seconds(5))
1423
1459
 
1424
1460
  while (true) {
@@ -1433,7 +1469,7 @@ const make = Effect.gen(function*() {
1433
1469
  }
1434
1470
 
1435
1471
  const runners = yield* withTimeout(runnerStorage.getRunners)
1436
- let changed = false
1472
+ const now = clock.currentTimeMillisUnsafe()
1437
1473
  for (let i = 0; i < runners.length; i++) {
1438
1474
  const [runner, healthy] = runners[i]
1439
1475
  MutableHashMap.set(nextRunners, runner, healthy)
@@ -1445,31 +1481,55 @@ const make = Effect.gen(function*() {
1445
1481
  }
1446
1482
  continue
1447
1483
  }
1448
- changed = true
1449
1484
  MutableHashSet.add(healthyRunners, runner)
1450
1485
  MutableHashMap.remove(allRunners, runner)
1451
- for (let j = 0; j < runner.groups.length; j++) {
1452
- const group = runner.groups[j]
1453
- let ring = hashRings.get(group)
1454
- if (!ring) {
1455
- ring = HashRing.make()
1456
- hashRings.set(group, ring)
1486
+ if (joinDebounce > 0 && assignmentsPublished) {
1487
+ if (MutableHashSet.size(pendingRunners) === 0) {
1488
+ pendingSince = now
1457
1489
  }
1458
- HashRing.add(ring, runner.address, { weight: runner.weight })
1490
+ pendingChangedAt = now
1491
+ MutableHashSet.add(pendingRunners, runner)
1492
+ continue
1459
1493
  }
1494
+ changed = true
1495
+ addToRings(runner)
1460
1496
  }
1461
1497
 
1462
1498
  // Remove runners that are no longer present or healthy
1463
1499
  MutableHashMap.forEach(allRunners, (_, runner) => {
1464
- changed = true
1465
1500
  MutableHashMap.remove(allRunners, runner)
1466
1501
  MutableHashSet.remove(healthyRunners, runner)
1467
1502
  runFork(runnersService.onRunnerUnavailable(runner.address))
1503
+ // A pending runner owns no shards, so its departure only restarts the
1504
+ // quiet period instead of publishing the other joins mid-burst.
1505
+ if (MutableHashSet.has(pendingRunners, runner)) {
1506
+ MutableHashSet.remove(pendingRunners, runner)
1507
+ pendingChangedAt = now
1508
+ if (MutableHashSet.size(pendingRunners) === 0) {
1509
+ // let the acquisition loop take the shards it was holding off on
1510
+ activeShardsLatch.openUnsafe()
1511
+ }
1512
+ return
1513
+ }
1514
+ changed = true
1468
1515
  for (let i = 0; i < runner.groups.length; i++) {
1469
1516
  HashRing.remove(hashRings.get(runner.groups[i])!, runner.address)
1470
1517
  }
1471
1518
  })
1472
1519
 
1520
+ // Publish pending joins once the healthy set has settled, the cap is
1521
+ // reached, or the assignments are recomputed anyway.
1522
+ if (
1523
+ MutableHashSet.size(pendingRunners) > 0 &&
1524
+ (changed || now - pendingChangedAt >= joinDebounce || now - pendingSince >= joinDebounce * 4)
1525
+ ) {
1526
+ changed = true
1527
+ for (const runner of pendingRunners) {
1528
+ addToRings(runner)
1529
+ }
1530
+ MutableHashSet.clear(pendingRunners)
1531
+ }
1532
+
1473
1533
  // swap allRunners and nextRunners
1474
1534
  const prevRunners = allRunners
1475
1535
  allRunners = nextRunners
@@ -1483,6 +1543,8 @@ const make = Effect.gen(function*() {
1483
1543
 
1484
1544
  // Recompute shard assignments if the set of healthy runners has changed.
1485
1545
  if (changed) {
1546
+ changed = false
1547
+ assignmentsPublished = true
1486
1548
  MutableHashSet.clear(selfShards)
1487
1549
  hashRings.forEach((ring, group) => {
1488
1550
  const newAssignments = HashRing.getShards(ring, config.shardsPerGroup)
@@ -1619,18 +1681,26 @@ const make = Effect.gen(function*() {
1619
1681
  envelope as any
1620
1682
  )
1621
1683
  })
1622
- if (!options.discard) {
1623
- const entry: ClientRequestEntry = {
1624
- rpc: rpc as any,
1625
- context: fiber.context,
1626
- message
1627
- }
1628
- clientRequests.set(id, entry)
1629
- respond = makeClientRespond(entry, client.write)
1630
- } else {
1684
+ if (options.message.discard === true) {
1631
1685
  respond = clientRespondDiscard
1686
+ // a discarded call is acknowledged once its message is sent
1687
+ const requestId = options.message.id
1688
+ return Effect.flatMap(
1689
+ sendOutgoing(message, true),
1690
+ () => client.write({ _tag: "Exit", clientId: 0, requestId, exit: Exit.void as any })
1691
+ )
1692
+ }
1693
+ const entry: ClientRequestEntry = {
1694
+ rpc: rpc as any,
1695
+ context: fiber.context,
1696
+ message
1632
1697
  }
1633
- return sendOutgoing(message, options.discard)
1698
+ clientRequests.set(id, entry)
1699
+ respond = makeClientRespond(entry, client.write)
1700
+ // A failed send leaves no reply or interrupt to release the entry.
1701
+ // Only drop the local bookkeeping, as the request may have been
1702
+ // persisted.
1703
+ return Effect.tapError(sendOutgoing(message, false), () => Effect.sync(() => clientRequests.delete(id)))
1634
1704
  }
1635
1705
  case "Ack": {
1636
1706
  const requestId = Snowflake.Snowflake(options.message.requestId)
@@ -82,10 +82,12 @@ export class ShardingConfig extends Context.Service<ShardingConfig, {
82
82
  /**
83
83
  * Shard lock expiration duration.
84
84
  *
85
- * With PostgreSQL advisory locks (PostgreSQL 14+), this also bounds how long
86
- * a runner that stops refreshing, for example because its process is frozen,
85
+ * With PostgreSQL (14+) or MySQL advisory locks, this also bounds how long a
86
+ * runner that stops refreshing, for example because its process is frozen,
87
87
  * keeps its shards: the server ends its idle lock session after this
88
- * duration, releasing the locks.
88
+ * duration, releasing the locks. On MySQL it is rounded up to whole
89
+ * seconds. Vitess ignores the MySQL session timeout, so behind Vitess the
90
+ * locks stay held until the runner's connection closes.
89
91
  */
90
92
  readonly shardLockExpiration: Duration.Input
91
93
  /**
@@ -165,6 +167,37 @@ export class ShardingConfig extends Context.Service<ShardingConfig, {
165
167
  * assignments.
166
168
  */
167
169
  readonly refreshAssignmentsInterval: Duration.Input
170
+ /**
171
+ * How long the healthy runners must stay unchanged before runners that
172
+ * joined are added to shard assignments. A burst of joins, such as a
173
+ * scale-up or a deployment with a large surge, is then published as one
174
+ * assignment and each shard is handed off once instead of once per join.
175
+ * In a rolling update that replaces one runner at a time, each departure is
176
+ * still published immediately, so shards still move at every step.
177
+ *
178
+ * Only joins wait. The initial assignment, departures and unhealthy runners
179
+ * are published immediately, together with any pending joins. A pending
180
+ * runner that leaves has no shards to move, so it only restarts the quiet
181
+ * period.
182
+ *
183
+ * While joins are pending, shards keep running where they are, the new
184
+ * runners stay idle and no runner takes shards it does not already hold.
185
+ * Runners publish on their own polls, so a shard released by one runner can
186
+ * stay unlocked until its new owner publishes, usually within two
187
+ * `refreshAssignmentsInterval`s. A runner that does not observe the joins,
188
+ * for example because it cannot read membership, can still take shards from
189
+ * its outdated assignment and hand them off again, as with `0`.
190
+ *
191
+ * Pending joins are published at most four times this duration after the
192
+ * first one, even if runners keep joining. The quiet period is checked once
193
+ * per `refreshAssignmentsInterval`, so the worst case delay is four times
194
+ * this duration plus one interval, and values shorter than the interval
195
+ * behave like a single quiet poll.
196
+ *
197
+ * Defaults to `0`, which publishes every change immediately. Leave it at
198
+ * `0` for scale-ups driven by load, where idle new runners are costly.
199
+ */
200
+ readonly runnerJoinDebounce: Duration.Input
168
201
  /**
169
202
  * The interval to retry a send if EntityNotAssignedToRunner is returned.
170
203
  */
@@ -213,6 +246,7 @@ export const defaults: ShardingConfig["Service"] = {
213
246
  entityReplyPollInterval: Duration.millis(200),
214
247
  sendRetryInterval: Duration.millis(100),
215
248
  refreshAssignmentsInterval: Duration.seconds(3),
249
+ runnerJoinDebounce: Duration.zero,
216
250
  runnerHealthCheckInterval: Duration.minutes(1),
217
251
  simulateRemoteSerialization: true
218
252
  }
@@ -371,6 +405,10 @@ export const config: Config.Config<ShardingConfig["Service"]> = Config.all({
371
405
  Config.withDefault(defaults.refreshAssignmentsInterval)
372
406
  // Config.withDescription("The interval at which to refresh shard assignments.")
373
407
  ),
408
+ runnerJoinDebounce: Config.Duration("runnerJoinDebounce").pipe(
409
+ Config.withDefault(defaults.runnerJoinDebounce)
410
+ // Config.withDescription("How long the healthy runners must stay unchanged before joining runners are assigned shards.")
411
+ ),
374
412
  runnerHealthCheckInterval: Config.Duration("runnerHealthCheckInterval").pipe(
375
413
  Config.withDefault(defaults.runnerHealthCheckInterval)
376
414
  // Config.withDescription("The interval at which to check for unhealthy runners and report them.")
@@ -13,7 +13,7 @@
13
13
  */
14
14
  import * as Layer from "effect/Layer"
15
15
  import type { ConfigError } from "../Config.ts"
16
- import type * as Crypto from "../Crypto.ts"
16
+ import type * as Digest from "../crypto/Digest.ts"
17
17
  import type * as SqlClient from "../sql/SqlClient.ts"
18
18
  import type * as MessageStorage from "./MessageStorage.ts"
19
19
  import * as RunnerHealth from "./RunnerHealth.ts"
@@ -44,7 +44,7 @@ import * as SqlRunnerStorage from "./SqlRunnerStorage.ts"
44
44
  * **Gotchas**
45
45
  *
46
46
  * - Even when `runnerStorage` is `"memory"`, message storage remains
47
- * SQL-backed, so callers must still provide `SqlClient` and `Crypto.Crypto`
47
+ * SQL-backed, so callers must still provide `SqlClient` and `Digest.Digest`
48
48
  * (used to hash over-length message deduplication keys).
49
49
  * - Runner communication and runner health are no-op services, so this layer is
50
50
  * for single-process use rather than multi-runner coordination.
@@ -66,7 +66,7 @@ export const layer = (options?: {
66
66
  | Runners.Runners
67
67
  | MessageStorage.MessageStorage,
68
68
  ConfigError,
69
- SqlClient.SqlClient | Crypto.Crypto
69
+ SqlClient.SqlClient | Digest.Digest
70
70
  > =>
71
71
  Sharding.layer.pipe(
72
72
  Layer.provideMerge(Runners.layerNoop),