@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
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** Fields extracted from the agent's generated file, fed to createTask. */
|
|
2
|
+
export interface GeneratedTaskInput {
|
|
3
|
+
title: string;
|
|
4
|
+
type?: string;
|
|
5
|
+
priority?: string;
|
|
6
|
+
area?: string;
|
|
7
|
+
assignedTo?: string;
|
|
8
|
+
body: string;
|
|
9
|
+
/**
|
|
10
|
+
* Whether the agent's output actually contained a `---` frontmatter block
|
|
11
|
+
* (#0345). False means the agent replied with something other than the
|
|
12
|
+
* requested file content — e.g. a status message like "Done, I wrote the
|
|
13
|
+
* file" instead of the file itself — and `title`/`body` are a best-effort
|
|
14
|
+
* fallback (the raw output verbatim), not real task content. Callers
|
|
15
|
+
* should treat `false` as a failed generation, not a usable result.
|
|
16
|
+
*/
|
|
17
|
+
hadFrontmatter: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A short, human title for a raw explanation, for the no-agent fallback.
|
|
21
|
+
* First non-empty, non-delimiter line of the explanation wins; otherwise the
|
|
22
|
+
* first 60 chars. Delimiter lines (a line that is exactly `---`) are skipped so
|
|
23
|
+
* a stray frontmatter delimiter can never become a title.
|
|
24
|
+
*/
|
|
25
|
+
export declare function explanationTitle(explanation: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Drop leaked tool-call markup from an agent's answer.
|
|
28
|
+
*
|
|
29
|
+
* Only whole lines are removed, and only outside fenced code blocks, so a task
|
|
30
|
+
* that legitimately quotes markup in a code block keeps it. When a removal
|
|
31
|
+
* strands a second consecutive blank line, one is dropped so cutting a block
|
|
32
|
+
* out of the middle of a body doesn't leave a gap. A body with no leaked
|
|
33
|
+
* tokens is returned unchanged.
|
|
34
|
+
*/
|
|
35
|
+
export declare function stripToolCallMarkup(output: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Parse the PM agent's generated markdown into createTask input. Never throws:
|
|
38
|
+
* anything unparsable falls back to treating the whole output as the body with
|
|
39
|
+
* a derived title, so input survives a bad agent response.
|
|
40
|
+
*
|
|
41
|
+
* The agent's answer is the task file verbatim, so any tool-call markup it
|
|
42
|
+
* leaked would be persisted as body text — it is stripped before parsing so a
|
|
43
|
+
* leaked token can never become the title either.
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseGeneratedTask(rawOutput: string): GeneratedTaskInput;
|
|
46
|
+
/**
|
|
47
|
+
* Build the PM agent's prompt from a raw explanation.
|
|
48
|
+
*
|
|
49
|
+
* The system already persists the raw explanation under a `## Original prompt`
|
|
50
|
+
* section before the PM runs, so the PM is told not to duplicate it. It should
|
|
51
|
+
* still end with the structured body only; the system re-ensures the section.
|
|
52
|
+
*/
|
|
53
|
+
export declare function pmPrompt(explanation: string): string;
|
|
54
|
+
/** The persisted setting key that controls the drawer's default mode. */
|
|
55
|
+
export declare const DEFAULT_TASK_MODE_KEY = "defaultTaskMode";
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { FM_DELIM, parseDocument } from "../core/frontmatter.js";
|
|
2
|
+
const TASK_TYPES = ["feature", "bug", "chore", "spec", "refactor"];
|
|
3
|
+
const PRIORITIES = ["p0", "p1", "p2", "p3"];
|
|
4
|
+
/**
|
|
5
|
+
* A short, human title for a raw explanation, for the no-agent fallback.
|
|
6
|
+
* First non-empty, non-delimiter line of the explanation wins; otherwise the
|
|
7
|
+
* first 60 chars. Delimiter lines (a line that is exactly `---`) are skipped so
|
|
8
|
+
* a stray frontmatter delimiter can never become a title.
|
|
9
|
+
*/
|
|
10
|
+
export function explanationTitle(explanation) {
|
|
11
|
+
const line = explanation
|
|
12
|
+
.split("\n")
|
|
13
|
+
.map((l) => l.trim())
|
|
14
|
+
.find((l) => Boolean(l) && l !== FM_DELIM) ?? "";
|
|
15
|
+
if (line.length > 0) {
|
|
16
|
+
return line.length <= 60 ? line : `${line.slice(0, 57).trimEnd()}…`;
|
|
17
|
+
}
|
|
18
|
+
const flat = explanation
|
|
19
|
+
.replace(/\s+/g, " ")
|
|
20
|
+
.replace(/\s*---\s*/g, " ")
|
|
21
|
+
.trim();
|
|
22
|
+
return flat.length <= 60 ? flat || "Untitled task" : `${flat.slice(0, 57).trimEnd()}…`;
|
|
23
|
+
}
|
|
24
|
+
function firstMatch(value, allowed, fallback) {
|
|
25
|
+
const v = typeof value === "string" ? value.toLowerCase().trim() : "";
|
|
26
|
+
return allowed.find((a) => a === v) ?? fallback;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The control-token names a leaked tool call is built from. Kept as bare names
|
|
30
|
+
* so every dialect below is matched by one pattern.
|
|
31
|
+
*/
|
|
32
|
+
const TOOL_TOKEN_NAMES = "tool_calls?|tool\u2581calls?|function_calls|function_results|invoke|parameter";
|
|
33
|
+
/**
|
|
34
|
+
* A line that is nothing but a tool-call control token. Models that render
|
|
35
|
+
* tool calls as inline markup can emit these into plain prose when a turn is
|
|
36
|
+
* cut short, in several dialects: bare (`<parameter>`), namespaced
|
|
37
|
+
* (`<ns:invoke>`), and special-token wrapped, where the delimiter is either an
|
|
38
|
+
* ASCII or a fullwidth vertical bar.
|
|
39
|
+
*
|
|
40
|
+
* Deliberately anchored to the whole line: a task body legitimately discusses
|
|
41
|
+
* markup inline (`the <input> element`), and only a lone control token on its
|
|
42
|
+
* own line is unambiguous leakage.
|
|
43
|
+
*/
|
|
44
|
+
const TOOL_TOKEN_LINE = new RegExp(`^<\\/?[\uff5c|]?\\s*(?:[\\w.-]+[:\u2581\uff5c|])?(?:${TOOL_TOKEN_NAMES})(?:[_\u2581](?:begin|end))?\\b[^>]*[\uff5c|]?\\s*\\/?>$`);
|
|
45
|
+
/** True for a fenced-code-block delimiter line (``` or ~~~). */
|
|
46
|
+
function isFence(line) {
|
|
47
|
+
return /^(?:```|~~~)/.test(line);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Drop leaked tool-call markup from an agent's answer.
|
|
51
|
+
*
|
|
52
|
+
* Only whole lines are removed, and only outside fenced code blocks, so a task
|
|
53
|
+
* that legitimately quotes markup in a code block keeps it. When a removal
|
|
54
|
+
* strands a second consecutive blank line, one is dropped so cutting a block
|
|
55
|
+
* out of the middle of a body doesn't leave a gap. A body with no leaked
|
|
56
|
+
* tokens is returned unchanged.
|
|
57
|
+
*/
|
|
58
|
+
export function stripToolCallMarkup(output) {
|
|
59
|
+
const kept = [];
|
|
60
|
+
let inFence = false;
|
|
61
|
+
let removed = false;
|
|
62
|
+
for (const line of output.split("\n")) {
|
|
63
|
+
const trimmed = line.trim();
|
|
64
|
+
if (isFence(trimmed))
|
|
65
|
+
inFence = !inFence;
|
|
66
|
+
if (!inFence && TOOL_TOKEN_LINE.test(trimmed)) {
|
|
67
|
+
removed = true;
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const previous = kept[kept.length - 1];
|
|
71
|
+
if (removed && !inFence && trimmed === "" && previous !== undefined && previous.trim() === "") {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
kept.push(line);
|
|
75
|
+
}
|
|
76
|
+
return removed ? kept.join("\n").trim() : output;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Parse the PM agent's generated markdown into createTask input. Never throws:
|
|
80
|
+
* anything unparsable falls back to treating the whole output as the body with
|
|
81
|
+
* a derived title, so input survives a bad agent response.
|
|
82
|
+
*
|
|
83
|
+
* The agent's answer is the task file verbatim, so any tool-call markup it
|
|
84
|
+
* leaked would be persisted as body text — it is stripped before parsing so a
|
|
85
|
+
* leaked token can never become the title either.
|
|
86
|
+
*/
|
|
87
|
+
export function parseGeneratedTask(rawOutput) {
|
|
88
|
+
const output = stripToolCallMarkup(rawOutput);
|
|
89
|
+
const { data, body, hadFrontmatter } = parseDocument(output.trim());
|
|
90
|
+
const rawTitle = typeof data.title === "string" && data.title.trim()
|
|
91
|
+
? data.title.trim()
|
|
92
|
+
: typeof data.title === "number"
|
|
93
|
+
? String(data.title)
|
|
94
|
+
: "";
|
|
95
|
+
if (hadFrontmatter) {
|
|
96
|
+
// A frontmatter block was present (open, closed, or embedded-in-body).
|
|
97
|
+
// Use its parsed fields; the title falls back to the body's first line so
|
|
98
|
+
// a delimiter can never leak into the title.
|
|
99
|
+
return {
|
|
100
|
+
title: rawTitle || explanationTitle(body),
|
|
101
|
+
type: firstMatch(data.type, TASK_TYPES),
|
|
102
|
+
priority: firstMatch(data.priority, PRIORITIES),
|
|
103
|
+
area: typeof data.area === "string" && data.area.trim() ? data.area.trim() : undefined,
|
|
104
|
+
assignedTo: typeof data.assigned_to === "string" && data.assigned_to.trim()
|
|
105
|
+
? data.assigned_to.trim()
|
|
106
|
+
: undefined,
|
|
107
|
+
body: body.trim(),
|
|
108
|
+
hadFrontmatter: true,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// No usable frontmatter: the agent didn't return the file content it was
|
|
112
|
+
// asked for (e.g. a "Done, I wrote it" status reply instead — #0345). Keep
|
|
113
|
+
// the raw output as a best-effort title/body so nothing here throws, but
|
|
114
|
+
// `hadFrontmatter: false` tells the caller this is not real task content —
|
|
115
|
+
// it must not be allowed to overwrite the draft.
|
|
116
|
+
return { title: explanationTitle(output), body: output.trim(), hadFrontmatter: false };
|
|
117
|
+
}
|
|
118
|
+
/** The task-file conventions the PM agent must follow, inlined into its prompt. */
|
|
119
|
+
const TASK_CONVENTIONS = [
|
|
120
|
+
"Task files are markdown with YAML frontmatter, like:",
|
|
121
|
+
"---",
|
|
122
|
+
'id: "0001" # assigned by the system — do NOT include',
|
|
123
|
+
"title: Short imperative title",
|
|
124
|
+
"type: feature # feature | bug | chore | spec | refactor",
|
|
125
|
+
"status: inbox # assigned by the system — do NOT include",
|
|
126
|
+
"priority: p2 # p0 | p1 | p2 | p3",
|
|
127
|
+
"area: web # the part of the product, e.g. web, core, cli, ui, api",
|
|
128
|
+
"assigned_to: ai # ai | human | unassigned",
|
|
129
|
+
"branch: feat/slug # derived from the title — do NOT include",
|
|
130
|
+
"created_at: ... # assigned by the system — do NOT include",
|
|
131
|
+
"updated_at: ... # assigned by the system — do NOT include",
|
|
132
|
+
"---",
|
|
133
|
+
"",
|
|
134
|
+
"The body follows with markdown sections, in order:",
|
|
135
|
+
"- ## Problem — what's broken or missing, why it matters",
|
|
136
|
+
"- ## Desired UX — what the end experience should be",
|
|
137
|
+
"- ## Acceptance criteria — a concrete checkbox list (- [ ] ...)",
|
|
138
|
+
"- ## Notes for AI — constraints, files to touch, things NOT to do",
|
|
139
|
+
"- ## Scope (optional) — what this task covers and what is deferred",
|
|
140
|
+
"- ## Related (optional) — related task ids or docs",
|
|
141
|
+
"- ## Activity — leave it out; the system appends entries",
|
|
142
|
+
"",
|
|
143
|
+
"Flesh out each section with concrete detail drawn ONLY from the explanation.",
|
|
144
|
+
"Do not invent requirements the user did not imply. When a detail is genuinely",
|
|
145
|
+
"ambiguous, pick a reasonable default and state the assumption in Notes for AI.",
|
|
146
|
+
"Do not ask clarifying questions.",
|
|
147
|
+
].join("\n");
|
|
148
|
+
/**
|
|
149
|
+
* Build the PM agent's prompt from a raw explanation.
|
|
150
|
+
*
|
|
151
|
+
* The system already persists the raw explanation under a `## Original prompt`
|
|
152
|
+
* section before the PM runs, so the PM is told not to duplicate it. It should
|
|
153
|
+
* still end with the structured body only; the system re-ensures the section.
|
|
154
|
+
*/
|
|
155
|
+
export function pmPrompt(explanation) {
|
|
156
|
+
return [
|
|
157
|
+
"You are the PM agent for RepoOS. Turn the user's rough explanation into a",
|
|
158
|
+
"complete, well-formed task file that drops straight into the repo's work/ dir.",
|
|
159
|
+
"",
|
|
160
|
+
"The user's explanation:",
|
|
161
|
+
"",
|
|
162
|
+
"```",
|
|
163
|
+
explanation.trim(),
|
|
164
|
+
"```",
|
|
165
|
+
"",
|
|
166
|
+
"The raw explanation is already stored by the system under a",
|
|
167
|
+
"'## Original prompt' section, so do NOT repeat it in your output — write",
|
|
168
|
+
"the structured body only (the section is re-appended for you).",
|
|
169
|
+
"",
|
|
170
|
+
"Task-file conventions (follow them exactly):",
|
|
171
|
+
"",
|
|
172
|
+
TASK_CONVENTIONS,
|
|
173
|
+
"",
|
|
174
|
+
"Respond with ONLY the markdown file content, starting with the opening '---'",
|
|
175
|
+
"line and with no preamble, commentary, or code fences.",
|
|
176
|
+
].join("\n");
|
|
177
|
+
}
|
|
178
|
+
/** The persisted setting key that controls the drawer's default mode. */
|
|
179
|
+
export const DEFAULT_TASK_MODE_KEY = "defaultTaskMode";
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { RepoOSConfig, Status, Task } from "../core/types.js";
|
|
2
|
+
import type { AgentHandoffRequest, AgentRunner } from "./agents.js";
|
|
3
|
+
import type { TaskCheckManager, TaskCheckListener } from "./task-check.js";
|
|
4
|
+
export type HandoffStep = "validate" | "check" | "commit" | "review" | "main" | "done";
|
|
5
|
+
export interface HandoffResult {
|
|
6
|
+
ok: boolean;
|
|
7
|
+
detail?: string;
|
|
8
|
+
step: HandoffStep;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Finalize one capability issued by an active runner turn.
|
|
12
|
+
*
|
|
13
|
+
* Enforces a hard deadline (600s) on the entire finalization process. If any
|
|
14
|
+
* step (validate, check, commit, review, main) exceeds the deadline, the
|
|
15
|
+
* finalization is abandoned and returned as failed. This ensures the handoff
|
|
16
|
+
* promise never hangs indefinitely.
|
|
17
|
+
*/
|
|
18
|
+
export declare function handoffTask(config: RepoOSConfig, task: Task, request: AgentHandoffRequest, onProgress?: (step: HandoffStep) => void, onStatusChange?: (task: Task, prev: Status, next: Status) => void,
|
|
19
|
+
/** Records this finalization's `repoos check` run for the Debug tab (0310). */
|
|
20
|
+
taskChecks?: TaskCheckManager, onTaskCheckEvent?: TaskCheckListener): Promise<HandoffResult>;
|
|
21
|
+
/**
|
|
22
|
+
* On a finalization failure at the `check` step, automatically resume the
|
|
23
|
+
* same engineer session with the check output and ask it to fix (or re-verify,
|
|
24
|
+
* if the failure looks transient) and re-hand-off — up to
|
|
25
|
+
* `MAX_CHECK_RETRY_ATTEMPTS` times. Every other failure step (validate,
|
|
26
|
+
* commit, review, main) is structural/environmental, not something a plain
|
|
27
|
+
* retry of the same session fixes, so only `check` is retried.
|
|
28
|
+
*
|
|
29
|
+
* Returns true when a retry was scheduled. On give-up (cap reached, or no
|
|
30
|
+
* engineer configured) the failure reason is persisted to the task's Activity
|
|
31
|
+
* log via `AgentRunner.persistHandoffFailure` so the task watchdog classifies
|
|
32
|
+
* it correctly instead of falling back to its generic
|
|
33
|
+
* "exited without handoff" guess.
|
|
34
|
+
*/
|
|
35
|
+
export declare function scheduleCheckFailureRetry(config: RepoOSConfig, task: Task, result: HandoffResult, runner: AgentRunner,
|
|
36
|
+
/** Called right after `check_retry_count` is persisted so the live index
|
|
37
|
+
* (and its SSE `task.updated` event) picks up the new count immediately —
|
|
38
|
+
* this write bypasses `patchTaskFile`, so nothing else refreshes it. */
|
|
39
|
+
onFileChange?: (absPath: string) => void): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* On a close-out `validating`-phase failure caused by a REAL merge conflict
|
|
42
|
+
* (the candidate's merge of the feature branch into itself failed with named
|
|
43
|
+
* conflicting paths — not the task's own bookkeeping file or `dist/`/
|
|
44
|
+
* `screenshots/`, which auto-resolve, and not an infra failure), automatically
|
|
45
|
+
* resume the task's engineer session and ask it to merge main into ITS OWN
|
|
46
|
+
* branch and resolve the conflict there — the exact manual recovery
|
|
47
|
+
* docs/close-out-pipeline.md prescribes (#0271 follow-up: this was
|
|
48
|
+
* previously always a human/agent-operator manual step, discovered when
|
|
49
|
+
* task #0282 sat failed until someone noticed).
|
|
50
|
+
*
|
|
51
|
+
* Unlike `scheduleCheckFailureRetry`, this does NOT ask the engineer to
|
|
52
|
+
* re-emit the handoff signal — the task is already `review`, and a fresh
|
|
53
|
+
* handoff attempt against an already-`review` task just short-circuits as
|
|
54
|
+
* "already finalized" (see the check near the top of `handoffTask`) without
|
|
55
|
+
* re-running the close-out. Instead, server.ts's `agent.exited` handler
|
|
56
|
+
* watches for this exact session ending while its job is still the
|
|
57
|
+
* failed-on-this-conflict record, and re-enqueues the close-out itself —
|
|
58
|
+
* the same action a human clicking "Move to done" again performs. The
|
|
59
|
+
* engineer's job is just to fix the branch and end its turn.
|
|
60
|
+
*
|
|
61
|
+
* Otherwise mirrors `scheduleCheckFailureRetry` closely: same retry cap
|
|
62
|
+
* shape, same give-up-to-persistHandoffFailure fallback, same
|
|
63
|
+
* do-not-flip-status behavior (the task stays in `review` — TaskCard.vue can
|
|
64
|
+
* label this state the same way it labels a check-failure retry). Capped,
|
|
65
|
+
* because a conflict that survives two resolve attempts is very likely the
|
|
66
|
+
* agent resolving it WRONG in a way that reintroduces the same conflict, not
|
|
67
|
+
* something a third attempt fixes — same logic `MAX_CHECK_RETRY_ATTEMPTS`
|
|
68
|
+
* already encodes.
|
|
69
|
+
*
|
|
70
|
+
* Returns true when a retry was scheduled.
|
|
71
|
+
*/
|
|
72
|
+
export declare function scheduleMergeConflictRetry(config: RepoOSConfig, task: Task, reason: string, runner: AgentRunner,
|
|
73
|
+
/** Same purpose as in `scheduleCheckFailureRetry` — let the live index pick
|
|
74
|
+
* up the new retry count immediately via its own SSE event. */
|
|
75
|
+
onFileChange?: (absPath: string) => void): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Third instance of the same pattern (#0271 follow-up), for the task-watchdog's
|
|
78
|
+
* `exited-without-handoff` classification (task-watchdog.ts): a session ran to
|
|
79
|
+
* completion but its final line wasn't exactly `::repoos-handoff-ready::`, so no
|
|
80
|
+
* handoff ever fired. Previously the watchdog could only surface this — move
|
|
81
|
+
* the task to `review`/`ready` and leave a human to notice and click Restart
|
|
82
|
+
* (task #0268 sat this way until someone asked "why hasn't this recovered on
|
|
83
|
+
* its own").
|
|
84
|
+
*
|
|
85
|
+
* Unlike the other two, this failure has no specific diagnostic to hand back —
|
|
86
|
+
* "you didn't finish right" is vaguer than a named conflict or check output —
|
|
87
|
+
* so it's a strictly weaker signal, which is exactly why the watchdog didn't
|
|
88
|
+
* already do this: auto-resuming on a vague prompt risks looping on genuine
|
|
89
|
+
* confusion, not just fixing a rendering hiccup. The cap bounds that risk the
|
|
90
|
+
* same way it bounds the other two; on exhaustion this returns false and the
|
|
91
|
+
* caller (task-watchdog.ts) falls through to its EXISTING surface behavior —
|
|
92
|
+
* there is no separate give-up path here, unlike the other two schedulers,
|
|
93
|
+
* because surfacing already IS the correct terminal state the watchdog was
|
|
94
|
+
* built for.
|
|
95
|
+
*
|
|
96
|
+
* Returns true when a retry was scheduled; false means "give up, surface it
|
|
97
|
+
* the normal way" — either the cap was hit or no engineer is configured.
|
|
98
|
+
*/
|
|
99
|
+
export declare function scheduleHandoffSignalRetry(config: RepoOSConfig, task: Task, runner: AgentRunner, onFileChange?: (absPath: string) => void): boolean;
|