looply-cli 0.0.0-stage → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +137 -3
- package/dist/.src-hash +1 -0
- package/dist/acceptance-observe.d.ts +108 -0
- package/dist/acceptance-observe.d.ts.map +1 -0
- package/dist/acceptance-observe.js +152 -0
- package/dist/acceptance-observe.js.map +1 -0
- package/dist/agent-cmd.d.ts +131 -0
- package/dist/agent-cmd.d.ts.map +1 -0
- package/dist/agent-cmd.js +154 -0
- package/dist/agent-cmd.js.map +1 -0
- package/dist/agent-contained.d.ts +114 -0
- package/dist/agent-contained.d.ts.map +1 -0
- package/dist/agent-contained.js +292 -0
- package/dist/agent-contained.js.map +1 -0
- package/dist/agent-driver.d.ts +130 -0
- package/dist/agent-driver.d.ts.map +1 -0
- package/dist/agent-driver.js +170 -0
- package/dist/agent-driver.js.map +1 -0
- package/dist/agent-envelope.d.ts +94 -0
- package/dist/agent-envelope.d.ts.map +1 -0
- package/dist/agent-envelope.js +214 -0
- package/dist/agent-envelope.js.map +1 -0
- package/dist/agent-exec.d.ts +182 -0
- package/dist/agent-exec.d.ts.map +1 -0
- package/dist/agent-exec.js +125 -0
- package/dist/agent-exec.js.map +1 -0
- package/dist/agent-runtime.d.ts +23 -0
- package/dist/agent-runtime.d.ts.map +1 -0
- package/dist/agent-runtime.js +143 -0
- package/dist/agent-runtime.js.map +1 -0
- package/dist/approval-gate-read.d.ts +66 -0
- package/dist/approval-gate-read.d.ts.map +1 -0
- package/dist/approval-gate-read.js +138 -0
- package/dist/approval-gate-read.js.map +1 -0
- package/dist/approval-resolution.d.ts +87 -0
- package/dist/approval-resolution.d.ts.map +1 -0
- package/dist/approval-resolution.js +100 -0
- package/dist/approval-resolution.js.map +1 -0
- package/dist/approval-resumes.d.ts +102 -0
- package/dist/approval-resumes.d.ts.map +1 -0
- package/dist/approval-resumes.js +167 -0
- package/dist/approval-resumes.js.map +1 -0
- package/dist/ask-brain.d.ts +167 -0
- package/dist/ask-brain.d.ts.map +1 -0
- package/dist/ask-brain.js +355 -0
- package/dist/ask-brain.js.map +1 -0
- package/dist/autonomy-authority.d.ts +80 -0
- package/dist/autonomy-authority.d.ts.map +1 -0
- package/dist/autonomy-authority.js +82 -0
- package/dist/autonomy-authority.js.map +1 -0
- package/dist/autonomy-controller.d.ts +321 -0
- package/dist/autonomy-controller.d.ts.map +1 -0
- package/dist/autonomy-controller.js +517 -0
- package/dist/autonomy-controller.js.map +1 -0
- package/dist/autonomy-store.d.ts +327 -0
- package/dist/autonomy-store.d.ts.map +1 -0
- package/dist/autonomy-store.js +581 -0
- package/dist/autonomy-store.js.map +1 -0
- package/dist/autonomy-tick.d.ts +257 -0
- package/dist/autonomy-tick.d.ts.map +1 -0
- package/dist/autonomy-tick.js +616 -0
- package/dist/autonomy-tick.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +2727 -0
- package/dist/bin.js.map +1 -0
- package/dist/brain-advice.d.ts +21 -0
- package/dist/brain-advice.d.ts.map +1 -0
- package/dist/brain-advice.js +51 -0
- package/dist/brain-advice.js.map +1 -0
- package/dist/candidate-replay-runtime.d.ts +125 -0
- package/dist/candidate-replay-runtime.d.ts.map +1 -0
- package/dist/candidate-replay-runtime.js +188 -0
- package/dist/candidate-replay-runtime.js.map +1 -0
- package/dist/checkout-carry.d.ts +76 -0
- package/dist/checkout-carry.d.ts.map +1 -0
- package/dist/checkout-carry.js +125 -0
- package/dist/checkout-carry.js.map +1 -0
- package/dist/citation-readers.d.ts +26 -0
- package/dist/citation-readers.d.ts.map +1 -0
- package/dist/citation-readers.js +102 -0
- package/dist/citation-readers.js.map +1 -0
- package/dist/command-receipts.d.ts +79 -0
- package/dist/command-receipts.d.ts.map +1 -0
- package/dist/command-receipts.js +143 -0
- package/dist/command-receipts.js.map +1 -0
- package/dist/command-runner.d.ts +32 -0
- package/dist/command-runner.d.ts.map +1 -0
- package/dist/command-runner.js +108 -0
- package/dist/command-runner.js.map +1 -0
- package/dist/compatible-sets.d.ts +67 -0
- package/dist/compatible-sets.d.ts.map +1 -0
- package/dist/compatible-sets.js +81 -0
- package/dist/compatible-sets.js.map +1 -0
- package/dist/compile-check.d.ts +31 -0
- package/dist/compile-check.d.ts.map +1 -0
- package/dist/compile-check.js +34 -0
- package/dist/compile-check.js.map +1 -0
- package/dist/compile-store.d.ts +16 -0
- package/dist/compile-store.d.ts.map +1 -0
- package/dist/compile-store.js +21 -0
- package/dist/compile-store.js.map +1 -0
- package/dist/completion.d.ts +106 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +131 -0
- package/dist/completion.js.map +1 -0
- package/dist/config.d.ts +549 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +763 -0
- package/dist/config.js.map +1 -0
- package/dist/control-file.d.ts +142 -0
- package/dist/control-file.d.ts.map +1 -0
- package/dist/control-file.js +144 -0
- package/dist/control-file.js.map +1 -0
- package/dist/coordinator-state.d.ts +131 -0
- package/dist/coordinator-state.d.ts.map +1 -0
- package/dist/coordinator-state.js +380 -0
- package/dist/coordinator-state.js.map +1 -0
- package/dist/coordinator.d.ts +95 -0
- package/dist/coordinator.d.ts.map +1 -0
- package/dist/coordinator.js +97 -0
- package/dist/coordinator.js.map +1 -0
- package/dist/cursor-store.d.ts +53 -0
- package/dist/cursor-store.d.ts.map +1 -0
- package/dist/cursor-store.js +98 -0
- package/dist/cursor-store.js.map +1 -0
- package/dist/daemon-cmd.d.ts +239 -0
- package/dist/daemon-cmd.d.ts.map +1 -0
- package/dist/daemon-cmd.js +1751 -0
- package/dist/daemon-cmd.js.map +1 -0
- package/dist/daemon-lock.d.ts +140 -0
- package/dist/daemon-lock.d.ts.map +1 -0
- package/dist/daemon-lock.js +352 -0
- package/dist/daemon-lock.js.map +1 -0
- package/dist/daemon-recovery.d.ts +78 -0
- package/dist/daemon-recovery.d.ts.map +1 -0
- package/dist/daemon-recovery.js +161 -0
- package/dist/daemon-recovery.js.map +1 -0
- package/dist/daemon.d.ts +368 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +601 -0
- package/dist/daemon.js.map +1 -0
- package/dist/declared-response-shape.d.ts +93 -0
- package/dist/declared-response-shape.d.ts.map +1 -0
- package/dist/declared-response-shape.js +200 -0
- package/dist/declared-response-shape.js.map +1 -0
- package/dist/declared-surfaces.d.ts +16 -0
- package/dist/declared-surfaces.d.ts.map +1 -0
- package/dist/declared-surfaces.js +19 -0
- package/dist/declared-surfaces.js.map +1 -0
- package/dist/depends-review.d.ts +113 -0
- package/dist/depends-review.d.ts.map +1 -0
- package/dist/depends-review.js +110 -0
- package/dist/depends-review.js.map +1 -0
- package/dist/doctor.d.ts +91 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +71 -0
- package/dist/doctor.js.map +1 -0
- package/dist/edge-approval.d.ts +105 -0
- package/dist/edge-approval.d.ts.map +1 -0
- package/dist/edge-approval.js +100 -0
- package/dist/edge-approval.js.map +1 -0
- package/dist/evidence-cache.d.ts +45 -0
- package/dist/evidence-cache.d.ts.map +1 -0
- package/dist/evidence-cache.js +90 -0
- package/dist/evidence-cache.js.map +1 -0
- package/dist/evidence-cmd.d.ts +133 -0
- package/dist/evidence-cmd.d.ts.map +1 -0
- package/dist/evidence-cmd.js +347 -0
- package/dist/evidence-cmd.js.map +1 -0
- package/dist/evidence-facts.d.ts +40 -0
- package/dist/evidence-facts.d.ts.map +1 -0
- package/dist/evidence-facts.js +114 -0
- package/dist/evidence-facts.js.map +1 -0
- package/dist/exclusive-lock.d.ts +52 -0
- package/dist/exclusive-lock.d.ts.map +1 -0
- package/dist/exclusive-lock.js +150 -0
- package/dist/exclusive-lock.js.map +1 -0
- package/dist/exec-domains.d.ts +140 -0
- package/dist/exec-domains.d.ts.map +1 -0
- package/dist/exec-domains.js +287 -0
- package/dist/exec-domains.js.map +1 -0
- package/dist/exemption-store.d.ts +197 -0
- package/dist/exemption-store.d.ts.map +1 -0
- package/dist/exemption-store.js +266 -0
- package/dist/exemption-store.js.map +1 -0
- package/dist/explicit-start-gate.d.ts +96 -0
- package/dist/explicit-start-gate.d.ts.map +1 -0
- package/dist/explicit-start-gate.js +103 -0
- package/dist/explicit-start-gate.js.map +1 -0
- package/dist/fs-trouble.d.ts +70 -0
- package/dist/fs-trouble.d.ts.map +1 -0
- package/dist/fs-trouble.js +98 -0
- package/dist/fs-trouble.js.map +1 -0
- package/dist/gate.d.ts +278 -0
- package/dist/gate.d.ts.map +1 -0
- package/dist/gate.js +278 -0
- package/dist/gate.js.map +1 -0
- package/dist/git-driver.d.ts +519 -0
- package/dist/git-driver.d.ts.map +1 -0
- package/dist/git-driver.js +900 -0
- package/dist/git-driver.js.map +1 -0
- package/dist/git-push-executor.d.ts +41 -0
- package/dist/git-push-executor.d.ts.map +1 -0
- package/dist/git-push-executor.js +142 -0
- package/dist/git-push-executor.js.map +1 -0
- package/dist/glob.d.ts +26 -0
- package/dist/glob.d.ts.map +1 -0
- package/dist/glob.js +93 -0
- package/dist/glob.js.map +1 -0
- package/dist/goal-adaptive.d.ts +295 -0
- package/dist/goal-adaptive.d.ts.map +1 -0
- package/dist/goal-adaptive.js +393 -0
- package/dist/goal-adaptive.js.map +1 -0
- package/dist/goal-compile.d.ts +342 -0
- package/dist/goal-compile.d.ts.map +1 -0
- package/dist/goal-compile.js +444 -0
- package/dist/goal-compile.js.map +1 -0
- package/dist/goal-depends-executor.d.ts +55 -0
- package/dist/goal-depends-executor.d.ts.map +1 -0
- package/dist/goal-depends-executor.js +202 -0
- package/dist/goal-depends-executor.js.map +1 -0
- package/dist/goal-execution-evidence.d.ts +135 -0
- package/dist/goal-execution-evidence.d.ts.map +1 -0
- package/dist/goal-execution-evidence.js +159 -0
- package/dist/goal-execution-evidence.js.map +1 -0
- package/dist/goal-gap.d.ts +140 -0
- package/dist/goal-gap.d.ts.map +1 -0
- package/dist/goal-gap.js +197 -0
- package/dist/goal-gap.js.map +1 -0
- package/dist/goal-met-target.d.ts +98 -0
- package/dist/goal-met-target.d.ts.map +1 -0
- package/dist/goal-met-target.js +92 -0
- package/dist/goal-met-target.js.map +1 -0
- package/dist/goal-ownership.d.ts +416 -0
- package/dist/goal-ownership.d.ts.map +1 -0
- package/dist/goal-ownership.js +576 -0
- package/dist/goal-ownership.js.map +1 -0
- package/dist/goal-runs.d.ts +82 -0
- package/dist/goal-runs.d.ts.map +1 -0
- package/dist/goal-runs.js +120 -0
- package/dist/goal-runs.js.map +1 -0
- package/dist/goal-store.d.ts +146 -0
- package/dist/goal-store.d.ts.map +1 -0
- package/dist/goal-store.js +294 -0
- package/dist/goal-store.js.map +1 -0
- package/dist/goal-view.d.ts +156 -0
- package/dist/goal-view.d.ts.map +1 -0
- package/dist/goal-view.js +499 -0
- package/dist/goal-view.js.map +1 -0
- package/dist/governed-approvals.d.ts +152 -0
- package/dist/governed-approvals.d.ts.map +1 -0
- package/dist/governed-approvals.js +246 -0
- package/dist/governed-approvals.js.map +1 -0
- package/dist/governed-broker.d.ts +169 -0
- package/dist/governed-broker.d.ts.map +1 -0
- package/dist/governed-broker.js +196 -0
- package/dist/governed-broker.js.map +1 -0
- package/dist/governed-run.d.ts +220 -0
- package/dist/governed-run.d.ts.map +1 -0
- package/dist/governed-run.js +406 -0
- package/dist/governed-run.js.map +1 -0
- package/dist/grant-reconcile.d.ts +63 -0
- package/dist/grant-reconcile.d.ts.map +1 -0
- package/dist/grant-reconcile.js +121 -0
- package/dist/grant-reconcile.js.map +1 -0
- package/dist/index-for-head.d.ts +56 -0
- package/dist/index-for-head.d.ts.map +1 -0
- package/dist/index-for-head.js +103 -0
- package/dist/index-for-head.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/init-detect.d.ts +39 -0
- package/dist/init-detect.d.ts.map +1 -0
- package/dist/init-detect.js +188 -0
- package/dist/init-detect.js.map +1 -0
- package/dist/integration-deps.d.ts +62 -0
- package/dist/integration-deps.d.ts.map +1 -0
- package/dist/integration-deps.js +251 -0
- package/dist/integration-deps.js.map +1 -0
- package/dist/integration-runtime.d.ts +458 -0
- package/dist/integration-runtime.d.ts.map +1 -0
- package/dist/integration-runtime.js +681 -0
- package/dist/integration-runtime.js.map +1 -0
- package/dist/integration.d.ts +45 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +87 -0
- package/dist/integration.js.map +1 -0
- package/dist/integrator.d.ts +84 -0
- package/dist/integrator.d.ts.map +1 -0
- package/dist/integrator.js +193 -0
- package/dist/integrator.js.map +1 -0
- package/dist/lane-claims.d.ts +174 -0
- package/dist/lane-claims.d.ts.map +1 -0
- package/dist/lane-claims.js +218 -0
- package/dist/lane-claims.js.map +1 -0
- package/dist/lane-coverage.d.ts +87 -0
- package/dist/lane-coverage.d.ts.map +1 -0
- package/dist/lane-coverage.js +129 -0
- package/dist/lane-coverage.js.map +1 -0
- package/dist/ledger-replay.d.ts +115 -0
- package/dist/ledger-replay.d.ts.map +1 -0
- package/dist/ledger-replay.js +155 -0
- package/dist/ledger-replay.js.map +1 -0
- package/dist/ledger-store.d.ts +68 -0
- package/dist/ledger-store.d.ts.map +1 -0
- package/dist/ledger-store.js +111 -0
- package/dist/ledger-store.js.map +1 -0
- package/dist/loop-safety-observer.d.ts +132 -0
- package/dist/loop-safety-observer.d.ts.map +1 -0
- package/dist/loop-safety-observer.js +76 -0
- package/dist/loop-safety-observer.js.map +1 -0
- package/dist/loop-safety-store.d.ts +339 -0
- package/dist/loop-safety-store.d.ts.map +1 -0
- package/dist/loop-safety-store.js +800 -0
- package/dist/loop-safety-store.js.map +1 -0
- package/dist/machine-store.d.ts +54 -0
- package/dist/machine-store.d.ts.map +1 -0
- package/dist/machine-store.js +149 -0
- package/dist/machine-store.js.map +1 -0
- package/dist/mcp-main.d.ts +2 -0
- package/dist/mcp-main.d.ts.map +1 -0
- package/dist/mcp-main.js +116 -0
- package/dist/mcp-main.js.map +1 -0
- package/dist/mcp-server.d.ts +72 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +259 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/model-routing.d.ts +75 -0
- package/dist/model-routing.d.ts.map +1 -0
- package/dist/model-routing.js +108 -0
- package/dist/model-routing.js.map +1 -0
- package/dist/model-transport.d.ts +188 -0
- package/dist/model-transport.d.ts.map +1 -0
- package/dist/model-transport.js +625 -0
- package/dist/model-transport.js.map +1 -0
- package/dist/notify-cadence.d.ts +55 -0
- package/dist/notify-cadence.d.ts.map +1 -0
- package/dist/notify-cadence.js +68 -0
- package/dist/notify-cadence.js.map +1 -0
- package/dist/notify-channel.d.ts +69 -0
- package/dist/notify-channel.d.ts.map +1 -0
- package/dist/notify-channel.js +151 -0
- package/dist/notify-channel.js.map +1 -0
- package/dist/notify.d.ts +71 -0
- package/dist/notify.d.ts.map +1 -0
- package/dist/notify.js +125 -0
- package/dist/notify.js.map +1 -0
- package/dist/observation-inventory.d.ts +65 -0
- package/dist/observation-inventory.d.ts.map +1 -0
- package/dist/observation-inventory.js +139 -0
- package/dist/observation-inventory.js.map +1 -0
- package/dist/owned-children.d.ts +45 -0
- package/dist/owned-children.d.ts.map +1 -0
- package/dist/owned-children.js +64 -0
- package/dist/owned-children.js.map +1 -0
- package/dist/packet-for-goal.d.ts +19 -0
- package/dist/packet-for-goal.d.ts.map +1 -0
- package/dist/packet-for-goal.js +32 -0
- package/dist/packet-for-goal.js.map +1 -0
- package/dist/pair-cmd.d.ts +85 -0
- package/dist/pair-cmd.d.ts.map +1 -0
- package/dist/pair-cmd.js +205 -0
- package/dist/pair-cmd.js.map +1 -0
- package/dist/partial-asker.d.ts +96 -0
- package/dist/partial-asker.d.ts.map +1 -0
- package/dist/partial-asker.js +117 -0
- package/dist/partial-asker.js.map +1 -0
- package/dist/pdf-text-lines.d.ts +17 -0
- package/dist/pdf-text-lines.d.ts.map +1 -0
- package/dist/pdf-text-lines.js +70 -0
- package/dist/pdf-text-lines.js.map +1 -0
- package/dist/pdf-text-worker.d.ts +2 -0
- package/dist/pdf-text-worker.d.ts.map +1 -0
- package/dist/pdf-text-worker.js +81 -0
- package/dist/pdf-text-worker.js.map +1 -0
- package/dist/pdf-text.d.ts +56 -0
- package/dist/pdf-text.d.ts.map +1 -0
- package/dist/pdf-text.js +64 -0
- package/dist/pdf-text.js.map +1 -0
- package/dist/pending-action.d.ts +154 -0
- package/dist/pending-action.d.ts.map +1 -0
- package/dist/pending-action.js +148 -0
- package/dist/pending-action.js.map +1 -0
- package/dist/preemptor.d.ts +40 -0
- package/dist/preemptor.d.ts.map +1 -0
- package/dist/preemptor.js +49 -0
- package/dist/preemptor.js.map +1 -0
- package/dist/programme-mode.d.ts +29 -0
- package/dist/programme-mode.d.ts.map +1 -0
- package/dist/programme-mode.js +50 -0
- package/dist/programme-mode.js.map +1 -0
- package/dist/progress-view.d.ts +14 -0
- package/dist/progress-view.d.ts.map +1 -0
- package/dist/progress-view.js +114 -0
- package/dist/progress-view.js.map +1 -0
- package/dist/project-graph-builder.d.ts +81 -0
- package/dist/project-graph-builder.d.ts.map +1 -0
- package/dist/project-graph-builder.js +246 -0
- package/dist/project-graph-builder.js.map +1 -0
- package/dist/project-graph-runtime.d.ts +86 -0
- package/dist/project-graph-runtime.d.ts.map +1 -0
- package/dist/project-graph-runtime.js +112 -0
- package/dist/project-graph-runtime.js.map +1 -0
- package/dist/project-index-builder.d.ts +96 -0
- package/dist/project-index-builder.d.ts.map +1 -0
- package/dist/project-index-builder.js +298 -0
- package/dist/project-index-builder.js.map +1 -0
- package/dist/project-index-facts.d.ts +51 -0
- package/dist/project-index-facts.d.ts.map +1 -0
- package/dist/project-index-facts.js +117 -0
- package/dist/project-index-facts.js.map +1 -0
- package/dist/project-index-store.d.ts +97 -0
- package/dist/project-index-store.d.ts.map +1 -0
- package/dist/project-index-store.js +140 -0
- package/dist/project-index-store.js.map +1 -0
- package/dist/project-memory-store.d.ts +127 -0
- package/dist/project-memory-store.d.ts.map +1 -0
- package/dist/project-memory-store.js +302 -0
- package/dist/project-memory-store.js.map +1 -0
- package/dist/proposal-store.d.ts +14 -0
- package/dist/proposal-store.d.ts.map +1 -0
- package/dist/proposal-store.js +19 -0
- package/dist/proposal-store.js.map +1 -0
- package/dist/prover.d.ts +80 -0
- package/dist/prover.d.ts.map +1 -0
- package/dist/prover.js +137 -0
- package/dist/prover.js.map +1 -0
- package/dist/provider-identity-store.d.ts +34 -0
- package/dist/provider-identity-store.d.ts.map +1 -0
- package/dist/provider-identity-store.js +72 -0
- package/dist/provider-identity-store.js.map +1 -0
- package/dist/provider-identity.d.ts +104 -0
- package/dist/provider-identity.d.ts.map +1 -0
- package/dist/provider-identity.js +167 -0
- package/dist/provider-identity.js.map +1 -0
- package/dist/provider-limit.d.ts +79 -0
- package/dist/provider-limit.d.ts.map +1 -0
- package/dist/provider-limit.js +148 -0
- package/dist/provider-limit.js.map +1 -0
- package/dist/provider-preflight.d.ts +171 -0
- package/dist/provider-preflight.d.ts.map +1 -0
- package/dist/provider-preflight.js +395 -0
- package/dist/provider-preflight.js.map +1 -0
- package/dist/provider-state.d.ts +120 -0
- package/dist/provider-state.d.ts.map +1 -0
- package/dist/provider-state.js +182 -0
- package/dist/provider-state.js.map +1 -0
- package/dist/providers.d.ts +132 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +161 -0
- package/dist/providers.js.map +1 -0
- package/dist/publication-recorder.d.ts +117 -0
- package/dist/publication-recorder.d.ts.map +1 -0
- package/dist/publication-recorder.js +124 -0
- package/dist/publication-recorder.js.map +1 -0
- package/dist/pursuit-delivery.d.ts +24 -0
- package/dist/pursuit-delivery.d.ts.map +1 -0
- package/dist/pursuit-delivery.js +38 -0
- package/dist/pursuit-delivery.js.map +1 -0
- package/dist/queue-store.d.ts +132 -0
- package/dist/queue-store.d.ts.map +1 -0
- package/dist/queue-store.js +185 -0
- package/dist/queue-store.js.map +1 -0
- package/dist/queue-summary.d.ts +14 -0
- package/dist/queue-summary.d.ts.map +1 -0
- package/dist/queue-summary.js +82 -0
- package/dist/queue-summary.js.map +1 -0
- package/dist/queue-view.d.ts +20 -0
- package/dist/queue-view.d.ts.map +1 -0
- package/dist/queue-view.js +163 -0
- package/dist/queue-view.js.map +1 -0
- package/dist/queue-write-lease.d.ts +106 -0
- package/dist/queue-write-lease.d.ts.map +1 -0
- package/dist/queue-write-lease.js +282 -0
- package/dist/queue-write-lease.js.map +1 -0
- package/dist/rails-home.d.ts +162 -0
- package/dist/rails-home.d.ts.map +1 -0
- package/dist/rails-home.js +452 -0
- package/dist/rails-home.js.map +1 -0
- package/dist/rails-migrations.d.ts +75 -0
- package/dist/rails-migrations.d.ts.map +1 -0
- package/dist/rails-migrations.js +199 -0
- package/dist/rails-migrations.js.map +1 -0
- package/dist/rails-stores.d.ts +49 -0
- package/dist/rails-stores.d.ts.map +1 -0
- package/dist/rails-stores.js +100 -0
- package/dist/rails-stores.js.map +1 -0
- package/dist/reaper.d.ts +69 -0
- package/dist/reaper.d.ts.map +1 -0
- package/dist/reaper.js +152 -0
- package/dist/reaper.js.map +1 -0
- package/dist/record-store.d.ts +36 -0
- package/dist/record-store.d.ts.map +1 -0
- package/dist/record-store.js +78 -0
- package/dist/record-store.js.map +1 -0
- package/dist/recovery-io.d.ts +50 -0
- package/dist/recovery-io.d.ts.map +1 -0
- package/dist/recovery-io.js +122 -0
- package/dist/recovery-io.js.map +1 -0
- package/dist/recovery.d.ts +146 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +110 -0
- package/dist/recovery.js.map +1 -0
- package/dist/redraw.d.ts +34 -0
- package/dist/redraw.d.ts.map +1 -0
- package/dist/redraw.js +62 -0
- package/dist/redraw.js.map +1 -0
- package/dist/rejected-evidence.d.ts +255 -0
- package/dist/rejected-evidence.d.ts.map +1 -0
- package/dist/rejected-evidence.js +324 -0
- package/dist/rejected-evidence.js.map +1 -0
- package/dist/report-cmd.d.ts +32 -0
- package/dist/report-cmd.d.ts.map +1 -0
- package/dist/report-cmd.js +201 -0
- package/dist/report-cmd.js.map +1 -0
- package/dist/repos-cmd.d.ts +80 -0
- package/dist/repos-cmd.d.ts.map +1 -0
- package/dist/repos-cmd.js +240 -0
- package/dist/repos-cmd.js.map +1 -0
- package/dist/request-body-shape.d.ts +93 -0
- package/dist/request-body-shape.d.ts.map +1 -0
- package/dist/request-body-shape.js +407 -0
- package/dist/request-body-shape.js.map +1 -0
- package/dist/requirement-claims.d.ts +89 -0
- package/dist/requirement-claims.d.ts.map +1 -0
- package/dist/requirement-claims.js +92 -0
- package/dist/requirement-claims.js.map +1 -0
- package/dist/retention-apply-runtime.d.ts +105 -0
- package/dist/retention-apply-runtime.d.ts.map +1 -0
- package/dist/retention-apply-runtime.js +269 -0
- package/dist/retention-apply-runtime.js.map +1 -0
- package/dist/reverify.d.ts +41 -0
- package/dist/reverify.d.ts.map +1 -0
- package/dist/reverify.js +69 -0
- package/dist/reverify.js.map +1 -0
- package/dist/round-records.d.ts +65 -0
- package/dist/round-records.d.ts.map +1 -0
- package/dist/round-records.js +61 -0
- package/dist/round-records.js.map +1 -0
- package/dist/round-runner.d.ts +924 -0
- package/dist/round-runner.d.ts.map +1 -0
- package/dist/round-runner.js +1693 -0
- package/dist/round-runner.js.map +1 -0
- package/dist/run-approval.d.ts +180 -0
- package/dist/run-approval.d.ts.map +1 -0
- package/dist/run-approval.js +199 -0
- package/dist/run-approval.js.map +1 -0
- package/dist/run-cmd.d.ts +359 -0
- package/dist/run-cmd.d.ts.map +1 -0
- package/dist/run-cmd.js +4418 -0
- package/dist/run-cmd.js.map +1 -0
- package/dist/run-delivery.d.ts +71 -0
- package/dist/run-delivery.d.ts.map +1 -0
- package/dist/run-delivery.js +104 -0
- package/dist/run-delivery.js.map +1 -0
- package/dist/run-ended.d.ts +75 -0
- package/dist/run-ended.d.ts.map +1 -0
- package/dist/run-ended.js +27 -0
- package/dist/run-ended.js.map +1 -0
- package/dist/run-ending-locator.d.ts +125 -0
- package/dist/run-ending-locator.d.ts.map +1 -0
- package/dist/run-ending-locator.js +133 -0
- package/dist/run-ending-locator.js.map +1 -0
- package/dist/run-launcher.d.ts +459 -0
- package/dist/run-launcher.d.ts.map +1 -0
- package/dist/run-launcher.js +652 -0
- package/dist/run-launcher.js.map +1 -0
- package/dist/run-lease.d.ts +208 -0
- package/dist/run-lease.d.ts.map +1 -0
- package/dist/run-lease.js +301 -0
- package/dist/run-lease.js.map +1 -0
- package/dist/run-refusal-marks.d.ts +189 -0
- package/dist/run-refusal-marks.d.ts.map +1 -0
- package/dist/run-refusal-marks.js +249 -0
- package/dist/run-refusal-marks.js.map +1 -0
- package/dist/run-start-marks.d.ts +153 -0
- package/dist/run-start-marks.d.ts.map +1 -0
- package/dist/run-start-marks.js +269 -0
- package/dist/run-start-marks.js.map +1 -0
- package/dist/scan-cmd.d.ts +14 -0
- package/dist/scan-cmd.d.ts.map +1 -0
- package/dist/scan-cmd.js +270 -0
- package/dist/scan-cmd.js.map +1 -0
- package/dist/scan-events.d.ts +50 -0
- package/dist/scan-events.d.ts.map +1 -0
- package/dist/scan-events.js +91 -0
- package/dist/scan-events.js.map +1 -0
- package/dist/scan.d.ts +191 -0
- package/dist/scan.d.ts.map +1 -0
- package/dist/scan.js +417 -0
- package/dist/scan.js.map +1 -0
- package/dist/scope-rule.d.ts +148 -0
- package/dist/scope-rule.d.ts.map +1 -0
- package/dist/scope-rule.js +121 -0
- package/dist/scope-rule.js.map +1 -0
- package/dist/self-repo-id.d.ts +18 -0
- package/dist/self-repo-id.d.ts.map +1 -0
- package/dist/self-repo-id.js +70 -0
- package/dist/self-repo-id.js.map +1 -0
- package/dist/serve-cmd.d.ts +115 -0
- package/dist/serve-cmd.d.ts.map +1 -0
- package/dist/serve-cmd.js +505 -0
- package/dist/serve-cmd.js.map +1 -0
- package/dist/serve.d.ts +167 -0
- package/dist/serve.d.ts.map +1 -0
- package/dist/serve.js +336 -0
- package/dist/serve.js.map +1 -0
- package/dist/server-client.d.ts +766 -0
- package/dist/server-client.d.ts.map +1 -0
- package/dist/server-client.js +475 -0
- package/dist/server-client.js.map +1 -0
- package/dist/session-adapter-runtime.d.ts +195 -0
- package/dist/session-adapter-runtime.d.ts.map +1 -0
- package/dist/session-adapter-runtime.js +373 -0
- package/dist/session-adapter-runtime.js.map +1 -0
- package/dist/session-checkpoint-runtime.d.ts +62 -0
- package/dist/session-checkpoint-runtime.d.ts.map +1 -0
- package/dist/session-checkpoint-runtime.js +268 -0
- package/dist/session-checkpoint-runtime.js.map +1 -0
- package/dist/session-control-transport.d.ts +106 -0
- package/dist/session-control-transport.d.ts.map +1 -0
- package/dist/session-control-transport.js +232 -0
- package/dist/session-control-transport.js.map +1 -0
- package/dist/session-observation-store.d.ts +98 -0
- package/dist/session-observation-store.d.ts.map +1 -0
- package/dist/session-observation-store.js +155 -0
- package/dist/session-observation-store.js.map +1 -0
- package/dist/session-observe-runtime.d.ts +123 -0
- package/dist/session-observe-runtime.d.ts.map +1 -0
- package/dist/session-observe-runtime.js +317 -0
- package/dist/session-observe-runtime.js.map +1 -0
- package/dist/session-store.d.ts +98 -0
- package/dist/session-store.d.ts.map +1 -0
- package/dist/session-store.js +116 -0
- package/dist/session-store.js.map +1 -0
- package/dist/sessions-cmd.d.ts +202 -0
- package/dist/sessions-cmd.d.ts.map +1 -0
- package/dist/sessions-cmd.js +609 -0
- package/dist/sessions-cmd.js.map +1 -0
- package/dist/settings-overlay.d.ts +53 -0
- package/dist/settings-overlay.d.ts.map +1 -0
- package/dist/settings-overlay.js +175 -0
- package/dist/settings-overlay.js.map +1 -0
- package/dist/setup-prompt.d.ts +34 -0
- package/dist/setup-prompt.d.ts.map +1 -0
- package/dist/setup-prompt.js +92 -0
- package/dist/setup-prompt.js.map +1 -0
- package/dist/setup.d.ts +103 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +283 -0
- package/dist/setup.js.map +1 -0
- package/dist/shared-grants.d.ts +164 -0
- package/dist/shared-grants.d.ts.map +1 -0
- package/dist/shared-grants.js +242 -0
- package/dist/shared-grants.js.map +1 -0
- package/dist/signals.d.ts +55 -0
- package/dist/signals.d.ts.map +1 -0
- package/dist/signals.js +85 -0
- package/dist/signals.js.map +1 -0
- package/dist/source-cmd.d.ts +201 -0
- package/dist/source-cmd.d.ts.map +1 -0
- package/dist/source-cmd.js +684 -0
- package/dist/source-cmd.js.map +1 -0
- package/dist/source-verdict.d.ts +99 -0
- package/dist/source-verdict.d.ts.map +1 -0
- package/dist/source-verdict.js +182 -0
- package/dist/source-verdict.js.map +1 -0
- package/dist/spend-ledger.d.ts +350 -0
- package/dist/spend-ledger.d.ts.map +1 -0
- package/dist/spend-ledger.js +546 -0
- package/dist/spend-ledger.js.map +1 -0
- package/dist/stale-run-sweep.d.ts +79 -0
- package/dist/stale-run-sweep.d.ts.map +1 -0
- package/dist/stale-run-sweep.js +116 -0
- package/dist/stale-run-sweep.js.map +1 -0
- package/dist/start-attempts.d.ts +385 -0
- package/dist/start-attempts.d.ts.map +1 -0
- package/dist/start-attempts.js +613 -0
- package/dist/start-attempts.js.map +1 -0
- package/dist/status-cmd.d.ts +28 -0
- package/dist/status-cmd.d.ts.map +1 -0
- package/dist/status-cmd.js +116 -0
- package/dist/status-cmd.js.map +1 -0
- package/dist/stop-follow-up.d.ts +107 -0
- package/dist/stop-follow-up.d.ts.map +1 -0
- package/dist/stop-follow-up.js +172 -0
- package/dist/stop-follow-up.js.map +1 -0
- package/dist/surface-lease.d.ts +118 -0
- package/dist/surface-lease.d.ts.map +1 -0
- package/dist/surface-lease.js +485 -0
- package/dist/surface-lease.js.map +1 -0
- package/dist/sync.d.ts +54 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +93 -0
- package/dist/sync.js.map +1 -0
- package/dist/syncing-ledger.d.ts +45 -0
- package/dist/syncing-ledger.d.ts.map +1 -0
- package/dist/syncing-ledger.js +53 -0
- package/dist/syncing-ledger.js.map +1 -0
- package/dist/temp-fixtures.d.ts +68 -0
- package/dist/temp-fixtures.d.ts.map +1 -0
- package/dist/temp-fixtures.js +38 -0
- package/dist/temp-fixtures.js.map +1 -0
- package/dist/token-window.d.ts +84 -0
- package/dist/token-window.d.ts.map +1 -0
- package/dist/token-window.js +143 -0
- package/dist/token-window.js.map +1 -0
- package/dist/tool-bridge.d.ts +177 -0
- package/dist/tool-bridge.d.ts.map +1 -0
- package/dist/tool-bridge.js +329 -0
- package/dist/tool-bridge.js.map +1 -0
- package/dist/tool-call-record.d.ts +197 -0
- package/dist/tool-call-record.d.ts.map +1 -0
- package/dist/tool-call-record.js +276 -0
- package/dist/tool-call-record.js.map +1 -0
- package/dist/tool-protocol.d.ts +135 -0
- package/dist/tool-protocol.d.ts.map +1 -0
- package/dist/tool-protocol.js +104 -0
- package/dist/tool-protocol.js.map +1 -0
- package/dist/tool-worker.d.ts +3 -0
- package/dist/tool-worker.d.ts.map +1 -0
- package/dist/tool-worker.js +478 -0
- package/dist/tool-worker.js.map +1 -0
- package/dist/toolchain-mirror.d.ts +86 -0
- package/dist/toolchain-mirror.d.ts.map +1 -0
- package/dist/toolchain-mirror.js +307 -0
- package/dist/toolchain-mirror.js.map +1 -0
- package/dist/trusted-git.d.ts +243 -0
- package/dist/trusted-git.d.ts.map +1 -0
- package/dist/trusted-git.js +920 -0
- package/dist/trusted-git.js.map +1 -0
- package/dist/ui.d.ts +76 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +118 -0
- package/dist/ui.js.map +1 -0
- package/dist/untrusted-exec.d.ts +275 -0
- package/dist/untrusted-exec.d.ts.map +1 -0
- package/dist/untrusted-exec.js +479 -0
- package/dist/untrusted-exec.js.map +1 -0
- package/dist/untrusted-gate.d.ts +73 -0
- package/dist/untrusted-gate.d.ts.map +1 -0
- package/dist/untrusted-gate.js +226 -0
- package/dist/untrusted-gate.js.map +1 -0
- package/dist/uploader.d.ts +153 -0
- package/dist/uploader.d.ts.map +1 -0
- package/dist/uploader.js +204 -0
- package/dist/uploader.js.map +1 -0
- package/dist/verifier.d.ts +66 -0
- package/dist/verifier.d.ts.map +1 -0
- package/dist/verifier.js +170 -0
- package/dist/verifier.js.map +1 -0
- package/dist/verify-apply.d.ts +26 -0
- package/dist/verify-apply.d.ts.map +1 -0
- package/dist/verify-apply.js +36 -0
- package/dist/verify-apply.js.map +1 -0
- package/dist/verify-cmd.d.ts +44 -0
- package/dist/verify-cmd.d.ts.map +1 -0
- package/dist/verify-cmd.js +125 -0
- package/dist/verify-cmd.js.map +1 -0
- package/dist/verify-pass.d.ts +73 -0
- package/dist/verify-pass.d.ts.map +1 -0
- package/dist/verify-pass.js +103 -0
- package/dist/verify-pass.js.map +1 -0
- package/dist/welcome.d.ts +43 -0
- package/dist/welcome.d.ts.map +1 -0
- package/dist/welcome.js +116 -0
- package/dist/welcome.js.map +1 -0
- package/dist/workspace-provisioner.d.ts +65 -0
- package/dist/workspace-provisioner.d.ts.map +1 -0
- package/dist/workspace-provisioner.js +66 -0
- package/dist/workspace-provisioner.js.map +1 -0
- package/dist/workspace-quarantine.d.ts +64 -0
- package/dist/workspace-quarantine.d.ts.map +1 -0
- package/dist/workspace-quarantine.js +156 -0
- package/dist/workspace-quarantine.js.map +1 -0
- package/dist/workspace-residue-sweep.d.ts +113 -0
- package/dist/workspace-residue-sweep.d.ts.map +1 -0
- package/dist/workspace-residue-sweep.js +158 -0
- package/dist/workspace-residue-sweep.js.map +1 -0
- package/dist/workspace.d.ts +639 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +2026 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +52 -4
- package/win/CredProbe.cs +64 -0
- package/win/FakeClaude.cs +56 -0
- package/win/HandleProbe.cs +116 -0
- package/win/TokenProbe.cs +53 -0
- package/win/appcontainer.ps1 +500 -0
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TOOL_POLICIES = void 0;
|
|
4
|
+
exports.toolWorkerRoot = toolWorkerRoot;
|
|
5
|
+
exports.ensureToolWorker = ensureToolWorker;
|
|
6
|
+
exports.makeToolBridge = makeToolBridge;
|
|
7
|
+
const node_crypto_1 = require("node:crypto");
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
9
|
+
const node_os_1 = require("node:os");
|
|
10
|
+
const node_path_1 = require("node:path");
|
|
11
|
+
const exec_domains_1 = require("./exec-domains");
|
|
12
|
+
const shared_grants_1 = require("./shared-grants");
|
|
13
|
+
const toolchain_mirror_1 = require("./toolchain-mirror");
|
|
14
|
+
const tool_protocol_1 = require("./tool-protocol");
|
|
15
|
+
const untrusted_exec_1 = require("./untrusted-exec");
|
|
16
|
+
const tool_call_record_1 = require("./tool-call-record");
|
|
17
|
+
const core_1 = require("@looply/core");
|
|
18
|
+
/**
|
|
19
|
+
* THE TRUSTED HALF, WHICH DELIBERATELY DOES NO FILE WORK.
|
|
20
|
+
*
|
|
21
|
+
* This is the load-bearing decision of the whole decomposition. The obvious
|
|
22
|
+
* implementation of a tool bridge is:
|
|
23
|
+
*
|
|
24
|
+
* request arrives -> validate the path -> fs.readFile(project + path)
|
|
25
|
+
*
|
|
26
|
+
* and that would put every model-supplied string one validator bug away from
|
|
27
|
+
* the daemon's own authority. So this never touches a project file. It checks
|
|
28
|
+
* the SHAPE of a request, refuses what is obviously not a request at all, and
|
|
29
|
+
* hands the rest to a worker running inside the container.
|
|
30
|
+
*
|
|
31
|
+
* The path checking here is a courtesy, not a boundary: it turns nonsense into
|
|
32
|
+
* a clean structured refusal instead of a container denial that reads like a
|
|
33
|
+
* crash. If it were wrong tomorrow, the worker still resolves the physical path
|
|
34
|
+
* and the container still refuses what it was never granted.
|
|
35
|
+
*
|
|
36
|
+
* WHAT THE MODEL CANNOT CHOOSE. The worker executable, the project root, the
|
|
37
|
+
* container profile, the grants and the network policy all come from the run
|
|
38
|
+
* context. Nothing in a tool request reaches any of them.
|
|
39
|
+
*/
|
|
40
|
+
/**
|
|
41
|
+
* The compiled worker, whether this file is running compiled or from source.
|
|
42
|
+
*
|
|
43
|
+
* In production both sit in `dist` together. Under the test runner this module
|
|
44
|
+
* is loaded from `src`, where there is no compiled worker — and the worker MUST
|
|
45
|
+
* be the compiled one either way, because that is the file the container runs.
|
|
46
|
+
* Falling back to the sibling `dist` keeps the tests exercising production's
|
|
47
|
+
* artefact rather than a second copy that could drift from it.
|
|
48
|
+
*/
|
|
49
|
+
function workerSourcePath() {
|
|
50
|
+
const beside = (0, node_path_1.join)(__dirname, 'tool-worker.js');
|
|
51
|
+
if ((0, node_fs_1.existsSync)(beside))
|
|
52
|
+
return beside;
|
|
53
|
+
return (0, node_path_1.join)(__dirname, '..', 'dist', 'tool-worker.js');
|
|
54
|
+
}
|
|
55
|
+
/** The worker script, somewhere the container can read and cannot write. */
|
|
56
|
+
function toolWorkerRoot(deps = {}) {
|
|
57
|
+
return deps.workerRoot ?? (0, node_path_1.join)((0, node_os_1.tmpdir)(), 'looply-toolworker');
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Put the worker where a contained process can read it.
|
|
61
|
+
*
|
|
62
|
+
* READ ONLY, and keyed by content. The worker is the one thing in this design
|
|
63
|
+
* that runs with the container's grants, so a directory the container could
|
|
64
|
+
* write would be a directory it could replace the worker in — which is the same
|
|
65
|
+
* as having no worker policy at all.
|
|
66
|
+
*/
|
|
67
|
+
function ensureToolWorker(deps = {}) {
|
|
68
|
+
const src = deps.workerSource ?? workerSourcePath();
|
|
69
|
+
if (!(0, node_fs_1.existsSync)(src))
|
|
70
|
+
return { ok: false, because: `no tool worker at ${src}` };
|
|
71
|
+
let digest;
|
|
72
|
+
try {
|
|
73
|
+
digest = (0, node_crypto_1.createHash)('sha256').update((0, node_fs_1.readFileSync)(src)).digest('hex').slice(0, 16);
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
return { ok: false, because: `the tool worker could not be read (${e.message})` };
|
|
77
|
+
}
|
|
78
|
+
const dir = (0, node_path_1.join)(toolWorkerRoot(deps), digest);
|
|
79
|
+
const dest = (0, node_path_1.join)(dir, 'tool-worker.js');
|
|
80
|
+
try {
|
|
81
|
+
(0, node_fs_1.mkdirSync)(dir, { recursive: true });
|
|
82
|
+
// Copied every time rather than trusted once: the copy is cheap and the
|
|
83
|
+
// alternative is believing whatever is already sitting there.
|
|
84
|
+
(0, node_fs_1.copyFileSync)(src, dest);
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
return { ok: false, because: `the tool worker could not be placed (${e.message})` };
|
|
88
|
+
}
|
|
89
|
+
return { ok: true, path: dest };
|
|
90
|
+
}
|
|
91
|
+
function refuse(tool, code, because) {
|
|
92
|
+
return { ok: false, tool, because, code };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Shape checking only. Anything that depends on what is actually on disk —
|
|
96
|
+
* whether a file exists, whether it is text, where a junction leads — is the
|
|
97
|
+
* worker's business, because the worker is the one inside the boundary.
|
|
98
|
+
*/
|
|
99
|
+
function shapeTrouble(req) {
|
|
100
|
+
switch (req.tool) {
|
|
101
|
+
case 'read':
|
|
102
|
+
return (0, tool_protocol_1.pathTrouble)(req.path);
|
|
103
|
+
case 'edit': {
|
|
104
|
+
const p = (0, tool_protocol_1.pathTrouble)(req.path);
|
|
105
|
+
if (p !== null)
|
|
106
|
+
return p;
|
|
107
|
+
if (typeof req.oldText !== 'string' || req.oldText.length === 0)
|
|
108
|
+
return 'oldText is required';
|
|
109
|
+
if (typeof req.newText !== 'string')
|
|
110
|
+
return 'newText is required';
|
|
111
|
+
if (req.expected !== undefined && (!Number.isInteger(req.expected) || req.expected < 1)) {
|
|
112
|
+
return 'expected must be a positive whole number';
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
case 'write': {
|
|
117
|
+
const p = (0, tool_protocol_1.pathTrouble)(req.path);
|
|
118
|
+
if (p !== null)
|
|
119
|
+
return p;
|
|
120
|
+
if (typeof req.contents !== 'string')
|
|
121
|
+
return 'contents are required';
|
|
122
|
+
if (req.intent !== 'create' && req.intent !== 'overwrite') {
|
|
123
|
+
return 'intent must be create or overwrite';
|
|
124
|
+
}
|
|
125
|
+
if (Buffer.byteLength(req.contents, 'utf8') > tool_protocol_1.LIMITS.writeBytes)
|
|
126
|
+
return 'that is too large to write';
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
case 'glob':
|
|
130
|
+
if (typeof req.pattern !== 'string' || req.pattern.length === 0)
|
|
131
|
+
return 'a pattern is required';
|
|
132
|
+
return req.under === undefined ? null : (0, tool_protocol_1.pathTrouble)(req.under);
|
|
133
|
+
case 'grep':
|
|
134
|
+
if (typeof req.pattern !== 'string' || req.pattern.length === 0)
|
|
135
|
+
return 'a pattern is required';
|
|
136
|
+
if (req.under !== undefined) {
|
|
137
|
+
const u = (0, tool_protocol_1.pathTrouble)(req.under);
|
|
138
|
+
if (u !== null)
|
|
139
|
+
return u;
|
|
140
|
+
}
|
|
141
|
+
return null;
|
|
142
|
+
default:
|
|
143
|
+
return 'no such tool';
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* A bridge for one project and one role.
|
|
148
|
+
*
|
|
149
|
+
* The budget is per bridge, which is per provider invocation. It exists because
|
|
150
|
+
* the model may call tools as many times as it likes inside one session and
|
|
151
|
+
* nobody is watching the loop. It is NOT the Goal or autonomy budget — those
|
|
152
|
+
* count provider invocations and belong to Phase 6, which this must not touch.
|
|
153
|
+
*/
|
|
154
|
+
function makeToolBridge(projectDir, policy, deps = {}) {
|
|
155
|
+
const backend = deps.backend ?? new untrusted_exec_1.AppContainerBackend();
|
|
156
|
+
const ensureToolchain = deps.toolchain ?? (() => (0, toolchain_mirror_1.ensureToolchainMirror)());
|
|
157
|
+
const timeoutMs = deps.timeoutMs ?? 60_000;
|
|
158
|
+
const now = deps.now ?? Date.now;
|
|
159
|
+
const recorder = deps.record ?? tool_call_record_1.NO_RECORD;
|
|
160
|
+
let calls = 0;
|
|
161
|
+
let bytesRead = 0;
|
|
162
|
+
let bytesWritten = 0;
|
|
163
|
+
/**
|
|
164
|
+
* Serve one request. Every return below is a response the model will see, and
|
|
165
|
+
* `call` writes every one of them down — including the refusals that never
|
|
166
|
+
* reach the worker, which are a large share of what a model ends up quoting.
|
|
167
|
+
*/
|
|
168
|
+
const serve = async (raw) => {
|
|
169
|
+
if (raw === null || typeof raw !== 'object') {
|
|
170
|
+
return refuse('unknown', 'bad_request', 'a tool request is required');
|
|
171
|
+
}
|
|
172
|
+
const req = raw;
|
|
173
|
+
const name = req.tool;
|
|
174
|
+
// THE ALLOWLIST IS THE ROLE'S, NOT THE MODEL'S. A scanner that asks to
|
|
175
|
+
// write is refused here, before anything is launched.
|
|
176
|
+
if (!policy.tools.includes(name)) {
|
|
177
|
+
return refuse('unknown', 'bad_request', `the ${policy.role} may not call ${String(name)}`);
|
|
178
|
+
}
|
|
179
|
+
if (calls >= tool_protocol_1.INVOCATION_BUDGET.calls) {
|
|
180
|
+
return refuse(name, 'budget_exhausted', 'this invocation has made too many tool calls');
|
|
181
|
+
}
|
|
182
|
+
if (bytesRead >= tool_protocol_1.INVOCATION_BUDGET.bytesRead) {
|
|
183
|
+
return refuse(name, 'budget_exhausted', 'this invocation has read too much');
|
|
184
|
+
}
|
|
185
|
+
if (bytesWritten >= tool_protocol_1.INVOCATION_BUDGET.bytesWritten) {
|
|
186
|
+
return refuse(name, 'budget_exhausted', 'this invocation has written too much');
|
|
187
|
+
}
|
|
188
|
+
const bad = shapeTrouble(req);
|
|
189
|
+
if (bad !== null)
|
|
190
|
+
return refuse(name, 'bad_request', bad);
|
|
191
|
+
const tools = ensureToolchain();
|
|
192
|
+
if (!tools.ok)
|
|
193
|
+
return refuse(name, 'worker_failed', `no contained toolchain — ${tools.because}`);
|
|
194
|
+
const worker = ensureToolWorker(deps);
|
|
195
|
+
if (!worker.ok)
|
|
196
|
+
return refuse(name, 'worker_failed', worker.because);
|
|
197
|
+
calls += 1;
|
|
198
|
+
/*
|
|
199
|
+
* BOTH SHARED PATHS GO THROUGH THE LOCK, not through the per-launch grant
|
|
200
|
+
* list. The toolchain mirror and the tool-worker directory are shared by
|
|
201
|
+
* every workspace on the machine, and granting them per launch is what left
|
|
202
|
+
* 262 and 509 permanent container ACEs on them. Read and execute only, so
|
|
203
|
+
* the thing running inside the boundary cannot rewrite the thing that will
|
|
204
|
+
* run inside it next time.
|
|
205
|
+
*/
|
|
206
|
+
const shared = await (0, shared_grants_1.ensureSharedAccess)(backend instanceof untrusted_exec_1.AppContainerBackend ? backend : null, (0, untrusted_exec_1.containerName)('agent', projectDir), (0, exec_domains_1.sharedGrantPaths)(tools.path, [(0, node_path_1.join)(worker.path, '..')]), deps.sharedGrants ?? {});
|
|
207
|
+
if (!shared.ok)
|
|
208
|
+
return refuse(name, 'worker_failed', `shared grant failed — ${shared.because}`);
|
|
209
|
+
const grants = [...(0, exec_domains_1.untrustedGrants)('agent', projectDir)];
|
|
210
|
+
const out = await backend.run({
|
|
211
|
+
kind: 'agent',
|
|
212
|
+
projectKey: projectDir,
|
|
213
|
+
executable: (0, node_path_1.join)(tools.path, 'node.exe'),
|
|
214
|
+
argv: [worker.path, projectDir],
|
|
215
|
+
cwd: projectDir,
|
|
216
|
+
// The GATE environment, not the provider's: this process runs project
|
|
217
|
+
// files' neighbourhood and needs no provider credential of any kind.
|
|
218
|
+
env: (0, exec_domains_1.buildUntrustedGateEnv)(projectDir, tools.path),
|
|
219
|
+
grants,
|
|
220
|
+
protect: (0, exec_domains_1.protectedPaths)(projectDir),
|
|
221
|
+
// NO NETWORK. The transport reaches the model; the thing that touches
|
|
222
|
+
// files has no reason to reach anything, and this is stronger than the
|
|
223
|
+
// contained-provider design it replaces.
|
|
224
|
+
network: 'none',
|
|
225
|
+
stdin: JSON.stringify(req),
|
|
226
|
+
timeoutMs,
|
|
227
|
+
});
|
|
228
|
+
if (!out.ok) {
|
|
229
|
+
return refuse(name, 'worker_failed', `untrusted execution was unavailable (${out.reason})`);
|
|
230
|
+
}
|
|
231
|
+
if (out.timedOut)
|
|
232
|
+
return refuse(name, 'worker_failed', 'the tool worker did not finish in time');
|
|
233
|
+
let parsed;
|
|
234
|
+
try {
|
|
235
|
+
parsed = JSON.parse(out.stdout.trim());
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
return refuse(name, 'worker_failed', 'the tool worker did not answer');
|
|
239
|
+
}
|
|
240
|
+
if (parsed.ok) {
|
|
241
|
+
if (name === 'write' || name === 'edit')
|
|
242
|
+
bytesWritten += parsed.bytes ?? 0;
|
|
243
|
+
else
|
|
244
|
+
bytesRead += parsed.bytes ?? Buffer.byteLength(parsed.text, 'utf8');
|
|
245
|
+
}
|
|
246
|
+
return parsed;
|
|
247
|
+
};
|
|
248
|
+
/**
|
|
249
|
+
* The model's request in, the model's answer out, and one line written down
|
|
250
|
+
* about what happened in between.
|
|
251
|
+
*
|
|
252
|
+
* The clock is read around `serve` rather than inside it so a refusal that
|
|
253
|
+
* never launched anything is timed the same way a container run is — "it came
|
|
254
|
+
* back in 2 ms" is itself an answer to "what did the bridge do with this".
|
|
255
|
+
*/
|
|
256
|
+
const call = async (raw) => {
|
|
257
|
+
const started = now();
|
|
258
|
+
const res = await serve(raw);
|
|
259
|
+
// A record is not worth a tool call: the recorder swallows its own
|
|
260
|
+
// failures, and this never stands between an answer and the model.
|
|
261
|
+
recorder.record(raw, res, Math.max(0, now() - started));
|
|
262
|
+
return res;
|
|
263
|
+
};
|
|
264
|
+
const proposeAction = (type, payload, note) => {
|
|
265
|
+
const ctx = deps.actionContext;
|
|
266
|
+
if (ctx === undefined) {
|
|
267
|
+
return {
|
|
268
|
+
ok: false,
|
|
269
|
+
code: 'no_context',
|
|
270
|
+
because: 'this run cannot request consequential actions',
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
// The context is passed SEPARATELY from the payload on purpose: there is no
|
|
274
|
+
// arrangement of model input that can reach it.
|
|
275
|
+
const built = (0, core_1.buildActionRequest)(type, payload, ctx, note);
|
|
276
|
+
return built.ok
|
|
277
|
+
? { ok: true, request: built.request }
|
|
278
|
+
: { ok: false, code: built.code, because: built.because };
|
|
279
|
+
};
|
|
280
|
+
return { call, proposeAction, spent: () => ({ calls, bytesRead, bytesWritten }) };
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* What each role may call.
|
|
284
|
+
*
|
|
285
|
+
* LEAST PRIVILEGE BY ROLE, derived from what each one actually does rather than
|
|
286
|
+
* granted by habit. The implementer changes code, so it edits and writes. The
|
|
287
|
+
* verifier and the scanner form a judgement about code that already exists;
|
|
288
|
+
* neither has ever needed to change it, and giving them write access would be
|
|
289
|
+
* handing out authority nothing asked for.
|
|
290
|
+
*
|
|
291
|
+
* Nobody gets a shell. There is no tool here that runs anything at all —
|
|
292
|
+
* project code is executed in exactly one place, the gate, under Looply's own
|
|
293
|
+
* orchestration and never at the model's request.
|
|
294
|
+
*/
|
|
295
|
+
exports.TOOL_POLICIES = {
|
|
296
|
+
implementer: { role: 'implementer', tools: ['read', 'glob', 'grep', 'edit', 'write'] },
|
|
297
|
+
verifier: { role: 'verifier', tools: ['read', 'glob', 'grep'] },
|
|
298
|
+
scanner: { role: 'scanner', tools: ['read', 'glob', 'grep'] },
|
|
299
|
+
/**
|
|
300
|
+
* THE BRAIN. READ, GLOB, GREP — AND NOTHING THAT CHANGES ANYTHING.
|
|
301
|
+
*
|
|
302
|
+
* 🔴 IT PROPOSES; IT NEVER ACTS. A brain that could `edit` would be a second
|
|
303
|
+
* implementer with none of the first one's gate, and a brain that could
|
|
304
|
+
* `write` would be able to manufacture the very evidence its proposals are
|
|
305
|
+
* checked against. The narrowest role in the table is the one belonging to
|
|
306
|
+
* the only component that reasons.
|
|
307
|
+
*
|
|
308
|
+
* ⚠️ ENFORCED TWICE, LIKE THE OTHER THREE — once where the policy is applied
|
|
309
|
+
* and once at the bridge — because a single check is a single line to delete.
|
|
310
|
+
*/
|
|
311
|
+
brain: { role: 'brain', tools: ['read', 'glob', 'grep'] },
|
|
312
|
+
/**
|
|
313
|
+
* THE PROVER. READ, GLOB, GREP — THE SECOND KEY GRADES THE TREE; IT NEVER TOUCHES IT.
|
|
314
|
+
*
|
|
315
|
+
* 🔴 IT WAS LENT THE IMPLEMENTER'S TRANSPORT. `run-cmd.ts` handed `runProver`
|
|
316
|
+
* the same invoke as the round, so the prover ran with `edit` and `write` —
|
|
317
|
+
* while its own prompt told it "read-only access … you must not modify
|
|
318
|
+
* anything". The prompt asked; nothing enforced. MEASURED, LIVE, 2026-09-24
|
|
319
|
+
* (LIVE-1 run 2): the prover's bridge was launched as role `implementer` with
|
|
320
|
+
* `mcp__looply__edit,mcp__looply__write` allowed, between a GREEN gate and
|
|
321
|
+
* the commit — the one window in a round where a write is kept without being
|
|
322
|
+
* gated — and its spend was booked as the implementer's.
|
|
323
|
+
*
|
|
324
|
+
* ⚠️ ENFORCED TWICE, LIKE THE OTHERS: the allowlist on the provider's
|
|
325
|
+
* command line, and the bridge, which refuses a tool the role does not hold.
|
|
326
|
+
*/
|
|
327
|
+
prover: { role: 'prover', tools: ['read', 'glob', 'grep'] },
|
|
328
|
+
};
|
|
329
|
+
//# sourceMappingURL=tool-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-bridge.js","sourceRoot":"","sources":["../src/tool-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { type ToolErrorCode, type ToolName, type ToolResponse } from './tool-protocol';
|
|
2
|
+
/**
|
|
3
|
+
* WHAT THE BRIDGE ACTUALLY SERVED.
|
|
4
|
+
*
|
|
5
|
+
* 🔴 A MODEL-QUOTED TOOL ERROR COULD NOT BE MATCHED TO ANYTHING. The round's
|
|
6
|
+
* note carries the model's sentence about a tool that failed, and nothing
|
|
7
|
+
* carried the other half — so the one question worth asking, *did the bridge
|
|
8
|
+
* serve what the model says it served*, could not be answered at all, and any
|
|
9
|
+
* argument about it was two people reading the same quote. The capability
|
|
10
|
+
* audit's G-05.
|
|
11
|
+
*
|
|
12
|
+
* ⚠️ THE BRIDGE KEEPS THIS, NOT THE WORKER, and that is the load-bearing
|
|
13
|
+
* choice. `makeToolBridge.call()` is the single funnel: every request arrives
|
|
14
|
+
* there and every response leaves there, INCLUDING every refusal — a role that
|
|
15
|
+
* may not call the tool, an exhausted invocation budget, a request whose shape
|
|
16
|
+
* is wrong, a toolchain that is not there, a worker that did not answer. None
|
|
17
|
+
* of those ever reaches the worker. They are also a large share of what a model
|
|
18
|
+
* quotes, so a record kept on the far side would be missing the cases it exists
|
|
19
|
+
* for.
|
|
20
|
+
*
|
|
21
|
+
* ⚠️ WHAT THE MODEL ASKED FOR IS KEPT; WHAT IT WAS GIVEN, OR ASKED TO WRITE, IS
|
|
22
|
+
* COUNTED AND NEVER COPIED. No `contents`, no `oldText`/`newText`, and none of
|
|
23
|
+
* the response text. Their sizes are already computed for the invocation budget
|
|
24
|
+
* and those numbers go in instead. A project-relative path and a search pattern
|
|
25
|
+
* are what the model chose rather than what the project holds — and this file
|
|
26
|
+
* sits inside the very checkout whose files it would otherwise be copying, so
|
|
27
|
+
* they add nothing a reader of that directory does not already have.
|
|
28
|
+
*
|
|
29
|
+
* ⚠️ THE RUN ID IS THE SWITCH. A record of what a run was served belongs to a
|
|
30
|
+
* run; `scan` and `verify` carry no run id and write nothing, byte for byte as
|
|
31
|
+
* before this existed. It is not a config setting because it could not be one:
|
|
32
|
+
* `LOOPLY_`-prefixed variables are stripped from the provider's environment and
|
|
33
|
+
* this process is spawned BY the provider, which is why the daemon's home is
|
|
34
|
+
* told on argv rather than inherited. And a record that answers a question
|
|
35
|
+
* raised after the fact is worth nothing if it was switched off when the
|
|
36
|
+
* surprise happened, which is G-05 restated.
|
|
37
|
+
*/
|
|
38
|
+
/** Beside `events.jsonl` and `run-starts.jsonl`, in the run's own state directory. */
|
|
39
|
+
export declare const TOOL_CALL_FILE = "tool-calls.jsonl";
|
|
40
|
+
/**
|
|
41
|
+
* How large the record may grow in one checkout.
|
|
42
|
+
*
|
|
43
|
+
* A cap rather than a rotation: rewriting an append-only log is how a
|
|
44
|
+
* neighbour's record gets lost, and this file's whole value is that what it
|
|
45
|
+
* says happened, happened. Two megabytes is thousands of calls — far more than
|
|
46
|
+
* the 300 one invocation may make — and it is the file, not the night, that is
|
|
47
|
+
* bounded.
|
|
48
|
+
*/
|
|
49
|
+
export declare const TOOL_CALL_CAP_BYTES: number;
|
|
50
|
+
/** Longest model-chosen string kept on an entry. A pattern is identity, not content. */
|
|
51
|
+
export declare const MAX_FIELD_CHARS = 512;
|
|
52
|
+
export interface ToolCallEntry {
|
|
53
|
+
readonly at: string;
|
|
54
|
+
readonly runId: string;
|
|
55
|
+
readonly role: string;
|
|
56
|
+
readonly tool: ToolName | 'unknown';
|
|
57
|
+
readonly ok: boolean;
|
|
58
|
+
readonly ms: number;
|
|
59
|
+
readonly path?: string;
|
|
60
|
+
readonly pattern?: string;
|
|
61
|
+
readonly under?: string;
|
|
62
|
+
readonly bytes?: number;
|
|
63
|
+
readonly truncated?: true;
|
|
64
|
+
readonly code?: ToolErrorCode;
|
|
65
|
+
readonly because?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* What one provider invocation served in total, written as it ends.
|
|
69
|
+
*
|
|
70
|
+
* `ToolBridge.spent()`'s first reader. Distinguished from an entry by
|
|
71
|
+
* `invocation: true`, so a summariser can tell a total from a call without
|
|
72
|
+
* guessing from which fields happen to be present.
|
|
73
|
+
*/
|
|
74
|
+
export interface ToolCallInvocationTotal {
|
|
75
|
+
readonly at: string;
|
|
76
|
+
readonly runId: string;
|
|
77
|
+
readonly role: string;
|
|
78
|
+
readonly invocation: true;
|
|
79
|
+
readonly calls: number;
|
|
80
|
+
readonly bytesRead: number;
|
|
81
|
+
readonly bytesWritten: number;
|
|
82
|
+
}
|
|
83
|
+
/** The one line that closes a record at its cap. */
|
|
84
|
+
export interface ToolCallCapped {
|
|
85
|
+
readonly at: string;
|
|
86
|
+
readonly capped: true;
|
|
87
|
+
readonly because: string;
|
|
88
|
+
}
|
|
89
|
+
export declare const CAPPED_BECAUSE = "this record reached its cap of 2097152 bytes \u2014 tool calls after this line are not recorded here";
|
|
90
|
+
/**
|
|
91
|
+
* The request's identity, and nothing it carries.
|
|
92
|
+
*
|
|
93
|
+
* Read as `unknown` rather than as a typed request on purpose: this is called
|
|
94
|
+
* on the refusal paths too, where the request failed its shape check and may be
|
|
95
|
+
* any shape at all. A record that threw on a malformed request would be missing
|
|
96
|
+
* exactly the entries a person came looking for.
|
|
97
|
+
*/
|
|
98
|
+
export declare function identityOf(raw: unknown): Pick<ToolCallEntry, 'path' | 'pattern' | 'under'>;
|
|
99
|
+
/** What an answer cost, never what it contained. */
|
|
100
|
+
export declare function answerOf(res: ToolResponse): Pick<ToolCallEntry, 'bytes' | 'truncated' | 'code' | 'because'>;
|
|
101
|
+
export declare function entryFor(raw: unknown, res: ToolResponse, meta: {
|
|
102
|
+
runId: string;
|
|
103
|
+
role: string;
|
|
104
|
+
at: string;
|
|
105
|
+
ms: number;
|
|
106
|
+
}): ToolCallEntry;
|
|
107
|
+
export interface RecordFs {
|
|
108
|
+
size(path: string): number | null;
|
|
109
|
+
append(path: string, line: string): void;
|
|
110
|
+
mkdir(dir: string): void;
|
|
111
|
+
}
|
|
112
|
+
export declare const nodeRecordFs: RecordFs;
|
|
113
|
+
export interface ToolCallRecorder {
|
|
114
|
+
/** Never throws and never returns a failure: a record is not worth a tool call. */
|
|
115
|
+
record(raw: unknown, res: ToolResponse, ms: number): void;
|
|
116
|
+
/**
|
|
117
|
+
* What this invocation served in total, written once as it ends.
|
|
118
|
+
*
|
|
119
|
+
* `ToolBridge.spent()` had no consumer for most of its life — its own
|
|
120
|
+
* comment said "for tests and for logging" and nothing logged it, which is
|
|
121
|
+
* how the capability audit found it (E-05). It is also the closest thing this
|
|
122
|
+
* system has to E-05's "repeated-context bytes": how much the bridge actually
|
|
123
|
+
* served one provider invocation. `mcp-main` has the one moment that knows an
|
|
124
|
+
* invocation is over — the pipe closes and stdin ends — and calls this there.
|
|
125
|
+
*
|
|
126
|
+
* ⚠️ THE FIRST LINE OF THIS BLOCK USED TO SAY `spent()` "HAS HAD NO CONSUMER
|
|
127
|
+
* SINCE IT WAS WRITTEN", three lines above the sentence naming its consumer.
|
|
128
|
+
* 🔴 It was written by the very commit that ADDED that consumer: the block was
|
|
129
|
+
* extended to describe the fix and its opening line was left alone, so it was
|
|
130
|
+
* false from the moment it was typed. Fixed in M9-4.
|
|
131
|
+
*/
|
|
132
|
+
total(spent: {
|
|
133
|
+
calls: number;
|
|
134
|
+
bytesRead: number;
|
|
135
|
+
bytesWritten: number;
|
|
136
|
+
}): void;
|
|
137
|
+
}
|
|
138
|
+
/** A recorder that keeps nothing — what a bridge with no run id gets. */
|
|
139
|
+
export declare const NO_RECORD: ToolCallRecorder;
|
|
140
|
+
/**
|
|
141
|
+
* The recorder for one bridge, which is one provider invocation.
|
|
142
|
+
*
|
|
143
|
+
* ⚠️ IT SWALLOWS ITS OWN FAILURES, deliberately and to the end. A full disk, a
|
|
144
|
+
* read-only checkout or a path that vanished must cost the round nothing: the
|
|
145
|
+
* tool call has already been served and its answer is already on its way back
|
|
146
|
+
* to the model. Losing a line of the record is a smaller harm than turning a
|
|
147
|
+
* working round into a failed one to complain about bookkeeping.
|
|
148
|
+
*/
|
|
149
|
+
export declare function makeToolCallRecorder(stateDir: string, meta: {
|
|
150
|
+
runId: string;
|
|
151
|
+
role: string;
|
|
152
|
+
}, deps?: {
|
|
153
|
+
fs?: RecordFs;
|
|
154
|
+
now?: () => number;
|
|
155
|
+
}): ToolCallRecorder;
|
|
156
|
+
/**
|
|
157
|
+
* What a person is told about the record, from the file's own text.
|
|
158
|
+
*
|
|
159
|
+
* Parsed the way every other reader here parses a ledger: a damaged line is
|
|
160
|
+
* dropped and counted rather than thrown over, because a record is read when
|
|
161
|
+
* something has already gone wrong and refusing to answer then is the worst
|
|
162
|
+
* possible moment for it.
|
|
163
|
+
*/
|
|
164
|
+
export interface ToolCallSummary {
|
|
165
|
+
readonly calls: number;
|
|
166
|
+
readonly refused: number;
|
|
167
|
+
readonly badLines: number;
|
|
168
|
+
readonly capped: boolean;
|
|
169
|
+
/** The most recent refusal, which is usually the one being looked for. */
|
|
170
|
+
readonly lastRefusal: {
|
|
171
|
+
tool: string;
|
|
172
|
+
code: string;
|
|
173
|
+
because: string;
|
|
174
|
+
} | null;
|
|
175
|
+
/**
|
|
176
|
+
* What the bridge served, summed over the invocations that said.
|
|
177
|
+
*
|
|
178
|
+
* Null when no invocation total is in the file — a record written before this
|
|
179
|
+
* existed, or one whose invocation is still going. Never a zero standing in
|
|
180
|
+
* for silence, for the reason every other figure here is absent rather than
|
|
181
|
+
* zero.
|
|
182
|
+
*/
|
|
183
|
+
readonly served: {
|
|
184
|
+
invocations: number;
|
|
185
|
+
calls: number;
|
|
186
|
+
bytesRead: number;
|
|
187
|
+
bytesWritten: number;
|
|
188
|
+
} | null;
|
|
189
|
+
}
|
|
190
|
+
export declare function summariseToolCalls(text: string | null): ToolCallSummary | null;
|
|
191
|
+
/** Kept beside the cap so a reader can see the two numbers agree. */
|
|
192
|
+
export declare const RECORD_LIMITS: {
|
|
193
|
+
capBytes: number;
|
|
194
|
+
fieldChars: number;
|
|
195
|
+
readBytes: number;
|
|
196
|
+
};
|
|
197
|
+
//# sourceMappingURL=tool-call-record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-call-record.d.ts","sourceRoot":"","sources":["../src/tool-call-record.ts"],"names":[],"mappings":"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"}
|