@repo-os/repoos 0.5.45 → 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 (226) hide show
  1. package/README.md +54 -8
  2. package/dist/.build-info.json +2 -2
  3. package/dist/.build-stamp.json +1 -1
  4. package/dist/cli/index.js +80 -32
  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/commands/uninstall.d.ts +13 -0
  18. package/dist/commands/uninstall.js +111 -0
  19. package/dist/core/agent-updates.d.ts +38 -0
  20. package/dist/core/agent-updates.js +203 -0
  21. package/dist/core/board-columns.test.d.ts +1 -0
  22. package/dist/core/board-columns.test.js +175 -0
  23. package/dist/core/check-results.d.ts +38 -0
  24. package/dist/core/check-results.js +176 -0
  25. package/dist/core/config.d.ts +33 -1
  26. package/dist/core/config.js +187 -0
  27. package/dist/core/detect.d.ts +50 -0
  28. package/dist/core/detect.js +136 -4
  29. package/dist/core/git.d.ts +24 -1
  30. package/dist/core/git.js +132 -18
  31. package/dist/core/models.d.ts +14 -0
  32. package/dist/core/models.js +104 -5
  33. package/dist/core/providers/spend.d.ts +1 -1
  34. package/dist/core/providers/spend.js +69 -5
  35. package/dist/core/repoos.d.ts +2 -0
  36. package/dist/core/repoos.js +2 -1
  37. package/dist/core/review-verdict.d.ts +25 -0
  38. package/dist/core/review-verdict.js +51 -0
  39. package/dist/core/review-verdict.test.d.ts +1 -0
  40. package/dist/core/review-verdict.test.js +40 -0
  41. package/dist/core/service-manager.d.ts +187 -0
  42. package/dist/core/service-manager.js +925 -0
  43. package/dist/core/service-manager.test.d.ts +1 -0
  44. package/dist/core/service-manager.test.js +372 -0
  45. package/dist/core/task.js +10 -0
  46. package/dist/core/types.d.ts +59 -0
  47. package/dist/core/worktree-gc.js +9 -5
  48. package/dist/server/agents.d.ts +181 -23
  49. package/dist/server/agents.js +1234 -56
  50. package/dist/server/auto-engineering.js +1 -1
  51. package/dist/server/auto-fix-gate.d.ts +64 -0
  52. package/dist/server/auto-fix-gate.js +220 -0
  53. package/dist/server/built-in-agent-runner.d.ts +103 -0
  54. package/dist/server/built-in-agent-runner.js +410 -0
  55. package/dist/server/built-in-agent-skill-docs.d.ts +36 -0
  56. package/dist/server/built-in-agent-skill-docs.js +306 -0
  57. package/dist/server/built-in-agents.d.ts +130 -40
  58. package/dist/server/built-in-agents.js +533 -801
  59. package/dist/server/done.js +9 -9
  60. package/dist/server/freeform-runs.d.ts +103 -0
  61. package/dist/server/freeform-runs.js +427 -0
  62. package/dist/server/freeform.js +11 -1
  63. package/dist/server/handoff.d.ts +1 -1
  64. package/dist/server/handoff.js +1 -1
  65. package/dist/server/integration-job.d.ts +21 -0
  66. package/dist/server/integration-job.js +7 -0
  67. package/dist/server/integration-orchestrator.d.ts +40 -0
  68. package/dist/server/integration-orchestrator.js +311 -88
  69. package/dist/server/live-index.d.ts +2 -0
  70. package/dist/server/live-index.js +3 -0
  71. package/dist/server/preview.d.ts +9 -7
  72. package/dist/server/preview.js +53 -25
  73. package/dist/server/reload.d.ts +11 -0
  74. package/dist/server/reload.js +34 -5
  75. package/dist/server/review-guard.js +4 -8
  76. package/dist/server/review.js +14 -23
  77. package/dist/server/routes/agents.d.ts +2 -0
  78. package/dist/server/routes/agents.js +25 -0
  79. package/dist/server/routes/auth.js +17 -12
  80. package/dist/server/routes/config.js +9 -2
  81. package/dist/server/routes/docs.js +2 -2
  82. package/dist/server/routes/helpers.js +3 -2
  83. package/dist/server/routes/index.d.ts +1 -0
  84. package/dist/server/routes/index.js +1 -0
  85. package/dist/server/routes/info.js +3 -0
  86. package/dist/server/routes/notify.js +2 -2
  87. package/dist/server/routes/release.d.ts +13 -0
  88. package/dist/server/routes/release.js +83 -0
  89. package/dist/server/routes/service.d.ts +25 -0
  90. package/dist/server/routes/service.js +62 -0
  91. package/dist/server/routes/tasks.d.ts +32 -0
  92. package/dist/server/routes/tasks.js +358 -148
  93. package/dist/server/routes/types.d.ts +7 -0
  94. package/dist/server/routes/ui.js +2 -2
  95. package/dist/server/server.js +149 -28
  96. package/dist/server/skill-suggestions.d.ts +222 -0
  97. package/dist/server/skill-suggestions.js +627 -0
  98. package/dist/server/system.d.ts +1 -1
  99. package/dist/server/task-check.js +4 -2
  100. package/dist/server/write.d.ts +4 -0
  101. package/dist/server/write.js +17 -1
  102. package/dist/ui/assets/AgentsView-CKT4t7th.css +1 -0
  103. package/dist/ui/assets/AgentsView-Dl4vvY2_.js +1 -0
  104. package/dist/ui/assets/ContextView-BjwM5xoY.js +4 -0
  105. package/dist/ui/assets/{ContextView-D3TC-RSp.css → ContextView-TVoMpCso.css} +1 -1
  106. package/dist/ui/assets/DashboardView-24xLzQn5.js +1 -0
  107. package/dist/ui/assets/{DashboardView-Ck9o0RP2.css → DashboardView-CRdYYcWz.css} +1 -1
  108. package/dist/ui/assets/DeploymentsView-D43M8zkp.js +1 -0
  109. package/dist/ui/assets/DiffView-COhR1P-a.css +1 -0
  110. package/dist/ui/assets/DiffView-FuqdhCWQ.js +2 -0
  111. package/dist/ui/assets/InputsView-BJ4MbPN0.js +1 -0
  112. package/dist/ui/assets/InputsView-oTB_RUkL.css +1 -0
  113. package/dist/ui/assets/{LoginView-BqupI0Lt.js → LoginView-YDUuuNnS.js} +1 -1
  114. package/dist/ui/assets/ReleasesView-D-xVP571.js +3 -0
  115. package/dist/ui/assets/SettingsView-iBTgAqaE.js +3 -0
  116. package/dist/ui/assets/SettingsView-tL4SoVW8.css +1 -0
  117. package/dist/ui/assets/{WorkView-DMYL2s3W.css → WorkView-CAdwvLu1.css} +1 -1
  118. package/dist/ui/assets/WorkView-DLgLtg2V.js +1 -0
  119. package/dist/ui/assets/{abnfDiagram-VCTEODGH-J5lkSnEE.js → abnfDiagram-VCTEODGH-DPqpqTy5.js} +1 -1
  120. package/dist/ui/assets/api-Dic4Uw1D.js +1 -0
  121. package/dist/ui/assets/architecture-7GRP2DOG-wD_U38P8.js +1 -0
  122. package/dist/ui/assets/{architectureDiagram-5GKGNRK7-C3k89uKX.js → architectureDiagram-5GKGNRK7-CIDQQ6XV.js} +1 -1
  123. package/dist/ui/assets/{blockDiagram-I7D4REHJ-AWNoBzop.js → blockDiagram-I7D4REHJ-DqZFpX8Q.js} +1 -1
  124. package/dist/ui/assets/button-CWZu0-iU.js +1 -0
  125. package/dist/ui/assets/{c4Diagram-7LVT6UL2-DKG1D5gd.js → c4Diagram-7LVT6UL2-pDpB6ffs.js} +1 -1
  126. package/dist/ui/assets/channel-Da9L8FRd.js +1 -0
  127. package/dist/ui/assets/{chunk-4HAMMTFA-D1YR8lF_.js → chunk-4HAMMTFA-B1d8wkop.js} +1 -1
  128. package/dist/ui/assets/{chunk-75Z2AOVW-5GuBxfsL.js → chunk-75Z2AOVW-CWJLkCtL.js} +1 -1
  129. package/dist/ui/assets/{chunk-DU6HZSFF-DfdNNqwa.js → chunk-DU6HZSFF-DsKrwkNI.js} +1 -1
  130. package/dist/ui/assets/{chunk-F27PBJKO-BPZzinQ4.js → chunk-F27PBJKO-f905wcEi.js} +1 -1
  131. package/dist/ui/assets/{chunk-GMAD6QVW-DGWvSKj5.js → chunk-GMAD6QVW-CceBq1iu.js} +1 -1
  132. package/dist/ui/assets/{chunk-GVQU2GXP-D6Aw75wJ.js → chunk-GVQU2GXP-DUSgZzgc.js} +1 -1
  133. package/dist/ui/assets/{chunk-IMKFNOWR-B8mMBKCW.js → chunk-IMKFNOWR-OhGUhaWS.js} +1 -1
  134. package/dist/ui/assets/{chunk-L3NEJ4N5-D5OJuXYE.js → chunk-L3NEJ4N5-DPHn_oGy.js} +1 -1
  135. package/dist/ui/assets/{chunk-OSK3NFVY-B7r9w2UW.js → chunk-OSK3NFVY-B63-bIWk.js} +1 -1
  136. package/dist/ui/assets/{chunk-P2QGCYS3-C74X4AQX.js → chunk-P2QGCYS3-BdJ1YcCd.js} +1 -1
  137. package/dist/ui/assets/{chunk-POPQ4Y6H-C5_u1gUS.js → chunk-POPQ4Y6H-CJbNVNwF.js} +1 -1
  138. package/dist/ui/assets/{chunk-PWAF6VOD-DfoTLtxn.js → chunk-PWAF6VOD-CNouC5bV.js} +1 -1
  139. package/dist/ui/assets/{chunk-SHT3W25Y-D40m2eqz.js → chunk-SHT3W25Y-BZTaa-Kf.js} +1 -1
  140. package/dist/ui/assets/{chunk-SVP7TREG-euxi0Kap.js → chunk-SVP7TREG-DqSFUiOt.js} +1 -1
  141. package/dist/ui/assets/{chunk-TICWLB2K-fkdxngzN.js → chunk-TICWLB2K-BrDOAaza.js} +1 -1
  142. package/dist/ui/assets/classDiagram-ZZMXUADV-1Z25SOdJ.js +1 -0
  143. package/dist/ui/assets/classDiagram-v2-VYDZK3BY-1Z25SOdJ.js +1 -0
  144. package/dist/ui/assets/{cynefin-OW5HDTMX-B5m_COsS.js → cynefin-OW5HDTMX-BulVep4K.js} +1 -1
  145. package/dist/ui/assets/{cynefinDiagram-5FMLGOSQ-C-AG6CGe.js → cynefinDiagram-5FMLGOSQ-Dhh-eCbO.js} +1 -1
  146. package/dist/ui/assets/{dagre-GXQ25YYZ-DDfDnp8L.js → dagre-GXQ25YYZ-KsL08dFG.js} +1 -1
  147. package/dist/ui/assets/{diagram-S7CK7UJ4-DjQZAlEY.js → diagram-S7CK7UJ4-BmJZx8o1.js} +1 -1
  148. package/dist/ui/assets/{diagram-UQ7AKVKN-DAZ9yp1B.js → diagram-UQ7AKVKN-BOnSqzgH.js} +1 -1
  149. package/dist/ui/assets/{diagram-VSXAHHWV-BWepUKJD.js → diagram-VSXAHHWV-5SuigqJz.js} +1 -1
  150. package/dist/ui/assets/{diagram-VX7I27RA-EcV1J81b.js → diagram-VX7I27RA-Dver1NHT.js} +1 -1
  151. package/dist/ui/assets/{diagram-Z3DM3KII-Dbz7XU_K.js → diagram-Z3DM3KII-gG61Ou2E.js} +1 -1
  152. package/dist/ui/assets/{ebnfDiagram-PWID7BFC-BUyQw8Mm.js → ebnfDiagram-PWID7BFC-Cj7UixlZ.js} +1 -1
  153. package/dist/ui/assets/{erDiagram-RLTQ6QDP-WVf8ukKt.js → erDiagram-RLTQ6QDP-gptj191Z.js} +1 -1
  154. package/dist/ui/assets/eventmodeling-NTZA5JFV-CFuFGO_7.js +1 -0
  155. package/dist/ui/assets/flowDiagram-HODETNUW-DK9ZmZ6I.js +1 -0
  156. package/dist/ui/assets/{ganttDiagram-EL5Y4UJY-rB4MZuB-.js → ganttDiagram-EL5Y4UJY-C-k5hu6A.js} +1 -1
  157. package/dist/ui/assets/{gitGraph-4MIJSDKK-BOTWM8dY.js → gitGraph-4MIJSDKK-CGOrneoE.js} +1 -1
  158. package/dist/ui/assets/{gitGraphDiagram-WWUBYQGX-eYscuhtP.js → gitGraphDiagram-WWUBYQGX-XJWp5pbf.js} +1 -1
  159. package/dist/ui/assets/index-COMZ2Wdm.js +27 -0
  160. package/dist/ui/assets/index-C_iaRuyV.css +1 -0
  161. package/dist/ui/assets/{info-A6RAGUB7-_67wOORe.js → info-A6RAGUB7-DOl-xe0x.js} +1 -1
  162. package/dist/ui/assets/{infoDiagram-27XIBGKW-XVXbddTA.js → infoDiagram-27XIBGKW-l3o0cYjj.js} +1 -1
  163. package/dist/ui/assets/{ishikawaDiagram-5VMMS53U-ClLNiEru.js → ishikawaDiagram-5VMMS53U-B1NauCQq.js} +1 -1
  164. package/dist/ui/assets/{journeyDiagram-3NMN7TZE-NRawjR6i.js → journeyDiagram-3NMN7TZE-dBIA3nBV.js} +1 -1
  165. package/dist/ui/assets/{kanban-definition-UXKFOSKX-BgSzBfIx.js → kanban-definition-UXKFOSKX-DwNS0OHs.js} +1 -1
  166. package/dist/ui/assets/{line-KAyfuul4.js → line-Dbmiiwnv.js} +1 -1
  167. package/dist/ui/assets/{mermaid-parser.core-CgXZk1iN.js → mermaid-parser.core-C4YyLudQ.js} +3 -3
  168. package/dist/ui/assets/{mermaid.core-BUUkChHW.js → mermaid.core-Ba_OGTSz.js} +4 -4
  169. package/dist/ui/assets/{mindmap-definition-YA3MSWOX-Cpn7vW4r.js → mindmap-definition-YA3MSWOX-Dh7I3b3_.js} +1 -1
  170. package/dist/ui/assets/{packet-AYTQ26CC-0lZwM-d6.js → packet-AYTQ26CC-B0Q3gRTD.js} +1 -1
  171. package/dist/ui/assets/{pegDiagram-XKGWAZYB-impy0inn.js → pegDiagram-XKGWAZYB-B8YG99Cd.js} +1 -1
  172. package/dist/ui/assets/{pie-WAS4IAKB-CqfdGHYg.js → pie-WAS4IAKB-CUlBHTvR.js} +1 -1
  173. package/dist/ui/assets/{pieDiagram-E7YTZNPT-CxjL4I1h.js → pieDiagram-E7YTZNPT-BnZqUDkM.js} +1 -1
  174. package/dist/ui/assets/{quadrantDiagram-AXDQQJYC-Cjd1QMIe.js → quadrantDiagram-AXDQQJYC-DcUwOkYQ.js} +1 -1
  175. package/dist/ui/assets/{radar-RG4KPBEZ-CRkQIwiv.js → radar-RG4KPBEZ-HF5xGmaW.js} +1 -1
  176. package/dist/ui/assets/{railroad-74A4TZTK-i67XSWTB.js → railroad-74A4TZTK-BTk1PkNr.js} +1 -1
  177. package/dist/ui/assets/railroad-abnf-HS5TGJTU-DM2GUVFR.js +1 -0
  178. package/dist/ui/assets/railroad-ebnf-LZEXJU2U-PC05P78D.js +1 -0
  179. package/dist/ui/assets/railroad-peg-WCYAUIDC-TPiCukJe.js +1 -0
  180. package/dist/ui/assets/{railroadDiagram-O6MQD6OU-_pK0qyaY.js → railroadDiagram-O6MQD6OU-Bkp0Ch0g.js} +1 -1
  181. package/dist/ui/assets/{requirementDiagram-BXWQKSXE-CRrFX-yw.js → requirementDiagram-BXWQKSXE-CLfjDVbv.js} +1 -1
  182. package/dist/ui/assets/{sankeyDiagram-P5KCCOFB-X_xFRj9E.js → sankeyDiagram-P5KCCOFB-DKwhpNDg.js} +1 -1
  183. package/dist/ui/assets/{sequenceDiagram-WJ2MYXX4-Byb49lKf.js → sequenceDiagram-WJ2MYXX4-Cnp7GvpQ.js} +1 -1
  184. package/dist/ui/assets/{stateDiagram-D77RDMKH-CzaPrqYF.js → stateDiagram-D77RDMKH-DsqdUH-h.js} +1 -1
  185. package/dist/ui/assets/stateDiagram-v2-MP3YSRHH-CSd5puL-.js +1 -0
  186. package/dist/ui/assets/{swimlanes-42K2YHIH-Cx_1lnqr.js → swimlanes-42K2YHIH-2dKHkIfx.js} +1 -1
  187. package/dist/ui/assets/swimlanesDiagram-VR7AAH4N-Be1y9KaM.js +8 -0
  188. package/dist/ui/assets/{timeline-definition-24CTP7MA-B1IbZPQ-.js → timeline-definition-24CTP7MA-DsEfLZLN.js} +1 -1
  189. package/dist/ui/assets/{treeView-Q6P3EWNA-DFWhVE3d.js → treeView-Q6P3EWNA-Dv0KgKnC.js} +1 -1
  190. package/dist/ui/assets/{treemap-WGGIJYW6-BmbYPThn.js → treemap-WGGIJYW6-CP6HeYD3.js} +1 -1
  191. package/dist/ui/assets/vendor-ui-BsjpmGE7.js +3 -0
  192. package/dist/ui/assets/{vennDiagram-4TSXK5OY-Ae2AtRpt.js → vennDiagram-4TSXK5OY-XmwE5O7F.js} +1 -1
  193. package/dist/ui/assets/{wardley-WFR3VGLG-BtD4X4tL.js → wardley-WFR3VGLG-4hmMSweq.js} +1 -1
  194. package/dist/ui/assets/{wardleyDiagram-VM6X3IG4-B3YN2fTd.js → wardleyDiagram-VM6X3IG4-Ch9Qr3LE.js} +1 -1
  195. package/dist/ui/assets/{xychartDiagram-S5SC5T6Z-CIzJfMKA.js → xychartDiagram-S5SC5T6Z-CDHgQsZE.js} +1 -1
  196. package/dist/ui/index.html +7 -4
  197. package/dist/ui/sw.js +2 -2
  198. package/package.json +2 -3
  199. package/dist/commands/screenshots.d.ts +0 -7
  200. package/dist/commands/screenshots.js +0 -77
  201. package/dist/ui/assets/AgentsView-CF4wRvHh.css +0 -1
  202. package/dist/ui/assets/AgentsView-D-myL-kA.js +0 -1
  203. package/dist/ui/assets/ContextView-DsOqAdyE.js +0 -4
  204. package/dist/ui/assets/DashboardView-BOhsIJqO.js +0 -1
  205. package/dist/ui/assets/DeploymentsView-DXu_FYR2.js +0 -1
  206. package/dist/ui/assets/InputsView-24HVbVPk.js +0 -1
  207. package/dist/ui/assets/InputsView-BLb7GHtx.css +0 -1
  208. package/dist/ui/assets/ReleasesView-CAgMuxpe.js +0 -3
  209. package/dist/ui/assets/SettingsView-CA-NYSMK.css +0 -1
  210. package/dist/ui/assets/SettingsView-O3iZSnjg.js +0 -3
  211. package/dist/ui/assets/WorkView-D8Tl6qwy.js +0 -1
  212. package/dist/ui/assets/architecture-7GRP2DOG-pLdFt-xS.js +0 -1
  213. package/dist/ui/assets/button-lbikqSph.js +0 -1
  214. package/dist/ui/assets/channel-gA4qBv3A.js +0 -1
  215. package/dist/ui/assets/classDiagram-ZZMXUADV-BzW8bq2P.js +0 -1
  216. package/dist/ui/assets/classDiagram-v2-VYDZK3BY-BzW8bq2P.js +0 -1
  217. package/dist/ui/assets/eventmodeling-NTZA5JFV-DHqyLOAn.js +0 -1
  218. package/dist/ui/assets/flowDiagram-HODETNUW-CYk_ze5K.js +0 -1
  219. package/dist/ui/assets/index-BACBfnga.css +0 -1
  220. package/dist/ui/assets/index-BOQ-ust6.js +0 -26
  221. package/dist/ui/assets/railroad-abnf-HS5TGJTU-Cv9m5aS3.js +0 -1
  222. package/dist/ui/assets/railroad-ebnf-LZEXJU2U-C5ZIn-Jh.js +0 -1
  223. package/dist/ui/assets/railroad-peg-WCYAUIDC-CGra9Oq-.js +0 -1
  224. package/dist/ui/assets/stateDiagram-v2-MP3YSRHH-BCXckz7K.js +0 -1
  225. package/dist/ui/assets/swimlanesDiagram-VR7AAH4N-54qsKi6A.js +0 -8
  226. 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,18 +33,64 @@ 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
 
41
- Install a standalone `repoos` command straight from GitHub Releases:
41
+ Choose one installation method:
42
+
43
+ ### curl
44
+
45
+ Install the standalone `repoos` command. This is the quickest option when you
46
+ want a self-contained release build:
47
+
48
+ ```bash
49
+ curl -fsSL https://repoos.org/install | bash
50
+ ```
51
+
52
+ It runs on Bun when available (recommended), otherwise requires Node.js >=
53
+ 20.6.0. It installs to `~/.repoos` and links `repoos` into `~/.local/bin`.
54
+
55
+ ### Homebrew
56
+
57
+ ```bash
58
+ brew install repo-os/tap/repoos
59
+ ```
60
+
61
+ ### npm
62
+
63
+ ```bash
64
+ npm install -g @repo-os/repoos
65
+ ```
66
+
67
+ ### Bun
68
+
69
+ ```bash
70
+ bun add -g @repo-os/repoos
71
+ ```
72
+
73
+ ### pnpm
74
+
75
+ ```bash
76
+ pnpm add -g @repo-os/repoos
77
+ ```
78
+
79
+ ### mise
42
80
 
43
81
  ```bash
44
- curl -fsSL https://raw.githubusercontent.com/repo-os/repoos/main/install.sh | bash
82
+ mise use --global npm:@repo-os/repoos
45
83
  ```
46
84
 
47
- Runs on Bun when it's installed (recommended); otherwise requires Node.js >= 20.6.0. Installs to `~/.repoos` and links `repoos` into `~/.local/bin`.
85
+ This uses mise's built-in npm backend and records RepoOS in your global mise
86
+ configuration. Make sure [mise shell activation](https://mise.jdx.dev/getting-started.html)
87
+ is enabled so its `repoos` shim is on your PATH.
88
+
89
+ Use the same tool to update a package-manager install: `npm update -g
90
+ @repo-os/repoos`, `bun update -g @repo-os/repoos`, `pnpm update -g
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`.
48
94
 
49
95
  Then in any repo:
50
96
 
@@ -78,7 +124,7 @@ repoos mv <id> <status> Move a task (inbox|ready|active|review|done)
78
124
  repoos new "<title>" [flags] Create a task
79
125
  repoos index [--json] Rebuild the derived index (--json for agents/tools)
80
126
  repoos serve [--port N] Start the local server: live API + SSE event stream
81
- repoos check Definition-of-done gate (build, typecheck, tests, UI smoke)
127
+ repoos check Pre-merge checks (build, typecheck, tests, UI smoke)
82
128
  repoos tunnel [subcommand] Cloudflare Tunnel + Zero Trust publishing
83
129
  ```
84
130
 
@@ -241,7 +287,7 @@ RepoOS can spawn and manage coding agents (opencode, Claude Code, Qwen, Codex)
241
287
  to execute tasks. Agents run in isolated git worktrees per task so parallel work
242
288
  never collides. Output streams over SSE in real time, and the per-task chat tab
243
289
  lets you resume a session mid-flight. When the agent finishes, the task moves to
244
- review — human sign-off is always the gate.
290
+ review — a human decides whether it is ready to merge.
245
291
 
246
292
  Configure agents on the Agents page: choose the CLI, pick a model (sourced live
247
293
  from `opencode models`), add custom instructions, and set up PM and reviewer
@@ -1,4 +1,4 @@
1
1
  {
2
- "hash": "e49c2d85116e21cce445444e46ba4c7961583ce35dcf49707db0d41c623126d2",
3
- "version": "0.5.44"
2
+ "hash": "9b6f7f703e729021650ce8768748ad02cc51078cfee42e1c4cc328f5ea177dad",
3
+ "version": "0.5.47"
4
4
  }
@@ -1,3 +1,3 @@
1
1
  {
2
- "generatedAt": "2026-09-17T08:36:35.890Z"
2
+ "generatedAt": "2026-09-19T09:11:14.500Z"
3
3
  }
package/dist/cli/index.js CHANGED
@@ -12,7 +12,9 @@ import { cmdServe, serveProcessTitle, setServeProcessTitle } from "../commands/s
12
12
  import { cmdStop } from "../commands/stop.js";
13
13
  import { cmdTunnel } from "../commands/tunnel.js";
14
14
  import { cmdUpgrade } from "../commands/upgrade.js";
15
+ import { cmdUninstall } from "../commands/uninstall.js";
15
16
  import { cmdStatus } from "../commands/status.js";
17
+ import { cmdService } from "../commands/service.js";
16
18
  import { checkBuild } from "../core/build.js";
17
19
  import { loadConfig } from "../core/config.js";
18
20
  import { reexecUnderBunIfRequested } from "../core/runtime.js";
@@ -48,7 +50,72 @@ function readVersion() {
48
50
  return "0.0.0-dev";
49
51
  }
50
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
+ }
51
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 ");
52
119
  console.log(`
53
120
  ${c.bold(c.cyan("RepoOS"))} ${c.dim("v" + VERSION)} — the repo is the operating system
54
121
 
@@ -56,39 +123,10 @@ function help() {
56
123
  repoos <command> [args]
57
124
 
58
125
  ${c.bold("COMMANDS")}
59
- ${c.cyan("check")} Full definition-of-done: build, typecheck, tests, UI smoke check
60
- ${c.cyan("init")} [name] Scaffold work/, repoos.toml, AGENTS.md; outside a git repo runs a guided flow that can launch the web console
61
- ${c.cyan("list")} [status] Show the board (or one column: ${c.dim("inbox|ready|active|review|done")})
62
- ${c.cyan("status")} [--json] One-screen health snapshot: server, build freshness, board, worktrees, tunnel, git
63
- ${c.cyan("show")} <id> Show a task's full spec
64
- ${c.cyan("mv")} <id> <status> Move a task to a new status ${c.dim('flags: --note "..."')}
65
- ${c.cyan("note")} <id> "<text>" Append a free-form note to a task's activity log
66
- ${c.cyan("update")} <id> Edit a task's metadata/body ${c.dim("flags: --title --area --priority --type --body --branch --assigned-to")}
67
- ${c.cyan("new")} "<title>" Create a task ${c.dim("flags: --ai --type --area --priority --body")}
68
- ${c.cyan("new-doc")} "<desc>" Create a document from a description via PM agent
69
- ${c.cyan("index")} [--json] Rebuild the derived index cache
70
- ${c.cyan("gc")} [--yes|--dry-run] Collect leaked task worktrees/branches (done/absent tasks, integrate candidates)
71
- ${c.cyan("serve")} [--port N] Start the local server (live API + SSE stream)
72
- ${c.cyan("stop")} [--port N] Stop this repo's serve process (by its own lockfile)
73
- ${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)")}
74
- ${c.cyan("upgrade")} [--channel beta|canary|rc]
75
- Self-update a standalone (curl-installed) repoos to the latest release
76
- (stable by default; --channel tracks a prerelease line instead)
126
+ ${commandLines}
77
127
 
78
128
  ${c.bold("EXAMPLES")}
79
- ${c.dim("$")} repoos init
80
- ${c.dim("$")} repoos init myproject # guided new-project flow outside a git repo
81
- ${c.dim("$")} repoos new "Add company dashboard" --ai --type feature --area web --priority p1
82
- ${c.dim("$")} repoos new-doc "API design doc for the payment system"
83
- ${c.dim("$")} repoos mv 0012 active
84
- ${c.dim("$")} repoos mv 0012 active --note "Fix the regression in checkout; see review"
85
- ${c.dim("$")} repoos note 0012 "Handle the reviewer's suggestions before the next review"
86
- ${c.dim("$")} repoos update 0012 --title "New title" --area web
87
- ${c.dim("$")} repoos list ready
88
- ${c.dim("$")} repoos status ${c.dim("# one-screen health snapshot")}
89
- ${c.dim("$")} repoos status --json ${c.dim("# machine-readable, for agents/tools")}
90
- ${c.dim("$")} repoos index --json ${c.dim("# machine-readable, for agents/tools")}
91
- ${c.dim("$")} repoos serve ${c.dim("# live API + SSE at http://127.0.0.1:7171")}
129
+ ${exampleLines}
92
130
  `);
93
131
  }
94
132
  function main() {
@@ -121,6 +159,7 @@ function main() {
121
159
  "--help",
122
160
  "-h",
123
161
  "upgrade",
162
+ "uninstall",
124
163
  ]);
125
164
  if (!skipCheck.has(cmd)) {
126
165
  const result = checkBuild();
@@ -157,12 +196,15 @@ function main() {
157
196
  case "mv":
158
197
  case "move": {
159
198
  let note;
199
+ let force = false;
160
200
  const args = rest.slice();
161
201
  for (let i = 0; i < args.length; i++) {
162
202
  if (args[i] === "--note")
163
203
  note = args[++i];
204
+ else if (args[i] === "--force-not-merged")
205
+ force = true;
164
206
  }
165
- cmdMv(args[0], args[1], note);
207
+ cmdMv(args[0], args[1], note, { force });
166
208
  break;
167
209
  }
168
210
  case "note":
@@ -192,6 +234,9 @@ function main() {
192
234
  case "stop":
193
235
  cmdStop(rest);
194
236
  break;
237
+ case "service":
238
+ void cmdService(rest);
239
+ break;
195
240
  case "check":
196
241
  void cmdCheck();
197
242
  break;
@@ -201,6 +246,9 @@ function main() {
201
246
  case "upgrade":
202
247
  void cmdUpgrade(rest);
203
248
  break;
249
+ case "uninstall":
250
+ void cmdUninstall(rest);
251
+ break;
204
252
  case "version":
205
253
  case "--version":
206
254
  case "-v":
@@ -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 {};