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