@cleocode/cleo 2026.10.3 → 2026.10.5-rc.ci.672
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/README.md +7 -0
- package/bin/cleo.js +11 -1
- package/dist/cli/adapter-OUQRSFZL.js +159 -0
- package/dist/cli/add-4SRRJL4U.js +443 -0
- package/dist/cli/add-batch-TSWICA5J.js +164 -0
- package/dist/cli/admin-L3F6CDYH.js +1428 -0
- package/dist/cli/admin-YMU55YCU.js +341 -0
- package/dist/cli/adr-XESRMFMP.js +172 -0
- package/dist/cli/agent-TAFPIYUU.js +2404 -0
- package/dist/cli/agent-outputs-HVJJIPS4.js +84 -0
- package/dist/cli/analyze-YQ22QVGW.js +49 -0
- package/dist/cli/archive-W5XX6AH7.js +65 -0
- package/dist/cli/archive-stats-HP2KPAJU.js +101 -0
- package/dist/cli/attention-7JBDCRZX.js +124 -0
- package/dist/cli/attention-ZXZANHKC.js +168 -0
- package/dist/cli/audit-ICA2SEFN.js +122 -0
- package/dist/cli/auth-DXIG5OG7.js +491 -0
- package/dist/cli/backfill-LBSYBWLR.js +156 -0
- package/dist/cli/backup-NUGBZ7NA.js +588 -0
- package/dist/cli/backup-inspect-PDRXI45A.js +26 -0
- package/dist/cli/backup-recover-TVKAPERB.js +29 -0
- package/dist/cli/blockers-ZOPCGHDW.js +55 -0
- package/dist/cli/brain-EJOBKL4A.js +397 -0
- package/dist/cli/briefing-RDQJ6WHS.js +213 -0
- package/dist/cli/caamp-Z3XPKEHB.js +181 -0
- package/dist/cli/cancel-S7EHLCJN.js +85 -0
- package/dist/cli/canon-NPF5RODM.js +142 -0
- package/dist/cli/canon-docs-2GTOLF7Y.js +26 -0
- package/dist/cli/cant-CHNN6O57.js +239 -0
- package/dist/cli/changeset-RYPHPN2B.js +246 -0
- package/dist/cli/check-C67YAU7W.js +759 -0
- package/dist/cli/check-DHMURGHC.js +924 -0
- package/dist/cli/checkpoint-UWDFOGYQ.js +128 -0
- package/dist/cli/chunk-22YPFZYB.js +91 -0
- package/dist/cli/chunk-2MGFDMDF.js +272 -0
- package/dist/cli/chunk-47JYZAMS.js +30 -0
- package/dist/cli/chunk-4JYHPP4C.js +76 -0
- package/dist/cli/chunk-4PEODTHY.js +278 -0
- package/dist/cli/chunk-4RGSNUUP.js +950 -0
- package/dist/cli/chunk-4VASFLUW.js +35 -0
- package/dist/cli/chunk-5PNI276X.js +124 -0
- package/dist/cli/chunk-6JSJNYH2.js +114 -0
- package/dist/cli/chunk-6N6WGLXE.js +63 -0
- package/dist/cli/chunk-75UH3BLS.js +210 -0
- package/dist/cli/chunk-7ACK4EIN.js +92 -0
- package/dist/cli/chunk-7NMKLVMI.js +107 -0
- package/dist/cli/chunk-7SINJXB6.js +110 -0
- package/dist/cli/chunk-7UARFJYS.js +46 -0
- package/dist/cli/chunk-7ZYPQV4N.js +90 -0
- package/dist/cli/chunk-AQCYT3L4.js +72 -0
- package/dist/cli/chunk-BQK6XTOH.js +57 -0
- package/dist/cli/chunk-C3B7C43W.js +16 -0
- package/dist/cli/chunk-CAPAGD5E.js +98 -0
- package/dist/cli/chunk-CHGEDCKG.js +77 -0
- package/dist/cli/chunk-COXFJ3PT.js +74 -0
- package/dist/cli/chunk-D7BAQNV2.js +55 -0
- package/dist/cli/chunk-EIUXVHNF.js +258 -0
- package/dist/cli/chunk-EUGB6P5V.js +173 -0
- package/dist/cli/chunk-EW2CKNNZ.js +304 -0
- package/dist/cli/chunk-FSKN4DWC.js +108 -0
- package/dist/cli/chunk-FVKLULL7.js +48 -0
- package/dist/cli/chunk-GAGUBU4Z.js +280 -0
- package/dist/cli/chunk-GKRFH2YG.js +171 -0
- package/dist/cli/chunk-GRU74UE4.js +270 -0
- package/dist/cli/chunk-GZFVDR44.js +320 -0
- package/dist/cli/chunk-HFLLZE6A.js +83 -0
- package/dist/cli/chunk-HXRXT3XU.js +78 -0
- package/dist/cli/chunk-IIOGUY3B.js +258 -0
- package/dist/cli/chunk-ILWWL462.js +60 -0
- package/dist/cli/chunk-J5USPJKZ.js +48 -0
- package/dist/cli/chunk-KEQS36GD.js +88 -0
- package/dist/cli/chunk-L7ONYSV6.js +2497 -0
- package/dist/cli/chunk-LVGIFMCV.js +163 -0
- package/dist/cli/chunk-NEFMQYLE.js +656 -0
- package/dist/cli/chunk-NU6CQQVB.js +4501 -0
- package/dist/cli/chunk-OILHT47L.js +252 -0
- package/dist/cli/chunk-PKKZPOOP.js +352 -0
- package/dist/cli/chunk-PN4WW5VX.js +66 -0
- package/dist/cli/chunk-PSJ33WVO.js +56 -0
- package/dist/cli/chunk-QA6T2LQ5.js +71 -0
- package/dist/cli/chunk-QJJWWCIC.js +288 -0
- package/dist/cli/chunk-QKMBWYAS.js +93 -0
- package/dist/cli/chunk-QWNKLLLG.js +84 -0
- package/dist/cli/chunk-QWUFFDL3.js +85 -0
- package/dist/cli/chunk-QY76BRUZ.js +35 -0
- package/dist/cli/chunk-R45KVF5Y.js +117 -0
- package/dist/cli/chunk-RRKP7HLU.js +66 -0
- package/dist/cli/chunk-SXXOC6KZ.js +209 -0
- package/dist/cli/chunk-T6GZJYL3.js +108 -0
- package/dist/cli/chunk-TLQ37HRE.js +67 -0
- package/dist/cli/chunk-TPTNEJZJ.js +52 -0
- package/dist/cli/chunk-TYC7G5LF.js +100 -0
- package/dist/cli/chunk-UWCZY52R.js +766 -0
- package/dist/cli/chunk-VB3LDPL5.js +46 -0
- package/dist/cli/chunk-VLEYOOPH.js +31 -0
- package/dist/cli/chunk-W3JLYKKY.js +140 -0
- package/dist/cli/chunk-WWCYZYSN.js +56 -0
- package/dist/cli/chunk-XA5WISNV.js +52 -0
- package/dist/cli/chunk-XHRZ7OYZ.js +132 -0
- package/dist/cli/chunk-XLPMIGJJ.js +148 -0
- package/dist/cli/chunk-YY66LFZF.js +29 -0
- package/dist/cli/chunk-ZMGDZMSJ.js +210 -0
- package/dist/cli/claim-IGOG2QOC.js +97 -0
- package/dist/cli/classify-MG4N7GMQ.js +117 -0
- package/dist/cli/cli-A23Q335V.js +51 -0
- package/dist/cli/cloud-SILYJVKO.js +731 -0
- package/dist/cli/cockpit-RZKLGYPN.js +790 -0
- package/dist/cli/code-H2FQCVMW.js +178 -0
- package/dist/cli/complete-JLX7NBI4.js +35 -0
- package/dist/cli/complexity-OKV7PVZH.js +57 -0
- package/dist/cli/compliance-QMGZHJNQ.js +277 -0
- package/dist/cli/conduit-4H32UYEA.js +308 -0
- package/dist/cli/conduit-EY54WTZA.js +535 -0
- package/dist/cli/config-TDYOC7XO.js +519 -0
- package/dist/cli/consensus-4XCOFPPT.js +122 -0
- package/dist/cli/context-FN4YTGHD.js +142 -0
- package/dist/cli/contribution-7RWFBJLC.js +112 -0
- package/dist/cli/curator-HKZJCVRL.js +139 -0
- package/dist/cli/current-B2NU7V3G.js +43 -0
- package/dist/cli/daemon-GBD4TVCD.js +452 -0
- package/dist/cli/dash-IGDANIE5.js +71 -0
- package/dist/cli/decide-26SXC2V6.js +416 -0
- package/dist/cli/decompose-LQ76TEZG.js +78 -0
- package/dist/cli/decomposition-WFRWNUSJ.js +122 -0
- package/dist/cli/delete-T5DUQHOX.js +69 -0
- package/dist/cli/deps-UTPZJBXL.js +462 -0
- package/dist/cli/detect-FFZSMVDT.js +46 -0
- package/dist/cli/detect-drift-TVCJOFYJ.js +408 -0
- package/dist/cli/diagnostics-GN5CVD3N.js +93 -0
- package/dist/cli/diagnostics-ZNBKH6GX.js +133 -0
- package/dist/cli/docs-CLQKEEUK.js +1710 -0
- package/dist/cli/docs-DPPDFTWR.js +3098 -0
- package/dist/cli/doctor-GPENOP4N.js +1270 -0
- package/dist/cli/doctor-ac-bindings-S3IOEFP4.js +26 -0
- package/dist/cli/doctor-acceptance-drift-VNFKPBSQ.js +26 -0
- package/dist/cli/doctor-credentials-A5H4JMTF.js +26 -0
- package/dist/cli/doctor-db-substrate-FGCISE4Z.js +27 -0
- package/dist/cli/doctor-dep-cycles-BKKKHHYG.js +26 -0
- package/dist/cli/doctor-exodus-ND2DH2KP.js +26 -0
- package/dist/cli/doctor-exodus-residue-4EMRYMEQ.js +26 -0
- package/dist/cli/doctor-fk-check-VY3RIQV3.js +26 -0
- package/dist/cli/doctor-global-delivery-JN6IGHUL.js +26 -0
- package/dist/cli/doctor-heavy-command-hook-XSN44WXU.js +26 -0
- package/dist/cli/doctor-legacy-backups-QAG5NHYP.js +26 -0
- package/dist/cli/doctor-legacy-reaper-CIRGFE6R.js +26 -0
- package/dist/cli/doctor-malformed-ids-WL7HT4TB.js +26 -0
- package/dist/cli/doctor-manifest-rows-SMQCKJ2T.js +26 -0
- package/dist/cli/doctor-memory-guard-LJDOJG76.js +26 -0
- package/dist/cli/doctor-migrations-ETQPFNUP.js +26 -0
- package/dist/cli/doctor-nexus-residency-A4JMKBEJ.js +26 -0
- package/dist/cli/doctor-project-identity-FFQJ5LNX.js +26 -0
- package/dist/cli/doctor-projects-MFUTKRHP.js +30 -0
- package/dist/cli/doctor-projects-registry-76X6VTGM.js +26 -0
- package/dist/cli/doctor-release-readiness-QJCOPFTK.js +26 -0
- package/dist/cli/doctor-repair-AU76FIKY.js +26 -0
- package/dist/cli/doctor-row-identity-KW6JYZQE.js +26 -0
- package/dist/cli/doctor-skill-fixtures-G3T7JUHS.js +26 -0
- package/dist/cli/doctor-split-brain-FUW6L7FS.js +26 -0
- package/dist/cli/doctor-superseded-store-DUHGSBLC.js +26 -0
- package/dist/cli/doctor-sync-journal-SXMUIKF7.js +26 -0
- package/dist/cli/doctor-sync-triggers-6WNJZFRM.js +26 -0
- package/dist/cli/doctor-tool-locks-66LSLUBN.js +26 -0
- package/dist/cli/doctor-twin-collapse-AYBYBFC4.js +26 -0
- package/dist/cli/doctor-worktree-stores-C5XEH5OG.js +26 -0
- package/dist/cli/done-R64XRZ32.js +196 -0
- package/dist/cli/dynamic-RR4HB7BB.js +29 -0
- package/dist/cli/entities-3JIHDIOK.js +361 -0
- package/dist/cli/event-45KEWV5H.js +372 -0
- package/dist/cli/exists-BEDZS5RI.js +65 -0
- package/dist/cli/exodus-DUX62344.js +401 -0
- package/dist/cli/export-C5PQIQ5O.js +93 -0
- package/dist/cli/export-tasks-CUXDZPJB.js +97 -0
- package/dist/cli/federation-ESM35EGG.js +145 -0
- package/dist/cli/find-5EUZHHQJ.js +178 -0
- package/dist/cli/focus-6AH4KLRO.js +368 -0
- package/dist/cli/focus-ANKAIRO5.js +56 -0
- package/dist/cli/gateway-2GW2KTK3.js +77 -0
- package/dist/cli/gateway-auto-start-EDK7XI6E.js +36 -0
- package/dist/cli/gc-CTOQLUSA.js +291 -0
- package/dist/cli/go-YJPNHHYT.js +206 -0
- package/dist/cli/goal-4GW4G77D.js +213 -0
- package/dist/cli/grade-25WSZH4X.js +57 -0
- package/dist/cli/graph-JUO3TMF3.js +879 -0
- package/dist/cli/history-NACNUQTC.js +138 -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-7ESGL5SS.js +89 -0
- package/dist/cli/import-tasks-FLE2RPBR.js +109 -0
- package/dist/cli/index.js +601 -94637
- package/dist/cli/init-AN4DZ2XO.js +40 -0
- package/dist/cli/inject-HQWA5GWY.js +83 -0
- package/dist/cli/install-global-YQV4W5OG.js +95 -0
- package/dist/cli/intelligence-OFFNQGHE.js +238 -0
- package/dist/cli/intelligence-QIC4SN4X.js +182 -0
- package/dist/cli/issue-P5RNMRDG.js +159 -0
- package/dist/cli/janitor-ZNCFQ7E3.js +111 -0
- package/dist/cli/labels-ORBM3T57.js +88 -0
- package/dist/cli/lifecycle-MHR22TVI.js +273 -0
- package/dist/cli/list-LB6GCYYU.js +109 -0
- package/dist/cli/llm-H7LZWQKX.js +130 -0
- package/dist/cli/llm-OTJWPMGI.js +704 -0
- package/dist/cli/llm-cost-MLMXEAR4.js +25 -0
- package/dist/cli/llm-stream-AAEUNKRP.js +27 -0
- package/dist/cli/log-W2A5M2NA.js +76 -0
- package/dist/cli/login-SIXFFZSP.js +45 -0
- package/dist/cli/logout-G3KVLQQM.js +74 -0
- package/dist/cli/manifest-G4T6EBSI.js +354 -0
- package/dist/cli/map-VU5M72TK.js +53 -0
- package/dist/cli/memory-2E27G2G5.js +1952 -0
- package/dist/cli/memory-IAEYKXG6.js +1895 -0
- package/dist/cli/migrate-agents-v2-A52QIYNJ.js +33 -0
- package/dist/cli/migrate-claude-mem-TPDW3R4Z.js +206 -0
- package/dist/cli/next-SVH4LIDY.js +57 -0
- package/dist/cli/nexus-FPQV2EAF.js +1059 -0
- package/dist/cli/nexus-XSFXN5E6.js +2924 -0
- package/dist/cli/ops-K6LHY5J6.js +52 -0
- package/dist/cli/orchestrate-CZ2J6W3L.js +1650 -0
- package/dist/cli/orchestrate-HURUCQFT.js +950 -0
- package/dist/cli/otel-JCNPVJLZ.js +188 -0
- package/dist/cli/phase-VDFRASSO.js +221 -0
- package/dist/cli/pipeline-TCZPOEDR.js +697 -0
- package/dist/cli/pivot-V5MSQZ7L.js +88 -0
- package/dist/cli/plan-SQUGCKSM.js +49 -0
- package/dist/cli/playbook-L47GLDQD.js +230 -0
- package/dist/cli/playbook-NJVO4R6P.js +33 -0
- package/dist/cli/project-YZEC7GYF.js +331 -0
- package/dist/cli/promote-FINF4HVK.js +53 -0
- package/dist/cli/provenance-3TUWVBFR.js +141 -0
- package/dist/cli/provenance-YZG33JGM.js +129 -0
- package/dist/cli/provider-23JVLLG3.js +213 -0
- package/dist/cli/reason-FHN54O7O.js +138 -0
- package/dist/cli/reconcile-MOM5T4AX.js +128 -0
- package/dist/cli/refresh-memory-3OSTRAVK.js +45 -0
- package/dist/cli/relates-6FWUFUS2.js +260 -0
- package/dist/cli/release-G2DPSG5M.js +347 -0
- package/dist/cli/release-URX6JHZ2.js +525 -0
- package/dist/cli/remote-VIULU2T5.js +279 -0
- package/dist/cli/renderers-TGSW77J4.js +37 -0
- package/dist/cli/reorder-UIPN6TQY.js +87 -0
- package/dist/cli/reparent-ALOWWUIU.js +59 -0
- package/dist/cli/req-RH2Y3H7A.js +130 -0
- package/dist/cli/research-G2Y72HRC.js +366 -0
- package/dist/cli/restore-VBR5XNML.js +470 -0
- package/dist/cli/revert-32LDNSGP.js +240 -0
- package/dist/cli/roadmap-LFU3AG7D.js +62 -0
- package/dist/cli/run-HXRILSR7.js +245 -0
- package/dist/cli/safestop-Z5UC7NGQ.js +89 -0
- package/dist/cli/saga-Y6FZS6AM.js +286 -0
- package/dist/cli/schema-OOOKLWUE.js +195 -0
- package/dist/cli/self-update-26SOTJMH.js +504 -0
- package/dist/cli/selfimprove-4SMOCLUV.js +89 -0
- package/dist/cli/selfimprove-EB4RQLP4.js +139 -0
- package/dist/cli/sentient-QPETVE53.js +254 -0
- package/dist/cli/sentient-RGMWR4XJ.js +1088 -0
- package/dist/cli/sequence-H7DSAJPF.js +94 -0
- package/dist/cli/service-EK5MGB2D.js +156 -0
- package/dist/cli/service-GLOMZWPQ.js +437 -0
- package/dist/cli/session-HYUXAQGC.js +708 -0
- package/dist/cli/session-N5ISU56W.js +568 -0
- package/dist/cli/setup-L3YYV53D.js +323 -0
- package/dist/cli/show-364V3KY2.js +123 -0
- package/dist/cli/skill-F2KR6HW5.js +84 -0
- package/dist/cli/skills-FS3DCP6E.js +929 -0
- package/dist/cli/smoke-provider-SKUFMZXU.js +218 -0
- package/dist/cli/snapshot-EGXEQ5PR.js +120 -0
- package/dist/cli/src-LYLXHXHH.js +80 -0
- package/dist/cli/start-6DXOCCKL.js +68 -0
- package/dist/cli/stats-UVUQEGYC.js +96 -0
- package/dist/cli/status-XLKYLN42.js +157 -0
- package/dist/cli/sticky-VSTQ2I2O.js +264 -0
- package/dist/cli/sticky-XZXZDCFW.js +339 -0
- package/dist/cli/stop-VNOAFWNB.js +43 -0
- package/dist/cli/sync-YYPARW3A.js +155 -0
- package/dist/cli/tasks-C24KHTFF.js +1118 -0
- package/dist/cli/tasks-LBJC7CZV.js +175 -0
- package/dist/cli/telemetry-CU7W5WAY.js +120 -0
- package/dist/cli/templates-G42JBUY4.js +609 -0
- package/dist/cli/testing-HSRITHEY.js +147 -0
- package/dist/cli/token-J74E7TSU.js +221 -0
- package/dist/cli/tools-BI74W7VE.js +652 -0
- package/dist/cli/transcript-RGK7RSGQ.js +440 -0
- package/dist/cli/tui-BPUFHYKK.js +51 -0
- package/dist/cli/update-2KQWA27S.js +478 -0
- package/dist/cli/update-check-entry.js +124 -0
- package/dist/cli/update-notice-6SQ6WPQG.js +68 -0
- package/dist/cli/upgrade-E2MJAPC7.js +136 -0
- package/dist/cli/upgrade-XRSQ4RWH.js +243 -0
- package/dist/cli/verify-WASRGDBA.js +191 -0
- package/dist/cli/web-NJ3P67EU.js +275 -0
- package/dist/cli/workgraph-OHJ2VKJD.js +232 -0
- package/dist/cli/worktree-FVQLORFY.js +371 -0
- package/dist/cli/worktree-ZJ6JTQNG.js +287 -0
- package/package.json +13 -13
- package/studio-dist/client/_app/immutable/chunks/{DMj27Pxj.js → AH7dIemv.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/{Dc2owyvE.js → BDgH40i3.js} +1 -1
- package/studio-dist/client/_app/immutable/chunks/BXDCSJ7U.js +1 -0
- package/studio-dist/client/_app/immutable/chunks/{qq3pe1aT.js → Gg4iYl59.js} +1 -1
- package/studio-dist/client/_app/immutable/entry/{app.CHWXLeE9.js → app.DUDNK-37.js} +2 -2
- package/studio-dist/client/_app/immutable/entry/start.DNmZ0pA4.js +1 -0
- package/studio-dist/client/_app/immutable/nodes/{0.DmKQGvFh.js → 0.DWqP3ail.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{1.DqJk_REO.js → 1.CZGVUP5B.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{15.GUy6kdW1.js → 15.DGaflZRS.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{16.CcnKZ8f9.js → 16.uYlarGXl.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{17.DAlQF3lQ.js → 17.CZMR0E47.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{18.vQFr-vFj.js → 18.CBC-AKH_.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{20.GVOj5j_r.js → 20.BGi43MvQ.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{24.2-wC6DOh.js → 24.Dv8ftCyR.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/25.DQPVlTDQ.js +39 -0
- package/studio-dist/client/_app/immutable/nodes/{26.C3rNqzZF.js → 26.Cl800304.js} +1 -1
- package/studio-dist/client/_app/immutable/nodes/{3.b-7pzc3M.js → 3.D_fQKj9f.js} +1 -1
- package/studio-dist/client/_app/version.json +1 -1
- package/studio-dist/server/chunks/{0-BaCce-O1.js → 0-BpOagOst.js} +3 -3
- package/studio-dist/server/chunks/1-D0oRGR-C.js +9 -0
- package/studio-dist/server/chunks/{15-DRMOSIC9.js → 15-BcjHz7Tv.js} +3 -3
- package/studio-dist/server/chunks/{16-BulXhoZZ.js → 16-CXm8TUk7.js} +3 -3
- package/studio-dist/server/chunks/{17-DUEOCM0H.js → 17-mSgUK-cp.js} +3 -3
- package/studio-dist/server/chunks/{18-DP7Q8zPs.js → 18-BtfnIw1d.js} +3 -3
- package/studio-dist/server/chunks/{20-9ta6MI7q.js → 20-By1e4QDS.js} +3 -3
- package/studio-dist/server/chunks/{24-DysdL1ab.js → 24-0i2YLVxG.js} +3 -3
- package/studio-dist/server/chunks/{dist-CdoCt9zT.js → 25-DPsrqbrh.js} +797 -10736
- package/studio-dist/server/chunks/{26-Df4YXgg0.js → 26-P0XkOibm.js} +3 -3
- package/studio-dist/server/chunks/{3-BEhOhYpL.js → 3-WudjUK7e.js} +3 -3
- package/studio-dist/server/chunks/{_layout.svelte-CnLcXYG-.js → _layout.svelte-D9m81Rle.js} +4 -4
- package/studio-dist/server/chunks/{_page.svelte-DGhXqeRc.js → _page.svelte-2PDLOF83.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-Dv8tmDEC.js → _page.svelte-BjE3jm2K.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-C0qgUvzA.js → _page.svelte-Clc0vmiZ.js} +4 -4
- package/studio-dist/server/chunks/{_page.svelte-ui7LnWkL.js → _page.svelte-DABdRT3h.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-HUqTICJR.js → _page.svelte-DG3PjiHj.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-DzcZljiy.js → _page.svelte-Edy9CaE8.js} +20 -7
- package/studio-dist/server/chunks/{_page.svelte-DOl0DGOO.js → _page.svelte-Hrf3-ZR8.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-Da4q5l93.js → _page.svelte-VB4O4Nl5.js} +3 -3
- package/studio-dist/server/chunks/{_page.svelte-CbyEPj2j.js → _page.svelte-d3jEgjsI.js} +3 -3
- package/studio-dist/server/chunks/{_server.ts-P4wVVksg.js → _server.ts-BcRFsyo3.js} +4 -5
- package/studio-dist/server/chunks/{_server.ts-Cr57EKWf.js → _server.ts-CEWpIFrj.js} +6 -5
- package/studio-dist/server/chunks/{_server.ts-CnKVmf_s.js → _server.ts-CLVdVIF9.js} +2 -2
- package/studio-dist/server/chunks/{_server.ts-C0evMKCk.js → _server.ts-D_j7aSy5.js} +6 -5
- package/studio-dist/server/chunks/{_server.ts-2BazvYRP.js → _server.ts-QEZF8h2q.js} +4 -5
- package/studio-dist/server/chunks/{client-CPM4LrO2.js → client-Kp1dP1od.js} +2 -2
- package/studio-dist/server/chunks/{error.svelte-ShcZo43D.js → error.svelte-WOCioJVX.js} +3 -3
- package/studio-dist/server/chunks/{hooks.server-D2qbf3Zp.js → hooks.server-DH9zkIrJ.js} +3 -1
- package/studio-dist/server/chunks/{http-BiQjEmVU.js → http-DT5kxaWk.js} +5 -4
- package/studio-dist/server/chunks/{internal-Cgsrya1j.js → internal-z0vqd5_u.js} +3 -3
- package/studio-dist/server/chunks/operations-registry-DdzmYzqX.js +10584 -0
- package/studio-dist/server/chunks/{stores-BGrpEDMK.js → stores-s2kaL315.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/Bw6J8NDM.js +0 -1
- package/studio-dist/client/_app/immutable/entry/start.C9bwPpvc.js +0 -1
- package/studio-dist/client/_app/immutable/nodes/25.D1vYaH8g.js +0 -39
- package/studio-dist/server/chunks/1-CVo7Nk6d.js +0 -9
- package/studio-dist/server/chunks/25-CYsps38R.js +0 -366
|
@@ -0,0 +1,260 @@
|
|
|
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
|
+
negatedFlag
|
|
18
|
+
} from "./chunk-47JYZAMS.js";
|
|
19
|
+
import {
|
|
20
|
+
dispatchFromCli
|
|
21
|
+
} from "./chunk-L7ONYSV6.js";
|
|
22
|
+
import "./chunk-6N6WGLXE.js";
|
|
23
|
+
import "./chunk-4VASFLUW.js";
|
|
24
|
+
import {
|
|
25
|
+
defineCommand,
|
|
26
|
+
showUsage
|
|
27
|
+
} from "./chunk-PKKZPOOP.js";
|
|
28
|
+
import "./chunk-QKMBWYAS.js";
|
|
29
|
+
import "./chunk-4RGSNUUP.js";
|
|
30
|
+
import "./chunk-6JSJNYH2.js";
|
|
31
|
+
import "./chunk-D7BAQNV2.js";
|
|
32
|
+
import "./chunk-TYC7G5LF.js";
|
|
33
|
+
|
|
34
|
+
// packages/cleo/src/cli/commands/relates.ts
|
|
35
|
+
import { readFile } from "node:fs/promises";
|
|
36
|
+
var suggestCommand = defineCommand({
|
|
37
|
+
meta: { name: "suggest", description: "Suggest related tasks based on shared attributes" },
|
|
38
|
+
args: {
|
|
39
|
+
taskId: {
|
|
40
|
+
type: "positional",
|
|
41
|
+
description: "Task ID to find suggestions for",
|
|
42
|
+
required: true
|
|
43
|
+
},
|
|
44
|
+
threshold: {
|
|
45
|
+
type: "string",
|
|
46
|
+
description: "Minimum similarity threshold (0-100)",
|
|
47
|
+
default: "50"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
async run({ args }) {
|
|
51
|
+
await dispatchFromCli(
|
|
52
|
+
"query",
|
|
53
|
+
"tasks",
|
|
54
|
+
"relates",
|
|
55
|
+
{
|
|
56
|
+
taskId: args.taskId,
|
|
57
|
+
mode: "suggest",
|
|
58
|
+
threshold: Number(args.threshold)
|
|
59
|
+
},
|
|
60
|
+
{ command: "relates" }
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
var addCommand = defineCommand({
|
|
65
|
+
meta: {
|
|
66
|
+
name: "add",
|
|
67
|
+
description: "Add a relates entry to a task. Valid types: blocks|related|duplicates|absorbs|fixes|extends|supersedes"
|
|
68
|
+
},
|
|
69
|
+
args: {
|
|
70
|
+
from: {
|
|
71
|
+
type: "positional",
|
|
72
|
+
description: "Source task ID",
|
|
73
|
+
required: true
|
|
74
|
+
},
|
|
75
|
+
to: {
|
|
76
|
+
type: "positional",
|
|
77
|
+
description: "Target task ID",
|
|
78
|
+
required: true
|
|
79
|
+
},
|
|
80
|
+
type: {
|
|
81
|
+
type: "positional",
|
|
82
|
+
description: "Relationship type (blocks|related|duplicates|absorbs|fixes|extends|supersedes)",
|
|
83
|
+
required: true
|
|
84
|
+
},
|
|
85
|
+
reason: {
|
|
86
|
+
type: "positional",
|
|
87
|
+
description: "Reason for the relationship",
|
|
88
|
+
required: true
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
async run({ args }) {
|
|
92
|
+
await dispatchFromCli(
|
|
93
|
+
"mutate",
|
|
94
|
+
"tasks",
|
|
95
|
+
"relates.add",
|
|
96
|
+
{ taskId: args.from, relatedId: args.to, type: args.type, reason: args.reason },
|
|
97
|
+
{ command: "relates" }
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
var addBatchCommand = defineCommand({
|
|
102
|
+
meta: {
|
|
103
|
+
name: "add-batch",
|
|
104
|
+
description: "Add multiple advisory relation edges from JSON. Accepts {relations:[...]} or {edges:[...]}; use --dry-run to preview."
|
|
105
|
+
},
|
|
106
|
+
args: {
|
|
107
|
+
file: {
|
|
108
|
+
type: "string",
|
|
109
|
+
description: "JSON file path, or - for stdin",
|
|
110
|
+
required: true
|
|
111
|
+
},
|
|
112
|
+
dryRun: {
|
|
113
|
+
type: "boolean",
|
|
114
|
+
description: "Validate and print what would be created without writing",
|
|
115
|
+
required: false
|
|
116
|
+
},
|
|
117
|
+
reasonWaiver: {
|
|
118
|
+
type: "string",
|
|
119
|
+
description: "Explicit audit waiver text for edges without per-edge reasons",
|
|
120
|
+
required: false
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
async run({ args }) {
|
|
124
|
+
const input = args.file === "-" ? await new Promise((resolve, reject) => {
|
|
125
|
+
let data = "";
|
|
126
|
+
process.stdin.setEncoding("utf8");
|
|
127
|
+
process.stdin.on("data", (chunk) => {
|
|
128
|
+
data += chunk;
|
|
129
|
+
});
|
|
130
|
+
process.stdin.on("end", () => resolve(data));
|
|
131
|
+
process.stdin.on("error", reject);
|
|
132
|
+
}) : await readFile(args.file, "utf8");
|
|
133
|
+
const parsed = JSON.parse(input);
|
|
134
|
+
const payload = Array.isArray(parsed) ? { relations: parsed } : parsed;
|
|
135
|
+
await dispatchFromCli(
|
|
136
|
+
"mutate",
|
|
137
|
+
"tasks",
|
|
138
|
+
"relates.add-batch",
|
|
139
|
+
{ ...payload, dryRun: args.dryRun, reasonWaiver: args.reasonWaiver },
|
|
140
|
+
{ command: "relates" }
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
var discoverCommand = defineCommand({
|
|
145
|
+
meta: { name: "discover", description: "Discover related tasks using various methods" },
|
|
146
|
+
args: {
|
|
147
|
+
taskId: {
|
|
148
|
+
type: "positional",
|
|
149
|
+
description: "Task ID to discover relations for",
|
|
150
|
+
required: true
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
async run({ args }) {
|
|
154
|
+
await dispatchFromCli(
|
|
155
|
+
"query",
|
|
156
|
+
"tasks",
|
|
157
|
+
"relates",
|
|
158
|
+
{
|
|
159
|
+
taskId: args.taskId,
|
|
160
|
+
mode: "discover"
|
|
161
|
+
},
|
|
162
|
+
{ command: "relates" }
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
var removeCommand = defineCommand({
|
|
167
|
+
meta: {
|
|
168
|
+
name: "remove",
|
|
169
|
+
description: "Remove a relates entry between two tasks"
|
|
170
|
+
},
|
|
171
|
+
args: {
|
|
172
|
+
from: {
|
|
173
|
+
type: "positional",
|
|
174
|
+
description: "Source task ID",
|
|
175
|
+
required: true
|
|
176
|
+
},
|
|
177
|
+
to: {
|
|
178
|
+
type: "positional",
|
|
179
|
+
description: "Target task ID",
|
|
180
|
+
required: true
|
|
181
|
+
},
|
|
182
|
+
type: {
|
|
183
|
+
type: "string",
|
|
184
|
+
description: "Relation type to remove (omit to remove any type)",
|
|
185
|
+
required: false
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
async run({ args }) {
|
|
189
|
+
await dispatchFromCli(
|
|
190
|
+
"mutate",
|
|
191
|
+
"tasks",
|
|
192
|
+
"relates.remove",
|
|
193
|
+
{ taskId: args.from, relatedId: args.to, type: args.type },
|
|
194
|
+
{ command: "relates" }
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
var listCommand = defineCommand({
|
|
199
|
+
meta: { name: "list", description: "Show existing relates entries for a task" },
|
|
200
|
+
args: {
|
|
201
|
+
taskId: {
|
|
202
|
+
type: "positional",
|
|
203
|
+
description: "Task ID to list relations for",
|
|
204
|
+
required: true
|
|
205
|
+
},
|
|
206
|
+
type: {
|
|
207
|
+
type: "string",
|
|
208
|
+
description: "Filter by relation type (or depends/depends_on)",
|
|
209
|
+
required: false
|
|
210
|
+
},
|
|
211
|
+
direction: {
|
|
212
|
+
type: "string",
|
|
213
|
+
description: "Filter direction: out|in|both (default: both)",
|
|
214
|
+
default: "both",
|
|
215
|
+
required: false
|
|
216
|
+
},
|
|
217
|
+
noDepends: {
|
|
218
|
+
type: "boolean",
|
|
219
|
+
description: "Hide scheduler dependency edges from relation list output",
|
|
220
|
+
required: false
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
async run({ args }) {
|
|
224
|
+
await dispatchFromCli(
|
|
225
|
+
"query",
|
|
226
|
+
"tasks",
|
|
227
|
+
"relates",
|
|
228
|
+
{
|
|
229
|
+
taskId: args.taskId,
|
|
230
|
+
type: args.type,
|
|
231
|
+
direction: args.direction,
|
|
232
|
+
includeDependencies: !negatedFlag(args, "depends")
|
|
233
|
+
},
|
|
234
|
+
{ command: "relates" }
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
var relatesCommand = defineCommand({
|
|
239
|
+
meta: {
|
|
240
|
+
name: "relates",
|
|
241
|
+
description: "Semantic relationship discovery and management between tasks"
|
|
242
|
+
},
|
|
243
|
+
subCommands: {
|
|
244
|
+
suggest: suggestCommand,
|
|
245
|
+
add: addCommand,
|
|
246
|
+
"add-batch": addBatchCommand,
|
|
247
|
+
remove: removeCommand,
|
|
248
|
+
discover: discoverCommand,
|
|
249
|
+
list: listCommand
|
|
250
|
+
},
|
|
251
|
+
async run({ cmd, rawArgs }) {
|
|
252
|
+
const firstArg = rawArgs?.find((a) => !a.startsWith("-"));
|
|
253
|
+
if (firstArg && cmd.subCommands && firstArg in cmd.subCommands) return;
|
|
254
|
+
await showUsage(cmd);
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
export {
|
|
258
|
+
relatesCommand
|
|
259
|
+
};
|
|
260
|
+
//# sourceMappingURL=relates-6FWUFUS2.js.map
|
|
@@ -0,0 +1,347 @@
|
|
|
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
|
+
errorResult,
|
|
18
|
+
handleErrorResult,
|
|
19
|
+
unsupportedOp,
|
|
20
|
+
wrapResult
|
|
21
|
+
} from "./chunk-XHRZ7OYZ.js";
|
|
22
|
+
|
|
23
|
+
// packages/cleo/src/dispatch/domains/release.ts
|
|
24
|
+
import { getLogger, getProjectRoot, resolveWorktreeRouting } from "@cleocode/core/internal";
|
|
25
|
+
import {
|
|
26
|
+
releaseGateCheck,
|
|
27
|
+
releaseIvtrAutoSuggest,
|
|
28
|
+
releaseOpen,
|
|
29
|
+
releasePlan,
|
|
30
|
+
releaseReconcileV2,
|
|
31
|
+
validateChangelog
|
|
32
|
+
} from "@cleocode/runtime/gateway";
|
|
33
|
+
var log = getLogger("domain:release");
|
|
34
|
+
async function releaseGateOp(params) {
|
|
35
|
+
return releaseGateCheck(params.epicId, params.force ?? false, getProjectRoot());
|
|
36
|
+
}
|
|
37
|
+
async function releaseIvtrSuggestOp(params) {
|
|
38
|
+
return releaseIvtrAutoSuggest(params.taskId, getProjectRoot());
|
|
39
|
+
}
|
|
40
|
+
var coreOps = {
|
|
41
|
+
gate: releaseGateOp,
|
|
42
|
+
"ivtr-suggest": releaseIvtrSuggestOp
|
|
43
|
+
};
|
|
44
|
+
var ReleaseHandler = class {
|
|
45
|
+
// -----------------------------------------------------------------------
|
|
46
|
+
// query — read-only
|
|
47
|
+
// -----------------------------------------------------------------------
|
|
48
|
+
/**
|
|
49
|
+
* Handle read-only release queries.
|
|
50
|
+
*
|
|
51
|
+
* Supported operations:
|
|
52
|
+
* - `gate` — check IVTR phase state for all tasks in a release epic
|
|
53
|
+
* - `ivtr-suggest` — check if all epic tasks are released and suggest `cleo release plan` + `cleo release open`
|
|
54
|
+
*
|
|
55
|
+
* The legacy `verify` query (run gates + audit child tasks) was removed
|
|
56
|
+
* in T9540 — use `cleo verify <task> --gate X --evidence …` per
|
|
57
|
+
* SPEC-T9345 §12 R-422 / ADR-051.
|
|
58
|
+
*/
|
|
59
|
+
async query(operation, params) {
|
|
60
|
+
const startTime = Date.now();
|
|
61
|
+
try {
|
|
62
|
+
switch (operation) {
|
|
63
|
+
// release.gate — IVTR gate check (RELEASE-03)
|
|
64
|
+
case "gate": {
|
|
65
|
+
const epicId = typeof params?.epicId === "string" ? params.epicId : void 0;
|
|
66
|
+
if (!epicId)
|
|
67
|
+
return errorResult(
|
|
68
|
+
"query",
|
|
69
|
+
"release",
|
|
70
|
+
operation,
|
|
71
|
+
"E_INVALID_INPUT",
|
|
72
|
+
"epicId is required",
|
|
73
|
+
startTime
|
|
74
|
+
);
|
|
75
|
+
const force = typeof params?.force === "boolean" ? params.force : false;
|
|
76
|
+
const typed = { epicId, force };
|
|
77
|
+
return wrapResult(await coreOps.gate(typed), "query", "release", operation, startTime);
|
|
78
|
+
}
|
|
79
|
+
// release.ivtr-suggest — IVTR auto-suggest (RELEASE-07)
|
|
80
|
+
case "ivtr-suggest": {
|
|
81
|
+
const taskId = typeof params?.taskId === "string" ? params.taskId : void 0;
|
|
82
|
+
if (!taskId)
|
|
83
|
+
return errorResult(
|
|
84
|
+
"query",
|
|
85
|
+
"release",
|
|
86
|
+
operation,
|
|
87
|
+
"E_INVALID_INPUT",
|
|
88
|
+
"taskId is required",
|
|
89
|
+
startTime
|
|
90
|
+
);
|
|
91
|
+
const typed = { taskId };
|
|
92
|
+
return wrapResult(
|
|
93
|
+
await coreOps["ivtr-suggest"](typed),
|
|
94
|
+
"query",
|
|
95
|
+
"release",
|
|
96
|
+
operation,
|
|
97
|
+
startTime
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
// release.validate-changelog — canonical CHANGELOG.md header validator
|
|
101
|
+
// (T9937 / Saga T9862). Replaces the brittle `grep -qF "## [VERSION]"`
|
|
102
|
+
// step in .github/workflows/release.yml. Read-only.
|
|
103
|
+
//
|
|
104
|
+
// The core verb returns a plain `ValidateChangelogResult` envelope
|
|
105
|
+
// (NOT an EngineResult discriminated union) so direct SDK consumers
|
|
106
|
+
// can branch on `result.valid`. At the dispatch boundary we translate
|
|
107
|
+
// `valid=false` into `E_CHANGELOG_MISSING_SECTION` so the CLI emits a
|
|
108
|
+
// non-zero exit code — exactly the behaviour CI workflows depend on
|
|
109
|
+
// (the legacy `grep -qF "## [VERSION]" || exit 1` had the same
|
|
110
|
+
// contract).
|
|
111
|
+
case "validate-changelog": {
|
|
112
|
+
const version = typeof params?.version === "string" ? params.version : void 0;
|
|
113
|
+
if (!version)
|
|
114
|
+
return errorResult(
|
|
115
|
+
"query",
|
|
116
|
+
"release",
|
|
117
|
+
operation,
|
|
118
|
+
"E_INVALID_INPUT",
|
|
119
|
+
"version is required",
|
|
120
|
+
startTime
|
|
121
|
+
);
|
|
122
|
+
const typed = {
|
|
123
|
+
version,
|
|
124
|
+
projectRoot: getProjectRoot(),
|
|
125
|
+
...typeof params?.changelogPath === "string" ? { changelogPath: params.changelogPath } : {}
|
|
126
|
+
};
|
|
127
|
+
const validation = await validateChangelog(typed);
|
|
128
|
+
if (validation.valid) {
|
|
129
|
+
return wrapResult(
|
|
130
|
+
{ success: true, data: validation },
|
|
131
|
+
"query",
|
|
132
|
+
"release",
|
|
133
|
+
operation,
|
|
134
|
+
startTime
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
return wrapResult(
|
|
138
|
+
{
|
|
139
|
+
success: false,
|
|
140
|
+
error: {
|
|
141
|
+
code: "E_CHANGELOG_MISSING_SECTION",
|
|
142
|
+
message: validation.reason ?? `CHANGELOG.md missing canonical header for v${validation.normalizedVersion}`,
|
|
143
|
+
details: {
|
|
144
|
+
version: validation.version,
|
|
145
|
+
normalizedVersion: validation.normalizedVersion,
|
|
146
|
+
changelogPath: validation.changelogPath,
|
|
147
|
+
headerFound: validation.headerFound
|
|
148
|
+
},
|
|
149
|
+
fix: `Run \`cleo release plan v${validation.normalizedVersion}\` locally to write the section, then re-push.`,
|
|
150
|
+
exitCode: 1
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
"query",
|
|
154
|
+
"release",
|
|
155
|
+
operation,
|
|
156
|
+
startTime
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
default:
|
|
160
|
+
return unsupportedOp("query", "release", operation, startTime);
|
|
161
|
+
}
|
|
162
|
+
} catch (err) {
|
|
163
|
+
log.error({ err, operation }, "ReleaseHandler query error");
|
|
164
|
+
return handleErrorResult("query", "release", operation, err, startTime);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// -----------------------------------------------------------------------
|
|
168
|
+
// mutate — state-modifying
|
|
169
|
+
// -----------------------------------------------------------------------
|
|
170
|
+
/**
|
|
171
|
+
* Handle state-modifying release mutations.
|
|
172
|
+
*
|
|
173
|
+
* Note: `release.gate` and `release.ivtr-suggest` do not write any state.
|
|
174
|
+
* They are exposed in the `mutate` gateway to allow automated pipelines
|
|
175
|
+
* (e.g. playbook action blocks) to call them without changing gateway.
|
|
176
|
+
*
|
|
177
|
+
* Supported operations:
|
|
178
|
+
* - `gate` — same IVTR gate check as query.gate (no DB writes)
|
|
179
|
+
* - `ivtr-suggest` — same auto-suggest as query.ivtr-suggest (no DB writes)
|
|
180
|
+
* - `plan` — SPEC-T9345 §4.2 (T9525): build canonical Release Plan envelope
|
|
181
|
+
* - `open` — SPEC-T9345 §4.3 (T9530): dispatch release-prepare workflow
|
|
182
|
+
* - `reconcile` — SPEC-T9345 §4.4 (T9526 v2): backfill 11 provenance tables
|
|
183
|
+
*
|
|
184
|
+
* The legacy `start` / `publish` mutations (and the legacy v1
|
|
185
|
+
* `reconcile`) were removed in T9540 — their backing functions in
|
|
186
|
+
* `packages/core/src/release/pipeline.ts` were deleted as part of
|
|
187
|
+
* Phase 6 of T9499.
|
|
188
|
+
*/
|
|
189
|
+
async mutate(operation, params) {
|
|
190
|
+
const startTime = Date.now();
|
|
191
|
+
try {
|
|
192
|
+
switch (operation) {
|
|
193
|
+
// release.gate — IVTR gate check (RELEASE-03, no DB writes)
|
|
194
|
+
case "gate": {
|
|
195
|
+
const epicId = typeof params?.epicId === "string" ? params.epicId : void 0;
|
|
196
|
+
if (!epicId)
|
|
197
|
+
return errorResult(
|
|
198
|
+
"mutate",
|
|
199
|
+
"release",
|
|
200
|
+
operation,
|
|
201
|
+
"E_INVALID_INPUT",
|
|
202
|
+
"epicId is required",
|
|
203
|
+
startTime
|
|
204
|
+
);
|
|
205
|
+
const force = typeof params?.force === "boolean" ? params.force : false;
|
|
206
|
+
const typed = { epicId, force };
|
|
207
|
+
return wrapResult(await coreOps.gate(typed), "mutate", "release", operation, startTime);
|
|
208
|
+
}
|
|
209
|
+
// release.ivtr-suggest — IVTR auto-suggest (RELEASE-07, no DB writes)
|
|
210
|
+
case "ivtr-suggest": {
|
|
211
|
+
const taskId = typeof params?.taskId === "string" ? params.taskId : void 0;
|
|
212
|
+
if (!taskId)
|
|
213
|
+
return errorResult(
|
|
214
|
+
"mutate",
|
|
215
|
+
"release",
|
|
216
|
+
operation,
|
|
217
|
+
"E_INVALID_INPUT",
|
|
218
|
+
"taskId is required",
|
|
219
|
+
startTime
|
|
220
|
+
);
|
|
221
|
+
const typed = { taskId };
|
|
222
|
+
return wrapResult(
|
|
223
|
+
await coreOps["ivtr-suggest"](typed),
|
|
224
|
+
"mutate",
|
|
225
|
+
"release",
|
|
226
|
+
operation,
|
|
227
|
+
startTime
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
// release.plan — SPEC-T9345 §4.2 (T9525): build canonical Release Plan envelope
|
|
231
|
+
// T9838/T10088: --saga/--tasks and --no-changelog flags forwarded; epicId no longer
|
|
232
|
+
// required at the dispatch layer — the core verb validates that
|
|
233
|
+
// exactly one scope selector is set.
|
|
234
|
+
case "plan": {
|
|
235
|
+
const version = typeof params?.version === "string" ? params.version : void 0;
|
|
236
|
+
const epicId = typeof params?.epicId === "string" ? params.epicId : void 0;
|
|
237
|
+
const sagaId = typeof params?.sagaId === "string" ? params.sagaId : void 0;
|
|
238
|
+
const taskIds = Array.isArray(params?.taskIds) ? params.taskIds.filter((id) => typeof id === "string" && id.length > 0) : void 0;
|
|
239
|
+
if (!version) {
|
|
240
|
+
return errorResult(
|
|
241
|
+
"mutate",
|
|
242
|
+
"release",
|
|
243
|
+
operation,
|
|
244
|
+
"E_INVALID_INPUT",
|
|
245
|
+
"version is required",
|
|
246
|
+
startTime
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
if (!epicId && !sagaId && !taskIds?.length) {
|
|
250
|
+
return errorResult(
|
|
251
|
+
"mutate",
|
|
252
|
+
"release",
|
|
253
|
+
operation,
|
|
254
|
+
"E_INVALID_INPUT",
|
|
255
|
+
"--saga, --epic, or --tasks is required",
|
|
256
|
+
startTime
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
const typed = {
|
|
260
|
+
version,
|
|
261
|
+
...epicId ? { epicId } : {},
|
|
262
|
+
...sagaId ? { sagaId } : {},
|
|
263
|
+
...taskIds?.length ? { taskIds } : {},
|
|
264
|
+
scheme: typeof params?.scheme === "string" ? params.scheme : void 0,
|
|
265
|
+
channel: typeof params?.channel === "string" ? params.channel : void 0,
|
|
266
|
+
hotfix: typeof params?.hotfix === "boolean" ? params.hotfix : false,
|
|
267
|
+
dryRun: typeof params?.dryRun === "boolean" ? params.dryRun : false,
|
|
268
|
+
writeChangelog: typeof params?.writeChangelog === "boolean" ? params.writeChangelog : true,
|
|
269
|
+
// T10079: release plan side effects are project-level. When invoked
|
|
270
|
+
// from an XDG secondary worktree/subdir, route .changeset/,
|
|
271
|
+
// CHANGELOG.md, and plan.json writes to the primary worktree.
|
|
272
|
+
projectRoot: resolveWorktreeRouting().canonicalRoot
|
|
273
|
+
};
|
|
274
|
+
return wrapResult(await releasePlan(typed), "mutate", "release", operation, startTime);
|
|
275
|
+
}
|
|
276
|
+
// release.open — SPEC-T9345 §4.3 (T9530): dispatch release-prepare workflow
|
|
277
|
+
case "open": {
|
|
278
|
+
const version = typeof params?.version === "string" ? params.version : void 0;
|
|
279
|
+
if (!version) {
|
|
280
|
+
return errorResult(
|
|
281
|
+
"mutate",
|
|
282
|
+
"release",
|
|
283
|
+
operation,
|
|
284
|
+
"E_INVALID_INPUT",
|
|
285
|
+
"version is required",
|
|
286
|
+
startTime
|
|
287
|
+
);
|
|
288
|
+
}
|
|
289
|
+
const typed = {
|
|
290
|
+
version,
|
|
291
|
+
workflow: typeof params?.workflow === "string" ? params.workflow : void 0,
|
|
292
|
+
watch: typeof params?.watch === "boolean" ? params.watch : false,
|
|
293
|
+
commitPlan: typeof params?.commitPlan === "boolean" ? params.commitPlan : false,
|
|
294
|
+
// T12089: forward the plan scope. This mapping is explicit, so a
|
|
295
|
+
// param the CLI accepts but this block omits is silently dropped —
|
|
296
|
+
// `--tasks` reached the CLI, never reached `releaseOpen`, and the
|
|
297
|
+
// dispatched workflow then had no scope to plan with. Adding an
|
|
298
|
+
// option in core + the CLI is not enough; the dispatch layer is a
|
|
299
|
+
// second chokepoint that must carry it too.
|
|
300
|
+
epic: typeof params?.epic === "string" ? params.epic : void 0,
|
|
301
|
+
tasks: typeof params?.tasks === "string" ? params.tasks : void 0,
|
|
302
|
+
projectRoot: getProjectRoot()
|
|
303
|
+
};
|
|
304
|
+
return wrapResult(await releaseOpen(typed), "mutate", "release", operation, startTime);
|
|
305
|
+
}
|
|
306
|
+
// release.reconcile — v2 reconcile verb (T9526 / SPEC-T9345 §4.4)
|
|
307
|
+
case "reconcile": {
|
|
308
|
+
const version = typeof params?.version === "string" ? params.version : void 0;
|
|
309
|
+
if (!version)
|
|
310
|
+
return errorResult(
|
|
311
|
+
"mutate",
|
|
312
|
+
"release",
|
|
313
|
+
operation,
|
|
314
|
+
"E_INVALID_INPUT",
|
|
315
|
+
"version is required",
|
|
316
|
+
startTime
|
|
317
|
+
);
|
|
318
|
+
const result = await releaseReconcileV2(version, {
|
|
319
|
+
projectRoot: getProjectRoot(),
|
|
320
|
+
fromWorkflow: typeof params?.fromWorkflow === "boolean" ? params.fromWorkflow : false,
|
|
321
|
+
rollback: typeof params?.rollback === "boolean" ? params.rollback : false
|
|
322
|
+
});
|
|
323
|
+
return wrapResult(result, "mutate", "release", operation, startTime);
|
|
324
|
+
}
|
|
325
|
+
default:
|
|
326
|
+
return unsupportedOp("mutate", "release", operation, startTime);
|
|
327
|
+
}
|
|
328
|
+
} catch (err) {
|
|
329
|
+
log.error({ err, operation }, "ReleaseHandler mutate error");
|
|
330
|
+
return handleErrorResult("mutate", "release", operation, err, startTime);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
// -----------------------------------------------------------------------
|
|
334
|
+
// getSupportedOperations
|
|
335
|
+
// -----------------------------------------------------------------------
|
|
336
|
+
/** Return declared operations for introspection and registry validation. */
|
|
337
|
+
getSupportedOperations() {
|
|
338
|
+
return {
|
|
339
|
+
query: ["gate", "ivtr-suggest", "validate-changelog"],
|
|
340
|
+
mutate: ["gate", "ivtr-suggest", "reconcile", "plan", "open"]
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
export {
|
|
345
|
+
ReleaseHandler
|
|
346
|
+
};
|
|
347
|
+
//# sourceMappingURL=release-G2DPSG5M.js.map
|