@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,1289 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ describeWriteBoundary,
4
+ normalizeWriteBoundary,
5
+ normalizeWriteBoundaryEntry,
6
+ writeBoundaryCovers
7
+ } from "./chunk-7QQRPB2E.js";
8
+ import {
9
+ asDirectoryPathBoundary,
10
+ pathBoundaryEntryCovers
11
+ } from "./chunk-R2P2U3ZS.js";
12
+ import {
13
+ buildSafeToolEnv
14
+ } from "./chunk-GJ24ODAX.js";
15
+ import {
16
+ atomicWrite
17
+ } from "./chunk-36XSBPXL.js";
18
+ import {
19
+ clioStateDir
20
+ } from "./chunk-CTTI7G3T.js";
21
+ import {
22
+ init_esm_shims
23
+ } from "./chunk-ECBHH7LU.js";
24
+
25
+ // src/tools/compete-worktrees.ts
26
+ init_esm_shims();
27
+ import { execFileSync as execFileSync3 } from "node:child_process";
28
+ import { randomBytes as randomBytes2 } from "node:crypto";
29
+ import {
30
+ existsSync as existsSync2,
31
+ lstatSync,
32
+ mkdirSync as mkdirSync2,
33
+ readdirSync,
34
+ readFileSync as readFileSync2,
35
+ realpathSync as realpathSync2,
36
+ renameSync,
37
+ rmdirSync,
38
+ rmSync as rmSync3,
39
+ unlinkSync,
40
+ writeFileSync as writeFileSync2
41
+ } from "node:fs";
42
+ import { hostname } from "node:os";
43
+ import { join as join3, relative as relative2, resolve as resolve2 } from "node:path";
44
+
45
+ // src/domains/dispatch/workspace-checkpoint.ts
46
+ init_esm_shims();
47
+ import { execFileSync } from "node:child_process";
48
+ import { createHash } from "node:crypto";
49
+ import { mkdtempSync, rmSync } from "node:fs";
50
+ import { tmpdir } from "node:os";
51
+ import { join } from "node:path";
52
+ function workspaceCheckpointRef(kind, identity) {
53
+ return `refs/clio-coder/${kind}/${createHash("sha256").update(identity).digest("hex")}`;
54
+ }
55
+ function captureWorkspaceCheckpoint(cwd, ref, message) {
56
+ if (!/^refs\/clio-coder\/(loop|compete)\/[a-f0-9]{64}$/.test(ref)) throw new Error("invalid workspace checkpoint ref");
57
+ const directory = mkdtempSync(join(tmpdir(), "clio-coder-checkpoint-index-"));
58
+ const env = buildSafeToolEnv({
59
+ GIT_INDEX_FILE: join(directory, "index"),
60
+ GIT_AUTHOR_NAME: "Clio checkpoint",
61
+ GIT_AUTHOR_EMAIL: "checkpoint@clio.invalid",
62
+ GIT_COMMITTER_NAME: "Clio checkpoint",
63
+ GIT_COMMITTER_EMAIL: "checkpoint@clio.invalid"
64
+ });
65
+ const config = ["-c", "core.hooksPath=/dev/null", "-c", "core.fsmonitor=false"];
66
+ const git4 = (args) => execFileSync("git", ["-C", cwd, ...config, ...args], {
67
+ env,
68
+ encoding: "utf8",
69
+ stdio: ["ignore", "pipe", "pipe"],
70
+ timeout: 3e4,
71
+ maxBuffer: 1024 * 1024
72
+ }).trim();
73
+ try {
74
+ try {
75
+ git4(["rev-parse", "--verify", ref]);
76
+ return ref;
77
+ } catch {
78
+ }
79
+ const head = git4(["rev-parse", "HEAD"]);
80
+ const filterKeys = git4(["config", "--null", "--name-only", "--list"]).split("\0").filter((key) => /^filter\..*\.(?:clean|process|required)$/.test(key));
81
+ for (const key of filterKeys) config.push("-c", `${key}=${key.endsWith(".required") ? "false" : ""}`);
82
+ git4(["read-tree", head]);
83
+ git4(["add", "-A", "--", "."]);
84
+ const tree = git4(["write-tree"]);
85
+ const commit = git4(["commit-tree", tree, "-p", head, "-m", message]);
86
+ git4(["update-ref", ref, commit, ""]);
87
+ return ref;
88
+ } finally {
89
+ rmSync(directory, { recursive: true, force: true });
90
+ }
91
+ }
92
+
93
+ // src/tools/task-worktree.ts
94
+ init_esm_shims();
95
+ import { execFileSync as execFileSync2 } from "node:child_process";
96
+ import { createHash as createHash2, randomBytes } from "node:crypto";
97
+ import { existsSync, mkdirSync, readFileSync, realpathSync, rmSync as rmSync2, writeFileSync } from "node:fs";
98
+ import { isAbsolute, join as join2, relative, resolve, sep } from "node:path";
99
+ var SAFE_RUN_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;
100
+ var OWNER_FILE_SUFFIX = ".task-owner.json";
101
+ var TASK_WORKTREE_KIND = "clio-coder-task-worktree";
102
+ var LEGACY_TASK_WORKTREE_KIND = "clio-task-worktree";
103
+ var COMMIT_IDENTITY = "clio-coder-task";
104
+ function gitBytes(root, args) {
105
+ return execFileSync2("git", ["-C", root, ...args], {
106
+ stdio: ["ignore", "pipe", "pipe"],
107
+ timeout: 3e4
108
+ });
109
+ }
110
+ function git(root, args) {
111
+ return gitBytes(root, args).toString("utf8").trim();
112
+ }
113
+ function isCanonicalWorktreePathInside(parent, candidate) {
114
+ let canonicalParent;
115
+ let canonicalCandidate;
116
+ try {
117
+ canonicalParent = realpathSync(parent);
118
+ } catch {
119
+ canonicalParent = resolve(parent);
120
+ }
121
+ try {
122
+ canonicalCandidate = realpathSync(candidate);
123
+ } catch {
124
+ canonicalCandidate = resolve(candidate);
125
+ }
126
+ const rel = relative(canonicalParent, canonicalCandidate);
127
+ return rel.length > 0 && rel !== ".." && !rel.startsWith(`..${sep}`) && !isAbsolute(rel);
128
+ }
129
+ function commitWorktreePath(path, identity, message, excludedPaths = []) {
130
+ if (excludedPaths.length > 0) {
131
+ git(path, ["reset", "-q", "HEAD", "--", ...excludedPaths.map((entry) => `:(top,literal)${entry}`)]);
132
+ }
133
+ git(path, ["add", "-A", "--", ".", ...excludedPaths.map((entry) => `:(top,exclude,literal)${entry}`)]);
134
+ if (git(path, ["diff", "--cached", "--name-only", "-z"]).length === 0) return false;
135
+ git(path, [
136
+ "-c",
137
+ `user.name=${identity}`,
138
+ "-c",
139
+ `user.email=${identity}@local`,
140
+ "commit",
141
+ "-m",
142
+ message,
143
+ "--no-verify"
144
+ ]);
145
+ return true;
146
+ }
147
+ function worktreeBranchDiffStat(root, branch) {
148
+ try {
149
+ return git(root, ["diff", "--shortstat", `HEAD...${branch}`]) || "no changes";
150
+ } catch {
151
+ return "diff unavailable";
152
+ }
153
+ }
154
+ function protectedPathsChangedByWorktreeBranch(root, branch, protectedPaths) {
155
+ const canonical = realpathSync(root);
156
+ const protectedInside = protectedPaths.map((path) => resolve(path)).filter((path) => {
157
+ const rel = relative(canonical, path);
158
+ return rel.length > 0 && rel !== ".." && !rel.startsWith(`..${sep}`) && !isAbsolute(rel);
159
+ });
160
+ if (protectedInside.length === 0) return [];
161
+ const changed = git(canonical, ["diff", "--name-only", "-z", "--no-renames", `HEAD...${branch}`]).split("\0").filter((path) => path.length > 0).map((path) => resolve(canonical, path));
162
+ const blocked = /* @__PURE__ */ new Set();
163
+ for (const candidate of changed) {
164
+ for (const protectedPath of protectedInside) {
165
+ const rel = relative(protectedPath, candidate);
166
+ if (candidate === protectedPath || rel.length > 0 && rel !== ".." && !rel.startsWith(`..${sep}`) && !isAbsolute(rel)) {
167
+ blocked.add(protectedPath);
168
+ }
169
+ }
170
+ }
171
+ return [...blocked].sort();
172
+ }
173
+ function mergeWorktreeBranch(root, branch, identity) {
174
+ try {
175
+ git(root, [
176
+ "-c",
177
+ `user.name=${identity}`,
178
+ "-c",
179
+ `user.email=${identity}@local`,
180
+ "merge",
181
+ "--no-edit",
182
+ "--no-verify",
183
+ branch
184
+ ]);
185
+ return { ok: true };
186
+ } catch (error) {
187
+ try {
188
+ git(root, ["merge", "--abort"]);
189
+ } catch {
190
+ }
191
+ return {
192
+ ok: false,
193
+ reason: error instanceof Error ? error.message.split("\n")[0] ?? "merge failed" : String(error)
194
+ };
195
+ }
196
+ }
197
+ function validateRunId(runId) {
198
+ if (!SAFE_RUN_ID.test(runId) || runId === "." || runId === "..")
199
+ throw new Error(`invalid task worktree run id '${runId}'`);
200
+ }
201
+ function gitCheckoutRoot(cwd) {
202
+ try {
203
+ return realpathSync(git(cwd, ["rev-parse", "--show-toplevel"]));
204
+ } catch {
205
+ return null;
206
+ }
207
+ }
208
+ function createTaskWorktree(root, runId, base) {
209
+ validateRunId(runId);
210
+ const canonical = realpathSync(root);
211
+ const resolvedBase = base ?? git(canonical, ["rev-parse", "HEAD"]);
212
+ const parent = join2(canonical, ".clio-coder", "worktrees");
213
+ const path = join2(parent, runId);
214
+ const branch = `clio-coder/task/${runId}`;
215
+ mkdirSync(parent, { recursive: true });
216
+ if (!isCanonicalWorktreePathInside(parent, path))
217
+ throw new Error(`task worktree path escapes its parent for run ${runId}`);
218
+ git(canonical, ["worktree", "add", "-b", branch, path, resolvedBase]);
219
+ const ownerToken = randomBytes(16).toString("hex");
220
+ writeFileSync(
221
+ `${path}${OWNER_FILE_SUFFIX}`,
222
+ `${JSON.stringify({ version: 1, kind: TASK_WORKTREE_KIND, root: canonical, runId, branch, base: resolvedBase, ownerToken }, null, 2)}
223
+ `,
224
+ { encoding: "utf8", flag: "wx" }
225
+ );
226
+ return { root: canonical, runId, path, branch, base: resolvedBase, ownerToken };
227
+ }
228
+ function assertOwnership(worktree) {
229
+ const expected = join2(worktree.root, ".clio-coder", "worktrees", worktree.runId);
230
+ if (resolve(worktree.path) !== resolve(expected) || !isCanonicalWorktreePathInside(join2(worktree.root, ".clio-coder", "worktrees"), worktree.path)) {
231
+ throw new Error(`task worktree ${worktree.runId} has an invalid ownership path`);
232
+ }
233
+ const ownerPath = `${worktree.path}${OWNER_FILE_SUFFIX}`;
234
+ if (!existsSync(ownerPath)) throw new Error(`task worktree ${worktree.runId} has no ownership file`);
235
+ let marker;
236
+ try {
237
+ const value = JSON.parse(readFileSync(ownerPath, "utf8"));
238
+ if (typeof value !== "object" || value === null || Array.isArray(value)) throw new Error("not an object");
239
+ marker = value;
240
+ } catch {
241
+ throw new Error(`task worktree ${worktree.runId} has an invalid ownership file`);
242
+ }
243
+ if (marker.version !== 1 || marker.kind !== TASK_WORKTREE_KIND && marker.kind !== LEGACY_TASK_WORKTREE_KIND || marker.root !== worktree.root || marker.runId !== worktree.runId || marker.branch !== worktree.branch || marker.base !== worktree.base || marker.ownerToken !== worktree.ownerToken) {
244
+ throw new Error(`task worktree ${worktree.runId} ownership facts do not match`);
245
+ }
246
+ }
247
+ function commitTaskWorktree(worktree, message = `Clio Coder task ${worktree.runId}`) {
248
+ assertOwnership(worktree);
249
+ return commitWorktreePath(worktree.path, COMMIT_IDENTITY, message);
250
+ }
251
+ function taskWorktreeDiffHash(worktree) {
252
+ const bytes = gitBytes(worktree.root, ["diff", `${worktree.base}..${worktree.branch}`]);
253
+ return createHash2("sha256").update(bytes).digest("hex");
254
+ }
255
+ function protectedPathsChangedByTaskBranch(worktree, protectedPaths) {
256
+ return protectedPathsChangedByWorktreeBranch(worktree.root, worktree.branch, protectedPaths);
257
+ }
258
+ function applyTaskWorktree(input) {
259
+ assertOwnership(input.worktree);
260
+ commitTaskWorktree(input.worktree);
261
+ const receipt = {
262
+ path: input.worktree.path,
263
+ branch: input.worktree.branch,
264
+ diffHash: taskWorktreeDiffHash(input.worktree),
265
+ apply: input.apply,
266
+ applied: false
267
+ };
268
+ if (input.apply === "preserve") return receipt;
269
+ const protectedChanges = protectedPathsChangedByTaskBranch(input.worktree, input.protectedPaths ?? []);
270
+ if (protectedChanges.length > 0) return { ...receipt, reason: "protected_artifact_changed" };
271
+ const merged = mergeWorktreeBranch(input.worktree.root, input.worktree.branch, COMMIT_IDENTITY);
272
+ if (!merged.ok) return { ...receipt, reason: "worktree_merge_conflict" };
273
+ return { ...receipt, applied: true };
274
+ }
275
+ function cleanupTaskWorktree(worktree, deleteBranch) {
276
+ assertOwnership(worktree);
277
+ try {
278
+ git(worktree.root, ["worktree", "remove", "--force", worktree.path]);
279
+ } catch {
280
+ if (existsSync(worktree.path)) rmSync2(worktree.path, { recursive: true, force: true });
281
+ git(worktree.root, ["worktree", "prune"]);
282
+ }
283
+ if (deleteBranch) git(worktree.root, ["branch", "-D", worktree.branch]);
284
+ rmSync2(`${worktree.path}${OWNER_FILE_SUFFIX}`, { force: true });
285
+ }
286
+
287
+ // src/tools/compete-worktrees.ts
288
+ var COMPETE_PARENT_SEGMENTS = [".clio-coder", "worktrees"];
289
+ var COMPETE_MANIFEST_FILE = ".clio-coder-compete-owner.json";
290
+ var COMPETE_MANIFEST_KIND = "clio-coder-compete-group";
291
+ var LEGACY_COMPETE_MANIFEST_KIND = "clio-compete-group";
292
+ var COMPETE_COMMIT_IDENTITY = "clio-coder-compete";
293
+ var SAFE_GROUP = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
294
+ var PROCESS_EXIT_GRACE_MS = 750;
295
+ var PROCESS_POLL_MS = 25;
296
+ function git2(root, args) {
297
+ return execFileSync3("git", ["-C", root, ...args], {
298
+ encoding: "utf8",
299
+ stdio: ["ignore", "pipe", "pipe"],
300
+ timeout: 3e4
301
+ }).trim();
302
+ }
303
+ function errorMessage(err) {
304
+ return err instanceof Error ? err.message : String(err);
305
+ }
306
+ function processSnapshot(pid) {
307
+ if (!Number.isSafeInteger(pid) || pid <= 0) return { alive: false, birthToken: null };
308
+ try {
309
+ process.kill(pid, 0);
310
+ } catch (err) {
311
+ if (err.code !== "EPERM") return { alive: false, birthToken: null };
312
+ }
313
+ try {
314
+ const stat = readFileSync2(`/proc/${pid}/stat`, "utf8").trim();
315
+ const close = stat.lastIndexOf(")");
316
+ if (close > 0) {
317
+ const fields = stat.slice(close + 1).trim().split(/\s+/u);
318
+ if (fields[0] === "Z") return { alive: false, birthToken: fields[19] ?? null };
319
+ const startTicks = fields[19];
320
+ if (startTicks !== void 0 && /^\d+$/u.test(startTicks)) {
321
+ return { alive: true, birthToken: `linux:${startTicks}` };
322
+ }
323
+ }
324
+ } catch {
325
+ }
326
+ try {
327
+ const started = execFileSync3("ps", ["-o", "lstart=", "-p", String(pid)], {
328
+ encoding: "utf8",
329
+ stdio: ["ignore", "pipe", "ignore"],
330
+ timeout: 2e3
331
+ }).trim();
332
+ if (started.length > 0) return { alive: true, birthToken: `ps:${started}` };
333
+ } catch {
334
+ }
335
+ return { alive: true, birthToken: null };
336
+ }
337
+ function currentProcessLease() {
338
+ return {
339
+ host: hostname(),
340
+ pid: process.pid,
341
+ birthToken: processSnapshot(process.pid).birthToken
342
+ };
343
+ }
344
+ function validProcessLease(value) {
345
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
346
+ const lease = value;
347
+ return typeof lease.host === "string" && lease.host.length > 0 && typeof lease.pid === "number" && Number.isSafeInteger(lease.pid) && lease.pid > 0 && (lease.birthToken === null || typeof lease.birthToken === "string");
348
+ }
349
+ function validRunLease(value) {
350
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
351
+ const lease = value;
352
+ return typeof lease.runId === "string" && lease.runId.length > 0 && (lease.pid === null || typeof lease.pid === "number" && Number.isSafeInteger(lease.pid) && lease.pid > 0) && (lease.birthToken === null || typeof lease.birthToken === "string") && typeof lease.processGroup === "boolean";
353
+ }
354
+ function ownerIsAlive(owner) {
355
+ if (owner.host !== hostname()) return true;
356
+ const snapshot = processSnapshot(owner.pid);
357
+ if (!snapshot.alive) return false;
358
+ if (owner.birthToken === null || snapshot.birthToken === null) return true;
359
+ return owner.birthToken === snapshot.birthToken;
360
+ }
361
+ function waitForProcessExit(pid, birthToken) {
362
+ const deadline = Date.now() + PROCESS_EXIT_GRACE_MS;
363
+ const sleeper = new Int32Array(new SharedArrayBuffer(4));
364
+ while (Date.now() < deadline) {
365
+ const snapshot = processSnapshot(pid);
366
+ if (!snapshot.alive || snapshot.birthToken !== birthToken) return true;
367
+ Atomics.wait(sleeper, 0, 0, PROCESS_POLL_MS);
368
+ }
369
+ const finalSnapshot = processSnapshot(pid);
370
+ return !finalSnapshot.alive || finalSnapshot.birthToken !== birthToken;
371
+ }
372
+ function terminateRunLease(lease) {
373
+ if (lease.pid === null) return true;
374
+ const snapshot = processSnapshot(lease.pid);
375
+ if (!snapshot.alive) return true;
376
+ if (lease.birthToken === null || snapshot.birthToken === null) return false;
377
+ if (lease.birthToken !== snapshot.birthToken) return true;
378
+ const target = lease.processGroup && process.platform !== "win32" ? -lease.pid : lease.pid;
379
+ try {
380
+ process.kill(target, "SIGTERM");
381
+ } catch (err) {
382
+ if (err.code === "ESRCH") return true;
383
+ return false;
384
+ }
385
+ if (waitForProcessExit(lease.pid, lease.birthToken)) return true;
386
+ try {
387
+ process.kill(target, "SIGKILL");
388
+ } catch (err) {
389
+ if (err.code === "ESRCH") return true;
390
+ return false;
391
+ }
392
+ return waitForProcessExit(lease.pid, lease.birthToken);
393
+ }
394
+ function validateGroup(group) {
395
+ if (!SAFE_GROUP.test(group) || group === "." || group === "..") {
396
+ throw new Error(`invalid compete group '${group}'`);
397
+ }
398
+ }
399
+ function canonicalRoot(root) {
400
+ return realpathSync2(root);
401
+ }
402
+ function competeParent(root) {
403
+ return join3(root, ...COMPETE_PARENT_SEGMENTS);
404
+ }
405
+ function groupDirectory(root, group) {
406
+ validateGroup(group);
407
+ return join3(competeParent(root), group);
408
+ }
409
+ function manifestPath(directory) {
410
+ return join3(directory, COMPETE_MANIFEST_FILE);
411
+ }
412
+ function isPlainDirectory(path) {
413
+ try {
414
+ const stat = lstatSync(path);
415
+ return stat.isDirectory() && !stat.isSymbolicLink();
416
+ } catch {
417
+ return false;
418
+ }
419
+ }
420
+ function isCanonicalDirectoryAt(path) {
421
+ if (!isPlainDirectory(path)) return false;
422
+ try {
423
+ return relative2(realpathSync2(path), resolve2(path)) === "";
424
+ } catch {
425
+ return false;
426
+ }
427
+ }
428
+ function isCanonicalPathInside(parent, candidate) {
429
+ return isCanonicalWorktreePathInside(parent, candidate);
430
+ }
431
+ function manifestFromUnknown(value) {
432
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return null;
433
+ const manifest = value;
434
+ if (manifest.version !== 2 || manifest.kind !== COMPETE_MANIFEST_KIND && manifest.kind !== LEGACY_COMPETE_MANIFEST_KIND || typeof manifest.root !== "string" || typeof manifest.group !== "string" || typeof manifest.token !== "string" || manifest.token.length === 0 || manifest.state !== "active" && manifest.state !== "cleanup-ready" && manifest.state !== "winner-preserved" || typeof manifest.createdAt !== "string" || typeof manifest.updatedAt !== "string") {
435
+ return null;
436
+ }
437
+ if (!validProcessLease(manifest.owner) || !Array.isArray(manifest.runs) || !manifest.runs.every(validRunLease) || new Set(manifest.runs.map((run) => run.runId)).size !== manifest.runs.length) {
438
+ return null;
439
+ }
440
+ if (manifest.winnerIndex !== void 0 && (typeof manifest.winnerIndex !== "number" || !Number.isInteger(manifest.winnerIndex) || manifest.winnerIndex < 1)) {
441
+ return null;
442
+ }
443
+ return manifest;
444
+ }
445
+ function readManifest(root, group) {
446
+ const canonical = canonicalRoot(root);
447
+ const directory = groupDirectory(canonical, group);
448
+ if (!isCanonicalDirectoryAt(directory)) return null;
449
+ try {
450
+ const parsed = JSON.parse(readFileSync2(manifestPath(directory), "utf8"));
451
+ const manifest = manifestFromUnknown(parsed);
452
+ if (manifest === null || manifest.root !== canonical || manifest.group !== group) return null;
453
+ return manifest;
454
+ } catch {
455
+ return null;
456
+ }
457
+ }
458
+ function ownershipFromManifest(manifest) {
459
+ return {
460
+ root: manifest.root,
461
+ group: manifest.group,
462
+ directory: groupDirectory(manifest.root, manifest.group),
463
+ token: manifest.token,
464
+ state: manifest.state,
465
+ ...manifest.winnerIndex !== void 0 ? { winnerIndex: manifest.winnerIndex } : {}
466
+ };
467
+ }
468
+ function assertOwnership2(ownership) {
469
+ const manifest = readManifest(ownership.root, ownership.group);
470
+ if (manifest === null || manifest.token !== ownership.token) {
471
+ throw new Error(`compete group ${ownership.group} has no matching ownership manifest; refusing cleanup`);
472
+ }
473
+ if (resolve2(ownership.directory) !== resolve2(groupDirectory(manifest.root, manifest.group))) {
474
+ throw new Error(`compete group ${ownership.group} ownership path changed; refusing cleanup`);
475
+ }
476
+ return manifest;
477
+ }
478
+ function replaceManifest(ownership, manifest) {
479
+ assertOwnership2(ownership);
480
+ const destination = manifestPath(ownership.directory);
481
+ const temporary = `${destination}.${randomBytes2(6).toString("hex")}.tmp`;
482
+ try {
483
+ writeFileSync2(temporary, `${JSON.stringify(manifest, null, 2)}
484
+ `, { encoding: "utf8", flag: "wx" });
485
+ renameSync(temporary, destination);
486
+ } finally {
487
+ if (existsSync2(temporary)) rmSync3(temporary, { force: true });
488
+ }
489
+ }
490
+ function isGitRepository(root) {
491
+ try {
492
+ return git2(root, ["rev-parse", "--is-inside-work-tree"]) === "true";
493
+ } catch {
494
+ return false;
495
+ }
496
+ }
497
+ function competeBranch(group, index, legacy = false) {
498
+ validateGroup(group);
499
+ if (!Number.isInteger(index) || index < 1) throw new Error(`invalid compete candidate index ${index}`);
500
+ return `${legacy ? "clio" : "clio-coder"}/compete/${group}/${index}`;
501
+ }
502
+ function competeBranchMatches(branch, group, index) {
503
+ return branch === competeBranch(group, index) || branch === competeBranch(group, index, true);
504
+ }
505
+ function claimCompeteGroup(root, group) {
506
+ const canonical = canonicalRoot(root);
507
+ const directory = groupDirectory(canonical, group);
508
+ const parent = competeParent(canonical);
509
+ mkdirSync2(parent, { recursive: true });
510
+ if (!isCanonicalDirectoryAt(parent)) {
511
+ throw new Error(`compete parent ${parent} is not a canonical local directory`);
512
+ }
513
+ mkdirSync2(directory);
514
+ if (!isCanonicalDirectoryAt(directory)) {
515
+ throw new Error(`compete group directory ${directory} is not canonical`);
516
+ }
517
+ const now = (/* @__PURE__ */ new Date()).toISOString();
518
+ const manifest = {
519
+ version: 2,
520
+ kind: COMPETE_MANIFEST_KIND,
521
+ root: canonical,
522
+ group,
523
+ token: randomBytes2(16).toString("hex"),
524
+ state: "active",
525
+ createdAt: now,
526
+ updatedAt: now,
527
+ owner: currentProcessLease(),
528
+ runs: []
529
+ };
530
+ try {
531
+ writeFileSync2(manifestPath(directory), `${JSON.stringify(manifest, null, 2)}
532
+ `, {
533
+ encoding: "utf8",
534
+ flag: "wx"
535
+ });
536
+ } catch (err) {
537
+ try {
538
+ rmdirSync(directory);
539
+ } catch {
540
+ }
541
+ throw err;
542
+ }
543
+ return ownershipFromManifest(manifest);
544
+ }
545
+ function loadCompeteGroup(root, group) {
546
+ validateGroup(group);
547
+ const manifest = readManifest(root, group);
548
+ return manifest === null ? null : ownershipFromManifest(manifest);
549
+ }
550
+ function registerCompeteGroupRun(ownership, admission) {
551
+ const current = assertOwnership2(ownership);
552
+ if (current.state !== "active") {
553
+ throw new Error(`compete group ${ownership.group} is ${current.state}; refusing new run ${admission.runId}`);
554
+ }
555
+ if (admission.runId.length === 0) throw new Error("worktree transaction run id cannot be empty");
556
+ if (admission.pid !== null && (!Number.isSafeInteger(admission.pid) || admission.pid <= 0)) {
557
+ throw new Error(`worktree transaction run ${admission.runId} has invalid pid ${admission.pid}`);
558
+ }
559
+ const lease = {
560
+ runId: admission.runId,
561
+ pid: admission.pid,
562
+ birthToken: admission.pid === null ? null : processSnapshot(admission.pid).birthToken,
563
+ processGroup: admission.runtimeKind === "acp-delegation" && process.platform !== "win32"
564
+ };
565
+ const next = {
566
+ ...current,
567
+ runs: [...current.runs.filter((run) => run.runId !== admission.runId), lease],
568
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
569
+ };
570
+ replaceManifest(ownership, next);
571
+ }
572
+ function settleCompeteGroupRun(ownership, runId) {
573
+ const current = assertOwnership2(ownership);
574
+ if (current.state !== "active") return;
575
+ if (!current.runs.some((run) => run.runId === runId)) return;
576
+ const next = {
577
+ ...current,
578
+ runs: current.runs.filter((run) => run.runId !== runId),
579
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
580
+ };
581
+ replaceManifest(ownership, next);
582
+ }
583
+ function markCompeteGroupCleanupReady(ownership) {
584
+ const current = assertOwnership2(ownership);
585
+ const next = {
586
+ ...current,
587
+ state: "cleanup-ready",
588
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
589
+ };
590
+ Reflect.deleteProperty(next, "winnerIndex");
591
+ replaceManifest(ownership, next);
592
+ return ownershipFromManifest(next);
593
+ }
594
+ function markCompeteGroupWinnerPreserved(ownership, winnerIndex) {
595
+ competeBranch(ownership.group, winnerIndex);
596
+ const current = assertOwnership2(ownership);
597
+ const next = {
598
+ ...current,
599
+ state: "winner-preserved",
600
+ winnerIndex,
601
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
602
+ };
603
+ replaceManifest(ownership, next);
604
+ return ownershipFromManifest(next);
605
+ }
606
+ function createCandidateWorktree(ownership, index, baseline) {
607
+ assertOwnership2(ownership);
608
+ const branch = competeBranch(ownership.group, index);
609
+ const path = join3(ownership.directory, `candidate-${index}`);
610
+ if (!isCanonicalPathInside(ownership.directory, path)) {
611
+ throw new Error(`candidate ${index} path escapes compete group ${ownership.group}`);
612
+ }
613
+ git2(ownership.root, ["worktree", "add", "-b", branch, path, baseline]);
614
+ return { index, branch, path };
615
+ }
616
+ async function createCandidateWorktreeMapped(ownership, index, baseline, mux) {
617
+ assertOwnership2(ownership);
618
+ const branch = competeBranch(ownership.group, index);
619
+ const path = join3(ownership.directory, `candidate-${index}`);
620
+ if (!isCanonicalPathInside(ownership.directory, path)) {
621
+ throw new Error(`candidate ${index} path escapes compete group ${ownership.group}`);
622
+ }
623
+ let fallback = "mux-unavailable";
624
+ if (mux?.available()) {
625
+ const created = await mux.worktreeCreate({
626
+ cwd: ownership.root,
627
+ branch,
628
+ base: baseline,
629
+ path,
630
+ label: `clio-coder compete ${ownership.group} candidate ${index}`,
631
+ focus: false
632
+ }).catch(() => null);
633
+ if (created !== null) {
634
+ if (resolve2(created.worktree.path) !== resolve2(path) || created.worktree.branch !== branch) {
635
+ throw new Error(`herdr created candidate ${index} at an unexpected path or branch`);
636
+ }
637
+ return {
638
+ index,
639
+ branch,
640
+ path,
641
+ provenance: { backend: "herdr", path, branch, workspaceId: created.workspaceId }
642
+ };
643
+ }
644
+ fallback = "mux-operation-failed";
645
+ }
646
+ const native = createCandidateWorktree(ownership, index, baseline);
647
+ return { ...native, provenance: { backend: "native", path, branch, fallback } };
648
+ }
649
+ function commitCandidateWork(worktree, message) {
650
+ return commitWorktreePath(worktree.path, COMPETE_COMMIT_IDENTITY, message, [
651
+ ".clio-coder/codewiki.json",
652
+ ".clio-coder/state.json"
653
+ ]);
654
+ }
655
+ function candidateDiffStat(root, branch) {
656
+ return worktreeBranchDiffStat(root, branch);
657
+ }
658
+ function protectedPathsChangedByCompeteBranch(root, branch, protectedPaths) {
659
+ return protectedPathsChangedByWorktreeBranch(root, branch, protectedPaths);
660
+ }
661
+ function registeredWorktreePaths(root) {
662
+ const listing = git2(root, ["worktree", "list", "--porcelain", "-z"]);
663
+ return listing.split("\0").filter((entry) => entry.startsWith("worktree ")).map((entry) => entry.slice("worktree ".length)).filter((path) => path !== void 0 && path.length > 0);
664
+ }
665
+ function exactGroupBranches(root, group) {
666
+ return git2(root, ["branch", "--list", "--format=%(refname:short)"]).split("\n").filter((branch) => {
667
+ const parts = branch.split("/");
668
+ return parts.length === 4 && (parts[0] === "clio-coder" || parts[0] === "clio") && parts[1] === "compete" && parts[2] === group && /^\d+$/.test(parts[3] ?? "");
669
+ });
670
+ }
671
+ function competeBranchForCandidate(root, group, index) {
672
+ const branches = exactGroupBranches(root, group);
673
+ return branches.find((branch) => branch === competeBranch(group, index)) ?? branches.find((branch) => branch === competeBranch(group, index, true)) ?? competeBranch(group, index);
674
+ }
675
+ function removeRegisteredWorktree(root, path) {
676
+ try {
677
+ git2(root, ["worktree", "remove", "--force", path]);
678
+ } catch {
679
+ if (existsSync2(path)) rmSync3(path, { recursive: true, force: true });
680
+ git2(root, ["worktree", "prune"]);
681
+ }
682
+ }
683
+ function preserveCandidateWorktree(ownership, path, index) {
684
+ if (resolve2(path) !== resolve2(join3(ownership.directory, `candidate-${index}`)) || !isCanonicalPathInside(ownership.directory, path))
685
+ throw new Error("candidate checkpoint path is outside its proven group");
686
+ const ref = workspaceCheckpointRef("compete", `${ownership.group}:${index}`);
687
+ if (existsSync2(path)) captureWorkspaceCheckpoint(path, ref, `Compete ${ownership.group} candidate ${index}`);
688
+ else {
689
+ const branch = competeBranchForCandidate(ownership.root, ownership.group, index);
690
+ if (exactGroupBranches(ownership.root, ownership.group).includes(branch)) {
691
+ try {
692
+ git2(ownership.root, ["rev-parse", "--verify", ref]);
693
+ } catch {
694
+ git2(ownership.root, ["update-ref", ref, branch, ""]);
695
+ }
696
+ }
697
+ }
698
+ }
699
+ function removeCandidateWorktree(ownership, worktree, deleteBranch) {
700
+ assertOwnership2(ownership);
701
+ const expectedPath = join3(ownership.directory, `candidate-${worktree.index}`);
702
+ if (resolve2(worktree.path) !== resolve2(expectedPath) || !competeBranchMatches(worktree.branch, ownership.group, worktree.index) || !isCanonicalPathInside(ownership.directory, worktree.path)) {
703
+ throw new Error(`candidate ${worktree.index} does not belong to compete group ${ownership.group}`);
704
+ }
705
+ preserveCandidateWorktree(ownership, worktree.path, worktree.index);
706
+ removeRegisteredWorktree(ownership.root, worktree.path);
707
+ if (deleteBranch && exactGroupBranches(ownership.root, ownership.group).includes(worktree.branch)) {
708
+ git2(ownership.root, ["branch", "-D", worktree.branch]);
709
+ }
710
+ const stillRegistered = registeredWorktreePaths(ownership.root).some(
711
+ (path) => resolve2(path) === resolve2(worktree.path)
712
+ );
713
+ const branchRemains = deleteBranch && exactGroupBranches(ownership.root, ownership.group).includes(worktree.branch);
714
+ if (stillRegistered || existsSync2(worktree.path) || branchRemains) {
715
+ throw new Error(`failed to remove candidate ${worktree.index} from compete group ${ownership.group}`);
716
+ }
717
+ }
718
+ async function removeCandidateWorktreeMapped(ownership, worktree, deleteBranch, mux) {
719
+ assertOwnership2(ownership);
720
+ preserveCandidateWorktree(ownership, worktree.path, worktree.index);
721
+ const workspaceId = worktree.provenance?.backend === "herdr" ? worktree.provenance.workspaceId : void 0;
722
+ if (workspaceId && mux?.available()) {
723
+ await mux.worktreeRemove(workspaceId, { force: true }).catch(() => false);
724
+ }
725
+ removeCandidateWorktree(ownership, worktree, deleteBranch);
726
+ }
727
+ function mergeWinnerBranch(root, branch) {
728
+ return mergeWorktreeBranch(root, branch, COMPETE_COMMIT_IDENTITY);
729
+ }
730
+ function cleanupWorktreeGroup(ownership) {
731
+ assertOwnership2(ownership);
732
+ for (const path of registeredWorktreePaths(ownership.root)) {
733
+ if (!isCanonicalPathInside(ownership.directory, path)) continue;
734
+ const index = Number.parseInt(path.split(/[\\/]/).at(-1)?.replace("candidate-", "") ?? "", 10);
735
+ if (Number.isInteger(index)) preserveCandidateWorktree(ownership, path, index);
736
+ removeRegisteredWorktree(ownership.root, path);
737
+ }
738
+ git2(ownership.root, ["worktree", "prune"]);
739
+ const registeredRemain = registeredWorktreePaths(ownership.root).filter(
740
+ (path) => isCanonicalPathInside(ownership.directory, path)
741
+ );
742
+ if (registeredRemain.length > 0) {
743
+ throw new Error(
744
+ `failed to remove ${registeredRemain.length} registered worktree(s) for compete group ${ownership.group}`
745
+ );
746
+ }
747
+ for (const branch of exactGroupBranches(ownership.root, ownership.group)) {
748
+ const index = Number.parseInt(branch.split("/").at(-1) ?? "", 10);
749
+ const ref = workspaceCheckpointRef("compete", `${ownership.group}:${index}`);
750
+ try {
751
+ git2(ownership.root, ["rev-parse", "--verify", ref]);
752
+ } catch {
753
+ git2(ownership.root, ["update-ref", ref, branch, ""]);
754
+ }
755
+ git2(ownership.root, ["branch", "-D", branch]);
756
+ }
757
+ const branchesRemain = exactGroupBranches(ownership.root, ownership.group);
758
+ if (branchesRemain.length > 0) {
759
+ throw new Error(`failed to remove ${branchesRemain.length} branch(es) for compete group ${ownership.group}`);
760
+ }
761
+ assertOwnership2(ownership);
762
+ for (const entry of readdirSync(ownership.directory)) {
763
+ if (entry === COMPETE_MANIFEST_FILE) continue;
764
+ rmSync3(join3(ownership.directory, entry), { recursive: true, force: true });
765
+ }
766
+ assertOwnership2(ownership);
767
+ const unexpected = readdirSync(ownership.directory).filter((entry) => entry !== COMPETE_MANIFEST_FILE);
768
+ if (unexpected.length > 0) {
769
+ throw new Error(`compete group ${ownership.group} changed during cleanup; ownership is preserved`);
770
+ }
771
+ unlinkSync(manifestPath(ownership.directory));
772
+ rmdirSync(ownership.directory);
773
+ try {
774
+ rmdirSync(competeParent(ownership.root));
775
+ } catch {
776
+ }
777
+ }
778
+ function cleanupCompeteGroup(ownership) {
779
+ cleanupWorktreeGroup(ownership);
780
+ }
781
+ function settleRecoveredCompeteDecision(root, group, winnerIndex) {
782
+ let ownership = loadCompeteGroup(root, group);
783
+ if (ownership === null) return null;
784
+ if (ownership.state === "cleanup-ready") {
785
+ cleanupWorktreeGroup(ownership);
786
+ return null;
787
+ }
788
+ if (ownership.state === "winner-preserved") {
789
+ if (winnerIndex !== null && ownership.winnerIndex === winnerIndex) return ownership;
790
+ throw new Error(`compete group ${group} was already preserved with a different winner`);
791
+ }
792
+ const manifest = assertOwnership2(ownership);
793
+ if (ownerIsAlive(manifest.owner)) {
794
+ throw new Error(`compete group ${group} still has a live coordinator; refusing restart settlement`);
795
+ }
796
+ const unterminated = manifest.runs.filter((run) => !terminateRunLease(run));
797
+ if (unterminated.length > 0) {
798
+ throw new Error(`could not safely terminate ${unterminated.length} leased compete worker(s) for ${group}`);
799
+ }
800
+ if (winnerIndex === null) {
801
+ ownership = markCompeteGroupCleanupReady(ownership);
802
+ cleanupWorktreeGroup(ownership);
803
+ return null;
804
+ }
805
+ const branches = exactGroupBranches(ownership.root, group);
806
+ const winnerBranch = competeBranchForCandidate(ownership.root, group, winnerIndex);
807
+ const winnerPath = join3(ownership.directory, `candidate-${winnerIndex}`);
808
+ if (!branches.includes(winnerBranch) || !registeredWorktreePaths(ownership.root).some((path) => resolve2(path) === resolve2(winnerPath))) {
809
+ throw new Error(`recovered winner ${winnerBranch} has no intact candidate worktree`);
810
+ }
811
+ ownership = markCompeteGroupWinnerPreserved(ownership, winnerIndex);
812
+ for (const branch of branches) {
813
+ const index = Number.parseInt(branch.split("/").at(-1) ?? "", 10);
814
+ if (index === winnerIndex) continue;
815
+ removeCandidateWorktree(ownership, { index, branch, path: join3(ownership.directory, `candidate-${index}`) }, true);
816
+ }
817
+ return ownership;
818
+ }
819
+ function recoverCleanupReadyCompeteGroups(root, options = {}) {
820
+ const canonical = canonicalRoot(root);
821
+ const parent = competeParent(canonical);
822
+ const result = { cleaned: [], preserved: [], failed: [] };
823
+ if (!isPlainDirectory(parent)) return result;
824
+ for (const entry of readdirSync(parent, { withFileTypes: true })) {
825
+ if (!entry.isDirectory() || entry.isSymbolicLink()) {
826
+ result.preserved.push(entry.name);
827
+ continue;
828
+ }
829
+ let ownership = null;
830
+ let manifest = null;
831
+ try {
832
+ manifest = readManifest(canonical, entry.name);
833
+ ownership = manifest === null ? null : ownershipFromManifest(manifest);
834
+ } catch {
835
+ }
836
+ if (ownership === null || manifest === null) {
837
+ result.preserved.push(entry.name);
838
+ continue;
839
+ }
840
+ if (ownership.state === "winner-preserved") {
841
+ result.preserved.push(entry.name);
842
+ continue;
843
+ }
844
+ if (ownership.state === "active") {
845
+ if (ownerIsAlive(manifest.owner)) {
846
+ result.preserved.push(entry.name);
847
+ continue;
848
+ }
849
+ const unterminated = manifest.runs.filter((run) => !terminateRunLease(run));
850
+ if (unterminated.length > 0) {
851
+ result.failed.push({
852
+ group: entry.name,
853
+ message: `could not safely terminate ${unterminated.length} leased compete worker(s)`
854
+ });
855
+ continue;
856
+ }
857
+ if (options.preserveAllActive === true || options.preserveActiveGroups?.has(entry.name) === true) {
858
+ result.preserved.push(entry.name);
859
+ continue;
860
+ }
861
+ try {
862
+ ownership = markCompeteGroupCleanupReady(ownership);
863
+ } catch (err) {
864
+ result.failed.push({ group: entry.name, message: errorMessage(err) });
865
+ continue;
866
+ }
867
+ }
868
+ try {
869
+ cleanupWorktreeGroup(ownership);
870
+ result.cleaned.push(entry.name);
871
+ } catch (err) {
872
+ result.failed.push({ group: entry.name, message: errorMessage(err) });
873
+ }
874
+ }
875
+ return result;
876
+ }
877
+
878
+ // src/domains/dispatch/write-boundary.ts
879
+ init_esm_shims();
880
+ import { execFileSync as execFileSync4 } from "node:child_process";
881
+ import { createHash as createHash3 } from "node:crypto";
882
+ import { existsSync as existsSync3, lstatSync as lstatSync2, mkdirSync as mkdirSync3, readlinkSync, realpathSync as realpathSync3, rmSync as rmSync4, writeFileSync as writeFileSync3 } from "node:fs";
883
+ import { dirname, isAbsolute as isAbsolute2, join as join4, relative as relative3, resolve as resolve3, sep as sep2 } from "node:path";
884
+ var WRITE_BOUNDARY_VIOLATION_REASON = "writes_boundary_violation";
885
+ var ABSENT = "absent";
886
+ var GIT_TIMEOUT_MS = 3e4;
887
+ function git3(root, args, input) {
888
+ return execFileSync4("git", ["-C", root, ...args], {
889
+ encoding: "utf8",
890
+ stdio: ["pipe", "pipe", "pipe"],
891
+ timeout: GIT_TIMEOUT_MS,
892
+ maxBuffer: 64 * 1024 * 1024,
893
+ ...input === void 0 ? {} : { input }
894
+ });
895
+ }
896
+ function gitBytes2(root, args) {
897
+ return execFileSync4("git", ["-C", root, ...args], {
898
+ stdio: ["ignore", "pipe", "pipe"],
899
+ timeout: GIT_TIMEOUT_MS,
900
+ maxBuffer: 256 * 1024 * 1024
901
+ });
902
+ }
903
+ function dirtyPaths(root) {
904
+ const raw = git3(root, ["status", "--porcelain=v1", "-z", "-uall", "--no-renames"]);
905
+ const journal = repoRelative(root, clioStateDir());
906
+ return raw.split("\0").filter((entry) => entry.length > 3).map((entry) => entry.slice(3)).filter((path) => journal === null || !(path === journal || path.startsWith(`${journal}/`)));
907
+ }
908
+ function contentTokens(root, paths) {
909
+ const tokens = /* @__PURE__ */ new Map();
910
+ const hashable = [];
911
+ for (const path of paths) {
912
+ const full = join4(root, path);
913
+ let stat;
914
+ try {
915
+ stat = lstatSync2(full);
916
+ } catch {
917
+ tokens.set(path, ABSENT);
918
+ continue;
919
+ }
920
+ if (stat.isSymbolicLink()) {
921
+ tokens.set(path, `link:${readlinkSync(full)}`);
922
+ continue;
923
+ }
924
+ if (stat.isDirectory()) {
925
+ tokens.set(path, "dir");
926
+ continue;
927
+ }
928
+ if (!stat.isFile()) {
929
+ tokens.set(path, `special:${stat.mode}`);
930
+ continue;
931
+ }
932
+ if (path.includes("\n")) {
933
+ tokens.set(path, `blob:${git3(root, ["hash-object", "--", full]).trim()}`);
934
+ continue;
935
+ }
936
+ hashable.push(path);
937
+ }
938
+ if (hashable.length > 0) {
939
+ const hashes = git3(root, ["hash-object", "--stdin-paths"], `${hashable.map((path) => join4(root, path)).join("\n")}
940
+ `).split("\n").filter((line) => line.length > 0);
941
+ hashable.forEach((path, index) => {
942
+ tokens.set(path, `blob:${hashes[index] ?? "unknown"}`);
943
+ });
944
+ }
945
+ return tokens;
946
+ }
947
+ function baselineTokens(root, head, paths) {
948
+ const tokens = /* @__PURE__ */ new Map();
949
+ if (paths.length === 0) return tokens;
950
+ const query = paths.map((path) => `${head}:${path}`).join("\n");
951
+ const answered = git3(root, ["cat-file", "--batch-check=%(objectname) %(objecttype)"], `${query}
952
+ `).split("\n").filter((line) => line.length > 0);
953
+ paths.forEach((path, index) => {
954
+ const line = answered[index] ?? "";
955
+ const [objectName, objectType] = line.split(" ");
956
+ if (objectType === "blob" && objectName !== void 0) tokens.set(path, `blob:${objectName}`);
957
+ else if (objectType === "tree") tokens.set(path, "dir");
958
+ else tokens.set(path, ABSENT);
959
+ });
960
+ return tokens;
961
+ }
962
+ function captureWorkspaceSnapshot(root) {
963
+ const absolute = resolve3(root);
964
+ if (!isGitRepository(absolute)) {
965
+ throw new Error(
966
+ `write boundary: ${absolute} is not a git repository, so a declared boundary cannot be verified (enforcement fails closed)`
967
+ );
968
+ }
969
+ const head = git3(absolute, ["rev-parse", "HEAD"]).trim();
970
+ const paths = dirtyPaths(absolute);
971
+ return { root: absolute, head, entries: contentTokens(absolute, paths), capturedAt: (/* @__PURE__ */ new Date()).toISOString() };
972
+ }
973
+ function diffWorkspace(snapshot) {
974
+ const candidates = [.../* @__PURE__ */ new Set([...snapshot.entries.keys(), ...dirtyPaths(snapshot.root)])].sort();
975
+ if (candidates.length === 0) return [];
976
+ const unknownBefore = candidates.filter((path) => !snapshot.entries.has(path));
977
+ const baseline = baselineTokens(snapshot.root, snapshot.head, unknownBefore);
978
+ const now = contentTokens(snapshot.root, candidates);
979
+ const changes = [];
980
+ for (const path of candidates) {
981
+ const before = snapshot.entries.get(path) ?? baseline.get(path) ?? ABSENT;
982
+ const after = now.get(path) ?? ABSENT;
983
+ if (before !== after) changes.push({ path, before, after });
984
+ }
985
+ return changes;
986
+ }
987
+ function describeWriteBoundaryAttributionDowngrade(downgrade) {
988
+ if (downgrade.reason === "opaque_tool_succeeded") {
989
+ const tool = downgrade.tool ?? "unknown";
990
+ const call = downgrade.toolCallId === null ? "" : ` (call ${downgrade.toolCallId})`;
991
+ return `a successful '${tool}' call${call} can write paths its arguments do not name`;
992
+ }
993
+ if (downgrade.reason === "incomplete_tool_telemetry") {
994
+ return downgrade.runId === null ? "tool telemetry was incomplete" : `run '${downgrade.runId}' reported incomplete tool telemetry`;
995
+ }
996
+ if (downgrade.reason === "code_step_untracked") {
997
+ return downgrade.stepId === null ? "a code step ran through the untracked command runner" : `code step '${downgrade.stepId}' ran through the untracked command runner`;
998
+ }
999
+ return downgrade.stepId === null ? "no usable write record was available" : `step '${downgrade.stepId}' supplied no usable write record`;
1000
+ }
1001
+ function canonicalVerdict(verdict) {
1002
+ return JSON.stringify(verdict);
1003
+ }
1004
+ function rollbackPath(snapshot, change) {
1005
+ const full = join4(snapshot.root, change.path);
1006
+ if (snapshot.entries.has(change.path)) {
1007
+ return {
1008
+ unrecoverable: {
1009
+ path: change.path,
1010
+ reason: `path was already modified or untracked before the step, so its prior content is not recorded anywhere`
1011
+ }
1012
+ };
1013
+ }
1014
+ if (change.before === ABSENT) {
1015
+ try {
1016
+ rmSync4(full, { force: true, recursive: false });
1017
+ } catch (error) {
1018
+ return {
1019
+ unrecoverable: { path: change.path, reason: `could not remove: ${error.message}` }
1020
+ };
1021
+ }
1022
+ return { rolledBack: { path: change.path, action: "removed", restoredFrom: "did not exist at baseline" } };
1023
+ }
1024
+ if (!change.before.startsWith("blob:")) {
1025
+ return {
1026
+ unrecoverable: {
1027
+ path: change.path,
1028
+ reason: `baseline state '${change.before}' is not a regular file and is not restorable in place`
1029
+ }
1030
+ };
1031
+ }
1032
+ try {
1033
+ const content = gitBytes2(snapshot.root, ["cat-file", "blob", `${snapshot.head}:${change.path}`]);
1034
+ mkdirSync3(dirname(full), { recursive: true });
1035
+ writeFileSync3(full, content);
1036
+ } catch (error) {
1037
+ return {
1038
+ unrecoverable: { path: change.path, reason: `could not restore from baseline: ${error.message}` }
1039
+ };
1040
+ }
1041
+ return { rolledBack: { path: change.path, action: "restored", restoredFrom: `${snapshot.head}:${change.path}` } };
1042
+ }
1043
+ function withinRecordedWrite(recorded, path) {
1044
+ if (recorded.has(path)) return true;
1045
+ for (const target of recorded) {
1046
+ if (path.startsWith(`${target}/`)) return true;
1047
+ }
1048
+ return false;
1049
+ }
1050
+ function enforceWriteBoundary(input) {
1051
+ const allow = normalizeWriteBoundary(input.allow);
1052
+ const changes = diffWorkspace(input.snapshot);
1053
+ const outside = changes.filter((change) => !writeBoundaryCovers(allow, change.path));
1054
+ const attributionComplete = input.attribution?.complete === true;
1055
+ const attributionDowngrades = attributionComplete ? [] : input.attribution?.downgrades !== void 0 && input.attribution.downgrades.length > 0 ? input.attribution.downgrades.map((entry) => ({ ...entry })) : [
1056
+ {
1057
+ reason: "write_record_unavailable",
1058
+ tool: null,
1059
+ toolCallId: null,
1060
+ runId: null,
1061
+ stepId: input.stepIds.length === 1 ? input.stepIds[0] ?? null : null
1062
+ }
1063
+ ];
1064
+ const recorded = /* @__PURE__ */ new Set();
1065
+ for (const target of input.attribution?.recorded ?? []) {
1066
+ const relativeTarget = repoRelative(input.snapshot.root, target);
1067
+ if (relativeTarget !== null) recorded.add(relativeTarget);
1068
+ }
1069
+ const violations = attributionComplete ? outside.filter((change) => withinRecordedWrite(recorded, change.path)) : outside;
1070
+ const unattributed = attributionComplete ? outside.filter((change) => !withinRecordedWrite(recorded, change.path)) : [];
1071
+ const rolledBack = [];
1072
+ const unrecoverable = [];
1073
+ for (const change of violations) {
1074
+ const outcome = rollbackPath(input.snapshot, change);
1075
+ if (outcome.rolledBack !== void 0) rolledBack.push(outcome.rolledBack);
1076
+ if (outcome.unrecoverable !== void 0) unrecoverable.push(outcome.unrecoverable);
1077
+ }
1078
+ const status = violations.length === 0 ? "clean" : unrecoverable.length === 0 ? "rolled-back" : "rollback-incomplete";
1079
+ const who = input.stepIds.length === 1 ? `step '${input.stepIds[0]}'` : `steps ${input.stepIds.map((id) => `'${id}'`).join(", ")} ran concurrently in one checkout, so the write cannot be attributed to one of them`;
1080
+ const violationDetail = violations.length === 0 ? [] : [
1081
+ `${who} wrote outside its declared boundary.`,
1082
+ `Unauthorized paths: ${violations.map((change) => change.path).join(", ")}.`,
1083
+ `Declared writes: ${describeWriteBoundary(allow)}.`,
1084
+ status === "rolled-back" ? "Those paths were rolled back to the baseline commit." : `Rollback is incomplete; the working tree is left as the step made it. Unrestorable: ${unrecoverable.map((entry) => `${entry.path} (${entry.reason})`).join("; ")}.`,
1085
+ attributionComplete ? "Each was blamed on this window because a run in it recorded writing that path." : `Attribution was incomplete because ${attributionDowngrades.map(describeWriteBoundaryAttributionDowngrade).join("; ")}, so every change outside the declaration was blamed on this window.`,
1086
+ "If the change was legitimate, widen the step's `writes:` declaration to cover it."
1087
+ ];
1088
+ const concurrentDetail = unattributed.length === 0 ? [] : [
1089
+ `Concurrent changes were seen in this window that no run in it recorded writing: ${unattributed.map((change) => change.path).join(", ")}.`,
1090
+ "They were left untouched, because a path this window did not write is not this window's to restore."
1091
+ ];
1092
+ const detail = [...violationDetail, ...concurrentDetail];
1093
+ const body = {
1094
+ version: 1,
1095
+ window: input.window,
1096
+ stepIds: [...input.stepIds],
1097
+ allow,
1098
+ baselineHead: input.snapshot.head,
1099
+ capturedAt: input.snapshot.capturedAt,
1100
+ checkedAt: (/* @__PURE__ */ new Date()).toISOString(),
1101
+ changedPaths: changes.map((change) => change.path),
1102
+ violations: violations.map((change) => change.path),
1103
+ unattributed: unattributed.map((change) => change.path),
1104
+ attributionComplete,
1105
+ attributionDowngrades,
1106
+ rolledBack,
1107
+ unrecoverable,
1108
+ status,
1109
+ reason: violations.length === 0 ? null : WRITE_BOUNDARY_VIOLATION_REASON,
1110
+ detail: detail.length === 0 ? null : detail.join(" ")
1111
+ };
1112
+ return { ...body, digest: createHash3("sha256").update(canonicalVerdict(body), "utf8").digest("hex") };
1113
+ }
1114
+ function assertWriteBoundaryInsideRoot(root, allow) {
1115
+ const realRoot = realpathSync3(resolve3(root));
1116
+ for (const entry of allow) {
1117
+ const relativeEntry = entry.endsWith("/") ? entry.slice(0, -1) : entry;
1118
+ let probe = join4(realRoot, relativeEntry);
1119
+ while (probe !== realRoot && !existsSync3(probe)) probe = dirname(probe);
1120
+ const resolved = realpathSync3(probe);
1121
+ if (resolved !== realRoot && !pathBoundaryEntryCovers(asDirectoryPathBoundary(realRoot), resolved)) {
1122
+ throw new Error(`write boundary: entry '${entry}' resolves to ${resolved}, outside the workspace at ${realRoot}`);
1123
+ }
1124
+ }
1125
+ }
1126
+ function assertWriteBoundaryVisibleToGit(root, allow) {
1127
+ const entries = [...new Set(allow.map(normalizeWriteBoundaryEntry))].sort();
1128
+ if (entries.length === 0) return;
1129
+ const absolute = resolve3(root);
1130
+ let raw;
1131
+ try {
1132
+ raw = git3(absolute, ["check-ignore", "-v", "-z", "--stdin"], `${entries.join("\0")}\0`);
1133
+ } catch (error) {
1134
+ const status = error.status;
1135
+ if (status === 1) return;
1136
+ throw new Error(
1137
+ `write boundary: could not determine whether ${describeWriteBoundary(entries)} is ignored by git in ${absolute}: ${error.message}`
1138
+ );
1139
+ }
1140
+ const fields = raw.split("\0");
1141
+ const refusals = [];
1142
+ for (let index = 0; index + 3 < fields.length; index += 4) {
1143
+ const [source, line, pattern, path] = fields.slice(index, index + 4);
1144
+ if (path === void 0 || path.length === 0) continue;
1145
+ refusals.push(`'${path}' is ignored by ${source}:${line}:${pattern}`);
1146
+ }
1147
+ if (refusals.length === 0) return;
1148
+ throw new Error(
1149
+ `write boundary: ${refusals.join(", ")}. git status never reports an ignored path, so a boundary declared over one is verified against nothing and every window would be certified clean without an observation. Declare a path the repository tracks, or stop ignoring this one.`
1150
+ );
1151
+ }
1152
+ function repoRelative(root, path) {
1153
+ const base = resolve3(root);
1154
+ const rel = relative3(base, resolve3(base, path));
1155
+ if (rel.length === 0 || rel === ".." || rel.startsWith(`..${sep2}`) || isAbsolute2(rel)) return null;
1156
+ return rel.split(sep2).join("/");
1157
+ }
1158
+ function writeBoundaryDir(rootId) {
1159
+ return join4(clioStateDir(), "write-boundaries", rootId);
1160
+ }
1161
+ function writeBoundaryVerdictPath(rootId, window) {
1162
+ return join4(writeBoundaryDir(rootId), `${window.replace(/[^A-Za-z0-9._-]/gu, "_")}.json`);
1163
+ }
1164
+ function writeWriteBoundaryVerdict(rootId, verdict) {
1165
+ const path = writeBoundaryVerdictPath(rootId, verdict.window);
1166
+ atomicWrite(path, `${JSON.stringify(verdict, null, 2)}
1167
+ `);
1168
+ return path;
1169
+ }
1170
+
1171
+ // src/domains/dispatch/write-boundary-enforcer.ts
1172
+ init_esm_shims();
1173
+ import { existsSync as existsSync4 } from "node:fs";
1174
+ function preflightWriteBoundaries(plan, root) {
1175
+ const declared = plan.steps.filter((step) => step.writes !== void 0);
1176
+ if (declared.length === 0) return;
1177
+ if (!existsSync4(root) || !isGitRepository(root)) {
1178
+ throw new Error(
1179
+ `write boundaries are declared but ${root} is not a git repository; boundary enforcement compares the checkout before and after each step and fails closed without one`
1180
+ );
1181
+ }
1182
+ for (const step of declared) assertWriteBoundaryInsideRoot(root, step.writes ?? []);
1183
+ assertWriteBoundaryVisibleToGit(root, [...new Set(declared.flatMap((step) => [...step.writes ?? []]))]);
1184
+ }
1185
+ function createWriteBoundaryEnforcer(input) {
1186
+ const open = /* @__PURE__ */ new Map();
1187
+ const allowFor = (stepIds) => {
1188
+ const allow = /* @__PURE__ */ new Set();
1189
+ for (const stepId of stepIds) for (const entry of input.boundaryFor(stepId) ?? []) allow.add(entry);
1190
+ return [...allow].sort();
1191
+ };
1192
+ const attributionFor = (stepIds) => {
1193
+ const recordedWritesFor = input.recordedWritesFor;
1194
+ if (recordedWritesFor === void 0) return void 0;
1195
+ const recorded = /* @__PURE__ */ new Set();
1196
+ const downgrades = [];
1197
+ let complete = true;
1198
+ for (const stepId of stepIds) {
1199
+ const observed = recordedWritesFor(stepId);
1200
+ if (observed === null) {
1201
+ complete = false;
1202
+ downgrades.push({
1203
+ reason: "write_record_unavailable",
1204
+ tool: null,
1205
+ toolCallId: null,
1206
+ runId: null,
1207
+ stepId
1208
+ });
1209
+ continue;
1210
+ }
1211
+ if (!("recorded" in observed)) {
1212
+ for (const target of observed) recorded.add(target);
1213
+ continue;
1214
+ }
1215
+ for (const target of observed.recorded) recorded.add(target);
1216
+ if (!observed.complete) complete = false;
1217
+ for (const downgrade of observed.downgrades ?? []) {
1218
+ downgrades.push({ ...downgrade, stepId: downgrade.stepId ?? stepId });
1219
+ }
1220
+ }
1221
+ return { recorded: [...recorded].sort(), complete, downgrades };
1222
+ };
1223
+ return {
1224
+ begin(window, stepIds) {
1225
+ const allow = allowFor(stepIds);
1226
+ assertWriteBoundaryInsideRoot(input.root, allow);
1227
+ assertWriteBoundaryVisibleToGit(input.root, allow);
1228
+ open.set(window, { snapshot: captureWorkspaceSnapshot(input.root), allow });
1229
+ },
1230
+ async verify(window, stepIds) {
1231
+ const pending = open.get(window);
1232
+ if (pending === void 0) {
1233
+ throw new Error(`write boundary: window '${window}' was verified without a snapshot`);
1234
+ }
1235
+ open.delete(window);
1236
+ const attribution = attributionFor(stepIds);
1237
+ const verdict = enforceWriteBoundary({
1238
+ snapshot: pending.snapshot,
1239
+ window,
1240
+ stepIds,
1241
+ allow: pending.allow,
1242
+ ...attribution === void 0 ? {} : { attribution }
1243
+ });
1244
+ const path = writeWriteBoundaryVerdict(input.rootId, verdict);
1245
+ input.onVerdict?.(verdict, path);
1246
+ return {
1247
+ window,
1248
+ violated: verdict.reason !== null,
1249
+ // Every step in the window is named. With one step that is exact;
1250
+ // with several it is the honest answer, because one checkout cannot
1251
+ // tell the scheduler which of them wrote the path.
1252
+ failedStepIds: verdict.reason === null ? [] : [...stepIds],
1253
+ detail: verdict.detail
1254
+ };
1255
+ }
1256
+ };
1257
+ }
1258
+
1259
+ export {
1260
+ gitCheckoutRoot,
1261
+ createTaskWorktree,
1262
+ applyTaskWorktree,
1263
+ cleanupTaskWorktree,
1264
+ workspaceCheckpointRef,
1265
+ captureWorkspaceCheckpoint,
1266
+ isGitRepository,
1267
+ claimCompeteGroup,
1268
+ loadCompeteGroup,
1269
+ registerCompeteGroupRun,
1270
+ settleCompeteGroupRun,
1271
+ markCompeteGroupCleanupReady,
1272
+ markCompeteGroupWinnerPreserved,
1273
+ createCandidateWorktreeMapped,
1274
+ commitCandidateWork,
1275
+ candidateDiffStat,
1276
+ protectedPathsChangedByCompeteBranch,
1277
+ competeBranchForCandidate,
1278
+ removeCandidateWorktreeMapped,
1279
+ mergeWinnerBranch,
1280
+ cleanupCompeteGroup,
1281
+ settleRecoveredCompeteDecision,
1282
+ recoverCleanupReadyCompeteGroups,
1283
+ WRITE_BOUNDARY_VIOLATION_REASON,
1284
+ captureWorkspaceSnapshot,
1285
+ describeWriteBoundaryAttributionDowngrade,
1286
+ preflightWriteBoundaries,
1287
+ createWriteBoundaryEnforcer
1288
+ };
1289
+ //# sourceMappingURL=chunk-K53E2PTW.js.map