@matteeh/osq 0.2.1 → 0.2.2
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/README.md +234 -15
- package/dist/cli/approve.d.ts +7 -0
- package/dist/cli/approve.d.ts.map +1 -1
- package/dist/cli/approve.js +34 -0
- package/dist/cli/approve.js.map +1 -1
- package/dist/cli/bin.js +2 -3
- package/dist/cli/bin.js.map +1 -1
- package/dist/cli/check.d.ts +15 -0
- package/dist/cli/check.d.ts.map +1 -0
- package/dist/cli/check.js +65 -0
- package/dist/cli/check.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +10 -10
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +6 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/lint.d.ts +3 -0
- package/dist/cli/lint.d.ts.map +1 -1
- package/dist/cli/lint.js +33 -14
- package/dist/cli/lint.js.map +1 -1
- package/dist/cli/plan-queue.d.ts +10 -4
- package/dist/cli/plan-queue.d.ts.map +1 -1
- package/dist/cli/plan-queue.js +20 -19
- package/dist/cli/plan-queue.js.map +1 -1
- package/dist/cli/plan-sections.d.ts +15 -0
- package/dist/cli/plan-sections.d.ts.map +1 -0
- package/dist/cli/plan-sections.js +47 -0
- package/dist/cli/plan-sections.js.map +1 -0
- package/dist/cli/plan.d.ts +1 -0
- package/dist/cli/plan.d.ts.map +1 -1
- package/dist/cli/plan.js +14 -4
- package/dist/cli/plan.js.map +1 -1
- package/dist/cli/report.d.ts.map +1 -1
- package/dist/cli/report.js +73 -1
- package/dist/cli/report.js.map +1 -1
- package/dist/cli/run.d.ts +7 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +22 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/verified.d.ts +15 -0
- package/dist/cli/verified.d.ts.map +1 -0
- package/dist/cli/verified.js +34 -0
- package/dist/cli/verified.js.map +1 -0
- package/dist/core/foundation/config-agents.d.ts +16 -0
- package/dist/core/foundation/config-agents.d.ts.map +1 -0
- package/dist/core/foundation/config-agents.js +2 -0
- package/dist/core/foundation/config-agents.js.map +1 -0
- package/dist/core/foundation/config-claude.d.ts +48 -0
- package/dist/core/foundation/config-claude.d.ts.map +1 -0
- package/dist/core/foundation/config-claude.js +106 -0
- package/dist/core/foundation/config-claude.js.map +1 -0
- package/dist/core/foundation/config-codex-resolve.d.ts +10 -0
- package/dist/core/foundation/config-codex-resolve.d.ts.map +1 -0
- package/dist/core/foundation/config-codex-resolve.js +24 -0
- package/dist/core/foundation/config-codex-resolve.js.map +1 -0
- package/dist/core/foundation/config-file.d.ts +18 -0
- package/dist/core/foundation/config-file.d.ts.map +1 -0
- package/dist/core/foundation/config-file.js +46 -0
- package/dist/core/foundation/config-file.js.map +1 -0
- package/dist/core/foundation/config-gates.d.ts +2 -0
- package/dist/core/foundation/config-gates.d.ts.map +1 -1
- package/dist/core/foundation/config-gates.js +8 -0
- package/dist/core/foundation/config-gates.js.map +1 -1
- package/dist/core/foundation/config-opencode.d.ts +25 -0
- package/dist/core/foundation/config-opencode.d.ts.map +1 -0
- package/dist/core/foundation/config-opencode.js +55 -0
- package/dist/core/foundation/config-opencode.js.map +1 -0
- package/dist/core/foundation/config-pi.d.ts +10 -0
- package/dist/core/foundation/config-pi.d.ts.map +1 -1
- package/dist/core/foundation/config-pi.js +13 -0
- package/dist/core/foundation/config-pi.js.map +1 -1
- package/dist/core/foundation/config-planning.d.ts +12 -1
- package/dist/core/foundation/config-planning.d.ts.map +1 -1
- package/dist/core/foundation/config-planning.js +29 -1
- package/dist/core/foundation/config-planning.js.map +1 -1
- package/dist/core/foundation/config-traceability.d.ts +28 -0
- package/dist/core/foundation/config-traceability.d.ts.map +1 -0
- package/dist/core/foundation/config-traceability.js +63 -0
- package/dist/core/foundation/config-traceability.js.map +1 -0
- package/dist/core/foundation/config-user.d.ts +32 -0
- package/dist/core/foundation/config-user.d.ts.map +1 -0
- package/dist/core/foundation/config-user.js +2 -0
- package/dist/core/foundation/config-user.js.map +1 -0
- package/dist/core/foundation/config-vcs.d.ts +29 -0
- package/dist/core/foundation/config-vcs.d.ts.map +1 -0
- package/dist/core/foundation/config-vcs.js +57 -0
- package/dist/core/foundation/config-vcs.js.map +1 -0
- package/dist/core/foundation/config.d.ts +23 -24
- package/dist/core/foundation/config.d.ts.map +1 -1
- package/dist/core/foundation/config.js +29 -36
- package/dist/core/foundation/config.js.map +1 -1
- package/dist/core/foundation/decisions-validate.d.ts +16 -0
- package/dist/core/foundation/decisions-validate.d.ts.map +1 -0
- package/dist/core/foundation/decisions-validate.js +74 -0
- package/dist/core/foundation/decisions-validate.js.map +1 -0
- package/dist/core/foundation/decisions.d.ts +34 -0
- package/dist/core/foundation/decisions.d.ts.map +1 -0
- package/dist/core/foundation/decisions.js +152 -0
- package/dist/core/foundation/decisions.js.map +1 -0
- package/dist/core/foundation/doctor-decisions.d.ts +9 -0
- package/dist/core/foundation/doctor-decisions.d.ts.map +1 -0
- package/dist/core/foundation/doctor-decisions.js +49 -0
- package/dist/core/foundation/doctor-decisions.js.map +1 -0
- package/dist/core/foundation/doctor-managed.d.ts.map +1 -1
- package/dist/core/foundation/doctor-managed.js +3 -0
- package/dist/core/foundation/doctor-managed.js.map +1 -1
- package/dist/core/foundation/doctor-prices.d.ts +8 -0
- package/dist/core/foundation/doctor-prices.d.ts.map +1 -0
- package/dist/core/foundation/doctor-prices.js +25 -0
- package/dist/core/foundation/doctor-prices.js.map +1 -0
- package/dist/core/foundation/doctor.d.ts.map +1 -1
- package/dist/core/foundation/doctor.js +20 -30
- package/dist/core/foundation/doctor.js.map +1 -1
- package/dist/core/foundation/harness-catalog.d.ts +7 -8
- package/dist/core/foundation/harness-catalog.d.ts.map +1 -1
- package/dist/core/foundation/harness-catalog.js +26 -41
- package/dist/core/foundation/harness-catalog.js.map +1 -1
- package/dist/core/foundation/init-blocks.d.ts +1 -1
- package/dist/core/foundation/init-blocks.d.ts.map +1 -1
- package/dist/core/foundation/init-blocks.js +51 -14
- package/dist/core/foundation/init-blocks.js.map +1 -1
- package/dist/core/foundation/init.d.ts +4 -0
- package/dist/core/foundation/init.d.ts.map +1 -1
- package/dist/core/foundation/init.js +7 -0
- package/dist/core/foundation/init.js.map +1 -1
- package/dist/core/foundation/new.d.ts +4 -1
- package/dist/core/foundation/new.d.ts.map +1 -1
- package/dist/core/foundation/new.js +18 -8
- package/dist/core/foundation/new.js.map +1 -1
- package/dist/core/foundation/package-root.d.ts +6 -0
- package/dist/core/foundation/package-root.d.ts.map +1 -1
- package/dist/core/foundation/package-root.js +6 -0
- package/dist/core/foundation/package-root.js.map +1 -1
- package/dist/core/foundation/rules-block.d.ts +11 -0
- package/dist/core/foundation/rules-block.d.ts.map +1 -0
- package/dist/core/foundation/rules-block.js +90 -0
- package/dist/core/foundation/rules-block.js.map +1 -0
- package/dist/core/foundation/traceability-block.d.ts +13 -0
- package/dist/core/foundation/traceability-block.d.ts.map +1 -0
- package/dist/core/foundation/traceability-block.js +124 -0
- package/dist/core/foundation/traceability-block.js.map +1 -0
- package/dist/core/lifecycle/done.d.ts.map +1 -1
- package/dist/core/lifecycle/done.js +2 -4
- package/dist/core/lifecycle/done.js.map +1 -1
- package/dist/core/lifecycle/recertify.d.ts +9 -0
- package/dist/core/lifecycle/recertify.d.ts.map +1 -0
- package/dist/core/lifecycle/recertify.js +27 -0
- package/dist/core/lifecycle/recertify.js.map +1 -0
- package/dist/core/lifecycle/reject.d.ts.map +1 -1
- package/dist/core/lifecycle/reject.js +3 -4
- package/dist/core/lifecycle/reject.js.map +1 -1
- package/dist/core/lifecycle/retry.d.ts.map +1 -1
- package/dist/core/lifecycle/retry.js +6 -20
- package/dist/core/lifecycle/retry.js.map +1 -1
- package/dist/core/lifecycle/verification-record.d.ts +42 -0
- package/dist/core/lifecycle/verification-record.d.ts.map +1 -0
- package/dist/core/lifecycle/verification-record.js +76 -0
- package/dist/core/lifecycle/verification-record.js.map +1 -0
- package/dist/core/report/approval-flags.d.ts +16 -3
- package/dist/core/report/approval-flags.d.ts.map +1 -1
- package/dist/core/report/approval-flags.js +59 -22
- package/dist/core/report/approval-flags.js.map +1 -1
- package/dist/core/report/brief-to-approval.d.ts +7 -0
- package/dist/core/report/brief-to-approval.d.ts.map +1 -0
- package/dist/core/report/brief-to-approval.js +43 -0
- package/dist/core/report/brief-to-approval.js.map +1 -0
- package/dist/core/report/planning-price-gaps.d.ts +10 -0
- package/dist/core/report/planning-price-gaps.d.ts.map +1 -0
- package/dist/core/report/planning-price-gaps.js +37 -0
- package/dist/core/report/planning-price-gaps.js.map +1 -0
- package/dist/core/report/planning-slice-lookup.d.ts.map +1 -1
- package/dist/core/report/planning-slice-lookup.js +3 -9
- package/dist/core/report/planning-slice-lookup.js.map +1 -1
- package/dist/core/report/recent-disclosures.d.ts +18 -0
- package/dist/core/report/recent-disclosures.d.ts.map +1 -0
- package/dist/core/report/recent-disclosures.js +105 -0
- package/dist/core/report/recent-disclosures.js.map +1 -0
- package/dist/core/report/record-disclosures.d.ts +14 -0
- package/dist/core/report/record-disclosures.d.ts.map +1 -0
- package/dist/core/report/record-disclosures.js +30 -0
- package/dist/core/report/record-disclosures.js.map +1 -0
- package/dist/core/report/record-estimates.d.ts +25 -0
- package/dist/core/report/record-estimates.d.ts.map +1 -0
- package/dist/core/report/record-estimates.js +83 -0
- package/dist/core/report/record-estimates.js.map +1 -0
- package/dist/core/report/record-rework.d.ts +19 -0
- package/dist/core/report/record-rework.d.ts.map +1 -0
- package/dist/core/report/record-rework.js +50 -0
- package/dist/core/report/record-rework.js.map +1 -0
- package/dist/core/report/record-verification.d.ts +16 -0
- package/dist/core/report/record-verification.d.ts.map +1 -0
- package/dist/core/report/record-verification.js +33 -0
- package/dist/core/report/record-verification.js.map +1 -0
- package/dist/core/report/report-dependencies.d.ts +29 -0
- package/dist/core/report/report-dependencies.d.ts.map +1 -0
- package/dist/core/report/report-dependencies.js +92 -0
- package/dist/core/report/report-dependencies.js.map +1 -0
- package/dist/core/report/report-events.d.ts +1 -0
- package/dist/core/report/report-events.d.ts.map +1 -1
- package/dist/core/report/report-events.js +8 -26
- package/dist/core/report/report-events.js.map +1 -1
- package/dist/core/report/report-mutation.d.ts +34 -0
- package/dist/core/report/report-mutation.d.ts.map +1 -0
- package/dist/core/report/report-mutation.js +191 -0
- package/dist/core/report/report-mutation.js.map +1 -0
- package/dist/core/report/report-scope.d.ts +21 -0
- package/dist/core/report/report-scope.d.ts.map +1 -0
- package/dist/core/report/report-scope.js +61 -0
- package/dist/core/report/report-scope.js.map +1 -0
- package/dist/core/report/report-traceability.d.ts +29 -0
- package/dist/core/report/report-traceability.d.ts.map +1 -0
- package/dist/core/report/report-traceability.js +94 -0
- package/dist/core/report/report-traceability.js.map +1 -0
- package/dist/core/report/report.d.ts +35 -1
- package/dist/core/report/report.d.ts.map +1 -1
- package/dist/core/report/report.js +130 -111
- package/dist/core/report/report.js.map +1 -1
- package/dist/core/report/result-sections.d.ts +30 -0
- package/dist/core/report/result-sections.d.ts.map +1 -0
- package/dist/core/report/result-sections.js +125 -0
- package/dist/core/report/result-sections.js.map +1 -0
- package/dist/core/report/scope-size.d.ts +7 -0
- package/dist/core/report/scope-size.d.ts.map +1 -0
- package/dist/core/report/scope-size.js +22 -0
- package/dist/core/report/scope-size.js.map +1 -0
- package/dist/core/run/commit-message.d.ts +24 -0
- package/dist/core/run/commit-message.d.ts.map +1 -0
- package/dist/core/run/commit-message.js +76 -0
- package/dist/core/run/commit-message.js.map +1 -0
- package/dist/core/run/dead-commit.d.ts +10 -0
- package/dist/core/run/dead-commit.d.ts.map +1 -0
- package/dist/core/run/dead-commit.js +70 -0
- package/dist/core/run/dead-commit.js.map +1 -0
- package/dist/core/run/focused-tests.d.ts +43 -0
- package/dist/core/run/focused-tests.d.ts.map +1 -0
- package/dist/core/run/focused-tests.js +116 -0
- package/dist/core/run/focused-tests.js.map +1 -0
- package/dist/core/run/manifest-approval.d.ts +7 -0
- package/dist/core/run/manifest-approval.d.ts.map +1 -0
- package/dist/core/run/manifest-approval.js +30 -0
- package/dist/core/run/manifest-approval.js.map +1 -0
- package/dist/core/run/manifest.d.ts +11 -1
- package/dist/core/run/manifest.d.ts.map +1 -1
- package/dist/core/run/manifest.js +52 -11
- package/dist/core/run/manifest.js.map +1 -1
- package/dist/core/run/mutation-report.d.ts +29 -0
- package/dist/core/run/mutation-report.d.ts.map +1 -0
- package/dist/core/run/mutation-report.js +107 -0
- package/dist/core/run/mutation-report.js.map +1 -0
- package/dist/core/run/mutation-run.d.ts +32 -0
- package/dist/core/run/mutation-run.d.ts.map +1 -0
- package/dist/core/run/mutation-run.js +80 -0
- package/dist/core/run/mutation-run.js.map +1 -0
- package/dist/core/run/verification.d.ts +12 -1
- package/dist/core/run/verification.d.ts.map +1 -1
- package/dist/core/run/verification.js +24 -2
- package/dist/core/run/verification.js.map +1 -1
- package/dist/core/spec/approve-worktree-shared.d.ts +33 -0
- package/dist/core/spec/approve-worktree-shared.d.ts.map +1 -0
- package/dist/core/spec/approve-worktree-shared.js +59 -0
- package/dist/core/spec/approve-worktree-shared.js.map +1 -0
- package/dist/core/spec/approve-worktree.d.ts +21 -0
- package/dist/core/spec/approve-worktree.d.ts.map +1 -0
- package/dist/core/spec/approve-worktree.js +153 -0
- package/dist/core/spec/approve-worktree.js.map +1 -0
- package/dist/core/spec/approve.d.ts +20 -10
- package/dist/core/spec/approve.d.ts.map +1 -1
- package/dist/core/spec/approve.js +57 -54
- package/dist/core/spec/approve.js.map +1 -1
- package/dist/core/spec/capability-impact.d.ts +43 -0
- package/dist/core/spec/capability-impact.d.ts.map +1 -0
- package/dist/core/spec/capability-impact.js +85 -0
- package/dist/core/spec/capability-impact.js.map +1 -0
- package/dist/core/spec/decisions-lint.d.ts +18 -0
- package/dist/core/spec/decisions-lint.d.ts.map +1 -0
- package/dist/core/spec/decisions-lint.js +127 -0
- package/dist/core/spec/decisions-lint.js.map +1 -0
- package/dist/core/spec/delta.d.ts +6 -0
- package/dist/core/spec/delta.d.ts.map +1 -1
- package/dist/core/spec/delta.js +73 -5
- package/dist/core/spec/delta.js.map +1 -1
- package/dist/core/spec/digest-decisions.d.ts +27 -0
- package/dist/core/spec/digest-decisions.d.ts.map +1 -0
- package/dist/core/spec/digest-decisions.js +86 -0
- package/dist/core/spec/digest-decisions.js.map +1 -0
- package/dist/core/spec/digest-format.d.ts +4 -0
- package/dist/core/spec/digest-format.d.ts.map +1 -0
- package/dist/core/spec/digest-format.js +44 -0
- package/dist/core/spec/digest-format.js.map +1 -0
- package/dist/core/spec/digest.d.ts +5 -3
- package/dist/core/spec/digest.d.ts.map +1 -1
- package/dist/core/spec/digest.js +14 -33
- package/dist/core/spec/digest.js.map +1 -1
- package/dist/core/spec/human-steps.d.ts +20 -0
- package/dist/core/spec/human-steps.d.ts.map +1 -0
- package/dist/core/spec/human-steps.js +52 -0
- package/dist/core/spec/human-steps.js.map +1 -0
- package/dist/core/spec/impact-lint.d.ts +24 -0
- package/dist/core/spec/impact-lint.d.ts.map +1 -0
- package/dist/core/spec/impact-lint.js +39 -0
- package/dist/core/spec/impact-lint.js.map +1 -0
- package/dist/core/spec/import-graph.d.ts +35 -0
- package/dist/core/spec/import-graph.d.ts.map +1 -0
- package/dist/core/spec/import-graph.js +155 -0
- package/dist/core/spec/import-graph.js.map +1 -0
- package/dist/core/spec/lint-findings.d.ts +44 -0
- package/dist/core/spec/lint-findings.d.ts.map +1 -0
- package/dist/core/spec/lint-findings.js +56 -0
- package/dist/core/spec/lint-findings.js.map +1 -0
- package/dist/core/spec/lint-output.d.ts +53 -0
- package/dist/core/spec/lint-output.d.ts.map +1 -0
- package/dist/core/spec/lint-output.js +87 -0
- package/dist/core/spec/lint-output.js.map +1 -0
- package/dist/core/spec/linter.d.ts +14 -4
- package/dist/core/spec/linter.d.ts.map +1 -1
- package/dist/core/spec/linter.js +271 -111
- package/dist/core/spec/linter.js.map +1 -1
- package/dist/core/spec/merged-spec-check.d.ts +24 -0
- package/dist/core/spec/merged-spec-check.d.ts.map +1 -0
- package/dist/core/spec/merged-spec-check.js +95 -0
- package/dist/core/spec/merged-spec-check.js.map +1 -0
- package/dist/core/spec/openspec-issues.d.ts +58 -0
- package/dist/core/spec/openspec-issues.d.ts.map +1 -0
- package/dist/core/spec/openspec-issues.js +166 -0
- package/dist/core/spec/openspec-issues.js.map +1 -0
- package/dist/core/spec/parser.d.ts +1 -0
- package/dist/core/spec/parser.d.ts.map +1 -1
- package/dist/core/spec/parser.js +16 -6
- package/dist/core/spec/parser.js.map +1 -1
- package/dist/core/spec/scenario-impact.d.ts +47 -0
- package/dist/core/spec/scenario-impact.d.ts.map +1 -0
- package/dist/core/spec/scenario-impact.js +130 -0
- package/dist/core/spec/scenario-impact.js.map +1 -0
- package/dist/core/spec/test-impact.d.ts +28 -0
- package/dist/core/spec/test-impact.d.ts.map +1 -0
- package/dist/core/spec/test-impact.js +119 -0
- package/dist/core/spec/test-impact.js.map +1 -0
- package/dist/core/spec/traceability-links.d.ts +50 -0
- package/dist/core/spec/traceability-links.d.ts.map +1 -0
- package/dist/core/spec/traceability-links.js +120 -0
- package/dist/core/spec/traceability-links.js.map +1 -0
- package/dist/core/spec/traceability-lint.d.ts +29 -0
- package/dist/core/spec/traceability-lint.d.ts.map +1 -0
- package/dist/core/spec/traceability-lint.js +143 -0
- package/dist/core/spec/traceability-lint.js.map +1 -0
- package/dist/core/status/blocked-item.d.ts +8 -0
- package/dist/core/status/blocked-item.d.ts.map +1 -0
- package/dist/core/status/blocked-item.js +45 -0
- package/dist/core/status/blocked-item.js.map +1 -0
- package/dist/core/status/change-locations.d.ts +44 -0
- package/dist/core/status/change-locations.d.ts.map +1 -0
- package/dist/core/status/change-locations.js +138 -0
- package/dist/core/status/change-locations.js.map +1 -0
- package/dist/core/status/dependency-readiness.d.ts +11 -0
- package/dist/core/status/dependency-readiness.d.ts.map +1 -0
- package/dist/core/status/dependency-readiness.js +39 -0
- package/dist/core/status/dependency-readiness.js.map +1 -0
- package/dist/core/status/inbox-projection.d.ts.map +1 -1
- package/dist/core/status/inbox-projection.js +23 -4
- package/dist/core/status/inbox-projection.js.map +1 -1
- package/dist/core/status/inbox-text.d.ts.map +1 -1
- package/dist/core/status/inbox-text.js +34 -3
- package/dist/core/status/inbox-text.js.map +1 -1
- package/dist/core/status/inbox.d.ts +10 -1
- package/dist/core/status/inbox.d.ts.map +1 -1
- package/dist/core/status/inbox.js +19 -1
- package/dist/core/status/inbox.js.map +1 -1
- package/dist/core/status/layout.d.ts +6 -0
- package/dist/core/status/layout.d.ts.map +1 -1
- package/dist/core/status/layout.js +8 -0
- package/dist/core/status/layout.js.map +1 -1
- package/dist/core/status/next-step.d.ts +17 -0
- package/dist/core/status/next-step.d.ts.map +1 -0
- package/dist/core/status/next-step.js +85 -0
- package/dist/core/status/next-step.js.map +1 -0
- package/dist/core/status/pre-spawn-words.d.ts +13 -0
- package/dist/core/status/pre-spawn-words.d.ts.map +1 -0
- package/dist/core/status/pre-spawn-words.js +26 -0
- package/dist/core/status/pre-spawn-words.js.map +1 -0
- package/dist/core/status/queue-parser.d.ts +1 -0
- package/dist/core/status/queue-parser.d.ts.map +1 -1
- package/dist/core/status/queue-parser.js +41 -2
- package/dist/core/status/queue-parser.js.map +1 -1
- package/dist/core/status/queue-planning.d.ts +1 -0
- package/dist/core/status/queue-planning.d.ts.map +1 -1
- package/dist/core/status/queue-planning.js +24 -12
- package/dist/core/status/queue-planning.js.map +1 -1
- package/dist/core/status/queue-report-detail.d.ts.map +1 -1
- package/dist/core/status/queue-report-detail.js +5 -3
- package/dist/core/status/queue-report-detail.js.map +1 -1
- package/dist/core/status/queue-state.d.ts +1 -1
- package/dist/core/status/queue-state.d.ts.map +1 -1
- package/dist/core/status/queue-state.js +27 -41
- package/dist/core/status/queue-state.js.map +1 -1
- package/dist/core/status/show.d.ts +25 -0
- package/dist/core/status/show.d.ts.map +1 -1
- package/dist/core/status/show.js +354 -91
- package/dist/core/status/show.js.map +1 -1
- package/dist/core/status/state.d.ts.map +1 -1
- package/dist/core/status/state.js +1 -23
- package/dist/core/status/state.js.map +1 -1
- package/dist/core/status/status.d.ts +18 -0
- package/dist/core/status/status.d.ts.map +1 -1
- package/dist/core/status/status.js +59 -80
- package/dist/core/status/status.js.map +1 -1
- package/dist/core/status/verification.d.ts +27 -0
- package/dist/core/status/verification.d.ts.map +1 -0
- package/dist/core/status/verification.js +111 -0
- package/dist/core/status/verification.js.map +1 -0
- package/dist/core/trace/function-ranges.d.ts +30 -0
- package/dist/core/trace/function-ranges.d.ts.map +1 -0
- package/dist/core/trace/function-ranges.js +250 -0
- package/dist/core/trace/function-ranges.js.map +1 -0
- package/dist/core/trace/mutation-pick.d.ts +55 -0
- package/dist/core/trace/mutation-pick.d.ts.map +1 -0
- package/dist/core/trace/mutation-pick.js +96 -0
- package/dist/core/trace/mutation-pick.js.map +1 -0
- package/dist/core/trace/scenario-index.d.ts +27 -0
- package/dist/core/trace/scenario-index.d.ts.map +1 -0
- package/dist/core/trace/scenario-index.js +76 -0
- package/dist/core/trace/scenario-index.js.map +1 -0
- package/dist/core/trace/scenario-lookup.d.ts +14 -0
- package/dist/core/trace/scenario-lookup.d.ts.map +1 -0
- package/dist/core/trace/scenario-lookup.js +179 -0
- package/dist/core/trace/scenario-lookup.js.map +1 -0
- package/dist/core/trace/tag-scan.d.ts +44 -0
- package/dist/core/trace/tag-scan.d.ts.map +1 -0
- package/dist/core/trace/tag-scan.js +200 -0
- package/dist/core/trace/tag-scan.js.map +1 -0
- package/dist/core/vcs/doctor-git.d.ts +13 -0
- package/dist/core/vcs/doctor-git.d.ts.map +1 -0
- package/dist/core/vcs/doctor-git.js +114 -0
- package/dist/core/vcs/doctor-git.js.map +1 -0
- package/dist/core/vcs/git-vcs-write.d.ts +47 -0
- package/dist/core/vcs/git-vcs-write.d.ts.map +1 -0
- package/dist/core/vcs/git-vcs-write.js +210 -0
- package/dist/core/vcs/git-vcs-write.js.map +1 -0
- package/dist/core/vcs/git-vcs.d.ts +40 -0
- package/dist/core/vcs/git-vcs.d.ts.map +1 -0
- package/dist/core/vcs/git-vcs.js +170 -0
- package/dist/core/vcs/git-vcs.js.map +1 -0
- package/dist/core/vcs/no-vcs.d.ts +26 -0
- package/dist/core/vcs/no-vcs.d.ts.map +1 -0
- package/dist/core/vcs/no-vcs.js +62 -0
- package/dist/core/vcs/no-vcs.js.map +1 -0
- package/dist/core/vcs/select.d.ts +11 -0
- package/dist/core/vcs/select.d.ts.map +1 -0
- package/dist/core/vcs/select.js +33 -0
- package/dist/core/vcs/select.js.map +1 -0
- package/dist/core/vcs/snapshot.d.ts +34 -0
- package/dist/core/vcs/snapshot.d.ts.map +1 -0
- package/dist/core/vcs/snapshot.js +71 -0
- package/dist/core/vcs/snapshot.js.map +1 -0
- package/dist/core/vcs/vcs.d.ts +55 -0
- package/dist/core/vcs/vcs.d.ts.map +1 -0
- package/dist/core/vcs/vcs.js +2 -0
- package/dist/core/vcs/vcs.js.map +1 -0
- package/dist/core/vcs/worktree.d.ts +10 -0
- package/dist/core/vcs/worktree.d.ts.map +1 -0
- package/dist/core/vcs/worktree.js +25 -0
- package/dist/core/vcs/worktree.js.map +1 -0
- package/dist/core/web/web-data-folders.d.ts.map +1 -1
- package/dist/core/web/web-data-folders.js +18 -33
- package/dist/core/web/web-data-folders.js.map +1 -1
- package/dist/core/web/web-data-lifecycle.d.ts.map +1 -1
- package/dist/core/web/web-data-lifecycle.js +2 -1
- package/dist/core/web/web-data-lifecycle.js.map +1 -1
- package/dist/core/web/web-events.d.ts +8 -6
- package/dist/core/web/web-events.d.ts.map +1 -1
- package/dist/core/web/web-events.js +7 -31
- package/dist/core/web/web-events.js.map +1 -1
- package/dist/core/web/web-server.d.ts.map +1 -1
- package/dist/core/web/web-server.js +3 -0
- package/dist/core/web/web-server.js.map +1 -1
- package/dist/core/web/web-trees.d.ts +27 -0
- package/dist/core/web/web-trees.d.ts.map +1 -0
- package/dist/core/web/web-trees.js +82 -0
- package/dist/core/web/web-trees.js.map +1 -0
- package/dist/harness/claude/claude-exec-args.d.ts +13 -0
- package/dist/harness/claude/claude-exec-args.d.ts.map +1 -0
- package/dist/harness/claude/claude-exec-args.js +61 -0
- package/dist/harness/claude/claude-exec-args.js.map +1 -0
- package/dist/harness/claude/claude-exec.d.ts +12 -0
- package/dist/harness/claude/claude-exec.d.ts.map +1 -0
- package/dist/harness/claude/claude-exec.js +79 -0
- package/dist/harness/claude/claude-exec.js.map +1 -0
- package/dist/harness/claude/claude-stream.d.ts +31 -0
- package/dist/harness/claude/claude-stream.d.ts.map +1 -0
- package/dist/harness/claude/claude-stream.js +150 -0
- package/dist/harness/claude/claude-stream.js.map +1 -0
- package/dist/harness/claude/claude-tools.d.ts +5 -0
- package/dist/harness/claude/claude-tools.d.ts.map +1 -0
- package/dist/harness/claude/claude-tools.js +30 -0
- package/dist/harness/claude/claude-tools.js.map +1 -0
- package/dist/harness/index.d.ts +1 -0
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +3 -0
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/opencode/opencode-session.d.ts +42 -0
- package/dist/harness/opencode/opencode-session.d.ts.map +1 -0
- package/dist/harness/opencode/opencode-session.js +123 -0
- package/dist/harness/opencode/opencode-session.js.map +1 -0
- package/dist/harness/opencode/opencode.d.ts +2 -1
- package/dist/harness/opencode/opencode.d.ts.map +1 -1
- package/dist/harness/opencode/opencode.js +52 -28
- package/dist/harness/opencode/opencode.js.map +1 -1
- package/dist/harness/prompt.js +1 -1
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/types.d.ts +112 -1
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +2 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/scenario.d.ts +29 -0
- package/dist/testing/scenario.d.ts.map +1 -0
- package/dist/testing/scenario.js +157 -0
- package/dist/testing/scenario.js.map +1 -0
- package/dist/watcher/archiver.d.ts +2 -1
- package/dist/watcher/archiver.d.ts.map +1 -1
- package/dist/watcher/archiver.js +27 -2
- package/dist/watcher/archiver.js.map +1 -1
- package/dist/watcher/auto-recertify.d.ts +27 -0
- package/dist/watcher/auto-recertify.d.ts.map +1 -0
- package/dist/watcher/auto-recertify.js +113 -0
- package/dist/watcher/auto-recertify.js.map +1 -0
- package/dist/watcher/auto-retry.d.ts +1 -1
- package/dist/watcher/auto-retry.d.ts.map +1 -1
- package/dist/watcher/auto-retry.js +3 -11
- package/dist/watcher/auto-retry.js.map +1 -1
- package/dist/watcher/baseline-key.d.ts +17 -0
- package/dist/watcher/baseline-key.d.ts.map +1 -0
- package/dist/watcher/baseline-key.js +31 -0
- package/dist/watcher/baseline-key.js.map +1 -0
- package/dist/watcher/baseline.d.ts +32 -0
- package/dist/watcher/baseline.d.ts.map +1 -0
- package/dist/watcher/baseline.js +166 -0
- package/dist/watcher/baseline.js.map +1 -0
- package/dist/watcher/blocked.d.ts +12 -0
- package/dist/watcher/blocked.d.ts.map +1 -0
- package/dist/watcher/blocked.js +24 -0
- package/dist/watcher/blocked.js.map +1 -0
- package/dist/watcher/dependencies.d.ts +28 -0
- package/dist/watcher/dependencies.d.ts.map +1 -0
- package/dist/watcher/dependencies.js +152 -0
- package/dist/watcher/dependencies.js.map +1 -0
- package/dist/watcher/done-metadata.d.ts +4 -0
- package/dist/watcher/done-metadata.d.ts.map +1 -0
- package/dist/watcher/done-metadata.js +20 -0
- package/dist/watcher/done-metadata.js.map +1 -0
- package/dist/watcher/failure-reason.d.ts +1 -1
- package/dist/watcher/failure-reason.d.ts.map +1 -1
- package/dist/watcher/focused-verify.d.ts +17 -0
- package/dist/watcher/focused-verify.d.ts.map +1 -0
- package/dist/watcher/focused-verify.js +54 -0
- package/dist/watcher/focused-verify.js.map +1 -0
- package/dist/watcher/git-guard.d.ts +24 -0
- package/dist/watcher/git-guard.d.ts.map +1 -0
- package/dist/watcher/git-guard.js +95 -0
- package/dist/watcher/git-guard.js.map +1 -0
- package/dist/watcher/instructions-drift.d.ts +21 -0
- package/dist/watcher/instructions-drift.d.ts.map +1 -0
- package/dist/watcher/instructions-drift.js +115 -0
- package/dist/watcher/instructions-drift.js.map +1 -0
- package/dist/watcher/loop.d.ts.map +1 -1
- package/dist/watcher/loop.js +36 -50
- package/dist/watcher/loop.js.map +1 -1
- package/dist/watcher/measures.d.ts.map +1 -1
- package/dist/watcher/measures.js +22 -39
- package/dist/watcher/measures.js.map +1 -1
- package/dist/watcher/mutation-check.d.ts +42 -0
- package/dist/watcher/mutation-check.d.ts.map +1 -0
- package/dist/watcher/mutation-check.js +147 -0
- package/dist/watcher/mutation-check.js.map +1 -0
- package/dist/watcher/regression.d.ts +10 -5
- package/dist/watcher/regression.d.ts.map +1 -1
- package/dist/watcher/regression.js +29 -22
- package/dist/watcher/regression.js.map +1 -1
- package/dist/watcher/runner.d.ts.map +1 -1
- package/dist/watcher/runner.js +12 -14
- package/dist/watcher/runner.js.map +1 -1
- package/dist/watcher/spawn.d.ts.map +1 -1
- package/dist/watcher/spawn.js +5 -0
- package/dist/watcher/spawn.js.map +1 -1
- package/dist/watcher/task-verify.d.ts +7 -2
- package/dist/watcher/task-verify.d.ts.map +1 -1
- package/dist/watcher/task-verify.js +33 -8
- package/dist/watcher/task-verify.js.map +1 -1
- package/dist/watcher/verify.d.ts +1 -5
- package/dist/watcher/verify.d.ts.map +1 -1
- package/dist/watcher/verify.js +2 -6
- package/dist/watcher/verify.js.map +1 -1
- package/package.json +5 -1
- package/templates/PLANNER.md +35 -9
- package/templates/openspec/config.yaml +1 -1
- package/templates/openspec/schemas/osq/schema.yaml +4 -2
- package/templates/openspec/schemas/osq/templates/proposal.md +9 -2
- package/templates/proposal.md +9 -2
- package/ui/dist/assets/{index-CZYeQ8la.js → index-D39uYbbL.js} +1 -1
- package/ui/dist/index.html +1 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { RunTaskResult } from './outcome.js';
|
|
2
|
+
import type { FailFn } from './task-verify.js';
|
|
3
|
+
/** Dead marker for a blocked task: the reason in frontmatter, then the need. */
|
|
4
|
+
export declare function formatBlockedDeadMarker(need: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* When the task's result file states a real `## Blocked` section, fail the task
|
|
7
|
+
* with reason `blocked` and the stated need in the dead marker body. A missing
|
|
8
|
+
* result file, or a section that is empty or says only `None`, leaves the task
|
|
9
|
+
* to the checks that follow.
|
|
10
|
+
*/
|
|
11
|
+
export declare function checkBlocked(specFolderPath: string, taskNumber: string, fail: FailFn): Promise<RunTaskResult | null>;
|
|
12
|
+
//# sourceMappingURL=blocked.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocked.d.ts","sourceRoot":"","sources":["../../src/watcher/blocked.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,gFAAgF;AAChF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAO/B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { parseResultSections } from '../core/report/result-sections.js';
|
|
4
|
+
/** Dead marker for a blocked task: the reason in frontmatter, then the need. */
|
|
5
|
+
export function formatBlockedDeadMarker(need) {
|
|
6
|
+
return ['---', 'reason: blocked', '---', need, ''].join('\n');
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* When the task's result file states a real `## Blocked` section, fail the task
|
|
10
|
+
* with reason `blocked` and the stated need in the dead marker body. A missing
|
|
11
|
+
* result file, or a section that is empty or says only `None`, leaves the task
|
|
12
|
+
* to the checks that follow.
|
|
13
|
+
*/
|
|
14
|
+
export async function checkBlocked(specFolderPath, taskNumber, fail) {
|
|
15
|
+
const resultPath = path.join(specFolderPath, '.run', 'results', `${taskNumber}.md`);
|
|
16
|
+
const content = await fs.readFile(resultPath, 'utf8').catch(() => null);
|
|
17
|
+
if (content === null)
|
|
18
|
+
return null;
|
|
19
|
+
const { blocked } = parseResultSections(content);
|
|
20
|
+
if (blocked === null)
|
|
21
|
+
return null;
|
|
22
|
+
return fail('blocked', formatBlockedDeadMarker(blocked), `Task blocked: ${blocked}`);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=blocked.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocked.js","sourceRoot":"","sources":["../../src/watcher/blocked.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAIxE,gFAAgF;AAChF,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,OAAO,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,cAAsB,EACtB,UAAkB,EAClB,IAAY;IAEZ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,KAAK,CAAC,CAAC;IACpF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACxE,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,OAAO,CAAC,EAAE,iBAAiB,OAAO,EAAE,CAAC,CAAC;AACvF,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { RunTaskResult } from './outcome.js';
|
|
2
|
+
import type { FailFn, TaskVerifyOptions } from './task-verify.js';
|
|
3
|
+
/** One added package and the manifest it was added to. */
|
|
4
|
+
export interface AddedDependency {
|
|
5
|
+
readonly file: string;
|
|
6
|
+
readonly name: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The sorted distinct package names a manifest declares across its four
|
|
10
|
+
* dependency sections. Malformed JSON and non-object sections contribute nothing.
|
|
11
|
+
*/
|
|
12
|
+
export declare function readManifestPackageNames(content: string): string[];
|
|
13
|
+
/**
|
|
14
|
+
* Resolve `scope` and map each scoped `package.json` path to its sorted package
|
|
15
|
+
* names. A missing or unreadable manifest maps to an empty list. Without a
|
|
16
|
+
* scoped manifest the result is empty, and no unscoped file is ever read.
|
|
17
|
+
*/
|
|
18
|
+
export declare function readScopedDependencies(projectRoot: string, scope: readonly string[]): Promise<Record<string, string[]>>;
|
|
19
|
+
/** Dead marker body for a task that added packages an accepted ADR denies. */
|
|
20
|
+
export declare function formatDeniedDependencyMarker(lines: readonly string[]): string;
|
|
21
|
+
/**
|
|
22
|
+
* After the agent exits, compare each baseline manifest with its current names,
|
|
23
|
+
* append one `dependencies_added` event for the new pairs, and fail the task
|
|
24
|
+
* when an accepted ADR denies an added package. Without a baseline the check
|
|
25
|
+
* does not run; a name moved between sections is not new.
|
|
26
|
+
*/
|
|
27
|
+
export declare function checkDependencies(options: TaskVerifyOptions, fail: FailFn): Promise<RunTaskResult | null>;
|
|
28
|
+
//# sourceMappingURL=dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/watcher/dependencies.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAUlE,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAQD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAelE;AAOD;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CASnC;AA2CD,8EAA8E;AAC9E,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAS7E;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAgC/B"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { readDecisions } from '../core/foundation/decisions.js';
|
|
4
|
+
import { resolveScope } from '../core/run/scope.js';
|
|
5
|
+
import { appendHarnessEvent } from '../harness/types.js';
|
|
6
|
+
/** The four manifest sections whose package names count as dependencies. */
|
|
7
|
+
const PACKAGE_SECTIONS = [
|
|
8
|
+
'dependencies',
|
|
9
|
+
'devDependencies',
|
|
10
|
+
'peerDependencies',
|
|
11
|
+
'optionalDependencies',
|
|
12
|
+
];
|
|
13
|
+
const MANIFEST_FILE_NAME = 'package.json';
|
|
14
|
+
function isRecord(value) {
|
|
15
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The sorted distinct package names a manifest declares across its four
|
|
19
|
+
* dependency sections. Malformed JSON and non-object sections contribute nothing.
|
|
20
|
+
*/
|
|
21
|
+
export function readManifestPackageNames(content) {
|
|
22
|
+
let data;
|
|
23
|
+
try {
|
|
24
|
+
data = JSON.parse(content);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
if (!isRecord(data))
|
|
30
|
+
return [];
|
|
31
|
+
const names = new Set();
|
|
32
|
+
for (const section of PACKAGE_SECTIONS) {
|
|
33
|
+
const record = data[section];
|
|
34
|
+
if (!isRecord(record))
|
|
35
|
+
continue;
|
|
36
|
+
for (const name of Object.keys(record))
|
|
37
|
+
names.add(name);
|
|
38
|
+
}
|
|
39
|
+
return [...names].sort();
|
|
40
|
+
}
|
|
41
|
+
async function readNamesAt(projectRoot, relativeFile) {
|
|
42
|
+
const content = await fs.readFile(path.join(projectRoot, relativeFile), 'utf8').catch(() => null);
|
|
43
|
+
return content === null ? [] : readManifestPackageNames(content);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Resolve `scope` and map each scoped `package.json` path to its sorted package
|
|
47
|
+
* names. A missing or unreadable manifest maps to an empty list. Without a
|
|
48
|
+
* scoped manifest the result is empty, and no unscoped file is ever read.
|
|
49
|
+
*/
|
|
50
|
+
export async function readScopedDependencies(projectRoot, scope) {
|
|
51
|
+
const dependencies = {};
|
|
52
|
+
for (const entry of await resolveScope(projectRoot, scope)) {
|
|
53
|
+
if (path.posix.basename(entry.relativePath) !== MANIFEST_FILE_NAME)
|
|
54
|
+
continue;
|
|
55
|
+
dependencies[entry.relativePath] = entry.absolutePath
|
|
56
|
+
? readManifestPackageNames(await fs.readFile(entry.absolutePath, 'utf8').catch(() => ''))
|
|
57
|
+
: [];
|
|
58
|
+
}
|
|
59
|
+
return dependencies;
|
|
60
|
+
}
|
|
61
|
+
/** The `dependencies` of the latest `measures` start event, or null without one. */
|
|
62
|
+
async function latestDependencyBaseline(specFolderPath, taskNumber) {
|
|
63
|
+
const raw = await fs
|
|
64
|
+
.readFile(path.join(specFolderPath, '.run', 'events', `${taskNumber}.jsonl`), 'utf8')
|
|
65
|
+
.catch(() => '');
|
|
66
|
+
let baseline = null;
|
|
67
|
+
for (const line of raw.split('\n')) {
|
|
68
|
+
if (!line.trim())
|
|
69
|
+
continue;
|
|
70
|
+
let event;
|
|
71
|
+
try {
|
|
72
|
+
event = JSON.parse(line);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const data = event.data;
|
|
78
|
+
if (event.type !== 'measures' || !isRecord(data) || data.phase !== 'start')
|
|
79
|
+
continue;
|
|
80
|
+
if (!isRecord(data.dependencies))
|
|
81
|
+
continue;
|
|
82
|
+
const record = {};
|
|
83
|
+
for (const [file, names] of Object.entries(data.dependencies)) {
|
|
84
|
+
if (Array.isArray(names))
|
|
85
|
+
record[file] = names.filter((n) => typeof n === 'string');
|
|
86
|
+
}
|
|
87
|
+
baseline = record;
|
|
88
|
+
}
|
|
89
|
+
return baseline;
|
|
90
|
+
}
|
|
91
|
+
function compareAdded(a, b) {
|
|
92
|
+
if (a.file !== b.file)
|
|
93
|
+
return a.file < b.file ? -1 : 1;
|
|
94
|
+
if (a.name === b.name)
|
|
95
|
+
return 0;
|
|
96
|
+
return a.name < b.name ? -1 : 1;
|
|
97
|
+
}
|
|
98
|
+
/** Accepted ADRs that deny one added package, in number order. */
|
|
99
|
+
function denyingAdrs(adrs, name) {
|
|
100
|
+
return adrs.filter((adr) => adr.status === 'accepted' && adr.denies.includes(name));
|
|
101
|
+
}
|
|
102
|
+
/** Dead marker body for a task that added packages an accepted ADR denies. */
|
|
103
|
+
export function formatDeniedDependencyMarker(lines) {
|
|
104
|
+
return [
|
|
105
|
+
'---',
|
|
106
|
+
'reason: denied_dependency',
|
|
107
|
+
'---',
|
|
108
|
+
'The task added packages an accepted ADR denies:',
|
|
109
|
+
...lines,
|
|
110
|
+
'',
|
|
111
|
+
].join('\n');
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* After the agent exits, compare each baseline manifest with its current names,
|
|
115
|
+
* append one `dependencies_added` event for the new pairs, and fail the task
|
|
116
|
+
* when an accepted ADR denies an added package. Without a baseline the check
|
|
117
|
+
* does not run; a name moved between sections is not new.
|
|
118
|
+
*/
|
|
119
|
+
export async function checkDependencies(options, fail) {
|
|
120
|
+
const { projectRoot, specFolderPath, taskNumber, config } = options;
|
|
121
|
+
const baseline = await latestDependencyBaseline(specFolderPath, taskNumber);
|
|
122
|
+
if (baseline === null)
|
|
123
|
+
return null;
|
|
124
|
+
const added = [];
|
|
125
|
+
for (const file of Object.keys(baseline).sort()) {
|
|
126
|
+
const previous = new Set(baseline[file] ?? []);
|
|
127
|
+
for (const name of await readNamesAt(projectRoot, file)) {
|
|
128
|
+
if (!previous.has(name))
|
|
129
|
+
added.push({ file, name });
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (added.length === 0)
|
|
133
|
+
return null;
|
|
134
|
+
added.sort(compareAdded);
|
|
135
|
+
await appendHarnessEvent(specFolderPath, taskNumber, {
|
|
136
|
+
type: 'dependencies_added',
|
|
137
|
+
timestamp: new Date().toISOString(),
|
|
138
|
+
data: { added },
|
|
139
|
+
});
|
|
140
|
+
const records = await readDecisions(projectRoot, config);
|
|
141
|
+
const lines = [];
|
|
142
|
+
for (const pair of added) {
|
|
143
|
+
for (const adr of denyingAdrs(records.adrs, pair.name)) {
|
|
144
|
+
lines.push(`- ${pair.name} in ${pair.file}: ADR ${adr.number}: ${adr.rule}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (lines.length === 0)
|
|
148
|
+
return null;
|
|
149
|
+
const error = `Added packages an accepted ADR denies: ${added.map((pair) => pair.name).join(', ')}`;
|
|
150
|
+
return fail('denied_dependency', formatDeniedDependencyMarker(lines), error);
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/watcher/dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DoneMarkerMetadata } from './outcome.js';
|
|
2
|
+
/** Resolve the metadata written to the done marker after a passing task. */
|
|
3
|
+
export declare function buildDoneMetadata(projectRoot: string, scope: string[]): Promise<DoneMarkerMetadata>;
|
|
4
|
+
//# sourceMappingURL=done-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"done-metadata.d.ts","sourceRoot":"","sources":["../../src/watcher/done-metadata.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,4EAA4E;AAC5E,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,kBAAkB,CAAC,CAc7B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SCOPE_RESOLVER_VERSION, computeTaskScopeHash } from '../core/run/scope-hash.js';
|
|
2
|
+
import { resolveProjectCommit } from './build-project.js';
|
|
3
|
+
import { resolveBuildInfo } from './build.js';
|
|
4
|
+
/** Resolve the metadata written to the done marker after a passing task. */
|
|
5
|
+
export async function buildDoneMetadata(projectRoot, scope) {
|
|
6
|
+
const [scopeHash, buildInfo, projectCommit] = await Promise.all([
|
|
7
|
+
computeTaskScopeHash(projectRoot, scope),
|
|
8
|
+
resolveBuildInfo(),
|
|
9
|
+
resolveProjectCommit(projectRoot),
|
|
10
|
+
]);
|
|
11
|
+
return {
|
|
12
|
+
scopeHash: scopeHash.hash,
|
|
13
|
+
buildStamp: buildInfo.commit,
|
|
14
|
+
projectCommit,
|
|
15
|
+
exitCode: 0,
|
|
16
|
+
fileHashes: scopeHash.fileHashes,
|
|
17
|
+
scopeResolver: SCOPE_RESOLVER_VERSION,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=done-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"done-metadata.js","sourceRoot":"","sources":["../../src/watcher/done-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,KAAe;IAEf,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9D,oBAAoB,CAAC,WAAW,EAAE,KAAK,CAAC;QACxC,gBAAgB,EAAE;QAClB,oBAAoB,CAAC,WAAW,CAAC;KAClC,CAAC,CAAC;IACH,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,IAAI;QACzB,UAAU,EAAE,SAAS,CAAC,MAAM;QAC5B,aAAa;QACb,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,aAAa,EAAE,sBAAsB;KACtC,CAAC;AACJ,CAAC"}
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* its own module so `outcome.ts` stays within the strict runner line budget as
|
|
4
4
|
* the reason set grows.
|
|
5
5
|
*/
|
|
6
|
-
export type RunTaskFailureReason = 'spec_conflict' | 'already_running' | 'no_result' | 'verify_red' | 'verify_precondition' | 'verify_path_missing' | 'change_verify_red' | 'crashed' | 'timeout' | 'undeclared_test_change' | 'regressed';
|
|
6
|
+
export type RunTaskFailureReason = 'spec_conflict' | 'already_running' | 'no_result' | 'verify_red' | 'verify_precondition' | 'verify_path_missing' | 'denied_dependency' | 'change_verify_red' | 'crashed' | 'timeout' | 'undeclared_test_change' | 'blocked' | 'baseline_red' | 'regressed';
|
|
7
7
|
//# sourceMappingURL=failure-reason.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"failure-reason.d.ts","sourceRoot":"","sources":["../../src/watcher/failure-reason.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAC5B,eAAe,GACf,iBAAiB,GACjB,WAAW,GACX,YAAY,GACZ,qBAAqB,GACrB,qBAAqB,GACrB,mBAAmB,GACnB,SAAS,GACT,SAAS,GACT,wBAAwB,GACxB,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"failure-reason.d.ts","sourceRoot":"","sources":["../../src/watcher/failure-reason.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAC5B,eAAe,GACf,iBAAiB,GACjB,WAAW,GACX,YAAY,GACZ,qBAAqB,GACrB,qBAAqB,GACrB,mBAAmB,GACnB,mBAAmB,GACnB,SAAS,GACT,SAAS,GACT,wBAAwB,GACxB,SAAS,GACT,cAAc,GACd,WAAW,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The focused scenario-test run the watcher makes after an agent exits and
|
|
3
|
+
* before the task verify. A failing collected scenario ends the attempt as a
|
|
4
|
+
* `verify_red` death; anything else lets the full verify decide completion.
|
|
5
|
+
*/
|
|
6
|
+
import type { RunTaskResult } from './outcome.js';
|
|
7
|
+
import type { FailFn, TaskVerifyOptions } from './task-verify.js';
|
|
8
|
+
/**
|
|
9
|
+
* The last check of `checkBlockedFirst`. Collects the task's focused scenarios
|
|
10
|
+
* and files, runs the configured command through `runFocusedTests`, and appends
|
|
11
|
+
* one `focused_ran` event with the run's command, inputs, outcome, and output.
|
|
12
|
+
* Returns the `verify_red` death when a collected scenario test failed, and
|
|
13
|
+
* null when there is nothing to run or the run passed or was a problem, so the
|
|
14
|
+
* verify still runs and alone decides the task.
|
|
15
|
+
*/
|
|
16
|
+
export declare function checkFocusedTests(options: TaskVerifyOptions, fail: FailFn): Promise<RunTaskResult | null>;
|
|
17
|
+
//# sourceMappingURL=focused-verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focused-verify.d.ts","sourceRoot":"","sources":["../../src/watcher/focused-verify.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAgBlE;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAwB/B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The focused scenario-test run the watcher makes after an agent exits and
|
|
3
|
+
* before the task verify. A failing collected scenario ends the attempt as a
|
|
4
|
+
* `verify_red` death; anything else lets the full verify decide completion.
|
|
5
|
+
*/
|
|
6
|
+
import { collectFocusedTests, runFocusedTests } from '../core/run/focused-tests.js';
|
|
7
|
+
import { appendHarnessEvent } from '../harness/types.js';
|
|
8
|
+
/** Dead marker for a task whose focused scenario tests failed: reason, flag, command, output. */
|
|
9
|
+
function formatFocusedDeadMarker(command, output) {
|
|
10
|
+
const body = output === '' || output.endsWith('\n') ? output : `${output}\n`;
|
|
11
|
+
return [
|
|
12
|
+
'---',
|
|
13
|
+
'reason: verify_red',
|
|
14
|
+
'focused: true',
|
|
15
|
+
`command: "${command}"`,
|
|
16
|
+
'---',
|
|
17
|
+
'Watcher focused scenario tests failed:',
|
|
18
|
+
body,
|
|
19
|
+
].join('\n');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The last check of `checkBlockedFirst`. Collects the task's focused scenarios
|
|
23
|
+
* and files, runs the configured command through `runFocusedTests`, and appends
|
|
24
|
+
* one `focused_ran` event with the run's command, inputs, outcome, and output.
|
|
25
|
+
* Returns the `verify_red` death when a collected scenario test failed, and
|
|
26
|
+
* null when there is nothing to run or the run passed or was a problem, so the
|
|
27
|
+
* verify still runs and alone decides the task.
|
|
28
|
+
*/
|
|
29
|
+
export async function checkFocusedTests(options, fail) {
|
|
30
|
+
const { projectRoot, specFolderPath, taskNumber, taskData, config } = options;
|
|
31
|
+
const collection = await collectFocusedTests(projectRoot, config, taskData.scope);
|
|
32
|
+
const run = await runFocusedTests(collection, projectRoot, specFolderPath, config);
|
|
33
|
+
if (run === null)
|
|
34
|
+
return null;
|
|
35
|
+
await appendHarnessEvent(specFolderPath, taskNumber, {
|
|
36
|
+
type: 'focused_ran',
|
|
37
|
+
timestamp: new Date().toISOString(),
|
|
38
|
+
data: {
|
|
39
|
+
command: run.command,
|
|
40
|
+
files: [...run.files],
|
|
41
|
+
scenarios: [...run.scenarios],
|
|
42
|
+
outcome: run.outcome,
|
|
43
|
+
exitCode: run.exitCode,
|
|
44
|
+
duration: run.duration,
|
|
45
|
+
timedOut: run.timedOut,
|
|
46
|
+
output: run.output,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
if (run.outcome !== 'failed')
|
|
50
|
+
return null;
|
|
51
|
+
const error = 'Watcher focused scenario tests failed';
|
|
52
|
+
return fail('verify_red', formatFocusedDeadMarker(run.command, run.output), error);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=focused-verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focused-verify.js","sourceRoot":"","sources":["../../src/watcher/focused-verify.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAIzD,iGAAiG;AACjG,SAAS,uBAAuB,CAAC,OAAe,EAAE,MAAc;IAC9D,MAAM,IAAI,GAAG,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAC7E,OAAO;QACL,KAAK;QACL,oBAAoB;QACpB,eAAe;QACf,aAAa,OAAO,GAAG;QACvB,KAAK;QACL,wCAAwC;QACxC,IAAI;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAA0B,EAC1B,IAAY;IAEZ,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC9E,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClF,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IACnF,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,kBAAkB,CAAC,cAAc,EAAE,UAAU,EAAE;QACnD,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE;YACJ,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;YACrB,SAAS,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;YAC7B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB;KACF,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,KAAK,GAAG,uCAAuC,CAAC;IACtD,OAAO,IAAI,CAAC,YAAY,EAAE,uBAAuB,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;AACrF,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { OsqConfig } from '../core/foundation/config.js';
|
|
2
|
+
import type { Logger } from '../core/foundation/logger.js';
|
|
3
|
+
import { type VcsMovedField } from '../core/vcs/snapshot.js';
|
|
4
|
+
export interface GitGuardOptions {
|
|
5
|
+
readonly projectRoot: string;
|
|
6
|
+
readonly specFolderPath: string;
|
|
7
|
+
readonly taskNumber: string;
|
|
8
|
+
readonly scope: readonly string[];
|
|
9
|
+
readonly config: OsqConfig;
|
|
10
|
+
readonly logger?: Logger;
|
|
11
|
+
}
|
|
12
|
+
/** The per-task guard `runTask` opens before spawn and checks after exit. */
|
|
13
|
+
export interface GitGuard {
|
|
14
|
+
check(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
/** A warning naming what moved, how to put each back, and the human-edit caveat. */
|
|
17
|
+
export declare function formatVcsViolationWarning(moved: readonly VcsMovedField[]): string;
|
|
18
|
+
/**
|
|
19
|
+
* Select through `selectVcs` and capture the git state before the agent spawns.
|
|
20
|
+
* Returns null when `NoVcs` is selected or a git read fails; a failed read logs
|
|
21
|
+
* a warning and records nothing.
|
|
22
|
+
*/
|
|
23
|
+
export declare function beginGitGuard(options: GitGuardOptions): Promise<GitGuard | null>;
|
|
24
|
+
//# sourceMappingURL=git-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-guard.d.ts","sourceRoot":"","sources":["../../src/watcher/git-guard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAG3D,OAAO,EAEL,KAAK,aAAa,EAKnB,MAAM,yBAAyB,CAAC;AAIjC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,6EAA6E;AAC7E,MAAM,WAAW,QAAQ;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAkBD,oFAAoF;AACpF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,MAAM,CAGjF;AA2ED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAUtF"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { resolveScope } from '../core/run/scope.js';
|
|
3
|
+
import { selectVcs } from '../core/vcs/select.js';
|
|
4
|
+
import { captureSnapshot, compareSnapshots, } from '../core/vcs/snapshot.js';
|
|
5
|
+
import { appendHarnessEvent } from '../harness/types.js';
|
|
6
|
+
/** The recovery text for each moved field; osq only prints it, never runs git. */
|
|
7
|
+
const PUT_BACK = {
|
|
8
|
+
head: 'git reset --soft <before>',
|
|
9
|
+
branch: 'git switch <before>',
|
|
10
|
+
index: 'git restore --staged <paths>',
|
|
11
|
+
stash: 'git stash pop',
|
|
12
|
+
};
|
|
13
|
+
function errorMessage(err) {
|
|
14
|
+
return err instanceof Error ? err.message : String(err);
|
|
15
|
+
}
|
|
16
|
+
function warn(options, message) {
|
|
17
|
+
options.logger?.warn(message);
|
|
18
|
+
}
|
|
19
|
+
/** A warning naming what moved, how to put each back, and the human-edit caveat. */
|
|
20
|
+
export function formatVcsViolationWarning(moved) {
|
|
21
|
+
const parts = moved.map((field) => `${field} moved (put it back with \`${PUT_BACK[field]}\`)`);
|
|
22
|
+
return `git state changed during the task: ${parts.join('; ')}. A human using git in this checkout during the task causes the same result.`;
|
|
23
|
+
}
|
|
24
|
+
/** The sorted changed files that are outside the resolved scope and change folder. */
|
|
25
|
+
async function scopeViolations(options, changedFiles) {
|
|
26
|
+
const changePrefix = path
|
|
27
|
+
.relative(options.projectRoot, options.specFolderPath)
|
|
28
|
+
.split(path.sep)
|
|
29
|
+
.join('/');
|
|
30
|
+
const resolved = await resolveScope(options.projectRoot, options.scope);
|
|
31
|
+
const inScope = new Set(resolved.filter((entry) => entry.absolutePath !== null).map((entry) => entry.relativePath));
|
|
32
|
+
return changedFiles
|
|
33
|
+
.filter((file) => !inScope.has(file))
|
|
34
|
+
.filter((file) => file !== changePrefix && !file.startsWith(`${changePrefix}/`))
|
|
35
|
+
.sort();
|
|
36
|
+
}
|
|
37
|
+
async function appendVcsViolation(options, before, after, moved) {
|
|
38
|
+
await appendHarnessEvent(options.specFolderPath, options.taskNumber, {
|
|
39
|
+
type: 'vcs_violation',
|
|
40
|
+
timestamp: new Date().toISOString(),
|
|
41
|
+
data: { moved, before, after },
|
|
42
|
+
});
|
|
43
|
+
warn(options, formatVcsViolationWarning(moved));
|
|
44
|
+
}
|
|
45
|
+
async function appendScopeViolation(options, files) {
|
|
46
|
+
await appendHarnessEvent(options.specFolderPath, options.taskNumber, {
|
|
47
|
+
type: 'scope_violation',
|
|
48
|
+
timestamp: new Date().toISOString(),
|
|
49
|
+
data: { files },
|
|
50
|
+
});
|
|
51
|
+
warn(options, `files changed outside the task's scope: ${files.join(', ')}`);
|
|
52
|
+
}
|
|
53
|
+
async function checkGitGuard(vcs, before, options) {
|
|
54
|
+
let after;
|
|
55
|
+
let comparison;
|
|
56
|
+
try {
|
|
57
|
+
after = await captureSnapshot(vcs, options.projectRoot);
|
|
58
|
+
comparison = compareSnapshots(before, after);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
warn(options, `git state not recorded: ${errorMessage(err)}`);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
if (comparison.moved.length > 0) {
|
|
66
|
+
await appendVcsViolation(options, before.values, after.values, comparison.moved);
|
|
67
|
+
}
|
|
68
|
+
const files = await scopeViolations(options, comparison.changedFiles);
|
|
69
|
+
if (files.length > 0) {
|
|
70
|
+
await appendScopeViolation(options, files);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
warn(options, `git state not recorded: ${errorMessage(err)}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Select through `selectVcs` and capture the git state before the agent spawns.
|
|
79
|
+
* Returns null when `NoVcs` is selected or a git read fails; a failed read logs
|
|
80
|
+
* a warning and records nothing.
|
|
81
|
+
*/
|
|
82
|
+
export async function beginGitGuard(options) {
|
|
83
|
+
try {
|
|
84
|
+
const vcs = await selectVcs(options.projectRoot, options.config);
|
|
85
|
+
if (vcs.kind !== 'git')
|
|
86
|
+
return null;
|
|
87
|
+
const before = await captureSnapshot(vcs, options.projectRoot);
|
|
88
|
+
return { check: () => checkGitGuard(vcs, before, options) };
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
warn(options, `git checks off: ${errorMessage(err)}`);
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=git-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-guard.js","sourceRoot":"","sources":["../../src/watcher/git-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { OsqConfig } from '../core/foundation/config.js';
|
|
2
|
+
import type { Logger } from '../core/foundation/logger.js';
|
|
3
|
+
export interface InstructionsDriftOptions {
|
|
4
|
+
readonly projectRoot: string;
|
|
5
|
+
readonly specFolderPath: string;
|
|
6
|
+
readonly taskNumber: string;
|
|
7
|
+
readonly config: OsqConfig;
|
|
8
|
+
readonly logger?: Logger;
|
|
9
|
+
/** Target-wide execution attempt; the check runs only for attempt 1. */
|
|
10
|
+
readonly attempt: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Before a task's first attempt, compares the instruction inputs pinned at
|
|
14
|
+
* approval with the current tree: AGENTS.md and, when the manifest recorded
|
|
15
|
+
* them, the governing ADRs. When anything differs it appends one
|
|
16
|
+
* `instructions_changed` event and prints one warning. The task still runs.
|
|
17
|
+
* Later attempts, an unapproved manifest, and a stream that already recorded
|
|
18
|
+
* drift do nothing.
|
|
19
|
+
*/
|
|
20
|
+
export declare function checkInstructionsDrift(opts: InstructionsDriftOptions): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=instructions-drift.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructions-drift.d.ts","sourceRoot":"","sources":["../../src/watcher/instructions-drift.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAI3D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AA8FD;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B1F"}
|