@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
package/dist/command-store.js
CHANGED
|
@@ -1,489 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { closeSync, constants, fsyncSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
|
-
import { dirname, join } from "node:path";
|
|
4
|
-
import { TextDecoder } from "node:util";
|
|
5
|
-
import { RunEvent as RunEventSchema, RunTelemetry, validateRunFactsInvariants, } from "@claudexor/schema";
|
|
6
|
-
import { fsyncDirectory, hashJson } from "@claudexor/util";
|
|
7
|
-
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
8
|
-
import { commandScopeRoots } from "./command-scope-roots.js";
|
|
1
|
+
import { hashJson } from "@claudexor/util";
|
|
9
2
|
import { idempotencyWireProjection } from "./idempotency-wire-projection.js";
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
import { JOB_STATES } from "./server.js";
|
|
13
|
-
import { lstatOrNull, recoveredTerminalFacts, terminalCommandResult, } from "./terminal-authority.js";
|
|
14
|
-
const ACCEPTED = "command.accepted";
|
|
15
|
-
const UPDATED = "command.updated";
|
|
16
|
-
const PRUNED = "command.pruned";
|
|
17
|
-
/** Journal-backed authority for daemon commands. A returned mutation is fsynced. */
|
|
18
|
-
export class CommandStore {
|
|
19
|
-
journal;
|
|
20
|
-
now;
|
|
21
|
-
recordsById = new Map();
|
|
22
|
-
idByKeyDigest = new Map();
|
|
23
|
-
prunedRoots = new Set();
|
|
24
|
-
constructor(journal, now = () => new Date()) {
|
|
25
|
-
this.journal = journal;
|
|
26
|
-
this.now = now;
|
|
27
|
-
this.replay();
|
|
28
|
-
}
|
|
29
|
-
/** Apply crash terminalization only after bootstrap has proved every required partition. */
|
|
30
|
-
recoverAfterStartup() {
|
|
31
|
-
this.interruptUnknownCommands();
|
|
32
|
-
}
|
|
33
|
-
accept(input) {
|
|
34
|
-
validateKey(input.idempotencyKey);
|
|
35
|
-
const { requestDigest, keyDigest } = digests(this.journal.options.partition, input);
|
|
36
|
-
const prior = this.idByKeyDigest.get(keyDigest);
|
|
37
|
-
if (prior) {
|
|
38
|
-
if (prior.requestDigest !== requestDigest)
|
|
39
|
-
throw conflict();
|
|
40
|
-
const record = this.recordsById.get(prior.id);
|
|
41
|
-
if (!record)
|
|
42
|
-
throw new Error(`idempotency record points to missing command ${prior.id}`);
|
|
43
|
-
return { record, reused: true };
|
|
44
|
-
}
|
|
45
|
-
const record = {
|
|
46
|
-
id: input.id,
|
|
47
|
-
state: "queued",
|
|
48
|
-
params: structuredClone(input.params),
|
|
49
|
-
createdAt: this.now().toISOString(),
|
|
50
|
-
};
|
|
51
|
-
this.journal.append(ACCEPTED, {
|
|
52
|
-
record: persisted(record),
|
|
53
|
-
keyDigest,
|
|
54
|
-
requestDigest,
|
|
55
|
-
});
|
|
56
|
-
this.recordsById.set(record.id, record);
|
|
57
|
-
this.idByKeyDigest.set(keyDigest, { id: record.id, requestDigest });
|
|
58
|
-
return { record, reused: false };
|
|
59
|
-
}
|
|
60
|
-
find(input) {
|
|
61
|
-
validateKey(input.idempotencyKey);
|
|
62
|
-
const { requestDigest, keyDigest } = digests(this.journal.options.partition, input);
|
|
63
|
-
const prior = this.idByKeyDigest.get(keyDigest);
|
|
64
|
-
if (!prior)
|
|
65
|
-
return null;
|
|
66
|
-
if (prior.requestDigest !== requestDigest)
|
|
67
|
-
throw conflict();
|
|
68
|
-
return this.recordsById.get(prior.id) ?? null;
|
|
69
|
-
}
|
|
70
|
-
get(id) {
|
|
71
|
-
return this.recordsById.get(id);
|
|
72
|
-
}
|
|
73
|
-
get count() {
|
|
74
|
-
return this.recordsById.size;
|
|
75
|
-
}
|
|
76
|
-
records() {
|
|
77
|
-
return [...this.recordsById.values()];
|
|
78
|
-
}
|
|
79
|
-
update(id, patch) {
|
|
80
|
-
const current = this.recordsById.get(id);
|
|
81
|
-
if (!current)
|
|
82
|
-
throw new Error(`no such job: ${id}`);
|
|
83
|
-
const next = { ...current, ...structuredClone(patch), id: current.id, params: current.params };
|
|
84
|
-
const { params: _params, ...journaled } = persisted(next);
|
|
85
|
-
this.journal.append(UPDATED, { record: journaled });
|
|
86
|
-
this.recordsById.set(id, next);
|
|
87
|
-
return next;
|
|
88
|
-
}
|
|
89
|
-
prune(ids) {
|
|
90
|
-
if (ids.length === 0)
|
|
91
|
-
return;
|
|
92
|
-
// The tombstone keeps the pruned commands' project roots (the startup
|
|
93
|
-
// orphan sweep still reaches a root whose every command was pruned) and
|
|
94
|
-
// their run ids (the fold retires those runs' journaled events with them).
|
|
95
|
-
const records = ids.map((id) => this.recordsById.get(id));
|
|
96
|
-
const roots = commandScopeRoots(records);
|
|
97
|
-
const runIds = records.flatMap((record) => (record?.runId ? [record.runId] : []));
|
|
98
|
-
this.journal.append(PRUNED, { ids: [...ids], roots, run_ids: runIds });
|
|
99
|
-
this.drop(ids);
|
|
100
|
-
for (const root of roots)
|
|
101
|
-
this.prunedRoots.add(root);
|
|
102
|
-
}
|
|
103
|
-
prunedScopeRoots() {
|
|
104
|
-
return [...this.prunedRoots];
|
|
105
|
-
}
|
|
106
|
-
/** Reconcile after durable terminal acceptance but failed local receipt/tail finalization. */
|
|
107
|
-
recoverDurableTerminal(id) {
|
|
108
|
-
const record = this.recordsById.get(id);
|
|
109
|
-
if (!record?.runId)
|
|
110
|
-
return null;
|
|
111
|
-
const terminal = this.durableTerminalEvents().get(record.runId);
|
|
112
|
-
return terminal ? this.reconcileTerminal(record, terminal) : null;
|
|
113
|
-
}
|
|
114
|
-
validateProjection() {
|
|
115
|
-
for (const record of this.recordsById.values())
|
|
116
|
-
validateRecord(record);
|
|
117
|
-
for (const entry of this.idByKeyDigest.values()) {
|
|
118
|
-
if (!this.recordsById.has(entry.id))
|
|
119
|
-
throw new Error("command idempotency index is dangling");
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
replay() {
|
|
123
|
-
for (const entry of this.journal.records(0, [ACCEPTED, UPDATED, PRUNED])) {
|
|
124
|
-
if (entry.type === ACCEPTED) {
|
|
125
|
-
const payload = entry.payload;
|
|
126
|
-
validateRecord(payload.record);
|
|
127
|
-
if (!payload.keyDigest || !payload.requestDigest)
|
|
128
|
-
throw new Error("invalid accepted command");
|
|
129
|
-
const prior = this.idByKeyDigest.get(payload.keyDigest);
|
|
130
|
-
if (prior &&
|
|
131
|
-
(prior.id !== payload.record.id || prior.requestDigest !== payload.requestDigest)) {
|
|
132
|
-
throw new Error("conflicting command idempotency history");
|
|
133
|
-
}
|
|
134
|
-
this.recordsById.set(payload.record.id, structuredClone(payload.record));
|
|
135
|
-
this.idByKeyDigest.set(payload.keyDigest, {
|
|
136
|
-
id: payload.record.id,
|
|
137
|
-
requestDigest: payload.requestDigest,
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
else if (entry.type === UPDATED) {
|
|
141
|
-
const journaled = entry.payload.record;
|
|
142
|
-
validateRecord(journaled);
|
|
143
|
-
const current = this.recordsById.get(journaled.id);
|
|
144
|
-
if (!current)
|
|
145
|
-
throw new Error("command update precedes acceptance");
|
|
146
|
-
const record = "params" in journaled
|
|
147
|
-
? journaled
|
|
148
|
-
: { ...journaled, params: current.params };
|
|
149
|
-
this.recordsById.set(record.id, structuredClone(record));
|
|
150
|
-
}
|
|
151
|
-
else if (entry.type === PRUNED) {
|
|
152
|
-
const { ids, roots } = entry.payload;
|
|
153
|
-
if (!Array.isArray(ids) || ids.some((id) => typeof id !== "string")) {
|
|
154
|
-
throw new Error("invalid command prune record");
|
|
155
|
-
}
|
|
156
|
-
this.drop(ids);
|
|
157
|
-
// Legacy tombstones carry no roots; a malformed roots list adds nothing.
|
|
158
|
-
if (Array.isArray(roots)) {
|
|
159
|
-
for (const root of roots)
|
|
160
|
-
if (typeof root === "string" && root)
|
|
161
|
-
this.prunedRoots.add(root);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
interruptUnknownCommands() {
|
|
167
|
-
const terminals = this.durableTerminalEvents();
|
|
168
|
-
for (const record of this.recordsById.values()) {
|
|
169
|
-
const terminal = record.runId ? terminals.get(record.runId) : undefined;
|
|
170
|
-
if (terminal) {
|
|
171
|
-
this.reconcileTerminal(record, terminal);
|
|
172
|
-
continue;
|
|
173
|
-
}
|
|
174
|
-
if (record.state !== "queued" && record.state !== "running")
|
|
175
|
-
continue;
|
|
176
|
-
this.update(record.id, {
|
|
177
|
-
// A job still queued/running when the daemon restarted was interrupted
|
|
178
|
-
// (D8 crash lifecycle) — its terminal was never durably observed.
|
|
179
|
-
state: "interrupted",
|
|
180
|
-
error: "daemon restarted before command completion was durably observed",
|
|
181
|
-
finishedAt: this.now().toISOString(),
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
reconcileTerminal(record, terminal) {
|
|
186
|
-
const hasRunFacts = Object.prototype.hasOwnProperty.call(terminal.payload, "run_facts");
|
|
187
|
-
if (!hasRunFacts) {
|
|
188
|
-
// Pre-RunFacts journals remain readable across the upgrade. An
|
|
189
|
-
// already-terminal command has its historical command.updated
|
|
190
|
-
// authority; an active command cannot reconstruct the new
|
|
191
|
-
// byte-equivalent receipt and therefore follows the legacy crash path.
|
|
192
|
-
if (record.state !== "queued" && record.state !== "running")
|
|
193
|
-
return record;
|
|
194
|
-
return this.update(record.id, {
|
|
195
|
-
state: "interrupted",
|
|
196
|
-
error: "daemon restarted after a legacy terminal event without recoverable RunFacts",
|
|
197
|
-
errorCode: "legacy_terminal_recovery_unavailable",
|
|
198
|
-
errorStatus: 503,
|
|
199
|
-
errorRetryable: false,
|
|
200
|
-
finishedAt: this.now().toISOString(),
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
const active = record.state === "queued" || record.state === "running";
|
|
204
|
-
const provisionalRecovery = !active && record.errorCode === "terminal_recovery_required";
|
|
205
|
-
if (!active && !provisionalRecovery) {
|
|
206
|
-
// Already reconciled: the durable payload is still re-validated in
|
|
207
|
-
// memory, but artifact recovery is skipped entirely. Restart must not
|
|
208
|
-
// re-read per-run evidence for every historical terminal command (O(N)
|
|
209
|
-
// disk work per start) and must not require a run directory that disk
|
|
210
|
-
// retention may have legitimately reclaimed after the terminal
|
|
211
|
-
// committed — either would poison the whole partition.
|
|
212
|
-
const { facts } = recoveredTerminalFacts(record, terminal);
|
|
213
|
-
if (record.state !== facts.outcome.lifecycle ||
|
|
214
|
-
!terminalResultMatches(record.result, terminalCommandResult(record, facts))) {
|
|
215
|
-
throw new Error("terminal command result conflicts with durable terminal authority");
|
|
216
|
-
}
|
|
217
|
-
return record;
|
|
218
|
-
}
|
|
219
|
-
const facts = this.recoverTerminalArtifacts(record, terminal);
|
|
220
|
-
const lifecycle = facts.outcome.lifecycle;
|
|
221
|
-
return this.update(record.id, {
|
|
222
|
-
state: lifecycle,
|
|
223
|
-
result: terminalCommandResult(record, facts),
|
|
224
|
-
error: lifecycle === "failed" || lifecycle === "interrupted"
|
|
225
|
-
? `recovered durable ${lifecycle} terminal after daemon restart`
|
|
226
|
-
: undefined,
|
|
227
|
-
errorCode: undefined,
|
|
228
|
-
errorStatus: undefined,
|
|
229
|
-
errorRetryable: undefined,
|
|
230
|
-
errorRequiredActions: undefined,
|
|
231
|
-
errorContext: undefined,
|
|
232
|
-
finishedAt: terminal.ts,
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
/** The partition's durable terminals, from the pass shared with the
|
|
236
|
-
* RunEventStore projection (parsed once per generation, extended on append). */
|
|
237
|
-
durableTerminalEvents() {
|
|
238
|
-
return durableTerminalRunEvents(this.journal);
|
|
239
|
-
}
|
|
240
|
-
recoverTerminalArtifacts(record, terminal) {
|
|
241
|
-
const { facts, terminalSeq } = recoveredTerminalFacts(record, terminal);
|
|
242
|
-
// ENOENT on the run root or its final/ directory means disk retention
|
|
243
|
-
// already reclaimed this run's on-disk evidence (rmSync may leave only a
|
|
244
|
-
// recreated root holding a tombstone marker). The partition journal is the
|
|
245
|
-
// durable authority, so the recovered facts are returned WITHOUT
|
|
246
|
-
// filesystem repair instead of poisoning the partition on restart.
|
|
247
|
-
const rootStat = lstatOrNull(record.runDir);
|
|
248
|
-
if (!rootStat)
|
|
249
|
-
return facts;
|
|
250
|
-
if (rootStat.isSymbolicLink() || !rootStat.isDirectory()) {
|
|
251
|
-
throw new Error("durable terminal run directory is not a canonical directory");
|
|
252
|
-
}
|
|
253
|
-
const finalDir = join(record.runDir, "final");
|
|
254
|
-
const finalStat = lstatOrNull(finalDir);
|
|
255
|
-
if (!finalStat)
|
|
256
|
-
return facts;
|
|
257
|
-
if (finalStat.isSymbolicLink() || !finalStat.isDirectory()) {
|
|
258
|
-
throw new Error("durable terminal run directory is not a canonical directory");
|
|
259
|
-
}
|
|
260
|
-
const receiptPath = join(finalDir, "run_facts.yaml");
|
|
261
|
-
const receiptStat = lstatOrNull(receiptPath);
|
|
262
|
-
if (!receiptStat) {
|
|
263
|
-
// JSON is valid YAML and avoids a second schema-to-presentation owner.
|
|
264
|
-
replaceFileDurably(receiptPath, `${JSON.stringify(facts, null, 2)}\n`);
|
|
265
|
-
}
|
|
266
|
-
else {
|
|
267
|
-
if (receiptStat.isSymbolicLink() || !receiptStat.isFile()) {
|
|
268
|
-
throw new Error("durable terminal RunFacts receipt is not a regular file");
|
|
269
|
-
}
|
|
270
|
-
const receiptText = readFileSync(receiptPath, "utf8");
|
|
271
|
-
let receiptValue;
|
|
272
|
-
let receiptTorn = false;
|
|
273
|
-
try {
|
|
274
|
-
receiptValue = parseYaml(receiptText);
|
|
275
|
-
}
|
|
276
|
-
catch {
|
|
277
|
-
// Older direct writers could crash mid-file. The complete journal
|
|
278
|
-
// payload is the durable authority, so a syntactically TORN receipt is
|
|
279
|
-
// safely reconstructible. ONLY the YAML tear is rebuilt: a receipt that
|
|
280
|
-
// parses but violates the canonical schema, or one that validates but
|
|
281
|
-
// differs from the journal, is corruption evidence and fails loud below
|
|
282
|
-
// instead of being silently destroyed.
|
|
283
|
-
receiptTorn = true;
|
|
284
|
-
replaceFileDurably(receiptPath, `${JSON.stringify(facts, null, 2)}\n`);
|
|
285
|
-
}
|
|
286
|
-
if (!receiptTorn) {
|
|
287
|
-
let existing;
|
|
288
|
-
try {
|
|
289
|
-
existing = validateRunFactsInvariants(receiptValue);
|
|
290
|
-
}
|
|
291
|
-
catch {
|
|
292
|
-
throw new Error("durable terminal RunFacts receipt violates the canonical schema");
|
|
293
|
-
}
|
|
294
|
-
if (hashJson(existing) !== hashJson(facts)) {
|
|
295
|
-
throw new Error("durable terminal RunFacts receipt does not match journal authority");
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
const telemetryPath = join(finalDir, "telemetry.yaml");
|
|
300
|
-
const telemetryStat = lstatOrNull(telemetryPath);
|
|
301
|
-
if (telemetryStat) {
|
|
302
|
-
if (telemetryStat.isSymbolicLink() || !telemetryStat.isFile()) {
|
|
303
|
-
throw new Error("durable terminal telemetry is not a regular file");
|
|
304
|
-
}
|
|
305
|
-
// Telemetry is best-effort descriptive evidence written non-atomically
|
|
306
|
-
// (no fsync), and the terminal commit path itself tolerates a corrupt
|
|
307
|
-
// copy (safeParse -> the embedded receipt is simply skipped). The JOURNAL
|
|
308
|
-
// is the authority, so an unreadable or schema-invalid telemetry file
|
|
309
|
-
// must never take the whole partition into recovery: it stays in place as
|
|
310
|
-
// corruption evidence, and only a READABLE copy participates in the
|
|
311
|
-
// receipt-consistency fence below.
|
|
312
|
-
let telemetry = null;
|
|
313
|
-
try {
|
|
314
|
-
telemetry = RunTelemetry.parse(parseYaml(readFileSync(telemetryPath, "utf8")));
|
|
315
|
-
}
|
|
316
|
-
catch {
|
|
317
|
-
telemetry = null;
|
|
318
|
-
}
|
|
319
|
-
if (telemetry?.run_facts) {
|
|
320
|
-
if (hashJson(telemetry.run_facts) !== hashJson(facts)) {
|
|
321
|
-
throw new Error("durable terminal telemetry does not match journal authority");
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
else if (telemetry) {
|
|
325
|
-
replaceFileDurably(telemetryPath, stringifyYaml(RunTelemetry.parse({ ...telemetry, run_facts: facts })));
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
const eventsPath = join(record.runDir, "events.jsonl");
|
|
329
|
-
const eventsStat = lstatOrNull(eventsPath);
|
|
330
|
-
let eventsBytes = Buffer.alloc(0);
|
|
331
|
-
if (eventsStat) {
|
|
332
|
-
if (eventsStat.isSymbolicLink() || !eventsStat.isFile()) {
|
|
333
|
-
throw new Error("durable terminal event log is not a regular file");
|
|
334
|
-
}
|
|
335
|
-
eventsBytes = readFileSync(eventsPath);
|
|
336
|
-
}
|
|
337
|
-
const normalizedLines = [];
|
|
338
|
-
let terminalOccurrences = 0;
|
|
339
|
-
let previousSeq = 0;
|
|
340
|
-
const rawLines = splitLines(eventsBytes);
|
|
341
|
-
const finalNonEmptyIndex = rawLines.findLastIndex((line) => !isAsciiWhitespace(line));
|
|
342
|
-
const canonicalTerminalLine = JSON.stringify(terminal);
|
|
343
|
-
const canonicalTerminalBytes = Buffer.from(canonicalTerminalLine, "utf8");
|
|
344
|
-
const endsWithNewline = eventsBytes.at(-1) === 0x0a;
|
|
345
|
-
const utf8 = new TextDecoder("utf-8", { fatal: true });
|
|
346
|
-
for (const [index, lineBytes] of rawLines.entries()) {
|
|
347
|
-
if (isAsciiWhitespace(lineBytes))
|
|
348
|
-
continue;
|
|
349
|
-
let event;
|
|
350
|
-
try {
|
|
351
|
-
const line = utf8.decode(lineBytes);
|
|
352
|
-
event = RunEventSchema.parse(JSON.parse(line));
|
|
353
|
-
}
|
|
354
|
-
catch {
|
|
355
|
-
const tornFinalLine = index === finalNonEmptyIndex &&
|
|
356
|
-
!endsWithNewline &&
|
|
357
|
-
terminalOccurrences === 0 &&
|
|
358
|
-
isBufferPrefix(canonicalTerminalBytes, lineBytes);
|
|
359
|
-
if (tornFinalLine)
|
|
360
|
-
break;
|
|
361
|
-
throw new Error("per-run event log contains malformed committed evidence");
|
|
362
|
-
}
|
|
363
|
-
if (event.run_id !== terminal.run_id || event.task_id !== terminal.task_id) {
|
|
364
|
-
throw new Error("per-run event identity conflicts with durable terminal authority");
|
|
365
|
-
}
|
|
366
|
-
if (typeof event.seq !== "number" || !Number.isSafeInteger(event.seq) || event.seq <= 0) {
|
|
367
|
-
throw new Error("per-run event has no valid sequence");
|
|
368
|
-
}
|
|
369
|
-
const eventSeq = event.seq;
|
|
370
|
-
if (eventSeq <= previousSeq) {
|
|
371
|
-
throw new Error("per-run event sequence is duplicate or non-monotonic");
|
|
372
|
-
}
|
|
373
|
-
const sameEvent = hashJson(event) === hashJson(terminal);
|
|
374
|
-
if (terminalOccurrences === 0 && !sameEvent && eventSeq >= terminalSeq) {
|
|
375
|
-
throw new Error("per-run event sequence conflicts with durable terminal authority");
|
|
376
|
-
}
|
|
377
|
-
if (terminalOccurrences > 0 && !sameEvent && !isPostTerminalControlAudit(event.type)) {
|
|
378
|
-
throw new Error("per-run event appears after terminal authority");
|
|
379
|
-
}
|
|
380
|
-
const eventIsTerminal = event.type === "run.completed" ||
|
|
381
|
-
event.type === "run.failed" ||
|
|
382
|
-
event.type === "run.blocked";
|
|
383
|
-
if (eventIsTerminal) {
|
|
384
|
-
if (!sameEvent) {
|
|
385
|
-
throw new Error("per-run terminal event conflicts with durable journal authority");
|
|
386
|
-
}
|
|
387
|
-
terminalOccurrences += 1;
|
|
388
|
-
if (terminalOccurrences > 1) {
|
|
389
|
-
throw new Error("per-run event log contains multiple terminal events");
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
previousSeq = eventSeq;
|
|
393
|
-
normalizedLines.push(JSON.stringify(event));
|
|
394
|
-
}
|
|
395
|
-
if (terminalOccurrences === 0) {
|
|
396
|
-
normalizedLines.push(JSON.stringify(terminal));
|
|
397
|
-
}
|
|
398
|
-
const normalizedEvents = normalizedLines.length > 0 ? `${normalizedLines.join("\n")}\n` : "";
|
|
399
|
-
if (!Buffer.from(normalizedEvents, "utf8").equals(eventsBytes)) {
|
|
400
|
-
replaceFileDurably(eventsPath, normalizedEvents);
|
|
401
|
-
}
|
|
402
|
-
return facts;
|
|
403
|
-
}
|
|
404
|
-
drop(ids) {
|
|
405
|
-
const removed = new Set(ids);
|
|
406
|
-
for (const id of removed)
|
|
407
|
-
this.recordsById.delete(id);
|
|
408
|
-
for (const [digest, entry] of this.idByKeyDigest) {
|
|
409
|
-
if (removed.has(entry.id))
|
|
410
|
-
this.idByKeyDigest.delete(digest);
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
function splitLines(bytes) {
|
|
415
|
-
const lines = [];
|
|
416
|
-
let start = 0;
|
|
417
|
-
for (let index = 0; index < bytes.length; index += 1) {
|
|
418
|
-
if (bytes[index] !== 0x0a)
|
|
419
|
-
continue;
|
|
420
|
-
lines.push(bytes.subarray(start, index));
|
|
421
|
-
start = index + 1;
|
|
422
|
-
}
|
|
423
|
-
lines.push(bytes.subarray(start));
|
|
424
|
-
return lines;
|
|
425
|
-
}
|
|
426
|
-
function isAsciiWhitespace(bytes) {
|
|
427
|
-
for (const byte of bytes) {
|
|
428
|
-
if (byte !== 0x09 && byte !== 0x0b && byte !== 0x0c && byte !== 0x0d && byte !== 0x20) {
|
|
429
|
-
return false;
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
return true;
|
|
433
|
-
}
|
|
434
|
-
function isBufferPrefix(whole, prefix) {
|
|
435
|
-
return prefix.length <= whole.length && whole.subarray(0, prefix.length).equals(prefix);
|
|
436
|
-
}
|
|
437
|
-
function isPostTerminalControlAudit(type) {
|
|
438
|
-
return POST_TERMINAL_AUDIT_EVENT_TYPES.has(type);
|
|
439
|
-
}
|
|
440
|
-
function terminalResultMatches(result, expected) {
|
|
441
|
-
if (!result || typeof result !== "object" || Array.isArray(result))
|
|
442
|
-
return false;
|
|
443
|
-
const value = result;
|
|
444
|
-
return (value["lifecycle"] === expected.lifecycle &&
|
|
445
|
-
value["runId"] === expected.runId &&
|
|
446
|
-
value["taskId"] === expected.taskId &&
|
|
447
|
-
value["runDir"] === expected.runDir &&
|
|
448
|
-
hashJson(value["facts"]) === hashJson(expected.facts));
|
|
449
|
-
}
|
|
450
|
-
function replaceFileDurably(path, text) {
|
|
451
|
-
const parent = dirname(path);
|
|
452
|
-
const tmp = join(parent, `.claudexor-recovery-${randomUUID()}`);
|
|
453
|
-
let fd = null;
|
|
454
|
-
try {
|
|
455
|
-
fd = openSync(tmp, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
|
|
456
|
-
writeFileSync(fd, text, "utf8");
|
|
457
|
-
fsyncSync(fd);
|
|
458
|
-
closeSync(fd);
|
|
459
|
-
fd = null;
|
|
460
|
-
renameSync(tmp, path);
|
|
461
|
-
fsyncDirectory(parent);
|
|
462
|
-
}
|
|
463
|
-
finally {
|
|
464
|
-
if (fd !== null)
|
|
465
|
-
closeSync(fd);
|
|
466
|
-
try {
|
|
467
|
-
unlinkSync(tmp);
|
|
468
|
-
}
|
|
469
|
-
catch (error) {
|
|
470
|
-
if (error.code !== "ENOENT")
|
|
471
|
-
throw error;
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
export function commandProjection() {
|
|
476
|
-
return {
|
|
477
|
-
name: "commands",
|
|
478
|
-
create: (journal) => new CommandStore(journal),
|
|
479
|
-
validate: (store) => store.validateProjection(),
|
|
480
|
-
recover: (store) => store.recoverAfterStartup(),
|
|
481
|
-
};
|
|
482
|
-
}
|
|
483
|
-
function persisted(record) {
|
|
484
|
-
return structuredClone(record);
|
|
485
|
-
}
|
|
486
|
-
function validateRecord(record) {
|
|
3
|
+
import { JOB_STATES } from "./job-record.js";
|
|
4
|
+
export function validateCommandRecord(record) {
|
|
487
5
|
if (!record || typeof record !== "object" || !record.id || !record.createdAt) {
|
|
488
6
|
throw new Error("invalid command record");
|
|
489
7
|
}
|
|
@@ -492,7 +10,7 @@ function validateRecord(record) {
|
|
|
492
10
|
if (!states.includes(record.state))
|
|
493
11
|
throw new Error(`invalid command state '${record.state}'`);
|
|
494
12
|
}
|
|
495
|
-
function
|
|
13
|
+
export function validateCommandKey(key) {
|
|
496
14
|
if (!key || key.length > 256) {
|
|
497
15
|
throw Object.assign(new Error("Idempotency-Key must contain 1-256 characters"), {
|
|
498
16
|
code: "invalid_idempotency_key",
|
|
@@ -500,7 +18,7 @@ function validateKey(key) {
|
|
|
500
18
|
});
|
|
501
19
|
}
|
|
502
20
|
}
|
|
503
|
-
function
|
|
21
|
+
export function commandDigests(partition, input) {
|
|
504
22
|
return {
|
|
505
23
|
requestDigest: hashJson(idempotencyWireProjection(input.idempotencyParams ?? input.params)),
|
|
506
24
|
keyDigest: hashJson({
|
|
@@ -511,10 +29,4 @@ function digests(partition, input) {
|
|
|
511
29
|
}),
|
|
512
30
|
};
|
|
513
31
|
}
|
|
514
|
-
function conflict() {
|
|
515
|
-
return Object.assign(new Error("idempotency key was already used with a different request"), {
|
|
516
|
-
code: "idempotency_conflict",
|
|
517
|
-
status: 409,
|
|
518
|
-
});
|
|
519
|
-
}
|
|
520
32
|
//# sourceMappingURL=command-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-store.js","sourceRoot":"","sources":["../src/command-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command-store.js","sourceRoot":"","sources":["../src/command-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAkB,MAAM,iBAAiB,CAAC;AAa7D,MAAM,UAAU,qBAAqB,CAAC,MAAiC;IACrE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,iEAAiE;IACjE,MAAM,MAAM,GAAsB,UAAU,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAC7B,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+CAA+C,CAAC,EAAE;YAC9E,IAAI,EAAE,yBAAyB;YAC/B,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,SAAiB,EACjB,KAAkB;IAElB,OAAO;QACL,aAAa,EAAE,QAAQ,CAAC,yBAAyB,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3F,SAAS,EAAE,QAAQ,CAAC;YAClB,MAAM,EAAE,KAAK,CAAC,QAAQ;YACtB,SAAS;YACT,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,YAAY;YAC1C,GAAG,EAAE,KAAK,CAAC,cAAc;SAC1B,CAAC;KACH,CAAC;AACJ,CAAC"}
|
package/dist/daemon-health.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ConcurrencyLimit, RuntimeConcurrencyCaps, type JobAdmissionActivity } from "@claudexor/schema";
|
|
2
2
|
import type { DaemonServingMode } from "./serving-admission.js";
|
|
3
|
-
export declare function daemonHealth(startedAt: number, queue: number, active: number, jobs: number, stopping: boolean, servingMode: DaemonServingMode,
|
|
3
|
+
export declare function daemonHealth(startedAt: number, queue: number, active: number, jobs: number, stopping: boolean, servingMode: DaemonServingMode, caps: RuntimeConcurrencyCaps, activity: JobAdmissionActivity, strategiesDisclosed: boolean): {
|
|
4
4
|
ok: boolean;
|
|
5
5
|
memory: {
|
|
6
6
|
heapUsedBytes: number;
|
|
@@ -15,6 +15,23 @@ export declare function daemonHealth(startedAt: number, queue: number, active: n
|
|
|
15
15
|
} | null;
|
|
16
16
|
sampledAt: string;
|
|
17
17
|
};
|
|
18
|
+
loop: {
|
|
19
|
+
windowMs: number;
|
|
20
|
+
windowEndedAt: string;
|
|
21
|
+
delay: {
|
|
22
|
+
resolutionMs: number;
|
|
23
|
+
samples: number;
|
|
24
|
+
p50Ms: number;
|
|
25
|
+
p99Ms: number;
|
|
26
|
+
maxMs: number;
|
|
27
|
+
} | null;
|
|
28
|
+
utilization: number | null;
|
|
29
|
+
gc: {
|
|
30
|
+
count: number;
|
|
31
|
+
totalMs: number;
|
|
32
|
+
maxMs: number;
|
|
33
|
+
};
|
|
34
|
+
} | null;
|
|
18
35
|
uptime_ms: number;
|
|
19
36
|
queue: number;
|
|
20
37
|
running: boolean;
|
|
@@ -22,18 +39,49 @@ export declare function daemonHealth(startedAt: number, queue: number, active: n
|
|
|
22
39
|
jobs: number;
|
|
23
40
|
stopping: boolean;
|
|
24
41
|
servingMode: DaemonServingMode;
|
|
42
|
+
admission: {
|
|
43
|
+
active: {
|
|
44
|
+
model: number;
|
|
45
|
+
non_model: number;
|
|
46
|
+
};
|
|
47
|
+
queued: {
|
|
48
|
+
model: number;
|
|
49
|
+
non_model: number;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
25
52
|
capacity: {
|
|
53
|
+
maxConcurrent: number | "unlimited";
|
|
54
|
+
maxConcurrentNonModelJobs: number | "unlimited";
|
|
55
|
+
maxConcurrentModelOperations: number | "unlimited";
|
|
26
56
|
maxParallelCandidates: number;
|
|
27
57
|
maxDeepScanWidth: number;
|
|
28
58
|
maxCouncilMembers: number;
|
|
29
|
-
|
|
59
|
+
sources?: {
|
|
60
|
+
max_concurrent: "config" | "default" | "embedder" | "environment" | "unknown";
|
|
61
|
+
max_concurrent_non_model_jobs: "config" | "default" | "embedder" | "environment" | "unknown";
|
|
62
|
+
max_concurrent_model_operations: "config" | "default" | "embedder" | "environment" | "unknown";
|
|
63
|
+
max_parallel_candidates: "config" | "default" | "embedder" | "environment" | "unknown";
|
|
64
|
+
max_deep_scan_width: "config" | "default" | "embedder" | "environment" | "unknown";
|
|
65
|
+
max_council_members: "config" | "default" | "embedder" | "environment" | "unknown";
|
|
66
|
+
} | undefined;
|
|
30
67
|
} | {
|
|
31
|
-
maxConcurrent: number;
|
|
68
|
+
maxConcurrent: number | "unlimited";
|
|
69
|
+
maxConcurrentNonModelJobs: number | "unlimited";
|
|
70
|
+
maxConcurrentModelOperations: number | "unlimited";
|
|
71
|
+
sources: {
|
|
72
|
+
max_concurrent?: "config" | "default" | "embedder" | "environment" | "unknown" | undefined;
|
|
73
|
+
max_concurrent_non_model_jobs?: "config" | "default" | "embedder" | "environment" | "unknown" | undefined;
|
|
74
|
+
max_concurrent_model_operations?: "config" | "default" | "embedder" | "environment" | "unknown" | undefined;
|
|
75
|
+
max_parallel_candidates: string;
|
|
76
|
+
max_deep_scan_width: string;
|
|
77
|
+
max_council_members: string;
|
|
78
|
+
};
|
|
32
79
|
};
|
|
33
80
|
};
|
|
34
|
-
/**
|
|
35
|
-
|
|
36
|
-
|
|
81
|
+
/** Capture all admission axes once. Explicit legacy maxConcurrent remains a
|
|
82
|
+
* GLOBAL override; omission has no hidden twelve-job or twenty-four-job cap. */
|
|
83
|
+
export declare function daemonConcurrencyCaps(options: {
|
|
84
|
+
maxConcurrent?: ConcurrencyLimit;
|
|
37
85
|
runtimeConcurrencyCaps?: RuntimeConcurrencyCaps;
|
|
38
|
-
}):
|
|
86
|
+
}): RuntimeConcurrencyCaps;
|
|
39
87
|
//# sourceMappingURL=daemon-health.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon-health.d.ts","sourceRoot":"","sources":["../src/daemon-health.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"daemon-health.d.ts","sourceRoot":"","sources":["../src/daemon-health.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAChB,sBAAsB,EAGtB,KAAK,oBAAoB,EAE1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAIhE,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EACjB,WAAW,EAAE,iBAAiB,EAC9B,IAAI,EAAE,sBAAsB,EAC5B,QAAQ,EAAE,oBAAoB,EAC9B,mBAAmB,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+B7B;AAED;gFACgF;AAChF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;CACjD,GAAG,sBAAsB,CA0BzB"}
|