@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
@@ -0,0 +1,36 @@
1
+ import { json, readBody } from "./utils.js";
2
+ import { AGENT_CLIS } from "../../core/config.js";
3
+ import { listModelSources } from "../../core/models.js";
4
+ import { testModelCombination } from "../model-test.js";
5
+ export const listModels = async (ctx, req, res) => {
6
+ const { config } = ctx;
7
+ const url = new URL(req.url ?? "/", "http://localhost");
8
+ const refresh = url.searchParams.get("refresh") === "1";
9
+ let byCli = {};
10
+ try {
11
+ byCli = await listModelSources({ refresh, cwd: config.root });
12
+ }
13
+ catch {
14
+ byCli = {};
15
+ }
16
+ return json(res, 200, { byCli, at: new Date().toISOString() });
17
+ };
18
+ export const testModel = async (ctx, _req, res) => {
19
+ const { config } = ctx;
20
+ try {
21
+ const body = (await readBody(_req));
22
+ if (typeof body.cli !== "string" ||
23
+ !AGENT_CLIS.includes(body.cli)) {
24
+ return json(res, 400, { error: "cli must be a supported coding agent" });
25
+ }
26
+ if (typeof body.model !== "string" || !body.model.trim() || body.model.length > 120) {
27
+ return json(res, 400, { error: "model must be a non-empty string" });
28
+ }
29
+ const result = await testModelCombination(body.cli, body.model, { cwd: config.root });
30
+ return json(res, 200, { result, at: new Date().toISOString() });
31
+ }
32
+ catch (err) {
33
+ const reason = err instanceof Error ? err.message : String(err);
34
+ return json(res, 500, { error: `Model compatibility test failed: ${reason}` });
35
+ }
36
+ };
@@ -0,0 +1,2 @@
1
+ import type { RouteHandler } from "./types.js";
2
+ export declare const testNotification: RouteHandler;
@@ -0,0 +1,17 @@
1
+ import { basename } from "node:path";
2
+ import { json } from "./utils.js";
3
+ import { publish } from "../ntfy.js";
4
+ export const testNotification = (ctx, _req, res) => {
5
+ const { config } = ctx;
6
+ if (!config.ntfyEnabled) {
7
+ return json(res, 400, { error: "ntfy notifications are disabled" });
8
+ }
9
+ const topic = (config.ntfyTopic ?? "").trim();
10
+ if (!topic) {
11
+ return json(res, 400, { error: "ntfy topic is empty" });
12
+ }
13
+ const repoName = basename(config.root);
14
+ const message = `Hello from RepoOS at ${repoName}!`;
15
+ publish(config, message);
16
+ return json(res, 200, { ok: true });
17
+ };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Model Playground routes (0313): serves the curated "worth trying" catalog
3
+ * (GET) and runs a stateless chat turn against a chosen model (POST).
4
+ *
5
+ * The chat turn reuses the same `opencode run --model <id>` one-shot path
6
+ * every other role (PM, reviewer, freeform doc) already goes through — the
7
+ * playground's `runId` (`${providerId}/${modelId}`) is exactly the model id
8
+ * opencode expects, so no new API-key handling is needed: opencode's own
9
+ * provider auth on the server machine covers it, keeping keys out of the
10
+ * client entirely.
11
+ */
12
+ import type { RouteHandler } from "./types.js";
13
+ /** Exported for tests. */
14
+ export declare function isKnownRunId(runId: string): boolean;
15
+ export declare const getPlaygroundModels: RouteHandler;
16
+ export interface PlaygroundChatMessage {
17
+ role: "user" | "assistant";
18
+ text: string;
19
+ }
20
+ /** Trim/validate the client-supplied history into a safe, bounded turn list. Exported for tests. */
21
+ export declare function sanitizePlaygroundHistory(raw: unknown): PlaygroundChatMessage[];
22
+ /**
23
+ * Build a one-shot prompt carrying the whole visible conversation: opencode's
24
+ * `run` command is stateless per-invocation, so multi-turn context has to be
25
+ * folded into the prompt text itself rather than resumed via a session id.
26
+ * Exported for tests.
27
+ */
28
+ export declare function buildPlaygroundPrompt(runId: string, history: PlaygroundChatMessage[]): string;
29
+ export declare const sendPlaygroundMessage: RouteHandler;
@@ -0,0 +1,81 @@
1
+ import { json, readBody } from "./utils.js";
2
+ import { listPlaygroundModels, PLAYGROUND_PROVIDERS } from "../../core/providers/index.js";
3
+ import { runPrompt, recordOneShotSession } from "../agents.js";
4
+ /**
5
+ * `runId` is `${providerId}/${modelId}`, forwarded verbatim as an opencode
6
+ * `--model` argv value (see `promptCommand` in agents.ts) — safe from shell
7
+ * injection since it's spawned via argv, never a shell string, but still
8
+ * worth constraining to the character set real provider/model ids use and to
9
+ * a provider we've actually registered, so a malformed client payload fails
10
+ * fast with a clear 400 instead of reaching the CLI at all.
11
+ */
12
+ const RUN_ID_PATTERN = /^[a-zA-Z0-9][\w.-]*\/[\w.:/~-]+$/;
13
+ /** Exported for tests. */
14
+ export function isKnownRunId(runId) {
15
+ if (!RUN_ID_PATTERN.test(runId))
16
+ return false;
17
+ const providerId = runId.slice(0, runId.indexOf("/"));
18
+ return PLAYGROUND_PROVIDERS.some((p) => p.id === providerId);
19
+ }
20
+ export const getPlaygroundModels = async (_ctx, req, res) => {
21
+ const url = new URL(req.url ?? "/", "http://localhost");
22
+ const refresh = url.searchParams.get("refresh") === "1";
23
+ const providers = await listPlaygroundModels({ refresh });
24
+ return json(res, 200, { providers, at: new Date().toISOString() });
25
+ };
26
+ const MAX_HISTORY_MESSAGES = 20;
27
+ const MAX_MESSAGE_LEN = 8000;
28
+ /** Trim/validate the client-supplied history into a safe, bounded turn list. Exported for tests. */
29
+ export function sanitizePlaygroundHistory(raw) {
30
+ const list = Array.isArray(raw) ? raw : [];
31
+ return list
32
+ .slice(-MAX_HISTORY_MESSAGES)
33
+ .map((m) => ({
34
+ role: m.role === "assistant" ? "assistant" : "user",
35
+ text: typeof m.text === "string" ? m.text.slice(0, MAX_MESSAGE_LEN).trim() : "",
36
+ }))
37
+ .filter((m) => m.text.length > 0);
38
+ }
39
+ /**
40
+ * Build a one-shot prompt carrying the whole visible conversation: opencode's
41
+ * `run` command is stateless per-invocation, so multi-turn context has to be
42
+ * folded into the prompt text itself rather than resumed via a session id.
43
+ * Exported for tests.
44
+ */
45
+ export function buildPlaygroundPrompt(runId, history) {
46
+ const turns = history
47
+ .map((m) => `${m.role === "user" ? "User" : "Assistant"}: ${m.text}`)
48
+ .join("\n\n");
49
+ return [
50
+ `You are the model ${runId}, being tried out in a quick chat playground. Answer the user's latest message directly and concisely.`,
51
+ turns,
52
+ "Assistant:",
53
+ ].join("\n\n");
54
+ }
55
+ export const sendPlaygroundMessage = async (ctx, req, res) => {
56
+ const { config } = ctx;
57
+ const body = (await readBody(req));
58
+ const runId = typeof body.runId === "string" ? body.runId.trim() : "";
59
+ if (!runId || runId.length > 200 || !isKnownRunId(runId)) {
60
+ return json(res, 400, { error: "runId must be a known provider/model id" });
61
+ }
62
+ const history = sanitizePlaygroundHistory(body.messages);
63
+ if (!history.length || history[history.length - 1].role !== "user") {
64
+ return json(res, 400, { error: "the last message must be a non-empty user message" });
65
+ }
66
+ const agent = { name: "playground", cli: "opencode", model: runId, enabled: true };
67
+ const prompt = buildPlaygroundPrompt(runId, history);
68
+ const result = await runPrompt(agent, prompt, { cwd: config.root });
69
+ recordOneShotSession(config.root, agent, result, { sessionType: "playground", taskId: null });
70
+ if (!result.ok || !result.output) {
71
+ return json(res, 502, { error: result.error ?? "the model returned no output" });
72
+ }
73
+ return json(res, 200, {
74
+ ok: true,
75
+ text: result.output,
76
+ elapsedMs: result.elapsedMs,
77
+ inputTokens: result.inputTokens,
78
+ outputTokens: result.outputTokens,
79
+ costUsd: result.costUsd,
80
+ });
81
+ };
@@ -0,0 +1,20 @@
1
+ import type { RouteHandler } from "./types.js";
2
+ import { type ReleasePhase } from "../release.js";
3
+ export interface ReleaseRun {
4
+ state: "idle" | "running" | "succeeded" | "failed";
5
+ phase: ReleasePhase | null;
6
+ message: string;
7
+ startedAt: string | null;
8
+ updatedAt: string | null;
9
+ }
10
+ export declare const getRelease: RouteHandler;
11
+ export declare const getReleaseRun: RouteHandler;
12
+ export declare const runRelease: RouteHandler;
13
+ /**
14
+ * Draft release notes from the commits since the last release (full history
15
+ * when there is none) with the repo's one-shot LLM plumbing. This never cuts a
16
+ * release — it only returns text for the modal to drop into its optional notes
17
+ * field, where the operator can edit it before confirming the cut. A failure
18
+ * here is reported to the caller and has no effect on the cut flow.
19
+ */
20
+ export declare const generateReleaseNotes: RouteHandler;
@@ -0,0 +1,86 @@
1
+ import { json, readBody } from "./utils.js";
2
+ import { collectReleaseCommits, cutNewRelease, getReleaseStatus, releaseNotesPrompt, } from "../release.js";
3
+ import { extractOneShotReportText, pmCommand, recordOneShotSession, resolveEngineer, resolvePmAgent, runPrompt, } from "../agents.js";
4
+ /**
5
+ * Which agent drafts release notes. The PM owns authoring, so prefer it; fall
6
+ * back to the engineer when a repo has the PM disabled. Null means neither is
7
+ * enabled and the generate button should report that rather than fail opaquely.
8
+ */
9
+ function releaseNotesAgent(config) {
10
+ return resolvePmAgent(config) ?? resolveEngineer(config);
11
+ }
12
+ let run = { state: "idle", phase: null, message: "", startedAt: null, updatedAt: null };
13
+ function updateRun(phase, message, state = "running") {
14
+ run = {
15
+ state,
16
+ phase,
17
+ message,
18
+ startedAt: run.startedAt ?? new Date().toISOString(),
19
+ updatedAt: new Date().toISOString(),
20
+ };
21
+ }
22
+ export const getRelease = async (ctx, _req, res) => json(res, 200, await getReleaseStatus(ctx.config));
23
+ export const getReleaseRun = (_ctx, _req, res) => json(res, 200, run);
24
+ export const runRelease = async (ctx, req, res) => {
25
+ const body = (await readBody(req));
26
+ if (typeof body.version !== "string" || typeof body.confirmTag !== "string")
27
+ return json(res, 400, { error: "version and confirmTag are required" });
28
+ if (run.state === "running")
29
+ return json(res, 409, { error: "A release is already running", run });
30
+ const notes = typeof body.notes === "string" && body.notes.trim() ? body.notes : undefined;
31
+ run = {
32
+ state: "running",
33
+ phase: "preparing",
34
+ message: "Starting release…",
35
+ startedAt: new Date().toISOString(),
36
+ updatedAt: new Date().toISOString(),
37
+ };
38
+ void cutNewRelease(ctx.config, body.version, body.confirmTag, undefined, (phase, message) => updateRun(phase, message), ctx.remoteValidator, notes)
39
+ // Keep the phase that was in flight when it failed, so the UI can say
40
+ // "failed during checking" rather than a bare "failed".
41
+ .then((result) => updateRun(result.ok ? null : run.phase, result.output, result.ok ? "succeeded" : "failed"))
42
+ .catch(() => updateRun(null, "Release runner stopped unexpectedly. Check the repository state before retrying.", "failed"));
43
+ return json(res, 202, { ok: true, run });
44
+ };
45
+ /**
46
+ * Draft release notes from the commits since the last release (full history
47
+ * when there is none) with the repo's one-shot LLM plumbing. This never cuts a
48
+ * release — it only returns text for the modal to drop into its optional notes
49
+ * field, where the operator can edit it before confirming the cut. A failure
50
+ * here is reported to the caller and has no effect on the cut flow.
51
+ */
52
+ export const generateReleaseNotes = async (ctx, req, res) => {
53
+ const { config } = ctx;
54
+ const body = (await readBody(req));
55
+ const version = typeof body.version === "string" && body.version.trim() ? body.version : null;
56
+ const agent = releaseNotesAgent(config);
57
+ if (!agent) {
58
+ return json(res, 400, {
59
+ error: "No agent is enabled to draft release notes — enable the PM or Engineer agent.",
60
+ });
61
+ }
62
+ const { commits, sinceTag, truncated } = await collectReleaseCommits(config);
63
+ if (!commits.length) {
64
+ // Nothing new to summarize is not an error: the cut can still proceed.
65
+ return json(res, 200, { notes: "", sinceTag, commitCount: 0, truncated });
66
+ }
67
+ const prompt = releaseNotesPrompt(commits, { sinceTag, version, truncated });
68
+ const result = await runPrompt(agent, prompt, {
69
+ cwd: config.root,
70
+ // Structured output so extractUsage records real tokens/cost for this
71
+ // board-level call (house rule: every one-shot LLM call is recorded).
72
+ command: pmCommand(agent, prompt, config.root),
73
+ });
74
+ recordOneShotSession(config.root, agent, result, {
75
+ sessionType: "release-notes",
76
+ taskId: null,
77
+ });
78
+ if (!result.ok || !result.output) {
79
+ return json(res, 502, { error: result.error ?? "The agent returned no release notes." });
80
+ }
81
+ const notes = extractOneShotReportText(agent.cli, result.output);
82
+ if (!notes) {
83
+ return json(res, 502, { error: "The agent returned no usable release notes." });
84
+ }
85
+ return json(res, 200, { notes, sinceTag, commitCount: commits.length, truncated });
86
+ };
@@ -0,0 +1,12 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { RouteContext, RouteHandler } from "./types.js";
3
+ export interface RouterEntry {
4
+ method: string;
5
+ pattern: string | RegExp;
6
+ handler: RouteHandler;
7
+ }
8
+ export declare class Router {
9
+ private routes;
10
+ register(method: string, pattern: string | RegExp, handler: RouteHandler): void;
11
+ dispatch(ctx: RouteContext, method: string, path: string, req: IncomingMessage, res: ServerResponse): Promise<boolean>;
12
+ }
@@ -0,0 +1,32 @@
1
+ export class Router {
2
+ routes = [];
3
+ register(method, pattern, handler) {
4
+ this.routes.push({ method, pattern, handler });
5
+ }
6
+ async dispatch(ctx, method, path, req, res) {
7
+ for (const route of this.routes) {
8
+ if (route.method !== method)
9
+ continue;
10
+ let match = null;
11
+ if (typeof route.pattern === "string") {
12
+ if (route.pattern !== path)
13
+ continue;
14
+ match = null;
15
+ }
16
+ else {
17
+ match = path.match(route.pattern);
18
+ if (!match)
19
+ continue;
20
+ }
21
+ const params = {};
22
+ if (match) {
23
+ for (let i = 1; i < match.length; i++) {
24
+ params[`param${i}`] = match[i];
25
+ }
26
+ }
27
+ await route.handler(ctx, req, res, params);
28
+ return true;
29
+ }
30
+ return false;
31
+ }
32
+ }
@@ -0,0 +1,5 @@
1
+ import type { RouteHandler } from "./types.js";
2
+ export declare const getRegistryCurated: RouteHandler;
3
+ export declare const searchRegistry: RouteHandler;
4
+ export declare const getRegistryDetail: RouteHandler;
5
+ export declare const installRegistry: RouteHandler;
@@ -0,0 +1,51 @@
1
+ import { json, readBody } from "./utils.js";
2
+ import { curatedRegistrySkills, installRegistrySkill, registryAudit, registryDetail, searchRegistrySkills, } from "../../core/skills-registry.js";
3
+ export const getRegistryCurated = async (_ctx, _req, res) => {
4
+ try {
5
+ return json(res, 200, { skills: await curatedRegistrySkills() });
6
+ }
7
+ catch (error) {
8
+ return json(res, 502, {
9
+ error: error instanceof Error ? error.message : "Skills.sh unavailable",
10
+ });
11
+ }
12
+ };
13
+ export const searchRegistry = async (_ctx, req, res) => {
14
+ const q = new URL(req.url ?? "/", "http://localhost").searchParams.get("q") ?? "";
15
+ try {
16
+ return json(res, 200, { skills: await searchRegistrySkills(q) });
17
+ }
18
+ catch (error) {
19
+ return json(res, 502, {
20
+ error: error instanceof Error ? error.message : "Skills.sh unavailable",
21
+ });
22
+ }
23
+ };
24
+ export const getRegistryDetail = async (_ctx, req, res) => {
25
+ const id = new URL(req.url ?? "/", "http://localhost").searchParams.get("id") ?? "";
26
+ try {
27
+ const [detail, audit] = await Promise.all([registryDetail(id), registryAudit(id)]);
28
+ return json(res, 200, { detail, audit });
29
+ }
30
+ catch (error) {
31
+ return json(res, 400, { error: error instanceof Error ? error.message : "Skill unavailable" });
32
+ }
33
+ };
34
+ export const installRegistry = async (ctx, req, res) => {
35
+ const body = (await readBody(req));
36
+ if (typeof body.id !== "string")
37
+ return json(res, 400, { error: "id is required" });
38
+ try {
39
+ const detail = await registryDetail(body.id);
40
+ return json(res, 201, {
41
+ ok: true,
42
+ ...installRegistrySkill(ctx.config, detail),
43
+ hash: detail.hash,
44
+ });
45
+ }
46
+ catch (error) {
47
+ return json(res, 400, {
48
+ error: error instanceof Error ? error.message : "Could not install skill",
49
+ });
50
+ }
51
+ };
@@ -0,0 +1,58 @@
1
+ import type { RouteHandler } from "./types.js";
2
+ export declare const getTasks: RouteHandler;
3
+ export declare const createTask: RouteHandler;
4
+ export declare const createFreeformTask: RouteHandler;
5
+ export declare const getTask: RouteHandler;
6
+ export declare const patchTask: RouteHandler;
7
+ export declare const deleteTask: RouteHandler;
8
+ export declare const getScreenshot: RouteHandler;
9
+ export declare const uploadScreenshot: RouteHandler;
10
+ export declare const getTaskLogs: RouteHandler;
11
+ export declare const getTaskOutput: RouteHandler;
12
+ export declare const taskAction: RouteHandler;
13
+ export declare const startPreview: RouteHandler;
14
+ export declare const stopPreview: RouteHandler;
15
+ export declare const getTaskReview: RouteHandler;
16
+ export declare const reviewAgain: RouteHandler;
17
+ export declare const reviewMessage: RouteHandler;
18
+ export declare const getCTO: RouteHandler;
19
+ export declare const ctoMessage: RouteHandler;
20
+ /** Interrupt a running CTO response. Idempotent. */
21
+ export declare const ctoInterrupt: RouteHandler;
22
+ /**
23
+ * Build the "newly attached screenshots" fragment appended to the PM's task
24
+ * context (#0382). Each entry surfaces the API URL and the repo-relative
25
+ * path so the PM can either link them or quote them when editing the spec.
26
+ * Empty/missing url+path combos are silently dropped. Returns an empty
27
+ * string when there are no usable screenshots, leaving the prompt unchanged
28
+ * for plain text messages.
29
+ */
30
+ export declare function buildPmShotContext(incoming: ReadonlyArray<unknown>): string;
31
+ export declare const pmMessage: RouteHandler;
32
+ /**
33
+ * Interrupt a running PM response about a task. Resolves the same per-user PM
34
+ * session id as `pmMessage` and stops the in-flight agent turn. Idempotent.
35
+ */
36
+ export declare const pmInterrupt: RouteHandler;
37
+ export declare const getIntegrationJob: RouteHandler;
38
+ export declare const getIntegrationJobs: RouteHandler;
39
+ /**
40
+ * Full integration-pipeline snapshot for the pinned status bar (0207).
41
+ * Reads the same live `reportedStages` map the SSE push path uses, so a
42
+ * page refresh mid-pipeline shows the job's actual current sub-step (e.g.
43
+ * "check", mid-test-run) rather than falling back to a coarse per-phase
44
+ * guess (0207 follow-up — see RouteContext.reportedStages).
45
+ */
46
+ export declare const getIntegrationPipeline: RouteHandler;
47
+ /**
48
+ * Retry a failed integration job (0207). Reuses the coordinator's existing
49
+ * retry path: `enqueue` re-enqueues a `failed` job as a fresh queued job
50
+ * (see integration-job.ts), then processing resumes from the queue.
51
+ */
52
+ export declare const retryIntegration: RouteHandler;
53
+ export declare const getTaskStats: RouteHandler;
54
+ export declare const getSessionTypeStats: RouteHandler;
55
+ export declare const getBoardStats: RouteHandler;
56
+ export declare const getDailyTotals: RouteHandler;
57
+ export declare const getDiffStatsForTask: RouteHandler;
58
+ export declare const getDiffForTask: RouteHandler;