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

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 +160 -0
  2. package/LICENSE +21 -0
  3. package/README.md +210 -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 +373 -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 +105 -0
  106. package/dist/cjs/Deadline.d.ts.map +1 -0
  107. package/dist/cjs/Deadline.js +104 -0
  108. package/dist/cjs/Deadline.js.map +7 -0
  109. package/dist/cjs/DurableClock.d.ts +61 -0
  110. package/dist/cjs/DurableClock.d.ts.map +1 -0
  111. package/dist/cjs/DurableClock.js +90 -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 +338 -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 +160 -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 +134 -0
  182. package/dist/cjs/Flow/make.d.ts.map +1 -0
  183. package/dist/cjs/Flow/make.js +104 -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 +198 -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 +175 -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 +1022 -0
  224. package/dist/cjs/Graph.js.map +7 -0
  225. package/dist/cjs/HumanTask.d.ts +440 -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 +222 -0
  230. package/dist/cjs/Interpreter.d.ts.map +1 -0
  231. package/dist/cjs/Interpreter.js +888 -0
  232. package/dist/cjs/Interpreter.js.map +7 -0
  233. package/dist/cjs/Poll.d.ts +238 -0
  234. package/dist/cjs/Poll.d.ts.map +1 -0
  235. package/dist/cjs/Poll.js +150 -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 +133 -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 +405 -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 +105 -0
  383. package/dist/esm/Deadline.d.ts.map +1 -0
  384. package/dist/esm/Deadline.js +152 -0
  385. package/dist/esm/Deadline.js.map +1 -0
  386. package/dist/esm/DurableClock.d.ts +61 -0
  387. package/dist/esm/DurableClock.d.ts.map +1 -0
  388. package/dist/esm/DurableClock.js +75 -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 +231 -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 +134 -0
  459. package/dist/esm/Flow/make.d.ts.map +1 -0
  460. package/dist/esm/Flow/make.js +106 -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 +198 -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 +175 -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 +1482 -0
  501. package/dist/esm/Graph.js.map +1 -0
  502. package/dist/esm/HumanTask.d.ts +440 -0
  503. package/dist/esm/HumanTask.d.ts.map +1 -0
  504. package/dist/esm/HumanTask.js +794 -0
  505. package/dist/esm/HumanTask.js.map +1 -0
  506. package/dist/esm/Interpreter.d.ts +222 -0
  507. package/dist/esm/Interpreter.d.ts.map +1 -0
  508. package/dist/esm/Interpreter.js +1269 -0
  509. package/dist/esm/Interpreter.js.map +1 -0
  510. package/dist/esm/Poll.d.ts +238 -0
  511. package/dist/esm/Poll.d.ts.map +1 -0
  512. package/dist/esm/Poll.js +282 -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 +230 -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 +150 -0
  559. package/docs/api.md +436 -0
  560. package/docs/concepts/bodies-and-plans.md +157 -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 +161 -0
  568. package/docs/guides/cancel-and-roll-back.md +112 -0
  569. package/docs/guides/implement-an-action.md +147 -0
  570. package/docs/guides/inspect-the-plan.md +154 -0
  571. package/docs/guides/poll-until-ready.md +167 -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 +122 -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 +82 -0
  581. package/docs/quickstart.md +155 -0
  582. package/docs/reference/flow.md +1831 -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 +657 -0
  609. package/src/Action/raceAll.ts +48 -0
  610. package/src/Action/retry.ts +92 -0
  611. package/src/Deadline.ts +185 -0
  612. package/src/DurableClock.ts +133 -0
  613. package/src/DurableDeferred.ts +753 -0
  614. package/src/DurableQueue.ts +519 -0
  615. package/src/ExternalJob.ts +432 -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 +309 -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 +279 -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 +333 -0
  637. package/src/FlowRuntime/NodeRecord.ts +183 -0
  638. package/src/FlowRuntime/WaitingAnnotation.ts +85 -0
  639. package/src/FlowRuntime/index.ts +17 -0
  640. package/src/Graph.ts +1860 -0
  641. package/src/HumanTask.ts +1003 -0
  642. package/src/Interpreter.ts +1593 -0
  643. package/src/Poll.ts +414 -0
  644. package/src/RetryPolicy.ts +550 -0
  645. package/src/Sleep.ts +267 -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
package/src/Fault.ts ADDED
@@ -0,0 +1,279 @@
1
+ /**
2
+ * One typed fault for every failure, and the one response table that reads it.
3
+ *
4
+ * Each owner of an error union registers its codes here with a class, so a
5
+ * failure crosses every seam as `{ class, tag }` rather than as prose. The
6
+ * control plane stamps it on a failed run, the gateway carries it to the
7
+ * worker, and every surface reads the same record.
8
+ *
9
+ * @since 1.0.0
10
+ */
11
+
12
+ import * as Clock from "effect/Clock"
13
+ import * as Effect from "effect/Effect"
14
+ import * as Result from "effect/Result"
15
+ import * as Schema from "effect/Schema"
16
+ import type { HumanAnswerInvalid, HumanTaskFailed } from "./HumanTask.ts"
17
+ import * as RetryPolicy from "./RetryPolicy.ts"
18
+
19
+ /**
20
+ * Whose problem a failure is. The first five are the wire registry; `factory`
21
+ * (the factory's own work failed and a replan may fix it) and `policy` (a cap
22
+ * stopped it) are the factory's.
23
+ *
24
+ * @category models
25
+ * @since 1.0.0
26
+ */
27
+ export const Class = Schema.Literals(["user", "wait", "infra", "dependency", "bug", "factory", "policy"])
28
+
29
+ /**
30
+ * The decoded form of {@link Class}.
31
+ *
32
+ * @category models
33
+ * @since 1.0.0
34
+ */
35
+ export type Class = typeof Class.Type
36
+
37
+ /**
38
+ * What happens next. `very_hard` is a ladder state the worker reaches, not a class.
39
+ *
40
+ * @category models
41
+ * @since 1.0.0
42
+ */
43
+ export const Response = Schema.Literals(["retry", "backup", "park", "replan", "very_hard", "help", "close", "stop"])
44
+
45
+ /**
46
+ * The decoded form of {@link Response}.
47
+ *
48
+ * @category models
49
+ * @since 1.0.0
50
+ */
51
+ export type Response = typeof Response.Type
52
+
53
+ /**
54
+ * The record stamped on a failed run. `tag` is `<_tag>/<code>`, or `<_tag>`
55
+ * for an error without a code.
56
+ *
57
+ * @category models
58
+ * @since 1.0.0
59
+ */
60
+ export const Fault = Schema.Struct({ class: Class, tag: Schema.String })
61
+
62
+ /**
63
+ * The decoded form of {@link Fault}.
64
+ *
65
+ * @category models
66
+ * @since 1.0.0
67
+ */
68
+ export type Fault = typeof Fault.Type
69
+
70
+ /**
71
+ * One class per code of an owner's union. `satisfies Rows<Code>` at the owner
72
+ * makes a new code without a class a compile error.
73
+ *
74
+ * @category models
75
+ * @since 1.0.0
76
+ */
77
+ export type Rows<Code extends string> = Readonly<Record<Code, Class>>
78
+
79
+ interface Row {
80
+ readonly table: Class | Readonly<Record<string, Class>>
81
+ readonly field: string
82
+ }
83
+
84
+ /*
85
+ * One registry per process, not per module instance: a process that loads
86
+ * both the ESM and the CommonJS build still reads every owner's rows.
87
+ */
88
+ const rows: Map<string, Row> = ((globalThis as { [key: symbol]: Map<string, Row> | undefined })[
89
+ Symbol.for("@smthrs/flow/Fault/rows")
90
+ ] ??= new Map())
91
+
92
+ const same = (left: Row, right: Row): boolean =>
93
+ left.field === right.field && JSON.stringify(left.table) === JSON.stringify(right.table)
94
+
95
+ /** Reads a property without running a throwing getter or proxy trap into the caller. */
96
+ const read = (value: object, key: string): unknown => {
97
+ try {
98
+ return (value as Record<string, unknown>)[key]
99
+ } catch {
100
+ return undefined
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Registers an owner's error tag: one class for the whole tag, or one per
106
+ * value of its `field` (`code` unless the union names it otherwise). A value
107
+ * the table does not name is `bug`. Registering a tag again with the same
108
+ * rows is a no-op (a module loaded twice); with different rows it throws,
109
+ * because two owners disagreeing about one tag is a defect.
110
+ *
111
+ * @category constructors
112
+ * @since 1.0.0
113
+ */
114
+ export const register = <Code extends string>(tag: string, table: Class | Rows<Code>, field = "code"): void => {
115
+ const row: Row = { table, field }
116
+ const existing = rows.get(tag)
117
+ if (existing !== undefined && !same(existing, row)) {
118
+ throw new Error(`Fault: ${tag} is already registered with different rows`)
119
+ }
120
+ rows.set(tag, row)
121
+ }
122
+
123
+ const classOf = (row: Row, code: string | undefined): Class =>
124
+ typeof row.table === "string" ? row.table : code !== undefined && Object.hasOwn(row.table, code)
125
+ ? row.table[code]!
126
+ : "bug"
127
+
128
+ /**
129
+ * Every tag registered so far. The sweep test reads it.
130
+ *
131
+ * @category getters
132
+ * @since 1.0.0
133
+ */
134
+ export const registered = (): ReadonlySet<string> => new Set(rows.keys())
135
+
136
+ /**
137
+ * The fault of a failure. Walks `cause` and answers the innermost registered
138
+ * tag, because a wrapper names where a failure surfaced and its cause names
139
+ * why: a harness `model_failed` over a model `quota_exceeded` is a wait. A
140
+ * failure no owner registered is a `bug`.
141
+ *
142
+ * @category constructors
143
+ * @since 1.0.0
144
+ */
145
+ export const of = (error: unknown): Fault => {
146
+ let found: Fault = { class: "bug", tag: "unregistered" }
147
+ let current: unknown = error
148
+ const seen = new Set<unknown>()
149
+ for (let depth = 0; depth < 16 && typeof current === "object" && current !== null && !seen.has(current); depth++) {
150
+ seen.add(current)
151
+ const tag = RetryPolicy.errorTag(current)
152
+ const row = tag === undefined ? undefined : rows.get(tag)
153
+ if (row !== undefined) {
154
+ const value = read(current, row.field)
155
+ const code = typeof value === "string" ? value : undefined
156
+ found = { class: classOf(row, code), tag: code === undefined ? tag! : `${tag}/${code}` }
157
+ }
158
+ current = read(current, "cause")
159
+ }
160
+ return found
161
+ }
162
+
163
+ /**
164
+ * Retries typed infrastructure failures of an effect the caller can safely repeat.
165
+ * Preserves its error channel when the bounded transient policy expires.
166
+ * Defects and interruption propagate without retry.
167
+ *
168
+ * @category combinators
169
+ * @since 1.0.0
170
+ */
171
+ export const retryTransient = <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>
172
+ Effect.gen(function*() {
173
+ const start = yield* Clock.currentTimeMillis
174
+ let attempt = 1
175
+ while (true) {
176
+ const result = yield* Effect.result(effect)
177
+ if (Result.isSuccess(result)) return result.success
178
+ if (of(result.failure).class !== "infra") return yield* Effect.fail(result.failure)
179
+ const decision = yield* RetryPolicy.decideEffect(RetryPolicy.transient, {
180
+ attempt,
181
+ error: result.failure,
182
+ elapsedMs: (yield* Clock.currentTimeMillis) - start
183
+ })
184
+ if (decision._tag === "GiveUp") return yield* Effect.fail(result.failure)
185
+ yield* Effect.sleep(decision.delayMs)
186
+ attempt++
187
+ }
188
+ })
189
+
190
+ /**
191
+ * What the responder knows when it picks a response.
192
+ *
193
+ * @category models
194
+ * @since 1.0.0
195
+ */
196
+ export interface State {
197
+ /** The action attempt that just failed. */
198
+ readonly attempt: number
199
+ /** Seats not tried in this frame and not cooling. */
200
+ readonly seatsLeft: number
201
+ /** Quota parks left before the run stops (`QuotaPolicy.defaultMaxParks` less those spent). */
202
+ readonly parksLeft: number
203
+ /** Replans spent: the worker's attempt minus one. */
204
+ readonly replans: number
205
+ /** Whether the item already had its very-hard continuation. */
206
+ readonly veryHard: boolean
207
+ }
208
+
209
+ /**
210
+ * The one ladder. A new class does not compile until it has a row.
211
+ *
212
+ * @category constructors
213
+ * @since 1.0.0
214
+ */
215
+ export const respond = (fault: Fault, state: State): Response =>
216
+ ({
217
+ wait: state.seatsLeft > 0 ? "backup" : state.parksLeft > 0 ? "park" : "stop",
218
+ dependency: state.seatsLeft > 0 ? "backup" : state.attempt < 3 ? "retry" : "stop",
219
+ infra: state.attempt < 3 ? "retry" : "park",
220
+ factory: state.replans < 2 ? "replan" : !state.veryHard ? "very_hard" : "help",
221
+ user: fault.tag === "coding/Error/declined" ? "close" : "help",
222
+ policy: "stop",
223
+ bug: "stop"
224
+ } as const satisfies Record<Class, Response>)[fault.class]
225
+
226
+ register("@smthrs/flow/InfraInterrupt", "infra")
227
+ register("@smthrs/flow/InfraInterruptRetriesExhausted", "infra")
228
+ register(
229
+ "@smthrs/flow/HumanTaskFailed",
230
+ {
231
+ rejected: "user",
232
+ timeout: "factory",
233
+ request_invalid: "bug"
234
+ } satisfies Rows<HumanTaskFailed["code"]>
235
+ )
236
+ register(
237
+ "@smthrs/flow/HumanAnswerInvalid",
238
+ {
239
+ answer_invalid: "user",
240
+ answer_not_open: "user"
241
+ } satisfies Rows<HumanAnswerInvalid["code"]>
242
+ )
243
+ // A spent polling or retry budget is the thing polled not answering in time.
244
+ register("@smthrs/flow/PollExhausted", "dependency")
245
+ register("@smthrs/flow/RetryAttemptsExhausted", "dependency")
246
+ register("@smthrs/flow/RetryPolicyExpired", "dependency")
247
+ // An attempt that outlives its bound is the thing it waited on not answering in time.
248
+ register("@smthrs/flow/AttemptTimedOut", "dependency")
249
+ // Invariant refusals: the program, not the person or the platform, is wrong.
250
+ for (
251
+ const tag of [
252
+ "MaxRoundsExceeded",
253
+ "IrreversibleRetryRequiresIdempotencyKey",
254
+ "WaitForRequestInvalid",
255
+ "SleepRequestInvalid",
256
+ "DurableDeferred/TokenInvalid",
257
+ "ExecutionIdRequired",
258
+ "FlowCycleDetected",
259
+ "CancelRequestFailed",
260
+ "Action/DuplicateImplementation",
261
+ "ConcurrentKeylessDispatch",
262
+ "FlowExecutionNotFound",
263
+ "ImplementationVersionMismatch",
264
+ "UncanonicalIdempotencyKey",
265
+ "InterpreterError"
266
+ ]
267
+ ) register(`@smthrs/flow/${tag}`, "bug")
268
+
269
+ // Lower host seams do not depend on flow authoring. Register their stable wire
270
+ // tags here so classification does not introduce an upward package dependency.
271
+ register("@smthrs/kernel/Unreachable", "infra")
272
+ register("@smthrs/sandbox/RemoteChildProcessSpawner/ProviderError", {
273
+ unavailable: "infra",
274
+ timeout: "infra",
275
+ spawn_error: "bug",
276
+ not_found: "bug",
277
+ aborted: "bug",
278
+ unknown: "bug"
279
+ })
@@ -0,0 +1,151 @@
1
+ // Deep reviewed and polished by a human on 2026-08-10.
2
+
3
+ /**
4
+ * Execution policies attached to flow definitions through Effect context.
5
+ *
6
+ * @since 0.1.0
7
+ */
8
+
9
+ import * as PlanEffects from "@smthrs/plan/Effects"
10
+ import * as PlanPlacement from "@smthrs/plan/Placement"
11
+ import * as Plan from "@smthrs/plan/Plan"
12
+ import * as Context from "effect/Context"
13
+ import { constFalse, constTrue } from "effect/Function"
14
+
15
+ /**
16
+ * Declared filesystem effects: the plan node effect contract itself.
17
+ *
18
+ * This is `@smthrs/plan`'s `Plan.NodeEffects`, not a copy of it. The two were
19
+ * field-for-field identical structs in two packages, which meant a change to
20
+ * one silently stopped `Plan.compile` decoding what this package wrote.
21
+ *
22
+ * @category schemas
23
+ * @since 0.1.0
24
+ */
25
+ export const Effects = Plan.NodeEffects
26
+
27
+ /**
28
+ * The value form of {@link Effects}.
29
+ *
30
+ * @category models
31
+ * @since 0.1.0
32
+ */
33
+ export type Effects = Plan.NodeEffects
34
+
35
+ /**
36
+ * A directive naming where a node runs, carried unchanged until planning.
37
+ *
38
+ * This is `@smthrs/plan`'s `Placement.Placement`, the one typed model. It was
39
+ * `Schema.Unknown` here while `@smthrs/core` held a four-variant enum of the
40
+ * same thing, which made every crossing a cast.
41
+ *
42
+ * @category models
43
+ * @since 0.1.0
44
+ */
45
+ export type PlacementDirective = PlanPlacement.Placement
46
+
47
+ /**
48
+ * Capability ceiling. An omitted annotation inherits; an explicit empty array denies.
49
+ * The reference default remains an empty metadata projection for catalog readers;
50
+ * execution distinguishes an absent annotation from an explicitly stored one.
51
+ *
52
+ * @category annotations
53
+ * @since 0.1.0
54
+ */
55
+ export const Capabilities = Context.Reference<ReadonlyArray<string>>(
56
+ "@smthrs/flow/Flow/Capabilities",
57
+ { defaultValue: () => [] }
58
+ )
59
+
60
+ /**
61
+ * Required annotation key for a flow's declared filesystem effects.
62
+ *
63
+ * @category annotations
64
+ * @since 0.1.0
65
+ */
66
+ export const EffectsDeclaration = Context.Service<Effects>("@smthrs/flow/Flow/EffectsDeclaration")
67
+
68
+ /**
69
+ * The effect AUTHORITY a flow declares: the ceiling every step spliced beneath
70
+ * it must stay inside.
71
+ *
72
+ * This is the one envelope model, `@smthrs/plan/Effects`, which `@smthrs/core`
73
+ * re-exports and `@smthrs/patterns` intersects against. It answers a different
74
+ * question from {@link EffectsDeclaration}: that one says which FILES a node
75
+ * touches, so a plan can order writers and a sandbox can enforce a boundary at
76
+ * run time, while this one says how much a flow is ALLOWED to touch, so
77
+ * {@link module:Graph.build} can refuse a composition that claims more than its
78
+ * caller granted.
79
+ *
80
+ * `Flow.make`'s `effects` option writes it, which is what makes it readable by
81
+ * a catalog that projects a declaration without importing this module.
82
+ *
83
+ * @category annotations
84
+ * @since 0.1.0
85
+ */
86
+ export const EffectEnvelope = PlanEffects.Envelope
87
+
88
+ /**
89
+ * Required annotation key for a flow's schema-encodable placement directive.
90
+ *
91
+ * @category annotations
92
+ * @since 0.1.0
93
+ */
94
+ export const Placement = PlanPlacement.Annotation
95
+
96
+ /**
97
+ * Captures defects for a flow and includes them in the result of the flow or its actions.
98
+ *
99
+ * **Details**
100
+ *
101
+ * By default, this annotation is set to `true`, meaning defects are captured.
102
+ *
103
+ * @category annotations
104
+ * @since 0.1.0
105
+ */
106
+ export const CaptureDefects = Context.Reference<boolean>(
107
+ "@smthrs/flow/Flow/CaptureDefects",
108
+ {
109
+ defaultValue: constTrue
110
+ }
111
+ )
112
+
113
+ /**
114
+ * Whether a catalog may offer this flow to a model, defaulting to yes.
115
+ *
116
+ * It answers a different question from {@link Capabilities}: that one says how
117
+ * much a flow is allowed to touch, this one says whether a model is shown the
118
+ * flow at all. A flow whose actions only one host implements is discoverable
119
+ * everywhere its file is, and teaching it to an agent running somewhere else
120
+ * offers a call that has no implementation to reach.
121
+ *
122
+ * `Flow.make`'s `modelInvocable` option writes it, which is what makes it
123
+ * readable by a catalog that projects a declaration from source text without
124
+ * importing this module, exactly as `capabilities` and `effects` are.
125
+ *
126
+ * @category annotations
127
+ * @since 0.1.0
128
+ */
129
+ export const ModelInvocable = Context.Reference<boolean>(
130
+ "@smthrs/flow/Flow/ModelInvocable",
131
+ {
132
+ defaultValue: constTrue
133
+ }
134
+ )
135
+
136
+ /**
137
+ * Marks a flow to suspend when it encounters any error.
138
+ *
139
+ * **Details**
140
+ *
141
+ * The suspended execution can later be resumed with the flow's `resume` method, for example `MyFlow.resume(executionId)`.
142
+ *
143
+ * @category annotations
144
+ * @since 0.1.0
145
+ */
146
+ export const SuspendOnFailure = Context.Reference<boolean>(
147
+ "@smthrs/flow/Flow/SuspendOnFailure",
148
+ {
149
+ defaultValue: constFalse
150
+ }
151
+ )
@@ -0,0 +1,37 @@
1
+ /** Declared capability ceilings shared by planning and execution.
2
+ * @since 1.0.0
3
+ */
4
+
5
+ import * as Capability from "@smthrs/capability/Capability"
6
+ import * as CapabilitySet from "@smthrs/capability/CapabilitySet"
7
+ import * as Context from "effect/Context"
8
+ import * as Option from "effect/Option"
9
+ import { Capabilities } from "./Annotations.ts"
10
+
11
+ /** Returns only explicitly declared ceilings; omission inherits.
12
+ * @category accessors
13
+ * @since 1.0.0
14
+ */
15
+ export const capabilityCeilings = (annotations: Context.Context<never>): ReadonlyArray<ReadonlyArray<string>> =>
16
+ annotations.mapUnsafe.has(Capabilities.key) ? [Context.get(annotations, Capabilities)] : []
17
+
18
+ /** Parses declaration patterns into ceiling groups. Invalid patterns are dropped, so they deny.
19
+ * @category constructors
20
+ * @since 1.0.0
21
+ */
22
+ export const parseCapabilityCeilings = (
23
+ groups: ReadonlyArray<ReadonlyArray<string>>
24
+ ): ReadonlyArray<ReadonlyArray<Capability.CapabilityPattern>> =>
25
+ groups.map((group) =>
26
+ group.flatMap((text) => {
27
+ const parsed = Capability.parsePattern(text)
28
+ return Option.isSome(parsed) ? [parsed.value] : []
29
+ })
30
+ )
31
+
32
+ /** Applies declaration patterns as an exact conjunction. Invalid patterns deny.
33
+ * @category combinators
34
+ * @since 1.0.0
35
+ */
36
+ export const attenuateCapabilities = (groups: ReadonlyArray<ReadonlyArray<string>>) =>
37
+ CapabilitySet.attenuateGroups(parseCapabilityCeilings(groups))
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Defect recorded when an execution runs past its flow's declared deadline.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+
7
+ import * as Effect from "effect/Effect"
8
+ import * as Schema from "effect/Schema"
9
+ import * as Fault from "../Fault.ts"
10
+
11
+ /**
12
+ * An execution was still unsettled when its flow's `deadline` elapsed.
13
+ *
14
+ * The deadline counts from the execution's first start, which the engine
15
+ * journals, so a resume after a restart honors the original deadline rather
16
+ * than starting a new one. Expiry is terminal: the execution settles with this
17
+ * defect whether it was running or parked, and its attached children are
18
+ * cancelled with it. It is not a typed `execute` failure.
19
+ *
20
+ * `startedAtMs` is the journaled start and `deadlineMs` the declared bound, so
21
+ * `startedAtMs + deadlineMs` is when the execution expired.
22
+ *
23
+ * @category errors
24
+ * @since 1.0.0
25
+ */
26
+ export class DeadlineExceeded extends Schema.TaggedError<DeadlineExceeded>()(
27
+ "@smthrs/flow/DeadlineExceeded",
28
+ {
29
+ code: Schema.Literal("deadline_exceeded").pipe(
30
+ Schema.withConstructorDefault(Effect.succeed("deadline_exceeded"))
31
+ ),
32
+ flowName: Schema.String,
33
+ executionId: Schema.String,
34
+ deadlineMs: Schema.Number,
35
+ startedAtMs: Schema.Number,
36
+ message: Schema.String
37
+ }
38
+ ) {}
39
+
40
+ Fault.register("@smthrs/flow/DeadlineExceeded", "policy")
@@ -0,0 +1,36 @@
1
+ // Deep reviewed and polished by a human on 2026-08-10.
2
+
3
+ /**
4
+ * Failure raised when a flow execution has no explicit or derived identity.
5
+ *
6
+ * @since 0.1.0
7
+ */
8
+
9
+ import * as Effect from "effect/Effect"
10
+ import * as Schema from "effect/Schema"
11
+
12
+ /**
13
+ * A flow execution has no selected identity.
14
+ *
15
+ * The opt-in `derived` execution-id source raises this when the payload
16
+ * cannot be canonicalized, for example a non-finite number, a lone surrogate,
17
+ * or a cycle. It dies with it before starting a run, so this is a defect and
18
+ * not a typed failure a body catches. The default `fresh` source instead
19
+ * mints a cryptographic UUID for every unkeyed invocation.
20
+ *
21
+ * A served resume raises it too: `FlowProxyServer` dies with it when the
22
+ * `ExecutionIdScope` configured on a layer returns `undefined` for a resume
23
+ * request, because the client value is not a fallback there.
24
+ *
25
+ * @category errors
26
+ * @since 0.1.0
27
+ */
28
+ export class ExecutionIdRequired extends Schema.TaggedError<ExecutionIdRequired>()(
29
+ "@smthrs/flow/ExecutionIdRequired",
30
+ {
31
+ code: Schema.Literal("execution_id_required").pipe(
32
+ Schema.withConstructorDefault(Effect.succeed("execution_id_required"))
33
+ ),
34
+ flowName: Schema.String
35
+ }
36
+ ) {}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * The ambient source of execution identity, for a flow executed without one.
3
+ *
4
+ * Identity has three sources, in this order: the `executionId` the caller
5
+ * named, the `idempotencyKey` the flow declared, and — when neither exists —
6
+ * the source in this module. The first two are decisions an author made at the
7
+ * call site or the declaration site; the third is a decision the *host* makes
8
+ * once, for every flow it drives, which is why it is a context reference and
9
+ * not another option on `execute`.
10
+ *
11
+ * The default mints a fresh cryptographic UUID for every unkeyed invocation.
12
+ * Equal payloads are independent requests. To reattach after a crash, retain
13
+ * the returned execution id, declare an idempotency key, or explicitly install
14
+ * the `derived` source. Changing this default does not rewrite stored ids.
15
+ *
16
+ * @since 0.1.0
17
+ */
18
+
19
+ import { Sha256 } from "@smthrs/crypto"
20
+ import { DerivedKey } from "@smthrs/keys"
21
+ import * as Context from "effect/Context"
22
+ import * as Crypto from "effect/Crypto"
23
+ import * as Effect from "effect/Effect"
24
+ import * as Layer from "effect/Layer"
25
+ import * as Schema from "effect/Schema"
26
+ import { ExecutionIdRequired } from "./ExecutionIdRequired.ts"
27
+ import type { Any } from "./Flow.ts"
28
+
29
+ /**
30
+ * Mints the execution id of an invocation that named none.
31
+ *
32
+ * It is consulted only after the two explicit sources are absent, and it runs
33
+ * before the runtime is read, so a source that cannot name the invocation
34
+ * fails the execution rather than starting one under a guessed identity.
35
+ *
36
+ * @category models
37
+ * @since 0.1.0
38
+ */
39
+ export interface ExecutionIdSource {
40
+ readonly mint: <W extends Any>(
41
+ flow: W,
42
+ payload: unknown
43
+ ) => Effect.Effect<string, never, Crypto.Crypto | W["payloadSchema"]["EncodingServices"]>
44
+ }
45
+
46
+ /**
47
+ * The canonical key of an invocation: the flow's own payload codec, then RFC
48
+ * 8785, then SHA-256.
49
+ *
50
+ * Encoding first is what makes the key agree with the durable driver, which
51
+ * compares the ENCODED payload when it decides whether an existing run row is
52
+ * the same invocation. A payload with no canonical form — a non-finite number,
53
+ * a lone surrogate, a cycle — has no derivable identity at all, so it fails
54
+ * here instead of hashing something approximate.
55
+ *
56
+ * @private
57
+ */
58
+ const canonicalKey = <W extends Any>(
59
+ flow: W,
60
+ payload: unknown
61
+ ): Effect.Effect<string, ExecutionIdRequired, Crypto.Crypto | W["payloadSchema"]["EncodingServices"]> =>
62
+ (Schema.encodeEffect(Schema.toCodecJson(flow.payloadSchema))(payload) as Effect.Effect<
63
+ unknown,
64
+ unknown,
65
+ W["payloadSchema"]["EncodingServices"]
66
+ >).pipe(
67
+ Effect.flatMap((encoded) => Schema.decodeUnknownEffect(DerivedKey)(encoded)),
68
+ Effect.mapError(() => new ExecutionIdRequired({ flowName: flow._tag }))
69
+ )
70
+
71
+ /**
72
+ * An opt-in deterministic source over the flow tag and the payload's
73
+ * canonical form.
74
+ *
75
+ * Same tag and same encoded payload derive the same id, which is exactly the
76
+ * pair the durable driver already treats as one invocation, so a re-drive of a
77
+ * crashed program re-attaches to the run it left behind instead of opening a
78
+ * second one.
79
+ *
80
+ * The tag and canonical payload key are JSON-tuple framed before hashing.
81
+ * Their strings are used exactly as given and encoded as UTF-8, with no Unicode
82
+ * normalization. This preimage encoding freezes at rc.0.
83
+ *
84
+ * @category constructors
85
+ * @since 0.1.0
86
+ */
87
+ export const derived: ExecutionIdSource = {
88
+ mint: (flow, payload) =>
89
+ canonicalKey(flow, payload).pipe(
90
+ // The JSON tuple prevents delimiter splicing. This exact framing freezes at rc.0.
91
+ Effect.flatMap((key) => Effect.orDie(Schema.decodeUnknownEffect(Sha256)(JSON.stringify([flow._tag, key])))),
92
+ Effect.orDie
93
+ )
94
+ }
95
+
96
+ /**
97
+ * Mints independent execution ids for unkeyed requests using host cryptography.
98
+ * @category constructors
99
+ * @since 0.1.0
100
+ */
101
+ export const fresh: ExecutionIdSource = {
102
+ mint: () => Effect.flatMap(Crypto.Crypto, (crypto) => Effect.orDie(crypto.randomUUIDv4))
103
+ }
104
+
105
+ /**
106
+ * Context reference carrying the host's execution-id source, defaulting to
107
+ * {@link fresh}.
108
+ *
109
+ * @category idempotency
110
+ * @since 0.1.0
111
+ */
112
+ export const CurrentExecutionIds = Context.Reference<ExecutionIdSource>(
113
+ "@smthrs/flow/Flow/CurrentExecutionIds",
114
+ {
115
+ defaultValue: () => fresh
116
+ }
117
+ )
118
+
119
+ /**
120
+ * Declares the host's execution-id source as a layer.
121
+ *
122
+ * **When to use**
123
+ *
124
+ * Install `derived` when equal payloads deliberately identify the same work,
125
+ * or provide a host-specific identity source. Explicit caller execution ids
126
+ * and declared idempotency keys take precedence over this source.
127
+ *
128
+ * @category idempotency
129
+ * @since 0.1.0
130
+ */
131
+ export const layerExecutionIds = (
132
+ source: ExecutionIdSource
133
+ ): Layer.Layer<never> => Layer.succeed(CurrentExecutionIds)(source)