@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.
Files changed (352) hide show
  1. package/README.md +7 -0
  2. package/bin/cleo.js +11 -1
  3. package/dist/cli/adapter-OUQRSFZL.js +159 -0
  4. package/dist/cli/add-4SRRJL4U.js +443 -0
  5. package/dist/cli/add-batch-TSWICA5J.js +164 -0
  6. package/dist/cli/admin-L3F6CDYH.js +1428 -0
  7. package/dist/cli/admin-YMU55YCU.js +341 -0
  8. package/dist/cli/adr-XESRMFMP.js +172 -0
  9. package/dist/cli/agent-TAFPIYUU.js +2404 -0
  10. package/dist/cli/agent-outputs-HVJJIPS4.js +84 -0
  11. package/dist/cli/analyze-YQ22QVGW.js +49 -0
  12. package/dist/cli/archive-W5XX6AH7.js +65 -0
  13. package/dist/cli/archive-stats-HP2KPAJU.js +101 -0
  14. package/dist/cli/attention-7JBDCRZX.js +124 -0
  15. package/dist/cli/attention-ZXZANHKC.js +168 -0
  16. package/dist/cli/audit-ICA2SEFN.js +122 -0
  17. package/dist/cli/auth-DXIG5OG7.js +491 -0
  18. package/dist/cli/backfill-LBSYBWLR.js +156 -0
  19. package/dist/cli/backup-NUGBZ7NA.js +588 -0
  20. package/dist/cli/backup-inspect-PDRXI45A.js +26 -0
  21. package/dist/cli/backup-recover-TVKAPERB.js +29 -0
  22. package/dist/cli/blockers-ZOPCGHDW.js +55 -0
  23. package/dist/cli/brain-EJOBKL4A.js +397 -0
  24. package/dist/cli/briefing-RDQJ6WHS.js +213 -0
  25. package/dist/cli/caamp-Z3XPKEHB.js +181 -0
  26. package/dist/cli/cancel-S7EHLCJN.js +85 -0
  27. package/dist/cli/canon-NPF5RODM.js +142 -0
  28. package/dist/cli/canon-docs-2GTOLF7Y.js +26 -0
  29. package/dist/cli/cant-CHNN6O57.js +239 -0
  30. package/dist/cli/changeset-RYPHPN2B.js +246 -0
  31. package/dist/cli/check-C67YAU7W.js +759 -0
  32. package/dist/cli/check-DHMURGHC.js +924 -0
  33. package/dist/cli/checkpoint-UWDFOGYQ.js +128 -0
  34. package/dist/cli/chunk-22YPFZYB.js +91 -0
  35. package/dist/cli/chunk-2MGFDMDF.js +272 -0
  36. package/dist/cli/chunk-47JYZAMS.js +30 -0
  37. package/dist/cli/chunk-4JYHPP4C.js +76 -0
  38. package/dist/cli/chunk-4PEODTHY.js +278 -0
  39. package/dist/cli/chunk-4RGSNUUP.js +950 -0
  40. package/dist/cli/chunk-4VASFLUW.js +35 -0
  41. package/dist/cli/chunk-5PNI276X.js +124 -0
  42. package/dist/cli/chunk-6JSJNYH2.js +114 -0
  43. package/dist/cli/chunk-6N6WGLXE.js +63 -0
  44. package/dist/cli/chunk-75UH3BLS.js +210 -0
  45. package/dist/cli/chunk-7ACK4EIN.js +92 -0
  46. package/dist/cli/chunk-7NMKLVMI.js +107 -0
  47. package/dist/cli/chunk-7SINJXB6.js +110 -0
  48. package/dist/cli/chunk-7UARFJYS.js +46 -0
  49. package/dist/cli/chunk-7ZYPQV4N.js +90 -0
  50. package/dist/cli/chunk-AQCYT3L4.js +72 -0
  51. package/dist/cli/chunk-BQK6XTOH.js +57 -0
  52. package/dist/cli/chunk-C3B7C43W.js +16 -0
  53. package/dist/cli/chunk-CAPAGD5E.js +98 -0
  54. package/dist/cli/chunk-CHGEDCKG.js +77 -0
  55. package/dist/cli/chunk-COXFJ3PT.js +74 -0
  56. package/dist/cli/chunk-D7BAQNV2.js +55 -0
  57. package/dist/cli/chunk-EIUXVHNF.js +258 -0
  58. package/dist/cli/chunk-EUGB6P5V.js +173 -0
  59. package/dist/cli/chunk-EW2CKNNZ.js +304 -0
  60. package/dist/cli/chunk-FSKN4DWC.js +108 -0
  61. package/dist/cli/chunk-FVKLULL7.js +48 -0
  62. package/dist/cli/chunk-GAGUBU4Z.js +280 -0
  63. package/dist/cli/chunk-GKRFH2YG.js +171 -0
  64. package/dist/cli/chunk-GRU74UE4.js +270 -0
  65. package/dist/cli/chunk-GZFVDR44.js +320 -0
  66. package/dist/cli/chunk-HFLLZE6A.js +83 -0
  67. package/dist/cli/chunk-HXRXT3XU.js +78 -0
  68. package/dist/cli/chunk-IIOGUY3B.js +258 -0
  69. package/dist/cli/chunk-ILWWL462.js +60 -0
  70. package/dist/cli/chunk-J5USPJKZ.js +48 -0
  71. package/dist/cli/chunk-KEQS36GD.js +88 -0
  72. package/dist/cli/chunk-L7ONYSV6.js +2497 -0
  73. package/dist/cli/chunk-LVGIFMCV.js +163 -0
  74. package/dist/cli/chunk-NEFMQYLE.js +656 -0
  75. package/dist/cli/chunk-NU6CQQVB.js +4501 -0
  76. package/dist/cli/chunk-OILHT47L.js +252 -0
  77. package/dist/cli/chunk-PKKZPOOP.js +352 -0
  78. package/dist/cli/chunk-PN4WW5VX.js +66 -0
  79. package/dist/cli/chunk-PSJ33WVO.js +56 -0
  80. package/dist/cli/chunk-QA6T2LQ5.js +71 -0
  81. package/dist/cli/chunk-QJJWWCIC.js +288 -0
  82. package/dist/cli/chunk-QKMBWYAS.js +93 -0
  83. package/dist/cli/chunk-QWNKLLLG.js +84 -0
  84. package/dist/cli/chunk-QWUFFDL3.js +85 -0
  85. package/dist/cli/chunk-QY76BRUZ.js +35 -0
  86. package/dist/cli/chunk-R45KVF5Y.js +117 -0
  87. package/dist/cli/chunk-RRKP7HLU.js +66 -0
  88. package/dist/cli/chunk-SXXOC6KZ.js +209 -0
  89. package/dist/cli/chunk-T6GZJYL3.js +108 -0
  90. package/dist/cli/chunk-TLQ37HRE.js +67 -0
  91. package/dist/cli/chunk-TPTNEJZJ.js +52 -0
  92. package/dist/cli/chunk-TYC7G5LF.js +100 -0
  93. package/dist/cli/chunk-UWCZY52R.js +766 -0
  94. package/dist/cli/chunk-VB3LDPL5.js +46 -0
  95. package/dist/cli/chunk-VLEYOOPH.js +31 -0
  96. package/dist/cli/chunk-W3JLYKKY.js +140 -0
  97. package/dist/cli/chunk-WWCYZYSN.js +56 -0
  98. package/dist/cli/chunk-XA5WISNV.js +52 -0
  99. package/dist/cli/chunk-XHRZ7OYZ.js +132 -0
  100. package/dist/cli/chunk-XLPMIGJJ.js +148 -0
  101. package/dist/cli/chunk-YY66LFZF.js +29 -0
  102. package/dist/cli/chunk-ZMGDZMSJ.js +210 -0
  103. package/dist/cli/claim-IGOG2QOC.js +97 -0
  104. package/dist/cli/classify-MG4N7GMQ.js +117 -0
  105. package/dist/cli/cli-A23Q335V.js +51 -0
  106. package/dist/cli/cloud-SILYJVKO.js +731 -0
  107. package/dist/cli/cockpit-RZKLGYPN.js +790 -0
  108. package/dist/cli/code-H2FQCVMW.js +178 -0
  109. package/dist/cli/complete-JLX7NBI4.js +35 -0
  110. package/dist/cli/complexity-OKV7PVZH.js +57 -0
  111. package/dist/cli/compliance-QMGZHJNQ.js +277 -0
  112. package/dist/cli/conduit-4H32UYEA.js +308 -0
  113. package/dist/cli/conduit-EY54WTZA.js +535 -0
  114. package/dist/cli/config-TDYOC7XO.js +519 -0
  115. package/dist/cli/consensus-4XCOFPPT.js +122 -0
  116. package/dist/cli/context-FN4YTGHD.js +142 -0
  117. package/dist/cli/contribution-7RWFBJLC.js +112 -0
  118. package/dist/cli/curator-HKZJCVRL.js +139 -0
  119. package/dist/cli/current-B2NU7V3G.js +43 -0
  120. package/dist/cli/daemon-GBD4TVCD.js +452 -0
  121. package/dist/cli/dash-IGDANIE5.js +71 -0
  122. package/dist/cli/decide-26SXC2V6.js +416 -0
  123. package/dist/cli/decompose-LQ76TEZG.js +78 -0
  124. package/dist/cli/decomposition-WFRWNUSJ.js +122 -0
  125. package/dist/cli/delete-T5DUQHOX.js +69 -0
  126. package/dist/cli/deps-UTPZJBXL.js +462 -0
  127. package/dist/cli/detect-FFZSMVDT.js +46 -0
  128. package/dist/cli/detect-drift-TVCJOFYJ.js +408 -0
  129. package/dist/cli/diagnostics-GN5CVD3N.js +93 -0
  130. package/dist/cli/diagnostics-ZNBKH6GX.js +133 -0
  131. package/dist/cli/docs-CLQKEEUK.js +1710 -0
  132. package/dist/cli/docs-DPPDFTWR.js +3098 -0
  133. package/dist/cli/doctor-GPENOP4N.js +1270 -0
  134. package/dist/cli/doctor-ac-bindings-S3IOEFP4.js +26 -0
  135. package/dist/cli/doctor-acceptance-drift-VNFKPBSQ.js +26 -0
  136. package/dist/cli/doctor-credentials-A5H4JMTF.js +26 -0
  137. package/dist/cli/doctor-db-substrate-FGCISE4Z.js +27 -0
  138. package/dist/cli/doctor-dep-cycles-BKKKHHYG.js +26 -0
  139. package/dist/cli/doctor-exodus-ND2DH2KP.js +26 -0
  140. package/dist/cli/doctor-exodus-residue-4EMRYMEQ.js +26 -0
  141. package/dist/cli/doctor-fk-check-VY3RIQV3.js +26 -0
  142. package/dist/cli/doctor-global-delivery-JN6IGHUL.js +26 -0
  143. package/dist/cli/doctor-heavy-command-hook-XSN44WXU.js +26 -0
  144. package/dist/cli/doctor-legacy-backups-QAG5NHYP.js +26 -0
  145. package/dist/cli/doctor-legacy-reaper-CIRGFE6R.js +26 -0
  146. package/dist/cli/doctor-malformed-ids-WL7HT4TB.js +26 -0
  147. package/dist/cli/doctor-manifest-rows-SMQCKJ2T.js +26 -0
  148. package/dist/cli/doctor-memory-guard-LJDOJG76.js +26 -0
  149. package/dist/cli/doctor-migrations-ETQPFNUP.js +26 -0
  150. package/dist/cli/doctor-nexus-residency-A4JMKBEJ.js +26 -0
  151. package/dist/cli/doctor-project-identity-FFQJ5LNX.js +26 -0
  152. package/dist/cli/doctor-projects-MFUTKRHP.js +30 -0
  153. package/dist/cli/doctor-projects-registry-76X6VTGM.js +26 -0
  154. package/dist/cli/doctor-release-readiness-QJCOPFTK.js +26 -0
  155. package/dist/cli/doctor-repair-AU76FIKY.js +26 -0
  156. package/dist/cli/doctor-row-identity-KW6JYZQE.js +26 -0
  157. package/dist/cli/doctor-skill-fixtures-G3T7JUHS.js +26 -0
  158. package/dist/cli/doctor-split-brain-FUW6L7FS.js +26 -0
  159. package/dist/cli/doctor-superseded-store-DUHGSBLC.js +26 -0
  160. package/dist/cli/doctor-sync-journal-SXMUIKF7.js +26 -0
  161. package/dist/cli/doctor-sync-triggers-6WNJZFRM.js +26 -0
  162. package/dist/cli/doctor-tool-locks-66LSLUBN.js +26 -0
  163. package/dist/cli/doctor-twin-collapse-AYBYBFC4.js +26 -0
  164. package/dist/cli/doctor-worktree-stores-C5XEH5OG.js +26 -0
  165. package/dist/cli/done-R64XRZ32.js +196 -0
  166. package/dist/cli/dynamic-RR4HB7BB.js +29 -0
  167. package/dist/cli/entities-3JIHDIOK.js +361 -0
  168. package/dist/cli/event-45KEWV5H.js +372 -0
  169. package/dist/cli/exists-BEDZS5RI.js +65 -0
  170. package/dist/cli/exodus-DUX62344.js +401 -0
  171. package/dist/cli/export-C5PQIQ5O.js +93 -0
  172. package/dist/cli/export-tasks-CUXDZPJB.js +97 -0
  173. package/dist/cli/federation-ESM35EGG.js +145 -0
  174. package/dist/cli/find-5EUZHHQJ.js +178 -0
  175. package/dist/cli/focus-6AH4KLRO.js +368 -0
  176. package/dist/cli/focus-ANKAIRO5.js +56 -0
  177. package/dist/cli/gateway-2GW2KTK3.js +77 -0
  178. package/dist/cli/gateway-auto-start-EDK7XI6E.js +36 -0
  179. package/dist/cli/gc-CTOQLUSA.js +291 -0
  180. package/dist/cli/go-YJPNHHYT.js +206 -0
  181. package/dist/cli/goal-4GW4G77D.js +213 -0
  182. package/dist/cli/grade-25WSZH4X.js +57 -0
  183. package/dist/cli/graph-JUO3TMF3.js +879 -0
  184. package/dist/cli/history-NACNUQTC.js +138 -0
  185. package/dist/cli/hook-UF7J7R6D.js +57 -0
  186. package/dist/cli/hook-entry.js +244 -19
  187. package/dist/cli/hygiene-3QZ2NI7P.js +55 -0
  188. package/dist/cli/import-7ESGL5SS.js +89 -0
  189. package/dist/cli/import-tasks-FLE2RPBR.js +109 -0
  190. package/dist/cli/index.js +601 -94637
  191. package/dist/cli/init-AN4DZ2XO.js +40 -0
  192. package/dist/cli/inject-HQWA5GWY.js +83 -0
  193. package/dist/cli/install-global-YQV4W5OG.js +95 -0
  194. package/dist/cli/intelligence-OFFNQGHE.js +238 -0
  195. package/dist/cli/intelligence-QIC4SN4X.js +182 -0
  196. package/dist/cli/issue-P5RNMRDG.js +159 -0
  197. package/dist/cli/janitor-ZNCFQ7E3.js +111 -0
  198. package/dist/cli/labels-ORBM3T57.js +88 -0
  199. package/dist/cli/lifecycle-MHR22TVI.js +273 -0
  200. package/dist/cli/list-LB6GCYYU.js +109 -0
  201. package/dist/cli/llm-H7LZWQKX.js +130 -0
  202. package/dist/cli/llm-OTJWPMGI.js +704 -0
  203. package/dist/cli/llm-cost-MLMXEAR4.js +25 -0
  204. package/dist/cli/llm-stream-AAEUNKRP.js +27 -0
  205. package/dist/cli/log-W2A5M2NA.js +76 -0
  206. package/dist/cli/login-SIXFFZSP.js +45 -0
  207. package/dist/cli/logout-G3KVLQQM.js +74 -0
  208. package/dist/cli/manifest-G4T6EBSI.js +354 -0
  209. package/dist/cli/map-VU5M72TK.js +53 -0
  210. package/dist/cli/memory-2E27G2G5.js +1952 -0
  211. package/dist/cli/memory-IAEYKXG6.js +1895 -0
  212. package/dist/cli/migrate-agents-v2-A52QIYNJ.js +33 -0
  213. package/dist/cli/migrate-claude-mem-TPDW3R4Z.js +206 -0
  214. package/dist/cli/next-SVH4LIDY.js +57 -0
  215. package/dist/cli/nexus-FPQV2EAF.js +1059 -0
  216. package/dist/cli/nexus-XSFXN5E6.js +2924 -0
  217. package/dist/cli/ops-K6LHY5J6.js +52 -0
  218. package/dist/cli/orchestrate-CZ2J6W3L.js +1650 -0
  219. package/dist/cli/orchestrate-HURUCQFT.js +950 -0
  220. package/dist/cli/otel-JCNPVJLZ.js +188 -0
  221. package/dist/cli/phase-VDFRASSO.js +221 -0
  222. package/dist/cli/pipeline-TCZPOEDR.js +697 -0
  223. package/dist/cli/pivot-V5MSQZ7L.js +88 -0
  224. package/dist/cli/plan-SQUGCKSM.js +49 -0
  225. package/dist/cli/playbook-L47GLDQD.js +230 -0
  226. package/dist/cli/playbook-NJVO4R6P.js +33 -0
  227. package/dist/cli/project-YZEC7GYF.js +331 -0
  228. package/dist/cli/promote-FINF4HVK.js +53 -0
  229. package/dist/cli/provenance-3TUWVBFR.js +141 -0
  230. package/dist/cli/provenance-YZG33JGM.js +129 -0
  231. package/dist/cli/provider-23JVLLG3.js +213 -0
  232. package/dist/cli/reason-FHN54O7O.js +138 -0
  233. package/dist/cli/reconcile-MOM5T4AX.js +128 -0
  234. package/dist/cli/refresh-memory-3OSTRAVK.js +45 -0
  235. package/dist/cli/relates-6FWUFUS2.js +260 -0
  236. package/dist/cli/release-G2DPSG5M.js +347 -0
  237. package/dist/cli/release-URX6JHZ2.js +525 -0
  238. package/dist/cli/remote-VIULU2T5.js +279 -0
  239. package/dist/cli/renderers-TGSW77J4.js +37 -0
  240. package/dist/cli/reorder-UIPN6TQY.js +87 -0
  241. package/dist/cli/reparent-ALOWWUIU.js +59 -0
  242. package/dist/cli/req-RH2Y3H7A.js +130 -0
  243. package/dist/cli/research-G2Y72HRC.js +366 -0
  244. package/dist/cli/restore-VBR5XNML.js +470 -0
  245. package/dist/cli/revert-32LDNSGP.js +240 -0
  246. package/dist/cli/roadmap-LFU3AG7D.js +62 -0
  247. package/dist/cli/run-HXRILSR7.js +245 -0
  248. package/dist/cli/safestop-Z5UC7NGQ.js +89 -0
  249. package/dist/cli/saga-Y6FZS6AM.js +286 -0
  250. package/dist/cli/schema-OOOKLWUE.js +195 -0
  251. package/dist/cli/self-update-26SOTJMH.js +504 -0
  252. package/dist/cli/selfimprove-4SMOCLUV.js +89 -0
  253. package/dist/cli/selfimprove-EB4RQLP4.js +139 -0
  254. package/dist/cli/sentient-QPETVE53.js +254 -0
  255. package/dist/cli/sentient-RGMWR4XJ.js +1088 -0
  256. package/dist/cli/sequence-H7DSAJPF.js +94 -0
  257. package/dist/cli/service-EK5MGB2D.js +156 -0
  258. package/dist/cli/service-GLOMZWPQ.js +437 -0
  259. package/dist/cli/session-HYUXAQGC.js +708 -0
  260. package/dist/cli/session-N5ISU56W.js +568 -0
  261. package/dist/cli/setup-L3YYV53D.js +323 -0
  262. package/dist/cli/show-364V3KY2.js +123 -0
  263. package/dist/cli/skill-F2KR6HW5.js +84 -0
  264. package/dist/cli/skills-FS3DCP6E.js +929 -0
  265. package/dist/cli/smoke-provider-SKUFMZXU.js +218 -0
  266. package/dist/cli/snapshot-EGXEQ5PR.js +120 -0
  267. package/dist/cli/src-LYLXHXHH.js +80 -0
  268. package/dist/cli/start-6DXOCCKL.js +68 -0
  269. package/dist/cli/stats-UVUQEGYC.js +96 -0
  270. package/dist/cli/status-XLKYLN42.js +157 -0
  271. package/dist/cli/sticky-VSTQ2I2O.js +264 -0
  272. package/dist/cli/sticky-XZXZDCFW.js +339 -0
  273. package/dist/cli/stop-VNOAFWNB.js +43 -0
  274. package/dist/cli/sync-YYPARW3A.js +155 -0
  275. package/dist/cli/tasks-C24KHTFF.js +1118 -0
  276. package/dist/cli/tasks-LBJC7CZV.js +175 -0
  277. package/dist/cli/telemetry-CU7W5WAY.js +120 -0
  278. package/dist/cli/templates-G42JBUY4.js +609 -0
  279. package/dist/cli/testing-HSRITHEY.js +147 -0
  280. package/dist/cli/token-J74E7TSU.js +221 -0
  281. package/dist/cli/tools-BI74W7VE.js +652 -0
  282. package/dist/cli/transcript-RGK7RSGQ.js +440 -0
  283. package/dist/cli/tui-BPUFHYKK.js +51 -0
  284. package/dist/cli/update-2KQWA27S.js +478 -0
  285. package/dist/cli/update-check-entry.js +124 -0
  286. package/dist/cli/update-notice-6SQ6WPQG.js +68 -0
  287. package/dist/cli/upgrade-E2MJAPC7.js +136 -0
  288. package/dist/cli/upgrade-XRSQ4RWH.js +243 -0
  289. package/dist/cli/verify-WASRGDBA.js +191 -0
  290. package/dist/cli/web-NJ3P67EU.js +275 -0
  291. package/dist/cli/workgraph-OHJ2VKJD.js +232 -0
  292. package/dist/cli/worktree-FVQLORFY.js +371 -0
  293. package/dist/cli/worktree-ZJ6JTQNG.js +287 -0
  294. package/package.json +13 -13
  295. package/studio-dist/client/_app/immutable/chunks/{DMj27Pxj.js → AH7dIemv.js} +1 -1
  296. package/studio-dist/client/_app/immutable/chunks/{Dc2owyvE.js → BDgH40i3.js} +1 -1
  297. package/studio-dist/client/_app/immutable/chunks/BXDCSJ7U.js +1 -0
  298. package/studio-dist/client/_app/immutable/chunks/{qq3pe1aT.js → Gg4iYl59.js} +1 -1
  299. package/studio-dist/client/_app/immutable/entry/{app.CHWXLeE9.js → app.DUDNK-37.js} +2 -2
  300. package/studio-dist/client/_app/immutable/entry/start.DNmZ0pA4.js +1 -0
  301. package/studio-dist/client/_app/immutable/nodes/{0.DmKQGvFh.js → 0.DWqP3ail.js} +1 -1
  302. package/studio-dist/client/_app/immutable/nodes/{1.DqJk_REO.js → 1.CZGVUP5B.js} +1 -1
  303. package/studio-dist/client/_app/immutable/nodes/{15.GUy6kdW1.js → 15.DGaflZRS.js} +1 -1
  304. package/studio-dist/client/_app/immutable/nodes/{16.CcnKZ8f9.js → 16.uYlarGXl.js} +1 -1
  305. package/studio-dist/client/_app/immutable/nodes/{17.DAlQF3lQ.js → 17.CZMR0E47.js} +1 -1
  306. package/studio-dist/client/_app/immutable/nodes/{18.vQFr-vFj.js → 18.CBC-AKH_.js} +1 -1
  307. package/studio-dist/client/_app/immutable/nodes/{20.GVOj5j_r.js → 20.BGi43MvQ.js} +1 -1
  308. package/studio-dist/client/_app/immutable/nodes/{24.2-wC6DOh.js → 24.Dv8ftCyR.js} +1 -1
  309. package/studio-dist/client/_app/immutable/nodes/25.DQPVlTDQ.js +39 -0
  310. package/studio-dist/client/_app/immutable/nodes/{26.C3rNqzZF.js → 26.Cl800304.js} +1 -1
  311. package/studio-dist/client/_app/immutable/nodes/{3.b-7pzc3M.js → 3.D_fQKj9f.js} +1 -1
  312. package/studio-dist/client/_app/version.json +1 -1
  313. package/studio-dist/server/chunks/{0-BaCce-O1.js → 0-BpOagOst.js} +3 -3
  314. package/studio-dist/server/chunks/1-D0oRGR-C.js +9 -0
  315. package/studio-dist/server/chunks/{15-DRMOSIC9.js → 15-BcjHz7Tv.js} +3 -3
  316. package/studio-dist/server/chunks/{16-BulXhoZZ.js → 16-CXm8TUk7.js} +3 -3
  317. package/studio-dist/server/chunks/{17-DUEOCM0H.js → 17-mSgUK-cp.js} +3 -3
  318. package/studio-dist/server/chunks/{18-DP7Q8zPs.js → 18-BtfnIw1d.js} +3 -3
  319. package/studio-dist/server/chunks/{20-9ta6MI7q.js → 20-By1e4QDS.js} +3 -3
  320. package/studio-dist/server/chunks/{24-DysdL1ab.js → 24-0i2YLVxG.js} +3 -3
  321. package/studio-dist/server/chunks/{dist-CdoCt9zT.js → 25-DPsrqbrh.js} +797 -10736
  322. package/studio-dist/server/chunks/{26-Df4YXgg0.js → 26-P0XkOibm.js} +3 -3
  323. package/studio-dist/server/chunks/{3-BEhOhYpL.js → 3-WudjUK7e.js} +3 -3
  324. package/studio-dist/server/chunks/{_layout.svelte-CnLcXYG-.js → _layout.svelte-D9m81Rle.js} +4 -4
  325. package/studio-dist/server/chunks/{_page.svelte-DGhXqeRc.js → _page.svelte-2PDLOF83.js} +3 -3
  326. package/studio-dist/server/chunks/{_page.svelte-Dv8tmDEC.js → _page.svelte-BjE3jm2K.js} +3 -3
  327. package/studio-dist/server/chunks/{_page.svelte-C0qgUvzA.js → _page.svelte-Clc0vmiZ.js} +4 -4
  328. package/studio-dist/server/chunks/{_page.svelte-ui7LnWkL.js → _page.svelte-DABdRT3h.js} +3 -3
  329. package/studio-dist/server/chunks/{_page.svelte-HUqTICJR.js → _page.svelte-DG3PjiHj.js} +3 -3
  330. package/studio-dist/server/chunks/{_page.svelte-DzcZljiy.js → _page.svelte-Edy9CaE8.js} +20 -7
  331. package/studio-dist/server/chunks/{_page.svelte-DOl0DGOO.js → _page.svelte-Hrf3-ZR8.js} +3 -3
  332. package/studio-dist/server/chunks/{_page.svelte-Da4q5l93.js → _page.svelte-VB4O4Nl5.js} +3 -3
  333. package/studio-dist/server/chunks/{_page.svelte-CbyEPj2j.js → _page.svelte-d3jEgjsI.js} +3 -3
  334. package/studio-dist/server/chunks/{_server.ts-P4wVVksg.js → _server.ts-BcRFsyo3.js} +4 -5
  335. package/studio-dist/server/chunks/{_server.ts-Cr57EKWf.js → _server.ts-CEWpIFrj.js} +6 -5
  336. package/studio-dist/server/chunks/{_server.ts-CnKVmf_s.js → _server.ts-CLVdVIF9.js} +2 -2
  337. package/studio-dist/server/chunks/{_server.ts-C0evMKCk.js → _server.ts-D_j7aSy5.js} +6 -5
  338. package/studio-dist/server/chunks/{_server.ts-2BazvYRP.js → _server.ts-QEZF8h2q.js} +4 -5
  339. package/studio-dist/server/chunks/{client-CPM4LrO2.js → client-Kp1dP1od.js} +2 -2
  340. package/studio-dist/server/chunks/{error.svelte-ShcZo43D.js → error.svelte-WOCioJVX.js} +3 -3
  341. package/studio-dist/server/chunks/{hooks.server-D2qbf3Zp.js → hooks.server-DH9zkIrJ.js} +3 -1
  342. package/studio-dist/server/chunks/{http-BiQjEmVU.js → http-DT5kxaWk.js} +5 -4
  343. package/studio-dist/server/chunks/{internal-Cgsrya1j.js → internal-z0vqd5_u.js} +3 -3
  344. package/studio-dist/server/chunks/operations-registry-DdzmYzqX.js +10584 -0
  345. package/studio-dist/server/chunks/{stores-BGrpEDMK.js → stores-s2kaL315.js} +2 -2
  346. package/studio-dist/server/index.js +1 -1
  347. package/studio-dist/server/manifest.js +17 -17
  348. package/studio-dist/client/_app/immutable/chunks/Bw6J8NDM.js +0 -1
  349. package/studio-dist/client/_app/immutable/entry/start.C9bwPpvc.js +0 -1
  350. package/studio-dist/client/_app/immutable/nodes/25.D1vYaH8g.js +0 -39
  351. package/studio-dist/server/chunks/1-CVo7Nk6d.js +0 -9
  352. 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