@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
@@ -0,0 +1,104 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { PACKAGE_ROOT } from '../foundation/package-root.js';
4
+ /**
5
+ * Static dashboard delivery. Every request resolves to one regular file below
6
+ * the package-root `ui/dist` directory; there is no SPA fallback beyond the
7
+ * index request, no traversal, and no directory listing.
8
+ */
9
+ const UI_SUBPATH = ['ui', 'dist'];
10
+ const INDEX_FILE = 'index.html';
11
+ /** Package-root `ui/dist` for both `src/core` under tsx and `dist/core` shipped. */
12
+ export function resolveUiDir() {
13
+ return path.join(PACKAGE_ROOT, ...UI_SUBPATH);
14
+ }
15
+ /** Self-only policy for the generated application plus same-origin SSE. */
16
+ export const UI_CONTENT_SECURITY_POLICY = [
17
+ "default-src 'self'",
18
+ "script-src 'self'",
19
+ "style-src 'self' 'unsafe-inline'",
20
+ "img-src 'self'",
21
+ "font-src 'self'",
22
+ "connect-src 'self'",
23
+ "object-src 'none'",
24
+ "base-uri 'self'",
25
+ "form-action 'none'",
26
+ "frame-ancestors 'none'",
27
+ ].join('; ');
28
+ const CONTENT_TYPES = {
29
+ '.html': 'text/html; charset=utf-8',
30
+ '.js': 'text/javascript; charset=utf-8',
31
+ '.mjs': 'text/javascript; charset=utf-8',
32
+ '.css': 'text/css; charset=utf-8',
33
+ '.json': 'application/json; charset=utf-8',
34
+ '.map': 'application/json; charset=utf-8',
35
+ '.svg': 'image/svg+xml',
36
+ '.png': 'image/png',
37
+ '.jpg': 'image/jpeg',
38
+ '.jpeg': 'image/jpeg',
39
+ '.gif': 'image/gif',
40
+ '.webp': 'image/webp',
41
+ '.avif': 'image/avif',
42
+ '.ico': 'image/x-icon',
43
+ '.woff': 'font/woff',
44
+ '.woff2': 'font/woff2',
45
+ '.txt': 'text/plain; charset=utf-8',
46
+ };
47
+ const REVALIDATE = 'no-cache';
48
+ const IMMUTABLE = 'public, max-age=31536000, immutable';
49
+ const FINGERPRINT = /-[A-Za-z0-9_]{8,}\./;
50
+ /** Fingerprinted build assets may be cached immutably; everything else revalidates. */
51
+ export function isFingerprintedAsset(fileName) {
52
+ return FINGERPRINT.test(fileName);
53
+ }
54
+ /** Decode a URL pathname once, rejecting malformed escapes and null bytes. */
55
+ function decodePathname(pathname) {
56
+ try {
57
+ const decoded = decodeURIComponent(pathname);
58
+ return decoded.includes('\0') ? null : decoded;
59
+ }
60
+ catch {
61
+ return null;
62
+ }
63
+ }
64
+ function isInside(root, target) {
65
+ const relative = path.relative(root, target);
66
+ return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));
67
+ }
68
+ /**
69
+ * Resolve `pathname` to one regular file inside `uiDir`. Returns null for
70
+ * malformed escapes, traversal, dot segments, directories, and absent files.
71
+ * `/` and `/index.html` both resolve to the application shell.
72
+ */
73
+ export async function resolveStaticFile(pathname, uiDir = resolveUiDir()) {
74
+ const decoded = decodePathname(pathname);
75
+ if (decoded === null)
76
+ return null;
77
+ const segments = decoded.split('/').filter((segment) => segment !== '');
78
+ if (segments.some((segment) => segment === '.' || segment === '..'))
79
+ return null;
80
+ const root = path.resolve(uiDir);
81
+ const target = segments.length === 0
82
+ ? path.join(root, INDEX_FILE)
83
+ : path.resolve(root, segments.join(path.sep));
84
+ if (!isInside(root, target))
85
+ return null;
86
+ const stat = await fs.lstat(target).catch(() => null);
87
+ if (!stat || !stat.isFile())
88
+ return null;
89
+ const body = await fs.readFile(target);
90
+ const extension = path.extname(target).toLowerCase();
91
+ const isHtml = extension === '.html';
92
+ const cacheControl = isHtml
93
+ ? REVALIDATE
94
+ : isFingerprintedAsset(path.basename(target))
95
+ ? IMMUTABLE
96
+ : REVALIDATE;
97
+ return {
98
+ body,
99
+ contentType: CONTENT_TYPES[extension] ?? 'application/octet-stream',
100
+ cacheControl,
101
+ isHtml,
102
+ };
103
+ }
104
+ //# sourceMappingURL=web-static.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-static.js","sourceRoot":"","sources":["../../../src/core/web/web-static.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import type { OsqConfig } from '../core/config.js';
2
- import type { Logger } from '../core/logger.js';
3
- import { EventStreamParser } from './stream.js';
4
- import { type HarnessAdapter, type SpawnResult, type SpawnTaskOptions, type ToolEventData } from './types.js';
1
+ import { type OsqConfig } from '../../core/foundation/config.js';
2
+ import type { Logger } from '../../core/foundation/logger.js';
3
+ import { EventStreamParser } from '../stream.js';
4
+ import { type HarnessAdapter, type InteractiveSessionOptions, type InteractiveUsage, type ReadInteractiveUsageOptions, type SpawnResult, type SpawnTaskOptions, type ToolEventData } from '../types.js';
5
5
  export declare function resolveAgyBinary(): Promise<string>;
6
6
  export declare function buildAgyPrompt(options: SpawnTaskOptions): string;
7
7
  export declare function buildAgyArgs(options: SpawnTaskOptions): string[];
@@ -15,17 +15,19 @@ export interface AgyStreamTokensData {
15
15
  }
16
16
  export declare function extractAgyTokens(event: unknown): AgyStreamTokensData | null;
17
17
  export declare function extractAgyToolEvent(event: unknown): ToolEventData | null;
18
- export declare function processAgyStdoutLine(line: string, specFolderPath: string, taskNumber: string, logger?: Logger): Promise<void>;
18
+ export declare function processAgyStdoutLine(line: string, specFolderPath: string, taskNumber: string, logger?: Logger, projectRoot?: string): Promise<void>;
19
19
  /**
20
20
  * Compatibility subclass retained for existing callers and tests; the buffering
21
21
  * and serialization logic lives entirely in the shared {@link EventStreamParser}.
22
22
  */
23
23
  export declare class AgyEventStreamParser extends EventStreamParser {
24
- constructor(specFolderPath: string, taskNumber: string, logger?: Logger);
24
+ constructor(specFolderPath: string, taskNumber: string, logger?: Logger, projectRoot?: string);
25
25
  }
26
26
  export declare class AgyAdapter implements HarnessAdapter {
27
27
  readonly name = "agy";
28
28
  setup(projectRoot: string, _config: OsqConfig): Promise<void>;
29
29
  spawn(options: SpawnTaskOptions): Promise<SpawnResult>;
30
+ spawnInteractive(options: InteractiveSessionOptions): Promise<number>;
31
+ readInteractiveUsage(_options: ReadInteractiveUsageOptions): Promise<InteractiveUsage>;
30
32
  }
31
33
  //# sourceMappingURL=agy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agy.d.ts","sourceRoot":"","sources":["../../../src/harness/agy/agy.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,iCAAiC,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAI9D,OAAO,EACL,iBAAiB,EAIlB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EAErB,KAAK,2BAA2B,EAChC,KAAK,WAAW,EAChB,KAAK,gBAAgB,EAErB,KAAK,aAAa,EAEnB,MAAM,aAAa,CAAC;AAErB,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAgBxD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAEhE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,EAAE,CA2BhE;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAKD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAkC3E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAqDxE;AAyBD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CA0Ef;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,iBAAiB;gBAC7C,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;CAG9F;AAED,qBAAa,UAAW,YAAW,cAAc;IAC/C,QAAQ,CAAC,IAAI,SAAS;IAEhB,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAqCtD,gBAAgB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BrE,oBAAoB,CAAC,QAAQ,EAAE,2BAA2B,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAI7F"}
@@ -1,9 +1,13 @@
1
+ import { spawn } from 'node:child_process';
1
2
  import fs from 'node:fs/promises';
2
3
  import os from 'node:os';
3
4
  import path from 'node:path';
4
- import { spawnWithTimeout } from './process.js';
5
- import { EventStreamParser, asRecord, firstNonEmptyString, resolveEventTimestamp, } from './stream.js';
6
- import { appendHarnessEvent, } from './types.js';
5
+ import { loadConfig } from '../../core/foundation/config.js';
6
+ import { relativizeToolSummary } from '../../core/run/summary.js';
7
+ import { spawnWithTimeout } from '../process.js';
8
+ import { buildExecutorPrompt } from '../prompt.js';
9
+ import { EventStreamParser, asRecord, firstNonEmptyString, resolveEventTimestamp, } from '../stream.js';
10
+ import { NULL_INTERACTIVE_USAGE, appendHarnessEvent, } from '../types.js';
7
11
  export async function resolveAgyBinary() {
8
12
  if (process.env.AGY_PATH) {
9
13
  return process.env.AGY_PATH;
@@ -20,28 +24,7 @@ export async function resolveAgyBinary() {
20
24
  return 'agy';
21
25
  }
22
26
  export function buildAgyPrompt(options) {
23
- const { projectRoot, specFolderPath, taskNumber, taskTitle, scope, entry, verifyCommand } = options;
24
- const taskRelPath = path.relative(projectRoot, path.join(specFolderPath, 'tasks', `${taskNumber}.md`));
25
- const specRelPath = path.relative(projectRoot, path.join(specFolderPath, 'spec.md'));
26
- const resultRelPath = path.relative(projectRoot, path.join(specFolderPath, '.run', 'results', `${taskNumber}.md`));
27
- return [
28
- 'You are a coding agent working autonomously on an osq task. Follow AGENTS.md strictly.',
29
- `Task File: ${taskRelPath}`,
30
- `Parent Spec: ${specRelPath}`,
31
- `Task Title: ${taskTitle}`,
32
- `Scope: ${scope.join(', ')}`,
33
- `Entry: ${entry.join(', ')}`,
34
- `Verify Command: ${verifyCommand}`,
35
- '',
36
- 'Rules:',
37
- `1. Read ${taskRelPath}, ${specRelPath}, and features docs referenced in ${specRelPath}.`,
38
- '2. Write tests for each acceptance line before implementing.',
39
- '3. Keep all edits strictly inside scope.',
40
- `4. Verify your work by running: ${verifyCommand}`,
41
- `5. CRITICAL: Before exiting, you MUST write ${resultRelPath} documenting: changed, deviated, drift against features/, missing context, and next steps.`,
42
- `6. Do not modify tasks.md, spec.md, or any file outside your scope and ${resultRelPath}.`,
43
- `7. When done, write ${resultRelPath} and exit cleanly.`,
44
- ].join('\n');
27
+ return buildExecutorPrompt(options);
45
28
  }
46
29
  export function buildAgyArgs(options) {
47
30
  const { config } = options;
@@ -130,17 +113,20 @@ export function extractAgyToolEvent(event) {
130
113
  }
131
114
  /**
132
115
  * Single code path for tool observation: the events.jsonl entry and its verbose
133
- * stderr log line are always emitted together by the shared stdout handler.
116
+ * stderr log line are always emitted together. The summary is relativized to the
117
+ * project root before it is written, so `events.jsonl` never carries absolute
118
+ * workspace paths.
134
119
  */
135
- async function recordAgyToolEvent(specFolderPath, taskNumber, toolEvent, timestamp, logger) {
120
+ async function emitObservedToolEvent(specFolderPath, taskNumber, toolEvent, timestamp, projectRoot, logger) {
121
+ const summary = relativizeToolSummary(toolEvent.summary, projectRoot);
136
122
  await appendHarnessEvent(specFolderPath, taskNumber, {
137
123
  type: 'tool',
138
124
  timestamp,
139
- data: { tool: toolEvent.tool, summary: toolEvent.summary },
125
+ data: { tool: toolEvent.tool, summary },
140
126
  });
141
- logger?.verbose(`[tool] ${toolEvent.tool}: ${toolEvent.summary}`);
127
+ logger?.verbose(`[tool] ${toolEvent.tool}: ${summary}`);
142
128
  }
143
- export async function processAgyStdoutLine(line, specFolderPath, taskNumber, logger) {
129
+ export async function processAgyStdoutLine(line, specFolderPath, taskNumber, logger, projectRoot) {
144
130
  const trimmed = line.trim();
145
131
  if (!trimmed) {
146
132
  return;
@@ -162,7 +148,7 @@ export async function processAgyStdoutLine(line, specFolderPath, taskNumber, log
162
148
  }
163
149
  const toolEvent = extractAgyToolEvent(eventObj);
164
150
  if (toolEvent) {
165
- await recordAgyToolEvent(specFolderPath, taskNumber, toolEvent, resolveEventTimestamp(eventObj), logger);
151
+ await emitObservedToolEvent(specFolderPath, taskNumber, toolEvent, resolveEventTimestamp(eventObj), projectRoot, logger);
166
152
  return;
167
153
  }
168
154
  // The result payload carries the completed assistant response. Partial
@@ -207,8 +193,8 @@ export async function processAgyStdoutLine(line, specFolderPath, taskNumber, log
207
193
  * and serialization logic lives entirely in the shared {@link EventStreamParser}.
208
194
  */
209
195
  export class AgyEventStreamParser extends EventStreamParser {
210
- constructor(specFolderPath, taskNumber, logger) {
211
- super((line) => processAgyStdoutLine(line, specFolderPath, taskNumber, logger));
196
+ constructor(specFolderPath, taskNumber, logger, projectRoot) {
197
+ super((line) => processAgyStdoutLine(line, specFolderPath, taskNumber, logger, projectRoot));
212
198
  }
213
199
  }
214
200
  export class AgyAdapter {
@@ -221,7 +207,7 @@ export class AgyAdapter {
221
207
  const { projectRoot, specFolderPath, taskNumber, timeoutSeconds = 1800 } = options;
222
208
  const agyBin = await resolveAgyBinary();
223
209
  const args = buildAgyArgs(options);
224
- const streamParser = new EventStreamParser((line) => processAgyStdoutLine(line, specFolderPath, taskNumber, options.logger));
210
+ const streamParser = new EventStreamParser((line) => processAgyStdoutLine(line, specFolderPath, taskNumber, options.logger, projectRoot));
225
211
  const result = await spawnWithTimeout({
226
212
  command: agyBin,
227
213
  args,
@@ -247,5 +233,34 @@ export class AgyAdapter {
247
233
  elapsedMs: result.elapsedMs,
248
234
  };
249
235
  }
236
+ async spawnInteractive(options) {
237
+ const { prompt, cwd, model, agent } = options;
238
+ const config = await loadConfig(cwd).catch(() => undefined);
239
+ const agyBin = await resolveAgyBinary();
240
+ const args = ['-i', prompt];
241
+ if (model) {
242
+ args.push('--model', model);
243
+ }
244
+ if (agent) {
245
+ args.push('--agent', agent);
246
+ }
247
+ const dangerouslySkipPermissions = config?.agy?.dangerouslySkipPermissions ?? true;
248
+ if (dangerouslySkipPermissions) {
249
+ args.push('--dangerously-skip-permissions');
250
+ }
251
+ const child = spawn(agyBin, args, {
252
+ cwd,
253
+ env: process.env,
254
+ stdio: 'inherit',
255
+ });
256
+ return new Promise((resolve) => {
257
+ child.on('error', () => resolve(1));
258
+ child.on('close', (code) => resolve(code ?? 1));
259
+ });
260
+ }
261
+ async readInteractiveUsage(_options) {
262
+ // AGY has no confirmed local usage artifact in scope; timing is still exact.
263
+ return NULL_INTERACTIVE_USAGE;
264
+ }
250
265
  }
251
266
  //# sourceMappingURL=agy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agy.js","sourceRoot":"","sources":["../../../src/harness/agy/agy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { PlanningTurn } from '../../core/report/planning-slice.js';
2
+ /** Assistant tool names whose successful call counts as one planning edit. */
3
+ export declare const EDIT_TOOLS: Set<string>;
4
+ /**
5
+ * One Claude model response. `messageId` stays non-enumerable: it carries the
6
+ * native identity used when transcripts and their subagent files are merged,
7
+ * without changing the serialized `PlanningTurn` shape.
8
+ */
9
+ export interface ClaudeTurn extends PlanningTurn {
10
+ readonly messageId: string | null;
11
+ }
12
+ /** Session metadata and one turn per distinct native message of a transcript. */
13
+ export interface ClaudeTurns {
14
+ readonly sessionId: string | null;
15
+ readonly cwd: string | null;
16
+ readonly harnessVersion: string | null;
17
+ readonly sessionCost: number | null;
18
+ readonly turns: readonly ClaudeTurn[];
19
+ }
20
+ export declare function asRecord(value: unknown): Record<string, unknown> | undefined;
21
+ export declare function text(value: unknown): string | null;
22
+ export declare function validIso(value: unknown): string | null;
23
+ export declare function finiteNonNegative(value: unknown): number | null;
24
+ export declare function contentBlocks(record: Record<string, unknown>): Record<string, unknown>[];
25
+ /** JSONL records with malformed lines ignored; no content is retained. */
26
+ export declare function parseRecords(content: string): Record<string, unknown>[];
27
+ /** Group assistant records into one turn per distinct `message.id`. */
28
+ export declare function parseClaudeTurns(content: string): ClaudeTurns;
29
+ //# sourceMappingURL=claude-turns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-turns.d.ts","sourceRoot":"","sources":["../../../src/harness/claude/claude-turns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAExE,8EAA8E;AAC9E,eAAO,MAAM,UAAU,aAA6C,CAAC;AAErE;;;;GAIG;AACH,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;CACvC;AAkBD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAI5E;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAGtD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAE/D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAMxF;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAYvE;AAmED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAmD7D"}
@@ -0,0 +1,162 @@
1
+ /** Assistant tool names whose successful call counts as one planning edit. */
2
+ export const EDIT_TOOLS = new Set(['Write', 'Edit', 'NotebookEdit']);
3
+ export function asRecord(value) {
4
+ return value && typeof value === 'object' && !Array.isArray(value)
5
+ ? value
6
+ : undefined;
7
+ }
8
+ export function text(value) {
9
+ return typeof value === 'string' && value.length > 0 ? value : null;
10
+ }
11
+ export function validIso(value) {
12
+ if (typeof value !== 'string' || value.length === 0)
13
+ return null;
14
+ return Number.isFinite(Date.parse(value)) ? value : null;
15
+ }
16
+ export function finiteNonNegative(value) {
17
+ return typeof value === 'number' && Number.isFinite(value) && value >= 0 ? value : null;
18
+ }
19
+ export function contentBlocks(record) {
20
+ const message = asRecord(record.message);
21
+ if (!Array.isArray(message?.content))
22
+ return [];
23
+ return message.content
24
+ .map((block) => asRecord(block))
25
+ .filter((block) => block !== undefined);
26
+ }
27
+ /** JSONL records with malformed lines ignored; no content is retained. */
28
+ export function parseRecords(content) {
29
+ const records = [];
30
+ for (const line of content.split('\n')) {
31
+ if (!line.trim())
32
+ continue;
33
+ try {
34
+ const parsed = asRecord(JSON.parse(line));
35
+ if (parsed)
36
+ records.push(parsed);
37
+ }
38
+ catch {
39
+ // Malformed lines are ignored; the affected turn keeps null usage.
40
+ }
41
+ }
42
+ return records;
43
+ }
44
+ function collectErrored(records) {
45
+ const errored = new Set();
46
+ for (const record of records) {
47
+ for (const block of contentBlocks(record)) {
48
+ if (block.type === 'tool_result' && block.is_error === true) {
49
+ const id = text(block.tool_use_id);
50
+ if (id)
51
+ errored.add(id);
52
+ }
53
+ }
54
+ }
55
+ return errored;
56
+ }
57
+ function editPath(block) {
58
+ const name = block.name;
59
+ if (typeof name !== 'string' || !EDIT_TOOLS.has(name))
60
+ return null;
61
+ const input = asRecord(block.input);
62
+ return name === 'NotebookEdit' ? text(input?.notebook_path) : text(input?.file_path);
63
+ }
64
+ function numberField(record, key) {
65
+ return record ? finiteNonNegative(record[key]) : null;
66
+ }
67
+ function hasUsage(message) {
68
+ return asRecord(message.usage) !== undefined;
69
+ }
70
+ function parseUsage(message) {
71
+ const usage = asRecord(message.usage);
72
+ const details = asRecord(usage?.output_tokens_details);
73
+ return {
74
+ input: numberField(usage, 'input_tokens'),
75
+ output: numberField(usage, 'output_tokens'),
76
+ cacheRead: numberField(usage, 'cache_read_input_tokens'),
77
+ cacheWrite: numberField(usage, 'cache_creation_input_tokens'),
78
+ reasoning: numberField(details, 'thinking_tokens'),
79
+ };
80
+ }
81
+ const EMPTY_USAGE = {
82
+ input: null,
83
+ output: null,
84
+ cacheRead: null,
85
+ cacheWrite: null,
86
+ reasoning: null,
87
+ };
88
+ function makeTurn(draft) {
89
+ const usage = draft.usage ?? EMPTY_USAGE;
90
+ const turn = {
91
+ timestamp: draft.earliest,
92
+ model: draft.model,
93
+ inputTokens: usage.input,
94
+ outputTokens: usage.output,
95
+ cacheReadTokens: usage.cacheRead,
96
+ cacheWriteTokens: usage.cacheWrite,
97
+ reasoningTokens: usage.reasoning,
98
+ cost: null,
99
+ edits: draft.edits,
100
+ };
101
+ Object.defineProperty(turn, 'messageId', { value: draft.id, enumerable: false });
102
+ return turn;
103
+ }
104
+ /** Group assistant records into one turn per distinct `message.id`. */
105
+ export function parseClaudeTurns(content) {
106
+ const records = parseRecords(content);
107
+ const errored = collectErrored(records);
108
+ const drafts = new Map();
109
+ let anonymous = 0;
110
+ let sessionId = null;
111
+ let cwd = null;
112
+ let harnessVersion = null;
113
+ let sessionCost = null;
114
+ for (const record of records) {
115
+ sessionId = sessionId ?? text(record.sessionId);
116
+ cwd = cwd ?? text(record.cwd);
117
+ harnessVersion = harnessVersion ?? text(record.version);
118
+ if (record.type === 'cost-state') {
119
+ sessionCost = finiteNonNegative(record.totalCostUSD);
120
+ continue;
121
+ }
122
+ const message = asRecord(record.message);
123
+ const isAssistant = record.type === 'assistant' || message?.role === 'assistant';
124
+ const timestamp = validIso(record.timestamp);
125
+ if (!isAssistant || !timestamp)
126
+ continue;
127
+ const id = message ? text(message.id) : null;
128
+ const key = id ?? `\u0000anonymous:${anonymous++}`;
129
+ const draft = drafts.get(key) ?? {
130
+ id,
131
+ earliest: timestamp,
132
+ model: null,
133
+ usage: null,
134
+ edits: [],
135
+ };
136
+ if (timestamp < draft.earliest)
137
+ draft.earliest = timestamp;
138
+ if (draft.model === null && message)
139
+ draft.model = text(message.model);
140
+ if (draft.usage === null && message && hasUsage(message))
141
+ draft.usage = parseUsage(message);
142
+ drafts.set(key, draft);
143
+ for (const block of contentBlocks(record)) {
144
+ if (block.type !== 'tool_use')
145
+ continue;
146
+ const toolId = text(block.id);
147
+ if (toolId && errored.has(toolId))
148
+ continue;
149
+ const target = editPath(block);
150
+ if (target)
151
+ draft.edits.push(target);
152
+ }
153
+ }
154
+ return {
155
+ sessionId,
156
+ cwd,
157
+ harnessVersion,
158
+ sessionCost,
159
+ turns: [...drafts.values()].map(makeTurn),
160
+ };
161
+ }
162
+ //# sourceMappingURL=claude-turns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-turns.js","sourceRoot":"","sources":["../../../src/harness/claude/claude-turns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ObservedPlanningSession } from '../../core/report/planning-observed.js';
2
+ /** Resolve the Claude session store: explicit osq override, config dir, or home. */
3
+ export declare function resolveClaudeProjectsDir(env?: NodeJS.ProcessEnv, homeDir?: string): string;
4
+ /**
5
+ * Parse one Claude session JSONL body. Each assistant message becomes one turn
6
+ * carrying its own usage. A session without any edited path yields null; the
7
+ * observer derives no session-level usage, edits, or start and end times.
8
+ */
9
+ export declare function parseClaudeSession(content: string): ObservedPlanningSession | null;
10
+ /** Recursively read and merge Claude sessions by native session id. */
11
+ export declare function readClaudePlanningSessions(projectsDir?: string): Promise<readonly ObservedPlanningSession[]>;
12
+ //# sourceMappingURL=claude-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-usage.d.ts","sourceRoot":"","sources":["../../../src/harness/claude/claude-usage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAItF,oFAAoF;AACpF,wBAAgB,wBAAwB,CACtC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,OAAO,GAAE,MAAqB,GAC7B,MAAM,CAMR;AAQD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI,CAalF;AAmGD,uEAAuE;AACvE,wBAAsB,0BAA0B,CAC9C,WAAW,GAAE,MAAmC,GAC/C,OAAO,CAAC,SAAS,uBAAuB,EAAE,CAAC,CAe7C"}