@repo-os/repoos 0.5.67 → 0.5.69

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 (368) hide show
  1. package/dist/.build-info.json +2 -2
  2. package/dist/.build-stamp.json +1 -1
  3. package/dist/cli/api-route-parity.js +8 -0
  4. package/dist/cli/help.js +36 -5
  5. package/dist/cli/index.js +33 -1
  6. package/dist/cli/repoos-api.d.ts +4 -0
  7. package/dist/cli/repoos-api.js +15 -0
  8. package/dist/cli/sse-client.d.ts +5 -0
  9. package/dist/cli/sse-client.js +42 -0
  10. package/dist/cli/task-flags.d.ts +23 -0
  11. package/dist/cli/task-flags.js +79 -0
  12. package/dist/commands/check.d.ts +12 -9
  13. package/dist/commands/check.js +44 -21
  14. package/dist/commands/control-api.d.ts +2 -0
  15. package/dist/commands/control-api.js +139 -3
  16. package/dist/commands/driver.d.ts +1 -0
  17. package/dist/commands/driver.js +178 -0
  18. package/dist/commands/init.js +22 -3
  19. package/dist/commands/shot.js +17 -11
  20. package/dist/commands/status.d.ts +46 -0
  21. package/dist/commands/status.js +109 -10
  22. package/dist/commands/stories.d.ts +14 -0
  23. package/dist/commands/stories.js +294 -0
  24. package/dist/commands/tasks.d.ts +20 -6
  25. package/dist/commands/tasks.js +51 -46
  26. package/dist/commands/ui-contrast-audit.js +55 -2
  27. package/dist/commands/watch.d.ts +16 -0
  28. package/dist/commands/watch.js +109 -0
  29. package/dist/core/attention.d.ts +17 -1
  30. package/dist/core/attention.js +100 -0
  31. package/dist/core/build.d.ts +2 -0
  32. package/dist/core/build.js +7 -3
  33. package/dist/core/check-failure-summary.d.ts +15 -1
  34. package/dist/core/check-failure-summary.js +88 -1
  35. package/dist/core/check-results.js +4 -1
  36. package/dist/core/check-slowness.d.ts +160 -0
  37. package/dist/core/check-slowness.js +203 -0
  38. package/dist/core/check-store.d.ts +1 -1
  39. package/dist/core/close-out-gate.d.ts +97 -0
  40. package/dist/core/close-out-gate.js +132 -0
  41. package/dist/core/config.d.ts +26 -0
  42. package/dist/core/config.js +168 -17
  43. package/dist/core/decision-digest.d.ts +102 -0
  44. package/dist/core/decision-digest.js +416 -0
  45. package/dist/core/dev-targets.d.ts +25 -0
  46. package/dist/core/dev-targets.js +155 -0
  47. package/dist/core/doctor.js +48 -1
  48. package/dist/core/driver-brief.d.ts +203 -0
  49. package/dist/core/driver-brief.js +294 -0
  50. package/dist/core/git.d.ts +20 -4
  51. package/dist/core/git.js +40 -29
  52. package/dist/core/models.js +7 -1
  53. package/dist/core/page-browser-gate.d.ts +1 -1
  54. package/dist/core/project-docs-agents-paths.test.d.ts +1 -0
  55. package/dist/core/project-docs-agents-paths.test.js +22 -0
  56. package/dist/core/project-docs.d.ts +5 -0
  57. package/dist/core/project-docs.js +37 -0
  58. package/dist/core/record-creator.d.ts +13 -0
  59. package/dist/core/record-creator.js +45 -0
  60. package/dist/core/record-creator.test.d.ts +1 -0
  61. package/dist/core/record-creator.test.js +74 -0
  62. package/dist/core/remote-pool-queue.js +10 -4
  63. package/dist/core/repoos.d.ts +4 -0
  64. package/dist/core/repoos.js +5 -0
  65. package/dist/core/review-verdict.d.ts +5 -0
  66. package/dist/core/review-verdict.js +28 -0
  67. package/dist/core/review-verdict.test.js +8 -1
  68. package/dist/core/review-verification.d.ts +107 -0
  69. package/dist/core/review-verification.js +281 -0
  70. package/dist/core/review-verification.test.d.ts +1 -0
  71. package/dist/core/review-verification.test.js +148 -0
  72. package/dist/core/service-manager.d.ts +9 -0
  73. package/dist/core/service-manager.js +11 -0
  74. package/dist/core/shot-assertions.d.ts +50 -0
  75. package/dist/core/shot-assertions.js +109 -0
  76. package/dist/core/shot-fixtures.d.ts +14 -0
  77. package/dist/core/shot-fixtures.js +24 -0
  78. package/dist/core/shot-page.d.ts +16 -1
  79. package/dist/core/shot-page.js +96 -9
  80. package/dist/core/shot-plan.d.ts +61 -0
  81. package/dist/core/shot-plan.js +126 -3
  82. package/dist/core/story-definition-files.js +1 -1
  83. package/dist/core/task-activity-strip.test.d.ts +1 -0
  84. package/dist/core/task-activity-strip.test.js +25 -0
  85. package/dist/core/task-body-normalize.test.d.ts +1 -0
  86. package/dist/core/task-body-normalize.test.js +72 -0
  87. package/dist/core/task.d.ts +13 -0
  88. package/dist/core/task.js +106 -1
  89. package/dist/core/types.d.ts +78 -0
  90. package/dist/core/types.js +2 -0
  91. package/dist/server/agents.d.ts +25 -0
  92. package/dist/server/agents.js +154 -7
  93. package/dist/server/approval-policy.js +4 -0
  94. package/dist/server/attention-feed.d.ts +52 -1
  95. package/dist/server/attention-feed.js +121 -1
  96. package/dist/server/board-events.d.ts +26 -0
  97. package/dist/server/board-events.js +146 -0
  98. package/dist/server/conflict-resolution.d.ts +364 -0
  99. package/dist/server/conflict-resolution.js +569 -0
  100. package/dist/server/cto-actions.d.ts +1 -0
  101. package/dist/server/cto-actions.js +1 -1
  102. package/dist/server/cto-heartbeat.d.ts +14 -0
  103. package/dist/server/cto-heartbeat.js +24 -0
  104. package/dist/server/cto-monitor.d.ts +3 -0
  105. package/dist/server/cto-monitor.js +6 -0
  106. package/dist/server/cto.d.ts +7 -2
  107. package/dist/server/cto.js +27 -37
  108. package/dist/server/debug-tldr.d.ts +1 -1
  109. package/dist/server/debug-tldr.js +2 -1
  110. package/dist/server/decision-digest.d.ts +16 -0
  111. package/dist/server/decision-digest.js +94 -0
  112. package/dist/server/dev.d.ts +131 -0
  113. package/dist/server/dev.js +621 -0
  114. package/dist/server/done.d.ts +7 -1
  115. package/dist/server/driver-brief.d.ts +18 -0
  116. package/dist/server/driver-brief.js +292 -0
  117. package/dist/server/handoff.d.ts +4 -12
  118. package/dist/server/handoff.js +43 -9
  119. package/dist/server/integration-job.d.ts +41 -6
  120. package/dist/server/integration-job.js +78 -3
  121. package/dist/server/integration-orchestrator.d.ts +146 -2
  122. package/dist/server/integration-orchestrator.js +955 -150
  123. package/dist/server/integration-status.d.ts +7 -2
  124. package/dist/server/integration-status.js +18 -4
  125. package/dist/server/live-index.d.ts +20 -0
  126. package/dist/server/live-index.js +22 -1
  127. package/dist/server/merge-conflict.d.ts +9 -2
  128. package/dist/server/merge-conflict.js +10 -4
  129. package/dist/server/pre-review-remote-gate.d.ts +6 -0
  130. package/dist/server/pre-review-remote-gate.js +6 -0
  131. package/dist/server/preview-verification-slot.d.ts +11 -0
  132. package/dist/server/preview-verification-slot.js +34 -0
  133. package/dist/server/release.d.ts +7 -0
  134. package/dist/server/release.js +16 -0
  135. package/dist/server/remote-validation.d.ts +148 -7
  136. package/dist/server/remote-validation.js +602 -107
  137. package/dist/server/request-close-out.js +8 -0
  138. package/dist/server/review-verification-gather.d.ts +6 -0
  139. package/dist/server/review-verification-gather.js +89 -0
  140. package/dist/server/review.d.ts +1 -1
  141. package/dist/server/review.js +58 -11
  142. package/dist/server/routes/attention.js +9 -0
  143. package/dist/server/routes/config.js +117 -1
  144. package/dist/server/routes/decisions.d.ts +3 -0
  145. package/dist/server/routes/decisions.js +14 -0
  146. package/dist/server/routes/dev.d.ts +19 -0
  147. package/dist/server/routes/dev.js +60 -0
  148. package/dist/server/routes/driver.d.ts +3 -0
  149. package/dist/server/routes/driver.js +15 -0
  150. package/dist/server/routes/helpers.d.ts +1 -0
  151. package/dist/server/routes/index.d.ts +3 -0
  152. package/dist/server/routes/index.js +3 -0
  153. package/dist/server/routes/info.js +7 -0
  154. package/dist/server/routes/stories.d.ts +30 -1
  155. package/dist/server/routes/stories.js +112 -9
  156. package/dist/server/routes/tasks.d.ts +2 -0
  157. package/dist/server/routes/tasks.js +104 -18
  158. package/dist/server/routes/types.d.ts +26 -0
  159. package/dist/server/server.js +180 -15
  160. package/dist/server/shot-capture.d.ts +8 -21
  161. package/dist/server/shot-capture.js +66 -9
  162. package/dist/server/shots.d.ts +16 -0
  163. package/dist/server/shots.js +6 -0
  164. package/dist/server/task-body-migration.d.ts +18 -0
  165. package/dist/server/task-body-migration.js +152 -0
  166. package/dist/server/task-check.d.ts +6 -0
  167. package/dist/server/task-check.js +14 -0
  168. package/dist/server/task-watchdog.d.ts +9 -0
  169. package/dist/server/task-watchdog.js +8 -0
  170. package/dist/server/ui-handoff-gate.d.ts +100 -2
  171. package/dist/server/ui-handoff-gate.js +375 -90
  172. package/dist/server/write.d.ts +7 -0
  173. package/dist/server/write.js +6 -2
  174. package/dist/ui/assets/{AgentModelModal-DhY5NOZ1.js → AgentModelModal-C8GhSyIa.js} +1 -1
  175. package/dist/ui/assets/AgentsView-0r3QjL0C.css +1 -0
  176. package/dist/ui/assets/AgentsView-ChOMboOE.js +1 -0
  177. package/dist/ui/assets/ChecksView-CU7ikl8l.js +0 -0
  178. package/dist/ui/assets/ChecksView-CVnvMKM-.css +1 -0
  179. package/dist/ui/assets/ConfirmDialog-CcPmuMHQ.js +1 -0
  180. package/dist/ui/assets/ContextView-Dx2siGFv.js +4 -0
  181. package/dist/ui/assets/DashboardView-DP81OKcA.js +1 -0
  182. package/dist/ui/assets/DashboardView-DtXleA5o.css +1 -0
  183. package/dist/ui/assets/{DeleteConfirmDialog-B7_fR8N6.js → DeleteConfirmDialog-BLHJs3Sg.js} +1 -1
  184. package/dist/ui/assets/{DeploymentsView-oXkw2BSL.js → DeploymentsView-CJBx2mcp.js} +1 -1
  185. package/dist/ui/assets/DevView-CoL2KIaZ.css +1 -0
  186. package/dist/ui/assets/DevView-omNNz-ZQ.js +2 -0
  187. package/dist/ui/assets/{DiffView-qdIZFGbS.js → DiffView-CKMjBvIa.js} +1 -1
  188. package/dist/ui/assets/{FailedTestsList-92u0pppH.js → FailedTestsList-3_oexlME.js} +1 -1
  189. package/dist/ui/assets/InputsView-B79I4jwu.js +1 -0
  190. package/dist/ui/assets/LoginView-B2WAQcq0.js +1 -0
  191. package/dist/ui/assets/ReleasesView-BCE0uCPM.css +1 -0
  192. package/dist/ui/assets/ReleasesView-D3qIgMaL.js +5 -0
  193. package/dist/ui/assets/SearchOverlay-0rM6zfNm.js +1 -0
  194. package/dist/ui/assets/SettingsView-CEWHEE4r.css +1 -0
  195. package/dist/ui/assets/SettingsView-gqVC3E7s.js +4 -0
  196. package/dist/ui/assets/StoriesView-BazXnyDz.js +1 -0
  197. package/dist/ui/assets/{VoiceDictate-sbY2kf3g.js → VoiceDictate-JU6yFzDl.js} +2 -2
  198. package/dist/ui/assets/WorkView-B4O1dgd8.css +1 -0
  199. package/dist/ui/assets/WorkView-qq7xNw0b.js +2 -0
  200. package/dist/ui/assets/abnfDiagram-VCTEODGH-KzOgBc6g.js +1 -0
  201. package/dist/ui/assets/architecture-7GRP2DOG-BHZiePHg.js +1 -0
  202. package/dist/ui/assets/architectureDiagram-5GKGNRK7-CP4J_21k.js +36 -0
  203. package/dist/ui/assets/auth-DOfKWRWn.js +1 -0
  204. package/dist/ui/assets/{blockDiagram-I7D4REHJ-BMQZCcl4.js → blockDiagram-I7D4REHJ-B5q-JPzd.js} +1 -1
  205. package/dist/ui/assets/{button-uIODk23A.js → button-Cg7Fwvfz.js} +1 -1
  206. package/dist/ui/assets/{c4Diagram-7LVT6UL2-CYARlZF5.js → c4Diagram-7LVT6UL2-C8gg_KAI.js} +1 -1
  207. package/dist/ui/assets/card-h3OmE2_z.js +1 -0
  208. package/dist/ui/assets/channel-CKK9ZV4r.js +1 -0
  209. package/dist/ui/assets/{checkbox-EUK8itx1.js → checkbox-CJdatFyS.js} +1 -1
  210. package/dist/ui/assets/chunk-2E4U76K2-Bgho8hyQ.js +2 -0
  211. package/dist/ui/assets/chunk-2ZTRR5NV-Cr-_ry_6.js +2 -0
  212. package/dist/ui/assets/chunk-3Z5EZCMW-BBL48ahF.js +1 -0
  213. package/dist/ui/assets/{chunk-4HAMMTFA-C-0fE7Hb.js → chunk-4HAMMTFA-DQYpRm2O.js} +1 -1
  214. package/dist/ui/assets/chunk-5V3GS4D5-B6UpbGCn.js +1 -0
  215. package/dist/ui/assets/chunk-6AZGARVD-CYyHPsEW.js +1 -0
  216. package/dist/ui/assets/chunk-6EIED4P4-DLcrKSZa.js +1 -0
  217. package/dist/ui/assets/chunk-6K3QC6MW-8lwas69x.js +1 -0
  218. package/dist/ui/assets/chunk-6TQVIW2G-kn-138pS.js +1 -0
  219. package/dist/ui/assets/chunk-747NJXEK-ZQ1az0_F.js +2 -0
  220. package/dist/ui/assets/{chunk-75Z2AOVW-9h5YgMdt.js → chunk-75Z2AOVW-DlvTKtcP.js} +1 -1
  221. package/dist/ui/assets/chunk-CLGD4ZFX-xhgIfmhG.js +1 -0
  222. package/dist/ui/assets/{chunk-DU6HZSFF-9BISDKkf.js → chunk-DU6HZSFF-Dkcc-d_4.js} +1 -1
  223. package/dist/ui/assets/{chunk-F27PBJKO-VJth4ETL.js → chunk-F27PBJKO-gD-r9Rww.js} +1 -1
  224. package/dist/ui/assets/{chunk-GMAD6QVW-CMTnCPtC.js → chunk-GMAD6QVW-rvBxuygZ.js} +1 -1
  225. package/dist/ui/assets/{chunk-GVQU2GXP-bjPEFMMp.js → chunk-GVQU2GXP-Cq3-rF-u.js} +1 -1
  226. package/dist/ui/assets/chunk-I5DQTOEV-Cux5OBYe.js +1 -0
  227. package/dist/ui/assets/chunk-ICYGCRZG-BSFpafu0.js +1 -0
  228. package/dist/ui/assets/chunk-IH6LHLGP-D3gp9iPn.js +1 -0
  229. package/dist/ui/assets/{chunk-IMKFNOWR-C1BByNVf.js → chunk-IMKFNOWR-BHREb6T1.js} +1 -1
  230. package/dist/ui/assets/chunk-KI3K4JFJ-bgHYJH0f.js +1 -0
  231. package/dist/ui/assets/{chunk-L3NEJ4N5-whMpUmjS.js → chunk-L3NEJ4N5-D-R9OvAs.js} +1 -1
  232. package/dist/ui/assets/chunk-LNGE3PJU-p78rraeW.js +34 -0
  233. package/dist/ui/assets/{chunk-OSK3NFVY-B6Ch9_w3.js → chunk-OSK3NFVY-D0WDbtxw.js} +1 -1
  234. package/dist/ui/assets/chunk-OUJLGHUK-CYjUPErt.js +2 -0
  235. package/dist/ui/assets/{chunk-P2QGCYS3-CWRV4Ah9.js → chunk-P2QGCYS3-DLFLbH4p.js} +1 -1
  236. package/dist/ui/assets/{chunk-POPQ4Y6H-CcHY8rtu.js → chunk-POPQ4Y6H-Cw6X8QGG.js} +1 -1
  237. package/dist/ui/assets/{chunk-PWAF6VOD-BC0VBnZU.js → chunk-PWAF6VOD-Ds6RWXzu.js} +1 -1
  238. package/dist/ui/assets/{chunk-SHT3W25Y-DfFIsip4.js → chunk-SHT3W25Y-DvJuv0Ft.js} +3 -3
  239. package/dist/ui/assets/{chunk-SVP7TREG-C3xL4bvJ.js → chunk-SVP7TREG-DMasMVeC.js} +1 -1
  240. package/dist/ui/assets/{chunk-TICWLB2K-Bt1FxNVL.js → chunk-TICWLB2K-yWH6tp94.js} +1 -1
  241. package/dist/ui/assets/chunk-TLUHSLCS-CzTkKr54.js +2 -0
  242. package/dist/ui/assets/chunk-UY3FDG6J-XZwQOzbF.js +1 -0
  243. package/dist/ui/assets/chunk-XHIXRSVI-Bu6LAW6p.js +1 -0
  244. package/dist/ui/assets/classDiagram-ZZMXUADV-AoAfBymA.js +1 -0
  245. package/dist/ui/assets/classDiagram-v2-VYDZK3BY-AoAfBymA.js +1 -0
  246. package/dist/ui/assets/cynefin-OW5HDTMX-Bxpgy9Q-.js +1 -0
  247. package/dist/ui/assets/cynefinDiagram-5FMLGOSQ-DAETHLCh.js +62 -0
  248. package/dist/ui/assets/{dagre-GXQ25YYZ-EBMMAtpz.js → dagre-GXQ25YYZ-BoTD9ES5.js} +2 -2
  249. package/dist/ui/assets/{diagram-S7CK7UJ4-BaEfBV0o.js → diagram-S7CK7UJ4-etZnEmAz.js} +3 -3
  250. package/dist/ui/assets/diagram-UQ7AKVKN-CywmEzAf.js +41 -0
  251. package/dist/ui/assets/diagram-VSXAHHWV-Dp_aDmgC.js +3 -0
  252. package/dist/ui/assets/diagram-VX7I27RA-Bxt7i5Mf.js +24 -0
  253. package/dist/ui/assets/diagram-Z3DM3KII-BReedDkK.js +24 -0
  254. package/dist/ui/assets/docs-CypCpmgt.js +1 -0
  255. package/dist/ui/assets/ebnfDiagram-PWID7BFC-Dz7S0T6B.js +1 -0
  256. package/dist/ui/assets/{erDiagram-RLTQ6QDP-Bpj96FeR.js → erDiagram-RLTQ6QDP-C2OhjIoP.js} +1 -1
  257. package/dist/ui/assets/eventmodeling-NTZA5JFV-CKBX3xli.js +1 -0
  258. package/dist/ui/assets/flowDiagram-HODETNUW-DWZFA4j8.js +1 -0
  259. package/dist/ui/assets/{ganttDiagram-EL5Y4UJY-BXWL7ow_.js → ganttDiagram-EL5Y4UJY-X63oIy-b.js} +1 -1
  260. package/dist/ui/assets/gitGraph-4MIJSDKK-DBRsV9Fh.js +1 -0
  261. package/dist/ui/assets/gitGraphDiagram-WWUBYQGX-CjRtFyZs.js +106 -0
  262. package/dist/ui/assets/index-BBJ0SQAG.css +1 -0
  263. package/dist/ui/assets/index-DpAh1097.js +57 -0
  264. package/dist/ui/assets/info-A6RAGUB7-AZ8VcEaY.js +1 -0
  265. package/dist/ui/assets/infoDiagram-27XIBGKW-D_WjlHCS.js +2 -0
  266. package/dist/ui/assets/input-Cg7deJC2.js +1 -0
  267. package/dist/ui/assets/{ishikawaDiagram-5VMMS53U-Bz24j_3Q.js → ishikawaDiagram-5VMMS53U-CcSnDibc.js} +2 -2
  268. package/dist/ui/assets/{journeyDiagram-3NMN7TZE-Cw49nq1P.js → journeyDiagram-3NMN7TZE-C_cOiv3U.js} +1 -1
  269. package/dist/ui/assets/{kanban-definition-UXKFOSKX-Ck2BMOZW.js → kanban-definition-UXKFOSKX-BE6bTzJ_.js} +3 -3
  270. package/dist/ui/assets/{line-3ywrXSvS.js → line-B0YzR-ai.js} +1 -1
  271. package/dist/ui/assets/mermaid-parser.core-D-C4q-gD.js +4 -0
  272. package/dist/ui/assets/mermaid.core-BinXQHOy.js +11 -0
  273. package/dist/ui/assets/{mindmap-definition-YA3MSWOX-CK7Qs2O6.js → mindmap-definition-YA3MSWOX-H_1t8eO8.js} +1 -1
  274. package/dist/ui/assets/packet-AYTQ26CC-Bdg2essy.js +1 -0
  275. package/dist/ui/assets/pegDiagram-XKGWAZYB-DEzpGr4J.js +1 -0
  276. package/dist/ui/assets/pie-WAS4IAKB-D5QrUC2g.js +1 -0
  277. package/dist/ui/assets/pieDiagram-E7YTZNPT-DzBWBOML.js +39 -0
  278. package/dist/ui/assets/{quadrantDiagram-AXDQQJYC-BVzreR-s.js → quadrantDiagram-AXDQQJYC-BJNb82FM.js} +1 -1
  279. package/dist/ui/assets/radar-RG4KPBEZ-BuYYKOJl.js +1 -0
  280. package/dist/ui/assets/railroad-74A4TZTK-Nkuw4fzg.js +1 -0
  281. package/dist/ui/assets/railroad-abnf-HS5TGJTU-gAPZoBfp.js +1 -0
  282. package/dist/ui/assets/railroad-ebnf-LZEXJU2U-DvwkawHG.js +1 -0
  283. package/dist/ui/assets/railroad-peg-WCYAUIDC-CrrHZFIz.js +1 -0
  284. package/dist/ui/assets/railroadDiagram-O6MQD6OU-dHphbrs7.js +1 -0
  285. package/dist/ui/assets/repo-Rgx38OJH.js +2 -0
  286. package/dist/ui/assets/{requirementDiagram-BXWQKSXE-CB77SNNB.js → requirementDiagram-BXWQKSXE-BpZeR6MN.js} +1 -1
  287. package/dist/ui/assets/{sankeyDiagram-P5KCCOFB-D_qnpDIk.js → sankeyDiagram-P5KCCOFB-pfWwS_Ol.js} +1 -1
  288. package/dist/ui/assets/screenshot-viewer-Zxr6licW.js +1 -0
  289. package/dist/ui/assets/{sequenceDiagram-WJ2MYXX4-DrR-O2gR.js → sequenceDiagram-WJ2MYXX4-jX0ZWILZ.js} +1 -1
  290. package/dist/ui/assets/stateDiagram-D77RDMKH-cx9TocBZ.js +1 -0
  291. package/dist/ui/assets/stateDiagram-v2-MP3YSRHH-C8aOH2zy.js +1 -0
  292. package/dist/ui/assets/swimlanes-42K2YHIH-D0HO4IaA.js +1 -0
  293. package/dist/ui/assets/swimlanesDiagram-VR7AAH4N-TUNEXRA4.js +8 -0
  294. package/dist/ui/assets/switch-BYQwbwcZ.js +1 -0
  295. package/dist/ui/assets/{time-CwKjNEcq.js → time-CD85vGC0.js} +1 -1
  296. package/dist/ui/assets/{timeline-definition-24CTP7MA-DS_U9LBk.js → timeline-definition-24CTP7MA-CU20d-G7.js} +1 -1
  297. package/dist/ui/assets/{title-ClcAtTzM.js → title-CKCTFTPg.js} +1 -1
  298. package/dist/ui/assets/treeView-Q6P3EWNA-DVwK8Kqr.js +1 -0
  299. package/dist/ui/assets/treemap-WGGIJYW6-dx7qI3mD.js +1 -0
  300. package/dist/ui/assets/types-D6qo-egS.js +1 -0
  301. package/dist/ui/assets/value-BsoQhhdg.js +1 -0
  302. package/dist/ui/assets/vendor-ui-D3ucVR3C.js +3 -0
  303. package/dist/ui/assets/{vennDiagram-4TSXK5OY-CcEibS-z.js → vennDiagram-4TSXK5OY-Du2dqf4k.js} +2 -2
  304. package/dist/ui/assets/viewport-BVLcUJ9I.js +1 -0
  305. package/dist/ui/assets/wardley-WFR3VGLG-Dexzwvt6.js +1 -0
  306. package/dist/ui/assets/{wardleyDiagram-VM6X3IG4-m2YJGsr8.js → wardleyDiagram-VM6X3IG4-CsiwW_49.js} +3 -3
  307. package/dist/ui/assets/{xychartDiagram-S5SC5T6Z-D-ENA4CQ.js → xychartDiagram-S5SC5T6Z-8lEaXvDi.js} +3 -3
  308. package/dist/ui/index.html +18 -9
  309. package/dist/ui/sw.js +2 -2
  310. package/package.json +1 -1
  311. package/dist/ui/assets/AgentsView-B_yMHKiT.css +0 -1
  312. package/dist/ui/assets/AgentsView-Dxv4s_ff.js +0 -1
  313. package/dist/ui/assets/ChecksView-BGUWmHHI.js +0 -0
  314. package/dist/ui/assets/ChecksView-DAZIbg5B.css +0 -1
  315. package/dist/ui/assets/ContextView-BxlQCnkt.js +0 -4
  316. package/dist/ui/assets/DashboardView-2xJiQLBz.js +0 -1
  317. package/dist/ui/assets/DashboardView-Ca3kwSow.css +0 -1
  318. package/dist/ui/assets/InputsView-DtPR9kyl.js +0 -1
  319. package/dist/ui/assets/LoginView-DWEf0kRL.js +0 -1
  320. package/dist/ui/assets/ReleasesView-JG7zXQPU.js +0 -5
  321. package/dist/ui/assets/ReleasesView-mGdLAyHK.css +0 -1
  322. package/dist/ui/assets/SettingsView-BlDj5TRt.css +0 -1
  323. package/dist/ui/assets/SettingsView-C8blwbyh.js +0 -4
  324. package/dist/ui/assets/StoriesView-1FeSeEMD.js +0 -1
  325. package/dist/ui/assets/WorkView-Y9JCMf7I.js +0 -2
  326. package/dist/ui/assets/WorkView-vT6nLFuM.css +0 -1
  327. package/dist/ui/assets/abnfDiagram-VCTEODGH-DbjEiPQk.js +0 -1
  328. package/dist/ui/assets/architecture-7GRP2DOG-D3Zr7GMJ.js +0 -1
  329. package/dist/ui/assets/architectureDiagram-5GKGNRK7-iuYOljXl.js +0 -36
  330. package/dist/ui/assets/channel-CsOxGNSt.js +0 -1
  331. package/dist/ui/assets/classDiagram-ZZMXUADV-DXz5ZBJc.js +0 -1
  332. package/dist/ui/assets/classDiagram-v2-VYDZK3BY-DXz5ZBJc.js +0 -1
  333. package/dist/ui/assets/cynefin-OW5HDTMX-BPQzV4Oh.js +0 -1
  334. package/dist/ui/assets/cynefinDiagram-5FMLGOSQ-BTmi3fdq.js +0 -62
  335. package/dist/ui/assets/diagram-UQ7AKVKN-BRL9YWBF.js +0 -41
  336. package/dist/ui/assets/diagram-VSXAHHWV-CI_jmzDG.js +0 -3
  337. package/dist/ui/assets/diagram-VX7I27RA-DoZgqatt.js +0 -24
  338. package/dist/ui/assets/diagram-Z3DM3KII-CEZOwotu.js +0 -24
  339. package/dist/ui/assets/ebnfDiagram-PWID7BFC-DoHUC2pF.js +0 -1
  340. package/dist/ui/assets/eventmodeling-NTZA5JFV-BP096yAZ.js +0 -1
  341. package/dist/ui/assets/flowDiagram-HODETNUW-CGQzpVgi.js +0 -1
  342. package/dist/ui/assets/gitGraph-4MIJSDKK-CygEn6Pm.js +0 -1
  343. package/dist/ui/assets/gitGraphDiagram-WWUBYQGX-BEN8kG8Y.js +0 -106
  344. package/dist/ui/assets/index-CNf-gQPU.js +0 -54
  345. package/dist/ui/assets/index-Dp0zyDhg.css +0 -1
  346. package/dist/ui/assets/info-A6RAGUB7-CG18k5Tc.js +0 -1
  347. package/dist/ui/assets/infoDiagram-27XIBGKW-BVEnM-o1.js +0 -2
  348. package/dist/ui/assets/mermaid-parser.core-pTkacvis.js +0 -7
  349. package/dist/ui/assets/mermaid.core-KI_Ug6Sr.js +0 -44
  350. package/dist/ui/assets/packet-AYTQ26CC-CB1LAlf8.js +0 -1
  351. package/dist/ui/assets/pegDiagram-XKGWAZYB-C7wyvhpZ.js +0 -1
  352. package/dist/ui/assets/pie-WAS4IAKB-CtkGbS6o.js +0 -1
  353. package/dist/ui/assets/pieDiagram-E7YTZNPT-DqYUbDdy.js +0 -39
  354. package/dist/ui/assets/radar-RG4KPBEZ-ElYRqk-4.js +0 -1
  355. package/dist/ui/assets/railroad-74A4TZTK-XUiiGOGw.js +0 -1
  356. package/dist/ui/assets/railroad-abnf-HS5TGJTU-ebjcwFgX.js +0 -1
  357. package/dist/ui/assets/railroad-ebnf-LZEXJU2U-Z5mPRjaM.js +0 -1
  358. package/dist/ui/assets/railroad-peg-WCYAUIDC-Ds7v_hnS.js +0 -1
  359. package/dist/ui/assets/railroadDiagram-O6MQD6OU-C-um7ttl.js +0 -1
  360. package/dist/ui/assets/repo-XLbfa7u-.js +0 -2
  361. package/dist/ui/assets/stateDiagram-D77RDMKH-Mz-Cjby1.js +0 -1
  362. package/dist/ui/assets/stateDiagram-v2-MP3YSRHH-cIIjufMH.js +0 -1
  363. package/dist/ui/assets/swimlanes-42K2YHIH-BwFAfw2O.js +0 -1
  364. package/dist/ui/assets/swimlanesDiagram-VR7AAH4N-BT2MlBys.js +0 -8
  365. package/dist/ui/assets/treeView-Q6P3EWNA-D0Ds2Pnh.js +0 -1
  366. package/dist/ui/assets/treemap-WGGIJYW6-Dr6ADVsx.js +0 -1
  367. package/dist/ui/assets/vendor-ui-DsOjPSxk.js +0 -3
  368. package/dist/ui/assets/wardley-WFR3VGLG-D19UeE7v.js +0 -1
@@ -1,5 +1,5 @@
1
1
  {
2
- "hash": "93934ce20f177f2d06114caa9df33fcc13b17c9f8b1694247b2cb6282628fab8",
3
- "version": "0.5.67",
2
+ "hash": "b009708e237c666064aee174b838afdb790721e2fdef67d53c2317781afd5073",
3
+ "version": "0.5.69",
4
4
  "devUi": false
5
5
  }
@@ -1,3 +1,3 @@
1
1
  {
2
- "generatedAt": "2026-10-07T10:18:27.380Z"
2
+ "generatedAt": "2026-10-11T01:57:56.517Z"
3
3
  }
@@ -12,12 +12,19 @@ const CONTROL_API_MATCHERS = [
12
12
  re("POST", /^\/api\/tasks\/([^/]+)\/(start|pause|message|done)$/.source),
13
13
  re("POST", /^\/api\/tasks\/([^/]+)\/preview$/.source),
14
14
  re("POST", /^\/api\/tasks\/([^/]+)\/preview\/stop$/.source),
15
+ // `repoos dev …` (#0747): list/status/get and start/stop/restart.
16
+ exact("GET", "/api/dev/targets"),
17
+ re("GET", /^\/api\/dev\/targets\/([^/]+)$/.source),
18
+ re("POST", /^\/api\/dev\/targets\/([^/]+)\/(start|stop|restart)$/.source),
15
19
  exact("GET", "/api/config"),
16
20
  exact("PATCH", "/api/config"),
17
21
  exact("GET", "/api/remote-validation/status"),
18
22
  exact("POST", "/api/remote-validation/test"),
19
23
  exact("GET", "/api/agents/running"),
20
24
  exact("GET", "/api/stats/board"),
25
+ exact("GET", "/api/driver/brief"),
26
+ exact("GET", "/api/events"),
27
+ exact("POST", "/api/cto/heartbeat"),
21
28
  // `repoos review` → PATCH status=review; `repoos override` → PATCH overrides
22
29
  re("PATCH", /^\/api\/tasks\/([^/]+)$/.source),
23
30
  ];
@@ -65,6 +72,7 @@ const UI_ONLY_MATCHERS = [
65
72
  exact("GET", "/api/system/run-tests"),
66
73
  exact("POST", "/api/system/run-tests"),
67
74
  exact("GET", "/api/attention"),
75
+ exact("GET", "/api/decisions"),
68
76
  exact("GET", "/api/check-runs"),
69
77
  (r) => r.pattern.startsWith("/api/integration"),
70
78
  exact("GET", "/api/close-out/outcomes"),
package/dist/cli/help.js CHANGED
@@ -8,9 +8,9 @@
8
8
  * usage line lives in per-command help rather than inline.
9
9
  */
10
10
  import { readVersion } from "../core/version.js";
11
- import { PRIORITIES, TASK_TYPES } from "../core/types.js";
12
11
  import { c } from "./colors.js";
13
12
  import { table, termWidth, visibleWidth, wrap } from "./layout.js";
13
+ import { NEW_FLAG_HELP, UPDATE_FLAG_HELP, flagSummary, flagUsageTokens } from "./task-flags.js";
14
14
  /** Commands whose own argument parser already handles `--help`. */
15
15
  export const SELF_HELP_COMMANDS = new Set(["support", "tunnel", "shot", "uninstall"]);
16
16
  const GROUPS = [
@@ -48,9 +48,9 @@ const GROUPS = [
48
48
  { name: "show", usage: "show <id>", desc: "Show a task's full spec" },
49
49
  {
50
50
  name: "new",
51
- usage: `new "<title>" [--ai --type ${TASK_TYPES.join("|")} --area <a> --priority ${PRIORITIES.join("|")} --body <b>]`,
51
+ usage: 'new "<title>" ' + flagUsageTokens(NEW_FLAG_HELP).join(" "),
52
52
  desc: "Create a task",
53
- flags: `--ai · --type · --area · --priority · --body`,
53
+ flags: flagSummary(NEW_FLAG_HELP),
54
54
  },
55
55
  {
56
56
  name: "new-doc",
@@ -116,6 +116,12 @@ const GROUPS = [
116
116
  desc: "Start or stop the task preview (POST /api/tasks/:id/preview)",
117
117
  flags: "--stop · --json · --port",
118
118
  },
119
+ {
120
+ name: "dev",
121
+ usage: "dev [list] · dev <name> start|stop|restart|status|logs [--json] [--port N]",
122
+ desc: "Start, stop and inspect a declared dev target (GET/POST /api/dev/targets)",
123
+ flags: "--json · --port",
124
+ },
119
125
  {
120
126
  name: "config",
121
127
  usage: "config get|set <key> [value] [--json] [--port N]",
@@ -140,6 +146,18 @@ const GROUPS = [
140
146
  desc: "Board spend summary (GET /api/stats/board)",
141
147
  flags: "--json · --port",
142
148
  },
149
+ {
150
+ name: "watch",
151
+ usage: "watch [--json] [--task <id>] [--port N]",
152
+ desc: "Stream board SSE events for external driver sessions (GET /api/events)",
153
+ flags: "--json · --task · --port",
154
+ },
155
+ {
156
+ name: "driver",
157
+ usage: "driver brief [--json] [--port N]",
158
+ desc: "Print the CTO's board brief from live state (GET /api/driver/brief)",
159
+ flags: "--json · --port",
160
+ },
143
161
  {
144
162
  name: "rm",
145
163
  usage: "rm <id> --yes",
@@ -148,9 +166,15 @@ const GROUPS = [
148
166
  },
149
167
  {
150
168
  name: "update",
151
- usage: "update <id> [flags]",
169
+ usage: "update <id> " + flagUsageTokens(UPDATE_FLAG_HELP).join(" "),
152
170
  desc: "Edit a task's metadata or body",
153
- flags: `--title · --area · --priority ${PRIORITIES.join("|")} · --type ${TASK_TYPES.join("|")} · --body · --branch · --assigned-to`,
171
+ flags: flagSummary(UPDATE_FLAG_HELP),
172
+ },
173
+ {
174
+ name: "story",
175
+ usage: 'story new "<name>" --body <text|-> | story list | story show <number|name> | story update <number|name> [--name …] [--body <text|->]',
176
+ desc: "Create, list, show or update story definitions verbatim (no PM agent)",
177
+ flags: "new/show/update: --body - · list/show: --json",
154
178
  },
155
179
  {
156
180
  name: "index",
@@ -263,6 +287,12 @@ const EXAMPLES = [
263
287
  { cmd: 'repoos mv 0012 active --note "Fix the regression in checkout; see review"' },
264
288
  { cmd: 'repoos note 0012 "Handle the reviewer\'s suggestions before the next review"' },
265
289
  { cmd: 'repoos update 0012 --title "New title" --area web,core' },
290
+ {
291
+ cmd: 'repoos story new "Project updates email" --body "Why this slice exists, scope and non-goals"',
292
+ comment: "verbatim story, no PM",
293
+ },
294
+ { cmd: "repoos story list", comment: "registered stories, with numbers" },
295
+ { cmd: "repoos story show 0007", comment: "definition + member tasks and their statuses" },
266
296
  { cmd: "repoos list ready" },
267
297
  { cmd: "repoos outline src/server/agents.ts", comment: "then read only the range you need" },
268
298
  { cmd: "repoos doctor", comment: "passing checks are hidden; --verbose shows all" },
@@ -282,6 +312,7 @@ const ALIASES = {
282
312
  add: "new",
283
313
  reindex: "index",
284
314
  server: "serve",
315
+ stories: "story",
285
316
  };
286
317
  /** Resolve an alias to its canonical command name (identity when not an alias). */
287
318
  export function canonicalCommand(name) {
package/dist/cli/index.js CHANGED
@@ -6,6 +6,7 @@
6
6
  import { cmdInit } from "../commands/init.js";
7
7
  import { cmdList, cmdShow, cmdMv, cmdRm, cmdUpdate, cmdNew, cmdIndex, cmdNote, } from "../commands/tasks.js";
8
8
  import { cmdDocs, cmdNewDoc } from "../commands/docs.js";
9
+ import { cmdStory } from "../commands/stories.js";
9
10
  import { cmdGc } from "../commands/gc.js";
10
11
  import { cmdOutline } from "../commands/outline.js";
11
12
  import { cmdCheck } from "../commands/check.js";
@@ -20,7 +21,9 @@ import { cmdDoctor } from "../commands/doctor.js";
20
21
  import { cmdCertify } from "../commands/certify.js";
21
22
  import { cmdSupport } from "../commands/support.js";
22
23
  import { cmdService } from "../commands/service.js";
23
- import { cmdAgentsRunning, cmdConfig, cmdDone, cmdMessage, cmdOverride, cmdPause, cmdPreview, cmdReview, cmdRunners, cmdStart, cmdStats, } from "../commands/control-api.js";
24
+ import { cmdAgentsRunning, cmdConfig, cmdDone, cmdMessage, cmdOverride, cmdPause, cmdPreview, cmdDev, cmdReview, cmdRunners, cmdStart, cmdStats, cmdDecisions, } from "../commands/control-api.js";
25
+ import { cmdWatch } from "../commands/watch.js";
26
+ import { cmdDriver } from "../commands/driver.js";
24
27
  import { checkBuild } from "../core/build.js";
25
28
  import { loadConfig } from "../core/config.js";
26
29
  import { reexecAfterStaleBuild, reexecUnderBunIfRequested } from "../core/runtime.js";
@@ -170,6 +173,10 @@ function main() {
170
173
  case "docs":
171
174
  void cmdDocs(rest);
172
175
  break;
176
+ case "story":
177
+ case "stories":
178
+ cmdStory(rest);
179
+ break;
173
180
  case "index":
174
181
  case "reindex":
175
182
  cmdIndex(rest);
@@ -235,6 +242,12 @@ function main() {
235
242
  process.exitCode = code;
236
243
  });
237
244
  break;
245
+ case "dev":
246
+ void cmdDev(rest).then((code) => {
247
+ if (code !== 0)
248
+ process.exitCode = code;
249
+ });
250
+ break;
238
251
  case "config":
239
252
  void cmdConfig(rest).then((code) => {
240
253
  if (code !== 0)
@@ -259,6 +272,25 @@ function main() {
259
272
  process.exitCode = code;
260
273
  });
261
274
  break;
275
+ case "decisions":
276
+ case "attention":
277
+ void cmdDecisions(rest).then((code) => {
278
+ if (code !== 0)
279
+ process.exitCode = code;
280
+ });
281
+ break;
282
+ case "watch":
283
+ void cmdWatch(rest).then((code) => {
284
+ if (code !== 0)
285
+ process.exitCode = code;
286
+ });
287
+ break;
288
+ case "driver":
289
+ void cmdDriver(rest).then((code) => {
290
+ if (code !== 0)
291
+ process.exitCode = code;
292
+ });
293
+ break;
262
294
  case "shot":
263
295
  void cmdShot(rest)
264
296
  .then((code) => {
@@ -37,6 +37,10 @@ export declare class RepoOsApi {
37
37
  private buildHeaders;
38
38
  private devBackdoorLogin;
39
39
  health(): Promise<boolean>;
40
+ /** Re-run dev backdoor login after a 401 (e.g. server reload). */
41
+ reauthenticate(): Promise<boolean>;
42
+ /** Open `GET /api/events` with the same auth as other CLI calls. */
43
+ fetchEventStream(): Promise<Response>;
40
44
  request(method: string, path: string, body?: unknown, opts?: {
41
45
  retryAuth?: boolean;
42
46
  }): Promise<{
@@ -104,6 +104,21 @@ export class RepoOsApi {
104
104
  return false;
105
105
  }
106
106
  }
107
+ /** Re-run dev backdoor login after a 401 (e.g. server reload). */
108
+ async reauthenticate() {
109
+ return this.devBackdoorLogin();
110
+ }
111
+ /** Open `GET /api/events` with the same auth as other CLI calls. */
112
+ async fetchEventStream() {
113
+ try {
114
+ return await fetch(`${this.baseUrl}/api/events`, {
115
+ headers: { ...this.buildHeaders(false), accept: "text/event-stream" },
116
+ });
117
+ }
118
+ catch (err) {
119
+ throw new RepoOsApiError(`Can't reach the RepoOS server at ${this.baseUrl}. Is \`repoos serve\` running? ${err.message}`, 0);
120
+ }
121
+ }
107
122
  async request(method, path, body, opts = {}) {
108
123
  const jsonBody = body !== undefined;
109
124
  const doFetch = async () => {
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Minimal SSE frame parser for CLI consumers (#0728).
3
+ */
4
+ export declare function parseSseChunk(buffer: string, onData: (jsonText: string) => void): string;
5
+ export declare function consumeSseResponse(res: Response, onJson: (data: unknown) => void, shouldContinue: () => boolean): Promise<void>;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Minimal SSE frame parser for CLI consumers (#0728).
3
+ */
4
+ export function parseSseChunk(buffer, onData) {
5
+ let rest = buffer;
6
+ let split = rest.indexOf("\n\n");
7
+ while (split !== -1) {
8
+ const frame = rest.slice(0, split);
9
+ rest = rest.slice(split + 2);
10
+ const dataLine = frame.split("\n").find((line) => line.startsWith("data: "));
11
+ if (dataLine)
12
+ onData(dataLine.slice(6));
13
+ split = rest.indexOf("\n\n");
14
+ }
15
+ return rest;
16
+ }
17
+ export async function consumeSseResponse(res, onJson, shouldContinue) {
18
+ if (!res.body)
19
+ return;
20
+ const reader = res.body.getReader();
21
+ const decoder = new TextDecoder();
22
+ let buffer = "";
23
+ try {
24
+ while (shouldContinue()) {
25
+ const { done, value } = await reader.read();
26
+ if (done)
27
+ break;
28
+ buffer += decoder.decode(value, { stream: true });
29
+ buffer = parseSseChunk(buffer, (text) => {
30
+ try {
31
+ onJson(JSON.parse(text));
32
+ }
33
+ catch {
34
+ /* ignore partial frames */
35
+ }
36
+ });
37
+ }
38
+ }
39
+ finally {
40
+ await reader.cancel().catch(() => { });
41
+ }
42
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The full valid value sets for `--priority` / `--type`, rendered into the
3
+ * usage/help text so accepted values are obvious at the point of use (#0656).
4
+ */
5
+ export declare const PRIORITY_USAGE: string;
6
+ export declare const TYPE_USAGE: string;
7
+ /** One flag's help metadata. */
8
+ export interface TaskFlagHelp {
9
+ /** Placeholder rendered after the flag (e.g. `true|false`); omit for a boolean flag. */
10
+ value?: string;
11
+ /** One-line description, shown by `repoos <cmd> --help`. */
12
+ desc: string;
13
+ }
14
+ /** Every flag `repoos new` accepts, in help order. */
15
+ export declare const NEW_FLAG_HELP: Record<string, TaskFlagHelp>;
16
+ /** Every flag `repoos update` accepts, in help order. */
17
+ export declare const UPDATE_FLAG_HELP: Record<string, TaskFlagHelp>;
18
+ /** One `--flag` / `--flag value` token, as used in a usage line. */
19
+ export declare function flagToken(name: string, help: TaskFlagHelp): string;
20
+ /** Ordered `--flag [value]` tokens for every entry in a help map. */
21
+ export declare function flagUsageTokens(help: Record<string, TaskFlagHelp>): string[];
22
+ /** The dim `flags:` summary line: `--flag value · --other`, in declaration order. */
23
+ export declare function flagSummary(help: Record<string, TaskFlagHelp>): string;
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Flag help metadata for `repoos new` / `repoos update` (#0699).
3
+ *
4
+ * The parse tables live in `src/commands/tasks.ts` (`NEW_FLAGS`, derived from
5
+ * `NEW_FLAG_HELP`, and `UPDATE_FLAGS`). These ordered maps are the single
6
+ * source of truth for help text: `renderHelp` (the top-level Tasks group) and
7
+ * `printCommandHelp` both render from them, so a flag can no longer be accepted
8
+ * without a one-line description. A test asserts every key of `UPDATE_FLAGS`
9
+ * has an entry here, which makes "added a flag, forgot the help" fail the gate.
10
+ *
11
+ * `UPDATE_FLAG_HELP` intentionally covers the flags `cmdUpdate` handles
12
+ * specially (`shots`, `section`, `section-body`, `clear-questions`, `force`),
13
+ * not just the `UPDATE_FLAGS` parse map.
14
+ */
15
+ import { PRIORITIES, TASK_TYPES } from "../core/types.js";
16
+ /**
17
+ * The full valid value sets for `--priority` / `--type`, rendered into the
18
+ * usage/help text so accepted values are obvious at the point of use (#0656).
19
+ */
20
+ export const PRIORITY_USAGE = PRIORITIES.join("|");
21
+ export const TYPE_USAGE = TASK_TYPES.join("|");
22
+ /** Every flag `repoos new` accepts, in help order. */
23
+ export const NEW_FLAG_HELP = {
24
+ ai: { desc: "Assign the task to an AI engineer" },
25
+ type: { value: TYPE_USAGE, desc: "Task type" },
26
+ area: { value: "web,core", desc: "Area(s), comma-separated" },
27
+ story: { value: '"name"', desc: "Tag the task as part of a story (delivery slice)" },
28
+ "depends-on": { value: "ids", desc: "Comma-separated task ids that must land first" },
29
+ priority: { value: PRIORITY_USAGE, desc: "Priority" },
30
+ "needs-input": { value: "true|false", desc: "Flag the task as needing human input" },
31
+ questions: { value: '"Q1\\nQ2"', desc: "Open questions for the human (newline or JSON list)" },
32
+ hold: { value: "true|false", desc: "Hold the task out of auto-dispatch" },
33
+ paths: { value: "a,b", desc: "Files the task touches, e.g. src/a.ts,src/b.ts" },
34
+ body: { value: '"..."|-', desc: "Task body; `-` reads it from stdin" },
35
+ shots: { value: '"<JSON list>"|-', desc: "Declare the ## Shots section (validated JSON)" },
36
+ };
37
+ /** Every flag `repoos update` accepts, in help order. */
38
+ export const UPDATE_FLAG_HELP = {
39
+ title: { value: '"..."', desc: "Task title" },
40
+ area: { value: "web,core", desc: "Area(s), comma-separated" },
41
+ story: { value: '"name"', desc: "Tag the task as part of a story (delivery slice)" },
42
+ "depends-on": { value: "ids", desc: "Comma-separated task ids that must land first" },
43
+ priority: { value: PRIORITY_USAGE, desc: "Priority" },
44
+ type: { value: TYPE_USAGE, desc: "Task type" },
45
+ body: { value: '"..."|-', desc: "Replace the body; `-` reads it from stdin" },
46
+ branch: { value: "b", desc: "Branch name" },
47
+ "assigned-to": { value: "ai|human", desc: "Assignee" },
48
+ "needs-input": { value: "true|false", desc: "Flag the task as needing human input" },
49
+ "needs-merge": { value: "true|false", desc: "Flag the task as needing a merge" },
50
+ hold: { value: "true|false", desc: "Hold the task out of auto-dispatch" },
51
+ paths: { value: "a,b", desc: "Files the task touches, e.g. src/a.ts,src/b.ts" },
52
+ questions: { value: '"Q1\\nQ2"', desc: "Open questions for the human (newline or JSON list)" },
53
+ "clear-questions": { desc: "Clear the recorded questions" },
54
+ shots: { value: '"<JSON list>"|-', desc: "Declare the ## Shots section (validated JSON)" },
55
+ section: { value: '"heading"', desc: "Replace/create one ## section (pair with --section-body)" },
56
+ "section-body": { value: '"..."|-', desc: "Body for --section; `-` reads it from stdin" },
57
+ force: { desc: "Allow a --body replace that drops spec headings" },
58
+ agent: { value: "name", desc: "Engineer agent override (empty clears)" },
59
+ cli: { value: "name", desc: "Engineer CLI override (empty clears)" },
60
+ model: { value: "name", desc: "Engineer model override (empty clears)" },
61
+ "pm-agent": { value: "name", desc: "PM agent override (empty clears)" },
62
+ "pm-cli": { value: "name", desc: "PM CLI override (empty clears)" },
63
+ "pm-model": { value: "name", desc: "PM model override (empty clears)" },
64
+ "review-agent": { value: "name", desc: "Reviewer agent override (empty clears)" },
65
+ "review-cli": { value: "name", desc: "Reviewer CLI override (empty clears)" },
66
+ "review-model": { value: "name", desc: "Reviewer model override (empty clears)" },
67
+ };
68
+ /** One `--flag` / `--flag value` token, as used in a usage line. */
69
+ export function flagToken(name, help) {
70
+ return help.value ? `--${name} ${help.value}` : `--${name}`;
71
+ }
72
+ /** Ordered `--flag [value]` tokens for every entry in a help map. */
73
+ export function flagUsageTokens(help) {
74
+ return Object.entries(help).map(([name, h]) => flagToken(name, h));
75
+ }
76
+ /** The dim `flags:` summary line: `--flag value · --other`, in declaration order. */
77
+ export function flagSummary(help) {
78
+ return flagUsageTokens(help).join(" · ");
79
+ }
@@ -69,25 +69,28 @@ export declare function resolveBareRequireRoots(configured: string[] | undefined
69
69
  * stale screenshot churn). Product image assets — UI, icons, logos, docs —
70
70
  * live outside those folders and stay tracked.
71
71
  *
72
- * The folder names come from `repoos.toml` (`workDir`/`inputsDir`) so a managed
73
- * repo that renames them still gets the guard; they default to `work`/`inputs`.
72
+ * The folder names come from `repoos.toml` (`workDir`/`inputsDir`/`storiesDir`)
73
+ * so a managed repo that renames them still gets the guard; they default to
74
+ * `work`/`inputs`/`stories`.
74
75
  *
75
76
  * Pure (takes the tracked-file list) so it is unit-testable; the check block
76
77
  * feeds it `git ls-files`.
77
78
  */
78
79
  /**
79
- * Normalize a configured guard directory (`workDir`/`inputsDir`) for prefix
80
- * matching against `git ls-files` output, which is always repo-root-relative:
81
- * strip any leading `./` and trailing slashes. Returns empty for anything that
82
- * can't be a repo-relative directory — an explicit `""`, `"."`/`"./"`, an
83
- * absolute path, a home-relative `~/…`, or a path containing a `..` segment.
84
- * Those would all silently match nothing (or, for `""`, fatal git's pathspec),
85
- * so callers must treat empty as unusable rather than as "match everything".
80
+ * Normalize a configured guard directory (`workDir`/`inputsDir`/`storiesDir`)
81
+ * for prefix matching against `git ls-files` output, which is always
82
+ * repo-root-relative: strip any leading `./` and trailing slashes. Returns
83
+ * empty for anything that can't be a repo-relative directory — an explicit
84
+ * `""`, `"."`/`"./"`, an absolute path, a home-relative `~/…`, or a path
85
+ * containing a `..` segment. Those would all silently match nothing (or, for
86
+ * `""`, fatal git's pathspec), so callers must treat empty as unusable rather
87
+ * than as "match everything".
86
88
  */
87
89
  export declare function normalizeGuardDir(d: string): string;
88
90
  export declare function taskAssetOffenders(trackedPaths: string[], dirs?: {
89
91
  workDir?: string;
90
92
  inputsDir?: string;
93
+ storiesDir?: string;
91
94
  }): string[];
92
95
  /** Marker that allowlists a hard-coded color; must carry a reason. */
93
96
  export declare const HARDCODED_COLOR_MARKER = "hardcode-ok";
@@ -45,7 +45,7 @@ import { mainCheckoutRoot } from "../core/git.js";
45
45
  import { Logger } from "../core/logger.js";
46
46
  import { boardRootForEngineerRemote, boardTaskAbsPath, commitWipCheckpointForRemoteGate, isManagedEngineerCheck, runEngineerRemoteSelfCheckGate, } from "../server/engineer-remote-self-check.js";
47
47
  import { createRemoteValidator } from "../server/remote-validation.js";
48
- import { runRemotePreReviewGate, standaloneCliCanUseRemote, remoteValidationAlreadyAttempted, uncommittedFilesBlockingRemoteGate, shouldRunCliRemotePreReviewGate, summarizeRemoteFallbackDetail, REPOOS_REMOTE_FALLBACK_DETAIL, } from "../server/pre-review-remote-gate.js";
48
+ import { runRemotePreReviewGate, standaloneCliCanUseRemote, remoteValidationAlreadyAttempted, uncommittedFilesBlockingRemoteGate, shouldRunCliRemotePreReviewGate, summarizeRemoteFallbackDetail, REPOOS_REMOTE_FALLBACK_DETAIL, REPOOS_CHECK_GATE_NOTE, } from "../server/pre-review-remote-gate.js";
49
49
  /**
50
50
  * Split a CSS selector list on top-level commas (respecting parentheses,
51
51
  * so `:not(.a,.b)` stays one group).
@@ -402,20 +402,22 @@ function dedupeRoots(roots) {
402
402
  * stale screenshot churn). Product image assets — UI, icons, logos, docs —
403
403
  * live outside those folders and stay tracked.
404
404
  *
405
- * The folder names come from `repoos.toml` (`workDir`/`inputsDir`) so a managed
406
- * repo that renames them still gets the guard; they default to `work`/`inputs`.
405
+ * The folder names come from `repoos.toml` (`workDir`/`inputsDir`/`storiesDir`)
406
+ * so a managed repo that renames them still gets the guard; they default to
407
+ * `work`/`inputs`/`stories`.
407
408
  *
408
409
  * Pure (takes the tracked-file list) so it is unit-testable; the check block
409
410
  * feeds it `git ls-files`.
410
411
  */
411
412
  /**
412
- * Normalize a configured guard directory (`workDir`/`inputsDir`) for prefix
413
- * matching against `git ls-files` output, which is always repo-root-relative:
414
- * strip any leading `./` and trailing slashes. Returns empty for anything that
415
- * can't be a repo-relative directory — an explicit `""`, `"."`/`"./"`, an
416
- * absolute path, a home-relative `~/…`, or a path containing a `..` segment.
417
- * Those would all silently match nothing (or, for `""`, fatal git's pathspec),
418
- * so callers must treat empty as unusable rather than as "match everything".
413
+ * Normalize a configured guard directory (`workDir`/`inputsDir`/`storiesDir`)
414
+ * for prefix matching against `git ls-files` output, which is always
415
+ * repo-root-relative: strip any leading `./` and trailing slashes. Returns
416
+ * empty for anything that can't be a repo-relative directory — an explicit
417
+ * `""`, `"."`/`"./"`, an absolute path, a home-relative `~/…`, or a path
418
+ * containing a `..` segment. Those would all silently match nothing (or, for
419
+ * `""`, fatal git's pathspec), so callers must treat empty as unusable rather
420
+ * than as "match everything".
419
421
  */
420
422
  export function normalizeGuardDir(d) {
421
423
  let trimmed = d;
@@ -431,7 +433,11 @@ export function normalizeGuardDir(d) {
431
433
  }
432
434
  export function taskAssetOffenders(trackedPaths, dirs = {}) {
433
435
  const IMG = /\.(png|jpe?g|gif|webp|avif|bmp|svg|ico|pdf)$/i;
434
- const prefixes = [dirs.workDir ?? "work", dirs.inputsDir ?? "inputs"]
436
+ const prefixes = [
437
+ dirs.workDir ?? "work",
438
+ dirs.inputsDir ?? "inputs",
439
+ dirs.storiesDir ?? "stories",
440
+ ]
435
441
  .map(normalizeGuardDir)
436
442
  .filter(Boolean)
437
443
  .map((d) => `${d}/`);
@@ -1189,12 +1195,13 @@ async function stepBareRequire(ctx) {
1189
1195
  };
1190
1196
  }
1191
1197
  async function stepTaskAssets(ctx) {
1192
- // Folder names are configurable (`workDir`/`inputsDir`), so a repo that
1193
- // renames them is still guarded.
1198
+ // Folder names are configurable (`workDir`/`inputsDir`/`storiesDir`), so a
1199
+ // repo that renames them is still guarded.
1194
1200
  const config = ctx.cfg;
1195
1201
  const dirs = [
1196
1202
  { label: "workDir", raw: config.workDir ?? "work" },
1197
1203
  { label: "inputsDir", raw: config.inputsDir ?? "inputs" },
1204
+ { label: "storiesDir", raw: config.storiesDir ?? "stories" },
1198
1205
  ];
1199
1206
  const usable = [];
1200
1207
  const broken = [];
@@ -1231,6 +1238,7 @@ async function stepTaskAssets(ctx) {
1231
1238
  const offenders = taskAssetOffenders(tracked, {
1232
1239
  workDir: config.workDir,
1233
1240
  inputsDir: config.inputsDir,
1241
+ storiesDir: config.storiesDir,
1234
1242
  });
1235
1243
  const labels = usable.map((d) => `${d}/`).join(" or ");
1236
1244
  if (offenders.length === 0)
@@ -1335,9 +1343,15 @@ async function triageIsolatedFailures(ctx, base, testScript, output, env) {
1335
1343
  }
1336
1344
  async function stepTests(ctx) {
1337
1345
  // The close-out pipeline can hand the suite to the Remote Validation Runner
1338
- // and then run only the cheap local guards (REPOOS_SKIP_TESTS=1).
1346
+ // and then run only the cheap local guards (REPOOS_SKIP_TESTS=1), or reuse a
1347
+ // handoff-proven result entirely (#0724). Either way the step is skipped —
1348
+ // say which, so the Checks tab is not misleading.
1339
1349
  if (process.env.REPOOS_SKIP_TESTS === "1") {
1340
- return skipped("skipped — test suite ran on the remote validation runner (REPOOS_SKIP_TESTS=1)");
1350
+ const reuseNote = process.env[REPOOS_CHECK_GATE_NOTE]?.trim();
1351
+ const viaReuse = reuseNote ? /reus|identical|bookkeeping/i.test(reuseNote) : false;
1352
+ return skipped(viaReuse
1353
+ ? `skipped — full suite reused from the handoff gate (${reuseNote})`
1354
+ : "skipped — test suite ran on the remote validation runner (REPOOS_SKIP_TESTS=1)");
1341
1355
  }
1342
1356
  const hasTestScript = Boolean(ctx.scriptPkg.scripts?.test);
1343
1357
  const hasTestFiles = ["test", "__tests__", "tests"].some((d) => existsSync(join(ctx.cwd, d)));
@@ -2123,12 +2137,21 @@ export async function cmdCheck(argv = []) {
2123
2137
  detail: (() => {
2124
2138
  const fallback = process.env[REPOOS_REMOTE_FALLBACK_DETAIL]?.trim();
2125
2139
  const stepDetail = gatingFailures[0]?.detail ?? null;
2126
- if (!fallback)
2127
- return stepDetail;
2128
- const summary = summarizeRemoteFallbackDetail(fallback);
2129
- if (!stepDetail)
2130
- return summary;
2131
- return `${summary} — ${stepDetail}`;
2140
+ // #0724: which close-out gate mode ran and why, so the Checks tab is
2141
+ // auditable ("reused from handoff check <sha>" / "scoped N files").
2142
+ const gateNote = process.env[REPOOS_CHECK_GATE_NOTE]?.trim();
2143
+ const fallbackPart = (() => {
2144
+ if (!fallback)
2145
+ return null;
2146
+ const summary = summarizeRemoteFallbackDetail(fallback);
2147
+ if (!stepDetail)
2148
+ return summary;
2149
+ return `${summary} — ${stepDetail}`;
2150
+ })();
2151
+ const base = fallbackPart ?? stepDetail;
2152
+ if (!gateNote)
2153
+ return base;
2154
+ return base ? `${gateNote} — ${base}` : gateNote;
2132
2155
  })(),
2133
2156
  // The stored detail is a short log tail that routinely loses the failing
2134
2157
  // test's name; keep the names themselves so "which test?" is a query.
@@ -5,9 +5,11 @@ export declare function cmdReview(args: string[]): Promise<number>;
5
5
  export declare function cmdDone(args: string[]): Promise<number>;
6
6
  export declare function cmdOverride(args: string[]): Promise<number>;
7
7
  export declare function cmdPreview(args: string[]): Promise<number>;
8
+ export declare function cmdDev(args: string[]): Promise<number>;
8
9
  export declare function cmdConfig(args: string[]): Promise<number>;
9
10
  export declare function cmdRunners(args: string[]): Promise<number>;
10
11
  export declare function cmdAgentsRunning(args: string[]): Promise<number>;
12
+ export declare function cmdDecisions(args: string[]): Promise<number>;
11
13
  export declare function cmdStats(args: string[]): Promise<number>;
12
14
  /** Shared server-down check for tests. */
13
15
  export declare function controlApiServerDownMessage(port: number): Promise<string>;