@iowarp/clio-coder 0.4.6 → 0.4.8

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 (1142) hide show
  1. package/.claude-plugin/marketplace.json +283 -0
  2. package/CHANGELOG.md +79 -0
  3. package/CONTRIBUTING.md +178 -96
  4. package/NOTICE +8 -0
  5. package/README.md +100 -47
  6. package/dist/acp-JWPQZM2D.js +130 -0
  7. package/dist/agents-4GCDIRVX.js +149 -0
  8. package/dist/assets/codewiki.json +1 -1
  9. package/dist/assets/tui-notices/get-east-asian-width-LICENSE +9 -0
  10. package/dist/assets/tui-notices/marked-LICENSE +44 -0
  11. package/dist/assets/tui-notices/pi-tui-LICENSE +21 -0
  12. package/dist/assets/web-notices/@hono__node-server-LICENSE +21 -0
  13. package/dist/assets/web-notices/hono-LICENSE +21 -0
  14. package/dist/auth-SYAKTDQE.js +551 -0
  15. package/dist/background-OW67WMYR.js +37 -0
  16. package/dist/builtins-TKS63VNV.js +22 -0
  17. package/dist/chunk-2JSCCEKO.js +85 -0
  18. package/dist/chunk-2SXGG2IV.js +391 -0
  19. package/dist/chunk-2U2U5POA.js +59 -0
  20. package/dist/chunk-2ZWLMA3T.js +658 -0
  21. package/dist/chunk-36XSBPXL.js +579 -0
  22. package/dist/chunk-3IQOZRQ6.js +396 -0
  23. package/dist/chunk-3XE4NRLF.js +324 -0
  24. package/dist/chunk-44U2OUSM.js +243 -0
  25. package/dist/chunk-4P6M2TTE.js +119 -0
  26. package/dist/chunk-526ABLHD.js +1219 -0
  27. package/dist/chunk-5C2OQHLR.js +674 -0
  28. package/dist/chunk-5D2FNBMG.js +185 -0
  29. package/dist/chunk-5EQO5NWP.js +243 -0
  30. package/dist/chunk-5HULHKT2.js +32 -0
  31. package/dist/chunk-5UG6EZI3.js +66 -0
  32. package/dist/chunk-5W4FRA5Q.js +22283 -0
  33. package/dist/chunk-6R5MBXBJ.js +386 -0
  34. package/dist/chunk-6TKOFFGE.js +1058 -0
  35. package/dist/chunk-6UJ7RDI7.js +1143 -0
  36. package/dist/chunk-6X7VOCDY.js +44 -0
  37. package/dist/chunk-7QQRPB2E.js +915 -0
  38. package/dist/chunk-ARRUMZ7X.js +1377 -0
  39. package/dist/chunk-ATB3Q7YO.js +663 -0
  40. package/dist/chunk-AUHVBIDW.js +19 -0
  41. package/dist/chunk-BE4I3UJ2.js +668 -0
  42. package/dist/chunk-BFPHMSK7.js +169 -0
  43. package/dist/chunk-BHJMMCXS.js +466 -0
  44. package/dist/chunk-BIY22UUK.js +1322 -0
  45. package/dist/chunk-D55WO5J7.js +110 -0
  46. package/dist/chunk-DVJL77SO.js +162 -0
  47. package/dist/chunk-E2NSPYLC.js +814 -0
  48. package/dist/chunk-EFXMQYI6.js +4484 -0
  49. package/dist/chunk-EPYATQMG.js +2718 -0
  50. package/dist/chunk-EXKUF426.js +1801 -0
  51. package/dist/chunk-F7Y6QTPL.js +689 -0
  52. package/dist/chunk-FB3KTE2J.js +1710 -0
  53. package/dist/chunk-FNVPQQYT.js +117 -0
  54. package/dist/chunk-GEVQNST4.js +101 -0
  55. package/dist/chunk-GEYX2NZ5.js +697 -0
  56. package/dist/chunk-GJBJHJNY.js +2120 -0
  57. package/dist/chunk-GM4TY6VN.js +1233 -0
  58. package/dist/chunk-GVU4CXPJ.js +5191 -0
  59. package/dist/chunk-H5DPSUBB.js +637 -0
  60. package/dist/chunk-H77XBUBM.js +688 -0
  61. package/dist/chunk-HMGAKB7E.js +380 -0
  62. package/dist/chunk-HP7KJ5O2.js +797 -0
  63. package/dist/chunk-HVCAY2FH.js +67 -0
  64. package/dist/chunk-ICYIUNO4.js +35 -0
  65. package/dist/chunk-IILXVWJY.js +223 -0
  66. package/dist/chunk-JCVIL6TY.js +595 -0
  67. package/dist/chunk-JIMWEYWO.js +63 -0
  68. package/dist/chunk-JLBVCROW.js +562 -0
  69. package/dist/chunk-JOBN2YQQ.js +176 -0
  70. package/dist/chunk-JOL2QRLE.js +152 -0
  71. package/dist/chunk-JRA6OBHY.js +974 -0
  72. package/dist/chunk-JV25I7ID.js +1865 -0
  73. package/dist/chunk-JYKUMHCQ.js +705 -0
  74. package/dist/chunk-K3W6BF5C.js +283 -0
  75. package/dist/chunk-K45LHSCI.js +194 -0
  76. package/dist/chunk-K53E2PTW.js +1289 -0
  77. package/dist/chunk-K5UJD6MM.js +39 -0
  78. package/dist/chunk-KGP3UQGJ.js +200 -0
  79. package/dist/chunk-KKRXONXG.js +43 -0
  80. package/dist/chunk-KWJXCL2X.js +103 -0
  81. package/dist/chunk-L75H5B3B.js +446 -0
  82. package/dist/chunk-LLCGGVSW.js +108 -0
  83. package/dist/chunk-LZCCBLRC.js +57 -0
  84. package/dist/chunk-LZDLYSUN.js +197 -0
  85. package/dist/chunk-MATCRH3M.js +667 -0
  86. package/dist/chunk-MEHBW2SP.js +132 -0
  87. package/dist/chunk-MUXNDNMZ.js +659 -0
  88. package/dist/chunk-MWMW53WW.js +7346 -0
  89. package/dist/chunk-MZDPF35R.js +45 -0
  90. package/dist/chunk-MZKYVIWW.js +188 -0
  91. package/dist/chunk-O2QJDRWP.js +362 -0
  92. package/dist/chunk-O3HSB2YL.js +693 -0
  93. package/dist/chunk-OEMFEL26.js +891 -0
  94. package/dist/chunk-OH3YYA3B.js +15 -0
  95. package/dist/chunk-OPC4DQD6.js +634 -0
  96. package/dist/chunk-ORRNGQDV.js +207 -0
  97. package/dist/chunk-P4JS3MH5.js +165 -0
  98. package/dist/chunk-P7GTE4FX.js +308 -0
  99. package/dist/chunk-PAQVETLA.js +962 -0
  100. package/dist/chunk-PFZJMXIY.js +146 -0
  101. package/dist/chunk-PGEFOTJB.js +1974 -0
  102. package/dist/chunk-PJ5H5B7A.js +3151 -0
  103. package/dist/chunk-PMUUAABD.js +604 -0
  104. package/dist/chunk-Q32C6AWI.js +236 -0
  105. package/dist/chunk-QGIC5SX5.js +139 -0
  106. package/dist/chunk-QLAGXTTV.js +482 -0
  107. package/dist/chunk-QLKCCC2J.js +573 -0
  108. package/dist/chunk-QWUSS2QP.js +3630 -0
  109. package/dist/chunk-QYSAZMSH.js +47 -0
  110. package/dist/chunk-R5NRX5N4.js +123 -0
  111. package/dist/chunk-RAUOKUZV.js +1572 -0
  112. package/dist/chunk-RBES4TCZ.js +302 -0
  113. package/dist/chunk-RFCKPS2V.js +26 -0
  114. package/dist/chunk-RFULVPBX.js +318 -0
  115. package/dist/chunk-RKFNU5UA.js +404 -0
  116. package/dist/chunk-RM3XJX7P.js +1148 -0
  117. package/dist/chunk-RNLAPBJL.js +386 -0
  118. package/dist/chunk-RPMNIFRY.js +65 -0
  119. package/dist/chunk-RRZFRIJP.js +42 -0
  120. package/dist/chunk-RXI7K4J5.js +4493 -0
  121. package/dist/chunk-SER7RRAE.js +4271 -0
  122. package/dist/chunk-STC6CWUZ.js +402 -0
  123. package/dist/chunk-TEHVMHOK.js +97 -0
  124. package/dist/chunk-TOPICHGR.js +33 -0
  125. package/dist/chunk-U3TPUXOQ.js +2653 -0
  126. package/dist/chunk-UB33F3YW.js +709 -0
  127. package/dist/chunk-UDAK6GR2.js +175 -0
  128. package/dist/chunk-USBBEKHW.js +177 -0
  129. package/dist/chunk-V4ZKOKRB.js +13433 -0
  130. package/dist/chunk-W5RM7YAH.js +78 -0
  131. package/dist/chunk-W7KNI3F5.js +215 -0
  132. package/dist/chunk-WFTSK7N3.js +637 -0
  133. package/dist/chunk-WJWNZXRM.js +395 -0
  134. package/dist/chunk-WLHX3MM5.js +63 -0
  135. package/dist/chunk-WS4FOGLY.js +686 -0
  136. package/dist/chunk-WTZVSMQZ.js +52 -0
  137. package/dist/chunk-WWRV5RJI.js +165 -0
  138. package/dist/chunk-X6FLVUM5.js +141 -0
  139. package/dist/chunk-XC5POIL4.js +68 -0
  140. package/dist/chunk-XTLJDC2X.js +1013 -0
  141. package/dist/chunk-XW2UZICE.js +372 -0
  142. package/dist/chunk-Y3JU5RPK.js +8 -0
  143. package/dist/chunk-YGIV24MF.js +1018 -0
  144. package/dist/chunk-YJCCMYYT.js +125 -0
  145. package/dist/chunk-YKIIWURD.js +36 -0
  146. package/dist/chunk-YQ3GFEUY.js +341 -0
  147. package/dist/chunk-YXANQGCX.js +179 -0
  148. package/dist/chunk-YXFKLMX2.js +222 -0
  149. package/dist/chunk-ZST3FRCV.js +132 -0
  150. package/dist/cli/index.js +40 -40
  151. package/dist/clio-BPBAPZGA.js +26 -0
  152. package/dist/code-nav-KBQ3RIFK.js +686 -0
  153. package/dist/components-6DKAXWFN.js +674 -0
  154. package/dist/config-FWL5JK2H.js +270 -0
  155. package/dist/config-graph-ACDB26L2.js +156 -0
  156. package/dist/configure-ZIZ4YV62.js +85 -0
  157. package/dist/context-EZZPT2ZV.js +1074 -0
  158. package/dist/context-VIL5MFRH.js +282 -0
  159. package/dist/context-Z3GOBHDK.js +344 -0
  160. package/dist/context-clear-ZPB3L7MN.js +188 -0
  161. package/dist/context-index-W6A4V7OC.js +120 -0
  162. package/dist/context-map-DKL3QT6D.js +555 -0
  163. package/dist/context-working-set-2GLBVF7L.js +1559 -0
  164. package/dist/detail-VSBWYSGZ.js +119 -0
  165. package/dist/dispatch-runner-EEEHGKX4.js +2442 -0
  166. package/dist/docs-VMMWFVHL.js +101 -0
  167. package/dist/doctor-V5L4IQGP.js +812 -0
  168. package/dist/eval-VJYJ2BV3.js +5050 -0
  169. package/dist/eval-inventory-CX24K2JT.js +260 -0
  170. package/dist/evals-J2H5V6DD.js +104 -0
  171. package/dist/evidence-POWAEBEW.js +229 -0
  172. package/dist/evidence-XCCCLS36.js +242 -0
  173. package/dist/evidence-Y35YSXH6.js +388 -0
  174. package/dist/evolve-GPG72VB6.js +613 -0
  175. package/dist/extensions-YIZ7W3DA.js +308 -0
  176. package/dist/fleet-2MDCQ2VK.js +264 -0
  177. package/dist/fleet-W2AF3TOJ.js +919 -0
  178. package/dist/fleet-commands-WS56G26H.js +75 -0
  179. package/dist/fleet-decisions-MYGZ3JW7.js +52 -0
  180. package/dist/fleet-graph-ELTBXBAV.js +136 -0
  181. package/dist/fleet-inspect-45IK73L4.js +308 -0
  182. package/dist/fleet-preflight-T5NCZKHE.js +22 -0
  183. package/dist/fleet-validate-VG4JBLA4.js +91 -0
  184. package/dist/fleet-verify-VTSABAYO.js +206 -0
  185. package/dist/fleet-view-XC7WMKSS.js +123 -0
  186. package/dist/init-VTJNNTIP.js +329 -0
  187. package/dist/install-6PIF6F6W.js +19 -0
  188. package/dist/interop-IU6BNA7C.js +246 -0
  189. package/dist/inventory-QPQUTUUZ.js +123 -0
  190. package/dist/library-HUTAS57T.js +492 -0
  191. package/dist/library-LF7DLU6S.js +306 -0
  192. package/dist/library-Q3NWL5CM.js +75 -0
  193. package/dist/library-import-PPW4YUC5.js +183 -0
  194. package/dist/library-inventory-DIRVFRZU.js +56 -0
  195. package/dist/library-validation-XHUZ3INE.js +42 -0
  196. package/dist/memory-Z2LSKNV6.js +516 -0
  197. package/dist/models-3FTREYPY.js +302 -0
  198. package/dist/monitor-HF2MQRB3.js +781 -0
  199. package/dist/orchestrator-UYPA6W4S.js +41502 -0
  200. package/dist/panes-736XB73K.js +74 -0
  201. package/dist/panes-C4P3PIWT.js +103 -0
  202. package/dist/paths-JQ4QYIYB.js +67 -0
  203. package/dist/preload-XSLRYH3Y.js +120 -0
  204. package/dist/reset-V7QSPZYE.js +345 -0
  205. package/dist/resources-OJGDFHYT.js +181 -0
  206. package/dist/run-T354SMDW.js +892 -0
  207. package/dist/settings-MWZXO6RV.js +72 -0
  208. package/dist/share-Y5ZKJPND.js +293 -0
  209. package/dist/skills-4GLZC4LN.js +100 -0
  210. package/dist/skills-eval-L5T7GODM.js +1074 -0
  211. package/dist/skills-inventory-LASKXEZI.js +138 -0
  212. package/dist/slash-commands-OIMRU36D.js +95 -0
  213. package/dist/steer-KMAM2Y2C.js +77 -0
  214. package/dist/support-AWC3XKPX.js +38 -0
  215. package/dist/system-CD75NYBU.js +116 -0
  216. package/dist/targets-VSZX2J2S.js +1116 -0
  217. package/dist/tasks-AN567LYH.js +36 -0
  218. package/dist/terminal-lease-6KTWNHVY.js +418 -0
  219. package/dist/tools-AGRK3V5J.js +28 -0
  220. package/dist/trace-P4MQZD33.js +524 -0
  221. package/dist/tui-primitives-A6MUW32V.js +18 -0
  222. package/dist/uninstall-BRUTEPIC.js +432 -0
  223. package/dist/upgrade-SBCGHQGJ.js +307 -0
  224. package/dist/usage-BIDVTO6V.js +1061 -0
  225. package/dist/verifiers-LTGCAMXS.js +630 -0
  226. package/dist/verify-OZU4LLNP.js +30 -0
  227. package/dist/web/client/THIRD_PARTY_LICENSES.md +1809 -0
  228. package/dist/web/client/assets/abnfDiagram-VCTEODGH-C5wfoHm3.js +1 -0
  229. package/dist/web/client/assets/arc-oH91sfLl.js +1 -0
  230. package/dist/web/client/assets/architecture-7GRP2DOG-EGozsYEO.js +1 -0
  231. package/dist/web/client/assets/architectureDiagram-5GKGNRK7-z9FokbJl.js +36 -0
  232. package/dist/web/client/assets/array-BifhSqXX.js +1 -0
  233. package/dist/web/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
  234. package/dist/web/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
  235. package/dist/web/client/assets/blockDiagram-I7D4REHJ-wi0_CYHL.js +129 -0
  236. package/dist/web/client/assets/c4Diagram-7LVT6UL2-DV7NYc2W.js +38 -0
  237. package/dist/web/client/assets/channel-CiUWbHN9.js +1 -0
  238. package/dist/web/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  239. package/dist/web/client/assets/chunk-4HAMMTFA-Bhsegh3F.js +62 -0
  240. package/dist/web/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  241. package/dist/web/client/assets/chunk-75Z2AOVW-RQCckcQG.js +2 -0
  242. package/dist/web/client/assets/chunk-DU6HZSFF-C5USiOAy.js +125 -0
  243. package/dist/web/client/assets/chunk-F27PBJKO-BcNqv2x1.js +1 -0
  244. package/dist/web/client/assets/chunk-FOHPRMQF-CoA4358r.js +161 -0
  245. package/dist/web/client/assets/chunk-GMAD6QVW-Bq8JWiZT.js +72 -0
  246. package/dist/web/client/assets/chunk-GVQU2GXP-DbchrAeJ.js +1 -0
  247. package/dist/web/client/assets/chunk-IMKFNOWR-DrpvjocK.js +231 -0
  248. package/dist/web/client/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  249. package/dist/web/client/assets/chunk-L3NEJ4N5-DHLmTnCe.js +1 -0
  250. package/dist/web/client/assets/chunk-OSK3NFVY-CsRbtN9n.js +10 -0
  251. package/dist/web/client/assets/chunk-P2QGCYS3-aqPbxoMh.js +1 -0
  252. package/dist/web/client/assets/chunk-POPQ4Y6H-Dl5vw0h0.js +1 -0
  253. package/dist/web/client/assets/chunk-PWAF6VOD-D7OBRSdO.js +1 -0
  254. package/dist/web/client/assets/chunk-SHT3W25Y-CdKCIwuB.js +168 -0
  255. package/dist/web/client/assets/chunk-SVP7TREG-B94Nu_1-.js +88 -0
  256. package/dist/web/client/assets/chunk-TICWLB2K-jjRQI_hk.js +206 -0
  257. package/dist/web/client/assets/chunk-XXDRQBXY-azkbKE37.js +1 -0
  258. package/dist/web/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  259. package/dist/web/client/assets/classDiagram-ZZMXUADV-CMODalmo.js +1 -0
  260. package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-CMODalmo.js +1 -0
  261. package/dist/web/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
  262. package/dist/web/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
  263. package/dist/web/client/assets/cose-bilkent-JH36ORCC-RbQL23qS.js +1 -0
  264. package/dist/web/client/assets/cynefin-OW5HDTMX--i9RDU5f.js +1 -0
  265. package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-cRcvyBdp.js +62 -0
  266. package/dist/web/client/assets/cytoscape.esm-c2aL46s-.js +321 -0
  267. package/dist/web/client/assets/dagre-C-rnJpZF.js +1 -0
  268. package/dist/web/client/assets/dagre-GXQ25YYZ-C9mZmAPe.js +4 -0
  269. package/dist/web/client/assets/defaultLocale-BFoDCU3G.js +1 -0
  270. package/dist/web/client/assets/diagram-S7CK7UJ4-Oj_zlLDY.js +30 -0
  271. package/dist/web/client/assets/diagram-UQ7AKVKN-BWKbbfcR.js +41 -0
  272. package/dist/web/client/assets/diagram-VSXAHHWV-C3N3f7DO.js +3 -0
  273. package/dist/web/client/assets/diagram-VX7I27RA-CtDKDAWe.js +24 -0
  274. package/dist/web/client/assets/diagram-Z3DM3KII-B8bkBRCz.js +24 -0
  275. package/dist/web/client/assets/dist-D0_q-A2b.js +1 -0
  276. package/dist/web/client/assets/ebnfDiagram-PWID7BFC-CskW-Whx.js +1 -0
  277. package/dist/web/client/assets/erDiagram-RLTQ6QDP-C-83cgCW.js +99 -0
  278. package/dist/web/client/assets/eventmodeling-NTZA5JFV-DjVq8wKU.js +1 -0
  279. package/dist/web/client/assets/flowDiagram-HODETNUW-BUiCBGXt.js +1 -0
  280. package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-B2lb8lvF.js +292 -0
  281. package/dist/web/client/assets/gitGraph-4MIJSDKK-B40cQtBE.js +1 -0
  282. package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CH-7P7Di.js +106 -0
  283. package/dist/web/client/assets/graphlib-DS17s2tU.js +1 -0
  284. package/dist/web/client/assets/index-Dsi52apB.css +1 -0
  285. package/dist/web/client/assets/index-FSIC94pi.js +83 -0
  286. package/dist/web/client/assets/info-A6RAGUB7-eCCE9D_Q.js +1 -0
  287. package/dist/web/client/assets/infoDiagram-27XIBGKW-DRnvqMjM.js +2 -0
  288. package/dist/web/client/assets/init-C-OQMol4.js +1 -0
  289. package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-DBA_55wp.js +70 -0
  290. package/dist/web/client/assets/journeyDiagram-3NMN7TZE-C-ewpNl7.js +139 -0
  291. package/dist/web/client/assets/kanban-definition-UXKFOSKX-B1taGsu0.js +89 -0
  292. package/dist/web/client/assets/katex-ZlcWpGUi.js +257 -0
  293. package/dist/web/client/assets/line-lZ0kyxDI.js +1 -0
  294. package/dist/web/client/assets/linear-DIc8FgZj.js +1 -0
  295. package/dist/web/client/assets/mermaid-parser.core-SXolxpXw.js +7 -0
  296. package/dist/web/client/assets/mermaid.core-DXgQtkNg.js +44 -0
  297. package/dist/web/client/assets/mindmap-definition-YA3MSWOX-DXJas9K7.js +96 -0
  298. package/dist/web/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
  299. package/dist/web/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
  300. package/dist/web/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
  301. package/dist/web/client/assets/ordinal-BDEzSJ7C.js +1 -0
  302. package/dist/web/client/assets/packet-AYTQ26CC-OqVl_07o.js +1 -0
  303. package/dist/web/client/assets/path-fybaL0A-.js +1 -0
  304. package/dist/web/client/assets/pegDiagram-XKGWAZYB-CPE_zdfN.js +1 -0
  305. package/dist/web/client/assets/pie-WAS4IAKB-DAxnMBLe.js +1 -0
  306. package/dist/web/client/assets/pieDiagram-E7YTZNPT-Uwjpufxv.js +39 -0
  307. package/dist/web/client/assets/prism-bash-D6zCJ74D.js +1 -0
  308. package/dist/web/client/assets/prism-c-04YixN25.js +1 -0
  309. package/dist/web/client/assets/prism-clike-DapgWyxx.js +1 -0
  310. package/dist/web/client/assets/prism-core-BngLtbUd.js +1 -0
  311. package/dist/web/client/assets/prism-cpp-C-lJbC-6.js +1 -0
  312. package/dist/web/client/assets/prism-css-CPgOzxXp.js +1 -0
  313. package/dist/web/client/assets/prism-diff-BF8m0_mq.js +3 -0
  314. package/dist/web/client/assets/prism-docker-DkT6yOFj.js +1 -0
  315. package/dist/web/client/assets/prism-fortran-Be5x3y1V.js +1 -0
  316. package/dist/web/client/assets/prism-go-C_8qAH5n.js +1 -0
  317. package/dist/web/client/assets/prism-ini-BESK3y0r.js +1 -0
  318. package/dist/web/client/assets/prism-javascript-BnO-swvr.js +1 -0
  319. package/dist/web/client/assets/prism-json-Dp_-W-Hv.js +1 -0
  320. package/dist/web/client/assets/prism-jsx-D-D0NWtC.js +1 -0
  321. package/dist/web/client/assets/prism-julia-DIjOgiAV.js +1 -0
  322. package/dist/web/client/assets/prism-latex-DNMbqcH_.js +1 -0
  323. package/dist/web/client/assets/prism-makefile-CRKWLQ8l.js +1 -0
  324. package/dist/web/client/assets/prism-markdown-C0FPJ1Iz.js +1 -0
  325. package/dist/web/client/assets/prism-markup-Cp04rIa1.js +1 -0
  326. package/dist/web/client/assets/prism-matlab-D-nk08al.js +1 -0
  327. package/dist/web/client/assets/prism-python-CfiSVtM6.js +1 -0
  328. package/dist/web/client/assets/prism-r-QmNGR8LX.js +1 -0
  329. package/dist/web/client/assets/prism-rust-Bu9N8X3N.js +1 -0
  330. package/dist/web/client/assets/prism-shell-session-Be4UuYoM.js +1 -0
  331. package/dist/web/client/assets/prism-sql-CYhVDMEE.js +1 -0
  332. package/dist/web/client/assets/prism-toml-DKb54GAT.js +1 -0
  333. package/dist/web/client/assets/prism-tsx-p6J2Kc_4.js +1 -0
  334. package/dist/web/client/assets/prism-typescript-BMqONzxf.js +1 -0
  335. package/dist/web/client/assets/prism-yaml-C0JHu8gr.js +1 -0
  336. package/dist/web/client/assets/purify.es-ChwZkWde.js +3 -0
  337. package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-Bjs4yjgs.js +7 -0
  338. package/dist/web/client/assets/radar-RG4KPBEZ-CuCKjHM3.js +1 -0
  339. package/dist/web/client/assets/railroad-74A4TZTK-CnQK-Cc1.js +1 -0
  340. package/dist/web/client/assets/railroad-abnf-HS5TGJTU-BcW01NZG.js +1 -0
  341. package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-B7YCEDDd.js +1 -0
  342. package/dist/web/client/assets/railroad-peg-WCYAUIDC-DjNZbSTZ.js +1 -0
  343. package/dist/web/client/assets/railroadDiagram-O6MQD6OU-BDDIPNLL.js +1 -0
  344. package/dist/web/client/assets/requirementDiagram-BXWQKSXE-B5Ydyxc1.js +84 -0
  345. package/dist/web/client/assets/rough.esm-Dy-Kn_BL.js +1 -0
  346. package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-Bw2Qym75.js +40 -0
  347. package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-BZf36nO0.js +162 -0
  348. package/dist/web/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
  349. package/dist/web/client/assets/src-yeptRXpt.js +1 -0
  350. package/dist/web/client/assets/stateDiagram-D77RDMKH-DnH6JRkp.js +1 -0
  351. package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-C7QtHeK4.js +1 -0
  352. package/dist/web/client/assets/swimlanes-42K2YHIH-D9PZmtZg.js +1 -0
  353. package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-CBZlPFky.js +8 -0
  354. package/dist/web/client/assets/timeline-definition-24CTP7MA-CrkZZBo7.js +120 -0
  355. package/dist/web/client/assets/treeView-Q6P3EWNA-C9zDShoC.js +1 -0
  356. package/dist/web/client/assets/treemap-WGGIJYW6-B-plj9yK.js +1 -0
  357. package/dist/web/client/assets/vennDiagram-4TSXK5OY-VeOdaphN.js +34 -0
  358. package/dist/web/client/assets/wardley-WFR3VGLG-Wl1P_m6L.js +1 -0
  359. package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-B85-R9t2.js +78 -0
  360. package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BrD8OW8m.js +7 -0
  361. package/dist/web/client/clio-coder-logo.webp +0 -0
  362. package/dist/web/client/icon-192.png +0 -0
  363. package/dist/web/client/icon-512.png +0 -0
  364. package/dist/web/client/index.html +4 -0
  365. package/dist/web/client/manifest.webmanifest +15 -0
  366. package/dist/web/client/offline.css +55 -0
  367. package/dist/web/client/offline.html +5 -0
  368. package/dist/web/client/offline.js +27 -0
  369. package/dist/web/client/sw.js +34 -0
  370. package/dist/web/ops-worker.js +37 -0
  371. package/dist/web/reads-worker.js +1726 -0
  372. package/dist/web/server.js +8499 -0
  373. package/dist/web-EU6ATJWA.js +13 -0
  374. package/dist/web-fetch-U22Q7HV4.js +788 -0
  375. package/dist/wiki-generate-LZRLFG6I.js +623 -0
  376. package/dist/with-panes-X5CZOGML.js +628 -0
  377. package/dist/worker/entry.js +300 -93
  378. package/docs/README.md +58 -14
  379. package/docs/architecture/acp.md +5 -9
  380. package/docs/architecture/alcf-provider.md +0 -3
  381. package/docs/architecture/architecture.md +8 -10
  382. package/docs/architecture/artifact-placement.md +0 -3
  383. package/docs/architecture/artifact-versions.md +3 -6
  384. package/docs/architecture/capacity-and-scheduling.md +0 -3
  385. package/docs/architecture/context-engine.md +35 -4
  386. package/docs/architecture/context-working-set.md +0 -3
  387. package/docs/architecture/dispatch-architecture-rationale.md +0 -3
  388. package/docs/architecture/dispatch-typed-intent.md +0 -3
  389. package/docs/architecture/evidence-and-memory.md +0 -3
  390. package/docs/architecture/library.md +30 -0
  391. package/docs/architecture/middleware-and-components.md +1 -4
  392. package/docs/architecture/model-catalog.md +21 -4
  393. package/docs/architecture/observability.md +0 -3
  394. package/docs/architecture/pi-boundary.md +23 -8
  395. package/docs/architecture/prompt-envelope-and-tools.md +6 -9
  396. package/docs/architecture/provider-adapter-cookbook.md +1 -4
  397. package/docs/architecture/safety-model.md +21 -5
  398. package/docs/architecture/session-lifecycle.md +12 -4
  399. package/docs/architecture/time-conventions.md +0 -3
  400. package/docs/architecture/trace-store.md +28 -20
  401. package/docs/architecture/tui-design.md +108 -12
  402. package/docs/architecture/worker-context.md +104 -0
  403. package/docs/architecture/worker-dispatch-mechanics.md +1 -4
  404. package/docs/guide/authoring-plugins.md +158 -0
  405. package/docs/guide/built-in-agents.md +5 -8
  406. package/docs/guide/commands-and-modes.md +162 -61
  407. package/docs/guide/configuration-and-targets.md +198 -5
  408. package/docs/guide/configuration-reference.md +36 -38
  409. package/docs/guide/environment-variables.md +2 -5
  410. package/docs/guide/exit-codes-and-output.md +1 -4
  411. package/docs/guide/extensions-and-sharing.md +92 -55
  412. package/docs/guide/fleet-dispatch.md +31 -7
  413. package/docs/guide/glossary.md +1 -4
  414. package/docs/guide/harness-extensions.md +289 -0
  415. package/docs/guide/installation-and-lifecycle.md +10 -13
  416. package/docs/guide/interop.md +241 -0
  417. package/docs/guide/panes-and-files.md +3 -6
  418. package/docs/guide/plugins.md +77 -0
  419. package/docs/guide/proactive-memory.md +0 -3
  420. package/docs/guide/resource-library.md +109 -45
  421. package/docs/guide/skills-marketplace.md +34 -73
  422. package/docs/guide/tool-usage.md +19 -10
  423. package/docs/guide/troubleshooting.md +1 -4
  424. package/docs/history/config-knobs-audit.md +0 -3
  425. package/docs/history/release-cut-checklist.md +0 -3
  426. package/docs/process/development-pipeline.md +14 -17
  427. package/docs/process/documentation-coverage.md +31 -4
  428. package/docs/process/documentation-guide.md +28 -27
  429. package/docs/process/eval-runner.md +8 -6
  430. package/docs/process/evals-internal.md +0 -3
  431. package/docs/process/evolution.md +0 -3
  432. package/docs/process/fleet-demo-runbook.md +0 -3
  433. package/docs/process/git-commit-provenance.md +0 -3
  434. package/docs/process/performance-methodology.md +2 -5
  435. package/docs/process/release-cut-checklist.md +114 -217
  436. package/docs/process/scientific-validation.md +23 -3
  437. package/evals/scalar-decision-machinery.ts +1 -1
  438. package/examples/extensions/README.md +67 -0
  439. package/examples/extensions/lab-status/clio-coder-extension.json +14 -0
  440. package/examples/extensions/lab-status/extension.mjs +68 -0
  441. package/examples/extensions/lab-status/jobs.synthetic.json +9 -0
  442. package/examples/extensions/measurements/clio-coder-extension.json +28 -0
  443. package/examples/extensions/measurements/summarize.cjs +23 -0
  444. package/library/README.md +109 -0
  445. package/library/_authoring/templates/agent/README.md +28 -0
  446. package/library/_authoring/templates/agent/agents/benchmark-scout.md +30 -0
  447. package/library/_authoring/templates/agent/plugin.json +23 -0
  448. package/library/_authoring/templates/fleet/README.md +29 -0
  449. package/library/_authoring/templates/fleet/fleets/pipeline-review.md +31 -0
  450. package/library/_authoring/templates/fleet/plugin.json +23 -0
  451. package/library/_authoring/templates/plugin/README.md +37 -0
  452. package/library/_authoring/templates/plugin/agents/data-curator.md +31 -0
  453. package/library/_authoring/templates/plugin/assets/curation-guide.md +22 -0
  454. package/library/_authoring/templates/plugin/plugin.json +42 -0
  455. package/library/_authoring/templates/plugin/prompts/inspect-dataset.md +15 -0
  456. package/library/_authoring/templates/plugin/skills/dataset-curation/SKILL.md +36 -0
  457. package/library/_authoring/templates/plugin/skills/dataset-curation/evals.md +17 -0
  458. package/library/_authoring/templates/prompt/README.md +28 -0
  459. package/library/_authoring/templates/prompt/plugin.json +23 -0
  460. package/library/_authoring/templates/prompt/prompts/paper-summary.md +26 -0
  461. package/library/_authoring/templates/skill/README.md +24 -0
  462. package/library/_authoring/templates/skill/SKILL.md +39 -0
  463. package/library/_authoring/templates/skill/evals.md +30 -0
  464. package/library/_authoring/templates/skill/plugin.json +23 -0
  465. package/library/agents/README.md +7 -0
  466. package/library/fleets/README.md +7 -0
  467. package/library/plugins/materio/README.md +137 -0
  468. package/library/plugins/materio/ai.iowarp.clio/agents/materio-lab-definer.md +208 -0
  469. package/library/plugins/materio/ai.iowarp.clio/agents/materio-literature-reviewer.md +308 -0
  470. package/library/plugins/materio/ai.iowarp.clio/agents/materio-research-explorer.md +249 -0
  471. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-executor.md +416 -0
  472. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-verifier.md +60 -0
  473. package/library/plugins/materio/ai.iowarp.clio/agents/materio-workflow-planner.md +238 -0
  474. package/library/plugins/materio/ai.iowarp.clio/fleets/materio-execute-task.md +50 -0
  475. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/add-task.md +66 -0
  476. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/archive-task.md +65 -0
  477. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/checkpoint.md +26 -0
  478. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-research-tasks.md +230 -0
  479. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-virtual-lab.md +181 -0
  480. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/execute-task.md +292 -0
  481. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/help.md +129 -0
  482. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/identify-research.md +206 -0
  483. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/literature-review.md +201 -0
  484. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/pause-research.md +12 -0
  485. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/progress.md +105 -0
  486. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/remove-task.md +63 -0
  487. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/resume-research.md +64 -0
  488. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/settings.md +16 -0
  489. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/status.md +92 -0
  490. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/upload-data.md +104 -0
  491. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/wtfp.md +145 -0
  492. package/library/plugins/materio/ai.iowarp.clio/references/execution.md +56 -0
  493. package/library/plugins/materio/ai.iowarp.portability/provenance.json +9 -0
  494. package/library/plugins/materio/assets/actions/add-task.md +86 -0
  495. package/library/plugins/materio/assets/actions/archive-task.md +84 -0
  496. package/library/plugins/materio/assets/actions/checkpoint.md +47 -0
  497. package/library/plugins/materio/assets/actions/define-research-tasks.md +228 -0
  498. package/library/plugins/materio/assets/actions/define-virtual-lab.md +179 -0
  499. package/library/plugins/materio/assets/actions/execute-task.md +290 -0
  500. package/library/plugins/materio/assets/actions/help.md +140 -0
  501. package/library/plugins/materio/assets/actions/identify-research.md +204 -0
  502. package/library/plugins/materio/assets/actions/literature-review.md +199 -0
  503. package/library/plugins/materio/assets/actions/pause-research.md +34 -0
  504. package/library/plugins/materio/assets/actions/progress.md +125 -0
  505. package/library/plugins/materio/assets/actions/remove-task.md +82 -0
  506. package/library/plugins/materio/assets/actions/resume-research.md +84 -0
  507. package/library/plugins/materio/assets/actions/settings.md +38 -0
  508. package/library/plugins/materio/assets/actions/status.md +112 -0
  509. package/library/plugins/materio/assets/actions/upload-data.md +123 -0
  510. package/library/plugins/materio/assets/actions/wtfp.md +179 -0
  511. package/library/plugins/materio/assets/references/research-domains.md +134 -0
  512. package/library/plugins/materio/assets/references/research-policy.md +77 -0
  513. package/library/plugins/materio/assets/references/traditional-workflows.md +146 -0
  514. package/library/plugins/materio/assets/scripts/check_physics.py +271 -0
  515. package/library/plugins/materio/assets/scripts/check_scripts.py +248 -0
  516. package/library/plugins/materio/assets/scripts/project_plugin.py +165 -0
  517. package/library/plugins/materio/assets/scripts/research_state.py +400 -0
  518. package/library/plugins/materio/assets/scripts/verify_citations.py +616 -0
  519. package/library/plugins/materio/assets/templates/RESEARCH.md +39 -0
  520. package/library/plugins/materio/assets/templates/VIRTUAL-LAB.md +120 -0
  521. package/library/plugins/materio/assets/templates/WORKFLOW.md +42 -0
  522. package/library/plugins/materio/assets/templates/config.json +5 -0
  523. package/library/plugins/materio/evals/scripts.yaml +29 -0
  524. package/library/plugins/materio/plugin.json +530 -0
  525. package/library/plugins/materio/skills/materio-lab-definer/SKILL.md +74 -0
  526. package/library/plugins/materio/skills/materio-literature-reviewer/SKILL.md +64 -0
  527. package/library/plugins/materio/skills/materio-research-explorer/SKILL.md +74 -0
  528. package/library/plugins/materio/skills/materio-task-executor/SKILL.md +214 -0
  529. package/library/plugins/materio/skills/materio-task-verifier/SKILL.md +46 -0
  530. package/library/plugins/materio/skills/materio-workflow-planner/SKILL.md +79 -0
  531. package/library/plugins/materio/tests/test_check_physics.py +139 -0
  532. package/library/plugins/materio/tests/test_check_scripts.py +140 -0
  533. package/library/plugins/materio/tests/test_research_state.py +291 -0
  534. package/library/plugins/materio/tests/test_verify_citations.py +337 -0
  535. package/library/prompts/README.md +7 -0
  536. package/library/registry.yaml +921 -0
  537. package/library/skills/README.md +120 -0
  538. package/library/skills/coding/ast-grep/SKILL.md +213 -0
  539. package/library/skills/coding/ast-grep/evals.md +82 -0
  540. package/library/skills/coding/ast-grep/plugin.json +23 -0
  541. package/library/skills/coding/coding-standards/SKILL.md +164 -0
  542. package/library/skills/coding/coding-standards/evals.md +57 -0
  543. package/library/skills/coding/coding-standards/plugin.json +23 -0
  544. package/library/skills/coding/prototype/SKILL.md +151 -0
  545. package/library/skills/coding/prototype/evals.md +61 -0
  546. package/library/skills/coding/prototype/plugin.json +23 -0
  547. package/library/skills/coding/tdd/SKILL.md +134 -0
  548. package/library/skills/coding/tdd/evals.md +61 -0
  549. package/library/skills/coding/tdd/plugin.json +23 -0
  550. package/library/skills/context/context-handoff/SKILL.md +176 -0
  551. package/library/skills/context/context-handoff/evals.md +101 -0
  552. package/library/skills/context/context-handoff/plugin.json +23 -0
  553. package/library/skills/context/context-prime/SKILL.md +131 -0
  554. package/library/skills/context/context-prime/evals.md +99 -0
  555. package/library/skills/context/context-prime/plugin.json +23 -0
  556. package/library/skills/git/branch-closeout/SKILL.md +132 -0
  557. package/library/skills/git/branch-closeout/plugin.json +23 -0
  558. package/library/skills/git/file-ticket/SKILL.md +126 -0
  559. package/library/skills/git/file-ticket/plugin.json +23 -0
  560. package/library/skills/git/fix-issue/SKILL.md +136 -0
  561. package/library/skills/git/fix-issue/plugin.json +23 -0
  562. package/library/skills/git/resolve-merge-conflicts/SKILL.md +151 -0
  563. package/library/skills/git/resolve-merge-conflicts/evals.md +85 -0
  564. package/library/skills/git/resolve-merge-conflicts/plugin.json +23 -0
  565. package/library/skills/git/ship/SKILL.md +134 -0
  566. package/library/skills/git/ship/plugin.json +23 -0
  567. package/library/skills/git/worktree-create/SKILL.md +127 -0
  568. package/library/skills/git/worktree-create/plugin.json +23 -0
  569. package/library/skills/git/worktree-merge/SKILL.md +147 -0
  570. package/library/skills/git/worktree-merge/plugin.json +23 -0
  571. package/library/skills/meta/clio-coder-dev/SKILL.md +101 -0
  572. package/library/skills/meta/clio-coder-dev/evals.md +46 -0
  573. package/library/skills/meta/clio-coder-dev/plugin.json +23 -0
  574. package/library/skills/meta/clio-coder-test/SKILL.md +156 -0
  575. package/library/skills/meta/clio-coder-test/evals.md +62 -0
  576. package/library/skills/meta/clio-coder-test/plugin.json +23 -0
  577. package/library/skills/meta/clio-coder-test/references/test-map.md +97 -0
  578. package/library/skills/meta/credentials/SKILL.md +132 -0
  579. package/library/skills/meta/credentials/evals.md +104 -0
  580. package/library/skills/meta/credentials/plugin.json +23 -0
  581. package/library/skills/meta/find-skills/SKILL.md +85 -0
  582. package/library/skills/meta/find-skills/evals.md +65 -0
  583. package/library/skills/meta/find-skills/plugin.json +23 -0
  584. package/library/skills/meta/herdr/SKILL.md +133 -0
  585. package/library/skills/meta/herdr/evals.md +38 -0
  586. package/library/skills/meta/herdr/plugin.json +23 -0
  587. package/library/skills/meta/skill-craft/SKILL.md +139 -0
  588. package/library/skills/meta/skill-craft/evals.md +49 -0
  589. package/library/skills/meta/skill-craft/plugin.json +23 -0
  590. package/library/skills/planning/archify/SKILL.md +196 -0
  591. package/library/skills/planning/archify/plugin.json +23 -0
  592. package/library/skills/planning/architecture/SKILL.md +184 -0
  593. package/library/skills/planning/architecture/evals.md +101 -0
  594. package/library/skills/planning/architecture/plugin.json +23 -0
  595. package/library/skills/planning/backlog/SKILL.md +212 -0
  596. package/library/skills/planning/backlog/evals.md +185 -0
  597. package/library/skills/planning/backlog/plugin.json +23 -0
  598. package/library/skills/planning/prd/SKILL.md +129 -0
  599. package/library/skills/planning/prd/evals.md +103 -0
  600. package/library/skills/planning/prd/plugin.json +23 -0
  601. package/library/skills/planning/product-intent/SKILL.md +173 -0
  602. package/library/skills/planning/product-intent/evals.md +106 -0
  603. package/library/skills/planning/product-intent/plugin.json +23 -0
  604. package/library/skills/planning/tech-spec/SKILL.md +172 -0
  605. package/library/skills/planning/tech-spec/evals.md +120 -0
  606. package/library/skills/planning/tech-spec/plugin.json +23 -0
  607. package/library/skills/registry.yaml +144 -0
  608. package/library/skills/remote.yaml +13 -0
  609. package/library/skills/research/arxiv-literature/SKILL.md +168 -0
  610. package/library/skills/research/arxiv-literature/evals.md +108 -0
  611. package/library/skills/research/arxiv-literature/plugin.json +23 -0
  612. package/library/skills/research/experiment-protocol/SKILL.md +148 -0
  613. package/library/skills/research/experiment-protocol/evals.md +114 -0
  614. package/library/skills/research/experiment-protocol/plugin.json +23 -0
  615. package/library/skills/research/scientific-debugging/SKILL.md +149 -0
  616. package/library/skills/research/scientific-debugging/evals.md +156 -0
  617. package/library/skills/research/scientific-debugging/plugin.json +23 -0
  618. package/library/skills/research/scientific-modernization/SKILL.md +170 -0
  619. package/library/skills/research/scientific-modernization/evals.md +111 -0
  620. package/library/skills/research/scientific-modernization/plugin.json +23 -0
  621. package/library/skills/skill-marketplace.json +507 -0
  622. package/library/skills/workflow/cut-it/SKILL.md +153 -0
  623. package/library/skills/workflow/cut-it/evals.md +143 -0
  624. package/library/skills/workflow/cut-it/plugin.json +23 -0
  625. package/library/skills/workflow/design-council/SKILL.md +233 -0
  626. package/library/skills/workflow/design-council/evals.md +258 -0
  627. package/library/skills/workflow/design-council/plugin.json +23 -0
  628. package/library/skills/workflow/grill-me/SKILL.md +267 -0
  629. package/library/skills/workflow/grill-me/evals.md +231 -0
  630. package/library/skills/workflow/grill-me/plugin.json +23 -0
  631. package/library/skills/workflow/workflow-distiller/SKILL.md +204 -0
  632. package/library/skills/workflow/workflow-distiller/evals.md +233 -0
  633. package/library/skills/workflow/workflow-distiller/plugin.json +23 -0
  634. package/package.json +23 -14
  635. package/src/cli/agents.ts +1 -1
  636. package/src/cli/config-inspect.ts +1 -1
  637. package/src/cli/configure.ts +2 -2
  638. package/src/cli/docs.ts +65 -328
  639. package/src/cli/eval.ts +40 -6
  640. package/src/cli/extensions.ts +74 -8
  641. package/src/cli/fleet-preflight.ts +2 -0
  642. package/src/cli/fleet.ts +2 -0
  643. package/src/cli/index.ts +4 -4
  644. package/src/cli/interop-inspect.ts +61 -33
  645. package/src/cli/interop.ts +79 -9
  646. package/src/cli/library-import.ts +139 -0
  647. package/src/cli/library.ts +418 -120
  648. package/src/cli/run.ts +26 -9
  649. package/src/cli/skills-eval.ts +43 -6
  650. package/src/cli/skills-inventory.ts +6 -2
  651. package/src/cli/skills.ts +44 -491
  652. package/src/cli/trace.ts +4 -65
  653. package/src/cli/uninstall.ts +26 -0
  654. package/src/cli/usage.ts +3 -0
  655. package/src/cli/web.ts +79 -0
  656. package/src/core/bus-events.ts +8 -4
  657. package/src/core/config.ts +71 -0
  658. package/src/core/defaults.ts +1 -1
  659. package/src/core/domain-loader.ts +37 -28
  660. package/src/core/recent-models.ts +2 -2
  661. package/src/core/session-routing.ts +3 -3
  662. package/src/core/state-file-lock.ts +1 -1
  663. package/src/core/termination.ts +13 -9
  664. package/src/core/tool-names.ts +5 -0
  665. package/src/domains/agents/contract.ts +1 -1
  666. package/src/domains/agents/extension.ts +53 -9
  667. package/src/domains/agents/fleet-commands.ts +92 -1
  668. package/src/domains/agents/fleet-contract.ts +87 -19
  669. package/src/domains/agents/recipe.ts +5 -4
  670. package/src/domains/agents/registry.ts +80 -24
  671. package/src/domains/config/extension.ts +5 -4
  672. package/src/domains/config/keybindings.ts +155 -95
  673. package/src/domains/context/worker/contract.ts +91 -0
  674. package/src/domains/context/worker/pressure.ts +120 -0
  675. package/src/domains/context/worker/recall.ts +62 -0
  676. package/src/domains/context/worker/select.ts +164 -0
  677. package/src/domains/context/worker/snapshot.ts +35 -0
  678. package/src/domains/context/worker/store.ts +16 -0
  679. package/src/domains/context/working-set/replay/synthetic.ts +2 -1
  680. package/src/domains/dispatch/active-route-planner.ts +2 -0
  681. package/src/domains/dispatch/backoff.ts +1 -0
  682. package/src/domains/dispatch/code-step.ts +12 -2
  683. package/src/domains/dispatch/contract.ts +3 -0
  684. package/src/domains/dispatch/execution-plan.ts +2 -0
  685. package/src/domains/dispatch/extension.ts +184 -39
  686. package/src/domains/dispatch/fleet-plan.ts +10 -0
  687. package/src/domains/dispatch/fleet-run.ts +1 -0
  688. package/src/domains/dispatch/index.ts +1 -0
  689. package/src/domains/dispatch/orphan-recovery.ts +2 -0
  690. package/src/domains/dispatch/receipt-integrity.ts +7 -0
  691. package/src/domains/dispatch/state.ts +2 -2
  692. package/src/domains/dispatch/types.ts +7 -0
  693. package/src/domains/dispatch/validation.ts +12 -0
  694. package/src/domains/dispatch/workspace-checkpoint.ts +1 -1
  695. package/src/domains/eval/metrics/tracked.ts +22 -2
  696. package/src/domains/evidence/failure-attribution.ts +1 -0
  697. package/src/domains/evidence/trust-status.ts +22 -3
  698. package/src/domains/extensions/command-schema.ts +145 -0
  699. package/src/domains/extensions/command-tools.ts +15 -0
  700. package/src/domains/extensions/compatibility.ts +7 -0
  701. package/src/domains/extensions/contract.ts +0 -4
  702. package/src/domains/extensions/discovery.ts +69 -205
  703. package/src/domains/extensions/extension.ts +0 -4
  704. package/src/domains/extensions/index.ts +1 -5
  705. package/src/domains/extensions/manager.ts +1 -6
  706. package/src/domains/extensions/operator-commands.ts +29 -0
  707. package/src/domains/extensions/operator-runtime.ts +485 -0
  708. package/src/domains/extensions/public-api.ts +53 -0
  709. package/src/domains/extensions/runtime-child.mjs +114 -0
  710. package/src/domains/extensions/runtime-process.ts +306 -0
  711. package/src/domains/extensions/runtime-schema.ts +146 -0
  712. package/src/domains/extensions/snapshot-access.ts +21 -0
  713. package/src/domains/extensions/snapshot.ts +4 -32
  714. package/src/domains/extensions/state.ts +5 -83
  715. package/src/domains/extensions/types.ts +33 -34
  716. package/src/domains/interop/adopt.ts +546 -0
  717. package/src/domains/interop/detect.ts +50 -12
  718. package/src/domains/interop/foreign.ts +554 -0
  719. package/src/domains/interop/import.ts +277 -0
  720. package/src/domains/interop/index.ts +24 -0
  721. package/src/domains/interop/install.ts +6 -0
  722. package/src/domains/interop/inventory.ts +351 -0
  723. package/src/domains/interop/projection.ts +360 -0
  724. package/src/domains/interop/registry.ts +106 -3
  725. package/src/domains/interop/types.ts +51 -0
  726. package/src/domains/lifecycle/migrations/index.ts +0 -2
  727. package/src/domains/lifecycle/naming-resources.ts +1 -1
  728. package/src/domains/middleware/hooks.ts +2 -2
  729. package/src/domains/middleware/marketplace-offer.ts +1 -1
  730. package/src/domains/mux/contract.ts +1 -1
  731. package/src/domains/observability/background-memory-usage.ts +3 -0
  732. package/src/domains/observability/compaction-usage.ts +2 -0
  733. package/src/domains/observability/cost.ts +5 -0
  734. package/src/domains/observability/extension.ts +1 -0
  735. package/src/domains/observability/out-of-turn-usage.ts +2 -0
  736. package/src/domains/observability/trace-store.ts +65 -5
  737. package/src/domains/plugins/catalog.ts +204 -0
  738. package/src/domains/plugins/contract.ts +24 -0
  739. package/src/domains/plugins/discovery.ts +316 -0
  740. package/src/domains/plugins/extension.ts +40 -0
  741. package/src/domains/plugins/index.ts +77 -0
  742. package/src/domains/plugins/integrity.ts +6 -0
  743. package/src/domains/plugins/manifest.ts +3 -0
  744. package/src/domains/plugins/resources.ts +102 -0
  745. package/src/domains/plugins/state.ts +753 -0
  746. package/src/domains/plugins/types.ts +217 -0
  747. package/src/domains/prompts/extension.ts +4 -10
  748. package/src/domains/prompts/fragments/operating/skills.md +10 -10
  749. package/src/domains/providers/cache-deployment.ts +147 -0
  750. package/src/domains/providers/catalog.ts +12 -7
  751. package/src/domains/providers/extension.ts +27 -5
  752. package/src/domains/providers/index.ts +1 -0
  753. package/src/domains/providers/plugins.ts +3 -13
  754. package/src/domains/providers/runtimes/common/local-synth.ts +4 -0
  755. package/src/domains/providers/types/target-descriptor.ts +17 -0
  756. package/src/domains/resources/common-loader.ts +9 -6
  757. package/src/domains/resources/index.ts +67 -0
  758. package/src/domains/resources/library-actions.ts +836 -0
  759. package/src/domains/resources/library-evals.ts +38 -0
  760. package/src/domains/resources/library-inventory.ts +1048 -0
  761. package/src/domains/resources/library-types.ts +50 -0
  762. package/src/domains/resources/library-validation.ts +634 -0
  763. package/src/domains/resources/library.ts +437 -156
  764. package/src/domains/resources/package-references.ts +66 -0
  765. package/src/domains/resources/prompts/loader.ts +75 -41
  766. package/src/domains/resources/skills/install.ts +2 -2
  767. package/src/domains/resources/skills/loader.ts +77 -22
  768. package/src/domains/resources/skills/marketplace.ts +48 -57
  769. package/src/domains/resources/skills/promotion.ts +2 -2
  770. package/src/domains/resources/skills/provenance-pin.ts +17 -4
  771. package/src/domains/safety/action-classifier.ts +2 -2
  772. package/src/domains/safety/default-path-policy.ts +3 -1
  773. package/src/domains/safety/policy-engine.ts +1 -1
  774. package/src/domains/safety/protected-artifacts.ts +21 -5
  775. package/src/domains/safety/skill-authority.ts +5 -2
  776. package/src/domains/session/compaction/compact.ts +4 -1
  777. package/src/domains/session/entries.ts +1 -0
  778. package/src/domains/session/usage.ts +6 -7
  779. package/src/domains/share/archive.ts +1 -1
  780. package/src/engine/acp/server.ts +11 -0
  781. package/src/engine/ai.ts +2 -0
  782. package/src/engine/apis/openai-completions.ts +61 -6
  783. package/src/engine/notices/pi-tui-LICENSE +21 -0
  784. package/src/engine/prewarm.ts +232 -0
  785. package/src/engine/provider-diagnostics.ts +6 -1
  786. package/src/engine/tui.ts +3 -0
  787. package/src/engine/worker-runtime.ts +58 -14
  788. package/src/engine/worker-tools.ts +5 -0
  789. package/src/entry/orchestrator.ts +46 -21
  790. package/src/entry/plugin-reload.ts +18 -0
  791. package/src/interactive/application-controller.ts +67 -21
  792. package/src/interactive/chat-loop-messages.ts +3 -0
  793. package/src/interactive/chat-loop.ts +32 -11
  794. package/src/interactive/chat-panel.ts +5 -1
  795. package/src/interactive/clio-editor.ts +53 -21
  796. package/src/interactive/command-output.ts +56 -1
  797. package/src/interactive/editor-submit.ts +65 -28
  798. package/src/interactive/fleet-run-preview.ts +2 -0
  799. package/src/interactive/follow-up-queue-panel.ts +3 -3
  800. package/src/interactive/footer/dashboard.ts +4 -1
  801. package/src/interactive/footer/notifications.ts +2 -2
  802. package/src/interactive/footer/widgets.ts +2 -2
  803. package/src/interactive/interactive-application.ts +209 -21
  804. package/src/interactive/interactive-input-runtime.ts +254 -7
  805. package/src/interactive/interactive-presentation.ts +41 -12
  806. package/src/interactive/interactive-slash-runtime.ts +37 -8
  807. package/src/interactive/keybinding-manager.ts +156 -79
  808. package/src/interactive/keyboard-owner.ts +37 -0
  809. package/src/interactive/leader-key.ts +49 -102
  810. package/src/interactive/leader-menu.ts +45 -0
  811. package/src/interactive/overlay-ask-user-lifecycle.ts +9 -1
  812. package/src/interactive/overlay-frame.ts +15 -0
  813. package/src/interactive/overlay-key-routing.ts +46 -47
  814. package/src/interactive/overlay-lifecycle.ts +30 -15
  815. package/src/interactive/overlay-resource-openers.ts +56 -46
  816. package/src/interactive/overlays/ask-user.ts +630 -556
  817. package/src/interactive/overlays/extension-panel.ts +70 -0
  818. package/src/interactive/overlays/extensions.ts +28 -5
  819. package/src/interactive/overlays/fleet-run-approval.ts +7 -3
  820. package/src/interactive/overlays/help-reference.ts +89 -40
  821. package/src/interactive/overlays/interop.ts +122 -3
  822. package/src/interactive/overlays/keybinding-detail.ts +2 -2
  823. package/src/interactive/overlays/library-lifecycle.ts +90 -0
  824. package/src/interactive/overlays/library-model.ts +574 -0
  825. package/src/interactive/overlays/library-review.ts +557 -0
  826. package/src/interactive/overlays/library-tabs.ts +3 -15
  827. package/src/interactive/overlays/library.ts +602 -0
  828. package/src/interactive/overlays/list-overlay.ts +218 -39
  829. package/src/interactive/overlays/model-selector.ts +28 -25
  830. package/src/interactive/overlays/session-selector.ts +9 -3
  831. package/src/interactive/overlays/settings.ts +25 -18
  832. package/src/interactive/overlays/tree-selector.ts +16 -11
  833. package/src/interactive/permission-hint.ts +13 -0
  834. package/src/interactive/permission-overlay.ts +77 -28
  835. package/src/interactive/prewarm.ts +11 -197
  836. package/src/interactive/prompt-source-label.ts +21 -0
  837. package/src/interactive/renderers/reference-card.ts +35 -0
  838. package/src/interactive/renderers/worker-entry.ts +35 -3
  839. package/src/interactive/session-usage-reseed.ts +2 -0
  840. package/src/interactive/side-question.ts +2 -0
  841. package/src/interactive/slash-autocomplete.ts +99 -1
  842. package/src/interactive/slash-commands.ts +390 -67
  843. package/src/interactive/slash-spec.ts +0 -1
  844. package/src/interactive/terminal-lease.ts +44 -12
  845. package/src/interactive/turn-context.ts +1 -0
  846. package/src/interactive/turn-persistence.ts +3 -0
  847. package/src/interactive/turn-prewarm.ts +126 -19
  848. package/src/interactive/turn-queues.ts +8 -7
  849. package/src/interactive/turn-runtime.ts +15 -1
  850. package/src/interactive/view/view-overlay.ts +19 -14
  851. package/src/interactive/welcome-dashboard.ts +525 -408
  852. package/src/tools/bootstrap.ts +8 -0
  853. package/src/tools/builtin-tool-catalog.ts +15 -6
  854. package/src/tools/context/index.ts +58 -5
  855. package/src/tools/context/library.ts +465 -0
  856. package/src/tools/context/surface.ts +20 -6
  857. package/src/tools/core-bootstrap.ts +3 -0
  858. package/src/tools/dispatch-admission.ts +24 -1
  859. package/src/tools/dispatch-arguments.ts +8 -0
  860. package/src/tools/dispatch-plan.ts +32 -0
  861. package/src/tools/dispatch-schema.ts +31 -1
  862. package/src/tools/dispatch-types.ts +3 -0
  863. package/src/tools/dispatch.ts +1 -1
  864. package/src/tools/harness-extensions.ts +169 -0
  865. package/src/tools/observation.ts +4 -0
  866. package/src/tools/policy.ts +7 -1
  867. package/src/tools/registry.ts +31 -3
  868. package/src/tools/worker-evidence.ts +5 -0
  869. package/src/worker/context-seed.ts +192 -0
  870. package/src/worker/entry.ts +1 -0
  871. package/src/worker/spec-contract.ts +35 -1
  872. package/dist/acp-UVEVWSDL.js +0 -130
  873. package/dist/agents-VWY37DTK.js +0 -148
  874. package/dist/auth-PCV2XQDV.js +0 -551
  875. package/dist/builtins-PD652MTK.js +0 -22
  876. package/dist/chunk-22PQ4TX4.js +0 -360
  877. package/dist/chunk-24T2YZ7A.js +0 -22648
  878. package/dist/chunk-2AKYFREM.js +0 -1008
  879. package/dist/chunk-2QPI3TR3.js +0 -162
  880. package/dist/chunk-3BJGMT2D.js +0 -324
  881. package/dist/chunk-3HQVBIKD.js +0 -308
  882. package/dist/chunk-3JLFK5MW.js +0 -193
  883. package/dist/chunk-3O2ZAUGQ.js +0 -283
  884. package/dist/chunk-3QKXHCGS.js +0 -59
  885. package/dist/chunk-3T4DXWP6.js +0 -668
  886. package/dist/chunk-3UW3KU4A.js +0 -21
  887. package/dist/chunk-3WBALRQH.js +0 -5076
  888. package/dist/chunk-4DU2TVI4.js +0 -108
  889. package/dist/chunk-4U4TKZFR.js +0 -5052
  890. package/dist/chunk-4VMV6OS6.js +0 -101
  891. package/dist/chunk-536HXRFE.js +0 -1257
  892. package/dist/chunk-5CMARGPF.js +0 -477
  893. package/dist/chunk-5CY4Q6QI.js +0 -141
  894. package/dist/chunk-5QRX7SLS.js +0 -1018
  895. package/dist/chunk-5VTJP36Q.js +0 -36
  896. package/dist/chunk-5ZSZEYJK.js +0 -119
  897. package/dist/chunk-6HAO6X5B.js +0 -197
  898. package/dist/chunk-6OII3LOK.js +0 -404
  899. package/dist/chunk-6RYDAVQT.js +0 -4338
  900. package/dist/chunk-6VRRJT7L.js +0 -146
  901. package/dist/chunk-6YA46L5A.js +0 -386
  902. package/dist/chunk-77CZRFTE.js +0 -634
  903. package/dist/chunk-7JSSKXG2.js +0 -1215
  904. package/dist/chunk-7WUZEB2M.js +0 -165
  905. package/dist/chunk-7YJWEF2L.js +0 -974
  906. package/dist/chunk-ACCKVSHU.js +0 -44
  907. package/dist/chunk-B3MOMLJ4.js +0 -433
  908. package/dist/chunk-BBV5TKE6.js +0 -35
  909. package/dist/chunk-BLTEAUCB.js +0 -668
  910. package/dist/chunk-BS4GAMUB.js +0 -233
  911. package/dist/chunk-BT7HGDOX.js +0 -3151
  912. package/dist/chunk-CBSKDFWL.js +0 -101
  913. package/dist/chunk-CXQ37WJH.js +0 -45
  914. package/dist/chunk-DXLUVUD4.js +0 -1490
  915. package/dist/chunk-DZK63TZJ.js +0 -1334
  916. package/dist/chunk-E7RF4KBO.js +0 -266
  917. package/dist/chunk-ECOMVOHP.js +0 -139
  918. package/dist/chunk-EHOSNVVM.js +0 -59
  919. package/dist/chunk-F5Z7EWMN.js +0 -4484
  920. package/dist/chunk-FQOOGXBH.js +0 -579
  921. package/dist/chunk-GLYBJ4RQ.js +0 -396
  922. package/dist/chunk-HHVJNVUJ.js +0 -179
  923. package/dist/chunk-HL26ADLH.js +0 -77
  924. package/dist/chunk-HPTJF6DG.js +0 -2465
  925. package/dist/chunk-HXHFDHB6.js +0 -962
  926. package/dist/chunk-HZ2T2YED.js +0 -1687
  927. package/dist/chunk-HZFBVU5X.js +0 -666
  928. package/dist/chunk-I2K2NCZQ.js +0 -659
  929. package/dist/chunk-IGLVVNEG.js +0 -402
  930. package/dist/chunk-IKRWLEDA.js +0 -1567
  931. package/dist/chunk-J2FYEQ5L.js +0 -33
  932. package/dist/chunk-JMPL7NUB.js +0 -108
  933. package/dist/chunk-K2HL3GBL.js +0 -998
  934. package/dist/chunk-KAFMW7WM.js +0 -386
  935. package/dist/chunk-KTFSFCVN.js +0 -46
  936. package/dist/chunk-LIN2K3EL.js +0 -66
  937. package/dist/chunk-LUL5Z66S.js +0 -221
  938. package/dist/chunk-LVFANMOH.js +0 -466
  939. package/dist/chunk-LY4N4TTL.js +0 -117
  940. package/dist/chunk-LZBMXNLP.js +0 -1196
  941. package/dist/chunk-M6TAYK66.js +0 -807
  942. package/dist/chunk-N2OKBREN.js +0 -243
  943. package/dist/chunk-NC4KV7EL.js +0 -39
  944. package/dist/chunk-NF3BK5WR.js +0 -42
  945. package/dist/chunk-NNWJYUNO.js +0 -573
  946. package/dist/chunk-NTK3WTHM.js +0 -141
  947. package/dist/chunk-ODUTYZIU.js +0 -688
  948. package/dist/chunk-OQM5IVJY.js +0 -1377
  949. package/dist/chunk-P5JMBPDJ.js +0 -7192
  950. package/dist/chunk-P5SC4DLJ.js +0 -47
  951. package/dist/chunk-P6M7RKMI.js +0 -97
  952. package/dist/chunk-PWWSIB2A.js +0 -52
  953. package/dist/chunk-PZN2LQY6.js +0 -674
  954. package/dist/chunk-Q7NNUHQV.js +0 -705
  955. package/dist/chunk-QCOV5DFY.js +0 -911
  956. package/dist/chunk-QNWRHOMF.js +0 -692
  957. package/dist/chunk-QRFXEO6Y.js +0 -17
  958. package/dist/chunk-QXFBABFJ.js +0 -380
  959. package/dist/chunk-RGZNQ5CT.js +0 -657
  960. package/dist/chunk-SRZOW5L2.js +0 -1865
  961. package/dist/chunk-SXQKNKRA.js +0 -223
  962. package/dist/chunk-T334FW2H.js +0 -362
  963. package/dist/chunk-T52TPHYC.js +0 -318
  964. package/dist/chunk-TJFDL26W.js +0 -658
  965. package/dist/chunk-TN5FW4XY.js +0 -172
  966. package/dist/chunk-U7H5WRG5.js +0 -123
  967. package/dist/chunk-UFYNOQK4.js +0 -302
  968. package/dist/chunk-URBGEOH3.js +0 -32
  969. package/dist/chunk-USZA7GWL.js +0 -341
  970. package/dist/chunk-UUQ5G6EZ.js +0 -697
  971. package/dist/chunk-VAHLPXPY.js +0 -399
  972. package/dist/chunk-VANN3GDP.js +0 -2488
  973. package/dist/chunk-VHMX7SXF.js +0 -1289
  974. package/dist/chunk-WJIMKGD6.js +0 -132
  975. package/dist/chunk-WKUYQBCG.js +0 -795
  976. package/dist/chunk-WNGF5AJX.js +0 -1911
  977. package/dist/chunk-WV6TDAPN.js +0 -3627
  978. package/dist/chunk-X3BI7HTV.js +0 -562
  979. package/dist/chunk-XWMSPJYN.js +0 -149
  980. package/dist/chunk-YPRSNUTC.js +0 -395
  981. package/dist/chunk-ZS43Y2FT.js +0 -438
  982. package/dist/clio-QQCMTUZE.js +0 -26
  983. package/dist/code-nav-GUPM6766.js +0 -686
  984. package/dist/components-TNIKXCBH.js +0 -674
  985. package/dist/config-IIM7YOD3.js +0 -621
  986. package/dist/configure-4ZM5HWJX.js +0 -73
  987. package/dist/context-44BZLJ3J.js +0 -344
  988. package/dist/context-AIDVQKMW.js +0 -278
  989. package/dist/context-OL5P3HEP.js +0 -1031
  990. package/dist/context-clear-OQV76MYP.js +0 -184
  991. package/dist/context-index-HP2JFUWA.js +0 -120
  992. package/dist/context-map-INTXD54D.js +0 -555
  993. package/dist/context-working-set-ZUW3EGLS.js +0 -1556
  994. package/dist/detail-UXPWRANG.js +0 -115
  995. package/dist/dispatch-runner-P3ZW6G77.js +0 -2438
  996. package/dist/docs-BL7ROUFN.js +0 -292
  997. package/dist/doctor-JJVGPZWT.js +0 -797
  998. package/dist/eval-V2RTN3UH.js +0 -4972
  999. package/dist/eval-inventory-QOYZERXJ.js +0 -315
  1000. package/dist/evidence-35PYWGSO.js +0 -225
  1001. package/dist/evidence-CIGGKI6J.js +0 -383
  1002. package/dist/evolve-33SM3NJP.js +0 -609
  1003. package/dist/extensions-YVRHX6ZI.js +0 -229
  1004. package/dist/fleet-LFO7SIPC.js +0 -908
  1005. package/dist/fleet-commands-RLK72GU3.js +0 -75
  1006. package/dist/fleet-decisions-3SBSCTCW.js +0 -159
  1007. package/dist/fleet-graph-JZIBCGMW.js +0 -134
  1008. package/dist/fleet-inspect-2L5YGGZJ.js +0 -469
  1009. package/dist/fleet-preflight-QRSHIIDE.js +0 -22
  1010. package/dist/fleet-validate-LIAVKDUU.js +0 -92
  1011. package/dist/fleet-verify-JIK3OQZR.js +0 -202
  1012. package/dist/fleet-view-IWHYGQKK.js +0 -118
  1013. package/dist/init-NJEDOTQW.js +0 -321
  1014. package/dist/interop-RVCAYECG.js +0 -115
  1015. package/dist/inventory-74UL7UHU.js +0 -118
  1016. package/dist/library-CTKZA7K3.js +0 -226
  1017. package/dist/memory-I76I5VUH.js +0 -512
  1018. package/dist/models-D4YDIQZQ.js +0 -289
  1019. package/dist/monitor-NKVD55HX.js +0 -775
  1020. package/dist/orchestrator-I6OATVPK.js +0 -39518
  1021. package/dist/panes-7BTYH3XQ.js +0 -103
  1022. package/dist/panes-WPOMEMRH.js +0 -74
  1023. package/dist/paths-J3KN7UAO.js +0 -67
  1024. package/dist/preload-EJAWJEIO.js +0 -116
  1025. package/dist/reset-4XMQKDNZ.js +0 -345
  1026. package/dist/resources-TVYVXK3Q.js +0 -125
  1027. package/dist/run-OWQNNSJU.js +0 -872
  1028. package/dist/share-NPZZMUXG.js +0 -290
  1029. package/dist/skills-OXFEAWMT.js +0 -510
  1030. package/dist/skills-eval-J5TCKSJA.js +0 -1034
  1031. package/dist/skills-inventory-7II4DM57.js +0 -133
  1032. package/dist/slash-commands-MDSDSWYF.js +0 -92
  1033. package/dist/steer-S7D7IKPU.js +0 -77
  1034. package/dist/support-5VAEC32W.js +0 -38
  1035. package/dist/targets-KILZEOCE.js +0 -1109
  1036. package/dist/tasks-R6P6OV22.js +0 -36
  1037. package/dist/terminal-lease-LZCG2KN3.js +0 -405
  1038. package/dist/tools-6OCQ6SVB.js +0 -28
  1039. package/dist/trace-JHLXWUMN.js +0 -572
  1040. package/dist/tui-primitives-RCY2HN7G.js +0 -17
  1041. package/dist/uninstall-FXYMFFRT.js +0 -407
  1042. package/dist/upgrade-D2OZH6IQ.js +0 -307
  1043. package/dist/usage-PIASNUS4.js +0 -1052
  1044. package/dist/verifiers-LTHUY2PX.js +0 -630
  1045. package/dist/verify-HYF7KBVE.js +0 -30
  1046. package/dist/web-fetch-MQN4FH3X.js +0 -788
  1047. package/dist/wiki-generate-RK7JQ5NP.js +0 -615
  1048. package/dist/with-panes-OFTNAR4Y.js +0 -628
  1049. package/skills/README.md +0 -418
  1050. package/skills/coding/ast-grep/SKILL.md +0 -213
  1051. package/skills/coding/ast-grep/evals.md +0 -82
  1052. package/skills/coding/coding-standards/SKILL.md +0 -164
  1053. package/skills/coding/coding-standards/evals.md +0 -57
  1054. package/skills/coding/prototype/SKILL.md +0 -151
  1055. package/skills/coding/prototype/evals.md +0 -61
  1056. package/skills/coding/tdd/SKILL.md +0 -134
  1057. package/skills/coding/tdd/evals.md +0 -61
  1058. package/skills/context/context-handoff/SKILL.md +0 -176
  1059. package/skills/context/context-handoff/evals.md +0 -101
  1060. package/skills/context/context-prime/SKILL.md +0 -131
  1061. package/skills/context/context-prime/evals.md +0 -99
  1062. package/skills/git/branch-closeout/SKILL.md +0 -132
  1063. package/skills/git/file-ticket/SKILL.md +0 -126
  1064. package/skills/git/fix-issue/SKILL.md +0 -136
  1065. package/skills/git/resolve-merge-conflicts/SKILL.md +0 -151
  1066. package/skills/git/resolve-merge-conflicts/evals.md +0 -85
  1067. package/skills/git/ship/SKILL.md +0 -134
  1068. package/skills/git/worktree-create/SKILL.md +0 -127
  1069. package/skills/git/worktree-merge/SKILL.md +0 -147
  1070. package/skills/meta/clio-coder-dev/SKILL.md +0 -101
  1071. package/skills/meta/clio-coder-dev/evals.md +0 -46
  1072. package/skills/meta/clio-coder-test/SKILL.md +0 -146
  1073. package/skills/meta/clio-coder-test/evals.md +0 -48
  1074. package/skills/meta/clio-coder-test/references/test-map.md +0 -96
  1075. package/skills/meta/credentials/SKILL.md +0 -132
  1076. package/skills/meta/credentials/evals.md +0 -104
  1077. package/skills/meta/find-skills/SKILL.md +0 -78
  1078. package/skills/meta/find-skills/evals.md +0 -47
  1079. package/skills/meta/herdr/SKILL.md +0 -133
  1080. package/skills/meta/herdr/evals.md +0 -38
  1081. package/skills/meta/skill-craft/SKILL.md +0 -125
  1082. package/skills/meta/skill-craft/evals.md +0 -41
  1083. package/skills/planning/archify/SKILL.md +0 -196
  1084. package/skills/planning/architecture/SKILL.md +0 -184
  1085. package/skills/planning/architecture/evals.md +0 -101
  1086. package/skills/planning/backlog/SKILL.md +0 -212
  1087. package/skills/planning/backlog/evals.md +0 -185
  1088. package/skills/planning/prd/SKILL.md +0 -129
  1089. package/skills/planning/prd/evals.md +0 -103
  1090. package/skills/planning/product-intent/SKILL.md +0 -173
  1091. package/skills/planning/product-intent/evals.md +0 -106
  1092. package/skills/planning/tech-spec/SKILL.md +0 -172
  1093. package/skills/planning/tech-spec/evals.md +0 -120
  1094. package/skills/registry.yaml +0 -144
  1095. package/skills/remote.yaml +0 -13
  1096. package/skills/research/arxiv-literature/SKILL.md +0 -168
  1097. package/skills/research/arxiv-literature/evals.md +0 -108
  1098. package/skills/research/experiment-protocol/SKILL.md +0 -148
  1099. package/skills/research/experiment-protocol/evals.md +0 -114
  1100. package/skills/research/scientific-debugging/SKILL.md +0 -149
  1101. package/skills/research/scientific-debugging/evals.md +0 -156
  1102. package/skills/research/scientific-modernization/SKILL.md +0 -170
  1103. package/skills/research/scientific-modernization/evals.md +0 -111
  1104. package/skills/skill-marketplace.json +0 -507
  1105. package/skills/workflow/cut-it/SKILL.md +0 -153
  1106. package/skills/workflow/cut-it/evals.md +0 -143
  1107. package/skills/workflow/design-council/SKILL.md +0 -233
  1108. package/skills/workflow/design-council/evals.md +0 -258
  1109. package/skills/workflow/grill-me/SKILL.md +0 -267
  1110. package/skills/workflow/grill-me/evals.md +0 -231
  1111. package/skills/workflow/workflow-distiller/SKILL.md +0 -201
  1112. package/skills/workflow/workflow-distiller/evals.md +0 -225
  1113. package/src/domains/extensions/resource-path.ts +0 -27
  1114. package/src/domains/extensions/resources.ts +0 -37
  1115. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +0 -27
  1116. package/src/interactive/overlays/agents.ts +0 -70
  1117. package/src/interactive/overlays/library-install-confirm.ts +0 -152
  1118. package/src/interactive/overlays/prompts.ts +0 -89
  1119. package/src/interactive/overlays/skills-hub.ts +0 -615
  1120. /package/{skills → library/skills}/coding/ast-grep/references/rule_reference.md +0 -0
  1121. /package/{skills → library/skills}/coding/prototype/references/LOGIC.md +0 -0
  1122. /package/{skills → library/skills}/coding/prototype/references/UI.md +0 -0
  1123. /package/{skills → library/skills}/coding/tdd/references/mocking.md +0 -0
  1124. /package/{skills → library/skills}/coding/tdd/references/tests.md +0 -0
  1125. /package/{skills → library/skills}/context/context-handoff/scripts/new-handoff.sh +0 -0
  1126. /package/{skills → library/skills}/git/branch-closeout/evals.md +0 -0
  1127. /package/{skills → library/skills}/git/branch-closeout/references/closeout-checklist.md +0 -0
  1128. /package/{skills → library/skills}/git/file-ticket/assets/issue-template.md +0 -0
  1129. /package/{skills → library/skills}/git/file-ticket/evals.md +0 -0
  1130. /package/{skills → library/skills}/git/file-ticket/references/issue-discovery.md +0 -0
  1131. /package/{skills → library/skills}/git/fix-issue/evals.md +0 -0
  1132. /package/{skills → library/skills}/git/fix-issue/references/diagnosis-and-rca.md +0 -0
  1133. /package/{skills → library/skills}/git/resolve-merge-conflicts/references/conflict-matrix.md +0 -0
  1134. /package/{skills → library/skills}/git/ship/assets/pr-template.md +0 -0
  1135. /package/{skills → library/skills}/git/ship/evals.md +0 -0
  1136. /package/{skills → library/skills}/git/ship/references/remote-and-branch-policy.md +0 -0
  1137. /package/{skills → library/skills}/git/worktree-create/evals.md +0 -0
  1138. /package/{skills → library/skills}/git/worktree-create/references/worktree-setup.md +0 -0
  1139. /package/{skills → library/skills}/git/worktree-merge/evals.md +0 -0
  1140. /package/{skills → library/skills}/git/worktree-merge/references/merge-strategies.md +0 -0
  1141. /package/{skills → library/skills}/meta/clio-coder-test/references/harness.md +0 -0
  1142. /package/{skills → library/skills}/planning/archify/evals.md +0 -0
@@ -0,0 +1,1143 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ evaluateClioCompatibility,
4
+ extensionContentDigest,
5
+ extensionContentDigestWithCapture,
6
+ isSemanticVersion
7
+ } from "./chunk-XW2UZICE.js";
8
+ import {
9
+ canonicalizeExistingPath
10
+ } from "./chunk-KQ6IDQIB.js";
11
+ import {
12
+ require_dist
13
+ } from "./chunk-B5GGDIHT.js";
14
+ import {
15
+ clioConfigDir
16
+ } from "./chunk-CTTI7G3T.js";
17
+ import {
18
+ safeResourceWrite
19
+ } from "./chunk-ZZFWWYLX.js";
20
+ import {
21
+ __toESM,
22
+ init_esm_shims
23
+ } from "./chunk-ECBHH7LU.js";
24
+
25
+ // src/domains/resources/library-types.ts
26
+ init_esm_shims();
27
+ var LIBRARY_KINDS = ["plugin", "skill", "agent", "prompt", "fleet"];
28
+ function isLibraryKind(value) {
29
+ return typeof value === "string" && LIBRARY_KINDS.includes(value);
30
+ }
31
+ var LIBRARY_RESOURCE_KINDS = ["skill", "agent", "prompt", "fleet"];
32
+ function isLibraryResourceKind(value) {
33
+ return typeof value === "string" && LIBRARY_RESOURCE_KINDS.includes(value);
34
+ }
35
+ var LIBRARY_PROVIDES_LIMITS = { entries: 256, name: 128, description: 256 };
36
+
37
+ // src/domains/plugins/discovery.ts
38
+ init_esm_shims();
39
+ import { createHash } from "node:crypto";
40
+ import { existsSync, lstatSync, readdirSync, realpathSync, statSync } from "node:fs";
41
+ import path from "node:path";
42
+
43
+ // src/domains/plugins/integrity.ts
44
+ init_esm_shims();
45
+
46
+ // src/domains/plugins/discovery.ts
47
+ var PLUGIN_SCHEMA = "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json";
48
+ var PLUGIN_EXTENSION_KEY = "ai.iowarp.clio";
49
+ var PLUGIN_RESOURCE_KINDS = ["skills", "prompts", "agents", "fleets", "themes"];
50
+ var COMPONENT_KINDS = /* @__PURE__ */ new Set(["prompt", "agent", "skill", "fleet", "script", "resource", "tool"]);
51
+ var ROOT_KEYS = /* @__PURE__ */ new Set([
52
+ "$schema",
53
+ "name",
54
+ "version",
55
+ "description",
56
+ "author",
57
+ "homepage",
58
+ "repository",
59
+ "license",
60
+ "keywords",
61
+ "extensions"
62
+ ]);
63
+ function isPluginId(value) {
64
+ return value.length <= 64 && /^(?!.*(?:--|\.\.))[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$/u.test(value) && value !== "state.json";
65
+ }
66
+ function pluginPathContained(root, target) {
67
+ const relative = path.relative(root, target);
68
+ return relative === "" || relative !== ".." && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative);
69
+ }
70
+ function pluginResourcePath(root, value, allowRoot = false) {
71
+ if (!value || value.includes("\\") || path.isAbsolute(value))
72
+ throw new Error(`plugin path must be relative: ${value}`);
73
+ const lexicalRoot = path.resolve(root);
74
+ const lexical = path.resolve(lexicalRoot, value);
75
+ if (!allowRoot && lexical === lexicalRoot || !pluginPathContained(lexicalRoot, lexical))
76
+ throw new Error(`plugin path escapes root: ${value}`);
77
+ const canonicalRoot = realpathSync(lexicalRoot);
78
+ const canonical = realpathSync(lexical);
79
+ if (!pluginPathContained(canonicalRoot, canonical) || !allowRoot && canonical === canonicalRoot)
80
+ throw new Error(`plugin path escapes through a symbolic link: ${value}`);
81
+ return canonical;
82
+ }
83
+ function record(value) {
84
+ return value !== null && typeof value === "object" && !Array.isArray(value);
85
+ }
86
+ function requireKeys(value, allowed, label) {
87
+ for (const key of Object.keys(value)) if (!allowed.has(key)) throw new Error(`unknown ${label} key '${key}'`);
88
+ }
89
+ function components(value, root) {
90
+ if (value === void 0) return [];
91
+ if (!Array.isArray(value) || value.length > 1024)
92
+ throw new Error("components must be an array of at most 1024 entries");
93
+ const refs = /* @__PURE__ */ new Map();
94
+ for (const raw of value) {
95
+ if (!record(raw)) throw new Error("component must be an object");
96
+ requireKeys(raw, /* @__PURE__ */ new Set(["kind", "id", "path", "requires"]), "component");
97
+ if (typeof raw.kind !== "string" || !COMPONENT_KINDS.has(raw.kind)) throw new Error("unsupported component kind");
98
+ if (typeof raw.id !== "string" || raw.id.length > 80 || !/^[a-z0-9][a-z0-9._-]*$/u.test(raw.id))
99
+ throw new Error("component id must be a stable lowercase identifier");
100
+ if (typeof raw.path !== "string") throw new Error(`component ${raw.id} must have a relative path`);
101
+ const file = pluginResourcePath(root, raw.path);
102
+ if (!statSync(file).isFile()) throw new Error(`component ${raw.id} path must be a file`);
103
+ if (raw.kind === "skill" && path.basename(file) !== "SKILL.md")
104
+ throw new Error(`skill component ${raw.id} must point to SKILL.md`);
105
+ if (raw.requires !== void 0 && (!Array.isArray(raw.requires) || raw.requires.some((ref2) => typeof ref2 !== "string")))
106
+ throw new Error(`component ${raw.id} requires must be an array of component references`);
107
+ const item = {
108
+ kind: raw.kind,
109
+ id: raw.id,
110
+ path: raw.path,
111
+ ...raw.requires !== void 0 ? { requires: raw.requires } : {}
112
+ };
113
+ const ref = `${item.kind}:${item.id}`;
114
+ if (refs.has(ref)) throw new Error(`duplicate component reference: ${ref}`);
115
+ refs.set(ref, item);
116
+ }
117
+ const visiting = /* @__PURE__ */ new Set();
118
+ const visited = /* @__PURE__ */ new Set();
119
+ const visit = (ref) => {
120
+ if (visiting.has(ref)) throw new Error(`component dependency cycle at ${ref}`);
121
+ if (visited.has(ref)) return;
122
+ const item = refs.get(ref);
123
+ if (!item) throw new Error(`missing component reference: ${ref}`);
124
+ visiting.add(ref);
125
+ for (const dependency of item.requires ?? []) visit(dependency);
126
+ visiting.delete(ref);
127
+ visited.add(ref);
128
+ };
129
+ for (const ref of refs.keys()) visit(ref);
130
+ return [...refs.values()];
131
+ }
132
+ function clioConfiguration(value, root) {
133
+ if (value !== void 0 && !record(value)) throw new Error(`${PLUGIN_EXTENSION_KEY} must be an object`);
134
+ const raw = value ?? {};
135
+ requireKeys(
136
+ raw,
137
+ /* @__PURE__ */ new Set(["manifestVersion", "kind", "requires", "evals", "compatibility", "resources", "components"]),
138
+ PLUGIN_EXTENSION_KEY
139
+ );
140
+ if (value !== void 0 && raw.manifestVersion !== 1) throw new Error("Clio plugin manifestVersion must be 1");
141
+ const kind = raw.kind ?? "plugin";
142
+ if (!isLibraryKind(kind)) throw new Error("package kind must be plugin, skill, agent, prompt, or fleet");
143
+ if (raw.requires !== void 0 && (!Array.isArray(raw.requires) || raw.requires.some(
144
+ (ref) => typeof ref !== "string" || !/^(plugin|skill|agent|prompt|fleet):[a-z0-9][a-z0-9.-]*$/.test(ref)
145
+ )))
146
+ throw new Error("package requires must contain kind:name references");
147
+ const evals = {};
148
+ if (raw.evals !== void 0) {
149
+ if (!record(raw.evals)) throw new Error("package evals must map names to Suite v2 files");
150
+ for (const [id, file] of Object.entries(raw.evals)) {
151
+ if (!isPluginId(id) || typeof file !== "string" || !statSync(pluginResourcePath(root, file)).isFile())
152
+ throw new Error(`invalid package eval: ${id}`);
153
+ evals[id] = file;
154
+ }
155
+ }
156
+ let compatibility;
157
+ if (raw.compatibility !== void 0) {
158
+ if (!record(raw.compatibility)) throw new Error("compatibility must be an object");
159
+ requireKeys(raw.compatibility, /* @__PURE__ */ new Set(["clio"]), "compatibility");
160
+ if (raw.compatibility.clio !== void 0 && (typeof raw.compatibility.clio !== "string" || !evaluateClioCompatibility(raw.compatibility.clio).rangeValid))
161
+ throw new Error("compatibility.clio must be a valid SemVer range");
162
+ compatibility = raw.compatibility;
163
+ }
164
+ const resources = {};
165
+ if (existsSync(path.join(root, "skills"))) resources.skills = "skills";
166
+ if (raw.resources !== void 0) {
167
+ if (!record(raw.resources)) throw new Error("resources must be an object");
168
+ requireKeys(raw.resources, new Set(PLUGIN_RESOURCE_KINDS), "resources");
169
+ for (const kind2 of PLUGIN_RESOURCE_KINDS) {
170
+ const resource = raw.resources[kind2];
171
+ if (resource === void 0) continue;
172
+ if (typeof resource !== "string") throw new Error(`resources.${kind2} must be a relative directory`);
173
+ resources[kind2] = resource;
174
+ }
175
+ }
176
+ for (const [resourceKind, relative] of Object.entries(resources)) {
177
+ const full = pluginResourcePath(root, relative, kind === "skill" && relative === ".");
178
+ if (!statSync(full).isDirectory()) throw new Error(`resources.${resourceKind} must be a directory`);
179
+ if (resourceKind === "skills" && relative !== "." && path.resolve(root, relative) !== path.join(path.resolve(root), "skills"))
180
+ throw new Error("portable skills must use the root skills directory");
181
+ }
182
+ const inventory = components(raw.components, root);
183
+ const componentRoots = {
184
+ prompt: "prompts",
185
+ agent: "agents",
186
+ skill: "skills",
187
+ fleet: "fleets"
188
+ };
189
+ for (const item of inventory) {
190
+ const resourceKind = componentRoots[item.kind];
191
+ if (!resourceKind) continue;
192
+ const resource = resources[resourceKind];
193
+ if (!resource || !pluginPathContained(
194
+ pluginResourcePath(root, resource, kind === "skill" && resource === "."),
195
+ pluginResourcePath(root, item.path)
196
+ ))
197
+ throw new Error(`component ${item.kind}:${item.id} is outside its declared resource root`);
198
+ }
199
+ if (kind !== "plugin") {
200
+ const publicItems = inventory.filter((item) => ["prompt", "agent", "skill", "fleet"].includes(item.kind));
201
+ if (publicItems.length !== 1 || publicItems[0]?.kind !== kind)
202
+ throw new Error(`a ${kind} package must declare exactly one public ${kind} component`);
203
+ if (Object.keys(resources).some((resource2) => resource2 !== `${kind}s`))
204
+ throw new Error(`a ${kind} package may only declare its ${kind}s resource root`);
205
+ const resource = resources[`${kind}s`];
206
+ if (!resource) throw new Error(`a ${kind} package must declare its resource root`);
207
+ const discovered = [];
208
+ const scan = (directory, ancestors) => {
209
+ const canonical = realpathSync(directory);
210
+ if (ancestors.has(canonical)) throw new Error("cyclic package resource directory");
211
+ const visited = /* @__PURE__ */ new Set([...ancestors, canonical]);
212
+ for (const item of readdirSync(directory)) {
213
+ const file = path.join(directory, item);
214
+ if (statSync(file).isDirectory()) scan(file, visited);
215
+ else if (kind === "skill" ? item === "SKILL.md" : item.endsWith(".md")) discovered.push(file);
216
+ }
217
+ };
218
+ scan(pluginResourcePath(root, resource, kind === "skill" && resource === "."), /* @__PURE__ */ new Set());
219
+ const declared = publicItems[0];
220
+ if (discovered.length !== 1 || !declared || path.resolve(discovered[0]) !== pluginResourcePath(root, declared.path))
221
+ throw new Error(`a ${kind} package must expose only its declared ${kind} file`);
222
+ }
223
+ return {
224
+ manifestVersion: 1,
225
+ kind,
226
+ resources,
227
+ components: inventory,
228
+ ...raw.requires ? { requires: raw.requires } : {},
229
+ ...raw.evals ? { evals } : {},
230
+ ...compatibility ? { compatibility } : {}
231
+ };
232
+ }
233
+ function parsePluginManifest(raw, root) {
234
+ const value = JSON.parse(raw);
235
+ if (!record(value)) throw new Error("plugin manifest must be an object");
236
+ requireKeys(value, ROOT_KEYS, "plugin manifest");
237
+ if (value.$schema !== PLUGIN_SCHEMA) throw new Error(`plugin $schema must be ${PLUGIN_SCHEMA}`);
238
+ if (typeof value.name !== "string" || !isPluginId(value.name))
239
+ throw new Error("plugin name must be a portable identifier of 1 to 64 characters and may not be state.json");
240
+ for (const field of ["version", "description", "homepage", "repository", "license"]) {
241
+ if (value[field] !== void 0 && typeof value[field] !== "string") throw new Error(`${field} must be a string`);
242
+ }
243
+ if (!isSemanticVersion(value.version))
244
+ throw new Error("package version must be an explicit Semantic Version (for example 1.0.0)");
245
+ if (value.author !== void 0) {
246
+ if (!record(value.author)) throw new Error("author must be an object");
247
+ requireKeys(value.author, /* @__PURE__ */ new Set(["name", "email", "url"]), "author");
248
+ if (Object.values(value.author).some((field) => typeof field !== "string"))
249
+ throw new Error("author fields must be strings");
250
+ }
251
+ if (value.keywords !== void 0 && (!Array.isArray(value.keywords) || value.keywords.some((field) => typeof field !== "string")))
252
+ throw new Error("keywords must be an array of strings");
253
+ if (value.extensions !== void 0 && (!record(value.extensions) || Object.values(value.extensions).some((field) => !record(field))))
254
+ throw new Error("extensions must contain namespaced objects");
255
+ const extensions = value.extensions;
256
+ const clio = clioConfiguration(extensions?.[PLUGIN_EXTENSION_KEY], root);
257
+ return { ...value, clio };
258
+ }
259
+ function readPluginManifest(root) {
260
+ const resolved = path.resolve(root);
261
+ const manifestPath = path.join(resolved, "plugin.json");
262
+ const diagnostics = [];
263
+ try {
264
+ if (existsSync(path.join(resolved, "state.json")))
265
+ throw new Error("root state.json is reserved for plugin installation state");
266
+ const digest = extensionContentDigestWithCapture(resolved, { capture: ["plugin.json"] });
267
+ const bytes = digest.captured.get("plugin.json");
268
+ if (!bytes) throw new Error("plugin.json must be a regular file at the plugin root");
269
+ const manifest = parsePluginManifest(bytes.toString("utf8"), resolved);
270
+ if (existsSync(path.join(resolved, "mcp.json")))
271
+ diagnostics.push({
272
+ type: "warning",
273
+ message: "MCP declarations are preserved; this Clio version does not execute MCP servers",
274
+ path: path.join(resolved, "mcp.json")
275
+ });
276
+ return {
277
+ path: resolved,
278
+ manifestPath,
279
+ manifest,
280
+ valid: true,
281
+ diagnostics,
282
+ contentDigest: digest.digest,
283
+ manifestDigest: createHash("sha256").update(bytes).digest("hex")
284
+ };
285
+ } catch (error) {
286
+ diagnostics.push({
287
+ type: "error",
288
+ message: error instanceof Error ? error.message : String(error),
289
+ path: manifestPath
290
+ });
291
+ return { path: resolved, manifestPath, valid: false, diagnostics };
292
+ }
293
+ }
294
+ function discoverPluginPackages(root) {
295
+ if (existsSync(path.join(root, "plugin.json"))) return [readPluginManifest(root)];
296
+ try {
297
+ return readdirSync(root).sort().filter((name) => !name.startsWith(".") && lstatSync(path.join(root, name)).isDirectory()).map((name) => readPluginManifest(path.join(root, name)));
298
+ } catch {
299
+ return [readPluginManifest(root)];
300
+ }
301
+ }
302
+
303
+ // src/domains/plugins/state.ts
304
+ init_esm_shims();
305
+ import { randomBytes } from "node:crypto";
306
+ import {
307
+ closeSync,
308
+ cpSync,
309
+ existsSync as existsSync2,
310
+ lstatSync as lstatSync2,
311
+ mkdirSync,
312
+ openSync,
313
+ readdirSync as readdirSync2,
314
+ readFileSync,
315
+ realpathSync as realpathSync2,
316
+ renameSync,
317
+ rmSync
318
+ } from "node:fs";
319
+ import path2 from "node:path";
320
+
321
+ // src/domains/plugins/types.ts
322
+ init_esm_shims();
323
+ function isForeignPluginOrigin(origin) {
324
+ return typeof origin === "object" && (origin.kind === "interop" || origin.kind === "import");
325
+ }
326
+
327
+ // src/domains/plugins/state.ts
328
+ function installLibraryPackage(input) {
329
+ const { kind, sourcePath, ...options } = input;
330
+ return installPlugin(sourcePath, { ...options, expectedKind: kind });
331
+ }
332
+ function pluginBaseDir(scope, cwd = process.cwd()) {
333
+ return scope === "user" ? path2.join(clioConfigDir(), "plugins") : path2.join(path2.resolve(cwd), ".clio-coder", "plugins");
334
+ }
335
+ function pluginStatePath(scope, cwd = process.cwd()) {
336
+ return path2.join(pluginBaseDir(scope, cwd), "state.json");
337
+ }
338
+ function record2(value) {
339
+ return value !== null && typeof value === "object" && !Array.isArray(value);
340
+ }
341
+ function plainFile(file) {
342
+ const stat = lstatSync2(file);
343
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.nlink !== 1)
344
+ throw new Error(`plugin state must be a regular unlinked file: ${file}`);
345
+ }
346
+ function stateBytes(file) {
347
+ if (!existsSync2(file)) return void 0;
348
+ plainFile(file);
349
+ return readFileSync(file, "utf8");
350
+ }
351
+ function readState(scope, cwd) {
352
+ const bytes = stateBytes(pluginStatePath(scope, cwd));
353
+ if (bytes === void 0) return { state: { version: 1, disabled: [], installed: {} } };
354
+ const raw = JSON.parse(bytes);
355
+ if (!record2(raw) || raw.version !== 1 || !Array.isArray(raw.disabled) || !raw.disabled.every((id) => typeof id === "string" && isPluginId(id)) || !record2(raw.installed))
356
+ throw new Error("plugin install state is malformed");
357
+ for (const [id, entry] of Object.entries(raw.installed)) {
358
+ if (!isPluginId(id) || !record2(entry) || typeof entry.installedAt !== "string" || typeof entry.source !== "string" || typeof entry.contentDigest !== "string" || !/^[a-f0-9]{64}$/u.test(entry.contentDigest))
359
+ throw new Error(`invalid plugin install record: ${id}`);
360
+ if (entry.origin !== void 0 && typeof entry.origin !== "string" && !validOrigin(entry.origin))
361
+ throw new Error(`invalid plugin origin: ${id}`);
362
+ if (entry.kind !== void 0 && !isLibraryKind(entry.kind)) throw new Error(`invalid package kind: ${id}`);
363
+ if (entry.trust !== void 0 && entry.trust !== "trusted" && entry.trust !== "foreign")
364
+ throw new Error(`invalid package trust: ${id}`);
365
+ }
366
+ return { state: raw, bytes };
367
+ }
368
+ var FOREIGN_FORMATS = /* @__PURE__ */ new Set(["portable", "claude-code", "codex"]);
369
+ function validOrigin(origin) {
370
+ if (!record2(origin) || typeof origin.source !== "string") return false;
371
+ const optional = (origin.marketplace === void 0 || typeof origin.marketplace === "string") && (origin.host === void 0 || typeof origin.host === "string");
372
+ switch (origin.kind) {
373
+ case "local":
374
+ case "catalog":
375
+ case "github":
376
+ return true;
377
+ case "interop":
378
+ return typeof origin.host === "string" && path2.isAbsolute(origin.source) && optional && (origin.format === void 0 || FOREIGN_FORMATS.has(String(origin.format)));
379
+ case "import":
380
+ return FOREIGN_FORMATS.has(String(origin.format)) && optional && (origin.transport === "local" && path2.isAbsolute(origin.source) || origin.transport === "github" && /^https:\/\/github\.com\//u.test(origin.source));
381
+ default:
382
+ return false;
383
+ }
384
+ }
385
+ function assertUnchangedState(file, expected) {
386
+ if (stateBytes(file) !== expected)
387
+ throw new Error("plugin install state changed during the operation; retry after reviewing concurrent edits");
388
+ }
389
+ function writeState(scope, cwd, state, expected) {
390
+ const file = pluginStatePath(scope, cwd);
391
+ assertUnchangedState(file, expected);
392
+ safeResourceWrite(file, `${JSON.stringify(state, null, 2)}
393
+ `, {
394
+ mode: 384,
395
+ beforeRename: () => assertUnchangedState(file, expected)
396
+ });
397
+ }
398
+ function assertManagedBase(scope, cwd) {
399
+ const boundary = scope === "user" ? path2.resolve(clioConfigDir()) : path2.resolve(cwd);
400
+ const base = pluginBaseDir(scope, cwd);
401
+ let cursor = boundary;
402
+ for (const part of path2.relative(boundary, base).split(path2.sep)) {
403
+ cursor = path2.join(cursor, part);
404
+ try {
405
+ const stat = lstatSync2(cursor);
406
+ if (stat.isSymbolicLink() || !stat.isDirectory())
407
+ throw new Error(`plugin managed path must be a directory without symbolic links: ${cursor}`);
408
+ } catch (error) {
409
+ if (error.code !== "ENOENT") throw error;
410
+ }
411
+ }
412
+ }
413
+ var PluginWriterRefusal = class extends Error {
414
+ constructor(code, message, changed) {
415
+ super(message);
416
+ this.code = code;
417
+ this.changed = changed;
418
+ this.name = "PluginWriterRefusal";
419
+ }
420
+ code;
421
+ changed;
422
+ };
423
+ function acquireScopeLock(scope, cwd) {
424
+ assertManagedBase(scope, cwd);
425
+ mkdirSync(pluginBaseDir(scope, cwd), { recursive: true });
426
+ const lock = path2.join(pluginBaseDir(scope, cwd), ".mutation.lock");
427
+ let fd;
428
+ try {
429
+ fd = openSync(lock, "wx", 384);
430
+ } catch (error) {
431
+ if (error.code === "EEXIST")
432
+ throw new PluginWriterRefusal("locked", "another plugin operation holds the installation lock");
433
+ throw error;
434
+ }
435
+ return () => {
436
+ closeSync(fd);
437
+ rmSync(lock, { force: true });
438
+ };
439
+ }
440
+ function withPluginScopeLock(scope, cwd, fn) {
441
+ const release = acquireScopeLock(scope, cwd);
442
+ try {
443
+ return fn();
444
+ } finally {
445
+ release();
446
+ }
447
+ }
448
+ function withMutation(scope, cwd, work) {
449
+ try {
450
+ return withPluginScopeLock(scope, cwd, work);
451
+ } catch (error) {
452
+ return {
453
+ diagnostics: [
454
+ {
455
+ type: "error",
456
+ message: error instanceof Error ? error.message : String(error),
457
+ ...error instanceof PluginWriterRefusal ? { code: error.code } : {},
458
+ ...error instanceof PluginWriterRefusal && error.changed ? { changed: error.changed } : {}
459
+ }
460
+ ]
461
+ };
462
+ }
463
+ }
464
+ function observePluginCopy(scope, id, cwd) {
465
+ const saved = readState(scope, cwd).state.installed[id];
466
+ const target = path2.join(pluginBaseDir(scope, cwd), id);
467
+ let tree = "absent";
468
+ if (existsSync2(target)) {
469
+ try {
470
+ tree = extensionContentDigest(target);
471
+ } catch {
472
+ tree = "unreadable";
473
+ }
474
+ }
475
+ return {
476
+ scope,
477
+ id,
478
+ recorded: saved !== void 0,
479
+ tree,
480
+ enabled: !readState(scope, cwd).state.disabled.includes(id),
481
+ ...saved ? { recordedDigest: saved.contentDigest } : {},
482
+ ...saved?.kind ? { kind: saved.kind } : {},
483
+ ...saved?.trust ? { trust: saved.trust } : {},
484
+ ...saved?.origin !== void 0 ? { origin: saved.origin } : {}
485
+ };
486
+ }
487
+ function assertExpectedState(expect, cwd) {
488
+ for (const expected of expect?.copies ?? []) {
489
+ let observed;
490
+ try {
491
+ observed = observePluginCopy(expected.scope, expected.id, cwd);
492
+ } catch (error) {
493
+ throw new PluginWriterRefusal(
494
+ "stale_plan",
495
+ `reviewed state for ${expected.scope}:${expected.id} is no longer readable: ${error instanceof Error ? error.message : String(error)}; review a fresh plan`
496
+ );
497
+ }
498
+ const facts = new Set(
499
+ expected.partial ? Object.keys(expected) : [...Object.keys(expected), ...Object.keys(observed)]
500
+ );
501
+ for (const fact of facts) {
502
+ if (fact === "scope" || fact === "id" || fact === "partial") continue;
503
+ const want = JSON.stringify(expected[fact] ?? null);
504
+ const have = JSON.stringify(observed[fact] ?? null);
505
+ if (want !== have)
506
+ throw new PluginWriterRefusal(
507
+ "stale_plan",
508
+ `reviewed ${fact} changed for ${expected.scope}:${expected.id} (expected ${want}, observed ${have}); review a fresh plan`,
509
+ { scope: expected.scope, id: expected.id, fact, expected: expected[fact], observed: observed[fact] }
510
+ );
511
+ }
512
+ }
513
+ }
514
+ function resolvePluginPrecedence(entries) {
515
+ for (const entry of entries) {
516
+ const winner = entries.filter((peer) => peer.id === entry.id && peer.valid && peer.compatible).sort((a, b) => Number(a.scope === "project") - Number(b.scope === "project")).at(-1);
517
+ entry.effective = entry === winner;
518
+ entry.loadable = entry.valid && entry.compatible && entry.enabled && entry.effective;
519
+ delete entry.overriddenBy;
520
+ if (winner && winner !== entry) entry.overriddenBy = winner.scope;
521
+ }
522
+ }
523
+ function unmetRequirementsOf(entry, entries) {
524
+ return (entry.manifest?.clio.requires ?? []).filter(
525
+ (requirement) => !entries.some((peer) => peer.loadable && `${peer.kind ?? "plugin"}:${peer.id}` === requirement)
526
+ );
527
+ }
528
+ function newlyBrokenDependents(entries, mutation) {
529
+ const before = entries.map((entry) => ({ ...entry }));
530
+ resolvePluginPrecedence(before);
531
+ const after = before.filter((entry) => !(mutation.operation === "remove" && entry.id === mutation.id && entry.scope === mutation.scope)).map((entry) => ({
532
+ ...entry,
533
+ enabled: mutation.operation === "disable" && entry.id === mutation.id && entry.scope === mutation.scope ? false : entry.enabled
534
+ }));
535
+ resolvePluginPrecedence(after);
536
+ const newlyBroken = [];
537
+ const preexisting = [];
538
+ for (const entry of before) {
539
+ if (entry.id === mutation.id && entry.scope === mutation.scope) continue;
540
+ const later = after.find((peer) => peer.id === entry.id && peer.scope === entry.scope);
541
+ if (!later?.loadable) continue;
542
+ const missingBefore = entry.loadable ? unmetRequirementsOf(entry, before) : [];
543
+ const missingAfter = unmetRequirementsOf(later, after);
544
+ const ref = `${entry.kind ?? "plugin"}:${entry.id}`;
545
+ const fresh = missingAfter.filter((requirement) => !missingBefore.includes(requirement));
546
+ if (fresh.length) newlyBroken.push({ ref, scope: entry.scope, missing: fresh });
547
+ else if (missingAfter.length) preexisting.push({ ref, scope: entry.scope, missing: missingAfter });
548
+ }
549
+ const effectiveAfter = after.find((entry) => entry.id === mutation.id && entry.effective);
550
+ return { newlyBroken, preexisting, ...effectiveAfter ? { effectiveAfter } : {} };
551
+ }
552
+ function refuseBrokenDependents(cwd, mutation) {
553
+ const { newlyBroken } = newlyBrokenDependents(listInstalledPlugins(cwd, { all: true }), mutation);
554
+ if (newlyBroken.length)
555
+ throw new PluginWriterRefusal(
556
+ "dependents",
557
+ `${mutation.operation} of ${mutation.scope}:${mutation.id} would break ${newlyBroken.map((item) => `${item.scope}:${item.ref} (missing ${item.missing.join(", ")})`).join("; ")}; disable or remove those dependents first`
558
+ );
559
+ }
560
+ function scopeEntries(scope, cwd) {
561
+ const base = pluginBaseDir(scope, cwd);
562
+ if (!existsSync2(base)) return [];
563
+ let names;
564
+ try {
565
+ assertManagedBase(scope, cwd);
566
+ names = readdirSync2(base).sort().filter(isPluginId);
567
+ } catch (error) {
568
+ return [
569
+ {
570
+ id: `invalid-${scope}-plugin-root`,
571
+ name: "Plugin installation directory",
572
+ version: "0.0.0",
573
+ description: "",
574
+ scope,
575
+ rootPath: base,
576
+ manifestPath: pluginStatePath(scope, cwd),
577
+ enabled: false,
578
+ valid: false,
579
+ compatible: true,
580
+ effective: false,
581
+ loadable: false,
582
+ resources: {},
583
+ diagnostics: [
584
+ {
585
+ type: "error",
586
+ message: `plugin directory cannot be read: ${error instanceof Error ? error.message : String(error)}`,
587
+ path: base
588
+ }
589
+ ]
590
+ }
591
+ ];
592
+ }
593
+ let state = { version: 1, disabled: [], installed: {} };
594
+ let stateError;
595
+ try {
596
+ assertManagedBase(scope, cwd);
597
+ state = readState(scope, cwd).state;
598
+ } catch (error) {
599
+ stateError = error instanceof Error ? error.message : String(error);
600
+ }
601
+ const entries = [];
602
+ for (const id of names) {
603
+ const rootPath = path2.join(base, id);
604
+ const candidate = readPluginManifest(rootPath);
605
+ const manifest = candidate.manifest;
606
+ const diagnostics = [...candidate.diagnostics];
607
+ const saved = state.installed[id];
608
+ if (manifest && manifest.name !== id)
609
+ diagnostics.push({
610
+ type: "error",
611
+ message: `installed directory ${id} does not match plugin identity ${manifest.name}`,
612
+ path: rootPath
613
+ });
614
+ if (stateError)
615
+ diagnostics.push({
616
+ type: "error",
617
+ message: `plugin install state cannot be read: ${stateError}`,
618
+ path: pluginStatePath(scope, cwd)
619
+ });
620
+ else if (!saved)
621
+ diagnostics.push({
622
+ type: "error",
623
+ message: "plugin is not recorded in install state; install it through plugins install",
624
+ path: rootPath
625
+ });
626
+ else if (candidate.contentDigest !== saved.contentDigest)
627
+ diagnostics.push({
628
+ type: "error",
629
+ message: `installed plugin content drift detected (expected ${saved.contentDigest}, observed ${candidate.contentDigest ?? "unreadable"})`,
630
+ path: rootPath
631
+ });
632
+ const range = manifest?.clio.compatibility?.clio;
633
+ const compatible = range === void 0 || evaluateClioCompatibility(range).satisfied;
634
+ if (!compatible)
635
+ diagnostics.push({
636
+ type: "error",
637
+ message: `plugin requires Clio ${range}`,
638
+ path: candidate.manifestPath ?? rootPath
639
+ });
640
+ const valid = candidate.valid && !stateError && !!saved && candidate.contentDigest === saved.contentDigest && manifest?.name === id;
641
+ entries.push({
642
+ id,
643
+ kind: saved?.kind ?? manifest?.clio.kind ?? "plugin",
644
+ trust: saved?.trust ?? (isForeignPluginOrigin(saved?.origin) ? "foreign" : "trusted"),
645
+ name: manifest?.name ?? id,
646
+ version: manifest?.version ?? "0.0.0",
647
+ description: manifest?.description ?? "",
648
+ scope,
649
+ rootPath,
650
+ manifestPath: candidate.manifestPath ?? path2.join(rootPath, "plugin.json"),
651
+ enabled: !state.disabled.includes(id),
652
+ valid,
653
+ compatible,
654
+ effective: false,
655
+ loadable: false,
656
+ resources: manifest?.clio.resources ?? {},
657
+ ...manifest ? { manifest } : {},
658
+ diagnostics,
659
+ ...candidate.contentDigest ? { observedContentDigest: candidate.contentDigest } : {},
660
+ ...valid && candidate.manifestDigest && saved ? {
661
+ provenance: {
662
+ id,
663
+ scope,
664
+ sourcePath: saved.source,
665
+ canonicalRoot: realpathSync2(rootPath),
666
+ manifestDigest: candidate.manifestDigest,
667
+ contentDigest: saved.contentDigest
668
+ }
669
+ } : {}
670
+ });
671
+ }
672
+ return entries;
673
+ }
674
+ function listInstalledPlugins(cwd = process.cwd(), options = {}) {
675
+ const scopes = options.scope ? [options.scope] : ["user", "project"];
676
+ const entries = scopes.flatMap((scope) => scopeEntries(scope, cwd));
677
+ resolvePluginPrecedence(entries);
678
+ return entries.filter((entry) => options.all || entry.effective || !entry.valid || !entry.compatible).sort((a, b) => a.id.localeCompare(b.id) || a.scope.localeCompare(b.scope));
679
+ }
680
+ function readPluginInstallRecord(id, options = {}) {
681
+ if (!isPluginId(id)) return void 0;
682
+ const cwd = options.cwd ?? process.cwd();
683
+ if (options.scope) return readState(options.scope, cwd).state.installed[id];
684
+ return readState("project", cwd).state.installed[id] ?? readState("user", cwd).state.installed[id];
685
+ }
686
+ function selectedScope(id, options) {
687
+ if (options.scope) return options.scope;
688
+ return existsSync2(path2.join(pluginBaseDir("project", options.cwd), id)) ? "project" : "user";
689
+ }
690
+ function uniqueSibling(target, purpose) {
691
+ return path2.join(
692
+ path2.dirname(target),
693
+ `.${path2.basename(target)}.${purpose}-${process.pid}-${randomBytes(8).toString("hex")}`
694
+ );
695
+ }
696
+ function retainRecovery(backup, expectedDigest) {
697
+ try {
698
+ if (!expectedDigest || extensionContentDigest(backup) !== expectedDigest) return true;
699
+ rmSync(backup, { recursive: true, force: true });
700
+ return false;
701
+ } catch {
702
+ return true;
703
+ }
704
+ }
705
+ function installPlugin(sourcePath, options = {}) {
706
+ const cwd = options.cwd ?? process.cwd();
707
+ const scope = options.scope ?? "user";
708
+ const source = path2.resolve(cwd, sourcePath);
709
+ const candidate = readPluginManifest(source);
710
+ if (!candidate.valid || !candidate.manifest || !candidate.contentDigest) return { diagnostics: candidate.diagnostics };
711
+ const manifest = candidate.manifest;
712
+ const digest = candidate.contentDigest;
713
+ const range = manifest.clio.compatibility?.clio;
714
+ if (range && !evaluateClioCompatibility(range).satisfied)
715
+ return { diagnostics: [{ type: "error", message: `plugin requires Clio ${range}` }] };
716
+ if (options.expectedKind !== void 0 && options.expectedKind !== (manifest.clio.kind ?? "plugin") || options.expectedDigest !== void 0 && options.expectedDigest !== digest || options.expectedId !== void 0 && options.expectedId !== manifest.name || options.expectedVersion !== void 0 && options.expectedVersion !== manifest.version)
717
+ return {
718
+ diagnostics: [{ type: "error", message: "plugin source does not match the pinned digest, identity, or version" }]
719
+ };
720
+ const target = path2.join(pluginBaseDir(scope, cwd), manifest.name);
721
+ const resolvedBase = pluginBaseDir(scope, cwd);
722
+ if (pluginPathContained(canonicalizeExistingPath(source), canonicalizeExistingPath(resolvedBase)) || pluginPathContained(canonicalizeExistingPath(target), canonicalizeExistingPath(source)))
723
+ return { diagnostics: [{ type: "error", message: "plugin source overlaps its managed installation destination" }] };
724
+ return withMutation(scope, cwd, () => {
725
+ const { state, bytes } = readState(scope, cwd);
726
+ assertExpectedState(options.expect, cwd);
727
+ const previouslyInstalled = Object.hasOwn(state.installed, manifest.name);
728
+ const previousDigest = state.installed[manifest.name]?.contentDigest;
729
+ const previousOrigin = state.installed[manifest.name]?.origin;
730
+ if (isForeignPluginOrigin(previousOrigin))
731
+ throw new Error("interop packages require a new reviewed adoption; remove the installed copy and adopt it again");
732
+ const previousKind = state.installed[manifest.name]?.kind ?? readPluginManifest(target).manifest?.clio.kind;
733
+ if (previousKind && previousKind !== (manifest.clio.kind ?? "plugin"))
734
+ throw new Error("package kind cannot change during replacement; remove it explicitly first");
735
+ if (existsSync2(target) && !options.force)
736
+ throw new Error(`plugin ${manifest.name} is already installed; use --force to replace it`);
737
+ if (existsSync2(target) && lstatSync2(target).isSymbolicLink())
738
+ throw new Error("installed plugin root must not be a symbolic link");
739
+ const staging = uniqueSibling(target, "install");
740
+ const backup = uniqueSibling(target, "backup");
741
+ let moved = false;
742
+ let published = false;
743
+ let preserveBackup = false;
744
+ if (existsSync2(target)) {
745
+ try {
746
+ preserveBackup = extensionContentDigest(target) !== state.installed[manifest.name]?.contentDigest;
747
+ } catch {
748
+ preserveBackup = true;
749
+ }
750
+ }
751
+ try {
752
+ cpSync(source, staging, { recursive: true, verbatimSymlinks: true, errorOnExist: true, force: false });
753
+ const staged = readPluginManifest(staging);
754
+ if (!staged.valid || staged.manifest?.name !== manifest.name || staged.contentDigest !== digest)
755
+ throw new Error("staged plugin differs from the verified source tree");
756
+ if (extensionContentDigest(source) !== digest) throw new Error("plugin source changed while staging");
757
+ assertUnchangedState(pluginStatePath(scope, cwd), bytes);
758
+ if (existsSync2(target)) {
759
+ renameSync(target, backup);
760
+ moved = true;
761
+ }
762
+ renameSync(staging, target);
763
+ published = true;
764
+ if (extensionContentDigest(target) !== digest) throw new Error("plugin changed during publication");
765
+ const origin = options.origin ?? { kind: "local", source };
766
+ const trust = isForeignPluginOrigin(origin) ? "foreign" : options.trust ?? state.installed[manifest.name]?.trust ?? "trusted";
767
+ state.installed[manifest.name] = {
768
+ kind: manifest.clio.kind ?? "plugin",
769
+ installedAt: (/* @__PURE__ */ new Date()).toISOString(),
770
+ source: typeof origin === "string" ? origin : origin.source,
771
+ origin,
772
+ contentDigest: digest,
773
+ trust
774
+ };
775
+ if (!previouslyInstalled) state.disabled = state.disabled.filter((id) => id !== manifest.name);
776
+ writeState(scope, cwd, state, bytes);
777
+ } catch (error) {
778
+ rmSync(staging, { recursive: true, force: true });
779
+ if (published && existsSync2(target)) {
780
+ let unchanged = false;
781
+ try {
782
+ unchanged = extensionContentDigest(target) === digest;
783
+ } catch {
784
+ }
785
+ if (!unchanged)
786
+ return {
787
+ recovery: { ...moved ? { packageBackup: backup } : {} },
788
+ diagnostics: [
789
+ {
790
+ type: "error",
791
+ message: `plugin installation failed and changed content was preserved: ${String(error)}`,
792
+ path: target
793
+ }
794
+ ]
795
+ };
796
+ rmSync(target, { recursive: true, force: true });
797
+ }
798
+ if (moved) renameSync(backup, target);
799
+ throw error;
800
+ }
801
+ if (moved && !preserveBackup) preserveBackup = retainRecovery(backup, previousDigest);
802
+ const plugin = listInstalledPlugins(cwd, { scope, all: true }).find((entry) => entry.id === manifest.name);
803
+ return {
804
+ ...plugin ? { plugin } : {},
805
+ ...moved && preserveBackup ? { recovery: { packageBackup: backup } } : {},
806
+ diagnostics: plugin?.diagnostics ?? []
807
+ };
808
+ });
809
+ }
810
+ function updatePlugin(id, options = {}) {
811
+ if (!isPluginId(id)) return { diagnostics: [{ type: "error", message: "invalid plugin id" }] };
812
+ try {
813
+ const scope = selectedScope(id, options);
814
+ const installed = readPluginInstallRecord(id, { ...options, scope });
815
+ if (!installed) throw new Error(`plugin ${id} is not installed`);
816
+ if (isForeignPluginOrigin(installed.origin))
817
+ throw new Error("interop packages require a new reviewed adoption; remove the installed copy and adopt it again");
818
+ const current = listInstalledPlugins(options.cwd ?? process.cwd(), { scope, all: true }).find(
819
+ (entry) => entry.id === id
820
+ );
821
+ if (!options.force && !current?.valid)
822
+ throw new Error(
823
+ `plugin ${id} has changed or unverifiable content; use --force to preserve a recovery copy and replace it`
824
+ );
825
+ if (/^[a-z][a-z0-9+.-]*:\/\//iu.test(installed.source))
826
+ throw new Error("remote plugin updates must resolve a verified library catalog source");
827
+ return installPlugin(installed.source, {
828
+ ...options,
829
+ scope,
830
+ force: true,
831
+ expectedId: id,
832
+ origin: installed.origin ?? installed.source
833
+ });
834
+ } catch (error) {
835
+ return { diagnostics: [{ type: "error", message: error instanceof Error ? error.message : String(error) }] };
836
+ }
837
+ }
838
+ function setEnabled(id, enabled, options) {
839
+ if (!isPluginId(id)) return { diagnostics: [{ type: "error", message: "invalid plugin id" }] };
840
+ const cwd = options.cwd ?? process.cwd();
841
+ const scope = selectedScope(id, options);
842
+ return withMutation(scope, cwd, () => {
843
+ const { state, bytes } = readState(scope, cwd);
844
+ assertExpectedState(options.expect, cwd);
845
+ const plugin = listInstalledPlugins(cwd, { scope, all: true }).find((entry) => entry.id === id);
846
+ if (!plugin) throw new Error(`plugin ${id} is not installed`);
847
+ if (enabled && (!plugin.valid || !plugin.compatible))
848
+ throw new Error(`plugin ${id} cannot be enabled: ${plugin.diagnostics.map((entry) => entry.message).join("; ")}`);
849
+ if (!enabled && plugin.enabled) refuseBrokenDependents(cwd, { scope, id, operation: "disable" });
850
+ state.disabled = state.disabled.filter((value) => value !== id);
851
+ if (!enabled) state.disabled.push(id);
852
+ writeState(scope, cwd, state, bytes);
853
+ const updated = listInstalledPlugins(cwd, { scope, all: true }).find((entry) => entry.id === id);
854
+ return { ...updated ? { plugin: updated } : {}, diagnostics: [] };
855
+ });
856
+ }
857
+ function enablePlugin(id, options = {}) {
858
+ return setEnabled(id, true, options);
859
+ }
860
+ function disablePlugin(id, options = {}) {
861
+ return setEnabled(id, false, options);
862
+ }
863
+ function removePlugin(id, options = {}) {
864
+ if (!isPluginId(id)) return { diagnostics: [{ type: "error", message: "invalid plugin id" }] };
865
+ const cwd = options.cwd ?? process.cwd();
866
+ const scope = selectedScope(id, options);
867
+ return withMutation(scope, cwd, () => {
868
+ const { state, bytes } = readState(scope, cwd);
869
+ assertExpectedState(options.expect, cwd);
870
+ const target = path2.join(pluginBaseDir(scope, cwd), id);
871
+ const previousDigest = state.installed[id]?.contentDigest;
872
+ if (!existsSync2(target) && !state.installed[id]) throw new Error(`plugin ${id} is not installed`);
873
+ refuseBrokenDependents(cwd, { scope, id, operation: "remove" });
874
+ const backup = uniqueSibling(target, "removed");
875
+ const moved = existsSync2(target);
876
+ let preserve = false;
877
+ if (moved) {
878
+ try {
879
+ preserve = extensionContentDigest(target) !== state.installed[id]?.contentDigest;
880
+ } catch {
881
+ preserve = true;
882
+ }
883
+ renameSync(target, backup);
884
+ }
885
+ try {
886
+ delete state.installed[id];
887
+ state.disabled = state.disabled.filter((value) => value !== id);
888
+ writeState(scope, cwd, state, bytes);
889
+ } catch (error) {
890
+ if (moved) renameSync(backup, target);
891
+ throw error;
892
+ }
893
+ if (moved && !preserve) preserve = retainRecovery(backup, previousDigest);
894
+ return {
895
+ removed: { id, scope, path: target },
896
+ ...preserve ? { recovery: { packageBackup: backup } } : {},
897
+ diagnostics: preserve ? [
898
+ {
899
+ type: "warning",
900
+ message: "removed plugin contained changed or unverified files; preserved recovery copy",
901
+ path: backup
902
+ }
903
+ ] : []
904
+ };
905
+ });
906
+ }
907
+
908
+ // src/domains/plugins/resources.ts
909
+ init_esm_shims();
910
+ import { createHash as createHash2 } from "node:crypto";
911
+ import { realpathSync as realpathSync3 } from "node:fs";
912
+ import path3 from "node:path";
913
+ var snapshots = /* @__PURE__ */ new Map();
914
+ var generation = 0;
915
+ function keyFor(cwd) {
916
+ return `${path3.resolve(clioConfigDir())}\0${realpathSync3(path3.resolve(cwd))}`;
917
+ }
918
+ function freeze(value) {
919
+ if (value !== null && typeof value === "object" && !Object.isFrozen(value)) {
920
+ for (const child of Object.values(value)) freeze(child);
921
+ Object.freeze(value);
922
+ }
923
+ return value;
924
+ }
925
+ function buildPluginSnapshot(cwd = process.cwd(), snapshotGeneration = 0) {
926
+ const canonicalCwd = realpathSync3(path3.resolve(cwd));
927
+ const packages = listInstalledPlugins(canonicalCwd, { all: true });
928
+ const resourceRoots = {
929
+ skills: [],
930
+ prompts: [],
931
+ agents: [],
932
+ fleets: [],
933
+ themes: []
934
+ };
935
+ for (const item of packages) {
936
+ if (!item.loadable || !item.provenance) continue;
937
+ for (const kind of PLUGIN_RESOURCE_KINDS) {
938
+ const relative = item.resources[kind];
939
+ if (!relative) continue;
940
+ resourceRoots[kind].push({
941
+ id: item.id,
942
+ scope: item.scope,
943
+ path: pluginResourcePath(item.rootPath, relative, item.kind === "skill" && relative === "."),
944
+ rootPath: item.rootPath,
945
+ source: `plugin:${item.scope}:${item.id}`,
946
+ provenance: item.provenance,
947
+ generation: snapshotGeneration,
948
+ trust: item.trust ?? "trusted"
949
+ });
950
+ }
951
+ }
952
+ const identity = packages.map((item) => ({
953
+ id: item.id,
954
+ scope: item.scope,
955
+ rootPath: item.rootPath,
956
+ enabled: item.enabled,
957
+ loadable: item.loadable,
958
+ contentDigest: item.observedContentDigest
959
+ }));
960
+ return freeze({
961
+ version: 1,
962
+ generation: snapshotGeneration,
963
+ cwd: canonicalCwd,
964
+ digest: createHash2("sha256").update(JSON.stringify(identity)).digest("hex"),
965
+ packages,
966
+ resourceRoots
967
+ });
968
+ }
969
+ function pluginSnapshotFor(cwd = process.cwd()) {
970
+ return snapshots.get(keyFor(cwd)) ?? buildPluginSnapshot(cwd);
971
+ }
972
+ function reloadPluginResources(cwd = process.cwd()) {
973
+ const key = keyFor(cwd);
974
+ const next = buildPluginSnapshot(cwd, ++generation);
975
+ snapshots.set(key, next);
976
+ return next;
977
+ }
978
+ function clearPluginSnapshots() {
979
+ snapshots.clear();
980
+ }
981
+ function enabledPluginResourceRoots(kind, cwd = process.cwd()) {
982
+ const snapshot = pluginSnapshotFor(cwd);
983
+ if (snapshot.generation === 0) return [...snapshot.resourceRoots[kind]];
984
+ const current = listInstalledPlugins(cwd, { all: true });
985
+ return snapshot.resourceRoots[kind].filter(
986
+ (root) => current.some(
987
+ (item) => item.loadable && item.id === root.id && item.scope === root.scope && item.provenance?.canonicalRoot === root.provenance.canonicalRoot && item.provenance?.manifestDigest === root.provenance.manifestDigest && item.provenance?.contentDigest === root.provenance.contentDigest
988
+ )
989
+ );
990
+ }
991
+
992
+ // src/domains/plugins/index.ts
993
+ init_esm_shims();
994
+
995
+ // src/domains/plugins/extension.ts
996
+ init_esm_shims();
997
+ function createPluginsBundle(_context) {
998
+ return {
999
+ extension: {
1000
+ start() {
1001
+ },
1002
+ stop() {
1003
+ clearPluginSnapshots();
1004
+ }
1005
+ },
1006
+ contract: {
1007
+ list: listInstalledPlugins,
1008
+ discover: discoverPluginPackages,
1009
+ install: installPlugin,
1010
+ update: updatePlugin,
1011
+ enable: enablePlugin,
1012
+ disable: disablePlugin,
1013
+ remove: removePlugin,
1014
+ resourceRoots: enabledPluginResourceRoots,
1015
+ snapshot: pluginSnapshotFor,
1016
+ reload: reloadPluginResources
1017
+ }
1018
+ };
1019
+ }
1020
+
1021
+ // src/domains/plugins/manifest.ts
1022
+ init_esm_shims();
1023
+ var PluginsManifest = { name: "plugins", dependsOn: ["config"] };
1024
+
1025
+ // src/domains/plugins/index.ts
1026
+ var PluginsDomainModule = {
1027
+ manifest: PluginsManifest,
1028
+ createExtension: createPluginsBundle
1029
+ };
1030
+
1031
+ // src/domains/resources/package-references.ts
1032
+ init_esm_shims();
1033
+ import { realpathSync as realpathSync4 } from "node:fs";
1034
+ import path4 from "node:path";
1035
+ var REFERENCE_PATTERN = /\$\{(pluginRoot|component:([^}]+))\}(\/[A-Za-z0-9._~%+@/-]*)?/g;
1036
+ var COMPLETE_REFERENCE = /^\$\{(pluginRoot|component:([^}]+))\}(\/[\s\S]*)?$/u;
1037
+ function referenceResolver(context) {
1038
+ const root = realpathSync4(context.rootPath);
1039
+ let components2;
1040
+ return (reference, _token, ref, suffix) => {
1041
+ if (suffix && /[\\\0\r\n]/u.test(suffix)) throw new Error(`unsupported package path syntax: ${reference}`);
1042
+ let relative = "";
1043
+ if (ref !== void 0) {
1044
+ if (!components2) {
1045
+ const candidate = readPluginManifest(root);
1046
+ if (!candidate.valid || !candidate.manifest) throw new Error("plugin manifest unavailable for component reference");
1047
+ components2 = new Map(
1048
+ candidate.manifest.clio.components.map((component) => [`${component.kind}:${component.id}`, component.path])
1049
+ );
1050
+ }
1051
+ const componentPath = components2.get(ref);
1052
+ if (componentPath === void 0) throw new Error(`unresolved component reference: ${ref}`);
1053
+ relative = componentPath;
1054
+ }
1055
+ const target = path4.resolve(root, relative + (suffix ?? ""));
1056
+ const contained = (value) => {
1057
+ const rel = path4.relative(root, value);
1058
+ return rel !== ".." && !rel.startsWith(`..${path4.sep}`) && !path4.isAbsolute(rel);
1059
+ };
1060
+ try {
1061
+ const resolved = ref === void 0 ? path4.resolve(root, `.${suffix ?? ""}`) : target;
1062
+ if (!contained(resolved) || !contained(realpathSync4(resolved))) throw new Error("outside package");
1063
+ return resolved;
1064
+ } catch {
1065
+ throw new Error(`unresolved or escaping package reference: ${reference}`);
1066
+ }
1067
+ };
1068
+ }
1069
+ function resolvePackageReferences(body, context) {
1070
+ if (!context.rootPath || !context.plugin || !body.includes("${")) return body;
1071
+ return body.replace(REFERENCE_PATTERN, referenceResolver({ ...context, rootPath: context.rootPath }));
1072
+ }
1073
+ function resolvePackagePathReference(value, context) {
1074
+ if (!context.rootPath || !context.plugin || !/\$\{(?:pluginRoot|component:)/u.test(value)) return value;
1075
+ const match = COMPLETE_REFERENCE.exec(value);
1076
+ if (!match || match[3]?.includes("${"))
1077
+ throw new Error("package path references must occupy one complete argument with no embedded expressions");
1078
+ return referenceResolver({ ...context, rootPath: context.rootPath })(value, match[1] ?? "", match[2], match[3]);
1079
+ }
1080
+
1081
+ // src/domains/agents/frontmatter.ts
1082
+ init_esm_shims();
1083
+ var import_yaml = __toESM(require_dist(), 1);
1084
+ function parseFrontmatter(raw, sourcePath) {
1085
+ const opening = raw.match(/^---\r?\n/);
1086
+ if (!opening) {
1087
+ throw new Error(`frontmatter: ${sourcePath}: missing YAML frontmatter opening delimiter`);
1088
+ }
1089
+ const closeRegex = /\r?\n---(?:\r?\n|$)/g;
1090
+ closeRegex.lastIndex = opening[0].length;
1091
+ const closing = closeRegex.exec(raw);
1092
+ if (!closing) {
1093
+ throw new Error(`frontmatter: ${sourcePath}: missing YAML frontmatter closing delimiter`);
1094
+ }
1095
+ const frontmatterText = raw.slice(opening[0].length, closing.index);
1096
+ const body = raw.slice(closing.index + closing[0].length);
1097
+ let parsed;
1098
+ try {
1099
+ parsed = import_yaml.default.parse(frontmatterText);
1100
+ } catch (err) {
1101
+ const reason = err instanceof Error ? err.message : String(err);
1102
+ throw new Error(`frontmatter: ${sourcePath}: invalid YAML frontmatter (${reason})`);
1103
+ }
1104
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
1105
+ throw new Error(`frontmatter: ${sourcePath}: frontmatter must be a YAML object`);
1106
+ }
1107
+ return {
1108
+ frontmatter: parsed,
1109
+ body
1110
+ };
1111
+ }
1112
+
1113
+ export {
1114
+ isLibraryKind,
1115
+ LIBRARY_RESOURCE_KINDS,
1116
+ isLibraryResourceKind,
1117
+ LIBRARY_PROVIDES_LIMITS,
1118
+ PLUGIN_SCHEMA,
1119
+ PLUGIN_EXTENSION_KEY,
1120
+ isPluginId,
1121
+ pluginResourcePath,
1122
+ readPluginManifest,
1123
+ installLibraryPackage,
1124
+ pluginBaseDir,
1125
+ PluginWriterRefusal,
1126
+ withPluginScopeLock,
1127
+ observePluginCopy,
1128
+ newlyBrokenDependents,
1129
+ listInstalledPlugins,
1130
+ readPluginInstallRecord,
1131
+ installPlugin,
1132
+ enablePlugin,
1133
+ disablePlugin,
1134
+ removePlugin,
1135
+ pluginSnapshotFor,
1136
+ reloadPluginResources,
1137
+ enabledPluginResourceRoots,
1138
+ PluginsDomainModule,
1139
+ resolvePackageReferences,
1140
+ resolvePackagePathReference,
1141
+ parseFrontmatter
1142
+ };
1143
+ //# sourceMappingURL=chunk-6UJ7RDI7.js.map