@claudexor/daemon 3.25.1 → 4.0.1
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 +95 -0
- package/dist/store/retention.d.ts.map +1 -0
- package/dist/store/retention.js +173 -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 @@
|
|
|
1
|
+
{"version":3,"file":"sql-recovery.js","sourceRoot":"","sources":["../../src/store/sql-recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { BlobFiles } from "./blob-files.js";
|
|
2
|
+
import type { PartitionGeneration } from "./partitions.js";
|
|
3
|
+
import type { SqlRecoveryProjection } from "./sql-recovery.js";
|
|
4
|
+
import type { EngineStore } from "./store.js";
|
|
5
|
+
/** Explicit recovery validation reuses the domain's original parsers. This
|
|
6
|
+
* cold operation may read the requested partition's full bodies; admission,
|
|
7
|
+
* status and ordinary collection reads never call it. */
|
|
8
|
+
export declare function sqlRecoveryProjections(store: EngineStore, blobs: BlobFiles, generation: PartitionGeneration, validateSetup: (generation: PartitionGeneration) => void): SqlRecoveryProjection[];
|
|
9
|
+
//# sourceMappingURL=sql-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-validation.d.ts","sourceRoot":"","sources":["../../src/store/sql-validation.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;yDAEyD;AACzD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,mBAAmB,EAC/B,aAAa,EAAE,CAAC,UAAU,EAAE,mBAAmB,KAAK,IAAI,GACvD,qBAAqB,EAAE,CA+FzB"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { ControlPendingInteraction, LaneCheckpoint, Project, RunEvent, Session, Thread, ThreadTurn, } from "@claudexor/schema";
|
|
2
|
+
import { validateCommandRecord } from "../command-store.js";
|
|
3
|
+
import { parseInteractionResolution } from "../interactions.js";
|
|
4
|
+
import { parseOperatorDecision } from "../operator-decisions.js";
|
|
5
|
+
import { QuotaRegistry } from "../quota-registry.js";
|
|
6
|
+
import { hydrateCommand } from "./command-rows.js";
|
|
7
|
+
import { SqlEventLedger } from "./event-store.js";
|
|
8
|
+
/** Explicit recovery validation reuses the domain's original parsers. This
|
|
9
|
+
* cold operation may read the requested partition's full bodies; admission,
|
|
10
|
+
* status and ordinary collection reads never call it. */
|
|
11
|
+
export function sqlRecoveryProjections(store, blobs, generation, validateSetup) {
|
|
12
|
+
const body = (value) => JSON.parse(Buffer.from(value).toString("utf8"));
|
|
13
|
+
const typedRows = (table, schema) => {
|
|
14
|
+
const rows = store
|
|
15
|
+
.prepare(`SELECT body FROM ${table} WHERE pid=?`)
|
|
16
|
+
.all(generation.pid);
|
|
17
|
+
for (const row of rows)
|
|
18
|
+
schema.parse(body(row.body));
|
|
19
|
+
};
|
|
20
|
+
const bindings = (owner, table, column = "id") => {
|
|
21
|
+
const row = store
|
|
22
|
+
.prepare(`SELECT i.target_id FROM idempotency i LEFT JOIN ${table} t
|
|
23
|
+
ON t.${column}=i.target_id AND t.pid=i.pid WHERE i.owner=? AND i.pid=? AND t.${column} IS NULL LIMIT 1`)
|
|
24
|
+
.get(owner, generation.pid);
|
|
25
|
+
if (row)
|
|
26
|
+
throw new Error(`${owner} idempotency index is dangling`);
|
|
27
|
+
};
|
|
28
|
+
const projections = [
|
|
29
|
+
{
|
|
30
|
+
name: "commands",
|
|
31
|
+
validate: () => {
|
|
32
|
+
for (const row of store
|
|
33
|
+
.prepare("SELECT * FROM command WHERE pid=?")
|
|
34
|
+
.all(generation.pid))
|
|
35
|
+
validateCommandRecord(hydrateCommand(row, blobs));
|
|
36
|
+
bindings("command", "command");
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: "threads",
|
|
41
|
+
validate: () => {
|
|
42
|
+
typedRows("thread", Thread);
|
|
43
|
+
typedRows("session", Session);
|
|
44
|
+
typedRows("lane_checkpoint", LaneCheckpoint);
|
|
45
|
+
for (const row of store
|
|
46
|
+
.prepare("SELECT body,prompt_sha FROM turn WHERE pid=?")
|
|
47
|
+
.all(generation.pid))
|
|
48
|
+
ThreadTurn.parse({
|
|
49
|
+
...body(row.body),
|
|
50
|
+
prompt: blobs.read(row.prompt_sha).toString("utf8"),
|
|
51
|
+
});
|
|
52
|
+
bindings("thread", "thread");
|
|
53
|
+
bindings("turn", "turn");
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: "interactions",
|
|
58
|
+
validate: () => {
|
|
59
|
+
for (const row of store
|
|
60
|
+
.prepare("SELECT request,resolution FROM interaction WHERE pid=?")
|
|
61
|
+
.all(generation.pid)) {
|
|
62
|
+
ControlPendingInteraction.parse(body(row.request));
|
|
63
|
+
if (row.resolution)
|
|
64
|
+
parseInteractionResolution(body(row.resolution));
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "decisions",
|
|
70
|
+
validate: () => {
|
|
71
|
+
for (const row of store
|
|
72
|
+
.prepare("SELECT body FROM operator_decision WHERE pid=?")
|
|
73
|
+
.all(generation.pid))
|
|
74
|
+
parseOperatorDecision(body(row.body));
|
|
75
|
+
bindings("decision", "operator_decision", "run_id");
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: "run-events",
|
|
80
|
+
validate: () => {
|
|
81
|
+
for (const row of store
|
|
82
|
+
.prepare("SELECT event FROM run_terminal WHERE pid=?")
|
|
83
|
+
.all(generation.pid))
|
|
84
|
+
RunEvent.parse(body(row.event));
|
|
85
|
+
for (const event of new SqlEventLedger(store, blobs, generation).records(0, ["run.event"]))
|
|
86
|
+
RunEvent.parse(event.payload);
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
];
|
|
90
|
+
if (generation.name === "global")
|
|
91
|
+
projections.push({
|
|
92
|
+
name: "projects",
|
|
93
|
+
validate: () => {
|
|
94
|
+
typedRows("project", Project);
|
|
95
|
+
bindings("project", "project");
|
|
96
|
+
},
|
|
97
|
+
}, {
|
|
98
|
+
name: "quota",
|
|
99
|
+
validate: () => new QuotaRegistry(new SqlEventLedger(store, blobs, generation)).validateProjection(),
|
|
100
|
+
}, { name: "setup", validate: () => validateSetup(generation) });
|
|
101
|
+
return projections;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=sql-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-validation.js","sourceRoot":"","sources":["../../src/store/sql-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { StatementSync } from "node:sqlite";
|
|
2
|
+
type Failure = (error: unknown, context: string) => unknown;
|
|
3
|
+
/** Observe execution on the native object, preserving its prototype, options,
|
|
4
|
+
* accessors and bindings. A prepared statement may fail long after prepare(). */
|
|
5
|
+
export declare function observeStatement(statement: StatementSync, failure: Failure): StatementSync;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=statement-observer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statement-observer.d.ts","sourceRoot":"","sources":["../../src/store/statement-observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,KAAK,OAAO,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;AAE5D;iFACiF;AACjF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,CAiB1F"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** Observe execution on the native object, preserving its prototype, options,
|
|
2
|
+
* accessors and bindings. A prepared statement may fail long after prepare(). */
|
|
3
|
+
export function observeStatement(statement, failure) {
|
|
4
|
+
for (const method of ["get", "all", "run", "iterate"]) {
|
|
5
|
+
const native = statement[method];
|
|
6
|
+
Object.defineProperty(statement, method, {
|
|
7
|
+
configurable: true,
|
|
8
|
+
writable: true,
|
|
9
|
+
value: function (...args) {
|
|
10
|
+
try {
|
|
11
|
+
const value = Reflect.apply(native, this, args);
|
|
12
|
+
return method === "iterate" ? observeIterator(value, failure) : value;
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
throw failure(error, `executing statement.${method}`);
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return statement;
|
|
21
|
+
}
|
|
22
|
+
/** SQLite steps lazily in next(). Keep the actual iterator and its native
|
|
23
|
+
* return/reset behavior, including early for-of exit and iterable identity. */
|
|
24
|
+
function observeIterator(iterator, failure) {
|
|
25
|
+
for (const method of ["next", "return"]) {
|
|
26
|
+
const native = iterator[method];
|
|
27
|
+
if (!native)
|
|
28
|
+
continue;
|
|
29
|
+
Object.defineProperty(iterator, method, {
|
|
30
|
+
configurable: true,
|
|
31
|
+
writable: true,
|
|
32
|
+
value: function (...args) {
|
|
33
|
+
try {
|
|
34
|
+
return Reflect.apply(native, this, args);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
throw failure(error, `executing statement iterator.${method}`);
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return iterator;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=statement-observer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statement-observer.js","sourceRoot":"","sources":["../../src/store/statement-observer.ts"],"names":[],"mappings":"AAIA;iFACiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,SAAwB,EAAE,OAAgB;IACzE,KAAK,MAAM,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAU,EAAE,CAAC;QAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE;YACvC,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,UAA+B,GAAG,IAAe;gBACtD,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAChD,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACxE,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,OAAO,CAAC,KAAK,EAAE,uBAAuB,MAAM,EAAE,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;+EAC+E;AAC/E,SAAS,eAAe,CAA8B,QAAW,EAAE,OAAgB;IACjF,KAAK,MAAM,MAAM,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAU,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE;YACtC,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,UAAmB,GAAG,IAAe;gBAC1C,IAAI,CAAC;oBACH,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC3C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,OAAO,CAAC,KAAK,EAAE,gCAAgC,MAAM,EAAE,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { DatabaseSync, StatementSync } from "node:sqlite";
|
|
2
|
+
import { StoreCorruptError } from "./errors.js";
|
|
3
|
+
import { FlusherController, type FlusherFacts } from "./flusher.js";
|
|
4
|
+
import type { FlusherHooks, FlusherPassReport } from "./flusher-protocol.js";
|
|
5
|
+
import { OwnerGenerations } from "./owner-generations.js";
|
|
6
|
+
import { type EngineRuntime, type EngineRuntimeProbe } from "./runtime.js";
|
|
7
|
+
export interface EngineStoreOptions {
|
|
8
|
+
/** The daemon data root; the store lives at `<daemonDir>/engine.sqlite`. */
|
|
9
|
+
daemonDir: string;
|
|
10
|
+
/** Explicit worker entry (tests: the built `dist/store/flusher-worker.js`). */
|
|
11
|
+
workerEntry?: string;
|
|
12
|
+
flusherHooks?: FlusherHooks;
|
|
13
|
+
now?: () => Date;
|
|
14
|
+
log?: (line: string) => void;
|
|
15
|
+
/** Synchronous physical-fault notification; the caller owns serving admission. */
|
|
16
|
+
onCorrupt?: (problem: StoreCorruptError) => void;
|
|
17
|
+
runtime?: EngineRuntimeProbe;
|
|
18
|
+
}
|
|
19
|
+
export interface EngineStorePaths {
|
|
20
|
+
database: string;
|
|
21
|
+
wal: string;
|
|
22
|
+
resourceStore: string;
|
|
23
|
+
blobs: string;
|
|
24
|
+
uploads: string;
|
|
25
|
+
}
|
|
26
|
+
/** Facts for `GET /v2/daemon/status`: measurements, never verdicts. */
|
|
27
|
+
export interface StoreFacts {
|
|
28
|
+
flusher: FlusherFacts;
|
|
29
|
+
flush_lag_ms: number;
|
|
30
|
+
last_barrier_at: string | null;
|
|
31
|
+
interval_ms: number;
|
|
32
|
+
wal_bytes: number | null;
|
|
33
|
+
busy_waits: number;
|
|
34
|
+
obligations_open: number | null;
|
|
35
|
+
integrity: "pending" | "ok" | "failed";
|
|
36
|
+
/** Filled by the importer (PR-D); the store core never migrates. */
|
|
37
|
+
migration: null;
|
|
38
|
+
}
|
|
39
|
+
export type SyncedListener = (generation: number, report: FlusherPassReport) => void;
|
|
40
|
+
/**
|
|
41
|
+
* The engine store adapter (SYNTHESIS_R5 §2, §4.5, §6.1): one `node:sqlite`
|
|
42
|
+
* connection on the request thread — the single row writer — plus the flusher
|
|
43
|
+
* worker that owns the power-loss barrier. `transaction(fn)` is the only way
|
|
44
|
+
* to write: BEGIN IMMEDIATE … COMMIT, ROLLBACK in `finally`, synchronous by
|
|
45
|
+
* contract (a Promise-returning `fn` is rejected). The request thread calls no
|
|
46
|
+
* Node storage-sync primitive; external files are written `O_DSYNC` and their
|
|
47
|
+
* directories are registered for the flusher's pass.
|
|
48
|
+
*/
|
|
49
|
+
export declare class EngineStore {
|
|
50
|
+
private readonly options;
|
|
51
|
+
readonly paths: EngineStorePaths;
|
|
52
|
+
readonly runtime: EngineRuntime;
|
|
53
|
+
/** One owner-change history for every file helper using this connection. */
|
|
54
|
+
readonly owners: OwnerGenerations;
|
|
55
|
+
private readonly connection;
|
|
56
|
+
private readonly statements;
|
|
57
|
+
private readonly flusher;
|
|
58
|
+
private readonly syncedListeners;
|
|
59
|
+
/** Clock for rows the store itself stamps (obligations, meta); injectable. */
|
|
60
|
+
readonly now: () => Date;
|
|
61
|
+
private busyWaits;
|
|
62
|
+
private integrityState;
|
|
63
|
+
private closed;
|
|
64
|
+
private closing;
|
|
65
|
+
private constructor();
|
|
66
|
+
/**
|
|
67
|
+
* Prove the runtime, open the database, apply and read back the pragmas,
|
|
68
|
+
* refuse a foreign/unknown schema before any write, create a fresh schema,
|
|
69
|
+
* then start the flusher.
|
|
70
|
+
*/
|
|
71
|
+
static open(options: EngineStoreOptions): Promise<EngineStore>;
|
|
72
|
+
/** The request-thread connection, for reads and prepared statements. */
|
|
73
|
+
get db(): DatabaseSync;
|
|
74
|
+
/** Prepared statements are cached per SQL text for the connection's life. */
|
|
75
|
+
prepare(sql: string): StatementSync;
|
|
76
|
+
exec(sql: string): void;
|
|
77
|
+
/** True while a `transaction(fn)` body runs on this connection. */
|
|
78
|
+
get inTransaction(): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* BEGIN IMMEDIATE … COMMIT with ROLLBACK in `finally`. `fn` must be
|
|
81
|
+
* synchronous: returning a thenable rolls the transaction back and throws,
|
|
82
|
+
* because an await inside a transaction would hold the writer lock across
|
|
83
|
+
* the event loop and break "returned means committed".
|
|
84
|
+
*/
|
|
85
|
+
transaction<T>(fn: () => T): T;
|
|
86
|
+
/** A `{g, dir}` registration after a rename/link in `dir` (SYNTHESIS_R5 §4.4). */
|
|
87
|
+
registerExternal(dir: string): number;
|
|
88
|
+
/** A generation covering every commit so far, acknowledged by the next pass (no waiter). */
|
|
89
|
+
mark(): number;
|
|
90
|
+
/** Resolves after the next pass that started after this call proved its barrier. */
|
|
91
|
+
flushed(): Promise<void>;
|
|
92
|
+
/** Resolves once the pass covering an already issued generation proved its barrier. */
|
|
93
|
+
synced(generation: number): Promise<void>;
|
|
94
|
+
/** The last generation a pass acknowledged. */
|
|
95
|
+
get acknowledgedGeneration(): number;
|
|
96
|
+
/** Observe `synced(G)` (obligations clear themselves through this). */
|
|
97
|
+
onSynced(listener: SyncedListener): () => void;
|
|
98
|
+
/** Recorded by the maintenance controller after its integrity check. */
|
|
99
|
+
recordIntegrity(state: Exclude<StoreFacts["integrity"], "pending">, detail?: string): void;
|
|
100
|
+
facts(): StoreFacts;
|
|
101
|
+
/** Test seam into the flusher (manual ticks, worker exit). */
|
|
102
|
+
get flusherControl(): Pick<FlusherController, "tick" | "requestExit">;
|
|
103
|
+
get isClosed(): boolean;
|
|
104
|
+
close(): Promise<void>;
|
|
105
|
+
private closeConnections;
|
|
106
|
+
/** The request thread and private worker channels share one error owner. */
|
|
107
|
+
failure(error: unknown, context: string): unknown;
|
|
108
|
+
private assertOpen;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { mkdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { isBusyFailure, mapStoreError, StoreCorruptError, StoreError } from "./errors.js";
|
|
4
|
+
import { FlusherController } from "./flusher.js";
|
|
5
|
+
import { OwnerGenerations } from "./owner-generations.js";
|
|
6
|
+
import { applyPragmas, MAIN_CONNECTION_PRAGMAS } from "./pragmas.js";
|
|
7
|
+
import { loadEngineRuntime } from "./runtime.js";
|
|
8
|
+
import { assertSchemaServable, ensureSchema, readSchemaIdentity } from "./schema.js";
|
|
9
|
+
import { observeStatement } from "./statement-observer.js";
|
|
10
|
+
/**
|
|
11
|
+
* The engine store adapter (SYNTHESIS_R5 §2, §4.5, §6.1): one `node:sqlite`
|
|
12
|
+
* connection on the request thread — the single row writer — plus the flusher
|
|
13
|
+
* worker that owns the power-loss barrier. `transaction(fn)` is the only way
|
|
14
|
+
* to write: BEGIN IMMEDIATE … COMMIT, ROLLBACK in `finally`, synchronous by
|
|
15
|
+
* contract (a Promise-returning `fn` is rejected). The request thread calls no
|
|
16
|
+
* Node storage-sync primitive; external files are written `O_DSYNC` and their
|
|
17
|
+
* directories are registered for the flusher's pass.
|
|
18
|
+
*/
|
|
19
|
+
export class EngineStore {
|
|
20
|
+
options;
|
|
21
|
+
paths;
|
|
22
|
+
runtime;
|
|
23
|
+
/** One owner-change history for every file helper using this connection. */
|
|
24
|
+
owners = new OwnerGenerations(this);
|
|
25
|
+
connection;
|
|
26
|
+
statements = new Map();
|
|
27
|
+
flusher;
|
|
28
|
+
syncedListeners = new Set();
|
|
29
|
+
/** Clock for rows the store itself stamps (obligations, meta); injectable. */
|
|
30
|
+
now;
|
|
31
|
+
busyWaits = 0;
|
|
32
|
+
integrityState = "pending";
|
|
33
|
+
closed = false;
|
|
34
|
+
closing = null;
|
|
35
|
+
constructor(runtime, paths, connection, options) {
|
|
36
|
+
this.options = options;
|
|
37
|
+
this.runtime = runtime;
|
|
38
|
+
this.paths = paths;
|
|
39
|
+
this.connection = connection;
|
|
40
|
+
this.now = options.now ?? (() => new Date());
|
|
41
|
+
this.flusher = new FlusherController({
|
|
42
|
+
dbPath: paths.database,
|
|
43
|
+
...(options.workerEntry ? { workerEntry: options.workerEntry } : {}),
|
|
44
|
+
...(options.flusherHooks ? { hooks: options.flusherHooks } : {}),
|
|
45
|
+
...(options.log ? { log: options.log } : {}),
|
|
46
|
+
onError: (error) => void this.failure(error, "flusher worker"),
|
|
47
|
+
onSynced: (generation, report) => {
|
|
48
|
+
for (const listener of this.syncedListeners)
|
|
49
|
+
listener(generation, report);
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Prove the runtime, open the database, apply and read back the pragmas,
|
|
55
|
+
* refuse a foreign/unknown schema before any write, create a fresh schema,
|
|
56
|
+
* then start the flusher.
|
|
57
|
+
*/
|
|
58
|
+
static async open(options) {
|
|
59
|
+
const runtime = await loadEngineRuntime(options.runtime);
|
|
60
|
+
mkdirSync(options.daemonDir, { recursive: true, mode: 0o700 });
|
|
61
|
+
const resourceStore = join(options.daemonDir, "resource-store");
|
|
62
|
+
const paths = {
|
|
63
|
+
database: join(options.daemonDir, "engine.sqlite"),
|
|
64
|
+
wal: join(options.daemonDir, "engine.sqlite-wal"),
|
|
65
|
+
resourceStore,
|
|
66
|
+
blobs: join(resourceStore, "blobs"),
|
|
67
|
+
uploads: join(resourceStore, "uploads"),
|
|
68
|
+
};
|
|
69
|
+
const connection = new runtime.sqlite.DatabaseSync(paths.database, {
|
|
70
|
+
timeout: MAIN_CONNECTION_PRAGMAS["busy_timeout"],
|
|
71
|
+
});
|
|
72
|
+
try {
|
|
73
|
+
// Identity first: a foreign or unknown file is refused before the
|
|
74
|
+
// journal-mode or any other write touches it.
|
|
75
|
+
ensureSchemaIdentityOrThrow(connection);
|
|
76
|
+
applyPragmas(connection, MAIN_CONNECTION_PRAGMAS);
|
|
77
|
+
ensureSchema(connection, options.now);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
connection.close();
|
|
81
|
+
throw mapStoreError(error, "opening the engine store");
|
|
82
|
+
}
|
|
83
|
+
const store = new EngineStore(runtime, paths, connection, options);
|
|
84
|
+
await store.flusher.start();
|
|
85
|
+
return store;
|
|
86
|
+
}
|
|
87
|
+
/** The request-thread connection, for reads and prepared statements. */
|
|
88
|
+
get db() {
|
|
89
|
+
this.assertOpen();
|
|
90
|
+
return this.connection;
|
|
91
|
+
}
|
|
92
|
+
/** Prepared statements are cached per SQL text for the connection's life. */
|
|
93
|
+
prepare(sql) {
|
|
94
|
+
this.assertOpen();
|
|
95
|
+
const cached = this.statements.get(sql);
|
|
96
|
+
if (cached)
|
|
97
|
+
return cached;
|
|
98
|
+
try {
|
|
99
|
+
const statement = observeStatement(this.connection.prepare(sql), (error, context) => this.failure(error, context));
|
|
100
|
+
this.statements.set(sql, statement);
|
|
101
|
+
return statement;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
throw this.failure(error, "preparing a statement");
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exec(sql) {
|
|
108
|
+
this.assertOpen();
|
|
109
|
+
try {
|
|
110
|
+
this.connection.exec(sql);
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
throw this.failure(error, "executing a statement");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** True while a `transaction(fn)` body runs on this connection. */
|
|
117
|
+
get inTransaction() {
|
|
118
|
+
return this.connection.isTransaction;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* BEGIN IMMEDIATE … COMMIT with ROLLBACK in `finally`. `fn` must be
|
|
122
|
+
* synchronous: returning a thenable rolls the transaction back and throws,
|
|
123
|
+
* because an await inside a transaction would hold the writer lock across
|
|
124
|
+
* the event loop and break "returned means committed".
|
|
125
|
+
*/
|
|
126
|
+
transaction(fn) {
|
|
127
|
+
this.assertOpen();
|
|
128
|
+
if (this.connection.isTransaction) {
|
|
129
|
+
throw new StoreError("store_transaction_nested", 500, false, "engine store transactions do not nest");
|
|
130
|
+
}
|
|
131
|
+
this.exec("BEGIN IMMEDIATE");
|
|
132
|
+
let committed = false;
|
|
133
|
+
try {
|
|
134
|
+
const result = fn();
|
|
135
|
+
if (isThenable(result)) {
|
|
136
|
+
throw new StoreError("store_transaction_async", 500, false, "engine store transaction bodies must be synchronous (a Promise was returned)");
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
this.connection.exec("COMMIT");
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
throw this.failure(error, "committing a transaction");
|
|
143
|
+
}
|
|
144
|
+
committed = true;
|
|
145
|
+
return result;
|
|
146
|
+
}
|
|
147
|
+
finally {
|
|
148
|
+
if (!committed) {
|
|
149
|
+
try {
|
|
150
|
+
this.connection.exec("ROLLBACK");
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
/* the body's failure is the report; a failed ROLLBACK leaves no transaction open */
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/** A `{g, dir}` registration after a rename/link in `dir` (SYNTHESIS_R5 §4.4). */
|
|
159
|
+
registerExternal(dir) {
|
|
160
|
+
this.assertOpen();
|
|
161
|
+
return this.flusher.register(dir);
|
|
162
|
+
}
|
|
163
|
+
/** A generation covering every commit so far, acknowledged by the next pass (no waiter). */
|
|
164
|
+
mark() {
|
|
165
|
+
this.assertOpen();
|
|
166
|
+
return this.flusher.mark();
|
|
167
|
+
}
|
|
168
|
+
/** Resolves after the next pass that started after this call proved its barrier. */
|
|
169
|
+
flushed() {
|
|
170
|
+
this.assertOpen();
|
|
171
|
+
return this.flusher.flushed();
|
|
172
|
+
}
|
|
173
|
+
/** Resolves once the pass covering an already issued generation proved its barrier. */
|
|
174
|
+
synced(generation) {
|
|
175
|
+
this.assertOpen();
|
|
176
|
+
return this.flusher.awaitGeneration(generation);
|
|
177
|
+
}
|
|
178
|
+
/** The last generation a pass acknowledged. */
|
|
179
|
+
get acknowledgedGeneration() {
|
|
180
|
+
return this.flusher.facts().acknowledged_generation;
|
|
181
|
+
}
|
|
182
|
+
/** Observe `synced(G)` (obligations clear themselves through this). */
|
|
183
|
+
onSynced(listener) {
|
|
184
|
+
this.syncedListeners.add(listener);
|
|
185
|
+
return () => void this.syncedListeners.delete(listener);
|
|
186
|
+
}
|
|
187
|
+
/** Recorded by the maintenance controller after its integrity check. */
|
|
188
|
+
recordIntegrity(state, detail = "engine store integrity check failed") {
|
|
189
|
+
if (state === "failed")
|
|
190
|
+
this.failure(new StoreCorruptError(detail), "checking integrity");
|
|
191
|
+
// An older in-flight check cannot clear a physical fault observed meanwhile.
|
|
192
|
+
// A repaired/replaced store opens a new observation lifetime.
|
|
193
|
+
else if (this.integrityState !== "failed")
|
|
194
|
+
this.integrityState = state;
|
|
195
|
+
}
|
|
196
|
+
facts() {
|
|
197
|
+
this.assertOpen();
|
|
198
|
+
const flusher = this.flusher.facts();
|
|
199
|
+
let open = null;
|
|
200
|
+
if (this.integrityState !== "failed") {
|
|
201
|
+
try {
|
|
202
|
+
const row = this.prepare("SELECT count(*) AS n FROM effect_obligation").get();
|
|
203
|
+
open = Number(row.n);
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
if (!(error instanceof StoreCorruptError))
|
|
207
|
+
throw error;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
flusher,
|
|
212
|
+
flush_lag_ms: flusher.flush_lag_ms,
|
|
213
|
+
last_barrier_at: flusher.last_barrier_at,
|
|
214
|
+
interval_ms: flusher.interval_ms,
|
|
215
|
+
wal_bytes: flusher.last_pass?.wal_bytes ?? null,
|
|
216
|
+
busy_waits: this.busyWaits,
|
|
217
|
+
obligations_open: open,
|
|
218
|
+
integrity: this.integrityState,
|
|
219
|
+
migration: null,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
/** Test seam into the flusher (manual ticks, worker exit). */
|
|
223
|
+
get flusherControl() {
|
|
224
|
+
return this.flusher;
|
|
225
|
+
}
|
|
226
|
+
get isClosed() {
|
|
227
|
+
return this.closed;
|
|
228
|
+
}
|
|
229
|
+
close() {
|
|
230
|
+
if (this.closing)
|
|
231
|
+
return this.closing;
|
|
232
|
+
if (this.closed)
|
|
233
|
+
return Promise.resolve();
|
|
234
|
+
this.syncedListeners.clear();
|
|
235
|
+
this.closing = this.closeConnections().finally(() => {
|
|
236
|
+
this.closed = !this.connection.isOpen;
|
|
237
|
+
this.closing = null;
|
|
238
|
+
});
|
|
239
|
+
return this.closing;
|
|
240
|
+
}
|
|
241
|
+
async closeConnections() {
|
|
242
|
+
let stopFailed = false;
|
|
243
|
+
try {
|
|
244
|
+
await this.flusher.stop();
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
stopFailed = true;
|
|
248
|
+
throw error;
|
|
249
|
+
}
|
|
250
|
+
finally {
|
|
251
|
+
this.statements.clear();
|
|
252
|
+
try {
|
|
253
|
+
if (this.connection.isOpen)
|
|
254
|
+
this.connection.close();
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
// Keep the first failure, while closed still reflects the native state.
|
|
258
|
+
if (!stopFailed)
|
|
259
|
+
throw error;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/** The request thread and private worker channels share one error owner. */
|
|
264
|
+
failure(error, context) {
|
|
265
|
+
const mapped = mapStoreError(error, context);
|
|
266
|
+
if (isBusyFailure(mapped))
|
|
267
|
+
this.busyWaits += 1;
|
|
268
|
+
if (mapped instanceof StoreCorruptError && this.integrityState !== "failed") {
|
|
269
|
+
this.integrityState = "failed";
|
|
270
|
+
try {
|
|
271
|
+
this.options.onCorrupt?.(mapped);
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
// Notification cannot replace the original typed SQL error or recurse
|
|
275
|
+
// through storage-dependent diagnostics. Admission is the caller's owner.
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return mapped;
|
|
279
|
+
}
|
|
280
|
+
assertOpen() {
|
|
281
|
+
if (this.closed || this.closing) {
|
|
282
|
+
throw new StoreError("store_closed", 503, false, "engine store is closed");
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
function ensureSchemaIdentityOrThrow(db) {
|
|
287
|
+
// ensureSchema() repeats this check after the pragmas; the early call keeps
|
|
288
|
+
// "refused before any write" literal (journal_mode=WAL writes the header).
|
|
289
|
+
assertSchemaServable(readSchemaIdentity(db));
|
|
290
|
+
}
|
|
291
|
+
function isThenable(value) {
|
|
292
|
+
return (typeof value === "object" &&
|
|
293
|
+
value !== null &&
|
|
294
|
+
typeof value.then === "function");
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
|