@smthrs/flow 0.0.0-stage → 1.0.0-rc.12

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 (654) hide show
  1. package/CHANGELOG.md +161 -0
  2. package/LICENSE +21 -0
  3. package/README.md +212 -2
  4. package/THIRD_PARTY_NOTICES.md +52 -0
  5. package/dist/cjs/Action/Action.d.ts +250 -0
  6. package/dist/cjs/Action/Action.d.ts.map +1 -0
  7. package/dist/cjs/Action/Action.js +42 -0
  8. package/dist/cjs/Action/Action.js.map +7 -0
  9. package/dist/cjs/Action/AttemptTimedOut.d.ts +33 -0
  10. package/dist/cjs/Action/AttemptTimedOut.d.ts.map +1 -0
  11. package/dist/cjs/Action/AttemptTimedOut.js +51 -0
  12. package/dist/cjs/Action/AttemptTimedOut.js.map +7 -0
  13. package/dist/cjs/Action/BoundaryMode.d.ts +29 -0
  14. package/dist/cjs/Action/BoundaryMode.d.ts.map +1 -0
  15. package/dist/cjs/Action/BoundaryMode.js +36 -0
  16. package/dist/cjs/Action/BoundaryMode.js.map +7 -0
  17. package/dist/cjs/Action/CacheEnvironment.d.ts +158 -0
  18. package/dist/cjs/Action/CacheEnvironment.d.ts.map +1 -0
  19. package/dist/cjs/Action/CacheEnvironment.js +57 -0
  20. package/dist/cjs/Action/CacheEnvironment.js.map +7 -0
  21. package/dist/cjs/Action/ConcurrentKeylessDispatch.d.ts +34 -0
  22. package/dist/cjs/Action/ConcurrentKeylessDispatch.d.ts.map +1 -0
  23. package/dist/cjs/Action/ConcurrentKeylessDispatch.js +46 -0
  24. package/dist/cjs/Action/ConcurrentKeylessDispatch.js.map +7 -0
  25. package/dist/cjs/Action/Context.d.ts +131 -0
  26. package/dist/cjs/Action/Context.d.ts.map +1 -0
  27. package/dist/cjs/Action/Context.js +68 -0
  28. package/dist/cjs/Action/Context.js.map +7 -0
  29. package/dist/cjs/Action/DuplicateImplementation.d.ts +20 -0
  30. package/dist/cjs/Action/DuplicateImplementation.d.ts.map +1 -0
  31. package/dist/cjs/Action/DuplicateImplementation.js +46 -0
  32. package/dist/cjs/Action/DuplicateImplementation.js.map +7 -0
  33. package/dist/cjs/Action/FileBoundary.d.ts +59 -0
  34. package/dist/cjs/Action/FileBoundary.d.ts.map +1 -0
  35. package/dist/cjs/Action/FileBoundary.js +81 -0
  36. package/dist/cjs/Action/FileBoundary.js.map +7 -0
  37. package/dist/cjs/Action/FileInput.d.ts +28 -0
  38. package/dist/cjs/Action/FileInput.d.ts.map +1 -0
  39. package/dist/cjs/Action/FileInput.js +42 -0
  40. package/dist/cjs/Action/FileInput.js.map +7 -0
  41. package/dist/cjs/Action/Filegroup.d.ts +16 -0
  42. package/dist/cjs/Action/Filegroup.d.ts.map +1 -0
  43. package/dist/cjs/Action/Filegroup.js +27 -0
  44. package/dist/cjs/Action/Filegroup.js.map +7 -0
  45. package/dist/cjs/Action/Glob.d.ts +8 -0
  46. package/dist/cjs/Action/Glob.d.ts.map +1 -0
  47. package/dist/cjs/Action/Glob.js +28 -0
  48. package/dist/cjs/Action/Glob.js.map +7 -0
  49. package/dist/cjs/Action/ImplementationVersionMismatch.d.ts +26 -0
  50. package/dist/cjs/Action/ImplementationVersionMismatch.d.ts.map +1 -0
  51. package/dist/cjs/Action/ImplementationVersionMismatch.js +45 -0
  52. package/dist/cjs/Action/ImplementationVersionMismatch.js.map +7 -0
  53. package/dist/cjs/Action/Implementations.d.ts +114 -0
  54. package/dist/cjs/Action/Implementations.d.ts.map +1 -0
  55. package/dist/cjs/Action/Implementations.js +65 -0
  56. package/dist/cjs/Action/Implementations.js.map +7 -0
  57. package/dist/cjs/Action/InfraInterrupt.d.ts +26 -0
  58. package/dist/cjs/Action/InfraInterrupt.d.ts.map +1 -0
  59. package/dist/cjs/Action/InfraInterrupt.js +46 -0
  60. package/dist/cjs/Action/InfraInterrupt.js.map +7 -0
  61. package/dist/cjs/Action/InfraInterruptRetriesExhausted.d.ts +33 -0
  62. package/dist/cjs/Action/InfraInterruptRetriesExhausted.d.ts.map +1 -0
  63. package/dist/cjs/Action/InfraInterruptRetriesExhausted.js +54 -0
  64. package/dist/cjs/Action/InfraInterruptRetriesExhausted.js.map +7 -0
  65. package/dist/cjs/Action/IrreversibleRetryRequiresIdempotencyKey.d.ts +26 -0
  66. package/dist/cjs/Action/IrreversibleRetryRequiresIdempotencyKey.d.ts.map +1 -0
  67. package/dist/cjs/Action/IrreversibleRetryRequiresIdempotencyKey.js +47 -0
  68. package/dist/cjs/Action/IrreversibleRetryRequiresIdempotencyKey.js.map +7 -0
  69. package/dist/cjs/Action/StepIdentity.d.ts +153 -0
  70. package/dist/cjs/Action/StepIdentity.d.ts.map +1 -0
  71. package/dist/cjs/Action/StepIdentity.js +75 -0
  72. package/dist/cjs/Action/StepIdentity.js.map +7 -0
  73. package/dist/cjs/Action/TreeArtifact.d.ts +8 -0
  74. package/dist/cjs/Action/TreeArtifact.d.ts.map +1 -0
  75. package/dist/cjs/Action/TreeArtifact.js +25 -0
  76. package/dist/cjs/Action/TreeArtifact.js.map +7 -0
  77. package/dist/cjs/Action/TypeId.d.ts +8 -0
  78. package/dist/cjs/Action/TypeId.d.ts.map +1 -0
  79. package/dist/cjs/Action/TypeId.js +25 -0
  80. package/dist/cjs/Action/TypeId.js.map +7 -0
  81. package/dist/cjs/Action/UncanonicalIdempotencyKey.d.ts +32 -0
  82. package/dist/cjs/Action/UncanonicalIdempotencyKey.d.ts.map +1 -0
  83. package/dist/cjs/Action/UncanonicalIdempotencyKey.js +51 -0
  84. package/dist/cjs/Action/UncanonicalIdempotencyKey.js.map +7 -0
  85. package/dist/cjs/Action/idempotencyKey.d.ts +21 -0
  86. package/dist/cjs/Action/idempotencyKey.d.ts.map +1 -0
  87. package/dist/cjs/Action/idempotencyKey.js +59 -0
  88. package/dist/cjs/Action/idempotencyKey.js.map +7 -0
  89. package/dist/cjs/Action/index.d.ts +29 -0
  90. package/dist/cjs/Action/index.d.ts.map +1 -0
  91. package/dist/cjs/Action/index.js +60 -0
  92. package/dist/cjs/Action/index.js.map +7 -0
  93. package/dist/cjs/Action/make.d.ts +128 -0
  94. package/dist/cjs/Action/make.d.ts.map +1 -0
  95. package/dist/cjs/Action/make.js +387 -0
  96. package/dist/cjs/Action/make.js.map +7 -0
  97. package/dist/cjs/Action/raceAll.d.ts +21 -0
  98. package/dist/cjs/Action/raceAll.d.ts.map +1 -0
  99. package/dist/cjs/Action/raceAll.js +46 -0
  100. package/dist/cjs/Action/raceAll.js.map +7 -0
  101. package/dist/cjs/Action/retry.d.ts +19 -0
  102. package/dist/cjs/Action/retry.d.ts.map +1 -0
  103. package/dist/cjs/Action/retry.js +75 -0
  104. package/dist/cjs/Action/retry.js.map +7 -0
  105. package/dist/cjs/Deadline.d.ts +110 -0
  106. package/dist/cjs/Deadline.d.ts.map +1 -0
  107. package/dist/cjs/Deadline.js +112 -0
  108. package/dist/cjs/Deadline.js.map +7 -0
  109. package/dist/cjs/DurableClock.d.ts +60 -0
  110. package/dist/cjs/DurableClock.d.ts.map +1 -0
  111. package/dist/cjs/DurableClock.js +107 -0
  112. package/dist/cjs/DurableClock.js.map +7 -0
  113. package/dist/cjs/DurableDeferred.d.ts +311 -0
  114. package/dist/cjs/DurableDeferred.d.ts.map +1 -0
  115. package/dist/cjs/DurableDeferred.js +322 -0
  116. package/dist/cjs/DurableDeferred.js.map +7 -0
  117. package/dist/cjs/DurableQueue.d.ts +160 -0
  118. package/dist/cjs/DurableQueue.d.ts.map +1 -0
  119. package/dist/cjs/DurableQueue.js +229 -0
  120. package/dist/cjs/DurableQueue.js.map +7 -0
  121. package/dist/cjs/ExternalJob.d.ts +179 -0
  122. package/dist/cjs/ExternalJob.d.ts.map +1 -0
  123. package/dist/cjs/ExternalJob.js +339 -0
  124. package/dist/cjs/ExternalJob.js.map +7 -0
  125. package/dist/cjs/Fault.d.ts +131 -0
  126. package/dist/cjs/Fault.d.ts.map +1 -0
  127. package/dist/cjs/Fault.js +157 -0
  128. package/dist/cjs/Fault.js.map +7 -0
  129. package/dist/cjs/Flow/Annotations.d.ts +245 -0
  130. package/dist/cjs/Flow/Annotations.d.ts.map +1 -0
  131. package/dist/cjs/Flow/Annotations.js +72 -0
  132. package/dist/cjs/Flow/Annotations.js.map +7 -0
  133. package/dist/cjs/Flow/CapabilityCeiling.d.ts +21 -0
  134. package/dist/cjs/Flow/CapabilityCeiling.d.ts.map +1 -0
  135. package/dist/cjs/Flow/CapabilityCeiling.js +49 -0
  136. package/dist/cjs/Flow/CapabilityCeiling.js.map +7 -0
  137. package/dist/cjs/Flow/DeadlineExceeded.d.ts +33 -0
  138. package/dist/cjs/Flow/DeadlineExceeded.d.ts.map +1 -0
  139. package/dist/cjs/Flow/DeadlineExceeded.js +52 -0
  140. package/dist/cjs/Flow/DeadlineExceeded.js.map +7 -0
  141. package/dist/cjs/Flow/ExecutionIdRequired.d.ts +25 -0
  142. package/dist/cjs/Flow/ExecutionIdRequired.d.ts.map +1 -0
  143. package/dist/cjs/Flow/ExecutionIdRequired.js +46 -0
  144. package/dist/cjs/Flow/ExecutionIdRequired.js.map +7 -0
  145. package/dist/cjs/Flow/ExecutionIds.d.ts +80 -0
  146. package/dist/cjs/Flow/ExecutionIds.d.ts.map +1 -0
  147. package/dist/cjs/Flow/ExecutionIds.js +66 -0
  148. package/dist/cjs/Flow/ExecutionIds.js.map +7 -0
  149. package/dist/cjs/Flow/Flow.d.ts +422 -0
  150. package/dist/cjs/Flow/Flow.d.ts.map +1 -0
  151. package/dist/cjs/Flow/Flow.js +17 -0
  152. package/dist/cjs/Flow/Flow.js.map +7 -0
  153. package/dist/cjs/Flow/MaxRoundsExceeded.d.ts +35 -0
  154. package/dist/cjs/Flow/MaxRoundsExceeded.d.ts.map +1 -0
  155. package/dist/cjs/Flow/MaxRoundsExceeded.js +50 -0
  156. package/dist/cjs/Flow/MaxRoundsExceeded.js.map +7 -0
  157. package/dist/cjs/Flow/Outcome.d.ts +162 -0
  158. package/dist/cjs/Flow/Outcome.d.ts.map +1 -0
  159. package/dist/cjs/Flow/Outcome.js +80 -0
  160. package/dist/cjs/Flow/Outcome.js.map +7 -0
  161. package/dist/cjs/Flow/Result.d.ts +186 -0
  162. package/dist/cjs/Flow/Result.d.ts.map +1 -0
  163. package/dist/cjs/Flow/Result.js +159 -0
  164. package/dist/cjs/Flow/Result.js.map +7 -0
  165. package/dist/cjs/Flow/Runtime.d.ts +98 -0
  166. package/dist/cjs/Flow/Runtime.d.ts.map +1 -0
  167. package/dist/cjs/Flow/Runtime.js +186 -0
  168. package/dist/cjs/Flow/Runtime.js.map +7 -0
  169. package/dist/cjs/Flow/TypeId.d.ts +8 -0
  170. package/dist/cjs/Flow/TypeId.d.ts.map +1 -0
  171. package/dist/cjs/Flow/TypeId.js +25 -0
  172. package/dist/cjs/Flow/TypeId.js.map +7 -0
  173. package/dist/cjs/Flow/index.d.ts +17 -0
  174. package/dist/cjs/Flow/index.d.ts.map +1 -0
  175. package/dist/cjs/Flow/index.js +29 -0
  176. package/dist/cjs/Flow/index.js.map +7 -0
  177. package/dist/cjs/Flow/internal.d.ts +34 -0
  178. package/dist/cjs/Flow/internal.d.ts.map +1 -0
  179. package/dist/cjs/Flow/internal.js +187 -0
  180. package/dist/cjs/Flow/internal.js.map +7 -0
  181. package/dist/cjs/Flow/make.d.ts +135 -0
  182. package/dist/cjs/Flow/make.d.ts.map +1 -0
  183. package/dist/cjs/Flow/make.js +107 -0
  184. package/dist/cjs/Flow/make.js.map +7 -0
  185. package/dist/cjs/FlowRuntime/CancelRequestFailed.d.ts +55 -0
  186. package/dist/cjs/FlowRuntime/CancelRequestFailed.d.ts.map +1 -0
  187. package/dist/cjs/FlowRuntime/CancelRequestFailed.js +51 -0
  188. package/dist/cjs/FlowRuntime/CancelRequestFailed.js.map +7 -0
  189. package/dist/cjs/FlowRuntime/ExecutionIdentityConflict.d.ts +23 -0
  190. package/dist/cjs/FlowRuntime/ExecutionIdentityConflict.d.ts.map +1 -0
  191. package/dist/cjs/FlowRuntime/ExecutionIdentityConflict.js +55 -0
  192. package/dist/cjs/FlowRuntime/ExecutionIdentityConflict.js.map +7 -0
  193. package/dist/cjs/FlowRuntime/FlowCycleDetected.d.ts +28 -0
  194. package/dist/cjs/FlowRuntime/FlowCycleDetected.d.ts.map +1 -0
  195. package/dist/cjs/FlowRuntime/FlowCycleDetected.js +49 -0
  196. package/dist/cjs/FlowRuntime/FlowCycleDetected.js.map +7 -0
  197. package/dist/cjs/FlowRuntime/FlowExecutionNotFound.d.ts +38 -0
  198. package/dist/cjs/FlowRuntime/FlowExecutionNotFound.d.ts.map +1 -0
  199. package/dist/cjs/FlowRuntime/FlowExecutionNotFound.js +53 -0
  200. package/dist/cjs/FlowRuntime/FlowExecutionNotFound.js.map +7 -0
  201. package/dist/cjs/FlowRuntime/FlowInstance.d.ts +115 -0
  202. package/dist/cjs/FlowRuntime/FlowInstance.d.ts.map +1 -0
  203. package/dist/cjs/FlowRuntime/FlowInstance.js +37 -0
  204. package/dist/cjs/FlowRuntime/FlowInstance.js.map +7 -0
  205. package/dist/cjs/FlowRuntime/FlowRuntime.d.ts +204 -0
  206. package/dist/cjs/FlowRuntime/FlowRuntime.d.ts.map +1 -0
  207. package/dist/cjs/FlowRuntime/FlowRuntime.js +37 -0
  208. package/dist/cjs/FlowRuntime/FlowRuntime.js.map +7 -0
  209. package/dist/cjs/FlowRuntime/NodeRecord.d.ts +177 -0
  210. package/dist/cjs/FlowRuntime/NodeRecord.d.ts.map +1 -0
  211. package/dist/cjs/FlowRuntime/NodeRecord.js +17 -0
  212. package/dist/cjs/FlowRuntime/NodeRecord.js.map +7 -0
  213. package/dist/cjs/FlowRuntime/WaitingAnnotation.d.ts +69 -0
  214. package/dist/cjs/FlowRuntime/WaitingAnnotation.d.ts.map +1 -0
  215. package/dist/cjs/FlowRuntime/WaitingAnnotation.js +53 -0
  216. package/dist/cjs/FlowRuntime/WaitingAnnotation.js.map +7 -0
  217. package/dist/cjs/FlowRuntime/index.d.ts +14 -0
  218. package/dist/cjs/FlowRuntime/index.d.ts.map +1 -0
  219. package/dist/cjs/FlowRuntime/index.js +26 -0
  220. package/dist/cjs/FlowRuntime/index.js.map +7 -0
  221. package/dist/cjs/Graph.d.ts +325 -0
  222. package/dist/cjs/Graph.d.ts.map +1 -0
  223. package/dist/cjs/Graph.js +1020 -0
  224. package/dist/cjs/Graph.js.map +7 -0
  225. package/dist/cjs/HumanTask.d.ts +442 -0
  226. package/dist/cjs/HumanTask.d.ts.map +1 -0
  227. package/dist/cjs/HumanTask.js +413 -0
  228. package/dist/cjs/HumanTask.js.map +7 -0
  229. package/dist/cjs/Interpreter.d.ts +223 -0
  230. package/dist/cjs/Interpreter.d.ts.map +1 -0
  231. package/dist/cjs/Interpreter.js +908 -0
  232. package/dist/cjs/Interpreter.js.map +7 -0
  233. package/dist/cjs/Poll.d.ts +240 -0
  234. package/dist/cjs/Poll.d.ts.map +1 -0
  235. package/dist/cjs/Poll.js +154 -0
  236. package/dist/cjs/Poll.js.map +7 -0
  237. package/dist/cjs/RetryPolicy.d.ts +273 -0
  238. package/dist/cjs/RetryPolicy.d.ts.map +1 -0
  239. package/dist/cjs/RetryPolicy.js +251 -0
  240. package/dist/cjs/RetryPolicy.js.map +7 -0
  241. package/dist/cjs/Sleep.d.ts +98 -0
  242. package/dist/cjs/Sleep.d.ts.map +1 -0
  243. package/dist/cjs/Sleep.js +141 -0
  244. package/dist/cjs/Sleep.js.map +7 -0
  245. package/dist/cjs/Stall.d.ts +173 -0
  246. package/dist/cjs/Stall.d.ts.map +1 -0
  247. package/dist/cjs/Stall.js +92 -0
  248. package/dist/cjs/Stall.js.map +7 -0
  249. package/dist/cjs/WaitFor.d.ts +109 -0
  250. package/dist/cjs/WaitFor.d.ts.map +1 -0
  251. package/dist/cjs/WaitFor.js +117 -0
  252. package/dist/cjs/WaitFor.js.map +7 -0
  253. package/dist/cjs/index.d.ts +107 -0
  254. package/dist/cjs/index.d.ts.map +1 -0
  255. package/dist/cjs/index.js +69 -0
  256. package/dist/cjs/index.js.map +7 -0
  257. package/dist/cjs/internal/BoundedJson.d.ts +48 -0
  258. package/dist/cjs/internal/BoundedJson.d.ts.map +1 -0
  259. package/dist/cjs/internal/BoundedJson.js +96 -0
  260. package/dist/cjs/internal/BoundedJson.js.map +7 -0
  261. package/dist/cjs/internal/DeclarationSite.d.ts +135 -0
  262. package/dist/cjs/internal/DeclarationSite.d.ts.map +1 -0
  263. package/dist/cjs/internal/DeclarationSite.js +89 -0
  264. package/dist/cjs/internal/DeclarationSite.js.map +7 -0
  265. package/dist/cjs/internal/Declarations.d.ts +35 -0
  266. package/dist/cjs/internal/Declarations.d.ts.map +1 -0
  267. package/dist/cjs/internal/Declarations.js +50 -0
  268. package/dist/cjs/internal/Declarations.js.map +7 -0
  269. package/dist/cjs/internal/ExecutionMiddleware.d.ts +21 -0
  270. package/dist/cjs/internal/ExecutionMiddleware.d.ts.map +1 -0
  271. package/dist/cjs/internal/ExecutionMiddleware.js +39 -0
  272. package/dist/cjs/internal/ExecutionMiddleware.js.map +7 -0
  273. package/dist/cjs/internal/JsonSchemaSubset.d.ts +133 -0
  274. package/dist/cjs/internal/JsonSchemaSubset.d.ts.map +1 -0
  275. package/dist/cjs/internal/JsonSchemaSubset.js +229 -0
  276. package/dist/cjs/internal/JsonSchemaSubset.js.map +7 -0
  277. package/dist/cjs/internal/OutcomeMarker.d.ts +18 -0
  278. package/dist/cjs/internal/OutcomeMarker.d.ts.map +1 -0
  279. package/dist/cjs/internal/OutcomeMarker.js +27 -0
  280. package/dist/cjs/internal/OutcomeMarker.js.map +7 -0
  281. package/dist/cjs/package.json +1 -0
  282. package/dist/esm/Action/Action.d.ts +250 -0
  283. package/dist/esm/Action/Action.d.ts.map +1 -0
  284. package/dist/esm/Action/Action.js +30 -0
  285. package/dist/esm/Action/Action.js.map +1 -0
  286. package/dist/esm/Action/AttemptTimedOut.d.ts +33 -0
  287. package/dist/esm/Action/AttemptTimedOut.d.ts.map +1 -0
  288. package/dist/esm/Action/AttemptTimedOut.js +32 -0
  289. package/dist/esm/Action/AttemptTimedOut.js.map +1 -0
  290. package/dist/esm/Action/BoundaryMode.d.ts +29 -0
  291. package/dist/esm/Action/BoundaryMode.d.ts.map +1 -0
  292. package/dist/esm/Action/BoundaryMode.js +23 -0
  293. package/dist/esm/Action/BoundaryMode.js.map +1 -0
  294. package/dist/esm/Action/CacheEnvironment.d.ts +158 -0
  295. package/dist/esm/Action/CacheEnvironment.d.ts.map +1 -0
  296. package/dist/esm/Action/CacheEnvironment.js +130 -0
  297. package/dist/esm/Action/CacheEnvironment.js.map +1 -0
  298. package/dist/esm/Action/ConcurrentKeylessDispatch.d.ts +34 -0
  299. package/dist/esm/Action/ConcurrentKeylessDispatch.d.ts.map +1 -0
  300. package/dist/esm/Action/ConcurrentKeylessDispatch.js +33 -0
  301. package/dist/esm/Action/ConcurrentKeylessDispatch.js.map +1 -0
  302. package/dist/esm/Action/Context.d.ts +131 -0
  303. package/dist/esm/Action/Context.d.ts.map +1 -0
  304. package/dist/esm/Action/Context.js +99 -0
  305. package/dist/esm/Action/Context.js.map +1 -0
  306. package/dist/esm/Action/DuplicateImplementation.d.ts +20 -0
  307. package/dist/esm/Action/DuplicateImplementation.d.ts.map +1 -0
  308. package/dist/esm/Action/DuplicateImplementation.js +20 -0
  309. package/dist/esm/Action/DuplicateImplementation.js.map +1 -0
  310. package/dist/esm/Action/FileBoundary.d.ts +59 -0
  311. package/dist/esm/Action/FileBoundary.d.ts.map +1 -0
  312. package/dist/esm/Action/FileBoundary.js +60 -0
  313. package/dist/esm/Action/FileBoundary.js.map +1 -0
  314. package/dist/esm/Action/FileInput.d.ts +28 -0
  315. package/dist/esm/Action/FileInput.d.ts.map +1 -0
  316. package/dist/esm/Action/FileInput.js +32 -0
  317. package/dist/esm/Action/FileInput.js.map +1 -0
  318. package/dist/esm/Action/Filegroup.d.ts +16 -0
  319. package/dist/esm/Action/Filegroup.d.ts.map +1 -0
  320. package/dist/esm/Action/Filegroup.js +15 -0
  321. package/dist/esm/Action/Filegroup.js.map +1 -0
  322. package/dist/esm/Action/Glob.d.ts +8 -0
  323. package/dist/esm/Action/Glob.d.ts.map +1 -0
  324. package/dist/esm/Action/Glob.js +7 -0
  325. package/dist/esm/Action/Glob.js.map +1 -0
  326. package/dist/esm/Action/ImplementationVersionMismatch.d.ts +26 -0
  327. package/dist/esm/Action/ImplementationVersionMismatch.d.ts.map +1 -0
  328. package/dist/esm/Action/ImplementationVersionMismatch.js +24 -0
  329. package/dist/esm/Action/ImplementationVersionMismatch.js.map +1 -0
  330. package/dist/esm/Action/Implementations.d.ts +114 -0
  331. package/dist/esm/Action/Implementations.d.ts.map +1 -0
  332. package/dist/esm/Action/Implementations.js +94 -0
  333. package/dist/esm/Action/Implementations.js.map +1 -0
  334. package/dist/esm/Action/InfraInterrupt.d.ts +26 -0
  335. package/dist/esm/Action/InfraInterrupt.d.ts.map +1 -0
  336. package/dist/esm/Action/InfraInterrupt.js +25 -0
  337. package/dist/esm/Action/InfraInterrupt.js.map +1 -0
  338. package/dist/esm/Action/InfraInterruptRetriesExhausted.d.ts +33 -0
  339. package/dist/esm/Action/InfraInterruptRetriesExhausted.d.ts.map +1 -0
  340. package/dist/esm/Action/InfraInterruptRetriesExhausted.js +32 -0
  341. package/dist/esm/Action/InfraInterruptRetriesExhausted.js.map +1 -0
  342. package/dist/esm/Action/IrreversibleRetryRequiresIdempotencyKey.d.ts +26 -0
  343. package/dist/esm/Action/IrreversibleRetryRequiresIdempotencyKey.d.ts.map +1 -0
  344. package/dist/esm/Action/IrreversibleRetryRequiresIdempotencyKey.js +25 -0
  345. package/dist/esm/Action/IrreversibleRetryRequiresIdempotencyKey.js.map +1 -0
  346. package/dist/esm/Action/StepIdentity.d.ts +153 -0
  347. package/dist/esm/Action/StepIdentity.d.ts.map +1 -0
  348. package/dist/esm/Action/StepIdentity.js +139 -0
  349. package/dist/esm/Action/StepIdentity.js.map +1 -0
  350. package/dist/esm/Action/TreeArtifact.d.ts +8 -0
  351. package/dist/esm/Action/TreeArtifact.d.ts.map +1 -0
  352. package/dist/esm/Action/TreeArtifact.js +7 -0
  353. package/dist/esm/Action/TreeArtifact.js.map +1 -0
  354. package/dist/esm/Action/TypeId.d.ts +8 -0
  355. package/dist/esm/Action/TypeId.d.ts.map +1 -0
  356. package/dist/esm/Action/TypeId.js +9 -0
  357. package/dist/esm/Action/TypeId.js.map +1 -0
  358. package/dist/esm/Action/UncanonicalIdempotencyKey.d.ts +32 -0
  359. package/dist/esm/Action/UncanonicalIdempotencyKey.d.ts.map +1 -0
  360. package/dist/esm/Action/UncanonicalIdempotencyKey.js +31 -0
  361. package/dist/esm/Action/UncanonicalIdempotencyKey.js.map +1 -0
  362. package/dist/esm/Action/idempotencyKey.d.ts +21 -0
  363. package/dist/esm/Action/idempotencyKey.d.ts.map +1 -0
  364. package/dist/esm/Action/idempotencyKey.js +50 -0
  365. package/dist/esm/Action/idempotencyKey.js.map +1 -0
  366. package/dist/esm/Action/index.d.ts +29 -0
  367. package/dist/esm/Action/index.d.ts.map +1 -0
  368. package/dist/esm/Action/index.js +30 -0
  369. package/dist/esm/Action/index.js.map +1 -0
  370. package/dist/esm/Action/make.d.ts +128 -0
  371. package/dist/esm/Action/make.d.ts.map +1 -0
  372. package/dist/esm/Action/make.js +413 -0
  373. package/dist/esm/Action/make.js.map +1 -0
  374. package/dist/esm/Action/raceAll.d.ts +21 -0
  375. package/dist/esm/Action/raceAll.d.ts.map +1 -0
  376. package/dist/esm/Action/raceAll.js +20 -0
  377. package/dist/esm/Action/raceAll.js.map +1 -0
  378. package/dist/esm/Action/retry.d.ts +19 -0
  379. package/dist/esm/Action/retry.d.ts.map +1 -0
  380. package/dist/esm/Action/retry.js +72 -0
  381. package/dist/esm/Action/retry.js.map +1 -0
  382. package/dist/esm/Deadline.d.ts +110 -0
  383. package/dist/esm/Deadline.d.ts.map +1 -0
  384. package/dist/esm/Deadline.js +164 -0
  385. package/dist/esm/Deadline.js.map +1 -0
  386. package/dist/esm/DurableClock.d.ts +60 -0
  387. package/dist/esm/DurableClock.d.ts.map +1 -0
  388. package/dist/esm/DurableClock.js +122 -0
  389. package/dist/esm/DurableClock.js.map +1 -0
  390. package/dist/esm/DurableDeferred.d.ts +311 -0
  391. package/dist/esm/DurableDeferred.d.ts.map +1 -0
  392. package/dist/esm/DurableDeferred.js +357 -0
  393. package/dist/esm/DurableDeferred.js.map +1 -0
  394. package/dist/esm/DurableQueue.d.ts +160 -0
  395. package/dist/esm/DurableQueue.d.ts.map +1 -0
  396. package/dist/esm/DurableQueue.js +303 -0
  397. package/dist/esm/DurableQueue.js.map +1 -0
  398. package/dist/esm/ExternalJob.d.ts +179 -0
  399. package/dist/esm/ExternalJob.d.ts.map +1 -0
  400. package/dist/esm/ExternalJob.js +296 -0
  401. package/dist/esm/ExternalJob.js.map +1 -0
  402. package/dist/esm/Fault.d.ts +131 -0
  403. package/dist/esm/Fault.d.ts.map +1 -0
  404. package/dist/esm/Fault.js +198 -0
  405. package/dist/esm/Fault.js.map +1 -0
  406. package/dist/esm/Flow/Annotations.d.ts +245 -0
  407. package/dist/esm/Flow/Annotations.d.ts.map +1 -0
  408. package/dist/esm/Flow/Annotations.js +110 -0
  409. package/dist/esm/Flow/Annotations.js.map +1 -0
  410. package/dist/esm/Flow/CapabilityCeiling.d.ts +21 -0
  411. package/dist/esm/Flow/CapabilityCeiling.d.ts.map +1 -0
  412. package/dist/esm/Flow/CapabilityCeiling.js +27 -0
  413. package/dist/esm/Flow/CapabilityCeiling.js.map +1 -0
  414. package/dist/esm/Flow/DeadlineExceeded.d.ts +33 -0
  415. package/dist/esm/Flow/DeadlineExceeded.d.ts.map +1 -0
  416. package/dist/esm/Flow/DeadlineExceeded.js +34 -0
  417. package/dist/esm/Flow/DeadlineExceeded.js.map +1 -0
  418. package/dist/esm/Flow/ExecutionIdRequired.d.ts +25 -0
  419. package/dist/esm/Flow/ExecutionIdRequired.d.ts.map +1 -0
  420. package/dist/esm/Flow/ExecutionIdRequired.js +30 -0
  421. package/dist/esm/Flow/ExecutionIdRequired.js.map +1 -0
  422. package/dist/esm/Flow/ExecutionIds.d.ts +80 -0
  423. package/dist/esm/Flow/ExecutionIds.d.ts.map +1 -0
  424. package/dist/esm/Flow/ExecutionIds.js +91 -0
  425. package/dist/esm/Flow/ExecutionIds.js.map +1 -0
  426. package/dist/esm/Flow/Flow.d.ts +422 -0
  427. package/dist/esm/Flow/Flow.d.ts.map +1 -0
  428. package/dist/esm/Flow/Flow.js +3 -0
  429. package/dist/esm/Flow/Flow.js.map +1 -0
  430. package/dist/esm/Flow/MaxRoundsExceeded.d.ts +35 -0
  431. package/dist/esm/Flow/MaxRoundsExceeded.d.ts.map +1 -0
  432. package/dist/esm/Flow/MaxRoundsExceeded.js +34 -0
  433. package/dist/esm/Flow/MaxRoundsExceeded.js.map +1 -0
  434. package/dist/esm/Flow/Outcome.d.ts +162 -0
  435. package/dist/esm/Flow/Outcome.d.ts.map +1 -0
  436. package/dist/esm/Flow/Outcome.js +115 -0
  437. package/dist/esm/Flow/Outcome.js.map +1 -0
  438. package/dist/esm/Flow/Result.d.ts +186 -0
  439. package/dist/esm/Flow/Result.d.ts.map +1 -0
  440. package/dist/esm/Flow/Result.js +171 -0
  441. package/dist/esm/Flow/Result.js.map +1 -0
  442. package/dist/esm/Flow/Runtime.d.ts +98 -0
  443. package/dist/esm/Flow/Runtime.d.ts.map +1 -0
  444. package/dist/esm/Flow/Runtime.js +252 -0
  445. package/dist/esm/Flow/Runtime.js.map +1 -0
  446. package/dist/esm/Flow/TypeId.d.ts +8 -0
  447. package/dist/esm/Flow/TypeId.d.ts.map +1 -0
  448. package/dist/esm/Flow/TypeId.js +9 -0
  449. package/dist/esm/Flow/TypeId.js.map +1 -0
  450. package/dist/esm/Flow/index.d.ts +17 -0
  451. package/dist/esm/Flow/index.d.ts.map +1 -0
  452. package/dist/esm/Flow/index.js +18 -0
  453. package/dist/esm/Flow/index.js.map +1 -0
  454. package/dist/esm/Flow/internal.d.ts +34 -0
  455. package/dist/esm/Flow/internal.d.ts.map +1 -0
  456. package/dist/esm/Flow/internal.js +149 -0
  457. package/dist/esm/Flow/internal.js.map +1 -0
  458. package/dist/esm/Flow/make.d.ts +135 -0
  459. package/dist/esm/Flow/make.d.ts.map +1 -0
  460. package/dist/esm/Flow/make.js +111 -0
  461. package/dist/esm/Flow/make.js.map +1 -0
  462. package/dist/esm/FlowRuntime/CancelRequestFailed.d.ts +55 -0
  463. package/dist/esm/FlowRuntime/CancelRequestFailed.d.ts.map +1 -0
  464. package/dist/esm/FlowRuntime/CancelRequestFailed.js +53 -0
  465. package/dist/esm/FlowRuntime/CancelRequestFailed.js.map +1 -0
  466. package/dist/esm/FlowRuntime/ExecutionIdentityConflict.d.ts +23 -0
  467. package/dist/esm/FlowRuntime/ExecutionIdentityConflict.d.ts.map +1 -0
  468. package/dist/esm/FlowRuntime/ExecutionIdentityConflict.js +24 -0
  469. package/dist/esm/FlowRuntime/ExecutionIdentityConflict.js.map +1 -0
  470. package/dist/esm/FlowRuntime/FlowCycleDetected.d.ts +28 -0
  471. package/dist/esm/FlowRuntime/FlowCycleDetected.d.ts.map +1 -0
  472. package/dist/esm/FlowRuntime/FlowCycleDetected.js +35 -0
  473. package/dist/esm/FlowRuntime/FlowCycleDetected.js.map +1 -0
  474. package/dist/esm/FlowRuntime/FlowExecutionNotFound.d.ts +38 -0
  475. package/dist/esm/FlowRuntime/FlowExecutionNotFound.d.ts.map +1 -0
  476. package/dist/esm/FlowRuntime/FlowExecutionNotFound.js +40 -0
  477. package/dist/esm/FlowRuntime/FlowExecutionNotFound.js.map +1 -0
  478. package/dist/esm/FlowRuntime/FlowInstance.d.ts +115 -0
  479. package/dist/esm/FlowRuntime/FlowInstance.d.ts.map +1 -0
  480. package/dist/esm/FlowRuntime/FlowInstance.js +24 -0
  481. package/dist/esm/FlowRuntime/FlowInstance.js.map +1 -0
  482. package/dist/esm/FlowRuntime/FlowRuntime.d.ts +204 -0
  483. package/dist/esm/FlowRuntime/FlowRuntime.d.ts.map +1 -0
  484. package/dist/esm/FlowRuntime/FlowRuntime.js +34 -0
  485. package/dist/esm/FlowRuntime/FlowRuntime.js.map +1 -0
  486. package/dist/esm/FlowRuntime/NodeRecord.d.ts +177 -0
  487. package/dist/esm/FlowRuntime/NodeRecord.d.ts.map +1 -0
  488. package/dist/esm/FlowRuntime/NodeRecord.js +21 -0
  489. package/dist/esm/FlowRuntime/NodeRecord.js.map +1 -0
  490. package/dist/esm/FlowRuntime/WaitingAnnotation.d.ts +69 -0
  491. package/dist/esm/FlowRuntime/WaitingAnnotation.d.ts.map +1 -0
  492. package/dist/esm/FlowRuntime/WaitingAnnotation.js +53 -0
  493. package/dist/esm/FlowRuntime/WaitingAnnotation.js.map +1 -0
  494. package/dist/esm/FlowRuntime/index.d.ts +14 -0
  495. package/dist/esm/FlowRuntime/index.d.ts.map +1 -0
  496. package/dist/esm/FlowRuntime/index.js +15 -0
  497. package/dist/esm/FlowRuntime/index.js.map +1 -0
  498. package/dist/esm/Graph.d.ts +325 -0
  499. package/dist/esm/Graph.d.ts.map +1 -0
  500. package/dist/esm/Graph.js +1485 -0
  501. package/dist/esm/Graph.js.map +1 -0
  502. package/dist/esm/HumanTask.d.ts +442 -0
  503. package/dist/esm/HumanTask.d.ts.map +1 -0
  504. package/dist/esm/HumanTask.js +798 -0
  505. package/dist/esm/HumanTask.js.map +1 -0
  506. package/dist/esm/Interpreter.d.ts +223 -0
  507. package/dist/esm/Interpreter.d.ts.map +1 -0
  508. package/dist/esm/Interpreter.js +1289 -0
  509. package/dist/esm/Interpreter.js.map +1 -0
  510. package/dist/esm/Poll.d.ts +240 -0
  511. package/dist/esm/Poll.d.ts.map +1 -0
  512. package/dist/esm/Poll.js +289 -0
  513. package/dist/esm/Poll.js.map +1 -0
  514. package/dist/esm/RetryPolicy.d.ts +273 -0
  515. package/dist/esm/RetryPolicy.d.ts.map +1 -0
  516. package/dist/esm/RetryPolicy.js +429 -0
  517. package/dist/esm/RetryPolicy.js.map +1 -0
  518. package/dist/esm/Sleep.d.ts +98 -0
  519. package/dist/esm/Sleep.d.ts.map +1 -0
  520. package/dist/esm/Sleep.js +256 -0
  521. package/dist/esm/Sleep.js.map +1 -0
  522. package/dist/esm/Stall.d.ts +173 -0
  523. package/dist/esm/Stall.d.ts.map +1 -0
  524. package/dist/esm/Stall.js +138 -0
  525. package/dist/esm/Stall.js.map +1 -0
  526. package/dist/esm/WaitFor.d.ts +109 -0
  527. package/dist/esm/WaitFor.d.ts.map +1 -0
  528. package/dist/esm/WaitFor.js +184 -0
  529. package/dist/esm/WaitFor.js.map +1 -0
  530. package/dist/esm/index.d.ts +107 -0
  531. package/dist/esm/index.d.ts.map +1 -0
  532. package/dist/esm/index.js +108 -0
  533. package/dist/esm/index.js.map +1 -0
  534. package/dist/esm/internal/BoundedJson.d.ts +48 -0
  535. package/dist/esm/internal/BoundedJson.d.ts.map +1 -0
  536. package/dist/esm/internal/BoundedJson.js +107 -0
  537. package/dist/esm/internal/BoundedJson.js.map +1 -0
  538. package/dist/esm/internal/DeclarationSite.d.ts +135 -0
  539. package/dist/esm/internal/DeclarationSite.d.ts.map +1 -0
  540. package/dist/esm/internal/DeclarationSite.js +196 -0
  541. package/dist/esm/internal/DeclarationSite.js.map +1 -0
  542. package/dist/esm/internal/Declarations.d.ts +35 -0
  543. package/dist/esm/internal/Declarations.d.ts.map +1 -0
  544. package/dist/esm/internal/Declarations.js +43 -0
  545. package/dist/esm/internal/Declarations.js.map +1 -0
  546. package/dist/esm/internal/ExecutionMiddleware.d.ts +21 -0
  547. package/dist/esm/internal/ExecutionMiddleware.d.ts.map +1 -0
  548. package/dist/esm/internal/ExecutionMiddleware.js +13 -0
  549. package/dist/esm/internal/ExecutionMiddleware.js.map +1 -0
  550. package/dist/esm/internal/JsonSchemaSubset.d.ts +133 -0
  551. package/dist/esm/internal/JsonSchemaSubset.d.ts.map +1 -0
  552. package/dist/esm/internal/JsonSchemaSubset.js +363 -0
  553. package/dist/esm/internal/JsonSchemaSubset.js.map +1 -0
  554. package/dist/esm/internal/OutcomeMarker.d.ts +18 -0
  555. package/dist/esm/internal/OutcomeMarker.d.ts.map +1 -0
  556. package/dist/esm/internal/OutcomeMarker.js +18 -0
  557. package/dist/esm/internal/OutcomeMarker.js.map +1 -0
  558. package/docs/README.md +152 -0
  559. package/docs/api.md +440 -0
  560. package/docs/concepts/bodies-and-plans.md +167 -0
  561. package/docs/concepts/execution-identity.md +142 -0
  562. package/docs/concepts/flows-and-actions.md +129 -0
  563. package/docs/concepts/suspension-and-replay.md +130 -0
  564. package/docs/concepts/the-runtime-port.md +110 -0
  565. package/docs/concepts/trampoline-rounds.md +151 -0
  566. package/docs/guides/ask-a-person.md +184 -0
  567. package/docs/guides/build-a-body.md +164 -0
  568. package/docs/guides/cancel-and-roll-back.md +112 -0
  569. package/docs/guides/implement-an-action.md +155 -0
  570. package/docs/guides/inspect-the-plan.md +235 -0
  571. package/docs/guides/poll-until-ready.md +169 -0
  572. package/docs/guides/queue-work-to-a-worker.md +122 -0
  573. package/docs/guides/retry-a-failing-action.md +243 -0
  574. package/docs/guides/reuse-a-recorded-result.md +129 -0
  575. package/docs/guides/run-a-child-flow.md +108 -0
  576. package/docs/guides/run-an-external-job.md +86 -0
  577. package/docs/guides/use-a-prompt.md +38 -0
  578. package/docs/guides/wait-for-a-deadline.md +141 -0
  579. package/docs/guides/wait-for-an-external-signal.md +151 -0
  580. package/docs/installation.md +87 -0
  581. package/docs/quickstart.md +164 -0
  582. package/docs/reference/flow.md +1835 -0
  583. package/docs/testing.md +157 -0
  584. package/docs/troubleshooting.md +286 -0
  585. package/package.json +327 -3
  586. package/src/Action/Action.ts +333 -0
  587. package/src/Action/AttemptTimedOut.ts +37 -0
  588. package/src/Action/BoundaryMode.ts +33 -0
  589. package/src/Action/CacheEnvironment.ts +170 -0
  590. package/src/Action/ConcurrentKeylessDispatch.ts +38 -0
  591. package/src/Action/Context.ts +156 -0
  592. package/src/Action/DuplicateImplementation.ts +24 -0
  593. package/src/Action/FileBoundary.ts +77 -0
  594. package/src/Action/FileInput.ts +42 -0
  595. package/src/Action/Filegroup.ts +16 -0
  596. package/src/Action/Glob.ts +8 -0
  597. package/src/Action/ImplementationVersionMismatch.ts +27 -0
  598. package/src/Action/Implementations.ts +149 -0
  599. package/src/Action/InfraInterrupt.ts +30 -0
  600. package/src/Action/InfraInterruptRetriesExhausted.ts +37 -0
  601. package/src/Action/IrreversibleRetryRequiresIdempotencyKey.ts +32 -0
  602. package/src/Action/StepIdentity.ts +219 -0
  603. package/src/Action/TreeArtifact.ts +8 -0
  604. package/src/Action/TypeId.ts +9 -0
  605. package/src/Action/UncanonicalIdempotencyKey.ts +36 -0
  606. package/src/Action/idempotencyKey.ts +67 -0
  607. package/src/Action/index.ts +31 -0
  608. package/src/Action/make.ts +671 -0
  609. package/src/Action/raceAll.ts +48 -0
  610. package/src/Action/retry.ts +92 -0
  611. package/src/Deadline.ts +201 -0
  612. package/src/DurableClock.ts +176 -0
  613. package/src/DurableDeferred.ts +753 -0
  614. package/src/DurableQueue.ts +519 -0
  615. package/src/ExternalJob.ts +437 -0
  616. package/src/Fault.ts +279 -0
  617. package/src/Flow/Annotations.ts +151 -0
  618. package/src/Flow/CapabilityCeiling.ts +37 -0
  619. package/src/Flow/DeadlineExceeded.ts +40 -0
  620. package/src/Flow/ExecutionIdRequired.ts +36 -0
  621. package/src/Flow/ExecutionIds.ts +133 -0
  622. package/src/Flow/Flow.ts +576 -0
  623. package/src/Flow/MaxRoundsExceeded.ts +39 -0
  624. package/src/Flow/Outcome.ts +179 -0
  625. package/src/Flow/Result.ts +284 -0
  626. package/src/Flow/Runtime.ts +339 -0
  627. package/src/Flow/TypeId.ts +9 -0
  628. package/src/Flow/index.ts +19 -0
  629. package/src/Flow/internal.ts +237 -0
  630. package/src/Flow/make.ts +285 -0
  631. package/src/FlowRuntime/CancelRequestFailed.ts +56 -0
  632. package/src/FlowRuntime/ExecutionIdentityConflict.ts +32 -0
  633. package/src/FlowRuntime/FlowCycleDetected.ts +41 -0
  634. package/src/FlowRuntime/FlowExecutionNotFound.ts +46 -0
  635. package/src/FlowRuntime/FlowInstance.ts +128 -0
  636. package/src/FlowRuntime/FlowRuntime.ts +339 -0
  637. package/src/FlowRuntime/NodeRecord.ts +185 -0
  638. package/src/FlowRuntime/WaitingAnnotation.ts +85 -0
  639. package/src/FlowRuntime/index.ts +17 -0
  640. package/src/Graph.ts +1865 -0
  641. package/src/HumanTask.ts +1007 -0
  642. package/src/Interpreter.ts +1620 -0
  643. package/src/Poll.ts +420 -0
  644. package/src/RetryPolicy.ts +550 -0
  645. package/src/Sleep.ts +296 -0
  646. package/src/Stall.ts +217 -0
  647. package/src/WaitFor.ts +228 -0
  648. package/src/index.ts +125 -0
  649. package/src/internal/BoundedJson.ts +109 -0
  650. package/src/internal/DeclarationSite.ts +214 -0
  651. package/src/internal/Declarations.ts +49 -0
  652. package/src/internal/ExecutionMiddleware.ts +29 -0
  653. package/src/internal/JsonSchemaSubset.ts +392 -0
  654. package/src/internal/OutcomeMarker.ts +19 -0
@@ -0,0 +1,48 @@
1
+ // Deep reviewed and polished by a human on 2026-08-10.
2
+
3
+ /**
4
+ * Races actions through durable deferred execution.
5
+ *
6
+ * @since 0.1.0
7
+ */
8
+
9
+ import type { NonEmptyReadonlyArray } from "effect/Array"
10
+ import type * as Effect from "effect/Effect"
11
+ import * as Schema from "effect/Schema"
12
+ import * as DurableDeferred from "../DurableDeferred.ts"
13
+ import type { FlowInstance, FlowRuntime } from "../FlowRuntime/index.ts"
14
+ import type { Action, Any } from "./Action.ts"
15
+
16
+ /**
17
+ * Runs a non-empty collection of actions as a durable race and returns the
18
+ * first success using unioned success and error schemas. A losing failure is
19
+ * ignored while another action is still running; the race fails only when
20
+ * every action fails. To settle on whichever action exits first, success or
21
+ * failure, race `Effect.exit` of each action and unwrap the winning exit.
22
+ *
23
+ * @category racing
24
+ * @since 0.1.0
25
+ */
26
+ export const raceAll = <const Actions extends NonEmptyReadonlyArray<Any>>(
27
+ name: string,
28
+ actions: Actions
29
+ ): Effect.Effect<
30
+ Actions[number] extends Action<infer _A, infer _E, infer _R> ? _A["Type"] : never,
31
+ Actions[number] extends Action<infer _A, infer _E, infer _R> ? _E["Type"] : never,
32
+ | Effect.Services<Actions[number]>
33
+ | (Actions[number] extends Action<infer Success, infer Error, infer _R>
34
+ ? Success["DecodingServices"] | Success["EncodingServices"] | Error["DecodingServices"] | Error["EncodingServices"]
35
+ : never)
36
+ | FlowRuntime
37
+ | FlowInstance
38
+ > =>
39
+ DurableDeferred.raceAll({
40
+ name: `Action/${name}`,
41
+ success: Schema.Union(
42
+ actions.map((action) => (action as any).successSchema)
43
+ ),
44
+ error: Schema.Union(
45
+ actions.map((action) => (action as any).errorSchema)
46
+ ),
47
+ effects: actions.map((action) => (action as any)) as any
48
+ }) as any
@@ -0,0 +1,92 @@
1
+ // Deep reviewed and polished by a human on 2026-08-10.
2
+
3
+ /**
4
+ * Retries effects while preserving durable action identity.
5
+ *
6
+ * @since 0.1.0
7
+ */
8
+
9
+ import * as Effect from "effect/Effect"
10
+ import { dual } from "effect/Function"
11
+ import type * as Types from "effect/Types"
12
+ import { CurrentAttempt, CurrentOrdinal, type OrdinalSlot } from "./Context.ts"
13
+
14
+ /**
15
+ * Retries an effect with `Effect.retry` while updating `CurrentAttempt` for
16
+ * each attempt.
17
+ *
18
+ * @category error handling
19
+ * @since 0.1.0
20
+ */
21
+ export const retry: {
22
+ <E, O extends Types.NoExcessProperties<Omit<Effect.Retry.Options<E>, "schedule">, O>>(
23
+ options: O
24
+ ): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Retry.Return<R, E, A, O>
25
+ <A, E, R, O extends Types.NoExcessProperties<Omit<Effect.Retry.Options<E>, "schedule">, O>>(
26
+ self: Effect.Effect<A, E, R>,
27
+ options: O
28
+ ): Effect.Retry.Return<R, E, A, O>
29
+ } = dual(
30
+ 2,
31
+ (effect: Effect.Effect<any, any, any>, options: object) =>
32
+ Effect.gen(function*() {
33
+ // A nested retry block shares the enclosing block's slot instead of
34
+ // shadowing it with a fresh one (issue #108): a per-invocation slot was
35
+ // rebuilt on every outer attempt, discarding the pinned `values`, so a
36
+ // completed irreversible inner dispatch drew a brand-new ordinal — a
37
+ // new step key — and re-executed instead of replaying. Sharing the
38
+ // outermost slot keeps every pin alive for the whole outer sequence.
39
+ const enclosing = yield* CurrentOrdinal
40
+ // One `values` map for the whole retry sequence: the engine fills each
41
+ // action's scope with the ordinal it allocates on the first attempt,
42
+ // and every later attempt of the same sequence reuses those ordinals
43
+ // (issues #73, #84). The `cursors` map, however, is *per block*
44
+ // (issue #116): #108 shared the enclosing block's mutable cursor map
45
+ // wholesale, so a sibling block's attempt boundary — sanctioned to run
46
+ // concurrently under keyed overlap (issue #111) — cleared every
47
+ // scope's cursor and rewound another block's mid-flight dispatch onto
48
+ // an already-consumed pinned ordinal, a duplicate step key. Each block
49
+ // now owns a private cursor view seeded from the enclosing block's
50
+ // cursors at entry, so its attempt boundaries reset only its own view.
51
+ const slot: OrdinalSlot = {
52
+ values: enclosing?.values ?? new Map(),
53
+ cursors: new Map(enclosing?.cursors)
54
+ }
55
+ // Where each scope's dispatch cursor stood when this block was entered.
56
+ // An inner attempt replays the block from its own first dispatch, not
57
+ // from the outer attempt's start, so its cursors rewind to the block
58
+ // entry rather than to zero (issues #100, #108). At the top level the
59
+ // snapshot is empty and rewinding degenerates to a plain reset.
60
+ const entryCursors = new Map(slot.cursors)
61
+ let attempt = 1
62
+ return yield* Effect.suspend(() => {
63
+ // Every attempt replays the block from its first dispatch, so the
64
+ // per-scope dispatch cursors restart with it (issue #100); the pinned
65
+ // ordinal sequences in `values` persist across attempts.
66
+ slot.cursors.clear()
67
+ for (const [scope, cursor] of entryCursors) {
68
+ slot.cursors.set(scope, cursor)
69
+ }
70
+ return effect.pipe(
71
+ Effect.provideService(CurrentAttempt, attempt++),
72
+ Effect.provideService(CurrentOrdinal, slot)
73
+ )
74
+ }).pipe(
75
+ Effect.retry(options),
76
+ // On exit, fold this block's final cursor positions back into the
77
+ // enclosing block's view (max-merge, so a concurrent sibling's later
78
+ // propagation never rewinds a scope): an enclosing dispatch of a
79
+ // scope this block consumed must take the next pinned position, not
80
+ // re-consume this block's ordinals.
81
+ Effect.onExit(() =>
82
+ Effect.sync(() => {
83
+ if (enclosing === undefined) return
84
+ for (const [scope, cursor] of slot.cursors) {
85
+ const current = enclosing.cursors.get(scope) ?? 0
86
+ if (cursor > current) enclosing.cursors.set(scope, cursor)
87
+ }
88
+ })
89
+ )
90
+ )
91
+ })
92
+ )
@@ -0,0 +1,201 @@
1
+ /**
2
+ * The wall-clock bound one run of a flow settles by.
3
+ *
4
+ * A deadline counts from the run's FIRST start, which is journaled, so it
5
+ * survives park, resume and process death: a restarted engine honors the
6
+ * original deadline instead of starting a new one. A trampoline lineage is one
7
+ * run, so its rounds share one deadline: the round that hands off stamps the
8
+ * lineage's start and bound on the {@link module:Result.Handoff}, and the next
9
+ * round runs under that stamp rather than starting a clock of its own. Like
10
+ * `maxRounds`, the bound belongs to the lineage originator; a handoff target
11
+ * cannot reset or replace it.
12
+ *
13
+ * The engine applies {@link bound} to every execution of a flow that declares
14
+ * `Flow.make(tag, { deadline })`. A control plane applies it inside a run body
15
+ * to bound a run by an approved envelope's deadline. Both settle an expired
16
+ * run with the same {@link module:DeadlineExceeded.DeadlineExceeded} defect.
17
+ *
18
+ * @since 1.0.0
19
+ */
20
+
21
+ import * as Clock from "effect/Clock"
22
+ import type * as Crypto from "effect/Crypto"
23
+ import * as Duration from "effect/Duration"
24
+ import * as Effect from "effect/Effect"
25
+ import * as Option from "effect/Option"
26
+ import * as Schema from "effect/Schema"
27
+ import * as Action from "./Action/index.ts"
28
+ import * as DurableClock from "./DurableClock.ts"
29
+ import { DeadlineExceeded } from "./Flow/DeadlineExceeded.ts"
30
+ import { Handoff, type LineageDeadline } from "./Flow/Result.ts"
31
+ import { FlowInstance } from "./FlowRuntime/FlowInstance.ts"
32
+ import { FlowRuntime } from "./FlowRuntime/FlowRuntime.ts"
33
+
34
+ /**
35
+ * The execution's first start, journaled once.
36
+ *
37
+ * A sealed action's result is recorded with its attempt and replayed on every
38
+ * later drive, so the origin a deadline counts from is the time the execution
39
+ * first ran, on this engine or on the one that resumes it after a restart.
40
+ */
41
+ const origin = Action.make({
42
+ name: "@smthrs/engine/deadline-origin",
43
+ tier: "sealed",
44
+ success: Schema.Number,
45
+ execute: Clock.currentTimeMillis.pipe(Effect.map(Math.floor))
46
+ })
47
+
48
+ /**
49
+ * Starts the current execution's deadline: the lineage deadline this round
50
+ * inherited from a handoff, or `deadline` counted from the execution's
51
+ * journaled first start, or from `startedAtMs` when the host supplies a
52
+ * durable start of its own. Answers `undefined` when neither applies, which is
53
+ * an unbounded execution.
54
+ *
55
+ * **Details**
56
+ *
57
+ * The first start is a sealed action, so every later drive of the execution,
58
+ * on this engine or one that resumes it after a restart, reads the same
59
+ * origin. A durable clock is armed at the deadline so a parked execution is
60
+ * driven again when it passes; the clock keeps the due time it was first armed
61
+ * with, so arming it on every drive is idempotent.
62
+ *
63
+ * **Gotchas**
64
+ *
65
+ * Start at most one deadline per execution, before any other dispatch that a
66
+ * replay must line up with: the origin and the clock are addressed by fixed
67
+ * names within the execution.
68
+ *
69
+ * A deadline that is not a positive finite duration, a `startedAtMs` that is
70
+ * not finite, or a bound that would expire after epoch millisecond
71
+ * `Number.MAX_SAFE_INTEGER` dies with a `RangeError`: a durable store records
72
+ * the clock's due time as a safe integer.
73
+ *
74
+ * @category constructors
75
+ * @since 1.0.0
76
+ */
77
+ export const start = (options: {
78
+ /** The flow the refusal names. */
79
+ readonly flowName: string
80
+ /** The bound; a positive finite duration. Absent means unbounded. */
81
+ readonly deadline?: Duration.Input | undefined
82
+ /**
83
+ * Where the bound counts from, when the host already holds a durable
84
+ * start of its own, such as the time a control plane accepted the run.
85
+ * Absent, the execution's first start is journaled and read back.
86
+ */
87
+ readonly startedAtMs?: number | undefined
88
+ }): Effect.Effect<LineageDeadline | undefined, never, FlowRuntime | FlowInstance | Crypto.Crypto> =>
89
+ Effect.gen(function*() {
90
+ const instance = yield* FlowInstance
91
+ let lineage = instance.lineageDeadline
92
+ if (lineage === undefined) {
93
+ if (options.deadline === undefined) return undefined
94
+ const deadlineMs = Option.match(Duration.fromInput(options.deadline), {
95
+ onNone: () => Number.NaN,
96
+ onSome: Duration.toMillis
97
+ })
98
+ if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
99
+ return yield* Effect.die(
100
+ new RangeError(`Deadline.start: "${options.flowName}" deadline must be a positive finite duration`)
101
+ )
102
+ }
103
+ const startedAtMs = options.startedAtMs ?? (yield* origin)
104
+ // The clock armed below is due at `startedAtMs + deadlineMs`, and a
105
+ // durable store records a due time as a safe integer.
106
+ if (!Number.isFinite(startedAtMs) || startedAtMs + deadlineMs > Number.MAX_SAFE_INTEGER) {
107
+ return yield* Effect.die(
108
+ new RangeError(
109
+ `Deadline.start: "${options.flowName}" deadline must expire by epoch millisecond ` +
110
+ `${Number.MAX_SAFE_INTEGER}, and a ${deadlineMs} ms deadline from ${startedAtMs} does not`
111
+ )
112
+ )
113
+ }
114
+ lineage = { startedAtMs, deadlineMs }
115
+ }
116
+ const remaining = yield* remainingMs(lineage)
117
+ if (remaining > 0) {
118
+ yield* (yield* FlowRuntime).scheduleClock(instance.flow, {
119
+ executionId: instance.executionId,
120
+ clock: DurableClock.make({ name: "@smthrs/engine/deadline", duration: remaining })
121
+ })
122
+ }
123
+ return lineage
124
+ })
125
+
126
+ /**
127
+ * The whole milliseconds left before `deadline` passes, as the durable clock
128
+ * row stores its due time; zero or less once it has passed.
129
+ *
130
+ * @category getters
131
+ * @since 1.0.0
132
+ */
133
+ export const remainingMs = (deadline: LineageDeadline): Effect.Effect<number> =>
134
+ Effect.map(Clock.currentTimeMillis, (now) => Math.ceil(deadline.startedAtMs + deadline.deadlineMs - now))
135
+
136
+ /**
137
+ * Runs `body` within a started deadline.
138
+ *
139
+ * A body that starts at or past the deadline settles at once, and one that
140
+ * starts before it races the time remaining in this fiber, so a running
141
+ * execution is stopped too. Both settle with the same `DeadlineExceeded`
142
+ * defect. The race is `raceFirst`: a body that parks exits first, so parking
143
+ * still parks. A round that hands off stamps the deadline on its handoff, so
144
+ * the next round of the lineage runs under it. An `undefined` deadline runs
145
+ * `body` unbounded.
146
+ *
147
+ * @category combinators
148
+ * @since 1.0.0
149
+ */
150
+ export const within =
151
+ (deadline: LineageDeadline | undefined, flowName: string) =>
152
+ <A, E, R>(body: Effect.Effect<A, E, R>): Effect.Effect<A, E, R | FlowInstance> =>
153
+ deadline === undefined ? body : Effect.gen(function*() {
154
+ const instance = yield* FlowInstance
155
+ const expired = new DeadlineExceeded({
156
+ flowName,
157
+ executionId: instance.executionId,
158
+ deadlineMs: deadline.deadlineMs,
159
+ startedAtMs: deadline.startedAtMs,
160
+ message: `${flowName} execution ${instance.executionId} ran past its ${deadline.deadlineMs} ms deadline, ` +
161
+ `counted from its start at ${new Date(deadline.startedAtMs).toISOString()}`
162
+ })
163
+ const remaining = yield* remainingMs(deadline)
164
+ if (remaining <= 0) return yield* Effect.die(expired)
165
+ const value = yield* Effect.raceFirst(body, Effect.andThen(Effect.sleep(remaining), Effect.die(expired)))
166
+ const handoff = instance.handoff
167
+ if (handoff !== undefined && handoff.deadline === undefined) {
168
+ instance.handoff = new Handoff({
169
+ flow: handoff.flow,
170
+ payload: handoff.payload,
171
+ ...(handoff.capabilityCeilings === undefined ? {} : { capabilityCeilings: handoff.capabilityCeilings }),
172
+ deadline
173
+ })
174
+ }
175
+ return value
176
+ })
177
+
178
+ /**
179
+ * Bounds the current execution by `deadline`, counted from its journaled first
180
+ * start, or by the lineage deadline this round inherited from a handoff:
181
+ * {@link start}, then {@link within}.
182
+ *
183
+ * A round that inherited a lineage deadline runs under it whatever it
184
+ * declares, so every round of a lineage expires at the originator's time. With
185
+ * no inherited deadline and `deadline` absent, the body runs unbounded.
186
+ *
187
+ * @category combinators
188
+ * @since 1.0.0
189
+ */
190
+ export const bound = (options: {
191
+ /** The flow the refusal names. */
192
+ readonly flowName: string
193
+ /** The bound; a positive finite duration. Absent means unbounded. */
194
+ readonly deadline?: Duration.Input | undefined
195
+ /** Where the bound counts from; see {@link start}. */
196
+ readonly startedAtMs?: number | undefined
197
+ }) =>
198
+ <A, E, R>(
199
+ body: Effect.Effect<A, E, R>
200
+ ): Effect.Effect<A, E, R | FlowRuntime | FlowInstance | Crypto.Crypto> =>
201
+ Effect.flatMap(start(options), (deadline) => within(deadline, options.flowName)(body))
@@ -0,0 +1,176 @@
1
+ // Deep reviewed and polished by a human on 2026-08-10.
2
+
3
+ /**
4
+ * Durable timers for flow sleeps.
5
+ *
6
+ * `make` creates a `DurableClock` with a name, duration, and deferred wake-up
7
+ * signal. `sleep` ignores zero durations, runs short sleeps through an
8
+ * in-memory action, and schedules longer sleeps through the `FlowRuntime`
9
+ * before awaiting the durable deferred tied to the clock.
10
+ *
11
+ * @since 0.1.0
12
+ */
13
+
14
+ import * as Clock from "effect/Clock"
15
+ import type * as Crypto from "effect/Crypto"
16
+ import * as Duration from "effect/Duration"
17
+ import * as Effect from "effect/Effect"
18
+ import * as Option from "effect/Option"
19
+ import type * as Schema from "effect/Schema"
20
+ import * as Action from "./Action/index.ts"
21
+ import * as DurableDeferred from "./DurableDeferred.ts"
22
+ import { FlowInstance } from "./FlowRuntime/FlowInstance.ts"
23
+ import { FlowRuntime } from "./FlowRuntime/FlowRuntime.ts"
24
+
25
+ const TypeId = "@smthrs/flow/DurableClock"
26
+
27
+ /**
28
+ * Represents a durable flow timer with a name, duration, and deferred
29
+ * completed when the timer wakes.
30
+ *
31
+ * @category models
32
+ * @since 0.1.0
33
+ */
34
+ export interface DurableClock {
35
+ readonly [TypeId]: typeof TypeId
36
+ readonly name: string
37
+ readonly duration: Duration.Duration
38
+ readonly deferred: DurableDeferred.DurableDeferred<typeof Schema.Void>
39
+ }
40
+
41
+ /**
42
+ * Parses one author-supplied duration and requires it to be finite and
43
+ * nonnegative. Invalid input throws `RangeError` so the authoring mistake is
44
+ * caught at declaration time, matching `Flow.make` and `Poll.make`.
45
+ *
46
+ * @private
47
+ */
48
+ const durationFromInput = (input: Duration.Input, field: string): Duration.Duration => {
49
+ const parsed = Duration.fromInput(input)
50
+ if (Option.isNone(parsed)) {
51
+ throw new RangeError(`DurableClock: "${field}" must be a valid finite duration that is not negative.`)
52
+ }
53
+ const millis = Duration.toMillis(parsed.value)
54
+ if (!Duration.isFinite(parsed.value) || !Number.isFinite(millis) || millis < 0) {
55
+ throw new RangeError(`DurableClock: "${field}" must be a valid finite duration that is not negative.`)
56
+ }
57
+ return parsed.value
58
+ }
59
+
60
+ /**
61
+ * The latest due time a durable timer records, in epoch milliseconds: a store
62
+ * keeps a clock's due time as a safe integer.
63
+ *
64
+ * @private
65
+ */
66
+ const latestDueAtMs = Number.MAX_SAFE_INTEGER
67
+
68
+ /**
69
+ * Parses a clock's own duration, which a store adds to the current time and
70
+ * records, so it is at most {@link latestDueAtMs} milliseconds.
71
+ *
72
+ * @private
73
+ */
74
+ const clockDuration = (input: Duration.Input): Duration.Duration => {
75
+ const duration = durationFromInput(input, "duration")
76
+ if (Duration.toMillis(duration) > latestDueAtMs) {
77
+ throw new RangeError(`DurableClock: "duration" must be at most ${latestDueAtMs} milliseconds.`)
78
+ }
79
+ return duration
80
+ }
81
+
82
+ const makeClock = (name: string, duration: Duration.Duration): DurableClock => ({
83
+ [TypeId]: TypeId,
84
+ name,
85
+ duration,
86
+ deferred: DurableDeferred.make(`DurableClock/${name}`)
87
+ })
88
+
89
+ /**
90
+ * Declares one durable clock after validating its finite nonnegative duration.
91
+ *
92
+ * Throws a `RangeError` for a malformed, infinite or negative duration, or one
93
+ * longer than `Number.MAX_SAFE_INTEGER` milliseconds: a durable store records
94
+ * a clock's due time as a safe integer.
95
+ *
96
+ * @category constructors
97
+ * @since 0.1.0
98
+ */
99
+ export const make = (options: {
100
+ readonly name: string
101
+ readonly duration: Duration.Input
102
+ }): DurableClock => makeClock(options.name, clockDuration(options.duration))
103
+
104
+ /**
105
+ * Waits inside a flow, using an in-memory action for durations at or
106
+ * below the threshold and scheduling a durable clock for longer durations.
107
+ *
108
+ * Throws a `RangeError` for the same durations {@link make} refuses, and for
109
+ * a malformed, infinite or negative threshold. A durable sleep that would
110
+ * wake after epoch millisecond `Number.MAX_SAFE_INTEGER` dies with a
111
+ * `RangeError` instead of arming its clock.
112
+ *
113
+ * @category sleeping
114
+ * @since 0.1.0
115
+ */
116
+ export const sleep = (
117
+ options: {
118
+ readonly name: string
119
+ readonly duration: Duration.Input
120
+ /**
121
+ * If the duration is less than or equal to this threshold, the clock will
122
+ * be executed in memory.
123
+ *
124
+ * @default 60 seconds
125
+ */
126
+ readonly inMemoryThreshold?: Duration.Input | undefined
127
+ }
128
+ ): Effect.Effect<
129
+ void,
130
+ never,
131
+ Crypto.Crypto | FlowRuntime | FlowInstance
132
+ > => {
133
+ const name = options.name
134
+ const duration = clockDuration(options.duration)
135
+ const inMemoryThreshold = durationFromInput(
136
+ options.inMemoryThreshold ?? defaultInMemoryThreshold,
137
+ "inMemoryThreshold"
138
+ )
139
+
140
+ // Untraced because durable sleeps are recursively resumed by the engine.
141
+ return Effect.fnUntraced(function*() {
142
+ if (Duration.isZero(duration)) {
143
+ return
144
+ }
145
+
146
+ if (Duration.isLessThanOrEqualTo(duration, inMemoryThreshold)) {
147
+ return yield* Action.make({
148
+ name: `DurableClock/${name}`,
149
+ tier: "sealed",
150
+ execute: Effect.sleep(duration)
151
+ })
152
+ }
153
+
154
+ // A due time past the latest one a store records would fail the park
155
+ // write deep in the engine, so the sleep refuses it here by name.
156
+ const now = yield* Clock.currentTimeMillis
157
+ if (now + Duration.toMillis(duration) > latestDueAtMs) {
158
+ return yield* Effect.die(
159
+ new RangeError(
160
+ `DurableClock: "${name}" would wake after epoch millisecond ${latestDueAtMs}, ` +
161
+ `the latest due time a durable timer records.`
162
+ )
163
+ )
164
+ }
165
+ const engine = yield* FlowRuntime
166
+ const instance = yield* FlowInstance
167
+ const clock = makeClock(name, duration)
168
+ yield* engine.scheduleClock(instance.flow, {
169
+ executionId: instance.executionId,
170
+ clock
171
+ })
172
+ return yield* DurableDeferred.await(clock.deferred)
173
+ })()
174
+ }
175
+
176
+ const defaultInMemoryThreshold = Duration.seconds(60)