@repo-os/repoos 0.5.45

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 (362) hide show
  1. package/LICENSE.md +110 -0
  2. package/README.md +272 -0
  3. package/dist/.build-info.json +4 -0
  4. package/dist/.build-stamp.json +3 -0
  5. package/dist/cli/colors.d.ts +13 -0
  6. package/dist/cli/colors.js +37 -0
  7. package/dist/cli/index.d.ts +2 -0
  8. package/dist/cli/index.js +221 -0
  9. package/dist/commands/check.d.ts +170 -0
  10. package/dist/commands/check.js +1227 -0
  11. package/dist/commands/docs.d.ts +2 -0
  12. package/dist/commands/docs.js +70 -0
  13. package/dist/commands/gc.d.ts +1 -0
  14. package/dist/commands/gc.js +57 -0
  15. package/dist/commands/init.d.ts +9 -0
  16. package/dist/commands/init.js +699 -0
  17. package/dist/commands/screenshots.d.ts +7 -0
  18. package/dist/commands/screenshots.js +77 -0
  19. package/dist/commands/serve.d.ts +55 -0
  20. package/dist/commands/serve.js +204 -0
  21. package/dist/commands/status.d.ts +140 -0
  22. package/dist/commands/status.js +569 -0
  23. package/dist/commands/stop.d.ts +1 -0
  24. package/dist/commands/stop.js +59 -0
  25. package/dist/commands/tasks.d.ts +47 -0
  26. package/dist/commands/tasks.js +334 -0
  27. package/dist/commands/tunnel.d.ts +1 -0
  28. package/dist/commands/tunnel.js +1271 -0
  29. package/dist/commands/ui-harness.d.ts +53 -0
  30. package/dist/commands/ui-harness.js +62 -0
  31. package/dist/commands/ui-smoke.d.ts +6 -0
  32. package/dist/commands/ui-smoke.js +220 -0
  33. package/dist/commands/upgrade.d.ts +15 -0
  34. package/dist/commands/upgrade.js +188 -0
  35. package/dist/core/auth-store.d.ts +81 -0
  36. package/dist/core/auth-store.js +530 -0
  37. package/dist/core/auth.d.ts +75 -0
  38. package/dist/core/auth.js +124 -0
  39. package/dist/core/bootstrap.d.ts +41 -0
  40. package/dist/core/bootstrap.js +236 -0
  41. package/dist/core/build.d.ts +92 -0
  42. package/dist/core/build.js +249 -0
  43. package/dist/core/canary.d.ts +10 -0
  44. package/dist/core/canary.js +14 -0
  45. package/dist/core/check-failure-summary.d.ts +10 -0
  46. package/dist/core/check-failure-summary.js +34 -0
  47. package/dist/core/config.d.ts +160 -0
  48. package/dist/core/config.js +1288 -0
  49. package/dist/core/context-pack.d.ts +74 -0
  50. package/dist/core/context-pack.js +778 -0
  51. package/dist/core/db.d.ts +236 -0
  52. package/dist/core/db.js +747 -0
  53. package/dist/core/detect.d.ts +69 -0
  54. package/dist/core/detect.js +251 -0
  55. package/dist/core/docs.d.ts +76 -0
  56. package/dist/core/docs.js +225 -0
  57. package/dist/core/frontmatter.d.ts +29 -0
  58. package/dist/core/frontmatter.js +215 -0
  59. package/dist/core/git.d.ts +505 -0
  60. package/dist/core/git.js +1453 -0
  61. package/dist/core/indexer.d.ts +33 -0
  62. package/dist/core/indexer.js +282 -0
  63. package/dist/core/input.d.ts +66 -0
  64. package/dist/core/input.js +222 -0
  65. package/dist/core/logger.d.ts +70 -0
  66. package/dist/core/logger.js +138 -0
  67. package/dist/core/models.d.ts +45 -0
  68. package/dist/core/models.js +291 -0
  69. package/dist/core/net-probe.d.ts +4 -0
  70. package/dist/core/net-probe.js +20 -0
  71. package/dist/core/providers/deepinfra.d.ts +23 -0
  72. package/dist/core/providers/deepinfra.js +44 -0
  73. package/dist/core/providers/index.d.ts +24 -0
  74. package/dist/core/providers/index.js +59 -0
  75. package/dist/core/providers/openrouter.d.ts +28 -0
  76. package/dist/core/providers/openrouter.js +82 -0
  77. package/dist/core/providers/spend.d.ts +86 -0
  78. package/dist/core/providers/spend.js +286 -0
  79. package/dist/core/providers/types.d.ts +56 -0
  80. package/dist/core/providers/types.js +39 -0
  81. package/dist/core/repoos.d.ts +59 -0
  82. package/dist/core/repoos.js +221 -0
  83. package/dist/core/runtime.d.ts +35 -0
  84. package/dist/core/runtime.js +167 -0
  85. package/dist/core/skills-registry.d.ts +39 -0
  86. package/dist/core/skills-registry.js +148 -0
  87. package/dist/core/skills-registry.test.d.ts +1 -0
  88. package/dist/core/skills-registry.test.js +52 -0
  89. package/dist/core/sysmem.d.ts +7 -0
  90. package/dist/core/sysmem.js +55 -0
  91. package/dist/core/tailscale.d.ts +2 -0
  92. package/dist/core/tailscale.js +19 -0
  93. package/dist/core/task.d.ts +53 -0
  94. package/dist/core/task.js +310 -0
  95. package/dist/core/toml-line.d.ts +20 -0
  96. package/dist/core/toml-line.js +52 -0
  97. package/dist/core/toml-validate.d.ts +44 -0
  98. package/dist/core/toml-validate.js +335 -0
  99. package/dist/core/tunnel-assistant.d.ts +30 -0
  100. package/dist/core/tunnel-assistant.js +65 -0
  101. package/dist/core/tunnel-registry.d.ts +96 -0
  102. package/dist/core/tunnel-registry.js +267 -0
  103. package/dist/core/tunnel-registry.test.d.ts +1 -0
  104. package/dist/core/tunnel-registry.test.js +309 -0
  105. package/dist/core/tunnel.d.ts +103 -0
  106. package/dist/core/tunnel.js +320 -0
  107. package/dist/core/types.d.ts +811 -0
  108. package/dist/core/types.js +27 -0
  109. package/dist/core/worktree-gc.d.ts +57 -0
  110. package/dist/core/worktree-gc.js +194 -0
  111. package/dist/server/__tests__/integration-job.test.d.ts +1 -0
  112. package/dist/server/__tests__/integration-job.test.js +129 -0
  113. package/dist/server/agents.d.ts +1020 -0
  114. package/dist/server/agents.js +4070 -0
  115. package/dist/server/attachments.d.ts +51 -0
  116. package/dist/server/attachments.js +130 -0
  117. package/dist/server/auto-engineering.d.ts +45 -0
  118. package/dist/server/auto-engineering.js +275 -0
  119. package/dist/server/branchless-release.d.ts +22 -0
  120. package/dist/server/branchless-release.js +67 -0
  121. package/dist/server/built-in-agents.d.ts +305 -0
  122. package/dist/server/built-in-agents.js +1838 -0
  123. package/dist/server/cto-monitor.d.ts +35 -0
  124. package/dist/server/cto-monitor.js +281 -0
  125. package/dist/server/cto.d.ts +125 -0
  126. package/dist/server/cto.js +590 -0
  127. package/dist/server/deployments.d.ts +119 -0
  128. package/dist/server/deployments.js +325 -0
  129. package/dist/server/diff-snapshot.d.ts +20 -0
  130. package/dist/server/diff-snapshot.js +73 -0
  131. package/dist/server/done.d.ts +160 -0
  132. package/dist/server/done.js +488 -0
  133. package/dist/server/freeform.d.ts +55 -0
  134. package/dist/server/freeform.js +179 -0
  135. package/dist/server/handoff.d.ts +99 -0
  136. package/dist/server/handoff.js +575 -0
  137. package/dist/server/hetzner.d.ts +45 -0
  138. package/dist/server/hetzner.js +117 -0
  139. package/dist/server/icons.d.ts +8 -0
  140. package/dist/server/icons.js +195 -0
  141. package/dist/server/integration-job.d.ts +75 -0
  142. package/dist/server/integration-job.js +144 -0
  143. package/dist/server/integration-orchestrator.d.ts +211 -0
  144. package/dist/server/integration-orchestrator.js +1299 -0
  145. package/dist/server/integration-status.d.ts +48 -0
  146. package/dist/server/integration-status.js +71 -0
  147. package/dist/server/live-index.d.ts +295 -0
  148. package/dist/server/live-index.js +452 -0
  149. package/dist/server/model-test.d.ts +20 -0
  150. package/dist/server/model-test.js +100 -0
  151. package/dist/server/ntfy.d.ts +57 -0
  152. package/dist/server/ntfy.js +112 -0
  153. package/dist/server/pm-attachments.d.ts +35 -0
  154. package/dist/server/pm-attachments.js +181 -0
  155. package/dist/server/pm-runs.d.ts +58 -0
  156. package/dist/server/pm-runs.js +80 -0
  157. package/dist/server/preview.d.ts +174 -0
  158. package/dist/server/preview.js +641 -0
  159. package/dist/server/release.d.ts +88 -0
  160. package/dist/server/release.js +449 -0
  161. package/dist/server/reload.d.ts +194 -0
  162. package/dist/server/reload.js +586 -0
  163. package/dist/server/remote-validation.d.ts +132 -0
  164. package/dist/server/remote-validation.js +478 -0
  165. package/dist/server/repo-lock.d.ts +36 -0
  166. package/dist/server/repo-lock.js +141 -0
  167. package/dist/server/review-guard.d.ts +14 -0
  168. package/dist/server/review-guard.js +159 -0
  169. package/dist/server/review.d.ts +243 -0
  170. package/dist/server/review.js +1211 -0
  171. package/dist/server/routes/agents.d.ts +6 -0
  172. package/dist/server/routes/agents.js +28 -0
  173. package/dist/server/routes/auth.d.ts +60 -0
  174. package/dist/server/routes/auth.js +755 -0
  175. package/dist/server/routes/config.d.ts +20 -0
  176. package/dist/server/routes/config.js +347 -0
  177. package/dist/server/routes/debugger.d.ts +33 -0
  178. package/dist/server/routes/debugger.js +360 -0
  179. package/dist/server/routes/deployments.d.ts +3 -0
  180. package/dist/server/routes/deployments.js +16 -0
  181. package/dist/server/routes/docs.d.ts +8 -0
  182. package/dist/server/routes/docs.js +135 -0
  183. package/dist/server/routes/helpers.d.ts +21 -0
  184. package/dist/server/routes/helpers.js +171 -0
  185. package/dist/server/routes/index.d.ts +19 -0
  186. package/dist/server/routes/index.js +18 -0
  187. package/dist/server/routes/info.d.ts +17 -0
  188. package/dist/server/routes/info.js +177 -0
  189. package/dist/server/routes/inputs.d.ts +7 -0
  190. package/dist/server/routes/inputs.js +125 -0
  191. package/dist/server/routes/model-providers.d.ts +27 -0
  192. package/dist/server/routes/model-providers.js +94 -0
  193. package/dist/server/routes/models.d.ts +3 -0
  194. package/dist/server/routes/models.js +36 -0
  195. package/dist/server/routes/notify.d.ts +2 -0
  196. package/dist/server/routes/notify.js +17 -0
  197. package/dist/server/routes/playground.d.ts +29 -0
  198. package/dist/server/routes/playground.js +81 -0
  199. package/dist/server/routes/release.d.ts +20 -0
  200. package/dist/server/routes/release.js +86 -0
  201. package/dist/server/routes/router.d.ts +12 -0
  202. package/dist/server/routes/router.js +32 -0
  203. package/dist/server/routes/skill-registry.d.ts +5 -0
  204. package/dist/server/routes/skill-registry.js +51 -0
  205. package/dist/server/routes/tasks.d.ts +58 -0
  206. package/dist/server/routes/tasks.js +1442 -0
  207. package/dist/server/routes/transcribe.d.ts +2 -0
  208. package/dist/server/routes/transcribe.js +124 -0
  209. package/dist/server/routes/types.d.ts +68 -0
  210. package/dist/server/routes/types.js +1 -0
  211. package/dist/server/routes/ui.d.ts +5 -0
  212. package/dist/server/routes/ui.js +81 -0
  213. package/dist/server/routes/utils.d.ts +3 -0
  214. package/dist/server/routes/utils.js +23 -0
  215. package/dist/server/serve-reaper.d.ts +135 -0
  216. package/dist/server/serve-reaper.js +491 -0
  217. package/dist/server/server.d.ts +49 -0
  218. package/dist/server/server.js +2171 -0
  219. package/dist/server/supervisor.d.ts +89 -0
  220. package/dist/server/supervisor.js +231 -0
  221. package/dist/server/system.d.ts +198 -0
  222. package/dist/server/system.js +480 -0
  223. package/dist/server/task-check.d.ts +45 -0
  224. package/dist/server/task-check.js +71 -0
  225. package/dist/server/task-transitions.d.ts +51 -0
  226. package/dist/server/task-transitions.js +78 -0
  227. package/dist/server/task-watchdog.d.ts +158 -0
  228. package/dist/server/task-watchdog.js +681 -0
  229. package/dist/server/test-run.d.ts +28 -0
  230. package/dist/server/test-run.js +81 -0
  231. package/dist/server/watcher.d.ts +21 -0
  232. package/dist/server/watcher.js +194 -0
  233. package/dist/server/write.d.ts +94 -0
  234. package/dist/server/write.js +345 -0
  235. package/dist/ui/assets/AgentsView-CF4wRvHh.css +1 -0
  236. package/dist/ui/assets/AgentsView-D-myL-kA.js +1 -0
  237. package/dist/ui/assets/ContextView-D3TC-RSp.css +1 -0
  238. package/dist/ui/assets/ContextView-DsOqAdyE.js +4 -0
  239. package/dist/ui/assets/DashboardView-BOhsIJqO.js +1 -0
  240. package/dist/ui/assets/DashboardView-Ck9o0RP2.css +1 -0
  241. package/dist/ui/assets/DeploymentsView--iIUVfEH.css +1 -0
  242. package/dist/ui/assets/DeploymentsView-DXu_FYR2.js +1 -0
  243. package/dist/ui/assets/InputsView-24HVbVPk.js +1 -0
  244. package/dist/ui/assets/InputsView-BLb7GHtx.css +1 -0
  245. package/dist/ui/assets/LoginView-6QlGg6cx.css +1 -0
  246. package/dist/ui/assets/LoginView-BqupI0Lt.js +1 -0
  247. package/dist/ui/assets/ReleasesView-BEG1A0YH.css +1 -0
  248. package/dist/ui/assets/ReleasesView-CAgMuxpe.js +3 -0
  249. package/dist/ui/assets/SettingsView-CA-NYSMK.css +1 -0
  250. package/dist/ui/assets/SettingsView-O3iZSnjg.js +3 -0
  251. package/dist/ui/assets/WorkView-D8Tl6qwy.js +1 -0
  252. package/dist/ui/assets/WorkView-DMYL2s3W.css +1 -0
  253. package/dist/ui/assets/abnfDiagram-VCTEODGH-J5lkSnEE.js +1 -0
  254. package/dist/ui/assets/arc-BHZnmhhM.js +1 -0
  255. package/dist/ui/assets/architecture-7GRP2DOG-pLdFt-xS.js +1 -0
  256. package/dist/ui/assets/architectureDiagram-5GKGNRK7-C3k89uKX.js +36 -0
  257. package/dist/ui/assets/array-BifhSqXX.js +1 -0
  258. package/dist/ui/assets/blockDiagram-I7D4REHJ-AWNoBzop.js +129 -0
  259. package/dist/ui/assets/button-lbikqSph.js +1 -0
  260. package/dist/ui/assets/c4Diagram-7LVT6UL2-DKG1D5gd.js +38 -0
  261. package/dist/ui/assets/channel-gA4qBv3A.js +1 -0
  262. package/dist/ui/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  263. package/dist/ui/assets/chunk-4HAMMTFA-D1YR8lF_.js +62 -0
  264. package/dist/ui/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  265. package/dist/ui/assets/chunk-75Z2AOVW-5GuBxfsL.js +2 -0
  266. package/dist/ui/assets/chunk-DU6HZSFF-DfdNNqwa.js +127 -0
  267. package/dist/ui/assets/chunk-F27PBJKO-BPZzinQ4.js +1 -0
  268. package/dist/ui/assets/chunk-FOHPRMQF-l2z4K2jD.js +161 -0
  269. package/dist/ui/assets/chunk-GMAD6QVW-DGWvSKj5.js +72 -0
  270. package/dist/ui/assets/chunk-GVQU2GXP-D6Aw75wJ.js +1 -0
  271. package/dist/ui/assets/chunk-IMKFNOWR-B8mMBKCW.js +231 -0
  272. package/dist/ui/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  273. package/dist/ui/assets/chunk-L3NEJ4N5-D5OJuXYE.js +1 -0
  274. package/dist/ui/assets/chunk-OSK3NFVY-B7r9w2UW.js +10 -0
  275. package/dist/ui/assets/chunk-P2QGCYS3-C74X4AQX.js +1 -0
  276. package/dist/ui/assets/chunk-POPQ4Y6H-C5_u1gUS.js +1 -0
  277. package/dist/ui/assets/chunk-PWAF6VOD-DfoTLtxn.js +1 -0
  278. package/dist/ui/assets/chunk-SHT3W25Y-D40m2eqz.js +168 -0
  279. package/dist/ui/assets/chunk-SVP7TREG-euxi0Kap.js +88 -0
  280. package/dist/ui/assets/chunk-TICWLB2K-fkdxngzN.js +206 -0
  281. package/dist/ui/assets/chunk-XXDRQBXY-DFBUG-OT.js +1 -0
  282. package/dist/ui/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  283. package/dist/ui/assets/classDiagram-ZZMXUADV-BzW8bq2P.js +1 -0
  284. package/dist/ui/assets/classDiagram-v2-VYDZK3BY-BzW8bq2P.js +1 -0
  285. package/dist/ui/assets/cose-bilkent-JH36ORCC-BTcgMon1.js +1 -0
  286. package/dist/ui/assets/cynefin-OW5HDTMX-B5m_COsS.js +1 -0
  287. package/dist/ui/assets/cynefinDiagram-5FMLGOSQ-C-AG6CGe.js +62 -0
  288. package/dist/ui/assets/cytoscape.esm-FBntH-9t.js +321 -0
  289. package/dist/ui/assets/dagre-GXQ25YYZ-DDfDnp8L.js +4 -0
  290. package/dist/ui/assets/dagre-PrKaheQc.js +1 -0
  291. package/dist/ui/assets/defaultLocale-BFoDCU3G.js +1 -0
  292. package/dist/ui/assets/diagram-S7CK7UJ4-DjQZAlEY.js +30 -0
  293. package/dist/ui/assets/diagram-UQ7AKVKN-DAZ9yp1B.js +41 -0
  294. package/dist/ui/assets/diagram-VSXAHHWV-BWepUKJD.js +3 -0
  295. package/dist/ui/assets/diagram-VX7I27RA-EcV1J81b.js +24 -0
  296. package/dist/ui/assets/diagram-Z3DM3KII-Dbz7XU_K.js +24 -0
  297. package/dist/ui/assets/dist-DTg6UBE_.js +1 -0
  298. package/dist/ui/assets/ebnfDiagram-PWID7BFC-BUyQw8Mm.js +1 -0
  299. package/dist/ui/assets/erDiagram-RLTQ6QDP-WVf8ukKt.js +99 -0
  300. package/dist/ui/assets/eventmodeling-NTZA5JFV-DHqyLOAn.js +1 -0
  301. package/dist/ui/assets/flowDiagram-HODETNUW-CYk_ze5K.js +1 -0
  302. package/dist/ui/assets/ganttDiagram-EL5Y4UJY-rB4MZuB-.js +292 -0
  303. package/dist/ui/assets/gitGraph-4MIJSDKK-BOTWM8dY.js +1 -0
  304. package/dist/ui/assets/gitGraphDiagram-WWUBYQGX-eYscuhtP.js +106 -0
  305. package/dist/ui/assets/graphlib-DS17s2tU.js +1 -0
  306. package/dist/ui/assets/index-BACBfnga.css +1 -0
  307. package/dist/ui/assets/index-BOQ-ust6.js +26 -0
  308. package/dist/ui/assets/info-A6RAGUB7-_67wOORe.js +1 -0
  309. package/dist/ui/assets/infoDiagram-27XIBGKW-XVXbddTA.js +2 -0
  310. package/dist/ui/assets/init-C-OQMol4.js +1 -0
  311. package/dist/ui/assets/ishikawaDiagram-5VMMS53U-ClLNiEru.js +70 -0
  312. package/dist/ui/assets/journeyDiagram-3NMN7TZE-NRawjR6i.js +139 -0
  313. package/dist/ui/assets/kanban-definition-UXKFOSKX-BgSzBfIx.js +89 -0
  314. package/dist/ui/assets/katex-DolUETbr.js +257 -0
  315. package/dist/ui/assets/line-KAyfuul4.js +1 -0
  316. package/dist/ui/assets/linear-cCCPOpu7.js +1 -0
  317. package/dist/ui/assets/mermaid-parser.core-CgXZk1iN.js +7 -0
  318. package/dist/ui/assets/mermaid.core-BUUkChHW.js +44 -0
  319. package/dist/ui/assets/mindmap-definition-YA3MSWOX-Cpn7vW4r.js +96 -0
  320. package/dist/ui/assets/ordinal-BDEzSJ7C.js +1 -0
  321. package/dist/ui/assets/packet-AYTQ26CC-0lZwM-d6.js +1 -0
  322. package/dist/ui/assets/path-COt_16Va.js +1 -0
  323. package/dist/ui/assets/pegDiagram-XKGWAZYB-impy0inn.js +1 -0
  324. package/dist/ui/assets/pie-WAS4IAKB-CqfdGHYg.js +1 -0
  325. package/dist/ui/assets/pieDiagram-E7YTZNPT-CxjL4I1h.js +39 -0
  326. package/dist/ui/assets/quadrantDiagram-AXDQQJYC-Cjd1QMIe.js +7 -0
  327. package/dist/ui/assets/radar-RG4KPBEZ-CRkQIwiv.js +1 -0
  328. package/dist/ui/assets/railroad-74A4TZTK-i67XSWTB.js +1 -0
  329. package/dist/ui/assets/railroad-abnf-HS5TGJTU-Cv9m5aS3.js +1 -0
  330. package/dist/ui/assets/railroad-ebnf-LZEXJU2U-C5ZIn-Jh.js +1 -0
  331. package/dist/ui/assets/railroad-peg-WCYAUIDC-CGra9Oq-.js +1 -0
  332. package/dist/ui/assets/railroadDiagram-O6MQD6OU-_pK0qyaY.js +1 -0
  333. package/dist/ui/assets/releases-B0WNV-SY.js +1 -0
  334. package/dist/ui/assets/repoos-cto-square.webp +0 -0
  335. package/dist/ui/assets/repoos-helpful-pm-square.webp +0 -0
  336. package/dist/ui/assets/repoos-orchestrator-square.webp +0 -0
  337. package/dist/ui/assets/repoos-performance-agent-square.webp +0 -0
  338. package/dist/ui/assets/repoos-ross-from-friends-square.webp +0 -0
  339. package/dist/ui/assets/repoos-tech-debt-agent-square.webp +0 -0
  340. package/dist/ui/assets/requirementDiagram-BXWQKSXE-CRrFX-yw.js +84 -0
  341. package/dist/ui/assets/rough.esm-By172zw-.js +1 -0
  342. package/dist/ui/assets/sankeyDiagram-P5KCCOFB-X_xFRj9E.js +40 -0
  343. package/dist/ui/assets/sequenceDiagram-WJ2MYXX4-Byb49lKf.js +162 -0
  344. package/dist/ui/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
  345. package/dist/ui/assets/src-BH-TyZbA.js +1 -0
  346. package/dist/ui/assets/stateDiagram-D77RDMKH-CzaPrqYF.js +1 -0
  347. package/dist/ui/assets/stateDiagram-v2-MP3YSRHH-BCXckz7K.js +1 -0
  348. package/dist/ui/assets/swimlanes-42K2YHIH-Cx_1lnqr.js +1 -0
  349. package/dist/ui/assets/swimlanesDiagram-VR7AAH4N-54qsKi6A.js +8 -0
  350. package/dist/ui/assets/timeline-definition-24CTP7MA-B1IbZPQ-.js +120 -0
  351. package/dist/ui/assets/treeView-Q6P3EWNA-DFWhVE3d.js +1 -0
  352. package/dist/ui/assets/treemap-WGGIJYW6-BmbYPThn.js +1 -0
  353. package/dist/ui/assets/vendor-ui-DPm7zLxi.js +3 -0
  354. package/dist/ui/assets/vendor-vue-CobgyEJp.js +1 -0
  355. package/dist/ui/assets/vennDiagram-4TSXK5OY-Ae2AtRpt.js +34 -0
  356. package/dist/ui/assets/wardley-WFR3VGLG-BtD4X4tL.js +1 -0
  357. package/dist/ui/assets/wardleyDiagram-VM6X3IG4-B3YN2fTd.js +78 -0
  358. package/dist/ui/assets/xychartDiagram-S5SC5T6Z-CIzJfMKA.js +7 -0
  359. package/dist/ui/favicon.svg +11 -0
  360. package/dist/ui/index.html +49 -0
  361. package/dist/ui/sw.js +48 -0
  362. package/package.json +91 -0
package/LICENSE.md ADDED
@@ -0,0 +1,110 @@
1
+ # Functional Source License, Version 1.1, MIT Future License
2
+
3
+ ## Abbreviation
4
+
5
+ FSL-1.1-MIT
6
+
7
+ ## Notice
8
+
9
+ Copyright 2026 Nick Jachowski
10
+
11
+ ## Terms and Conditions
12
+
13
+ ### Licensor ("We")
14
+
15
+ The party offering the Software under these Terms and Conditions.
16
+
17
+ ### The Software
18
+
19
+ The "Software" is each version of the software that we make available under
20
+ these Terms and Conditions, as indicated by our inclusion of these Terms and
21
+ Conditions with the Software.
22
+
23
+ ### License Grant
24
+
25
+ Subject to your compliance with this License Grant and the Patents,
26
+ Redistribution and Trademark clauses below, we hereby grant you the right to
27
+ use, copy, modify, create derivative works, publicly perform, publicly display
28
+ and redistribute the Software for any Permitted Purpose identified below.
29
+
30
+ ### Permitted Purpose
31
+
32
+ A Permitted Purpose is any purpose other than a Competing Use. A Competing Use
33
+ means making the Software available to others in a commercial product or
34
+ service that:
35
+
36
+ 1. substitutes for the Software;
37
+
38
+ 2. substitutes for any other product or service we offer using the Software
39
+ that exists as of the date we make the Software available; or
40
+
41
+ 3. offers the same or substantially similar functionality as the Software.
42
+
43
+ Permitted Purposes specifically include using the Software:
44
+
45
+ 1. for your internal use and access;
46
+
47
+ 2. for non-commercial education;
48
+
49
+ 3. for non-commercial research; and
50
+
51
+ 4. in connection with professional services that you provide to a licensee
52
+ using the Software in accordance with these Terms and Conditions.
53
+
54
+ ### Patents
55
+
56
+ To the extent your use for a Permitted Purpose would necessarily infringe our
57
+ patents, the license grant above includes a license under our patents. If you
58
+ make a claim against any party that the Software infringes or contributes to
59
+ the infringement of any patent, then your patent license to the Software ends
60
+ immediately.
61
+
62
+ ### Redistribution
63
+
64
+ The Terms and Conditions apply to all copies, modifications and derivatives of
65
+ the Software.
66
+
67
+ If you redistribute any copies, modifications or derivatives of the Software,
68
+ you must include a copy of or a link to these Terms and Conditions and not
69
+ remove any copyright notices provided in or with the Software.
70
+
71
+ ### Disclaimer
72
+
73
+ THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR
74
+ IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF FITNESS FOR A PARTICULAR
75
+ PURPOSE, MERCHANTABILITY, TITLE OR NON-INFRINGEMENT.
76
+
77
+ IN NO EVENT WILL WE HAVE ANY LIABILITY TO YOU ARISING OUT OF OR RELATED TO THE
78
+ SOFTWARE, INCLUDING INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
79
+ EVEN IF WE HAVE BEEN INFORMED OF THEIR POSSIBILITY IN ADVANCE.
80
+
81
+ ### Trademarks
82
+
83
+ Except for displaying the License Details and identifying us as the origin of
84
+ the Software, you have no right under these Terms and Conditions to use our
85
+ trademarks, trade names, service marks or product names.
86
+
87
+ ## Grant of Future License
88
+
89
+ We hereby irrevocably grant you an additional license to use the Software under
90
+ the MIT license that is effective on the second anniversary of the date we make
91
+ the Software available. On or after that date, you may use the Software under
92
+ the MIT license, in which case the following will apply:
93
+
94
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
95
+ this software and associated documentation files (the "Software"), to deal in
96
+ the Software without restriction, including without limitation the rights to
97
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
98
+ of the Software, and to permit persons to whom the Software is furnished to do
99
+ so, subject to the following conditions:
100
+
101
+ The above copyright notice and this permission notice shall be included in all
102
+ copies or substantial portions of the Software.
103
+
104
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
105
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
106
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
107
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
108
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
109
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
110
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,272 @@
1
+ # RepoOS
2
+
3
+ **The repo is the operating system.**
4
+
5
+ RepoOS is a lightweight, repo-native way to track work that lives as markdown
6
+ files inside your monorepo. Tasks, specs, bugs, and feature requests are plain
7
+ `.md` files with YAML frontmatter — versioned in git, readable by humans, and
8
+ designed to be consumed directly by AI coding agents.
9
+
10
+ It is **not** a Jira/Linear replacement bolted onto your repo. It is the
11
+ connective tissue for an AI-native workflow: humans define and review work,
12
+ agents read the same files as full context and execute against the repo.
13
+ RepoOS directly spawns and manages coding agents in isolated worktrees,
14
+ streams their output, and keeps humans as the sign-off gate.
15
+
16
+ ```
17
+ the repo ──▶ source of truth (markdown + git)
18
+
19
+ ├─ work/*.md tasks, specs, bugs (status lives in frontmatter)
20
+ ├─ docs/ architecture, ADRs, AGENTS.md
21
+ └─ .repoos/ derived index cache (gitignored, disposable)
22
+ ```
23
+
24
+ ## Why
25
+
26
+ Traditional trackers fragment context away from where agents actually work. The
27
+ friction that historically made "markdown as a task system" lose to Jira was
28
+ *humans* editing YAML — and that's exactly the friction an LLM removes. RepoOS
29
+ leans into that: the task file is the spec the agent reads, the status it
30
+ updates, and the artifact git versions.
31
+
32
+ RepoOS doesn't just host tasks that agents read — it spawns and manages the
33
+ agents themselves. You configure a coding agent on the Agents page, click Start
34
+ on a task, and RepoOS launches the agent in a dedicated git worktree, streams
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.
38
+
39
+ ## Install
40
+
41
+ Install a standalone `repoos` command straight from GitHub Releases:
42
+
43
+ ```bash
44
+ curl -fsSL https://raw.githubusercontent.com/repo-os/repoos/main/install.sh | bash
45
+ ```
46
+
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`.
48
+
49
+ Then in any repo:
50
+
51
+ ```bash
52
+ repoos init # scaffold work/, docs/, repoos.toml, AGENTS.md (idempotent)
53
+ ```
54
+
55
+ Zero config required. `repoos init` walks up to find your repo root, creates the
56
+ folders if missing, adds a sample task, and gitignores the derived cache.
57
+
58
+ ## Core principles
59
+
60
+ 1. **Files are truth.** Every task is a markdown file. Delete the cache, lose
61
+ nothing.
62
+ 2. **Status is a field, not a folder.** `repoos mv 0012 active` edits the
63
+ `status:` frontmatter — the file never moves. No git churn, no merge
64
+ conflicts from two agents touching a queue.
65
+ 3. **The index is derived.** `.repoos/index.json` is a disposable cache,
66
+ rebuilt from files on demand. It exists for fast reads (and the upcoming
67
+ local server), never as a source of truth.
68
+ 4. **Zero runtime dependencies.** Installs instantly; nothing to break.
69
+ 5. **Degrades gracefully.** No git? Still works. No config? Sensible defaults.
70
+
71
+ ## Commands
72
+
73
+ ```bash
74
+ repoos init Scaffold this repo for RepoOS
75
+ repoos list [status] Show the board, or one column
76
+ repoos show <id> Show a task's full spec
77
+ repoos mv <id> <status> Move a task (inbox|ready|active|review|done)
78
+ repoos new "<title>" [flags] Create a task
79
+ repoos index [--json] Rebuild the derived index (--json for agents/tools)
80
+ 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)
82
+ repoos tunnel [subcommand] Cloudflare Tunnel + Zero Trust publishing
83
+ ```
84
+
85
+ **`repoos new` flags:** `--ai` (assign to AI), `--type`, `--area`, `--priority`, `--body` (`-` reads from stdin). Unknown flags are rejected.
86
+
87
+ ```bash
88
+ repoos new "Add company dashboard" --ai --type feature --area web --priority p1
89
+ repoos mv 0012 active
90
+ repoos list ready
91
+ repoos index --json # machine-readable, pipe to agents
92
+ ```
93
+
94
+ ## Task file format
95
+
96
+ ```markdown
97
+ ---
98
+ id: "0012"
99
+ title: Add company dashboard
100
+ type: feature
101
+ status: ready
102
+ priority: p1
103
+ area: web
104
+ assigned_to: ai
105
+ created_by: human
106
+ branch: feat/0012-company-dashboard
107
+ ---
108
+
109
+ ## Problem
110
+ Agency owners have no single view of placements, fill rate, and revenue.
111
+
112
+ ## Desired UX
113
+ A glanceable dashboard: KPI cards, a revenue chart, upcoming shifts.
114
+
115
+ ## Acceptance criteria
116
+ - [ ] KPI summary cards
117
+ - [ ] Revenue chart with range selector
118
+
119
+ ## Notes for AI
120
+ Use the StatCard component from @ui. Mock data until backend #0020 lands.
121
+ ```
122
+
123
+ Unknown frontmatter keys are **preserved** on write — RepoOS never clobbers
124
+ fields it doesn't recognize.
125
+
126
+ ## Use as a library
127
+
128
+ The CLI is a thin shell over a programmatic API. The same API powers the
129
+ local server and can be called from your own scripts or agents.
130
+
131
+ ```ts
132
+ import { createRepoOS } from "@repo-os/repoos";
133
+
134
+ const repoos = createRepoOS(); // resolves repo root + config
135
+
136
+ repoos.getTasks("active"); // Task[]
137
+ repoos.getTask("0012"); // Task | null
138
+ repoos.counts(); // { inbox, ready, active, review, done }
139
+ repoos.updateStatus("0012", "review"); // edits frontmatter, returns Task
140
+ repoos.createTask({ title: "New thing", assignedTo: "ai", priority: "p1" });
141
+ repoos.reindex(); // rebuild + cache the index
142
+ ```
143
+
144
+ ## Configuration
145
+
146
+ Optional `repoos.toml` at the repo root. These are the defaults:
147
+
148
+ ```toml
149
+ workDir = "work"
150
+ docsDir = "docs"
151
+ defaultStatus = "inbox"
152
+ defaultAssignee = "unassigned"
153
+ cacheDir = ".repoos"
154
+ ```
155
+
156
+ ## The local server
157
+
158
+ `repoos serve` starts a long-lived process that holds the index in memory, watches
159
+ your task files, and serves a JSON API plus a live event stream. It adds no new
160
+ business logic — it's a transport layer over the same core the CLI uses.
161
+
162
+ ```bash
163
+ repoos serve # http://127.0.0.1:7171 (or your Tailscale IP, if detected)
164
+ repoos serve --port 8080 # custom port
165
+ repoos serve --host 0.0.0.0 # listen on all interfaces
166
+ repoos serve --quiet # no terminal activity log
167
+ ```
168
+
169
+ If Tailscale is running on the machine, `repoos serve` binds to `0.0.0.0` (all
170
+ interfaces) by default instead of localhost-only, so it's reachable both from
171
+ your other Tailscale devices and from localhost-only tools on the same machine
172
+ (e.g. a Cloudflare Tunnel's local origin). Pass `--host 127.0.0.1` explicitly
173
+ to restrict it to localhost only.
174
+
175
+ ### Endpoints
176
+
177
+ ```
178
+ GET /api/health { ok, root, taskCount, workDir }
179
+ GET /api/tasks Task[] (?status=active to filter)
180
+ GET /api/tasks/:id Task | 404
181
+ GET /api/counts { inbox, ready, active, review, done }
182
+ GET /api/index full RepoIndex snapshot
183
+ GET /api/docs [{ path, title }] context docs listing
184
+ GET /api/skills [{ name, path }] installed skills
185
+ GET /api/config current repoos.toml config
186
+ GET /api/agents/detect installed coding agents found on PATH
187
+ GET /api/agents/running currently running agent sessions
188
+ GET /api/tasks/:id/output agent session transcript for a task
189
+ POST /api/tasks create { title, type?, area?, priority?, assignedTo? }
190
+ POST /api/tasks/freeform create { prompt } AI-drafted task from a description
191
+ PATCH /api/tasks/:id patch { status?, title?, priority?, ... }
192
+ PATCH /api/config edit repoos.toml fields
193
+ DELETE /api/tasks/:id delete a task
194
+ POST /api/tasks/:id/start launch an agent on this task
195
+ POST /api/tasks/:id/pause stop a running agent (graceful)
196
+ POST /api/tasks/:id/message send a follow-up to an agent session
197
+ POST /api/tasks/:id/done review-to-done: merge branch, close worktree
198
+ GET /api/events SSE stream of repo events
199
+ ```
200
+
201
+ ### The event stream
202
+
203
+ `GET /api/events` is a Server-Sent Events stream. It emits an event whenever the
204
+ repo changes — whether the change came through the API or from a file edited
205
+ directly on disk (e.g. by an AI agent). This is the heartbeat the UI subscribes
206
+ to; no polling.
207
+
208
+ ```
209
+ event: task.updated
210
+ data: {"type":"task.updated","task":{...},"prev":{"status":"ready"},"at":"..."}
211
+ ```
212
+
213
+ Event types: `hello`, `index.rebuilt`, `task.created`, `task.updated`,
214
+ `task.deleted`, `agent.running`, `agent.exited`, `agent.output`,
215
+ `task.corrected`. Because an agent editing a markdown file produces the same
216
+ event as an API call, agents are first-class participants without needing to
217
+ know RepoOS exists — they just edit files.
218
+
219
+ ### Concurrent writes
220
+
221
+ Status lives in per-task files, so two writers touching *different* tasks never
222
+ conflict. For the same task, the server re-reads the file immediately before
223
+ writing and merges the change onto current on-disk state, so a status update
224
+ won't clobber a body edit an agent made a moment earlier.
225
+
226
+ ## The web UI
227
+
228
+ `repoos serve` also serves a web UI at the root URL — open `http://127.0.0.1:7171`
229
+ in a browser. It's a live control plane: a dashboard, the work board, an Agents
230
+ page for configuring and running coding agents, a context-docs viewer with
231
+ skills, and settings. All reading from the API and updating in real time via the
232
+ SSE stream. Edit a task file in your editor (or let an agent edit it) and the
233
+ board updates instantly — no reload.
234
+
235
+ The UI ships prebuilt and vendored (Vue is bundled, not loaded from a CDN), so
236
+ it works fully offline — important for a tool running on a local box.
237
+
238
+ ## Agent orchestration
239
+
240
+ RepoOS can spawn and manage coding agents (opencode, Claude Code, Qwen, Codex)
241
+ to execute tasks. Agents run in isolated git worktrees per task so parallel work
242
+ never collides. Output streams over SSE in real time, and the per-task chat tab
243
+ lets you resume a session mid-flight. When the agent finishes, the task moves to
244
+ review — human sign-off is always the gate.
245
+
246
+ Configure agents on the Agents page: choose the CLI, pick a model (sourced live
247
+ from `opencode models`), add custom instructions, and set up PM and reviewer
248
+ roles alongside the engineer agent. Freeform task creation sends a description
249
+ through the PM agent for structured drafting. All agent capability is local —
250
+ no API tokens leave your machine unless you configure them.
251
+
252
+ ## Roadmap
253
+
254
+ - **Stage 1 — parser + index + CLI** ✅
255
+ - **Stage 2 — local server** ✅ — live index, file watcher, JSON API, SSE.
256
+ - **Stage 3 — web UI** ✅ — Vite + Vue 3 SFC, served from the local server,
257
+ responsive (desktop + mobile), live-updating via SSE.
258
+ - **Stage 4** — read-only deploy/infra panel (Railway, Cloudflare Pages).
259
+ - **Stage 5 — agent orchestration** ✅ — spawn coding agents (opencode, Claude
260
+ Code, Qwen, Codex) in git worktrees per task, stream their output over SSE,
261
+ resume sessions via chat, and move completed work into review. Actively
262
+ being hardened and extended (agent-visible worktree previews, context packs,
263
+ and sandbox handoff).
264
+
265
+ For live status and what's in progress, run `repoos list`. The task files in
266
+ `work/` are the authoritative record of current work.
267
+
268
+ ## License
269
+
270
+ [FSL-1.1-MIT](LICENSE.md) — free to use, self-host, and modify. The only
271
+ restriction is offering it as a competing commercial product/service. Each
272
+ version converts to plain MIT two years after release.
@@ -0,0 +1,4 @@
1
+ {
2
+ "hash": "e49c2d85116e21cce445444e46ba4c7961583ce35dcf49707db0d41c623126d2",
3
+ "version": "0.5.44"
4
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "generatedAt": "2026-09-17T08:36:35.890Z"
3
+ }
@@ -0,0 +1,13 @@
1
+ export declare const c: {
2
+ bold: (s: string) => string;
3
+ dim: (s: string) => string;
4
+ cyan: (s: string) => string;
5
+ magenta: (s: string) => string;
6
+ green: (s: string) => string;
7
+ yellow: (s: string) => string;
8
+ red: (s: string) => string;
9
+ gray: (s: string) => string;
10
+ };
11
+ /** Color a status string consistently with the GUI palette. */
12
+ export declare function statusColor(status: string): (s: string) => string;
13
+ export declare function priorityColor(p: string): (s: string) => string;
@@ -0,0 +1,37 @@
1
+ /** Minimal ANSI styling. Honors NO_COLOR and non-TTY output. */
2
+ const enabled = process.env.NO_COLOR === undefined && process.stdout.isTTY === true;
3
+ const wrap = (open, close) => (s) => enabled ? `\x1b[${open}m${s}\x1b[${close}m` : s;
4
+ export const c = {
5
+ bold: wrap(1, 22),
6
+ dim: wrap(2, 22),
7
+ cyan: wrap(36, 39),
8
+ magenta: wrap(35, 39),
9
+ green: wrap(32, 39),
10
+ yellow: wrap(33, 39),
11
+ red: wrap(31, 39),
12
+ gray: wrap(90, 39),
13
+ };
14
+ /** Color a status string consistently with the GUI palette. */
15
+ export function statusColor(status) {
16
+ switch (status) {
17
+ case "draft":
18
+ return c.dim;
19
+ case "ready":
20
+ return c.cyan;
21
+ case "active":
22
+ return c.magenta;
23
+ case "review":
24
+ return c.yellow;
25
+ case "done":
26
+ return c.green;
27
+ default:
28
+ return c.gray;
29
+ }
30
+ }
31
+ export function priorityColor(p) {
32
+ if (p === "p0" || p === "p1")
33
+ return c.red;
34
+ if (p === "p2")
35
+ return c.yellow;
36
+ return c.green;
37
+ }
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,221 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * RepoOS CLI entrypoint. Bin name: `repoos`.
4
+ * Dependency-free arg routing — no commander/yargs needed for Stage 1.
5
+ */
6
+ import { cmdInit } from "../commands/init.js";
7
+ import { cmdList, cmdShow, cmdMv, cmdUpdate, cmdNew, cmdIndex, cmdNote, } from "../commands/tasks.js";
8
+ import { cmdNewDoc } from "../commands/docs.js";
9
+ import { cmdGc } from "../commands/gc.js";
10
+ import { cmdCheck } from "../commands/check.js";
11
+ import { cmdServe, serveProcessTitle, setServeProcessTitle } from "../commands/serve.js";
12
+ import { cmdStop } from "../commands/stop.js";
13
+ import { cmdTunnel } from "../commands/tunnel.js";
14
+ import { cmdUpgrade } from "../commands/upgrade.js";
15
+ import { cmdStatus } from "../commands/status.js";
16
+ import { checkBuild } from "../core/build.js";
17
+ import { loadConfig } from "../core/config.js";
18
+ import { reexecUnderBunIfRequested } from "../core/runtime.js";
19
+ import { c } from "./colors.js";
20
+ import { readFileSync } from "node:fs";
21
+ import { dirname, join } from "node:path";
22
+ import { fileURLToPath } from "node:url";
23
+ // node:sqlite (used by db.ts/auth-store.ts) is still marked experimental on
24
+ // supported Node versions and prints a warning the first time it's loaded.
25
+ // That's expected/stable usage here, not something a user needs to see —
26
+ // suppress just that one warning, leaving everything else intact. Matched on
27
+ // message content alone, not warning.name: which exact warning class/name
28
+ // Node uses for this varies by version (confirmed — no warning fires on
29
+ // instantiation at all on Node 24.19.0, but one does on Node 25.2.1), so a
30
+ // name-based filter risks silently failing to match on some future/older
31
+ // Node version and falling through to print it anyway.
32
+ process.on("warning", (warning) => {
33
+ if (/\bsqlite\b/i.test(warning.message))
34
+ return;
35
+ console.warn(warning);
36
+ });
37
+ /** Reads the version stamped into .build-info.json at build time; falls back for dev/source runs. */
38
+ function readVersion() {
39
+ try {
40
+ const root = dirname(dirname(fileURLToPath(import.meta.url)));
41
+ const info = JSON.parse(readFileSync(join(root, ".build-info.json"), "utf8"));
42
+ if (info.version)
43
+ return info.version;
44
+ }
45
+ catch {
46
+ /* fall through */
47
+ }
48
+ return "0.0.0-dev";
49
+ }
50
+ const VERSION = readVersion();
51
+ function help() {
52
+ console.log(`
53
+ ${c.bold(c.cyan("RepoOS"))} ${c.dim("v" + VERSION)} — the repo is the operating system
54
+
55
+ ${c.bold("USAGE")}
56
+ repoos <command> [args]
57
+
58
+ ${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)
77
+
78
+ ${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")}
92
+ `);
93
+ }
94
+ function main() {
95
+ const [cmd, ...rest] = process.argv.slice(2);
96
+ // Run every command under Bun when it's available (opt out with
97
+ // REPOOS_RUNTIME=node). With `execve` this call replaces the process image;
98
+ // with the spawn fallback the Node parent stays only to relay signals. Done
99
+ // first, so nothing (prompts, the staleness warning) runs twice.
100
+ if (reexecUnderBunIfRequested()) {
101
+ return;
102
+ }
103
+ // Name the managed project in `ps`/Activity Monitor for the long-lived serve
104
+ // process (#0347). Done here — before the staleness check — so the one-time
105
+ // Bun re-exec inside setServeProcessTitle can't re-print that warning, and
106
+ // only for the real `serve` command (cmdServe is also called mid-`init`,
107
+ // where a re-exec would restart the whole guided flow). Display-only.
108
+ if (cmd === "serve" || cmd === "server")
109
+ setServeProcessTitle(serveProcessTitle());
110
+ // Staleness check — skip for version/help since those read no source, and
111
+ // for `status`/`check` which report staleness themselves as first-class
112
+ // output (a second, louder warning above their own would be noise).
113
+ const skipCheck = new Set([
114
+ "version",
115
+ "--version",
116
+ "-v",
117
+ undefined,
118
+ "check",
119
+ "status",
120
+ "help",
121
+ "--help",
122
+ "-h",
123
+ "upgrade",
124
+ ]);
125
+ if (!skipCheck.has(cmd)) {
126
+ const result = checkBuild();
127
+ // Only warn when the RepoOS build contract actually applies (marker
128
+ // present). No dist/ or no marker means this checkout isn't using our build
129
+ // pipeline — see checkBuildForRoot's `applicable` (#0349).
130
+ if (result.stale && result.applicable) {
131
+ const config = loadConfig();
132
+ const strict = config.strictBuild ||
133
+ process.env.REPOOS_STRICT_BUILD === "1" ||
134
+ process.argv.includes("--strict-build");
135
+ if (strict) {
136
+ console.error(c.red(" ✗ ") + result.message);
137
+ process.exit(1);
138
+ }
139
+ console.error(c.yellow(" ⚠ ") + result.message);
140
+ }
141
+ }
142
+ switch (cmd) {
143
+ case "init":
144
+ void cmdInit(rest);
145
+ break;
146
+ case "list":
147
+ case "ls":
148
+ cmdList(rest[0]);
149
+ break;
150
+ case "status":
151
+ void cmdStatus(rest);
152
+ break;
153
+ case "show":
154
+ case "cat":
155
+ cmdShow(rest[0]);
156
+ break;
157
+ case "mv":
158
+ case "move": {
159
+ let note;
160
+ const args = rest.slice();
161
+ for (let i = 0; i < args.length; i++) {
162
+ if (args[i] === "--note")
163
+ note = args[++i];
164
+ }
165
+ cmdMv(args[0], args[1], note);
166
+ break;
167
+ }
168
+ case "note":
169
+ cmdNote(rest);
170
+ break;
171
+ case "update":
172
+ cmdUpdate(rest);
173
+ break;
174
+ case "new":
175
+ case "add":
176
+ cmdNew(rest);
177
+ break;
178
+ case "new-doc":
179
+ void cmdNewDoc(rest);
180
+ break;
181
+ case "index":
182
+ case "reindex":
183
+ cmdIndex(rest);
184
+ break;
185
+ case "gc":
186
+ cmdGc(rest);
187
+ break;
188
+ case "serve":
189
+ case "server":
190
+ void cmdServe(rest);
191
+ break;
192
+ case "stop":
193
+ cmdStop(rest);
194
+ break;
195
+ case "check":
196
+ void cmdCheck();
197
+ break;
198
+ case "tunnel":
199
+ void cmdTunnel(rest);
200
+ break;
201
+ case "upgrade":
202
+ void cmdUpgrade(rest);
203
+ break;
204
+ case "version":
205
+ case "--version":
206
+ case "-v":
207
+ console.log("repoos v" + VERSION);
208
+ break;
209
+ case undefined:
210
+ case "help":
211
+ case "--help":
212
+ case "-h":
213
+ help();
214
+ break;
215
+ default:
216
+ console.error(c.red(` Unknown command: ${cmd}`));
217
+ help();
218
+ process.exitCode = 1;
219
+ }
220
+ }
221
+ main();