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
package/dist/work-on.js
ADDED
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
import { cpSync, existsSync, mkdirSync, rmSync, statSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { dirname, join, resolve } from 'node:path';
|
|
4
|
+
import { git, runAsync } from './git.js';
|
|
5
|
+
import { performClaim } from './claim-cas.js';
|
|
6
|
+
import { encodeRepoKey, ensureMirror, fetchMirrorMain, mirrorPath, } from './repo-mirror.js';
|
|
7
|
+
import { defaultConfigPath, loadConfig, saveConfig, } from './config.js';
|
|
8
|
+
import { brand } from './brand.js';
|
|
9
|
+
import { workBranchRef } from './slug-namespace.js';
|
|
10
|
+
const DEFAULT_ARBITER = 'origin';
|
|
11
|
+
/** Raised for usage/environment errors (exit 1, outcome 'usage-error'). */
|
|
12
|
+
class WorkOnUsageError extends Error {
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Run the `work-on` ritual. Never throws for the expected lost/contended/refused
|
|
16
|
+
* cases — those are returned with the appropriate exit code and NO worktree.
|
|
17
|
+
* Usage/environment problems surface as exit 1.
|
|
18
|
+
*/
|
|
19
|
+
export async function performWorkOn(options) {
|
|
20
|
+
const note = options.note ?? (() => { });
|
|
21
|
+
try {
|
|
22
|
+
return await runWorkOn(options, note);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
26
|
+
return { exitCode: 1, outcome: 'usage-error', message };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async function runWorkOn(options, note) {
|
|
30
|
+
const slug = options.slug;
|
|
31
|
+
if (!slug) {
|
|
32
|
+
throw new WorkOnUsageError('missing <slug>. usage: dorfl work-on <slug> [--remote <r>]');
|
|
33
|
+
}
|
|
34
|
+
const env = options.env;
|
|
35
|
+
const workspacesDir = options.workspacesDir ?? join(homedir(), brand.workdirName);
|
|
36
|
+
// The human worktree root: configured value wins; otherwise prompt + save on
|
|
37
|
+
// first use (a sensible suggestion, NEVER a silent default; never under
|
|
38
|
+
// ~/.dorfl/).
|
|
39
|
+
const root = await resolveHumanWorktreesRoot(options, note);
|
|
40
|
+
// Resolve the arbiter URL + a CLAIM CONTEXT (a checkout with the arbiter
|
|
41
|
+
// remote where the CAS runs). The ONLY thing that differs between the two
|
|
42
|
+
// forms is the claim context's location; both fetch + branch off the fresh
|
|
43
|
+
// arbiter main, so the starting commit is identical.
|
|
44
|
+
const ctx = await resolveClaimContext({
|
|
45
|
+
slug,
|
|
46
|
+
remote: options.remote,
|
|
47
|
+
cwd: options.cwd,
|
|
48
|
+
arbiter: options.arbiter ?? DEFAULT_ARBITER,
|
|
49
|
+
workspacesDir,
|
|
50
|
+
env,
|
|
51
|
+
note,
|
|
52
|
+
});
|
|
53
|
+
try {
|
|
54
|
+
// Claim FIRST. On a lost/contended/refused claim, create NO worktree
|
|
55
|
+
// (clean failure, exactly like `claim`).
|
|
56
|
+
const claim = await performClaim({
|
|
57
|
+
slug,
|
|
58
|
+
cwd: ctx.claimCwd,
|
|
59
|
+
arbiter: ctx.claimArbiter,
|
|
60
|
+
env,
|
|
61
|
+
humanPath: true,
|
|
62
|
+
override: options.override,
|
|
63
|
+
note,
|
|
64
|
+
});
|
|
65
|
+
if (claim.exitCode !== 0) {
|
|
66
|
+
const outcome = claim.outcome === 'not-ready'
|
|
67
|
+
? 'refused'
|
|
68
|
+
: claim.exitCode === 2
|
|
69
|
+
? 'lost'
|
|
70
|
+
: claim.exitCode === 3
|
|
71
|
+
? 'contended'
|
|
72
|
+
: 'usage-error';
|
|
73
|
+
return { exitCode: claim.exitCode, outcome, message: claim.message };
|
|
74
|
+
}
|
|
75
|
+
// The claim landed. Create the human worktree off the FRESHLY-FETCHED
|
|
76
|
+
// arbiter main (which now includes the claim move). We branch from the hub
|
|
77
|
+
// mirror's main so both forms share one branching primitive.
|
|
78
|
+
const created = createHumanWorktree({
|
|
79
|
+
slug,
|
|
80
|
+
root,
|
|
81
|
+
arbiterUrl: ctx.arbiterUrl,
|
|
82
|
+
workspacesDir,
|
|
83
|
+
env,
|
|
84
|
+
});
|
|
85
|
+
// Copy named gitignored files (copy, not symlink) so the project is
|
|
86
|
+
// runnable; print a security notice. Source resolved per mode.
|
|
87
|
+
const copied = copyGitignoredFiles({
|
|
88
|
+
copy: options.copy,
|
|
89
|
+
copyFrom: options.copyFrom,
|
|
90
|
+
remoteMode: ctx.remoteMode,
|
|
91
|
+
inRepoSource: options.cwd,
|
|
92
|
+
destDir: created.dir,
|
|
93
|
+
note,
|
|
94
|
+
});
|
|
95
|
+
const message = `Created worktree for '${slug}' at ${created.dir} (branch ${created.branch}).`;
|
|
96
|
+
note(message);
|
|
97
|
+
note(`To start working: cd ${created.dir}`);
|
|
98
|
+
// `--agent` (task `agent-interactive-launch`): launch the configured harness
|
|
99
|
+
// INTERACTIVELY in the freshly-created worktree so the human can immediately
|
|
100
|
+
// drive the agent there. It is NOT a tracked job (decision #3): no record, no
|
|
101
|
+
// gate — it blocks in the foreground until the human exits, then control
|
|
102
|
+
// returns and they drive `complete`/`requeue`. The model/session are bound in
|
|
103
|
+
// the CLI's launcher closure (config lives there).
|
|
104
|
+
if (options.launchInteractive) {
|
|
105
|
+
note(`Launching the configured harness interactively in ${created.dir}.`);
|
|
106
|
+
options.launchInteractive({ slug, dir: created.dir, env });
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
exitCode: 0,
|
|
110
|
+
outcome: 'created',
|
|
111
|
+
dir: created.dir,
|
|
112
|
+
branch: created.branch,
|
|
113
|
+
arbiterUrl: ctx.arbiterUrl,
|
|
114
|
+
startCommit: created.startCommit,
|
|
115
|
+
copied,
|
|
116
|
+
message,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
ctx.cleanup();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Resolve where + how the claim CAS runs, per mode. The starting commit is
|
|
125
|
+
* guaranteed identical because the claim and the worktree both branch off the
|
|
126
|
+
* freshly-fetched arbiter main; only the claim context's LOCATION differs.
|
|
127
|
+
*/
|
|
128
|
+
async function resolveClaimContext(params) {
|
|
129
|
+
const { remote, cwd, arbiter, workspacesDir, env, note } = params;
|
|
130
|
+
if (remote === undefined || remote.trim() === '') {
|
|
131
|
+
// IN-REPO: infer the arbiter URL from the current repo; claim runs here.
|
|
132
|
+
if ((await gitSoft(['rev-parse', '--git-dir'], cwd, env)).status !== 0) {
|
|
133
|
+
throw new WorkOnUsageError('not inside a git repository (run inside a clone, or use the remote form: work-on --remote <r> <slug>)');
|
|
134
|
+
}
|
|
135
|
+
const url = await gitSoft(['remote', 'get-url', arbiter], cwd, env);
|
|
136
|
+
if (url.status !== 0) {
|
|
137
|
+
throw new WorkOnUsageError(`no git remote named '${arbiter}' (set one, or pass --arbiter)`);
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
arbiterUrl: url.stdout.trim(),
|
|
141
|
+
claimCwd: cwd,
|
|
142
|
+
claimArbiter: arbiter,
|
|
143
|
+
remoteMode: false,
|
|
144
|
+
cleanup: () => { },
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
// REMOTE: ensure a hub mirror for <remote> (create if absent, like agents do)
|
|
148
|
+
// so the worktree can later branch off it. The claim itself needs a normal
|
|
149
|
+
// (non-bare) checkout with an `origin/main` tracking ref + a work tree to
|
|
150
|
+
// commit in, which a bare mirror does not provide — so the claim runs in a
|
|
151
|
+
// THROWAWAY clone of the arbiter URL (removed in cleanup either way).
|
|
152
|
+
//
|
|
153
|
+
// When the mirror already exists we refresh ONLY `main` (non-pruning): a
|
|
154
|
+
// pruning mirror-fetch here would delete the LOCAL-ONLY `work/<slug>` branches
|
|
155
|
+
// of other live human worktrees off this hub.
|
|
156
|
+
const hubPath = mirrorPath(workspacesDir, remote);
|
|
157
|
+
let mirrorUrl;
|
|
158
|
+
if (existsSync(hubPath)) {
|
|
159
|
+
mirrorUrl = ensureMirrorUrl(remote);
|
|
160
|
+
fetchMirrorMain(hubPath, env);
|
|
161
|
+
note(`Reusing hub mirror for ${mirrorUrl} at ${hubPath}.`);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
const created = ensureMirror({ url: remote, workspacesDir, env });
|
|
165
|
+
mirrorUrl = created.url;
|
|
166
|
+
note(`Created hub mirror for ${mirrorUrl} at ${created.path}.`);
|
|
167
|
+
}
|
|
168
|
+
const claimDir = join(workspacesDir, 'claim', `${encodeRepoKey(mirrorUrl).split('/').join('__')}__${params.slug}`);
|
|
169
|
+
rmSync(claimDir, { recursive: true, force: true });
|
|
170
|
+
mkdirSync(dirname(claimDir), { recursive: true });
|
|
171
|
+
// A lightweight clone whose `origin` IS the arbiter URL — the claim CAS fetches
|
|
172
|
+
// `origin` + branches off `origin/main`, exactly as in the in-repo form.
|
|
173
|
+
git(['clone', '--quiet', mirrorUrl, claimDir], dirname(claimDir), { env });
|
|
174
|
+
return {
|
|
175
|
+
arbiterUrl: mirrorUrl,
|
|
176
|
+
claimCwd: claimDir,
|
|
177
|
+
claimArbiter: 'origin',
|
|
178
|
+
remoteMode: true,
|
|
179
|
+
cleanup: () => rmSync(claimDir, { recursive: true, force: true }),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Create the human worktree at `<root>/<key>/<slug>/` on `work/<slug>`, branched
|
|
184
|
+
* off the freshly-fetched hub-mirror `main`. The mirror is (re-)fetched here too,
|
|
185
|
+
* so even in in-repo mode the worktree is cut from the latest arbiter main — the
|
|
186
|
+
* same-starting-commit guarantee.
|
|
187
|
+
*/
|
|
188
|
+
function createHumanWorktree(params) {
|
|
189
|
+
const { slug, root, arbiterUrl, workspacesDir, env } = params;
|
|
190
|
+
// Ensure the hub mirror exists, then refresh ONLY `main` to the latest arbiter
|
|
191
|
+
// tip (which, post-claim, includes the claim move). We do NOT use the pruning
|
|
192
|
+
// mirror-fetch here: this mirror also holds the LOCAL-ONLY `work/<slug>`
|
|
193
|
+
// branches of other live human worktrees, and a pruning fetch would delete
|
|
194
|
+
// (and corrupt) them. fetchMirrorMain refreshes main without touching them.
|
|
195
|
+
const hubPath = mirrorPath(workspacesDir, arbiterUrl);
|
|
196
|
+
let mirrorUrl = arbiterUrl;
|
|
197
|
+
if (existsSync(hubPath)) {
|
|
198
|
+
fetchMirrorMain(hubPath, env);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
mirrorUrl = ensureMirror({ url: arbiterUrl, workspacesDir, env }).url;
|
|
202
|
+
}
|
|
203
|
+
const key = encodeRepoKey(mirrorUrl);
|
|
204
|
+
// `work-on` builds a TASK in a worktree — the task-namespaced work branch.
|
|
205
|
+
const branch = workBranchRef('task', slug);
|
|
206
|
+
const dir = join(root, key, slug);
|
|
207
|
+
// Clear any stale worktree/branch for this slug (idempotent re-run).
|
|
208
|
+
clearWorktree(hubPath, dir, env);
|
|
209
|
+
pruneBranch(hubPath, branch, env);
|
|
210
|
+
mkdirSync(dirname(dir), { recursive: true });
|
|
211
|
+
git(['worktree', 'add', '--quiet', '-b', branch, dir, 'main'], hubPath, {
|
|
212
|
+
env,
|
|
213
|
+
});
|
|
214
|
+
const startCommit = git(['rev-parse', 'HEAD'], dir, { env }).trim();
|
|
215
|
+
return { dir, branch, startCommit };
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Copy the named gitignored files into the new worktree (COPY, not symlink). A
|
|
219
|
+
* fresh worktree has NONE of your untracked files, so a project that needs e.g.
|
|
220
|
+
* `.env.local` to run won't run without this. Prints a one-line SECURITY NOTICE
|
|
221
|
+
* naming what was copied and that secrets now live in a second location.
|
|
222
|
+
*
|
|
223
|
+
* Source: the current repo in in-repo mode; in remote mode there is no implicit
|
|
224
|
+
* source, so `--copy` REQUIRES `--copy-from <path>`.
|
|
225
|
+
*/
|
|
226
|
+
function copyGitignoredFiles(params) {
|
|
227
|
+
const { copy, copyFrom, remoteMode, inRepoSource, destDir, note } = params;
|
|
228
|
+
if (!copy || copy.trim() === '') {
|
|
229
|
+
return [];
|
|
230
|
+
}
|
|
231
|
+
const patterns = copy
|
|
232
|
+
.split(',')
|
|
233
|
+
.map((p) => p.trim())
|
|
234
|
+
.filter((p) => p.length > 0);
|
|
235
|
+
if (patterns.length === 0) {
|
|
236
|
+
return [];
|
|
237
|
+
}
|
|
238
|
+
const source = resolveCopySource({ remoteMode, copyFrom, inRepoSource });
|
|
239
|
+
const copied = [];
|
|
240
|
+
const missing = [];
|
|
241
|
+
for (const name of patterns) {
|
|
242
|
+
const from = join(source, name);
|
|
243
|
+
if (!existsSync(from)) {
|
|
244
|
+
missing.push(name);
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
const to = join(destDir, name);
|
|
248
|
+
mkdirSync(dirname(to), { recursive: true });
|
|
249
|
+
// Copy (recursively for dirs); explicitly NOT a symlink, so the worktree is
|
|
250
|
+
// tooling-safe and self-contained.
|
|
251
|
+
cpSync(from, to, { recursive: true });
|
|
252
|
+
copied.push(name);
|
|
253
|
+
}
|
|
254
|
+
if (missing.length > 0) {
|
|
255
|
+
note(`!! --copy: not found in ${source} (skipped): ${missing.join(', ')}.`);
|
|
256
|
+
}
|
|
257
|
+
if (copied.length > 0) {
|
|
258
|
+
note(`!! SECURITY NOTICE: copied ${copied.length} gitignored file(s) into the ` +
|
|
259
|
+
`new worktree: ${copied.join(', ')}. These are real copies (not ` +
|
|
260
|
+
`symlinks) — secrets now live in a SECOND location (${destDir}). ` +
|
|
261
|
+
'Treat that worktree like the source for credential hygiene.');
|
|
262
|
+
}
|
|
263
|
+
return copied;
|
|
264
|
+
}
|
|
265
|
+
/** Resolve the source dir for `--copy`, enforcing `--copy-from` in remote mode. */
|
|
266
|
+
function resolveCopySource(params) {
|
|
267
|
+
const { remoteMode, copyFrom, inRepoSource } = params;
|
|
268
|
+
if (remoteMode) {
|
|
269
|
+
if (!copyFrom || copyFrom.trim() === '') {
|
|
270
|
+
throw new WorkOnUsageError('--copy needs an explicit source in remote mode: pass --copy-from <path> ' +
|
|
271
|
+
'(there is no current repo to copy gitignored files from).');
|
|
272
|
+
}
|
|
273
|
+
const src = resolve(copyFrom);
|
|
274
|
+
if (!existsSync(src) || !statSync(src).isDirectory()) {
|
|
275
|
+
throw new WorkOnUsageError(`--copy-from path does not exist or is not a directory: ${src}`);
|
|
276
|
+
}
|
|
277
|
+
return src;
|
|
278
|
+
}
|
|
279
|
+
return inRepoSource;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Resolve the human worktree root: a configured `humanWorktreesDir` wins; else
|
|
283
|
+
* prompt for it (a sensible SUGGESTION, no silent default) and SAVE it, so the
|
|
284
|
+
* human is asked exactly once. NEVER allow a root under `~/.dorfl/` (that
|
|
285
|
+
* is the agents' execution area — work-on is human-only).
|
|
286
|
+
*/
|
|
287
|
+
async function resolveHumanWorktreesRoot(options, note) {
|
|
288
|
+
const configured = options.humanWorktreesDir;
|
|
289
|
+
if (configured && configured.trim() !== '') {
|
|
290
|
+
return assertHumanRoot(resolve(configured));
|
|
291
|
+
}
|
|
292
|
+
if (!options.promptForRoot) {
|
|
293
|
+
throw new WorkOnUsageError('humanWorktreesDir is not configured and no prompt is available; set ' +
|
|
294
|
+
'`humanWorktreesDir` in config (a human-only worktree root, NOT under ' +
|
|
295
|
+
'~/.dorfl/).');
|
|
296
|
+
}
|
|
297
|
+
const suggestion = suggestHumanWorktreesDir();
|
|
298
|
+
const answeredRaw = await options.promptForRoot(suggestion);
|
|
299
|
+
const answered = (answeredRaw ?? '').trim();
|
|
300
|
+
if (answered === '') {
|
|
301
|
+
throw new WorkOnUsageError('no humanWorktreesDir provided — aborting (work-on needs a worktree root).');
|
|
302
|
+
}
|
|
303
|
+
const chosen = assertHumanRoot(resolve(answered));
|
|
304
|
+
if (options.saveRoot) {
|
|
305
|
+
options.saveRoot(chosen);
|
|
306
|
+
note(`Saved humanWorktreesDir = ${chosen} to config.`);
|
|
307
|
+
}
|
|
308
|
+
return chosen;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Reject a human worktree root under `~/.dorfl/` (the agents' area, ADR
|
|
312
|
+
* §3): work-on is human-only and must never share that space.
|
|
313
|
+
*/
|
|
314
|
+
function assertHumanRoot(dir) {
|
|
315
|
+
const agentArea = join(homedir(), brand.workdirName);
|
|
316
|
+
const normalized = dir.endsWith('/') ? dir.slice(0, -1) : dir;
|
|
317
|
+
if (normalized === agentArea || normalized.startsWith(agentArea + '/')) {
|
|
318
|
+
throw new WorkOnUsageError(`humanWorktreesDir must NOT be under ${agentArea} (that is the agents' ` +
|
|
319
|
+
'execution area; work-on is human-only). Choose a separate human dir.');
|
|
320
|
+
}
|
|
321
|
+
return dir;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* A sensible SUGGESTION for the human worktree root. Deliberately uses a name
|
|
325
|
+
* (`~/worktrees`) that does NOT share a prefix with the usual code dir
|
|
326
|
+
* (`~/dev/...`), so shell tab-completion on the code dir never collides with it.
|
|
327
|
+
* This is only a suggestion — there is no silent default; the human confirms.
|
|
328
|
+
*/
|
|
329
|
+
export function suggestHumanWorktreesDir() {
|
|
330
|
+
return join(homedir(), 'worktrees');
|
|
331
|
+
}
|
|
332
|
+
/** Remove a worktree registration from the hub (git's own removal, never rm -rf). */
|
|
333
|
+
function clearWorktree(mirrorPath, dir, env) {
|
|
334
|
+
if (existsSync(dir)) {
|
|
335
|
+
try {
|
|
336
|
+
git(['worktree', 'remove', '--force', dir], mirrorPath, { env });
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
// not a registered worktree — fall through to a plain rm + prune
|
|
340
|
+
rmSync(dir, { recursive: true, force: true });
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
try {
|
|
344
|
+
git(['worktree', 'prune'], mirrorPath, { env });
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
// best-effort
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
/** Drop a branch from the hub if it exists (idempotent re-run safety). */
|
|
351
|
+
function pruneBranch(mirrorPath, branch, env) {
|
|
352
|
+
try {
|
|
353
|
+
git(['branch', '-D', branch], mirrorPath, { env });
|
|
354
|
+
}
|
|
355
|
+
catch {
|
|
356
|
+
// branch may not exist
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* The canonical arbiter URL a mirror tracks for a given `remote` spec. The
|
|
361
|
+
* mirror is cloned from `remote`, so the tracked URL is just the trimmed spec
|
|
362
|
+
* (the same value {@link ensureMirror} would resolve from `url`).
|
|
363
|
+
*/
|
|
364
|
+
function ensureMirrorUrl(remote) {
|
|
365
|
+
return remote.trim();
|
|
366
|
+
}
|
|
367
|
+
/** Run git, returning the raw result (no throw) — for soft checks. */
|
|
368
|
+
function gitSoft(args, cwd, env) {
|
|
369
|
+
return runAsync('git', args, cwd, { env });
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Resolve `humanWorktreesDir` + `configPath` for the CLI: read config from
|
|
373
|
+
* `configPath` and surface its `humanWorktreesDir` (undefined ⇒ first use). The
|
|
374
|
+
* CLI wires the prompt/save around this; kept here so the wiring is testable.
|
|
375
|
+
*/
|
|
376
|
+
export function loadHumanWorktreesDir(configPath = defaultConfigPath()) {
|
|
377
|
+
const config = loadConfig(configPath);
|
|
378
|
+
return { dir: config.humanWorktreesDir, config };
|
|
379
|
+
}
|
|
380
|
+
/** Save a chosen `humanWorktreesDir` back to `configPath`, preserving the rest. */
|
|
381
|
+
export function persistHumanWorktreesDir(dir, configPath = defaultConfigPath()) {
|
|
382
|
+
const config = loadConfig(configPath);
|
|
383
|
+
saveConfig({ ...config, humanWorktreesDir: dir }, configPath);
|
|
384
|
+
}
|
|
385
|
+
// Re-export for callers that want the encoding without importing repo-mirror.
|
|
386
|
+
export { encodeRepoKey };
|
|
387
|
+
//# sourceMappingURL=work-on.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"work-on.js","sourceRoot":"","sources":["../src/work-on.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { type EnsureMirrorResult } from './repo-mirror.js';
|
|
2
|
+
import { type HarnessRecord } from './harness.js';
|
|
3
|
+
import { type SlugNamespace } from './slug-namespace.js';
|
|
4
|
+
/**
|
|
5
|
+
* The workspace manager (ADR §2): one git worktree per **job** (a claimed work
|
|
6
|
+
* item being processed), checked out OUTSIDE the bare hub mirror at
|
|
7
|
+
* `<workspacesDir>/work/<work-id>/`, on branch `work/<slug>`, branched off the
|
|
8
|
+
* hub's freshly-fetched `main`.
|
|
9
|
+
*
|
|
10
|
+
* This is the single isolation primitive (ADR §1: jobs-not-agents) — both the
|
|
11
|
+
* autonomous `run-once` runner and (later) the human `work-on` build on it. It
|
|
12
|
+
* consumes the **`repo-mirror`** hub primitive (it does NOT reimplement mirror
|
|
13
|
+
* management or the repo→key encoding) and leaves a per-job state record (a
|
|
14
|
+
* `<work-id>.json` SIBLING of the worktree, OUTSIDE the checked-out tree —
|
|
15
|
+
* {@link jobRecordPath}) + the worktree on disk for `gc`/`status` to read (those
|
|
16
|
+
* are SEPARATE tasks — this task only provides the state they evaluate).
|
|
17
|
+
*
|
|
18
|
+
* `<workspacesDir>` is STATE, not cache (ADR §3): it lives under a single
|
|
19
|
+
* visible `~/.dorfl/`, never `~/.cache`.
|
|
20
|
+
*/
|
|
21
|
+
/** The on-disk JSON record `gc`/`status` read to evaluate a job. */
|
|
22
|
+
export interface JobRecord {
|
|
23
|
+
/** The work slug being processed. */
|
|
24
|
+
slug: string;
|
|
25
|
+
/** The encoded repo key (the hub mirror key for the arbiter URL). */
|
|
26
|
+
repoKey: string;
|
|
27
|
+
/** The work branch checked out in the worktree (`work/<slug>`). */
|
|
28
|
+
branch: string;
|
|
29
|
+
/** ISO timestamp the job worktree was created. */
|
|
30
|
+
startedAt: string;
|
|
31
|
+
/** Lifecycle state; `gc`/`status` read this alongside the worktree's existence. */
|
|
32
|
+
state: JobState;
|
|
33
|
+
/**
|
|
34
|
+
* Why the job is stuck, when `state` is `needs-attention` (ADR §12). The
|
|
35
|
+
* runner records the reason it routed the job to needs-attention (a red gate,
|
|
36
|
+
* a rebase conflict, …) so `status` can surface it without re-deriving it.
|
|
37
|
+
* Absent for `running`/`done` jobs.
|
|
38
|
+
*/
|
|
39
|
+
reason?: string;
|
|
40
|
+
/**
|
|
41
|
+
* The URL of the review request opened for this job (e.g. a GitHub PR), when
|
|
42
|
+
* `propose` mode + a real provider (ADR §6) opened one. Recorded so `status`
|
|
43
|
+
* can surface it. Absent for merge mode, the push-only `none`/degraded path,
|
|
44
|
+
* and jobs that have not integrated yet.
|
|
45
|
+
*/
|
|
46
|
+
prUrl?: string;
|
|
47
|
+
/** The harness block: how this job is launched + its liveness pointer. */
|
|
48
|
+
harness: HarnessRecord;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A job's lifecycle state, persisted in its record. The reaper (`gc`) and
|
|
52
|
+
* `status` read it together with the worktree's existence (ADR §4); this task
|
|
53
|
+
* only ever sets `running` (and lets the harness/integration update it later).
|
|
54
|
+
*/
|
|
55
|
+
export type JobState = 'running' | 'done' | 'needs-attention';
|
|
56
|
+
/**
|
|
57
|
+
* Encode a flat, deterministic, unique-per-claim **work-id** from the arbiter
|
|
58
|
+
* URL + slug: the hierarchical repo key with its `/` separators flattened to
|
|
59
|
+
* `__`, then `__<slug>` appended (ADR §2). Flat (not hierarchical) so listing /
|
|
60
|
+
* counting / GC of jobs is a flat `ls`. Reuses the `repo-mirror` repo→key
|
|
61
|
+
* encoding (dot→dash per segment) — it does NOT duplicate it.
|
|
62
|
+
*
|
|
63
|
+
* E.g. `git@github.com:wighawag/dorfl.git` + `feat`
|
|
64
|
+
* → `github-com__wighawag__dorfl__feat`.
|
|
65
|
+
*/
|
|
66
|
+
export declare function encodeWorkId(url: string, slug: string): string;
|
|
67
|
+
/**
|
|
68
|
+
* The on-disk location of a job's worktree: `<workspacesDir>/work/<work-id>/`.
|
|
69
|
+
* Flat, OUTSIDE the hub (`<workspacesDir>/repos/...`), under `workspacesDir`
|
|
70
|
+
* (default `~/.dorfl`), never `~/.cache` (ADR §3).
|
|
71
|
+
*/
|
|
72
|
+
export declare function jobWorktreePath(workspacesDir: string, url: string, slug: string): string;
|
|
73
|
+
/** Filename of the per-job record. Derived from the single brand identity
|
|
74
|
+
* (`.{base}-job.json`) so a rename flips it in lockstep.
|
|
75
|
+
*
|
|
76
|
+
* HISTORICAL: this used to be the name of a file written INSIDE the job worktree
|
|
77
|
+
* (`<work-id>/.dorfl-job.json`). That in-tree location was the mistake —
|
|
78
|
+
* a runtime control file inside the checked-out worktree got swept onto the work
|
|
79
|
+
* branch by the runner's broad `git add -A` commits (and once WEDGED a
|
|
80
|
+
* continue-rebase `git switch`). The record now lives at a SIBLING path OUTSIDE
|
|
81
|
+
* the worktree ({@link jobRecordPath}); this constant survives only as the
|
|
82
|
+
* legacy in-tree read-fallback name + as the no-op-build / clean-worktree
|
|
83
|
+
* classification token in `agent-stop.ts`/`gc.ts` (now inert — the record can no
|
|
84
|
+
* longer appear in `git status`). */
|
|
85
|
+
export declare const JOB_RECORD_FILENAME: string;
|
|
86
|
+
/**
|
|
87
|
+
* The on-disk location of a job's state record: a SIBLING of its worktree dir,
|
|
88
|
+
* `<workspacesDir>/work/<work-id>.json` (NEXT TO `<workspacesDir>/work/<work-id>/`,
|
|
89
|
+
* NOT inside it).
|
|
90
|
+
*
|
|
91
|
+
* This is the structural fix for the in-tree leak: the record is still under the
|
|
92
|
+
* same `workspacesDir/work/` control area (so `discoverJobs`'s single-directory
|
|
93
|
+
* walk still finds it), but it is PHYSICALLY OUTSIDE the checked-out git
|
|
94
|
+
* worktree, so the runner's broad `git add -A` commits can NEVER stage it — in
|
|
95
|
+
* ANY repo, with no `.gitignore` entry needed. A `<work-id>.json` file name can
|
|
96
|
+
* never collide with the `<work-id>/` worktree DIR (one carries a `.json`
|
|
97
|
+
* extension, the other does not).
|
|
98
|
+
*
|
|
99
|
+
* Derived purely from the worktree `dir` (sibling = `<dir>.json`) so every
|
|
100
|
+
* existing caller that holds a worktree dir keeps the same `(dir, …)` signature.
|
|
101
|
+
*/
|
|
102
|
+
export declare function jobRecordPath(dir: string): string;
|
|
103
|
+
export interface CreateJobOptions {
|
|
104
|
+
/**
|
|
105
|
+
* The arbiter remote URL to mirror + branch from. Either `url` OR
|
|
106
|
+
* (`fromRepo` + `arbiter`) must be given; if both, `url` wins.
|
|
107
|
+
*/
|
|
108
|
+
url?: string;
|
|
109
|
+
/** A working repo to resolve the arbiter URL from (with `arbiter`). */
|
|
110
|
+
fromRepo?: string;
|
|
111
|
+
/** Remote name in `fromRepo` whose URL to mirror (default `origin`). */
|
|
112
|
+
arbiter?: string;
|
|
113
|
+
/** The work slug being processed (→ branch `work/<type>-<slug>` + work-id). */
|
|
114
|
+
slug: string;
|
|
115
|
+
/**
|
|
116
|
+
* The item TYPE — `'task'` (build) or `'prd'` (tasking) — namespacing the
|
|
117
|
+
* work branch via {@link workBranchRef} so a same-slug task and prd never
|
|
118
|
+
* collide. Defaults to `'task'`.
|
|
119
|
+
*/
|
|
120
|
+
type?: SlugNamespace;
|
|
121
|
+
/** The execution working area (config `workspacesDir`, default `~/.dorfl`). */
|
|
122
|
+
workspacesDir: string;
|
|
123
|
+
/** The initial harness block to persist in the record (default: null adapter). */
|
|
124
|
+
harness?: HarnessRecord;
|
|
125
|
+
env?: NodeJS.ProcessEnv;
|
|
126
|
+
}
|
|
127
|
+
export interface Job {
|
|
128
|
+
/** Working directory the agent + tests run in (the worktree). */
|
|
129
|
+
dir: string;
|
|
130
|
+
/** The work branch checked out there (`work/<slug>`). */
|
|
131
|
+
branch: string;
|
|
132
|
+
/** The slug being processed. */
|
|
133
|
+
slug: string;
|
|
134
|
+
/**
|
|
135
|
+
* The git remote name VALID INSIDE the worktree that tracks the arbiter. A
|
|
136
|
+
* job worktree is cut from the bare hub mirror, whose clone remote is
|
|
137
|
+
* `origin` (pointing at the arbiter URL). So rebase/integrate inside the
|
|
138
|
+
* worktree always target `origin`, regardless of what the source working repo
|
|
139
|
+
* calls its arbiter remote.
|
|
140
|
+
*/
|
|
141
|
+
arbiterRemote: string;
|
|
142
|
+
/** Absolute path to the per-job record. */
|
|
143
|
+
recordPath: string;
|
|
144
|
+
/** The persisted record. */
|
|
145
|
+
record: JobRecord;
|
|
146
|
+
/** The hub-mirror result this job was cut from. */
|
|
147
|
+
mirror: EnsureMirrorResult;
|
|
148
|
+
/**
|
|
149
|
+
* True iff this job CONTINUED a kept arbiter `work/<slug>` branch (a requeue)
|
|
150
|
+
* rather than cutting fresh off main — the worktree was cut from that branch
|
|
151
|
+
* and rebased onto the freshly-fetched main at onboard-time (ADR §10).
|
|
152
|
+
*/
|
|
153
|
+
continued: boolean;
|
|
154
|
+
/**
|
|
155
|
+
* True iff a CONTINUE rebase onto fresh main CONFLICTED (aborted, never
|
|
156
|
+
* auto-resolved). The caller (`run`'s pipeline / `do --remote`) routes the
|
|
157
|
+
* item to needs-attention via the §10 path; the worktree is left on the
|
|
158
|
+
* un-rebased kept branch as the never-lose-work signal.
|
|
159
|
+
*/
|
|
160
|
+
continueRebaseConflict: boolean;
|
|
161
|
+
/**
|
|
162
|
+
* Set iff the CONTINUE reconcile push to the arbiter FAILED TERMINALLY (the
|
|
163
|
+
* stale-lease retry cap was exhausted, or a non-stale-lease rejection such as
|
|
164
|
+
* a protected ref / an unreachable arbiter) — the helper THROWS, and we catch
|
|
165
|
+
* it here so the run does NOT crash leaving the task silently in-progress on
|
|
166
|
+
* the arbiter (the stale-lease-strand bug). The caller routes the item to
|
|
167
|
+
* needs-attention, the kept work left committed + recoverable on the branch.
|
|
168
|
+
* Absent on a fresh cut, a clean continue that pushed, and a rebase conflict
|
|
169
|
+
* (which sets {@link continueRebaseConflict} instead).
|
|
170
|
+
*/
|
|
171
|
+
continuePushFailure?: string;
|
|
172
|
+
/**
|
|
173
|
+
* Remove the job's worktree + work branch from the hub (`git worktree remove`
|
|
174
|
+
* + prune; never a bare `rm -rf`, ADR §4). NOTE: the SAFE-to-delete predicate
|
|
175
|
+
* (ADR §4) is owned by the `gc` task — this is only the mechanical teardown
|
|
176
|
+
* the runner uses after a job is provably saved.
|
|
177
|
+
*/
|
|
178
|
+
dispose(): void;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Create (or recreate) a job: ensure the hub mirror via `repo-mirror`, then
|
|
182
|
+
* `git worktree add` a per-job worktree OUTSIDE the hub at
|
|
183
|
+
* `<workspacesDir>/work/<work-id>/` on `work/<slug>`, branched off the
|
|
184
|
+
* freshly-fetched `<hub>/main`. Writes the per-job record at a SIBLING of the
|
|
185
|
+
* worktree (`<work-id>.json`, OUTSIDE the tree — {@link jobRecordPath}).
|
|
186
|
+
*
|
|
187
|
+
* Distinct slugs ⇒ distinct `work/<slug>` branches, so git's one-branch-per-
|
|
188
|
+
* worktree constraint is naturally avoided (ADR §2). If a stale worktree/branch
|
|
189
|
+
* for this work-id already exists it is cleared first (idempotent re-create).
|
|
190
|
+
*/
|
|
191
|
+
export declare function createJob(options: CreateJobOptions): Job;
|
|
192
|
+
/**
|
|
193
|
+
* Write (or overwrite) a job's record to its SIBLING path ({@link jobRecordPath},
|
|
194
|
+
* `<work-id>.json` next to the worktree), OUTSIDE the checked-out tree. `dir` is
|
|
195
|
+
* the worktree dir, kept as the parameter so every caller is unchanged.
|
|
196
|
+
*/
|
|
197
|
+
export declare function writeJobRecord(dir: string, record: JobRecord): void;
|
|
198
|
+
/**
|
|
199
|
+
* Read a job's record given its worktree `dir`, or `undefined` if absent/invalid.
|
|
200
|
+
*
|
|
201
|
+
* Reads the NEW sibling location ({@link jobRecordPath}) first, then falls back
|
|
202
|
+
* to the LEGACY in-tree location (`<dir>/.dorfl-job.json`) so a job
|
|
203
|
+
* worktree materialised by an OLD binary (record still inside the tree) stays
|
|
204
|
+
* discoverable/reapable until it is torn down. New jobs only ever write the
|
|
205
|
+
* sibling path, so the fallback is purely for in-flight migration.
|
|
206
|
+
*/
|
|
207
|
+
export declare function readJobRecord(dir: string): JobRecord | undefined;
|
|
208
|
+
/**
|
|
209
|
+
* Delete a job's record on teardown — BOTH the new sibling path
|
|
210
|
+
* ({@link jobRecordPath}) and the legacy in-tree path (an old-binary worktree).
|
|
211
|
+
* Best-effort + idempotent (a missing file is fine). Called when a worktree is
|
|
212
|
+
* removed (reaped / disposed / cleared) so the relocated record does not outlive
|
|
213
|
+
* its worktree as an orphan `<work-id>.json` (when the record lived INSIDE the
|
|
214
|
+
* worktree it was deleted WITH it by `git worktree remove`; now that it is a
|
|
215
|
+
* sibling, its teardown must be explicit).
|
|
216
|
+
*/
|
|
217
|
+
export declare function removeJobRecord(dir: string): void;
|
|
218
|
+
/**
|
|
219
|
+
* Update a job's record in place (e.g. flip `state` to `needs-attention` after a
|
|
220
|
+
* rebase conflict), merging the patch over the on-disk record. A no-op if no
|
|
221
|
+
* record exists.
|
|
222
|
+
*/
|
|
223
|
+
export declare function updateJobRecord(dir: string, patch: Partial<JobRecord>): JobRecord | undefined;
|
|
224
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
|