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,407 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* WHAT A CLIENT SENDS, AND WHETHER THE ROUTE READS IT.
|
|
4
|
+
*
|
|
5
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
6
|
+
* 🔴 THE OTHER HALF OF THE BOUNDARY, AND IT HAS ALREADY COST US ONCE.
|
|
7
|
+
*
|
|
8
|
+
* `@looply/sdk`'s `decideApproval` sent `version` where the route reads
|
|
9
|
+
* `expectedVersion`. It would have 400'd on every call — on the path that spends
|
|
10
|
+
* a person's authorisation — and nothing could see it: the body is `unknown` on
|
|
11
|
+
* the wire, so no type on either side disagrees.
|
|
12
|
+
*
|
|
13
|
+
* Path parity checks the PATH. The declared-shape check reads the RESPONSE. A
|
|
14
|
+
* field a client sends that no route reads is the third case, and it is the one
|
|
15
|
+
* with the worst failure mode of the three, because the two outcomes are a 400
|
|
16
|
+
* (loud) and being silently ignored (a setting that never applies, a note that
|
|
17
|
+
* never saves, a version guard that never guards).
|
|
18
|
+
*
|
|
19
|
+
* ⚠️ THIS READS SOURCE, NOT TYPES. It is a small honest parser: it reports what
|
|
20
|
+
* it cannot read rather than passing over it, because a checker that silently
|
|
21
|
+
* skips is how a fifth of a corpus disappears under a confident summary line.
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.controllerPrefix = controllerPrefix;
|
|
25
|
+
exports.routeBodies = routeBodies;
|
|
26
|
+
exports.stripComments = stripComments;
|
|
27
|
+
exports.sentBodies = sentBodies;
|
|
28
|
+
const ROUTE_DECORATOR = /@(Get|Post|Put|Patch|Delete)\(\s*(?:'([^']*)'|"([^"]*)"|`([^`]*)`)?\s*\)/g;
|
|
29
|
+
/** `@Controller('v1')` → `v1`. */
|
|
30
|
+
function controllerPrefix(source) {
|
|
31
|
+
// Stripped first: a commented-out @Controller would otherwise set the prefix
|
|
32
|
+
// for every route in the file.
|
|
33
|
+
const src = stripComments(source);
|
|
34
|
+
const m = /@Controller\(\s*(?:'([^']*)'|"([^"]*)")?\s*\)/.exec(src);
|
|
35
|
+
return (m?.[1] ?? m?.[2] ?? '').replace(/^\/+|\/+$/g, '');
|
|
36
|
+
}
|
|
37
|
+
function joinPath(prefix, sub) {
|
|
38
|
+
const clean = sub.replace(/^\/+|\/+$/g, '');
|
|
39
|
+
const parts = [prefix, clean].filter((p) => p.length > 0);
|
|
40
|
+
return `/${parts.join('/')}`;
|
|
41
|
+
}
|
|
42
|
+
function routeBodies(source) {
|
|
43
|
+
// 🔴 STRIPPED ONCE, AT THE TOP, AND EVERYTHING BELOW READS THE RESULT.
|
|
44
|
+
// Comments were prose evidence here: a commented-out `@Post(...)` became a
|
|
45
|
+
// phantom ROUTE, and a doc comment naming a field became a phantom `body?.x`
|
|
46
|
+
// read — which then excused a client field the handler never reads. Blanking
|
|
47
|
+
// preserves offsets and newlines, so the decorator scan and the line-based
|
|
48
|
+
// handler-name scan below are unaffected.
|
|
49
|
+
const src = stripComments(source);
|
|
50
|
+
const prefix = controllerPrefix(src);
|
|
51
|
+
const out = [];
|
|
52
|
+
// Every decorator position, so a handler's text is "up to the next decorator".
|
|
53
|
+
const marks = [];
|
|
54
|
+
for (const m of src.matchAll(ROUTE_DECORATOR)) {
|
|
55
|
+
marks.push({
|
|
56
|
+
method: m[1].toUpperCase(),
|
|
57
|
+
sub: m[2] ?? m[3] ?? m[4] ?? '',
|
|
58
|
+
at: m.index,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
for (let i = 0; i < marks.length; i++) {
|
|
62
|
+
const start = marks[i].at;
|
|
63
|
+
const end = i + 1 < marks.length ? marks[i + 1].at : src.length;
|
|
64
|
+
const block = src.slice(start, end);
|
|
65
|
+
const handler = /\n\s*(?:async\s+)?([A-Za-z_$][\w$]*)\s*\(/.exec(block)?.[1] ?? '<unknown>';
|
|
66
|
+
const reads = [
|
|
67
|
+
...new Set([...block.matchAll(/\bbody\s*\??\.\s*([A-Za-z_$][\w$]*)/g)].map((m) => m[1])),
|
|
68
|
+
];
|
|
69
|
+
// `...body`, `(body)`, `body,` or `body)` passed on as a whole.
|
|
70
|
+
const wholesale = /(\.\.\.body\b|\(\s*body\s*[,)]|,\s*body\s*[,)])/.test(block);
|
|
71
|
+
out.push({ method: marks[i].method, path: joinPath(prefix, marks[i].sub), reads, wholesale, handler });
|
|
72
|
+
}
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
/** Reads a balanced argument list starting at the `(`. */
|
|
76
|
+
function argsOf(src, openAt) {
|
|
77
|
+
let depth = 0;
|
|
78
|
+
let inTemplate = false;
|
|
79
|
+
for (let i = openAt; i < src.length; i++) {
|
|
80
|
+
const c = src[i];
|
|
81
|
+
if (c === '`')
|
|
82
|
+
inTemplate = !inTemplate;
|
|
83
|
+
if (inTemplate)
|
|
84
|
+
continue;
|
|
85
|
+
if (c === '(' || c === '{' || c === '[')
|
|
86
|
+
depth++;
|
|
87
|
+
else if (c === ')' || c === '}' || c === ']') {
|
|
88
|
+
depth--;
|
|
89
|
+
if (depth === 0)
|
|
90
|
+
return src.slice(openAt + 1, i);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
/** Splits an argument list on top-level commas. */
|
|
96
|
+
function splitArgs(args) {
|
|
97
|
+
const out = [];
|
|
98
|
+
let depth = 0;
|
|
99
|
+
let start = 0;
|
|
100
|
+
let inTemplate = false;
|
|
101
|
+
for (let i = 0; i < args.length; i++) {
|
|
102
|
+
const c = args[i];
|
|
103
|
+
if (c === '`')
|
|
104
|
+
inTemplate = !inTemplate;
|
|
105
|
+
if (inTemplate)
|
|
106
|
+
continue;
|
|
107
|
+
if (c === '(' || c === '{' || c === '[')
|
|
108
|
+
depth++;
|
|
109
|
+
else if (c === ')' || c === '}' || c === ']')
|
|
110
|
+
depth--;
|
|
111
|
+
else if (c === ',' && depth === 0) {
|
|
112
|
+
out.push(args.slice(start, i));
|
|
113
|
+
start = i + 1;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
out.push(args.slice(start));
|
|
117
|
+
return out.map((a) => a.trim()).filter((a) => a.length > 0);
|
|
118
|
+
}
|
|
119
|
+
/** The inside of a quoted or templated string literal, or null if it is neither. */
|
|
120
|
+
function literalText(literal) {
|
|
121
|
+
const t = literal.trim();
|
|
122
|
+
const quoted = (t.startsWith('`') && t.endsWith('`')) || (t.startsWith("'") && t.endsWith("'"));
|
|
123
|
+
return quoted ? t.slice(1, -1) : null;
|
|
124
|
+
}
|
|
125
|
+
/** `` `/v1/projects/${projectId}/goals` `` → `/v1/projects/:projectId/goals`. */
|
|
126
|
+
function normalisePath(literal) {
|
|
127
|
+
const text = literalText(literal);
|
|
128
|
+
if (text === null)
|
|
129
|
+
return null;
|
|
130
|
+
// 🔴 SCANNED, NOT SPLIT, AND THE ORDER IS THE BUG THAT WAS HERE.
|
|
131
|
+
//
|
|
132
|
+
// Two rules, both simple, both wrong when applied the other way round:
|
|
133
|
+
//
|
|
134
|
+
// 1. A path parameter ALWAYS follows a slash. An interpolation that does
|
|
135
|
+
// not is a suffix -- the phone writes `/v1/projects/${id}/goals${q}`,
|
|
136
|
+
// and turning every `${...}` into `:param` produced
|
|
137
|
+
// `/v1/projects/:param/goals:param`, which matches no route.
|
|
138
|
+
// 2. A query string ends the route.
|
|
139
|
+
//
|
|
140
|
+
// Splitting on the question mark FIRST truncates inside an interpolation:
|
|
141
|
+
// `/v1/settings/schema${scope ? `?scope=${scope}` : ""}` became the literal
|
|
142
|
+
// text "/v1/settings/schema${scope " -- a nested template, whose inner `}`
|
|
143
|
+
// also defeats a non-balancing scan.
|
|
144
|
+
//
|
|
145
|
+
// ⚠️ BOTH FAILURES WERE SILENT IN EVERY CONSUMER. The request-body check
|
|
146
|
+
// skips a call whose route it cannot find, so those calls were never
|
|
147
|
+
// compared at all; the coverage census read them as unreachable routes.
|
|
148
|
+
// Nothing goes red when a path stops matching -- it just stops being asked
|
|
149
|
+
// about.
|
|
150
|
+
let out = "";
|
|
151
|
+
let i = 0;
|
|
152
|
+
while (i < text.length) {
|
|
153
|
+
const c = text[i];
|
|
154
|
+
if (c === "$" && text[i + 1] === "{") {
|
|
155
|
+
// Balance to the MATCHING brace: an interpolation may contain a nested
|
|
156
|
+
// template literal with braces of its own.
|
|
157
|
+
let depth = 0;
|
|
158
|
+
let j = i + 1;
|
|
159
|
+
for (; j < text.length; j++) {
|
|
160
|
+
if (text[j] === "{")
|
|
161
|
+
depth++;
|
|
162
|
+
else if (text[j] === "}") {
|
|
163
|
+
depth--;
|
|
164
|
+
if (depth === 0)
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (j >= text.length)
|
|
169
|
+
return out;
|
|
170
|
+
if (out.endsWith("/")) {
|
|
171
|
+
out += ":param";
|
|
172
|
+
i = j + 1;
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
// Not a segment: the route ends where the suffix begins.
|
|
176
|
+
return out;
|
|
177
|
+
}
|
|
178
|
+
// A query string, outside any interpolation.
|
|
179
|
+
if (c === String.fromCharCode(63))
|
|
180
|
+
return out;
|
|
181
|
+
out += c;
|
|
182
|
+
i += 1;
|
|
183
|
+
}
|
|
184
|
+
return out;
|
|
185
|
+
}
|
|
186
|
+
/** Top-level keys of an object literal: `{ a, b: c, ...d }` → a, b (and d is a spread). */
|
|
187
|
+
function literalKeys(text) {
|
|
188
|
+
const t = text.trim();
|
|
189
|
+
if (!t.startsWith('{') || !t.endsWith('}'))
|
|
190
|
+
return null;
|
|
191
|
+
const inner = t.slice(1, -1);
|
|
192
|
+
const keys = [];
|
|
193
|
+
let spread = false;
|
|
194
|
+
let depth = 0;
|
|
195
|
+
let start = 0;
|
|
196
|
+
const parts = [];
|
|
197
|
+
for (let i = 0; i < inner.length; i++) {
|
|
198
|
+
const c = inner[i];
|
|
199
|
+
if (c === '(' || c === '{' || c === '[')
|
|
200
|
+
depth++;
|
|
201
|
+
else if (c === ')' || c === '}' || c === ']')
|
|
202
|
+
depth--;
|
|
203
|
+
else if (c === ',' && depth === 0) {
|
|
204
|
+
parts.push(inner.slice(start, i));
|
|
205
|
+
start = i + 1;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
parts.push(inner.slice(start));
|
|
209
|
+
for (const part of parts) {
|
|
210
|
+
const p = part.trim();
|
|
211
|
+
if (p.length === 0)
|
|
212
|
+
continue;
|
|
213
|
+
if (p.startsWith('...')) {
|
|
214
|
+
spread = true;
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
const m = /^([A-Za-z_$][\w$]*)\s*(?::|$)/.exec(p);
|
|
218
|
+
if (m)
|
|
219
|
+
keys.push(m[1]);
|
|
220
|
+
else
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
return { keys, spread };
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Blanks comments, preserving LENGTH and NEWLINES.
|
|
227
|
+
*
|
|
228
|
+
* 🔴 ONE PARSER, USED BY BOTH HALVES OF THIS FILE. The client half stripped
|
|
229
|
+
* comments and the ROUTE half did not, so prose became evidence: a doc comment
|
|
230
|
+
* mentioning a field produced a phantom `body?.x` read, and a commented-out
|
|
231
|
+
* `@Post(...)` produced a phantom ROUTE. It failed in both directions at once --
|
|
232
|
+
* excusing a field the handler never reads, and inventing one it does.
|
|
233
|
+
*
|
|
234
|
+
* ⚠️ IT IS STRING-AWARE, WHICH A REGEX CANNOT BE. `'https://x'` contains `//`
|
|
235
|
+
* and a naive line-comment regex deletes the rest of that line -- taking
|
|
236
|
+
* any real `body?.x` on it with it. Quotes, double quotes, template literals and
|
|
237
|
+
* backslash escapes are copied through untouched.
|
|
238
|
+
*
|
|
239
|
+
* Length and newlines are preserved because callers index into the result:
|
|
240
|
+
* decorator offsets, `lastIndexOf`, and the line-based handler-name scan all
|
|
241
|
+
* stay valid, so stripping is invisible to everything except the text it removes.
|
|
242
|
+
*
|
|
243
|
+
* Known limit, stated rather than hidden: a STRING whose contents look like a
|
|
244
|
+
* read (`'body?.kind'`) is preserved, because it is data and this cannot tell
|
|
245
|
+
* data from code. No such string exists in the controllers today.
|
|
246
|
+
*/
|
|
247
|
+
function stripComments(text) {
|
|
248
|
+
let out = '';
|
|
249
|
+
let i = 0;
|
|
250
|
+
while (i < text.length) {
|
|
251
|
+
const c = text[i];
|
|
252
|
+
// A string literal is copied verbatim, escapes included, so neither a `//`
|
|
253
|
+
// inside a URL nor an apostrophe inside one can desynchronise the scan.
|
|
254
|
+
if (c === '\'' || c === '"' || c === '`') {
|
|
255
|
+
out += c;
|
|
256
|
+
i += 1;
|
|
257
|
+
while (i < text.length) {
|
|
258
|
+
const d = text[i];
|
|
259
|
+
if (d === '\\') {
|
|
260
|
+
out += d + (text[i + 1] ?? '');
|
|
261
|
+
i += 2;
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
out += d;
|
|
265
|
+
i += 1;
|
|
266
|
+
if (d === c)
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
if (c === '/' && text[i + 1] === '/') {
|
|
272
|
+
while (i < text.length && text[i] !== '\n') {
|
|
273
|
+
out += ' ';
|
|
274
|
+
i += 1;
|
|
275
|
+
}
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
if (c === '/' && text[i + 1] === '*') {
|
|
279
|
+
out += ' ';
|
|
280
|
+
i += 2;
|
|
281
|
+
while (i < text.length && !(text[i] === '*' && text[i + 1] === '/')) {
|
|
282
|
+
// Newlines survive; everything else becomes a space.
|
|
283
|
+
out += text[i] === '\n' ? '\n' : ' ';
|
|
284
|
+
i += 1;
|
|
285
|
+
}
|
|
286
|
+
if (i < text.length) {
|
|
287
|
+
out += ' ';
|
|
288
|
+
i += 2;
|
|
289
|
+
}
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
out += c;
|
|
293
|
+
i += 1;
|
|
294
|
+
}
|
|
295
|
+
return out;
|
|
296
|
+
}
|
|
297
|
+
/** The keys of `name`'s type annotation in the enclosing method's parameter list. */
|
|
298
|
+
function paramTypeKeys(src, callAt, name) {
|
|
299
|
+
const before = src.slice(0, callAt);
|
|
300
|
+
const sigAt = before.lastIndexOf(`${name}:`);
|
|
301
|
+
if (sigAt === -1)
|
|
302
|
+
return null;
|
|
303
|
+
const braceAt = src.indexOf('{', sigAt);
|
|
304
|
+
if (braceAt === -1 || braceAt > sigAt + 40)
|
|
305
|
+
return null;
|
|
306
|
+
const raw = argsOf(src, braceAt);
|
|
307
|
+
if (raw === null)
|
|
308
|
+
return null;
|
|
309
|
+
// 🔴 COMMENTS OUT FIRST. This codebase documents fields INSIDE the type
|
|
310
|
+
// literal, at length, and a doc comment containing a colon produced phantom
|
|
311
|
+
// keys — which would then be reported as fields no route reads. A checker
|
|
312
|
+
// that invents findings is retired within a week.
|
|
313
|
+
const block = stripComments(raw);
|
|
314
|
+
const keys = [];
|
|
315
|
+
let depth = 0;
|
|
316
|
+
let start = 0;
|
|
317
|
+
const parts = [];
|
|
318
|
+
for (let i = 0; i < block.length; i++) {
|
|
319
|
+
const c = block[i];
|
|
320
|
+
if (c === '(' || c === '{' || c === '[' || c === '<')
|
|
321
|
+
depth++;
|
|
322
|
+
else if (c === ')' || c === '}' || c === ']' || c === '>')
|
|
323
|
+
depth--;
|
|
324
|
+
else if (c === ';' && depth === 0) {
|
|
325
|
+
parts.push(block.slice(start, i));
|
|
326
|
+
start = i + 1;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
parts.push(block.slice(start));
|
|
330
|
+
for (const part of parts) {
|
|
331
|
+
// `readonly` is a modifier, not a field name -- the SDK writes its input
|
|
332
|
+
// types that way and every key was missed without this.
|
|
333
|
+
const m = /^\s*(?:readonly\s+)?([A-Za-z_$][\w$]*)\s*\??\s*:/.exec(part);
|
|
334
|
+
if (m)
|
|
335
|
+
keys.push(m[1]);
|
|
336
|
+
}
|
|
337
|
+
return keys.length > 0 ? keys : null;
|
|
338
|
+
}
|
|
339
|
+
function sentBodies(source) {
|
|
340
|
+
// Same reason as the route half: a commented-out `this.request(...)` is not a
|
|
341
|
+
// call, and a doc comment is not a field.
|
|
342
|
+
const src = stripComments(source);
|
|
343
|
+
const out = [];
|
|
344
|
+
const needle = 'this.request';
|
|
345
|
+
let from = 0;
|
|
346
|
+
for (;;) {
|
|
347
|
+
const at = src.indexOf(needle, from);
|
|
348
|
+
if (at === -1)
|
|
349
|
+
break;
|
|
350
|
+
const openAt = src.indexOf('(', at);
|
|
351
|
+
from = at + needle.length;
|
|
352
|
+
if (openAt === -1)
|
|
353
|
+
continue;
|
|
354
|
+
const args = argsOf(src, openAt);
|
|
355
|
+
if (args === null)
|
|
356
|
+
continue;
|
|
357
|
+
from = openAt + args.length;
|
|
358
|
+
const parts = splitArgs(args);
|
|
359
|
+
if (parts.length < 2)
|
|
360
|
+
continue;
|
|
361
|
+
const method = parts[0].replace(/['"`]/g, '').trim().toUpperCase();
|
|
362
|
+
const path = normalisePath(parts[1]);
|
|
363
|
+
const rawPath = literalText(parts[1]) ?? parts[1].trim();
|
|
364
|
+
const caller = enclosingMethodName(src, at);
|
|
365
|
+
if (path === null) {
|
|
366
|
+
out.push({ caller, method, path: parts[1].trim(), rawPath: parts[1].trim(), sends: [], readable: false, raw: args });
|
|
367
|
+
continue;
|
|
368
|
+
}
|
|
369
|
+
if (parts.length < 3) {
|
|
370
|
+
out.push({ caller, method, path, rawPath, sends: [], readable: true, raw: '' });
|
|
371
|
+
continue;
|
|
372
|
+
}
|
|
373
|
+
const bodyArg = parts[2];
|
|
374
|
+
// A literal `undefined` third argument is NOT an unreadable body -- it is
|
|
375
|
+
// the absence of one, which a GET is entitled to. Reporting it as unread
|
|
376
|
+
// would inflate the "could not check" count with calls there is nothing to
|
|
377
|
+
// check, and a denominator that lies is worse than none.
|
|
378
|
+
if (bodyArg.trim() === 'undefined') {
|
|
379
|
+
out.push({ caller, method, path, rawPath, sends: [], readable: true, raw: '' });
|
|
380
|
+
continue;
|
|
381
|
+
}
|
|
382
|
+
const lit = literalKeys(bodyArg);
|
|
383
|
+
if (lit !== null && !lit.spread) {
|
|
384
|
+
out.push({ caller, method, path, rawPath, sends: lit.keys, readable: true, raw: bodyArg });
|
|
385
|
+
continue;
|
|
386
|
+
}
|
|
387
|
+
if (/^[A-Za-z_$][\w$]*$/.test(bodyArg.trim())) {
|
|
388
|
+
const keys = paramTypeKeys(src, at, bodyArg.trim());
|
|
389
|
+
if (keys !== null) {
|
|
390
|
+
out.push({ caller, method, path, rawPath, sends: keys, readable: true, raw: bodyArg });
|
|
391
|
+
continue;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
out.push({ caller, method, path, rawPath, sends: [], readable: false, raw: bodyArg });
|
|
395
|
+
}
|
|
396
|
+
return out;
|
|
397
|
+
}
|
|
398
|
+
function enclosingMethodName(src, at) {
|
|
399
|
+
const lines = src.slice(0, at).split('\n');
|
|
400
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
401
|
+
const m = /^ {2}(?:async )?([A-Za-z_$][\w$]*)\s*\(/.exec(lines[i].replace('\r', ''));
|
|
402
|
+
if (m && !['if', 'for', 'while', 'switch', 'catch', 'return'].includes(m[1]))
|
|
403
|
+
return m[1];
|
|
404
|
+
}
|
|
405
|
+
return '<unknown>';
|
|
406
|
+
}
|
|
407
|
+
//# sourceMappingURL=request-body-shape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-body-shape.js","sourceRoot":"","sources":["../src/request-body-shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { type Classification, type ItemServing, type LinkableSource, type RequirementLink, type SourceStatement } from '@looply/core';
|
|
2
|
+
/** The part of a source's detail that says what it offers as a link target. */
|
|
3
|
+
export interface SourceDetailForLinking {
|
|
4
|
+
readonly classifications: readonly Classification[];
|
|
5
|
+
readonly statements: readonly SourceStatement[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The goal's linked sources, as link targets.
|
|
9
|
+
*
|
|
10
|
+
* ⚠️ THE RULE IS CORE'S, NOT A COPY. `requirementOrdinals` is the classifier's
|
|
11
|
+
* own `requirement`/`constraint` verdicts and `derivedKeys` comes from
|
|
12
|
+
* `deriveAllTableRequirements` — the same function `apps/server`'s
|
|
13
|
+
* `linkableSourcesFor` calls. The two assemblies differ only because one reads
|
|
14
|
+
* Prisma rows and this one reads an HTTP detail; the DECISION about what is
|
|
15
|
+
* linkable is made in one place.
|
|
16
|
+
*
|
|
17
|
+
* ⚠️ THE DETAIL'S CLASSIFICATIONS ARE ALREADY THE LATEST CLASSIFIER'S — the
|
|
18
|
+
* endpoint reports `classifierVersion` beside them and `Classification` carries
|
|
19
|
+
* no version of its own, so there is nothing here to filter by version.
|
|
20
|
+
*
|
|
21
|
+
* 🔴 NULL WHEN ANY SOURCE COULD NOT BE READ, never a partial list. A missing
|
|
22
|
+
* source would make every claim against it `unknown-source` — a refusal that
|
|
23
|
+
* says the model invented a reference, when the truth is that this machine
|
|
24
|
+
* could not reach the server. The caller records no claims at all instead.
|
|
25
|
+
*/
|
|
26
|
+
export declare function linkableSourcesForGoal(goalLinks: readonly RequirementLink[], read: (sourceId: string) => Promise<SourceDetailForLinking>): Promise<LinkableSource[] | null>;
|
|
27
|
+
/**
|
|
28
|
+
* THE TRUSTED HALF OF THE ITEM→REQUIREMENT CLAIM PRODUCER.
|
|
29
|
+
*
|
|
30
|
+
* A reasoning model proposes which requirement each plan step serves and which
|
|
31
|
+
* check would prove it. That proposal is UNTRUSTED DATA. This turns it into
|
|
32
|
+
* claims, or drops it by name — and the charter's Brain boundary is the whole
|
|
33
|
+
* point: *"Do not let 'parsed successfully' become 'authorized'."*
|
|
34
|
+
*
|
|
35
|
+
* ## What validates what, and why it is split in exactly this place
|
|
36
|
+
*
|
|
37
|
+
* 🔴 `servedRequirementTrouble` IS THE AUTHORITY AND IS NOT REIMPLEMENTED HERE.
|
|
38
|
+
* It is the same pure core function the server's `PUT …/requirements` route
|
|
39
|
+
* calls, and it already refuses: a reference that is not a link, too many of
|
|
40
|
+
* them, a duplicate, a source this project does not have (which is what makes a
|
|
41
|
+
* cross-project reference `unknown-source` rather than valid), an ordinal the
|
|
42
|
+
* classifier does not call a requirement, a table row that does not exist, a
|
|
43
|
+
* claim with no acceptance step named, and a requirement THIS GOAL DOES NOT
|
|
44
|
+
* NAME. Duplicating any of that here would be the second implementation this
|
|
45
|
+
* repository keeps finding in its own mutation batteries.
|
|
46
|
+
*
|
|
47
|
+
* 🔴 THE ONE CHECK CORE CANNOT MAKE IS `provenBy` AGAINST THE GATE CONFIGURATION,
|
|
48
|
+
* and `requirement-receipt.ts` says so in its own docblock: the server stores a
|
|
49
|
+
* step name without checking it *"because the gate configuration lives on the
|
|
50
|
+
* machine"*. This runs on the machine, so it is the place that can. An invented
|
|
51
|
+
* step name is dropped here rather than stored — otherwise it would sit in the
|
|
52
|
+
* ledger and fold to `check-not-executed` for ever, which reads as "the check
|
|
53
|
+
* did not run" when the truth is "no such check was ever configured".
|
|
54
|
+
*
|
|
55
|
+
* ⚠️ AND A DROPPED CLAIM NEVER DROPS THE ITEM. The step is the work; the claim
|
|
56
|
+
* is provenance about the work. A mandatory requirement left unclaimed stays
|
|
57
|
+
* visible and blocking through the coverage gate, which is the correct place for
|
|
58
|
+
* that to be noticed — not here, by silently discarding a plan step.
|
|
59
|
+
*/
|
|
60
|
+
export interface ClaimProducerInput {
|
|
61
|
+
/**
|
|
62
|
+
* The plan's steps and the items they became, INDEX-ALIGNED.
|
|
63
|
+
*
|
|
64
|
+
* ⚠️ `planToItems` maps one step to one item in order, and this relies on it.
|
|
65
|
+
* A caller that filters one list and not the other would attribute one step's
|
|
66
|
+
* claims to another step's item — the whole-tree conflation, one size smaller.
|
|
67
|
+
*/
|
|
68
|
+
readonly steps: readonly {
|
|
69
|
+
readonly serves?: unknown;
|
|
70
|
+
}[];
|
|
71
|
+
readonly itemIds: readonly string[];
|
|
72
|
+
/** What the goal itself names. An item may serve nothing outside this. */
|
|
73
|
+
readonly goalLinks: readonly RequirementLink[];
|
|
74
|
+
/** The project's sources as link targets, built from the same core rules the server uses. */
|
|
75
|
+
readonly sources: readonly LinkableSource[];
|
|
76
|
+
/** Every step name the CURRENT gate configuration declares. */
|
|
77
|
+
readonly gateStepNames: ReadonlySet<string>;
|
|
78
|
+
}
|
|
79
|
+
export interface ProducedClaims {
|
|
80
|
+
/** The claims that survived, ready for the ledger. Items claiming nothing are absent. */
|
|
81
|
+
readonly servings: readonly ItemServing[];
|
|
82
|
+
/** What was refused, and why, in words a person can act on. */
|
|
83
|
+
readonly dropped: readonly {
|
|
84
|
+
readonly itemId: string;
|
|
85
|
+
readonly because: string;
|
|
86
|
+
}[];
|
|
87
|
+
}
|
|
88
|
+
export declare function produceClaims(input: ClaimProducerInput): ProducedClaims;
|
|
89
|
+
//# sourceMappingURL=requirement-claims.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requirement-claims.d.ts","sourceRoot":"","sources":["../src/requirement-claims.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,eAAe,EAEpB,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AAEtB,+EAA+E;AAC/E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IACpD,QAAQ,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,SAAS,eAAe,EAAE,EACrC,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,GAC1D,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAkBlC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IACzD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,CAAC;IAC/C,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C,+DAA+D;IAC/D,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACpF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,cAAc,CAiDvE"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.linkableSourcesForGoal = linkableSourcesForGoal;
|
|
4
|
+
exports.produceClaims = produceClaims;
|
|
5
|
+
const core_1 = require("@looply/core");
|
|
6
|
+
/**
|
|
7
|
+
* The goal's linked sources, as link targets.
|
|
8
|
+
*
|
|
9
|
+
* ⚠️ THE RULE IS CORE'S, NOT A COPY. `requirementOrdinals` is the classifier's
|
|
10
|
+
* own `requirement`/`constraint` verdicts and `derivedKeys` comes from
|
|
11
|
+
* `deriveAllTableRequirements` — the same function `apps/server`'s
|
|
12
|
+
* `linkableSourcesFor` calls. The two assemblies differ only because one reads
|
|
13
|
+
* Prisma rows and this one reads an HTTP detail; the DECISION about what is
|
|
14
|
+
* linkable is made in one place.
|
|
15
|
+
*
|
|
16
|
+
* ⚠️ THE DETAIL'S CLASSIFICATIONS ARE ALREADY THE LATEST CLASSIFIER'S — the
|
|
17
|
+
* endpoint reports `classifierVersion` beside them and `Classification` carries
|
|
18
|
+
* no version of its own, so there is nothing here to filter by version.
|
|
19
|
+
*
|
|
20
|
+
* 🔴 NULL WHEN ANY SOURCE COULD NOT BE READ, never a partial list. A missing
|
|
21
|
+
* source would make every claim against it `unknown-source` — a refusal that
|
|
22
|
+
* says the model invented a reference, when the truth is that this machine
|
|
23
|
+
* could not reach the server. The caller records no claims at all instead.
|
|
24
|
+
*/
|
|
25
|
+
async function linkableSourcesForGoal(goalLinks, read) {
|
|
26
|
+
const out = [];
|
|
27
|
+
for (const sourceId of new Set(goalLinks.map((l) => l.sourceId))) {
|
|
28
|
+
let detail;
|
|
29
|
+
try {
|
|
30
|
+
detail = await read(sourceId);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
out.push({
|
|
36
|
+
id: sourceId,
|
|
37
|
+
requirementOrdinals: detail.classifications
|
|
38
|
+
.filter((c) => c.class === 'requirement' || c.class === 'constraint')
|
|
39
|
+
.map((c) => c.ordinal),
|
|
40
|
+
derivedKeys: (0, core_1.deriveAllTableRequirements)(detail.statements).derived.map((d) => d.key),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
function produceClaims(input) {
|
|
46
|
+
const servings = [];
|
|
47
|
+
const dropped = [];
|
|
48
|
+
input.steps.forEach((step, i) => {
|
|
49
|
+
const itemId = input.itemIds[i];
|
|
50
|
+
if (itemId === undefined || step.serves === undefined)
|
|
51
|
+
return;
|
|
52
|
+
/**
|
|
53
|
+
* The machine-side filter, BEFORE the shared validator, so a claim naming a
|
|
54
|
+
* step this project does not run is reported as exactly that rather than
|
|
55
|
+
* reaching the ledger and being withheld later for a different reason.
|
|
56
|
+
*/
|
|
57
|
+
const named = Array.isArray(step.serves) ? step.serves : null;
|
|
58
|
+
if (named === null) {
|
|
59
|
+
dropped.push({ itemId, because: 'serves is not a list of requirement references' });
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const kept = [];
|
|
63
|
+
for (const s of named) {
|
|
64
|
+
const provenBy = s?.provenBy;
|
|
65
|
+
if (typeof provenBy === 'string' && !input.gateStepNames.has(provenBy.trim())) {
|
|
66
|
+
const link = s;
|
|
67
|
+
const where = typeof link?.sourceId === 'string' && Number.isInteger(link?.ordinal) ? (0, core_1.criterionKey)(link) : 'a reference';
|
|
68
|
+
dropped.push({
|
|
69
|
+
itemId,
|
|
70
|
+
because: `${where} names ${JSON.stringify(provenBy)}, which is not a step this project's gate runs`,
|
|
71
|
+
});
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
kept.push(s);
|
|
75
|
+
}
|
|
76
|
+
if (kept.length === 0)
|
|
77
|
+
return;
|
|
78
|
+
/**
|
|
79
|
+
* 🔴 THE SHARED AUTHORITY, ON WHAT SURVIVED. All or nothing per item: the
|
|
80
|
+
* core validator answers about the LIST, and accepting the well-formed half
|
|
81
|
+
* of a list it refused would be overriding it with a rule it does not have.
|
|
82
|
+
*/
|
|
83
|
+
const trouble = (0, core_1.servedRequirementTrouble)(kept, { sources: input.sources, goalLinks: input.goalLinks });
|
|
84
|
+
if (trouble !== null) {
|
|
85
|
+
dropped.push({ itemId, because: (0, core_1.describeServedRequirementTrouble)(trouble) });
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
servings.push({ itemId, serves: kept });
|
|
89
|
+
});
|
|
90
|
+
return { servings, dropped };
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=requirement-claims.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requirement-claims.js","sourceRoot":"","sources":["../src/requirement-claims.ts"],"names":[],"mappings":"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"}
|