@claudexor/daemon 3.25.1 → 4.0.0
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/dist/account-resets.d.ts +2 -2
- package/dist/account-resets.d.ts.map +1 -1
- package/dist/account-resets.js +15 -0
- package/dist/account-resets.js.map +1 -1
- package/dist/client.d.ts +25 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +55 -51
- package/dist/client.js.map +1 -1
- package/dist/command-authority.d.ts +11 -8
- package/dist/command-authority.d.ts.map +1 -1
- package/dist/command-authority.js +5 -6
- package/dist/command-authority.js.map +1 -1
- package/dist/command-list-projection.d.ts +0 -1
- package/dist/command-list-projection.d.ts.map +1 -1
- package/dist/command-list-projection.js +0 -6
- package/dist/command-list-projection.js.map +1 -1
- package/dist/command-list-select.d.ts +0 -4
- package/dist/command-list-select.d.ts.map +1 -1
- package/dist/command-list-select.js +1 -115
- package/dist/command-list-select.js.map +1 -1
- package/dist/command-retention.d.ts +7 -19
- package/dist/command-retention.d.ts.map +1 -1
- package/dist/command-retention.js +1 -120
- package/dist/command-retention.js.map +1 -1
- package/dist/command-rpc.d.ts +4 -1
- package/dist/command-rpc.d.ts.map +1 -1
- package/dist/command-rpc.js +12 -1
- package/dist/command-rpc.js.map +1 -1
- package/dist/command-store.d.ts +15 -52
- package/dist/command-store.d.ts.map +1 -1
- package/dist/command-store.js +5 -493
- package/dist/command-store.js.map +1 -1
- package/dist/daemon-health.d.ts +56 -8
- package/dist/daemon-health.d.ts.map +1 -1
- package/dist/daemon-health.js +44 -9
- package/dist/daemon-health.js.map +1 -1
- package/dist/daemon-local-client.d.ts +28 -0
- package/dist/daemon-local-client.d.ts.map +1 -0
- package/dist/daemon-local-client.js +55 -0
- package/dist/daemon-local-client.js.map +1 -0
- package/dist/delivery-command.d.ts +4 -4
- package/dist/delivery-command.d.ts.map +1 -1
- package/dist/delivery-command.js.map +1 -1
- package/dist/index.d.ts +23 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -8
- package/dist/index.js.map +1 -1
- package/dist/interactions.d.ts +12 -28
- package/dist/interactions.d.ts.map +1 -1
- package/dist/interactions.js +22 -123
- package/dist/interactions.js.map +1 -1
- package/dist/job-admission.d.ts +26 -0
- package/dist/job-admission.d.ts.map +1 -0
- package/dist/job-admission.js +67 -0
- package/dist/job-admission.js.map +1 -0
- package/dist/journal-fold-policy.d.ts +1 -1
- package/dist/journal-fold-policy.d.ts.map +1 -1
- package/dist/journal-recovery-files.d.ts +1 -41
- package/dist/journal-recovery-files.d.ts.map +1 -1
- package/dist/journal-recovery-files.js +2 -340
- package/dist/journal-recovery-files.js.map +1 -1
- package/dist/loop-facts.d.ts +28 -0
- package/dist/loop-facts.d.ts.map +1 -0
- package/dist/loop-facts.js +97 -0
- package/dist/loop-facts.js.map +1 -0
- package/dist/memory-facts.d.ts +2 -0
- package/dist/memory-facts.d.ts.map +1 -1
- package/dist/memory-facts.js +5 -0
- package/dist/memory-facts.js.map +1 -1
- package/dist/model-operations.d.ts +11 -4
- package/dist/model-operations.d.ts.map +1 -1
- package/dist/model-operations.js +68 -38
- package/dist/model-operations.js.map +1 -1
- package/dist/operator-decisions.d.ts +15 -25
- package/dist/operator-decisions.d.ts.map +1 -1
- package/dist/operator-decisions.js +5 -84
- package/dist/operator-decisions.js.map +1 -1
- package/dist/projects.d.ts +42 -41
- package/dist/projects.d.ts.map +1 -1
- package/dist/projects.js +46 -184
- package/dist/projects.js.map +1 -1
- package/dist/quota-registry-replay.d.ts +2 -2
- package/dist/quota-registry-replay.d.ts.map +1 -1
- package/dist/quota-registry-replay.js.map +1 -1
- package/dist/quota-registry-support.d.ts +4 -1
- package/dist/quota-registry-support.d.ts.map +1 -1
- package/dist/quota-registry-support.js +15 -2
- package/dist/quota-registry-support.js.map +1 -1
- package/dist/quota-registry.d.ts +64 -2
- package/dist/quota-registry.d.ts.map +1 -1
- package/dist/quota-registry.js +10 -3
- package/dist/quota-registry.js.map +1 -1
- package/dist/quota-resources.d.ts +6 -3
- package/dist/quota-resources.d.ts.map +1 -1
- package/dist/quota-resources.js +25 -8
- package/dist/quota-resources.js.map +1 -1
- package/dist/runless-turn-recovery.d.ts +2 -9
- package/dist/runless-turn-recovery.d.ts.map +1 -1
- package/dist/runless-turn-recovery.js +0 -14
- package/dist/runless-turn-recovery.js.map +1 -1
- package/dist/server.d.ts +23 -22
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +74 -84
- package/dist/server.js.map +1 -1
- package/dist/store/blob-files.d.ts +71 -0
- package/dist/store/blob-files.d.ts.map +1 -0
- package/dist/store/blob-files.js +160 -0
- package/dist/store/blob-files.js.map +1 -0
- package/dist/store/command-prune.d.ts +37 -0
- package/dist/store/command-prune.d.ts.map +1 -0
- package/dist/store/command-prune.js +123 -0
- package/dist/store/command-prune.js.map +1 -0
- package/dist/store/command-queries.d.ts +41 -0
- package/dist/store/command-queries.d.ts.map +1 -0
- package/dist/store/command-queries.js +186 -0
- package/dist/store/command-queries.js.map +1 -0
- package/dist/store/command-rows.d.ts +66 -0
- package/dist/store/command-rows.d.ts.map +1 -0
- package/dist/store/command-rows.js +141 -0
- package/dist/store/command-rows.js.map +1 -0
- package/dist/store/commands.d.ts +49 -0
- package/dist/store/commands.d.ts.map +1 -0
- package/dist/store/commands.js +247 -0
- package/dist/store/commands.js.map +1 -0
- package/dist/store/cursors.d.ts +33 -0
- package/dist/store/cursors.d.ts.map +1 -0
- package/dist/store/cursors.js +82 -0
- package/dist/store/cursors.js.map +1 -0
- package/dist/store/engine-recovery-files.d.ts +14 -0
- package/dist/store/engine-recovery-files.d.ts.map +1 -0
- package/dist/store/engine-recovery-files.js +53 -0
- package/dist/store/engine-recovery-files.js.map +1 -0
- package/dist/store/engine-state-recovery.d.ts +71 -0
- package/dist/store/engine-state-recovery.d.ts.map +1 -0
- package/dist/store/engine-state-recovery.js +318 -0
- package/dist/store/engine-state-recovery.js.map +1 -0
- package/dist/store/errors.d.ts +80 -0
- package/dist/store/errors.d.ts.map +1 -0
- package/dist/store/errors.js +130 -0
- package/dist/store/errors.js.map +1 -0
- package/dist/store/event-store.d.ts +52 -0
- package/dist/store/event-store.d.ts.map +1 -0
- package/dist/store/event-store.js +117 -0
- package/dist/store/event-store.js.map +1 -0
- package/dist/store/external-files.d.ts +40 -0
- package/dist/store/external-files.d.ts.map +1 -0
- package/dist/store/external-files.js +90 -0
- package/dist/store/external-files.js.map +1 -0
- package/dist/store/flusher-protocol.d.ts +82 -0
- package/dist/store/flusher-protocol.d.ts.map +1 -0
- package/dist/store/flusher-protocol.js +23 -0
- package/dist/store/flusher-protocol.js.map +1 -0
- package/dist/store/flusher-worker.d.ts +24 -0
- package/dist/store/flusher-worker.d.ts.map +1 -0
- package/dist/store/flusher-worker.js +185 -0
- package/dist/store/flusher-worker.js.map +1 -0
- package/dist/store/flusher.d.ts +87 -0
- package/dist/store/flusher.d.ts.map +1 -0
- package/dist/store/flusher.js +264 -0
- package/dist/store/flusher.js.map +1 -0
- package/dist/store/generations.d.ts +43 -0
- package/dist/store/generations.d.ts.map +1 -0
- package/dist/store/generations.js +143 -0
- package/dist/store/generations.js.map +1 -0
- package/dist/store/idempotency.d.ts +25 -0
- package/dist/store/idempotency.d.ts.map +1 -0
- package/dist/store/idempotency.js +53 -0
- package/dist/store/idempotency.js.map +1 -0
- package/dist/store/import-context.d.ts +22 -0
- package/dist/store/import-context.d.ts.map +1 -0
- package/dist/store/import-context.js +87 -0
- package/dist/store/import-context.js.map +1 -0
- package/dist/store/import-discovery.d.ts +6 -0
- package/dist/store/import-discovery.d.ts.map +1 -0
- package/dist/store/import-discovery.js +66 -0
- package/dist/store/import-discovery.js.map +1 -0
- package/dist/store/import-records.d.ts +6 -0
- package/dist/store/import-records.d.ts.map +1 -0
- package/dist/store/import-records.js +191 -0
- package/dist/store/import-records.js.map +1 -0
- package/dist/store/import-resources.d.ts +14 -0
- package/dist/store/import-resources.d.ts.map +1 -0
- package/dist/store/import-resources.js +197 -0
- package/dist/store/import-resources.js.map +1 -0
- package/dist/store/import-source.d.ts +24 -0
- package/dist/store/import-source.d.ts.map +1 -0
- package/dist/store/import-source.js +65 -0
- package/dist/store/import-source.js.map +1 -0
- package/dist/store/import-verify.d.ts +6 -0
- package/dist/store/import-verify.d.ts.map +1 -0
- package/dist/store/import-verify.js +97 -0
- package/dist/store/import-verify.js.map +1 -0
- package/dist/store/import-worker.d.ts +18 -0
- package/dist/store/import-worker.d.ts.map +1 -0
- package/dist/store/import-worker.js +69 -0
- package/dist/store/import-worker.js.map +1 -0
- package/dist/store/importer.d.ts +42 -0
- package/dist/store/importer.d.ts.map +1 -0
- package/dist/store/importer.js +239 -0
- package/dist/store/importer.js.map +1 -0
- package/dist/store/interactions.d.ts +22 -0
- package/dist/store/interactions.d.ts.map +1 -0
- package/dist/store/interactions.js +82 -0
- package/dist/store/interactions.js.map +1 -0
- package/dist/store/legacy-journal/frame-codec.d.ts +94 -0
- package/dist/store/legacy-journal/frame-codec.d.ts.map +1 -0
- package/dist/store/legacy-journal/frame-codec.js +352 -0
- package/dist/store/legacy-journal/frame-codec.js.map +1 -0
- package/dist/store/legacy-journal/frame-reader.d.ts +30 -0
- package/dist/store/legacy-journal/frame-reader.d.ts.map +1 -0
- package/dist/store/legacy-journal/frame-reader.js +97 -0
- package/dist/store/legacy-journal/frame-reader.js.map +1 -0
- package/dist/store/legacy-journal/journal-fold.d.ts +47 -0
- package/dist/store/legacy-journal/journal-fold.d.ts.map +1 -0
- package/dist/store/legacy-journal/journal-fold.js +81 -0
- package/dist/store/legacy-journal/journal-fold.js.map +1 -0
- package/dist/store/legacy-journal/journal-partition.d.ts +2 -0
- package/dist/store/legacy-journal/journal-partition.d.ts.map +1 -0
- package/dist/store/legacy-journal/journal-partition.js +10 -0
- package/dist/store/legacy-journal/journal-partition.js.map +1 -0
- package/dist/store/legacy-journal/read-only-preparation.d.ts +48 -0
- package/dist/store/legacy-journal/read-only-preparation.d.ts.map +1 -0
- package/dist/store/legacy-journal/read-only-preparation.js +430 -0
- package/dist/store/legacy-journal/read-only-preparation.js.map +1 -0
- package/dist/store/maintenance-worker.d.ts +5 -0
- package/dist/store/maintenance-worker.d.ts.map +1 -0
- package/dist/store/maintenance-worker.js +175 -0
- package/dist/store/maintenance-worker.js.map +1 -0
- package/dist/store/maintenance.d.ts +124 -0
- package/dist/store/maintenance.d.ts.map +1 -0
- package/dist/store/maintenance.js +197 -0
- package/dist/store/maintenance.js.map +1 -0
- package/dist/store/mutation.d.ts +34 -0
- package/dist/store/mutation.d.ts.map +1 -0
- package/dist/store/mutation.js +85 -0
- package/dist/store/mutation.js.map +1 -0
- package/dist/store/obligations.d.ts +101 -0
- package/dist/store/obligations.d.ts.map +1 -0
- package/dist/store/obligations.js +226 -0
- package/dist/store/obligations.js.map +1 -0
- package/dist/store/operator-decisions.d.ts +23 -0
- package/dist/store/operator-decisions.d.ts.map +1 -0
- package/dist/store/operator-decisions.js +68 -0
- package/dist/store/operator-decisions.js.map +1 -0
- package/dist/store/owner-generations.d.ts +33 -0
- package/dist/store/owner-generations.d.ts.map +1 -0
- package/dist/store/owner-generations.js +63 -0
- package/dist/store/owner-generations.js.map +1 -0
- package/dist/store/partitions.d.ts +37 -0
- package/dist/store/partitions.d.ts.map +1 -0
- package/dist/store/partitions.js +68 -0
- package/dist/store/partitions.js.map +1 -0
- package/dist/store/pragmas.d.ts +32 -0
- package/dist/store/pragmas.d.ts.map +1 -0
- package/dist/store/pragmas.js +65 -0
- package/dist/store/pragmas.js.map +1 -0
- package/dist/store/project-router.d.ts +325 -0
- package/dist/store/project-router.d.ts.map +1 -0
- package/dist/store/project-router.js +298 -0
- package/dist/store/project-router.js.map +1 -0
- package/dist/store/projects.d.ts +36 -0
- package/dist/store/projects.d.ts.map +1 -0
- package/dist/store/projects.js +238 -0
- package/dist/store/projects.js.map +1 -0
- package/dist/store/publish-blob.d.ts +20 -0
- package/dist/store/publish-blob.d.ts.map +1 -0
- package/dist/store/publish-blob.js +158 -0
- package/dist/store/publish-blob.js.map +1 -0
- package/dist/store/purge-files.d.ts +30 -0
- package/dist/store/purge-files.d.ts.map +1 -0
- package/dist/store/purge-files.js +79 -0
- package/dist/store/purge-files.js.map +1 -0
- package/dist/store/resource-rows.d.ts +40 -0
- package/dist/store/resource-rows.d.ts.map +1 -0
- package/dist/store/resource-rows.js +103 -0
- package/dist/store/resource-rows.js.map +1 -0
- package/dist/store/resources.d.ts +67 -0
- package/dist/store/resources.d.ts.map +1 -0
- package/dist/store/resources.js +147 -0
- package/dist/store/resources.js.map +1 -0
- package/dist/store/retention.d.ts +91 -0
- package/dist/store/retention.d.ts.map +1 -0
- package/dist/store/retention.js +169 -0
- package/dist/store/retention.js.map +1 -0
- package/dist/store/run-events.d.ts +14 -0
- package/dist/store/run-events.d.ts.map +1 -0
- package/dist/store/run-events.js +35 -0
- package/dist/store/run-events.js.map +1 -0
- package/dist/store/runtime.d.ts +24 -0
- package/dist/store/runtime.d.ts.map +1 -0
- package/dist/store/runtime.js +67 -0
- package/dist/store/runtime.js.map +1 -0
- package/dist/store/schema.d.ts +33 -0
- package/dist/store/schema.d.ts.map +1 -0
- package/dist/store/schema.js +187 -0
- package/dist/store/schema.js.map +1 -0
- package/dist/store/setup-bindings.d.ts +20 -0
- package/dist/store/setup-bindings.d.ts.map +1 -0
- package/dist/store/setup-bindings.js +52 -0
- package/dist/store/setup-bindings.js.map +1 -0
- package/dist/store/sql-command-router.d.ts +79 -0
- package/dist/store/sql-command-router.d.ts.map +1 -0
- package/dist/store/sql-command-router.js +92 -0
- package/dist/store/sql-command-router.js.map +1 -0
- package/dist/store/sql-daemon-services.d.ts +61 -0
- package/dist/store/sql-daemon-services.d.ts.map +1 -0
- package/dist/store/sql-daemon-services.js +124 -0
- package/dist/store/sql-daemon-services.js.map +1 -0
- package/dist/store/sql-recovery-export.d.ts +8 -0
- package/dist/store/sql-recovery-export.d.ts.map +1 -0
- package/dist/store/sql-recovery-export.js +110 -0
- package/dist/store/sql-recovery-export.js.map +1 -0
- package/dist/store/sql-recovery-inspection.d.ts +22 -0
- package/dist/store/sql-recovery-inspection.d.ts.map +1 -0
- package/dist/store/sql-recovery-inspection.js +88 -0
- package/dist/store/sql-recovery-inspection.js.map +1 -0
- package/dist/store/sql-recovery.d.ts +69 -0
- package/dist/store/sql-recovery.d.ts.map +1 -0
- package/dist/store/sql-recovery.js +169 -0
- package/dist/store/sql-recovery.js.map +1 -0
- package/dist/store/sql-validation.d.ts +9 -0
- package/dist/store/sql-validation.d.ts.map +1 -0
- package/dist/store/sql-validation.js +103 -0
- package/dist/store/sql-validation.js.map +1 -0
- package/dist/store/statement-observer.d.ts +7 -0
- package/dist/store/statement-observer.d.ts.map +1 -0
- package/dist/store/statement-observer.js +44 -0
- package/dist/store/statement-observer.js.map +1 -0
- package/dist/store/store.d.ts +110 -0
- package/dist/store/store.d.ts.map +1 -0
- package/dist/store/store.js +296 -0
- package/dist/store/store.js.map +1 -0
- package/dist/store/terminal-files.d.ts +21 -0
- package/dist/store/terminal-files.d.ts.map +1 -0
- package/dist/store/terminal-files.js +115 -0
- package/dist/store/terminal-files.js.map +1 -0
- package/dist/store/thread-replay.d.ts +12 -0
- package/dist/store/thread-replay.d.ts.map +1 -0
- package/dist/store/thread-replay.js +49 -0
- package/dist/store/thread-replay.js.map +1 -0
- package/dist/store/thread-rows.d.ts +25 -0
- package/dist/store/thread-rows.d.ts.map +1 -0
- package/dist/store/thread-rows.js +141 -0
- package/dist/store/thread-rows.js.map +1 -0
- package/dist/store/threads.d.ts +105 -0
- package/dist/store/threads.d.ts.map +1 -0
- package/dist/store/threads.js +423 -0
- package/dist/store/threads.js.map +1 -0
- package/dist/store/upload-binding-retention.d.ts +26 -0
- package/dist/store/upload-binding-retention.d.ts.map +1 -0
- package/dist/store/upload-binding-retention.js +142 -0
- package/dist/store/upload-binding-retention.js.map +1 -0
- package/dist/store/uploads.d.ts +30 -0
- package/dist/store/uploads.d.ts.map +1 -0
- package/dist/store/uploads.js +238 -0
- package/dist/store/uploads.js.map +1 -0
- package/dist/store-contracts.d.ts +181 -0
- package/dist/store-contracts.d.ts.map +1 -0
- package/dist/store-contracts.js +2 -0
- package/dist/store-contracts.js.map +1 -0
- package/dist/terminal-authority.d.ts +9 -0
- package/dist/terminal-authority.d.ts.map +1 -1
- package/dist/terminal-authority.js +103 -1
- package/dist/terminal-authority.js.map +1 -1
- package/dist/thread-lane-checkpoints.d.ts +0 -2
- package/dist/thread-lane-checkpoints.d.ts.map +1 -1
- package/dist/thread-lane-checkpoints.js +0 -4
- package/dist/thread-lane-checkpoints.js.map +1 -1
- package/dist/thread-store-support.d.ts +1 -27
- package/dist/thread-store-support.d.ts.map +1 -1
- package/dist/thread-store-support.js +0 -63
- package/dist/thread-store-support.js.map +1 -1
- package/dist/threads.d.ts +1 -113
- package/dist/threads.d.ts.map +1 -1
- package/dist/threads.js +1 -379
- package/dist/threads.js.map +1 -1
- package/package.json +9 -7
- package/dist/command-activity.d.ts +0 -14
- package/dist/command-activity.d.ts.map +0 -1
- package/dist/command-activity.js +0 -16
- package/dist/command-activity.js.map +0 -1
- package/dist/journal-events.d.ts +0 -4
- package/dist/journal-events.d.ts.map +0 -1
- package/dist/journal-events.js +0 -23
- package/dist/journal-events.js.map +0 -1
- package/dist/journal-maintenance.d.ts +0 -50
- package/dist/journal-maintenance.d.ts.map +0 -1
- package/dist/journal-maintenance.js +0 -162
- package/dist/journal-maintenance.js.map +0 -1
- package/dist/journal-manager-journal.d.ts +0 -18
- package/dist/journal-manager-journal.d.ts.map +0 -1
- package/dist/journal-manager-journal.js +0 -25
- package/dist/journal-manager-journal.js.map +0 -1
- package/dist/journal-manager-lifecycle.d.ts +0 -11
- package/dist/journal-manager-lifecycle.d.ts.map +0 -1
- package/dist/journal-manager-lifecycle.js +0 -2
- package/dist/journal-manager-lifecycle.js.map +0 -1
- package/dist/journal-manager.d.ts +0 -99
- package/dist/journal-manager.d.ts.map +0 -1
- package/dist/journal-manager.js +0 -559
- package/dist/journal-manager.js.map +0 -1
- package/dist/journal-prepared-operation.d.ts +0 -53
- package/dist/journal-prepared-operation.d.ts.map +0 -1
- package/dist/journal-prepared-operation.js +0 -158
- package/dist/journal-prepared-operation.js.map +0 -1
- package/dist/journal-projection-slot.d.ts +0 -28
- package/dist/journal-projection-slot.d.ts.map +0 -1
- package/dist/journal-projection-slot.js +0 -71
- package/dist/journal-projection-slot.js.map +0 -1
- package/dist/journal-projection.d.ts +0 -13
- package/dist/journal-projection.d.ts.map +0 -1
- package/dist/journal-projection.js +0 -2
- package/dist/journal-projection.js.map +0 -1
- package/dist/partition-accounts.d.ts +0 -27
- package/dist/partition-accounts.d.ts.map +0 -1
- package/dist/partition-accounts.js +0 -21
- package/dist/partition-accounts.js.map +0 -1
- package/dist/project-partition-preparation.d.ts +0 -87
- package/dist/project-partition-preparation.d.ts.map +0 -1
- package/dist/project-partition-preparation.js +0 -273
- package/dist/project-partition-preparation.js.map +0 -1
- package/dist/project-partitions.d.ts +0 -214
- package/dist/project-partitions.d.ts.map +0 -1
- package/dist/project-partitions.js +0 -486
- package/dist/project-partitions.js.map +0 -1
- package/dist/project-remove.d.ts +0 -11
- package/dist/project-remove.d.ts.map +0 -1
- package/dist/project-remove.js +0 -65
- package/dist/project-remove.js.map +0 -1
- package/dist/project-thread-listing.d.ts +0 -14
- package/dist/project-thread-listing.d.ts.map +0 -1
- package/dist/project-thread-listing.js +0 -37
- package/dist/project-thread-listing.js.map +0 -1
- package/dist/quota-projection.d.ts +0 -11
- package/dist/quota-projection.d.ts.map +0 -1
- package/dist/quota-projection.js +0 -10
- package/dist/quota-projection.js.map +0 -1
- package/dist/resource-store.d.ts +0 -39
- package/dist/resource-store.d.ts.map +0 -1
- package/dist/resource-store.js +0 -464
- package/dist/resource-store.js.map +0 -1
- package/dist/run-event-terminal-index.d.ts +0 -13
- package/dist/run-event-terminal-index.d.ts.map +0 -1
- package/dist/run-event-terminal-index.js +0 -38
- package/dist/run-event-terminal-index.js.map +0 -1
- package/dist/run-events.d.ts +0 -17
- package/dist/run-events.d.ts.map +0 -1
- package/dist/run-events.js +0 -31
- package/dist/run-events.js.map +0 -1
- package/dist/thread-head-ping.d.ts +0 -35
- package/dist/thread-head-ping.d.ts.map +0 -1
- package/dist/thread-head-ping.js +0 -67
- package/dist/thread-head-ping.js.map +0 -1
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { DatabaseSync } from "node:sqlite";
|
|
2
|
+
/** `PRAGMA application_id` of every engine store ("CXEN"). */
|
|
3
|
+
export declare const ENGINE_APPLICATION_ID = 1129858382;
|
|
4
|
+
/** `PRAGMA user_version`: the one schema this engine creates and serves. */
|
|
5
|
+
export declare const ENGINE_SCHEMA_VERSION = 1;
|
|
6
|
+
/**
|
|
7
|
+
* SYNTHESIS_R5 §5 with R5_AMENDMENTS A1 (`command.kind`/`live` replace
|
|
8
|
+
* `retention_exempt`; obligation `state`/`materialized_g`). STRICT everywhere; WITHOUT ROWID where the
|
|
9
|
+
* primary key is the access path; partial indexes carry the retention and
|
|
10
|
+
* listing predicates so a query over the current generation never visits
|
|
11
|
+
* history. `pid` is the surrogate of one partition generation and the only
|
|
12
|
+
* partition key a row carries.
|
|
13
|
+
*/
|
|
14
|
+
export declare const ENGINE_SCHEMA_SQL = "\nCREATE TABLE meta(key TEXT PRIMARY KEY, value TEXT NOT NULL) STRICT;\nCREATE TABLE partition(id INTEGER PRIMARY KEY, name TEXT NOT NULL, epoch TEXT NOT NULL, status TEXT NOT NULL,\n next_seq INTEGER NOT NULL, project_id TEXT, created_at TEXT NOT NULL, UNIQUE(name, epoch)) STRICT;\nCREATE TABLE event(pid INTEGER NOT NULL, seq INTEGER NOT NULL, time TEXT NOT NULL, type TEXT NOT NULL,\n payload BLOB NOT NULL, payload_sha TEXT, slot_key TEXT, group_key TEXT, PRIMARY KEY(pid, seq)) WITHOUT ROWID, STRICT;\nCREATE INDEX event_type ON event(pid, type, seq);\nCREATE INDEX event_slot ON event(pid, slot_key) WHERE slot_key IS NOT NULL;\nCREATE INDEX event_group ON event(pid, group_key) WHERE group_key IS NOT NULL;\nCREATE INDEX event_payload ON event(payload_sha) WHERE payload_sha IS NOT NULL;\nCREATE INDEX event_command_age ON event(time,pid,seq) WHERE type IN ('command.accepted','command.updated');\nCREATE TABLE blob(sha256 TEXT PRIMARY KEY, size INTEGER NOT NULL, inline BLOB) STRICT;\nCREATE TABLE command(id TEXT PRIMARY KEY, pid INTEGER NOT NULL, operation TEXT NOT NULL, state TEXT NOT NULL, client_id TEXT,\n run_id TEXT, task_id TEXT, run_dir TEXT, thread_id TEXT, turn_id TEXT, delegated_from TEXT, continue_from TEXT, scope_root TEXT,\n created_at TEXT NOT NULL, started_at TEXT, finished_at TEXT, summary BLOB NOT NULL, params_sha TEXT NOT NULL, result_sha TEXT,\n error BLOB, last_event_seq INTEGER, response_state TEXT, response_expires_at TEXT, request_resource_id TEXT, response_resource_id TEXT,\n kind TEXT NOT NULL, live INTEGER NOT NULL DEFAULT 1, needs_decision INTEGER NOT NULL DEFAULT 0) STRICT;\nCREATE INDEX command_run ON command(run_id);\nCREATE INDEX command_partition ON command(pid);\nCREATE INDEX command_active ON command(state, pid) WHERE live = 1 AND state IN ('queued','running');\nCREATE INDEX command_thread ON command(thread_id, state);\nCREATE INDEX command_turn ON command(turn_id, created_at);\nCREATE INDEX command_request_resource ON command(request_resource_id) WHERE request_resource_id IS NOT NULL;\nCREATE INDEX command_response_resource ON command(response_resource_id) WHERE response_resource_id IS NOT NULL;\nCREATE INDEX command_parent ON command(delegated_from);\nCREATE INDEX command_continue ON command(continue_from);\nCREATE INDEX command_list ON command(created_at DESC, id DESC) WHERE live = 1 AND kind = 'product';\nCREATE INDEX command_list_state ON command(state, created_at DESC, id DESC) WHERE live = 1 AND kind = 'product';\nCREATE INDEX command_terminal ON command(created_at, id)\n WHERE live = 1 AND kind IN ('product','delivery','maintenance') AND finished_at IS NOT NULL;\nCREATE INDEX command_prunable ON command(created_at, id)\n WHERE live = 1 AND kind IN ('product','delivery','maintenance') AND finished_at IS NOT NULL AND needs_decision = 0;\nCREATE INDEX command_expiry ON command(response_state, response_expires_at) WHERE kind = 'model';\nCREATE INDEX command_maintenance_harness ON command(json_extract(CAST(summary AS TEXT),'$.params.harness'),created_at)\n WHERE live=1 AND kind='maintenance';\nCREATE INDEX command_params ON command(params_sha);\nCREATE INDEX command_result ON command(result_sha) WHERE result_sha IS NOT NULL;\nCREATE TABLE run_terminal(run_id TEXT PRIMARY KEY, pid INTEGER NOT NULL, event BLOB NOT NULL) STRICT;\nCREATE TABLE effect_obligation(kind TEXT NOT NULL, key TEXT NOT NULL, pid INTEGER NOT NULL, created_at TEXT NOT NULL, payload BLOB NOT NULL,\n state TEXT NOT NULL DEFAULT 'pending', materialized_g INTEGER, PRIMARY KEY(kind, key)) WITHOUT ROWID, STRICT;\nCREATE TABLE idempotency(owner TEXT NOT NULL, pid INTEGER NOT NULL, key_digest TEXT NOT NULL, operation TEXT NOT NULL,\n request_digest TEXT NOT NULL, target_id TEXT NOT NULL, result BLOB, created_at TEXT NOT NULL,\n PRIMARY KEY(owner, pid, key_digest)) WITHOUT ROWID, STRICT;\nCREATE INDEX idempotency_target ON idempotency(target_id);\nCREATE TABLE thread(id TEXT PRIMARY KEY, pid INTEGER NOT NULL, state TEXT NOT NULL, updated_at TEXT NOT NULL,\n head_revision INTEGER NOT NULL DEFAULT 0, body BLOB NOT NULL) STRICT;\nCREATE INDEX thread_list ON thread(pid, state, updated_at DESC);\nCREATE TABLE turn(id TEXT PRIMARY KEY, pid INTEGER NOT NULL, thread_id TEXT NOT NULL, ordinal INTEGER NOT NULL, run_id TEXT,\n created_at TEXT NOT NULL, prompt_sha TEXT NOT NULL, body BLOB NOT NULL) STRICT;\nCREATE UNIQUE INDEX turn_thread ON turn(thread_id, ordinal);\nCREATE UNIQUE INDEX turn_run ON turn(run_id) WHERE run_id IS NOT NULL;\nCREATE INDEX turn_prompt ON turn(prompt_sha);\nCREATE TABLE session(id TEXT PRIMARY KEY, thread_id TEXT NOT NULL, harness_id TEXT NOT NULL, profile_id TEXT NOT NULL DEFAULT '', pid INTEGER NOT NULL,\n insertion_ordinal INTEGER NOT NULL DEFAULT 0, body BLOB NOT NULL) WITHOUT ROWID, STRICT;\nCREATE INDEX session_lane ON session(thread_id, harness_id, profile_id);\nCREATE INDEX session_order ON session(thread_id, insertion_ordinal);\nCREATE INDEX session_partition ON session(pid, insertion_ordinal);\nCREATE TABLE lane_checkpoint(thread_id TEXT NOT NULL, harness_id TEXT NOT NULL, profile_id TEXT NOT NULL DEFAULT '', pid INTEGER NOT NULL,\n insertion_ordinal INTEGER NOT NULL DEFAULT 0, turn_id TEXT NOT NULL, body BLOB NOT NULL, PRIMARY KEY(thread_id, harness_id, profile_id)) WITHOUT ROWID, STRICT;\nCREATE INDEX lane_checkpoint_order ON lane_checkpoint(thread_id, insertion_ordinal);\nCREATE INDEX lane_checkpoint_partition ON lane_checkpoint(pid, insertion_ordinal);\nCREATE TABLE interaction(id TEXT PRIMARY KEY, pid INTEGER NOT NULL, run_id TEXT NOT NULL, state TEXT NOT NULL,\n request BLOB NOT NULL, resolution BLOB) STRICT;\nCREATE INDEX interaction_pending ON interaction(run_id) WHERE state = 'pending';\nCREATE INDEX interaction_run ON interaction(run_id);\nCREATE INDEX interaction_partition_pending ON interaction(pid,run_id) WHERE state = 'pending';\nCREATE TABLE operator_decision(run_id TEXT PRIMARY KEY, pid INTEGER NOT NULL, body BLOB NOT NULL) STRICT;\nCREATE TABLE project(id TEXT PRIMARY KEY, pid INTEGER NOT NULL, root TEXT NOT NULL, status TEXT NOT NULL,\n current_pid INTEGER, creation_key_digest TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, body BLOB NOT NULL) STRICT;\nCREATE UNIQUE INDEX project_root_active ON project(pid, root) WHERE status = 'active';\nCREATE INDEX project_current_pid ON project(current_pid) WHERE status = 'active';\nCREATE TABLE pruned_root(root TEXT PRIMARY KEY) STRICT;\nCREATE TABLE resource(id TEXT PRIMARY KEY, purpose TEXT, kind TEXT NOT NULL, sha256 TEXT NOT NULL, size_bytes INTEGER NOT NULL,\n state TEXT NOT NULL, created_at TEXT NOT NULL, expires_at TEXT, released_at TEXT, body BLOB NOT NULL) STRICT;\nCREATE INDEX resource_sha ON resource(sha256);\nCREATE INDEX resource_expiry ON resource(state, expires_at);\nCREATE TABLE upload(id TEXT PRIMARY KEY, state TEXT NOT NULL, received_bytes INTEGER NOT NULL, expected_bytes INTEGER,\n finalize_sha TEXT, body BLOB NOT NULL) STRICT;\nCREATE INDEX upload_finalize ON upload(finalize_sha) WHERE finalize_sha IS NOT NULL;\nCREATE TABLE import_partition(name TEXT PRIMARY KEY, status TEXT NOT NULL, pid INTEGER, epoch TEXT, next_seq INTEGER,\n previous_frame_hash TEXT, source_size INTEGER, source_mtime TEXT, fingerprint TEXT, records INTEGER, digest TEXT, problem TEXT) STRICT;\nCREATE TABLE unclassified(pid INTEGER NOT NULL, seq INTEGER NOT NULL, type TEXT NOT NULL, reason TEXT NOT NULL, payload BLOB NOT NULL,\n PRIMARY KEY(pid, seq)) WITHOUT ROWID, STRICT;\n";
|
|
15
|
+
/** Every table the DDL creates, in creation order (for tests and the importer seam). */
|
|
16
|
+
export declare const ENGINE_TABLES: readonly string[];
|
|
17
|
+
export interface SchemaIdentity {
|
|
18
|
+
applicationId: number;
|
|
19
|
+
userVersion: number;
|
|
20
|
+
pageCount: number;
|
|
21
|
+
/** Rows in `sqlite_master`: a header-only file (journal mode set, no schema yet) is still fresh. */
|
|
22
|
+
objectCount: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function readSchemaIdentity(db: DatabaseSync): SchemaIdentity;
|
|
25
|
+
/**
|
|
26
|
+
* Refuse a foreign or unknown database BEFORE any write. A database with
|
|
27
|
+
* pages must carry this engine's application id and a schema version this
|
|
28
|
+
* engine can serve or migrate; an empty file is fresh and gets created.
|
|
29
|
+
*/
|
|
30
|
+
export declare function assertSchemaServable(identity: SchemaIdentity): "fresh" | "current" | "migrate";
|
|
31
|
+
/** Create a fresh schema or apply the migration path; never touches a refused file. */
|
|
32
|
+
export declare function ensureSchema(db: DatabaseSync, now?: () => Date): void;
|
|
33
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,8DAA8D;AAC9D,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAChD,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,k6OAmF7B,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAE1C,CAAC;AASF,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,oGAAoG;IACpG,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,YAAY,GAAG,cAAc,CAYnE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAqB9F;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,GAAE,MAAM,IAAuB,GAAG,IAAI,CAkCvF"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { StoreSchemaUnsupportedError } from "./errors.js";
|
|
3
|
+
/** `PRAGMA application_id` of every engine store ("CXEN"). */
|
|
4
|
+
export const ENGINE_APPLICATION_ID = 0x4358454e;
|
|
5
|
+
/** `PRAGMA user_version`: the one schema this engine creates and serves. */
|
|
6
|
+
export const ENGINE_SCHEMA_VERSION = 1;
|
|
7
|
+
/**
|
|
8
|
+
* SYNTHESIS_R5 §5 with R5_AMENDMENTS A1 (`command.kind`/`live` replace
|
|
9
|
+
* `retention_exempt`; obligation `state`/`materialized_g`). STRICT everywhere; WITHOUT ROWID where the
|
|
10
|
+
* primary key is the access path; partial indexes carry the retention and
|
|
11
|
+
* listing predicates so a query over the current generation never visits
|
|
12
|
+
* history. `pid` is the surrogate of one partition generation and the only
|
|
13
|
+
* partition key a row carries.
|
|
14
|
+
*/
|
|
15
|
+
export const ENGINE_SCHEMA_SQL = `
|
|
16
|
+
CREATE TABLE meta(key TEXT PRIMARY KEY, value TEXT NOT NULL) STRICT;
|
|
17
|
+
CREATE TABLE partition(id INTEGER PRIMARY KEY, name TEXT NOT NULL, epoch TEXT NOT NULL, status TEXT NOT NULL,
|
|
18
|
+
next_seq INTEGER NOT NULL, project_id TEXT, created_at TEXT NOT NULL, UNIQUE(name, epoch)) STRICT;
|
|
19
|
+
CREATE TABLE event(pid INTEGER NOT NULL, seq INTEGER NOT NULL, time TEXT NOT NULL, type TEXT NOT NULL,
|
|
20
|
+
payload BLOB NOT NULL, payload_sha TEXT, slot_key TEXT, group_key TEXT, PRIMARY KEY(pid, seq)) WITHOUT ROWID, STRICT;
|
|
21
|
+
CREATE INDEX event_type ON event(pid, type, seq);
|
|
22
|
+
CREATE INDEX event_slot ON event(pid, slot_key) WHERE slot_key IS NOT NULL;
|
|
23
|
+
CREATE INDEX event_group ON event(pid, group_key) WHERE group_key IS NOT NULL;
|
|
24
|
+
CREATE INDEX event_payload ON event(payload_sha) WHERE payload_sha IS NOT NULL;
|
|
25
|
+
CREATE INDEX event_command_age ON event(time,pid,seq) WHERE type IN ('command.accepted','command.updated');
|
|
26
|
+
CREATE TABLE blob(sha256 TEXT PRIMARY KEY, size INTEGER NOT NULL, inline BLOB) STRICT;
|
|
27
|
+
CREATE TABLE command(id TEXT PRIMARY KEY, pid INTEGER NOT NULL, operation TEXT NOT NULL, state TEXT NOT NULL, client_id TEXT,
|
|
28
|
+
run_id TEXT, task_id TEXT, run_dir TEXT, thread_id TEXT, turn_id TEXT, delegated_from TEXT, continue_from TEXT, scope_root TEXT,
|
|
29
|
+
created_at TEXT NOT NULL, started_at TEXT, finished_at TEXT, summary BLOB NOT NULL, params_sha TEXT NOT NULL, result_sha TEXT,
|
|
30
|
+
error BLOB, last_event_seq INTEGER, response_state TEXT, response_expires_at TEXT, request_resource_id TEXT, response_resource_id TEXT,
|
|
31
|
+
kind TEXT NOT NULL, live INTEGER NOT NULL DEFAULT 1, needs_decision INTEGER NOT NULL DEFAULT 0) STRICT;
|
|
32
|
+
CREATE INDEX command_run ON command(run_id);
|
|
33
|
+
CREATE INDEX command_partition ON command(pid);
|
|
34
|
+
CREATE INDEX command_active ON command(state, pid) WHERE live = 1 AND state IN ('queued','running');
|
|
35
|
+
CREATE INDEX command_thread ON command(thread_id, state);
|
|
36
|
+
CREATE INDEX command_turn ON command(turn_id, created_at);
|
|
37
|
+
CREATE INDEX command_request_resource ON command(request_resource_id) WHERE request_resource_id IS NOT NULL;
|
|
38
|
+
CREATE INDEX command_response_resource ON command(response_resource_id) WHERE response_resource_id IS NOT NULL;
|
|
39
|
+
CREATE INDEX command_parent ON command(delegated_from);
|
|
40
|
+
CREATE INDEX command_continue ON command(continue_from);
|
|
41
|
+
CREATE INDEX command_list ON command(created_at DESC, id DESC) WHERE live = 1 AND kind = 'product';
|
|
42
|
+
CREATE INDEX command_list_state ON command(state, created_at DESC, id DESC) WHERE live = 1 AND kind = 'product';
|
|
43
|
+
CREATE INDEX command_terminal ON command(created_at, id)
|
|
44
|
+
WHERE live = 1 AND kind IN ('product','delivery','maintenance') AND finished_at IS NOT NULL;
|
|
45
|
+
CREATE INDEX command_prunable ON command(created_at, id)
|
|
46
|
+
WHERE live = 1 AND kind IN ('product','delivery','maintenance') AND finished_at IS NOT NULL AND needs_decision = 0;
|
|
47
|
+
CREATE INDEX command_expiry ON command(response_state, response_expires_at) WHERE kind = 'model';
|
|
48
|
+
CREATE INDEX command_maintenance_harness ON command(json_extract(CAST(summary AS TEXT),'$.params.harness'),created_at)
|
|
49
|
+
WHERE live=1 AND kind='maintenance';
|
|
50
|
+
CREATE INDEX command_params ON command(params_sha);
|
|
51
|
+
CREATE INDEX command_result ON command(result_sha) WHERE result_sha IS NOT NULL;
|
|
52
|
+
CREATE TABLE run_terminal(run_id TEXT PRIMARY KEY, pid INTEGER NOT NULL, event BLOB NOT NULL) STRICT;
|
|
53
|
+
CREATE TABLE effect_obligation(kind TEXT NOT NULL, key TEXT NOT NULL, pid INTEGER NOT NULL, created_at TEXT NOT NULL, payload BLOB NOT NULL,
|
|
54
|
+
state TEXT NOT NULL DEFAULT 'pending', materialized_g INTEGER, PRIMARY KEY(kind, key)) WITHOUT ROWID, STRICT;
|
|
55
|
+
CREATE TABLE idempotency(owner TEXT NOT NULL, pid INTEGER NOT NULL, key_digest TEXT NOT NULL, operation TEXT NOT NULL,
|
|
56
|
+
request_digest TEXT NOT NULL, target_id TEXT NOT NULL, result BLOB, created_at TEXT NOT NULL,
|
|
57
|
+
PRIMARY KEY(owner, pid, key_digest)) WITHOUT ROWID, STRICT;
|
|
58
|
+
CREATE INDEX idempotency_target ON idempotency(target_id);
|
|
59
|
+
CREATE TABLE thread(id TEXT PRIMARY KEY, pid INTEGER NOT NULL, state TEXT NOT NULL, updated_at TEXT NOT NULL,
|
|
60
|
+
head_revision INTEGER NOT NULL DEFAULT 0, body BLOB NOT NULL) STRICT;
|
|
61
|
+
CREATE INDEX thread_list ON thread(pid, state, updated_at DESC);
|
|
62
|
+
CREATE TABLE turn(id TEXT PRIMARY KEY, pid INTEGER NOT NULL, thread_id TEXT NOT NULL, ordinal INTEGER NOT NULL, run_id TEXT,
|
|
63
|
+
created_at TEXT NOT NULL, prompt_sha TEXT NOT NULL, body BLOB NOT NULL) STRICT;
|
|
64
|
+
CREATE UNIQUE INDEX turn_thread ON turn(thread_id, ordinal);
|
|
65
|
+
CREATE UNIQUE INDEX turn_run ON turn(run_id) WHERE run_id IS NOT NULL;
|
|
66
|
+
CREATE INDEX turn_prompt ON turn(prompt_sha);
|
|
67
|
+
CREATE TABLE session(id TEXT PRIMARY KEY, thread_id TEXT NOT NULL, harness_id TEXT NOT NULL, profile_id TEXT NOT NULL DEFAULT '', pid INTEGER NOT NULL,
|
|
68
|
+
insertion_ordinal INTEGER NOT NULL DEFAULT 0, body BLOB NOT NULL) WITHOUT ROWID, STRICT;
|
|
69
|
+
CREATE INDEX session_lane ON session(thread_id, harness_id, profile_id);
|
|
70
|
+
CREATE INDEX session_order ON session(thread_id, insertion_ordinal);
|
|
71
|
+
CREATE INDEX session_partition ON session(pid, insertion_ordinal);
|
|
72
|
+
CREATE TABLE lane_checkpoint(thread_id TEXT NOT NULL, harness_id TEXT NOT NULL, profile_id TEXT NOT NULL DEFAULT '', pid INTEGER NOT NULL,
|
|
73
|
+
insertion_ordinal INTEGER NOT NULL DEFAULT 0, turn_id TEXT NOT NULL, body BLOB NOT NULL, PRIMARY KEY(thread_id, harness_id, profile_id)) WITHOUT ROWID, STRICT;
|
|
74
|
+
CREATE INDEX lane_checkpoint_order ON lane_checkpoint(thread_id, insertion_ordinal);
|
|
75
|
+
CREATE INDEX lane_checkpoint_partition ON lane_checkpoint(pid, insertion_ordinal);
|
|
76
|
+
CREATE TABLE interaction(id TEXT PRIMARY KEY, pid INTEGER NOT NULL, run_id TEXT NOT NULL, state TEXT NOT NULL,
|
|
77
|
+
request BLOB NOT NULL, resolution BLOB) STRICT;
|
|
78
|
+
CREATE INDEX interaction_pending ON interaction(run_id) WHERE state = 'pending';
|
|
79
|
+
CREATE INDEX interaction_run ON interaction(run_id);
|
|
80
|
+
CREATE INDEX interaction_partition_pending ON interaction(pid,run_id) WHERE state = 'pending';
|
|
81
|
+
CREATE TABLE operator_decision(run_id TEXT PRIMARY KEY, pid INTEGER NOT NULL, body BLOB NOT NULL) STRICT;
|
|
82
|
+
CREATE TABLE project(id TEXT PRIMARY KEY, pid INTEGER NOT NULL, root TEXT NOT NULL, status TEXT NOT NULL,
|
|
83
|
+
current_pid INTEGER, creation_key_digest TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, body BLOB NOT NULL) STRICT;
|
|
84
|
+
CREATE UNIQUE INDEX project_root_active ON project(pid, root) WHERE status = 'active';
|
|
85
|
+
CREATE INDEX project_current_pid ON project(current_pid) WHERE status = 'active';
|
|
86
|
+
CREATE TABLE pruned_root(root TEXT PRIMARY KEY) STRICT;
|
|
87
|
+
CREATE TABLE resource(id TEXT PRIMARY KEY, purpose TEXT, kind TEXT NOT NULL, sha256 TEXT NOT NULL, size_bytes INTEGER NOT NULL,
|
|
88
|
+
state TEXT NOT NULL, created_at TEXT NOT NULL, expires_at TEXT, released_at TEXT, body BLOB NOT NULL) STRICT;
|
|
89
|
+
CREATE INDEX resource_sha ON resource(sha256);
|
|
90
|
+
CREATE INDEX resource_expiry ON resource(state, expires_at);
|
|
91
|
+
CREATE TABLE upload(id TEXT PRIMARY KEY, state TEXT NOT NULL, received_bytes INTEGER NOT NULL, expected_bytes INTEGER,
|
|
92
|
+
finalize_sha TEXT, body BLOB NOT NULL) STRICT;
|
|
93
|
+
CREATE INDEX upload_finalize ON upload(finalize_sha) WHERE finalize_sha IS NOT NULL;
|
|
94
|
+
CREATE TABLE import_partition(name TEXT PRIMARY KEY, status TEXT NOT NULL, pid INTEGER, epoch TEXT, next_seq INTEGER,
|
|
95
|
+
previous_frame_hash TEXT, source_size INTEGER, source_mtime TEXT, fingerprint TEXT, records INTEGER, digest TEXT, problem TEXT) STRICT;
|
|
96
|
+
CREATE TABLE unclassified(pid INTEGER NOT NULL, seq INTEGER NOT NULL, type TEXT NOT NULL, reason TEXT NOT NULL, payload BLOB NOT NULL,
|
|
97
|
+
PRIMARY KEY(pid, seq)) WITHOUT ROWID, STRICT;
|
|
98
|
+
`;
|
|
99
|
+
/** Every table the DDL creates, in creation order (for tests and the importer seam). */
|
|
100
|
+
export const ENGINE_TABLES = Object.freeze([...ENGINE_SCHEMA_SQL.matchAll(/CREATE TABLE (\w+)\(/g)].map((match) => match[1]));
|
|
101
|
+
/**
|
|
102
|
+
* Migrations from an older `user_version` to the current one, keyed by the
|
|
103
|
+
* version they start from. Empty for version 1; a stored version with no
|
|
104
|
+
* entry here (older without a path, or newer than this engine) is refused.
|
|
105
|
+
*/
|
|
106
|
+
const SCHEMA_MIGRATIONS = new Map();
|
|
107
|
+
export function readSchemaIdentity(db) {
|
|
108
|
+
const scalar = (sql) => {
|
|
109
|
+
const row = db.prepare(sql).get();
|
|
110
|
+
const value = Object.values(row)[0];
|
|
111
|
+
return typeof value === "bigint" ? Number(value) : Number(value);
|
|
112
|
+
};
|
|
113
|
+
return {
|
|
114
|
+
applicationId: scalar("PRAGMA application_id"),
|
|
115
|
+
userVersion: scalar("PRAGMA user_version"),
|
|
116
|
+
pageCount: scalar("PRAGMA page_count"),
|
|
117
|
+
objectCount: scalar("SELECT count(*) FROM sqlite_master"),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Refuse a foreign or unknown database BEFORE any write. A database with
|
|
122
|
+
* pages must carry this engine's application id and a schema version this
|
|
123
|
+
* engine can serve or migrate; an empty file is fresh and gets created.
|
|
124
|
+
*/
|
|
125
|
+
export function assertSchemaServable(identity) {
|
|
126
|
+
const untouched = identity.applicationId === 0 && identity.userVersion === 0;
|
|
127
|
+
if (identity.pageCount === 0 || (identity.objectCount === 0 && untouched))
|
|
128
|
+
return "fresh";
|
|
129
|
+
if (identity.applicationId !== ENGINE_APPLICATION_ID) {
|
|
130
|
+
throw new StoreSchemaUnsupportedError({
|
|
131
|
+
applicationId: identity.applicationId,
|
|
132
|
+
userVersion: identity.userVersion,
|
|
133
|
+
detail: "the database file does not belong to the Claudexor engine store",
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
if (identity.userVersion === ENGINE_SCHEMA_VERSION)
|
|
137
|
+
return "current";
|
|
138
|
+
if (identity.userVersion < ENGINE_SCHEMA_VERSION && SCHEMA_MIGRATIONS.has(identity.userVersion))
|
|
139
|
+
return "migrate";
|
|
140
|
+
throw new StoreSchemaUnsupportedError({
|
|
141
|
+
applicationId: identity.applicationId,
|
|
142
|
+
userVersion: identity.userVersion,
|
|
143
|
+
detail: identity.userVersion > ENGINE_SCHEMA_VERSION
|
|
144
|
+
? "the database was written by a newer engine"
|
|
145
|
+
: "no migration path exists from this schema version",
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/** Create a fresh schema or apply the migration path; never touches a refused file. */
|
|
149
|
+
export function ensureSchema(db, now = () => new Date()) {
|
|
150
|
+
const disposition = assertSchemaServable(readSchemaIdentity(db));
|
|
151
|
+
if (disposition === "current")
|
|
152
|
+
return;
|
|
153
|
+
db.exec("BEGIN IMMEDIATE");
|
|
154
|
+
try {
|
|
155
|
+
if (disposition === "fresh") {
|
|
156
|
+
db.exec(ENGINE_SCHEMA_SQL);
|
|
157
|
+
db.exec(`PRAGMA application_id=${ENGINE_APPLICATION_ID}`);
|
|
158
|
+
const meta = db.prepare("INSERT INTO meta(key, value) VALUES(?, ?)");
|
|
159
|
+
meta.run("schema_version", String(ENGINE_SCHEMA_VERSION));
|
|
160
|
+
meta.run("store_id", randomUUID());
|
|
161
|
+
meta.run("created_at", now().toISOString());
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
let version = readSchemaIdentity(db).userVersion;
|
|
165
|
+
while (version < ENGINE_SCHEMA_VERSION) {
|
|
166
|
+
const step = SCHEMA_MIGRATIONS.get(version);
|
|
167
|
+
if (!step)
|
|
168
|
+
throw new Error(`schema migration from version ${version} is missing`);
|
|
169
|
+
step(db);
|
|
170
|
+
version += 1;
|
|
171
|
+
}
|
|
172
|
+
db.prepare("UPDATE meta SET value = ? WHERE key = 'schema_version'").run(String(ENGINE_SCHEMA_VERSION));
|
|
173
|
+
}
|
|
174
|
+
db.exec(`PRAGMA user_version=${ENGINE_SCHEMA_VERSION}`);
|
|
175
|
+
db.exec("COMMIT");
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
try {
|
|
179
|
+
db.exec("ROLLBACK");
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
/* the original failure is the report */
|
|
183
|
+
}
|
|
184
|
+
throw error;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { StoreEvent } from "../store-contracts.js";
|
|
2
|
+
import type { SqlWriteContext } from "./mutation.js";
|
|
3
|
+
/** Legacy setup binding bytes are shared by create and extension events. */
|
|
4
|
+
export interface SetupCreateBinding {
|
|
5
|
+
keyDigest: string;
|
|
6
|
+
requestDigest: string;
|
|
7
|
+
jobId: string;
|
|
8
|
+
}
|
|
9
|
+
type SetupJournalPayload = {
|
|
10
|
+
job?: unknown;
|
|
11
|
+
binding?: unknown;
|
|
12
|
+
};
|
|
13
|
+
export declare function parseSetupBinding(value: unknown): SetupCreateBinding | null;
|
|
14
|
+
export declare function setupIdempotencyConflict(): Error;
|
|
15
|
+
export declare function bindSetupInTx(sql: SqlWriteContext, pid: number, binding: SetupCreateBinding, operation: string, createdAt: string): void;
|
|
16
|
+
/** Pure PR-D import seam. Legacy payloads contain no operation discriminator;
|
|
17
|
+
* that absence stays explicit metadata and never affects opaque-digest replay. */
|
|
18
|
+
export declare function importSetupBindingInTx(sql: SqlWriteContext, pid: number, record: Pick<StoreEvent<SetupJournalPayload>, "type" | "time" | "payload">): void;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=setup-bindings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-bindings.d.ts","sourceRoot":"","sources":["../../src/store/setup-bindings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD,4EAA4E;AAC5E,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AACD,KAAK,mBAAmB,GAAG;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEhE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAiB3E;AAED,wBAAgB,wBAAwB,IAAI,KAAK,CAKhD;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,IAAI,CAWN;AAED;kFACkF;AAClF,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,GACzE,IAAI,CAWN"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { bindIdempotencyInTx } from "./idempotency.js";
|
|
2
|
+
export function parseSetupBinding(value) {
|
|
3
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
4
|
+
return null;
|
|
5
|
+
const row = value;
|
|
6
|
+
if (typeof row["keyDigest"] !== "string" ||
|
|
7
|
+
!/^sha256:[a-f0-9]{64}$/.test(row["keyDigest"]) ||
|
|
8
|
+
typeof row["requestDigest"] !== "string" ||
|
|
9
|
+
!/^sha256:[a-f0-9]{64}$/.test(row["requestDigest"]) ||
|
|
10
|
+
typeof row["jobId"] !== "string" ||
|
|
11
|
+
!/^setup-[A-Za-z0-9-]+$/.test(row["jobId"]))
|
|
12
|
+
return null;
|
|
13
|
+
return {
|
|
14
|
+
keyDigest: row["keyDigest"],
|
|
15
|
+
requestDigest: row["requestDigest"],
|
|
16
|
+
jobId: row["jobId"],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function setupIdempotencyConflict() {
|
|
20
|
+
return Object.assign(new Error("Idempotency-Key was already used with a different request"), {
|
|
21
|
+
code: "idempotency_conflict",
|
|
22
|
+
status: 409,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
export function bindSetupInTx(sql, pid, binding, operation, createdAt) {
|
|
26
|
+
const stored = bindIdempotencyInTx(sql, {
|
|
27
|
+
owner: "setup",
|
|
28
|
+
pid,
|
|
29
|
+
keyDigest: binding.keyDigest,
|
|
30
|
+
operation,
|
|
31
|
+
requestDigest: binding.requestDigest,
|
|
32
|
+
targetId: binding.jobId,
|
|
33
|
+
createdAt,
|
|
34
|
+
});
|
|
35
|
+
if (stored.targetId !== binding.jobId)
|
|
36
|
+
throw setupIdempotencyConflict();
|
|
37
|
+
}
|
|
38
|
+
/** Pure PR-D import seam. Legacy payloads contain no operation discriminator;
|
|
39
|
+
* that absence stays explicit metadata and never affects opaque-digest replay. */
|
|
40
|
+
export function importSetupBindingInTx(sql, pid, record) {
|
|
41
|
+
if (record.type !== "setup.job.saved" && record.type !== "setup.job.create_bound")
|
|
42
|
+
return;
|
|
43
|
+
if (record.type === "setup.job.saved" && record.payload?.binding === undefined)
|
|
44
|
+
return;
|
|
45
|
+
const binding = parseSetupBinding(record.payload?.binding);
|
|
46
|
+
if (!binding ||
|
|
47
|
+
(record.type === "setup.job.saved" &&
|
|
48
|
+
record.payload.job?.jobId !== binding.jobId))
|
|
49
|
+
throw new Error("invalid imported setup binding");
|
|
50
|
+
bindSetupInTx(sql, pid, binding, "setup.legacy_unknown", record.time);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=setup-bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-bindings.js","sourceRoot":"","sources":["../../src/store/setup-bindings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAUvD,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,IACE,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,QAAQ;QACpC,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC,eAAe,CAAC,KAAK,QAAQ;QACxC,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACnD,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ;QAChC,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE3C,OAAO,IAAI,CAAC;IACd,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC;QAC3B,aAAa,EAAE,GAAG,CAAC,eAAe,CAAC;QACnC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC;KACpB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2DAA2D,CAAC,EAAE;QAC3F,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,GAAG;KACZ,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,GAAoB,EACpB,GAAW,EACX,OAA2B,EAC3B,SAAiB,EACjB,SAAiB;IAEjB,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,EAAE;QACtC,KAAK,EAAE,OAAO;QACd,GAAG;QACH,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS;QACT,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,QAAQ,EAAE,OAAO,CAAC,KAAK;QACvB,SAAS;KACV,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,KAAK;QAAE,MAAM,wBAAwB,EAAE,CAAC;AAC1E,CAAC;AAED;kFACkF;AAClF,MAAM,UAAU,sBAAsB,CACpC,GAAoB,EACpB,GAAW,EACX,MAA0E;IAE1E,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAwB;QAAE,OAAO;IAC1F,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS;QAAE,OAAO;IACvF,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3D,IACE,CAAC,OAAO;QACR,CAAC,MAAM,CAAC,IAAI,KAAK,iBAAiB;YAC/B,MAAM,CAAC,OAAO,CAAC,GAAuC,EAAE,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC;QAEnF,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { RunEvent, RunTelemetry } from "@claudexor/schema";
|
|
2
|
+
import type { CommandBackend } from "../command-authority.js";
|
|
3
|
+
import type { OperatorDecisionRecord } from "../operator-decisions.js";
|
|
4
|
+
import type { ProjectThreadPort } from "../store-contracts.js";
|
|
5
|
+
import { SqlCommandQueries } from "./command-queries.js";
|
|
6
|
+
import { SqlCommandPruner } from "./command-prune.js";
|
|
7
|
+
import { SqlCommandStore } from "./commands.js";
|
|
8
|
+
import { SqlEventLedger } from "./event-store.js";
|
|
9
|
+
import { SqlInteractionStore } from "./interactions.js";
|
|
10
|
+
import type { Obligations } from "./obligations.js";
|
|
11
|
+
import { type PartitionGeneration } from "./partitions.js";
|
|
12
|
+
import { SqlProjectRouter } from "./project-router.js";
|
|
13
|
+
import type { SqlProjectStore } from "./projects.js";
|
|
14
|
+
import type { SqlTerminalFiles } from "./terminal-files.js";
|
|
15
|
+
/** One addressed router over current generations. These lightweight writers
|
|
16
|
+
* carry no restored history or separate partition cache. */
|
|
17
|
+
export declare class SqlCommandRouter extends SqlProjectRouter implements CommandBackend, ProjectThreadPort {
|
|
18
|
+
private readonly persistence;
|
|
19
|
+
readonly queries: SqlCommandQueries;
|
|
20
|
+
constructor(projects: SqlProjectStore, persistence: {
|
|
21
|
+
obligations: Obligations;
|
|
22
|
+
terminalFiles: SqlTerminalFiles;
|
|
23
|
+
pruner: SqlCommandPruner;
|
|
24
|
+
});
|
|
25
|
+
commandStore(generation: PartitionGeneration): SqlCommandStore;
|
|
26
|
+
current(): SqlCommandStore;
|
|
27
|
+
forRequest(params: unknown): SqlCommandStore;
|
|
28
|
+
findById(id: string): SqlCommandStore | undefined;
|
|
29
|
+
pruneHistory(cap: number, retentionMs: number, now: number): string[];
|
|
30
|
+
ledger(generation: Pick<PartitionGeneration, "pid" | "name" | "epoch">): SqlEventLedger;
|
|
31
|
+
interactionsForRequest(params: unknown): SqlInteractionStore;
|
|
32
|
+
interactionsForRun(runId: string): SqlInteractionStore | undefined;
|
|
33
|
+
private decisions;
|
|
34
|
+
operatorDecision(params: unknown, runId: string): OperatorDecisionRecord | null;
|
|
35
|
+
findOperatorDecisionByIdempotency(params: unknown, runId: string, input: {
|
|
36
|
+
key: string;
|
|
37
|
+
client: string;
|
|
38
|
+
request: unknown;
|
|
39
|
+
}): OperatorDecisionRecord | null;
|
|
40
|
+
recordOperatorDecision(params: unknown, decision: OperatorDecisionRecord, input?: {
|
|
41
|
+
key: string;
|
|
42
|
+
client: string;
|
|
43
|
+
request: unknown;
|
|
44
|
+
}): import("../operator-decisions.js").RecordedOperatorDecision;
|
|
45
|
+
recordRunEvent(params: unknown, event: RunEvent): RunEvent;
|
|
46
|
+
persistTerminal(jobId: string, event: RunEvent, telemetry: RunTelemetry | null): {
|
|
47
|
+
state: "materialized";
|
|
48
|
+
} | {
|
|
49
|
+
state: "pending";
|
|
50
|
+
error: unknown;
|
|
51
|
+
};
|
|
52
|
+
beginDelivery(params: unknown, input: {
|
|
53
|
+
key: string;
|
|
54
|
+
client: string;
|
|
55
|
+
operation: string;
|
|
56
|
+
request: unknown;
|
|
57
|
+
}): {
|
|
58
|
+
id: string;
|
|
59
|
+
state: import("../job-record.js").JobState;
|
|
60
|
+
params: unknown;
|
|
61
|
+
result?: unknown;
|
|
62
|
+
error?: string;
|
|
63
|
+
errorCode?: string;
|
|
64
|
+
errorStatus?: number;
|
|
65
|
+
errorRetryable?: boolean;
|
|
66
|
+
errorRequiredActions?: string[];
|
|
67
|
+
errorContext?: Record<string, unknown>;
|
|
68
|
+
createdAt: string;
|
|
69
|
+
runId?: string;
|
|
70
|
+
taskId?: string;
|
|
71
|
+
runDir?: string;
|
|
72
|
+
startedAt?: string;
|
|
73
|
+
finishedAt?: string;
|
|
74
|
+
reused: boolean;
|
|
75
|
+
};
|
|
76
|
+
completeDelivery(id: string, result: unknown): void;
|
|
77
|
+
failDelivery(id: string, error: unknown): void;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=sql-command-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-command-router.d.ts","sourceRoot":"","sources":["../../src/store/sql-command-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { isJournaledRunEvent } from "../journaled-run-events.js";
|
|
2
|
+
import { beginDeliveryCommand, completeDeliveryCommand, failDeliveryCommand, } from "../delivery-command.js";
|
|
3
|
+
import { SqlCommandQueries } from "./command-queries.js";
|
|
4
|
+
import { SqlCommandStore } from "./commands.js";
|
|
5
|
+
import { SqlEventLedger } from "./event-store.js";
|
|
6
|
+
import { isServedPid } from "./generations.js";
|
|
7
|
+
import { SqlInteractionStore } from "./interactions.js";
|
|
8
|
+
import { SqlOperatorDecisionStore } from "./operator-decisions.js";
|
|
9
|
+
import { partitionById } from "./partitions.js";
|
|
10
|
+
import { SqlProjectRouter } from "./project-router.js";
|
|
11
|
+
import { SqlRunEventStore } from "./run-events.js";
|
|
12
|
+
/** One addressed router over current generations. These lightweight writers
|
|
13
|
+
* carry no restored history or separate partition cache. */
|
|
14
|
+
export class SqlCommandRouter extends SqlProjectRouter {
|
|
15
|
+
persistence;
|
|
16
|
+
queries;
|
|
17
|
+
constructor(projects, persistence) {
|
|
18
|
+
super(projects);
|
|
19
|
+
this.persistence = persistence;
|
|
20
|
+
this.queries = new SqlCommandQueries(this.store, projects.blobs);
|
|
21
|
+
}
|
|
22
|
+
commandStore(generation) {
|
|
23
|
+
return new SqlCommandStore(this.store, this.projects.blobs, generation, {
|
|
24
|
+
...this.persistence,
|
|
25
|
+
isLive: () => isServedPid(this.store, generation.pid),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
current() {
|
|
29
|
+
return this.commandStore(this.projects.global());
|
|
30
|
+
}
|
|
31
|
+
forRequest(params) {
|
|
32
|
+
return this.commandStore(this.generationForRequest(params));
|
|
33
|
+
}
|
|
34
|
+
findById(id) {
|
|
35
|
+
const generation = this.generationForCommand(id);
|
|
36
|
+
return generation ? this.commandStore(generation) : undefined;
|
|
37
|
+
}
|
|
38
|
+
pruneHistory(cap, retentionMs, now) {
|
|
39
|
+
return this.persistence.pruner.pruneHistory(cap, retentionMs, now);
|
|
40
|
+
}
|
|
41
|
+
ledger(generation) {
|
|
42
|
+
return new SqlEventLedger(this.store, this.projects.blobs, generation);
|
|
43
|
+
}
|
|
44
|
+
interactionsForRequest(params) {
|
|
45
|
+
return new SqlInteractionStore(this.store, this.ledger(this.generationForRequest(params)));
|
|
46
|
+
}
|
|
47
|
+
interactionsForRun(runId) {
|
|
48
|
+
// The interaction index also addresses a retained imported interaction
|
|
49
|
+
// whose command is absent, matching the former store lookup semantics.
|
|
50
|
+
const rows = this.store
|
|
51
|
+
.prepare("SELECT DISTINCT pid FROM interaction WHERE run_id=?")
|
|
52
|
+
.all(runId);
|
|
53
|
+
const row = rows.find(({ pid }) => isServedPid(this.store, pid));
|
|
54
|
+
const generation = row ? partitionById(this.store, row.pid) : null;
|
|
55
|
+
return generation ? new SqlInteractionStore(this.store, this.ledger(generation)) : undefined;
|
|
56
|
+
}
|
|
57
|
+
decisions(params) {
|
|
58
|
+
return new SqlOperatorDecisionStore(this.store, this.ledger(this.generationForRequest(params)));
|
|
59
|
+
}
|
|
60
|
+
operatorDecision(params, runId) {
|
|
61
|
+
return this.decisions(params).get(runId);
|
|
62
|
+
}
|
|
63
|
+
findOperatorDecisionByIdempotency(params, runId, input) {
|
|
64
|
+
return this.decisions(params).findByIdempotency(runId, input);
|
|
65
|
+
}
|
|
66
|
+
recordOperatorDecision(params, decision, input) {
|
|
67
|
+
return this.decisions(params).record(decision, input);
|
|
68
|
+
}
|
|
69
|
+
recordRunEvent(params, event) {
|
|
70
|
+
if (isJournaledRunEvent(event))
|
|
71
|
+
new SqlRunEventStore(this.ledger(this.generationForRequest(params))).record(event);
|
|
72
|
+
// The producer owns the original event for its file and live bus. A
|
|
73
|
+
// filtered event cannot fail merely because its old project is unavailable.
|
|
74
|
+
return event;
|
|
75
|
+
}
|
|
76
|
+
persistTerminal(jobId, event, telemetry) {
|
|
77
|
+
const owner = this.findById(jobId);
|
|
78
|
+
if (!owner)
|
|
79
|
+
throw new Error(`terminal authority lost command ${jobId}`);
|
|
80
|
+
return owner.persistTerminal(jobId, event, telemetry);
|
|
81
|
+
}
|
|
82
|
+
beginDelivery(params, input) {
|
|
83
|
+
return beginDeliveryCommand(this.forRequest(params), params, input);
|
|
84
|
+
}
|
|
85
|
+
completeDelivery(id, result) {
|
|
86
|
+
completeDeliveryCommand(this.findById(id), id, result);
|
|
87
|
+
}
|
|
88
|
+
failDelivery(id, error) {
|
|
89
|
+
failDeliveryCommand(this.findById(id), id, error);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=sql-command-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-command-router.js","sourceRoot":"","sources":["../../src/store/sql-command-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { InteractionRegistry } from "../interactions.js";
|
|
2
|
+
import { LiveInputRegistry } from "../live-input.js";
|
|
3
|
+
import { QuotaRegistry } from "../quota-registry.js";
|
|
4
|
+
import type { QuotaPacerStateStore } from "../quota-poll-pacer.js";
|
|
5
|
+
import type { QuotaRefresher, QuotaVendorRefresher } from "../quota-poll-lanes.js";
|
|
6
|
+
import type { QuotaSubjectUniverse } from "../quota-registry.js";
|
|
7
|
+
import { BlobFiles } from "./blob-files.js";
|
|
8
|
+
import { SqlCommandPruner } from "./command-prune.js";
|
|
9
|
+
import type { SqlEventLedger } from "./event-store.js";
|
|
10
|
+
import { MaintenanceController, type MaintenanceControllerOptions } from "./maintenance.js";
|
|
11
|
+
import { Obligations } from "./obligations.js";
|
|
12
|
+
import { SqlProjectStore } from "./projects.js";
|
|
13
|
+
import { SqlPurgeFiles, type PurgeFilesEffect } from "./purge-files.js";
|
|
14
|
+
import { SqlResourceStore } from "./resources.js";
|
|
15
|
+
import { SqlCommandRouter } from "./sql-command-router.js";
|
|
16
|
+
import type { EngineStore } from "./store.js";
|
|
17
|
+
import { SqlTerminalFiles } from "./terminal-files.js";
|
|
18
|
+
export interface SqlDaemonServicesOptions {
|
|
19
|
+
purgeFiles: PurgeFilesEffect;
|
|
20
|
+
log?: (line: string) => void;
|
|
21
|
+
refreshers?: readonly (QuotaRefresher | QuotaVendorRefresher)[];
|
|
22
|
+
subjects?: QuotaSubjectUniverse;
|
|
23
|
+
pacerStore?: QuotaPacerStateStore;
|
|
24
|
+
maintenance?: Omit<MaintenanceControllerOptions, "blobs">;
|
|
25
|
+
}
|
|
26
|
+
/** Builds one storage graph over an opened store. Global projections validate
|
|
27
|
+
* lazily, so a recovery-required registry cannot hide the recovery owners.
|
|
28
|
+
* Startup owns admission; this factory discovers no roots or second backend. */
|
|
29
|
+
export declare function createSqlDaemonServices(store: EngineStore, options: SqlDaemonServicesOptions): {
|
|
30
|
+
store: EngineStore;
|
|
31
|
+
blobs: BlobFiles;
|
|
32
|
+
obligations: Obligations;
|
|
33
|
+
terminalFiles: SqlTerminalFiles;
|
|
34
|
+
pruner: SqlCommandPruner;
|
|
35
|
+
projects: SqlProjectStore;
|
|
36
|
+
threads: SqlCommandRouter;
|
|
37
|
+
commands: SqlCommandRouter;
|
|
38
|
+
readonly globalEvents: SqlEventLedger;
|
|
39
|
+
resources: SqlResourceStore;
|
|
40
|
+
purgeFiles: SqlPurgeFiles;
|
|
41
|
+
maintenance: MaintenanceController;
|
|
42
|
+
readonly quota: QuotaRegistry;
|
|
43
|
+
interactions: InteractionRegistry;
|
|
44
|
+
liveInputs: LiveInputRegistry;
|
|
45
|
+
/** Called by the existing global recovery replacement owner after it
|
|
46
|
+
* drains setup and changes the registry generation. Publish both owners
|
|
47
|
+
* together only after the new quota projection validates. */
|
|
48
|
+
rebindGlobal: () => void;
|
|
49
|
+
journalEvents: (partition: string, afterCursor?: string) => {
|
|
50
|
+
schemaVersion: 1;
|
|
51
|
+
cursor: string;
|
|
52
|
+
partition: string;
|
|
53
|
+
type: string;
|
|
54
|
+
observedAt: string;
|
|
55
|
+
payload?: unknown;
|
|
56
|
+
}[];
|
|
57
|
+
recoverAfterStartup(): Promise<import("./obligations.js").ObligationCompletionReceipt>;
|
|
58
|
+
/** Caller closes transports/runners first, then this graph, then its store. */
|
|
59
|
+
close(): Promise<void>;
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=sql-daemon-services.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-daemon-services.d.ts","sourceRoot":"","sources":["../../src/store/sql-daemon-services.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIvD,OAAO,EAAE,qBAAqB,EAAE,KAAK,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAyB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,SAAS,CAAC,cAAc,GAAG,oBAAoB,CAAC,EAAE,CAAC;IAChE,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,WAAW,CAAC,EAAE,IAAI,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;CAC3D;AAED;;gFAEgF;AAChF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,wBAAwB;;;;;;;;;;;;;;;;IA8DzF;;iEAE6D;;+BAElC,MAAM,gBAAgB,MAAM;;;;;;;;;IAuBvD,+EAA+E;;EAclF"}
|