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,66 @@
|
|
|
1
|
+
import type { EventData, Item } from '@looply/core';
|
|
2
|
+
import type { CommandResult } from './gate';
|
|
3
|
+
/**
|
|
4
|
+
* The verifier invocation (DESIGN §10, §12 cases 17–18): every item, from any
|
|
5
|
+
* source, is checked by a read-only agent before it can be picked. The verifier
|
|
6
|
+
* judges the item's *premise* against the code as it stands now — an item whose
|
|
7
|
+
* defect is already fixed is `stale` (case 17), an item another lens already
|
|
8
|
+
* filed is `duplicate` (case 18) — so the loop never spends a round implementing
|
|
9
|
+
* something that does not need implementing.
|
|
10
|
+
*/
|
|
11
|
+
export interface VerifierContext {
|
|
12
|
+
item: Pick<Item, 'id' | 'title' | 'tag' | 'evidence'>;
|
|
13
|
+
/**
|
|
14
|
+
* The other open items in the queue, so the verifier can name which one this
|
|
15
|
+
* duplicates (§12 case 18). Titles plus ids: `duplicateOf` must be an id the
|
|
16
|
+
* queue can actually merge into, and the agent can only name what it was shown.
|
|
17
|
+
*/
|
|
18
|
+
others: ReadonlyArray<{
|
|
19
|
+
id: string;
|
|
20
|
+
title: string;
|
|
21
|
+
}>;
|
|
22
|
+
}
|
|
23
|
+
/** Same invoke seam as the prover: the prompt travels as data, never a command line. */
|
|
24
|
+
export type VerifierInvoke = (prompt: string, timeoutMs: number) => Promise<CommandResult>;
|
|
25
|
+
export interface VerifierRunResult {
|
|
26
|
+
/** The exact prompt handed to the agent, kept for the log (§3.2). */
|
|
27
|
+
prompt: string;
|
|
28
|
+
transcript: string;
|
|
29
|
+
ms: number;
|
|
30
|
+
/** Recorded, never decisive — the verdict parser decides, same as §12 cases 3/15. */
|
|
31
|
+
exitOk: boolean;
|
|
32
|
+
timedOut: boolean;
|
|
33
|
+
}
|
|
34
|
+
export declare function runVerifier(invoke: VerifierInvoke, ctx: VerifierContext, timeoutMs: number): Promise<VerifierRunResult>;
|
|
35
|
+
export declare function buildVerifierPrompt(ctx: VerifierContext): string;
|
|
36
|
+
/**
|
|
37
|
+
* The verifier's structured verdict. `note` carries the agent's `reason` — named
|
|
38
|
+
* to match the `item.verified` payload, so a caller emits the event as
|
|
39
|
+
* `{ itemId, ...outcome }` with nothing renamed along the way.
|
|
40
|
+
*/
|
|
41
|
+
export type VerifyOutcome = Omit<EventData['item.verified'], 'itemId'> & {
|
|
42
|
+
note: string;
|
|
43
|
+
};
|
|
44
|
+
export type VerifierVerdictExtract = {
|
|
45
|
+
ok: true;
|
|
46
|
+
verdict: VerifyOutcome;
|
|
47
|
+
} | {
|
|
48
|
+
ok: false;
|
|
49
|
+
reason: string;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Find the verifier's verdict in a transcript: the last JSON candidate that
|
|
53
|
+
* fully validates wins. The prompt embeds the contract in a fenced json block,
|
|
54
|
+
* so a transcript that echoes the prompt contains a verdict-shaped decoy —
|
|
55
|
+
* scanning from the end mirrors extractProverVerdict.
|
|
56
|
+
*/
|
|
57
|
+
export declare function extractVerifierVerdict(transcript: string): VerifierVerdictExtract;
|
|
58
|
+
/**
|
|
59
|
+
* The backlog rule this module exists for: an unparseable verdict is never
|
|
60
|
+
* `confirmed`. It maps to `unclear` — back to draft and into a question, never
|
|
61
|
+
* pickable — because the alternative reading (treat garbage as confirmation and
|
|
62
|
+
* move on) is exactly how a queue fills with unverified work while looking
|
|
63
|
+
* verified, the queue-side twin of §12 case 15's unparseable-proof-is-a-pass.
|
|
64
|
+
*/
|
|
65
|
+
export declare function toVerifyOutcome(run: VerifierRunResult): VerifyOutcome;
|
|
66
|
+
//# sourceMappingURL=verifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../src/verifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,SAAS,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE5C;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,KAAK,GAAG,UAAU,CAAC,CAAC;IACtD;;;;OAIG;IACH,MAAM,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAED,wFAAwF;AACxF,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAE3F,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,qFAAqF;IACrF,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,eAAe,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,CAAC,CAI5B;AAcD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAyBhE;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1F,MAAM,MAAM,sBAAsB,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,GACpC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,sBAAsB,CAQjF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,iBAAiB,GAAG,aAAa,CAOrE"}
|
package/dist/verifier.js
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runVerifier = runVerifier;
|
|
4
|
+
exports.buildVerifierPrompt = buildVerifierPrompt;
|
|
5
|
+
exports.extractVerifierVerdict = extractVerifierVerdict;
|
|
6
|
+
exports.toVerifyOutcome = toVerifyOutcome;
|
|
7
|
+
const agent_driver_1 = require("./agent-driver");
|
|
8
|
+
async function runVerifier(invoke, ctx, timeoutMs) {
|
|
9
|
+
const prompt = buildVerifierPrompt(ctx);
|
|
10
|
+
const r = await invoke(prompt, timeoutMs);
|
|
11
|
+
return { prompt, transcript: r.output ?? '', ms: r.ms, exitOk: r.ok, timedOut: r.timedOut };
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The verdict contract quoted in the prompt, so the parser validates against
|
|
15
|
+
* the same shape the agent was shown. Fields deliberately mirror the
|
|
16
|
+
* `item.verified` ledger payload: what the verifier answers is what the ledger
|
|
17
|
+
* records, with no translation layer to drift.
|
|
18
|
+
*/
|
|
19
|
+
const VERDICT_CONTRACT = `{ "verdict": "confirmed" | "amended" | "stale" | "duplicate" | "blocked" | "too-big" | "unclear",
|
|
20
|
+
"reason": "<one sentence: why this verdict>",
|
|
21
|
+
"evidence": [{ "path": "<file>", "line": 123, "quote": "<the line that proves the premise>" }],
|
|
22
|
+
"amendedTitle": "<amended only: the corrected title>",
|
|
23
|
+
"duplicateOf": "<duplicate only: the id of the open item this duplicates>" }`;
|
|
24
|
+
function buildVerifierPrompt(ctx) {
|
|
25
|
+
return [
|
|
26
|
+
'You are a verifier with read-only access. You may read files; you must not modify anything.',
|
|
27
|
+
'Judge whether the item below is worth implementing against the code as it stands NOW.',
|
|
28
|
+
'Check the premise, not the plan: if the defect it describes is already fixed, the item',
|
|
29
|
+
'is stale no matter how well written it is.',
|
|
30
|
+
'',
|
|
31
|
+
`Item ${ctx.item.id} [${ctx.item.tag}]: ${ctx.item.title}`,
|
|
32
|
+
'',
|
|
33
|
+
renderEvidence(ctx.item.evidence),
|
|
34
|
+
'',
|
|
35
|
+
renderOthers(ctx.others),
|
|
36
|
+
'',
|
|
37
|
+
'Verdicts: "confirmed" — the premise holds; cite the file:line that proves it in evidence.',
|
|
38
|
+
'"amended" — the defect is real but the title is wrong or imprecise; supply amendedTitle',
|
|
39
|
+
'and the evidence for the corrected premise. "stale" — the premise is already fixed.',
|
|
40
|
+
'"duplicate" — an open item above describes the same defect; name it in duplicateOf.',
|
|
41
|
+
'"blocked" — it cannot proceed and reason says why. "too-big" — it is several rounds of',
|
|
42
|
+
'work and must be split. "unclear" — you cannot tell what it is asking for.',
|
|
43
|
+
'',
|
|
44
|
+
'Answer with exactly one JSON object in this shape and nothing after it:',
|
|
45
|
+
'```json',
|
|
46
|
+
VERDICT_CONTRACT,
|
|
47
|
+
'```',
|
|
48
|
+
].join('\n');
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Find the verifier's verdict in a transcript: the last JSON candidate that
|
|
52
|
+
* fully validates wins. The prompt embeds the contract in a fenced json block,
|
|
53
|
+
* so a transcript that echoes the prompt contains a verdict-shaped decoy —
|
|
54
|
+
* scanning from the end mirrors extractProverVerdict.
|
|
55
|
+
*/
|
|
56
|
+
function extractVerifierVerdict(transcript) {
|
|
57
|
+
let why;
|
|
58
|
+
for (const candidate of (0, agent_driver_1.jsonCandidates)(transcript)) {
|
|
59
|
+
const v = validateVerdict(candidate.value);
|
|
60
|
+
if (v.ok)
|
|
61
|
+
return v;
|
|
62
|
+
if (why === undefined)
|
|
63
|
+
why = `the last verdict-shaped JSON is not a valid verifier verdict: ${v.why}`;
|
|
64
|
+
}
|
|
65
|
+
return { ok: false, reason: why ?? 'no structured verifier verdict in the transcript' };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The backlog rule this module exists for: an unparseable verdict is never
|
|
69
|
+
* `confirmed`. It maps to `unclear` — back to draft and into a question, never
|
|
70
|
+
* pickable — because the alternative reading (treat garbage as confirmation and
|
|
71
|
+
* move on) is exactly how a queue fills with unverified work while looking
|
|
72
|
+
* verified, the queue-side twin of §12 case 15's unparseable-proof-is-a-pass.
|
|
73
|
+
*/
|
|
74
|
+
function toVerifyOutcome(run) {
|
|
75
|
+
const extracted = extractVerifierVerdict(run.transcript);
|
|
76
|
+
if (extracted.ok)
|
|
77
|
+
return extracted.verdict;
|
|
78
|
+
const note = run.timedOut
|
|
79
|
+
? `${extracted.reason}; the verifier hit its timeout and was killed after ${run.ms}ms`
|
|
80
|
+
: extracted.reason;
|
|
81
|
+
return { verdict: 'unclear', note };
|
|
82
|
+
}
|
|
83
|
+
const VERDICTS = ['confirmed', 'amended', 'stale', 'duplicate', 'blocked', 'too-big', 'unclear'];
|
|
84
|
+
function validateVerdict(v) {
|
|
85
|
+
const verdict = v['verdict'];
|
|
86
|
+
if (typeof verdict !== 'string' || !VERDICTS.includes(verdict)) {
|
|
87
|
+
return { ok: false, why: `verdict must be one of ${VERDICTS.join(' | ')}` };
|
|
88
|
+
}
|
|
89
|
+
const word = verdict;
|
|
90
|
+
const reason = v['reason'];
|
|
91
|
+
if (typeof reason !== 'string' || reason.trim() === '') {
|
|
92
|
+
return { ok: false, why: 'reason must be a non-empty string' };
|
|
93
|
+
}
|
|
94
|
+
const evidence = parseEvidence(v['evidence']);
|
|
95
|
+
if (evidence === undefined) {
|
|
96
|
+
return { ok: false, why: 'evidence must be a list of { path, line?, quote? } entries' };
|
|
97
|
+
}
|
|
98
|
+
// §10: "confirmed caches evidence" — confirmation IS the moment the evidence
|
|
99
|
+
// cache is filled, and amended makes an item ready exactly like confirmed
|
|
100
|
+
// does. A pickable verdict with nothing to cache would send the implementer
|
|
101
|
+
// searching for the defect again, the failure the cache exists to prevent,
|
|
102
|
+
// so it fails closed here instead of passing as a hollow confirmation.
|
|
103
|
+
if ((word === 'confirmed' || word === 'amended') && evidence.length === 0) {
|
|
104
|
+
return { ok: false, why: `a ${word} verdict must cite at least one evidence entry` };
|
|
105
|
+
}
|
|
106
|
+
const amendedTitle = v['amendedTitle'];
|
|
107
|
+
if (word === 'amended' && (typeof amendedTitle !== 'string' || amendedTitle.trim() === '')) {
|
|
108
|
+
return { ok: false, why: 'an amended verdict must supply the corrected title' };
|
|
109
|
+
}
|
|
110
|
+
const duplicateOf = v['duplicateOf'];
|
|
111
|
+
if (word === 'duplicate' && (typeof duplicateOf !== 'string' || duplicateOf.trim() === '')) {
|
|
112
|
+
return { ok: false, why: 'a duplicate verdict must name the item it duplicates' };
|
|
113
|
+
}
|
|
114
|
+
// Only the fields the verdict word licenses are carried out: an off-verdict
|
|
115
|
+
// amendedTitle/duplicateOf never leaks into the item.verified payload.
|
|
116
|
+
const out = { verdict: word, note: reason };
|
|
117
|
+
if (evidence.length > 0)
|
|
118
|
+
out.evidence = evidence;
|
|
119
|
+
if (word === 'amended')
|
|
120
|
+
out.amendedTitle = amendedTitle;
|
|
121
|
+
if (word === 'duplicate')
|
|
122
|
+
out.duplicateOf = duplicateOf;
|
|
123
|
+
return { ok: true, verdict: out };
|
|
124
|
+
}
|
|
125
|
+
function parseEvidence(v) {
|
|
126
|
+
if (v === undefined)
|
|
127
|
+
return [];
|
|
128
|
+
if (!Array.isArray(v))
|
|
129
|
+
return undefined;
|
|
130
|
+
const out = [];
|
|
131
|
+
for (const entry of v) {
|
|
132
|
+
if (typeof entry !== 'object' || entry === null || Array.isArray(entry))
|
|
133
|
+
return undefined;
|
|
134
|
+
const o = entry;
|
|
135
|
+
const path = o['path'];
|
|
136
|
+
if (typeof path !== 'string' || path === '')
|
|
137
|
+
return undefined;
|
|
138
|
+
const e = { path };
|
|
139
|
+
const line = o['line'];
|
|
140
|
+
if (line !== undefined) {
|
|
141
|
+
if (typeof line !== 'number' || !Number.isFinite(line))
|
|
142
|
+
return undefined;
|
|
143
|
+
e.line = line;
|
|
144
|
+
}
|
|
145
|
+
const quote = o['quote'];
|
|
146
|
+
if (quote !== undefined) {
|
|
147
|
+
if (typeof quote !== 'string')
|
|
148
|
+
return undefined;
|
|
149
|
+
e.quote = quote;
|
|
150
|
+
}
|
|
151
|
+
out.push(e);
|
|
152
|
+
}
|
|
153
|
+
return out;
|
|
154
|
+
}
|
|
155
|
+
function renderEvidence(evidence) {
|
|
156
|
+
if (evidence.length === 0)
|
|
157
|
+
return 'Evidence on file: none — find the premise in the code yourself.';
|
|
158
|
+
const lines = evidence.map((e) => {
|
|
159
|
+
const loc = e.line === undefined ? e.path : `${e.path}:${e.line}`;
|
|
160
|
+
return e.quote === undefined ? `- ${loc}` : `- ${loc} — ${JSON.stringify(e.quote)}`;
|
|
161
|
+
});
|
|
162
|
+
return ['Evidence on file:', ...lines].join('\n');
|
|
163
|
+
}
|
|
164
|
+
function renderOthers(others) {
|
|
165
|
+
if (others.length === 0)
|
|
166
|
+
return 'Other open items: none.';
|
|
167
|
+
const lines = others.map((o) => `- ${o.id} — ${o.title}`);
|
|
168
|
+
return ['Other open items (for the duplicate check):', ...lines].join('\n');
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../src/verifier.ts"],"names":[],"mappings":";;AAmCA,kCAQC;AAcD,kDAyBC;AAmBD,wDAQC;AASD,0CAOC;AA5HD,iDAAgD;AAkCzC,KAAK,UAAU,WAAW,CAC/B,MAAsB,EACtB,GAAoB,EACpB,SAAiB;IAEjB,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC9F,CAAC;AAED;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG;;;;+EAIsD,CAAC;AAEhF,SAAgB,mBAAmB,CAAC,GAAoB;IACtD,OAAO;QACL,6FAA6F;QAC7F,uFAAuF;QACvF,wFAAwF;QACxF,4CAA4C;QAC5C,EAAE;QACF,QAAQ,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE;QAC1D,EAAE;QACF,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QACjC,EAAE;QACF,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;QACxB,EAAE;QACF,2FAA2F;QAC3F,yFAAyF;QACzF,qFAAqF;QACrF,qFAAqF;QACrF,wFAAwF;QACxF,4EAA4E;QAC5E,EAAE;QACF,yEAAyE;QACzE,SAAS;QACT,gBAAgB;QAChB,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAaD;;;;;GAKG;AACH,SAAgB,sBAAsB,CAAC,UAAkB;IACvD,IAAI,GAAuB,CAAC;IAC5B,KAAK,MAAM,SAAS,IAAI,IAAA,6BAAc,EAAC,UAAU,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC;QACnB,IAAI,GAAG,KAAK,SAAS;YAAE,GAAG,GAAG,iEAAiE,CAAC,CAAC,GAAG,EAAE,CAAC;IACxG,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,kDAAkD,EAAE,CAAC;AAC1F,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,eAAe,CAAC,GAAsB;IACpD,MAAM,SAAS,GAAG,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,SAAS,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ;QACvB,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,uDAAuD,GAAG,CAAC,EAAE,IAAI;QACtF,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC;AAID,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AAG1G,SAAS,eAAe,CAAC,CAA0B;IACjD,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAE,QAA8B,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,0BAA0B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;IAC9E,CAAC;IACD,MAAM,IAAI,GAAG,OAA8B,CAAC;IAE5C,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC3B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,mCAAmC,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,4DAA4D,EAAE,CAAC;IAC1F,CAAC;IAED,6EAA6E;IAC7E,0EAA0E;IAC1E,4EAA4E;IAC5E,2EAA2E;IAC3E,uEAAuE;IACvE,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,gDAAgD,EAAE,CAAC;IACvF,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;IACvC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC3F,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,oDAAoD,EAAE,CAAC;IAClF,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;IACrC,IAAI,IAAI,KAAK,WAAW,IAAI,CAAC,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC3F,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,sDAAsD,EAAE,CAAC;IACpF,CAAC;IAED,4EAA4E;IAC5E,uEAAuE;IACvE,MAAM,GAAG,GAAkB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC3D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACjD,IAAI,IAAI,KAAK,SAAS;QAAE,GAAG,CAAC,YAAY,GAAG,YAAsB,CAAC;IAClE,IAAI,IAAI,KAAK,WAAW;QAAE,GAAG,CAAC,WAAW,GAAG,WAAqB,CAAC;IAClE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,aAAa,CAAC,CAAU;IAC/B,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,CAAC,EAAE,CAAC;QACtB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC1F,MAAM,CAAC,GAAG,KAAgC,CAAC;QAC3C,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QACvB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE;YAAE,OAAO,SAAS,CAAC;QAC9D,MAAM,CAAC,GAAa,EAAE,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QACvB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YACzE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAC;YAChD,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;QAClB,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,QAA6B;IACnD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,iEAAiE,CAAC;IACpG,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAClE,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;IACtF,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,mBAAmB,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,YAAY,CAAC,MAAiC;IACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,yBAAyB,CAAC;IAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,6CAA6C,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Evidence, type Item, type ItemState } from '@looply/core';
|
|
2
|
+
import type { ItemPatch } from './queue-store';
|
|
3
|
+
import type { VerifyOutcome } from './verifier';
|
|
4
|
+
/**
|
|
5
|
+
* Turning a verifier verdict into a queue change.
|
|
6
|
+
*
|
|
7
|
+
* Extracted from the round runner because there are two callers, and they must
|
|
8
|
+
* agree exactly. The runner re-verifies an item at pick time when its cached
|
|
9
|
+
* evidence has gone stale (DESIGN section 12 case 19); the verification pass
|
|
10
|
+
* walks the drafts a scan produced. If those two applied verdicts differently,
|
|
11
|
+
* whether an item became pickable would depend on which route happened to
|
|
12
|
+
* reach it — so the decision lives here, once, as a pure function.
|
|
13
|
+
*/
|
|
14
|
+
export interface AppliedVerdict {
|
|
15
|
+
/** The verdict actually applied, which may have been degraded from the input. */
|
|
16
|
+
outcome: VerifyOutcome;
|
|
17
|
+
next: ItemState;
|
|
18
|
+
patch: ItemPatch;
|
|
19
|
+
/** Evidence worth caching at the verified HEAD, or null when there is none. */
|
|
20
|
+
cacheEvidence: readonly Evidence[] | null;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* @param lookup resolves an item id against the queue, for checking `duplicateOf`.
|
|
24
|
+
*/
|
|
25
|
+
export declare function applyVerifyVerdict(item: Pick<Item, 'id'>, outcome: VerifyOutcome, lookup: (id: string) => Item | undefined): AppliedVerdict;
|
|
26
|
+
//# sourceMappingURL=verify-apply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-apply.d.ts","sourceRoot":"","sources":["../src/verify-apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;;;;GASG;AAEH,MAAM,WAAW,cAAc;IAC7B,iFAAiF;IACjF,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,+EAA+E;IAC/E,aAAa,EAAE,SAAS,QAAQ,EAAE,GAAG,IAAI,CAAC;CAC3C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EACtB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,GACvC,cAAc,CAyBhB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyVerifyVerdict = applyVerifyVerdict;
|
|
4
|
+
const core_1 = require("@looply/core");
|
|
5
|
+
/**
|
|
6
|
+
* @param lookup resolves an item id against the queue, for checking `duplicateOf`.
|
|
7
|
+
*/
|
|
8
|
+
function applyVerifyVerdict(item, outcome, lookup) {
|
|
9
|
+
// The verdict parser is context-free, so `duplicateOf` may name a bogus or
|
|
10
|
+
// *self* id — applied as-is, a self-duplicate would close the item against
|
|
11
|
+
// itself and lose it. An unusable duplicate verdict degrades to `unclear`:
|
|
12
|
+
// back to draft where a human decides, never silently dropped.
|
|
13
|
+
let applied = outcome;
|
|
14
|
+
if (outcome.verdict === 'duplicate') {
|
|
15
|
+
const target = outcome.duplicateOf === undefined ? undefined : lookup(outcome.duplicateOf);
|
|
16
|
+
if (target === undefined || target.id === item.id) {
|
|
17
|
+
applied = {
|
|
18
|
+
verdict: 'unclear',
|
|
19
|
+
note: `duplicate verdict names ${outcome.duplicateOf ?? '(nothing)'}, which is not another item in the queue`,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const next = (0, core_1.afterVerify)(applied.verdict);
|
|
24
|
+
const patch = { state: next };
|
|
25
|
+
if (next === 'ready' && applied.evidence !== undefined)
|
|
26
|
+
patch.evidence = applied.evidence;
|
|
27
|
+
if (applied.verdict === 'amended' && applied.amendedTitle !== undefined)
|
|
28
|
+
patch.title = applied.amendedTitle;
|
|
29
|
+
if (applied.verdict === 'duplicate' && applied.duplicateOf !== undefined)
|
|
30
|
+
patch.duplicateOf = applied.duplicateOf;
|
|
31
|
+
if (applied.verdict === 'blocked')
|
|
32
|
+
patch.blockedReason = applied.note;
|
|
33
|
+
const hasEvidence = next === 'ready' && applied.evidence !== undefined && applied.evidence.length > 0;
|
|
34
|
+
return { outcome: applied, next, patch, cacheEvidence: hasEvidence ? applied.evidence ?? null : null };
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=verify-apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-apply.js","sourceRoot":"","sources":["../src/verify-apply.ts"],"names":[],"mappings":";;AA2BA,gDA6BC;AAxDD,uCAAqF;AAwBrF;;GAEG;AACH,SAAgB,kBAAkB,CAChC,IAAsB,EACtB,OAAsB,EACtB,MAAwC;IAExC,2EAA2E;IAC3E,2EAA2E;IAC3E,2EAA2E;IAC3E,+DAA+D;IAC/D,IAAI,OAAO,GAAG,OAAO,CAAC;IACtB,IAAI,OAAO,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3F,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;YAClD,OAAO,GAAG;gBACR,OAAO,EAAE,SAAS;gBAClB,IAAI,EAAE,2BAA2B,OAAO,CAAC,WAAW,IAAI,WAAW,0CAA0C;aAC9G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,IAAA,kBAAW,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAc,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzC,IAAI,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;QAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC1F,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;QAAE,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC;IAC5G,IAAI,OAAO,CAAC,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS;QAAE,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAClH,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;QAAE,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtE,MAAM,WAAW,GAAG,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACtG,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACzG,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Item } from '@looply/core';
|
|
2
|
+
import { type AgentInvoke } from './agent-exec';
|
|
3
|
+
import type { LooplyConfig } from './config';
|
|
4
|
+
import { type VerifyOutcome } from './verifier';
|
|
5
|
+
import { type VerifyPassQueue, type VerifyPassReport } from './verify-pass';
|
|
6
|
+
/**
|
|
7
|
+
* The composition root for `looply verify`, and the shared verifier the run
|
|
8
|
+
* uses at pick time. Both routes build the item verifier the same way, so what
|
|
9
|
+
* the verifier is shown does not depend on who asked.
|
|
10
|
+
*/
|
|
11
|
+
export declare const VERIFIER_TIMEOUT_MS: number;
|
|
12
|
+
/**
|
|
13
|
+
* How many drafts one run checks before it starts working.
|
|
14
|
+
*
|
|
15
|
+
* The pass is sequential and each draft costs up to VERIFIER_TIMEOUT_MS, and
|
|
16
|
+
* ALL of it happens before `run.started` — which is the only thing that acks
|
|
17
|
+
* the start-run that asked for the run. That command expires one hour after it
|
|
18
|
+
* was issued, so an uncapped pass over enough drafts silently spends the whole
|
|
19
|
+
* window and the command is marked expired while the run carries on unacked.
|
|
20
|
+
*
|
|
21
|
+
* `draftsToVerify` has taken a `max` since it was written; nothing passed one.
|
|
22
|
+
* The full sum, and the compiler bound derived from it, are asserted in
|
|
23
|
+
* `goal-compile.spec.ts` against these real constants.
|
|
24
|
+
*
|
|
25
|
+
* Drafts past the cap are not lost — they stay `draft`, and the next run checks
|
|
26
|
+
* them. This bounds one pass, not the queue.
|
|
27
|
+
*/
|
|
28
|
+
export declare const VERIFY_MAX_PER_RUN = 6;
|
|
29
|
+
/**
|
|
30
|
+
* One item verifier.
|
|
31
|
+
*
|
|
32
|
+
* The rest of the open queue travels with the item so a duplicate can be named
|
|
33
|
+
* by id rather than merely suspected — the verifier can only point at what it
|
|
34
|
+
* was shown.
|
|
35
|
+
*/
|
|
36
|
+
export declare function makeItemVerifier(agent: AgentInvoke, queue: Pick<VerifyPassQueue, 'list'>): (item: Item) => Promise<VerifyOutcome>;
|
|
37
|
+
export interface VerifyOptions {
|
|
38
|
+
cwd: string;
|
|
39
|
+
config: LooplyConfig;
|
|
40
|
+
max?: number;
|
|
41
|
+
log: (line: string) => void;
|
|
42
|
+
}
|
|
43
|
+
export declare function verifyCommand(opts: VerifyOptions): Promise<VerifyPassReport>;
|
|
44
|
+
//# sourceMappingURL=verify-cmd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-cmd.d.ts","sourceRoot":"","sources":["../src/verify-cmd.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAO7C,OAAO,EAAgC,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAgB,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAG1F;;;;GAIG;AAEH,eAAO,MAAM,mBAAmB,QAAgB,CAAC;AAEjD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GACnC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,aAAa,CAAC,CAaxC;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwBlF"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VERIFY_MAX_PER_RUN = exports.VERIFIER_TIMEOUT_MS = void 0;
|
|
4
|
+
exports.makeItemVerifier = makeItemVerifier;
|
|
5
|
+
exports.verifyCommand = verifyCommand;
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const model_transport_1 = require("./model-transport");
|
|
8
|
+
const providers_1 = require("./providers");
|
|
9
|
+
const evidence_cache_1 = require("./evidence-cache");
|
|
10
|
+
const git_driver_1 = require("./git-driver");
|
|
11
|
+
const ledger_store_1 = require("./ledger-store");
|
|
12
|
+
const queue_store_1 = require("./queue-store");
|
|
13
|
+
const sync_1 = require("./sync");
|
|
14
|
+
const syncing_ledger_1 = require("./syncing-ledger");
|
|
15
|
+
const verifier_1 = require("./verifier");
|
|
16
|
+
const verify_pass_1 = require("./verify-pass");
|
|
17
|
+
const queue_write_lease_1 = require("./queue-write-lease");
|
|
18
|
+
/**
|
|
19
|
+
* The composition root for `looply verify`, and the shared verifier the run
|
|
20
|
+
* uses at pick time. Both routes build the item verifier the same way, so what
|
|
21
|
+
* the verifier is shown does not depend on who asked.
|
|
22
|
+
*/
|
|
23
|
+
exports.VERIFIER_TIMEOUT_MS = 5 * 60 * 1000;
|
|
24
|
+
/**
|
|
25
|
+
* How many drafts one run checks before it starts working.
|
|
26
|
+
*
|
|
27
|
+
* The pass is sequential and each draft costs up to VERIFIER_TIMEOUT_MS, and
|
|
28
|
+
* ALL of it happens before `run.started` — which is the only thing that acks
|
|
29
|
+
* the start-run that asked for the run. That command expires one hour after it
|
|
30
|
+
* was issued, so an uncapped pass over enough drafts silently spends the whole
|
|
31
|
+
* window and the command is marked expired while the run carries on unacked.
|
|
32
|
+
*
|
|
33
|
+
* `draftsToVerify` has taken a `max` since it was written; nothing passed one.
|
|
34
|
+
* The full sum, and the compiler bound derived from it, are asserted in
|
|
35
|
+
* `goal-compile.spec.ts` against these real constants.
|
|
36
|
+
*
|
|
37
|
+
* Drafts past the cap are not lost — they stay `draft`, and the next run checks
|
|
38
|
+
* them. This bounds one pass, not the queue.
|
|
39
|
+
*/
|
|
40
|
+
exports.VERIFY_MAX_PER_RUN = 6;
|
|
41
|
+
/**
|
|
42
|
+
* One item verifier.
|
|
43
|
+
*
|
|
44
|
+
* The rest of the open queue travels with the item so a duplicate can be named
|
|
45
|
+
* by id rather than merely suspected — the verifier can only point at what it
|
|
46
|
+
* was shown.
|
|
47
|
+
*/
|
|
48
|
+
function makeItemVerifier(agent, queue) {
|
|
49
|
+
return async (item) => {
|
|
50
|
+
const others = queue
|
|
51
|
+
.list()
|
|
52
|
+
.filter((i) => i.id !== item.id && (i.state === 'ready' || i.state === 'draft'))
|
|
53
|
+
.map((i) => ({ id: i.id, title: i.title }));
|
|
54
|
+
const run = await (0, verifier_1.runVerifier)(agent, { item: { id: item.id, title: item.title, tag: item.tag, evidence: item.evidence }, others }, exports.VERIFIER_TIMEOUT_MS);
|
|
55
|
+
return (0, verifier_1.toVerifyOutcome)(run);
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async function verifyCommand(opts) {
|
|
59
|
+
/**
|
|
60
|
+
* 🔴 THE LEASE, BECAUSE THIS WRITES `queue.json` AND A RUN HOLDS IT WHOLESALE.
|
|
61
|
+
*
|
|
62
|
+
* `verifyDrafts` patches every item it judges, and `QueueStore.persist` writes
|
|
63
|
+
* the entire in-memory map. A run that opened the queue hours ago writes its
|
|
64
|
+
* own snapshot back after its next round, so a verify pass that landed during
|
|
65
|
+
* a run had its verdicts silently reverted — every item back to `draft`, no
|
|
66
|
+
* error, and a report saying it had confirmed them.
|
|
67
|
+
*
|
|
68
|
+
* ⚠️ AT THE TOP, UNLIKE `scan`, because there is no read-only mode here: this
|
|
69
|
+
* command's entire purpose is to write verdicts. There is nothing it could
|
|
70
|
+
* usefully do while refusing to write.
|
|
71
|
+
*
|
|
72
|
+
* ⚠️ AND IT IS SAFE TO ACQUIRE UNCONDITIONALLY. A run does not call this — it
|
|
73
|
+
* builds its own verifier through `makeItemVerifier` — so there is no path on
|
|
74
|
+
* which this waits for a lease its own caller is holding.
|
|
75
|
+
*/
|
|
76
|
+
const held = await (0, queue_write_lease_1.takeQueueWriteLease)(opts.cwd, 'a verify pass');
|
|
77
|
+
try {
|
|
78
|
+
return await runVerify(opts);
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
await held.release();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async function runVerify(opts) {
|
|
85
|
+
const { cwd, config, log } = opts;
|
|
86
|
+
const stateDir = (0, node_path_1.join)(cwd, git_driver_1.STATE_DIR, 'state');
|
|
87
|
+
const ledger = new ledger_store_1.LedgerStore(stateDir, ledger_store_1.nodeLedgerFs);
|
|
88
|
+
const queue = new queue_store_1.QueueStore(stateDir, ledger_store_1.nodeLedgerFs);
|
|
89
|
+
const evidence = new evidence_cache_1.EvidenceCache(stateDir, ledger_store_1.nodeLedgerFs);
|
|
90
|
+
const git = new git_driver_1.GitDriver((0, git_driver_1.nodeGitExec)(cwd));
|
|
91
|
+
await ledger.open();
|
|
92
|
+
await queue.open();
|
|
93
|
+
await evidence.open();
|
|
94
|
+
const sync = await (0, sync_1.attachSync)(cwd, config, log);
|
|
95
|
+
const ledgerForPass = sync ? new syncing_ledger_1.SyncingLedger(ledger, sync.daemon, (0, syncing_ledger_1.logSinkErrorOnce)(log)) : ledger;
|
|
96
|
+
// LEAST PRIVILEGE. Verifying is forming a judgement about code that already
|
|
97
|
+
// exists, so this role reads and searches and cannot write. Handing it edit
|
|
98
|
+
// and write because the implementer has them would be granting authority
|
|
99
|
+
// nothing asked for.
|
|
100
|
+
/**
|
|
101
|
+
* 🔴 THE PRESET, HERE TOO. See `agentSpecFor`: this passed `config.agent`
|
|
102
|
+
* unresolved, so `looply verify` ignored `agent.provider` and started a
|
|
103
|
+
* different binary from the one `looply run` starts in the same project.
|
|
104
|
+
*/
|
|
105
|
+
const picked = (0, providers_1.agentSpecFor)(config);
|
|
106
|
+
if (!picked.ok)
|
|
107
|
+
throw new Error(picked.message);
|
|
108
|
+
const agent = (0, model_transport_1.makeMediatedAgentRunner)(cwd, 'verifier', picked.spec);
|
|
109
|
+
const report = await (0, verify_pass_1.verifyDrafts)({
|
|
110
|
+
queue,
|
|
111
|
+
ledger: ledgerForPass,
|
|
112
|
+
verify: makeItemVerifier(agent, queue),
|
|
113
|
+
cachePut: (id, head, ev) => evidence.put(id, head, ev),
|
|
114
|
+
headSha: () => git.headSha(),
|
|
115
|
+
projectId: sync?.projectId ?? config.project.id ?? 'local',
|
|
116
|
+
now: () => Date.now(),
|
|
117
|
+
onVerdict: (item, outcome) => {
|
|
118
|
+
const mark = outcome.verdict === 'confirmed' || outcome.verdict === 'amended' ? 'ready' : outcome.verdict;
|
|
119
|
+
log(`verify : ${mark.padEnd(9)} ${item.title.slice(0, 68)}`);
|
|
120
|
+
},
|
|
121
|
+
}, opts.max === undefined ? {} : { max: opts.max });
|
|
122
|
+
await sync?.stop();
|
|
123
|
+
return report;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=verify-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-cmd.js","sourceRoot":"","sources":["../src/verify-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { type Evidence, type Item } from '@looply/core';
|
|
2
|
+
import type { AnyEventInput } from './ledger-store';
|
|
3
|
+
import type { ItemPatch, QueueWriteResult } from './queue-store';
|
|
4
|
+
import type { VerifyOutcome } from './verifier';
|
|
5
|
+
/**
|
|
6
|
+
* The verification pass: draft items become pickable, or they do not.
|
|
7
|
+
*
|
|
8
|
+
* This closes the gap between the two commands the product is built around.
|
|
9
|
+
* `scan` writes items in `draft`, because a finding an agent volunteered is a
|
|
10
|
+
* claim and not yet a task. `run` picks only `ready`. Nothing joined the two,
|
|
11
|
+
* so a freshly scanned project could not be run at all: `run` refused with "no
|
|
12
|
+
* ready items" and told the user to mark one from the phone — advice that is
|
|
13
|
+
* useless on an unpaired machine and wrong even on a paired one, since marking
|
|
14
|
+
* an item ready by hand is exactly the unchecked premise verification exists to
|
|
15
|
+
* prevent.
|
|
16
|
+
*
|
|
17
|
+
* The pass is deliberately its own command as well as an automatic step. It is
|
|
18
|
+
* the cheapest agent work looply does and the easiest to reason about, so being
|
|
19
|
+
* able to run it alone — see what survives contact with the code before
|
|
20
|
+
* spending a round on anything — is worth more than the tidiness of hiding it.
|
|
21
|
+
*
|
|
22
|
+
* A pass is not a run: no round happens and nothing is committed. It mints a
|
|
23
|
+
* run-shaped id and marks the lane, exactly as a scan does, so the ledger and
|
|
24
|
+
* the app can tell the three apart without a schema change.
|
|
25
|
+
*/
|
|
26
|
+
export declare const VERIFY_LANE = "verify";
|
|
27
|
+
export interface VerifyPassQueue {
|
|
28
|
+
list(): Item[];
|
|
29
|
+
get(id: string): Item | undefined;
|
|
30
|
+
update(id: string, expectedVersion: number, patch: ItemPatch): Promise<QueueWriteResult>;
|
|
31
|
+
}
|
|
32
|
+
export interface VerifyPassDeps {
|
|
33
|
+
queue: VerifyPassQueue;
|
|
34
|
+
ledger: {
|
|
35
|
+
append(input: AnyEventInput): Promise<unknown>;
|
|
36
|
+
};
|
|
37
|
+
/** Runs the verifier for one item; prompt construction lives with the caller. */
|
|
38
|
+
verify(item: Item): Promise<VerifyOutcome>;
|
|
39
|
+
/** Refills the evidence cache so the next pick is a hit rather than a re-verify. */
|
|
40
|
+
cachePut(itemId: string, head: string, evidence: readonly Evidence[]): Promise<void>;
|
|
41
|
+
headSha(): Promise<string>;
|
|
42
|
+
projectId: string;
|
|
43
|
+
now(): number;
|
|
44
|
+
/** Progress, one call per item as its verdict lands. */
|
|
45
|
+
onVerdict?(item: Item, outcome: VerifyOutcome): void;
|
|
46
|
+
}
|
|
47
|
+
export interface VerifyPassOptions {
|
|
48
|
+
/** Cap the number of items checked; the rest stay draft. */
|
|
49
|
+
max?: number;
|
|
50
|
+
/** Check only these ids. Default: every draft, in queue order. */
|
|
51
|
+
only?: readonly string[];
|
|
52
|
+
}
|
|
53
|
+
export interface VerifyPassReport {
|
|
54
|
+
checked: number;
|
|
55
|
+
/** How many are now pickable — the only number that decides whether a run can start. */
|
|
56
|
+
ready: number;
|
|
57
|
+
byVerdict: Record<string, number>;
|
|
58
|
+
/** Items that could not be read back after the update; a bug, not a verdict. */
|
|
59
|
+
failed: number;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* What a pass would check, in queue order.
|
|
63
|
+
*
|
|
64
|
+
* Includes items stuck in `verifying`. That state is held only for the length
|
|
65
|
+
* of one verifier call, so an item still in it when a pass begins is one whose
|
|
66
|
+
* process died mid-call — killed run, closed laptop, crash. Left out, it is
|
|
67
|
+
* stranded permanently: pickable by nothing, and never looked at again. The
|
|
68
|
+
* version check on the write makes reclaiming it safe if something really is
|
|
69
|
+
* still working on it — that write loses and is reported, rather than racing.
|
|
70
|
+
*/
|
|
71
|
+
export declare function draftsToVerify(items: readonly Item[], opts?: VerifyPassOptions): Item[];
|
|
72
|
+
export declare function verifyDrafts(deps: VerifyPassDeps, opts?: VerifyPassOptions): Promise<VerifyPassReport>;
|
|
73
|
+
//# sourceMappingURL=verify-pass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-pass.d.ts","sourceRoot":"","sources":["../src/verify-pass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAO,MAAM,WAAW,WAAW,CAAC;AAKpC,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,IAAI,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC1F;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE;QAAE,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IAC3D,iFAAiF;IACjF,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3C,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,IAAI,MAAM,CAAC;IACd,wDAAwD;IACxD,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,wFAAwF;IACxF,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,IAAI,GAAE,iBAAsB,GAAG,IAAI,EAAE,CAM3F;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,cAAc,EACpB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CA2D3B"}
|