@smthrs/engine-store 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 (787) hide show
  1. package/CHANGELOG.md +247 -0
  2. package/LICENSE +21 -0
  3. package/README.md +146 -2
  4. package/dist/cjs/ArtifactGc.d.ts +235 -0
  5. package/dist/cjs/ArtifactGc.d.ts.map +1 -0
  6. package/dist/cjs/ArtifactGc.js +183 -0
  7. package/dist/cjs/ArtifactGc.js.map +7 -0
  8. package/dist/cjs/ArtifactSync.d.ts +164 -0
  9. package/dist/cjs/ArtifactSync.d.ts.map +1 -0
  10. package/dist/cjs/ArtifactSync.js +144 -0
  11. package/dist/cjs/ArtifactSync.js.map +7 -0
  12. package/dist/cjs/CacheSync.d.ts +112 -0
  13. package/dist/cjs/CacheSync.d.ts.map +1 -0
  14. package/dist/cjs/CacheSync.js +64 -0
  15. package/dist/cjs/CacheSync.js.map +7 -0
  16. package/dist/cjs/DeferredClockFold.d.ts +354 -0
  17. package/dist/cjs/DeferredClockFold.d.ts.map +1 -0
  18. package/dist/cjs/DeferredClockFold.js +335 -0
  19. package/dist/cjs/DeferredClockFold.js.map +7 -0
  20. package/dist/cjs/DisasterRecovery.d.ts +431 -0
  21. package/dist/cjs/DisasterRecovery.d.ts.map +1 -0
  22. package/dist/cjs/DisasterRecovery.js +453 -0
  23. package/dist/cjs/DisasterRecovery.js.map +7 -0
  24. package/dist/cjs/DurableEngineState.d.ts +776 -0
  25. package/dist/cjs/DurableEngineState.d.ts.map +1 -0
  26. package/dist/cjs/DurableEngineState.js +1536 -0
  27. package/dist/cjs/DurableEngineState.js.map +7 -0
  28. package/dist/cjs/EngineStore.d.ts +158 -0
  29. package/dist/cjs/EngineStore.d.ts.map +1 -0
  30. package/dist/cjs/EngineStore.js +398 -0
  31. package/dist/cjs/EngineStore.js.map +7 -0
  32. package/dist/cjs/EngineStoreMetrics.d.ts +276 -0
  33. package/dist/cjs/EngineStoreMetrics.d.ts.map +1 -0
  34. package/dist/cjs/EngineStoreMetrics.js +135 -0
  35. package/dist/cjs/EngineStoreMetrics.js.map +7 -0
  36. package/dist/cjs/Errors.d.ts +22 -0
  37. package/dist/cjs/Errors.d.ts.map +1 -0
  38. package/dist/cjs/Errors.js +39 -0
  39. package/dist/cjs/Errors.js.map +7 -0
  40. package/dist/cjs/EventTypes.d.ts +27 -0
  41. package/dist/cjs/EventTypes.d.ts.map +1 -0
  42. package/dist/cjs/EventTypes.js +37 -0
  43. package/dist/cjs/EventTypes.js.map +7 -0
  44. package/dist/cjs/ExecutionFacts.d.ts +59 -0
  45. package/dist/cjs/ExecutionFacts.d.ts.map +1 -0
  46. package/dist/cjs/ExecutionFacts.js +123 -0
  47. package/dist/cjs/ExecutionFacts.js.map +7 -0
  48. package/dist/cjs/ExecutionSnapshot.d.ts +117 -0
  49. package/dist/cjs/ExecutionSnapshot.d.ts.map +1 -0
  50. package/dist/cjs/ExecutionSnapshot.js +111 -0
  51. package/dist/cjs/ExecutionSnapshot.js.map +7 -0
  52. package/dist/cjs/Inconsistency.d.ts +154 -0
  53. package/dist/cjs/Inconsistency.d.ts.map +1 -0
  54. package/dist/cjs/Inconsistency.js +135 -0
  55. package/dist/cjs/Inconsistency.js.map +7 -0
  56. package/dist/cjs/Migrations.d.ts +56 -0
  57. package/dist/cjs/Migrations.d.ts.map +1 -0
  58. package/dist/cjs/Migrations.js +78 -0
  59. package/dist/cjs/Migrations.js.map +7 -0
  60. package/dist/cjs/OwnerIdentity.d.ts +91 -0
  61. package/dist/cjs/OwnerIdentity.d.ts.map +1 -0
  62. package/dist/cjs/OwnerIdentity.js +65 -0
  63. package/dist/cjs/OwnerIdentity.js.map +7 -0
  64. package/dist/cjs/PlanInputStore.d.ts +110 -0
  65. package/dist/cjs/PlanInputStore.d.ts.map +1 -0
  66. package/dist/cjs/PlanInputStore.js +224 -0
  67. package/dist/cjs/PlanInputStore.js.map +7 -0
  68. package/dist/cjs/PlanMergeStore.d.ts +113 -0
  69. package/dist/cjs/PlanMergeStore.d.ts.map +1 -0
  70. package/dist/cjs/PlanMergeStore.js +255 -0
  71. package/dist/cjs/PlanMergeStore.js.map +7 -0
  72. package/dist/cjs/PlanScheduler.d.ts +363 -0
  73. package/dist/cjs/PlanScheduler.d.ts.map +1 -0
  74. package/dist/cjs/PlanScheduler.js +1090 -0
  75. package/dist/cjs/PlanScheduler.js.map +7 -0
  76. package/dist/cjs/Reconciliation.d.ts +175 -0
  77. package/dist/cjs/Reconciliation.d.ts.map +1 -0
  78. package/dist/cjs/Reconciliation.js +119 -0
  79. package/dist/cjs/Reconciliation.js.map +7 -0
  80. package/dist/cjs/ReplayOnly.d.ts +91 -0
  81. package/dist/cjs/ReplayOnly.d.ts.map +1 -0
  82. package/dist/cjs/ReplayOnly.js +52 -0
  83. package/dist/cjs/ReplayOnly.js.map +7 -0
  84. package/dist/cjs/Retention.d.ts +113 -0
  85. package/dist/cjs/Retention.d.ts.map +1 -0
  86. package/dist/cjs/Retention.js +99 -0
  87. package/dist/cjs/Retention.js.map +7 -0
  88. package/dist/cjs/RunCatalogRead.d.ts +17 -0
  89. package/dist/cjs/RunCatalogRead.d.ts.map +1 -0
  90. package/dist/cjs/RunCatalogRead.js +33 -0
  91. package/dist/cjs/RunCatalogRead.js.map +7 -0
  92. package/dist/cjs/RunChangeFeed.d.ts +75 -0
  93. package/dist/cjs/RunChangeFeed.d.ts.map +1 -0
  94. package/dist/cjs/RunChangeFeed.js +96 -0
  95. package/dist/cjs/RunChangeFeed.js.map +7 -0
  96. package/dist/cjs/RunState.d.ts +116 -0
  97. package/dist/cjs/RunState.d.ts.map +1 -0
  98. package/dist/cjs/RunState.js +76 -0
  99. package/dist/cjs/RunState.js.map +7 -0
  100. package/dist/cjs/Selection.d.ts +495 -0
  101. package/dist/cjs/Selection.d.ts.map +1 -0
  102. package/dist/cjs/Selection.js +288 -0
  103. package/dist/cjs/Selection.js.map +7 -0
  104. package/dist/cjs/SelectionStore.d.ts +141 -0
  105. package/dist/cjs/SelectionStore.d.ts.map +1 -0
  106. package/dist/cjs/SelectionStore.js +229 -0
  107. package/dist/cjs/SelectionStore.js.map +7 -0
  108. package/dist/cjs/StepBoundary.d.ts +501 -0
  109. package/dist/cjs/StepBoundary.d.ts.map +1 -0
  110. package/dist/cjs/StepBoundary.js +619 -0
  111. package/dist/cjs/StepBoundary.js.map +7 -0
  112. package/dist/cjs/StepCacheFold.d.ts +148 -0
  113. package/dist/cjs/StepCacheFold.d.ts.map +1 -0
  114. package/dist/cjs/StepCacheFold.js +131 -0
  115. package/dist/cjs/StepCacheFold.js.map +7 -0
  116. package/dist/cjs/StepSandbox.d.ts +78 -0
  117. package/dist/cjs/StepSandbox.d.ts.map +1 -0
  118. package/dist/cjs/StepSandbox.js +75 -0
  119. package/dist/cjs/StepSandbox.js.map +7 -0
  120. package/dist/cjs/WakeBus.d.ts +116 -0
  121. package/dist/cjs/WakeBus.d.ts.map +1 -0
  122. package/dist/cjs/WakeBus.js +89 -0
  123. package/dist/cjs/WakeBus.js.map +7 -0
  124. package/dist/cjs/WorkspaceSandbox.d.ts +619 -0
  125. package/dist/cjs/WorkspaceSandbox.d.ts.map +1 -0
  126. package/dist/cjs/WorkspaceSandbox.js +711 -0
  127. package/dist/cjs/WorkspaceSandbox.js.map +7 -0
  128. package/dist/cjs/index.d.ts +157 -0
  129. package/dist/cjs/index.d.ts.map +1 -0
  130. package/dist/cjs/index.js +95 -0
  131. package/dist/cjs/index.js.map +7 -0
  132. package/dist/cjs/internal/ActionPersistence.d.ts +276 -0
  133. package/dist/cjs/internal/ActionPersistence.d.ts.map +1 -0
  134. package/dist/cjs/internal/ActionPersistence.js +1395 -0
  135. package/dist/cjs/internal/ActionPersistence.js.map +7 -0
  136. package/dist/cjs/internal/ArtifactRoots.d.ts +38 -0
  137. package/dist/cjs/internal/ArtifactRoots.d.ts.map +1 -0
  138. package/dist/cjs/internal/ArtifactRoots.js +89 -0
  139. package/dist/cjs/internal/ArtifactRoots.js.map +7 -0
  140. package/dist/cjs/internal/AttemptAdmission.d.ts +53 -0
  141. package/dist/cjs/internal/AttemptAdmission.d.ts.map +1 -0
  142. package/dist/cjs/internal/AttemptAdmission.js +52 -0
  143. package/dist/cjs/internal/AttemptAdmission.js.map +7 -0
  144. package/dist/cjs/internal/AttemptLifecycle.d.ts +245 -0
  145. package/dist/cjs/internal/AttemptLifecycle.d.ts.map +1 -0
  146. package/dist/cjs/internal/AttemptLifecycle.js +112 -0
  147. package/dist/cjs/internal/AttemptLifecycle.js.map +7 -0
  148. package/dist/cjs/internal/AttemptProbe.d.ts +53 -0
  149. package/dist/cjs/internal/AttemptProbe.d.ts.map +1 -0
  150. package/dist/cjs/internal/AttemptProbe.js +66 -0
  151. package/dist/cjs/internal/AttemptProbe.js.map +7 -0
  152. package/dist/cjs/internal/CacheAdmission.d.ts +79 -0
  153. package/dist/cjs/internal/CacheAdmission.d.ts.map +1 -0
  154. package/dist/cjs/internal/CacheAdmission.js +71 -0
  155. package/dist/cjs/internal/CacheAdmission.js.map +7 -0
  156. package/dist/cjs/internal/CacheAgeHistory.d.ts +27 -0
  157. package/dist/cjs/internal/CacheAgeHistory.d.ts.map +1 -0
  158. package/dist/cjs/internal/CacheAgeHistory.js +61 -0
  159. package/dist/cjs/internal/CacheAgeHistory.js.map +7 -0
  160. package/dist/cjs/internal/CacheAgeVerdicts.d.ts +15 -0
  161. package/dist/cjs/internal/CacheAgeVerdicts.d.ts.map +1 -0
  162. package/dist/cjs/internal/CacheAgeVerdicts.js +73 -0
  163. package/dist/cjs/internal/CacheAgeVerdicts.js.map +7 -0
  164. package/dist/cjs/internal/CacheOutputPolicy.d.ts +24 -0
  165. package/dist/cjs/internal/CacheOutputPolicy.d.ts.map +1 -0
  166. package/dist/cjs/internal/CacheOutputPolicy.js +75 -0
  167. package/dist/cjs/internal/CacheOutputPolicy.js.map +7 -0
  168. package/dist/cjs/internal/CachePublication.d.ts +97 -0
  169. package/dist/cjs/internal/CachePublication.d.ts.map +1 -0
  170. package/dist/cjs/internal/CachePublication.js +80 -0
  171. package/dist/cjs/internal/CachePublication.js.map +7 -0
  172. package/dist/cjs/internal/CallFacts.d.ts +15 -0
  173. package/dist/cjs/internal/CallFacts.d.ts.map +1 -0
  174. package/dist/cjs/internal/CallFacts.js +97 -0
  175. package/dist/cjs/internal/CallFacts.js.map +7 -0
  176. package/dist/cjs/internal/CopiedRecord.d.ts +61 -0
  177. package/dist/cjs/internal/CopiedRecord.d.ts.map +1 -0
  178. package/dist/cjs/internal/CopiedRecord.js +134 -0
  179. package/dist/cjs/internal/CopiedRecord.js.map +7 -0
  180. package/dist/cjs/internal/DeferredPersistence.d.ts +108 -0
  181. package/dist/cjs/internal/DeferredPersistence.d.ts.map +1 -0
  182. package/dist/cjs/internal/DeferredPersistence.js +270 -0
  183. package/dist/cjs/internal/DeferredPersistence.js.map +7 -0
  184. package/dist/cjs/internal/EffectRecords.d.ts +92 -0
  185. package/dist/cjs/internal/EffectRecords.d.ts.map +1 -0
  186. package/dist/cjs/internal/EffectRecords.js +63 -0
  187. package/dist/cjs/internal/EffectRecords.js.map +7 -0
  188. package/dist/cjs/internal/EngineJj.d.ts +30 -0
  189. package/dist/cjs/internal/EngineJj.d.ts.map +1 -0
  190. package/dist/cjs/internal/EngineJj.js +42 -0
  191. package/dist/cjs/internal/EngineJj.js.map +7 -0
  192. package/dist/cjs/internal/EngineStateSchema.d.ts +68 -0
  193. package/dist/cjs/internal/EngineStateSchema.d.ts.map +1 -0
  194. package/dist/cjs/internal/EngineStateSchema.js +58 -0
  195. package/dist/cjs/internal/EngineStateSchema.js.map +7 -0
  196. package/dist/cjs/internal/ExecutionSnapshotRead.d.ts +162 -0
  197. package/dist/cjs/internal/ExecutionSnapshotRead.d.ts.map +1 -0
  198. package/dist/cjs/internal/ExecutionSnapshotRead.js +199 -0
  199. package/dist/cjs/internal/ExecutionSnapshotRead.js.map +7 -0
  200. package/dist/cjs/internal/ExecutionSnapshotRelations.d.ts +39 -0
  201. package/dist/cjs/internal/ExecutionSnapshotRelations.d.ts.map +1 -0
  202. package/dist/cjs/internal/ExecutionSnapshotRelations.js +105 -0
  203. package/dist/cjs/internal/ExecutionSnapshotRelations.js.map +7 -0
  204. package/dist/cjs/internal/ExitEncoding.d.ts +180 -0
  205. package/dist/cjs/internal/ExitEncoding.d.ts.map +1 -0
  206. package/dist/cjs/internal/ExitEncoding.js +236 -0
  207. package/dist/cjs/internal/ExitEncoding.js.map +7 -0
  208. package/dist/cjs/internal/FileBoundarySnapshot.d.ts +14 -0
  209. package/dist/cjs/internal/FileBoundarySnapshot.d.ts.map +1 -0
  210. package/dist/cjs/internal/FileBoundarySnapshot.js +51 -0
  211. package/dist/cjs/internal/FileBoundarySnapshot.js.map +7 -0
  212. package/dist/cjs/internal/FileEnumeration.d.ts +127 -0
  213. package/dist/cjs/internal/FileEnumeration.d.ts.map +1 -0
  214. package/dist/cjs/internal/FileEnumeration.js +194 -0
  215. package/dist/cjs/internal/FileEnumeration.js.map +7 -0
  216. package/dist/cjs/internal/HostReflection.d.ts +80 -0
  217. package/dist/cjs/internal/HostReflection.d.ts.map +1 -0
  218. package/dist/cjs/internal/HostReflection.js +43 -0
  219. package/dist/cjs/internal/HostReflection.js.map +7 -0
  220. package/dist/cjs/internal/JournalRecords.d.ts +325 -0
  221. package/dist/cjs/internal/JournalRecords.d.ts.map +1 -0
  222. package/dist/cjs/internal/JournalRecords.js +122 -0
  223. package/dist/cjs/internal/JournalRecords.js.map +7 -0
  224. package/dist/cjs/internal/NodeJournal.d.ts +157 -0
  225. package/dist/cjs/internal/NodeJournal.d.ts.map +1 -0
  226. package/dist/cjs/internal/NodeJournal.js +192 -0
  227. package/dist/cjs/internal/NodeJournal.js.map +7 -0
  228. package/dist/cjs/internal/Ordering.d.ts +14 -0
  229. package/dist/cjs/internal/Ordering.d.ts.map +1 -0
  230. package/dist/cjs/internal/Ordering.js +25 -0
  231. package/dist/cjs/internal/Ordering.js.map +7 -0
  232. package/dist/cjs/internal/PlanInputs.d.ts +14 -0
  233. package/dist/cjs/internal/PlanInputs.d.ts.map +1 -0
  234. package/dist/cjs/internal/PlanInputs.js +78 -0
  235. package/dist/cjs/internal/PlanInputs.js.map +7 -0
  236. package/dist/cjs/internal/PlanMerges.d.ts +178 -0
  237. package/dist/cjs/internal/PlanMerges.d.ts.map +1 -0
  238. package/dist/cjs/internal/PlanMerges.js +125 -0
  239. package/dist/cjs/internal/PlanMerges.js.map +7 -0
  240. package/dist/cjs/internal/ProvenanceSlot.d.ts +30 -0
  241. package/dist/cjs/internal/ProvenanceSlot.d.ts.map +1 -0
  242. package/dist/cjs/internal/ProvenanceSlot.js +53 -0
  243. package/dist/cjs/internal/ProvenanceSlot.js.map +7 -0
  244. package/dist/cjs/internal/ResultEnvelope.d.ts +88 -0
  245. package/dist/cjs/internal/ResultEnvelope.d.ts.map +1 -0
  246. package/dist/cjs/internal/ResultEnvelope.js +90 -0
  247. package/dist/cjs/internal/ResultEnvelope.js.map +7 -0
  248. package/dist/cjs/internal/RetentionOps.d.ts +414 -0
  249. package/dist/cjs/internal/RetentionOps.d.ts.map +1 -0
  250. package/dist/cjs/internal/RetentionOps.js +354 -0
  251. package/dist/cjs/internal/RetentionOps.js.map +7 -0
  252. package/dist/cjs/internal/RunCatalogOps.d.ts +118 -0
  253. package/dist/cjs/internal/RunCatalogOps.d.ts.map +1 -0
  254. package/dist/cjs/internal/RunCatalogOps.js +85 -0
  255. package/dist/cjs/internal/RunCatalogOps.js.map +7 -0
  256. package/dist/cjs/internal/RunCoordinator.d.ts +78 -0
  257. package/dist/cjs/internal/RunCoordinator.d.ts.map +1 -0
  258. package/dist/cjs/internal/RunCoordinator.js +123 -0
  259. package/dist/cjs/internal/RunCoordinator.js.map +7 -0
  260. package/dist/cjs/internal/RunDriver.d.ts +192 -0
  261. package/dist/cjs/internal/RunDriver.d.ts.map +1 -0
  262. package/dist/cjs/internal/RunDriver.js +1584 -0
  263. package/dist/cjs/internal/RunDriver.js.map +7 -0
  264. package/dist/cjs/internal/RunLifecycle.d.ts +22 -0
  265. package/dist/cjs/internal/RunLifecycle.d.ts.map +1 -0
  266. package/dist/cjs/internal/RunLifecycle.js +63 -0
  267. package/dist/cjs/internal/RunLifecycle.js.map +7 -0
  268. package/dist/cjs/internal/RunListing.d.ts +78 -0
  269. package/dist/cjs/internal/RunListing.d.ts.map +1 -0
  270. package/dist/cjs/internal/RunListing.js +171 -0
  271. package/dist/cjs/internal/RunListing.js.map +7 -0
  272. package/dist/cjs/internal/RunListingError.d.ts +35 -0
  273. package/dist/cjs/internal/RunListingError.d.ts.map +1 -0
  274. package/dist/cjs/internal/RunListingError.js +47 -0
  275. package/dist/cjs/internal/RunListingError.js.map +7 -0
  276. package/dist/cjs/internal/RuntimeGraph.d.ts +73 -0
  277. package/dist/cjs/internal/RuntimeGraph.d.ts.map +1 -0
  278. package/dist/cjs/internal/RuntimeGraph.js +180 -0
  279. package/dist/cjs/internal/RuntimeGraph.js.map +7 -0
  280. package/dist/cjs/internal/SandboxedExecution.d.ts +80 -0
  281. package/dist/cjs/internal/SandboxedExecution.d.ts.map +1 -0
  282. package/dist/cjs/internal/SandboxedExecution.js +104 -0
  283. package/dist/cjs/internal/SandboxedExecution.js.map +7 -0
  284. package/dist/cjs/internal/StateTransaction.d.ts +44 -0
  285. package/dist/cjs/internal/StateTransaction.d.ts.map +1 -0
  286. package/dist/cjs/internal/StateTransaction.js +52 -0
  287. package/dist/cjs/internal/StateTransaction.js.map +7 -0
  288. package/dist/cjs/internal/StepFacts.d.ts +14 -0
  289. package/dist/cjs/internal/StepFacts.d.ts.map +1 -0
  290. package/dist/cjs/internal/StepFacts.js +58 -0
  291. package/dist/cjs/internal/StepFacts.js.map +7 -0
  292. package/dist/cjs/internal/TypedEvents.d.ts +14 -0
  293. package/dist/cjs/internal/TypedEvents.d.ts.map +1 -0
  294. package/dist/cjs/internal/TypedEvents.js +37 -0
  295. package/dist/cjs/internal/TypedEvents.js.map +7 -0
  296. package/dist/cjs/migrations/0001_initial.d.ts +17 -0
  297. package/dist/cjs/migrations/0001_initial.d.ts.map +1 -0
  298. package/dist/cjs/migrations/0001_initial.js +61 -0
  299. package/dist/cjs/migrations/0001_initial.js.map +7 -0
  300. package/dist/cjs/migrations/0002_selection_store.d.ts +15 -0
  301. package/dist/cjs/migrations/0002_selection_store.d.ts.map +1 -0
  302. package/dist/cjs/migrations/0002_selection_store.js +56 -0
  303. package/dist/cjs/migrations/0002_selection_store.js.map +7 -0
  304. package/dist/cjs/migrations/0003_plan_inputs.d.ts +13 -0
  305. package/dist/cjs/migrations/0003_plan_inputs.d.ts.map +1 -0
  306. package/dist/cjs/migrations/0003_plan_inputs.js +90 -0
  307. package/dist/cjs/migrations/0003_plan_inputs.js.map +7 -0
  308. package/dist/cjs/migrations/0004_plan_environment.d.ts +14 -0
  309. package/dist/cjs/migrations/0004_plan_environment.d.ts.map +1 -0
  310. package/dist/cjs/migrations/0004_plan_environment.js +56 -0
  311. package/dist/cjs/migrations/0004_plan_environment.js.map +7 -0
  312. package/dist/cjs/migrations/0005_plan_merges.d.ts +14 -0
  313. package/dist/cjs/migrations/0005_plan_merges.d.ts.map +1 -0
  314. package/dist/cjs/migrations/0005_plan_merges.js +82 -0
  315. package/dist/cjs/migrations/0005_plan_merges.js.map +7 -0
  316. package/dist/cjs/migrations/0006_execution_listing.d.ts +15 -0
  317. package/dist/cjs/migrations/0006_execution_listing.d.ts.map +1 -0
  318. package/dist/cjs/migrations/0006_execution_listing.js +101 -0
  319. package/dist/cjs/migrations/0006_execution_listing.js.map +7 -0
  320. package/dist/cjs/migrations/0007_run_parent_sequence.d.ts +15 -0
  321. package/dist/cjs/migrations/0007_run_parent_sequence.d.ts.map +1 -0
  322. package/dist/cjs/migrations/0007_run_parent_sequence.js +40 -0
  323. package/dist/cjs/migrations/0007_run_parent_sequence.js.map +7 -0
  324. package/dist/cjs/migrations/0008_deferred_consumption.d.ts +16 -0
  325. package/dist/cjs/migrations/0008_deferred_consumption.d.ts.map +1 -0
  326. package/dist/cjs/migrations/0008_deferred_consumption.js +45 -0
  327. package/dist/cjs/migrations/0008_deferred_consumption.js.map +7 -0
  328. package/dist/cjs/migrations/0009_deferred_clock_facts.d.ts +24 -0
  329. package/dist/cjs/migrations/0009_deferred_clock_facts.d.ts.map +1 -0
  330. package/dist/cjs/migrations/0009_deferred_clock_facts.js +141 -0
  331. package/dist/cjs/migrations/0009_deferred_clock_facts.js.map +7 -0
  332. package/dist/cjs/migrations/0010_pending_cancellation.d.ts +15 -0
  333. package/dist/cjs/migrations/0010_pending_cancellation.d.ts.map +1 -0
  334. package/dist/cjs/migrations/0010_pending_cancellation.js +41 -0
  335. package/dist/cjs/migrations/0010_pending_cancellation.js.map +7 -0
  336. package/dist/cjs/package.json +1 -0
  337. package/dist/cjs/test/TestStores.d.ts +89 -0
  338. package/dist/cjs/test/TestStores.d.ts.map +1 -0
  339. package/dist/cjs/test/TestStores.js +98 -0
  340. package/dist/cjs/test/TestStores.js.map +7 -0
  341. package/dist/esm/ArtifactGc.d.ts +235 -0
  342. package/dist/esm/ArtifactGc.d.ts.map +1 -0
  343. package/dist/esm/ArtifactGc.js +268 -0
  344. package/dist/esm/ArtifactGc.js.map +1 -0
  345. package/dist/esm/ArtifactSync.d.ts +164 -0
  346. package/dist/esm/ArtifactSync.d.ts.map +1 -0
  347. package/dist/esm/ArtifactSync.js +176 -0
  348. package/dist/esm/ArtifactSync.js.map +1 -0
  349. package/dist/esm/CacheSync.d.ts +112 -0
  350. package/dist/esm/CacheSync.d.ts.map +1 -0
  351. package/dist/esm/CacheSync.js +94 -0
  352. package/dist/esm/CacheSync.js.map +1 -0
  353. package/dist/esm/DeferredClockFold.d.ts +354 -0
  354. package/dist/esm/DeferredClockFold.d.ts.map +1 -0
  355. package/dist/esm/DeferredClockFold.js +472 -0
  356. package/dist/esm/DeferredClockFold.js.map +1 -0
  357. package/dist/esm/DisasterRecovery.d.ts +431 -0
  358. package/dist/esm/DisasterRecovery.d.ts.map +1 -0
  359. package/dist/esm/DisasterRecovery.js +523 -0
  360. package/dist/esm/DisasterRecovery.js.map +1 -0
  361. package/dist/esm/DurableEngineState.d.ts +776 -0
  362. package/dist/esm/DurableEngineState.d.ts.map +1 -0
  363. package/dist/esm/DurableEngineState.js +1648 -0
  364. package/dist/esm/DurableEngineState.js.map +1 -0
  365. package/dist/esm/EngineStore.d.ts +158 -0
  366. package/dist/esm/EngineStore.d.ts.map +1 -0
  367. package/dist/esm/EngineStore.js +403 -0
  368. package/dist/esm/EngineStore.js.map +1 -0
  369. package/dist/esm/EngineStoreMetrics.d.ts +276 -0
  370. package/dist/esm/EngineStoreMetrics.d.ts.map +1 -0
  371. package/dist/esm/EngineStoreMetrics.js +260 -0
  372. package/dist/esm/EngineStoreMetrics.js.map +1 -0
  373. package/dist/esm/Errors.d.ts +22 -0
  374. package/dist/esm/Errors.d.ts.map +1 -0
  375. package/dist/esm/Errors.js +22 -0
  376. package/dist/esm/Errors.js.map +1 -0
  377. package/dist/esm/EventTypes.d.ts +27 -0
  378. package/dist/esm/EventTypes.d.ts.map +1 -0
  379. package/dist/esm/EventTypes.js +27 -0
  380. package/dist/esm/EventTypes.js.map +1 -0
  381. package/dist/esm/ExecutionFacts.d.ts +59 -0
  382. package/dist/esm/ExecutionFacts.d.ts.map +1 -0
  383. package/dist/esm/ExecutionFacts.js +96 -0
  384. package/dist/esm/ExecutionFacts.js.map +1 -0
  385. package/dist/esm/ExecutionSnapshot.d.ts +117 -0
  386. package/dist/esm/ExecutionSnapshot.d.ts.map +1 -0
  387. package/dist/esm/ExecutionSnapshot.js +95 -0
  388. package/dist/esm/ExecutionSnapshot.js.map +1 -0
  389. package/dist/esm/Inconsistency.d.ts +154 -0
  390. package/dist/esm/Inconsistency.d.ts.map +1 -0
  391. package/dist/esm/Inconsistency.js +133 -0
  392. package/dist/esm/Inconsistency.js.map +1 -0
  393. package/dist/esm/Migrations.d.ts +56 -0
  394. package/dist/esm/Migrations.d.ts.map +1 -0
  395. package/dist/esm/Migrations.js +91 -0
  396. package/dist/esm/Migrations.js.map +1 -0
  397. package/dist/esm/OwnerIdentity.d.ts +91 -0
  398. package/dist/esm/OwnerIdentity.d.ts.map +1 -0
  399. package/dist/esm/OwnerIdentity.js +99 -0
  400. package/dist/esm/OwnerIdentity.js.map +1 -0
  401. package/dist/esm/PlanInputStore.d.ts +110 -0
  402. package/dist/esm/PlanInputStore.d.ts.map +1 -0
  403. package/dist/esm/PlanInputStore.js +207 -0
  404. package/dist/esm/PlanInputStore.js.map +1 -0
  405. package/dist/esm/PlanMergeStore.d.ts +113 -0
  406. package/dist/esm/PlanMergeStore.d.ts.map +1 -0
  407. package/dist/esm/PlanMergeStore.js +244 -0
  408. package/dist/esm/PlanMergeStore.js.map +1 -0
  409. package/dist/esm/PlanScheduler.d.ts +363 -0
  410. package/dist/esm/PlanScheduler.d.ts.map +1 -0
  411. package/dist/esm/PlanScheduler.js +1321 -0
  412. package/dist/esm/PlanScheduler.js.map +1 -0
  413. package/dist/esm/Reconciliation.d.ts +175 -0
  414. package/dist/esm/Reconciliation.d.ts.map +1 -0
  415. package/dist/esm/Reconciliation.js +175 -0
  416. package/dist/esm/Reconciliation.js.map +1 -0
  417. package/dist/esm/ReplayOnly.d.ts +91 -0
  418. package/dist/esm/ReplayOnly.d.ts.map +1 -0
  419. package/dist/esm/ReplayOnly.js +59 -0
  420. package/dist/esm/ReplayOnly.js.map +1 -0
  421. package/dist/esm/Retention.d.ts +113 -0
  422. package/dist/esm/Retention.d.ts.map +1 -0
  423. package/dist/esm/Retention.js +139 -0
  424. package/dist/esm/Retention.js.map +1 -0
  425. package/dist/esm/RunCatalogRead.d.ts +17 -0
  426. package/dist/esm/RunCatalogRead.d.ts.map +1 -0
  427. package/dist/esm/RunCatalogRead.js +17 -0
  428. package/dist/esm/RunCatalogRead.js.map +1 -0
  429. package/dist/esm/RunChangeFeed.d.ts +75 -0
  430. package/dist/esm/RunChangeFeed.d.ts.map +1 -0
  431. package/dist/esm/RunChangeFeed.js +81 -0
  432. package/dist/esm/RunChangeFeed.js.map +1 -0
  433. package/dist/esm/RunState.d.ts +116 -0
  434. package/dist/esm/RunState.d.ts.map +1 -0
  435. package/dist/esm/RunState.js +109 -0
  436. package/dist/esm/RunState.js.map +1 -0
  437. package/dist/esm/Selection.d.ts +495 -0
  438. package/dist/esm/Selection.d.ts.map +1 -0
  439. package/dist/esm/Selection.js +482 -0
  440. package/dist/esm/Selection.js.map +1 -0
  441. package/dist/esm/SelectionStore.d.ts +141 -0
  442. package/dist/esm/SelectionStore.d.ts.map +1 -0
  443. package/dist/esm/SelectionStore.js +215 -0
  444. package/dist/esm/SelectionStore.js.map +1 -0
  445. package/dist/esm/StepBoundary.d.ts +501 -0
  446. package/dist/esm/StepBoundary.d.ts.map +1 -0
  447. package/dist/esm/StepBoundary.js +919 -0
  448. package/dist/esm/StepBoundary.js.map +1 -0
  449. package/dist/esm/StepCacheFold.d.ts +148 -0
  450. package/dist/esm/StepCacheFold.d.ts.map +1 -0
  451. package/dist/esm/StepCacheFold.js +201 -0
  452. package/dist/esm/StepCacheFold.js.map +1 -0
  453. package/dist/esm/StepSandbox.d.ts +78 -0
  454. package/dist/esm/StepSandbox.d.ts.map +1 -0
  455. package/dist/esm/StepSandbox.js +70 -0
  456. package/dist/esm/StepSandbox.js.map +1 -0
  457. package/dist/esm/WakeBus.d.ts +116 -0
  458. package/dist/esm/WakeBus.d.ts.map +1 -0
  459. package/dist/esm/WakeBus.js +121 -0
  460. package/dist/esm/WakeBus.js.map +1 -0
  461. package/dist/esm/WorkspaceSandbox.d.ts +619 -0
  462. package/dist/esm/WorkspaceSandbox.d.ts.map +1 -0
  463. package/dist/esm/WorkspaceSandbox.js +985 -0
  464. package/dist/esm/WorkspaceSandbox.js.map +1 -0
  465. package/dist/esm/index.d.ts +157 -0
  466. package/dist/esm/index.d.ts.map +1 -0
  467. package/dist/esm/index.js +157 -0
  468. package/dist/esm/index.js.map +1 -0
  469. package/dist/esm/internal/ActionPersistence.d.ts +276 -0
  470. package/dist/esm/internal/ActionPersistence.d.ts.map +1 -0
  471. package/dist/esm/internal/ActionPersistence.js +2306 -0
  472. package/dist/esm/internal/ActionPersistence.js.map +1 -0
  473. package/dist/esm/internal/ArtifactRoots.d.ts +38 -0
  474. package/dist/esm/internal/ArtifactRoots.d.ts.map +1 -0
  475. package/dist/esm/internal/ArtifactRoots.js +76 -0
  476. package/dist/esm/internal/ArtifactRoots.js.map +1 -0
  477. package/dist/esm/internal/AttemptAdmission.d.ts +53 -0
  478. package/dist/esm/internal/AttemptAdmission.d.ts.map +1 -0
  479. package/dist/esm/internal/AttemptAdmission.js +52 -0
  480. package/dist/esm/internal/AttemptAdmission.js.map +1 -0
  481. package/dist/esm/internal/AttemptLifecycle.d.ts +245 -0
  482. package/dist/esm/internal/AttemptLifecycle.d.ts.map +1 -0
  483. package/dist/esm/internal/AttemptLifecycle.js +104 -0
  484. package/dist/esm/internal/AttemptLifecycle.js.map +1 -0
  485. package/dist/esm/internal/AttemptProbe.d.ts +53 -0
  486. package/dist/esm/internal/AttemptProbe.d.ts.map +1 -0
  487. package/dist/esm/internal/AttemptProbe.js +83 -0
  488. package/dist/esm/internal/AttemptProbe.js.map +1 -0
  489. package/dist/esm/internal/CacheAdmission.d.ts +79 -0
  490. package/dist/esm/internal/CacheAdmission.d.ts.map +1 -0
  491. package/dist/esm/internal/CacheAdmission.js +72 -0
  492. package/dist/esm/internal/CacheAdmission.js.map +1 -0
  493. package/dist/esm/internal/CacheAgeHistory.d.ts +27 -0
  494. package/dist/esm/internal/CacheAgeHistory.d.ts.map +1 -0
  495. package/dist/esm/internal/CacheAgeHistory.js +49 -0
  496. package/dist/esm/internal/CacheAgeHistory.js.map +1 -0
  497. package/dist/esm/internal/CacheAgeVerdicts.d.ts +15 -0
  498. package/dist/esm/internal/CacheAgeVerdicts.d.ts.map +1 -0
  499. package/dist/esm/internal/CacheAgeVerdicts.js +54 -0
  500. package/dist/esm/internal/CacheAgeVerdicts.js.map +1 -0
  501. package/dist/esm/internal/CacheOutputPolicy.d.ts +24 -0
  502. package/dist/esm/internal/CacheOutputPolicy.d.ts.map +1 -0
  503. package/dist/esm/internal/CacheOutputPolicy.js +73 -0
  504. package/dist/esm/internal/CacheOutputPolicy.js.map +1 -0
  505. package/dist/esm/internal/CachePublication.d.ts +97 -0
  506. package/dist/esm/internal/CachePublication.d.ts.map +1 -0
  507. package/dist/esm/internal/CachePublication.js +116 -0
  508. package/dist/esm/internal/CachePublication.js.map +1 -0
  509. package/dist/esm/internal/CallFacts.d.ts +15 -0
  510. package/dist/esm/internal/CallFacts.d.ts.map +1 -0
  511. package/dist/esm/internal/CallFacts.js +83 -0
  512. package/dist/esm/internal/CallFacts.js.map +1 -0
  513. package/dist/esm/internal/CopiedRecord.d.ts +61 -0
  514. package/dist/esm/internal/CopiedRecord.d.ts.map +1 -0
  515. package/dist/esm/internal/CopiedRecord.js +165 -0
  516. package/dist/esm/internal/CopiedRecord.js.map +1 -0
  517. package/dist/esm/internal/DeferredPersistence.d.ts +108 -0
  518. package/dist/esm/internal/DeferredPersistence.d.ts.map +1 -0
  519. package/dist/esm/internal/DeferredPersistence.js +240 -0
  520. package/dist/esm/internal/DeferredPersistence.js.map +1 -0
  521. package/dist/esm/internal/EffectRecords.d.ts +92 -0
  522. package/dist/esm/internal/EffectRecords.d.ts.map +1 -0
  523. package/dist/esm/internal/EffectRecords.js +94 -0
  524. package/dist/esm/internal/EffectRecords.js.map +1 -0
  525. package/dist/esm/internal/EngineJj.d.ts +30 -0
  526. package/dist/esm/internal/EngineJj.d.ts.map +1 -0
  527. package/dist/esm/internal/EngineJj.js +29 -0
  528. package/dist/esm/internal/EngineJj.js.map +1 -0
  529. package/dist/esm/internal/EngineStateSchema.d.ts +68 -0
  530. package/dist/esm/internal/EngineStateSchema.d.ts.map +1 -0
  531. package/dist/esm/internal/EngineStateSchema.js +53 -0
  532. package/dist/esm/internal/EngineStateSchema.js.map +1 -0
  533. package/dist/esm/internal/ExecutionSnapshotRead.d.ts +162 -0
  534. package/dist/esm/internal/ExecutionSnapshotRead.d.ts.map +1 -0
  535. package/dist/esm/internal/ExecutionSnapshotRead.js +218 -0
  536. package/dist/esm/internal/ExecutionSnapshotRead.js.map +1 -0
  537. package/dist/esm/internal/ExecutionSnapshotRelations.d.ts +39 -0
  538. package/dist/esm/internal/ExecutionSnapshotRelations.d.ts.map +1 -0
  539. package/dist/esm/internal/ExecutionSnapshotRelations.js +81 -0
  540. package/dist/esm/internal/ExecutionSnapshotRelations.js.map +1 -0
  541. package/dist/esm/internal/ExitEncoding.d.ts +180 -0
  542. package/dist/esm/internal/ExitEncoding.d.ts.map +1 -0
  543. package/dist/esm/internal/ExitEncoding.js +361 -0
  544. package/dist/esm/internal/ExitEncoding.js.map +1 -0
  545. package/dist/esm/internal/FileBoundarySnapshot.d.ts +14 -0
  546. package/dist/esm/internal/FileBoundarySnapshot.d.ts.map +1 -0
  547. package/dist/esm/internal/FileBoundarySnapshot.js +29 -0
  548. package/dist/esm/internal/FileBoundarySnapshot.js.map +1 -0
  549. package/dist/esm/internal/FileEnumeration.d.ts +127 -0
  550. package/dist/esm/internal/FileEnumeration.d.ts.map +1 -0
  551. package/dist/esm/internal/FileEnumeration.js +236 -0
  552. package/dist/esm/internal/FileEnumeration.js.map +1 -0
  553. package/dist/esm/internal/HostReflection.d.ts +80 -0
  554. package/dist/esm/internal/HostReflection.d.ts.map +1 -0
  555. package/dist/esm/internal/HostReflection.js +98 -0
  556. package/dist/esm/internal/HostReflection.js.map +1 -0
  557. package/dist/esm/internal/JournalRecords.d.ts +325 -0
  558. package/dist/esm/internal/JournalRecords.d.ts.map +1 -0
  559. package/dist/esm/internal/JournalRecords.js +306 -0
  560. package/dist/esm/internal/JournalRecords.js.map +1 -0
  561. package/dist/esm/internal/NodeJournal.d.ts +157 -0
  562. package/dist/esm/internal/NodeJournal.d.ts.map +1 -0
  563. package/dist/esm/internal/NodeJournal.js +298 -0
  564. package/dist/esm/internal/NodeJournal.js.map +1 -0
  565. package/dist/esm/internal/Ordering.d.ts +14 -0
  566. package/dist/esm/internal/Ordering.d.ts.map +1 -0
  567. package/dist/esm/internal/Ordering.js +14 -0
  568. package/dist/esm/internal/Ordering.js.map +1 -0
  569. package/dist/esm/internal/PlanInputs.d.ts +14 -0
  570. package/dist/esm/internal/PlanInputs.d.ts.map +1 -0
  571. package/dist/esm/internal/PlanInputs.js +57 -0
  572. package/dist/esm/internal/PlanInputs.js.map +1 -0
  573. package/dist/esm/internal/PlanMerges.d.ts +178 -0
  574. package/dist/esm/internal/PlanMerges.d.ts.map +1 -0
  575. package/dist/esm/internal/PlanMerges.js +113 -0
  576. package/dist/esm/internal/PlanMerges.js.map +1 -0
  577. package/dist/esm/internal/ProvenanceSlot.d.ts +30 -0
  578. package/dist/esm/internal/ProvenanceSlot.d.ts.map +1 -0
  579. package/dist/esm/internal/ProvenanceSlot.js +39 -0
  580. package/dist/esm/internal/ProvenanceSlot.js.map +1 -0
  581. package/dist/esm/internal/ResultEnvelope.d.ts +88 -0
  582. package/dist/esm/internal/ResultEnvelope.d.ts.map +1 -0
  583. package/dist/esm/internal/ResultEnvelope.js +83 -0
  584. package/dist/esm/internal/ResultEnvelope.js.map +1 -0
  585. package/dist/esm/internal/RetentionOps.d.ts +414 -0
  586. package/dist/esm/internal/RetentionOps.d.ts.map +1 -0
  587. package/dist/esm/internal/RetentionOps.js +576 -0
  588. package/dist/esm/internal/RetentionOps.js.map +1 -0
  589. package/dist/esm/internal/RunCatalogOps.d.ts +118 -0
  590. package/dist/esm/internal/RunCatalogOps.d.ts.map +1 -0
  591. package/dist/esm/internal/RunCatalogOps.js +120 -0
  592. package/dist/esm/internal/RunCatalogOps.js.map +1 -0
  593. package/dist/esm/internal/RunCoordinator.d.ts +78 -0
  594. package/dist/esm/internal/RunCoordinator.d.ts.map +1 -0
  595. package/dist/esm/internal/RunCoordinator.js +115 -0
  596. package/dist/esm/internal/RunCoordinator.js.map +1 -0
  597. package/dist/esm/internal/RunDriver.d.ts +192 -0
  598. package/dist/esm/internal/RunDriver.d.ts.map +1 -0
  599. package/dist/esm/internal/RunDriver.js +2334 -0
  600. package/dist/esm/internal/RunDriver.js.map +1 -0
  601. package/dist/esm/internal/RunLifecycle.d.ts +22 -0
  602. package/dist/esm/internal/RunLifecycle.d.ts.map +1 -0
  603. package/dist/esm/internal/RunLifecycle.js +49 -0
  604. package/dist/esm/internal/RunLifecycle.js.map +1 -0
  605. package/dist/esm/internal/RunListing.d.ts +78 -0
  606. package/dist/esm/internal/RunListing.d.ts.map +1 -0
  607. package/dist/esm/internal/RunListing.js +146 -0
  608. package/dist/esm/internal/RunListing.js.map +1 -0
  609. package/dist/esm/internal/RunListingError.d.ts +35 -0
  610. package/dist/esm/internal/RunListingError.d.ts.map +1 -0
  611. package/dist/esm/internal/RunListingError.js +27 -0
  612. package/dist/esm/internal/RunListingError.js.map +1 -0
  613. package/dist/esm/internal/RuntimeGraph.d.ts +73 -0
  614. package/dist/esm/internal/RuntimeGraph.d.ts.map +1 -0
  615. package/dist/esm/internal/RuntimeGraph.js +182 -0
  616. package/dist/esm/internal/RuntimeGraph.js.map +1 -0
  617. package/dist/esm/internal/SandboxedExecution.d.ts +80 -0
  618. package/dist/esm/internal/SandboxedExecution.d.ts.map +1 -0
  619. package/dist/esm/internal/SandboxedExecution.js +107 -0
  620. package/dist/esm/internal/SandboxedExecution.js.map +1 -0
  621. package/dist/esm/internal/StateTransaction.d.ts +44 -0
  622. package/dist/esm/internal/StateTransaction.d.ts.map +1 -0
  623. package/dist/esm/internal/StateTransaction.js +54 -0
  624. package/dist/esm/internal/StateTransaction.js.map +1 -0
  625. package/dist/esm/internal/StepFacts.d.ts +14 -0
  626. package/dist/esm/internal/StepFacts.d.ts.map +1 -0
  627. package/dist/esm/internal/StepFacts.js +35 -0
  628. package/dist/esm/internal/StepFacts.js.map +1 -0
  629. package/dist/esm/internal/TypedEvents.d.ts +14 -0
  630. package/dist/esm/internal/TypedEvents.d.ts.map +1 -0
  631. package/dist/esm/internal/TypedEvents.js +14 -0
  632. package/dist/esm/internal/TypedEvents.js.map +1 -0
  633. package/dist/esm/migrations/0001_initial.d.ts +17 -0
  634. package/dist/esm/migrations/0001_initial.d.ts.map +1 -0
  635. package/dist/esm/migrations/0001_initial.js +41 -0
  636. package/dist/esm/migrations/0001_initial.js.map +1 -0
  637. package/dist/esm/migrations/0002_selection_store.d.ts +15 -0
  638. package/dist/esm/migrations/0002_selection_store.d.ts.map +1 -0
  639. package/dist/esm/migrations/0002_selection_store.js +34 -0
  640. package/dist/esm/migrations/0002_selection_store.js.map +1 -0
  641. package/dist/esm/migrations/0003_plan_inputs.d.ts +13 -0
  642. package/dist/esm/migrations/0003_plan_inputs.d.ts.map +1 -0
  643. package/dist/esm/migrations/0003_plan_inputs.js +70 -0
  644. package/dist/esm/migrations/0003_plan_inputs.js.map +1 -0
  645. package/dist/esm/migrations/0004_plan_environment.d.ts +14 -0
  646. package/dist/esm/migrations/0004_plan_environment.d.ts.map +1 -0
  647. package/dist/esm/migrations/0004_plan_environment.js +33 -0
  648. package/dist/esm/migrations/0004_plan_environment.js.map +1 -0
  649. package/dist/esm/migrations/0005_plan_merges.d.ts +14 -0
  650. package/dist/esm/migrations/0005_plan_merges.d.ts.map +1 -0
  651. package/dist/esm/migrations/0005_plan_merges.js +59 -0
  652. package/dist/esm/migrations/0005_plan_merges.js.map +1 -0
  653. package/dist/esm/migrations/0006_execution_listing.d.ts +15 -0
  654. package/dist/esm/migrations/0006_execution_listing.d.ts.map +1 -0
  655. package/dist/esm/migrations/0006_execution_listing.js +81 -0
  656. package/dist/esm/migrations/0006_execution_listing.js.map +1 -0
  657. package/dist/esm/migrations/0007_run_parent_sequence.d.ts +15 -0
  658. package/dist/esm/migrations/0007_run_parent_sequence.d.ts.map +1 -0
  659. package/dist/esm/migrations/0007_run_parent_sequence.js +18 -0
  660. package/dist/esm/migrations/0007_run_parent_sequence.js.map +1 -0
  661. package/dist/esm/migrations/0008_deferred_consumption.d.ts +16 -0
  662. package/dist/esm/migrations/0008_deferred_consumption.d.ts.map +1 -0
  663. package/dist/esm/migrations/0008_deferred_consumption.js +24 -0
  664. package/dist/esm/migrations/0008_deferred_consumption.js.map +1 -0
  665. package/dist/esm/migrations/0009_deferred_clock_facts.d.ts +24 -0
  666. package/dist/esm/migrations/0009_deferred_clock_facts.d.ts.map +1 -0
  667. package/dist/esm/migrations/0009_deferred_clock_facts.js +127 -0
  668. package/dist/esm/migrations/0009_deferred_clock_facts.js.map +1 -0
  669. package/dist/esm/migrations/0010_pending_cancellation.d.ts +15 -0
  670. package/dist/esm/migrations/0010_pending_cancellation.d.ts.map +1 -0
  671. package/dist/esm/migrations/0010_pending_cancellation.js +19 -0
  672. package/dist/esm/migrations/0010_pending_cancellation.js.map +1 -0
  673. package/dist/esm/test/TestStores.d.ts +89 -0
  674. package/dist/esm/test/TestStores.d.ts.map +1 -0
  675. package/dist/esm/test/TestStores.js +103 -0
  676. package/dist/esm/test/TestStores.js.map +1 -0
  677. package/docs/README.md +113 -0
  678. package/docs/api.md +1494 -0
  679. package/docs/concepts/attempts-and-replay.md +149 -0
  680. package/docs/concepts/cache-admission.md +265 -0
  681. package/docs/concepts/call-facts.md +86 -0
  682. package/docs/concepts/durable-waits.md +175 -0
  683. package/docs/concepts/execution-facts.md +90 -0
  684. package/docs/concepts/ownership-and-fencing.md +128 -0
  685. package/docs/concepts/step-boundaries.md +148 -0
  686. package/docs/concepts/workspace-transactions.md +199 -0
  687. package/docs/event-types.md +14 -0
  688. package/docs/guides/back-up-and-restore.md +164 -0
  689. package/docs/guides/collect-unreferenced-artifacts.md +128 -0
  690. package/docs/guides/compose-a-durable-engine.md +146 -0
  691. package/docs/guides/coordinate-two-processes.md +120 -0
  692. package/docs/guides/defer-work-with-selection.md +171 -0
  693. package/docs/guides/delete-old-run-history.md +154 -0
  694. package/docs/guides/drive-a-plan.md +314 -0
  695. package/docs/guides/observe-engine-metrics.md +98 -0
  696. package/docs/guides/observe-executions.md +187 -0
  697. package/docs/guides/reclaim-runs-from-a-dead-host.md +133 -0
  698. package/docs/guides/share-a-cache-across-machines.md +134 -0
  699. package/docs/guides/testing.md +123 -0
  700. package/docs/installation.md +102 -0
  701. package/docs/quickstart.md +215 -0
  702. package/docs/troubleshooting.md +347 -0
  703. package/package.json +438 -3
  704. package/src/ArtifactGc.ts +408 -0
  705. package/src/ArtifactSync.ts +278 -0
  706. package/src/CacheSync.ts +131 -0
  707. package/src/DeferredClockFold.ts +586 -0
  708. package/src/DisasterRecovery.ts +888 -0
  709. package/src/DurableEngineState.ts +2656 -0
  710. package/src/EngineStore.ts +656 -0
  711. package/src/EngineStoreMetrics.ts +331 -0
  712. package/src/Errors.ts +28 -0
  713. package/src/EventTypes.ts +27 -0
  714. package/src/ExecutionFacts.ts +125 -0
  715. package/src/ExecutionSnapshot.ts +186 -0
  716. package/src/Inconsistency.ts +253 -0
  717. package/src/Migrations.ts +95 -0
  718. package/src/OwnerIdentity.ts +125 -0
  719. package/src/PlanInputStore.ts +292 -0
  720. package/src/PlanMergeStore.ts +330 -0
  721. package/src/PlanScheduler.ts +1806 -0
  722. package/src/Reconciliation.ts +224 -0
  723. package/src/ReplayOnly.ts +95 -0
  724. package/src/Retention.ts +214 -0
  725. package/src/RunCatalogRead.ts +27 -0
  726. package/src/RunChangeFeed.ts +125 -0
  727. package/src/RunState.ts +137 -0
  728. package/src/Selection.ts +683 -0
  729. package/src/SelectionStore.ts +353 -0
  730. package/src/StepBoundary.ts +1165 -0
  731. package/src/StepCacheFold.ts +244 -0
  732. package/src/StepSandbox.ts +110 -0
  733. package/src/WakeBus.ts +167 -0
  734. package/src/WorkspaceSandbox.ts +1604 -0
  735. package/src/index.ts +185 -0
  736. package/src/internal/ActionPersistence.ts +2687 -0
  737. package/src/internal/ArtifactRoots.ts +92 -0
  738. package/src/internal/AttemptAdmission.ts +76 -0
  739. package/src/internal/AttemptLifecycle.ts +163 -0
  740. package/src/internal/AttemptProbe.ts +90 -0
  741. package/src/internal/CacheAdmission.ts +133 -0
  742. package/src/internal/CacheAgeHistory.ts +58 -0
  743. package/src/internal/CacheAgeVerdicts.ts +61 -0
  744. package/src/internal/CacheOutputPolicy.ts +82 -0
  745. package/src/internal/CachePublication.ts +153 -0
  746. package/src/internal/CallFacts.ts +87 -0
  747. package/src/internal/CopiedRecord.ts +201 -0
  748. package/src/internal/DeferredPersistence.ts +459 -0
  749. package/src/internal/EffectRecords.ts +136 -0
  750. package/src/internal/EngineJj.ts +30 -0
  751. package/src/internal/EngineStateSchema.ts +92 -0
  752. package/src/internal/ExecutionSnapshotRead.ts +298 -0
  753. package/src/internal/ExecutionSnapshotRelations.ts +121 -0
  754. package/src/internal/ExitEncoding.ts +453 -0
  755. package/src/internal/FileBoundarySnapshot.ts +39 -0
  756. package/src/internal/FileEnumeration.ts +334 -0
  757. package/src/internal/HostReflection.ts +128 -0
  758. package/src/internal/JournalRecords.ts +396 -0
  759. package/src/internal/NodeJournal.ts +340 -0
  760. package/src/internal/Ordering.ts +14 -0
  761. package/src/internal/PlanInputs.ts +62 -0
  762. package/src/internal/PlanMerges.ts +123 -0
  763. package/src/internal/ProvenanceSlot.ts +52 -0
  764. package/src/internal/ResultEnvelope.ts +118 -0
  765. package/src/internal/RetentionOps.ts +865 -0
  766. package/src/internal/RunCatalogOps.ts +174 -0
  767. package/src/internal/RunCoordinator.ts +215 -0
  768. package/src/internal/RunDriver.ts +3152 -0
  769. package/src/internal/RunLifecycle.ts +53 -0
  770. package/src/internal/RunListing.ts +210 -0
  771. package/src/internal/RunListingError.ts +37 -0
  772. package/src/internal/RuntimeGraph.ts +253 -0
  773. package/src/internal/SandboxedExecution.ts +165 -0
  774. package/src/internal/StateTransaction.ts +71 -0
  775. package/src/internal/StepFacts.ts +36 -0
  776. package/src/internal/TypedEvents.ts +29 -0
  777. package/src/migrations/0001_initial.ts +51 -0
  778. package/src/migrations/0002_selection_store.ts +38 -0
  779. package/src/migrations/0003_plan_inputs.ts +75 -0
  780. package/src/migrations/0004_plan_environment.ts +34 -0
  781. package/src/migrations/0005_plan_merges.ts +60 -0
  782. package/src/migrations/0006_execution_listing.ts +86 -0
  783. package/src/migrations/0007_run_parent_sequence.ts +19 -0
  784. package/src/migrations/0008_deferred_consumption.ts +27 -0
  785. package/src/migrations/0009_deferred_clock_facts.ts +163 -0
  786. package/src/migrations/0010_pending_cancellation.ts +20 -0
  787. package/src/test/TestStores.ts +145 -0
@@ -0,0 +1,292 @@
1
+ /**
2
+ * Authoritative source observations for one durable plan execution. These are
3
+ * replay state, not approval data, journal projections, or evictable cache rows.
4
+ * @since 1.0.0
5
+ */
6
+
7
+ import { Sha256 } from "@smthrs/crypto"
8
+ import { DurableWriter } from "@smthrs/database/DurableWriter"
9
+ import { FileSet, Plan } from "@smthrs/plan"
10
+ import { OwnerId } from "@smthrs/run-store/Ownership"
11
+ import { Context, Effect, Layer, Option, Schema } from "effect"
12
+ import type * as Crypto from "effect/Crypto"
13
+ import * as SqlClient from "effect/unstable/sql/SqlClient"
14
+
15
+ const Natural = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))
16
+
17
+ /**
18
+ * Address of an append-only observation generation. `environmentDigest` comes
19
+ * from `StepKey.environmentIdentity` and binds every generation of the run.
20
+ * @since 1.0.0
21
+ * @category schemas
22
+ */
23
+ export const Address = Schema.Struct({
24
+ runId: Schema.NonEmptyString,
25
+ planId: Schema.NonEmptyString,
26
+ baseDigest: Schema.NonEmptyString,
27
+ environmentDigest: Schema.NonEmptyString,
28
+ generation: Natural
29
+ })
30
+ /**
31
+ * Address of an append-only observation generation.
32
+ * @since 1.0.0
33
+ * @category models
34
+ */
35
+ export type Address = typeof Address.Type
36
+
37
+ /**
38
+ * Maximum encoded snapshot size, in JavaScript string code units.
39
+ * @since 1.0.0
40
+ * @category constants
41
+ */
42
+ export const maximumSnapshotCharacters = 16 * 1024 * 1024
43
+
44
+ /**
45
+ * Frozen membership and newly pinned source digests for one generation.
46
+ * @since 1.0.0
47
+ * @category schemas
48
+ */
49
+ export const Snapshot = Schema.Struct({
50
+ version: Schema.Literal(1),
51
+ generation: Natural,
52
+ nodes: Schema.Array(Schema.Struct({
53
+ id: Schema.NonEmptyString,
54
+ key: Schema.NonEmptyString,
55
+ reads: Schema.Array(Schema.Struct({
56
+ entry: FileSet.ReadEntry,
57
+ sourcePaths: Schema.Array(FileSet.Pattern)
58
+ }))
59
+ })).check(Schema.isMaxLength(Plan.maximumPlanNodes)),
60
+ pins: Schema.Array(Schema.Struct({ path: FileSet.Pattern, digest: Schema.NonEmptyString }))
61
+ })
62
+ /**
63
+ * Frozen membership and newly pinned source digests for one generation.
64
+ * @since 1.0.0
65
+ * @category models
66
+ */
67
+ export type Snapshot = typeof Snapshot.Type
68
+
69
+ /**
70
+ * A durable observation cannot be read or safely admitted.
71
+ * @since 1.0.0
72
+ * @category errors
73
+ */
74
+ export class PlanInputError extends Schema.TaggedError<PlanInputError>()("@smthrs/engine-store/PlanInputError", {
75
+ code: Schema.Literals([
76
+ "invalid_input",
77
+ "corrupt_state",
78
+ "incompatible_state",
79
+ "fence_lost",
80
+ "transaction_open",
81
+ "persistence_failed"
82
+ ]),
83
+ message: Schema.String,
84
+ cause: Schema.optional(Schema.Unknown)
85
+ }) {}
86
+
87
+ /**
88
+ * `get` is a committed-state admission gate and refuses an enclosing SQL
89
+ * transaction. `record` is first-writer-wins and may join a write transaction;
90
+ * callers must wait for its outer commit before executing affected actions.
91
+ * @since 1.0.0
92
+ * @category models
93
+ */
94
+ export interface Service {
95
+ readonly get: (address: Address, owner: OwnerId) => Effect.Effect<Option.Option<Snapshot>, PlanInputError>
96
+ readonly record: (address: Address, snapshot: Snapshot, owner: OwnerId) => Effect.Effect<Snapshot, PlanInputError>
97
+ }
98
+
99
+ /**
100
+ * Durable plan-input service.
101
+ * @since 1.0.0
102
+ * @category services
103
+ */
104
+ export class PlanInputStore extends Context.Service<PlanInputStore, Service>()("@smthrs/engine-store/PlanInputStore") {}
105
+
106
+ const failure = (code: PlanInputError["code"], message: string, cause?: unknown) =>
107
+ new PlanInputError({ code, message, ...(cause === undefined ? {} : { cause }) })
108
+ const persistError = (cause: unknown) =>
109
+ cause instanceof PlanInputError ?
110
+ cause :
111
+ failure("persistence_failed", "could not access durable plan inputs", cause)
112
+
113
+ const decode = <S extends Schema.Top & { readonly DecodingServices: never }>(
114
+ schema: S,
115
+ value: unknown,
116
+ code: "invalid_input" | "corrupt_state"
117
+ ) =>
118
+ Effect.try({
119
+ try: () => Schema.decodeUnknownSync(schema)(value, { onExcessProperty: "error" }),
120
+ catch: (cause) => failure(code, "invalid plan input observation", cause)
121
+ })
122
+
123
+ const validateSnapshot = (snapshot: Snapshot, generation: number, code: "invalid_input" | "corrupt_state") => {
124
+ if (
125
+ snapshot.generation !== generation ||
126
+ new Set(snapshot.nodes.map((node) => node.id)).size !== snapshot.nodes.length ||
127
+ new Set(snapshot.pins.map((pin) => pin.path)).size !== snapshot.pins.length ||
128
+ snapshot.nodes.some((node) =>
129
+ node.reads.some((read) =>
130
+ new Set(read.sourcePaths).size !== read.sourcePaths.length ||
131
+ read.sourcePaths.some((path) =>
132
+ typeof read.entry === "string" ? path !== read.entry : !FileSet.matchesGlob(read.entry, path)
133
+ )
134
+ )
135
+ )
136
+ ) {
137
+ return Effect.fail(failure(code, "plan input observation has inconsistent membership or generation"))
138
+ }
139
+ return Effect.void
140
+ }
141
+
142
+ /**
143
+ * Builds the SQL-backed, owner-fenced store.
144
+ * @since 1.0.0
145
+ * @category constructors
146
+ */
147
+ export const make: Effect.Effect<Service, never, SqlClient.SqlClient | DurableWriter | Crypto.Crypto> = Effect.gen(
148
+ function*() {
149
+ const sql = yield* SqlClient.SqlClient
150
+ const writer = yield* DurableWriter
151
+ const crypto = yield* Effect.context<Crypto.Crypto>()
152
+ const checksum = (value: string) => Schema.decodeUnknownEffect(Sha256)(value).pipe(Effect.provide(crypto))
153
+
154
+ const fence = (address: Address, owner: OwnerId) =>
155
+ Effect.gen(function*() {
156
+ const owned = yield* sql`SELECT run_id FROM flows_runs WHERE run_id = ${address.runId}
157
+ AND status = 'running' AND cancel_requested_at_ms IS NULL
158
+ AND owner_host_id = ${owner.hostId} AND owner_pid = ${owner.pid} AND owner_nonce = ${owner.nonce}`
159
+ if (owned.length !== 1) {
160
+ return yield* Effect.fail(failure("fence_lost", "plan input owner no longer owns the run"))
161
+ }
162
+ const legacy = yield* sql`SELECT run_id FROM flows_plan_input_legacy_runs WHERE run_id = ${address.runId}`
163
+ if (legacy.length > 0) {
164
+ return yield* Effect.fail(
165
+ failure(
166
+ "incompatible_state",
167
+ "this run executed before durable plan inputs were recorded; its original sources cannot be reconstructed"
168
+ )
169
+ )
170
+ }
171
+ })
172
+
173
+ const load = (address: Address) =>
174
+ Effect.gen(function*() {
175
+ const heads = yield* sql<
176
+ { planId: string; baseDigest: string; environmentDigest: string | null; generation: number }
177
+ >`SELECT plan_id AS "planId", base_digest AS "baseDigest", environment_digest AS "environmentDigest", generation
178
+ FROM flows_plan_input_heads WHERE run_id = ${address.runId}`
179
+ const head = heads[0]
180
+ if (head === undefined) {
181
+ const orphan = yield* sql`SELECT 1 FROM flows_plan_input_generations
182
+ WHERE run_id = ${address.runId} AND plan_id = ${address.planId} LIMIT 1`
183
+ if (address.generation !== 0 || orphan.length > 0) {
184
+ return yield* Effect.fail(failure("corrupt_state", "plan input history has no initial generation"))
185
+ }
186
+ return Option.none<Snapshot>()
187
+ }
188
+ yield* decode(
189
+ Schema.Struct({
190
+ planId: Schema.NonEmptyString,
191
+ baseDigest: Schema.NonEmptyString,
192
+ environmentDigest: Schema.NullOr(Schema.NonEmptyString),
193
+ generation: Natural
194
+ }),
195
+ head,
196
+ "corrupt_state"
197
+ )
198
+ if (head.planId !== address.planId || head.baseDigest !== address.baseDigest) {
199
+ return yield* Effect.fail(
200
+ failure("incompatible_state", "this run already observed a different approved plan")
201
+ )
202
+ }
203
+ if (head.environmentDigest === null || head.environmentDigest !== address.environmentDigest) {
204
+ return yield* Effect.fail(failure(
205
+ "incompatible_state",
206
+ "this run has a different or unrecorded execution environment; recover with its original runtime or explicitly reconcile before starting a new run"
207
+ ))
208
+ }
209
+ const counts = yield* sql<{ count: number; first: number; last: number }>`SELECT COUNT(*) AS count,
210
+ MIN(generation) AS first, MAX(generation) AS last FROM flows_plan_input_generations
211
+ WHERE run_id = ${address.runId} AND plan_id = ${address.planId}`
212
+ if (
213
+ counts[0]!.count !== head.generation + 1 || counts[0]!.first !== 0 || counts[0]!.last !== head.generation ||
214
+ address.generation > head.generation + 1
215
+ ) {
216
+ return yield* Effect.fail(failure("corrupt_state", "plan input history has a missing generation"))
217
+ }
218
+ if (address.generation > head.generation) return Option.none<Snapshot>()
219
+ const rows = yield* sql<
220
+ { snapshotJson: string; checksum: string }
221
+ >`SELECT snapshot_json AS "snapshotJson", checksum
222
+ FROM flows_plan_input_generations WHERE run_id = ${address.runId} AND plan_id = ${address.planId}
223
+ AND generation = ${address.generation}`
224
+ const row = rows[0]!
225
+ if (
226
+ row.snapshotJson.length > maximumSnapshotCharacters || (yield* checksum(row.snapshotJson)) !== row.checksum
227
+ ) {
228
+ return yield* Effect.fail(failure("corrupt_state", "plan input snapshot failed its size or integrity check"))
229
+ }
230
+ const snapshot = yield* decode(Schema.fromJsonString(Snapshot), row.snapshotJson, "corrupt_state")
231
+ yield* validateSnapshot(snapshot, address.generation, "corrupt_state")
232
+ return Option.some(snapshot)
233
+ })
234
+
235
+ const get: Service["get"] = Effect.fn("PlanInputStore.get")((input, ownerInput) =>
236
+ Effect.gen(function*() {
237
+ const address = yield* decode(Address, input, "invalid_input")
238
+ const owner = yield* decode(OwnerId, ownerInput, "invalid_input")
239
+ if (Option.isSome(yield* Effect.serviceOption(sql.transactionService))) {
240
+ return yield* Effect.fail(
241
+ failure("transaction_open", "plan execution requires committed source observations")
242
+ )
243
+ }
244
+ return yield* writer.write(Effect.gen(function*() {
245
+ yield* fence(address, owner)
246
+ return yield* load(address)
247
+ }))
248
+ }).pipe(Effect.mapError(persistError))
249
+ )
250
+
251
+ const record: Service["record"] = Effect.fn("PlanInputStore.record")((input, value, ownerInput) =>
252
+ Effect.gen(function*() {
253
+ const address = yield* decode(Address, input, "invalid_input")
254
+ const owner = yield* decode(OwnerId, ownerInput, "invalid_input")
255
+ const snapshot = yield* decode(Snapshot, value, "invalid_input")
256
+ yield* validateSnapshot(snapshot, address.generation, "invalid_input")
257
+ const encoded = JSON.stringify(snapshot)
258
+ if (encoded.length > maximumSnapshotCharacters) {
259
+ return yield* Effect.fail(failure("invalid_input", "plan input snapshot exceeds the durable size limit"))
260
+ }
261
+ const hash = yield* checksum(encoded)
262
+ return yield* writer.write(Effect.gen(function*() {
263
+ yield* fence(address, owner)
264
+ const existing = yield* load(address)
265
+ if (Option.isSome(existing)) return existing.value
266
+ if (address.generation === 0) {
267
+ yield* sql`INSERT INTO flows_plan_input_heads (run_id, plan_id, base_digest, environment_digest, merge_state_version, generation)
268
+ VALUES (${address.runId}, ${address.planId}, ${address.baseDigest}, ${address.environmentDigest}, 1, 0)`
269
+ } else {
270
+ yield* sql`UPDATE flows_plan_input_heads SET generation = ${address.generation}
271
+ WHERE run_id = ${address.runId} AND plan_id = ${address.planId}`
272
+ }
273
+ yield* sql`INSERT INTO flows_plan_input_generations (run_id, plan_id, generation, snapshot_json, checksum)
274
+ VALUES (${address.runId}, ${address.planId}, ${address.generation}, ${encoded}, ${hash})`
275
+ return snapshot
276
+ }))
277
+ }).pipe(Effect.mapError(persistError))
278
+ )
279
+
280
+ return { get, record }
281
+ }
282
+ )
283
+
284
+ /**
285
+ * Provides the SQL-backed input store over the same database as the run/attempt stores.
286
+ * @since 1.0.0
287
+ * @category layers
288
+ */
289
+ export const layer: Layer.Layer<PlanInputStore, never, SqlClient.SqlClient | DurableWriter | Crypto.Crypto> = Layer
290
+ .effect(
291
+ PlanInputStore
292
+ )(make)
@@ -0,0 +1,330 @@
1
+ /**
2
+ * Owner-fenced scheduler decisions, distinct from action failure evidence and
3
+ * redacted journal projections. Intent survives before a merge is appended.
4
+ * @since 1.0.0
5
+ */
6
+
7
+ import { Sha256 } from "@smthrs/crypto"
8
+ import { DurableWriter } from "@smthrs/database/DurableWriter"
9
+ import { Plan } from "@smthrs/plan"
10
+ import { OwnerId } from "@smthrs/run-store/Ownership"
11
+ import { Context, Effect, Layer, Option, Schema } from "effect"
12
+ import type * as Crypto from "effect/Crypto"
13
+ import * as SqlClient from "effect/unstable/sql/SqlClient"
14
+
15
+ const Natural = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))
16
+ const Positive = Schema.Int.check(Schema.isGreaterThan(0))
17
+ const Names = Schema.Array(Schema.NonEmptyString).check(Schema.isMaxLength(Plan.maximumPlanNodes))
18
+
19
+ /** Execution binding shared by every decision of one plan run.
20
+ * @since 1.0.0
21
+ * @category schemas
22
+ */
23
+ export const Identity = Schema.Struct({
24
+ runId: Schema.NonEmptyString,
25
+ planId: Schema.NonEmptyString,
26
+ baseDigest: Schema.NonEmptyString,
27
+ environmentDigest: Schema.NonEmptyString
28
+ })
29
+ /** Execution binding.
30
+ * @since 1.0.0
31
+ * @category models
32
+ */
33
+ export type Identity = typeof Identity.Type
34
+ /** A stopped attempt and the exact cohort eligible to supply merge winners.
35
+ * @since 1.0.0
36
+ * @category schemas
37
+ */
38
+ export const Intent = Schema.Struct({
39
+ version: Schema.Literal(1),
40
+ nodeId: Schema.NonEmptyString,
41
+ nodeKey: Schema.NonEmptyString,
42
+ dispatchKey: Schema.NonEmptyString,
43
+ attempts: Positive,
44
+ rebases: Natural,
45
+ peers: Names
46
+ })
47
+ /** Durable stopped-attempt decision.
48
+ * @since 1.0.0
49
+ * @category models
50
+ */
51
+ export type Intent = typeof Intent.Type
52
+ /** The plan extension committed for an intent.
53
+ * @since 1.0.0
54
+ * @category schemas
55
+ */
56
+ export const Completion = Schema.Struct({
57
+ version: Schema.Literal(1),
58
+ generation: Positive,
59
+ parentDigest: Schema.NonEmptyString,
60
+ planDigest: Schema.NonEmptyString,
61
+ mergeId: Schema.NonEmptyString,
62
+ mergeKey: Schema.NonEmptyString,
63
+ winners: Names
64
+ })
65
+ /** Committed merge extension.
66
+ * @since 1.0.0
67
+ * @category models
68
+ */
69
+ export type Completion = typeof Completion.Type
70
+ /** Intent with its optional committed extension.
71
+ * @since 1.0.0
72
+ * @category models
73
+ */
74
+ export interface Decision {
75
+ readonly intent: Intent
76
+ readonly completion?: Completion
77
+ }
78
+ /** Typed admission/storage refusal.
79
+ * @since 1.0.0
80
+ * @category errors
81
+ */
82
+ export class PlanMergeError extends Schema.TaggedError<PlanMergeError>()("@smthrs/engine-store/PlanMergeError", {
83
+ code: Schema.Literals([
84
+ "invalid_input",
85
+ "corrupt_state",
86
+ "incompatible_state",
87
+ "fence_lost",
88
+ "transaction_open",
89
+ "transaction_required",
90
+ "persistence_failed"
91
+ ]),
92
+ message: Schema.String,
93
+ cause: Schema.optional(Schema.Unknown)
94
+ }) {}
95
+ /** Store operations; writes may join the owning transaction, reads require committed state.
96
+ * @since 1.0.0
97
+ * @category models
98
+ */
99
+ export interface Service {
100
+ readonly list: (identity: Identity, owner: OwnerId) => Effect.Effect<ReadonlyArray<Decision>, PlanMergeError>
101
+ readonly intend: (identity: Identity, intent: Intent, owner: OwnerId) => Effect.Effect<Intent, PlanMergeError>
102
+ readonly complete: (
103
+ identity: Identity,
104
+ nodeId: string,
105
+ completion: Completion,
106
+ owner: OwnerId
107
+ ) => Effect.Effect<Completion, PlanMergeError>
108
+ }
109
+ /** Durable merge decision service.
110
+ * @since 1.0.0
111
+ * @category services
112
+ */
113
+ export class PlanMergeStore extends Context.Service<PlanMergeStore, Service>()("@smthrs/engine-store/PlanMergeStore") {}
114
+ /** Encoded decision limit, in JavaScript code units.
115
+ * @since 1.0.0
116
+ * @category constants
117
+ */
118
+ export const maximumDecisionCharacters = 16 * 1024 * 1024
119
+ const error = (code: PlanMergeError["code"], message: string, cause?: unknown) =>
120
+ new PlanMergeError({ code, message, ...(cause === undefined ? {} : { cause }) })
121
+ const storageError = (cause: unknown) =>
122
+ cause instanceof PlanMergeError ? cause : error("persistence_failed", "could not access plan merge decisions", cause)
123
+ const decode = <S extends Schema.Top & { readonly DecodingServices: never }>(
124
+ schema: S,
125
+ value: unknown,
126
+ code: "invalid_input" | "corrupt_state"
127
+ ) =>
128
+ Effect.try({
129
+ try: () => Schema.decodeUnknownSync(schema)(value, { onExcessProperty: "error" }),
130
+ catch: (cause) => error(code, "invalid plan merge decision", cause)
131
+ })
132
+ const unique = (names: ReadonlyArray<string>, code: "invalid_input" | "corrupt_state") =>
133
+ new Set(names).size === names.length ? Effect.void : Effect.fail(error(code, "duplicate merge peer identity"))
134
+
135
+ /** SQL constructor; all collaborating stores must use the same database/writer.
136
+ * @since 1.0.0
137
+ * @category constructors
138
+ */
139
+ export const make: Effect.Effect<Service, never, SqlClient.SqlClient | DurableWriter | Crypto.Crypto> = Effect.gen(
140
+ function*() {
141
+ const sql = yield* SqlClient.SqlClient
142
+ const writer = yield* DurableWriter
143
+ const crypto = yield* Effect.context<Crypto.Crypto>()
144
+ const hash = (value: string) => Schema.decodeUnknownEffect(Sha256)(value).pipe(Effect.provide(crypto))
145
+ const fence = (identity: Identity, owner: OwnerId, requireHead: boolean) =>
146
+ Effect.gen(function*() {
147
+ const owned = yield* sql`SELECT run_id FROM flows_runs WHERE run_id = ${identity.runId}
148
+ AND status = 'running' AND cancel_requested_at_ms IS NULL
149
+ AND owner_host_id = ${owner.hostId} AND owner_pid = ${owner.pid} AND owner_nonce = ${owner.nonce}`
150
+ if (owned.length !== 1) {
151
+ return yield* Effect.fail(error("fence_lost", "merge decision owner no longer owns the run"))
152
+ }
153
+ const heads = yield* sql<
154
+ { planId: string; baseDigest: string; environmentDigest: string | null; version: number | null }
155
+ >`SELECT
156
+ plan_id AS "planId", base_digest AS "baseDigest", environment_digest AS "environmentDigest", merge_state_version AS version
157
+ FROM flows_plan_input_heads WHERE run_id = ${identity.runId}`
158
+ const head = heads[0]
159
+ if (head === undefined) {
160
+ const orphan = yield* sql`SELECT 1 FROM flows_plan_merge_intents WHERE run_id = ${identity.runId} LIMIT 1`
161
+ if (requireHead || orphan.length > 0) {
162
+ return yield* Effect.fail(error("corrupt_state", "merge intent has no admitted input generation"))
163
+ }
164
+ return
165
+ }
166
+ if (
167
+ head.version !== 1 || head.planId !== identity.planId || head.baseDigest !== identity.baseDigest ||
168
+ head.environmentDigest !== identity.environmentDigest
169
+ ) {
170
+ return yield* Effect.fail(
171
+ error(
172
+ "incompatible_state",
173
+ "this run has different or unrecorded merge execution state; recover with its original runtime or reconcile before starting a new run"
174
+ )
175
+ )
176
+ }
177
+ })
178
+ const encoded = <A>(value: A) =>
179
+ Effect.gen(function*() {
180
+ const json = JSON.stringify(value)
181
+ if (json.length > maximumDecisionCharacters) {
182
+ return yield* Effect.fail(error("invalid_input", "merge decision exceeds its durable size limit"))
183
+ }
184
+ return { json, checksum: yield* hash(json) }
185
+ })
186
+ const stored = <S extends Schema.Top & { readonly DecodingServices: never }>(
187
+ schema: S,
188
+ row: { json: string; checksum: string }
189
+ ) =>
190
+ Effect.gen(function*() {
191
+ if (row.json.length > maximumDecisionCharacters || (yield* hash(row.json)) !== row.checksum) {
192
+ return yield* Effect.fail(error("corrupt_state", "merge decision failed its size or integrity check"))
193
+ }
194
+ return yield* decode(Schema.fromJsonString(schema), row.json, "corrupt_state")
195
+ })
196
+ const load = (identity: Identity, nodeId?: string) =>
197
+ Effect.gen(function*() {
198
+ const rows = yield* sql<
199
+ {
200
+ nodeId: string
201
+ json: string
202
+ checksum: string
203
+ generation: number | null
204
+ mergeId: string | null
205
+ completionJson: string | null
206
+ completionChecksum: string | null
207
+ }
208
+ >`SELECT i.stopped_node_id AS "nodeId", i.intent_json AS json, i.checksum,
209
+ c.generation, c.merge_node_id AS "mergeId", c.completion_json AS "completionJson",
210
+ c.checksum AS "completionChecksum"
211
+ FROM flows_plan_merge_intents i LEFT JOIN flows_plan_merge_completions c
212
+ ON c.run_id = i.run_id AND c.stopped_node_id = i.stopped_node_id
213
+ WHERE i.run_id = ${identity.runId} ${nodeId === undefined ? sql`` : sql`AND i.stopped_node_id = ${nodeId}`}
214
+ ORDER BY i.stopped_node_id LIMIT ${Plan.maximumPlanNodes + 1}`
215
+ if (rows.length > Plan.maximumPlanNodes) {
216
+ return yield* Effect.fail(error("corrupt_state", "too many merge decisions for one plan"))
217
+ }
218
+ return yield* Effect.forEach(rows, (row) =>
219
+ Effect.gen(function*() {
220
+ const intent = yield* stored(Intent, row)
221
+ yield* unique(intent.peers, "corrupt_state")
222
+ if (intent.nodeId !== row.nodeId || intent.peers.includes(intent.nodeId)) {
223
+ return yield* Effect.fail(error("corrupt_state", "merge intent identity is inconsistent"))
224
+ }
225
+ if (row.completionJson === null) return { intent } satisfies Decision
226
+ const completion = yield* stored(Completion, {
227
+ json: row.completionJson,
228
+ checksum: row.completionChecksum!
229
+ })
230
+ yield* unique(completion.winners, "corrupt_state")
231
+ if (
232
+ completion.generation !== row.generation || completion.mergeId !== row.mergeId ||
233
+ completion.winners.some((id) => !intent.peers.includes(id))
234
+ ) {
235
+ return yield* Effect.fail(error("corrupt_state", "merge completion does not match its intent"))
236
+ }
237
+ return { intent, completion } satisfies Decision
238
+ }))
239
+ })
240
+ const list: Service["list"] = (input, ownerInput) =>
241
+ Effect.gen(function*() {
242
+ const identity = yield* decode(Identity, input, "invalid_input")
243
+ const owner = yield* decode(OwnerId, ownerInput, "invalid_input")
244
+ if (Option.isSome(yield* Effect.serviceOption(sql.transactionService))) {
245
+ return yield* Effect.fail(error("transaction_open", "merge recovery requires committed decisions"))
246
+ }
247
+ return yield* writer.write(Effect.gen(function*() {
248
+ yield* fence(identity, owner, false)
249
+ return yield* load(identity)
250
+ }))
251
+ }).pipe(Effect.mapError(storageError))
252
+ const intend: Service["intend"] = (input, value, ownerInput) =>
253
+ Effect.gen(function*() {
254
+ const identity = yield* decode(Identity, input, "invalid_input")
255
+ const owner = yield* decode(OwnerId, ownerInput, "invalid_input")
256
+ const intent = yield* decode(Intent, value, "invalid_input")
257
+ yield* unique(intent.peers, "invalid_input")
258
+ if (intent.peers.includes(intent.nodeId)) {
259
+ return yield* Effect.fail(error("invalid_input", "a merge cannot stop its own peer"))
260
+ }
261
+ const data = yield* encoded(intent)
262
+ return yield* writer.write(Effect.gen(function*() {
263
+ yield* fence(identity, owner, true)
264
+ const [existing] = yield* load(identity, intent.nodeId)
265
+ if (existing !== undefined) return existing.intent
266
+ const [count] = yield* sql<{ count: number }>`SELECT count(*) AS count
267
+ FROM flows_plan_merge_intents WHERE run_id = ${identity.runId}`
268
+ if (count!.count >= Plan.maximumPlanNodes) {
269
+ return yield* Effect.fail(error("invalid_input", "too many merge intents for one plan"))
270
+ }
271
+ yield* sql`INSERT INTO flows_plan_merge_intents (run_id, stopped_node_id, intent_json, checksum)
272
+ VALUES (${identity.runId}, ${intent.nodeId}, ${data.json}, ${data.checksum})`
273
+ return intent
274
+ }))
275
+ }).pipe(Effect.mapError(storageError))
276
+ const complete: Service["complete"] = (input, nodeIdInput, value, ownerInput) =>
277
+ Effect.gen(function*() {
278
+ if (Option.isNone(yield* Effect.serviceOption(sql.transactionService))) {
279
+ return yield* Effect.fail(
280
+ error("transaction_required", "merge completion must join the plan/input append transaction")
281
+ )
282
+ }
283
+ const identity = yield* decode(Identity, input, "invalid_input")
284
+ const owner = yield* decode(OwnerId, ownerInput, "invalid_input")
285
+ const nodeId = yield* decode(Schema.NonEmptyString, nodeIdInput, "invalid_input")
286
+ const completion = yield* decode(Completion, value, "invalid_input")
287
+ yield* unique(completion.winners, "invalid_input")
288
+ const data = yield* encoded(completion)
289
+ return yield* writer.write(Effect.gen(function*() {
290
+ yield* fence(identity, owner, true)
291
+ const [decision] = yield* load(identity, nodeId)
292
+ if (decision === undefined) {
293
+ return yield* Effect.fail(error("corrupt_state", "merge completion has no intent"))
294
+ }
295
+ if (decision.completion !== undefined) {
296
+ if (JSON.stringify(decision.completion) !== JSON.stringify(completion)) {
297
+ return yield* Effect.fail(
298
+ error("incompatible_state", "a merge intent already committed a different extension")
299
+ )
300
+ }
301
+ return decision.completion
302
+ }
303
+ if (completion.winners.some((id) => !decision.intent.peers.includes(id))) {
304
+ return yield* Effect.fail(error("invalid_input", "merge winner was not an admitted peer"))
305
+ }
306
+ const appended =
307
+ yield* sql`SELECT p.plan_id FROM flows_plans p JOIN flows_plan_input_generations i ON i.plan_id = p.plan_id
308
+ JOIN flows_plan_nodes n ON n.plan_id = p.plan_id AND n.generation = p.generation
309
+ WHERE p.plan_id = ${identity.planId} AND p.digest = ${completion.planDigest} AND p.generation = ${completion.generation}
310
+ AND i.run_id = ${identity.runId} AND i.generation = ${completion.generation}
311
+ AND n.node_id = ${completion.mergeId} AND n.key_digest = ${completion.mergeKey} AND n.kind = 'merge'`
312
+ if (appended.length !== 1) {
313
+ return yield* Effect.fail(
314
+ error("corrupt_state", "merge completion requires its plan and input generation in the same transaction")
315
+ )
316
+ }
317
+ yield* sql`INSERT INTO flows_plan_merge_completions (run_id, stopped_node_id, generation, merge_node_id, completion_json, checksum)
318
+ VALUES (${identity.runId}, ${nodeId}, ${completion.generation}, ${completion.mergeId}, ${data.json}, ${data.checksum})`
319
+ return completion
320
+ }))
321
+ }).pipe(Effect.mapError(storageError))
322
+ return { list, intend, complete }
323
+ }
324
+ )
325
+ /** SQL-backed merge decisions; migrations must run first.
326
+ * @since 1.0.0
327
+ * @category layers
328
+ */
329
+ export const layer: Layer.Layer<PlanMergeStore, never, SqlClient.SqlClient | DurableWriter | Crypto.Crypto> = Layer
330
+ .effect(PlanMergeStore)(make)