@cleocode/cleo 2026.10.2 → 2026.10.4
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/bin/cleo.js +11 -1
- package/dist/cli/adapter-LVXHFBC4.js +158 -0
- package/dist/cli/add-WUAV7LDT.js +443 -0
- package/dist/cli/add-batch-U2DLKAQC.js +163 -0
- package/dist/cli/admin-I7BQYVZD.js +340 -0
- package/dist/cli/adr-K2THMQBS.js +171 -0
- package/dist/cli/agent-WQ6XY2DW.js +2366 -0
- package/dist/cli/agent-outputs-BJIYLVTU.js +84 -0
- package/dist/cli/analyze-PGQZWGOC.js +48 -0
- package/dist/cli/archive-5LZPF7C3.js +64 -0
- package/dist/cli/archive-stats-U6CYC6JM.js +100 -0
- package/dist/cli/attention-SOURWCNI.js +167 -0
- package/dist/cli/audit-FO2Y4LH2.js +122 -0
- package/dist/cli/auth-ED7TAIXI.js +491 -0
- package/dist/cli/backfill-32TRAYRD.js +156 -0
- package/dist/cli/backup-LEJMZJKL.js +587 -0
- package/dist/cli/backup-inspect-6HPLUEI2.js +26 -0
- package/dist/cli/backup-recover-2BTYBZU2.js +29 -0
- package/dist/cli/blockers-5JULUJTV.js +54 -0
- package/dist/cli/brain-273N3FW4.js +400 -0
- package/dist/cli/briefing-7H6OLECX.js +212 -0
- package/dist/cli/caamp-MFQVN6VU.js +181 -0
- package/dist/cli/cancel-SCMJTXZB.js +84 -0
- package/dist/cli/canon-NPF5RODM.js +142 -0
- package/dist/cli/canon-docs-2GTOLF7Y.js +26 -0
- package/dist/cli/cant-46XCUP4P.js +239 -0
- package/dist/cli/changeset-32NMBGG2.js +248 -0
- package/dist/cli/check-RWJLBCI2.js +907 -0
- package/dist/cli/checkpoint-37HMMKD7.js +128 -0
- package/dist/cli/chunk-2JIJD2I7.js +108 -0
- package/dist/cli/chunk-37NU2XDP.js +171 -0
- package/dist/cli/chunk-3IOQVUO7.js +17308 -0
- package/dist/cli/chunk-3PGH67MT.js +175 -0
- package/dist/cli/chunk-3ZO3M37V.js +1002 -0
- package/dist/cli/chunk-47JYZAMS.js +30 -0
- package/dist/cli/chunk-5J2VH3BC.js +66 -0
- package/dist/cli/chunk-5ZFFUFH7.js +92 -0
- package/dist/cli/chunk-6JSJNYH2.js +114 -0
- package/dist/cli/chunk-7INMKEAD.js +85 -0
- package/dist/cli/chunk-A2IUEIM5.js +278 -0
- package/dist/cli/chunk-AWCQH2W5.js +35 -0
- package/dist/cli/chunk-AYA6F4ZT.js +56 -0
- package/dist/cli/chunk-BCEXRFA2.js +76 -0
- package/dist/cli/chunk-BPEVD37G.js +124 -0
- package/dist/cli/chunk-C3B7C43W.js +16 -0
- package/dist/cli/chunk-DVTPIZJM.js +72 -0
- package/dist/cli/chunk-DYABOIHB.js +96 -0
- package/dist/cli/chunk-EBRZ76HS.js +51 -0
- package/dist/cli/chunk-EGOTK2HA.js +57 -0
- package/dist/cli/chunk-EOPQFCSR.js +148 -0
- package/dist/cli/chunk-FORFDPP5.js +288 -0
- package/dist/cli/chunk-GFGLLDXX.js +110 -0
- package/dist/cli/chunk-GH37QXW5.js +280 -0
- package/dist/cli/chunk-GZFVDR44.js +320 -0
- package/dist/cli/chunk-I3CRQQAD.js +225 -0
- package/dist/cli/chunk-J3ZFM3UQ.js +754 -0
- package/dist/cli/chunk-JNZJPIPJ.js +90 -0
- package/dist/cli/chunk-KHB52JNB.js +209 -0
- package/dist/cli/chunk-KJDWWQFY.js +46 -0
- package/dist/cli/chunk-LKNUA3SB.js +83 -0
- package/dist/cli/chunk-LVGIFMCV.js +163 -0
- package/dist/cli/chunk-LWQBJQSE.js +67 -0
- package/dist/cli/chunk-MNJRLSEQ.js +107 -0
- package/dist/cli/chunk-NRKWJLMS.js +91 -0
- package/dist/cli/chunk-NSHV2JNM.js +48 -0
- package/dist/cli/chunk-NWTATTEQ.js +210 -0
- package/dist/cli/chunk-OAPN46TC.js +89 -0
- package/dist/cli/chunk-OGV57L4J.js +59 -0
- package/dist/cli/chunk-OILHT47L.js +252 -0
- package/dist/cli/chunk-OPTEQKBB.js +258 -0
- package/dist/cli/chunk-PKKZPOOP.js +352 -0
- package/dist/cli/chunk-QA6T2LQ5.js +71 -0
- package/dist/cli/chunk-QFFQSKRC.js +4497 -0
- package/dist/cli/chunk-QPUY2HQZ.js +74 -0
- package/dist/cli/chunk-REUTEW3O.js +258 -0
- package/dist/cli/chunk-S24YI723.js +88 -0
- package/dist/cli/chunk-SXXOC6KZ.js +209 -0
- package/dist/cli/chunk-ULN4OKQQ.js +259 -0
- package/dist/cli/chunk-V5GBGOGM.js +46 -0
- package/dist/cli/chunk-VLEYOOPH.js +31 -0
- package/dist/cli/chunk-W33Q3FBH.js +66 -0
- package/dist/cli/chunk-W3JLYKKY.js +140 -0
- package/dist/cli/chunk-XRAX6XFP.js +48 -0
- package/dist/cli/chunk-YGKEECTI.js +78 -0
- package/dist/cli/chunk-YUZJI67I.js +108 -0
- package/dist/cli/chunk-YY66LFZF.js +29 -0
- package/dist/cli/chunk-ZBISIPCK.js +78 -0
- package/dist/cli/chunk-ZZTHTMQP.js +77 -0
- package/dist/cli/claim-KPENYHIQ.js +96 -0
- package/dist/cli/classify-DRVMCFQU.js +117 -0
- package/dist/cli/cli-T3CR7J57.js +48 -0
- package/dist/cli/cloud-PPQ4O5TX.js +565 -0
- package/dist/cli/cockpit-RZKLGYPN.js +790 -0
- package/dist/cli/code-Z5CTMVTD.js +178 -0
- package/dist/cli/complete-UBOCOBRB.js +34 -0
- package/dist/cli/complexity-BV2AGQRZ.js +56 -0
- package/dist/cli/compliance-32PD5Y47.js +276 -0
- package/dist/cli/conduit-VDKCH33F.js +307 -0
- package/dist/cli/config-I72JAXK4.js +516 -0
- package/dist/cli/consensus-LFILLSTK.js +121 -0
- package/dist/cli/context-XUUVFVTP.js +141 -0
- package/dist/cli/contribution-37NQ4N5R.js +111 -0
- package/dist/cli/curator-TFDXU2EX.js +139 -0
- package/dist/cli/current-C4SN5BWV.js +42 -0
- package/dist/cli/daemon-DV25JQ62.js +451 -0
- package/dist/cli/dash-TFU4RLQW.js +70 -0
- package/dist/cli/decide-5VPMNTSI.js +419 -0
- package/dist/cli/decompose-KOYEZNJL.js +77 -0
- package/dist/cli/decomposition-7OHUFIQN.js +121 -0
- package/dist/cli/delete-Q7YCAFY5.js +68 -0
- package/dist/cli/deps-6UZKLDGJ.js +463 -0
- package/dist/cli/detect-FERY35UL.js +45 -0
- package/dist/cli/detect-drift-UL2JTPUK.js +408 -0
- package/dist/cli/diagnostics-TI5QAZXR.js +132 -0
- package/dist/cli/docs-QI2PRN3T.js +3095 -0
- package/dist/cli/doctor-AX5TICQO.js +1253 -0
- package/dist/cli/doctor-ac-bindings-YPMYHU2G.js +26 -0
- package/dist/cli/doctor-acceptance-drift-PYNFGMKB.js +26 -0
- package/dist/cli/doctor-credentials-UZRIADKM.js +26 -0
- package/dist/cli/doctor-db-substrate-Q2TOYM2S.js +27 -0
- package/dist/cli/doctor-dep-cycles-GCVYZY6F.js +26 -0
- package/dist/cli/doctor-exodus-RO5SUTC2.js +26 -0
- package/dist/cli/doctor-exodus-residue-EM2AWQXP.js +26 -0
- package/dist/cli/doctor-fk-check-Q3FOLECE.js +26 -0
- package/dist/cli/doctor-global-delivery-TNOAQ3NP.js +26 -0
- package/dist/cli/doctor-heavy-command-hook-IO3QAQLG.js +26 -0
- package/dist/cli/doctor-legacy-backups-O2YH5VLS.js +26 -0
- package/dist/cli/doctor-legacy-reaper-VSEJEIFA.js +26 -0
- package/dist/cli/doctor-malformed-ids-LQ766V5K.js +26 -0
- package/dist/cli/doctor-manifest-rows-6FQDNHLH.js +26 -0
- package/dist/cli/doctor-memory-guard-J4PSEKB5.js +26 -0
- package/dist/cli/doctor-migrations-ONOH56YM.js +26 -0
- package/dist/cli/doctor-nexus-residency-FUQAX7PV.js +26 -0
- package/dist/cli/doctor-project-identity-GUDK3HYX.js +26 -0
- package/dist/cli/doctor-projects-7L3BNL4O.js +30 -0
- package/dist/cli/doctor-projects-registry-TEAVHFQU.js +26 -0
- package/dist/cli/doctor-release-readiness-IEGHX6SL.js +26 -0
- package/dist/cli/doctor-repair-NBONOSZU.js +26 -0
- package/dist/cli/doctor-skill-fixtures-7Y6L34A3.js +26 -0
- package/dist/cli/doctor-split-brain-TUKIGVHF.js +26 -0
- package/dist/cli/doctor-superseded-store-BHZY2B2L.js +26 -0
- package/dist/cli/doctor-tool-locks-REQMIVYK.js +26 -0
- package/dist/cli/doctor-twin-collapse-222GOSPE.js +26 -0
- package/dist/cli/doctor-worktree-stores-J7TCRVJ3.js +26 -0
- package/dist/cli/done-V3AOO65B.js +195 -0
- package/dist/cli/dynamic-RR4HB7BB.js +29 -0
- package/dist/cli/event-EGNPGE5A.js +372 -0
- package/dist/cli/exists-H4SDCBPL.js +65 -0
- package/dist/cli/exodus-KALO3B3X.js +401 -0
- package/dist/cli/export-ROFOCG4M.js +92 -0
- package/dist/cli/export-tasks-US3WBIEQ.js +96 -0
- package/dist/cli/federation-SUIB5QWT.js +145 -0
- package/dist/cli/find-YICG4BG6.js +177 -0
- package/dist/cli/focus-TKCZPKOM.js +55 -0
- package/dist/cli/gateway-H4HFDC3E.js +77 -0
- package/dist/cli/gateway-auto-start-EDK7XI6E.js +36 -0
- package/dist/cli/gc-5R2TUY5T.js +291 -0
- package/dist/cli/go-PRQFK5YG.js +206 -0
- package/dist/cli/goal-7CZRMLHC.js +212 -0
- package/dist/cli/grade-PY2YRPUS.js +56 -0
- package/dist/cli/graph-XIXMCFKG.js +878 -0
- package/dist/cli/history-EIXADPAD.js +137 -0
- package/dist/cli/hook-UF7J7R6D.js +57 -0
- package/dist/cli/hook-entry.js +244 -19
- package/dist/cli/hygiene-3QZ2NI7P.js +55 -0
- package/dist/cli/import-R73SO444.js +88 -0
- package/dist/cli/import-tasks-O22FZJ4U.js +108 -0
- package/dist/cli/index.js +419 -94607
- package/dist/cli/init-IHEJDQWU.js +40 -0
- package/dist/cli/inject-LSRVWNCP.js +82 -0
- package/dist/cli/install-global-4AZUCH6U.js +95 -0
- package/dist/cli/intelligence-2OSFOGD2.js +181 -0
- package/dist/cli/issue-IIWEDNFC.js +158 -0
- package/dist/cli/janitor-GPMC7VOR.js +111 -0
- package/dist/cli/labels-5NPOIQXN.js +87 -0
- package/dist/cli/lifecycle-4FFS2K2T.js +272 -0
- package/dist/cli/list-47KEUGPQ.js +108 -0
- package/dist/cli/llm-G5B3I6GD.js +703 -0
- package/dist/cli/llm-cost-S7RS6BVA.js +25 -0
- package/dist/cli/llm-stream-24A45NTS.js +27 -0
- package/dist/cli/log-XF6H2XSD.js +75 -0
- package/dist/cli/login-LBPLGHYG.js +43 -0
- package/dist/cli/logout-SX4JSJIV.js +74 -0
- package/dist/cli/manifest-NMCW4PIW.js +353 -0
- package/dist/cli/map-BU72KMGF.js +52 -0
- package/dist/cli/memory-UHYIVGVM.js +1956 -0
- package/dist/cli/migrate-agents-v2-OO7OILZK.js +33 -0
- package/dist/cli/migrate-claude-mem-EDNYUY3K.js +201 -0
- package/dist/cli/next-RZFRG5X7.js +56 -0
- package/dist/cli/nexus-4S4Z5EVU.js +2923 -0
- package/dist/cli/ops-KR7AWCG3.js +51 -0
- package/dist/cli/orchestrate-HOYZY3VX.js +948 -0
- package/dist/cli/otel-U7IIRBCT.js +188 -0
- package/dist/cli/phase-NYZFHUE5.js +220 -0
- package/dist/cli/pivot-FF2CVUZL.js +87 -0
- package/dist/cli/plan-3SL2NTRV.js +48 -0
- package/dist/cli/playbook-2FCBV7N3.js +229 -0
- package/dist/cli/project-WDX2TGMC.js +330 -0
- package/dist/cli/promote-YINYFBZY.js +52 -0
- package/dist/cli/provenance-C7AYD7WG.js +128 -0
- package/dist/cli/provider-QLJEDQBR.js +212 -0
- package/dist/cli/reason-JF5BHBM5.js +137 -0
- package/dist/cli/reconcile-NMISHDGX.js +127 -0
- package/dist/cli/refresh-memory-EY5YNICV.js +45 -0
- package/dist/cli/relates-R3ZPICAY.js +259 -0
- package/dist/cli/release-4ZJTMUUT.js +524 -0
- package/dist/cli/remote-QSONJDIK.js +279 -0
- package/dist/cli/renderers-64OR3IWX.js +37 -0
- package/dist/cli/reorder-J3DOE7ST.js +86 -0
- package/dist/cli/reparent-2OUMKEZX.js +58 -0
- package/dist/cli/req-TZB7OFKO.js +129 -0
- package/dist/cli/research-MTD7EX45.js +365 -0
- package/dist/cli/restore-VEUOX7NF.js +423 -0
- package/dist/cli/revert-3YF2IL5G.js +240 -0
- package/dist/cli/roadmap-7OOQLXKG.js +61 -0
- package/dist/cli/run-2U5NZV5Z.js +211 -0
- package/dist/cli/safestop-VR4VK56D.js +88 -0
- package/dist/cli/saga-SEWPIOX2.js +285 -0
- package/dist/cli/schema-C52WZ35V.js +195 -0
- package/dist/cli/self-update-GQIGUDPS.js +504 -0
- package/dist/cli/selfimprove-3Y5L4ECT.js +88 -0
- package/dist/cli/sentient-M4YMAVGV.js +1088 -0
- package/dist/cli/sequence-6UBMA4IF.js +93 -0
- package/dist/cli/service-5R7SILZ7.js +155 -0
- package/dist/cli/session-3C6AAC4Y.js +707 -0
- package/dist/cli/setup-BTUBW5PU.js +323 -0
- package/dist/cli/show-MXT2V7TF.js +122 -0
- package/dist/cli/skill-GFUZOU2C.js +84 -0
- package/dist/cli/skills-EDWLKAF3.js +928 -0
- package/dist/cli/smoke-provider-SKUFMZXU.js +218 -0
- package/dist/cli/snapshot-GUWMURCM.js +119 -0
- package/dist/cli/src-66GAKPXR.js +80 -0
- package/dist/cli/start-QFG56RGN.js +67 -0
- package/dist/cli/stats-GW55P7RR.js +95 -0
- package/dist/cli/status-46HTKNRR.js +157 -0
- package/dist/cli/sticky-2DUZOUGI.js +338 -0
- package/dist/cli/stop-J2QEUKHX.js +42 -0
- package/dist/cli/sync-GJP2QYT5.js +154 -0
- package/dist/cli/tasks-BNXTM7PB.js +174 -0
- package/dist/cli/telemetry-55Z2XJWL.js +120 -0
- package/dist/cli/templates-7O77TKPV.js +611 -0
- package/dist/cli/testing-37YTBNKP.js +146 -0
- package/dist/cli/token-UAVJMNUI.js +220 -0
- package/dist/cli/transcript-LORQTV5Z.js +440 -0
- package/dist/cli/tui-BPUFHYKK.js +51 -0
- package/dist/cli/update-NVCYV2FT.js +476 -0
- package/dist/cli/upgrade-OXJXOGEF.js +243 -0
- package/dist/cli/verify-LYLDHPT2.js +190 -0
- package/dist/cli/web-QP2RP266.js +275 -0
- package/dist/cli/workgraph-FXBSZDQE.js +232 -0
- package/dist/cli/worktree-6RXAJIST.js +370 -0
- package/package.json +13 -13
- package/studio-dist/client/_app/immutable/chunks/{Buaay_Q8.js → Btgeq_wq.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{BJp57kf2.js → CgBjxmu6.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{CLP4JZvZ.js → DgEKqO6r.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/t81h7afa.js +1 -0
- package/studio-dist/client/_app/immutable/entry/{app.CczVILch.js → app.a02HWaRB.js} +2 -2
- package/studio-dist/client/_app/immutable/entry/start.BreMSngo.js +1 -0
- package/studio-dist/client/_app/immutable/nodes/{0.Zy2IsLEl.js → 0.nTXyRfc-.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{1.DJN1QI3l.js → 1.4zrWeHtl.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{15.B4rwqbHV.js → 15.D9mk4JyY.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{16.jn-5BG_L.js → 16._-wt-sQf.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{17.DnWGC4t9.js → 17.CUu6LQDj.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{18.0zddLZOY.js → 18.Dz4QRTkX.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{20.DEKHq9Tc.js → 20.CJ2_EB0U.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{24.CQB9KP-p.js → 24.Igj2FS7k.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{25.BaqToZD-.js → 25.BnATjVGN.js} +2 -2
- package/studio-dist/client/_app/immutable/nodes/{26.BiE1i4iE.js → 26.6iPyjT44.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{3.BObAOu_-.js → 3.AA5GwNgP.js} +1 -1
- package/studio-dist/client/_app/version.json +1 -1
- package/studio-dist/server/chunks/{0-BmUoS2yd.js → 0-DGmsoBYm.js} +3 -3
- package/studio-dist/server/chunks/1-8PfxPvlK.js +9 -0
- package/studio-dist/server/chunks/{15-Dt4kqUxW.js → 15-Bg6YTndh.js} +3 -3
- package/studio-dist/server/chunks/{16-kgTLJvbO.js → 16-BObLwgyD.js} +3 -3
- package/studio-dist/server/chunks/{17-mRYB5141.js → 17-BNXGyAHX.js} +3 -3
- package/studio-dist/server/chunks/{18-BjZ325q5.js → 18-UqQFRIID.js} +3 -3
- package/studio-dist/server/chunks/{20-DQ2Vrujq.js → 20-CMn8a_yP.js} +3 -3
- package/studio-dist/server/chunks/{24-DAeuAfXN.js → 24-BuOTDzib.js} +3 -3
- package/studio-dist/server/chunks/{25-DGCNmzAS.js → 25-CIMSmjVx.js} +4 -4
- package/studio-dist/server/chunks/{26-CiN6bbmR.js → 26-DWGObn2T.js} +3 -3
- package/studio-dist/server/chunks/{3-BS2FXYjP.js → 3-CyiffdJZ.js} +3 -3
- package/studio-dist/server/chunks/{_layout.svelte-DJ_UWmGp.js → _layout.svelte-DYtClaIk.js} +4 -4
- package/studio-dist/server/chunks/{_page.svelte-WR6jUiQE.js → _page.svelte-1h9E6s_f.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-BUq8_eQH.js → _page.svelte-BNNF62Nm.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-CRnYa4cW.js → _page.svelte-BT1EUadj.js} +5 -5
- package/studio-dist/server/chunks/{_page.svelte-Dk0znswQ.js → _page.svelte-Bip079LT.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-CcP_KW3Y.js → _page.svelte-CEATWp_5.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-Ca7x-ZvH.js → _page.svelte-CV3xiD1y.js} +4 -4
- package/studio-dist/server/chunks/{_page.svelte-Cfv9tDBA.js → _page.svelte-Cv_KVJDV.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-J4HjPhfO.js → _page.svelte-DSSy6LuK.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-D8dLEr7O.js → _page.svelte-TF795TAS.js} +3 -3
- package/studio-dist/server/chunks/{_server.ts-Bih2-_5O.js → _server.ts-BlhRFLY3.js} +2 -2
- package/studio-dist/server/chunks/{_server.ts-Cr57EKWf.js → _server.ts-C4w6UdU0.js} +3 -3
- package/studio-dist/server/chunks/{_server.ts-P4wVVksg.js → _server.ts-CzrwbhkQ.js} +3 -3
- package/studio-dist/server/chunks/{_server.ts-2BazvYRP.js → _server.ts-DWt8Dziu.js} +3 -3
- package/studio-dist/server/chunks/{_server.ts-C0evMKCk.js → _server.ts-Db6mEile.js} +3 -3
- package/studio-dist/server/chunks/{client-Cl295FWH.js → client-D8f2k-H_.js} +2 -2
- package/studio-dist/server/chunks/{dist-CdoCt9zT.js → dist-B8xbIrdB.js} +3 -1
- package/studio-dist/server/chunks/{error.svelte-ajn1HNOb.js → error.svelte-DbbOwIme.js} +3 -3
- package/studio-dist/server/chunks/{http-BiQjEmVU.js → http-1ftNGTs5.js} +2 -2
- package/studio-dist/server/chunks/{internal-D9MtKHIF.js → internal-CTULuLPB.js} +2 -2
- package/studio-dist/server/chunks/{stores-BlknvZ80.js → stores-CS5XOReX.js} +2 -2
- package/studio-dist/server/index.js +1 -1
- package/studio-dist/server/manifest.js +17 -17
- package/studio-dist/client/_app/immutable/chunks/C3l-lTkq.js +0 -1
- package/studio-dist/client/_app/immutable/entry/start.D7gHmBNS.js +0 -1
- package/studio-dist/server/chunks/1-CTjj2MYz.js +0 -9
|
@@ -0,0 +1,948 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
const _installed = Symbol.for('cleocode.cli.sqliteWarningFilter');
|
|
3
|
+
if (globalThis[_installed]) return;
|
|
4
|
+
globalThis[_installed] = true;
|
|
5
|
+
const _origEmitWarning = process.emitWarning;
|
|
6
|
+
process.emitWarning = function(warning, type, code, ctor) {
|
|
7
|
+
if (typeof warning === 'object' && warning.name === 'ExperimentalWarning' && typeof warning.message === 'string' && /SQLite is an experimental feature/i.test(warning.message)) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (typeof warning === 'string' && /SQLite is an experimental feature/i.test(warning)) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
return _origEmitWarning.call(process, warning, type, code, ctor);
|
|
14
|
+
};
|
|
15
|
+
})();
|
|
16
|
+
import {
|
|
17
|
+
defineCommand,
|
|
18
|
+
showUsage
|
|
19
|
+
} from "./chunk-PKKZPOOP.js";
|
|
20
|
+
import {
|
|
21
|
+
dispatchFromCli
|
|
22
|
+
} from "./chunk-3IOQVUO7.js";
|
|
23
|
+
import "./chunk-AWCQH2W5.js";
|
|
24
|
+
import "./chunk-OGV57L4J.js";
|
|
25
|
+
import "./chunk-ZBISIPCK.js";
|
|
26
|
+
import {
|
|
27
|
+
cliOutput
|
|
28
|
+
} from "./chunk-3ZO3M37V.js";
|
|
29
|
+
import "./chunk-6JSJNYH2.js";
|
|
30
|
+
import "./chunk-QFFQSKRC.js";
|
|
31
|
+
|
|
32
|
+
// packages/cleo/src/cli/commands/orchestrate.ts
|
|
33
|
+
import { execFileSync } from "node:child_process";
|
|
34
|
+
import { orchestration } from "@cleocode/core";
|
|
35
|
+
import { BUILD_CONFIG, getProjectRoot } from "@cleocode/core/internal";
|
|
36
|
+
function formatRollupTable(rollup) {
|
|
37
|
+
const waves = "waves" in rollup ? rollup.waves : [rollup];
|
|
38
|
+
const lines = [];
|
|
39
|
+
const header = ["WAVE", "TASK", "TITLE", "STATUS", "GATES", "LATEST"];
|
|
40
|
+
const rows = [header];
|
|
41
|
+
const blockers = [];
|
|
42
|
+
for (const wave of waves) {
|
|
43
|
+
for (const w of wave.workers) {
|
|
44
|
+
const gateSummary = Object.entries(w.gates ?? {}).map(([k, v]) => `${k}=${v === true ? "ok" : v === false ? "fail" : "-"}`).join(",");
|
|
45
|
+
const latest = w.latestManifestStatus ? `${w.latestManifestStatus}@${(w.latestManifestAt ?? "").slice(0, 19)}` : "-";
|
|
46
|
+
rows.push([
|
|
47
|
+
String(wave.waveId),
|
|
48
|
+
w.taskId,
|
|
49
|
+
(w.title ?? "").slice(0, 40),
|
|
50
|
+
String(w.status ?? "-"),
|
|
51
|
+
gateSummary || "-",
|
|
52
|
+
latest
|
|
53
|
+
]);
|
|
54
|
+
}
|
|
55
|
+
for (const b of wave.blockers) blockers.push(b);
|
|
56
|
+
}
|
|
57
|
+
const widths = header.map((_, ci) => Math.max(...rows.map((r) => (r[ci] ?? "").length)));
|
|
58
|
+
for (const row of rows) {
|
|
59
|
+
lines.push(row.map((c, i) => (c ?? "").padEnd(widths[i] ?? 0)).join(" "));
|
|
60
|
+
}
|
|
61
|
+
if (blockers.length > 0) {
|
|
62
|
+
lines.push("");
|
|
63
|
+
lines.push("Blockers:");
|
|
64
|
+
for (const b of blockers) {
|
|
65
|
+
lines.push(` - ${b.taskId} [${b.reason}]${b.detail ? ` ${b.detail}` : ""}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return lines.join("\n");
|
|
69
|
+
}
|
|
70
|
+
var rollupCommand = defineCommand({
|
|
71
|
+
meta: {
|
|
72
|
+
name: "roll-up",
|
|
73
|
+
description: "Lead-tier rollup of an epic (all waves or filtered by --wave)"
|
|
74
|
+
},
|
|
75
|
+
args: {
|
|
76
|
+
epicId: {
|
|
77
|
+
type: "positional",
|
|
78
|
+
description: "Epic ID to roll up",
|
|
79
|
+
required: true
|
|
80
|
+
},
|
|
81
|
+
wave: {
|
|
82
|
+
type: "string",
|
|
83
|
+
description: "Filter to one wave, numbered from 1 as `cleo orchestrate waves` prints it (the n of topic epic-<id>.wave-<n>)"
|
|
84
|
+
},
|
|
85
|
+
json: {
|
|
86
|
+
type: "boolean",
|
|
87
|
+
description: "Emit machine-readable JSON instead of a human table"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
async run({ args }) {
|
|
91
|
+
const epicId = String(args.epicId);
|
|
92
|
+
const result = args.wave !== void 0 && args.wave !== "" ? await orchestration.rollupWaveStatus(epicId, Number(args.wave)) : await orchestration.rollupEpicStatus(epicId);
|
|
93
|
+
cliOutput(result, { command: "orchestrate", operation: "orchestrate.waves" });
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
var startCommand = defineCommand({
|
|
97
|
+
meta: { name: "start", description: "Start orchestrator session for an epic" },
|
|
98
|
+
args: {
|
|
99
|
+
epicId: {
|
|
100
|
+
type: "positional",
|
|
101
|
+
description: "Epic ID to orchestrate",
|
|
102
|
+
required: true
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
async run({ args }) {
|
|
106
|
+
await dispatchFromCli(
|
|
107
|
+
"mutate",
|
|
108
|
+
"orchestrate",
|
|
109
|
+
"start",
|
|
110
|
+
{ epicId: args.epicId },
|
|
111
|
+
{ command: "orchestrate" }
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
var statusCommand = defineCommand({
|
|
116
|
+
meta: { name: "status", description: "Get orchestration status for an epic or overall project" },
|
|
117
|
+
args: {
|
|
118
|
+
epic: {
|
|
119
|
+
type: "string",
|
|
120
|
+
description: "Epic ID to scope status to"
|
|
121
|
+
},
|
|
122
|
+
"merge-queue": {
|
|
123
|
+
type: "boolean",
|
|
124
|
+
description: "Show GitHub merge queue depth instead of epic status (T10445)"
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
async run({ args }) {
|
|
128
|
+
if (args["merge-queue"]) {
|
|
129
|
+
const repo = BUILD_CONFIG.repository.fullName;
|
|
130
|
+
let queueDepth = 0;
|
|
131
|
+
let estimatedWaitMinutes = 0;
|
|
132
|
+
let blocked = false;
|
|
133
|
+
let note = "merge queue not enabled";
|
|
134
|
+
try {
|
|
135
|
+
const raw = execFileSync(
|
|
136
|
+
"gh",
|
|
137
|
+
["api", `repos/${repo}/merge-queue`, "--jq", ".entries | length"],
|
|
138
|
+
{ encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"], timeout: 15e3 }
|
|
139
|
+
);
|
|
140
|
+
queueDepth = Number(raw.trim()) || 0;
|
|
141
|
+
estimatedWaitMinutes = queueDepth * 5;
|
|
142
|
+
blocked = queueDepth > 10;
|
|
143
|
+
note = queueDepth > 0 ? "active" : "empty";
|
|
144
|
+
} catch {
|
|
145
|
+
}
|
|
146
|
+
cliOutput({ queueDepth, estimatedWaitMinutes, blocked, note }, { command: "orchestrate" });
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
await dispatchFromCli(
|
|
150
|
+
"query",
|
|
151
|
+
"orchestrate",
|
|
152
|
+
"status",
|
|
153
|
+
{ epicId: args.epic },
|
|
154
|
+
{ command: "orchestrate" }
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
var dashboardCommand = defineCommand({
|
|
159
|
+
meta: {
|
|
160
|
+
name: "dashboard",
|
|
161
|
+
description: "Show queue depth, admin-merge rate, force-bypass rate, and active worktree count"
|
|
162
|
+
},
|
|
163
|
+
args: {
|
|
164
|
+
window: {
|
|
165
|
+
type: "string",
|
|
166
|
+
description: "Audit rate window in hours (default: 24)"
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
async run({ args }) {
|
|
170
|
+
const rateWindowHours = args.window !== void 0 ? Number.parseFloat(String(args.window)) : void 0;
|
|
171
|
+
const metrics = await orchestration.collectOrchestrateDashboard(getProjectRoot(), {
|
|
172
|
+
...rateWindowHours !== void 0 && Number.isFinite(rateWindowHours) && rateWindowHours > 0 ? { rateWindowHours } : {}
|
|
173
|
+
});
|
|
174
|
+
cliOutput(metrics, {
|
|
175
|
+
command: "orchestrate-dashboard",
|
|
176
|
+
operation: "orchestrate.dashboard"
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
var analyzeCommand = defineCommand({
|
|
181
|
+
meta: { name: "analyze", description: "Analyze epic dependency structure" },
|
|
182
|
+
args: {
|
|
183
|
+
epicId: {
|
|
184
|
+
type: "positional",
|
|
185
|
+
description: "Epic ID to analyze",
|
|
186
|
+
required: true
|
|
187
|
+
},
|
|
188
|
+
mode: {
|
|
189
|
+
type: "string",
|
|
190
|
+
description: "Analysis mode: critical-path or parallel-safety"
|
|
191
|
+
},
|
|
192
|
+
tasks: {
|
|
193
|
+
type: "string",
|
|
194
|
+
description: "Comma-separated task IDs for parallel-safety mode"
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
async run({ args }) {
|
|
198
|
+
const taskIds = typeof args.tasks === "string" ? args.tasks.split(",").map((s) => s.trim()) : void 0;
|
|
199
|
+
await dispatchFromCli(
|
|
200
|
+
"query",
|
|
201
|
+
"orchestrate",
|
|
202
|
+
"analyze",
|
|
203
|
+
{ epicId: args.epicId, mode: args.mode, taskIds },
|
|
204
|
+
{ command: "orchestrate" }
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
var readyCommand = defineCommand({
|
|
209
|
+
meta: {
|
|
210
|
+
name: "ready",
|
|
211
|
+
description: "Get parallel-safe ready tasks. When the epic is a Saga (label='saga', ADR-073), traverses task_relations.type='groups' instead of parentId."
|
|
212
|
+
},
|
|
213
|
+
args: {
|
|
214
|
+
epicId: {
|
|
215
|
+
type: "positional",
|
|
216
|
+
description: "Epic ID to query",
|
|
217
|
+
required: true
|
|
218
|
+
},
|
|
219
|
+
"ignore-deps-validate": {
|
|
220
|
+
type: "boolean",
|
|
221
|
+
description: "Skip dep-graph validation and proceed even if issues exist (audit-logged bypass). CLI-only \u2014 sentient mode does not support this flag."
|
|
222
|
+
},
|
|
223
|
+
via: {
|
|
224
|
+
type: "string",
|
|
225
|
+
description: "Traversal mode (gh-390/ADR-073): 'parent' walks parentId only, 'saga' walks task_relations.type='groups' only, 'both' (default) auto-detects saga-labeled epics."
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
async run({ args }) {
|
|
229
|
+
await dispatchFromCli(
|
|
230
|
+
"query",
|
|
231
|
+
"orchestrate",
|
|
232
|
+
"ready",
|
|
233
|
+
{
|
|
234
|
+
epicId: args.epicId,
|
|
235
|
+
ignoreDepsValidate: args["ignore-deps-validate"] === true,
|
|
236
|
+
...args.via !== void 0 && { via: args.via }
|
|
237
|
+
},
|
|
238
|
+
{ command: "orchestrate" }
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
var reportCommand = defineCommand({
|
|
243
|
+
meta: {
|
|
244
|
+
name: "report",
|
|
245
|
+
description: "Grouped readiness report: ready, blocked, blockedBy, gate-blocked, invalid. Aligns with orchestrate.ready frontier. Supports pagination."
|
|
246
|
+
},
|
|
247
|
+
args: {
|
|
248
|
+
epicId: {
|
|
249
|
+
type: "positional",
|
|
250
|
+
description: "Epic ID to generate the report for",
|
|
251
|
+
required: true
|
|
252
|
+
},
|
|
253
|
+
page: {
|
|
254
|
+
type: "string",
|
|
255
|
+
description: "Page number for paginated output (1-indexed, default 1)"
|
|
256
|
+
},
|
|
257
|
+
"page-size": {
|
|
258
|
+
type: "string",
|
|
259
|
+
description: "Page size for paginated output (default 50, max 200)"
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
async run({ args }) {
|
|
263
|
+
await dispatchFromCli(
|
|
264
|
+
"query",
|
|
265
|
+
"orchestrate",
|
|
266
|
+
"report",
|
|
267
|
+
{
|
|
268
|
+
epicId: args.epicId,
|
|
269
|
+
...args.page !== void 0 && { page: Number(args.page) },
|
|
270
|
+
...args["page-size"] !== void 0 && { pageSize: Number(args["page-size"]) }
|
|
271
|
+
},
|
|
272
|
+
{ command: "orchestrate" }
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
var nextCommand = defineCommand({
|
|
277
|
+
meta: { name: "next", description: "Get next task to spawn" },
|
|
278
|
+
args: {
|
|
279
|
+
epicId: {
|
|
280
|
+
type: "positional",
|
|
281
|
+
description: "Epic ID to query",
|
|
282
|
+
required: true
|
|
283
|
+
}
|
|
284
|
+
},
|
|
285
|
+
async run({ args }) {
|
|
286
|
+
await dispatchFromCli(
|
|
287
|
+
"query",
|
|
288
|
+
"orchestrate",
|
|
289
|
+
"next",
|
|
290
|
+
{ epicId: args.epicId },
|
|
291
|
+
{ command: "orchestrate" }
|
|
292
|
+
);
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
var wavesCommand = defineCommand({
|
|
296
|
+
meta: {
|
|
297
|
+
name: "waves",
|
|
298
|
+
description: "Compute dependency waves for an epic. Wave numbers are stable: a finished wave keeps its number and is listed as completed (--hide-completed omits it). When the epic is a Saga (label='saga', ADR-073), per-member wave plans are merged by index (wave N across all members \u2192 one unified wave N)."
|
|
299
|
+
},
|
|
300
|
+
args: {
|
|
301
|
+
epicId: {
|
|
302
|
+
type: "positional",
|
|
303
|
+
description: "Epic ID to compute waves for",
|
|
304
|
+
required: true
|
|
305
|
+
},
|
|
306
|
+
via: {
|
|
307
|
+
type: "string",
|
|
308
|
+
description: "Traversal mode (gh-390/ADR-073): 'parent' walks parentId only, 'saga' walks task_relations.type='groups' only, 'both' (default) auto-detects saga-labeled epics."
|
|
309
|
+
},
|
|
310
|
+
"hide-completed": {
|
|
311
|
+
type: "boolean",
|
|
312
|
+
description: "Omit finished waves. Wave numbers are stable, so the remaining waves keep their numbers (the n of topic epic-<id>.wave-<n>)"
|
|
313
|
+
}
|
|
314
|
+
},
|
|
315
|
+
async run({ args }) {
|
|
316
|
+
await dispatchFromCli(
|
|
317
|
+
"query",
|
|
318
|
+
"orchestrate",
|
|
319
|
+
"waves",
|
|
320
|
+
{
|
|
321
|
+
epicId: args.epicId,
|
|
322
|
+
...args.via !== void 0 && { via: args.via },
|
|
323
|
+
...args["hide-completed"] === true && { hideCompleted: true }
|
|
324
|
+
},
|
|
325
|
+
{ command: "orchestrate" }
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
});
|
|
329
|
+
var planCommand = defineCommand({
|
|
330
|
+
meta: {
|
|
331
|
+
name: "plan",
|
|
332
|
+
description: "Emit a deterministic wave+worker plan for an epic (machine-readable)"
|
|
333
|
+
},
|
|
334
|
+
args: {
|
|
335
|
+
epicId: {
|
|
336
|
+
type: "positional",
|
|
337
|
+
description: "Epic ID to plan",
|
|
338
|
+
required: true
|
|
339
|
+
},
|
|
340
|
+
tier: {
|
|
341
|
+
type: "string",
|
|
342
|
+
description: "Preferred resolver tier (0=project, 1=global, 2=packaged)"
|
|
343
|
+
}
|
|
344
|
+
},
|
|
345
|
+
async run({ args }) {
|
|
346
|
+
const preferTier = args.tier !== void 0 ? Number.parseInt(args.tier, 10) : void 0;
|
|
347
|
+
await dispatchFromCli(
|
|
348
|
+
"query",
|
|
349
|
+
"orchestrate",
|
|
350
|
+
"plan",
|
|
351
|
+
{ epicId: args.epicId, preferTier },
|
|
352
|
+
{ command: "orchestrate", operation: "orchestrate.plan" }
|
|
353
|
+
);
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
var spawnCommand = defineCommand({
|
|
357
|
+
meta: { name: "spawn", description: "Prepare spawn context for a subagent" },
|
|
358
|
+
args: {
|
|
359
|
+
taskId: {
|
|
360
|
+
type: "positional",
|
|
361
|
+
description: "Task ID to prepare spawn context for",
|
|
362
|
+
required: true
|
|
363
|
+
},
|
|
364
|
+
protocol: {
|
|
365
|
+
type: "string",
|
|
366
|
+
description: "Protocol type override"
|
|
367
|
+
},
|
|
368
|
+
tier: {
|
|
369
|
+
type: "string",
|
|
370
|
+
description: "Protocol tier: 0 (minimal), 1 (standard), 2 (full), or auto (default \u2014 inferred from role+size+labels via T892 heuristics)"
|
|
371
|
+
},
|
|
372
|
+
"no-worktree": {
|
|
373
|
+
type: "boolean",
|
|
374
|
+
description: "Skip worktree provisioning for this spawn. The opt-out is logged to the audit log (T1140)."
|
|
375
|
+
},
|
|
376
|
+
scope: {
|
|
377
|
+
type: "string",
|
|
378
|
+
description: "T9807 sparse-checkout scope: directory prefix to check out in the worktree (cone mode). Example: --scope packages/cleo creates a worktree with only that subtree checked out. Reduces disk usage and checkout time for tasks scoped to a single package."
|
|
379
|
+
},
|
|
380
|
+
"orchestrator-defer": {
|
|
381
|
+
type: "boolean",
|
|
382
|
+
description: "T9214 atomicity waiver: defer worker file-scope declaration to commit time. Tier-1+ orchestrators only \u2014 records auditable atomicity_waiver in the spawn manifest. Bypasses E_ATOMICITY_NO_SCOPE for worker tasks without explicit AC.files."
|
|
383
|
+
},
|
|
384
|
+
resume: {
|
|
385
|
+
type: "boolean",
|
|
386
|
+
description: "T10078 \u2014 skip worktree provisioning and attach to an existing locked worktree at the canonical XDG path. If the worktree does not exist, returns E_RESUME_WORKTREE_MISSING. Use after a prior aborted spawn left a worktree behind."
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
async run({ args }) {
|
|
390
|
+
let tier;
|
|
391
|
+
if (args.tier !== void 0 && args.tier !== "auto") {
|
|
392
|
+
const parsed = Number.parseInt(args.tier, 10);
|
|
393
|
+
if (parsed === 0 || parsed === 1 || parsed === 2) {
|
|
394
|
+
tier = parsed;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
const atomicityScope = args["orchestrator-defer"] ? "orchestrator-defer" : void 0;
|
|
398
|
+
await dispatchFromCli(
|
|
399
|
+
"mutate",
|
|
400
|
+
"orchestrate",
|
|
401
|
+
"spawn",
|
|
402
|
+
{
|
|
403
|
+
taskId: args.taskId,
|
|
404
|
+
protocolType: args.protocol,
|
|
405
|
+
tier,
|
|
406
|
+
// T12520 — citty parses `--no-worktree` as the NEGATION of `worktree`
|
|
407
|
+
// (`{ worktree: false }`), never as `{ 'no-worktree': true }`, so reading
|
|
408
|
+
// only `args['no-worktree']` made the opt-out a silent no-op: a worktree
|
|
409
|
+
// was provisioned and the Worktree Setup block emitted anyway.
|
|
410
|
+
noWorktree: args.worktree === false || args["no-worktree"] === true,
|
|
411
|
+
...args.scope ? { spawnScope: args.scope } : {},
|
|
412
|
+
...atomicityScope ? { atomicityScope } : {},
|
|
413
|
+
resume: args.resume === true
|
|
414
|
+
},
|
|
415
|
+
{ command: "orchestrate" }
|
|
416
|
+
);
|
|
417
|
+
}
|
|
418
|
+
});
|
|
419
|
+
var validateCommand = defineCommand({
|
|
420
|
+
meta: { name: "validate", description: "Validate subagent output" },
|
|
421
|
+
args: {
|
|
422
|
+
taskId: {
|
|
423
|
+
type: "positional",
|
|
424
|
+
description: "Task ID to validate output for",
|
|
425
|
+
required: true
|
|
426
|
+
},
|
|
427
|
+
file: {
|
|
428
|
+
type: "string",
|
|
429
|
+
description: "Output file path"
|
|
430
|
+
},
|
|
431
|
+
manifest: {
|
|
432
|
+
type: "boolean",
|
|
433
|
+
description: "Manifest entry was appended"
|
|
434
|
+
}
|
|
435
|
+
},
|
|
436
|
+
async run({ args }) {
|
|
437
|
+
await dispatchFromCli(
|
|
438
|
+
"mutate",
|
|
439
|
+
"orchestrate",
|
|
440
|
+
"validate",
|
|
441
|
+
{ taskId: args.taskId, file: args.file, manifestEntry: args.manifest },
|
|
442
|
+
{ command: "orchestrate" }
|
|
443
|
+
);
|
|
444
|
+
}
|
|
445
|
+
});
|
|
446
|
+
var contextCommand = defineCommand({
|
|
447
|
+
meta: { name: "context", description: "Get orchestrator context summary" },
|
|
448
|
+
args: {
|
|
449
|
+
epicId: {
|
|
450
|
+
type: "positional",
|
|
451
|
+
description: "Epic ID to get context for",
|
|
452
|
+
required: true
|
|
453
|
+
}
|
|
454
|
+
},
|
|
455
|
+
async run({ args }) {
|
|
456
|
+
await dispatchFromCli(
|
|
457
|
+
"query",
|
|
458
|
+
"orchestrate",
|
|
459
|
+
"context",
|
|
460
|
+
{ epicId: args.epicId },
|
|
461
|
+
{ command: "orchestrate" }
|
|
462
|
+
);
|
|
463
|
+
}
|
|
464
|
+
});
|
|
465
|
+
var ivtrCommand = defineCommand({
|
|
466
|
+
meta: {
|
|
467
|
+
name: "ivtr",
|
|
468
|
+
description: "Drive an Implement\u2192Validate\u2192Test phased loop on a task with evidence-bound gates"
|
|
469
|
+
},
|
|
470
|
+
args: {
|
|
471
|
+
taskId: {
|
|
472
|
+
type: "positional",
|
|
473
|
+
description: "Task ID to drive IVTR loop for",
|
|
474
|
+
required: true
|
|
475
|
+
},
|
|
476
|
+
start: {
|
|
477
|
+
type: "boolean",
|
|
478
|
+
description: "Begin Implement phase"
|
|
479
|
+
},
|
|
480
|
+
next: {
|
|
481
|
+
type: "boolean",
|
|
482
|
+
description: "Advance to next phase (requires prior-phase evidence)"
|
|
483
|
+
},
|
|
484
|
+
status: {
|
|
485
|
+
type: "boolean",
|
|
486
|
+
description: "Show current IVTR state + history"
|
|
487
|
+
},
|
|
488
|
+
release: {
|
|
489
|
+
type: "boolean",
|
|
490
|
+
description: "Final gate \u2014 require I+V+T evidence, then release"
|
|
491
|
+
},
|
|
492
|
+
"loop-back": {
|
|
493
|
+
type: "boolean",
|
|
494
|
+
description: "Rewind to specified phase on failure"
|
|
495
|
+
},
|
|
496
|
+
phase: {
|
|
497
|
+
type: "string",
|
|
498
|
+
description: "Phase for --loop-back (implement|validate|test)"
|
|
499
|
+
},
|
|
500
|
+
reason: {
|
|
501
|
+
type: "string",
|
|
502
|
+
description: "Reason for loop-back"
|
|
503
|
+
},
|
|
504
|
+
evidence: {
|
|
505
|
+
type: "string",
|
|
506
|
+
description: "Attachment sha256 to attach"
|
|
507
|
+
}
|
|
508
|
+
},
|
|
509
|
+
async run({ args }) {
|
|
510
|
+
const action = args.start ? "start" : args.next ? "next" : args.release ? "release" : args["loop-back"] ? "loop-back" : "status";
|
|
511
|
+
const kind = action === "status" ? "query" : "mutate";
|
|
512
|
+
await dispatchFromCli(
|
|
513
|
+
kind,
|
|
514
|
+
"orchestrate",
|
|
515
|
+
`ivtr.${action}`,
|
|
516
|
+
{ taskId: args.taskId, phase: args.phase, reason: args.reason, evidence: args.evidence },
|
|
517
|
+
{ command: "orchestrate" }
|
|
518
|
+
);
|
|
519
|
+
}
|
|
520
|
+
});
|
|
521
|
+
var parallelCommand = defineCommand({
|
|
522
|
+
meta: { name: "parallel", description: "Manage parallel wave execution (action: start | end)" },
|
|
523
|
+
args: {
|
|
524
|
+
action: {
|
|
525
|
+
type: "positional",
|
|
526
|
+
description: "Action to perform: start or end",
|
|
527
|
+
required: true
|
|
528
|
+
},
|
|
529
|
+
epicId: {
|
|
530
|
+
type: "positional",
|
|
531
|
+
description: "Epic ID for wave execution",
|
|
532
|
+
required: true
|
|
533
|
+
},
|
|
534
|
+
wave: {
|
|
535
|
+
type: "string",
|
|
536
|
+
description: "Wave number"
|
|
537
|
+
}
|
|
538
|
+
},
|
|
539
|
+
async run({ args }) {
|
|
540
|
+
await dispatchFromCli(
|
|
541
|
+
"mutate",
|
|
542
|
+
"orchestrate",
|
|
543
|
+
"parallel",
|
|
544
|
+
{
|
|
545
|
+
action: args.action,
|
|
546
|
+
epicId: args.epicId,
|
|
547
|
+
wave: args.wave !== void 0 ? Number.parseInt(args.wave, 10) : void 0
|
|
548
|
+
},
|
|
549
|
+
{ command: "orchestrate" }
|
|
550
|
+
);
|
|
551
|
+
}
|
|
552
|
+
});
|
|
553
|
+
var unblockCommand = defineCommand({
|
|
554
|
+
meta: { name: "unblock", description: "Analyze dependency graph for unblocking opportunities" },
|
|
555
|
+
async run() {
|
|
556
|
+
await dispatchFromCli(
|
|
557
|
+
"query",
|
|
558
|
+
"orchestrate",
|
|
559
|
+
"unblock.opportunities",
|
|
560
|
+
{},
|
|
561
|
+
{ command: "orchestrate" }
|
|
562
|
+
);
|
|
563
|
+
}
|
|
564
|
+
});
|
|
565
|
+
var bootstrapCommand = defineCommand({
|
|
566
|
+
meta: { name: "bootstrap", description: "Load brain state for agent bootstrapping" },
|
|
567
|
+
args: {
|
|
568
|
+
epic: {
|
|
569
|
+
type: "string",
|
|
570
|
+
description: "Epic ID to scope bootstrap context to"
|
|
571
|
+
}
|
|
572
|
+
},
|
|
573
|
+
async run({ args }) {
|
|
574
|
+
await dispatchFromCli(
|
|
575
|
+
"query",
|
|
576
|
+
"orchestrate",
|
|
577
|
+
"bootstrap",
|
|
578
|
+
{ epicId: args.epic },
|
|
579
|
+
{ command: "orchestrate" }
|
|
580
|
+
);
|
|
581
|
+
}
|
|
582
|
+
});
|
|
583
|
+
var classifyCommand = defineCommand({
|
|
584
|
+
meta: {
|
|
585
|
+
name: "classify",
|
|
586
|
+
description: "Classify a request using CANT prompt-based team routing"
|
|
587
|
+
},
|
|
588
|
+
args: {
|
|
589
|
+
request: {
|
|
590
|
+
type: "positional",
|
|
591
|
+
description: "Request text to classify",
|
|
592
|
+
required: true
|
|
593
|
+
}
|
|
594
|
+
},
|
|
595
|
+
async run({ args }) {
|
|
596
|
+
await dispatchFromCli(
|
|
597
|
+
"query",
|
|
598
|
+
"orchestrate",
|
|
599
|
+
"classify",
|
|
600
|
+
{ request: args.request },
|
|
601
|
+
{ command: "orchestrate" }
|
|
602
|
+
);
|
|
603
|
+
}
|
|
604
|
+
});
|
|
605
|
+
var fanoutStatusCommand = defineCommand({
|
|
606
|
+
meta: { name: "fanout-status", description: "Get fanout status by manifest entry ID" },
|
|
607
|
+
args: {
|
|
608
|
+
"manifest-entry-id": {
|
|
609
|
+
type: "string",
|
|
610
|
+
description: "Manifest entry ID returned by orchestrate.fanout",
|
|
611
|
+
required: true
|
|
612
|
+
}
|
|
613
|
+
},
|
|
614
|
+
async run({ args }) {
|
|
615
|
+
await dispatchFromCli(
|
|
616
|
+
"query",
|
|
617
|
+
"orchestrate",
|
|
618
|
+
"fanout.status",
|
|
619
|
+
{ manifestEntryId: args["manifest-entry-id"] },
|
|
620
|
+
{ command: "orchestrate" }
|
|
621
|
+
);
|
|
622
|
+
}
|
|
623
|
+
});
|
|
624
|
+
var handoffCommand = defineCommand({
|
|
625
|
+
meta: { name: "handoff", description: "Perform session handoff and spawn successor for a task" },
|
|
626
|
+
args: {
|
|
627
|
+
taskId: {
|
|
628
|
+
type: "positional",
|
|
629
|
+
description: "Task ID to hand off",
|
|
630
|
+
required: true
|
|
631
|
+
},
|
|
632
|
+
protocol: {
|
|
633
|
+
type: "string",
|
|
634
|
+
description: "Protocol type for handoff",
|
|
635
|
+
required: true
|
|
636
|
+
}
|
|
637
|
+
},
|
|
638
|
+
async run({ args }) {
|
|
639
|
+
await dispatchFromCli(
|
|
640
|
+
"mutate",
|
|
641
|
+
"orchestrate",
|
|
642
|
+
"handoff",
|
|
643
|
+
{ taskId: args.taskId, protocolType: args.protocol },
|
|
644
|
+
{ command: "orchestrate" }
|
|
645
|
+
);
|
|
646
|
+
}
|
|
647
|
+
});
|
|
648
|
+
var spawnExecuteCommand = defineCommand({
|
|
649
|
+
meta: { name: "spawn-execute", description: "Execute spawn for a task via the adapter registry" },
|
|
650
|
+
args: {
|
|
651
|
+
taskId: {
|
|
652
|
+
type: "positional",
|
|
653
|
+
description: "Task ID to execute spawn for",
|
|
654
|
+
required: true
|
|
655
|
+
}
|
|
656
|
+
},
|
|
657
|
+
async run({ args }) {
|
|
658
|
+
await dispatchFromCli(
|
|
659
|
+
"mutate",
|
|
660
|
+
"orchestrate",
|
|
661
|
+
"spawn.execute",
|
|
662
|
+
{ taskId: args.taskId },
|
|
663
|
+
{ command: "orchestrate" }
|
|
664
|
+
);
|
|
665
|
+
}
|
|
666
|
+
});
|
|
667
|
+
var fanoutCommand = defineCommand({
|
|
668
|
+
meta: { name: "fanout", description: "Fan out tasks for an epic using parallel spawn" },
|
|
669
|
+
args: {
|
|
670
|
+
epicId: {
|
|
671
|
+
type: "positional",
|
|
672
|
+
description: "Epic ID to fan out",
|
|
673
|
+
required: true
|
|
674
|
+
},
|
|
675
|
+
tasks: {
|
|
676
|
+
type: "string",
|
|
677
|
+
description: "Comma-separated task IDs to fan out"
|
|
678
|
+
}
|
|
679
|
+
},
|
|
680
|
+
async run({ args }) {
|
|
681
|
+
const taskIds = typeof args.tasks === "string" ? args.tasks.split(",").map((s) => s.trim()) : void 0;
|
|
682
|
+
const items = taskIds ? taskIds.map((taskId) => ({ taskId, team: "default" })) : void 0;
|
|
683
|
+
await dispatchFromCli(
|
|
684
|
+
"mutate",
|
|
685
|
+
"orchestrate",
|
|
686
|
+
"fanout",
|
|
687
|
+
{ epicId: args.epicId, items },
|
|
688
|
+
{ command: "orchestrate" }
|
|
689
|
+
);
|
|
690
|
+
}
|
|
691
|
+
});
|
|
692
|
+
var pruneCommand = defineCommand({
|
|
693
|
+
meta: {
|
|
694
|
+
name: "prune",
|
|
695
|
+
description: "Remove stale agent worktrees (after task completion or crash)"
|
|
696
|
+
},
|
|
697
|
+
args: {
|
|
698
|
+
taskId: {
|
|
699
|
+
type: "positional",
|
|
700
|
+
description: "Task ID whose worktree should be pruned (omit for bulk prune)",
|
|
701
|
+
required: false
|
|
702
|
+
}
|
|
703
|
+
},
|
|
704
|
+
async run({ args }) {
|
|
705
|
+
const taskId = typeof args.taskId === "string" && args.taskId.length > 0 ? args.taskId : void 0;
|
|
706
|
+
await dispatchFromCli(
|
|
707
|
+
"mutate",
|
|
708
|
+
"orchestrate",
|
|
709
|
+
"worktree.prune",
|
|
710
|
+
{ taskId },
|
|
711
|
+
{ command: "orchestrate" }
|
|
712
|
+
);
|
|
713
|
+
}
|
|
714
|
+
});
|
|
715
|
+
var worktreeCompleteCommand = defineCommand({
|
|
716
|
+
meta: {
|
|
717
|
+
name: "worktree-complete",
|
|
718
|
+
description: "Integrate subagent worktree into default branch via canonical git merge --no-ff (ADR-062). T9548: idempotent \u2014 re-running on a completed worktree is a no-op."
|
|
719
|
+
},
|
|
720
|
+
args: {
|
|
721
|
+
taskId: {
|
|
722
|
+
type: "positional",
|
|
723
|
+
description: "Task ID whose worktree branch should be merged (e.g. T1625)",
|
|
724
|
+
required: true
|
|
725
|
+
},
|
|
726
|
+
resolve: {
|
|
727
|
+
type: "string",
|
|
728
|
+
description: 'T9548 conflict-recovery mode: "auto" (default \u2014 attempt merge) or "manual" (skip merge, mark worktree as manually-handled in audit log)',
|
|
729
|
+
default: "auto"
|
|
730
|
+
}
|
|
731
|
+
},
|
|
732
|
+
async run({ args }) {
|
|
733
|
+
const resolveArg = typeof args.resolve === "string" ? args.resolve : void 0;
|
|
734
|
+
const params = { taskId: args.taskId };
|
|
735
|
+
if (resolveArg === "manual") {
|
|
736
|
+
params.resolve = "manual";
|
|
737
|
+
}
|
|
738
|
+
await dispatchFromCli("mutate", "orchestrate", "worktree.complete", params, {
|
|
739
|
+
command: "orchestrate"
|
|
740
|
+
});
|
|
741
|
+
}
|
|
742
|
+
});
|
|
743
|
+
var conduitStatusCommand = defineCommand({
|
|
744
|
+
meta: { name: "conduit-status", description: "Get conduit messaging status" },
|
|
745
|
+
async run() {
|
|
746
|
+
await dispatchFromCli("query", "conduit", "status", {}, { command: "orchestrate" });
|
|
747
|
+
}
|
|
748
|
+
});
|
|
749
|
+
var conduitPeekCommand = defineCommand({
|
|
750
|
+
meta: { name: "conduit-peek", description: "Peek at queued conduit messages" },
|
|
751
|
+
args: {
|
|
752
|
+
limit: {
|
|
753
|
+
type: "string",
|
|
754
|
+
description: "Maximum number of messages to return"
|
|
755
|
+
}
|
|
756
|
+
},
|
|
757
|
+
async run({ args }) {
|
|
758
|
+
await dispatchFromCli(
|
|
759
|
+
"query",
|
|
760
|
+
"conduit",
|
|
761
|
+
"peek",
|
|
762
|
+
{ limit: args.limit !== void 0 ? Number.parseInt(args.limit, 10) : void 0 },
|
|
763
|
+
{ command: "orchestrate" }
|
|
764
|
+
);
|
|
765
|
+
}
|
|
766
|
+
});
|
|
767
|
+
var conduitStartCommand = defineCommand({
|
|
768
|
+
meta: { name: "conduit-start", description: "Start the conduit message loop" },
|
|
769
|
+
args: {
|
|
770
|
+
"poll-interval": {
|
|
771
|
+
type: "string",
|
|
772
|
+
description: "Polling interval in milliseconds"
|
|
773
|
+
}
|
|
774
|
+
},
|
|
775
|
+
async run({ args }) {
|
|
776
|
+
await dispatchFromCli(
|
|
777
|
+
"mutate",
|
|
778
|
+
"conduit",
|
|
779
|
+
"start",
|
|
780
|
+
{
|
|
781
|
+
pollIntervalMs: args["poll-interval"] !== void 0 ? Number.parseInt(args["poll-interval"], 10) : void 0
|
|
782
|
+
},
|
|
783
|
+
{ command: "orchestrate" }
|
|
784
|
+
);
|
|
785
|
+
}
|
|
786
|
+
});
|
|
787
|
+
var conduitStopCommand = defineCommand({
|
|
788
|
+
meta: { name: "conduit-stop", description: "Stop the conduit message loop" },
|
|
789
|
+
async run() {
|
|
790
|
+
await dispatchFromCli("mutate", "conduit", "stop", {}, { command: "orchestrate" });
|
|
791
|
+
}
|
|
792
|
+
});
|
|
793
|
+
var approveCommand = defineCommand({
|
|
794
|
+
meta: {
|
|
795
|
+
name: "approve",
|
|
796
|
+
description: "Approve a pending HITL playbook approval gate by its resume token"
|
|
797
|
+
},
|
|
798
|
+
args: {
|
|
799
|
+
resumeToken: {
|
|
800
|
+
type: "positional",
|
|
801
|
+
description: "HMAC-signed resume token returned when the gate was created",
|
|
802
|
+
required: true
|
|
803
|
+
},
|
|
804
|
+
reason: {
|
|
805
|
+
type: "string",
|
|
806
|
+
description: "Optional justification note recorded on the audit row"
|
|
807
|
+
},
|
|
808
|
+
approver: {
|
|
809
|
+
type: "string",
|
|
810
|
+
description: "Identity of the approver (defaults to cli-user)"
|
|
811
|
+
}
|
|
812
|
+
},
|
|
813
|
+
async run({ args }) {
|
|
814
|
+
await dispatchFromCli(
|
|
815
|
+
"mutate",
|
|
816
|
+
"orchestrate",
|
|
817
|
+
"approve",
|
|
818
|
+
{
|
|
819
|
+
resumeToken: args.resumeToken,
|
|
820
|
+
reason: args.reason,
|
|
821
|
+
approver: args.approver
|
|
822
|
+
},
|
|
823
|
+
{ command: "orchestrate" }
|
|
824
|
+
);
|
|
825
|
+
}
|
|
826
|
+
});
|
|
827
|
+
var rejectCommand = defineCommand({
|
|
828
|
+
meta: {
|
|
829
|
+
name: "reject",
|
|
830
|
+
description: "Reject a pending HITL playbook approval gate with a mandatory reason"
|
|
831
|
+
},
|
|
832
|
+
args: {
|
|
833
|
+
resumeToken: {
|
|
834
|
+
type: "positional",
|
|
835
|
+
description: "HMAC-signed resume token returned when the gate was created",
|
|
836
|
+
required: true
|
|
837
|
+
},
|
|
838
|
+
reason: {
|
|
839
|
+
type: "string",
|
|
840
|
+
description: "Justification for the rejection (mandatory, recorded on the audit row)",
|
|
841
|
+
required: true
|
|
842
|
+
},
|
|
843
|
+
approver: {
|
|
844
|
+
type: "string",
|
|
845
|
+
description: "Identity of the rejector (defaults to cli-user)"
|
|
846
|
+
}
|
|
847
|
+
},
|
|
848
|
+
async run({ args }) {
|
|
849
|
+
await dispatchFromCli(
|
|
850
|
+
"mutate",
|
|
851
|
+
"orchestrate",
|
|
852
|
+
"reject",
|
|
853
|
+
{
|
|
854
|
+
resumeToken: args.resumeToken,
|
|
855
|
+
reason: args.reason,
|
|
856
|
+
approver: args.approver
|
|
857
|
+
},
|
|
858
|
+
{ command: "orchestrate" }
|
|
859
|
+
);
|
|
860
|
+
}
|
|
861
|
+
});
|
|
862
|
+
var pendingCommand = defineCommand({
|
|
863
|
+
meta: {
|
|
864
|
+
name: "pending",
|
|
865
|
+
description: "List all pending HITL playbook approval gates awaiting a decision"
|
|
866
|
+
},
|
|
867
|
+
async run() {
|
|
868
|
+
await dispatchFromCli("query", "orchestrate", "pending", {}, { command: "orchestrate" });
|
|
869
|
+
}
|
|
870
|
+
});
|
|
871
|
+
var conduitSendCommand = defineCommand({
|
|
872
|
+
meta: {
|
|
873
|
+
name: "conduit-send",
|
|
874
|
+
description: "Send a message via conduit to an agent or conversation"
|
|
875
|
+
},
|
|
876
|
+
args: {
|
|
877
|
+
content: {
|
|
878
|
+
type: "positional",
|
|
879
|
+
description: "Message content to send",
|
|
880
|
+
required: true
|
|
881
|
+
},
|
|
882
|
+
to: {
|
|
883
|
+
type: "string",
|
|
884
|
+
description: "Target agent ID"
|
|
885
|
+
},
|
|
886
|
+
conversation: {
|
|
887
|
+
type: "string",
|
|
888
|
+
description: "Conversation ID to send into"
|
|
889
|
+
}
|
|
890
|
+
},
|
|
891
|
+
async run({ args }) {
|
|
892
|
+
await dispatchFromCli(
|
|
893
|
+
"mutate",
|
|
894
|
+
"conduit",
|
|
895
|
+
"send",
|
|
896
|
+
{ content: args.content, to: args.to, conversationId: args.conversation },
|
|
897
|
+
{ command: "orchestrate" }
|
|
898
|
+
);
|
|
899
|
+
}
|
|
900
|
+
});
|
|
901
|
+
var orchestrateCommand = defineCommand({
|
|
902
|
+
meta: { name: "orchestrate", description: "Multi-agent orchestration commands" },
|
|
903
|
+
subCommands: {
|
|
904
|
+
start: startCommand,
|
|
905
|
+
status: statusCommand,
|
|
906
|
+
dashboard: dashboardCommand,
|
|
907
|
+
"roll-up": rollupCommand,
|
|
908
|
+
analyze: analyzeCommand,
|
|
909
|
+
ready: readyCommand,
|
|
910
|
+
report: reportCommand,
|
|
911
|
+
next: nextCommand,
|
|
912
|
+
waves: wavesCommand,
|
|
913
|
+
plan: planCommand,
|
|
914
|
+
spawn: spawnCommand,
|
|
915
|
+
validate: validateCommand,
|
|
916
|
+
context: contextCommand,
|
|
917
|
+
ivtr: ivtrCommand,
|
|
918
|
+
parallel: parallelCommand,
|
|
919
|
+
unblock: unblockCommand,
|
|
920
|
+
bootstrap: bootstrapCommand,
|
|
921
|
+
classify: classifyCommand,
|
|
922
|
+
"fanout-status": fanoutStatusCommand,
|
|
923
|
+
handoff: handoffCommand,
|
|
924
|
+
"spawn-execute": spawnExecuteCommand,
|
|
925
|
+
fanout: fanoutCommand,
|
|
926
|
+
prune: pruneCommand,
|
|
927
|
+
"worktree-complete": worktreeCompleteCommand,
|
|
928
|
+
"conduit-status": conduitStatusCommand,
|
|
929
|
+
"conduit-peek": conduitPeekCommand,
|
|
930
|
+
"conduit-start": conduitStartCommand,
|
|
931
|
+
"conduit-stop": conduitStopCommand,
|
|
932
|
+
"conduit-send": conduitSendCommand,
|
|
933
|
+
// T935: HITL playbook approval gates
|
|
934
|
+
approve: approveCommand,
|
|
935
|
+
reject: rejectCommand,
|
|
936
|
+
pending: pendingCommand
|
|
937
|
+
},
|
|
938
|
+
async run({ cmd, rawArgs }) {
|
|
939
|
+
const firstArg = rawArgs?.find((a) => !a.startsWith("-"));
|
|
940
|
+
if (firstArg && cmd.subCommands && firstArg in cmd.subCommands) return;
|
|
941
|
+
await showUsage(cmd);
|
|
942
|
+
}
|
|
943
|
+
});
|
|
944
|
+
export {
|
|
945
|
+
formatRollupTable,
|
|
946
|
+
orchestrateCommand
|
|
947
|
+
};
|
|
948
|
+
//# sourceMappingURL=orchestrate-HOYZY3VX.js.map
|