@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,1559 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ DEFAULT_KEEP_RECENT_TOKENS,
4
+ buildEvictionFields,
5
+ estimateTokens,
6
+ findCutPoint,
7
+ isProtected,
8
+ planEviction,
9
+ projectWorkingSet,
10
+ resolveWorkingSetPolicy,
11
+ tokensFreedByEviction
12
+ } from "./chunk-GEYX2NZ5.js";
13
+ import {
14
+ EMPTY_WORKING_SET_VIEW,
15
+ buildPathIndex,
16
+ callPathsByToolCallId,
17
+ covers,
18
+ foldWorkingSet,
19
+ isTurnStart,
20
+ protectionCutoffIndex,
21
+ selectVisibleEntries
22
+ } from "./chunk-DBREN25X.js";
23
+ import {
24
+ parseSessionEntries
25
+ } from "./chunk-BIY22UUK.js";
26
+ import {
27
+ filterEntriesToActivePath
28
+ } from "./chunk-O5F25NIE.js";
29
+ import "./chunk-DNHVRBH4.js";
30
+ import "./chunk-QH3ZTUOA.js";
31
+ import "./chunk-K45LHSCI.js";
32
+ import "./chunk-WJWNZXRM.js";
33
+ import "./chunk-KECNXMDE.js";
34
+ import "./chunk-MCJKEGHO.js";
35
+ import "./chunk-OPC4DQD6.js";
36
+ import "./chunk-W5RM7YAH.js";
37
+ import "./chunk-E2NSPYLC.js";
38
+ import {
39
+ CLIO_PROJECT_DIR
40
+ } from "./chunk-NTTS3O53.js";
41
+ import "./chunk-KQ6IDQIB.js";
42
+ import "./chunk-M4KFUXS7.js";
43
+ import "./chunk-WLHX3MM5.js";
44
+ import {
45
+ DEFAULT_WORKING_SET_SETTINGS
46
+ } from "./chunk-U2MSJ57E.js";
47
+ import {
48
+ isSessionHeader
49
+ } from "./chunk-6R5MBXBJ.js";
50
+ import "./chunk-EM2WNQS2.js";
51
+ import "./chunk-36XSBPXL.js";
52
+ import {
53
+ assertSafeId
54
+ } from "./chunk-UHW5V7HC.js";
55
+ import "./chunk-KMF54VH3.js";
56
+ import {
57
+ clioStatePath
58
+ } from "./chunk-CTTI7G3T.js";
59
+ import "./chunk-CVDAFGPW.js";
60
+ import "./chunk-PPEZJWUG.js";
61
+ import "./chunk-WDV62RKY.js";
62
+ import "./chunk-ZZFWWYLX.js";
63
+ import "./chunk-E3LEPLQ2.js";
64
+ import {
65
+ init_esm_shims
66
+ } from "./chunk-ECBHH7LU.js";
67
+
68
+ // src/cli/context-working-set.ts
69
+ init_esm_shims();
70
+ import { execFileSync } from "node:child_process";
71
+ import { mkdir, readdir as readdir2, readFile as readFile2, stat as stat2, writeFile } from "node:fs/promises";
72
+ import { basename as basename2, dirname as dirname2, join as join2, resolve as resolve2 } from "node:path";
73
+
74
+ // src/domains/context/working-set/replay/controls.ts
75
+ init_esm_shims();
76
+
77
+ // src/domains/context/working-set/replay/trace.ts
78
+ init_esm_shims();
79
+ function countReplayTurns(entries) {
80
+ let count = 0;
81
+ for (const entry of entries) {
82
+ if (isTurnStart(entry)) count += 1;
83
+ }
84
+ return count;
85
+ }
86
+
87
+ // src/domains/context/working-set/replay/controls.ts
88
+ function controlId(id) {
89
+ return id;
90
+ }
91
+ function eligibleToolResults(input) {
92
+ const cutoff = protectionCutoffIndex(input.entries, input.settings.protectLastTurns);
93
+ const index = buildPathIndex(input.entries, { cwd: input.cwd });
94
+ const out = [];
95
+ for (let entryIndex = cutoff - 1; entryIndex >= 0; entryIndex -= 1) {
96
+ const entry = input.entries[entryIndex];
97
+ if (entry?.kind !== "message" || entry.role !== "tool_result") continue;
98
+ if (input.view.evicted.has(entry.turnId)) continue;
99
+ if (isProtected(entry, { entryIndex, cutoffIndex: cutoff, input, index })) continue;
100
+ out.push(entry);
101
+ }
102
+ return out;
103
+ }
104
+ function takeToTarget(input, entries) {
105
+ let tokensNeeded = Math.max(0, input.pressure.tokens - input.pressure.target * input.pressure.contextWindow);
106
+ if (tokensNeeded <= 0) return [];
107
+ const selected = [];
108
+ const callPaths = callPathsByToolCallId(input.entries);
109
+ for (const entry of entries) {
110
+ const candidate = { ref: { entry: entry.turnId }, reason: "age_horizon" };
111
+ selected.push(candidate);
112
+ tokensNeeded -= tokensFreedByEviction(input.estimateTokens, entry, candidate, callPaths);
113
+ if (tokensNeeded <= 0) break;
114
+ }
115
+ return selected;
116
+ }
117
+ function makeOraclePolicy(graph) {
118
+ let lastInput = null;
119
+ let lastCandidateCount = 0;
120
+ const safeEntries = (input) => {
121
+ const currentTurn = countReplayTurns(input.entries) + 1;
122
+ return eligibleToolResults(input).filter((entry) => {
123
+ const futureTurns = graph.futureTurnsOf.get(entry.turnId) ?? [];
124
+ return futureTurns.every((turn) => turn < currentTurn);
125
+ });
126
+ };
127
+ return {
128
+ id: controlId("oracle"),
129
+ select(input) {
130
+ const safe = safeEntries(input);
131
+ lastInput = input;
132
+ lastCandidateCount = safe.length;
133
+ return takeToTarget(input, safe);
134
+ },
135
+ replayCandidateCount(input) {
136
+ return input === lastInput ? lastCandidateCount : safeEntries(input).length;
137
+ }
138
+ };
139
+ }
140
+ function mulberry32(seed) {
141
+ let value = seed >>> 0;
142
+ return () => {
143
+ value = value + 1831565813 >>> 0;
144
+ let next = value;
145
+ next = Math.imul(next ^ next >>> 15, next | 1);
146
+ next ^= next + Math.imul(next ^ next >>> 7, next | 61);
147
+ return ((next ^ next >>> 14) >>> 0) / 4294967296;
148
+ };
149
+ }
150
+ function makeRandomPolicy(seed) {
151
+ let lastInput = null;
152
+ let lastCandidateCount = 0;
153
+ return {
154
+ id: controlId("random"),
155
+ select(input) {
156
+ const entries = [...eligibleToolResults(input)];
157
+ lastInput = input;
158
+ lastCandidateCount = entries.length;
159
+ const random = mulberry32(seed);
160
+ for (let index = entries.length - 1; index > 0; index -= 1) {
161
+ const swap = Math.floor(random() * (index + 1));
162
+ const value = entries[index];
163
+ entries[index] = entries[swap];
164
+ entries[swap] = value;
165
+ }
166
+ return takeToTarget(input, entries);
167
+ },
168
+ replayCandidateCount(input) {
169
+ return input === lastInput ? lastCandidateCount : eligibleToolResults(input).length;
170
+ }
171
+ };
172
+ }
173
+ var nonePolicy = {
174
+ id: controlId("none"),
175
+ select: () => []
176
+ };
177
+
178
+ // src/domains/context/working-set/replay/load-clio.ts
179
+ init_esm_shims();
180
+ import { readdir, readFile, stat } from "node:fs/promises";
181
+ import { basename, dirname, join, resolve } from "node:path";
182
+
183
+ // src/domains/context/working-set/replay/reference-graph.ts
184
+ init_esm_shims();
185
+ var READ_CLASS_OPS = /* @__PURE__ */ new Set(["read", "grep", "find", "ls", "code_nav"]);
186
+ var MUTATION_OPS = /* @__PURE__ */ new Set(["write", "edit"]);
187
+ function isToolResult(entry) {
188
+ return entry?.kind === "message" && entry.role === "tool_result";
189
+ }
190
+ function isReadableObservation(observation) {
191
+ return !observation.isError && observation.path.length > 0 && READ_CLASS_OPS.has(observation.op);
192
+ }
193
+ function edgeKey(edge) {
194
+ return `${edge.from}\0${edge.toTurnIndex}\0${edge.kind}`;
195
+ }
196
+ function buildReferenceGraph(trace, index) {
197
+ const entryById = new Map(trace.entries.map((entry) => [entry.turnId, entry]));
198
+ const edges = [];
199
+ const seenEdges = /* @__PURE__ */ new Set();
200
+ const future = /* @__PURE__ */ new Map();
201
+ const add = (edge) => {
202
+ const key = edgeKey(edge);
203
+ if (seenEdges.has(key)) return;
204
+ seenEdges.add(key);
205
+ edges.push(edge);
206
+ if (edge.kind === "file_rewrite") return;
207
+ const turns = future.get(edge.from);
208
+ if (turns === void 0) future.set(edge.from, /* @__PURE__ */ new Set([edge.toTurnIndex]));
209
+ else turns.add(edge.toTurnIndex);
210
+ };
211
+ for (const earlier of index.observations) {
212
+ if (!isToolResult(entryById.get(earlier.ref.entry)) || !isReadableObservation(earlier)) continue;
213
+ const surfaced = new Set(earlier.surfaced);
214
+ for (const later of index.observations) {
215
+ if (later.entryIndex <= earlier.entryIndex) continue;
216
+ if (isReadableObservation(later) && later.path === earlier.path) {
217
+ add({ from: earlier.ref.entry, toTurnIndex: later.turnIndex, kind: "file_reread" });
218
+ }
219
+ if (isReadableObservation(later) && surfaced.has(later.path)) {
220
+ add({ from: earlier.ref.entry, toTurnIndex: later.turnIndex, kind: "file_discovery" });
221
+ }
222
+ if (later.path === earlier.path && MUTATION_OPS.has(later.op)) {
223
+ add({ from: earlier.ref.entry, toTurnIndex: later.turnIndex, kind: "file_rewrite" });
224
+ }
225
+ }
226
+ }
227
+ const futureTurnsOf = /* @__PURE__ */ new Map();
228
+ for (const [ref, turns] of future)
229
+ futureTurnsOf.set(
230
+ ref,
231
+ [...turns].sort((a, b) => a - b)
232
+ );
233
+ return { edges, futureTurnsOf };
234
+ }
235
+
236
+ // src/domains/context/working-set/replay/load-clio.ts
237
+ var DEFAULT_FILTER = {
238
+ minTurns: 8,
239
+ minToolResults: 8,
240
+ requireFileReread: true
241
+ };
242
+ async function collectLedgerFiles(input, out) {
243
+ const path = resolve(input);
244
+ let facts;
245
+ try {
246
+ facts = await stat(path);
247
+ } catch {
248
+ return;
249
+ }
250
+ if (facts.isFile()) {
251
+ if (path.endsWith(".jsonl")) out.add(path);
252
+ return;
253
+ }
254
+ if (!facts.isDirectory()) return;
255
+ const direct = join(path, "current.jsonl");
256
+ try {
257
+ if ((await stat(direct)).isFile()) {
258
+ out.add(direct);
259
+ return;
260
+ }
261
+ } catch {
262
+ }
263
+ let children;
264
+ try {
265
+ children = await readdir(path, { withFileTypes: true });
266
+ } catch {
267
+ return;
268
+ }
269
+ for (const child of children.sort((a, b) => a.name.localeCompare(b.name))) {
270
+ if (!child.isDirectory()) continue;
271
+ await collectLedgerFiles(join(path, child.name), out);
272
+ }
273
+ }
274
+ function sessionFacts(raw, source) {
275
+ const fallback = { id: basename(dirname(source)), cwd: null };
276
+ for (const line of raw.split("\n")) {
277
+ if (line.trim().length === 0) continue;
278
+ try {
279
+ const value = JSON.parse(line);
280
+ if (isSessionHeader(value)) return { id: value.id, cwd: value.cwd.length > 0 ? value.cwd : null };
281
+ } catch {
282
+ return fallback;
283
+ }
284
+ }
285
+ return fallback;
286
+ }
287
+ async function pinnedLeafTurnId(source) {
288
+ try {
289
+ const raw = await readFile(join(dirname(source), "meta.json"), "utf8");
290
+ const value = JSON.parse(raw);
291
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
292
+ const pinned = value.pinnedLeafTurnId;
293
+ return typeof pinned === "string" && pinned.length > 0 ? pinned : void 0;
294
+ } catch {
295
+ return void 0;
296
+ }
297
+ }
298
+ function cleanActiveEntries(entries, activeLeafTurnId) {
299
+ return filterEntriesToActivePath(entries, activeLeafTurnId).filter(
300
+ (entry) => entry.kind !== "contextEviction" && entry.kind !== "contextRecall"
301
+ );
302
+ }
303
+ function toolResultCount(entries) {
304
+ let count = 0;
305
+ for (const entry of entries) {
306
+ if (entry.kind === "message" && entry.role === "tool_result") count += 1;
307
+ }
308
+ return count;
309
+ }
310
+ async function loadClioTraces(paths, options = {}) {
311
+ const discovered = /* @__PURE__ */ new Set();
312
+ let missingInputs = 0;
313
+ for (const path of paths) {
314
+ const before = discovered.size;
315
+ await collectLedgerFiles(path, discovered);
316
+ if (discovered.size === before) {
317
+ try {
318
+ await stat(resolve(path));
319
+ } catch {
320
+ missingInputs += 1;
321
+ }
322
+ }
323
+ }
324
+ const filtered = {
325
+ turns_lt_8: 0,
326
+ tool_results_lt_8: 0,
327
+ no_file_reread: 0
328
+ };
329
+ const cascade = {
330
+ found: discovered.size,
331
+ unreadable: missingInputs,
332
+ filtered,
333
+ kept: 0
334
+ };
335
+ const traces = [];
336
+ const filter = options.filter === false ? null : {
337
+ minTurns: options.filter?.minTurns ?? DEFAULT_FILTER.minTurns,
338
+ minToolResults: options.filter?.minToolResults ?? DEFAULT_FILTER.minToolResults,
339
+ requireFileReread: options.filter?.requireFileReread ?? DEFAULT_FILTER.requireFileReread
340
+ };
341
+ for (const source of [...discovered].sort((a, b) => a.localeCompare(b))) {
342
+ let raw;
343
+ try {
344
+ raw = await readFile(source, "utf8");
345
+ } catch {
346
+ cascade.unreadable += 1;
347
+ continue;
348
+ }
349
+ const parsed = parseSessionEntries(raw, source);
350
+ if (parsed.errors.length > 0) {
351
+ cascade.unreadable += 1;
352
+ continue;
353
+ }
354
+ const entries = cleanActiveEntries(parsed.entries, await pinnedLeafTurnId(source));
355
+ const facts = sessionFacts(raw, source);
356
+ const trace = {
357
+ id: facts.id,
358
+ source,
359
+ cwd: facts.cwd,
360
+ entries,
361
+ turnCount: countReplayTurns(entries)
362
+ };
363
+ if (filter !== null) {
364
+ if (trace.turnCount < filter.minTurns) {
365
+ filtered.turns_lt_8 = (filtered.turns_lt_8 ?? 0) + 1;
366
+ continue;
367
+ }
368
+ if (toolResultCount(entries) < filter.minToolResults) {
369
+ filtered.tool_results_lt_8 = (filtered.tool_results_lt_8 ?? 0) + 1;
370
+ continue;
371
+ }
372
+ if (filter.requireFileReread) {
373
+ const graph = buildReferenceGraph(trace, buildPathIndex(entries, { cwd: trace.cwd }));
374
+ if (!graph.edges.some((edge) => edge.kind === "file_reread")) {
375
+ filtered.no_file_reread = (filtered.no_file_reread ?? 0) + 1;
376
+ continue;
377
+ }
378
+ }
379
+ }
380
+ traces.push(trace);
381
+ }
382
+ cascade.kept = traces.length;
383
+ return { traces, cascade };
384
+ }
385
+
386
+ // src/domains/context/working-set/replay/metrics.ts
387
+ init_esm_shims();
388
+ function safeFraction(numerator, denominator, empty) {
389
+ return denominator === 0 ? empty : numerator / denominator;
390
+ }
391
+ function survivesThrough(observation, referenceTurn, evictedAtTurn) {
392
+ const evictedAt = evictedAtTurn.get(observation.ref.entry);
393
+ return evictedAt === void 0 || evictedAt > referenceTurn;
394
+ }
395
+ function hasSurvivingCoveringRead(input, ref, referenceTurn) {
396
+ const original = input.index.byRef.get(ref);
397
+ if (original?.op !== "read" || original.path.length === 0) return false;
398
+ return (input.index.byPath.get(original.path) ?? []).some(
399
+ (later) => later.op === "read" && !later.isError && later.entryIndex > original.entryIndex && later.turnIndex < referenceTurn && covers(later.range, original.range) && survivesThrough(later, referenceTurn, input.replay.evictedAtTurn)
400
+ );
401
+ }
402
+ function measure(input) {
403
+ let pairs = 0;
404
+ let retainedPairs = 0;
405
+ let coveredRetainedPairs = 0;
406
+ let pairsAt10 = 0;
407
+ let retainedPairsAt10 = 0;
408
+ for (const [ref, futureTurns] of input.graph.futureTurnsOf) {
409
+ const observationTurn = input.index.byRef.get(ref)?.turnIndex;
410
+ const evictedAt = input.replay.evictedAtTurn.get(ref);
411
+ for (const referenceTurn of futureTurns) {
412
+ pairs += 1;
413
+ const retained = evictedAt === void 0 || evictedAt > referenceTurn;
414
+ if (retained) retainedPairs += 1;
415
+ if (retained || hasSurvivingCoveringRead(input, ref, referenceTurn)) coveredRetainedPairs += 1;
416
+ if (observationTurn !== void 0 && referenceTurn - observationTurn <= 10) {
417
+ pairsAt10 += 1;
418
+ if (retained) retainedPairsAt10 += 1;
419
+ }
420
+ }
421
+ }
422
+ let evictedItems = 0;
423
+ let safelyEvictedItems = 0;
424
+ let tokensEvicted = 0;
425
+ let recallTokens = 0;
426
+ let coldPrefixTokens2 = 0;
427
+ let saturatedEventCount = 0;
428
+ for (const event of input.replay.events) {
429
+ if (event.saturated) saturatedEventCount += 1;
430
+ coldPrefixTokens2 += event.coldPrefixTokens;
431
+ for (const item of event.items) {
432
+ evictedItems += 1;
433
+ tokensEvicted += item.tokensFreed;
434
+ const future = input.graph.futureTurnsOf.get(item.ref.entry) ?? [];
435
+ if (!future.some((turn) => turn > event.turnIndex)) safelyEvictedItems += 1;
436
+ else recallTokens += item.tokensFreed;
437
+ }
438
+ }
439
+ return {
440
+ metrics: {
441
+ traces: 1,
442
+ retention: safeFraction(retainedPairs, pairs, 1),
443
+ retentionCovered: safeFraction(coveredRetainedPairs, pairs, 1),
444
+ retentionAt10: safeFraction(retainedPairsAt10, pairsAt10, 1),
445
+ evictionPrecision: safeFraction(safelyEvictedItems, evictedItems, 1),
446
+ tokensEvicted,
447
+ recallTokens,
448
+ coldPrefixTokens: coldPrefixTokens2,
449
+ evictionEvents: input.replay.events.length,
450
+ saturatedEvents: safeFraction(saturatedEventCount, input.replay.events.length, 0),
451
+ turnsToFirstSummary: input.replay.turnsToFirstSummary,
452
+ summaries: input.replay.summaries
453
+ },
454
+ pairs,
455
+ retainedPairs,
456
+ coveredRetainedPairs,
457
+ pairsAt10,
458
+ retainedPairsAt10,
459
+ saturatedEventCount
460
+ };
461
+ }
462
+ function mean(values) {
463
+ return values.length === 0 ? 0 : values.reduce((sum, value) => sum + value, 0) / values.length;
464
+ }
465
+ function aggregateReplayMetrics(inputs) {
466
+ const measured = inputs.map(measure);
467
+ const firstSummaries = measured.map((entry) => entry.metrics.turnsToFirstSummary).filter((value) => value !== null);
468
+ const sum = (field) => measured.reduce((total, entry) => total + entry[field], 0);
469
+ const totalEvents = measured.reduce((total, entry) => total + entry.metrics.evictionEvents, 0);
470
+ const saturatedEvents = measured.reduce((total, entry) => total + entry.saturatedEventCount, 0);
471
+ return {
472
+ mean: {
473
+ traces: measured.length,
474
+ retention: measured.length === 0 ? 1 : mean(measured.map((entry) => entry.metrics.retention)),
475
+ retentionCovered: measured.length === 0 ? 1 : mean(measured.map((entry) => entry.metrics.retentionCovered)),
476
+ retentionAt10: measured.length === 0 ? 1 : mean(measured.map((entry) => entry.metrics.retentionAt10)),
477
+ evictionPrecision: measured.length === 0 ? 1 : mean(measured.map((entry) => entry.metrics.evictionPrecision)),
478
+ tokensEvicted: mean(measured.map((entry) => entry.metrics.tokensEvicted)),
479
+ recallTokens: mean(measured.map((entry) => entry.metrics.recallTokens)),
480
+ coldPrefixTokens: mean(measured.map((entry) => entry.metrics.coldPrefixTokens)),
481
+ evictionEvents: mean(measured.map((entry) => entry.metrics.evictionEvents)),
482
+ // Event-pooled: zero-event traces must not dilute the saturation rate.
483
+ saturatedEvents: safeFraction(saturatedEvents, totalEvents, 0),
484
+ turnsToFirstSummary: firstSummaries.length === 0 ? null : mean(firstSummaries),
485
+ summaries: mean(measured.map((entry) => entry.metrics.summaries))
486
+ },
487
+ turnsToFirstSummaryCount: firstSummaries.length,
488
+ pooledRetention: safeFraction(sum("retainedPairs"), sum("pairs"), 1),
489
+ pooledRetentionCovered: safeFraction(sum("coveredRetainedPairs"), sum("pairs"), 1),
490
+ pooledRetentionAt10: safeFraction(sum("retainedPairsAt10"), sum("pairsAt10"), 1)
491
+ };
492
+ }
493
+
494
+ // src/domains/context/working-set/replay/report.ts
495
+ init_esm_shims();
496
+ function metricObject(metrics, turnsToFirstSummaryCount) {
497
+ return {
498
+ traces: metrics.traces,
499
+ retention: metrics.retention,
500
+ retentionCovered: metrics.retentionCovered,
501
+ retentionAt10: metrics.retentionAt10,
502
+ evictionPrecision: metrics.evictionPrecision,
503
+ tokensEvicted: metrics.tokensEvicted,
504
+ recallTokens: metrics.recallTokens,
505
+ coldPrefixTokens: metrics.coldPrefixTokens,
506
+ evictionEvents: metrics.evictionEvents,
507
+ saturatedEvents: metrics.saturatedEvents,
508
+ turnsToFirstSummary: metrics.turnsToFirstSummary,
509
+ turnsToFirstSummaryCount,
510
+ summaries: metrics.summaries
511
+ };
512
+ }
513
+ function renderReplayJson(input) {
514
+ const filtered = Object.fromEntries(Object.entries(input.cascade.filtered).sort(([a], [b]) => a.localeCompare(b)));
515
+ const artifact = {
516
+ schema: "clio-coder-context-replay-v2",
517
+ config: {
518
+ policies: [...input.config.policies],
519
+ budgets: [...input.config.budgets],
520
+ threshold: input.config.threshold,
521
+ target: input.config.target,
522
+ seed: input.config.seed,
523
+ corpus: [...input.config.corpus],
524
+ filter: input.config.filter,
525
+ settings: {
526
+ enabled: input.config.settings.enabled,
527
+ policy: input.config.settings.policy,
528
+ target: input.config.settings.target,
529
+ protectLastTurns: input.config.settings.protectLastTurns,
530
+ minEvictableTokens: input.config.settings.minEvictableTokens
531
+ }
532
+ },
533
+ provenance: {
534
+ gitSha: input.gitSha,
535
+ commandLine: [...input.commandLine]
536
+ },
537
+ cascade: {
538
+ found: input.cascade.found,
539
+ unreadable: input.cascade.unreadable,
540
+ filtered,
541
+ kept: input.cascade.kept
542
+ },
543
+ results: input.results.map((result) => ({
544
+ budgetTokens: result.budgetTokens,
545
+ policyId: result.policyId,
546
+ metrics: {
547
+ mean: metricObject(result.metrics.mean, result.metrics.turnsToFirstSummaryCount),
548
+ pooledRetention: result.metrics.pooledRetention,
549
+ pooledRetentionCovered: result.metrics.pooledRetentionCovered,
550
+ pooledRetentionAt10: result.metrics.pooledRetentionAt10
551
+ }
552
+ }))
553
+ };
554
+ return `${JSON.stringify(artifact, null, " ")}
555
+ `;
556
+ }
557
+ function ratio(value) {
558
+ return value.toFixed(3);
559
+ }
560
+ function quantity(value) {
561
+ return Number.isInteger(value) ? String(value) : value.toFixed(1);
562
+ }
563
+ function cascadeRows(cascade) {
564
+ return [
565
+ `| found | ${cascade.found} |`,
566
+ `| unreadable | ${cascade.unreadable} |`,
567
+ ...Object.entries(cascade.filtered).map(([stage, count]) => `| ${stage} | ${count} |`),
568
+ `| kept | ${cascade.kept} |`
569
+ ];
570
+ }
571
+ function renderReplayMarkdown(input) {
572
+ const lines = [
573
+ "# Clio working-set replay",
574
+ "",
575
+ "## Inclusion cascade",
576
+ "",
577
+ "| stage | traces |",
578
+ "| --- | ---: |",
579
+ ...cascadeRows(input.cascade)
580
+ ];
581
+ for (const budget of input.config.budgets) {
582
+ lines.push(
583
+ "",
584
+ `## Budget ${budget}`,
585
+ "",
586
+ "| policy | n | retention (mean) | retention (pooled) | retention covered (mean) | retention covered (pooled) | retention@10 (mean) | eviction precision (mean) | tokens evicted (mean) | recall tokens (mean) | cold prefix tokens (mean) | eviction events (mean) | saturated events | turns to first summary (mean) | summaries (mean) |",
587
+ "| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |"
588
+ );
589
+ for (const policy of input.config.policies) {
590
+ const result = input.results.find((entry) => entry.budgetTokens === budget && entry.policyId === policy);
591
+ if (result === void 0) continue;
592
+ const metrics = result.metrics.mean;
593
+ lines.push(
594
+ `| ${policy} | ${metrics.traces} | ${ratio(metrics.retention)} | ${ratio(result.metrics.pooledRetention)} | ${ratio(metrics.retentionCovered)} | ${ratio(result.metrics.pooledRetentionCovered)} | ${ratio(metrics.retentionAt10)} | ${ratio(metrics.evictionPrecision)} | ${quantity(metrics.tokensEvicted)} | ${quantity(metrics.recallTokens)} | ${quantity(metrics.coldPrefixTokens)} | ${quantity(metrics.evictionEvents)} | ${ratio(metrics.saturatedEvents)} | ${metrics.turnsToFirstSummary === null ? "\u2014" : quantity(metrics.turnsToFirstSummary)} (n=${result.metrics.turnsToFirstSummaryCount}) | ${quantity(metrics.summaries)} |`
595
+ );
596
+ }
597
+ }
598
+ lines.push("");
599
+ return lines.join("\n");
600
+ }
601
+
602
+ // src/domains/context/working-set/replay/runner.ts
603
+ init_esm_shims();
604
+ function sumTokens(entries) {
605
+ let tokens = 0;
606
+ for (const entry of entries) tokens += estimateTokens(entry);
607
+ return tokens;
608
+ }
609
+ function hasCandidatePool(policy) {
610
+ return "replayCandidateCount" in policy && typeof policy.replayCandidateCount === "function";
611
+ }
612
+ function latestCompactionIndex(entries) {
613
+ for (let index = entries.length - 1; index >= 0; index -= 1) {
614
+ if (entries[index]?.kind === "compactionSummary") return index;
615
+ }
616
+ return -1;
617
+ }
618
+ function eventSaturated(policy, input, plan) {
619
+ if (policy.id === "age-horizon") return true;
620
+ const targetTokens = input.pressure.target * input.pressure.contextWindow;
621
+ if (policy.id === "structural-v1") {
622
+ const thresholdTokens = input.pressure.threshold * input.pressure.contextWindow;
623
+ const usedAgeRung = plan.items.some((item) => item.reason === "age_horizon");
624
+ return plan.tokensAfter > targetTokens && (plan.tokensAfter > thresholdTokens || usedAgeRung);
625
+ }
626
+ if (hasCandidatePool(policy)) return plan.items.length === policy.replayCandidateCount(input);
627
+ return plan.tokensAfter > targetTokens;
628
+ }
629
+ function rebuildProjection(soFar, leaf, view) {
630
+ const raw = selectVisibleEntries(soFar, leaf ?? void 0);
631
+ const projected = projectWorkingSet(raw, view);
632
+ return {
633
+ raw,
634
+ projected,
635
+ indexByTurnId: new Map(raw.map((entry, index) => [entry.turnId, index])),
636
+ tokens: sumTokens(projected)
637
+ };
638
+ }
639
+ function projectAppendedEntry(entry, state, view) {
640
+ if (view.evictionEvents === 0) return entry;
641
+ const lastEventId = view.lastEvictionTurnId;
642
+ if (lastEventId !== null && state.indexByTurnId.has(lastEventId)) {
643
+ return entry;
644
+ }
645
+ return projectWorkingSet([entry], view)[0] ?? entry;
646
+ }
647
+ function appendVisibleEntry(entry, state, view) {
648
+ const projected = projectAppendedEntry(entry, state, view);
649
+ state.indexByTurnId.set(entry.turnId, state.raw.length);
650
+ state.raw.push(entry);
651
+ state.projected.push(projected);
652
+ state.tokens += estimateTokens(projected);
653
+ }
654
+ function applyEvictionProjection(state, synthetic, view, items) {
655
+ const affected = /* @__PURE__ */ new Set();
656
+ for (const item of items) {
657
+ const index = state.indexByTurnId.get(item.ref.entry);
658
+ if (index !== void 0) affected.add(index);
659
+ }
660
+ for (let index = 0; index < state.raw.length - 1; index += 1) {
661
+ const entry = state.raw[index];
662
+ if (entry?.kind === "message" && entry.role === "assistant") affected.add(index);
663
+ }
664
+ for (const index of affected) {
665
+ const source = state.raw[index];
666
+ const before = state.projected[index];
667
+ if (source === void 0 || before === void 0) continue;
668
+ const after = projectWorkingSet([source, synthetic], view)[0] ?? source;
669
+ state.projected[index] = after;
670
+ state.tokens += estimateTokens(after) - estimateTokens(before);
671
+ }
672
+ }
673
+ function coldPrefixTokens(state, items) {
674
+ let cut = state.projected.length;
675
+ for (const item of items) {
676
+ const index = state.indexByTurnId.get(item.ref.entry);
677
+ if (index !== void 0 && index < cut) cut = index;
678
+ }
679
+ let tokens = 0;
680
+ for (let index = cut; index < state.projected.length; index += 1) {
681
+ const entry = state.projected[index];
682
+ if (entry !== void 0) tokens += estimateTokens(entry);
683
+ }
684
+ return tokens;
685
+ }
686
+ function replayTrace(trace, policy, config) {
687
+ const soFar = [];
688
+ const events = [];
689
+ const evictedAtTurn = /* @__PURE__ */ new Map();
690
+ const toolResults = new Set(
691
+ trace.entries.filter((entry) => entry.kind === "message" && entry.role === "tool_result").map((entry) => entry.turnId)
692
+ );
693
+ let evictionSequence = 0;
694
+ let summaries = 0;
695
+ let turnIndex = 0;
696
+ let turnsToFirstSummary = null;
697
+ let lastMessageTurnId = null;
698
+ let view = EMPTY_WORKING_SET_VIEW;
699
+ let visible = { raw: [], projected: [], indexByTurnId: /* @__PURE__ */ new Map(), tokens: 0 };
700
+ const pressureLimit = config.threshold * config.budgetTokens;
701
+ for (const entry of trace.entries) {
702
+ if (isTurnStart(entry)) {
703
+ turnIndex += 1;
704
+ const leaf = lastMessageTurnId;
705
+ const tokens = visible.tokens;
706
+ if (tokens > pressureLimit) {
707
+ const input = {
708
+ entries: visible.raw,
709
+ view,
710
+ cwd: trace.cwd,
711
+ settings: config.settings,
712
+ pressure: {
713
+ tokens,
714
+ contextWindow: config.budgetTokens,
715
+ threshold: config.threshold,
716
+ target: config.target
717
+ },
718
+ estimateTokens
719
+ };
720
+ const plan = planEviction(policy, input);
721
+ if (plan !== null) {
722
+ const saturated = eventSaturated(policy, input, plan);
723
+ evictionSequence += 1;
724
+ const previous = soFar[soFar.length - 1];
725
+ const synthetic = {
726
+ ...buildEvictionFields(plan, {
727
+ trigger: "pressure",
728
+ pressureBefore: tokens / config.budgetTokens,
729
+ snapshotIdBefore: null
730
+ }),
731
+ turnId: `replay-evict-${evictionSequence}`,
732
+ parentTurnId: leaf,
733
+ timestamp: previous?.timestamp ?? entry.timestamp
734
+ };
735
+ soFar.push(synthetic);
736
+ appendVisibleEntry(synthetic, visible, view);
737
+ view = foldWorkingSet(soFar, leaf ?? void 0);
738
+ applyEvictionProjection(visible, synthetic, view, plan.items);
739
+ events.push({
740
+ turnIndex,
741
+ items: plan.items,
742
+ tokensBefore: plan.tokensBefore,
743
+ tokensAfter: plan.tokensAfter,
744
+ saturated,
745
+ coldPrefixTokens: coldPrefixTokens(visible, plan.items)
746
+ });
747
+ for (const item of plan.items) {
748
+ if (toolResults.has(item.ref.entry) && !evictedAtTurn.has(item.ref.entry)) {
749
+ evictedAtTurn.set(item.ref.entry, turnIndex);
750
+ }
751
+ }
752
+ }
753
+ if (visible.tokens > pressureLimit) {
754
+ if (turnsToFirstSummary === null) turnsToFirstSummary = turnIndex;
755
+ const previousCompactionIndex = latestCompactionIndex(soFar);
756
+ const boundaryStart = previousCompactionIndex + 1;
757
+ const cut = config.summaries === void 0 ? boundaryStart : findCutPoint(soFar, config.summaries.keepRecentTokens, { startIndex: boundaryStart }).firstKeptEntryIndex;
758
+ if (config.summaries !== void 0 && cut > boundaryStart) {
759
+ summaries += 1;
760
+ const visibleBefore = new Set(visible.raw.map((candidate) => candidate.turnId));
761
+ const previous = soFar[soFar.length - 1];
762
+ const firstKeptTurnId = soFar[cut]?.turnId ?? "";
763
+ const synthetic = {
764
+ kind: "compactionSummary",
765
+ turnId: `replay-summary-${summaries}`,
766
+ parentTurnId: firstKeptTurnId || null,
767
+ timestamp: previous?.timestamp ?? entry.timestamp,
768
+ summary: "#".repeat(config.summaries.summaryTokens * 4),
769
+ tokensBefore: visible.tokens,
770
+ firstKeptTurnId
771
+ };
772
+ soFar.push(synthetic);
773
+ visible = rebuildProjection(soFar, lastMessageTurnId, view);
774
+ const visibleAfter = new Set(visible.raw.map((candidate) => candidate.turnId));
775
+ for (const removed of visibleBefore) {
776
+ if (toolResults.has(removed) && !visibleAfter.has(removed) && !evictedAtTurn.has(removed)) {
777
+ evictedAtTurn.set(removed, turnIndex);
778
+ }
779
+ }
780
+ }
781
+ }
782
+ }
783
+ }
784
+ soFar.push(entry);
785
+ if (entry.kind === "compactionSummary") visible = rebuildProjection(soFar, lastMessageTurnId, view);
786
+ else appendVisibleEntry(entry, visible, view);
787
+ if (entry.kind === "message") lastMessageTurnId = entry.turnId;
788
+ }
789
+ return {
790
+ traceId: trace.id,
791
+ policyId: config.policyId,
792
+ budgetTokens: config.budgetTokens,
793
+ turnCount: trace.turnCount,
794
+ events,
795
+ evictedAtTurn,
796
+ turnsToFirstSummary,
797
+ summaries,
798
+ entries: soFar
799
+ };
800
+ }
801
+
802
+ // src/domains/context/working-set/replay/synthetic.ts
803
+ init_esm_shims();
804
+ var SYNTHETIC_CORPORA = [
805
+ {
806
+ id: "science-long",
807
+ seed: 7,
808
+ traces: 8,
809
+ turns: 300,
810
+ files: 48,
811
+ returnProbability: 0.3,
812
+ zipfExponent: 1,
813
+ scripts: { explore: 1, implement: 3, validate: 2, analyze: 2 },
814
+ fileLines: [12, 96],
815
+ simulationLines: [100, 2400],
816
+ offloadAfterLines: 200
817
+ },
818
+ {
819
+ id: "refactor",
820
+ seed: 11,
821
+ traces: 8,
822
+ turns: 200,
823
+ files: 64,
824
+ returnProbability: 0.4,
825
+ zipfExponent: 1,
826
+ scripts: { explore: 1, implement: 5, validate: 2, analyze: 0 },
827
+ fileLines: [16, 110],
828
+ simulationLines: [100, 400],
829
+ offloadAfterLines: 200
830
+ },
831
+ {
832
+ id: "exploration",
833
+ seed: 13,
834
+ traces: 8,
835
+ turns: 200,
836
+ files: 120,
837
+ returnProbability: 0.15,
838
+ zipfExponent: 1,
839
+ scripts: { explore: 4, implement: 1, validate: 1, analyze: 1 },
840
+ fileLines: [10, 64],
841
+ simulationLines: [100, 800],
842
+ offloadAfterLines: 200
843
+ }
844
+ ];
845
+ function syntheticCorpus(id) {
846
+ return SYNTHETIC_CORPORA.find((spec) => spec.id === id);
847
+ }
848
+ function mulberry322(seed) {
849
+ let value = seed >>> 0;
850
+ return () => {
851
+ value = value + 1831565813 >>> 0;
852
+ let next = value;
853
+ next = Math.imul(next ^ next >>> 15, next | 1);
854
+ next ^= next + Math.imul(next ^ next >>> 7, next | 61);
855
+ return ((next ^ next >>> 14) >>> 0) / 4294967296;
856
+ };
857
+ }
858
+ function powerLawRank(size, exponent, draw) {
859
+ const upper = size + 1;
860
+ const sample = exponent === 1 ? upper ** draw : (1 + draw * (upper ** (1 - exponent) - 1)) ** (1 / (1 - exponent));
861
+ return Math.min(size - 1, Math.max(0, Math.floor(sample) - 1));
862
+ }
863
+ var DIRECTORIES = ["src/sim", "src/io", "src/analysis", "src/mesh", "tests", "scripts", "configs"];
864
+ var STEMS = ["solver", "reader", "writer", "grid", "field", "boundary", "stepper", "metrics", "plot", "checkpoint"];
865
+ var EXTENSIONS = ["py", "py", "py", "c", "h", "yaml", "toml"];
866
+ var CONSUMED_LISTING_READ_LIMIT = 48;
867
+ var CONSUMED_LISTING_SAMPLE_LINES = 20;
868
+ var Ledger = class {
869
+ constructor(cwd) {
870
+ this.cwd = cwd;
871
+ }
872
+ cwd;
873
+ entries = [];
874
+ parent = null;
875
+ sequence = 0;
876
+ calls = 0;
877
+ next(kind) {
878
+ this.sequence += 1;
879
+ const turnId = `${kind}-${String(this.sequence).padStart(5, "0")}`;
880
+ const stamp = {
881
+ turnId,
882
+ parentTurnId: this.parent,
883
+ timestamp: new Date(1787e9 + this.sequence * 1e3).toISOString()
884
+ };
885
+ this.parent = turnId;
886
+ return stamp;
887
+ }
888
+ user(text) {
889
+ this.entries.push({ kind: "message", ...this.next("user"), role: "user", payload: { text } });
890
+ }
891
+ assistant(thinking, text) {
892
+ this.entries.push({
893
+ kind: "message",
894
+ ...this.next("assistant"),
895
+ role: "assistant",
896
+ payload: {
897
+ content: [
898
+ { type: "thinking", thinking },
899
+ { type: "text", text }
900
+ ]
901
+ }
902
+ });
903
+ }
904
+ call(name, args, text, options = {}) {
905
+ this.calls += 1;
906
+ const toolCallId = `call-${String(this.calls).padStart(5, "0")}`;
907
+ this.entries.push({ kind: "message", ...this.next("call"), role: "tool_call", payload: { toolCallId, name, args } });
908
+ const details = options.offload === true ? { resultDisposition: { offloadPath: `${this.cwd}/${CLIO_PROJECT_DIR}/scratch/${toolCallId}.txt` } } : void 0;
909
+ this.entries.push({
910
+ kind: "message",
911
+ ...this.next("result"),
912
+ role: "tool_result",
913
+ payload: {
914
+ toolCallId,
915
+ toolName: name,
916
+ result: { content: [{ type: "text", text }], ...details === void 0 ? {} : { details } },
917
+ isError: options.isError === true
918
+ }
919
+ });
920
+ }
921
+ };
922
+ function fileBody(file, offset = 0, limit = null) {
923
+ const end = limit === null ? file.lines : Math.min(file.lines, offset + limit);
924
+ const lines = [];
925
+ for (let line = offset + 1; line <= end; line += 1) {
926
+ lines.push(`${String(line).padStart(4, " ")} ${file.path}@v${file.version}: x[${line}] = f(x[${line - 1}]) + eps`);
927
+ }
928
+ return lines.join("\n");
929
+ }
930
+ function simulationOutput(lines, seed) {
931
+ const rnd = mulberry322(seed);
932
+ const out = [];
933
+ for (let step = 0; step < lines; step += 1) {
934
+ out.push(
935
+ `step ${String(step).padStart(5, "0")} t=${(step * 0.01).toFixed(2)} e=${(1 - rnd() * 1e-3).toFixed(6)} r=${(rnd() * 1e-6).toExponential(2)}`
936
+ );
937
+ }
938
+ return out.join("\n");
939
+ }
940
+ function testOutput(files, failing) {
941
+ const out = [
942
+ "============================= test session starts =============================",
943
+ `collected ${files.length * 4} items`,
944
+ ""
945
+ ];
946
+ for (const file of files) {
947
+ for (let case_ = 1; case_ <= 4; case_ += 1) {
948
+ out.push(
949
+ `${file.path}::test_${file.path.replace(/\W/g, "_")}_${case_} ${file === failing && case_ === 3 ? "FAILED" : "PASSED"} [${String(Math.round(100 * case_ / 4)).padStart(3, " ")}%]`
950
+ );
951
+ }
952
+ }
953
+ if (failing !== null) {
954
+ const line = Math.max(1, Math.floor(failing.lines / 2));
955
+ out.push(
956
+ "",
957
+ "=================================== FAILURES ===================================",
958
+ `____________________ test_${failing.path.replace(/\W/g, "_")}_3 ____________________`,
959
+ ""
960
+ );
961
+ for (let frame = 0; frame < 12; frame += 1) {
962
+ out.push(
963
+ ` File "${failing.path}", line ${line + frame}, in step_${frame}`,
964
+ ` residual = advance(state, dt) # frame ${frame}`
965
+ );
966
+ }
967
+ out.push(
968
+ "",
969
+ "AssertionError: residual 3.2e-4 exceeds tolerance 1e-6",
970
+ `FAILED ${failing.path}::test_${failing.path.replace(/\W/g, "_")}_3`
971
+ );
972
+ }
973
+ out.push(
974
+ "",
975
+ `${failing === null ? files.length * 4 : files.length * 4 - 1} passed, ${failing === null ? 0 : 1} failed`
976
+ );
977
+ return out.join("\n");
978
+ }
979
+ function generateSyntheticTrace(spec, index) {
980
+ const rnd = mulberry322(spec.seed * 1e3 + index);
981
+ const between = (low, high) => low + Math.floor(rnd() * (high - low + 1));
982
+ const pick = (items) => items[Math.floor(rnd() * items.length)];
983
+ const cwd = `/synthetic/${spec.id}-${index}`;
984
+ const ledger = new Ledger(cwd);
985
+ const repo = [];
986
+ for (let file = 0; file < spec.files; file += 1) {
987
+ const dir = DIRECTORIES[file % DIRECTORIES.length];
988
+ const stem = STEMS[Math.floor(file / DIRECTORIES.length) % STEMS.length];
989
+ const ext = EXTENSIONS[file % EXTENSIONS.length];
990
+ repo.push({
991
+ path: `${dir}/${stem}${Math.floor(file / (DIRECTORIES.length * STEMS.length)) || ""}.${ext}`,
992
+ lines: between(spec.fileLines[0], spec.fileLines[1]),
993
+ version: 1
994
+ });
995
+ }
996
+ const zipf = () => repo[powerLawRank(repo.length, spec.zipfExponent, rnd())];
997
+ const scriptNames = Object.keys(spec.scripts).flatMap(
998
+ (name) => Array.from({ length: spec.scripts[name] }, () => name)
999
+ );
1000
+ const history = [];
1001
+ let treeListings = 0;
1002
+ const readWhole = (file) => ledger.call("read", { path: file.path }, fileBody(file));
1003
+ const readListingPath = (file) => ledger.call(
1004
+ "read",
1005
+ { path: file.path, offset: 1, limit: CONSUMED_LISTING_SAMPLE_LINES },
1006
+ fileBody(file, 0, CONSUMED_LISTING_SAMPLE_LINES)
1007
+ );
1008
+ const readRange = (file) => {
1009
+ const limit = between(20, 80);
1010
+ const offset = between(1, Math.max(1, file.lines - limit));
1011
+ ledger.call("read", { path: file.path, offset, limit }, fileBody(file, offset - 1, limit));
1012
+ };
1013
+ const edit = (file) => {
1014
+ file.version += 1;
1015
+ ledger.call(
1016
+ "edit",
1017
+ { path: file.path, edits: [{ oldText: `v${file.version - 1}`, newText: `v${file.version}` }] },
1018
+ `Applied 1 edit to ${file.path}`
1019
+ );
1020
+ };
1021
+ const runTests = (focus, failing) => ledger.call(
1022
+ "bash",
1023
+ { command: `pytest ${focus.map((file) => file.path).join(" ")} -q` },
1024
+ testOutput(focus, failing),
1025
+ { isError: failing !== null }
1026
+ );
1027
+ for (let turn = 0; turn < spec.turns; turn += 1) {
1028
+ const script = pick(scriptNames);
1029
+ const returning = history.length > 0 && rnd() < spec.returnProbability;
1030
+ const focus = returning ? pick(history) : Array.from({ length: between(1, 3) }, zipf);
1031
+ if (!returning) history.push(focus);
1032
+ const names = focus.map((file) => file.path).join(", ");
1033
+ ledger.user(`Episode ${turn + 1}: ${script} ${names}`);
1034
+ ledger.assistant(`Plan for ${script}: start from ${names} and keep the residual bounded.`, `Working on ${names}.`);
1035
+ switch (script) {
1036
+ case "explore": {
1037
+ const dir = pick(DIRECTORIES);
1038
+ const tree = rnd() < 0.6;
1039
+ const discovered = tree ? repo.slice(0, between(24, repo.length)) : repo.filter((file) => file.path.startsWith(`${dir}/`));
1040
+ const consumeListing = tree && treeListings % 7 === 0;
1041
+ if (tree) treeListings += 1;
1042
+ const listed = consumeListing ? repo.slice(0, CONSUMED_LISTING_READ_LIMIT) : discovered;
1043
+ const root = tree ? "." : dir;
1044
+ ledger.call(
1045
+ rnd() < 0.5 ? "find" : "ls",
1046
+ { path: root },
1047
+ listed.map((file) => tree ? file.path : file.path.slice(dir.length + 1)).join("\n")
1048
+ );
1049
+ const term = pick(["residual", "checkpoint", "boundary", "tolerance"]);
1050
+ const matches = repo.filter(() => rnd() < 0.15).slice(0, 20);
1051
+ ledger.call(
1052
+ "grep",
1053
+ { pattern: term, path: "src" },
1054
+ matches.map(
1055
+ (file) => `${file.path}:${between(1, file.lines)}: ${term} = compute_${term}(state, dt, tol=1e-6) # ${file.path}`
1056
+ ).join("\n")
1057
+ );
1058
+ const walk = consumeListing ? listed : listed.slice(0, between(2, 4));
1059
+ for (const file of walk) (consumeListing ? readListingPath : readWhole)(file);
1060
+ for (const file of matches.slice(0, between(0, 2))) readWhole(file);
1061
+ break;
1062
+ }
1063
+ case "implement": {
1064
+ for (const file of focus) {
1065
+ readWhole(file);
1066
+ edit(file);
1067
+ if (rnd() < 0.7) readRange(file);
1068
+ }
1069
+ break;
1070
+ }
1071
+ case "validate": {
1072
+ const culprit = pick(focus);
1073
+ readWhole(culprit);
1074
+ runTests(focus, culprit);
1075
+ edit(culprit);
1076
+ runTests(focus, null);
1077
+ break;
1078
+ }
1079
+ case "analyze": {
1080
+ const lines = between(spec.simulationLines[0], spec.simulationLines[1]);
1081
+ const text = simulationOutput(lines, spec.seed + turn);
1082
+ const offload = lines > spec.offloadAfterLines;
1083
+ ledger.call(
1084
+ "bash",
1085
+ { command: `python scripts/run_sim.py --config configs/run.yaml --steps ${lines}` },
1086
+ offload ? `${text.split("\n").slice(0, spec.offloadAfterLines).join("\n")}
1087
+ [tool result truncated]` : text,
1088
+ { offload }
1089
+ );
1090
+ const results = pick(focus);
1091
+ readRange(results);
1092
+ if (rnd() < 0.5)
1093
+ ledger.call(
1094
+ "grep",
1095
+ { pattern: "energy", path: results.path },
1096
+ `${results.path}:${between(1, results.lines)}: energy = 0.999`
1097
+ );
1098
+ break;
1099
+ }
1100
+ }
1101
+ ledger.assistant(`Checked ${names}; residual acceptable for this episode.`, `Done with episode ${turn + 1}.`);
1102
+ }
1103
+ const entries = ledger.entries;
1104
+ return {
1105
+ id: `${spec.id}-${String(index).padStart(2, "0")}`,
1106
+ source: `synthetic:${spec.id}#${index}`,
1107
+ cwd,
1108
+ entries,
1109
+ turnCount: countReplayTurns(entries)
1110
+ };
1111
+ }
1112
+ function generateSyntheticCorpora(ids) {
1113
+ const traces = [];
1114
+ for (const id of ids) {
1115
+ const spec = syntheticCorpus(id);
1116
+ if (spec === void 0) throw new Error(`unknown synthetic corpus: ${id}`);
1117
+ for (let index = 0; index < spec.traces; index += 1) traces.push(generateSyntheticTrace(spec, index));
1118
+ }
1119
+ return { traces, cascade: { found: traces.length, unreadable: 0, filtered: {}, kept: traces.length } };
1120
+ }
1121
+
1122
+ // src/cli/context-working-set.ts
1123
+ var REPLAY_HELP = `Usage:
1124
+ clio-coder context replay (--sessions <path>... | --synthetic <corpus>...) [options]
1125
+
1126
+ Options:
1127
+ --sessions <path>... Clio session directories, sessions roots, or ledger JSONL files
1128
+ --synthetic <ids> comma-separated procedural corpora: ${SYNTHETIC_CORPORA.map((spec) => spec.id).join(",")}
1129
+ --policies <ids> comma-separated none,random,age-horizon,structural-v1,oracle
1130
+ --budgets <tokens> comma-separated budgets (default: 16000,32000,64000)
1131
+ --threshold <ratio> pressure threshold (default: 0.8)
1132
+ --target <ratio> post-eviction pressure target (default: 0.6)
1133
+ --protect-last-turns <n>
1134
+ protected recent turns (default: ${DEFAULT_WORKING_SET_SETTINGS.protectLastTurns})
1135
+ --min-evictable-tokens <n>
1136
+ minimum tool-result body tokens (default: ${DEFAULT_WORKING_SET_SETTINGS.minEvictableTokens})
1137
+ --seed <integer> deterministic random-policy seed (default: 0)
1138
+ --no-filter include every readable transcript
1139
+ --json <path> write the stable JSON report
1140
+ --md <path> write Markdown instead of printing it
1141
+ `;
1142
+ var WORKING_SET_HELP = `Usage:
1143
+ clio-coder context working-set --session <id|path>
1144
+
1145
+ Print the durable working-set fold and path-index summary for one Clio session.
1146
+ `;
1147
+ var REPLAY_SUMMARY_TOKENS = 1500;
1148
+ var POLICY_IDS = ["none", "random", "age-horizon", "structural-v1", "oracle"];
1149
+ var CliUsageError = class extends Error {
1150
+ };
1151
+ function commaValues(value, flag) {
1152
+ const values = value.split(",").map((entry) => entry.trim()).filter((entry) => entry.length > 0);
1153
+ if (values.length === 0) throw new CliUsageError(`${flag} requires at least one value`);
1154
+ return [...new Set(values)];
1155
+ }
1156
+ function numberValue(value, flag) {
1157
+ const parsed = Number(value);
1158
+ if (!Number.isFinite(parsed)) throw new CliUsageError(`${flag} requires a finite number`);
1159
+ return parsed;
1160
+ }
1161
+ function requiredValue(args, index, flag) {
1162
+ const value = args[index + 1];
1163
+ if (value === void 0 || value.startsWith("--")) throw new CliUsageError(`${flag} requires a value`);
1164
+ return value;
1165
+ }
1166
+ function policyResolves(id) {
1167
+ if (id === "none" || id === "random" || id === "oracle") return true;
1168
+ try {
1169
+ resolveWorkingSetPolicy(id);
1170
+ return true;
1171
+ } catch {
1172
+ return false;
1173
+ }
1174
+ }
1175
+ function defaultPolicies() {
1176
+ return POLICY_IDS.filter(policyResolves);
1177
+ }
1178
+ function parseReplayArgs(args) {
1179
+ const parsed = {
1180
+ sessions: [],
1181
+ policies: defaultPolicies(),
1182
+ budgets: [16e3, 32e3, 64e3],
1183
+ threshold: 0.8,
1184
+ target: 0.6,
1185
+ protectLastTurns: DEFAULT_WORKING_SET_SETTINGS.protectLastTurns,
1186
+ minEvictableTokens: DEFAULT_WORKING_SET_SETTINGS.minEvictableTokens,
1187
+ seed: 0,
1188
+ synthetic: [],
1189
+ noFilter: false
1190
+ };
1191
+ let policiesExplicit = false;
1192
+ for (let index = 0; index < args.length; index += 1) {
1193
+ const arg = args[index];
1194
+ if (arg === "--no-filter") {
1195
+ parsed.noFilter = true;
1196
+ continue;
1197
+ }
1198
+ if (arg === "--sessions") {
1199
+ let consumed = 0;
1200
+ while (index + 1 < args.length && !args[index + 1]?.startsWith("--")) {
1201
+ parsed.sessions.push(args[index + 1]);
1202
+ index += 1;
1203
+ consumed += 1;
1204
+ }
1205
+ if (consumed === 0) throw new CliUsageError("--sessions requires at least one path");
1206
+ continue;
1207
+ }
1208
+ if (arg === "--policies" || arg === "--budgets" || arg === "--synthetic" || arg === "--threshold" || arg === "--target" || arg === "--protect-last-turns" || arg === "--min-evictable-tokens" || arg === "--seed") {
1209
+ const value = requiredValue(args, index, arg);
1210
+ index += 1;
1211
+ if (arg === "--policies") {
1212
+ const values = commaValues(value, arg);
1213
+ const unknown = values.filter((entry) => !POLICY_IDS.includes(entry));
1214
+ if (unknown.length > 0) throw new CliUsageError(`unknown replay policy: ${unknown.join(", ")}`);
1215
+ parsed.policies = values;
1216
+ policiesExplicit = true;
1217
+ } else if (arg === "--budgets") {
1218
+ parsed.budgets = commaValues(value, arg).map((entry) => {
1219
+ const budget = numberValue(entry, arg);
1220
+ if (!Number.isInteger(budget) || budget <= 0) {
1221
+ throw new CliUsageError("--budgets values must be positive integers");
1222
+ }
1223
+ return budget;
1224
+ });
1225
+ } else if (arg === "--synthetic") {
1226
+ const values = commaValues(value, arg);
1227
+ const known = SYNTHETIC_CORPORA.map((spec) => spec.id);
1228
+ const unknown = values.filter((entry) => !known.includes(entry));
1229
+ if (unknown.length > 0) throw new CliUsageError(`unknown synthetic corpus: ${unknown.join(", ")}`);
1230
+ parsed.synthetic = values;
1231
+ } else if (arg === "--threshold") {
1232
+ parsed.threshold = numberValue(value, arg);
1233
+ if (parsed.threshold <= 0 || parsed.threshold > 1) {
1234
+ throw new CliUsageError("--threshold must be greater than 0 and at most 1");
1235
+ }
1236
+ } else if (arg === "--target") {
1237
+ parsed.target = numberValue(value, arg);
1238
+ if (parsed.target <= 0 || parsed.target >= 1) {
1239
+ throw new CliUsageError("--target must be greater than 0 and less than 1");
1240
+ }
1241
+ } else if (arg === "--protect-last-turns") {
1242
+ parsed.protectLastTurns = numberValue(value, arg);
1243
+ if (!Number.isInteger(parsed.protectLastTurns) || parsed.protectLastTurns < 1) {
1244
+ throw new CliUsageError("--protect-last-turns must be an integer at least 1");
1245
+ }
1246
+ } else if (arg === "--min-evictable-tokens") {
1247
+ parsed.minEvictableTokens = numberValue(value, arg);
1248
+ if (!Number.isInteger(parsed.minEvictableTokens) || parsed.minEvictableTokens < 0) {
1249
+ throw new CliUsageError("--min-evictable-tokens must be a non-negative integer");
1250
+ }
1251
+ } else {
1252
+ parsed.seed = numberValue(value, arg);
1253
+ if (!Number.isInteger(parsed.seed)) throw new CliUsageError("--seed must be an integer");
1254
+ }
1255
+ continue;
1256
+ }
1257
+ if (arg === "--json" || arg === "--md") {
1258
+ const value = requiredValue(args, index, arg);
1259
+ index += 1;
1260
+ if (arg === "--json") parsed.jsonPath = value;
1261
+ else parsed.markdownPath = value;
1262
+ continue;
1263
+ }
1264
+ throw new CliUsageError(`unknown flag ${arg}`);
1265
+ }
1266
+ if (parsed.sessions.length === 0 && parsed.synthetic.length === 0) {
1267
+ throw new CliUsageError("--sessions or --synthetic is required");
1268
+ }
1269
+ if (parsed.target >= parsed.threshold) throw new CliUsageError("--target must be less than --threshold");
1270
+ if (policiesExplicit) {
1271
+ const unavailable = parsed.policies.filter((id) => !policyResolves(id));
1272
+ if (unavailable.length > 0) {
1273
+ throw new CliUsageError(`replay policy is not available in this build: ${unavailable.join(", ")}`);
1274
+ }
1275
+ }
1276
+ return parsed;
1277
+ }
1278
+ function policyForTrace(id, graph, seed) {
1279
+ if (id === "none") return nonePolicy;
1280
+ if (id === "random") return makeRandomPolicy(seed);
1281
+ if (id === "oracle") return makeOraclePolicy(graph);
1282
+ return resolveWorkingSetPolicy(id);
1283
+ }
1284
+ function gitSha() {
1285
+ try {
1286
+ return execFileSync("git", ["rev-parse", "HEAD"], {
1287
+ cwd: process.cwd(),
1288
+ encoding: "utf8",
1289
+ stdio: ["ignore", "pipe", "ignore"]
1290
+ }).trim();
1291
+ } catch {
1292
+ return null;
1293
+ }
1294
+ }
1295
+ function exactCommandLine() {
1296
+ return [process.execPath, ...process.execArgv, ...process.argv.slice(1)];
1297
+ }
1298
+ async function writeOutput(path, contents) {
1299
+ const output = resolve2(path);
1300
+ await mkdir(dirname2(output), { recursive: true });
1301
+ await writeFile(output, contents, "utf8");
1302
+ return output;
1303
+ }
1304
+ function cascadeLine(cascade) {
1305
+ const filtered = Object.entries(cascade.filtered).map(([stage, count]) => `${stage}=${count}`).join(" ");
1306
+ return `cascade found=${cascade.found} unreadable=${cascade.unreadable} ${filtered} kept=${cascade.kept}`;
1307
+ }
1308
+ async function runContextReplayCommand(args) {
1309
+ if (args.includes("--help") || args.includes("-h")) {
1310
+ process.stdout.write(REPLAY_HELP);
1311
+ return 0;
1312
+ }
1313
+ let parsed;
1314
+ try {
1315
+ parsed = parseReplayArgs(args);
1316
+ } catch (error) {
1317
+ process.stderr.write(
1318
+ `clio-coder context replay: ${error instanceof Error ? error.message : String(error)}
1319
+ ${REPLAY_HELP}`
1320
+ );
1321
+ return 2;
1322
+ }
1323
+ try {
1324
+ const ledgers = await loadClioTraces(parsed.sessions, { filter: parsed.noFilter ? false : {} });
1325
+ const synthetic = generateSyntheticCorpora(parsed.synthetic);
1326
+ const loaded = {
1327
+ traces: [...ledgers.traces, ...synthetic.traces],
1328
+ cascade: {
1329
+ found: ledgers.cascade.found + synthetic.cascade.found,
1330
+ unreadable: ledgers.cascade.unreadable,
1331
+ filtered: ledgers.cascade.filtered,
1332
+ kept: ledgers.cascade.kept + synthetic.cascade.kept
1333
+ }
1334
+ };
1335
+ if (loaded.traces.length === 0) {
1336
+ process.stderr.write(`clio-coder context replay: no traces to replay (${cascadeLine(loaded.cascade)})
1337
+ `);
1338
+ return 1;
1339
+ }
1340
+ const indexed = loaded.traces.map((trace) => {
1341
+ const index = buildPathIndex(trace.entries, { cwd: trace.cwd });
1342
+ return { trace, index, graph: buildReferenceGraph(trace, index) };
1343
+ });
1344
+ const settings = {
1345
+ ...DEFAULT_WORKING_SET_SETTINGS,
1346
+ target: parsed.target,
1347
+ protectLastTurns: parsed.protectLastTurns,
1348
+ minEvictableTokens: parsed.minEvictableTokens
1349
+ };
1350
+ const results = [];
1351
+ for (const budgetTokens of parsed.budgets) {
1352
+ for (const policyId of parsed.policies) {
1353
+ const measurements = indexed.map(({ trace, index, graph }) => ({
1354
+ trace,
1355
+ index,
1356
+ graph,
1357
+ replay: replayTrace(trace, policyForTrace(policyId, graph, parsed.seed), {
1358
+ policyId,
1359
+ budgetTokens,
1360
+ threshold: parsed.threshold,
1361
+ target: parsed.target,
1362
+ settings,
1363
+ seed: parsed.seed,
1364
+ summaries: { keepRecentTokens: DEFAULT_KEEP_RECENT_TOKENS, summaryTokens: REPLAY_SUMMARY_TOKENS }
1365
+ })
1366
+ }));
1367
+ results.push({ budgetTokens, policyId, metrics: aggregateReplayMetrics(measurements) });
1368
+ }
1369
+ }
1370
+ const report = {
1371
+ config: {
1372
+ policies: parsed.policies,
1373
+ budgets: parsed.budgets,
1374
+ threshold: parsed.threshold,
1375
+ target: parsed.target,
1376
+ seed: parsed.seed,
1377
+ corpus: [...parsed.sessions.length > 0 ? ["ledgers"] : [], ...parsed.synthetic],
1378
+ filter: parsed.noFilter ? "none" : "default",
1379
+ settings
1380
+ },
1381
+ cascade: loaded.cascade,
1382
+ results,
1383
+ gitSha: gitSha(),
1384
+ commandLine: exactCommandLine()
1385
+ };
1386
+ const markdown = renderReplayMarkdown(report);
1387
+ if (parsed.markdownPath === void 0) process.stdout.write(markdown);
1388
+ else {
1389
+ const path = await writeOutput(parsed.markdownPath, markdown);
1390
+ process.stdout.write(`${cascadeLine(loaded.cascade)}
1391
+ markdown ${path}
1392
+ `);
1393
+ }
1394
+ if (parsed.jsonPath !== void 0) {
1395
+ const path = await writeOutput(parsed.jsonPath, renderReplayJson(report));
1396
+ process.stdout.write(`json ${path}
1397
+ `);
1398
+ }
1399
+ return 0;
1400
+ } catch (error) {
1401
+ process.stderr.write(`clio-coder context replay failed: ${error instanceof Error ? error.message : String(error)}
1402
+ `);
1403
+ return 1;
1404
+ }
1405
+ }
1406
+ async function sessionPath(value) {
1407
+ const candidate = resolve2(value);
1408
+ try {
1409
+ const facts = await stat2(candidate);
1410
+ if (facts.isDirectory()) return join2(candidate, "current.jsonl");
1411
+ if (facts.isFile()) return candidate;
1412
+ } catch {
1413
+ }
1414
+ try {
1415
+ assertSafeId(value, "session");
1416
+ } catch (error) {
1417
+ throw new CliUsageError(error instanceof Error ? error.message : String(error));
1418
+ }
1419
+ const sessionsRoot = join2(clioStatePath(), "sessions");
1420
+ let cwdHashes;
1421
+ try {
1422
+ cwdHashes = await readdir2(sessionsRoot);
1423
+ } catch {
1424
+ throw new Error(`session not found: ${value}`);
1425
+ }
1426
+ for (const cwdHash of cwdHashes.sort()) {
1427
+ const current = join2(sessionsRoot, cwdHash, value, "current.jsonl");
1428
+ try {
1429
+ if ((await stat2(current)).isFile()) return current;
1430
+ } catch {
1431
+ }
1432
+ }
1433
+ throw new Error(`session not found: ${value}`);
1434
+ }
1435
+ async function pinnedLeafForSession(source) {
1436
+ try {
1437
+ const raw = await readFile2(join2(dirname2(source), "meta.json"), "utf8");
1438
+ const value = JSON.parse(raw);
1439
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
1440
+ const pinned = value.pinnedLeafTurnId;
1441
+ return typeof pinned === "string" && pinned.length > 0 ? pinned : void 0;
1442
+ } catch {
1443
+ return void 0;
1444
+ }
1445
+ }
1446
+ async function sessionCwdForSession(source) {
1447
+ try {
1448
+ const raw = await readFile2(join2(dirname2(source), "meta.json"), "utf8");
1449
+ const value = JSON.parse(raw);
1450
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return null;
1451
+ const cwd = value.cwd;
1452
+ return typeof cwd === "string" && cwd.length > 0 ? cwd : null;
1453
+ } catch {
1454
+ return null;
1455
+ }
1456
+ }
1457
+ function formatWorkingSet(trace) {
1458
+ const view = foldWorkingSet(trace.entries);
1459
+ const index = buildPathIndex(trace.entries, { cwd: trace.cwd });
1460
+ const graph = buildReferenceGraph(trace, index);
1461
+ const evictedTokens = [...view.evicted.values()].reduce((sum, state) => sum + state.tokensFreed, 0);
1462
+ const churn = view.itemsEvicted === 0 ? "n/a" : (view.recalls / view.itemsEvicted).toFixed(3);
1463
+ const opCounts = /* @__PURE__ */ new Map();
1464
+ for (const observation of index.observations) {
1465
+ opCounts.set(observation.op, (opCounts.get(observation.op) ?? 0) + 1);
1466
+ }
1467
+ const rewrittenPaths = /* @__PURE__ */ new Set();
1468
+ for (const edge of graph.edges) {
1469
+ if (edge.kind !== "file_rewrite") continue;
1470
+ const path = index.byRef.get(edge.from)?.path;
1471
+ if (path) rewrittenPaths.add(path);
1472
+ }
1473
+ const lines = [
1474
+ `session: ${trace.id}`,
1475
+ `source: ${trace.source}`,
1476
+ "working set:",
1477
+ ` policy: ${view.lastPolicyId ?? "none"}`,
1478
+ ` eviction events: ${view.evictionEvents}`,
1479
+ ` evicted refs: ${view.evicted.size}`,
1480
+ ` items evicted: ${view.itemsEvicted}`,
1481
+ ` evicted tokens: ${evictedTokens}`,
1482
+ ` recalls: ${view.recalls}`,
1483
+ ` churn: ${churn}`,
1484
+ " refs:",
1485
+ ...[...view.evicted.entries()].length === 0 ? [" none"] : [...view.evicted.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([ref, state]) => ` ${ref} reason=${state.reason} by=${state.by ?? "-"} tokens=${state.tokensFreed}`),
1486
+ "path index:",
1487
+ ` observations: ${index.observations.length}`,
1488
+ ` ops: ${[...opCounts.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([op, count]) => `${op}=${count}`).join(", ") || "none"}`,
1489
+ ` paths with rewrites: ${rewrittenPaths.size}`,
1490
+ ...[...rewrittenPaths].sort().map((path) => ` ${path}`),
1491
+ ""
1492
+ ];
1493
+ return lines.join("\n");
1494
+ }
1495
+ async function runContextWorkingSetCommand(args) {
1496
+ if (args.includes("--help") || args.includes("-h")) {
1497
+ process.stdout.write(WORKING_SET_HELP);
1498
+ return 0;
1499
+ }
1500
+ let session;
1501
+ for (let index = 0; index < args.length; index += 1) {
1502
+ const arg = args[index];
1503
+ if (arg === "--session") {
1504
+ try {
1505
+ session = requiredValue(args, index, arg);
1506
+ } catch (error) {
1507
+ process.stderr.write(
1508
+ `clio-coder context working-set: ${error instanceof Error ? error.message : String(error)}
1509
+ ${WORKING_SET_HELP}`
1510
+ );
1511
+ return 2;
1512
+ }
1513
+ index += 1;
1514
+ continue;
1515
+ }
1516
+ process.stderr.write(`clio-coder context working-set: unknown flag ${arg}
1517
+ ${WORKING_SET_HELP}`);
1518
+ return 2;
1519
+ }
1520
+ if (session === void 0) {
1521
+ process.stderr.write(`clio-coder context working-set: --session is required
1522
+ ${WORKING_SET_HELP}`);
1523
+ return 2;
1524
+ }
1525
+ try {
1526
+ const source = await sessionPath(session);
1527
+ const raw = await readFile2(source, "utf8");
1528
+ const parsed = parseSessionEntries(raw, source);
1529
+ if (parsed.errors.length > 0) throw new Error(parsed.errors.join("; "));
1530
+ const entries = filterEntriesToActivePath(parsed.entries, await pinnedLeafForSession(source));
1531
+ const cwd = await sessionCwdForSession(source);
1532
+ process.stdout.write(
1533
+ formatWorkingSet({
1534
+ id: basename2(dirname2(source)),
1535
+ source,
1536
+ cwd,
1537
+ entries,
1538
+ turnCount: buildPathIndex(entries, { cwd }).turnCount
1539
+ })
1540
+ );
1541
+ return 0;
1542
+ } catch (error) {
1543
+ if (error instanceof CliUsageError) {
1544
+ process.stderr.write(`clio-coder context working-set: ${error.message}
1545
+ ${WORKING_SET_HELP}`);
1546
+ return 2;
1547
+ }
1548
+ process.stderr.write(
1549
+ `clio-coder context working-set failed: ${error instanceof Error ? error.message : String(error)}
1550
+ `
1551
+ );
1552
+ return 1;
1553
+ }
1554
+ }
1555
+ export {
1556
+ runContextReplayCommand,
1557
+ runContextWorkingSetCommand
1558
+ };
1559
+ //# sourceMappingURL=context-working-set-2GLBVF7L.js.map