looply-cli 0.0.0-stage → 0.3.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/LICENSE +21 -0
- package/README.md +137 -3
- package/dist/.src-hash +1 -0
- package/dist/acceptance-observe.d.ts +108 -0
- package/dist/acceptance-observe.d.ts.map +1 -0
- package/dist/acceptance-observe.js +152 -0
- package/dist/acceptance-observe.js.map +1 -0
- package/dist/agent-cmd.d.ts +131 -0
- package/dist/agent-cmd.d.ts.map +1 -0
- package/dist/agent-cmd.js +154 -0
- package/dist/agent-cmd.js.map +1 -0
- package/dist/agent-contained.d.ts +114 -0
- package/dist/agent-contained.d.ts.map +1 -0
- package/dist/agent-contained.js +292 -0
- package/dist/agent-contained.js.map +1 -0
- package/dist/agent-driver.d.ts +130 -0
- package/dist/agent-driver.d.ts.map +1 -0
- package/dist/agent-driver.js +170 -0
- package/dist/agent-driver.js.map +1 -0
- package/dist/agent-envelope.d.ts +94 -0
- package/dist/agent-envelope.d.ts.map +1 -0
- package/dist/agent-envelope.js +214 -0
- package/dist/agent-envelope.js.map +1 -0
- package/dist/agent-exec.d.ts +182 -0
- package/dist/agent-exec.d.ts.map +1 -0
- package/dist/agent-exec.js +125 -0
- package/dist/agent-exec.js.map +1 -0
- package/dist/agent-runtime.d.ts +23 -0
- package/dist/agent-runtime.d.ts.map +1 -0
- package/dist/agent-runtime.js +143 -0
- package/dist/agent-runtime.js.map +1 -0
- package/dist/approval-gate-read.d.ts +66 -0
- package/dist/approval-gate-read.d.ts.map +1 -0
- package/dist/approval-gate-read.js +138 -0
- package/dist/approval-gate-read.js.map +1 -0
- package/dist/approval-resolution.d.ts +87 -0
- package/dist/approval-resolution.d.ts.map +1 -0
- package/dist/approval-resolution.js +100 -0
- package/dist/approval-resolution.js.map +1 -0
- package/dist/approval-resumes.d.ts +102 -0
- package/dist/approval-resumes.d.ts.map +1 -0
- package/dist/approval-resumes.js +167 -0
- package/dist/approval-resumes.js.map +1 -0
- package/dist/ask-brain.d.ts +167 -0
- package/dist/ask-brain.d.ts.map +1 -0
- package/dist/ask-brain.js +355 -0
- package/dist/ask-brain.js.map +1 -0
- package/dist/autonomy-authority.d.ts +80 -0
- package/dist/autonomy-authority.d.ts.map +1 -0
- package/dist/autonomy-authority.js +82 -0
- package/dist/autonomy-authority.js.map +1 -0
- package/dist/autonomy-controller.d.ts +321 -0
- package/dist/autonomy-controller.d.ts.map +1 -0
- package/dist/autonomy-controller.js +517 -0
- package/dist/autonomy-controller.js.map +1 -0
- package/dist/autonomy-store.d.ts +327 -0
- package/dist/autonomy-store.d.ts.map +1 -0
- package/dist/autonomy-store.js +581 -0
- package/dist/autonomy-store.js.map +1 -0
- package/dist/autonomy-tick.d.ts +257 -0
- package/dist/autonomy-tick.d.ts.map +1 -0
- package/dist/autonomy-tick.js +616 -0
- package/dist/autonomy-tick.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +2727 -0
- package/dist/bin.js.map +1 -0
- package/dist/brain-advice.d.ts +21 -0
- package/dist/brain-advice.d.ts.map +1 -0
- package/dist/brain-advice.js +51 -0
- package/dist/brain-advice.js.map +1 -0
- package/dist/candidate-replay-runtime.d.ts +125 -0
- package/dist/candidate-replay-runtime.d.ts.map +1 -0
- package/dist/candidate-replay-runtime.js +188 -0
- package/dist/candidate-replay-runtime.js.map +1 -0
- package/dist/checkout-carry.d.ts +76 -0
- package/dist/checkout-carry.d.ts.map +1 -0
- package/dist/checkout-carry.js +125 -0
- package/dist/checkout-carry.js.map +1 -0
- package/dist/citation-readers.d.ts +26 -0
- package/dist/citation-readers.d.ts.map +1 -0
- package/dist/citation-readers.js +102 -0
- package/dist/citation-readers.js.map +1 -0
- package/dist/command-receipts.d.ts +79 -0
- package/dist/command-receipts.d.ts.map +1 -0
- package/dist/command-receipts.js +143 -0
- package/dist/command-receipts.js.map +1 -0
- package/dist/command-runner.d.ts +32 -0
- package/dist/command-runner.d.ts.map +1 -0
- package/dist/command-runner.js +108 -0
- package/dist/command-runner.js.map +1 -0
- package/dist/compatible-sets.d.ts +67 -0
- package/dist/compatible-sets.d.ts.map +1 -0
- package/dist/compatible-sets.js +81 -0
- package/dist/compatible-sets.js.map +1 -0
- package/dist/compile-check.d.ts +31 -0
- package/dist/compile-check.d.ts.map +1 -0
- package/dist/compile-check.js +34 -0
- package/dist/compile-check.js.map +1 -0
- package/dist/compile-store.d.ts +16 -0
- package/dist/compile-store.d.ts.map +1 -0
- package/dist/compile-store.js +21 -0
- package/dist/compile-store.js.map +1 -0
- package/dist/completion.d.ts +106 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +131 -0
- package/dist/completion.js.map +1 -0
- package/dist/config.d.ts +549 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +763 -0
- package/dist/config.js.map +1 -0
- package/dist/control-file.d.ts +142 -0
- package/dist/control-file.d.ts.map +1 -0
- package/dist/control-file.js +144 -0
- package/dist/control-file.js.map +1 -0
- package/dist/coordinator-state.d.ts +131 -0
- package/dist/coordinator-state.d.ts.map +1 -0
- package/dist/coordinator-state.js +380 -0
- package/dist/coordinator-state.js.map +1 -0
- package/dist/coordinator.d.ts +95 -0
- package/dist/coordinator.d.ts.map +1 -0
- package/dist/coordinator.js +97 -0
- package/dist/coordinator.js.map +1 -0
- package/dist/cursor-store.d.ts +53 -0
- package/dist/cursor-store.d.ts.map +1 -0
- package/dist/cursor-store.js +98 -0
- package/dist/cursor-store.js.map +1 -0
- package/dist/daemon-cmd.d.ts +239 -0
- package/dist/daemon-cmd.d.ts.map +1 -0
- package/dist/daemon-cmd.js +1751 -0
- package/dist/daemon-cmd.js.map +1 -0
- package/dist/daemon-lock.d.ts +140 -0
- package/dist/daemon-lock.d.ts.map +1 -0
- package/dist/daemon-lock.js +352 -0
- package/dist/daemon-lock.js.map +1 -0
- package/dist/daemon-recovery.d.ts +78 -0
- package/dist/daemon-recovery.d.ts.map +1 -0
- package/dist/daemon-recovery.js +161 -0
- package/dist/daemon-recovery.js.map +1 -0
- package/dist/daemon.d.ts +368 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +601 -0
- package/dist/daemon.js.map +1 -0
- package/dist/declared-response-shape.d.ts +93 -0
- package/dist/declared-response-shape.d.ts.map +1 -0
- package/dist/declared-response-shape.js +200 -0
- package/dist/declared-response-shape.js.map +1 -0
- package/dist/declared-surfaces.d.ts +16 -0
- package/dist/declared-surfaces.d.ts.map +1 -0
- package/dist/declared-surfaces.js +19 -0
- package/dist/declared-surfaces.js.map +1 -0
- package/dist/depends-review.d.ts +113 -0
- package/dist/depends-review.d.ts.map +1 -0
- package/dist/depends-review.js +110 -0
- package/dist/depends-review.js.map +1 -0
- package/dist/doctor.d.ts +91 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +71 -0
- package/dist/doctor.js.map +1 -0
- package/dist/edge-approval.d.ts +105 -0
- package/dist/edge-approval.d.ts.map +1 -0
- package/dist/edge-approval.js +100 -0
- package/dist/edge-approval.js.map +1 -0
- package/dist/evidence-cache.d.ts +45 -0
- package/dist/evidence-cache.d.ts.map +1 -0
- package/dist/evidence-cache.js +90 -0
- package/dist/evidence-cache.js.map +1 -0
- package/dist/evidence-cmd.d.ts +133 -0
- package/dist/evidence-cmd.d.ts.map +1 -0
- package/dist/evidence-cmd.js +347 -0
- package/dist/evidence-cmd.js.map +1 -0
- package/dist/evidence-facts.d.ts +40 -0
- package/dist/evidence-facts.d.ts.map +1 -0
- package/dist/evidence-facts.js +114 -0
- package/dist/evidence-facts.js.map +1 -0
- package/dist/exclusive-lock.d.ts +52 -0
- package/dist/exclusive-lock.d.ts.map +1 -0
- package/dist/exclusive-lock.js +150 -0
- package/dist/exclusive-lock.js.map +1 -0
- package/dist/exec-domains.d.ts +140 -0
- package/dist/exec-domains.d.ts.map +1 -0
- package/dist/exec-domains.js +287 -0
- package/dist/exec-domains.js.map +1 -0
- package/dist/exemption-store.d.ts +197 -0
- package/dist/exemption-store.d.ts.map +1 -0
- package/dist/exemption-store.js +266 -0
- package/dist/exemption-store.js.map +1 -0
- package/dist/explicit-start-gate.d.ts +96 -0
- package/dist/explicit-start-gate.d.ts.map +1 -0
- package/dist/explicit-start-gate.js +103 -0
- package/dist/explicit-start-gate.js.map +1 -0
- package/dist/fs-trouble.d.ts +70 -0
- package/dist/fs-trouble.d.ts.map +1 -0
- package/dist/fs-trouble.js +98 -0
- package/dist/fs-trouble.js.map +1 -0
- package/dist/gate.d.ts +278 -0
- package/dist/gate.d.ts.map +1 -0
- package/dist/gate.js +278 -0
- package/dist/gate.js.map +1 -0
- package/dist/git-driver.d.ts +519 -0
- package/dist/git-driver.d.ts.map +1 -0
- package/dist/git-driver.js +900 -0
- package/dist/git-driver.js.map +1 -0
- package/dist/git-push-executor.d.ts +41 -0
- package/dist/git-push-executor.d.ts.map +1 -0
- package/dist/git-push-executor.js +142 -0
- package/dist/git-push-executor.js.map +1 -0
- package/dist/glob.d.ts +26 -0
- package/dist/glob.d.ts.map +1 -0
- package/dist/glob.js +93 -0
- package/dist/glob.js.map +1 -0
- package/dist/goal-adaptive.d.ts +295 -0
- package/dist/goal-adaptive.d.ts.map +1 -0
- package/dist/goal-adaptive.js +393 -0
- package/dist/goal-adaptive.js.map +1 -0
- package/dist/goal-compile.d.ts +342 -0
- package/dist/goal-compile.d.ts.map +1 -0
- package/dist/goal-compile.js +444 -0
- package/dist/goal-compile.js.map +1 -0
- package/dist/goal-depends-executor.d.ts +55 -0
- package/dist/goal-depends-executor.d.ts.map +1 -0
- package/dist/goal-depends-executor.js +202 -0
- package/dist/goal-depends-executor.js.map +1 -0
- package/dist/goal-execution-evidence.d.ts +135 -0
- package/dist/goal-execution-evidence.d.ts.map +1 -0
- package/dist/goal-execution-evidence.js +159 -0
- package/dist/goal-execution-evidence.js.map +1 -0
- package/dist/goal-gap.d.ts +140 -0
- package/dist/goal-gap.d.ts.map +1 -0
- package/dist/goal-gap.js +197 -0
- package/dist/goal-gap.js.map +1 -0
- package/dist/goal-met-target.d.ts +98 -0
- package/dist/goal-met-target.d.ts.map +1 -0
- package/dist/goal-met-target.js +92 -0
- package/dist/goal-met-target.js.map +1 -0
- package/dist/goal-ownership.d.ts +416 -0
- package/dist/goal-ownership.d.ts.map +1 -0
- package/dist/goal-ownership.js +576 -0
- package/dist/goal-ownership.js.map +1 -0
- package/dist/goal-runs.d.ts +82 -0
- package/dist/goal-runs.d.ts.map +1 -0
- package/dist/goal-runs.js +120 -0
- package/dist/goal-runs.js.map +1 -0
- package/dist/goal-store.d.ts +146 -0
- package/dist/goal-store.d.ts.map +1 -0
- package/dist/goal-store.js +294 -0
- package/dist/goal-store.js.map +1 -0
- package/dist/goal-view.d.ts +156 -0
- package/dist/goal-view.d.ts.map +1 -0
- package/dist/goal-view.js +499 -0
- package/dist/goal-view.js.map +1 -0
- package/dist/governed-approvals.d.ts +152 -0
- package/dist/governed-approvals.d.ts.map +1 -0
- package/dist/governed-approvals.js +246 -0
- package/dist/governed-approvals.js.map +1 -0
- package/dist/governed-broker.d.ts +169 -0
- package/dist/governed-broker.d.ts.map +1 -0
- package/dist/governed-broker.js +196 -0
- package/dist/governed-broker.js.map +1 -0
- package/dist/governed-run.d.ts +220 -0
- package/dist/governed-run.d.ts.map +1 -0
- package/dist/governed-run.js +406 -0
- package/dist/governed-run.js.map +1 -0
- package/dist/grant-reconcile.d.ts +63 -0
- package/dist/grant-reconcile.d.ts.map +1 -0
- package/dist/grant-reconcile.js +121 -0
- package/dist/grant-reconcile.js.map +1 -0
- package/dist/index-for-head.d.ts +56 -0
- package/dist/index-for-head.d.ts.map +1 -0
- package/dist/index-for-head.js +103 -0
- package/dist/index-for-head.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/init-detect.d.ts +39 -0
- package/dist/init-detect.d.ts.map +1 -0
- package/dist/init-detect.js +188 -0
- package/dist/init-detect.js.map +1 -0
- package/dist/integration-deps.d.ts +62 -0
- package/dist/integration-deps.d.ts.map +1 -0
- package/dist/integration-deps.js +251 -0
- package/dist/integration-deps.js.map +1 -0
- package/dist/integration-runtime.d.ts +458 -0
- package/dist/integration-runtime.d.ts.map +1 -0
- package/dist/integration-runtime.js +681 -0
- package/dist/integration-runtime.js.map +1 -0
- package/dist/integration.d.ts +45 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +87 -0
- package/dist/integration.js.map +1 -0
- package/dist/integrator.d.ts +84 -0
- package/dist/integrator.d.ts.map +1 -0
- package/dist/integrator.js +193 -0
- package/dist/integrator.js.map +1 -0
- package/dist/lane-claims.d.ts +174 -0
- package/dist/lane-claims.d.ts.map +1 -0
- package/dist/lane-claims.js +218 -0
- package/dist/lane-claims.js.map +1 -0
- package/dist/lane-coverage.d.ts +87 -0
- package/dist/lane-coverage.d.ts.map +1 -0
- package/dist/lane-coverage.js +129 -0
- package/dist/lane-coverage.js.map +1 -0
- package/dist/ledger-replay.d.ts +115 -0
- package/dist/ledger-replay.d.ts.map +1 -0
- package/dist/ledger-replay.js +155 -0
- package/dist/ledger-replay.js.map +1 -0
- package/dist/ledger-store.d.ts +68 -0
- package/dist/ledger-store.d.ts.map +1 -0
- package/dist/ledger-store.js +111 -0
- package/dist/ledger-store.js.map +1 -0
- package/dist/loop-safety-observer.d.ts +132 -0
- package/dist/loop-safety-observer.d.ts.map +1 -0
- package/dist/loop-safety-observer.js +76 -0
- package/dist/loop-safety-observer.js.map +1 -0
- package/dist/loop-safety-store.d.ts +339 -0
- package/dist/loop-safety-store.d.ts.map +1 -0
- package/dist/loop-safety-store.js +800 -0
- package/dist/loop-safety-store.js.map +1 -0
- package/dist/machine-store.d.ts +54 -0
- package/dist/machine-store.d.ts.map +1 -0
- package/dist/machine-store.js +149 -0
- package/dist/machine-store.js.map +1 -0
- package/dist/mcp-main.d.ts +2 -0
- package/dist/mcp-main.d.ts.map +1 -0
- package/dist/mcp-main.js +116 -0
- package/dist/mcp-main.js.map +1 -0
- package/dist/mcp-server.d.ts +72 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +259 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/model-routing.d.ts +75 -0
- package/dist/model-routing.d.ts.map +1 -0
- package/dist/model-routing.js +108 -0
- package/dist/model-routing.js.map +1 -0
- package/dist/model-transport.d.ts +188 -0
- package/dist/model-transport.d.ts.map +1 -0
- package/dist/model-transport.js +625 -0
- package/dist/model-transport.js.map +1 -0
- package/dist/notify-cadence.d.ts +55 -0
- package/dist/notify-cadence.d.ts.map +1 -0
- package/dist/notify-cadence.js +68 -0
- package/dist/notify-cadence.js.map +1 -0
- package/dist/notify-channel.d.ts +69 -0
- package/dist/notify-channel.d.ts.map +1 -0
- package/dist/notify-channel.js +151 -0
- package/dist/notify-channel.js.map +1 -0
- package/dist/notify.d.ts +71 -0
- package/dist/notify.d.ts.map +1 -0
- package/dist/notify.js +125 -0
- package/dist/notify.js.map +1 -0
- package/dist/observation-inventory.d.ts +65 -0
- package/dist/observation-inventory.d.ts.map +1 -0
- package/dist/observation-inventory.js +139 -0
- package/dist/observation-inventory.js.map +1 -0
- package/dist/owned-children.d.ts +45 -0
- package/dist/owned-children.d.ts.map +1 -0
- package/dist/owned-children.js +64 -0
- package/dist/owned-children.js.map +1 -0
- package/dist/packet-for-goal.d.ts +19 -0
- package/dist/packet-for-goal.d.ts.map +1 -0
- package/dist/packet-for-goal.js +32 -0
- package/dist/packet-for-goal.js.map +1 -0
- package/dist/pair-cmd.d.ts +85 -0
- package/dist/pair-cmd.d.ts.map +1 -0
- package/dist/pair-cmd.js +205 -0
- package/dist/pair-cmd.js.map +1 -0
- package/dist/partial-asker.d.ts +96 -0
- package/dist/partial-asker.d.ts.map +1 -0
- package/dist/partial-asker.js +117 -0
- package/dist/partial-asker.js.map +1 -0
- package/dist/pdf-text-lines.d.ts +17 -0
- package/dist/pdf-text-lines.d.ts.map +1 -0
- package/dist/pdf-text-lines.js +70 -0
- package/dist/pdf-text-lines.js.map +1 -0
- package/dist/pdf-text-worker.d.ts +2 -0
- package/dist/pdf-text-worker.d.ts.map +1 -0
- package/dist/pdf-text-worker.js +81 -0
- package/dist/pdf-text-worker.js.map +1 -0
- package/dist/pdf-text.d.ts +56 -0
- package/dist/pdf-text.d.ts.map +1 -0
- package/dist/pdf-text.js +64 -0
- package/dist/pdf-text.js.map +1 -0
- package/dist/pending-action.d.ts +154 -0
- package/dist/pending-action.d.ts.map +1 -0
- package/dist/pending-action.js +148 -0
- package/dist/pending-action.js.map +1 -0
- package/dist/preemptor.d.ts +40 -0
- package/dist/preemptor.d.ts.map +1 -0
- package/dist/preemptor.js +49 -0
- package/dist/preemptor.js.map +1 -0
- package/dist/programme-mode.d.ts +29 -0
- package/dist/programme-mode.d.ts.map +1 -0
- package/dist/programme-mode.js +50 -0
- package/dist/programme-mode.js.map +1 -0
- package/dist/progress-view.d.ts +14 -0
- package/dist/progress-view.d.ts.map +1 -0
- package/dist/progress-view.js +114 -0
- package/dist/progress-view.js.map +1 -0
- package/dist/project-graph-builder.d.ts +81 -0
- package/dist/project-graph-builder.d.ts.map +1 -0
- package/dist/project-graph-builder.js +246 -0
- package/dist/project-graph-builder.js.map +1 -0
- package/dist/project-graph-runtime.d.ts +86 -0
- package/dist/project-graph-runtime.d.ts.map +1 -0
- package/dist/project-graph-runtime.js +112 -0
- package/dist/project-graph-runtime.js.map +1 -0
- package/dist/project-index-builder.d.ts +96 -0
- package/dist/project-index-builder.d.ts.map +1 -0
- package/dist/project-index-builder.js +298 -0
- package/dist/project-index-builder.js.map +1 -0
- package/dist/project-index-facts.d.ts +51 -0
- package/dist/project-index-facts.d.ts.map +1 -0
- package/dist/project-index-facts.js +117 -0
- package/dist/project-index-facts.js.map +1 -0
- package/dist/project-index-store.d.ts +97 -0
- package/dist/project-index-store.d.ts.map +1 -0
- package/dist/project-index-store.js +140 -0
- package/dist/project-index-store.js.map +1 -0
- package/dist/project-memory-store.d.ts +127 -0
- package/dist/project-memory-store.d.ts.map +1 -0
- package/dist/project-memory-store.js +302 -0
- package/dist/project-memory-store.js.map +1 -0
- package/dist/proposal-store.d.ts +14 -0
- package/dist/proposal-store.d.ts.map +1 -0
- package/dist/proposal-store.js +19 -0
- package/dist/proposal-store.js.map +1 -0
- package/dist/prover.d.ts +80 -0
- package/dist/prover.d.ts.map +1 -0
- package/dist/prover.js +137 -0
- package/dist/prover.js.map +1 -0
- package/dist/provider-identity-store.d.ts +34 -0
- package/dist/provider-identity-store.d.ts.map +1 -0
- package/dist/provider-identity-store.js +72 -0
- package/dist/provider-identity-store.js.map +1 -0
- package/dist/provider-identity.d.ts +104 -0
- package/dist/provider-identity.d.ts.map +1 -0
- package/dist/provider-identity.js +167 -0
- package/dist/provider-identity.js.map +1 -0
- package/dist/provider-limit.d.ts +79 -0
- package/dist/provider-limit.d.ts.map +1 -0
- package/dist/provider-limit.js +148 -0
- package/dist/provider-limit.js.map +1 -0
- package/dist/provider-preflight.d.ts +171 -0
- package/dist/provider-preflight.d.ts.map +1 -0
- package/dist/provider-preflight.js +395 -0
- package/dist/provider-preflight.js.map +1 -0
- package/dist/provider-state.d.ts +120 -0
- package/dist/provider-state.d.ts.map +1 -0
- package/dist/provider-state.js +182 -0
- package/dist/provider-state.js.map +1 -0
- package/dist/providers.d.ts +132 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +161 -0
- package/dist/providers.js.map +1 -0
- package/dist/publication-recorder.d.ts +117 -0
- package/dist/publication-recorder.d.ts.map +1 -0
- package/dist/publication-recorder.js +124 -0
- package/dist/publication-recorder.js.map +1 -0
- package/dist/pursuit-delivery.d.ts +24 -0
- package/dist/pursuit-delivery.d.ts.map +1 -0
- package/dist/pursuit-delivery.js +38 -0
- package/dist/pursuit-delivery.js.map +1 -0
- package/dist/queue-store.d.ts +132 -0
- package/dist/queue-store.d.ts.map +1 -0
- package/dist/queue-store.js +185 -0
- package/dist/queue-store.js.map +1 -0
- package/dist/queue-summary.d.ts +14 -0
- package/dist/queue-summary.d.ts.map +1 -0
- package/dist/queue-summary.js +82 -0
- package/dist/queue-summary.js.map +1 -0
- package/dist/queue-view.d.ts +20 -0
- package/dist/queue-view.d.ts.map +1 -0
- package/dist/queue-view.js +163 -0
- package/dist/queue-view.js.map +1 -0
- package/dist/queue-write-lease.d.ts +106 -0
- package/dist/queue-write-lease.d.ts.map +1 -0
- package/dist/queue-write-lease.js +282 -0
- package/dist/queue-write-lease.js.map +1 -0
- package/dist/rails-home.d.ts +162 -0
- package/dist/rails-home.d.ts.map +1 -0
- package/dist/rails-home.js +452 -0
- package/dist/rails-home.js.map +1 -0
- package/dist/rails-migrations.d.ts +75 -0
- package/dist/rails-migrations.d.ts.map +1 -0
- package/dist/rails-migrations.js +199 -0
- package/dist/rails-migrations.js.map +1 -0
- package/dist/rails-stores.d.ts +49 -0
- package/dist/rails-stores.d.ts.map +1 -0
- package/dist/rails-stores.js +100 -0
- package/dist/rails-stores.js.map +1 -0
- package/dist/reaper.d.ts +69 -0
- package/dist/reaper.d.ts.map +1 -0
- package/dist/reaper.js +152 -0
- package/dist/reaper.js.map +1 -0
- package/dist/record-store.d.ts +36 -0
- package/dist/record-store.d.ts.map +1 -0
- package/dist/record-store.js +78 -0
- package/dist/record-store.js.map +1 -0
- package/dist/recovery-io.d.ts +50 -0
- package/dist/recovery-io.d.ts.map +1 -0
- package/dist/recovery-io.js +122 -0
- package/dist/recovery-io.js.map +1 -0
- package/dist/recovery.d.ts +146 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +110 -0
- package/dist/recovery.js.map +1 -0
- package/dist/redraw.d.ts +34 -0
- package/dist/redraw.d.ts.map +1 -0
- package/dist/redraw.js +62 -0
- package/dist/redraw.js.map +1 -0
- package/dist/rejected-evidence.d.ts +255 -0
- package/dist/rejected-evidence.d.ts.map +1 -0
- package/dist/rejected-evidence.js +324 -0
- package/dist/rejected-evidence.js.map +1 -0
- package/dist/report-cmd.d.ts +32 -0
- package/dist/report-cmd.d.ts.map +1 -0
- package/dist/report-cmd.js +201 -0
- package/dist/report-cmd.js.map +1 -0
- package/dist/repos-cmd.d.ts +80 -0
- package/dist/repos-cmd.d.ts.map +1 -0
- package/dist/repos-cmd.js +240 -0
- package/dist/repos-cmd.js.map +1 -0
- package/dist/request-body-shape.d.ts +93 -0
- package/dist/request-body-shape.d.ts.map +1 -0
- package/dist/request-body-shape.js +407 -0
- package/dist/request-body-shape.js.map +1 -0
- package/dist/requirement-claims.d.ts +89 -0
- package/dist/requirement-claims.d.ts.map +1 -0
- package/dist/requirement-claims.js +92 -0
- package/dist/requirement-claims.js.map +1 -0
- package/dist/retention-apply-runtime.d.ts +105 -0
- package/dist/retention-apply-runtime.d.ts.map +1 -0
- package/dist/retention-apply-runtime.js +269 -0
- package/dist/retention-apply-runtime.js.map +1 -0
- package/dist/reverify.d.ts +41 -0
- package/dist/reverify.d.ts.map +1 -0
- package/dist/reverify.js +69 -0
- package/dist/reverify.js.map +1 -0
- package/dist/round-records.d.ts +65 -0
- package/dist/round-records.d.ts.map +1 -0
- package/dist/round-records.js +61 -0
- package/dist/round-records.js.map +1 -0
- package/dist/round-runner.d.ts +924 -0
- package/dist/round-runner.d.ts.map +1 -0
- package/dist/round-runner.js +1693 -0
- package/dist/round-runner.js.map +1 -0
- package/dist/run-approval.d.ts +180 -0
- package/dist/run-approval.d.ts.map +1 -0
- package/dist/run-approval.js +199 -0
- package/dist/run-approval.js.map +1 -0
- package/dist/run-cmd.d.ts +359 -0
- package/dist/run-cmd.d.ts.map +1 -0
- package/dist/run-cmd.js +4418 -0
- package/dist/run-cmd.js.map +1 -0
- package/dist/run-delivery.d.ts +71 -0
- package/dist/run-delivery.d.ts.map +1 -0
- package/dist/run-delivery.js +104 -0
- package/dist/run-delivery.js.map +1 -0
- package/dist/run-ended.d.ts +75 -0
- package/dist/run-ended.d.ts.map +1 -0
- package/dist/run-ended.js +27 -0
- package/dist/run-ended.js.map +1 -0
- package/dist/run-ending-locator.d.ts +125 -0
- package/dist/run-ending-locator.d.ts.map +1 -0
- package/dist/run-ending-locator.js +133 -0
- package/dist/run-ending-locator.js.map +1 -0
- package/dist/run-launcher.d.ts +459 -0
- package/dist/run-launcher.d.ts.map +1 -0
- package/dist/run-launcher.js +652 -0
- package/dist/run-launcher.js.map +1 -0
- package/dist/run-lease.d.ts +208 -0
- package/dist/run-lease.d.ts.map +1 -0
- package/dist/run-lease.js +301 -0
- package/dist/run-lease.js.map +1 -0
- package/dist/run-refusal-marks.d.ts +189 -0
- package/dist/run-refusal-marks.d.ts.map +1 -0
- package/dist/run-refusal-marks.js +249 -0
- package/dist/run-refusal-marks.js.map +1 -0
- package/dist/run-start-marks.d.ts +153 -0
- package/dist/run-start-marks.d.ts.map +1 -0
- package/dist/run-start-marks.js +269 -0
- package/dist/run-start-marks.js.map +1 -0
- package/dist/scan-cmd.d.ts +14 -0
- package/dist/scan-cmd.d.ts.map +1 -0
- package/dist/scan-cmd.js +270 -0
- package/dist/scan-cmd.js.map +1 -0
- package/dist/scan-events.d.ts +50 -0
- package/dist/scan-events.d.ts.map +1 -0
- package/dist/scan-events.js +91 -0
- package/dist/scan-events.js.map +1 -0
- package/dist/scan.d.ts +191 -0
- package/dist/scan.d.ts.map +1 -0
- package/dist/scan.js +417 -0
- package/dist/scan.js.map +1 -0
- package/dist/scope-rule.d.ts +148 -0
- package/dist/scope-rule.d.ts.map +1 -0
- package/dist/scope-rule.js +121 -0
- package/dist/scope-rule.js.map +1 -0
- package/dist/self-repo-id.d.ts +18 -0
- package/dist/self-repo-id.d.ts.map +1 -0
- package/dist/self-repo-id.js +70 -0
- package/dist/self-repo-id.js.map +1 -0
- package/dist/serve-cmd.d.ts +115 -0
- package/dist/serve-cmd.d.ts.map +1 -0
- package/dist/serve-cmd.js +505 -0
- package/dist/serve-cmd.js.map +1 -0
- package/dist/serve.d.ts +167 -0
- package/dist/serve.d.ts.map +1 -0
- package/dist/serve.js +336 -0
- package/dist/serve.js.map +1 -0
- package/dist/server-client.d.ts +766 -0
- package/dist/server-client.d.ts.map +1 -0
- package/dist/server-client.js +475 -0
- package/dist/server-client.js.map +1 -0
- package/dist/session-adapter-runtime.d.ts +195 -0
- package/dist/session-adapter-runtime.d.ts.map +1 -0
- package/dist/session-adapter-runtime.js +373 -0
- package/dist/session-adapter-runtime.js.map +1 -0
- package/dist/session-checkpoint-runtime.d.ts +62 -0
- package/dist/session-checkpoint-runtime.d.ts.map +1 -0
- package/dist/session-checkpoint-runtime.js +268 -0
- package/dist/session-checkpoint-runtime.js.map +1 -0
- package/dist/session-control-transport.d.ts +106 -0
- package/dist/session-control-transport.d.ts.map +1 -0
- package/dist/session-control-transport.js +232 -0
- package/dist/session-control-transport.js.map +1 -0
- package/dist/session-observation-store.d.ts +98 -0
- package/dist/session-observation-store.d.ts.map +1 -0
- package/dist/session-observation-store.js +155 -0
- package/dist/session-observation-store.js.map +1 -0
- package/dist/session-observe-runtime.d.ts +123 -0
- package/dist/session-observe-runtime.d.ts.map +1 -0
- package/dist/session-observe-runtime.js +317 -0
- package/dist/session-observe-runtime.js.map +1 -0
- package/dist/session-store.d.ts +98 -0
- package/dist/session-store.d.ts.map +1 -0
- package/dist/session-store.js +116 -0
- package/dist/session-store.js.map +1 -0
- package/dist/sessions-cmd.d.ts +202 -0
- package/dist/sessions-cmd.d.ts.map +1 -0
- package/dist/sessions-cmd.js +609 -0
- package/dist/sessions-cmd.js.map +1 -0
- package/dist/settings-overlay.d.ts +53 -0
- package/dist/settings-overlay.d.ts.map +1 -0
- package/dist/settings-overlay.js +175 -0
- package/dist/settings-overlay.js.map +1 -0
- package/dist/setup-prompt.d.ts +34 -0
- package/dist/setup-prompt.d.ts.map +1 -0
- package/dist/setup-prompt.js +92 -0
- package/dist/setup-prompt.js.map +1 -0
- package/dist/setup.d.ts +103 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +283 -0
- package/dist/setup.js.map +1 -0
- package/dist/shared-grants.d.ts +164 -0
- package/dist/shared-grants.d.ts.map +1 -0
- package/dist/shared-grants.js +242 -0
- package/dist/shared-grants.js.map +1 -0
- package/dist/signals.d.ts +55 -0
- package/dist/signals.d.ts.map +1 -0
- package/dist/signals.js +85 -0
- package/dist/signals.js.map +1 -0
- package/dist/source-cmd.d.ts +201 -0
- package/dist/source-cmd.d.ts.map +1 -0
- package/dist/source-cmd.js +684 -0
- package/dist/source-cmd.js.map +1 -0
- package/dist/source-verdict.d.ts +99 -0
- package/dist/source-verdict.d.ts.map +1 -0
- package/dist/source-verdict.js +182 -0
- package/dist/source-verdict.js.map +1 -0
- package/dist/spend-ledger.d.ts +350 -0
- package/dist/spend-ledger.d.ts.map +1 -0
- package/dist/spend-ledger.js +546 -0
- package/dist/spend-ledger.js.map +1 -0
- package/dist/stale-run-sweep.d.ts +79 -0
- package/dist/stale-run-sweep.d.ts.map +1 -0
- package/dist/stale-run-sweep.js +116 -0
- package/dist/stale-run-sweep.js.map +1 -0
- package/dist/start-attempts.d.ts +385 -0
- package/dist/start-attempts.d.ts.map +1 -0
- package/dist/start-attempts.js +613 -0
- package/dist/start-attempts.js.map +1 -0
- package/dist/status-cmd.d.ts +28 -0
- package/dist/status-cmd.d.ts.map +1 -0
- package/dist/status-cmd.js +116 -0
- package/dist/status-cmd.js.map +1 -0
- package/dist/stop-follow-up.d.ts +107 -0
- package/dist/stop-follow-up.d.ts.map +1 -0
- package/dist/stop-follow-up.js +172 -0
- package/dist/stop-follow-up.js.map +1 -0
- package/dist/surface-lease.d.ts +118 -0
- package/dist/surface-lease.d.ts.map +1 -0
- package/dist/surface-lease.js +485 -0
- package/dist/surface-lease.js.map +1 -0
- package/dist/sync.d.ts +54 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +93 -0
- package/dist/sync.js.map +1 -0
- package/dist/syncing-ledger.d.ts +45 -0
- package/dist/syncing-ledger.d.ts.map +1 -0
- package/dist/syncing-ledger.js +53 -0
- package/dist/syncing-ledger.js.map +1 -0
- package/dist/temp-fixtures.d.ts +68 -0
- package/dist/temp-fixtures.d.ts.map +1 -0
- package/dist/temp-fixtures.js +38 -0
- package/dist/temp-fixtures.js.map +1 -0
- package/dist/token-window.d.ts +84 -0
- package/dist/token-window.d.ts.map +1 -0
- package/dist/token-window.js +143 -0
- package/dist/token-window.js.map +1 -0
- package/dist/tool-bridge.d.ts +177 -0
- package/dist/tool-bridge.d.ts.map +1 -0
- package/dist/tool-bridge.js +329 -0
- package/dist/tool-bridge.js.map +1 -0
- package/dist/tool-call-record.d.ts +197 -0
- package/dist/tool-call-record.d.ts.map +1 -0
- package/dist/tool-call-record.js +276 -0
- package/dist/tool-call-record.js.map +1 -0
- package/dist/tool-protocol.d.ts +135 -0
- package/dist/tool-protocol.d.ts.map +1 -0
- package/dist/tool-protocol.js +104 -0
- package/dist/tool-protocol.js.map +1 -0
- package/dist/tool-worker.d.ts +3 -0
- package/dist/tool-worker.d.ts.map +1 -0
- package/dist/tool-worker.js +478 -0
- package/dist/tool-worker.js.map +1 -0
- package/dist/toolchain-mirror.d.ts +86 -0
- package/dist/toolchain-mirror.d.ts.map +1 -0
- package/dist/toolchain-mirror.js +307 -0
- package/dist/toolchain-mirror.js.map +1 -0
- package/dist/trusted-git.d.ts +243 -0
- package/dist/trusted-git.d.ts.map +1 -0
- package/dist/trusted-git.js +920 -0
- package/dist/trusted-git.js.map +1 -0
- package/dist/ui.d.ts +76 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +118 -0
- package/dist/ui.js.map +1 -0
- package/dist/untrusted-exec.d.ts +275 -0
- package/dist/untrusted-exec.d.ts.map +1 -0
- package/dist/untrusted-exec.js +479 -0
- package/dist/untrusted-exec.js.map +1 -0
- package/dist/untrusted-gate.d.ts +73 -0
- package/dist/untrusted-gate.d.ts.map +1 -0
- package/dist/untrusted-gate.js +226 -0
- package/dist/untrusted-gate.js.map +1 -0
- package/dist/uploader.d.ts +153 -0
- package/dist/uploader.d.ts.map +1 -0
- package/dist/uploader.js +204 -0
- package/dist/uploader.js.map +1 -0
- package/dist/verifier.d.ts +66 -0
- package/dist/verifier.d.ts.map +1 -0
- package/dist/verifier.js +170 -0
- package/dist/verifier.js.map +1 -0
- package/dist/verify-apply.d.ts +26 -0
- package/dist/verify-apply.d.ts.map +1 -0
- package/dist/verify-apply.js +36 -0
- package/dist/verify-apply.js.map +1 -0
- package/dist/verify-cmd.d.ts +44 -0
- package/dist/verify-cmd.d.ts.map +1 -0
- package/dist/verify-cmd.js +125 -0
- package/dist/verify-cmd.js.map +1 -0
- package/dist/verify-pass.d.ts +73 -0
- package/dist/verify-pass.d.ts.map +1 -0
- package/dist/verify-pass.js +103 -0
- package/dist/verify-pass.js.map +1 -0
- package/dist/welcome.d.ts +43 -0
- package/dist/welcome.d.ts.map +1 -0
- package/dist/welcome.js +116 -0
- package/dist/welcome.js.map +1 -0
- package/dist/workspace-provisioner.d.ts +65 -0
- package/dist/workspace-provisioner.d.ts.map +1 -0
- package/dist/workspace-provisioner.js +66 -0
- package/dist/workspace-provisioner.js.map +1 -0
- package/dist/workspace-quarantine.d.ts +64 -0
- package/dist/workspace-quarantine.d.ts.map +1 -0
- package/dist/workspace-quarantine.js +156 -0
- package/dist/workspace-quarantine.js.map +1 -0
- package/dist/workspace-residue-sweep.d.ts +113 -0
- package/dist/workspace-residue-sweep.d.ts.map +1 -0
- package/dist/workspace-residue-sweep.js +158 -0
- package/dist/workspace-residue-sweep.js.map +1 -0
- package/dist/workspace.d.ts +639 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +2026 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +52 -4
- package/win/CredProbe.cs +64 -0
- package/win/FakeClaude.cs +56 -0
- package/win/HandleProbe.cs +116 -0
- package/win/TokenProbe.cs +53 -0
- package/win/appcontainer.ps1 +500 -0
|
@@ -0,0 +1,581 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AutonomyStore = exports.nodeAutonomyFs = exports.AUTONOMY_STORE_SCHEMA = void 0;
|
|
4
|
+
exports.receiptTrouble = receiptTrouble;
|
|
5
|
+
exports.autonomyStartId = autonomyStartId;
|
|
6
|
+
const core_1 = require("@looply/core");
|
|
7
|
+
const fs_trouble_1 = require("./fs-trouble");
|
|
8
|
+
const ledger_store_1 = require("./ledger-store");
|
|
9
|
+
const run_lease_1 = require("./run-lease");
|
|
10
|
+
/**
|
|
11
|
+
* WHAT THIS MACHINE HAS SPENT OF A GRANT.
|
|
12
|
+
*
|
|
13
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
14
|
+
* THE COUNT IS NOT A NUMBER IN A FILE. IT IS A PILE OF RECEIPTS.
|
|
15
|
+
*
|
|
16
|
+
* 6D1R-C. Spending used to be read-then-write on `startsConsumed`: read 3,
|
|
17
|
+
* add one, write 4. Two daemons for one project are possible -- nothing takes
|
|
18
|
+
* a lock at daemon startup, which was verified rather than assumed -- and two
|
|
19
|
+
* of them reading 3 both write 4. One Start's worth of budget, two Starts
|
|
20
|
+
* issued, and the file afterwards is perfectly well-formed and says 4. There
|
|
21
|
+
* is no later moment at which anything could notice.
|
|
22
|
+
*
|
|
23
|
+
* So an ordinal is now RESERVED rather than counted: one file per Start,
|
|
24
|
+
* created with O_EXCL, which the operating system will hand to exactly one
|
|
25
|
+
* caller. The loser of that race gets EEXIST, moves to the next ordinal and
|
|
26
|
+
* takes that one instead. Both callers end up with a distinct Start and the
|
|
27
|
+
* total spent is still the number of files, which nobody can lose an update
|
|
28
|
+
* to because nobody ever updates anything.
|
|
29
|
+
*
|
|
30
|
+
* `startsConsumed` is DERIVED from the receipts. Storing it as well would
|
|
31
|
+
* recreate the same defect one indirection down: two sources for one fact,
|
|
32
|
+
* disagreeing the first time a write was lost.
|
|
33
|
+
*
|
|
34
|
+
* At most one Start at a time is a separate invariant, and the RUN LEASE is
|
|
35
|
+
* what holds it -- also O_EXCL, also structural. The check here is a cheap
|
|
36
|
+
* early refusal, not the guard. Two daemons that both reserve an ordinal
|
|
37
|
+
* produce one run and one refusal, and the refused one has spent a Start,
|
|
38
|
+
* which is the direction this file always errs in.
|
|
39
|
+
*
|
|
40
|
+
* The server owns AUTHORIZATION — who may pursue which goal at which version,
|
|
41
|
+
* with what ceiling, until when. This owns EXECUTION PROGRESS: how many bounded
|
|
42
|
+
* Starts have actually been spent here, and which one is in flight.
|
|
43
|
+
*
|
|
44
|
+
* One fact, one writer. A `startsConsumed` column on the server would be a
|
|
45
|
+
* counter written from both sides, and the two would disagree the first time a
|
|
46
|
+
* machine spent a Start while offline.
|
|
47
|
+
*
|
|
48
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
49
|
+
* WHY NOT ANY EXISTING FILE
|
|
50
|
+
*
|
|
51
|
+
* `queue.json` — two processes write it without holding the run lease
|
|
52
|
+
* (`scan-cmd`, `verify-cmd`), each rewriting the whole list from a map filled at
|
|
53
|
+
* open. A stale writer would revert a budget, and reverting a budget REFILLS it.
|
|
54
|
+
*
|
|
55
|
+
* `goals.json` — the format is `{ schema, goals }` and nothing else survives a
|
|
56
|
+
* write. Not a race: a field that is not a goal is erased by the file's shape,
|
|
57
|
+
* on every write, from two processes.
|
|
58
|
+
*
|
|
59
|
+
* `control.json` — consumed unconditionally at the start of every run, on the
|
|
60
|
+
* reasoning that "starting a run is itself the human saying go". Right for a
|
|
61
|
+
* pause; fatal for a grant, which must outlive the runs it authorizes.
|
|
62
|
+
*
|
|
63
|
+
* The command row — deliberately time-boxed to the one-hour redelivery window,
|
|
64
|
+
* precisely so that an old command cannot be reinterpreted as a standing
|
|
65
|
+
* permission.
|
|
66
|
+
*
|
|
67
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
68
|
+
* FAILS CLOSED, WHICH IS THE WHOLE POINT
|
|
69
|
+
*
|
|
70
|
+
* A missing or unreadable file does NOT mean "nothing has been spent". It means
|
|
71
|
+
* this machine cannot say what it has spent, and a budget it cannot account for
|
|
72
|
+
* is a budget it may not draw on. Every other store here discards a corrupt
|
|
73
|
+
* file and carries on, because every other store holds a cache of something
|
|
74
|
+
* recoverable. This one holds the only record of what was already permitted and
|
|
75
|
+
* used, so the same policy would silently refill the budget on any corruption —
|
|
76
|
+
* turning a damaged file into unlimited Starts.
|
|
77
|
+
*/
|
|
78
|
+
/**
|
|
79
|
+
* Bumped only when the on-disk shape changes incompatibly. Read, not decorative.
|
|
80
|
+
*
|
|
81
|
+
* 2 dropped `startsConsumed` and `inFlight` from the file, because both are now
|
|
82
|
+
* derived from receipts. A schema-1 file is REFUSED rather than migrated: its
|
|
83
|
+
* count is a number this build has no receipts for, and inventing receipts to
|
|
84
|
+
* match it would be inventing the very evidence the receipts exist to be.
|
|
85
|
+
*/
|
|
86
|
+
exports.AUTONOMY_STORE_SCHEMA = 2;
|
|
87
|
+
/** The real one: ledger reads and writes, plus the lease file's exclusive create. */
|
|
88
|
+
exports.nodeAutonomyFs = {
|
|
89
|
+
...ledger_store_1.nodeLedgerFs,
|
|
90
|
+
createExclusive: run_lease_1.nodeLeaseFs.createExclusive,
|
|
91
|
+
};
|
|
92
|
+
function isEexist(e) {
|
|
93
|
+
return typeof e === 'object' && e !== null && e.code === 'EEXIST';
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* The deterministic identity of one bounded Start within one grant.
|
|
97
|
+
*
|
|
98
|
+
* Two daemons can run for one project — nothing takes a lock at daemon startup,
|
|
99
|
+
* verified rather than assumed — so "the next Start" must be a name both would
|
|
100
|
+
* compute identically, not a fresh id each invents. Ordinal N of controller C is
|
|
101
|
+
* one Start no matter how many processes decide it is due.
|
|
102
|
+
*/
|
|
103
|
+
/**
|
|
104
|
+
* IS THIS RECEIPT A CAPABILITY, OR JUST A FILE THAT PARSES?
|
|
105
|
+
*
|
|
106
|
+
* The receipts ARE the Start budget. Nothing else counts them, and `spendOf`
|
|
107
|
+
* derives everything a person's evening is bounded by from the ones it finds on
|
|
108
|
+
* disk. So a receipt cannot be believed merely because JSON.parse succeeded and
|
|
109
|
+
* a number looked numeric — a certification pass fed it an empty file, the text
|
|
110
|
+
* `not json at all`, and a body naming ordinal 77 of another controller, and
|
|
111
|
+
* all three were counted as valid reservations.
|
|
112
|
+
*
|
|
113
|
+
* Every receipt carries exactly three facts, and each of them must agree with
|
|
114
|
+
* where the file is sitting:
|
|
115
|
+
*
|
|
116
|
+
* ordinal the file's own name says which Start this is
|
|
117
|
+
* controllerId the directory says whose grant it belongs to
|
|
118
|
+
* startId derived, never minted — `autonomyStartId(controllerId, ordinal)`
|
|
119
|
+
*
|
|
120
|
+
* A CONTRADICTION IS CORRUPTION, and neither side wins. If the path says
|
|
121
|
+
* controller C ordinal 3 and the body says controller D ordinal 2, believing
|
|
122
|
+
* the path would let a receipt be moved between grants by renaming it, and
|
|
123
|
+
* believing the body would let one be forged by writing it. There is no third
|
|
124
|
+
* option that is safe, so both are refused.
|
|
125
|
+
*
|
|
126
|
+
* NOTHING IS DUPLICATED HERE. The receipt is not given a goal id, a goal
|
|
127
|
+
* version or a generation, because it needs none of them: `controllerId` IS the
|
|
128
|
+
* generation — the server mints a new row with a new id for every act of
|
|
129
|
+
* permission, precisely so a fresh grant never inherits a spent one's identity
|
|
130
|
+
* — and the grant's own terms are held immutable by `adopt`, which refuses a
|
|
131
|
+
* known controller whose goal, version, ceiling or expiry has moved. Copying a
|
|
132
|
+
* receipt from C1 into C2's directory changes the controllerId it must match,
|
|
133
|
+
* and is caught here.
|
|
134
|
+
*/
|
|
135
|
+
function receiptTrouble(text, controllerId, ordinal, maxStarts) {
|
|
136
|
+
if (!Number.isInteger(ordinal) || ordinal < 1 || ordinal > maxStarts) {
|
|
137
|
+
return `Start ${ordinal} is outside the ${maxStarts} this grant was given`;
|
|
138
|
+
}
|
|
139
|
+
let parsed;
|
|
140
|
+
try {
|
|
141
|
+
parsed = JSON.parse(text);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return `the receipt for Start ${ordinal} is not something this build can read`;
|
|
145
|
+
}
|
|
146
|
+
if (typeof parsed !== 'object' || parsed === null) {
|
|
147
|
+
return `the receipt for Start ${ordinal} is not a record`;
|
|
148
|
+
}
|
|
149
|
+
const r = parsed;
|
|
150
|
+
if (r['ordinal'] !== ordinal) {
|
|
151
|
+
return `the receipt at Start ${ordinal} says it is Start ${String(r['ordinal'])}`;
|
|
152
|
+
}
|
|
153
|
+
if (r['controllerId'] !== controllerId) {
|
|
154
|
+
return `the receipt for Start ${ordinal} belongs to ${String(r['controllerId'])}, not ${controllerId}`;
|
|
155
|
+
}
|
|
156
|
+
const expected = autonomyStartId(controllerId, ordinal);
|
|
157
|
+
if (r['startId'] !== expected) {
|
|
158
|
+
return `the receipt for Start ${ordinal} names ${String(r['startId'])}, not ${expected}`;
|
|
159
|
+
}
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
function autonomyStartId(controllerId, ordinal) {
|
|
163
|
+
return `controller-start:${controllerId}:${ordinal}`;
|
|
164
|
+
}
|
|
165
|
+
class AutonomyStore {
|
|
166
|
+
stateDir;
|
|
167
|
+
fs;
|
|
168
|
+
loaded = null;
|
|
169
|
+
/** Distinguishes two writes from ONE process; the pid distinguishes processes. */
|
|
170
|
+
static writes = 0;
|
|
171
|
+
constructor(stateDir, fs) {
|
|
172
|
+
this.stateDir = stateDir;
|
|
173
|
+
this.fs = fs;
|
|
174
|
+
}
|
|
175
|
+
get path() {
|
|
176
|
+
return `${this.stateDir}/autonomy.json`;
|
|
177
|
+
}
|
|
178
|
+
/** One directory per grant. The controllerId is opaque and never reused. */
|
|
179
|
+
receiptDir(controllerId) {
|
|
180
|
+
return `${this.stateDir}/autonomy/${controllerId}`;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* The reservation for one ordinal. Zero-padded so the names sort as numbers
|
|
184
|
+
* for anybody who ever lists the directory by eye.
|
|
185
|
+
*/
|
|
186
|
+
receiptPath(controllerId, ordinal, suffix = 'start') {
|
|
187
|
+
return `${this.receiptDir(controllerId)}/${String(ordinal).padStart(4, '0')}.${suffix}.json`;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Read the file, refusing to guess.
|
|
191
|
+
*
|
|
192
|
+
* ABSENT is `ok` with nothing in it — a machine that has never been granted
|
|
193
|
+
* autonomy has spent nothing, and that is a true statement rather than an
|
|
194
|
+
* assumption. UNREADABLE, malformed, wrong-schema and wrong-shape are all
|
|
195
|
+
* `ok: false`, because in every one of those cases a grant may exist whose
|
|
196
|
+
* spending this file was the only record of.
|
|
197
|
+
*/
|
|
198
|
+
async read() {
|
|
199
|
+
let text;
|
|
200
|
+
try {
|
|
201
|
+
text = await this.fs.readFile(this.path);
|
|
202
|
+
}
|
|
203
|
+
catch (e) {
|
|
204
|
+
// A THROW FROM readFile NEVER PROVES DAMAGE. Nothing has been seen yet,
|
|
205
|
+
// so there is nothing to call corrupt; that judgement belongs to the
|
|
206
|
+
// parse below, which has actually looked at the bytes.
|
|
207
|
+
const trouble = (0, fs_trouble_1.classifyFsError)(e, 'the autonomy record');
|
|
208
|
+
return { ok: false, because: trouble.because, transient: (0, fs_trouble_1.shouldWaitFor)(trouble) };
|
|
209
|
+
}
|
|
210
|
+
if (text === null) {
|
|
211
|
+
this.loaded = [];
|
|
212
|
+
return { ok: true, progress: [] };
|
|
213
|
+
}
|
|
214
|
+
let parsed;
|
|
215
|
+
try {
|
|
216
|
+
parsed = JSON.parse(text);
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
return { ok: false, because: 'the autonomy record is not readable JSON' };
|
|
220
|
+
}
|
|
221
|
+
const file = parsed;
|
|
222
|
+
if (typeof file !== 'object' || file === null || file.schema !== exports.AUTONOMY_STORE_SCHEMA) {
|
|
223
|
+
return {
|
|
224
|
+
ok: false,
|
|
225
|
+
because: `the autonomy record is schema ${String(file?.schema)}, this build reads ${exports.AUTONOMY_STORE_SCHEMA}`,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
if (!Array.isArray(file.progress)) {
|
|
229
|
+
return { ok: false, because: 'the autonomy record has no progress array' };
|
|
230
|
+
}
|
|
231
|
+
// Row-level rejection is NOT enough here, and this is where the policy
|
|
232
|
+
// differs from every other store: a malformed row is a grant whose spending
|
|
233
|
+
// cannot be accounted for, and dropping it would refill its budget.
|
|
234
|
+
if (!file.progress.every(isProgress)) {
|
|
235
|
+
return { ok: false, because: 'the autonomy record has an unreadable entry' };
|
|
236
|
+
}
|
|
237
|
+
this.loaded = file.progress;
|
|
238
|
+
return { ok: true, progress: file.progress };
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Spend one Start, BEFORE it is issued, and say which one it is.
|
|
242
|
+
*
|
|
243
|
+
* The direction is the safety argument. Consuming first means a crash between
|
|
244
|
+
* the write and the spawn COSTS a Start — one of eight, and the goal is no
|
|
245
|
+
* worse off. Consuming after would mean a crash between the spawn and the
|
|
246
|
+
* write GRANTS one, and a machine that crashes reliably at that point has an
|
|
247
|
+
* unbounded budget.
|
|
248
|
+
*
|
|
249
|
+
* Refuses rather than throws when the record cannot be read, when the grant is
|
|
250
|
+
* unknown, when it has ended, when it has expired, or when the ceiling is
|
|
251
|
+
* reached. Every one of those is "no Start today", not an error to be caught
|
|
252
|
+
* and ignored.
|
|
253
|
+
*/
|
|
254
|
+
async consumeStart(controllerId, now) {
|
|
255
|
+
const terms = await this.termsOf(controllerId);
|
|
256
|
+
if (!terms.ok)
|
|
257
|
+
return terms;
|
|
258
|
+
const cur = terms.grant;
|
|
259
|
+
if (cur.state !== 'authorized')
|
|
260
|
+
return { ok: false, because: `the grant is ${cur.state}` };
|
|
261
|
+
if (Date.parse(cur.expiresAt) <= now) {
|
|
262
|
+
return { ok: false, because: 'the grant has expired' };
|
|
263
|
+
}
|
|
264
|
+
const spend = await this.spendOf(controllerId, cur.maxStarts);
|
|
265
|
+
if (!spend.ok)
|
|
266
|
+
return spend;
|
|
267
|
+
const unresolved = spend.spend.unfinished[0];
|
|
268
|
+
if (unresolved !== undefined) {
|
|
269
|
+
// ONE UNRESOLVED START AT A TIME, and the lowest is the one to resolve.
|
|
270
|
+
//
|
|
271
|
+
// "Unresolved" is not "running". It may be a Start whose run is going, or
|
|
272
|
+
// one whose process died before it launched anything — the difference is
|
|
273
|
+
// an attempt claim away and is not this file's business. Either way the
|
|
274
|
+
// answer is the same: finish the ordinal that has already been paid for
|
|
275
|
+
// before spending another.
|
|
276
|
+
//
|
|
277
|
+
// Advisory, deliberately. Two daemons can both pass this check; what
|
|
278
|
+
// stops two runs is the lease, and what stops two executions of one
|
|
279
|
+
// attempt is the attempt claim — both structural, where this is a read.
|
|
280
|
+
return {
|
|
281
|
+
ok: false,
|
|
282
|
+
because: `Start ${unresolved} of this grant has not been finished`,
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
if (spend.spend.startsConsumed >= cur.maxStarts) {
|
|
286
|
+
return { ok: false, because: `the grant has spent all ${cur.maxStarts} of its Starts` };
|
|
287
|
+
}
|
|
288
|
+
await this.fs.mkdir(this.receiptDir(controllerId));
|
|
289
|
+
// EXACTLY ONE ORDINAL, ALL OR NOTHING.
|
|
290
|
+
//
|
|
291
|
+
// The next one, and no other. An earlier version walked upward on EEXIST so
|
|
292
|
+
// that two racing callers each came away with a Start — which is right for
|
|
293
|
+
// a budget counter and WRONG for a grant that may only have one Start
|
|
294
|
+
// unresolved at a time. Two daemons ticking in the same second would each
|
|
295
|
+
// buy an ordinal, and the second would sit reserved-but-unexecuted behind
|
|
296
|
+
// the first: budget spent on a Start nobody asked for twice, and the
|
|
297
|
+
// one-at-a-time rule broken by the very mechanism meant to bound it.
|
|
298
|
+
//
|
|
299
|
+
// Losing is a refusal for THIS tick, not a fallback to another slot. The
|
|
300
|
+
// loser re-reads next cadence and finds the ordinal its neighbour bought,
|
|
301
|
+
// which is the same ordinal it would have wanted.
|
|
302
|
+
const ordinal = spend.spend.startsConsumed + 1;
|
|
303
|
+
const startId = autonomyStartId(controllerId, ordinal);
|
|
304
|
+
try {
|
|
305
|
+
await this.fs.createExclusive(this.receiptPath(controllerId, ordinal), JSON.stringify({ ordinal, startId, controllerId }, null, 2) + '\n');
|
|
306
|
+
}
|
|
307
|
+
catch (e) {
|
|
308
|
+
if (isEexist(e)) {
|
|
309
|
+
return { ok: false, because: `Start ${ordinal} of this grant was just reserved by another process` };
|
|
310
|
+
}
|
|
311
|
+
return { ok: false, because: `the Start could not be reserved (${e.message})` };
|
|
312
|
+
}
|
|
313
|
+
return { ok: true, ordinal, startId };
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Record which run a Start produced, so its ending can be watched for.
|
|
317
|
+
*
|
|
318
|
+
* Immutable like the reservation. A second call naming the SAME run is the
|
|
319
|
+
* redelivery this whole system is built to tolerate; a second call naming a
|
|
320
|
+
* different one is two runs claiming one Start, and it is refused rather
|
|
321
|
+
* than allowed to overwrite the first answer.
|
|
322
|
+
*/
|
|
323
|
+
async noteRun(controllerId, ordinal, runId) {
|
|
324
|
+
const path = this.receiptPath(controllerId, ordinal, 'run');
|
|
325
|
+
try {
|
|
326
|
+
await this.fs.createExclusive(path, JSON.stringify({ ordinal, runId }, null, 2) + '\n');
|
|
327
|
+
}
|
|
328
|
+
catch (e) {
|
|
329
|
+
if (!isEexist(e))
|
|
330
|
+
throw e;
|
|
331
|
+
const held = readRun(await this.fs.readFile(path));
|
|
332
|
+
if (held !== runId) {
|
|
333
|
+
throw new Error(`Start ${ordinal} of ${controllerId} already produced run ${String(held)}`);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/** The Start is over, however it ended. The count is NOT given back. */
|
|
338
|
+
async clearInFlight(controllerId) {
|
|
339
|
+
const terms = await this.termsOf(controllerId);
|
|
340
|
+
if (!terms.ok)
|
|
341
|
+
return;
|
|
342
|
+
const spend = await this.spendOf(controllerId, terms.grant.maxStarts);
|
|
343
|
+
if (!spend.ok)
|
|
344
|
+
return;
|
|
345
|
+
// The LOWEST unresolved one. Taking the highest is what left an earlier
|
|
346
|
+
// ordinal unfinished for ever, and it only ever mattered because two of
|
|
347
|
+
// them can be reserved at once.
|
|
348
|
+
const lowest = spend.spend.unfinished[0];
|
|
349
|
+
if (lowest === undefined)
|
|
350
|
+
return;
|
|
351
|
+
await this.finishStart(controllerId, lowest);
|
|
352
|
+
}
|
|
353
|
+
/** Mark one Start over by ordinal. Idempotent: it is already over. */
|
|
354
|
+
async finishStart(controllerId, ordinal) {
|
|
355
|
+
try {
|
|
356
|
+
await this.fs.createExclusive(this.receiptPath(controllerId, ordinal, 'done'), JSON.stringify({ ordinal }, null, 2) + '\n');
|
|
357
|
+
}
|
|
358
|
+
catch (e) {
|
|
359
|
+
if (!isEexist(e))
|
|
360
|
+
throw e;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
/** The terms of one grant, or why they cannot be answered for. */
|
|
364
|
+
async termsOf(controllerId) {
|
|
365
|
+
const read = await this.read();
|
|
366
|
+
if (!read.ok)
|
|
367
|
+
return { ok: false, because: read.because };
|
|
368
|
+
const grant = read.progress.find((p) => p.controllerId === controllerId);
|
|
369
|
+
if (grant === undefined) {
|
|
370
|
+
return { ok: false, because: 'this machine has no record of that grant' };
|
|
371
|
+
}
|
|
372
|
+
return { ok: true, grant };
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Count the receipts.
|
|
376
|
+
*
|
|
377
|
+
* Probed ordinal by ordinal rather than listed, because a ceiling of eight
|
|
378
|
+
* makes eight reads cheaper than adding a directory-listing capability to
|
|
379
|
+
* every filesystem double in the tree -- and a probe cannot be fooled by a
|
|
380
|
+
* stray file the way a listing can.
|
|
381
|
+
*/
|
|
382
|
+
async spendOf(controllerId, maxStarts) {
|
|
383
|
+
const reserved = [];
|
|
384
|
+
const missing = [];
|
|
385
|
+
const unfinished = [];
|
|
386
|
+
const runs = {};
|
|
387
|
+
for (let ordinal = 1; ordinal <= maxStarts; ordinal++) {
|
|
388
|
+
let receipt;
|
|
389
|
+
try {
|
|
390
|
+
receipt = await this.fs.readFile(this.receiptPath(controllerId, ordinal));
|
|
391
|
+
}
|
|
392
|
+
catch (e) {
|
|
393
|
+
// A receipt that cannot be READ is not a Start that did not happen —
|
|
394
|
+
// and it is not a damaged one either. Something else holding the file
|
|
395
|
+
// for a moment says nothing about the bytes.
|
|
396
|
+
const t = (0, fs_trouble_1.classifyFsError)(e, `the receipt for Start ${ordinal}`);
|
|
397
|
+
return { ok: false, transient: (0, fs_trouble_1.shouldWaitFor)(t), because: t.because };
|
|
398
|
+
}
|
|
399
|
+
if (receipt === null) {
|
|
400
|
+
missing.push(ordinal);
|
|
401
|
+
continue;
|
|
402
|
+
}
|
|
403
|
+
if (missing.length > 0) {
|
|
404
|
+
// A GAP. Receipts are contiguous by construction -- every reservation
|
|
405
|
+
// takes the lowest free ordinal -- so a hole means one was removed.
|
|
406
|
+
//
|
|
407
|
+
// Neither counting around it nor stopping at it is safe. Counting
|
|
408
|
+
// around gives ordinal 1 back to the next caller, which would issue a
|
|
409
|
+
// SECOND Start under a startId already used; stopping at it reports a
|
|
410
|
+
// smaller spend than the receipts show, which refills the budget above
|
|
411
|
+
// the hole. This is the store that refuses to guess, so it refuses.
|
|
412
|
+
return {
|
|
413
|
+
ok: false,
|
|
414
|
+
transient: false,
|
|
415
|
+
because: `Start ${missing[0]} of this grant has no receipt, but Start ${ordinal} does`,
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
// THE RECEIPT IS THE BUDGET, so it is read rather than counted.
|
|
419
|
+
const wrong = receiptTrouble(receipt, controllerId, ordinal, maxStarts);
|
|
420
|
+
if (wrong !== null)
|
|
421
|
+
return { ok: false, transient: false, because: wrong };
|
|
422
|
+
reserved.push(ordinal);
|
|
423
|
+
const done = await this.fs.readFile(this.receiptPath(controllerId, ordinal, 'done'));
|
|
424
|
+
if (done !== null)
|
|
425
|
+
continue;
|
|
426
|
+
// Ascending, and every one of them — not the last one to be looked at.
|
|
427
|
+
unfinished.push(ordinal);
|
|
428
|
+
const runId = readRun(await this.fs.readFile(this.receiptPath(controllerId, ordinal, 'run')));
|
|
429
|
+
if (runId !== null)
|
|
430
|
+
runs[ordinal] = runId;
|
|
431
|
+
}
|
|
432
|
+
// EVIDENCE ABOVE THE HIGHEST RESERVATION.
|
|
433
|
+
//
|
|
434
|
+
// Contiguity catches a receipt removed from the MIDDLE, because a survivor
|
|
435
|
+
// above the hole gives it away. It cannot catch one trimmed from the TOP:
|
|
436
|
+
// delete the highest and what remains is a shorter, perfectly contiguous
|
|
437
|
+
// history, and the budget quietly grows by one.
|
|
438
|
+
//
|
|
439
|
+
// But a Start that happened leaves more than its reservation. The `.done`
|
|
440
|
+
// that closed it and the `.run` that named its run are still sitting in the
|
|
441
|
+
// same directory, and they are proof that an ordinal nobody has a
|
|
442
|
+
// reservation for was nevertheless spent. Two records that cannot both be
|
|
443
|
+
// true, so neither is believed.
|
|
444
|
+
for (let ordinal = reserved.length + 1; ordinal <= maxStarts; ordinal++) {
|
|
445
|
+
for (const suffix of ['done', 'run']) {
|
|
446
|
+
let orphan;
|
|
447
|
+
try {
|
|
448
|
+
orphan = await this.fs.readFile(this.receiptPath(controllerId, ordinal, suffix));
|
|
449
|
+
}
|
|
450
|
+
catch (e) {
|
|
451
|
+
const t = (0, fs_trouble_1.classifyFsError)(e, `the ${suffix} record of Start ${ordinal}`);
|
|
452
|
+
return { ok: false, transient: (0, fs_trouble_1.shouldWaitFor)(t), because: t.because };
|
|
453
|
+
}
|
|
454
|
+
if (orphan !== null) {
|
|
455
|
+
return {
|
|
456
|
+
ok: false,
|
|
457
|
+
transient: false,
|
|
458
|
+
because: `Start ${ordinal} left a ${suffix} record but has no reservation`,
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
return {
|
|
464
|
+
ok: true,
|
|
465
|
+
spend: { reserved, startsConsumed: reserved.length, unfinished, runs },
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
/** Adopt a grant the server issued. Re-adopting the same one keeps what was spent. */
|
|
469
|
+
async adopt(grant) {
|
|
470
|
+
const read = await this.read();
|
|
471
|
+
// A record that cannot be read must not be replaced by a fresh one: that is
|
|
472
|
+
// exactly how a lost counter would refill a budget.
|
|
473
|
+
//
|
|
474
|
+
// The transience travels with the error because the caller's two answers
|
|
475
|
+
// are not both retryable: a grant the daemon refuses is refused for good.
|
|
476
|
+
if (!read.ok) {
|
|
477
|
+
throw Object.assign(new Error(read.because), { transient: read.transient === true });
|
|
478
|
+
}
|
|
479
|
+
const at = read.progress.findIndex((p) => p.controllerId === grant.controllerId);
|
|
480
|
+
const next = [...read.progress];
|
|
481
|
+
if (at === -1) {
|
|
482
|
+
next.push({ ...grant, state: 'authorized' });
|
|
483
|
+
}
|
|
484
|
+
else {
|
|
485
|
+
// Same controllerId, seen before. From 6D1R-B this can only be a
|
|
486
|
+
// RE-DELIVERY of one command: the server never revives an ended grant, it
|
|
487
|
+
// mints a new row with a new id, so a second authorization arrives as a
|
|
488
|
+
// controllerId this machine has never seen. Which means the terms cannot
|
|
489
|
+
// have changed, and a re-delivery must not be allowed to move them --
|
|
490
|
+
// that would be the one shape that could raise a ceiling against a count
|
|
491
|
+
// already spent.
|
|
492
|
+
const held = next[at];
|
|
493
|
+
const same = held.goalId === grant.goalId &&
|
|
494
|
+
held.goalVersion === grant.goalVersion &&
|
|
495
|
+
held.maxStarts === grant.maxStarts &&
|
|
496
|
+
held.expiresAt === grant.expiresAt;
|
|
497
|
+
if (!same) {
|
|
498
|
+
throw new Error(`grant ${grant.controllerId} came back with different terms; this machine will not adopt it`);
|
|
499
|
+
}
|
|
500
|
+
// Nothing to write. Returning early also means a redelivery cannot cost a
|
|
501
|
+
// file write, which is the only way `startsConsumed` could be disturbed.
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
await this.write(next);
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* Note that the server has been told how this pursuit ended.
|
|
508
|
+
*
|
|
509
|
+
* Separate from `settle` on purpose: one is what this machine concluded, the
|
|
510
|
+
* other is that somebody else now knows. A crash between them must leave the
|
|
511
|
+
* conclusion standing and the telling still owed.
|
|
512
|
+
*/
|
|
513
|
+
async markProjected(controllerId, at) {
|
|
514
|
+
const read = await this.read();
|
|
515
|
+
if (!read.ok)
|
|
516
|
+
return;
|
|
517
|
+
const idx = read.progress.findIndex((p) => p.controllerId === controllerId);
|
|
518
|
+
if (idx === -1)
|
|
519
|
+
return;
|
|
520
|
+
const next = [...read.progress];
|
|
521
|
+
next[idx] = { ...read.progress[idx], projectedAt: at };
|
|
522
|
+
await this.write(next);
|
|
523
|
+
}
|
|
524
|
+
/** Record where this grant came to rest. Terminal states spend nothing further. */
|
|
525
|
+
async settle(controllerId, state) {
|
|
526
|
+
const read = await this.read();
|
|
527
|
+
if (!read.ok)
|
|
528
|
+
return;
|
|
529
|
+
const at = read.progress.findIndex((p) => p.controllerId === controllerId);
|
|
530
|
+
if (at === -1)
|
|
531
|
+
return;
|
|
532
|
+
const next = [...read.progress];
|
|
533
|
+
next[at] = { ...read.progress[at], state };
|
|
534
|
+
await this.write(next);
|
|
535
|
+
}
|
|
536
|
+
/** What this machine last read. Empty before a successful `read`. */
|
|
537
|
+
all() {
|
|
538
|
+
return this.loaded ?? [];
|
|
539
|
+
}
|
|
540
|
+
async write(progress) {
|
|
541
|
+
const body = { schema: exports.AUTONOMY_STORE_SCHEMA, progress };
|
|
542
|
+
await this.fs.mkdir(this.stateDir);
|
|
543
|
+
// Temp-then-rename, the same contract as every other store here: a
|
|
544
|
+
// half-written record read by the next process is worse than none, because
|
|
545
|
+
// it looks like data.
|
|
546
|
+
//
|
|
547
|
+
// The temp name is PRIVATE TO THIS WRITER. A shared `autonomy.json.tmp` is
|
|
548
|
+
// two processes writing one path: the second truncates and rewrites what
|
|
549
|
+
// the first is midway through, and then both rename it into place. The
|
|
550
|
+
// rename is atomic and the file it renames is a splice of two writes.
|
|
551
|
+
const tmp = `${this.path}.${process.pid}.${(AutonomyStore.writes += 1)}.tmp`;
|
|
552
|
+
await this.fs.writeFile(tmp, JSON.stringify(body, null, 2) + '\n');
|
|
553
|
+
await this.fs.rename(tmp, this.path);
|
|
554
|
+
this.loaded = progress;
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
exports.AutonomyStore = AutonomyStore;
|
|
558
|
+
function isProgress(v) {
|
|
559
|
+
if (typeof v !== 'object' || v === null)
|
|
560
|
+
return false;
|
|
561
|
+
const p = v;
|
|
562
|
+
return (typeof p['controllerId'] === 'string' &&
|
|
563
|
+
typeof p['goalId'] === 'string' &&
|
|
564
|
+
typeof p['goalVersion'] === 'number' &&
|
|
565
|
+
typeof p['maxStarts'] === 'number' &&
|
|
566
|
+
typeof p['expiresAt'] === 'string' &&
|
|
567
|
+
(0, core_1.isGoalAutonomyState)(p['state']));
|
|
568
|
+
}
|
|
569
|
+
/** The runId out of a `.run.json` receipt, or null if there isn't one to read. */
|
|
570
|
+
function readRun(text) {
|
|
571
|
+
if (text === null)
|
|
572
|
+
return null;
|
|
573
|
+
try {
|
|
574
|
+
const parsed = JSON.parse(text);
|
|
575
|
+
return typeof parsed.runId === 'string' ? parsed.runId : null;
|
|
576
|
+
}
|
|
577
|
+
catch {
|
|
578
|
+
return null;
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
//# sourceMappingURL=autonomy-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autonomy-store.js","sourceRoot":"","sources":["../src/autonomy-store.ts"],"names":[],"mappings":"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"}
|