dorfl 0.0.0 → 0.1.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/dist/advance-ci-template.d.ts +73 -0
- package/dist/advance-ci-template.d.ts.map +1 -0
- package/dist/advance-ci-template.js +104 -0
- package/dist/advance-ci-template.js.map +1 -0
- package/dist/advance-classify.d.ts +132 -0
- package/dist/advance-classify.d.ts.map +1 -0
- package/dist/advance-classify.js +120 -0
- package/dist/advance-classify.js.map +1 -0
- package/dist/advance-drivers.d.ts +182 -0
- package/dist/advance-drivers.d.ts.map +1 -0
- package/dist/advance-drivers.js +231 -0
- package/dist/advance-drivers.js.map +1 -0
- package/dist/advance-isolated.d.ts +156 -0
- package/dist/advance-isolated.d.ts.map +1 -0
- package/dist/advance-isolated.js +256 -0
- package/dist/advance-isolated.js.map +1 -0
- package/dist/advance-lifecycle-template.d.ts +107 -0
- package/dist/advance-lifecycle-template.d.ts.map +1 -0
- package/dist/advance-lifecycle-template.js +668 -0
- package/dist/advance-lifecycle-template.js.map +1 -0
- package/dist/advance-loop-driver.d.ts +325 -0
- package/dist/advance-loop-driver.d.ts.map +1 -0
- package/dist/advance-loop-driver.js +437 -0
- package/dist/advance-loop-driver.js.map +1 -0
- package/dist/advance-treeless-publish.d.ts +108 -0
- package/dist/advance-treeless-publish.d.ts.map +1 -0
- package/dist/advance-treeless-publish.js +71 -0
- package/dist/advance-treeless-publish.js.map +1 -0
- package/dist/advance.d.ts +340 -0
- package/dist/advance.d.ts.map +1 -0
- package/dist/advance.js +1122 -0
- package/dist/advance.js.map +1 -0
- package/dist/advancing-lock.d.ts +294 -0
- package/dist/advancing-lock.d.ts.map +1 -0
- package/dist/advancing-lock.js +594 -0
- package/dist/advancing-lock.js.map +1 -0
- package/dist/agent-launch.d.ts +79 -0
- package/dist/agent-launch.d.ts.map +1 -0
- package/dist/agent-launch.js +61 -0
- package/dist/agent-launch.js.map +1 -0
- package/dist/agent-stop.d.ts +149 -0
- package/dist/agent-stop.d.ts.map +1 -0
- package/dist/agent-stop.js +307 -0
- package/dist/agent-stop.js.map +1 -0
- package/dist/apply-decide.d.ts +127 -0
- package/dist/apply-decide.d.ts.map +1 -0
- package/dist/apply-decide.js +176 -0
- package/dist/apply-decide.js.map +1 -0
- package/dist/apply-merge-action.d.ts +206 -0
- package/dist/apply-merge-action.d.ts.map +1 -0
- package/dist/apply-merge-action.js +307 -0
- package/dist/apply-merge-action.js.map +1 -0
- package/dist/apply-persist.d.ts +174 -0
- package/dist/apply-persist.d.ts.map +1 -0
- package/dist/apply-persist.js +359 -0
- package/dist/apply-persist.js.map +1 -0
- package/dist/arbiter.d.ts +120 -0
- package/dist/arbiter.d.ts.map +1 -0
- package/dist/arbiter.js +255 -0
- package/dist/arbiter.js.map +1 -0
- package/dist/brand.d.ts +70 -0
- package/dist/brand.d.ts.map +1 -0
- package/dist/brand.js +84 -0
- package/dist/brand.js.map +1 -0
- package/dist/buildable-body.d.ts +132 -0
- package/dist/buildable-body.d.ts.map +1 -0
- package/dist/buildable-body.js +131 -0
- package/dist/buildable-body.js.map +1 -0
- package/dist/categorise.d.ts +66 -0
- package/dist/categorise.d.ts.map +1 -0
- package/dist/categorise.js +106 -0
- package/dist/categorise.js.map +1 -0
- package/dist/claim-cas.d.ts +117 -0
- package/dist/claim-cas.d.ts.map +1 -0
- package/dist/claim-cas.js +312 -0
- package/dist/claim-cas.js.map +1 -0
- package/dist/cli-spinner.d.ts +112 -0
- package/dist/cli-spinner.d.ts.map +1 -0
- package/dist/cli-spinner.js +157 -0
- package/dist/cli-spinner.js.map +1 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3094 -0
- package/dist/cli.js.map +1 -0
- package/dist/close-job-template.d.ts +70 -0
- package/dist/close-job-template.d.ts.map +1 -0
- package/dist/close-job-template.js +180 -0
- package/dist/close-job-template.js.map +1 -0
- package/dist/close-job.d.ts +95 -0
- package/dist/close-job.d.ts.map +1 -0
- package/dist/close-job.js +226 -0
- package/dist/close-job.js.map +1 -0
- package/dist/complete.d.ts +361 -0
- package/dist/complete.d.ts.map +1 -0
- package/dist/complete.js +885 -0
- package/dist/complete.js.map +1 -0
- package/dist/concurrency.d.ts +68 -0
- package/dist/concurrency.d.ts.map +1 -0
- package/dist/concurrency.js +112 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/config-override.d.ts +76 -0
- package/dist/config-override.d.ts.map +1 -0
- package/dist/config-override.js +50 -0
- package/dist/config-override.js.map +1 -0
- package/dist/config.d.ts +668 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +241 -0
- package/dist/config.js.map +1 -0
- package/dist/continue-branch.d.ts +249 -0
- package/dist/continue-branch.d.ts.map +1 -0
- package/dist/continue-branch.js +389 -0
- package/dist/continue-branch.js.map +1 -0
- package/dist/cwd-section.d.ts +186 -0
- package/dist/cwd-section.d.ts.map +1 -0
- package/dist/cwd-section.js +209 -0
- package/dist/cwd-section.js.map +1 -0
- package/dist/decision-engine.d.ts +170 -0
- package/dist/decision-engine.d.ts.map +1 -0
- package/dist/decision-engine.js +136 -0
- package/dist/decision-engine.js.map +1 -0
- package/dist/detect.d.ts +17 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +118 -0
- package/dist/detect.js.map +1 -0
- package/dist/do-autopick.d.ts +85 -0
- package/dist/do-autopick.d.ts.map +1 -0
- package/dist/do-autopick.js +112 -0
- package/dist/do-autopick.js.map +1 -0
- package/dist/do-config.d.ts +312 -0
- package/dist/do-config.d.ts.map +1 -0
- package/dist/do-config.js +358 -0
- package/dist/do-config.js.map +1 -0
- package/dist/do-remote-auto.d.ts +75 -0
- package/dist/do-remote-auto.d.ts.map +1 -0
- package/dist/do-remote-auto.js +111 -0
- package/dist/do-remote-auto.js.map +1 -0
- package/dist/do.d.ts +621 -0
- package/dist/do.d.ts.map +1 -0
- package/dist/do.js +1882 -0
- package/dist/do.js.map +1 -0
- package/dist/drop-source.d.ts +96 -0
- package/dist/drop-source.d.ts.map +1 -0
- package/dist/drop-source.js +91 -0
- package/dist/drop-source.js.map +1 -0
- package/dist/eligibility.d.ts +46 -0
- package/dist/eligibility.d.ts.map +1 -0
- package/dist/eligibility.js +34 -0
- package/dist/eligibility.js.map +1 -0
- package/dist/env-config.d.ts +51 -0
- package/dist/env-config.d.ts.map +1 -0
- package/dist/env-config.js +272 -0
- package/dist/env-config.js.map +1 -0
- package/dist/failure-cause.d.ts +70 -0
- package/dist/failure-cause.d.ts.map +1 -0
- package/dist/failure-cause.js +126 -0
- package/dist/failure-cause.js.map +1 -0
- package/dist/format.d.ts +43 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +256 -0
- package/dist/format.js.map +1 -0
- package/dist/frontmatter.d.ts +215 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +345 -0
- package/dist/frontmatter.js.map +1 -0
- package/dist/gate-readiness.d.ts +84 -0
- package/dist/gate-readiness.d.ts.map +1 -0
- package/dist/gate-readiness.js +103 -0
- package/dist/gate-readiness.js.map +1 -0
- package/dist/gc.d.ts +165 -0
- package/dist/gc.d.ts.map +1 -0
- package/dist/gc.js +313 -0
- package/dist/gc.js.map +1 -0
- package/dist/gh-failure.d.ts +42 -0
- package/dist/gh-failure.d.ts.map +1 -0
- package/dist/gh-failure.js +49 -0
- package/dist/gh-failure.js.map +1 -0
- package/dist/git.d.ts +75 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +130 -0
- package/dist/git.js.map +1 -0
- package/dist/github.d.ts +187 -0
- package/dist/github.d.ts.map +1 -0
- package/dist/github.js +343 -0
- package/dist/github.js.map +1 -0
- package/dist/harness.d.ts +242 -0
- package/dist/harness.d.ts.map +1 -0
- package/dist/harness.js +157 -0
- package/dist/harness.js.map +1 -0
- package/dist/identity.d.ts +167 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +231 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +147 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/install-ci-branch-protection.d.ts +147 -0
- package/dist/install-ci-branch-protection.d.ts.map +1 -0
- package/dist/install-ci-branch-protection.js +166 -0
- package/dist/install-ci-branch-protection.js.map +1 -0
- package/dist/install-ci-capabilities/advance-lifecycle.d.ts +15 -0
- package/dist/install-ci-capabilities/advance-lifecycle.d.ts.map +1 -0
- package/dist/install-ci-capabilities/advance-lifecycle.js +28 -0
- package/dist/install-ci-capabilities/advance-lifecycle.js.map +1 -0
- package/dist/install-ci-capabilities/close-job.d.ts +13 -0
- package/dist/install-ci-capabilities/close-job.d.ts.map +1 -0
- package/dist/install-ci-capabilities/close-job.js +26 -0
- package/dist/install-ci-capabilities/close-job.js.map +1 -0
- package/dist/install-ci-capabilities/example-noop.d.ts +16 -0
- package/dist/install-ci-capabilities/example-noop.d.ts.map +1 -0
- package/dist/install-ci-capabilities/example-noop.js +23 -0
- package/dist/install-ci-capabilities/example-noop.js.map +1 -0
- package/dist/install-ci-capabilities/intake.d.ts +15 -0
- package/dist/install-ci-capabilities/intake.d.ts.map +1 -0
- package/dist/install-ci-capabilities/intake.js +28 -0
- package/dist/install-ci-capabilities/intake.js.map +1 -0
- package/dist/install-ci-capabilities/verify.d.ts +14 -0
- package/dist/install-ci-capabilities/verify.d.ts.map +1 -0
- package/dist/install-ci-capabilities/verify.js +27 -0
- package/dist/install-ci-capabilities/verify.js.map +1 -0
- package/dist/install-ci-core.d.ts +446 -0
- package/dist/install-ci-core.d.ts.map +1 -0
- package/dist/install-ci-core.js +760 -0
- package/dist/install-ci-core.js.map +1 -0
- package/dist/install-ci-github.d.ts +167 -0
- package/dist/install-ci-github.d.ts.map +1 -0
- package/dist/install-ci-github.js +315 -0
- package/dist/install-ci-github.js.map +1 -0
- package/dist/install-ci.d.ts +105 -0
- package/dist/install-ci.d.ts.map +1 -0
- package/dist/install-ci.js +363 -0
- package/dist/install-ci.js.map +1 -0
- package/dist/intake-event.d.ts +88 -0
- package/dist/intake-event.d.ts.map +1 -0
- package/dist/intake-event.js +66 -0
- package/dist/intake-event.js.map +1 -0
- package/dist/intake-marker.d.ts +95 -0
- package/dist/intake-marker.d.ts.map +1 -0
- package/dist/intake-marker.js +127 -0
- package/dist/intake-marker.js.map +1 -0
- package/dist/intake-triage.d.ts +48 -0
- package/dist/intake-triage.d.ts.map +1 -0
- package/dist/intake-triage.js +95 -0
- package/dist/intake-triage.js.map +1 -0
- package/dist/intake-trigger-template.d.ts +185 -0
- package/dist/intake-trigger-template.d.ts.map +1 -0
- package/dist/intake-trigger-template.js +449 -0
- package/dist/intake-trigger-template.js.map +1 -0
- package/dist/intake.d.ts +569 -0
- package/dist/intake.d.ts.map +1 -0
- package/dist/intake.js +1628 -0
- package/dist/intake.js.map +1 -0
- package/dist/integration-core.d.ts +539 -0
- package/dist/integration-core.d.ts.map +1 -0
- package/dist/integration-core.js +2195 -0
- package/dist/integration-core.js.map +1 -0
- package/dist/integrator.d.ts +343 -0
- package/dist/integrator.d.ts.map +1 -0
- package/dist/integrator.js +400 -0
- package/dist/integrator.js.map +1 -0
- package/dist/isolation.d.ts +219 -0
- package/dist/isolation.d.ts.map +1 -0
- package/dist/isolation.js +261 -0
- package/dist/isolation.js.map +1 -0
- package/dist/issue-provider.d.ts +349 -0
- package/dist/issue-provider.d.ts.map +1 -0
- package/dist/issue-provider.js +360 -0
- package/dist/issue-provider.js.map +1 -0
- package/dist/item-lock.d.ts +626 -0
- package/dist/item-lock.d.ts.map +1 -0
- package/dist/item-lock.js +1381 -0
- package/dist/item-lock.js.map +1 -0
- package/dist/item-path.d.ts +49 -0
- package/dist/item-path.d.ts.map +1 -0
- package/dist/item-path.js +66 -0
- package/dist/item-path.js.map +1 -0
- package/dist/ledger-lint.d.ts +129 -0
- package/dist/ledger-lint.d.ts.map +1 -0
- package/dist/ledger-lint.js +249 -0
- package/dist/ledger-lint.js.map +1 -0
- package/dist/ledger-read.d.ts +357 -0
- package/dist/ledger-read.d.ts.map +1 -0
- package/dist/ledger-read.js +442 -0
- package/dist/ledger-read.js.map +1 -0
- package/dist/ledger-write.d.ts +330 -0
- package/dist/ledger-write.d.ts.map +1 -0
- package/dist/ledger-write.js +411 -0
- package/dist/ledger-write.js.map +1 -0
- package/dist/lifecycle-gather.d.ts +30 -0
- package/dist/lifecycle-gather.d.ts.map +1 -0
- package/dist/lifecycle-gather.js +205 -0
- package/dist/lifecycle-gather.js.map +1 -0
- package/dist/lifecycle-pools.d.ts +180 -0
- package/dist/lifecycle-pools.d.ts.map +1 -0
- package/dist/lifecycle-pools.js +78 -0
- package/dist/lifecycle-pools.js.map +1 -0
- package/dist/merge-question-surfacer.d.ts +166 -0
- package/dist/merge-question-surfacer.d.ts.map +1 -0
- package/dist/merge-question-surfacer.js +297 -0
- package/dist/merge-question-surfacer.js.map +1 -0
- package/dist/mint-adr.d.ts +126 -0
- package/dist/mint-adr.d.ts.map +1 -0
- package/dist/mint-adr.js +257 -0
- package/dist/mint-adr.js.map +1 -0
- package/dist/mirror-pool-scan.d.ts +125 -0
- package/dist/mirror-pool-scan.d.ts.map +1 -0
- package/dist/mirror-pool-scan.js +104 -0
- package/dist/mirror-pool-scan.js.map +1 -0
- package/dist/needs-attention.d.ts +341 -0
- package/dist/needs-attention.d.ts.map +1 -0
- package/dist/needs-attention.js +900 -0
- package/dist/needs-attention.js.map +1 -0
- package/dist/orphan-sidecar.d.ts +79 -0
- package/dist/orphan-sidecar.d.ts.map +1 -0
- package/dist/orphan-sidecar.js +71 -0
- package/dist/orphan-sidecar.js.map +1 -0
- package/dist/output.d.ts +48 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +66 -0
- package/dist/output.js.map +1 -0
- package/dist/pi-harness.d.ts +179 -0
- package/dist/pi-harness.d.ts.map +1 -0
- package/dist/pi-harness.js +342 -0
- package/dist/pi-harness.js.map +1 -0
- package/dist/placement.d.ts +99 -0
- package/dist/placement.d.ts.map +1 -0
- package/dist/placement.js +67 -0
- package/dist/placement.js.map +1 -0
- package/dist/prd-to-spec.d.ts +315 -0
- package/dist/prd-to-spec.d.ts.map +1 -0
- package/dist/prd-to-spec.js +684 -0
- package/dist/prd-to-spec.js.map +1 -0
- package/dist/prepare.d.ts +121 -0
- package/dist/prepare.d.ts.map +1 -0
- package/dist/prepare.js +140 -0
- package/dist/prepare.js.map +1 -0
- package/dist/prompt.d.ts +360 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +499 -0
- package/dist/prompt.js.map +1 -0
- package/dist/protocol/ADR-FORMAT.md +47 -0
- package/dist/protocol/CLAIM-PROTOCOL.md +217 -0
- package/dist/protocol/REVIEW-PROTOCOL.md +119 -0
- package/dist/protocol/SURFACE-PROTOCOL.md +121 -0
- package/dist/protocol/TASKING-PROTOCOL.md +122 -0
- package/dist/protocol/WORK-CONTRACT.md +276 -0
- package/dist/protocol/spec-template.md +71 -0
- package/dist/protocol/task-template.md +65 -0
- package/dist/readiness.d.ts +66 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +36 -0
- package/dist/readiness.js.map +1 -0
- package/dist/reap-branches.d.ts +102 -0
- package/dist/reap-branches.d.ts.map +1 -0
- package/dist/reap-branches.js +149 -0
- package/dist/reap-branches.js.map +1 -0
- package/dist/recover-isolated.d.ts +72 -0
- package/dist/recover-isolated.d.ts.map +1 -0
- package/dist/recover-isolated.js +188 -0
- package/dist/recover-isolated.js.map +1 -0
- package/dist/registry.d.ts +172 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +296 -0
- package/dist/registry.js.map +1 -0
- package/dist/repo-config.d.ts +201 -0
- package/dist/repo-config.d.ts.map +1 -0
- package/dist/repo-config.js +414 -0
- package/dist/repo-config.js.map +1 -0
- package/dist/repo-key.d.ts +20 -0
- package/dist/repo-key.d.ts.map +1 -0
- package/dist/repo-key.js +68 -0
- package/dist/repo-key.js.map +1 -0
- package/dist/repo-mirror.d.ts +177 -0
- package/dist/repo-mirror.d.ts.map +1 -0
- package/dist/repo-mirror.js +271 -0
- package/dist/repo-mirror.js.map +1 -0
- package/dist/retry-backoff.d.ts +90 -0
- package/dist/retry-backoff.d.ts.map +1 -0
- package/dist/retry-backoff.js +98 -0
- package/dist/retry-backoff.js.map +1 -0
- package/dist/review-gate.d.ts +173 -0
- package/dist/review-gate.d.ts.map +1 -0
- package/dist/review-gate.js +261 -0
- package/dist/review-gate.js.map +1 -0
- package/dist/review-verdict.d.ts +149 -0
- package/dist/review-verdict.d.ts.map +1 -0
- package/dist/review-verdict.js +332 -0
- package/dist/review-verdict.js.map +1 -0
- package/dist/run.d.ts +221 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +963 -0
- package/dist/run.js.map +1 -0
- package/dist/scan.d.ts +308 -0
- package/dist/scan.d.ts.map +1 -0
- package/dist/scan.js +374 -0
- package/dist/scan.js.map +1 -0
- package/dist/select-order.d.ts +75 -0
- package/dist/select-order.d.ts.map +1 -0
- package/dist/select-order.js +108 -0
- package/dist/select-order.js.map +1 -0
- package/dist/select-priority.d.ts +188 -0
- package/dist/select-priority.d.ts.map +1 -0
- package/dist/select-priority.js +80 -0
- package/dist/select-priority.js.map +1 -0
- package/dist/select.d.ts +25 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +43 -0
- package/dist/select.js.map +1 -0
- package/dist/session-path.d.ts +36 -0
- package/dist/session-path.d.ts.map +1 -0
- package/dist/session-path.js +129 -0
- package/dist/session-path.js.map +1 -0
- package/dist/sidecar-apply.d.ts +83 -0
- package/dist/sidecar-apply.d.ts.map +1 -0
- package/dist/sidecar-apply.js +111 -0
- package/dist/sidecar-apply.js.map +1 -0
- package/dist/sidecar.d.ts +245 -0
- package/dist/sidecar.d.ts.map +1 -0
- package/dist/sidecar.js +481 -0
- package/dist/sidecar.js.map +1 -0
- package/dist/slug-namespace.d.ts +204 -0
- package/dist/slug-namespace.d.ts.map +1 -0
- package/dist/slug-namespace.js +229 -0
- package/dist/slug-namespace.js.map +1 -0
- package/dist/spec-complete.d.ts +44 -0
- package/dist/spec-complete.d.ts.map +1 -0
- package/dist/spec-complete.js +69 -0
- package/dist/spec-complete.js.map +1 -0
- package/dist/start.d.ts +97 -0
- package/dist/start.d.ts.map +1 -0
- package/dist/start.js +633 -0
- package/dist/start.js.map +1 -0
- package/dist/status.d.ts +199 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +228 -0
- package/dist/status.js.map +1 -0
- package/dist/surface-gate.d.ts +162 -0
- package/dist/surface-gate.d.ts.map +1 -0
- package/dist/surface-gate.js +206 -0
- package/dist/surface-gate.js.map +1 -0
- package/dist/surface-persist.d.ts +86 -0
- package/dist/surface-persist.d.ts.map +1 -0
- package/dist/surface-persist.js +129 -0
- package/dist/surface-persist.js.map +1 -0
- package/dist/tasker-review-loop.d.ts +249 -0
- package/dist/tasker-review-loop.d.ts.map +1 -0
- package/dist/tasker-review-loop.js +369 -0
- package/dist/tasker-review-loop.js.map +1 -0
- package/dist/tasking-eligibility.d.ts +74 -0
- package/dist/tasking-eligibility.d.ts.map +1 -0
- package/dist/tasking-eligibility.js +52 -0
- package/dist/tasking-eligibility.js.map +1 -0
- package/dist/tasking-lock.d.ts +111 -0
- package/dist/tasking-lock.d.ts.map +1 -0
- package/dist/tasking-lock.js +256 -0
- package/dist/tasking-lock.js.map +1 -0
- package/dist/tasking.d.ts +275 -0
- package/dist/tasking.d.ts.map +1 -0
- package/dist/tasking.js +952 -0
- package/dist/tasking.js.map +1 -0
- package/dist/triage-gate.d.ts +127 -0
- package/dist/triage-gate.d.ts.map +1 -0
- package/dist/triage-gate.js +139 -0
- package/dist/triage-gate.js.map +1 -0
- package/dist/triage-persist.d.ts +163 -0
- package/dist/triage-persist.d.ts.map +1 -0
- package/dist/triage-persist.js +387 -0
- package/dist/triage-persist.js.map +1 -0
- package/dist/verdict-json.d.ts +32 -0
- package/dist/verdict-json.d.ts.map +1 -0
- package/dist/verdict-json.js +74 -0
- package/dist/verdict-json.js.map +1 -0
- package/dist/verify-workflow-template.d.ts +60 -0
- package/dist/verify-workflow-template.d.ts.map +1 -0
- package/dist/verify-workflow-template.js +126 -0
- package/dist/verify-workflow-template.js.map +1 -0
- package/dist/verify.d.ts +60 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +62 -0
- package/dist/verify.js.map +1 -0
- package/dist/watch-session.d.ts +112 -0
- package/dist/watch-session.d.ts.map +1 -0
- package/dist/watch-session.js +347 -0
- package/dist/watch-session.js.map +1 -0
- package/dist/work-layout.d.ts +198 -0
- package/dist/work-layout.d.ts.map +1 -0
- package/dist/work-layout.js +217 -0
- package/dist/work-layout.js.map +1 -0
- package/dist/work-on.d.ts +154 -0
- package/dist/work-on.d.ts.map +1 -0
- package/dist/work-on.js +387 -0
- package/dist/work-on.js.map +1 -0
- package/dist/workspace.d.ts +224 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +325 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +46 -2
- package/src/advance-ci-template.ts +203 -0
- package/src/advance-classify.ts +197 -0
- package/src/advance-drivers.ts +414 -0
- package/src/advance-isolated.ts +432 -0
- package/src/advance-lifecycle-template.ts +791 -0
- package/src/advance-loop-driver.ts +745 -0
- package/src/advance-treeless-publish.ts +177 -0
- package/src/advance.ts +1564 -0
- package/src/advancing-lock.ts +988 -0
- package/src/agent-launch.ts +137 -0
- package/src/agent-stop.ts +361 -0
- package/src/apply-decide.ts +242 -0
- package/src/apply-merge-action.ts +502 -0
- package/src/apply-persist.ts +518 -0
- package/src/arbiter.ts +372 -0
- package/src/brand.ts +111 -0
- package/src/buildable-body.ts +196 -0
- package/src/categorise.ts +158 -0
- package/src/claim-cas.ts +513 -0
- package/src/cli-spinner.ts +225 -0
- package/src/cli.ts +4369 -0
- package/src/close-job-template.ts +236 -0
- package/src/close-job.ts +319 -0
- package/src/complete.ts +1379 -0
- package/src/concurrency.ts +151 -0
- package/src/config-override.ts +116 -0
- package/src/config.ts +883 -0
- package/src/continue-branch.ts +542 -0
- package/src/cwd-section.ts +392 -0
- package/src/decision-engine.ts +272 -0
- package/src/detect.ts +124 -0
- package/src/do-autopick.ts +223 -0
- package/src/do-config.ts +589 -0
- package/src/do-remote-auto.ts +197 -0
- package/src/do.ts +2623 -0
- package/src/drop-source.ts +194 -0
- package/src/eligibility.ts +79 -0
- package/src/env-config.ts +305 -0
- package/src/failure-cause.ts +142 -0
- package/src/format.ts +313 -0
- package/src/frontmatter.ts +485 -0
- package/src/gate-readiness.ts +147 -0
- package/src/gc.ts +510 -0
- package/src/gh-failure.ts +53 -0
- package/src/git.ts +186 -0
- package/src/github.ts +468 -0
- package/src/harness.ts +355 -0
- package/src/identity.ts +322 -0
- package/src/index.ts +785 -0
- package/src/install-ci-branch-protection.ts +255 -0
- package/src/install-ci-capabilities/advance-lifecycle.ts +34 -0
- package/src/install-ci-capabilities/close-job.ts +32 -0
- package/src/install-ci-capabilities/example-noop.ts +24 -0
- package/src/install-ci-capabilities/intake.ts +34 -0
- package/src/install-ci-capabilities/verify.ts +33 -0
- package/src/install-ci-core.ts +1088 -0
- package/src/install-ci-github.ts +376 -0
- package/src/install-ci.ts +552 -0
- package/src/intake-event.ts +102 -0
- package/src/intake-marker.ts +195 -0
- package/src/intake-triage.ts +138 -0
- package/src/intake-trigger-template.ts +591 -0
- package/src/intake.ts +2445 -0
- package/src/integration-core.ts +3065 -0
- package/src/integrator.ts +771 -0
- package/src/isolation.ts +484 -0
- package/src/issue-provider.ts +733 -0
- package/src/item-lock.ts +1858 -0
- package/src/item-path.ts +75 -0
- package/src/ledger-lint.ts +332 -0
- package/src/ledger-read.ts +924 -0
- package/src/ledger-write.ts +865 -0
- package/src/lifecycle-gather.ts +298 -0
- package/src/lifecycle-pools.ts +250 -0
- package/src/merge-question-surfacer.ts +496 -0
- package/src/mint-adr.ts +362 -0
- package/src/mirror-pool-scan.ts +240 -0
- package/src/needs-attention.ts +1506 -0
- package/src/orphan-sidecar.ts +150 -0
- package/src/output.ts +89 -0
- package/src/pi-harness.ts +403 -0
- package/src/placement.ts +131 -0
- package/src/prd-to-spec.ts +1023 -0
- package/src/prepare.ts +230 -0
- package/src/prompt.ts +760 -0
- package/src/readiness.ts +98 -0
- package/src/reap-branches.ts +278 -0
- package/src/recover-isolated.ts +276 -0
- package/src/registry.ts +475 -0
- package/src/repo-config.ts +550 -0
- package/src/repo-key.ts +74 -0
- package/src/repo-mirror.ts +367 -0
- package/src/retry-backoff.ts +130 -0
- package/src/review-gate.ts +389 -0
- package/src/review-verdict.ts +422 -0
- package/src/run.ts +1430 -0
- package/src/scan.ts +611 -0
- package/src/select-order.ts +143 -0
- package/src/select-priority.ts +266 -0
- package/src/select.ts +62 -0
- package/src/session-path.ts +153 -0
- package/src/sidecar-apply.ts +216 -0
- package/src/sidecar.ts +700 -0
- package/src/slug-namespace.ts +367 -0
- package/src/spec-complete.ts +118 -0
- package/src/start.ts +974 -0
- package/src/status.ts +441 -0
- package/src/surface-gate.ts +337 -0
- package/src/surface-persist.ts +241 -0
- package/src/tasker-review-loop.ts +671 -0
- package/src/tasking-eligibility.ts +114 -0
- package/src/tasking-lock.ts +416 -0
- package/src/tasking.ts +1438 -0
- package/src/triage-gate.ts +248 -0
- package/src/triage-persist.ts +570 -0
- package/src/verdict-json.ts +73 -0
- package/src/verify-workflow-template.ts +159 -0
- package/src/verify.ts +123 -0
- package/src/watch-session.ts +397 -0
- package/src/work-layout.ts +262 -0
- package/src/work-on.ts +660 -0
- package/src/workspace.ts +502 -0
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
import { git, run } from './git.js';
|
|
2
|
+
import { isAncestor } from './gc.js';
|
|
3
|
+
import { pushProposeBranchWithStaleLeaseRetry } from './continue-branch.js';
|
|
4
|
+
/**
|
|
5
|
+
* The graceful-degradation provider (ADR §6): it opens NO review request (there
|
|
6
|
+
* is no API — e.g. a local `--bare` arbiter) and instead tells the human to open
|
|
7
|
+
* one manually. The branch is already pushed, so the work is safe regardless.
|
|
8
|
+
*/
|
|
9
|
+
export class NoneProvider {
|
|
10
|
+
name = 'none';
|
|
11
|
+
async openRequest(input) {
|
|
12
|
+
return {
|
|
13
|
+
opened: false,
|
|
14
|
+
instruction: `Pushed ${input.branch} to ${input.arbiter}. Open a review request ` +
|
|
15
|
+
'manually to land it on main (no review provider configured).' +
|
|
16
|
+
manualRequestText(input),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* No API to post a comment (a local `--bare` arbiter has no review concept), so
|
|
21
|
+
* DEGRADE: surface the review text in the result instead of throwing — the
|
|
22
|
+
* verdict stays in the run output, never lost (ADR §6). The caller treats this
|
|
23
|
+
* as a clean no-op for the PR (nothing was posted).
|
|
24
|
+
*/
|
|
25
|
+
postPRComment(input) {
|
|
26
|
+
return {
|
|
27
|
+
posted: false,
|
|
28
|
+
instruction: 'No review provider configured — the review was not posted as a PR ' +
|
|
29
|
+
`comment. The review:\n${input.body}`,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* No API to resolve a PR from a branch (a local `--bare` arbiter has no review
|
|
34
|
+
* concept), so DEGRADE exactly like {@link postPRComment}: surface the review
|
|
35
|
+
* text, post nothing, never throw. A clean no-op for the PR.
|
|
36
|
+
*/
|
|
37
|
+
postPRCommentOnBranch(input) {
|
|
38
|
+
return {
|
|
39
|
+
posted: false,
|
|
40
|
+
instruction: 'No review provider configured — the review was not posted as a PR ' +
|
|
41
|
+
`comment. The review:\n${input.body}`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export class Integrator {
|
|
46
|
+
provider;
|
|
47
|
+
constructor(options = {}) {
|
|
48
|
+
this.provider = options.provider ?? new NoneProvider();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Integrate WITHOUT rebasing (assumes the caller already rebased, or the
|
|
52
|
+
* branch is known up-to-date). `merge` pushes the branch to `main` (plain,
|
|
53
|
+
* non-force push); `propose` pushes the branch under its own ref + asks the
|
|
54
|
+
* provider to request review. NEVER `--force` (and NEVER force-touches main).
|
|
55
|
+
*/
|
|
56
|
+
async integrate(input) {
|
|
57
|
+
if (input.mode === 'merge') {
|
|
58
|
+
// Race-1 (claim-vs-integrate): push `${branch}:main` ONCE. On a
|
|
59
|
+
// non-fast-forward rejection (a sibling same-repo claim/integrate advanced
|
|
60
|
+
// `<arbiter>/main` during our push window) report it so the integration-core
|
|
61
|
+
// step-4 tail re-rebases (with its sibling-ledger reconcile) + retries the
|
|
62
|
+
// push. We never rebase here (that would miss the ledger reconcile arms) and
|
|
63
|
+
// never `--force` main.
|
|
64
|
+
const pushed = mergePushOnce(input);
|
|
65
|
+
if (pushed.kind === 'non-fast-forward') {
|
|
66
|
+
// Signal the caller to re-rebase via step-4 and call integrate again.
|
|
67
|
+
return {
|
|
68
|
+
mode: 'merge',
|
|
69
|
+
mergedToMain: false,
|
|
70
|
+
pushedRef: 'main',
|
|
71
|
+
provider: 'none',
|
|
72
|
+
requestOpened: false,
|
|
73
|
+
mergeNonFastForward: true,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// Capture the SHA that LANDED on `main` — the work branch's tip is exactly
|
|
77
|
+
// what `${branch}:main` pushed (additive `commit?`, the merge-mode twin of
|
|
78
|
+
// propose's `url`). Best-effort: a failed read leaves `commit` absent, so a
|
|
79
|
+
// caller that links it (intake) simply omits the link rather than throwing.
|
|
80
|
+
const commit = resolveBranchTip(input);
|
|
81
|
+
// Part (b): reap the remote head INLINE now the merge has landed. The work
|
|
82
|
+
// is on `main` (we just pushed it there), so the head is provably merged and
|
|
83
|
+
// safe to delete — the exact merge moment, no sweep needed. Idempotent +
|
|
84
|
+
// best-effort: a no-remote-head merge (the common `${branch}:main` push) is a
|
|
85
|
+
// clean no-op. NEVER `--force`. Gated by `deleteMergedHead` so the bare
|
|
86
|
+
// `integrate` callers / tests are unchanged.
|
|
87
|
+
if (input.deleteMergedHead === true) {
|
|
88
|
+
deleteMergedHeadBranch(input);
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
mode: 'merge',
|
|
92
|
+
mergedToMain: true,
|
|
93
|
+
pushedRef: 'main',
|
|
94
|
+
provider: 'none',
|
|
95
|
+
requestOpened: false,
|
|
96
|
+
...(commit !== undefined ? { commit } : {}),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// propose: push the branch under its own name (the safety-bearing step),
|
|
100
|
+
// THEN ask the provider to request review. Reconcile with --force-with-lease
|
|
101
|
+
// on the WORK BRANCH ONLY (§11: a work branch is unshared) so a RECOVERY
|
|
102
|
+
// complete — which rebases the kept branch onto fresh `main` (a PLAIN rebase
|
|
103
|
+
// after the per-item-lock cut-over: no transient status lands on a branch, so
|
|
104
|
+
// there is nothing to drop) and so REWRITES the tip vs an already-pushed
|
|
105
|
+
// `work/<slug>` (the bounce now pushes it via the seam) — lands cleanly
|
|
106
|
+
// instead of failing non-fast-forward. The lease guards the CAS; this
|
|
107
|
+
// is NEVER a plain `--force`, and NEVER touches main.
|
|
108
|
+
//
|
|
109
|
+
// STALE-LEASE SURVIVAL + BENIGN ALREADY-LANDED (task `propose-push-
|
|
110
|
+
// survives-stale-lease-on-reaped-work-ref`): route through the propose
|
|
111
|
+
// stale-lease retry helper (the sibling of
|
|
112
|
+
// `pushContinuedBranchWithStaleLeaseRetry`, sharing its `stale info`
|
|
113
|
+
// detection + bounded retry, with the propose-specific addition of the
|
|
114
|
+
// gone-ref + ancestor-of-`<arbiter>/main` = BENIGN already-landed predicate
|
|
115
|
+
// — mirroring `deleteMergedHeadBranch`'s ancestor guard + the leased-delete
|
|
116
|
+
// `already-reaped` precedent). Survives a `stale info` rejection when the
|
|
117
|
+
// arbiter's view of the unshared work ref moved under us (re-leases against
|
|
118
|
+
// the freshly-observed tip); reports `alreadyLanded` (no PR re-open against
|
|
119
|
+
// a vanished ref) when the work already landed via a sibling's merge +
|
|
120
|
+
// reap; SURFACES every non-stale failure (connectivity, protected ref,
|
|
121
|
+
// auth) and a non-provably-landed stale-info-after-cap as a terminal throw.
|
|
122
|
+
// For a first-time propose (no remote ref yet) the helper's create-only
|
|
123
|
+
// empty-expected lease shape (`<branch>:`) accepts the new ref unchanged.
|
|
124
|
+
const proposePush = pushProposeBranchWithStaleLeaseRetry({
|
|
125
|
+
cwd: input.cwd,
|
|
126
|
+
branch: input.branch,
|
|
127
|
+
arbiter: input.arbiter,
|
|
128
|
+
env: input.env,
|
|
129
|
+
});
|
|
130
|
+
if (proposePush.kind === 'already-landed') {
|
|
131
|
+
// BENIGN already-landed: the work is provably on `<arbiter>/main` and the
|
|
132
|
+
// head was reaped. Do NOT call the provider — there is no ref to open a
|
|
133
|
+
// review request against, and asking the provider to open a PR for
|
|
134
|
+
// landed work would be a confusing no-op. Distinct from a real failure:
|
|
135
|
+
// `alreadyLanded: true`, no throw, no PR.
|
|
136
|
+
return {
|
|
137
|
+
mode: 'propose',
|
|
138
|
+
mergedToMain: false,
|
|
139
|
+
pushedRef: input.branch,
|
|
140
|
+
provider: 'none',
|
|
141
|
+
requestOpened: false,
|
|
142
|
+
alreadyLanded: true,
|
|
143
|
+
instruction: `${input.branch}: the work is already on ${input.arbiter}/main ` +
|
|
144
|
+
'and its remote head was reaped — nothing to propose (clean no-op).',
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
// PR-INTENT (`noPR: true`): the branch is now pushed (safe) — deliberately do
|
|
148
|
+
// NOT open a review request (the explicit suppress-PR intent). No warning: the
|
|
149
|
+
// no-PR outcome is intended, not a degrade. The provider is reported as `none`
|
|
150
|
+
// (no request opened), exactly as a push-only propose surfaces.
|
|
151
|
+
if (input.noPR === true) {
|
|
152
|
+
return {
|
|
153
|
+
mode: 'propose',
|
|
154
|
+
mergedToMain: false,
|
|
155
|
+
pushedRef: input.branch,
|
|
156
|
+
provider: 'none',
|
|
157
|
+
requestOpened: false,
|
|
158
|
+
instruction: `Pushed ${input.branch} to ${input.arbiter}. No PR was opened ` +
|
|
159
|
+
'(noPR is set — the suppress-PR intent).',
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
const review = await this.provider.openRequest({
|
|
163
|
+
cwd: input.cwd,
|
|
164
|
+
branch: input.branch,
|
|
165
|
+
arbiter: input.arbiter,
|
|
166
|
+
title: input.title,
|
|
167
|
+
body: input.body,
|
|
168
|
+
env: input.env,
|
|
169
|
+
backoff: input.backoff,
|
|
170
|
+
sleep: input.sleep,
|
|
171
|
+
});
|
|
172
|
+
return {
|
|
173
|
+
mode: 'propose',
|
|
174
|
+
mergedToMain: false,
|
|
175
|
+
pushedRef: input.branch,
|
|
176
|
+
provider: this.provider.name,
|
|
177
|
+
requestOpened: review.opened,
|
|
178
|
+
instruction: review.instruction,
|
|
179
|
+
url: review.url,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Rebase-before-integrate (ADR §10): fetch + rebase the branch onto the latest
|
|
184
|
+
* `<arbiter>/main`. Clean → integrate. Conflict → the rebase is already
|
|
185
|
+
* aborted by `rebaseOntoArbiterMain`; we return `needs-attention` (NEVER
|
|
186
|
+
* auto-resolve, NEVER push a half-merged tree).
|
|
187
|
+
*/
|
|
188
|
+
async integrateWithRebase(input) {
|
|
189
|
+
const rebase = rebaseOntoArbiterMain({
|
|
190
|
+
cwd: input.cwd,
|
|
191
|
+
arbiter: input.arbiter,
|
|
192
|
+
branch: input.branch,
|
|
193
|
+
env: input.env,
|
|
194
|
+
});
|
|
195
|
+
if (!rebase.clean) {
|
|
196
|
+
return {
|
|
197
|
+
outcome: 'needs-attention',
|
|
198
|
+
reason: `Rebasing ${input.branch} onto ${input.arbiter}/main conflicted; ` +
|
|
199
|
+
'the rebase was aborted (never auto-resolved). A human must resolve ' +
|
|
200
|
+
'against the latest main, then re-integrate.',
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
return { outcome: 'integrated', integration: await this.integrate(input) };
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Deterministically rebase `branch` onto the freshly-fetched `<arbiter>/main`
|
|
208
|
+
* (ADR §10). A clean rebase leaves the branch on top of main. A conflicting
|
|
209
|
+
* rebase is `git rebase --abort`ed (restoring the pre-rebase state) and reported
|
|
210
|
+
* as `conflicted` — we NEVER pick `--ours`/`--theirs` or any heuristic
|
|
211
|
+
* (resolution requires semantic judgement; a wrong-but-compiling merge is the
|
|
212
|
+
* worst outcome). Must be called with `branch` checked out.
|
|
213
|
+
*/
|
|
214
|
+
export function rebaseOntoArbiterMain(input) {
|
|
215
|
+
const env = input.env;
|
|
216
|
+
// Fetch the arbiter's `main` into the `<arbiter>/main` remote-tracking ref
|
|
217
|
+
// EXPLICITLY. A job worktree is cut from a bare hub mirror whose `origin`
|
|
218
|
+
// remote has no fetch refspec (so `origin/main` would not otherwise resolve);
|
|
219
|
+
// a normal clone already has it but the explicit refspec is harmless there.
|
|
220
|
+
git([
|
|
221
|
+
'fetch',
|
|
222
|
+
'--quiet',
|
|
223
|
+
input.arbiter,
|
|
224
|
+
`+refs/heads/main:refs/remotes/${input.arbiter}/main`,
|
|
225
|
+
], input.cwd, { env });
|
|
226
|
+
// Ensure we are on the branch we intend to rebase.
|
|
227
|
+
git(['checkout', '--quiet', input.branch], input.cwd, { env });
|
|
228
|
+
const rebase = run('git', ['rebase', `${input.arbiter}/main`], input.cwd, {
|
|
229
|
+
env,
|
|
230
|
+
});
|
|
231
|
+
if (rebase.status === 0) {
|
|
232
|
+
return { clean: true, conflicted: false };
|
|
233
|
+
}
|
|
234
|
+
// Conflict (or any non-zero): abort to restore the pre-rebase state. NEVER
|
|
235
|
+
// auto-resolve. `--abort` is best-effort; if there is nothing to abort it is
|
|
236
|
+
// a no-op error we can ignore.
|
|
237
|
+
run('git', ['rebase', '--abort'], input.cwd, { env });
|
|
238
|
+
return { clean: false, conflicted: true };
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Push `${branch}:main` (merge mode) ONCE, classifying the outcome for the
|
|
242
|
+
* caller's bounded re-rebase-and-retry loop (Race 1: claim-vs-integrate, task
|
|
243
|
+
* `run-fleet-claim-integrate-and-sibling-rebase-concurrency-safe`). It does NOT
|
|
244
|
+
* rebase itself: the rebase belongs to the integration-core step-4 tail, which
|
|
245
|
+
* ALSO carries the sibling-ledger + divergent-done-move reconciliation arms a bare
|
|
246
|
+
* rebase here would miss. This function's only job is to push and tell the caller
|
|
247
|
+
* whether to LOOP (re-rebase via step-4) or STOP.
|
|
248
|
+
*
|
|
249
|
+
* - `landed` — the push succeeded, OR (under the non-atomic `file://` transport)
|
|
250
|
+
* it reported failure but our tip is ALREADY reachable on `<arbiter>/main`
|
|
251
|
+
* (the push genuinely landed — an IDEMPOTENT no-op; never re-rebase our own
|
|
252
|
+
* already-landed commit, which would self-conflict). The `isAncestor` probe is
|
|
253
|
+
* the SAME merged-vs-unmerged predicate `gc.ts`/`finishStrandedBranch` use.
|
|
254
|
+
* - `non-fast-forward` — a SIBLING advanced `<arbiter>/main` during our push
|
|
255
|
+
* window (a claim CAS commit, or a sibling integrate); the caller must
|
|
256
|
+
* re-fetch + re-run the step-4 rebase (reconciling sibling-ledger divergence)
|
|
257
|
+
* and retry the push. We NEVER `--force` main.
|
|
258
|
+
*
|
|
259
|
+
* Any OTHER push failure (unreachable arbiter, refused ref) THROWS, exactly as a
|
|
260
|
+
* plain `git push` would.
|
|
261
|
+
*/
|
|
262
|
+
function mergePushOnce(input) {
|
|
263
|
+
const env = input.env;
|
|
264
|
+
const refspec = `${input.branch}:main`;
|
|
265
|
+
const arbiterRef = `refs/remotes/${input.arbiter}/main`;
|
|
266
|
+
const push = run('git', ['push', input.arbiter, refspec], input.cwd, { env });
|
|
267
|
+
if (push.status === 0) {
|
|
268
|
+
return { kind: 'landed' };
|
|
269
|
+
}
|
|
270
|
+
// Distinguish a CONTENTION rejection (main advanced — recoverable by a step-4
|
|
271
|
+
// re-rebase) from any other push failure (which surfaces as today's throw).
|
|
272
|
+
const combined = `${push.stderr}\n${push.stdout}`;
|
|
273
|
+
const nonFastForward = /non-fast-forward|fetch first|\[rejected\]|failed to push/i.test(combined);
|
|
274
|
+
if (!nonFastForward) {
|
|
275
|
+
throw new Error(`git push ${input.arbiter} ${refspec} failed (exit ${push.status}): ` +
|
|
276
|
+
`${push.stderr.trim() || push.stdout.trim()}`);
|
|
277
|
+
}
|
|
278
|
+
// Re-fetch the arbiter's main and check IDEMPOTENCY first: under `file://` a
|
|
279
|
+
// reported failure can have actually landed. If our tip is already on main, it
|
|
280
|
+
// landed — never re-rebase our own commit onto a main that has it.
|
|
281
|
+
git(['fetch', '--quiet', input.arbiter, `+refs/heads/main:${arbiterRef}`], input.cwd, { env });
|
|
282
|
+
const tip = run('git', ['rev-parse', '--verify', '--quiet', `refs/heads/${input.branch}`], input.cwd, { env }).stdout.trim();
|
|
283
|
+
if (tip !== '' && isAncestor(input.cwd, tip, arbiterRef, env)) {
|
|
284
|
+
return { kind: 'landed' };
|
|
285
|
+
}
|
|
286
|
+
// A genuine sibling main-advance: the caller re-runs the step-4 rebase + retries.
|
|
287
|
+
return { kind: 'non-fast-forward' };
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Push a branch to the arbiter. Used by both modes; `merge` targets `main`
|
|
291
|
+
* (plain, never forced), `propose` targets the branch's own ref. The caller may
|
|
292
|
+
* pass extra git args (e.g. `--force-with-lease=<work-branch>` on the propose
|
|
293
|
+
* path, to reconcile a recovery-rewritten WORK branch — §11, unshared, lease-
|
|
294
|
+
* guarded). There is NEVER a plain `--force`, and `main` is NEVER forced; the
|
|
295
|
+
* only leases in the system are this work-branch one + the claim micro-commit's.
|
|
296
|
+
*/
|
|
297
|
+
function pushBranch(input, refspec, ...extraArgs) {
|
|
298
|
+
git(['push', input.arbiter, refspec, ...extraArgs], input.cwd, {
|
|
299
|
+
env: input.env,
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Reap the remote `work/<slug>` HEAD branch on the arbiter AFTER its work landed
|
|
304
|
+
* on `main` (merge mode, part (b)). The merge push above already put the commits
|
|
305
|
+
* on `main`, so the head is PROVABLY merged — it is the recovery point no longer
|
|
306
|
+
* (its work is on main), exactly the never-delete invariant's release condition.
|
|
307
|
+
* We additionally CONFIRM the head, when it exists, is an ancestor of
|
|
308
|
+
* `<arbiter>/main` before deleting, so a racing un-merged amend is never reaped.
|
|
309
|
+
*
|
|
310
|
+
* BEST-EFFORT + idempotent (soft `run`, never throws): the deletion of a
|
|
311
|
+
* fully-merged ref needs NO force (and we never pass one); a no-remote-head merge
|
|
312
|
+
* (the plain `${branch}:main` push opened none) is a clean no-op; an unreachable
|
|
313
|
+
* arbiter / already-gone ref is tolerated. The integrate's safety rides on the
|
|
314
|
+
* merge push, never on this hygiene step.
|
|
315
|
+
*/
|
|
316
|
+
function deleteMergedHeadBranch(input) {
|
|
317
|
+
const env = input.env;
|
|
318
|
+
const arbiter = input.arbiter;
|
|
319
|
+
const branch = input.branch;
|
|
320
|
+
// Does a remote head exist at all? (`ls-remote` exits 0 with empty stdout when
|
|
321
|
+
// absent.) No head ⇒ nothing to reap (the common direct-merge case).
|
|
322
|
+
const ls = run('git', ['ls-remote', '--heads', arbiter, branch], input.cwd, {
|
|
323
|
+
env,
|
|
324
|
+
});
|
|
325
|
+
if (ls.status !== 0 || ls.stdout.trim() === '') {
|
|
326
|
+
return; // unreachable arbiter, or no remote head — nothing to delete.
|
|
327
|
+
}
|
|
328
|
+
// The head exists. Confirm it is an ancestor of <arbiter>/main before deleting
|
|
329
|
+
// (it just merged, so this holds; the guard refuses a racing un-merged amend).
|
|
330
|
+
run('git', [
|
|
331
|
+
'fetch',
|
|
332
|
+
'--quiet',
|
|
333
|
+
arbiter,
|
|
334
|
+
`+refs/heads/main:refs/remotes/${arbiter}/main`,
|
|
335
|
+
`+refs/heads/${branch}:refs/remotes/${arbiter}/${branch}`,
|
|
336
|
+
], input.cwd, { env });
|
|
337
|
+
const headSha = parseLsRemoteSha(ls.stdout);
|
|
338
|
+
if (headSha !== undefined) {
|
|
339
|
+
const isMerged = run('git', ['merge-base', '--is-ancestor', headSha, `refs/remotes/${arbiter}/main`], input.cwd, { env });
|
|
340
|
+
if (isMerged.status !== 0) {
|
|
341
|
+
return; // NOT provably merged (a racing un-merged amend) — never reap.
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
// Provably merged: WRITE-THROUGH delete — drop the LOCAL tracking ref FIRST
|
|
345
|
+
// (the ref that drives continue-detection), THEN the arbiter head (NEVER
|
|
346
|
+
// `--force`). The asymmetry is the point: an arbiter-delete failure leaves
|
|
347
|
+
// the local store BEHIND (self-healing on next fetch), never AHEAD (a stale
|
|
348
|
+
// `refs/remotes/<arbiter>/work/<slug>` that drives a wrong "continue" — the
|
|
349
|
+
// permanent stale-continue bug today's arbiter-first ordering creates).
|
|
350
|
+
run('git', ['update-ref', '-d', `refs/remotes/${arbiter}/${branch}`], input.cwd, { env });
|
|
351
|
+
run('git', ['push', arbiter, '--delete', branch], input.cwd, { env });
|
|
352
|
+
}
|
|
353
|
+
/** First sha from a `git ls-remote` output line (`<sha>\t<ref>`), or undefined. */
|
|
354
|
+
function parseLsRemoteSha(stdout) {
|
|
355
|
+
const m = /^([0-9a-f]{40})\s/m.exec(stdout.trim());
|
|
356
|
+
return m ? m[1] : undefined;
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Resolve the SHA the merge path just pushed to `main` — the work branch's tip
|
|
360
|
+
* (`${branch}:main` pushes exactly that). BEST-EFFORT (soft `run`, never throws):
|
|
361
|
+
* on any failure it returns `undefined`, so the additive {@link
|
|
362
|
+
* IntegrateResult.commit} stays absent rather than breaking the integrate. Used to
|
|
363
|
+
* link the landed commit (intake's completion comment); the integrate's safety
|
|
364
|
+
* rides on the push above, never on this read.
|
|
365
|
+
*/
|
|
366
|
+
function resolveBranchTip(input) {
|
|
367
|
+
const res = run('git', ['rev-parse', input.branch], input.cwd, {
|
|
368
|
+
env: input.env,
|
|
369
|
+
});
|
|
370
|
+
if (res.status !== 0) {
|
|
371
|
+
return undefined;
|
|
372
|
+
}
|
|
373
|
+
const sha = res.stdout.trim();
|
|
374
|
+
return sha === '' ? undefined : sha;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Render the runner-synthesised TITLE + BODY into a human's MANUAL review-request
|
|
378
|
+
* instructions (the `none` provider, and the GitHub provider's degraded path),
|
|
379
|
+
* so a human opening the request by hand reuses the SAME title/body the
|
|
380
|
+
* autonomous path would have set. Returns '' when neither is present (today's
|
|
381
|
+
* bare instruction — no regression). Surfaced as a trailing block so the
|
|
382
|
+
* leading instruction line stays clean.
|
|
383
|
+
*/
|
|
384
|
+
export function manualRequestText(input) {
|
|
385
|
+
const parts = [];
|
|
386
|
+
if (input.title) {
|
|
387
|
+
parts.push(`\nSuggested title: ${input.title}`);
|
|
388
|
+
}
|
|
389
|
+
if (input.body) {
|
|
390
|
+
parts.push(`\nSuggested body:\n${input.body}`);
|
|
391
|
+
}
|
|
392
|
+
return parts.join('');
|
|
393
|
+
}
|
|
394
|
+
/** True if the arbiter's `main` currently contains `commitish` (work landed). */
|
|
395
|
+
export function arbiterMainContains(cwd, arbiter, commitish, env) {
|
|
396
|
+
run('git', ['fetch', '-q', arbiter], cwd, { env });
|
|
397
|
+
const res = run('git', ['merge-base', '--is-ancestor', commitish, `${arbiter}/main`], cwd, { env });
|
|
398
|
+
return res.status === 0;
|
|
399
|
+
}
|
|
400
|
+
//# sourceMappingURL=integrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrator.js","sourceRoot":"","sources":["../src/integrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { type Job } from './workspace.js';
|
|
2
|
+
import { type SlugNamespace } from './slug-namespace.js';
|
|
3
|
+
/**
|
|
4
|
+
* The **isolation-strategy seam** (`docs/adr/command-surface-and-journeys.md`
|
|
5
|
+
* §3; substrate ADR §1/§2/§4): one seam, two strategies, selected by whether
|
|
6
|
+
* there is a checkout —
|
|
7
|
+
*
|
|
8
|
+
* - **in-place** — the current checkout (a human's clone, or the CI container)
|
|
9
|
+
* IS the isolation: claim + build + gate + integrate operate directly in the
|
|
10
|
+
* current working tree on its `work/<slug>` branch. NO hub mirror, NO
|
|
11
|
+
* external worktree, NO reap (the human's checkout is left in a defined
|
|
12
|
+
* state, never deleted).
|
|
13
|
+
* - **job-worktree** — materialise a hub mirror + an external job worktree in
|
|
14
|
+
* the agents' area (`workspacesDir`), EXACTLY as `run`'s `createJob` path
|
|
15
|
+
* does (ADR §1/§2), with end-of-job teardown re-applying the §4
|
|
16
|
+
* provably-safe deletion predicate (`reapJob`).
|
|
17
|
+
*
|
|
18
|
+
* The load-bearing design constraint is the **uniform handle** ({@link
|
|
19
|
+
* IsolatedTree}): both strategies expose the SAME fields the post-claim pipeline
|
|
20
|
+
* reads (`dir`/`branch`/`arbiterRemote`/`arbiterUrl`) plus a strategy-appropriate
|
|
21
|
+
* `teardown`, so the shared build→gate→done-move→rebase→integrate→teardown steps
|
|
22
|
+
* run against EITHER strategy without knowing WHERE the tree lives. This removes
|
|
23
|
+
* the `Job`-shape coupling from the pipeline (`run`'s old `runOneItem` read a
|
|
24
|
+
* concrete `Job`).
|
|
25
|
+
*
|
|
26
|
+
* Wiring a COMMAND to the in-place strategy is the `do-in-place` task — this
|
|
27
|
+
* module only provides the seam + both implementors; `run` keeps using the
|
|
28
|
+
* job-worktree strategy (its observable behaviour is byte-identical).
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* The uniform handle the post-claim pipeline reads from — satisfied IDENTICALLY
|
|
32
|
+
* by both strategies, so the shared steps never depend on a concrete `Job` (and
|
|
33
|
+
* thus never assume a hub mirror / external worktree).
|
|
34
|
+
*/
|
|
35
|
+
export interface IsolatedTree {
|
|
36
|
+
/**
|
|
37
|
+
* The working tree the agent + tests run in: the job worktree (job-worktree
|
|
38
|
+
* strategy) or the current checkout (in-place strategy).
|
|
39
|
+
*/
|
|
40
|
+
dir: string;
|
|
41
|
+
/** The work branch checked out there (`work/<type>-<slug>`). */
|
|
42
|
+
branch: string;
|
|
43
|
+
/**
|
|
44
|
+
* The git remote NAME, VALID INSIDE `dir`, that tracks the arbiter — the
|
|
45
|
+
* rebase/integrate push target. Job-worktree: `origin` (the bare hub mirror's
|
|
46
|
+
* clone remote). In-place: the checkout's own arbiter remote name.
|
|
47
|
+
*/
|
|
48
|
+
arbiterRemote: string;
|
|
49
|
+
/**
|
|
50
|
+
* The arbiter remote URL used for provider auto-detection (a GitHub URL ⇒ the
|
|
51
|
+
* `gh` provider). Job-worktree: the mirror's resolved arbiter URL
|
|
52
|
+
* (`job.mirror.url` today). In-place: the checkout's arbiter remote URL.
|
|
53
|
+
*/
|
|
54
|
+
arbiterUrl: string;
|
|
55
|
+
/**
|
|
56
|
+
* True iff this tree CONTINUED a kept arbiter `work/<slug>` branch (a requeue)
|
|
57
|
+
* rather than cutting fresh off main — the SAME continue-detection both
|
|
58
|
+
* onboarding paths use. The prompt assembly injects a CONTINUE block when set
|
|
59
|
+
* (the `agent-prompt-continue-context` task). Absent / false on a fresh cut.
|
|
60
|
+
*/
|
|
61
|
+
continued?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* True iff a CONTINUE rebase onto fresh main CONFLICTED at onboard-time
|
|
64
|
+
* (a requeue kept a `work/<slug>` whose commits did not replay onto the
|
|
65
|
+
* current main; aborted, never auto-resolved). The pipeline routes the item
|
|
66
|
+
* to needs-attention (the §10 path) instead of running the agent. Absent /
|
|
67
|
+
* false on a fresh cut and on a clean continue.
|
|
68
|
+
*/
|
|
69
|
+
continueRebaseConflict?: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Set iff the CONTINUE reconcile push to the arbiter FAILED TERMINALLY at
|
|
72
|
+
* onboard-time (the stale-lease retry cap exhausted, or a non-stale-lease
|
|
73
|
+
* rejection / unreachable arbiter) — the push helper THROWS, caught so the run
|
|
74
|
+
* does NOT crash leaving the task silently in-progress on the arbiter (the
|
|
75
|
+
* stale-lease-strand bug). The pipeline routes the item to needs-attention,
|
|
76
|
+
* the kept work left committed + recoverable on the branch. Absent on a fresh
|
|
77
|
+
* cut, a clean continue that pushed, and a rebase conflict (which sets
|
|
78
|
+
* {@link continueRebaseConflict} instead).
|
|
79
|
+
*/
|
|
80
|
+
continuePushFailure?: string;
|
|
81
|
+
/**
|
|
82
|
+
* Tear the isolated tree down per the strategy. Job-worktree: re-apply the §4
|
|
83
|
+
* deletion-safety predicate and `git worktree remove`/prune the worktree ONLY
|
|
84
|
+
* if provably safe (`reapJob`). In-place: a NO-OP — the human's checkout is
|
|
85
|
+
* left in a defined state, NEVER reaped. Always safe to call (e.g. in a
|
|
86
|
+
* `finally`).
|
|
87
|
+
*
|
|
88
|
+
* `opts.reachableOnly` (job-worktree only) drops the clean-tree half of the
|
|
89
|
+
* predicate, keeping the reachable-on-arbiter half: a worktree whose durable
|
|
90
|
+
* branch is provably on the arbiter is reaped EVEN WHEN its tree has incidental
|
|
91
|
+
* churn. This is the FAILURE-path opt-in (`performDoRemote`'s needs-attention
|
|
92
|
+
* return, where the seam has already surfaced + pushed the branch), so a
|
|
93
|
+
* churn-dirty-but-arbiter-safe worktree does not linger to poison the next
|
|
94
|
+
* build. It NEVER reaps work not yet on the arbiter (reachability stands).
|
|
95
|
+
* The in-place teardown ignores it (still a no-op).
|
|
96
|
+
*/
|
|
97
|
+
teardown(opts?: {
|
|
98
|
+
reachableOnly?: boolean;
|
|
99
|
+
}): void;
|
|
100
|
+
}
|
|
101
|
+
/** What a strategy needs to prepare an isolated tree for one work item. */
|
|
102
|
+
export interface PrepareInput {
|
|
103
|
+
/** The work slug being processed (→ branch `work/<type>-<slug>`). */
|
|
104
|
+
slug: string;
|
|
105
|
+
/**
|
|
106
|
+
* The item TYPE — `'task'` for a build (intake/`do task:`), `'prd'` for a
|
|
107
|
+
* prd-tasking run (`do prd:`). It NAMESPACES the work branch via
|
|
108
|
+
* {@link workBranchRef} so a same-slug task and prd never collide on the
|
|
109
|
+
* arbiter branch. Defaults to `'task'` (the overwhelmingly-common build
|
|
110
|
+
* path); the prd-tasking path passes `'prd'` explicitly.
|
|
111
|
+
*/
|
|
112
|
+
type?: SlugNamespace;
|
|
113
|
+
/**
|
|
114
|
+
* The sha of the claim commit (`claim: <slug>`) just landed on the arbiter,
|
|
115
|
+
* surfaced out of `performClaim`. The in-place FRESH path branches the work
|
|
116
|
+
* branch from THIS exact commit (and HARD-FAILS if it is unreachable from
|
|
117
|
+
* `<arbiter>/main`) — never a stale same-named branch or a not-yet-advanced
|
|
118
|
+
* local main. Absent on a resume/continue or when the caller has no claim
|
|
119
|
+
* commit (the job-worktree strategy ignores it).
|
|
120
|
+
*/
|
|
121
|
+
claimCommit?: string;
|
|
122
|
+
/** Environment for child git/agent processes. */
|
|
123
|
+
env?: NodeJS.ProcessEnv;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* A way to acquire (and tear down) an isolated working tree on a freshly-fetched
|
|
127
|
+
* main for a slug. The signatures stay SEMANTIC — "prepare an isolated tree;
|
|
128
|
+
* expose a uniform handle; tear it down" — and DO NOT assume WHERE the tree
|
|
129
|
+
* lives, so `do --remote`/`run` (job-worktree) and `do-in-place` (in-place) each
|
|
130
|
+
* select their strategy without the pipeline knowing.
|
|
131
|
+
*/
|
|
132
|
+
export interface IsolationStrategy {
|
|
133
|
+
/** Stable strategy name (for diagnostics / records). */
|
|
134
|
+
readonly name: 'in-place' | 'job-worktree';
|
|
135
|
+
/**
|
|
136
|
+
* Prepare an isolated working tree for `slug` on a freshly-fetched main and
|
|
137
|
+
* return the uniform handle. The handle's `teardown` reverses it per strategy.
|
|
138
|
+
*/
|
|
139
|
+
prepare(input: PrepareInput): IsolatedTree;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* The **job-worktree** strategy — `run`'s EXISTING isolation, extracted behind
|
|
143
|
+
* the seam UNCHANGED. `prepare` ensures the hub mirror + cuts a per-job worktree
|
|
144
|
+
* off the freshly-fetched `<hub>/main` (`createJob`); the handle's `teardown`
|
|
145
|
+
* re-applies the §4 provably-safe deletion predicate (`reapJob`) — reaping the
|
|
146
|
+
* worktree iff its work is clean AND on the arbiter, retaining it otherwise (the
|
|
147
|
+
* never-lose-work signal). The arbiter remote inside the worktree is `origin`
|
|
148
|
+
* (the bare mirror's clone remote), and provider detection keys off the mirror's
|
|
149
|
+
* resolved arbiter URL — byte-identical to today's `run`.
|
|
150
|
+
*/
|
|
151
|
+
export declare function jobWorktreeStrategy(options: {
|
|
152
|
+
/** A working repo to resolve the arbiter URL from (with `arbiter`). */
|
|
153
|
+
fromRepo: string;
|
|
154
|
+
/** Remote name in `fromRepo` whose URL to mirror (default `origin`). */
|
|
155
|
+
arbiter?: string;
|
|
156
|
+
/** The execution working area (config `workspacesDir`). */
|
|
157
|
+
workspacesDir: string;
|
|
158
|
+
}): IsolationStrategy;
|
|
159
|
+
/**
|
|
160
|
+
* Build the uniform handle for a job-worktree `Job` — the EXACT fields `run`'s
|
|
161
|
+
* pipeline read off `job` today (`dir`/`branch`/`arbiterRemote`/`mirror.url`)
|
|
162
|
+
* plus the `reapJob` teardown. Exposed so a caller that already created the
|
|
163
|
+
* `Job` (e.g. `run`'s pipeline, mid-extraction) can wrap it without re-creating.
|
|
164
|
+
*/
|
|
165
|
+
export declare function jobWorktreeHandle(job: Job, env: NodeJS.ProcessEnv | undefined): IsolatedTree;
|
|
166
|
+
/**
|
|
167
|
+
* The **in-place** strategy — the current checkout (a human's clone, or the CI
|
|
168
|
+
* container) IS the isolation. `prepare` fetches the arbiter and switches the
|
|
169
|
+
* checkout to `work/<slug>` cut from the freshly-fetched `<arbiter>/main` (the
|
|
170
|
+
* SAME "every worktree is cut from a fresh main" guarantee, ADR §6), WITHOUT a
|
|
171
|
+
* hub mirror or external worktree. The handle's `arbiterRemote`/`arbiterUrl` come
|
|
172
|
+
* from the checkout's own arbiter remote; `teardown` is a NO-OP — the checkout is
|
|
173
|
+
* left in a defined state on `work/<slug>`, NEVER reaped (it is the human's tree
|
|
174
|
+
* / the only copy of CI's work).
|
|
175
|
+
*
|
|
176
|
+
* NOTE: this strategy assumes the slug is already CLAIMED (the same contract as
|
|
177
|
+
* the job-worktree strategy, whose caller claims before `prepare`). It does not
|
|
178
|
+
* itself claim — `do-in-place` composes the claim (and `start`/`complete`) around
|
|
179
|
+
* the seam. `prepare` here is the thin "put the checkout on a fresh work branch"
|
|
180
|
+
* step the shared pipeline needs; it is unwired in this task.
|
|
181
|
+
*/
|
|
182
|
+
export declare function inPlaceStrategy(options: {
|
|
183
|
+
/** The current checkout to operate in. */
|
|
184
|
+
checkout: string;
|
|
185
|
+
/** Name of the checkout's arbiter git remote. Defaults to `origin`. */
|
|
186
|
+
arbiter?: string;
|
|
187
|
+
}): IsolationStrategy;
|
|
188
|
+
/** How {@link selectIsolationStrategy} chooses between the two strategies. */
|
|
189
|
+
export interface SelectIsolationInput {
|
|
190
|
+
/**
|
|
191
|
+
* The current checkout, when there IS one (the human's clone / CI container).
|
|
192
|
+
* Its presence selects the **in-place** strategy. Absent ⇒ the **job-worktree**
|
|
193
|
+
* strategy (materialise a mirror + worktree in the agents' area).
|
|
194
|
+
*/
|
|
195
|
+
checkout?: string;
|
|
196
|
+
/**
|
|
197
|
+
* A working repo to resolve the arbiter URL from for the job-worktree
|
|
198
|
+
* strategy (with `arbiter`). Required when `checkout` is absent.
|
|
199
|
+
*/
|
|
200
|
+
fromRepo?: string;
|
|
201
|
+
/** Arbiter remote name (default `origin`), used by either strategy. */
|
|
202
|
+
arbiter?: string;
|
|
203
|
+
/** The execution working area for the job-worktree strategy (`workspacesDir`). */
|
|
204
|
+
workspacesDir?: string;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Select the isolation strategy by **"is there a checkout"** (ADR §3) — NOT a
|
|
208
|
+
* hardcoded path:
|
|
209
|
+
*
|
|
210
|
+
* - `checkout` present ⇒ {@link inPlaceStrategy} (the checkout IS the
|
|
211
|
+
* isolation; `do <slug>` in a checkout, the in-place human path).
|
|
212
|
+
* - `checkout` absent ⇒ {@link jobWorktreeStrategy} (mirror + worktree in the
|
|
213
|
+
* agents' area; `do --remote` / `run`).
|
|
214
|
+
*
|
|
215
|
+
* Both yield the same uniform handle, so the caller's pipeline is identical
|
|
216
|
+
* regardless of which strategy was selected.
|
|
217
|
+
*/
|
|
218
|
+
export declare function selectIsolationStrategy(input: SelectIsolationInput): IsolationStrategy;
|
|
219
|
+
//# sourceMappingURL=isolation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolation.d.ts","sourceRoot":"","sources":["../src/isolation.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,GAAG,EAAC,MAAM,gBAAgB,CAAC;AAOnD,OAAO,EAAgB,KAAK,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC5B;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;;;;;;;OASG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI,CAAC;CACjD;AAED,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC5B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IACjC,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,CAAC;IAC3C;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAAC;CAC3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC5C,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAC;CACtB,GAAG,iBAAiB,CAepB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAChC,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,GAChC,YAAY,CA6Bd;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACxC,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,iBAAiB,CA+IpB;AA4CD,8EAA8E;AAC9E,MAAM,WAAW,oBAAoB;IACpC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACtC,KAAK,EAAE,oBAAoB,GACzB,iBAAiB,CAkBnB"}
|