@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.
- package/CHANGELOG.md +247 -0
- package/LICENSE +21 -0
- package/README.md +146 -2
- package/dist/cjs/ArtifactGc.d.ts +235 -0
- package/dist/cjs/ArtifactGc.d.ts.map +1 -0
- package/dist/cjs/ArtifactGc.js +183 -0
- package/dist/cjs/ArtifactGc.js.map +7 -0
- package/dist/cjs/ArtifactSync.d.ts +164 -0
- package/dist/cjs/ArtifactSync.d.ts.map +1 -0
- package/dist/cjs/ArtifactSync.js +144 -0
- package/dist/cjs/ArtifactSync.js.map +7 -0
- package/dist/cjs/CacheSync.d.ts +112 -0
- package/dist/cjs/CacheSync.d.ts.map +1 -0
- package/dist/cjs/CacheSync.js +64 -0
- package/dist/cjs/CacheSync.js.map +7 -0
- package/dist/cjs/DeferredClockFold.d.ts +354 -0
- package/dist/cjs/DeferredClockFold.d.ts.map +1 -0
- package/dist/cjs/DeferredClockFold.js +335 -0
- package/dist/cjs/DeferredClockFold.js.map +7 -0
- package/dist/cjs/DisasterRecovery.d.ts +431 -0
- package/dist/cjs/DisasterRecovery.d.ts.map +1 -0
- package/dist/cjs/DisasterRecovery.js +453 -0
- package/dist/cjs/DisasterRecovery.js.map +7 -0
- package/dist/cjs/DurableEngineState.d.ts +776 -0
- package/dist/cjs/DurableEngineState.d.ts.map +1 -0
- package/dist/cjs/DurableEngineState.js +1536 -0
- package/dist/cjs/DurableEngineState.js.map +7 -0
- package/dist/cjs/EngineStore.d.ts +158 -0
- package/dist/cjs/EngineStore.d.ts.map +1 -0
- package/dist/cjs/EngineStore.js +398 -0
- package/dist/cjs/EngineStore.js.map +7 -0
- package/dist/cjs/EngineStoreMetrics.d.ts +276 -0
- package/dist/cjs/EngineStoreMetrics.d.ts.map +1 -0
- package/dist/cjs/EngineStoreMetrics.js +135 -0
- package/dist/cjs/EngineStoreMetrics.js.map +7 -0
- package/dist/cjs/Errors.d.ts +22 -0
- package/dist/cjs/Errors.d.ts.map +1 -0
- package/dist/cjs/Errors.js +39 -0
- package/dist/cjs/Errors.js.map +7 -0
- package/dist/cjs/EventTypes.d.ts +27 -0
- package/dist/cjs/EventTypes.d.ts.map +1 -0
- package/dist/cjs/EventTypes.js +37 -0
- package/dist/cjs/EventTypes.js.map +7 -0
- package/dist/cjs/ExecutionFacts.d.ts +59 -0
- package/dist/cjs/ExecutionFacts.d.ts.map +1 -0
- package/dist/cjs/ExecutionFacts.js +123 -0
- package/dist/cjs/ExecutionFacts.js.map +7 -0
- package/dist/cjs/ExecutionSnapshot.d.ts +117 -0
- package/dist/cjs/ExecutionSnapshot.d.ts.map +1 -0
- package/dist/cjs/ExecutionSnapshot.js +111 -0
- package/dist/cjs/ExecutionSnapshot.js.map +7 -0
- package/dist/cjs/Inconsistency.d.ts +154 -0
- package/dist/cjs/Inconsistency.d.ts.map +1 -0
- package/dist/cjs/Inconsistency.js +135 -0
- package/dist/cjs/Inconsistency.js.map +7 -0
- package/dist/cjs/Migrations.d.ts +56 -0
- package/dist/cjs/Migrations.d.ts.map +1 -0
- package/dist/cjs/Migrations.js +78 -0
- package/dist/cjs/Migrations.js.map +7 -0
- package/dist/cjs/OwnerIdentity.d.ts +91 -0
- package/dist/cjs/OwnerIdentity.d.ts.map +1 -0
- package/dist/cjs/OwnerIdentity.js +65 -0
- package/dist/cjs/OwnerIdentity.js.map +7 -0
- package/dist/cjs/PlanInputStore.d.ts +110 -0
- package/dist/cjs/PlanInputStore.d.ts.map +1 -0
- package/dist/cjs/PlanInputStore.js +224 -0
- package/dist/cjs/PlanInputStore.js.map +7 -0
- package/dist/cjs/PlanMergeStore.d.ts +113 -0
- package/dist/cjs/PlanMergeStore.d.ts.map +1 -0
- package/dist/cjs/PlanMergeStore.js +255 -0
- package/dist/cjs/PlanMergeStore.js.map +7 -0
- package/dist/cjs/PlanScheduler.d.ts +363 -0
- package/dist/cjs/PlanScheduler.d.ts.map +1 -0
- package/dist/cjs/PlanScheduler.js +1090 -0
- package/dist/cjs/PlanScheduler.js.map +7 -0
- package/dist/cjs/Reconciliation.d.ts +175 -0
- package/dist/cjs/Reconciliation.d.ts.map +1 -0
- package/dist/cjs/Reconciliation.js +119 -0
- package/dist/cjs/Reconciliation.js.map +7 -0
- package/dist/cjs/ReplayOnly.d.ts +91 -0
- package/dist/cjs/ReplayOnly.d.ts.map +1 -0
- package/dist/cjs/ReplayOnly.js +52 -0
- package/dist/cjs/ReplayOnly.js.map +7 -0
- package/dist/cjs/Retention.d.ts +113 -0
- package/dist/cjs/Retention.d.ts.map +1 -0
- package/dist/cjs/Retention.js +99 -0
- package/dist/cjs/Retention.js.map +7 -0
- package/dist/cjs/RunCatalogRead.d.ts +17 -0
- package/dist/cjs/RunCatalogRead.d.ts.map +1 -0
- package/dist/cjs/RunCatalogRead.js +33 -0
- package/dist/cjs/RunCatalogRead.js.map +7 -0
- package/dist/cjs/RunChangeFeed.d.ts +75 -0
- package/dist/cjs/RunChangeFeed.d.ts.map +1 -0
- package/dist/cjs/RunChangeFeed.js +96 -0
- package/dist/cjs/RunChangeFeed.js.map +7 -0
- package/dist/cjs/RunState.d.ts +116 -0
- package/dist/cjs/RunState.d.ts.map +1 -0
- package/dist/cjs/RunState.js +76 -0
- package/dist/cjs/RunState.js.map +7 -0
- package/dist/cjs/Selection.d.ts +495 -0
- package/dist/cjs/Selection.d.ts.map +1 -0
- package/dist/cjs/Selection.js +288 -0
- package/dist/cjs/Selection.js.map +7 -0
- package/dist/cjs/SelectionStore.d.ts +141 -0
- package/dist/cjs/SelectionStore.d.ts.map +1 -0
- package/dist/cjs/SelectionStore.js +229 -0
- package/dist/cjs/SelectionStore.js.map +7 -0
- package/dist/cjs/StepBoundary.d.ts +501 -0
- package/dist/cjs/StepBoundary.d.ts.map +1 -0
- package/dist/cjs/StepBoundary.js +619 -0
- package/dist/cjs/StepBoundary.js.map +7 -0
- package/dist/cjs/StepCacheFold.d.ts +148 -0
- package/dist/cjs/StepCacheFold.d.ts.map +1 -0
- package/dist/cjs/StepCacheFold.js +131 -0
- package/dist/cjs/StepCacheFold.js.map +7 -0
- package/dist/cjs/StepSandbox.d.ts +78 -0
- package/dist/cjs/StepSandbox.d.ts.map +1 -0
- package/dist/cjs/StepSandbox.js +75 -0
- package/dist/cjs/StepSandbox.js.map +7 -0
- package/dist/cjs/WakeBus.d.ts +116 -0
- package/dist/cjs/WakeBus.d.ts.map +1 -0
- package/dist/cjs/WakeBus.js +89 -0
- package/dist/cjs/WakeBus.js.map +7 -0
- package/dist/cjs/WorkspaceSandbox.d.ts +619 -0
- package/dist/cjs/WorkspaceSandbox.d.ts.map +1 -0
- package/dist/cjs/WorkspaceSandbox.js +711 -0
- package/dist/cjs/WorkspaceSandbox.js.map +7 -0
- package/dist/cjs/index.d.ts +157 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +95 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/internal/ActionPersistence.d.ts +276 -0
- package/dist/cjs/internal/ActionPersistence.d.ts.map +1 -0
- package/dist/cjs/internal/ActionPersistence.js +1395 -0
- package/dist/cjs/internal/ActionPersistence.js.map +7 -0
- package/dist/cjs/internal/ArtifactRoots.d.ts +38 -0
- package/dist/cjs/internal/ArtifactRoots.d.ts.map +1 -0
- package/dist/cjs/internal/ArtifactRoots.js +89 -0
- package/dist/cjs/internal/ArtifactRoots.js.map +7 -0
- package/dist/cjs/internal/AttemptAdmission.d.ts +53 -0
- package/dist/cjs/internal/AttemptAdmission.d.ts.map +1 -0
- package/dist/cjs/internal/AttemptAdmission.js +52 -0
- package/dist/cjs/internal/AttemptAdmission.js.map +7 -0
- package/dist/cjs/internal/AttemptLifecycle.d.ts +245 -0
- package/dist/cjs/internal/AttemptLifecycle.d.ts.map +1 -0
- package/dist/cjs/internal/AttemptLifecycle.js +112 -0
- package/dist/cjs/internal/AttemptLifecycle.js.map +7 -0
- package/dist/cjs/internal/AttemptProbe.d.ts +53 -0
- package/dist/cjs/internal/AttemptProbe.d.ts.map +1 -0
- package/dist/cjs/internal/AttemptProbe.js +66 -0
- package/dist/cjs/internal/AttemptProbe.js.map +7 -0
- package/dist/cjs/internal/CacheAdmission.d.ts +79 -0
- package/dist/cjs/internal/CacheAdmission.d.ts.map +1 -0
- package/dist/cjs/internal/CacheAdmission.js +71 -0
- package/dist/cjs/internal/CacheAdmission.js.map +7 -0
- package/dist/cjs/internal/CacheAgeHistory.d.ts +27 -0
- package/dist/cjs/internal/CacheAgeHistory.d.ts.map +1 -0
- package/dist/cjs/internal/CacheAgeHistory.js +61 -0
- package/dist/cjs/internal/CacheAgeHistory.js.map +7 -0
- package/dist/cjs/internal/CacheAgeVerdicts.d.ts +15 -0
- package/dist/cjs/internal/CacheAgeVerdicts.d.ts.map +1 -0
- package/dist/cjs/internal/CacheAgeVerdicts.js +73 -0
- package/dist/cjs/internal/CacheAgeVerdicts.js.map +7 -0
- package/dist/cjs/internal/CacheOutputPolicy.d.ts +24 -0
- package/dist/cjs/internal/CacheOutputPolicy.d.ts.map +1 -0
- package/dist/cjs/internal/CacheOutputPolicy.js +75 -0
- package/dist/cjs/internal/CacheOutputPolicy.js.map +7 -0
- package/dist/cjs/internal/CachePublication.d.ts +97 -0
- package/dist/cjs/internal/CachePublication.d.ts.map +1 -0
- package/dist/cjs/internal/CachePublication.js +80 -0
- package/dist/cjs/internal/CachePublication.js.map +7 -0
- package/dist/cjs/internal/CallFacts.d.ts +15 -0
- package/dist/cjs/internal/CallFacts.d.ts.map +1 -0
- package/dist/cjs/internal/CallFacts.js +97 -0
- package/dist/cjs/internal/CallFacts.js.map +7 -0
- package/dist/cjs/internal/CopiedRecord.d.ts +61 -0
- package/dist/cjs/internal/CopiedRecord.d.ts.map +1 -0
- package/dist/cjs/internal/CopiedRecord.js +134 -0
- package/dist/cjs/internal/CopiedRecord.js.map +7 -0
- package/dist/cjs/internal/DeferredPersistence.d.ts +108 -0
- package/dist/cjs/internal/DeferredPersistence.d.ts.map +1 -0
- package/dist/cjs/internal/DeferredPersistence.js +270 -0
- package/dist/cjs/internal/DeferredPersistence.js.map +7 -0
- package/dist/cjs/internal/EffectRecords.d.ts +92 -0
- package/dist/cjs/internal/EffectRecords.d.ts.map +1 -0
- package/dist/cjs/internal/EffectRecords.js +63 -0
- package/dist/cjs/internal/EffectRecords.js.map +7 -0
- package/dist/cjs/internal/EngineJj.d.ts +30 -0
- package/dist/cjs/internal/EngineJj.d.ts.map +1 -0
- package/dist/cjs/internal/EngineJj.js +42 -0
- package/dist/cjs/internal/EngineJj.js.map +7 -0
- package/dist/cjs/internal/EngineStateSchema.d.ts +68 -0
- package/dist/cjs/internal/EngineStateSchema.d.ts.map +1 -0
- package/dist/cjs/internal/EngineStateSchema.js +58 -0
- package/dist/cjs/internal/EngineStateSchema.js.map +7 -0
- package/dist/cjs/internal/ExecutionSnapshotRead.d.ts +162 -0
- package/dist/cjs/internal/ExecutionSnapshotRead.d.ts.map +1 -0
- package/dist/cjs/internal/ExecutionSnapshotRead.js +201 -0
- package/dist/cjs/internal/ExecutionSnapshotRead.js.map +7 -0
- package/dist/cjs/internal/ExecutionSnapshotRelations.d.ts +39 -0
- package/dist/cjs/internal/ExecutionSnapshotRelations.d.ts.map +1 -0
- package/dist/cjs/internal/ExecutionSnapshotRelations.js +105 -0
- package/dist/cjs/internal/ExecutionSnapshotRelations.js.map +7 -0
- package/dist/cjs/internal/ExitEncoding.d.ts +180 -0
- package/dist/cjs/internal/ExitEncoding.d.ts.map +1 -0
- package/dist/cjs/internal/ExitEncoding.js +236 -0
- package/dist/cjs/internal/ExitEncoding.js.map +7 -0
- package/dist/cjs/internal/FileBoundarySnapshot.d.ts +14 -0
- package/dist/cjs/internal/FileBoundarySnapshot.d.ts.map +1 -0
- package/dist/cjs/internal/FileBoundarySnapshot.js +51 -0
- package/dist/cjs/internal/FileBoundarySnapshot.js.map +7 -0
- package/dist/cjs/internal/FileEnumeration.d.ts +127 -0
- package/dist/cjs/internal/FileEnumeration.d.ts.map +1 -0
- package/dist/cjs/internal/FileEnumeration.js +194 -0
- package/dist/cjs/internal/FileEnumeration.js.map +7 -0
- package/dist/cjs/internal/HostReflection.d.ts +80 -0
- package/dist/cjs/internal/HostReflection.d.ts.map +1 -0
- package/dist/cjs/internal/HostReflection.js +43 -0
- package/dist/cjs/internal/HostReflection.js.map +7 -0
- package/dist/cjs/internal/JournalRecords.d.ts +325 -0
- package/dist/cjs/internal/JournalRecords.d.ts.map +1 -0
- package/dist/cjs/internal/JournalRecords.js +122 -0
- package/dist/cjs/internal/JournalRecords.js.map +7 -0
- package/dist/cjs/internal/NodeJournal.d.ts +157 -0
- package/dist/cjs/internal/NodeJournal.d.ts.map +1 -0
- package/dist/cjs/internal/NodeJournal.js +192 -0
- package/dist/cjs/internal/NodeJournal.js.map +7 -0
- package/dist/cjs/internal/Ordering.d.ts +14 -0
- package/dist/cjs/internal/Ordering.d.ts.map +1 -0
- package/dist/cjs/internal/Ordering.js +25 -0
- package/dist/cjs/internal/Ordering.js.map +7 -0
- package/dist/cjs/internal/PlanInputs.d.ts +14 -0
- package/dist/cjs/internal/PlanInputs.d.ts.map +1 -0
- package/dist/cjs/internal/PlanInputs.js +78 -0
- package/dist/cjs/internal/PlanInputs.js.map +7 -0
- package/dist/cjs/internal/PlanMerges.d.ts +178 -0
- package/dist/cjs/internal/PlanMerges.d.ts.map +1 -0
- package/dist/cjs/internal/PlanMerges.js +125 -0
- package/dist/cjs/internal/PlanMerges.js.map +7 -0
- package/dist/cjs/internal/ProvenanceSlot.d.ts +30 -0
- package/dist/cjs/internal/ProvenanceSlot.d.ts.map +1 -0
- package/dist/cjs/internal/ProvenanceSlot.js +53 -0
- package/dist/cjs/internal/ProvenanceSlot.js.map +7 -0
- package/dist/cjs/internal/ResultEnvelope.d.ts +88 -0
- package/dist/cjs/internal/ResultEnvelope.d.ts.map +1 -0
- package/dist/cjs/internal/ResultEnvelope.js +90 -0
- package/dist/cjs/internal/ResultEnvelope.js.map +7 -0
- package/dist/cjs/internal/RetentionOps.d.ts +414 -0
- package/dist/cjs/internal/RetentionOps.d.ts.map +1 -0
- package/dist/cjs/internal/RetentionOps.js +354 -0
- package/dist/cjs/internal/RetentionOps.js.map +7 -0
- package/dist/cjs/internal/RunCatalogOps.d.ts +118 -0
- package/dist/cjs/internal/RunCatalogOps.d.ts.map +1 -0
- package/dist/cjs/internal/RunCatalogOps.js +85 -0
- package/dist/cjs/internal/RunCatalogOps.js.map +7 -0
- package/dist/cjs/internal/RunCoordinator.d.ts +78 -0
- package/dist/cjs/internal/RunCoordinator.d.ts.map +1 -0
- package/dist/cjs/internal/RunCoordinator.js +123 -0
- package/dist/cjs/internal/RunCoordinator.js.map +7 -0
- package/dist/cjs/internal/RunDriver.d.ts +192 -0
- package/dist/cjs/internal/RunDriver.d.ts.map +1 -0
- package/dist/cjs/internal/RunDriver.js +1586 -0
- package/dist/cjs/internal/RunDriver.js.map +7 -0
- package/dist/cjs/internal/RunLifecycle.d.ts +22 -0
- package/dist/cjs/internal/RunLifecycle.d.ts.map +1 -0
- package/dist/cjs/internal/RunLifecycle.js +63 -0
- package/dist/cjs/internal/RunLifecycle.js.map +7 -0
- package/dist/cjs/internal/RunListing.d.ts +78 -0
- package/dist/cjs/internal/RunListing.d.ts.map +1 -0
- package/dist/cjs/internal/RunListing.js +171 -0
- package/dist/cjs/internal/RunListing.js.map +7 -0
- package/dist/cjs/internal/RunListingError.d.ts +35 -0
- package/dist/cjs/internal/RunListingError.d.ts.map +1 -0
- package/dist/cjs/internal/RunListingError.js +47 -0
- package/dist/cjs/internal/RunListingError.js.map +7 -0
- package/dist/cjs/internal/RuntimeGraph.d.ts +73 -0
- package/dist/cjs/internal/RuntimeGraph.d.ts.map +1 -0
- package/dist/cjs/internal/RuntimeGraph.js +180 -0
- package/dist/cjs/internal/RuntimeGraph.js.map +7 -0
- package/dist/cjs/internal/SandboxedExecution.d.ts +80 -0
- package/dist/cjs/internal/SandboxedExecution.d.ts.map +1 -0
- package/dist/cjs/internal/SandboxedExecution.js +104 -0
- package/dist/cjs/internal/SandboxedExecution.js.map +7 -0
- package/dist/cjs/internal/StateTransaction.d.ts +44 -0
- package/dist/cjs/internal/StateTransaction.d.ts.map +1 -0
- package/dist/cjs/internal/StateTransaction.js +52 -0
- package/dist/cjs/internal/StateTransaction.js.map +7 -0
- package/dist/cjs/internal/StepFacts.d.ts +14 -0
- package/dist/cjs/internal/StepFacts.d.ts.map +1 -0
- package/dist/cjs/internal/StepFacts.js +58 -0
- package/dist/cjs/internal/StepFacts.js.map +7 -0
- package/dist/cjs/internal/TypedEvents.d.ts +14 -0
- package/dist/cjs/internal/TypedEvents.d.ts.map +1 -0
- package/dist/cjs/internal/TypedEvents.js +37 -0
- package/dist/cjs/internal/TypedEvents.js.map +7 -0
- package/dist/cjs/migrations/0001_initial.d.ts +17 -0
- package/dist/cjs/migrations/0001_initial.d.ts.map +1 -0
- package/dist/cjs/migrations/0001_initial.js +61 -0
- package/dist/cjs/migrations/0001_initial.js.map +7 -0
- package/dist/cjs/migrations/0002_selection_store.d.ts +15 -0
- package/dist/cjs/migrations/0002_selection_store.d.ts.map +1 -0
- package/dist/cjs/migrations/0002_selection_store.js +56 -0
- package/dist/cjs/migrations/0002_selection_store.js.map +7 -0
- package/dist/cjs/migrations/0003_plan_inputs.d.ts +13 -0
- package/dist/cjs/migrations/0003_plan_inputs.d.ts.map +1 -0
- package/dist/cjs/migrations/0003_plan_inputs.js +90 -0
- package/dist/cjs/migrations/0003_plan_inputs.js.map +7 -0
- package/dist/cjs/migrations/0004_plan_environment.d.ts +14 -0
- package/dist/cjs/migrations/0004_plan_environment.d.ts.map +1 -0
- package/dist/cjs/migrations/0004_plan_environment.js +56 -0
- package/dist/cjs/migrations/0004_plan_environment.js.map +7 -0
- package/dist/cjs/migrations/0005_plan_merges.d.ts +14 -0
- package/dist/cjs/migrations/0005_plan_merges.d.ts.map +1 -0
- package/dist/cjs/migrations/0005_plan_merges.js +82 -0
- package/dist/cjs/migrations/0005_plan_merges.js.map +7 -0
- package/dist/cjs/migrations/0006_execution_listing.d.ts +15 -0
- package/dist/cjs/migrations/0006_execution_listing.d.ts.map +1 -0
- package/dist/cjs/migrations/0006_execution_listing.js +101 -0
- package/dist/cjs/migrations/0006_execution_listing.js.map +7 -0
- package/dist/cjs/migrations/0007_run_parent_sequence.d.ts +15 -0
- package/dist/cjs/migrations/0007_run_parent_sequence.d.ts.map +1 -0
- package/dist/cjs/migrations/0007_run_parent_sequence.js +40 -0
- package/dist/cjs/migrations/0007_run_parent_sequence.js.map +7 -0
- package/dist/cjs/migrations/0008_deferred_consumption.d.ts +16 -0
- package/dist/cjs/migrations/0008_deferred_consumption.d.ts.map +1 -0
- package/dist/cjs/migrations/0008_deferred_consumption.js +45 -0
- package/dist/cjs/migrations/0008_deferred_consumption.js.map +7 -0
- package/dist/cjs/migrations/0009_deferred_clock_facts.d.ts +24 -0
- package/dist/cjs/migrations/0009_deferred_clock_facts.d.ts.map +1 -0
- package/dist/cjs/migrations/0009_deferred_clock_facts.js +141 -0
- package/dist/cjs/migrations/0009_deferred_clock_facts.js.map +7 -0
- package/dist/cjs/migrations/0010_pending_cancellation.d.ts +15 -0
- package/dist/cjs/migrations/0010_pending_cancellation.d.ts.map +1 -0
- package/dist/cjs/migrations/0010_pending_cancellation.js +41 -0
- package/dist/cjs/migrations/0010_pending_cancellation.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/test/TestStores.d.ts +89 -0
- package/dist/cjs/test/TestStores.d.ts.map +1 -0
- package/dist/cjs/test/TestStores.js +98 -0
- package/dist/cjs/test/TestStores.js.map +7 -0
- package/dist/esm/ArtifactGc.d.ts +235 -0
- package/dist/esm/ArtifactGc.d.ts.map +1 -0
- package/dist/esm/ArtifactGc.js +268 -0
- package/dist/esm/ArtifactGc.js.map +1 -0
- package/dist/esm/ArtifactSync.d.ts +164 -0
- package/dist/esm/ArtifactSync.d.ts.map +1 -0
- package/dist/esm/ArtifactSync.js +176 -0
- package/dist/esm/ArtifactSync.js.map +1 -0
- package/dist/esm/CacheSync.d.ts +112 -0
- package/dist/esm/CacheSync.d.ts.map +1 -0
- package/dist/esm/CacheSync.js +94 -0
- package/dist/esm/CacheSync.js.map +1 -0
- package/dist/esm/DeferredClockFold.d.ts +354 -0
- package/dist/esm/DeferredClockFold.d.ts.map +1 -0
- package/dist/esm/DeferredClockFold.js +472 -0
- package/dist/esm/DeferredClockFold.js.map +1 -0
- package/dist/esm/DisasterRecovery.d.ts +431 -0
- package/dist/esm/DisasterRecovery.d.ts.map +1 -0
- package/dist/esm/DisasterRecovery.js +523 -0
- package/dist/esm/DisasterRecovery.js.map +1 -0
- package/dist/esm/DurableEngineState.d.ts +776 -0
- package/dist/esm/DurableEngineState.d.ts.map +1 -0
- package/dist/esm/DurableEngineState.js +1648 -0
- package/dist/esm/DurableEngineState.js.map +1 -0
- package/dist/esm/EngineStore.d.ts +158 -0
- package/dist/esm/EngineStore.d.ts.map +1 -0
- package/dist/esm/EngineStore.js +403 -0
- package/dist/esm/EngineStore.js.map +1 -0
- package/dist/esm/EngineStoreMetrics.d.ts +276 -0
- package/dist/esm/EngineStoreMetrics.d.ts.map +1 -0
- package/dist/esm/EngineStoreMetrics.js +260 -0
- package/dist/esm/EngineStoreMetrics.js.map +1 -0
- package/dist/esm/Errors.d.ts +22 -0
- package/dist/esm/Errors.d.ts.map +1 -0
- package/dist/esm/Errors.js +22 -0
- package/dist/esm/Errors.js.map +1 -0
- package/dist/esm/EventTypes.d.ts +27 -0
- package/dist/esm/EventTypes.d.ts.map +1 -0
- package/dist/esm/EventTypes.js +27 -0
- package/dist/esm/EventTypes.js.map +1 -0
- package/dist/esm/ExecutionFacts.d.ts +59 -0
- package/dist/esm/ExecutionFacts.d.ts.map +1 -0
- package/dist/esm/ExecutionFacts.js +96 -0
- package/dist/esm/ExecutionFacts.js.map +1 -0
- package/dist/esm/ExecutionSnapshot.d.ts +117 -0
- package/dist/esm/ExecutionSnapshot.d.ts.map +1 -0
- package/dist/esm/ExecutionSnapshot.js +95 -0
- package/dist/esm/ExecutionSnapshot.js.map +1 -0
- package/dist/esm/Inconsistency.d.ts +154 -0
- package/dist/esm/Inconsistency.d.ts.map +1 -0
- package/dist/esm/Inconsistency.js +133 -0
- package/dist/esm/Inconsistency.js.map +1 -0
- package/dist/esm/Migrations.d.ts +56 -0
- package/dist/esm/Migrations.d.ts.map +1 -0
- package/dist/esm/Migrations.js +91 -0
- package/dist/esm/Migrations.js.map +1 -0
- package/dist/esm/OwnerIdentity.d.ts +91 -0
- package/dist/esm/OwnerIdentity.d.ts.map +1 -0
- package/dist/esm/OwnerIdentity.js +99 -0
- package/dist/esm/OwnerIdentity.js.map +1 -0
- package/dist/esm/PlanInputStore.d.ts +110 -0
- package/dist/esm/PlanInputStore.d.ts.map +1 -0
- package/dist/esm/PlanInputStore.js +207 -0
- package/dist/esm/PlanInputStore.js.map +1 -0
- package/dist/esm/PlanMergeStore.d.ts +113 -0
- package/dist/esm/PlanMergeStore.d.ts.map +1 -0
- package/dist/esm/PlanMergeStore.js +244 -0
- package/dist/esm/PlanMergeStore.js.map +1 -0
- package/dist/esm/PlanScheduler.d.ts +363 -0
- package/dist/esm/PlanScheduler.d.ts.map +1 -0
- package/dist/esm/PlanScheduler.js +1321 -0
- package/dist/esm/PlanScheduler.js.map +1 -0
- package/dist/esm/Reconciliation.d.ts +175 -0
- package/dist/esm/Reconciliation.d.ts.map +1 -0
- package/dist/esm/Reconciliation.js +175 -0
- package/dist/esm/Reconciliation.js.map +1 -0
- package/dist/esm/ReplayOnly.d.ts +91 -0
- package/dist/esm/ReplayOnly.d.ts.map +1 -0
- package/dist/esm/ReplayOnly.js +59 -0
- package/dist/esm/ReplayOnly.js.map +1 -0
- package/dist/esm/Retention.d.ts +113 -0
- package/dist/esm/Retention.d.ts.map +1 -0
- package/dist/esm/Retention.js +139 -0
- package/dist/esm/Retention.js.map +1 -0
- package/dist/esm/RunCatalogRead.d.ts +17 -0
- package/dist/esm/RunCatalogRead.d.ts.map +1 -0
- package/dist/esm/RunCatalogRead.js +17 -0
- package/dist/esm/RunCatalogRead.js.map +1 -0
- package/dist/esm/RunChangeFeed.d.ts +75 -0
- package/dist/esm/RunChangeFeed.d.ts.map +1 -0
- package/dist/esm/RunChangeFeed.js +81 -0
- package/dist/esm/RunChangeFeed.js.map +1 -0
- package/dist/esm/RunState.d.ts +116 -0
- package/dist/esm/RunState.d.ts.map +1 -0
- package/dist/esm/RunState.js +109 -0
- package/dist/esm/RunState.js.map +1 -0
- package/dist/esm/Selection.d.ts +495 -0
- package/dist/esm/Selection.d.ts.map +1 -0
- package/dist/esm/Selection.js +482 -0
- package/dist/esm/Selection.js.map +1 -0
- package/dist/esm/SelectionStore.d.ts +141 -0
- package/dist/esm/SelectionStore.d.ts.map +1 -0
- package/dist/esm/SelectionStore.js +215 -0
- package/dist/esm/SelectionStore.js.map +1 -0
- package/dist/esm/StepBoundary.d.ts +501 -0
- package/dist/esm/StepBoundary.d.ts.map +1 -0
- package/dist/esm/StepBoundary.js +919 -0
- package/dist/esm/StepBoundary.js.map +1 -0
- package/dist/esm/StepCacheFold.d.ts +148 -0
- package/dist/esm/StepCacheFold.d.ts.map +1 -0
- package/dist/esm/StepCacheFold.js +201 -0
- package/dist/esm/StepCacheFold.js.map +1 -0
- package/dist/esm/StepSandbox.d.ts +78 -0
- package/dist/esm/StepSandbox.d.ts.map +1 -0
- package/dist/esm/StepSandbox.js +70 -0
- package/dist/esm/StepSandbox.js.map +1 -0
- package/dist/esm/WakeBus.d.ts +116 -0
- package/dist/esm/WakeBus.d.ts.map +1 -0
- package/dist/esm/WakeBus.js +121 -0
- package/dist/esm/WakeBus.js.map +1 -0
- package/dist/esm/WorkspaceSandbox.d.ts +619 -0
- package/dist/esm/WorkspaceSandbox.d.ts.map +1 -0
- package/dist/esm/WorkspaceSandbox.js +985 -0
- package/dist/esm/WorkspaceSandbox.js.map +1 -0
- package/dist/esm/index.d.ts +157 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +157 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/ActionPersistence.d.ts +276 -0
- package/dist/esm/internal/ActionPersistence.d.ts.map +1 -0
- package/dist/esm/internal/ActionPersistence.js +2306 -0
- package/dist/esm/internal/ActionPersistence.js.map +1 -0
- package/dist/esm/internal/ArtifactRoots.d.ts +38 -0
- package/dist/esm/internal/ArtifactRoots.d.ts.map +1 -0
- package/dist/esm/internal/ArtifactRoots.js +76 -0
- package/dist/esm/internal/ArtifactRoots.js.map +1 -0
- package/dist/esm/internal/AttemptAdmission.d.ts +53 -0
- package/dist/esm/internal/AttemptAdmission.d.ts.map +1 -0
- package/dist/esm/internal/AttemptAdmission.js +52 -0
- package/dist/esm/internal/AttemptAdmission.js.map +1 -0
- package/dist/esm/internal/AttemptLifecycle.d.ts +245 -0
- package/dist/esm/internal/AttemptLifecycle.d.ts.map +1 -0
- package/dist/esm/internal/AttemptLifecycle.js +104 -0
- package/dist/esm/internal/AttemptLifecycle.js.map +1 -0
- package/dist/esm/internal/AttemptProbe.d.ts +53 -0
- package/dist/esm/internal/AttemptProbe.d.ts.map +1 -0
- package/dist/esm/internal/AttemptProbe.js +83 -0
- package/dist/esm/internal/AttemptProbe.js.map +1 -0
- package/dist/esm/internal/CacheAdmission.d.ts +79 -0
- package/dist/esm/internal/CacheAdmission.d.ts.map +1 -0
- package/dist/esm/internal/CacheAdmission.js +72 -0
- package/dist/esm/internal/CacheAdmission.js.map +1 -0
- package/dist/esm/internal/CacheAgeHistory.d.ts +27 -0
- package/dist/esm/internal/CacheAgeHistory.d.ts.map +1 -0
- package/dist/esm/internal/CacheAgeHistory.js +49 -0
- package/dist/esm/internal/CacheAgeHistory.js.map +1 -0
- package/dist/esm/internal/CacheAgeVerdicts.d.ts +15 -0
- package/dist/esm/internal/CacheAgeVerdicts.d.ts.map +1 -0
- package/dist/esm/internal/CacheAgeVerdicts.js +54 -0
- package/dist/esm/internal/CacheAgeVerdicts.js.map +1 -0
- package/dist/esm/internal/CacheOutputPolicy.d.ts +24 -0
- package/dist/esm/internal/CacheOutputPolicy.d.ts.map +1 -0
- package/dist/esm/internal/CacheOutputPolicy.js +73 -0
- package/dist/esm/internal/CacheOutputPolicy.js.map +1 -0
- package/dist/esm/internal/CachePublication.d.ts +97 -0
- package/dist/esm/internal/CachePublication.d.ts.map +1 -0
- package/dist/esm/internal/CachePublication.js +116 -0
- package/dist/esm/internal/CachePublication.js.map +1 -0
- package/dist/esm/internal/CallFacts.d.ts +15 -0
- package/dist/esm/internal/CallFacts.d.ts.map +1 -0
- package/dist/esm/internal/CallFacts.js +83 -0
- package/dist/esm/internal/CallFacts.js.map +1 -0
- package/dist/esm/internal/CopiedRecord.d.ts +61 -0
- package/dist/esm/internal/CopiedRecord.d.ts.map +1 -0
- package/dist/esm/internal/CopiedRecord.js +165 -0
- package/dist/esm/internal/CopiedRecord.js.map +1 -0
- package/dist/esm/internal/DeferredPersistence.d.ts +108 -0
- package/dist/esm/internal/DeferredPersistence.d.ts.map +1 -0
- package/dist/esm/internal/DeferredPersistence.js +240 -0
- package/dist/esm/internal/DeferredPersistence.js.map +1 -0
- package/dist/esm/internal/EffectRecords.d.ts +92 -0
- package/dist/esm/internal/EffectRecords.d.ts.map +1 -0
- package/dist/esm/internal/EffectRecords.js +94 -0
- package/dist/esm/internal/EffectRecords.js.map +1 -0
- package/dist/esm/internal/EngineJj.d.ts +30 -0
- package/dist/esm/internal/EngineJj.d.ts.map +1 -0
- package/dist/esm/internal/EngineJj.js +29 -0
- package/dist/esm/internal/EngineJj.js.map +1 -0
- package/dist/esm/internal/EngineStateSchema.d.ts +68 -0
- package/dist/esm/internal/EngineStateSchema.d.ts.map +1 -0
- package/dist/esm/internal/EngineStateSchema.js +53 -0
- package/dist/esm/internal/EngineStateSchema.js.map +1 -0
- package/dist/esm/internal/ExecutionSnapshotRead.d.ts +162 -0
- package/dist/esm/internal/ExecutionSnapshotRead.d.ts.map +1 -0
- package/dist/esm/internal/ExecutionSnapshotRead.js +218 -0
- package/dist/esm/internal/ExecutionSnapshotRead.js.map +1 -0
- package/dist/esm/internal/ExecutionSnapshotRelations.d.ts +39 -0
- package/dist/esm/internal/ExecutionSnapshotRelations.d.ts.map +1 -0
- package/dist/esm/internal/ExecutionSnapshotRelations.js +81 -0
- package/dist/esm/internal/ExecutionSnapshotRelations.js.map +1 -0
- package/dist/esm/internal/ExitEncoding.d.ts +180 -0
- package/dist/esm/internal/ExitEncoding.d.ts.map +1 -0
- package/dist/esm/internal/ExitEncoding.js +361 -0
- package/dist/esm/internal/ExitEncoding.js.map +1 -0
- package/dist/esm/internal/FileBoundarySnapshot.d.ts +14 -0
- package/dist/esm/internal/FileBoundarySnapshot.d.ts.map +1 -0
- package/dist/esm/internal/FileBoundarySnapshot.js +29 -0
- package/dist/esm/internal/FileBoundarySnapshot.js.map +1 -0
- package/dist/esm/internal/FileEnumeration.d.ts +127 -0
- package/dist/esm/internal/FileEnumeration.d.ts.map +1 -0
- package/dist/esm/internal/FileEnumeration.js +236 -0
- package/dist/esm/internal/FileEnumeration.js.map +1 -0
- package/dist/esm/internal/HostReflection.d.ts +80 -0
- package/dist/esm/internal/HostReflection.d.ts.map +1 -0
- package/dist/esm/internal/HostReflection.js +98 -0
- package/dist/esm/internal/HostReflection.js.map +1 -0
- package/dist/esm/internal/JournalRecords.d.ts +325 -0
- package/dist/esm/internal/JournalRecords.d.ts.map +1 -0
- package/dist/esm/internal/JournalRecords.js +306 -0
- package/dist/esm/internal/JournalRecords.js.map +1 -0
- package/dist/esm/internal/NodeJournal.d.ts +157 -0
- package/dist/esm/internal/NodeJournal.d.ts.map +1 -0
- package/dist/esm/internal/NodeJournal.js +298 -0
- package/dist/esm/internal/NodeJournal.js.map +1 -0
- package/dist/esm/internal/Ordering.d.ts +14 -0
- package/dist/esm/internal/Ordering.d.ts.map +1 -0
- package/dist/esm/internal/Ordering.js +14 -0
- package/dist/esm/internal/Ordering.js.map +1 -0
- package/dist/esm/internal/PlanInputs.d.ts +14 -0
- package/dist/esm/internal/PlanInputs.d.ts.map +1 -0
- package/dist/esm/internal/PlanInputs.js +57 -0
- package/dist/esm/internal/PlanInputs.js.map +1 -0
- package/dist/esm/internal/PlanMerges.d.ts +178 -0
- package/dist/esm/internal/PlanMerges.d.ts.map +1 -0
- package/dist/esm/internal/PlanMerges.js +113 -0
- package/dist/esm/internal/PlanMerges.js.map +1 -0
- package/dist/esm/internal/ProvenanceSlot.d.ts +30 -0
- package/dist/esm/internal/ProvenanceSlot.d.ts.map +1 -0
- package/dist/esm/internal/ProvenanceSlot.js +39 -0
- package/dist/esm/internal/ProvenanceSlot.js.map +1 -0
- package/dist/esm/internal/ResultEnvelope.d.ts +88 -0
- package/dist/esm/internal/ResultEnvelope.d.ts.map +1 -0
- package/dist/esm/internal/ResultEnvelope.js +83 -0
- package/dist/esm/internal/ResultEnvelope.js.map +1 -0
- package/dist/esm/internal/RetentionOps.d.ts +414 -0
- package/dist/esm/internal/RetentionOps.d.ts.map +1 -0
- package/dist/esm/internal/RetentionOps.js +576 -0
- package/dist/esm/internal/RetentionOps.js.map +1 -0
- package/dist/esm/internal/RunCatalogOps.d.ts +118 -0
- package/dist/esm/internal/RunCatalogOps.d.ts.map +1 -0
- package/dist/esm/internal/RunCatalogOps.js +120 -0
- package/dist/esm/internal/RunCatalogOps.js.map +1 -0
- package/dist/esm/internal/RunCoordinator.d.ts +78 -0
- package/dist/esm/internal/RunCoordinator.d.ts.map +1 -0
- package/dist/esm/internal/RunCoordinator.js +115 -0
- package/dist/esm/internal/RunCoordinator.js.map +1 -0
- package/dist/esm/internal/RunDriver.d.ts +192 -0
- package/dist/esm/internal/RunDriver.d.ts.map +1 -0
- package/dist/esm/internal/RunDriver.js +2334 -0
- package/dist/esm/internal/RunDriver.js.map +1 -0
- package/dist/esm/internal/RunLifecycle.d.ts +22 -0
- package/dist/esm/internal/RunLifecycle.d.ts.map +1 -0
- package/dist/esm/internal/RunLifecycle.js +49 -0
- package/dist/esm/internal/RunLifecycle.js.map +1 -0
- package/dist/esm/internal/RunListing.d.ts +78 -0
- package/dist/esm/internal/RunListing.d.ts.map +1 -0
- package/dist/esm/internal/RunListing.js +146 -0
- package/dist/esm/internal/RunListing.js.map +1 -0
- package/dist/esm/internal/RunListingError.d.ts +35 -0
- package/dist/esm/internal/RunListingError.d.ts.map +1 -0
- package/dist/esm/internal/RunListingError.js +27 -0
- package/dist/esm/internal/RunListingError.js.map +1 -0
- package/dist/esm/internal/RuntimeGraph.d.ts +73 -0
- package/dist/esm/internal/RuntimeGraph.d.ts.map +1 -0
- package/dist/esm/internal/RuntimeGraph.js +182 -0
- package/dist/esm/internal/RuntimeGraph.js.map +1 -0
- package/dist/esm/internal/SandboxedExecution.d.ts +80 -0
- package/dist/esm/internal/SandboxedExecution.d.ts.map +1 -0
- package/dist/esm/internal/SandboxedExecution.js +107 -0
- package/dist/esm/internal/SandboxedExecution.js.map +1 -0
- package/dist/esm/internal/StateTransaction.d.ts +44 -0
- package/dist/esm/internal/StateTransaction.d.ts.map +1 -0
- package/dist/esm/internal/StateTransaction.js +54 -0
- package/dist/esm/internal/StateTransaction.js.map +1 -0
- package/dist/esm/internal/StepFacts.d.ts +14 -0
- package/dist/esm/internal/StepFacts.d.ts.map +1 -0
- package/dist/esm/internal/StepFacts.js +35 -0
- package/dist/esm/internal/StepFacts.js.map +1 -0
- package/dist/esm/internal/TypedEvents.d.ts +14 -0
- package/dist/esm/internal/TypedEvents.d.ts.map +1 -0
- package/dist/esm/internal/TypedEvents.js +14 -0
- package/dist/esm/internal/TypedEvents.js.map +1 -0
- package/dist/esm/migrations/0001_initial.d.ts +17 -0
- package/dist/esm/migrations/0001_initial.d.ts.map +1 -0
- package/dist/esm/migrations/0001_initial.js +41 -0
- package/dist/esm/migrations/0001_initial.js.map +1 -0
- package/dist/esm/migrations/0002_selection_store.d.ts +15 -0
- package/dist/esm/migrations/0002_selection_store.d.ts.map +1 -0
- package/dist/esm/migrations/0002_selection_store.js +34 -0
- package/dist/esm/migrations/0002_selection_store.js.map +1 -0
- package/dist/esm/migrations/0003_plan_inputs.d.ts +13 -0
- package/dist/esm/migrations/0003_plan_inputs.d.ts.map +1 -0
- package/dist/esm/migrations/0003_plan_inputs.js +70 -0
- package/dist/esm/migrations/0003_plan_inputs.js.map +1 -0
- package/dist/esm/migrations/0004_plan_environment.d.ts +14 -0
- package/dist/esm/migrations/0004_plan_environment.d.ts.map +1 -0
- package/dist/esm/migrations/0004_plan_environment.js +33 -0
- package/dist/esm/migrations/0004_plan_environment.js.map +1 -0
- package/dist/esm/migrations/0005_plan_merges.d.ts +14 -0
- package/dist/esm/migrations/0005_plan_merges.d.ts.map +1 -0
- package/dist/esm/migrations/0005_plan_merges.js +59 -0
- package/dist/esm/migrations/0005_plan_merges.js.map +1 -0
- package/dist/esm/migrations/0006_execution_listing.d.ts +15 -0
- package/dist/esm/migrations/0006_execution_listing.d.ts.map +1 -0
- package/dist/esm/migrations/0006_execution_listing.js +81 -0
- package/dist/esm/migrations/0006_execution_listing.js.map +1 -0
- package/dist/esm/migrations/0007_run_parent_sequence.d.ts +15 -0
- package/dist/esm/migrations/0007_run_parent_sequence.d.ts.map +1 -0
- package/dist/esm/migrations/0007_run_parent_sequence.js +18 -0
- package/dist/esm/migrations/0007_run_parent_sequence.js.map +1 -0
- package/dist/esm/migrations/0008_deferred_consumption.d.ts +16 -0
- package/dist/esm/migrations/0008_deferred_consumption.d.ts.map +1 -0
- package/dist/esm/migrations/0008_deferred_consumption.js +24 -0
- package/dist/esm/migrations/0008_deferred_consumption.js.map +1 -0
- package/dist/esm/migrations/0009_deferred_clock_facts.d.ts +24 -0
- package/dist/esm/migrations/0009_deferred_clock_facts.d.ts.map +1 -0
- package/dist/esm/migrations/0009_deferred_clock_facts.js +127 -0
- package/dist/esm/migrations/0009_deferred_clock_facts.js.map +1 -0
- package/dist/esm/migrations/0010_pending_cancellation.d.ts +15 -0
- package/dist/esm/migrations/0010_pending_cancellation.d.ts.map +1 -0
- package/dist/esm/migrations/0010_pending_cancellation.js +19 -0
- package/dist/esm/migrations/0010_pending_cancellation.js.map +1 -0
- package/dist/esm/test/TestStores.d.ts +89 -0
- package/dist/esm/test/TestStores.d.ts.map +1 -0
- package/dist/esm/test/TestStores.js +103 -0
- package/dist/esm/test/TestStores.js.map +1 -0
- package/docs/README.md +113 -0
- package/docs/api.md +1494 -0
- package/docs/concepts/attempts-and-replay.md +149 -0
- package/docs/concepts/cache-admission.md +265 -0
- package/docs/concepts/call-facts.md +86 -0
- package/docs/concepts/durable-waits.md +175 -0
- package/docs/concepts/execution-facts.md +90 -0
- package/docs/concepts/ownership-and-fencing.md +128 -0
- package/docs/concepts/step-boundaries.md +148 -0
- package/docs/concepts/workspace-transactions.md +199 -0
- package/docs/event-types.md +14 -0
- package/docs/guides/back-up-and-restore.md +164 -0
- package/docs/guides/collect-unreferenced-artifacts.md +128 -0
- package/docs/guides/compose-a-durable-engine.md +146 -0
- package/docs/guides/coordinate-two-processes.md +120 -0
- package/docs/guides/defer-work-with-selection.md +171 -0
- package/docs/guides/delete-old-run-history.md +154 -0
- package/docs/guides/drive-a-plan.md +314 -0
- package/docs/guides/observe-engine-metrics.md +98 -0
- package/docs/guides/observe-executions.md +187 -0
- package/docs/guides/reclaim-runs-from-a-dead-host.md +133 -0
- package/docs/guides/share-a-cache-across-machines.md +134 -0
- package/docs/guides/testing.md +123 -0
- package/docs/installation.md +102 -0
- package/docs/quickstart.md +215 -0
- package/docs/troubleshooting.md +347 -0
- package/package.json +438 -3
- package/src/ArtifactGc.ts +408 -0
- package/src/ArtifactSync.ts +278 -0
- package/src/CacheSync.ts +131 -0
- package/src/DeferredClockFold.ts +586 -0
- package/src/DisasterRecovery.ts +888 -0
- package/src/DurableEngineState.ts +2656 -0
- package/src/EngineStore.ts +656 -0
- package/src/EngineStoreMetrics.ts +331 -0
- package/src/Errors.ts +28 -0
- package/src/EventTypes.ts +27 -0
- package/src/ExecutionFacts.ts +125 -0
- package/src/ExecutionSnapshot.ts +186 -0
- package/src/Inconsistency.ts +253 -0
- package/src/Migrations.ts +95 -0
- package/src/OwnerIdentity.ts +125 -0
- package/src/PlanInputStore.ts +292 -0
- package/src/PlanMergeStore.ts +330 -0
- package/src/PlanScheduler.ts +1806 -0
- package/src/Reconciliation.ts +224 -0
- package/src/ReplayOnly.ts +95 -0
- package/src/Retention.ts +214 -0
- package/src/RunCatalogRead.ts +27 -0
- package/src/RunChangeFeed.ts +125 -0
- package/src/RunState.ts +137 -0
- package/src/Selection.ts +683 -0
- package/src/SelectionStore.ts +353 -0
- package/src/StepBoundary.ts +1165 -0
- package/src/StepCacheFold.ts +244 -0
- package/src/StepSandbox.ts +110 -0
- package/src/WakeBus.ts +167 -0
- package/src/WorkspaceSandbox.ts +1604 -0
- package/src/index.ts +185 -0
- package/src/internal/ActionPersistence.ts +2687 -0
- package/src/internal/ArtifactRoots.ts +92 -0
- package/src/internal/AttemptAdmission.ts +76 -0
- package/src/internal/AttemptLifecycle.ts +163 -0
- package/src/internal/AttemptProbe.ts +90 -0
- package/src/internal/CacheAdmission.ts +133 -0
- package/src/internal/CacheAgeHistory.ts +58 -0
- package/src/internal/CacheAgeVerdicts.ts +61 -0
- package/src/internal/CacheOutputPolicy.ts +82 -0
- package/src/internal/CachePublication.ts +153 -0
- package/src/internal/CallFacts.ts +87 -0
- package/src/internal/CopiedRecord.ts +201 -0
- package/src/internal/DeferredPersistence.ts +459 -0
- package/src/internal/EffectRecords.ts +136 -0
- package/src/internal/EngineJj.ts +30 -0
- package/src/internal/EngineStateSchema.ts +92 -0
- package/src/internal/ExecutionSnapshotRead.ts +300 -0
- package/src/internal/ExecutionSnapshotRelations.ts +121 -0
- package/src/internal/ExitEncoding.ts +453 -0
- package/src/internal/FileBoundarySnapshot.ts +39 -0
- package/src/internal/FileEnumeration.ts +334 -0
- package/src/internal/HostReflection.ts +128 -0
- package/src/internal/JournalRecords.ts +396 -0
- package/src/internal/NodeJournal.ts +340 -0
- package/src/internal/Ordering.ts +14 -0
- package/src/internal/PlanInputs.ts +62 -0
- package/src/internal/PlanMerges.ts +123 -0
- package/src/internal/ProvenanceSlot.ts +52 -0
- package/src/internal/ResultEnvelope.ts +118 -0
- package/src/internal/RetentionOps.ts +865 -0
- package/src/internal/RunCatalogOps.ts +174 -0
- package/src/internal/RunCoordinator.ts +215 -0
- package/src/internal/RunDriver.ts +3154 -0
- package/src/internal/RunLifecycle.ts +53 -0
- package/src/internal/RunListing.ts +210 -0
- package/src/internal/RunListingError.ts +37 -0
- package/src/internal/RuntimeGraph.ts +253 -0
- package/src/internal/SandboxedExecution.ts +165 -0
- package/src/internal/StateTransaction.ts +71 -0
- package/src/internal/StepFacts.ts +36 -0
- package/src/internal/TypedEvents.ts +29 -0
- package/src/migrations/0001_initial.ts +51 -0
- package/src/migrations/0002_selection_store.ts +38 -0
- package/src/migrations/0003_plan_inputs.ts +75 -0
- package/src/migrations/0004_plan_environment.ts +34 -0
- package/src/migrations/0005_plan_merges.ts +60 -0
- package/src/migrations/0006_execution_listing.ts +86 -0
- package/src/migrations/0007_run_parent_sequence.ts +19 -0
- package/src/migrations/0008_deferred_consumption.ts +27 -0
- package/src/migrations/0009_deferred_clock_facts.ts +163 -0
- package/src/migrations/0010_pending_cancellation.ts +20 -0
- package/src/test/TestStores.ts +145 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The reconciliation seam: what happens when the world disagrees with the
|
|
3
|
+
* declaration.
|
|
4
|
+
*
|
|
5
|
+
* `docs/guides/drive-a-plan.md` ("Install a reconciler") describes expected sets as the soft
|
|
6
|
+
* mode: going outside them is allowed, journaled, and "triggers a
|
|
7
|
+
* **reconciliation flow** — pluggable, a flow like everything else". The
|
|
8
|
+
* deviation events have been emitted since the isolated-execution lane landed
|
|
9
|
+
* (`internal/ActionPersistence.ts`, both `expectedSetDeviation` sites) and
|
|
10
|
+
* had **no consumer at all**. This is the consumer, and
|
|
11
|
+
* `PlanScheduler` is what feeds it.
|
|
12
|
+
*
|
|
13
|
+
* Pluggability is dependency injection at the owning seam, per the repository's
|
|
14
|
+
* extension doctrine — there is no hook kernel. {@link layerDefault} installs a
|
|
15
|
+
* deterministic verdict function; a model-backed reconciler is a different
|
|
16
|
+
* `Layer` and lives in the agent packages. This package has no model
|
|
17
|
+
* dependency and must not grow one.
|
|
18
|
+
*
|
|
19
|
+
* The three verdicts are exactly the vault's: **fail** the step where the
|
|
20
|
+
* deviation is genuinely wrong, **reorder** — re-plan with the discovered
|
|
21
|
+
* dependency made explicit — and **factor out** a shared step, where content
|
|
22
|
+
* addressing does the heavy lifting because identical extracted steps collapse
|
|
23
|
+
* to one key automatically.
|
|
24
|
+
*
|
|
25
|
+
* @since 0.1.0
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
import * as Context from "effect/Context"
|
|
29
|
+
import * as Effect from "effect/Effect"
|
|
30
|
+
import * as Layer from "effect/Layer"
|
|
31
|
+
import * as Schema from "effect/Schema"
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* A journaled `flows.engine.expected-set-deviation`, resolved against the plan
|
|
35
|
+
* the scheduler is driving.
|
|
36
|
+
*
|
|
37
|
+
* @since 0.1.0
|
|
38
|
+
* @category schemas
|
|
39
|
+
*/
|
|
40
|
+
export const Deviation = Schema.Struct({
|
|
41
|
+
nodeId: Schema.NonEmptyString,
|
|
42
|
+
keyDigest: Schema.NonEmptyString,
|
|
43
|
+
attempt: Schema.Int,
|
|
44
|
+
/** Paths the execution touched that its declaration did not predict. */
|
|
45
|
+
paths: Schema.Array(Schema.String),
|
|
46
|
+
diffIdentity: Schema.String,
|
|
47
|
+
/**
|
|
48
|
+
* For each undeclared path, the OTHER plan node that declares it as a write
|
|
49
|
+
* — the discovered dependency, resolved by the scheduler because only it
|
|
50
|
+
* holds the plan.
|
|
51
|
+
*/
|
|
52
|
+
declaredBy: Schema.Record(Schema.String, Schema.NonEmptyString),
|
|
53
|
+
/** Other nodes in this run whose deviation named exactly the same paths. */
|
|
54
|
+
alsoDeviatedBy: Schema.Array(Schema.NonEmptyString)
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The value form of {@link Deviation}.
|
|
59
|
+
*
|
|
60
|
+
* @since 0.1.0
|
|
61
|
+
* @category models
|
|
62
|
+
*/
|
|
63
|
+
export type Deviation = typeof Deviation.Type
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* A `WorkspaceSandbox.MaterializationConflict` the runtime strategy could not
|
|
67
|
+
* absorb: the delay/rebase budget is spent, or the merge itself conflicted.
|
|
68
|
+
*
|
|
69
|
+
* @since 0.1.0
|
|
70
|
+
* @category schemas
|
|
71
|
+
*/
|
|
72
|
+
export const Conflict = Schema.Struct({
|
|
73
|
+
nodeId: Schema.NonEmptyString,
|
|
74
|
+
keyDigest: Schema.NonEmptyString,
|
|
75
|
+
attempt: Schema.Int,
|
|
76
|
+
/** How many times the scheduler rebased before giving up. */
|
|
77
|
+
rebases: Schema.Int,
|
|
78
|
+
strategy: Schema.Literals(["delay-rebase", "stop-merge"]),
|
|
79
|
+
/** The plan nodes this one was annotated as conflicting with. */
|
|
80
|
+
conflictsWith: Schema.Array(Schema.NonEmptyString)
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* The value form of {@link Conflict}.
|
|
85
|
+
*
|
|
86
|
+
* @since 0.1.0
|
|
87
|
+
* @category models
|
|
88
|
+
*/
|
|
89
|
+
export type Conflict = typeof Conflict.Type
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* What reconciliation decided.
|
|
93
|
+
*
|
|
94
|
+
* @since 0.1.0
|
|
95
|
+
* @category schemas
|
|
96
|
+
*/
|
|
97
|
+
export const Verdict = Schema.Union([
|
|
98
|
+
Schema.TaggedStruct("Fail", { reason: Schema.String }),
|
|
99
|
+
Schema.TaggedStruct("Reorder", { dependsOn: Schema.Array(Schema.NonEmptyString), reason: Schema.String }),
|
|
100
|
+
Schema.TaggedStruct("FactorOut", { paths: Schema.Array(Schema.String), reason: Schema.String })
|
|
101
|
+
])
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* The value form of {@link Verdict}.
|
|
105
|
+
*
|
|
106
|
+
* @since 0.1.0
|
|
107
|
+
* @category models
|
|
108
|
+
*/
|
|
109
|
+
export type Verdict = typeof Verdict.Type
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* The pluggable reconciler.
|
|
113
|
+
*
|
|
114
|
+
* @since 0.1.0
|
|
115
|
+
* @category models
|
|
116
|
+
*/
|
|
117
|
+
export interface Service {
|
|
118
|
+
readonly onDeviation: (deviation: Deviation) => Effect.Effect<Verdict>
|
|
119
|
+
readonly onConflict: (conflict: Conflict) => Effect.Effect<Verdict>
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Service tag for the reconciliation seam.
|
|
124
|
+
*
|
|
125
|
+
* @since 0.1.0
|
|
126
|
+
* @category services
|
|
127
|
+
*/
|
|
128
|
+
export class Reconciliation extends Context.Service<Reconciliation, Service>()("@smthrs/engine-store/Reconciliation") {}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Names a {@link Service} implementation as a reconciler.
|
|
132
|
+
*
|
|
133
|
+
* It is the identity function: the value is checked against the interface at
|
|
134
|
+
* its definition site, which is where a wrong-shaped reconciler should be
|
|
135
|
+
* reported rather than at whichever layer eventually provides it.
|
|
136
|
+
*
|
|
137
|
+
* @since 0.1.0
|
|
138
|
+
* @category constructors
|
|
139
|
+
*/
|
|
140
|
+
export const make = (service: Service): Service => service
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Provides a {@link Service} as the {@link Reconciliation} seam, replacing the
|
|
144
|
+
* deterministic default.
|
|
145
|
+
*
|
|
146
|
+
* @since 0.1.0
|
|
147
|
+
* @category layers
|
|
148
|
+
*/
|
|
149
|
+
export const layer = (service: Service): Layer.Layer<Reconciliation> => Layer.succeed(Reconciliation, service)
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* The deterministic default, in the vault's order of preference.
|
|
153
|
+
*
|
|
154
|
+
* 1. **Reorder** when every undeclared path is a path some *other* plan node
|
|
155
|
+
* declares it writes. That is a real dependency the declaration missed, and
|
|
156
|
+
* making it explicit is strictly better than failing.
|
|
157
|
+
* 2. **Factor out** when another node in the same run deviated on exactly the
|
|
158
|
+
* same paths — two parallel steps that both ran `npm install`. No graph
|
|
159
|
+
* surgery follows: content addressing collapses two identical extracted
|
|
160
|
+
* steps to one key by itself, so the verdict is a record and a hint.
|
|
161
|
+
* 3. **Fail** otherwise. The default is deliberately conservative — a
|
|
162
|
+
* deviation nobody can explain is the case the vault says is "genuinely
|
|
163
|
+
* wrong", and guessing is what the model-backed reconciler is for.
|
|
164
|
+
*
|
|
165
|
+
* A conflict the runtime strategy could not absorb always fails here: choosing
|
|
166
|
+
* a winner between two landings is a semantic judgement this default does not
|
|
167
|
+
* have the material to make.
|
|
168
|
+
*
|
|
169
|
+
* @since 0.1.0
|
|
170
|
+
* @category constructors
|
|
171
|
+
*/
|
|
172
|
+
export const makeDefault = (): Service => ({
|
|
173
|
+
onDeviation: Effect.fn("Reconciliation.onDeviation")((deviation) => {
|
|
174
|
+
const paths = [...new Set(deviation.paths)]
|
|
175
|
+
// Own keys only: a path named `toString` must not resolve to Object.prototype.
|
|
176
|
+
const ownerOf = (path: string): string | undefined =>
|
|
177
|
+
Object.hasOwn(deviation.declaredBy, path) ? deviation.declaredBy[path] : undefined
|
|
178
|
+
const discovered = [
|
|
179
|
+
...new Set(
|
|
180
|
+
paths
|
|
181
|
+
.map(ownerOf)
|
|
182
|
+
.filter((owner): owner is string => owner !== undefined && owner !== deviation.nodeId)
|
|
183
|
+
)
|
|
184
|
+
]
|
|
185
|
+
if (
|
|
186
|
+
discovered.length > 0 &&
|
|
187
|
+
paths.every((path) => {
|
|
188
|
+
const owner = ownerOf(path)
|
|
189
|
+
return owner !== undefined && owner !== deviation.nodeId
|
|
190
|
+
})
|
|
191
|
+
) {
|
|
192
|
+
return Effect.succeed<Verdict>({
|
|
193
|
+
_tag: "Reorder",
|
|
194
|
+
dependsOn: discovered,
|
|
195
|
+
reason: `${deviation.nodeId} wrote paths declared by ${discovered.join(", ")}`
|
|
196
|
+
})
|
|
197
|
+
}
|
|
198
|
+
if (deviation.alsoDeviatedBy.length > 0) {
|
|
199
|
+
return Effect.succeed<Verdict>({
|
|
200
|
+
_tag: "FactorOut",
|
|
201
|
+
paths: deviation.paths,
|
|
202
|
+
reason: `${deviation.nodeId} and ${deviation.alsoDeviatedBy.join(", ")} produced the same undeclared paths`
|
|
203
|
+
})
|
|
204
|
+
}
|
|
205
|
+
return Effect.succeed<Verdict>({
|
|
206
|
+
_tag: "Fail",
|
|
207
|
+
reason: `${deviation.nodeId} wrote ${deviation.paths.join(", ")}, which no declaration explains`
|
|
208
|
+
})
|
|
209
|
+
}),
|
|
210
|
+
onConflict: Effect.fn("Reconciliation.onConflict")((conflict) =>
|
|
211
|
+
Effect.succeed<Verdict>({
|
|
212
|
+
_tag: "Fail",
|
|
213
|
+
reason: `${conflict.nodeId} could not land after ${conflict.rebases} rebases under ${conflict.strategy}`
|
|
214
|
+
})
|
|
215
|
+
)
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Installs the deterministic default reconciler.
|
|
220
|
+
*
|
|
221
|
+
* @since 0.1.0
|
|
222
|
+
* @category layers
|
|
223
|
+
*/
|
|
224
|
+
export const layerDefault: Layer.Layer<Reconciliation> = Layer.sync(Reconciliation, makeDefault)
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An engine that replays recorded work and executes none.
|
|
3
|
+
*
|
|
4
|
+
* `smthrs runs verify` asks what a resume under the current code would do
|
|
5
|
+
* before anything runs: which recorded steps it would serve from their
|
|
6
|
+
* durable records, and which step it would execute again because its key no
|
|
7
|
+
* longer matches one. The engine is the only thing that can answer, because a
|
|
8
|
+
* step key is derived at dispatch from the running flow's own declaration,
|
|
9
|
+
* ordinal and scope. This service turns a durable engine into that question:
|
|
10
|
+
* a dispatch served from a durable record reports `replayed`, and the first
|
|
11
|
+
* dispatch that would run an action body dies with {@link WouldExecute} before
|
|
12
|
+
* any attempt row, snapshot, boundary or body. It reports `resumes` when it
|
|
13
|
+
* would re-enter a recorded attempt that never finished (a step parked inside
|
|
14
|
+
* its body), and `would-execute` when no record matches its key at all.
|
|
15
|
+
*
|
|
16
|
+
* The death is a defect on purpose. A typed failure would enter the action's
|
|
17
|
+
* retry policy, and the default policy never gives up; a defect is never
|
|
18
|
+
* retried, so the run settles with the verdict instead of spinning on it.
|
|
19
|
+
*
|
|
20
|
+
* Run it against a copy of the store. A replay still converges the journal
|
|
21
|
+
* rows a resume would write, and the run settles `failed` on the copy.
|
|
22
|
+
*
|
|
23
|
+
* @since 1.0.0
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import * as Context from "effect/Context"
|
|
27
|
+
import type * as Effect from "effect/Effect"
|
|
28
|
+
import * as Layer from "effect/Layer"
|
|
29
|
+
import * as Schema from "effect/Schema"
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* One dispatch a replay-only engine saw.
|
|
33
|
+
*
|
|
34
|
+
* `stepKeyDigest` is the identity `flows_attempts` rows are keyed on, so a
|
|
35
|
+
* reader joins it to the recorded attempts directly. `action` is the declared
|
|
36
|
+
* action name. `outcome` is `replayed` for a dispatch served from a durable
|
|
37
|
+
* record (a recorded failure included), `resumes` for one that would re-enter
|
|
38
|
+
* a recorded attempt that never finished, and `would-execute` for one no
|
|
39
|
+
* record matches.
|
|
40
|
+
*
|
|
41
|
+
* @since 1.0.0
|
|
42
|
+
* @category models
|
|
43
|
+
*/
|
|
44
|
+
export interface Dispatch {
|
|
45
|
+
readonly runId: string
|
|
46
|
+
readonly stepKeyDigest: string
|
|
47
|
+
readonly attempt: number
|
|
48
|
+
readonly action: string
|
|
49
|
+
readonly tier: "sealed" | "compensable" | "irreversible"
|
|
50
|
+
readonly outcome: "replayed" | "resumes" | "would-execute"
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Receives every dispatch a replay-only engine settles, in settlement order.
|
|
55
|
+
*
|
|
56
|
+
* @since 1.0.0
|
|
57
|
+
* @category models
|
|
58
|
+
*/
|
|
59
|
+
export interface Service {
|
|
60
|
+
readonly observe: (dispatch: Dispatch) => Effect.Effect<void>
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Service tag. An engine composed with it in context executes no action body.
|
|
65
|
+
*
|
|
66
|
+
* @since 1.0.0
|
|
67
|
+
* @category services
|
|
68
|
+
*/
|
|
69
|
+
export class ReplayOnly extends Context.Service<ReplayOnly, Service>()("@smthrs/engine-store/ReplayOnly") {}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The defect a replay-only dispatch dies with instead of executing.
|
|
73
|
+
*
|
|
74
|
+
* @since 1.0.0
|
|
75
|
+
* @category errors
|
|
76
|
+
*/
|
|
77
|
+
export class WouldExecute extends Schema.TaggedError<WouldExecute>()("@smthrs/engine-store/WouldExecute", {
|
|
78
|
+
runId: Schema.String,
|
|
79
|
+
stepKeyDigest: Schema.String,
|
|
80
|
+
attempt: Schema.Number,
|
|
81
|
+
action: Schema.String
|
|
82
|
+
}) {
|
|
83
|
+
override get message(): string {
|
|
84
|
+
return `Action ${this.action} (step ${this.stepKeyDigest}, attempt ${this.attempt}) would execute`
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Provides a replay-only engine context that reports to `observe`.
|
|
90
|
+
*
|
|
91
|
+
* @since 1.0.0
|
|
92
|
+
* @category layers
|
|
93
|
+
*/
|
|
94
|
+
export const layer = (observe: Service["observe"]): Layer.Layer<ReplayOnly> =>
|
|
95
|
+
Layer.succeed(ReplayOnly, ReplayOnly.of({ observe }))
|
package/src/Retention.ts
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deleting run history that has outlived its usefulness.
|
|
3
|
+
*
|
|
4
|
+
* Nothing in the durable stores forgets on its own: a finished run keeps its
|
|
5
|
+
* row, every attempt, every journal event, and every archived frame forever.
|
|
6
|
+
* That is the right default — a run's history is the only account of what an
|
|
7
|
+
* agent did to a repository — and it is why `smithers gc` exists rather than a
|
|
8
|
+
* background sweeper. Retention is an operator decision, taken explicitly,
|
|
9
|
+
* with a dry run available before anything is deleted.
|
|
10
|
+
*
|
|
11
|
+
* This module is the public surface. The operation lives in
|
|
12
|
+
* `internal/RetentionOps.ts` beside the other modules that read this package's
|
|
13
|
+
* own tables, so `internal/` is never imported by a consumer — the same split
|
|
14
|
+
* `Errors.ts` uses. {@link retain} and {@link layer} are that operation: one
|
|
15
|
+
* bounded pass over the engine ladder, inside one `journal.transact`.
|
|
16
|
+
*
|
|
17
|
+
* {@link collect} is the host-facing pass `smithers gc` runs, and it is a
|
|
18
|
+
* facade over the same guard. A project keeps its history in two files — the
|
|
19
|
+
* control plane's database and the engine's — and a sweep of one without the
|
|
20
|
+
* other leaves half of a deleted run behind, so the pass takes the database as
|
|
21
|
+
* a service and runs once per file. Which runs it may delete is
|
|
22
|
+
* {@link RetentionOps.lineagePrelude}'s answer, not a second guard written
|
|
23
|
+
* here: a run stays whenever a live run stands above or below it, over BOTH
|
|
24
|
+
* relations that make one run the parent of another — the `flows_run_parents`
|
|
25
|
+
* edge a spawned child records, and the `parent_run_id` column a trampoline
|
|
26
|
+
* lineage is chained through.
|
|
27
|
+
*
|
|
28
|
+
* Only terminal runs are ever considered. A `pending`, `running`, or
|
|
29
|
+
* `suspended` row belongs to work that can still resume.
|
|
30
|
+
*
|
|
31
|
+
* @since 1.0.0
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
import * as Dialect from "@smthrs/database/Dialect"
|
|
35
|
+
import * as DurableWriter from "@smthrs/database/DurableWriter"
|
|
36
|
+
import * as Effect from "effect/Effect"
|
|
37
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient"
|
|
38
|
+
import type { SqlError } from "effect/unstable/sql/SqlError"
|
|
39
|
+
import * as RetentionOps from "./internal/RetentionOps.ts"
|
|
40
|
+
|
|
41
|
+
export {
|
|
42
|
+
defaultLimit,
|
|
43
|
+
layer,
|
|
44
|
+
make,
|
|
45
|
+
type RetainOptions,
|
|
46
|
+
type RetainReport,
|
|
47
|
+
Retention,
|
|
48
|
+
RetentionError,
|
|
49
|
+
RetentionErrorCode,
|
|
50
|
+
type RunScopedTable,
|
|
51
|
+
/**
|
|
52
|
+
* Every table a deleted run leaves rows in. One inventory serves this pass
|
|
53
|
+
* and {@link Service.retain}, so neither can leak what the other deletes.
|
|
54
|
+
*
|
|
55
|
+
* @category constants
|
|
56
|
+
* @since 1.0.0
|
|
57
|
+
*/
|
|
58
|
+
runScopedTables,
|
|
59
|
+
type Service,
|
|
60
|
+
terminalStatuses
|
|
61
|
+
} from "./internal/RetentionOps.ts"
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* What one retention pass would delete, or did.
|
|
65
|
+
*
|
|
66
|
+
* @category models
|
|
67
|
+
* @since 1.0.0
|
|
68
|
+
*/
|
|
69
|
+
export interface Report {
|
|
70
|
+
readonly database: string
|
|
71
|
+
/** The threshold, as an epoch millisecond value. */
|
|
72
|
+
readonly olderThanMs: number
|
|
73
|
+
readonly runs: ReadonlyArray<string>
|
|
74
|
+
/** Rows deleted per table; empty under a dry run. */
|
|
75
|
+
readonly deleted: Readonly<Record<string, number>>
|
|
76
|
+
readonly dryRun: boolean
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Arguments accepted by {@link collect}.
|
|
81
|
+
*
|
|
82
|
+
* @category models
|
|
83
|
+
* @since 1.0.0
|
|
84
|
+
*/
|
|
85
|
+
export interface Options {
|
|
86
|
+
/** Delete terminal runs that finished strictly before this epoch millisecond. */
|
|
87
|
+
readonly olderThanMs: number
|
|
88
|
+
readonly dryRun?: boolean | undefined
|
|
89
|
+
/** A label for the report; the host's database path. */
|
|
90
|
+
readonly database?: string | undefined
|
|
91
|
+
/** Largest number of runs considered by this pass. Defaults to 1,000. */
|
|
92
|
+
readonly limit?: number | undefined
|
|
93
|
+
/** Runs retained by a host's cross-store ancestry, in addition to local live roots. */
|
|
94
|
+
readonly pins?: ReadonlyArray<string> | undefined
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** Whether a table exists in the connected database. */
|
|
98
|
+
const hasTable = (table: string): Effect.Effect<boolean, SqlError, SqlClient.SqlClient> =>
|
|
99
|
+
Effect.gen(function*() {
|
|
100
|
+
const sql = yield* SqlClient.SqlClient
|
|
101
|
+
const rows = yield* Dialect.tables(sql).pipe(Effect.map((rows) => rows.filter((row) => row.name === table)))
|
|
102
|
+
return rows.length > 0
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* The runs one pass would delete, oldest first, each with the run it names as
|
|
107
|
+
* its parent.
|
|
108
|
+
*
|
|
109
|
+
* The same candidate query `retain` runs: children before parents, so a
|
|
110
|
+
* trampoline lineage longer than the bound still loses a run every pass, and
|
|
111
|
+
* a run is excluded whenever a live run stands above or below it. Downward,
|
|
112
|
+
* deleting a parent whose child is still running would break the
|
|
113
|
+
* `parent_run_id` foreign key and drop the live child's edges with the
|
|
114
|
+
* `flows_run_parents_gc` trigger. Upward, a parked parent still reads a
|
|
115
|
+
* settled child's result out of its run row through `agent/await`, and it can
|
|
116
|
+
* be parked for longer than the threshold before it ever asks.
|
|
117
|
+
*/
|
|
118
|
+
const eligibleCandidates = (
|
|
119
|
+
olderThanMs: number,
|
|
120
|
+
limit: number | undefined,
|
|
121
|
+
pins?: ReadonlyArray<string>
|
|
122
|
+
): Effect.Effect<ReadonlyArray<RetentionOps.Candidate>, SqlError, SqlClient.SqlClient> =>
|
|
123
|
+
Effect.gen(function*() {
|
|
124
|
+
const sql = yield* SqlClient.SqlClient
|
|
125
|
+
if (!(yield* hasTable("flows_runs"))) return []
|
|
126
|
+
// The engine's edge table is absent from the control-plane database, which
|
|
127
|
+
// migrates the run store and the journal and nothing else. The prelude
|
|
128
|
+
// drops that half of the walk there and keeps the `parent_run_id` half, so
|
|
129
|
+
// one guard covers both files.
|
|
130
|
+
return yield* RetentionOps.candidatesOf(sql, {
|
|
131
|
+
cutoffMs: olderThanMs,
|
|
132
|
+
inclusive: false,
|
|
133
|
+
parentEdges: yield* hasTable("flows_run_parents"),
|
|
134
|
+
pins,
|
|
135
|
+
limit: RetentionOps.normalizeLimit(limit)
|
|
136
|
+
})
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* The terminal runs one pass would delete, oldest first.
|
|
141
|
+
*
|
|
142
|
+
* @category getters
|
|
143
|
+
* @since 1.0.0
|
|
144
|
+
*/
|
|
145
|
+
export const eligible = (
|
|
146
|
+
olderThanMs: number,
|
|
147
|
+
limit = RetentionOps.defaultLimit
|
|
148
|
+
): Effect.Effect<ReadonlyArray<string>, SqlError, SqlClient.SqlClient> =>
|
|
149
|
+
Effect.map(
|
|
150
|
+
eligibleCandidates(olderThanMs, limit),
|
|
151
|
+
(candidates) => candidates.map((candidate) => candidate.runId)
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Runs one retention pass.
|
|
156
|
+
*
|
|
157
|
+
* The deletion itself is {@link RetentionOps.deleteRuns}, the same one
|
|
158
|
+
* {@link Service.retain} runs, so this pass cannot hold a shorter table list
|
|
159
|
+
* than that one and cannot delete run rows in an order the self-referential
|
|
160
|
+
* `parent_run_id` foreign key refuses. A handoff parent always sorts before
|
|
161
|
+
* its successor, so deleting in age order broke as soon as one lineage
|
|
162
|
+
* straddled a chunk boundary, and it broke AFTER the dependent rows of every
|
|
163
|
+
* eligible run were already gone. `assumeLadder: false` because this pass also
|
|
164
|
+
* runs against the control plane's database, which composed fewer stores.
|
|
165
|
+
*
|
|
166
|
+
* Eligibility and deletion share one retryable transaction: another writer
|
|
167
|
+
* cannot attach a live parent between the lineage scan and deletion. A busy
|
|
168
|
+
* retry recomputes eligibility rather than replaying an old candidate list.
|
|
169
|
+
* One transaction, for the reason `retain` opens one: a pass that removed a
|
|
170
|
+
* run's history and then refused on its row would have destroyed what it could
|
|
171
|
+
* not put back, and a workspace whose next pass refuses the same way can never
|
|
172
|
+
* be collected again.
|
|
173
|
+
*
|
|
174
|
+
* Under `dryRun` nothing is written and `deleted` is empty: the report names
|
|
175
|
+
* exactly the runs a real pass would remove, which is what makes
|
|
176
|
+
* `smithers gc --dry-run` worth trusting.
|
|
177
|
+
*
|
|
178
|
+
* @category constructors
|
|
179
|
+
* @since 1.0.0
|
|
180
|
+
*/
|
|
181
|
+
export const collect = (
|
|
182
|
+
options: Options
|
|
183
|
+
): Effect.Effect<Report, SqlError | RetentionOps.RetentionError, SqlClient.SqlClient> =>
|
|
184
|
+
Effect.gen(function*() {
|
|
185
|
+
const sql = yield* SqlClient.SqlClient
|
|
186
|
+
const dryRun = options.dryRun === true
|
|
187
|
+
const pass = Effect.gen(function*() {
|
|
188
|
+
const candidates = yield* eligibleCandidates(options.olderThanMs, options.limit, options.pins)
|
|
189
|
+
return yield* RetentionOps.deleteRuns(sql, candidates, {
|
|
190
|
+
dryRun,
|
|
191
|
+
assumeLadder: false
|
|
192
|
+
})
|
|
193
|
+
})
|
|
194
|
+
const removed = yield* (dryRun ? sql.withTransaction(pass) : DurableWriter.make(sql).write(pass).pipe(
|
|
195
|
+
Effect.catchIf(
|
|
196
|
+
(cause): cause is DurableWriter.DatabaseError => cause instanceof DurableWriter.DatabaseError,
|
|
197
|
+
(cause) =>
|
|
198
|
+
Effect.fail(
|
|
199
|
+
new RetentionOps.RetentionError({
|
|
200
|
+
code: "delete_failed",
|
|
201
|
+
message: "retention transaction failed; no history was deleted",
|
|
202
|
+
cause
|
|
203
|
+
})
|
|
204
|
+
)
|
|
205
|
+
)
|
|
206
|
+
))
|
|
207
|
+
return {
|
|
208
|
+
database: options.database ?? "",
|
|
209
|
+
olderThanMs: options.olderThanMs,
|
|
210
|
+
runs: removed.runIds,
|
|
211
|
+
deleted: dryRun ? {} : removed.deleted,
|
|
212
|
+
dryRun
|
|
213
|
+
}
|
|
214
|
+
})
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The workspace run catalog read.
|
|
3
|
+
*
|
|
4
|
+
* `@smthrs/sync` serves a workspace subscription over a `RunCatalog`, and its
|
|
5
|
+
* own implementations are static or in-process. This is the durable source a
|
|
6
|
+
* `RunCatalog.makePolling` catalog reads, so a follower learns of a run
|
|
7
|
+
* another engine created.
|
|
8
|
+
*
|
|
9
|
+
* The operation lives in `internal/RunCatalogOps.ts`, beside the other
|
|
10
|
+
* modules that read this package's own tables; this module is the public
|
|
11
|
+
* surface, so `internal/` is never imported by a consumer.
|
|
12
|
+
*
|
|
13
|
+
* @since 0.1.0
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
defaultLimit,
|
|
18
|
+
layer,
|
|
19
|
+
type ListOptions,
|
|
20
|
+
make,
|
|
21
|
+
RunCatalogError,
|
|
22
|
+
RunCatalogErrorCode,
|
|
23
|
+
RunCatalogRead,
|
|
24
|
+
type Service
|
|
25
|
+
} from "./internal/RunCatalogOps.ts"
|
|
26
|
+
|
|
27
|
+
export { Filters, type ListRunsOptions, maximumPageSize, type RunPage } from "./internal/RunListing.ts"
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coalesced execution catch-up with permanent deletion evidence.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { RunStoreError } from "@smthrs/run-store/RunStore"
|
|
8
|
+
import { Context, Effect, Layer, Schema } from "effect"
|
|
9
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient"
|
|
10
|
+
import type { Position } from "./ExecutionSnapshot.ts"
|
|
11
|
+
import * as Read from "./internal/ExecutionSnapshotRead.ts"
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A live-row change or retained tombstone.
|
|
15
|
+
*
|
|
16
|
+
* @category models
|
|
17
|
+
* @since 1.0.0
|
|
18
|
+
*/
|
|
19
|
+
export interface Change extends Position {
|
|
20
|
+
readonly runId: string
|
|
21
|
+
readonly deleted: boolean
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* One catch-up page at an engine watermark.
|
|
25
|
+
*
|
|
26
|
+
* @category models
|
|
27
|
+
* @since 1.0.0
|
|
28
|
+
*/
|
|
29
|
+
export interface Page extends Position {
|
|
30
|
+
readonly changes: ReadonlyArray<Change>
|
|
31
|
+
/** Resume here, including across gaps from coalesced changes. */
|
|
32
|
+
readonly nextRevision: number
|
|
33
|
+
readonly hasMore: boolean
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Bounded state-feed operations.
|
|
37
|
+
*
|
|
38
|
+
* @category models
|
|
39
|
+
* @since 1.0.0
|
|
40
|
+
*/
|
|
41
|
+
export interface Service {
|
|
42
|
+
readonly current: Effect.Effect<Position, RunStoreError>
|
|
43
|
+
readonly changesSince: (options: Position & { readonly limit: number }) => Effect.Effect<Page, RunStoreError>
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Durable change-feed service.
|
|
47
|
+
*
|
|
48
|
+
* @category services
|
|
49
|
+
* @since 1.0.0
|
|
50
|
+
*/
|
|
51
|
+
export class RunChangeFeed extends Context.Service<RunChangeFeed, Service>()("@smthrs/engine-store/RunChangeFeed") {}
|
|
52
|
+
/**
|
|
53
|
+
* Maximum change-feed page size.
|
|
54
|
+
*
|
|
55
|
+
* @category constants
|
|
56
|
+
* @since 1.0.0
|
|
57
|
+
*/
|
|
58
|
+
export const maximumPageSize = 1000
|
|
59
|
+
const Options = Schema.Struct({
|
|
60
|
+
source: Read.Source,
|
|
61
|
+
revision: Read.Natural,
|
|
62
|
+
limit: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: maximumPageSize }))
|
|
63
|
+
})
|
|
64
|
+
const ChangeRow = Schema.Struct({ run_id: Read.Identifier, revision: Read.Natural, deleted: Schema.Literals([0, 1]) })
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Constructs the feed without polling or retention timers.
|
|
68
|
+
*
|
|
69
|
+
* @category constructors
|
|
70
|
+
* @since 1.0.0
|
|
71
|
+
*/
|
|
72
|
+
export const make = (): Effect.Effect<Service, never, SqlClient.SqlClient> =>
|
|
73
|
+
Effect.gen(function*() {
|
|
74
|
+
const sql = yield* SqlClient.SqlClient
|
|
75
|
+
return {
|
|
76
|
+
current: Read.boundary("RunChangeFeed.current", Read.position(sql)),
|
|
77
|
+
changesSince: (options) =>
|
|
78
|
+
Read.boundary(
|
|
79
|
+
"RunChangeFeed.changesSince",
|
|
80
|
+
Effect.gen(function*() {
|
|
81
|
+
const input = yield* Read.decode(Options, options)
|
|
82
|
+
return yield* Read.transaction(
|
|
83
|
+
sql,
|
|
84
|
+
Effect.gen(function*() {
|
|
85
|
+
const at = yield* Read.position(sql)
|
|
86
|
+
if (input.source !== at.source || input.revision > at.revision) {
|
|
87
|
+
return yield* Effect.fail(
|
|
88
|
+
new RunStoreError({
|
|
89
|
+
method: "RunChangeFeed.changesSince",
|
|
90
|
+
code: "invalid_run",
|
|
91
|
+
message: "change cursor requires an explicit source rebuild",
|
|
92
|
+
cause: { requested: input, observed: at }
|
|
93
|
+
})
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
const rows = yield* sql`SELECT run_id, revision, deleted FROM flows_run_changes
|
|
97
|
+
WHERE revision > ${input.revision} AND revision <= ${at.revision}
|
|
98
|
+
ORDER BY revision LIMIT ${input.limit + 1}`
|
|
99
|
+
const decoded = yield* Effect.forEach(rows, (row) => Read.decode(ChangeRow, row))
|
|
100
|
+
const changes = decoded.slice(0, input.limit).map((row) => ({
|
|
101
|
+
runId: row.run_id,
|
|
102
|
+
source: at.source,
|
|
103
|
+
revision: row.revision,
|
|
104
|
+
deleted: row.deleted === 1
|
|
105
|
+
}))
|
|
106
|
+
const hasMore = decoded.length > input.limit
|
|
107
|
+
return {
|
|
108
|
+
...at,
|
|
109
|
+
changes,
|
|
110
|
+
hasMore,
|
|
111
|
+
nextRevision: hasMore ? changes[changes.length - 1]!.revision : at.revision
|
|
112
|
+
}
|
|
113
|
+
})
|
|
114
|
+
)
|
|
115
|
+
})
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
})
|
|
119
|
+
/**
|
|
120
|
+
* Provides the SQL feed.
|
|
121
|
+
*
|
|
122
|
+
* @category layers
|
|
123
|
+
* @since 1.0.0
|
|
124
|
+
*/
|
|
125
|
+
export const layer: Layer.Layer<RunChangeFeed, never, SqlClient.SqlClient> = Layer.effect(RunChangeFeed)(make())
|