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

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 +149 -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 +422 -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 +919 -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 +149 -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 +810 -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 +1301 -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 +299 -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 +1021 -0
  642. package/src/Interpreter.ts +1635 -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,130 @@
1
+ // Deep reviewed and polished by a human on 2026-08-10.
2
+ /**
3
+ * The environment description folded into every cross-run cache key.
4
+ *
5
+ * A cached result is only reusable on a host that would have produced the same
6
+ * bytes, so the key has to name the environment as well as the inputs — the
7
+ * platform, the toolchain, and the capability groups in force. Bazel's action
8
+ * key does the same thing for the same reason.
9
+ *
10
+ * It is a *complete* value on purpose: an environment a composition cannot
11
+ * fully describe is one whose cache hits cannot be justified, and the engine
12
+ * executes rather than guessing at the missing part.
13
+ *
14
+ * @since 0.1.0
15
+ */
16
+ import * as PlanCachePolicy from "@smthrs/plan/CachePolicy";
17
+ import * as Schema from "effect/Schema";
18
+ /**
19
+ * Validates named capability groups.
20
+ *
21
+ * @private
22
+ * @since 0.1.0
23
+ */
24
+ const Capabilities = Schema.Record(Schema.String, Schema.Array(Schema.NonEmptyString)).check(Schema.makeFilter((capabilities) => Object.keys(capabilities).every((name) => name.length > 0) || "Capability names must not be empty"));
25
+ /**
26
+ * Schema for the complete runtime environment included in cache keys.
27
+ *
28
+ * @category models
29
+ * @since 0.1.0
30
+ */
31
+ export const CacheEnvironment = Schema.Struct({
32
+ /** Ordered semantic runtime layers, including versions and configuration. */
33
+ layers: Schema.Array(Schema.NonEmptyString),
34
+ /** Complete effective capability groups. */
35
+ capabilities: Capabilities
36
+ });
37
+ /**
38
+ * How far a recorded sealed result may travel.
39
+ *
40
+ * `shared` is the content-addressed default: the key names the inputs and the
41
+ * environment, so any run on any host that would have produced the same bytes
42
+ * may reuse the row. `run` and `flow` narrow that on purpose — a step whose
43
+ * result is only meaningful inside one execution, or inside one flow, folds
44
+ * that identity into its key so a sibling never reads it.
45
+ *
46
+ * This is `@smthrs/plan`'s `CachePolicy.CacheScope`, the one scope vocabulary
47
+ * `@smthrs/patterns` also declares its policy with.
48
+ *
49
+ * @category models
50
+ * @since 0.1.0
51
+ */
52
+ export const CacheScope = PlanCachePolicy.CacheScope;
53
+ /**
54
+ * The caller's declaration about the decay and the reach of a sealed action's
55
+ * recorded result.
56
+ *
57
+ * `ttlMs` bounds the age of a row the engine may serve: past it the dispatch
58
+ * executes again and journals `cache-expired`, so the refusal is durable
59
+ * evidence a replay reads rather than a fresh clock reading. `scope` decides
60
+ * what the key names besides the inputs.
61
+ *
62
+ * This is `@smthrs/plan`'s `CachePolicy.CachePolicy`, the one policy schema.
63
+ *
64
+ * @category schemas
65
+ * @since 0.1.0
66
+ */
67
+ export const CachePolicy = PlanCachePolicy.CachePolicy;
68
+ /**
69
+ * Annotation key carrying a declaration's {@link CachePolicy}.
70
+ *
71
+ * It is an annotation, not a field on the action, for the same reason
72
+ * placement and effects are: the policy is data that travels with the
73
+ * declaration and is read by whoever executes it, and adding it changes no
74
+ * existing call site.
75
+ *
76
+ * It is `@smthrs/plan`'s `CachePolicy.CachePolicyAnnotation` itself, the same
77
+ * object `@smthrs/patterns` annotates a flow with, identified by
78
+ * `"@smthrs/flow/Action/CachePolicy"`.
79
+ *
80
+ * @category annotations
81
+ * @since 0.1.0
82
+ */
83
+ export const CachePolicyAnnotation = PlanCachePolicy.CachePolicyAnnotation;
84
+ /**
85
+ * Reads the cache policy an annotation bag carries, or `undefined` when it
86
+ * carries none.
87
+ *
88
+ * @category getters
89
+ * @since 0.1.0
90
+ */
91
+ export const cachePolicyOf = PlanCachePolicy.cachePolicyOf;
92
+ /**
93
+ * Declares a cache policy on an action.
94
+ *
95
+ * This is the form the engine honors today: `@smthrs/engine-store` reads
96
+ * {@link CachePolicyAnnotation} off the dispatched action, bounds the age of
97
+ * the row it may serve by `ttlMs`, and narrows the address that row is stored
98
+ * under from `scope`. `@smthrs/patterns`' `WithCache` declares the same policy
99
+ * over a `@smthrs/core` flow under the same annotation key, for the
100
+ * declaration surface, so a policy written by either is read by the engine.
101
+ *
102
+ * The action is not mutated. `annotate` returns a new declaration carrying the
103
+ * policy, which is what a plan captures.
104
+ *
105
+ * It is `@smthrs/plan`'s `CachePolicy.annotate` under this package's name for
106
+ * it.
107
+ *
108
+ * @example
109
+ * ```ts
110
+ * import { Action } from "@smthrs/flow"
111
+ * import * as CacheEnvironment from "@smthrs/flow/CacheEnvironment"
112
+ * import * as Effect from "effect/Effect"
113
+ * import * as Schema from "effect/Schema"
114
+ *
115
+ * const compile = CacheEnvironment.withCache(
116
+ * Action.make({
117
+ * name: "build/compile",
118
+ * success: Schema.String,
119
+ * tier: "sealed",
120
+ * execute: Effect.succeed("dist/server.js")
121
+ * }),
122
+ * { ttlMs: 60_000, scope: "shared" }
123
+ * )
124
+ * ```
125
+ *
126
+ * @category combinators
127
+ * @since 0.1.0
128
+ */
129
+ export const withCache = PlanCachePolicy.annotate;
130
+ //# sourceMappingURL=CacheEnvironment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheEnvironment.js","sourceRoot":"","sources":["../../../src/Action/CacheEnvironment.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,eAAe,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC;;;;;GAKG;AACH,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAC1F,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,EAAE,EAAE,CACjC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,oCAAoC,CACnG,CACF,CAAA;AAaD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5C,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;IAC3C,4CAA4C;IAC5C,YAAY,EAAE,YAAY;CAC3B,CAAC,CAAA;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,CAAA;AAUpD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAA;AAWtD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC,qBAAqB,CAAA;AAE1E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC,aAAa,CAAA;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAC,QAAQ,CAAA","sourcesContent":["// Deep reviewed and polished by a human on 2026-08-10.\n\n/**\n * The environment description folded into every cross-run cache key.\n *\n * A cached result is only reusable on a host that would have produced the same\n * bytes, so the key has to name the environment as well as the inputs — the\n * platform, the toolchain, and the capability groups in force. Bazel's action\n * key does the same thing for the same reason.\n *\n * It is a *complete* value on purpose: an environment a composition cannot\n * fully describe is one whose cache hits cannot be justified, and the engine\n * executes rather than guessing at the missing part.\n *\n * @since 0.1.0\n */\n\nimport * as PlanCachePolicy from \"@smthrs/plan/CachePolicy\"\nimport * as Schema from \"effect/Schema\"\n\n/**\n * Validates named capability groups.\n *\n * @private\n * @since 0.1.0\n */\nconst Capabilities = Schema.Record(Schema.String, Schema.Array(Schema.NonEmptyString)).check(\n Schema.makeFilter((capabilities) =>\n Object.keys(capabilities).every((name) => name.length > 0) || \"Capability names must not be empty\"\n )\n)\n\n/**\n * Complete runtime environment included in every cross-run cache key.\n *\n * If a composition cannot provide this complete value, the engine executes\n * normally but does not derive a cross-run cache key.\n *\n * @category models\n * @since 0.1.0\n */\nexport type CacheEnvironment = typeof CacheEnvironment.Type\n\n/**\n * Schema for the complete runtime environment included in cache keys.\n *\n * @category models\n * @since 0.1.0\n */\nexport const CacheEnvironment = Schema.Struct({\n /** Ordered semantic runtime layers, including versions and configuration. */\n layers: Schema.Array(Schema.NonEmptyString),\n /** Complete effective capability groups. */\n capabilities: Capabilities\n})\n\n/**\n * How far a recorded sealed result may travel.\n *\n * `shared` is the content-addressed default: the key names the inputs and the\n * environment, so any run on any host that would have produced the same bytes\n * may reuse the row. `run` and `flow` narrow that on purpose — a step whose\n * result is only meaningful inside one execution, or inside one flow, folds\n * that identity into its key so a sibling never reads it.\n *\n * This is `@smthrs/plan`'s `CachePolicy.CacheScope`, the one scope vocabulary\n * `@smthrs/patterns` also declares its policy with.\n *\n * @category models\n * @since 0.1.0\n */\nexport const CacheScope = PlanCachePolicy.CacheScope\n\n/**\n * How far a recorded sealed result may travel.\n *\n * @category models\n * @since 0.1.0\n */\nexport type CacheScope = PlanCachePolicy.CacheScope\n\n/**\n * The caller's declaration about the decay and the reach of a sealed action's\n * recorded result.\n *\n * `ttlMs` bounds the age of a row the engine may serve: past it the dispatch\n * executes again and journals `cache-expired`, so the refusal is durable\n * evidence a replay reads rather than a fresh clock reading. `scope` decides\n * what the key names besides the inputs.\n *\n * This is `@smthrs/plan`'s `CachePolicy.CachePolicy`, the one policy schema.\n *\n * @category schemas\n * @since 0.1.0\n */\nexport const CachePolicy = PlanCachePolicy.CachePolicy\n\n/**\n * The caller's declaration about the decay and the reach of a sealed action's\n * recorded result.\n *\n * @category models\n * @since 0.1.0\n */\nexport type CachePolicy = PlanCachePolicy.CachePolicy\n\n/**\n * Annotation key carrying a declaration's {@link CachePolicy}.\n *\n * It is an annotation, not a field on the action, for the same reason\n * placement and effects are: the policy is data that travels with the\n * declaration and is read by whoever executes it, and adding it changes no\n * existing call site.\n *\n * It is `@smthrs/plan`'s `CachePolicy.CachePolicyAnnotation` itself, the same\n * object `@smthrs/patterns` annotates a flow with, identified by\n * `\"@smthrs/flow/Action/CachePolicy\"`.\n *\n * @category annotations\n * @since 0.1.0\n */\nexport const CachePolicyAnnotation = PlanCachePolicy.CachePolicyAnnotation\n\n/**\n * Reads the cache policy an annotation bag carries, or `undefined` when it\n * carries none.\n *\n * @category getters\n * @since 0.1.0\n */\nexport const cachePolicyOf = PlanCachePolicy.cachePolicyOf\n\n/**\n * Declares a cache policy on an action.\n *\n * This is the form the engine honors today: `@smthrs/engine-store` reads\n * {@link CachePolicyAnnotation} off the dispatched action, bounds the age of\n * the row it may serve by `ttlMs`, and narrows the address that row is stored\n * under from `scope`. `@smthrs/patterns`' `WithCache` declares the same policy\n * over a `@smthrs/core` flow under the same annotation key, for the\n * declaration surface, so a policy written by either is read by the engine.\n *\n * The action is not mutated. `annotate` returns a new declaration carrying the\n * policy, which is what a plan captures.\n *\n * It is `@smthrs/plan`'s `CachePolicy.annotate` under this package's name for\n * it.\n *\n * @example\n * ```ts\n * import { Action } from \"@smthrs/flow\"\n * import * as CacheEnvironment from \"@smthrs/flow/CacheEnvironment\"\n * import * as Effect from \"effect/Effect\"\n * import * as Schema from \"effect/Schema\"\n *\n * const compile = CacheEnvironment.withCache(\n * Action.make({\n * name: \"build/compile\",\n * success: Schema.String,\n * tier: \"sealed\",\n * execute: Effect.succeed(\"dist/server.js\")\n * }),\n * { ttlMs: 60_000, scope: \"shared\" }\n * )\n * ```\n *\n * @category combinators\n * @since 0.1.0\n */\nexport const withCache = PlanCachePolicy.annotate\n"]}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Defines the `ConcurrentKeylessDispatch` action failure.
3
+ *
4
+ * The `_tag` string was settled under `@smthrs/flow/` for 1.0.0-rc.0. The RC
5
+ * makes no compatibility promise to 0.x journals, and the tag freezes when
6
+ * the RC ships.
7
+ *
8
+ * @since 0.1.0
9
+ */
10
+ import * as Schema from "effect/Schema";
11
+ declare const ConcurrentKeylessDispatch_base: Schema.Class<ConcurrentKeylessDispatch, Schema.TaggedStruct<"@smthrs/flow/ConcurrentKeylessDispatch", {
12
+ readonly code: Schema.withConstructorDefault<Schema.Literal<"concurrent_keyless_dispatch">>;
13
+ readonly actionName: Schema.String;
14
+ }>, import("effect/Cause").YieldableError>;
15
+ /**
16
+ * Two ordinal-keyed invocations of one allocation scope were in flight
17
+ * concurrently, either keyless invocations of one declaration or same-key
18
+ * invocations at a non-sealed tier (issue #130), so their ordinals, and with
19
+ * them their step keys, attempt rows, and recorded outcomes, would be
20
+ * assigned by fiber arrival order. A crash-resume that replays the fibers in
21
+ * the opposite order would silently hand one invocation the other's recorded
22
+ * outcome (issue #111); Temporal fails such replays with a nondeterminism
23
+ * error, and the engine refuses the hazard up front instead of detecting it
24
+ * after the corruption. Declare an `idempotencyKey` *distinguishing* the
25
+ * invocations to dispatch them concurrently; a sealed action with a key
26
+ * takes a pure cache key and is exempt.
27
+ *
28
+ * @category errors
29
+ * @since 0.1.0
30
+ */
31
+ export declare class ConcurrentKeylessDispatch extends ConcurrentKeylessDispatch_base {
32
+ }
33
+ export {};
34
+ //# sourceMappingURL=ConcurrentKeylessDispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConcurrentKeylessDispatch.d.ts","sourceRoot":"","sources":["../../../src/Action/ConcurrentKeylessDispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;;;;;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,yBAA0B,SAAQ,8BAQ9C;CAAG"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Defines the `ConcurrentKeylessDispatch` action failure.
3
+ *
4
+ * The `_tag` string was settled under `@smthrs/flow/` for 1.0.0-rc.0. The RC
5
+ * makes no compatibility promise to 0.x journals, and the tag freezes when
6
+ * the RC ships.
7
+ *
8
+ * @since 0.1.0
9
+ */
10
+ import * as Effect from "effect/Effect";
11
+ import * as Schema from "effect/Schema";
12
+ /**
13
+ * Two ordinal-keyed invocations of one allocation scope were in flight
14
+ * concurrently, either keyless invocations of one declaration or same-key
15
+ * invocations at a non-sealed tier (issue #130), so their ordinals, and with
16
+ * them their step keys, attempt rows, and recorded outcomes, would be
17
+ * assigned by fiber arrival order. A crash-resume that replays the fibers in
18
+ * the opposite order would silently hand one invocation the other's recorded
19
+ * outcome (issue #111); Temporal fails such replays with a nondeterminism
20
+ * error, and the engine refuses the hazard up front instead of detecting it
21
+ * after the corruption. Declare an `idempotencyKey` *distinguishing* the
22
+ * invocations to dispatch them concurrently; a sealed action with a key
23
+ * takes a pure cache key and is exempt.
24
+ *
25
+ * @category errors
26
+ * @since 0.1.0
27
+ */
28
+ export class ConcurrentKeylessDispatch extends Schema.TaggedError()("@smthrs/flow/ConcurrentKeylessDispatch", {
29
+ code: Schema.Literal("concurrent_keyless_dispatch").pipe(Schema.withConstructorDefault(Effect.succeed("concurrent_keyless_dispatch"))),
30
+ actionName: Schema.String
31
+ }) {
32
+ }
33
+ //# sourceMappingURL=ConcurrentKeylessDispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConcurrentKeylessDispatch.js","sourceRoot":"","sources":["../../../src/Action/ConcurrentKeylessDispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,yBAA0B,SAAQ,MAAM,CAAC,WAAW,EAA6B,CAC5F,wCAAwC,EACxC;IACE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,IAAI,CACtD,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAC7E;IACD,UAAU,EAAE,MAAM,CAAC,MAAM;CAC1B,CACF;CAAG","sourcesContent":["/**\n * Defines the `ConcurrentKeylessDispatch` action failure.\n *\n * The `_tag` string was settled under `@smthrs/flow/` for 1.0.0-rc.0. The RC\n * makes no compatibility promise to 0.x journals, and the tag freezes when\n * the RC ships.\n *\n * @since 0.1.0\n */\n\nimport * as Effect from \"effect/Effect\"\nimport * as Schema from \"effect/Schema\"\n\n/**\n * Two ordinal-keyed invocations of one allocation scope were in flight\n * concurrently, either keyless invocations of one declaration or same-key\n * invocations at a non-sealed tier (issue #130), so their ordinals, and with\n * them their step keys, attempt rows, and recorded outcomes, would be\n * assigned by fiber arrival order. A crash-resume that replays the fibers in\n * the opposite order would silently hand one invocation the other's recorded\n * outcome (issue #111); Temporal fails such replays with a nondeterminism\n * error, and the engine refuses the hazard up front instead of detecting it\n * after the corruption. Declare an `idempotencyKey` *distinguishing* the\n * invocations to dispatch them concurrently; a sealed action with a key\n * takes a pure cache key and is exempt.\n *\n * @category errors\n * @since 0.1.0\n */\nexport class ConcurrentKeylessDispatch extends Schema.TaggedError<ConcurrentKeylessDispatch>()(\n \"@smthrs/flow/ConcurrentKeylessDispatch\",\n {\n code: Schema.Literal(\"concurrent_keyless_dispatch\").pipe(\n Schema.withConstructorDefault(Effect.succeed(\"concurrent_keyless_dispatch\"))\n ),\n actionName: Schema.String\n }\n) {}\n"]}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Defines runtime context carried across action attempts.
3
+ *
4
+ * @since 0.1.0
5
+ */
6
+ import * as Context from "effect/Context";
7
+ import * as Effect from "effect/Effect";
8
+ import * as Layer from "effect/Layer";
9
+ import type { CacheEnvironment } from "./CacheEnvironment.ts";
10
+ /**
11
+ * Context reference carrying the complete environment folded into reusable
12
+ * action keys.
13
+ *
14
+ * A composition either provides a complete {@link CacheEnvironment} or leaves
15
+ * it absent. When absent, the engine scopes action keys to the current run
16
+ * instead of presenting incomplete environment data as reusable identity.
17
+ *
18
+ * @category idempotency
19
+ * @since 0.1.0
20
+ */
21
+ export declare const CurrentCacheEnvironment: Context.Reference<{
22
+ readonly layers: readonly string[];
23
+ readonly capabilities: {
24
+ readonly [x: string]: readonly string[];
25
+ };
26
+ } | undefined>;
27
+ /**
28
+ * Declares the complete cache environment of a composition as a layer.
29
+ *
30
+ * **When to use**
31
+ *
32
+ * Use this only when the composition can identify every semantic runtime
33
+ * layer and its complete capability set. Otherwise leave the context absent.
34
+ *
35
+ * @category idempotency
36
+ * @since 0.1.0
37
+ */
38
+ export declare const layerCacheEnvironment: (environment: CacheEnvironment) => Layer.Layer<never>;
39
+ /**
40
+ * The ordinal slots a retry sequence shares across its attempts, keyed by
41
+ * allocation scope.
42
+ *
43
+ * `Action.retry` cannot allocate ordinals itself — allocation is scoped by
44
+ * action identity and only the engine knows which action is being
45
+ * dispatched (issue #73) — so it provides an empty map the engine fills per
46
+ * scope on the first attempt and reads back on every later one. The map is
47
+ * scope-keyed rather than a single value because one retry block may
48
+ * dispatch several distinct actions; a shared unkeyed slot handed the
49
+ * first action's ordinal to every later one, silently skipping their own
50
+ * name-scoped counters and aliasing a later independent dispatch onto an
51
+ * in-block key (issue #84).
52
+ *
53
+ * Each scope pins a *sequence* of ordinals rather than a single value
54
+ * (issue #100): one retry block may dispatch the same declaration several
55
+ * times, and a single-valued slot handed the first dispatch's ordinal to
56
+ * every later one, so the second dispatch silently replayed the first's
57
+ * recorded outcome. `cursors` counts the dispatches of each scope within the
58
+ * current attempt — `Action.retry` resets it at every attempt boundary —
59
+ * so the n-th same-scope dispatch of every attempt reuses the n-th pinned
60
+ * ordinal.
61
+ *
62
+ * @category attempts
63
+ * @since 0.1.0
64
+ */
65
+ export interface OrdinalSlot {
66
+ readonly values: Map<string, Array<number>>;
67
+ readonly cursors: Map<string, number>;
68
+ }
69
+ /**
70
+ * Context reference carrying the ordinal slot of the enclosing
71
+ * `Action.retry` sequence, when present.
72
+ *
73
+ * @category attempts
74
+ * @since 0.1.0
75
+ */
76
+ export declare const CurrentOrdinal: Context.Reference<OrdinalSlot | undefined>;
77
+ /**
78
+ * Context reference containing the current action retry attempt, defaulting
79
+ * to `1`.
80
+ *
81
+ * @category attempts
82
+ * @since 0.1.0
83
+ */
84
+ export declare const CurrentAttempt: Context.Reference<number>;
85
+ /**
86
+ * Context reference carrying the persisted key of the dispatch an
87
+ * implementation is currently running under, when the runtime supplies one.
88
+ *
89
+ * **When to use**
90
+ *
91
+ * Use it in an action implementation that has to name durable state of its
92
+ * own — `Sleep` names a `DurableClock` — so the name it derives belongs to
93
+ * THIS dispatch. The key is the identity the engine already allocated for the
94
+ * dispatch: its attempt rows, its recorded outcome, and its cache row are
95
+ * addressed by it, so it is stable across every replay of one node and
96
+ * distinct between two identical calls of the same declaration. Deriving from
97
+ * it is therefore the only way an implementation gets both properties without
98
+ * allocating a second identity beside the engine's.
99
+ *
100
+ * **Gotchas**
101
+ *
102
+ * A runtime that has not adopted the seam leaves the reference absent rather
103
+ * than substituting a placeholder, because a placeholder would silently alias
104
+ * every dispatch of one declaration onto one name. An implementation that
105
+ * needs durable identity refuses instead.
106
+ *
107
+ * @category idempotency
108
+ * @since 0.1.0
109
+ */
110
+ export declare const CurrentInvocationKey: Context.Reference<string | undefined>;
111
+ /**
112
+ * Context reference carrying the heartbeat of the attempt currently running,
113
+ * which the runtime installs for an action declared with
114
+ * `heartbeatTimeoutMs`. Outside such an attempt it does nothing.
115
+ *
116
+ * @category attempts
117
+ * @since 1.0.0
118
+ */
119
+ export declare const CurrentHeartbeat: Context.Reference<Effect.Effect<void, never, never>>;
120
+ /**
121
+ * Reports that the running action attempt is still making progress.
122
+ *
123
+ * An action declared with `heartbeatTimeoutMs` fails its attempt with
124
+ * `AttemptTimedOut` when that long passes without a heartbeat; each call
125
+ * restarts the gap. In any other action it is a no-op.
126
+ *
127
+ * @category attempts
128
+ * @since 1.0.0
129
+ */
130
+ export declare const heartbeat: Effect.Effect<void>;
131
+ //# sourceMappingURL=Context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../../src/Action/Context.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB;;;;;cAGnC,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,GAChC,aAAa,gBAAgB,KAC5B,KAAK,CAAC,KAAK,CAAC,KAAK,CAAwD,CAAA;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IAC3C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,4CAG1B,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,2BAG1B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,oBAAoB,uCAGhC,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,sDAG5B,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAGxC,CAAA"}
@@ -0,0 +1,99 @@
1
+ // Deep reviewed and polished by a human on 2026-08-10.
2
+ /**
3
+ * Defines runtime context carried across action attempts.
4
+ *
5
+ * @since 0.1.0
6
+ */
7
+ import * as Context from "effect/Context";
8
+ import * as Effect from "effect/Effect";
9
+ import * as Layer from "effect/Layer";
10
+ /**
11
+ * Context reference carrying the complete environment folded into reusable
12
+ * action keys.
13
+ *
14
+ * A composition either provides a complete {@link CacheEnvironment} or leaves
15
+ * it absent. When absent, the engine scopes action keys to the current run
16
+ * instead of presenting incomplete environment data as reusable identity.
17
+ *
18
+ * @category idempotency
19
+ * @since 0.1.0
20
+ */
21
+ export const CurrentCacheEnvironment = Context.Reference("@smthrs/flow/Action/CurrentCacheEnvironment", { defaultValue: () => undefined });
22
+ /**
23
+ * Declares the complete cache environment of a composition as a layer.
24
+ *
25
+ * **When to use**
26
+ *
27
+ * Use this only when the composition can identify every semantic runtime
28
+ * layer and its complete capability set. Otherwise leave the context absent.
29
+ *
30
+ * @category idempotency
31
+ * @since 0.1.0
32
+ */
33
+ export const layerCacheEnvironment = (environment) => Layer.succeed(CurrentCacheEnvironment)(environment);
34
+ /**
35
+ * Context reference carrying the ordinal slot of the enclosing
36
+ * `Action.retry` sequence, when present.
37
+ *
38
+ * @category attempts
39
+ * @since 0.1.0
40
+ */
41
+ export const CurrentOrdinal = Context.Reference("@smthrs/flow/Action/CurrentOrdinal", { defaultValue: () => undefined });
42
+ /**
43
+ * Context reference containing the current action retry attempt, defaulting
44
+ * to `1`.
45
+ *
46
+ * @category attempts
47
+ * @since 0.1.0
48
+ */
49
+ export const CurrentAttempt = Context.Reference("@smthrs/flow/Action/CurrentAttempt", { defaultValue: () => 1 });
50
+ /**
51
+ * Context reference carrying the persisted key of the dispatch an
52
+ * implementation is currently running under, when the runtime supplies one.
53
+ *
54
+ * **When to use**
55
+ *
56
+ * Use it in an action implementation that has to name durable state of its
57
+ * own — `Sleep` names a `DurableClock` — so the name it derives belongs to
58
+ * THIS dispatch. The key is the identity the engine already allocated for the
59
+ * dispatch: its attempt rows, its recorded outcome, and its cache row are
60
+ * addressed by it, so it is stable across every replay of one node and
61
+ * distinct between two identical calls of the same declaration. Deriving from
62
+ * it is therefore the only way an implementation gets both properties without
63
+ * allocating a second identity beside the engine's.
64
+ *
65
+ * **Gotchas**
66
+ *
67
+ * A runtime that has not adopted the seam leaves the reference absent rather
68
+ * than substituting a placeholder, because a placeholder would silently alias
69
+ * every dispatch of one declaration onto one name. An implementation that
70
+ * needs durable identity refuses instead.
71
+ *
72
+ * @category idempotency
73
+ * @since 0.1.0
74
+ */
75
+ export const CurrentInvocationKey = Context.Reference("@smthrs/flow/Action/CurrentInvocationKey", { defaultValue: () => undefined });
76
+ /**
77
+ * Context reference carrying the heartbeat of the attempt currently running,
78
+ * which the runtime installs for an action declared with
79
+ * `heartbeatTimeoutMs`. Outside such an attempt it does nothing.
80
+ *
81
+ * @category attempts
82
+ * @since 1.0.0
83
+ */
84
+ export const CurrentHeartbeat = Context.Reference("@smthrs/flow/Action/CurrentHeartbeat", { defaultValue: () => Effect.void });
85
+ /**
86
+ * Reports that the running action attempt is still making progress.
87
+ *
88
+ * An action declared with `heartbeatTimeoutMs` fails its attempt with
89
+ * `AttemptTimedOut` when that long passes without a heartbeat; each call
90
+ * restarts the gap. In any other action it is a no-op.
91
+ *
92
+ * @category attempts
93
+ * @since 1.0.0
94
+ */
95
+ export const heartbeat = Effect.gen(function* () {
96
+ const beat = yield* CurrentHeartbeat;
97
+ yield* beat;
98
+ });
99
+ //# sourceMappingURL=Context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../../src/Action/Context.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD;;;;GAIG;AAEH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,OAAO,CAAC,SAAS,CACtD,6CAA6C,EAC7C,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAClC,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,WAA6B,EACT,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,WAAW,CAAC,CAAA;AAiC5E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAC7C,oCAAoC,EACpC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAClC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAC7C,oCAAoC,EACpC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAC1B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC,SAAS,CACnD,0CAA0C,EAC1C,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAClC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAC/C,sCAAsC,EACtC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CACpC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,SAAS,GAAwB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAChE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAA;IACpC,KAAK,CAAC,CAAC,IAAI,CAAA;AACb,CAAC,CAAC,CAAA","sourcesContent":["// Deep reviewed and polished by a human on 2026-08-10.\n\n/**\n * Defines runtime context carried across action attempts.\n *\n * @since 0.1.0\n */\n\nimport * as Context from \"effect/Context\"\nimport * as Effect from \"effect/Effect\"\nimport * as Layer from \"effect/Layer\"\nimport type { CacheEnvironment } from \"./CacheEnvironment.ts\"\n\n/**\n * Context reference carrying the complete environment folded into reusable\n * action keys.\n *\n * A composition either provides a complete {@link CacheEnvironment} or leaves\n * it absent. When absent, the engine scopes action keys to the current run\n * instead of presenting incomplete environment data as reusable identity.\n *\n * @category idempotency\n * @since 0.1.0\n */\nexport const CurrentCacheEnvironment = Context.Reference<CacheEnvironment | undefined>(\n \"@smthrs/flow/Action/CurrentCacheEnvironment\",\n { defaultValue: () => undefined }\n)\n\n/**\n * Declares the complete cache environment of a composition as a layer.\n *\n * **When to use**\n *\n * Use this only when the composition can identify every semantic runtime\n * layer and its complete capability set. Otherwise leave the context absent.\n *\n * @category idempotency\n * @since 0.1.0\n */\nexport const layerCacheEnvironment = (\n environment: CacheEnvironment\n): Layer.Layer<never> => Layer.succeed(CurrentCacheEnvironment)(environment)\n\n/**\n * The ordinal slots a retry sequence shares across its attempts, keyed by\n * allocation scope.\n *\n * `Action.retry` cannot allocate ordinals itself — allocation is scoped by\n * action identity and only the engine knows which action is being\n * dispatched (issue #73) — so it provides an empty map the engine fills per\n * scope on the first attempt and reads back on every later one. The map is\n * scope-keyed rather than a single value because one retry block may\n * dispatch several distinct actions; a shared unkeyed slot handed the\n * first action's ordinal to every later one, silently skipping their own\n * name-scoped counters and aliasing a later independent dispatch onto an\n * in-block key (issue #84).\n *\n * Each scope pins a *sequence* of ordinals rather than a single value\n * (issue #100): one retry block may dispatch the same declaration several\n * times, and a single-valued slot handed the first dispatch's ordinal to\n * every later one, so the second dispatch silently replayed the first's\n * recorded outcome. `cursors` counts the dispatches of each scope within the\n * current attempt — `Action.retry` resets it at every attempt boundary —\n * so the n-th same-scope dispatch of every attempt reuses the n-th pinned\n * ordinal.\n *\n * @category attempts\n * @since 0.1.0\n */\nexport interface OrdinalSlot {\n readonly values: Map<string, Array<number>>\n readonly cursors: Map<string, number>\n}\n\n/**\n * Context reference carrying the ordinal slot of the enclosing\n * `Action.retry` sequence, when present.\n *\n * @category attempts\n * @since 0.1.0\n */\nexport const CurrentOrdinal = Context.Reference<OrdinalSlot | undefined>(\n \"@smthrs/flow/Action/CurrentOrdinal\",\n { defaultValue: () => undefined }\n)\n\n/**\n * Context reference containing the current action retry attempt, defaulting\n * to `1`.\n *\n * @category attempts\n * @since 0.1.0\n */\nexport const CurrentAttempt = Context.Reference<number>(\n \"@smthrs/flow/Action/CurrentAttempt\",\n { defaultValue: () => 1 }\n)\n\n/**\n * Context reference carrying the persisted key of the dispatch an\n * implementation is currently running under, when the runtime supplies one.\n *\n * **When to use**\n *\n * Use it in an action implementation that has to name durable state of its\n * own — `Sleep` names a `DurableClock` — so the name it derives belongs to\n * THIS dispatch. The key is the identity the engine already allocated for the\n * dispatch: its attempt rows, its recorded outcome, and its cache row are\n * addressed by it, so it is stable across every replay of one node and\n * distinct between two identical calls of the same declaration. Deriving from\n * it is therefore the only way an implementation gets both properties without\n * allocating a second identity beside the engine's.\n *\n * **Gotchas**\n *\n * A runtime that has not adopted the seam leaves the reference absent rather\n * than substituting a placeholder, because a placeholder would silently alias\n * every dispatch of one declaration onto one name. An implementation that\n * needs durable identity refuses instead.\n *\n * @category idempotency\n * @since 0.1.0\n */\nexport const CurrentInvocationKey = Context.Reference<string | undefined>(\n \"@smthrs/flow/Action/CurrentInvocationKey\",\n { defaultValue: () => undefined }\n)\n\n/**\n * Context reference carrying the heartbeat of the attempt currently running,\n * which the runtime installs for an action declared with\n * `heartbeatTimeoutMs`. Outside such an attempt it does nothing.\n *\n * @category attempts\n * @since 1.0.0\n */\nexport const CurrentHeartbeat = Context.Reference<Effect.Effect<void>>(\n \"@smthrs/flow/Action/CurrentHeartbeat\",\n { defaultValue: () => Effect.void }\n)\n\n/**\n * Reports that the running action attempt is still making progress.\n *\n * An action declared with `heartbeatTimeoutMs` fails its attempt with\n * `AttemptTimedOut` when that long passes without a heartbeat; each call\n * restarts the gap. In any other action it is a no-op.\n *\n * @category attempts\n * @since 1.0.0\n */\nexport const heartbeat: Effect.Effect<void> = Effect.gen(function*() {\n const beat = yield* CurrentHeartbeat\n yield* beat\n})\n"]}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Defines the `DuplicateImplementation` action failure.
3
+ *
4
+ * @since 0.1.0
5
+ */
6
+ import * as Schema from "effect/Schema";
7
+ declare const DuplicateImplementation_base: Schema.Class<DuplicateImplementation, Schema.TaggedStruct<"@smthrs/flow/Action/DuplicateImplementation", {
8
+ readonly name: Schema.String;
9
+ }>, import("effect/Cause").YieldableError>;
10
+ /**
11
+ * Two implementations competed for one action tag without an explicit override.
12
+ * @category errors
13
+ * @since 0.1.0
14
+ */
15
+ export declare class DuplicateImplementation extends DuplicateImplementation_base {
16
+ /** @since 1.0.0 */
17
+ get message(): string;
18
+ }
19
+ export {};
20
+ //# sourceMappingURL=DuplicateImplementation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DuplicateImplementation.d.ts","sourceRoot":"","sources":["../../../src/Action/DuplicateImplementation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;;;;AAEvC;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,4BAG5C;IAGC,mBAAmB;IACnB,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Defines the `DuplicateImplementation` action failure.
3
+ *
4
+ * @since 0.1.0
5
+ */
6
+ import * as Schema from "effect/Schema";
7
+ /**
8
+ * Two implementations competed for one action tag without an explicit override.
9
+ * @category errors
10
+ * @since 0.1.0
11
+ */
12
+ export class DuplicateImplementation extends Schema.TaggedError()("@smthrs/flow/Action/DuplicateImplementation", { name: Schema.String }) {
13
+ // The `name` field shadows `Error.name`, so without a message a recorded
14
+ // defect reads only as the bare action tag.
15
+ /** @since 1.0.0 */
16
+ get message() {
17
+ return `Action "${this.name}" already has an implementation in this registry; provide its layer once, or pass override: true to replace it`;
18
+ }
19
+ }
20
+ //# sourceMappingURL=DuplicateImplementation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DuplicateImplementation.js","sourceRoot":"","sources":["../../../src/Action/DuplicateImplementation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC;;;;GAIG;AACH,MAAM,OAAO,uBAAwB,SAAQ,MAAM,CAAC,WAAW,EAA2B,CACxF,6CAA6C,EAC7C,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CACxB;IACC,yEAAyE;IACzE,4CAA4C;IAC5C,mBAAmB;IACnB,IAAa,OAAO;QAClB,OAAO,WAAW,IAAI,CAAC,IAAI,gHAAgH,CAAA;IAC7I,CAAC;CACF","sourcesContent":["/**\n * Defines the `DuplicateImplementation` action failure.\n *\n * @since 0.1.0\n */\n\nimport * as Schema from \"effect/Schema\"\n\n/**\n * Two implementations competed for one action tag without an explicit override.\n * @category errors\n * @since 0.1.0\n */\nexport class DuplicateImplementation extends Schema.TaggedError<DuplicateImplementation>()(\n \"@smthrs/flow/Action/DuplicateImplementation\",\n { name: Schema.String }\n) {\n // The `name` field shadows `Error.name`, so without a message a recorded\n // defect reads only as the bare action tag.\n /** @since 1.0.0 */\n override get message(): string {\n return `Action \"${this.name}\" already has an implementation in this registry; provide its layer once, or pass override: true to replace it`\n }\n}\n"]}
@@ -0,0 +1,59 @@
1
+ import * as Schema from "effect/Schema";
2
+ /**
3
+ * Schema for the filesystem boundary of an action.
4
+ *
5
+ * @category models
6
+ * @since 0.1.0
7
+ */
8
+ export declare const FileBoundary: Schema.Struct<{
9
+ /**
10
+ * Exact files already measured, or globs to expand while preparing.
11
+ *
12
+ * Workspace-relative in both forms: a measured {@link FileInput} path is
13
+ * checked like every pattern, because the engine measures reads inside the
14
+ * workspace sandbox and would refuse an absolute or upward path only at
15
+ * prepare time.
16
+ */
17
+ readonly readSet: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
18
+ readonly path: Schema.NonEmptyString;
19
+ readonly digest: Schema.NonEmptyString;
20
+ }>, Schema.TaggedStruct<"Glob", {
21
+ readonly include: Schema.NonEmptyArray<Schema.NonEmptyString>;
22
+ readonly exclude: Schema.optional<Schema.$Array<Schema.NonEmptyString>>;
23
+ }>]>>;
24
+ /** Files or patterns the action is allowed to write. */
25
+ readonly writeSet: Schema.$Array<Schema.Union<readonly [Schema.NonEmptyString, Schema.TaggedStruct<"Glob", {
26
+ readonly include: Schema.NonEmptyArray<Schema.NonEmptyString>;
27
+ readonly exclude: Schema.optional<Schema.$Array<Schema.NonEmptyString>>;
28
+ }>, Schema.TaggedStruct<"TreeArtifact", {
29
+ readonly path: Schema.NonEmptyString;
30
+ }>]>>;
31
+ /**
32
+ * Files the action is allowed to DELETE.
33
+ *
34
+ * A declared write that is absent when the action finishes is a defect —
35
+ * Bazel's `SkyframeActionExecutor.checkOutputs` reports "output was not
36
+ * created" and fails the action — because recording the absence as valid
37
+ * evidence caches the claim "this file should not exist", which a later
38
+ * replay then acts on by deleting the path. Deletion stays a feature here,
39
+ * but only when it was declared, and a declared removal is what makes an
40
+ * absent path legitimate rather than a crash mid-execution.
41
+ *
42
+ * Optional with an empty default, so boundaries persisted before it keep
43
+ * decoding. Disjoint from {@link writeSet}: a path cannot be both promised
44
+ * and disclaimed. Workspace-relative like every other declared path —
45
+ * replay acts on a removal by deleting it, so an absolute or upward
46
+ * spelling would hand evidence an eraser aimed outside the workspace.
47
+ */
48
+ readonly removes: Schema.optional<Schema.$Array<Schema.NonEmptyString>>;
49
+ /** Whether undeclared access is rejected immediately or validated later. */
50
+ readonly boundaryMode: Schema.Literals<readonly ["hard", "expected"]>;
51
+ }>;
52
+ /**
53
+ * The filesystem boundary of an action.
54
+ *
55
+ * @category models
56
+ * @since 0.1.0
57
+ */
58
+ export type FileBoundary = typeof FileBoundary.Type;
59
+ //# sourceMappingURL=FileBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileBoundary.d.ts","sourceRoot":"","sources":["../../../src/Action/FileBoundary.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC;;;;;GAKG;AACH,eAAO,MAAM,YAAY;IACvB;;;;;;;OAOG;;;;;;;;IAEH,wDAAwD;;;;;;;IAExD;;;;;;;;;;;;;;;;OAgBG;;IAEH,4EAA4E;;EAa7E,CAAA;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA"}
@@ -0,0 +1,60 @@
1
+ // Deep reviewed and polished by a human on 2026-08-10.
2
+ /**
3
+ * An action's declaration of which files it reads and which it may write.
4
+ *
5
+ * The declaration is what makes a step hermetic enough to cache: the read set
6
+ * is the dependency edge set folded into the step key, and the write set is
7
+ * what the host measures the execution against afterwards. `boundaryMode`
8
+ * decides what happens when the two disagree — a hard boundary refuses the
9
+ * result, an expected one records the deviation and carries on.
10
+ *
11
+ * @since 0.1.0
12
+ */
13
+ import * as FileSet from "@smthrs/plan/FileSet";
14
+ import * as Schema from "effect/Schema";
15
+ import { BoundaryMode } from "./BoundaryMode.js";
16
+ import { FileInput } from "./FileInput.js";
17
+ /**
18
+ * Schema for the filesystem boundary of an action.
19
+ *
20
+ * @category models
21
+ * @since 0.1.0
22
+ */
23
+ export const FileBoundary = Schema.Struct({
24
+ /**
25
+ * Exact files already measured, or globs to expand while preparing.
26
+ *
27
+ * Workspace-relative in both forms: a measured {@link FileInput} path is
28
+ * checked like every pattern, because the engine measures reads inside the
29
+ * workspace sandbox and would refuse an absolute or upward path only at
30
+ * prepare time.
31
+ */
32
+ readSet: Schema.Array(Schema.Union([FileInput, FileSet.Glob])),
33
+ /** Files or patterns the action is allowed to write. */
34
+ writeSet: Schema.Array(FileSet.Entry),
35
+ /**
36
+ * Files the action is allowed to DELETE.
37
+ *
38
+ * A declared write that is absent when the action finishes is a defect —
39
+ * Bazel's `SkyframeActionExecutor.checkOutputs` reports "output was not
40
+ * created" and fails the action — because recording the absence as valid
41
+ * evidence caches the claim "this file should not exist", which a later
42
+ * replay then acts on by deleting the path. Deletion stays a feature here,
43
+ * but only when it was declared, and a declared removal is what makes an
44
+ * absent path legitimate rather than a crash mid-execution.
45
+ *
46
+ * Optional with an empty default, so boundaries persisted before it keep
47
+ * decoding. Disjoint from {@link writeSet}: a path cannot be both promised
48
+ * and disclaimed. Workspace-relative like every other declared path —
49
+ * replay acts on a removal by deleting it, so an absolute or upward
50
+ * spelling would hand evidence an eraser aimed outside the workspace.
51
+ */
52
+ removes: Schema.optional(Schema.Array(FileSet.Pattern)),
53
+ /** Whether undeclared access is rejected immediately or validated later. */
54
+ boundaryMode: BoundaryMode
55
+ }).check(Schema.makeFilter((boundary) => {
56
+ const both = (boundary.removes ?? []).filter((path) => boundary.writeSet.some((entry) => FileSet.overlaps(entry, path)));
57
+ return both.length === 0 ||
58
+ `a path cannot be both written and removed: ${both.join(", ")}`;
59
+ }, { title: "disjointWritesAndRemoves" }));
60
+ //# sourceMappingURL=FileBoundary.js.map