@matteeh/osq 0.2.0 → 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-capability.d.ts +17 -0
- package/dist/core/spec/digest-capability.d.ts.map +1 -0
- package/dist/core/spec/digest-capability.js +89 -0
- package/dist/core/spec/digest-capability.js.map +1 -0
- 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-flags.d.ts +1 -0
- package/dist/core/spec/digest-flags.d.ts.map +1 -1
- package/dist/core/spec/digest-flags.js +16 -16
- package/dist/core/spec/digest-flags.js.map +1 -1
- 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 +6 -3
- package/dist/core/spec/digest.d.ts.map +1 -1
- package/dist/core/spec/digest.js +18 -32
- 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 +114 -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/build-project.d.ts +11 -0
- package/dist/watcher/build-project.d.ts.map +1 -0
- package/dist/watcher/build-project.js +36 -0
- package/dist/watcher/build-project.js.map +1 -0
- package/dist/watcher/build.d.ts +8 -5
- package/dist/watcher/build.d.ts.map +1 -1
- package/dist/watcher/build.js +35 -39
- package/dist/watcher/build.js.map +1 -1
- 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/fingerprint.d.ts +2 -2
- package/dist/watcher/fingerprint.d.ts.map +1 -1
- package/dist/watcher/fingerprint.js +31 -2
- package/dist/watcher/fingerprint.js.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 +37 -51
- 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/outcome.d.ts +2 -0
- package/dist/watcher/outcome.d.ts.map +1 -1
- package/dist/watcher/outcome.js +5 -1
- package/dist/watcher/outcome.js.map +1 -1
- package/dist/watcher/regression.d.ts +10 -5
- package/dist/watcher/regression.d.ts.map +1 -1
- package/dist/watcher/regression.js +29 -19
- 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 +11 -1
- 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,37 @@
|
|
|
1
|
+
import { readPlanningSessions } from './planning-records.js';
|
|
2
|
+
/** Whether an exit recorded a token count that a price could be applied to. */
|
|
3
|
+
function hasRecordedTokens(session) {
|
|
4
|
+
const exited = session.exited;
|
|
5
|
+
if (!exited)
|
|
6
|
+
return false;
|
|
7
|
+
const { usage, slice } = exited.data;
|
|
8
|
+
const sliceTokens = slice ? slice.tokens.input !== null || slice.tokens.output !== null : false;
|
|
9
|
+
const usageTokens = usage.inputTokens !== null || usage.outputTokens !== null;
|
|
10
|
+
return sliceTokens || usageTokens;
|
|
11
|
+
}
|
|
12
|
+
/** The exact configuration key an approver adds for a missing model price. */
|
|
13
|
+
export function formatPriceKey(model) {
|
|
14
|
+
return `planning.prices[${JSON.stringify(model)}]`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Sorted distinct `plan_started` models of sessions that recorded tokens but
|
|
18
|
+
* have no `planning.prices` entry. A missing `prices` map leaves every model
|
|
19
|
+
* unpriced.
|
|
20
|
+
*/
|
|
21
|
+
export async function findUnpricedPlanningModels(folders, prices) {
|
|
22
|
+
const missing = new Set();
|
|
23
|
+
for (const folder of folders) {
|
|
24
|
+
for (const session of await readPlanningSessions(folder)) {
|
|
25
|
+
const model = session.started?.data.model ?? null;
|
|
26
|
+
if (!model)
|
|
27
|
+
continue;
|
|
28
|
+
if (prices && Object.hasOwn(prices, model))
|
|
29
|
+
continue;
|
|
30
|
+
if (!hasRecordedTokens(session))
|
|
31
|
+
continue;
|
|
32
|
+
missing.add(model);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return [...missing].sort();
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=planning-price-gaps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planning-price-gaps.js","sourceRoot":"","sources":["../../../src/core/report/planning-price-gaps.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAEnF,+EAA+E;AAC/E,SAAS,iBAAiB,CAAC,OAAwB;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACrC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAChG,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC;IAC9E,OAAO,WAAW,IAAI,WAAW,CAAC;AACpC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,mBAAmB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAA0B,EAC1B,MAA2D;IAE3D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,MAAM,OAAO,IAAI,MAAM,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;YAClD,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;gBAAE,SAAS;YACrD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;gBAAE,SAAS;YAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning-slice-lookup.d.ts","sourceRoot":"","sources":["../../../src/core/report/planning-slice-lookup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"planning-slice-lookup.d.ts","sourceRoot":"","sources":["../../../src/core/report/planning-slice-lookup.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAa,GAC5C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASxB;AAyGD;;;GAGG;AACH,wBAAsB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmB5F"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import { readManifestApprovedAt } from '../run/manifest-approval.js';
|
|
3
4
|
import { parseFrontmatter } from '../spec/parser.js';
|
|
4
5
|
import { getRejectedMarkerPath } from '../status/layout.js';
|
|
5
6
|
import { readPlanRecords } from './planning-records.js';
|
|
@@ -39,16 +40,9 @@ async function directApproval(changeFolder, sessionId) {
|
|
|
39
40
|
return recorded;
|
|
40
41
|
return manifestApproval(changeFolder);
|
|
41
42
|
}
|
|
42
|
-
/**
|
|
43
|
+
/** Trusted manifest approval for one folder, or null. */
|
|
43
44
|
async function manifestApproval(changeFolder) {
|
|
44
|
-
|
|
45
|
-
const raw = await fs.readFile(path.join(changeFolder, '.run', 'manifest.json'), 'utf8');
|
|
46
|
-
const value = JSON.parse(raw).approvedAt;
|
|
47
|
-
return validIso(typeof value === 'string' ? value : null);
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
45
|
+
return readManifestApprovedAt(changeFolder);
|
|
52
46
|
}
|
|
53
47
|
async function isDirectory(target) {
|
|
54
48
|
return fs.stat(target).then((stat) => stat.isDirectory(), () => false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning-slice-lookup.js","sourceRoot":"","sources":["../../../src/core/report/planning-slice-lookup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,YAAoB,EACpB,SAAiB,EACjB,QAAoC,IAAI,GAAG,EAAE;IAE7C,MAAM,GAAG,GAAG,GAAG,YAAY,SAAS,SAAS,EAAE,CAAC;IAChD,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IAClD,IAAI,QAAQ,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC7D,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QAC5D,QAAQ,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACzB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,6EAA6E;AAC7E,KAAK,UAAU,qBAAqB,CAClC,YAAoB,EACpB,SAAiB;IAEjB,KAAK,MAAM,MAAM,IAAI,MAAM,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC;QACzD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;YAAE,SAAS;QAC9E,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACnF,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,QAAQ,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,sEAAsE;AACtE,KAAK,UAAU,cAAc,CAAC,YAAoB,EAAE,SAAiB;IACnE,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IACtE,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACvC,OAAO,gBAAgB,CAAC,YAAY,CAAC,CAAC;AACxC,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"planning-slice-lookup.js","sourceRoot":"","sources":["../../../src/core/report/planning-slice-lookup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { OsqConfig } from '../foundation/config.js';
|
|
2
|
+
/** Exact heading of the plan prompt's optional disclosure section. */
|
|
3
|
+
export declare const RECENT_DISCLOSURES_HEADING = "## Recent executor disclosures";
|
|
4
|
+
/** Opening sentence that labels every quoted disclosure as an unverified claim. */
|
|
5
|
+
export declare const DISCLOSURES_CLAIM = "Executor claims from result files, not verified facts. Check them against the code before relying on them.";
|
|
6
|
+
/** The marker appended to the last entry when the character budget cuts it. */
|
|
7
|
+
export declare const TRUNCATION_MARKER = "[truncated]";
|
|
8
|
+
/** Prefix every line of a disclosure's text with `> ` so none reads as a heading. */
|
|
9
|
+
export declare function quoteDisclosureText(text: string): string;
|
|
10
|
+
/** Cut an entry to `limit` characters, keeping the trailing `[truncated]` mark. */
|
|
11
|
+
export declare function truncateDisclosureEntry(entry: string, limit: number): string;
|
|
12
|
+
/**
|
|
13
|
+
* Body of the plan prompt's disclosure section, or null when the configured
|
|
14
|
+
* recent archived changes hold no real executor disclosure. Entries are newest
|
|
15
|
+
* change first and in task order, and total at most the configured budget.
|
|
16
|
+
*/
|
|
17
|
+
export declare function formatRecentDisclosures(projectRoot: string, config: OsqConfig): Promise<string | null>;
|
|
18
|
+
//# sourceMappingURL=recent-disclosures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recent-disclosures.d.ts","sourceRoot":"","sources":["../../../src/core/report/recent-disclosures.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIzD,sEAAsE;AACtE,eAAO,MAAM,0BAA0B,mCAAmC,CAAC;AAE3E,mFAAmF;AACnF,eAAO,MAAM,iBAAiB,+GACgF,CAAC;AAE/G,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAsC/C,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxD;AAcD,mFAAmF;AACnF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAM5E;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmCxB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { DEFAULT_PLANNING_CONFIG, } from '../foundation/config-planning.js';
|
|
3
|
+
import { listChanges } from '../status/change-locations.js';
|
|
4
|
+
import { readChangeDisclosures } from './result-sections.js';
|
|
5
|
+
/** Exact heading of the plan prompt's optional disclosure section. */
|
|
6
|
+
export const RECENT_DISCLOSURES_HEADING = '## Recent executor disclosures';
|
|
7
|
+
/** Opening sentence that labels every quoted disclosure as an unverified claim. */
|
|
8
|
+
export const DISCLOSURES_CLAIM = 'Executor claims from result files, not verified facts. Check them against the code before relying on them.';
|
|
9
|
+
/** The marker appended to the last entry when the character budget cuts it. */
|
|
10
|
+
export const TRUNCATION_MARKER = '[truncated]';
|
|
11
|
+
/** Real disclosure sections in the order they are quoted within a task. */
|
|
12
|
+
const DISCLOSURE_SECTIONS = [
|
|
13
|
+
{ display: 'deviated', key: 'deviated' },
|
|
14
|
+
{ display: 'missing context', key: 'missingContext' },
|
|
15
|
+
{ display: 'outside scope', key: 'outsideScope' },
|
|
16
|
+
];
|
|
17
|
+
function numericPrefix(name) {
|
|
18
|
+
const match = name.match(/^(\d+)/);
|
|
19
|
+
return match ? Number.parseInt(match[1], 10) : null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Newest archived folders first by numeric prefix, capped at `limit`. Mirrors
|
|
23
|
+
* the bounded listing in `report.ts` without importing it.
|
|
24
|
+
*/
|
|
25
|
+
function listRecentArchiveFolders(folders, limit) {
|
|
26
|
+
const sorted = [...folders].sort((a, b) => {
|
|
27
|
+
const nameA = path.basename(a);
|
|
28
|
+
const nameB = path.basename(b);
|
|
29
|
+
const numA = numericPrefix(nameA);
|
|
30
|
+
const numB = numericPrefix(nameB);
|
|
31
|
+
if (numA !== null && numB !== null) {
|
|
32
|
+
if (numA !== numB)
|
|
33
|
+
return numB - numA;
|
|
34
|
+
return nameA.localeCompare(nameB);
|
|
35
|
+
}
|
|
36
|
+
if (numA !== null)
|
|
37
|
+
return -1;
|
|
38
|
+
if (numB !== null)
|
|
39
|
+
return 1;
|
|
40
|
+
return nameA.localeCompare(nameB);
|
|
41
|
+
});
|
|
42
|
+
return sorted.slice(0, limit);
|
|
43
|
+
}
|
|
44
|
+
/** Prefix every line of a disclosure's text with `> ` so none reads as a heading. */
|
|
45
|
+
export function quoteDisclosureText(text) {
|
|
46
|
+
return text
|
|
47
|
+
.split(/\r?\n/)
|
|
48
|
+
.map((line) => `> ${line}`)
|
|
49
|
+
.join('\n');
|
|
50
|
+
}
|
|
51
|
+
/** One quoted disclosure entry: a label line followed by its `> `-prefixed text. */
|
|
52
|
+
function disclosureEntry(folderName, task, display, key) {
|
|
53
|
+
const text = task[key];
|
|
54
|
+
if (typeof text !== 'string' || text.length === 0)
|
|
55
|
+
return null;
|
|
56
|
+
return `${folderName} task ${task.task}, ${display}:\n${quoteDisclosureText(text)}`;
|
|
57
|
+
}
|
|
58
|
+
/** Cut an entry to `limit` characters, keeping the trailing `[truncated]` mark. */
|
|
59
|
+
export function truncateDisclosureEntry(entry, limit) {
|
|
60
|
+
if (entry.length <= limit)
|
|
61
|
+
return entry;
|
|
62
|
+
const budget = limit - TRUNCATION_MARKER.length;
|
|
63
|
+
if (budget <= 0)
|
|
64
|
+
return TRUNCATION_MARKER;
|
|
65
|
+
const cut = entry.slice(0, budget).replace(/\n+$/, '');
|
|
66
|
+
return `${cut}${TRUNCATION_MARKER}`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Body of the plan prompt's disclosure section, or null when the configured
|
|
70
|
+
* recent archived changes hold no real executor disclosure. Entries are newest
|
|
71
|
+
* change first and in task order, and total at most the configured budget.
|
|
72
|
+
*/
|
|
73
|
+
export async function formatRecentDisclosures(projectRoot, config) {
|
|
74
|
+
const limits = (config.planning ?? DEFAULT_PLANNING_CONFIG)
|
|
75
|
+
.disclosures;
|
|
76
|
+
const archived = await listChanges(projectRoot, config, ['archived']);
|
|
77
|
+
const folders = listRecentArchiveFolders(archived.map((change) => change.folderPath), limits.recentChanges);
|
|
78
|
+
const entries = [];
|
|
79
|
+
for (const folder of folders) {
|
|
80
|
+
const folderName = path.basename(folder);
|
|
81
|
+
for (const task of await readChangeDisclosures(folder)) {
|
|
82
|
+
for (const section of DISCLOSURE_SECTIONS) {
|
|
83
|
+
const entry = disclosureEntry(folderName, task, section.display, section.key);
|
|
84
|
+
if (entry !== null)
|
|
85
|
+
entries.push(entry);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (entries.length === 0)
|
|
90
|
+
return null;
|
|
91
|
+
const parts = [];
|
|
92
|
+
let used = 0;
|
|
93
|
+
for (const entry of entries) {
|
|
94
|
+
const remaining = limits.maxCharacters - used;
|
|
95
|
+
if (entry.length <= remaining) {
|
|
96
|
+
parts.push(entry);
|
|
97
|
+
used += entry.length;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
parts.push(truncateDisclosureEntry(entry, Math.max(remaining, TRUNCATION_MARKER.length)));
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
return `${DISCLOSURES_CLAIM}\n\n${parts.join('\n\n')}`;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=recent-disclosures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recent-disclosures.js","sourceRoot":"","sources":["../../../src/core/report/recent-disclosures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type DisclosureCounts } from './result-sections.js';
|
|
2
|
+
/** One change with at least one executor disclosure, by change id. */
|
|
3
|
+
export interface DisclosureEntry extends DisclosureCounts {
|
|
4
|
+
readonly change: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Every active or archived change whose task result files hold a real
|
|
8
|
+
* `## Deviated`, `## Missing context`, or `## Outside scope` section, ordered by
|
|
9
|
+
* change id. A change with no such section is absent.
|
|
10
|
+
*/
|
|
11
|
+
export declare function collectDisclosures(folders: readonly string[]): Promise<DisclosureEntry[]>;
|
|
12
|
+
/** Render the `Executor disclosures:` section body, or `(none)`. */
|
|
13
|
+
export declare function formatDisclosures(entries: readonly DisclosureEntry[]): string[];
|
|
14
|
+
//# sourceMappingURL=record-disclosures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-disclosures.d.ts","sourceRoot":"","sources":["../../../src/core/report/record-disclosures.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAA0B,MAAM,sBAAsB,CAAC;AAErF,sEAAsE;AACtE,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAQ/F;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,EAAE,CAY/E"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { changeIdOfFolder } from './record-rework.js';
|
|
2
|
+
import { countChangeDisclosures } from './result-sections.js';
|
|
3
|
+
/**
|
|
4
|
+
* Every active or archived change whose task result files hold a real
|
|
5
|
+
* `## Deviated`, `## Missing context`, or `## Outside scope` section, ordered by
|
|
6
|
+
* change id. A change with no such section is absent.
|
|
7
|
+
*/
|
|
8
|
+
export async function collectDisclosures(folders) {
|
|
9
|
+
const entries = [];
|
|
10
|
+
for (const folderPath of folders) {
|
|
11
|
+
const counts = await countChangeDisclosures(folderPath);
|
|
12
|
+
if (counts.deviated + counts.missingContext + counts.outsideScope === 0)
|
|
13
|
+
continue;
|
|
14
|
+
entries.push({ change: changeIdOfFolder(folderPath), ...counts });
|
|
15
|
+
}
|
|
16
|
+
return entries.sort((a, b) => a.change.localeCompare(b.change));
|
|
17
|
+
}
|
|
18
|
+
/** Render the `Executor disclosures:` section body, or `(none)`. */
|
|
19
|
+
export function formatDisclosures(entries) {
|
|
20
|
+
const lines = ['Executor disclosures:'];
|
|
21
|
+
if (entries.length === 0) {
|
|
22
|
+
lines.push(' (none)');
|
|
23
|
+
return lines;
|
|
24
|
+
}
|
|
25
|
+
for (const entry of entries) {
|
|
26
|
+
lines.push(` ${entry.change}: deviated ${entry.deviated}, missing context ${entry.missingContext}, outside scope ${entry.outsideScope}`);
|
|
27
|
+
}
|
|
28
|
+
return lines;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=record-disclosures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-disclosures.js","sourceRoot":"","sources":["../../../src/core/report/record-disclosures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAyB,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAOrF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA0B;IACjE,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,YAAY,KAAK,CAAC;YAAE,SAAS;QAClF,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,UAAU,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,iBAAiB,CAAC,OAAmC;IACnE,MAAM,KAAK,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,MAAM,cAAc,KAAK,CAAC,QAAQ,qBAAqB,KAAK,CAAC,cAAc,mBAAmB,KAAK,CAAC,YAAY,EAAE,CAC9H,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { PlanningPrice } from '../foundation/config-planning.js';
|
|
2
|
+
/** One cost source's total dollars and contributing session count. */
|
|
3
|
+
export interface CostSourceBucket {
|
|
4
|
+
readonly total: number;
|
|
5
|
+
readonly sessions: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Recorded planning cost split by provenance, plus the report-time estimates
|
|
9
|
+
* `planning.prices` supplies for counted slices approval left unpriced.
|
|
10
|
+
*/
|
|
11
|
+
export interface PlanningCostBySource {
|
|
12
|
+
readonly harness: CostSourceBucket;
|
|
13
|
+
readonly approvalPrice: CostSourceBucket;
|
|
14
|
+
readonly reportEstimate: CostSourceBucket;
|
|
15
|
+
readonly totalWithEstimates: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Split every valid session's recorded cost into `harness` or `approvalPrice`
|
|
19
|
+
* by its slice `costSource`, and estimate each unpriced sliced session whose
|
|
20
|
+
* model `planning.prices` prices. No record is written.
|
|
21
|
+
*/
|
|
22
|
+
export declare function collectCostBySource(folders: readonly string[], prices: Readonly<Record<string, PlanningPrice>> | undefined): Promise<PlanningCostBySource>;
|
|
23
|
+
/** One labelled line per source plus how much of the total is estimated. */
|
|
24
|
+
export declare function formatPlanningCostBySource(bySource: PlanningCostBySource | undefined): string[];
|
|
25
|
+
//# sourceMappingURL=record-estimates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-estimates.d.ts","sourceRoot":"","sources":["../../../src/core/report/record-estimates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAKtE,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,gBAAgB,CAAC;IAC1C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAgCD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG,SAAS,GAC1D,OAAO,CAAC,oBAAoB,CAAC,CAiC/B;AAOD,4EAA4E;AAC5E,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,SAAS,GAAG,MAAM,EAAE,CAS/F"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { readPlanningSessions } from './planning-records.js';
|
|
2
|
+
import { resolveSliceCost } from './planning-slice-measures.js';
|
|
3
|
+
/**
|
|
4
|
+
* The `planning.prices` estimate for a session whose exit recorded no cost but
|
|
5
|
+
* whose slice holds input and output tokens, using one turn carrying the slice
|
|
6
|
+
* tokens and the `plan_started` model so a single-model session matches what
|
|
7
|
+
* approval would have recorded. Null when the slice or price entry is missing.
|
|
8
|
+
*/
|
|
9
|
+
function estimateSessionCost(session, prices) {
|
|
10
|
+
const exited = session.exited;
|
|
11
|
+
const slice = exited?.data.slice;
|
|
12
|
+
const model = session.started?.data.model ?? null;
|
|
13
|
+
if (!exited || !slice || model === null || !prices?.[model])
|
|
14
|
+
return null;
|
|
15
|
+
if (slice.tokens.input === null || slice.tokens.output === null)
|
|
16
|
+
return null;
|
|
17
|
+
const turn = {
|
|
18
|
+
timestamp: exited.timestamp,
|
|
19
|
+
model,
|
|
20
|
+
inputTokens: slice.tokens.input,
|
|
21
|
+
outputTokens: slice.tokens.output,
|
|
22
|
+
cacheReadTokens: slice.tokens.cacheRead,
|
|
23
|
+
cacheWriteTokens: slice.tokens.cacheWrite,
|
|
24
|
+
reasoningTokens: slice.tokens.reasoning,
|
|
25
|
+
cost: null,
|
|
26
|
+
edits: [],
|
|
27
|
+
};
|
|
28
|
+
return resolveSliceCost([turn], false, null, prices).cost;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Split every valid session's recorded cost into `harness` or `approvalPrice`
|
|
32
|
+
* by its slice `costSource`, and estimate each unpriced sliced session whose
|
|
33
|
+
* model `planning.prices` prices. No record is written.
|
|
34
|
+
*/
|
|
35
|
+
export async function collectCostBySource(folders, prices) {
|
|
36
|
+
const harness = { total: 0, sessions: 0 };
|
|
37
|
+
const approvalPrice = { total: 0, sessions: 0 };
|
|
38
|
+
const reportEstimate = { total: 0, sessions: 0 };
|
|
39
|
+
for (const folderPath of folders) {
|
|
40
|
+
for (const session of await readPlanningSessions(folderPath)) {
|
|
41
|
+
if (!session.started)
|
|
42
|
+
continue;
|
|
43
|
+
const exited = session.exited;
|
|
44
|
+
if (!exited)
|
|
45
|
+
continue;
|
|
46
|
+
const cost = exited.data.usage.cost;
|
|
47
|
+
if (cost !== null) {
|
|
48
|
+
const bucket = exited.data.slice?.costSource === 'price_table' ? approvalPrice : harness;
|
|
49
|
+
bucket.total += cost;
|
|
50
|
+
bucket.sessions += 1;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const estimate = estimateSessionCost(session, prices);
|
|
54
|
+
if (estimate !== null) {
|
|
55
|
+
reportEstimate.total += estimate;
|
|
56
|
+
reportEstimate.sessions += 1;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
harness: { ...harness },
|
|
62
|
+
approvalPrice: { ...approvalPrice },
|
|
63
|
+
reportEstimate: { ...reportEstimate },
|
|
64
|
+
totalWithEstimates: harness.total + approvalPrice.total + reportEstimate.total,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/** The report's dollar format for a source total. */
|
|
68
|
+
function formatSourceCost(total) {
|
|
69
|
+
return total >= 0.01 ? `$${total.toFixed(2)}` : `$${total.toFixed(4)}`;
|
|
70
|
+
}
|
|
71
|
+
/** One labelled line per source plus how much of the total is estimated. */
|
|
72
|
+
export function formatPlanningCostBySource(bySource) {
|
|
73
|
+
if (!bySource)
|
|
74
|
+
return [];
|
|
75
|
+
return [
|
|
76
|
+
' Planning cost by source:',
|
|
77
|
+
` Harness-reported: ${formatSourceCost(bySource.harness.total)} (${bySource.harness.sessions} sessions)`,
|
|
78
|
+
` Approval priced: ${formatSourceCost(bySource.approvalPrice.total)} (${bySource.approvalPrice.sessions} sessions)`,
|
|
79
|
+
` Estimated from planning.prices: ${formatSourceCost(bySource.reportEstimate.total)} (${bySource.reportEstimate.sessions} sessions)`,
|
|
80
|
+
` Planning cost with estimates: ${formatSourceCost(bySource.totalWithEstimates)} (${formatSourceCost(bySource.reportEstimate.total)} estimated)`,
|
|
81
|
+
];
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=record-estimates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-estimates.js","sourceRoot":"","sources":["../../../src/core/report/record-estimates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** One fixed change with the sorted ids of the active/archived changes fixing it. */
|
|
2
|
+
export interface ReworkEntry {
|
|
3
|
+
readonly change: string;
|
|
4
|
+
readonly fixedBy: readonly string[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The padded numeric id of a change folder name, falling back to the full name
|
|
8
|
+
* when it carries no numeric prefix. `fixes` values are normalized the same way.
|
|
9
|
+
*/
|
|
10
|
+
export declare function changeIdOfFolder(folderPath: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Every active or archived change named in another active or archived change's
|
|
13
|
+
* `fixes`, ordered by change id with sorted fixer ids. Rejected folders are
|
|
14
|
+
* never read, so a rejected change fixes nothing.
|
|
15
|
+
*/
|
|
16
|
+
export declare function collectRework(folders: readonly string[]): Promise<ReworkEntry[]>;
|
|
17
|
+
/** Render the `Rework:` section body, one line per fixed change or `(none)`. */
|
|
18
|
+
export declare function formatRework(entries: readonly ReworkEntry[]): string[];
|
|
19
|
+
//# sourceMappingURL=record-rework.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-rework.d.ts","sourceRoot":"","sources":["../../../src/core/report/record-rework.ts"],"names":[],"mappings":"AAIA,qFAAqF;AACrF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAI3D;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAmBtF;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,EAAE,CAUtE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { parseSpecMdFromFolder } from '../spec/parser.js';
|
|
3
|
+
import { compareNumericPrefix } from '../status/state.js';
|
|
4
|
+
/**
|
|
5
|
+
* The padded numeric id of a change folder name, falling back to the full name
|
|
6
|
+
* when it carries no numeric prefix. `fixes` values are normalized the same way.
|
|
7
|
+
*/
|
|
8
|
+
export function changeIdOfFolder(folderPath) {
|
|
9
|
+
const name = path.basename(folderPath);
|
|
10
|
+
const match = /^(\d+)/.exec(name);
|
|
11
|
+
return match ? match[1].padStart(3, '0') : name;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Every active or archived change named in another active or archived change's
|
|
15
|
+
* `fixes`, ordered by change id with sorted fixer ids. Rejected folders are
|
|
16
|
+
* never read, so a rejected change fixes nothing.
|
|
17
|
+
*/
|
|
18
|
+
export async function collectRework(folders) {
|
|
19
|
+
const fixedBy = new Map();
|
|
20
|
+
for (const folderPath of folders) {
|
|
21
|
+
const spec = await parseSpecMdFromFolder(folderPath).catch(() => null);
|
|
22
|
+
if (!spec || spec.fixes.length === 0)
|
|
23
|
+
continue;
|
|
24
|
+
const fixer = changeIdOfFolder(folderPath);
|
|
25
|
+
for (const fixed of spec.fixes) {
|
|
26
|
+
let fixers = fixedBy.get(fixed);
|
|
27
|
+
if (!fixers) {
|
|
28
|
+
fixers = new Set();
|
|
29
|
+
fixedBy.set(fixed, fixers);
|
|
30
|
+
}
|
|
31
|
+
fixers.add(fixer);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return [...fixedBy.entries()]
|
|
35
|
+
.map(([change, fixers]) => ({ change, fixedBy: [...fixers].sort(compareNumericPrefix) }))
|
|
36
|
+
.sort((a, b) => compareNumericPrefix(a.change, b.change));
|
|
37
|
+
}
|
|
38
|
+
/** Render the `Rework:` section body, one line per fixed change or `(none)`. */
|
|
39
|
+
export function formatRework(entries) {
|
|
40
|
+
const lines = ['Rework:'];
|
|
41
|
+
if (entries.length === 0) {
|
|
42
|
+
lines.push(' (none)');
|
|
43
|
+
return lines;
|
|
44
|
+
}
|
|
45
|
+
for (const entry of entries) {
|
|
46
|
+
lines.push(` ${entry.change}: fixed by ${entry.fixedBy.join(', ')}`);
|
|
47
|
+
}
|
|
48
|
+
return lines;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=record-rework.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-rework.js","sourceRoot":"","sources":["../../../src/core/report/record-rework.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAiB,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAQ1D;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA0B;IAC5D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,GAAoB,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACxF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAC/C,MAAM,KAAK,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC3C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;SAC1B,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;SACxF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,YAAY,CAAC,OAA+B;IAC1D,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,cAAc,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Archived changes that require verification, counted by their latest outcome. */
|
|
2
|
+
export interface VerificationCounts {
|
|
3
|
+
readonly passed: number;
|
|
4
|
+
readonly failed: number;
|
|
5
|
+
readonly pending: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Count the archived changes that require after-landing verification by their
|
|
9
|
+
* latest recorded outcome: `passed`, `failed`, or `pending` when no outcome is
|
|
10
|
+
* recorded. Returns null when no archived change requires verification, so the
|
|
11
|
+
* report can leave the field and its text line out entirely.
|
|
12
|
+
*/
|
|
13
|
+
export declare function collectVerificationCounts(archivedFolders: readonly string[]): Promise<VerificationCounts | null>;
|
|
14
|
+
/** Render the `After-landing checks:` text line from the counts. */
|
|
15
|
+
export declare function formatVerificationCounts(counts: VerificationCounts): string;
|
|
16
|
+
//# sourceMappingURL=record-verification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-verification.d.ts","sourceRoot":"","sources":["../../../src/core/report/record-verification.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,eAAe,EAAE,SAAS,MAAM,EAAE,GACjC,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAiBpC;AAED,oEAAoE;AACpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAE3E"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { readVerification } from '../status/verification.js';
|
|
2
|
+
/**
|
|
3
|
+
* Count the archived changes that require after-landing verification by their
|
|
4
|
+
* latest recorded outcome: `passed`, `failed`, or `pending` when no outcome is
|
|
5
|
+
* recorded. Returns null when no archived change requires verification, so the
|
|
6
|
+
* report can leave the field and its text line out entirely.
|
|
7
|
+
*/
|
|
8
|
+
export async function collectVerificationCounts(archivedFolders) {
|
|
9
|
+
let passed = 0;
|
|
10
|
+
let failed = 0;
|
|
11
|
+
let pending = 0;
|
|
12
|
+
let required = 0;
|
|
13
|
+
for (const folderPath of archivedFolders) {
|
|
14
|
+
const state = await readVerification(folderPath);
|
|
15
|
+
if (!state.required)
|
|
16
|
+
continue;
|
|
17
|
+
required++;
|
|
18
|
+
if (state.outcome === 'passed')
|
|
19
|
+
passed++;
|
|
20
|
+
else if (state.outcome === 'failed')
|
|
21
|
+
failed++;
|
|
22
|
+
else
|
|
23
|
+
pending++;
|
|
24
|
+
}
|
|
25
|
+
if (required === 0)
|
|
26
|
+
return null;
|
|
27
|
+
return { passed, failed, pending };
|
|
28
|
+
}
|
|
29
|
+
/** Render the `After-landing checks:` text line from the counts. */
|
|
30
|
+
export function formatVerificationCounts(counts) {
|
|
31
|
+
return `After-landing checks: ${counts.passed} passed, ${counts.failed} failed, ${counts.pending} pending`;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=record-verification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-verification.js","sourceRoot":"","sources":["../../../src/core/report/record-verification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAS7D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,eAAkC;IAElC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,QAAQ;YAAE,SAAS;QAC9B,QAAQ,EAAE,CAAC;QACX,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ;YAAE,MAAM,EAAE,CAAC;aACpC,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ;YAAE,MAAM,EAAE,CAAC;;YACzC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACrC,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,wBAAwB,CAAC,MAA0B;IACjE,OAAO,yBAAyB,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,OAAO,UAAU,CAAC;AAC7G,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependencies a change's tasks added, derived only from typed
|
|
3
|
+
* `dependencies_added` events in numbered task streams.
|
|
4
|
+
*/
|
|
5
|
+
/** One package added to one manifest. */
|
|
6
|
+
export interface DependencyPair {
|
|
7
|
+
readonly file: string;
|
|
8
|
+
readonly name: string;
|
|
9
|
+
}
|
|
10
|
+
/** Every distinct package an active or archived change's tasks added. */
|
|
11
|
+
export interface DependencyEntry {
|
|
12
|
+
readonly change: string;
|
|
13
|
+
readonly added: readonly DependencyPair[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Valid `{ file, name }` pairs from a `dependencies_added` event's `added`
|
|
17
|
+
* data. An entry that is not a pair of non-empty strings contributes nothing.
|
|
18
|
+
*/
|
|
19
|
+
export declare function addedPairs(value: unknown): DependencyPair[];
|
|
20
|
+
/** Distinct pairs from every given event, sorted by file and then name. */
|
|
21
|
+
export declare function distinctPairs(pairs: readonly DependencyPair[]): DependencyPair[];
|
|
22
|
+
/**
|
|
23
|
+
* Every active or archived change whose numbered task streams hold a
|
|
24
|
+
* `dependencies_added` event, in change order. A change with none is absent.
|
|
25
|
+
*/
|
|
26
|
+
export declare function collectDependencies(folders: readonly string[]): Promise<DependencyEntry[]>;
|
|
27
|
+
/** Render the `Dependencies added:` section body, one line per change. */
|
|
28
|
+
export declare function formatDependencies(entries: readonly DependencyEntry[]): string[];
|
|
29
|
+
//# sourceMappingURL=report-dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-dependencies.d.ts","sourceRoot":"","sources":["../../../src/core/report/report-dependencies.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;CAC3C;AAMD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,EAAE,CAW3D;AAQD,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,cAAc,EAAE,CAIhF;AAaD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAmBhG;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,GAAG,MAAM,EAAE,CAOhF"}
|