@repo-os/repoos 0.5.67 → 0.5.68
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/dist/.build-info.json +2 -2
- package/dist/.build-stamp.json +1 -1
- package/dist/cli/api-route-parity.js +4 -0
- package/dist/cli/help.js +30 -5
- package/dist/cli/index.js +27 -1
- package/dist/cli/repoos-api.d.ts +4 -0
- package/dist/cli/repoos-api.js +15 -0
- package/dist/cli/sse-client.d.ts +5 -0
- package/dist/cli/sse-client.js +42 -0
- package/dist/cli/task-flags.d.ts +23 -0
- package/dist/cli/task-flags.js +79 -0
- package/dist/commands/check.d.ts +12 -9
- package/dist/commands/check.js +44 -21
- package/dist/commands/control-api.d.ts +1 -0
- package/dist/commands/control-api.js +41 -1
- package/dist/commands/driver.d.ts +1 -0
- package/dist/commands/driver.js +178 -0
- package/dist/commands/init.js +15 -1
- package/dist/commands/shot.js +17 -11
- package/dist/commands/status.d.ts +46 -0
- package/dist/commands/status.js +109 -10
- package/dist/commands/stories.d.ts +14 -0
- package/dist/commands/stories.js +294 -0
- package/dist/commands/tasks.d.ts +20 -6
- package/dist/commands/tasks.js +51 -46
- package/dist/commands/watch.d.ts +16 -0
- package/dist/commands/watch.js +109 -0
- package/dist/core/attention.d.ts +17 -1
- package/dist/core/attention.js +100 -0
- package/dist/core/build.d.ts +2 -0
- package/dist/core/build.js +7 -3
- package/dist/core/check-failure-summary.d.ts +15 -1
- package/dist/core/check-failure-summary.js +88 -1
- package/dist/core/check-results.js +4 -1
- package/dist/core/check-slowness.d.ts +160 -0
- package/dist/core/check-slowness.js +203 -0
- package/dist/core/check-store.d.ts +1 -1
- package/dist/core/close-out-gate.d.ts +97 -0
- package/dist/core/close-out-gate.js +132 -0
- package/dist/core/config.d.ts +25 -0
- package/dist/core/config.js +128 -15
- package/dist/core/decision-digest.d.ts +102 -0
- package/dist/core/decision-digest.js +416 -0
- package/dist/core/doctor.js +48 -1
- package/dist/core/driver-brief.d.ts +203 -0
- package/dist/core/driver-brief.js +294 -0
- package/dist/core/git.d.ts +2 -4
- package/dist/core/git.js +30 -28
- package/dist/core/page-browser-gate.d.ts +1 -1
- package/dist/core/project-docs-agents-paths.test.d.ts +1 -0
- package/dist/core/project-docs-agents-paths.test.js +22 -0
- package/dist/core/project-docs.d.ts +5 -0
- package/dist/core/project-docs.js +37 -0
- package/dist/core/record-creator.d.ts +13 -0
- package/dist/core/record-creator.js +45 -0
- package/dist/core/record-creator.test.d.ts +1 -0
- package/dist/core/record-creator.test.js +74 -0
- package/dist/core/remote-pool-queue.js +10 -4
- package/dist/core/repoos.d.ts +4 -0
- package/dist/core/repoos.js +5 -0
- package/dist/core/review-verdict.d.ts +5 -0
- package/dist/core/review-verdict.js +28 -0
- package/dist/core/review-verdict.test.js +8 -1
- package/dist/core/review-verification.d.ts +107 -0
- package/dist/core/review-verification.js +281 -0
- package/dist/core/review-verification.test.d.ts +1 -0
- package/dist/core/review-verification.test.js +148 -0
- package/dist/core/service-manager.d.ts +9 -0
- package/dist/core/service-manager.js +11 -0
- package/dist/core/shot-assertions.d.ts +50 -0
- package/dist/core/shot-assertions.js +109 -0
- package/dist/core/shot-fixtures.d.ts +14 -0
- package/dist/core/shot-fixtures.js +24 -0
- package/dist/core/shot-page.d.ts +7 -1
- package/dist/core/shot-page.js +21 -9
- package/dist/core/shot-plan.d.ts +61 -0
- package/dist/core/shot-plan.js +126 -3
- package/dist/core/story-definition-files.js +1 -1
- package/dist/core/task-activity-strip.test.d.ts +1 -0
- package/dist/core/task-activity-strip.test.js +25 -0
- package/dist/core/task-body-normalize.test.d.ts +1 -0
- package/dist/core/task-body-normalize.test.js +72 -0
- package/dist/core/task.d.ts +13 -0
- package/dist/core/task.js +106 -1
- package/dist/core/types.d.ts +29 -0
- package/dist/core/types.js +2 -0
- package/dist/server/agents.d.ts +15 -0
- package/dist/server/agents.js +37 -2
- package/dist/server/approval-policy.js +4 -0
- package/dist/server/attention-feed.d.ts +52 -1
- package/dist/server/attention-feed.js +121 -1
- package/dist/server/board-events.d.ts +26 -0
- package/dist/server/board-events.js +146 -0
- package/dist/server/conflict-resolution.d.ts +344 -0
- package/dist/server/conflict-resolution.js +501 -0
- package/dist/server/cto-actions.d.ts +1 -0
- package/dist/server/cto-actions.js +1 -1
- package/dist/server/cto-heartbeat.d.ts +14 -0
- package/dist/server/cto-heartbeat.js +24 -0
- package/dist/server/cto-monitor.d.ts +3 -0
- package/dist/server/cto-monitor.js +6 -0
- package/dist/server/cto.d.ts +7 -2
- package/dist/server/cto.js +27 -37
- package/dist/server/debug-tldr.d.ts +1 -1
- package/dist/server/debug-tldr.js +2 -1
- package/dist/server/decision-digest.d.ts +16 -0
- package/dist/server/decision-digest.js +94 -0
- package/dist/server/done.d.ts +7 -1
- package/dist/server/driver-brief.d.ts +18 -0
- package/dist/server/driver-brief.js +292 -0
- package/dist/server/handoff.d.ts +4 -12
- package/dist/server/handoff.js +43 -9
- package/dist/server/integration-job.d.ts +41 -6
- package/dist/server/integration-job.js +78 -3
- package/dist/server/integration-orchestrator.d.ts +146 -2
- package/dist/server/integration-orchestrator.js +893 -150
- package/dist/server/integration-status.d.ts +7 -2
- package/dist/server/integration-status.js +18 -4
- package/dist/server/live-index.d.ts +20 -0
- package/dist/server/live-index.js +22 -1
- package/dist/server/pre-review-remote-gate.d.ts +6 -0
- package/dist/server/pre-review-remote-gate.js +6 -0
- package/dist/server/preview-verification-slot.d.ts +11 -0
- package/dist/server/preview-verification-slot.js +34 -0
- package/dist/server/release.d.ts +7 -0
- package/dist/server/release.js +16 -0
- package/dist/server/remote-validation.d.ts +148 -7
- package/dist/server/remote-validation.js +602 -107
- package/dist/server/request-close-out.js +8 -0
- package/dist/server/review-verification-gather.d.ts +6 -0
- package/dist/server/review-verification-gather.js +89 -0
- package/dist/server/review.js +42 -5
- package/dist/server/routes/attention.js +9 -0
- package/dist/server/routes/decisions.d.ts +3 -0
- package/dist/server/routes/decisions.js +14 -0
- package/dist/server/routes/driver.d.ts +3 -0
- package/dist/server/routes/driver.js +15 -0
- package/dist/server/routes/helpers.d.ts +1 -0
- package/dist/server/routes/index.d.ts +2 -0
- package/dist/server/routes/index.js +2 -0
- package/dist/server/routes/info.js +7 -0
- package/dist/server/routes/stories.d.ts +30 -1
- package/dist/server/routes/stories.js +112 -9
- package/dist/server/routes/tasks.d.ts +2 -0
- package/dist/server/routes/tasks.js +55 -8
- package/dist/server/routes/types.d.ts +20 -0
- package/dist/server/server.js +159 -15
- package/dist/server/shot-capture.d.ts +8 -21
- package/dist/server/shot-capture.js +62 -9
- package/dist/server/shots.d.ts +16 -0
- package/dist/server/shots.js +6 -0
- package/dist/server/task-body-migration.d.ts +18 -0
- package/dist/server/task-body-migration.js +152 -0
- package/dist/server/task-check.d.ts +6 -0
- package/dist/server/task-check.js +14 -0
- package/dist/server/task-watchdog.d.ts +9 -0
- package/dist/server/task-watchdog.js +8 -0
- package/dist/server/ui-handoff-gate.d.ts +73 -2
- package/dist/server/ui-handoff-gate.js +335 -91
- package/dist/server/write.d.ts +7 -0
- package/dist/server/write.js +6 -2
- package/dist/ui/assets/{AgentModelModal-DhY5NOZ1.js → AgentModelModal-BU_T-d03.js} +1 -1
- package/dist/ui/assets/AgentsView-0r3QjL0C.css +1 -0
- package/dist/ui/assets/AgentsView-B2AXFnUJ.js +1 -0
- package/dist/ui/assets/ChecksView-CVnvMKM-.css +1 -0
- package/dist/ui/assets/ChecksView-RAHI2BB3.js +0 -0
- package/dist/ui/assets/ContextView-DAxjJdK4.js +4 -0
- package/dist/ui/assets/DashboardView-DtXleA5o.css +1 -0
- package/dist/ui/assets/DashboardView-hZr-QF_E.js +1 -0
- package/dist/ui/assets/{DiffView-qdIZFGbS.js → DiffView-DLFmq-vx.js} +1 -1
- package/dist/ui/assets/{FailedTestsList-92u0pppH.js → FailedTestsList-3_oexlME.js} +1 -1
- package/dist/ui/assets/{InputsView-DtPR9kyl.js → InputsView-CE9ZOYMD.js} +1 -1
- package/dist/ui/assets/{LoginView-DWEf0kRL.js → LoginView-dfYNibLg.js} +1 -1
- package/dist/ui/assets/ReleasesView-BCE0uCPM.css +1 -0
- package/dist/ui/assets/ReleasesView-Cq8kGWZq.js +5 -0
- package/dist/ui/assets/SettingsView-BzZQH1hi.js +4 -0
- package/dist/ui/assets/StoriesView-3P5nmoFU.js +1 -0
- package/dist/ui/assets/{VoiceDictate-sbY2kf3g.js → VoiceDictate-CMtXjAXc.js} +1 -1
- package/dist/ui/assets/WorkView-BhDux3s_.css +1 -0
- package/dist/ui/assets/WorkView-P_JFoClW.js +2 -0
- package/dist/ui/assets/{abnfDiagram-VCTEODGH-DbjEiPQk.js → abnfDiagram-VCTEODGH-DB7IT3Oz.js} +1 -1
- package/dist/ui/assets/architecture-7GRP2DOG-D0IdEE2Q.js +1 -0
- package/dist/ui/assets/{architectureDiagram-5GKGNRK7-iuYOljXl.js → architectureDiagram-5GKGNRK7-BKe4O-fa.js} +1 -1
- package/dist/ui/assets/{blockDiagram-I7D4REHJ-BMQZCcl4.js → blockDiagram-I7D4REHJ-CSam08UZ.js} +1 -1
- package/dist/ui/assets/{c4Diagram-7LVT6UL2-CYARlZF5.js → c4Diagram-7LVT6UL2-D6YRpohJ.js} +1 -1
- package/dist/ui/assets/channel-C0fJQ3Uq.js +1 -0
- package/dist/ui/assets/{chunk-4HAMMTFA-C-0fE7Hb.js → chunk-4HAMMTFA-BnbHtCpa.js} +1 -1
- package/dist/ui/assets/{chunk-75Z2AOVW-9h5YgMdt.js → chunk-75Z2AOVW-CYy9Me4H.js} +1 -1
- package/dist/ui/assets/{chunk-DU6HZSFF-9BISDKkf.js → chunk-DU6HZSFF-JVoEkt2i.js} +1 -1
- package/dist/ui/assets/{chunk-F27PBJKO-VJth4ETL.js → chunk-F27PBJKO-g4ruqsFu.js} +1 -1
- package/dist/ui/assets/{chunk-GMAD6QVW-CMTnCPtC.js → chunk-GMAD6QVW-BfX4kTq8.js} +1 -1
- package/dist/ui/assets/{chunk-GVQU2GXP-bjPEFMMp.js → chunk-GVQU2GXP-C9yJ2E9t.js} +1 -1
- package/dist/ui/assets/{chunk-IMKFNOWR-C1BByNVf.js → chunk-IMKFNOWR-CbzZAPQV.js} +1 -1
- package/dist/ui/assets/{chunk-L3NEJ4N5-whMpUmjS.js → chunk-L3NEJ4N5-Cjbclivl.js} +1 -1
- package/dist/ui/assets/{chunk-OSK3NFVY-B6Ch9_w3.js → chunk-OSK3NFVY-YA4gtld_.js} +1 -1
- package/dist/ui/assets/{chunk-P2QGCYS3-CWRV4Ah9.js → chunk-P2QGCYS3-Cj7e9ARN.js} +1 -1
- package/dist/ui/assets/{chunk-POPQ4Y6H-CcHY8rtu.js → chunk-POPQ4Y6H-fwh_frIf.js} +1 -1
- package/dist/ui/assets/{chunk-PWAF6VOD-BC0VBnZU.js → chunk-PWAF6VOD-BUHsDYf7.js} +1 -1
- package/dist/ui/assets/{chunk-SHT3W25Y-DfFIsip4.js → chunk-SHT3W25Y-BsPOUuAn.js} +1 -1
- package/dist/ui/assets/{chunk-SVP7TREG-C3xL4bvJ.js → chunk-SVP7TREG-CwMeLZi5.js} +1 -1
- package/dist/ui/assets/{chunk-TICWLB2K-Bt1FxNVL.js → chunk-TICWLB2K-B9QsE3VX.js} +1 -1
- package/dist/ui/assets/classDiagram-ZZMXUADV-DdZ1tR-T.js +1 -0
- package/dist/ui/assets/classDiagram-v2-VYDZK3BY-DdZ1tR-T.js +1 -0
- package/dist/ui/assets/{cynefin-OW5HDTMX-BPQzV4Oh.js → cynefin-OW5HDTMX-DaO-Ofss.js} +1 -1
- package/dist/ui/assets/{cynefinDiagram-5FMLGOSQ-BTmi3fdq.js → cynefinDiagram-5FMLGOSQ-DbkXxB0L.js} +1 -1
- package/dist/ui/assets/{dagre-GXQ25YYZ-EBMMAtpz.js → dagre-GXQ25YYZ-CJefo5Cd.js} +1 -1
- package/dist/ui/assets/{diagram-S7CK7UJ4-BaEfBV0o.js → diagram-S7CK7UJ4-BshX_cqp.js} +1 -1
- package/dist/ui/assets/{diagram-UQ7AKVKN-BRL9YWBF.js → diagram-UQ7AKVKN-xP1_CqiO.js} +1 -1
- package/dist/ui/assets/{diagram-VSXAHHWV-CI_jmzDG.js → diagram-VSXAHHWV-BygVWS22.js} +1 -1
- package/dist/ui/assets/{diagram-VX7I27RA-DoZgqatt.js → diagram-VX7I27RA-CH--xipF.js} +1 -1
- package/dist/ui/assets/{diagram-Z3DM3KII-CEZOwotu.js → diagram-Z3DM3KII-DJrYKohr.js} +1 -1
- package/dist/ui/assets/{ebnfDiagram-PWID7BFC-DoHUC2pF.js → ebnfDiagram-PWID7BFC-BkQ5ACZ8.js} +1 -1
- package/dist/ui/assets/{erDiagram-RLTQ6QDP-Bpj96FeR.js → erDiagram-RLTQ6QDP-DKrnpHSN.js} +1 -1
- package/dist/ui/assets/eventmodeling-NTZA5JFV-DHsluImP.js +1 -0
- package/dist/ui/assets/flowDiagram-HODETNUW-CpTJSjiU.js +1 -0
- package/dist/ui/assets/{ganttDiagram-EL5Y4UJY-BXWL7ow_.js → ganttDiagram-EL5Y4UJY-DzU13pix.js} +1 -1
- package/dist/ui/assets/{gitGraph-4MIJSDKK-CygEn6Pm.js → gitGraph-4MIJSDKK-C2NqgafQ.js} +1 -1
- package/dist/ui/assets/{gitGraphDiagram-WWUBYQGX-BEN8kG8Y.js → gitGraphDiagram-WWUBYQGX-CD7Lar3K.js} +1 -1
- package/dist/ui/assets/index-C3vwYKvY.js +55 -0
- package/dist/ui/assets/index-CjZQAL44.css +1 -0
- package/dist/ui/assets/{info-A6RAGUB7-CG18k5Tc.js → info-A6RAGUB7-Cl6FFCuQ.js} +1 -1
- package/dist/ui/assets/{infoDiagram-27XIBGKW-BVEnM-o1.js → infoDiagram-27XIBGKW-Co-YjPmk.js} +1 -1
- package/dist/ui/assets/{ishikawaDiagram-5VMMS53U-Bz24j_3Q.js → ishikawaDiagram-5VMMS53U-Cdigo_vG.js} +1 -1
- package/dist/ui/assets/{journeyDiagram-3NMN7TZE-Cw49nq1P.js → journeyDiagram-3NMN7TZE-DmZ4MIYL.js} +1 -1
- package/dist/ui/assets/{kanban-definition-UXKFOSKX-Ck2BMOZW.js → kanban-definition-UXKFOSKX-2sVFLArm.js} +1 -1
- package/dist/ui/assets/{line-3ywrXSvS.js → line-C77c3pt1.js} +1 -1
- package/dist/ui/assets/{mermaid-parser.core-pTkacvis.js → mermaid-parser.core-xjtJ3pXb.js} +3 -3
- package/dist/ui/assets/{mermaid.core-KI_Ug6Sr.js → mermaid.core-CMyeUwV9.js} +4 -4
- package/dist/ui/assets/{mindmap-definition-YA3MSWOX-CK7Qs2O6.js → mindmap-definition-YA3MSWOX-BsOAbuQD.js} +1 -1
- package/dist/ui/assets/{packet-AYTQ26CC-CB1LAlf8.js → packet-AYTQ26CC-BDcVOEez.js} +1 -1
- package/dist/ui/assets/{pegDiagram-XKGWAZYB-C7wyvhpZ.js → pegDiagram-XKGWAZYB-C1hq_Ygi.js} +1 -1
- package/dist/ui/assets/{pie-WAS4IAKB-CtkGbS6o.js → pie-WAS4IAKB-CXk97zCx.js} +1 -1
- package/dist/ui/assets/{pieDiagram-E7YTZNPT-DqYUbDdy.js → pieDiagram-E7YTZNPT-CG9wAg_-.js} +1 -1
- package/dist/ui/assets/{quadrantDiagram-AXDQQJYC-BVzreR-s.js → quadrantDiagram-AXDQQJYC-BFIIZWqg.js} +1 -1
- package/dist/ui/assets/{radar-RG4KPBEZ-ElYRqk-4.js → radar-RG4KPBEZ-D9HuDG1X.js} +1 -1
- package/dist/ui/assets/{railroad-74A4TZTK-XUiiGOGw.js → railroad-74A4TZTK-kCOU5-RT.js} +1 -1
- package/dist/ui/assets/railroad-abnf-HS5TGJTU-CtNhQpzv.js +1 -0
- package/dist/ui/assets/railroad-ebnf-LZEXJU2U-5rUlNGX_.js +1 -0
- package/dist/ui/assets/railroad-peg-WCYAUIDC-DOPhbUMW.js +1 -0
- package/dist/ui/assets/{railroadDiagram-O6MQD6OU-C-um7ttl.js → railroadDiagram-O6MQD6OU-RK45rPYx.js} +1 -1
- package/dist/ui/assets/repo-Rgx38OJH.js +2 -0
- package/dist/ui/assets/{requirementDiagram-BXWQKSXE-CB77SNNB.js → requirementDiagram-BXWQKSXE-DzN62GBp.js} +1 -1
- package/dist/ui/assets/{sankeyDiagram-P5KCCOFB-D_qnpDIk.js → sankeyDiagram-P5KCCOFB-Twa9FjBx.js} +1 -1
- package/dist/ui/assets/{sequenceDiagram-WJ2MYXX4-DrR-O2gR.js → sequenceDiagram-WJ2MYXX4-DGUe1AcR.js} +1 -1
- package/dist/ui/assets/{stateDiagram-D77RDMKH-Mz-Cjby1.js → stateDiagram-D77RDMKH-ByryPTRm.js} +1 -1
- package/dist/ui/assets/stateDiagram-v2-MP3YSRHH-xS7RBCS4.js +1 -0
- package/dist/ui/assets/{swimlanes-42K2YHIH-BwFAfw2O.js → swimlanes-42K2YHIH-CnU3MB_t.js} +1 -1
- package/dist/ui/assets/swimlanesDiagram-VR7AAH4N-Dd7VwNJ9.js +8 -0
- package/dist/ui/assets/{time-CwKjNEcq.js → time-CD85vGC0.js} +1 -1
- package/dist/ui/assets/{timeline-definition-24CTP7MA-DS_U9LBk.js → timeline-definition-24CTP7MA-D5A6I-WY.js} +1 -1
- package/dist/ui/assets/{treeView-Q6P3EWNA-D0Ds2Pnh.js → treeView-Q6P3EWNA-BzAgp6hO.js} +1 -1
- package/dist/ui/assets/{treemap-WGGIJYW6-Dr6ADVsx.js → treemap-WGGIJYW6-BOnPgUXz.js} +1 -1
- package/dist/ui/assets/types-D6qo-egS.js +1 -0
- package/dist/ui/assets/{vennDiagram-4TSXK5OY-CcEibS-z.js → vennDiagram-4TSXK5OY-CbrfLPNL.js} +1 -1
- package/dist/ui/assets/{wardley-WFR3VGLG-D19UeE7v.js → wardley-WFR3VGLG-BzZdYjpA.js} +1 -1
- package/dist/ui/assets/{wardleyDiagram-VM6X3IG4-m2YJGsr8.js → wardleyDiagram-VM6X3IG4-cG-Vx9Gs.js} +1 -1
- package/dist/ui/assets/{xychartDiagram-S5SC5T6Z-D-ENA4CQ.js → xychartDiagram-S5SC5T6Z-DXzo3wNb.js} +1 -1
- package/dist/ui/index.html +6 -6
- package/dist/ui/sw.js +2 -2
- package/package.json +1 -1
- package/dist/ui/assets/AgentsView-B_yMHKiT.css +0 -1
- package/dist/ui/assets/AgentsView-Dxv4s_ff.js +0 -1
- package/dist/ui/assets/ChecksView-BGUWmHHI.js +0 -0
- package/dist/ui/assets/ChecksView-DAZIbg5B.css +0 -1
- package/dist/ui/assets/ContextView-BxlQCnkt.js +0 -4
- package/dist/ui/assets/DashboardView-2xJiQLBz.js +0 -1
- package/dist/ui/assets/DashboardView-Ca3kwSow.css +0 -1
- package/dist/ui/assets/ReleasesView-JG7zXQPU.js +0 -5
- package/dist/ui/assets/ReleasesView-mGdLAyHK.css +0 -1
- package/dist/ui/assets/SettingsView-C8blwbyh.js +0 -4
- package/dist/ui/assets/StoriesView-1FeSeEMD.js +0 -1
- package/dist/ui/assets/WorkView-Y9JCMf7I.js +0 -2
- package/dist/ui/assets/WorkView-vT6nLFuM.css +0 -1
- package/dist/ui/assets/architecture-7GRP2DOG-D3Zr7GMJ.js +0 -1
- package/dist/ui/assets/channel-CsOxGNSt.js +0 -1
- package/dist/ui/assets/classDiagram-ZZMXUADV-DXz5ZBJc.js +0 -1
- package/dist/ui/assets/classDiagram-v2-VYDZK3BY-DXz5ZBJc.js +0 -1
- package/dist/ui/assets/eventmodeling-NTZA5JFV-BP096yAZ.js +0 -1
- package/dist/ui/assets/flowDiagram-HODETNUW-CGQzpVgi.js +0 -1
- package/dist/ui/assets/index-CNf-gQPU.js +0 -54
- package/dist/ui/assets/index-Dp0zyDhg.css +0 -1
- package/dist/ui/assets/railroad-abnf-HS5TGJTU-ebjcwFgX.js +0 -1
- package/dist/ui/assets/railroad-ebnf-LZEXJU2U-Z5mPRjaM.js +0 -1
- package/dist/ui/assets/railroad-peg-WCYAUIDC-Ds7v_hnS.js +0 -1
- package/dist/ui/assets/repo-XLbfa7u-.js +0 -2
- package/dist/ui/assets/stateDiagram-v2-MP3YSRHH-cIIjufMH.js +0 -1
- package/dist/ui/assets/swimlanesDiagram-VR7AAH4N-BT2MlBys.js +0 -8
package/dist/.build-info.json
CHANGED
package/dist/.build-stamp.json
CHANGED
|
@@ -18,6 +18,9 @@ const CONTROL_API_MATCHERS = [
|
|
|
18
18
|
exact("POST", "/api/remote-validation/test"),
|
|
19
19
|
exact("GET", "/api/agents/running"),
|
|
20
20
|
exact("GET", "/api/stats/board"),
|
|
21
|
+
exact("GET", "/api/driver/brief"),
|
|
22
|
+
exact("GET", "/api/events"),
|
|
23
|
+
exact("POST", "/api/cto/heartbeat"),
|
|
21
24
|
// `repoos review` → PATCH status=review; `repoos override` → PATCH overrides
|
|
22
25
|
re("PATCH", /^\/api\/tasks\/([^/]+)$/.source),
|
|
23
26
|
];
|
|
@@ -65,6 +68,7 @@ const UI_ONLY_MATCHERS = [
|
|
|
65
68
|
exact("GET", "/api/system/run-tests"),
|
|
66
69
|
exact("POST", "/api/system/run-tests"),
|
|
67
70
|
exact("GET", "/api/attention"),
|
|
71
|
+
exact("GET", "/api/decisions"),
|
|
68
72
|
exact("GET", "/api/check-runs"),
|
|
69
73
|
(r) => r.pattern.startsWith("/api/integration"),
|
|
70
74
|
exact("GET", "/api/close-out/outcomes"),
|
package/dist/cli/help.js
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
* usage line lives in per-command help rather than inline.
|
|
9
9
|
*/
|
|
10
10
|
import { readVersion } from "../core/version.js";
|
|
11
|
-
import { PRIORITIES, TASK_TYPES } from "../core/types.js";
|
|
12
11
|
import { c } from "./colors.js";
|
|
13
12
|
import { table, termWidth, visibleWidth, wrap } from "./layout.js";
|
|
13
|
+
import { NEW_FLAG_HELP, UPDATE_FLAG_HELP, flagSummary, flagUsageTokens } from "./task-flags.js";
|
|
14
14
|
/** Commands whose own argument parser already handles `--help`. */
|
|
15
15
|
export const SELF_HELP_COMMANDS = new Set(["support", "tunnel", "shot", "uninstall"]);
|
|
16
16
|
const GROUPS = [
|
|
@@ -48,9 +48,9 @@ const GROUPS = [
|
|
|
48
48
|
{ name: "show", usage: "show <id>", desc: "Show a task's full spec" },
|
|
49
49
|
{
|
|
50
50
|
name: "new",
|
|
51
|
-
usage:
|
|
51
|
+
usage: 'new "<title>" ' + flagUsageTokens(NEW_FLAG_HELP).join(" "),
|
|
52
52
|
desc: "Create a task",
|
|
53
|
-
flags:
|
|
53
|
+
flags: flagSummary(NEW_FLAG_HELP),
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
56
|
name: "new-doc",
|
|
@@ -140,6 +140,18 @@ const GROUPS = [
|
|
|
140
140
|
desc: "Board spend summary (GET /api/stats/board)",
|
|
141
141
|
flags: "--json · --port",
|
|
142
142
|
},
|
|
143
|
+
{
|
|
144
|
+
name: "watch",
|
|
145
|
+
usage: "watch [--json] [--task <id>] [--port N]",
|
|
146
|
+
desc: "Stream board SSE events for external driver sessions (GET /api/events)",
|
|
147
|
+
flags: "--json · --task · --port",
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
name: "driver",
|
|
151
|
+
usage: "driver brief [--json] [--port N]",
|
|
152
|
+
desc: "Print the CTO's board brief from live state (GET /api/driver/brief)",
|
|
153
|
+
flags: "--json · --port",
|
|
154
|
+
},
|
|
143
155
|
{
|
|
144
156
|
name: "rm",
|
|
145
157
|
usage: "rm <id> --yes",
|
|
@@ -148,9 +160,15 @@ const GROUPS = [
|
|
|
148
160
|
},
|
|
149
161
|
{
|
|
150
162
|
name: "update",
|
|
151
|
-
usage: "update <id>
|
|
163
|
+
usage: "update <id> " + flagUsageTokens(UPDATE_FLAG_HELP).join(" "),
|
|
152
164
|
desc: "Edit a task's metadata or body",
|
|
153
|
-
flags:
|
|
165
|
+
flags: flagSummary(UPDATE_FLAG_HELP),
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
name: "story",
|
|
169
|
+
usage: 'story new "<name>" --body <text|-> | story list | story show <number|name> | story update <number|name> [--name …] [--body <text|->]',
|
|
170
|
+
desc: "Create, list, show or update story definitions verbatim (no PM agent)",
|
|
171
|
+
flags: "new/show/update: --body - · list/show: --json",
|
|
154
172
|
},
|
|
155
173
|
{
|
|
156
174
|
name: "index",
|
|
@@ -263,6 +281,12 @@ const EXAMPLES = [
|
|
|
263
281
|
{ cmd: 'repoos mv 0012 active --note "Fix the regression in checkout; see review"' },
|
|
264
282
|
{ cmd: 'repoos note 0012 "Handle the reviewer\'s suggestions before the next review"' },
|
|
265
283
|
{ cmd: 'repoos update 0012 --title "New title" --area web,core' },
|
|
284
|
+
{
|
|
285
|
+
cmd: 'repoos story new "Project updates email" --body "Why this slice exists, scope and non-goals"',
|
|
286
|
+
comment: "verbatim story, no PM",
|
|
287
|
+
},
|
|
288
|
+
{ cmd: "repoos story list", comment: "registered stories, with numbers" },
|
|
289
|
+
{ cmd: "repoos story show 0007", comment: "definition + member tasks and their statuses" },
|
|
266
290
|
{ cmd: "repoos list ready" },
|
|
267
291
|
{ cmd: "repoos outline src/server/agents.ts", comment: "then read only the range you need" },
|
|
268
292
|
{ cmd: "repoos doctor", comment: "passing checks are hidden; --verbose shows all" },
|
|
@@ -282,6 +306,7 @@ const ALIASES = {
|
|
|
282
306
|
add: "new",
|
|
283
307
|
reindex: "index",
|
|
284
308
|
server: "serve",
|
|
309
|
+
stories: "story",
|
|
285
310
|
};
|
|
286
311
|
/** Resolve an alias to its canonical command name (identity when not an alias). */
|
|
287
312
|
export function canonicalCommand(name) {
|
package/dist/cli/index.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { cmdInit } from "../commands/init.js";
|
|
7
7
|
import { cmdList, cmdShow, cmdMv, cmdRm, cmdUpdate, cmdNew, cmdIndex, cmdNote, } from "../commands/tasks.js";
|
|
8
8
|
import { cmdDocs, cmdNewDoc } from "../commands/docs.js";
|
|
9
|
+
import { cmdStory } from "../commands/stories.js";
|
|
9
10
|
import { cmdGc } from "../commands/gc.js";
|
|
10
11
|
import { cmdOutline } from "../commands/outline.js";
|
|
11
12
|
import { cmdCheck } from "../commands/check.js";
|
|
@@ -20,7 +21,9 @@ import { cmdDoctor } from "../commands/doctor.js";
|
|
|
20
21
|
import { cmdCertify } from "../commands/certify.js";
|
|
21
22
|
import { cmdSupport } from "../commands/support.js";
|
|
22
23
|
import { cmdService } from "../commands/service.js";
|
|
23
|
-
import { cmdAgentsRunning, cmdConfig, cmdDone, cmdMessage, cmdOverride, cmdPause, cmdPreview, cmdReview, cmdRunners, cmdStart, cmdStats, } from "../commands/control-api.js";
|
|
24
|
+
import { cmdAgentsRunning, cmdConfig, cmdDone, cmdMessage, cmdOverride, cmdPause, cmdPreview, cmdReview, cmdRunners, cmdStart, cmdStats, cmdDecisions, } from "../commands/control-api.js";
|
|
25
|
+
import { cmdWatch } from "../commands/watch.js";
|
|
26
|
+
import { cmdDriver } from "../commands/driver.js";
|
|
24
27
|
import { checkBuild } from "../core/build.js";
|
|
25
28
|
import { loadConfig } from "../core/config.js";
|
|
26
29
|
import { reexecAfterStaleBuild, reexecUnderBunIfRequested } from "../core/runtime.js";
|
|
@@ -170,6 +173,10 @@ function main() {
|
|
|
170
173
|
case "docs":
|
|
171
174
|
void cmdDocs(rest);
|
|
172
175
|
break;
|
|
176
|
+
case "story":
|
|
177
|
+
case "stories":
|
|
178
|
+
cmdStory(rest);
|
|
179
|
+
break;
|
|
173
180
|
case "index":
|
|
174
181
|
case "reindex":
|
|
175
182
|
cmdIndex(rest);
|
|
@@ -259,6 +266,25 @@ function main() {
|
|
|
259
266
|
process.exitCode = code;
|
|
260
267
|
});
|
|
261
268
|
break;
|
|
269
|
+
case "decisions":
|
|
270
|
+
case "attention":
|
|
271
|
+
void cmdDecisions(rest).then((code) => {
|
|
272
|
+
if (code !== 0)
|
|
273
|
+
process.exitCode = code;
|
|
274
|
+
});
|
|
275
|
+
break;
|
|
276
|
+
case "watch":
|
|
277
|
+
void cmdWatch(rest).then((code) => {
|
|
278
|
+
if (code !== 0)
|
|
279
|
+
process.exitCode = code;
|
|
280
|
+
});
|
|
281
|
+
break;
|
|
282
|
+
case "driver":
|
|
283
|
+
void cmdDriver(rest).then((code) => {
|
|
284
|
+
if (code !== 0)
|
|
285
|
+
process.exitCode = code;
|
|
286
|
+
});
|
|
287
|
+
break;
|
|
262
288
|
case "shot":
|
|
263
289
|
void cmdShot(rest)
|
|
264
290
|
.then((code) => {
|
package/dist/cli/repoos-api.d.ts
CHANGED
|
@@ -37,6 +37,10 @@ export declare class RepoOsApi {
|
|
|
37
37
|
private buildHeaders;
|
|
38
38
|
private devBackdoorLogin;
|
|
39
39
|
health(): Promise<boolean>;
|
|
40
|
+
/** Re-run dev backdoor login after a 401 (e.g. server reload). */
|
|
41
|
+
reauthenticate(): Promise<boolean>;
|
|
42
|
+
/** Open `GET /api/events` with the same auth as other CLI calls. */
|
|
43
|
+
fetchEventStream(): Promise<Response>;
|
|
40
44
|
request(method: string, path: string, body?: unknown, opts?: {
|
|
41
45
|
retryAuth?: boolean;
|
|
42
46
|
}): Promise<{
|
package/dist/cli/repoos-api.js
CHANGED
|
@@ -104,6 +104,21 @@ export class RepoOsApi {
|
|
|
104
104
|
return false;
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
|
+
/** Re-run dev backdoor login after a 401 (e.g. server reload). */
|
|
108
|
+
async reauthenticate() {
|
|
109
|
+
return this.devBackdoorLogin();
|
|
110
|
+
}
|
|
111
|
+
/** Open `GET /api/events` with the same auth as other CLI calls. */
|
|
112
|
+
async fetchEventStream() {
|
|
113
|
+
try {
|
|
114
|
+
return await fetch(`${this.baseUrl}/api/events`, {
|
|
115
|
+
headers: { ...this.buildHeaders(false), accept: "text/event-stream" },
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
throw new RepoOsApiError(`Can't reach the RepoOS server at ${this.baseUrl}. Is \`repoos serve\` running? ${err.message}`, 0);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
107
122
|
async request(method, path, body, opts = {}) {
|
|
108
123
|
const jsonBody = body !== undefined;
|
|
109
124
|
const doFetch = async () => {
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal SSE frame parser for CLI consumers (#0728).
|
|
3
|
+
*/
|
|
4
|
+
export declare function parseSseChunk(buffer: string, onData: (jsonText: string) => void): string;
|
|
5
|
+
export declare function consumeSseResponse(res: Response, onJson: (data: unknown) => void, shouldContinue: () => boolean): Promise<void>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal SSE frame parser for CLI consumers (#0728).
|
|
3
|
+
*/
|
|
4
|
+
export function parseSseChunk(buffer, onData) {
|
|
5
|
+
let rest = buffer;
|
|
6
|
+
let split = rest.indexOf("\n\n");
|
|
7
|
+
while (split !== -1) {
|
|
8
|
+
const frame = rest.slice(0, split);
|
|
9
|
+
rest = rest.slice(split + 2);
|
|
10
|
+
const dataLine = frame.split("\n").find((line) => line.startsWith("data: "));
|
|
11
|
+
if (dataLine)
|
|
12
|
+
onData(dataLine.slice(6));
|
|
13
|
+
split = rest.indexOf("\n\n");
|
|
14
|
+
}
|
|
15
|
+
return rest;
|
|
16
|
+
}
|
|
17
|
+
export async function consumeSseResponse(res, onJson, shouldContinue) {
|
|
18
|
+
if (!res.body)
|
|
19
|
+
return;
|
|
20
|
+
const reader = res.body.getReader();
|
|
21
|
+
const decoder = new TextDecoder();
|
|
22
|
+
let buffer = "";
|
|
23
|
+
try {
|
|
24
|
+
while (shouldContinue()) {
|
|
25
|
+
const { done, value } = await reader.read();
|
|
26
|
+
if (done)
|
|
27
|
+
break;
|
|
28
|
+
buffer += decoder.decode(value, { stream: true });
|
|
29
|
+
buffer = parseSseChunk(buffer, (text) => {
|
|
30
|
+
try {
|
|
31
|
+
onJson(JSON.parse(text));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
/* ignore partial frames */
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
await reader.cancel().catch(() => { });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The full valid value sets for `--priority` / `--type`, rendered into the
|
|
3
|
+
* usage/help text so accepted values are obvious at the point of use (#0656).
|
|
4
|
+
*/
|
|
5
|
+
export declare const PRIORITY_USAGE: string;
|
|
6
|
+
export declare const TYPE_USAGE: string;
|
|
7
|
+
/** One flag's help metadata. */
|
|
8
|
+
export interface TaskFlagHelp {
|
|
9
|
+
/** Placeholder rendered after the flag (e.g. `true|false`); omit for a boolean flag. */
|
|
10
|
+
value?: string;
|
|
11
|
+
/** One-line description, shown by `repoos <cmd> --help`. */
|
|
12
|
+
desc: string;
|
|
13
|
+
}
|
|
14
|
+
/** Every flag `repoos new` accepts, in help order. */
|
|
15
|
+
export declare const NEW_FLAG_HELP: Record<string, TaskFlagHelp>;
|
|
16
|
+
/** Every flag `repoos update` accepts, in help order. */
|
|
17
|
+
export declare const UPDATE_FLAG_HELP: Record<string, TaskFlagHelp>;
|
|
18
|
+
/** One `--flag` / `--flag value` token, as used in a usage line. */
|
|
19
|
+
export declare function flagToken(name: string, help: TaskFlagHelp): string;
|
|
20
|
+
/** Ordered `--flag [value]` tokens for every entry in a help map. */
|
|
21
|
+
export declare function flagUsageTokens(help: Record<string, TaskFlagHelp>): string[];
|
|
22
|
+
/** The dim `flags:` summary line: `--flag value · --other`, in declaration order. */
|
|
23
|
+
export declare function flagSummary(help: Record<string, TaskFlagHelp>): string;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flag help metadata for `repoos new` / `repoos update` (#0699).
|
|
3
|
+
*
|
|
4
|
+
* The parse tables live in `src/commands/tasks.ts` (`NEW_FLAGS`, derived from
|
|
5
|
+
* `NEW_FLAG_HELP`, and `UPDATE_FLAGS`). These ordered maps are the single
|
|
6
|
+
* source of truth for help text: `renderHelp` (the top-level Tasks group) and
|
|
7
|
+
* `printCommandHelp` both render from them, so a flag can no longer be accepted
|
|
8
|
+
* without a one-line description. A test asserts every key of `UPDATE_FLAGS`
|
|
9
|
+
* has an entry here, which makes "added a flag, forgot the help" fail the gate.
|
|
10
|
+
*
|
|
11
|
+
* `UPDATE_FLAG_HELP` intentionally covers the flags `cmdUpdate` handles
|
|
12
|
+
* specially (`shots`, `section`, `section-body`, `clear-questions`, `force`),
|
|
13
|
+
* not just the `UPDATE_FLAGS` parse map.
|
|
14
|
+
*/
|
|
15
|
+
import { PRIORITIES, TASK_TYPES } from "../core/types.js";
|
|
16
|
+
/**
|
|
17
|
+
* The full valid value sets for `--priority` / `--type`, rendered into the
|
|
18
|
+
* usage/help text so accepted values are obvious at the point of use (#0656).
|
|
19
|
+
*/
|
|
20
|
+
export const PRIORITY_USAGE = PRIORITIES.join("|");
|
|
21
|
+
export const TYPE_USAGE = TASK_TYPES.join("|");
|
|
22
|
+
/** Every flag `repoos new` accepts, in help order. */
|
|
23
|
+
export const NEW_FLAG_HELP = {
|
|
24
|
+
ai: { desc: "Assign the task to an AI engineer" },
|
|
25
|
+
type: { value: TYPE_USAGE, desc: "Task type" },
|
|
26
|
+
area: { value: "web,core", desc: "Area(s), comma-separated" },
|
|
27
|
+
story: { value: '"name"', desc: "Tag the task as part of a story (delivery slice)" },
|
|
28
|
+
"depends-on": { value: "ids", desc: "Comma-separated task ids that must land first" },
|
|
29
|
+
priority: { value: PRIORITY_USAGE, desc: "Priority" },
|
|
30
|
+
"needs-input": { value: "true|false", desc: "Flag the task as needing human input" },
|
|
31
|
+
questions: { value: '"Q1\\nQ2"', desc: "Open questions for the human (newline or JSON list)" },
|
|
32
|
+
hold: { value: "true|false", desc: "Hold the task out of auto-dispatch" },
|
|
33
|
+
paths: { value: "a,b", desc: "Files the task touches, e.g. src/a.ts,src/b.ts" },
|
|
34
|
+
body: { value: '"..."|-', desc: "Task body; `-` reads it from stdin" },
|
|
35
|
+
shots: { value: '"<JSON list>"|-', desc: "Declare the ## Shots section (validated JSON)" },
|
|
36
|
+
};
|
|
37
|
+
/** Every flag `repoos update` accepts, in help order. */
|
|
38
|
+
export const UPDATE_FLAG_HELP = {
|
|
39
|
+
title: { value: '"..."', desc: "Task title" },
|
|
40
|
+
area: { value: "web,core", desc: "Area(s), comma-separated" },
|
|
41
|
+
story: { value: '"name"', desc: "Tag the task as part of a story (delivery slice)" },
|
|
42
|
+
"depends-on": { value: "ids", desc: "Comma-separated task ids that must land first" },
|
|
43
|
+
priority: { value: PRIORITY_USAGE, desc: "Priority" },
|
|
44
|
+
type: { value: TYPE_USAGE, desc: "Task type" },
|
|
45
|
+
body: { value: '"..."|-', desc: "Replace the body; `-` reads it from stdin" },
|
|
46
|
+
branch: { value: "b", desc: "Branch name" },
|
|
47
|
+
"assigned-to": { value: "ai|human", desc: "Assignee" },
|
|
48
|
+
"needs-input": { value: "true|false", desc: "Flag the task as needing human input" },
|
|
49
|
+
"needs-merge": { value: "true|false", desc: "Flag the task as needing a merge" },
|
|
50
|
+
hold: { value: "true|false", desc: "Hold the task out of auto-dispatch" },
|
|
51
|
+
paths: { value: "a,b", desc: "Files the task touches, e.g. src/a.ts,src/b.ts" },
|
|
52
|
+
questions: { value: '"Q1\\nQ2"', desc: "Open questions for the human (newline or JSON list)" },
|
|
53
|
+
"clear-questions": { desc: "Clear the recorded questions" },
|
|
54
|
+
shots: { value: '"<JSON list>"|-', desc: "Declare the ## Shots section (validated JSON)" },
|
|
55
|
+
section: { value: '"heading"', desc: "Replace/create one ## section (pair with --section-body)" },
|
|
56
|
+
"section-body": { value: '"..."|-', desc: "Body for --section; `-` reads it from stdin" },
|
|
57
|
+
force: { desc: "Allow a --body replace that drops spec headings" },
|
|
58
|
+
agent: { value: "name", desc: "Engineer agent override (empty clears)" },
|
|
59
|
+
cli: { value: "name", desc: "Engineer CLI override (empty clears)" },
|
|
60
|
+
model: { value: "name", desc: "Engineer model override (empty clears)" },
|
|
61
|
+
"pm-agent": { value: "name", desc: "PM agent override (empty clears)" },
|
|
62
|
+
"pm-cli": { value: "name", desc: "PM CLI override (empty clears)" },
|
|
63
|
+
"pm-model": { value: "name", desc: "PM model override (empty clears)" },
|
|
64
|
+
"review-agent": { value: "name", desc: "Reviewer agent override (empty clears)" },
|
|
65
|
+
"review-cli": { value: "name", desc: "Reviewer CLI override (empty clears)" },
|
|
66
|
+
"review-model": { value: "name", desc: "Reviewer model override (empty clears)" },
|
|
67
|
+
};
|
|
68
|
+
/** One `--flag` / `--flag value` token, as used in a usage line. */
|
|
69
|
+
export function flagToken(name, help) {
|
|
70
|
+
return help.value ? `--${name} ${help.value}` : `--${name}`;
|
|
71
|
+
}
|
|
72
|
+
/** Ordered `--flag [value]` tokens for every entry in a help map. */
|
|
73
|
+
export function flagUsageTokens(help) {
|
|
74
|
+
return Object.entries(help).map(([name, h]) => flagToken(name, h));
|
|
75
|
+
}
|
|
76
|
+
/** The dim `flags:` summary line: `--flag value · --other`, in declaration order. */
|
|
77
|
+
export function flagSummary(help) {
|
|
78
|
+
return flagUsageTokens(help).join(" · ");
|
|
79
|
+
}
|
package/dist/commands/check.d.ts
CHANGED
|
@@ -69,25 +69,28 @@ export declare function resolveBareRequireRoots(configured: string[] | undefined
|
|
|
69
69
|
* stale screenshot churn). Product image assets — UI, icons, logos, docs —
|
|
70
70
|
* live outside those folders and stay tracked.
|
|
71
71
|
*
|
|
72
|
-
* The folder names come from `repoos.toml` (`workDir`/`inputsDir`)
|
|
73
|
-
* repo that renames them still gets the guard; they default to
|
|
72
|
+
* The folder names come from `repoos.toml` (`workDir`/`inputsDir`/`storiesDir`)
|
|
73
|
+
* so a managed repo that renames them still gets the guard; they default to
|
|
74
|
+
* `work`/`inputs`/`stories`.
|
|
74
75
|
*
|
|
75
76
|
* Pure (takes the tracked-file list) so it is unit-testable; the check block
|
|
76
77
|
* feeds it `git ls-files`.
|
|
77
78
|
*/
|
|
78
79
|
/**
|
|
79
|
-
* Normalize a configured guard directory (`workDir`/`inputsDir`)
|
|
80
|
-
* matching against `git ls-files` output, which is always
|
|
81
|
-
* strip any leading `./` and trailing slashes. Returns
|
|
82
|
-
* can't be a repo-relative directory — an explicit
|
|
83
|
-
* absolute path, a home-relative `~/…`, or a path
|
|
84
|
-
* Those would all silently match nothing (or, for
|
|
85
|
-
* so callers must treat empty as unusable rather
|
|
80
|
+
* Normalize a configured guard directory (`workDir`/`inputsDir`/`storiesDir`)
|
|
81
|
+
* for prefix matching against `git ls-files` output, which is always
|
|
82
|
+
* repo-root-relative: strip any leading `./` and trailing slashes. Returns
|
|
83
|
+
* empty for anything that can't be a repo-relative directory — an explicit
|
|
84
|
+
* `""`, `"."`/`"./"`, an absolute path, a home-relative `~/…`, or a path
|
|
85
|
+
* containing a `..` segment. Those would all silently match nothing (or, for
|
|
86
|
+
* `""`, fatal git's pathspec), so callers must treat empty as unusable rather
|
|
87
|
+
* than as "match everything".
|
|
86
88
|
*/
|
|
87
89
|
export declare function normalizeGuardDir(d: string): string;
|
|
88
90
|
export declare function taskAssetOffenders(trackedPaths: string[], dirs?: {
|
|
89
91
|
workDir?: string;
|
|
90
92
|
inputsDir?: string;
|
|
93
|
+
storiesDir?: string;
|
|
91
94
|
}): string[];
|
|
92
95
|
/** Marker that allowlists a hard-coded color; must carry a reason. */
|
|
93
96
|
export declare const HARDCODED_COLOR_MARKER = "hardcode-ok";
|
package/dist/commands/check.js
CHANGED
|
@@ -45,7 +45,7 @@ import { mainCheckoutRoot } from "../core/git.js";
|
|
|
45
45
|
import { Logger } from "../core/logger.js";
|
|
46
46
|
import { boardRootForEngineerRemote, boardTaskAbsPath, commitWipCheckpointForRemoteGate, isManagedEngineerCheck, runEngineerRemoteSelfCheckGate, } from "../server/engineer-remote-self-check.js";
|
|
47
47
|
import { createRemoteValidator } from "../server/remote-validation.js";
|
|
48
|
-
import { runRemotePreReviewGate, standaloneCliCanUseRemote, remoteValidationAlreadyAttempted, uncommittedFilesBlockingRemoteGate, shouldRunCliRemotePreReviewGate, summarizeRemoteFallbackDetail, REPOOS_REMOTE_FALLBACK_DETAIL, } from "../server/pre-review-remote-gate.js";
|
|
48
|
+
import { runRemotePreReviewGate, standaloneCliCanUseRemote, remoteValidationAlreadyAttempted, uncommittedFilesBlockingRemoteGate, shouldRunCliRemotePreReviewGate, summarizeRemoteFallbackDetail, REPOOS_REMOTE_FALLBACK_DETAIL, REPOOS_CHECK_GATE_NOTE, } from "../server/pre-review-remote-gate.js";
|
|
49
49
|
/**
|
|
50
50
|
* Split a CSS selector list on top-level commas (respecting parentheses,
|
|
51
51
|
* so `:not(.a,.b)` stays one group).
|
|
@@ -402,20 +402,22 @@ function dedupeRoots(roots) {
|
|
|
402
402
|
* stale screenshot churn). Product image assets — UI, icons, logos, docs —
|
|
403
403
|
* live outside those folders and stay tracked.
|
|
404
404
|
*
|
|
405
|
-
* The folder names come from `repoos.toml` (`workDir`/`inputsDir`)
|
|
406
|
-
* repo that renames them still gets the guard; they default to
|
|
405
|
+
* The folder names come from `repoos.toml` (`workDir`/`inputsDir`/`storiesDir`)
|
|
406
|
+
* so a managed repo that renames them still gets the guard; they default to
|
|
407
|
+
* `work`/`inputs`/`stories`.
|
|
407
408
|
*
|
|
408
409
|
* Pure (takes the tracked-file list) so it is unit-testable; the check block
|
|
409
410
|
* feeds it `git ls-files`.
|
|
410
411
|
*/
|
|
411
412
|
/**
|
|
412
|
-
* Normalize a configured guard directory (`workDir`/`inputsDir`)
|
|
413
|
-
* matching against `git ls-files` output, which is always
|
|
414
|
-
* strip any leading `./` and trailing slashes. Returns
|
|
415
|
-
* can't be a repo-relative directory — an explicit
|
|
416
|
-
* absolute path, a home-relative `~/…`, or a path
|
|
417
|
-
* Those would all silently match nothing (or, for
|
|
418
|
-
* so callers must treat empty as unusable rather
|
|
413
|
+
* Normalize a configured guard directory (`workDir`/`inputsDir`/`storiesDir`)
|
|
414
|
+
* for prefix matching against `git ls-files` output, which is always
|
|
415
|
+
* repo-root-relative: strip any leading `./` and trailing slashes. Returns
|
|
416
|
+
* empty for anything that can't be a repo-relative directory — an explicit
|
|
417
|
+
* `""`, `"."`/`"./"`, an absolute path, a home-relative `~/…`, or a path
|
|
418
|
+
* containing a `..` segment. Those would all silently match nothing (or, for
|
|
419
|
+
* `""`, fatal git's pathspec), so callers must treat empty as unusable rather
|
|
420
|
+
* than as "match everything".
|
|
419
421
|
*/
|
|
420
422
|
export function normalizeGuardDir(d) {
|
|
421
423
|
let trimmed = d;
|
|
@@ -431,7 +433,11 @@ export function normalizeGuardDir(d) {
|
|
|
431
433
|
}
|
|
432
434
|
export function taskAssetOffenders(trackedPaths, dirs = {}) {
|
|
433
435
|
const IMG = /\.(png|jpe?g|gif|webp|avif|bmp|svg|ico|pdf)$/i;
|
|
434
|
-
const prefixes = [
|
|
436
|
+
const prefixes = [
|
|
437
|
+
dirs.workDir ?? "work",
|
|
438
|
+
dirs.inputsDir ?? "inputs",
|
|
439
|
+
dirs.storiesDir ?? "stories",
|
|
440
|
+
]
|
|
435
441
|
.map(normalizeGuardDir)
|
|
436
442
|
.filter(Boolean)
|
|
437
443
|
.map((d) => `${d}/`);
|
|
@@ -1189,12 +1195,13 @@ async function stepBareRequire(ctx) {
|
|
|
1189
1195
|
};
|
|
1190
1196
|
}
|
|
1191
1197
|
async function stepTaskAssets(ctx) {
|
|
1192
|
-
// Folder names are configurable (`workDir`/`inputsDir`), so a
|
|
1193
|
-
// renames them is still guarded.
|
|
1198
|
+
// Folder names are configurable (`workDir`/`inputsDir`/`storiesDir`), so a
|
|
1199
|
+
// repo that renames them is still guarded.
|
|
1194
1200
|
const config = ctx.cfg;
|
|
1195
1201
|
const dirs = [
|
|
1196
1202
|
{ label: "workDir", raw: config.workDir ?? "work" },
|
|
1197
1203
|
{ label: "inputsDir", raw: config.inputsDir ?? "inputs" },
|
|
1204
|
+
{ label: "storiesDir", raw: config.storiesDir ?? "stories" },
|
|
1198
1205
|
];
|
|
1199
1206
|
const usable = [];
|
|
1200
1207
|
const broken = [];
|
|
@@ -1231,6 +1238,7 @@ async function stepTaskAssets(ctx) {
|
|
|
1231
1238
|
const offenders = taskAssetOffenders(tracked, {
|
|
1232
1239
|
workDir: config.workDir,
|
|
1233
1240
|
inputsDir: config.inputsDir,
|
|
1241
|
+
storiesDir: config.storiesDir,
|
|
1234
1242
|
});
|
|
1235
1243
|
const labels = usable.map((d) => `${d}/`).join(" or ");
|
|
1236
1244
|
if (offenders.length === 0)
|
|
@@ -1335,9 +1343,15 @@ async function triageIsolatedFailures(ctx, base, testScript, output, env) {
|
|
|
1335
1343
|
}
|
|
1336
1344
|
async function stepTests(ctx) {
|
|
1337
1345
|
// The close-out pipeline can hand the suite to the Remote Validation Runner
|
|
1338
|
-
// and then run only the cheap local guards (REPOOS_SKIP_TESTS=1)
|
|
1346
|
+
// and then run only the cheap local guards (REPOOS_SKIP_TESTS=1), or reuse a
|
|
1347
|
+
// handoff-proven result entirely (#0724). Either way the step is skipped —
|
|
1348
|
+
// say which, so the Checks tab is not misleading.
|
|
1339
1349
|
if (process.env.REPOOS_SKIP_TESTS === "1") {
|
|
1340
|
-
|
|
1350
|
+
const reuseNote = process.env[REPOOS_CHECK_GATE_NOTE]?.trim();
|
|
1351
|
+
const viaReuse = reuseNote ? /reus|identical|bookkeeping/i.test(reuseNote) : false;
|
|
1352
|
+
return skipped(viaReuse
|
|
1353
|
+
? `skipped — full suite reused from the handoff gate (${reuseNote})`
|
|
1354
|
+
: "skipped — test suite ran on the remote validation runner (REPOOS_SKIP_TESTS=1)");
|
|
1341
1355
|
}
|
|
1342
1356
|
const hasTestScript = Boolean(ctx.scriptPkg.scripts?.test);
|
|
1343
1357
|
const hasTestFiles = ["test", "__tests__", "tests"].some((d) => existsSync(join(ctx.cwd, d)));
|
|
@@ -2123,12 +2137,21 @@ export async function cmdCheck(argv = []) {
|
|
|
2123
2137
|
detail: (() => {
|
|
2124
2138
|
const fallback = process.env[REPOOS_REMOTE_FALLBACK_DETAIL]?.trim();
|
|
2125
2139
|
const stepDetail = gatingFailures[0]?.detail ?? null;
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
const
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2140
|
+
// #0724: which close-out gate mode ran and why, so the Checks tab is
|
|
2141
|
+
// auditable ("reused from handoff check <sha>" / "scoped N files").
|
|
2142
|
+
const gateNote = process.env[REPOOS_CHECK_GATE_NOTE]?.trim();
|
|
2143
|
+
const fallbackPart = (() => {
|
|
2144
|
+
if (!fallback)
|
|
2145
|
+
return null;
|
|
2146
|
+
const summary = summarizeRemoteFallbackDetail(fallback);
|
|
2147
|
+
if (!stepDetail)
|
|
2148
|
+
return summary;
|
|
2149
|
+
return `${summary} — ${stepDetail}`;
|
|
2150
|
+
})();
|
|
2151
|
+
const base = fallbackPart ?? stepDetail;
|
|
2152
|
+
if (!gateNote)
|
|
2153
|
+
return base;
|
|
2154
|
+
return base ? `${gateNote} — ${base}` : gateNote;
|
|
2132
2155
|
})(),
|
|
2133
2156
|
// The stored detail is a short log tail that routinely loses the failing
|
|
2134
2157
|
// test's name; keep the names themselves so "which test?" is a query.
|
|
@@ -8,6 +8,7 @@ export declare function cmdPreview(args: string[]): Promise<number>;
|
|
|
8
8
|
export declare function cmdConfig(args: string[]): Promise<number>;
|
|
9
9
|
export declare function cmdRunners(args: string[]): Promise<number>;
|
|
10
10
|
export declare function cmdAgentsRunning(args: string[]): Promise<number>;
|
|
11
|
+
export declare function cmdDecisions(args: string[]): Promise<number>;
|
|
11
12
|
export declare function cmdStats(args: string[]): Promise<number>;
|
|
12
13
|
/** Shared server-down check for tests. */
|
|
13
14
|
export declare function controlApiServerDownMessage(port: number): Promise<string>;
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { c } from "../cli/colors.js";
|
|
5
5
|
import { pollUntil, RepoOsApi, RepoOsApiError, resolveControlPlaneBase, } from "../cli/repoos-api.js";
|
|
6
6
|
import { effectiveEngineerFromApi } from "../cli/effective-from-api.js";
|
|
7
|
+
import { HANDOFF_DEADLINE_MS } from "../server/handoff.js";
|
|
7
8
|
function parseCommonFlags(args) {
|
|
8
9
|
const opts = { json: false, wait: false };
|
|
9
10
|
const rest = [];
|
|
@@ -192,7 +193,7 @@ export async function cmdReview(args) {
|
|
|
192
193
|
throw new RepoOsApiError(reason, 400, t);
|
|
193
194
|
}
|
|
194
195
|
return null;
|
|
195
|
-
}, { label: `handoff for #${id}`, timeoutMs:
|
|
196
|
+
}, { label: `handoff for #${id}`, timeoutMs: HANDOFF_DEADLINE_MS });
|
|
196
197
|
if (opts.json)
|
|
197
198
|
printJson({ ok: true, task: result });
|
|
198
199
|
else
|
|
@@ -487,6 +488,45 @@ export async function cmdAgentsRunning(args) {
|
|
|
487
488
|
return 1;
|
|
488
489
|
}
|
|
489
490
|
}
|
|
491
|
+
export async function cmdDecisions(args) {
|
|
492
|
+
const { opts, error } = parseCommonFlags(args);
|
|
493
|
+
if (error) {
|
|
494
|
+
printErr(error);
|
|
495
|
+
return 1;
|
|
496
|
+
}
|
|
497
|
+
const api = new RepoOsApi({ port: opts.port });
|
|
498
|
+
try {
|
|
499
|
+
await ensureServer(api);
|
|
500
|
+
const data = await api.requestOk("GET", "/api/decisions");
|
|
501
|
+
if (opts.json) {
|
|
502
|
+
printJson(data);
|
|
503
|
+
return 0;
|
|
504
|
+
}
|
|
505
|
+
const digest = data;
|
|
506
|
+
const items = digest.items ?? [];
|
|
507
|
+
if (!items.length) {
|
|
508
|
+
console.log(c.green(" ✓ ") + c.dim("No decisions waiting — policy and CTO have the board."));
|
|
509
|
+
return 0;
|
|
510
|
+
}
|
|
511
|
+
const paused = digest.automationPaused ? " (automation paused)" : "";
|
|
512
|
+
console.log(c.yellow(` ${items.length} item(s) need a decision${paused}:`));
|
|
513
|
+
for (const item of items) {
|
|
514
|
+
const id = item.taskId ? `#${item.taskId}` : item.kind;
|
|
515
|
+
console.log(` · ${id} — ${item.cause.headline}`);
|
|
516
|
+
const auto = item.actions.filter((a) => a.policyAutomatic).map((a) => a.label);
|
|
517
|
+
const human = item.actions.filter((a) => !a.policyAutomatic).map((a) => a.label);
|
|
518
|
+
if (auto.length)
|
|
519
|
+
console.log(c.dim(` CTO/policy: ${auto.join("; ")}`));
|
|
520
|
+
if (human.length)
|
|
521
|
+
console.log(c.dim(` You: ${human.join("; ")}`));
|
|
522
|
+
}
|
|
523
|
+
return 0;
|
|
524
|
+
}
|
|
525
|
+
catch (e) {
|
|
526
|
+
printErr(e.message);
|
|
527
|
+
return 1;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
490
530
|
export async function cmdStats(args) {
|
|
491
531
|
const { opts, error } = parseCommonFlags(args);
|
|
492
532
|
if (error) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function cmdDriver(args: string[]): Promise<number>;
|