@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,811 @@
1
+ /**
2
+ * RepoOS core types.
3
+ *
4
+ * The repo is the source of truth. A "task" is a markdown file with YAML
5
+ * frontmatter living under the configured work directory (default: `work/`).
6
+ * Task *status* is a frontmatter field — files never move between folders.
7
+ */
8
+ /** Canonical lifecycle states. Order matters: it defines board column order. */
9
+ export declare const STATUSES: readonly ["draft", "inbox", "ready", "active", "review", "done"];
10
+ export type Status = (typeof STATUSES)[number];
11
+ export declare const PRIORITIES: readonly ["p0", "p1", "p2", "p3"];
12
+ export type Priority = (typeof PRIORITIES)[number];
13
+ export declare const TASK_TYPES: readonly ["feature", "bug", "chore", "spec", "refactor"];
14
+ export type TaskType = (typeof TASK_TYPES)[number];
15
+ /** Who a task is assigned to. `ai` is a first-class assignee. */
16
+ export type Assignee = "ai" | "human" | "unassigned";
17
+ /** Theme preference for the web UI. */
18
+ export type Theme = "dark" | "light" | "system";
19
+ /** Visual design language of the web UI. */
20
+ export type UiTheme = "classic" | "clear" | "gen z" | "jelly";
21
+ /** Which flow the New task drawer opens with. */
22
+ export type TaskMode = "freeform" | "manual";
23
+ /**
24
+ * Machine-readable reasons `needsInput` gets set, one per escalation call
25
+ * site. Stored alongside the flag so a later automated success (e.g. a
26
+ * review that finally completes cleanly) can tell whether IT is what the
27
+ * human was waited on for, and clear the flag itself rather than leaving it
28
+ * stuck forever once the underlying problem resolves. A boolean alone can't
29
+ * make that call safely — clearing on every success would just as happily
30
+ * wipe out an unrelated flag (e.g. a CTO policy question) that happened to
31
+ * still be pending.
32
+ */
33
+ export declare const NEEDS_INPUT_REASONS: readonly ["review-failed", "dev-error", "watchdog-stuck", "cto-escalation"];
34
+ export type NeedsInputReason = (typeof NEEDS_INPUT_REASONS)[number];
35
+ /**
36
+ * The frontmatter we recognise. Unknown keys are preserved in `extra` so we
37
+ * never destroy fields a user (or another tool) added.
38
+ */
39
+ export interface TaskFrontmatter {
40
+ id?: string;
41
+ title?: string;
42
+ type?: TaskType | string;
43
+ status?: Status | string;
44
+ priority?: Priority | string;
45
+ /** True when the agent is waiting on the human and the task stays `active`. */
46
+ needs_input?: boolean;
47
+ /** Machine-readable reason `needs_input` was set (e.g. "review-failed"), for auto-clearing and UI display. Only meaningful while needs_input is true. */
48
+ needs_input_reason?: string;
49
+ /** True when the task branch has drifted from main and needs a manual merge. */
50
+ needs_merge?: boolean;
51
+ /** True when a legitimate no-op task opts out of the vacuous-handoff rejection. */
52
+ no_source_change?: boolean;
53
+ area?: string;
54
+ assigned_to?: string;
55
+ created_by?: string;
56
+ branch?: string;
57
+ created_at?: string;
58
+ updated_at?: string;
59
+ /** @deprecated use created_at */
60
+ created?: string;
61
+ /** @deprecated use updated_at */
62
+ updated?: string;
63
+ tags?: string[];
64
+ /** Per-task agent name override (e.g. "engineer", "pm", or a custom agent). */
65
+ agent_override?: string;
66
+ /** Per-task CLI override (e.g. "opencode", "claude code"). */
67
+ cli_override?: string;
68
+ /** Per-task model override (e.g. "default", "big pickle"). */
69
+ model_override?: string;
70
+ /** True when this task runs as a hotfix in the main checkout. */
71
+ hotfix?: boolean;
72
+ /** Hotfix merge target: "branch" or "main". */
73
+ hotfix_target?: "branch" | "main";
74
+ [key: string]: unknown;
75
+ }
76
+ /** A fully-resolved task as the rest of the system sees it. */
77
+ export interface Task {
78
+ /** Stable id, e.g. "0012". Derived from frontmatter or filename. */
79
+ id: string;
80
+ title: string;
81
+ type: string;
82
+ status: Status;
83
+ /** True when the agent is waiting on the human. Layered on `active`, never a status. */
84
+ needsInput: boolean;
85
+ /** Machine-readable reason `needsInput` was set — see {@link NeedsInputReason}. Only meaningful while needsInput is true. */
86
+ needsInputReason?: string;
87
+ /** True when the task branch has drifted from main. Layered on `review`, never a status. */
88
+ needsMerge: boolean;
89
+ /** True when a no-op task opts out of the vacuous-handoff rejection. */
90
+ noSourceChange: boolean;
91
+ priority: Priority | string;
92
+ area: string;
93
+ assignee: Assignee;
94
+ /** Raw assigned_to value, e.g. "ai", "nick", "product". */
95
+ assignedTo: string;
96
+ createdBy: string;
97
+ branch: string;
98
+ tags: string[];
99
+ created_at: string | null;
100
+ updated_at: string | null;
101
+ /** ISO timestamp of the successful review-to-done merge, derived from Activity. */
102
+ releasedAt?: string | null;
103
+ /** Path relative to repo root, e.g. "work/0012-company-dashboard.md". */
104
+ path: string;
105
+ /** Absolute path on disk. */
106
+ absPath: string;
107
+ /** The markdown body (everything after frontmatter). */
108
+ body: string;
109
+ /** Frontmatter keys we did not explicitly model. Preserved on write. */
110
+ extra: Record<string, unknown>;
111
+ /** Per-task agent name override, or null when using the default. */
112
+ agentOverride: string | null;
113
+ /** Per-task CLI override, or null when using the agent's default. */
114
+ cliOverride: string | null;
115
+ /** Per-task model override, or null when using the agent's default. */
116
+ modelOverride: string | null;
117
+ /** Per-task PM agent name override, or null when using the default. */
118
+ pmAgentOverride?: string | null;
119
+ /** Per-task PM CLI override, or null when using the agent's default. */
120
+ pmCliOverride?: string | null;
121
+ /** Per-task PM model override, or null when using the agent's default. */
122
+ pmModelOverride?: string | null;
123
+ /** Per-task reviewer agent name override, or null when using the default. */
124
+ reviewAgentOverride?: string | null;
125
+ /** Per-task reviewer CLI override, or null when using the agent's default. */
126
+ reviewCliOverride?: string | null;
127
+ /** Per-task reviewer model override, or null when using the agent's default. */
128
+ reviewModelOverride?: string | null;
129
+ /** True when this task runs as a hotfix in the main checkout. */
130
+ hotfix?: boolean;
131
+ /** Hotfix merge target: "branch" (default) or "main". */
132
+ hotfixTarget?: "branch" | "main";
133
+ /** Live git facts, populated by the git layer (best-effort). */
134
+ git: TaskGitInfo;
135
+ }
136
+ export interface TaskGitInfo {
137
+ /** Does the branch named in frontmatter exist locally? */
138
+ branchExists: boolean;
139
+ /** Does a linked worktree currently have the task's branch checked out? */
140
+ worktreeExists: boolean;
141
+ /** Last commit subject touching this file, if discoverable. */
142
+ lastCommit: string | null;
143
+ /** ISO timestamp of last commit touching this file. */
144
+ lastCommitAt: string | null;
145
+ /** Absolute path of the task's linked worktree, or null when none exists. */
146
+ worktreePath: string | null;
147
+ /**
148
+ * Whether a clean restart would discard prior work: the linked worktree has
149
+ * uncommitted changes, or the branch has commits not in the base branch.
150
+ * Always false when no linked worktree exists.
151
+ */
152
+ dirty: boolean;
153
+ }
154
+ /** An AI coding agent configurable on the Agents page. */
155
+ export interface Agent {
156
+ /** Agent name — the role key (engineer, reviewer, pm, or a custom name). */
157
+ name: string;
158
+ /** The coding agent CLI used to run this agent. */
159
+ cli: string;
160
+ /** Model name, or "default" to use the coding agent's default. */
161
+ model: string;
162
+ /** When false, the agent is configured but inactive. */
163
+ enabled: boolean;
164
+ /** Optional instructions describing the agent's role and how it should behave. */
165
+ instructions?: string;
166
+ /** Names of repository skills this role is allowed to load for its work. */
167
+ skills?: string[];
168
+ }
169
+ /**
170
+ * One entry of an agent session transcript.
171
+ *
172
+ * Legacy entries carry `s`/`d` — plain lines from older sessions or CLI
173
+ * warnings that do not match a structured event. Entries derived
174
+ * from opencode's `--format json` event stream carry a `type` discriminator
175
+ * (`text`/`tool`/`step`/`sys`) so the UI can render them as cards instead of
176
+ * a flat wall of text.
177
+ */
178
+ export type AgentOutputEntry = (
179
+ /** A complete assistant text part (opencode `text` event). */
180
+ {
181
+ type: "text";
182
+ text: string;
183
+ }
184
+ /** A message sent by the human from the Agent tab follow-up input. */
185
+ | {
186
+ type: "human";
187
+ text: string;
188
+ }
189
+ /** A finished tool call (opencode `tool_use` event). */
190
+ | {
191
+ type: "tool";
192
+ tool: string;
193
+ /** Rendered input (bash -> its command, objects -> pretty JSON). */
194
+ input?: string;
195
+ /** Rendered output, or the error message when the call failed. */
196
+ output?: string;
197
+ /** Tool state: "completed" | "error" (absent when unknown). */
198
+ state?: string;
199
+ }
200
+ /** A step boundary (opencode `step_start` / `step_finish`). */
201
+ | {
202
+ type: "step";
203
+ kind: "start" | "finish";
204
+ reason?: string;
205
+ at?: string;
206
+ }
207
+ /** A system/notice line (open code `error` / `file-update`, or "stopped"). */
208
+ | {
209
+ type: "sys";
210
+ d: string;
211
+ }
212
+ /** A legacy plain line, kept for compatibility and unknown CLI warnings. */
213
+ | {
214
+ s: "out" | "err" | "sys";
215
+ d: string;
216
+ }) & {
217
+ /**
218
+ * ISO timestamp of when the entry was created (0258). Populated by the
219
+ * server on every entry it creates; absent on persisted legacy transcripts.
220
+ */
221
+ at?: string;
222
+ };
223
+ /**
224
+ * Live run telemetry for one task's agent session (0080). Best-effort and
225
+ * in-memory only — never persisted across a server restart. Numbers only ever
226
+ * move forward: `null` means "the CLI hasn't reported this," never a
227
+ * fabricated zero.
228
+ */
229
+ export interface AgentSessionStats {
230
+ /** Cumulative ms across completed turns — excludes any turn in flight. */
231
+ accumulatedMs: number;
232
+ /** ISO timestamp the current turn started, or null when no turn is running. */
233
+ turnStartedAt: string | null;
234
+ /** ISO timestamp of the most recent agent.output line, or null until first output. */
235
+ lastOutputAt: string | null;
236
+ /** Best-effort cumulative token count reported by the CLI, or null if never reported. */
237
+ tokens: number | null;
238
+ /** Best-effort cumulative cost (USD) reported by the CLI, or null if never reported. */
239
+ costUsd: number | null;
240
+ /** True once output has gone stale for the stall window while still running. */
241
+ stalled: boolean;
242
+ }
243
+ /** A skill discovered from the skills dir (skills/<name>/SKILL.md). */
244
+ export interface SkillMeta {
245
+ /** Repo-relative path to the skill file, e.g. "skills/code-review/SKILL.md". */
246
+ path: string;
247
+ /** Skill name from frontmatter (or the folder name). */
248
+ name: string;
249
+ /** One-line description from frontmatter. */
250
+ description: string;
251
+ }
252
+ /** Authentication configuration. Opt-in, disabled by default. */
253
+ export interface AuthConfig {
254
+ /** Whether authentication is enabled. Default false. */
255
+ enabled?: boolean;
256
+ /** Server-side session secret. Never exposed to browser. */
257
+ sessionSecret?: string;
258
+ /** Session lifetime in seconds. Default 604800 (7 days). */
259
+ sessionMaxAge?: number;
260
+ /** Email OTP provider config. */
261
+ emailProvider?: {
262
+ type: "resend";
263
+ apiKey: string;
264
+ fromAddress: string;
265
+ };
266
+ /** Google OAuth config (optional). */
267
+ google?: {
268
+ clientId: string;
269
+ clientSecret: string;
270
+ };
271
+ /** Bootstrap admin email (set on first enable, cleared after bootstrap). */
272
+ bootstrapAdmin?: string;
273
+ /**
274
+ * Static OTP override for local development: `verifyOtp` accepts this code
275
+ * for any allowlisted user instead of requiring the real emailed OTP.
276
+ * Sourced only from `REPOOS_AUTH_DEV_BACKDOOR_CODE` (never from a git-tracked
277
+ * repoos.toml) and only ever honored when `NODE_ENV !== "production"` — see
278
+ * `src/server/routes/auth.ts` `verifyOtp`.
279
+ */
280
+ devBackdoorCode?: string;
281
+ }
282
+ /**
283
+ * API keys for model providers with a spend/usage API (0327). Like the [auth]
284
+ * secrets these are env-only — sourced from the gitignored `.env` (via
285
+ * REPOOS_OPENROUTER_API_KEY / REPOOS_OPENCODE_GO_API_KEY) or the process
286
+ * environment, never from a git-tracked repoos.toml key. The Agents page's
287
+ * "Model providers" tab writes them through `setDotEnvSecret`.
288
+ */
289
+ export interface ModelProviderKeysConfig {
290
+ openrouterApiKey?: string;
291
+ opencodeGoApiKey?: string;
292
+ }
293
+ /** Resolved configuration (after defaults + repoos.toml merge). */
294
+ export interface RepoOSConfig {
295
+ /** Absolute path to the repo root. */
296
+ root: string;
297
+ /** Directory holding task files, relative to root. Default "work". */
298
+ workDir: string;
299
+ /** Directory holding context docs, relative to root. Default "docs". */
300
+ docsDir: string;
301
+ /** Directory holding skills, relative to root. Default "skills". */
302
+ skillsDir: string;
303
+ /** Directory holding human-submitted inputs, relative to root. */
304
+ inputsDir?: string;
305
+ /** Glob-ish: file extensions treated as tasks. Default [".md"]. */
306
+ taskExtensions: string[];
307
+ /** Default status applied to new tasks. */
308
+ defaultStatus: Status;
309
+ /** Default assignee for new tasks. */
310
+ defaultAssignee: Assignee;
311
+ /** Where the derived index cache is written (relative to root). */
312
+ cacheDir: string;
313
+ /** When true, stale builds cause repoos to exit with an error instead of warning. */
314
+ strictBuild?: boolean;
315
+ /** Whether Cloudflare Tunnel controls are surfaced in the web UI. */
316
+ tunnelEnabled?: boolean;
317
+ /** When true, RepoOS publishes task lifecycle events to a ntfy topic. */
318
+ ntfyEnabled?: boolean;
319
+ /** The ntfy topic RepoOS publishes task events to (empty = never send). */
320
+ ntfyTopic?: string;
321
+ /** Base URL of the ntfy server. Defaults to https://ntfy.sh. */
322
+ ntfyBaseUrl?: string;
323
+ /** UI theme preference: dark, light, or system (follow OS). Cosmetic only. */
324
+ theme?: Theme;
325
+ /** UI design language: classic (current) or clear. Cosmetic only. */
326
+ uiTheme?: UiTheme;
327
+ /** New-task drawer mode: freeform (PM agent) or manual form. Default "freeform". */
328
+ defaultTaskMode?: TaskMode;
329
+ /** User-defined agents (defaults are applied at runtime when this is empty). */
330
+ agents?: Agent[];
331
+ /** When true, RepoOS automatically selects and starts ready tasks up to maxActiveTasks. */
332
+ autoEngineeringMode?: boolean;
333
+ /** Maximum number of simultaneously active tasks when auto-engineering mode is enabled. */
334
+ maxActiveTasks?: number;
335
+ /**
336
+ * Maximum number of agent CLI processes (each with its own build/test
337
+ * footprint) the runner will spawn at once, across all tasks and chats.
338
+ * Extra `start`/`send` calls queue and spawn as running agents finish.
339
+ * Unset means "auto" — computed from the host's CPU count at boot so the
340
+ * same repo behaves on a small machine and a big one without tuning.
341
+ */
342
+ maxConcurrentAgents?: number;
343
+ /**
344
+ * Per-agent state for built-in agents (Tech Debt Agent, …), keyed by agent
345
+ * id: whether it's enabled, its run schedule, and when it last ran. Stored
346
+ * as a JSON sidecar under the cache dir — runtime state, not human-edited
347
+ * configuration.
348
+ */
349
+ builtInAgents?: Record<string, BuiltInAgentConfig>;
350
+ /** Agent supervisor configuration. */
351
+ supervisor?: SupervisorConfig;
352
+ /** Task watchdog configuration (#0180). */
353
+ watchdog?: WatchdogConfig;
354
+ /** Voice transcription configuration for vibe-coding feature. */
355
+ whisper?: WhisperConfig;
356
+ /** Authentication configuration. */
357
+ auth?: AuthConfig;
358
+ /** Model-provider API keys (0327) — env-only, never a repoos.toml key. */
359
+ modelProviders?: ModelProviderKeysConfig;
360
+ /** Remote validation runner — runs the close-out build+test off this machine. */
361
+ remoteValidation?: RemoteValidationConfig;
362
+ /** Optional product-release integration. Omitted means the Releases UI is hidden. */
363
+ release?: ReleaseConfig;
364
+ /**
365
+ * Per-project opt-in config for `repoos check` steps (tasks #0348, #0351).
366
+ * Omitted means every pluggable step (`ui-smoke`, CSS layering, theme
367
+ * contrast) skips unless the project declares it here or through a
368
+ * well-known `package.json` script.
369
+ */
370
+ check?: CheckConfig;
371
+ /**
372
+ * Per-project config for task previews (task #0362). A repo declares a
373
+ * command and/or named targets here; those run, selected by the task's
374
+ * `area`. Omitting the section is not an implicit default (#0370): a task
375
+ * with no resolvable target gets a clean, actionable "no preview configured"
376
+ * result rather than booting RepoOS's own board.
377
+ */
378
+ preview?: PreviewConfig;
379
+ /**
380
+ * Deployment targets (task #0340) — one row per (service, branch). Absent or
381
+ * empty means the Deployments nav item and API stay hidden for this repo.
382
+ */
383
+ deployments?: DeploymentConfig[];
384
+ /**
385
+ * Advisory ceiling on registered git worktrees (including the main checkout).
386
+ * Above it, the Control page's Codebase card turns amber and the server logs
387
+ * a "run `repoos gc`" warning — never enforced, never blocks a task start.
388
+ * Default 20. Set 0 to disable the warning.
389
+ */
390
+ worktreeWarnThreshold?: number;
391
+ /**
392
+ * Port `repoos serve` binds by default (overridable with `--port`). Unset
393
+ * means "derive a stable per-repo port from the repo root path" so two
394
+ * checkouts on one machine don't both grab 7171. Pin it here for a repo
395
+ * whose port other tooling hardcodes (e.g. this dogfood repo → 7171).
396
+ */
397
+ servePort?: number;
398
+ }
399
+ /**
400
+ * A single configured deployment target: one (service, branch) pair shipped to
401
+ * a provider (task #0340). Unlike [release] — a single versioned artifact — a
402
+ * repo can have N services × M environments, each a row on the Deployments
403
+ * page. Entirely declarative: no live provider API in v1, `provider` is a
404
+ * plain label and every URL is user-supplied. Omitted entirely in most repos,
405
+ * which keeps the Deployments nav item and API dormant.
406
+ */
407
+ export interface DeploymentConfig {
408
+ /** Human label, e.g. "Landing page (prod)". */
409
+ name: string;
410
+ /**
411
+ * Groups this row with others of the same service across branches (e.g.
412
+ * "Landing page" for both its prod and dev rows), so the Deployments page
413
+ * can render one row per service with a column per branch. Defaults to
414
+ * `name` when absent, so a config with no `service` keys keeps today's
415
+ * ungrouped, one-row-per-config-entry behavior exactly.
416
+ */
417
+ service?: string;
418
+ /** Branch whose pushes deploy this target (e.g. prod / main). */
419
+ branch: string;
420
+ /** Provider label, e.g. "cloudflare-workers". Informational only. */
421
+ provider?: string;
422
+ /** The live URL for this target — rendered as the row's primary link. */
423
+ url?: string;
424
+ /** Optional provider-dashboard URL (account-specific, pasted in by hand). */
425
+ dashboardUrl?: string;
426
+ /**
427
+ * Repo subdirectory this service lives in, scoping the per-row freshness
428
+ * lookup to `git log -1 <branch> -- <subdir>` so an unrelated push to the
429
+ * branch doesn't read as a deploy of this service. Omit for a branch-wide
430
+ * signal.
431
+ */
432
+ subdir?: string;
433
+ }
434
+ /**
435
+ * A deliberately small first release provider. `git-tag` is portable: the
436
+ * repository's own CI/provider decides what a pushed tag means. Additional
437
+ * providers can implement the same status + confirmed-action contract later.
438
+ */
439
+ export interface ReleaseConfig {
440
+ enabled?: boolean;
441
+ provider?: "git-tag";
442
+ name?: string;
443
+ /** Branch a release must be cut from. Defaults to main. */
444
+ branch?: string;
445
+ /** Project manifest containing the committed semantic version. */
446
+ versionFile?: string;
447
+ /** Prefix prepended to the version for the git tag. Defaults to v. */
448
+ tagPrefix?: string;
449
+ /** Git remote to receive the annotated tag. Defaults to origin. */
450
+ remote?: string;
451
+ /** Optional GitHub owner/repo, used only to link to the resulting release. */
452
+ repository?: string;
453
+ /** Optional workflow path, shown as release context (not executed by RepoOS). */
454
+ workflow?: string;
455
+ }
456
+ /**
457
+ * Remote Validation Runner (#RVR). The close-out gate's expensive half —
458
+ * `bun run build` + `bun run test` — runs on a disposable cloud VM instead of
459
+ * the developer's machine, which is where MTD keeps failing under memory
460
+ * pressure. The cheap static guards (CSS/theme/require/lockfile/UI-smoke) still
461
+ * run locally. Master switch defaults off: enabling it sends repo contents to a
462
+ * third-party host (see docs/remote-validation.md).
463
+ */
464
+ export interface RemoteValidationConfig {
465
+ /** Master switch. Default false. */
466
+ enabled?: boolean;
467
+ /** Cloud provider. Only "hetzner" is implemented for the MVP. */
468
+ provider?: "hetzner";
469
+ /**
470
+ * Hetzner server type. Default "cax31" (8 vCPU Ampere ARM / 16 GB) — the
471
+ * cheapest type that fills the vitest 8-worker pool; this repo has no native
472
+ * deps so arm64 is safe. Use "cpx41" for an x86 (AMD) snapshot instead.
473
+ * MUST match the architecture the snapshot was built on.
474
+ */
475
+ serverType?: string;
476
+ /** Hetzner location slug. Default "hil". */
477
+ location?: string;
478
+ /**
479
+ * ID (or name) of the prebuilt Hetzner snapshot the runner boots from — an
480
+ * image with Docker installed and the `repoos-ci` container image preloaded.
481
+ * Built once via scripts/remote-runner/build-snapshot.md.
482
+ */
483
+ snapshotId?: string;
484
+ /** Name of the SSH key registered in the Hetzner project, injected into the server. */
485
+ sshKeyName?: string;
486
+ /**
487
+ * Keep a warm server alive this long after a job finishes so queued jobs
488
+ * reuse it instead of paying cold-boot each time. Default 8.
489
+ */
490
+ idleShutdownMinutes?: number;
491
+ /**
492
+ * Hard cost stop-loss: force-delete any runner older than this, even
493
+ * mid-job (the job then fails retryably). Default 120.
494
+ */
495
+ maxServerLifetimeMinutes?: number;
496
+ /**
497
+ * When the remote runner is unreachable / provisioning fails, fall back to
498
+ * running the full gate locally instead of failing the close-out. Default
499
+ * false — a transient infra failure keeps the task in `review` for retry
500
+ * rather than dropping back onto the contended local machine.
501
+ */
502
+ fallbackToLocal?: boolean;
503
+ /**
504
+ * Opt a human-watched release cut into the remote runner. Default false.
505
+ * Close-out uses the runner whenever `enabled` is true (it runs unattended,
506
+ * so VM boot/provision latency is invisible); a release is something the
507
+ * operator watches in the Releases modal, where a ~1-2 min remote-provision
508
+ * delay can read as a regression even though it is more reliable, so it is
509
+ * an explicit opt-in rather than inheriting the close-out flag.
510
+ */
511
+ useForReleases?: boolean;
512
+ }
513
+ /**
514
+ * Per-project `repoos check` step configuration (#0348), from `repoos.toml`'s
515
+ * `[check]` section. `check` is the generic definition-of-done gate every
516
+ * managed project runs, but some of its steps are only meaningful when the
517
+ * project opts into them — `ui-smoke` used to boot RepoOS's own dashboard for
518
+ * every repo, which is wrong for a project with no board UI. Each step is
519
+ * opt-in: absent means the step skips cleanly, exactly like the existing
520
+ * `fmt:check`/`lint`/`tests` steps do when the relevant script is absent.
521
+ */
522
+ export interface CheckConfig {
523
+ /**
524
+ * Shell command `repoos check` runs for its UI smoke step. When set it
525
+ * overrides a `smoke` script in the project's `package.json` (config wins).
526
+ * Absent and no `smoke` script means the step skips.
527
+ */
528
+ uiSmoke?: string;
529
+ /**
530
+ * Repo-relative path to the stylesheet the CSS-layering and theme-contrast
531
+ * guards read (#0351). Both guards carry no RepoOS-shaped default path, so
532
+ * absent means both skip cleanly.
533
+ */
534
+ uiStylesheet?: string;
535
+ /**
536
+ * Theme blocks inside `uiStylesheet`, each mapped to a variant name and the
537
+ * earlier scopes it inherits declarations from — the token vocabulary that
538
+ * used to be hardcoded for RepoOS (#0351). Absent means the theme-contrast
539
+ * guard skips even when `uiStylesheet` is set.
540
+ */
541
+ themeScopes?: CheckThemeScope[];
542
+ /** Foreground/background token pairs checked for ≥3:1 WCAG contrast (#0351). */
543
+ contrastPairs?: CheckContrastPair[];
544
+ /**
545
+ * Token to composite semi-transparent colors over before measuring their
546
+ * luminance — normally the page background (RepoOS uses `--bg`). Optional:
547
+ * without it the pair's own background token is used, falling back to white.
548
+ * A missing backdrop never skips a pair, it only approximates an alpha
549
+ * channel (#0351).
550
+ */
551
+ backdropToken?: string;
552
+ /**
553
+ * Tokens consumed as `background-image` (so they must resolve to a gradient,
554
+ * not a solid color — a solid value renders a transparent button) (#0351).
555
+ */
556
+ gradientTokens?: string[];
557
+ /**
558
+ * Repo-relative source roots the bare-`require()` guard scans (#0352). The
559
+ * guard is generic — a bare `require` in a `"type": "module"` package breaks
560
+ * only in the compiled ESM output — but the directories to scan are not, so
561
+ * they are declared per-project here. Absent, the guard falls back to the
562
+ * repo's `tsconfig` `include`/`files` list (minus its `exclude` list); if
563
+ * neither yields a root it skips with a clear message.
564
+ */
565
+ bareRequireDirs?: string[];
566
+ /**
567
+ * Repo-relative paths or tsconfig-style globs the bare-`require()` guard
568
+ * skips when scanning `bareRequireDirs` (#0352) — e.g. a generated subtree.
569
+ * Only consulted alongside `bareRequireDirs`; when the roots come from the
570
+ * tsconfig instead, the tsconfig's own `exclude` list is used.
571
+ */
572
+ bareRequireExcludes?: string[];
573
+ }
574
+ /**
575
+ * One theme block `repoos check`'s contrast guard evaluates (#0351): the
576
+ * selector that opens it, a variant name for failure messages, and the earlier
577
+ * scopes whose declarations it inherits (cascade order, later wins). RepoOS's
578
+ * own `:root`/`[data-theme]`/`[data-ui-theme]` blocks are declared this way in
579
+ * its `repoos.toml`; the guard itself knows none of those selector names.
580
+ */
581
+ export interface CheckThemeScope {
582
+ /** CSS selector opening the block, e.g. `:root[data-ui-theme="clear"]`. */
583
+ selector: string;
584
+ /** Variant name used in failure messages, e.g. `clear-dark`. */
585
+ name: string;
586
+ /**
587
+ * Names of earlier scopes whose declarations this scope inherits, in order
588
+ * (later wins). Defaults to `[name]` — the block stands alone.
589
+ */
590
+ inherits?: string[];
591
+ }
592
+ /** A (foreground token, background token) pair checked for contrast (#0351). */
593
+ export interface CheckContrastPair {
594
+ fg: string;
595
+ bg: string;
596
+ }
597
+ /**
598
+ * A named preview target (#0362): one previewable thing in a repo, selected by
599
+ * matching the task's `area:` frontmatter (case-insensitive). A monorepo can
600
+ * hold a landing page, a docs site, several web apps, etc.; each gets a target
601
+ * whose `areas` list names the task areas it serves.
602
+ */
603
+ export interface PreviewTargetConfig {
604
+ /** Human label for diagnostics, e.g. "Landing page". */
605
+ name: string;
606
+ /** Task `area:` values this target serves, matched case-insensitively. */
607
+ areas: string[];
608
+ /**
609
+ * Shell command that boots the preview. `{port}` and `{host}` are replaced
610
+ * with the OS-assigned values; `PORT`/`HOST` are also exported into the
611
+ * child's environment. Runs with the worktree root as cwd unless `cwd` is set.
612
+ */
613
+ command: string;
614
+ /** Optional subdirectory of the worktree to run the command in. */
615
+ cwd?: string;
616
+ /**
617
+ * Optional path polled for readiness (relative to the preview URL). Defaults
618
+ * to `/`.
619
+ */
620
+ readyPath?: string;
621
+ /**
622
+ * Optional override for how long the manager waits for this target to
623
+ * answer before giving up (milliseconds). Defaults to a value sized for a
624
+ * plain dev-server start; a command that also builds first (`bun run
625
+ * build && ...`) needs this raised, or a cold/unbuilt worktree is killed
626
+ * mid-build and reported as "did not become ready" (#0370).
627
+ */
628
+ readyTimeoutMs?: number;
629
+ }
630
+ /**
631
+ * Per-project task-preview configuration (#0362), from `repoos.toml`'s
632
+ * `[preview]` section plus any `[[preview.targets]]` tables. The whole point is
633
+ * that "preview a task" is not hardcoded to RepoOS's own web UI: an adopting
634
+ * repo declares how to boot its own previewable thing.
635
+ *
636
+ * Resolution order for a given task:
637
+ * 1. a `[[preview.targets]]` whose `areas` include the task's `area` wins;
638
+ * 2. else the top-level `command` (a default target for any area);
639
+ * 3. else — nothing matches (or the section is absent entirely) — "no preview
640
+ * configured", returned cleanly with an actionable message rather than
641
+ * attempted (#0370).
642
+ */
643
+ export interface PreviewConfig {
644
+ /** Default preview command, used when no target matches the task's area. */
645
+ command?: string;
646
+ /** Default subdirectory to run `command` in, relative to the worktree root. */
647
+ cwd?: string;
648
+ /** Default readiness path for `command` (default `/`). */
649
+ readyPath?: string;
650
+ /** Default readiness timeout for `command` — see PreviewTargetConfig.readyTimeoutMs. */
651
+ readyTimeoutMs?: number;
652
+ /** Named targets, selected by the task's `area:` frontmatter. */
653
+ targets?: PreviewTargetConfig[];
654
+ }
655
+ /** Whisper voice transcription configuration. */
656
+ export interface WhisperConfig {
657
+ provider?: "groq" | "openai" | "none";
658
+ apiKey?: string;
659
+ }
660
+ /** How often a built-in agent runs: Daily, Weekly, or only when manually triggered. */
661
+ export type BuiltInAgentSchedule = "daily" | "weekly" | "manual";
662
+ /** Persisted state for one built-in agent. */
663
+ export interface BuiltInAgentConfig {
664
+ enabled?: boolean;
665
+ schedule?: BuiltInAgentSchedule;
666
+ /** ISO timestamp of the last completed run, set by the server. */
667
+ lastRunAt?: string;
668
+ /** Coding agent CLI to use for this built-in agent (e.g., "opencode", "gpt"). */
669
+ cli?: string;
670
+ /** Model to use for this built-in agent. */
671
+ model?: string;
672
+ }
673
+ /** Task watchdog configuration (#0180). */
674
+ export interface WatchdogConfig {
675
+ /** Whether the watchdog runs. Default true. */
676
+ enabled?: boolean;
677
+ /**
678
+ * Milliseconds of silence (no running agent, no task-file activity) before an
679
+ * `active` task is candidate-stuck. Default 5 minutes.
680
+ */
681
+ stalenessMs?: number;
682
+ /**
683
+ * Whether a stuck task auto-transitions out of `active` — to `review` when
684
+ * its worktree holds work, else back to `ready` — instead of only setting
685
+ * `needsInput`. Default true.
686
+ */
687
+ autoTransition?: boolean;
688
+ }
689
+ /** Agent supervisor configuration. */
690
+ export interface SupervisorConfig {
691
+ /** Whether supervision is enabled. Default false. */
692
+ enabled?: boolean;
693
+ /** Check interval in seconds. Default 300 (5 minutes). */
694
+ interval?: number;
695
+ /** Supervision mode: "observe" (diagnose only) or "recover" (can apply safe actions). Default "observe". */
696
+ mode?: "observe" | "recover";
697
+ /** Seconds of no output before task is considered quiet. Default 600 (10 minutes). */
698
+ quietThreshold?: number;
699
+ /** Cycles of quiet output before a confirmed stall. Default 3. */
700
+ stallThreshold?: number;
701
+ /** Max automatic restarts per task. Default 2. */
702
+ maxRestarts?: number;
703
+ /** Base cooldown between restart attempts in seconds. Default 60. */
704
+ cooldownSeconds?: number;
705
+ /** Agent name for diagnostic analysis. Optional; if omitted, deterministic classification only. */
706
+ diagnosticAgent?: string;
707
+ /** Ordered list of fallback agent/model combinations to try on repeated failures. */
708
+ fallbacks?: Array<{
709
+ agent?: string;
710
+ model?: string;
711
+ }>;
712
+ }
713
+ /** A classification of a task's health status. */
714
+ export type TaskHealthStatus = "healthy" | "quiet-but-alive" | "progressing-without-output" | "waiting-for-human" | "blocked-on-merge" | "resource-constrained" | "exited-unexpectedly" | "confirmed-stalled" | "orphaned" | "inconsistent" | "unknown";
715
+ /** Supervisor heartbeat report for the Control page. */
716
+ export interface SupervisorHeartbeat {
717
+ /** Unique cycle id. */
718
+ id: string;
719
+ /** When the cycle started (ISO-8601). */
720
+ startedAt: string;
721
+ /** When the cycle completed (ISO-8601). */
722
+ completedAt?: string;
723
+ /** When the next check will run (ISO-8601). */
724
+ nextCheckAt: string;
725
+ /** Current supervisor mode. */
726
+ mode: "observe" | "recover";
727
+ /** Total active tasks. */
728
+ totalActive: number;
729
+ /** Healthy tasks. */
730
+ healthy: number;
731
+ /** Tasks with warnings. */
732
+ warnings: number;
733
+ /** Per-task status entries. */
734
+ tasks: Array<{
735
+ id: string;
736
+ title: string;
737
+ status: TaskHealthStatus;
738
+ lastOutput?: string;
739
+ evidence?: string;
740
+ action?: string;
741
+ }>;
742
+ }
743
+ /** The derived index. Disposable — rebuilt from files at any time. */
744
+ export interface RepoIndex {
745
+ version: number;
746
+ generatedAt: string;
747
+ root: string;
748
+ taskCount: number;
749
+ /** Sorted by (status order, priority, id). */
750
+ tasks: Task[];
751
+ /** Quick counts per status, for dashboards. */
752
+ counts: Record<Status, number>;
753
+ }
754
+ /**
755
+ * Lightweight task view for the board — everything TaskCard.vue renders,
756
+ * without the full body, extra, agent overrides, or activity (saved ~4-5 KB per
757
+ * task at current task counts). Includes a body preview for search and
758
+ * releasedAt for the release timeline.
759
+ */
760
+ export interface BoardTask {
761
+ id: string;
762
+ title: string;
763
+ type: string;
764
+ status: Status;
765
+ needsInput: boolean;
766
+ needsInputReason?: string;
767
+ needsMerge: boolean;
768
+ priority: Priority | string;
769
+ area: string;
770
+ assignee: Assignee;
771
+ assignedTo: string;
772
+ createdBy: string;
773
+ branch: string;
774
+ tags: string[];
775
+ created_at: string | null;
776
+ updated_at: string | null;
777
+ /** ISO timestamp of the successful review-to-done merge, derived from Activity. */
778
+ releasedAt: string | null;
779
+ /** Truncated body preview for search (first 500 chars). */
780
+ bodyPreview: string;
781
+ path: string;
782
+ absPath: string;
783
+ git: TaskGitInfo;
784
+ /** Always null in the board response — set on the client from SSE events. */
785
+ preview: null;
786
+ /** Automatic check-failure retries used on this task's most recent handoff
787
+ * (see handoff.ts's scheduleCheckFailureRetry, capped at 2). Lets the board
788
+ * distinguish "engineer patching a post-handoff check failure" from
789
+ * ordinary coding once a review-status task shows a running agent. */
790
+ checkRetryCount: number;
791
+ /** Automatic merge-conflict retries used on this task's most recent
792
+ * close-out attempt (see handoff.ts's scheduleMergeConflictRetry, capped
793
+ * at 2, #0271 follow-up). Same purpose as checkRetryCount, one step
794
+ * earlier in the pipeline. */
795
+ mergeConflictRetryCount: number;
796
+ /** Automatic retries after the task-watchdog detected a dead session that
797
+ * exited without a clean handoff (see handoff.ts's
798
+ * scheduleHandoffSignalRetry, capped at 2, #0271 follow-up). The task
799
+ * stays `active` throughout, unlike the other two which stay `review` —
800
+ * lets the board distinguish this from ordinary active-status coding. */
801
+ handoffSignalRetryCount: number;
802
+ }
803
+ /** Board index — like RepoIndex but with BoardTask[] instead of Task[]. */
804
+ export interface BoardIndex {
805
+ version: number;
806
+ generatedAt: string;
807
+ root: string;
808
+ taskCount: number;
809
+ tasks: BoardTask[];
810
+ counts: Record<Status, number>;
811
+ }