@matteeh/osq 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +415 -72
- package/dist/cli/approve.d.ts +13 -3
- package/dist/cli/approve.d.ts.map +1 -1
- package/dist/cli/approve.js +59 -4
- package/dist/cli/approve.js.map +1 -1
- package/dist/cli/bin.js +0 -0
- package/dist/cli/confirm.d.ts +21 -0
- package/dist/cli/confirm.d.ts.map +1 -0
- package/dist/cli/confirm.js +28 -0
- package/dist/cli/confirm.js.map +1 -0
- package/dist/cli/doctor.d.ts +13 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +23 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/done.d.ts +12 -0
- package/dist/cli/done.d.ts.map +1 -0
- package/dist/cli/done.js +26 -0
- package/dist/cli/done.js.map +1 -0
- package/dist/cli/inbox.d.ts +22 -0
- package/dist/cli/inbox.d.ts.map +1 -0
- package/dist/cli/inbox.js +41 -0
- package/dist/cli/inbox.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +127 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts +1 -0
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +9 -3
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/lint.d.ts +26 -0
- package/dist/cli/lint.d.ts.map +1 -0
- package/dist/cli/lint.js +60 -0
- package/dist/cli/lint.js.map +1 -0
- package/dist/cli/migrate.d.ts +18 -0
- package/dist/cli/migrate.d.ts.map +1 -0
- package/dist/cli/migrate.js +42 -0
- package/dist/cli/migrate.js.map +1 -0
- package/dist/cli/new.js +1 -1
- package/dist/cli/new.js.map +1 -1
- package/dist/cli/plan-queue.d.ts +50 -0
- package/dist/cli/plan-queue.d.ts.map +1 -0
- package/dist/cli/plan-queue.js +167 -0
- package/dist/cli/plan-queue.js.map +1 -0
- package/dist/cli/plan.d.ts +35 -0
- package/dist/cli/plan.d.ts.map +1 -0
- package/dist/cli/plan.js +153 -0
- package/dist/cli/plan.js.map +1 -0
- package/dist/cli/queue.d.ts +9 -0
- package/dist/cli/queue.d.ts.map +1 -0
- package/dist/cli/queue.js +24 -0
- package/dist/cli/queue.js.map +1 -0
- package/dist/cli/reject.d.ts +8 -0
- package/dist/cli/reject.d.ts.map +1 -0
- package/dist/cli/reject.js +18 -0
- package/dist/cli/reject.js.map +1 -0
- package/dist/cli/report.d.ts +1 -1
- package/dist/cli/report.d.ts.map +1 -1
- package/dist/cli/report.js +141 -14
- package/dist/cli/report.js.map +1 -1
- package/dist/cli/retry.d.ts +7 -0
- package/dist/cli/retry.d.ts.map +1 -0
- package/dist/cli/retry.js +29 -0
- package/dist/cli/retry.js.map +1 -0
- package/dist/cli/serve.d.ts +30 -0
- package/dist/cli/serve.d.ts.map +1 -0
- package/dist/cli/serve.js +136 -0
- package/dist/cli/serve.js.map +1 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +7 -1
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/show.d.ts +2 -1
- package/dist/cli/show.d.ts.map +1 -1
- package/dist/cli/show.js +20 -3
- package/dist/cli/show.js.map +1 -1
- package/dist/cli/status.d.ts +1 -1
- package/dist/cli/status.d.ts.map +1 -1
- package/dist/cli/status.js +2 -2
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/watch.d.ts +9 -6
- package/dist/cli/watch.d.ts.map +1 -1
- package/dist/cli/watch.js +15 -2
- package/dist/cli/watch.js.map +1 -1
- package/dist/core/foundation/config-codex.d.ts +22 -0
- package/dist/core/foundation/config-codex.d.ts.map +1 -0
- package/dist/core/foundation/config-codex.js +58 -0
- package/dist/core/foundation/config-codex.js.map +1 -0
- package/dist/core/foundation/config-doctor.d.ts +14 -0
- package/dist/core/foundation/config-doctor.d.ts.map +1 -0
- package/dist/core/foundation/config-doctor.js +29 -0
- package/dist/core/foundation/config-doctor.js.map +1 -0
- package/dist/core/foundation/config-env.d.ts +3 -0
- package/dist/core/foundation/config-env.d.ts.map +1 -0
- package/dist/core/foundation/config-env.js +22 -0
- package/dist/core/foundation/config-env.js.map +1 -0
- package/dist/core/foundation/config-gates.d.ts +22 -0
- package/dist/core/foundation/config-gates.d.ts.map +1 -0
- package/dist/core/foundation/config-gates.js +43 -0
- package/dist/core/foundation/config-gates.js.map +1 -0
- package/dist/core/foundation/config-pi.d.ts +64 -0
- package/dist/core/foundation/config-pi.d.ts.map +1 -0
- package/dist/core/foundation/config-pi.js +131 -0
- package/dist/core/foundation/config-pi.js.map +1 -0
- package/dist/core/foundation/config-planning.d.ts +24 -0
- package/dist/core/foundation/config-planning.d.ts.map +1 -0
- package/dist/core/foundation/config-planning.js +60 -0
- package/dist/core/foundation/config-planning.js.map +1 -0
- package/dist/core/foundation/config-queue.d.ts +15 -0
- package/dist/core/foundation/config-queue.d.ts.map +1 -0
- package/dist/core/foundation/config-queue.js +24 -0
- package/dist/core/foundation/config-queue.js.map +1 -0
- package/dist/core/foundation/config-serve.d.ts +20 -0
- package/dist/core/foundation/config-serve.d.ts.map +1 -0
- package/dist/core/foundation/config-serve.js +35 -0
- package/dist/core/foundation/config-serve.js.map +1 -0
- package/dist/core/{config.d.ts → foundation/config.d.ts} +34 -3
- package/dist/core/foundation/config.d.ts.map +1 -0
- package/dist/core/{config.js → foundation/config.js} +35 -18
- package/dist/core/foundation/config.js.map +1 -0
- package/dist/core/foundation/doctor-managed.d.ts +13 -0
- package/dist/core/foundation/doctor-managed.d.ts.map +1 -0
- package/dist/core/foundation/doctor-managed.js +77 -0
- package/dist/core/foundation/doctor-managed.js.map +1 -0
- package/dist/core/foundation/doctor.d.ts +19 -0
- package/dist/core/foundation/doctor.d.ts.map +1 -0
- package/dist/core/foundation/doctor.js +187 -0
- package/dist/core/foundation/doctor.js.map +1 -0
- package/dist/core/foundation/harness-catalog.d.ts +96 -0
- package/dist/core/foundation/harness-catalog.d.ts.map +1 -0
- package/dist/core/foundation/harness-catalog.js +182 -0
- package/dist/core/foundation/harness-catalog.js.map +1 -0
- package/dist/core/foundation/init-blocks.d.ts +33 -0
- package/dist/core/foundation/init-blocks.d.ts.map +1 -0
- package/dist/core/foundation/init-blocks.js +165 -0
- package/dist/core/foundation/init-blocks.js.map +1 -0
- package/dist/core/foundation/init-managed.d.ts +10 -0
- package/dist/core/foundation/init-managed.d.ts.map +1 -0
- package/dist/core/foundation/init-managed.js +115 -0
- package/dist/core/foundation/init-managed.js.map +1 -0
- package/dist/core/foundation/init.d.ts +18 -0
- package/dist/core/foundation/init.d.ts.map +1 -0
- package/dist/core/foundation/init.js +113 -0
- package/dist/core/foundation/init.js.map +1 -0
- package/dist/core/{logger.d.ts → foundation/logger.d.ts} +1 -0
- package/dist/core/foundation/logger.d.ts.map +1 -0
- package/dist/core/{logger.js → foundation/logger.js} +18 -2
- package/dist/core/foundation/logger.js.map +1 -0
- package/dist/core/{new.d.ts → foundation/new.d.ts} +3 -0
- package/dist/core/foundation/new.d.ts.map +1 -0
- package/dist/core/foundation/new.js +206 -0
- package/dist/core/foundation/new.js.map +1 -0
- package/dist/core/foundation/package-root.d.ts +9 -0
- package/dist/core/foundation/package-root.d.ts.map +1 -0
- package/dist/core/foundation/package-root.js +11 -0
- package/dist/core/foundation/package-root.js.map +1 -0
- package/dist/core/lifecycle/done.d.ts +17 -0
- package/dist/core/lifecycle/done.d.ts.map +1 -0
- package/dist/core/lifecycle/done.js +97 -0
- package/dist/core/lifecycle/done.js.map +1 -0
- package/dist/core/lifecycle/reject.d.ts +26 -0
- package/dist/core/lifecycle/reject.d.ts.map +1 -0
- package/dist/core/lifecycle/reject.js +83 -0
- package/dist/core/lifecycle/reject.js.map +1 -0
- package/dist/core/lifecycle/retry-transition.d.ts +23 -0
- package/dist/core/lifecycle/retry-transition.d.ts.map +1 -0
- package/dist/core/lifecycle/retry-transition.js +41 -0
- package/dist/core/lifecycle/retry-transition.js.map +1 -0
- package/dist/core/lifecycle/retry.d.ts +18 -0
- package/dist/core/lifecycle/retry.d.ts.map +1 -0
- package/dist/core/lifecycle/retry.js +179 -0
- package/dist/core/lifecycle/retry.js.map +1 -0
- package/dist/core/report/approval-flags.d.ts +29 -0
- package/dist/core/report/approval-flags.d.ts.map +1 -0
- package/dist/core/report/approval-flags.js +138 -0
- package/dist/core/report/approval-flags.js.map +1 -0
- package/dist/core/report/planning-economics.d.ts +39 -0
- package/dist/core/report/planning-economics.d.ts.map +1 -0
- package/dist/core/report/planning-economics.js +168 -0
- package/dist/core/report/planning-economics.js.map +1 -0
- package/dist/core/report/planning-observed.d.ts +59 -0
- package/dist/core/report/planning-observed.d.ts.map +1 -0
- package/dist/core/report/planning-observed.js +135 -0
- package/dist/core/report/planning-observed.js.map +1 -0
- package/dist/core/report/planning-records.d.ts +69 -0
- package/dist/core/report/planning-records.d.ts.map +1 -0
- package/dist/core/report/planning-records.js +149 -0
- package/dist/core/report/planning-records.js.map +1 -0
- package/dist/core/report/planning-slice-lookup.d.ts +13 -0
- package/dist/core/report/planning-slice-lookup.d.ts.map +1 -0
- package/dist/core/report/planning-slice-lookup.js +146 -0
- package/dist/core/report/planning-slice-lookup.js.map +1 -0
- package/dist/core/report/planning-slice-measures.d.ts +17 -0
- package/dist/core/report/planning-slice-measures.d.ts.map +1 -0
- package/dist/core/report/planning-slice-measures.js +85 -0
- package/dist/core/report/planning-slice-measures.js.map +1 -0
- package/dist/core/report/planning-slice-record.d.ts +4 -0
- package/dist/core/report/planning-slice-record.d.ts.map +1 -0
- package/dist/core/report/planning-slice-record.js +66 -0
- package/dist/core/report/planning-slice-record.js.map +1 -0
- package/dist/core/report/planning-slice-turns.d.ts +13 -0
- package/dist/core/report/planning-slice-turns.d.ts.map +1 -0
- package/dist/core/report/planning-slice-turns.js +41 -0
- package/dist/core/report/planning-slice-turns.js.map +1 -0
- package/dist/core/report/planning-slice.d.ts +70 -0
- package/dist/core/report/planning-slice.d.ts.map +1 -0
- package/dist/core/report/planning-slice.js +147 -0
- package/dist/core/report/planning-slice.js.map +1 -0
- package/dist/core/report/planning.d.ts +31 -0
- package/dist/core/report/planning.d.ts.map +1 -0
- package/dist/core/report/planning.js +75 -0
- package/dist/core/report/planning.js.map +1 -0
- package/dist/core/report/report-events.d.ts +52 -0
- package/dist/core/report/report-events.d.ts.map +1 -0
- package/dist/core/report/report-events.js +198 -0
- package/dist/core/report/report-events.js.map +1 -0
- package/dist/core/report/report-pre-spawn.d.ts +25 -0
- package/dist/core/report/report-pre-spawn.d.ts.map +1 -0
- package/dist/core/report/report-pre-spawn.js +40 -0
- package/dist/core/report/report-pre-spawn.js.map +1 -0
- package/dist/core/report/report-retries.d.ts +30 -0
- package/dist/core/report/report-retries.d.ts.map +1 -0
- package/dist/core/report/report-retries.js +100 -0
- package/dist/core/report/report-retries.js.map +1 -0
- package/dist/core/report/report.d.ts +276 -0
- package/dist/core/report/report.d.ts.map +1 -0
- package/dist/core/report/report.js +1421 -0
- package/dist/core/report/report.js.map +1 -0
- package/dist/core/{lock.d.ts → run/lock.d.ts} +6 -0
- package/dist/core/run/lock.d.ts.map +1 -0
- package/dist/core/{lock.js → run/lock.js} +7 -15
- package/dist/core/run/lock.js.map +1 -0
- package/dist/core/run/manifest.d.ts +39 -0
- package/dist/core/run/manifest.d.ts.map +1 -0
- package/dist/core/run/manifest.js +137 -0
- package/dist/core/run/manifest.js.map +1 -0
- package/dist/core/run/scope-hash.d.ts +71 -0
- package/dist/core/run/scope-hash.d.ts.map +1 -0
- package/dist/core/run/scope-hash.js +177 -0
- package/dist/core/run/scope-hash.js.map +1 -0
- package/dist/core/run/scope.d.ts +30 -0
- package/dist/core/run/scope.d.ts.map +1 -0
- package/dist/core/run/scope.js +193 -0
- package/dist/core/run/scope.js.map +1 -0
- package/dist/core/run/summary.d.ts +8 -0
- package/dist/core/run/summary.d.ts.map +1 -0
- package/dist/core/run/summary.js +25 -0
- package/dist/core/run/summary.js.map +1 -0
- package/dist/core/run/verification.d.ts +23 -0
- package/dist/core/run/verification.d.ts.map +1 -0
- package/dist/core/run/verification.js +78 -0
- package/dist/core/run/verification.js.map +1 -0
- package/dist/core/spec/approve.d.ts +31 -0
- package/dist/core/spec/approve.d.ts.map +1 -0
- package/dist/core/spec/approve.js +111 -0
- package/dist/core/spec/approve.js.map +1 -0
- package/dist/core/spec/delta.d.ts +77 -0
- package/dist/core/spec/delta.d.ts.map +1 -0
- package/dist/core/spec/delta.js +581 -0
- package/dist/core/spec/delta.js.map +1 -0
- package/dist/core/spec/digest-flags.d.ts +21 -0
- package/dist/core/spec/digest-flags.d.ts.map +1 -0
- package/dist/core/spec/digest-flags.js +194 -0
- package/dist/core/spec/digest-flags.js.map +1 -0
- package/dist/core/spec/digest-verify-starts.d.ts +5 -0
- package/dist/core/spec/digest-verify-starts.d.ts.map +1 -0
- package/dist/core/spec/digest-verify-starts.js +31 -0
- package/dist/core/spec/digest-verify-starts.js.map +1 -0
- package/dist/core/spec/digest.d.ts +42 -0
- package/dist/core/spec/digest.d.ts.map +1 -0
- package/dist/core/spec/digest.js +170 -0
- package/dist/core/spec/digest.js.map +1 -0
- package/dist/core/spec/hasher.d.ts +11 -0
- package/dist/core/spec/hasher.d.ts.map +1 -0
- package/dist/core/{hasher.js → spec/hasher.js} +27 -3
- package/dist/core/spec/hasher.js.map +1 -0
- package/dist/core/spec/linter.d.ts +79 -0
- package/dist/core/spec/linter.d.ts.map +1 -0
- package/dist/core/spec/linter.js +826 -0
- package/dist/core/spec/linter.js.map +1 -0
- package/dist/core/spec/migrate.d.ts +54 -0
- package/dist/core/spec/migrate.d.ts.map +1 -0
- package/dist/core/spec/migrate.js +297 -0
- package/dist/core/spec/migrate.js.map +1 -0
- package/dist/core/spec/openspec-version.d.ts +30 -0
- package/dist/core/spec/openspec-version.d.ts.map +1 -0
- package/dist/core/spec/openspec-version.js +118 -0
- package/dist/core/spec/openspec-version.js.map +1 -0
- package/dist/core/spec/parser.d.ts +82 -0
- package/dist/core/spec/parser.d.ts.map +1 -0
- package/dist/core/spec/parser.js +221 -0
- package/dist/core/spec/parser.js.map +1 -0
- package/dist/core/spec/verify-paths.d.ts +18 -0
- package/dist/core/spec/verify-paths.d.ts.map +1 -0
- package/dist/core/spec/verify-paths.js +139 -0
- package/dist/core/spec/verify-paths.js.map +1 -0
- package/dist/core/spec/verify-starts.d.ts +45 -0
- package/dist/core/spec/verify-starts.d.ts.map +1 -0
- package/dist/core/spec/verify-starts.js +61 -0
- package/dist/core/spec/verify-starts.js.map +1 -0
- package/dist/core/status/inbox-cursor.d.ts +10 -0
- package/dist/core/status/inbox-cursor.d.ts.map +1 -0
- package/dist/core/status/inbox-cursor.js +33 -0
- package/dist/core/status/inbox-cursor.js.map +1 -0
- package/dist/core/status/inbox-projection.d.ts +15 -0
- package/dist/core/status/inbox-projection.d.ts.map +1 -0
- package/dist/core/status/inbox-projection.js +20 -0
- package/dist/core/status/inbox-projection.js.map +1 -0
- package/dist/core/status/inbox-text.d.ts +4 -0
- package/dist/core/status/inbox-text.d.ts.map +1 -0
- package/dist/core/status/inbox-text.js +48 -0
- package/dist/core/status/inbox-text.js.map +1 -0
- package/dist/core/status/inbox.d.ts +53 -0
- package/dist/core/status/inbox.d.ts.map +1 -0
- package/dist/core/status/inbox.js +167 -0
- package/dist/core/status/inbox.js.map +1 -0
- package/dist/core/status/layout.d.ts +29 -0
- package/dist/core/status/layout.d.ts.map +1 -0
- package/dist/core/status/layout.js +77 -0
- package/dist/core/status/layout.js.map +1 -0
- package/dist/core/status/queue-parser.d.ts +13 -0
- package/dist/core/status/queue-parser.d.ts.map +1 -0
- package/dist/core/status/queue-parser.js +88 -0
- package/dist/core/status/queue-parser.js.map +1 -0
- package/dist/core/status/queue-planning.d.ts +62 -0
- package/dist/core/status/queue-planning.d.ts.map +1 -0
- package/dist/core/status/queue-planning.js +158 -0
- package/dist/core/status/queue-planning.js.map +1 -0
- package/dist/core/status/queue-report-detail.d.ts +50 -0
- package/dist/core/status/queue-report-detail.d.ts.map +1 -0
- package/dist/core/status/queue-report-detail.js +140 -0
- package/dist/core/status/queue-report-detail.js.map +1 -0
- package/dist/core/status/queue-report.d.ts +14 -0
- package/dist/core/status/queue-report.d.ts.map +1 -0
- package/dist/core/status/queue-report.js +41 -0
- package/dist/core/status/queue-report.js.map +1 -0
- package/dist/core/status/queue-state.d.ts +53 -0
- package/dist/core/status/queue-state.d.ts.map +1 -0
- package/dist/core/status/queue-state.js +167 -0
- package/dist/core/status/queue-state.js.map +1 -0
- package/dist/core/status/queue.d.ts +7 -0
- package/dist/core/status/queue.d.ts.map +1 -0
- package/dist/core/status/queue.js +4 -0
- package/dist/core/status/queue.js.map +1 -0
- package/dist/core/status/show.d.ts +102 -0
- package/dist/core/status/show.d.ts.map +1 -0
- package/dist/core/status/show.js +704 -0
- package/dist/core/status/show.js.map +1 -0
- package/dist/core/status/state.d.ts +56 -0
- package/dist/core/status/state.d.ts.map +1 -0
- package/dist/core/status/state.js +187 -0
- package/dist/core/status/state.js.map +1 -0
- package/dist/core/status/status.d.ts +23 -0
- package/dist/core/status/status.d.ts.map +1 -0
- package/dist/core/status/status.js +173 -0
- package/dist/core/status/status.js.map +1 -0
- package/dist/core/web/web-data-change.d.ts +10 -0
- package/dist/core/web/web-data-change.d.ts.map +1 -0
- package/dist/core/web/web-data-change.js +106 -0
- package/dist/core/web/web-data-change.js.map +1 -0
- package/dist/core/web/web-data-folders.d.ts +39 -0
- package/dist/core/web/web-data-folders.d.ts.map +1 -0
- package/dist/core/web/web-data-folders.js +125 -0
- package/dist/core/web/web-data-folders.js.map +1 -0
- package/dist/core/web/web-data-graph.d.ts +8 -0
- package/dist/core/web/web-data-graph.d.ts.map +1 -0
- package/dist/core/web/web-data-graph.js +113 -0
- package/dist/core/web/web-data-graph.js.map +1 -0
- package/dist/core/web/web-data-lifecycle.d.ts +43 -0
- package/dist/core/web/web-data-lifecycle.d.ts.map +1 -0
- package/dist/core/web/web-data-lifecycle.js +141 -0
- package/dist/core/web/web-data-lifecycle.js.map +1 -0
- package/dist/core/web/web-data-observations.d.ts +30 -0
- package/dist/core/web/web-data-observations.d.ts.map +1 -0
- package/dist/core/web/web-data-observations.js +181 -0
- package/dist/core/web/web-data-observations.js.map +1 -0
- package/dist/core/web/web-data-tokens.d.ts +29 -0
- package/dist/core/web/web-data-tokens.d.ts.map +1 -0
- package/dist/core/web/web-data-tokens.js +62 -0
- package/dist/core/web/web-data-tokens.js.map +1 -0
- package/dist/core/web/web-data-types.d.ts +156 -0
- package/dist/core/web/web-data-types.d.ts.map +1 -0
- package/dist/core/web/web-data-types.js +15 -0
- package/dist/core/web/web-data-types.js.map +1 -0
- package/dist/core/web/web-data.d.ts +10 -0
- package/dist/core/web/web-data.d.ts.map +1 -0
- package/dist/core/web/web-data.js +8 -0
- package/dist/core/web/web-data.js.map +1 -0
- package/dist/core/web/web-events.d.ts +54 -0
- package/dist/core/web/web-events.d.ts.map +1 -0
- package/dist/core/web/web-events.js +162 -0
- package/dist/core/web/web-events.js.map +1 -0
- package/dist/core/web/web-export.d.ts +18 -0
- package/dist/core/web/web-export.d.ts.map +1 -0
- package/dist/core/web/web-export.js +112 -0
- package/dist/core/web/web-export.js.map +1 -0
- package/dist/core/web/web-server.d.ts +34 -0
- package/dist/core/web/web-server.d.ts.map +1 -0
- package/dist/core/web/web-server.js +182 -0
- package/dist/core/web/web-server.js.map +1 -0
- package/dist/core/web/web-static.d.ts +20 -0
- package/dist/core/web/web-static.d.ts.map +1 -0
- package/dist/core/web/web-static.js +104 -0
- package/dist/core/web/web-static.js.map +1 -0
- package/dist/harness/{agy.d.ts → agy/agy.d.ts} +8 -6
- package/dist/harness/agy/agy.d.ts.map +1 -0
- package/dist/harness/{agy.js → agy/agy.js} +49 -34
- package/dist/harness/agy/agy.js.map +1 -0
- package/dist/harness/claude/claude-turns.d.ts +29 -0
- package/dist/harness/claude/claude-turns.d.ts.map +1 -0
- package/dist/harness/claude/claude-turns.js +162 -0
- package/dist/harness/claude/claude-turns.js.map +1 -0
- package/dist/harness/claude/claude-usage.d.ts +12 -0
- package/dist/harness/claude/claude-usage.d.ts.map +1 -0
- package/dist/harness/claude/claude-usage.js +144 -0
- package/dist/harness/claude/claude-usage.js.map +1 -0
- package/dist/harness/codex/codex-observe-usage.d.ts +6 -0
- package/dist/harness/codex/codex-observe-usage.d.ts.map +1 -0
- package/dist/harness/codex/codex-observe-usage.js +215 -0
- package/dist/harness/codex/codex-observe-usage.js.map +1 -0
- package/dist/harness/codex/codex-prompt.d.ts +17 -0
- package/dist/harness/codex/codex-prompt.d.ts.map +1 -0
- package/dist/harness/codex/codex-prompt.js +43 -0
- package/dist/harness/codex/codex-prompt.js.map +1 -0
- package/dist/harness/codex/codex-stream.d.ts +23 -0
- package/dist/harness/codex/codex-stream.d.ts.map +1 -0
- package/dist/harness/codex/codex-stream.js +182 -0
- package/dist/harness/codex/codex-stream.js.map +1 -0
- package/dist/harness/codex/codex-usage.d.ts +26 -0
- package/dist/harness/codex/codex-usage.d.ts.map +1 -0
- package/dist/harness/codex/codex-usage.js +122 -0
- package/dist/harness/codex/codex-usage.js.map +1 -0
- package/dist/harness/codex/codex.d.ts +16 -0
- package/dist/harness/codex/codex.d.ts.map +1 -0
- package/dist/harness/codex/codex.js +92 -0
- package/dist/harness/codex/codex.js.map +1 -0
- package/dist/harness/index.d.ts +11 -2
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +24 -9
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/mock.d.ts +5 -2
- package/dist/harness/mock.d.ts.map +1 -1
- package/dist/harness/mock.js +10 -11
- package/dist/harness/mock.js.map +1 -1
- package/dist/harness/opencode/opencode-observe-usage.d.ts +4 -0
- package/dist/harness/opencode/opencode-observe-usage.d.ts.map +1 -0
- package/dist/harness/opencode/opencode-observe-usage.js +100 -0
- package/dist/harness/opencode/opencode-observe-usage.js.map +1 -0
- package/dist/harness/opencode/opencode-usage.d.ts +24 -0
- package/dist/harness/opencode/opencode-usage.d.ts.map +1 -0
- package/dist/harness/opencode/opencode-usage.js +181 -0
- package/dist/harness/opencode/opencode-usage.js.map +1 -0
- package/dist/harness/{opencode.d.ts → opencode/opencode.d.ts} +10 -7
- package/dist/harness/opencode/opencode.d.ts.map +1 -0
- package/dist/harness/{opencode.js → opencode/opencode.js} +159 -70
- package/dist/harness/opencode/opencode.js.map +1 -0
- package/dist/harness/pi/pi-args.d.ts +9 -0
- package/dist/harness/pi/pi-args.d.ts.map +1 -0
- package/dist/harness/pi/pi-args.js +33 -0
- package/dist/harness/pi/pi-args.js.map +1 -0
- package/dist/harness/pi/pi-stream.d.ts +27 -0
- package/dist/harness/pi/pi-stream.d.ts.map +1 -0
- package/dist/harness/pi/pi-stream.js +176 -0
- package/dist/harness/pi/pi-stream.js.map +1 -0
- package/dist/harness/pi/pi-tools.d.ts +5 -0
- package/dist/harness/pi/pi-tools.d.ts.map +1 -0
- package/dist/harness/pi/pi-tools.js +31 -0
- package/dist/harness/pi/pi-tools.js.map +1 -0
- package/dist/harness/pi/pi.d.ts +11 -0
- package/dist/harness/pi/pi.d.ts.map +1 -0
- package/dist/harness/pi/pi.js +109 -0
- package/dist/harness/pi/pi.js.map +1 -0
- package/dist/harness/prompt.d.ts +11 -0
- package/dist/harness/prompt.d.ts.map +1 -0
- package/dist/harness/prompt.js +105 -0
- package/dist/harness/prompt.js.map +1 -0
- package/dist/harness/types.d.ts +287 -8
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js +125 -0
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/watcher/archive-verify.d.ts +9 -0
- package/dist/watcher/archive-verify.d.ts.map +1 -0
- package/dist/watcher/archive-verify.js +80 -0
- package/dist/watcher/archive-verify.js.map +1 -0
- package/dist/watcher/archiver.d.ts +14 -2
- package/dist/watcher/archiver.d.ts.map +1 -1
- package/dist/watcher/archiver.js +112 -33
- package/dist/watcher/archiver.js.map +1 -1
- package/dist/watcher/attempt.d.ts +19 -0
- package/dist/watcher/attempt.d.ts.map +1 -0
- package/dist/watcher/attempt.js +94 -0
- package/dist/watcher/attempt.js.map +1 -0
- package/dist/watcher/auto-retry.d.ts +11 -0
- package/dist/watcher/auto-retry.d.ts.map +1 -0
- package/dist/watcher/auto-retry.js +180 -0
- package/dist/watcher/auto-retry.js.map +1 -0
- package/dist/watcher/build.d.ts +24 -0
- package/dist/watcher/build.d.ts.map +1 -0
- package/dist/watcher/build.js +169 -0
- package/dist/watcher/build.js.map +1 -0
- package/dist/watcher/change-verify.d.ts +25 -0
- package/dist/watcher/change-verify.d.ts.map +1 -0
- package/dist/watcher/change-verify.js +57 -0
- package/dist/watcher/change-verify.js.map +1 -0
- package/dist/watcher/dev.d.ts +51 -0
- package/dist/watcher/dev.d.ts.map +1 -0
- package/dist/watcher/dev.js +124 -0
- package/dist/watcher/dev.js.map +1 -0
- package/dist/watcher/failure-reason.d.ts +7 -0
- package/dist/watcher/failure-reason.d.ts.map +1 -0
- package/dist/watcher/failure-reason.js +2 -0
- package/dist/watcher/failure-reason.js.map +1 -0
- package/dist/watcher/fingerprint.d.ts +19 -0
- package/dist/watcher/fingerprint.d.ts.map +1 -0
- package/dist/watcher/fingerprint.js +53 -0
- package/dist/watcher/fingerprint.js.map +1 -0
- package/dist/watcher/heartbeat.d.ts +33 -0
- package/dist/watcher/heartbeat.d.ts.map +1 -0
- package/dist/watcher/heartbeat.js +135 -0
- package/dist/watcher/heartbeat.js.map +1 -0
- package/dist/watcher/lock.d.ts +10 -0
- package/dist/watcher/lock.d.ts.map +1 -0
- package/dist/watcher/lock.js +14 -0
- package/dist/watcher/lock.js.map +1 -0
- package/dist/watcher/loop.d.ts +26 -6
- package/dist/watcher/loop.d.ts.map +1 -1
- package/dist/watcher/loop.js +154 -37
- package/dist/watcher/loop.js.map +1 -1
- package/dist/watcher/measures.d.ts +46 -0
- package/dist/watcher/measures.d.ts.map +1 -0
- package/dist/watcher/measures.js +203 -0
- package/dist/watcher/measures.js.map +1 -0
- package/dist/watcher/outcome.d.ts +32 -0
- package/dist/watcher/outcome.d.ts.map +1 -0
- package/dist/watcher/outcome.js +127 -0
- package/dist/watcher/outcome.js.map +1 -0
- package/dist/watcher/regression.d.ts +43 -0
- package/dist/watcher/regression.d.ts.map +1 -0
- package/dist/watcher/regression.js +175 -0
- package/dist/watcher/regression.js.map +1 -0
- package/dist/watcher/runner.d.ts +6 -68
- package/dist/watcher/runner.d.ts.map +1 -1
- package/dist/watcher/runner.js +74 -523
- package/dist/watcher/runner.js.map +1 -1
- package/dist/watcher/spawn.d.ts +48 -0
- package/dist/watcher/spawn.d.ts.map +1 -0
- package/dist/watcher/spawn.js +130 -0
- package/dist/watcher/spawn.js.map +1 -0
- package/dist/watcher/task-verify.d.ts +59 -0
- package/dist/watcher/task-verify.d.ts.map +1 -0
- package/dist/watcher/task-verify.js +108 -0
- package/dist/watcher/task-verify.js.map +1 -0
- package/dist/watcher/verify.d.ts +44 -0
- package/dist/watcher/verify.d.ts.map +1 -0
- package/dist/watcher/verify.js +156 -0
- package/dist/watcher/verify.js.map +1 -0
- package/package.json +21 -9
- package/templates/PLANNER.md +77 -0
- package/templates/openspec/config.yaml +24 -0
- package/templates/openspec/schemas/osq/README.md +30 -0
- package/templates/openspec/schemas/osq/schema.yaml +133 -0
- package/templates/openspec/schemas/osq/templates/proposal.md +66 -0
- package/templates/openspec/schemas/osq/templates/spec.md +13 -0
- package/templates/openspec/schemas/osq/templates/tasks.md +11 -0
- package/templates/proposal.md +66 -0
- package/templates/tasks.md +5 -0
- package/ui/dist/assets/index-CZYeQ8la.js +9 -0
- package/ui/dist/assets/index-D6zVSjO7.css +1 -0
- package/ui/dist/index.html +14 -0
- package/dist/core/approve.d.ts +0 -11
- package/dist/core/approve.d.ts.map +0 -1
- package/dist/core/approve.js +0 -52
- package/dist/core/approve.js.map +0 -1
- package/dist/core/config.d.ts.map +0 -1
- package/dist/core/config.js.map +0 -1
- package/dist/core/hasher.d.ts +0 -4
- package/dist/core/hasher.d.ts.map +0 -1
- package/dist/core/hasher.js.map +0 -1
- package/dist/core/init.d.ts +0 -12
- package/dist/core/init.d.ts.map +0 -1
- package/dist/core/init.js +0 -151
- package/dist/core/init.js.map +0 -1
- package/dist/core/linter.d.ts +0 -8
- package/dist/core/linter.d.ts.map +0 -1
- package/dist/core/linter.js +0 -100
- package/dist/core/linter.js.map +0 -1
- package/dist/core/lock.d.ts.map +0 -1
- package/dist/core/lock.js.map +0 -1
- package/dist/core/logger.d.ts.map +0 -1
- package/dist/core/logger.js.map +0 -1
- package/dist/core/new.d.ts.map +0 -1
- package/dist/core/new.js +0 -79
- package/dist/core/new.js.map +0 -1
- package/dist/core/parser.d.ts +0 -32
- package/dist/core/parser.d.ts.map +0 -1
- package/dist/core/parser.js +0 -87
- package/dist/core/parser.js.map +0 -1
- package/dist/core/report.d.ts +0 -54
- package/dist/core/report.d.ts.map +0 -1
- package/dist/core/report.js +0 -475
- package/dist/core/report.js.map +0 -1
- package/dist/core/show.d.ts +0 -50
- package/dist/core/show.d.ts.map +0 -1
- package/dist/core/show.js +0 -374
- package/dist/core/show.js.map +0 -1
- package/dist/core/state.d.ts +0 -25
- package/dist/core/state.d.ts.map +0 -1
- package/dist/core/state.js +0 -180
- package/dist/core/state.js.map +0 -1
- package/dist/core/status.d.ts +0 -10
- package/dist/core/status.d.ts.map +0 -1
- package/dist/core/status.js +0 -106
- package/dist/core/status.js.map +0 -1
- package/dist/harness/agy.d.ts.map +0 -1
- package/dist/harness/agy.js.map +0 -1
- package/dist/harness/opencode.d.ts.map +0 -1
- package/dist/harness/opencode.js.map +0 -1
package/dist/watcher/loop.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { watch } from 'chokidar';
|
|
4
|
-
import {
|
|
5
|
-
import { resolveSymbol } from '../core/logger.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
4
|
+
import { findHarness } from '../core/foundation/harness-catalog.js';
|
|
5
|
+
import { resolveSymbol } from '../core/foundation/logger.js';
|
|
6
|
+
import { reapStaleLocks } from '../core/run/lock.js';
|
|
7
|
+
import { resolveChangeDoc } from '../core/spec/parser.js';
|
|
8
|
+
import { getArchiveDir, getChangesDir } from '../core/status/layout.js';
|
|
9
|
+
import { compareNumericPrefix, deriveSpecState, readChangeFolder } from '../core/status/state.js';
|
|
8
10
|
import { checkAndArchiveSpec } from './archiver.js';
|
|
11
|
+
import { runAutomaticRetries } from './auto-retry.js';
|
|
12
|
+
import { checkStaleBuild, resolveBuildInfo } from './build.js';
|
|
13
|
+
import { formatReapedMarker, recordDeadEvent, writeDeadMarker } from './outcome.js';
|
|
14
|
+
import { auditScopeRegressions } from './regression.js';
|
|
9
15
|
import { runTask } from './runner.js';
|
|
10
16
|
const SHOW_CURSOR = '\x1b[?25h';
|
|
11
17
|
const EXIT_SIGINT = 130;
|
|
@@ -23,22 +29,55 @@ export function formatAgo(ms) {
|
|
|
23
29
|
return `${days}d ago`;
|
|
24
30
|
}
|
|
25
31
|
/**
|
|
26
|
-
* Single idle status line: the
|
|
27
|
-
* are still waiting, and when the last spec
|
|
28
|
-
* shape is testable without a watcher.
|
|
32
|
+
* Single idle status line: the active build identity, the watched spec
|
|
33
|
+
* directory, how many approved specs are still waiting, and when the last spec
|
|
34
|
+
* was archived. Pure so the exact shape is testable without a watcher. The
|
|
35
|
+
* `osq v<version> (<commit>)` prefix is omitted when no build info is supplied.
|
|
29
36
|
*/
|
|
30
|
-
export function formatIdleStatus(specsDir, approvedWaiting, lastArchived, now = Date.now()) {
|
|
37
|
+
export function formatIdleStatus(specsDir, approvedWaiting, lastArchived, now = Date.now(), buildInfo) {
|
|
31
38
|
const last = lastArchived
|
|
32
39
|
? `last: ${lastArchived.id} archived ${formatAgo(now - lastArchived.archivedAt)}`
|
|
33
40
|
: 'last: none';
|
|
34
|
-
|
|
41
|
+
const prefix = buildInfo ? `osq v${buildInfo.version} (${buildInfo.commit}) · ` : '';
|
|
42
|
+
return `${prefix}watching ${specsDir} · ${approvedWaiting} approved waiting · ${last}`;
|
|
43
|
+
}
|
|
44
|
+
const HUMAN_STEPS_HEADING = /^##[ \t]+Human steps[ \t]*\r?$/im;
|
|
45
|
+
/**
|
|
46
|
+
* Extract the `## Human steps` section from a change document. osq never
|
|
47
|
+
* performs these steps itself; they are printed once the change completes so
|
|
48
|
+
* the human knows which manual actions remain (for the layout cut-over: stop
|
|
49
|
+
* the watcher, run the migration, restart). Returns an empty string when the
|
|
50
|
+
* document has no such section or the section is blank.
|
|
51
|
+
*/
|
|
52
|
+
export function extractHumanSteps(content) {
|
|
53
|
+
const match = HUMAN_STEPS_HEADING.exec(content);
|
|
54
|
+
if (!match || match.index === undefined) {
|
|
55
|
+
return '';
|
|
56
|
+
}
|
|
57
|
+
const remainder = content.slice(match.index + match[0].length);
|
|
58
|
+
const nextHeading = remainder.search(/^##[ \t]+\S/m);
|
|
59
|
+
const section = nextHeading === -1 ? remainder : remainder.slice(0, nextHeading);
|
|
60
|
+
return section.trim();
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Read the `## Human steps` section from a change folder, preferring the
|
|
64
|
+
* OpenSpec `proposal.md` and falling back to a legacy `spec.md`. Never moves
|
|
65
|
+
* anything: the cut-over is always performed by the human.
|
|
66
|
+
*/
|
|
67
|
+
async function readHumanSteps(specFolderPath) {
|
|
68
|
+
const resolved = await resolveChangeDoc(specFolderPath);
|
|
69
|
+
if (!resolved) {
|
|
70
|
+
return '';
|
|
71
|
+
}
|
|
72
|
+
const content = await fs.readFile(resolved.path, 'utf8').catch(() => '');
|
|
73
|
+
return extractHumanSteps(content);
|
|
35
74
|
}
|
|
36
75
|
/**
|
|
37
76
|
* Most recently archived spec folder, derived from the archive directory's
|
|
38
77
|
* modification times so the idle status survives a watcher restart.
|
|
39
78
|
*/
|
|
40
79
|
export async function findLatestArchivedSpec(projectRoot, config) {
|
|
41
|
-
const archiveDir =
|
|
80
|
+
const archiveDir = getArchiveDir(config.paths.openspecRoot, projectRoot);
|
|
42
81
|
let entries = [];
|
|
43
82
|
try {
|
|
44
83
|
entries = await fs.readdir(archiveDir, { withFileTypes: true });
|
|
@@ -70,32 +109,75 @@ function errorMessage(err) {
|
|
|
70
109
|
function logWatcherError(logger, useSymbols, err) {
|
|
71
110
|
logger?.error(`${resolveSymbol('✗', '[error]', useSymbols)} watcher error: ${errorMessage(err)}`);
|
|
72
111
|
}
|
|
112
|
+
/** Permanent stale-task log line: task number plus compact per-path attribution. */
|
|
113
|
+
function formatScopeRegressionLine(stale, symbols) {
|
|
114
|
+
const detail = stale.attribution
|
|
115
|
+
.map((entry) => `${entry.path} -> ${entry.attribution}`)
|
|
116
|
+
.join(', ');
|
|
117
|
+
return `${resolveSymbol('?', '[regressed]', symbols)} task ${stale.taskNumber} regressed (reason: scope_regression, attribution: ${detail || 'none'})`;
|
|
118
|
+
}
|
|
73
119
|
export async function runWatcherCycle(projectRoot, config, adapter, logger) {
|
|
74
120
|
const useSymbols = logger?.symbols === true;
|
|
75
121
|
const tag = (symbol, word) => resolveSymbol(symbol, word, useSymbols);
|
|
76
|
-
|
|
122
|
+
// Resolved once per cycle (and cached in `build.ts`) so both the missing-specs
|
|
123
|
+
// branch and the idle status row carry the same identity.
|
|
124
|
+
const buildInfo = await resolveBuildInfo(projectRoot);
|
|
125
|
+
const specsDir = getChangesDir(config.paths.openspecRoot, projectRoot);
|
|
77
126
|
let entries = [];
|
|
78
127
|
try {
|
|
79
128
|
entries = await fs.readdir(specsDir);
|
|
80
129
|
}
|
|
81
130
|
catch {
|
|
82
|
-
logger?.status(formatIdleStatus(config.paths.
|
|
83
|
-
return { tasksRun: 0, specsArchived: 0 };
|
|
131
|
+
logger?.status(formatIdleStatus(getChangesDir(config.paths.openspecRoot), 0, undefined, undefined, buildInfo));
|
|
132
|
+
return { tasksRun: 0, retried: 0, specsArchived: 0, blockedByRegression: [] };
|
|
84
133
|
}
|
|
85
134
|
const specFolders = entries
|
|
86
135
|
.filter((e) => !e.startsWith('_') && e !== 'archive')
|
|
87
136
|
.sort(compareNumericPrefix);
|
|
88
137
|
let tasksRun = 0;
|
|
138
|
+
let retried = 0;
|
|
89
139
|
let specsArchived = 0;
|
|
90
140
|
let approvedWaiting = 0;
|
|
141
|
+
const blockedByRegression = [];
|
|
142
|
+
const archiveCompletedSpec = async (folder, folderPath, specId) => {
|
|
143
|
+
// Read the manual steps while the folder still exists: the archive move
|
|
144
|
+
// relocates it, and this task never performs those steps itself.
|
|
145
|
+
const humanSteps = await readHumanSteps(folderPath);
|
|
146
|
+
const archived = await checkAndArchiveSpec(projectRoot, folderPath, config);
|
|
147
|
+
if (!archived) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
specsArchived++;
|
|
151
|
+
logger?.info(`${tag('✓ spec', '[archived]')} ${specId} archived (${folder})`);
|
|
152
|
+
if (humanSteps) {
|
|
153
|
+
logger?.info(`Human steps after completion:\n${humanSteps}`);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
91
156
|
for (const folder of specFolders) {
|
|
92
157
|
const folderPath = path.join(specsDir, folder);
|
|
93
158
|
try {
|
|
94
159
|
const stat = await fs.stat(folderPath).catch(() => null);
|
|
95
160
|
if (!stat || !stat.isDirectory())
|
|
96
161
|
continue;
|
|
97
|
-
|
|
98
|
-
|
|
162
|
+
// The reaper only detects and unlinks expired locks; the watcher owns the
|
|
163
|
+
// dead marker and event so every artifact is written through outcome.ts.
|
|
164
|
+
const runDir = path.join(folderPath, '.run');
|
|
165
|
+
const reapedLocks = await reapStaleLocks(folderPath, config.timeouts.staleLockSeconds);
|
|
166
|
+
for (const reaped of reapedLocks) {
|
|
167
|
+
await writeDeadMarker(runDir, reaped.taskNumber, formatReapedMarker(reaped.reason, reaped.pid, reaped.startedAt), projectRoot);
|
|
168
|
+
await recordDeadEvent(folderPath, reaped.taskNumber, reaped.reason);
|
|
169
|
+
}
|
|
170
|
+
let specState = deriveSpecState(await readChangeFolder(projectRoot, folderPath));
|
|
171
|
+
// The automatic-retry decision runs from disk for every approved change
|
|
172
|
+
// after reaping and before the next task is picked. Renaming the active
|
|
173
|
+
// dead marker is the commit point, so a restart loses no retry.
|
|
174
|
+
if (specState.approvedHash) {
|
|
175
|
+
const count = await runAutomaticRetries(projectRoot, folderPath, config, logger);
|
|
176
|
+
if (count > 0) {
|
|
177
|
+
retried += count;
|
|
178
|
+
specState = deriveSpecState(await readChangeFolder(projectRoot, folderPath));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
99
181
|
if (specState.approvedHash &&
|
|
100
182
|
(specState.status === 'pending' ||
|
|
101
183
|
specState.status === 'running' ||
|
|
@@ -105,25 +187,44 @@ export async function runWatcherCycle(projectRoot, config, adapter, logger) {
|
|
|
105
187
|
if (specState.status === 'pending' && specState.nextTask) {
|
|
106
188
|
const taskNumber = specState.nextTask.taskNumber;
|
|
107
189
|
logger?.info(`${tag('▶ spec', '[spec]')} ${specState.id} picked up (${folder})`);
|
|
190
|
+
// Pre-dispatch scope audit runs before any lock: every earlier
|
|
191
|
+
// automated done task is compared in one pass, stale tasks are
|
|
192
|
+
// verified and recorded, and the upcoming task stays untouched.
|
|
193
|
+
const earlier = specState.tasks
|
|
194
|
+
.map((task) => task.taskNumber)
|
|
195
|
+
.filter((number) => Number.parseInt(number, 10) < Number.parseInt(taskNumber, 10));
|
|
196
|
+
const audit = await auditScopeRegressions({
|
|
197
|
+
projectRoot,
|
|
198
|
+
specFolderPath: folderPath,
|
|
199
|
+
eligibleTaskNumbers: earlier,
|
|
200
|
+
verifyTimeoutSeconds: config.timeouts.verifyTimeoutSeconds ?? 600,
|
|
201
|
+
});
|
|
202
|
+
if (audit.stale.length > 0) {
|
|
203
|
+
const staleNumbers = audit.stale
|
|
204
|
+
.map((stale) => stale.taskNumber)
|
|
205
|
+
.sort(compareNumericPrefix);
|
|
206
|
+
for (const stale of audit.stale) {
|
|
207
|
+
logger?.info(formatScopeRegressionLine(stale, useSymbols));
|
|
208
|
+
}
|
|
209
|
+
logger?.info(`${resolveSymbol('■', '[halted]', useSymbols)} spec ${specState.id} halted: tasks ${staleNumbers.join(', ')} require recertification`);
|
|
210
|
+
blockedByRegression.push({
|
|
211
|
+
id: specState.id,
|
|
212
|
+
outcome: 'blocked_by_regression',
|
|
213
|
+
tasks: staleNumbers,
|
|
214
|
+
});
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
108
217
|
const taskResult = await runTask(projectRoot, folderPath, taskNumber, config, adapter, logger);
|
|
109
218
|
tasksRun++;
|
|
110
219
|
if (taskResult.success) {
|
|
111
|
-
|
|
112
|
-
if (archived) {
|
|
113
|
-
specsArchived++;
|
|
114
|
-
logger?.info(`${tag('✓ spec', '[archived]')} ${specState.id} archived (${folder})`);
|
|
115
|
-
}
|
|
220
|
+
await archiveCompletedSpec(folder, folderPath, specState.id);
|
|
116
221
|
}
|
|
117
222
|
else {
|
|
118
223
|
logger?.info(`${tag('■ spec', '[halted]')} ${specState.id} halted (task ${taskNumber} dead)`);
|
|
119
224
|
}
|
|
120
225
|
}
|
|
121
226
|
else if (specState.status === 'done') {
|
|
122
|
-
|
|
123
|
-
if (archived) {
|
|
124
|
-
specsArchived++;
|
|
125
|
-
logger?.info(`${tag('✓ spec', '[archived]')} ${specState.id} archived (${folder})`);
|
|
126
|
-
}
|
|
227
|
+
await archiveCompletedSpec(folder, folderPath, specState.id);
|
|
127
228
|
}
|
|
128
229
|
}
|
|
129
230
|
catch (err) {
|
|
@@ -132,32 +233,48 @@ export async function runWatcherCycle(projectRoot, config, adapter, logger) {
|
|
|
132
233
|
}
|
|
133
234
|
if (tasksRun === 0) {
|
|
134
235
|
const lastArchived = await findLatestArchivedSpec(projectRoot, config).catch(() => undefined);
|
|
135
|
-
logger?.status(formatIdleStatus(config.paths.
|
|
236
|
+
logger?.status(formatIdleStatus(getChangesDir(config.paths.openspecRoot), approvedWaiting, lastArchived, undefined, buildInfo));
|
|
136
237
|
}
|
|
137
|
-
return { tasksRun, specsArchived };
|
|
238
|
+
return { tasksRun, retried, specsArchived, blockedByRegression };
|
|
138
239
|
}
|
|
139
240
|
export async function runWatcherOnce(projectRoot, config, adapter, logger) {
|
|
140
241
|
let totalTasksRun = 0;
|
|
242
|
+
let totalRetried = 0;
|
|
141
243
|
let totalSpecsArchived = 0;
|
|
244
|
+
const blockedByRegression = [];
|
|
142
245
|
while (true) {
|
|
143
246
|
const cycle = await runWatcherCycle(projectRoot, config, adapter, logger);
|
|
144
247
|
totalTasksRun += cycle.tasksRun;
|
|
248
|
+
totalRetried += cycle.retried;
|
|
145
249
|
totalSpecsArchived += cycle.specsArchived;
|
|
146
|
-
|
|
250
|
+
blockedByRegression.push(...cycle.blockedByRegression);
|
|
251
|
+
// A retry is progress on its own: loop again so the retried task runs.
|
|
252
|
+
if (cycle.tasksRun === 0 && cycle.retried === 0) {
|
|
147
253
|
break;
|
|
148
254
|
}
|
|
149
255
|
}
|
|
150
|
-
return {
|
|
256
|
+
return {
|
|
257
|
+
tasksRun: totalTasksRun,
|
|
258
|
+
retried: totalRetried,
|
|
259
|
+
specsArchived: totalSpecsArchived,
|
|
260
|
+
blockedByRegression,
|
|
261
|
+
};
|
|
151
262
|
}
|
|
152
263
|
export async function startWatcher(projectRoot, config, adapter, options = {}) {
|
|
153
264
|
const logger = options.logger;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
265
|
+
// A checkout running a stale compiled build is a footgun: refuse before the
|
|
266
|
+
// first cycle unless the caller opted out or is executing from source.
|
|
267
|
+
if (!options.allowStale && !options.dev) {
|
|
268
|
+
await checkStaleBuild({ allowStale: options.allowStale });
|
|
269
|
+
}
|
|
270
|
+
// Invoke the selected adapter's optional preflight port directly. There is no
|
|
271
|
+
// harness-name gate and no adapter-specific fallback: the adapter either owns
|
|
272
|
+
// its preflight or the watcher proceeds. Catalogued harnesses that declare no
|
|
273
|
+
// external executable have no process to probe, so their port is not invoked
|
|
274
|
+
// even when a caller supplies a preflight implementation.
|
|
275
|
+
const selected = findHarness(config.harness);
|
|
276
|
+
if (adapter.preflight && selected && selected.executable(config) !== null) {
|
|
277
|
+
await adapter.preflight(projectRoot, config);
|
|
161
278
|
}
|
|
162
279
|
if (options.once) {
|
|
163
280
|
await runWatcherOnce(projectRoot, config, adapter, logger);
|
|
@@ -220,7 +337,7 @@ export async function startWatcher(projectRoot, config, adapter, options = {}) {
|
|
|
220
337
|
await cycleHandler();
|
|
221
338
|
if (interrupted || stopped)
|
|
222
339
|
return;
|
|
223
|
-
const specsDir =
|
|
340
|
+
const specsDir = getChangesDir(config.paths.openspecRoot, projectRoot);
|
|
224
341
|
watcher = watch(specsDir, {
|
|
225
342
|
ignoreInitial: true,
|
|
226
343
|
depth: 3,
|
package/dist/watcher/loop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/watcher/loop.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/watcher/loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type TaskData } from '../core/spec/parser.js';
|
|
2
|
+
import { type MeasuresEventData } from '../harness/types.js';
|
|
3
|
+
/** Per-file hashes and line counts for a task's scope. */
|
|
4
|
+
export interface ScopeState {
|
|
5
|
+
hashes: Record<string, string | null>;
|
|
6
|
+
lines: Record<string, number>;
|
|
7
|
+
}
|
|
8
|
+
/** Snapshot every resolved scoped file's content hash and line count in one pass. */
|
|
9
|
+
export declare function snapshotScope(projectRoot: string, scope: string[]): Promise<ScopeState>;
|
|
10
|
+
/** Line count of every existing file in `scope`; missing files contribute nothing. */
|
|
11
|
+
export declare function gatherScopeCounts(projectRoot: string, scope: string[]): Promise<{
|
|
12
|
+
files: number;
|
|
13
|
+
lines: number;
|
|
14
|
+
}>;
|
|
15
|
+
/** Recursively total all text files and their lines, skipping ignored directories. */
|
|
16
|
+
export declare function gatherRepoCounts(projectRoot: string): Promise<{
|
|
17
|
+
files: number;
|
|
18
|
+
lines: number;
|
|
19
|
+
}>;
|
|
20
|
+
/** Count of non-scoped `src/**` TypeScript files that import at least one resolved scoped file. */
|
|
21
|
+
export declare function countImportFanIn(projectRoot: string, scope: string[]): Promise<number>;
|
|
22
|
+
/** Whitespace-delimited word count; empty and whitespace-only input yield 0. */
|
|
23
|
+
export declare function countWords(text: string): number;
|
|
24
|
+
/** Requirement and scenario header counts across a change's delta spec files. */
|
|
25
|
+
export declare function countDeltaRequirementsAndScenarios(specFolderPath: string): Promise<{
|
|
26
|
+
requirements: number;
|
|
27
|
+
scenarios: number;
|
|
28
|
+
}>;
|
|
29
|
+
/** `sha256:<hex>` of a file's UTF-8 content, or `null` when it cannot be read. */
|
|
30
|
+
export declare function hashFileForMeasures(filePath: string): Promise<string | null>;
|
|
31
|
+
/** Map of project-relative scoped path to its current content hash. */
|
|
32
|
+
export declare function snapshotScopeHashes(projectRoot: string, scope: string[]): Promise<Record<string, string | null>>;
|
|
33
|
+
/** Map of project-relative scoped path to its current line count; missing files are 0. */
|
|
34
|
+
export declare function snapshotScopeLines(projectRoot: string, scope: string[]): Promise<Record<string, number>>;
|
|
35
|
+
/** The single emission path for both start and end measures events. */
|
|
36
|
+
export declare function emitMeasures(specFolderPath: string, taskNumber: string, data: MeasuresEventData): Promise<void>;
|
|
37
|
+
/** Collect the raw start-phase baselines for a task. */
|
|
38
|
+
export declare function gatherStartMeasures(projectRoot: string, specFolderPath: string, taskData: TaskData): Promise<MeasuresEventData>;
|
|
39
|
+
/** End-phase diff: changed file count, absolute line delta, and before/after hashes. */
|
|
40
|
+
export declare function gatherEndMeasures(startMeasures: MeasuresEventData, before: ScopeState, projectRoot: string, scope: string[]): Promise<MeasuresEventData>;
|
|
41
|
+
/** Create the start/end measures emitter pair for one task run. */
|
|
42
|
+
export declare function createTaskMeasures(projectRoot: string, specFolderPath: string, taskNumber: string, taskData: TaskData): {
|
|
43
|
+
emitStart(): Promise<void>;
|
|
44
|
+
emitEnd(): Promise<void>;
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=measures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measures.d.ts","sourceRoot":"","sources":["../../src/watcher/measures.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,QAAQ,EAAoB,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,KAAK,iBAAiB,EAAsB,MAAM,qBAAqB,CAAC;AAoBjF,0DAA0D;AAC1D,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,qFAAqF;AACrF,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAS7F;AAED,sFAAsF;AACtF,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAK3C;AAED,sFAAsF;AACtF,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB3C;AAkBD,mGAAmG;AACnG,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAe5F;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,iFAAiF;AACjF,wBAAsB,kCAAkC,CACtD,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CActD;AAED,kFAAkF;AAClF,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGlF;AAED,uEAAuE;AACvE,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAExC;AAED,0FAA0F;AAC1F,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAEjC;AAED,uEAAuE;AACvE,wBAAsB,YAAY,CAChC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wDAAwD;AACxD,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,iBAAiB,CAAC,CAwB5B;AAED,wFAAwF;AACxF,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,iBAAiB,EAChC,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,iBAAiB,CAAC,CAe5B;AAED,mEAAmE;AACnE,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,QAAQ,GACjB;IAAE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAe1D"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { SCOPE_RESOLVER_VERSION, resolveScope } from '../core/run/scope.js';
|
|
5
|
+
import { resolveChangeDoc } from '../core/spec/parser.js';
|
|
6
|
+
import { appendHarnessEvent } from '../harness/types.js';
|
|
7
|
+
const IGNORED_DIRS = new Set('node_modules dist .git .run coverage .nyc_output .vscode .idea'.split(' '));
|
|
8
|
+
const SCRIPT_EXTENSION_REGEX = /\.(?:ts|tsx|js|mjs|cjs)$/;
|
|
9
|
+
function countLines(content) {
|
|
10
|
+
return content.split('\n').length;
|
|
11
|
+
}
|
|
12
|
+
function toPosix(value) {
|
|
13
|
+
return value.split(path.sep).join('/');
|
|
14
|
+
}
|
|
15
|
+
function relativePosix(projectRoot, filePath) {
|
|
16
|
+
return toPosix(path.relative(projectRoot, filePath));
|
|
17
|
+
}
|
|
18
|
+
function hashContent(content) {
|
|
19
|
+
return `sha256:${crypto.createHash('sha256').update(content, 'utf8').digest('hex')}`;
|
|
20
|
+
}
|
|
21
|
+
/** Snapshot every resolved scoped file's content hash and line count in one pass. */
|
|
22
|
+
export async function snapshotScope(projectRoot, scope) {
|
|
23
|
+
const hashes = {};
|
|
24
|
+
const lines = {};
|
|
25
|
+
for (const { relativePath, absolutePath } of await resolveScope(projectRoot, scope)) {
|
|
26
|
+
const content = absolutePath ? await fs.readFile(absolutePath, 'utf8').catch(() => null) : null;
|
|
27
|
+
hashes[relativePath] = content === null ? null : hashContent(content);
|
|
28
|
+
lines[relativePath] = content === null ? 0 : countLines(content);
|
|
29
|
+
}
|
|
30
|
+
return { hashes, lines };
|
|
31
|
+
}
|
|
32
|
+
/** Line count of every existing file in `scope`; missing files contribute nothing. */
|
|
33
|
+
export async function gatherScopeCounts(projectRoot, scope) {
|
|
34
|
+
const { hashes, lines } = await snapshotScope(projectRoot, scope);
|
|
35
|
+
const files = Object.values(hashes).filter((hash) => hash !== null).length;
|
|
36
|
+
const total = Object.values(lines).reduce((sum, count) => sum + count, 0);
|
|
37
|
+
return { files, lines: total };
|
|
38
|
+
}
|
|
39
|
+
/** Recursively total all text files and their lines, skipping ignored directories. */
|
|
40
|
+
export async function gatherRepoCounts(projectRoot) {
|
|
41
|
+
let files = 0;
|
|
42
|
+
let lines = 0;
|
|
43
|
+
const walk = async (dir) => {
|
|
44
|
+
const entries = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
|
|
45
|
+
for (const entry of entries) {
|
|
46
|
+
const fullPath = path.join(dir, entry.name);
|
|
47
|
+
if (entry.isDirectory()) {
|
|
48
|
+
if (!IGNORED_DIRS.has(entry.name))
|
|
49
|
+
await walk(fullPath);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (!entry.isFile())
|
|
53
|
+
continue;
|
|
54
|
+
const content = await fs.readFile(fullPath, 'utf8').catch(() => null);
|
|
55
|
+
if (content === null || content.includes('\u0000'))
|
|
56
|
+
continue;
|
|
57
|
+
files += 1;
|
|
58
|
+
lines += countLines(content);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
await walk(projectRoot);
|
|
62
|
+
return { files, lines };
|
|
63
|
+
}
|
|
64
|
+
async function listTsFiles(dir) {
|
|
65
|
+
const entries = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
|
|
66
|
+
const files = [];
|
|
67
|
+
for (const entry of entries) {
|
|
68
|
+
const fullPath = path.join(dir, entry.name);
|
|
69
|
+
if (entry.isDirectory())
|
|
70
|
+
files.push(...(await listTsFiles(fullPath)));
|
|
71
|
+
else if (entry.isFile() && entry.name.endsWith('.ts'))
|
|
72
|
+
files.push(fullPath);
|
|
73
|
+
}
|
|
74
|
+
return files;
|
|
75
|
+
}
|
|
76
|
+
function importSpecifier(fromDir, targetPath) {
|
|
77
|
+
const relative = toPosix(path.relative(fromDir, targetPath)).replace(SCRIPT_EXTENSION_REGEX, '');
|
|
78
|
+
return relative.startsWith('.') ? relative : `./${relative}`;
|
|
79
|
+
}
|
|
80
|
+
/** Count of non-scoped `src/**` TypeScript files that import at least one resolved scoped file. */
|
|
81
|
+
export async function countImportFanIn(projectRoot, scope) {
|
|
82
|
+
const srcDir = path.join(projectRoot, 'src');
|
|
83
|
+
const scopePaths = (await resolveScope(projectRoot, scope))
|
|
84
|
+
.map((entry) => entry.absolutePath)
|
|
85
|
+
.filter((resolved) => resolved?.startsWith(srcDir + path.sep) === true);
|
|
86
|
+
const scoped = new Set(scopePaths.map((resolved) => relativePosix(projectRoot, resolved)));
|
|
87
|
+
let importers = 0;
|
|
88
|
+
for (const file of await listTsFiles(srcDir)) {
|
|
89
|
+
if (scoped.has(relativePosix(projectRoot, file)))
|
|
90
|
+
continue;
|
|
91
|
+
const content = await fs.readFile(file, 'utf8').catch(() => '');
|
|
92
|
+
if (!content)
|
|
93
|
+
continue;
|
|
94
|
+
const dir = path.dirname(file);
|
|
95
|
+
if (scopePaths.some((target) => content.includes(importSpecifier(dir, target))))
|
|
96
|
+
importers += 1;
|
|
97
|
+
}
|
|
98
|
+
return importers;
|
|
99
|
+
}
|
|
100
|
+
/** Whitespace-delimited word count; empty and whitespace-only input yield 0. */
|
|
101
|
+
export function countWords(text) {
|
|
102
|
+
return text.split(/\s+/).filter((word) => word.length > 0).length;
|
|
103
|
+
}
|
|
104
|
+
/** Requirement and scenario header counts across a change's delta spec files. */
|
|
105
|
+
export async function countDeltaRequirementsAndScenarios(specFolderPath) {
|
|
106
|
+
const specsDir = path.join(specFolderPath, 'specs');
|
|
107
|
+
const entries = await fs.readdir(specsDir, { withFileTypes: true }).catch(() => []);
|
|
108
|
+
let requirements = 0;
|
|
109
|
+
let scenarios = 0;
|
|
110
|
+
for (const entry of entries) {
|
|
111
|
+
if (!entry.isDirectory())
|
|
112
|
+
continue;
|
|
113
|
+
const content = await fs
|
|
114
|
+
.readFile(path.join(specsDir, entry.name, 'spec.md'), 'utf8')
|
|
115
|
+
.catch(() => '');
|
|
116
|
+
requirements += (content.match(/^###\s+Requirement:/gm) ?? []).length;
|
|
117
|
+
scenarios += (content.match(/^####\s+Scenario:/gm) ?? []).length;
|
|
118
|
+
}
|
|
119
|
+
return { requirements, scenarios };
|
|
120
|
+
}
|
|
121
|
+
/** `sha256:<hex>` of a file's UTF-8 content, or `null` when it cannot be read. */
|
|
122
|
+
export async function hashFileForMeasures(filePath) {
|
|
123
|
+
const content = await fs.readFile(filePath, 'utf8').catch(() => null);
|
|
124
|
+
return content === null ? null : hashContent(content);
|
|
125
|
+
}
|
|
126
|
+
/** Map of project-relative scoped path to its current content hash. */
|
|
127
|
+
export async function snapshotScopeHashes(projectRoot, scope) {
|
|
128
|
+
return (await snapshotScope(projectRoot, scope)).hashes;
|
|
129
|
+
}
|
|
130
|
+
/** Map of project-relative scoped path to its current line count; missing files are 0. */
|
|
131
|
+
export async function snapshotScopeLines(projectRoot, scope) {
|
|
132
|
+
return (await snapshotScope(projectRoot, scope)).lines;
|
|
133
|
+
}
|
|
134
|
+
/** The single emission path for both start and end measures events. */
|
|
135
|
+
export async function emitMeasures(specFolderPath, taskNumber, data) {
|
|
136
|
+
await appendHarnessEvent(specFolderPath, taskNumber, {
|
|
137
|
+
type: 'measures',
|
|
138
|
+
timestamp: new Date().toISOString(),
|
|
139
|
+
data,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/** Collect the raw start-phase baselines for a task. */
|
|
143
|
+
export async function gatherStartMeasures(projectRoot, specFolderPath, taskData) {
|
|
144
|
+
const proposalDoc = await resolveChangeDoc(specFolderPath);
|
|
145
|
+
const proposalContent = proposalDoc
|
|
146
|
+
? await fs.readFile(proposalDoc.path, 'utf8').catch(() => '')
|
|
147
|
+
: '';
|
|
148
|
+
const [scopeCounts, repoCounts, importFanIn, delta] = await Promise.all([
|
|
149
|
+
gatherScopeCounts(projectRoot, taskData.scope),
|
|
150
|
+
gatherRepoCounts(projectRoot),
|
|
151
|
+
countImportFanIn(projectRoot, taskData.scope),
|
|
152
|
+
countDeltaRequirementsAndScenarios(specFolderPath),
|
|
153
|
+
]);
|
|
154
|
+
return {
|
|
155
|
+
phase: 'start',
|
|
156
|
+
scopeResolver: SCOPE_RESOLVER_VERSION,
|
|
157
|
+
scopeFiles: scopeCounts.files,
|
|
158
|
+
scopeLines: scopeCounts.lines,
|
|
159
|
+
repoFiles: repoCounts.files,
|
|
160
|
+
repoLines: repoCounts.lines,
|
|
161
|
+
importFanIn,
|
|
162
|
+
proposalWords: countWords(proposalContent),
|
|
163
|
+
taskWords: countWords(taskData.raw),
|
|
164
|
+
deltaRequirements: delta.requirements,
|
|
165
|
+
deltaScenarios: delta.scenarios,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/** End-phase diff: changed file count, absolute line delta, and before/after hashes. */
|
|
169
|
+
export async function gatherEndMeasures(startMeasures, before, projectRoot, scope) {
|
|
170
|
+
const after = await snapshotScope(projectRoot, scope);
|
|
171
|
+
const scopeHashes = {};
|
|
172
|
+
let changedFiles = 0;
|
|
173
|
+
let changedLines = 0;
|
|
174
|
+
for (const key of new Set([...Object.keys(before.hashes), ...Object.keys(after.hashes)])) {
|
|
175
|
+
const beforeHash = before.hashes[key] ?? null;
|
|
176
|
+
const afterHash = after.hashes[key] ?? null;
|
|
177
|
+
scopeHashes[key] = { before: beforeHash, after: afterHash };
|
|
178
|
+
if (beforeHash !== afterHash) {
|
|
179
|
+
changedFiles += 1;
|
|
180
|
+
changedLines += Math.abs((after.lines[key] ?? 0) - (before.lines[key] ?? 0));
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return { ...startMeasures, phase: 'end', changedFiles, changedLines, scopeHashes };
|
|
184
|
+
}
|
|
185
|
+
/** Create the start/end measures emitter pair for one task run. */
|
|
186
|
+
export function createTaskMeasures(projectRoot, specFolderPath, taskNumber, taskData) {
|
|
187
|
+
let start = null;
|
|
188
|
+
let before = null;
|
|
189
|
+
return {
|
|
190
|
+
async emitStart() {
|
|
191
|
+
before = await snapshotScope(projectRoot, taskData.scope);
|
|
192
|
+
start = await gatherStartMeasures(projectRoot, specFolderPath, taskData);
|
|
193
|
+
await emitMeasures(specFolderPath, taskNumber, start);
|
|
194
|
+
},
|
|
195
|
+
async emitEnd() {
|
|
196
|
+
if (!start || !before)
|
|
197
|
+
return;
|
|
198
|
+
const end = await gatherEndMeasures(start, before, projectRoot, taskData.scope);
|
|
199
|
+
await emitMeasures(specFolderPath, taskNumber, end);
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=measures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measures.js","sourceRoot":"","sources":["../../src/watcher/measures.ts"],"names":[],"mappings":"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"}
|