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,272 @@
|
|
|
1
|
+
import { brand, constantCase } from './brand.js';
|
|
2
|
+
/**
|
|
3
|
+
* The environment-variable config layer.
|
|
4
|
+
*
|
|
5
|
+
* A per-machine context (a CI job, a developer's shell) can set ANY {@link Config}
|
|
6
|
+
* key via an `DORFL_*` environment variable WITHOUT committing a file —
|
|
7
|
+
* including the host-only keys (`piBin`, `agentCmd`, …) that the per-repo
|
|
8
|
+
* `.dorfl.json` deliberately rejects.
|
|
9
|
+
*
|
|
10
|
+
* Env is a legitimate *per-machine source* — exactly like a CLI flag or the
|
|
11
|
+
* global `~/.config/dorfl/config.json` — so it is NOT subject to the
|
|
12
|
+
* per-repo allow/reject split (that split only governs the *committed repo
|
|
13
|
+
* file*). This is the sharpened host-only principle (ADR §13): host-only keys
|
|
14
|
+
* must come from a per-machine source (flag, env, or global file), never the
|
|
15
|
+
* committed repo file; env is simply the per-machine source CI actually has
|
|
16
|
+
* without writing a file.
|
|
17
|
+
*
|
|
18
|
+
* Resolution chain (highest wins):
|
|
19
|
+
*
|
|
20
|
+
* flag > ENV (DORFL_*) > per-repo > global > built-in default
|
|
21
|
+
*
|
|
22
|
+
* Naming: `DORFL_<SCREAMING_SNAKE(key)>` (mechanical camelCase →
|
|
23
|
+
* SCREAMING_SNAKE, prefixed with `DORFL_` to match the binary). E.g.
|
|
24
|
+
* `DORFL_AGENT_CMD`, `DORFL_PI_BIN`, `DORFL_DEFAULT_ARBITER`,
|
|
25
|
+
* `DORFL_PER_REPO_MAX`.
|
|
26
|
+
*
|
|
27
|
+
* Each value is coerced per the key's type and a typo/invalid value FAILS LOUDLY
|
|
28
|
+
* (never silently ignored) with a message naming the offending variable.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* The shared `DORFL_` prefix on every env config variable. Derived from
|
|
32
|
+
* the single brand identity (`constantCase(base) + '_'`) so a rename flips the
|
|
33
|
+
* prefix in lockstep with the binary name (see `brand.ts`).
|
|
34
|
+
*/
|
|
35
|
+
export const ENV_PREFIX = brand.envPrefix;
|
|
36
|
+
/**
|
|
37
|
+
* The coercion to apply per env-settable {@link Config} key. The source of truth
|
|
38
|
+
* for which env vars exist and how their raw strings become typed values. EVERY
|
|
39
|
+
* SCALAR `Config` key appears here (host-only included) — env is a per-machine
|
|
40
|
+
* source, so no scalar key is off-limits. Keys not listed have no env var.
|
|
41
|
+
*
|
|
42
|
+
* The lone EXCLUSION is `identity`: it is a NESTED structured object (with its
|
|
43
|
+
* own `auth`/`providers` sub-objects), not a scalar a single env string can
|
|
44
|
+
* carry. A `tokenEnv` indirection already covers the one secret a CI/per-machine
|
|
45
|
+
* context legitimately injects via env (the `gh` token), so there is no JSON-in-
|
|
46
|
+
* env hack here. The mapped type is `Partial` precisely to ALLOW this exclusion.
|
|
47
|
+
*/
|
|
48
|
+
const KEY_COERCIONS = {
|
|
49
|
+
autoBuild: 'boolean',
|
|
50
|
+
autoTask: 'boolean',
|
|
51
|
+
// The observation-triage gate is a 3-state ENUM coercion (like `integration`),
|
|
52
|
+
// so `DORFL_OBSERVATION_TRIAGE=off|ask|auto` works and a typo FAILS
|
|
53
|
+
// LOUDLY naming the variable + the valid options.
|
|
54
|
+
observationTriage: { enum: ['off', 'ask', 'auto'] },
|
|
55
|
+
// The merge-question SURFACER gate is a 3-state ENUM coercion (mirrors
|
|
56
|
+
// `observationTriage`'s shape; SEPARATE axis with a HIGHER default, prd
|
|
57
|
+
// `land-time-reverify-and-parallel-merge-ceiling` Story 17 / task
|
|
58
|
+
// `merge-questions-gate-axis`), so `DORFL_MERGE_QUESTIONS=off|ask|auto`
|
|
59
|
+
// works and a typo FAILS LOUDLY naming the variable + the valid options.
|
|
60
|
+
mergeQuestions: { enum: ['off', 'ask', 'auto'] },
|
|
61
|
+
// The surface-blockers gate is a BOOLEAN coercion (like `autoBuild`), so
|
|
62
|
+
// `DORFL_SURFACE_BLOCKERS=true|false` works and a typo FAILS LOUDLY.
|
|
63
|
+
surfaceBlockers: 'boolean',
|
|
64
|
+
// `surfaceStaging` (the BOOLEAN gate-family member that widens the SURFACE
|
|
65
|
+
// candidate set to include STAGING — `tasks/backlog/` + `prds/proposed/` —
|
|
66
|
+
// not only the agent pool; prd
|
|
67
|
+
// `staging-surface-and-apply-promote-safety` F2) coerces as a BOOLEAN like
|
|
68
|
+
// `autoBuild`/`surfaceBlockers`, so `DORFL_SURFACE_STAGING=true|false`
|
|
69
|
+
// works and a typo FAILS LOUDLY. Resolution chain identical to the other
|
|
70
|
+
// gate-family members (flag > env > per-repo > global > built-in `true`).
|
|
71
|
+
surfaceStaging: 'boolean',
|
|
72
|
+
// `selectionOrder` coerces as a `'list'` (comma form
|
|
73
|
+
// `DORFL_SELECTION_ORDER=build,task,surface,triage`); a single-element
|
|
74
|
+
// list whose one entry is a preset keyword (`=drain`) is expanded by the
|
|
75
|
+
// resolver (`select-order.ts`). Subsumes the removed `prdsFirst` boolean.
|
|
76
|
+
selectionOrder: 'list',
|
|
77
|
+
maxParallel: 'number',
|
|
78
|
+
perRepoMax: 'number',
|
|
79
|
+
defaultArbiter: 'string',
|
|
80
|
+
workspacesDir: 'string',
|
|
81
|
+
arbitersDir: 'string',
|
|
82
|
+
humanWorktreesDir: 'string',
|
|
83
|
+
integration: { enum: ['propose', 'merge'] },
|
|
84
|
+
// `taskingIntegration` (the per-TRANSITION TASKING override) coerces as the SAME
|
|
85
|
+
// `propose`/`merge` enum as `integration`, so `DORFL_TASKING_INTEGRATION`
|
|
86
|
+
// works and a typo FAILS LOUDLY. Unset ⇒ the tasking transition falls back to
|
|
87
|
+
// `integration` (the flat value). It NEVER touches the build transition or intake.
|
|
88
|
+
taskingIntegration: { enum: ['propose', 'merge'] },
|
|
89
|
+
// `tasksLandIn` (the per-repo TASK-PLACEMENT default — prd
|
|
90
|
+
// `staging-pool-position-gate-and-trust-model` US #5) coerces as the
|
|
91
|
+
// `pre-backlog`/`ready` enum, so `DORFL_TASKS_LAND_IN=ready` works and a
|
|
92
|
+
// typo FAILS LOUDLY. Same
|
|
93
|
+
// precedence chain as `taskingIntegration` (flag > env > per-repo > global >
|
|
94
|
+
// built-in `pre-backlog`); fed into the runner-deterministic placement
|
|
95
|
+
// resolver (`src/placement.ts`) as the configured-default rung.
|
|
96
|
+
tasksLandIn: { enum: ['pre-backlog', 'ready'] },
|
|
97
|
+
// `specsLandIn` (the per-repo SPEC-PLACEMENT default — spec
|
|
98
|
+
// `staging-pool-position-gate-and-trust-model` US #2/#5) coerces as the
|
|
99
|
+
// `pre-proposed`/`ready` enum, so `DORFL_SPECS_LAND_IN=ready` works and a typo
|
|
100
|
+
// FAILS LOUDLY. Same precedence chain as `tasksLandIn` (flag > env > per-repo
|
|
101
|
+
// > global > built-in `pre-proposed`); fed into the shared placement resolver
|
|
102
|
+
// (`src/placement.ts`) as the configured-default rung for the spec lifecycle.
|
|
103
|
+
// The legacy `prdsLandIn` key / `DORFL_PRDS_LAND_IN` env are GONE after the
|
|
104
|
+
// prd → spec hard cutover (clean break).
|
|
105
|
+
specsLandIn: { enum: ['pre-proposed', 'ready'] },
|
|
106
|
+
// `noPR` (the PR-INTENT axis) is a BOOLEAN coercion (like `review`), so
|
|
107
|
+
// `DORFL_NO_PR=true|false` works and a typo FAILS LOUDLY. The removed
|
|
108
|
+
// `provider` override has NO env var (a stale `DORFL_PROVIDER` is ignored
|
|
109
|
+
// with a deprecation warning — see `envOverrides`).
|
|
110
|
+
noPR: 'boolean',
|
|
111
|
+
agentCmd: 'string',
|
|
112
|
+
model: 'string',
|
|
113
|
+
harness: { enum: ['null', 'pi'] },
|
|
114
|
+
piBin: 'string',
|
|
115
|
+
sessionsDir: 'string',
|
|
116
|
+
// `prepare` coerces as a `'list'` (comma form
|
|
117
|
+
// `DORFL_PREPARE=pnpm install,git submodule update --init`), exactly
|
|
118
|
+
// like `verify` — the SAME precedence chain, the sibling env-prep step.
|
|
119
|
+
prepare: 'list',
|
|
120
|
+
verify: 'list',
|
|
121
|
+
review: 'boolean',
|
|
122
|
+
reviewModel: 'string',
|
|
123
|
+
reviewMaxRounds: 'number',
|
|
124
|
+
taskerLoop: 'boolean',
|
|
125
|
+
taskerLoopMax: 'number',
|
|
126
|
+
taskerLoopModel: 'string',
|
|
127
|
+
// `freshWorktreeGate` is a BOOLEAN coercion (like `taskerLoop`), so
|
|
128
|
+
// `DORFL_FRESH_WORKTREE_GATE=true|false` works and a typo FAILS LOUDLY.
|
|
129
|
+
freshWorktreeGate: 'boolean',
|
|
130
|
+
// `mergeRetries` (the cross-job merge serialiser's CAS-retry cap — prd
|
|
131
|
+
// `land-time-reverify-and-parallel-merge-ceiling` Story 5 / Applied Answer q1 (a))
|
|
132
|
+
// coerces as a NUMBER (like `reviewMaxRounds`), so `DORFL_MERGE_RETRIES=20`
|
|
133
|
+
// works and a typo FAILS LOUDLY. A wide-matrix CI raises it; the default
|
|
134
|
+
// (1000 — the C2 large liveness ceiling) stays in place when unset.
|
|
135
|
+
mergeRetries: 'number',
|
|
136
|
+
// `strictMergeApproval` (the OPT-IN strictness layered on the OQ6
|
|
137
|
+
// stale-approval default — prd `land-time-reverify-and-parallel-merge-ceiling`
|
|
138
|
+
// sidecar OQ6 / task `strict-merge-approval-gate`) coerces as a BOOLEAN
|
|
139
|
+
// (like `freshWorktreeGate`), so `DORFL_STRICT_MERGE_APPROVAL=true|false`
|
|
140
|
+
// works and a typo FAILS LOUDLY. Default OFF; ON re-surfaces the
|
|
141
|
+
// merge-question on a merge-base change instead of auto-landing.
|
|
142
|
+
strictMergeApproval: 'boolean',
|
|
143
|
+
// `promptGuidance` is a STRUCTURED (nested) namespace, so it has no scalar env
|
|
144
|
+
// var of its own — each MEMBER carries its own env var (the nested-key form
|
|
145
|
+
// `DORFL_PROMPT_GUIDANCE_<MEMBER>`), handled out-of-band in
|
|
146
|
+
// `envOverrides` below. Listing the namespace here would imply a single scalar
|
|
147
|
+
// `DORFL_PROMPT_GUIDANCE` env var, which is NOT how the namespace is
|
|
148
|
+
// shaped (each nudge member is independently resolvable).
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* The env vars for the nested members of the `promptGuidance` namespace. The
|
|
152
|
+
* key is the env var name (`DORFL_PROMPT_GUIDANCE_<MEMBER>`, the nested
|
|
153
|
+
* naming the prd specifies); the value is the (boolean) coercion. Each member
|
|
154
|
+
* present in env contributes `{<member>: bool}` into a single
|
|
155
|
+
* `promptGuidance` partial — mergeConfig replaces the whole namespace per the
|
|
156
|
+
* layered precedence, which is correct because EVERY member is included (env
|
|
157
|
+
* supplies a complete inner object whenever ANY member is set).
|
|
158
|
+
*/
|
|
159
|
+
const PROMPT_GUIDANCE_ENV = {
|
|
160
|
+
[ENV_PREFIX + 'PROMPT_GUIDANCE_TEST_FIRST']: 'boolean',
|
|
161
|
+
};
|
|
162
|
+
/** The `DORFL_*` env var name for a config key (`perRepoMax` →
|
|
163
|
+
* `DORFL_PER_REPO_MAX`): the brand prefix + the key in `constantCase`. */
|
|
164
|
+
export function envVarName(key) {
|
|
165
|
+
return ENV_PREFIX + constantCase(key);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Coerce a raw env string for one key, FAILING LOUDLY (with the offending var
|
|
169
|
+
* name) on invalid input: booleans accept only `true`/`false`; numbers reject
|
|
170
|
+
* NaN; enums must be in their union; list keys split on comma; strings verbatim.
|
|
171
|
+
*/
|
|
172
|
+
function coerceValue(varName, raw, coercion) {
|
|
173
|
+
if (typeof coercion === 'object') {
|
|
174
|
+
// Enum: validate against the union.
|
|
175
|
+
if (!coercion.enum.includes(raw)) {
|
|
176
|
+
throw new Error(`Invalid value for ${varName}: '${raw}'. ` +
|
|
177
|
+
`Expected one of: ${coercion.enum.join(', ')}.`);
|
|
178
|
+
}
|
|
179
|
+
return raw;
|
|
180
|
+
}
|
|
181
|
+
switch (coercion) {
|
|
182
|
+
case 'string':
|
|
183
|
+
return raw;
|
|
184
|
+
case 'boolean':
|
|
185
|
+
if (raw === 'true') {
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
if (raw === 'false') {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
throw new Error(`Invalid boolean for ${varName}: '${raw}'. Expected 'true' or 'false'.`);
|
|
192
|
+
case 'number': {
|
|
193
|
+
const n = Number(raw);
|
|
194
|
+
if (raw.trim() === '' || Number.isNaN(n)) {
|
|
195
|
+
throw new Error(`Invalid number for ${varName}: '${raw}'. Expected a numeric value.`);
|
|
196
|
+
}
|
|
197
|
+
return n;
|
|
198
|
+
}
|
|
199
|
+
case 'list':
|
|
200
|
+
// Split on comma (cross-platform; not `:`), trimming each entry. An empty
|
|
201
|
+
// string ⇒ an empty list (an explicit "clear" of a list key).
|
|
202
|
+
return raw
|
|
203
|
+
.split(',')
|
|
204
|
+
.map((s) => s.trim())
|
|
205
|
+
.filter((s) => s !== '');
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Read the `DORFL_*` env layer into a {@link PartialConfig}. Only vars
|
|
210
|
+
* actually present (and non-`undefined`) contribute, so absent env ⇒ `{}` and
|
|
211
|
+
* built-in floors/defaults are untouched. Each present var is coerced per its
|
|
212
|
+
* key's type; an invalid value throws LOUDLY naming the variable.
|
|
213
|
+
*
|
|
214
|
+
* Env may set ANY key — host-only included — because env is a per-machine
|
|
215
|
+
* source, NOT the committed repo file (see this module's doc + ADR §13).
|
|
216
|
+
*/
|
|
217
|
+
export function envOverrides(env = process.env, warn = (m) => console.error(`>> ${m}`)) {
|
|
218
|
+
// A stale `DORFL_PROVIDER` (the removed provider OVERRIDE) is IGNORED with
|
|
219
|
+
// a one-line deprecation warning, never an error — the provider is now purely
|
|
220
|
+
// arbiter-derived; "suppress the PR" re-homes to `noPR` (`DORFL_NO_PR`).
|
|
221
|
+
const staleProvider = env[ENV_PREFIX + 'PROVIDER'];
|
|
222
|
+
if (staleProvider !== undefined) {
|
|
223
|
+
warn(`Ignoring deprecated env var ${ENV_PREFIX}PROVIDER: the provider is now ` +
|
|
224
|
+
'purely arbiter-derived (a GitHub remote ⇒ the GitHub provider, else ' +
|
|
225
|
+
'none). To suppress the PR (the old `none` use), set ' +
|
|
226
|
+
`${ENV_PREFIX}NO_PR=true (or pass --no-pr).` +
|
|
227
|
+
(staleProvider === 'none'
|
|
228
|
+
? ' (your `none` maps directly to NO_PR=true.)'
|
|
229
|
+
: ''));
|
|
230
|
+
}
|
|
231
|
+
const overrides = {};
|
|
232
|
+
// Per-member env layer for the `promptGuidance` NUDGE namespace. Each member
|
|
233
|
+
// is INDEPENDENTLY resolvable (`DORFL_PROMPT_GUIDANCE_<MEMBER>`); a
|
|
234
|
+
// present env var sets that member in the partial. We merge ALL set members
|
|
235
|
+
// into a single inner object, then assign once — the outer mergeConfig
|
|
236
|
+
// REPLACES the namespace per layer, so we send a coherent partial-inner per
|
|
237
|
+
// env override (a missing member there reads its default from the lower
|
|
238
|
+
// layer's namespace, which works because env is precisely a per-machine
|
|
239
|
+
// SETTER, not a gate).
|
|
240
|
+
const promptGuidancePartial = {};
|
|
241
|
+
for (const [varName, coercion] of Object.entries(PROMPT_GUIDANCE_ENV)) {
|
|
242
|
+
const raw = env[varName];
|
|
243
|
+
if (raw === undefined) {
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
const value = coerceValue(varName, raw, coercion);
|
|
247
|
+
if (varName === ENV_PREFIX + 'PROMPT_GUIDANCE_TEST_FIRST') {
|
|
248
|
+
promptGuidancePartial.testFirst = value;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
if (Object.keys(promptGuidancePartial).length > 0) {
|
|
252
|
+
overrides.promptGuidance = {
|
|
253
|
+
testFirst: promptGuidancePartial.testFirst ?? false,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
for (const key of Object.keys(KEY_COERCIONS)) {
|
|
257
|
+
const coercion = KEY_COERCIONS[key];
|
|
258
|
+
if (coercion === undefined) {
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
const varName = envVarName(key);
|
|
262
|
+
const raw = env[varName];
|
|
263
|
+
if (raw === undefined) {
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
const coerced = coerceValue(varName, raw, coercion);
|
|
267
|
+
// Type matches by construction: each coercion yields the key's value type.
|
|
268
|
+
overrides[key] = coerced;
|
|
269
|
+
}
|
|
270
|
+
return overrides;
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=env-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-config.js","sourceRoot":"","sources":["../src/env-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **The failure-CAUSE classifier** (task `failure-cause-classification-model-vs-
|
|
3
|
+
* git-vs-agent`).
|
|
4
|
+
*
|
|
5
|
+
* When a claimed item routes to `work/needs-attention/`, the runner records WHY.
|
|
6
|
+
* Historically several DIFFERENT causes collapsed into one undifferentiated label
|
|
7
|
+
* ("agent failed"), even though the CAUSE drives the RECOVERY:
|
|
8
|
+
*
|
|
9
|
+
* - **transient-infra** → retry the SAME work (the work is fine: a model
|
|
10
|
+
* endpoint outage the harness surfaced AFTER its own retries, or a git/
|
|
11
|
+
* provider outage).
|
|
12
|
+
* - **config-error** → fix the WIRING, not the task (a thrown CORE wiring/
|
|
13
|
+
* config error, e.g. `review` on with no `reviewGate` configured).
|
|
14
|
+
* - **agent-failed** (the conservative generic) → a human/agent must FIX
|
|
15
|
+
* something the agent did (ran but produced bad/empty output), OR the cause is
|
|
16
|
+
* simply UNKNOWN — the safe default that never forces a wrong specific label.
|
|
17
|
+
*
|
|
18
|
+
* This module classifies ONLY the axis that was previously lumped under
|
|
19
|
+
* "agent-failed". The OTHER existing terminal causes already have precise names
|
|
20
|
+
* and are NOT re-classified here — a red acceptance gate stays `gate-failed`, a
|
|
21
|
+
* rebase abort stays `rebase-conflict`, a deliberate STOP stays `agent-stopped`,
|
|
22
|
+
* a Gate-2 block stays `review-blocked`. This is the CAUSE axis ON TOP of those
|
|
23
|
+
* (see CONTEXT.md's *failure cause* glossary entry — the single source of truth).
|
|
24
|
+
*
|
|
25
|
+
* The classification is BEST-EFFORT + CONSERVATIVE: an unrecognised cause stays
|
|
26
|
+
* the generic `agent-failed`. The new precision is ADDED only where the cause is
|
|
27
|
+
* knowable from the surfaced error/detail; it never forces a wrong label.
|
|
28
|
+
*
|
|
29
|
+
* **`do` and `run` classify the SAME error the SAME way** by both routing their
|
|
30
|
+
* thrown-core-error / failed-agent detail through THIS one function — closing the
|
|
31
|
+
* cross-path divergence recorded in
|
|
32
|
+
* `work/notes/observations/run-thrown-core-error-labeled-agent-failed.md` (the SAME
|
|
33
|
+
* thrown core error used to read as `usage-error` in `do` but `agent-failed` in
|
|
34
|
+
* `run`).
|
|
35
|
+
*
|
|
36
|
+
* SCOPE FENCE: model-endpoint RETRIES are the HARNESS's job (pi retries its own
|
|
37
|
+
* API ~3–4×). This module does NOT add retries — it only CLASSIFIES what the
|
|
38
|
+
* harness SURFACES once its retries are exhausted (so a post-retry model outage
|
|
39
|
+
* reads as `transient-infra`, distinct from the agent producing bad output).
|
|
40
|
+
*/
|
|
41
|
+
/**
|
|
42
|
+
* The CAUSE of a stuck item, the axis ON TOP of the existing terminal outcomes.
|
|
43
|
+
* Only the values this module decides between are listed — the genuinely-NEW
|
|
44
|
+
* `transient-infra` / `config-error` plus the conservative generic `agent-failed`
|
|
45
|
+
* (the existing name, reused as the safe default). The other terminal causes
|
|
46
|
+
* (`gate-failed`, `rebase-conflict`, `agent-stopped`, `review-blocked`) are NOT
|
|
47
|
+
* produced here; they keep their own precise outcome names at their own sites.
|
|
48
|
+
*/
|
|
49
|
+
export type FailureCause = 'transient-infra' | 'config-error' | 'agent-failed';
|
|
50
|
+
/**
|
|
51
|
+
* Classify a failure CAUSE from the surfaced error/detail text, best-effort +
|
|
52
|
+
* conservative (an unrecognised cause stays `agent-failed`).
|
|
53
|
+
*
|
|
54
|
+
* Order matters: a thrown CORE config/wiring error is checked FIRST (it is the
|
|
55
|
+
* most specific + the cross-path divergence this task closes), then the
|
|
56
|
+
* transient-infra signals, else the generic default.
|
|
57
|
+
*
|
|
58
|
+
* Used by BOTH `do` and `run` at their failure-routing sites so the SAME error
|
|
59
|
+
* yields the SAME cause regardless of path.
|
|
60
|
+
*/
|
|
61
|
+
export declare function classifyFailureCause(detail: string | undefined): FailureCause;
|
|
62
|
+
/**
|
|
63
|
+
* A short, human-readable label for a cause, used to PREFIX the recorded
|
|
64
|
+
* needs-attention reason so an operator (or an autonomous triage loop) reads the
|
|
65
|
+
* cause WITHOUT a second naming scheme. The generic `agent-failed` gets the
|
|
66
|
+
* historical "agent failed:" prefix so existing reason prose / tests are
|
|
67
|
+
* unchanged; only the NEW causes carry a distinct, legible prefix.
|
|
68
|
+
*/
|
|
69
|
+
export declare function failureCauseLabel(cause: FailureCause): string;
|
|
70
|
+
//# sourceMappingURL=failure-cause.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure-cause.d.ts","sourceRoot":"","sources":["../src/failure-cause.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GACrB,iBAAiB,GACjB,cAAc,GACd,cAAc,CAAC;AAgDlB;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAY7E;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAS7D"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **The failure-CAUSE classifier** (task `failure-cause-classification-model-vs-
|
|
3
|
+
* git-vs-agent`).
|
|
4
|
+
*
|
|
5
|
+
* When a claimed item routes to `work/needs-attention/`, the runner records WHY.
|
|
6
|
+
* Historically several DIFFERENT causes collapsed into one undifferentiated label
|
|
7
|
+
* ("agent failed"), even though the CAUSE drives the RECOVERY:
|
|
8
|
+
*
|
|
9
|
+
* - **transient-infra** → retry the SAME work (the work is fine: a model
|
|
10
|
+
* endpoint outage the harness surfaced AFTER its own retries, or a git/
|
|
11
|
+
* provider outage).
|
|
12
|
+
* - **config-error** → fix the WIRING, not the task (a thrown CORE wiring/
|
|
13
|
+
* config error, e.g. `review` on with no `reviewGate` configured).
|
|
14
|
+
* - **agent-failed** (the conservative generic) → a human/agent must FIX
|
|
15
|
+
* something the agent did (ran but produced bad/empty output), OR the cause is
|
|
16
|
+
* simply UNKNOWN — the safe default that never forces a wrong specific label.
|
|
17
|
+
*
|
|
18
|
+
* This module classifies ONLY the axis that was previously lumped under
|
|
19
|
+
* "agent-failed". The OTHER existing terminal causes already have precise names
|
|
20
|
+
* and are NOT re-classified here — a red acceptance gate stays `gate-failed`, a
|
|
21
|
+
* rebase abort stays `rebase-conflict`, a deliberate STOP stays `agent-stopped`,
|
|
22
|
+
* a Gate-2 block stays `review-blocked`. This is the CAUSE axis ON TOP of those
|
|
23
|
+
* (see CONTEXT.md's *failure cause* glossary entry — the single source of truth).
|
|
24
|
+
*
|
|
25
|
+
* The classification is BEST-EFFORT + CONSERVATIVE: an unrecognised cause stays
|
|
26
|
+
* the generic `agent-failed`. The new precision is ADDED only where the cause is
|
|
27
|
+
* knowable from the surfaced error/detail; it never forces a wrong label.
|
|
28
|
+
*
|
|
29
|
+
* **`do` and `run` classify the SAME error the SAME way** by both routing their
|
|
30
|
+
* thrown-core-error / failed-agent detail through THIS one function — closing the
|
|
31
|
+
* cross-path divergence recorded in
|
|
32
|
+
* `work/notes/observations/run-thrown-core-error-labeled-agent-failed.md` (the SAME
|
|
33
|
+
* thrown core error used to read as `usage-error` in `do` but `agent-failed` in
|
|
34
|
+
* `run`).
|
|
35
|
+
*
|
|
36
|
+
* SCOPE FENCE: model-endpoint RETRIES are the HARNESS's job (pi retries its own
|
|
37
|
+
* API ~3–4×). This module does NOT add retries — it only CLASSIFIES what the
|
|
38
|
+
* harness SURFACES once its retries are exhausted (so a post-retry model outage
|
|
39
|
+
* reads as `transient-infra`, distinct from the agent producing bad output).
|
|
40
|
+
*/
|
|
41
|
+
/**
|
|
42
|
+
* The signature of a thrown CORE wiring/config error this module recognises. The
|
|
43
|
+
* core throws a plain `Error` for `review` on with no `reviewGate` wired (the
|
|
44
|
+
* canonical config-error; see `integration-core.ts`), whose message contains
|
|
45
|
+
* "wiring bug". We match on that stable phrase rather than the error CLASS so the
|
|
46
|
+
* classification survives the message crossing the plain-`Error` boundary the
|
|
47
|
+
* catch sites hand us (they only have `err.message`).
|
|
48
|
+
*/
|
|
49
|
+
const CONFIG_ERROR_SIGNATURES = [
|
|
50
|
+
/wiring bug/i,
|
|
51
|
+
/no review gate is configured/i,
|
|
52
|
+
];
|
|
53
|
+
/**
|
|
54
|
+
* Substrings that mark a TRANSIENT-INFRA failure: a model endpoint / connection
|
|
55
|
+
* outage the harness surfaced AFTER exhausting its own retries, or a git/provider
|
|
56
|
+
* outage. Best-effort lexical signals (the harness/git only hand us a message
|
|
57
|
+
* string) — deliberately conservative: anything not matched stays `agent-failed`.
|
|
58
|
+
*/
|
|
59
|
+
const TRANSIENT_INFRA_SIGNATURES = [
|
|
60
|
+
// A Gate-2 review verdict the runner could not PARSE (malformed JSON from the
|
|
61
|
+
// review agent, common on large diffs + weaker models). This is `transient-infra`,
|
|
62
|
+
// NOT `agent-failed`/`config-error`: the WORK is fine and the wiring is fine; the
|
|
63
|
+
// STOCHASTIC gate output misbehaved, so re-running the SAME work is the natural
|
|
64
|
+
// recovery (and the parser's repair pass + the tightened contract make a re-run far
|
|
65
|
+
// more likely to parse). Matches both `parseReviewVerdict` throw phrasings ("review
|
|
66
|
+
// verdict was not valid JSON" and "produced no parseable {verdict, findings}") and
|
|
67
|
+
// the core's "verdict could not be parsed" wrapper.
|
|
68
|
+
/review verdict was not valid JSON/i,
|
|
69
|
+
/verdict could not be parsed/i,
|
|
70
|
+
/no parseable \{verdict/i,
|
|
71
|
+
/\bECONN(?:REFUSED|RESET|ABORTED)\b/i,
|
|
72
|
+
/\bETIMEDOUT\b/i,
|
|
73
|
+
/\bENOTFOUND\b/i,
|
|
74
|
+
/\bEAI_AGAIN\b/i,
|
|
75
|
+
/connection (?:error|refused|reset|timed out|failed)/i,
|
|
76
|
+
/network (?:error|is unreachable|timeout)/i,
|
|
77
|
+
/\b(?:could not|unable to) (?:connect|reach)\b/i,
|
|
78
|
+
/\btimed? ?out\b/i,
|
|
79
|
+
/\b(?:overloaded|service unavailable|temporarily unavailable)\b/i,
|
|
80
|
+
/\b(?:429|500|502|503|504)\b/,
|
|
81
|
+
/model (?:endpoint )?(?:offline|unavailable|overloaded)/i,
|
|
82
|
+
/(?:after|exhausted) .{0,40}retr(?:y|ies)/i,
|
|
83
|
+
/rate.?limit/i,
|
|
84
|
+
];
|
|
85
|
+
/**
|
|
86
|
+
* Classify a failure CAUSE from the surfaced error/detail text, best-effort +
|
|
87
|
+
* conservative (an unrecognised cause stays `agent-failed`).
|
|
88
|
+
*
|
|
89
|
+
* Order matters: a thrown CORE config/wiring error is checked FIRST (it is the
|
|
90
|
+
* most specific + the cross-path divergence this task closes), then the
|
|
91
|
+
* transient-infra signals, else the generic default.
|
|
92
|
+
*
|
|
93
|
+
* Used by BOTH `do` and `run` at their failure-routing sites so the SAME error
|
|
94
|
+
* yields the SAME cause regardless of path.
|
|
95
|
+
*/
|
|
96
|
+
export function classifyFailureCause(detail) {
|
|
97
|
+
const text = (detail ?? '').trim();
|
|
98
|
+
if (text === '') {
|
|
99
|
+
return 'agent-failed';
|
|
100
|
+
}
|
|
101
|
+
if (CONFIG_ERROR_SIGNATURES.some((re) => re.test(text))) {
|
|
102
|
+
return 'config-error';
|
|
103
|
+
}
|
|
104
|
+
if (TRANSIENT_INFRA_SIGNATURES.some((re) => re.test(text))) {
|
|
105
|
+
return 'transient-infra';
|
|
106
|
+
}
|
|
107
|
+
return 'agent-failed';
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* A short, human-readable label for a cause, used to PREFIX the recorded
|
|
111
|
+
* needs-attention reason so an operator (or an autonomous triage loop) reads the
|
|
112
|
+
* cause WITHOUT a second naming scheme. The generic `agent-failed` gets the
|
|
113
|
+
* historical "agent failed:" prefix so existing reason prose / tests are
|
|
114
|
+
* unchanged; only the NEW causes carry a distinct, legible prefix.
|
|
115
|
+
*/
|
|
116
|
+
export function failureCauseLabel(cause) {
|
|
117
|
+
switch (cause) {
|
|
118
|
+
case 'transient-infra':
|
|
119
|
+
return 'transient infra';
|
|
120
|
+
case 'config-error':
|
|
121
|
+
return 'config error';
|
|
122
|
+
case 'agent-failed':
|
|
123
|
+
return 'agent failed';
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=failure-cause.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure-cause.js","sourceRoot":"","sources":["../src/failure-cause.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAeH;;;;;;;GAOG;AACH,MAAM,uBAAuB,GAAG;IAC/B,aAAa;IACb,+BAA+B;CAC/B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,0BAA0B,GAAG;IAClC,8EAA8E;IAC9E,mFAAmF;IACnF,kFAAkF;IAClF,gFAAgF;IAChF,oFAAoF;IACpF,oFAAoF;IACpF,mFAAmF;IACnF,oDAAoD;IACpD,oCAAoC;IACpC,8BAA8B;IAC9B,yBAAyB;IACzB,qCAAqC;IACrC,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,sDAAsD;IACtD,2CAA2C;IAC3C,gDAAgD;IAChD,kBAAkB;IAClB,iEAAiE;IACjE,6BAA6B;IAC7B,yDAAyD;IACzD,2CAA2C;IAC3C,cAAc;CACd,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA0B;IAC9D,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QACjB,OAAO,cAAc,CAAC;IACvB,CAAC;IACD,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO,cAAc,CAAC;IACvB,CAAC;IACD,IAAI,0BAA0B,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC5D,OAAO,iBAAiB,CAAC;IAC1B,CAAC;IACD,OAAO,cAAc,CAAC;AACvB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAmB;IACpD,QAAQ,KAAK,EAAE,CAAC;QACf,KAAK,iBAAiB;YACrB,OAAO,iBAAiB,CAAC;QAC1B,KAAK,cAAc;YAClB,OAAO,cAAc,CAAC;QACvB,KAAK,cAAc;YAClB,OAAO,cAAc,CAAC;IACxB,CAAC;AACF,CAAC"}
|
package/dist/format.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ScanReport } from './scan.js';
|
|
2
|
+
import type { CwdSection } from './cwd-section.js';
|
|
3
|
+
import type { LockEntry } from './item-lock.js';
|
|
4
|
+
/**
|
|
5
|
+
* Human label for the two autonomy axes. `humanOnly` is reported first when both
|
|
6
|
+
* are set, so the REASON an agent is gated is always visible and distinct from
|
|
7
|
+
* `needsAnswers`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function gateLabel(humanOnly: boolean | undefined, needsAnswers?: boolean | undefined): string;
|
|
10
|
+
/**
|
|
11
|
+
* Render the CWD-LOCAL section of `scan`/`status` (the `scan-status-read-cwd-repo`
|
|
12
|
+
* task): a DISTINCT, separately-counted block for the CURRENT repo, read from
|
|
13
|
+
* the LOCAL WORKING TREE (NOT the registry's bare mirror ref). Returns `[]` when
|
|
14
|
+
* the cwd does NOT participate (no local section). The section LABELS its source
|
|
15
|
+
* + freshness, shows the divergence-vs-arbiter (`main-divergence-guard` framing),
|
|
16
|
+
* and — when the cwd participates but is NOT registered — teaches
|
|
17
|
+
* self-registration instead of the dead-end "No participating repos found".
|
|
18
|
+
*
|
|
19
|
+
* The counts here are the cwd's OWN (never merged into the registry total — the
|
|
20
|
+
* consistency rule): the two reads have different freshness + storage models.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Render ONE held per-item lock entry (action × state + reason/questions) as
|
|
24
|
+
* indented lines, the SHARED renderer for the in-flight lock surface on BOTH the
|
|
25
|
+
* registry view (`formatStatus`) and the cwd section (`formatCwdSection`), so the
|
|
26
|
+
* two substrates present a held/stuck item identically (NOT a forked renderer). An
|
|
27
|
+
* `active` hold reads as `in-progress`; a `stuck` hold as `needs-attention` and
|
|
28
|
+
* carries its (possibly multi-line) reason + any surfaced questions.
|
|
29
|
+
*/
|
|
30
|
+
export declare function formatLockEntryLines(entry: LockEntry, indent: string): string[];
|
|
31
|
+
export declare function formatCwdSection(section: CwdSection): string[];
|
|
32
|
+
/**
|
|
33
|
+
* Render the cross-repo queue as a human decision dashboard: under each repo,
|
|
34
|
+
* every backlog item is grouped by who-can-take-it (Agent-claimable now /
|
|
35
|
+
* Human-only / Blocked), with empty groups shown as `(none)`. Within a group,
|
|
36
|
+
* ready (deps-satisfied) items sort above blocked ones.
|
|
37
|
+
*
|
|
38
|
+
* The set of groups shown is INDEPENDENT of `autoBuild`; only the eligibility
|
|
39
|
+
* *verdict* line reflects the policy (`report.totalEligible` counts an
|
|
40
|
+
* agent-claimable item only when `autoBuild` is on).
|
|
41
|
+
*/
|
|
42
|
+
export declare function formatReport(report: ScanReport, cwd?: CwdSection): string;
|
|
43
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAc,MAAM,WAAW,CAAC;AACvD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAW9C;;;;GAIG;AACH,wBAAgB,SAAS,CACxB,SAAS,EAAE,OAAO,GAAG,SAAS,EAC9B,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,GAChC,MAAM,CAQR;AA6ED;;;;;;;;;;;GAWG;AACH;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,MAAM,GACZ,MAAM,EAAE,CAwBV;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,EAAE,CAyE9D;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,MAAM,CAwEzE"}
|