@smthrs/engine-store 0.0.0-stage → 1.0.0-rc.4

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 +201 -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 +1586 -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 +300 -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 +3154 -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,224 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var PlanInputStore_exports = {};
30
+ __export(PlanInputStore_exports, {
31
+ Address: () => Address,
32
+ PlanInputError: () => PlanInputError,
33
+ PlanInputStore: () => PlanInputStore,
34
+ Snapshot: () => Snapshot,
35
+ layer: () => layer,
36
+ make: () => make,
37
+ maximumSnapshotCharacters: () => maximumSnapshotCharacters
38
+ });
39
+ module.exports = __toCommonJS(PlanInputStore_exports);
40
+ var import_crypto = require("@smthrs/crypto");
41
+ var import_DurableWriter = require("@smthrs/database/DurableWriter");
42
+ var import_plan = require("@smthrs/plan");
43
+ var import_Ownership = require("@smthrs/run-store/Ownership");
44
+ var import_effect = require("effect");
45
+ var SqlClient = __toESM(require("effect/unstable/sql/SqlClient"), 1);
46
+ const Natural = import_effect.Schema.Int.check(import_effect.Schema.isGreaterThanOrEqualTo(0));
47
+ const Address = import_effect.Schema.Struct({
48
+ runId: import_effect.Schema.NonEmptyString,
49
+ planId: import_effect.Schema.NonEmptyString,
50
+ baseDigest: import_effect.Schema.NonEmptyString,
51
+ environmentDigest: import_effect.Schema.NonEmptyString,
52
+ generation: Natural
53
+ });
54
+ const maximumSnapshotCharacters = 16 * 1024 * 1024;
55
+ const Snapshot = import_effect.Schema.Struct({
56
+ version: import_effect.Schema.Literal(1),
57
+ generation: Natural,
58
+ nodes: import_effect.Schema.Array(import_effect.Schema.Struct({
59
+ id: import_effect.Schema.NonEmptyString,
60
+ key: import_effect.Schema.NonEmptyString,
61
+ reads: import_effect.Schema.Array(import_effect.Schema.Struct({
62
+ entry: import_plan.FileSet.ReadEntry,
63
+ sourcePaths: import_effect.Schema.Array(import_plan.FileSet.Pattern)
64
+ }))
65
+ })).check(import_effect.Schema.isMaxLength(import_plan.Plan.maximumPlanNodes)),
66
+ pins: import_effect.Schema.Array(import_effect.Schema.Struct({ path: import_plan.FileSet.Pattern, digest: import_effect.Schema.NonEmptyString }))
67
+ });
68
+ class PlanInputError extends import_effect.Schema.TaggedError()("@smthrs/engine-store/PlanInputError", {
69
+ code: import_effect.Schema.Literals([
70
+ "invalid_input",
71
+ "corrupt_state",
72
+ "incompatible_state",
73
+ "fence_lost",
74
+ "transaction_open",
75
+ "persistence_failed"
76
+ ]),
77
+ message: import_effect.Schema.String,
78
+ cause: import_effect.Schema.optional(import_effect.Schema.Unknown)
79
+ }) {
80
+ }
81
+ class PlanInputStore extends import_effect.Context.Service()("@smthrs/engine-store/PlanInputStore") {
82
+ }
83
+ const failure = (code, message, cause) => new PlanInputError({ code, message, ...cause === void 0 ? {} : { cause } });
84
+ const persistError = (cause) => cause instanceof PlanInputError ? cause : failure("persistence_failed", "could not access durable plan inputs", cause);
85
+ const decode = (schema, value, code) => import_effect.Effect.try({
86
+ try: () => import_effect.Schema.decodeUnknownSync(schema)(value, { onExcessProperty: "error" }),
87
+ catch: (cause) => failure(code, "invalid plan input observation", cause)
88
+ });
89
+ const validateSnapshot = (snapshot, generation, code) => {
90
+ if (snapshot.generation !== generation || new Set(snapshot.nodes.map((node) => node.id)).size !== snapshot.nodes.length || new Set(snapshot.pins.map((pin) => pin.path)).size !== snapshot.pins.length || snapshot.nodes.some(
91
+ (node) => node.reads.some(
92
+ (read) => new Set(read.sourcePaths).size !== read.sourcePaths.length || read.sourcePaths.some(
93
+ (path) => typeof read.entry === "string" ? path !== read.entry : !import_plan.FileSet.matchesGlob(read.entry, path)
94
+ )
95
+ )
96
+ )) {
97
+ return import_effect.Effect.fail(failure(code, "plan input observation has inconsistent membership or generation"));
98
+ }
99
+ return import_effect.Effect.void;
100
+ };
101
+ const make = import_effect.Effect.gen(
102
+ function* () {
103
+ const sql = yield* SqlClient.SqlClient;
104
+ const writer = yield* import_DurableWriter.DurableWriter;
105
+ const crypto = yield* import_effect.Effect.context();
106
+ const checksum = (value) => import_effect.Schema.decodeUnknownEffect(import_crypto.Sha256)(value).pipe(import_effect.Effect.provide(crypto));
107
+ const fence = (address, owner) => import_effect.Effect.gen(function* () {
108
+ const owned = yield* sql`SELECT run_id FROM flows_runs WHERE run_id = ${address.runId}
109
+ AND status = 'running' AND cancel_requested_at_ms IS NULL
110
+ AND owner_host_id = ${owner.hostId} AND owner_pid = ${owner.pid} AND owner_nonce = ${owner.nonce}`;
111
+ if (owned.length !== 1) {
112
+ return yield* import_effect.Effect.fail(failure("fence_lost", "plan input owner no longer owns the run"));
113
+ }
114
+ const legacy = yield* sql`SELECT run_id FROM flows_plan_input_legacy_runs WHERE run_id = ${address.runId}`;
115
+ if (legacy.length > 0) {
116
+ return yield* import_effect.Effect.fail(
117
+ failure(
118
+ "incompatible_state",
119
+ "this run executed before durable plan inputs were recorded; its original sources cannot be reconstructed"
120
+ )
121
+ );
122
+ }
123
+ });
124
+ const load = (address) => import_effect.Effect.gen(function* () {
125
+ const heads = yield* sql`SELECT plan_id AS "planId", base_digest AS "baseDigest", environment_digest AS "environmentDigest", generation
126
+ FROM flows_plan_input_heads WHERE run_id = ${address.runId}`;
127
+ const head = heads[0];
128
+ if (head === void 0) {
129
+ const orphan = yield* sql`SELECT 1 FROM flows_plan_input_generations
130
+ WHERE run_id = ${address.runId} AND plan_id = ${address.planId} LIMIT 1`;
131
+ if (address.generation !== 0 || orphan.length > 0) {
132
+ return yield* import_effect.Effect.fail(failure("corrupt_state", "plan input history has no initial generation"));
133
+ }
134
+ return import_effect.Option.none();
135
+ }
136
+ yield* decode(
137
+ import_effect.Schema.Struct({
138
+ planId: import_effect.Schema.NonEmptyString,
139
+ baseDigest: import_effect.Schema.NonEmptyString,
140
+ environmentDigest: import_effect.Schema.NullOr(import_effect.Schema.NonEmptyString),
141
+ generation: Natural
142
+ }),
143
+ head,
144
+ "corrupt_state"
145
+ );
146
+ if (head.planId !== address.planId || head.baseDigest !== address.baseDigest) {
147
+ return yield* import_effect.Effect.fail(
148
+ failure("incompatible_state", "this run already observed a different approved plan")
149
+ );
150
+ }
151
+ if (head.environmentDigest === null || head.environmentDigest !== address.environmentDigest) {
152
+ return yield* import_effect.Effect.fail(failure(
153
+ "incompatible_state",
154
+ "this run has a different or unrecorded execution environment; recover with its original runtime or explicitly reconcile before starting a new run"
155
+ ));
156
+ }
157
+ const counts = yield* sql`SELECT COUNT(*) AS count,
158
+ MIN(generation) AS first, MAX(generation) AS last FROM flows_plan_input_generations
159
+ WHERE run_id = ${address.runId} AND plan_id = ${address.planId}`;
160
+ if (counts[0].count !== head.generation + 1 || counts[0].first !== 0 || counts[0].last !== head.generation || address.generation > head.generation + 1) {
161
+ return yield* import_effect.Effect.fail(failure("corrupt_state", "plan input history has a missing generation"));
162
+ }
163
+ if (address.generation > head.generation) return import_effect.Option.none();
164
+ const rows = yield* sql`SELECT snapshot_json AS "snapshotJson", checksum
165
+ FROM flows_plan_input_generations WHERE run_id = ${address.runId} AND plan_id = ${address.planId}
166
+ AND generation = ${address.generation}`;
167
+ const row = rows[0];
168
+ if (row.snapshotJson.length > maximumSnapshotCharacters || (yield* checksum(row.snapshotJson)) !== row.checksum) {
169
+ return yield* import_effect.Effect.fail(failure("corrupt_state", "plan input snapshot failed its size or integrity check"));
170
+ }
171
+ const snapshot = yield* decode(import_effect.Schema.fromJsonString(Snapshot), row.snapshotJson, "corrupt_state");
172
+ yield* validateSnapshot(snapshot, address.generation, "corrupt_state");
173
+ return import_effect.Option.some(snapshot);
174
+ });
175
+ const get = import_effect.Effect.fn("PlanInputStore.get")(
176
+ (input, ownerInput) => import_effect.Effect.gen(function* () {
177
+ const address = yield* decode(Address, input, "invalid_input");
178
+ const owner = yield* decode(import_Ownership.OwnerId, ownerInput, "invalid_input");
179
+ if (import_effect.Option.isSome(yield* import_effect.Effect.serviceOption(sql.transactionService))) {
180
+ return yield* import_effect.Effect.fail(
181
+ failure("transaction_open", "plan execution requires committed source observations")
182
+ );
183
+ }
184
+ return yield* writer.write(import_effect.Effect.gen(function* () {
185
+ yield* fence(address, owner);
186
+ return yield* load(address);
187
+ }));
188
+ }).pipe(import_effect.Effect.mapError(persistError))
189
+ );
190
+ const record = import_effect.Effect.fn("PlanInputStore.record")(
191
+ (input, value, ownerInput) => import_effect.Effect.gen(function* () {
192
+ const address = yield* decode(Address, input, "invalid_input");
193
+ const owner = yield* decode(import_Ownership.OwnerId, ownerInput, "invalid_input");
194
+ const snapshot = yield* decode(Snapshot, value, "invalid_input");
195
+ yield* validateSnapshot(snapshot, address.generation, "invalid_input");
196
+ const encoded = JSON.stringify(snapshot);
197
+ if (encoded.length > maximumSnapshotCharacters) {
198
+ return yield* import_effect.Effect.fail(failure("invalid_input", "plan input snapshot exceeds the durable size limit"));
199
+ }
200
+ const hash = yield* checksum(encoded);
201
+ return yield* writer.write(import_effect.Effect.gen(function* () {
202
+ yield* fence(address, owner);
203
+ const existing = yield* load(address);
204
+ if (import_effect.Option.isSome(existing)) return existing.value;
205
+ if (address.generation === 0) {
206
+ yield* sql`INSERT INTO flows_plan_input_heads (run_id, plan_id, base_digest, environment_digest, merge_state_version, generation)
207
+ VALUES (${address.runId}, ${address.planId}, ${address.baseDigest}, ${address.environmentDigest}, 1, 0)`;
208
+ } else {
209
+ yield* sql`UPDATE flows_plan_input_heads SET generation = ${address.generation}
210
+ WHERE run_id = ${address.runId} AND plan_id = ${address.planId}`;
211
+ }
212
+ yield* sql`INSERT INTO flows_plan_input_generations (run_id, plan_id, generation, snapshot_json, checksum)
213
+ VALUES (${address.runId}, ${address.planId}, ${address.generation}, ${encoded}, ${hash})`;
214
+ return snapshot;
215
+ }));
216
+ }).pipe(import_effect.Effect.mapError(persistError))
217
+ );
218
+ return { get, record };
219
+ }
220
+ );
221
+ const layer = import_effect.Layer.effect(
222
+ PlanInputStore
223
+ )(make);
224
+ //# sourceMappingURL=PlanInputStore.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/PlanInputStore.ts"],
4
+ "sourcesContent": ["/**\n * Authoritative source observations for one durable plan execution. These are\n * replay state, not approval data, journal projections, or evictable cache rows.\n * @since 1.0.0\n */\n\nimport { Sha256 } from \"@smthrs/crypto\"\nimport { DurableWriter } from \"@smthrs/database/DurableWriter\"\nimport { FileSet, Plan } from \"@smthrs/plan\"\nimport { OwnerId } from \"@smthrs/run-store/Ownership\"\nimport { Context, Effect, Layer, Option, Schema } from \"effect\"\nimport type * as Crypto from \"effect/Crypto\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\nconst Natural = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))\n\n/**\n * Address of an append-only observation generation. `environmentDigest` comes\n * from `StepKey.environmentIdentity` and binds every generation of the run.\n * @since 1.0.0\n * @category schemas\n */\nexport const Address = Schema.Struct({\n runId: Schema.NonEmptyString,\n planId: Schema.NonEmptyString,\n baseDigest: Schema.NonEmptyString,\n environmentDigest: Schema.NonEmptyString,\n generation: Natural\n})\n/**\n * Address of an append-only observation generation.\n * @since 1.0.0\n * @category models\n */\nexport type Address = typeof Address.Type\n\n/**\n * Maximum encoded snapshot size, in JavaScript string code units.\n * @since 1.0.0\n * @category constants\n */\nexport const maximumSnapshotCharacters = 16 * 1024 * 1024\n\n/**\n * Frozen membership and newly pinned source digests for one generation.\n * @since 1.0.0\n * @category schemas\n */\nexport const Snapshot = Schema.Struct({\n version: Schema.Literal(1),\n generation: Natural,\n nodes: Schema.Array(Schema.Struct({\n id: Schema.NonEmptyString,\n key: Schema.NonEmptyString,\n reads: Schema.Array(Schema.Struct({\n entry: FileSet.ReadEntry,\n sourcePaths: Schema.Array(FileSet.Pattern)\n }))\n })).check(Schema.isMaxLength(Plan.maximumPlanNodes)),\n pins: Schema.Array(Schema.Struct({ path: FileSet.Pattern, digest: Schema.NonEmptyString }))\n})\n/**\n * Frozen membership and newly pinned source digests for one generation.\n * @since 1.0.0\n * @category models\n */\nexport type Snapshot = typeof Snapshot.Type\n\n/**\n * A durable observation cannot be read or safely admitted.\n * @since 1.0.0\n * @category errors\n */\nexport class PlanInputError extends Schema.TaggedError<PlanInputError>()(\"@smthrs/engine-store/PlanInputError\", {\n code: Schema.Literals([\n \"invalid_input\",\n \"corrupt_state\",\n \"incompatible_state\",\n \"fence_lost\",\n \"transaction_open\",\n \"persistence_failed\"\n ]),\n message: Schema.String,\n cause: Schema.optional(Schema.Unknown)\n}) {}\n\n/**\n * `get` is a committed-state admission gate and refuses an enclosing SQL\n * transaction. `record` is first-writer-wins and may join a write transaction;\n * callers must wait for its outer commit before executing affected actions.\n * @since 1.0.0\n * @category models\n */\nexport interface Service {\n readonly get: (address: Address, owner: OwnerId) => Effect.Effect<Option.Option<Snapshot>, PlanInputError>\n readonly record: (address: Address, snapshot: Snapshot, owner: OwnerId) => Effect.Effect<Snapshot, PlanInputError>\n}\n\n/**\n * Durable plan-input service.\n * @since 1.0.0\n * @category services\n */\nexport class PlanInputStore extends Context.Service<PlanInputStore, Service>()(\"@smthrs/engine-store/PlanInputStore\") {}\n\nconst failure = (code: PlanInputError[\"code\"], message: string, cause?: unknown) =>\n new PlanInputError({ code, message, ...(cause === undefined ? {} : { cause }) })\nconst persistError = (cause: unknown) =>\n cause instanceof PlanInputError ?\n cause :\n failure(\"persistence_failed\", \"could not access durable plan inputs\", cause)\n\nconst decode = <S extends Schema.Top & { readonly DecodingServices: never }>(\n schema: S,\n value: unknown,\n code: \"invalid_input\" | \"corrupt_state\"\n) =>\n Effect.try({\n try: () => Schema.decodeUnknownSync(schema)(value, { onExcessProperty: \"error\" }),\n catch: (cause) => failure(code, \"invalid plan input observation\", cause)\n })\n\nconst validateSnapshot = (snapshot: Snapshot, generation: number, code: \"invalid_input\" | \"corrupt_state\") => {\n if (\n snapshot.generation !== generation ||\n new Set(snapshot.nodes.map((node) => node.id)).size !== snapshot.nodes.length ||\n new Set(snapshot.pins.map((pin) => pin.path)).size !== snapshot.pins.length ||\n snapshot.nodes.some((node) =>\n node.reads.some((read) =>\n new Set(read.sourcePaths).size !== read.sourcePaths.length ||\n read.sourcePaths.some((path) =>\n typeof read.entry === \"string\" ? path !== read.entry : !FileSet.matchesGlob(read.entry, path)\n )\n )\n )\n ) {\n return Effect.fail(failure(code, \"plan input observation has inconsistent membership or generation\"))\n }\n return Effect.void\n}\n\n/**\n * Builds the SQL-backed, owner-fenced store.\n * @since 1.0.0\n * @category constructors\n */\nexport const make: Effect.Effect<Service, never, SqlClient.SqlClient | DurableWriter | Crypto.Crypto> = Effect.gen(\n function*() {\n const sql = yield* SqlClient.SqlClient\n const writer = yield* DurableWriter\n const crypto = yield* Effect.context<Crypto.Crypto>()\n const checksum = (value: string) => Schema.decodeUnknownEffect(Sha256)(value).pipe(Effect.provide(crypto))\n\n const fence = (address: Address, owner: OwnerId) =>\n Effect.gen(function*() {\n const owned = yield* sql`SELECT run_id FROM flows_runs WHERE run_id = ${address.runId}\n AND status = 'running' AND cancel_requested_at_ms IS NULL\n AND owner_host_id = ${owner.hostId} AND owner_pid = ${owner.pid} AND owner_nonce = ${owner.nonce}`\n if (owned.length !== 1) {\n return yield* Effect.fail(failure(\"fence_lost\", \"plan input owner no longer owns the run\"))\n }\n const legacy = yield* sql`SELECT run_id FROM flows_plan_input_legacy_runs WHERE run_id = ${address.runId}`\n if (legacy.length > 0) {\n return yield* Effect.fail(\n failure(\n \"incompatible_state\",\n \"this run executed before durable plan inputs were recorded; its original sources cannot be reconstructed\"\n )\n )\n }\n })\n\n const load = (address: Address) =>\n Effect.gen(function*() {\n const heads = yield* sql<\n { planId: string; baseDigest: string; environmentDigest: string | null; generation: number }\n >`SELECT plan_id AS \"planId\", base_digest AS \"baseDigest\", environment_digest AS \"environmentDigest\", generation\n FROM flows_plan_input_heads WHERE run_id = ${address.runId}`\n const head = heads[0]\n if (head === undefined) {\n const orphan = yield* sql`SELECT 1 FROM flows_plan_input_generations\n WHERE run_id = ${address.runId} AND plan_id = ${address.planId} LIMIT 1`\n if (address.generation !== 0 || orphan.length > 0) {\n return yield* Effect.fail(failure(\"corrupt_state\", \"plan input history has no initial generation\"))\n }\n return Option.none<Snapshot>()\n }\n yield* decode(\n Schema.Struct({\n planId: Schema.NonEmptyString,\n baseDigest: Schema.NonEmptyString,\n environmentDigest: Schema.NullOr(Schema.NonEmptyString),\n generation: Natural\n }),\n head,\n \"corrupt_state\"\n )\n if (head.planId !== address.planId || head.baseDigest !== address.baseDigest) {\n return yield* Effect.fail(\n failure(\"incompatible_state\", \"this run already observed a different approved plan\")\n )\n }\n if (head.environmentDigest === null || head.environmentDigest !== address.environmentDigest) {\n return yield* Effect.fail(failure(\n \"incompatible_state\",\n \"this run has a different or unrecorded execution environment; recover with its original runtime or explicitly reconcile before starting a new run\"\n ))\n }\n const counts = yield* sql<{ count: number; first: number; last: number }>`SELECT COUNT(*) AS count,\n MIN(generation) AS first, MAX(generation) AS last FROM flows_plan_input_generations\n WHERE run_id = ${address.runId} AND plan_id = ${address.planId}`\n if (\n counts[0]!.count !== head.generation + 1 || counts[0]!.first !== 0 || counts[0]!.last !== head.generation ||\n address.generation > head.generation + 1\n ) {\n return yield* Effect.fail(failure(\"corrupt_state\", \"plan input history has a missing generation\"))\n }\n if (address.generation > head.generation) return Option.none<Snapshot>()\n const rows = yield* sql<\n { snapshotJson: string; checksum: string }\n >`SELECT snapshot_json AS \"snapshotJson\", checksum\n FROM flows_plan_input_generations WHERE run_id = ${address.runId} AND plan_id = ${address.planId}\n AND generation = ${address.generation}`\n const row = rows[0]!\n if (\n row.snapshotJson.length > maximumSnapshotCharacters || (yield* checksum(row.snapshotJson)) !== row.checksum\n ) {\n return yield* Effect.fail(failure(\"corrupt_state\", \"plan input snapshot failed its size or integrity check\"))\n }\n const snapshot = yield* decode(Schema.fromJsonString(Snapshot), row.snapshotJson, \"corrupt_state\")\n yield* validateSnapshot(snapshot, address.generation, \"corrupt_state\")\n return Option.some(snapshot)\n })\n\n const get: Service[\"get\"] = Effect.fn(\"PlanInputStore.get\")((input, ownerInput) =>\n Effect.gen(function*() {\n const address = yield* decode(Address, input, \"invalid_input\")\n const owner = yield* decode(OwnerId, ownerInput, \"invalid_input\")\n if (Option.isSome(yield* Effect.serviceOption(sql.transactionService))) {\n return yield* Effect.fail(\n failure(\"transaction_open\", \"plan execution requires committed source observations\")\n )\n }\n return yield* writer.write(Effect.gen(function*() {\n yield* fence(address, owner)\n return yield* load(address)\n }))\n }).pipe(Effect.mapError(persistError))\n )\n\n const record: Service[\"record\"] = Effect.fn(\"PlanInputStore.record\")((input, value, ownerInput) =>\n Effect.gen(function*() {\n const address = yield* decode(Address, input, \"invalid_input\")\n const owner = yield* decode(OwnerId, ownerInput, \"invalid_input\")\n const snapshot = yield* decode(Snapshot, value, \"invalid_input\")\n yield* validateSnapshot(snapshot, address.generation, \"invalid_input\")\n const encoded = JSON.stringify(snapshot)\n if (encoded.length > maximumSnapshotCharacters) {\n return yield* Effect.fail(failure(\"invalid_input\", \"plan input snapshot exceeds the durable size limit\"))\n }\n const hash = yield* checksum(encoded)\n return yield* writer.write(Effect.gen(function*() {\n yield* fence(address, owner)\n const existing = yield* load(address)\n if (Option.isSome(existing)) return existing.value\n if (address.generation === 0) {\n yield* sql`INSERT INTO flows_plan_input_heads (run_id, plan_id, base_digest, environment_digest, merge_state_version, generation)\n VALUES (${address.runId}, ${address.planId}, ${address.baseDigest}, ${address.environmentDigest}, 1, 0)`\n } else {\n yield* sql`UPDATE flows_plan_input_heads SET generation = ${address.generation}\n WHERE run_id = ${address.runId} AND plan_id = ${address.planId}`\n }\n yield* sql`INSERT INTO flows_plan_input_generations (run_id, plan_id, generation, snapshot_json, checksum)\n VALUES (${address.runId}, ${address.planId}, ${address.generation}, ${encoded}, ${hash})`\n return snapshot\n }))\n }).pipe(Effect.mapError(persistError))\n )\n\n return { get, record }\n }\n)\n\n/**\n * Provides the SQL-backed input store over the same database as the run/attempt stores.\n * @since 1.0.0\n * @category layers\n */\nexport const layer: Layer.Layer<PlanInputStore, never, SqlClient.SqlClient | DurableWriter | Crypto.Crypto> = Layer\n .effect(\n PlanInputStore\n )(make)\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,113 @@
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
+ import { DurableWriter } from "@smthrs/database/DurableWriter";
7
+ import { OwnerId } from "@smthrs/run-store/Ownership";
8
+ import { Context, Effect, Layer, Schema } from "effect";
9
+ import type * as Crypto from "effect/Crypto";
10
+ import * as SqlClient from "effect/unstable/sql/SqlClient";
11
+ /** Execution binding shared by every decision of one plan run.
12
+ * @since 1.0.0
13
+ * @category schemas
14
+ */
15
+ export declare const Identity: Schema.Struct<{
16
+ readonly runId: Schema.NonEmptyString;
17
+ readonly planId: Schema.NonEmptyString;
18
+ readonly baseDigest: Schema.NonEmptyString;
19
+ readonly environmentDigest: Schema.NonEmptyString;
20
+ }>;
21
+ /** Execution binding.
22
+ * @since 1.0.0
23
+ * @category models
24
+ */
25
+ export type Identity = typeof Identity.Type;
26
+ /** A stopped attempt and the exact cohort eligible to supply merge winners.
27
+ * @since 1.0.0
28
+ * @category schemas
29
+ */
30
+ export declare const Intent: Schema.Struct<{
31
+ readonly version: Schema.Literal<1>;
32
+ readonly nodeId: Schema.NonEmptyString;
33
+ readonly nodeKey: Schema.NonEmptyString;
34
+ readonly dispatchKey: Schema.NonEmptyString;
35
+ readonly attempts: Schema.Int;
36
+ readonly rebases: Schema.Int;
37
+ readonly peers: Schema.$Array<Schema.NonEmptyString>;
38
+ }>;
39
+ /** Durable stopped-attempt decision.
40
+ * @since 1.0.0
41
+ * @category models
42
+ */
43
+ export type Intent = typeof Intent.Type;
44
+ /** The plan extension committed for an intent.
45
+ * @since 1.0.0
46
+ * @category schemas
47
+ */
48
+ export declare const Completion: Schema.Struct<{
49
+ readonly version: Schema.Literal<1>;
50
+ readonly generation: Schema.Int;
51
+ readonly parentDigest: Schema.NonEmptyString;
52
+ readonly planDigest: Schema.NonEmptyString;
53
+ readonly mergeId: Schema.NonEmptyString;
54
+ readonly mergeKey: Schema.NonEmptyString;
55
+ readonly winners: Schema.$Array<Schema.NonEmptyString>;
56
+ }>;
57
+ /** Committed merge extension.
58
+ * @since 1.0.0
59
+ * @category models
60
+ */
61
+ export type Completion = typeof Completion.Type;
62
+ /** Intent with its optional committed extension.
63
+ * @since 1.0.0
64
+ * @category models
65
+ */
66
+ export interface Decision {
67
+ readonly intent: Intent;
68
+ readonly completion?: Completion;
69
+ }
70
+ declare const PlanMergeError_base: Schema.Class<PlanMergeError, Schema.TaggedStruct<"@smthrs/engine-store/PlanMergeError", {
71
+ readonly code: Schema.Literals<readonly ["invalid_input", "corrupt_state", "incompatible_state", "fence_lost", "transaction_open", "transaction_required", "persistence_failed"]>;
72
+ readonly message: Schema.String;
73
+ readonly cause: Schema.optional<Schema.Unknown>;
74
+ }>, import("effect/Cause").YieldableError>;
75
+ /** Typed admission/storage refusal.
76
+ * @since 1.0.0
77
+ * @category errors
78
+ */
79
+ export declare class PlanMergeError extends PlanMergeError_base {
80
+ }
81
+ /** Store operations; writes may join the owning transaction, reads require committed state.
82
+ * @since 1.0.0
83
+ * @category models
84
+ */
85
+ export interface Service {
86
+ readonly list: (identity: Identity, owner: OwnerId) => Effect.Effect<ReadonlyArray<Decision>, PlanMergeError>;
87
+ readonly intend: (identity: Identity, intent: Intent, owner: OwnerId) => Effect.Effect<Intent, PlanMergeError>;
88
+ readonly complete: (identity: Identity, nodeId: string, completion: Completion, owner: OwnerId) => Effect.Effect<Completion, PlanMergeError>;
89
+ }
90
+ declare const PlanMergeStore_base: Context.ServiceClass<PlanMergeStore, "@smthrs/engine-store/PlanMergeStore", Service>;
91
+ /** Durable merge decision service.
92
+ * @since 1.0.0
93
+ * @category services
94
+ */
95
+ export declare class PlanMergeStore extends PlanMergeStore_base {
96
+ }
97
+ /** Encoded decision limit, in JavaScript code units.
98
+ * @since 1.0.0
99
+ * @category constants
100
+ */
101
+ export declare const maximumDecisionCharacters: number;
102
+ /** SQL constructor; all collaborating stores must use the same database/writer.
103
+ * @since 1.0.0
104
+ * @category constructors
105
+ */
106
+ export declare const make: Effect.Effect<Service, never, SqlClient.SqlClient | DurableWriter | Crypto.Crypto>;
107
+ /** SQL-backed merge decisions; migrations must run first.
108
+ * @since 1.0.0
109
+ * @category layers
110
+ */
111
+ export declare const layer: Layer.Layer<PlanMergeStore, never, SqlClient.SqlClient | DurableWriter | Crypto.Crypto>;
112
+ export {};
113
+ //# sourceMappingURL=PlanMergeStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanMergeStore.d.ts","sourceRoot":"","sources":["../../src/PlanMergeStore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/D,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAM1D;;;GAGG;AACH,eAAO,MAAM,QAAQ;;;;;EAKnB,CAAA;AACF;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAC3C;;;GAGG;AACH,eAAO,MAAM,MAAM;;;;;;;;EAQjB,CAAA;AACF;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AACvC;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;;EAQrB,CAAA;AACF;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAC/C;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;CACjC;;;;;;AACD;;;GAGG;AACH,qBAAa,cAAe,SAAQ,mBAYlC;CAAG;AACL;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAA;IAC7G,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAC9G,QAAQ,CAAC,QAAQ,EAAE,CACjB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,OAAO,KACX,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;CAC/C;;AACD;;;GAGG;AACH,qBAAa,cAAe,SAAQ,mBAAiF;CAAG;AACxH;;;GAGG;AACH,eAAO,MAAM,yBAAyB,QAAmB,CAAA;AAiBzD;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC,MAAM,CAyLnG,CAAA;AACD;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,EAAE,SAAS,CAAC,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC,MAAM,CAC3E,CAAA"}
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var PlanMergeStore_exports = {};
30
+ __export(PlanMergeStore_exports, {
31
+ Completion: () => Completion,
32
+ Identity: () => Identity,
33
+ Intent: () => Intent,
34
+ PlanMergeError: () => PlanMergeError,
35
+ PlanMergeStore: () => PlanMergeStore,
36
+ layer: () => layer,
37
+ make: () => make,
38
+ maximumDecisionCharacters: () => maximumDecisionCharacters
39
+ });
40
+ module.exports = __toCommonJS(PlanMergeStore_exports);
41
+ var import_crypto = require("@smthrs/crypto");
42
+ var import_DurableWriter = require("@smthrs/database/DurableWriter");
43
+ var import_plan = require("@smthrs/plan");
44
+ var import_Ownership = require("@smthrs/run-store/Ownership");
45
+ var import_effect = require("effect");
46
+ var SqlClient = __toESM(require("effect/unstable/sql/SqlClient"), 1);
47
+ const Natural = import_effect.Schema.Int.check(import_effect.Schema.isGreaterThanOrEqualTo(0));
48
+ const Positive = import_effect.Schema.Int.check(import_effect.Schema.isGreaterThan(0));
49
+ const Names = import_effect.Schema.Array(import_effect.Schema.NonEmptyString).check(import_effect.Schema.isMaxLength(import_plan.Plan.maximumPlanNodes));
50
+ const Identity = import_effect.Schema.Struct({
51
+ runId: import_effect.Schema.NonEmptyString,
52
+ planId: import_effect.Schema.NonEmptyString,
53
+ baseDigest: import_effect.Schema.NonEmptyString,
54
+ environmentDigest: import_effect.Schema.NonEmptyString
55
+ });
56
+ const Intent = import_effect.Schema.Struct({
57
+ version: import_effect.Schema.Literal(1),
58
+ nodeId: import_effect.Schema.NonEmptyString,
59
+ nodeKey: import_effect.Schema.NonEmptyString,
60
+ dispatchKey: import_effect.Schema.NonEmptyString,
61
+ attempts: Positive,
62
+ rebases: Natural,
63
+ peers: Names
64
+ });
65
+ const Completion = import_effect.Schema.Struct({
66
+ version: import_effect.Schema.Literal(1),
67
+ generation: Positive,
68
+ parentDigest: import_effect.Schema.NonEmptyString,
69
+ planDigest: import_effect.Schema.NonEmptyString,
70
+ mergeId: import_effect.Schema.NonEmptyString,
71
+ mergeKey: import_effect.Schema.NonEmptyString,
72
+ winners: Names
73
+ });
74
+ class PlanMergeError extends import_effect.Schema.TaggedError()("@smthrs/engine-store/PlanMergeError", {
75
+ code: import_effect.Schema.Literals([
76
+ "invalid_input",
77
+ "corrupt_state",
78
+ "incompatible_state",
79
+ "fence_lost",
80
+ "transaction_open",
81
+ "transaction_required",
82
+ "persistence_failed"
83
+ ]),
84
+ message: import_effect.Schema.String,
85
+ cause: import_effect.Schema.optional(import_effect.Schema.Unknown)
86
+ }) {
87
+ }
88
+ class PlanMergeStore extends import_effect.Context.Service()("@smthrs/engine-store/PlanMergeStore") {
89
+ }
90
+ const maximumDecisionCharacters = 16 * 1024 * 1024;
91
+ const error = (code, message, cause) => new PlanMergeError({ code, message, ...cause === void 0 ? {} : { cause } });
92
+ const storageError = (cause) => cause instanceof PlanMergeError ? cause : error("persistence_failed", "could not access plan merge decisions", cause);
93
+ const decode = (schema, value, code) => import_effect.Effect.try({
94
+ try: () => import_effect.Schema.decodeUnknownSync(schema)(value, { onExcessProperty: "error" }),
95
+ catch: (cause) => error(code, "invalid plan merge decision", cause)
96
+ });
97
+ const unique = (names, code) => new Set(names).size === names.length ? import_effect.Effect.void : import_effect.Effect.fail(error(code, "duplicate merge peer identity"));
98
+ const make = import_effect.Effect.gen(
99
+ function* () {
100
+ const sql = yield* SqlClient.SqlClient;
101
+ const writer = yield* import_DurableWriter.DurableWriter;
102
+ const crypto = yield* import_effect.Effect.context();
103
+ const hash = (value) => import_effect.Schema.decodeUnknownEffect(import_crypto.Sha256)(value).pipe(import_effect.Effect.provide(crypto));
104
+ const fence = (identity, owner, requireHead) => import_effect.Effect.gen(function* () {
105
+ const owned = yield* sql`SELECT run_id FROM flows_runs WHERE run_id = ${identity.runId}
106
+ AND status = 'running' AND cancel_requested_at_ms IS NULL
107
+ AND owner_host_id = ${owner.hostId} AND owner_pid = ${owner.pid} AND owner_nonce = ${owner.nonce}`;
108
+ if (owned.length !== 1) {
109
+ return yield* import_effect.Effect.fail(error("fence_lost", "merge decision owner no longer owns the run"));
110
+ }
111
+ const heads = yield* sql`SELECT
112
+ plan_id AS "planId", base_digest AS "baseDigest", environment_digest AS "environmentDigest", merge_state_version AS version
113
+ FROM flows_plan_input_heads WHERE run_id = ${identity.runId}`;
114
+ const head = heads[0];
115
+ if (head === void 0) {
116
+ const orphan = yield* sql`SELECT 1 FROM flows_plan_merge_intents WHERE run_id = ${identity.runId} LIMIT 1`;
117
+ if (requireHead || orphan.length > 0) {
118
+ return yield* import_effect.Effect.fail(error("corrupt_state", "merge intent has no admitted input generation"));
119
+ }
120
+ return;
121
+ }
122
+ if (head.version !== 1 || head.planId !== identity.planId || head.baseDigest !== identity.baseDigest || head.environmentDigest !== identity.environmentDigest) {
123
+ return yield* import_effect.Effect.fail(
124
+ error(
125
+ "incompatible_state",
126
+ "this run has different or unrecorded merge execution state; recover with its original runtime or reconcile before starting a new run"
127
+ )
128
+ );
129
+ }
130
+ });
131
+ const encoded = (value) => import_effect.Effect.gen(function* () {
132
+ const json = JSON.stringify(value);
133
+ if (json.length > maximumDecisionCharacters) {
134
+ return yield* import_effect.Effect.fail(error("invalid_input", "merge decision exceeds its durable size limit"));
135
+ }
136
+ return { json, checksum: yield* hash(json) };
137
+ });
138
+ const stored = (schema, row) => import_effect.Effect.gen(function* () {
139
+ if (row.json.length > maximumDecisionCharacters || (yield* hash(row.json)) !== row.checksum) {
140
+ return yield* import_effect.Effect.fail(error("corrupt_state", "merge decision failed its size or integrity check"));
141
+ }
142
+ return yield* decode(import_effect.Schema.fromJsonString(schema), row.json, "corrupt_state");
143
+ });
144
+ const load = (identity, nodeId) => import_effect.Effect.gen(function* () {
145
+ const rows = yield* sql`SELECT i.stopped_node_id AS "nodeId", i.intent_json AS json, i.checksum,
146
+ c.generation, c.merge_node_id AS "mergeId", c.completion_json AS "completionJson",
147
+ c.checksum AS "completionChecksum"
148
+ FROM flows_plan_merge_intents i LEFT JOIN flows_plan_merge_completions c
149
+ ON c.run_id = i.run_id AND c.stopped_node_id = i.stopped_node_id
150
+ WHERE i.run_id = ${identity.runId} ${nodeId === void 0 ? sql`` : sql`AND i.stopped_node_id = ${nodeId}`}
151
+ ORDER BY i.stopped_node_id LIMIT ${import_plan.Plan.maximumPlanNodes + 1}`;
152
+ if (rows.length > import_plan.Plan.maximumPlanNodes) {
153
+ return yield* import_effect.Effect.fail(error("corrupt_state", "too many merge decisions for one plan"));
154
+ }
155
+ return yield* import_effect.Effect.forEach(rows, (row) => import_effect.Effect.gen(function* () {
156
+ const intent = yield* stored(Intent, row);
157
+ yield* unique(intent.peers, "corrupt_state");
158
+ if (intent.nodeId !== row.nodeId || intent.peers.includes(intent.nodeId)) {
159
+ return yield* import_effect.Effect.fail(error("corrupt_state", "merge intent identity is inconsistent"));
160
+ }
161
+ if (row.completionJson === null) return { intent };
162
+ const completion = yield* stored(Completion, {
163
+ json: row.completionJson,
164
+ checksum: row.completionChecksum
165
+ });
166
+ yield* unique(completion.winners, "corrupt_state");
167
+ if (completion.generation !== row.generation || completion.mergeId !== row.mergeId || completion.winners.some((id) => !intent.peers.includes(id))) {
168
+ return yield* import_effect.Effect.fail(error("corrupt_state", "merge completion does not match its intent"));
169
+ }
170
+ return { intent, completion };
171
+ }));
172
+ });
173
+ const list = (input, ownerInput) => import_effect.Effect.gen(function* () {
174
+ const identity = yield* decode(Identity, input, "invalid_input");
175
+ const owner = yield* decode(import_Ownership.OwnerId, ownerInput, "invalid_input");
176
+ if (import_effect.Option.isSome(yield* import_effect.Effect.serviceOption(sql.transactionService))) {
177
+ return yield* import_effect.Effect.fail(error("transaction_open", "merge recovery requires committed decisions"));
178
+ }
179
+ return yield* writer.write(import_effect.Effect.gen(function* () {
180
+ yield* fence(identity, owner, false);
181
+ return yield* load(identity);
182
+ }));
183
+ }).pipe(import_effect.Effect.mapError(storageError));
184
+ const intend = (input, value, ownerInput) => import_effect.Effect.gen(function* () {
185
+ const identity = yield* decode(Identity, input, "invalid_input");
186
+ const owner = yield* decode(import_Ownership.OwnerId, ownerInput, "invalid_input");
187
+ const intent = yield* decode(Intent, value, "invalid_input");
188
+ yield* unique(intent.peers, "invalid_input");
189
+ if (intent.peers.includes(intent.nodeId)) {
190
+ return yield* import_effect.Effect.fail(error("invalid_input", "a merge cannot stop its own peer"));
191
+ }
192
+ const data = yield* encoded(intent);
193
+ return yield* writer.write(import_effect.Effect.gen(function* () {
194
+ yield* fence(identity, owner, true);
195
+ const [existing] = yield* load(identity, intent.nodeId);
196
+ if (existing !== void 0) return existing.intent;
197
+ const [count] = yield* sql`SELECT count(*) AS count
198
+ FROM flows_plan_merge_intents WHERE run_id = ${identity.runId}`;
199
+ if (count.count >= import_plan.Plan.maximumPlanNodes) {
200
+ return yield* import_effect.Effect.fail(error("invalid_input", "too many merge intents for one plan"));
201
+ }
202
+ yield* sql`INSERT INTO flows_plan_merge_intents (run_id, stopped_node_id, intent_json, checksum)
203
+ VALUES (${identity.runId}, ${intent.nodeId}, ${data.json}, ${data.checksum})`;
204
+ return intent;
205
+ }));
206
+ }).pipe(import_effect.Effect.mapError(storageError));
207
+ const complete = (input, nodeIdInput, value, ownerInput) => import_effect.Effect.gen(function* () {
208
+ if (import_effect.Option.isNone(yield* import_effect.Effect.serviceOption(sql.transactionService))) {
209
+ return yield* import_effect.Effect.fail(
210
+ error("transaction_required", "merge completion must join the plan/input append transaction")
211
+ );
212
+ }
213
+ const identity = yield* decode(Identity, input, "invalid_input");
214
+ const owner = yield* decode(import_Ownership.OwnerId, ownerInput, "invalid_input");
215
+ const nodeId = yield* decode(import_effect.Schema.NonEmptyString, nodeIdInput, "invalid_input");
216
+ const completion = yield* decode(Completion, value, "invalid_input");
217
+ yield* unique(completion.winners, "invalid_input");
218
+ const data = yield* encoded(completion);
219
+ return yield* writer.write(import_effect.Effect.gen(function* () {
220
+ yield* fence(identity, owner, true);
221
+ const [decision] = yield* load(identity, nodeId);
222
+ if (decision === void 0) {
223
+ return yield* import_effect.Effect.fail(error("corrupt_state", "merge completion has no intent"));
224
+ }
225
+ if (decision.completion !== void 0) {
226
+ if (JSON.stringify(decision.completion) !== JSON.stringify(completion)) {
227
+ return yield* import_effect.Effect.fail(
228
+ error("incompatible_state", "a merge intent already committed a different extension")
229
+ );
230
+ }
231
+ return decision.completion;
232
+ }
233
+ if (completion.winners.some((id) => !decision.intent.peers.includes(id))) {
234
+ return yield* import_effect.Effect.fail(error("invalid_input", "merge winner was not an admitted peer"));
235
+ }
236
+ const appended = yield* sql`SELECT p.plan_id FROM flows_plans p JOIN flows_plan_input_generations i ON i.plan_id = p.plan_id
237
+ JOIN flows_plan_nodes n ON n.plan_id = p.plan_id AND n.generation = p.generation
238
+ WHERE p.plan_id = ${identity.planId} AND p.digest = ${completion.planDigest} AND p.generation = ${completion.generation}
239
+ AND i.run_id = ${identity.runId} AND i.generation = ${completion.generation}
240
+ AND n.node_id = ${completion.mergeId} AND n.key_digest = ${completion.mergeKey} AND n.kind = 'merge'`;
241
+ if (appended.length !== 1) {
242
+ return yield* import_effect.Effect.fail(
243
+ error("corrupt_state", "merge completion requires its plan and input generation in the same transaction")
244
+ );
245
+ }
246
+ yield* sql`INSERT INTO flows_plan_merge_completions (run_id, stopped_node_id, generation, merge_node_id, completion_json, checksum)
247
+ VALUES (${identity.runId}, ${nodeId}, ${completion.generation}, ${completion.mergeId}, ${data.json}, ${data.checksum})`;
248
+ return completion;
249
+ }));
250
+ }).pipe(import_effect.Effect.mapError(storageError));
251
+ return { list, intend, complete };
252
+ }
253
+ );
254
+ const layer = import_effect.Layer.effect(PlanMergeStore)(make);
255
+ //# sourceMappingURL=PlanMergeStore.js.map