effect 4.0.5 → 4.0.6

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 (985) hide show
  1. package/ai-docs/package.json +1 -1
  2. package/ai-docs/src/06_schedule/10_schedules.ts +5 -4
  3. package/ai-docs/tsconfig.json +3 -1
  4. package/dist/Array.d.ts +117 -52
  5. package/dist/Array.d.ts.map +1 -1
  6. package/dist/Array.js +41 -20
  7. package/dist/Array.js.map +1 -1
  8. package/dist/Bytes.d.ts +79 -0
  9. package/dist/Bytes.d.ts.map +1 -0
  10. package/dist/Bytes.js +109 -0
  11. package/dist/Bytes.js.map +1 -0
  12. package/dist/Channel.d.ts +181 -13
  13. package/dist/Channel.d.ts.map +1 -1
  14. package/dist/Channel.js +125 -30
  15. package/dist/Channel.js.map +1 -1
  16. package/dist/ChannelSchema.d.ts.map +1 -1
  17. package/dist/ChannelSchema.js.map +1 -1
  18. package/dist/Chunk.d.ts +39 -21
  19. package/dist/Chunk.d.ts.map +1 -1
  20. package/dist/Chunk.js +26 -17
  21. package/dist/Chunk.js.map +1 -1
  22. package/dist/Config.d.ts.map +1 -1
  23. package/dist/Config.js +8 -3
  24. package/dist/Config.js.map +1 -1
  25. package/dist/ConfigProvider.d.ts.map +1 -1
  26. package/dist/ConfigProvider.js +2 -1
  27. package/dist/ConfigProvider.js.map +1 -1
  28. package/dist/Cron.d.ts +2 -2
  29. package/dist/Cron.d.ts.map +1 -1
  30. package/dist/Cron.js +6 -3
  31. package/dist/Cron.js.map +1 -1
  32. package/dist/Duration.d.ts.map +1 -1
  33. package/dist/Duration.js +56 -16
  34. package/dist/Duration.js.map +1 -1
  35. package/dist/Effect.d.ts +487 -163
  36. package/dist/Effect.d.ts.map +1 -1
  37. package/dist/Effect.js +203 -37
  38. package/dist/Effect.js.map +1 -1
  39. package/dist/Equivalence.d.ts +2 -1
  40. package/dist/Equivalence.d.ts.map +1 -1
  41. package/dist/Equivalence.js +12 -8
  42. package/dist/Equivalence.js.map +1 -1
  43. package/dist/Exit.d.ts +24 -9
  44. package/dist/Exit.d.ts.map +1 -1
  45. package/dist/Exit.js +8 -3
  46. package/dist/Exit.js.map +1 -1
  47. package/dist/FiberHandle.d.ts +2 -0
  48. package/dist/FiberHandle.d.ts.map +1 -1
  49. package/dist/FiberHandle.js +9 -4
  50. package/dist/FiberHandle.js.map +1 -1
  51. package/dist/FiberMap.d.ts +2 -0
  52. package/dist/FiberMap.d.ts.map +1 -1
  53. package/dist/FiberMap.js +5 -2
  54. package/dist/FiberMap.js.map +1 -1
  55. package/dist/FileSystem.d.ts +5 -0
  56. package/dist/FileSystem.d.ts.map +1 -1
  57. package/dist/FileSystem.js +3 -0
  58. package/dist/FileSystem.js.map +1 -1
  59. package/dist/Graph.d.ts.map +1 -1
  60. package/dist/Graph.js.map +1 -1
  61. package/dist/HashSet.d.ts.map +1 -1
  62. package/dist/HashSet.js.map +1 -1
  63. package/dist/Iterable.d.ts.map +1 -1
  64. package/dist/Iterable.js +18 -17
  65. package/dist/Iterable.js.map +1 -1
  66. package/dist/JsonSchema.d.ts +9 -3
  67. package/dist/JsonSchema.d.ts.map +1 -1
  68. package/dist/JsonSchema.js +19 -3
  69. package/dist/JsonSchema.js.map +1 -1
  70. package/dist/Layer.d.ts.map +1 -1
  71. package/dist/Layer.js +2 -2
  72. package/dist/Layer.js.map +1 -1
  73. package/dist/ManagedRuntime.d.ts +19 -1
  74. package/dist/ManagedRuntime.d.ts.map +1 -1
  75. package/dist/ManagedRuntime.js +62 -6
  76. package/dist/ManagedRuntime.js.map +1 -1
  77. package/dist/Metric.d.ts +132 -0
  78. package/dist/Metric.d.ts.map +1 -1
  79. package/dist/Metric.js +197 -25
  80. package/dist/Metric.js.map +1 -1
  81. package/dist/MutableHashMap.d.ts.map +1 -1
  82. package/dist/MutableHashMap.js.map +1 -1
  83. package/dist/Number.js +2 -2
  84. package/dist/Number.js.map +1 -1
  85. package/dist/Optic.d.ts.map +1 -1
  86. package/dist/Optic.js.map +1 -1
  87. package/dist/Path.d.ts.map +1 -1
  88. package/dist/Path.js +8 -1
  89. package/dist/Path.js.map +1 -1
  90. package/dist/PubSub.d.ts.map +1 -1
  91. package/dist/PubSub.js +12 -7
  92. package/dist/PubSub.js.map +1 -1
  93. package/dist/Queue.d.ts +4 -1
  94. package/dist/Queue.d.ts.map +1 -1
  95. package/dist/Queue.js +4 -1
  96. package/dist/Queue.js.map +1 -1
  97. package/dist/Random.d.ts.map +1 -1
  98. package/dist/Random.js +1 -1
  99. package/dist/Random.js.map +1 -1
  100. package/dist/RcMap.d.ts +12 -7
  101. package/dist/RcMap.d.ts.map +1 -1
  102. package/dist/RcMap.js +9 -6
  103. package/dist/RcMap.js.map +1 -1
  104. package/dist/Record.d.ts +51 -0
  105. package/dist/Record.d.ts.map +1 -1
  106. package/dist/Record.js +17 -0
  107. package/dist/Record.js.map +1 -1
  108. package/dist/Ref.d.ts.map +1 -1
  109. package/dist/Ref.js.map +1 -1
  110. package/dist/References.d.ts +5 -4
  111. package/dist/References.d.ts.map +1 -1
  112. package/dist/References.js +5 -4
  113. package/dist/References.js.map +1 -1
  114. package/dist/RequestResolver.d.ts +31 -1
  115. package/dist/RequestResolver.d.ts.map +1 -1
  116. package/dist/RequestResolver.js +39 -4
  117. package/dist/RequestResolver.js.map +1 -1
  118. package/dist/Resource.js +1 -1
  119. package/dist/Resource.js.map +1 -1
  120. package/dist/Runtime.d.ts +3 -3
  121. package/dist/Runtime.d.ts.map +1 -1
  122. package/dist/Runtime.js +18 -15
  123. package/dist/Runtime.js.map +1 -1
  124. package/dist/Schedule.d.ts.map +1 -1
  125. package/dist/Schedule.js.map +1 -1
  126. package/dist/Schema.d.ts +384 -332
  127. package/dist/Schema.d.ts.map +1 -1
  128. package/dist/Schema.js +333 -19
  129. package/dist/Schema.js.map +1 -1
  130. package/dist/SchemaAST.d.ts +5 -5
  131. package/dist/SchemaAST.d.ts.map +1 -1
  132. package/dist/SchemaAST.js +24 -8
  133. package/dist/SchemaAST.js.map +1 -1
  134. package/dist/SchemaGetter.d.ts +8 -3
  135. package/dist/SchemaGetter.d.ts.map +1 -1
  136. package/dist/SchemaGetter.js +15 -5
  137. package/dist/SchemaGetter.js.map +1 -1
  138. package/dist/SchemaIssue.d.ts +4 -4
  139. package/dist/SchemaIssue.d.ts.map +1 -1
  140. package/dist/SchemaIssue.js +29 -51
  141. package/dist/SchemaIssue.js.map +1 -1
  142. package/dist/SchemaRepresentation.d.ts +56 -1
  143. package/dist/SchemaRepresentation.d.ts.map +1 -1
  144. package/dist/SchemaRepresentation.js +18 -0
  145. package/dist/SchemaRepresentation.js.map +1 -1
  146. package/dist/SchemaTransformation.d.ts +1 -1
  147. package/dist/SchemaTransformation.js +1 -1
  148. package/dist/Scope.d.ts +12 -2
  149. package/dist/Scope.d.ts.map +1 -1
  150. package/dist/Scope.js +5 -0
  151. package/dist/Scope.js.map +1 -1
  152. package/dist/ScopedCache.d.ts +10 -7
  153. package/dist/ScopedCache.d.ts.map +1 -1
  154. package/dist/ScopedCache.js +9 -5
  155. package/dist/ScopedCache.js.map +1 -1
  156. package/dist/SemVer.d.ts +1196 -0
  157. package/dist/SemVer.d.ts.map +1 -0
  158. package/dist/SemVer.js +756 -0
  159. package/dist/SemVer.js.map +1 -0
  160. package/dist/SemVerRange.d.ts +559 -0
  161. package/dist/SemVerRange.d.ts.map +1 -0
  162. package/dist/SemVerRange.js +551 -0
  163. package/dist/SemVerRange.js.map +1 -0
  164. package/dist/Sink.d.ts.map +1 -1
  165. package/dist/Sink.js +6 -2
  166. package/dist/Sink.js.map +1 -1
  167. package/dist/Stream.d.ts +235 -8
  168. package/dist/Stream.d.ts.map +1 -1
  169. package/dist/Stream.js +145 -60
  170. package/dist/Stream.js.map +1 -1
  171. package/dist/String.d.ts +4 -2
  172. package/dist/String.d.ts.map +1 -1
  173. package/dist/String.js +8 -6
  174. package/dist/String.js.map +1 -1
  175. package/dist/TextDiff.d.ts +399 -0
  176. package/dist/TextDiff.d.ts.map +1 -0
  177. package/dist/TextDiff.js +634 -0
  178. package/dist/TextDiff.js.map +1 -0
  179. package/dist/TxHashMap.d.ts.map +1 -1
  180. package/dist/TxHashMap.js.map +1 -1
  181. package/dist/TxHashSet.d.ts.map +1 -1
  182. package/dist/TxHashSet.js.map +1 -1
  183. package/dist/ai/AiError.d.ts +68 -4
  184. package/dist/ai/AiError.d.ts.map +1 -1
  185. package/dist/ai/AiError.js +50 -2
  186. package/dist/ai/AiError.js.map +1 -1
  187. package/dist/ai/Chat.d.ts +1 -2
  188. package/dist/ai/Chat.d.ts.map +1 -1
  189. package/dist/ai/Chat.js +6 -3
  190. package/dist/ai/Chat.js.map +1 -1
  191. package/dist/ai/Decision.d.ts +46 -1
  192. package/dist/ai/Decision.d.ts.map +1 -1
  193. package/dist/ai/Decision.js.map +1 -1
  194. package/dist/ai/DecisionModel.d.ts +129 -11
  195. package/dist/ai/DecisionModel.d.ts.map +1 -1
  196. package/dist/ai/DecisionModel.js +182 -94
  197. package/dist/ai/DecisionModel.js.map +1 -1
  198. package/dist/ai/EmbeddingModel.d.ts +10 -0
  199. package/dist/ai/EmbeddingModel.d.ts.map +1 -1
  200. package/dist/ai/EmbeddingModel.js +21 -7
  201. package/dist/ai/EmbeddingModel.js.map +1 -1
  202. package/dist/ai/McpClient.d.ts +289 -0
  203. package/dist/ai/McpClient.d.ts.map +1 -0
  204. package/dist/ai/McpClient.js +819 -0
  205. package/dist/ai/McpClient.js.map +1 -0
  206. package/dist/ai/McpClientError.d.ts +254 -0
  207. package/dist/ai/McpClientError.d.ts.map +1 -0
  208. package/dist/ai/McpClientError.js +260 -0
  209. package/dist/ai/McpClientError.js.map +1 -0
  210. package/dist/ai/McpProtocol.d.ts +2 -2
  211. package/dist/ai/McpProtocol.d.ts.map +1 -1
  212. package/dist/ai/McpSchema.d.ts +368 -235
  213. package/dist/ai/McpSchema.d.ts.map +1 -1
  214. package/dist/ai/McpSchema.js +94 -24
  215. package/dist/ai/McpSchema.js.map +1 -1
  216. package/dist/ai/McpServer.d.ts.map +1 -1
  217. package/dist/ai/McpServer.js +25 -22
  218. package/dist/ai/McpServer.js.map +1 -1
  219. package/dist/ai/Prompt.d.ts +22 -20
  220. package/dist/ai/Prompt.d.ts.map +1 -1
  221. package/dist/ai/Prompt.js +23 -1
  222. package/dist/ai/Prompt.js.map +1 -1
  223. package/dist/ai/Response.d.ts +147 -3
  224. package/dist/ai/Response.d.ts.map +1 -1
  225. package/dist/ai/Response.js +35 -37
  226. package/dist/ai/Response.js.map +1 -1
  227. package/dist/ai/Tool.d.ts +12 -4
  228. package/dist/ai/Tool.d.ts.map +1 -1
  229. package/dist/ai/Tool.js.map +1 -1
  230. package/dist/ai/Toolkit.d.ts +48 -1
  231. package/dist/ai/Toolkit.d.ts.map +1 -1
  232. package/dist/ai/Toolkit.js +65 -12
  233. package/dist/ai/Toolkit.js.map +1 -1
  234. package/dist/ai/index.d.ts +10 -0
  235. package/dist/ai/index.d.ts.map +1 -1
  236. package/dist/ai/index.js +10 -0
  237. package/dist/ai/index.js.map +1 -1
  238. package/dist/ai/internal/mcpCore.js.map +1 -1
  239. package/dist/ai/internal/mcpProtocol/v2024_11_05.js +1 -1
  240. package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
  241. package/dist/ai/internal/mcpProtocol/v2025_03_26.js +1 -1
  242. package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
  243. package/dist/ai/internal/mcpProtocol/v2025_06_18.js +2 -2
  244. package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
  245. package/dist/ai/internal/mcpProtocol/v2025_11_25.js +2 -2
  246. package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
  247. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +4 -7
  248. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  249. package/dist/ai/internal/mcpProtocol.js +16 -2
  250. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  251. package/dist/ai/internal/mcpRuntime.js +3 -4
  252. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  253. package/dist/ai/internal/mcpSchema/v2024_11_05.js +19 -13
  254. package/dist/ai/internal/mcpSchema/v2024_11_05.js.map +1 -1
  255. package/dist/ai/internal/mcpSchema/v2025_03_26.js +3 -2
  256. package/dist/ai/internal/mcpSchema/v2025_03_26.js.map +1 -1
  257. package/dist/ai/internal/mcpSchema/v2025_06_18.js +7 -7
  258. package/dist/ai/internal/mcpSchema/v2025_06_18.js.map +1 -1
  259. package/dist/ai/internal/mcpSchema/v2025_11_25.js +8 -8
  260. package/dist/ai/internal/mcpSchema/v2025_11_25.js.map +1 -1
  261. package/dist/ai/internal/mcpSchema/v2026_07_28.js +43 -42
  262. package/dist/ai/internal/mcpSchema/v2026_07_28.js.map +1 -1
  263. package/dist/cli/CliError.d.ts +42 -2
  264. package/dist/cli/CliError.d.ts.map +1 -1
  265. package/dist/cli/CliError.js +44 -5
  266. package/dist/cli/CliError.js.map +1 -1
  267. package/dist/cli/Command.d.ts +286 -2
  268. package/dist/cli/Command.d.ts.map +1 -1
  269. package/dist/cli/Command.js +107 -6
  270. package/dist/cli/Command.js.map +1 -1
  271. package/dist/cli/Completions.d.ts +5 -0
  272. package/dist/cli/Completions.d.ts.map +1 -1
  273. package/dist/cli/Completions.js.map +1 -1
  274. package/dist/cli/Flag.d.ts +115 -0
  275. package/dist/cli/Flag.d.ts.map +1 -1
  276. package/dist/cli/Flag.js +56 -0
  277. package/dist/cli/Flag.js.map +1 -1
  278. package/dist/cli/GlobalFlag.d.ts.map +1 -1
  279. package/dist/cli/GlobalFlag.js +3 -3
  280. package/dist/cli/GlobalFlag.js.map +1 -1
  281. package/dist/cli/Param.d.ts +107 -0
  282. package/dist/cli/Param.d.ts.map +1 -1
  283. package/dist/cli/Param.js +56 -0
  284. package/dist/cli/Param.js.map +1 -1
  285. package/dist/cli/TerminalCapabilities.d.ts +84 -0
  286. package/dist/cli/TerminalCapabilities.d.ts.map +1 -0
  287. package/dist/cli/TerminalCapabilities.js +122 -0
  288. package/dist/cli/TerminalCapabilities.js.map +1 -0
  289. package/dist/cli/index.d.ts +5 -0
  290. package/dist/cli/index.d.ts.map +1 -1
  291. package/dist/cli/index.js +5 -0
  292. package/dist/cli/index.js.map +1 -1
  293. package/dist/cli/internal/command.d.ts +2 -1
  294. package/dist/cli/internal/command.d.ts.map +1 -1
  295. package/dist/cli/internal/command.js +5 -2
  296. package/dist/cli/internal/command.js.map +1 -1
  297. package/dist/cli/internal/completions/bash.js +4 -3
  298. package/dist/cli/internal/completions/bash.js.map +1 -1
  299. package/dist/cli/internal/completions/descriptor.js +9 -1
  300. package/dist/cli/internal/completions/descriptor.js.map +1 -1
  301. package/dist/cli/internal/completions/fish.js +10 -8
  302. package/dist/cli/internal/completions/fish.js.map +1 -1
  303. package/dist/cli/internal/completions/powershell.js +18 -9
  304. package/dist/cli/internal/completions/powershell.js.map +1 -1
  305. package/dist/cli/internal/completions/zsh.js +8 -5
  306. package/dist/cli/internal/completions/zsh.js.map +1 -1
  307. package/dist/cli/internal/formatter.d.ts +2 -0
  308. package/dist/cli/internal/formatter.d.ts.map +1 -0
  309. package/dist/cli/internal/formatter.js +15 -0
  310. package/dist/cli/internal/formatter.js.map +1 -0
  311. package/dist/cli/internal/lexer.js +24 -10
  312. package/dist/cli/internal/lexer.js.map +1 -1
  313. package/dist/cli/internal/parser.js +24 -12
  314. package/dist/cli/internal/parser.js.map +1 -1
  315. package/dist/cluster/ClusterCron.d.ts +29 -1
  316. package/dist/cluster/ClusterCron.d.ts.map +1 -1
  317. package/dist/cluster/ClusterCron.js +64 -32
  318. package/dist/cluster/ClusterCron.js.map +1 -1
  319. package/dist/cluster/ClusterMetrics.d.ts +143 -7
  320. package/dist/cluster/ClusterMetrics.d.ts.map +1 -1
  321. package/dist/cluster/ClusterMetrics.js +151 -7
  322. package/dist/cluster/ClusterMetrics.js.map +1 -1
  323. package/dist/cluster/ClusterWorkflowEngine.d.ts +1 -1
  324. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  325. package/dist/cluster/ClusterWorkflowEngine.js +37 -11
  326. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  327. package/dist/cluster/Entity.d.ts +2 -0
  328. package/dist/cluster/Entity.d.ts.map +1 -1
  329. package/dist/cluster/Entity.js.map +1 -1
  330. package/dist/cluster/MessageStorage.d.ts +21 -0
  331. package/dist/cluster/MessageStorage.d.ts.map +1 -1
  332. package/dist/cluster/MessageStorage.js.map +1 -1
  333. package/dist/cluster/Runners.d.ts.map +1 -1
  334. package/dist/cluster/Runners.js +54 -15
  335. package/dist/cluster/Runners.js.map +1 -1
  336. package/dist/cluster/Sharding.d.ts +1 -0
  337. package/dist/cluster/Sharding.d.ts.map +1 -1
  338. package/dist/cluster/Sharding.js +95 -32
  339. package/dist/cluster/Sharding.js.map +1 -1
  340. package/dist/cluster/ShardingConfig.d.ts +20 -0
  341. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  342. package/dist/cluster/ShardingConfig.js +4 -0
  343. package/dist/cluster/ShardingConfig.js.map +1 -1
  344. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  345. package/dist/cluster/SqlMessageStorage.js +40 -50
  346. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  347. package/dist/cluster/SqlRunnerStorage.d.ts +2 -2
  348. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  349. package/dist/cluster/SqlRunnerStorage.js +10 -4
  350. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  351. package/dist/cluster/internal/entityManager.js +65 -8
  352. package/dist/cluster/internal/entityManager.js.map +1 -1
  353. package/dist/devtools/DevTools.d.ts +3 -2
  354. package/dist/devtools/DevTools.d.ts.map +1 -1
  355. package/dist/devtools/DevTools.js +3 -2
  356. package/dist/devtools/DevTools.js.map +1 -1
  357. package/dist/devtools/DevToolsClient.d.ts +11 -0
  358. package/dist/devtools/DevToolsClient.d.ts.map +1 -1
  359. package/dist/devtools/DevToolsClient.js +31 -4
  360. package/dist/devtools/DevToolsClient.js.map +1 -1
  361. package/dist/encoding/Base64Url.d.ts +29 -0
  362. package/dist/encoding/Base64Url.d.ts.map +1 -1
  363. package/dist/encoding/Base64Url.js +29 -0
  364. package/dist/encoding/Base64Url.js.map +1 -1
  365. package/dist/encoding/Ini.d.ts.map +1 -1
  366. package/dist/encoding/Ini.js +3 -0
  367. package/dist/encoding/Ini.js.map +1 -1
  368. package/dist/encoding/JsonArray.d.ts +270 -0
  369. package/dist/encoding/JsonArray.d.ts.map +1 -0
  370. package/dist/encoding/JsonArray.js +691 -0
  371. package/dist/encoding/JsonArray.js.map +1 -0
  372. package/dist/encoding/Ndjson.d.ts +43 -4
  373. package/dist/encoding/Ndjson.d.ts.map +1 -1
  374. package/dist/encoding/Ndjson.js +169 -18
  375. package/dist/encoding/Ndjson.js.map +1 -1
  376. package/dist/encoding/SchemaBinary.d.ts +9 -1
  377. package/dist/encoding/SchemaBinary.d.ts.map +1 -1
  378. package/dist/encoding/SchemaBinary.js +12 -19
  379. package/dist/encoding/SchemaBinary.js.map +1 -1
  380. package/dist/encoding/Tar.d.ts +309 -0
  381. package/dist/encoding/Tar.d.ts.map +1 -0
  382. package/dist/encoding/Tar.js +1182 -0
  383. package/dist/encoding/Tar.js.map +1 -0
  384. package/dist/encoding/Toml.js +3 -3
  385. package/dist/encoding/Toml.js.map +1 -1
  386. package/dist/encoding/Xml.d.ts +464 -0
  387. package/dist/encoding/Xml.d.ts.map +1 -0
  388. package/dist/encoding/Xml.js +1619 -0
  389. package/dist/encoding/Xml.js.map +1 -0
  390. package/dist/encoding/Yaml.d.ts +6 -2
  391. package/dist/encoding/Yaml.d.ts.map +1 -1
  392. package/dist/encoding/Yaml.js +97 -34
  393. package/dist/encoding/Yaml.js.map +1 -1
  394. package/dist/encoding/Zip.d.ts +413 -0
  395. package/dist/encoding/Zip.d.ts.map +1 -0
  396. package/dist/encoding/Zip.js +1255 -0
  397. package/dist/encoding/Zip.js.map +1 -0
  398. package/dist/encoding/index.d.ts +20 -0
  399. package/dist/encoding/index.d.ts.map +1 -1
  400. package/dist/encoding/index.js +20 -0
  401. package/dist/encoding/index.js.map +1 -1
  402. package/dist/eventlog/EventJournal.d.ts +90 -5
  403. package/dist/eventlog/EventJournal.d.ts.map +1 -1
  404. package/dist/eventlog/EventJournal.js +488 -228
  405. package/dist/eventlog/EventJournal.js.map +1 -1
  406. package/dist/eventlog/EventLog.d.ts +180 -12
  407. package/dist/eventlog/EventLog.d.ts.map +1 -1
  408. package/dist/eventlog/EventLog.js +394 -146
  409. package/dist/eventlog/EventLog.js.map +1 -1
  410. package/dist/eventlog/EventLogEncryption.d.ts +36 -30
  411. package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
  412. package/dist/eventlog/EventLogEncryption.js +97 -38
  413. package/dist/eventlog/EventLogEncryption.js.map +1 -1
  414. package/dist/eventlog/EventLogMessage.d.ts +74 -34
  415. package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
  416. package/dist/eventlog/EventLogMessage.js +45 -11
  417. package/dist/eventlog/EventLogMessage.js.map +1 -1
  418. package/dist/eventlog/EventLogRemote.d.ts +45 -8
  419. package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
  420. package/dist/eventlog/EventLogRemote.js +51 -14
  421. package/dist/eventlog/EventLogRemote.js.map +1 -1
  422. package/dist/eventlog/EventLogServer.d.ts +46 -3
  423. package/dist/eventlog/EventLogServer.d.ts.map +1 -1
  424. package/dist/eventlog/EventLogServer.js +119 -19
  425. package/dist/eventlog/EventLogServer.js.map +1 -1
  426. package/dist/eventlog/EventLogServerEncrypted.d.ts +23 -33
  427. package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  428. package/dist/eventlog/EventLogServerEncrypted.js +97 -70
  429. package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
  430. package/dist/eventlog/EventLogServerUnencrypted.d.ts +39 -5
  431. package/dist/eventlog/EventLogServerUnencrypted.d.ts.map +1 -1
  432. package/dist/eventlog/EventLogServerUnencrypted.js +151 -69
  433. package/dist/eventlog/EventLogServerUnencrypted.js.map +1 -1
  434. package/dist/eventlog/EventRow.d.ts +288 -0
  435. package/dist/eventlog/EventRow.d.ts.map +1 -0
  436. package/dist/eventlog/EventRow.js +435 -0
  437. package/dist/eventlog/EventRow.js.map +1 -0
  438. package/dist/eventlog/SqlEventJournal.d.ts +18 -18
  439. package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
  440. package/dist/eventlog/SqlEventJournal.js +387 -159
  441. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  442. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +10 -18
  443. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  444. package/dist/eventlog/SqlEventLogServerEncrypted.js +179 -69
  445. package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  446. package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts +23 -3
  447. package/dist/eventlog/SqlEventLogServerUnencrypted.d.ts.map +1 -1
  448. package/dist/eventlog/SqlEventLogServerUnencrypted.js +102 -51
  449. package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  450. package/dist/eventlog/index.d.ts +5 -0
  451. package/dist/eventlog/index.d.ts.map +1 -1
  452. package/dist/eventlog/index.js +5 -0
  453. package/dist/eventlog/index.js.map +1 -1
  454. package/dist/eventlog/internal/conflicts.d.ts +47 -0
  455. package/dist/eventlog/internal/conflicts.d.ts.map +1 -0
  456. package/dist/eventlog/internal/conflicts.js +92 -0
  457. package/dist/eventlog/internal/conflicts.js.map +1 -0
  458. package/dist/graphql/GraphQLClientError.d.ts +2 -2
  459. package/dist/graphql/GraphQLClientError.d.ts.map +1 -1
  460. package/dist/graphql/GraphQLClientError.js +4 -18
  461. package/dist/graphql/GraphQLClientError.js.map +1 -1
  462. package/dist/graphql/GraphQLProtocol.d.ts +12 -9
  463. package/dist/graphql/GraphQLProtocol.d.ts.map +1 -1
  464. package/dist/graphql/GraphQLProtocol.js +4 -3
  465. package/dist/graphql/GraphQLProtocol.js.map +1 -1
  466. package/dist/graphql/GraphQLResolver.d.ts +2 -0
  467. package/dist/graphql/GraphQLResolver.d.ts.map +1 -1
  468. package/dist/graphql/GraphQLResolver.js +74 -32
  469. package/dist/graphql/GraphQLResolver.js.map +1 -1
  470. package/dist/http/FetchHttpClient.d.ts +8 -1
  471. package/dist/http/FetchHttpClient.d.ts.map +1 -1
  472. package/dist/http/FetchHttpClient.js +51 -4
  473. package/dist/http/FetchHttpClient.js.map +1 -1
  474. package/dist/http/FindMyWay/internal/router.js +10 -0
  475. package/dist/http/FindMyWay/internal/router.js.map +1 -1
  476. package/dist/http/Headers.d.ts +227 -0
  477. package/dist/http/Headers.d.ts.map +1 -1
  478. package/dist/http/Headers.js +261 -0
  479. package/dist/http/Headers.js.map +1 -1
  480. package/dist/http/HttpClient.d.ts +93 -0
  481. package/dist/http/HttpClient.d.ts.map +1 -1
  482. package/dist/http/HttpClient.js +55 -16
  483. package/dist/http/HttpClient.js.map +1 -1
  484. package/dist/http/HttpClientRequest.d.ts +127 -3
  485. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  486. package/dist/http/HttpClientRequest.js +44 -2
  487. package/dist/http/HttpClientRequest.js.map +1 -1
  488. package/dist/http/HttpClientResponse.d.ts +53 -0
  489. package/dist/http/HttpClientResponse.d.ts.map +1 -1
  490. package/dist/http/HttpClientResponse.js +47 -0
  491. package/dist/http/HttpClientResponse.js.map +1 -1
  492. package/dist/http/HttpEffect.d.ts +6 -2
  493. package/dist/http/HttpEffect.d.ts.map +1 -1
  494. package/dist/http/HttpEffect.js +21 -17
  495. package/dist/http/HttpEffect.js.map +1 -1
  496. package/dist/http/HttpIncomingMessage.d.ts +2 -1
  497. package/dist/http/HttpIncomingMessage.d.ts.map +1 -1
  498. package/dist/http/HttpIncomingMessage.js +3 -23
  499. package/dist/http/HttpIncomingMessage.js.map +1 -1
  500. package/dist/http/HttpMiddleware.d.ts +119 -2
  501. package/dist/http/HttpMiddleware.d.ts.map +1 -1
  502. package/dist/http/HttpMiddleware.js +159 -13
  503. package/dist/http/HttpMiddleware.js.map +1 -1
  504. package/dist/http/HttpRouter.d.ts.map +1 -1
  505. package/dist/http/HttpRouter.js +7 -2
  506. package/dist/http/HttpRouter.js.map +1 -1
  507. package/dist/http/HttpServerError.d.ts +5 -2
  508. package/dist/http/HttpServerError.d.ts.map +1 -1
  509. package/dist/http/HttpServerError.js +5 -3
  510. package/dist/http/HttpServerError.js.map +1 -1
  511. package/dist/http/HttpServerRequest.d.ts +25 -5
  512. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  513. package/dist/http/HttpServerRequest.js +36 -10
  514. package/dist/http/HttpServerRequest.js.map +1 -1
  515. package/dist/http/HttpServerResponse.d.ts +17 -8
  516. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  517. package/dist/http/HttpServerResponse.js +37 -21
  518. package/dist/http/HttpServerResponse.js.map +1 -1
  519. package/dist/http/HttpStaticServer.d.ts +0 -12
  520. package/dist/http/HttpStaticServer.d.ts.map +1 -1
  521. package/dist/http/HttpStaticServer.js +21 -7
  522. package/dist/http/HttpStaticServer.js.map +1 -1
  523. package/dist/http/MultipartParser/internal/contentType.d.ts +15 -1
  524. package/dist/http/MultipartParser/internal/contentType.d.ts.map +1 -1
  525. package/dist/http/MultipartParser/internal/contentType.js +87 -5
  526. package/dist/http/MultipartParser/internal/contentType.js.map +1 -1
  527. package/dist/http/MultipartParser/internal/headers.d.ts.map +1 -1
  528. package/dist/http/MultipartParser/internal/headers.js +4 -12
  529. package/dist/http/MultipartParser/internal/headers.js.map +1 -1
  530. package/dist/http/MultipartParser/internal/multipart.d.ts.map +1 -1
  531. package/dist/http/MultipartParser/internal/multipart.js +6 -27
  532. package/dist/http/MultipartParser/internal/multipart.js.map +1 -1
  533. package/dist/http/Url.d.ts.map +1 -1
  534. package/dist/http/Url.js +6 -1
  535. package/dist/http/Url.js.map +1 -1
  536. package/dist/http/internal/decompression.js +17 -11
  537. package/dist/http/internal/decompression.js.map +1 -1
  538. package/dist/http/internal/lazyStream.d.ts +2 -0
  539. package/dist/http/internal/lazyStream.d.ts.map +1 -0
  540. package/dist/http/internal/lazyStream.js +18 -0
  541. package/dist/http/internal/lazyStream.js.map +1 -0
  542. package/dist/http/internal/requestState.d.ts +2 -0
  543. package/dist/http/internal/requestState.d.ts.map +1 -0
  544. package/dist/http/internal/requestState.js +28 -0
  545. package/dist/http/internal/requestState.js.map +1 -0
  546. package/dist/http/internal/webResponse.d.ts +2 -0
  547. package/dist/http/internal/webResponse.d.ts.map +1 -0
  548. package/dist/http/internal/webResponse.js +12 -0
  549. package/dist/http/internal/webResponse.js.map +1 -0
  550. package/dist/http-api/HttpApi.js +1 -1
  551. package/dist/http-api/HttpApi.js.map +1 -1
  552. package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
  553. package/dist/http-api/HttpApiBuilder.js +121 -18
  554. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  555. package/dist/http-api/HttpApiClient.d.ts +29 -4
  556. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  557. package/dist/http-api/HttpApiClient.js +83 -23
  558. package/dist/http-api/HttpApiClient.js.map +1 -1
  559. package/dist/http-api/HttpApiEndpoint.d.ts +55 -29
  560. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  561. package/dist/http-api/HttpApiEndpoint.js +49 -5
  562. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  563. package/dist/http-api/HttpApiError.d.ts +58 -0
  564. package/dist/http-api/HttpApiError.d.ts.map +1 -1
  565. package/dist/http-api/HttpApiError.js +38 -12
  566. package/dist/http-api/HttpApiError.js.map +1 -1
  567. package/dist/http-api/HttpApiScalar.d.ts +2 -1
  568. package/dist/http-api/HttpApiScalar.d.ts.map +1 -1
  569. package/dist/http-api/HttpApiScalar.js +6 -3
  570. package/dist/http-api/HttpApiScalar.js.map +1 -1
  571. package/dist/http-api/HttpApiSchema.d.ts +191 -9
  572. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  573. package/dist/http-api/HttpApiSchema.js +137 -4
  574. package/dist/http-api/HttpApiSchema.js.map +1 -1
  575. package/dist/http-api/HttpApiSwagger.d.ts +5 -0
  576. package/dist/http-api/HttpApiSwagger.d.ts.map +1 -1
  577. package/dist/http-api/HttpApiSwagger.js +14 -4
  578. package/dist/http-api/HttpApiSwagger.js.map +1 -1
  579. package/dist/http-api/HttpApiTest.d.ts +13 -2
  580. package/dist/http-api/HttpApiTest.d.ts.map +1 -1
  581. package/dist/http-api/HttpApiTest.js +30 -9
  582. package/dist/http-api/HttpApiTest.js.map +1 -1
  583. package/dist/http-api/OpenApi.d.ts +17 -3
  584. package/dist/http-api/OpenApi.d.ts.map +1 -1
  585. package/dist/http-api/OpenApi.js +57 -32
  586. package/dist/http-api/OpenApi.js.map +1 -1
  587. package/dist/http-api/internal/path.js +35 -10
  588. package/dist/http-api/internal/path.js.map +1 -1
  589. package/dist/index.d.ts +20 -0
  590. package/dist/index.d.ts.map +1 -1
  591. package/dist/index.js +20 -0
  592. package/dist/index.js.map +1 -1
  593. package/dist/internal/core.js +1 -1
  594. package/dist/internal/core.js.map +1 -1
  595. package/dist/internal/dateTime.js +19 -7
  596. package/dist/internal/dateTime.js.map +1 -1
  597. package/dist/internal/effect.js +85 -74
  598. package/dist/internal/effect.js.map +1 -1
  599. package/dist/internal/hashMap.js +2 -2
  600. package/dist/internal/hashMap.js.map +1 -1
  601. package/dist/internal/hydration.d.ts +2 -0
  602. package/dist/internal/hydration.d.ts.map +1 -0
  603. package/dist/internal/hydration.js +15 -0
  604. package/dist/internal/hydration.js.map +1 -0
  605. package/dist/internal/inflate.d.ts +2 -0
  606. package/dist/internal/inflate.d.ts.map +1 -0
  607. package/dist/internal/inflate.js +680 -0
  608. package/dist/internal/inflate.js.map +1 -0
  609. package/dist/internal/record.js +6 -0
  610. package/dist/internal/record.js.map +1 -1
  611. package/dist/internal/request.js +20 -7
  612. package/dist/internal/request.js.map +1 -1
  613. package/dist/internal/schedule.js +17 -22
  614. package/dist/internal/schedule.js.map +1 -1
  615. package/dist/internal/schema/fromJsonSchemaDocument.js +136 -126
  616. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
  617. package/dist/internal/schema/interpreter.js +51 -36
  618. package/dist/internal/schema/interpreter.js.map +1 -1
  619. package/dist/internal/schema/standardSchema.js +34 -33
  620. package/dist/internal/schema/standardSchema.js.map +1 -1
  621. package/dist/internal/schema/toCodeDocument.js +7 -2
  622. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  623. package/dist/internal/schema/toCodec.js +86 -1
  624. package/dist/internal/schema/toCodec.js.map +1 -1
  625. package/dist/internal/schema/toFormatter.js +5 -5
  626. package/dist/internal/schema/toFormatter.js.map +1 -1
  627. package/dist/internal/schema/toJsonSchemaDocument.js +60 -38
  628. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
  629. package/dist/internal/trie.js +1 -3
  630. package/dist/internal/trie.js.map +1 -1
  631. package/dist/internal/uuid.js +7 -3
  632. package/dist/internal/uuid.js.map +1 -1
  633. package/dist/internal/version.js +1 -1
  634. package/dist/net/NetAddress.d.ts.map +1 -1
  635. package/dist/net/NetAddress.js +2 -8
  636. package/dist/net/NetAddress.js.map +1 -1
  637. package/dist/observability/OtlpExporter.d.ts.map +1 -1
  638. package/dist/observability/OtlpExporter.js +5 -12
  639. package/dist/observability/OtlpExporter.js.map +1 -1
  640. package/dist/observability/OtlpMetrics.d.ts.map +1 -1
  641. package/dist/observability/OtlpMetrics.js +5 -3
  642. package/dist/observability/OtlpMetrics.js.map +1 -1
  643. package/dist/observability/OtlpResource.d.ts +3 -1
  644. package/dist/observability/OtlpResource.d.ts.map +1 -1
  645. package/dist/observability/OtlpResource.js +11 -4
  646. package/dist/observability/OtlpResource.js.map +1 -1
  647. package/dist/observability/OtlpSerialization.d.ts +5 -0
  648. package/dist/observability/OtlpSerialization.d.ts.map +1 -1
  649. package/dist/observability/OtlpSerialization.js +14 -3
  650. package/dist/observability/OtlpSerialization.js.map +1 -1
  651. package/dist/observability/internal/protobuf.d.ts +0 -9
  652. package/dist/observability/internal/protobuf.d.ts.map +1 -1
  653. package/dist/observability/internal/protobuf.js +2 -10
  654. package/dist/observability/internal/protobuf.js.map +1 -1
  655. package/dist/persistence/PersistedCache.d.ts.map +1 -1
  656. package/dist/persistence/PersistedCache.js +1 -1
  657. package/dist/persistence/PersistedCache.js.map +1 -1
  658. package/dist/persistence/PersistedQueue.d.ts +6 -2
  659. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  660. package/dist/persistence/PersistedQueue.js +162 -84
  661. package/dist/persistence/PersistedQueue.js.map +1 -1
  662. package/dist/persistence/Persistence.d.ts +28 -0
  663. package/dist/persistence/Persistence.d.ts.map +1 -1
  664. package/dist/persistence/Persistence.js +36 -8
  665. package/dist/persistence/Persistence.js.map +1 -1
  666. package/dist/persistence/RateLimiter.d.ts.map +1 -1
  667. package/dist/persistence/RateLimiter.js +8 -12
  668. package/dist/persistence/RateLimiter.js.map +1 -1
  669. package/dist/persistence/UserDirectories.d.ts +129 -0
  670. package/dist/persistence/UserDirectories.d.ts.map +1 -0
  671. package/dist/persistence/UserDirectories.js +178 -0
  672. package/dist/persistence/UserDirectories.js.map +1 -0
  673. package/dist/persistence/index.d.ts +5 -0
  674. package/dist/persistence/index.d.ts.map +1 -1
  675. package/dist/persistence/index.js +5 -0
  676. package/dist/persistence/index.js.map +1 -1
  677. package/dist/process/ChildProcess.d.ts +2 -1
  678. package/dist/process/ChildProcess.d.ts.map +1 -1
  679. package/dist/process/ChildProcess.js.map +1 -1
  680. package/dist/reactivity/AsyncResult.d.ts.map +1 -1
  681. package/dist/reactivity/AsyncResult.js +1 -1
  682. package/dist/reactivity/AsyncResult.js.map +1 -1
  683. package/dist/reactivity/Atom.d.ts +69 -30
  684. package/dist/reactivity/Atom.d.ts.map +1 -1
  685. package/dist/reactivity/Atom.js +40 -15
  686. package/dist/reactivity/Atom.js.map +1 -1
  687. package/dist/reactivity/AtomHttpApi.d.ts +5 -5
  688. package/dist/reactivity/AtomHttpApi.d.ts.map +1 -1
  689. package/dist/reactivity/AtomHttpApi.js +1 -1
  690. package/dist/reactivity/AtomHttpApi.js.map +1 -1
  691. package/dist/reactivity/AtomRegistry.d.ts +2 -2
  692. package/dist/reactivity/AtomRegistry.d.ts.map +1 -1
  693. package/dist/reactivity/AtomRegistry.js +44 -9
  694. package/dist/reactivity/AtomRegistry.js.map +1 -1
  695. package/dist/reactivity/AtomRpc.d.ts +3 -3
  696. package/dist/reactivity/AtomRpc.d.ts.map +1 -1
  697. package/dist/reactivity/AtomRpc.js +1 -1
  698. package/dist/reactivity/AtomRpc.js.map +1 -1
  699. package/dist/reactivity/Hydration.d.ts.map +1 -1
  700. package/dist/reactivity/Hydration.js +46 -12
  701. package/dist/reactivity/Hydration.js.map +1 -1
  702. package/dist/reactivity/Reactivity.d.ts +71 -7
  703. package/dist/reactivity/Reactivity.d.ts.map +1 -1
  704. package/dist/reactivity/Reactivity.js +21 -12
  705. package/dist/reactivity/Reactivity.js.map +1 -1
  706. package/dist/rpc/Rpc.d.ts +18 -0
  707. package/dist/rpc/Rpc.d.ts.map +1 -1
  708. package/dist/rpc/Rpc.js +20 -0
  709. package/dist/rpc/Rpc.js.map +1 -1
  710. package/dist/rpc/RpcClient.d.ts +26 -2
  711. package/dist/rpc/RpcClient.d.ts.map +1 -1
  712. package/dist/rpc/RpcClient.js +196 -60
  713. package/dist/rpc/RpcClient.js.map +1 -1
  714. package/dist/rpc/RpcSerialization.d.ts +15 -0
  715. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  716. package/dist/rpc/RpcSerialization.js +21 -5
  717. package/dist/rpc/RpcSerialization.js.map +1 -1
  718. package/dist/rpc/RpcServer.d.ts.map +1 -1
  719. package/dist/rpc/RpcServer.js +9 -18
  720. package/dist/rpc/RpcServer.js.map +1 -1
  721. package/dist/schema/Model.d.ts +1 -1
  722. package/dist/schema/VariantSchema.d.ts +22 -3
  723. package/dist/schema/VariantSchema.d.ts.map +1 -1
  724. package/dist/schema/VariantSchema.js +32 -18
  725. package/dist/schema/VariantSchema.js.map +1 -1
  726. package/dist/socket/Socket.d.ts +23 -1
  727. package/dist/socket/Socket.d.ts.map +1 -1
  728. package/dist/socket/Socket.js +36 -3
  729. package/dist/socket/Socket.js.map +1 -1
  730. package/dist/sql/Migrator.d.ts.map +1 -1
  731. package/dist/sql/Migrator.js +15 -3
  732. package/dist/sql/Migrator.js.map +1 -1
  733. package/dist/sql/SqlClient.d.ts +143 -5
  734. package/dist/sql/SqlClient.d.ts.map +1 -1
  735. package/dist/sql/SqlClient.js +148 -27
  736. package/dist/sql/SqlClient.js.map +1 -1
  737. package/dist/sql/SqlResolver.d.ts +9 -0
  738. package/dist/sql/SqlResolver.d.ts.map +1 -1
  739. package/dist/sql/SqlResolver.js +9 -0
  740. package/dist/sql/SqlResolver.js.map +1 -1
  741. package/dist/sql/Statement.d.ts +3 -1
  742. package/dist/sql/Statement.d.ts.map +1 -1
  743. package/dist/sql/Statement.js +24 -5
  744. package/dist/sql/Statement.js.map +1 -1
  745. package/dist/testing/TestClock.d.ts.map +1 -1
  746. package/dist/testing/TestClock.js +4 -2
  747. package/dist/testing/TestClock.js.map +1 -1
  748. package/dist/testing/TestSchema.d.ts +7 -1
  749. package/dist/testing/TestSchema.d.ts.map +1 -1
  750. package/dist/testing/TestSchema.js +9 -3
  751. package/dist/testing/TestSchema.js.map +1 -1
  752. package/dist/workflow/WorkflowEngine.d.ts.map +1 -1
  753. package/dist/workflow/WorkflowEngine.js +18 -4
  754. package/dist/workflow/WorkflowEngine.js.map +1 -1
  755. package/package.json +13 -3
  756. package/src/Array.ts +128 -55
  757. package/src/Bytes.ts +111 -0
  758. package/src/Channel.ts +263 -436
  759. package/src/ChannelSchema.ts +1 -49
  760. package/src/Chunk.ts +55 -61
  761. package/src/Config.ts +12 -86
  762. package/src/ConfigProvider.ts +2 -1
  763. package/src/Cron.ts +6 -3
  764. package/src/Duration.ts +66 -16
  765. package/src/Effect.ts +502 -167
  766. package/src/Equivalence.ts +7 -4
  767. package/src/Exit.ts +24 -9
  768. package/src/FiberHandle.ts +10 -9
  769. package/src/FiberMap.ts +13 -66
  770. package/src/FileSystem.ts +10 -0
  771. package/src/Graph.ts +171 -1263
  772. package/src/HashSet.ts +0 -60
  773. package/src/Iterable.ts +15 -14
  774. package/src/JsonSchema.ts +28 -3
  775. package/src/Layer.ts +2 -2
  776. package/src/ManagedRuntime.ts +72 -6
  777. package/src/Metric.ts +249 -507
  778. package/src/MutableHashMap.ts +4 -473
  779. package/src/Number.ts +2 -2
  780. package/src/Optic.ts +17 -332
  781. package/src/Path.ts +9 -1
  782. package/src/PubSub.ts +12 -7
  783. package/src/Queue.ts +5 -37
  784. package/src/Random.ts +1 -1
  785. package/src/RcMap.ts +14 -8
  786. package/src/Record.ts +51 -0
  787. package/src/Ref.ts +7 -104
  788. package/src/References.ts +5 -4
  789. package/src/RequestResolver.ts +46 -87
  790. package/src/Resource.ts +1 -1
  791. package/src/Runtime.ts +19 -18
  792. package/src/Schedule.ts +2 -94
  793. package/src/Schema.ts +591 -356
  794. package/src/SchemaAST.ts +20 -9
  795. package/src/SchemaGetter.ts +22 -5
  796. package/src/SchemaIssue.ts +44 -53
  797. package/src/SchemaRepresentation.ts +64 -1
  798. package/src/SchemaTransformation.ts +1 -1
  799. package/src/Scope.ts +12 -2
  800. package/src/ScopedCache.ts +17 -142
  801. package/src/SemVer.ts +1528 -0
  802. package/src/SemVerRange.ts +883 -0
  803. package/src/Sink.ts +6 -2
  804. package/src/Stream.ts +334 -1011
  805. package/src/String.ts +8 -8
  806. package/src/TextDiff.ts +766 -0
  807. package/src/TxHashMap.ts +1 -103
  808. package/src/TxHashSet.ts +48 -753
  809. package/src/ai/AiError.ts +66 -4
  810. package/src/ai/Chat.ts +10 -5
  811. package/src/ai/Decision.ts +49 -1
  812. package/src/ai/DecisionModel.ts +264 -108
  813. package/src/ai/EmbeddingModel.ts +25 -13
  814. package/src/ai/McpClient.ts +1211 -0
  815. package/src/ai/McpClientError.ts +329 -0
  816. package/src/ai/McpProtocol.ts +2 -2
  817. package/src/ai/McpSchema.ts +153 -35
  818. package/src/ai/McpServer.ts +217 -220
  819. package/src/ai/Prompt.ts +49 -35
  820. package/src/ai/Response.ts +195 -65
  821. package/src/ai/Tool.ts +12 -4
  822. package/src/ai/Toolkit.ts +78 -10
  823. package/src/ai/index.ts +12 -0
  824. package/src/ai/internal/mcpCore.ts +13 -14
  825. package/src/ai/internal/mcpProtocol/v2024_11_05.ts +1 -1
  826. package/src/ai/internal/mcpProtocol/v2025_03_26.ts +1 -1
  827. package/src/ai/internal/mcpProtocol/v2025_06_18.ts +3 -3
  828. package/src/ai/internal/mcpProtocol/v2025_11_25.ts +3 -3
  829. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +12 -14
  830. package/src/ai/internal/mcpProtocol.ts +22 -2
  831. package/src/ai/internal/mcpRuntime.ts +3 -4
  832. package/src/ai/internal/mcpSchema/v2024_11_05.ts +20 -13
  833. package/src/ai/internal/mcpSchema/v2025_03_26.ts +4 -2
  834. package/src/ai/internal/mcpSchema/v2025_06_18.ts +7 -7
  835. package/src/ai/internal/mcpSchema/v2025_11_25.ts +8 -8
  836. package/src/ai/internal/mcpSchema/v2026_07_28.ts +44 -42
  837. package/src/cli/CliError.ts +49 -4
  838. package/src/cli/Command.ts +316 -9
  839. package/src/cli/Completions.ts +5 -0
  840. package/src/cli/Flag.ts +117 -0
  841. package/src/cli/GlobalFlag.ts +3 -3
  842. package/src/cli/Param.ts +122 -0
  843. package/src/cli/TerminalCapabilities.ts +156 -0
  844. package/src/cli/index.ts +6 -0
  845. package/src/cli/internal/command.ts +8 -3
  846. package/src/cli/internal/completions/bash.ts +4 -3
  847. package/src/cli/internal/completions/descriptor.ts +11 -1
  848. package/src/cli/internal/completions/fish.ts +10 -8
  849. package/src/cli/internal/completions/powershell.ts +23 -14
  850. package/src/cli/internal/completions/zsh.ts +8 -5
  851. package/src/cli/internal/formatter.ts +18 -0
  852. package/src/cli/internal/lexer.ts +12 -5
  853. package/src/cli/internal/parser.ts +31 -11
  854. package/src/cluster/ClusterCron.ts +94 -35
  855. package/src/cluster/ClusterMetrics.ts +149 -7
  856. package/src/cluster/ClusterWorkflowEngine.ts +84 -41
  857. package/src/cluster/Entity.ts +4 -0
  858. package/src/cluster/MessageStorage.ts +7 -0
  859. package/src/cluster/Runners.ts +76 -25
  860. package/src/cluster/Sharding.ts +118 -38
  861. package/src/cluster/ShardingConfig.ts +15 -0
  862. package/src/cluster/SqlMessageStorage.ts +58 -55
  863. package/src/cluster/SqlRunnerStorage.ts +10 -4
  864. package/src/cluster/internal/entityManager.ts +80 -10
  865. package/src/devtools/DevTools.ts +3 -2
  866. package/src/devtools/DevToolsClient.ts +27 -10
  867. package/src/encoding/Base64Url.ts +31 -0
  868. package/src/encoding/Ini.ts +3 -0
  869. package/src/encoding/JsonArray.ts +849 -0
  870. package/src/encoding/Ndjson.ts +211 -20
  871. package/src/encoding/SchemaBinary.ts +14 -48
  872. package/src/encoding/Tar.ts +1417 -0
  873. package/src/encoding/Toml.ts +3 -3
  874. package/src/encoding/Xml.ts +2037 -0
  875. package/src/encoding/Yaml.ts +108 -36
  876. package/src/encoding/Zip.ts +1558 -0
  877. package/src/encoding/index.ts +24 -0
  878. package/src/eventlog/EventJournal.ts +611 -227
  879. package/src/eventlog/EventLog.ts +496 -196
  880. package/src/eventlog/EventLogEncryption.ts +128 -43
  881. package/src/eventlog/EventLogMessage.ts +62 -11
  882. package/src/eventlog/EventLogRemote.ts +77 -21
  883. package/src/eventlog/EventLogServer.ts +162 -20
  884. package/src/eventlog/EventLogServerEncrypted.ts +121 -80
  885. package/src/eventlog/EventLogServerUnencrypted.ts +180 -77
  886. package/src/eventlog/EventRow.ts +706 -0
  887. package/src/eventlog/SqlEventJournal.ts +453 -173
  888. package/src/eventlog/SqlEventLogServerEncrypted.ts +212 -83
  889. package/src/eventlog/SqlEventLogServerUnencrypted.ts +141 -62
  890. package/src/eventlog/index.ts +6 -0
  891. package/src/eventlog/internal/conflicts.ts +123 -0
  892. package/src/graphql/GraphQLClientError.ts +5 -12
  893. package/src/graphql/GraphQLProtocol.ts +12 -9
  894. package/src/graphql/GraphQLResolver.ts +90 -239
  895. package/src/http/FetchHttpClient.ts +56 -6
  896. package/src/http/FindMyWay/internal/router.ts +11 -0
  897. package/src/http/Headers.ts +337 -154
  898. package/src/http/HttpClient.ts +126 -135
  899. package/src/http/HttpClientRequest.ts +142 -4
  900. package/src/http/HttpClientResponse.ts +71 -0
  901. package/src/http/HttpEffect.ts +25 -33
  902. package/src/http/HttpIncomingMessage.ts +3 -23
  903. package/src/http/HttpMiddleware.ts +180 -23
  904. package/src/http/HttpRouter.ts +8 -2
  905. package/src/http/HttpServerError.ts +6 -3
  906. package/src/http/HttpServerRequest.ts +71 -12
  907. package/src/http/HttpServerResponse.ts +49 -23
  908. package/src/http/HttpStaticServer.ts +25 -9
  909. package/src/http/MultipartParser/internal/contentType.ts +107 -6
  910. package/src/http/MultipartParser/internal/headers.ts +4 -16
  911. package/src/http/MultipartParser/internal/multipart.ts +10 -32
  912. package/src/http/Url.ts +6 -1
  913. package/src/http/internal/decompression.ts +26 -17
  914. package/src/http/internal/lazyStream.ts +25 -0
  915. package/src/http/internal/requestState.ts +33 -0
  916. package/src/http/internal/webResponse.ts +20 -0
  917. package/src/http-api/HttpApi.ts +1 -1
  918. package/src/http-api/HttpApiBuilder.ts +151 -23
  919. package/src/http-api/HttpApiClient.ts +158 -30
  920. package/src/http-api/HttpApiEndpoint.ts +144 -33
  921. package/src/http-api/HttpApiError.ts +55 -0
  922. package/src/http-api/HttpApiScalar.ts +4 -3
  923. package/src/http-api/HttpApiSchema.ts +275 -13
  924. package/src/http-api/HttpApiSwagger.ts +11 -4
  925. package/src/http-api/HttpApiTest.ts +33 -9
  926. package/src/http-api/OpenApi.ts +84 -42
  927. package/src/http-api/internal/path.ts +40 -12
  928. package/src/index.ts +24 -0
  929. package/src/internal/core.ts +1 -1
  930. package/src/internal/dateTime.ts +20 -7
  931. package/src/internal/effect.ts +120 -84
  932. package/src/internal/hashMap.ts +2 -2
  933. package/src/internal/hydration.ts +15 -0
  934. package/src/internal/inflate.ts +710 -0
  935. package/src/internal/record.ts +6 -0
  936. package/src/internal/request.ts +21 -6
  937. package/src/internal/schedule.ts +20 -39
  938. package/src/internal/schema/fromJsonSchemaDocument.ts +262 -193
  939. package/src/internal/schema/interpreter.ts +58 -45
  940. package/src/internal/schema/standardSchema.ts +32 -30
  941. package/src/internal/schema/toCodeDocument.ts +8 -3
  942. package/src/internal/schema/toCodec.ts +116 -1
  943. package/src/internal/schema/toFormatter.ts +6 -6
  944. package/src/internal/schema/toJsonSchemaDocument.ts +69 -39
  945. package/src/internal/trie.ts +1 -3
  946. package/src/internal/uuid.ts +15 -10
  947. package/src/internal/version.ts +1 -1
  948. package/src/net/NetAddress.ts +2 -9
  949. package/src/observability/OtlpExporter.ts +5 -12
  950. package/src/observability/OtlpMetrics.ts +5 -3
  951. package/src/observability/OtlpResource.ts +16 -6
  952. package/src/observability/OtlpSerialization.ts +17 -3
  953. package/src/observability/internal/protobuf.ts +2 -10
  954. package/src/persistence/PersistedCache.ts +3 -1
  955. package/src/persistence/PersistedQueue.ts +223 -153
  956. package/src/persistence/Persistence.ts +64 -30
  957. package/src/persistence/RateLimiter.ts +18 -21
  958. package/src/persistence/UserDirectories.ts +273 -0
  959. package/src/persistence/index.ts +6 -0
  960. package/src/process/ChildProcess.ts +2 -1
  961. package/src/reactivity/AsyncResult.ts +4 -38
  962. package/src/reactivity/Atom.ts +134 -166
  963. package/src/reactivity/AtomHttpApi.ts +10 -16
  964. package/src/reactivity/AtomRegistry.ts +50 -29
  965. package/src/reactivity/AtomRpc.ts +6 -22
  966. package/src/reactivity/Hydration.ts +53 -12
  967. package/src/reactivity/Reactivity.ts +97 -39
  968. package/src/rpc/Rpc.ts +21 -0
  969. package/src/rpc/RpcClient.ts +279 -103
  970. package/src/rpc/RpcSerialization.ts +21 -5
  971. package/src/rpc/RpcServer.ts +11 -20
  972. package/src/schema/VariantSchema.ts +86 -22
  973. package/src/socket/Socket.ts +45 -20
  974. package/src/sql/Migrator.ts +19 -9
  975. package/src/sql/SqlClient.ts +266 -29
  976. package/src/sql/SqlResolver.ts +9 -0
  977. package/src/sql/Statement.ts +35 -8
  978. package/src/testing/TestClock.ts +4 -1
  979. package/src/testing/TestSchema.ts +9 -3
  980. package/src/workflow/WorkflowEngine.ts +34 -10
  981. package/dist/http/internal/preResponseHandler.d.ts +0 -2
  982. package/dist/http/internal/preResponseHandler.d.ts.map +0 -1
  983. package/dist/http/internal/preResponseHandler.js +0 -14
  984. package/dist/http/internal/preResponseHandler.js.map +0 -1
  985. package/src/http/internal/preResponseHandler.ts +0 -19
@@ -125,6 +125,8 @@ type FlagRegistry = {
125
125
  readonly params: ReadonlyArray<FlagParam>
126
126
  /** Maps canonical names and aliases → flag param */
127
127
  readonly index: Map<string, FlagParam>
128
+ /** Maps negated names of boolean flags → flag param */
129
+ readonly negations: Map<string, FlagParam>
128
130
  }
129
131
 
130
132
  /**
@@ -229,12 +231,22 @@ const makeCursor = (tokens: ReadonlyArray<Token>): TokenCursor => {
229
231
  /* Flag Registry */
230
232
  /* ========================================================================== */
231
233
 
234
+ /**
235
+ * Long name that sets a boolean flag to `false`, or `undefined` when the flag
236
+ * has no negated form.
237
+ */
238
+ const negatedName = (param: FlagParam): string | undefined =>
239
+ !Primitive.isBoolean(param.primitiveType) || param.negation === false
240
+ ? undefined
241
+ : param.negation ?? `no-${param.name}`
242
+
232
243
  /**
233
244
  * Creates a registry for O(1) flag lookup by name or alias.
234
245
  * @internal
235
246
  */
236
247
  export const createFlagRegistry = (params: ReadonlyArray<FlagParam>): FlagRegistry => {
237
248
  const index = new Map<string, FlagParam>()
249
+ const negations = new Map<string, FlagParam>()
238
250
 
239
251
  for (const param of params) {
240
252
  if (index.has(param.name)) {
@@ -250,9 +262,19 @@ export const createFlagRegistry = (params: ReadonlyArray<FlagParam>): FlagRegist
250
262
  }
251
263
  index.set(alias, param)
252
264
  }
265
+
266
+ const negation = negatedName(param)
267
+ if (negation !== undefined) {
268
+ if (negations.has(negation)) {
269
+ throw new Error(
270
+ `Duplicate negation "${negation}" in command definition (conflicts with "${negations.get(negation)!.name}")`
271
+ )
272
+ }
273
+ negations.set(negation, param)
274
+ }
253
275
  }
254
276
 
255
- return { params, index }
277
+ return { params, index, negations }
256
278
  }
257
279
 
258
280
  const buildSubcommandIndex = (
@@ -362,14 +384,11 @@ const resolveFlag = (
362
384
  }
363
385
  }
364
386
 
365
- if (token._tag === "LongOption" && token.name.startsWith("no-")) {
366
- const canonicalName = token.name.slice(3)
367
- const param = registry.index.get(canonicalName)
368
- if (param && param.name === canonicalName && Primitive.isBoolean(param.primitiveType)) {
369
- return {
370
- param,
371
- negated: true
372
- }
387
+ const negated = token._tag === "LongOption" ? registry.negations.get(token.name) : undefined
388
+ if (negated) {
389
+ return {
390
+ param: negated,
391
+ negated: true
373
392
  }
374
393
  }
375
394
 
@@ -740,8 +759,9 @@ const createUnrecognizedFlagError = (
740
759
  // that was intentionally kept out of --help.
741
760
  if (p.hidden) continue
742
761
  validNames.push(p.name)
743
- if (Primitive.isBoolean(p.primitiveType)) {
744
- validNames.push(`no-${p.name}`)
762
+ const negation = negatedName(p)
763
+ if (negation !== undefined) {
764
+ validNames.push(negation)
745
765
  }
746
766
  for (const alias of p.aliases) {
747
767
  validNames.push(alias)
@@ -7,9 +7,15 @@
7
7
  * for distributed maintenance work where the job should be owned by the cluster
8
8
  * rather than by every runner independently.
9
9
  *
10
+ * With `calculateNextRunFromPrevious`, every run is processed by a single
11
+ * entity per cron job, so runs never overlap and are caught up in order. The
12
+ * scheduled time of the current run is available through
13
+ * `CurrentScheduledTime`.
14
+ *
10
15
  * @stability unstable
11
16
  * @since 4.0.0
12
17
  */
18
+ import * as Context from "../Context.ts"
13
19
  import * as Cron from "../Cron.ts"
14
20
  import * as DateTime from "../DateTime.ts"
15
21
  import * as Duration from "../Duration.ts"
@@ -29,6 +35,23 @@ import * as Entity from "./Entity.ts"
29
35
  import type { Sharding } from "./Sharding.ts"
30
36
  import * as Singleton from "./Singleton.ts"
31
37
 
38
+ /**
39
+ * Service tag for the scheduled time of the cron run currently executing.
40
+ *
41
+ * **When to use**
42
+ *
43
+ * Use to read the time the current run was scheduled for, inside the
44
+ * `execute` effect of `make`.
45
+ *
46
+ * @stability unstable
47
+ * @category services
48
+ * @since 4.0.0
49
+ */
50
+ export class CurrentScheduledTime extends Context.Service<
51
+ CurrentScheduledTime,
52
+ DateTime.Utc
53
+ >()("effect/cluster/ClusterCron/CurrentScheduledTime") {}
54
+
32
55
  /**
33
56
  * Creates a layer that runs a cron job through the cluster sharding system.
34
57
  *
@@ -60,6 +83,11 @@ export const make = <E, R>(options: {
60
83
  *
61
84
  * Defaults to `false`, meaning the next run will be calculated from the
62
85
  * current time.
86
+ *
87
+ * When enabled, all runs are processed one at a time by a single entity, so
88
+ * missed runs are caught up in order without overlapping. A run that fails
89
+ * is retried in place and blocks later runs until it succeeds or is older
90
+ * than `skipIfOlderThan`.
63
91
  */
64
92
  readonly calculateNextRunFromPrevious?: boolean | undefined
65
93
 
@@ -76,26 +104,42 @@ export const make = <E, R>(options: {
76
104
  * Defaults to "1 day".
77
105
  */
78
106
  readonly skipIfOlderThan?: Duration.Input | undefined
79
- }): Layer.Layer<never, never, Sharding | Exclude<R, Scope>> => {
107
+ }): Layer.Layer<never, never, Sharding | Exclude<Exclude<R, CurrentScheduledTime>, Scope>> => {
108
+ const fromPrevious = options.calculateNextRunFromPrevious === true
109
+ const nextRun = (after: DateTime.Utc) => DateTime.fromDateUnsafe(Cron.next(options.cron, after))
110
+
80
111
  const CronEntity = Entity.make(`ClusterCron/${options.name}`, [
81
112
  Rpc.make("run", {
82
113
  payload: CronPayload
83
114
  })
84
115
  .annotate(Persisted, true)
85
- .annotate(Uninterruptible, true)
116
+ .annotate(Uninterruptible, true),
117
+ Rpc.make("start").annotate(Persisted, true)
86
118
  ])
87
119
  .annotate(ClusterSchema.ShardGroup, () => options.shardGroup ?? "default")
88
120
  .annotate(ClusterSchema.ClientTracingEnabled, false)
89
121
 
122
+ // with `calculateNextRunFromPrevious`, every run shares the executor address
123
+ const send = (dateTime: DateTime.Utc) =>
124
+ Effect.flatMap(CronEntity.client, (makeClient) =>
125
+ fromPrevious
126
+ ? makeClient(executorId).run(new CronPayload({ dateTime, executor: true }), { discard: true })
127
+ : makeClient(DateTime.formatIso(dateTime)).run(new CronPayload({ dateTime }), { discard: true }))
128
+
129
+ const schedule = (dateTime: DateTime.Utc) => send(dateTime).pipe(withRetry("Failed to schedule next run, retrying"))
130
+
90
131
  const InitialRun = Singleton.make(
91
132
  `ClusterCron/${options.name}`,
92
- Effect.gen(function*() {
93
- const now = yield* DateTime.now
94
- const next = DateTime.fromDateUnsafe(Cron.next(options.cron, now))
95
- const entityId = options.calculateNextRunFromPrevious ? "initial" : DateTime.formatIso(next)
96
- const client = (yield* CronEntity.client)(entityId)
97
- yield* client.run({ dateTime: next }, { discard: true })
98
- }),
133
+ fromPrevious
134
+ // the executor schedules the next run if its chain has been lost.
135
+ // `start` has no primary key, so each retry is a new message
136
+ ? Effect.flatMap(CronEntity.client, (makeClient) => makeClient(executorId).start()).pipe(
137
+ withRetry("Failed to start cron job, retrying")
138
+ )
139
+ : Effect.flatMap(
140
+ DateTime.now,
141
+ (now) => send(nextRun(now)).pipe(withRetry("Failed to schedule initial run, retrying"))
142
+ ),
99
143
  { shardGroup: options.shardGroup }
100
144
  )
101
145
 
@@ -104,61 +148,76 @@ export const make = <E, R>(options: {
104
148
  Option.getOrElse(() => Duration.days(1))
105
149
  )
106
150
 
107
- const effect = Effect.fnUntraced(function*(dateTime: DateTime.Utc) {
151
+ const execute = Effect.fnUntraced(function*(dateTime: DateTime.Utc) {
108
152
  const now = yield* DateTime.now
109
153
  if (DateTime.isLessThan(dateTime, DateTime.subtractDuration(now, skipIfOlderThan))) {
110
154
  return
111
155
  }
112
- return yield* options.execute
156
+ return yield* Effect.provideService(options.execute, CurrentScheduledTime, dateTime)
113
157
  }, Effect.orDie)
114
158
 
115
159
  const EntityLayer = CronEntity.toLayer(Effect.gen(function*() {
116
- const makeClient = yield* CronEntity.client
160
+ const address = yield* Entity.CurrentAddress
161
+ // runs are processed one at a time, so a run processed before `start`
162
+ // means the chain is alive
163
+ let processedRun = false
117
164
  return {
118
- run: (request) =>
119
- Effect.onExitPrimitive(
120
- effect(request.payload.dateTime),
121
- Effect.fnUntraced(function*(exit) {
122
- if (Exit.isFailure(exit)) {
123
- yield* Effect.logWarning(exit.cause)
124
- }
125
- const now = yield* DateTime.now
126
- const next = DateTime.fromDateUnsafe(Cron.next(
127
- options.cron,
128
- options.calculateNextRunFromPrevious ? request.payload.dateTime : now
129
- ))
130
- const client = makeClient(DateTime.formatIso(next))
131
- return yield* client.run({ dateTime: next }, { discard: true }).pipe(
132
- Effect.tapCause((cause) => Effect.logWarning("Failed to schedule next run, retrying", cause)),
133
- Effect.sandbox,
134
- Effect.retry(retryPolicy),
135
- Effect.orDie
136
- )
137
- }),
165
+ run: (request) => {
166
+ const dateTime = request.payload.dateTime
167
+ if (fromPrevious && address.entityId !== executorId) {
168
+ // a run scheduled by an earlier release joins the executor's chain
169
+ return schedule(dateTime)
170
+ }
171
+ processedRun = true
172
+ return Effect.onExitPrimitive(
173
+ execute(dateTime),
174
+ (exit) =>
175
+ Effect.andThen(
176
+ Exit.isFailure(exit) ? Effect.logWarning(exit.cause) : Effect.void,
177
+ fromPrevious ? schedule(nextRun(dateTime)) : Effect.flatMap(DateTime.now, (now) => schedule(nextRun(now)))
178
+ ),
138
179
  true
139
180
  ).pipe(
140
181
  Effect.annotateLogs({
141
182
  module: "effect/cluster/ClusterCron",
142
183
  name: options.name,
143
- dateTime: request.payload.dateTime
184
+ dateTime
144
185
  })
145
186
  )
187
+ },
188
+ start: () =>
189
+ processedRun
190
+ ? Effect.void
191
+ // deduplicated against the pending run if the chain is alive
192
+ : Effect.flatMap(DateTime.now, (now) => schedule(nextRun(now)))
146
193
  }
147
194
  }))
148
195
 
149
196
  return Layer.merge(InitialRun, EntityLayer)
150
197
  }
151
198
 
199
+ const executorId = "executor"
200
+
152
201
  const retryPolicy = Schedule.min([
153
202
  Schedule.exponential(200, 1.5),
154
203
  Schedule.spaced("1 minute")
155
204
  ])
156
205
 
206
+ const withRetry = (message: string) => <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, never, R> =>
207
+ self.pipe(
208
+ Effect.tapCause((cause) => Effect.logWarning(message, cause)),
209
+ Effect.sandbox,
210
+ Effect.retry(retryPolicy),
211
+ Effect.orDie
212
+ )
213
+
157
214
  class CronPayload extends Schema.Class<CronPayload>("effect/cluster/ClusterCron/CronPayload")({
158
- dateTime: Schema.DateTimeUtc
215
+ dateTime: Schema.DateTimeUtc,
216
+ // set for runs sent to the executor, which share one entity address
217
+ executor: Schema.optional(Schema.Boolean)
159
218
  }) {
160
219
  [PrimaryKey.symbol]() {
161
- return ""
220
+ return this.executor ? DateTime.formatIso(this.dateTime) : ""
162
221
  }
163
222
  [DeliverAt.symbol]() {
164
223
  return this.dateTime
@@ -1,10 +1,11 @@
1
1
  /**
2
2
  * Standard metric definitions used by the unstable cluster runtime. The gauges
3
- * track runner-local entities, singleton processes, registered runners,
4
- * healthy runners, and acquired shards.
3
+ * track runner-local entities, entity mailbox sizes, singleton processes,
4
+ * registered runners, healthy runners, acquired shards, and shards being
5
+ * released. The timer tracks shard release duration.
5
6
  *
6
7
  * This module only defines the metric handles. The runtime components that
7
- * manage entities, runners, singletons, and sharding update these gauges while
8
+ * manage entities, runners, singletons, and sharding update these metrics while
8
9
  * the cluster is running.
9
10
  *
10
11
  * @stability unstable
@@ -23,13 +24,13 @@ import * as Metric from "../Metric.ts"
23
24
  *
24
25
  * **Details**
25
26
  *
26
- * Bigint gauge named `effect_cluster_entities`, updated with the entity type as
27
- * a metric tag.
27
+ * Bigint gauge named `effect_cluster_entities`, tagged with the entity type.
28
+ * Each entity manager registers a series that reads its active entity count
29
+ * when metrics are snapshotted, and removes it when the manager shuts down.
28
30
  *
29
31
  * **Gotchas**
30
32
  *
31
- * This gauge is runner-local and sampled by the entity manager loop. Aggregate
32
- * across runners and expect up to roughly one polling interval of lag.
33
+ * This gauge is runner-local. Aggregate across runners.
33
34
  *
34
35
  * @see {@link singletons} for singleton process counts on the current runner
35
36
  * @see {@link shards} for shard ownership on the current runner
@@ -40,6 +41,86 @@ import * as Metric from "../Metric.ts"
40
41
  */
41
42
  export const entities = Metric.gauge("effect_cluster_entities", { bigint: true })
42
43
 
44
+ /**
45
+ * Represents a gauge tracking the mailbox size of each entity resident on the
46
+ * current runner.
47
+ *
48
+ * **When to use**
49
+ *
50
+ * Use to find entities whose mailboxes back up, before sends start failing
51
+ * with `MailboxFull`.
52
+ *
53
+ * **Details**
54
+ *
55
+ * Bigint gauge named `effect_cluster_entity_mailbox_size`, with one series per
56
+ * resident entity tagged with `type`, `id` and `shard`. The value is the
57
+ * number the mailbox capacity check compares against: requests admitted to the
58
+ * entity, whether queued or in flight, excluding internal keep-alive requests.
59
+ *
60
+ * The value is read when metrics are snapshotted, so it adds no work per
61
+ * message. Each series is removed when its entity is released.
62
+ *
63
+ * **Gotchas**
64
+ *
65
+ * Off by default. Enable it with `ShardingConfig.entityMailboxMetrics` or the
66
+ * `mailboxMetrics` option when registering an entity. One series per resident
67
+ * entity can mean many series on busy runners.
68
+ *
69
+ * An entity keeps reporting while it drains in-flight requests during
70
+ * shutdown. `Metric.update` and `Metric.modify` on this gauge do nothing for
71
+ * series the runtime registered.
72
+ *
73
+ * Like the other runner gauges it has no runner attribute: runners sharing a
74
+ * registry without distinct metric attributes overwrite each other's series.
75
+ *
76
+ * @see {@link entities} for the number of resident entities per type
77
+ * @see {@link entityMailboxSizeMax} for the always-on per-type maximum
78
+ *
79
+ * @stability unstable
80
+ * @category metrics
81
+ * @since 4.0.6
82
+ */
83
+ export const entityMailboxSize = Metric.gauge("effect_cluster_entity_mailbox_size", { bigint: true })
84
+
85
+ /**
86
+ * Represents a gauge tracking the largest mailbox size among the entities of
87
+ * each type resident on the current runner.
88
+ *
89
+ * **When to use**
90
+ *
91
+ * Use to alert on entity types whose mailboxes back up, before sends start
92
+ * failing with `MailboxFull`, without paying for a series per entity.
93
+ *
94
+ * **Details**
95
+ *
96
+ * Bigint gauge named `effect_cluster_entity_mailbox_size_max`, with one series
97
+ * per registered entity type tagged with `type`. The value is the largest
98
+ * mailbox size that {@link entityMailboxSize} would report for the type,
99
+ * including entities draining in-flight requests during shutdown, or `0` when
100
+ * the type has no resident entities.
101
+ *
102
+ * The value is computed when metrics are snapshotted, by visiting each
103
+ * resident entity of the type, so it adds no work per message. Entities
104
+ * draining during shutdown keep their slot until they finish, so the visit is
105
+ * bounded by `ShardingConfig.maxResidentEntities` across all types, unless it
106
+ * is `"unbounded"`. The series is removed when the entity type shuts down.
107
+ *
108
+ * **Gotchas**
109
+ *
110
+ * Always on. `Metric.update` and `Metric.modify` on this gauge do nothing for
111
+ * series the runtime registered.
112
+ *
113
+ * Like the other runner gauges it has no runner attribute: runners sharing a
114
+ * registry without distinct metric attributes overwrite each other's series.
115
+ *
116
+ * @see {@link entityMailboxSize} for the opt-in per-entity mailbox sizes
117
+ *
118
+ * @stability unstable
119
+ * @category metrics
120
+ * @since 4.0.6
121
+ */
122
+ export const entityMailboxSizeMax = Metric.gauge("effect_cluster_entity_mailbox_size_max", { bigint: true })
123
+
43
124
  /**
44
125
  * Creates a gauge tracking the number of singleton processes currently running on the
45
126
  * current runner.
@@ -116,3 +197,64 @@ export const runnersHealthy = Metric.gauge("effect_cluster_runners_healthy", { b
116
197
  * @since 4.0.0
117
198
  */
118
199
  export const shards = Metric.gauge("effect_cluster_shards", { bigint: true })
200
+
201
+ /**
202
+ * Represents a gauge tracking the number of shards the current runner is still
203
+ * releasing.
204
+ *
205
+ * **When to use**
206
+ *
207
+ * Use to detect shard releases that stall during rebalancing, shutdown handoff
208
+ * or lock storage failures.
209
+ *
210
+ * **Details**
211
+ *
212
+ * Bigint gauge named `effect_cluster_shards_releasing`, updated with the number
213
+ * of distinct shards being released. A shard counts from the moment it is no
214
+ * longer acquired until its entities and singletons have stopped and its lock
215
+ * is released, including waits for lock storage to recover and release
216
+ * retries.
217
+ *
218
+ * **Gotchas**
219
+ *
220
+ * Positive values are normal while shards move; alert only when the value
221
+ * stays positive. It does not reflect lock ownership, and reacquisition can
222
+ * stay blocked briefly after it returns to zero, while a forced release
223
+ * finishes its bookkeeping.
224
+ *
225
+ * Like the other runner gauges it assumes one runner per process: runners
226
+ * sharing a registry without distinct metric attributes overwrite each other's
227
+ * value.
228
+ *
229
+ * @stability unstable
230
+ * @category metrics
231
+ * @since 4.1.0
232
+ */
233
+ export const shardsReleasing = Metric.gauge("effect_cluster_shards_releasing", { bigint: true })
234
+
235
+ /**
236
+ * Represents a timer tracking how long the current runner takes to release a
237
+ * shard after reassignment, lock loss or shutdown handoff.
238
+ *
239
+ * **When to use**
240
+ *
241
+ * Use to observe shard handoff latency during rebalancing, shutdown, or lock
242
+ * storage failures.
243
+ *
244
+ * **Details**
245
+ *
246
+ * Millisecond timer named `effect_cluster_shard_release`. Each sample covers
247
+ * entity teardown, retries and any wait for shard lock storage to recover.
248
+ *
249
+ * **Gotchas**
250
+ *
251
+ * Only completed releases are recorded. Interrupted releases and forced
252
+ * releases after lock storage becomes unhealthy are not.
253
+ *
254
+ * @stability unstable
255
+ * @category metrics
256
+ * @since 4.0.0
257
+ */
258
+ export const shardReleaseDuration = Metric.timer("effect_cluster_shard_release", {
259
+ description: "Time taken to release a shard, including entity teardown, retries and lock storage recovery"
260
+ })
@@ -24,7 +24,7 @@ import * as Rpc from "../rpc/Rpc.ts"
24
24
  import { ClientAbort } from "../rpc/RpcSchema.ts"
25
25
  import * as Schedule from "../Schedule.ts"
26
26
  import * as Schema from "../Schema.ts"
27
- import type * as Scope from "../Scope.ts"
27
+ import * as Scope from "../Scope.ts"
28
28
  import * as Semaphore from "../Semaphore.ts"
29
29
  import * as Activity from "../workflow/Activity.ts"
30
30
  import * as DurableClock from "../workflow/DurableClock.ts"
@@ -135,11 +135,21 @@ export const make = Effect.gen(function*() {
135
135
  // Rebuilds share an activation; overlapping activations have separate results.
136
136
  // Weak keys do not retain scopes, but contexts captured by clients, activities,
137
137
  // or finalizers can keep a closed scope (and its results) reachable until later.
138
- const pendingByActivation = new WeakMap<Scope.Scope, {
139
- readonly workflowName: string
140
- readonly executionId: string
141
- readonly results: Map<string, Exit.Exit<unknown, unknown>>
142
- }>()
138
+ const pendingByActivation = new WeakMap<Scope.Scope, ActivationState>()
139
+ // Closes the scopes retained by suspended runs. The latest run already closed
140
+ // its own scope with its real exit, so earlier finalizers observe success and
141
+ // skip superseded compensations. Abandonment releases owner-local resources
142
+ // without running durable finalizers, so the run can replay elsewhere.
143
+ const closeRuns = (state: ActivationState, abandoned: boolean) =>
144
+ Effect.suspend(() => {
145
+ const scope = state.scope
146
+ if (abandoned) {
147
+ for (const instance of state.instances) instance.abandoned = true
148
+ }
149
+ state.instances.clear()
150
+ state.scope = Scope.makeUnsafe()
151
+ return Scope.close(scope, Exit.void)
152
+ })
143
153
  const clients = yield* RcMap.make({
144
154
  lookup: Effect.fnUntraced(function*(workflowName: string) {
145
155
  const entity = entities.get(workflowName)
@@ -374,26 +384,25 @@ export const make = Effect.gen(function*() {
374
384
  // `Suspended`. Replies are only observed on the runner that saves them, so
375
385
  // callers on other runners, and any failure here, leave delivery to the
376
386
  // caller's retry schedule.
377
- const awaitComplete = (workflow: Workflow.Any, executionId: string) =>
378
- Effect.gen(function*() {
379
- const address = entityAddressFor({ workflow, entityType: `Workflow/${workflow._tag}`, executionId })
380
- if (!sharding.hasShardId(address.shardId)) return yield* Effect.never
381
- const requestId = yield* storage.requestIdForPrimaryKey({ address, tag: "run", id: "" })
382
- if (Option.isNone(requestId)) return yield* Effect.never
383
- const request = Envelope.makeRequest<any>({
384
- requestId: requestId.value,
385
- address,
386
- tag: "run",
387
- payload: {},
388
- headers: Headers.empty
389
- })
390
- // A replay that suspends again re-arms the wait, so it does not spend a
391
- // step of the caller's retry schedule.
392
- let settled = false
393
- while (!settled) {
394
- settled = yield* awaitRunReply(workflow, request, (reply) => !isSuspendedReply(reply))
395
- }
396
- }).pipe(Effect.catchCause(() => Effect.never))
387
+ const awaitComplete = Effect.fnUntraced(function*(workflow: Workflow.Any, executionId: string) {
388
+ const address = entityAddressFor({ workflow, entityType: `Workflow/${workflow._tag}`, executionId })
389
+ if (!sharding.hasShardId(address.shardId)) return yield* Effect.never
390
+ const requestId = yield* storage.requestIdForPrimaryKey({ address, tag: "run", id: "" })
391
+ if (Option.isNone(requestId)) return yield* Effect.never
392
+ const request = Envelope.makeRequest<any>({
393
+ requestId: requestId.value,
394
+ address,
395
+ tag: "run",
396
+ payload: {},
397
+ headers: Headers.empty
398
+ })
399
+ // A replay that suspends again re-arms the wait, so it does not spend a
400
+ // step of the caller's retry schedule.
401
+ let settled = false
402
+ while (!settled) {
403
+ settled = yield* awaitRunReply(workflow, request, (reply) => !isSuspendedReply(reply))
404
+ }
405
+ }, Effect.catchCause(() => Effect.never))
397
406
 
398
407
  const interrupt = Effect.fnUntraced(
399
408
  function*(workflow: Workflow.Any, executionId: string) {
@@ -465,7 +474,14 @@ export const make = Effect.gen(function*() {
465
474
  (decoded.exit._tag === "Success" ? decoded.exit.value : decoded.exit) as Exit.Exit<unknown, unknown>
466
475
  )
467
476
  }
468
- pending = { workflowName: workflow._tag, executionId, results }
477
+ pending = {
478
+ workflowName: workflow._tag,
479
+ executionId,
480
+ results,
481
+ instances: new Set(),
482
+ scope: Scope.makeUnsafe()
483
+ }
484
+ yield* Scope.addFinalizer(activation, closeRuns(pending, true))
469
485
  pendingByActivation.set(activation, pending)
470
486
  }
471
487
  // Retain awaited names through reply persistence, including suspension.
@@ -476,24 +492,34 @@ export const make = Effect.gen(function*() {
476
492
  // Activity awaits must wake the run after suspension without preempting it.
477
493
  readonly activityAwaits: Map<string, number>
478
494
  } | undefined
479
- // Concurrent wakes share one wait for the current run to publish its reply.
480
- // Explicit wakes cannot be dropped: operator resume bypasses the gate;
481
- // InterruptSignal enters it only on a fresh entity, with no run to wait for.
495
+ // Concurrent automatic wakes share one wait for the current run to
496
+ // publish its reply. Explicit wakes cannot be dropped, because an
497
+ // automatic wake skips the reset of a failure suspension, so they
498
+ // wait outside the gate. Operator resume does not use the gate.
482
499
  const resumeGate = Semaphore.makeUnsafe(1)
500
+ const waitForCurrentRunReply = Effect.suspend(() =>
501
+ currentRun ? waitForRunReply(workflow, currentRun.request) : Effect.void
502
+ )
483
503
  const resumeCurrentRun = (mode: WakeMode) =>
484
- Effect.suspend(() =>
485
- resumeGate.withPermitsIfAvailable(1)(
486
- currentRun ? waitForRunReply(workflow, currentRun.request) : Effect.void
487
- )
488
- ).pipe(
489
- // Release the gate before reset can start another run, so later
490
- // completions can wake that replay.
491
- Effect.flatMap((waited) => Option.isSome(waited) ? resume(workflow, executionId, mode) : Effect.void),
492
- ensureSuccess
504
+ ensureSuccess(
505
+ mode === "explicit"
506
+ ? Effect.andThen(waitForCurrentRunReply, resume(workflow, executionId, mode))
507
+ : resumeGate.withPermitsIfAvailable(1)(waitForCurrentRunReply).pipe(
508
+ // Release the gate before reset can start another run, so later
509
+ // completions can wake that replay.
510
+ Effect.flatMap((waited) =>
511
+ Option.isSome(waited) ? resume(workflow, executionId, mode) : Effect.void
512
+ )
513
+ )
493
514
  )
494
515
  return {
495
516
  run: (request: Entity.Request<any>) => {
496
- const instance = WorkflowEngine.WorkflowInstance.initial(workflow, executionId)
517
+ // Each run gets a fresh scope under the activation's parent, so
518
+ // replays rebuild compensations while suspended runs keep theirs.
519
+ const instance = WorkflowEngine.WorkflowInstance.initial(workflow, executionId, {
520
+ scope: Scope.forkUnsafe(pending.scope)
521
+ })
522
+ pending.instances.add(instance)
497
523
  currentRun = { request, instance, activityAwaits: new Map() }
498
524
  const parent = (request.payload as any)[payloadParentKey] as
499
525
  | { workflowName: string; executionId: string; detached?: boolean }
@@ -533,6 +559,11 @@ export const make = Effect.gen(function*() {
533
559
  )
534
560
  }),
535
561
  Workflow.intoResult,
562
+ Effect.onExit((exit) =>
563
+ Exit.isSuccess(exit) && exit.value._tag === "Suspended"
564
+ ? Effect.void
565
+ : closeRuns(pending, instance.abandoned)
566
+ ),
536
567
  (effect) => deferredState.trackRun(instance, effect),
537
568
  // Request middleware and local callers may carry another entity's context.
538
569
  Effect.provideService(CurrentActivationScope, activation)
@@ -591,8 +622,10 @@ export const make = Effect.gen(function*() {
591
622
  // a later await would require waiting for its reply before reset.
592
623
  // A run completing its own deferred also reads it from the cache
593
624
  // when it awaits later, unless an activity is already parked on it.
625
+ // A run only reads InterruptSignal while suspending, so an interrupt
626
+ // always waits for the current run's reply before it resets the run.
594
627
  const wake = Effect.suspend(() =>
595
- currentRun && !currentRun.instance.awaitedDeferreds.has(payload.name)
628
+ currentRun && mode === "automatic" && !currentRun.instance.awaitedDeferreds.has(payload.name)
596
629
  ? currentRun.activityAwaits.has(payload.name)
597
630
  // Hold an activity wake until the run has published its reply.
598
631
  ? resumeCurrentRun(mode)
@@ -909,6 +942,16 @@ const DeferredRpc = Rpc.make("deferred", {
909
942
 
910
943
  type WakeMode = "explicit" | "automatic"
911
944
 
945
+ interface ActivationState {
946
+ readonly workflowName: string
947
+ readonly executionId: string
948
+ readonly results: Map<string, Exit.Exit<unknown, unknown>>
949
+ // Every run forks its scope from here, so runs that suspended keep their
950
+ // resources and durable finalizers until the execution finishes.
951
+ scope: Scope.Closeable
952
+ readonly instances: Set<WorkflowEngine.WorkflowInstance["Service"]>
953
+ }
954
+
912
955
  const isSuspendedReply = (reply: WithExitEncoded<Workflow.ResultEncoded<any, any>>) =>
913
956
  reply.exit._tag === "Success" && reply.exit.value._tag === "Suspended"
914
957