dorfl 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/advance-ci-template.d.ts +73 -0
- package/dist/advance-ci-template.d.ts.map +1 -0
- package/dist/advance-ci-template.js +104 -0
- package/dist/advance-ci-template.js.map +1 -0
- package/dist/advance-classify.d.ts +132 -0
- package/dist/advance-classify.d.ts.map +1 -0
- package/dist/advance-classify.js +120 -0
- package/dist/advance-classify.js.map +1 -0
- package/dist/advance-drivers.d.ts +182 -0
- package/dist/advance-drivers.d.ts.map +1 -0
- package/dist/advance-drivers.js +231 -0
- package/dist/advance-drivers.js.map +1 -0
- package/dist/advance-isolated.d.ts +156 -0
- package/dist/advance-isolated.d.ts.map +1 -0
- package/dist/advance-isolated.js +256 -0
- package/dist/advance-isolated.js.map +1 -0
- package/dist/advance-lifecycle-template.d.ts +107 -0
- package/dist/advance-lifecycle-template.d.ts.map +1 -0
- package/dist/advance-lifecycle-template.js +668 -0
- package/dist/advance-lifecycle-template.js.map +1 -0
- package/dist/advance-loop-driver.d.ts +325 -0
- package/dist/advance-loop-driver.d.ts.map +1 -0
- package/dist/advance-loop-driver.js +437 -0
- package/dist/advance-loop-driver.js.map +1 -0
- package/dist/advance-treeless-publish.d.ts +108 -0
- package/dist/advance-treeless-publish.d.ts.map +1 -0
- package/dist/advance-treeless-publish.js +71 -0
- package/dist/advance-treeless-publish.js.map +1 -0
- package/dist/advance.d.ts +340 -0
- package/dist/advance.d.ts.map +1 -0
- package/dist/advance.js +1122 -0
- package/dist/advance.js.map +1 -0
- package/dist/advancing-lock.d.ts +294 -0
- package/dist/advancing-lock.d.ts.map +1 -0
- package/dist/advancing-lock.js +594 -0
- package/dist/advancing-lock.js.map +1 -0
- package/dist/agent-launch.d.ts +79 -0
- package/dist/agent-launch.d.ts.map +1 -0
- package/dist/agent-launch.js +61 -0
- package/dist/agent-launch.js.map +1 -0
- package/dist/agent-stop.d.ts +149 -0
- package/dist/agent-stop.d.ts.map +1 -0
- package/dist/agent-stop.js +307 -0
- package/dist/agent-stop.js.map +1 -0
- package/dist/apply-decide.d.ts +127 -0
- package/dist/apply-decide.d.ts.map +1 -0
- package/dist/apply-decide.js +176 -0
- package/dist/apply-decide.js.map +1 -0
- package/dist/apply-merge-action.d.ts +206 -0
- package/dist/apply-merge-action.d.ts.map +1 -0
- package/dist/apply-merge-action.js +307 -0
- package/dist/apply-merge-action.js.map +1 -0
- package/dist/apply-persist.d.ts +174 -0
- package/dist/apply-persist.d.ts.map +1 -0
- package/dist/apply-persist.js +359 -0
- package/dist/apply-persist.js.map +1 -0
- package/dist/arbiter.d.ts +120 -0
- package/dist/arbiter.d.ts.map +1 -0
- package/dist/arbiter.js +255 -0
- package/dist/arbiter.js.map +1 -0
- package/dist/brand.d.ts +70 -0
- package/dist/brand.d.ts.map +1 -0
- package/dist/brand.js +84 -0
- package/dist/brand.js.map +1 -0
- package/dist/buildable-body.d.ts +132 -0
- package/dist/buildable-body.d.ts.map +1 -0
- package/dist/buildable-body.js +131 -0
- package/dist/buildable-body.js.map +1 -0
- package/dist/categorise.d.ts +66 -0
- package/dist/categorise.d.ts.map +1 -0
- package/dist/categorise.js +106 -0
- package/dist/categorise.js.map +1 -0
- package/dist/claim-cas.d.ts +117 -0
- package/dist/claim-cas.d.ts.map +1 -0
- package/dist/claim-cas.js +312 -0
- package/dist/claim-cas.js.map +1 -0
- package/dist/cli-spinner.d.ts +112 -0
- package/dist/cli-spinner.d.ts.map +1 -0
- package/dist/cli-spinner.js +157 -0
- package/dist/cli-spinner.js.map +1 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3094 -0
- package/dist/cli.js.map +1 -0
- package/dist/close-job-template.d.ts +70 -0
- package/dist/close-job-template.d.ts.map +1 -0
- package/dist/close-job-template.js +180 -0
- package/dist/close-job-template.js.map +1 -0
- package/dist/close-job.d.ts +95 -0
- package/dist/close-job.d.ts.map +1 -0
- package/dist/close-job.js +226 -0
- package/dist/close-job.js.map +1 -0
- package/dist/complete.d.ts +361 -0
- package/dist/complete.d.ts.map +1 -0
- package/dist/complete.js +885 -0
- package/dist/complete.js.map +1 -0
- package/dist/concurrency.d.ts +68 -0
- package/dist/concurrency.d.ts.map +1 -0
- package/dist/concurrency.js +112 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/config-override.d.ts +76 -0
- package/dist/config-override.d.ts.map +1 -0
- package/dist/config-override.js +50 -0
- package/dist/config-override.js.map +1 -0
- package/dist/config.d.ts +668 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +241 -0
- package/dist/config.js.map +1 -0
- package/dist/continue-branch.d.ts +249 -0
- package/dist/continue-branch.d.ts.map +1 -0
- package/dist/continue-branch.js +389 -0
- package/dist/continue-branch.js.map +1 -0
- package/dist/cwd-section.d.ts +186 -0
- package/dist/cwd-section.d.ts.map +1 -0
- package/dist/cwd-section.js +209 -0
- package/dist/cwd-section.js.map +1 -0
- package/dist/decision-engine.d.ts +170 -0
- package/dist/decision-engine.d.ts.map +1 -0
- package/dist/decision-engine.js +136 -0
- package/dist/decision-engine.js.map +1 -0
- package/dist/detect.d.ts +17 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +118 -0
- package/dist/detect.js.map +1 -0
- package/dist/do-autopick.d.ts +85 -0
- package/dist/do-autopick.d.ts.map +1 -0
- package/dist/do-autopick.js +112 -0
- package/dist/do-autopick.js.map +1 -0
- package/dist/do-config.d.ts +312 -0
- package/dist/do-config.d.ts.map +1 -0
- package/dist/do-config.js +358 -0
- package/dist/do-config.js.map +1 -0
- package/dist/do-remote-auto.d.ts +75 -0
- package/dist/do-remote-auto.d.ts.map +1 -0
- package/dist/do-remote-auto.js +111 -0
- package/dist/do-remote-auto.js.map +1 -0
- package/dist/do.d.ts +621 -0
- package/dist/do.d.ts.map +1 -0
- package/dist/do.js +1882 -0
- package/dist/do.js.map +1 -0
- package/dist/drop-source.d.ts +96 -0
- package/dist/drop-source.d.ts.map +1 -0
- package/dist/drop-source.js +91 -0
- package/dist/drop-source.js.map +1 -0
- package/dist/eligibility.d.ts +46 -0
- package/dist/eligibility.d.ts.map +1 -0
- package/dist/eligibility.js +34 -0
- package/dist/eligibility.js.map +1 -0
- package/dist/env-config.d.ts +51 -0
- package/dist/env-config.d.ts.map +1 -0
- package/dist/env-config.js +272 -0
- package/dist/env-config.js.map +1 -0
- package/dist/failure-cause.d.ts +70 -0
- package/dist/failure-cause.d.ts.map +1 -0
- package/dist/failure-cause.js +126 -0
- package/dist/failure-cause.js.map +1 -0
- package/dist/format.d.ts +43 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +256 -0
- package/dist/format.js.map +1 -0
- package/dist/frontmatter.d.ts +215 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +345 -0
- package/dist/frontmatter.js.map +1 -0
- package/dist/gate-readiness.d.ts +84 -0
- package/dist/gate-readiness.d.ts.map +1 -0
- package/dist/gate-readiness.js +103 -0
- package/dist/gate-readiness.js.map +1 -0
- package/dist/gc.d.ts +165 -0
- package/dist/gc.d.ts.map +1 -0
- package/dist/gc.js +313 -0
- package/dist/gc.js.map +1 -0
- package/dist/gh-failure.d.ts +42 -0
- package/dist/gh-failure.d.ts.map +1 -0
- package/dist/gh-failure.js +49 -0
- package/dist/gh-failure.js.map +1 -0
- package/dist/git.d.ts +75 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +130 -0
- package/dist/git.js.map +1 -0
- package/dist/github.d.ts +187 -0
- package/dist/github.d.ts.map +1 -0
- package/dist/github.js +343 -0
- package/dist/github.js.map +1 -0
- package/dist/harness.d.ts +242 -0
- package/dist/harness.d.ts.map +1 -0
- package/dist/harness.js +157 -0
- package/dist/harness.js.map +1 -0
- package/dist/identity.d.ts +167 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +231 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +147 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/install-ci-branch-protection.d.ts +147 -0
- package/dist/install-ci-branch-protection.d.ts.map +1 -0
- package/dist/install-ci-branch-protection.js +166 -0
- package/dist/install-ci-branch-protection.js.map +1 -0
- package/dist/install-ci-capabilities/advance-lifecycle.d.ts +15 -0
- package/dist/install-ci-capabilities/advance-lifecycle.d.ts.map +1 -0
- package/dist/install-ci-capabilities/advance-lifecycle.js +28 -0
- package/dist/install-ci-capabilities/advance-lifecycle.js.map +1 -0
- package/dist/install-ci-capabilities/close-job.d.ts +13 -0
- package/dist/install-ci-capabilities/close-job.d.ts.map +1 -0
- package/dist/install-ci-capabilities/close-job.js +26 -0
- package/dist/install-ci-capabilities/close-job.js.map +1 -0
- package/dist/install-ci-capabilities/example-noop.d.ts +16 -0
- package/dist/install-ci-capabilities/example-noop.d.ts.map +1 -0
- package/dist/install-ci-capabilities/example-noop.js +23 -0
- package/dist/install-ci-capabilities/example-noop.js.map +1 -0
- package/dist/install-ci-capabilities/intake.d.ts +15 -0
- package/dist/install-ci-capabilities/intake.d.ts.map +1 -0
- package/dist/install-ci-capabilities/intake.js +28 -0
- package/dist/install-ci-capabilities/intake.js.map +1 -0
- package/dist/install-ci-capabilities/verify.d.ts +14 -0
- package/dist/install-ci-capabilities/verify.d.ts.map +1 -0
- package/dist/install-ci-capabilities/verify.js +27 -0
- package/dist/install-ci-capabilities/verify.js.map +1 -0
- package/dist/install-ci-core.d.ts +446 -0
- package/dist/install-ci-core.d.ts.map +1 -0
- package/dist/install-ci-core.js +760 -0
- package/dist/install-ci-core.js.map +1 -0
- package/dist/install-ci-github.d.ts +167 -0
- package/dist/install-ci-github.d.ts.map +1 -0
- package/dist/install-ci-github.js +315 -0
- package/dist/install-ci-github.js.map +1 -0
- package/dist/install-ci.d.ts +105 -0
- package/dist/install-ci.d.ts.map +1 -0
- package/dist/install-ci.js +363 -0
- package/dist/install-ci.js.map +1 -0
- package/dist/intake-event.d.ts +88 -0
- package/dist/intake-event.d.ts.map +1 -0
- package/dist/intake-event.js +66 -0
- package/dist/intake-event.js.map +1 -0
- package/dist/intake-marker.d.ts +95 -0
- package/dist/intake-marker.d.ts.map +1 -0
- package/dist/intake-marker.js +127 -0
- package/dist/intake-marker.js.map +1 -0
- package/dist/intake-triage.d.ts +48 -0
- package/dist/intake-triage.d.ts.map +1 -0
- package/dist/intake-triage.js +95 -0
- package/dist/intake-triage.js.map +1 -0
- package/dist/intake-trigger-template.d.ts +185 -0
- package/dist/intake-trigger-template.d.ts.map +1 -0
- package/dist/intake-trigger-template.js +449 -0
- package/dist/intake-trigger-template.js.map +1 -0
- package/dist/intake.d.ts +569 -0
- package/dist/intake.d.ts.map +1 -0
- package/dist/intake.js +1628 -0
- package/dist/intake.js.map +1 -0
- package/dist/integration-core.d.ts +539 -0
- package/dist/integration-core.d.ts.map +1 -0
- package/dist/integration-core.js +2195 -0
- package/dist/integration-core.js.map +1 -0
- package/dist/integrator.d.ts +343 -0
- package/dist/integrator.d.ts.map +1 -0
- package/dist/integrator.js +400 -0
- package/dist/integrator.js.map +1 -0
- package/dist/isolation.d.ts +219 -0
- package/dist/isolation.d.ts.map +1 -0
- package/dist/isolation.js +261 -0
- package/dist/isolation.js.map +1 -0
- package/dist/issue-provider.d.ts +349 -0
- package/dist/issue-provider.d.ts.map +1 -0
- package/dist/issue-provider.js +360 -0
- package/dist/issue-provider.js.map +1 -0
- package/dist/item-lock.d.ts +626 -0
- package/dist/item-lock.d.ts.map +1 -0
- package/dist/item-lock.js +1381 -0
- package/dist/item-lock.js.map +1 -0
- package/dist/item-path.d.ts +49 -0
- package/dist/item-path.d.ts.map +1 -0
- package/dist/item-path.js +66 -0
- package/dist/item-path.js.map +1 -0
- package/dist/ledger-lint.d.ts +129 -0
- package/dist/ledger-lint.d.ts.map +1 -0
- package/dist/ledger-lint.js +249 -0
- package/dist/ledger-lint.js.map +1 -0
- package/dist/ledger-read.d.ts +357 -0
- package/dist/ledger-read.d.ts.map +1 -0
- package/dist/ledger-read.js +442 -0
- package/dist/ledger-read.js.map +1 -0
- package/dist/ledger-write.d.ts +330 -0
- package/dist/ledger-write.d.ts.map +1 -0
- package/dist/ledger-write.js +411 -0
- package/dist/ledger-write.js.map +1 -0
- package/dist/lifecycle-gather.d.ts +30 -0
- package/dist/lifecycle-gather.d.ts.map +1 -0
- package/dist/lifecycle-gather.js +205 -0
- package/dist/lifecycle-gather.js.map +1 -0
- package/dist/lifecycle-pools.d.ts +180 -0
- package/dist/lifecycle-pools.d.ts.map +1 -0
- package/dist/lifecycle-pools.js +78 -0
- package/dist/lifecycle-pools.js.map +1 -0
- package/dist/merge-question-surfacer.d.ts +166 -0
- package/dist/merge-question-surfacer.d.ts.map +1 -0
- package/dist/merge-question-surfacer.js +297 -0
- package/dist/merge-question-surfacer.js.map +1 -0
- package/dist/mint-adr.d.ts +126 -0
- package/dist/mint-adr.d.ts.map +1 -0
- package/dist/mint-adr.js +257 -0
- package/dist/mint-adr.js.map +1 -0
- package/dist/mirror-pool-scan.d.ts +125 -0
- package/dist/mirror-pool-scan.d.ts.map +1 -0
- package/dist/mirror-pool-scan.js +104 -0
- package/dist/mirror-pool-scan.js.map +1 -0
- package/dist/needs-attention.d.ts +341 -0
- package/dist/needs-attention.d.ts.map +1 -0
- package/dist/needs-attention.js +900 -0
- package/dist/needs-attention.js.map +1 -0
- package/dist/orphan-sidecar.d.ts +79 -0
- package/dist/orphan-sidecar.d.ts.map +1 -0
- package/dist/orphan-sidecar.js +71 -0
- package/dist/orphan-sidecar.js.map +1 -0
- package/dist/output.d.ts +48 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +66 -0
- package/dist/output.js.map +1 -0
- package/dist/pi-harness.d.ts +179 -0
- package/dist/pi-harness.d.ts.map +1 -0
- package/dist/pi-harness.js +342 -0
- package/dist/pi-harness.js.map +1 -0
- package/dist/placement.d.ts +99 -0
- package/dist/placement.d.ts.map +1 -0
- package/dist/placement.js +67 -0
- package/dist/placement.js.map +1 -0
- package/dist/prd-to-spec.d.ts +315 -0
- package/dist/prd-to-spec.d.ts.map +1 -0
- package/dist/prd-to-spec.js +684 -0
- package/dist/prd-to-spec.js.map +1 -0
- package/dist/prepare.d.ts +121 -0
- package/dist/prepare.d.ts.map +1 -0
- package/dist/prepare.js +140 -0
- package/dist/prepare.js.map +1 -0
- package/dist/prompt.d.ts +360 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +499 -0
- package/dist/prompt.js.map +1 -0
- package/dist/protocol/ADR-FORMAT.md +47 -0
- package/dist/protocol/CLAIM-PROTOCOL.md +217 -0
- package/dist/protocol/REVIEW-PROTOCOL.md +119 -0
- package/dist/protocol/SURFACE-PROTOCOL.md +121 -0
- package/dist/protocol/TASKING-PROTOCOL.md +122 -0
- package/dist/protocol/WORK-CONTRACT.md +276 -0
- package/dist/protocol/spec-template.md +71 -0
- package/dist/protocol/task-template.md +65 -0
- package/dist/readiness.d.ts +66 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +36 -0
- package/dist/readiness.js.map +1 -0
- package/dist/reap-branches.d.ts +102 -0
- package/dist/reap-branches.d.ts.map +1 -0
- package/dist/reap-branches.js +149 -0
- package/dist/reap-branches.js.map +1 -0
- package/dist/recover-isolated.d.ts +72 -0
- package/dist/recover-isolated.d.ts.map +1 -0
- package/dist/recover-isolated.js +188 -0
- package/dist/recover-isolated.js.map +1 -0
- package/dist/registry.d.ts +172 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +296 -0
- package/dist/registry.js.map +1 -0
- package/dist/repo-config.d.ts +201 -0
- package/dist/repo-config.d.ts.map +1 -0
- package/dist/repo-config.js +414 -0
- package/dist/repo-config.js.map +1 -0
- package/dist/repo-key.d.ts +20 -0
- package/dist/repo-key.d.ts.map +1 -0
- package/dist/repo-key.js +68 -0
- package/dist/repo-key.js.map +1 -0
- package/dist/repo-mirror.d.ts +177 -0
- package/dist/repo-mirror.d.ts.map +1 -0
- package/dist/repo-mirror.js +271 -0
- package/dist/repo-mirror.js.map +1 -0
- package/dist/retry-backoff.d.ts +90 -0
- package/dist/retry-backoff.d.ts.map +1 -0
- package/dist/retry-backoff.js +98 -0
- package/dist/retry-backoff.js.map +1 -0
- package/dist/review-gate.d.ts +173 -0
- package/dist/review-gate.d.ts.map +1 -0
- package/dist/review-gate.js +261 -0
- package/dist/review-gate.js.map +1 -0
- package/dist/review-verdict.d.ts +149 -0
- package/dist/review-verdict.d.ts.map +1 -0
- package/dist/review-verdict.js +332 -0
- package/dist/review-verdict.js.map +1 -0
- package/dist/run.d.ts +221 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +963 -0
- package/dist/run.js.map +1 -0
- package/dist/scan.d.ts +308 -0
- package/dist/scan.d.ts.map +1 -0
- package/dist/scan.js +374 -0
- package/dist/scan.js.map +1 -0
- package/dist/select-order.d.ts +75 -0
- package/dist/select-order.d.ts.map +1 -0
- package/dist/select-order.js +108 -0
- package/dist/select-order.js.map +1 -0
- package/dist/select-priority.d.ts +188 -0
- package/dist/select-priority.d.ts.map +1 -0
- package/dist/select-priority.js +80 -0
- package/dist/select-priority.js.map +1 -0
- package/dist/select.d.ts +25 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +43 -0
- package/dist/select.js.map +1 -0
- package/dist/session-path.d.ts +36 -0
- package/dist/session-path.d.ts.map +1 -0
- package/dist/session-path.js +129 -0
- package/dist/session-path.js.map +1 -0
- package/dist/sidecar-apply.d.ts +83 -0
- package/dist/sidecar-apply.d.ts.map +1 -0
- package/dist/sidecar-apply.js +111 -0
- package/dist/sidecar-apply.js.map +1 -0
- package/dist/sidecar.d.ts +245 -0
- package/dist/sidecar.d.ts.map +1 -0
- package/dist/sidecar.js +481 -0
- package/dist/sidecar.js.map +1 -0
- package/dist/slug-namespace.d.ts +204 -0
- package/dist/slug-namespace.d.ts.map +1 -0
- package/dist/slug-namespace.js +229 -0
- package/dist/slug-namespace.js.map +1 -0
- package/dist/spec-complete.d.ts +44 -0
- package/dist/spec-complete.d.ts.map +1 -0
- package/dist/spec-complete.js +69 -0
- package/dist/spec-complete.js.map +1 -0
- package/dist/start.d.ts +97 -0
- package/dist/start.d.ts.map +1 -0
- package/dist/start.js +633 -0
- package/dist/start.js.map +1 -0
- package/dist/status.d.ts +199 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +228 -0
- package/dist/status.js.map +1 -0
- package/dist/surface-gate.d.ts +162 -0
- package/dist/surface-gate.d.ts.map +1 -0
- package/dist/surface-gate.js +206 -0
- package/dist/surface-gate.js.map +1 -0
- package/dist/surface-persist.d.ts +86 -0
- package/dist/surface-persist.d.ts.map +1 -0
- package/dist/surface-persist.js +129 -0
- package/dist/surface-persist.js.map +1 -0
- package/dist/tasker-review-loop.d.ts +249 -0
- package/dist/tasker-review-loop.d.ts.map +1 -0
- package/dist/tasker-review-loop.js +369 -0
- package/dist/tasker-review-loop.js.map +1 -0
- package/dist/tasking-eligibility.d.ts +74 -0
- package/dist/tasking-eligibility.d.ts.map +1 -0
- package/dist/tasking-eligibility.js +52 -0
- package/dist/tasking-eligibility.js.map +1 -0
- package/dist/tasking-lock.d.ts +111 -0
- package/dist/tasking-lock.d.ts.map +1 -0
- package/dist/tasking-lock.js +256 -0
- package/dist/tasking-lock.js.map +1 -0
- package/dist/tasking.d.ts +275 -0
- package/dist/tasking.d.ts.map +1 -0
- package/dist/tasking.js +952 -0
- package/dist/tasking.js.map +1 -0
- package/dist/triage-gate.d.ts +127 -0
- package/dist/triage-gate.d.ts.map +1 -0
- package/dist/triage-gate.js +139 -0
- package/dist/triage-gate.js.map +1 -0
- package/dist/triage-persist.d.ts +163 -0
- package/dist/triage-persist.d.ts.map +1 -0
- package/dist/triage-persist.js +387 -0
- package/dist/triage-persist.js.map +1 -0
- package/dist/verdict-json.d.ts +32 -0
- package/dist/verdict-json.d.ts.map +1 -0
- package/dist/verdict-json.js +74 -0
- package/dist/verdict-json.js.map +1 -0
- package/dist/verify-workflow-template.d.ts +60 -0
- package/dist/verify-workflow-template.d.ts.map +1 -0
- package/dist/verify-workflow-template.js +126 -0
- package/dist/verify-workflow-template.js.map +1 -0
- package/dist/verify.d.ts +60 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +62 -0
- package/dist/verify.js.map +1 -0
- package/dist/watch-session.d.ts +112 -0
- package/dist/watch-session.d.ts.map +1 -0
- package/dist/watch-session.js +347 -0
- package/dist/watch-session.js.map +1 -0
- package/dist/work-layout.d.ts +198 -0
- package/dist/work-layout.d.ts.map +1 -0
- package/dist/work-layout.js +217 -0
- package/dist/work-layout.js.map +1 -0
- package/dist/work-on.d.ts +154 -0
- package/dist/work-on.d.ts.map +1 -0
- package/dist/work-on.js +387 -0
- package/dist/work-on.js.map +1 -0
- package/dist/workspace.d.ts +224 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +325 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +46 -2
- package/src/advance-ci-template.ts +203 -0
- package/src/advance-classify.ts +197 -0
- package/src/advance-drivers.ts +414 -0
- package/src/advance-isolated.ts +432 -0
- package/src/advance-lifecycle-template.ts +791 -0
- package/src/advance-loop-driver.ts +745 -0
- package/src/advance-treeless-publish.ts +177 -0
- package/src/advance.ts +1564 -0
- package/src/advancing-lock.ts +988 -0
- package/src/agent-launch.ts +137 -0
- package/src/agent-stop.ts +361 -0
- package/src/apply-decide.ts +242 -0
- package/src/apply-merge-action.ts +502 -0
- package/src/apply-persist.ts +518 -0
- package/src/arbiter.ts +372 -0
- package/src/brand.ts +111 -0
- package/src/buildable-body.ts +196 -0
- package/src/categorise.ts +158 -0
- package/src/claim-cas.ts +513 -0
- package/src/cli-spinner.ts +225 -0
- package/src/cli.ts +4369 -0
- package/src/close-job-template.ts +236 -0
- package/src/close-job.ts +319 -0
- package/src/complete.ts +1379 -0
- package/src/concurrency.ts +151 -0
- package/src/config-override.ts +116 -0
- package/src/config.ts +883 -0
- package/src/continue-branch.ts +542 -0
- package/src/cwd-section.ts +392 -0
- package/src/decision-engine.ts +272 -0
- package/src/detect.ts +124 -0
- package/src/do-autopick.ts +223 -0
- package/src/do-config.ts +589 -0
- package/src/do-remote-auto.ts +197 -0
- package/src/do.ts +2623 -0
- package/src/drop-source.ts +194 -0
- package/src/eligibility.ts +79 -0
- package/src/env-config.ts +305 -0
- package/src/failure-cause.ts +142 -0
- package/src/format.ts +313 -0
- package/src/frontmatter.ts +485 -0
- package/src/gate-readiness.ts +147 -0
- package/src/gc.ts +510 -0
- package/src/gh-failure.ts +53 -0
- package/src/git.ts +186 -0
- package/src/github.ts +468 -0
- package/src/harness.ts +355 -0
- package/src/identity.ts +322 -0
- package/src/index.ts +785 -0
- package/src/install-ci-branch-protection.ts +255 -0
- package/src/install-ci-capabilities/advance-lifecycle.ts +34 -0
- package/src/install-ci-capabilities/close-job.ts +32 -0
- package/src/install-ci-capabilities/example-noop.ts +24 -0
- package/src/install-ci-capabilities/intake.ts +34 -0
- package/src/install-ci-capabilities/verify.ts +33 -0
- package/src/install-ci-core.ts +1088 -0
- package/src/install-ci-github.ts +376 -0
- package/src/install-ci.ts +552 -0
- package/src/intake-event.ts +102 -0
- package/src/intake-marker.ts +195 -0
- package/src/intake-triage.ts +138 -0
- package/src/intake-trigger-template.ts +591 -0
- package/src/intake.ts +2445 -0
- package/src/integration-core.ts +3065 -0
- package/src/integrator.ts +771 -0
- package/src/isolation.ts +484 -0
- package/src/issue-provider.ts +733 -0
- package/src/item-lock.ts +1858 -0
- package/src/item-path.ts +75 -0
- package/src/ledger-lint.ts +332 -0
- package/src/ledger-read.ts +924 -0
- package/src/ledger-write.ts +865 -0
- package/src/lifecycle-gather.ts +298 -0
- package/src/lifecycle-pools.ts +250 -0
- package/src/merge-question-surfacer.ts +496 -0
- package/src/mint-adr.ts +362 -0
- package/src/mirror-pool-scan.ts +240 -0
- package/src/needs-attention.ts +1506 -0
- package/src/orphan-sidecar.ts +150 -0
- package/src/output.ts +89 -0
- package/src/pi-harness.ts +403 -0
- package/src/placement.ts +131 -0
- package/src/prd-to-spec.ts +1023 -0
- package/src/prepare.ts +230 -0
- package/src/prompt.ts +760 -0
- package/src/readiness.ts +98 -0
- package/src/reap-branches.ts +278 -0
- package/src/recover-isolated.ts +276 -0
- package/src/registry.ts +475 -0
- package/src/repo-config.ts +550 -0
- package/src/repo-key.ts +74 -0
- package/src/repo-mirror.ts +367 -0
- package/src/retry-backoff.ts +130 -0
- package/src/review-gate.ts +389 -0
- package/src/review-verdict.ts +422 -0
- package/src/run.ts +1430 -0
- package/src/scan.ts +611 -0
- package/src/select-order.ts +143 -0
- package/src/select-priority.ts +266 -0
- package/src/select.ts +62 -0
- package/src/session-path.ts +153 -0
- package/src/sidecar-apply.ts +216 -0
- package/src/sidecar.ts +700 -0
- package/src/slug-namespace.ts +367 -0
- package/src/spec-complete.ts +118 -0
- package/src/start.ts +974 -0
- package/src/status.ts +441 -0
- package/src/surface-gate.ts +337 -0
- package/src/surface-persist.ts +241 -0
- package/src/tasker-review-loop.ts +671 -0
- package/src/tasking-eligibility.ts +114 -0
- package/src/tasking-lock.ts +416 -0
- package/src/tasking.ts +1438 -0
- package/src/triage-gate.ts +248 -0
- package/src/triage-persist.ts +570 -0
- package/src/verdict-json.ts +73 -0
- package/src/verify-workflow-template.ts +159 -0
- package/src/verify.ts +123 -0
- package/src/watch-session.ts +397 -0
- package/src/work-layout.ts +262 -0
- package/src/work-on.ts +660 -0
- package/src/workspace.ts +502 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { runAsync } from './git.js';
|
|
2
|
+
import { acquireItemLock, releaseItemLock, heldTaskSlugs } from './item-lock.js';
|
|
3
|
+
import { extractPromptSection } from './prompt.js';
|
|
4
|
+
import { resolveReadiness } from './readiness.js';
|
|
5
|
+
import { workBranchRef } from './slug-namespace.js';
|
|
6
|
+
import { workItemRel } from './work-layout.js';
|
|
7
|
+
/**
|
|
8
|
+
* The "lost" diagnostic for a held-lock loss, reused so its message carries the
|
|
9
|
+
* recovery hints a human re-running their OWN item needs. The body now STAYS in
|
|
10
|
+
* `work/backlog/` (claim never moves it), so a held item is identified by its LOCK
|
|
11
|
+
* (`action: implement` held on the per-item ref), not an `in-progress/` folder: a
|
|
12
|
+
* held lock + the body still in `backlog/` is the normal claimed state. We fetch
|
|
13
|
+
* the lock refs and, when the slug's lock is held, surface the resume/requeue
|
|
14
|
+
* recovery hints; otherwise (the body left `backlog/` entirely — done/removed) we
|
|
15
|
+
* fall back to the generic message.
|
|
16
|
+
*/
|
|
17
|
+
async function lostMessage(slug, arbiter, cwd, env, fallback) {
|
|
18
|
+
const held = await heldTaskSlugs(cwd, arbiter, env);
|
|
19
|
+
if (held.has(slug)) {
|
|
20
|
+
return `'${slug}' is already claimed on ${arbiter}/main (its per-item lock is held). If someone else claimed it, pick another item; if it's your own (e.g. an interrupted run), continue it with \`dorfl resume ${slug}\` (or \`work-on\`), or recover via \`requeue\`.`;
|
|
21
|
+
}
|
|
22
|
+
return fallback;
|
|
23
|
+
}
|
|
24
|
+
/** Raised for usage/environment errors (exit 1). */
|
|
25
|
+
class ClaimUsageError extends Error {
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Raised for a deliberate readiness REFUSAL (exit 1, outcome 'not-ready') —
|
|
29
|
+
* distinct from a usage/environment error. The task has an unmet `blockedBy`
|
|
30
|
+
* and the override was not supplied, so nothing is claimed.
|
|
31
|
+
*/
|
|
32
|
+
class ClaimNotReady extends Error {
|
|
33
|
+
}
|
|
34
|
+
const DEFAULT_ARBITER = 'origin';
|
|
35
|
+
/**
|
|
36
|
+
* Perform the claim CAS. Never throws for the expected "lost the race" or
|
|
37
|
+
* "contended" cases — those are returned as exit 2 / 3. Usage/environment
|
|
38
|
+
* problems surface as exit 1. A successful claim is exit 0. This mirrors
|
|
39
|
+
* claim.sh's control flow exactly (refuse dirty tree → loop attempts → on
|
|
40
|
+
* rejection refetch & decide lost-vs-advanced → cap retries → back off).
|
|
41
|
+
*/
|
|
42
|
+
export async function performClaim(options) {
|
|
43
|
+
const note = options.note ?? (() => { });
|
|
44
|
+
try {
|
|
45
|
+
return await runClaim(options, note);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
if (err instanceof ClaimNotReady) {
|
|
49
|
+
return { exitCode: 1, outcome: 'not-ready', message: err.message };
|
|
50
|
+
}
|
|
51
|
+
if (err instanceof ClaimUsageError) {
|
|
52
|
+
return { exitCode: 1, outcome: 'usage-error', message: err.message };
|
|
53
|
+
}
|
|
54
|
+
// Any other unexpected failure is an environment error (exit 1), never a
|
|
55
|
+
// false "claimed". claim.sh treats unexpected rc the same way (die → 1).
|
|
56
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
57
|
+
return { exitCode: 1, outcome: 'usage-error', message };
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async function runClaim(options, note) {
|
|
61
|
+
const slug = options.slug;
|
|
62
|
+
const arbiter = options.arbiter ?? DEFAULT_ARBITER;
|
|
63
|
+
const dryRun = options.dryRun ?? false;
|
|
64
|
+
const cwd = options.cwd;
|
|
65
|
+
const env = options.env;
|
|
66
|
+
if (!slug) {
|
|
67
|
+
throw new ClaimUsageError('missing <slug>. usage: dorfl claim <slug> [--arbiter remote]');
|
|
68
|
+
}
|
|
69
|
+
if ((await gitSoft(['rev-parse', '--git-dir'], cwd, env)).status !== 0) {
|
|
70
|
+
throw new ClaimUsageError('not inside a git repository');
|
|
71
|
+
}
|
|
72
|
+
if ((await gitSoft(['remote', 'get-url', arbiter], cwd, env)).status !== 0) {
|
|
73
|
+
throw new ClaimUsageError(`no git remote named '${arbiter}' (set one, or pass --arbiter)`);
|
|
74
|
+
}
|
|
75
|
+
// Refuse to run with a dirty tree — the claim must be a clean, isolated commit.
|
|
76
|
+
const dirtyWorktree = (await gitSoft(['diff', '--quiet'], cwd, env)).status !== 0;
|
|
77
|
+
const dirtyIndex = (await gitSoft(['diff', '--cached', '--quiet'], cwd, env)).status !== 0;
|
|
78
|
+
if (dirtyWorktree || dirtyIndex) {
|
|
79
|
+
throw new ClaimUsageError('working tree has uncommitted changes; commit/stash them before claiming');
|
|
80
|
+
}
|
|
81
|
+
// HUMAN-path readiness guard (run BEFORE the CAS so a not-ready task is never
|
|
82
|
+
// claimed). Reads the task frontmatter + `work/done/` from `<arbiter>/main`
|
|
83
|
+
// (the same source of truth the folder check uses) and resolves `blockedBy`
|
|
84
|
+
// via the shared resolveBlockedBy. Skipped entirely for the autonomous runner
|
|
85
|
+
// (no `humanPath`), whose eligibility filter already handles these upstream.
|
|
86
|
+
if (options.humanPath) {
|
|
87
|
+
await gitHard(['fetch', '--quiet', arbiter], cwd, env);
|
|
88
|
+
const readiness = await resolveReadiness({
|
|
89
|
+
slug,
|
|
90
|
+
cwd,
|
|
91
|
+
arbiter,
|
|
92
|
+
override: options.override === true,
|
|
93
|
+
env,
|
|
94
|
+
});
|
|
95
|
+
if (readiness.refuse) {
|
|
96
|
+
const missing = readiness.missing.join(', ');
|
|
97
|
+
const message = `'${slug}' is not ready: blocked by unmet dependencies not yet in ` +
|
|
98
|
+
`work/done/ on ${arbiter}/main: ${missing}. ` +
|
|
99
|
+
'Re-run with --force (or --ignore-not-ready) to claim it anyway.';
|
|
100
|
+
note(message);
|
|
101
|
+
throw new ClaimNotReady(message);
|
|
102
|
+
}
|
|
103
|
+
if (readiness.overridden && readiness.missing.length > 0) {
|
|
104
|
+
note(`!! readiness guard OVERRIDDEN: claiming '${slug}' despite unmet ` +
|
|
105
|
+
`blockedBy: ${readiness.missing.join(', ')} (not yet in work/done/).`);
|
|
106
|
+
}
|
|
107
|
+
if (readiness.needsAnswers && !readiness.overridden) {
|
|
108
|
+
note(`!! WARNING: '${slug}' is flagged needsAnswers: true — it has open ` +
|
|
109
|
+
'questions (see the task body). Claiming it anyway (human path); ' +
|
|
110
|
+
'resolve the questions before/while building.');
|
|
111
|
+
}
|
|
112
|
+
else if (readiness.needsAnswers && readiness.overridden) {
|
|
113
|
+
note(`!! readiness guard OVERRIDDEN: silencing the needsAnswers warning for '${slug}'.`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const backlog = workItemRel('tasks-ready', `${slug}.md`);
|
|
117
|
+
const staged = workItemRel('tasks-backlog', `${slug}.md`);
|
|
118
|
+
const branch = workBranchRef('task', slug);
|
|
119
|
+
/**
|
|
120
|
+
* The CLAIMABLE-RESIDENCE half of the predicate: the body rests in the pool
|
|
121
|
+
* (`tasks/ready/`) on `<arbiter>/main`, OR \u2014 under `--allow-backlog` \u2014 in
|
|
122
|
+
* `tasks/backlog/` (staging). The held-lock half is the create-only acquire.
|
|
123
|
+
* Folder-agnostic exclusion is the lock, never the folder, so a staged body is
|
|
124
|
+
* a legitimate claimable residence under the flag; otherwise staging is invisible.
|
|
125
|
+
*/
|
|
126
|
+
async function claimableBodyRel() {
|
|
127
|
+
if (await catFileExists(`${arbiter}/main:${backlog}`, cwd, env)) {
|
|
128
|
+
return backlog;
|
|
129
|
+
}
|
|
130
|
+
if (options.allowBacklog === true &&
|
|
131
|
+
(await catFileExists(`${arbiter}/main:${staged}`, cwd, env))) {
|
|
132
|
+
return staged;
|
|
133
|
+
}
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
async function bodyRestsClaimable() {
|
|
137
|
+
return (await claimableBodyRel()) !== undefined;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* The human-facing folder label for a resolved claimable body path (`work/<dir>`,
|
|
141
|
+
* e.g. `work/tasks/ready` or `work/tasks/backlog`). Derived from the ACTUAL
|
|
142
|
+
* resolved residence so the claim message never hard-codes the wrong folder.
|
|
143
|
+
*/
|
|
144
|
+
function residenceFolder(bodyRel) {
|
|
145
|
+
const dir = bodyRel.slice(0, bodyRel.lastIndexOf('/'));
|
|
146
|
+
return dir === '' ? bodyRel : dir;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* PRE-CLAIM WELL-FORMEDNESS GUARD (this task's interim guard against the
|
|
150
|
+
* promptless-promoted-task strand). The validator `resolveTask` /
|
|
151
|
+
* `extractPromptSection` (`prompt.ts`) requires a task body to carry a
|
|
152
|
+
* `## Prompt` section; it runs at DISPATCH (`do.ts` step 5), AFTER the claim,
|
|
153
|
+
* so a body missing `## Prompt` was caught only post-claim — the failure routed
|
|
154
|
+
* to `saveAgentFailure`, which left the lock `state: stuck`. We run the SAME
|
|
155
|
+
* validator (`extractPromptSection`, the single source of truth for "what makes
|
|
156
|
+
* a task dispatchable") HERE, BEFORE the lock is acquired, so a malformed body
|
|
157
|
+
* from ANY source (promotion, hand-authored, externally edited) is refused with a
|
|
158
|
+
* clean usage error and NO lock is taken. `bodyRel` is the resolved claimable
|
|
159
|
+
* residence (`tasks/ready/` or, under the flag, `tasks/backlog/`). A genuinely
|
|
160
|
+
* absent body is NOT this guard's concern (the claimability check returns `lost`
|
|
161
|
+
* separately) — this only fires when a body that DOES rest claimable lacks a
|
|
162
|
+
* `## Prompt`.
|
|
163
|
+
*/
|
|
164
|
+
async function assertBodyWellFormed(bodyRel) {
|
|
165
|
+
const show = await gitSoft(['show', `${arbiter}/main:${bodyRel}`], cwd, env);
|
|
166
|
+
if (show.status !== 0) {
|
|
167
|
+
// The body vanished between the residence check and this read — leave it to
|
|
168
|
+
// the claimability path to report `lost`; do not synthesise a guard error.
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (extractPromptSection(show.stdout) === undefined) {
|
|
172
|
+
throw new ClaimUsageError(`'${slug}' (${bodyRel}) has no '## Prompt' section, so it is not ` +
|
|
173
|
+
'dispatchable — add a `## Prompt` section to the task body before ' +
|
|
174
|
+
'claiming it. NO lock was acquired.');
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// UNIFIED PER-ITEM LOCK — the WHOLE of the claim now (prd
|
|
178
|
+
// `ledger-status-per-item-lock-refs` US #1/#15/#16; ADR
|
|
179
|
+
// `ledger-status-on-per-item-lock-refs`). The interim dual-write is GONE: claim
|
|
180
|
+
// acquires the item's per-item lock (`action: implement`) and writes NOTHING to
|
|
181
|
+
// `main` — the body STAYS at `work/backlog/<slug>.md`, the claimable predicate is
|
|
182
|
+
// "in `backlog/` on `main` AND no lock held", and the held lock IS the claim. So
|
|
183
|
+
// a protected-`main` repo can be claimed (claim touches no protected ref).
|
|
184
|
+
//
|
|
185
|
+
// A dry-run takes no lock (it mutates nothing) and just reports it WOULD claim.
|
|
186
|
+
/** The not-found diagnostic, naming the pool (and staging under the flag). */
|
|
187
|
+
const notFoundFallback = options.allowBacklog === true
|
|
188
|
+
? `neither '${backlog}' nor '${staged}' found on ${arbiter}/main (already done/removed, or wrong slug).`
|
|
189
|
+
: `'${backlog}' not found on ${arbiter}/main (already done/removed, or wrong slug).`;
|
|
190
|
+
if (dryRun) {
|
|
191
|
+
await gitHard(['fetch', '--quiet', arbiter], cwd, env);
|
|
192
|
+
const bodyRel = await claimableBodyRel();
|
|
193
|
+
if (bodyRel === undefined) {
|
|
194
|
+
const message = await lostMessage(slug, arbiter, cwd, env, notFoundFallback);
|
|
195
|
+
note(message);
|
|
196
|
+
return { exitCode: 2, outcome: 'lost', message };
|
|
197
|
+
}
|
|
198
|
+
// A dry-run still runs the pre-claim well-formedness guard so it reports a
|
|
199
|
+
// promptless body as a usage error rather than "would claim" it.
|
|
200
|
+
await assertBodyWellFormed(bodyRel);
|
|
201
|
+
const message = `DRY-RUN: would acquire the per-item lock for '${slug}' (body stays in ${residenceFolder(bodyRel)}/).`;
|
|
202
|
+
note(message);
|
|
203
|
+
return { exitCode: 0, outcome: 'claimed', message };
|
|
204
|
+
}
|
|
205
|
+
// PRE-CLAIM WELL-FORMEDNESS GUARD: fetch + read the claimable body and refuse a
|
|
206
|
+
// task missing its `## Prompt` BEFORE the lock is acquired (so a malformed body
|
|
207
|
+
// never strands a `state: stuck` lock at dispatch). A genuinely absent body is
|
|
208
|
+
// left to the post-lock claimability re-check to report as `lost`; this guard
|
|
209
|
+
// only fires for a body that DOES rest claimable but is not dispatchable.
|
|
210
|
+
await gitHard(['fetch', '--quiet', arbiter], cwd, env);
|
|
211
|
+
{
|
|
212
|
+
const bodyRel = await claimableBodyRel();
|
|
213
|
+
if (bodyRel !== undefined) {
|
|
214
|
+
await assertBodyWellFormed(bodyRel);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Acquire the lock FIRST. A lock `lost` (someone already holds this SAME item's
|
|
218
|
+
// lock) makes claim lose DEFINITIVELY — exit 2, NO retry budget (a per-item ref
|
|
219
|
+
// never falsely contends, so a rejection is a GENUINE same-item conflict the
|
|
220
|
+
// loser should lose). We do NOT try to tell "our own orphaned lock" apart by
|
|
221
|
+
// holder identity and auto-reclaim it: holder ids are NOT unique (a CI bot claims
|
|
222
|
+
// many items under one `user.name`), so a release+re-acquire "reclaim" could let a
|
|
223
|
+
// concurrent LOSER release the WINNER's still-valid lock — and an automatic sweep
|
|
224
|
+
// contradicts the ADR's recovery model (`ledger-status-on-per-item-lock-refs`:
|
|
225
|
+
// "no liveness heartbeat, no auto-sweep; a human asserts a lock is dead"). A
|
|
226
|
+
// genuinely orphaned lock is cleared by the human-mediated `release-lock` verb +
|
|
227
|
+
// `gc --ledger` report, never an auto-steal at claim time.
|
|
228
|
+
const lock = await acquireItemLock({
|
|
229
|
+
item: `task:${slug}`,
|
|
230
|
+
action: 'implement',
|
|
231
|
+
cwd,
|
|
232
|
+
arbiter,
|
|
233
|
+
env,
|
|
234
|
+
});
|
|
235
|
+
if (lock.outcome === 'error') {
|
|
236
|
+
// Environment/usage problem acquiring the lock — surface as exit 1, never a
|
|
237
|
+
// false claim. Nothing was acquired.
|
|
238
|
+
throw new ClaimUsageError(`failed to acquire the item lock for '${slug}': ${lock.message}`);
|
|
239
|
+
}
|
|
240
|
+
if (lock.outcome === 'lost') {
|
|
241
|
+
const message = await lostMessage(slug, arbiter, cwd, env, lock.message);
|
|
242
|
+
note(message);
|
|
243
|
+
return { exitCode: 2, outcome: 'lost', message };
|
|
244
|
+
}
|
|
245
|
+
/** Release the lock we just acquired (best-effort) — used when the claimability
|
|
246
|
+
* re-check finds the item is no longer in the pool, so the lock is never
|
|
247
|
+
* orphaned (the body never moved, so the item is cleanly returned to the pool). */
|
|
248
|
+
async function releaseHeldLock() {
|
|
249
|
+
await releaseItemLock({ item: `task:${slug}`, cwd, arbiter, env });
|
|
250
|
+
}
|
|
251
|
+
// The RESOLVED claimable residence (`tasks/ready/` or, under `--allow-backlog`,
|
|
252
|
+
// `tasks/backlog/`), captured by the post-lock claimability re-check below so the
|
|
253
|
+
// success message reports the real folder rather than a hard-coded guess.
|
|
254
|
+
let claimedBodyRel;
|
|
255
|
+
try {
|
|
256
|
+
// CLAIMABLE PREDICATE (US #15): "in `tasks/ready/` (the pool) on `main` AND no
|
|
257
|
+
// lock held" \u2014 widened under `--allow-backlog` to ALSO accept a
|
|
258
|
+
// `tasks/backlog/`-resident body (staging), so a human can drive a staged task
|
|
259
|
+
// in place. The HELD-LOCK half is the create-only acquire above (a held slug
|
|
260
|
+
// already lost the race). Confirm the residence here \u2014 the body STAYS where it
|
|
261
|
+
// rested (claim moves nothing, even under the flag), so a `done`/absent item is
|
|
262
|
+
// not claimable: release the lock we just took (it never protected any in-flight
|
|
263
|
+
// work) and lose (exit 2).
|
|
264
|
+
await gitHard(['fetch', '--quiet', arbiter], cwd, env);
|
|
265
|
+
claimedBodyRel = await claimableBodyRel();
|
|
266
|
+
if (claimedBodyRel === undefined) {
|
|
267
|
+
await releaseHeldLock();
|
|
268
|
+
const message = await lostMessage(slug, arbiter, cwd, env, notFoundFallback);
|
|
269
|
+
note(message);
|
|
270
|
+
return { exitCode: 2, outcome: 'lost', message };
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
catch (err) {
|
|
274
|
+
// A plumbing failure after we took the lock: release it so the held lock does
|
|
275
|
+
// not orphan an item that never started, then re-throw for the top-level
|
|
276
|
+
// handler to classify (exit 1).
|
|
277
|
+
await releaseHeldLock();
|
|
278
|
+
throw err;
|
|
279
|
+
}
|
|
280
|
+
// CLAIMED. The body rests where it was claimed from (`tasks/ready/` normally, or
|
|
281
|
+
// `tasks/backlog/` under `--allow-backlog`) on `<arbiter>/main` and the lock is
|
|
282
|
+
// held. There is NO claim commit and nothing on `main` to branch from —
|
|
283
|
+
// onboarding cuts the work branch straight off `<arbiter>/main` (which carries the
|
|
284
|
+
// body). The folder is the RESOLVED residence, not a hard-coded guess: a `ready/`
|
|
285
|
+
// claim must not falsely report `backlog/` (it misled a whole CI-incident triage).
|
|
286
|
+
// `claimedBodyRel` is always set here (the claimability re-check above returns
|
|
287
|
+
// `lost` otherwise); fall back to the pool residence (`backlog` IS the
|
|
288
|
+
// `tasks-ready` path constant) for type-safety — derived via the layout helper,
|
|
289
|
+
// never a raw `work/<folder>` literal (the work-layout guard).
|
|
290
|
+
const residence = residenceFolder(claimedBodyRel ?? backlog);
|
|
291
|
+
const message = `CLAIMED '${slug}' (lock held; body stays in ${residence}/ on ${arbiter}/main).`;
|
|
292
|
+
note(message);
|
|
293
|
+
note(`Start work: git fetch ${arbiter} && git switch -C ${branch} ${arbiter}/main`);
|
|
294
|
+
return { exitCode: 0, outcome: 'claimed', message };
|
|
295
|
+
}
|
|
296
|
+
/** `git cat-file -e <object>` — true iff the object exists. */
|
|
297
|
+
async function catFileExists(object, cwd, env) {
|
|
298
|
+
return (await gitSoft(['cat-file', '-e', object], cwd, env)).status === 0;
|
|
299
|
+
}
|
|
300
|
+
/** Run git, returning the raw result (no throw) — for soft checks. */
|
|
301
|
+
function gitSoft(args, cwd, env) {
|
|
302
|
+
return runAsync('git', args, cwd, { env });
|
|
303
|
+
}
|
|
304
|
+
/** Run git; throw on non-zero (genuinely unexpected plumbing failures). */
|
|
305
|
+
async function gitHard(args, cwd, env) {
|
|
306
|
+
const result = await runAsync('git', args, cwd, { env });
|
|
307
|
+
if (result.status !== 0) {
|
|
308
|
+
throw new Error(`git ${args.join(' ')} failed (exit ${result.status}): ${result.stderr.trim()}`);
|
|
309
|
+
}
|
|
310
|
+
return result;
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=claim-cas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-cas.js","sourceRoot":"","sources":["../src/claim-cas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A small, isolated terminal-spinner helper for the standalone
|
|
3
|
+
* `dorfl claim <slug>` CLI command (prd/task `claim-cas-spinner`).
|
|
4
|
+
*
|
|
5
|
+
* The push the claim CAS performs can take a few seconds (network +
|
|
6
|
+
* arbiter round-trip), so the terminal looked frozen. This helper wraps
|
|
7
|
+
* ONLY that CLI call site: it animates a single-line spinner on stderr
|
|
8
|
+
* while {@link import('./claim-cas.js').performClaim} is in flight, and
|
|
9
|
+
* tears it down cleanly on completion / SIGINT / a thrown error.
|
|
10
|
+
*
|
|
11
|
+
* Design constraints (all surfaced as injected seams so the helper is
|
|
12
|
+
* unit-testable without real timers or a real TTY):
|
|
13
|
+
* - `stream` — the WritableStream sink (stderr in production).
|
|
14
|
+
* - `isTTY` — whether to animate at all. Defaults to `false` (the
|
|
15
|
+
* non-TTY path), so tests stay deterministic by default.
|
|
16
|
+
* - `clock` — `setInterval` / `clearInterval` pair. Defaults to a
|
|
17
|
+
* no-op pair (no real timers in tests).
|
|
18
|
+
*
|
|
19
|
+
* Output contract:
|
|
20
|
+
* - In NON-TTY mode the helper is a pure no-op for animation. `note`
|
|
21
|
+
* writes `>> <message>\n` to the stream (byte-identical to today's
|
|
22
|
+
* `console.error('>> ' + message)`); `finish(result)` writes
|
|
23
|
+
* `error: <message>\n` ONLY on a non-zero exit (byte-identical to
|
|
24
|
+
* today's `if (result.exitCode !== 0) console.error('error: ' + ...)`).
|
|
25
|
+
* No new status line is introduced — silent on success, exactly as
|
|
26
|
+
* today's CLI tests and CI log scrapers expect.
|
|
27
|
+
* - In TTY mode the spinner frame is drawn/redrawn on a fake-clock
|
|
28
|
+
* tick; `note(message)` clears the current frame, writes the note
|
|
29
|
+
* line, then redraws (so notes and frames never trample each other);
|
|
30
|
+
* `finish(result)` clears the frame, restores the cursor, and writes
|
|
31
|
+
* ONE terminal status line describing the outcome.
|
|
32
|
+
* - `stop()` is the pure teardown path used for SIGINT / a thrown
|
|
33
|
+
* error: clear the frame, restore the cursor, NO status line.
|
|
34
|
+
*
|
|
35
|
+
* This module is consumed ONLY by the `dorfl claim <slug>` CLI
|
|
36
|
+
* surface in `cli.ts`. The autonomous `performClaim` call sites
|
|
37
|
+
* (`do.ts`, `run.ts`, `start.ts`, `work-on.ts`, `continue-branch.ts`)
|
|
38
|
+
* are explicitly OUT OF SCOPE and MUST NOT be wrapped — the claim-cas
|
|
39
|
+
* return contract, exit codes, and seam contract are unchanged.
|
|
40
|
+
*/
|
|
41
|
+
import type { ClaimCasResult } from './claim-cas.js';
|
|
42
|
+
/** The clock seam: `setInterval` / `clearInterval`, faked in tests. */
|
|
43
|
+
export interface SpinnerClock {
|
|
44
|
+
setInterval: (fn: () => void, ms: number) => unknown;
|
|
45
|
+
clearInterval: (handle: unknown) => void;
|
|
46
|
+
}
|
|
47
|
+
/** The minimal writable surface the spinner needs (stderr in production). */
|
|
48
|
+
export interface SpinnerStream {
|
|
49
|
+
write(chunk: string): boolean;
|
|
50
|
+
}
|
|
51
|
+
export interface CreateClaimSpinnerOptions {
|
|
52
|
+
/** The sink the spinner animates / notes / status line are written to. */
|
|
53
|
+
stream: SpinnerStream;
|
|
54
|
+
/**
|
|
55
|
+
* Whether to animate at all. Defaults to `false` — the non-TTY path,
|
|
56
|
+
* which is a no-op for animation and keeps stderr byte-identical to
|
|
57
|
+
* today. Production passes `process.stdout.isTTY === true`.
|
|
58
|
+
*/
|
|
59
|
+
isTTY?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* The `setInterval`/`clearInterval` seam. Defaults to a NO-OP pair so a
|
|
62
|
+
* test that forgets to inject a fake clock cannot accidentally spin a
|
|
63
|
+
* real timer (and so the non-TTY default truly never starts one).
|
|
64
|
+
* Production passes the global timers.
|
|
65
|
+
*/
|
|
66
|
+
clock?: SpinnerClock;
|
|
67
|
+
/** The short label drawn next to the animating frame (e.g. `Claiming alpha…`). */
|
|
68
|
+
label: string;
|
|
69
|
+
/** Frame cadence in ms. Default 80ms (a calm braille spinner). */
|
|
70
|
+
intervalMs?: number;
|
|
71
|
+
/** The animation frames. Default: the standard 10-frame braille spinner. */
|
|
72
|
+
frames?: readonly string[];
|
|
73
|
+
}
|
|
74
|
+
export interface ClaimSpinner {
|
|
75
|
+
/** True iff this spinner instance will actually animate (TTY mode). */
|
|
76
|
+
readonly isTTY: boolean;
|
|
77
|
+
/** Begin animating (no-op in non-TTY mode, or if already started). */
|
|
78
|
+
start(): void;
|
|
79
|
+
/**
|
|
80
|
+
* Route the `performClaim` `note` callback through the spinner. In TTY
|
|
81
|
+
* mode this clears the current frame, writes `>> <message>\n`, then
|
|
82
|
+
* redraws the frame so notes and frames never trample each other. In
|
|
83
|
+
* non-TTY mode it writes the line directly — byte-identical to today.
|
|
84
|
+
*/
|
|
85
|
+
note(message: string): void;
|
|
86
|
+
/**
|
|
87
|
+
* Finish with the claim result. In TTY mode: tear down (clear frame,
|
|
88
|
+
* restore cursor) and emit ONE terminal status line describing the
|
|
89
|
+
* outcome. In non-TTY mode: emit `error: <message>` ONLY on a non-zero
|
|
90
|
+
* exit, otherwise stay silent — byte-identical to today's CLI.
|
|
91
|
+
*/
|
|
92
|
+
finish(result: ClaimCasResult): void;
|
|
93
|
+
/**
|
|
94
|
+
* Pure teardown for SIGINT / a thrown error: clear the frame and
|
|
95
|
+
* restore the cursor. NO status line. Safe to call multiple times.
|
|
96
|
+
*/
|
|
97
|
+
stop(): void;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Format the single terminal status line that replaces the spinner in TTY
|
|
101
|
+
* mode. The outcome label tracks the existing exit-code semantics
|
|
102
|
+
* (0=claimed / 2=lost (not claimable) / 3=contended / 1=usage-error or
|
|
103
|
+
* not-ready); `result.message` is reused verbatim as the body.
|
|
104
|
+
*/
|
|
105
|
+
export declare function formatClaimStatusLine(result: ClaimCasResult): string;
|
|
106
|
+
/**
|
|
107
|
+
* Build a {@link ClaimSpinner} from injected seams. See the module-level
|
|
108
|
+
* docstring for the contract; see the per-method JSDoc for the per-method
|
|
109
|
+
* semantics in TTY vs non-TTY mode.
|
|
110
|
+
*/
|
|
111
|
+
export declare function createClaimSpinner(options: CreateClaimSpinnerOptions): ClaimSpinner;
|
|
112
|
+
//# sourceMappingURL=cli-spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-spinner.d.ts","sourceRoot":"","sources":["../src/cli-spinner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAEnD,uEAAuE;AACvE,MAAM,WAAW,YAAY;IAC5B,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACzC;AAED,6EAA6E;AAC7E,MAAM,WAAW,aAAa;IAC7B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB;IACzC,0EAA0E;IAC1E,MAAM,EAAE,aAAa,CAAC;IACtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,sEAAsE;IACtE,KAAK,IAAI,IAAI,CAAC;IACd;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IACrC;;;OAGG;IACH,IAAI,IAAI,IAAI,CAAC;CACb;AA2BD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAcpE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,yBAAyB,GAChC,YAAY,CAkEd"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A small, isolated terminal-spinner helper for the standalone
|
|
3
|
+
* `dorfl claim <slug>` CLI command (prd/task `claim-cas-spinner`).
|
|
4
|
+
*
|
|
5
|
+
* The push the claim CAS performs can take a few seconds (network +
|
|
6
|
+
* arbiter round-trip), so the terminal looked frozen. This helper wraps
|
|
7
|
+
* ONLY that CLI call site: it animates a single-line spinner on stderr
|
|
8
|
+
* while {@link import('./claim-cas.js').performClaim} is in flight, and
|
|
9
|
+
* tears it down cleanly on completion / SIGINT / a thrown error.
|
|
10
|
+
*
|
|
11
|
+
* Design constraints (all surfaced as injected seams so the helper is
|
|
12
|
+
* unit-testable without real timers or a real TTY):
|
|
13
|
+
* - `stream` — the WritableStream sink (stderr in production).
|
|
14
|
+
* - `isTTY` — whether to animate at all. Defaults to `false` (the
|
|
15
|
+
* non-TTY path), so tests stay deterministic by default.
|
|
16
|
+
* - `clock` — `setInterval` / `clearInterval` pair. Defaults to a
|
|
17
|
+
* no-op pair (no real timers in tests).
|
|
18
|
+
*
|
|
19
|
+
* Output contract:
|
|
20
|
+
* - In NON-TTY mode the helper is a pure no-op for animation. `note`
|
|
21
|
+
* writes `>> <message>\n` to the stream (byte-identical to today's
|
|
22
|
+
* `console.error('>> ' + message)`); `finish(result)` writes
|
|
23
|
+
* `error: <message>\n` ONLY on a non-zero exit (byte-identical to
|
|
24
|
+
* today's `if (result.exitCode !== 0) console.error('error: ' + ...)`).
|
|
25
|
+
* No new status line is introduced — silent on success, exactly as
|
|
26
|
+
* today's CLI tests and CI log scrapers expect.
|
|
27
|
+
* - In TTY mode the spinner frame is drawn/redrawn on a fake-clock
|
|
28
|
+
* tick; `note(message)` clears the current frame, writes the note
|
|
29
|
+
* line, then redraws (so notes and frames never trample each other);
|
|
30
|
+
* `finish(result)` clears the frame, restores the cursor, and writes
|
|
31
|
+
* ONE terminal status line describing the outcome.
|
|
32
|
+
* - `stop()` is the pure teardown path used for SIGINT / a thrown
|
|
33
|
+
* error: clear the frame, restore the cursor, NO status line.
|
|
34
|
+
*
|
|
35
|
+
* This module is consumed ONLY by the `dorfl claim <slug>` CLI
|
|
36
|
+
* surface in `cli.ts`. The autonomous `performClaim` call sites
|
|
37
|
+
* (`do.ts`, `run.ts`, `start.ts`, `work-on.ts`, `continue-branch.ts`)
|
|
38
|
+
* are explicitly OUT OF SCOPE and MUST NOT be wrapped — the claim-cas
|
|
39
|
+
* return contract, exit codes, and seam contract are unchanged.
|
|
40
|
+
*/
|
|
41
|
+
const DEFAULT_FRAMES = [
|
|
42
|
+
'⠋',
|
|
43
|
+
'⠙',
|
|
44
|
+
'⠹',
|
|
45
|
+
'⠸',
|
|
46
|
+
'⠼',
|
|
47
|
+
'⠴',
|
|
48
|
+
'⠦',
|
|
49
|
+
'⠧',
|
|
50
|
+
'⠇',
|
|
51
|
+
'⠏',
|
|
52
|
+
];
|
|
53
|
+
const DEFAULT_INTERVAL_MS = 80;
|
|
54
|
+
// Bare ANSI for hide-cursor / show-cursor / clear-current-line — kept tiny and
|
|
55
|
+
// inline so the helper has no runtime dependency. Only emitted in TTY mode.
|
|
56
|
+
const HIDE_CURSOR = '\x1b[?25l';
|
|
57
|
+
const SHOW_CURSOR = '\x1b[?25h';
|
|
58
|
+
const CLEAR_LINE = '\r\x1b[2K';
|
|
59
|
+
const NOOP_CLOCK = {
|
|
60
|
+
setInterval: () => undefined,
|
|
61
|
+
clearInterval: () => undefined,
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Format the single terminal status line that replaces the spinner in TTY
|
|
65
|
+
* mode. The outcome label tracks the existing exit-code semantics
|
|
66
|
+
* (0=claimed / 2=lost (not claimable) / 3=contended / 1=usage-error or
|
|
67
|
+
* not-ready); `result.message` is reused verbatim as the body.
|
|
68
|
+
*/
|
|
69
|
+
export function formatClaimStatusLine(result) {
|
|
70
|
+
switch (result.outcome) {
|
|
71
|
+
case 'claimed':
|
|
72
|
+
return `✓ claimed — ${result.message}`;
|
|
73
|
+
case 'lost':
|
|
74
|
+
return `✗ not claimable — ${result.message}`;
|
|
75
|
+
case 'contended':
|
|
76
|
+
return `✗ contended — ${result.message}`;
|
|
77
|
+
case 'not-ready':
|
|
78
|
+
return `✗ not ready — ${result.message}`;
|
|
79
|
+
case 'usage-error':
|
|
80
|
+
default:
|
|
81
|
+
return `✗ error — ${result.message}`;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Build a {@link ClaimSpinner} from injected seams. See the module-level
|
|
86
|
+
* docstring for the contract; see the per-method JSDoc for the per-method
|
|
87
|
+
* semantics in TTY vs non-TTY mode.
|
|
88
|
+
*/
|
|
89
|
+
export function createClaimSpinner(options) {
|
|
90
|
+
const stream = options.stream;
|
|
91
|
+
const isTTY = options.isTTY === true;
|
|
92
|
+
const clock = options.clock ?? NOOP_CLOCK;
|
|
93
|
+
const frames = options.frames ?? DEFAULT_FRAMES;
|
|
94
|
+
const intervalMs = options.intervalMs ?? DEFAULT_INTERVAL_MS;
|
|
95
|
+
const label = options.label;
|
|
96
|
+
let handle;
|
|
97
|
+
let frameIndex = 0;
|
|
98
|
+
let active = false;
|
|
99
|
+
const drawFrame = () => {
|
|
100
|
+
stream.write(`${frames[frameIndex % frames.length]} ${label}`);
|
|
101
|
+
};
|
|
102
|
+
const clearFrame = () => {
|
|
103
|
+
stream.write(CLEAR_LINE);
|
|
104
|
+
};
|
|
105
|
+
const teardown = () => {
|
|
106
|
+
if (!active)
|
|
107
|
+
return;
|
|
108
|
+
clock.clearInterval(handle);
|
|
109
|
+
handle = undefined;
|
|
110
|
+
clearFrame();
|
|
111
|
+
stream.write(SHOW_CURSOR);
|
|
112
|
+
active = false;
|
|
113
|
+
};
|
|
114
|
+
return {
|
|
115
|
+
isTTY,
|
|
116
|
+
start() {
|
|
117
|
+
if (!isTTY || active)
|
|
118
|
+
return;
|
|
119
|
+
active = true;
|
|
120
|
+
stream.write(HIDE_CURSOR);
|
|
121
|
+
drawFrame();
|
|
122
|
+
handle = clock.setInterval(() => {
|
|
123
|
+
frameIndex = (frameIndex + 1) % frames.length;
|
|
124
|
+
clearFrame();
|
|
125
|
+
drawFrame();
|
|
126
|
+
}, intervalMs);
|
|
127
|
+
},
|
|
128
|
+
note(message) {
|
|
129
|
+
if (!isTTY) {
|
|
130
|
+
// Non-TTY: byte-identical to today's `console.error('>> ' + msg)`.
|
|
131
|
+
stream.write(`>> ${message}\n`);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (active)
|
|
135
|
+
clearFrame();
|
|
136
|
+
stream.write(`>> ${message}\n`);
|
|
137
|
+
if (active)
|
|
138
|
+
drawFrame();
|
|
139
|
+
},
|
|
140
|
+
finish(result) {
|
|
141
|
+
if (isTTY) {
|
|
142
|
+
teardown();
|
|
143
|
+
stream.write(`${formatClaimStatusLine(result)}\n`);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
// Non-TTY: silent on success, `error: <message>` on failure —
|
|
147
|
+
// byte-identical to today's CLI behaviour.
|
|
148
|
+
if (result.exitCode !== 0) {
|
|
149
|
+
stream.write(`error: ${result.message}\n`);
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
stop() {
|
|
153
|
+
teardown();
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=cli-spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-spinner.js","sourceRoot":"","sources":["../src/cli-spinner.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
export declare function buildProgram(): Command;
|
|
4
|
+
/**
|
|
5
|
+
* Run the CLI: build the program and parse argv. Split from {@link buildProgram}
|
|
6
|
+
* so tests can build + introspect/parse the program WITHOUT triggering a real
|
|
7
|
+
* argv parse + `process.exit` on import (the module-level bootstrap below only
|
|
8
|
+
* fires when this file is the process entry point).
|
|
9
|
+
*/
|
|
10
|
+
export declare function runCli(argv?: string[]): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,OAAO,EAAS,MAAM,WAAW,CAAC;AA2nC1C,wBAAgB,YAAY,IAAI,OAAO,CA8gGtC;AA+FD;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQzE"}
|