@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,32 @@
|
|
|
1
|
+
import { type Logger } from '../core/foundation/logger.js';
|
|
2
|
+
import { type HarnessEvent, type RegressedEventData } from '../harness/types.js';
|
|
3
|
+
import type { RunTaskFailureReason } from './failure-reason.js';
|
|
4
|
+
export type { RunTaskFailureReason } from './failure-reason.js';
|
|
5
|
+
export interface RunTaskResult {
|
|
6
|
+
success: boolean;
|
|
7
|
+
reason?: RunTaskFailureReason;
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
/** Tick `taskNumber`'s checkbox, supporting flat and grouped (`## <n>.`) numbering. Pure. */
|
|
11
|
+
export declare function tickTaskCheckboxContent(content: string, taskNumber: string): string;
|
|
12
|
+
export declare function tickTaskCheckbox(specFolderPath: string, taskNumber: string): Promise<void>;
|
|
13
|
+
export declare function recordLifecycleEvent(specFolderPath: string, taskNumber: string, event: HarnessEvent, summary: string, logger?: Logger, level?: 'info' | 'verbose'): Promise<void>;
|
|
14
|
+
export declare function recordDeadEvent(specFolderPath: string, taskNumber: string, reason: RunTaskFailureReason): Promise<void>;
|
|
15
|
+
export declare function recordRegressedEvent(specFolderPath: string, target: string, data: RegressedEventData): Promise<void>;
|
|
16
|
+
export declare function recordDoneEvent(specFolderPath: string, taskNumber: string): Promise<void>;
|
|
17
|
+
export declare function formatReapedMarker(reason: 'crashed' | 'timeout', pid: number, startedAt: number, reapedAt?: number): string;
|
|
18
|
+
export declare function writeDeadMarker(runDir: string, taskNumber: string, content: string, projectRoot?: string): Promise<void>;
|
|
19
|
+
/** Write the `.run/regressed/<target>.md` marker, creating the directory when needed. */
|
|
20
|
+
export declare function writeRegressedMarker(runDir: string, target: string, content: string): Promise<void>;
|
|
21
|
+
export interface DoneMarkerMetadata {
|
|
22
|
+
scopeHash: string;
|
|
23
|
+
buildStamp: string;
|
|
24
|
+
exitCode: number;
|
|
25
|
+
fileHashes?: Record<string, string | null>;
|
|
26
|
+
/** Recorded deterministic resolver version; defaults to the current version. */
|
|
27
|
+
scopeResolver?: number;
|
|
28
|
+
}
|
|
29
|
+
export declare function writeDoneMarker(runDir: string, taskNumber: string, metadata?: DoneMarkerMetadata): Promise<void>;
|
|
30
|
+
/** Task-outcome line: verified, dead, or regressed with reason and elapsed seconds. */
|
|
31
|
+
export declare function formatTaskOutcomeLine(taskNumber: string, success: boolean, reason: RunTaskFailureReason | undefined, elapsedSeconds: number, symbols: boolean, extra?: string): string;
|
|
32
|
+
//# sourceMappingURL=outcome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../../src/watcher/outcome.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,kBAAkB,EAExB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,6FAA6F;AAC7F,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CA8BnF;AACD,wBAAsB,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhG;AACD,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,GAAE,MAAM,GAAG,SAAkB,GACjC,OAAO,CAAC,IAAI,CAAC,CAOf;AACD,wBAAsB,eAAe,CACnC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAMf;AACD,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,IAAI,CAAC,CAMf;AACD,wBAAsB,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM/F;AACD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,GAAG,SAAS,EAC7B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAmB,GAC5B,MAAM,CAWR;AAWD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAEf;AACD,yFAAyF;AACzF,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAEf;AACD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAC3C,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AACD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAQf;AACD,uFAAuF;AACvF,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,oBAAoB,GAAG,SAAS,EACxC,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,OAAO,EAChB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CASR"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { resolveSymbol } from '../core/foundation/logger.js';
|
|
4
|
+
import { SCOPE_RESOLVER_VERSION } from '../core/run/scope.js';
|
|
5
|
+
import { appendHarnessEvent, } from '../harness/types.js';
|
|
6
|
+
import { addFingerprint } from './fingerprint.js';
|
|
7
|
+
/** Tick `taskNumber`'s checkbox, supporting flat and grouped (`## <n>.`) numbering. Pure. */
|
|
8
|
+
export function tickTaskCheckboxContent(content, taskNumber) {
|
|
9
|
+
const target = Number.parseInt(taskNumber, 10);
|
|
10
|
+
if (Number.isNaN(target)) {
|
|
11
|
+
return content;
|
|
12
|
+
}
|
|
13
|
+
const lines = content.split('\n');
|
|
14
|
+
let sectionNumber = null;
|
|
15
|
+
let changed = false;
|
|
16
|
+
const updated = lines.map((line) => {
|
|
17
|
+
// Any `## ` heading resets the section scope; only a numeric heading
|
|
18
|
+
// associates unnumbered items with a task.
|
|
19
|
+
const headingMatch = line.match(/^##\s+(\S.*?)\s*$/);
|
|
20
|
+
if (headingMatch) {
|
|
21
|
+
const numeric = headingMatch[1].match(/^(\d+)[.)]?(?:\s|$)/);
|
|
22
|
+
sectionNumber = numeric ? Number.parseInt(numeric[1], 10) : null;
|
|
23
|
+
return line;
|
|
24
|
+
}
|
|
25
|
+
const itemMatch = line.match(/^(\s*-\s+\[)([ xX])(\]\s*)((?:(\d+)[.)]\s+)?)(.*)$/);
|
|
26
|
+
if (!itemMatch) {
|
|
27
|
+
return line;
|
|
28
|
+
}
|
|
29
|
+
const [, prefix, mark, close, numberedPrefix, itemNumber, rest] = itemMatch;
|
|
30
|
+
const identifier = itemNumber ? Number.parseInt(itemNumber, 10) : sectionNumber;
|
|
31
|
+
if (identifier !== target || mark.toLowerCase() === 'x') {
|
|
32
|
+
return line;
|
|
33
|
+
}
|
|
34
|
+
changed = true;
|
|
35
|
+
return `${prefix}x${close}${numberedPrefix}${rest}`;
|
|
36
|
+
});
|
|
37
|
+
return changed ? updated.join('\n') : content;
|
|
38
|
+
}
|
|
39
|
+
export async function tickTaskCheckbox(specFolderPath, taskNumber) {
|
|
40
|
+
const tasksMdPath = path.join(specFolderPath, 'tasks.md');
|
|
41
|
+
let content = '';
|
|
42
|
+
try {
|
|
43
|
+
content = await fs.readFile(tasksMdPath, 'utf8');
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const updated = tickTaskCheckboxContent(content, taskNumber);
|
|
49
|
+
if (updated !== content) {
|
|
50
|
+
await fs.writeFile(tasksMdPath, updated, 'utf8');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export async function recordLifecycleEvent(specFolderPath, taskNumber, event, summary, logger, level = 'info') {
|
|
54
|
+
await appendHarnessEvent(specFolderPath, taskNumber, event);
|
|
55
|
+
if (level === 'verbose') {
|
|
56
|
+
logger?.verbose(summary);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
logger?.info(summary);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export async function recordDeadEvent(specFolderPath, taskNumber, reason) {
|
|
63
|
+
await appendHarnessEvent(specFolderPath, taskNumber, {
|
|
64
|
+
type: 'dead',
|
|
65
|
+
timestamp: new Date().toISOString(),
|
|
66
|
+
data: { task: taskNumber, reason },
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
export async function recordRegressedEvent(specFolderPath, target, data) {
|
|
70
|
+
await appendHarnessEvent(specFolderPath, target, {
|
|
71
|
+
type: 'regressed',
|
|
72
|
+
timestamp: new Date().toISOString(),
|
|
73
|
+
data: { task: target, ...data },
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
export async function recordDoneEvent(specFolderPath, taskNumber) {
|
|
77
|
+
await appendHarnessEvent(specFolderPath, taskNumber, {
|
|
78
|
+
type: 'done',
|
|
79
|
+
timestamp: new Date().toISOString(),
|
|
80
|
+
data: { task: taskNumber },
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
export function formatReapedMarker(reason, pid, startedAt, reapedAt = Date.now()) {
|
|
84
|
+
return [
|
|
85
|
+
'---',
|
|
86
|
+
`reason: ${reason}`,
|
|
87
|
+
`pid: ${pid}`,
|
|
88
|
+
`started_at: ${new Date(startedAt).toISOString()}`,
|
|
89
|
+
`reaped_at: ${new Date(reapedAt).toISOString()}`,
|
|
90
|
+
'---',
|
|
91
|
+
`Task execution terminated by watcher reaper (${reason}).`,
|
|
92
|
+
'',
|
|
93
|
+
].join('\n');
|
|
94
|
+
}
|
|
95
|
+
async function writeMarkerFile(runDir, kind, name, content) {
|
|
96
|
+
const dir = path.join(runDir, kind);
|
|
97
|
+
await fs.mkdir(dir, { recursive: true });
|
|
98
|
+
await fs.writeFile(path.join(dir, name), content, 'utf8');
|
|
99
|
+
}
|
|
100
|
+
export async function writeDeadMarker(runDir, taskNumber, content, projectRoot) {
|
|
101
|
+
await writeMarkerFile(runDir, 'dead', `${taskNumber}.md`, addFingerprint(content, projectRoot));
|
|
102
|
+
}
|
|
103
|
+
/** Write the `.run/regressed/<target>.md` marker, creating the directory when needed. */
|
|
104
|
+
export async function writeRegressedMarker(runDir, target, content) {
|
|
105
|
+
await writeMarkerFile(runDir, 'regressed', `${target}.md`, content);
|
|
106
|
+
}
|
|
107
|
+
export async function writeDoneMarker(runDir, taskNumber, metadata) {
|
|
108
|
+
const doneDir = path.join(runDir, 'done');
|
|
109
|
+
await fs.mkdir(doneDir, { recursive: true });
|
|
110
|
+
const stamp = `${new Date().toISOString()}\n`;
|
|
111
|
+
const frontmatter = metadata
|
|
112
|
+
? `---\nscope_resolver: ${metadata.scopeResolver ?? SCOPE_RESOLVER_VERSION}\nscope_hash: "${metadata.scopeHash}"\nbuild_stamp: "${metadata.buildStamp}"\nexit_code: ${metadata.exitCode}\nscope_files: ${JSON.stringify(metadata.fileHashes ?? {})}\n---\n`
|
|
113
|
+
: '';
|
|
114
|
+
await fs.writeFile(path.join(doneDir, taskNumber), `${frontmatter}${stamp}`, 'utf8');
|
|
115
|
+
}
|
|
116
|
+
/** Task-outcome line: verified, dead, or regressed with reason and elapsed seconds. */
|
|
117
|
+
export function formatTaskOutcomeLine(taskNumber, success, reason, elapsedSeconds, symbols, extra) {
|
|
118
|
+
if (success) {
|
|
119
|
+
return `${resolveSymbol('✓', '[ok]', symbols)} task ${taskNumber} verified (elapsed: ${elapsedSeconds}s)`;
|
|
120
|
+
}
|
|
121
|
+
const detail = extra ? `, ${extra}` : '';
|
|
122
|
+
if (reason === 'regressed') {
|
|
123
|
+
return `${resolveSymbol('?', '[regressed]', symbols)} task ${taskNumber} regressed (reason: ${reason}${detail}, elapsed: ${elapsedSeconds}s)`;
|
|
124
|
+
}
|
|
125
|
+
return `${resolveSymbol('✗', '[dead]', symbols)} task ${taskNumber} dead (reason: ${reason}${detail}, elapsed: ${elapsedSeconds}s)`;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=outcome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outcome.js","sourceRoot":"","sources":["../../src/watcher/outcome.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { OsqConfig } from '../core/foundation/config.js';
|
|
2
|
+
import { type StaleTaskAudit } from '../core/run/scope-hash.js';
|
|
3
|
+
import { type DoneMarkerMetadata, type RunTaskResult } from './outcome.js';
|
|
4
|
+
export { computeTaskScopeHash } from '../core/run/scope-hash.js';
|
|
5
|
+
export type { ScopeHashResult } from '../core/run/scope-hash.js';
|
|
6
|
+
/** Outcome of comparing a previously completed task's scope to the tree. */
|
|
7
|
+
export interface ScopeRegressionResult {
|
|
8
|
+
regressed: true;
|
|
9
|
+
taskNumber: string;
|
|
10
|
+
differingPaths: string[];
|
|
11
|
+
recordedHash: string;
|
|
12
|
+
currentHash: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ScopeAuditOptions {
|
|
15
|
+
projectRoot: string;
|
|
16
|
+
specFolderPath: string;
|
|
17
|
+
eligibleTaskNumbers: readonly string[];
|
|
18
|
+
verifyTimeoutSeconds: number;
|
|
19
|
+
/** When false, detect and attribute only; never verify or write artifacts. */
|
|
20
|
+
record?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface ScopeAuditResult {
|
|
23
|
+
stale: StaleTaskAudit[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Pre-lock scope recertification audit. Compares every eligible automated done
|
|
27
|
+
* marker's recorded resolver-aware scope hash and version against the current
|
|
28
|
+
* tree in one pass, verifies each stale task under the configured timeout, and
|
|
29
|
+
* records one regression marker and typed event per stale task. Already-active
|
|
30
|
+
* regressions are reported without re-verification or duplicate writes.
|
|
31
|
+
*/
|
|
32
|
+
export declare function auditScopeRegressions(options: ScopeAuditOptions): Promise<ScopeAuditResult>;
|
|
33
|
+
/** Legacy first-match detection export: detection only, never writes artifacts. */
|
|
34
|
+
export declare function checkDoneTasksScopeHashes(projectRoot: string, specFolderPath: string, currentTaskNumber: string): Promise<ScopeRegressionResult | null>;
|
|
35
|
+
/** Resolve the metadata written to the done marker after a passing task. */
|
|
36
|
+
export declare function buildDoneMetadata(projectRoot: string, scope: string[]): Promise<DoneMarkerMetadata>;
|
|
37
|
+
/**
|
|
38
|
+
* Defensive pre-spawn guard for direct `runTask` callers: record and report
|
|
39
|
+
* every stale earlier task without spawning. The watcher cycle audits before
|
|
40
|
+
* `runTask`; this keeps direct calls safe.
|
|
41
|
+
*/
|
|
42
|
+
export declare function guardScopeRegression(projectRoot: string, specFolderPath: string, currentTaskNumber: string, config: OsqConfig): Promise<RunTaskResult | null>;
|
|
43
|
+
//# sourceMappingURL=regression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regression.d.ts","sourceRoot":"","sources":["../../src/watcher/regression.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAEL,KAAK,cAAc,EASpB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAGnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,4EAA4E;AAC5E,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsGjG;AAQD,mFAAmF;AACnF,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAqBvC;AAED,4EAA4E;AAC5E,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,kBAAkB,CAAC,CAY7B;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAkB/B"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { SCOPE_RESOLVER_VERSION, attributeScopePaths, buildScopeRegressionMarker, computeTaskScopeHash, findDifferingPaths, listCanonicalDoneNumbers, parseActiveStaleTask, readDoneMarker, readFileChangedPaths, } from '../core/run/scope-hash.js';
|
|
4
|
+
import { parseTaskMd } from '../core/spec/parser.js';
|
|
5
|
+
import { compareNumericPrefix } from '../core/status/state.js';
|
|
6
|
+
import { resolveBuildInfo } from './build.js';
|
|
7
|
+
import { recordRegressedEvent, writeRegressedMarker, } from './outcome.js';
|
|
8
|
+
import { runVerificationGateResult } from './verify.js';
|
|
9
|
+
export { computeTaskScopeHash } from '../core/run/scope-hash.js';
|
|
10
|
+
/**
|
|
11
|
+
* Pre-lock scope recertification audit. Compares every eligible automated done
|
|
12
|
+
* marker's recorded resolver-aware scope hash and version against the current
|
|
13
|
+
* tree in one pass, verifies each stale task under the configured timeout, and
|
|
14
|
+
* records one regression marker and typed event per stale task. Already-active
|
|
15
|
+
* regressions are reported without re-verification or duplicate writes.
|
|
16
|
+
*/
|
|
17
|
+
export async function auditScopeRegressions(options) {
|
|
18
|
+
const { projectRoot, specFolderPath, eligibleTaskNumbers, verifyTimeoutSeconds } = options;
|
|
19
|
+
const record = options.record ?? true;
|
|
20
|
+
const runDir = path.join(specFolderPath, '.run');
|
|
21
|
+
const doneInfo = new Map();
|
|
22
|
+
const changesByPath = new Map();
|
|
23
|
+
const completionHashes = new Map();
|
|
24
|
+
for (const number of await listCanonicalDoneNumbers(runDir)) {
|
|
25
|
+
const info = await readDoneMarker(runDir, number);
|
|
26
|
+
if (!info)
|
|
27
|
+
continue;
|
|
28
|
+
doneInfo.set(number, info);
|
|
29
|
+
completionHashes.set(number, info.scopeFiles);
|
|
30
|
+
for (const filePath of await readFileChangedPaths(specFolderPath, number)) {
|
|
31
|
+
const tasks = changesByPath.get(filePath) ?? new Set();
|
|
32
|
+
tasks.add(number);
|
|
33
|
+
changesByPath.set(filePath, tasks);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const stale = [];
|
|
37
|
+
for (const taskNumber of [...new Set(eligibleTaskNumbers)].sort(compareNumericPrefix)) {
|
|
38
|
+
const recorded = doneInfo.get(taskNumber);
|
|
39
|
+
if (!recorded)
|
|
40
|
+
continue;
|
|
41
|
+
const taskContent = await fs
|
|
42
|
+
.readFile(path.join(specFolderPath, 'tasks', `${taskNumber}.md`), 'utf8')
|
|
43
|
+
.catch(() => null);
|
|
44
|
+
if (taskContent === null)
|
|
45
|
+
continue;
|
|
46
|
+
const taskData = parseTaskMd(taskContent);
|
|
47
|
+
const current = await computeTaskScopeHash(projectRoot, taskData.scope);
|
|
48
|
+
if (current.hash === recorded.scopeHash && recorded.scopeResolver === SCOPE_RESOLVER_VERSION) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
// A matching aggregate hash is a version-only upgrade: report no differing
|
|
52
|
+
// path from the legacy per-file projection rather than inventing one.
|
|
53
|
+
const differing = current.hash === recorded.scopeHash
|
|
54
|
+
? []
|
|
55
|
+
: findDifferingPaths(recorded.scopeFiles, current.fileHashes);
|
|
56
|
+
const base = {
|
|
57
|
+
differingPaths: differing.map((entry) => entry.display),
|
|
58
|
+
attribution: attributeScopePaths(taskNumber, differing, current.fileHashes, changesByPath, completionHashes),
|
|
59
|
+
recordedHash: recorded.scopeHash,
|
|
60
|
+
currentHash: current.hash,
|
|
61
|
+
};
|
|
62
|
+
const active = await fs
|
|
63
|
+
.readFile(path.join(runDir, 'regressed', `${taskNumber}.md`), 'utf8')
|
|
64
|
+
.catch(() => null);
|
|
65
|
+
if (active !== null) {
|
|
66
|
+
stale.push(parseActiveStaleTask(taskNumber, active, base));
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const gate = record
|
|
70
|
+
? await runVerificationGateResult(projectRoot, taskData.verify, verifyTimeoutSeconds, {
|
|
71
|
+
specFolderPath,
|
|
72
|
+
taskNumber,
|
|
73
|
+
})
|
|
74
|
+
: null;
|
|
75
|
+
const audit = {
|
|
76
|
+
taskNumber,
|
|
77
|
+
...base,
|
|
78
|
+
verifyCommand: taskData.verify,
|
|
79
|
+
exitCode: gate?.exitCode ?? 1,
|
|
80
|
+
duration: gate?.duration ?? 0,
|
|
81
|
+
output: gate?.output ?? '',
|
|
82
|
+
timedOut: gate?.timedOut ?? false,
|
|
83
|
+
verificationPassed: gate?.passed ?? false,
|
|
84
|
+
alreadyActive: false,
|
|
85
|
+
};
|
|
86
|
+
if (gate) {
|
|
87
|
+
const marker = buildScopeRegressionMarker(audit).replace('\n---\n', `\nrecorded_resolver: ${JSON.stringify(recorded.scopeResolver)}\ncurrent_resolver: ${SCOPE_RESOLVER_VERSION}\n---\n`);
|
|
88
|
+
await writeRegressedMarker(runDir, taskNumber, marker);
|
|
89
|
+
await recordRegressedEvent(specFolderPath, taskNumber, {
|
|
90
|
+
reason: 'scope_regression',
|
|
91
|
+
differingPaths: audit.differingPaths,
|
|
92
|
+
attribution: audit.attribution,
|
|
93
|
+
recordedHash: audit.recordedHash,
|
|
94
|
+
currentHash: audit.currentHash,
|
|
95
|
+
command: audit.verifyCommand,
|
|
96
|
+
exitCode: audit.exitCode,
|
|
97
|
+
duration: audit.duration,
|
|
98
|
+
output: audit.output,
|
|
99
|
+
timedOut: audit.timedOut,
|
|
100
|
+
verificationPassed: audit.verificationPassed,
|
|
101
|
+
recordedResolver: recorded.scopeResolver,
|
|
102
|
+
currentResolver: SCOPE_RESOLVER_VERSION,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
stale.push(audit);
|
|
106
|
+
}
|
|
107
|
+
return { stale };
|
|
108
|
+
}
|
|
109
|
+
async function eligibleEarlierTasks(runDir, currentTask) {
|
|
110
|
+
return (await listCanonicalDoneNumbers(runDir)).filter((number) => Number.parseInt(number, 10) < currentTask);
|
|
111
|
+
}
|
|
112
|
+
/** Legacy first-match detection export: detection only, never writes artifacts. */
|
|
113
|
+
export async function checkDoneTasksScopeHashes(projectRoot, specFolderPath, currentTaskNumber) {
|
|
114
|
+
const currentTask = Number.parseInt(currentTaskNumber, 10);
|
|
115
|
+
if (Number.isNaN(currentTask))
|
|
116
|
+
return null;
|
|
117
|
+
const eligible = await eligibleEarlierTasks(path.join(specFolderPath, '.run'), currentTask);
|
|
118
|
+
const audit = await auditScopeRegressions({
|
|
119
|
+
projectRoot,
|
|
120
|
+
specFolderPath,
|
|
121
|
+
eligibleTaskNumbers: eligible,
|
|
122
|
+
verifyTimeoutSeconds: 0,
|
|
123
|
+
record: false,
|
|
124
|
+
});
|
|
125
|
+
const first = audit.stale[0];
|
|
126
|
+
return first
|
|
127
|
+
? {
|
|
128
|
+
regressed: true,
|
|
129
|
+
taskNumber: first.taskNumber,
|
|
130
|
+
differingPaths: first.differingPaths,
|
|
131
|
+
recordedHash: first.recordedHash,
|
|
132
|
+
currentHash: first.currentHash,
|
|
133
|
+
}
|
|
134
|
+
: null;
|
|
135
|
+
}
|
|
136
|
+
/** Resolve the metadata written to the done marker after a passing task. */
|
|
137
|
+
export async function buildDoneMetadata(projectRoot, scope) {
|
|
138
|
+
const [scopeHash, buildInfo] = await Promise.all([
|
|
139
|
+
computeTaskScopeHash(projectRoot, scope),
|
|
140
|
+
resolveBuildInfo(projectRoot),
|
|
141
|
+
]);
|
|
142
|
+
return {
|
|
143
|
+
scopeHash: scopeHash.hash,
|
|
144
|
+
buildStamp: buildInfo.commit,
|
|
145
|
+
exitCode: 0,
|
|
146
|
+
fileHashes: scopeHash.fileHashes,
|
|
147
|
+
scopeResolver: SCOPE_RESOLVER_VERSION,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Defensive pre-spawn guard for direct `runTask` callers: record and report
|
|
152
|
+
* every stale earlier task without spawning. The watcher cycle audits before
|
|
153
|
+
* `runTask`; this keeps direct calls safe.
|
|
154
|
+
*/
|
|
155
|
+
export async function guardScopeRegression(projectRoot, specFolderPath, currentTaskNumber, config) {
|
|
156
|
+
const currentTask = Number.parseInt(currentTaskNumber, 10);
|
|
157
|
+
if (Number.isNaN(currentTask))
|
|
158
|
+
return null;
|
|
159
|
+
const eligible = await eligibleEarlierTasks(path.join(specFolderPath, '.run'), currentTask);
|
|
160
|
+
const audit = await auditScopeRegressions({
|
|
161
|
+
projectRoot,
|
|
162
|
+
specFolderPath,
|
|
163
|
+
eligibleTaskNumbers: eligible,
|
|
164
|
+
verifyTimeoutSeconds: config.timeouts.verifyTimeoutSeconds ?? 600,
|
|
165
|
+
});
|
|
166
|
+
const first = audit.stale[0];
|
|
167
|
+
return first
|
|
168
|
+
? {
|
|
169
|
+
success: false,
|
|
170
|
+
reason: 'regressed',
|
|
171
|
+
error: `Scope of task ${first.taskNumber} changed: ${first.differingPaths.join(', ')}`,
|
|
172
|
+
}
|
|
173
|
+
: null;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=regression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regression.js","sourceRoot":"","sources":["../../src/watcher/regression.ts"],"names":[],"mappings":"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"}
|
package/dist/watcher/runner.d.ts
CHANGED
|
@@ -1,70 +1,8 @@
|
|
|
1
|
-
import type { OsqConfig } from '../core/config.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
reason?: RunTaskFailureReason;
|
|
8
|
-
error?: string;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Single-line, human-readable summary of a task outcome. Kept pure so the exact
|
|
12
|
-
* shape can be tested without running the runner, and used directly beside every
|
|
13
|
-
* marker write (`done/<n>` or `dead/<n>.md`) so the log and the marker agree.
|
|
14
|
-
*/
|
|
15
|
-
export declare function formatTaskOutcomeSummary(taskNumber: string, success: boolean, reason?: RunTaskFailureReason, extra?: string): string;
|
|
16
|
-
export declare function tickTaskCheckbox(specFolderPath: string, taskNumber: string): Promise<void>;
|
|
17
|
-
export interface TaskHeartbeatStats {
|
|
18
|
-
elapsedSeconds: number;
|
|
19
|
-
eventCount: number;
|
|
20
|
-
totalTokens: number;
|
|
21
|
-
toolCount: number;
|
|
22
|
-
cost?: number;
|
|
23
|
-
lastToolSummary?: string;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Snapshot of task progress. Counters are maintained in memory and advanced
|
|
27
|
-
* with only the bytes appended since the previous poll; the event file may not
|
|
28
|
-
* exist yet, in which case counters are zero.
|
|
29
|
-
*/
|
|
30
|
-
export declare function computeTaskHeartbeatStats(specFolderPath: string, taskNumber: string, startTime: number): Promise<TaskHeartbeatStats>;
|
|
31
|
-
/**
|
|
32
|
-
* Drop the in-memory counters for a finished task so the map does not grow
|
|
33
|
-
* across watcher cycles.
|
|
34
|
-
*/
|
|
35
|
-
export declare function clearTaskHeartbeatStats(specFolderPath: string, taskNumber: string): void;
|
|
36
|
-
/**
|
|
37
|
-
* Single-line running status row. The logger owns the animated spinner and
|
|
38
|
-
* prepends `<frame> `, so this text is truncated to leave room for that prefix
|
|
39
|
-
* while fitting `terminalWidth` columns.
|
|
40
|
-
*/
|
|
41
|
-
export declare function formatTaskStatusRow(taskNumber: string, stats: TaskHeartbeatStats, terminalWidth?: number): string;
|
|
42
|
-
/** Periodic heartbeat line shared by the 1s TTY row and the non-TTY log. */
|
|
43
|
-
export declare function formatTaskHeartbeatLine(taskNumber: string, stats: TaskHeartbeatStats): string;
|
|
44
|
-
/**
|
|
45
|
-
* Curated task-started line: a single info line carrying the task title
|
|
46
|
-
* truncated so the whole line fits the terminal width. The lifecycle details
|
|
47
|
-
* (pid, timeout) travel with it so the marker and the log line stay in sync.
|
|
48
|
-
*/
|
|
49
|
-
export declare function formatTaskStartedLine(taskNumber: string, title: string, pid: number | undefined, timeoutSeconds: number, symbols: boolean, terminalWidth?: number): string;
|
|
50
|
-
/**
|
|
51
|
-
* Curated task-outcome line: verified or dead with the failure reason and the
|
|
52
|
-
* elapsed seconds since the task began.
|
|
53
|
-
*/
|
|
54
|
-
export declare function formatTaskOutcomeLine(taskNumber: string, success: boolean, reason: RunTaskFailureReason | undefined, elapsedSeconds: number, symbols: boolean): string;
|
|
55
|
-
/**
|
|
56
|
-
* Return the last text message emitted on the agent's event stream, or null
|
|
57
|
-
* when the stream has no text at all. Synthesis reads exclusively from
|
|
58
|
-
* first-class `text` events carrying the completed assistant message; raw
|
|
59
|
-
* harness payload shapes are never inspected. The stream is the append-only
|
|
60
|
-
* `.run/events/<n>.jsonl` file, so this survives a watcher restart.
|
|
61
|
-
*/
|
|
62
|
-
export declare function extractFinalTextFromStream(specFolderPath: string, taskNumber: string): Promise<string | null>;
|
|
63
|
-
/**
|
|
64
|
-
* Write a result file synthesized from the agent's final stream message. The
|
|
65
|
-
* frontmatter flags it as `synthesized: true` and a comment attributes it to
|
|
66
|
-
* the watcher so a reader never mistakes it for an agent-authored result.
|
|
67
|
-
*/
|
|
68
|
-
export declare function synthesizeResultFile(resultsDir: string, taskNumber: string, finalText: string): Promise<string>;
|
|
1
|
+
import type { OsqConfig } from '../core/foundation/config.js';
|
|
2
|
+
import type { Logger } from '../core/foundation/logger.js';
|
|
3
|
+
import type { HarnessAdapter } from '../harness/types.js';
|
|
4
|
+
import { type RunTaskResult } from './outcome.js';
|
|
5
|
+
export type { RunTaskFailureReason, RunTaskResult } from './outcome.js';
|
|
6
|
+
/** Top-level sequential task pipeline; each phase delegates to its lifecycle module. */
|
|
69
7
|
export declare function runTask(projectRoot: string, specFolderPath: string, taskNumber: string, config: OsqConfig, adapter: HarnessAdapter, logger?: Logger): Promise<RunTaskResult>;
|
|
70
8
|
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/watcher/runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/watcher/runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAG3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAU1D,OAAO,EAEL,KAAK,aAAa,EAOnB,MAAM,cAAc,CAAC;AAMtB,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAExE,wFAAwF;AACxF,wBAAsB,OAAO,CAC3B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC,CA6JxB"}
|