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/src/detect.ts
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import {readdirSync, existsSync, statSync} from 'node:fs';
|
|
2
|
+
import {join} from 'node:path';
|
|
3
|
+
import {workFolderPath, isWorkItemFile} from './work-layout.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Discovery of `work/`-participating repos in a FOLDER. In the registry model
|
|
7
|
+
* (ADR `command-surface-and-journeys` §1) the registered set IS the hub-mirror
|
|
8
|
+
* set on disk — there is NO config `roots`/`remotes` walk. This module is no
|
|
9
|
+
* longer implicit discovery; its sole remaining job is to serve
|
|
10
|
+
* **`remote find <folder>`** (ADR §1): walk ONE folder, find the participating
|
|
11
|
+
* repos, and let the user toggle-add them. `isParticipatingRepo` is the same
|
|
12
|
+
* predicate `remote find` filters on. A repo participates when it holds dorfl
|
|
13
|
+
* WORK content in any lifecycle pool (see {@link isParticipatingRepo}), not only
|
|
14
|
+
* a non-empty `tasks/ready/`.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The `work/` pools whose presence makes a repo a dorfl WORK repo. Participation
|
|
19
|
+
* is NOT "has a claimable task": a repo whose `tasks/ready/` build pool is drained
|
|
20
|
+
* but whose LIFECYCLE queues are full (answered `questions/` sidecars awaiting
|
|
21
|
+
* apply, `needsAnswers` observations awaiting surface, staged prds/tasks awaiting
|
|
22
|
+
* promotion) is still very much participating — the lifecycle rungs
|
|
23
|
+
* (triage / surface / apply / promote) act on exactly those pools. Gating
|
|
24
|
+
* participation on `tasks/ready/` ALONE made such a repo read as non-participating,
|
|
25
|
+
* so `scan --here` returned empty lifecycle buckets and the CI enumerate step found
|
|
26
|
+
* nothing to do (a silent green no-op while real work sat in `questions/`).
|
|
27
|
+
*
|
|
28
|
+
* The predicate therefore mirrors what `enumerate`/`scan` can actually produce
|
|
29
|
+
* items from: it stays a CHEAP, fetch-free local `readdirSync` (no network — it is
|
|
30
|
+
* the pre-gate `remote find` and the cwd-section resolver call before paying for a
|
|
31
|
+
* fetch), just no longer NARROWER than the lifecycle it guards.
|
|
32
|
+
*/
|
|
33
|
+
const PARTICIPATING_POOLS = [
|
|
34
|
+
'tasks-ready',
|
|
35
|
+
'tasks-backlog',
|
|
36
|
+
'specs-proposed',
|
|
37
|
+
'specs-ready',
|
|
38
|
+
'observations',
|
|
39
|
+
'questions',
|
|
40
|
+
] as const;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* A repo participates iff any of its lifecycle-bearing `work/` pools
|
|
44
|
+
* ({@link PARTICIPATING_POOLS}) contains at least one `.md` file. This is the
|
|
45
|
+
* predicate `remote find` (ADR §1) filters on AND the fetch-free gate
|
|
46
|
+
* `scan`/`status` use before resolving the (expensive) cwd section.
|
|
47
|
+
*/
|
|
48
|
+
export function isParticipatingRepo(repoPath: string): boolean {
|
|
49
|
+
return PARTICIPATING_POOLS.some((key) => folderHasWorkItem(repoPath, key));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** True iff the named work folder exists and holds at least one work-item `.md`. */
|
|
53
|
+
function folderHasWorkItem(
|
|
54
|
+
repoPath: string,
|
|
55
|
+
key: (typeof PARTICIPATING_POOLS)[number],
|
|
56
|
+
): boolean {
|
|
57
|
+
let entries: string[];
|
|
58
|
+
try {
|
|
59
|
+
entries = readdirSync(workFolderPath(repoPath, key));
|
|
60
|
+
} catch {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
return entries.some((name) => isWorkItemFile(name));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function shouldPrune(name: string): boolean {
|
|
67
|
+
return name === 'node_modules' || name.startsWith('.');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Walk a single folder, collecting participating repo paths. Prunes
|
|
72
|
+
* `node_modules` and dotdirs, and does not descend into a repo once it is found
|
|
73
|
+
* to participate (a participating repo's own subtree yields no more repos).
|
|
74
|
+
*/
|
|
75
|
+
function walkFolder(folder: string, found: Set<string>): void {
|
|
76
|
+
const stack: string[] = [folder];
|
|
77
|
+
while (stack.length > 0) {
|
|
78
|
+
const dir = stack.pop()!;
|
|
79
|
+
if (isParticipatingRepo(dir)) {
|
|
80
|
+
found.add(dir);
|
|
81
|
+
// Don't descend further into a participating repo.
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
let entries: import('node:fs').Dirent[];
|
|
85
|
+
try {
|
|
86
|
+
entries = readdirSync(dir, {withFileTypes: true});
|
|
87
|
+
} catch {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
for (const entry of entries) {
|
|
91
|
+
if (!entry.isDirectory()) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (shouldPrune(entry.name)) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
stack.push(join(dir, entry.name));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Find every `work/`-participating repo under `folder` (recursively), pruning
|
|
104
|
+
* `node_modules`/dotdirs and not descending into a participating repo. The
|
|
105
|
+
* returned list is deduplicated and sorted (deterministic). This is the
|
|
106
|
+
* discovery primitive behind `remote find <folder>` (ADR §1): the caller filters
|
|
107
|
+
* on {@link isParticipatingRepo} and toggle-adds the chosen ones via `remote
|
|
108
|
+
* add`. A non-existent / non-directory `folder` yields `[]` (never throws).
|
|
109
|
+
*/
|
|
110
|
+
export function findParticipatingRepos(folder: string): string[] {
|
|
111
|
+
const found = new Set<string>();
|
|
112
|
+
if (!existsSync(folder)) {
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
if (!statSync(folder).isDirectory()) {
|
|
117
|
+
return [];
|
|
118
|
+
}
|
|
119
|
+
} catch {
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
walkFolder(folder, found);
|
|
123
|
+
return [...found].sort();
|
|
124
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import {performDo, type DoOptions, type DoResult} from './do.js';
|
|
2
|
+
import {scanRepoPaths} from './scan.js';
|
|
3
|
+
import {ledgerRead, type LedgerReadStrategy} from './ledger-read.js';
|
|
4
|
+
import {
|
|
5
|
+
selectPrioritised,
|
|
6
|
+
taskableSpecs,
|
|
7
|
+
type SpecCandidate,
|
|
8
|
+
type SelectedItem,
|
|
9
|
+
} from './select-priority.js';
|
|
10
|
+
import type {Config} from './config.js';
|
|
11
|
+
import type {ConfigOverrideMap} from './config-override.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The MULTI-ITEM selection forms of `do` (ADR `command-surface-and-journeys`
|
|
15
|
+
* §3), layered ON TOP of the single-item in-place pipeline from `do-in-place`
|
|
16
|
+
* ({@link performDo}) — it does NOT reimplement that pipeline; it SELECTS +
|
|
17
|
+
* ORDERS items and runs the existing pipeline per item, SEQUENTIALLY (`do` is
|
|
18
|
+
* sequential; parallelism is `run`'s job).
|
|
19
|
+
*
|
|
20
|
+
* - **`do` (no arg)** — auto-pick ONE eligible thing and do it.
|
|
21
|
+
* - **`do -n <x>`** — do x eligible things, in sequence.
|
|
22
|
+
* - **`do <a> <b> …`** — do those NAMED items, in sequence.
|
|
23
|
+
*
|
|
24
|
+
* Auto-pick / `-n` draw from TWO POOLS ordered by the configurable
|
|
25
|
+
* `selectionOrder` (the shared, pure {@link selectPrioritised} helper): eligible
|
|
26
|
+
* TASKS (the `build` pool — the existing `scan`/`selectCandidates`/eligibility
|
|
27
|
+
* path) and TASKABLE prds (the `task` pool — built from the prd reader +
|
|
28
|
+
* `autoslice-gate`'s predicate), in the per-repo `selectionOrder` (default `drain`
|
|
29
|
+
* = tasks-first). A selected prd dispatches to the `do prd:<slug>` path (tasking
|
|
30
|
+
* itself is `autoslice-command`, not built here).
|
|
31
|
+
*
|
|
32
|
+
* Explicit multi-arg (`do <a> <b>`) bypasses the pools/priority entirely — the
|
|
33
|
+
* named items are resolved + run in the given order (the operator chose them).
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
/** The single-`do` runner the multi-item layer drives per selected item. */
|
|
37
|
+
export type DoRunner = (options: DoOptions) => Promise<DoResult>;
|
|
38
|
+
|
|
39
|
+
/** Options shared with {@link performDo}, threaded verbatim to each per-item run. */
|
|
40
|
+
type SharedDoOptions = Omit<DoOptions, 'arg'>;
|
|
41
|
+
|
|
42
|
+
export interface PerformDoMultiOptions extends SharedDoOptions {
|
|
43
|
+
/**
|
|
44
|
+
* The resolved repo config (provides `autoTask` for the prd gate,
|
|
45
|
+
* `selectionOrder` for the pool order, and the task-pool selection caps). The
|
|
46
|
+
* per-item runs still receive `autoTask`/`integration`/etc. via the spread
|
|
47
|
+
* `SharedDoOptions`.
|
|
48
|
+
*/
|
|
49
|
+
config: Config;
|
|
50
|
+
/**
|
|
51
|
+
* The per-machine {@link ConfigOverrideMap}. Threaded into the in-place pool
|
|
52
|
+
* scan (`scanRepoPaths`) so the override applies to autopick eligibility just
|
|
53
|
+
* as it does to the single-`do` resolution — WITHOUT it the committed
|
|
54
|
+
* `.dorfl.json` silently beats the per-machine override on this path.
|
|
55
|
+
*/
|
|
56
|
+
override?: ConfigOverrideMap;
|
|
57
|
+
/**
|
|
58
|
+
* `do -n <x>`: how many eligible items to do, in sequence. Auto-pick (no arg,
|
|
59
|
+
* no count) ⇒ 1. SEQUENTIAL — never a parallelism knob (advance-loop locks
|
|
60
|
+
* this: `-n` is always sequential for `do`/`advance`).
|
|
61
|
+
*/
|
|
62
|
+
count?: number;
|
|
63
|
+
/** Override the single-`do` runner (tests inject a stub). Defaults to {@link performDo}. */
|
|
64
|
+
run?: DoRunner;
|
|
65
|
+
/** Override the read seam (prd pool); defaults to the active {@link ledgerRead}. */
|
|
66
|
+
read?: LedgerReadStrategy;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** The aggregate result of a multi-item `do` invocation. */
|
|
70
|
+
export interface DoMultiResult {
|
|
71
|
+
/** Each per-item {@link DoResult}, in the order they ran. */
|
|
72
|
+
results: DoResult[];
|
|
73
|
+
/**
|
|
74
|
+
* The process exit code for the whole invocation: 0 iff EVERY item that ran
|
|
75
|
+
* succeeded (or there was nothing eligible to do — an empty auto-pick is not a
|
|
76
|
+
* failure); otherwise the first non-zero per-item exit code (the worst
|
|
77
|
+
* outcome surfaces). Mirrors the single-`do` exit contract per item.
|
|
78
|
+
*/
|
|
79
|
+
exitCode: number;
|
|
80
|
+
/** Human-readable summary (printed by the CLI). */
|
|
81
|
+
message: string;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The task-pool caps for an in-place `do` selection. `do` is per-repo +
|
|
86
|
+
* sequential, so the REAL bound is the requested `count` (handled by the
|
|
87
|
+
* priority helper); the task-pool selection should not truncate BEFORE the
|
|
88
|
+
* count + the prd pool are combined. We therefore cap the task pool at "all
|
|
89
|
+
* eligible" (a large bound) and let {@link selectPrioritised}'s `count` do the
|
|
90
|
+
* trimming across both pools.
|
|
91
|
+
*/
|
|
92
|
+
const ALL_ELIGIBLE = Number.MAX_SAFE_INTEGER;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Run the AUTO-PICK / `-n <x>` form: build the two pools for `cwd`, order them
|
|
96
|
+
* per the resolved `selectionOrder` (default `drain` = tasks-first), take `count`
|
|
97
|
+
* (default 1), and run the existing `do` pipeline per selected item, SEQUENTIALLY.
|
|
98
|
+
*/
|
|
99
|
+
export async function performDoAuto(
|
|
100
|
+
options: PerformDoMultiOptions,
|
|
101
|
+
): Promise<DoMultiResult> {
|
|
102
|
+
const run = options.run ?? performDo;
|
|
103
|
+
const read = options.read ?? ledgerRead;
|
|
104
|
+
const note = options.note ?? (() => {});
|
|
105
|
+
const cwd = options.cwd;
|
|
106
|
+
const count = options.count ?? 1;
|
|
107
|
+
|
|
108
|
+
// Pool 1 — eligible TASKS via the EXISTING scan/select path (task-only).
|
|
109
|
+
// Thread `override` so the per-machine override is applied per repo (the
|
|
110
|
+
// inner `resolveRepoConfig` re-applies it AFTER the committed file, restoring
|
|
111
|
+
// the override value even though `config` is already resolved).
|
|
112
|
+
const report = scanRepoPaths(
|
|
113
|
+
[cwd],
|
|
114
|
+
options.config,
|
|
115
|
+
new Set(),
|
|
116
|
+
options.override,
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
// Pool 2 — TASKABLE prds: the NEW pool from the shared prd read path
|
|
120
|
+
// (`resolveSpecPool`) filtered by `autoslice-gate`'s predicate (not reinvented).
|
|
121
|
+
const pool = read.resolveSpecPool({repoPath: cwd});
|
|
122
|
+
const specCandidates: SpecCandidate[] = pool.specs.map((spec) => ({
|
|
123
|
+
repoPath: cwd,
|
|
124
|
+
slug: spec.slug,
|
|
125
|
+
humanOnly: spec.humanOnly,
|
|
126
|
+
needsAnswers: spec.needsAnswers,
|
|
127
|
+
taskedAfter: spec.taskedAfter,
|
|
128
|
+
}));
|
|
129
|
+
const eligibleSpecs = taskableSpecs({
|
|
130
|
+
candidates: specCandidates,
|
|
131
|
+
taskedSlugs: pool.taskedSlugs,
|
|
132
|
+
autoTask: options.config.autoTask,
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
// Order across both pools per the resolved `selectionOrder` + bound by count. The
|
|
136
|
+
// task pool is selected via the SHARED `selectCandidates` primitive `run` uses.
|
|
137
|
+
const selected = selectPrioritised({
|
|
138
|
+
report,
|
|
139
|
+
caps: {maxParallel: ALL_ELIGIBLE, perRepoMax: ALL_ELIGIBLE},
|
|
140
|
+
specs: eligibleSpecs,
|
|
141
|
+
selectionOrder: options.config.selectionOrder,
|
|
142
|
+
count,
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
if (selected.length === 0) {
|
|
146
|
+
const message =
|
|
147
|
+
'Nothing eligible to do (no eligible tasks and no taskable prds).';
|
|
148
|
+
note(message);
|
|
149
|
+
return {results: [], exitCode: 0, message};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return runSelectedInSequence(selected, options, run);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Run the EXPLICIT multi-arg form (`do <a> <b> …`): the named items in the GIVEN
|
|
157
|
+
* order (no pool/priority — the operator chose them). Each arg is run through the
|
|
158
|
+
* existing `do` pipeline, which itself resolves bare/`task:`/`prd:` (so a named
|
|
159
|
+
* prd dispatches to the tasking path and a collision errors), SEQUENTIALLY.
|
|
160
|
+
*/
|
|
161
|
+
export async function performDoArgs(
|
|
162
|
+
args: string[],
|
|
163
|
+
options: PerformDoMultiOptions,
|
|
164
|
+
): Promise<DoMultiResult> {
|
|
165
|
+
const run = options.run ?? performDo;
|
|
166
|
+
const selected: SelectedItem[] = args.map((arg) => ({
|
|
167
|
+
repoPath: options.cwd,
|
|
168
|
+
slug: arg,
|
|
169
|
+
// The arg is passed VERBATIM to `performDo` (it does its own slug
|
|
170
|
+
// resolution); the namespace is irrelevant for explicit args.
|
|
171
|
+
namespace: 'task' as const,
|
|
172
|
+
}));
|
|
173
|
+
return runSelectedInSequence(selected, options, run, {verbatimArg: true});
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Run a list of selected items through the existing `do` pipeline, SEQUENTIALLY,
|
|
178
|
+
* threading the shared options to each. For the pool path the `do` arg encodes
|
|
179
|
+
* the namespace (`prd:<slug>` for a selected prd, bare slug for a task); for the
|
|
180
|
+
* explicit-arg path the caller's raw arg is passed verbatim.
|
|
181
|
+
*/
|
|
182
|
+
async function runSelectedInSequence(
|
|
183
|
+
selected: SelectedItem[],
|
|
184
|
+
options: PerformDoMultiOptions,
|
|
185
|
+
run: DoRunner,
|
|
186
|
+
mode: {verbatimArg?: boolean} = {},
|
|
187
|
+
): Promise<DoMultiResult> {
|
|
188
|
+
const shared = sharedDoOptions(options);
|
|
189
|
+
const results: DoResult[] = [];
|
|
190
|
+
for (const item of selected) {
|
|
191
|
+
const arg = mode.verbatimArg
|
|
192
|
+
? item.slug
|
|
193
|
+
: item.namespace === 'spec'
|
|
194
|
+
? `spec:${item.slug}`
|
|
195
|
+
: item.slug;
|
|
196
|
+
const result = await run({...shared, arg});
|
|
197
|
+
results.push(result);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const firstFailure = results.find((r) => r.exitCode !== 0);
|
|
201
|
+
const exitCode = firstFailure ? firstFailure.exitCode : 0;
|
|
202
|
+
const ok = results.filter((r) => r.exitCode === 0).length;
|
|
203
|
+
const message =
|
|
204
|
+
`did ${results.length} item${results.length === 1 ? '' : 's'} ` +
|
|
205
|
+
`(${ok} ok, ${results.length - ok} not).`;
|
|
206
|
+
return {results, exitCode, message};
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/** Strip the multi-only fields, leaving exactly the per-item {@link DoOptions} base. */
|
|
210
|
+
function sharedDoOptions(options: PerformDoMultiOptions): SharedDoOptions {
|
|
211
|
+
const {
|
|
212
|
+
config: _config,
|
|
213
|
+
count: _count,
|
|
214
|
+
run: _run,
|
|
215
|
+
read: _read,
|
|
216
|
+
...rest
|
|
217
|
+
} = options;
|
|
218
|
+
void _config;
|
|
219
|
+
void _count;
|
|
220
|
+
void _run;
|
|
221
|
+
void _read;
|
|
222
|
+
return rest;
|
|
223
|
+
}
|