@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.
Files changed (619) hide show
  1. package/README.md +415 -72
  2. package/dist/cli/approve.d.ts +13 -3
  3. package/dist/cli/approve.d.ts.map +1 -1
  4. package/dist/cli/approve.js +59 -4
  5. package/dist/cli/approve.js.map +1 -1
  6. package/dist/cli/bin.js +0 -0
  7. package/dist/cli/confirm.d.ts +21 -0
  8. package/dist/cli/confirm.d.ts.map +1 -0
  9. package/dist/cli/confirm.js +28 -0
  10. package/dist/cli/confirm.js.map +1 -0
  11. package/dist/cli/doctor.d.ts +13 -0
  12. package/dist/cli/doctor.d.ts.map +1 -0
  13. package/dist/cli/doctor.js +23 -0
  14. package/dist/cli/doctor.js.map +1 -0
  15. package/dist/cli/done.d.ts +12 -0
  16. package/dist/cli/done.d.ts.map +1 -0
  17. package/dist/cli/done.js +26 -0
  18. package/dist/cli/done.js.map +1 -0
  19. package/dist/cli/inbox.d.ts +22 -0
  20. package/dist/cli/inbox.d.ts.map +1 -0
  21. package/dist/cli/inbox.js +41 -0
  22. package/dist/cli/inbox.js.map +1 -0
  23. package/dist/cli/index.d.ts.map +1 -1
  24. package/dist/cli/index.js +127 -8
  25. package/dist/cli/index.js.map +1 -1
  26. package/dist/cli/init.d.ts +1 -0
  27. package/dist/cli/init.d.ts.map +1 -1
  28. package/dist/cli/init.js +9 -3
  29. package/dist/cli/init.js.map +1 -1
  30. package/dist/cli/lint.d.ts +26 -0
  31. package/dist/cli/lint.d.ts.map +1 -0
  32. package/dist/cli/lint.js +60 -0
  33. package/dist/cli/lint.js.map +1 -0
  34. package/dist/cli/migrate.d.ts +18 -0
  35. package/dist/cli/migrate.d.ts.map +1 -0
  36. package/dist/cli/migrate.js +42 -0
  37. package/dist/cli/migrate.js.map +1 -0
  38. package/dist/cli/new.js +1 -1
  39. package/dist/cli/new.js.map +1 -1
  40. package/dist/cli/plan-queue.d.ts +50 -0
  41. package/dist/cli/plan-queue.d.ts.map +1 -0
  42. package/dist/cli/plan-queue.js +167 -0
  43. package/dist/cli/plan-queue.js.map +1 -0
  44. package/dist/cli/plan.d.ts +35 -0
  45. package/dist/cli/plan.d.ts.map +1 -0
  46. package/dist/cli/plan.js +153 -0
  47. package/dist/cli/plan.js.map +1 -0
  48. package/dist/cli/queue.d.ts +9 -0
  49. package/dist/cli/queue.d.ts.map +1 -0
  50. package/dist/cli/queue.js +24 -0
  51. package/dist/cli/queue.js.map +1 -0
  52. package/dist/cli/reject.d.ts +8 -0
  53. package/dist/cli/reject.d.ts.map +1 -0
  54. package/dist/cli/reject.js +18 -0
  55. package/dist/cli/reject.js.map +1 -0
  56. package/dist/cli/report.d.ts +1 -1
  57. package/dist/cli/report.d.ts.map +1 -1
  58. package/dist/cli/report.js +141 -14
  59. package/dist/cli/report.js.map +1 -1
  60. package/dist/cli/retry.d.ts +7 -0
  61. package/dist/cli/retry.d.ts.map +1 -0
  62. package/dist/cli/retry.js +29 -0
  63. package/dist/cli/retry.js.map +1 -0
  64. package/dist/cli/serve.d.ts +30 -0
  65. package/dist/cli/serve.d.ts.map +1 -0
  66. package/dist/cli/serve.js +136 -0
  67. package/dist/cli/serve.js.map +1 -0
  68. package/dist/cli/setup.d.ts.map +1 -1
  69. package/dist/cli/setup.js +7 -1
  70. package/dist/cli/setup.js.map +1 -1
  71. package/dist/cli/show.d.ts +2 -1
  72. package/dist/cli/show.d.ts.map +1 -1
  73. package/dist/cli/show.js +20 -3
  74. package/dist/cli/show.js.map +1 -1
  75. package/dist/cli/status.d.ts +1 -1
  76. package/dist/cli/status.d.ts.map +1 -1
  77. package/dist/cli/status.js +2 -2
  78. package/dist/cli/status.js.map +1 -1
  79. package/dist/cli/watch.d.ts +9 -6
  80. package/dist/cli/watch.d.ts.map +1 -1
  81. package/dist/cli/watch.js +15 -2
  82. package/dist/cli/watch.js.map +1 -1
  83. package/dist/core/foundation/config-codex.d.ts +22 -0
  84. package/dist/core/foundation/config-codex.d.ts.map +1 -0
  85. package/dist/core/foundation/config-codex.js +58 -0
  86. package/dist/core/foundation/config-codex.js.map +1 -0
  87. package/dist/core/foundation/config-doctor.d.ts +14 -0
  88. package/dist/core/foundation/config-doctor.d.ts.map +1 -0
  89. package/dist/core/foundation/config-doctor.js +29 -0
  90. package/dist/core/foundation/config-doctor.js.map +1 -0
  91. package/dist/core/foundation/config-env.d.ts +3 -0
  92. package/dist/core/foundation/config-env.d.ts.map +1 -0
  93. package/dist/core/foundation/config-env.js +22 -0
  94. package/dist/core/foundation/config-env.js.map +1 -0
  95. package/dist/core/foundation/config-gates.d.ts +22 -0
  96. package/dist/core/foundation/config-gates.d.ts.map +1 -0
  97. package/dist/core/foundation/config-gates.js +43 -0
  98. package/dist/core/foundation/config-gates.js.map +1 -0
  99. package/dist/core/foundation/config-pi.d.ts +64 -0
  100. package/dist/core/foundation/config-pi.d.ts.map +1 -0
  101. package/dist/core/foundation/config-pi.js +131 -0
  102. package/dist/core/foundation/config-pi.js.map +1 -0
  103. package/dist/core/foundation/config-planning.d.ts +24 -0
  104. package/dist/core/foundation/config-planning.d.ts.map +1 -0
  105. package/dist/core/foundation/config-planning.js +60 -0
  106. package/dist/core/foundation/config-planning.js.map +1 -0
  107. package/dist/core/foundation/config-queue.d.ts +15 -0
  108. package/dist/core/foundation/config-queue.d.ts.map +1 -0
  109. package/dist/core/foundation/config-queue.js +24 -0
  110. package/dist/core/foundation/config-queue.js.map +1 -0
  111. package/dist/core/foundation/config-serve.d.ts +20 -0
  112. package/dist/core/foundation/config-serve.d.ts.map +1 -0
  113. package/dist/core/foundation/config-serve.js +35 -0
  114. package/dist/core/foundation/config-serve.js.map +1 -0
  115. package/dist/core/{config.d.ts → foundation/config.d.ts} +34 -3
  116. package/dist/core/foundation/config.d.ts.map +1 -0
  117. package/dist/core/{config.js → foundation/config.js} +35 -18
  118. package/dist/core/foundation/config.js.map +1 -0
  119. package/dist/core/foundation/doctor-managed.d.ts +13 -0
  120. package/dist/core/foundation/doctor-managed.d.ts.map +1 -0
  121. package/dist/core/foundation/doctor-managed.js +77 -0
  122. package/dist/core/foundation/doctor-managed.js.map +1 -0
  123. package/dist/core/foundation/doctor.d.ts +19 -0
  124. package/dist/core/foundation/doctor.d.ts.map +1 -0
  125. package/dist/core/foundation/doctor.js +187 -0
  126. package/dist/core/foundation/doctor.js.map +1 -0
  127. package/dist/core/foundation/harness-catalog.d.ts +96 -0
  128. package/dist/core/foundation/harness-catalog.d.ts.map +1 -0
  129. package/dist/core/foundation/harness-catalog.js +182 -0
  130. package/dist/core/foundation/harness-catalog.js.map +1 -0
  131. package/dist/core/foundation/init-blocks.d.ts +33 -0
  132. package/dist/core/foundation/init-blocks.d.ts.map +1 -0
  133. package/dist/core/foundation/init-blocks.js +165 -0
  134. package/dist/core/foundation/init-blocks.js.map +1 -0
  135. package/dist/core/foundation/init-managed.d.ts +10 -0
  136. package/dist/core/foundation/init-managed.d.ts.map +1 -0
  137. package/dist/core/foundation/init-managed.js +115 -0
  138. package/dist/core/foundation/init-managed.js.map +1 -0
  139. package/dist/core/foundation/init.d.ts +18 -0
  140. package/dist/core/foundation/init.d.ts.map +1 -0
  141. package/dist/core/foundation/init.js +113 -0
  142. package/dist/core/foundation/init.js.map +1 -0
  143. package/dist/core/{logger.d.ts → foundation/logger.d.ts} +1 -0
  144. package/dist/core/foundation/logger.d.ts.map +1 -0
  145. package/dist/core/{logger.js → foundation/logger.js} +18 -2
  146. package/dist/core/foundation/logger.js.map +1 -0
  147. package/dist/core/{new.d.ts → foundation/new.d.ts} +3 -0
  148. package/dist/core/foundation/new.d.ts.map +1 -0
  149. package/dist/core/foundation/new.js +206 -0
  150. package/dist/core/foundation/new.js.map +1 -0
  151. package/dist/core/foundation/package-root.d.ts +9 -0
  152. package/dist/core/foundation/package-root.d.ts.map +1 -0
  153. package/dist/core/foundation/package-root.js +11 -0
  154. package/dist/core/foundation/package-root.js.map +1 -0
  155. package/dist/core/lifecycle/done.d.ts +17 -0
  156. package/dist/core/lifecycle/done.d.ts.map +1 -0
  157. package/dist/core/lifecycle/done.js +97 -0
  158. package/dist/core/lifecycle/done.js.map +1 -0
  159. package/dist/core/lifecycle/reject.d.ts +26 -0
  160. package/dist/core/lifecycle/reject.d.ts.map +1 -0
  161. package/dist/core/lifecycle/reject.js +83 -0
  162. package/dist/core/lifecycle/reject.js.map +1 -0
  163. package/dist/core/lifecycle/retry-transition.d.ts +23 -0
  164. package/dist/core/lifecycle/retry-transition.d.ts.map +1 -0
  165. package/dist/core/lifecycle/retry-transition.js +41 -0
  166. package/dist/core/lifecycle/retry-transition.js.map +1 -0
  167. package/dist/core/lifecycle/retry.d.ts +18 -0
  168. package/dist/core/lifecycle/retry.d.ts.map +1 -0
  169. package/dist/core/lifecycle/retry.js +179 -0
  170. package/dist/core/lifecycle/retry.js.map +1 -0
  171. package/dist/core/report/approval-flags.d.ts +29 -0
  172. package/dist/core/report/approval-flags.d.ts.map +1 -0
  173. package/dist/core/report/approval-flags.js +138 -0
  174. package/dist/core/report/approval-flags.js.map +1 -0
  175. package/dist/core/report/planning-economics.d.ts +39 -0
  176. package/dist/core/report/planning-economics.d.ts.map +1 -0
  177. package/dist/core/report/planning-economics.js +168 -0
  178. package/dist/core/report/planning-economics.js.map +1 -0
  179. package/dist/core/report/planning-observed.d.ts +59 -0
  180. package/dist/core/report/planning-observed.d.ts.map +1 -0
  181. package/dist/core/report/planning-observed.js +135 -0
  182. package/dist/core/report/planning-observed.js.map +1 -0
  183. package/dist/core/report/planning-records.d.ts +69 -0
  184. package/dist/core/report/planning-records.d.ts.map +1 -0
  185. package/dist/core/report/planning-records.js +149 -0
  186. package/dist/core/report/planning-records.js.map +1 -0
  187. package/dist/core/report/planning-slice-lookup.d.ts +13 -0
  188. package/dist/core/report/planning-slice-lookup.d.ts.map +1 -0
  189. package/dist/core/report/planning-slice-lookup.js +146 -0
  190. package/dist/core/report/planning-slice-lookup.js.map +1 -0
  191. package/dist/core/report/planning-slice-measures.d.ts +17 -0
  192. package/dist/core/report/planning-slice-measures.d.ts.map +1 -0
  193. package/dist/core/report/planning-slice-measures.js +85 -0
  194. package/dist/core/report/planning-slice-measures.js.map +1 -0
  195. package/dist/core/report/planning-slice-record.d.ts +4 -0
  196. package/dist/core/report/planning-slice-record.d.ts.map +1 -0
  197. package/dist/core/report/planning-slice-record.js +66 -0
  198. package/dist/core/report/planning-slice-record.js.map +1 -0
  199. package/dist/core/report/planning-slice-turns.d.ts +13 -0
  200. package/dist/core/report/planning-slice-turns.d.ts.map +1 -0
  201. package/dist/core/report/planning-slice-turns.js +41 -0
  202. package/dist/core/report/planning-slice-turns.js.map +1 -0
  203. package/dist/core/report/planning-slice.d.ts +70 -0
  204. package/dist/core/report/planning-slice.d.ts.map +1 -0
  205. package/dist/core/report/planning-slice.js +147 -0
  206. package/dist/core/report/planning-slice.js.map +1 -0
  207. package/dist/core/report/planning.d.ts +31 -0
  208. package/dist/core/report/planning.d.ts.map +1 -0
  209. package/dist/core/report/planning.js +75 -0
  210. package/dist/core/report/planning.js.map +1 -0
  211. package/dist/core/report/report-events.d.ts +52 -0
  212. package/dist/core/report/report-events.d.ts.map +1 -0
  213. package/dist/core/report/report-events.js +198 -0
  214. package/dist/core/report/report-events.js.map +1 -0
  215. package/dist/core/report/report-pre-spawn.d.ts +25 -0
  216. package/dist/core/report/report-pre-spawn.d.ts.map +1 -0
  217. package/dist/core/report/report-pre-spawn.js +40 -0
  218. package/dist/core/report/report-pre-spawn.js.map +1 -0
  219. package/dist/core/report/report-retries.d.ts +30 -0
  220. package/dist/core/report/report-retries.d.ts.map +1 -0
  221. package/dist/core/report/report-retries.js +100 -0
  222. package/dist/core/report/report-retries.js.map +1 -0
  223. package/dist/core/report/report.d.ts +276 -0
  224. package/dist/core/report/report.d.ts.map +1 -0
  225. package/dist/core/report/report.js +1421 -0
  226. package/dist/core/report/report.js.map +1 -0
  227. package/dist/core/{lock.d.ts → run/lock.d.ts} +6 -0
  228. package/dist/core/run/lock.d.ts.map +1 -0
  229. package/dist/core/{lock.js → run/lock.js} +7 -15
  230. package/dist/core/run/lock.js.map +1 -0
  231. package/dist/core/run/manifest.d.ts +39 -0
  232. package/dist/core/run/manifest.d.ts.map +1 -0
  233. package/dist/core/run/manifest.js +137 -0
  234. package/dist/core/run/manifest.js.map +1 -0
  235. package/dist/core/run/scope-hash.d.ts +71 -0
  236. package/dist/core/run/scope-hash.d.ts.map +1 -0
  237. package/dist/core/run/scope-hash.js +177 -0
  238. package/dist/core/run/scope-hash.js.map +1 -0
  239. package/dist/core/run/scope.d.ts +30 -0
  240. package/dist/core/run/scope.d.ts.map +1 -0
  241. package/dist/core/run/scope.js +193 -0
  242. package/dist/core/run/scope.js.map +1 -0
  243. package/dist/core/run/summary.d.ts +8 -0
  244. package/dist/core/run/summary.d.ts.map +1 -0
  245. package/dist/core/run/summary.js +25 -0
  246. package/dist/core/run/summary.js.map +1 -0
  247. package/dist/core/run/verification.d.ts +23 -0
  248. package/dist/core/run/verification.d.ts.map +1 -0
  249. package/dist/core/run/verification.js +78 -0
  250. package/dist/core/run/verification.js.map +1 -0
  251. package/dist/core/spec/approve.d.ts +31 -0
  252. package/dist/core/spec/approve.d.ts.map +1 -0
  253. package/dist/core/spec/approve.js +111 -0
  254. package/dist/core/spec/approve.js.map +1 -0
  255. package/dist/core/spec/delta.d.ts +77 -0
  256. package/dist/core/spec/delta.d.ts.map +1 -0
  257. package/dist/core/spec/delta.js +581 -0
  258. package/dist/core/spec/delta.js.map +1 -0
  259. package/dist/core/spec/digest-flags.d.ts +21 -0
  260. package/dist/core/spec/digest-flags.d.ts.map +1 -0
  261. package/dist/core/spec/digest-flags.js +194 -0
  262. package/dist/core/spec/digest-flags.js.map +1 -0
  263. package/dist/core/spec/digest-verify-starts.d.ts +5 -0
  264. package/dist/core/spec/digest-verify-starts.d.ts.map +1 -0
  265. package/dist/core/spec/digest-verify-starts.js +31 -0
  266. package/dist/core/spec/digest-verify-starts.js.map +1 -0
  267. package/dist/core/spec/digest.d.ts +42 -0
  268. package/dist/core/spec/digest.d.ts.map +1 -0
  269. package/dist/core/spec/digest.js +170 -0
  270. package/dist/core/spec/digest.js.map +1 -0
  271. package/dist/core/spec/hasher.d.ts +11 -0
  272. package/dist/core/spec/hasher.d.ts.map +1 -0
  273. package/dist/core/{hasher.js → spec/hasher.js} +27 -3
  274. package/dist/core/spec/hasher.js.map +1 -0
  275. package/dist/core/spec/linter.d.ts +79 -0
  276. package/dist/core/spec/linter.d.ts.map +1 -0
  277. package/dist/core/spec/linter.js +826 -0
  278. package/dist/core/spec/linter.js.map +1 -0
  279. package/dist/core/spec/migrate.d.ts +54 -0
  280. package/dist/core/spec/migrate.d.ts.map +1 -0
  281. package/dist/core/spec/migrate.js +297 -0
  282. package/dist/core/spec/migrate.js.map +1 -0
  283. package/dist/core/spec/openspec-version.d.ts +30 -0
  284. package/dist/core/spec/openspec-version.d.ts.map +1 -0
  285. package/dist/core/spec/openspec-version.js +118 -0
  286. package/dist/core/spec/openspec-version.js.map +1 -0
  287. package/dist/core/spec/parser.d.ts +82 -0
  288. package/dist/core/spec/parser.d.ts.map +1 -0
  289. package/dist/core/spec/parser.js +221 -0
  290. package/dist/core/spec/parser.js.map +1 -0
  291. package/dist/core/spec/verify-paths.d.ts +18 -0
  292. package/dist/core/spec/verify-paths.d.ts.map +1 -0
  293. package/dist/core/spec/verify-paths.js +139 -0
  294. package/dist/core/spec/verify-paths.js.map +1 -0
  295. package/dist/core/spec/verify-starts.d.ts +45 -0
  296. package/dist/core/spec/verify-starts.d.ts.map +1 -0
  297. package/dist/core/spec/verify-starts.js +61 -0
  298. package/dist/core/spec/verify-starts.js.map +1 -0
  299. package/dist/core/status/inbox-cursor.d.ts +10 -0
  300. package/dist/core/status/inbox-cursor.d.ts.map +1 -0
  301. package/dist/core/status/inbox-cursor.js +33 -0
  302. package/dist/core/status/inbox-cursor.js.map +1 -0
  303. package/dist/core/status/inbox-projection.d.ts +15 -0
  304. package/dist/core/status/inbox-projection.d.ts.map +1 -0
  305. package/dist/core/status/inbox-projection.js +20 -0
  306. package/dist/core/status/inbox-projection.js.map +1 -0
  307. package/dist/core/status/inbox-text.d.ts +4 -0
  308. package/dist/core/status/inbox-text.d.ts.map +1 -0
  309. package/dist/core/status/inbox-text.js +48 -0
  310. package/dist/core/status/inbox-text.js.map +1 -0
  311. package/dist/core/status/inbox.d.ts +53 -0
  312. package/dist/core/status/inbox.d.ts.map +1 -0
  313. package/dist/core/status/inbox.js +167 -0
  314. package/dist/core/status/inbox.js.map +1 -0
  315. package/dist/core/status/layout.d.ts +29 -0
  316. package/dist/core/status/layout.d.ts.map +1 -0
  317. package/dist/core/status/layout.js +77 -0
  318. package/dist/core/status/layout.js.map +1 -0
  319. package/dist/core/status/queue-parser.d.ts +13 -0
  320. package/dist/core/status/queue-parser.d.ts.map +1 -0
  321. package/dist/core/status/queue-parser.js +88 -0
  322. package/dist/core/status/queue-parser.js.map +1 -0
  323. package/dist/core/status/queue-planning.d.ts +62 -0
  324. package/dist/core/status/queue-planning.d.ts.map +1 -0
  325. package/dist/core/status/queue-planning.js +158 -0
  326. package/dist/core/status/queue-planning.js.map +1 -0
  327. package/dist/core/status/queue-report-detail.d.ts +50 -0
  328. package/dist/core/status/queue-report-detail.d.ts.map +1 -0
  329. package/dist/core/status/queue-report-detail.js +140 -0
  330. package/dist/core/status/queue-report-detail.js.map +1 -0
  331. package/dist/core/status/queue-report.d.ts +14 -0
  332. package/dist/core/status/queue-report.d.ts.map +1 -0
  333. package/dist/core/status/queue-report.js +41 -0
  334. package/dist/core/status/queue-report.js.map +1 -0
  335. package/dist/core/status/queue-state.d.ts +53 -0
  336. package/dist/core/status/queue-state.d.ts.map +1 -0
  337. package/dist/core/status/queue-state.js +167 -0
  338. package/dist/core/status/queue-state.js.map +1 -0
  339. package/dist/core/status/queue.d.ts +7 -0
  340. package/dist/core/status/queue.d.ts.map +1 -0
  341. package/dist/core/status/queue.js +4 -0
  342. package/dist/core/status/queue.js.map +1 -0
  343. package/dist/core/status/show.d.ts +102 -0
  344. package/dist/core/status/show.d.ts.map +1 -0
  345. package/dist/core/status/show.js +704 -0
  346. package/dist/core/status/show.js.map +1 -0
  347. package/dist/core/status/state.d.ts +56 -0
  348. package/dist/core/status/state.d.ts.map +1 -0
  349. package/dist/core/status/state.js +187 -0
  350. package/dist/core/status/state.js.map +1 -0
  351. package/dist/core/status/status.d.ts +23 -0
  352. package/dist/core/status/status.d.ts.map +1 -0
  353. package/dist/core/status/status.js +173 -0
  354. package/dist/core/status/status.js.map +1 -0
  355. package/dist/core/web/web-data-change.d.ts +10 -0
  356. package/dist/core/web/web-data-change.d.ts.map +1 -0
  357. package/dist/core/web/web-data-change.js +106 -0
  358. package/dist/core/web/web-data-change.js.map +1 -0
  359. package/dist/core/web/web-data-folders.d.ts +39 -0
  360. package/dist/core/web/web-data-folders.d.ts.map +1 -0
  361. package/dist/core/web/web-data-folders.js +125 -0
  362. package/dist/core/web/web-data-folders.js.map +1 -0
  363. package/dist/core/web/web-data-graph.d.ts +8 -0
  364. package/dist/core/web/web-data-graph.d.ts.map +1 -0
  365. package/dist/core/web/web-data-graph.js +113 -0
  366. package/dist/core/web/web-data-graph.js.map +1 -0
  367. package/dist/core/web/web-data-lifecycle.d.ts +43 -0
  368. package/dist/core/web/web-data-lifecycle.d.ts.map +1 -0
  369. package/dist/core/web/web-data-lifecycle.js +141 -0
  370. package/dist/core/web/web-data-lifecycle.js.map +1 -0
  371. package/dist/core/web/web-data-observations.d.ts +30 -0
  372. package/dist/core/web/web-data-observations.d.ts.map +1 -0
  373. package/dist/core/web/web-data-observations.js +181 -0
  374. package/dist/core/web/web-data-observations.js.map +1 -0
  375. package/dist/core/web/web-data-tokens.d.ts +29 -0
  376. package/dist/core/web/web-data-tokens.d.ts.map +1 -0
  377. package/dist/core/web/web-data-tokens.js +62 -0
  378. package/dist/core/web/web-data-tokens.js.map +1 -0
  379. package/dist/core/web/web-data-types.d.ts +156 -0
  380. package/dist/core/web/web-data-types.d.ts.map +1 -0
  381. package/dist/core/web/web-data-types.js +15 -0
  382. package/dist/core/web/web-data-types.js.map +1 -0
  383. package/dist/core/web/web-data.d.ts +10 -0
  384. package/dist/core/web/web-data.d.ts.map +1 -0
  385. package/dist/core/web/web-data.js +8 -0
  386. package/dist/core/web/web-data.js.map +1 -0
  387. package/dist/core/web/web-events.d.ts +54 -0
  388. package/dist/core/web/web-events.d.ts.map +1 -0
  389. package/dist/core/web/web-events.js +162 -0
  390. package/dist/core/web/web-events.js.map +1 -0
  391. package/dist/core/web/web-export.d.ts +18 -0
  392. package/dist/core/web/web-export.d.ts.map +1 -0
  393. package/dist/core/web/web-export.js +112 -0
  394. package/dist/core/web/web-export.js.map +1 -0
  395. package/dist/core/web/web-server.d.ts +34 -0
  396. package/dist/core/web/web-server.d.ts.map +1 -0
  397. package/dist/core/web/web-server.js +182 -0
  398. package/dist/core/web/web-server.js.map +1 -0
  399. package/dist/core/web/web-static.d.ts +20 -0
  400. package/dist/core/web/web-static.d.ts.map +1 -0
  401. package/dist/core/web/web-static.js +104 -0
  402. package/dist/core/web/web-static.js.map +1 -0
  403. package/dist/harness/{agy.d.ts → agy/agy.d.ts} +8 -6
  404. package/dist/harness/agy/agy.d.ts.map +1 -0
  405. package/dist/harness/{agy.js → agy/agy.js} +49 -34
  406. package/dist/harness/agy/agy.js.map +1 -0
  407. package/dist/harness/claude/claude-turns.d.ts +29 -0
  408. package/dist/harness/claude/claude-turns.d.ts.map +1 -0
  409. package/dist/harness/claude/claude-turns.js +162 -0
  410. package/dist/harness/claude/claude-turns.js.map +1 -0
  411. package/dist/harness/claude/claude-usage.d.ts +12 -0
  412. package/dist/harness/claude/claude-usage.d.ts.map +1 -0
  413. package/dist/harness/claude/claude-usage.js +144 -0
  414. package/dist/harness/claude/claude-usage.js.map +1 -0
  415. package/dist/harness/codex/codex-observe-usage.d.ts +6 -0
  416. package/dist/harness/codex/codex-observe-usage.d.ts.map +1 -0
  417. package/dist/harness/codex/codex-observe-usage.js +215 -0
  418. package/dist/harness/codex/codex-observe-usage.js.map +1 -0
  419. package/dist/harness/codex/codex-prompt.d.ts +17 -0
  420. package/dist/harness/codex/codex-prompt.d.ts.map +1 -0
  421. package/dist/harness/codex/codex-prompt.js +43 -0
  422. package/dist/harness/codex/codex-prompt.js.map +1 -0
  423. package/dist/harness/codex/codex-stream.d.ts +23 -0
  424. package/dist/harness/codex/codex-stream.d.ts.map +1 -0
  425. package/dist/harness/codex/codex-stream.js +182 -0
  426. package/dist/harness/codex/codex-stream.js.map +1 -0
  427. package/dist/harness/codex/codex-usage.d.ts +26 -0
  428. package/dist/harness/codex/codex-usage.d.ts.map +1 -0
  429. package/dist/harness/codex/codex-usage.js +122 -0
  430. package/dist/harness/codex/codex-usage.js.map +1 -0
  431. package/dist/harness/codex/codex.d.ts +16 -0
  432. package/dist/harness/codex/codex.d.ts.map +1 -0
  433. package/dist/harness/codex/codex.js +92 -0
  434. package/dist/harness/codex/codex.js.map +1 -0
  435. package/dist/harness/index.d.ts +11 -2
  436. package/dist/harness/index.d.ts.map +1 -1
  437. package/dist/harness/index.js +24 -9
  438. package/dist/harness/index.js.map +1 -1
  439. package/dist/harness/mock.d.ts +5 -2
  440. package/dist/harness/mock.d.ts.map +1 -1
  441. package/dist/harness/mock.js +10 -11
  442. package/dist/harness/mock.js.map +1 -1
  443. package/dist/harness/opencode/opencode-observe-usage.d.ts +4 -0
  444. package/dist/harness/opencode/opencode-observe-usage.d.ts.map +1 -0
  445. package/dist/harness/opencode/opencode-observe-usage.js +100 -0
  446. package/dist/harness/opencode/opencode-observe-usage.js.map +1 -0
  447. package/dist/harness/opencode/opencode-usage.d.ts +24 -0
  448. package/dist/harness/opencode/opencode-usage.d.ts.map +1 -0
  449. package/dist/harness/opencode/opencode-usage.js +181 -0
  450. package/dist/harness/opencode/opencode-usage.js.map +1 -0
  451. package/dist/harness/{opencode.d.ts → opencode/opencode.d.ts} +10 -7
  452. package/dist/harness/opencode/opencode.d.ts.map +1 -0
  453. package/dist/harness/{opencode.js → opencode/opencode.js} +159 -70
  454. package/dist/harness/opencode/opencode.js.map +1 -0
  455. package/dist/harness/pi/pi-args.d.ts +9 -0
  456. package/dist/harness/pi/pi-args.d.ts.map +1 -0
  457. package/dist/harness/pi/pi-args.js +33 -0
  458. package/dist/harness/pi/pi-args.js.map +1 -0
  459. package/dist/harness/pi/pi-stream.d.ts +27 -0
  460. package/dist/harness/pi/pi-stream.d.ts.map +1 -0
  461. package/dist/harness/pi/pi-stream.js +176 -0
  462. package/dist/harness/pi/pi-stream.js.map +1 -0
  463. package/dist/harness/pi/pi-tools.d.ts +5 -0
  464. package/dist/harness/pi/pi-tools.d.ts.map +1 -0
  465. package/dist/harness/pi/pi-tools.js +31 -0
  466. package/dist/harness/pi/pi-tools.js.map +1 -0
  467. package/dist/harness/pi/pi.d.ts +11 -0
  468. package/dist/harness/pi/pi.d.ts.map +1 -0
  469. package/dist/harness/pi/pi.js +109 -0
  470. package/dist/harness/pi/pi.js.map +1 -0
  471. package/dist/harness/prompt.d.ts +11 -0
  472. package/dist/harness/prompt.d.ts.map +1 -0
  473. package/dist/harness/prompt.js +105 -0
  474. package/dist/harness/prompt.js.map +1 -0
  475. package/dist/harness/types.d.ts +287 -8
  476. package/dist/harness/types.d.ts.map +1 -1
  477. package/dist/harness/types.js +125 -0
  478. package/dist/harness/types.js.map +1 -1
  479. package/dist/index.d.ts +13 -2
  480. package/dist/index.d.ts.map +1 -1
  481. package/dist/index.js +8 -1
  482. package/dist/index.js.map +1 -1
  483. package/dist/watcher/archive-verify.d.ts +9 -0
  484. package/dist/watcher/archive-verify.d.ts.map +1 -0
  485. package/dist/watcher/archive-verify.js +80 -0
  486. package/dist/watcher/archive-verify.js.map +1 -0
  487. package/dist/watcher/archiver.d.ts +14 -2
  488. package/dist/watcher/archiver.d.ts.map +1 -1
  489. package/dist/watcher/archiver.js +112 -33
  490. package/dist/watcher/archiver.js.map +1 -1
  491. package/dist/watcher/attempt.d.ts +19 -0
  492. package/dist/watcher/attempt.d.ts.map +1 -0
  493. package/dist/watcher/attempt.js +94 -0
  494. package/dist/watcher/attempt.js.map +1 -0
  495. package/dist/watcher/auto-retry.d.ts +11 -0
  496. package/dist/watcher/auto-retry.d.ts.map +1 -0
  497. package/dist/watcher/auto-retry.js +180 -0
  498. package/dist/watcher/auto-retry.js.map +1 -0
  499. package/dist/watcher/build.d.ts +24 -0
  500. package/dist/watcher/build.d.ts.map +1 -0
  501. package/dist/watcher/build.js +169 -0
  502. package/dist/watcher/build.js.map +1 -0
  503. package/dist/watcher/change-verify.d.ts +25 -0
  504. package/dist/watcher/change-verify.d.ts.map +1 -0
  505. package/dist/watcher/change-verify.js +57 -0
  506. package/dist/watcher/change-verify.js.map +1 -0
  507. package/dist/watcher/dev.d.ts +51 -0
  508. package/dist/watcher/dev.d.ts.map +1 -0
  509. package/dist/watcher/dev.js +124 -0
  510. package/dist/watcher/dev.js.map +1 -0
  511. package/dist/watcher/failure-reason.d.ts +7 -0
  512. package/dist/watcher/failure-reason.d.ts.map +1 -0
  513. package/dist/watcher/failure-reason.js +2 -0
  514. package/dist/watcher/failure-reason.js.map +1 -0
  515. package/dist/watcher/fingerprint.d.ts +19 -0
  516. package/dist/watcher/fingerprint.d.ts.map +1 -0
  517. package/dist/watcher/fingerprint.js +53 -0
  518. package/dist/watcher/fingerprint.js.map +1 -0
  519. package/dist/watcher/heartbeat.d.ts +33 -0
  520. package/dist/watcher/heartbeat.d.ts.map +1 -0
  521. package/dist/watcher/heartbeat.js +135 -0
  522. package/dist/watcher/heartbeat.js.map +1 -0
  523. package/dist/watcher/lock.d.ts +10 -0
  524. package/dist/watcher/lock.d.ts.map +1 -0
  525. package/dist/watcher/lock.js +14 -0
  526. package/dist/watcher/lock.js.map +1 -0
  527. package/dist/watcher/loop.d.ts +26 -6
  528. package/dist/watcher/loop.d.ts.map +1 -1
  529. package/dist/watcher/loop.js +154 -37
  530. package/dist/watcher/loop.js.map +1 -1
  531. package/dist/watcher/measures.d.ts +46 -0
  532. package/dist/watcher/measures.d.ts.map +1 -0
  533. package/dist/watcher/measures.js +203 -0
  534. package/dist/watcher/measures.js.map +1 -0
  535. package/dist/watcher/outcome.d.ts +32 -0
  536. package/dist/watcher/outcome.d.ts.map +1 -0
  537. package/dist/watcher/outcome.js +127 -0
  538. package/dist/watcher/outcome.js.map +1 -0
  539. package/dist/watcher/regression.d.ts +43 -0
  540. package/dist/watcher/regression.d.ts.map +1 -0
  541. package/dist/watcher/regression.js +175 -0
  542. package/dist/watcher/regression.js.map +1 -0
  543. package/dist/watcher/runner.d.ts +6 -68
  544. package/dist/watcher/runner.d.ts.map +1 -1
  545. package/dist/watcher/runner.js +74 -523
  546. package/dist/watcher/runner.js.map +1 -1
  547. package/dist/watcher/spawn.d.ts +48 -0
  548. package/dist/watcher/spawn.d.ts.map +1 -0
  549. package/dist/watcher/spawn.js +130 -0
  550. package/dist/watcher/spawn.js.map +1 -0
  551. package/dist/watcher/task-verify.d.ts +59 -0
  552. package/dist/watcher/task-verify.d.ts.map +1 -0
  553. package/dist/watcher/task-verify.js +108 -0
  554. package/dist/watcher/task-verify.js.map +1 -0
  555. package/dist/watcher/verify.d.ts +44 -0
  556. package/dist/watcher/verify.d.ts.map +1 -0
  557. package/dist/watcher/verify.js +156 -0
  558. package/dist/watcher/verify.js.map +1 -0
  559. package/package.json +21 -9
  560. package/templates/PLANNER.md +77 -0
  561. package/templates/openspec/config.yaml +24 -0
  562. package/templates/openspec/schemas/osq/README.md +30 -0
  563. package/templates/openspec/schemas/osq/schema.yaml +133 -0
  564. package/templates/openspec/schemas/osq/templates/proposal.md +66 -0
  565. package/templates/openspec/schemas/osq/templates/spec.md +13 -0
  566. package/templates/openspec/schemas/osq/templates/tasks.md +11 -0
  567. package/templates/proposal.md +66 -0
  568. package/templates/tasks.md +5 -0
  569. package/ui/dist/assets/index-CZYeQ8la.js +9 -0
  570. package/ui/dist/assets/index-D6zVSjO7.css +1 -0
  571. package/ui/dist/index.html +14 -0
  572. package/dist/core/approve.d.ts +0 -11
  573. package/dist/core/approve.d.ts.map +0 -1
  574. package/dist/core/approve.js +0 -52
  575. package/dist/core/approve.js.map +0 -1
  576. package/dist/core/config.d.ts.map +0 -1
  577. package/dist/core/config.js.map +0 -1
  578. package/dist/core/hasher.d.ts +0 -4
  579. package/dist/core/hasher.d.ts.map +0 -1
  580. package/dist/core/hasher.js.map +0 -1
  581. package/dist/core/init.d.ts +0 -12
  582. package/dist/core/init.d.ts.map +0 -1
  583. package/dist/core/init.js +0 -151
  584. package/dist/core/init.js.map +0 -1
  585. package/dist/core/linter.d.ts +0 -8
  586. package/dist/core/linter.d.ts.map +0 -1
  587. package/dist/core/linter.js +0 -100
  588. package/dist/core/linter.js.map +0 -1
  589. package/dist/core/lock.d.ts.map +0 -1
  590. package/dist/core/lock.js.map +0 -1
  591. package/dist/core/logger.d.ts.map +0 -1
  592. package/dist/core/logger.js.map +0 -1
  593. package/dist/core/new.d.ts.map +0 -1
  594. package/dist/core/new.js +0 -79
  595. package/dist/core/new.js.map +0 -1
  596. package/dist/core/parser.d.ts +0 -32
  597. package/dist/core/parser.d.ts.map +0 -1
  598. package/dist/core/parser.js +0 -87
  599. package/dist/core/parser.js.map +0 -1
  600. package/dist/core/report.d.ts +0 -54
  601. package/dist/core/report.d.ts.map +0 -1
  602. package/dist/core/report.js +0 -475
  603. package/dist/core/report.js.map +0 -1
  604. package/dist/core/show.d.ts +0 -50
  605. package/dist/core/show.d.ts.map +0 -1
  606. package/dist/core/show.js +0 -374
  607. package/dist/core/show.js.map +0 -1
  608. package/dist/core/state.d.ts +0 -25
  609. package/dist/core/state.d.ts.map +0 -1
  610. package/dist/core/state.js +0 -180
  611. package/dist/core/state.js.map +0 -1
  612. package/dist/core/status.d.ts +0 -10
  613. package/dist/core/status.d.ts.map +0 -1
  614. package/dist/core/status.js +0 -106
  615. package/dist/core/status.js.map +0 -1
  616. package/dist/harness/agy.d.ts.map +0 -1
  617. package/dist/harness/agy.js.map +0 -1
  618. package/dist/harness/opencode.d.ts.map +0 -1
  619. package/dist/harness/opencode.js.map +0 -1
@@ -1,9 +1,12 @@
1
- import { type LogLevel } from '../core/logger.js';
2
- export interface WatchCommandOptions {
3
- once?: boolean;
4
- verbose?: boolean;
5
- quiet?: boolean;
6
- }
1
+ import { type LogLevel } from '../core/foundation/logger.js';
2
+ import type { WatchCommandOptions } from '../watcher/dev.js';
3
+ export type { WatchCommandOptions };
7
4
  export declare function resolveLogLevel(options: WatchCommandOptions): LogLevel;
5
+ /**
6
+ * Dev mode hands control to the supervisor, which runs the watcher as a `tsx`
7
+ * child and restarts it on source changes. The supervised worker carries
8
+ * `OSQ_DEV_WORKER=1` and must start the loop rather than recurse.
9
+ */
10
+ export declare function shouldRunDevSupervisor(options: WatchCommandOptions, env?: NodeJS.ProcessEnv): boolean;
8
11
  export declare function watchCommand(options: WatchCommandOptions): Promise<void>;
9
12
  //# sourceMappingURL=watch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/cli/watch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAgB,MAAM,mBAAmB,CAAC;AAIhE,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,QAAQ,CAItE;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAO9E"}
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/cli/watch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAgB,MAAM,8BAA8B,CAAC;AAE3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG7D,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,QAAQ,CAItE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,mBAAmB,EAC5B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAET;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa9E"}
package/dist/cli/watch.js CHANGED
@@ -1,5 +1,5 @@
1
- import { loadConfig } from '../core/config.js';
2
- import { createLogger } from '../core/logger.js';
1
+ import { loadConfig } from '../core/foundation/config.js';
2
+ import { createLogger } from '../core/foundation/logger.js';
3
3
  import { getHarnessAdapter } from '../harness/index.js';
4
4
  import { startWatcher } from '../watcher/loop.js';
5
5
  export function resolveLogLevel(options) {
@@ -9,7 +9,20 @@ export function resolveLogLevel(options) {
9
9
  return 'verbose';
10
10
  return 'normal';
11
11
  }
12
+ /**
13
+ * Dev mode hands control to the supervisor, which runs the watcher as a `tsx`
14
+ * child and restarts it on source changes. The supervised worker carries
15
+ * `OSQ_DEV_WORKER=1` and must start the loop rather than recurse.
16
+ */
17
+ export function shouldRunDevSupervisor(options, env = process.env) {
18
+ return options.dev === true && env.OSQ_DEV_WORKER !== '1';
19
+ }
12
20
  export async function watchCommand(options) {
21
+ if (shouldRunDevSupervisor(options)) {
22
+ const { runDevSupervisor } = await import('../watcher/dev.js');
23
+ await runDevSupervisor(options);
24
+ return;
25
+ }
13
26
  const cwd = process.cwd();
14
27
  const config = await loadConfig(cwd);
15
28
  const adapter = getHarnessAdapter(config.harness);
@@ -1 +1 @@
1
- {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/cli/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAiB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD,MAAM,UAAU,eAAe,CAAC,OAA4B;IAC1D,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAClC,IAAI,OAAO,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IACtC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7D,MAAM,cAAc,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC;IAC9C,MAAM,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/cli/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAiB,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD,MAAM,UAAU,eAAe,CAAC,OAA4B;IAC1D,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAClC,IAAI,OAAO,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IACtC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAA4B,EAC5B,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,OAAO,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,cAAc,KAAK,GAAG,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC7D,IAAI,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC/D,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7D,MAAM,cAAc,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC;IAC9C,MAAM,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { PlannerConfig } from './config.js';
2
+ /**
3
+ * Optional Codex CLI execution settings. Every field is optional; omitting a
4
+ * field defers to Codex's own native configuration and defaults.
5
+ */
6
+ export interface CodexConfig {
7
+ readonly bin?: string;
8
+ readonly model?: string;
9
+ readonly effort?: string;
10
+ }
11
+ /** Validate optional Codex settings, rejecting blank or non-string values. */
12
+ export declare function validateCodexConfig(codex: unknown): CodexConfig;
13
+ /**
14
+ * Validate the optional `planner` block. Supported harness names and
15
+ * harness-specific optional settings are derived from the canonical catalog;
16
+ * the model is always required. Unsupported settings fail with the selected
17
+ * harness and the offending setting named rather than being silently ignored.
18
+ */
19
+ export declare function validatePlannerConfig(planner: unknown): PlannerConfig;
20
+ export { resolveAdapterModel, resolveCodexBinary, resolveCodexEffort, resolveCodexModel, resolveHarnessEffort, resolveHarnessModel, resolvePlannerSelection, } from './harness-catalog.js';
21
+ export type { PlannerSelection } from './harness-catalog.js';
22
+ //# sourceMappingURL=config-codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-codex.d.ts","sourceRoot":"","sources":["../../../src/core/foundation/config-codex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAkB/D;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,CA6BrE;AAID,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { HARNESS_NAMES, findHarness } from './harness-catalog.js';
2
+ const CODEX_STRING_FIELDS = ['bin', 'model', 'effort'];
3
+ /** Validate optional Codex settings, rejecting blank or non-string values. */
4
+ export function validateCodexConfig(codex) {
5
+ if (codex === undefined || codex === null) {
6
+ return {};
7
+ }
8
+ if (typeof codex !== 'object' || Array.isArray(codex)) {
9
+ throw new Error('codex configuration must be an object');
10
+ }
11
+ const record = codex;
12
+ const validated = {};
13
+ for (const field of CODEX_STRING_FIELDS) {
14
+ const value = record[field];
15
+ if (value === undefined)
16
+ continue;
17
+ if (typeof value !== 'string' || !value.trim()) {
18
+ throw new Error(`codex.${field} must be a non-empty string if provided`);
19
+ }
20
+ validated[field] = value.trim();
21
+ }
22
+ return validated;
23
+ }
24
+ /**
25
+ * Validate the optional `planner` block. Supported harness names and
26
+ * harness-specific optional settings are derived from the canonical catalog;
27
+ * the model is always required. Unsupported settings fail with the selected
28
+ * harness and the offending setting named rather than being silently ignored.
29
+ */
30
+ export function validatePlannerConfig(planner) {
31
+ if (!planner || typeof planner !== 'object') {
32
+ throw new Error('planner configuration must be an object');
33
+ }
34
+ const p = planner;
35
+ if (typeof p.harness !== 'string' || !p.harness.trim()) {
36
+ throw new Error('planner.harness must be a non-empty string');
37
+ }
38
+ const entry = findHarness(p.harness);
39
+ if (!entry) {
40
+ throw new Error(`Unsupported planner harness: "${String(p.harness).trim()}". Must be one of: ${HARNESS_NAMES.join(', ')}`);
41
+ }
42
+ if (typeof p.model !== 'string' || !p.model.trim()) {
43
+ throw new Error('planner.model must be a non-empty string');
44
+ }
45
+ const model = p.model.trim();
46
+ if (p.agent !== undefined && (typeof p.agent !== 'string' || !p.agent.trim())) {
47
+ throw new Error('planner.agent must be a non-empty string if provided');
48
+ }
49
+ const agent = typeof p.agent === 'string' && p.agent.trim() ? p.agent.trim() : undefined;
50
+ if (agent && !entry.planner.agent) {
51
+ throw new Error(`planner.agent is unsupported for the ${entry.name} harness; remove it`);
52
+ }
53
+ return { harness: entry.name, model, ...(agent ? { agent } : {}) };
54
+ }
55
+ // Shared resolution lives in the canonical catalog; re-exported here so the
56
+ // 032 public surface and its call sites keep working unchanged.
57
+ export { resolveAdapterModel, resolveCodexBinary, resolveCodexEffort, resolveCodexModel, resolveHarnessEffort, resolveHarnessModel, resolvePlannerSelection, } from './harness-catalog.js';
58
+ //# sourceMappingURL=config-codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-codex.js","sourceRoot":"","sources":["../../../src/core/foundation/config-codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { OsqConfig } from './config.js';
2
+ /**
3
+ * Resolve the binary the doctor must probe for the active harness, using the
4
+ * catalog's executable resolution. Returns `null` for harnesses with no binary
5
+ * (the mock adapter). Uncatalogued names are echoed back so doctor can still
6
+ * report them as unavailable.
7
+ */
8
+ export declare function harnessBinary(config: OsqConfig): string | null;
9
+ /**
10
+ * Probe `<bin> --version`, returning the first trimmed output line. The default
11
+ * deadline matches the configured harness preflight value used elsewhere.
12
+ */
13
+ export declare function probeVersion(bin: string, root: string, timeoutSeconds?: number): Promise<string>;
14
+ //# sourceMappingURL=config-doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-doctor.d.ts","sourceRoot":"","sources":["../../../src/core/foundation/config-doctor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAK9D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAY5F"}
@@ -0,0 +1,29 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { findHarness, resolveHarnessExecutable } from './harness-catalog.js';
3
+ /**
4
+ * Resolve the binary the doctor must probe for the active harness, using the
5
+ * catalog's executable resolution. Returns `null` for harnesses with no binary
6
+ * (the mock adapter). Uncatalogued names are echoed back so doctor can still
7
+ * report them as unavailable.
8
+ */
9
+ export function harnessBinary(config) {
10
+ const name = typeof config.harness === 'string' ? config.harness.trim() : '';
11
+ if (name === '')
12
+ return null;
13
+ const entry = findHarness(name);
14
+ return entry ? resolveHarnessExecutable(entry.name, config) : name;
15
+ }
16
+ /**
17
+ * Probe `<bin> --version`, returning the first trimmed output line. The default
18
+ * deadline matches the configured harness preflight value used elsewhere.
19
+ */
20
+ export function probeVersion(bin, root, timeoutSeconds = 10) {
21
+ return new Promise((resolve, reject) => {
22
+ execFile(bin, ['--version'], { cwd: root, timeout: timeoutSeconds * 1000 }, (err, out, errOut) => {
23
+ if (err)
24
+ return reject(err);
25
+ resolve((out || errOut).trim().split('\n')[0].trim());
26
+ });
27
+ });
28
+ }
29
+ //# sourceMappingURL=config-doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-doctor.js","sourceRoot":"","sources":["../../../src/core/foundation/config-doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAE7E;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,IAAY,EAAE,cAAc,GAAG,EAAE;IACzE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,QAAQ,CACN,GAAG,EACH,CAAC,WAAW,CAAC,EACb,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,EAAE,EAC7C,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;YACnB,IAAI,GAAG;gBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5B,OAAO,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type OsqConfig, type OsqUserConfig } from './config.js';
2
+ export declare function applyHarnessModelEnv(userConfig: OsqUserConfig, selectedHarness: string, envModel: string): Partial<OsqConfig>;
3
+ //# sourceMappingURL=config-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-env.d.ts","sourceRoot":"","sources":["../../../src/core/foundation/config-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAKjF,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,aAAa,EACzB,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,CAAC,CAepB"}
@@ -0,0 +1,22 @@
1
+ import { DEFAULT_CONFIG } from './config.js';
2
+ import { HARNESS_CATALOG } from './harness-catalog.js';
3
+ // Apply OSQ_MODEL to catalogued harness sections that accept it; explicit
4
+ // models still win and `defineConfig` owns default merging and validation.
5
+ export function applyHarnessModelEnv(userConfig, selectedHarness, envModel) {
6
+ const selected = selectedHarness.trim().toLowerCase();
7
+ const overrides = {};
8
+ for (const entry of HARNESS_CATALOG) {
9
+ if (!entry.configKey)
10
+ continue;
11
+ if (!entry.envModelWhenUnselected && entry.name !== selected)
12
+ continue;
13
+ const sections = userConfig;
14
+ const section = sections[entry.configKey];
15
+ if (section?.model)
16
+ continue;
17
+ const defaults = DEFAULT_CONFIG[entry.configKey];
18
+ overrides[entry.configKey] = { ...(defaults ?? {}), ...(section ?? {}), model: envModel };
19
+ }
20
+ return overrides;
21
+ }
22
+ //# sourceMappingURL=config-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-env.js","sourceRoot":"","sources":["../../../src/core/foundation/config-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAsC,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,0EAA0E;AAC1E,2EAA2E;AAC3E,MAAM,UAAU,oBAAoB,CAClC,UAAyB,EACzB,eAAuB,EACvB,QAAgB;IAEhB,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtD,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,SAAS;QAC/B,IAAI,CAAC,KAAK,CAAC,sBAAsB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QACvE,MAAM,QAAQ,GAAG,UAAuE,CAAC;QACzF,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,OAAO,EAAE,KAAK;YAAE,SAAS;QAC7B,MAAM,QAAQ,GAAI,cAAgE,CAChF,KAAK,CAAC,SAAS,CAChB,CAAC;QACF,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC5F,CAAC;IACD,OAAO,SAA+B,CAAC;AACzC,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Task-boundary verification gates. `changeVerifyAfterTask` runs the change's
3
+ * proposal verify after each passing task verify; it defaults on so every
4
+ * completed task leaves the full change verifier green. `preSpawnVerify`
5
+ * controls whether a task's verify runs once before its first attempt.
6
+ * `autoRetries` bounds how many automatic retries the watcher may spend on a
7
+ * dead task before a human must intervene; zero disables them.
8
+ */
9
+ export type PreSpawnVerifyMode = 'warn' | 'fail' | 'off';
10
+ export interface GatesConfig {
11
+ readonly changeVerifyAfterTask: boolean;
12
+ readonly preSpawnVerify?: PreSpawnVerifyMode;
13
+ readonly autoRetries?: number;
14
+ }
15
+ export declare const DEFAULT_GATES_CONFIG: GatesConfig;
16
+ /**
17
+ * Validate an optional `gates` block over the defaults. A partial block keeps
18
+ * each missing gate's default; a present value outside the gate's type is
19
+ * rejected.
20
+ */
21
+ export declare function validateGatesConfig(gates: unknown): GatesConfig;
22
+ //# sourceMappingURL=config-gates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-gates.d.ts","sourceRoot":"","sources":["../../../src/core/foundation/config-gates.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,cAAc,CAAC,EAAE,kBAAkB,CAAC;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,eAAO,MAAM,oBAAoB,EAAE,WAIlC,CAAC;AAIF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAkC/D"}
@@ -0,0 +1,43 @@
1
+ export const DEFAULT_GATES_CONFIG = {
2
+ changeVerifyAfterTask: true,
3
+ preSpawnVerify: 'warn',
4
+ autoRetries: 1,
5
+ };
6
+ const PRE_SPAWN_VERIFY_MODES = ['warn', 'fail', 'off'];
7
+ /**
8
+ * Validate an optional `gates` block over the defaults. A partial block keeps
9
+ * each missing gate's default; a present value outside the gate's type is
10
+ * rejected.
11
+ */
12
+ export function validateGatesConfig(gates) {
13
+ if (gates === undefined)
14
+ return DEFAULT_GATES_CONFIG;
15
+ if (typeof gates !== 'object' || gates === null || Array.isArray(gates)) {
16
+ throw new Error('gates configuration must be an object');
17
+ }
18
+ const record = gates;
19
+ const value = record.changeVerifyAfterTask === undefined
20
+ ? DEFAULT_GATES_CONFIG.changeVerifyAfterTask
21
+ : record.changeVerifyAfterTask;
22
+ if (typeof value !== 'boolean') {
23
+ throw new Error('gates.changeVerifyAfterTask must be a boolean');
24
+ }
25
+ const preSpawnRaw = record.preSpawnVerify === undefined
26
+ ? DEFAULT_GATES_CONFIG.preSpawnVerify
27
+ : record.preSpawnVerify;
28
+ if (!PRE_SPAWN_VERIFY_MODES.includes(preSpawnRaw)) {
29
+ throw new Error('gates.preSpawnVerify must be one of warn, fail, off');
30
+ }
31
+ const autoRetriesRaw = record.autoRetries === undefined ? DEFAULT_GATES_CONFIG.autoRetries : record.autoRetries;
32
+ if (typeof autoRetriesRaw !== 'number' ||
33
+ !Number.isInteger(autoRetriesRaw) ||
34
+ autoRetriesRaw < 0) {
35
+ throw new Error('gates.autoRetries must be a non-negative integer');
36
+ }
37
+ return {
38
+ changeVerifyAfterTask: value,
39
+ preSpawnVerify: preSpawnRaw,
40
+ autoRetries: autoRetriesRaw,
41
+ };
42
+ }
43
+ //# sourceMappingURL=config-gates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-gates.js","sourceRoot":"","sources":["../../../src/core/foundation/config-gates.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,qBAAqB,EAAE,IAAI;IAC3B,cAAc,EAAE,MAAM;IACtB,WAAW,EAAE,CAAC;CACf,CAAC;AAEF,MAAM,sBAAsB,GAAkC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAEtF;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,oBAAoB,CAAC;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,KAAK,GACT,MAAM,CAAC,qBAAqB,KAAK,SAAS;QACxC,CAAC,CAAC,oBAAoB,CAAC,qBAAqB;QAC5C,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC;IACnC,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,WAAW,GACf,MAAM,CAAC,cAAc,KAAK,SAAS;QACjC,CAAC,CAAC,oBAAoB,CAAC,cAAc;QACrC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IAC5B,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,WAAiC,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,cAAc,GAClB,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;IAC3F,IACE,OAAO,cAAc,KAAK,QAAQ;QAClC,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;QACjC,cAAc,GAAG,CAAC,EAClB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO;QACL,qBAAqB,EAAE,KAAK;QAC5B,cAAc,EAAE,WAAiC;QACjD,WAAW,EAAE,cAAc;KAC5B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,64 @@
1
+ import type { OsqConfig } from './config.js';
2
+ /**
3
+ * Optional Pi CLI execution settings. Every field is optional; omitting a field
4
+ * defers to Pi's own native configuration and defaults. Pi reads `AGENTS.md`
5
+ * itself, so osq writes no Pi files.
6
+ */
7
+ export interface PiConfig {
8
+ readonly bin?: string;
9
+ readonly provider?: string;
10
+ readonly model?: string;
11
+ readonly thinking?: string;
12
+ }
13
+ /** Validate optional Pi settings, rejecting blank or non-string values. */
14
+ export declare function validatePiConfig(pi: unknown): PiConfig;
15
+ /** Tested Pi release range. Pi ships often, so bumping this is a one-liner. */
16
+ export declare const PI_TESTED_RANGE = ">=0.87.0 <0.88.0";
17
+ /** Assessment of one `pi --version` line against the tested range. */
18
+ export interface PiVersionAssessment {
19
+ readonly version: string;
20
+ readonly tested: boolean;
21
+ readonly warning?: string;
22
+ }
23
+ /** Assess the first line of `pi --version` without failing outside the range. */
24
+ export declare function assessPiVersion(raw: string): PiVersionAssessment;
25
+ /** Outcome of `pi auth check --provider <name> --json`. */
26
+ export interface PiAuthResult {
27
+ readonly ok: boolean;
28
+ readonly status: string;
29
+ readonly provider: string;
30
+ readonly reason?: string;
31
+ }
32
+ /** Inputs a catalog entry's doctor `diagnose` hook receives after a probe. */
33
+ export interface HarnessDiagnoseContext {
34
+ readonly config: OsqConfig;
35
+ readonly projectRoot: string;
36
+ readonly version: string;
37
+ }
38
+ /** One extra doctor check contributed by a catalog entry. */
39
+ export interface HarnessDiagnosis {
40
+ readonly name: string;
41
+ readonly ok: boolean;
42
+ readonly warning?: boolean;
43
+ readonly message: string;
44
+ }
45
+ /** Resolve the Pi executable: explicit `pi.bin`, then `OSQ_PI_PATH`, then `pi`. */
46
+ export declare function resolvePiBinary(config?: {
47
+ readonly pi?: {
48
+ readonly bin?: string;
49
+ };
50
+ }): string;
51
+ /** Pi thinking level as effort, or null when unset. */
52
+ export declare function resolvePiEffort(config?: {
53
+ readonly pi?: {
54
+ readonly thinking?: string;
55
+ };
56
+ }): string | null;
57
+ /** Version warning plus provider credential check for `osq doctor`. */
58
+ export declare function diagnosePi(context: HarnessDiagnoseContext): Promise<readonly HarnessDiagnosis[]>;
59
+ /**
60
+ * Run `pi auth check --provider <name> --json`. Pi exits 0, 1, or 2 and always
61
+ * prints the status object, so a non-zero exit is data, not an error.
62
+ */
63
+ export declare function runPiAuthCheck(bin: string, projectRoot: string, provider: string, timeoutSeconds?: number): Promise<PiAuthResult>;
64
+ //# sourceMappingURL=config-pi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-pi.d.ts","sourceRoot":"","sources":["../../../src/core/foundation/config-pi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAID,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,QAAQ,CAkBtD;AAED,+EAA+E;AAC/E,eAAO,MAAM,eAAe,qBAAqB,CAAC;AAKlD,sEAAsE;AACtE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAYD,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAmBhE;AAED,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,8EAA8E;AAC9E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,CAM5F;AAED,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE;IACvC,QAAQ,CAAC,EAAE,CAAC,EAAE;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C,GAAG,MAAM,GAAG,IAAI,CAEhB;AAED,uEAAuE;AACvE,wBAAsB,UAAU,CAC9B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CA4BtC;AAmBD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,cAAc,SAAK,GAClB,OAAO,CAAC,YAAY,CAAC,CAoBvB"}
@@ -0,0 +1,131 @@
1
+ import { execFile } from 'node:child_process';
2
+ const PI_STRING_FIELDS = ['bin', 'provider', 'model', 'thinking'];
3
+ /** Validate optional Pi settings, rejecting blank or non-string values. */
4
+ export function validatePiConfig(pi) {
5
+ if (pi === undefined || pi === null) {
6
+ return {};
7
+ }
8
+ if (typeof pi !== 'object' || Array.isArray(pi)) {
9
+ throw new Error('pi configuration must be an object');
10
+ }
11
+ const record = pi;
12
+ const validated = {};
13
+ for (const field of PI_STRING_FIELDS) {
14
+ const value = record[field];
15
+ if (value === undefined)
16
+ continue;
17
+ if (typeof value !== 'string' || !value.trim()) {
18
+ throw new Error(`pi.${field} must be a non-empty string if provided`);
19
+ }
20
+ validated[field] = value.trim();
21
+ }
22
+ return validated;
23
+ }
24
+ /** Tested Pi release range. Pi ships often, so bumping this is a one-liner. */
25
+ export const PI_TESTED_RANGE = '>=0.87.0 <0.88.0';
26
+ const PI_TESTED_MIN = [0, 87, 0];
27
+ const PI_TESTED_MAX = [0, 88, 0];
28
+ function compareVersion(a, b) {
29
+ for (let i = 0; i < 3; i += 1) {
30
+ if (a[i] !== b[i])
31
+ return (a[i] ?? 0) - (b[i] ?? 0);
32
+ }
33
+ return 0;
34
+ }
35
+ /** Assess the first line of `pi --version` without failing outside the range. */
36
+ export function assessPiVersion(raw) {
37
+ const version = raw.trim().split('\n')[0]?.trim() ?? '';
38
+ const match = /(\d+)\.(\d+)\.(\d+)/.exec(version);
39
+ if (!match) {
40
+ return {
41
+ version,
42
+ tested: false,
43
+ warning: `Pi version "${version}" is outside the tested range ${PI_TESTED_RANGE}`,
44
+ };
45
+ }
46
+ const current = [Number(match[1]), Number(match[2]), Number(match[3])];
47
+ const tested = compareVersion(current, PI_TESTED_MIN) >= 0 && compareVersion(current, PI_TESTED_MAX) < 0;
48
+ if (tested)
49
+ return { version, tested };
50
+ return {
51
+ version,
52
+ tested,
53
+ warning: `Pi ${version} is outside the tested range ${PI_TESTED_RANGE}`,
54
+ };
55
+ }
56
+ /** Resolve the Pi executable: explicit `pi.bin`, then `OSQ_PI_PATH`, then `pi`. */
57
+ export function resolvePiBinary(config) {
58
+ const explicit = config?.pi?.bin?.trim();
59
+ if (explicit)
60
+ return explicit;
61
+ const fromEnv = process.env.OSQ_PI_PATH?.trim();
62
+ if (fromEnv)
63
+ return fromEnv;
64
+ return 'pi';
65
+ }
66
+ /** Pi thinking level as effort, or null when unset. */
67
+ export function resolvePiEffort(config) {
68
+ return config?.pi?.thinking?.trim() || null;
69
+ }
70
+ /** Version warning plus provider credential check for `osq doctor`. */
71
+ export async function diagnosePi(context) {
72
+ const assessment = assessPiVersion(context.version);
73
+ const version = {
74
+ name: 'harness-version',
75
+ ok: true,
76
+ ...(assessment.tested ? {} : { warning: true }),
77
+ message: assessment.tested
78
+ ? `Pi ${assessment.version} (tested ${PI_TESTED_RANGE})`
79
+ : (assessment.warning ?? `Pi ${assessment.version} is outside ${PI_TESTED_RANGE}`),
80
+ };
81
+ const provider = context.config.pi?.provider?.trim();
82
+ if (!provider)
83
+ return [version];
84
+ const auth = await runPiAuthCheck(resolvePiBinary(context.config), context.projectRoot, provider, context.config.timeouts?.harnessPreflightSeconds ?? 10);
85
+ const authCheck = auth.ok
86
+ ? { name: 'harness-auth', ok: true, message: `${auth.provider} credentials ready` }
87
+ : {
88
+ name: 'harness-auth',
89
+ ok: false,
90
+ message: `${auth.provider} credentials not ready: ${auth.reason ?? auth.status}`,
91
+ };
92
+ return [version, authCheck];
93
+ }
94
+ function parseJsonRecord(raw) {
95
+ if (!raw)
96
+ return undefined;
97
+ try {
98
+ const parsed = JSON.parse(raw);
99
+ return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
100
+ ? parsed
101
+ : undefined;
102
+ }
103
+ catch {
104
+ return undefined;
105
+ }
106
+ }
107
+ function stringField(record, key) {
108
+ const value = record?.[key];
109
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
110
+ }
111
+ /**
112
+ * Run `pi auth check --provider <name> --json`. Pi exits 0, 1, or 2 and always
113
+ * prints the status object, so a non-zero exit is data, not an error.
114
+ */
115
+ export function runPiAuthCheck(bin, projectRoot, provider, timeoutSeconds = 10) {
116
+ return new Promise((resolve) => {
117
+ execFile(bin, ['auth', 'check', '--provider', provider, '--json'], { cwd: projectRoot, timeout: timeoutSeconds * 1000 }, (err, stdout) => {
118
+ const parsed = parseJsonRecord((stdout || '').trim());
119
+ const status = stringField(parsed, 'status') ?? (err ? 'error' : 'unknown');
120
+ const reason = stringField(parsed, 'reason') ?? (err ? String(err.message) : undefined);
121
+ const resolvedProvider = stringField(parsed, 'provider') ?? provider;
122
+ resolve({
123
+ ok: status === 'ready',
124
+ status,
125
+ provider: resolvedProvider,
126
+ ...(reason ? { reason } : {}),
127
+ });
128
+ });
129
+ });
130
+ }
131
+ //# sourceMappingURL=config-pi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-pi.js","sourceRoot":"","sources":["../../../src/core/foundation/config-pi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Planning measurement settings. `idleGapMinutes` bounds the gap between two
3
+ * owned turns that still counts as active planning; `prices` optionally maps a
4
+ * model id to USD per million tokens so a slice can be priced when no harness
5
+ * reported a cost. osq ships no price table of its own.
6
+ */
7
+ export interface PlanningPrice {
8
+ readonly input: number;
9
+ readonly output: number;
10
+ readonly cacheRead: number;
11
+ readonly cacheWrite: number;
12
+ }
13
+ export interface PlanningConfig {
14
+ readonly idleGapMinutes: number;
15
+ readonly prices?: Readonly<Record<string, PlanningPrice>>;
16
+ }
17
+ export declare const DEFAULT_PLANNING_CONFIG: PlanningConfig;
18
+ /**
19
+ * Validate an optional `planning` block over the defaults. A partial block
20
+ * keeps the default idle gap; a present `prices` map must hold complete,
21
+ * finite, non-negative price entries. Every rejection names the offending key.
22
+ */
23
+ export declare function validatePlanningConfig(planning: unknown): PlanningConfig;
24
+ //# sourceMappingURL=config-planning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-planning.d.ts","sourceRoot":"","sources":["../../../src/core/foundation/config-planning.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;CAC3D;AAED,eAAO,MAAM,uBAAuB,EAAE,cAErC,CAAC;AAIF;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,GAAG,cAAc,CAmBxE"}
@@ -0,0 +1,60 @@
1
+ export const DEFAULT_PLANNING_CONFIG = {
2
+ idleGapMinutes: 10,
3
+ };
4
+ const PRICE_KINDS = ['input', 'output', 'cacheRead', 'cacheWrite'];
5
+ /**
6
+ * Validate an optional `planning` block over the defaults. A partial block
7
+ * keeps the default idle gap; a present `prices` map must hold complete,
8
+ * finite, non-negative price entries. Every rejection names the offending key.
9
+ */
10
+ export function validatePlanningConfig(planning) {
11
+ if (planning === undefined)
12
+ return DEFAULT_PLANNING_CONFIG;
13
+ if (typeof planning !== 'object' || planning === null || Array.isArray(planning)) {
14
+ throw new Error('planning configuration must be an object with idleGapMinutes');
15
+ }
16
+ const record = planning;
17
+ const idleGapMinutes = record.idleGapMinutes === undefined
18
+ ? DEFAULT_PLANNING_CONFIG.idleGapMinutes
19
+ : record.idleGapMinutes;
20
+ if (typeof idleGapMinutes !== 'number' ||
21
+ !Number.isFinite(idleGapMinutes) ||
22
+ idleGapMinutes <= 0) {
23
+ throw new Error('planning.idleGapMinutes must be a positive finite number');
24
+ }
25
+ const prices = validatePlanningPrices(record.prices);
26
+ return prices === undefined ? { idleGapMinutes } : { idleGapMinutes, prices };
27
+ }
28
+ function validatePlanningPrices(prices) {
29
+ if (prices === undefined)
30
+ return undefined;
31
+ if (typeof prices !== 'object' || prices === null || Array.isArray(prices)) {
32
+ throw new Error('planning.prices must be an object mapping model ids to prices');
33
+ }
34
+ const result = {};
35
+ for (const [model, entry] of Object.entries(prices)) {
36
+ result[model] = validatePlanningPrice(model, entry);
37
+ }
38
+ return result;
39
+ }
40
+ function validatePlanningPrice(model, entry) {
41
+ if (typeof entry !== 'object' || entry === null || Array.isArray(entry)) {
42
+ throw new Error(`planning.prices.${model} must be an object with input, output, cacheRead, cacheWrite`);
43
+ }
44
+ const record = entry;
45
+ const price = {
46
+ input: 0,
47
+ output: 0,
48
+ cacheRead: 0,
49
+ cacheWrite: 0,
50
+ };
51
+ for (const kind of PRICE_KINDS) {
52
+ const value = record[kind];
53
+ if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {
54
+ throw new Error(`planning.prices.${model}.${kind} must be a finite non-negative number`);
55
+ }
56
+ price[kind] = value;
57
+ }
58
+ return price;
59
+ }
60
+ //# sourceMappingURL=config-planning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-planning.js","sourceRoot":"","sources":["../../../src/core/foundation/config-planning.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,MAAM,uBAAuB,GAAmB;IACrD,cAAc,EAAE,EAAE;CACnB,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAU,CAAC;AAE5E;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAiB;IACtD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,uBAAuB,CAAC;IAC3D,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,MAAM,GAAG,QAAmC,CAAC;IACnD,MAAM,cAAc,GAClB,MAAM,CAAC,cAAc,KAAK,SAAS;QACjC,CAAC,CAAC,uBAAuB,CAAC,cAAc;QACxC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IAC5B,IACE,OAAO,cAAc,KAAK,QAAQ;QAClC,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;QAChC,cAAc,IAAI,CAAC,EACnB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrD,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;AAChF,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAAe;IAEf,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,MAAM,GAAkC,EAAE,CAAC;IACjD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAiC,CAAC,EAAE,CAAC;QAC/E,MAAM,CAAC,KAAK,CAAC,GAAG,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa,EAAE,KAAc;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CACb,mBAAmB,KAAK,8DAA8D,CACvF,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,KAAK,GAAiD;QAC1D,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE,CAAC;KACd,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,IAAI,IAAI,uCAAuC,CAAC,CAAC;QAC3F,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}