@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-hash.js","sourceRoot":"","sources":["../../../src/core/run/scope-hash.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version of the deterministic scope resolver. Consumers that persist scope
|
|
3
|
+
* evidence record this value so legacy and resolver-2 artifacts stay distinct.
|
|
4
|
+
*/
|
|
5
|
+
export declare const SCOPE_RESOLVER_VERSION = 2;
|
|
6
|
+
/**
|
|
7
|
+
* One resolved scope entry. `relativePath` is always a normalized
|
|
8
|
+
* project-relative POSIX path, while `absolutePath` is the readable path of an
|
|
9
|
+
* existing regular file or `null` for a missing exact declaration.
|
|
10
|
+
*/
|
|
11
|
+
export interface ResolvedScopeEntry {
|
|
12
|
+
readonly relativePath: string;
|
|
13
|
+
readonly absolutePath: string | null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* True when a list of declared scope entries covers one project-relative path:
|
|
17
|
+
* the path equals an exact entry, or a glob or trailing-directory entry matches
|
|
18
|
+
* it through the same `globToRegExp` translation the resolver uses. This is a
|
|
19
|
+
* pure predicate; it never touches the filesystem.
|
|
20
|
+
*/
|
|
21
|
+
export declare function scopeCoversPath(scope: readonly string[], relativePath: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Resolve scope declarations against the project tree deterministically. Exact
|
|
24
|
+
* declarations contribute their existing regular file or a null-valued entry
|
|
25
|
+
* when missing; glob and trailing-directory declarations contribute every
|
|
26
|
+
* matching regular file. Results are deduplicated, lexically sorted
|
|
27
|
+
* project-relative POSIX entries and never escape the project root.
|
|
28
|
+
*/
|
|
29
|
+
export declare function resolveScope(projectRoot: string, scope: readonly string[]): Promise<ResolvedScopeEntry[]>;
|
|
30
|
+
//# sourceMappingURL=scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/core/run/scope.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAgED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAevF;AA4DD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA6C/B"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Version of the deterministic scope resolver. Consumers that persist scope
|
|
5
|
+
* evidence record this value so legacy and resolver-2 artifacts stay distinct.
|
|
6
|
+
*/
|
|
7
|
+
export const SCOPE_RESOLVER_VERSION = 2;
|
|
8
|
+
/** Glob metacharacters that distinguish a pattern from an exact declaration. */
|
|
9
|
+
const GLOB_METACHARACTER_REGEX = /[*?]/;
|
|
10
|
+
/** Normalize a raw scope entry to a trimmed, POSIX, project-relative form. */
|
|
11
|
+
function normalizeScopeEntry(entry) {
|
|
12
|
+
return entry
|
|
13
|
+
.trim()
|
|
14
|
+
.replace(/\\/g, '/')
|
|
15
|
+
.replace(/^(?:\.\/)+/, '');
|
|
16
|
+
}
|
|
17
|
+
/** A pattern is a glob or a trailing-directory form; everything else is exact. */
|
|
18
|
+
function isPatternEntry(normalized) {
|
|
19
|
+
return GLOB_METACHARACTER_REGEX.test(normalized) || normalized.endsWith('/');
|
|
20
|
+
}
|
|
21
|
+
/** Normalize a path to a project-relative POSIX string. */
|
|
22
|
+
function relativePosix(projectRoot, filePath) {
|
|
23
|
+
return path.relative(projectRoot, filePath).split(path.sep).join('/');
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Translate a scope glob into an anchored regular expression. Supports `*`
|
|
27
|
+
* (within one path segment), `**` (across segments), and `?`; a trailing `/`
|
|
28
|
+
* expands to that directory's recursive contents.
|
|
29
|
+
*/
|
|
30
|
+
function globToRegExp(glob) {
|
|
31
|
+
let normalized = normalizeScopeEntry(glob);
|
|
32
|
+
if (normalized.endsWith('/')) {
|
|
33
|
+
normalized = `${normalized}**`;
|
|
34
|
+
}
|
|
35
|
+
normalized = normalized.replace(/\/+$/, '');
|
|
36
|
+
let source = '^';
|
|
37
|
+
let index = 0;
|
|
38
|
+
while (index < normalized.length) {
|
|
39
|
+
const char = normalized[index];
|
|
40
|
+
if (char === '*') {
|
|
41
|
+
if (normalized[index + 1] === '*') {
|
|
42
|
+
index += 2;
|
|
43
|
+
if (normalized[index] === '/') {
|
|
44
|
+
index += 1;
|
|
45
|
+
source += '(?:.*/)?';
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
source += '.*';
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
index += 1;
|
|
53
|
+
source += '[^/]*';
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else if (char === '?') {
|
|
57
|
+
index += 1;
|
|
58
|
+
source += '[^/]';
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
source += char.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
62
|
+
index += 1;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return new RegExp(`${source}$`);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* True when a list of declared scope entries covers one project-relative path:
|
|
69
|
+
* the path equals an exact entry, or a glob or trailing-directory entry matches
|
|
70
|
+
* it through the same `globToRegExp` translation the resolver uses. This is a
|
|
71
|
+
* pure predicate; it never touches the filesystem.
|
|
72
|
+
*/
|
|
73
|
+
export function scopeCoversPath(scope, relativePath) {
|
|
74
|
+
const normalizedPath = normalizeScopeEntry(relativePath);
|
|
75
|
+
for (const rawEntry of scope) {
|
|
76
|
+
if (typeof rawEntry !== 'string')
|
|
77
|
+
continue;
|
|
78
|
+
const normalizedEntry = normalizeScopeEntry(rawEntry);
|
|
79
|
+
if (normalizedEntry === normalizedPath) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
if (isPatternEntry(normalizedEntry) && globToRegExp(normalizedEntry).test(normalizedPath)) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* The project-relative directory a pattern can possibly match beneath. Walking
|
|
90
|
+
* only this prefix keeps resolution proportional to the declared scope rather
|
|
91
|
+
* than the whole project tree.
|
|
92
|
+
*/
|
|
93
|
+
function patternSearchRoot(normalized) {
|
|
94
|
+
if (!GLOB_METACHARACTER_REGEX.test(normalized)) {
|
|
95
|
+
return normalized.replace(/\/+$/, '');
|
|
96
|
+
}
|
|
97
|
+
const firstMeta = normalized.search(GLOB_METACHARACTER_REGEX);
|
|
98
|
+
const prefix = normalized.slice(0, firstMeta);
|
|
99
|
+
const lastSlash = prefix.lastIndexOf('/');
|
|
100
|
+
return lastSlash === -1 ? '' : prefix.slice(0, lastSlash);
|
|
101
|
+
}
|
|
102
|
+
/** True when `relative` stays strictly inside the project root. */
|
|
103
|
+
function staysInsideProject(relative) {
|
|
104
|
+
return (relative !== '..' &&
|
|
105
|
+
!relative.startsWith(`..${path.sep}`) &&
|
|
106
|
+
!relative.startsWith('../') &&
|
|
107
|
+
!path.isAbsolute(relative));
|
|
108
|
+
}
|
|
109
|
+
/** Recursively list every regular file under `root` as a project-relative path. */
|
|
110
|
+
async function listFilesUnder(projectRoot, root) {
|
|
111
|
+
const base = root === '' ? projectRoot : path.join(projectRoot, root);
|
|
112
|
+
const files = [];
|
|
113
|
+
const walk = async (dir) => {
|
|
114
|
+
let entries;
|
|
115
|
+
try {
|
|
116
|
+
entries = await fs.readdir(dir, { withFileTypes: true });
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const ordered = [...entries].sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));
|
|
122
|
+
for (const entry of ordered) {
|
|
123
|
+
const full = path.join(dir, entry.name);
|
|
124
|
+
if (entry.isDirectory()) {
|
|
125
|
+
await walk(full);
|
|
126
|
+
}
|
|
127
|
+
else if (entry.isFile()) {
|
|
128
|
+
files.push(relativePosix(projectRoot, full));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
await walk(base);
|
|
133
|
+
return files.sort();
|
|
134
|
+
}
|
|
135
|
+
function compareResolved(a, b) {
|
|
136
|
+
if (a.relativePath < b.relativePath)
|
|
137
|
+
return -1;
|
|
138
|
+
if (a.relativePath > b.relativePath)
|
|
139
|
+
return 1;
|
|
140
|
+
return 0;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Resolve scope declarations against the project tree deterministically. Exact
|
|
144
|
+
* declarations contribute their existing regular file or a null-valued entry
|
|
145
|
+
* when missing; glob and trailing-directory declarations contribute every
|
|
146
|
+
* matching regular file. Results are deduplicated, lexically sorted
|
|
147
|
+
* project-relative POSIX entries and never escape the project root.
|
|
148
|
+
*/
|
|
149
|
+
export async function resolveScope(projectRoot, scope) {
|
|
150
|
+
const results = new Map();
|
|
151
|
+
const walkCache = new Map();
|
|
152
|
+
const add = (relativePath, absolutePath) => {
|
|
153
|
+
if (!results.has(relativePath)) {
|
|
154
|
+
results.set(relativePath, { relativePath, absolutePath });
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
for (const rawEntry of scope) {
|
|
158
|
+
if (typeof rawEntry !== 'string')
|
|
159
|
+
continue;
|
|
160
|
+
const normalized = normalizeScopeEntry(rawEntry);
|
|
161
|
+
if (isPatternEntry(normalized)) {
|
|
162
|
+
const root = patternSearchRoot(normalized);
|
|
163
|
+
if (!staysInsideProject(root))
|
|
164
|
+
continue;
|
|
165
|
+
const regex = globToRegExp(normalized);
|
|
166
|
+
let files = walkCache.get(root);
|
|
167
|
+
if (files === undefined) {
|
|
168
|
+
files = await listFilesUnder(projectRoot, root);
|
|
169
|
+
walkCache.set(root, files);
|
|
170
|
+
}
|
|
171
|
+
for (const relative of files) {
|
|
172
|
+
if (regex.test(relative)) {
|
|
173
|
+
add(relative, path.join(projectRoot, relative));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
const resolved = path.resolve(projectRoot, normalized);
|
|
179
|
+
if (!staysInsideProject(path.relative(projectRoot, resolved))) {
|
|
180
|
+
add(normalized, null);
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
const stat = await fs.lstat(resolved).catch(() => null);
|
|
184
|
+
if (stat?.isFile()) {
|
|
185
|
+
add(relativePosix(projectRoot, resolved), resolved);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
add(normalized, null);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return [...results.values()].sort(compareResolved);
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../../src/core/run/scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strip the project root from absolute paths embedded in a tool summary so the
|
|
3
|
+
* status row reads a clean repository relative path. Relativization happens once
|
|
4
|
+
* at write time (harness adapters) and once more for display (heartbeat), but the
|
|
5
|
+
* function lives in core so both layers share a single implementation.
|
|
6
|
+
*/
|
|
7
|
+
export declare function relativizeToolSummary(summary: string, root?: string): string;
|
|
8
|
+
//# sourceMappingURL=summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../src/core/run/summary.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAsB,GAAG,MAAM,CAoB3F"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strip the project root from absolute paths embedded in a tool summary so the
|
|
3
|
+
* status row reads a clean repository relative path. Relativization happens once
|
|
4
|
+
* at write time (harness adapters) and once more for display (heartbeat), but the
|
|
5
|
+
* function lives in core so both layers share a single implementation.
|
|
6
|
+
*/
|
|
7
|
+
export function relativizeToolSummary(summary, root = process.cwd()) {
|
|
8
|
+
if (!summary || !root) {
|
|
9
|
+
return summary;
|
|
10
|
+
}
|
|
11
|
+
// Compare without a trailing separator so `${normalizedRoot}/` strips
|
|
12
|
+
// cleanly, but keep a bare filesystem root intact so it is not reduced to an
|
|
13
|
+
// empty string that would match every separator in the summary.
|
|
14
|
+
const normalizedRoot = root.length > 1 ? root.replace(/[\\/]+$/, '') : root;
|
|
15
|
+
if (!normalizedRoot || normalizedRoot === '/' || normalizedRoot === '\\') {
|
|
16
|
+
return summary;
|
|
17
|
+
}
|
|
18
|
+
const escapedRoot = normalizedRoot.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
19
|
+
const withSeparator = new RegExp(`${escapedRoot}[\\\\/]`, 'g');
|
|
20
|
+
const relativized = summary.replace(withSeparator, '');
|
|
21
|
+
// A summary that is exactly the root has no trailing separator to strip.
|
|
22
|
+
const exactRoot = new RegExp(`${escapedRoot}(?=$|[\\s"'()\\[\\]{},;:])`, 'g');
|
|
23
|
+
return relativized.replace(exactRoot, '.');
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../src/core/run/summary.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,OAAe,OAAO,CAAC,GAAG,EAAE;IACjF,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,sEAAsE;IACtE,6EAA6E;IAC7E,gEAAgE;IAChE,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,GAAG,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QACzE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,GAAG,WAAW,SAAS,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAEvD,yEAAyE;IACzE,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,GAAG,WAAW,4BAA4B,EAAE,GAAG,CAAC,CAAC;IAC9E,OAAO,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Raw outcome of one timeout-bounded verification command. */
|
|
2
|
+
export interface VerificationResult {
|
|
3
|
+
command: string;
|
|
4
|
+
exitCode: number;
|
|
5
|
+
/** Wall-clock duration in seconds, rounded to two decimals. */
|
|
6
|
+
duration: number;
|
|
7
|
+
/** Combined stdout and stderr captured while the command ran. */
|
|
8
|
+
output: string;
|
|
9
|
+
timedOut: boolean;
|
|
10
|
+
/** Spawn-level failure message, when the process could not be started. */
|
|
11
|
+
error?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Execute a verification command under a configured timeout, capturing its
|
|
15
|
+
* command, exit code, wall-clock duration, combined output, and timeout state.
|
|
16
|
+
*
|
|
17
|
+
* This is the single core process implementation shared by the task,
|
|
18
|
+
* scope-audit, archive, and recertification gates. It never imports from the
|
|
19
|
+
* watcher or harness layers, so core retains its import boundary; callers own
|
|
20
|
+
* event emission.
|
|
21
|
+
*/
|
|
22
|
+
export declare function runVerificationCommand(projectRoot: string, command: string, timeoutSeconds: number): Promise<VerificationResult>;
|
|
23
|
+
//# sourceMappingURL=verification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../../src/core/run/verification.ts"],"names":[],"mappings":"AAEA,+DAA+D;AAC/D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAWD;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,kBAAkB,CAAC,CA0D7B"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
function killTree(child, signal) {
|
|
3
|
+
const pid = child.pid ?? Number.NaN;
|
|
4
|
+
try {
|
|
5
|
+
process.kill(-pid, signal);
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
child.kill(signal);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Execute a verification command under a configured timeout, capturing its
|
|
13
|
+
* command, exit code, wall-clock duration, combined output, and timeout state.
|
|
14
|
+
*
|
|
15
|
+
* This is the single core process implementation shared by the task,
|
|
16
|
+
* scope-audit, archive, and recertification gates. It never imports from the
|
|
17
|
+
* watcher or harness layers, so core retains its import boundary; callers own
|
|
18
|
+
* event emission.
|
|
19
|
+
*/
|
|
20
|
+
export async function runVerificationCommand(projectRoot, command, timeoutSeconds) {
|
|
21
|
+
const startMs = Date.now();
|
|
22
|
+
const timeoutMs = timeoutSeconds * 1000;
|
|
23
|
+
let timedOut = false;
|
|
24
|
+
let exitCode = 1;
|
|
25
|
+
let output = '';
|
|
26
|
+
let spawnError;
|
|
27
|
+
await new Promise((resolve) => {
|
|
28
|
+
const child = spawn(command, {
|
|
29
|
+
cwd: projectRoot,
|
|
30
|
+
shell: true,
|
|
31
|
+
detached: true,
|
|
32
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
33
|
+
});
|
|
34
|
+
let timer = null;
|
|
35
|
+
let killTimer = null;
|
|
36
|
+
let settled = false;
|
|
37
|
+
const finish = () => {
|
|
38
|
+
if (settled)
|
|
39
|
+
return;
|
|
40
|
+
settled = true;
|
|
41
|
+
if (timer)
|
|
42
|
+
clearTimeout(timer);
|
|
43
|
+
if (killTimer)
|
|
44
|
+
clearTimeout(killTimer);
|
|
45
|
+
resolve();
|
|
46
|
+
};
|
|
47
|
+
if (timeoutMs > 0) {
|
|
48
|
+
timer = setTimeout(() => {
|
|
49
|
+
timedOut = true;
|
|
50
|
+
killTree(child, 'SIGTERM');
|
|
51
|
+
killTimer = setTimeout(() => killTree(child, 'SIGKILL'), 5000);
|
|
52
|
+
}, timeoutMs);
|
|
53
|
+
}
|
|
54
|
+
child.stderr?.on('data', (d) => {
|
|
55
|
+
output += d.toString();
|
|
56
|
+
});
|
|
57
|
+
child.stdout?.on('data', (d) => {
|
|
58
|
+
output += d.toString();
|
|
59
|
+
});
|
|
60
|
+
child.on('error', (err) => {
|
|
61
|
+
spawnError = err.message;
|
|
62
|
+
finish();
|
|
63
|
+
});
|
|
64
|
+
child.on('close', (code) => {
|
|
65
|
+
exitCode = timedOut ? 1 : (code ?? 1);
|
|
66
|
+
finish();
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
command,
|
|
71
|
+
exitCode,
|
|
72
|
+
duration: Number(((Date.now() - startMs) / 1000).toFixed(2)),
|
|
73
|
+
output,
|
|
74
|
+
timedOut,
|
|
75
|
+
...(spawnError ? { error: spawnError } : {}),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=verification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../../../src/core/run/verification.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type OsqConfig } from '../foundation/config.js';
|
|
2
|
+
import { type PlanningSessionReader } from '../report/planning-observed.js';
|
|
3
|
+
import { type ApprovalDigest, type ApprovalFlag } from './digest.js';
|
|
4
|
+
export declare function findSpecFolder(specsDir: string, idOrPrefix: string): Promise<string>;
|
|
5
|
+
export interface ApproveResult {
|
|
6
|
+
specId: string;
|
|
7
|
+
folderName: string;
|
|
8
|
+
folderPath: string;
|
|
9
|
+
hash: string;
|
|
10
|
+
warnings: string[];
|
|
11
|
+
/** Number of local planning sessions matched at approval time. */
|
|
12
|
+
planningMatches: number;
|
|
13
|
+
/** The digest built for this approval, flags included. */
|
|
14
|
+
digest: ApprovalDigest;
|
|
15
|
+
}
|
|
16
|
+
/** How an optional approver review resolved before the seal was written. */
|
|
17
|
+
export type ApprovalReview = 'proceed' | 'confirmed' | 'declined';
|
|
18
|
+
/** Thrown when an approver declined a flagged approval; nothing is written. */
|
|
19
|
+
export declare class ApprovalDeclinedError extends Error {
|
|
20
|
+
constructor(flags: readonly ApprovalFlag[]);
|
|
21
|
+
}
|
|
22
|
+
export interface ApproveOptions {
|
|
23
|
+
/** Independent local session readers supplied by the CLI. */
|
|
24
|
+
planningReaders?: readonly PlanningSessionReader[];
|
|
25
|
+
/** Single observation end; defaults to the current time. */
|
|
26
|
+
now?: Date | string;
|
|
27
|
+
/** Optional port between the CLI and core for digest review and confirmation. */
|
|
28
|
+
review?: (digest: ApprovalDigest) => Promise<ApprovalReview>;
|
|
29
|
+
}
|
|
30
|
+
export declare function approveSpec(projectRoot: string, specIdOrPrefix: string, config: OsqConfig, options?: ApproveOptions): Promise<ApproveResult>;
|
|
31
|
+
//# sourceMappingURL=approve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../../src/core/spec/approve.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EACL,KAAK,qBAAqB,EAI3B,MAAM,gCAAgC,CAAC;AAIxC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,YAAY,EAGlB,MAAM,aAAa,CAAC;AAIrB,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4B1F;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kEAAkE;IAClE,eAAe,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,4EAA4E;AAC5E,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AAElE,+EAA+E;AAC/E,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,KAAK,EAAE,SAAS,YAAY,EAAE;CAI3C;AAED,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,eAAe,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACnD,4DAA4D;IAC5D,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACpB,iFAAiF;IACjF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CAC9D;AAiBD,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,SAAS,EACjB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAgExB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { DEFAULT_CONFIG } from '../foundation/config.js';
|
|
4
|
+
import { appendObservedSessions, findPlanningSessions, resolveChangeCreationTime, } from '../report/planning-observed.js';
|
|
5
|
+
import { hashBriefBytes, resolveOsqPackageVersion } from '../report/planning.js';
|
|
6
|
+
import { buildManifest, writeManifest } from '../run/manifest.js';
|
|
7
|
+
import { getChangesDir } from '../status/layout.js';
|
|
8
|
+
import { buildApprovalDigest, summarizeApprovalFlags, } from './digest.js';
|
|
9
|
+
import { hashChangeFolder } from './hasher.js';
|
|
10
|
+
import { lintChangeFolder } from './linter.js';
|
|
11
|
+
export async function findSpecFolder(specsDir, idOrPrefix) {
|
|
12
|
+
let entries = [];
|
|
13
|
+
try {
|
|
14
|
+
entries = await fs.readdir(specsDir);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
throw new Error(`Specs directory not found at ${specsDir}`);
|
|
18
|
+
}
|
|
19
|
+
const trimmed = idOrPrefix.trim();
|
|
20
|
+
const num = Number.parseInt(trimmed, 10);
|
|
21
|
+
const padded = !Number.isNaN(num) ? String(num).padStart(3, '0') : trimmed;
|
|
22
|
+
for (const entry of entries) {
|
|
23
|
+
if (entry === trimmed ||
|
|
24
|
+
entry === padded ||
|
|
25
|
+
entry.startsWith(`${trimmed}-`) ||
|
|
26
|
+
entry.startsWith(`${padded}-`)) {
|
|
27
|
+
const fullPath = path.join(specsDir, entry);
|
|
28
|
+
const stat = await fs.stat(fullPath);
|
|
29
|
+
if (stat.isDirectory()) {
|
|
30
|
+
return fullPath;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
throw new Error(`Spec "${idOrPrefix}" not found in ${specsDir}`);
|
|
35
|
+
}
|
|
36
|
+
/** Thrown when an approver declined a flagged approval; nothing is written. */
|
|
37
|
+
export class ApprovalDeclinedError extends Error {
|
|
38
|
+
constructor(flags) {
|
|
39
|
+
super(`Approval declined: ${summarizeApprovalFlags(flags)}`);
|
|
40
|
+
this.name = 'ApprovalDeclinedError';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function toIso(value) {
|
|
44
|
+
if (value instanceof Date) {
|
|
45
|
+
return Number.isFinite(value.getTime()) ? value.toISOString() : null;
|
|
46
|
+
}
|
|
47
|
+
if (typeof value === 'string') {
|
|
48
|
+
return Number.isFinite(Date.parse(value)) ? value : null;
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
async function readBriefHash(folderPath) {
|
|
53
|
+
const bytes = await fs.readFile(path.join(folderPath, 'brief.md')).catch(() => null);
|
|
54
|
+
return hashBriefBytes(bytes ?? '');
|
|
55
|
+
}
|
|
56
|
+
export async function approveSpec(projectRoot, specIdOrPrefix, config, options = {}) {
|
|
57
|
+
const specsDir = getChangesDir(config.paths.openspecRoot, projectRoot);
|
|
58
|
+
const folderPath = await findSpecFolder(specsDir, specIdOrPrefix);
|
|
59
|
+
const folderName = path.basename(folderPath);
|
|
60
|
+
const specId = folderName.match(/^(\d+)/)?.[1] || folderName;
|
|
61
|
+
const lintResult = await lintChangeFolder(projectRoot, folderPath, config);
|
|
62
|
+
if (!lintResult.valid) {
|
|
63
|
+
throw new Error(`Lint failed for spec "${folderName}":\n - ${lintResult.errors.join('\n - ')}`);
|
|
64
|
+
}
|
|
65
|
+
// Build the digest after lint and before any observation write, then let the
|
|
66
|
+
// optional review port decide whether a flagged approval may proceed.
|
|
67
|
+
const digest = await buildApprovalDigest(projectRoot, folderPath, config);
|
|
68
|
+
let mode = 'shown';
|
|
69
|
+
if (options.review) {
|
|
70
|
+
const review = await options.review(digest);
|
|
71
|
+
if (review === 'declined') {
|
|
72
|
+
throw new ApprovalDeclinedError(digest.flags);
|
|
73
|
+
}
|
|
74
|
+
mode = review === 'confirmed' ? 'confirmed' : 'shown';
|
|
75
|
+
}
|
|
76
|
+
// Discover local planning sessions after lint so a failed change is never
|
|
77
|
+
// recorded, then append observed pairs before the manifest is built.
|
|
78
|
+
const observations = await findPlanningSessions(folderPath, {
|
|
79
|
+
createdAt: await resolveChangeCreationTime(folderPath),
|
|
80
|
+
observedAt: toIso(options.now) ?? new Date().toISOString(),
|
|
81
|
+
changesDir: specsDir,
|
|
82
|
+
planning: config.planning ?? DEFAULT_CONFIG.planning,
|
|
83
|
+
readers: options.planningReaders ?? [],
|
|
84
|
+
});
|
|
85
|
+
await appendObservedSessions(folderPath, observations, {
|
|
86
|
+
briefHash: await readBriefHash(folderPath),
|
|
87
|
+
osqVersion: await resolveOsqPackageVersion(),
|
|
88
|
+
});
|
|
89
|
+
const hash = await hashChangeFolder(folderPath);
|
|
90
|
+
// Approval only refreshes the seal. It never retires failure markers: that is
|
|
91
|
+
// the exclusive job of an explicit `osq retry`.
|
|
92
|
+
const runDir = path.join(folderPath, '.run');
|
|
93
|
+
await fs.mkdir(runDir, { recursive: true });
|
|
94
|
+
const approvedPath = path.join(runDir, 'approved');
|
|
95
|
+
await fs.writeFile(approvedPath, `${hash}\n`, 'utf8');
|
|
96
|
+
const manifest = await buildManifest(projectRoot, folderPath, config, {
|
|
97
|
+
ids: digest.flags.map((flag) => flag.id),
|
|
98
|
+
mode,
|
|
99
|
+
});
|
|
100
|
+
await writeManifest(runDir, manifest);
|
|
101
|
+
return {
|
|
102
|
+
specId,
|
|
103
|
+
folderName,
|
|
104
|
+
folderPath,
|
|
105
|
+
hash,
|
|
106
|
+
warnings: lintResult.warnings,
|
|
107
|
+
planningMatches: observations.length,
|
|
108
|
+
digest,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=approve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.js","sourceRoot":"","sources":["../../../src/core/spec/approve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic OpenSpec delta merging.
|
|
3
|
+
*
|
|
4
|
+
* A delta spec is a capability-scoped markdown file using the OpenSpec
|
|
5
|
+
* operation headings `## ADDED Requirements`, `## MODIFIED Requirements`,
|
|
6
|
+
* `## REMOVED Requirements`, and `## RENAMED Requirements`. This module parses
|
|
7
|
+
* those documents and merges them into a living capability spec.
|
|
8
|
+
*
|
|
9
|
+
* The merge reproduces `openspec archive` byte for byte: requirement blocks are
|
|
10
|
+
* carried verbatim rather than re-serialized, section text the delta does not
|
|
11
|
+
* touch is preserved, and a new capability follows `## Purpose` with its body on
|
|
12
|
+
* the next line. Where OpenSpec can only warn, this module refuses with
|
|
13
|
+
* `DeltaMergeError`: a MODIFIED block that drops an existing scenario, an ADDED
|
|
14
|
+
* name that already exists with different content, a bare RENAMED entry, and an
|
|
15
|
+
* unmatched RENAMED, MODIFIED, or REMOVED target.
|
|
16
|
+
*/
|
|
17
|
+
export interface DeltaScenario {
|
|
18
|
+
readonly name: string;
|
|
19
|
+
readonly when: string[];
|
|
20
|
+
readonly then: string[];
|
|
21
|
+
readonly raw: string;
|
|
22
|
+
}
|
|
23
|
+
export interface DeltaRequirement {
|
|
24
|
+
readonly name: string;
|
|
25
|
+
readonly body: string;
|
|
26
|
+
readonly scenarios: DeltaScenario[];
|
|
27
|
+
readonly raw: string;
|
|
28
|
+
}
|
|
29
|
+
export interface DeltaRename {
|
|
30
|
+
readonly from: string;
|
|
31
|
+
readonly to: string;
|
|
32
|
+
}
|
|
33
|
+
export interface InvalidRename {
|
|
34
|
+
readonly line: string;
|
|
35
|
+
}
|
|
36
|
+
export interface UnpairedRename {
|
|
37
|
+
readonly side: 'FROM' | 'TO';
|
|
38
|
+
readonly name: string;
|
|
39
|
+
}
|
|
40
|
+
export interface ParsedDelta {
|
|
41
|
+
readonly title: string;
|
|
42
|
+
readonly purpose: string;
|
|
43
|
+
readonly added: DeltaRequirement[];
|
|
44
|
+
readonly modified: DeltaRequirement[];
|
|
45
|
+
readonly removed: DeltaRequirement[];
|
|
46
|
+
readonly renamed: DeltaRename[];
|
|
47
|
+
readonly invalidRenames: InvalidRename[];
|
|
48
|
+
readonly unpairedRenames: UnpairedRename[];
|
|
49
|
+
}
|
|
50
|
+
export interface CapabilitySpec {
|
|
51
|
+
readonly title: string;
|
|
52
|
+
readonly purpose: string;
|
|
53
|
+
readonly requirements: DeltaRequirement[];
|
|
54
|
+
}
|
|
55
|
+
export declare class DeltaMergeError extends Error {
|
|
56
|
+
constructor(message: string);
|
|
57
|
+
}
|
|
58
|
+
/** Strip an ATX closing run and surrounding whitespace from a requirement name. */
|
|
59
|
+
export declare function normalizeRequirementName(name: string): string;
|
|
60
|
+
/** Parse one `### Requirement:` block from its verbatim text. */
|
|
61
|
+
export declare function parseRequirement(raw: string): DeltaRequirement;
|
|
62
|
+
/** Parse one `#### Scenario:` block from its verbatim text. */
|
|
63
|
+
export declare function parseScenario(raw: string): DeltaScenario;
|
|
64
|
+
/** The body of a `## Purpose` section, or undefined when it is absent or empty. */
|
|
65
|
+
export declare function extractPurposeSection(content: string): string | undefined;
|
|
66
|
+
/** Parse a delta document into its operations and purpose. */
|
|
67
|
+
export declare function parseDelta(content: string): ParsedDelta;
|
|
68
|
+
/** Parse a living capability spec into its title, purpose, and requirements. */
|
|
69
|
+
export declare function parseCapabilitySpec(content: string): CapabilitySpec;
|
|
70
|
+
/** Serialize a capability spec back to the shape OpenSpec writes. */
|
|
71
|
+
export declare function serializeCapabilitySpec(spec: CapabilitySpec): string;
|
|
72
|
+
/**
|
|
73
|
+
* Merge a parsed delta into a base capability spec. When `baseContent` is null
|
|
74
|
+
* or empty, a new capability spec is created from the delta's Purpose.
|
|
75
|
+
*/
|
|
76
|
+
export declare function mergeDelta(baseContent: string | null, capability: string, delta: ParsedDelta): string;
|
|
77
|
+
//# sourceMappingURL=delta.d.ts.map
|