looply-cli 0.0.0-stage → 0.2.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 +2719 -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/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 +54 -6
- 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,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.APPROVAL_PAGE = void 0;
|
|
4
|
+
exports.readApprovalGate = readApprovalGate;
|
|
5
|
+
const core_1 = require("@looply/core");
|
|
6
|
+
/**
|
|
7
|
+
* How many rows to ask for.
|
|
8
|
+
*
|
|
9
|
+
* A pursuit at one version accumulates approvals slowly — a run raises at most
|
|
10
|
+
* one and then stops — so this is generous rather than tuned. It exists at all
|
|
11
|
+
* because the route's own default is 50 and silently taking the newest 50 of a
|
|
12
|
+
* larger set would be a gate that stops seeing the oldest outstanding question.
|
|
13
|
+
*/
|
|
14
|
+
exports.APPROVAL_PAGE = 200;
|
|
15
|
+
/**
|
|
16
|
+
* A row is only usable if every field the decision reads is the right shape.
|
|
17
|
+
*
|
|
18
|
+
* `request()` casts the parsed body without looking at it, so a captive portal
|
|
19
|
+
* or a proxy interstitial is a perfectly successful response carrying something
|
|
20
|
+
* else entirely. The goal mirror guards this by hand for the same reason, and a
|
|
21
|
+
* question about human authority is a worse place to find out.
|
|
22
|
+
*/
|
|
23
|
+
function projectionOf(raw) {
|
|
24
|
+
if (raw === null || typeof raw !== 'object' || Array.isArray(raw))
|
|
25
|
+
return null;
|
|
26
|
+
const o = raw;
|
|
27
|
+
if (typeof o['id'] !== 'string' || o['id'].length === 0)
|
|
28
|
+
return null;
|
|
29
|
+
if (typeof o['state'] !== 'string' || o['state'].length === 0)
|
|
30
|
+
return null;
|
|
31
|
+
if (typeof o['expiresAt'] !== 'string' || o['expiresAt'].length === 0)
|
|
32
|
+
return null;
|
|
33
|
+
if (Number.isNaN(Date.parse(o['expiresAt'])))
|
|
34
|
+
return null;
|
|
35
|
+
const goalId = o['goalId'];
|
|
36
|
+
const goalVersion = o['goalVersion'];
|
|
37
|
+
if (goalId !== null && typeof goalId !== 'string')
|
|
38
|
+
return null;
|
|
39
|
+
if (goalVersion !== null && typeof goalVersion !== 'number')
|
|
40
|
+
return null;
|
|
41
|
+
const execution = executionOf(o['execution']);
|
|
42
|
+
// `undefined` is the one answer that is not a shape: it means the row came
|
|
43
|
+
// back malformed, which is not the same as an approval with no attempt.
|
|
44
|
+
if (execution === undefined)
|
|
45
|
+
return null;
|
|
46
|
+
return {
|
|
47
|
+
id: o['id'],
|
|
48
|
+
state: o['state'],
|
|
49
|
+
goalId: goalId ?? null,
|
|
50
|
+
goalVersion: goalVersion ?? null,
|
|
51
|
+
expiresAt: o['expiresAt'],
|
|
52
|
+
execution,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The attempt made under this approval, or its absence, or a refusal.
|
|
57
|
+
*
|
|
58
|
+
* THREE ANSWERS AND NOT TWO, because absent and malformed must not lead to the
|
|
59
|
+
* same place. An approval nobody has claimed genuinely has no attempt; a row
|
|
60
|
+
* whose attempt this build cannot read is a row that may mean an effect
|
|
61
|
+
* happened, and reading it as "none" would let a pursuit carry on past one.
|
|
62
|
+
*
|
|
63
|
+
* `state` is left as a plain string on purpose. `deriveApprovalGate` refuses a
|
|
64
|
+
* word this build does not know rather than a parser here silently widening the
|
|
65
|
+
* set — the same division of labour the approval's own state already has.
|
|
66
|
+
*/
|
|
67
|
+
function executionOf(raw) {
|
|
68
|
+
if (raw === undefined || raw === null)
|
|
69
|
+
return null;
|
|
70
|
+
if (typeof raw !== 'object' || Array.isArray(raw))
|
|
71
|
+
return undefined;
|
|
72
|
+
const e = raw;
|
|
73
|
+
if (typeof e['state'] !== 'string' || e['state'].length === 0)
|
|
74
|
+
return undefined;
|
|
75
|
+
const assigned = e['resultAssignedRunId'];
|
|
76
|
+
if (assigned !== null && assigned !== undefined && typeof assigned !== 'string')
|
|
77
|
+
return undefined;
|
|
78
|
+
const acknowledged = e['acknowledged'];
|
|
79
|
+
if (acknowledged !== undefined && typeof acknowledged !== 'boolean')
|
|
80
|
+
return undefined;
|
|
81
|
+
const resolved = e['resolved'];
|
|
82
|
+
if (resolved !== undefined && typeof resolved !== 'boolean')
|
|
83
|
+
return undefined;
|
|
84
|
+
return {
|
|
85
|
+
state: e['state'],
|
|
86
|
+
resultAssignedRunId: assigned ?? null,
|
|
87
|
+
acknowledged: acknowledged === true,
|
|
88
|
+
/**
|
|
89
|
+
* ABSENT MEANS NOT RESOLVED, and that is the safe direction here rather
|
|
90
|
+
* than merely the convenient one. An older server does not send this field
|
|
91
|
+
* at all; reading its silence as `true` would free a pursuit nobody has
|
|
92
|
+
* dealt with, which is the exact failure the two dead ends exist to
|
|
93
|
+
* prevent. Reading it as `false` only holds, and holding is recoverable.
|
|
94
|
+
*/
|
|
95
|
+
resolved: resolved === true,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
async function readApprovalGate(server, input) {
|
|
99
|
+
let rows;
|
|
100
|
+
try {
|
|
101
|
+
rows = await server.projectApprovals(input.projectId, { goalId: input.goalId, goalVersion: input.goalVersion }, exports.APPROVAL_PAGE);
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
return { kind: 'unknown', because: `the approvals could not be read (${e.message})` };
|
|
105
|
+
}
|
|
106
|
+
if (!Array.isArray(rows)) {
|
|
107
|
+
// A 200 is not an answer.
|
|
108
|
+
return { kind: 'unknown', because: 'the server answered with something that is not a list' };
|
|
109
|
+
}
|
|
110
|
+
const read = [];
|
|
111
|
+
for (const raw of rows) {
|
|
112
|
+
const p = projectionOf(raw);
|
|
113
|
+
if (p === null) {
|
|
114
|
+
// ONE BAD ROW POISONS THE ANSWER, and deliberately so. Skipping it would
|
|
115
|
+
// mean deciding a pursuit may proceed while holding a row nobody could
|
|
116
|
+
// read — which is the fail-open this whole file exists to prevent.
|
|
117
|
+
return { kind: 'unknown', because: 'the server returned an approval this build cannot read' };
|
|
118
|
+
}
|
|
119
|
+
read.push(p);
|
|
120
|
+
}
|
|
121
|
+
// ASKED AFTER THE ROWS ARE IN HAND, because until then there is nothing to
|
|
122
|
+
// ask about. A machine cannot know which answers to look for until it knows
|
|
123
|
+
// which exist.
|
|
124
|
+
let given = new Set();
|
|
125
|
+
if (input.consumed !== undefined) {
|
|
126
|
+
const claims = await input.consumed(read.map((a) => a.id));
|
|
127
|
+
if (!claims.ok)
|
|
128
|
+
return { kind: 'unknown', because: claims.because };
|
|
129
|
+
given = claims.consumed;
|
|
130
|
+
}
|
|
131
|
+
return (0, core_1.deriveApprovalGate)({
|
|
132
|
+
goalId: input.goalId,
|
|
133
|
+
goalVersion: input.goalVersion,
|
|
134
|
+
approvals: read.map((a) => (given.has(a.id) ? { ...a, consumed: true } : a)),
|
|
135
|
+
now: input.now,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=approval-gate-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-gate-read.js","sourceRoot":"","sources":["../src/approval-gate-read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { type ResolvedOutcome } from '@looply/core';
|
|
2
|
+
import type { ServerApprovalRow } from './server-client';
|
|
3
|
+
/**
|
|
4
|
+
* WHAT A PERSON SAID NO TO, TOLD TO THE RUN THAT ASKED.
|
|
5
|
+
*
|
|
6
|
+
* A pursuit stopped because it wanted something only a person may authorise.
|
|
7
|
+
* The person answered — denied it, took it back, or let the window close — and
|
|
8
|
+
* somebody has now started the pursuit again. This is what that new run is
|
|
9
|
+
* told, and the shape of it is the whole point.
|
|
10
|
+
*
|
|
11
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
12
|
+
* IT IS READ FROM THE SERVER, NOT CARRIED
|
|
13
|
+
*
|
|
14
|
+
* The daemon puts ONE thing on the command line: an id. Everything the model
|
|
15
|
+
* ends up being told is fetched here, from the row the person's decision was
|
|
16
|
+
* written to. The alternative — serialising the outcome and the wording into
|
|
17
|
+
* argv — makes a second copy of a decision, on a channel that is publicly
|
|
18
|
+
* visible and length-capped, and a second copy is a thing that can disagree
|
|
19
|
+
* with the first.
|
|
20
|
+
*
|
|
21
|
+
* THE HUMAN LINE COMES FROM THE SERVER'S OWN FORMATTER. `display` is rendered
|
|
22
|
+
* by 7B1's `displayAction`, which is the single description authority — the
|
|
23
|
+
* same function that produced the sentence the person was actually shown.
|
|
24
|
+
* Assembling one here out of the action type and its fields would be a second
|
|
25
|
+
* wording, free to drift from what somebody read before they tapped Deny.
|
|
26
|
+
*
|
|
27
|
+
* AND IT IS CHECKED AGAINST THIS RUN. A resolution names a project, a pursuit
|
|
28
|
+
* and a version; if any of them is not this run's, it is somebody else's answer
|
|
29
|
+
* and this run is told nothing. That check is why the id alone is safe to
|
|
30
|
+
* carry: forging it buys nothing, because the row it names must still belong
|
|
31
|
+
* to the pursuit the run is bound to.
|
|
32
|
+
*/
|
|
33
|
+
export interface ApprovalResolutionContext {
|
|
34
|
+
readonly approvalId: string;
|
|
35
|
+
readonly actionType: string;
|
|
36
|
+
readonly actionFingerprint: string;
|
|
37
|
+
readonly outcome: ResolvedOutcome;
|
|
38
|
+
/** The one line the person was shown, from the server's own formatter. */
|
|
39
|
+
readonly display: string;
|
|
40
|
+
/**
|
|
41
|
+
* The owner's own words about their decision, when they left any.
|
|
42
|
+
*
|
|
43
|
+
* NOT AUTHORITY, and the same kind of thing as an action's `note`: it may
|
|
44
|
+
* help a model plan around a refusal — "not on a Friday" is worth knowing —
|
|
45
|
+
* and it decides nothing. Nothing branches on it.
|
|
46
|
+
*/
|
|
47
|
+
readonly note?: string;
|
|
48
|
+
}
|
|
49
|
+
export type ResolutionRead = {
|
|
50
|
+
readonly ok: true;
|
|
51
|
+
readonly resolution: ApprovalResolutionContext;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The answer could not be established.
|
|
55
|
+
*
|
|
56
|
+
* NOT a licence to carry on. A run resumed on a refusal it could not read is
|
|
57
|
+
* a run that will plan as though nothing was refused — and the likeliest
|
|
58
|
+
* thing it plans is asking for the same action again.
|
|
59
|
+
*/
|
|
60
|
+
| {
|
|
61
|
+
readonly ok: false;
|
|
62
|
+
readonly because: string;
|
|
63
|
+
};
|
|
64
|
+
/** Just enough of the client to fetch one. Injected so a test can fail it. */
|
|
65
|
+
export interface ResolutionReader {
|
|
66
|
+
projectApproval(projectId: string, approvalId: string): Promise<ServerApprovalRow>;
|
|
67
|
+
}
|
|
68
|
+
export interface ResolutionFor {
|
|
69
|
+
readonly projectId: string;
|
|
70
|
+
readonly goalId: string;
|
|
71
|
+
readonly goalVersion: number;
|
|
72
|
+
readonly now: number;
|
|
73
|
+
}
|
|
74
|
+
export declare function readApprovalResolution(server: ResolutionReader, approvalId: string, run: ResolutionFor): Promise<ResolutionRead>;
|
|
75
|
+
/**
|
|
76
|
+
* The block a resumed run's model is given, as plain lines.
|
|
77
|
+
*
|
|
78
|
+
* PROSE, AND DELIBERATELY NOT JSON. The implementer's transcript is scanned for
|
|
79
|
+
* a structured declaration, and the scan takes the FIRST one it finds so that a
|
|
80
|
+
* turn cannot ask for two consequential actions. A prompt that illustrated the
|
|
81
|
+
* shape of a request would be a decoy an echoing model files for real.
|
|
82
|
+
*
|
|
83
|
+
* The structured half is the context object above, which the run holds; this is
|
|
84
|
+
* only how it reads.
|
|
85
|
+
*/
|
|
86
|
+
export declare function describeResolution(r: ApprovalResolutionContext): string;
|
|
87
|
+
//# sourceMappingURL=approval-resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-resolution.d.ts","sourceRoot":"","sources":["../src/approval-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0D,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAC5G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,yBAAyB,CAAA;CAAE;AACvE;;;;;;GAMG;GACD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACpF;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,cAAc,CAAC,CAgDzB;AAiBD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,yBAAyB,GAAG,MAAM,CAmBvE"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readApprovalResolution = readApprovalResolution;
|
|
4
|
+
exports.describeResolution = describeResolution;
|
|
5
|
+
const core_1 = require("@looply/core");
|
|
6
|
+
async function readApprovalResolution(server, approvalId, run) {
|
|
7
|
+
let row;
|
|
8
|
+
try {
|
|
9
|
+
row = await server.projectApproval(run.projectId, approvalId);
|
|
10
|
+
}
|
|
11
|
+
catch (e) {
|
|
12
|
+
return { ok: false, because: `the decision could not be read (${e.message})` };
|
|
13
|
+
}
|
|
14
|
+
if (row === null || typeof row !== 'object' || typeof row.id !== 'string') {
|
|
15
|
+
return { ok: false, because: 'the server answered with something that is not an approval' };
|
|
16
|
+
}
|
|
17
|
+
if (row.id !== approvalId) {
|
|
18
|
+
return { ok: false, because: `the server returned approval ${row.id}, not ${approvalId}` };
|
|
19
|
+
}
|
|
20
|
+
if (row.projectId !== run.projectId) {
|
|
21
|
+
return { ok: false, because: 'that decision belongs to another project' };
|
|
22
|
+
}
|
|
23
|
+
// SOMEBODY ELSE'S ANSWER. A resolution is about one pursuit at one version,
|
|
24
|
+
// and telling a run about a decision made for a different one would be
|
|
25
|
+
// telling it something untrue about its own work.
|
|
26
|
+
if (row.goalId !== run.goalId || row.goalVersion !== run.goalVersion) {
|
|
27
|
+
return { ok: false, because: 'that decision was made for a different pursuit' };
|
|
28
|
+
}
|
|
29
|
+
if (typeof row.display !== 'string' || typeof row.actionType !== 'string') {
|
|
30
|
+
return { ok: false, because: 'the server returned an approval this build cannot read' };
|
|
31
|
+
}
|
|
32
|
+
const outcome = outcomeOf(row, run.now);
|
|
33
|
+
if (outcome === null) {
|
|
34
|
+
// Still live, or already taken. Either way there is nothing to plan around
|
|
35
|
+
// — and a run resumed on one of those should never have been started, which
|
|
36
|
+
// is the gate's job and is asserted separately.
|
|
37
|
+
return { ok: false, because: `that approval is ${row.state}, which is not something to plan around` };
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
ok: true,
|
|
41
|
+
resolution: {
|
|
42
|
+
approvalId: row.id,
|
|
43
|
+
actionType: row.actionType,
|
|
44
|
+
actionFingerprint: row.actionFingerprint,
|
|
45
|
+
outcome,
|
|
46
|
+
display: row.display,
|
|
47
|
+
...(typeof row.decisionNote === 'string' && row.decisionNote.length > 0
|
|
48
|
+
? { note: row.decisionNote }
|
|
49
|
+
: {}),
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Which answer this is, with the clock applied.
|
|
55
|
+
*
|
|
56
|
+
* The single-approval route settles expiry as it reads, so `state` here is
|
|
57
|
+
* usually already right — but the check costs nothing and keeps this file
|
|
58
|
+
* honest on its own, rather than correct only because of what another service
|
|
59
|
+
* happened to do first.
|
|
60
|
+
*/
|
|
61
|
+
function outcomeOf(row, now) {
|
|
62
|
+
if (!(0, core_1.isApprovalState)(row.state))
|
|
63
|
+
return null;
|
|
64
|
+
if (core_1.RESOLVED_APPROVAL_STATES.includes(row.state))
|
|
65
|
+
return row.state;
|
|
66
|
+
if (row.state === 'claimed')
|
|
67
|
+
return null;
|
|
68
|
+
return (0, core_1.isExpiredAt)(new Date(now), new Date(row.expiresAt)) ? 'expired' : null;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The block a resumed run's model is given, as plain lines.
|
|
72
|
+
*
|
|
73
|
+
* PROSE, AND DELIBERATELY NOT JSON. The implementer's transcript is scanned for
|
|
74
|
+
* a structured declaration, and the scan takes the FIRST one it finds so that a
|
|
75
|
+
* turn cannot ask for two consequential actions. A prompt that illustrated the
|
|
76
|
+
* shape of a request would be a decoy an echoing model files for real.
|
|
77
|
+
*
|
|
78
|
+
* The structured half is the context object above, which the run holds; this is
|
|
79
|
+
* only how it reads.
|
|
80
|
+
*/
|
|
81
|
+
function describeResolution(r) {
|
|
82
|
+
const said = r.outcome === 'denied'
|
|
83
|
+
? 'was refused'
|
|
84
|
+
: r.outcome === 'revoked'
|
|
85
|
+
? 'was approved and then taken back'
|
|
86
|
+
: 'was never answered, and the window closed';
|
|
87
|
+
return [
|
|
88
|
+
'A PREVIOUS RUN ASKED FOR SOMETHING THAT NEEDS A PERSON, AND IT ' + said.toUpperCase() + '.',
|
|
89
|
+
'',
|
|
90
|
+
` what was asked for : ${r.display}`,
|
|
91
|
+
` the answer : ${r.outcome}`,
|
|
92
|
+
...(r.note === undefined ? [] : [` what they said : ${r.note}`]),
|
|
93
|
+
'',
|
|
94
|
+
'Plan around it. Do not ask for the same thing again — the answer will be the',
|
|
95
|
+
'same, and asking would stop this run for nothing. Either find a way to the',
|
|
96
|
+
'goal that does not need it, or finish the work that does not depend on it and',
|
|
97
|
+
'say plainly what is left.',
|
|
98
|
+
].join('\n');
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=approval-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-resolution.js","sourceRoot":"","sources":["../src/approval-resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { AttemptFs } from './start-attempts';
|
|
2
|
+
/**
|
|
3
|
+
* A PERSON'S ANSWER REACHES EXACTLY ONE RUN.
|
|
4
|
+
*
|
|
5
|
+
* When an owner denies, revokes or lets an approval lapse, the pursuit may
|
|
6
|
+
* carry on — but only once somebody says so, and only once. The next explicit
|
|
7
|
+
* Start picks the answer up, tells its model precisely what was refused, and
|
|
8
|
+
* plans around it. Every Start after that is an ordinary Start.
|
|
9
|
+
*
|
|
10
|
+
* WHY IT NEEDS ITS OWN RECORD. The approval row looks identical before and
|
|
11
|
+
* after: `denied` at nine o'clock is `denied` at midnight, and nothing on the
|
|
12
|
+
* server says whether anybody has acted on it. Without a durable local mark, a
|
|
13
|
+
* denial would be handed to every run for the rest of the goal's life — the
|
|
14
|
+
* model told again and again about a decision it has already planned around,
|
|
15
|
+
* and a pursuit that can never leave the state of having just been refused.
|
|
16
|
+
*
|
|
17
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
18
|
+
* EXCLUSIVE CREATE, AND NOTHING ELSE
|
|
19
|
+
*
|
|
20
|
+
* The same argument `StartAttempts` makes. No read, no "does it exist", no
|
|
21
|
+
* compare-and-swap of our own: the operating system hands the file to exactly
|
|
22
|
+
* one caller and the loser finds out from the filesystem rather than from a
|
|
23
|
+
* stale read it took a moment earlier. Two Starts racing for one answer is
|
|
24
|
+
* exactly the shape that goes wrong, and an in-process guard would not survive
|
|
25
|
+
* two daemons — or one daemon and a person at a terminal.
|
|
26
|
+
*
|
|
27
|
+
* THERE IS NO RELEASE, AND NO TAKEOVER. A claim is a historical fact: this
|
|
28
|
+
* answer was given to that run. If the run then died before doing anything with
|
|
29
|
+
* it, the pursuit is no worse off than a run that died for any other reason —
|
|
30
|
+
* the next Start is an ordinary Start, and the goal still knows what it knows.
|
|
31
|
+
* A takeover path would mean an answer could be handed out twice, which is the
|
|
32
|
+
* one thing this file exists to prevent.
|
|
33
|
+
*/
|
|
34
|
+
export declare const APPROVAL_RESUMES_SCHEMA = 1;
|
|
35
|
+
export interface ApprovalResume {
|
|
36
|
+
/** The approval whose answer this run was given. */
|
|
37
|
+
approvalId: string;
|
|
38
|
+
/** The Start that claimed it. Present before a run exists; see below. */
|
|
39
|
+
requestId: string;
|
|
40
|
+
/** ISO, from the claiming process's own clock. */
|
|
41
|
+
claimedAt: string;
|
|
42
|
+
}
|
|
43
|
+
export type ResumeClaim = {
|
|
44
|
+
readonly ok: true;
|
|
45
|
+
readonly resume: ApprovalResume;
|
|
46
|
+
}
|
|
47
|
+
/** Somebody already has it. Not an error — an answer. */
|
|
48
|
+
| {
|
|
49
|
+
readonly ok: false;
|
|
50
|
+
readonly because: string;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* WHAT THE CLAIM IS KEYED BY, AND WHY IT IS THE START AND NOT THE RUN.
|
|
54
|
+
*
|
|
55
|
+
* Claimed at the Start boundary, before a run exists, because that is where the
|
|
56
|
+
* race is: two Starts arrive, and only one may carry the answer. Keying on the
|
|
57
|
+
* run would mean claiming after the thing the claim is supposed to gate.
|
|
58
|
+
*
|
|
59
|
+
* The cost is that a Start which claims and then fails to produce a run has
|
|
60
|
+
* spent the answer. That is the safe direction — an answer delivered zero times
|
|
61
|
+
* leaves a goal exactly as informed as it was, while an answer delivered twice
|
|
62
|
+
* puts a machine in a loop being told the same no.
|
|
63
|
+
*/
|
|
64
|
+
export declare class ApprovalResumes {
|
|
65
|
+
private readonly stateDir;
|
|
66
|
+
private readonly fs;
|
|
67
|
+
private readonly deps;
|
|
68
|
+
constructor(stateDir: string, fs: AttemptFs, deps?: {
|
|
69
|
+
now?: () => number;
|
|
70
|
+
});
|
|
71
|
+
private get dir();
|
|
72
|
+
private path;
|
|
73
|
+
/**
|
|
74
|
+
* Take this answer, if nobody has.
|
|
75
|
+
*
|
|
76
|
+
* The whole mechanism is `createExclusive`. Everything else here is bookkeeping
|
|
77
|
+
* about what to write in the file that proves it.
|
|
78
|
+
*/
|
|
79
|
+
claim(approvalId: string, requestId: string): Promise<ResumeClaim>;
|
|
80
|
+
/** What was claimed for this approval, or null. Unreadable is NOT null — it throws. */
|
|
81
|
+
claimOf(approvalId: string): Promise<ApprovalResume | null>;
|
|
82
|
+
/**
|
|
83
|
+
* Which of these answers have already been given out.
|
|
84
|
+
*
|
|
85
|
+
* Takes the ids to ask about rather than listing the directory, because the
|
|
86
|
+
* gate already knows which approvals exist for the pursuit and a directory
|
|
87
|
+
* read would be a second, slower answer to a question it has.
|
|
88
|
+
*
|
|
89
|
+
* AN UNREADABLE CLAIM IS NOT AN ABSENT ONE. A file held for a moment by
|
|
90
|
+
* something else — which on Windows is ordinary — would otherwise read as
|
|
91
|
+
* "not consumed", and the answer would be handed out a second time. So this
|
|
92
|
+
* reports the trouble and lets the caller hold.
|
|
93
|
+
*/
|
|
94
|
+
consumed(approvalIds: readonly string[]): Promise<{
|
|
95
|
+
ok: true;
|
|
96
|
+
consumed: Set<string>;
|
|
97
|
+
} | {
|
|
98
|
+
ok: false;
|
|
99
|
+
because: string;
|
|
100
|
+
}>;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=approval-resumes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-resumes.d.ts","sourceRoot":"","sources":["../src/approval-resumes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;CACnB;AAOD,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAA;CAAE;AACxD,yDAAyD;GACvD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD;;;;;;;;;;;GAWG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,SAAS,EACb,IAAI,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;KAAO;IAGpD,OAAO,KAAK,GAAG,GAEd;IAED,OAAO,CAAC,IAAI;IAIZ;;;;;OAKG;IACG,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAyBxE,uFAAuF;IACjF,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAMjE;;;;;;;;;;;OAWG;IACG,QAAQ,CACZ,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAoBjF"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApprovalResumes = exports.APPROVAL_RESUMES_SCHEMA = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* A PERSON'S ANSWER REACHES EXACTLY ONE RUN.
|
|
6
|
+
*
|
|
7
|
+
* When an owner denies, revokes or lets an approval lapse, the pursuit may
|
|
8
|
+
* carry on — but only once somebody says so, and only once. The next explicit
|
|
9
|
+
* Start picks the answer up, tells its model precisely what was refused, and
|
|
10
|
+
* plans around it. Every Start after that is an ordinary Start.
|
|
11
|
+
*
|
|
12
|
+
* WHY IT NEEDS ITS OWN RECORD. The approval row looks identical before and
|
|
13
|
+
* after: `denied` at nine o'clock is `denied` at midnight, and nothing on the
|
|
14
|
+
* server says whether anybody has acted on it. Without a durable local mark, a
|
|
15
|
+
* denial would be handed to every run for the rest of the goal's life — the
|
|
16
|
+
* model told again and again about a decision it has already planned around,
|
|
17
|
+
* and a pursuit that can never leave the state of having just been refused.
|
|
18
|
+
*
|
|
19
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
20
|
+
* EXCLUSIVE CREATE, AND NOTHING ELSE
|
|
21
|
+
*
|
|
22
|
+
* The same argument `StartAttempts` makes. No read, no "does it exist", no
|
|
23
|
+
* compare-and-swap of our own: the operating system hands the file to exactly
|
|
24
|
+
* one caller and the loser finds out from the filesystem rather than from a
|
|
25
|
+
* stale read it took a moment earlier. Two Starts racing for one answer is
|
|
26
|
+
* exactly the shape that goes wrong, and an in-process guard would not survive
|
|
27
|
+
* two daemons — or one daemon and a person at a terminal.
|
|
28
|
+
*
|
|
29
|
+
* THERE IS NO RELEASE, AND NO TAKEOVER. A claim is a historical fact: this
|
|
30
|
+
* answer was given to that run. If the run then died before doing anything with
|
|
31
|
+
* it, the pursuit is no worse off than a run that died for any other reason —
|
|
32
|
+
* the next Start is an ordinary Start, and the goal still knows what it knows.
|
|
33
|
+
* A takeover path would mean an answer could be handed out twice, which is the
|
|
34
|
+
* one thing this file exists to prevent.
|
|
35
|
+
*/
|
|
36
|
+
exports.APPROVAL_RESUMES_SCHEMA = 1;
|
|
37
|
+
/**
|
|
38
|
+
* WHAT THE CLAIM IS KEYED BY, AND WHY IT IS THE START AND NOT THE RUN.
|
|
39
|
+
*
|
|
40
|
+
* Claimed at the Start boundary, before a run exists, because that is where the
|
|
41
|
+
* race is: two Starts arrive, and only one may carry the answer. Keying on the
|
|
42
|
+
* run would mean claiming after the thing the claim is supposed to gate.
|
|
43
|
+
*
|
|
44
|
+
* The cost is that a Start which claims and then fails to produce a run has
|
|
45
|
+
* spent the answer. That is the safe direction — an answer delivered zero times
|
|
46
|
+
* leaves a goal exactly as informed as it was, while an answer delivered twice
|
|
47
|
+
* puts a machine in a loop being told the same no.
|
|
48
|
+
*/
|
|
49
|
+
class ApprovalResumes {
|
|
50
|
+
stateDir;
|
|
51
|
+
fs;
|
|
52
|
+
deps;
|
|
53
|
+
constructor(stateDir, fs, deps = {}) {
|
|
54
|
+
this.stateDir = stateDir;
|
|
55
|
+
this.fs = fs;
|
|
56
|
+
this.deps = deps;
|
|
57
|
+
}
|
|
58
|
+
get dir() {
|
|
59
|
+
return `${this.stateDir}/approval-resumes`;
|
|
60
|
+
}
|
|
61
|
+
path(approvalId) {
|
|
62
|
+
return `${this.dir}/${approvalId}.json`;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Take this answer, if nobody has.
|
|
66
|
+
*
|
|
67
|
+
* The whole mechanism is `createExclusive`. Everything else here is bookkeeping
|
|
68
|
+
* about what to write in the file that proves it.
|
|
69
|
+
*/
|
|
70
|
+
async claim(approvalId, requestId) {
|
|
71
|
+
if (approvalId.length === 0)
|
|
72
|
+
return { ok: false, because: 'no approval was named' };
|
|
73
|
+
// Path safety, not validation theatre: the id becomes a filename, and an id
|
|
74
|
+
// carrying a separator would write outside the directory this owns.
|
|
75
|
+
if (/[^A-Za-z0-9_-]/.test(approvalId)) {
|
|
76
|
+
return { ok: false, because: `${approvalId} is not a usable approval id` };
|
|
77
|
+
}
|
|
78
|
+
const resume = {
|
|
79
|
+
approvalId,
|
|
80
|
+
requestId,
|
|
81
|
+
claimedAt: new Date(this.deps.now?.() ?? Date.now()).toISOString(),
|
|
82
|
+
};
|
|
83
|
+
const body = { schema: exports.APPROVAL_RESUMES_SCHEMA, resume };
|
|
84
|
+
await this.fs.mkdir(this.dir);
|
|
85
|
+
try {
|
|
86
|
+
await this.fs.createExclusive(this.path(approvalId), JSON.stringify(body, null, 2) + '\n');
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
if (e.code === 'EEXIST') {
|
|
90
|
+
return { ok: false, because: `this answer has already been given to a run` };
|
|
91
|
+
}
|
|
92
|
+
throw e;
|
|
93
|
+
}
|
|
94
|
+
return { ok: true, resume };
|
|
95
|
+
}
|
|
96
|
+
/** What was claimed for this approval, or null. Unreadable is NOT null — it throws. */
|
|
97
|
+
async claimOf(approvalId) {
|
|
98
|
+
const text = await this.fs.readFile(this.path(approvalId));
|
|
99
|
+
if (text === null)
|
|
100
|
+
return null;
|
|
101
|
+
return readResume(text);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Which of these answers have already been given out.
|
|
105
|
+
*
|
|
106
|
+
* Takes the ids to ask about rather than listing the directory, because the
|
|
107
|
+
* gate already knows which approvals exist for the pursuit and a directory
|
|
108
|
+
* read would be a second, slower answer to a question it has.
|
|
109
|
+
*
|
|
110
|
+
* AN UNREADABLE CLAIM IS NOT AN ABSENT ONE. A file held for a moment by
|
|
111
|
+
* something else — which on Windows is ordinary — would otherwise read as
|
|
112
|
+
* "not consumed", and the answer would be handed out a second time. So this
|
|
113
|
+
* reports the trouble and lets the caller hold.
|
|
114
|
+
*/
|
|
115
|
+
async consumed(approvalIds) {
|
|
116
|
+
const consumed = new Set();
|
|
117
|
+
for (const id of approvalIds) {
|
|
118
|
+
let text;
|
|
119
|
+
try {
|
|
120
|
+
text = await this.fs.readFile(this.path(id));
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
return { ok: false, because: `a resume claim could not be read (${e.message})` };
|
|
124
|
+
}
|
|
125
|
+
if (text === null)
|
|
126
|
+
continue;
|
|
127
|
+
if (readResume(text) === null) {
|
|
128
|
+
// Present and unreadable. Counted as consumed, which is the safe
|
|
129
|
+
// direction: the alternative hands the same answer out again.
|
|
130
|
+
consumed.add(id);
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
consumed.add(id);
|
|
134
|
+
}
|
|
135
|
+
return { ok: true, consumed };
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.ApprovalResumes = ApprovalResumes;
|
|
139
|
+
function readResume(text) {
|
|
140
|
+
let parsed;
|
|
141
|
+
try {
|
|
142
|
+
parsed = JSON.parse(text);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
const file = parsed;
|
|
148
|
+
if (typeof file !== 'object' || file === null)
|
|
149
|
+
return null;
|
|
150
|
+
if (file.schema !== exports.APPROVAL_RESUMES_SCHEMA)
|
|
151
|
+
return null;
|
|
152
|
+
const r = file.resume;
|
|
153
|
+
if (typeof r !== 'object' || r === null)
|
|
154
|
+
return null;
|
|
155
|
+
if (typeof r['approvalId'] !== 'string' || r['approvalId'] === '')
|
|
156
|
+
return null;
|
|
157
|
+
if (typeof r['requestId'] !== 'string')
|
|
158
|
+
return null;
|
|
159
|
+
if (typeof r['claimedAt'] !== 'string')
|
|
160
|
+
return null;
|
|
161
|
+
return {
|
|
162
|
+
approvalId: r['approvalId'],
|
|
163
|
+
requestId: r['requestId'],
|
|
164
|
+
claimedAt: r['claimedAt'],
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=approval-resumes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-resumes.js","sourceRoot":"","sources":["../src/approval-resumes.ts"],"names":[],"mappings":"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"}
|