@cleocode/cleo 2026.10.4 → 2026.10.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/README.md +7 -0
  2. package/dist/cli/{adapter-LVXHFBC4.js → adapter-OUQRSFZL.js} +10 -9
  3. package/dist/cli/{add-WUAV7LDT.js → add-4SRRJL4U.js} +18 -18
  4. package/dist/cli/{add-batch-U2DLKAQC.js → add-batch-TSWICA5J.js} +12 -11
  5. package/dist/cli/admin-L3F6CDYH.js +1428 -0
  6. package/dist/cli/{admin-I7BQYVZD.js → admin-YMU55YCU.js} +10 -9
  7. package/dist/cli/{adr-K2THMQBS.js → adr-XESRMFMP.js} +10 -9
  8. package/dist/cli/{agent-WQ6XY2DW.js → agent-TAFPIYUU.js} +66 -28
  9. package/dist/cli/{agent-outputs-BJIYLVTU.js → agent-outputs-HVJJIPS4.js} +3 -3
  10. package/dist/cli/{analyze-PGQZWGOC.js → analyze-YQ22QVGW.js} +10 -9
  11. package/dist/cli/{archive-5LZPF7C3.js → archive-W5XX6AH7.js} +10 -9
  12. package/dist/cli/{archive-stats-U6CYC6JM.js → archive-stats-HP2KPAJU.js} +10 -9
  13. package/dist/cli/attention-7JBDCRZX.js +124 -0
  14. package/dist/cli/{attention-SOURWCNI.js → attention-ZXZANHKC.js} +13 -12
  15. package/dist/cli/{audit-FO2Y4LH2.js → audit-ICA2SEFN.js} +2 -2
  16. package/dist/cli/{auth-ED7TAIXI.js → auth-DXIG5OG7.js} +5 -5
  17. package/dist/cli/{backfill-32TRAYRD.js → backfill-LBSYBWLR.js} +2 -2
  18. package/dist/cli/{backup-LEJMZJKL.js → backup-NUGBZ7NA.js} +17 -16
  19. package/dist/cli/{backup-inspect-6HPLUEI2.js → backup-inspect-PDRXI45A.js} +3 -3
  20. package/dist/cli/{backup-recover-2BTYBZU2.js → backup-recover-TVKAPERB.js} +3 -3
  21. package/dist/cli/{blockers-5JULUJTV.js → blockers-ZOPCGHDW.js} +10 -9
  22. package/dist/cli/{brain-273N3FW4.js → brain-EJOBKL4A.js} +9 -12
  23. package/dist/cli/{briefing-7H6OLECX.js → briefing-RDQJ6WHS.js} +11 -10
  24. package/dist/cli/{caamp-MFQVN6VU.js → caamp-Z3XPKEHB.js} +2 -2
  25. package/dist/cli/{cancel-SCMJTXZB.js → cancel-S7EHLCJN.js} +10 -9
  26. package/dist/cli/{cant-46XCUP4P.js → cant-CHNN6O57.js} +2 -2
  27. package/dist/cli/{changeset-32NMBGG2.js → changeset-RYPHPN2B.js} +4 -6
  28. package/dist/cli/check-C67YAU7W.js +759 -0
  29. package/dist/cli/{check-RWJLBCI2.js → check-DHMURGHC.js} +30 -13
  30. package/dist/cli/{checkpoint-37HMMKD7.js → checkpoint-UWDFOGYQ.js} +3 -3
  31. package/dist/cli/{chunk-NRKWJLMS.js → chunk-22YPFZYB.js} +2 -2
  32. package/dist/cli/{chunk-I3CRQQAD.js → chunk-2MGFDMDF.js} +84 -37
  33. package/dist/cli/{chunk-BCEXRFA2.js → chunk-4JYHPP4C.js} +2 -2
  34. package/dist/cli/{chunk-A2IUEIM5.js → chunk-4PEODTHY.js} +2 -2
  35. package/dist/cli/{chunk-3ZO3M37V.js → chunk-4RGSNUUP.js} +118 -170
  36. package/dist/cli/{chunk-AWCQH2W5.js → chunk-4VASFLUW.js} +2 -2
  37. package/dist/cli/{chunk-BPEVD37G.js → chunk-5PNI276X.js} +2 -2
  38. package/dist/cli/{chunk-OGV57L4J.js → chunk-6N6WGLXE.js} +6 -2
  39. package/dist/cli/{chunk-KHB52JNB.js → chunk-75UH3BLS.js} +4 -3
  40. package/dist/cli/{chunk-5ZFFUFH7.js → chunk-7ACK4EIN.js} +2 -2
  41. package/dist/cli/{chunk-MNJRLSEQ.js → chunk-7NMKLVMI.js} +2 -2
  42. package/dist/cli/{chunk-GFGLLDXX.js → chunk-7SINJXB6.js} +2 -2
  43. package/dist/cli/{chunk-KJDWWQFY.js → chunk-7UARFJYS.js} +3 -3
  44. package/dist/cli/{chunk-JNZJPIPJ.js → chunk-7ZYPQV4N.js} +3 -3
  45. package/dist/cli/{chunk-DVTPIZJM.js → chunk-AQCYT3L4.js} +2 -2
  46. package/dist/cli/{chunk-EGOTK2HA.js → chunk-BQK6XTOH.js} +2 -2
  47. package/dist/cli/{chunk-DYABOIHB.js → chunk-CAPAGD5E.js} +6 -4
  48. package/dist/cli/{chunk-ZZTHTMQP.js → chunk-CHGEDCKG.js} +3 -3
  49. package/dist/cli/{chunk-QPUY2HQZ.js → chunk-COXFJ3PT.js} +2 -2
  50. package/dist/cli/chunk-D7BAQNV2.js +55 -0
  51. package/dist/cli/{chunk-OPTEQKBB.js → chunk-EIUXVHNF.js} +3 -3
  52. package/dist/cli/{chunk-3PGH67MT.js → chunk-EUGB6P5V.js} +4 -6
  53. package/dist/cli/chunk-EW2CKNNZ.js +304 -0
  54. package/dist/cli/{chunk-2JIJD2I7.js → chunk-FSKN4DWC.js} +2 -2
  55. package/dist/cli/{chunk-NSHV2JNM.js → chunk-FVKLULL7.js} +2 -2
  56. package/dist/cli/{chunk-GH37QXW5.js → chunk-GAGUBU4Z.js} +2 -2
  57. package/dist/cli/{chunk-37NU2XDP.js → chunk-GKRFH2YG.js} +2 -2
  58. package/dist/cli/{chunk-ULN4OKQQ.js → chunk-GRU74UE4.js} +21 -10
  59. package/dist/cli/{chunk-LKNUA3SB.js → chunk-HFLLZE6A.js} +2 -2
  60. package/dist/cli/{chunk-YGKEECTI.js → chunk-HXRXT3XU.js} +2 -2
  61. package/dist/cli/{chunk-REUTEW3O.js → chunk-IIOGUY3B.js} +6 -6
  62. package/dist/cli/chunk-ILWWL462.js +60 -0
  63. package/dist/cli/{chunk-XRAX6XFP.js → chunk-J5USPJKZ.js} +2 -2
  64. package/dist/cli/{chunk-S24YI723.js → chunk-KEQS36GD.js} +4 -4
  65. package/dist/cli/chunk-L7ONYSV6.js +2497 -0
  66. package/dist/cli/chunk-NEFMQYLE.js +656 -0
  67. package/dist/cli/{chunk-QFFQSKRC.js → chunk-NU6CQQVB.js} +6 -2
  68. package/dist/cli/{chunk-5J2VH3BC.js → chunk-PN4WW5VX.js} +3 -3
  69. package/dist/cli/{chunk-AYA6F4ZT.js → chunk-PSJ33WVO.js} +3 -3
  70. package/dist/cli/{chunk-FORFDPP5.js → chunk-QJJWWCIC.js} +3 -3
  71. package/dist/cli/{chunk-ZBISIPCK.js → chunk-QKMBWYAS.js} +16 -1
  72. package/dist/cli/chunk-QWNKLLLG.js +84 -0
  73. package/dist/cli/{chunk-7INMKEAD.js → chunk-QWUFFDL3.js} +2 -2
  74. package/dist/cli/chunk-QY76BRUZ.js +35 -0
  75. package/dist/cli/chunk-R45KVF5Y.js +117 -0
  76. package/dist/cli/{chunk-W33Q3FBH.js → chunk-RRKP7HLU.js} +3 -3
  77. package/dist/cli/{chunk-YUZJI67I.js → chunk-T6GZJYL3.js} +2 -2
  78. package/dist/cli/{chunk-LWQBJQSE.js → chunk-TLQ37HRE.js} +3 -3
  79. package/dist/cli/chunk-TPTNEJZJ.js +52 -0
  80. package/dist/cli/chunk-TYC7G5LF.js +100 -0
  81. package/dist/cli/{chunk-J3ZFM3UQ.js → chunk-UWCZY52R.js} +25 -13
  82. package/dist/cli/{chunk-V5GBGOGM.js → chunk-VB3LDPL5.js} +2 -2
  83. package/dist/cli/chunk-WWCYZYSN.js +56 -0
  84. package/dist/cli/{chunk-EBRZ76HS.js → chunk-XA5WISNV.js} +4 -3
  85. package/dist/cli/chunk-XHRZ7OYZ.js +132 -0
  86. package/dist/cli/{chunk-EOPQFCSR.js → chunk-XLPMIGJJ.js} +6 -6
  87. package/dist/cli/{chunk-NWTATTEQ.js → chunk-ZMGDZMSJ.js} +2 -2
  88. package/dist/cli/{claim-KPENYHIQ.js → claim-IGOG2QOC.js} +10 -9
  89. package/dist/cli/{classify-DRVMCFQU.js → classify-MG4N7GMQ.js} +2 -2
  90. package/dist/cli/{cli-T3CR7J57.js → cli-A23Q335V.js} +10 -7
  91. package/dist/cli/{cloud-PPQ4O5TX.js → cloud-SILYJVKO.js} +194 -28
  92. package/dist/cli/{code-Z5CTMVTD.js → code-H2FQCVMW.js} +2 -2
  93. package/dist/cli/{complete-UBOCOBRB.js → complete-JLX7NBI4.js} +9 -8
  94. package/dist/cli/{complexity-BV2AGQRZ.js → complexity-OKV7PVZH.js} +10 -9
  95. package/dist/cli/{compliance-32PD5Y47.js → compliance-QMGZHJNQ.js} +10 -9
  96. package/dist/cli/{conduit-VDKCH33F.js → conduit-4H32UYEA.js} +10 -9
  97. package/dist/cli/conduit-EY54WTZA.js +535 -0
  98. package/dist/cli/{config-I72JAXK4.js → config-TDYOC7XO.js} +21 -18
  99. package/dist/cli/{consensus-LFILLSTK.js → consensus-4XCOFPPT.js} +10 -9
  100. package/dist/cli/{context-XUUVFVTP.js → context-FN4YTGHD.js} +12 -11
  101. package/dist/cli/{contribution-37NQ4N5R.js → contribution-7RWFBJLC.js} +10 -9
  102. package/dist/cli/{curator-TFDXU2EX.js → curator-HKZJCVRL.js} +2 -2
  103. package/dist/cli/{current-C4SN5BWV.js → current-B2NU7V3G.js} +10 -9
  104. package/dist/cli/{daemon-DV25JQ62.js → daemon-GBD4TVCD.js} +11 -10
  105. package/dist/cli/{dash-TFU4RLQW.js → dash-IGDANIE5.js} +10 -9
  106. package/dist/cli/{decide-5VPMNTSI.js → decide-26SXC2V6.js} +5 -8
  107. package/dist/cli/{decompose-KOYEZNJL.js → decompose-LQ76TEZG.js} +11 -10
  108. package/dist/cli/{decomposition-7OHUFIQN.js → decomposition-WFRWNUSJ.js} +10 -9
  109. package/dist/cli/{delete-Q7YCAFY5.js → delete-T5DUQHOX.js} +11 -10
  110. package/dist/cli/{deps-6UZKLDGJ.js → deps-UTPZJBXL.js} +17 -18
  111. package/dist/cli/{detect-FERY35UL.js → detect-FFZSMVDT.js} +10 -9
  112. package/dist/cli/{detect-drift-UL2JTPUK.js → detect-drift-TVCJOFYJ.js} +7 -7
  113. package/dist/cli/diagnostics-GN5CVD3N.js +93 -0
  114. package/dist/cli/{diagnostics-TI5QAZXR.js → diagnostics-ZNBKH6GX.js} +10 -9
  115. package/dist/cli/docs-CLQKEEUK.js +1710 -0
  116. package/dist/cli/{docs-QI2PRN3T.js → docs-DPPDFTWR.js} +45 -42
  117. package/dist/cli/{doctor-AX5TICQO.js → doctor-GPENOP4N.js} +79 -62
  118. package/dist/cli/{doctor-ac-bindings-YPMYHU2G.js → doctor-ac-bindings-S3IOEFP4.js} +3 -3
  119. package/dist/cli/{doctor-acceptance-drift-PYNFGMKB.js → doctor-acceptance-drift-VNFKPBSQ.js} +3 -3
  120. package/dist/cli/{doctor-credentials-UZRIADKM.js → doctor-credentials-A5H4JMTF.js} +3 -3
  121. package/dist/cli/{doctor-db-substrate-Q2TOYM2S.js → doctor-db-substrate-FGCISE4Z.js} +3 -3
  122. package/dist/cli/{doctor-dep-cycles-GCVYZY6F.js → doctor-dep-cycles-BKKKHHYG.js} +3 -3
  123. package/dist/cli/{doctor-exodus-RO5SUTC2.js → doctor-exodus-ND2DH2KP.js} +3 -3
  124. package/dist/cli/{doctor-exodus-residue-EM2AWQXP.js → doctor-exodus-residue-4EMRYMEQ.js} +3 -3
  125. package/dist/cli/{doctor-fk-check-Q3FOLECE.js → doctor-fk-check-VY3RIQV3.js} +3 -3
  126. package/dist/cli/{doctor-global-delivery-TNOAQ3NP.js → doctor-global-delivery-JN6IGHUL.js} +3 -3
  127. package/dist/cli/{doctor-heavy-command-hook-IO3QAQLG.js → doctor-heavy-command-hook-XSN44WXU.js} +3 -3
  128. package/dist/cli/{doctor-legacy-backups-O2YH5VLS.js → doctor-legacy-backups-QAG5NHYP.js} +3 -3
  129. package/dist/cli/{doctor-legacy-reaper-VSEJEIFA.js → doctor-legacy-reaper-CIRGFE6R.js} +3 -3
  130. package/dist/cli/{doctor-malformed-ids-LQ766V5K.js → doctor-malformed-ids-WL7HT4TB.js} +3 -3
  131. package/dist/cli/{doctor-manifest-rows-6FQDNHLH.js → doctor-manifest-rows-SMQCKJ2T.js} +3 -3
  132. package/dist/cli/{doctor-memory-guard-J4PSEKB5.js → doctor-memory-guard-LJDOJG76.js} +3 -3
  133. package/dist/cli/{doctor-migrations-ONOH56YM.js → doctor-migrations-ETQPFNUP.js} +3 -3
  134. package/dist/cli/{doctor-nexus-residency-FUQAX7PV.js → doctor-nexus-residency-A4JMKBEJ.js} +3 -3
  135. package/dist/cli/{doctor-project-identity-GUDK3HYX.js → doctor-project-identity-FFQJ5LNX.js} +3 -3
  136. package/dist/cli/{doctor-projects-7L3BNL4O.js → doctor-projects-MFUTKRHP.js} +3 -3
  137. package/dist/cli/{doctor-projects-registry-TEAVHFQU.js → doctor-projects-registry-76X6VTGM.js} +3 -3
  138. package/dist/cli/{doctor-release-readiness-IEGHX6SL.js → doctor-release-readiness-QJCOPFTK.js} +3 -3
  139. package/dist/cli/{doctor-repair-NBONOSZU.js → doctor-repair-AU76FIKY.js} +3 -3
  140. package/dist/cli/doctor-row-identity-KW6JYZQE.js +26 -0
  141. package/dist/cli/{doctor-skill-fixtures-7Y6L34A3.js → doctor-skill-fixtures-G3T7JUHS.js} +3 -3
  142. package/dist/cli/{doctor-split-brain-TUKIGVHF.js → doctor-split-brain-FUW6L7FS.js} +3 -3
  143. package/dist/cli/{doctor-superseded-store-BHZY2B2L.js → doctor-superseded-store-DUHGSBLC.js} +3 -3
  144. package/dist/cli/doctor-sync-journal-SXMUIKF7.js +26 -0
  145. package/dist/cli/doctor-sync-triggers-6WNJZFRM.js +26 -0
  146. package/dist/cli/{doctor-tool-locks-REQMIVYK.js → doctor-tool-locks-66LSLUBN.js} +3 -3
  147. package/dist/cli/{doctor-twin-collapse-222GOSPE.js → doctor-twin-collapse-AYBYBFC4.js} +3 -3
  148. package/dist/cli/{doctor-worktree-stores-J7TCRVJ3.js → doctor-worktree-stores-C5XEH5OG.js} +3 -3
  149. package/dist/cli/{done-V3AOO65B.js → done-R64XRZ32.js} +11 -10
  150. package/dist/cli/entities-3JIHDIOK.js +361 -0
  151. package/dist/cli/{event-EGNPGE5A.js → event-45KEWV5H.js} +2 -2
  152. package/dist/cli/{exists-H4SDCBPL.js → exists-BEDZS5RI.js} +3 -3
  153. package/dist/cli/{exodus-KALO3B3X.js → exodus-DUX62344.js} +3 -3
  154. package/dist/cli/{export-ROFOCG4M.js → export-C5PQIQ5O.js} +11 -10
  155. package/dist/cli/{export-tasks-US3WBIEQ.js → export-tasks-CUXDZPJB.js} +11 -10
  156. package/dist/cli/{federation-SUIB5QWT.js → federation-ESM35EGG.js} +3 -3
  157. package/dist/cli/{find-YICG4BG6.js → find-5EUZHHQJ.js} +13 -12
  158. package/dist/cli/focus-6AH4KLRO.js +368 -0
  159. package/dist/cli/{focus-TKCZPKOM.js → focus-ANKAIRO5.js} +10 -9
  160. package/dist/cli/{gateway-H4HFDC3E.js → gateway-2GW2KTK3.js} +2 -2
  161. package/dist/cli/{gc-5R2TUY5T.js → gc-CTOQLUSA.js} +2 -2
  162. package/dist/cli/{go-PRQFK5YG.js → go-YJPNHHYT.js} +6 -6
  163. package/dist/cli/{goal-7CZRMLHC.js → goal-4GW4G77D.js} +4 -3
  164. package/dist/cli/{grade-PY2YRPUS.js → grade-25WSZH4X.js} +10 -9
  165. package/dist/cli/{graph-XIXMCFKG.js → graph-JUO3TMF3.js} +11 -10
  166. package/dist/cli/{history-EIXADPAD.js → history-NACNUQTC.js} +10 -9
  167. package/dist/cli/{import-R73SO444.js → import-7ESGL5SS.js} +10 -9
  168. package/dist/cli/{import-tasks-O22FZJ4U.js → import-tasks-FLE2RPBR.js} +10 -9
  169. package/dist/cli/index.js +395 -238
  170. package/dist/cli/{init-IHEJDQWU.js → init-AN4DZ2XO.js} +5 -5
  171. package/dist/cli/{inject-LSRVWNCP.js → inject-HQWA5GWY.js} +10 -9
  172. package/dist/cli/{install-global-4AZUCH6U.js → install-global-YQV4W5OG.js} +2 -2
  173. package/dist/cli/intelligence-OFFNQGHE.js +238 -0
  174. package/dist/cli/{intelligence-2OSFOGD2.js → intelligence-QIC4SN4X.js} +10 -9
  175. package/dist/cli/{issue-IIWEDNFC.js → issue-P5RNMRDG.js} +10 -9
  176. package/dist/cli/{janitor-GPMC7VOR.js → janitor-ZNCFQ7E3.js} +2 -2
  177. package/dist/cli/{labels-5NPOIQXN.js → labels-ORBM3T57.js} +10 -9
  178. package/dist/cli/{lifecycle-4FFS2K2T.js → lifecycle-MHR22TVI.js} +13 -12
  179. package/dist/cli/{list-47KEUGPQ.js → list-LB6GCYYU.js} +14 -13
  180. package/dist/cli/llm-H7LZWQKX.js +130 -0
  181. package/dist/cli/{llm-G5B3I6GD.js → llm-OTJWPMGI.js} +14 -13
  182. package/dist/cli/{llm-cost-S7RS6BVA.js → llm-cost-MLMXEAR4.js} +3 -3
  183. package/dist/cli/{llm-stream-24A45NTS.js → llm-stream-AAEUNKRP.js} +3 -3
  184. package/dist/cli/{log-XF6H2XSD.js → log-W2A5M2NA.js} +10 -9
  185. package/dist/cli/{login-LBPLGHYG.js → login-SIXFFZSP.js} +6 -4
  186. package/dist/cli/{logout-SX4JSJIV.js → logout-G3KVLQQM.js} +5 -5
  187. package/dist/cli/{manifest-NMCW4PIW.js → manifest-G4T6EBSI.js} +10 -9
  188. package/dist/cli/{map-BU72KMGF.js → map-VU5M72TK.js} +10 -9
  189. package/dist/cli/{memory-UHYIVGVM.js → memory-2E27G2G5.js} +17 -21
  190. package/dist/cli/memory-IAEYKXG6.js +1895 -0
  191. package/dist/cli/{migrate-agents-v2-OO7OILZK.js → migrate-agents-v2-A52QIYNJ.js} +3 -3
  192. package/dist/cli/{migrate-claude-mem-EDNYUY3K.js → migrate-claude-mem-TPDW3R4Z.js} +17 -12
  193. package/dist/cli/{next-RZFRG5X7.js → next-SVH4LIDY.js} +10 -9
  194. package/dist/cli/nexus-FPQV2EAF.js +1059 -0
  195. package/dist/cli/{nexus-4S4Z5EVU.js → nexus-XSFXN5E6.js} +14 -13
  196. package/dist/cli/{ops-KR7AWCG3.js → ops-K6LHY5J6.js} +10 -9
  197. package/dist/cli/orchestrate-CZ2J6W3L.js +1650 -0
  198. package/dist/cli/{orchestrate-HOYZY3VX.js → orchestrate-HURUCQFT.js} +13 -11
  199. package/dist/cli/{otel-U7IIRBCT.js → otel-JCNPVJLZ.js} +2 -2
  200. package/dist/cli/{phase-NYZFHUE5.js → phase-VDFRASSO.js} +10 -9
  201. package/dist/cli/pipeline-TCZPOEDR.js +697 -0
  202. package/dist/cli/{pivot-FF2CVUZL.js → pivot-V5MSQZ7L.js} +10 -9
  203. package/dist/cli/{plan-3SL2NTRV.js → plan-SQUGCKSM.js} +10 -9
  204. package/dist/cli/{playbook-2FCBV7N3.js → playbook-L47GLDQD.js} +10 -9
  205. package/dist/cli/playbook-NJVO4R6P.js +33 -0
  206. package/dist/cli/{project-WDX2TGMC.js → project-YZEC7GYF.js} +6 -5
  207. package/dist/cli/{promote-YINYFBZY.js → promote-FINF4HVK.js} +10 -9
  208. package/dist/cli/provenance-3TUWVBFR.js +141 -0
  209. package/dist/cli/{provenance-C7AYD7WG.js → provenance-YZG33JGM.js} +10 -9
  210. package/dist/cli/{provider-QLJEDQBR.js → provider-23JVLLG3.js} +10 -9
  211. package/dist/cli/{reason-JF5BHBM5.js → reason-FHN54O7O.js} +10 -9
  212. package/dist/cli/{reconcile-NMISHDGX.js → reconcile-MOM5T4AX.js} +11 -10
  213. package/dist/cli/{refresh-memory-EY5YNICV.js → refresh-memory-3OSTRAVK.js} +2 -2
  214. package/dist/cli/{relates-R3ZPICAY.js → relates-6FWUFUS2.js} +10 -9
  215. package/dist/cli/release-G2DPSG5M.js +347 -0
  216. package/dist/cli/{release-4ZJTMUUT.js → release-URX6JHZ2.js} +10 -9
  217. package/dist/cli/{remote-QSONJDIK.js → remote-VIULU2T5.js} +3 -3
  218. package/dist/cli/{renderers-64OR3IWX.js → renderers-TGSW77J4.js} +2 -2
  219. package/dist/cli/{reorder-J3DOE7ST.js → reorder-UIPN6TQY.js} +10 -9
  220. package/dist/cli/{reparent-2OUMKEZX.js → reparent-ALOWWUIU.js} +10 -9
  221. package/dist/cli/{req-TZB7OFKO.js → req-RH2Y3H7A.js} +10 -9
  222. package/dist/cli/{research-MTD7EX45.js → research-G2Y72HRC.js} +10 -9
  223. package/dist/cli/{restore-VEUOX7NF.js → restore-VBR5XNML.js} +62 -15
  224. package/dist/cli/{revert-3YF2IL5G.js → revert-32LDNSGP.js} +2 -2
  225. package/dist/cli/{roadmap-7OOQLXKG.js → roadmap-LFU3AG7D.js} +10 -9
  226. package/dist/cli/{run-2U5NZV5Z.js → run-HXRILSR7.js} +40 -6
  227. package/dist/cli/{safestop-VR4VK56D.js → safestop-Z5UC7NGQ.js} +10 -9
  228. package/dist/cli/{saga-SEWPIOX2.js → saga-Y6FZS6AM.js} +12 -11
  229. package/dist/cli/{schema-C52WZ35V.js → schema-OOOKLWUE.js} +5 -5
  230. package/dist/cli/{self-update-GQIGUDPS.js → self-update-26SOTJMH.js} +3 -3
  231. package/dist/cli/{selfimprove-3Y5L4ECT.js → selfimprove-4SMOCLUV.js} +10 -9
  232. package/dist/cli/selfimprove-EB4RQLP4.js +139 -0
  233. package/dist/cli/sentient-QPETVE53.js +254 -0
  234. package/dist/cli/{sentient-M4YMAVGV.js → sentient-RGMWR4XJ.js} +2 -2
  235. package/dist/cli/{sequence-6UBMA4IF.js → sequence-H7DSAJPF.js} +10 -9
  236. package/dist/cli/{service-5R7SILZ7.js → service-EK5MGB2D.js} +10 -9
  237. package/dist/cli/service-GLOMZWPQ.js +437 -0
  238. package/dist/cli/{session-3C6AAC4Y.js → session-HYUXAQGC.js} +12 -11
  239. package/dist/cli/session-N5ISU56W.js +568 -0
  240. package/dist/cli/{setup-BTUBW5PU.js → setup-L3YYV53D.js} +4 -4
  241. package/dist/cli/{show-MXT2V7TF.js → show-364V3KY2.js} +12 -11
  242. package/dist/cli/{skill-GFUZOU2C.js → skill-F2KR6HW5.js} +2 -2
  243. package/dist/cli/{skills-EDWLKAF3.js → skills-FS3DCP6E.js} +13 -12
  244. package/dist/cli/{snapshot-GUWMURCM.js → snapshot-EGXEQ5PR.js} +12 -11
  245. package/dist/cli/{src-66GAKPXR.js → src-LYLXHXHH.js} +2 -2
  246. package/dist/cli/{start-QFG56RGN.js → start-6DXOCCKL.js} +10 -9
  247. package/dist/cli/{stats-GW55P7RR.js → stats-UVUQEGYC.js} +10 -9
  248. package/dist/cli/{status-46HTKNRR.js → status-XLKYLN42.js} +3 -3
  249. package/dist/cli/sticky-VSTQ2I2O.js +264 -0
  250. package/dist/cli/{sticky-2DUZOUGI.js → sticky-XZXZDCFW.js} +12 -11
  251. package/dist/cli/{stop-J2QEUKHX.js → stop-VNOAFWNB.js} +10 -9
  252. package/dist/cli/{sync-GJP2QYT5.js → sync-YYPARW3A.js} +11 -10
  253. package/dist/cli/tasks-C24KHTFF.js +1118 -0
  254. package/dist/cli/{tasks-BNXTM7PB.js → tasks-LBJC7CZV.js} +10 -9
  255. package/dist/cli/{telemetry-55Z2XJWL.js → telemetry-CU7W5WAY.js} +2 -2
  256. package/dist/cli/{templates-7O77TKPV.js → templates-G42JBUY4.js} +9 -11
  257. package/dist/cli/{testing-37YTBNKP.js → testing-HSRITHEY.js} +10 -9
  258. package/dist/cli/{token-UAVJMNUI.js → token-J74E7TSU.js} +10 -9
  259. package/dist/cli/tools-BI74W7VE.js +652 -0
  260. package/dist/cli/{transcript-LORQTV5Z.js → transcript-RGK7RSGQ.js} +2 -2
  261. package/dist/cli/{update-NVCYV2FT.js → update-2KQWA27S.js} +19 -17
  262. package/dist/cli/update-check-entry.js +124 -0
  263. package/dist/cli/update-notice-6SQ6WPQG.js +68 -0
  264. package/dist/cli/upgrade-E2MJAPC7.js +136 -0
  265. package/dist/cli/{upgrade-OXJXOGEF.js → upgrade-XRSQ4RWH.js} +5 -5
  266. package/dist/cli/{verify-LYLDHPT2.js → verify-WASRGDBA.js} +10 -9
  267. package/dist/cli/{web-QP2RP266.js → web-NJ3P67EU.js} +4 -4
  268. package/dist/cli/{workgraph-FXBSZDQE.js → workgraph-OHJ2VKJD.js} +6 -6
  269. package/dist/cli/{worktree-6RXAJIST.js → worktree-FVQLORFY.js} +10 -9
  270. package/dist/cli/worktree-ZJ6JTQNG.js +287 -0
  271. package/package.json +13 -13
  272. package/studio-dist/client/_app/immutable/chunks/{Btgeq_wq.js → AH7dIemv.js} +1 -1
  273. package/studio-dist/client/_app/immutable/chunks/{DgEKqO6r.js → BDgH40i3.js} +1 -1
  274. package/studio-dist/client/_app/immutable/chunks/BXDCSJ7U.js +1 -0
  275. package/studio-dist/client/_app/immutable/chunks/{CgBjxmu6.js → Gg4iYl59.js} +1 -1
  276. package/studio-dist/client/_app/immutable/entry/{app.a02HWaRB.js → app.DUDNK-37.js} +2 -2
  277. package/studio-dist/client/_app/immutable/entry/start.DNmZ0pA4.js +1 -0
  278. package/studio-dist/client/_app/immutable/nodes/{0.nTXyRfc-.js → 0.DWqP3ail.js} +1 -1
  279. package/studio-dist/client/_app/immutable/nodes/{1.4zrWeHtl.js → 1.CZGVUP5B.js} +1 -1
  280. package/studio-dist/client/_app/immutable/nodes/{15.D9mk4JyY.js → 15.DGaflZRS.js} +1 -1
  281. package/studio-dist/client/_app/immutable/nodes/{16._-wt-sQf.js → 16.uYlarGXl.js} +1 -1
  282. package/studio-dist/client/_app/immutable/nodes/{17.CUu6LQDj.js → 17.CZMR0E47.js} +1 -1
  283. package/studio-dist/client/_app/immutable/nodes/{18.Dz4QRTkX.js → 18.CBC-AKH_.js} +1 -1
  284. package/studio-dist/client/_app/immutable/nodes/{20.CJ2_EB0U.js → 20.BGi43MvQ.js} +1 -1
  285. package/studio-dist/client/_app/immutable/nodes/{24.Igj2FS7k.js → 24.Dv8ftCyR.js} +1 -1
  286. package/studio-dist/client/_app/immutable/nodes/25.DQPVlTDQ.js +39 -0
  287. package/studio-dist/client/_app/immutable/nodes/{26.6iPyjT44.js → 26.Cl800304.js} +1 -1
  288. package/studio-dist/client/_app/immutable/nodes/{3.AA5GwNgP.js → 3.D_fQKj9f.js} +1 -1
  289. package/studio-dist/client/_app/version.json +1 -1
  290. package/studio-dist/server/chunks/{0-DGmsoBYm.js → 0-BpOagOst.js} +3 -3
  291. package/studio-dist/server/chunks/1-D0oRGR-C.js +9 -0
  292. package/studio-dist/server/chunks/{15-Bg6YTndh.js → 15-BcjHz7Tv.js} +3 -3
  293. package/studio-dist/server/chunks/{16-BObLwgyD.js → 16-CXm8TUk7.js} +3 -3
  294. package/studio-dist/server/chunks/{17-BNXGyAHX.js → 17-mSgUK-cp.js} +3 -3
  295. package/studio-dist/server/chunks/{18-UqQFRIID.js → 18-BtfnIw1d.js} +3 -3
  296. package/studio-dist/server/chunks/{20-CMn8a_yP.js → 20-By1e4QDS.js} +3 -3
  297. package/studio-dist/server/chunks/{24-BuOTDzib.js → 24-0i2YLVxG.js} +3 -3
  298. package/studio-dist/server/chunks/{dist-B8xbIrdB.js → 25-DPsrqbrh.js} +795 -10736
  299. package/studio-dist/server/chunks/{26-DWGObn2T.js → 26-P0XkOibm.js} +3 -3
  300. package/studio-dist/server/chunks/{3-CyiffdJZ.js → 3-WudjUK7e.js} +3 -3
  301. package/studio-dist/server/chunks/{_layout.svelte-DYtClaIk.js → _layout.svelte-D9m81Rle.js} +4 -4
  302. package/studio-dist/server/chunks/{_page.svelte-CEATWp_5.js → _page.svelte-2PDLOF83.js} +3 -3
  303. package/studio-dist/server/chunks/{_page.svelte-Bip079LT.js → _page.svelte-BjE3jm2K.js} +3 -3
  304. package/studio-dist/server/chunks/{_page.svelte-CV3xiD1y.js → _page.svelte-Clc0vmiZ.js} +4 -4
  305. package/studio-dist/server/chunks/{_page.svelte-DSSy6LuK.js → _page.svelte-DABdRT3h.js} +3 -3
  306. package/studio-dist/server/chunks/{_page.svelte-1h9E6s_f.js → _page.svelte-DG3PjiHj.js} +3 -3
  307. package/studio-dist/server/chunks/{_page.svelte-BT1EUadj.js → _page.svelte-Edy9CaE8.js} +20 -7
  308. package/studio-dist/server/chunks/{_page.svelte-BNNF62Nm.js → _page.svelte-Hrf3-ZR8.js} +3 -3
  309. package/studio-dist/server/chunks/{_page.svelte-TF795TAS.js → _page.svelte-VB4O4Nl5.js} +3 -3
  310. package/studio-dist/server/chunks/{_page.svelte-Cv_KVJDV.js → _page.svelte-d3jEgjsI.js} +3 -3
  311. package/studio-dist/server/chunks/{_server.ts-CzrwbhkQ.js → _server.ts-BcRFsyo3.js} +4 -5
  312. package/studio-dist/server/chunks/{_server.ts-C4w6UdU0.js → _server.ts-CEWpIFrj.js} +6 -5
  313. package/studio-dist/server/chunks/{_server.ts-BlhRFLY3.js → _server.ts-CLVdVIF9.js} +2 -2
  314. package/studio-dist/server/chunks/{_server.ts-Db6mEile.js → _server.ts-D_j7aSy5.js} +6 -5
  315. package/studio-dist/server/chunks/{_server.ts-DWt8Dziu.js → _server.ts-QEZF8h2q.js} +4 -5
  316. package/studio-dist/server/chunks/{client-D8f2k-H_.js → client-Kp1dP1od.js} +2 -2
  317. package/studio-dist/server/chunks/{error.svelte-DbbOwIme.js → error.svelte-WOCioJVX.js} +3 -3
  318. package/studio-dist/server/chunks/{hooks.server-D2qbf3Zp.js → hooks.server-DH9zkIrJ.js} +3 -1
  319. package/studio-dist/server/chunks/{http-1ftNGTs5.js → http-DT5kxaWk.js} +5 -4
  320. package/studio-dist/server/chunks/{internal-CTULuLPB.js → internal-z0vqd5_u.js} +3 -3
  321. package/studio-dist/server/chunks/operations-registry-DdzmYzqX.js +10584 -0
  322. package/studio-dist/server/chunks/{stores-CS5XOReX.js → stores-s2kaL315.js} +2 -2
  323. package/studio-dist/server/index.js +1 -1
  324. package/studio-dist/server/manifest.js +17 -17
  325. package/dist/cli/chunk-3IOQVUO7.js +0 -17308
  326. package/dist/cli/chunk-OAPN46TC.js +0 -89
  327. package/studio-dist/client/_app/immutable/chunks/t81h7afa.js +0 -1
  328. package/studio-dist/client/_app/immutable/entry/start.BreMSngo.js +0 -1
  329. package/studio-dist/client/_app/immutable/nodes/25.BnATjVGN.js +0 -39
  330. package/studio-dist/server/chunks/1-8PfxPvlK.js +0 -9
  331. package/studio-dist/server/chunks/25-CIMSmjVx.js +0 -366
@@ -0,0 +1,656 @@
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
+ E_PLAYBOOK_RESUME_BLOCKED,
18
+ E_PLAYBOOK_RUNTIME_INVALID,
19
+ PlaybookParseError,
20
+ executePlaybook,
21
+ getPendingApprovals,
22
+ getPlaybookApprovalByToken,
23
+ getPlaybookRun,
24
+ listPlaybookApprovals,
25
+ listPlaybookRuns,
26
+ parsePlaybook,
27
+ resumePlaybook
28
+ } from "./chunk-NU6CQQVB.js";
29
+ import {
30
+ defineTypedHandler,
31
+ lafsError,
32
+ lafsSuccess,
33
+ typedDispatch
34
+ } from "./chunk-QWNKLLLG.js";
35
+ import {
36
+ dispatchMeta,
37
+ getListParams,
38
+ handleErrorResult,
39
+ unsupportedOp
40
+ } from "./chunk-XHRZ7OYZ.js";
41
+
42
+ // packages/cleo/src/dispatch/domains/playbook.ts
43
+ import { existsSync, readFileSync } from "node:fs";
44
+ import { join, resolve as resolvePath } from "node:path";
45
+ import {
46
+ listPlaybooks,
47
+ PlaybookNotFoundError,
48
+ resolvePlaybook
49
+ } from "@cleocode/core/playbooks/playbook-resolver";
50
+ var __playbookRuntimeOverrides = {};
51
+ function normalizeListStatus(raw) {
52
+ if (typeof raw !== "string" || raw.length === 0) return void 0;
53
+ const value = raw.trim().toLowerCase();
54
+ switch (value) {
55
+ case "active":
56
+ case "running":
57
+ return "running";
58
+ case "pending":
59
+ case "paused":
60
+ return "paused";
61
+ case "completed":
62
+ case "done":
63
+ return "completed";
64
+ case "failed":
65
+ return "failed";
66
+ case "cancelled":
67
+ case "canceled":
68
+ return "cancelled";
69
+ default:
70
+ return void 0;
71
+ }
72
+ }
73
+ async function loadPlaybookByName(name) {
74
+ const candidates = __playbookRuntimeOverrides.playbookBaseDirs;
75
+ if (candidates) {
76
+ const fileName = name.endsWith(".cantbook") ? name : `${name}.cantbook`;
77
+ for (const dir of candidates) {
78
+ const full = join(dir, fileName);
79
+ if (existsSync(full)) {
80
+ return { sourcePath: full, source: readFileSync(full, "utf8") };
81
+ }
82
+ }
83
+ return null;
84
+ }
85
+ try {
86
+ const { getProjectRoot } = await import("@cleocode/core/project-scope");
87
+ const projectRoot = __playbookRuntimeOverrides.projectRoot ?? getProjectRoot();
88
+ const resolved = resolvePlaybook(name, {
89
+ projectRoot,
90
+ globalPlaybooksDir: __playbookRuntimeOverrides.globalPlaybooksDir,
91
+ packagedStarterDir: __playbookRuntimeOverrides.packagedStarterDir
92
+ });
93
+ return { sourcePath: resolved.path, source: resolved.source };
94
+ } catch (err) {
95
+ if (err instanceof PlaybookNotFoundError) return null;
96
+ return null;
97
+ }
98
+ }
99
+ function parseContextJson(raw) {
100
+ if (raw === void 0 || raw === null || raw === "") return {};
101
+ if (typeof raw === "object" && !Array.isArray(raw)) {
102
+ return raw;
103
+ }
104
+ if (typeof raw !== "string") {
105
+ throw new Error(`context must be a JSON object, got ${typeof raw}`);
106
+ }
107
+ try {
108
+ const parsed = JSON.parse(raw);
109
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
110
+ throw new Error("context JSON must decode to an object");
111
+ }
112
+ return parsed;
113
+ } catch (err) {
114
+ const message = err instanceof Error ? err.message : String(err);
115
+ throw new Error(`invalid context JSON: ${message}`);
116
+ }
117
+ }
118
+ async function acquireDb() {
119
+ if (__playbookRuntimeOverrides.db) return __playbookRuntimeOverrides.db;
120
+ const { getDb, getNativeDb } = await import("@cleocode/core/store/sqlite");
121
+ await getDb();
122
+ const native = getNativeDb();
123
+ if (!native) {
124
+ throw new Error("playbook dispatch: tasks.db singleton was not initialized by getDb()");
125
+ }
126
+ return native;
127
+ }
128
+ async function buildDefaultDispatcher() {
129
+ if (__playbookRuntimeOverrides.dispatcher) return __playbookRuntimeOverrides.dispatcher;
130
+ const { orchestrateSpawnExecute } = await import("@cleocode/runtime/gateway");
131
+ const [
132
+ { getProjectRoot },
133
+ { createToolGuard },
134
+ { runSkillNodeOrSpawn },
135
+ { maybeCreatePiRunner },
136
+ { resolveCantbookNodeProfile, hasCantbookProfilePin },
137
+ { DEFAULT_DETERMINISTIC_DENIED_COMMANDS }
138
+ ] = await Promise.all([
139
+ import("@cleocode/core/project-scope"),
140
+ import("@cleocode/core/tools/guard"),
141
+ import("@cleocode/core/playbooks/skill-node-executor"),
142
+ import("@cleocode/core/playbooks/pi-runner-wiring"),
143
+ import("@cleocode/core/playbooks/cantbook-profile"),
144
+ import("@cleocode/core/playbooks/guarded-deterministic-runner")
145
+ ]);
146
+ const projectRoot = getProjectRoot();
147
+ const tools = createToolGuard({
148
+ allowedRoots: [projectRoot],
149
+ deniedCommands: DEFAULT_DETERMINISTIC_DENIED_COMMANDS,
150
+ mode: "enforce"
151
+ });
152
+ const runner = await maybeCreatePiRunner({ system: "task-executor", projectRoot });
153
+ const resolveStageProfile = async (input) => {
154
+ if (!hasCantbookProfilePin({
155
+ profile: input.profile,
156
+ model: input.model,
157
+ provider: input.provider
158
+ })) {
159
+ return void 0;
160
+ }
161
+ const resolved = await resolveCantbookNodeProfile({
162
+ playbookName: input.playbookName ?? "cantbook",
163
+ nodeId: input.nodeId,
164
+ pin: { profile: input.profile, model: input.model, provider: input.provider },
165
+ projectRoot
166
+ });
167
+ return {
168
+ [`${input.nodeId}_llm`]: {
169
+ provider: resolved.provider,
170
+ model: resolved.model,
171
+ source: resolved.source,
172
+ profile: input.profile ?? null
173
+ }
174
+ };
175
+ };
176
+ const spawn = async (input) => {
177
+ const result = await orchestrateSpawnExecute(
178
+ input.taskId,
179
+ /* adapterId */
180
+ void 0,
181
+ /* protocolType */
182
+ void 0,
183
+ projectRoot,
184
+ /* tier */
185
+ void 0
186
+ );
187
+ if (result.success) {
188
+ return {
189
+ status: "success",
190
+ output: {
191
+ [`${input.nodeId}_spawn`]: true,
192
+ nodeId: input.nodeId,
193
+ agentId: input.agentId,
194
+ dispatchData: result.data ?? null
195
+ }
196
+ };
197
+ }
198
+ return {
199
+ status: "failure",
200
+ output: {},
201
+ error: result.error?.message ?? `spawn failed for ${input.agentId}`
202
+ };
203
+ };
204
+ return {
205
+ async dispatch(input) {
206
+ try {
207
+ const llmHint = await resolveStageProfile(input);
208
+ const result = await runSkillNodeOrSpawn(
209
+ { nodeId: input.nodeId, agentId: input.agentId, context: input.context },
210
+ {
211
+ tools,
212
+ cwd: projectRoot,
213
+ subprocessSpawn: () => spawn(input),
214
+ ...runner !== void 0 ? { runner } : {}
215
+ }
216
+ );
217
+ if (llmHint !== void 0 && result.status === "success") {
218
+ return { ...result, output: { ...result.output, ...llmHint } };
219
+ }
220
+ return result;
221
+ } catch (err) {
222
+ return {
223
+ status: "failure",
224
+ output: {},
225
+ error: err instanceof Error ? err.message : String(err)
226
+ };
227
+ }
228
+ }
229
+ };
230
+ }
231
+ async function buildDefaultDeterministicRunner() {
232
+ if (__playbookRuntimeOverrides.deterministicRunner) {
233
+ return __playbookRuntimeOverrides.deterministicRunner;
234
+ }
235
+ if (__playbookRuntimeOverrides.dispatcher) {
236
+ return void 0;
237
+ }
238
+ const [
239
+ { getProjectRoot },
240
+ { createToolGuard },
241
+ { createGuardedDeterministicRunner, DEFAULT_DETERMINISTIC_DENIED_COMMANDS }
242
+ ] = await Promise.all([
243
+ import("@cleocode/core/project-scope"),
244
+ import("@cleocode/core/tools/guard"),
245
+ import("@cleocode/core/playbooks/guarded-deterministic-runner")
246
+ ]);
247
+ const projectRoot = getProjectRoot();
248
+ const tools = createToolGuard({
249
+ allowedRoots: [projectRoot],
250
+ deniedCommands: DEFAULT_DETERMINISTIC_DENIED_COMMANDS,
251
+ mode: "enforce"
252
+ });
253
+ return createGuardedDeterministicRunner({ tools });
254
+ }
255
+ function toRunEnvelope(result) {
256
+ const envelope = {
257
+ runId: result.runId,
258
+ terminalStatus: result.terminalStatus,
259
+ finalContext: result.finalContext
260
+ };
261
+ if (result.approvalToken !== void 0) envelope.approvalToken = result.approvalToken;
262
+ if (result.failedNodeId !== void 0) envelope.failedNodeId = result.failedNodeId;
263
+ if (result.exceededNodeId !== void 0) envelope.exceededNodeId = result.exceededNodeId;
264
+ if (result.errorContext !== void 0) envelope.errorContext = result.errorContext;
265
+ return envelope;
266
+ }
267
+ var _playbookTypedHandler = defineTypedHandler("playbook", {
268
+ // -----------------------------------------------------------------------
269
+ // Query ops
270
+ // -----------------------------------------------------------------------
271
+ status: async (params) => {
272
+ const runId = params.runId;
273
+ if (!runId) {
274
+ return lafsError("E_INVALID_INPUT", "runId is required", "status");
275
+ }
276
+ const db = await acquireDb();
277
+ const run = getPlaybookRun(db, runId);
278
+ if (run === null) {
279
+ return lafsError("E_NOT_FOUND", `playbook run ${runId} not found`, "status");
280
+ }
281
+ return lafsSuccess(run, "status");
282
+ },
283
+ // SSoT-EXEMPT:db-injection+runtime-offset-pagination — listPlaybookRunsState only
284
+ // supports LIMIT; offset must be applied client-side after fetch. acquireDb() returns
285
+ // a DatabaseSync handle that cannot be represented as a wire-format param (ADR-057 D1).
286
+ list: async (params) => {
287
+ const statusFilter = normalizeListStatus(params.status);
288
+ const epicId = typeof params.epicId === "string" ? params.epicId : void 0;
289
+ const { limit, offset } = getListParams(params);
290
+ const db = await acquireDb();
291
+ const opts = {};
292
+ if (statusFilter !== void 0) opts.status = statusFilter;
293
+ if (epicId !== void 0) opts.epicId = epicId;
294
+ if (typeof limit === "number") opts.limit = limit;
295
+ const runs = listPlaybookRuns(db, opts);
296
+ const paged = typeof offset === "number" ? runs.slice(offset) : runs;
297
+ const envelope = {
298
+ runs: paged,
299
+ count: paged.length,
300
+ total: runs.length
301
+ };
302
+ if (statusFilter !== void 0) envelope.statusFilter = statusFilter;
303
+ return lafsSuccess(envelope, "list");
304
+ },
305
+ // SSoT-EXEMPT:file-load+parse — must resolve .cantbook from disk before any DB row
306
+ // is written; parsePlaybook returns a non-wire-serializable definition object
307
+ // (ADR-057 D1 exception).
308
+ validate: async (params) => {
309
+ const file = params.file;
310
+ const name = params.name;
311
+ if (!file && !name) {
312
+ return lafsError(
313
+ "E_INVALID_INPUT",
314
+ "Either file (path) or name (playbook name) is required",
315
+ "validate"
316
+ );
317
+ }
318
+ let source;
319
+ let sourcePath;
320
+ if (file) {
321
+ const resolved = resolvePath(file);
322
+ if (!existsSync(resolved)) {
323
+ return lafsError("E_NOT_FOUND", `playbook file not found: ${resolved}`, "validate");
324
+ }
325
+ sourcePath = resolved;
326
+ source = readFileSync(resolved, "utf8");
327
+ } else {
328
+ const loaded = await loadPlaybookByName(name);
329
+ if (loaded === null) {
330
+ return lafsError(
331
+ "E_NOT_FOUND",
332
+ `playbook "${name}" not found in any search path`,
333
+ "validate"
334
+ );
335
+ }
336
+ sourcePath = loaded.sourcePath;
337
+ source = loaded.source;
338
+ }
339
+ try {
340
+ const { definition, sourceHash } = parsePlaybook(source);
341
+ return lafsSuccess(
342
+ {
343
+ valid: true,
344
+ sourcePath,
345
+ sourceHash,
346
+ name: definition.name,
347
+ version: definition.version,
348
+ nodeCount: definition.nodes.length,
349
+ edgeCount: definition.edges.length,
350
+ hasRequires: definition.nodes.some((n) => n.requires !== void 0),
351
+ hasEnsures: definition.nodes.some((n) => n.ensures !== void 0),
352
+ hasErrorHandlers: (definition.error_handlers?.length ?? 0) > 0
353
+ },
354
+ "validate"
355
+ );
356
+ } catch (err) {
357
+ if (err instanceof PlaybookParseError) {
358
+ return lafsError(
359
+ err.code,
360
+ `${err.message}${err.field ? ` [field=${err.field}]` : ""}`,
361
+ "validate"
362
+ );
363
+ }
364
+ return lafsError(
365
+ "E_PLAYBOOK_PARSE",
366
+ err instanceof Error ? err.message : String(err),
367
+ "validate"
368
+ );
369
+ }
370
+ },
371
+ // SSoT-EXEMPT:filesystem-resolver — listPlaybooks() reads .cantbook files from the
372
+ // filesystem across three tiers (project / global / packaged). projectRoot comes
373
+ // from @cleocode/core/internal which is non-wire-serializable infrastructure (ADR-057 D1).
374
+ catalog: async (params) => {
375
+ const tierFilter = params.tier ?? "all";
376
+ let projectRoot;
377
+ if (tierFilter === "all" || tierFilter === "project") {
378
+ if (__playbookRuntimeOverrides.projectRoot) {
379
+ projectRoot = __playbookRuntimeOverrides.projectRoot;
380
+ } else {
381
+ try {
382
+ const { getProjectRoot } = await import("@cleocode/core/project-scope");
383
+ projectRoot = getProjectRoot();
384
+ } catch {
385
+ projectRoot = void 0;
386
+ }
387
+ }
388
+ }
389
+ const allEntries = listPlaybooks({
390
+ projectRoot,
391
+ globalPlaybooksDir: __playbookRuntimeOverrides.globalPlaybooksDir,
392
+ packagedStarterDir: __playbookRuntimeOverrides.packagedStarterDir
393
+ });
394
+ const filtered = tierFilter === "all" ? allEntries : allEntries.filter((entry) => entry.tier === tierFilter);
395
+ return lafsSuccess(
396
+ {
397
+ playbooks: filtered.map((entry) => ({
398
+ name: entry.name,
399
+ tier: entry.tier,
400
+ path: entry.path
401
+ })),
402
+ count: filtered.length,
403
+ tierFilter
404
+ },
405
+ "catalog"
406
+ );
407
+ },
408
+ // -----------------------------------------------------------------------
409
+ // Mutate ops
410
+ // -----------------------------------------------------------------------
411
+ // SSoT-EXEMPT:db-injection+file-load+executePlaybook — db is a DatabaseSync handle
412
+ // (non-wire-serializable infrastructure per ADR-057 D1); file loading and
413
+ // parsePlaybook return a non-wire-serializable PlaybookDefinition; executePlaybook
414
+ // is the runtime state machine SSoT in @cleocode/playbooks and must remain here.
415
+ run: async (params) => {
416
+ const name = params.name;
417
+ if (!name) {
418
+ return lafsError("E_INVALID_INPUT", "name is required", "run");
419
+ }
420
+ let initialContext;
421
+ try {
422
+ initialContext = parseContextJson(params.context);
423
+ } catch (err) {
424
+ return lafsError("E_INVALID_INPUT", err instanceof Error ? err.message : String(err), "run");
425
+ }
426
+ const loaded = await loadPlaybookByName(name);
427
+ if (loaded === null) {
428
+ return lafsError("E_NOT_FOUND", `playbook "${name}" not found in any search path`, "run");
429
+ }
430
+ let parsed;
431
+ try {
432
+ parsed = parsePlaybook(loaded.source);
433
+ } catch (err) {
434
+ if (err instanceof PlaybookParseError) {
435
+ return lafsError(
436
+ err.code,
437
+ `${err.message}${err.field ? ` [field=${err.field}]` : ""}`,
438
+ "run"
439
+ );
440
+ }
441
+ return lafsError("E_PLAYBOOK_PARSE", err instanceof Error ? err.message : String(err), "run");
442
+ }
443
+ const db = await acquireDb();
444
+ const dispatcher = await buildDefaultDispatcher();
445
+ const deterministicRunner = await buildDefaultDeterministicRunner();
446
+ let result;
447
+ try {
448
+ const { getProjectRoot } = await import("@cleocode/core/project-scope");
449
+ const opts = {
450
+ db,
451
+ playbook: parsed.definition,
452
+ playbookHash: parsed.sourceHash,
453
+ initialContext,
454
+ dispatcher,
455
+ projectRoot: getProjectRoot()
456
+ };
457
+ if (deterministicRunner !== void 0) opts.deterministicRunner = deterministicRunner;
458
+ if (__playbookRuntimeOverrides.approvalSecret !== void 0) {
459
+ opts.approvalSecret = __playbookRuntimeOverrides.approvalSecret;
460
+ }
461
+ const epicIdRaw = initialContext["epicId"];
462
+ if (typeof epicIdRaw === "string") opts.epicId = epicIdRaw;
463
+ const sessionIdRaw = initialContext["sessionId"];
464
+ if (typeof sessionIdRaw === "string") opts.sessionId = sessionIdRaw;
465
+ result = await executePlaybook(opts);
466
+ } catch (err) {
467
+ const message = err instanceof Error ? err.message : String(err);
468
+ const code = message.startsWith(E_PLAYBOOK_RUNTIME_INVALID) ? E_PLAYBOOK_RUNTIME_INVALID : "E_PLAYBOOK_RUNTIME";
469
+ return lafsError(code, message, "run");
470
+ }
471
+ return lafsSuccess(
472
+ {
473
+ ...toRunEnvelope(result),
474
+ playbookName: parsed.definition.name,
475
+ playbookSource: loaded.sourcePath
476
+ },
477
+ "run"
478
+ );
479
+ },
480
+ // SSoT-EXEMPT:db-injection+gate-validation — db is a DatabaseSync handle (ADR-057 D1);
481
+ // approval gate state machine requires loading playbook source + verifying hash
482
+ // integrity; resumePlaybook is the runtime SSoT in @cleocode/playbooks.
483
+ resume: async (params) => {
484
+ const runId = params.runId;
485
+ if (!runId) {
486
+ return lafsError("E_INVALID_INPUT", "runId is required", "resume");
487
+ }
488
+ const db = await acquireDb();
489
+ const run = getPlaybookRun(db, runId);
490
+ if (run === null) {
491
+ return lafsError("E_NOT_FOUND", `playbook run ${runId} not found`, "resume");
492
+ }
493
+ const approvals = loadApprovalsForRun(db, runId);
494
+ if (approvals.length === 0) {
495
+ return lafsError(
496
+ "E_APPROVAL_NOT_FOUND",
497
+ `run ${runId} has no approval gates \u2014 nothing to resume`,
498
+ "resume"
499
+ );
500
+ }
501
+ const latest = approvals[approvals.length - 1];
502
+ if (latest.status === "pending") {
503
+ return lafsError(
504
+ "E_APPROVAL_PENDING",
505
+ `gate ${latest.approvalId} for run ${runId} is still pending \u2014 approve before resuming`,
506
+ "resume"
507
+ );
508
+ }
509
+ if (latest.status === "rejected") {
510
+ return lafsError(
511
+ "E_APPROVAL_REJECTED",
512
+ `gate ${latest.approvalId} was rejected${latest.reason ? ` (${latest.reason})` : ""}`,
513
+ "resume"
514
+ );
515
+ }
516
+ const loaded = await loadPlaybookByName(run.playbookName);
517
+ if (loaded === null) {
518
+ return lafsError(
519
+ "E_NOT_FOUND",
520
+ `playbook "${run.playbookName}" not found \u2014 cannot resume run ${runId}`,
521
+ "resume"
522
+ );
523
+ }
524
+ let parsed;
525
+ try {
526
+ parsed = parsePlaybook(loaded.source);
527
+ } catch (err) {
528
+ return lafsError(
529
+ "E_PLAYBOOK_PARSE",
530
+ err instanceof Error ? err.message : String(err),
531
+ "resume"
532
+ );
533
+ }
534
+ if (parsed.sourceHash !== run.playbookHash) {
535
+ return lafsError(
536
+ "E_PLAYBOOK_HASH_MISMATCH",
537
+ `playbook "${run.playbookName}" source changed since run started (hash drift)`,
538
+ "resume"
539
+ );
540
+ }
541
+ const dispatcher = await buildDefaultDispatcher();
542
+ const deterministicRunner = await buildDefaultDeterministicRunner();
543
+ try {
544
+ const opts = {
545
+ db,
546
+ playbook: parsed.definition,
547
+ approvalToken: latest.token,
548
+ dispatcher
549
+ };
550
+ if (deterministicRunner !== void 0) opts.deterministicRunner = deterministicRunner;
551
+ if (__playbookRuntimeOverrides.approvalSecret !== void 0) {
552
+ opts.approvalSecret = __playbookRuntimeOverrides.approvalSecret;
553
+ }
554
+ const result = await resumePlaybook(opts);
555
+ return lafsSuccess(toRunEnvelope(result), "resume");
556
+ } catch (err) {
557
+ const message = err instanceof Error ? err.message : String(err);
558
+ if (message.startsWith(E_PLAYBOOK_RESUME_BLOCKED)) {
559
+ return lafsError(E_PLAYBOOK_RESUME_BLOCKED, message, "resume");
560
+ }
561
+ return lafsError("E_PLAYBOOK_RUNTIME", message, "resume");
562
+ }
563
+ }
564
+ });
565
+ var QUERY_OPS = /* @__PURE__ */ new Set(["status", "list", "validate", "catalog"]);
566
+ var MUTATE_OPS = /* @__PURE__ */ new Set(["run", "resume"]);
567
+ var PlaybookHandler = class {
568
+ /**
569
+ * Query gateway — `status`, `list`, and `validate`.
570
+ */
571
+ async query(operation, params) {
572
+ const startTime = Date.now();
573
+ if (!QUERY_OPS.has(operation)) {
574
+ return unsupportedOp("query", "playbook", operation, startTime);
575
+ }
576
+ try {
577
+ const envelope = await typedDispatch(
578
+ _playbookTypedHandler,
579
+ operation,
580
+ params ?? {}
581
+ );
582
+ return {
583
+ meta: dispatchMeta("query", "playbook", operation, startTime),
584
+ success: envelope.success,
585
+ ...envelope.success ? { data: envelope.data } : {
586
+ error: {
587
+ code: envelope.error?.code !== void 0 ? String(envelope.error.code) : "E_INTERNAL",
588
+ message: envelope.error?.message ?? "Unknown error"
589
+ }
590
+ }
591
+ };
592
+ } catch (err) {
593
+ return handleErrorResult("query", "playbook", operation, err, startTime);
594
+ }
595
+ }
596
+ /**
597
+ * Mutate gateway — `run` and `resume`.
598
+ */
599
+ async mutate(operation, params) {
600
+ const startTime = Date.now();
601
+ if (!MUTATE_OPS.has(operation)) {
602
+ return unsupportedOp("mutate", "playbook", operation, startTime);
603
+ }
604
+ try {
605
+ const envelope = await typedDispatch(
606
+ _playbookTypedHandler,
607
+ operation,
608
+ params ?? {}
609
+ );
610
+ return {
611
+ meta: dispatchMeta("mutate", "playbook", operation, startTime),
612
+ success: envelope.success,
613
+ ...envelope.success ? { data: envelope.data } : {
614
+ error: {
615
+ code: envelope.error?.code !== void 0 ? String(envelope.error.code) : "E_INTERNAL",
616
+ message: envelope.error?.message ?? "Unknown error"
617
+ }
618
+ }
619
+ };
620
+ } catch (err) {
621
+ return handleErrorResult("mutate", "playbook", operation, err, startTime);
622
+ }
623
+ }
624
+ /**
625
+ * Exposed operations for dispatcher introspection + parity tests.
626
+ */
627
+ getSupportedOperations() {
628
+ return {
629
+ query: ["catalog", "list", "status", "validate"],
630
+ mutate: ["run", "resume"]
631
+ };
632
+ }
633
+ };
634
+ function loadApprovalsForRun(db, runId) {
635
+ return listPlaybookApprovals(db, runId);
636
+ }
637
+ async function acquirePlaybookDb() {
638
+ return acquireDb();
639
+ }
640
+ async function listPendingApprovalsForDispatch() {
641
+ const db = await acquireDb();
642
+ return getPendingApprovals(db);
643
+ }
644
+ async function lookupApprovalByTokenForDispatch(token) {
645
+ const db = await acquireDb();
646
+ return getPlaybookApprovalByToken(db, token);
647
+ }
648
+
649
+ export {
650
+ __playbookRuntimeOverrides,
651
+ PlaybookHandler,
652
+ acquirePlaybookDb,
653
+ listPendingApprovalsForDispatch,
654
+ lookupApprovalByTokenForDispatch
655
+ };
656
+ //# sourceMappingURL=chunk-NEFMQYLE.js.map
@@ -3497,7 +3497,11 @@ function evaluatePolicy(command, rules = DEFAULT_POLICY_RULES) {
3497
3497
  // packages/playbooks/src/runtime.ts
3498
3498
  import { appendFileSync, mkdirSync } from "node:fs";
3499
3499
  import { dirname, join } from "node:path";
3500
- import { defaultVariableResolver, getEnsuresSchema, listEnsuresSchemaNames } from "@cleocode/core";
3500
+ import { defaultResolver as defaultVariableResolver } from "@cleocode/core/agents/variable-substitution";
3501
+ import {
3502
+ getEnsuresSchema,
3503
+ listEnsuresSchemaNames
3504
+ } from "@cleocode/core/dispatch/contracts/ensures-schema";
3501
3505
 
3502
3506
  // packages/playbooks/src/state.ts
3503
3507
  import { randomUUID as randomUUID2 } from "node:crypto";
@@ -4494,4 +4498,4 @@ export {
4494
4498
  js-yaml/dist/js-yaml.mjs:
4495
4499
  (*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT *)
4496
4500
  */
4497
- //# sourceMappingURL=chunk-QFFQSKRC.js.map
4501
+ //# sourceMappingURL=chunk-NU6CQQVB.js.map
@@ -18,15 +18,15 @@ import {
18
18
  } from "./chunk-PKKZPOOP.js";
19
19
  import {
20
20
  cliOutput
21
- } from "./chunk-3ZO3M37V.js";
21
+ } from "./chunk-4RGSNUUP.js";
22
22
 
23
23
  // packages/cleo/src/cli/commands/doctor-project-identity.ts
24
- import { getProjectRoot } from "@cleocode/core";
25
24
  import {
26
25
  inspectProjectIdentity,
27
26
  inspectProjectNameDrift,
28
27
  resolveProjectIdentity
29
28
  } from "@cleocode/core/doctor/project-identity.js";
29
+ import { getProjectRoot } from "@cleocode/core/project-scope";
30
30
  var doctorProjectIdentityCommand = defineCommand({
31
31
  meta: {
32
32
  name: "project-identity",
@@ -63,4 +63,4 @@ var doctorProjectIdentityCommand = defineCommand({
63
63
  export {
64
64
  doctorProjectIdentityCommand
65
65
  };
66
- //# sourceMappingURL=chunk-5J2VH3BC.js.map
66
+ //# sourceMappingURL=chunk-PN4WW5VX.js.map