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,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.providerExecutableFor = providerExecutableFor;
|
|
4
|
+
exports.providerProfileDir = providerProfileDir;
|
|
5
|
+
exports.checkProviderAuth = checkProviderAuth;
|
|
6
|
+
const node_child_process_1 = require("node:child_process");
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_os_1 = require("node:os");
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
10
|
+
/**
|
|
11
|
+
* WHO OWNS THE PROVIDER'S CREDENTIAL. NOT LOOPLY.
|
|
12
|
+
*
|
|
13
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
14
|
+
* 🔴 THIS FILE USED TO COPY THE OPERATOR'S SUBSCRIPTION CREDENTIAL INTO EVERY
|
|
15
|
+
* RUN. `seedProviderState` read `~/.claude/.credentials.json` and wrote it into
|
|
16
|
+
* each run's sterile session directory, once per launch. It worked, and it was
|
|
17
|
+
* never approved as a design: Looply held a copy of a credential it does not
|
|
18
|
+
* own, in a directory it also sweeps as residue, once per execution. Nine such
|
|
19
|
+
* copies were found on this machine and disposed of.
|
|
20
|
+
*
|
|
21
|
+
* The provider owns its own credential now. Looply stores a PATH.
|
|
22
|
+
*
|
|
23
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
24
|
+
* HOW IT WORKS, AND WHY THIS PARTICULAR MECHANISM.
|
|
25
|
+
*
|
|
26
|
+
* `CLAUDE_CONFIG_DIR` relocates the provider's whole profile — where it looks
|
|
27
|
+
* for credentials and where it keeps project state. Verified against the
|
|
28
|
+
* installed 2.1.260 rather than assumed: pointed at an empty directory, `auth
|
|
29
|
+
* status` reported `loggedIn: false` and a `projectsDirectory` inside it. Both
|
|
30
|
+
* halves matter. It relocates, AND it starts clean rather than inheriting the
|
|
31
|
+
* operator's `~/.claude` login, settings, hooks, plugins or transcripts.
|
|
32
|
+
*
|
|
33
|
+
* ⚠️ THE PROFILE IS MACHINE STATE, NOT PROJECT STATE. It is resolved from the
|
|
34
|
+
* daemon's own home, never from `.looply/config.yaml` — that file is inside the
|
|
35
|
+
* worktree, which the model may edit. A worker that could name the provider
|
|
36
|
+
* profile could point it at a directory it had written.
|
|
37
|
+
*
|
|
38
|
+
* ⚠️ AND IT IS DELIBERATELY NOT UNDER `provider-sessions/`. That tree is
|
|
39
|
+
* residue: `workspace-residue-sweep` deletes it when a workspace is retired. A
|
|
40
|
+
* credential store inside a cleanup root is a credential store a reap destroys.
|
|
41
|
+
*
|
|
42
|
+
* ⚠️ WHAT THIS DOES NOT CLAIM. Not process confinement — the provider still runs
|
|
43
|
+
* with host-user authority and can read what the operator can read. Not separate
|
|
44
|
+
* account quotas, not logout independence on the account side, and not secure
|
|
45
|
+
* erasure of anything. It is narrower than all of those: Looply no longer copies
|
|
46
|
+
* or handles the credential, and the provider manages its own.
|
|
47
|
+
*/
|
|
48
|
+
/**
|
|
49
|
+
* The persistent, operator-controlled provider profile.
|
|
50
|
+
*
|
|
51
|
+
* One per machine, beside Looply's other machine state. The operator logs into
|
|
52
|
+
* it once with the provider's own flow; nothing here reads what lands there.
|
|
53
|
+
*/
|
|
54
|
+
/**
|
|
55
|
+
* The provider executable inside an installed Claude Code package.
|
|
56
|
+
*
|
|
57
|
+
* 🔴 ONE DEFINITION, BECAUSE TWO WOULD DRIFT. `model-transport` composes this
|
|
58
|
+
* path to launch the provider and `doctor` needs the identical one to ask whether
|
|
59
|
+
* that provider is logged in. A readiness check against a different binary is the
|
|
60
|
+
* same class of mistake as one against a different profile: it answers honestly
|
|
61
|
+
* about something nobody is going to run.
|
|
62
|
+
*
|
|
63
|
+
* `null` in, `null` out — no package, no executable, and the caller says so in
|
|
64
|
+
* its own words.
|
|
65
|
+
*/
|
|
66
|
+
function providerExecutableFor(packageDir) {
|
|
67
|
+
return packageDir === null ? null : (0, node_path_1.join)(packageDir, 'bin', 'claude.exe');
|
|
68
|
+
}
|
|
69
|
+
function providerProfileDir(deps = {}) {
|
|
70
|
+
return (0, node_path_1.join)(deps.home ?? (0, node_os_1.homedir)(), '.looply', 'provider-profile');
|
|
71
|
+
}
|
|
72
|
+
const DEFAULT_STATUS_TIMEOUT_MS = 20_000;
|
|
73
|
+
function defaultRun(exe, argv, env, timeoutMs) {
|
|
74
|
+
return (0, node_child_process_1.execFileSync)(exe, [...argv], {
|
|
75
|
+
encoding: 'utf8',
|
|
76
|
+
timeout: timeoutMs,
|
|
77
|
+
env: env,
|
|
78
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Is the provider ready to authenticate itself, in the profile the run will use?
|
|
83
|
+
*
|
|
84
|
+
* ⚠️ NO MODEL IS INVOKED. `auth status` is a local command that prints the
|
|
85
|
+
* profile's own state as JSON. Checking whether a login exists must not cost a
|
|
86
|
+
* turn, and a check that did would be a check nobody could afford to run.
|
|
87
|
+
*
|
|
88
|
+
* ⚠️ AND IT ASKS IN THE SAME PROFILE THE RUN WILL USE. A readiness check against
|
|
89
|
+
* a different `CLAUDE_CONFIG_DIR` answers a different question, which is exactly
|
|
90
|
+
* the class of mistake `doctor --provider` was repaired for once already.
|
|
91
|
+
*
|
|
92
|
+
* Nothing here reads, parses, copies or transports a credential. The only thing
|
|
93
|
+
* consumed is a boolean and a method name.
|
|
94
|
+
*/
|
|
95
|
+
function checkProviderAuth(executable, env, deps = {}) {
|
|
96
|
+
const profile = providerProfileDir(deps);
|
|
97
|
+
// Created rather than required: an empty profile is a profile the operator
|
|
98
|
+
// can log into, and refusing before it exists helps nobody.
|
|
99
|
+
try {
|
|
100
|
+
(0, node_fs_1.mkdirSync)(profile, { recursive: true });
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
/* a profile that cannot be made shows up as a status failure below */
|
|
104
|
+
}
|
|
105
|
+
if (!(0, node_fs_1.existsSync)(executable)) {
|
|
106
|
+
return {
|
|
107
|
+
ok: false,
|
|
108
|
+
reason: 'no_executable',
|
|
109
|
+
profile,
|
|
110
|
+
because: `no provider executable at ${executable}`,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const run = deps.run ?? defaultRun;
|
|
114
|
+
let out;
|
|
115
|
+
try {
|
|
116
|
+
out = run(executable, ['auth', 'status'], env, deps.timeoutMs ?? DEFAULT_STATUS_TIMEOUT_MS);
|
|
117
|
+
}
|
|
118
|
+
catch (e) {
|
|
119
|
+
const err = e;
|
|
120
|
+
// `execFileSync` reports a timeout by killing the child, which surfaces as a
|
|
121
|
+
// signal rather than as a distinct code.
|
|
122
|
+
if (err.code === 'ETIMEDOUT' || err.signal === 'SIGTERM') {
|
|
123
|
+
return {
|
|
124
|
+
ok: false,
|
|
125
|
+
reason: 'timed_out',
|
|
126
|
+
profile,
|
|
127
|
+
because: `the provider did not answer \`auth status\` within the timeout`,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* 🔴 A NON-ZERO EXIT IS HOW THIS PROVIDER SAYS "NOT LOGGED IN".
|
|
132
|
+
*
|
|
133
|
+
* Measured on 2.1.260 against an empty profile: exit status 1, empty
|
|
134
|
+
* stderr, and the correct JSON on stdout saying `loggedIn: false`. The
|
|
135
|
+
* first version of this function read the exit code and reported
|
|
136
|
+
* `status_failed` — which is the same error in the other direction as
|
|
137
|
+
* calling everything a login problem. An answer that ARRIVED must be read
|
|
138
|
+
* before the exit code is judged.
|
|
139
|
+
*/
|
|
140
|
+
const said = String(err.stdout ?? '');
|
|
141
|
+
if (said.trim() !== '') {
|
|
142
|
+
out = said;
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
return {
|
|
146
|
+
ok: false,
|
|
147
|
+
reason: 'status_failed',
|
|
148
|
+
profile,
|
|
149
|
+
because: `\`auth status\` failed with no answer: ${err.message}`,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
let parsed;
|
|
154
|
+
try {
|
|
155
|
+
parsed = JSON.parse(out);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return {
|
|
159
|
+
ok: false,
|
|
160
|
+
reason: 'unreadable_status',
|
|
161
|
+
profile,
|
|
162
|
+
// The ANSWER's shape, never its content: a status blob could carry an
|
|
163
|
+
// account identifier, and this line goes into logs.
|
|
164
|
+
because: `\`auth status\` did not answer JSON (${out.length} bytes)`,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
if (parsed.loggedIn !== true) {
|
|
168
|
+
return {
|
|
169
|
+
ok: false,
|
|
170
|
+
reason: 'unauthenticated',
|
|
171
|
+
profile,
|
|
172
|
+
because: `the provider is not logged in for this profile. Run: ` +
|
|
173
|
+
`CLAUDE_CONFIG_DIR=${profile} "${executable}" auth login`,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
ok: true,
|
|
178
|
+
profile,
|
|
179
|
+
method: typeof parsed.authMethod === 'string' ? parsed.authMethod : 'unknown',
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=provider-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-state.js","sourceRoot":"","sources":["../src/provider-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import type { AgentSpec } from './agent-exec';
|
|
2
|
+
/**
|
|
3
|
+
* THE PROVIDERS LOOPLY KNOWS HOW TO START, AND HOW WELL IT KNOWS THEM.
|
|
4
|
+
*
|
|
5
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
6
|
+
* 🔴 EVERY PRESET CARRIES ITS PROVENANCE, AND THAT IS THE POINT OF THIS FILE.
|
|
7
|
+
*
|
|
8
|
+
* A preset is a command line: a binary, some flags, and an assumption about how
|
|
9
|
+
* the prompt reaches the model. Getting any of it wrong produces a process that
|
|
10
|
+
* starts, accepts a prompt, and does nothing useful — or worse, one that hangs
|
|
11
|
+
* for the whole of an overnight run.
|
|
12
|
+
*
|
|
13
|
+
* So each preset says whether it has been EXERCISED or merely DECLARED:
|
|
14
|
+
*
|
|
15
|
+
* 'exercised' a real process has been driven through this exact command line
|
|
16
|
+
* in a test in this repository, and the transcript came back.
|
|
17
|
+
* 'declared' written from a provider's documentation. Nobody here has run
|
|
18
|
+
* it. It is a starting point for a person to confirm, not a
|
|
19
|
+
* promise that it works.
|
|
20
|
+
*
|
|
21
|
+
* ⚠️ A `declared` PRESET IS NOT A BUG AND MUST NOT BE PRESENTED AS VERIFIED.
|
|
22
|
+
* Neither the Codex CLI nor the Gemini CLI is installed on the machine this was
|
|
23
|
+
* built on — `command -v` finds neither — so shipping their flags as known-good
|
|
24
|
+
* would be inventing a measurement. What closes that gap is not more confident
|
|
25
|
+
* wording; it is `preflightProvider`, which runs the thing on the machine that
|
|
26
|
+
* has it and reports what actually happened.
|
|
27
|
+
*
|
|
28
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
29
|
+
* WHY A REGISTRY AT ALL, GIVEN `agent.command` ALREADY TAKES ANY STRING
|
|
30
|
+
*
|
|
31
|
+
* Because the string is the easy half. The hard half is the three facts around
|
|
32
|
+
* it — whether the prompt goes on stdin or in an argument, whether the binary
|
|
33
|
+
* has an output-format flag, and where its runtime lives so containment can
|
|
34
|
+
* grant it — and those are what a person cannot guess and will get wrong.
|
|
35
|
+
*/
|
|
36
|
+
/** How the prompt reaches the model. */
|
|
37
|
+
export type PromptChannel =
|
|
38
|
+
/**
|
|
39
|
+
* Written to the process's stdin, which is what Looply does everywhere.
|
|
40
|
+
*
|
|
41
|
+
* 🔴 THE ONLY CHANNEL THE TRANSPORT IMPLEMENTS. A provider needing anything
|
|
42
|
+
* else is not merely differently configured — it needs code, and saying so is
|
|
43
|
+
* the honest form of this field. See `SUPPORTED_PROMPT_CHANNELS`.
|
|
44
|
+
*/
|
|
45
|
+
'stdin'
|
|
46
|
+
/** Passed as a trailing command-line argument. NOT IMPLEMENTED. */
|
|
47
|
+
| 'argument';
|
|
48
|
+
/**
|
|
49
|
+
* What the transport can actually deliver today.
|
|
50
|
+
*
|
|
51
|
+
* ⚠️ A PRESET NAMING AN UNSUPPORTED CHANNEL IS REFUSED AT RESOLUTION RATHER
|
|
52
|
+
* THAN AT ROUND 1. The alternative is a run that starts, writes a prompt into a
|
|
53
|
+
* stdin nothing is reading, and waits — which looks exactly like a slow model.
|
|
54
|
+
*/
|
|
55
|
+
export declare const SUPPORTED_PROMPT_CHANNELS: readonly PromptChannel[];
|
|
56
|
+
export type Provenance = 'exercised' | 'declared';
|
|
57
|
+
export interface ProviderPreset {
|
|
58
|
+
/** The name a person writes in `agent.provider`. */
|
|
59
|
+
readonly id: string;
|
|
60
|
+
/** What it is, for a message a person reads. */
|
|
61
|
+
readonly label: string;
|
|
62
|
+
readonly spec: AgentSpec;
|
|
63
|
+
readonly promptChannel: PromptChannel;
|
|
64
|
+
readonly provenance: Provenance;
|
|
65
|
+
/**
|
|
66
|
+
* Where the flags came from, in one sentence.
|
|
67
|
+
*
|
|
68
|
+
* 🔴 REQUIRED, INCLUDING FOR `exercised` ONES. "It works" is not provenance;
|
|
69
|
+
* what ran, and what it proved, is.
|
|
70
|
+
*/
|
|
71
|
+
readonly source: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* ⚠️ ORDER IS NOT PREFERENCE. This is a lookup, and presenting it as a ranking
|
|
75
|
+
* would imply a comparison nobody here has made — two of the three have never
|
|
76
|
+
* been run at all.
|
|
77
|
+
*/
|
|
78
|
+
export declare const PROVIDER_PRESETS: readonly ProviderPreset[];
|
|
79
|
+
export declare function findPreset(id: string): ProviderPreset | undefined;
|
|
80
|
+
export interface ResolveOk {
|
|
81
|
+
ok: true;
|
|
82
|
+
spec: AgentSpec;
|
|
83
|
+
preset: ProviderPreset | null;
|
|
84
|
+
/**
|
|
85
|
+
* Said out loud when a preset has never been run here.
|
|
86
|
+
*
|
|
87
|
+
* ⚠️ A WARNING, NOT A REFUSAL. Refusing would make Looply unusable with a
|
|
88
|
+
* provider that works perfectly well and simply has not been tested in this
|
|
89
|
+
* repository — which is a statement about us, not about the provider.
|
|
90
|
+
*/
|
|
91
|
+
warning: string | null;
|
|
92
|
+
}
|
|
93
|
+
export interface ResolveErr {
|
|
94
|
+
ok: false;
|
|
95
|
+
message: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Turn a configured provider name into a spec, or say why it cannot be one.
|
|
99
|
+
*
|
|
100
|
+
* ⚠️ FLAT RESULT, NOT A DISCRIMINATED UNION ON A NEGATED TAG. `strict` is off in
|
|
101
|
+
* this repository and `if (!r.ok) return r.message` does not narrow; the shape
|
|
102
|
+
* here is the one that survives that.
|
|
103
|
+
*/
|
|
104
|
+
export declare function resolveProvider(input: {
|
|
105
|
+
readonly provider?: string;
|
|
106
|
+
readonly spec: AgentSpec;
|
|
107
|
+
}): ResolveOk | ResolveErr;
|
|
108
|
+
/**
|
|
109
|
+
* The agent spec a command should actually launch, preset applied.
|
|
110
|
+
*
|
|
111
|
+
* 🔴 THREE COMMANDS RESOLVED THE SAME PROJECT THREE DIFFERENT WAYS. `looply
|
|
112
|
+
* run` called `resolveProvider`; `looply scan` and `looply verify` passed
|
|
113
|
+
* `config.agent` straight through, so `agent.provider` was ignored entirely and
|
|
114
|
+
* the same repository used a different binary depending on which verb was
|
|
115
|
+
* typed. A preset that supplies "the prompt goes on stdin" and "this binary has
|
|
116
|
+
* no output-format flag" is not advice — it is how the process is started, and
|
|
117
|
+
* a command that skips it starts a different process.
|
|
118
|
+
*
|
|
119
|
+
* One function, so a fourth command cannot invent a fourth answer.
|
|
120
|
+
*/
|
|
121
|
+
export declare function agentSpecFor(config: {
|
|
122
|
+
readonly provider?: string;
|
|
123
|
+
readonly agent: AgentSpec;
|
|
124
|
+
}): {
|
|
125
|
+
ok: true;
|
|
126
|
+
spec: AgentSpec;
|
|
127
|
+
warning: string | null;
|
|
128
|
+
} | {
|
|
129
|
+
ok: false;
|
|
130
|
+
message: string;
|
|
131
|
+
};
|
|
132
|
+
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,wCAAwC;AACxC,MAAM,MAAM,aAAa;AACvB;;;;;;GAMG;AACD,OAAO;AACT,mEAAmE;GACjE,UAAU,CAAC;AAEf;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,aAAa,EAAc,CAAC;AAE7E,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;AAElD,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAwCrD,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEjE;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B;;;;;;OAMG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC1B,GAAG,SAAS,GAAG,UAAU,CA2EzB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;CAC3B,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAOzF"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PROVIDER_PRESETS = exports.SUPPORTED_PROMPT_CHANNELS = void 0;
|
|
4
|
+
exports.findPreset = findPreset;
|
|
5
|
+
exports.resolveProvider = resolveProvider;
|
|
6
|
+
exports.agentSpecFor = agentSpecFor;
|
|
7
|
+
/**
|
|
8
|
+
* What the transport can actually deliver today.
|
|
9
|
+
*
|
|
10
|
+
* ⚠️ A PRESET NAMING AN UNSUPPORTED CHANNEL IS REFUSED AT RESOLUTION RATHER
|
|
11
|
+
* THAN AT ROUND 1. The alternative is a run that starts, writes a prompt into a
|
|
12
|
+
* stdin nothing is reading, and waits — which looks exactly like a slow model.
|
|
13
|
+
*/
|
|
14
|
+
exports.SUPPORTED_PROMPT_CHANNELS = ['stdin'];
|
|
15
|
+
/**
|
|
16
|
+
* ⚠️ ORDER IS NOT PREFERENCE. This is a lookup, and presenting it as a ranking
|
|
17
|
+
* would imply a comparison nobody here has made — two of the three have never
|
|
18
|
+
* been run at all.
|
|
19
|
+
*/
|
|
20
|
+
exports.PROVIDER_PRESETS = [
|
|
21
|
+
{
|
|
22
|
+
id: 'claude',
|
|
23
|
+
label: 'Claude Code',
|
|
24
|
+
spec: {
|
|
25
|
+
command: 'claude -p --dangerously-skip-permissions',
|
|
26
|
+
outputFormatFlag: '--output-format',
|
|
27
|
+
},
|
|
28
|
+
promptChannel: 'stdin',
|
|
29
|
+
provenance: 'exercised',
|
|
30
|
+
source: 'The repository default since the transport was built. Driven end to end by the round e2e suite and by a compiled fake standing in for the real binary, both through this exact command line.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
id: 'codex',
|
|
34
|
+
label: 'OpenAI Codex CLI',
|
|
35
|
+
spec: {
|
|
36
|
+
// No output-format flag is claimed. An empty string is the contract's own
|
|
37
|
+
// way of saying "this binary has none", and inventing one would produce a
|
|
38
|
+
// process refused at startup for an unknown option.
|
|
39
|
+
command: 'codex exec',
|
|
40
|
+
outputFormatFlag: '',
|
|
41
|
+
},
|
|
42
|
+
promptChannel: 'stdin',
|
|
43
|
+
provenance: 'declared',
|
|
44
|
+
source: 'Written from the published CLI documentation. NOT installed on the machine this was built on and never executed here — confirm with `looply doctor --provider` before trusting it.',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: 'gemini',
|
|
48
|
+
label: 'Gemini CLI',
|
|
49
|
+
spec: {
|
|
50
|
+
command: 'gemini',
|
|
51
|
+
outputFormatFlag: '',
|
|
52
|
+
},
|
|
53
|
+
promptChannel: 'stdin',
|
|
54
|
+
provenance: 'declared',
|
|
55
|
+
source: 'Written from the published CLI documentation. NOT installed on the machine this was built on and never executed here — confirm with `looply doctor --provider` before trusting it.',
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
function findPreset(id) {
|
|
59
|
+
return exports.PROVIDER_PRESETS.find((p) => p.id === id);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Turn a configured provider name into a spec, or say why it cannot be one.
|
|
63
|
+
*
|
|
64
|
+
* ⚠️ FLAT RESULT, NOT A DISCRIMINATED UNION ON A NEGATED TAG. `strict` is off in
|
|
65
|
+
* this repository and `if (!r.ok) return r.message` does not narrow; the shape
|
|
66
|
+
* here is the one that survives that.
|
|
67
|
+
*/
|
|
68
|
+
function resolveProvider(input) {
|
|
69
|
+
if (input.provider === undefined || input.provider === '') {
|
|
70
|
+
return { ok: true, spec: input.spec, preset: null, warning: null };
|
|
71
|
+
}
|
|
72
|
+
const preset = findPreset(input.provider);
|
|
73
|
+
if (!preset) {
|
|
74
|
+
return {
|
|
75
|
+
ok: false,
|
|
76
|
+
message: `no such provider: ${input.provider}. Known: ${exports.PROVIDER_PRESETS.map((p) => p.id).join(', ')}. Any other agent is configured with agent.command instead.`,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (!exports.SUPPORTED_PROMPT_CHANNELS.includes(preset.promptChannel)) {
|
|
80
|
+
// 🔴 REFUSED AT RESOLUTION, NOT AT ROUND 1. A provider that wants the
|
|
81
|
+
// prompt as an argument would otherwise start, be handed a prompt on a
|
|
82
|
+
// stdin it never reads, and wait — indistinguishable from a slow model.
|
|
83
|
+
return {
|
|
84
|
+
ok: false,
|
|
85
|
+
message: `provider ${preset.id} needs the prompt on its ${preset.promptChannel}, and this build only delivers it on stdin. That is a code change, not a configuration one.`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Did the config FILE contain this key?
|
|
90
|
+
*
|
|
91
|
+
* A spec with no `declared` list at all — every hand-built one in the tree,
|
|
92
|
+
* and every fixture — answers false, so a preset supplies its own facts.
|
|
93
|
+
* That is the direction that cannot silently discard a person's intent,
|
|
94
|
+
* because a hand-built spec has no person behind it.
|
|
95
|
+
*/
|
|
96
|
+
const wrote = (key) => (input.spec.declared ?? []).includes(key);
|
|
97
|
+
return {
|
|
98
|
+
ok: true,
|
|
99
|
+
// 🔴 THE PRESET IS A DEFAULT, NOT AN OVERRIDE. An explicit `agent.command`
|
|
100
|
+
// wins, because somebody who wrote one is telling us something we do not
|
|
101
|
+
// know — a different binary name, a flag their build needs — and silently
|
|
102
|
+
// discarding it would be the worst kind of helpful.
|
|
103
|
+
/**
|
|
104
|
+
* 🔴 EXPLICIT MEANS WRITTEN DOWN, NOT MERELY PRESENT — AND THE OLD TEST
|
|
105
|
+
* MADE THE PRESET UNREACHABLE.
|
|
106
|
+
*
|
|
107
|
+
* `input.spec.command ? …` looks like "did the person write a command", and
|
|
108
|
+
* is not: `parseConfig` DEFAULTS `agent.command` to Claude's line, so it is
|
|
109
|
+
* truthy for every project that ever existed. The preset's command was
|
|
110
|
+
* therefore overridden every single time, and somebody who wrote
|
|
111
|
+
* `provider: codex` ran Claude — while being shown a warning about codex
|
|
112
|
+
* that reads as confirmation that codex is what they got.
|
|
113
|
+
*
|
|
114
|
+
* `declared` is the list of keys the FILE contained, so this asks the
|
|
115
|
+
* question it always meant to ask.
|
|
116
|
+
*
|
|
117
|
+
* 🔴 AND `no_host_tools` IS CARRIED. It was not in this spread at all, so a
|
|
118
|
+
* person who set `provider:` AND declared how their binary's tools are
|
|
119
|
+
* turned off had the declaration dropped on the floor — and was then
|
|
120
|
+
* refused at the first model call by a message naming the very field they
|
|
121
|
+
* had set. It is the one field on this object that decides whether the
|
|
122
|
+
* launch happens, and it was the one field that could not survive.
|
|
123
|
+
*/
|
|
124
|
+
spec: {
|
|
125
|
+
...preset.spec,
|
|
126
|
+
...(wrote('command') ? { command: input.spec.command } : {}),
|
|
127
|
+
...(wrote('output_format_flag') ? { outputFormatFlag: input.spec.outputFormatFlag } : {}),
|
|
128
|
+
...(input.spec.runtime?.length ? { runtime: input.spec.runtime } : {}),
|
|
129
|
+
...(input.spec.env?.length ? { env: input.spec.env } : {}),
|
|
130
|
+
...(input.spec.noHostTools?.length ? { noHostTools: input.spec.noHostTools } : {}),
|
|
131
|
+
...(input.spec.declared === undefined ? {} : { declared: input.spec.declared }),
|
|
132
|
+
},
|
|
133
|
+
preset,
|
|
134
|
+
warning: preset.provenance === 'declared'
|
|
135
|
+
? `provider ${preset.id} has never been run by Looply's own tests: ${preset.source}`
|
|
136
|
+
: null,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* The agent spec a command should actually launch, preset applied.
|
|
141
|
+
*
|
|
142
|
+
* 🔴 THREE COMMANDS RESOLVED THE SAME PROJECT THREE DIFFERENT WAYS. `looply
|
|
143
|
+
* run` called `resolveProvider`; `looply scan` and `looply verify` passed
|
|
144
|
+
* `config.agent` straight through, so `agent.provider` was ignored entirely and
|
|
145
|
+
* the same repository used a different binary depending on which verb was
|
|
146
|
+
* typed. A preset that supplies "the prompt goes on stdin" and "this binary has
|
|
147
|
+
* no output-format flag" is not advice — it is how the process is started, and
|
|
148
|
+
* a command that skips it starts a different process.
|
|
149
|
+
*
|
|
150
|
+
* One function, so a fourth command cannot invent a fourth answer.
|
|
151
|
+
*/
|
|
152
|
+
function agentSpecFor(config) {
|
|
153
|
+
const resolved = resolveProvider({
|
|
154
|
+
...(config.provider === undefined ? {} : { provider: config.provider }),
|
|
155
|
+
spec: config.agent,
|
|
156
|
+
});
|
|
157
|
+
if (!('spec' in resolved))
|
|
158
|
+
return { ok: false, message: resolved.message };
|
|
159
|
+
return { ok: true, spec: resolved.spec, warning: resolved.warning };
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { type PublicationRuling } from '@looply/core';
|
|
2
|
+
import { type CompatibleRecord } from './compatible-sets';
|
|
3
|
+
/**
|
|
4
|
+
* A PUBLICATION RECORDED FROM AN OPERATION THAT HAPPENED, NOT FROM A PERSON
|
|
5
|
+
* TYPING ONE.
|
|
6
|
+
*
|
|
7
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
8
|
+
* 🔴 `OWNER_CHARTER.md` §6.D, in its own words: *"The programme controller must
|
|
9
|
+
* drive the existing compatible-set workflow through real local integration
|
|
10
|
+
* operations, not require me to type 'published' records. Only observed
|
|
11
|
+
* authorized operations create receipts."*
|
|
12
|
+
*
|
|
13
|
+
* So this is called AFTER a real integration tick has already moved a ref —
|
|
14
|
+
* never before, and never on an intention. A receipt written for work that
|
|
15
|
+
* might not happen is worse than no receipt, because a person reading it would
|
|
16
|
+
* believe the convergence had moved.
|
|
17
|
+
*
|
|
18
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
19
|
+
* ⚠️ IT DECIDES NOTHING ITSELF. Every refusal comes from `publicationRuling` in
|
|
20
|
+
* core, which is the same function `looply repos --published` calls. That is
|
|
21
|
+
* the point of the fold existing: a run that wrote its own lines would be a
|
|
22
|
+
* second implementation of those refusals, and the one that forgets the drift
|
|
23
|
+
* check is the one that writes down a compatible pair that does not exist.
|
|
24
|
+
*
|
|
25
|
+
* ⚠️ AND IT IS NOT ATOMIC ACROSS REPOSITORIES, which the charter also says:
|
|
26
|
+
* *"No atomic cross-repository transaction claim."* One repository's
|
|
27
|
+
* publication is one record. The set says what is left.
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* What an integration tick actually did, as the tick reported it.
|
|
31
|
+
*
|
|
32
|
+
* ⚠️ NO REPOSITORY ID. The lane moves a ref in the checkout it was given; WHICH
|
|
33
|
+
* declared repository that checkout is is a question about the config, and
|
|
34
|
+
* `selfRepoId` answers it where the config is loaded. A lane that had to be
|
|
35
|
+
* told its own name could be told the wrong one.
|
|
36
|
+
*/
|
|
37
|
+
export interface ObservedRefMove {
|
|
38
|
+
/** The ref that moved — `looply/integration` today. */
|
|
39
|
+
readonly ref: string;
|
|
40
|
+
/** Where that ref points now, as the operation left it. */
|
|
41
|
+
readonly to: string;
|
|
42
|
+
}
|
|
43
|
+
/** The same move, once somebody has said which declared repository it happened in. */
|
|
44
|
+
export interface ObservedPublication extends ObservedRefMove {
|
|
45
|
+
readonly repo: string;
|
|
46
|
+
}
|
|
47
|
+
export interface PublicationRecorderDeps {
|
|
48
|
+
/** Every repository this project declares, with a path that can be read. */
|
|
49
|
+
declared(): readonly {
|
|
50
|
+
id: string;
|
|
51
|
+
path: string;
|
|
52
|
+
}[];
|
|
53
|
+
/**
|
|
54
|
+
* Where a repository is now.
|
|
55
|
+
*
|
|
56
|
+
* ⚠️ NULL, NEVER A GUESS — the same contract `ReposDeps` states. An
|
|
57
|
+
* unreadable repository must reach the ruling as absent so it answers
|
|
58
|
+
* `unmeasurable`; inventing a sha would turn "I could not look" into "it has
|
|
59
|
+
* drifted", and those call for opposite things.
|
|
60
|
+
*/
|
|
61
|
+
revisionOf(repo: {
|
|
62
|
+
id: string;
|
|
63
|
+
path: string;
|
|
64
|
+
}): Promise<{
|
|
65
|
+
sha: string;
|
|
66
|
+
from: string;
|
|
67
|
+
} | null>;
|
|
68
|
+
records(): Promise<readonly CompatibleRecord[]>;
|
|
69
|
+
append(record: CompatibleRecord): Promise<void>;
|
|
70
|
+
now(): string;
|
|
71
|
+
}
|
|
72
|
+
export interface RecorderOutcome {
|
|
73
|
+
readonly ruling: PublicationRuling;
|
|
74
|
+
/** True only when a record was appended. Never inferred from the kind. */
|
|
75
|
+
readonly recorded: boolean;
|
|
76
|
+
/** One line for the daemon log. */
|
|
77
|
+
readonly line: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Offer one observed publication to the ruling, and write the record only if it
|
|
81
|
+
* says to.
|
|
82
|
+
*
|
|
83
|
+
* The order matters and is the ruling's, not this function's: what makes the
|
|
84
|
+
* recording the WRONG ACT first, then drift, then whether it is already down.
|
|
85
|
+
* The one check that lives here is the last one, because it is about the
|
|
86
|
+
* OBSERVATION rather than about the set.
|
|
87
|
+
*/
|
|
88
|
+
export declare function recordObservedPublication(deps: PublicationRecorderDeps, observed: ObservedPublication): Promise<RecorderOutcome>;
|
|
89
|
+
/**
|
|
90
|
+
* Where a repository is now, on this machine.
|
|
91
|
+
*
|
|
92
|
+
* ⚠️ ONE IMPLEMENTATION, TWO CALLERS — `looply repos` and the daemon's
|
|
93
|
+
* integrator. Two copies of "where is this repository" are two copies that can
|
|
94
|
+
* disagree, and the one that disagrees is the one deciding whether a set has
|
|
95
|
+
* drifted.
|
|
96
|
+
*/
|
|
97
|
+
export declare function nodeRevisionOf(repo: {
|
|
98
|
+
id: string;
|
|
99
|
+
path: string;
|
|
100
|
+
}): Promise<{
|
|
101
|
+
sha: string;
|
|
102
|
+
from: string;
|
|
103
|
+
} | null>;
|
|
104
|
+
/**
|
|
105
|
+
* The daemon's recorder, or nothing at all.
|
|
106
|
+
*
|
|
107
|
+
* ⚠️ NOTHING is the right answer for most projects. A project that declares
|
|
108
|
+
* no sibling repositories has no compatible set to publish against, and a
|
|
109
|
+
* checkout that is not one of the declared repositories cannot say which one
|
|
110
|
+
* published — in both cases the honest thing is to have no recorder rather
|
|
111
|
+
* than one that refuses every tick into the log.
|
|
112
|
+
*/
|
|
113
|
+
export declare function nodePublicationRecorder(cwd: string, projectState: string, declared: readonly {
|
|
114
|
+
id: string;
|
|
115
|
+
path: string;
|
|
116
|
+
}[]): ((observed: ObservedRefMove) => Promise<string | null>) | undefined;
|
|
117
|
+
//# sourceMappingURL=publication-recorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publication-recorder.d.ts","sourceRoot":"","sources":["../src/publication-recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACpG,OAAO,EAAyD,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAMjH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,sFAAsF;AACtF,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,4EAA4E;IAC5E,QAAQ,IAAI,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpD;;;;;;;OAOG;IACH,UAAU,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC9F,OAAO,IAAI,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAAC;IAChD,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,GAAG,IAAI,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,uBAAuB,EAC7B,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAkD1B;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAetH;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GAChD,CAAC,CAAC,QAAQ,EAAE,eAAe,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,SAAS,CAsBrE"}
|