@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,145 @@
|
|
|
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
|
+
cliError,
|
|
22
|
+
cliOutput,
|
|
23
|
+
humanLine
|
|
24
|
+
} from "./chunk-4RGSNUUP.js";
|
|
25
|
+
import "./chunk-6JSJNYH2.js";
|
|
26
|
+
|
|
27
|
+
// packages/cleo/src/cli/commands/federation.ts
|
|
28
|
+
import { ExitCode } from "@cleocode/contracts/exit-codes.js";
|
|
29
|
+
import { skills } from "@cleocode/core";
|
|
30
|
+
var { addFederationPeer, listFederationPeers, removeFederationPeer } = skills;
|
|
31
|
+
var addCommand = defineCommand({
|
|
32
|
+
meta: {
|
|
33
|
+
name: "add",
|
|
34
|
+
description: "Add (or update) a federation peer in ~/.cleo/federation.json"
|
|
35
|
+
},
|
|
36
|
+
args: {
|
|
37
|
+
url: {
|
|
38
|
+
type: "positional",
|
|
39
|
+
description: "Peer URL (must use http:// or https://)",
|
|
40
|
+
required: true
|
|
41
|
+
},
|
|
42
|
+
trust: {
|
|
43
|
+
type: "string",
|
|
44
|
+
description: "Trust level: verified | unverified | blocked (default: unverified)",
|
|
45
|
+
default: "unverified"
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
async run({ args }) {
|
|
49
|
+
try {
|
|
50
|
+
const trust = String(args.trust);
|
|
51
|
+
const result = addFederationPeer(String(args.url), trust);
|
|
52
|
+
cliOutput(
|
|
53
|
+
{
|
|
54
|
+
entry: result.entry,
|
|
55
|
+
updated: result.updated
|
|
56
|
+
},
|
|
57
|
+
{ command: "federation add", operation: "federation.add" }
|
|
58
|
+
);
|
|
59
|
+
} catch (err) {
|
|
60
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
61
|
+
cliError(`federation add failed: ${message}`, ExitCode.VALIDATION_ERROR);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
var removeCommand = defineCommand({
|
|
66
|
+
meta: {
|
|
67
|
+
name: "remove",
|
|
68
|
+
description: "Remove a federation peer from ~/.cleo/federation.json"
|
|
69
|
+
},
|
|
70
|
+
args: {
|
|
71
|
+
url: {
|
|
72
|
+
type: "positional",
|
|
73
|
+
description: "Peer URL to remove (normalised before lookup)",
|
|
74
|
+
required: true
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
async run({ args }) {
|
|
78
|
+
try {
|
|
79
|
+
const removed = removeFederationPeer(String(args.url));
|
|
80
|
+
cliOutput(
|
|
81
|
+
{ url: String(args.url), removed },
|
|
82
|
+
{ command: "federation remove", operation: "federation.remove" }
|
|
83
|
+
);
|
|
84
|
+
} catch (err) {
|
|
85
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
86
|
+
cliError(`federation remove failed: ${message}`, ExitCode.VALIDATION_ERROR);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
var listCommand = defineCommand({
|
|
91
|
+
meta: {
|
|
92
|
+
name: "list",
|
|
93
|
+
description: "List all federation peers in ~/.cleo/federation.json"
|
|
94
|
+
},
|
|
95
|
+
args: {
|
|
96
|
+
json: {
|
|
97
|
+
type: "boolean",
|
|
98
|
+
description: "Emit raw JSON envelope instead of human-readable list",
|
|
99
|
+
default: false
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
async run({ args }) {
|
|
103
|
+
try {
|
|
104
|
+
const entries = listFederationPeers();
|
|
105
|
+
if (args.json) {
|
|
106
|
+
cliOutput(
|
|
107
|
+
{ count: entries.length, entries },
|
|
108
|
+
{ command: "federation list", operation: "federation.list" }
|
|
109
|
+
);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
if (entries.length === 0) {
|
|
113
|
+
humanLine("(no federation peers configured)");
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
for (const entry of entries) {
|
|
117
|
+
humanLine(`${entry.trust.padEnd(11)} ${entry.url} (added ${entry.addedAt})`);
|
|
118
|
+
}
|
|
119
|
+
} catch (err) {
|
|
120
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
121
|
+
cliError(`federation list failed: ${message}`, ExitCode.GENERAL_ERROR);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
var federationCommand = defineCommand({
|
|
126
|
+
meta: {
|
|
127
|
+
name: "federation",
|
|
128
|
+
description: "Federation peer management: add, remove, list trusted peers"
|
|
129
|
+
},
|
|
130
|
+
subCommands: {
|
|
131
|
+
add: addCommand,
|
|
132
|
+
remove: removeCommand,
|
|
133
|
+
list: listCommand
|
|
134
|
+
},
|
|
135
|
+
run({ rawArgs }) {
|
|
136
|
+
const sub = rawArgs?.find((a) => !a.startsWith("-"));
|
|
137
|
+
if (!sub) {
|
|
138
|
+
showUsage(federationCommand);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
export {
|
|
143
|
+
federationCommand
|
|
144
|
+
};
|
|
145
|
+
//# sourceMappingURL=federation-ESM35EGG.js.map
|
|
@@ -0,0 +1,178 @@
|
|
|
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
|
+
dispatchRaw,
|
|
18
|
+
handleRawError,
|
|
19
|
+
maybeEmitDescribe
|
|
20
|
+
} from "./chunk-L7ONYSV6.js";
|
|
21
|
+
import "./chunk-6N6WGLXE.js";
|
|
22
|
+
import "./chunk-4VASFLUW.js";
|
|
23
|
+
import {
|
|
24
|
+
defineCommand
|
|
25
|
+
} from "./chunk-PKKZPOOP.js";
|
|
26
|
+
import "./chunk-QKMBWYAS.js";
|
|
27
|
+
import {
|
|
28
|
+
cliOutput
|
|
29
|
+
} from "./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/find.ts
|
|
35
|
+
import { ExitCode } from "@cleocode/contracts/exit-codes.js";
|
|
36
|
+
import { createPage } from "@cleocode/core/pagination";
|
|
37
|
+
var findCommand = defineCommand({
|
|
38
|
+
meta: { name: "find", description: "Lexical task search; fuzzy matching requires --fuzzy" },
|
|
39
|
+
args: {
|
|
40
|
+
query: {
|
|
41
|
+
type: "positional",
|
|
42
|
+
description: "Search text (required unless --id is provided)",
|
|
43
|
+
required: false
|
|
44
|
+
},
|
|
45
|
+
id: { type: "string", description: "Search by ID prefix" },
|
|
46
|
+
exact: { type: "boolean", description: "Exact title match" },
|
|
47
|
+
fuzzy: {
|
|
48
|
+
type: "boolean",
|
|
49
|
+
description: "Opt into character-subsequence matches; each result explains its matching fields"
|
|
50
|
+
},
|
|
51
|
+
status: {
|
|
52
|
+
type: "string",
|
|
53
|
+
description: "Filter by status (pending|active|blocked|done|cancelled)"
|
|
54
|
+
},
|
|
55
|
+
in: { type: "string", description: "Field to search in (title|description|notes|id)" },
|
|
56
|
+
"include-archive": { type: "boolean", description: "Include archived tasks" },
|
|
57
|
+
limit: {
|
|
58
|
+
type: "string",
|
|
59
|
+
description: "Max results (default: 20; --limit 0 returns every match)"
|
|
60
|
+
},
|
|
61
|
+
// GH #1302 — parity with `cleo list --all`. `find` truncated at 20 with no
|
|
62
|
+
// way to enumerate: no such flag existed, and `--limit 0` returned zero
|
|
63
|
+
// rows rather than everything. The truncation warning could therefore name
|
|
64
|
+
// a remedy this command did not have.
|
|
65
|
+
all: {
|
|
66
|
+
type: "boolean",
|
|
67
|
+
description: "Return EVERY matching task instead of the default page of 20."
|
|
68
|
+
},
|
|
69
|
+
offset: { type: "string", description: "Skip first N results" },
|
|
70
|
+
fields: { type: "string", description: "Comma-separated additional fields to include" },
|
|
71
|
+
verbose: {
|
|
72
|
+
type: "boolean",
|
|
73
|
+
description: "Return full task records instead of the MVI projection (id + title + status + key metadata). T9922.",
|
|
74
|
+
alias: "v"
|
|
75
|
+
},
|
|
76
|
+
// T9922 — MVI record projection opt-out alias (surfaced for --help).
|
|
77
|
+
full: {
|
|
78
|
+
type: "boolean",
|
|
79
|
+
description: "Alias for --verbose. T9922."
|
|
80
|
+
},
|
|
81
|
+
/**
|
|
82
|
+
* Filter by task kind axis (T944/T9072).
|
|
83
|
+
* Values: work | research | experiment | bug | spike | release
|
|
84
|
+
*/
|
|
85
|
+
kind: {
|
|
86
|
+
type: "string",
|
|
87
|
+
description: "Filter by kind axis (work|research|experiment|bug|spike|release) \u2014 T944"
|
|
88
|
+
},
|
|
89
|
+
/**
|
|
90
|
+
* Unified urgency surface (T9905).
|
|
91
|
+
*
|
|
92
|
+
* Selects tasks where
|
|
93
|
+
* priority IN ('critical','high') OR severity IN ('P0','P1')
|
|
94
|
+
*
|
|
95
|
+
* Combines the two orthogonal urgency axes (priority + severity) into a
|
|
96
|
+
* single filter so agents don't have to query each axis separately.
|
|
97
|
+
*/
|
|
98
|
+
urgent: {
|
|
99
|
+
type: "boolean",
|
|
100
|
+
description: "Surface urgent work across both axes: priority IN (critical,high) OR severity IN (P0,P1) (T9905)",
|
|
101
|
+
alias: "u"
|
|
102
|
+
},
|
|
103
|
+
/**
|
|
104
|
+
* Filter by label — `cleo find --label <name>` returns every task
|
|
105
|
+
* whose `labels[]` includes the given value. Closes GH#393 and gives
|
|
106
|
+
* `find` parity with the positional `cleo labels <name>` surface.
|
|
107
|
+
* @task T9904
|
|
108
|
+
*/
|
|
109
|
+
label: {
|
|
110
|
+
type: "string",
|
|
111
|
+
description: "Filter by label \u2014 return tasks whose labels[] includes this value (T9904)"
|
|
112
|
+
},
|
|
113
|
+
/**
|
|
114
|
+
* Filter by parent task ID — `cleo find --parent <id>` returns only
|
|
115
|
+
* tasks whose `parentId` matches. Mirrors the `--parent` axis on
|
|
116
|
+
* `cleo list`. When the parent target is a Saga (Epic with
|
|
117
|
+
* `label='saga'`), routing goes through `task_relations.type='groups'`
|
|
118
|
+
* member IDs (ADR-073 §1) — same path as `cleo list --parent`.
|
|
119
|
+
*
|
|
120
|
+
* Closes T10108 — pre-fix the flag was missing entirely AND empty-string
|
|
121
|
+
* queries bypassed every filter via `fuzzyScore('', '<title>')===80`.
|
|
122
|
+
*
|
|
123
|
+
* @task T10108
|
|
124
|
+
* @saga T9862
|
|
125
|
+
*/
|
|
126
|
+
parent: {
|
|
127
|
+
type: "string",
|
|
128
|
+
description: "Filter by direct parentId containment, including saga children"
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
async run({ args }) {
|
|
132
|
+
if (maybeEmitDescribe("query", "tasks", "find", { command: "find" })) return;
|
|
133
|
+
let limit = args.limit !== void 0 ? Number(args.limit) : void 0;
|
|
134
|
+
if (args.all === true) limit = 0;
|
|
135
|
+
const offset = args.offset !== void 0 ? Number(args.offset) : void 0;
|
|
136
|
+
const params = {};
|
|
137
|
+
if (args.query !== void 0) params["query"] = args.query;
|
|
138
|
+
if (args.id !== void 0) params["id"] = args.id;
|
|
139
|
+
if (args.exact !== void 0) params["exact"] = args.exact;
|
|
140
|
+
if (args.fuzzy !== void 0) params["fuzzy"] = args.fuzzy;
|
|
141
|
+
if (args.status !== void 0) params["status"] = args.status;
|
|
142
|
+
if (args.in !== void 0) params["field"] = args.in;
|
|
143
|
+
if (args["include-archive"] !== void 0) params["includeArchive"] = args["include-archive"];
|
|
144
|
+
if (limit !== void 0) params["limit"] = limit;
|
|
145
|
+
if (offset !== void 0) params["offset"] = offset;
|
|
146
|
+
if (args.fields !== void 0) params["fields"] = args.fields;
|
|
147
|
+
if (args.verbose !== void 0) params["verbose"] = args.verbose;
|
|
148
|
+
if (args.kind !== void 0) params["kind"] = args.kind;
|
|
149
|
+
if (args.urgent !== void 0) params["urgent"] = args.urgent;
|
|
150
|
+
if (args.label !== void 0) params["label"] = args.label;
|
|
151
|
+
if (args.parent !== void 0) params["parent"] = args.parent;
|
|
152
|
+
const response = await dispatchRaw("query", "tasks", "find", params);
|
|
153
|
+
if (!response.success) {
|
|
154
|
+
handleRawError(response, { command: "find", operation: "tasks.find" });
|
|
155
|
+
}
|
|
156
|
+
const rawData = response.data;
|
|
157
|
+
const data = (Array.isArray(rawData) ? { results: rawData, total: rawData.length } : rawData) ?? {};
|
|
158
|
+
const results = Array.isArray(data?.results) ? data.results : [];
|
|
159
|
+
if (results.length === 0) {
|
|
160
|
+
const matched = typeof data?.["total"] === "number" ? data["total"] : 0;
|
|
161
|
+
const message = matched > 0 ? `No results on this page \u2014 ${matched} task(s) matched. Re-run with --all to enumerate every match, or adjust --limit/--offset.` : "No matching tasks found";
|
|
162
|
+
cliOutput(data, { command: "find", message, operation: "tasks.find" });
|
|
163
|
+
process.exit(ExitCode.NO_DATA);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const total = data?.total ?? results.length;
|
|
167
|
+
const page = response.page ?? (limit === 0 && !offset ? { mode: "none" } : createPage({
|
|
168
|
+
total,
|
|
169
|
+
limit: limit === 0 ? Math.max(1, results.length) : limit ?? 20,
|
|
170
|
+
offset
|
|
171
|
+
}));
|
|
172
|
+
cliOutput(data, { command: "find", operation: "tasks.find", page, enumerateAllFlag: "--all" });
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
export {
|
|
176
|
+
findCommand
|
|
177
|
+
};
|
|
178
|
+
//# sourceMappingURL=find-5EUZHHQJ.js.map
|
|
@@ -0,0 +1,368 @@
|
|
|
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
|
+
lafsSuccess
|
|
18
|
+
} from "./chunk-QWNKLLLG.js";
|
|
19
|
+
import {
|
|
20
|
+
dispatchMeta,
|
|
21
|
+
handleErrorResult,
|
|
22
|
+
unsupportedOp
|
|
23
|
+
} from "./chunk-XHRZ7OYZ.js";
|
|
24
|
+
|
|
25
|
+
// packages/cleo/src/dispatch/domains/focus.ts
|
|
26
|
+
import { execSync } from "node:child_process";
|
|
27
|
+
import { runKnowledgeDoctor } from "@cleocode/core/doctor/knowledge";
|
|
28
|
+
import {
|
|
29
|
+
compactKnowledgeCoverage,
|
|
30
|
+
compactKnowledgeHealth
|
|
31
|
+
} from "@cleocode/core/doctor/knowledge-summary";
|
|
32
|
+
import { buildAttentionDigest } from "@cleocode/core/memory/attention";
|
|
33
|
+
import { memoryFind } from "@cleocode/core/memory/engine-compat";
|
|
34
|
+
import { orchestrateReady } from "@cleocode/core/orchestrate/query-ops";
|
|
35
|
+
import { getProjectRoot } from "@cleocode/core/project-scope";
|
|
36
|
+
import { isSagaType } from "@cleocode/core/sagas/is-saga-type";
|
|
37
|
+
import { createAttachmentStore } from "@cleocode/core/store/attachment-store";
|
|
38
|
+
import { taskRelates } from "@cleocode/core/tasks/engine-wrap";
|
|
39
|
+
import { taskShow } from "@cleocode/core/tasks/show";
|
|
40
|
+
function roughTokenCount(value) {
|
|
41
|
+
try {
|
|
42
|
+
return Math.ceil(JSON.stringify(value).length / 4);
|
|
43
|
+
} catch {
|
|
44
|
+
return 0;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
var TASK_ID_RE = /^T\d+$/i;
|
|
48
|
+
function fetchRecentActivity(taskId, projectRoot, diagnostics) {
|
|
49
|
+
try {
|
|
50
|
+
const raw = execSync(`git log --grep="${taskId}" --pretty=format:"%H %s %aI" -n 5`, {
|
|
51
|
+
encoding: "utf8",
|
|
52
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
53
|
+
cwd: projectRoot
|
|
54
|
+
});
|
|
55
|
+
return raw.trim().split("\n").filter(Boolean).map((line) => {
|
|
56
|
+
const parts = line.split(" ");
|
|
57
|
+
return {
|
|
58
|
+
commitSha: parts[0] ?? "",
|
|
59
|
+
message: parts[1] ?? "",
|
|
60
|
+
date: parts[2] ?? ""
|
|
61
|
+
};
|
|
62
|
+
}).filter((c) => c.commitSha !== "");
|
|
63
|
+
} catch (error) {
|
|
64
|
+
diagnostics["git"] = { status: "failed", reasons: [String(error)], evidence: [] };
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function describeEngineFailure(result) {
|
|
69
|
+
const { code, message, fix } = result.error;
|
|
70
|
+
return `${code}: ${message}${fix ? ` (fix: ${fix})` : ""}`;
|
|
71
|
+
}
|
|
72
|
+
async function fetchAttachedDocs(projectRoot, taskId, diagnostics) {
|
|
73
|
+
try {
|
|
74
|
+
const store = createAttachmentStore();
|
|
75
|
+
const metas = await store.listByOwner("task", taskId, projectRoot);
|
|
76
|
+
const entries = [];
|
|
77
|
+
for (const meta of metas) {
|
|
78
|
+
const extras = await store.getExtras(meta.id, projectRoot);
|
|
79
|
+
entries.push({
|
|
80
|
+
attachmentId: meta.id,
|
|
81
|
+
kind: meta.attachment.kind,
|
|
82
|
+
...extras?.slug != null ? { slug: extras.slug } : {},
|
|
83
|
+
...extras?.type != null ? { type: extras.type } : {}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return entries;
|
|
87
|
+
} catch (error) {
|
|
88
|
+
diagnostics["docs"] = { status: "failed", reasons: [String(error)], evidence: [] };
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async function fetchBrainContext(taskId, diagnostics) {
|
|
93
|
+
try {
|
|
94
|
+
const [obsResult, decResult, lrnResult] = await Promise.allSettled([
|
|
95
|
+
memoryFind({ query: taskId, limit: 3, tables: ["observations"] }),
|
|
96
|
+
memoryFind({ query: taskId, limit: 3, tables: ["decisions"] }),
|
|
97
|
+
memoryFind({ query: taskId, limit: 3, tables: ["learnings"] })
|
|
98
|
+
]);
|
|
99
|
+
const failures = [];
|
|
100
|
+
const fail = (table, cause) => {
|
|
101
|
+
failures.push(`${table}: ${cause}`);
|
|
102
|
+
diagnostics["memory"] = {
|
|
103
|
+
status: "failed",
|
|
104
|
+
reasons: ["One or more scoped memory retrievals failed.", ...failures],
|
|
105
|
+
evidence: []
|
|
106
|
+
};
|
|
107
|
+
return [];
|
|
108
|
+
};
|
|
109
|
+
const toHits = (table, r) => {
|
|
110
|
+
if (r.status === "rejected") return fail(table, String(r.reason));
|
|
111
|
+
if (!r.value.success) return fail(table, describeEngineFailure(r.value));
|
|
112
|
+
const data = r.value.data;
|
|
113
|
+
return (data?.results ?? []).slice(0, 3);
|
|
114
|
+
};
|
|
115
|
+
return {
|
|
116
|
+
observations: toHits("observations", obsResult),
|
|
117
|
+
learnings: toHits("learnings", lrnResult),
|
|
118
|
+
decisions: toHits("decisions", decResult)
|
|
119
|
+
};
|
|
120
|
+
} catch (error) {
|
|
121
|
+
diagnostics["memory"] = { status: "failed", reasons: [String(error)], evidence: [] };
|
|
122
|
+
return void 0;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async function fetchAttentionDigest(projectRoot, diagnostics) {
|
|
126
|
+
try {
|
|
127
|
+
const digest = await buildAttentionDigest(projectRoot);
|
|
128
|
+
return digest ?? void 0;
|
|
129
|
+
} catch (error) {
|
|
130
|
+
diagnostics["attention"] = { status: "failed", reasons: [String(error)], evidence: [] };
|
|
131
|
+
return void 0;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async function fetchSagaMembersWithTitles(projectRoot, sagaId, diagnostics) {
|
|
135
|
+
try {
|
|
136
|
+
const relResult = await taskRelates(projectRoot, sagaId);
|
|
137
|
+
if (!relResult.success) {
|
|
138
|
+
diagnostics["saga"] = {
|
|
139
|
+
status: "failed",
|
|
140
|
+
reasons: ["Saga relationship retrieval failed."],
|
|
141
|
+
evidence: []
|
|
142
|
+
};
|
|
143
|
+
return [];
|
|
144
|
+
}
|
|
145
|
+
const memberIds = (relResult.data?.relations ?? []).filter((r) => r.type === "groups").map((r) => r.taskId);
|
|
146
|
+
if (memberIds.length === 0) return [];
|
|
147
|
+
const showResults = await Promise.allSettled(
|
|
148
|
+
memberIds.map((epicId) => taskShow(projectRoot, epicId))
|
|
149
|
+
);
|
|
150
|
+
return showResults.map((r, i) => {
|
|
151
|
+
const epicId = memberIds[i] ?? "";
|
|
152
|
+
if (r.status !== "fulfilled" || !r.value.success) {
|
|
153
|
+
diagnostics["saga"] = {
|
|
154
|
+
status: "failed",
|
|
155
|
+
reasons: ["One or more saga member records could not be loaded."],
|
|
156
|
+
evidence: []
|
|
157
|
+
};
|
|
158
|
+
return { epicId, title: epicId, status: "unknown" };
|
|
159
|
+
}
|
|
160
|
+
const t = r.value.data.task;
|
|
161
|
+
return { epicId: t.id, title: t.title, status: t.status };
|
|
162
|
+
}).filter((m) => m.epicId !== "");
|
|
163
|
+
} catch (error) {
|
|
164
|
+
diagnostics["saga"] = { status: "failed", reasons: [String(error)], evidence: [] };
|
|
165
|
+
return [];
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async function buildFocusEnvelope(id, projectRoot) {
|
|
169
|
+
const showResult = await taskShow(projectRoot, id);
|
|
170
|
+
if (!showResult.success) {
|
|
171
|
+
return {
|
|
172
|
+
error: {
|
|
173
|
+
code: showResult.error?.code?.toString() ?? "E_NOT_FOUND",
|
|
174
|
+
message: showResult.error?.message ?? `Task not found: ${id}`
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const knowledge = await runKnowledgeDoctor(projectRoot, { fix: true, budgetMs: 2e3 });
|
|
179
|
+
const sourceDiagnostics = {};
|
|
180
|
+
const task = showResult.data.task;
|
|
181
|
+
const isSaga = isSagaType(task);
|
|
182
|
+
const isEpic = task.type === "epic" && !isSaga;
|
|
183
|
+
const entityType = isSaga ? "saga" : isEpic ? "epic" : "task";
|
|
184
|
+
const identity = {
|
|
185
|
+
id: task.id,
|
|
186
|
+
title: task.title,
|
|
187
|
+
type: entityType,
|
|
188
|
+
status: task.status,
|
|
189
|
+
...task.parentId != null ? { parentId: task.parentId } : {}
|
|
190
|
+
};
|
|
191
|
+
const scope = {};
|
|
192
|
+
if (entityType === "task") {
|
|
193
|
+
scope.taskId = task.id;
|
|
194
|
+
if (task.parentId) scope.epicId = task.parentId;
|
|
195
|
+
} else if (entityType === "epic") {
|
|
196
|
+
scope.epicId = task.id;
|
|
197
|
+
} else {
|
|
198
|
+
scope.sagaId = task.id;
|
|
199
|
+
}
|
|
200
|
+
const blockers = [];
|
|
201
|
+
const explicitBlockers = Array.isArray(task.blockedBy) ? task.blockedBy : [];
|
|
202
|
+
const unresolvedDepends = [];
|
|
203
|
+
if (explicitBlockers.length === 0 && Array.isArray(task.depends)) {
|
|
204
|
+
for (const depId of task.depends) {
|
|
205
|
+
const dRes = await taskShow(projectRoot, depId).catch(() => null);
|
|
206
|
+
if (!dRes?.success)
|
|
207
|
+
sourceDiagnostics["dependencies"] = {
|
|
208
|
+
status: "failed",
|
|
209
|
+
reasons: ["A dependency record could not be assessed."],
|
|
210
|
+
evidence: []
|
|
211
|
+
};
|
|
212
|
+
if (dRes?.success && dRes.data) {
|
|
213
|
+
const s = dRes.data.task.status;
|
|
214
|
+
if (s !== "done" && s !== "cancelled") {
|
|
215
|
+
unresolvedDepends.push(depId);
|
|
216
|
+
blockers.push({
|
|
217
|
+
id: depId,
|
|
218
|
+
title: dRes.data.task.title,
|
|
219
|
+
reason: `dependency not resolved (status: ${s})`
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (explicitBlockers.length > 0) {
|
|
226
|
+
await Promise.allSettled(
|
|
227
|
+
explicitBlockers.map(async (bid) => {
|
|
228
|
+
const bRes = await taskShow(projectRoot, bid).catch(() => null);
|
|
229
|
+
if (!bRes?.success)
|
|
230
|
+
sourceDiagnostics["blockers"] = {
|
|
231
|
+
status: "failed",
|
|
232
|
+
reasons: ["A blocker record could not be assessed."],
|
|
233
|
+
evidence: []
|
|
234
|
+
};
|
|
235
|
+
blockers.push({
|
|
236
|
+
id: bid,
|
|
237
|
+
title: bRes?.success ? bRes.data?.task.title ?? bid : bid,
|
|
238
|
+
reason: bRes?.success ? bRes.data?.task.status ?? "unknown" : "unknown"
|
|
239
|
+
});
|
|
240
|
+
})
|
|
241
|
+
);
|
|
242
|
+
}
|
|
243
|
+
const epicIdForReady = entityType === "epic" ? task.id : entityType === "task" && task.parentId ? task.parentId : void 0;
|
|
244
|
+
const [sagaMembersResult, readyResult, docsResult, brainResult, attentionResult] = await Promise.allSettled([
|
|
245
|
+
isSaga ? fetchSagaMembersWithTitles(projectRoot, id, sourceDiagnostics) : Promise.resolve(void 0),
|
|
246
|
+
epicIdForReady && TASK_ID_RE.test(epicIdForReady) ? orchestrateReady(epicIdForReady, projectRoot) : Promise.resolve(null),
|
|
247
|
+
fetchAttachedDocs(projectRoot, id, sourceDiagnostics),
|
|
248
|
+
fetchBrainContext(id, sourceDiagnostics),
|
|
249
|
+
// T11374: Tier-2 attention digest for the calling agent's resolved scope.
|
|
250
|
+
fetchAttentionDigest(projectRoot, sourceDiagnostics)
|
|
251
|
+
]);
|
|
252
|
+
const recentActivity = fetchRecentActivity(id, projectRoot, sourceDiagnostics);
|
|
253
|
+
const members = sagaMembersResult.status === "fulfilled" && sagaMembersResult.value != null ? sagaMembersResult.value : void 0;
|
|
254
|
+
let readyWave;
|
|
255
|
+
if (readyResult.status === "fulfilled" && readyResult.value?.success) {
|
|
256
|
+
const rData = readyResult.value.data;
|
|
257
|
+
const rTasks = rData?.readyTasks ?? [];
|
|
258
|
+
if (rTasks.length > 0) {
|
|
259
|
+
readyWave = rTasks.map((t) => ({
|
|
260
|
+
id: t.id,
|
|
261
|
+
title: t.title,
|
|
262
|
+
priority: t.priority,
|
|
263
|
+
depends: t.depends
|
|
264
|
+
}));
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
const attachedDocs = docsResult.status === "fulfilled" && docsResult.value.length > 0 ? docsResult.value : void 0;
|
|
268
|
+
const brainContext = brainResult.status === "fulfilled" ? brainResult.value : void 0;
|
|
269
|
+
const attentionDigest = attentionResult.status === "fulfilled" ? attentionResult.value : void 0;
|
|
270
|
+
for (const [name, result] of Object.entries({
|
|
271
|
+
saga: sagaMembersResult,
|
|
272
|
+
ready: readyResult,
|
|
273
|
+
docs: docsResult,
|
|
274
|
+
memory: brainResult,
|
|
275
|
+
attention: attentionResult
|
|
276
|
+
})) {
|
|
277
|
+
if (result.status === "rejected")
|
|
278
|
+
sourceDiagnostics[name] = {
|
|
279
|
+
status: "failed",
|
|
280
|
+
reasons: [String(result.reason)],
|
|
281
|
+
evidence: []
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
if (readyResult.status === "fulfilled" && readyResult.value?.success === false) {
|
|
285
|
+
sourceDiagnostics["ready"] = {
|
|
286
|
+
status: "failed",
|
|
287
|
+
reasons: ["Ready-wave assessment failed.", describeEngineFailure(readyResult.value)],
|
|
288
|
+
evidence: []
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
const envelope = {
|
|
292
|
+
identity,
|
|
293
|
+
scope,
|
|
294
|
+
coverage: compactKnowledgeCoverage(knowledge.health.coverage),
|
|
295
|
+
...brainContext != null ? { brainContext } : {},
|
|
296
|
+
blockers,
|
|
297
|
+
...readyWave != null ? { readyWave } : {},
|
|
298
|
+
knowledgeHealth: compactKnowledgeHealth(knowledge.health, "/coverage"),
|
|
299
|
+
sourceDiagnostics,
|
|
300
|
+
...members != null ? { members } : {},
|
|
301
|
+
...attachedDocs != null ? { attachedDocs } : {},
|
|
302
|
+
...recentActivity.length > 0 ? { recentActivity } : {},
|
|
303
|
+
...attentionDigest != null ? { attentionDigest } : {},
|
|
304
|
+
tokensEstimated: 0
|
|
305
|
+
};
|
|
306
|
+
envelope.tokensEstimated = roughTokenCount(envelope);
|
|
307
|
+
return envelope;
|
|
308
|
+
}
|
|
309
|
+
var QUERY_OPS = /* @__PURE__ */ new Set(["show"]);
|
|
310
|
+
var FocusHandler = class {
|
|
311
|
+
/**
|
|
312
|
+
* Execute a focus query with bounded deterministic knowledge maintenance.
|
|
313
|
+
*
|
|
314
|
+
* @param operation - Operation name (`'show'`).
|
|
315
|
+
* @param params - Raw params (must contain `id: string`).
|
|
316
|
+
*/
|
|
317
|
+
async query(operation, params) {
|
|
318
|
+
const startTime = Date.now();
|
|
319
|
+
if (!QUERY_OPS.has(operation)) {
|
|
320
|
+
return unsupportedOp("query", "focus", operation, startTime);
|
|
321
|
+
}
|
|
322
|
+
try {
|
|
323
|
+
const id = typeof params?.["id"] === "string" ? params["id"].trim() : "";
|
|
324
|
+
if (!id) {
|
|
325
|
+
return {
|
|
326
|
+
meta: dispatchMeta("query", "focus", operation, startTime),
|
|
327
|
+
success: false,
|
|
328
|
+
error: { code: "E_INVALID_INPUT", message: "id is required (e.g. cleo focus T9973)" }
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
const projectRoot = getProjectRoot();
|
|
332
|
+
const result = await buildFocusEnvelope(id, projectRoot);
|
|
333
|
+
if ("error" in result) {
|
|
334
|
+
return {
|
|
335
|
+
meta: dispatchMeta("query", "focus", operation, startTime),
|
|
336
|
+
success: false,
|
|
337
|
+
error: result.error
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
const wrapped = lafsSuccess(result, "focus.show");
|
|
341
|
+
return {
|
|
342
|
+
meta: dispatchMeta("query", "focus", operation, startTime),
|
|
343
|
+
success: true,
|
|
344
|
+
data: wrapped.data
|
|
345
|
+
};
|
|
346
|
+
} catch (error) {
|
|
347
|
+
return handleErrorResult("query", "focus", operation, error, startTime);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* The focus domain has no mutate operations.
|
|
352
|
+
*
|
|
353
|
+
* @param operation - Always unsupported.
|
|
354
|
+
* @param _params - Unused.
|
|
355
|
+
*/
|
|
356
|
+
async mutate(operation, _params) {
|
|
357
|
+
const startTime = Date.now();
|
|
358
|
+
return unsupportedOp("mutate", "focus", operation, startTime);
|
|
359
|
+
}
|
|
360
|
+
/** Declared operations for introspection. */
|
|
361
|
+
getSupportedOperations() {
|
|
362
|
+
return { query: ["show"], mutate: [] };
|
|
363
|
+
}
|
|
364
|
+
};
|
|
365
|
+
export {
|
|
366
|
+
FocusHandler
|
|
367
|
+
};
|
|
368
|
+
//# sourceMappingURL=focus-6AH4KLRO.js.map
|