@cleocode/cleo 2026.10.4 → 2026.10.5

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 (331) hide show
  1. package/README.md +7 -0
  2. package/dist/cli/{adapter-LVXHFBC4.js → adapter-OUQRSFZL.js} +10 -9
  3. package/dist/cli/{add-WUAV7LDT.js → add-4SRRJL4U.js} +18 -18
  4. package/dist/cli/{add-batch-U2DLKAQC.js → add-batch-TSWICA5J.js} +12 -11
  5. package/dist/cli/admin-L3F6CDYH.js +1428 -0
  6. package/dist/cli/{admin-I7BQYVZD.js → admin-YMU55YCU.js} +10 -9
  7. package/dist/cli/{adr-K2THMQBS.js → adr-XESRMFMP.js} +10 -9
  8. package/dist/cli/{agent-WQ6XY2DW.js → agent-TAFPIYUU.js} +66 -28
  9. package/dist/cli/{agent-outputs-BJIYLVTU.js → agent-outputs-HVJJIPS4.js} +3 -3
  10. package/dist/cli/{analyze-PGQZWGOC.js → analyze-YQ22QVGW.js} +10 -9
  11. package/dist/cli/{archive-5LZPF7C3.js → archive-W5XX6AH7.js} +10 -9
  12. package/dist/cli/{archive-stats-U6CYC6JM.js → archive-stats-HP2KPAJU.js} +10 -9
  13. package/dist/cli/attention-7JBDCRZX.js +124 -0
  14. package/dist/cli/{attention-SOURWCNI.js → attention-ZXZANHKC.js} +13 -12
  15. package/dist/cli/{audit-FO2Y4LH2.js → audit-ICA2SEFN.js} +2 -2
  16. package/dist/cli/{auth-ED7TAIXI.js → auth-DXIG5OG7.js} +5 -5
  17. package/dist/cli/{backfill-32TRAYRD.js → backfill-LBSYBWLR.js} +2 -2
  18. package/dist/cli/{backup-LEJMZJKL.js → backup-NUGBZ7NA.js} +17 -16
  19. package/dist/cli/{backup-inspect-6HPLUEI2.js → backup-inspect-PDRXI45A.js} +3 -3
  20. package/dist/cli/{backup-recover-2BTYBZU2.js → backup-recover-TVKAPERB.js} +3 -3
  21. package/dist/cli/{blockers-5JULUJTV.js → blockers-ZOPCGHDW.js} +10 -9
  22. package/dist/cli/{brain-273N3FW4.js → brain-EJOBKL4A.js} +9 -12
  23. package/dist/cli/{briefing-7H6OLECX.js → briefing-RDQJ6WHS.js} +11 -10
  24. package/dist/cli/{caamp-MFQVN6VU.js → caamp-Z3XPKEHB.js} +2 -2
  25. package/dist/cli/{cancel-SCMJTXZB.js → cancel-S7EHLCJN.js} +10 -9
  26. package/dist/cli/{cant-46XCUP4P.js → cant-CHNN6O57.js} +2 -2
  27. package/dist/cli/{changeset-32NMBGG2.js → changeset-RYPHPN2B.js} +4 -6
  28. package/dist/cli/check-C67YAU7W.js +759 -0
  29. package/dist/cli/{check-RWJLBCI2.js → check-DHMURGHC.js} +30 -13
  30. package/dist/cli/{checkpoint-37HMMKD7.js → checkpoint-UWDFOGYQ.js} +3 -3
  31. package/dist/cli/{chunk-NRKWJLMS.js → chunk-22YPFZYB.js} +2 -2
  32. package/dist/cli/{chunk-I3CRQQAD.js → chunk-2MGFDMDF.js} +84 -37
  33. package/dist/cli/{chunk-BCEXRFA2.js → chunk-4JYHPP4C.js} +2 -2
  34. package/dist/cli/{chunk-A2IUEIM5.js → chunk-4PEODTHY.js} +2 -2
  35. package/dist/cli/{chunk-3ZO3M37V.js → chunk-4RGSNUUP.js} +118 -170
  36. package/dist/cli/{chunk-AWCQH2W5.js → chunk-4VASFLUW.js} +2 -2
  37. package/dist/cli/{chunk-BPEVD37G.js → chunk-5PNI276X.js} +2 -2
  38. package/dist/cli/{chunk-OGV57L4J.js → chunk-6N6WGLXE.js} +6 -2
  39. package/dist/cli/{chunk-KHB52JNB.js → chunk-75UH3BLS.js} +4 -3
  40. package/dist/cli/{chunk-5ZFFUFH7.js → chunk-7ACK4EIN.js} +2 -2
  41. package/dist/cli/{chunk-MNJRLSEQ.js → chunk-7NMKLVMI.js} +2 -2
  42. package/dist/cli/{chunk-GFGLLDXX.js → chunk-7SINJXB6.js} +2 -2
  43. package/dist/cli/{chunk-KJDWWQFY.js → chunk-7UARFJYS.js} +3 -3
  44. package/dist/cli/{chunk-JNZJPIPJ.js → chunk-7ZYPQV4N.js} +3 -3
  45. package/dist/cli/{chunk-DVTPIZJM.js → chunk-AQCYT3L4.js} +2 -2
  46. package/dist/cli/{chunk-EGOTK2HA.js → chunk-BQK6XTOH.js} +2 -2
  47. package/dist/cli/{chunk-DYABOIHB.js → chunk-CAPAGD5E.js} +6 -4
  48. package/dist/cli/{chunk-ZZTHTMQP.js → chunk-CHGEDCKG.js} +3 -3
  49. package/dist/cli/{chunk-QPUY2HQZ.js → chunk-COXFJ3PT.js} +2 -2
  50. package/dist/cli/chunk-D7BAQNV2.js +55 -0
  51. package/dist/cli/{chunk-OPTEQKBB.js → chunk-EIUXVHNF.js} +3 -3
  52. package/dist/cli/{chunk-3PGH67MT.js → chunk-EUGB6P5V.js} +4 -6
  53. package/dist/cli/chunk-EW2CKNNZ.js +304 -0
  54. package/dist/cli/{chunk-2JIJD2I7.js → chunk-FSKN4DWC.js} +2 -2
  55. package/dist/cli/{chunk-NSHV2JNM.js → chunk-FVKLULL7.js} +2 -2
  56. package/dist/cli/{chunk-GH37QXW5.js → chunk-GAGUBU4Z.js} +2 -2
  57. package/dist/cli/{chunk-37NU2XDP.js → chunk-GKRFH2YG.js} +2 -2
  58. package/dist/cli/{chunk-ULN4OKQQ.js → chunk-GRU74UE4.js} +21 -10
  59. package/dist/cli/{chunk-LKNUA3SB.js → chunk-HFLLZE6A.js} +2 -2
  60. package/dist/cli/{chunk-YGKEECTI.js → chunk-HXRXT3XU.js} +2 -2
  61. package/dist/cli/{chunk-REUTEW3O.js → chunk-IIOGUY3B.js} +6 -6
  62. package/dist/cli/chunk-ILWWL462.js +60 -0
  63. package/dist/cli/{chunk-XRAX6XFP.js → chunk-J5USPJKZ.js} +2 -2
  64. package/dist/cli/{chunk-S24YI723.js → chunk-KEQS36GD.js} +4 -4
  65. package/dist/cli/chunk-L7ONYSV6.js +2497 -0
  66. package/dist/cli/chunk-NEFMQYLE.js +656 -0
  67. package/dist/cli/{chunk-QFFQSKRC.js → chunk-NU6CQQVB.js} +6 -2
  68. package/dist/cli/{chunk-5J2VH3BC.js → chunk-PN4WW5VX.js} +3 -3
  69. package/dist/cli/{chunk-AYA6F4ZT.js → chunk-PSJ33WVO.js} +3 -3
  70. package/dist/cli/{chunk-FORFDPP5.js → chunk-QJJWWCIC.js} +3 -3
  71. package/dist/cli/{chunk-ZBISIPCK.js → chunk-QKMBWYAS.js} +16 -1
  72. package/dist/cli/chunk-QWNKLLLG.js +84 -0
  73. package/dist/cli/{chunk-7INMKEAD.js → chunk-QWUFFDL3.js} +2 -2
  74. package/dist/cli/chunk-QY76BRUZ.js +35 -0
  75. package/dist/cli/chunk-R45KVF5Y.js +117 -0
  76. package/dist/cli/{chunk-W33Q3FBH.js → chunk-RRKP7HLU.js} +3 -3
  77. package/dist/cli/{chunk-YUZJI67I.js → chunk-T6GZJYL3.js} +2 -2
  78. package/dist/cli/{chunk-LWQBJQSE.js → chunk-TLQ37HRE.js} +3 -3
  79. package/dist/cli/chunk-TPTNEJZJ.js +52 -0
  80. package/dist/cli/chunk-TYC7G5LF.js +100 -0
  81. package/dist/cli/{chunk-J3ZFM3UQ.js → chunk-UWCZY52R.js} +25 -13
  82. package/dist/cli/{chunk-V5GBGOGM.js → chunk-VB3LDPL5.js} +2 -2
  83. package/dist/cli/chunk-WWCYZYSN.js +56 -0
  84. package/dist/cli/{chunk-EBRZ76HS.js → chunk-XA5WISNV.js} +4 -3
  85. package/dist/cli/chunk-XHRZ7OYZ.js +132 -0
  86. package/dist/cli/{chunk-EOPQFCSR.js → chunk-XLPMIGJJ.js} +6 -6
  87. package/dist/cli/{chunk-NWTATTEQ.js → chunk-ZMGDZMSJ.js} +2 -2
  88. package/dist/cli/{claim-KPENYHIQ.js → claim-IGOG2QOC.js} +10 -9
  89. package/dist/cli/{classify-DRVMCFQU.js → classify-MG4N7GMQ.js} +2 -2
  90. package/dist/cli/{cli-T3CR7J57.js → cli-A23Q335V.js} +10 -7
  91. package/dist/cli/{cloud-PPQ4O5TX.js → cloud-SILYJVKO.js} +194 -28
  92. package/dist/cli/{code-Z5CTMVTD.js → code-H2FQCVMW.js} +2 -2
  93. package/dist/cli/{complete-UBOCOBRB.js → complete-JLX7NBI4.js} +9 -8
  94. package/dist/cli/{complexity-BV2AGQRZ.js → complexity-OKV7PVZH.js} +10 -9
  95. package/dist/cli/{compliance-32PD5Y47.js → compliance-QMGZHJNQ.js} +10 -9
  96. package/dist/cli/{conduit-VDKCH33F.js → conduit-4H32UYEA.js} +10 -9
  97. package/dist/cli/conduit-EY54WTZA.js +535 -0
  98. package/dist/cli/{config-I72JAXK4.js → config-TDYOC7XO.js} +21 -18
  99. package/dist/cli/{consensus-LFILLSTK.js → consensus-4XCOFPPT.js} +10 -9
  100. package/dist/cli/{context-XUUVFVTP.js → context-FN4YTGHD.js} +12 -11
  101. package/dist/cli/{contribution-37NQ4N5R.js → contribution-7RWFBJLC.js} +10 -9
  102. package/dist/cli/{curator-TFDXU2EX.js → curator-HKZJCVRL.js} +2 -2
  103. package/dist/cli/{current-C4SN5BWV.js → current-B2NU7V3G.js} +10 -9
  104. package/dist/cli/{daemon-DV25JQ62.js → daemon-GBD4TVCD.js} +11 -10
  105. package/dist/cli/{dash-TFU4RLQW.js → dash-IGDANIE5.js} +10 -9
  106. package/dist/cli/{decide-5VPMNTSI.js → decide-26SXC2V6.js} +5 -8
  107. package/dist/cli/{decompose-KOYEZNJL.js → decompose-LQ76TEZG.js} +11 -10
  108. package/dist/cli/{decomposition-7OHUFIQN.js → decomposition-WFRWNUSJ.js} +10 -9
  109. package/dist/cli/{delete-Q7YCAFY5.js → delete-T5DUQHOX.js} +11 -10
  110. package/dist/cli/{deps-6UZKLDGJ.js → deps-UTPZJBXL.js} +17 -18
  111. package/dist/cli/{detect-FERY35UL.js → detect-FFZSMVDT.js} +10 -9
  112. package/dist/cli/{detect-drift-UL2JTPUK.js → detect-drift-TVCJOFYJ.js} +7 -7
  113. package/dist/cli/diagnostics-GN5CVD3N.js +93 -0
  114. package/dist/cli/{diagnostics-TI5QAZXR.js → diagnostics-ZNBKH6GX.js} +10 -9
  115. package/dist/cli/docs-CLQKEEUK.js +1710 -0
  116. package/dist/cli/{docs-QI2PRN3T.js → docs-DPPDFTWR.js} +45 -42
  117. package/dist/cli/{doctor-AX5TICQO.js → doctor-GPENOP4N.js} +79 -62
  118. package/dist/cli/{doctor-ac-bindings-YPMYHU2G.js → doctor-ac-bindings-S3IOEFP4.js} +3 -3
  119. package/dist/cli/{doctor-acceptance-drift-PYNFGMKB.js → doctor-acceptance-drift-VNFKPBSQ.js} +3 -3
  120. package/dist/cli/{doctor-credentials-UZRIADKM.js → doctor-credentials-A5H4JMTF.js} +3 -3
  121. package/dist/cli/{doctor-db-substrate-Q2TOYM2S.js → doctor-db-substrate-FGCISE4Z.js} +3 -3
  122. package/dist/cli/{doctor-dep-cycles-GCVYZY6F.js → doctor-dep-cycles-BKKKHHYG.js} +3 -3
  123. package/dist/cli/{doctor-exodus-RO5SUTC2.js → doctor-exodus-ND2DH2KP.js} +3 -3
  124. package/dist/cli/{doctor-exodus-residue-EM2AWQXP.js → doctor-exodus-residue-4EMRYMEQ.js} +3 -3
  125. package/dist/cli/{doctor-fk-check-Q3FOLECE.js → doctor-fk-check-VY3RIQV3.js} +3 -3
  126. package/dist/cli/{doctor-global-delivery-TNOAQ3NP.js → doctor-global-delivery-JN6IGHUL.js} +3 -3
  127. package/dist/cli/{doctor-heavy-command-hook-IO3QAQLG.js → doctor-heavy-command-hook-XSN44WXU.js} +3 -3
  128. package/dist/cli/{doctor-legacy-backups-O2YH5VLS.js → doctor-legacy-backups-QAG5NHYP.js} +3 -3
  129. package/dist/cli/{doctor-legacy-reaper-VSEJEIFA.js → doctor-legacy-reaper-CIRGFE6R.js} +3 -3
  130. package/dist/cli/{doctor-malformed-ids-LQ766V5K.js → doctor-malformed-ids-WL7HT4TB.js} +3 -3
  131. package/dist/cli/{doctor-manifest-rows-6FQDNHLH.js → doctor-manifest-rows-SMQCKJ2T.js} +3 -3
  132. package/dist/cli/{doctor-memory-guard-J4PSEKB5.js → doctor-memory-guard-LJDOJG76.js} +3 -3
  133. package/dist/cli/{doctor-migrations-ONOH56YM.js → doctor-migrations-ETQPFNUP.js} +3 -3
  134. package/dist/cli/{doctor-nexus-residency-FUQAX7PV.js → doctor-nexus-residency-A4JMKBEJ.js} +3 -3
  135. package/dist/cli/{doctor-project-identity-GUDK3HYX.js → doctor-project-identity-FFQJ5LNX.js} +3 -3
  136. package/dist/cli/{doctor-projects-7L3BNL4O.js → doctor-projects-MFUTKRHP.js} +3 -3
  137. package/dist/cli/{doctor-projects-registry-TEAVHFQU.js → doctor-projects-registry-76X6VTGM.js} +3 -3
  138. package/dist/cli/{doctor-release-readiness-IEGHX6SL.js → doctor-release-readiness-QJCOPFTK.js} +3 -3
  139. package/dist/cli/{doctor-repair-NBONOSZU.js → doctor-repair-AU76FIKY.js} +3 -3
  140. package/dist/cli/doctor-row-identity-KW6JYZQE.js +26 -0
  141. package/dist/cli/{doctor-skill-fixtures-7Y6L34A3.js → doctor-skill-fixtures-G3T7JUHS.js} +3 -3
  142. package/dist/cli/{doctor-split-brain-TUKIGVHF.js → doctor-split-brain-FUW6L7FS.js} +3 -3
  143. package/dist/cli/{doctor-superseded-store-BHZY2B2L.js → doctor-superseded-store-DUHGSBLC.js} +3 -3
  144. package/dist/cli/doctor-sync-journal-SXMUIKF7.js +26 -0
  145. package/dist/cli/doctor-sync-triggers-6WNJZFRM.js +26 -0
  146. package/dist/cli/{doctor-tool-locks-REQMIVYK.js → doctor-tool-locks-66LSLUBN.js} +3 -3
  147. package/dist/cli/{doctor-twin-collapse-222GOSPE.js → doctor-twin-collapse-AYBYBFC4.js} +3 -3
  148. package/dist/cli/{doctor-worktree-stores-J7TCRVJ3.js → doctor-worktree-stores-C5XEH5OG.js} +3 -3
  149. package/dist/cli/{done-V3AOO65B.js → done-R64XRZ32.js} +11 -10
  150. package/dist/cli/entities-3JIHDIOK.js +361 -0
  151. package/dist/cli/{event-EGNPGE5A.js → event-45KEWV5H.js} +2 -2
  152. package/dist/cli/{exists-H4SDCBPL.js → exists-BEDZS5RI.js} +3 -3
  153. package/dist/cli/{exodus-KALO3B3X.js → exodus-DUX62344.js} +3 -3
  154. package/dist/cli/{export-ROFOCG4M.js → export-C5PQIQ5O.js} +11 -10
  155. package/dist/cli/{export-tasks-US3WBIEQ.js → export-tasks-CUXDZPJB.js} +11 -10
  156. package/dist/cli/{federation-SUIB5QWT.js → federation-ESM35EGG.js} +3 -3
  157. package/dist/cli/{find-YICG4BG6.js → find-5EUZHHQJ.js} +13 -12
  158. package/dist/cli/focus-6AH4KLRO.js +368 -0
  159. package/dist/cli/{focus-TKCZPKOM.js → focus-ANKAIRO5.js} +10 -9
  160. package/dist/cli/{gateway-H4HFDC3E.js → gateway-2GW2KTK3.js} +2 -2
  161. package/dist/cli/{gc-5R2TUY5T.js → gc-CTOQLUSA.js} +2 -2
  162. package/dist/cli/{go-PRQFK5YG.js → go-YJPNHHYT.js} +6 -6
  163. package/dist/cli/{goal-7CZRMLHC.js → goal-4GW4G77D.js} +4 -3
  164. package/dist/cli/{grade-PY2YRPUS.js → grade-25WSZH4X.js} +10 -9
  165. package/dist/cli/{graph-XIXMCFKG.js → graph-JUO3TMF3.js} +11 -10
  166. package/dist/cli/{history-EIXADPAD.js → history-NACNUQTC.js} +10 -9
  167. package/dist/cli/{import-R73SO444.js → import-7ESGL5SS.js} +10 -9
  168. package/dist/cli/{import-tasks-O22FZJ4U.js → import-tasks-FLE2RPBR.js} +10 -9
  169. package/dist/cli/index.js +395 -238
  170. package/dist/cli/{init-IHEJDQWU.js → init-AN4DZ2XO.js} +5 -5
  171. package/dist/cli/{inject-LSRVWNCP.js → inject-HQWA5GWY.js} +10 -9
  172. package/dist/cli/{install-global-4AZUCH6U.js → install-global-YQV4W5OG.js} +2 -2
  173. package/dist/cli/intelligence-OFFNQGHE.js +238 -0
  174. package/dist/cli/{intelligence-2OSFOGD2.js → intelligence-QIC4SN4X.js} +10 -9
  175. package/dist/cli/{issue-IIWEDNFC.js → issue-P5RNMRDG.js} +10 -9
  176. package/dist/cli/{janitor-GPMC7VOR.js → janitor-ZNCFQ7E3.js} +2 -2
  177. package/dist/cli/{labels-5NPOIQXN.js → labels-ORBM3T57.js} +10 -9
  178. package/dist/cli/{lifecycle-4FFS2K2T.js → lifecycle-MHR22TVI.js} +13 -12
  179. package/dist/cli/{list-47KEUGPQ.js → list-LB6GCYYU.js} +14 -13
  180. package/dist/cli/llm-H7LZWQKX.js +130 -0
  181. package/dist/cli/{llm-G5B3I6GD.js → llm-OTJWPMGI.js} +14 -13
  182. package/dist/cli/{llm-cost-S7RS6BVA.js → llm-cost-MLMXEAR4.js} +3 -3
  183. package/dist/cli/{llm-stream-24A45NTS.js → llm-stream-AAEUNKRP.js} +3 -3
  184. package/dist/cli/{log-XF6H2XSD.js → log-W2A5M2NA.js} +10 -9
  185. package/dist/cli/{login-LBPLGHYG.js → login-SIXFFZSP.js} +6 -4
  186. package/dist/cli/{logout-SX4JSJIV.js → logout-G3KVLQQM.js} +5 -5
  187. package/dist/cli/{manifest-NMCW4PIW.js → manifest-G4T6EBSI.js} +10 -9
  188. package/dist/cli/{map-BU72KMGF.js → map-VU5M72TK.js} +10 -9
  189. package/dist/cli/{memory-UHYIVGVM.js → memory-2E27G2G5.js} +17 -21
  190. package/dist/cli/memory-IAEYKXG6.js +1895 -0
  191. package/dist/cli/{migrate-agents-v2-OO7OILZK.js → migrate-agents-v2-A52QIYNJ.js} +3 -3
  192. package/dist/cli/{migrate-claude-mem-EDNYUY3K.js → migrate-claude-mem-TPDW3R4Z.js} +17 -12
  193. package/dist/cli/{next-RZFRG5X7.js → next-SVH4LIDY.js} +10 -9
  194. package/dist/cli/nexus-FPQV2EAF.js +1059 -0
  195. package/dist/cli/{nexus-4S4Z5EVU.js → nexus-XSFXN5E6.js} +14 -13
  196. package/dist/cli/{ops-KR7AWCG3.js → ops-K6LHY5J6.js} +10 -9
  197. package/dist/cli/orchestrate-CZ2J6W3L.js +1650 -0
  198. package/dist/cli/{orchestrate-HOYZY3VX.js → orchestrate-HURUCQFT.js} +13 -11
  199. package/dist/cli/{otel-U7IIRBCT.js → otel-JCNPVJLZ.js} +2 -2
  200. package/dist/cli/{phase-NYZFHUE5.js → phase-VDFRASSO.js} +10 -9
  201. package/dist/cli/pipeline-TCZPOEDR.js +697 -0
  202. package/dist/cli/{pivot-FF2CVUZL.js → pivot-V5MSQZ7L.js} +10 -9
  203. package/dist/cli/{plan-3SL2NTRV.js → plan-SQUGCKSM.js} +10 -9
  204. package/dist/cli/{playbook-2FCBV7N3.js → playbook-L47GLDQD.js} +10 -9
  205. package/dist/cli/playbook-NJVO4R6P.js +33 -0
  206. package/dist/cli/{project-WDX2TGMC.js → project-YZEC7GYF.js} +6 -5
  207. package/dist/cli/{promote-YINYFBZY.js → promote-FINF4HVK.js} +10 -9
  208. package/dist/cli/provenance-3TUWVBFR.js +141 -0
  209. package/dist/cli/{provenance-C7AYD7WG.js → provenance-YZG33JGM.js} +10 -9
  210. package/dist/cli/{provider-QLJEDQBR.js → provider-23JVLLG3.js} +10 -9
  211. package/dist/cli/{reason-JF5BHBM5.js → reason-FHN54O7O.js} +10 -9
  212. package/dist/cli/{reconcile-NMISHDGX.js → reconcile-MOM5T4AX.js} +11 -10
  213. package/dist/cli/{refresh-memory-EY5YNICV.js → refresh-memory-3OSTRAVK.js} +2 -2
  214. package/dist/cli/{relates-R3ZPICAY.js → relates-6FWUFUS2.js} +10 -9
  215. package/dist/cli/release-G2DPSG5M.js +347 -0
  216. package/dist/cli/{release-4ZJTMUUT.js → release-URX6JHZ2.js} +10 -9
  217. package/dist/cli/{remote-QSONJDIK.js → remote-VIULU2T5.js} +3 -3
  218. package/dist/cli/{renderers-64OR3IWX.js → renderers-TGSW77J4.js} +2 -2
  219. package/dist/cli/{reorder-J3DOE7ST.js → reorder-UIPN6TQY.js} +10 -9
  220. package/dist/cli/{reparent-2OUMKEZX.js → reparent-ALOWWUIU.js} +10 -9
  221. package/dist/cli/{req-TZB7OFKO.js → req-RH2Y3H7A.js} +10 -9
  222. package/dist/cli/{research-MTD7EX45.js → research-G2Y72HRC.js} +10 -9
  223. package/dist/cli/{restore-VEUOX7NF.js → restore-VBR5XNML.js} +62 -15
  224. package/dist/cli/{revert-3YF2IL5G.js → revert-32LDNSGP.js} +2 -2
  225. package/dist/cli/{roadmap-7OOQLXKG.js → roadmap-LFU3AG7D.js} +10 -9
  226. package/dist/cli/{run-2U5NZV5Z.js → run-HXRILSR7.js} +40 -6
  227. package/dist/cli/{safestop-VR4VK56D.js → safestop-Z5UC7NGQ.js} +10 -9
  228. package/dist/cli/{saga-SEWPIOX2.js → saga-Y6FZS6AM.js} +12 -11
  229. package/dist/cli/{schema-C52WZ35V.js → schema-OOOKLWUE.js} +5 -5
  230. package/dist/cli/{self-update-GQIGUDPS.js → self-update-26SOTJMH.js} +3 -3
  231. package/dist/cli/{selfimprove-3Y5L4ECT.js → selfimprove-4SMOCLUV.js} +10 -9
  232. package/dist/cli/selfimprove-EB4RQLP4.js +139 -0
  233. package/dist/cli/sentient-QPETVE53.js +254 -0
  234. package/dist/cli/{sentient-M4YMAVGV.js → sentient-RGMWR4XJ.js} +2 -2
  235. package/dist/cli/{sequence-6UBMA4IF.js → sequence-H7DSAJPF.js} +10 -9
  236. package/dist/cli/{service-5R7SILZ7.js → service-EK5MGB2D.js} +10 -9
  237. package/dist/cli/service-GLOMZWPQ.js +437 -0
  238. package/dist/cli/{session-3C6AAC4Y.js → session-HYUXAQGC.js} +12 -11
  239. package/dist/cli/session-N5ISU56W.js +568 -0
  240. package/dist/cli/{setup-BTUBW5PU.js → setup-L3YYV53D.js} +4 -4
  241. package/dist/cli/{show-MXT2V7TF.js → show-364V3KY2.js} +12 -11
  242. package/dist/cli/{skill-GFUZOU2C.js → skill-F2KR6HW5.js} +2 -2
  243. package/dist/cli/{skills-EDWLKAF3.js → skills-FS3DCP6E.js} +13 -12
  244. package/dist/cli/{snapshot-GUWMURCM.js → snapshot-EGXEQ5PR.js} +12 -11
  245. package/dist/cli/{src-66GAKPXR.js → src-LYLXHXHH.js} +2 -2
  246. package/dist/cli/{start-QFG56RGN.js → start-6DXOCCKL.js} +10 -9
  247. package/dist/cli/{stats-GW55P7RR.js → stats-UVUQEGYC.js} +10 -9
  248. package/dist/cli/{status-46HTKNRR.js → status-XLKYLN42.js} +3 -3
  249. package/dist/cli/sticky-VSTQ2I2O.js +264 -0
  250. package/dist/cli/{sticky-2DUZOUGI.js → sticky-XZXZDCFW.js} +12 -11
  251. package/dist/cli/{stop-J2QEUKHX.js → stop-VNOAFWNB.js} +10 -9
  252. package/dist/cli/{sync-GJP2QYT5.js → sync-YYPARW3A.js} +11 -10
  253. package/dist/cli/tasks-C24KHTFF.js +1118 -0
  254. package/dist/cli/{tasks-BNXTM7PB.js → tasks-LBJC7CZV.js} +10 -9
  255. package/dist/cli/{telemetry-55Z2XJWL.js → telemetry-CU7W5WAY.js} +2 -2
  256. package/dist/cli/{templates-7O77TKPV.js → templates-G42JBUY4.js} +9 -11
  257. package/dist/cli/{testing-37YTBNKP.js → testing-HSRITHEY.js} +10 -9
  258. package/dist/cli/{token-UAVJMNUI.js → token-J74E7TSU.js} +10 -9
  259. package/dist/cli/tools-BI74W7VE.js +652 -0
  260. package/dist/cli/{transcript-LORQTV5Z.js → transcript-RGK7RSGQ.js} +2 -2
  261. package/dist/cli/{update-NVCYV2FT.js → update-2KQWA27S.js} +19 -17
  262. package/dist/cli/update-check-entry.js +124 -0
  263. package/dist/cli/update-notice-6SQ6WPQG.js +68 -0
  264. package/dist/cli/upgrade-E2MJAPC7.js +136 -0
  265. package/dist/cli/{upgrade-OXJXOGEF.js → upgrade-XRSQ4RWH.js} +5 -5
  266. package/dist/cli/{verify-LYLDHPT2.js → verify-WASRGDBA.js} +10 -9
  267. package/dist/cli/{web-QP2RP266.js → web-NJ3P67EU.js} +4 -4
  268. package/dist/cli/{workgraph-FXBSZDQE.js → workgraph-OHJ2VKJD.js} +6 -6
  269. package/dist/cli/{worktree-6RXAJIST.js → worktree-FVQLORFY.js} +10 -9
  270. package/dist/cli/worktree-ZJ6JTQNG.js +287 -0
  271. package/package.json +13 -13
  272. package/studio-dist/client/_app/immutable/chunks/{Btgeq_wq.js → AH7dIemv.js} +1 -1
  273. package/studio-dist/client/_app/immutable/chunks/{DgEKqO6r.js → BDgH40i3.js} +1 -1
  274. package/studio-dist/client/_app/immutable/chunks/BXDCSJ7U.js +1 -0
  275. package/studio-dist/client/_app/immutable/chunks/{CgBjxmu6.js → Gg4iYl59.js} +1 -1
  276. package/studio-dist/client/_app/immutable/entry/{app.a02HWaRB.js → app.DUDNK-37.js} +2 -2
  277. package/studio-dist/client/_app/immutable/entry/start.DNmZ0pA4.js +1 -0
  278. package/studio-dist/client/_app/immutable/nodes/{0.nTXyRfc-.js → 0.DWqP3ail.js} +1 -1
  279. package/studio-dist/client/_app/immutable/nodes/{1.4zrWeHtl.js → 1.CZGVUP5B.js} +1 -1
  280. package/studio-dist/client/_app/immutable/nodes/{15.D9mk4JyY.js → 15.DGaflZRS.js} +1 -1
  281. package/studio-dist/client/_app/immutable/nodes/{16._-wt-sQf.js → 16.uYlarGXl.js} +1 -1
  282. package/studio-dist/client/_app/immutable/nodes/{17.CUu6LQDj.js → 17.CZMR0E47.js} +1 -1
  283. package/studio-dist/client/_app/immutable/nodes/{18.Dz4QRTkX.js → 18.CBC-AKH_.js} +1 -1
  284. package/studio-dist/client/_app/immutable/nodes/{20.CJ2_EB0U.js → 20.BGi43MvQ.js} +1 -1
  285. package/studio-dist/client/_app/immutable/nodes/{24.Igj2FS7k.js → 24.Dv8ftCyR.js} +1 -1
  286. package/studio-dist/client/_app/immutable/nodes/25.DQPVlTDQ.js +39 -0
  287. package/studio-dist/client/_app/immutable/nodes/{26.6iPyjT44.js → 26.Cl800304.js} +1 -1
  288. package/studio-dist/client/_app/immutable/nodes/{3.AA5GwNgP.js → 3.D_fQKj9f.js} +1 -1
  289. package/studio-dist/client/_app/version.json +1 -1
  290. package/studio-dist/server/chunks/{0-DGmsoBYm.js → 0-BpOagOst.js} +3 -3
  291. package/studio-dist/server/chunks/1-D0oRGR-C.js +9 -0
  292. package/studio-dist/server/chunks/{15-Bg6YTndh.js → 15-BcjHz7Tv.js} +3 -3
  293. package/studio-dist/server/chunks/{16-BObLwgyD.js → 16-CXm8TUk7.js} +3 -3
  294. package/studio-dist/server/chunks/{17-BNXGyAHX.js → 17-mSgUK-cp.js} +3 -3
  295. package/studio-dist/server/chunks/{18-UqQFRIID.js → 18-BtfnIw1d.js} +3 -3
  296. package/studio-dist/server/chunks/{20-CMn8a_yP.js → 20-By1e4QDS.js} +3 -3
  297. package/studio-dist/server/chunks/{24-BuOTDzib.js → 24-0i2YLVxG.js} +3 -3
  298. package/studio-dist/server/chunks/{dist-B8xbIrdB.js → 25-DPsrqbrh.js} +795 -10736
  299. package/studio-dist/server/chunks/{26-DWGObn2T.js → 26-P0XkOibm.js} +3 -3
  300. package/studio-dist/server/chunks/{3-CyiffdJZ.js → 3-WudjUK7e.js} +3 -3
  301. package/studio-dist/server/chunks/{_layout.svelte-DYtClaIk.js → _layout.svelte-D9m81Rle.js} +4 -4
  302. package/studio-dist/server/chunks/{_page.svelte-CEATWp_5.js → _page.svelte-2PDLOF83.js} +3 -3
  303. package/studio-dist/server/chunks/{_page.svelte-Bip079LT.js → _page.svelte-BjE3jm2K.js} +3 -3
  304. package/studio-dist/server/chunks/{_page.svelte-CV3xiD1y.js → _page.svelte-Clc0vmiZ.js} +4 -4
  305. package/studio-dist/server/chunks/{_page.svelte-DSSy6LuK.js → _page.svelte-DABdRT3h.js} +3 -3
  306. package/studio-dist/server/chunks/{_page.svelte-1h9E6s_f.js → _page.svelte-DG3PjiHj.js} +3 -3
  307. package/studio-dist/server/chunks/{_page.svelte-BT1EUadj.js → _page.svelte-Edy9CaE8.js} +20 -7
  308. package/studio-dist/server/chunks/{_page.svelte-BNNF62Nm.js → _page.svelte-Hrf3-ZR8.js} +3 -3
  309. package/studio-dist/server/chunks/{_page.svelte-TF795TAS.js → _page.svelte-VB4O4Nl5.js} +3 -3
  310. package/studio-dist/server/chunks/{_page.svelte-Cv_KVJDV.js → _page.svelte-d3jEgjsI.js} +3 -3
  311. package/studio-dist/server/chunks/{_server.ts-CzrwbhkQ.js → _server.ts-BcRFsyo3.js} +4 -5
  312. package/studio-dist/server/chunks/{_server.ts-C4w6UdU0.js → _server.ts-CEWpIFrj.js} +6 -5
  313. package/studio-dist/server/chunks/{_server.ts-BlhRFLY3.js → _server.ts-CLVdVIF9.js} +2 -2
  314. package/studio-dist/server/chunks/{_server.ts-Db6mEile.js → _server.ts-D_j7aSy5.js} +6 -5
  315. package/studio-dist/server/chunks/{_server.ts-DWt8Dziu.js → _server.ts-QEZF8h2q.js} +4 -5
  316. package/studio-dist/server/chunks/{client-D8f2k-H_.js → client-Kp1dP1od.js} +2 -2
  317. package/studio-dist/server/chunks/{error.svelte-DbbOwIme.js → error.svelte-WOCioJVX.js} +3 -3
  318. package/studio-dist/server/chunks/{hooks.server-D2qbf3Zp.js → hooks.server-DH9zkIrJ.js} +3 -1
  319. package/studio-dist/server/chunks/{http-1ftNGTs5.js → http-DT5kxaWk.js} +5 -4
  320. package/studio-dist/server/chunks/{internal-CTULuLPB.js → internal-z0vqd5_u.js} +3 -3
  321. package/studio-dist/server/chunks/operations-registry-DdzmYzqX.js +10584 -0
  322. package/studio-dist/server/chunks/{stores-CS5XOReX.js → stores-s2kaL315.js} +2 -2
  323. package/studio-dist/server/index.js +1 -1
  324. package/studio-dist/server/manifest.js +17 -17
  325. package/dist/cli/chunk-3IOQVUO7.js +0 -17308
  326. package/dist/cli/chunk-OAPN46TC.js +0 -89
  327. package/studio-dist/client/_app/immutable/chunks/t81h7afa.js +0 -1
  328. package/studio-dist/client/_app/immutable/entry/start.BreMSngo.js +0 -1
  329. package/studio-dist/client/_app/immutable/nodes/25.BnATjVGN.js +0 -39
  330. package/studio-dist/server/chunks/1-8PfxPvlK.js +0 -9
  331. package/studio-dist/server/chunks/25-CIMSmjVx.js +0 -366
@@ -17,27 +17,32 @@ import {
17
17
  NEXUS_API_URL_ARG,
18
18
  emitNexusResult,
19
19
  failNexus,
20
- nexusApiUrlArg
21
- } from "./chunk-ULN4OKQQ.js";
20
+ nexusApiUrlArg,
21
+ terminalSafe
22
+ } from "./chunk-GRU74UE4.js";
22
23
  import "./chunk-47JYZAMS.js";
23
24
  import "./chunk-C3B7C43W.js";
24
25
  import {
25
26
  defineCommand
26
27
  } from "./chunk-PKKZPOOP.js";
27
- import "./chunk-3ZO3M37V.js";
28
+ import "./chunk-4RGSNUUP.js";
28
29
  import "./chunk-6JSJNYH2.js";
29
30
 
30
31
  // packages/cleo/src/cli/commands/cloud.ts
31
- import { NEXUS_DEVICE_LIST_STATES as NEXUS_DEVICE_LIST_STATES2 } from "@cleocode/contracts";
32
+ import { NEXUS_DEVICE_LIST_STATES as NEXUS_DEVICE_LIST_STATES2 } from "@cleocode/contracts/nexus-cloud.js";
32
33
 
33
34
  // packages/cleo/src/cli/lib/nexus-cloud-cli.ts
34
- import { NEXUS_DEVICE_LIST_STATES } from "@cleocode/contracts";
35
+ import {
36
+ NEXUS_DEVICE_LIST_STATES,
37
+ NEXUS_PRESENCE_FRESH_SECONDS
38
+ } from "@cleocode/contracts/nexus-cloud.js";
35
39
  function stringArg(args, name) {
36
40
  const raw = args[name];
37
41
  return typeof raw === "string" && raw !== "" ? raw : void 0;
38
42
  }
39
43
  function writeWarnings(warnings) {
40
- for (const w of warnings) process.stderr.write(`warning: ${w.message} (${w.code})
44
+ for (const w of warnings)
45
+ process.stderr.write(`warning: ${terminalSafe(w.message)} (${w.code})
41
46
  `);
42
47
  }
43
48
  function deviceStateArg(args) {
@@ -50,20 +55,72 @@ function deviceStateArg(args) {
50
55
  fix: `use one of: ${NEXUS_DEVICE_LIST_STATES.join(", ")}`
51
56
  });
52
57
  }
58
+ var FRESH_MS = NEXUS_PRESENCE_FRESH_SECONDS * 1e3;
59
+ function devicesClause(holders, nowMs = Date.now()) {
60
+ const byDevice = /* @__PURE__ */ new Map();
61
+ for (const h of holders) {
62
+ const seen = byDevice.get(h.deviceId);
63
+ if (!seen || (h.presenceAt ?? "") > (seen.presenceAt ?? "")) byDevice.set(h.deviceId, h);
64
+ }
65
+ if (byDevice.size === 0) return "";
66
+ const lines = [...byDevice.values()].map((h) => {
67
+ const presence = h.presenceAt === null ? "no presence yet" : nowMs - Date.parse(h.presenceAt) <= FRESH_MS ? "presence fresh" : `presence stale since ${h.presenceAt.slice(0, 10)}`;
68
+ const marks = [h.deviceId.slice(0, 8), ...h.thisDevice ? ["this machine"] : [], presence];
69
+ return `${terminalSafe(h.deviceName)} (${marks.join(", ")})`;
70
+ });
71
+ return ` Devices: ${lines.join("; ")}.`;
72
+ }
73
+ function retiredList(retired) {
74
+ return retired.map((x) => `${x.replicaId} retired \u2192 ${x.successor}`).join("; ");
75
+ }
53
76
  function cloudStatusSummary(r) {
54
77
  if (r.verdict === "not-signed-in") {
55
- return `Cloud status: not signed in to ${r.local.apiUrl}. Run \`cleo login nexus\`.`;
78
+ return `Cloud status: not signed in to ${r.local.apiUrl}. Run \`cleo login nexus\`.${syncSummary(r)}`;
56
79
  }
57
80
  const s = r.summary;
58
81
  const parts = [`device ${r.local.nexusDeviceId ?? "unknown"} (${s.profile ?? "no profile"})`];
59
82
  if (r.local.projectId !== null) {
60
83
  parts.push(`project ${r.local.projectId} ${s.linked ? "linked" : "NOT linked"}`);
61
84
  parts.push(s.replicaAttached ? "replica attached" : "replica NOT attached");
85
+ if (r.local.retiredReplicas.length > 0) {
86
+ parts.push(`retired here: ${retiredList(r.local.retiredReplicas)}`);
87
+ }
62
88
  parts.push(`${s.devices} device(s)`);
63
89
  if (s.headSeq !== null) parts.push(`head ${s.headSeq}`);
64
90
  if (s.openConflicts !== null) parts.push(`${s.openConflicts} open conflict(s)`);
65
91
  }
66
- return `Cloud status: ${r.verdict}. ${parts.join("; ")}.`;
92
+ return `Cloud status: ${r.verdict}. ${parts.join("; ")}.${devicesClause(r.holders ?? [])}${syncSummary(r)}`;
93
+ }
94
+ function syncSummary(r) {
95
+ if (r.sync === void 0) return "";
96
+ return r.sync.streams.map(syncStreamClause).join("");
97
+ }
98
+ function syncStreamClause(st) {
99
+ const on = Object.entries(st.flags).filter(([, v]) => v).map(([k]) => k);
100
+ const quarantined = Object.values(st.quarantined).reduce((n, c) => n + c, 0);
101
+ const long = st.held.long.length;
102
+ const parts = [
103
+ !st.journalInstalled ? "journal not installed" : on.length > 0 ? `${on.join(", ")} on` : "all flags off",
104
+ `${st.unsealedOps} unsealed`,
105
+ `last sealed seq ${st.lastSealedSeq ?? "none"}`,
106
+ ...quarantined > 0 ? [`${quarantined} quarantined`] : [],
107
+ ...st.held.count > 0 ? [
108
+ `${st.held.count} held by a rebase${long > 0 ? ` (${long} older than ${st.held.warnDays} days)` : ""}`
109
+ ] : [],
110
+ "server fields unknown until T12343/S4"
111
+ ];
112
+ return ` Sync (${st.scope}${st.stream ? ` ${st.stream}` : ""}): ${parts.join("; ")}.`;
113
+ }
114
+ function cloudProjectShowSummary(r, thisDeviceId = null) {
115
+ const retired = r.retiredHere.length > 0 ? ` (retired on this device: ${retiredList(r.retiredHere)})` : "";
116
+ const retiredIds = new Set(r.retiredHere.map((x) => x.replicaId));
117
+ const holders = r.replicas.filter((rep) => !retiredIds.has(rep.replicaId)).map((rep) => ({
118
+ deviceId: rep.deviceId,
119
+ deviceName: rep.deviceName,
120
+ presenceAt: rep.presenceAt,
121
+ thisDevice: thisDeviceId !== null && rep.deviceId === thisDeviceId
122
+ }));
123
+ return `Project ${r.projectId} "${terminalSafe(r.project.label ?? "")}" (${r.role}): ${r.devices.active} active device(s), ${r.replicas.length} replica(s)${retired}, head ${r.stream?.headSeq ?? "none"}, ${r.openConflicts} open conflict(s).${devicesClause(holders)}`;
67
124
  }
68
125
  async function runCloudRead(operation, call, summary) {
69
126
  let result;
@@ -124,7 +181,7 @@ async function runCloudDevices(args) {
124
181
  ...state !== void 0 ? { state } : {}
125
182
  });
126
183
  },
127
- (r) => `${r.count} device(s) on ${r.apiUrl}${r.state ? ` (state ${r.state})` : ""}: ${r.devices.map((d) => `${d.name} ${d.deviceId} ${d.state}${d.current ? " (this machine)" : ""}`).join("; ")}`
184
+ (r) => `${r.count} device(s) on ${r.apiUrl}${r.state ? ` (state ${r.state})` : ""}: ${r.devices.map((d) => `${terminalSafe(d.name)} ${d.deviceId} ${d.state}${d.current ? " (this machine)" : ""}`).join("; ")}`
128
185
  );
129
186
  }
130
187
  async function runCloudProjects(args) {
@@ -143,7 +200,7 @@ async function runCloudProjects(args) {
143
200
  ...projectId !== void 0 ? { projectId } : {}
144
201
  });
145
202
  },
146
- (r) => `Project ${r.projectId} "${r.project.label ?? ""}" (${r.role}): ${r.devices.active} active device(s), ${r.replicas.length} replica(s), head ${r.stream?.headSeq ?? "none"}, ${r.openConflicts} open conflict(s).`
203
+ cloudProjectShowSummary
147
204
  );
148
205
  return;
149
206
  }
@@ -169,7 +226,7 @@ async function runCloudProjects(args) {
169
226
  ...organizationId !== void 0 ? { organizationId } : {}
170
227
  });
171
228
  },
172
- (r) => `${r.count} project(s) on ${r.apiUrl}: ${r.projects.map((p) => `${p.label ?? p.projectId} (${p.role})`).join("; ")}`
229
+ (r) => `${r.count} project(s) on ${r.apiUrl}: ${r.projects.map((p) => `${terminalSafe(p.label ?? p.projectId)} (${p.role})`).join("; ")}`
173
230
  );
174
231
  }
175
232
 
@@ -192,7 +249,7 @@ var vaultModule = () => import(
192
249
  function common(args, operation) {
193
250
  return { apiUrl: nexusApiUrlArg(args), scope: scopeArg(args, operation) };
194
251
  }
195
- var who = (name, id) => name ?? id;
252
+ var who = (name, id) => terminalSafe(name ?? id);
196
253
  function activityLimitArg(args) {
197
254
  const raw = stringArg(args, "limit");
198
255
  if (raw === void 0) return void 0;
@@ -244,8 +301,10 @@ async function restoreProjectId(args) {
244
301
  if (stringArg(args, "into") === void 0) assertNexusRestoreTarget();
245
302
  const resolved = await resolveNexusProjectRef(ref, { apiUrl: nexusApiUrlArg(args) });
246
303
  if (resolved.matchedBy === "name") {
247
- process.stderr.write(`Restoring "${resolved.name}" (project ${resolved.projectId})...
248
- `);
304
+ process.stderr.write(
305
+ `Restoring "${terminalSafe(resolved.name ?? "")}" (project ${resolved.projectId})...
306
+ `
307
+ );
249
308
  }
250
309
  return resolved.projectId;
251
310
  }
@@ -279,20 +338,40 @@ async function runCloudRestoreLike(args, operation, mode) {
279
338
  }
280
339
  });
281
340
  },
282
- (r) => r.status === "up-to-date" ? `Up to date: this ${r.scope} store already holds snapshot ${r.snapshot?.checkpointId ?? "none"}.` : `Restored ${r.scope} snapshot ${r.snapshot?.checkpointId} into ${r.target}: ${r.tables} table(s) verified by count and hash${r.safetyBackup ? `; previous state saved to ${r.safetyBackup}` : ""}.`
341
+ cloudRestoreSummary
283
342
  );
284
343
  }
344
+ function cloudRestoreSummary(r) {
345
+ if (r.status === "up-to-date") {
346
+ return `Up to date: this ${r.scope} store already holds snapshot ${r.snapshot?.checkpointId ?? "none"}.`;
347
+ }
348
+ const backup = r.safetyBackup ? `; previous state saved to ${r.safetyBackup}` : "";
349
+ const carried = r.replica?.reason === "file-identity" ? "from a copied file" : r.replica?.reason === "foreign-device" ? "from another device" : null;
350
+ const replica = !r.replica ? "" : carried ? `; this copy now has its own replica ${r.replica.current} (${r.replica.reason}: it carried ${r.replica.retired} ${carried})` : `; replica ${r.replica.retired} retired \u2192 ${r.replica.current}`;
351
+ return `Restored ${r.scope} snapshot ${r.snapshot?.checkpointId} into ${r.target}: ${r.tables} table(s) verified by count and hash${backup}${replica}.`;
352
+ }
353
+ function deepVerifyClause(deep) {
354
+ if (!deep) return "";
355
+ const passed = deep.snapshots.filter((x) => x.ok).length;
356
+ const failed = deep.snapshots.find((x) => !x.ok);
357
+ const segments = `${deep.segments.checked} segment(s) after seq ${deep.segments.from} ${deep.segments.ok ? "verified" : `verified, then FAILED: ${deep.segments.problem}`}`;
358
+ return `; deep: ${passed}/${deep.snapshots.length} snapshot bundle(s) verified${failed ? ` (${failed.checkpointId} FAILED: ${failed.problem})` : ""}, ${segments}`;
359
+ }
360
+ function cloudVerifySummary(r) {
361
+ const bad = r.tables.filter((t) => !t.match).map((t) => t.table);
362
+ const devices = r.devices.map(
363
+ (d) => `${who(d.deviceName, d.deviceId)} ${d.matchesHead ? "matches" : "differs from"} head`
364
+ ).join("; ");
365
+ return `Verify ${r.scope}: ${r.verdict}${bad.length ? ` (${bad.length} table(s) differ: ${bad.slice(0, 8).join(", ")}${bad.length > 8 ? ", \u2026" : ""})` : ""}; local integrity ${r.localIntegrity ? "ok" : "FAILED"}${devices ? `; ${devices}` : ""}${deepVerifyClause(r.deep)}. Local backups: \`cleo backup verify\`.`;
366
+ }
285
367
  async function runCloudVerify(args) {
286
368
  await runCloudRead(
287
369
  "cloud.verify",
288
- async () => (await vaultModule()).verifyNexusVault(common(args, "cloud.verify")),
289
- (r) => {
290
- const bad = r.tables.filter((t) => !t.match).map((t) => t.table);
291
- const devices = r.devices.map(
292
- (d) => `${who(d.deviceName, d.deviceId)} ${d.matchesHead ? "matches" : "differs from"} head`
293
- ).join("; ");
294
- return `Verify ${r.scope}: ${r.verdict}${bad.length ? ` (${bad.length} table(s) differ: ${bad.slice(0, 8).join(", ")}${bad.length > 8 ? ", \u2026" : ""})` : ""}; local integrity ${r.localIntegrity ? "ok" : "FAILED"}${devices ? `; ${devices}` : ""}.`;
295
- }
370
+ async () => (await vaultModule()).verifyNexusVault({
371
+ ...common(args, "cloud.verify"),
372
+ deep: args["deep"] === true
373
+ }),
374
+ cloudVerifySummary
296
375
  );
297
376
  }
298
377
  async function runCloudVault(args) {
@@ -340,10 +419,63 @@ async function runCloudActivity(args) {
340
419
  });
341
420
  },
342
421
  (r) => `${r.items.length} event(s)${r.projectId ? ` for project ${r.projectId}` : ""}: ${r.items.slice(0, 10).map(
343
- (i) => `${i.at} ${who(i.deviceName, i.deviceId ?? "account")}${i.thisDevice ? " (this machine)" : ""} ${i.action}${i.target ? ` ${i.target}` : ""}`
422
+ (i) => `${i.at} ${who(i.deviceName, i.deviceId ?? "account")}${i.thisDevice ? " (this machine)" : ""} ${terminalSafe(i.action)}${i.target ? ` ${terminalSafe(i.target)}` : ""}`
344
423
  ).join("; ")}${r.items.length > 10 ? "; \u2026" : ""}`
345
424
  );
346
425
  }
426
+ async function runCloudConflicts(args) {
427
+ const action = stringArg(args, "action") ?? "list";
428
+ const conflicts = () => import(
429
+ /* webpackIgnore: true */
430
+ "@cleocode/core/cloud/nexus-cloud-conflicts.js"
431
+ );
432
+ if (action === "resolve") {
433
+ const raw = stringArg(args, "id");
434
+ const id = raw !== void 0 && /^\d+$/.test(raw) ? Number(raw) : Number.NaN;
435
+ if (!Number.isSafeInteger(id)) {
436
+ failNexus(
437
+ Object.assign(new Error("resolve needs a conflict id"), {
438
+ code: "E_VALIDATION",
439
+ fix: "use `cleo cloud conflicts resolve <id>` (ids from `cleo cloud conflicts`)"
440
+ }),
441
+ "cloud.conflicts.resolve"
442
+ );
443
+ }
444
+ await runCloudRead(
445
+ "cloud.conflicts.resolve",
446
+ async () => (await conflicts()).resolveNexusCloudConflict({
447
+ id,
448
+ scope: scopeArg(args, "cloud.conflicts.resolve")
449
+ }),
450
+ (r) => r.resolved ? `Conflict ${r.id} resolved.` : `No open conflict ${r.id}.`
451
+ );
452
+ return;
453
+ }
454
+ if (action !== "list") {
455
+ failNexus(
456
+ Object.assign(new Error(`unknown action '${action}'`), {
457
+ code: "E_VALIDATION",
458
+ fix: "use `cleo cloud conflicts` (list) or `cleo cloud conflicts resolve <id>`"
459
+ }),
460
+ "cloud.conflicts"
461
+ );
462
+ }
463
+ const stream = stringArg(args, "stream");
464
+ await runCloudRead(
465
+ "cloud.conflicts",
466
+ async () => (await conflicts()).nexusCloudConflicts({
467
+ scope: scopeArg(args, "cloud.conflicts"),
468
+ all: args.all === true,
469
+ ...stream !== void 0 ? { stream } : {}
470
+ }),
471
+ (r) => r.conflicts.length === 0 ? `No ${args.all === true ? "" : "open "}sync conflicts (${r.total} recorded).` : [
472
+ `${r.open} open of ${r.total} sync conflict(s):`,
473
+ ...r.conflicts.map(
474
+ (c) => ` #${c.id} ${c.kind} ${c.table}/${c.uid}${c.columns.length ? ` [${c.columns.join(", ")}]` : ""}${c.rule ? ` ${c.rule}` : ""}: ${c.resolution}${c.resolvedAt ? " (resolved)" : ""}`
475
+ )
476
+ ].join("\n")
477
+ );
478
+ }
347
479
 
348
480
  // packages/cleo/src/cli/commands/cloud.ts
349
481
  var JSON_ARG = { type: "boolean", description: "Output as JSON envelope" };
@@ -488,9 +620,17 @@ var restoreSubCommand = defineCommand({
488
620
  var verifyVaultSubCommand = defineCommand({
489
621
  meta: {
490
622
  name: "verify",
491
- description: "Integrity check across machines: SQLite integrity of this store, its per-table counts and keyed hashes against the cloud's newest snapshot, and every device's newest snapshot against it. Verdict: match, ahead, behind, diverged, empty, or untrusted (the newest snapshot's signature does not verify)."
623
+ description: "Integrity check across machines: SQLite integrity of this store, its per-table counts and keyed hashes against the cloud's newest snapshot, and every device's newest snapshot against it. Verdict: match, ahead, behind, diverged, empty, or untrusted (the newest snapshot's signature does not verify, or with --deep its bytes do not). --deep downloads the snapshots again to check their sha256 and re-hashes the journal segments after the newest one. Local backups: `cleo backup verify`."
624
+ },
625
+ args: {
626
+ scope: SCOPE_ARG,
627
+ deep: {
628
+ type: "boolean",
629
+ description: "Download the newest snapshot of each device again and check its size, sha256 and decryption, then re-hash and decrypt the journal segments after the newest snapshot (downloads every bundle: slower, more traffic)."
630
+ },
631
+ "api-url": NEXUS_API_URL_ARG,
632
+ json: JSON_ARG
492
633
  },
493
- args: { scope: SCOPE_ARG, "api-url": NEXUS_API_URL_ARG, json: JSON_ARG },
494
634
  async run({ args }) {
495
635
  await runCloudVerify(args);
496
636
  }
@@ -540,10 +680,35 @@ var activitySubCommand = defineCommand({
540
680
  await runCloudActivity(args);
541
681
  }
542
682
  });
683
+ var conflictsSubCommand = defineCommand({
684
+ meta: {
685
+ name: "conflicts",
686
+ description: "The sync conflicts this store's apply recorded (typed-rule refusals, edits of deleted rows, deletes over newer edits, divergent edits, dangling references, guard refusals, parent deletes with live children, uid collisions, post-apply invariants), oldest first: open ones by default, --all for every one. `resolve <id>` acknowledges one (marks it resolved) once its resolution, an ordinary write, is made; it never replays the voided op. Local only; counts follow --stream."
687
+ },
688
+ args: {
689
+ action: {
690
+ type: "positional",
691
+ description: "'list' (default) or 'resolve'.",
692
+ required: false
693
+ },
694
+ id: {
695
+ type: "positional",
696
+ description: "Conflict id for resolve (from the list).",
697
+ required: false
698
+ },
699
+ all: { type: "boolean", description: "Include resolved conflicts." },
700
+ stream: { type: "string", description: "Only conflicts from this stream." },
701
+ scope: SCOPE_ARG,
702
+ json: JSON_ARG
703
+ },
704
+ async run({ args }) {
705
+ await runCloudConflicts(args);
706
+ }
707
+ });
543
708
  var cloudCommand = defineCommand({
544
709
  meta: {
545
710
  name: "cloud",
546
- description: "Cleo Nexus with the device credential: status (one-call verification), whoami, devices, projects [show], activity; the encrypted vault: push, pull, restore, verify, vault, lease release."
711
+ description: "Cleo Nexus with the device credential: status (one-call verification), whoami, devices, projects [show], activity; the encrypted vault: push, pull, restore, verify, vault, lease release; the local sync conflict log: conflicts [resolve <id>]."
547
712
  },
548
713
  subCommands: {
549
714
  status: statusSubCommand,
@@ -551,6 +716,7 @@ var cloudCommand = defineCommand({
551
716
  devices: devicesSubCommand,
552
717
  projects: projectsSubCommand,
553
718
  activity: activitySubCommand,
719
+ conflicts: conflictsSubCommand,
554
720
  push: pushSubCommand,
555
721
  pull: pullSubCommand,
556
722
  restore: restoreSubCommand,
@@ -562,4 +728,4 @@ var cloudCommand = defineCommand({
562
728
  export {
563
729
  cloudCommand
564
730
  };
565
- //# sourceMappingURL=cloud-PPQ4O5TX.js.map
731
+ //# sourceMappingURL=cloud-SILYJVKO.js.map
@@ -19,7 +19,7 @@ import {
19
19
  import {
20
20
  cliError,
21
21
  humanLine
22
- } from "./chunk-3ZO3M37V.js";
22
+ } from "./chunk-4RGSNUUP.js";
23
23
  import "./chunk-6JSJNYH2.js";
24
24
 
25
25
  // packages/cleo/src/cli/commands/code.ts
@@ -175,4 +175,4 @@ var codeCommand = defineCommand({
175
175
  export {
176
176
  codeCommand
177
177
  };
178
- //# sourceMappingURL=code-Z5CTMVTD.js.map
178
+ //# sourceMappingURL=code-H2FQCVMW.js.map
@@ -17,18 +17,19 @@ import {
17
17
  completeCommand,
18
18
  completeCommandArgs,
19
19
  completeDispatchParams
20
- } from "./chunk-EOPQFCSR.js";
20
+ } from "./chunk-XLPMIGJJ.js";
21
+ import "./chunk-L7ONYSV6.js";
22
+ import "./chunk-6N6WGLXE.js";
23
+ import "./chunk-4VASFLUW.js";
21
24
  import "./chunk-PKKZPOOP.js";
22
- import "./chunk-3IOQVUO7.js";
23
- import "./chunk-AWCQH2W5.js";
24
- import "./chunk-OGV57L4J.js";
25
- import "./chunk-ZBISIPCK.js";
26
- import "./chunk-3ZO3M37V.js";
25
+ import "./chunk-QKMBWYAS.js";
26
+ import "./chunk-4RGSNUUP.js";
27
27
  import "./chunk-6JSJNYH2.js";
28
- import "./chunk-QFFQSKRC.js";
28
+ import "./chunk-D7BAQNV2.js";
29
+ import "./chunk-TYC7G5LF.js";
29
30
  export {
30
31
  completeCommand,
31
32
  completeCommandArgs,
32
33
  completeDispatchParams
33
34
  };
34
- //# sourceMappingURL=complete-UBOCOBRB.js.map
35
+ //# sourceMappingURL=complete-JLX7NBI4.js.map
@@ -13,19 +13,20 @@
13
13
  return _origEmitWarning.call(process, warning, type, code, ctor);
14
14
  };
15
15
  })();
16
+ import {
17
+ dispatchFromCli
18
+ } from "./chunk-L7ONYSV6.js";
19
+ import "./chunk-6N6WGLXE.js";
20
+ import "./chunk-4VASFLUW.js";
16
21
  import {
17
22
  defineCommand,
18
23
  showUsage
19
24
  } from "./chunk-PKKZPOOP.js";
20
- import {
21
- dispatchFromCli
22
- } from "./chunk-3IOQVUO7.js";
23
- import "./chunk-AWCQH2W5.js";
24
- import "./chunk-OGV57L4J.js";
25
- import "./chunk-ZBISIPCK.js";
26
- import "./chunk-3ZO3M37V.js";
25
+ import "./chunk-QKMBWYAS.js";
26
+ import "./chunk-4RGSNUUP.js";
27
27
  import "./chunk-6JSJNYH2.js";
28
- import "./chunk-QFFQSKRC.js";
28
+ import "./chunk-D7BAQNV2.js";
29
+ import "./chunk-TYC7G5LF.js";
29
30
 
30
31
  // packages/cleo/src/cli/commands/complexity.ts
31
32
  var complexityEstimateCommand = defineCommand({
@@ -53,4 +54,4 @@ var complexityCommand = defineCommand({
53
54
  export {
54
55
  complexityCommand
55
56
  };
56
- //# sourceMappingURL=complexity-BV2AGQRZ.js.map
57
+ //# sourceMappingURL=complexity-OKV7PVZH.js.map
@@ -13,19 +13,20 @@
13
13
  return _origEmitWarning.call(process, warning, type, code, ctor);
14
14
  };
15
15
  })();
16
+ import {
17
+ dispatchFromCli
18
+ } from "./chunk-L7ONYSV6.js";
19
+ import "./chunk-6N6WGLXE.js";
20
+ import "./chunk-4VASFLUW.js";
16
21
  import {
17
22
  defineCommand,
18
23
  showUsage
19
24
  } from "./chunk-PKKZPOOP.js";
20
- import {
21
- dispatchFromCli
22
- } from "./chunk-3IOQVUO7.js";
23
- import "./chunk-AWCQH2W5.js";
24
- import "./chunk-OGV57L4J.js";
25
- import "./chunk-ZBISIPCK.js";
26
- import "./chunk-3ZO3M37V.js";
25
+ import "./chunk-QKMBWYAS.js";
26
+ import "./chunk-4RGSNUUP.js";
27
27
  import "./chunk-6JSJNYH2.js";
28
- import "./chunk-QFFQSKRC.js";
28
+ import "./chunk-D7BAQNV2.js";
29
+ import "./chunk-TYC7G5LF.js";
29
30
 
30
31
  // packages/cleo/src/cli/commands/compliance.ts
31
32
  var summaryCommand = defineCommand({
@@ -273,4 +274,4 @@ var complianceCommand = defineCommand({
273
274
  export {
274
275
  complianceCommand
275
276
  };
276
- //# sourceMappingURL=compliance-32PD5Y47.js.map
277
+ //# sourceMappingURL=compliance-QMGZHJNQ.js.map
@@ -13,19 +13,20 @@
13
13
  return _origEmitWarning.call(process, warning, type, code, ctor);
14
14
  };
15
15
  })();
16
+ import {
17
+ dispatchFromCli
18
+ } from "./chunk-L7ONYSV6.js";
19
+ import "./chunk-6N6WGLXE.js";
20
+ import "./chunk-4VASFLUW.js";
16
21
  import {
17
22
  defineCommand,
18
23
  showUsage
19
24
  } from "./chunk-PKKZPOOP.js";
20
- import {
21
- dispatchFromCli
22
- } from "./chunk-3IOQVUO7.js";
23
- import "./chunk-AWCQH2W5.js";
24
- import "./chunk-OGV57L4J.js";
25
- import "./chunk-ZBISIPCK.js";
26
- import "./chunk-3ZO3M37V.js";
25
+ import "./chunk-QKMBWYAS.js";
26
+ import "./chunk-4RGSNUUP.js";
27
27
  import "./chunk-6JSJNYH2.js";
28
- import "./chunk-QFFQSKRC.js";
28
+ import "./chunk-D7BAQNV2.js";
29
+ import "./chunk-TYC7G5LF.js";
29
30
 
30
31
  // packages/cleo/src/cli/commands/conduit.ts
31
32
  var statusCommand = defineCommand({
@@ -304,4 +305,4 @@ var conduitCommand = defineCommand({
304
305
  export {
305
306
  conduitCommand
306
307
  };
307
- //# sourceMappingURL=conduit-VDKCH33F.js.map
308
+ //# sourceMappingURL=conduit-4H32UYEA.js.map