@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,122 @@
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 "./chunk-C3B7C43W.js";
17
+ import {
18
+ isSubCommandDispatch
19
+ } from "./chunk-YY66LFZF.js";
20
+ import {
21
+ defineCommand,
22
+ showUsage
23
+ } from "./chunk-PKKZPOOP.js";
24
+ import {
25
+ cliError,
26
+ cliOutput
27
+ } from "./chunk-4RGSNUUP.js";
28
+ import "./chunk-6JSJNYH2.js";
29
+
30
+ // packages/cleo/src/cli/commands/audit.ts
31
+ import { reconstructLineage } from "@cleocode/core/audit/reconstruct";
32
+ import { getProjectRoot } from "@cleocode/core/project-scope";
33
+ import { renderAuditReconstruct } from "@cleocode/core/render/orchestration/audit-reconstruct";
34
+ var reconstructCommand = defineCommand({
35
+ meta: {
36
+ name: "reconstruct",
37
+ description: "Reconstruct git-backed lineage (commits + release tags) for a task"
38
+ },
39
+ args: {
40
+ taskId: {
41
+ type: "positional",
42
+ description: "Task ID to reconstruct (e.g. T991)",
43
+ required: true
44
+ },
45
+ json: {
46
+ type: "boolean",
47
+ description: "Emit raw JSON output instead of formatted summary",
48
+ default: false
49
+ },
50
+ "budget-ms": {
51
+ type: "string",
52
+ description: "Shared bounded assessment deadline in milliseconds",
53
+ default: "2000"
54
+ },
55
+ "max-output-bytes": {
56
+ type: "string",
57
+ description: "Combined Git capture byte ceiling",
58
+ default: "8388608"
59
+ },
60
+ "repo-root": {
61
+ type: "string",
62
+ description: "Path to the git repository root (defaults to current project root)"
63
+ }
64
+ },
65
+ async run({ args }) {
66
+ const taskId = args.taskId.toUpperCase();
67
+ const budgetMs = Number(args["budget-ms"]);
68
+ const maxOutputBytes = Number(args["max-output-bytes"]);
69
+ const deadlineAt = Date.now() + budgetMs;
70
+ if (!/^T\d+$/.test(taskId) || !/^\d+$/.test(args["budget-ms"]) || !/^\d+$/.test(args["max-output-bytes"]) || !Number.isSafeInteger(budgetMs) || !Number.isSafeInteger(maxOutputBytes) || !Number.isSafeInteger(deadlineAt)) {
71
+ cliError(
72
+ "Task ID must be T followed by digits; budget-ms and max-output-bytes must be nonnegative safe integers.",
73
+ 1,
74
+ { name: "E_VALIDATION" },
75
+ { operation: "audit.reconstruct" }
76
+ );
77
+ process.exitCode = 1;
78
+ return;
79
+ }
80
+ const repoRoot = args["repo-root"] ?? getProjectRoot(process.cwd()) ?? process.cwd();
81
+ const result = await reconstructLineage(taskId, repoRoot, {
82
+ execution: { deadlineAt },
83
+ maxOutputBytes
84
+ });
85
+ if (result.assessment?.coverage !== "current") {
86
+ process.exitCode = 1;
87
+ cliError(
88
+ renderAuditReconstruct({ ...result }, false),
89
+ 1,
90
+ {
91
+ name: "E_AUDIT_INCOMPLETE",
92
+ details: result,
93
+ fix: "Inspect assessment diagnostics; request an explicit larger budget or restore missing evidence before retrying."
94
+ },
95
+ { operation: "audit.reconstruct" }
96
+ );
97
+ return;
98
+ }
99
+ cliOutput(result, {
100
+ command: "audit-reconstruct",
101
+ operation: "audit.reconstruct",
102
+ message: `Lineage for ${result.taskId}`
103
+ });
104
+ }
105
+ });
106
+ var auditCommand = defineCommand({
107
+ meta: {
108
+ name: "audit",
109
+ description: "Git-backed audit tooling (lineage reconstruction, integrity checks). Independent re-verification of task completion claims is handled by `cleo verify <taskId> --explain` which re-validates ADR-051 evidence atoms."
110
+ },
111
+ subCommands: {
112
+ reconstruct: reconstructCommand
113
+ },
114
+ async run({ cmd, rawArgs }) {
115
+ if (isSubCommandDispatch(rawArgs, cmd.subCommands)) return;
116
+ await showUsage(cmd);
117
+ }
118
+ });
119
+ export {
120
+ auditCommand
121
+ };
122
+ //# sourceMappingURL=audit-ICA2SEFN.js.map
@@ -0,0 +1,491 @@
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
+ authRemoveCommand
18
+ } from "./chunk-QWUFFDL3.js";
19
+ import {
20
+ LOGIN_ARGS,
21
+ runLoginCommand
22
+ } from "./chunk-UWCZY52R.js";
23
+ import "./chunk-GZFVDR44.js";
24
+ import "./chunk-GRU74UE4.js";
25
+ import "./chunk-47JYZAMS.js";
26
+ import "./chunk-C3B7C43W.js";
27
+ import {
28
+ defineCommand,
29
+ showUsage
30
+ } from "./chunk-PKKZPOOP.js";
31
+ import {
32
+ cliError,
33
+ cliOutput
34
+ } from "./chunk-4RGSNUUP.js";
35
+ import "./chunk-6JSJNYH2.js";
36
+
37
+ // packages/cleo/src/cli/commands/auth/consent.ts
38
+ var authConsentCommand = defineCommand({
39
+ meta: {
40
+ name: "consent",
41
+ description: "Manage consent gates for external credential sources (e.g. Claude Code OAuth). Use --enable-claude-code / --disable-claude-code to toggle, --status to inspect."
42
+ },
43
+ args: {
44
+ "enable-claude-code": {
45
+ type: "boolean",
46
+ description: "Grant consent for the claude-code seeder: sets auth.claudeCodeConsentGiven=true in the global config and removes any suppression entry."
47
+ },
48
+ "disable-claude-code": {
49
+ type: "boolean",
50
+ description: "Revoke consent for the claude-code seeder: sets auth.claudeCodeConsentGiven=false, adds a suppression entry, and purges all source:claude-code entries from the pool."
51
+ },
52
+ status: {
53
+ type: "boolean",
54
+ description: "Print the current state of all consent gates."
55
+ },
56
+ json: {
57
+ type: "boolean",
58
+ description: "Output as JSON envelope"
59
+ }
60
+ },
61
+ async run({ args }) {
62
+ const a = args;
63
+ const enableClaudeCode = a["enable-claude-code"] === true;
64
+ const disableClaudeCode = a["disable-claude-code"] === true;
65
+ const showStatus = a["status"] === true;
66
+ if (!enableClaudeCode && !disableClaudeCode && !showStatus) {
67
+ cliError("Specify one of --enable-claude-code, --disable-claude-code, or --status.", 6, {
68
+ name: "E_INVALID_INPUT",
69
+ fix: "Run `cleo auth consent --status` to see current consent state."
70
+ });
71
+ process.exit(6);
72
+ }
73
+ if (enableClaudeCode && disableClaudeCode) {
74
+ cliError("--enable-claude-code and --disable-claude-code are mutually exclusive.", 6, {
75
+ name: "E_INVALID_INPUT"
76
+ });
77
+ process.exit(6);
78
+ }
79
+ const configMod = await import(
80
+ /* webpackIgnore: true */
81
+ "@cleocode/core/config.js"
82
+ );
83
+ const getConfigValue = configMod.getConfigValue;
84
+ const setConfigValue = configMod.setConfigValue;
85
+ const { addSuppression, removeSuppression, isSuppressed } = await import(
86
+ /* webpackIgnore: true */
87
+ "@cleocode/core/llm/credential-removal.js"
88
+ );
89
+ const CONSENT_KEY = "auth.claudeCodeConsentGiven";
90
+ const SOURCE_ID = "claude-code";
91
+ const PROVIDER = "anthropic";
92
+ if (showStatus) {
93
+ const resolved = await getConfigValue(CONSENT_KEY);
94
+ const consentEnabled = resolved.value === true;
95
+ const suppressed = isSuppressed(PROVIDER, SOURCE_ID);
96
+ const result2 = {
97
+ gates: [
98
+ {
99
+ gate: "claudeCode",
100
+ configKey: CONSENT_KEY,
101
+ enabled: consentEnabled,
102
+ suppressed
103
+ }
104
+ ]
105
+ };
106
+ cliOutput(result2, {
107
+ command: "auth-consent-status",
108
+ operation: "auth.consent.status"
109
+ });
110
+ return;
111
+ }
112
+ if (enableClaudeCode) {
113
+ await setConfigValue(CONSENT_KEY, true, void 0, { global: true });
114
+ const suppressionChanged2 = removeSuppression(PROVIDER, SOURCE_ID);
115
+ const result2 = {
116
+ action: "enabled",
117
+ gate: "claudeCode",
118
+ configKey: CONSENT_KEY,
119
+ value: true,
120
+ suppressionChanged: suppressionChanged2,
121
+ purgedCount: 0
122
+ };
123
+ cliOutput(result2, {
124
+ command: "auth-consent-enable",
125
+ operation: "auth.consent.enable"
126
+ });
127
+ return;
128
+ }
129
+ await setConfigValue(CONSENT_KEY, false, void 0, { global: true });
130
+ const wasAlreadySuppressed = isSuppressed(PROVIDER, SOURCE_ID);
131
+ addSuppression(PROVIDER, SOURCE_ID);
132
+ const suppressionChanged = !wasAlreadySuppressed;
133
+ const { listCredentials, removeCredential } = await import(
134
+ /* webpackIgnore: true */
135
+ "@cleocode/core/llm/credentials-store.js"
136
+ );
137
+ const allEntries = await listCredentials();
138
+ const claudeCodeEntries = allEntries.filter((c) => c.source === SOURCE_ID);
139
+ let purgedCount = 0;
140
+ for (const entry of claudeCodeEntries) {
141
+ const removed = await removeCredential(entry.provider, entry.label);
142
+ if (removed) purgedCount++;
143
+ }
144
+ const result = {
145
+ action: "disabled",
146
+ gate: "claudeCode",
147
+ configKey: CONSENT_KEY,
148
+ value: false,
149
+ suppressionChanged,
150
+ purgedCount
151
+ };
152
+ cliOutput(result, {
153
+ command: "auth-consent-disable",
154
+ operation: "auth.consent.disable"
155
+ });
156
+ }
157
+ });
158
+
159
+ // packages/cleo/src/cli/commands/auth/list.ts
160
+ import { existsSync } from "node:fs";
161
+ import { homedir } from "node:os";
162
+ import { join } from "node:path";
163
+ function formatExpiry(expiresAt) {
164
+ if (expiresAt == null) return "never";
165
+ const remaining = expiresAt - Date.now();
166
+ if (remaining <= 0) return "expired";
167
+ const minutes = Math.floor(remaining / 6e4);
168
+ if (minutes <= 90) return `expires in ${minutes}m`;
169
+ const hours = Math.floor(minutes / 60);
170
+ if (hours <= 36) return `expires in ${hours}h`;
171
+ const days = Math.floor(hours / 24);
172
+ return `expires in ${days}d`;
173
+ }
174
+ var authListCommand = defineCommand({
175
+ meta: {
176
+ name: "list",
177
+ description: "List ALL pool entries from ALL sources (env, claude-code, cleo-pkce, codex-cli, gemini-cli, gh-cli, manual). Tokens are never surfaced \u2014 use `cleo llm list` for the LLM-scoped view that mirrors the manual store only."
178
+ },
179
+ args: {
180
+ provider: {
181
+ type: "string",
182
+ description: "Filter to a single provider id (e.g. anthropic)"
183
+ },
184
+ json: {
185
+ type: "boolean",
186
+ description: "Output as JSON envelope"
187
+ }
188
+ },
189
+ async run({ args }) {
190
+ const a = args;
191
+ const providerFilter = typeof a["provider"] === "string" && a["provider"] !== "" ? a["provider"] : null;
192
+ const { getCredentialPool } = await import(
193
+ /* webpackIgnore: true */
194
+ "@cleocode/core/llm/credential-pool.js"
195
+ );
196
+ const pool = getCredentialPool();
197
+ await pool.seed();
198
+ const allStored = await pool.list();
199
+ const ghCliEntries = allStored.filter((c) => c.source === "gh-cli");
200
+ if (ghCliEntries.length > 0) {
201
+ const { removeCredential } = await import(
202
+ /* webpackIgnore: true */
203
+ "@cleocode/core/llm/credentials-store.js"
204
+ );
205
+ const { addSuppression } = await import(
206
+ /* webpackIgnore: true */
207
+ "@cleocode/core/llm/credential-removal.js"
208
+ );
209
+ for (const entry of ghCliEntries) {
210
+ await removeCredential(
211
+ entry.provider,
212
+ entry.label
213
+ );
214
+ }
215
+ addSuppression("openai", "gh-cli");
216
+ }
217
+ const stored = allStored.filter((c) => c.source !== "gh-cli");
218
+ const entries = stored.filter((c) => providerFilter ? c.provider === providerFilter : true).map((c) => ({
219
+ provider: c.provider,
220
+ label: c.label,
221
+ source: c.source ?? "manual",
222
+ authType: c.authType,
223
+ expiryStatus: formatExpiry(c.expiresAt),
224
+ // `current` is "is this entry not in active cooldown AND not disabled"
225
+ // — i.e. could it be served right now. A richer notion of "default
226
+ // credential per provider" would require resolver introspection,
227
+ // which lands in a follow-up task.
228
+ current: !c.disabled && (c.lastErrorResetAt == null || c.lastErrorResetAt <= Date.now())
229
+ })).sort((a2, b) => {
230
+ const p = a2.provider.localeCompare(b.provider);
231
+ return p !== 0 ? p : a2.label.localeCompare(b.label);
232
+ });
233
+ const claudeCredsPath = join(homedir(), ".claude", ".credentials.json");
234
+ const hint = existsSync(claudeCredsPath) && entries.every((e) => e.source !== "claude-code") ? "Hint: Claude Code OAuth detected at ~/.claude/.credentials.json but consent is off. Run `cleo auth consent --enable-claude-code` to seed it into the pool." : null;
235
+ const { getNexusAccountStatus } = await import(
236
+ /* webpackIgnore: true */
237
+ "@cleocode/core/cloud/nexus-auth.js"
238
+ );
239
+ const nexus = providerFilter === null || providerFilter === "nexus" ? await getNexusAccountStatus().catch(() => []) : [];
240
+ cliOutput(
241
+ { entries, nexus, ...hint !== null ? { hint } : {} },
242
+ {
243
+ command: "auth-list",
244
+ operation: "auth.list"
245
+ }
246
+ );
247
+ }
248
+ });
249
+
250
+ // packages/cleo/src/cli/commands/auth/login.ts
251
+ var authLoginCommand = defineCommand({
252
+ meta: {
253
+ name: "login",
254
+ description: "Log in to a Cleo Nexus account (auth login nexus) or to an LLM provider and bind a usable profile (alias of `cleo login`). Picks a provider + auth method (browser OAuth or API key), selects a model, binds it, and validates the binding. Prompts/URLs go to stderr; the result is a human line on a terminal or a JSON envelope when piped/--json."
255
+ },
256
+ args: LOGIN_ARGS,
257
+ async run({ args }) {
258
+ await runLoginCommand(args, "auth.login");
259
+ }
260
+ });
261
+
262
+ // packages/cleo/src/cli/commands/auth/migrate-project-secrets.ts
263
+ import { existsSync as existsSync2, readFileSync, writeFileSync } from "node:fs";
264
+ import { join as join2 } from "node:path";
265
+ import { createInterface } from "node:readline";
266
+ function resolveProjectRootArg(arg) {
267
+ if (typeof arg === "string" && arg.length > 0) return arg;
268
+ return process.cwd();
269
+ }
270
+ function projectConfigPath(projectRoot) {
271
+ const cleoDir = process.env["CLEO_DIR"] ?? ".cleo";
272
+ return join2(projectRoot, cleoDir, "config.json");
273
+ }
274
+ function extractApiKeyEntries(config) {
275
+ if (!config || typeof config !== "object") return [];
276
+ const llm = config["llm"];
277
+ if (!llm || typeof llm !== "object") return [];
278
+ const providers = llm["providers"];
279
+ if (!providers || typeof providers !== "object") return [];
280
+ const out = [];
281
+ for (const [provider, raw] of Object.entries(providers)) {
282
+ if (!raw || typeof raw !== "object") continue;
283
+ const apiKey = raw["apiKey"];
284
+ if (typeof apiKey === "string" && apiKey.trim().length > 0) {
285
+ out.push({ provider, apiKey: apiKey.trim() });
286
+ }
287
+ }
288
+ return out;
289
+ }
290
+ function stripApiKeysFromConfig(config) {
291
+ const clone = structuredClone(config);
292
+ const llm = clone["llm"];
293
+ if (!llm || typeof llm !== "object") return clone;
294
+ const providers = llm["providers"];
295
+ if (!providers || typeof providers !== "object") return clone;
296
+ const cleanedProviders = {};
297
+ for (const [provider, raw] of Object.entries(providers)) {
298
+ if (!raw || typeof raw !== "object") {
299
+ cleanedProviders[provider] = raw;
300
+ continue;
301
+ }
302
+ const entry = { ...raw };
303
+ delete entry["apiKey"];
304
+ if (Object.keys(entry).length > 0) {
305
+ cleanedProviders[provider] = entry;
306
+ }
307
+ }
308
+ llm["providers"] = cleanedProviders;
309
+ return clone;
310
+ }
311
+ function detectAuthType(provider, token) {
312
+ if (provider !== "anthropic") return "api_key";
313
+ if (token.startsWith("sk-ant-oat-") || token.startsWith("sk-ant-ort-")) return "oauth";
314
+ return "api_key";
315
+ }
316
+ async function promptYesNo(question) {
317
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
318
+ try {
319
+ const answer = await new Promise((resolve) => {
320
+ rl.question(question, (a) => resolve(a));
321
+ });
322
+ const clean = answer.trim().toLowerCase();
323
+ return clean === "y" || clean === "yes";
324
+ } finally {
325
+ rl.close();
326
+ }
327
+ }
328
+ async function runMigrateProjectSecrets(opts) {
329
+ const configPath = projectConfigPath(opts.projectRoot);
330
+ if (!existsSync2(configPath)) {
331
+ return {
332
+ configPath,
333
+ backupPath: null,
334
+ migrated: [],
335
+ cancelled: false,
336
+ dryRun: opts.dryRun
337
+ };
338
+ }
339
+ const raw = readFileSync(configPath, "utf-8");
340
+ let parsed;
341
+ try {
342
+ parsed = JSON.parse(raw);
343
+ } catch (err) {
344
+ throw new Error(
345
+ `Failed to parse ${configPath}: ${err instanceof Error ? err.message : String(err)}. Fix the JSON syntax error before running migrate-project-secrets.`
346
+ );
347
+ }
348
+ const entries = extractApiKeyEntries(parsed);
349
+ if (entries.length === 0) {
350
+ return {
351
+ configPath,
352
+ backupPath: null,
353
+ migrated: [],
354
+ cancelled: false,
355
+ dryRun: opts.dryRun
356
+ };
357
+ }
358
+ if (!opts.yes) {
359
+ process.stderr.write(
360
+ `Found ${entries.length} project-config secret(s) to migrate:
361
+ ` + entries.map((e) => ` - ${e.provider}
362
+ `).join("") + `
363
+ This will:
364
+ 1. Back up ${configPath} -> ${configPath}.pre-migration-bak
365
+ 2. Move each apiKey into the unified credential pool with label 'migrated-from-project-config'
366
+ 3. Remove the apiKey fields from the project config
367
+
368
+ `
369
+ );
370
+ const confirmed = await promptYesNo("Proceed? [y/N] ");
371
+ if (!confirmed) {
372
+ return {
373
+ configPath,
374
+ backupPath: null,
375
+ migrated: [],
376
+ cancelled: true,
377
+ dryRun: opts.dryRun
378
+ };
379
+ }
380
+ }
381
+ if (opts.dryRun) {
382
+ return {
383
+ configPath,
384
+ backupPath: null,
385
+ migrated: entries.map((e) => ({
386
+ provider: e.provider,
387
+ label: "migrated-from-project-config",
388
+ moved: false
389
+ })),
390
+ cancelled: false,
391
+ dryRun: true
392
+ };
393
+ }
394
+ const backupPath = `${configPath}.pre-migration-bak`;
395
+ writeFileSync(backupPath, raw, { mode: 384 });
396
+ const { addCredential } = await import(
397
+ /* webpackIgnore: true */
398
+ "@cleocode/core/llm/credentials-store.js"
399
+ );
400
+ const migrated = [];
401
+ for (const { provider, apiKey } of entries) {
402
+ await addCredential({
403
+ provider,
404
+ label: "migrated-from-project-config",
405
+ authType: detectAuthType(provider, apiKey),
406
+ accessToken: apiKey,
407
+ source: "manual"
408
+ });
409
+ migrated.push({ provider, label: "migrated-from-project-config", moved: true });
410
+ }
411
+ const stripped = stripApiKeysFromConfig(parsed);
412
+ writeFileSync(configPath, `${JSON.stringify(stripped, null, 2)}
413
+ `, "utf-8");
414
+ return {
415
+ configPath,
416
+ backupPath,
417
+ migrated,
418
+ cancelled: false,
419
+ dryRun: false
420
+ };
421
+ }
422
+ var authMigrateProjectSecretsCommand = defineCommand({
423
+ meta: {
424
+ name: "migrate-project-secrets",
425
+ description: "Move every llm.providers.*.apiKey out of .cleo/config.json (project-scoped, often committed to git) and into the unified credential pool. Atomic: backs up the original config to .cleo/config.json.pre-migration-bak first."
426
+ },
427
+ args: {
428
+ "project-root": {
429
+ type: "string",
430
+ description: "Override the project root (default: cwd)"
431
+ },
432
+ yes: {
433
+ type: "boolean",
434
+ description: "Skip the interactive confirmation prompt",
435
+ default: false
436
+ },
437
+ "dry-run": {
438
+ type: "boolean",
439
+ description: "Show what would be migrated without writing anything",
440
+ default: false
441
+ },
442
+ json: {
443
+ type: "boolean",
444
+ description: "Output as JSON envelope"
445
+ }
446
+ },
447
+ async run({ args }) {
448
+ const a = args;
449
+ const projectRoot = resolveProjectRootArg(a["project-root"]);
450
+ const yes = Boolean(a["yes"]);
451
+ const dryRun = Boolean(a["dry-run"]);
452
+ let result;
453
+ try {
454
+ result = await runMigrateProjectSecrets({ projectRoot, yes, dryRun });
455
+ } catch (err) {
456
+ const message = err instanceof Error ? err.message : String(err);
457
+ cliError(message, 6, { name: "E_VALIDATION" });
458
+ process.exit(6);
459
+ }
460
+ cliOutput(result, {
461
+ command: "auth-migrate-project-secrets",
462
+ operation: "auth.migrate-project-secrets"
463
+ });
464
+ }
465
+ });
466
+
467
+ // packages/cleo/src/cli/commands/auth.ts
468
+ var authCommand = defineCommand({
469
+ meta: {
470
+ name: "auth",
471
+ // ONE quoted literal, no backticks — see login.ts meta for the generator
472
+ // DESC_RE constraint.
473
+ description: "Unified credential surface: auth login (front-door provider login, alias of cleo login), auth list, auth remove, auth consent. (cleo llm list is the LLM-scoped sister command.)"
474
+ },
475
+ subCommands: {
476
+ consent: authConsentCommand,
477
+ list: authListCommand,
478
+ login: authLoginCommand,
479
+ remove: authRemoveCommand,
480
+ "migrate-project-secrets": authMigrateProjectSecretsCommand
481
+ },
482
+ async run({ cmd, rawArgs }) {
483
+ const firstArg = rawArgs?.find((a) => !a.startsWith("-"));
484
+ if (firstArg && cmd.subCommands && firstArg in cmd.subCommands) return;
485
+ await showUsage(cmd);
486
+ }
487
+ });
488
+ export {
489
+ authCommand
490
+ };
491
+ //# sourceMappingURL=auth-DXIG5OG7.js.map