@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,1572 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ projectSurfaceTrust,
4
+ safetySurfaceTrustHash,
5
+ workspaceTrustDirectory
6
+ } from "./chunk-X6FLVUM5.js";
7
+ import {
8
+ loadProjectVerifierCatalog
9
+ } from "./chunk-5C2OQHLR.js";
10
+ import {
11
+ foreignAgentDirs
12
+ } from "./chunk-5EQO5NWP.js";
13
+ import {
14
+ classify
15
+ } from "./chunk-YXFKLMX2.js";
16
+ import {
17
+ extractCommandCdTargets,
18
+ extractCommandDeleteTargets,
19
+ extractCommandWriteTargets,
20
+ inlineShellScript,
21
+ invokesClioSkillMutation,
22
+ scanShellLike
23
+ } from "./chunk-E2NSPYLC.js";
24
+ import {
25
+ pathBoundaryCovers,
26
+ resolvePathBoundary
27
+ } from "./chunk-R2P2U3ZS.js";
28
+ import {
29
+ artifactDefaultPath
30
+ } from "./chunk-NTTS3O53.js";
31
+ import {
32
+ canonicalizeExistingPath
33
+ } from "./chunk-KQ6IDQIB.js";
34
+ import {
35
+ ToolNames
36
+ } from "./chunk-WLHX3MM5.js";
37
+ import {
38
+ require_dist
39
+ } from "./chunk-B5GGDIHT.js";
40
+ import {
41
+ clioConfigDir
42
+ } from "./chunk-CTTI7G3T.js";
43
+ import {
44
+ resolvePackageRoot
45
+ } from "./chunk-E3LEPLQ2.js";
46
+ import {
47
+ __toESM,
48
+ init_esm_shims
49
+ } from "./chunk-ECBHH7LU.js";
50
+
51
+ // src/domains/safety/path-policy.ts
52
+ init_esm_shims();
53
+ import { homedir } from "node:os";
54
+ import path from "node:path";
55
+ var ORDERED_KINDS = ["zeroAccessPaths", "readOnlyPaths", "noWritePaths", "noDeletePaths"];
56
+ function isSameOrDescendant(candidatePath, policyPath) {
57
+ const candidate = path.resolve(candidatePath);
58
+ const policy = path.resolve(policyPath);
59
+ const relative = path.relative(policy, candidate);
60
+ return relative === "" || relative !== ".." && !relative.startsWith(`..${path.sep}`) && !path.isAbsolute(relative);
61
+ }
62
+ function expandTilde(rawPath) {
63
+ if (rawPath === "~") return homedir();
64
+ if (rawPath.startsWith("~/")) return path.join(homedir(), rawPath.slice(2));
65
+ return rawPath;
66
+ }
67
+ function normalizePolicyEntry(rawPath, root) {
68
+ const expanded = expandTilde(rawPath.trim());
69
+ const resolved = path.isAbsolute(expanded) ? path.resolve(expanded) : path.resolve(root, expanded);
70
+ return canonicalizeExistingPath(resolved);
71
+ }
72
+ function blocksOperation(kind, operation) {
73
+ if (kind === "zeroAccessPaths") return true;
74
+ if (kind === "readOnlyPaths" || kind === "noWritePaths") return operation === "write" || operation === "delete";
75
+ return operation === "delete";
76
+ }
77
+ function compilePathPolicy(input, root = process.cwd()) {
78
+ const resolvedRoot = canonicalizeExistingPath(path.resolve(root));
79
+ const entries = [];
80
+ const diagnostics = [];
81
+ for (const kind of ORDERED_KINDS) {
82
+ for (const rawPath of input[kind] ?? []) {
83
+ const trimmed = rawPath.trim();
84
+ if (trimmed.length === 0) {
85
+ diagnostics.push(`${kind}: path must not be empty`);
86
+ continue;
87
+ }
88
+ const entry = { kind, path: normalizePolicyEntry(trimmed, resolvedRoot), source: trimmed };
89
+ const pattern = compilePathPattern(trimmed, resolvedRoot);
90
+ if (pattern !== null) entry.pattern = pattern;
91
+ entries.push(entry);
92
+ }
93
+ }
94
+ return {
95
+ root: resolvedRoot,
96
+ entries: entries.sort((a, b) => a.kind.localeCompare(b.kind) || a.path.localeCompare(b.path)),
97
+ diagnostics
98
+ };
99
+ }
100
+ function evaluatePathPolicy(policy, operation, targetPath, cwd = policy.root) {
101
+ const expanded = expandTilde(targetPath);
102
+ const lexicalTarget = path.isAbsolute(expanded) ? path.resolve(expanded) : path.resolve(cwd, expanded);
103
+ const resolvedTarget = canonicalizeExistingPath(lexicalTarget);
104
+ const normalizedResolvedTarget = normalizeSeparators(resolvedTarget);
105
+ const normalizedRelativeTarget = normalizeSeparators(path.relative(policy.root, resolvedTarget));
106
+ const normalizedRawTarget = normalizeSeparators(targetPath);
107
+ for (const entry of policy.entries) {
108
+ if (!blocksOperation(entry.kind, operation)) continue;
109
+ if (!matchesEntry(entry, resolvedTarget, normalizedResolvedTarget, normalizedRelativeTarget, normalizedRawTarget))
110
+ continue;
111
+ return {
112
+ kind: "block",
113
+ reasonCode: `path-policy:${entry.kind}`,
114
+ reason: `${operation} denied by ${entry.kind} entry ${entry.source}`,
115
+ matchedPath: entry.path,
116
+ policyKind: entry.kind
117
+ };
118
+ }
119
+ return { kind: "allow" };
120
+ }
121
+ function matchesEntry(entry, resolvedTarget, normalizedResolvedTarget, normalizedRelativeTarget, normalizedRawTarget) {
122
+ if (isSameOrDescendant(resolvedTarget, entry.path)) return true;
123
+ if (entry.pattern === void 0) return false;
124
+ return entry.pattern.test(normalizedResolvedTarget) || entry.pattern.test(normalizedRelativeTarget) || entry.pattern.test(normalizedRawTarget);
125
+ }
126
+ function compilePathPattern(rawPath, root) {
127
+ if (!rawPath.includes("*")) return null;
128
+ const expanded = expandTilde(rawPath.trim());
129
+ const source = path.isAbsolute(expanded) ? expanded : path.join(root, expanded);
130
+ const normalized = normalizeSeparators(canonicalizePatternSource(source));
131
+ const relative = normalizeSeparators(path.isAbsolute(expanded) ? expanded : expanded);
132
+ const absolutePattern = segmentPattern(normalized);
133
+ const relativePattern = segmentPattern(relative);
134
+ return new RegExp(`(?:${absolutePattern})|(?:${relativePattern})`);
135
+ }
136
+ function canonicalizePatternSource(patternPath) {
137
+ const wildcardIndex = patternPath.indexOf("*");
138
+ if (wildcardIndex === -1) return canonicalizeExistingPath(patternPath);
139
+ const fixedPrefix = patternPath.slice(0, wildcardIndex);
140
+ const separatorIndex = fixedPrefix.lastIndexOf(path.sep);
141
+ if (separatorIndex === -1) return patternPath;
142
+ const prefix = patternPath.slice(0, separatorIndex + 1);
143
+ const suffix = patternPath.slice(separatorIndex + 1);
144
+ return path.join(canonicalizeExistingPath(prefix), suffix);
145
+ }
146
+ function segmentPattern(rawPath) {
147
+ const escaped = rawPath.split("*").map((part) => part.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("[^/]*");
148
+ return `(?:^|/)${escaped}(?:$|/)`;
149
+ }
150
+ function normalizeSeparators(value) {
151
+ return value.split(path.sep).join("/");
152
+ }
153
+
154
+ // src/domains/safety/policy-engine.ts
155
+ init_esm_shims();
156
+ import { createHash as createHash2 } from "node:crypto";
157
+ import { readFileSync as readFileSync3 } from "node:fs";
158
+ import path4 from "node:path";
159
+
160
+ // src/domains/safety/default-path-policy.ts
161
+ init_esm_shims();
162
+ var DEFAULT_DAMAGE_CONTROL_PATH_POLICY = {
163
+ zeroAccessPaths: [
164
+ ".env",
165
+ ".env.local",
166
+ ".env.development",
167
+ ".env.production",
168
+ ".env.staging",
169
+ ".env.test",
170
+ ".env.*.local",
171
+ "*.env",
172
+ "~/.ssh/",
173
+ "~/.gnupg/",
174
+ "~/.aws/",
175
+ "~/.config/gcloud/",
176
+ "*-credentials.json",
177
+ "*serviceAccount*.json",
178
+ "*service-account*.json",
179
+ "~/.azure/",
180
+ "~/.kube/",
181
+ "kubeconfig",
182
+ "*-secret.yaml",
183
+ "secrets.yaml",
184
+ "~/.docker/",
185
+ "*.pem",
186
+ "*.key",
187
+ "*.p12",
188
+ "*.pfx",
189
+ "*.tfstate",
190
+ "*.tfstate.backup",
191
+ ".terraform/",
192
+ ".vercel/",
193
+ ".netlify/",
194
+ "firebase-adminsdk*.json",
195
+ "serviceAccountKey.json",
196
+ ".supabase/",
197
+ "~/.netrc",
198
+ "~/.npmrc",
199
+ "~/.pypirc",
200
+ "~/.git-credentials",
201
+ ".git-credentials",
202
+ // Remote URLs in the repo git config can embed access tokens, and .git
203
+ // is hidden from grep/find but not from direct reads without this entry.
204
+ ".git/config",
205
+ // Clio's own provider secret store. The literal covers a repo-level file
206
+ // of the same name on purpose; the expanded clioConfigDir() form is
207
+ // appended at policy construction (policy-engine.ts), since this static
208
+ // list cannot call config helpers.
209
+ "credentials.yaml",
210
+ "dump.sql",
211
+ "backup.sql",
212
+ "*.dump"
213
+ ],
214
+ readOnlyPaths: [
215
+ // Clio's own operator-authority files in the project. `safety.yaml` is the
216
+ // policy that gates the model's tools, and `verifiers.yaml` is an argv
217
+ // catalog that verify() executes; a model that can author either one can
218
+ // widen its own permissions in two tool calls. Both are authored by the
219
+ // operator through the CLI (`clio-coder verifiers author` lands nothing
220
+ // before `--yes`), so model-side writes and deletes are refused.
221
+ // Skills also refuse model-side writes and deletes; installs go through `clio-coder library install`.
222
+ ".clio-coder/safety.yaml",
223
+ ".clio-coder/verifiers.yaml",
224
+ ".clio-coder/skills/",
225
+ ".clio-coder/plugins/",
226
+ ".clio-coder/extensions/",
227
+ "/etc/",
228
+ "/usr/",
229
+ "/bin/",
230
+ "/sbin/",
231
+ "/boot/",
232
+ "/root/",
233
+ "~/.bash_history",
234
+ "~/.zsh_history",
235
+ "~/.node_repl_history",
236
+ "~/.bashrc",
237
+ "~/.zshrc",
238
+ "~/.profile",
239
+ "~/.bash_profile",
240
+ "*.min.js",
241
+ "*.min.css",
242
+ "*.bundle.js",
243
+ "*.chunk.js",
244
+ "dist/",
245
+ "build/",
246
+ ".next/",
247
+ ".nuxt/",
248
+ ".output/",
249
+ "node_modules/",
250
+ "__pycache__/",
251
+ ".venv/",
252
+ "venv/",
253
+ "target/"
254
+ ],
255
+ // Another agent's own configuration. Clio reads these roots for skills,
256
+ // prompts, and rule prose and has no reason to author them, so the guard is
257
+ // on writes and not only on deletes.
258
+ noWritePaths: [...foreignAgentDirs()],
259
+ noDeletePaths: [
260
+ "~/.claude/",
261
+ "CLAUDE.md",
262
+ "LICENSE",
263
+ "LICENSE.*",
264
+ "COPYING",
265
+ "COPYING.*",
266
+ "NOTICE",
267
+ "PATENTS",
268
+ "README.md",
269
+ "README.*"
270
+ ]
271
+ };
272
+ function mergePathPolicyInputs(base, override) {
273
+ return {
274
+ zeroAccessPaths: [...base.zeroAccessPaths ?? [], ...override.zeroAccessPaths ?? []],
275
+ readOnlyPaths: [...base.readOnlyPaths ?? [], ...override.readOnlyPaths ?? []],
276
+ noWritePaths: [...base.noWritePaths ?? [], ...override.noWritePaths ?? []],
277
+ noDeletePaths: [...base.noDeletePaths ?? [], ...override.noDeletePaths ?? []]
278
+ };
279
+ }
280
+ var OPERATOR_PATH_POLICY = {
281
+ zeroAccessPaths: DEFAULT_DAMAGE_CONTROL_PATH_POLICY.zeroAccessPaths?.filter((entry) => entry.startsWith("~/")) ?? [],
282
+ readOnlyPaths: DEFAULT_DAMAGE_CONTROL_PATH_POLICY.readOnlyPaths?.filter(
283
+ (entry) => entry.startsWith("~/") || entry.startsWith("/") || entry.startsWith(".clio-coder/")
284
+ ) ?? [],
285
+ noWritePaths: DEFAULT_DAMAGE_CONTROL_PATH_POLICY.noWritePaths ?? [],
286
+ noDeletePaths: DEFAULT_DAMAGE_CONTROL_PATH_POLICY.noDeletePaths?.filter((entry) => entry.startsWith("~/")) ?? []
287
+ };
288
+
289
+ // src/domains/safety/project-policy.ts
290
+ init_esm_shims();
291
+ var import_yaml = __toESM(require_dist(), 1);
292
+ import { createHash } from "node:crypto";
293
+ import { existsSync, readFileSync, realpathSync } from "node:fs";
294
+ import path2 from "node:path";
295
+ var POLICY_RELATIVE_PATH = path2.join(".clio-coder", "safety.yaml");
296
+ var ACTION_CLASSES = /* @__PURE__ */ new Set([
297
+ "read",
298
+ "write",
299
+ "execute",
300
+ "dispatch",
301
+ "system_modify",
302
+ "git_destructive",
303
+ "unknown"
304
+ ]);
305
+ var PATH_POLICY_KEYS = ["zeroAccessPaths", "readOnlyPaths", "noWritePaths", "noDeletePaths"];
306
+ var ROOT_KEYS = /* @__PURE__ */ new Set(["version", "commands", "tasks", "disableDefaultPathPolicy", ...PATH_POLICY_KEYS]);
307
+ var COMMAND_KEYS = /* @__PURE__ */ new Set([
308
+ "id",
309
+ "command",
310
+ "cwd",
311
+ "timeoutMs",
312
+ "maxOutputBytes",
313
+ "actionClass",
314
+ "shellOperators",
315
+ "env",
316
+ "requireConfirmation",
317
+ "rationale",
318
+ "owner",
319
+ "comment"
320
+ ]);
321
+ var ENV_KEYS = /* @__PURE__ */ new Set(["mode", "allow"]);
322
+ var ID_RE = /^[a-zA-Z0-9][a-zA-Z0-9_.:-]*$/;
323
+ function projectSafetyPolicyPath(cwd = process.cwd()) {
324
+ let cursor = path2.resolve(cwd);
325
+ while (true) {
326
+ const candidate = path2.join(cursor, POLICY_RELATIVE_PATH);
327
+ if (existsSync(candidate)) return candidate;
328
+ const parent = path2.dirname(cursor);
329
+ if (parent === cursor) return null;
330
+ cursor = parent;
331
+ }
332
+ }
333
+ function loadProjectSafetyPolicy(cwd = process.cwd()) {
334
+ let policyPath = projectSafetyPolicyPath(cwd);
335
+ if (policyPath === null) {
336
+ return {
337
+ path: null,
338
+ hash: null,
339
+ valid: true,
340
+ errors: [],
341
+ commands: [],
342
+ pathPolicy: {},
343
+ disableDefaultPathPolicy: false
344
+ };
345
+ }
346
+ let raw;
347
+ try {
348
+ policyPath = realpathSync(policyPath);
349
+ raw = readFileSync(policyPath, "utf8");
350
+ } catch (err) {
351
+ return {
352
+ path: policyPath,
353
+ hash: null,
354
+ valid: false,
355
+ errors: [`cannot read project safety policy: ${err instanceof Error ? err.message : String(err)}`],
356
+ commands: [],
357
+ pathPolicy: {},
358
+ disableDefaultPathPolicy: false
359
+ };
360
+ }
361
+ const hash = sha256(raw);
362
+ try {
363
+ const parsed = (0, import_yaml.parse)(raw);
364
+ return validateProjectSafetyPolicy(parsed, policyPath, hash);
365
+ } catch (err) {
366
+ return {
367
+ path: policyPath,
368
+ hash,
369
+ valid: false,
370
+ errors: [`cannot parse project safety policy: ${err instanceof Error ? err.message : String(err)}`],
371
+ commands: [],
372
+ pathPolicy: {},
373
+ disableDefaultPathPolicy: false
374
+ };
375
+ }
376
+ }
377
+ function validateProjectSafetyPolicy(value, policyPath, hash) {
378
+ const errors = [];
379
+ const commands = [];
380
+ if (!isPlainRecord(value)) {
381
+ return {
382
+ path: policyPath,
383
+ hash,
384
+ valid: false,
385
+ errors: ["policy root must be a mapping"],
386
+ commands: [],
387
+ pathPolicy: {},
388
+ disableDefaultPathPolicy: false
389
+ };
390
+ }
391
+ for (const key of Object.keys(value)) {
392
+ if (!ROOT_KEYS.has(key)) errors.push(`unknown root key '${key}'`);
393
+ }
394
+ if (value.version !== 1) errors.push("version must be 1");
395
+ appendCommandPolicies(commands, errors, value.commands, "commands");
396
+ appendCommandPolicies(commands, errors, value.tasks, "tasks");
397
+ const pathPolicy = parsePathPolicy(value, errors);
398
+ const disableDefaultPathPolicy = value.disableDefaultPathPolicy === void 0 ? false : booleanField(value, "disableDefaultPathPolicy", "policy", errors);
399
+ const ids = /* @__PURE__ */ new Set();
400
+ for (const command of commands) {
401
+ if (ids.has(command.id)) errors.push(`duplicate command id '${command.id}'`);
402
+ ids.add(command.id);
403
+ }
404
+ return {
405
+ path: policyPath,
406
+ hash,
407
+ valid: errors.length === 0,
408
+ errors,
409
+ commands: errors.length === 0 ? commands : [],
410
+ pathPolicy: errors.length === 0 ? pathPolicy : {},
411
+ disableDefaultPathPolicy: errors.length === 0 ? disableDefaultPathPolicy : false
412
+ };
413
+ }
414
+ function parsePathPolicy(value, errors) {
415
+ const out = {};
416
+ for (const key of PATH_POLICY_KEYS) {
417
+ const parsed = parsePathList(value[key], key, errors);
418
+ if (parsed !== void 0) out[key] = parsed;
419
+ }
420
+ return out;
421
+ }
422
+ function parsePathList(value, key, errors) {
423
+ if (value === void 0) return void 0;
424
+ if (!Array.isArray(value)) {
425
+ errors.push(`${key} must be an array`);
426
+ return void 0;
427
+ }
428
+ const out = [];
429
+ for (let index = 0; index < value.length; index += 1) {
430
+ const item = value[index];
431
+ const label = `${key}[${index}]`;
432
+ if (typeof item !== "string" || item.trim().length === 0) {
433
+ errors.push(`${label} must be a non-empty string`);
434
+ continue;
435
+ }
436
+ const trimmed = item.trim();
437
+ if (path2.isAbsolute(trimmed)) {
438
+ errors.push(`${label} must be relative to the policy root`);
439
+ continue;
440
+ }
441
+ const normalized = path2.normalize(trimmed);
442
+ const segments = normalized.split(path2.sep).filter((segment) => segment.length > 0);
443
+ if (segments.some((segment) => segment === "..")) {
444
+ errors.push(`${label} must not escape the policy root with '..'`);
445
+ continue;
446
+ }
447
+ out.push(trimmed);
448
+ }
449
+ return out;
450
+ }
451
+ function appendCommandPolicies(out, errors, value, field) {
452
+ if (value === void 0) return;
453
+ if (!Array.isArray(value)) {
454
+ errors.push(`${field} must be an array`);
455
+ return;
456
+ }
457
+ for (let index = 0; index < value.length; index += 1) {
458
+ const parsed = parseCommandPolicy(value[index], `${field}[${index}]`);
459
+ if (parsed.errors.length > 0) {
460
+ errors.push(...parsed.errors);
461
+ continue;
462
+ }
463
+ if (parsed.command !== void 0) out.push(parsed.command);
464
+ }
465
+ }
466
+ function parseCommandPolicy(value, label) {
467
+ const errors = [];
468
+ if (!isPlainRecord(value)) return { errors: [`${label} must be a mapping`] };
469
+ for (const key of Object.keys(value)) {
470
+ if (!COMMAND_KEYS.has(key)) errors.push(`${label}: unknown key '${key}'`);
471
+ }
472
+ const id = stringField(value, "id", label, errors);
473
+ const command = stringField(value, "command", label, errors);
474
+ const cwd = optionalStringField(value, "cwd", label, errors);
475
+ const timeoutMs = optionalPositiveInt(value, "timeoutMs", label, errors);
476
+ const maxOutputBytes = optionalPositiveInt(value, "maxOutputBytes", label, errors);
477
+ const actionClass = parseActionClass(value.actionClass, label, errors);
478
+ const shellOperators = parseShellOperators(value.shellOperators, label, errors);
479
+ const env = parseEnvPolicy(value.env, label, errors);
480
+ const requireConfirmation = value.requireConfirmation === void 0 ? false : booleanField(value, "requireConfirmation", label, errors);
481
+ const rationale = optionalStringField(value, "rationale", label, errors);
482
+ const owner = optionalStringField(value, "owner", label, errors);
483
+ const comment = optionalStringField(value, "comment", label, errors);
484
+ if (id && !ID_RE.test(id)) errors.push(`${label}.id must match ${ID_RE}`);
485
+ if (command && command.trim().length === 0) errors.push(`${label}.command must not be empty`);
486
+ if (cwd !== void 0) {
487
+ if (path2.isAbsolute(cwd)) {
488
+ errors.push(`${label}.cwd must be relative to the policy root`);
489
+ } else {
490
+ const normalized = path2.normalize(cwd);
491
+ const segments = normalized.split(path2.sep).filter((segment) => segment.length > 0);
492
+ if (segments.some((segment) => segment === "..")) {
493
+ errors.push(`${label}.cwd must not escape the policy root with '..'`);
494
+ }
495
+ }
496
+ }
497
+ if (errors.length > 0 || id === void 0 || command === void 0 || actionClass === void 0 || env === void 0) {
498
+ return { errors };
499
+ }
500
+ const parsed = {
501
+ id,
502
+ command,
503
+ actionClass,
504
+ shellOperators,
505
+ env,
506
+ requireConfirmation
507
+ };
508
+ if (cwd !== void 0) parsed.cwd = cwd;
509
+ if (timeoutMs !== void 0) parsed.timeoutMs = timeoutMs;
510
+ if (maxOutputBytes !== void 0) parsed.maxOutputBytes = maxOutputBytes;
511
+ if (rationale !== void 0) parsed.rationale = rationale;
512
+ if (owner !== void 0) parsed.owner = owner;
513
+ if (comment !== void 0) parsed.comment = comment;
514
+ return { command: parsed, errors: [] };
515
+ }
516
+ function parseActionClass(value, label, errors) {
517
+ if (typeof value !== "string") {
518
+ errors.push(`${label}.actionClass must be a string`);
519
+ return void 0;
520
+ }
521
+ if (!ACTION_CLASSES.has(value)) {
522
+ errors.push(`${label}.actionClass is not supported: ${value}`);
523
+ return void 0;
524
+ }
525
+ return value;
526
+ }
527
+ function parseShellOperators(value, label, errors) {
528
+ if (value === void 0) return "deny";
529
+ if (value === "deny" || value === "allow") return value;
530
+ errors.push(`${label}.shellOperators must be 'deny' or 'allow'`);
531
+ return "deny";
532
+ }
533
+ function parseEnvPolicy(value, label, errors) {
534
+ if (value === void 0) return { mode: "none", allow: [] };
535
+ if (!isPlainRecord(value)) {
536
+ errors.push(`${label}.env must be a mapping`);
537
+ return void 0;
538
+ }
539
+ for (const key of Object.keys(value)) {
540
+ if (!ENV_KEYS.has(key)) errors.push(`${label}.env: unknown key '${key}'`);
541
+ }
542
+ const mode = value.mode;
543
+ if (mode !== "none" && mode !== "allowlist") {
544
+ errors.push(`${label}.env.mode must be 'none' or 'allowlist'`);
545
+ return void 0;
546
+ }
547
+ const allow = value.allow;
548
+ if (allow === void 0) return { mode, allow: [] };
549
+ if (!Array.isArray(allow) || allow.some((entry) => typeof entry !== "string" || entry.length === 0)) {
550
+ errors.push(`${label}.env.allow must be an array of non-empty strings`);
551
+ return void 0;
552
+ }
553
+ if (mode === "none" && allow.length > 0) {
554
+ errors.push(`${label}.env.allow requires env.mode='allowlist'`);
555
+ return void 0;
556
+ }
557
+ return { mode, allow: [...allow] };
558
+ }
559
+ function stringField(record, key, label, errors) {
560
+ const value = record[key];
561
+ if (typeof value !== "string" || value.length === 0) {
562
+ errors.push(`${label}.${key} must be a non-empty string`);
563
+ return void 0;
564
+ }
565
+ return value;
566
+ }
567
+ function optionalStringField(record, key, label, errors) {
568
+ const value = record[key];
569
+ if (value === void 0) return void 0;
570
+ if (typeof value !== "string" || value.length === 0) {
571
+ errors.push(`${label}.${key} must be a non-empty string when present`);
572
+ return void 0;
573
+ }
574
+ return value;
575
+ }
576
+ function optionalPositiveInt(record, key, label, errors) {
577
+ const value = record[key];
578
+ if (value === void 0) return void 0;
579
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value <= 0) {
580
+ errors.push(`${label}.${key} must be a positive integer`);
581
+ return void 0;
582
+ }
583
+ return value;
584
+ }
585
+ function booleanField(record, key, label, errors) {
586
+ const value = record[key];
587
+ if (typeof value === "boolean") return value;
588
+ errors.push(`${label}.${key} must be a boolean`);
589
+ return false;
590
+ }
591
+ function isPlainRecord(value) {
592
+ return typeof value === "object" && value !== null && !Array.isArray(value);
593
+ }
594
+ function sha256(raw) {
595
+ return createHash("sha256").update(raw, "utf8").digest("hex");
596
+ }
597
+
598
+ // src/domains/safety/rejection-feedback.ts
599
+ init_esm_shims();
600
+ var HARD_BLOCK_CLASSES = ["git_destructive"];
601
+ function buildShort(ctx) {
602
+ const postureSuffix = ctx.posture ? ` in ${ctx.posture}` : "";
603
+ return `${ctx.tool} blocked: ${ctx.actionClass}${postureSuffix}`;
604
+ }
605
+ function buildDetail(ctx) {
606
+ const lines = [`Clio refused to run ${ctx.tool}.`];
607
+ for (const reason of ctx.reasons) {
608
+ lines.push(`- ${reason}`);
609
+ }
610
+ if (ctx.ruleId) {
611
+ lines.push(`rule: ${ctx.ruleId}`);
612
+ }
613
+ return lines.join("\n");
614
+ }
615
+ function buildHints(ctx) {
616
+ const hints = [];
617
+ const hardBlock = HARD_BLOCK_CLASSES.includes(ctx.actionClass) || ctx.ruleId !== void 0;
618
+ if (hardBlock) {
619
+ hints.push("This is a hard block; confirmation cannot override it.");
620
+ return hints;
621
+ }
622
+ if (ctx.actionClass === "system_modify") {
623
+ hints.push("Operator confirmation is required for this action.");
624
+ }
625
+ return hints;
626
+ }
627
+ function formatRejection(ctx) {
628
+ return {
629
+ short: buildShort(ctx),
630
+ detail: buildDetail(ctx),
631
+ hints: buildHints(ctx)
632
+ };
633
+ }
634
+ var MODEL_REJECTION_PIVOT = "Do not retry this action through another tool unless a hint above names one; pivot or report the blocker.";
635
+ var MODEL_REJECTION_MAX_LINES = 16;
636
+ var MODEL_REJECTION_MAX_LINE_CHARS = 300;
637
+ function formatModelRejection(reason, rejection) {
638
+ const lines = [];
639
+ const seen = /* @__PURE__ */ new Set();
640
+ const push = (line) => {
641
+ const bounded = line.length > MODEL_REJECTION_MAX_LINE_CHARS ? `${line.slice(0, MODEL_REJECTION_MAX_LINE_CHARS)}\u2026` : line;
642
+ const trimmed = bounded.trim();
643
+ if (trimmed.length === 0) return;
644
+ const normalized = trimmed.replace(/^-\s+/, "");
645
+ if (seen.has(normalized) || normalized === MODEL_REJECTION_PIVOT) return;
646
+ seen.add(normalized);
647
+ lines.push(trimmed);
648
+ };
649
+ for (const line of reason.split("\n")) push(line);
650
+ if (rejection) {
651
+ for (const line of rejection.detail.split("\n")) push(line);
652
+ for (const hint of rejection.hints) push(hint);
653
+ }
654
+ const bodyBudget = MODEL_REJECTION_MAX_LINES - 1;
655
+ const body = lines.length > bodyBudget ? [...lines.slice(0, bodyBudget - 1), "(further detail elided)"] : lines;
656
+ return [...body, MODEL_REJECTION_PIVOT].join("\n");
657
+ }
658
+
659
+ // src/domains/safety/rule-pack-loader.ts
660
+ init_esm_shims();
661
+ var import_yaml2 = __toESM(require_dist(), 1);
662
+ import { readFileSync as readFileSync2 } from "node:fs";
663
+ import { join } from "node:path";
664
+
665
+ // src/domains/safety/rule-compiler.ts
666
+ init_esm_shims();
667
+ function asString(value, ruleId, field) {
668
+ if (typeof value !== "string" || value.length === 0) {
669
+ throw new Error(`damage-control rule '${ruleId}': expected string for ${field}`);
670
+ }
671
+ return value;
672
+ }
673
+ function compileDamageControlRule(raw, index) {
674
+ if (typeof raw.id !== "string" || raw.id.length === 0) {
675
+ throw new Error(`damage-control rule at index ${index}: missing or non-string 'id'`);
676
+ }
677
+ const id = raw.id;
678
+ const description = asString(raw.description, id, "description");
679
+ const patternString = asString(raw.pattern, id, "pattern");
680
+ const klass = asString(raw.class, id, "class");
681
+ if (typeof raw.block !== "boolean") {
682
+ throw new Error(`damage-control rule '${id}': expected boolean for block`);
683
+ }
684
+ if (raw.ask !== void 0 && typeof raw.ask !== "boolean") {
685
+ throw new Error(`damage-control rule '${id}': expected boolean for ask`);
686
+ }
687
+ let pattern;
688
+ try {
689
+ pattern = new RegExp(patternString, "i");
690
+ } catch (err) {
691
+ const msg = err instanceof Error ? err.message : String(err);
692
+ throw new Error(`damage-control rule '${id}': invalid pattern: ${msg}`);
693
+ }
694
+ return {
695
+ id,
696
+ description,
697
+ pattern,
698
+ class: klass,
699
+ block: raw.block,
700
+ ...raw.ask !== void 0 ? { ask: raw.ask } : {}
701
+ };
702
+ }
703
+
704
+ // src/domains/safety/rule-pack-loader.ts
705
+ function compilePackRules(rawRules, packId) {
706
+ if (rawRules === void 0 || rawRules === null) return [];
707
+ if (!Array.isArray(rawRules)) {
708
+ throw new Error(`damage-control pack '${packId}': expected array at 'rules'`);
709
+ }
710
+ return rawRules.map((rule, index) => compileDamageControlRule(rule, index));
711
+ }
712
+ function emptyRuleset(version) {
713
+ return { version, rules: [] };
714
+ }
715
+ function loadRulePacks(yamlPath) {
716
+ const raw = readFileSync2(yamlPath, "utf8");
717
+ const parsed = (0, import_yaml2.parse)(raw);
718
+ if (!parsed || typeof parsed !== "object") {
719
+ throw new Error(`damage-control rules at ${yamlPath}: expected mapping at document root`);
720
+ }
721
+ const version = typeof parsed.version === "number" ? parsed.version : 0;
722
+ if (version === 1) {
723
+ const baseRules = compilePackRules(parsed.rules, "base");
724
+ return {
725
+ base: { version: 1, rules: baseRules }
726
+ };
727
+ }
728
+ if (version !== 2) {
729
+ throw new Error(`damage-control rules at ${yamlPath}: unsupported version ${String(parsed.version)}`);
730
+ }
731
+ if (!Array.isArray(parsed.packs)) {
732
+ throw new Error(`damage-control rules at ${yamlPath}: expected array at 'packs'`);
733
+ }
734
+ const out = {
735
+ base: emptyRuleset(2)
736
+ };
737
+ for (const rawPack of parsed.packs) {
738
+ const packId = rawPack.id;
739
+ if (packId !== "base") {
740
+ throw new Error(`damage-control rules at ${yamlPath}: unknown pack id ${String(packId)}`);
741
+ }
742
+ const rules = compilePackRules(rawPack.rules, packId);
743
+ out[packId] = { version: 2, rules };
744
+ }
745
+ return out;
746
+ }
747
+ function loadDefaultRulePacks() {
748
+ return loadRulePacks(join(resolvePackageRoot(), "damage-control-rules.yaml"));
749
+ }
750
+ var cachedPacks = null;
751
+ function getCachedDefaultRulePacks() {
752
+ if (cachedPacks === null) cachedPacks = loadDefaultRulePacks();
753
+ return cachedPacks;
754
+ }
755
+
756
+ // src/domains/safety/skill-authority.ts
757
+ init_esm_shims();
758
+ import { homedir as homedir2 } from "node:os";
759
+ import path3 from "node:path";
760
+ function activeClioSkillRoots(cwd) {
761
+ return ["skills", "plugins", "extensions"].flatMap((kind) => [
762
+ path3.join(cwd, ".clio-coder", kind),
763
+ path3.join(clioConfigDir(), kind)
764
+ ]);
765
+ }
766
+ function skillMutationReason(roots, targets, cwd, command) {
767
+ const workingDirs = [cwd];
768
+ if (command !== null) {
769
+ for (const destination of extractCommandCdTargets(command)) {
770
+ workingDirs.push(path3.resolve(workingDirs.at(-1) ?? cwd, expandHome(destination)));
771
+ }
772
+ }
773
+ for (const target of targets) {
774
+ if (target.operation === "read") continue;
775
+ for (const directory of workingDirs) {
776
+ const lexical = path3.resolve(directory, expandHome(target.path));
777
+ const resolved = canonicalizeExistingPath(lexical);
778
+ for (const root of roots) {
779
+ for (const boundary of [root, canonicalizeExistingPath(root)]) {
780
+ for (const candidate of [lexical, resolved]) {
781
+ if (isSameOrDescendant(candidate, boundary) || target.operation === "delete" && isSameOrDescendant(boundary, candidate)) {
782
+ return `active resource tree ${root} is operator-owned; draft changes outside installed resource roots and use the operator install or update interface`;
783
+ }
784
+ }
785
+ }
786
+ }
787
+ }
788
+ }
789
+ return null;
790
+ }
791
+ function expandHome(value) {
792
+ return value === "~" ? homedir2() : value.startsWith("~/") ? path3.join(homedir2(), value.slice(2)) : value;
793
+ }
794
+
795
+ // src/domains/safety/workspace-trust.ts
796
+ init_esm_shims();
797
+ function gateProjectSafetyPolicy(workspaceRoot, policy) {
798
+ if (policy.path === null) return policy;
799
+ const trustVerdict = policy.hash === null ? "untrusted" : projectSurfaceTrust(workspaceRoot, "safety", safetySurfaceTrustHash(policy.path, policy.hash));
800
+ if (trustVerdict === "trusted") return { ...policy, trustVerdict };
801
+ return {
802
+ ...policy,
803
+ trustVerdict,
804
+ // This is the admitted empty policy, whose execution defaults are valid.
805
+ // Unapproved parse failures retain diagnostics below but cannot acquire the
806
+ // authority to block execution. An approved malformed policy stays invalid.
807
+ valid: true,
808
+ commands: [],
809
+ pathPolicy: {},
810
+ disableDefaultPathPolicy: false,
811
+ errors: [
812
+ ...policy.errors,
813
+ `${policy.path} is ${trustVerdict}; project safety ignored. Review with clio-coder config trust safety.`
814
+ ]
815
+ };
816
+ }
817
+
818
+ // src/domains/safety/policy-engine.ts
819
+ var BUILTIN_ALLOWLIST = [
820
+ { id: "builtin:pwd", re: /^pwd$/ },
821
+ { id: "builtin:ls", re: /^ls(?:\s+(-[A-Za-z0-9]+|\.[/\w.-]*|[/\w.-]+))*$/ },
822
+ { id: "builtin:git-status", re: /^git\s+status(?:\s+--short|\s+--branch|\s+-sb)*$/ },
823
+ { id: "builtin:git-diff", re: /^git\s+diff(?:\s+--cached|\s+--stat|\s+--name-only|\s+--\s+[\w./-]+)*$/ },
824
+ { id: "builtin:git-log", re: /^git\s+log\s+--oneline(?:\s+-n\s+[1-9]\d{0,2})?(?:\s+--\s+[\w./-]+)?$/ }
825
+ ];
826
+ var PROJECT_SCRIPT_COMMANDS = [
827
+ { id: "builtin:npm-test", re: /^npm\s+(?:test|run\s+test)(?:\s+--\s+[\w=./:-]+(?:\s+[\w=./:-]+)*)?$/ },
828
+ { id: "builtin:npm-lint", re: /^npm\s+run\s+lint(?:\s+--\s+[\w=./:-]+(?:\s+[\w=./:-]+)*)?$/ },
829
+ { id: "builtin:npm-build", re: /^npm\s+run\s+build(?:\s+--\s+[\w=./:-]+(?:\s+[\w=./:-]+)*)?$/ },
830
+ { id: "builtin:npm-typecheck", re: /^npm\s+run\s+typecheck(?:\s+--\s+[\w=./:-]+(?:\s+[\w=./:-]+)*)?$/ },
831
+ { id: "builtin:npm-ci-script", re: /^npm\s+run\s+ci(?:\s+--\s+[\w=./:-]+(?:\s+[\w=./:-]+)*)?$/ },
832
+ { id: "builtin:pytest", re: /^pytest(?:\s+[\w=./:-]+)*$/ },
833
+ { id: "builtin:python-pytest", re: /^python(?:3(?:\.\d+)?)?\s+-m\s+pytest(?:\s+[\w=./:-]+)*$/ },
834
+ { id: "builtin:cargo-test", re: /^cargo\s+test(?:\s+[\w=./:-]+)*$/ },
835
+ { id: "builtin:go-test", re: /^go\s+test(?:\s+[\w=./:-]+)*$/ },
836
+ { id: "builtin:make-test", re: /^make\s+test(?:\s+[\w=./:-]+)*$/ }
837
+ ];
838
+ var BASH_RECOGNIZED_FORM_HINT = "Recognized forms run without asking: one command per bash call, or a && chain whose every step is recognized, with cwd passed as the cwd argument instead of a leading cd.";
839
+ var EXECUTION_TOOLS = /* @__PURE__ */ new Set([ToolNames.Bash, ToolNames.Verify]);
840
+ var WRITE_ROOT_REFUSED_TOOLS = /* @__PURE__ */ new Set([
841
+ ToolNames.Bash,
842
+ ToolNames.Verify,
843
+ ToolNames.Dispatch
844
+ ]);
845
+ var WRITE_ROOT_TOOLS = /* @__PURE__ */ new Set([ToolNames.Write, ToolNames.Edit, ToolNames.Artifact]);
846
+ function writeRootTargetPath(call) {
847
+ if (!WRITE_ROOT_TOOLS.has(call.tool)) return null;
848
+ const target = pathArg(call.args);
849
+ if (target !== null) return target;
850
+ if (call.tool === ToolNames.Artifact) return artifactDefaultPath(call.args?.kind);
851
+ return null;
852
+ }
853
+ function isWriteConfinementEscape(call, actionClass) {
854
+ if (WRITE_ROOT_REFUSED_TOOLS.has(call.tool)) return true;
855
+ return actionClass === "execute" || actionClass === "dispatch";
856
+ }
857
+ function evaluateWriteRoots(roots, writeRootCwd, call) {
858
+ if (roots.length === 0) return null;
859
+ const target = writeRootTargetPath(call);
860
+ if (target === null) return null;
861
+ const resolved = path4.resolve(writeRootCwd, target);
862
+ if (pathBoundaryCovers(roots, resolved)) return null;
863
+ return `write target '${target}' resolves to '${resolved}', which is outside the permitted write roots for this run: ${roots.join(", ")}`;
864
+ }
865
+ function createSafetyPolicyEngine(options = {}) {
866
+ const cwd = canonicalizeExistingPath(path4.resolve(options.cwd ?? process.cwd()));
867
+ const writeRootCwd = path4.resolve(options.cwd ?? process.cwd());
868
+ const writeRoots = (options.writeRoots ?? []).map((root) => resolvePathBoundary(writeRootCwd, root));
869
+ const skillRoots = activeClioSkillRoots(cwd);
870
+ const packs = options.rulePacks ?? getCachedDefaultRulePacks();
871
+ const projectPolicy = options.projectPolicy ?? gateProjectSafetyPolicy(cwd, loadProjectSafetyPolicy(cwd));
872
+ const projectPolicyRoot = projectPolicy.path === null ? cwd : path4.dirname(path4.dirname(path4.resolve(projectPolicy.path)));
873
+ const pathPolicyInput = projectPolicy.disableDefaultPathPolicy ? projectPolicy.pathPolicy : mergePathPolicyInputs(DEFAULT_DAMAGE_CONTROL_PATH_POLICY, projectPolicy.pathPolicy);
874
+ const expandedDefaults = mergePathPolicyInputs(mergePathPolicyInputs(pathPolicyInput, OPERATOR_PATH_POLICY), {
875
+ zeroAccessPaths: clioCredentialStorePaths(),
876
+ readOnlyPaths: [...clioSkillsRootPaths(), path4.join(clioConfigDir(), "settings.yaml"), workspaceTrustDirectory()]
877
+ });
878
+ const pathPolicy = compilePathPolicy(expandedDefaults, projectPolicyRoot);
879
+ const zeroAccessPolicy = {
880
+ root: pathPolicy.root,
881
+ entries: pathPolicy.entries.filter((entry) => entry.kind === "zeroAccessPaths"),
882
+ diagnostics: []
883
+ };
884
+ const sourcedRules = packs.base.rules.map((rule) => ({ rule, source: "damage-control:base" }));
885
+ return {
886
+ evaluate(call, posture) {
887
+ const rawClassification = classify(call);
888
+ const command = commandArg(call.args);
889
+ const callCwd = cwdArg(call.args, cwd);
890
+ const catalogCheck = resolveVerifyCatalogCheck(call, cwd);
891
+ const catalogCommand = catalogCheck === null ? null : catalogCheck.command.join(" ");
892
+ const scan = catalogCommand ?? damageControlScan(call);
893
+ const hit = scan ? matchSourcedRule(scan, sourcedRules) : null;
894
+ const classification = effectiveClassification(rawClassification, hit?.match);
895
+ const base = baseDecision(call, classification, callCwd, posture, command);
896
+ const writeRootReason = evaluateWriteRoots(writeRoots, writeRootCwd, call);
897
+ if (writeRootReason !== null) {
898
+ return blockDecision(base, {
899
+ ruleId: "write-root",
900
+ reasonCode: "write-root",
901
+ reasons: [writeRootReason],
902
+ policySource: "builtin-classifier"
903
+ });
904
+ }
905
+ if (writeRoots.length > 0 && isWriteConfinementEscape(call, classification.actionClass)) {
906
+ return blockDecision(base, {
907
+ ruleId: "write-root",
908
+ reasonCode: "write-root",
909
+ reasons: [
910
+ `tool '${call.tool}' (${classification.actionClass}) can mutate the filesystem outside the permitted write roots and is blocked under write-root confinement`
911
+ ],
912
+ policySource: "builtin-classifier"
913
+ });
914
+ }
915
+ const askRule = hit?.match.ask === true && hit.match.block !== true;
916
+ if (!askRule && (classification.actionClass === "git_destructive" || hit?.match.actionClass === "git_destructive" || hit?.match.block === true)) {
917
+ const blockInput = {
918
+ reasonCode: hit ? `damage-control:${hit.match.ruleId}` : "classification:git_destructive",
919
+ reasons: [...classification.reasons, ...hit ? [hit.match.reason] : []],
920
+ policySource: hit?.source ?? "damage-control:base"
921
+ };
922
+ if (hit?.match.ruleId !== void 0) blockInput.ruleId = hit.match.ruleId;
923
+ if (hit?.match !== void 0) blockInput.match = hit.match;
924
+ return blockDecision(base, blockInput);
925
+ }
926
+ if (!projectPolicy.valid && EXECUTION_TOOLS.has(call.tool)) {
927
+ const blockInput = {
928
+ ruleId: "project-policy-invalid",
929
+ reasonCode: "project-policy-invalid",
930
+ reasons: [`project safety policy is invalid and execution fails closed: ${projectPolicy.errors.join("; ")}`],
931
+ policySource: "project-policy-invalid"
932
+ };
933
+ if (projectPolicy.hash !== null) blockInput.policyHash = projectPolicy.hash;
934
+ if (projectPolicy.path !== null) blockInput.projectPolicyPath = projectPolicy.path;
935
+ return blockDecision(base, blockInput);
936
+ }
937
+ const mutationCommand = call.tool === ToolNames.Bash ? command : catalogCommand;
938
+ if (mutationCommand !== null && invokesTrustMutation(mutationCommand)) {
939
+ return blockDecision(base, {
940
+ reasonCode: "trust-authority",
941
+ ruleId: "trust-authority",
942
+ reasons: ["workspace trust grants require the operator CLI"],
943
+ policySource: "builtin-classifier"
944
+ });
945
+ }
946
+ if (skillMutationReason(
947
+ [path4.join(clioConfigDir(), "settings.yaml"), workspaceTrustDirectory()],
948
+ pathPolicyTargets(catalogCommand === null ? call : { tool: ToolNames.Bash, args: { command: catalogCommand } }),
949
+ callCwd,
950
+ mutationCommand
951
+ ) !== null) {
952
+ return blockDecision(base, {
953
+ reasonCode: "path-policy:readOnlyPaths",
954
+ ruleId: "path-policy:readOnlyPaths",
955
+ reasons: ["Clio settings and workspace trust records are operator-owned and cannot be mutated by tools"],
956
+ policySource: "builtin-classifier"
957
+ });
958
+ }
959
+ const skillReason = mutationCommand !== null && invokesClioSkillMutation(mutationCommand) ? "resource installation and lifecycle changes require the operator CLI or an explicit operator install choice; draft outside installed resource roots" : skillMutationReason(
960
+ skillRoots,
961
+ pathPolicyTargets(catalogCommand === null ? call : { tool: ToolNames.Bash, args: { command: catalogCommand } }),
962
+ callCwd,
963
+ mutationCommand
964
+ );
965
+ if (skillReason !== null) {
966
+ return blockDecision(base, {
967
+ ruleId: "skill-authority",
968
+ reasonCode: "skill-authority",
969
+ reasons: [skillReason],
970
+ policySource: "builtin-classifier"
971
+ });
972
+ }
973
+ const pathBlock = evaluateProjectPathPolicy(pathPolicy, call, callCwd);
974
+ if (pathBlock !== null) {
975
+ const blockInput = {
976
+ ruleId: pathBlock.reasonCode,
977
+ reasonCode: pathBlock.reasonCode,
978
+ reasons: [pathBlock.reason],
979
+ policySource: "project-policy"
980
+ };
981
+ if (projectPolicy.hash !== null) blockInput.policyHash = projectPolicy.hash;
982
+ if (projectPolicy.path !== null) blockInput.projectPolicyPath = projectPolicy.path;
983
+ return blockDecision(base, blockInput);
984
+ }
985
+ const scannedCommand = call.tool === ToolNames.Bash ? command : catalogCommand;
986
+ if (scannedCommand !== null) {
987
+ const secretRead = evaluateBashZeroAccessRead(zeroAccessPolicy, scannedCommand, callCwd);
988
+ if (secretRead !== null) {
989
+ const blockInput = {
990
+ ruleId: "secret_path_bash",
991
+ reasonCode: "secret_path_bash",
992
+ reasons: [
993
+ `bash read of zero-access path blocked: '${secretRead.token}' matches ${secretRead.entrySource}. Check presence with exit codes only (grep -sq "^NAME=" <file>); have the user supply values through their own terminal (read -s), never through chat or command output.`
994
+ ],
995
+ policySource: "project-policy"
996
+ };
997
+ if (projectPolicy.hash !== null) blockInput.policyHash = projectPolicy.hash;
998
+ if (projectPolicy.path !== null) blockInput.projectPolicyPath = projectPolicy.path;
999
+ return blockDecision(base, blockInput);
1000
+ }
1001
+ }
1002
+ if (askRule && hit !== null && posture !== "confirmed") {
1003
+ return askDecision(base, {
1004
+ ruleId: hit.match.ruleId,
1005
+ reasonCode: `damage-control:${hit.match.ruleId}`,
1006
+ reasons: [...classification.reasons, hit.match.reason, "damage-control rule requires confirmation"],
1007
+ policySource: hit.source,
1008
+ match: hit.match
1009
+ });
1010
+ }
1011
+ if (askRule && hit !== null && posture === "confirmed") {
1012
+ return allowDecision(base, {
1013
+ ruleId: hit.match.ruleId,
1014
+ reasonCode: `damage-control:${hit.match.ruleId}`,
1015
+ reasons: [...classification.reasons, hit.match.reason, "damage-control rule confirmed by operator"],
1016
+ policySource: hit.source,
1017
+ match: hit.match
1018
+ });
1019
+ }
1020
+ if (classification.actionClass === "system_modify") {
1021
+ const input = {
1022
+ ruleId: "system-modify-confirm",
1023
+ reasonCode: "system-modify-confirm",
1024
+ reasons: [...classification.reasons, "system-level changes require one-shot confirmation at every autonomy level"],
1025
+ policySource: "builtin-classifier"
1026
+ };
1027
+ return posture === "confirmed" ? allowDecision(base, input) : askDecision(base, input);
1028
+ }
1029
+ const packageCommand = call.tool === ToolNames.Verify && catalogCheck === null && typeof call.args?.check === "string" && call.args.check !== "frontend" ? `npm run ${call.args.check}` : null;
1030
+ if ((call.tool === ToolNames.Bash || catalogCheck !== null || packageCommand !== null) && classification.actionClass === "execute") {
1031
+ const bash = evaluateBashPolicy(
1032
+ catalogCheck?.command ?? packageCommand ?? command ?? "",
1033
+ catalogCheck === null ? callCwd : path4.resolve(cwd, catalogCheck.cwd),
1034
+ cwd,
1035
+ posture,
1036
+ projectPolicy
1037
+ );
1038
+ if ((catalogCheck !== null || packageCommand !== null) && bash.kind === "allow" && bash.execRecognition !== "recognized" && posture !== "confirmed") {
1039
+ return askDecision(base, {
1040
+ ...bash,
1041
+ reasonCode: "project-verifier-confirm",
1042
+ reasons: [
1043
+ ...bash.reasons,
1044
+ `Repository verifier requires confirmation or an approved safety declaration: ${catalogCommand ?? packageCommand}`
1045
+ ]
1046
+ });
1047
+ }
1048
+ if (bash.kind === "block") return blockDecision(base, bash);
1049
+ if (bash.kind === "ask") return askDecision(base, bash);
1050
+ return allowDecision(base, bash);
1051
+ }
1052
+ const allowInput = {
1053
+ reasonCode: "allowed",
1054
+ reasons: classification.reasons,
1055
+ policySource: hit?.source ?? "none"
1056
+ };
1057
+ if (hit?.match.ruleId !== void 0) allowInput.ruleId = hit.match.ruleId;
1058
+ if (hit?.match !== void 0) allowInput.match = hit.match;
1059
+ if (classification.actionClass === "execute") allowInput.execRecognition = "recognized";
1060
+ return allowDecision(base, allowInput);
1061
+ },
1062
+ metadata() {
1063
+ return {
1064
+ version: 1,
1065
+ rulePackHash: rulePackHash(packs),
1066
+ rulePackVersion: packs.base.version,
1067
+ activeRuleIds: sourcedRules.map((entry) => entry.rule.id),
1068
+ projectPolicyPath: projectPolicy.path,
1069
+ projectPolicyHash: projectPolicy.hash,
1070
+ projectPolicyValid: projectPolicy.valid,
1071
+ projectPolicyErrors: [...projectPolicy.errors, ...pathPolicy.diagnostics],
1072
+ disableDefaultPathPolicy: projectPolicy.disableDefaultPathPolicy,
1073
+ workspaceTrustVerdict: projectPolicy.trustVerdict ?? "trusted",
1074
+ cwd
1075
+ };
1076
+ }
1077
+ };
1078
+ }
1079
+ function clioCredentialStorePaths() {
1080
+ try {
1081
+ return [path4.join(clioConfigDir(), "credentials.yaml")];
1082
+ } catch {
1083
+ return [];
1084
+ }
1085
+ }
1086
+ function clioSkillsRootPaths() {
1087
+ try {
1088
+ return [path4.join(clioConfigDir(), "skills")];
1089
+ } catch {
1090
+ return [];
1091
+ }
1092
+ }
1093
+ var SAFE_PRESENCE_RE = /^\s*grep\s+(?:-(?:q|sq|qs)\s+)('[^']*'|"[^"]*"|\S+)\s+\S+\s*$/;
1094
+ function isSafePresenceCheck(command) {
1095
+ const match = SAFE_PRESENCE_RE.exec(command);
1096
+ if (!match || match[1] === void 0) return false;
1097
+ const pattern = stripQuotes(match[1]);
1098
+ return /^\^[A-Za-z_][A-Za-z0-9_]*=/.test(pattern);
1099
+ }
1100
+ function stripQuotes(token) {
1101
+ if (token.length >= 2) {
1102
+ const first = token[0];
1103
+ const last = token[token.length - 1];
1104
+ if (first === '"' && last === '"' || first === "'" && last === "'") return token.slice(1, -1);
1105
+ }
1106
+ return token;
1107
+ }
1108
+ function bashPathTokenCandidates(command) {
1109
+ const candidates = [];
1110
+ for (const scanned of scanShellLike(command)) {
1111
+ if (scanned.operator) continue;
1112
+ const token = scanned.value;
1113
+ if (token.length === 0) continue;
1114
+ if (/\s/.test(token)) continue;
1115
+ if (token.startsWith("-") && !token.includes("/") && !token.includes("=")) continue;
1116
+ candidates.push(token);
1117
+ const eq = token.indexOf("=");
1118
+ if (eq > 0 && eq < token.length - 1) candidates.push(token.slice(eq + 1));
1119
+ }
1120
+ return candidates;
1121
+ }
1122
+ function evaluateBashZeroAccessRead(zeroAccessPolicy, command, callCwd) {
1123
+ if (zeroAccessPolicy.entries.length === 0) return null;
1124
+ if (isSafePresenceCheck(command)) return null;
1125
+ for (const token of bashPathTokenCandidates(command)) {
1126
+ const decision = evaluatePathPolicy(zeroAccessPolicy, "read", token, callCwd);
1127
+ if (decision.kind === "block") {
1128
+ return { token, entrySource: `zeroAccessPaths entry ${decision.matchedPath}` };
1129
+ }
1130
+ }
1131
+ return null;
1132
+ }
1133
+ function evaluateProjectPathPolicy(policy, call, callCwd) {
1134
+ if (policy.entries.length === 0) return null;
1135
+ for (const target of pathPolicyTargets(call)) {
1136
+ const decision = evaluatePathPolicy(policy, target.operation, target.path, callCwd);
1137
+ if (decision.kind === "block") return decision;
1138
+ }
1139
+ return null;
1140
+ }
1141
+ function pathPolicyTargets(call) {
1142
+ const args = call.args;
1143
+ switch (call.tool) {
1144
+ case ToolNames.Read:
1145
+ case ToolNames.Ls:
1146
+ case ToolNames.Grep:
1147
+ case ToolNames.Find: {
1148
+ const target = pathArg(args) ?? ".";
1149
+ return [{ operation: "read", path: target }];
1150
+ }
1151
+ case ToolNames.Write:
1152
+ case ToolNames.Edit: {
1153
+ const target = pathArg(args);
1154
+ return target === null ? [] : [{ operation: "write", path: target }];
1155
+ }
1156
+ case ToolNames.Artifact:
1157
+ return [{ operation: "write", path: pathArg(args) ?? artifactDefaultPath(args?.kind) }];
1158
+ case ToolNames.CredentialPresent:
1159
+ return [];
1160
+ case ToolNames.Bash: {
1161
+ const command = commandArg(args);
1162
+ if (command === null) return [];
1163
+ return [
1164
+ ...extractCommandWriteTargets(command).map((target) => ({ operation: "write", path: target })),
1165
+ ...extractCommandDeleteTargets(command).map((target) => ({ operation: "delete", path: target }))
1166
+ ];
1167
+ }
1168
+ default:
1169
+ return [];
1170
+ }
1171
+ }
1172
+ function evaluateBashPolicy(input, callCwd, workspaceRoot, posture, policy) {
1173
+ if (typeof input !== "string" && !input.every((arg) => /^[\w=./:-]+$/u.test(arg))) {
1174
+ return {
1175
+ kind: posture === "confirmed" ? "allow" : "ask",
1176
+ ruleId: "verify-unrecognized-argv",
1177
+ reasonCode: "verify-unrecognized-argv",
1178
+ reasons: ["project verifier argv is outside the bare-word no-prompt command set"],
1179
+ policySource: "builtin-command-allowlist",
1180
+ execRecognition: "unrecognized"
1181
+ };
1182
+ }
1183
+ const command = typeof input === "string" ? input : input.join(" ");
1184
+ if (command.trim().length === 0) {
1185
+ return {
1186
+ kind: "block",
1187
+ ruleId: "bash-empty-command",
1188
+ reasonCode: "bash-empty-command",
1189
+ reasons: ["bash command must not be empty"],
1190
+ policySource: "builtin-command-allowlist"
1191
+ };
1192
+ }
1193
+ if (typeof input === "string" && (/\$(?:[A-Za-z_{0-9@*#?!-])/.test(command) || /(?:^|[\s;&|])(?:python[\d.]*|node|ruby|perl|php|lua)\s+(?:[^\n]*?\s)?-[ce]\b/.test(command)) && posture !== "confirmed") {
1194
+ return {
1195
+ kind: "ask",
1196
+ reasonCode: "bash-hidden-content",
1197
+ ruleId: "bash-hidden-content",
1198
+ reasons: ["shell variables or interpreter source hide paths from the safety scan and require one-shot confirmation"],
1199
+ policySource: "builtin-command-allowlist",
1200
+ execRecognition: "unrecognized"
1201
+ };
1202
+ }
1203
+ const projectMatch = matchingProjectCommand(policy, command, callCwd);
1204
+ if (projectMatch) {
1205
+ const base = {
1206
+ ruleId: projectMatch.id,
1207
+ reasonCode: `project-policy:${projectMatch.id}`,
1208
+ reasons: [`allowed by project safety policy command '${projectMatch.id}'`],
1209
+ policySource: "project-policy",
1210
+ execRecognition: "recognized"
1211
+ };
1212
+ if (policy.hash !== null) base.policyHash = policy.hash;
1213
+ if (policy.path !== null) base.projectPolicyPath = policy.path;
1214
+ if (projectMatch.requireConfirmation && posture !== "confirmed") {
1215
+ return {
1216
+ ...base,
1217
+ kind: "ask",
1218
+ reasons: [...base.reasons, "project policy requires confirmation"]
1219
+ };
1220
+ }
1221
+ return { ...base, kind: "allow" };
1222
+ }
1223
+ if (!isUnderOrSame(callCwd, workspaceRoot)) {
1224
+ return {
1225
+ kind: "block",
1226
+ ruleId: "bash-cwd-escape",
1227
+ reasonCode: "bash-cwd-escape",
1228
+ reasons: [
1229
+ `bash cwd '${callCwd}' escapes workspace root '${workspaceRoot}'; use a typed tool or a project policy entry with explicit cwd`
1230
+ ],
1231
+ policySource: "builtin-command-allowlist"
1232
+ };
1233
+ }
1234
+ const recognitionCommand = inlineShellScript(command) ?? command;
1235
+ if (hasCommandSubstitution(recognitionCommand) && posture !== "confirmed") {
1236
+ return {
1237
+ kind: "ask",
1238
+ ruleId: "bash-command-substitution",
1239
+ reasonCode: "bash-command-substitution",
1240
+ reasons: ["command substitution hides the executed content from the safety net and requires one-shot confirmation"],
1241
+ policySource: "builtin-command-allowlist",
1242
+ execRecognition: "unrecognized"
1243
+ };
1244
+ }
1245
+ if (PROJECT_SCRIPT_COMMANDS.some((entry) => entry.re.test(recognitionCommand))) {
1246
+ return {
1247
+ kind: posture === "confirmed" ? "allow" : "ask",
1248
+ reasonCode: "project-script-confirm",
1249
+ ruleId: "project-script-confirm",
1250
+ reasons: [
1251
+ "Repository-authored code requires one-shot confirmation or an operator-approved safety command declaration.",
1252
+ projectScriptPreview(recognitionCommand, callCwd)
1253
+ ],
1254
+ policySource: "builtin-command-allowlist",
1255
+ execRecognition: "unrecognized"
1256
+ };
1257
+ }
1258
+ const chain = recognizeCommandChain(recognitionCommand, callCwd, workspaceRoot, policy);
1259
+ if (chain !== null) {
1260
+ const chainReasons = [`every step of the && chain is recognized: ${chain.ruleIds.join(", ")}`];
1261
+ if (chain.requiresConfirmation) {
1262
+ for (const segment of recognitionCommand.split("&&").map((part) => part.trim())) {
1263
+ if (PROJECT_SCRIPT_COMMANDS.some((entry) => entry.re.test(segment)))
1264
+ chainReasons.push(projectScriptPreview(segment, callCwd));
1265
+ }
1266
+ }
1267
+ if (chain.requiresConfirmation && posture !== "confirmed") {
1268
+ return {
1269
+ kind: "ask",
1270
+ ruleId: "bash-recognized-chain",
1271
+ reasonCode: "bash-recognized-chain",
1272
+ reasons: [...chainReasons, "repository code or project policy requires confirmation for one step"],
1273
+ policySource: "builtin-command-allowlist",
1274
+ execRecognition: "recognized"
1275
+ };
1276
+ }
1277
+ return {
1278
+ kind: "allow",
1279
+ ruleId: "bash-recognized-chain",
1280
+ reasonCode: "bash-recognized-chain",
1281
+ reasons: chainReasons,
1282
+ policySource: "builtin-command-allowlist",
1283
+ execRecognition: "recognized"
1284
+ };
1285
+ }
1286
+ if (hasSequencingOperators(command)) {
1287
+ const scriptSegments = recognitionCommand.split(/&&|\|\||[;|\n]/).map((part) => part.trim()).filter((part) => PROJECT_SCRIPT_COMMANDS.some((entry) => entry.re.test(part)));
1288
+ if (scriptSegments.length > 0 && posture !== "confirmed") {
1289
+ return {
1290
+ kind: "ask",
1291
+ ruleId: "project-script-confirm",
1292
+ reasonCode: "project-script-confirm",
1293
+ reasons: [
1294
+ "Repository scripts in compound commands require one-shot confirmation",
1295
+ ...scriptSegments.map((part) => projectScriptPreview(part, callCwd))
1296
+ ],
1297
+ policySource: "builtin-command-allowlist",
1298
+ execRecognition: "unrecognized"
1299
+ };
1300
+ }
1301
+ return {
1302
+ kind: "allow",
1303
+ ruleId: "bash-shell-operators",
1304
+ reasonCode: "bash-shell-operators",
1305
+ reasons: [
1306
+ "shell operators defeat per-command recognition; the autonomy level decides admission",
1307
+ BASH_RECOGNIZED_FORM_HINT
1308
+ ],
1309
+ policySource: "builtin-command-allowlist",
1310
+ execRecognition: "unrecognized"
1311
+ };
1312
+ }
1313
+ for (const entry of BUILTIN_ALLOWLIST) {
1314
+ if (entry.re.test(recognitionCommand)) {
1315
+ return {
1316
+ kind: "allow",
1317
+ ruleId: entry.id,
1318
+ reasonCode: entry.id,
1319
+ reasons: [`matched built-in no-prompt command allowlist '${entry.id}'`],
1320
+ policySource: "builtin-command-allowlist",
1321
+ execRecognition: "recognized"
1322
+ };
1323
+ }
1324
+ }
1325
+ return {
1326
+ kind: "allow",
1327
+ ruleId: "bash-unrecognized",
1328
+ reasonCode: "bash-unrecognized",
1329
+ reasons: [
1330
+ "bash command is outside the no-prompt set; the autonomy level decides admission",
1331
+ BASH_RECOGNIZED_FORM_HINT
1332
+ ],
1333
+ policySource: "builtin-command-allowlist",
1334
+ execRecognition: "unrecognized"
1335
+ };
1336
+ }
1337
+ function baseDecision(call, classification, cwd, posture, command) {
1338
+ const out = {
1339
+ classification,
1340
+ tool: call.tool,
1341
+ actionClass: classification.actionClass,
1342
+ cwd
1343
+ };
1344
+ if (posture !== void 0) out.posture = posture;
1345
+ if (command !== null) out.command = command;
1346
+ return out;
1347
+ }
1348
+ function allowDecision(base, input) {
1349
+ return { ...base, ...input, kind: "allow" };
1350
+ }
1351
+ function askDecision(base, input) {
1352
+ const rejectionInput = {
1353
+ tool: base.tool,
1354
+ actionClass: base.classification.actionClass,
1355
+ reasons: input.reasons
1356
+ };
1357
+ if (base.posture !== void 0) rejectionInput.posture = base.posture;
1358
+ if (input.ruleId !== void 0) rejectionInput.ruleId = input.ruleId;
1359
+ const rejection = formatRejection(rejectionInput);
1360
+ return { ...base, ...input, kind: "ask", rejection };
1361
+ }
1362
+ function blockDecision(base, input) {
1363
+ const rejectionInput = {
1364
+ tool: base.tool,
1365
+ actionClass: base.classification.actionClass,
1366
+ reasons: input.reasons
1367
+ };
1368
+ if (base.posture !== void 0) rejectionInput.posture = base.posture;
1369
+ if (input.ruleId !== void 0) rejectionInput.ruleId = input.ruleId;
1370
+ const rejection = formatRejection(rejectionInput);
1371
+ return { ...base, ...input, kind: "block", rejection };
1372
+ }
1373
+ function matchSourcedRule(commandString, rules) {
1374
+ for (const entry of rules) {
1375
+ if (entry.rule.pattern.test(commandString)) {
1376
+ const match = {
1377
+ ruleId: entry.rule.id,
1378
+ reason: `matched ${entry.rule.id}: ${entry.rule.description}`,
1379
+ actionClass: entry.rule.class,
1380
+ block: entry.rule.block
1381
+ };
1382
+ if (entry.rule.ask !== void 0) match.ask = entry.rule.ask;
1383
+ return { match, source: entry.source };
1384
+ }
1385
+ }
1386
+ return null;
1387
+ }
1388
+ var ACTION_CLASSES2 = /* @__PURE__ */ new Set([
1389
+ "read",
1390
+ "write",
1391
+ "execute",
1392
+ "system_modify",
1393
+ "git_destructive",
1394
+ "dispatch"
1395
+ ]);
1396
+ function effectiveClassification(classification, match) {
1397
+ if (!match || !ACTION_CLASSES2.has(match.actionClass)) return classification;
1398
+ const actionClass = match.actionClass;
1399
+ if (actionClass === classification.actionClass) return classification;
1400
+ return {
1401
+ actionClass,
1402
+ reasons: [...classification.reasons, `damage-control:${match.ruleId}`]
1403
+ };
1404
+ }
1405
+ function matchingProjectCommand(policy, command, cwd) {
1406
+ if (!policy.valid || policy.path === null) return null;
1407
+ const policyRoot = path4.dirname(path4.dirname(policy.path));
1408
+ for (const entry of policy.commands) {
1409
+ if (entry.command !== command) continue;
1410
+ if (entry.shellOperators === "deny" && hasShellOperators(command)) continue;
1411
+ const allowedCwd = entry.cwd !== void 0 ? path4.resolve(policyRoot, entry.cwd) : policyRoot;
1412
+ if (!isUnderOrSame(cwd, allowedCwd)) continue;
1413
+ return entry;
1414
+ }
1415
+ return null;
1416
+ }
1417
+ var CHAIN_MAX_SEGMENTS = 6;
1418
+ function recognizeCommandChain(command, callCwd, workspaceRoot, policy) {
1419
+ const segments = [];
1420
+ let current = [];
1421
+ for (const token of scanShellLike(command)) {
1422
+ if (token.operator && token.value === "&&") {
1423
+ segments.push(current);
1424
+ current = [];
1425
+ continue;
1426
+ }
1427
+ if (token.operator) return null;
1428
+ current.push(token.value);
1429
+ }
1430
+ segments.push(current);
1431
+ if (segments.length < 2 || segments.length > CHAIN_MAX_SEGMENTS) return null;
1432
+ const ruleIds = [];
1433
+ let requiresConfirmation = false;
1434
+ for (const segment of segments) {
1435
+ if (segment.length === 0) return null;
1436
+ if (segment[0] === "cd") {
1437
+ if (segment.length !== 2) return null;
1438
+ const target = segment[1] ?? "";
1439
+ if (target.startsWith("~") || !isUnderOrSame(path4.resolve(callCwd, target), workspaceRoot)) return null;
1440
+ ruleIds.push("builtin:cd-workspace");
1441
+ continue;
1442
+ }
1443
+ const rendered = segment.join(" ");
1444
+ const projectMatch = matchingProjectCommand(policy, rendered, callCwd);
1445
+ if (projectMatch) {
1446
+ ruleIds.push(projectMatch.id);
1447
+ if (projectMatch.requireConfirmation) requiresConfirmation = true;
1448
+ continue;
1449
+ }
1450
+ if (PROJECT_SCRIPT_COMMANDS.some((entry) => entry.re.test(rendered))) {
1451
+ ruleIds.push("project-script-confirm");
1452
+ requiresConfirmation = true;
1453
+ continue;
1454
+ }
1455
+ const builtin = BUILTIN_ALLOWLIST.find((entry) => entry.re.test(rendered));
1456
+ if (builtin === void 0) return null;
1457
+ ruleIds.push(builtin.id);
1458
+ }
1459
+ return { ruleIds, requiresConfirmation };
1460
+ }
1461
+ function hasSequencingOperators(command) {
1462
+ return /(\|\||&&|;|\||>>?|<|\n|\r)/.test(command);
1463
+ }
1464
+ function hasCommandSubstitution(command) {
1465
+ return /(`|\$\()/.test(command);
1466
+ }
1467
+ function hasShellOperators(command) {
1468
+ return hasSequencingOperators(command) || hasCommandSubstitution(command);
1469
+ }
1470
+ function isUnderOrSame(child, parent) {
1471
+ const rel = path4.relative(
1472
+ canonicalizeExistingPath(path4.resolve(parent)),
1473
+ canonicalizeExistingPath(path4.resolve(child))
1474
+ );
1475
+ return rel === "" || !rel.startsWith("..") && !path4.isAbsolute(rel);
1476
+ }
1477
+ function commandArg(args) {
1478
+ return typeof args?.command === "string" ? args.command : null;
1479
+ }
1480
+ function pathArg(args) {
1481
+ if (!args) return null;
1482
+ const candidate = args.path ?? args.file_path ?? args.filePath;
1483
+ return typeof candidate === "string" && candidate.length > 0 ? candidate : null;
1484
+ }
1485
+ function cwdArg(args, fallback) {
1486
+ const resolved = typeof args?.cwd === "string" && args.cwd.length > 0 ? path4.resolve(fallback, args.cwd) : fallback;
1487
+ return canonicalizeExistingPath(resolved);
1488
+ }
1489
+ var CONTENT_BEARING_TOOLS = /* @__PURE__ */ new Set([
1490
+ ToolNames.Write,
1491
+ ToolNames.Edit,
1492
+ ToolNames.Artifact,
1493
+ ToolNames.Dispatch,
1494
+ ToolNames.Tasks
1495
+ ]);
1496
+ function damageControlScan(call) {
1497
+ if (!CONTENT_BEARING_TOOLS.has(call.tool)) return serializeArgs(call.args);
1498
+ const pathArg2 = call.args?.path;
1499
+ return typeof pathArg2 === "string" ? pathArg2 : "";
1500
+ }
1501
+ function resolveVerifyCatalogCheck(call, workspaceRoot) {
1502
+ if (call.tool !== ToolNames.Verify) return null;
1503
+ const check = call.args?.check;
1504
+ if (typeof check !== "string") return null;
1505
+ const id = check.trim();
1506
+ if (id.length === 0 || id === "frontend") return null;
1507
+ try {
1508
+ const catalog = loadProjectVerifierCatalog(workspaceRoot);
1509
+ if (!catalog.ok || catalog.source === null) return null;
1510
+ return catalog.source.checks.find((candidate) => candidate.id === id) ?? null;
1511
+ } catch {
1512
+ return null;
1513
+ }
1514
+ }
1515
+ function serializeArgs(args) {
1516
+ if (!args) return "";
1517
+ const parts = [];
1518
+ for (const v of Object.values(args)) {
1519
+ if (v == null) continue;
1520
+ if (typeof v === "string" || typeof v === "number" || typeof v === "boolean") parts.push(String(v));
1521
+ else {
1522
+ try {
1523
+ parts.push(JSON.stringify(v));
1524
+ } catch {
1525
+ }
1526
+ }
1527
+ }
1528
+ return parts.join(" ");
1529
+ }
1530
+ function rulePackHash(packs) {
1531
+ const payload = {
1532
+ base: packPayload(packs.base.rules)
1533
+ };
1534
+ return createHash2("sha256").update(JSON.stringify(payload), "utf8").digest("hex");
1535
+ }
1536
+ function packPayload(rules) {
1537
+ return rules.map((rule) => ({
1538
+ id: rule.id,
1539
+ description: rule.description,
1540
+ pattern: rule.pattern.source,
1541
+ class: rule.class,
1542
+ block: rule.block,
1543
+ ...rule.ask !== void 0 ? { ask: rule.ask } : {}
1544
+ }));
1545
+ }
1546
+ function invokesTrustMutation(command) {
1547
+ const words = scanShellLike(command).filter((token) => !token.operator).map((token) => token.value);
1548
+ return words.some((word, index) => word === "config" && words[index + 1] === "trust") || /\bconfig\s+trust\b/.test(inlineShellScript(command) ?? "");
1549
+ }
1550
+ function projectScriptPreview(command, cwd) {
1551
+ const match = /^npm\s+(?:run\s+)?([\w:-]+)/.exec(command);
1552
+ if (match) {
1553
+ try {
1554
+ const manifest = JSON.parse(readFileSync3(path4.join(cwd, "package.json"), "utf8"));
1555
+ const name = match[1] ?? "test";
1556
+ const scripts = [`pre${name}`, name, `post${name}`].flatMap(
1557
+ (key) => typeof manifest.scripts?.[key] === "string" ? [`${key}: ${manifest.scripts[key]}`] : []
1558
+ );
1559
+ return `package.json scripts (repository data): ${scripts.join("; ") || "no script resolved"}`;
1560
+ } catch {
1561
+ return "package.json script body could not be resolved; repository code will execute.";
1562
+ }
1563
+ }
1564
+ return `Repository command: ${command}. Its test/build files and dependencies execute with the child process permissions.`;
1565
+ }
1566
+
1567
+ export {
1568
+ formatModelRejection,
1569
+ WRITE_ROOT_REFUSED_TOOLS,
1570
+ createSafetyPolicyEngine
1571
+ };
1572
+ //# sourceMappingURL=chunk-RAUOKUZV.js.map