dorfl 0.1.1 → 0.2.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 +3 -3
- package/dist/advance-ci-template.js +1 -1
- package/dist/advance-ci-template.js.map +1 -1
- package/dist/advance-classify.d.ts +5 -5
- package/dist/advance-classify.d.ts.map +1 -1
- package/dist/advance-classify.js +4 -4
- package/dist/advance-drivers.d.ts +8 -8
- package/dist/advance-drivers.d.ts.map +1 -1
- package/dist/advance-drivers.js +20 -8
- package/dist/advance-drivers.js.map +1 -1
- package/dist/advance-isolated.d.ts +3 -3
- package/dist/advance-isolated.d.ts.map +1 -1
- package/dist/advance-isolated.js +1 -1
- package/dist/advance-lifecycle-template.d.ts +2 -2
- package/dist/advance-lifecycle-template.d.ts.map +1 -1
- package/dist/advance-lifecycle-template.js +85 -13
- package/dist/advance-lifecycle-template.js.map +1 -1
- package/dist/advance-loop-driver.d.ts +3 -3
- package/dist/advance-loop-driver.d.ts.map +1 -1
- package/dist/advance-loop-driver.js +1 -1
- package/dist/advance-treeless-publish.d.ts +24 -1
- package/dist/advance-treeless-publish.d.ts.map +1 -1
- package/dist/advance-treeless-publish.js +41 -0
- package/dist/advance-treeless-publish.js.map +1 -1
- package/dist/advance.d.ts +69 -17
- package/dist/advance.d.ts.map +1 -1
- package/dist/advance.js +409 -102
- package/dist/advance.js.map +1 -1
- package/dist/advancing-lock.d.ts +31 -3
- package/dist/advancing-lock.d.ts.map +1 -1
- package/dist/advancing-lock.js +55 -5
- package/dist/advancing-lock.js.map +1 -1
- package/dist/agent-launch.d.ts +12 -0
- package/dist/agent-launch.d.ts.map +1 -1
- package/dist/agent-launch.js +22 -12
- package/dist/agent-launch.js.map +1 -1
- package/dist/agent-stop.d.ts +40 -2
- package/dist/agent-stop.d.ts.map +1 -1
- package/dist/agent-stop.js +30 -2
- package/dist/agent-stop.js.map +1 -1
- package/dist/apply-decide.d.ts +19 -5
- package/dist/apply-decide.d.ts.map +1 -1
- package/dist/apply-decide.js +38 -9
- package/dist/apply-decide.js.map +1 -1
- package/dist/apply-merge-action.d.ts +20 -8
- package/dist/apply-merge-action.d.ts.map +1 -1
- package/dist/apply-merge-action.js +44 -9
- package/dist/apply-merge-action.js.map +1 -1
- package/dist/apply-persist.d.ts +62 -31
- package/dist/apply-persist.d.ts.map +1 -1
- package/dist/apply-persist.js +173 -44
- package/dist/apply-persist.js.map +1 -1
- package/dist/apply-stuck-action.d.ts +151 -0
- package/dist/apply-stuck-action.d.ts.map +1 -0
- package/dist/apply-stuck-action.js +125 -0
- package/dist/apply-stuck-action.js.map +1 -0
- package/dist/brand.d.ts +12 -1
- package/dist/brand.d.ts.map +1 -1
- package/dist/brand.js +2 -1
- package/dist/brand.js.map +1 -1
- package/dist/buildable-body.d.ts +14 -14
- package/dist/buildable-body.js +9 -9
- package/dist/claim-cas.d.ts +3 -3
- package/dist/claim-cas.js +1 -1
- package/dist/claim-cas.js.map +1 -1
- package/dist/cli-spinner.d.ts +1 -1
- package/dist/cli-spinner.js +1 -1
- package/dist/cli.d.ts +10 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +385 -128
- package/dist/cli.js.map +1 -1
- package/dist/close-job-template.d.ts +3 -3
- package/dist/close-job-template.js +9 -9
- package/dist/close-job.d.ts +8 -8
- package/dist/close-job.js +25 -25
- package/dist/close-job.js.map +1 -1
- package/dist/complete.d.ts +9 -6
- package/dist/complete.d.ts.map +1 -1
- package/dist/complete.js +99 -45
- package/dist/complete.js.map +1 -1
- package/dist/concurrency.d.ts +1 -1
- package/dist/concurrency.js +1 -1
- package/dist/config.d.ts +86 -40
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +61 -9
- package/dist/config.js.map +1 -1
- package/dist/continue-branch.d.ts +1 -1
- package/dist/continue-branch.d.ts.map +1 -1
- package/dist/continue-branch.js +23 -1
- package/dist/continue-branch.js.map +1 -1
- package/dist/cwd-section.js +1 -1
- package/dist/cwd-section.js.map +1 -1
- package/dist/decision-engine.d.ts +39 -11
- package/dist/decision-engine.d.ts.map +1 -1
- package/dist/decision-engine.js +10 -6
- package/dist/decision-engine.js.map +1 -1
- package/dist/do-autopick.d.ts +6 -6
- package/dist/do-autopick.d.ts.map +1 -1
- package/dist/do-autopick.js +16 -6
- package/dist/do-autopick.js.map +1 -1
- package/dist/do-config.d.ts +4 -4
- package/dist/do-config.js +3 -3
- package/dist/do-config.js.map +1 -1
- package/dist/do-remote-auto.d.ts +2 -2
- package/dist/do-remote-auto.js +1 -1
- package/dist/do.d.ts +74 -81
- package/dist/do.d.ts.map +1 -1
- package/dist/do.js +439 -50
- package/dist/do.js.map +1 -1
- package/dist/drop-source.d.ts +2 -2
- package/dist/env-config.d.ts.map +1 -1
- package/dist/env-config.js +19 -11
- package/dist/env-config.js.map +1 -1
- package/dist/failure-cause.d.ts +3 -2
- package/dist/failure-cause.d.ts.map +1 -1
- package/dist/failure-cause.js +28 -1
- package/dist/failure-cause.js.map +1 -1
- package/dist/format.d.ts +6 -6
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +13 -30
- package/dist/format.js.map +1 -1
- package/dist/frontmatter.d.ts +28 -15
- package/dist/frontmatter.d.ts.map +1 -1
- package/dist/frontmatter.js +38 -24
- package/dist/frontmatter.js.map +1 -1
- package/dist/gc.d.ts +65 -6
- package/dist/gc.d.ts.map +1 -1
- package/dist/gc.js +126 -9
- package/dist/gc.js.map +1 -1
- package/dist/github.d.ts +14 -0
- package/dist/github.d.ts.map +1 -1
- package/dist/github.js +73 -0
- package/dist/github.js.map +1 -1
- package/dist/harness.d.ts +25 -0
- package/dist/harness.d.ts.map +1 -1
- package/dist/harness.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/install-ci-branch-protection.d.ts +133 -39
- package/dist/install-ci-branch-protection.d.ts.map +1 -1
- package/dist/install-ci-branch-protection.js +191 -49
- package/dist/install-ci-branch-protection.js.map +1 -1
- package/dist/install-ci-capabilities/advance-lifecycle.d.ts +1 -1
- package/dist/install-ci-capabilities/advance-lifecycle.js +1 -1
- package/dist/install-ci-capabilities/close-job.d.ts +1 -1
- package/dist/install-ci-capabilities/close-job.js +1 -1
- package/dist/install-ci-capabilities/example-noop.d.ts +1 -1
- package/dist/install-ci-capabilities/example-noop.js +1 -1
- package/dist/install-ci-capabilities/intake.d.ts +2 -2
- package/dist/install-ci-capabilities/intake.js +2 -2
- package/dist/install-ci-capabilities/verify.d.ts +1 -1
- package/dist/install-ci-capabilities/verify.js +1 -1
- package/dist/install-ci-core.d.ts +24 -4
- package/dist/install-ci-core.d.ts.map +1 -1
- package/dist/install-ci-core.js +12 -5
- package/dist/install-ci-core.js.map +1 -1
- package/dist/install-ci-github.d.ts +33 -1
- package/dist/install-ci-github.d.ts.map +1 -1
- package/dist/install-ci-github.js +74 -1
- package/dist/install-ci-github.js.map +1 -1
- package/dist/install-ci.d.ts +1 -1
- package/dist/install-ci.js +4 -4
- package/dist/install-ci.js.map +1 -1
- package/dist/install-skills.d.ts +123 -0
- package/dist/install-skills.d.ts.map +1 -0
- package/dist/install-skills.js +100 -0
- package/dist/install-skills.js.map +1 -0
- package/dist/intake-event.d.ts +6 -6
- package/dist/intake-event.js +6 -6
- package/dist/intake-marker.d.ts +3 -3
- package/dist/intake-marker.d.ts.map +1 -1
- package/dist/intake-triage.d.ts +1 -1
- package/dist/intake-triage.js +2 -2
- package/dist/intake-trigger-template.d.ts +8 -8
- package/dist/intake-trigger-template.d.ts.map +1 -1
- package/dist/intake-trigger-template.js +17 -17
- package/dist/intake-trigger-template.js.map +1 -1
- package/dist/intake.d.ts +65 -52
- package/dist/intake.d.ts.map +1 -1
- package/dist/intake.js +92 -76
- package/dist/intake.js.map +1 -1
- package/dist/integration-core.d.ts +27 -24
- package/dist/integration-core.d.ts.map +1 -1
- package/dist/integration-core.js +191 -77
- package/dist/integration-core.js.map +1 -1
- package/dist/integrator.d.ts +1 -1
- package/dist/integrator.d.ts.map +1 -1
- package/dist/integrator.js +19 -3
- package/dist/integrator.js.map +1 -1
- package/dist/isolation.d.ts +4 -4
- package/dist/isolation.d.ts.map +1 -1
- package/dist/isolation.js +9 -0
- package/dist/isolation.js.map +1 -1
- package/dist/issue-provider.d.ts +4 -4
- package/dist/issue-provider.js +1 -1
- package/dist/item-lock.d.ts +216 -149
- package/dist/item-lock.d.ts.map +1 -1
- package/dist/item-lock.js +345 -270
- package/dist/item-lock.js.map +1 -1
- package/dist/item-path.d.ts +2 -2
- package/dist/item-path.js +2 -2
- package/dist/ledger-lint.d.ts +9 -9
- package/dist/ledger-lint.js +9 -9
- package/dist/ledger-read.d.ts +57 -57
- package/dist/ledger-read.d.ts.map +1 -1
- package/dist/ledger-read.js +24 -24
- package/dist/ledger-read.js.map +1 -1
- package/dist/ledger-write.d.ts +33 -28
- package/dist/ledger-write.d.ts.map +1 -1
- package/dist/ledger-write.js +100 -122
- package/dist/ledger-write.js.map +1 -1
- package/dist/lifecycle-gather.d.ts +18 -1
- package/dist/lifecycle-gather.d.ts.map +1 -1
- package/dist/lifecycle-gather.js +23 -17
- package/dist/lifecycle-gather.js.map +1 -1
- package/dist/lifecycle-pools.d.ts +44 -7
- package/dist/lifecycle-pools.d.ts.map +1 -1
- package/dist/lifecycle-pools.js +27 -7
- package/dist/lifecycle-pools.js.map +1 -1
- package/dist/merge-question-surfacer.d.ts +18 -4
- package/dist/merge-question-surfacer.d.ts.map +1 -1
- package/dist/merge-question-surfacer.js +20 -5
- package/dist/merge-question-surfacer.js.map +1 -1
- package/dist/migrate-stuck-locks.d.ts +129 -0
- package/dist/migrate-stuck-locks.d.ts.map +1 -0
- package/dist/migrate-stuck-locks.js +355 -0
- package/dist/migrate-stuck-locks.js.map +1 -0
- package/dist/mint-adr.js +4 -4
- package/dist/mirror-pool-scan.d.ts +2 -2
- package/dist/mirror-pool-scan.js +3 -3
- package/dist/mirror-pool-scan.js.map +1 -1
- package/dist/needs-attention.d.ts +304 -27
- package/dist/needs-attention.d.ts.map +1 -1
- package/dist/needs-attention.js +542 -67
- package/dist/needs-attention.js.map +1 -1
- package/dist/orphan-sidecar.d.ts +10 -6
- package/dist/orphan-sidecar.d.ts.map +1 -1
- package/dist/orphan-sidecar.js +35 -2
- package/dist/orphan-sidecar.js.map +1 -1
- package/dist/pi-harness.d.ts +16 -0
- package/dist/pi-harness.d.ts.map +1 -1
- package/dist/pi-harness.js +82 -2
- package/dist/pi-harness.js.map +1 -1
- package/dist/placement.d.ts +8 -8
- package/dist/placement.js +3 -3
- package/dist/prd-to-spec.d.ts.map +1 -1
- package/dist/prd-to-spec.js +9 -5
- package/dist/prd-to-spec.js.map +1 -1
- package/dist/prompt.d.ts +16 -19
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +17 -19
- package/dist/prompt.js.map +1 -1
- package/dist/protocol/CLAIM-PROTOCOL.md +17 -10
- package/dist/protocol/REVIEW-PROTOCOL.md +4 -1
- package/dist/protocol/SURFACE-PROTOCOL.md +16 -2
- package/dist/protocol/TASKING-PROTOCOL.md +3 -1
- package/dist/protocol/WORK-CONTRACT.md +22 -18
- package/dist/protocol/task-template.md +1 -1
- package/dist/readiness.d.ts +1 -1
- package/dist/reap-branches.d.ts +12 -9
- package/dist/reap-branches.d.ts.map +1 -1
- package/dist/reap-branches.js +25 -7
- package/dist/reap-branches.js.map +1 -1
- package/dist/recover-isolated.d.ts +12 -0
- package/dist/recover-isolated.d.ts.map +1 -1
- package/dist/recover-isolated.js +6 -1
- package/dist/recover-isolated.js.map +1 -1
- package/dist/repo-config.d.ts +23 -2
- package/dist/repo-config.d.ts.map +1 -1
- package/dist/repo-config.js +64 -18
- package/dist/repo-config.js.map +1 -1
- package/dist/repo-mirror.d.ts.map +1 -1
- package/dist/repo-mirror.js +18 -2
- package/dist/repo-mirror.js.map +1 -1
- package/dist/review-gate.d.ts +3 -3
- package/dist/review-gate.d.ts.map +1 -1
- package/dist/review-gate.js +11 -10
- package/dist/review-gate.js.map +1 -1
- package/dist/review-verdict.d.ts +2 -2
- package/dist/review-verdict.d.ts.map +1 -1
- package/dist/review-verdict.js +2 -2
- package/dist/review-verdict.js.map +1 -1
- package/dist/run.d.ts +2 -2
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +58 -23
- package/dist/run.js.map +1 -1
- package/dist/scan.d.ts +26 -17
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +29 -15
- package/dist/scan.js.map +1 -1
- package/dist/select-order.d.ts +1 -1
- package/dist/select-priority.d.ts +14 -14
- package/dist/select-priority.d.ts.map +1 -1
- package/dist/select-priority.js +5 -5
- package/dist/select-priority.js.map +1 -1
- package/dist/sidecar-apply.js +1 -1
- package/dist/sidecar-apply.js.map +1 -1
- package/dist/sidecar.d.ts +47 -12
- package/dist/sidecar.d.ts.map +1 -1
- package/dist/sidecar.js +84 -4
- package/dist/sidecar.js.map +1 -1
- package/dist/skills/answer-questions/SKILL.md +89 -0
- package/dist/skills/capture-signal/SKILL.md +52 -0
- package/dist/skills/convert-from-prd-to-spec/SKILL.md +90 -0
- package/dist/skills/drive-tasks/SKILL.md +218 -0
- package/dist/skills/from-idea/SKILL.md +83 -0
- package/dist/skills/merge-prs/SKILL.md +70 -0
- package/dist/skills/orchestrate/SKILL.md +101 -0
- package/dist/skills/promote/SKILL.md +35 -0
- package/dist/skills/review/SKILL.md +16 -0
- package/dist/skills/setup/SKILL.md +258 -0
- package/dist/skills/setup/protocol/ADR-FORMAT.md +47 -0
- package/dist/skills/setup/protocol/CLAIM-PROTOCOL.md +224 -0
- package/dist/skills/setup/protocol/REVIEW-PROTOCOL.md +122 -0
- package/dist/skills/setup/protocol/SURFACE-PROTOCOL.md +135 -0
- package/dist/skills/setup/protocol/TASKING-PROTOCOL.md +124 -0
- package/dist/skills/setup/protocol/WORK-CONTRACT.md +280 -0
- package/dist/skills/setup/protocol/spec-template.md +71 -0
- package/dist/skills/setup/protocol/task-template.md +65 -0
- package/dist/skills/surface-questions/SKILL.md +16 -0
- package/dist/skills/to-spec/SKILL.md +34 -0
- package/dist/skills/to-task/SKILL.md +19 -0
- package/dist/skills/triage-observations/SKILL.md +78 -0
- package/dist/skills/work/SKILL.md +51 -0
- package/dist/slug-namespace.d.ts +6 -6
- package/dist/slug-namespace.js +8 -8
- package/dist/slug-namespace.js.map +1 -1
- package/dist/spec-complete.d.ts.map +1 -1
- package/dist/spec-complete.js +4 -5
- package/dist/spec-complete.js.map +1 -1
- package/dist/start.d.ts +1 -1
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +54 -60
- package/dist/start.js.map +1 -1
- package/dist/status.d.ts +3 -3
- package/dist/status.js +4 -4
- package/dist/status.js.map +1 -1
- package/dist/surface-gate.d.ts +2 -2
- package/dist/surface-gate.d.ts.map +1 -1
- package/dist/surface-gate.js +10 -3
- package/dist/surface-gate.js.map +1 -1
- package/dist/surface-persist.d.ts +2 -2
- package/dist/surface-persist.d.ts.map +1 -1
- package/dist/surface-persist.js +1 -1
- package/dist/surface-persist.js.map +1 -1
- package/dist/tasker-review-loop.d.ts +11 -10
- package/dist/tasker-review-loop.d.ts.map +1 -1
- package/dist/tasker-review-loop.js +8 -8
- package/dist/tasker-review-loop.js.map +1 -1
- package/dist/tasking-eligibility.d.ts +21 -21
- package/dist/tasking-eligibility.d.ts.map +1 -1
- package/dist/tasking-eligibility.js +10 -10
- package/dist/tasking-lock.d.ts +10 -10
- package/dist/tasking-lock.d.ts.map +1 -1
- package/dist/tasking-lock.js +69 -49
- package/dist/tasking-lock.js.map +1 -1
- package/dist/tasking.d.ts +73 -39
- package/dist/tasking.d.ts.map +1 -1
- package/dist/tasking.js +309 -95
- package/dist/tasking.js.map +1 -1
- package/dist/triage-gate.d.ts +1 -1
- package/dist/triage-persist.d.ts +15 -11
- package/dist/triage-persist.d.ts.map +1 -1
- package/dist/triage-persist.js +48 -18
- package/dist/triage-persist.js.map +1 -1
- package/dist/vendor/incur/agents.d.ts +58 -0
- package/dist/vendor/incur/agents.d.ts.map +1 -0
- package/dist/vendor/incur/agents.js +343 -0
- package/dist/vendor/incur/agents.js.map +1 -0
- package/dist/verify-workflow-template.d.ts +1 -1
- package/dist/verify-workflow-template.js +3 -3
- package/dist/watch-session.d.ts +11 -3
- package/dist/watch-session.d.ts.map +1 -1
- package/dist/watch-session.js +94 -7
- package/dist/watch-session.js.map +1 -1
- package/dist/work-layout.d.ts +15 -9
- package/dist/work-layout.d.ts.map +1 -1
- package/dist/work-layout.js +14 -9
- package/dist/work-layout.js.map +1 -1
- package/dist/workspace.d.ts +2 -2
- package/package.json +2 -2
- package/src/advance-ci-template.ts +4 -4
- package/src/advance-classify.ts +5 -5
- package/src/advance-drivers.ts +26 -13
- package/src/advance-isolated.ts +3 -3
- package/src/advance-lifecycle-template.ts +98 -13
- package/src/advance-loop-driver.ts +3 -3
- package/src/advance-treeless-publish.ts +46 -1
- package/src/advance.ts +495 -115
- package/src/advancing-lock.ts +102 -7
- package/src/agent-launch.ts +37 -12
- package/src/agent-stop.ts +60 -2
- package/src/apply-decide.ts +38 -9
- package/src/apply-merge-action.ts +49 -11
- package/src/apply-persist.ts +236 -62
- package/src/apply-stuck-action.ts +260 -0
- package/src/brand.ts +14 -2
- package/src/buildable-body.ts +14 -14
- package/src/claim-cas.ts +4 -4
- package/src/cli-spinner.ts +1 -1
- package/src/cli.ts +472 -141
- package/src/close-job-template.ts +9 -9
- package/src/close-job.ts +26 -26
- package/src/complete.ts +121 -63
- package/src/concurrency.ts +1 -1
- package/src/config.ts +143 -49
- package/src/continue-branch.ts +23 -1
- package/src/cwd-section.ts +1 -1
- package/src/decision-engine.ts +57 -19
- package/src/do-autopick.ts +21 -10
- package/src/do-config.ts +7 -7
- package/src/do-remote-auto.ts +2 -2
- package/src/do.ts +558 -85
- package/src/drop-source.ts +2 -2
- package/src/env-config.ts +19 -11
- package/src/failure-cause.ts +30 -1
- package/src/format.ts +13 -33
- package/src/frontmatter.ts +55 -35
- package/src/gc.ts +172 -9
- package/src/github.ts +78 -0
- package/src/harness.ts +25 -0
- package/src/index.ts +10 -0
- package/src/install-ci-branch-protection.ts +283 -58
- package/src/install-ci-capabilities/advance-lifecycle.ts +1 -1
- package/src/install-ci-capabilities/close-job.ts +1 -1
- package/src/install-ci-capabilities/example-noop.ts +1 -1
- package/src/install-ci-capabilities/intake.ts +2 -2
- package/src/install-ci-capabilities/verify.ts +1 -1
- package/src/install-ci-core.ts +34 -7
- package/src/install-ci-github.ts +87 -1
- package/src/install-ci.ts +4 -4
- package/src/install-skills.ts +166 -0
- package/src/intake-event.ts +6 -6
- package/src/intake-marker.ts +3 -3
- package/src/intake-triage.ts +2 -2
- package/src/intake-trigger-template.ts +18 -18
- package/src/intake.ts +138 -103
- package/src/integration-core.ts +234 -100
- package/src/integrator.ts +22 -9
- package/src/isolation.ts +13 -4
- package/src/issue-provider.ts +4 -4
- package/src/item-lock.ts +505 -361
- package/src/item-path.ts +2 -2
- package/src/ledger-lint.ts +9 -9
- package/src/ledger-read.ts +81 -81
- package/src/ledger-write.ts +137 -152
- package/src/lifecycle-gather.ts +45 -22
- package/src/lifecycle-pools.ts +71 -13
- package/src/merge-question-surfacer.ts +32 -8
- package/src/migrate-stuck-locks.ts +451 -0
- package/src/mint-adr.ts +4 -4
- package/src/mirror-pool-scan.ts +5 -5
- package/src/needs-attention.ts +877 -104
- package/src/orphan-sidecar.ts +49 -8
- package/src/pi-harness.ts +82 -2
- package/src/placement.ts +8 -8
- package/src/prd-to-spec.ts +13 -5
- package/src/prompt.ts +20 -25
- package/src/readiness.ts +1 -1
- package/src/reap-branches.ts +38 -14
- package/src/recover-isolated.ts +18 -1
- package/src/repo-config.ts +66 -17
- package/src/repo-mirror.ts +23 -1
- package/src/review-gate.ts +12 -11
- package/src/review-verdict.ts +3 -3
- package/src/run.ts +69 -23
- package/src/scan.ts +36 -22
- package/src/select-order.ts +1 -1
- package/src/select-priority.ts +15 -15
- package/src/sidecar-apply.ts +1 -1
- package/src/sidecar.ts +141 -14
- package/src/slug-namespace.ts +10 -10
- package/src/spec-complete.ts +4 -5
- package/src/start.ts +57 -63
- package/src/status.ts +7 -7
- package/src/surface-gate.ts +12 -5
- package/src/surface-persist.ts +3 -3
- package/src/tasker-review-loop.ts +18 -17
- package/src/tasking-eligibility.ts +21 -21
- package/src/tasking-lock.ts +75 -60
- package/src/tasking.ts +381 -135
- package/src/triage-gate.ts +1 -1
- package/src/triage-persist.ts +71 -27
- package/src/vendor/incur/LICENSE +21 -0
- package/src/vendor/incur/README.md +19 -0
- package/src/vendor/incur/agents.ts +392 -0
- package/src/verify-workflow-template.ts +3 -3
- package/src/watch-session.ts +102 -7
- package/src/work-layout.ts +14 -9
- package/src/workspace.ts +2 -2
package/src/watch-session.ts
CHANGED
|
@@ -13,6 +13,16 @@ import {open, type FileHandle} from 'node:fs/promises';
|
|
|
13
13
|
* `--mode json` STREAM `ar-run.sh` piped. The tailer is pointed at that EXACT
|
|
14
14
|
* path (no newest-by-mtime dir guessing), so the stale-sibling race is gone.
|
|
15
15
|
*
|
|
16
|
+
* Studied (task `pi-harness-polish`, finding
|
|
17
|
+
* `work/notes/findings/pi-harness-channels.md`, pinned against pi 0.73.1 +
|
|
18
|
+
* session format v3): tailing the session file is deliberately the CHOSEN
|
|
19
|
+
* channel for `--watch`, not just what was easiest to reuse. `--mode json`'s
|
|
20
|
+
* STDOUT event vocabulary would be lower-latency but it is unversioned, would
|
|
21
|
+
* fork a second parser away from pi-remote's `session-pool.ts` reference walk
|
|
22
|
+
* this classifier mirrors, and the vocabulary-drift risk that already bit
|
|
23
|
+
* `do --watch` once applies MORE to it than to the versioned+migrated session
|
|
24
|
+
* file. Revisit only if pi's session format changes.
|
|
25
|
+
*
|
|
16
26
|
* A session-log record is `{"type":"message", "message":{role, content[]}}` (or a
|
|
17
27
|
* `session`/`model_change`/`thinking_level_change` preamble record). The earlier
|
|
18
28
|
* classifier matched the STREAM vocabulary (`tool_start`/`message_end`/`agent_end`),
|
|
@@ -21,8 +31,10 @@ import {open, type FileHandle} from 'node:fs/promises';
|
|
|
21
31
|
* surfaces the same high-signal level `ar-run.sh --watch` gave, read off the
|
|
22
32
|
* SESSION-LOG shape:
|
|
23
33
|
*
|
|
24
|
-
* - an `assistant` `message` → its `content[]` `text` parts, then
|
|
25
|
-
* (cyan) per `content[]` `toolCall` part
|
|
34
|
+
* - an `assistant` `message` → its `content[]` `text` parts, then
|
|
35
|
+
* `▶ <name> <detail>` (cyan) per `content[]` `toolCall` part, where
|
|
36
|
+
* `<detail>` is the high-signal argument for that tool (a `read`'s path, a
|
|
37
|
+
* `bash`'s command, …), truncated to 64 chars with a trailing `…`;
|
|
26
38
|
* - `✓ agent finished` (green) on PROCESS EXIT — the session log has no
|
|
27
39
|
* `agent_end` event, so the tailer emits it once on `stop()`;
|
|
28
40
|
* - everything else (`session`/`model_change`/user messages/tool results/…) →
|
|
@@ -50,6 +62,77 @@ function paint(text: string, color: boolean, code: string): string {
|
|
|
50
62
|
return color ? `${code}${text}${RESET}` : text;
|
|
51
63
|
}
|
|
52
64
|
|
|
65
|
+
/**
|
|
66
|
+
* The max width of a tool-call DETAIL string (the `read <path>` / `bash <cmd>`
|
|
67
|
+
* argument summary appended after the tool name). A longer detail is truncated
|
|
68
|
+
* to this many characters with a trailing `…`, so a giant `bash` heredoc or a
|
|
69
|
+
* long path never floods the live view with one enormous line.
|
|
70
|
+
*/
|
|
71
|
+
const MAX_DETAIL_LENGTH = 64;
|
|
72
|
+
|
|
73
|
+
/** Truncate `text` to {@link MAX_DETAIL_LENGTH} chars, appending `…` when cut. */
|
|
74
|
+
function truncateDetail(text: string): string {
|
|
75
|
+
// Collapse any embedded newlines/tabs to single spaces first: a multi-line
|
|
76
|
+
// `bash` command must stay ONE line in the tail view.
|
|
77
|
+
const oneLine = text.replace(/\s+/g, ' ').trim();
|
|
78
|
+
if (oneLine.length <= MAX_DETAIL_LENGTH) {
|
|
79
|
+
return oneLine;
|
|
80
|
+
}
|
|
81
|
+
return `${oneLine.slice(0, MAX_DETAIL_LENGTH)}…`;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The FIRST non-empty string among `keys` in a tool-call's arguments object, or
|
|
86
|
+
* `undefined` when the args are absent / none of the keys carry a string. The
|
|
87
|
+
* args live under `arguments` (pi's canonical key) OR `args` (the variant seen
|
|
88
|
+
* in some session records), mirroring the `name || toolName` defensiveness used
|
|
89
|
+
* for the tool name itself.
|
|
90
|
+
*/
|
|
91
|
+
function firstArgString(
|
|
92
|
+
part: Record<string, unknown>,
|
|
93
|
+
keys: readonly string[],
|
|
94
|
+
): string | undefined {
|
|
95
|
+
const rawArgs =
|
|
96
|
+
(typeof part.arguments === 'object' && part.arguments) ||
|
|
97
|
+
(typeof part.args === 'object' && part.args) ||
|
|
98
|
+
undefined;
|
|
99
|
+
if (!rawArgs || rawArgs === null) {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
const args = rawArgs as Record<string, unknown>;
|
|
103
|
+
for (const key of keys) {
|
|
104
|
+
const value = args[key];
|
|
105
|
+
if (typeof value === 'string' && value !== '') {
|
|
106
|
+
return value;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* The high-signal ARGUMENT to show after a tool name, chosen per tool so the
|
|
114
|
+
* `▶ <name>` marker reads like the agent's actual action (`▶ read work/x.md`,
|
|
115
|
+
* `▶ bash pnpm -r build`). The mapping mirrors this harness's own tool set
|
|
116
|
+
* (read/edit/write/grep/find/ls take a `path`; bash a `command`; grep a
|
|
117
|
+
* `pattern`; find/ls a `pattern`/`path`); any unmapped tool falls back to a
|
|
118
|
+
* generic `path`/`command`/`pattern`/`query` probe so a new tool still shows
|
|
119
|
+
* *something* useful. Returns `''` when no informative arg is present.
|
|
120
|
+
*/
|
|
121
|
+
function toolCallDetail(name: string, part: Record<string, unknown>): string {
|
|
122
|
+
const byTool: Record<string, readonly string[]> = {
|
|
123
|
+
read: ['path'],
|
|
124
|
+
edit: ['path'],
|
|
125
|
+
write: ['path'],
|
|
126
|
+
ls: ['path'],
|
|
127
|
+
find: ['pattern', 'path'],
|
|
128
|
+
grep: ['pattern', 'path'],
|
|
129
|
+
bash: ['command'],
|
|
130
|
+
};
|
|
131
|
+
const keys = byTool[name] ?? ['path', 'command', 'pattern', 'query', 'file'];
|
|
132
|
+
const detail = firstArgString(part, keys);
|
|
133
|
+
return detail === undefined ? '' : truncateDetail(detail);
|
|
134
|
+
}
|
|
135
|
+
|
|
53
136
|
/**
|
|
54
137
|
* A structural view of the pi SESSION-LOG records we classify. It mirrors the
|
|
55
138
|
* `@earendil-works/pi-coding-agent` `SessionEntry` / `SessionMessageEntry`
|
|
@@ -94,9 +177,10 @@ export function boundaryLine(label: string, color: boolean): string {
|
|
|
94
177
|
* - a `{type:"message", message:{role:"assistant", content}}` record → for each
|
|
95
178
|
* `content[]` part: a `text` part yields its text (parts concatenated into
|
|
96
179
|
* ONE line, like the old `jq` `.content[]` select); a `toolCall` part yields
|
|
97
|
-
* `▶ <name>` (cyan; `name` OR `toolName`, defaulting to `tool
|
|
98
|
-
*
|
|
99
|
-
*
|
|
180
|
+
* `▶ <name> <detail>` (cyan; `name` OR `toolName`, defaulting to `tool`;
|
|
181
|
+
* `<detail>` is the per-tool argument summary, truncated to 64 chars with a
|
|
182
|
+
* `…`); a `thinking` part (and anything else) is skipped. A plain-string
|
|
183
|
+
* `content` yields one text line.
|
|
100
184
|
* - everything else (`session`/`model_change`/`thinking_level_change`, user
|
|
101
185
|
* messages, tool results, blank/malformed lines) → `[]` (skipped).
|
|
102
186
|
*
|
|
@@ -138,7 +222,9 @@ export function formatWatchEvent(line: string, color: boolean): string[] {
|
|
|
138
222
|
* pi-remote's `session-pool.ts` reference parser. The `text` parts are
|
|
139
223
|
* concatenated into a SINGLE leading line (so a multi-part assistant turn reads
|
|
140
224
|
* as one sentence, as `ar-run.sh --watch` showed it); each `toolCall` part adds a
|
|
141
|
-
* `▶ <name>` line after it
|
|
225
|
+
* `▶ <name> <detail>` line after it (`<detail>` = the tool's high-signal
|
|
226
|
+
* argument, truncated to 64 chars). A plain-string content yields the single
|
|
227
|
+
* text line.
|
|
142
228
|
* `thinking` parts and any other block type are skipped.
|
|
143
229
|
*/
|
|
144
230
|
function assistantLines(content: unknown, color: boolean): string[] {
|
|
@@ -160,7 +246,9 @@ function assistantLines(content: unknown, color: boolean): string[] {
|
|
|
160
246
|
(typeof p.name === 'string' && p.name !== '' && p.name) ||
|
|
161
247
|
(typeof p.toolName === 'string' && p.toolName !== '' && p.toolName) ||
|
|
162
248
|
'tool';
|
|
163
|
-
|
|
249
|
+
const detail = toolCallDetail(name, p);
|
|
250
|
+
const label = detail === '' ? name : `${name} ${detail}`;
|
|
251
|
+
lines.push(paint(`▶ ${label}`, color, CYAN));
|
|
164
252
|
}
|
|
165
253
|
// `text` is collected by assistantContentText; `thinking` and any other
|
|
166
254
|
// block type are skipped.
|
|
@@ -203,6 +291,13 @@ function assistantContentText(content: unknown): string {
|
|
|
203
291
|
* message:{role:"assistant", content[]}}` records, takes the LAST one carrying
|
|
204
292
|
* non-empty `text`, and returns its concatenated text.
|
|
205
293
|
*
|
|
294
|
+
* Kept as a PURE `string → string | undefined` function on purpose: the pi
|
|
295
|
+
* adapter reads the session file and passes the JSONL text in, but a future
|
|
296
|
+
* stream/HTTP-shaped harness (opencode-style) can accumulate its own event
|
|
297
|
+
* stream into the same JSONL-shaped text and reuse this reader unchanged — the
|
|
298
|
+
* file shape does NOT leak through the `LaunchResult.output` seam (Option C).
|
|
299
|
+
* See `work/notes/findings/pi-harness-channels.md` (task `pi-harness-polish`).
|
|
300
|
+
*
|
|
206
301
|
* Returns `undefined` when the log has no assistant text at all — an absent log,
|
|
207
302
|
* a malformed/short log, or a run whose only assistant turn was tool-calls (no
|
|
208
303
|
* `text` part). A tool-only assistant turn is NOT a final answer, so a LATER
|
package/src/work-layout.ts
CHANGED
|
@@ -5,7 +5,7 @@ import {join} from 'node:path';
|
|
|
5
5
|
* folder-name union/array, the item-scan predicate, and the prefix-task helpers
|
|
6
6
|
* used across `src/`.
|
|
7
7
|
*
|
|
8
|
-
* This is Phase 0 of the `folder-taxonomy-reorg-and-rename`
|
|
8
|
+
* This is Phase 0 of the `folder-taxonomy-reorg-and-rename` spec — the de-risking
|
|
9
9
|
* checkpoint. EVERY raw work-path literal (`join(cwd, 'work', ...)`, `'work/<folder>'`,
|
|
10
10
|
* `'work/<folder>/'.length` prefix-tasks) and EVERY folder-name union/array that
|
|
11
11
|
* used to be scattered across ~70 files now routes through here. The NAMES are
|
|
@@ -16,7 +16,7 @@ import {join} from 'node:path';
|
|
|
16
16
|
* {@link WORK_FOLDER_NAME} (and `git mv` the on-disk folders) and NOTHING ELSE.
|
|
17
17
|
* Call sites reference folders by their SYMBOLIC key (`'tasks-ready'`,
|
|
18
18
|
* `'specs-ready'`, …), never by a raw string, so a folder-VALUE flip never
|
|
19
|
-
* re-touches a single call site (a KEY rename, e.g. the
|
|
19
|
+
* re-touches a single call site (a KEY rename, e.g. the spec→spec cutover below,
|
|
20
20
|
* is a mechanical relabel of the key literal at each site — behaviour-preserving).
|
|
21
21
|
*
|
|
22
22
|
* Domain note (crown-jewel invariant): a `work/` tree is a set of governance
|
|
@@ -65,17 +65,19 @@ export const WORK_ROOT = 'work' as const;
|
|
|
65
65
|
* and `needs-attention` (both are really lock-ref state, NOT durable folders;
|
|
66
66
|
* routed here only so no reader hand-writes the literal).
|
|
67
67
|
*
|
|
68
|
-
* NOTE on the
|
|
68
|
+
* NOTE on the spec→spec vocabulary cutover
|
|
69
69
|
* (`rename-spec-work-layout-and-folders`, migrate-batch 1 of
|
|
70
70
|
* `prd-to-spec-vocabulary-cutover-and-migration-command`): the spec-regime KEYS
|
|
71
71
|
* below now read in the `spec` vocabulary (`specs-proposed`/`specs-ready`/
|
|
72
72
|
* `specs-tasked`/`specs-dropped`) AND their VALUES flip to `work/specs/*` in
|
|
73
|
-
* lockstep with the on-disk `git mv work/
|
|
73
|
+
* lockstep with the on-disk `git mv work/specs/* → work/specs/*`. Unlike the earlier
|
|
74
74
|
* key-only relabel, this batch moves the folders too, so the KEY and VALUE change
|
|
75
75
|
* together and the self-renaming-folder guard stays green. The KEY rename is a
|
|
76
76
|
* mechanical relabel of the key literal at each call site (behaviour-preserving);
|
|
77
|
-
* the frontmatter
|
|
78
|
-
*
|
|
77
|
+
* the legacy frontmatter ''prd:'' field survives ONLY as un-migrated on-disk DATA the
|
|
78
|
+
* `dorfl prd-to-spec` command textually converts to `spec:` (HARD CUTOVER: it is no
|
|
79
|
+
* longer READ by `parseFrontmatter` — `spec:` is the only read key); the
|
|
80
|
+
* `--specs-land-in` flag/`specsLandIn` config + the
|
|
79
81
|
* `Spec*` symbols were completed by the later batches + the contract task. The
|
|
80
82
|
* folder-as-status invariant is unchanged.
|
|
81
83
|
*/
|
|
@@ -193,7 +195,7 @@ export function isWorkItemFile(name: string): boolean {
|
|
|
193
195
|
* order: `in-progress` over `tasks-ready`, with `done` appended only behind the
|
|
194
196
|
* stranded-continue gate. Order is load-bearing — kept exactly as the original
|
|
195
197
|
* union/array. (`tasks-backlog` is NOT in this DEFAULT order: it is appended at
|
|
196
|
-
* the LOWEST priority ONLY behind the explicit `--allow-backlog` flag,
|
|
198
|
+
* the LOWEST priority ONLY behind the explicit `--allow-backlog` flag, spec
|
|
197
199
|
* `do-allow-backlog-drive-staged-tasks-without-promotion` — see
|
|
198
200
|
* {@link TaskResolutionFolder}.)
|
|
199
201
|
*/
|
|
@@ -217,12 +219,15 @@ export type TaskResolutionFolder =
|
|
|
217
219
|
/**
|
|
218
220
|
* The task LIFECYCLE folders a `task:<slug>` / lone-task `issue:` can reside
|
|
219
221
|
* in (spec-complete.ts + close-job.ts `TASK_FOLDERS`): `tasks-ready`, `in-progress`,
|
|
220
|
-
* `needs-attention
|
|
222
|
+
* `done`. `needs-attention` was dropped post-cutover
|
|
223
|
+
* (`finish-needs-attention-folder-cutover-remove-legacy-recovery-readers`, ratified
|
|
224
|
+
* in `docs/adr/needs-attention-folder-cutover-followup-nits.md`): the folder is
|
|
225
|
+
* retired — a stuck item is the per-item lock `state: stuck` with the body resting
|
|
226
|
+
* in `tasks/ready/`, so no task ever resides in `work/needs-attention/`.
|
|
221
227
|
*/
|
|
222
228
|
export const TASK_LIFECYCLE_FOLDERS = [
|
|
223
229
|
'tasks-ready',
|
|
224
230
|
'in-progress',
|
|
225
|
-
'needs-attention',
|
|
226
231
|
'done',
|
|
227
232
|
] as const satisfies readonly WorkFolderKey[];
|
|
228
233
|
|
package/src/workspace.ts
CHANGED
|
@@ -155,8 +155,8 @@ export interface CreateJobOptions {
|
|
|
155
155
|
/** The work slug being processed (→ branch `work/<type>-<slug>` + work-id). */
|
|
156
156
|
slug: string;
|
|
157
157
|
/**
|
|
158
|
-
* The item TYPE — `'task'` (build) or `'
|
|
159
|
-
* work branch via {@link workBranchRef} so a same-slug task and
|
|
158
|
+
* The item TYPE — `'task'` (build) or `'spec'` (tasking) — namespacing the
|
|
159
|
+
* work branch via {@link workBranchRef} so a same-slug task and spec never
|
|
160
160
|
* collide. Defaults to `'task'`.
|
|
161
161
|
*/
|
|
162
162
|
type?: SlugNamespace;
|