@cleocode/cleo 2026.10.3 → 2026.10.4

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 (307) hide show
  1. package/bin/cleo.js +11 -1
  2. package/dist/cli/adapter-LVXHFBC4.js +158 -0
  3. package/dist/cli/add-WUAV7LDT.js +443 -0
  4. package/dist/cli/add-batch-U2DLKAQC.js +163 -0
  5. package/dist/cli/admin-I7BQYVZD.js +340 -0
  6. package/dist/cli/adr-K2THMQBS.js +171 -0
  7. package/dist/cli/agent-WQ6XY2DW.js +2366 -0
  8. package/dist/cli/agent-outputs-BJIYLVTU.js +84 -0
  9. package/dist/cli/analyze-PGQZWGOC.js +48 -0
  10. package/dist/cli/archive-5LZPF7C3.js +64 -0
  11. package/dist/cli/archive-stats-U6CYC6JM.js +100 -0
  12. package/dist/cli/attention-SOURWCNI.js +167 -0
  13. package/dist/cli/audit-FO2Y4LH2.js +122 -0
  14. package/dist/cli/auth-ED7TAIXI.js +491 -0
  15. package/dist/cli/backfill-32TRAYRD.js +156 -0
  16. package/dist/cli/backup-LEJMZJKL.js +587 -0
  17. package/dist/cli/backup-inspect-6HPLUEI2.js +26 -0
  18. package/dist/cli/backup-recover-2BTYBZU2.js +29 -0
  19. package/dist/cli/blockers-5JULUJTV.js +54 -0
  20. package/dist/cli/brain-273N3FW4.js +400 -0
  21. package/dist/cli/briefing-7H6OLECX.js +212 -0
  22. package/dist/cli/caamp-MFQVN6VU.js +181 -0
  23. package/dist/cli/cancel-SCMJTXZB.js +84 -0
  24. package/dist/cli/canon-NPF5RODM.js +142 -0
  25. package/dist/cli/canon-docs-2GTOLF7Y.js +26 -0
  26. package/dist/cli/cant-46XCUP4P.js +239 -0
  27. package/dist/cli/changeset-32NMBGG2.js +248 -0
  28. package/dist/cli/check-RWJLBCI2.js +907 -0
  29. package/dist/cli/checkpoint-37HMMKD7.js +128 -0
  30. package/dist/cli/chunk-2JIJD2I7.js +108 -0
  31. package/dist/cli/chunk-37NU2XDP.js +171 -0
  32. package/dist/cli/chunk-3IOQVUO7.js +17308 -0
  33. package/dist/cli/chunk-3PGH67MT.js +175 -0
  34. package/dist/cli/chunk-3ZO3M37V.js +1002 -0
  35. package/dist/cli/chunk-47JYZAMS.js +30 -0
  36. package/dist/cli/chunk-5J2VH3BC.js +66 -0
  37. package/dist/cli/chunk-5ZFFUFH7.js +92 -0
  38. package/dist/cli/chunk-6JSJNYH2.js +114 -0
  39. package/dist/cli/chunk-7INMKEAD.js +85 -0
  40. package/dist/cli/chunk-A2IUEIM5.js +278 -0
  41. package/dist/cli/chunk-AWCQH2W5.js +35 -0
  42. package/dist/cli/chunk-AYA6F4ZT.js +56 -0
  43. package/dist/cli/chunk-BCEXRFA2.js +76 -0
  44. package/dist/cli/chunk-BPEVD37G.js +124 -0
  45. package/dist/cli/chunk-C3B7C43W.js +16 -0
  46. package/dist/cli/chunk-DVTPIZJM.js +72 -0
  47. package/dist/cli/chunk-DYABOIHB.js +96 -0
  48. package/dist/cli/chunk-EBRZ76HS.js +51 -0
  49. package/dist/cli/chunk-EGOTK2HA.js +57 -0
  50. package/dist/cli/chunk-EOPQFCSR.js +148 -0
  51. package/dist/cli/chunk-FORFDPP5.js +288 -0
  52. package/dist/cli/chunk-GFGLLDXX.js +110 -0
  53. package/dist/cli/chunk-GH37QXW5.js +280 -0
  54. package/dist/cli/chunk-GZFVDR44.js +320 -0
  55. package/dist/cli/chunk-I3CRQQAD.js +225 -0
  56. package/dist/cli/chunk-J3ZFM3UQ.js +754 -0
  57. package/dist/cli/chunk-JNZJPIPJ.js +90 -0
  58. package/dist/cli/chunk-KHB52JNB.js +209 -0
  59. package/dist/cli/chunk-KJDWWQFY.js +46 -0
  60. package/dist/cli/chunk-LKNUA3SB.js +83 -0
  61. package/dist/cli/chunk-LVGIFMCV.js +163 -0
  62. package/dist/cli/chunk-LWQBJQSE.js +67 -0
  63. package/dist/cli/chunk-MNJRLSEQ.js +107 -0
  64. package/dist/cli/chunk-NRKWJLMS.js +91 -0
  65. package/dist/cli/chunk-NSHV2JNM.js +48 -0
  66. package/dist/cli/chunk-NWTATTEQ.js +210 -0
  67. package/dist/cli/chunk-OAPN46TC.js +89 -0
  68. package/dist/cli/chunk-OGV57L4J.js +59 -0
  69. package/dist/cli/chunk-OILHT47L.js +252 -0
  70. package/dist/cli/chunk-OPTEQKBB.js +258 -0
  71. package/dist/cli/chunk-PKKZPOOP.js +352 -0
  72. package/dist/cli/chunk-QA6T2LQ5.js +71 -0
  73. package/dist/cli/chunk-QFFQSKRC.js +4497 -0
  74. package/dist/cli/chunk-QPUY2HQZ.js +74 -0
  75. package/dist/cli/chunk-REUTEW3O.js +258 -0
  76. package/dist/cli/chunk-S24YI723.js +88 -0
  77. package/dist/cli/chunk-SXXOC6KZ.js +209 -0
  78. package/dist/cli/chunk-ULN4OKQQ.js +259 -0
  79. package/dist/cli/chunk-V5GBGOGM.js +46 -0
  80. package/dist/cli/chunk-VLEYOOPH.js +31 -0
  81. package/dist/cli/chunk-W33Q3FBH.js +66 -0
  82. package/dist/cli/chunk-W3JLYKKY.js +140 -0
  83. package/dist/cli/chunk-XRAX6XFP.js +48 -0
  84. package/dist/cli/chunk-YGKEECTI.js +78 -0
  85. package/dist/cli/chunk-YUZJI67I.js +108 -0
  86. package/dist/cli/chunk-YY66LFZF.js +29 -0
  87. package/dist/cli/chunk-ZBISIPCK.js +78 -0
  88. package/dist/cli/chunk-ZZTHTMQP.js +77 -0
  89. package/dist/cli/claim-KPENYHIQ.js +96 -0
  90. package/dist/cli/classify-DRVMCFQU.js +117 -0
  91. package/dist/cli/cli-T3CR7J57.js +48 -0
  92. package/dist/cli/cloud-PPQ4O5TX.js +565 -0
  93. package/dist/cli/cockpit-RZKLGYPN.js +790 -0
  94. package/dist/cli/code-Z5CTMVTD.js +178 -0
  95. package/dist/cli/complete-UBOCOBRB.js +34 -0
  96. package/dist/cli/complexity-BV2AGQRZ.js +56 -0
  97. package/dist/cli/compliance-32PD5Y47.js +276 -0
  98. package/dist/cli/conduit-VDKCH33F.js +307 -0
  99. package/dist/cli/config-I72JAXK4.js +516 -0
  100. package/dist/cli/consensus-LFILLSTK.js +121 -0
  101. package/dist/cli/context-XUUVFVTP.js +141 -0
  102. package/dist/cli/contribution-37NQ4N5R.js +111 -0
  103. package/dist/cli/curator-TFDXU2EX.js +139 -0
  104. package/dist/cli/current-C4SN5BWV.js +42 -0
  105. package/dist/cli/daemon-DV25JQ62.js +451 -0
  106. package/dist/cli/dash-TFU4RLQW.js +70 -0
  107. package/dist/cli/decide-5VPMNTSI.js +419 -0
  108. package/dist/cli/decompose-KOYEZNJL.js +77 -0
  109. package/dist/cli/decomposition-7OHUFIQN.js +121 -0
  110. package/dist/cli/delete-Q7YCAFY5.js +68 -0
  111. package/dist/cli/deps-6UZKLDGJ.js +463 -0
  112. package/dist/cli/detect-FERY35UL.js +45 -0
  113. package/dist/cli/detect-drift-UL2JTPUK.js +408 -0
  114. package/dist/cli/diagnostics-TI5QAZXR.js +132 -0
  115. package/dist/cli/docs-QI2PRN3T.js +3095 -0
  116. package/dist/cli/doctor-AX5TICQO.js +1253 -0
  117. package/dist/cli/doctor-ac-bindings-YPMYHU2G.js +26 -0
  118. package/dist/cli/doctor-acceptance-drift-PYNFGMKB.js +26 -0
  119. package/dist/cli/doctor-credentials-UZRIADKM.js +26 -0
  120. package/dist/cli/doctor-db-substrate-Q2TOYM2S.js +27 -0
  121. package/dist/cli/doctor-dep-cycles-GCVYZY6F.js +26 -0
  122. package/dist/cli/doctor-exodus-RO5SUTC2.js +26 -0
  123. package/dist/cli/doctor-exodus-residue-EM2AWQXP.js +26 -0
  124. package/dist/cli/doctor-fk-check-Q3FOLECE.js +26 -0
  125. package/dist/cli/doctor-global-delivery-TNOAQ3NP.js +26 -0
  126. package/dist/cli/doctor-heavy-command-hook-IO3QAQLG.js +26 -0
  127. package/dist/cli/doctor-legacy-backups-O2YH5VLS.js +26 -0
  128. package/dist/cli/doctor-legacy-reaper-VSEJEIFA.js +26 -0
  129. package/dist/cli/doctor-malformed-ids-LQ766V5K.js +26 -0
  130. package/dist/cli/doctor-manifest-rows-6FQDNHLH.js +26 -0
  131. package/dist/cli/doctor-memory-guard-J4PSEKB5.js +26 -0
  132. package/dist/cli/doctor-migrations-ONOH56YM.js +26 -0
  133. package/dist/cli/doctor-nexus-residency-FUQAX7PV.js +26 -0
  134. package/dist/cli/doctor-project-identity-GUDK3HYX.js +26 -0
  135. package/dist/cli/doctor-projects-7L3BNL4O.js +30 -0
  136. package/dist/cli/doctor-projects-registry-TEAVHFQU.js +26 -0
  137. package/dist/cli/doctor-release-readiness-IEGHX6SL.js +26 -0
  138. package/dist/cli/doctor-repair-NBONOSZU.js +26 -0
  139. package/dist/cli/doctor-skill-fixtures-7Y6L34A3.js +26 -0
  140. package/dist/cli/doctor-split-brain-TUKIGVHF.js +26 -0
  141. package/dist/cli/doctor-superseded-store-BHZY2B2L.js +26 -0
  142. package/dist/cli/doctor-tool-locks-REQMIVYK.js +26 -0
  143. package/dist/cli/doctor-twin-collapse-222GOSPE.js +26 -0
  144. package/dist/cli/doctor-worktree-stores-J7TCRVJ3.js +26 -0
  145. package/dist/cli/done-V3AOO65B.js +195 -0
  146. package/dist/cli/dynamic-RR4HB7BB.js +29 -0
  147. package/dist/cli/event-EGNPGE5A.js +372 -0
  148. package/dist/cli/exists-H4SDCBPL.js +65 -0
  149. package/dist/cli/exodus-KALO3B3X.js +401 -0
  150. package/dist/cli/export-ROFOCG4M.js +92 -0
  151. package/dist/cli/export-tasks-US3WBIEQ.js +96 -0
  152. package/dist/cli/federation-SUIB5QWT.js +145 -0
  153. package/dist/cli/find-YICG4BG6.js +177 -0
  154. package/dist/cli/focus-TKCZPKOM.js +55 -0
  155. package/dist/cli/gateway-H4HFDC3E.js +77 -0
  156. package/dist/cli/gateway-auto-start-EDK7XI6E.js +36 -0
  157. package/dist/cli/gc-5R2TUY5T.js +291 -0
  158. package/dist/cli/go-PRQFK5YG.js +206 -0
  159. package/dist/cli/goal-7CZRMLHC.js +212 -0
  160. package/dist/cli/grade-PY2YRPUS.js +56 -0
  161. package/dist/cli/graph-XIXMCFKG.js +878 -0
  162. package/dist/cli/history-EIXADPAD.js +137 -0
  163. package/dist/cli/hook-UF7J7R6D.js +57 -0
  164. package/dist/cli/hook-entry.js +244 -19
  165. package/dist/cli/hygiene-3QZ2NI7P.js +55 -0
  166. package/dist/cli/import-R73SO444.js +88 -0
  167. package/dist/cli/import-tasks-O22FZJ4U.js +108 -0
  168. package/dist/cli/index.js +419 -94612
  169. package/dist/cli/init-IHEJDQWU.js +40 -0
  170. package/dist/cli/inject-LSRVWNCP.js +82 -0
  171. package/dist/cli/install-global-4AZUCH6U.js +95 -0
  172. package/dist/cli/intelligence-2OSFOGD2.js +181 -0
  173. package/dist/cli/issue-IIWEDNFC.js +158 -0
  174. package/dist/cli/janitor-GPMC7VOR.js +111 -0
  175. package/dist/cli/labels-5NPOIQXN.js +87 -0
  176. package/dist/cli/lifecycle-4FFS2K2T.js +272 -0
  177. package/dist/cli/list-47KEUGPQ.js +108 -0
  178. package/dist/cli/llm-G5B3I6GD.js +703 -0
  179. package/dist/cli/llm-cost-S7RS6BVA.js +25 -0
  180. package/dist/cli/llm-stream-24A45NTS.js +27 -0
  181. package/dist/cli/log-XF6H2XSD.js +75 -0
  182. package/dist/cli/login-LBPLGHYG.js +43 -0
  183. package/dist/cli/logout-SX4JSJIV.js +74 -0
  184. package/dist/cli/manifest-NMCW4PIW.js +353 -0
  185. package/dist/cli/map-BU72KMGF.js +52 -0
  186. package/dist/cli/memory-UHYIVGVM.js +1956 -0
  187. package/dist/cli/migrate-agents-v2-OO7OILZK.js +33 -0
  188. package/dist/cli/migrate-claude-mem-EDNYUY3K.js +201 -0
  189. package/dist/cli/next-RZFRG5X7.js +56 -0
  190. package/dist/cli/nexus-4S4Z5EVU.js +2923 -0
  191. package/dist/cli/ops-KR7AWCG3.js +51 -0
  192. package/dist/cli/orchestrate-HOYZY3VX.js +948 -0
  193. package/dist/cli/otel-U7IIRBCT.js +188 -0
  194. package/dist/cli/phase-NYZFHUE5.js +220 -0
  195. package/dist/cli/pivot-FF2CVUZL.js +87 -0
  196. package/dist/cli/plan-3SL2NTRV.js +48 -0
  197. package/dist/cli/playbook-2FCBV7N3.js +229 -0
  198. package/dist/cli/project-WDX2TGMC.js +330 -0
  199. package/dist/cli/promote-YINYFBZY.js +52 -0
  200. package/dist/cli/provenance-C7AYD7WG.js +128 -0
  201. package/dist/cli/provider-QLJEDQBR.js +212 -0
  202. package/dist/cli/reason-JF5BHBM5.js +137 -0
  203. package/dist/cli/reconcile-NMISHDGX.js +127 -0
  204. package/dist/cli/refresh-memory-EY5YNICV.js +45 -0
  205. package/dist/cli/relates-R3ZPICAY.js +259 -0
  206. package/dist/cli/release-4ZJTMUUT.js +524 -0
  207. package/dist/cli/remote-QSONJDIK.js +279 -0
  208. package/dist/cli/renderers-64OR3IWX.js +37 -0
  209. package/dist/cli/reorder-J3DOE7ST.js +86 -0
  210. package/dist/cli/reparent-2OUMKEZX.js +58 -0
  211. package/dist/cli/req-TZB7OFKO.js +129 -0
  212. package/dist/cli/research-MTD7EX45.js +365 -0
  213. package/dist/cli/restore-VEUOX7NF.js +423 -0
  214. package/dist/cli/revert-3YF2IL5G.js +240 -0
  215. package/dist/cli/roadmap-7OOQLXKG.js +61 -0
  216. package/dist/cli/run-2U5NZV5Z.js +211 -0
  217. package/dist/cli/safestop-VR4VK56D.js +88 -0
  218. package/dist/cli/saga-SEWPIOX2.js +285 -0
  219. package/dist/cli/schema-C52WZ35V.js +195 -0
  220. package/dist/cli/self-update-GQIGUDPS.js +504 -0
  221. package/dist/cli/selfimprove-3Y5L4ECT.js +88 -0
  222. package/dist/cli/sentient-M4YMAVGV.js +1088 -0
  223. package/dist/cli/sequence-6UBMA4IF.js +93 -0
  224. package/dist/cli/service-5R7SILZ7.js +155 -0
  225. package/dist/cli/session-3C6AAC4Y.js +707 -0
  226. package/dist/cli/setup-BTUBW5PU.js +323 -0
  227. package/dist/cli/show-MXT2V7TF.js +122 -0
  228. package/dist/cli/skill-GFUZOU2C.js +84 -0
  229. package/dist/cli/skills-EDWLKAF3.js +928 -0
  230. package/dist/cli/smoke-provider-SKUFMZXU.js +218 -0
  231. package/dist/cli/snapshot-GUWMURCM.js +119 -0
  232. package/dist/cli/src-66GAKPXR.js +80 -0
  233. package/dist/cli/start-QFG56RGN.js +67 -0
  234. package/dist/cli/stats-GW55P7RR.js +95 -0
  235. package/dist/cli/status-46HTKNRR.js +157 -0
  236. package/dist/cli/sticky-2DUZOUGI.js +338 -0
  237. package/dist/cli/stop-J2QEUKHX.js +42 -0
  238. package/dist/cli/sync-GJP2QYT5.js +154 -0
  239. package/dist/cli/tasks-BNXTM7PB.js +174 -0
  240. package/dist/cli/telemetry-55Z2XJWL.js +120 -0
  241. package/dist/cli/templates-7O77TKPV.js +611 -0
  242. package/dist/cli/testing-37YTBNKP.js +146 -0
  243. package/dist/cli/token-UAVJMNUI.js +220 -0
  244. package/dist/cli/transcript-LORQTV5Z.js +440 -0
  245. package/dist/cli/tui-BPUFHYKK.js +51 -0
  246. package/dist/cli/update-NVCYV2FT.js +476 -0
  247. package/dist/cli/upgrade-OXJXOGEF.js +243 -0
  248. package/dist/cli/verify-LYLDHPT2.js +190 -0
  249. package/dist/cli/web-QP2RP266.js +275 -0
  250. package/dist/cli/workgraph-FXBSZDQE.js +232 -0
  251. package/dist/cli/worktree-6RXAJIST.js +370 -0
  252. package/package.json +13 -13
  253. package/studio-dist/client/_app/immutable/chunks/{DMj27Pxj.js → Btgeq_wq.js} +1 -1
  254. package/studio-dist/client/_app/immutable/chunks/{qq3pe1aT.js → CgBjxmu6.js} +1 -1
  255. package/studio-dist/client/_app/immutable/chunks/{Dc2owyvE.js → DgEKqO6r.js} +1 -1
  256. package/studio-dist/client/_app/immutable/chunks/t81h7afa.js +1 -0
  257. package/studio-dist/client/_app/immutable/entry/{app.CHWXLeE9.js → app.a02HWaRB.js} +2 -2
  258. package/studio-dist/client/_app/immutable/entry/start.BreMSngo.js +1 -0
  259. package/studio-dist/client/_app/immutable/nodes/{0.DmKQGvFh.js → 0.nTXyRfc-.js} +1 -1
  260. package/studio-dist/client/_app/immutable/nodes/{1.DqJk_REO.js → 1.4zrWeHtl.js} +1 -1
  261. package/studio-dist/client/_app/immutable/nodes/{15.GUy6kdW1.js → 15.D9mk4JyY.js} +1 -1
  262. package/studio-dist/client/_app/immutable/nodes/{16.CcnKZ8f9.js → 16._-wt-sQf.js} +1 -1
  263. package/studio-dist/client/_app/immutable/nodes/{17.DAlQF3lQ.js → 17.CUu6LQDj.js} +1 -1
  264. package/studio-dist/client/_app/immutable/nodes/{18.vQFr-vFj.js → 18.Dz4QRTkX.js} +1 -1
  265. package/studio-dist/client/_app/immutable/nodes/{20.GVOj5j_r.js → 20.CJ2_EB0U.js} +1 -1
  266. package/studio-dist/client/_app/immutable/nodes/{24.2-wC6DOh.js → 24.Igj2FS7k.js} +1 -1
  267. package/studio-dist/client/_app/immutable/nodes/{25.D1vYaH8g.js → 25.BnATjVGN.js} +2 -2
  268. package/studio-dist/client/_app/immutable/nodes/{26.C3rNqzZF.js → 26.6iPyjT44.js} +1 -1
  269. package/studio-dist/client/_app/immutable/nodes/{3.b-7pzc3M.js → 3.AA5GwNgP.js} +1 -1
  270. package/studio-dist/client/_app/version.json +1 -1
  271. package/studio-dist/server/chunks/{0-BaCce-O1.js → 0-DGmsoBYm.js} +3 -3
  272. package/studio-dist/server/chunks/1-8PfxPvlK.js +9 -0
  273. package/studio-dist/server/chunks/{15-DRMOSIC9.js → 15-Bg6YTndh.js} +3 -3
  274. package/studio-dist/server/chunks/{16-BulXhoZZ.js → 16-BObLwgyD.js} +3 -3
  275. package/studio-dist/server/chunks/{17-DUEOCM0H.js → 17-BNXGyAHX.js} +3 -3
  276. package/studio-dist/server/chunks/{18-DP7Q8zPs.js → 18-UqQFRIID.js} +3 -3
  277. package/studio-dist/server/chunks/{20-9ta6MI7q.js → 20-CMn8a_yP.js} +3 -3
  278. package/studio-dist/server/chunks/{24-DysdL1ab.js → 24-BuOTDzib.js} +3 -3
  279. package/studio-dist/server/chunks/{25-CYsps38R.js → 25-CIMSmjVx.js} +4 -4
  280. package/studio-dist/server/chunks/{26-Df4YXgg0.js → 26-DWGObn2T.js} +3 -3
  281. package/studio-dist/server/chunks/{3-BEhOhYpL.js → 3-CyiffdJZ.js} +3 -3
  282. package/studio-dist/server/chunks/{_layout.svelte-CnLcXYG-.js → _layout.svelte-DYtClaIk.js} +4 -4
  283. package/studio-dist/server/chunks/{_page.svelte-HUqTICJR.js → _page.svelte-1h9E6s_f.js} +3 -3
  284. package/studio-dist/server/chunks/{_page.svelte-DOl0DGOO.js → _page.svelte-BNNF62Nm.js} +3 -3
  285. package/studio-dist/server/chunks/{_page.svelte-DzcZljiy.js → _page.svelte-BT1EUadj.js} +5 -5
  286. package/studio-dist/server/chunks/{_page.svelte-Dv8tmDEC.js → _page.svelte-Bip079LT.js} +3 -3
  287. package/studio-dist/server/chunks/{_page.svelte-DGhXqeRc.js → _page.svelte-CEATWp_5.js} +3 -3
  288. package/studio-dist/server/chunks/{_page.svelte-C0qgUvzA.js → _page.svelte-CV3xiD1y.js} +4 -4
  289. package/studio-dist/server/chunks/{_page.svelte-CbyEPj2j.js → _page.svelte-Cv_KVJDV.js} +3 -3
  290. package/studio-dist/server/chunks/{_page.svelte-ui7LnWkL.js → _page.svelte-DSSy6LuK.js} +3 -3
  291. package/studio-dist/server/chunks/{_page.svelte-Da4q5l93.js → _page.svelte-TF795TAS.js} +3 -3
  292. package/studio-dist/server/chunks/{_server.ts-CnKVmf_s.js → _server.ts-BlhRFLY3.js} +2 -2
  293. package/studio-dist/server/chunks/{_server.ts-Cr57EKWf.js → _server.ts-C4w6UdU0.js} +3 -3
  294. package/studio-dist/server/chunks/{_server.ts-P4wVVksg.js → _server.ts-CzrwbhkQ.js} +3 -3
  295. package/studio-dist/server/chunks/{_server.ts-2BazvYRP.js → _server.ts-DWt8Dziu.js} +3 -3
  296. package/studio-dist/server/chunks/{_server.ts-C0evMKCk.js → _server.ts-Db6mEile.js} +3 -3
  297. package/studio-dist/server/chunks/{client-CPM4LrO2.js → client-D8f2k-H_.js} +2 -2
  298. package/studio-dist/server/chunks/{dist-CdoCt9zT.js → dist-B8xbIrdB.js} +3 -1
  299. package/studio-dist/server/chunks/{error.svelte-ShcZo43D.js → error.svelte-DbbOwIme.js} +3 -3
  300. package/studio-dist/server/chunks/{http-BiQjEmVU.js → http-1ftNGTs5.js} +2 -2
  301. package/studio-dist/server/chunks/{internal-Cgsrya1j.js → internal-CTULuLPB.js} +2 -2
  302. package/studio-dist/server/chunks/{stores-BGrpEDMK.js → stores-CS5XOReX.js} +2 -2
  303. package/studio-dist/server/index.js +1 -1
  304. package/studio-dist/server/manifest.js +17 -17
  305. package/studio-dist/client/_app/immutable/chunks/Bw6J8NDM.js +0 -1
  306. package/studio-dist/client/_app/immutable/entry/start.C9bwPpvc.js +0 -1
  307. package/studio-dist/server/chunks/1-CVo7Nk6d.js +0 -9
@@ -0,0 +1,907 @@
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
+ getOperationParams,
18
+ paramsToCittyArgs
19
+ } from "./chunk-W33Q3FBH.js";
20
+ import {
21
+ negatedFlag
22
+ } from "./chunk-47JYZAMS.js";
23
+ import {
24
+ defineCommand,
25
+ showUsage
26
+ } from "./chunk-PKKZPOOP.js";
27
+ import {
28
+ dispatchFromCli
29
+ } from "./chunk-3IOQVUO7.js";
30
+ import "./chunk-AWCQH2W5.js";
31
+ import "./chunk-OGV57L4J.js";
32
+ import "./chunk-ZBISIPCK.js";
33
+ import {
34
+ cliError
35
+ } from "./chunk-3ZO3M37V.js";
36
+ import "./chunk-6JSJNYH2.js";
37
+ import "./chunk-QFFQSKRC.js";
38
+
39
+ // packages/cleo/src/cli/commands/check.ts
40
+ import { formatPrGateSummary, runPrGate } from "@cleocode/core/internal";
41
+ function emitPrGateSummary(summary) {
42
+ const envelope = {
43
+ success: summary.passed,
44
+ data: {
45
+ passed: summary.passed,
46
+ summary: summary.summary,
47
+ gates: summary.gates,
48
+ repoRoot: summary.repoRoot
49
+ },
50
+ meta: { operation: "check.pr", timestamp: (/* @__PURE__ */ new Date()).toISOString() }
51
+ };
52
+ process.stdout.write(`${JSON.stringify(envelope)}
53
+ `);
54
+ process.stderr.write(`${formatPrGateSummary(summary)}
55
+ `);
56
+ }
57
+ var SUPPORTED_PROTOCOL_TYPES = [
58
+ "research",
59
+ "consensus",
60
+ "architecture-decision",
61
+ "specification",
62
+ "decomposition",
63
+ "implementation",
64
+ "contribution",
65
+ "validation",
66
+ "testing",
67
+ "release",
68
+ "artifact-publish",
69
+ "provenance"
70
+ ];
71
+ var checkSchemaCommand = defineCommand({
72
+ meta: {
73
+ name: "schema",
74
+ description: "Validate schema (type: todo, config, archive, log, sessions)"
75
+ },
76
+ args: paramsToCittyArgs(getOperationParams("query", "check", "schema")),
77
+ async run({ args }) {
78
+ await dispatchFromCli(
79
+ "query",
80
+ "check",
81
+ "schema",
82
+ { type: args["type"] },
83
+ { command: "check" }
84
+ );
85
+ }
86
+ });
87
+ var checkCoherenceCommand = defineCommand({
88
+ meta: { name: "coherence", description: "Run coherence check across task data" },
89
+ async run() {
90
+ await dispatchFromCli("query", "check", "coherence", {}, { command: "check" });
91
+ }
92
+ });
93
+ var checkTaskCommand = defineCommand({
94
+ meta: { name: "task", description: "Validate a specific task" },
95
+ args: { taskId: { type: "positional", description: "Task ID to validate", required: true } },
96
+ async run({ args }) {
97
+ await dispatchFromCli(
98
+ "query",
99
+ "check",
100
+ "task",
101
+ { taskId: args.taskId },
102
+ { command: "check" }
103
+ );
104
+ }
105
+ });
106
+ var checkOutputCommand = defineCommand({
107
+ meta: {
108
+ name: "output",
109
+ description: "Validate an agent output file against the manifest schema"
110
+ },
111
+ args: {
112
+ filePath: { type: "positional", description: "Path to agent output file", required: true },
113
+ "task-id": { type: "string", description: "Task ID the output file belongs to" }
114
+ },
115
+ async run({ args }) {
116
+ await dispatchFromCli(
117
+ "query",
118
+ "check",
119
+ "output",
120
+ { filePath: args.filePath, taskId: args["task-id"] },
121
+ { command: "check", operation: "check.output" }
122
+ );
123
+ }
124
+ });
125
+ var checkCanonDocsCommand = defineCommand({
126
+ meta: {
127
+ name: "docs",
128
+ description: "CI gate: block raw *.md writes that bypass the docs SSoT (T9796)"
129
+ },
130
+ args: {
131
+ base: {
132
+ type: "string",
133
+ description: "Git ref to diff against (default: origin/main)"
134
+ }
135
+ },
136
+ async run({ args }) {
137
+ await dispatchFromCli(
138
+ "query",
139
+ "check",
140
+ "canon.docs",
141
+ { baseRef: args.base },
142
+ { command: "check", operation: "check.canon.docs" }
143
+ );
144
+ }
145
+ });
146
+ var checkCanonCommand = defineCommand({
147
+ meta: { name: "canon", description: "CI gate: detect canon drift between docs and live code" },
148
+ subCommands: {
149
+ docs: checkCanonDocsCommand
150
+ },
151
+ async run({ cmd, rawArgs }) {
152
+ const firstArg = rawArgs?.find((a) => !a.startsWith("-"));
153
+ if (firstArg && cmd.subCommands && firstArg in cmd.subCommands) return;
154
+ await dispatchFromCli("query", "check", "canon", {}, { command: "check" });
155
+ }
156
+ });
157
+ var checkProtocolCommand = defineCommand({
158
+ meta: {
159
+ name: "protocol",
160
+ description: `Validate any of the 12 RCASD-IVTR+C protocols: ${SUPPORTED_PROTOCOL_TYPES.join(", ")}`
161
+ },
162
+ args: {
163
+ protocolType: {
164
+ type: "positional",
165
+ description: "Protocol type to validate",
166
+ required: true
167
+ },
168
+ "task-id": { type: "string", description: "Task ID to validate (mode=task, default)" },
169
+ "manifest-file": { type: "string", description: "Manifest file to validate (mode=manifest)" },
170
+ strict: { type: "boolean", description: "Exit with error code on violations" },
171
+ "voting-matrix-file": { type: "string", description: "consensus: voting matrix JSON file" },
172
+ "epic-id": { type: "string", description: "decomposition: parent epic ID" },
173
+ "sibling-count": { type: "string", description: "decomposition: actual sibling count" },
174
+ "max-siblings": { type: "string", description: "decomposition: configured max siblings" },
175
+ "spec-file": { type: "string", description: "specification: path to spec markdown" },
176
+ "has-code-changes": {
177
+ type: "boolean",
178
+ description: "research: code changes detected (forbidden)"
179
+ },
180
+ "has-task-tags": {
181
+ type: "boolean",
182
+ description: "implementation: @task tags present in code"
183
+ },
184
+ "has-contribution-tags": {
185
+ type: "boolean",
186
+ description: "contribution: @contribution tags present"
187
+ },
188
+ version: { type: "string", description: "release: target version (semver/calver)" },
189
+ "has-changelog": { type: "boolean", description: "release: changelog updated" },
190
+ "artifact-type": {
191
+ type: "string",
192
+ description: "artifact-publish: artifact handler (npm-package, docker-image, ...)"
193
+ },
194
+ "build-passed": { type: "boolean", description: "artifact-publish: build step succeeded" },
195
+ "has-attestation": {
196
+ type: "boolean",
197
+ description: "provenance: in-toto attestation generated"
198
+ },
199
+ "has-sbom": {
200
+ type: "boolean",
201
+ description: "provenance: SBOM (CycloneDX/SPDX) generated"
202
+ },
203
+ "adr-content": { type: "string", description: "ADR: ADR markdown body for section check" },
204
+ status: {
205
+ type: "string",
206
+ description: "ADR: lifecycle status (proposed|accepted|superseded|deprecated)"
207
+ },
208
+ "hitl-reviewed": { type: "boolean", description: "ADR: HITL review completed" },
209
+ "downstream-flagged": {
210
+ type: "boolean",
211
+ description: "ADR: downstream artifacts flagged for review"
212
+ },
213
+ "persisted-in-db": {
214
+ type: "boolean",
215
+ description: "ADR: persisted in canonical decisions table"
216
+ },
217
+ "spec-match-confirmed": {
218
+ type: "boolean",
219
+ description: "validation: implementation matches spec"
220
+ },
221
+ "test-suite-passed": {
222
+ type: "boolean",
223
+ description: "validation: existing test suite passed"
224
+ },
225
+ "protocol-compliance-checked": {
226
+ type: "boolean",
227
+ description: "validation: upstream protocols checked"
228
+ },
229
+ framework: { type: "string", description: "testing: detected test framework" },
230
+ "tests-run": { type: "string", description: "testing: total tests executed" },
231
+ "tests-passed": { type: "string", description: "testing: tests that passed" },
232
+ "tests-failed": { type: "string", description: "testing: tests that failed" },
233
+ "coverage-percent": { type: "string", description: "testing: coverage percentage" },
234
+ "coverage-threshold": { type: "string", description: "testing: configured coverage threshold" },
235
+ "ivt-loop-converged": { type: "boolean", description: "testing: IVT loop converged on spec" },
236
+ "ivt-loop-iterations": { type: "string", description: "testing: IVT iteration count" }
237
+ },
238
+ async run({ args }) {
239
+ const protocolType = args.protocolType;
240
+ if (!SUPPORTED_PROTOCOL_TYPES.includes(protocolType)) {
241
+ cliError(
242
+ `Unknown protocol type "${protocolType}". Supported: ${SUPPORTED_PROTOCOL_TYPES.join(", ")}`,
243
+ 2,
244
+ {
245
+ name: "E_VALIDATION",
246
+ fix: `Use one of: ${SUPPORTED_PROTOCOL_TYPES.join(", ")}`
247
+ }
248
+ );
249
+ process.exit(2);
250
+ }
251
+ const mode = args["manifest-file"] ? "manifest" : "task";
252
+ await dispatchFromCli(
253
+ "query",
254
+ "check",
255
+ "protocol",
256
+ {
257
+ protocolType,
258
+ mode,
259
+ taskId: args["task-id"],
260
+ manifestFile: args["manifest-file"],
261
+ strict: args.strict,
262
+ votingMatrixFile: args["voting-matrix-file"],
263
+ epicId: args["epic-id"],
264
+ siblingCount: args["sibling-count"] !== void 0 ? Number.parseInt(args["sibling-count"], 10) : void 0,
265
+ maxSiblings: args["max-siblings"] !== void 0 ? Number.parseInt(args["max-siblings"], 10) : void 0,
266
+ specFile: args["spec-file"],
267
+ hasCodeChanges: args["has-code-changes"],
268
+ hasTaskTags: args["has-task-tags"],
269
+ hasContributionTags: args["has-contribution-tags"],
270
+ version: args.version,
271
+ hasChangelog: args["has-changelog"],
272
+ artifactType: args["artifact-type"],
273
+ buildPassed: args["build-passed"],
274
+ hasAttestation: args["has-attestation"],
275
+ hasSbom: args["has-sbom"],
276
+ adrContent: args["adr-content"],
277
+ status: args.status,
278
+ hitlReviewed: args["hitl-reviewed"],
279
+ downstreamFlagged: args["downstream-flagged"],
280
+ persistedInDb: args["persisted-in-db"],
281
+ specMatchConfirmed: args["spec-match-confirmed"],
282
+ testSuitePassed: args["test-suite-passed"],
283
+ protocolComplianceChecked: args["protocol-compliance-checked"],
284
+ framework: args.framework,
285
+ testsRun: args["tests-run"] !== void 0 ? Number.parseInt(args["tests-run"], 10) : void 0,
286
+ testsPassed: args["tests-passed"] !== void 0 ? Number.parseInt(args["tests-passed"], 10) : void 0,
287
+ testsFailed: args["tests-failed"] !== void 0 ? Number.parseInt(args["tests-failed"], 10) : void 0,
288
+ coveragePercent: args["coverage-percent"] !== void 0 ? Number.parseFloat(args["coverage-percent"]) : void 0,
289
+ coverageThreshold: args["coverage-threshold"] !== void 0 ? Number.parseFloat(args["coverage-threshold"]) : void 0,
290
+ ivtLoopConverged: args["ivt-loop-converged"],
291
+ ivtLoopIterations: args["ivt-loop-iterations"] !== void 0 ? Number.parseInt(args["ivt-loop-iterations"], 10) : void 0
292
+ },
293
+ { command: "check" }
294
+ );
295
+ }
296
+ });
297
+ var checkProvenanceCommand = defineCommand({
298
+ meta: {
299
+ name: "provenance",
300
+ description: "Audit git log for commits missing a Task ID (T####)"
301
+ },
302
+ args: {
303
+ since: {
304
+ type: "string",
305
+ description: 'Git revision range start (e.g. "v2026.5.0", "HEAD~50", "main")'
306
+ },
307
+ branch: {
308
+ type: "string",
309
+ description: "Branch to audit (default: HEAD)"
310
+ },
311
+ strict: {
312
+ type: "boolean",
313
+ description: "Exit with code 1 if any untagged commits are found"
314
+ },
315
+ limit: {
316
+ type: "string",
317
+ description: "Maximum number of commits to audit (default: 200)"
318
+ }
319
+ },
320
+ async run({ args }) {
321
+ const { execSync } = await import("node:child_process");
322
+ const since = args.since;
323
+ const branch = args.branch || "HEAD";
324
+ const strict = Boolean(args.strict);
325
+ const limit = args.limit ? Number.parseInt(args.limit, 10) : 200;
326
+ const range = since ? `${since}..${branch}` : branch;
327
+ let logOutput;
328
+ try {
329
+ logOutput = execSync(`git log --no-merges --pretty=format:"%H %s" -n ${limit} ${range}`, {
330
+ encoding: "utf8",
331
+ stdio: ["pipe", "pipe", "pipe"]
332
+ });
333
+ } catch (err) {
334
+ const message = err instanceof Error ? err.message : String(err);
335
+ cliError(`git log failed: ${message}`, 1, {
336
+ name: "E_GIT_LOG",
337
+ fix: "Ensure you are inside a git repository and the range is valid."
338
+ });
339
+ process.exit(1);
340
+ }
341
+ const lines = logOutput.trim().split("\n").filter(Boolean);
342
+ const TASK_ID_RE = /T[0-9]+/;
343
+ const EXEMPT_RE = /^(Merge |Revert |fixup! |squash! |amend! )/;
344
+ const untagged = [];
345
+ const total = lines.length;
346
+ for (const line of lines) {
347
+ const tabIdx = line.indexOf(" ");
348
+ if (tabIdx < 0) continue;
349
+ const sha = line.slice(0, tabIdx).trim();
350
+ const subject = line.slice(tabIdx + 1).trim();
351
+ if (EXEMPT_RE.test(subject)) continue;
352
+ if (!TASK_ID_RE.test(subject)) {
353
+ untagged.push({ sha: sha.slice(0, 12), subject });
354
+ }
355
+ }
356
+ const tagged = total - untagged.length;
357
+ const result = {
358
+ success: true,
359
+ data: {
360
+ audited: total,
361
+ tagged,
362
+ untagged: untagged.length,
363
+ untaggedCommits: untagged,
364
+ range,
365
+ passed: untagged.length === 0
366
+ },
367
+ meta: { operation: "check.provenance" }
368
+ };
369
+ process.stdout.write(`${JSON.stringify(result)}
370
+ `);
371
+ if (strict && untagged.length > 0) {
372
+ process.stderr.write(
373
+ `[provenance] ${untagged.length} of ${total} audited commits lack a Task ID.
374
+ `
375
+ );
376
+ process.exit(1);
377
+ }
378
+ }
379
+ });
380
+ var checkArchCommand = defineCommand({
381
+ meta: {
382
+ name: "arch",
383
+ description: "Run all 5 SG-ARCH-SOLID architectural lint gates and emit a LAFS envelope (T9837)"
384
+ },
385
+ args: {
386
+ strict: {
387
+ type: "boolean",
388
+ description: "Fail even if gates are in baseline mode (passes --strict to each script)"
389
+ },
390
+ json: {
391
+ type: "boolean",
392
+ description: "Emit JSON envelope only (no human output)"
393
+ }
394
+ },
395
+ async run({ args }) {
396
+ const { spawnSync } = await import("node:child_process");
397
+ const { existsSync } = await import("node:fs");
398
+ const { join, resolve } = await import("node:path");
399
+ const strict = Boolean(args.strict);
400
+ const jsonOnly = Boolean(args.json);
401
+ const repoRoot = resolve(process.cwd());
402
+ const gates = [
403
+ {
404
+ id: "gate-1",
405
+ task: "T9837a",
406
+ script: "scripts/lint-no-raw-define-command.mjs",
407
+ description: "No defineCommand() outside cli/lib factory"
408
+ },
409
+ {
410
+ id: "gate-2",
411
+ task: "T9837b",
412
+ script: "scripts/lint-no-direct-db-open.mjs",
413
+ description: "No DatabaseSync outside core/store"
414
+ },
415
+ {
416
+ id: "gate-3",
417
+ task: "T9837c",
418
+ script: "scripts/lint-contracts-fan-out.mjs",
419
+ description: "No inline types imported by >2 files"
420
+ },
421
+ {
422
+ id: "gate-4",
423
+ task: "T9837d",
424
+ script: "scripts/lint-no-ssot-exempt.mjs",
425
+ description: "No SSoT-EXEMPT without linked task ID"
426
+ },
427
+ {
428
+ id: "gate-5",
429
+ task: "T9837e",
430
+ script: "scripts/lint-cli-package-boundary.mjs",
431
+ description: "No business-logic helper > 30 LOC in CLI commands"
432
+ },
433
+ {
434
+ id: "gate-6",
435
+ task: "T11640",
436
+ script: "scripts/lint-no-bare-get-active-session.mjs",
437
+ description: "No NEW bare getActiveSession() callsites (use resolveCurrentSession)"
438
+ // get-active-session-allowed: gate description string, not a callsite
439
+ },
440
+ {
441
+ id: "gate-7",
442
+ task: "T12041",
443
+ script: "scripts/lint-no-domain-db-singleton.mjs",
444
+ description: "No NEW per-domain DB singleton cache (bind via the ProjectStore/GlobalStore ports)"
445
+ },
446
+ {
447
+ // T12087: zero-tolerance. An unbounded fork pool froze this machine
448
+ // twice, and it only ever bites locally — CI runners have 2-4 cores, so
449
+ // the unsafe default passes there and takes down the developer instead.
450
+ id: "gate-8",
451
+ task: "T12087",
452
+ script: "scripts/lint-vitest-memory-safe.mjs",
453
+ description: "Every vitest config spreads the memory-safe fork bounds (workers + heap cap)"
454
+ },
455
+ {
456
+ // T12076: ratchet, not zero-tolerance. 106 static core-barrel imports
457
+ // force the full 1266-module @cleocode/core graph to load before any
458
+ // command runs (measured: 2.54 s for the barrel vs 0.12 s for a deep
459
+ // module). Converting them one at a time produced an
460
+ // EnvironmentTeardownError, so the count is allowed to fall but never
461
+ // rise, and the measurement travels with the gate.
462
+ id: "gate-10",
463
+ task: "T12076",
464
+ script: "scripts/lint-cli-startup-barrel-imports.mjs",
465
+ description: "No NEW static @cleocode/core barrel import in the CLI (startup cost)"
466
+ },
467
+ {
468
+ // T12093: zero-tolerance. `release-prepare.yml` invoked two commands
469
+ // that never existed (`cleo version-bump`, `cleo release changelog`),
470
+ // each discovered only after a full ~20-minute green preflight — and
471
+ // the same break shipped in the template every consuming project
472
+ // renders. A manifest read answers it in 200 ms.
473
+ id: "gate-9",
474
+ task: "T12093",
475
+ script: "scripts/lint-workflow-cleo-commands.mjs",
476
+ description: "Every `cleo` command invoked by a workflow (or its template) exists"
477
+ },
478
+ // ---------------------------------------------------------------------
479
+ // T12122 (GH #1251): the nine gates below were documented in AGENTS.md's
480
+ // gate table but were NEVER bundled here, so `cleo check arch` reported
481
+ // a green that covered 10 of the 15 documented gates. Every agent is
482
+ // told to run this command to self-check before pushing, so the command
483
+ // silently covering two-thirds of its own documentation is the same
484
+ // defect class as a filter that is accepted and not applied.
485
+ //
486
+ // All nine were measured before bundling: none needs a build, network
487
+ // access, or non-trivial time (~800 ms for all nine combined), so there
488
+ // was no reason for the omission and nothing has to be skipped.
489
+ // ---------------------------------------------------------------------
490
+ {
491
+ id: "gate-11",
492
+ task: "T9802",
493
+ script: "scripts/lint-paths-ssot.mjs",
494
+ description: "env-paths / XDG_DATA_HOME / worktree path strings live in packages/paths only"
495
+ },
496
+ {
497
+ id: "gate-12",
498
+ task: "T9860",
499
+ script: "scripts/lint-deployed-template-parity.mjs",
500
+ description: ".github/workflows/* matches the rendered core workflow templates"
501
+ },
502
+ {
503
+ id: "gate-13",
504
+ task: "T11281",
505
+ script: "scripts/lint-node-engine-ssot.mjs",
506
+ description: "Every package engines.node equals the root floor"
507
+ },
508
+ {
509
+ id: "gate-14",
510
+ task: "T11400",
511
+ script: "scripts/lint-publish-surface.mjs",
512
+ description: "release.yml publish_pkg list is the npm publish SSoT"
513
+ },
514
+ {
515
+ id: "gate-15",
516
+ task: "T11418",
517
+ script: "scripts/lint-no-runtime-in-contracts.mjs",
518
+ description: "packages/contracts is types-only (no net-new runtime helper)"
519
+ },
520
+ {
521
+ id: "gate-16",
522
+ task: "T11409",
523
+ script: "scripts/lint-tools-vs-skills-boundary.mjs",
524
+ description: "Atomic tool primitives are defined only in their home packages"
525
+ },
526
+ {
527
+ id: "gate-17",
528
+ task: "T11389",
529
+ script: "scripts/lint-no-crate-publish.mjs",
530
+ description: "Every crate declares publish = false (zero crates.io)"
531
+ },
532
+ {
533
+ id: "gate-18",
534
+ task: "T11783",
535
+ script: "scripts/lint-llm-chokepoint.mjs",
536
+ description: "LLM resolution + client/transport construction stay in the chokepoint"
537
+ },
538
+ {
539
+ id: "gate-19",
540
+ task: "T12069",
541
+ script: "scripts/lint-injection-commands.mjs",
542
+ description: "Every `cleo` command named in CLEO-INJECTION.md exists"
543
+ },
544
+ {
545
+ // T12122: the gate on the gates. Without it, this list and the
546
+ // AGENTS.md table drift apart again the moment someone adds one and
547
+ // not the other — which is exactly how the 10-vs-15 split happened.
548
+ id: "gate-20",
549
+ task: "T12122",
550
+ script: "scripts/lint-arch-gate-parity.mjs",
551
+ description: "The bundled gate list and the AGENTS.md gate table are the same set"
552
+ },
553
+ {
554
+ // gh#1283: some tables live in BOTH cleo.db scopes, and nexus ATTACHes
555
+ // the global file onto the shared project handle. A bare name then
556
+ // resolves by SQLite search order and answers without saying which
557
+ // file it read. Narrow by design — qualifying EVERYTHING would break
558
+ // the nexus registry fall-through that depends on bare names.
559
+ id: "gate-21",
560
+ task: "T12156",
561
+ script: "scripts/lint-dual-scope-unqualified-reads.mjs",
562
+ description: "No unqualified SQL reads of tables resident in both cleo.db scopes"
563
+ },
564
+ {
565
+ // gh#1223: every module reaching the AI SDK can emit on stdout via
566
+ // `ai@6`'s console.info banner. An INVENTORY rather than a per-module
567
+ // rule — the guard is installed once at the envelope funnel by design.
568
+ id: "gate-22",
569
+ task: "T12169",
570
+ script: "scripts/lint-ai-sdk-surface.mjs",
571
+ description: "No unreviewed module reaches the AI SDK at runtime"
572
+ },
573
+ {
574
+ // T12308: gate 14 checks the injection TEMPLATE and gate 15 the
575
+ // workflow `run:` blocks. The third agent-facing surface is the one
576
+ // CLEO GENERATES — the spawn prompt — and nothing checked it. It had
577
+ // been telling every validation-stage agent to run `cleo verify <id>
578
+ // --run` after that flag was dropped, and every orchestrated agent to
579
+ // pass `cleo conduit subscribe --topicName`, which is not the flag.
580
+ id: "gate-23",
581
+ task: "T12308",
582
+ script: "scripts/lint-agent-prompt-commands.mjs",
583
+ description: "Every `cleo` invocation CLEO writes into an agent prompt exists and is runnable"
584
+ },
585
+ {
586
+ // T12382: the only `.cant` parser users received was a committed
587
+ // linux-x64 binary; every other OS threw. A committed binary also
588
+ // goes stale silently (the committed lafs-napi one already rejects
589
+ // every real envelope). Binaries are built by CI and staged at
590
+ // release, so none may be tracked.
591
+ id: "gate-24",
592
+ task: "T12382",
593
+ script: "scripts/lint-no-committed-native-binaries.mjs",
594
+ description: "No native .node/.wasm binary is committed (built by CI, staged at release)"
595
+ },
596
+ {
597
+ // T12455 (salvaged from T12138 / gh#1207): SCOPE differs from gate 19
598
+ // deliberately. Gate 19 ratchets a repo-wide count (may fall, never
599
+ // rise); this permits ZERO across the modules reachable from the CLI
600
+ // entrypoint's static import graph, because those are paid on EVERY
601
+ // invocation including `cleo --version` — one import was 87% of CLI
602
+ // startup. Neither subsumes the other; the filenames carry the split.
603
+ id: "gate-25",
604
+ task: "T12455",
605
+ script: "scripts/lint-cli-startup-barrel-entrypoint.mjs",
606
+ description: "No module reachable from the CLI entrypoint statically imports a core barrel"
607
+ },
608
+ {
609
+ // T12528: citty parses `--no-<name>` as `{ <name>: false }`, never as
610
+ // `{ 'no-<name>': true }`, so a handler reading `args['no-<name>']`
611
+ // silently ignores the flag. Sixteen handlers did, including
612
+ // `orchestrate spawn --no-worktree` and `release plan --no-changelog`.
613
+ // Every read goes through `negatedFlag()` in cli/lib/negated-flag.ts.
614
+ id: "gate-26",
615
+ task: "T12528",
616
+ script: "scripts/lint-no-negated-flag-reads.mjs",
617
+ description: "No raw args['no-<flag>'] read in the CLI (citty never sets it)"
618
+ },
619
+ {
620
+ // T12483: the owner rule that every human decision goes through the
621
+ // harness ask tool with options (never prose; subagents relay to the
622
+ // orchestrator) must reach every surface an agent reads: the injected
623
+ // template, the ct-cleo / ct-orchestrator skills, and the spawn-prompt
624
+ // return contract emitted at every tier.
625
+ id: "gate-27",
626
+ task: "T12483",
627
+ script: "scripts/lint-hitl-rule-delivery.mjs",
628
+ description: "HITL ask-tool rule present on every agent delivery surface"
629
+ },
630
+ {
631
+ // T12332 (Gate A): every cleo.db table now carries a replication
632
+ // class, and replication captures writes at the chokepoint
633
+ // (openDualScopeDb and the canonical accessors, which are exempt). A
634
+ // raw INSERT/UPDATE/DELETE/REPLACE elsewhere is a write nobody can
635
+ // enumerate. A ratchet: today's offenders are baselined per
636
+ // (file, table), a new one fails, and a removed one must leave the
637
+ // baseline in the same change.
638
+ id: "gate-28",
639
+ task: "T12332",
640
+ script: "scripts/lint-no-raw-table-writes.mjs",
641
+ description: "No new raw SQL write on a classified cleo.db table (ratchet)"
642
+ },
643
+ {
644
+ // T12648: SKILL.md frontmatter is the skills metadata SSoT (D11157).
645
+ // The manifest is generated from it, so a hand-edited version, a
646
+ // directory the manifest omits, or an entry with no directory fails.
647
+ id: "gate-29",
648
+ task: "T12648",
649
+ script: "scripts/lint-skills-manifest.mjs",
650
+ description: "Skills manifest generated from valid SKILL.md frontmatter"
651
+ },
652
+ {
653
+ // T12648: a skill named by stage guidance, the spawn prompt or a
654
+ // .cant protocol must exist, be declared install: harness and be
655
+ // installed; metadata.install must match what install does.
656
+ id: "gate-30",
657
+ task: "T12648",
658
+ script: "scripts/lint-emitted-skills.mjs",
659
+ description: "Every skill code emits is installable (ratchet)"
660
+ },
661
+ {
662
+ // T12649: gate 14's command/flag rules applied to every canonical
663
+ // skill. Core-tier skills are zero-tolerance; others ratchet.
664
+ id: "gate-31",
665
+ task: "T12649",
666
+ script: "scripts/lint-skill-commands.mjs",
667
+ description: "Every cleo command a skill teaches exists and is runnable"
668
+ },
669
+ {
670
+ // T12124 (gh#1256): skills declare the code they document in
671
+ // metadata.covers. Here: every core/LOOM skill declares live covers;
672
+ // CI adds the PR diff check (--base).
673
+ id: "gate-32",
674
+ task: "T12124",
675
+ script: "scripts/lint-skill-coverage.mjs",
676
+ description: "Skills declare live metadata.covers (PR diff checked in CI)"
677
+ },
678
+ {
679
+ // T9148 / T12124: ct-cleo stays a thin pointer — ratcheted.
680
+ id: "gate-33",
681
+ task: "T12124",
682
+ script: "scripts/check-ct-cleo-thin.mjs",
683
+ description: "ct-cleo SKILL.md does not grow (thin-pointer ratchet)"
684
+ },
685
+ {
686
+ // T12704: an ES module has no `require`. A bare `require()` throws
687
+ // under Node while vitest supplies one, so tests stay green and the
688
+ // shipped build fails, usually inside a swallowing `try`: the docs
689
+ // audit wrote nothing, two doctor checks never ran, and no
690
+ // .worktreeinclude glob ever copied.
691
+ id: "gate-34",
692
+ task: "T12704",
693
+ script: "scripts/lint-no-esm-bare-require.mjs",
694
+ description: "No bare require() in ESM package sources"
695
+ },
696
+ {
697
+ // T12663: every model call site is a registered decision site
698
+ // (spec system-one-integration §3.5, D11158): decide()/askSiteDecision
699
+ // name a registry id, LLM entry points live in registered files of a
700
+ // generative/agent rung, a System One site runs `on` only with go-live
701
+ // evidence, and chokepoint bypasses are baselined per file.
702
+ id: "gate-35",
703
+ task: "T12663",
704
+ script: "scripts/lint-model-call-sites.mjs",
705
+ description: "Every model call site is a registered decision site (ratchet)"
706
+ },
707
+ {
708
+ // T12819 / T12827 (journal spec §2.3a, §3.5 Rule 4): nothing drops
709
+ // cleo_trigger_suspend; only dropSyncMachinery drops _sync_* tables;
710
+ // migrations never mention capture triggers; forward-only migration
711
+ // rules (owned triggers carry the suspension clause, deterministic
712
+ // DML, no parent DELETE in a rebuild file); released migration files
713
+ // are byte-identical to the base ref (#1719).
714
+ id: "gate-36",
715
+ task: "T12819",
716
+ script: "scripts/lint-sync-schema.mjs",
717
+ description: "Change-journal schema rules (suspend table, migrations)"
718
+ },
719
+ {
720
+ // T12897: every syncing cleo.db table is declared in ROW_IDENTITY or
721
+ // exempt with a reason and a task in ROW_IDENTITY_EXEMPT; a stale
722
+ // exemption (table gone, no longer syncing, or declared) fails too.
723
+ // The fresh-store check is store/__tests__/row-identity-gate.test.ts.
724
+ id: "gate-37",
725
+ task: "T12897",
726
+ script: "scripts/lint-row-identity-coverage.mjs",
727
+ description: "Every syncing cleo.db table has declared row identity or an exemption"
728
+ },
729
+ {
730
+ // T12881: the raw sync applier never runs TypeScript write paths, so
731
+ // every rejection site on a synced write path is tagged
732
+ // `// @sync-invariant <id>` (contracts sync-write-invariants
733
+ // registry) or an escape with a reason. Untagged sites are baselined
734
+ // per (file, symbol, code); the baseline only shrinks. Registry
735
+ // closure: tables classified, triggers created by migrations, no
736
+ // dead gates (spec t12859 §3.6.7).
737
+ id: "gate-38",
738
+ task: "T12881",
739
+ script: "scripts/lint-sync-write-invariants.mjs",
740
+ description: "Every synced-write rejection site is classified (ratchet)"
741
+ },
742
+ {
743
+ // T13126: gates 19 and 25 read the CLI SOURCE graph, and stayed green
744
+ // while every `cleo` call evaluated all of CORE: the unsplit esbuild
745
+ // bundle hoisted each lazy `import()`'s externals to static imports.
746
+ // This gate measures the BUILT CLI instead: the entry's static graph
747
+ // must not import a barrel, and `--version`, `--help` and `show` run in
748
+ // a throwaway sandbox under module-count budgets (the ratchet) and RSS
749
+ // ceilings. Needs a current `pnpm run build`; a missing or stale build
750
+ // fails rather than measuring code that is no longer there.
751
+ id: "gate-39",
752
+ task: "T13126",
753
+ script: "scripts/check-cli-startup-graph.mjs",
754
+ description: "Built CLI startup graph and per-command module budgets (ratchet)"
755
+ }
756
+ ];
757
+ const scriptArgs = strict ? ["--strict"] : ["--check"];
758
+ const results = [];
759
+ let anyFailed = false;
760
+ for (const gate of gates) {
761
+ const scriptPath = join(repoRoot, gate.script);
762
+ if (!existsSync(scriptPath)) {
763
+ results.push({
764
+ id: gate.id,
765
+ task: gate.task,
766
+ script: gate.script,
767
+ description: gate.description,
768
+ status: "skipped",
769
+ exitCode: null,
770
+ stdout: "",
771
+ stderr: `Script not yet created (task ${gate.task} pending).`
772
+ });
773
+ continue;
774
+ }
775
+ const result = spawnSync("node", [scriptPath, ...scriptArgs], {
776
+ encoding: "utf8",
777
+ stdio: ["ignore", "pipe", "pipe"],
778
+ cwd: repoRoot
779
+ });
780
+ const passed = result.status === 0;
781
+ if (!passed) anyFailed = true;
782
+ results.push({
783
+ id: gate.id,
784
+ task: gate.task,
785
+ script: gate.script,
786
+ description: gate.description,
787
+ status: passed ? "pass" : "fail",
788
+ exitCode: result.status,
789
+ stdout: result.stdout ?? "",
790
+ stderr: result.stderr ?? ""
791
+ });
792
+ }
793
+ const passCount = results.filter((r) => r.status === "pass").length;
794
+ const failCount = results.filter((r) => r.status === "fail").length;
795
+ const skipCount = results.filter((r) => r.status === "skipped").length;
796
+ const envelope = {
797
+ success: !anyFailed,
798
+ data: {
799
+ saga: "T9831",
800
+ epic: "T9837",
801
+ mode: strict ? "strict" : "baseline",
802
+ summary: { pass: passCount, fail: failCount, skipped: skipCount, total: gates.length },
803
+ gates: results,
804
+ passed: !anyFailed
805
+ },
806
+ meta: {
807
+ operation: "check.arch",
808
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
809
+ }
810
+ };
811
+ process.stdout.write(`${JSON.stringify(envelope)}
812
+ `);
813
+ if (!jsonOnly) {
814
+ process.stderr.write(`
815
+ `);
816
+ process.stderr.write(`SG-ARCH-SOLID Architectural Boundary Check (T9837)
817
+ `);
818
+ process.stderr.write(`${"\u2500".repeat(52)}
819
+ `);
820
+ for (const r of results) {
821
+ const icon = r.status === "pass" ? "PASS" : r.status === "fail" ? "FAIL" : "SKIP";
822
+ process.stderr.write(` [${icon}] ${r.id} (${r.task}) \u2014 ${r.description}
823
+ `);
824
+ if (r.status === "fail" && r.stderr.trim()) {
825
+ const lines = r.stderr.trim().split("\n").slice(0, 3);
826
+ for (const line of lines) {
827
+ process.stderr.write(` ${line}
828
+ `);
829
+ }
830
+ }
831
+ if (r.status === "skipped") {
832
+ process.stderr.write(` ${r.stderr.trim()}
833
+ `);
834
+ }
835
+ }
836
+ process.stderr.write(`${"\u2500".repeat(52)}
837
+ `);
838
+ process.stderr.write(
839
+ ` Result: ${passCount} passed, ${failCount} failed, ${skipCount} skipped
840
+ `
841
+ );
842
+ process.stderr.write(`
843
+ `);
844
+ }
845
+ if (anyFailed) process.exit(1);
846
+ }
847
+ });
848
+ var checkPrCommand = defineCommand({
849
+ meta: {
850
+ name: "pr",
851
+ description: "Run the CI required-gates locally and report one pass/fail summary (T11956)"
852
+ },
853
+ args: {
854
+ full: {
855
+ type: "boolean",
856
+ description: "Also run the complete standalone-lint surface (slower, exhaustive)"
857
+ },
858
+ only: {
859
+ type: "string",
860
+ description: 'Comma-separated gate ids to run (e.g. "biome,typecheck,test")'
861
+ },
862
+ "memory-max": {
863
+ type: "string",
864
+ description: "MemoryMax for cgroup-capped heavy gates on Linux (default: 16G)"
865
+ },
866
+ "no-keep-going": {
867
+ type: "boolean",
868
+ description: "Stop at the first failing gate instead of running them all"
869
+ }
870
+ },
871
+ async run({ args }) {
872
+ const onlyRaw = args.only;
873
+ const summary = runPrGate({
874
+ full: Boolean(args.full),
875
+ only: onlyRaw ? onlyRaw.split(",").map((s) => s.trim()).filter(Boolean) : void 0,
876
+ memoryMax: args["memory-max"],
877
+ keepGoing: !negatedFlag(args, "keep-going"),
878
+ onProgress: (line) => process.stderr.write(`${line}
879
+ `)
880
+ });
881
+ emitPrGateSummary(summary);
882
+ if (!summary.passed) process.exit(1);
883
+ }
884
+ });
885
+ var checkCommand = defineCommand({
886
+ meta: { name: "check", description: "Validation and compliance checks" },
887
+ subCommands: {
888
+ schema: checkSchemaCommand,
889
+ coherence: checkCoherenceCommand,
890
+ task: checkTaskCommand,
891
+ output: checkOutputCommand,
892
+ canon: checkCanonCommand,
893
+ protocol: checkProtocolCommand,
894
+ provenance: checkProvenanceCommand,
895
+ arch: checkArchCommand,
896
+ pr: checkPrCommand
897
+ },
898
+ async run({ cmd, rawArgs }) {
899
+ const firstArg = rawArgs?.find((a) => !a.startsWith("-"));
900
+ if (firstArg && cmd.subCommands && firstArg in cmd.subCommands) return;
901
+ await showUsage(cmd);
902
+ }
903
+ });
904
+ export {
905
+ checkCommand
906
+ };
907
+ //# sourceMappingURL=check-RWJLBCI2.js.map