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,625 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BUILT_IN_PROVIDER_ENV = exports.MAX_TRANSPORT_OUTPUT_CHARS = void 0;
|
|
4
|
+
exports.providerSessionDir = providerSessionDir;
|
|
5
|
+
exports.mcpConfigJson = mcpConfigJson;
|
|
6
|
+
exports.mcpMainPath = mcpMainPath;
|
|
7
|
+
exports.isBuiltInProvider = isBuiltInProvider;
|
|
8
|
+
exports.claudeMediatedArgv = claudeMediatedArgv;
|
|
9
|
+
exports.allowedToolArgs = allowedToolArgs;
|
|
10
|
+
exports.makeMediatedAgentRunner = makeMediatedAgentRunner;
|
|
11
|
+
const node_child_process_1 = require("node:child_process");
|
|
12
|
+
const node_crypto_1 = require("node:crypto");
|
|
13
|
+
const node_fs_1 = require("node:fs");
|
|
14
|
+
const node_os_1 = require("node:os");
|
|
15
|
+
const node_path_1 = require("node:path");
|
|
16
|
+
const agent_exec_1 = require("./agent-exec");
|
|
17
|
+
const agent_runtime_1 = require("./agent-runtime");
|
|
18
|
+
const agent_contained_1 = require("./agent-contained");
|
|
19
|
+
const exec_domains_1 = require("./exec-domains");
|
|
20
|
+
const untrusted_exec_1 = require("./untrusted-exec");
|
|
21
|
+
/** Which shell a configured provider's line is handed to. See the launch below. */
|
|
22
|
+
const WIN_HOST = process.platform === 'win32';
|
|
23
|
+
const provider_state_1 = require("./provider-state");
|
|
24
|
+
const tool_bridge_1 = require("./tool-bridge");
|
|
25
|
+
const agent_envelope_1 = require("./agent-envelope");
|
|
26
|
+
const spend_ledger_1 = require("./spend-ledger");
|
|
27
|
+
const model_routing_1 = require("./model-routing");
|
|
28
|
+
/**
|
|
29
|
+
* THE MODEL RUNS HERE; THE MODEL'S TOOLS DO NOT.
|
|
30
|
+
*
|
|
31
|
+
* Two phases of work established that the packaged provider cannot run inside
|
|
32
|
+
* an AppContainer — it spawns a child with piped stdio during startup, libuv
|
|
33
|
+
* implements that as a named pipe, and a container cannot create one — and that
|
|
34
|
+
* a restricted token cannot withhold the user's own files. So the provider
|
|
35
|
+
* process runs as the daemon user, and the boundary moves off the process and
|
|
36
|
+
* onto the CAPABILITY:
|
|
37
|
+
*
|
|
38
|
+
* the model gets no host tools at all. Every capability it can call is a
|
|
39
|
+
* Looply MCP tool, and each of those executes inside the container.
|
|
40
|
+
*
|
|
41
|
+
* WHAT THIS DOES AND DOES NOT CLAIM. It does not claim the provider binary is
|
|
42
|
+
* sandboxed — it is not, and a hostile provider executable could read what the
|
|
43
|
+
* user can read. That is supply-chain containment and belongs to a later phase.
|
|
44
|
+
* What is true here is narrower and is the Phase-7 property: model-callable
|
|
45
|
+
* authority is mediated, and Looply hands the transport no governed credential
|
|
46
|
+
* through its environment, arguments, configuration, working directory, or tool
|
|
47
|
+
* surface.
|
|
48
|
+
*
|
|
49
|
+
* THE FIVE CHANNELS. Those are the five ways authority could leak from Looply
|
|
50
|
+
* into the transport, and each is closed deliberately here: the environment is
|
|
51
|
+
* built up rather than inherited, the arguments carry no secret, the MCP config
|
|
52
|
+
* names only our own bridge, the working directory is sterile, and the provider
|
|
53
|
+
* state is a credential copy and nothing else.
|
|
54
|
+
*/
|
|
55
|
+
/**
|
|
56
|
+
* How much of the transport's own output the daemon will hold.
|
|
57
|
+
*
|
|
58
|
+
* 🔴 THE PROVIDER IS THE UNCONTAINED PROCESS, AND THIS WAS UNBOUNDED. Every
|
|
59
|
+
* chunk of its stdout and stderr was appended to one string with no ceiling, so
|
|
60
|
+
* the process this phase is ABOUT could exhaust the daemon's memory by talking.
|
|
61
|
+
* The container bounds what a contained child hands back; nothing bounded this,
|
|
62
|
+
* and this is the one that is not contained.
|
|
63
|
+
*
|
|
64
|
+
* ⚠️ THE TAIL IS WHAT MATTERS HERE, WHICH IS THE OPPOSITE OF THE CONTAINED CASE.
|
|
65
|
+
* A provider's answer is its LAST line — the JSON envelope readers parse with
|
|
66
|
+
* `.filter(startsWith('{')).pop()` — so dropping the front preserves the answer
|
|
67
|
+
* and dropping the back would destroy it. A gate step is the other way round,
|
|
68
|
+
* and `untrusted-exec.ts` keeps both ends for that reason.
|
|
69
|
+
*/
|
|
70
|
+
exports.MAX_TRANSPORT_OUTPUT_CHARS = 4 * 1024 * 1024;
|
|
71
|
+
/**
|
|
72
|
+
* The provider's working directory: somewhere with nothing in it.
|
|
73
|
+
*
|
|
74
|
+
* NOT THE PROJECT, and this is load-bearing rather than tidy. Even with every
|
|
75
|
+
* built-in tool disabled, a coding CLI discovers things about the directory it
|
|
76
|
+
* starts in — configuration, ignore files, repository state. The transport is
|
|
77
|
+
* meant to learn about the project through the prompt and through tool results,
|
|
78
|
+
* and through nothing else, so it is started somewhere that has no project in
|
|
79
|
+
* it to discover.
|
|
80
|
+
*
|
|
81
|
+
* Per project and per role, so two sessions never share provider state.
|
|
82
|
+
*/
|
|
83
|
+
function providerSessionDir(projectDir, role, home = (0, node_os_1.homedir)()) {
|
|
84
|
+
const digest = (0, node_crypto_1.createHash)('sha256').update(`${projectDir}|${role}`, 'utf8').digest('hex').slice(0, 16);
|
|
85
|
+
const dir = (0, node_path_1.join)(home, '.looply', 'provider-sessions', `${role}-${digest}`);
|
|
86
|
+
(0, node_fs_1.mkdirSync)(dir, { recursive: true });
|
|
87
|
+
return dir;
|
|
88
|
+
}
|
|
89
|
+
/** The MCP configuration the provider is given: exactly one server, ours. */
|
|
90
|
+
function mcpConfigJson(launch) {
|
|
91
|
+
return JSON.stringify({
|
|
92
|
+
mcpServers: {
|
|
93
|
+
[launch.name]: { command: launch.command, args: launch.args },
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Where the bridge entry point lives.
|
|
99
|
+
*
|
|
100
|
+
* Beside this file once compiled. Under the test runner this module is loaded
|
|
101
|
+
* from `src`, where there is no compiled entry — and it must be the compiled
|
|
102
|
+
* one either way, since that is what the provider will actually spawn. Falling
|
|
103
|
+
* back to the sibling `dist` keeps the tests driving production's artefact.
|
|
104
|
+
*/
|
|
105
|
+
function mcpMainPath(deps = {}) {
|
|
106
|
+
if (deps.mcpMain !== undefined)
|
|
107
|
+
return deps.mcpMain;
|
|
108
|
+
const beside = (0, node_path_1.join)(__dirname, 'mcp-main.js');
|
|
109
|
+
return (0, node_fs_1.existsSync)(beside) ? beside : (0, node_path_1.join)(__dirname, '..', 'dist', 'mcp-main.js');
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The command line for one mediated turn.
|
|
113
|
+
*
|
|
114
|
+
* `--tools ""` is the mechanism that matters, and it was read off the installed
|
|
115
|
+
* CLI rather than assumed: it takes the list of available tools FROM THE
|
|
116
|
+
* BUILT-IN SET, and an empty value disables all of them. Without it the model
|
|
117
|
+
* would keep its own Read, Write, Edit, Glob, Grep and Bash, every one of which
|
|
118
|
+
* runs as the daemon, and the entire bridge would be decoration beside them.
|
|
119
|
+
*
|
|
120
|
+
* `--strict-mcp-config` then makes the supplied configuration the only one, so
|
|
121
|
+
* no server from the user's profile or a plugin becomes a capability by
|
|
122
|
+
* accident.
|
|
123
|
+
*/
|
|
124
|
+
/**
|
|
125
|
+
* Whether `spec` names the built-in provider — the one whose `--output-format
|
|
126
|
+
* json` envelope is written by the CLI around the model's text, rather than a
|
|
127
|
+
* configured command whose whole stdout is the model's to write. Only the
|
|
128
|
+
* former's envelope is read for cost, and only the former's is unwrapped by the
|
|
129
|
+
* round; a configured provider is driven exactly as it always was.
|
|
130
|
+
*/
|
|
131
|
+
function isBuiltInProvider(spec) {
|
|
132
|
+
return spec.command === agent_exec_1.DEFAULT_AGENT.command;
|
|
133
|
+
}
|
|
134
|
+
function claudeMediatedArgv(launch, format) {
|
|
135
|
+
return [
|
|
136
|
+
'-p',
|
|
137
|
+
'--output-format',
|
|
138
|
+
format,
|
|
139
|
+
// Every built-in host tool, off.
|
|
140
|
+
'--tools',
|
|
141
|
+
'',
|
|
142
|
+
// Only the servers named below; nothing ambient.
|
|
143
|
+
'--strict-mcp-config',
|
|
144
|
+
'--mcp-config',
|
|
145
|
+
mcpConfigJson(launch),
|
|
146
|
+
];
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Names the model is allowed to call, spelled the way the provider spells them.
|
|
150
|
+
*
|
|
151
|
+
* Belt and braces beside `--tools ""`: if a future version changed what an
|
|
152
|
+
* empty built-in set means, this still names the only acceptable surface.
|
|
153
|
+
*/
|
|
154
|
+
function allowedToolArgs(role, launch) {
|
|
155
|
+
const names = tool_bridge_1.TOOL_POLICIES[role].tools.map((t) => `mcp__${launch.name}__${t}`);
|
|
156
|
+
return ['--allowedTools', names.join(',')];
|
|
157
|
+
}
|
|
158
|
+
/** The environment variables a configured provider is handed, by name. */
|
|
159
|
+
function forwarded(spec, reserved) {
|
|
160
|
+
const out = {};
|
|
161
|
+
for (const name of spec.env ?? []) {
|
|
162
|
+
if (reserved(name))
|
|
163
|
+
continue;
|
|
164
|
+
const v = process.env[name];
|
|
165
|
+
if (typeof v === 'string' && v.length > 0)
|
|
166
|
+
out[name] = v;
|
|
167
|
+
}
|
|
168
|
+
return out;
|
|
169
|
+
}
|
|
170
|
+
/** `LOOPLY_` is Looply's own; the transport never receives one. */
|
|
171
|
+
function isReserved(name) {
|
|
172
|
+
return /^LOOPLY_/i.test(name.trim());
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* What the BUILT-IN provider is told about how it may load its tools.
|
|
176
|
+
*
|
|
177
|
+
* 🔴 WITHOUT THIS THE MODEL HAD NO TOOLS, AND SAID SO WITH FABRICATIONS.
|
|
178
|
+
* Claude Code can DEFER MCP tool schemas behind its own built-in `ToolSearch`
|
|
179
|
+
* tool, loading them only when the model asks. Looply passes `--tools ""`,
|
|
180
|
+
* which removes every built-in — `ToolSearch` with them — so a deferred
|
|
181
|
+
* `mcp__looply__read` was listed and could never be called. The switch is
|
|
182
|
+
* remote: the provider's cached flag `tengu_deferred_stub_tool` flipped on
|
|
183
|
+
* under an UNCHANGED 2.1.208 binary and an unchanged argv.
|
|
184
|
+
*
|
|
185
|
+
* MEASURED, LIVE, 2026-09-24: across 95 provider sessions on this profile,
|
|
186
|
+
* every tool-using session was from 2026-09-15; today three verifier turns in
|
|
187
|
+
* a row called nothing. Two narrated a tool call as text ("⚡ Tool use:
|
|
188
|
+
* Bash", then a fabricated `<system-reminder>`) and returned no verdict; the
|
|
189
|
+
* third, run straight into the binary with the seam out of the path, answered
|
|
190
|
+
* `stale` citing `src/split.ts:1` — a file that does not exist anywhere in
|
|
191
|
+
* the tree. A verifier that invents its evidence is worse than one that fails.
|
|
192
|
+
*
|
|
193
|
+
* `ENABLE_TOOL_SEARCH=false` is the binary's own switch back to "standard":
|
|
194
|
+
* MCP tools loaded up front, as they were. It adds NO host tool — the
|
|
195
|
+
* alternative, letting `ToolSearch` through `--tools`, would be the first
|
|
196
|
+
* built-in the mediated provider was ever allowed.
|
|
197
|
+
*
|
|
198
|
+
* ⚠️ BUILT-IN ONLY. A configured provider is somebody else's binary; it
|
|
199
|
+
* declares how its own tools are turned off (`no_host_tools`) and is told
|
|
200
|
+
* nothing it did not ask for.
|
|
201
|
+
*/
|
|
202
|
+
exports.BUILT_IN_PROVIDER_ENV = Object.freeze({
|
|
203
|
+
ENABLE_TOOL_SEARCH: 'false',
|
|
204
|
+
});
|
|
205
|
+
/**
|
|
206
|
+
* An {@link AgentInvoke} that runs the model outside the container and its
|
|
207
|
+
* tools inside one.
|
|
208
|
+
*
|
|
209
|
+
* Fails closed in every direction it can: no provider runtime, no run; no
|
|
210
|
+
* bridge, no run; a configured provider that cannot speak the tool protocol,
|
|
211
|
+
* no run. None of them ever falls back to letting the model touch the host
|
|
212
|
+
* directly, which is the outcome this whole arc exists to prevent.
|
|
213
|
+
*/
|
|
214
|
+
function makeMediatedAgentRunner(projectDir, role, spec = agent_exec_1.DEFAULT_AGENT, deps = {},
|
|
215
|
+
/**
|
|
216
|
+
* The registry that stops this outliving the run that started it.
|
|
217
|
+
*
|
|
218
|
+
* 🔴 THE LIVE PROVIDER WAS NOT OWNED. The timeout below reaps it, and that
|
|
219
|
+
* covers a transport that hangs — but not a run that ENDS while one is in
|
|
220
|
+
* flight. `OwnedChildren` exists for exactly that, its docblock claims "a
|
|
221
|
+
* Ctrl-C, a `looply stop`" among what it covers, and the one process it most
|
|
222
|
+
* needed to hold was never adopted into it.
|
|
223
|
+
*
|
|
224
|
+
* The hazard is already recorded a few lines below, in `killTree`'s own
|
|
225
|
+
* docblock: stopping a round mid-turn "left a live stub and a live bridge
|
|
226
|
+
* behind, still holding a project, for as long as the machine stayed up".
|
|
227
|
+
* That was observed. This is the half that was missing.
|
|
228
|
+
*
|
|
229
|
+
* Optional, so every existing caller and fixture keeps working — but the
|
|
230
|
+
* production one passes it.
|
|
231
|
+
*/
|
|
232
|
+
owned) {
|
|
233
|
+
const now = deps.now ?? (() => Date.now());
|
|
234
|
+
const spawnFn = deps.spawnFn ?? node_child_process_1.spawn;
|
|
235
|
+
const requested = deps.format ?? 'text';
|
|
236
|
+
// Whether the stream this transport reads carries an envelope the MODEL did
|
|
237
|
+
// not write. Decided once, from the spec, and read where the cost is parsed.
|
|
238
|
+
const builtIn = isBuiltInProvider(spec);
|
|
239
|
+
/**
|
|
240
|
+
* 🔴 EVERY MODEL INVOCATION IN THIS SYSTEM COMES THROUGH HERE, WHICH IS WHY
|
|
241
|
+
* THE SPEND RECORD IS WRITTEN HERE AND NOWHERE ELSE.
|
|
242
|
+
*
|
|
243
|
+
* `envelope.ts` opens by saying a budget over numbers nobody counts is
|
|
244
|
+
* theatre. It was describing its own tree: the parser read `total_cost_usd`,
|
|
245
|
+
* `unwrapEnvelope` dropped it, and no file anywhere appended a spend record —
|
|
246
|
+
* so `withinEnvelope`'s dollar ceiling had nothing on the other side of the
|
|
247
|
+
* comparison.
|
|
248
|
+
*
|
|
249
|
+
* ⚠️ AND THE ROUND IS RECORDED TOO, WITH NO DOLLARS. The round asks for
|
|
250
|
+
* `--output-format text` and gets no envelope, so the most expensive path in
|
|
251
|
+
* the system can report no cost at all. Recording the invocation with `usd`
|
|
252
|
+
* ABSENT makes the window's total unmeasurable rather than cheap, and
|
|
253
|
+
* `withinEnvelope` refuses on unmeasurable. Skipping those invocations
|
|
254
|
+
* instead would have produced a tidy $0.00 for a night of work.
|
|
255
|
+
*/
|
|
256
|
+
const record = (0, spend_ledger_1.recordingSpend)(role, now, deps.home, deps.runId);
|
|
257
|
+
const invoke = async (prompt, timeoutMs) => {
|
|
258
|
+
const started = now();
|
|
259
|
+
const fail = (why) => ({
|
|
260
|
+
ok: false,
|
|
261
|
+
timedOut: false,
|
|
262
|
+
ms: now() - started,
|
|
263
|
+
output: why,
|
|
264
|
+
});
|
|
265
|
+
const sessionDir = providerSessionDir(projectDir, role, deps.home);
|
|
266
|
+
const mcpMain = mcpMainPath(deps);
|
|
267
|
+
if (!(0, node_fs_1.existsSync)(mcpMain)) {
|
|
268
|
+
return fail(`the agent did not run: no tool bridge at ${mcpMain}`);
|
|
269
|
+
}
|
|
270
|
+
const launch = {
|
|
271
|
+
name: 'looply',
|
|
272
|
+
command: deps.bridgeNode ?? process.execPath,
|
|
273
|
+
// THE DAEMON'S HOME, TOLD RATHER THAN INHERITED. The bridge is trusted
|
|
274
|
+
// code, but the provider launches it and it inherits the provider's
|
|
275
|
+
// environment — in which HOME points at the sterile session directory. A
|
|
276
|
+
// bridge that believed that would build itself a fresh 80 MB toolchain
|
|
277
|
+
// mirror inside the session on every single round.
|
|
278
|
+
// AND THE RUN, FOR THE SAME REASON THE HOME IS TOLD. `LOOPLY_` is
|
|
279
|
+
// stripped from the provider's environment and this is spawned by the
|
|
280
|
+
// provider, so argv is the only channel. The run id is what turns the
|
|
281
|
+
// bridge's record of what it served on: absent for a scan or a verify,
|
|
282
|
+
// which are charged as themselves and have no run to attach a record to.
|
|
283
|
+
args: [mcpMain, projectDir, role, deps.home ?? (0, node_os_1.homedir)(), deps.runId ?? ''],
|
|
284
|
+
};
|
|
285
|
+
let executable;
|
|
286
|
+
let argv;
|
|
287
|
+
/** Set only on the mediated path; the provider's own profile. */
|
|
288
|
+
let claudeConfigDir = null;
|
|
289
|
+
// Where a CONFIGURED transport's runtime lives, so its command can be
|
|
290
|
+
// resolved. This is what `agent.runtime` means now: provider runtime
|
|
291
|
+
// requirements, declared by a person, NOT project filesystem authority. It
|
|
292
|
+
// keeps every check it had — forbidden roots, physical resolution, and the
|
|
293
|
+
// refusal of anything inside the worktree.
|
|
294
|
+
let runtimePath = [];
|
|
295
|
+
// `cmd /c` does not parse the escaping Node applies to arguments, so a
|
|
296
|
+
// configured line containing a quoted path arrives mangled. The line is one
|
|
297
|
+
// argument by contract, so it is passed through verbatim and quoted here.
|
|
298
|
+
let verbatim = false;
|
|
299
|
+
if (spec.command === agent_exec_1.DEFAULT_AGENT.command) {
|
|
300
|
+
/**
|
|
301
|
+
* An explicitly configured executable stands in for the package lookup,
|
|
302
|
+
* and ONLY for the lookup — every mediating flag below is unchanged.
|
|
303
|
+
* `claudePackageDir` finds a Claude Code installed as an npm package
|
|
304
|
+
* beside node; an installation that lives elsewhere is still the same
|
|
305
|
+
* provider and still takes the same mediation.
|
|
306
|
+
*/
|
|
307
|
+
const pkg = spec.executable !== undefined
|
|
308
|
+
? ''
|
|
309
|
+
: deps.packageDir === undefined
|
|
310
|
+
? (0, agent_contained_1.claudePackageDir)()
|
|
311
|
+
: deps.packageDir;
|
|
312
|
+
if (pkg === null)
|
|
313
|
+
return fail('the agent did not run: no provider runtime was found');
|
|
314
|
+
/**
|
|
315
|
+
* 🔴 AN EXPLICIT EXECUTABLE IS CHECKED BEFORE IT IS BELIEVED.
|
|
316
|
+
*
|
|
317
|
+
* It must be ABSOLUTE — a relative path resolves against whatever cwd the
|
|
318
|
+
* daemon happens to hold — it must EXIST, so a typo fails here with the
|
|
319
|
+
* path in the message rather than as an opaque spawn error, and it must
|
|
320
|
+
* NOT live inside the worktree. That last one is the point: the model can
|
|
321
|
+
* write to the project, so an executable inside it would be an executable
|
|
322
|
+
* the model can replace, and Looply would be launching its own provider
|
|
323
|
+
* from model-authored bytes.
|
|
324
|
+
*/
|
|
325
|
+
if (spec.executable !== undefined) {
|
|
326
|
+
const exe = spec.executable;
|
|
327
|
+
if (!(0, node_path_1.isAbsolute)(exe)) {
|
|
328
|
+
return fail(`the agent did not run: agent.executable must be an absolute path (${exe})`);
|
|
329
|
+
}
|
|
330
|
+
if (!(0, node_fs_1.existsSync)(exe)) {
|
|
331
|
+
return fail(`the agent did not run: no provider executable at ${exe}`);
|
|
332
|
+
}
|
|
333
|
+
const inside = (0, agent_runtime_1.checkRuntimeGrants)([(0, node_path_1.dirname)(exe)], undefined, projectDir);
|
|
334
|
+
if (!inside.ok)
|
|
335
|
+
return fail(`the agent did not run: ${inside.because}`);
|
|
336
|
+
}
|
|
337
|
+
// The SAME composition `doctor` asks about. Two copies of this path would let
|
|
338
|
+
// a readiness check answer honestly about a binary nobody is going to run.
|
|
339
|
+
executable = spec.executable ?? (0, provider_state_1.providerExecutableFor)(pkg);
|
|
340
|
+
/**
|
|
341
|
+
* 🔴 THE PROVIDER AUTHENTICATES ITSELF NOW. Looply used to copy the
|
|
342
|
+
* operator's credential into this session directory on every launch; it
|
|
343
|
+
* points at a persistent profile instead and holds nothing.
|
|
344
|
+
*
|
|
345
|
+
* The profile comes from the DAEMON'S HOME, never from project config —
|
|
346
|
+
* `.looply/config.yaml` lives inside the worktree the model may edit, and
|
|
347
|
+
* a worker that could name this directory could point it at one it wrote.
|
|
348
|
+
*/
|
|
349
|
+
claudeConfigDir = (0, provider_state_1.providerProfileDir)({ home: deps.home });
|
|
350
|
+
/**
|
|
351
|
+
* ⚠️ CHECKED IN THE SAME PROFILE AND ENVIRONMENT THE RUN WILL USE, or it
|
|
352
|
+
* answers a different question — the mistake `doctor --provider` was
|
|
353
|
+
* repaired for once already. It costs no model turn: `auth status` is
|
|
354
|
+
* local and prints the profile's own state.
|
|
355
|
+
*/
|
|
356
|
+
const ready = (deps.checkAuth ?? provider_state_1.checkProviderAuth)(executable, { ...(0, exec_domains_1.buildProviderEnv)(sessionDir), CLAUDE_CONFIG_DIR: claudeConfigDir }, { home: deps.home });
|
|
357
|
+
if (!ready.ok) {
|
|
358
|
+
// The reason is carried through rather than flattened: only one of the
|
|
359
|
+
// five means "log in", and telling somebody to re-authenticate when the
|
|
360
|
+
// executable is missing wastes their afternoon.
|
|
361
|
+
return fail(`the agent did not run: provider_${ready.reason} — ${ready.because}`);
|
|
362
|
+
}
|
|
363
|
+
// The role's model and effort sit between the mediation flags and the
|
|
364
|
+
// tool allowlist: nothing configured means nothing added, so a project
|
|
365
|
+
// that says nothing about models gets the invocation it always did.
|
|
366
|
+
argv = [
|
|
367
|
+
...claudeMediatedArgv(launch, requested),
|
|
368
|
+
// The prover is a TOOL role, not a model role: it runs the model the
|
|
369
|
+
// implementer's routing names, exactly as it did while it borrowed the
|
|
370
|
+
// implementer's transport. Only its tools narrowed.
|
|
371
|
+
...(0, model_routing_1.modelArgs)(role === 'prover' ? 'implementer' : role, spec),
|
|
372
|
+
...allowedToolArgs(role, launch),
|
|
373
|
+
];
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
// A CONFIGURED PROVIDER must be able to take its tools from us. There is
|
|
377
|
+
// no fallback to host tools: a transport that cannot be mediated is a
|
|
378
|
+
// transport Looply will not drive.
|
|
379
|
+
const declared = (0, agent_runtime_1.checkRuntimeGrants)(spec.runtime ?? [], undefined, projectDir);
|
|
380
|
+
if (!declared.ok)
|
|
381
|
+
return fail(`the agent did not run: ${declared.because}`);
|
|
382
|
+
// `agent.command` is a shell line by contract, as it has been since the
|
|
383
|
+
// gate's steps. It runs through the shell so that contract still holds,
|
|
384
|
+
// but the shell itself is named explicitly rather than left to `spawn`.
|
|
385
|
+
/**
|
|
386
|
+
* ⚠️ THE FALLBACK OMITTED `Windows` — it read `?? 'C:'`, so with no
|
|
387
|
+
* SystemRoot this looked for `C:\\System32\\cmd.exe`. Absolute, and wrong:
|
|
388
|
+
* the shell would simply not be found, and a configured provider would
|
|
389
|
+
* fail to launch for a reason naming no cause. Three spellings of this
|
|
390
|
+
* fallback exist in the package; this was the only one missing a segment.
|
|
391
|
+
*/
|
|
392
|
+
/**
|
|
393
|
+
* 🔴 REFUSED UNLESS ITS TOOLS ARE DECLARED OFF.
|
|
394
|
+
*
|
|
395
|
+
* The comment three lines above has always said "there is no fallback to
|
|
396
|
+
* host tools: a transport that cannot be mediated is a transport Looply
|
|
397
|
+
* will not drive". Until now that was a statement of intent with nothing
|
|
398
|
+
* enforcing it: the default branch appended `allowedToolArgs` and this
|
|
399
|
+
* one appended nothing, so a configured provider ran through `cmd.exe`
|
|
400
|
+
* with its own file, shell and network tools fully enabled.
|
|
401
|
+
*
|
|
402
|
+
* ⚠️ LOOPLY CANNOT INVENT THE FLAG. It does not know what turns an
|
|
403
|
+
* unknown binary's tools off, and a guessed flag that silently does
|
|
404
|
+
* nothing reads exactly like one that works. So the person declares it
|
|
405
|
+
* and this refuses without it — which is the "or the launch is refused"
|
|
406
|
+
* half of the rule, and the only honest half available.
|
|
407
|
+
*/
|
|
408
|
+
const suppression = spec.noHostTools ?? [];
|
|
409
|
+
if (suppression.length === 0) {
|
|
410
|
+
return fail('the agent did not run: this provider is configured but does not say how its own tools are ' +
|
|
411
|
+
'turned off. Looply gives a model no host tools, and it cannot guess the flag for a binary ' +
|
|
412
|
+
'it does not know — set `agent.no_host_tools` to the arguments that disable them.');
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* 🔴 THE PLATFORM'S OWN SHELL, WHICH IS WHAT THE DEP COMMENT HAS ALWAYS
|
|
416
|
+
* CLAIMED THIS READS — and it read Windows' shell on every platform.
|
|
417
|
+
*
|
|
418
|
+
* Off Windows the spawn failed with `ENOENT` on
|
|
419
|
+
* `C:\Windows/System32/cmd.exe`, so no configured provider could be
|
|
420
|
+
* launched at all: a turn died before the prompt reached it, and every
|
|
421
|
+
* suite that drives a real `looply run` — round, coordinator, lifecycle,
|
|
422
|
+
* closure, admission — failed with a message naming a path that does not
|
|
423
|
+
* exist on the host.
|
|
424
|
+
*
|
|
425
|
+
* ⚠️ IT CHANGES NOTHING ABOUT TRUST. This transport is deliberately NOT
|
|
426
|
+
* contained on any platform — the comment above says why: a packaged
|
|
427
|
+
* provider spawns children with piped stdio, which an AppContainer cannot
|
|
428
|
+
* create — so the boundary that matters is the GATE's, and the gate still
|
|
429
|
+
* refuses rather than falling back where there is no container to make. The
|
|
430
|
+
* declared suppression arguments are appended here whatever the shell is,
|
|
431
|
+
* and a provider that declares none is still refused above.
|
|
432
|
+
*
|
|
433
|
+
* `/bin/sh` rather than `$SHELL`: the environment handed to this child is
|
|
434
|
+
* built rather than inherited, and a person's interactive shell is not a
|
|
435
|
+
* contract. `sh -c <line>` takes the line as ONE argument, which is the
|
|
436
|
+
* same contract `cmd /d /s /c "<line>"` satisfies.
|
|
437
|
+
*/
|
|
438
|
+
const shell = deps.shell ?? (WIN_HOST ? (0, node_path_1.join)((0, untrusted_exec_1.systemRoot)(), 'System32', 'cmd.exe') : '/bin/sh');
|
|
439
|
+
executable = shell;
|
|
440
|
+
/**
|
|
441
|
+
* ⚠️ THE DECLARED ARGUMENTS ARE APPENDED, so a configured provider is
|
|
442
|
+
* mediated by the same shape the default one is: a command line plus the
|
|
443
|
+
* arguments that leave the model with nothing but Looply's tools.
|
|
444
|
+
*/
|
|
445
|
+
const line = [spec.command, ...suppression].join(' ');
|
|
446
|
+
argv = WIN_HOST ? ['/d', '/s', '/c', '"' + line + '"'] : ['-c', line];
|
|
447
|
+
// `windowsVerbatimArguments` is a Windows spawn option and the quoting it
|
|
448
|
+
// preserves is cmd's; `sh -c` needs neither.
|
|
449
|
+
verbatim = WIN_HOST;
|
|
450
|
+
runtimePath = declared.paths;
|
|
451
|
+
}
|
|
452
|
+
const base = (0, exec_domains_1.buildProviderEnv)(sessionDir, forwarded(spec, isReserved));
|
|
453
|
+
const env = {
|
|
454
|
+
...base,
|
|
455
|
+
...(runtimePath.length === 0
|
|
456
|
+
? {}
|
|
457
|
+
: { PATH: [...runtimePath, base['PATH'] ?? ''].filter((p) => p.length > 0).join(';') }),
|
|
458
|
+
// How a configured transport is told where its tools are. Claude reads
|
|
459
|
+
// the same thing off its command line; this is the provider-neutral
|
|
460
|
+
// spelling of it, and it names only Looply's own bridge.
|
|
461
|
+
LOOPLY_MCP_CONFIG: mcpConfigJson(launch),
|
|
462
|
+
LOOPLY_MCP_TOOLS: tool_bridge_1.TOOL_POLICIES[role].tools.map((t) => `mcp__${launch.name}__${t}`).join(','),
|
|
463
|
+
// The provider's persistent profile. Added to a scrubbed environment that
|
|
464
|
+
// is BUILT UP rather than inherited, so this is one named variable, not a
|
|
465
|
+
// loosening of what else crosses.
|
|
466
|
+
...(claudeConfigDir === null ? {} : { CLAUDE_CONFIG_DIR: claudeConfigDir, ...exports.BUILT_IN_PROVIDER_ENV }),
|
|
467
|
+
};
|
|
468
|
+
return await new Promise((resolve) => {
|
|
469
|
+
let out = '';
|
|
470
|
+
let droppedChars = 0;
|
|
471
|
+
/**
|
|
472
|
+
* Keeps the TAIL: see `MAX_TRANSPORT_OUTPUT_CHARS`. Trimmed on the way in
|
|
473
|
+
* rather than at the end, because holding it all and slicing afterwards
|
|
474
|
+
* would be the very allocation this prevents.
|
|
475
|
+
*/
|
|
476
|
+
const absorb = (chunk) => {
|
|
477
|
+
out += chunk;
|
|
478
|
+
if (out.length > exports.MAX_TRANSPORT_OUTPUT_CHARS) {
|
|
479
|
+
const over = out.length - exports.MAX_TRANSPORT_OUTPUT_CHARS;
|
|
480
|
+
out = out.slice(over);
|
|
481
|
+
droppedChars += over;
|
|
482
|
+
}
|
|
483
|
+
};
|
|
484
|
+
const collected = () => droppedChars === 0
|
|
485
|
+
? out
|
|
486
|
+
: `… ${droppedChars} characters of transport output dropped, over the ${exports.MAX_TRANSPORT_OUTPUT_CHARS}-character bound …\n${out}`;
|
|
487
|
+
let done = false;
|
|
488
|
+
let timer;
|
|
489
|
+
const child = spawnFn(executable, argv, {
|
|
490
|
+
cwd: sessionDir,
|
|
491
|
+
// Cast, not spread. `ProcessEnv` is declared with a REQUIRED NODE_ENV
|
|
492
|
+
// by a type package elsewhere in this tree, and the tempting fix —
|
|
493
|
+
// starting from `process.env` — is exactly the inheritance this file
|
|
494
|
+
// exists to prevent.
|
|
495
|
+
env: env,
|
|
496
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
497
|
+
// NEVER `shell: true`. The executable and its arguments are named
|
|
498
|
+
// explicitly; the one place a shell is involved is a configured
|
|
499
|
+
// provider's own line, where cmd is named outright above.
|
|
500
|
+
shell: false,
|
|
501
|
+
...(verbatim ? { windowsVerbatimArguments: true } : {}),
|
|
502
|
+
});
|
|
503
|
+
// Given back the moment it settles, so a finished transport is not killed
|
|
504
|
+
// later by a shutdown that still believes it is running.
|
|
505
|
+
let release;
|
|
506
|
+
if (owned && child.pid !== undefined) {
|
|
507
|
+
const pid = child.pid;
|
|
508
|
+
release = owned.adopt({
|
|
509
|
+
pid,
|
|
510
|
+
label: `model transport (${role})`,
|
|
511
|
+
kill: () => killTree(pid),
|
|
512
|
+
});
|
|
513
|
+
}
|
|
514
|
+
const finish = (r) => {
|
|
515
|
+
if (done)
|
|
516
|
+
return;
|
|
517
|
+
done = true;
|
|
518
|
+
release?.();
|
|
519
|
+
if (timer !== undefined)
|
|
520
|
+
clearTimeout(timer);
|
|
521
|
+
resolve(r);
|
|
522
|
+
};
|
|
523
|
+
child.stdout?.on('data', (d) => absorb(d.toString('utf8')));
|
|
524
|
+
child.stderr?.on('data', (d) => absorb(d.toString('utf8')));
|
|
525
|
+
child.on('error', (e) => finish(fail(`the agent did not run: ${e.message}`)));
|
|
526
|
+
child.stdin?.on('error', () => undefined);
|
|
527
|
+
child.on('exit', (code) => finish({ ok: code === 0, timedOut: false, ms: now() - started, output: collected() }));
|
|
528
|
+
timer = setTimeout(() => {
|
|
529
|
+
killTree(child.pid);
|
|
530
|
+
finish({ ok: false, timedOut: true, ms: now() - started, output: collected() });
|
|
531
|
+
}, timeoutMs);
|
|
532
|
+
try {
|
|
533
|
+
child.stdin?.end(prompt);
|
|
534
|
+
}
|
|
535
|
+
catch {
|
|
536
|
+
/* a transport that exited before reading its prompt is an exit, not a crash */
|
|
537
|
+
}
|
|
538
|
+
});
|
|
539
|
+
};
|
|
540
|
+
return async (prompt, timeoutMs) => {
|
|
541
|
+
const r = await invoke(prompt, timeoutMs);
|
|
542
|
+
/**
|
|
543
|
+
* 🔴 ONLY THE JSON PATH HAS AN ENVELOPE — AND ON THE TEXT PATH THE MODEL
|
|
544
|
+
* WOULD HAVE BEEN WRITING ITS OWN SPEND RECORD.
|
|
545
|
+
*
|
|
546
|
+
* The round runs with `--output-format text`, so the whole stream is model
|
|
547
|
+
* prose. The first version of this parsed it anyway, which means a model
|
|
548
|
+
* that emits `{"type":"result","subtype":"success","total_cost_usd":0.0}`
|
|
549
|
+
* anywhere in its transcript writes a line into the machine's durable spend
|
|
550
|
+
* ledger — the file a dollar ceiling is meant to read. An agent's assertion
|
|
551
|
+
* is never authoritative about what happened; that is the invariant the
|
|
552
|
+
* whole two-key rule rests on, and this was it being broken about money.
|
|
553
|
+
*
|
|
554
|
+
* ⚠️ AND THE TEXT PATH IS STILL RECORDED, WITHOUT DOLLARS. Skipping it
|
|
555
|
+
* would leave the most expensive path in the system out of the ledger
|
|
556
|
+
* entirely and total a night of rounds at $0.00. An unmeasured invocation
|
|
557
|
+
* makes the whole window unmeasurable, which `withinEnvelope` refuses on.
|
|
558
|
+
*
|
|
559
|
+
* ⚠️ AND NOT PARSING IT IS ALSO WHAT MAKES THE ROUND CHEAP AGAIN. The
|
|
560
|
+
* parse is quadratic in the number of unclosed braces (see
|
|
561
|
+
* `agent-envelope.ts` — 110 seconds on 2 MB before it was bounded), and
|
|
562
|
+
* this line was running it on every round transcript.
|
|
563
|
+
*/
|
|
564
|
+
/**
|
|
565
|
+
* 🔴 AND ONLY FOR THE BUILT-IN PROVIDER, WHOSE ENVELOPE THE CLI WRITES.
|
|
566
|
+
*
|
|
567
|
+
* Found by the closure acceptance check the moment the round moved to the
|
|
568
|
+
* JSON path: a CONFIGURED provider is an arbitrary command, and its stdout
|
|
569
|
+
* is the model's own stream — `output_format_flag` may be empty, and
|
|
570
|
+
* nothing between the model and this parser writes an envelope the model
|
|
571
|
+
* cannot forge. The check's stub printed `{"type":"result",
|
|
572
|
+
* "total_cost_usd":99999}` in its prose and the parser dutifully made it a
|
|
573
|
+
* ledger row. With Claude Code on `--output-format json` the model's text
|
|
574
|
+
* sits INSIDE the envelope's `result` string, escaped, so the last object
|
|
575
|
+
* on the stream is the CLI's own; that is the only stream this trusts.
|
|
576
|
+
* A configured provider's invocation is recorded with `usd` absent —
|
|
577
|
+
* unmeasured, never zero — exactly as the text path always was.
|
|
578
|
+
*/
|
|
579
|
+
const format = builtIn ? requested : 'text';
|
|
580
|
+
const env = format === 'json' ? (0, agent_envelope_1.parseAgentEnvelope)(r.output ?? '') : null;
|
|
581
|
+
record({ ms: r.ms, ...(env?.cost === undefined ? {} : { cost: env.cost }) });
|
|
582
|
+
return r;
|
|
583
|
+
};
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
* Kill the transport AND everything under it.
|
|
587
|
+
*
|
|
588
|
+
* `child.kill()` is not enough. A configured provider is launched through the
|
|
589
|
+
* shell, so the tree is cmd -> provider -> bridge, and killing the top of it
|
|
590
|
+
* leaves the rest running. This was observed rather than imagined: stopping a
|
|
591
|
+
* round mid-turn left a live stub and a live bridge behind, still holding a
|
|
592
|
+
* project, for as long as the machine stayed up — and they went on contending
|
|
593
|
+
* for container profiles with every run afterwards.
|
|
594
|
+
*
|
|
595
|
+
* The contained half was already safe: each contained process is held in a job
|
|
596
|
+
* object that dies with it. This is about the trusted processes above it.
|
|
597
|
+
*/
|
|
598
|
+
function killTree(pid) {
|
|
599
|
+
if (pid === undefined)
|
|
600
|
+
return;
|
|
601
|
+
try {
|
|
602
|
+
if (process.platform === 'win32') {
|
|
603
|
+
/**
|
|
604
|
+
* ABSOLUTE, and with a cwd looply owns.
|
|
605
|
+
*
|
|
606
|
+
* A bare name here inherits `process.cwd()`, which for a run IS the
|
|
607
|
+
* project directory — and Windows searches the cwd before PATH, so the
|
|
608
|
+
* contained agent (granted write over that directory) could put a
|
|
609
|
+
* `taskkill.exe` there and have the daemon run it. Same rule as the git
|
|
610
|
+
* binary; the name is different and the consequence is identical.
|
|
611
|
+
*/
|
|
612
|
+
const system32 = (0, node_path_1.join)((0, untrusted_exec_1.systemRoot)(), 'System32');
|
|
613
|
+
(0, node_child_process_1.spawn)((0, node_path_1.join)(system32, 'taskkill.exe'), ['/PID', String(pid), '/T', '/F'], {
|
|
614
|
+
stdio: 'ignore',
|
|
615
|
+
cwd: system32,
|
|
616
|
+
});
|
|
617
|
+
return;
|
|
618
|
+
}
|
|
619
|
+
process.kill(pid);
|
|
620
|
+
}
|
|
621
|
+
catch {
|
|
622
|
+
/* already gone */
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
//# sourceMappingURL=model-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-transport.js","sourceRoot":"","sources":["../src/model-transport.ts"],"names":[],"mappings":"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"}
|