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,127 @@
|
|
|
1
|
+
import { type Harness } from './harness.js';
|
|
2
|
+
import { type SidecarModel } from './sidecar.js';
|
|
3
|
+
import { type DecisionDecider, type DecisionOutcome } from './decision-engine.js';
|
|
4
|
+
/**
|
|
5
|
+
* The **AGENTIC apply DECIDER** (prd
|
|
6
|
+
* `agentic-question-resolution-retire-disposition-vocabulary` US #1/#2/#3, task
|
|
7
|
+
* `agentic-apply-retire-disposition-vocabulary`) — the input-ADAPTER + prompt +
|
|
8
|
+
* production decider for the apply rung's call into the SHARED
|
|
9
|
+
* `decide(input, allowedOutcomes)` engine (`decision-engine.ts`). It is the apply
|
|
10
|
+
* rung's analogue of intake's decision seam and `surface-gate.ts` / `triage-gate.ts`:
|
|
11
|
+
* the agent JUDGES (reads the human's answer(s) + the SOURCE item and returns a
|
|
12
|
+
* verdict); the engine VALIDATES it against the allowed set; the apply rung ACTS.
|
|
13
|
+
*
|
|
14
|
+
* This is the SUBSUME of the old disposition vocabulary: there is no longer a
|
|
15
|
+
* `disposition=` token the surface rung stamps and the apply rung executes. When a
|
|
16
|
+
* fully-answered OBSERVATION reaches the apply rung, this decider reads the answer
|
|
17
|
+
* + the source's FULL context (body, type, surrounding signal — decision 3, the
|
|
18
|
+
* analogue of intake reading the whole issue thread) and returns ONE of the LAUNCH
|
|
19
|
+
* outcomes the apply rung allows. The artifact-type SELECTION (task vs spec) comes
|
|
20
|
+
* from the agent's VERDICT, NOT a human `promote-*` field.
|
|
21
|
+
*
|
|
22
|
+
* **The allowed set** (the SUBSET the apply rung passes to `decide`):
|
|
23
|
+
* `{task | spec | adr | delete | ask}` \u2014 i.e. `{mint-task | mint-spec | mint-adr |
|
|
24
|
+
* delete-source | ask-follow-up}`. `adr` was DEFERRED at the keystone launch (no
|
|
25
|
+
* ADR-mint path existed yet) and is now WIRED by the follow-on task
|
|
26
|
+
* `agentic-apply-mint-adr-route`, which added the {@link
|
|
27
|
+
* import('./mint-adr.js').mintAdr} route and widened this set. Intake's set is
|
|
28
|
+
* UNCHANGED (`{task | spec | ask | bounce}`) \u2014 the engine stays outcome-AGNOSTIC
|
|
29
|
+
* (PRD decision 14), so widening this caller's subset does NOT touch intake or the
|
|
30
|
+
* engine's superset union.
|
|
31
|
+
*
|
|
32
|
+
* The INPUT adapter ({@link buildApplyDecisionInput}) sits HERE in the caller, not
|
|
33
|
+
* in the engine (the engine threads `input` opaquely) \u2014 decision 3: the input
|
|
34
|
+
* adapter is per-front-door and NOT forced to be shared with intake's issue-thread
|
|
35
|
+
* adapter.
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* The allowed-outcome set the apply rung permits. `adr` is now INCLUDED (task
|
|
39
|
+
* `agentic-apply-mint-adr-route` widened the keystone's launch subset, which had
|
|
40
|
+
* deferred it). The engine's superset still carries `adr` either way (it is
|
|
41
|
+
* outcome-agnostic); this is purely the CALLER's permitted subset.
|
|
42
|
+
*/
|
|
43
|
+
export declare const APPLY_ALLOWED_OUTCOMES: readonly DecisionOutcome[];
|
|
44
|
+
/**
|
|
45
|
+
* The input the apply decider reads: the answered source item + its answered
|
|
46
|
+
* sidecar. The decision is grounded in the source's FULL context (body, type,
|
|
47
|
+
* surrounding signal), not just the latest answer text (decision 3).
|
|
48
|
+
*/
|
|
49
|
+
export interface ApplyDecisionInput {
|
|
50
|
+
/** The namespaced source identity (`observation:<slug>` at launch). */
|
|
51
|
+
item: string;
|
|
52
|
+
/** The source item's type. */
|
|
53
|
+
type: SidecarModel['type'];
|
|
54
|
+
/** The source item's body (full context for the decision). */
|
|
55
|
+
itemBody: string;
|
|
56
|
+
/** The answered sidecar model (the human's recorded answers + the questions). */
|
|
57
|
+
sidecar: SidecarModel;
|
|
58
|
+
/** The working clone/checkout the decision runs in. */
|
|
59
|
+
cwd: string;
|
|
60
|
+
/** The model the apply-decision agent runs on (`undefined` \u21d2 the harness default). */
|
|
61
|
+
model?: string;
|
|
62
|
+
/** Environment for the decision-agent launch. */
|
|
63
|
+
env?: NodeJS.ProcessEnv;
|
|
64
|
+
/** The HOST-ONLY sessions root the decision session FILE is generated under. */
|
|
65
|
+
sessionsDir?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The apply-decider SEAM: read the apply input and return a {@link DecisionVerdict}.
|
|
69
|
+
* Injected by tests (a CANNED verdict, no real model); production uses
|
|
70
|
+
* {@link harnessApplyDecider}. It is the apply rung's {@link DecisionDecider}
|
|
71
|
+
* specialised to {@link ApplyDecisionInput}.
|
|
72
|
+
*/
|
|
73
|
+
export type ApplyDecider = DecisionDecider<ApplyDecisionInput>;
|
|
74
|
+
/**
|
|
75
|
+
* Build the apply-decision INPUT for an answered source item: read its body (from
|
|
76
|
+
* the working tree) + parse its answered sidecar. The adapter boundary the engine
|
|
77
|
+
* never sees (it threads this opaquely to the decider). Returns `undefined` when
|
|
78
|
+
* there is no sidecar or no item file (the apply rung handles those upstream).
|
|
79
|
+
*/
|
|
80
|
+
export declare function buildApplyDecisionInput(opts: {
|
|
81
|
+
item: string;
|
|
82
|
+
type: SidecarModel['type'];
|
|
83
|
+
itemPath: string;
|
|
84
|
+
cwd: string;
|
|
85
|
+
model?: string;
|
|
86
|
+
env?: NodeJS.ProcessEnv;
|
|
87
|
+
sessionsDir?: string;
|
|
88
|
+
}): ApplyDecisionInput | undefined;
|
|
89
|
+
/**
|
|
90
|
+
* Render the apply-decision agent PROMPT: instruct a fresh-context agent to read
|
|
91
|
+
* the human's recorded ANSWER(S) + the SOURCE item and emit a single
|
|
92
|
+
* `{outcome, \u2026}` verdict ({@link parseDecisionVerdict} reads it). The agent decides
|
|
93
|
+
* what to DO with the answered signal \u2014 mint a self-contained task, mint a SPEC,
|
|
94
|
+
* mint an ADR, delete the source, or ask one BATCH of follow-up questions \u2014
|
|
95
|
+
* grounded in the source's full context. It writes NOTHING (the engine acts on
|
|
96
|
+
* the verdict).
|
|
97
|
+
*
|
|
98
|
+
* Mirrors {@link import('./surface-gate.js').buildSurfacePrompt} /
|
|
99
|
+
* {@link import('./intake.js').buildIntakeDecisionSpec}: a fresh-context agent that
|
|
100
|
+
* EDITS nothing and EMITS one structured object the ENGINE routes/persists.
|
|
101
|
+
*/
|
|
102
|
+
export declare function buildApplyDecisionPrompt(input: ApplyDecisionInput): string;
|
|
103
|
+
/** What a harness-backed apply decider needs to launch the decision agent. */
|
|
104
|
+
export interface HarnessApplyDeciderOptions {
|
|
105
|
+
/** The harness seam used to launch the fresh-context decision agent. */
|
|
106
|
+
harness?: Harness;
|
|
107
|
+
/** The agent command the null/shell adapter shells out to (`{model}`-aware). */
|
|
108
|
+
agentCmd?: string;
|
|
109
|
+
/**
|
|
110
|
+
* Read the decision agent's textual output for parsing. Production reads
|
|
111
|
+
* `launched.output` (the ANSWER channel); tests inject `readOutput` to stub a
|
|
112
|
+
* canned verdict string.
|
|
113
|
+
*/
|
|
114
|
+
readOutput?: (output: string | undefined) => string;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* The PRODUCTION apply decider: launch a fresh-context agent through the EXISTING
|
|
118
|
+
* harness seam (routing an optional `model` via `LaunchInput.model` \u2014 the \u00a713
|
|
119
|
+
* model-routing intent, NOT a new mechanism), then PARSE the emitted verdict via
|
|
120
|
+
* the SHARED {@link parseDecisionVerdict}. The DIRECT mirror of
|
|
121
|
+
* `harnessSurfaceGate` / `harnessTriageGate`: a SEPARATE harness launch (fresh
|
|
122
|
+
* context) in the same checkout `cwd`, fed {@link buildApplyDecisionPrompt}; a
|
|
123
|
+
* DISTINCT session id (`<item>-apply-decide`) so its session never collides with a
|
|
124
|
+
* build / review / surface / triage session.
|
|
125
|
+
*/
|
|
126
|
+
export declare function harnessApplyDecider(options?: HarnessApplyDeciderOptions): ApplyDecider;
|
|
127
|
+
//# sourceMappingURL=apply-decide.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-decide.d.ts","sourceRoot":"","sources":["../src/apply-decide.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,OAAO,EAAC,MAAM,cAAc,CAAC;AAEvD,OAAO,EAA+B,KAAK,YAAY,EAAC,MAAM,cAAc,CAAC;AAC7E,OAAO,EACN,KAAK,eAAe,EACpB,KAAK,eAAe,EAGpB,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAAS,eAAe,EAM5D,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAClC,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC3B,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,OAAO,EAAE,YAAY,CAAC;IACtB,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,kBAAkB,GAAG,SAAS,CAyBjC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CA4C1E;AAED,8EAA8E;AAC9E,MAAM,WAAW,0BAA0B;IAC1C,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC;CACpD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,GAAE,0BAA+B,GACtC,YAAY,CAuBd"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { NullHarness } from './harness.js';
|
|
4
|
+
import { launchWithOptionalWatch } from './agent-launch.js';
|
|
5
|
+
import { parseSidecar, sidecarPathFor } from './sidecar.js';
|
|
6
|
+
import { parseDecisionVerdict, } from './decision-engine.js';
|
|
7
|
+
/**
|
|
8
|
+
* The **AGENTIC apply DECIDER** (prd
|
|
9
|
+
* `agentic-question-resolution-retire-disposition-vocabulary` US #1/#2/#3, task
|
|
10
|
+
* `agentic-apply-retire-disposition-vocabulary`) — the input-ADAPTER + prompt +
|
|
11
|
+
* production decider for the apply rung's call into the SHARED
|
|
12
|
+
* `decide(input, allowedOutcomes)` engine (`decision-engine.ts`). It is the apply
|
|
13
|
+
* rung's analogue of intake's decision seam and `surface-gate.ts` / `triage-gate.ts`:
|
|
14
|
+
* the agent JUDGES (reads the human's answer(s) + the SOURCE item and returns a
|
|
15
|
+
* verdict); the engine VALIDATES it against the allowed set; the apply rung ACTS.
|
|
16
|
+
*
|
|
17
|
+
* This is the SUBSUME of the old disposition vocabulary: there is no longer a
|
|
18
|
+
* `disposition=` token the surface rung stamps and the apply rung executes. When a
|
|
19
|
+
* fully-answered OBSERVATION reaches the apply rung, this decider reads the answer
|
|
20
|
+
* + the source's FULL context (body, type, surrounding signal — decision 3, the
|
|
21
|
+
* analogue of intake reading the whole issue thread) and returns ONE of the LAUNCH
|
|
22
|
+
* outcomes the apply rung allows. The artifact-type SELECTION (task vs spec) comes
|
|
23
|
+
* from the agent's VERDICT, NOT a human `promote-*` field.
|
|
24
|
+
*
|
|
25
|
+
* **The allowed set** (the SUBSET the apply rung passes to `decide`):
|
|
26
|
+
* `{task | spec | adr | delete | ask}` \u2014 i.e. `{mint-task | mint-spec | mint-adr |
|
|
27
|
+
* delete-source | ask-follow-up}`. `adr` was DEFERRED at the keystone launch (no
|
|
28
|
+
* ADR-mint path existed yet) and is now WIRED by the follow-on task
|
|
29
|
+
* `agentic-apply-mint-adr-route`, which added the {@link
|
|
30
|
+
* import('./mint-adr.js').mintAdr} route and widened this set. Intake's set is
|
|
31
|
+
* UNCHANGED (`{task | spec | ask | bounce}`) \u2014 the engine stays outcome-AGNOSTIC
|
|
32
|
+
* (PRD decision 14), so widening this caller's subset does NOT touch intake or the
|
|
33
|
+
* engine's superset union.
|
|
34
|
+
*
|
|
35
|
+
* The INPUT adapter ({@link buildApplyDecisionInput}) sits HERE in the caller, not
|
|
36
|
+
* in the engine (the engine threads `input` opaquely) \u2014 decision 3: the input
|
|
37
|
+
* adapter is per-front-door and NOT forced to be shared with intake's issue-thread
|
|
38
|
+
* adapter.
|
|
39
|
+
*/
|
|
40
|
+
/**
|
|
41
|
+
* The allowed-outcome set the apply rung permits. `adr` is now INCLUDED (task
|
|
42
|
+
* `agentic-apply-mint-adr-route` widened the keystone's launch subset, which had
|
|
43
|
+
* deferred it). The engine's superset still carries `adr` either way (it is
|
|
44
|
+
* outcome-agnostic); this is purely the CALLER's permitted subset.
|
|
45
|
+
*/
|
|
46
|
+
export const APPLY_ALLOWED_OUTCOMES = [
|
|
47
|
+
'task',
|
|
48
|
+
'spec',
|
|
49
|
+
'adr',
|
|
50
|
+
'delete',
|
|
51
|
+
'ask',
|
|
52
|
+
];
|
|
53
|
+
/**
|
|
54
|
+
* Build the apply-decision INPUT for an answered source item: read its body (from
|
|
55
|
+
* the working tree) + parse its answered sidecar. The adapter boundary the engine
|
|
56
|
+
* never sees (it threads this opaquely to the decider). Returns `undefined` when
|
|
57
|
+
* there is no sidecar or no item file (the apply rung handles those upstream).
|
|
58
|
+
*/
|
|
59
|
+
export function buildApplyDecisionInput(opts) {
|
|
60
|
+
const sidecarAbs = join(opts.cwd, sidecarPathFor(opts.item));
|
|
61
|
+
if (!existsSync(sidecarAbs)) {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
const itemAbs = join(opts.cwd, opts.itemPath);
|
|
65
|
+
if (!existsSync(itemAbs)) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
let sidecar;
|
|
69
|
+
try {
|
|
70
|
+
sidecar = parseSidecar(readFileSync(sidecarAbs, 'utf8'));
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
item: opts.item,
|
|
77
|
+
type: opts.type,
|
|
78
|
+
itemBody: readFileSync(itemAbs, 'utf8'),
|
|
79
|
+
sidecar,
|
|
80
|
+
cwd: opts.cwd,
|
|
81
|
+
model: opts.model,
|
|
82
|
+
env: opts.env,
|
|
83
|
+
sessionsDir: opts.sessionsDir,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Render the apply-decision agent PROMPT: instruct a fresh-context agent to read
|
|
88
|
+
* the human's recorded ANSWER(S) + the SOURCE item and emit a single
|
|
89
|
+
* `{outcome, \u2026}` verdict ({@link parseDecisionVerdict} reads it). The agent decides
|
|
90
|
+
* what to DO with the answered signal \u2014 mint a self-contained task, mint a SPEC,
|
|
91
|
+
* mint an ADR, delete the source, or ask one BATCH of follow-up questions \u2014
|
|
92
|
+
* grounded in the source's full context. It writes NOTHING (the engine acts on
|
|
93
|
+
* the verdict).
|
|
94
|
+
*
|
|
95
|
+
* Mirrors {@link import('./surface-gate.js').buildSurfacePrompt} /
|
|
96
|
+
* {@link import('./intake.js').buildIntakeDecisionSpec}: a fresh-context agent that
|
|
97
|
+
* EDITS nothing and EMITS one structured object the ENGINE routes/persists.
|
|
98
|
+
*/
|
|
99
|
+
export function buildApplyDecisionPrompt(input) {
|
|
100
|
+
const answers = input.sidecar.entries
|
|
101
|
+
.map((e) => `- ${e.question.trim()}\n ANSWER: ${e.answer.trim()}`)
|
|
102
|
+
.join('\n');
|
|
103
|
+
return [
|
|
104
|
+
`You are a FRESH-CONTEXT decision agent for the answered work/ item`,
|
|
105
|
+
`"${input.item}" (type: ${input.type}). The human has answered every open`,
|
|
106
|
+
`question; decide what to DO with this signal, grounded in the source's FULL`,
|
|
107
|
+
`context (its body + type + the answers), NOT just the latest answer text.`,
|
|
108
|
+
`You write NOTHING \u2014 no file edit, no git, no commit (the advance ENGINE acts`,
|
|
109
|
+
`on what you emit). You JUDGE; the engine ACTS.`,
|
|
110
|
+
``,
|
|
111
|
+
`The source item body:`,
|
|
112
|
+
`---`,
|
|
113
|
+
input.itemBody.trim(),
|
|
114
|
+
`---`,
|
|
115
|
+
``,
|
|
116
|
+
`The human's answers:`,
|
|
117
|
+
answers,
|
|
118
|
+
``,
|
|
119
|
+
`Choose ONE outcome and emit a single JSON object (no prose OUTSIDE it):`,
|
|
120
|
+
` - "task": mint a SELF-CONTAINED task from this signal. Carry the answer(s)`,
|
|
121
|
+
` + any remaining open-question scoping into the drafted body so the task is`,
|
|
122
|
+
` buildable on its own. The taskBody MUST include a "## What to build" section`,
|
|
123
|
+
` AND a "## Prompt" section (a blockquoted, self-contained instruction a fresh`,
|
|
124
|
+
` agent can start from) — a task with no "## Prompt" is NOT dispatchable and the`,
|
|
125
|
+
` build refuses it. Emit {"outcome":"task","taskSlug":"\u2026",`,
|
|
126
|
+
` "taskTitle":"\u2026","taskBody":"\u2026 (markdown AFTER the frontmatter)"}.`,
|
|
127
|
+
` - "spec": mint a SPEC from this signal (a larger, coherent piece of work).`,
|
|
128
|
+
` Emit {"outcome":"spec","specSlug":"\u2026","specTitle":"\u2026","specBody":"\u2026"}.`,
|
|
129
|
+
` - "adr": the answer SETTLES an architectural decision worth recording. Mint`,
|
|
130
|
+
` a self-contained ADR (docs/adr/, the context/decision/why shape) carrying`,
|
|
131
|
+
` the WHY from the answer(s). Emit {"outcome":"adr","adrSlug":"\u2026",`,
|
|
132
|
+
` "adrTitle":"\u2026","adrBody":"\u2026 (markdown AFTER the frontmatter)"}.`,
|
|
133
|
+
` - "delete": the answer means this signal should be DROPPED. Emit`,
|
|
134
|
+
` {"outcome":"delete","deleteReason":"\u2026"} (a single revertible deletion;`,
|
|
135
|
+
` the reason rides the commit message, git history is the archive).`,
|
|
136
|
+
` - "ask": you need more from the human before acting. Emit`,
|
|
137
|
+
` {"outcome":"ask","question":"\u2026"} \u2014 ask everything you still need as ONE`,
|
|
138
|
+
` batch (never a drip); the engine appends it and re-pauses.`,
|
|
139
|
+
``,
|
|
140
|
+
`Do NOT emit any other outcome. It is plain text inside the JSON string`,
|
|
141
|
+
`(escape newlines as \\n).`,
|
|
142
|
+
].join('\n');
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* The PRODUCTION apply decider: launch a fresh-context agent through the EXISTING
|
|
146
|
+
* harness seam (routing an optional `model` via `LaunchInput.model` \u2014 the \u00a713
|
|
147
|
+
* model-routing intent, NOT a new mechanism), then PARSE the emitted verdict via
|
|
148
|
+
* the SHARED {@link parseDecisionVerdict}. The DIRECT mirror of
|
|
149
|
+
* `harnessSurfaceGate` / `harnessTriageGate`: a SEPARATE harness launch (fresh
|
|
150
|
+
* context) in the same checkout `cwd`, fed {@link buildApplyDecisionPrompt}; a
|
|
151
|
+
* DISTINCT session id (`<item>-apply-decide`) so its session never collides with a
|
|
152
|
+
* build / review / surface / triage session.
|
|
153
|
+
*/
|
|
154
|
+
export function harnessApplyDecider(options = {}) {
|
|
155
|
+
const harness = options.harness ?? new NullHarness();
|
|
156
|
+
const readOutput = options.readOutput ?? ((output) => output ?? '');
|
|
157
|
+
return async (input) => {
|
|
158
|
+
const sessionId = `${input.item.replace(/:/g, '-')}-apply-decide`;
|
|
159
|
+
const launched = await launchWithOptionalWatch({
|
|
160
|
+
harness,
|
|
161
|
+
dir: input.cwd,
|
|
162
|
+
slug: input.item,
|
|
163
|
+
command: options.agentCmd ?? '',
|
|
164
|
+
prompt: buildApplyDecisionPrompt(input),
|
|
165
|
+
model: input.model,
|
|
166
|
+
sessionId,
|
|
167
|
+
sessionsDir: input.sessionsDir,
|
|
168
|
+
env: input.env,
|
|
169
|
+
});
|
|
170
|
+
if (!launched.ok) {
|
|
171
|
+
throw new Error(`apply-decision agent launch failed${launched.detail ? `: ${launched.detail}` : ''}`);
|
|
172
|
+
}
|
|
173
|
+
return parseDecisionVerdict(readOutput(launched.output));
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=apply-decide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-decide.js","sourceRoot":"","sources":["../src/apply-decide.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { type SidecarEntry } from './sidecar.js';
|
|
2
|
+
import { type IntegrationCoreResult } from './integration-core.js';
|
|
3
|
+
import type { VerifyConfig } from './verify.js';
|
|
4
|
+
/**
|
|
5
|
+
* The **answered MERGE-QUESTION ACTION DISPATCH** (prd
|
|
6
|
+
* `land-time-reverify-and-parallel-merge-ceiling`, task
|
|
7
|
+
* `apply-rung-merge-disposition`; Stories #15, #16) — the deterministic,
|
|
8
|
+
* answer-driven RUNNER-ACTION layer that turns an answered
|
|
9
|
+
* `kind: merge` sidecar entry into a LAND through the EXISTING
|
|
10
|
+
* `integration-core.ts` land primitive (rebase → re-verify on the rebased tip →
|
|
11
|
+
* advance).
|
|
12
|
+
*
|
|
13
|
+
* This is a SIBLING of the agentic `decide()` content-decision in
|
|
14
|
+
* `apply-decide.ts`, NOT a route through it: a merge-acceptance has no
|
|
15
|
+
* judgement content (the human's plain `merge | hold | drop` answer IS the
|
|
16
|
+
* decision; the apply-time fresh-worktree re-verify on the rebased tip is the
|
|
17
|
+
* real correctness gate). Per the PRD's resolved mechanism, routing this
|
|
18
|
+
* through an LLM only adds cost and non-determinism, so the apply rung
|
|
19
|
+
* KIND-CHECKS the sidecar BEFORE calling the agentic decider: a sidecar entry
|
|
20
|
+
* carrying `kind: merge` (the typed dispatch field from `sidecar-kind-field`,
|
|
21
|
+
* stamped by `merge-question-surfacer`) dispatches HERE deterministically;
|
|
22
|
+
* content kinds (observation / triage / spec) keep going through `decide()` as
|
|
23
|
+
* today.
|
|
24
|
+
*
|
|
25
|
+
* The KEYING is the question identity + the human's plain answer:
|
|
26
|
+
*
|
|
27
|
+
* - `answer ≈ merge` → invoke the LAND primitive (see {@link performMergeLand})
|
|
28
|
+
* with `committedRecovery: true` + `freshWorktreeGate: true`. The unmerged
|
|
29
|
+
* `work/<slug>` is checked out via the EXISTING `workspace.ts` per-job
|
|
30
|
+
* worktree seam ({@link createJob} off the hub mirror), NOT a bespoke
|
|
31
|
+
* worktree/clone; `performIntegration` then re-verifies the REBASED tip and
|
|
32
|
+
* REFUSES on red (routes to needs-attention through its own shared seam),
|
|
33
|
+
* so `main` never receives a tree that fails `verify`.
|
|
34
|
+
* - `answer ≈ hold` → SKIP the land; the apply rung still records the answer
|
|
35
|
+
* in the item body via the normal apply path (the work branch stays
|
|
36
|
+
* unmerged; the next surface pass may re-emit a question).
|
|
37
|
+
* - `answer ≈ drop` → SKIP the land; the apply rung still records the answer
|
|
38
|
+
* in the item body via the normal apply path. (Cancellation of the work
|
|
39
|
+
* branch itself is out of this task's scope — the question is recorded as
|
|
40
|
+
* "drop" and the human / a later surfacer handles the artifact.)
|
|
41
|
+
*
|
|
42
|
+
* The STALE-APPROVAL POLICY (PRD OQ6, applied answer q1): default is the cheap
|
|
43
|
+
* "HONOUR the prior approval + land on a green re-verify" path; opt-in
|
|
44
|
+
* `strictMergeApproval` (resolved per-repo via the gate-family precedence chain
|
|
45
|
+
* by the sibling task `strict-merge-approval-gate`, default OFF) RE-SURFACES
|
|
46
|
+
* the merge-question instead of landing when the merge-base moved between the
|
|
47
|
+
* surfacer's question and this apply. The RED-re-verify refusal is unchanged
|
|
48
|
+
* in both modes.
|
|
49
|
+
*
|
|
50
|
+
* House-style boundary: this module is the DETERMINISTIC DISPATCH LAYER. It
|
|
51
|
+
* does NOT re-implement rebase / verify / integrate (it drives the EXISTING
|
|
52
|
+
* `performIntegration` with `committedRecovery: true` + `freshWorktreeGate:
|
|
53
|
+
* true`, which {@link createJob} cuts the worktree for), and it does NOT
|
|
54
|
+
* improvise a worktree or clone (it uses the same `createJob` seam the build /
|
|
55
|
+
* recovery callers use). Tests inject the {@link MergeActionHandler} seam so
|
|
56
|
+
* they assert on EXTERNAL behaviour (what lands on `main`, what routes to
|
|
57
|
+
* needs-attention, that `verify` ran on the rebased tip).
|
|
58
|
+
*/
|
|
59
|
+
/** The three deterministic actions a merge-question answer encodes. */
|
|
60
|
+
export type MergeActionVerb = 'merge' | 'hold' | 'drop';
|
|
61
|
+
/** A detected, answer-driven merge-action keyed off ONE answered `kind: merge` entry. */
|
|
62
|
+
export interface DetectedMergeAction {
|
|
63
|
+
/** The deterministic verb parsed from the entry's answer text. */
|
|
64
|
+
verb: MergeActionVerb;
|
|
65
|
+
/** The answered `kind: merge` entry the verb came from. */
|
|
66
|
+
entry: SidecarEntry;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Parse the human's plain free-text answer into the deterministic
|
|
70
|
+
* {@link MergeActionVerb}. The merge-question surfacer renders
|
|
71
|
+
* `merge | hold | drop` in the entry's `default` as a human-readable hint, so
|
|
72
|
+
* the human typically types one of those words verbatim. We accept any text
|
|
73
|
+
* whose first whole word (case-insensitive) is one of `merge` / `hold` / `drop`
|
|
74
|
+
* — this is the same machine-parseable choice shape the surfacer's applied
|
|
75
|
+
* answer q1 documents ("a DETERMINISTIC CHOICE shape … the human picks and the
|
|
76
|
+
* system parses unambiguously").
|
|
77
|
+
*
|
|
78
|
+
* Returns `undefined` on ANYTHING else (an empty answer, a typo, a long
|
|
79
|
+
* narrative without one of the three words at the start) so the caller can
|
|
80
|
+
* route the ambiguity HONESTLY — never default-to-merge on a malformed answer,
|
|
81
|
+
* which would invent a land the human did not authorise.
|
|
82
|
+
*/
|
|
83
|
+
export declare function parseMergeAnswer(text: string): MergeActionVerb | undefined;
|
|
84
|
+
/**
|
|
85
|
+
* Detect the FIRST answered `kind: merge` entry's deterministic action verb in
|
|
86
|
+
* a fully-answered sidecar (the apply rung's pre-decider kind-check). Returns
|
|
87
|
+
* `undefined` when the sidecar carries no answered `kind: merge` entry (the
|
|
88
|
+
* apply rung then proceeds to the existing path — agentic for observations,
|
|
89
|
+
* normal apply for task/prd content questions).
|
|
90
|
+
*
|
|
91
|
+
* The sidecar is read OFF DISK keyed off the namespaced item identity; the
|
|
92
|
+
* model is parsed via the SAME `parseSidecar` the rest of the engine uses.
|
|
93
|
+
* Returns `undefined` on a missing/unparseable sidecar (the caller's normal
|
|
94
|
+
* apply path will then raise the right error).
|
|
95
|
+
*/
|
|
96
|
+
export declare function detectAnsweredMergeAction(cwd: string, item: string): DetectedMergeAction | undefined;
|
|
97
|
+
/** Input the production merge-action handler consumes. */
|
|
98
|
+
export interface MergeActionInput {
|
|
99
|
+
/** The detected action (verb + source entry). */
|
|
100
|
+
action: DetectedMergeAction;
|
|
101
|
+
/** The namespaced item identity (`task:<slug>`). */
|
|
102
|
+
item: string;
|
|
103
|
+
/** The bare slug (the work branch is `work/task-<slug>` / `work/<slug>`). */
|
|
104
|
+
slug: string;
|
|
105
|
+
/** The apply rung's working clone (used to resolve the arbiter URL when needed). */
|
|
106
|
+
cwd: string;
|
|
107
|
+
/** The arbiter remote NAME in `cwd` (defaults to `origin`). */
|
|
108
|
+
arbiter: string;
|
|
109
|
+
/**
|
|
110
|
+
* The arbiter URL the land worktree mirrors from. When set, used DIRECTLY
|
|
111
|
+
* (the registry-set advance driver threads the per-mirror origin URL here).
|
|
112
|
+
* When unset, the URL is resolved from `cwd` + `arbiter` via `git remote
|
|
113
|
+
* get-url` (the in-place / one-shot caller).
|
|
114
|
+
*/
|
|
115
|
+
arbiterUrl?: string;
|
|
116
|
+
/** The execution working area (`~/.dorfl` by default) `createJob` cuts under. */
|
|
117
|
+
workspacesDir: string;
|
|
118
|
+
/** Per-repo env-prep config the fresh-worktree gate runs before `verify`. */
|
|
119
|
+
prepare?: VerifyConfig;
|
|
120
|
+
/** Per-repo acceptance gate (`verify`). */
|
|
121
|
+
verify?: VerifyConfig;
|
|
122
|
+
/**
|
|
123
|
+
* `strictMergeApproval` (resolved per-repo by the sibling task
|
|
124
|
+
* `strict-merge-approval-gate`; default OFF). OFF ⇒ honour the prior answer
|
|
125
|
+
* + land on a green re-verify (the cheap default). ON ⇒ re-surface the
|
|
126
|
+
* merge-question when the merge-base moved between the surfacer's question
|
|
127
|
+
* and this apply (don't land; the apply rung folds this into a re-pause).
|
|
128
|
+
*/
|
|
129
|
+
strictMergeApproval?: boolean;
|
|
130
|
+
/** Bounded recovery-rebase retry knob (mirrors the build path). */
|
|
131
|
+
recoveryRebaseRetries?: number;
|
|
132
|
+
/** Modest livelock-spreading jitter (ms) between recovery-rebase retries. */
|
|
133
|
+
recoveryRebaseJitterMs?: number;
|
|
134
|
+
/** Cross-job land-CAS retry cap (the `mergeRetries` precedence chain). */
|
|
135
|
+
mergeRetries?: number;
|
|
136
|
+
/** Environment for child git processes. */
|
|
137
|
+
env?: NodeJS.ProcessEnv;
|
|
138
|
+
/** Sink for human-readable progress notes. */
|
|
139
|
+
note?: (message: string) => void;
|
|
140
|
+
}
|
|
141
|
+
/** The terminal verbs the dispatcher reports to the apply rung. */
|
|
142
|
+
export type MergeActionOutcome =
|
|
143
|
+
/** `answer=merge` + green re-verify ⇒ the kept commit landed on `<arbiter>/main`. */
|
|
144
|
+
'landed'
|
|
145
|
+
/** `answer=merge` + the kept tip was already on `<arbiter>/main` (idempotent re-run). */
|
|
146
|
+
| 'already-integrated'
|
|
147
|
+
/**
|
|
148
|
+
* `answer=merge` + RED re-verify on the rebased tip (or a rebase-conflict): the
|
|
149
|
+
* land was REFUSED; `performIntegration` routed the item to needs-attention
|
|
150
|
+
* through its shared seam — `main` never received the failing tree. The apply
|
|
151
|
+
* rung short-circuits (does NOT resolve the sidecar, so the open question
|
|
152
|
+
* stays surfaced for a human follow-up).
|
|
153
|
+
*/
|
|
154
|
+
| 'refused'
|
|
155
|
+
/**
|
|
156
|
+
* `answer=merge` + `strictMergeApproval` ON + the merge-base moved between
|
|
157
|
+
* the surfacer's question and this apply: the dispatcher RE-SURFACES the
|
|
158
|
+
* merge-question (the apply rung appends a fresh follow-up + re-pauses).
|
|
159
|
+
*/
|
|
160
|
+
| 'restale'
|
|
161
|
+
/** `answer=hold` ⇒ no land; the apply rung records the answer in body as usual. */
|
|
162
|
+
| 'hold'
|
|
163
|
+
/** `answer=drop` ⇒ no land; the apply rung records the answer in body as usual. */
|
|
164
|
+
| 'drop';
|
|
165
|
+
/** What the production handler returns to the apply rung. */
|
|
166
|
+
export interface MergeActionResult {
|
|
167
|
+
outcome: MergeActionOutcome;
|
|
168
|
+
/** Human-readable summary for the rung's message. */
|
|
169
|
+
message: string;
|
|
170
|
+
/**
|
|
171
|
+
* The integration-core result, when the dispatcher reached
|
|
172
|
+
* `performIntegration` (i.e. `answer=merge` + not re-staled). Carries the
|
|
173
|
+
* routing observed by the land primitive (`gate-failed`, `completed`,
|
|
174
|
+
* `already-integrated`, …), so callers can branch on it.
|
|
175
|
+
*/
|
|
176
|
+
integration?: IntegrationCoreResult;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* The injectable dispatch SEAM. Production wires {@link performMergeAction}
|
|
180
|
+
* (which checks out via `createJob` + lands via `performIntegration`); tests
|
|
181
|
+
* inject a stub to assert the apply-rung short-circuits on `refused` and falls
|
|
182
|
+
* through on `landed` / `hold` / `drop` / `restale` WITHOUT spinning up a real
|
|
183
|
+
* hub mirror.
|
|
184
|
+
*/
|
|
185
|
+
export type MergeActionHandler = (input: MergeActionInput) => Promise<MergeActionResult>;
|
|
186
|
+
/**
|
|
187
|
+
* The PRODUCTION dispatcher: an answered `kind: merge` entry's verb drives one
|
|
188
|
+
* of the four terminals (`landed` / `refused` / `restale` / `hold|drop`). For
|
|
189
|
+
* `answer=merge` it checks out the unmerged `work/<slug>` via the EXISTING
|
|
190
|
+
* `workspace.ts` per-job worktree seam ({@link createJob}, the same seam the
|
|
191
|
+
* build / recovery callers use) and invokes the LAND primitive
|
|
192
|
+
* ({@link performIntegration}) with `committedRecovery: true` +
|
|
193
|
+
* `freshWorktreeGate: true` — so the rebased tip is re-verified BEFORE it
|
|
194
|
+
* lands, the answered-merge land path NEVER integrates a clean-rebase-but-
|
|
195
|
+
* broken tree, and a refusal routes to needs-attention through the SAME
|
|
196
|
+
* shared seam (`applyNeedsAttentionTransition`) the build path uses. The job
|
|
197
|
+
* worktree is always disposed (success or failure) so the hub mirror does not
|
|
198
|
+
* accumulate stale per-job state.
|
|
199
|
+
*
|
|
200
|
+
* For `answer=hold` and `answer=drop` the dispatcher does not land — it just
|
|
201
|
+
* tells the apply rung to fall through to the normal answer-recording path.
|
|
202
|
+
* (Cancellation of the work branch on `drop` is OUT OF SCOPE; the answer is
|
|
203
|
+
* recorded and a future surfacer / human handles the artifact.)
|
|
204
|
+
*/
|
|
205
|
+
export declare function performMergeAction(input: MergeActionInput): Promise<MergeActionResult>;
|
|
206
|
+
//# sourceMappingURL=apply-merge-action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-merge-action.d.ts","sourceRoot":"","sources":["../src/apply-merge-action.ts"],"names":[],"mappings":"AAEA,OAAO,EAKN,KAAK,YAAY,EAEjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAEN,KAAK,qBAAqB,EAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,uEAAuE;AACvE,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAExD,yFAAyF;AACzF,MAAM,WAAW,mBAAmB;IACnC,kEAAkE;IAClE,IAAI,EAAE,eAAe,CAAC;IACtB,2DAA2D;IAC3D,KAAK,EAAE,YAAY,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAe1E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACxC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACV,mBAAmB,GAAG,SAAS,CAmBjC;AAED,0DAA0D;AAC1D,MAAM,WAAW,gBAAgB;IAChC,iDAAiD;IACjD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,GAAG,EAAE,MAAM,CAAC;IACZ,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,aAAa,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,mEAAmE;IACnE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,6EAA6E;IAC7E,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2CAA2C;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,mEAAmE;AACnE,MAAM,MAAM,kBAAkB;AAC7B,qFAAqF;AACnF,QAAQ;AACV,yFAAyF;GACvF,oBAAoB;AACtB;;;;;;GAMG;GACD,SAAS;AACX;;;;GAIG;GACD,SAAS;AACX,mFAAmF;GACjF,MAAM;AACR,mFAAmF;GACjF,MAAM,CAAC;AAEV,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAED;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAChC,KAAK,EAAE,gBAAgB,KACnB,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAmEhC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kBAAkB,CACvC,KAAK,EAAE,gBAAgB,GACrB,OAAO,CAAC,iBAAiB,CAAC,CAuK5B"}
|