@repo-os/repoos 0.5.46 → 0.5.47

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 (224) hide show
  1. package/README.md +15 -8
  2. package/dist/.build-info.json +2 -2
  3. package/dist/.build-stamp.json +1 -1
  4. package/dist/cli/index.js +75 -33
  5. package/dist/commands/check.js +5 -1
  6. package/dist/commands/init.d.ts +26 -1
  7. package/dist/commands/init.js +288 -35
  8. package/dist/commands/service.d.ts +1 -0
  9. package/dist/commands/service.js +198 -0
  10. package/dist/commands/status.d.ts +3 -0
  11. package/dist/commands/status.js +11 -1
  12. package/dist/commands/tasks.d.ts +22 -3
  13. package/dist/commands/tasks.js +105 -11
  14. package/dist/commands/ui-harness.d.ts +36 -0
  15. package/dist/commands/ui-harness.js +4 -19
  16. package/dist/commands/ui-smoke.js +63 -3
  17. package/dist/core/agent-updates.d.ts +38 -0
  18. package/dist/core/agent-updates.js +203 -0
  19. package/dist/core/board-columns.test.d.ts +1 -0
  20. package/dist/core/board-columns.test.js +175 -0
  21. package/dist/core/check-results.d.ts +38 -0
  22. package/dist/core/check-results.js +176 -0
  23. package/dist/core/config.d.ts +33 -1
  24. package/dist/core/config.js +187 -0
  25. package/dist/core/detect.d.ts +50 -0
  26. package/dist/core/detect.js +136 -4
  27. package/dist/core/git.d.ts +24 -1
  28. package/dist/core/git.js +132 -18
  29. package/dist/core/models.d.ts +14 -0
  30. package/dist/core/models.js +104 -5
  31. package/dist/core/providers/spend.d.ts +1 -1
  32. package/dist/core/providers/spend.js +69 -5
  33. package/dist/core/repoos.d.ts +2 -0
  34. package/dist/core/repoos.js +2 -1
  35. package/dist/core/review-verdict.d.ts +25 -0
  36. package/dist/core/review-verdict.js +51 -0
  37. package/dist/core/review-verdict.test.d.ts +1 -0
  38. package/dist/core/review-verdict.test.js +40 -0
  39. package/dist/core/service-manager.d.ts +187 -0
  40. package/dist/core/service-manager.js +925 -0
  41. package/dist/core/service-manager.test.d.ts +1 -0
  42. package/dist/core/service-manager.test.js +372 -0
  43. package/dist/core/task.js +10 -0
  44. package/dist/core/types.d.ts +59 -0
  45. package/dist/core/worktree-gc.js +9 -5
  46. package/dist/server/agents.d.ts +181 -23
  47. package/dist/server/agents.js +1234 -56
  48. package/dist/server/auto-engineering.js +1 -1
  49. package/dist/server/auto-fix-gate.d.ts +64 -0
  50. package/dist/server/auto-fix-gate.js +220 -0
  51. package/dist/server/built-in-agent-runner.d.ts +103 -0
  52. package/dist/server/built-in-agent-runner.js +410 -0
  53. package/dist/server/built-in-agent-skill-docs.d.ts +36 -0
  54. package/dist/server/built-in-agent-skill-docs.js +306 -0
  55. package/dist/server/built-in-agents.d.ts +130 -40
  56. package/dist/server/built-in-agents.js +533 -801
  57. package/dist/server/done.js +9 -9
  58. package/dist/server/freeform-runs.d.ts +103 -0
  59. package/dist/server/freeform-runs.js +427 -0
  60. package/dist/server/freeform.js +11 -1
  61. package/dist/server/handoff.d.ts +1 -1
  62. package/dist/server/handoff.js +1 -1
  63. package/dist/server/integration-job.d.ts +21 -0
  64. package/dist/server/integration-job.js +7 -0
  65. package/dist/server/integration-orchestrator.d.ts +13 -0
  66. package/dist/server/integration-orchestrator.js +217 -61
  67. package/dist/server/live-index.d.ts +2 -0
  68. package/dist/server/live-index.js +3 -0
  69. package/dist/server/preview.d.ts +9 -7
  70. package/dist/server/preview.js +53 -25
  71. package/dist/server/reload.d.ts +11 -0
  72. package/dist/server/reload.js +34 -5
  73. package/dist/server/review-guard.js +4 -8
  74. package/dist/server/review.js +14 -23
  75. package/dist/server/routes/agents.d.ts +2 -0
  76. package/dist/server/routes/agents.js +25 -0
  77. package/dist/server/routes/auth.js +17 -12
  78. package/dist/server/routes/config.js +9 -2
  79. package/dist/server/routes/docs.js +2 -2
  80. package/dist/server/routes/helpers.js +3 -2
  81. package/dist/server/routes/index.d.ts +1 -0
  82. package/dist/server/routes/index.js +1 -0
  83. package/dist/server/routes/info.js +3 -0
  84. package/dist/server/routes/notify.js +2 -2
  85. package/dist/server/routes/release.d.ts +13 -0
  86. package/dist/server/routes/release.js +83 -0
  87. package/dist/server/routes/service.d.ts +25 -0
  88. package/dist/server/routes/service.js +62 -0
  89. package/dist/server/routes/tasks.d.ts +32 -0
  90. package/dist/server/routes/tasks.js +358 -148
  91. package/dist/server/routes/types.d.ts +7 -0
  92. package/dist/server/routes/ui.js +2 -2
  93. package/dist/server/server.js +149 -28
  94. package/dist/server/skill-suggestions.d.ts +222 -0
  95. package/dist/server/skill-suggestions.js +627 -0
  96. package/dist/server/system.d.ts +1 -1
  97. package/dist/server/task-check.js +4 -2
  98. package/dist/server/write.d.ts +4 -0
  99. package/dist/server/write.js +17 -1
  100. package/dist/ui/assets/AgentsView-CKT4t7th.css +1 -0
  101. package/dist/ui/assets/AgentsView-Dl4vvY2_.js +1 -0
  102. package/dist/ui/assets/ContextView-BjwM5xoY.js +4 -0
  103. package/dist/ui/assets/{ContextView-D3TC-RSp.css → ContextView-TVoMpCso.css} +1 -1
  104. package/dist/ui/assets/DashboardView-24xLzQn5.js +1 -0
  105. package/dist/ui/assets/{DashboardView-Ck9o0RP2.css → DashboardView-CRdYYcWz.css} +1 -1
  106. package/dist/ui/assets/DeploymentsView-D43M8zkp.js +1 -0
  107. package/dist/ui/assets/DiffView-COhR1P-a.css +1 -0
  108. package/dist/ui/assets/DiffView-FuqdhCWQ.js +2 -0
  109. package/dist/ui/assets/InputsView-BJ4MbPN0.js +1 -0
  110. package/dist/ui/assets/InputsView-oTB_RUkL.css +1 -0
  111. package/dist/ui/assets/{LoginView-DRMjCnGr.js → LoginView-YDUuuNnS.js} +1 -1
  112. package/dist/ui/assets/ReleasesView-D-xVP571.js +3 -0
  113. package/dist/ui/assets/SettingsView-iBTgAqaE.js +3 -0
  114. package/dist/ui/assets/SettingsView-tL4SoVW8.css +1 -0
  115. package/dist/ui/assets/{WorkView-DMYL2s3W.css → WorkView-CAdwvLu1.css} +1 -1
  116. package/dist/ui/assets/WorkView-DLgLtg2V.js +1 -0
  117. package/dist/ui/assets/{abnfDiagram-VCTEODGH-B3HDyW1L.js → abnfDiagram-VCTEODGH-DPqpqTy5.js} +1 -1
  118. package/dist/ui/assets/api-Dic4Uw1D.js +1 -0
  119. package/dist/ui/assets/architecture-7GRP2DOG-wD_U38P8.js +1 -0
  120. package/dist/ui/assets/{architectureDiagram-5GKGNRK7-CF1NMjye.js → architectureDiagram-5GKGNRK7-CIDQQ6XV.js} +1 -1
  121. package/dist/ui/assets/{blockDiagram-I7D4REHJ-NN5i_rnJ.js → blockDiagram-I7D4REHJ-DqZFpX8Q.js} +1 -1
  122. package/dist/ui/assets/button-CWZu0-iU.js +1 -0
  123. package/dist/ui/assets/{c4Diagram-7LVT6UL2-CIIOAuP6.js → c4Diagram-7LVT6UL2-pDpB6ffs.js} +1 -1
  124. package/dist/ui/assets/channel-Da9L8FRd.js +1 -0
  125. package/dist/ui/assets/{chunk-4HAMMTFA-l4djRUYV.js → chunk-4HAMMTFA-B1d8wkop.js} +1 -1
  126. package/dist/ui/assets/{chunk-75Z2AOVW-DyrFYAG_.js → chunk-75Z2AOVW-CWJLkCtL.js} +1 -1
  127. package/dist/ui/assets/{chunk-DU6HZSFF-CItRm7J1.js → chunk-DU6HZSFF-DsKrwkNI.js} +1 -1
  128. package/dist/ui/assets/{chunk-F27PBJKO-DaczqqTE.js → chunk-F27PBJKO-f905wcEi.js} +1 -1
  129. package/dist/ui/assets/{chunk-GMAD6QVW-CB0tZHa7.js → chunk-GMAD6QVW-CceBq1iu.js} +1 -1
  130. package/dist/ui/assets/{chunk-GVQU2GXP-C-cDJVm0.js → chunk-GVQU2GXP-DUSgZzgc.js} +1 -1
  131. package/dist/ui/assets/{chunk-IMKFNOWR-OA75ThJF.js → chunk-IMKFNOWR-OhGUhaWS.js} +1 -1
  132. package/dist/ui/assets/{chunk-L3NEJ4N5-CBE4DSCk.js → chunk-L3NEJ4N5-DPHn_oGy.js} +1 -1
  133. package/dist/ui/assets/{chunk-OSK3NFVY-BuXhb1_B.js → chunk-OSK3NFVY-B63-bIWk.js} +1 -1
  134. package/dist/ui/assets/{chunk-P2QGCYS3-BGBBMTyP.js → chunk-P2QGCYS3-BdJ1YcCd.js} +1 -1
  135. package/dist/ui/assets/{chunk-POPQ4Y6H-D0ZTnRsC.js → chunk-POPQ4Y6H-CJbNVNwF.js} +1 -1
  136. package/dist/ui/assets/{chunk-PWAF6VOD-ByX-zr35.js → chunk-PWAF6VOD-CNouC5bV.js} +1 -1
  137. package/dist/ui/assets/{chunk-SHT3W25Y-Bh_gkUMX.js → chunk-SHT3W25Y-BZTaa-Kf.js} +1 -1
  138. package/dist/ui/assets/{chunk-SVP7TREG-DW3_jpLk.js → chunk-SVP7TREG-DqSFUiOt.js} +1 -1
  139. package/dist/ui/assets/{chunk-TICWLB2K-DdzwBMkK.js → chunk-TICWLB2K-BrDOAaza.js} +1 -1
  140. package/dist/ui/assets/classDiagram-ZZMXUADV-1Z25SOdJ.js +1 -0
  141. package/dist/ui/assets/classDiagram-v2-VYDZK3BY-1Z25SOdJ.js +1 -0
  142. package/dist/ui/assets/{cynefin-OW5HDTMX-HRsrbC5X.js → cynefin-OW5HDTMX-BulVep4K.js} +1 -1
  143. package/dist/ui/assets/{cynefinDiagram-5FMLGOSQ-BygrCWJt.js → cynefinDiagram-5FMLGOSQ-Dhh-eCbO.js} +1 -1
  144. package/dist/ui/assets/{dagre-GXQ25YYZ-unKY8vsX.js → dagre-GXQ25YYZ-KsL08dFG.js} +1 -1
  145. package/dist/ui/assets/{diagram-S7CK7UJ4-bBTGuKeX.js → diagram-S7CK7UJ4-BmJZx8o1.js} +1 -1
  146. package/dist/ui/assets/{diagram-UQ7AKVKN-DhSz2err.js → diagram-UQ7AKVKN-BOnSqzgH.js} +1 -1
  147. package/dist/ui/assets/{diagram-VSXAHHWV-D_1IlJ5N.js → diagram-VSXAHHWV-5SuigqJz.js} +1 -1
  148. package/dist/ui/assets/{diagram-VX7I27RA-DcJu9i5Y.js → diagram-VX7I27RA-Dver1NHT.js} +1 -1
  149. package/dist/ui/assets/{diagram-Z3DM3KII-BegKxxS3.js → diagram-Z3DM3KII-gG61Ou2E.js} +1 -1
  150. package/dist/ui/assets/{ebnfDiagram-PWID7BFC-B2W_iiID.js → ebnfDiagram-PWID7BFC-Cj7UixlZ.js} +1 -1
  151. package/dist/ui/assets/{erDiagram-RLTQ6QDP-DgQmNV6c.js → erDiagram-RLTQ6QDP-gptj191Z.js} +1 -1
  152. package/dist/ui/assets/eventmodeling-NTZA5JFV-CFuFGO_7.js +1 -0
  153. package/dist/ui/assets/flowDiagram-HODETNUW-DK9ZmZ6I.js +1 -0
  154. package/dist/ui/assets/{ganttDiagram-EL5Y4UJY-1Q0-GyM3.js → ganttDiagram-EL5Y4UJY-C-k5hu6A.js} +1 -1
  155. package/dist/ui/assets/{gitGraph-4MIJSDKK-BR7WCjO-.js → gitGraph-4MIJSDKK-CGOrneoE.js} +1 -1
  156. package/dist/ui/assets/{gitGraphDiagram-WWUBYQGX-yNQ1AZdE.js → gitGraphDiagram-WWUBYQGX-XJWp5pbf.js} +1 -1
  157. package/dist/ui/assets/index-COMZ2Wdm.js +27 -0
  158. package/dist/ui/assets/index-C_iaRuyV.css +1 -0
  159. package/dist/ui/assets/{info-A6RAGUB7-CqP9o5kc.js → info-A6RAGUB7-DOl-xe0x.js} +1 -1
  160. package/dist/ui/assets/{infoDiagram-27XIBGKW-CQXLSaWm.js → infoDiagram-27XIBGKW-l3o0cYjj.js} +1 -1
  161. package/dist/ui/assets/{ishikawaDiagram-5VMMS53U-B9xRfvdR.js → ishikawaDiagram-5VMMS53U-B1NauCQq.js} +1 -1
  162. package/dist/ui/assets/{journeyDiagram-3NMN7TZE-CLecupNd.js → journeyDiagram-3NMN7TZE-dBIA3nBV.js} +1 -1
  163. package/dist/ui/assets/{kanban-definition-UXKFOSKX-Bgh0O41s.js → kanban-definition-UXKFOSKX-DwNS0OHs.js} +1 -1
  164. package/dist/ui/assets/{line-D-TkCLYl.js → line-Dbmiiwnv.js} +1 -1
  165. package/dist/ui/assets/{mermaid-parser.core-DuQ04aZW.js → mermaid-parser.core-C4YyLudQ.js} +3 -3
  166. package/dist/ui/assets/{mermaid.core-BBpIvweb.js → mermaid.core-Ba_OGTSz.js} +4 -4
  167. package/dist/ui/assets/{mindmap-definition-YA3MSWOX-DSHjdhEw.js → mindmap-definition-YA3MSWOX-Dh7I3b3_.js} +1 -1
  168. package/dist/ui/assets/{packet-AYTQ26CC-BDfW3rtB.js → packet-AYTQ26CC-B0Q3gRTD.js} +1 -1
  169. package/dist/ui/assets/{pegDiagram-XKGWAZYB-rMIAYGZz.js → pegDiagram-XKGWAZYB-B8YG99Cd.js} +1 -1
  170. package/dist/ui/assets/{pie-WAS4IAKB-DfYZwArG.js → pie-WAS4IAKB-CUlBHTvR.js} +1 -1
  171. package/dist/ui/assets/{pieDiagram-E7YTZNPT-CuQsR7e8.js → pieDiagram-E7YTZNPT-BnZqUDkM.js} +1 -1
  172. package/dist/ui/assets/{quadrantDiagram-AXDQQJYC-Dt2tyjxB.js → quadrantDiagram-AXDQQJYC-DcUwOkYQ.js} +1 -1
  173. package/dist/ui/assets/{radar-RG4KPBEZ-DVzWY-M9.js → radar-RG4KPBEZ-HF5xGmaW.js} +1 -1
  174. package/dist/ui/assets/{railroad-74A4TZTK-Cu6stMtw.js → railroad-74A4TZTK-BTk1PkNr.js} +1 -1
  175. package/dist/ui/assets/railroad-abnf-HS5TGJTU-DM2GUVFR.js +1 -0
  176. package/dist/ui/assets/railroad-ebnf-LZEXJU2U-PC05P78D.js +1 -0
  177. package/dist/ui/assets/railroad-peg-WCYAUIDC-TPiCukJe.js +1 -0
  178. package/dist/ui/assets/{railroadDiagram-O6MQD6OU-DdPLKXLv.js → railroadDiagram-O6MQD6OU-Bkp0Ch0g.js} +1 -1
  179. package/dist/ui/assets/{requirementDiagram-BXWQKSXE-Ced7kyzl.js → requirementDiagram-BXWQKSXE-CLfjDVbv.js} +1 -1
  180. package/dist/ui/assets/{sankeyDiagram-P5KCCOFB-O7BvVpMl.js → sankeyDiagram-P5KCCOFB-DKwhpNDg.js} +1 -1
  181. package/dist/ui/assets/{sequenceDiagram-WJ2MYXX4-CcgW2ANH.js → sequenceDiagram-WJ2MYXX4-Cnp7GvpQ.js} +1 -1
  182. package/dist/ui/assets/{stateDiagram-D77RDMKH-9LFja-bW.js → stateDiagram-D77RDMKH-DsqdUH-h.js} +1 -1
  183. package/dist/ui/assets/stateDiagram-v2-MP3YSRHH-CSd5puL-.js +1 -0
  184. package/dist/ui/assets/{swimlanes-42K2YHIH--Qka2jcY.js → swimlanes-42K2YHIH-2dKHkIfx.js} +1 -1
  185. package/dist/ui/assets/swimlanesDiagram-VR7AAH4N-Be1y9KaM.js +8 -0
  186. package/dist/ui/assets/{timeline-definition-24CTP7MA-Ddok2Czn.js → timeline-definition-24CTP7MA-DsEfLZLN.js} +1 -1
  187. package/dist/ui/assets/{treeView-Q6P3EWNA-CsnID5mj.js → treeView-Q6P3EWNA-Dv0KgKnC.js} +1 -1
  188. package/dist/ui/assets/{treemap-WGGIJYW6-BLo8xcAp.js → treemap-WGGIJYW6-CP6HeYD3.js} +1 -1
  189. package/dist/ui/assets/vendor-ui-BsjpmGE7.js +3 -0
  190. package/dist/ui/assets/{vennDiagram-4TSXK5OY-mHJwXX5J.js → vennDiagram-4TSXK5OY-XmwE5O7F.js} +1 -1
  191. package/dist/ui/assets/{wardley-WFR3VGLG-DKxzocuy.js → wardley-WFR3VGLG-4hmMSweq.js} +1 -1
  192. package/dist/ui/assets/{wardleyDiagram-VM6X3IG4-DSraOQ5a.js → wardleyDiagram-VM6X3IG4-Ch9Qr3LE.js} +1 -1
  193. package/dist/ui/assets/{xychartDiagram-S5SC5T6Z-DvcL8eBl.js → xychartDiagram-S5SC5T6Z-CDHgQsZE.js} +1 -1
  194. package/dist/ui/index.html +7 -4
  195. package/dist/ui/sw.js +2 -2
  196. package/package.json +2 -3
  197. package/dist/commands/screenshots.d.ts +0 -7
  198. package/dist/commands/screenshots.js +0 -77
  199. package/dist/ui/assets/AgentsView-7zA87rTf.js +0 -1
  200. package/dist/ui/assets/AgentsView-CdTKjw_Y.css +0 -1
  201. package/dist/ui/assets/ContextView-MigaqOfe.js +0 -4
  202. package/dist/ui/assets/DashboardView-Dcrwlrwn.js +0 -1
  203. package/dist/ui/assets/DeploymentsView-DxCQsZvb.js +0 -1
  204. package/dist/ui/assets/InputsView-BLb7GHtx.css +0 -1
  205. package/dist/ui/assets/InputsView-C1A3fbei.js +0 -1
  206. package/dist/ui/assets/ReleasesView-jG4d0Mo5.js +0 -3
  207. package/dist/ui/assets/SettingsView-CA-NYSMK.css +0 -1
  208. package/dist/ui/assets/SettingsView-w8HbTZnf.js +0 -3
  209. package/dist/ui/assets/WorkView-BURSyjUL.js +0 -1
  210. package/dist/ui/assets/architecture-7GRP2DOG-B-YNUE4u.js +0 -1
  211. package/dist/ui/assets/button-lbikqSph.js +0 -1
  212. package/dist/ui/assets/channel-ByPPwpr0.js +0 -1
  213. package/dist/ui/assets/classDiagram-ZZMXUADV-Dl8H1P8I.js +0 -1
  214. package/dist/ui/assets/classDiagram-v2-VYDZK3BY-Dl8H1P8I.js +0 -1
  215. package/dist/ui/assets/eventmodeling-NTZA5JFV-DG7FAHfq.js +0 -1
  216. package/dist/ui/assets/flowDiagram-HODETNUW-BW1KIkAC.js +0 -1
  217. package/dist/ui/assets/index-BqPcSMLi.css +0 -1
  218. package/dist/ui/assets/index-KCn__xLG.js +0 -26
  219. package/dist/ui/assets/railroad-abnf-HS5TGJTU-D05JnF_u.js +0 -1
  220. package/dist/ui/assets/railroad-ebnf-LZEXJU2U-Dwp8jJ0X.js +0 -1
  221. package/dist/ui/assets/railroad-peg-WCYAUIDC-lqOiNYZz.js +0 -1
  222. package/dist/ui/assets/stateDiagram-v2-MP3YSRHH-DkIUWCT9.js +0 -1
  223. package/dist/ui/assets/swimlanesDiagram-VR7AAH4N-D_VVVLM0.js +0 -8
  224. package/dist/ui/assets/vendor-ui-DPm7zLxi.js +0 -3
package/README.md CHANGED
@@ -11,7 +11,7 @@ It is **not** a Jira/Linear replacement bolted onto your repo. It is the
11
11
  connective tissue for an AI-native workflow: humans define and review work,
12
12
  agents read the same files as full context and execute against the repo.
13
13
  RepoOS directly spawns and manages coding agents in isolated worktrees,
14
- streams their output, and keeps humans as the sign-off gate.
14
+ streams their output, and leaves merge decisions with humans.
15
15
 
16
16
  ```
17
17
  the repo ──▶ source of truth (markdown + git)
@@ -33,8 +33,8 @@ RepoOS doesn't just host tasks that agents read — it spawns and manages the
33
33
  agents themselves. You configure a coding agent on the Agents page, click Start
34
34
  on a task, and RepoOS launches the agent in a dedicated git worktree, streams
35
35
  its output live, and lets you resume the conversation at any point. When the
36
- agent finishes, the task moves to review for human sign-off. Agents are
37
- first-class participants, but humans always hold the gate.
36
+ agent finishes, the task moves to review for human approval. Agents are
37
+ first-class participants, but people decide what merges.
38
38
 
39
39
  ## Install
40
40
 
@@ -46,12 +46,18 @@ Install the standalone `repoos` command. This is the quickest option when you
46
46
  want a self-contained release build:
47
47
 
48
48
  ```bash
49
- curl -fsSL https://repoos.org/install.sh | bash
49
+ curl -fsSL https://repoos.org/install | bash
50
50
  ```
51
51
 
52
52
  It runs on Bun when available (recommended), otherwise requires Node.js >=
53
53
  20.6.0. It installs to `~/.repoos` and links `repoos` into `~/.local/bin`.
54
54
 
55
+ ### Homebrew
56
+
57
+ ```bash
58
+ brew install repo-os/tap/repoos
59
+ ```
60
+
55
61
  ### npm
56
62
 
57
63
  ```bash
@@ -82,8 +88,9 @@ is enabled so its `repoos` shim is on your PATH.
82
88
 
83
89
  Use the same tool to update a package-manager install: `npm update -g
84
90
  @repo-os/repoos`, `bun update -g @repo-os/repoos`, `pnpm update -g
85
- @repo-os/repoos`, or `mise upgrade npm:@repo-os/repoos`. A standalone install
86
- updates with `repoos upgrade` and removes with `repoos uninstall`.
91
+ @repo-os/repoos`, `mise upgrade npm:@repo-os/repoos`, or `brew upgrade
92
+ repo-os/tap/repoos`. A standalone install updates with `repoos upgrade` and
93
+ removes with `repoos uninstall`.
87
94
 
88
95
  Then in any repo:
89
96
 
@@ -117,7 +124,7 @@ repoos mv <id> <status> Move a task (inbox|ready|active|review|done)
117
124
  repoos new "<title>" [flags] Create a task
118
125
  repoos index [--json] Rebuild the derived index (--json for agents/tools)
119
126
  repoos serve [--port N] Start the local server: live API + SSE event stream
120
- repoos check Definition-of-done gate (build, typecheck, tests, UI smoke)
127
+ repoos check Pre-merge checks (build, typecheck, tests, UI smoke)
121
128
  repoos tunnel [subcommand] Cloudflare Tunnel + Zero Trust publishing
122
129
  ```
123
130
 
@@ -280,7 +287,7 @@ RepoOS can spawn and manage coding agents (opencode, Claude Code, Qwen, Codex)
280
287
  to execute tasks. Agents run in isolated git worktrees per task so parallel work
281
288
  never collides. Output streams over SSE in real time, and the per-task chat tab
282
289
  lets you resume a session mid-flight. When the agent finishes, the task moves to
283
- review — human sign-off is always the gate.
290
+ review — a human decides whether it is ready to merge.
284
291
 
285
292
  Configure agents on the Agents page: choose the CLI, pick a model (sourced live
286
293
  from `opencode models`), add custom instructions, and set up PM and reviewer
@@ -1,4 +1,4 @@
1
1
  {
2
- "hash": "40cbf1a936a6c7d01b3c026edb4c1f0e467ccde03cf750787fb59239f65ad2e2",
3
- "version": "0.5.46"
2
+ "hash": "9b6f7f703e729021650ce8768748ad02cc51078cfee42e1c4cc328f5ea177dad",
3
+ "version": "0.5.47"
4
4
  }
@@ -1,3 +1,3 @@
1
1
  {
2
- "generatedAt": "2026-09-17T10:50:35.067Z"
2
+ "generatedAt": "2026-09-19T09:11:14.500Z"
3
3
  }
package/dist/cli/index.js CHANGED
@@ -14,6 +14,7 @@ import { cmdTunnel } from "../commands/tunnel.js";
14
14
  import { cmdUpgrade } from "../commands/upgrade.js";
15
15
  import { cmdUninstall } from "../commands/uninstall.js";
16
16
  import { cmdStatus } from "../commands/status.js";
17
+ import { cmdService } from "../commands/service.js";
17
18
  import { checkBuild } from "../core/build.js";
18
19
  import { loadConfig } from "../core/config.js";
19
20
  import { reexecUnderBunIfRequested } from "../core/runtime.js";
@@ -49,7 +50,72 @@ function readVersion() {
49
50
  return "0.0.0-dev";
50
51
  }
51
52
  const VERSION = readVersion();
53
+ // Column where COMMANDS descriptions start, measured from the start of the
54
+ // command text (not counting the leading 4-space indent). Wide enough for
55
+ // the longest single-line entry ("gc [--yes|--dry-run]", 21 chars) plus a
56
+ // 2-space gap. Kept as one constant (rather than hand-counted spaces per
57
+ // line) so every row stays aligned when an entry is added or renamed.
58
+ const CMD_COL = 23;
59
+ const CMD_INDENT = " ".repeat(4 + CMD_COL);
60
+ /**
61
+ * A COMMANDS row: `cmd` is plain text (for width math), `desc` may contain
62
+ * ANSI codes. Callers join rows with `"\n "` — the 4-space indent lives
63
+ * in the join separator (and the template literal for the first row), not
64
+ * here, so a row must not add its own leading indent.
65
+ */
66
+ function cmdRow(cmd, desc) {
67
+ if (cmd.length >= CMD_COL) {
68
+ // Too long to share a line with its description — command on its own
69
+ // line, description indented to the same column as every other row.
70
+ return `${c.cyan(cmd)}\n${CMD_INDENT}${desc}`;
71
+ }
72
+ return `${c.cyan(cmd)}${" ".repeat(CMD_COL - cmd.length)}${desc}`;
73
+ }
74
+ // Column where trailing `# comment`s line up in the EXAMPLES block below.
75
+ const EX_COL = 28;
76
+ /** An EXAMPLES row; see cmdRow's doc comment re: indentation living in the join. */
77
+ function exRow(cmd, comment) {
78
+ if (!comment)
79
+ return `${c.dim("$")} ${cmd}`;
80
+ const pad = " ".repeat(Math.max(1, EX_COL - cmd.length));
81
+ return `${c.dim("$")} ${cmd}${pad}${c.dim("# " + comment)}`;
82
+ }
52
83
  function help() {
84
+ const commandLines = [
85
+ cmdRow("check", "Full definition-of-done: build, typecheck, tests, UI smoke check"),
86
+ cmdRow("init [name]", "Scaffold work/, repoos.toml, AGENTS.md; outside a git repo runs a guided flow that can launch the web console"),
87
+ cmdRow("list [status]", `Show the board (or one column: ${c.dim("inbox|ready|active|review|done")})`),
88
+ cmdRow("status [--json]", "One-screen health snapshot: server, build freshness, board, worktrees, tunnel, git"),
89
+ cmdRow("show <id>", "Show a task's full spec"),
90
+ cmdRow("mv <id> <status>", `Move a task to a new status — never merges code ${c.dim('flags: --note "...", --force-not-merged')}`),
91
+ cmdRow('note <id> "<text>"', "Append a free-form note to a task's activity log"),
92
+ cmdRow("update <id>", `Edit a task's metadata/body ${c.dim("flags: --title --area --priority --type --body --branch --assigned-to")}`),
93
+ cmdRow('new "<title>"', `Create a task ${c.dim("flags: --ai --type --area --priority --body")}`),
94
+ cmdRow('new-doc "<desc>"', "Create a document from a description via PM agent"),
95
+ cmdRow("index [--json]", "Rebuild the derived index cache"),
96
+ cmdRow("gc [--yes|--dry-run]", "Collect leaked task worktrees/branches (done/absent tasks, integrate candidates)"),
97
+ cmdRow("serve [--port N]", "Start the local server (live API + SSE stream)"),
98
+ cmdRow("stop [--port N]", "Stop this repo's serve process (by its own lockfile)"),
99
+ cmdRow("service [sub]", `Manage background services ${c.dim("list|status|install|start|stop|restart|enable|disable|remove")}`),
100
+ cmdRow("tunnel <sub>", `Publish local apps via Cloudflare Tunnel + Zero Trust ${c.dim("(setup|create|allow|deny|rename|destroy|start|install|stop|list|status)")}`),
101
+ cmdRow("upgrade [--channel beta|canary|rc]", `Self-update a standalone (curl-installed) repoos to the latest release\n${CMD_INDENT}(stable by default; --channel tracks a prerelease line instead)`),
102
+ cmdRow("uninstall [--yes]", "Remove the standalone (curl-installed) repoos from this machine"),
103
+ ].join("\n ");
104
+ const exampleLines = [
105
+ exRow("repoos init"),
106
+ exRow("repoos init myproject", "guided new-project flow outside a git repo"),
107
+ exRow('repoos new "Add company dashboard" --ai --type feature --area web --priority p1'),
108
+ exRow('repoos new-doc "API design doc for the payment system"'),
109
+ exRow("repoos mv 0012 active"),
110
+ exRow('repoos mv 0012 active --note "Fix the regression in checkout; see review"'),
111
+ exRow('repoos note 0012 "Handle the reviewer\'s suggestions before the next review"'),
112
+ exRow('repoos update 0012 --title "New title" --area web'),
113
+ exRow("repoos list ready"),
114
+ exRow("repoos status", "one-screen health snapshot"),
115
+ exRow("repoos status --json", "machine-readable, for agents/tools"),
116
+ exRow("repoos index --json", "machine-readable, for agents/tools"),
117
+ exRow("repoos serve", "live API + SSE at http://127.0.0.1:7171"),
118
+ ].join("\n ");
53
119
  console.log(`
54
120
  ${c.bold(c.cyan("RepoOS"))} ${c.dim("v" + VERSION)} — the repo is the operating system
55
121
 
@@ -57,40 +123,10 @@ function help() {
57
123
  repoos <command> [args]
58
124
 
59
125
  ${c.bold("COMMANDS")}
60
- ${c.cyan("check")} Full definition-of-done: build, typecheck, tests, UI smoke check
61
- ${c.cyan("init")} [name] Scaffold work/, repoos.toml, AGENTS.md; outside a git repo runs a guided flow that can launch the web console
62
- ${c.cyan("list")} [status] Show the board (or one column: ${c.dim("inbox|ready|active|review|done")})
63
- ${c.cyan("status")} [--json] One-screen health snapshot: server, build freshness, board, worktrees, tunnel, git
64
- ${c.cyan("show")} <id> Show a task's full spec
65
- ${c.cyan("mv")} <id> <status> Move a task to a new status ${c.dim('flags: --note "..."')}
66
- ${c.cyan("note")} <id> "<text>" Append a free-form note to a task's activity log
67
- ${c.cyan("update")} <id> Edit a task's metadata/body ${c.dim("flags: --title --area --priority --type --body --branch --assigned-to")}
68
- ${c.cyan("new")} "<title>" Create a task ${c.dim("flags: --ai --type --area --priority --body")}
69
- ${c.cyan("new-doc")} "<desc>" Create a document from a description via PM agent
70
- ${c.cyan("index")} [--json] Rebuild the derived index cache
71
- ${c.cyan("gc")} [--yes|--dry-run] Collect leaked task worktrees/branches (done/absent tasks, integrate candidates)
72
- ${c.cyan("serve")} [--port N] Start the local server (live API + SSE stream)
73
- ${c.cyan("stop")} [--port N] Stop this repo's serve process (by its own lockfile)
74
- ${c.cyan("tunnel")} <sub> Publish local apps via Cloudflare Tunnel + Zero Trust ${c.dim("(setup|create|allow|deny|rename|destroy|start|install|stop|list|status)")}
75
- ${c.cyan("upgrade")} [--channel beta|canary|rc]
76
- Self-update a standalone (curl-installed) repoos to the latest release
77
- (stable by default; --channel tracks a prerelease line instead)
78
- ${c.cyan("uninstall")} [--yes] Remove the standalone (curl-installed) repoos from this machine
126
+ ${commandLines}
79
127
 
80
128
  ${c.bold("EXAMPLES")}
81
- ${c.dim("$")} repoos init
82
- ${c.dim("$")} repoos init myproject # guided new-project flow outside a git repo
83
- ${c.dim("$")} repoos new "Add company dashboard" --ai --type feature --area web --priority p1
84
- ${c.dim("$")} repoos new-doc "API design doc for the payment system"
85
- ${c.dim("$")} repoos mv 0012 active
86
- ${c.dim("$")} repoos mv 0012 active --note "Fix the regression in checkout; see review"
87
- ${c.dim("$")} repoos note 0012 "Handle the reviewer's suggestions before the next review"
88
- ${c.dim("$")} repoos update 0012 --title "New title" --area web
89
- ${c.dim("$")} repoos list ready
90
- ${c.dim("$")} repoos status ${c.dim("# one-screen health snapshot")}
91
- ${c.dim("$")} repoos status --json ${c.dim("# machine-readable, for agents/tools")}
92
- ${c.dim("$")} repoos index --json ${c.dim("# machine-readable, for agents/tools")}
93
- ${c.dim("$")} repoos serve ${c.dim("# live API + SSE at http://127.0.0.1:7171")}
129
+ ${exampleLines}
94
130
  `);
95
131
  }
96
132
  function main() {
@@ -160,12 +196,15 @@ function main() {
160
196
  case "mv":
161
197
  case "move": {
162
198
  let note;
199
+ let force = false;
163
200
  const args = rest.slice();
164
201
  for (let i = 0; i < args.length; i++) {
165
202
  if (args[i] === "--note")
166
203
  note = args[++i];
204
+ else if (args[i] === "--force-not-merged")
205
+ force = true;
167
206
  }
168
- cmdMv(args[0], args[1], note);
207
+ cmdMv(args[0], args[1], note, { force });
169
208
  break;
170
209
  }
171
210
  case "note":
@@ -195,6 +234,9 @@ function main() {
195
234
  case "stop":
196
235
  cmdStop(rest);
197
236
  break;
237
+ case "service":
238
+ void cmdService(rest);
239
+ break;
198
240
  case "check":
199
241
  void cmdCheck();
200
242
  break;
@@ -1114,7 +1114,11 @@ export async function cmdCheck() {
1114
1114
  // `bun run test` off this machine — and then invoke the LOCAL `repoos check`
1115
1115
  // with REPOOS_SKIP_TESTS=1 for only the cheap static guards + UI smoke.
1116
1116
  // Standalone `repoos check` never sets it, so the CLI gate is unchanged.
1117
- if (process.env.REPOOS_SKIP_TESTS === "1") {
1117
+ if (fmtLintFailed) {
1118
+ console.log(c.dim(" · Skipped — formatting/lint failed above, so build was skipped too"));
1119
+ results.push(pass("tests", "skipped — formatting/lint failed, fix and rerun"));
1120
+ }
1121
+ else if (process.env.REPOOS_SKIP_TESTS === "1") {
1118
1122
  console.log(c.dim(" · Skipped — test suite ran on the remote validation runner (REPOOS_SKIP_TESTS=1)"));
1119
1123
  results.push(pass("tests", "skipped — ran on the remote validation runner"));
1120
1124
  }
@@ -1,9 +1,34 @@
1
- type ScaffoldLayout = "root" | "repoos";
1
+ /** Marker makes the optional existing-repo addition safe to offer repeatedly. */
2
+ export declare const REPOOS_AGENTS_SECTION_MARKER = "<!-- repoos:managed-instructions -->";
3
+ /**
4
+ * A deliberately small appendix for a repository that already owns its agent
5
+ * instructions. RepoOS supplies its managed-runner instructions itself; this
6
+ * only documents the project-level contract that a human or external agent
7
+ * should see in the repo.
8
+ */
9
+ export declare const REPOOS_AGENTS_SECTION: (workDir: string) => string;
10
+ /**
11
+ * Return the exact addition that `repoos init` may offer for an existing
12
+ * AGENTS.md, or null when this repository already documents RepoOS.
13
+ */
14
+ export declare function repoOSAgentsSectionAddition(existing: string, workDir?: string): string | null;
15
+ /**
16
+ * A namespace string: empty string or "/" means repo root; anything else is a
17
+ * repo-relative subdirectory (e.g. "repoos", ".meta/repoos").
18
+ */
19
+ type ScaffoldLayout = string;
2
20
  /** Which starter task to seed beyond 0001 — a blank project or an existing repo. */
3
21
  type ScaffoldKind = "new" | "existing";
4
22
  export declare function scaffoldInto(root: string, description: string, layout?: ScaffoldLayout, kind?: ScaffoldKind): {
5
23
  created: string[];
6
24
  skipped: string[];
7
25
  };
26
+ /**
27
+ * Validate a user-supplied namespace string. Returns null when the input means
28
+ * "repo root" (the special `/` or empty), a normalized repo-relative path when
29
+ * valid, or an error message prefixed with `!` when invalid. The caller
30
+ * distinguishes valid from error by checking `result.startsWith("!")`.
31
+ */
32
+ export declare function validateNamespace(input: string): string;
8
33
  export declare function cmdInit(args: string[]): Promise<void>;
9
34
  export {};