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,324 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.REJECTED_TRANSCRIPT_MAX_CHARS = exports.REJECTED_PATCH_MAX_BYTES = void 0;
|
|
4
|
+
exports.makeRejectedEvidenceStore = makeRejectedEvidenceStore;
|
|
5
|
+
exports.evidencePath = evidencePath;
|
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const gate_1 = require("./gate");
|
|
10
|
+
const git_driver_1 = require("./git-driver");
|
|
11
|
+
/**
|
|
12
|
+
* WHAT A REJECTED CANDIDATE LEAVES BEHIND.
|
|
13
|
+
*
|
|
14
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
15
|
+
* 🔴 THE PREVIOUS TRIAL DISCARDED A ROUND AND KEPT NOTHING. Looply wrote a
|
|
16
|
+
* change, ran its typecheck, saw red, and did the right thing: `git reset
|
|
17
|
+
* --hard`. What survived was `testsAdded: 8` and `outputDigest: 38faf4ea…`.
|
|
18
|
+
* Which files it wrote, what it wrote, and WHY the typecheck refused it were
|
|
19
|
+
* all gone — the ledger held a hash of the reason, and the reset destroyed the
|
|
20
|
+
* only copy of the work. A repair could not have been attempted by anyone,
|
|
21
|
+
* machine or person, because there was nothing to repair from.
|
|
22
|
+
*
|
|
23
|
+
* This module is the fix: before the tree is reset, the candidate and the
|
|
24
|
+
* verdict against it are written where the reset cannot reach.
|
|
25
|
+
*
|
|
26
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
27
|
+
* WHERE, AND WHY THERE.
|
|
28
|
+
*
|
|
29
|
+
* Under `projectStateDir` — `.looply/state/rejected/<runId>/…` for an ordinary
|
|
30
|
+
* checkout. `GitDriver.discard()` is `reset --hard` + `clean -fd -e .looply`;
|
|
31
|
+
* the state directory is untracked and explicitly spared, so it is the one
|
|
32
|
+
* place in the tree a discard leaves alone. It is also `protectedPaths` for the
|
|
33
|
+
* contained tool bridge, so a worker cannot read or edit its own evidence: what
|
|
34
|
+
* a repair attempt is told about a previous rejection reaches it through the
|
|
35
|
+
* prompt, bounded, from the runner.
|
|
36
|
+
*
|
|
37
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
38
|
+
* WHAT IS KEPT, AND WHAT IS NOT.
|
|
39
|
+
*
|
|
40
|
+
* Kept: identity (run, round, attempt, item), the base the candidate was
|
|
41
|
+
* written against, the changed-file manifest, the patch, each gate step's
|
|
42
|
+
* command, exit status and interleaved output, the implementer's structured
|
|
43
|
+
* result and a bounded transcript. Every text is bounded and every cut is
|
|
44
|
+
* announced — in the text and in a flag beside it.
|
|
45
|
+
*
|
|
46
|
+
* ⚠️ NOT KEPT: the patch of a candidate the RAILS aborted. An abort means the
|
|
47
|
+
* change touched a path the project forbade — a production config, a
|
|
48
|
+
* credential file, whatever the rails name — and retaining its content would
|
|
49
|
+
* copy exactly the thing the rail exists to keep out of the record. The
|
|
50
|
+
* manifest still names the paths; the reason says why the patch is withheld.
|
|
51
|
+
*
|
|
52
|
+
* ⚠️ AND NOTHING OUTSIDE THE ROUND'S OWN CHANGE. The patch is `git diff HEAD`
|
|
53
|
+
* of the project tree with `.looply` excluded; no operator file, no home
|
|
54
|
+
* directory, no environment reaches this. The runner hands over what it has
|
|
55
|
+
* and this writes it — it reads nothing on its own.
|
|
56
|
+
*/
|
|
57
|
+
/** Bound on the retained patch. A candidate larger than this is kept truncated and flagged. */
|
|
58
|
+
exports.REJECTED_PATCH_MAX_BYTES = 2 * 1024 * 1024;
|
|
59
|
+
/** Bound on the implementer's transcript kept beside the patch. */
|
|
60
|
+
exports.REJECTED_TRANSCRIPT_MAX_CHARS = 128 * 1024;
|
|
61
|
+
/**
|
|
62
|
+
* `gate-<step>.log`, with anything that is not a safe filename character
|
|
63
|
+
* replaced and no leading dot — a name can never be a path segment or a
|
|
64
|
+
* hidden file, whatever a run id or a step name was called.
|
|
65
|
+
*/
|
|
66
|
+
function safeName(s) {
|
|
67
|
+
return s.replace(/[^A-Za-z0-9._-]+/g, '_').replace(/^\.+/, '').slice(0, 64) || 'step';
|
|
68
|
+
}
|
|
69
|
+
function makeRejectedEvidenceStore(projectDir, deps = {}) {
|
|
70
|
+
const stateDir = deps.stateDir ?? (0, git_driver_1.projectStateDir)(projectDir);
|
|
71
|
+
const now = deps.now ?? (() => Date.now());
|
|
72
|
+
const fs = deps.fs ?? { mkdirSync: node_fs_1.mkdirSync, writeFileSync: node_fs_1.writeFileSync };
|
|
73
|
+
const read = deps.read ?? { existsSync: node_fs_1.existsSync, readdirSync: (p) => (0, node_fs_1.readdirSync)(p), readFileSync: node_fs_1.readFileSync };
|
|
74
|
+
return {
|
|
75
|
+
async retain(input) {
|
|
76
|
+
try {
|
|
77
|
+
const dir = (0, node_path_1.join)(stateDir, 'rejected', safeName(input.run.runId), `round-${String(input.round).padStart(3, '0')}-attempt-${input.attempt}`);
|
|
78
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
79
|
+
const files = [];
|
|
80
|
+
const write = (name, text) => {
|
|
81
|
+
fs.writeFileSync((0, node_path_1.join)(dir, name), text, 'utf8');
|
|
82
|
+
files.push(name);
|
|
83
|
+
};
|
|
84
|
+
let patchFile = null;
|
|
85
|
+
let patchSha256 = null;
|
|
86
|
+
if (input.patch !== null) {
|
|
87
|
+
patchFile = 'candidate.patch';
|
|
88
|
+
patchSha256 = (0, node_crypto_1.createHash)('sha256').update(input.patch.text, 'utf8').digest('hex');
|
|
89
|
+
write(patchFile, input.patch.text);
|
|
90
|
+
}
|
|
91
|
+
const executed = [];
|
|
92
|
+
if (input.gate !== undefined) {
|
|
93
|
+
for (const d of input.gate.diagnostics) {
|
|
94
|
+
const outputFile = `gate-${safeName(d.step)}.log`;
|
|
95
|
+
write(outputFile, d.output);
|
|
96
|
+
executed.push({
|
|
97
|
+
step: d.step,
|
|
98
|
+
command: d.command,
|
|
99
|
+
cwd: projectDir,
|
|
100
|
+
exitCode: d.exitCode,
|
|
101
|
+
timedOut: d.timedOut,
|
|
102
|
+
unavailable: d.unavailable,
|
|
103
|
+
classification: d.classification,
|
|
104
|
+
ms: d.ms,
|
|
105
|
+
outputFile,
|
|
106
|
+
outputChars: d.outputChars,
|
|
107
|
+
outputTruncated: d.outputTruncated,
|
|
108
|
+
streams: 'combined',
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
let transcriptFile = null;
|
|
113
|
+
let transcript = null;
|
|
114
|
+
if (input.implementer !== undefined && input.implementer.transcript !== '') {
|
|
115
|
+
const bounded = (0, gate_1.boundText)(input.implementer.transcript, exports.REJECTED_TRANSCRIPT_MAX_CHARS);
|
|
116
|
+
transcriptFile = 'implementer.txt';
|
|
117
|
+
transcript = { chars: bounded.chars, truncated: bounded.truncated };
|
|
118
|
+
write(transcriptFile, bounded.text);
|
|
119
|
+
}
|
|
120
|
+
const record = {
|
|
121
|
+
schema: 'looply.rejected-attempt/1',
|
|
122
|
+
retainedAt: new Date(now()).toISOString(),
|
|
123
|
+
run: input.run,
|
|
124
|
+
round: input.round,
|
|
125
|
+
attempt: input.attempt,
|
|
126
|
+
item: { id: input.itemId, title: input.itemTitle },
|
|
127
|
+
base: { sha: input.baseSha },
|
|
128
|
+
candidate: {
|
|
129
|
+
manifest: input.manifest,
|
|
130
|
+
patchFile,
|
|
131
|
+
patchSha256,
|
|
132
|
+
patchBytes: input.patch?.bytes ?? null,
|
|
133
|
+
patchTruncated: input.patch?.truncated ?? null,
|
|
134
|
+
patchWithheld: input.patchWithheld ?? null,
|
|
135
|
+
},
|
|
136
|
+
rejection: { stage: input.stage, why: input.why },
|
|
137
|
+
gate: input.gate === undefined
|
|
138
|
+
? null
|
|
139
|
+
: {
|
|
140
|
+
verdict: input.gate.verdict,
|
|
141
|
+
steps: input.gate.steps,
|
|
142
|
+
executed,
|
|
143
|
+
abort: input.gate.abort ?? null,
|
|
144
|
+
},
|
|
145
|
+
proof: input.proof ?? null,
|
|
146
|
+
implementer: input.implementer === undefined
|
|
147
|
+
? null
|
|
148
|
+
: {
|
|
149
|
+
result: input.implementer.result,
|
|
150
|
+
abandoned: input.implementer.abandoned,
|
|
151
|
+
transcriptFile,
|
|
152
|
+
transcriptChars: transcript?.chars ?? null,
|
|
153
|
+
transcriptTruncated: transcript?.truncated ?? null,
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
write('record.json', JSON.stringify(record, null, 2) + '\n');
|
|
157
|
+
return {
|
|
158
|
+
retained: true,
|
|
159
|
+
path: evidencePath(projectDir, dir),
|
|
160
|
+
absolutePath: dir,
|
|
161
|
+
files,
|
|
162
|
+
patchFile: patchFile === null ? null : (0, node_path_1.join)(dir, patchFile),
|
|
163
|
+
patchSha256,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
catch (e) {
|
|
167
|
+
// A finding, never a throw: the round is on its way to a discard, and
|
|
168
|
+
// an exception here would turn "evidence could not be kept" into "the
|
|
169
|
+
// run crashed with a dirty tree". The caller records the reason.
|
|
170
|
+
return { retained: false, because: `evidence could not be written: ${e.message}` };
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
async latestFor(q) {
|
|
174
|
+
try {
|
|
175
|
+
const root = (0, node_path_1.join)(stateDir, 'rejected');
|
|
176
|
+
if (!read.existsSync(root))
|
|
177
|
+
return { found: false, because: null };
|
|
178
|
+
// Every record this store kept for the item, newest first.
|
|
179
|
+
const mine = [];
|
|
180
|
+
for (const runDir of read.readdirSync(root)) {
|
|
181
|
+
let rounds;
|
|
182
|
+
try {
|
|
183
|
+
rounds = read.readdirSync((0, node_path_1.join)(root, runDir));
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
for (const name of rounds) {
|
|
189
|
+
const dir = (0, node_path_1.join)(root, runDir, name);
|
|
190
|
+
const file = (0, node_path_1.join)(dir, 'record.json');
|
|
191
|
+
if (!read.existsSync(file))
|
|
192
|
+
continue;
|
|
193
|
+
let record;
|
|
194
|
+
try {
|
|
195
|
+
record = JSON.parse(read.readFileSync(file, 'utf8'));
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
if (record?.schema !== 'looply.rejected-attempt/1' || record.item?.id !== q.itemId)
|
|
201
|
+
continue;
|
|
202
|
+
mine.push({ dir, record });
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (mine.length === 0)
|
|
206
|
+
return { found: false, because: null };
|
|
207
|
+
mine.sort((a, b) => b.record.retainedAt.localeCompare(a.record.retainedAt) || b.record.attempt - a.record.attempt);
|
|
208
|
+
const { dir, record } = mine[0];
|
|
209
|
+
const refuse = (because) => ({
|
|
210
|
+
found: false,
|
|
211
|
+
because: `the rejection retained at ${evidencePath(projectDir, dir)} was not used: ${because}`,
|
|
212
|
+
});
|
|
213
|
+
if (record.run.projectId !== q.projectId)
|
|
214
|
+
return refuse(`it belongs to project ${record.run.projectId}, not ${q.projectId}`);
|
|
215
|
+
if (record.run.lane !== q.lane)
|
|
216
|
+
return refuse(`it was written in lane ${record.run.lane}, not ${q.lane}`);
|
|
217
|
+
if (record.run.runId === q.runId) {
|
|
218
|
+
return refuse('it names the asking run, whose rejections are held in memory — a copy it did not keep is not trusted');
|
|
219
|
+
}
|
|
220
|
+
if (record.attempt !== q.attemptsSpent) {
|
|
221
|
+
return refuse(`it is attempt ${record.attempt}, but the item has spent ${q.attemptsSpent} — the item has moved on since`);
|
|
222
|
+
}
|
|
223
|
+
if (q.lastFailure === undefined || record.rejection.why !== q.lastFailure) {
|
|
224
|
+
return refuse('the reason it records is not the reason the item carries — the item has moved on since');
|
|
225
|
+
}
|
|
226
|
+
let patch = null;
|
|
227
|
+
if (record.candidate.patchFile !== null) {
|
|
228
|
+
const file = (0, node_path_1.join)(dir, record.candidate.patchFile);
|
|
229
|
+
if (!read.existsSync(file))
|
|
230
|
+
return refuse('its patch file is missing');
|
|
231
|
+
const text = read.readFileSync(file, 'utf8');
|
|
232
|
+
const sha = (0, node_crypto_1.createHash)('sha256').update(text, 'utf8').digest('hex');
|
|
233
|
+
if (sha !== record.candidate.patchSha256) {
|
|
234
|
+
return refuse('its patch does not hash to the sha256 recorded when it was kept');
|
|
235
|
+
}
|
|
236
|
+
patch = {
|
|
237
|
+
text,
|
|
238
|
+
bytes: record.candidate.patchBytes ?? Buffer.byteLength(text, 'utf8'),
|
|
239
|
+
truncated: record.candidate.patchTruncated === true,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
const diagnostics = [];
|
|
243
|
+
for (const e of record.gate?.executed ?? []) {
|
|
244
|
+
const file = (0, node_path_1.join)(dir, e.outputFile);
|
|
245
|
+
if (!read.existsSync(file))
|
|
246
|
+
return refuse(`the output of gate step ${e.step} is missing`);
|
|
247
|
+
diagnostics.push({
|
|
248
|
+
step: e.step,
|
|
249
|
+
command: e.command,
|
|
250
|
+
exitCode: e.exitCode,
|
|
251
|
+
timedOut: e.timedOut,
|
|
252
|
+
unavailable: e.unavailable,
|
|
253
|
+
ok: e.classification === 'passed',
|
|
254
|
+
ms: e.ms,
|
|
255
|
+
classification: e.classification,
|
|
256
|
+
output: read.readFileSync(file, 'utf8'),
|
|
257
|
+
outputChars: e.outputChars,
|
|
258
|
+
outputTruncated: e.outputTruncated,
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
let transcript = '';
|
|
262
|
+
const transcriptFile = record.implementer?.transcriptFile ?? null;
|
|
263
|
+
if (transcriptFile !== null && read.existsSync((0, node_path_1.join)(dir, transcriptFile))) {
|
|
264
|
+
transcript = read.readFileSync((0, node_path_1.join)(dir, transcriptFile), 'utf8');
|
|
265
|
+
}
|
|
266
|
+
const input = {
|
|
267
|
+
run: record.run,
|
|
268
|
+
round: record.round,
|
|
269
|
+
attempt: record.attempt,
|
|
270
|
+
itemId: record.item.id,
|
|
271
|
+
itemTitle: record.item.title,
|
|
272
|
+
baseSha: record.base.sha,
|
|
273
|
+
why: record.rejection.why,
|
|
274
|
+
stage: record.rejection.stage,
|
|
275
|
+
...(record.gate === null
|
|
276
|
+
? {}
|
|
277
|
+
: {
|
|
278
|
+
gate: {
|
|
279
|
+
verdict: record.gate.verdict,
|
|
280
|
+
steps: record.gate.steps,
|
|
281
|
+
diagnostics,
|
|
282
|
+
...(record.gate.abort === null ? {} : { abort: record.gate.abort }),
|
|
283
|
+
},
|
|
284
|
+
}),
|
|
285
|
+
...(record.proof === null ? {} : { proof: record.proof }),
|
|
286
|
+
...(record.implementer === null
|
|
287
|
+
? {}
|
|
288
|
+
: { implementer: { result: record.implementer.result, abandoned: record.implementer.abandoned, transcript } }),
|
|
289
|
+
manifest: record.candidate.manifest,
|
|
290
|
+
patch,
|
|
291
|
+
...(record.candidate.patchWithheld === null ? {} : { patchWithheld: record.candidate.patchWithheld }),
|
|
292
|
+
};
|
|
293
|
+
return {
|
|
294
|
+
found: true,
|
|
295
|
+
input,
|
|
296
|
+
outcome: {
|
|
297
|
+
retained: true,
|
|
298
|
+
path: evidencePath(projectDir, dir),
|
|
299
|
+
absolutePath: dir,
|
|
300
|
+
files: read.readdirSync(dir),
|
|
301
|
+
patchFile: record.candidate.patchFile === null ? null : (0, node_path_1.join)(dir, record.candidate.patchFile),
|
|
302
|
+
patchSha256: record.candidate.patchSha256,
|
|
303
|
+
},
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
catch (e) {
|
|
307
|
+
// A finding, never a throw — the attempt goes ahead briefed from `lastFailure`.
|
|
308
|
+
return { found: false, because: `retained evidence could not be read: ${e.message}` };
|
|
309
|
+
}
|
|
310
|
+
},
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* The path a report prints: relative to the project when the state directory
|
|
315
|
+
* lives inside it, absolute when it does not (a linked worktree keeps its state
|
|
316
|
+
* under the daemon's home). Forward slashes either way — it is a pointer for a
|
|
317
|
+
* person and for the app, not a path for a shell.
|
|
318
|
+
*/
|
|
319
|
+
function evidencePath(projectDir, dir) {
|
|
320
|
+
const rel = (0, node_path_1.relative)(projectDir, dir);
|
|
321
|
+
const inside = rel !== '' && !rel.startsWith('..') && !(0, node_path_1.isAbsolute)(rel);
|
|
322
|
+
return (inside ? rel : dir).split(node_path_1.sep).join('/');
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=rejected-evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rejected-evidence.js","sourceRoot":"","sources":["../src/rejected-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type RunReport } from '@looply/core';
|
|
2
|
+
import { type ToolCallSummary } from './tool-call-record';
|
|
3
|
+
/**
|
|
4
|
+
* `looply report` — render core's `runReport` from the local ledger
|
|
5
|
+
* (`.looply/state/events.jsonl`). The fold lives in core so this screen and the
|
|
6
|
+
* app's run report can never disagree; this module only decides what the text
|
|
7
|
+
* looks like.
|
|
8
|
+
*
|
|
9
|
+
* Alerts print FIRST and loudly. That ordering is the whole point of the
|
|
10
|
+
* command: the prover-never-rejects alert (DESIGN §12 case 16) existed in the
|
|
11
|
+
* report data while nothing rendered it, and an alert nothing renders is not
|
|
12
|
+
* an alert — the previous harness went 166/166 with the signal sitting right
|
|
13
|
+
* there.
|
|
14
|
+
*
|
|
15
|
+
* Pure text-in, text-out; the filesystem stays in `bin.ts`.
|
|
16
|
+
*/
|
|
17
|
+
export interface RenderedReport {
|
|
18
|
+
out: string;
|
|
19
|
+
code: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @param fromNewerBuild lines that ARE events, naming a kind this build has no
|
|
23
|
+
* name for. Defaulted so the shape of this call does not change for a caller
|
|
24
|
+
* that has nothing to say about them.
|
|
25
|
+
*/
|
|
26
|
+
export declare function renderRunReport(report: RunReport, badLines: readonly number[], fromNewerBuild?: readonly {
|
|
27
|
+
at: number;
|
|
28
|
+
named: string;
|
|
29
|
+
}[]): string;
|
|
30
|
+
export declare function toolLines(summary: ToolCallSummary | null): string[];
|
|
31
|
+
export declare function renderReport(text: string | null, toolText?: string | null): RenderedReport;
|
|
32
|
+
//# sourceMappingURL=report-cmd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-cmd.d.ts","sourceRoot":"","sources":["../src/report-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC/G,OAAO,EAAsC,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE9F;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAyBD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,cAAc,GAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAO,GAC5D,MAAM,CAuER;AA+BD,wBAAgB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,MAAM,EAAE,CA4BnE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,GAAE,MAAM,GAAG,IAAW,GAAG,cAAc,CAqChG"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderRunReport = renderRunReport;
|
|
4
|
+
exports.toolLines = toolLines;
|
|
5
|
+
exports.renderReport = renderReport;
|
|
6
|
+
const core_1 = require("@looply/core");
|
|
7
|
+
const tool_call_record_1 = require("./tool-call-record");
|
|
8
|
+
function fmtElapsed(ms) {
|
|
9
|
+
const min = Math.round(ms / 60_000);
|
|
10
|
+
if (min < 1)
|
|
11
|
+
return '<1m';
|
|
12
|
+
if (min < 60)
|
|
13
|
+
return `${min}m`;
|
|
14
|
+
return `${Math.floor(min / 60)}h ${min % 60}m`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* One round, two spaces in.
|
|
18
|
+
*
|
|
19
|
+
* 🔴 THE WORDING MOVED TO CORE IN M8-7 AND IS NO LONGER WRITTEN TWICE.
|
|
20
|
+
* `goal-view.ts` carried a second copy under the comment "worded as `looply
|
|
21
|
+
* report` words it" — a promise kept by hand, which is the drift
|
|
22
|
+
* `round-notes.ts` names: "Two components composing English from the same data
|
|
23
|
+
* is a drift nobody notices; two components reading the same fields is not."
|
|
24
|
+
* The indentation is the only thing the two readers genuinely differ about, so
|
|
25
|
+
* it is the only thing left here.
|
|
26
|
+
*/
|
|
27
|
+
function roundLines(r) {
|
|
28
|
+
const { head, details } = (0, core_1.wordRound)(r);
|
|
29
|
+
return [` ${head}`, ...details.map((d) => ` ${d}`)];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* @param fromNewerBuild lines that ARE events, naming a kind this build has no
|
|
33
|
+
* name for. Defaulted so the shape of this call does not change for a caller
|
|
34
|
+
* that has nothing to say about them.
|
|
35
|
+
*/
|
|
36
|
+
function renderRunReport(report, badLines, fromNewerBuild = []) {
|
|
37
|
+
const lines = [];
|
|
38
|
+
// Alerts before everything, one loud line each — never appended at the
|
|
39
|
+
// bottom where a long round list scrolls them off the screen.
|
|
40
|
+
for (const a of report.alerts)
|
|
41
|
+
lines.push(`ALERT : ${a.message}`);
|
|
42
|
+
if (report.alerts.length)
|
|
43
|
+
lines.push('');
|
|
44
|
+
if (badLines.length) {
|
|
45
|
+
lines.push(`warning : skipped ${badLines.length} unreadable ledger line(s): ${badLines.join(', ')}`);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* SAID APART FROM DAMAGE, because they send a person somewhere else entirely.
|
|
49
|
+
*
|
|
50
|
+
* An unreadable line is torn — a process died mid-append — and there may be
|
|
51
|
+
* something to repair. A line from a newer build is intact, correct, and
|
|
52
|
+
* simply names an event kind this build has no name for; `EVENT_KINDS` is
|
|
53
|
+
* closed on both sides and `run.started` says why ("a lockstep release of
|
|
54
|
+
* three packages"). Telling somebody that is damage sends them looking for
|
|
55
|
+
* corruption in a healthy file.
|
|
56
|
+
*
|
|
57
|
+
* The kinds are NAMED, and named once each: the useful fact is which kind is
|
|
58
|
+
* unknown here, not how many lines carried it.
|
|
59
|
+
*/
|
|
60
|
+
if (fromNewerBuild.length) {
|
|
61
|
+
const kinds = [...new Set(fromNewerBuild.map((l) => l.named))].sort();
|
|
62
|
+
lines.push(`warning : skipped ${fromNewerBuild.length} ledger line(s) written by a newer build — ` +
|
|
63
|
+
`this one has no name for ${kinds.join(', ')} (line${fromNewerBuild.length === 1 ? '' : 's'} ` +
|
|
64
|
+
`${fromNewerBuild.map((l) => l.at).join(', ')})`);
|
|
65
|
+
}
|
|
66
|
+
if (report.runId === null) {
|
|
67
|
+
lines.push('report : no run recorded in the ledger yet');
|
|
68
|
+
return lines.join('\n') + '\n';
|
|
69
|
+
}
|
|
70
|
+
lines.push(`run : ${report.runId} — ${report.live ? 'live' : `ended (${report.stopReason ?? 'unknown'})`}`);
|
|
71
|
+
if (report.elapsedMs !== null)
|
|
72
|
+
lines.push(`elapsed : ${fmtElapsed(report.elapsedMs)}`);
|
|
73
|
+
const t = report.totals;
|
|
74
|
+
lines.push(`tallies : ${t.rounds} rounds — ${t.committed} committed · ${t.discarded} discarded · ${t.abandoned} abandoned`);
|
|
75
|
+
// "none ran" is distinct from a 0% rate on purpose: proof disabled must not
|
|
76
|
+
// read as proof passing everything (see proofRejectionRate in core).
|
|
77
|
+
if (report.proofRejectionRate === null) {
|
|
78
|
+
lines.push('proof : none ran');
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
lines.push(`proof : ${report.proofVerdicts} verdicts · ${report.proofRejected} rejected ` +
|
|
82
|
+
`(${Math.round(report.proofRejectionRate * 100)}%)`);
|
|
83
|
+
}
|
|
84
|
+
lines.push(`tests : ${report.testsAdded} added`);
|
|
85
|
+
if (report.rounds.length) {
|
|
86
|
+
/**
|
|
87
|
+
* ⚠️ WHAT A ROUND KEEPS, SAID ONCE (the audit’s E-06). Under every kept
|
|
88
|
+
* round it would be noise on the common case; nowhere at all leaves an
|
|
89
|
+
* absent evidence line reading as a hole rather than as a decision.
|
|
90
|
+
*/
|
|
91
|
+
lines.push(`rounds : ${core_1.KEPT_LEGEND}`);
|
|
92
|
+
for (const r of report.rounds)
|
|
93
|
+
lines.push(...roundLines(r));
|
|
94
|
+
}
|
|
95
|
+
if (report.blocked.length) {
|
|
96
|
+
lines.push('blocked :');
|
|
97
|
+
for (const b of report.blocked)
|
|
98
|
+
lines.push(` - ${b.title ?? b.itemId} — ${b.reason}`);
|
|
99
|
+
}
|
|
100
|
+
return lines.join('\n') + '\n';
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* What the bridge served, in one line, and where to read the rest.
|
|
104
|
+
*
|
|
105
|
+
* WHY THIS LINE EXISTS. `ToolBridge.spent()` had no consumer for most of its
|
|
106
|
+
* life — its own comment said "for tests and for logging" and nothing logged
|
|
107
|
+
* it, which is how the capability audit found it (E-05). A record with no
|
|
108
|
+
* reader is the same defect this command exists to prevent, so the file gets a
|
|
109
|
+
* line here rather than waiting for someone to know it is there.
|
|
110
|
+
*
|
|
111
|
+
* ⚠️ E-05 IS CLOSED: `mcp-main.ts` calls `recorder.total(bridge.spent())` when
|
|
112
|
+
* the pipe closes, which is the one moment that knows an invocation is over.
|
|
113
|
+
* The reason for this line survives that fix — a reader still has to be told
|
|
114
|
+
* where the file is — so the sentence was rewritten rather than deleted.
|
|
115
|
+
*
|
|
116
|
+
* 🔴 AND THE SENTENCE IT REPLACES WAS FALSE FOR 69 COMMITS. It said `spent()`
|
|
117
|
+
* "HAS HAD NO CONSUMER SINCE IT WAS WRITTEN" while `mcp-main` was already
|
|
118
|
+
* calling it — in the docblock of the command whose whole subject is that an
|
|
119
|
+
* unread record is a defect. The comment landed 4 commits before the consumer
|
|
120
|
+
* and nobody came back for it (M9-1 found it, M9-4 fixed it).
|
|
121
|
+
*
|
|
122
|
+
* The most recent refusal is named because it is almost always the one being
|
|
123
|
+
* looked for: a person reads this after a model said a tool failed.
|
|
124
|
+
*/
|
|
125
|
+
function bytes(n) {
|
|
126
|
+
if (n >= 1024 * 1024)
|
|
127
|
+
return `${(n / (1024 * 1024)).toFixed(1)} MB`;
|
|
128
|
+
if (n >= 1024)
|
|
129
|
+
return `${Math.round(n / 1024)} KB`;
|
|
130
|
+
return `${n} B`;
|
|
131
|
+
}
|
|
132
|
+
function toolLines(summary) {
|
|
133
|
+
if (summary === null)
|
|
134
|
+
return [];
|
|
135
|
+
const lines = [];
|
|
136
|
+
const bits = [`${summary.calls} call${summary.calls === 1 ? '' : 's'}`];
|
|
137
|
+
if (summary.refused > 0)
|
|
138
|
+
bits.push(`${summary.refused} refused`);
|
|
139
|
+
if (summary.badLines > 0)
|
|
140
|
+
bits.push(`${summary.badLines} unreadable line(s)`);
|
|
141
|
+
if (summary.capped)
|
|
142
|
+
bits.push('record full — later calls are not in it');
|
|
143
|
+
lines.push(`tools : ${bits.join(' · ')} (.looply/state/${tool_call_record_1.TOOL_CALL_FILE})`);
|
|
144
|
+
/**
|
|
145
|
+
* What the bridge served those calls, summed over the invocations that said.
|
|
146
|
+
*
|
|
147
|
+
* The closest figure this system has to the audit's "repeated-context bytes",
|
|
148
|
+
* and the first reading of `ToolBridge.spent()` there has ever been. Absent
|
|
149
|
+
* for a record written before invocation totals existed, and then nothing is
|
|
150
|
+
* printed rather than a zero standing in for silence.
|
|
151
|
+
*/
|
|
152
|
+
if (summary.served !== null) {
|
|
153
|
+
const s = summary.served;
|
|
154
|
+
lines.push(` served: ${s.invocations} invocation${s.invocations === 1 ? '' : 's'} · ` +
|
|
155
|
+
`${s.calls} call${s.calls === 1 ? '' : 's'} · ${bytes(s.bytesRead)} read · ${bytes(s.bytesWritten)} written`);
|
|
156
|
+
}
|
|
157
|
+
if (summary.lastRefusal !== null) {
|
|
158
|
+
const r = summary.lastRefusal;
|
|
159
|
+
lines.push(` last refusal: ${r.tool} — ${r.code}${r.because ? `: ${r.because}` : ''}`);
|
|
160
|
+
}
|
|
161
|
+
return lines;
|
|
162
|
+
}
|
|
163
|
+
function renderReport(text, toolText = null) {
|
|
164
|
+
if (text === null) {
|
|
165
|
+
return {
|
|
166
|
+
out: 'report : no events.jsonl yet — nothing has run here (try `looply doctor`, then `looply run`)\n',
|
|
167
|
+
code: 1,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
const { events, badLines, fromNewerBuild } = (0, core_1.parseLines)(text);
|
|
171
|
+
if (events.length === 0 && badLines.length + fromNewerBuild.length > 0) {
|
|
172
|
+
/**
|
|
173
|
+
* Nothing readable here; refuse rather than render an empty report that
|
|
174
|
+
* reads as "nothing happened".
|
|
175
|
+
*
|
|
176
|
+
* ⚠️ THE CONDITION IS UNCHANGED — it fires on exactly the lines it fired on
|
|
177
|
+
* before, because `badLines` used to carry both kinds and now carries one.
|
|
178
|
+
* What changed is the SENTENCE. "This is not our ledger" was the wrong
|
|
179
|
+
* conclusion for a file whose every line is a well-formed event from a
|
|
180
|
+
* build that knows more kinds than this one: it IS our ledger, and the
|
|
181
|
+
* answer is a newer looply, not a repair.
|
|
182
|
+
*/
|
|
183
|
+
const newer = fromNewerBuild.length > 0 && badLines.length === 0;
|
|
184
|
+
const kinds = [...new Set(fromNewerBuild.map((l) => l.named))].sort().join(', ');
|
|
185
|
+
return {
|
|
186
|
+
out: newer
|
|
187
|
+
? `report : every line in events.jsonl was written by a newer build than this one — ` +
|
|
188
|
+
`it has no name for ${kinds}, so there is nothing here it can read\n`
|
|
189
|
+
: 'report : events.jsonl holds no readable events — refusing to guess\n',
|
|
190
|
+
code: 1,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
// File order, not sortEvents: the local ledger is append-ordered by our own
|
|
194
|
+
// writer, and that order is what makes the last `run.started` the last run.
|
|
195
|
+
const body = renderRunReport((0, core_1.runReport)(events), badLines, fromNewerBuild);
|
|
196
|
+
const tools = toolLines((0, tool_call_record_1.summariseToolCalls)(toolText));
|
|
197
|
+
// Appended, never interleaved: the report's own shape is what a person and
|
|
198
|
+
// three specs already read, and with no record the output is byte-identical.
|
|
199
|
+
return { out: tools.length === 0 ? body : `${body}${tools.join('\n')}\n`, code: 0 };
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=report-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-cmd.js","sourceRoot":"","sources":["../src/report-cmd.ts"],"names":[],"mappings":"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"}
|