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,307 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toolchainId = toolchainId;
|
|
4
|
+
exports.sourceFingerprint = sourceFingerprint;
|
|
5
|
+
exports.forgetFingerprints = forgetFingerprints;
|
|
6
|
+
exports.toolchainsRoot = toolchainsRoot;
|
|
7
|
+
exports.ensureToolchainMirror = ensureToolchainMirror;
|
|
8
|
+
const node_crypto_1 = require("node:crypto");
|
|
9
|
+
const node_child_process_1 = require("node:child_process");
|
|
10
|
+
const node_fs_1 = require("node:fs");
|
|
11
|
+
const node_os_1 = require("node:os");
|
|
12
|
+
const node_path_1 = require("node:path");
|
|
13
|
+
/** The files copied, relative to the toolchain root. Order is not meaningful. */
|
|
14
|
+
const MIRRORED = [
|
|
15
|
+
'node.exe',
|
|
16
|
+
'npm.cmd',
|
|
17
|
+
'npx.cmd',
|
|
18
|
+
'npm',
|
|
19
|
+
'npx',
|
|
20
|
+
'node_modules/npm',
|
|
21
|
+
];
|
|
22
|
+
function sourceDir(deps) {
|
|
23
|
+
const exe = deps.nodeExe ?? process.execPath;
|
|
24
|
+
// `realpathSync` because the usual Windows install is a junction: nvm points
|
|
25
|
+
// `C:\Program Files\nodejs` at a per-version directory under the user's own
|
|
26
|
+
// AppData. Following it gets the real files and the real owner.
|
|
27
|
+
try {
|
|
28
|
+
return (0, node_path_1.dirname)((0, node_fs_1.realpathSync)(exe));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return (0, node_path_1.dirname)(exe);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function versionOf(exe) {
|
|
35
|
+
try {
|
|
36
|
+
return (0, node_child_process_1.execFileSync)(exe, ['--version'], { encoding: 'utf8' }).trim();
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return 'unknown';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* An identity that changes when the toolchain does.
|
|
44
|
+
*
|
|
45
|
+
* Version plus the runtime's own size, not a timestamp: an upgrade must produce
|
|
46
|
+
* a different id so the old mirror is not used for ever, and a rebuild of the
|
|
47
|
+
* same toolchain must produce the same one so it is not copied twice.
|
|
48
|
+
*
|
|
49
|
+
* Not a content hash of a 71-megabyte binary — that is minutes of work for a
|
|
50
|
+
* distinction the version and size already make, and this is a cache key rather
|
|
51
|
+
* than a security boundary.
|
|
52
|
+
*/
|
|
53
|
+
function toolchainId(deps = {}) {
|
|
54
|
+
const exe = deps.nodeExe ?? process.execPath;
|
|
55
|
+
const version = versionOf(exe).replace(/[^0-9a-zA-Z.]/g, '');
|
|
56
|
+
return `node-${version || 'unknown'}-${sourceFingerprint(sourceDir(deps)).slice(0, 16)}`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Cached per process, because the answer cannot change under a running daemon
|
|
60
|
+
* without the files changing, and hashing eighty megabytes before every gate
|
|
61
|
+
* step would be a real cost for a question asked many times a minute.
|
|
62
|
+
*/
|
|
63
|
+
/** Separators built from char codes: an escape in this file has been
|
|
64
|
+
* collapsed by tooling more than once, and a silently wrong separator
|
|
65
|
+
* produces a digest that is stable and meaningless. */
|
|
66
|
+
const SLASH = String.fromCharCode(47);
|
|
67
|
+
const NL = String.fromCharCode(10);
|
|
68
|
+
const SEP = String.fromCharCode(0);
|
|
69
|
+
const fingerprints = new Map();
|
|
70
|
+
/**
|
|
71
|
+
* A digest of what is actually mirrored — CONTENTS, not metadata.
|
|
72
|
+
*
|
|
73
|
+
* Version and size were not enough. A rebuild at the same version, or a patched
|
|
74
|
+
* binary of the same length, or a change anywhere in the npm tree while
|
|
75
|
+
* `node.exe` stands still, all left the old identity in place and the old mirror
|
|
76
|
+
* in use. That is a cache serving yesterday's runtime to today's gate.
|
|
77
|
+
*
|
|
78
|
+
* Sorted `path\u0000size\u0000sha256` lines, hashed as one canonical list, so the
|
|
79
|
+
* digest depends on the set of files and every byte in them and on nothing
|
|
80
|
+
* else — not on walk order, not on timestamps.
|
|
81
|
+
*
|
|
82
|
+
* This is a CACHE KEY, not an authority: it decides whether the copy is current,
|
|
83
|
+
* never whether anything is allowed.
|
|
84
|
+
*/
|
|
85
|
+
function sourceFingerprint(src) {
|
|
86
|
+
const cached = fingerprints.get(src);
|
|
87
|
+
if (cached !== undefined)
|
|
88
|
+
return cached;
|
|
89
|
+
const lines = [];
|
|
90
|
+
const walk = (abs, rel) => {
|
|
91
|
+
let st;
|
|
92
|
+
try {
|
|
93
|
+
st = (0, node_fs_1.statSync)(abs);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (st.isDirectory()) {
|
|
99
|
+
for (const name of (0, node_fs_1.readdirSync)(abs).sort())
|
|
100
|
+
walk((0, node_path_1.join)(abs, name), `${rel}/${name}`);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const h = (0, node_crypto_1.createHash)('sha256').update((0, node_fs_1.readFileSync)(abs)).digest('hex');
|
|
104
|
+
lines.push(`${rel}\u0000${st.size}\u0000${h}`);
|
|
105
|
+
};
|
|
106
|
+
for (const rel of MIRRORED)
|
|
107
|
+
walk((0, node_path_1.join)(src, ...rel.split(SLASH)), rel);
|
|
108
|
+
const digest = (0, node_crypto_1.createHash)('sha256').update(lines.sort().join(NL), 'utf8').digest('hex');
|
|
109
|
+
fingerprints.set(src, digest);
|
|
110
|
+
return digest;
|
|
111
|
+
}
|
|
112
|
+
/** For tests that change a fixture and need the next answer computed afresh. */
|
|
113
|
+
function forgetFingerprints() {
|
|
114
|
+
fingerprints.clear();
|
|
115
|
+
}
|
|
116
|
+
/** Every mirrored entry is present in the copy, not merely named by a manifest. */
|
|
117
|
+
function mirrorIsComplete(dir, manifest) {
|
|
118
|
+
for (const rel of manifest.files) {
|
|
119
|
+
if (!(0, node_fs_1.existsSync)((0, node_path_1.join)(dir, ...rel.split(SLASH))))
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
return (0, node_fs_1.existsSync)((0, node_path_1.join)(dir, 'node.exe'));
|
|
123
|
+
}
|
|
124
|
+
/** Where mirrors live: outside every repository, under the user's own home. */
|
|
125
|
+
function toolchainsRoot(deps = {}) {
|
|
126
|
+
return (0, node_path_1.join)(deps.home ?? (0, node_os_1.homedir)(), '.looply', 'toolchains');
|
|
127
|
+
}
|
|
128
|
+
function manifestAt(dir) {
|
|
129
|
+
try {
|
|
130
|
+
return JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(dir, 'looply-toolchain.json'), 'utf8'));
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/** The manifest at `dir`, but only when the copy it describes is actually there. */
|
|
137
|
+
function completeAt(dir) {
|
|
138
|
+
const m = manifestAt(dir);
|
|
139
|
+
return m !== null && mirrorIsComplete(dir, m) ? m : null;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* The mirror for the current toolchain, building it if it is not there.
|
|
143
|
+
*
|
|
144
|
+
* ATOMIC, because two gates can start at once and a half-copied runtime must
|
|
145
|
+
* never be executed. The copy goes into a private staging directory named for
|
|
146
|
+
* this process, is verified, and only then becomes the real one by a single
|
|
147
|
+
* rename. A racing caller either sees no mirror and builds its own staging copy,
|
|
148
|
+
* or sees a complete one — never a partial.
|
|
149
|
+
*
|
|
150
|
+
* The manifest is written INSIDE the staging directory before the rename, so a
|
|
151
|
+
* directory that exists without a readable manifest is a directory that lost the
|
|
152
|
+
* race to be renamed away, not a mirror to trust.
|
|
153
|
+
*/
|
|
154
|
+
/**
|
|
155
|
+
* Remove directories an earlier rename-aside could not.
|
|
156
|
+
*
|
|
157
|
+
* A superseded mirror is named for the process that set it aside, so nothing
|
|
158
|
+
* else will ever adopt it — but a locked file can outlive that process, and a
|
|
159
|
+
* directory nobody sweeps is a directory that grows. Best effort, on the
|
|
160
|
+
* rebuild path only, and never a reason to fail a build.
|
|
161
|
+
*/
|
|
162
|
+
function sweepSuperseded(root) {
|
|
163
|
+
let names;
|
|
164
|
+
try {
|
|
165
|
+
names = (0, node_fs_1.readdirSync)(root);
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
for (const name of names) {
|
|
171
|
+
if (!name.includes('.superseded-'))
|
|
172
|
+
continue;
|
|
173
|
+
try {
|
|
174
|
+
(0, node_fs_1.rmSync)((0, node_path_1.join)(root, name), { recursive: true, force: true });
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
/* still locked; next time */
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function ensureToolchainMirror(deps = {}) {
|
|
182
|
+
const id = toolchainId(deps);
|
|
183
|
+
const root = toolchainsRoot(deps);
|
|
184
|
+
const target = (0, node_path_1.join)(root, id);
|
|
185
|
+
const src = sourceDir(deps);
|
|
186
|
+
const found = completeAt(target);
|
|
187
|
+
// A MANIFEST IS NOT A MIRROR. A readable manifest beside a missing `node.exe`
|
|
188
|
+
// is a copy that was interrupted or half-deleted, and reusing it would hand
|
|
189
|
+
// the gate a runtime that is not there.
|
|
190
|
+
if (found !== null && found.id === id) {
|
|
191
|
+
return { ok: true, path: target, id, manifest: found, built: false };
|
|
192
|
+
}
|
|
193
|
+
const exe = deps.nodeExe ?? process.execPath;
|
|
194
|
+
if (!(0, node_fs_1.existsSync)((0, node_path_1.join)(src, 'node.exe'))) {
|
|
195
|
+
return { ok: false, because: `no runtime to mirror at ${src}` };
|
|
196
|
+
}
|
|
197
|
+
const staging = `${target}.staging-${process.pid}-${Date.now()}`;
|
|
198
|
+
try {
|
|
199
|
+
(0, node_fs_1.mkdirSync)(staging, { recursive: true });
|
|
200
|
+
const copied = [];
|
|
201
|
+
for (const rel of MIRRORED) {
|
|
202
|
+
const from = (0, node_path_1.join)(src, rel.replace(/\//g, '\\'));
|
|
203
|
+
if (!(0, node_fs_1.existsSync)(from))
|
|
204
|
+
continue;
|
|
205
|
+
const to = (0, node_path_1.join)(staging, rel.replace(/\//g, '\\'));
|
|
206
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(to), { recursive: true });
|
|
207
|
+
(0, node_fs_1.cpSync)(from, to, { recursive: true });
|
|
208
|
+
copied.push(rel);
|
|
209
|
+
}
|
|
210
|
+
if (!copied.includes('node.exe')) {
|
|
211
|
+
return { ok: false, because: 'the runtime did not copy' };
|
|
212
|
+
}
|
|
213
|
+
const manifest = {
|
|
214
|
+
id,
|
|
215
|
+
nodeVersion: versionOf(exe),
|
|
216
|
+
npmVersion: copied.includes('npm.cmd') ? readNpmVersion(src) : null,
|
|
217
|
+
source: src,
|
|
218
|
+
sourceBytes: (0, node_fs_1.statSync)(exe).size,
|
|
219
|
+
files: copied,
|
|
220
|
+
createdAt: new Date().toISOString(),
|
|
221
|
+
};
|
|
222
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(staging, 'looply-toolchain.json'), `${JSON.stringify(manifest, null, 2)}\n`);
|
|
223
|
+
(0, node_fs_1.mkdirSync)(root, { recursive: true });
|
|
224
|
+
// A directory already sitting at the target is a build that died before it
|
|
225
|
+
// could be renamed into place, or a mirror that has since lost files.
|
|
226
|
+
// Rename will not replace a directory on Windows, so leaving it there would
|
|
227
|
+
// block every future rebuild — an incomplete mirror would stay incomplete
|
|
228
|
+
// for ever, and the gate would keep refusing to run.
|
|
229
|
+
//
|
|
230
|
+
// JUDGED BY COMPLETENESS, NOT BY THE MANIFEST. A readable manifest beside a
|
|
231
|
+
// missing `node.exe` used to survive this check, which made a half-deleted
|
|
232
|
+
// mirror permanent: the reuse gate rejected it, the rebuild could not
|
|
233
|
+
// replace it, and the catch below adopted it again unchanged.
|
|
234
|
+
//
|
|
235
|
+
// A mirror another process completed while we were copying IS complete, so
|
|
236
|
+
// it is not removed; we lose the rename and adopt theirs instead.
|
|
237
|
+
/**
|
|
238
|
+
* 🔴 RENAMED ASIDE, NEVER REMOVED, BECAUSE THIS PATH IS SHARED.
|
|
239
|
+
*
|
|
240
|
+
* `~/.looply/toolchains/<id>` is where EVERY workspace, every project and
|
|
241
|
+
* every concurrent looply process on this machine resolves `node.exe`. This
|
|
242
|
+
* was `rmSync(target, { recursive: true, force: true })`, and under N
|
|
243
|
+
* workspaces that is a delete of a directory a sibling's gate may be
|
|
244
|
+
* executing out of right now.
|
|
245
|
+
*
|
|
246
|
+
* ⚠️ AND `force: true` DOES NOT MAKE IT SAFE — it suppresses ENOENT and
|
|
247
|
+
* nothing else. A locked file makes `rmSync` throw PART OF THE WAY THROUGH,
|
|
248
|
+
* which is the worst outcome available: the shared mirror is now genuinely
|
|
249
|
+
* half-deleted, this build fails, and the next one finds exactly the
|
|
250
|
+
* incomplete directory this branch exists to clear.
|
|
251
|
+
*
|
|
252
|
+
* A rename is all-or-nothing. Either the directory moves aside whole — and
|
|
253
|
+
* what moved is then ours alone, named for this process — or it does not
|
|
254
|
+
* move at all and nothing was destroyed. On failure this falls through to
|
|
255
|
+
* the rename below, which fails, and the catch adopts whatever is really
|
|
256
|
+
* there. That is the same recovery the lost-race path already takes, and it
|
|
257
|
+
* cannot leave a shared mirror in pieces.
|
|
258
|
+
*/
|
|
259
|
+
if ((0, node_fs_1.existsSync)(target) && !completeAt(target)) {
|
|
260
|
+
const aside = `${target}.superseded-${process.pid}-${Date.now().toString(36)}`;
|
|
261
|
+
try {
|
|
262
|
+
(0, node_fs_1.renameSync)(target, aside);
|
|
263
|
+
// Ours alone now: a directory Windows let us rename held no open handle.
|
|
264
|
+
// Best effort even so — tidying must never become this function's verdict.
|
|
265
|
+
try {
|
|
266
|
+
(0, node_fs_1.rmSync)(aside, { recursive: true, force: true });
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
/* left for the sweep below */
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
// In use, or locked. Nothing was destroyed; the rename below will fail
|
|
274
|
+
// and the catch will adopt what is actually on disk.
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
sweepSuperseded(root);
|
|
278
|
+
try {
|
|
279
|
+
(0, node_fs_1.renameSync)(staging, target);
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
// Somebody else got there first between the clear above and this rename.
|
|
283
|
+
// Adopt theirs only if it is a mirror and not merely a manifest — the
|
|
284
|
+
// whole point of this rebuild was that a manifest alone is not enough.
|
|
285
|
+
(0, node_fs_1.rmSync)(staging, { recursive: true, force: true });
|
|
286
|
+
const other = completeAt(target);
|
|
287
|
+
if (other === null)
|
|
288
|
+
return { ok: false, because: 'the toolchain mirror could not be placed' };
|
|
289
|
+
return { ok: true, path: target, id, manifest: other, built: false };
|
|
290
|
+
}
|
|
291
|
+
return { ok: true, path: target, id, manifest, built: true };
|
|
292
|
+
}
|
|
293
|
+
catch (e) {
|
|
294
|
+
(0, node_fs_1.rmSync)(staging, { recursive: true, force: true });
|
|
295
|
+
return { ok: false, because: `the toolchain mirror could not be built (${e.message})` };
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
function readNpmVersion(src) {
|
|
299
|
+
try {
|
|
300
|
+
const pkg = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(src, 'node_modules', 'npm', 'package.json'), 'utf8'));
|
|
301
|
+
return pkg.version ?? null;
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=toolchain-mirror.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolchain-mirror.js","sourceRoot":"","sources":["../src/toolchain-mirror.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The first executable key this config defines, in words, or null if none.
|
|
3
|
+
*
|
|
4
|
+
* Takes the text rather than a path so the rule is testable without a
|
|
5
|
+
* repository, and so the caller decides what an unreadable config means.
|
|
6
|
+
*/
|
|
7
|
+
export declare function repoConfigTrouble(text: string): string | null;
|
|
8
|
+
/**
|
|
9
|
+
* WHERE A REPOSITORY ACTUALLY KEEPS ITS CONFIG.
|
|
10
|
+
*
|
|
11
|
+
* `<cwd>/.git` is a directory in an ordinary checkout and a FILE in a linked
|
|
12
|
+
* worktree, where it holds one line — `gitdir: <path>` — pointing at
|
|
13
|
+
* `<common>/worktrees/<name>`. That directory in turn holds a `commondir` file
|
|
14
|
+
* naming the shared metadata directory, and the config git reads for the
|
|
15
|
+
* repository lives in the SHARED one.
|
|
16
|
+
*
|
|
17
|
+
* ⚠️ THIS IS A SECURITY BOUNDARY, NOT A PATH CONVENIENCE. Reading
|
|
18
|
+
* `join(cwd, '.git', 'config')` in a linked worktree throws ENOTDIR, and the
|
|
19
|
+
* catch that used to sit here answered "no evidence of an attack" — so every
|
|
20
|
+
* `filter.<ANY>.clean` in the shared config would have gone live against `add`,
|
|
21
|
+
* `reset --hard`, `diff HEAD` and `status` the moment the first worktree
|
|
22
|
+
* existed, silently and with no log line.
|
|
23
|
+
*
|
|
24
|
+
* So the layout is resolved the way git resolves it, and the three answers are
|
|
25
|
+
* kept apart: there is no repository here, or here is where its metadata is, or
|
|
26
|
+
* there is a repository whose metadata could not be read — which is a REFUSAL,
|
|
27
|
+
* because a config that cannot be read is a config that cannot be cleared.
|
|
28
|
+
*/
|
|
29
|
+
export type GitLayout = {
|
|
30
|
+
kind: 'none';
|
|
31
|
+
} | {
|
|
32
|
+
kind: 'fault';
|
|
33
|
+
because: string;
|
|
34
|
+
} | {
|
|
35
|
+
kind: 'ok';
|
|
36
|
+
root: string;
|
|
37
|
+
gitDir: string;
|
|
38
|
+
commonDir: string;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Find the repository governing `cwd`, the way git does: look for a `.git`
|
|
42
|
+
* entry here, then in each parent, to the filesystem root.
|
|
43
|
+
*
|
|
44
|
+
* WALKING UP IS DELIBERATE. Run from a subdirectory, the old check looked at
|
|
45
|
+
* `<subdir>/.git`, found nothing, and returned "no trouble" — while every git
|
|
46
|
+
* command it was guarding still ran against the repository above. That was a
|
|
47
|
+
* second way to reach the same fail-open, and it did not need a worktree.
|
|
48
|
+
*/
|
|
49
|
+
export declare function resolveGitLayout(cwd: string): GitLayout;
|
|
50
|
+
/**
|
|
51
|
+
* Every config file that governs this repository, most-shared first.
|
|
52
|
+
*
|
|
53
|
+
* `config.worktree` is read only when `extensions.worktreeConfig` is set, but
|
|
54
|
+
* it is scanned unconditionally: a file that git might read is a file this
|
|
55
|
+
* check must not skip, and scanning one git ignores costs a refusal nobody
|
|
56
|
+
* could have exploited anyway.
|
|
57
|
+
*/
|
|
58
|
+
export declare function repoConfigPaths(layout: Extract<GitLayout, {
|
|
59
|
+
kind: 'ok';
|
|
60
|
+
}>): string[];
|
|
61
|
+
/**
|
|
62
|
+
* Judge the config of the repository governing `cwd`, in words, or null.
|
|
63
|
+
*
|
|
64
|
+
* A missing repository is not a fault and neither is a missing config file — a
|
|
65
|
+
* config that does not exist defines nothing. A repository whose metadata or
|
|
66
|
+
* config cannot be READ is a refusal: the whole mechanism is "decline before
|
|
67
|
+
* git runs", and declining is the only answer that stays sound when the file
|
|
68
|
+
* the decision rests on is unavailable.
|
|
69
|
+
*/
|
|
70
|
+
export declare function repoConfigTroubleAt(cwd: string): string | null;
|
|
71
|
+
/**
|
|
72
|
+
* The metadata directories of the worktree AT `dir`, or null when `dir` is not
|
|
73
|
+
* itself one.
|
|
74
|
+
*
|
|
75
|
+
* ⚠️ DELIBERATELY NOT THE ENCLOSING REPOSITORY, and the difference is the whole
|
|
76
|
+
* reason this is a separate function. {@link resolveGitLayout} walks up, which
|
|
77
|
+
* is the right answer to "whose config could execute when git runs here" — a
|
|
78
|
+
* command issued in a subdirectory is still governed by the repository above.
|
|
79
|
+
* It is the WRONG answer to "what does this grant own": a directory that merely
|
|
80
|
+
* SITS INSIDE a repository is not that repository's worktree, and protecting an
|
|
81
|
+
* ancestor's metadata would describe a boundary the container does not have.
|
|
82
|
+
*
|
|
83
|
+
* Caught by `agent-contained.spec.ts`, which passes a `projectDir` that is not
|
|
84
|
+
* a repository and pins the protected list at three entries.
|
|
85
|
+
*/
|
|
86
|
+
export declare function worktreeMetadata(dir: string): {
|
|
87
|
+
gitDir: string;
|
|
88
|
+
commonDir: string;
|
|
89
|
+
} | null;
|
|
90
|
+
/**
|
|
91
|
+
* Whether `cwd` is the root of the repository it belongs to, in words, or null.
|
|
92
|
+
*
|
|
93
|
+
* THE CHECK THAT NEVER EXISTED. `looply` derives three things from `cwd` — the
|
|
94
|
+
* project identity, `.looply/state`, and the tree every git verb operates on —
|
|
95
|
+
* and nothing established that `cwd` was a repository at all, let alone its
|
|
96
|
+
* root. Started one directory down, the run wrote its state into a subdirectory
|
|
97
|
+
* while committing, discarding and resetting the whole repository above it: a
|
|
98
|
+
* `reset --hard` scoped to a tree the person never named.
|
|
99
|
+
*
|
|
100
|
+
* A worktree layout makes it reachable by accident rather than by mistake,
|
|
101
|
+
* which is why it lands here rather than after the first worktree exists.
|
|
102
|
+
*/
|
|
103
|
+
export declare function repoRootTroubleAt(cwd: string): string | null;
|
|
104
|
+
/**
|
|
105
|
+
* An empty directory to point `core.hooksPath` at.
|
|
106
|
+
*
|
|
107
|
+
* Created rather than merely named: a path that does not exist would also work
|
|
108
|
+
* today, but an empty directory we make is one the repository cannot fill by
|
|
109
|
+
* simply creating what git was told to look for.
|
|
110
|
+
*
|
|
111
|
+
* 🔴 AND IT IS EMPTIED EVERY TIME, WHICH IT WAS NOT.
|
|
112
|
+
*
|
|
113
|
+
* This was one machine-global `%TEMP%\looply-no-hooks`, created once and never
|
|
114
|
+
* looked at again — passed as `core.hooksPath` on EVERY trusted git call of
|
|
115
|
+
* every workspace of every project on the machine. `mkdirSync` is recursive and
|
|
116
|
+
* idempotent, so the first caller made it and every later caller trusted it
|
|
117
|
+
* without ever asking what was inside.
|
|
118
|
+
*
|
|
119
|
+
* `%TEMP%` is world-writable on Windows. Anything that can write there could
|
|
120
|
+
* drop a `pre-commit` into that directory and have it executed by the very
|
|
121
|
+
* mechanism that exists to guarantee no repository hook ever runs — with the
|
|
122
|
+
* daemon's own privileges, uncontained. Not a workspace-isolation problem: a
|
|
123
|
+
* one-line hole in the hook defence itself, which nothing would have noticed
|
|
124
|
+
* because the directory is invisible and the flag reads as already handled.
|
|
125
|
+
*
|
|
126
|
+
* ⚠️ SO IT IS CHECKED, NOT ASSUMED. Anything sitting in it is removed before
|
|
127
|
+
* the path is handed to git. Sweeping is cheap — the directory is empty in
|
|
128
|
+
* every ordinary case — and a sweep that fails still leaves git pointed at a
|
|
129
|
+
* directory whose contents this call has at least tried to control.
|
|
130
|
+
*/
|
|
131
|
+
export declare function noHooksDir(): string;
|
|
132
|
+
/**
|
|
133
|
+
* The absolute path of the `git` this machine will run, resolved from PATH only.
|
|
134
|
+
*
|
|
135
|
+
* 🔴 A BARE `spawn('git', …, {cwd})` LETS THE REPOSITORY SUPPLY THE BINARY.
|
|
136
|
+
*
|
|
137
|
+
* On Windows the process creation path searches the WORKING DIRECTORY BEFORE
|
|
138
|
+
* PATH. `cwd` here is the project root, and `untrustedGrants` hands the
|
|
139
|
+
* contained agent `{ path: projectDir, write: true }` — so a `git.exe` the agent
|
|
140
|
+
* writes runs OUTSIDE the container, as the daemon, on `status`, `add -A`,
|
|
141
|
+
* `diff HEAD`, `commit`, `reset --hard`, `clean -fd` and `push`. Measured:
|
|
142
|
+
* `spawnSync('git', ['--version'], { cwd: <dir with a planted git.exe> })`
|
|
143
|
+
* executed the plant; the same call from another directory ran real git.
|
|
144
|
+
*
|
|
145
|
+
* That defeats everything else in this file at once — the config check, the
|
|
146
|
+
* root check, the rebuilt `GIT_` namespace, the `GIT_DIR` pin, `core.hooksPath`
|
|
147
|
+
* and `commit.gpgsign=false` — because none of them constrains a program that
|
|
148
|
+
* is not git. `exec-domains.ts` already makes exactly this argument for the
|
|
149
|
+
* runtime mirror ("untrusted code that could replace `node.exe` would be
|
|
150
|
+
* untrusted code choosing what every later gate runs"); it simply had never
|
|
151
|
+
* been applied to git.
|
|
152
|
+
*
|
|
153
|
+
* Resolved once and cached: PATH does not change under a running daemon, and a
|
|
154
|
+
* per-call PATH walk on every git verb would be a needless cost.
|
|
155
|
+
*/
|
|
156
|
+
export declare function gitBinary(): string | null;
|
|
157
|
+
/**
|
|
158
|
+
* Arguments every trusted git invocation carries, before the caller's own.
|
|
159
|
+
*
|
|
160
|
+
* `-c` beats repository config, so this is enforcement rather than a request:
|
|
161
|
+
* the repository cannot override it back.
|
|
162
|
+
*/
|
|
163
|
+
export declare function trustedGitArgs(): string[];
|
|
164
|
+
export declare function trustedGitEnv(base: NodeJS.ProcessEnv, cwd?: string): NodeJS.ProcessEnv;
|
|
165
|
+
/**
|
|
166
|
+
* THE MAIN WORKTREE'S ROOT — the directory a project's shared state belongs to.
|
|
167
|
+
*
|
|
168
|
+
* 🔴 A LINKED WORKTREE IS THE SAME PROJECT, and almost nothing in looply knew
|
|
169
|
+
* that. Project identity, the loop-safety history, the single-use exemption
|
|
170
|
+
* ledger, the human's control file and the ledger the daemon uploads are all
|
|
171
|
+
* derived from the working directory — so running in a worktree silently
|
|
172
|
+
* produced a DIFFERENT project with a fresh safety history, unspent exemptions,
|
|
173
|
+
* a control file nobody writes and events nobody uploads.
|
|
174
|
+
*
|
|
175
|
+
* The main worktree is where the common dir lives: for `<root>/.git` the answer
|
|
176
|
+
* is `<root>`. A linked worktree's common dir is that same `<root>/.git`, so it
|
|
177
|
+
* resolves to the same place — which is the whole point.
|
|
178
|
+
*
|
|
179
|
+
* ⚠️ NULL, NOT A GUESS, when there is no repository or its metadata cannot be
|
|
180
|
+
* read. The caller then keeps whatever it does today, so a non-repository
|
|
181
|
+
* directory behaves exactly as it did before this existed.
|
|
182
|
+
*
|
|
183
|
+
* ⚠️ A BARE OR SEPARATE-GITDIR REPOSITORY HAS NO MAIN WORKTREE ROOT. When the
|
|
184
|
+
* common dir is not named `.git`, this returns null rather than inventing a
|
|
185
|
+
* parent directory that may hold nothing at all.
|
|
186
|
+
*/
|
|
187
|
+
export declare function mainWorktreeRoot(cwd: string): string | null;
|
|
188
|
+
/**
|
|
189
|
+
* WHAT ALL THE WORKTREES OF ONE REPOSITORY SHARE, when no main worktree exists.
|
|
190
|
+
*
|
|
191
|
+
* 🔴 `mainWorktreeRoot` RETURNING NULL WAS TREATED AS "NO SHARING NEEDED", and
|
|
192
|
+
* those are different statements. A repository can have several worktrees and no
|
|
193
|
+
* main one — `git clone --bare` then `git worktree add` twice is the ordinary
|
|
194
|
+
* way to get there — and for those, "no main root" was silently answered by
|
|
195
|
+
* putting the project's state inside each checkout. That is exactly the split
|
|
196
|
+
* the project/execution divide exists to prevent: a fresh loop-safety history
|
|
197
|
+
* per checkout, and one single-use exemption spendable once per checkout.
|
|
198
|
+
*
|
|
199
|
+
* The common dir is the identity every worktree of a repository agrees on, so it
|
|
200
|
+
* is what the shared location is keyed by.
|
|
201
|
+
*
|
|
202
|
+
* ⚠️ SEPARATE-GIT-DIR AND SUBMODULE LAYOUTS DO NOT REACH HERE. Both set
|
|
203
|
+
* `core.worktree`, which `repoConfigTrouble` refuses by name before any of this
|
|
204
|
+
* runs. The case this actually serves is the bare repository with linked
|
|
205
|
+
* worktrees, which nothing refuses and which was silently mis-scoped.
|
|
206
|
+
*
|
|
207
|
+
* ⚠️ NULL FOR AN ORDINARY CHECKOUT — `gitDir === commonDir` — even though one
|
|
208
|
+
* exists. There is a single worktree there, so the execution's own directory IS
|
|
209
|
+
* the project's, and answering anything else would move state that is correct
|
|
210
|
+
* where it sits.
|
|
211
|
+
*/
|
|
212
|
+
/**
|
|
213
|
+
* THE PATH THAT IDENTIFIES A REPOSITORY, whichever of its checkouts you are in.
|
|
214
|
+
*
|
|
215
|
+
* 🔴 PROJECT IDENTITY WAS THE CWD, AND A WORKTREE IS NOT A NEW PROJECT. Both
|
|
216
|
+
* `repoPathHash` (the server's project key) and `projectKeyFor` (the project
|
|
217
|
+
* memory key) hashed the directory the command happened to run in. So
|
|
218
|
+
* `looply run --in <workspace>` registered a SECOND project on the server for
|
|
219
|
+
* the same repository, uploaded its events there, and read an empty project
|
|
220
|
+
* memory — while the person watching saw one project stop producing evidence.
|
|
221
|
+
*
|
|
222
|
+
* ⚠️ AN ORDINARY CHECKOUT HASHES TO EXACTLY WHAT IT ALWAYS DID. The main
|
|
223
|
+
* worktree root of a normal repository IS its root, so every existing key,
|
|
224
|
+
* every cached `projects` entry in the machine store and every server-side
|
|
225
|
+
* project survives untouched. Only a linked worktree's answer changes, and it
|
|
226
|
+
* changes from "a project of its own" to "the project it was cut from".
|
|
227
|
+
*
|
|
228
|
+
* ⚠️ AND A NON-REPOSITORY IS UNCHANGED TOO — no layout, no answer, the path
|
|
229
|
+
* comes back as given. Tests that pass invented directories keep working, which
|
|
230
|
+
* is deliberate: this must not require a repository to be callable.
|
|
231
|
+
*/
|
|
232
|
+
/**
|
|
233
|
+
* Whether this directory IS a checkout's root — ordinary or linked.
|
|
234
|
+
*
|
|
235
|
+
* `resolveGitLayout` walks up, so every directory inside a repository has a
|
|
236
|
+
* layout. This is the question that separates `<repo>` from `<repo>/packages/a`,
|
|
237
|
+
* and it is the one both the project's identity and the project's state have to
|
|
238
|
+
* agree on or one of them is lying about what a project is.
|
|
239
|
+
*/
|
|
240
|
+
export declare function isCheckoutRoot(cwd: string): boolean;
|
|
241
|
+
export declare function repoIdentityPath(cwd: string): string;
|
|
242
|
+
export declare function linkedRepoCommonDir(cwd: string): string | null;
|
|
243
|
+
//# sourceMappingURL=trusted-git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trusted-git.d.ts","sourceRoot":"","sources":["../src/trusted-git.ts"],"names":[],"mappings":"AAuLA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAc7D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAoDpE;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAmBvD;AA2FD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC,GAAG,MAAM,EAAE,CAKpF;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuB9D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAK1F;AAWD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqC5D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAiBnC;AAID;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAuBzC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,MAAM,EAAE,CA4BzC;AAqGD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,UAAU,CAoCtF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM3D;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;;;;;;;;;;;;;;;;;;;GAmBG;AACH;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA0BpD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM9D"}
|