@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,270 @@
1
+ (() => {
2
+ const _installed = Symbol.for('cleocode.cli.sqliteWarningFilter');
3
+ if (globalThis[_installed]) return;
4
+ globalThis[_installed] = true;
5
+ const _origEmitWarning = process.emitWarning;
6
+ process.emitWarning = function(warning, type, code, ctor) {
7
+ if (typeof warning === 'object' && warning.name === 'ExperimentalWarning' && typeof warning.message === 'string' && /SQLite is an experimental feature/i.test(warning.message)) {
8
+ return;
9
+ }
10
+ if (typeof warning === 'string' && /SQLite is an experimental feature/i.test(warning)) {
11
+ return;
12
+ }
13
+ return _origEmitWarning.call(process, warning, type, code, ctor);
14
+ };
15
+ })();
16
+ import {
17
+ negatedFlag
18
+ } from "./chunk-47JYZAMS.js";
19
+ import {
20
+ cliError,
21
+ cliOutput,
22
+ humanLine,
23
+ isHumanOutput
24
+ } from "./chunk-4RGSNUUP.js";
25
+
26
+ // packages/cleo/src/cli/lib/nexus-account-cli.ts
27
+ import { ExitCode } from "@cleocode/contracts/exit-codes.js";
28
+
29
+ // packages/cleo/src/cli/lib/device-code-prompt.ts
30
+ function writeDeviceCodePrompt(info, serviceName) {
31
+ process.stderr.write("\n");
32
+ process.stderr.write(` Visit: ${info.verificationUriComplete ?? info.verificationUri}
33
+ `);
34
+ process.stderr.write(` Enter code: ${info.userCode}
35
+ `);
36
+ process.stderr.write("\n");
37
+ process.stderr.write(
38
+ ` Waiting for ${serviceName} authorization (up to ${Math.round(info.expiresIn / 60)} min)...
39
+ `
40
+ );
41
+ }
42
+ function writeDeviceCodePending(elapsed) {
43
+ process.stderr.write(`\r Polling... ${elapsed}s elapsed`);
44
+ }
45
+ function writeDeviceCodeInterrupted() {
46
+ process.stderr.write("\n");
47
+ }
48
+ function writeDeviceCodeApproved(serviceName) {
49
+ process.stderr.write(`\r ${serviceName} authorization approved.
50
+
51
+ `);
52
+ }
53
+
54
+ // packages/cleo/src/cli/lib/terminal-safe.ts
55
+ var ESC_SEQUENCE = /\x1b(?:\[[0-?]*[ -/]*[@-~]|\][^\x07\x1b]*(?:\x07|\x1b\\)?|[PX^_][^\x1b]*(?:\x1b\\)?|[ -~]?)/g;
56
+ var C1_SEQUENCE = /\x9b[0-?]*[ -/]*[@-~]|[\x90\x98\x9d-\x9f][^\x07\x9c\x1b]*(?:\x07|\x9c)?/g;
57
+ var CONTROL = /[\x00-\x08\x0b-\x1f\x7f-\x9f]/g;
58
+ var BIDI = /[\u202a-\u202e\u2066-\u2069]/g;
59
+ function terminalSafeLines(text) {
60
+ return text.replace(ESC_SEQUENCE, "").replace(C1_SEQUENCE, "").replace(CONTROL, "").replace(BIDI, "");
61
+ }
62
+ function terminalSafe(text) {
63
+ return terminalSafeLines(text.replace(/ *[\t\n\r][\t\n\r ]*/g, " "));
64
+ }
65
+
66
+ // packages/cleo/src/cli/lib/nexus-account-cli.ts
67
+ var SERVICE_NAME = "Cleo Nexus";
68
+ var NEXUS_API_URL_ARG = {
69
+ type: "string",
70
+ description: "Cleo Nexus API URL (default: $CLEO_NEXUS_API_URL, else https://api.cleocode.dev; staging: https://api.staging.cleocode.dev)."
71
+ };
72
+ function nexusApiUrlArg(args) {
73
+ const raw = args["api-url"];
74
+ return typeof raw === "string" && raw !== "" ? raw : void 0;
75
+ }
76
+ var VAULT_REFUSAL_EXIT_CODES = {
77
+ E_NEXUS_VAULT_LEASE_HELD: ExitCode.LOCK_TIMEOUT,
78
+ E_NEXUS_VAULT_STORE_BUSY: ExitCode.LOCK_TIMEOUT,
79
+ E_NEXUS_VAULT_BEHIND: ExitCode.VERSION_CONFLICT,
80
+ E_NEXUS_VAULT_LOCAL_CHANGES: ExitCode.CONCURRENT_MODIFICATION,
81
+ E_NEXUS_VAULT_VERIFY_FAILED: ExitCode.CHECKSUM_MISMATCH,
82
+ E_NEXUS_VAULT_TARGET_OCCUPIED: ExitCode.ID_COLLISION,
83
+ // `cleo cloud restore <name>` (T13102).
84
+ E_NEXUS_PROJECT_NOT_FOUND: ExitCode.NOT_FOUND,
85
+ E_NEXUS_PROJECT_AMBIGUOUS: ExitCode.VALIDATION_ERROR
86
+ };
87
+ function failNexus(err, operation) {
88
+ const code = err instanceof Error && "code" in err && typeof err.code === "string" ? err.code : void 0;
89
+ const fix = err instanceof Error && "fix" in err && typeof err.fix === "string" ? err.fix : void 0;
90
+ const exitCode = code === "E_NEXUS_INVALID_API_URL" || code === "E_NEXUS_INVALID_LABEL" || code === "E_NEXUS_DEVICE_REQUIRED" || code === "E_VALIDATION" ? 6 : VAULT_REFUSAL_EXIT_CODES[code ?? ""] ?? 1;
91
+ const details = err instanceof Error && "publicDetails" in err && typeof err.publicDetails === "object" && err.publicDetails ? err.publicDetails : void 0;
92
+ cliError(
93
+ terminalSafeLines(err instanceof Error ? err.message : String(err)),
94
+ exitCode,
95
+ {
96
+ name: code ?? "E_NEXUS_REQUEST_FAILED",
97
+ ...fix ? { fix } : {},
98
+ ...details ? { details } : {}
99
+ },
100
+ { operation }
101
+ );
102
+ process.exit(exitCode);
103
+ }
104
+ function writeNexusWarnings(warnings) {
105
+ for (const warning of warnings) process.stderr.write(`warning: ${terminalSafe(warning)}
106
+ `);
107
+ }
108
+ function emitNexusResult(data, summary, command, operation) {
109
+ if (isHumanOutput()) humanLine(terminalSafeLines(summary));
110
+ else cliOutput(data, { command, operation });
111
+ }
112
+ async function runNexusLogin(args, openBrowser) {
113
+ const { loginToNexus } = await import(
114
+ /* webpackIgnore: true */
115
+ "@cleocode/core/cloud/nexus-auth.js"
116
+ );
117
+ const { isNexusDeviceEnabled } = await import(
118
+ /* webpackIgnore: true */
119
+ "@cleocode/core/cloud/nexus-device.js"
120
+ );
121
+ const noBrowser = negatedFlag(args, "browser");
122
+ let codeShown = false;
123
+ const hooks = {
124
+ apiUrl: nexusApiUrlArg(args),
125
+ onCode: (code) => {
126
+ codeShown = true;
127
+ writeDeviceCodePrompt(code, SERVICE_NAME);
128
+ if (!noBrowser) openBrowser(code.verificationUriComplete ?? code.verificationUri);
129
+ },
130
+ onPending: writeDeviceCodePending
131
+ };
132
+ const readOnly = args["read-only"] === true;
133
+ const name = typeof args["name"] === "string" && args["name"] !== "" ? args["name"] : void 0;
134
+ if (readOnly && !isNexusDeviceEnabled()) {
135
+ throw Object.assign(
136
+ new Error(
137
+ "--read-only needs device credentials, which are not enabled; nothing was signed in"
138
+ ),
139
+ {
140
+ code: "E_NEXUS_DEVICE_REQUIRED",
141
+ fix: "unset CLEO_NEXUS_DEVICE (=0 turns device credentials off) to enrol a read-only device, or log in without --read-only"
142
+ }
143
+ );
144
+ }
145
+ try {
146
+ let result;
147
+ if (isNexusDeviceEnabled()) {
148
+ const { loginToNexusDevice } = await import(
149
+ /* webpackIgnore: true */
150
+ "@cleocode/core/cloud/nexus-enrol.js"
151
+ );
152
+ result = await loginToNexusDevice({
153
+ ...hooks,
154
+ readOnly,
155
+ ...name !== void 0 ? { name } : {}
156
+ });
157
+ if (!readOnly) {
158
+ const { attachNexusGlobalStore } = await import(
159
+ /* webpackIgnore: true */
160
+ "@cleocode/core/cloud/nexus-home.js"
161
+ );
162
+ try {
163
+ const global = await attachNexusGlobalStore({ apiUrl: hooks.apiUrl });
164
+ result = { ...result, warnings: [...result.warnings, ...global.warnings] };
165
+ } catch (err) {
166
+ result = {
167
+ ...result,
168
+ warnings: [
169
+ ...result.warnings,
170
+ `signed in, but attaching this device's global store failed (${err instanceof Error ? err.message : String(err)}); run \`cleo login nexus\` again`
171
+ ]
172
+ };
173
+ }
174
+ }
175
+ } else {
176
+ if (name !== void 0) {
177
+ process.stderr.write(
178
+ "warning: --name needs device credentials, which CLEO_NEXUS_DEVICE=0 turns off; ignored\n"
179
+ );
180
+ }
181
+ const { NEXUS_TEST_BEARER_ENV, W_NEXUS_TEST_BEARER_IGNORED } = await import(
182
+ /* webpackIgnore: true */
183
+ "@cleocode/core/cloud/nexus-enrol.js"
184
+ );
185
+ if ((process.env[NEXUS_TEST_BEARER_ENV]?.trim() ?? "") !== "") {
186
+ process.stderr.write(
187
+ `warning: ${W_NEXUS_TEST_BEARER_IGNORED}: ${NEXUS_TEST_BEARER_ENV} needs device credentials, which CLEO_NEXUS_DEVICE turns off; ignored
188
+ `
189
+ );
190
+ }
191
+ result = await loginToNexus(hooks);
192
+ }
193
+ if (codeShown) writeDeviceCodeApproved(SERVICE_NAME);
194
+ writeNexusWarnings(result.warnings);
195
+ return result;
196
+ } catch (err) {
197
+ writeDeviceCodeInterrupted();
198
+ throw err;
199
+ }
200
+ }
201
+ function nexusLoginSummary(r) {
202
+ const who = r.user?.email ?? "your account";
203
+ const org = r.organization ? ` (${r.organization.name})` : "";
204
+ const device = r.device ? ` This machine is device ${r.device.deviceId}${r.device.name ? ` (${r.device.name})` : ""}, profile ${r.device.profile ?? "unknown"}.` : "";
205
+ return `Signed in to ${r.apiUrl} as ${who}${org}.${device}${nexusAccountSetupLine(r)}`;
206
+ }
207
+ function nexusAccountSetupLine(r) {
208
+ const account = r.account;
209
+ if (account === void 0) return "";
210
+ switch (account.status) {
211
+ case "ready":
212
+ case "skipped":
213
+ return ` ${account.summary}`;
214
+ case "unsupported":
215
+ return " Encrypted backups are not available on this server (see warnings).";
216
+ case "failed":
217
+ return ` Encrypted backups are NOT set up: step ${account.step} failed (see warnings for the fix).`;
218
+ }
219
+ }
220
+ function nexusDeviceLogoutSummary(r) {
221
+ const count = (o) => r.devices.filter((d) => d.outcome === o).length;
222
+ const confirmed = count("confirmed");
223
+ const open = r.devices.length - confirmed;
224
+ const what = r.action === "revoke" ? "Revoke" : "Sign-out";
225
+ if (r.devices.length === 0 && r.session === null) {
226
+ return r.warnings.length > 0 ? `${what} on ${r.apiUrl}: nothing was sent (see warnings).` : `Not signed in to ${r.apiUrl}; nothing to do.`;
227
+ }
228
+ const parts = [];
229
+ if (r.devices.length > 0)
230
+ parts.push(`${confirmed} of ${r.devices.length} device request(s) confirmed`);
231
+ if (open > 0) parts.push(`${open} NOT confirmed (see warnings)`);
232
+ if (r.session !== null) parts.push(`9.24 session ${r.session.revocation}`);
233
+ const notConfirmed = open > 0 || r.devices.length > 0 && confirmed === 0 || r.session?.revocation === "failed";
234
+ const lead = notConfirmed ? `${what} NOT fully confirmed on` : `${what} confirmed on`;
235
+ return `${lead} ${r.apiUrl}: ${parts.join("; ")}.`;
236
+ }
237
+ async function runNexusDeviceLogout(args) {
238
+ let result;
239
+ try {
240
+ const { logoutNexusDevice } = await import(
241
+ /* webpackIgnore: true */
242
+ "@cleocode/core/cloud/nexus-logout.js"
243
+ );
244
+ result = await logoutNexusDevice({
245
+ apiUrl: nexusApiUrlArg(args),
246
+ revoke: args["revoke"] === true
247
+ });
248
+ } catch (err) {
249
+ failNexus(err, "logout.run");
250
+ }
251
+ writeNexusWarnings(result.warnings);
252
+ emitNexusResult(result, nexusDeviceLogoutSummary(result), "logout", "logout.run");
253
+ }
254
+
255
+ export {
256
+ writeDeviceCodePrompt,
257
+ writeDeviceCodePending,
258
+ writeDeviceCodeInterrupted,
259
+ writeDeviceCodeApproved,
260
+ terminalSafe,
261
+ NEXUS_API_URL_ARG,
262
+ nexusApiUrlArg,
263
+ failNexus,
264
+ writeNexusWarnings,
265
+ emitNexusResult,
266
+ runNexusLogin,
267
+ nexusLoginSummary,
268
+ runNexusDeviceLogout
269
+ };
270
+ //# sourceMappingURL=chunk-GRU74UE4.js.map
@@ -0,0 +1,320 @@
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
+
17
+ // packages/cleo/src/cli/lib/readline-wizard-io.ts
18
+ import { stdin as input, stdout as output } from "node:process";
19
+ import * as readline from "node:readline/promises";
20
+ import { Writable } from "node:stream";
21
+ import { WizardFatalError, WizardInterruptError } from "@cleocode/core/setup";
22
+ function stripBracketedPaste(raw) {
23
+ return raw.replace(/\x1b\[200~/g, "").replace(/\x1b\[201~/g, "").trim();
24
+ }
25
+ var SETUP_STDIN_CLOSED_CODE = "E_SETUP_STDIN_CLOSED";
26
+ var StdinClosedError = class _StdinClosedError extends WizardFatalError {
27
+ codeName = SETUP_STDIN_CLOSED_CODE;
28
+ constructor() {
29
+ super("stdin closed before section completed");
30
+ this.name = "StdinClosedError";
31
+ }
32
+ /**
33
+ * Type-guard so callers can identify this error without `instanceof`.
34
+ *
35
+ * @param err - Value caught from a `catch` block.
36
+ */
37
+ static is(err) {
38
+ return err instanceof _StdinClosedError;
39
+ }
40
+ };
41
+ var SECRET_ECHO_REFUSED_MESSAGE = 'Refusing to read a secret: stdin is a terminal but terminal mode is off, so the key would be echoed. Pipe it instead: printf %s "$KEY" | cleo decide config --provider layahost --key-stdin (or cleo llm add <provider> --api-key-stdin).';
42
+ var SECRET_MASK_CHAR = "\u2022";
43
+ function streamIsTTY(stream) {
44
+ return "isTTY" in stream && stream.isTTY === true;
45
+ }
46
+ var MutableOutput = class extends Writable {
47
+ /** @param target - Stream that receives writes while unmuted. */
48
+ constructor(target) {
49
+ super();
50
+ this.target = target;
51
+ this.isTTY = "isTTY" in target && target.isTTY === true;
52
+ }
53
+ target;
54
+ /** When true, writes are dropped. */
55
+ muted = false;
56
+ /** Mirrors the wrapped stream: readline enables terminal mode (and echo) from it. */
57
+ isTTY;
58
+ /** Terminal width of the wrapped stream, when it reports one. */
59
+ get columns() {
60
+ return "columns" in this.target && typeof this.target.columns === "number" ? this.target.columns : void 0;
61
+ }
62
+ /** Forward a chunk unless muted. */
63
+ _write(chunk, encoding, callback) {
64
+ if (this.muted) {
65
+ callback();
66
+ return;
67
+ }
68
+ const done = () => callback();
69
+ if (typeof chunk === "string") this.target.write(chunk, encoding, done);
70
+ else this.target.write(chunk, done);
71
+ }
72
+ /** Write straight to the wrapped stream, bypassing the mute. */
73
+ writeUnmuted(text) {
74
+ this.target.write(text);
75
+ }
76
+ };
77
+ var ReadlineWizardIO = class {
78
+ /**
79
+ * Underlying readline interface.
80
+ *
81
+ * Exposed as `protected` (not `private`) so tests can emit `'SIGINT'` on it
82
+ * to simulate Ctrl-C without requiring a real TTY. Production code MUST NOT
83
+ * access this field directly.
84
+ *
85
+ * @internal
86
+ */
87
+ rl;
88
+ /** The stream readline echoes into; muted while a secret is typed. */
89
+ output;
90
+ /** Whether the input stream is a TTY (the terminal echoes unless readline owns it). */
91
+ inputIsTTY;
92
+ /** The input stream (its keypress events drive the secret mask). */
93
+ inStream;
94
+ /** AbortController aborted when stdin closes — surfaced as {@link StdinClosedError}. */
95
+ eofController;
96
+ /**
97
+ * Whether a SIGINT was received. Set before throwing so `rethrowEof` does
98
+ * not mistakenly wrap the AbortError as a `StdinClosedError`.
99
+ */
100
+ sigintReceived = false;
101
+ /**
102
+ * Construct a readline interface bound to the supplied streams.
103
+ *
104
+ * The defaults (`process.stdin` / `process.stdout`) are correct for
105
+ * production use; tests inject in-memory streams.
106
+ *
107
+ * @param inStream - Input stream; defaults to `process.stdin`.
108
+ * @param outStream - Output stream passed to readline for terminal-echo
109
+ * purposes only; informational output goes to stderr. CLI commands pass
110
+ * `process.stderr` so prompts never reach a redirected stdout.
111
+ * @param options - See {@link ReadlineWizardIOOptions}; terminal mode
112
+ * defaults to the input stream's `isTTY`.
113
+ */
114
+ constructor(inStream = input, outStream = output, options = {}) {
115
+ this.eofController = new AbortController();
116
+ this.output = new MutableOutput(outStream);
117
+ this.inStream = inStream;
118
+ this.inputIsTTY = streamIsTTY(inStream);
119
+ this.rl = readline.createInterface({
120
+ input: inStream,
121
+ output: this.output,
122
+ terminal: options.terminal ?? this.inputIsTTY,
123
+ // No history: a secret must never be recallable with Up-arrow.
124
+ historySize: 0
125
+ });
126
+ this.rl.on("close", () => {
127
+ if (!this.eofController.signal.aborted) {
128
+ this.eofController.abort(new StdinClosedError());
129
+ }
130
+ });
131
+ this.rl.on("SIGINT", () => {
132
+ this.sigintReceived = true;
133
+ if (!this.eofController.signal.aborted) {
134
+ this.eofController.abort(new WizardInterruptError("interrupted by user"));
135
+ }
136
+ });
137
+ }
138
+ /**
139
+ * Release the underlying readline interface.
140
+ *
141
+ * Safe to call multiple times — `readline.Interface.close()` is
142
+ * idempotent.
143
+ */
144
+ close() {
145
+ this.rl.close();
146
+ }
147
+ /**
148
+ * Wrap an AbortError thrown by `rl.question()` into the appropriate
149
+ * typed error.
150
+ *
151
+ * - SIGINT received → throw {@link WizardInterruptError}
152
+ * - Stdin EOF → throw {@link StdinClosedError}
153
+ * - Any other error → re-throw as-is.
154
+ *
155
+ * @internal
156
+ */
157
+ rethrowEof(err) {
158
+ if (err instanceof Error && (err.name === "AbortError" || err.name === "AbortSignal") && this.eofController.signal.aborted) {
159
+ if (this.sigintReceived) {
160
+ throw new WizardInterruptError("interrupted by user");
161
+ }
162
+ throw new StdinClosedError();
163
+ }
164
+ throw err;
165
+ }
166
+ async prompt(question) {
167
+ try {
168
+ const raw = await this.rl.question(`${question} `, {
169
+ signal: this.eofController.signal
170
+ });
171
+ return stripBracketedPaste(raw);
172
+ } catch (err) {
173
+ this.rethrowEof(err);
174
+ }
175
+ }
176
+ /**
177
+ * Ask for a secret without echoing it: the question is written, then the
178
+ * output stream is muted until the answer is submitted. Bracketed-paste
179
+ * markers are stripped like {@link prompt}. The answer is removed from
180
+ * readline's history afterwards.
181
+ *
182
+ * @param question - The question, e.g. `API key:`.
183
+ * @returns The trimmed answer; `''` when none was given.
184
+ * @throws Error with {@link SECRET_ECHO_REFUSED_MESSAGE} when stdin is a
185
+ * terminal but terminal mode is off (the terminal would echo the key).
186
+ * @task T12714
187
+ */
188
+ async secret(question) {
189
+ if (this.inputIsTTY && !this.rl.terminal) throw new Error(SECRET_ECHO_REFUSED_MESSAGE);
190
+ this.output.writeUnmuted(`${question} `);
191
+ this.output.muted = true;
192
+ const stopMask = this.echoMask();
193
+ let raw;
194
+ try {
195
+ raw = await this.rl.question("", { signal: this.eofController.signal });
196
+ return stripBracketedPaste(raw);
197
+ } catch (err) {
198
+ return this.rethrowEof(err);
199
+ } finally {
200
+ stopMask();
201
+ this.output.muted = false;
202
+ this.output.writeUnmuted("\n");
203
+ if (raw !== void 0) this.scrubHistory(raw);
204
+ }
205
+ }
206
+ /**
207
+ * While a secret is typed (readline's echo muted), echo one
208
+ * {@link SECRET_MASK_CHAR} per character in the line and erase one per
209
+ * deleted character. Runs after readline's own keypress handler (registered
210
+ * first), so `rl.line` is already updated; only its LENGTH is read. The
211
+ * submitting key (Enter) is ignored, since readline clears the line then.
212
+ *
213
+ * @returns A function that stops the echo.
214
+ */
215
+ echoMask() {
216
+ if (!this.rl.terminal) return () => {
217
+ };
218
+ let shown = 0;
219
+ const onKeypress = (_str, key) => {
220
+ if (key?.name === "return" || key?.name === "enter") return;
221
+ const length = this.rl.line.length;
222
+ if (length > shown) this.output.writeUnmuted(SECRET_MASK_CHAR.repeat(length - shown));
223
+ else if (length < shown) this.output.writeUnmuted("\b \b".repeat(shown - length));
224
+ shown = length;
225
+ };
226
+ this.inStream.on("keypress", onKeypress);
227
+ return () => {
228
+ this.inStream.off("keypress", onKeypress);
229
+ };
230
+ }
231
+ /**
232
+ * Remove every history entry equal to `line`. `history` is a runtime field
233
+ * of `readline.Interface` that `@types/node` does not declare, so it is
234
+ * read reflectively and checked before use.
235
+ *
236
+ * @param line - The exact line readline recorded.
237
+ */
238
+ scrubHistory(line) {
239
+ const history = Reflect.get(this.rl, "history");
240
+ if (!Array.isArray(history)) return;
241
+ for (let i = history.length - 1; i >= 0; i--) {
242
+ if (history[i] === line) history.splice(i, 1);
243
+ }
244
+ }
245
+ async confirm(question, defaultValue) {
246
+ const hint = defaultValue === void 0 ? "[y/n]" : defaultValue ? "[Y/n]" : "[y/N]";
247
+ let raw;
248
+ try {
249
+ raw = stripBracketedPaste(
250
+ await this.rl.question(`${question} ${hint} `, { signal: this.eofController.signal })
251
+ ).toLowerCase();
252
+ } catch (err) {
253
+ this.rethrowEof(err);
254
+ }
255
+ if (raw === "") {
256
+ if (defaultValue === void 0) {
257
+ return this.confirm(question, defaultValue);
258
+ }
259
+ return defaultValue;
260
+ }
261
+ if (raw === "y" || raw === "yes") return true;
262
+ if (raw === "n" || raw === "no") return false;
263
+ return this.confirm(question, defaultValue);
264
+ }
265
+ async select(question, options) {
266
+ if (options.length === 0) {
267
+ throw new Error(`ReadlineWizardIO.select: option list is empty for '${question}'`);
268
+ }
269
+ process.stderr.write(`${question}
270
+ `);
271
+ options.forEach((opt, idx) => {
272
+ process.stderr.write(` ${idx + 1}) ${opt}
273
+ `);
274
+ });
275
+ const MAX_RETRIES = 10;
276
+ for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
277
+ let raw;
278
+ try {
279
+ raw = stripBracketedPaste(
280
+ await this.rl.question(`Choose [1-${options.length}]: `, {
281
+ signal: this.eofController.signal
282
+ })
283
+ );
284
+ } catch (err) {
285
+ this.rethrowEof(err);
286
+ }
287
+ if (/^\d+$/.test(raw)) {
288
+ const idx = Number.parseInt(raw, 10) - 1;
289
+ if (idx >= 0 && idx < options.length) return options[idx];
290
+ }
291
+ if (options.includes(raw)) return raw;
292
+ process.stderr.write(`Invalid choice '${raw}'. Try again.
293
+ `);
294
+ }
295
+ throw new Error(
296
+ `ReadlineWizardIO.select: gave up after ${MAX_RETRIES} invalid responses for '${question}'`
297
+ );
298
+ }
299
+ /** Informational message — goes to stderr, never stdout. */
300
+ info(message) {
301
+ process.stderr.write(`${message}
302
+ `);
303
+ }
304
+ /** Non-fatal warning — goes to stderr. */
305
+ warn(message) {
306
+ process.stderr.write(`${message}
307
+ `);
308
+ }
309
+ /** Error message — goes to stderr. */
310
+ error(message) {
311
+ process.stderr.write(`${message}
312
+ `);
313
+ }
314
+ };
315
+
316
+ export {
317
+ StdinClosedError,
318
+ ReadlineWizardIO
319
+ };
320
+ //# sourceMappingURL=chunk-GZFVDR44.js.map
@@ -0,0 +1,83 @@
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
+ } from "./chunk-PKKZPOOP.js";
19
+ import {
20
+ cliError,
21
+ cliOutput
22
+ } from "./chunk-4RGSNUUP.js";
23
+
24
+ // packages/cleo/src/cli/commands/doctor-global-delivery.ts
25
+ import {
26
+ auditGlobalDelivery,
27
+ repairGlobalDelivery
28
+ } from "@cleocode/core/system/global-delivery.js";
29
+ var doctorGlobalDeliveryCommand = defineCommand({
30
+ meta: {
31
+ name: "global-delivery",
32
+ description: "Check that ~/.cleo, the global hub reference and every harness CLEO skill install resolve. Read-only; --repair relinks them with a receipt (--dry-run to preview)."
33
+ },
34
+ args: {
35
+ repair: {
36
+ type: "boolean",
37
+ description: "Relink ~/.cleo to the OS data dir and every dangling or ~/.cleo-routed skill entry to the physical skills dir (verified symlink, else copy). Appends a receipt."
38
+ },
39
+ "dry-run": {
40
+ type: "boolean",
41
+ description: "With --repair: report the receipt without touching disk"
42
+ },
43
+ json: { type: "boolean", description: "Output as JSON" },
44
+ human: { type: "boolean", description: "Force human-readable output" },
45
+ quiet: { type: "boolean", description: "Suppress non-essential output" }
46
+ },
47
+ async run({ args }) {
48
+ const dryRun = args["dry-run"] === true;
49
+ let result = null;
50
+ if (args.repair === true) {
51
+ try {
52
+ result = await repairGlobalDelivery({ dryRun });
53
+ } catch (err) {
54
+ const message = err instanceof Error ? err.message : String(err);
55
+ cliError(
56
+ message,
57
+ 1,
58
+ {
59
+ name: "E_CLEO_LINK_REPAIR_FAILED",
60
+ fix: "The entry that failed was restored to its previous link (~/.cleo or the skill link). The intent and failed receipts under <cleoHome>/audit list every planned entry with its previous target. On Windows enable Developer Mode or run as administrator, then re-run `cleo doctor global-delivery --repair`."
61
+ },
62
+ { operation: "doctor.global-delivery.run" }
63
+ );
64
+ process.exitCode = 1;
65
+ return;
66
+ }
67
+ }
68
+ const audit = result?.audit ?? await auditGlobalDelivery();
69
+ cliOutput(
70
+ { ...audit, receipt: result?.receipt ?? null },
71
+ { command: "doctor", operation: "doctor.global-delivery.run" }
72
+ );
73
+ const refused = result?.receipt.link.action === "refused";
74
+ if ((refused || !audit.healthy && !dryRun) && (process.exitCode ?? 0) === 0) {
75
+ process.exitCode = 1;
76
+ }
77
+ }
78
+ });
79
+
80
+ export {
81
+ doctorGlobalDeliveryCommand
82
+ };
83
+ //# sourceMappingURL=chunk-HFLLZE6A.js.map