@iowarp/clio-coder 0.4.9 → 0.5.0

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 (1172) hide show
  1. package/.claude-plugin/marketplace.json +11 -3
  2. package/CHANGELOG.md +153 -0
  3. package/CODE_OF_CONDUCT.md +10 -0
  4. package/CONTRIBUTING.md +208 -382
  5. package/NOTICE +8 -2
  6. package/README.md +199 -418
  7. package/ROADMAP.md +82 -0
  8. package/SECURITY.md +14 -11
  9. package/dist/acp-KS7ARGV6.js +132 -0
  10. package/dist/agents-YOGJ2YEJ.js +163 -0
  11. package/dist/assets/codewiki.json +1 -1
  12. package/dist/auth-CEDCO6O6.js +557 -0
  13. package/dist/background-YWTBPSQU.js +39 -0
  14. package/dist/builtins-GDYO4RTR.js +23 -0
  15. package/dist/chunk-27YTM2CV.js +175 -0
  16. package/dist/chunk-2AF6YC7Q.js +75 -0
  17. package/dist/chunk-2DTIWSAW.js +381 -0
  18. package/dist/chunk-2EMLKSCX.js +262 -0
  19. package/dist/chunk-2OJ3YZQP.js +665 -0
  20. package/dist/chunk-2VLYHHFT.js +35 -0
  21. package/dist/chunk-2WVPJF3Z.js +204 -0
  22. package/dist/chunk-33OASOS6.js +176 -0
  23. package/dist/chunk-3BD2LXYJ.js +19 -0
  24. package/dist/chunk-3JHUFKG7.js +30 -0
  25. package/dist/chunk-3JLTRPN7.js +711 -0
  26. package/dist/chunk-3LT34CAM.js +2796 -0
  27. package/dist/chunk-3O5JWP4L.js +1670 -0
  28. package/dist/chunk-3UW3KU4A.js +21 -0
  29. package/dist/chunk-4A6YRGV4.js +569 -0
  30. package/dist/chunk-4D2BRCZ3.js +67 -0
  31. package/dist/chunk-4SYHGVDE.js +668 -0
  32. package/dist/chunk-4VDHLCF5.js +66 -0
  33. package/dist/chunk-4WOOTKFD.js +637 -0
  34. package/dist/chunk-4WV4PI66.js +80 -0
  35. package/dist/chunk-53OXPRI6.js +195 -0
  36. package/dist/chunk-55RMDDFM.js +1347 -0
  37. package/dist/chunk-56XP4FJU.js +2025 -0
  38. package/dist/chunk-5B3RTYAK.js +123 -0
  39. package/dist/chunk-5CD243WE.js +45 -0
  40. package/dist/chunk-5JQR5B4D.js +709 -0
  41. package/dist/chunk-5KQEUIWM.js +597 -0
  42. package/dist/chunk-5LP5FNNR.js +915 -0
  43. package/dist/chunk-62UK7AGW.js +9344 -0
  44. package/dist/chunk-6CTHLZFB.js +563 -0
  45. package/dist/chunk-6EJYVCTN.js +23 -0
  46. package/dist/chunk-6OWUM2NC.js +12289 -0
  47. package/dist/chunk-6RJMYYIE.js +1023 -0
  48. package/dist/chunk-6W75D37F.js +643 -0
  49. package/dist/chunk-733ZBT5P.js +1721 -0
  50. package/dist/chunk-77DCC6JZ.js +3710 -0
  51. package/dist/chunk-7QXCO3AF.js +156 -0
  52. package/dist/chunk-7RET77VB.js +481 -0
  53. package/dist/chunk-A4MVRV4C.js +65 -0
  54. package/dist/chunk-ALJWT6O6.js +93 -0
  55. package/dist/chunk-AVSR2HKI.js +232 -0
  56. package/dist/chunk-B7GY6QER.js +42 -0
  57. package/dist/chunk-BFOSV5EZ.js +178 -0
  58. package/dist/chunk-BGOIM7NB.js +103 -0
  59. package/dist/chunk-BJH6WFIB.js +372 -0
  60. package/dist/chunk-BOBCCDJ6.js +1533 -0
  61. package/dist/chunk-BRCOSE7O.js +117 -0
  62. package/dist/chunk-BYFHHCFV.js +601 -0
  63. package/dist/chunk-C2CPOIH2.js +83 -0
  64. package/dist/chunk-C7AQTPCE.js +694 -0
  65. package/dist/chunk-CBAQPTDU.js +165 -0
  66. package/dist/chunk-CDQ2UC6W.js +125 -0
  67. package/dist/chunk-CN6SW5DC.js +177 -0
  68. package/dist/chunk-CRHPCPZP.js +132 -0
  69. package/dist/chunk-CTFPFW3H.js +44 -0
  70. package/dist/chunk-D3KWFOUT.js +103 -0
  71. package/dist/chunk-D65E25JG.js +185 -0
  72. package/dist/chunk-DCGHJQ2U.js +236 -0
  73. package/dist/chunk-DE2LU267.js +106 -0
  74. package/dist/chunk-DF6PI6GN.js +97 -0
  75. package/dist/chunk-DGC6X6XR.js +53 -0
  76. package/dist/chunk-DOUISWEE.js +526 -0
  77. package/dist/chunk-DR3TAEUA.js +188 -0
  78. package/dist/chunk-DVTBERFY.js +33 -0
  79. package/dist/chunk-DXSETN72.js +1051 -0
  80. package/dist/chunk-DZLR4UEH.js +128 -0
  81. package/dist/chunk-E6IPKW2E.js +77 -0
  82. package/dist/chunk-EG4ARXPC.js +139 -0
  83. package/dist/chunk-EKV4UBCM.js +652 -0
  84. package/dist/chunk-EOJPDNUP.js +1325 -0
  85. package/dist/chunk-EX57VVWW.js +4157 -0
  86. package/dist/chunk-EYTLV3W3.js +5937 -0
  87. package/dist/chunk-EZD2BXGP.js +475 -0
  88. package/dist/chunk-EZDCA34W.js +314 -0
  89. package/dist/chunk-FD2I4KBR.js +33 -0
  90. package/dist/chunk-FD3IAHQM.js +27 -0
  91. package/dist/chunk-FFYTC2KQ.js +416 -0
  92. package/dist/chunk-FGSQHUCK.js +110 -0
  93. package/dist/chunk-GCQFN7YI.js +32 -0
  94. package/dist/chunk-GGPF6LLE.js +38 -0
  95. package/dist/chunk-GGWI3OVM.js +215 -0
  96. package/dist/chunk-GLIQT7SU.js +172 -0
  97. package/dist/chunk-GN7QBEEI.js +95 -0
  98. package/dist/chunk-GRHOXDKB.js +1104 -0
  99. package/dist/chunk-HMN2C6YL.js +54 -0
  100. package/dist/chunk-HOEDA42N.js +310 -0
  101. package/dist/chunk-HOYZUKG7.js +192 -0
  102. package/dist/chunk-HQVN7G4F.js +1021 -0
  103. package/dist/chunk-HSQQFDB3.js +519 -0
  104. package/dist/chunk-I4ELN5BX.js +47 -0
  105. package/dist/chunk-I4Y4WKZR.js +386 -0
  106. package/dist/chunk-IFPDAD7R.js +797 -0
  107. package/dist/chunk-IN7DGBVS.js +582 -0
  108. package/dist/chunk-ISHUS7HC.js +396 -0
  109. package/dist/chunk-JPXLJSGR.js +191 -0
  110. package/dist/chunk-JQCLXSFI.js +69 -0
  111. package/dist/chunk-KBUTSJSR.js +61 -0
  112. package/dist/chunk-KW5HXKLJ.js +56 -0
  113. package/dist/chunk-L4APUGCT.js +139 -0
  114. package/dist/chunk-L7G7K4I2.js +505 -0
  115. package/dist/chunk-LAR7DX5E.js +1840 -0
  116. package/dist/chunk-LAVUQX3B.js +462 -0
  117. package/dist/chunk-LJRBX7QR.js +116 -0
  118. package/dist/chunk-LNOXCGN2.js +1864 -0
  119. package/dist/chunk-LTWH2ACR.js +23002 -0
  120. package/dist/chunk-LYJJ6546.js +661 -0
  121. package/dist/chunk-M2IPMWCN.js +457 -0
  122. package/dist/chunk-MGLRTOCK.js +101 -0
  123. package/dist/chunk-MZF5IKZT.js +160 -0
  124. package/dist/chunk-N24R6KWS.js +386 -0
  125. package/dist/chunk-NASYVWDB.js +604 -0
  126. package/dist/chunk-NBXFPI7U.js +195 -0
  127. package/dist/chunk-NDPF2N2L.js +400 -0
  128. package/dist/chunk-NFSK2VNU.js +446 -0
  129. package/dist/chunk-NG3QQSXY.js +43 -0
  130. package/dist/chunk-NOCSM22Y.js +63 -0
  131. package/dist/chunk-NVPXXW2H.js +1143 -0
  132. package/dist/chunk-O63U2I6I.js +30 -0
  133. package/dist/chunk-OJXOA6YU.js +98 -0
  134. package/dist/chunk-OPD7GL6F.js +1196 -0
  135. package/dist/chunk-OQ2EOAHA.js +14399 -0
  136. package/dist/chunk-OV62D6KO.js +688 -0
  137. package/dist/chunk-OZ76TLGU.js +740 -0
  138. package/dist/chunk-P4GNZPXO.js +1156 -0
  139. package/dist/chunk-PS6JAWJZ.js +78 -0
  140. package/dist/chunk-PXRCXGLK.js +1865 -0
  141. package/dist/chunk-QDUUOZ3S.js +108 -0
  142. package/dist/chunk-QG6I2T5E.js +1416 -0
  143. package/dist/chunk-QHSBROEW.js +308 -0
  144. package/dist/chunk-QNUQ7K7D.js +46 -0
  145. package/dist/chunk-QZTTRSJE.js +333 -0
  146. package/dist/chunk-R2UUNSNQ.js +1605 -0
  147. package/dist/chunk-R7FGRZNF.js +1794 -0
  148. package/dist/chunk-RNDCROSG.js +199 -0
  149. package/dist/chunk-S36CXHO2.js +302 -0
  150. package/dist/chunk-SJGS3GDI.js +575 -0
  151. package/dist/chunk-SQZHXUB3.js +510 -0
  152. package/dist/chunk-SUTLW6ND.js +686 -0
  153. package/dist/chunk-SYF7FVBL.js +179 -0
  154. package/dist/chunk-T2MDZES3.js +1577 -0
  155. package/dist/chunk-T33IYTZM.js +1146 -0
  156. package/dist/chunk-TDGYTWM6.js +49 -0
  157. package/dist/chunk-TGL5FZVD.js +132 -0
  158. package/dist/chunk-TGWZXJ7L.js +1205 -0
  159. package/dist/chunk-TKDRT2DF.js +114 -0
  160. package/dist/chunk-TV2EBCSQ.js +152 -0
  161. package/dist/chunk-U26XXPJS.js +367 -0
  162. package/dist/chunk-U5QU5ZOD.js +419 -0
  163. package/dist/chunk-U6YTUVOX.js +1011 -0
  164. package/dist/chunk-UCINIRHW.js +188 -0
  165. package/dist/chunk-UJD5MPP6.js +52 -0
  166. package/dist/chunk-URCXX7WJ.js +146 -0
  167. package/dist/chunk-UX2L5CUD.js +898 -0
  168. package/dist/chunk-UZVYEF57.js +114 -0
  169. package/dist/chunk-V35KZDUZ.js +218 -0
  170. package/dist/chunk-VESL6DQY.js +1058 -0
  171. package/dist/chunk-VKHLUZNO.js +986 -0
  172. package/dist/chunk-VOYUCAQF.js +584 -0
  173. package/dist/chunk-VYRQHORQ.js +414 -0
  174. package/dist/chunk-W53XSRQE.js +245 -0
  175. package/dist/chunk-X4CEFOSG.js +226 -0
  176. package/dist/chunk-XDHUDE5K.js +380 -0
  177. package/dist/chunk-XISLDHEL.js +1290 -0
  178. package/dist/chunk-XM34YQ2Y.js +169 -0
  179. package/dist/chunk-XMDBTYCH.js +661 -0
  180. package/dist/chunk-XS2QPZJE.js +449 -0
  181. package/dist/chunk-YBUECLAF.js +618 -0
  182. package/dist/chunk-YQ6XEFVK.js +332 -0
  183. package/dist/chunk-YYLCPDCC.js +990 -0
  184. package/dist/chunk-Z4GLJ6J4.js +1035 -0
  185. package/dist/chunk-ZARZ4POR.js +210 -0
  186. package/dist/chunk-ZJPORZTC.js +119 -0
  187. package/dist/chunk-ZNUZ3EXD.js +243 -0
  188. package/dist/chunk-ZPST2KQO.js +49 -0
  189. package/dist/chunk-ZR5YA6ZF.js +512 -0
  190. package/dist/chunk-ZU4JPCPR.js +319 -0
  191. package/dist/chunk-ZUKUCZYZ.js +39 -0
  192. package/dist/cli/index.js +56 -45
  193. package/dist/clio-K2PBVCEM.js +27 -0
  194. package/dist/clio-context-tools-GR4OHFSO.js +145 -0
  195. package/dist/code-nav-4X3OI6DK.js +715 -0
  196. package/dist/codewiki/build-worker.js +4 -4
  197. package/dist/compile-cache-YRB6QRO7.js +18 -0
  198. package/dist/components-RQOJ6NUR.js +675 -0
  199. package/dist/config-Q5J7UBAB.js +291 -0
  200. package/dist/config-XE7XYZLU.js +38 -0
  201. package/dist/config-graph-P3555574.js +175 -0
  202. package/dist/configure-KIJ32ZO6.js +104 -0
  203. package/dist/context-LFBQOSXT.js +344 -0
  204. package/dist/context-NNLBES2Y.js +82 -0
  205. package/dist/context-WBH3KSVR.js +302 -0
  206. package/dist/context-clear-YOHMQ6SQ.js +208 -0
  207. package/dist/context-index-X2N5UAIF.js +120 -0
  208. package/dist/context-map-HOSMGUG2.js +555 -0
  209. package/dist/context-working-set-MRAEVDNV.js +1564 -0
  210. package/dist/data-tool-JJPBGMQJ.js +2986 -0
  211. package/dist/detail-RHJOTGN4.js +139 -0
  212. package/dist/dispatch-runner-NC7PYNIO.js +2477 -0
  213. package/dist/docs-K4GBWRUX.js +342 -0
  214. package/dist/doctor-S5KZ2GTN.js +1138 -0
  215. package/dist/doctor-deep-2EJQSHIZ.js +130 -0
  216. package/dist/domain-loader-MB34FDPD.js +13 -0
  217. package/dist/eval-3D6M36N7.js +5220 -0
  218. package/dist/eval-inventory-SM3HNM47.js +260 -0
  219. package/dist/evals-FO6JEUCN.js +104 -0
  220. package/dist/evidence-6IYN52ET.js +262 -0
  221. package/dist/evidence-JVECPI3F.js +250 -0
  222. package/dist/evidence-XNVPPLVK.js +410 -0
  223. package/dist/evolve-TLPUDJDM.js +634 -0
  224. package/dist/extensions-ROZJ5X3J.js +311 -0
  225. package/dist/fleet-6RJWIOEO.js +284 -0
  226. package/dist/fleet-WKVBF5SZ.js +942 -0
  227. package/dist/fleet-commands-L6WFT7KZ.js +76 -0
  228. package/dist/fleet-decisions-BTQMWU5A.js +55 -0
  229. package/dist/fleet-graph-553DZ67Q.js +141 -0
  230. package/dist/fleet-inspect-236FZPRB.js +329 -0
  231. package/dist/fleet-new-CKUXP3CO.js +48 -0
  232. package/dist/fleet-preflight-NZQHABWO.js +95 -0
  233. package/dist/fleet-validate-7NLAE26R.js +96 -0
  234. package/dist/fleet-verify-E3RO6A5W.js +226 -0
  235. package/dist/fleet-view-KMZQY7YJ.js +144 -0
  236. package/dist/gui/client/assets/abnfDiagram-VCTEODGH-DPBWQwNn.js +1 -0
  237. package/dist/gui/client/assets/architecture-7GRP2DOG-D1w8FrFW.js +1 -0
  238. package/dist/gui/client/assets/architectureDiagram-5GKGNRK7-CVPgKd1-.js +36 -0
  239. package/dist/gui/client/assets/blockDiagram-I7D4REHJ-BLmnqkK5.js +129 -0
  240. package/dist/gui/client/assets/c4Diagram-7LVT6UL2-4AU9cfM7.js +38 -0
  241. package/dist/gui/client/assets/channel-DwFZ0m8S.js +1 -0
  242. package/dist/gui/client/assets/chunk-4HAMMTFA-EOWkKCav.js +62 -0
  243. package/dist/gui/client/assets/chunk-75Z2AOVW-CygeoIMl.js +2 -0
  244. package/dist/gui/client/assets/chunk-DU6HZSFF-s27fViLb.js +125 -0
  245. package/dist/gui/client/assets/chunk-F27PBJKO-BrHvwLsZ.js +1 -0
  246. package/dist/gui/client/assets/chunk-GMAD6QVW-DzPh-7jt.js +72 -0
  247. package/dist/gui/client/assets/chunk-GVQU2GXP-pIaQkIzm.js +1 -0
  248. package/dist/gui/client/assets/chunk-IMKFNOWR-BGJVE_Br.js +231 -0
  249. package/dist/gui/client/assets/chunk-L3NEJ4N5-B3YLuhww.js +1 -0
  250. package/dist/gui/client/assets/chunk-OSK3NFVY-BRj61HHU.js +10 -0
  251. package/dist/gui/client/assets/chunk-P2QGCYS3-Sno90KxP.js +1 -0
  252. package/dist/gui/client/assets/chunk-POPQ4Y6H-Cw8NTbxr.js +1 -0
  253. package/dist/gui/client/assets/chunk-PWAF6VOD-BIhHgz37.js +1 -0
  254. package/dist/gui/client/assets/chunk-SHT3W25Y-Cqv7npBj.js +168 -0
  255. package/dist/gui/client/assets/chunk-SVP7TREG-Hxzl6Dee.js +88 -0
  256. package/dist/gui/client/assets/chunk-TICWLB2K-CIFVyVP2.js +206 -0
  257. package/dist/gui/client/assets/classDiagram-ZZMXUADV-BJbAiI_w.js +1 -0
  258. package/dist/gui/client/assets/classDiagram-v2-VYDZK3BY-BJbAiI_w.js +1 -0
  259. package/dist/gui/client/assets/cynefin-OW5HDTMX-DecLWZ-y.js +1 -0
  260. package/dist/gui/client/assets/cynefinDiagram-5FMLGOSQ-CK-T2N-D.js +62 -0
  261. package/dist/gui/client/assets/dagre-GXQ25YYZ-C0dfg-OS.js +4 -0
  262. package/dist/gui/client/assets/diagram-S7CK7UJ4-EaJukVh-.js +30 -0
  263. package/dist/gui/client/assets/diagram-UQ7AKVKN-xcOucEtP.js +41 -0
  264. package/dist/gui/client/assets/diagram-VSXAHHWV-3AUJACMf.js +3 -0
  265. package/dist/gui/client/assets/diagram-VX7I27RA-TPknLqam.js +24 -0
  266. package/dist/gui/client/assets/diagram-Z3DM3KII-wa1q3YMF.js +24 -0
  267. package/dist/gui/client/assets/ebnfDiagram-PWID7BFC-JBCF2-s7.js +1 -0
  268. package/dist/gui/client/assets/erDiagram-RLTQ6QDP-CmXjXPc4.js +99 -0
  269. package/dist/gui/client/assets/eventmodeling-NTZA5JFV-D_1aJWYl.js +1 -0
  270. package/dist/gui/client/assets/flowDiagram-HODETNUW-BQtZlael.js +1 -0
  271. package/dist/gui/client/assets/framework-Bq-znqwW.js +9 -0
  272. package/dist/gui/client/assets/ganttDiagram-EL5Y4UJY-IPaL_kaa.js +292 -0
  273. package/dist/gui/client/assets/gitGraph-4MIJSDKK-Oy0Q3hoc.js +1 -0
  274. package/dist/gui/client/assets/gitGraphDiagram-WWUBYQGX-jtAuBmbc.js +106 -0
  275. package/dist/gui/client/assets/index-CuFuBEdL.css +1 -0
  276. package/dist/gui/client/assets/index-hMbEIsX0.js +87 -0
  277. package/dist/gui/client/assets/info-A6RAGUB7-UtEs1tv7.js +1 -0
  278. package/dist/gui/client/assets/infoDiagram-27XIBGKW-hlwR1pBW.js +2 -0
  279. package/dist/gui/client/assets/ishikawaDiagram-5VMMS53U-C6vMtfsd.js +70 -0
  280. package/dist/gui/client/assets/journeyDiagram-3NMN7TZE-EAwAl_PS.js +139 -0
  281. package/dist/gui/client/assets/kanban-definition-UXKFOSKX-CQOhRKHW.js +89 -0
  282. package/dist/gui/client/assets/line-DbcwGZTW.js +1 -0
  283. package/dist/gui/client/assets/mermaid-parser.core-C2QfVcHd.js +7 -0
  284. package/dist/gui/client/assets/mermaid.core-N9qUTre1.js +44 -0
  285. package/dist/gui/client/assets/mindmap-definition-YA3MSWOX-BR_FL9gK.js +96 -0
  286. package/dist/gui/client/assets/packet-AYTQ26CC-CbBJ2oAa.js +1 -0
  287. package/dist/gui/client/assets/pegDiagram-XKGWAZYB-BruU0IHM.js +1 -0
  288. package/dist/gui/client/assets/pie-WAS4IAKB-BWdSng4H.js +1 -0
  289. package/dist/gui/client/assets/pieDiagram-E7YTZNPT-CR3ljgdU.js +39 -0
  290. package/dist/gui/client/assets/quadrantDiagram-AXDQQJYC-C-boKslr.js +7 -0
  291. package/dist/gui/client/assets/radar-RG4KPBEZ-CGlOnAKG.js +1 -0
  292. package/dist/gui/client/assets/railroad-74A4TZTK-CDvuAlyC.js +1 -0
  293. package/dist/gui/client/assets/railroad-abnf-HS5TGJTU-CQUA9crC.js +1 -0
  294. package/dist/gui/client/assets/railroad-ebnf-LZEXJU2U-CD857gxq.js +1 -0
  295. package/dist/gui/client/assets/railroad-peg-WCYAUIDC-DUV4k35E.js +1 -0
  296. package/dist/gui/client/assets/railroadDiagram-O6MQD6OU-DMR4LXmA.js +1 -0
  297. package/dist/gui/client/assets/requirementDiagram-BXWQKSXE-DVltaF6c.js +84 -0
  298. package/dist/gui/client/assets/sankeyDiagram-P5KCCOFB-CHdNz472.js +40 -0
  299. package/dist/gui/client/assets/sequenceDiagram-WJ2MYXX4-DaMafIty.js +162 -0
  300. package/dist/gui/client/assets/stateDiagram-D77RDMKH-CEbBHqn3.js +1 -0
  301. package/dist/gui/client/assets/stateDiagram-v2-MP3YSRHH-B3JgDdFg.js +1 -0
  302. package/dist/gui/client/assets/swimlanes-42K2YHIH-BlPHndnJ.js +1 -0
  303. package/dist/gui/client/assets/swimlanesDiagram-VR7AAH4N-BPabHwsZ.js +8 -0
  304. package/dist/gui/client/assets/timeline-definition-24CTP7MA-E4Y1lPBI.js +120 -0
  305. package/dist/gui/client/assets/treeView-Q6P3EWNA-DrY0uhTN.js +1 -0
  306. package/dist/gui/client/assets/treemap-WGGIJYW6-CVotnLHf.js +1 -0
  307. package/dist/gui/client/assets/vennDiagram-4TSXK5OY-DJNrLIOF.js +34 -0
  308. package/dist/gui/client/assets/wardley-WFR3VGLG-ClOpAp5S.js +1 -0
  309. package/dist/gui/client/assets/wardleyDiagram-VM6X3IG4-qhMoKOXc.js +78 -0
  310. package/dist/gui/client/assets/xychartDiagram-S5SC5T6Z-CTuXoo9R.js +7 -0
  311. package/dist/gui/client/index.html +6 -0
  312. package/dist/gui/ops-worker.js +167 -0
  313. package/dist/gui/reads-worker.js +473 -0
  314. package/dist/gui/server.js +9780 -0
  315. package/dist/gui-QJS7XQMV.js +16 -0
  316. package/dist/init-DV5B6HQG.js +354 -0
  317. package/dist/install-6C45YXFP.js +19 -0
  318. package/dist/install-O7NSRU2W.js +13 -0
  319. package/dist/interactive-OXGYZYAS.js +22381 -0
  320. package/dist/interop-J7UOBOSF.js +254 -0
  321. package/dist/inventory-OEGIL6PY.js +144 -0
  322. package/dist/library-B3UPGY4V.js +83 -0
  323. package/dist/library-MXQA5DLT.js +309 -0
  324. package/dist/library-ROZAMUIL.js +496 -0
  325. package/dist/library-import-2LTWOVBD.js +190 -0
  326. package/dist/library-inventory-LJ3XHLWO.js +60 -0
  327. package/dist/library-validation-DARHHUNW.js +46 -0
  328. package/dist/mcp-2GSPYQ54.js +28 -0
  329. package/dist/memory-J3STUUIK.js +537 -0
  330. package/dist/models-Y3GMFJ2V.js +314 -0
  331. package/dist/monitor-LHNH577J.js +811 -0
  332. package/dist/orchestrator-DTAPXULA.js +12117 -0
  333. package/dist/panes-A743ONZ5.js +103 -0
  334. package/dist/panes-CTNO57ZY.js +76 -0
  335. package/dist/paths-3SBYJQDP.js +68 -0
  336. package/dist/preload-OJBMAIXF.js +140 -0
  337. package/dist/providers-CMETPZNS.js +232 -0
  338. package/dist/registry-37T4U6X2.js +15 -0
  339. package/dist/reset-O7EUCYWO.js +346 -0
  340. package/dist/resources-FY6XYFN2.js +189 -0
  341. package/dist/run-H64MEVTA.js +1067 -0
  342. package/dist/run-script-PQ5NRU3X.js +42 -0
  343. package/dist/settings-SNIQNXCW.js +73 -0
  344. package/dist/settings-controls-X6GMCPVG.js +202 -0
  345. package/dist/share-CAFMMQLM.js +299 -0
  346. package/dist/skills-ERKQUC7L.js +114 -0
  347. package/dist/skills-eval-CQ23MYQK.js +1099 -0
  348. package/dist/skills-inventory-TVUYJDVN.js +142 -0
  349. package/dist/slash-commands-ROG3KIFJ.js +107 -0
  350. package/dist/startup-background-KDWCQMWT.js +247 -0
  351. package/dist/steer-KKYXJSH4.js +77 -0
  352. package/dist/support-M3RCUUEL.js +40 -0
  353. package/dist/system-ZDW44ZGX.js +142 -0
  354. package/dist/target-runtimes-PWA22WVW.js +73 -0
  355. package/dist/targets-AJWA6E7Z.js +1207 -0
  356. package/dist/tasks-6L2JJRC5.js +39 -0
  357. package/dist/terminal-lease-YFUSDPAD.js +432 -0
  358. package/dist/tools-5XJUABRD.js +30 -0
  359. package/dist/trace-LA5MVR4Y.js +527 -0
  360. package/dist/tree-sitter-TQW3Y52T.js +4673 -0
  361. package/dist/tui-primitives-IUCVWLH5.js +19 -0
  362. package/dist/uninstall-SAWGGXAB.js +448 -0
  363. package/dist/upgrade-HSNSVTZG.js +300 -0
  364. package/dist/usage-XSILDHKF.js +1083 -0
  365. package/dist/verifiers-ECA5GIHL.js +633 -0
  366. package/dist/verify-R6QQCCEB.js +31 -0
  367. package/dist/version-PLZYB5KW.js +22 -0
  368. package/dist/web-fetch-PVZNMBOB.js +803 -0
  369. package/dist/wiki-generate-RP22WP5K.js +647 -0
  370. package/dist/with-panes-W3PAZPRF.js +629 -0
  371. package/dist/worker/entry.js +324 -284
  372. package/dist/workspace-check-3764ZKC2.js +83 -0
  373. package/docs/README.md +26 -10
  374. package/docs/architecture/acp.md +179 -12
  375. package/docs/architecture/artifact-placement.md +1 -1
  376. package/docs/architecture/capacity-and-scheduling.md +7 -8
  377. package/docs/architecture/context-engine.md +350 -95
  378. package/docs/architecture/model-catalog.md +18 -11
  379. package/docs/architecture/observability.md +1 -1
  380. package/docs/architecture/pi-boundary.md +59 -6
  381. package/docs/architecture/prompt-envelope-and-tools.md +147 -39
  382. package/docs/architecture/provider-adapter-cookbook.md +2 -2
  383. package/docs/architecture/safety-model.md +18 -4
  384. package/docs/architecture/trace-store.md +2 -2
  385. package/docs/architecture/tui-design.md +41 -81
  386. package/docs/architecture/worker-dispatch-mechanics.md +9 -1
  387. package/docs/gui/README.md +69 -0
  388. package/docs/gui/boundary-doctrine.md +104 -0
  389. package/docs/gui/chat-rendering-spec.md +1440 -0
  390. package/docs/gui/cli-surface-routing.md +148 -0
  391. package/docs/gui/delivery-order.md +53 -0
  392. package/docs/gui/event-bus-coverage.md +103 -0
  393. package/docs/gui/inspector-presentation.md +71 -0
  394. package/docs/gui/parity/01-cli-surface.md +74 -0
  395. package/docs/gui/parity/02-slash-and-surfaces.md +110 -0
  396. package/docs/gui/parity/03-domains-and-plan.md +69 -0
  397. package/docs/gui/performance-baseline.md +76 -0
  398. package/docs/gui/settings-write-surface.md +267 -0
  399. package/docs/gui/workflow-coverage.md +64 -0
  400. package/docs/guide/built-in-agents.md +1 -1
  401. package/docs/guide/commands-and-modes.md +256 -99
  402. package/docs/guide/configuration-and-targets.md +485 -124
  403. package/docs/guide/configuration-reference.md +165 -82
  404. package/docs/guide/doctor.md +127 -0
  405. package/docs/guide/environment-variables.md +1 -1
  406. package/docs/guide/exit-codes-and-output.md +3 -1
  407. package/docs/guide/extensions-and-sharing.md +3 -14
  408. package/docs/guide/fleet-dispatch.md +231 -45
  409. package/docs/guide/glossary.md +1 -1
  410. package/docs/guide/installation-and-lifecycle.md +27 -16
  411. package/docs/guide/interop.md +2 -2
  412. package/docs/guide/proactive-memory.md +154 -68
  413. package/docs/guide/resource-library.md +4 -0
  414. package/docs/guide/skills-marketplace.md +8 -4
  415. package/docs/guide/slurm.md +88 -0
  416. package/docs/guide/tool-usage.md +134 -11
  417. package/docs/guide/troubleshooting.md +4 -2
  418. package/docs/process/battletest-2026-09-20-fixes.md +161 -0
  419. package/docs/process/configure-tree-proposal.md +637 -0
  420. package/docs/process/documentation-coverage.md +8 -0
  421. package/docs/process/documentation-guide.md +18 -1
  422. package/docs/process/eval-runner.md +58 -14
  423. package/docs/process/performance-methodology.md +11 -3
  424. package/docs/process/release-cut-checklist.md +29 -3
  425. package/docs/process/tool-audit-v0.4.9.md +3 -0
  426. package/examples/extensions/README.md +1 -3
  427. package/examples/extensions/lab-status/clio-coder-extension.json +1 -1
  428. package/examples/extensions/measurements/clio-coder-extension.json +1 -1
  429. package/library/registry.yaml +30 -5
  430. package/library/skills/git/fix-issue/SKILL.md +2 -1
  431. package/library/skills/git/fix-issue/plugin.json +1 -1
  432. package/library/skills/git/ship/SKILL.md +2 -1
  433. package/library/skills/git/ship/plugin.json +1 -1
  434. package/library/skills/meta/clio-coder-test/SKILL.md +5 -6
  435. package/library/skills/meta/clio-coder-test/evals.md +2 -2
  436. package/library/skills/meta/clio-coder-test/references/test-map.md +2 -2
  437. package/library/skills/registry.yaml +9 -5
  438. package/library/skills/research/slurm-jobs/SKILL.md +110 -0
  439. package/library/skills/research/slurm-jobs/evals.md +39 -0
  440. package/library/skills/research/slurm-jobs/plugin.json +23 -0
  441. package/library/skills/skill-marketplace.json +18 -2
  442. package/package.json +15 -10
  443. package/src/cli/args.ts +59 -0
  444. package/src/cli/argv.ts +7 -0
  445. package/src/cli/clio.ts +9 -1
  446. package/src/cli/configure-controls.ts +136 -0
  447. package/src/cli/configure-onboarding.ts +24 -7
  448. package/src/cli/configure-quick.ts +32 -7
  449. package/src/cli/configure-target.ts +11 -1
  450. package/src/cli/configure.ts +253 -256
  451. package/src/cli/docs-server.ts +290 -0
  452. package/src/cli/docs.ts +60 -15
  453. package/src/cli/doctor-deep.ts +126 -0
  454. package/src/cli/doctor-hpc.ts +122 -0
  455. package/src/cli/doctor-slurm.ts +130 -0
  456. package/src/cli/doctor-task-worktrees.ts +88 -0
  457. package/src/cli/doctor.ts +165 -16
  458. package/src/cli/fleet-verify.ts +3 -2
  459. package/src/cli/gui.ts +111 -0
  460. package/src/cli/index.ts +14 -4
  461. package/src/cli/library.ts +2 -7
  462. package/src/cli/modes/json-stream.ts +4 -2
  463. package/src/cli/modes/print.ts +252 -25
  464. package/src/cli/run.ts +199 -71
  465. package/src/cli/skills.ts +25 -7
  466. package/src/cli/targets.ts +87 -9
  467. package/src/cli/uninstall.ts +28 -8
  468. package/src/cli/usage.ts +2 -1
  469. package/src/cli/workspace-check.ts +71 -0
  470. package/src/core/bash-exec.ts +8 -2
  471. package/src/core/bus-events.ts +32 -3
  472. package/src/core/cache-telemetry.ts +3 -2
  473. package/src/core/compile-cache.ts +11 -1
  474. package/src/core/config.ts +59 -6
  475. package/src/core/defaults.ts +27 -5
  476. package/src/core/diagnostics.ts +25 -0
  477. package/src/core/event-bus.ts +2 -1
  478. package/src/core/gateway-routing.ts +10 -3
  479. package/src/core/git-commit-attribution.ts +2 -1
  480. package/src/core/naming-compat.ts +6 -4
  481. package/src/core/package-root.ts +0 -9
  482. package/src/core/path-canonical.ts +143 -24
  483. package/src/core/residency-target-key.ts +2 -6
  484. package/src/core/run-overrides.ts +1 -1
  485. package/src/core/settings-awareness.ts +108 -0
  486. package/src/core/settings-controls.ts +673 -0
  487. package/src/core/settings-navigation.ts +116 -0
  488. package/src/core/theme-token-hex.ts +19 -9
  489. package/src/core/turn-constraints.ts +52 -0
  490. package/src/domains/agents/builtins/scout.md +7 -17
  491. package/src/domains/agents/catalog.ts +5 -1
  492. package/src/domains/agents/extension.ts +2 -1
  493. package/src/domains/agents/registry.ts +4 -3
  494. package/src/domains/agents/result-contract.ts +132 -1
  495. package/src/domains/config/classify.ts +11 -7
  496. package/src/domains/config/extension.ts +5 -1
  497. package/src/domains/config/keybindings.ts +2 -2
  498. package/src/domains/context/codewiki/coordinator.ts +10 -0
  499. package/src/domains/context/worker/snapshot.ts +6 -3
  500. package/src/domains/dispatch/active-route-planner.ts +2 -0
  501. package/src/domains/dispatch/agent-candidates.ts +5 -1
  502. package/src/domains/dispatch/capability-match.ts +1 -1
  503. package/src/domains/dispatch/contract.ts +28 -0
  504. package/src/domains/dispatch/event-pump.ts +37 -3
  505. package/src/domains/dispatch/extension.ts +391 -48
  506. package/src/domains/dispatch/failure-classification.ts +37 -2
  507. package/src/domains/dispatch/receipt-integrity.ts +3 -0
  508. package/src/domains/dispatch/run-identity.ts +10 -3
  509. package/src/domains/dispatch/target-breaker.ts +163 -0
  510. package/src/domains/dispatch/types.ts +29 -2
  511. package/src/domains/dispatch/worker-model-loads.ts +66 -0
  512. package/src/domains/dispatch/worker-protocol.ts +20 -1
  513. package/src/domains/dispatch/worker-spawn.ts +28 -2
  514. package/src/domains/eval/artifacts/redact.ts +9 -0
  515. package/src/domains/eval/metrics/noop.ts +61 -0
  516. package/src/domains/eval/reports/junit.ts +5 -1
  517. package/src/domains/eval/reports/text.ts +7 -0
  518. package/src/domains/eval/runners/clio-run.ts +19 -8
  519. package/src/domains/eval/runners/external-command.ts +29 -4
  520. package/src/domains/eval/schema/adapter.ts +6 -2
  521. package/src/domains/eval/schema/suite.ts +2 -0
  522. package/src/domains/eval/schema/validate.ts +3 -0
  523. package/src/domains/eval/suites/run.ts +167 -26
  524. package/src/domains/evidence/detail.ts +3 -2
  525. package/src/domains/extensions/operator-runtime.ts +11 -4
  526. package/src/domains/gateway/mcp/client.ts +1 -1
  527. package/src/domains/lifecycle/doctor.ts +42 -26
  528. package/src/domains/lifecycle/migrations/2026-09-18-ollama-runtime-id.ts +38 -0
  529. package/src/domains/lifecycle/migrations/index.ts +2 -0
  530. package/src/domains/middleware/demo-guidance.ts +36 -0
  531. package/src/domains/middleware/dispatch-nudge.ts +1 -1
  532. package/src/domains/middleware/memory-intervention.ts +51 -4
  533. package/src/domains/middleware/runtime.ts +5 -4
  534. package/src/domains/middleware/skills-reminder.ts +29 -52
  535. package/src/domains/middleware/task-nudge.ts +1 -0
  536. package/src/domains/middleware/watchdog.ts +4 -0
  537. package/src/domains/observability/extension.ts +2 -1
  538. package/src/domains/observability/out-of-turn-usage.ts +3 -2
  539. package/src/domains/observability/projection.ts +3 -2
  540. package/src/domains/observability/worker-progress.ts +48 -0
  541. package/src/domains/prompts/compiler.ts +148 -52
  542. package/src/domains/prompts/contract.ts +3 -3
  543. package/src/domains/prompts/demo-guidance.ts +8 -0
  544. package/src/domains/prompts/extension.ts +12 -7
  545. package/src/domains/prompts/fragments/identity/clio.md +2 -1
  546. package/src/domains/prompts/fragments/identity/docs-routing.md +2 -0
  547. package/src/domains/prompts/fragments/identity/self-awareness.md +4 -0
  548. package/src/domains/prompts/fragments/operating/contract.md +16 -7
  549. package/src/domains/prompts/fragments/operating/delegation.md +29 -13
  550. package/src/domains/prompts/fragments/operating/skills.md +18 -10
  551. package/src/domains/prompts/fragments/operating/worker.md +2 -0
  552. package/src/domains/providers/cache-deployment.ts +45 -2
  553. package/src/domains/providers/contract.ts +52 -11
  554. package/src/domains/providers/extension.ts +230 -53
  555. package/src/domains/providers/model-discovery.ts +22 -8
  556. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +5 -7
  557. package/src/domains/providers/plugins.ts +3 -4
  558. package/src/domains/providers/probe/fingerprint.ts +2 -2
  559. package/src/domains/providers/probe/reasoning.ts +9 -16
  560. package/src/domains/providers/probe/tool-call.ts +236 -0
  561. package/src/domains/providers/registry.ts +51 -8
  562. package/src/domains/providers/runtime-resolution.ts +60 -12
  563. package/src/domains/providers/runtimes/boot-manifest.ts +1 -1
  564. package/src/domains/providers/runtimes/builtins.ts +2 -2
  565. package/src/domains/providers/runtimes/common/lmstudio-http.ts +57 -41
  566. package/src/domains/providers/runtimes/common/local-synth.ts +3 -1
  567. package/src/domains/providers/runtimes/common/ollama-model-ids.ts +11 -0
  568. package/src/domains/providers/runtimes/common/probe-helpers.ts +53 -0
  569. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +3 -1
  570. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +7 -13
  571. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +7 -17
  572. package/src/domains/providers/runtimes/local-native/llamacpp.ts +1 -0
  573. package/src/domains/providers/runtimes/local-native/ollama.ts +211 -0
  574. package/src/domains/providers/runtimes/protocol/litellm.ts +77 -65
  575. package/src/domains/providers/support.ts +1 -1
  576. package/src/domains/providers/types/local-model-quirks.ts +2 -3
  577. package/src/domains/providers/types/runtime-descriptor.ts +23 -3
  578. package/src/domains/providers/types/target-descriptor.ts +15 -3
  579. package/src/domains/resources/collision.ts +7 -2
  580. package/src/domains/resources/index.ts +1 -0
  581. package/src/domains/resources/library-actions.ts +4 -2
  582. package/src/domains/resources/library-inventory.ts +6 -2
  583. package/src/domains/resources/prompts/loader.ts +20 -7
  584. package/src/domains/resources/skills/availability.ts +56 -0
  585. package/src/domains/resources/skills/loader.ts +20 -9
  586. package/src/domains/safety/action-classifier.ts +282 -31
  587. package/src/domains/safety/audit.ts +2 -1
  588. package/src/domains/safety/autonomy.ts +54 -11
  589. package/src/domains/safety/decision-presentation.ts +17 -4
  590. package/src/domains/safety/finish-contract-registration.ts +25 -1
  591. package/src/domains/safety/finish-contract.ts +20 -5
  592. package/src/domains/safety/path-policy.ts +6 -2
  593. package/src/domains/safety/policy-engine.ts +168 -48
  594. package/src/domains/safety/protected-artifacts.ts +527 -16
  595. package/src/domains/safety/read-scope.ts +120 -0
  596. package/src/domains/safety/skill-authority.ts +52 -16
  597. package/src/domains/scheduling/cluster.ts +14 -3
  598. package/src/domains/scheduling/contract.ts +7 -0
  599. package/src/domains/scheduling/extension.ts +20 -9
  600. package/src/domains/scheduling/local-capacity.ts +160 -0
  601. package/src/domains/session/context-accounting.ts +44 -31
  602. package/src/domains/session/context-ledger.ts +10 -3
  603. package/src/domains/session/entries.ts +4 -0
  604. package/src/domains/session/history.ts +1 -1
  605. package/src/domains/session/prompt-cache.ts +1 -0
  606. package/src/domains/session/prompt-manifest.ts +3 -1
  607. package/src/domains/session/retry.ts +4 -6
  608. package/src/domains/session/task-board.ts +19 -4
  609. package/src/domains/session/tree/preview.ts +3 -2
  610. package/src/engine/acp/commands.ts +653 -0
  611. package/src/engine/acp/server.ts +639 -20
  612. package/src/engine/acp/tool-mediator.ts +30 -7
  613. package/src/engine/acp/types.ts +58 -0
  614. package/src/engine/agent.ts +55 -10
  615. package/src/engine/ai.ts +11 -2
  616. package/src/engine/api-registry.ts +5 -4
  617. package/src/engine/apis/degraded-inference.ts +243 -0
  618. package/src/engine/apis/llamacpp-residency.ts +50 -6
  619. package/src/engine/apis/lmstudio-residency.ts +3 -5
  620. package/src/engine/apis/lmstudio.ts +137 -31
  621. package/src/engine/apis/ollama-http.ts +118 -0
  622. package/src/engine/apis/ollama-native.ts +216 -97
  623. package/src/engine/apis/openai-completions.ts +191 -189
  624. package/src/engine/apis/output-budget.ts +3 -1
  625. package/src/engine/apis/residency-lock.ts +2 -1
  626. package/src/engine/apis/residency.ts +339 -89
  627. package/src/engine/apis/sampling-overrides.ts +23 -2
  628. package/src/engine/apis/types.ts +1 -2
  629. package/src/engine/claude/tool-safety.ts +30 -5
  630. package/src/engine/context.ts +13 -0
  631. package/src/engine/env-api-keys.ts +2 -1
  632. package/src/engine/gemma-channel-filter.ts +3 -2
  633. package/src/engine/instrumented-tui.ts +25 -0
  634. package/src/engine/loop-guard.ts +172 -6
  635. package/src/engine/pi-mono-names.ts +16 -0
  636. package/src/engine/prewarm.ts +44 -15
  637. package/src/engine/provider-payload.ts +52 -14
  638. package/src/engine/session.ts +4 -2
  639. package/src/engine/worker-events.ts +9 -1
  640. package/src/engine/worker-runtime.ts +269 -42
  641. package/src/engine/worker-tools.ts +8 -3
  642. package/src/entry/boot-options.ts +23 -0
  643. package/src/entry/orchestrator.ts +207 -36
  644. package/src/interactive/assistant-generation-timing.ts +52 -0
  645. package/src/interactive/chat-loop-messages.ts +4 -1
  646. package/src/interactive/chat-loop.ts +59 -9
  647. package/src/interactive/chat-panel.ts +10 -1
  648. package/src/interactive/clio-editor.ts +51 -79
  649. package/src/interactive/context-meter.ts +1 -0
  650. package/src/interactive/context-overlay.ts +21 -8
  651. package/src/interactive/cost-overlay.ts +1 -1
  652. package/src/interactive/dispatch-board.ts +39 -8
  653. package/src/interactive/editor-bash.ts +0 -34
  654. package/src/interactive/editor-rails.ts +43 -0
  655. package/src/interactive/editor-submit.ts +34 -2
  656. package/src/interactive/footer/dashboard.ts +67 -38
  657. package/src/interactive/footer/demo-hints.ts +40 -0
  658. package/src/interactive/footer/key-hints.ts +21 -0
  659. package/src/interactive/footer/notifications.ts +1 -1
  660. package/src/interactive/footer/pages.ts +486 -0
  661. package/src/interactive/footer/system-metrics.ts +147 -0
  662. package/src/interactive/footer/widgets.ts +158 -63
  663. package/src/interactive/footer-panel.ts +29 -7
  664. package/src/interactive/interactive-application.ts +109 -21
  665. package/src/interactive/interactive-event-projection.ts +6 -2
  666. package/src/interactive/interactive-presentation.ts +25 -29
  667. package/src/interactive/interactive-slash-runtime.ts +32 -18
  668. package/src/interactive/interactive-subscriptions.ts +25 -5
  669. package/src/interactive/interactive-tickers.ts +21 -5
  670. package/src/interactive/keybinding-manager.ts +9 -0
  671. package/src/interactive/overlay-frame.ts +29 -7
  672. package/src/interactive/overlay-lifecycle.ts +5 -3
  673. package/src/interactive/overlay-model-selectors.ts +4 -0
  674. package/src/interactive/overlay-permission-lifecycle.ts +6 -5
  675. package/src/interactive/overlays/ask-user.ts +103 -110
  676. package/src/interactive/overlays/help-reference.ts +1 -0
  677. package/src/interactive/overlays/message-picker.ts +3 -29
  678. package/src/interactive/overlays/session-selector.ts +3 -2
  679. package/src/interactive/overlays/settings-sections.ts +2 -30
  680. package/src/interactive/overlays/settings.ts +310 -607
  681. package/src/interactive/permission-hint.ts +3 -3
  682. package/src/interactive/permission-overlay.ts +45 -27
  683. package/src/interactive/renderers/doctor-report.ts +43 -0
  684. package/src/interactive/renderers/tool-execution.ts +87 -62
  685. package/src/interactive/renderers/worker-entry.ts +76 -3
  686. package/src/interactive/side-question.ts +3 -1
  687. package/src/interactive/slash-commands.ts +78 -23
  688. package/src/interactive/startup-background.ts +131 -0
  689. package/src/interactive/startup-diagnostics.ts +16 -0
  690. package/src/interactive/status/state-machine.ts +16 -3
  691. package/src/interactive/status/types.ts +2 -0
  692. package/src/interactive/status/verbs.ts +1 -1
  693. package/src/interactive/terminal-lease.ts +26 -22
  694. package/src/interactive/theme/components.ts +1 -1
  695. package/src/interactive/theme/rules.ts +1 -1
  696. package/src/interactive/theme/tokens.ts +16 -10
  697. package/src/interactive/transcript-detail.ts +4 -0
  698. package/src/interactive/turn-context.ts +56 -20
  699. package/src/interactive/turn-middleware.ts +57 -9
  700. package/src/interactive/turn-prewarm.ts +121 -18
  701. package/src/interactive/turn-recovery.ts +10 -8
  702. package/src/interactive/turn-runtime.ts +74 -29
  703. package/src/interactive/turn-state.ts +3 -0
  704. package/src/interactive/welcome-art.ts +36 -0
  705. package/src/interactive/welcome-dashboard.ts +209 -49
  706. package/src/interactive/worker-replay.ts +4 -0
  707. package/src/interactive/worker-stream.ts +17 -2
  708. package/src/tools/agent-tools.ts +22 -1
  709. package/src/tools/builtin-tool-catalog.ts +2 -2
  710. package/src/tools/codewiki/code-nav.ts +1 -1
  711. package/src/tools/codewiki/shared.ts +39 -1
  712. package/src/tools/compete-worktrees.ts +8 -91
  713. package/src/tools/context/docs-engine.ts +44 -12
  714. package/src/tools/context/index.ts +126 -22
  715. package/src/tools/context/library.ts +1 -1
  716. package/src/tools/context/surface.ts +12 -7
  717. package/src/tools/core-bootstrap.ts +3 -0
  718. package/src/tools/dispatch-runner.ts +18 -0
  719. package/src/tools/dispatch-schema.ts +187 -206
  720. package/src/tools/edit.ts +46 -42
  721. package/src/tools/file-mutation-queue.ts +25 -26
  722. package/src/tools/gateway/clio-context-surface.ts +1 -1
  723. package/src/tools/gateway/index.ts +7 -3
  724. package/src/tools/gateway/mcp-capabilities.ts +5 -3
  725. package/src/tools/grep.ts +14 -2
  726. package/src/tools/ls.ts +1 -4
  727. package/src/tools/monitor.ts +14 -1
  728. package/src/tools/observation.ts +1 -3
  729. package/src/tools/path-utils.ts +51 -18
  730. package/src/tools/process-lease.ts +99 -0
  731. package/src/tools/read.ts +1 -1
  732. package/src/tools/registry.ts +71 -9
  733. package/src/tools/task-worktree.ts +296 -17
  734. package/src/tools/tasks.ts +29 -7
  735. package/src/tools/worker-evidence.ts +60 -1
  736. package/src/tools/worktree-root.ts +252 -0
  737. package/src/tools/write.ts +34 -30
  738. package/src/worker/entry.ts +18 -1
  739. package/src/worker/protocol.ts +54 -1
  740. package/src/worker/spec-contract.ts +22 -2
  741. package/dist/acp-ZWZCPS2A.js +0 -130
  742. package/dist/agents-LYSOWZUE.js +0 -150
  743. package/dist/auth-WBQGKWQ5.js +0 -551
  744. package/dist/background-BUMOBAQN.js +0 -37
  745. package/dist/builtins-ODRJOEDI.js +0 -22
  746. package/dist/chunk-2DRRZ57Q.js +0 -571
  747. package/dist/chunk-2JBZYUPY.js +0 -105
  748. package/dist/chunk-2VBWFXYE.js +0 -198
  749. package/dist/chunk-2X2R3UTH.js +0 -1018
  750. package/dist/chunk-32KJPXAM.js +0 -75
  751. package/dist/chunk-37LW32LZ.js +0 -32
  752. package/dist/chunk-3A3CUMKA.js +0 -54
  753. package/dist/chunk-3AND2EFU.js +0 -215
  754. package/dist/chunk-3RDHGNU7.js +0 -647
  755. package/dist/chunk-3SUDBGEI.js +0 -1323
  756. package/dist/chunk-3TQN67I2.js +0 -396
  757. package/dist/chunk-3U4BL2EV.js +0 -103
  758. package/dist/chunk-3UQADNG2.js +0 -302
  759. package/dist/chunk-434LRQ6Z.js +0 -13441
  760. package/dist/chunk-4ATBOFRP.js +0 -7802
  761. package/dist/chunk-4DNL43EZ.js +0 -139
  762. package/dist/chunk-4HFJKRGZ.js +0 -5250
  763. package/dist/chunk-555E2WVV.js +0 -322
  764. package/dist/chunk-5GZICIYO.js +0 -462
  765. package/dist/chunk-5PHVPU4G.js +0 -160
  766. package/dist/chunk-5RTEFNBP.js +0 -197
  767. package/dist/chunk-64XJW7NT.js +0 -380
  768. package/dist/chunk-6TKOFFGE.js +0 -1058
  769. package/dist/chunk-6UJ7RDI7.js +0 -1143
  770. package/dist/chunk-7FBCRWVT.js +0 -1801
  771. package/dist/chunk-7JSOSVLP.js +0 -283
  772. package/dist/chunk-7N3OLLSL.js +0 -637
  773. package/dist/chunk-7QQRPB2E.js +0 -915
  774. package/dist/chunk-A6DULIMH.js +0 -986
  775. package/dist/chunk-AB3QXXBC.js +0 -123
  776. package/dist/chunk-ACCECAH4.js +0 -49
  777. package/dist/chunk-AM6CEP2K.js +0 -2120
  778. package/dist/chunk-AUHVBIDW.js +0 -19
  779. package/dist/chunk-AY4XE6GN.js +0 -665
  780. package/dist/chunk-BBA2TAWV.js +0 -667
  781. package/dist/chunk-BFPHMSK7.js +0 -169
  782. package/dist/chunk-BMNVVKEW.js +0 -604
  783. package/dist/chunk-CKK25WN3.js +0 -72
  784. package/dist/chunk-CTGZCEI6.js +0 -33
  785. package/dist/chunk-DIAJYJYG.js +0 -446
  786. package/dist/chunk-DVNAPPXU.js +0 -27
  787. package/dist/chunk-DXVMLM3Z.js +0 -92
  788. package/dist/chunk-E3LEPLQ2.js +0 -68
  789. package/dist/chunk-EHZRAB4U.js +0 -63
  790. package/dist/chunk-EM2DIQAJ.js +0 -179
  791. package/dist/chunk-EM2WNQS2.js +0 -93
  792. package/dist/chunk-ETF4ROKH.js +0 -595
  793. package/dist/chunk-F2YM3JY4.js +0 -22513
  794. package/dist/chunk-FEBQWHJT.js +0 -1023
  795. package/dist/chunk-FPS4R2RN.js +0 -1975
  796. package/dist/chunk-GD55RTIW.js +0 -33
  797. package/dist/chunk-GJDRMBDI.js +0 -573
  798. package/dist/chunk-GREYLTZ5.js +0 -658
  799. package/dist/chunk-H2WSCZZT.js +0 -238
  800. package/dist/chunk-H6IUCY6Q.js +0 -117
  801. package/dist/chunk-H72DCH3E.js +0 -563
  802. package/dist/chunk-H7TXJR23.js +0 -705
  803. package/dist/chunk-HBJQQTKM.js +0 -40
  804. package/dist/chunk-HCVKSGNZ.js +0 -990
  805. package/dist/chunk-HVCAY2FH.js +0 -67
  806. package/dist/chunk-I47EJPYL.js +0 -1377
  807. package/dist/chunk-IALGWTLO.js +0 -36
  808. package/dist/chunk-IALZJE37.js +0 -1710
  809. package/dist/chunk-IC7JXLOM.js +0 -1577
  810. package/dist/chunk-IOSVTTCD.js +0 -108
  811. package/dist/chunk-IPTPMLA6.js +0 -475
  812. package/dist/chunk-IZZI3SKQ.js +0 -128
  813. package/dist/chunk-JABWPKFY.js +0 -27
  814. package/dist/chunk-JIYWMQZ5.js +0 -175
  815. package/dist/chunk-JKU34ACI.js +0 -693
  816. package/dist/chunk-JOBN2YQQ.js +0 -176
  817. package/dist/chunk-JOL2QRLE.js +0 -152
  818. package/dist/chunk-JTR3VSV3.js +0 -44
  819. package/dist/chunk-JU6MAMRJ.js +0 -362
  820. package/dist/chunk-JURMQWVJ.js +0 -15
  821. package/dist/chunk-K2BLQC5E.js +0 -262
  822. package/dist/chunk-K3XN4LZ4.js +0 -402
  823. package/dist/chunk-KIVFXGBM.js +0 -688
  824. package/dist/chunk-KKRXONXG.js +0 -43
  825. package/dist/chunk-KOAHT3N2.js +0 -395
  826. package/dist/chunk-KP5BPXR3.js +0 -73
  827. package/dist/chunk-KQ6IDQIB.js +0 -39
  828. package/dist/chunk-KRJQG47M.js +0 -1289
  829. package/dist/chunk-KW6OJ7IY.js +0 -221
  830. package/dist/chunk-L3NBWLSN.js +0 -314
  831. package/dist/chunk-L4RUTLRL.js +0 -59
  832. package/dist/chunk-LGTVWPRN.js +0 -47
  833. package/dist/chunk-LSQW6KZO.js +0 -200
  834. package/dist/chunk-LTR5QCLS.js +0 -446
  835. package/dist/chunk-LWJYOHT3.js +0 -165
  836. package/dist/chunk-M6YLF66Z.js +0 -2687
  837. package/dist/chunk-MJ4QEJVT.js +0 -185
  838. package/dist/chunk-MO65K5CH.js +0 -1148
  839. package/dist/chunk-MTOZEQHL.js +0 -637
  840. package/dist/chunk-MZDPF35R.js +0 -45
  841. package/dist/chunk-MZKYVIWW.js +0 -188
  842. package/dist/chunk-NBPA5QM6.js +0 -386
  843. package/dist/chunk-NMBEW4PP.js +0 -688
  844. package/dist/chunk-NPLLK3HO.js +0 -3610
  845. package/dist/chunk-NSYGPIVW.js +0 -39
  846. package/dist/chunk-NXTV5OI5.js +0 -1020
  847. package/dist/chunk-NYDG4QP4.js +0 -689
  848. package/dist/chunk-OA2GDACN.js +0 -146
  849. package/dist/chunk-PJI57EC6.js +0 -236
  850. package/dist/chunk-PJJBUGMR.js +0 -4484
  851. package/dist/chunk-PNJE7JPS.js +0 -50
  852. package/dist/chunk-PP23PZEV.js +0 -1347
  853. package/dist/chunk-PPIFDSBK.js +0 -409
  854. package/dist/chunk-PTFISXQO.js +0 -319
  855. package/dist/chunk-QB33Z5S7.js +0 -1865
  856. package/dist/chunk-QGNII5VC.js +0 -110
  857. package/dist/chunk-QH3ZTUOA.js +0 -113
  858. package/dist/chunk-QI72X67S.js +0 -481
  859. package/dist/chunk-QJMRYTCX.js +0 -56
  860. package/dist/chunk-QKHZZFKH.js +0 -98
  861. package/dist/chunk-RDKX2PME.js +0 -66
  862. package/dist/chunk-RL7LJYN4.js +0 -66
  863. package/dist/chunk-RPMNIFRY.js +0 -65
  864. package/dist/chunk-RQROVOV3.js +0 -670
  865. package/dist/chunk-S34A7BSP.js +0 -97
  866. package/dist/chunk-SJETVJHX.js +0 -119
  867. package/dist/chunk-SJMNU4ZS.js +0 -634
  868. package/dist/chunk-SL2RDHKO.js +0 -19
  869. package/dist/chunk-SLLG2G44.js +0 -85
  870. package/dist/chunk-SQAZN2V3.js +0 -2744
  871. package/dist/chunk-SQBT46OF.js +0 -814
  872. package/dist/chunk-SRCEQKQS.js +0 -165
  873. package/dist/chunk-TCUOGIL2.js +0 -52
  874. package/dist/chunk-TIWPKCVO.js +0 -42
  875. package/dist/chunk-U44YYLVV.js +0 -1529
  876. package/dist/chunk-UIU7MGZ3.js +0 -486
  877. package/dist/chunk-USBBEKHW.js +0 -177
  878. package/dist/chunk-VHKTOLEW.js +0 -1416
  879. package/dist/chunk-VPWGADBG.js +0 -3151
  880. package/dist/chunk-VQD7NH7Z.js +0 -356
  881. package/dist/chunk-VWFCAK34.js +0 -697
  882. package/dist/chunk-W5RM7YAH.js +0 -78
  883. package/dist/chunk-W72LLZAV.js +0 -243
  884. package/dist/chunk-WGRDABW7.js +0 -207
  885. package/dist/chunk-WWRV5RJI.js +0 -165
  886. package/dist/chunk-XCUDZQLX.js +0 -195
  887. package/dist/chunk-XFLSL7BT.js +0 -386
  888. package/dist/chunk-XJZEDCNT.js +0 -391
  889. package/dist/chunk-XLLEL3K7.js +0 -709
  890. package/dist/chunk-XNZWWDC3.js +0 -686
  891. package/dist/chunk-XRECG65F.js +0 -308
  892. package/dist/chunk-XTQ7MEJG.js +0 -457
  893. package/dist/chunk-XW2UZICE.js +0 -372
  894. package/dist/chunk-Y3M2T5RO.js +0 -891
  895. package/dist/chunk-YGDMBK7O.js +0 -567
  896. package/dist/chunk-YJCCMYYT.js +0 -125
  897. package/dist/chunk-YPQOPFP7.js +0 -797
  898. package/dist/chunk-YQYINEJI.js +0 -132
  899. package/dist/chunk-ZF6CV4WZ.js +0 -5614
  900. package/dist/chunk-ZKJU55MX.js +0 -326
  901. package/dist/chunk-ZKQ63XZ5.js +0 -1196
  902. package/dist/chunk-ZKVMDNAN.js +0 -962
  903. package/dist/chunk-ZST3FRCV.js +0 -132
  904. package/dist/clio-JUDCLNHC.js +0 -26
  905. package/dist/clio-context-tools-FT672MNZ.js +0 -136
  906. package/dist/code-nav-7OVCTP2Z.js +0 -688
  907. package/dist/compile-cache-WJEPUZEJ.js +0 -16
  908. package/dist/components-OZXZMDWU.js +0 -674
  909. package/dist/config-P3ZQVF63.js +0 -275
  910. package/dist/config-graph-GKAOBAS5.js +0 -160
  911. package/dist/configure-25LRYZJG.js +0 -86
  912. package/dist/context-72VQV7JX.js +0 -73
  913. package/dist/context-COWRWXP3.js +0 -286
  914. package/dist/context-WB3D474G.js +0 -344
  915. package/dist/context-clear-Y4LYMWC6.js +0 -192
  916. package/dist/context-index-W6A4V7OC.js +0 -120
  917. package/dist/context-map-DKL3QT6D.js +0 -555
  918. package/dist/context-working-set-TMZYVC7A.js +0 -1560
  919. package/dist/data-tool-KMBWKKWR.js +0 -2987
  920. package/dist/detail-4GLROGY5.js +0 -123
  921. package/dist/dispatch-runner-TR3LBP5P.js +0 -2446
  922. package/dist/docs-ZK777W2G.js +0 -101
  923. package/dist/doctor-WC4OV2OB.js +0 -814
  924. package/dist/eval-FUNWJNUJ.js +0 -5050
  925. package/dist/eval-inventory-CX24K2JT.js +0 -260
  926. package/dist/evals-L73EBHSU.js +0 -104
  927. package/dist/evidence-AVJ2RTHX.js +0 -392
  928. package/dist/evidence-P4NZOAK7.js +0 -233
  929. package/dist/evidence-Y55WKYHH.js +0 -246
  930. package/dist/evolve-MAWKRYWF.js +0 -617
  931. package/dist/extensions-PYQH3H47.js +0 -308
  932. package/dist/fleet-M4H2QBWT.js +0 -268
  933. package/dist/fleet-ULBXXRDR.js +0 -923
  934. package/dist/fleet-commands-7NNC4JZU.js +0 -76
  935. package/dist/fleet-decisions-EHEY7KPU.js +0 -52
  936. package/dist/fleet-graph-LQ2AHZT3.js +0 -136
  937. package/dist/fleet-inspect-5IGBIIYZ.js +0 -312
  938. package/dist/fleet-new-RCKGSRDV.js +0 -48
  939. package/dist/fleet-preflight-UTTNOKMG.js +0 -27
  940. package/dist/fleet-validate-YGILJKA6.js +0 -91
  941. package/dist/fleet-verify-AUWTCDKR.js +0 -210
  942. package/dist/fleet-view-TGUFCY5A.js +0 -127
  943. package/dist/init-GFN2Z7NF.js +0 -333
  944. package/dist/install-3RZDDP23.js +0 -13
  945. package/dist/install-6PIF6F6W.js +0 -19
  946. package/dist/interop-EF5JUWWK.js +0 -246
  947. package/dist/inventory-I6VJDDYF.js +0 -127
  948. package/dist/library-3J5IO2OJ.js +0 -75
  949. package/dist/library-IJTOFTDS.js +0 -307
  950. package/dist/library-Z3KZSHPE.js +0 -492
  951. package/dist/library-import-IMKFLDHX.js +0 -183
  952. package/dist/library-inventory-CQP5D6GU.js +0 -56
  953. package/dist/library-validation-33UTX7AI.js +0 -42
  954. package/dist/mcp-5FWZKUS6.js +0 -26
  955. package/dist/memory-36CWN67Y.js +0 -520
  956. package/dist/models-KQ6PQJJQ.js +0 -302
  957. package/dist/monitor-XX6ZD6KC.js +0 -785
  958. package/dist/orchestrator-SK6HDAOP.js +0 -42067
  959. package/dist/panes-L27QRXUH.js +0 -74
  960. package/dist/panes-LXZIWNOZ.js +0 -103
  961. package/dist/paths-7DJDU4P4.js +0 -67
  962. package/dist/preload-K2TDYI4Y.js +0 -124
  963. package/dist/registry-DESGAXWK.js +0 -11
  964. package/dist/reset-73VU3XNT.js +0 -345
  965. package/dist/resources-3BYJYVYL.js +0 -181
  966. package/dist/run-AR7PY6GW.js +0 -896
  967. package/dist/run-script-H2KUDIII.js +0 -41
  968. package/dist/settings-3VMBMWID.js +0 -72
  969. package/dist/share-HVWH4FPF.js +0 -293
  970. package/dist/skills-5TYEY75Q.js +0 -100
  971. package/dist/skills-eval-CK3MD63Z.js +0 -1083
  972. package/dist/skills-inventory-KSFYG3I6.js +0 -138
  973. package/dist/slash-commands-DMVHML7P.js +0 -98
  974. package/dist/steer-XCD6V3EW.js +0 -77
  975. package/dist/support-JAZL6VBR.js +0 -38
  976. package/dist/system-3TDQRMZZ.js +0 -116
  977. package/dist/targets-EZKHAYRN.js +0 -1117
  978. package/dist/tasks-SNEFHWYW.js +0 -36
  979. package/dist/terminal-lease-BNLFA4OF.js +0 -419
  980. package/dist/tools-7IM6BDCE.js +0 -28
  981. package/dist/trace-C3MBGD4S.js +0 -524
  982. package/dist/tree-sitter-AQUUOSYM.js +0 -4673
  983. package/dist/tui-primitives-36BY2774.js +0 -18
  984. package/dist/uninstall-WWLOSZ42.js +0 -432
  985. package/dist/upgrade-ETK2JNSJ.js +0 -297
  986. package/dist/usage-S2HOB7BZ.js +0 -1065
  987. package/dist/verifiers-QDTEVH7R.js +0 -632
  988. package/dist/verify-SUKUK6XM.js +0 -31
  989. package/dist/version-RFPKO6T7.js +0 -21
  990. package/dist/web/client/assets/abnfDiagram-VCTEODGH-BznNOe_I.js +0 -1
  991. package/dist/web/client/assets/architecture-7GRP2DOG-BQO9DL_y.js +0 -1
  992. package/dist/web/client/assets/architectureDiagram-5GKGNRK7-CKPbdvyx.js +0 -36
  993. package/dist/web/client/assets/blockDiagram-I7D4REHJ-prINbpbM.js +0 -129
  994. package/dist/web/client/assets/c4Diagram-7LVT6UL2-DkVRKtyU.js +0 -38
  995. package/dist/web/client/assets/channel-c4EeUUqA.js +0 -1
  996. package/dist/web/client/assets/chunk-4HAMMTFA-CV0Z1ApC.js +0 -62
  997. package/dist/web/client/assets/chunk-75Z2AOVW-D34Nohxq.js +0 -2
  998. package/dist/web/client/assets/chunk-DU6HZSFF-Das_cS-O.js +0 -125
  999. package/dist/web/client/assets/chunk-F27PBJKO-CmRojxkG.js +0 -1
  1000. package/dist/web/client/assets/chunk-GMAD6QVW-ClYZmc73.js +0 -72
  1001. package/dist/web/client/assets/chunk-GVQU2GXP-B2BiHFt-.js +0 -1
  1002. package/dist/web/client/assets/chunk-IMKFNOWR-BGApZ8nP.js +0 -231
  1003. package/dist/web/client/assets/chunk-L3NEJ4N5-DIzCgpkY.js +0 -1
  1004. package/dist/web/client/assets/chunk-OSK3NFVY-BPT-yePv.js +0 -10
  1005. package/dist/web/client/assets/chunk-P2QGCYS3-BC1WTc2t.js +0 -1
  1006. package/dist/web/client/assets/chunk-POPQ4Y6H-BSjzBmZU.js +0 -1
  1007. package/dist/web/client/assets/chunk-PWAF6VOD-BIjLs86Z.js +0 -1
  1008. package/dist/web/client/assets/chunk-SHT3W25Y-CduDz2cm.js +0 -168
  1009. package/dist/web/client/assets/chunk-SVP7TREG-XUn4pPAP.js +0 -88
  1010. package/dist/web/client/assets/chunk-TICWLB2K-DcBy2DKy.js +0 -206
  1011. package/dist/web/client/assets/classDiagram-ZZMXUADV-C0HR7YKN.js +0 -1
  1012. package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-C0HR7YKN.js +0 -1
  1013. package/dist/web/client/assets/cynefin-OW5HDTMX-BecPbyM6.js +0 -1
  1014. package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-BzMzFwyT.js +0 -62
  1015. package/dist/web/client/assets/dagre-GXQ25YYZ-CAWJmRMG.js +0 -4
  1016. package/dist/web/client/assets/diagram-S7CK7UJ4--lp0ALmn.js +0 -30
  1017. package/dist/web/client/assets/diagram-UQ7AKVKN-gKUnsjcj.js +0 -41
  1018. package/dist/web/client/assets/diagram-VSXAHHWV-BoN5D1Gh.js +0 -3
  1019. package/dist/web/client/assets/diagram-VX7I27RA-BMtuswQ6.js +0 -24
  1020. package/dist/web/client/assets/diagram-Z3DM3KII-DtU8LXrA.js +0 -24
  1021. package/dist/web/client/assets/ebnfDiagram-PWID7BFC-DDcnv9BH.js +0 -1
  1022. package/dist/web/client/assets/erDiagram-RLTQ6QDP-DvRb4iDL.js +0 -99
  1023. package/dist/web/client/assets/eventmodeling-NTZA5JFV-01h4SbTc.js +0 -1
  1024. package/dist/web/client/assets/flowDiagram-HODETNUW-Bll_YZ6T.js +0 -1
  1025. package/dist/web/client/assets/framework-YGoR34M4.js +0 -9
  1026. package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-DdFZ9hvH.js +0 -292
  1027. package/dist/web/client/assets/gitGraph-4MIJSDKK-DjD_AAMj.js +0 -1
  1028. package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CDyN9n2u.js +0 -106
  1029. package/dist/web/client/assets/index-CVcy0FAn.js +0 -75
  1030. package/dist/web/client/assets/index-Dsi52apB.css +0 -1
  1031. package/dist/web/client/assets/info-A6RAGUB7-C_XK8Hq0.js +0 -1
  1032. package/dist/web/client/assets/infoDiagram-27XIBGKW-DIe4tJ1i.js +0 -2
  1033. package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-CVl5unKI.js +0 -70
  1034. package/dist/web/client/assets/journeyDiagram-3NMN7TZE-CPEB1Vt8.js +0 -139
  1035. package/dist/web/client/assets/kanban-definition-UXKFOSKX-j-9WXjYQ.js +0 -89
  1036. package/dist/web/client/assets/line-BIDAcEtX.js +0 -1
  1037. package/dist/web/client/assets/mermaid-parser.core-Ux4vssh0.js +0 -7
  1038. package/dist/web/client/assets/mermaid.core-CDuwVKeh.js +0 -44
  1039. package/dist/web/client/assets/mindmap-definition-YA3MSWOX-5MlQEeQ6.js +0 -96
  1040. package/dist/web/client/assets/packet-AYTQ26CC-DRO66c9Q.js +0 -1
  1041. package/dist/web/client/assets/pegDiagram-XKGWAZYB-BakZnSjM.js +0 -1
  1042. package/dist/web/client/assets/pie-WAS4IAKB-BEzcmhz8.js +0 -1
  1043. package/dist/web/client/assets/pieDiagram-E7YTZNPT-DpmqgoPt.js +0 -39
  1044. package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-DuMPwwV2.js +0 -7
  1045. package/dist/web/client/assets/radar-RG4KPBEZ-Djm3oXl5.js +0 -1
  1046. package/dist/web/client/assets/railroad-74A4TZTK-Cpvkwsao.js +0 -1
  1047. package/dist/web/client/assets/railroad-abnf-HS5TGJTU-CpRQ3ruG.js +0 -1
  1048. package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-1Rm5a5eJ.js +0 -1
  1049. package/dist/web/client/assets/railroad-peg-WCYAUIDC-C8344cTh.js +0 -1
  1050. package/dist/web/client/assets/railroadDiagram-O6MQD6OU-CgMS4B6R.js +0 -1
  1051. package/dist/web/client/assets/requirementDiagram-BXWQKSXE-CX5eoNdN.js +0 -84
  1052. package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-CODBX2N3.js +0 -40
  1053. package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-eUhhF8OR.js +0 -162
  1054. package/dist/web/client/assets/stateDiagram-D77RDMKH-vR6l0NC2.js +0 -1
  1055. package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-BYUm8jLY.js +0 -1
  1056. package/dist/web/client/assets/swimlanes-42K2YHIH-v9Tw_zX7.js +0 -1
  1057. package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-B2jdCvhD.js +0 -8
  1058. package/dist/web/client/assets/timeline-definition-24CTP7MA-DxianbhU.js +0 -120
  1059. package/dist/web/client/assets/treeView-Q6P3EWNA-DLxnZb9R.js +0 -1
  1060. package/dist/web/client/assets/treemap-WGGIJYW6-I7UnZ6xJ.js +0 -1
  1061. package/dist/web/client/assets/vennDiagram-4TSXK5OY-Ar7M8Mrj.js +0 -34
  1062. package/dist/web/client/assets/wardley-WFR3VGLG-B8ZSHeDu.js +0 -1
  1063. package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-Qks2FmIn.js +0 -78
  1064. package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BBBjRtiE.js +0 -7
  1065. package/dist/web/client/index.html +0 -6
  1066. package/dist/web/ops-worker.js +0 -37
  1067. package/dist/web/reads-worker.js +0 -1726
  1068. package/dist/web/server.js +0 -8499
  1069. package/dist/web-EMGUGGEI.js +0 -13
  1070. package/dist/web-fetch-6BRRVQON.js +0 -805
  1071. package/dist/wiki-generate-XHSJTDOP.js +0 -627
  1072. package/dist/with-panes-Z6BTEHMZ.js +0 -628
  1073. package/evals/README.md +0 -9
  1074. package/evals/behavioral-corpus-grader.mjs +0 -236
  1075. package/evals/behavioral-machinery-baseline.json +0 -2276
  1076. package/evals/behavioral-machinery-driver.ts +0 -250
  1077. package/evals/behavioral-machinery-support.ts +0 -254
  1078. package/evals/behavioral-machinery.yaml +0 -614
  1079. package/evals/behavioral-model-negative-control.yaml +0 -69
  1080. package/evals/behavioral-model.yaml +0 -482
  1081. package/evals/fixtures/behavioral-facts.txt +0 -3
  1082. package/evals/fixtures/behavioral-main.ts +0 -7
  1083. package/evals/fixtures/decoy/note.txt +0 -2
  1084. package/evals/fixtures/docs-retrieval.json +0 -102
  1085. package/evals/fixtures/private/credentials.txt +0 -1
  1086. package/evals/fixtures/scalar-decision.json +0 -17
  1087. package/evals/fixtures/scout-citation-pipeline.json +0 -55
  1088. package/evals/fixtures/source-explanation.json +0 -74
  1089. package/evals/fixtures/tool-arguments.json +0 -18
  1090. package/evals/fixtures/tool-surface/read.txt +0 -4
  1091. package/evals/fixtures/tool-surface/subdir/keep.txt +0 -1
  1092. package/evals/no-edit-memory-grader.mjs +0 -149
  1093. package/evals/scalar-decision-grader.py +0 -41
  1094. package/evals/scalar-decision-machinery.ts +0 -145
  1095. package/evals/source-explanation-grader.mjs +0 -118
  1096. package/evals/tool-surface-grader.mjs +0 -53
  1097. package/evals/tool-surface-model.yaml +0 -274
  1098. package/evals/tracked-metrics-baseline.yaml +0 -229
  1099. package/evals/tracked-metrics-grader.mjs +0 -129
  1100. package/src/cli/web.ts +0 -79
  1101. package/src/domains/providers/runtimes/local-native/ollama-native.ts +0 -122
  1102. /package/dist/assets/{web-notices → gui-notices}/@hono__node-server-LICENSE +0 -0
  1103. /package/dist/assets/{web-notices → gui-notices}/hono-LICENSE +0 -0
  1104. /package/dist/{web → gui}/client/THIRD_PARTY_LICENSES.md +0 -0
  1105. /package/dist/{web → gui}/client/assets/arc-Pry-7G1_.js +0 -0
  1106. /package/dist/{web → gui}/client/assets/array-BifhSqXX.js +0 -0
  1107. /package/dist/{web → gui}/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
  1108. /package/dist/{web → gui}/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
  1109. /package/dist/{web → gui}/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +0 -0
  1110. /package/dist/{web → gui}/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +0 -0
  1111. /package/dist/{web → gui}/client/assets/chunk-FOHPRMQF-CoA4358r.js +0 -0
  1112. /package/dist/{web → gui}/client/assets/chunk-JWPE2WC7-DVXcaiue.js +0 -0
  1113. /package/dist/{web → gui}/client/assets/chunk-XXDRQBXY-DqAYeljN.js +0 -0
  1114. /package/dist/{web → gui}/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +0 -0
  1115. /package/dist/{web → gui}/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
  1116. /package/dist/{web → gui}/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
  1117. /package/dist/{web → gui}/client/assets/cose-bilkent-JH36ORCC-CVh1icwb.js +0 -0
  1118. /package/dist/{web → gui}/client/assets/cytoscape.esm-c2aL46s-.js +0 -0
  1119. /package/dist/{web → gui}/client/assets/dagre-C-rnJpZF.js +0 -0
  1120. /package/dist/{web → gui}/client/assets/defaultLocale-BFoDCU3G.js +0 -0
  1121. /package/dist/{web → gui}/client/assets/dist-v5Q1xZ2K.js +0 -0
  1122. /package/dist/{web → gui}/client/assets/graphlib-DS17s2tU.js +0 -0
  1123. /package/dist/{web → gui}/client/assets/init-C-OQMol4.js +0 -0
  1124. /package/dist/{web → gui}/client/assets/katex-ZlcWpGUi.js +0 -0
  1125. /package/dist/{web → gui}/client/assets/linear-SzVmGSw4.js +0 -0
  1126. /package/dist/{web → gui}/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
  1127. /package/dist/{web → gui}/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
  1128. /package/dist/{web → gui}/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
  1129. /package/dist/{web → gui}/client/assets/ordinal-BDEzSJ7C.js +0 -0
  1130. /package/dist/{web → gui}/client/assets/path-fybaL0A-.js +0 -0
  1131. /package/dist/{web → gui}/client/assets/prism-bash-D6zCJ74D.js +0 -0
  1132. /package/dist/{web → gui}/client/assets/prism-c-04YixN25.js +0 -0
  1133. /package/dist/{web → gui}/client/assets/prism-clike-DapgWyxx.js +0 -0
  1134. /package/dist/{web → gui}/client/assets/prism-core-BtsZdCS6.js +0 -0
  1135. /package/dist/{web → gui}/client/assets/prism-cpp-C-lJbC-6.js +0 -0
  1136. /package/dist/{web → gui}/client/assets/prism-css-CPgOzxXp.js +0 -0
  1137. /package/dist/{web → gui}/client/assets/prism-diff-BF8m0_mq.js +0 -0
  1138. /package/dist/{web → gui}/client/assets/prism-docker-DkT6yOFj.js +0 -0
  1139. /package/dist/{web → gui}/client/assets/prism-fortran-Be5x3y1V.js +0 -0
  1140. /package/dist/{web → gui}/client/assets/prism-go-C_8qAH5n.js +0 -0
  1141. /package/dist/{web → gui}/client/assets/prism-ini-BESK3y0r.js +0 -0
  1142. /package/dist/{web → gui}/client/assets/prism-javascript-BnO-swvr.js +0 -0
  1143. /package/dist/{web → gui}/client/assets/prism-json-Dp_-W-Hv.js +0 -0
  1144. /package/dist/{web → gui}/client/assets/prism-jsx-D-D0NWtC.js +0 -0
  1145. /package/dist/{web → gui}/client/assets/prism-julia-DIjOgiAV.js +0 -0
  1146. /package/dist/{web → gui}/client/assets/prism-latex-DNMbqcH_.js +0 -0
  1147. /package/dist/{web → gui}/client/assets/prism-makefile-CRKWLQ8l.js +0 -0
  1148. /package/dist/{web → gui}/client/assets/prism-markdown-C0FPJ1Iz.js +0 -0
  1149. /package/dist/{web → gui}/client/assets/prism-markup-Cp04rIa1.js +0 -0
  1150. /package/dist/{web → gui}/client/assets/prism-matlab-D-nk08al.js +0 -0
  1151. /package/dist/{web → gui}/client/assets/prism-python-CfiSVtM6.js +0 -0
  1152. /package/dist/{web → gui}/client/assets/prism-r-QmNGR8LX.js +0 -0
  1153. /package/dist/{web → gui}/client/assets/prism-rust-Bu9N8X3N.js +0 -0
  1154. /package/dist/{web → gui}/client/assets/prism-shell-session-Be4UuYoM.js +0 -0
  1155. /package/dist/{web → gui}/client/assets/prism-sql-CYhVDMEE.js +0 -0
  1156. /package/dist/{web → gui}/client/assets/prism-toml-DKb54GAT.js +0 -0
  1157. /package/dist/{web → gui}/client/assets/prism-tsx-p6J2Kc_4.js +0 -0
  1158. /package/dist/{web → gui}/client/assets/prism-typescript-BMqONzxf.js +0 -0
  1159. /package/dist/{web → gui}/client/assets/prism-yaml-C0JHu8gr.js +0 -0
  1160. /package/dist/{web → gui}/client/assets/purify.es-ChwZkWde.js +0 -0
  1161. /package/dist/{web → gui}/client/assets/rolldown-runtime-hePW80VL.js +0 -0
  1162. /package/dist/{web → gui}/client/assets/rough.esm-Dy-Kn_BL.js +0 -0
  1163. /package/dist/{web → gui}/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +0 -0
  1164. /package/dist/{web → gui}/client/assets/src-B6xuSHsQ.js +0 -0
  1165. /package/dist/{web → gui}/client/clio-coder-logo.webp +0 -0
  1166. /package/dist/{web → gui}/client/icon-192.png +0 -0
  1167. /package/dist/{web → gui}/client/icon-512.png +0 -0
  1168. /package/dist/{web → gui}/client/manifest.webmanifest +0 -0
  1169. /package/dist/{web → gui}/client/offline.css +0 -0
  1170. /package/dist/{web → gui}/client/offline.html +0 -0
  1171. /package/dist/{web → gui}/client/offline.js +0 -0
  1172. /package/dist/{web → gui}/client/sw.js +0 -0
@@ -0,0 +1,1564 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ buildEvictionFields,
4
+ isProtected,
5
+ planEviction,
6
+ resolveWorkingSetPolicy,
7
+ tokensFreedByEviction
8
+ } from "./chunk-2DTIWSAW.js";
9
+ import {
10
+ DEFAULT_KEEP_RECENT_TOKENS,
11
+ estimateTokens,
12
+ findCutPoint,
13
+ projectWorkingSet
14
+ } from "./chunk-YQ6XEFVK.js";
15
+ import {
16
+ EMPTY_WORKING_SET_VIEW,
17
+ buildPathIndex,
18
+ callPathsByToolCallId,
19
+ covers,
20
+ foldWorkingSet,
21
+ isTurnStart,
22
+ protectionCutoffIndex,
23
+ selectVisibleEntries
24
+ } from "./chunk-EZD2BXGP.js";
25
+ import {
26
+ parseSessionEntries
27
+ } from "./chunk-EOJPDNUP.js";
28
+ import "./chunk-TKDRT2DF.js";
29
+ import "./chunk-DNHVRBH4.js";
30
+ import {
31
+ filterEntriesToActivePath
32
+ } from "./chunk-O5F25NIE.js";
33
+ import "./chunk-RNDCROSG.js";
34
+ import "./chunk-NDPF2N2L.js";
35
+ import "./chunk-DE2LU267.js";
36
+ import "./chunk-KECNXMDE.js";
37
+ import "./chunk-MCJKEGHO.js";
38
+ import "./chunk-6W75D37F.js";
39
+ import {
40
+ isSessionHeader
41
+ } from "./chunk-I4Y4WKZR.js";
42
+ import "./chunk-UZVYEF57.js";
43
+ import "./chunk-EKV4UBCM.js";
44
+ import {
45
+ assertSafeId
46
+ } from "./chunk-UHW5V7HC.js";
47
+ import "./chunk-P4GNZPXO.js";
48
+ import {
49
+ CLIO_PROJECT_DIR
50
+ } from "./chunk-NTTS3O53.js";
51
+ import "./chunk-MGLRTOCK.js";
52
+ import "./chunk-M4KFUXS7.js";
53
+ import "./chunk-V4XJWDHR.js";
54
+ import {
55
+ DEFAULT_WORKING_SET_SETTINGS
56
+ } from "./chunk-U2MSJ57E.js";
57
+ import "./chunk-KMF54VH3.js";
58
+ import {
59
+ clioStatePath
60
+ } from "./chunk-CTTI7G3T.js";
61
+ import "./chunk-CVDAFGPW.js";
62
+ import "./chunk-PPEZJWUG.js";
63
+ import "./chunk-WDV62RKY.js";
64
+ import "./chunk-ZZFWWYLX.js";
65
+ import "./chunk-3JHUFKG7.js";
66
+ import "./chunk-ZPST2KQO.js";
67
+ import "./chunk-PS6JAWJZ.js";
68
+ import "./chunk-FD2I4KBR.js";
69
+ import {
70
+ init_esm_shims
71
+ } from "./chunk-ECBHH7LU.js";
72
+
73
+ // src/cli/context-working-set.ts
74
+ init_esm_shims();
75
+ import { execFileSync } from "node:child_process";
76
+ import { mkdir, readdir as readdir2, readFile as readFile2, stat as stat2, writeFile } from "node:fs/promises";
77
+ import { basename as basename2, dirname as dirname2, join as join2, resolve as resolve2 } from "node:path";
78
+
79
+ // src/domains/context/working-set/replay/controls.ts
80
+ init_esm_shims();
81
+
82
+ // src/domains/context/working-set/replay/trace.ts
83
+ init_esm_shims();
84
+ function countReplayTurns(entries) {
85
+ let count = 0;
86
+ for (const entry of entries) {
87
+ if (isTurnStart(entry)) count += 1;
88
+ }
89
+ return count;
90
+ }
91
+
92
+ // src/domains/context/working-set/replay/controls.ts
93
+ function controlId(id) {
94
+ return id;
95
+ }
96
+ function eligibleToolResults(input) {
97
+ const cutoff = protectionCutoffIndex(input.entries, input.settings.protectLastTurns);
98
+ const index = buildPathIndex(input.entries, { cwd: input.cwd });
99
+ const out = [];
100
+ for (let entryIndex = cutoff - 1; entryIndex >= 0; entryIndex -= 1) {
101
+ const entry = input.entries[entryIndex];
102
+ if (entry?.kind !== "message" || entry.role !== "tool_result") continue;
103
+ if (input.view.evicted.has(entry.turnId)) continue;
104
+ if (isProtected(entry, { entryIndex, cutoffIndex: cutoff, input, index })) continue;
105
+ out.push(entry);
106
+ }
107
+ return out;
108
+ }
109
+ function takeToTarget(input, entries) {
110
+ let tokensNeeded = Math.max(0, input.pressure.tokens - input.pressure.target * input.pressure.contextWindow);
111
+ if (tokensNeeded <= 0) return [];
112
+ const selected = [];
113
+ const callPaths = callPathsByToolCallId(input.entries);
114
+ for (const entry of entries) {
115
+ const candidate = { ref: { entry: entry.turnId }, reason: "age_horizon" };
116
+ selected.push(candidate);
117
+ tokensNeeded -= tokensFreedByEviction(input.estimateTokens, entry, candidate, callPaths);
118
+ if (tokensNeeded <= 0) break;
119
+ }
120
+ return selected;
121
+ }
122
+ function makeOraclePolicy(graph) {
123
+ let lastInput = null;
124
+ let lastCandidateCount = 0;
125
+ const safeEntries = (input) => {
126
+ const currentTurn = countReplayTurns(input.entries) + 1;
127
+ return eligibleToolResults(input).filter((entry) => {
128
+ const futureTurns = graph.futureTurnsOf.get(entry.turnId) ?? [];
129
+ return futureTurns.every((turn) => turn < currentTurn);
130
+ });
131
+ };
132
+ return {
133
+ id: controlId("oracle"),
134
+ select(input) {
135
+ const safe = safeEntries(input);
136
+ lastInput = input;
137
+ lastCandidateCount = safe.length;
138
+ return takeToTarget(input, safe);
139
+ },
140
+ replayCandidateCount(input) {
141
+ return input === lastInput ? lastCandidateCount : safeEntries(input).length;
142
+ }
143
+ };
144
+ }
145
+ function mulberry32(seed) {
146
+ let value = seed >>> 0;
147
+ return () => {
148
+ value = value + 1831565813 >>> 0;
149
+ let next = value;
150
+ next = Math.imul(next ^ next >>> 15, next | 1);
151
+ next ^= next + Math.imul(next ^ next >>> 7, next | 61);
152
+ return ((next ^ next >>> 14) >>> 0) / 4294967296;
153
+ };
154
+ }
155
+ function makeRandomPolicy(seed) {
156
+ let lastInput = null;
157
+ let lastCandidateCount = 0;
158
+ return {
159
+ id: controlId("random"),
160
+ select(input) {
161
+ const entries = [...eligibleToolResults(input)];
162
+ lastInput = input;
163
+ lastCandidateCount = entries.length;
164
+ const random = mulberry32(seed);
165
+ for (let index = entries.length - 1; index > 0; index -= 1) {
166
+ const swap = Math.floor(random() * (index + 1));
167
+ const value = entries[index];
168
+ entries[index] = entries[swap];
169
+ entries[swap] = value;
170
+ }
171
+ return takeToTarget(input, entries);
172
+ },
173
+ replayCandidateCount(input) {
174
+ return input === lastInput ? lastCandidateCount : eligibleToolResults(input).length;
175
+ }
176
+ };
177
+ }
178
+ var nonePolicy = {
179
+ id: controlId("none"),
180
+ select: () => []
181
+ };
182
+
183
+ // src/domains/context/working-set/replay/load-clio.ts
184
+ init_esm_shims();
185
+ import { readdir, readFile, stat } from "node:fs/promises";
186
+ import { basename, dirname, join, resolve } from "node:path";
187
+
188
+ // src/domains/context/working-set/replay/reference-graph.ts
189
+ init_esm_shims();
190
+ var READ_CLASS_OPS = /* @__PURE__ */ new Set(["read", "grep", "find", "ls", "code_nav"]);
191
+ var MUTATION_OPS = /* @__PURE__ */ new Set(["write", "edit"]);
192
+ function isToolResult(entry) {
193
+ return entry?.kind === "message" && entry.role === "tool_result";
194
+ }
195
+ function isReadableObservation(observation) {
196
+ return !observation.isError && observation.path.length > 0 && READ_CLASS_OPS.has(observation.op);
197
+ }
198
+ function edgeKey(edge) {
199
+ return `${edge.from}\0${edge.toTurnIndex}\0${edge.kind}`;
200
+ }
201
+ function buildReferenceGraph(trace, index) {
202
+ const entryById = new Map(trace.entries.map((entry) => [entry.turnId, entry]));
203
+ const edges = [];
204
+ const seenEdges = /* @__PURE__ */ new Set();
205
+ const future = /* @__PURE__ */ new Map();
206
+ const add = (edge) => {
207
+ const key = edgeKey(edge);
208
+ if (seenEdges.has(key)) return;
209
+ seenEdges.add(key);
210
+ edges.push(edge);
211
+ if (edge.kind === "file_rewrite") return;
212
+ const turns = future.get(edge.from);
213
+ if (turns === void 0) future.set(edge.from, /* @__PURE__ */ new Set([edge.toTurnIndex]));
214
+ else turns.add(edge.toTurnIndex);
215
+ };
216
+ for (const earlier of index.observations) {
217
+ if (!isToolResult(entryById.get(earlier.ref.entry)) || !isReadableObservation(earlier)) continue;
218
+ const surfaced = new Set(earlier.surfaced);
219
+ for (const later of index.observations) {
220
+ if (later.entryIndex <= earlier.entryIndex) continue;
221
+ if (isReadableObservation(later) && later.path === earlier.path) {
222
+ add({ from: earlier.ref.entry, toTurnIndex: later.turnIndex, kind: "file_reread" });
223
+ }
224
+ if (isReadableObservation(later) && surfaced.has(later.path)) {
225
+ add({ from: earlier.ref.entry, toTurnIndex: later.turnIndex, kind: "file_discovery" });
226
+ }
227
+ if (later.path === earlier.path && MUTATION_OPS.has(later.op)) {
228
+ add({ from: earlier.ref.entry, toTurnIndex: later.turnIndex, kind: "file_rewrite" });
229
+ }
230
+ }
231
+ }
232
+ const futureTurnsOf = /* @__PURE__ */ new Map();
233
+ for (const [ref, turns] of future)
234
+ futureTurnsOf.set(
235
+ ref,
236
+ [...turns].sort((a, b) => a - b)
237
+ );
238
+ return { edges, futureTurnsOf };
239
+ }
240
+
241
+ // src/domains/context/working-set/replay/load-clio.ts
242
+ var DEFAULT_FILTER = {
243
+ minTurns: 8,
244
+ minToolResults: 8,
245
+ requireFileReread: true
246
+ };
247
+ async function collectLedgerFiles(input, out) {
248
+ const path = resolve(input);
249
+ let facts;
250
+ try {
251
+ facts = await stat(path);
252
+ } catch {
253
+ return;
254
+ }
255
+ if (facts.isFile()) {
256
+ if (path.endsWith(".jsonl")) out.add(path);
257
+ return;
258
+ }
259
+ if (!facts.isDirectory()) return;
260
+ const direct = join(path, "current.jsonl");
261
+ try {
262
+ if ((await stat(direct)).isFile()) {
263
+ out.add(direct);
264
+ return;
265
+ }
266
+ } catch {
267
+ }
268
+ let children;
269
+ try {
270
+ children = await readdir(path, { withFileTypes: true });
271
+ } catch {
272
+ return;
273
+ }
274
+ for (const child of children.sort((a, b) => a.name.localeCompare(b.name))) {
275
+ if (!child.isDirectory()) continue;
276
+ await collectLedgerFiles(join(path, child.name), out);
277
+ }
278
+ }
279
+ function sessionFacts(raw, source) {
280
+ const fallback = { id: basename(dirname(source)), cwd: null };
281
+ for (const line of raw.split("\n")) {
282
+ if (line.trim().length === 0) continue;
283
+ try {
284
+ const value = JSON.parse(line);
285
+ if (isSessionHeader(value)) return { id: value.id, cwd: value.cwd.length > 0 ? value.cwd : null };
286
+ } catch {
287
+ return fallback;
288
+ }
289
+ }
290
+ return fallback;
291
+ }
292
+ async function pinnedLeafTurnId(source) {
293
+ try {
294
+ const raw = await readFile(join(dirname(source), "meta.json"), "utf8");
295
+ const value = JSON.parse(raw);
296
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
297
+ const pinned = value.pinnedLeafTurnId;
298
+ return typeof pinned === "string" && pinned.length > 0 ? pinned : void 0;
299
+ } catch {
300
+ return void 0;
301
+ }
302
+ }
303
+ function cleanActiveEntries(entries, activeLeafTurnId) {
304
+ return filterEntriesToActivePath(entries, activeLeafTurnId).filter(
305
+ (entry) => entry.kind !== "contextEviction" && entry.kind !== "contextRecall"
306
+ );
307
+ }
308
+ function toolResultCount(entries) {
309
+ let count = 0;
310
+ for (const entry of entries) {
311
+ if (entry.kind === "message" && entry.role === "tool_result") count += 1;
312
+ }
313
+ return count;
314
+ }
315
+ async function loadClioTraces(paths, options = {}) {
316
+ const discovered = /* @__PURE__ */ new Set();
317
+ let missingInputs = 0;
318
+ for (const path of paths) {
319
+ const before = discovered.size;
320
+ await collectLedgerFiles(path, discovered);
321
+ if (discovered.size === before) {
322
+ try {
323
+ await stat(resolve(path));
324
+ } catch {
325
+ missingInputs += 1;
326
+ }
327
+ }
328
+ }
329
+ const filtered = {
330
+ turns_lt_8: 0,
331
+ tool_results_lt_8: 0,
332
+ no_file_reread: 0
333
+ };
334
+ const cascade = {
335
+ found: discovered.size,
336
+ unreadable: missingInputs,
337
+ filtered,
338
+ kept: 0
339
+ };
340
+ const traces = [];
341
+ const filter = options.filter === false ? null : {
342
+ minTurns: options.filter?.minTurns ?? DEFAULT_FILTER.minTurns,
343
+ minToolResults: options.filter?.minToolResults ?? DEFAULT_FILTER.minToolResults,
344
+ requireFileReread: options.filter?.requireFileReread ?? DEFAULT_FILTER.requireFileReread
345
+ };
346
+ for (const source of [...discovered].sort((a, b) => a.localeCompare(b))) {
347
+ let raw;
348
+ try {
349
+ raw = await readFile(source, "utf8");
350
+ } catch {
351
+ cascade.unreadable += 1;
352
+ continue;
353
+ }
354
+ const parsed = parseSessionEntries(raw, source);
355
+ if (parsed.errors.length > 0) {
356
+ cascade.unreadable += 1;
357
+ continue;
358
+ }
359
+ const entries = cleanActiveEntries(parsed.entries, await pinnedLeafTurnId(source));
360
+ const facts = sessionFacts(raw, source);
361
+ const trace = {
362
+ id: facts.id,
363
+ source,
364
+ cwd: facts.cwd,
365
+ entries,
366
+ turnCount: countReplayTurns(entries)
367
+ };
368
+ if (filter !== null) {
369
+ if (trace.turnCount < filter.minTurns) {
370
+ filtered.turns_lt_8 = (filtered.turns_lt_8 ?? 0) + 1;
371
+ continue;
372
+ }
373
+ if (toolResultCount(entries) < filter.minToolResults) {
374
+ filtered.tool_results_lt_8 = (filtered.tool_results_lt_8 ?? 0) + 1;
375
+ continue;
376
+ }
377
+ if (filter.requireFileReread) {
378
+ const graph = buildReferenceGraph(trace, buildPathIndex(entries, { cwd: trace.cwd }));
379
+ if (!graph.edges.some((edge) => edge.kind === "file_reread")) {
380
+ filtered.no_file_reread = (filtered.no_file_reread ?? 0) + 1;
381
+ continue;
382
+ }
383
+ }
384
+ }
385
+ traces.push(trace);
386
+ }
387
+ cascade.kept = traces.length;
388
+ return { traces, cascade };
389
+ }
390
+
391
+ // src/domains/context/working-set/replay/metrics.ts
392
+ init_esm_shims();
393
+ function safeFraction(numerator, denominator, empty) {
394
+ return denominator === 0 ? empty : numerator / denominator;
395
+ }
396
+ function survivesThrough(observation, referenceTurn, evictedAtTurn) {
397
+ const evictedAt = evictedAtTurn.get(observation.ref.entry);
398
+ return evictedAt === void 0 || evictedAt > referenceTurn;
399
+ }
400
+ function hasSurvivingCoveringRead(input, ref, referenceTurn) {
401
+ const original = input.index.byRef.get(ref);
402
+ if (original?.op !== "read" || original.path.length === 0) return false;
403
+ return (input.index.byPath.get(original.path) ?? []).some(
404
+ (later) => later.op === "read" && !later.isError && later.entryIndex > original.entryIndex && later.turnIndex < referenceTurn && covers(later.range, original.range) && survivesThrough(later, referenceTurn, input.replay.evictedAtTurn)
405
+ );
406
+ }
407
+ function measure(input) {
408
+ let pairs = 0;
409
+ let retainedPairs = 0;
410
+ let coveredRetainedPairs = 0;
411
+ let pairsAt10 = 0;
412
+ let retainedPairsAt10 = 0;
413
+ for (const [ref, futureTurns] of input.graph.futureTurnsOf) {
414
+ const observationTurn = input.index.byRef.get(ref)?.turnIndex;
415
+ const evictedAt = input.replay.evictedAtTurn.get(ref);
416
+ for (const referenceTurn of futureTurns) {
417
+ pairs += 1;
418
+ const retained = evictedAt === void 0 || evictedAt > referenceTurn;
419
+ if (retained) retainedPairs += 1;
420
+ if (retained || hasSurvivingCoveringRead(input, ref, referenceTurn)) coveredRetainedPairs += 1;
421
+ if (observationTurn !== void 0 && referenceTurn - observationTurn <= 10) {
422
+ pairsAt10 += 1;
423
+ if (retained) retainedPairsAt10 += 1;
424
+ }
425
+ }
426
+ }
427
+ let evictedItems = 0;
428
+ let safelyEvictedItems = 0;
429
+ let tokensEvicted = 0;
430
+ let recallTokens = 0;
431
+ let coldPrefixTokens2 = 0;
432
+ let saturatedEventCount = 0;
433
+ for (const event of input.replay.events) {
434
+ if (event.saturated) saturatedEventCount += 1;
435
+ coldPrefixTokens2 += event.coldPrefixTokens;
436
+ for (const item of event.items) {
437
+ evictedItems += 1;
438
+ tokensEvicted += item.tokensFreed;
439
+ const future = input.graph.futureTurnsOf.get(item.ref.entry) ?? [];
440
+ if (!future.some((turn) => turn > event.turnIndex)) safelyEvictedItems += 1;
441
+ else recallTokens += item.tokensFreed;
442
+ }
443
+ }
444
+ return {
445
+ metrics: {
446
+ traces: 1,
447
+ retention: safeFraction(retainedPairs, pairs, 1),
448
+ retentionCovered: safeFraction(coveredRetainedPairs, pairs, 1),
449
+ retentionAt10: safeFraction(retainedPairsAt10, pairsAt10, 1),
450
+ evictionPrecision: safeFraction(safelyEvictedItems, evictedItems, 1),
451
+ tokensEvicted,
452
+ recallTokens,
453
+ coldPrefixTokens: coldPrefixTokens2,
454
+ evictionEvents: input.replay.events.length,
455
+ saturatedEvents: safeFraction(saturatedEventCount, input.replay.events.length, 0),
456
+ turnsToFirstSummary: input.replay.turnsToFirstSummary,
457
+ summaries: input.replay.summaries
458
+ },
459
+ pairs,
460
+ retainedPairs,
461
+ coveredRetainedPairs,
462
+ pairsAt10,
463
+ retainedPairsAt10,
464
+ saturatedEventCount
465
+ };
466
+ }
467
+ function mean(values) {
468
+ return values.length === 0 ? 0 : values.reduce((sum, value) => sum + value, 0) / values.length;
469
+ }
470
+ function aggregateReplayMetrics(inputs) {
471
+ const measured = inputs.map(measure);
472
+ const firstSummaries = measured.map((entry) => entry.metrics.turnsToFirstSummary).filter((value) => value !== null);
473
+ const sum = (field) => measured.reduce((total, entry) => total + entry[field], 0);
474
+ const totalEvents = measured.reduce((total, entry) => total + entry.metrics.evictionEvents, 0);
475
+ const saturatedEvents = measured.reduce((total, entry) => total + entry.saturatedEventCount, 0);
476
+ return {
477
+ mean: {
478
+ traces: measured.length,
479
+ retention: measured.length === 0 ? 1 : mean(measured.map((entry) => entry.metrics.retention)),
480
+ retentionCovered: measured.length === 0 ? 1 : mean(measured.map((entry) => entry.metrics.retentionCovered)),
481
+ retentionAt10: measured.length === 0 ? 1 : mean(measured.map((entry) => entry.metrics.retentionAt10)),
482
+ evictionPrecision: measured.length === 0 ? 1 : mean(measured.map((entry) => entry.metrics.evictionPrecision)),
483
+ tokensEvicted: mean(measured.map((entry) => entry.metrics.tokensEvicted)),
484
+ recallTokens: mean(measured.map((entry) => entry.metrics.recallTokens)),
485
+ coldPrefixTokens: mean(measured.map((entry) => entry.metrics.coldPrefixTokens)),
486
+ evictionEvents: mean(measured.map((entry) => entry.metrics.evictionEvents)),
487
+ // Event-pooled: zero-event traces must not dilute the saturation rate.
488
+ saturatedEvents: safeFraction(saturatedEvents, totalEvents, 0),
489
+ turnsToFirstSummary: firstSummaries.length === 0 ? null : mean(firstSummaries),
490
+ summaries: mean(measured.map((entry) => entry.metrics.summaries))
491
+ },
492
+ turnsToFirstSummaryCount: firstSummaries.length,
493
+ pooledRetention: safeFraction(sum("retainedPairs"), sum("pairs"), 1),
494
+ pooledRetentionCovered: safeFraction(sum("coveredRetainedPairs"), sum("pairs"), 1),
495
+ pooledRetentionAt10: safeFraction(sum("retainedPairsAt10"), sum("pairsAt10"), 1)
496
+ };
497
+ }
498
+
499
+ // src/domains/context/working-set/replay/report.ts
500
+ init_esm_shims();
501
+ function metricObject(metrics, turnsToFirstSummaryCount) {
502
+ return {
503
+ traces: metrics.traces,
504
+ retention: metrics.retention,
505
+ retentionCovered: metrics.retentionCovered,
506
+ retentionAt10: metrics.retentionAt10,
507
+ evictionPrecision: metrics.evictionPrecision,
508
+ tokensEvicted: metrics.tokensEvicted,
509
+ recallTokens: metrics.recallTokens,
510
+ coldPrefixTokens: metrics.coldPrefixTokens,
511
+ evictionEvents: metrics.evictionEvents,
512
+ saturatedEvents: metrics.saturatedEvents,
513
+ turnsToFirstSummary: metrics.turnsToFirstSummary,
514
+ turnsToFirstSummaryCount,
515
+ summaries: metrics.summaries
516
+ };
517
+ }
518
+ function renderReplayJson(input) {
519
+ const filtered = Object.fromEntries(Object.entries(input.cascade.filtered).sort(([a], [b]) => a.localeCompare(b)));
520
+ const artifact = {
521
+ schema: "clio-coder-context-replay-v2",
522
+ config: {
523
+ policies: [...input.config.policies],
524
+ budgets: [...input.config.budgets],
525
+ threshold: input.config.threshold,
526
+ target: input.config.target,
527
+ seed: input.config.seed,
528
+ corpus: [...input.config.corpus],
529
+ filter: input.config.filter,
530
+ settings: {
531
+ enabled: input.config.settings.enabled,
532
+ policy: input.config.settings.policy,
533
+ target: input.config.settings.target,
534
+ protectLastTurns: input.config.settings.protectLastTurns,
535
+ minEvictableTokens: input.config.settings.minEvictableTokens
536
+ }
537
+ },
538
+ provenance: {
539
+ gitSha: input.gitSha,
540
+ commandLine: [...input.commandLine]
541
+ },
542
+ cascade: {
543
+ found: input.cascade.found,
544
+ unreadable: input.cascade.unreadable,
545
+ filtered,
546
+ kept: input.cascade.kept
547
+ },
548
+ results: input.results.map((result) => ({
549
+ budgetTokens: result.budgetTokens,
550
+ policyId: result.policyId,
551
+ metrics: {
552
+ mean: metricObject(result.metrics.mean, result.metrics.turnsToFirstSummaryCount),
553
+ pooledRetention: result.metrics.pooledRetention,
554
+ pooledRetentionCovered: result.metrics.pooledRetentionCovered,
555
+ pooledRetentionAt10: result.metrics.pooledRetentionAt10
556
+ }
557
+ }))
558
+ };
559
+ return `${JSON.stringify(artifact, null, " ")}
560
+ `;
561
+ }
562
+ function ratio(value) {
563
+ return value.toFixed(3);
564
+ }
565
+ function quantity(value) {
566
+ return Number.isInteger(value) ? String(value) : value.toFixed(1);
567
+ }
568
+ function cascadeRows(cascade) {
569
+ return [
570
+ `| found | ${cascade.found} |`,
571
+ `| unreadable | ${cascade.unreadable} |`,
572
+ ...Object.entries(cascade.filtered).map(([stage, count]) => `| ${stage} | ${count} |`),
573
+ `| kept | ${cascade.kept} |`
574
+ ];
575
+ }
576
+ function renderReplayMarkdown(input) {
577
+ const lines = [
578
+ "# Clio working-set replay",
579
+ "",
580
+ "## Inclusion cascade",
581
+ "",
582
+ "| stage | traces |",
583
+ "| --- | ---: |",
584
+ ...cascadeRows(input.cascade)
585
+ ];
586
+ for (const budget of input.config.budgets) {
587
+ lines.push(
588
+ "",
589
+ `## Budget ${budget}`,
590
+ "",
591
+ "| 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) |",
592
+ "| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |"
593
+ );
594
+ for (const policy of input.config.policies) {
595
+ const result = input.results.find((entry) => entry.budgetTokens === budget && entry.policyId === policy);
596
+ if (result === void 0) continue;
597
+ const metrics = result.metrics.mean;
598
+ lines.push(
599
+ `| ${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)} |`
600
+ );
601
+ }
602
+ }
603
+ lines.push("");
604
+ return lines.join("\n");
605
+ }
606
+
607
+ // src/domains/context/working-set/replay/runner.ts
608
+ init_esm_shims();
609
+ function sumTokens(entries) {
610
+ let tokens = 0;
611
+ for (const entry of entries) tokens += estimateTokens(entry);
612
+ return tokens;
613
+ }
614
+ function hasCandidatePool(policy) {
615
+ return "replayCandidateCount" in policy && typeof policy.replayCandidateCount === "function";
616
+ }
617
+ function latestCompactionIndex(entries) {
618
+ for (let index = entries.length - 1; index >= 0; index -= 1) {
619
+ if (entries[index]?.kind === "compactionSummary") return index;
620
+ }
621
+ return -1;
622
+ }
623
+ function eventSaturated(policy, input, plan) {
624
+ if (policy.id === "age-horizon") return true;
625
+ const targetTokens = input.pressure.target * input.pressure.contextWindow;
626
+ if (policy.id === "structural-v1") {
627
+ const thresholdTokens = input.pressure.threshold * input.pressure.contextWindow;
628
+ const usedAgeRung = plan.items.some((item) => item.reason === "age_horizon");
629
+ return plan.tokensAfter > targetTokens && (plan.tokensAfter > thresholdTokens || usedAgeRung);
630
+ }
631
+ if (hasCandidatePool(policy)) return plan.items.length === policy.replayCandidateCount(input);
632
+ return plan.tokensAfter > targetTokens;
633
+ }
634
+ function rebuildProjection(soFar, leaf, view) {
635
+ const raw = selectVisibleEntries(soFar, leaf ?? void 0);
636
+ const projected = projectWorkingSet(raw, view);
637
+ return {
638
+ raw,
639
+ projected,
640
+ indexByTurnId: new Map(raw.map((entry, index) => [entry.turnId, index])),
641
+ tokens: sumTokens(projected)
642
+ };
643
+ }
644
+ function projectAppendedEntry(entry, state, view) {
645
+ if (view.evictionEvents === 0) return entry;
646
+ const lastEventId = view.lastEvictionTurnId;
647
+ if (lastEventId !== null && state.indexByTurnId.has(lastEventId)) {
648
+ return entry;
649
+ }
650
+ return projectWorkingSet([entry], view)[0] ?? entry;
651
+ }
652
+ function appendVisibleEntry(entry, state, view) {
653
+ const projected = projectAppendedEntry(entry, state, view);
654
+ state.indexByTurnId.set(entry.turnId, state.raw.length);
655
+ state.raw.push(entry);
656
+ state.projected.push(projected);
657
+ state.tokens += estimateTokens(projected);
658
+ }
659
+ function applyEvictionProjection(state, synthetic, view, items) {
660
+ const affected = /* @__PURE__ */ new Set();
661
+ for (const item of items) {
662
+ const index = state.indexByTurnId.get(item.ref.entry);
663
+ if (index !== void 0) affected.add(index);
664
+ }
665
+ for (let index = 0; index < state.raw.length - 1; index += 1) {
666
+ const entry = state.raw[index];
667
+ if (entry?.kind === "message" && entry.role === "assistant") affected.add(index);
668
+ }
669
+ for (const index of affected) {
670
+ const source = state.raw[index];
671
+ const before = state.projected[index];
672
+ if (source === void 0 || before === void 0) continue;
673
+ const after = projectWorkingSet([source, synthetic], view)[0] ?? source;
674
+ state.projected[index] = after;
675
+ state.tokens += estimateTokens(after) - estimateTokens(before);
676
+ }
677
+ }
678
+ function coldPrefixTokens(state, items) {
679
+ let cut = state.projected.length;
680
+ for (const item of items) {
681
+ const index = state.indexByTurnId.get(item.ref.entry);
682
+ if (index !== void 0 && index < cut) cut = index;
683
+ }
684
+ let tokens = 0;
685
+ for (let index = cut; index < state.projected.length; index += 1) {
686
+ const entry = state.projected[index];
687
+ if (entry !== void 0) tokens += estimateTokens(entry);
688
+ }
689
+ return tokens;
690
+ }
691
+ function replayTrace(trace, policy, config) {
692
+ const soFar = [];
693
+ const events = [];
694
+ const evictedAtTurn = /* @__PURE__ */ new Map();
695
+ const toolResults = new Set(
696
+ trace.entries.filter((entry) => entry.kind === "message" && entry.role === "tool_result").map((entry) => entry.turnId)
697
+ );
698
+ let evictionSequence = 0;
699
+ let summaries = 0;
700
+ let turnIndex = 0;
701
+ let turnsToFirstSummary = null;
702
+ let lastMessageTurnId = null;
703
+ let view = EMPTY_WORKING_SET_VIEW;
704
+ let visible = { raw: [], projected: [], indexByTurnId: /* @__PURE__ */ new Map(), tokens: 0 };
705
+ const pressureLimit = config.threshold * config.budgetTokens;
706
+ for (const entry of trace.entries) {
707
+ if (isTurnStart(entry)) {
708
+ turnIndex += 1;
709
+ const leaf = lastMessageTurnId;
710
+ const tokens = visible.tokens;
711
+ if (tokens > pressureLimit) {
712
+ const input = {
713
+ entries: visible.raw,
714
+ view,
715
+ cwd: trace.cwd,
716
+ settings: config.settings,
717
+ pressure: {
718
+ tokens,
719
+ contextWindow: config.budgetTokens,
720
+ threshold: config.threshold,
721
+ target: config.target
722
+ },
723
+ estimateTokens
724
+ };
725
+ const plan = planEviction(policy, input);
726
+ if (plan !== null) {
727
+ const saturated = eventSaturated(policy, input, plan);
728
+ evictionSequence += 1;
729
+ const previous = soFar[soFar.length - 1];
730
+ const synthetic = {
731
+ ...buildEvictionFields(plan, {
732
+ trigger: "pressure",
733
+ pressureBefore: tokens / config.budgetTokens,
734
+ snapshotIdBefore: null
735
+ }),
736
+ turnId: `replay-evict-${evictionSequence}`,
737
+ parentTurnId: leaf,
738
+ timestamp: previous?.timestamp ?? entry.timestamp
739
+ };
740
+ soFar.push(synthetic);
741
+ appendVisibleEntry(synthetic, visible, view);
742
+ view = foldWorkingSet(soFar, leaf ?? void 0);
743
+ applyEvictionProjection(visible, synthetic, view, plan.items);
744
+ events.push({
745
+ turnIndex,
746
+ items: plan.items,
747
+ tokensBefore: plan.tokensBefore,
748
+ tokensAfter: plan.tokensAfter,
749
+ saturated,
750
+ coldPrefixTokens: coldPrefixTokens(visible, plan.items)
751
+ });
752
+ for (const item of plan.items) {
753
+ if (toolResults.has(item.ref.entry) && !evictedAtTurn.has(item.ref.entry)) {
754
+ evictedAtTurn.set(item.ref.entry, turnIndex);
755
+ }
756
+ }
757
+ }
758
+ if (visible.tokens > pressureLimit) {
759
+ if (turnsToFirstSummary === null) turnsToFirstSummary = turnIndex;
760
+ const previousCompactionIndex = latestCompactionIndex(soFar);
761
+ const boundaryStart = previousCompactionIndex + 1;
762
+ const cut = config.summaries === void 0 ? boundaryStart : findCutPoint(soFar, config.summaries.keepRecentTokens, { startIndex: boundaryStart }).firstKeptEntryIndex;
763
+ if (config.summaries !== void 0 && cut > boundaryStart) {
764
+ summaries += 1;
765
+ const visibleBefore = new Set(visible.raw.map((candidate) => candidate.turnId));
766
+ const previous = soFar[soFar.length - 1];
767
+ const firstKeptTurnId = soFar[cut]?.turnId ?? "";
768
+ const synthetic = {
769
+ kind: "compactionSummary",
770
+ turnId: `replay-summary-${summaries}`,
771
+ parentTurnId: firstKeptTurnId || null,
772
+ timestamp: previous?.timestamp ?? entry.timestamp,
773
+ summary: "#".repeat(config.summaries.summaryTokens * 4),
774
+ tokensBefore: visible.tokens,
775
+ firstKeptTurnId
776
+ };
777
+ soFar.push(synthetic);
778
+ visible = rebuildProjection(soFar, lastMessageTurnId, view);
779
+ const visibleAfter = new Set(visible.raw.map((candidate) => candidate.turnId));
780
+ for (const removed of visibleBefore) {
781
+ if (toolResults.has(removed) && !visibleAfter.has(removed) && !evictedAtTurn.has(removed)) {
782
+ evictedAtTurn.set(removed, turnIndex);
783
+ }
784
+ }
785
+ }
786
+ }
787
+ }
788
+ }
789
+ soFar.push(entry);
790
+ if (entry.kind === "compactionSummary") visible = rebuildProjection(soFar, lastMessageTurnId, view);
791
+ else appendVisibleEntry(entry, visible, view);
792
+ if (entry.kind === "message") lastMessageTurnId = entry.turnId;
793
+ }
794
+ return {
795
+ traceId: trace.id,
796
+ policyId: config.policyId,
797
+ budgetTokens: config.budgetTokens,
798
+ turnCount: trace.turnCount,
799
+ events,
800
+ evictedAtTurn,
801
+ turnsToFirstSummary,
802
+ summaries,
803
+ entries: soFar
804
+ };
805
+ }
806
+
807
+ // src/domains/context/working-set/replay/synthetic.ts
808
+ init_esm_shims();
809
+ var SYNTHETIC_CORPORA = [
810
+ {
811
+ id: "science-long",
812
+ seed: 7,
813
+ traces: 8,
814
+ turns: 300,
815
+ files: 48,
816
+ returnProbability: 0.3,
817
+ zipfExponent: 1,
818
+ scripts: { explore: 1, implement: 3, validate: 2, analyze: 2 },
819
+ fileLines: [12, 96],
820
+ simulationLines: [100, 2400],
821
+ offloadAfterLines: 200
822
+ },
823
+ {
824
+ id: "refactor",
825
+ seed: 11,
826
+ traces: 8,
827
+ turns: 200,
828
+ files: 64,
829
+ returnProbability: 0.4,
830
+ zipfExponent: 1,
831
+ scripts: { explore: 1, implement: 5, validate: 2, analyze: 0 },
832
+ fileLines: [16, 110],
833
+ simulationLines: [100, 400],
834
+ offloadAfterLines: 200
835
+ },
836
+ {
837
+ id: "exploration",
838
+ seed: 13,
839
+ traces: 8,
840
+ turns: 200,
841
+ files: 120,
842
+ returnProbability: 0.15,
843
+ zipfExponent: 1,
844
+ scripts: { explore: 4, implement: 1, validate: 1, analyze: 1 },
845
+ fileLines: [10, 64],
846
+ simulationLines: [100, 800],
847
+ offloadAfterLines: 200
848
+ }
849
+ ];
850
+ function syntheticCorpus(id) {
851
+ return SYNTHETIC_CORPORA.find((spec) => spec.id === id);
852
+ }
853
+ function mulberry322(seed) {
854
+ let value = seed >>> 0;
855
+ return () => {
856
+ value = value + 1831565813 >>> 0;
857
+ let next = value;
858
+ next = Math.imul(next ^ next >>> 15, next | 1);
859
+ next ^= next + Math.imul(next ^ next >>> 7, next | 61);
860
+ return ((next ^ next >>> 14) >>> 0) / 4294967296;
861
+ };
862
+ }
863
+ function powerLawRank(size, exponent, draw) {
864
+ const upper = size + 1;
865
+ const sample = exponent === 1 ? upper ** draw : (1 + draw * (upper ** (1 - exponent) - 1)) ** (1 / (1 - exponent));
866
+ return Math.min(size - 1, Math.max(0, Math.floor(sample) - 1));
867
+ }
868
+ var DIRECTORIES = ["src/sim", "src/io", "src/analysis", "src/mesh", "tests", "scripts", "configs"];
869
+ var STEMS = ["solver", "reader", "writer", "grid", "field", "boundary", "stepper", "metrics", "plot", "checkpoint"];
870
+ var EXTENSIONS = ["py", "py", "py", "c", "h", "yaml", "toml"];
871
+ var CONSUMED_LISTING_READ_LIMIT = 48;
872
+ var CONSUMED_LISTING_SAMPLE_LINES = 20;
873
+ var Ledger = class {
874
+ constructor(cwd) {
875
+ this.cwd = cwd;
876
+ }
877
+ cwd;
878
+ entries = [];
879
+ parent = null;
880
+ sequence = 0;
881
+ calls = 0;
882
+ next(kind) {
883
+ this.sequence += 1;
884
+ const turnId = `${kind}-${String(this.sequence).padStart(5, "0")}`;
885
+ const stamp = {
886
+ turnId,
887
+ parentTurnId: this.parent,
888
+ timestamp: new Date(1787e9 + this.sequence * 1e3).toISOString()
889
+ };
890
+ this.parent = turnId;
891
+ return stamp;
892
+ }
893
+ user(text) {
894
+ this.entries.push({ kind: "message", ...this.next("user"), role: "user", payload: { text } });
895
+ }
896
+ assistant(thinking, text) {
897
+ this.entries.push({
898
+ kind: "message",
899
+ ...this.next("assistant"),
900
+ role: "assistant",
901
+ payload: {
902
+ content: [
903
+ { type: "thinking", thinking },
904
+ { type: "text", text }
905
+ ]
906
+ }
907
+ });
908
+ }
909
+ call(name, args, text, options = {}) {
910
+ this.calls += 1;
911
+ const toolCallId = `call-${String(this.calls).padStart(5, "0")}`;
912
+ this.entries.push({ kind: "message", ...this.next("call"), role: "tool_call", payload: { toolCallId, name, args } });
913
+ const details = options.offload === true ? { resultDisposition: { offloadPath: `${this.cwd}/${CLIO_PROJECT_DIR}/scratch/${toolCallId}.txt` } } : void 0;
914
+ this.entries.push({
915
+ kind: "message",
916
+ ...this.next("result"),
917
+ role: "tool_result",
918
+ payload: {
919
+ toolCallId,
920
+ toolName: name,
921
+ result: { content: [{ type: "text", text }], ...details === void 0 ? {} : { details } },
922
+ isError: options.isError === true
923
+ }
924
+ });
925
+ }
926
+ };
927
+ function fileBody(file, offset = 0, limit = null) {
928
+ const end = limit === null ? file.lines : Math.min(file.lines, offset + limit);
929
+ const lines = [];
930
+ for (let line = offset + 1; line <= end; line += 1) {
931
+ lines.push(`${String(line).padStart(4, " ")} ${file.path}@v${file.version}: x[${line}] = f(x[${line - 1}]) + eps`);
932
+ }
933
+ return lines.join("\n");
934
+ }
935
+ function simulationOutput(lines, seed) {
936
+ const rnd = mulberry322(seed);
937
+ const out = [];
938
+ for (let step = 0; step < lines; step += 1) {
939
+ out.push(
940
+ `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)}`
941
+ );
942
+ }
943
+ return out.join("\n");
944
+ }
945
+ function testOutput(files, failing) {
946
+ const out = [
947
+ "============================= test session starts =============================",
948
+ `collected ${files.length * 4} items`,
949
+ ""
950
+ ];
951
+ for (const file of files) {
952
+ for (let case_ = 1; case_ <= 4; case_ += 1) {
953
+ out.push(
954
+ `${file.path}::test_${file.path.replace(/\W/g, "_")}_${case_} ${file === failing && case_ === 3 ? "FAILED" : "PASSED"} [${String(Math.round(100 * case_ / 4)).padStart(3, " ")}%]`
955
+ );
956
+ }
957
+ }
958
+ if (failing !== null) {
959
+ const line = Math.max(1, Math.floor(failing.lines / 2));
960
+ out.push(
961
+ "",
962
+ "=================================== FAILURES ===================================",
963
+ `____________________ test_${failing.path.replace(/\W/g, "_")}_3 ____________________`,
964
+ ""
965
+ );
966
+ for (let frame = 0; frame < 12; frame += 1) {
967
+ out.push(
968
+ ` File "${failing.path}", line ${line + frame}, in step_${frame}`,
969
+ ` residual = advance(state, dt) # frame ${frame}`
970
+ );
971
+ }
972
+ out.push(
973
+ "",
974
+ "AssertionError: residual 3.2e-4 exceeds tolerance 1e-6",
975
+ `FAILED ${failing.path}::test_${failing.path.replace(/\W/g, "_")}_3`
976
+ );
977
+ }
978
+ out.push(
979
+ "",
980
+ `${failing === null ? files.length * 4 : files.length * 4 - 1} passed, ${failing === null ? 0 : 1} failed`
981
+ );
982
+ return out.join("\n");
983
+ }
984
+ function generateSyntheticTrace(spec, index) {
985
+ const rnd = mulberry322(spec.seed * 1e3 + index);
986
+ const between = (low, high) => low + Math.floor(rnd() * (high - low + 1));
987
+ const pick = (items) => items[Math.floor(rnd() * items.length)];
988
+ const cwd = `/synthetic/${spec.id}-${index}`;
989
+ const ledger = new Ledger(cwd);
990
+ const repo = [];
991
+ for (let file = 0; file < spec.files; file += 1) {
992
+ const dir = DIRECTORIES[file % DIRECTORIES.length];
993
+ const stem = STEMS[Math.floor(file / DIRECTORIES.length) % STEMS.length];
994
+ const ext = EXTENSIONS[file % EXTENSIONS.length];
995
+ repo.push({
996
+ path: `${dir}/${stem}${Math.floor(file / (DIRECTORIES.length * STEMS.length)) || ""}.${ext}`,
997
+ lines: between(spec.fileLines[0], spec.fileLines[1]),
998
+ version: 1
999
+ });
1000
+ }
1001
+ const zipf = () => repo[powerLawRank(repo.length, spec.zipfExponent, rnd())];
1002
+ const scriptNames = Object.keys(spec.scripts).flatMap(
1003
+ (name) => Array.from({ length: spec.scripts[name] }, () => name)
1004
+ );
1005
+ const history = [];
1006
+ let treeListings = 0;
1007
+ const readWhole = (file) => ledger.call("read", { path: file.path }, fileBody(file));
1008
+ const readListingPath = (file) => ledger.call(
1009
+ "read",
1010
+ { path: file.path, offset: 1, limit: CONSUMED_LISTING_SAMPLE_LINES },
1011
+ fileBody(file, 0, CONSUMED_LISTING_SAMPLE_LINES)
1012
+ );
1013
+ const readRange = (file) => {
1014
+ const limit = between(20, 80);
1015
+ const offset = between(1, Math.max(1, file.lines - limit));
1016
+ ledger.call("read", { path: file.path, offset, limit }, fileBody(file, offset - 1, limit));
1017
+ };
1018
+ const edit = (file) => {
1019
+ file.version += 1;
1020
+ ledger.call(
1021
+ "edit",
1022
+ { path: file.path, edits: [{ oldText: `v${file.version - 1}`, newText: `v${file.version}` }] },
1023
+ `Applied 1 edit to ${file.path}`
1024
+ );
1025
+ };
1026
+ const runTests = (focus, failing) => ledger.call(
1027
+ "bash",
1028
+ { command: `pytest ${focus.map((file) => file.path).join(" ")} -q` },
1029
+ testOutput(focus, failing),
1030
+ { isError: failing !== null }
1031
+ );
1032
+ for (let turn = 0; turn < spec.turns; turn += 1) {
1033
+ const script = pick(scriptNames);
1034
+ const returning = history.length > 0 && rnd() < spec.returnProbability;
1035
+ const focus = returning ? pick(history) : Array.from({ length: between(1, 3) }, zipf);
1036
+ if (!returning) history.push(focus);
1037
+ const names = focus.map((file) => file.path).join(", ");
1038
+ ledger.user(`Episode ${turn + 1}: ${script} ${names}`);
1039
+ ledger.assistant(`Plan for ${script}: start from ${names} and keep the residual bounded.`, `Working on ${names}.`);
1040
+ switch (script) {
1041
+ case "explore": {
1042
+ const dir = pick(DIRECTORIES);
1043
+ const tree = rnd() < 0.6;
1044
+ const discovered = tree ? repo.slice(0, between(24, repo.length)) : repo.filter((file) => file.path.startsWith(`${dir}/`));
1045
+ const consumeListing = tree && treeListings % 7 === 0;
1046
+ if (tree) treeListings += 1;
1047
+ const listed = consumeListing ? repo.slice(0, CONSUMED_LISTING_READ_LIMIT) : discovered;
1048
+ const root = tree ? "." : dir;
1049
+ ledger.call(
1050
+ rnd() < 0.5 ? "find" : "ls",
1051
+ { path: root },
1052
+ listed.map((file) => tree ? file.path : file.path.slice(dir.length + 1)).join("\n")
1053
+ );
1054
+ const term = pick(["residual", "checkpoint", "boundary", "tolerance"]);
1055
+ const matches = repo.filter(() => rnd() < 0.15).slice(0, 20);
1056
+ ledger.call(
1057
+ "grep",
1058
+ { pattern: term, path: "src" },
1059
+ matches.map(
1060
+ (file) => `${file.path}:${between(1, file.lines)}: ${term} = compute_${term}(state, dt, tol=1e-6) # ${file.path}`
1061
+ ).join("\n")
1062
+ );
1063
+ const walk = consumeListing ? listed : listed.slice(0, between(2, 4));
1064
+ for (const file of walk) (consumeListing ? readListingPath : readWhole)(file);
1065
+ for (const file of matches.slice(0, between(0, 2))) readWhole(file);
1066
+ break;
1067
+ }
1068
+ case "implement": {
1069
+ for (const file of focus) {
1070
+ readWhole(file);
1071
+ edit(file);
1072
+ if (rnd() < 0.7) readRange(file);
1073
+ }
1074
+ break;
1075
+ }
1076
+ case "validate": {
1077
+ const culprit = pick(focus);
1078
+ readWhole(culprit);
1079
+ runTests(focus, culprit);
1080
+ edit(culprit);
1081
+ runTests(focus, null);
1082
+ break;
1083
+ }
1084
+ case "analyze": {
1085
+ const lines = between(spec.simulationLines[0], spec.simulationLines[1]);
1086
+ const text = simulationOutput(lines, spec.seed + turn);
1087
+ const offload = lines > spec.offloadAfterLines;
1088
+ ledger.call(
1089
+ "bash",
1090
+ { command: `python scripts/run_sim.py --config configs/run.yaml --steps ${lines}` },
1091
+ offload ? `${text.split("\n").slice(0, spec.offloadAfterLines).join("\n")}
1092
+ [tool result truncated]` : text,
1093
+ { offload }
1094
+ );
1095
+ const results = pick(focus);
1096
+ readRange(results);
1097
+ if (rnd() < 0.5)
1098
+ ledger.call(
1099
+ "grep",
1100
+ { pattern: "energy", path: results.path },
1101
+ `${results.path}:${between(1, results.lines)}: energy = 0.999`
1102
+ );
1103
+ break;
1104
+ }
1105
+ }
1106
+ ledger.assistant(`Checked ${names}; residual acceptable for this episode.`, `Done with episode ${turn + 1}.`);
1107
+ }
1108
+ const entries = ledger.entries;
1109
+ return {
1110
+ id: `${spec.id}-${String(index).padStart(2, "0")}`,
1111
+ source: `synthetic:${spec.id}#${index}`,
1112
+ cwd,
1113
+ entries,
1114
+ turnCount: countReplayTurns(entries)
1115
+ };
1116
+ }
1117
+ function generateSyntheticCorpora(ids) {
1118
+ const traces = [];
1119
+ for (const id of ids) {
1120
+ const spec = syntheticCorpus(id);
1121
+ if (spec === void 0) throw new Error(`unknown synthetic corpus: ${id}`);
1122
+ for (let index = 0; index < spec.traces; index += 1) traces.push(generateSyntheticTrace(spec, index));
1123
+ }
1124
+ return { traces, cascade: { found: traces.length, unreadable: 0, filtered: {}, kept: traces.length } };
1125
+ }
1126
+
1127
+ // src/cli/context-working-set.ts
1128
+ var REPLAY_HELP = `Usage:
1129
+ clio-coder context replay (--sessions <path>... | --synthetic <corpus>...) [options]
1130
+
1131
+ Options:
1132
+ --sessions <path>... Clio session directories, sessions roots, or ledger JSONL files
1133
+ --synthetic <ids> comma-separated procedural corpora: ${SYNTHETIC_CORPORA.map((spec) => spec.id).join(",")}
1134
+ --policies <ids> comma-separated none,random,age-horizon,structural-v1,oracle
1135
+ --budgets <tokens> comma-separated budgets (default: 16000,32000,64000)
1136
+ --threshold <ratio> pressure threshold (default: 0.8)
1137
+ --target <ratio> post-eviction pressure target (default: 0.6)
1138
+ --protect-last-turns <n>
1139
+ protected recent turns (default: ${DEFAULT_WORKING_SET_SETTINGS.protectLastTurns})
1140
+ --min-evictable-tokens <n>
1141
+ minimum tool-result body tokens (default: ${DEFAULT_WORKING_SET_SETTINGS.minEvictableTokens})
1142
+ --seed <integer> deterministic random-policy seed (default: 0)
1143
+ --no-filter include every readable transcript
1144
+ --json <path> write the stable JSON report
1145
+ --md <path> write Markdown instead of printing it
1146
+ `;
1147
+ var WORKING_SET_HELP = `Usage:
1148
+ clio-coder context working-set --session <id|path>
1149
+
1150
+ Print the durable working-set fold and path-index summary for one Clio session.
1151
+ `;
1152
+ var REPLAY_SUMMARY_TOKENS = 1500;
1153
+ var POLICY_IDS = ["none", "random", "age-horizon", "structural-v1", "oracle"];
1154
+ var CliUsageError = class extends Error {
1155
+ };
1156
+ function commaValues(value, flag) {
1157
+ const values = value.split(",").map((entry) => entry.trim()).filter((entry) => entry.length > 0);
1158
+ if (values.length === 0) throw new CliUsageError(`${flag} requires at least one value`);
1159
+ return [...new Set(values)];
1160
+ }
1161
+ function numberValue(value, flag) {
1162
+ const parsed = Number(value);
1163
+ if (!Number.isFinite(parsed)) throw new CliUsageError(`${flag} requires a finite number`);
1164
+ return parsed;
1165
+ }
1166
+ function requiredValue(args, index, flag) {
1167
+ const value = args[index + 1];
1168
+ if (value === void 0 || value.startsWith("--")) throw new CliUsageError(`${flag} requires a value`);
1169
+ return value;
1170
+ }
1171
+ function policyResolves(id) {
1172
+ if (id === "none" || id === "random" || id === "oracle") return true;
1173
+ try {
1174
+ resolveWorkingSetPolicy(id);
1175
+ return true;
1176
+ } catch {
1177
+ return false;
1178
+ }
1179
+ }
1180
+ function defaultPolicies() {
1181
+ return POLICY_IDS.filter(policyResolves);
1182
+ }
1183
+ function parseReplayArgs(args) {
1184
+ const parsed = {
1185
+ sessions: [],
1186
+ policies: defaultPolicies(),
1187
+ budgets: [16e3, 32e3, 64e3],
1188
+ threshold: 0.8,
1189
+ target: 0.6,
1190
+ protectLastTurns: DEFAULT_WORKING_SET_SETTINGS.protectLastTurns,
1191
+ minEvictableTokens: DEFAULT_WORKING_SET_SETTINGS.minEvictableTokens,
1192
+ seed: 0,
1193
+ synthetic: [],
1194
+ noFilter: false
1195
+ };
1196
+ let policiesExplicit = false;
1197
+ for (let index = 0; index < args.length; index += 1) {
1198
+ const arg = args[index];
1199
+ if (arg === "--no-filter") {
1200
+ parsed.noFilter = true;
1201
+ continue;
1202
+ }
1203
+ if (arg === "--sessions") {
1204
+ let consumed = 0;
1205
+ while (index + 1 < args.length && !args[index + 1]?.startsWith("--")) {
1206
+ parsed.sessions.push(args[index + 1]);
1207
+ index += 1;
1208
+ consumed += 1;
1209
+ }
1210
+ if (consumed === 0) throw new CliUsageError("--sessions requires at least one path");
1211
+ continue;
1212
+ }
1213
+ if (arg === "--policies" || arg === "--budgets" || arg === "--synthetic" || arg === "--threshold" || arg === "--target" || arg === "--protect-last-turns" || arg === "--min-evictable-tokens" || arg === "--seed") {
1214
+ const value = requiredValue(args, index, arg);
1215
+ index += 1;
1216
+ if (arg === "--policies") {
1217
+ const values = commaValues(value, arg);
1218
+ const unknown = values.filter((entry) => !POLICY_IDS.includes(entry));
1219
+ if (unknown.length > 0) throw new CliUsageError(`unknown replay policy: ${unknown.join(", ")}`);
1220
+ parsed.policies = values;
1221
+ policiesExplicit = true;
1222
+ } else if (arg === "--budgets") {
1223
+ parsed.budgets = commaValues(value, arg).map((entry) => {
1224
+ const budget = numberValue(entry, arg);
1225
+ if (!Number.isInteger(budget) || budget <= 0) {
1226
+ throw new CliUsageError("--budgets values must be positive integers");
1227
+ }
1228
+ return budget;
1229
+ });
1230
+ } else if (arg === "--synthetic") {
1231
+ const values = commaValues(value, arg);
1232
+ const known = SYNTHETIC_CORPORA.map((spec) => spec.id);
1233
+ const unknown = values.filter((entry) => !known.includes(entry));
1234
+ if (unknown.length > 0) throw new CliUsageError(`unknown synthetic corpus: ${unknown.join(", ")}`);
1235
+ parsed.synthetic = values;
1236
+ } else if (arg === "--threshold") {
1237
+ parsed.threshold = numberValue(value, arg);
1238
+ if (parsed.threshold <= 0 || parsed.threshold > 1) {
1239
+ throw new CliUsageError("--threshold must be greater than 0 and at most 1");
1240
+ }
1241
+ } else if (arg === "--target") {
1242
+ parsed.target = numberValue(value, arg);
1243
+ if (parsed.target <= 0 || parsed.target >= 1) {
1244
+ throw new CliUsageError("--target must be greater than 0 and less than 1");
1245
+ }
1246
+ } else if (arg === "--protect-last-turns") {
1247
+ parsed.protectLastTurns = numberValue(value, arg);
1248
+ if (!Number.isInteger(parsed.protectLastTurns) || parsed.protectLastTurns < 1) {
1249
+ throw new CliUsageError("--protect-last-turns must be an integer at least 1");
1250
+ }
1251
+ } else if (arg === "--min-evictable-tokens") {
1252
+ parsed.minEvictableTokens = numberValue(value, arg);
1253
+ if (!Number.isInteger(parsed.minEvictableTokens) || parsed.minEvictableTokens < 0) {
1254
+ throw new CliUsageError("--min-evictable-tokens must be a non-negative integer");
1255
+ }
1256
+ } else {
1257
+ parsed.seed = numberValue(value, arg);
1258
+ if (!Number.isInteger(parsed.seed)) throw new CliUsageError("--seed must be an integer");
1259
+ }
1260
+ continue;
1261
+ }
1262
+ if (arg === "--json" || arg === "--md") {
1263
+ const value = requiredValue(args, index, arg);
1264
+ index += 1;
1265
+ if (arg === "--json") parsed.jsonPath = value;
1266
+ else parsed.markdownPath = value;
1267
+ continue;
1268
+ }
1269
+ throw new CliUsageError(`unknown flag ${arg}`);
1270
+ }
1271
+ if (parsed.sessions.length === 0 && parsed.synthetic.length === 0) {
1272
+ throw new CliUsageError("--sessions or --synthetic is required");
1273
+ }
1274
+ if (parsed.target >= parsed.threshold) throw new CliUsageError("--target must be less than --threshold");
1275
+ if (policiesExplicit) {
1276
+ const unavailable = parsed.policies.filter((id) => !policyResolves(id));
1277
+ if (unavailable.length > 0) {
1278
+ throw new CliUsageError(`replay policy is not available in this build: ${unavailable.join(", ")}`);
1279
+ }
1280
+ }
1281
+ return parsed;
1282
+ }
1283
+ function policyForTrace(id, graph, seed) {
1284
+ if (id === "none") return nonePolicy;
1285
+ if (id === "random") return makeRandomPolicy(seed);
1286
+ if (id === "oracle") return makeOraclePolicy(graph);
1287
+ return resolveWorkingSetPolicy(id);
1288
+ }
1289
+ function gitSha() {
1290
+ try {
1291
+ return execFileSync("git", ["rev-parse", "HEAD"], {
1292
+ cwd: process.cwd(),
1293
+ encoding: "utf8",
1294
+ stdio: ["ignore", "pipe", "ignore"]
1295
+ }).trim();
1296
+ } catch {
1297
+ return null;
1298
+ }
1299
+ }
1300
+ function exactCommandLine() {
1301
+ return [process.execPath, ...process.execArgv, ...process.argv.slice(1)];
1302
+ }
1303
+ async function writeOutput(path, contents) {
1304
+ const output = resolve2(path);
1305
+ await mkdir(dirname2(output), { recursive: true });
1306
+ await writeFile(output, contents, "utf8");
1307
+ return output;
1308
+ }
1309
+ function cascadeLine(cascade) {
1310
+ const filtered = Object.entries(cascade.filtered).map(([stage, count]) => `${stage}=${count}`).join(" ");
1311
+ return `cascade found=${cascade.found} unreadable=${cascade.unreadable} ${filtered} kept=${cascade.kept}`;
1312
+ }
1313
+ async function runContextReplayCommand(args) {
1314
+ if (args.includes("--help") || args.includes("-h")) {
1315
+ process.stdout.write(REPLAY_HELP);
1316
+ return 0;
1317
+ }
1318
+ let parsed;
1319
+ try {
1320
+ parsed = parseReplayArgs(args);
1321
+ } catch (error) {
1322
+ process.stderr.write(
1323
+ `clio-coder context replay: ${error instanceof Error ? error.message : String(error)}
1324
+ ${REPLAY_HELP}`
1325
+ );
1326
+ return 2;
1327
+ }
1328
+ try {
1329
+ const ledgers = await loadClioTraces(parsed.sessions, { filter: parsed.noFilter ? false : {} });
1330
+ const synthetic = generateSyntheticCorpora(parsed.synthetic);
1331
+ const loaded = {
1332
+ traces: [...ledgers.traces, ...synthetic.traces],
1333
+ cascade: {
1334
+ found: ledgers.cascade.found + synthetic.cascade.found,
1335
+ unreadable: ledgers.cascade.unreadable,
1336
+ filtered: ledgers.cascade.filtered,
1337
+ kept: ledgers.cascade.kept + synthetic.cascade.kept
1338
+ }
1339
+ };
1340
+ if (loaded.traces.length === 0) {
1341
+ process.stderr.write(`clio-coder context replay: no traces to replay (${cascadeLine(loaded.cascade)})
1342
+ `);
1343
+ return 1;
1344
+ }
1345
+ const indexed = loaded.traces.map((trace) => {
1346
+ const index = buildPathIndex(trace.entries, { cwd: trace.cwd });
1347
+ return { trace, index, graph: buildReferenceGraph(trace, index) };
1348
+ });
1349
+ const settings = {
1350
+ ...DEFAULT_WORKING_SET_SETTINGS,
1351
+ target: parsed.target,
1352
+ protectLastTurns: parsed.protectLastTurns,
1353
+ minEvictableTokens: parsed.minEvictableTokens
1354
+ };
1355
+ const results = [];
1356
+ for (const budgetTokens of parsed.budgets) {
1357
+ for (const policyId of parsed.policies) {
1358
+ const measurements = indexed.map(({ trace, index, graph }) => ({
1359
+ trace,
1360
+ index,
1361
+ graph,
1362
+ replay: replayTrace(trace, policyForTrace(policyId, graph, parsed.seed), {
1363
+ policyId,
1364
+ budgetTokens,
1365
+ threshold: parsed.threshold,
1366
+ target: parsed.target,
1367
+ settings,
1368
+ seed: parsed.seed,
1369
+ summaries: { keepRecentTokens: DEFAULT_KEEP_RECENT_TOKENS, summaryTokens: REPLAY_SUMMARY_TOKENS }
1370
+ })
1371
+ }));
1372
+ results.push({ budgetTokens, policyId, metrics: aggregateReplayMetrics(measurements) });
1373
+ }
1374
+ }
1375
+ const report = {
1376
+ config: {
1377
+ policies: parsed.policies,
1378
+ budgets: parsed.budgets,
1379
+ threshold: parsed.threshold,
1380
+ target: parsed.target,
1381
+ seed: parsed.seed,
1382
+ corpus: [...parsed.sessions.length > 0 ? ["ledgers"] : [], ...parsed.synthetic],
1383
+ filter: parsed.noFilter ? "none" : "default",
1384
+ settings
1385
+ },
1386
+ cascade: loaded.cascade,
1387
+ results,
1388
+ gitSha: gitSha(),
1389
+ commandLine: exactCommandLine()
1390
+ };
1391
+ const markdown = renderReplayMarkdown(report);
1392
+ if (parsed.markdownPath === void 0) process.stdout.write(markdown);
1393
+ else {
1394
+ const path = await writeOutput(parsed.markdownPath, markdown);
1395
+ process.stdout.write(`${cascadeLine(loaded.cascade)}
1396
+ markdown ${path}
1397
+ `);
1398
+ }
1399
+ if (parsed.jsonPath !== void 0) {
1400
+ const path = await writeOutput(parsed.jsonPath, renderReplayJson(report));
1401
+ process.stdout.write(`json ${path}
1402
+ `);
1403
+ }
1404
+ return 0;
1405
+ } catch (error) {
1406
+ process.stderr.write(`clio-coder context replay failed: ${error instanceof Error ? error.message : String(error)}
1407
+ `);
1408
+ return 1;
1409
+ }
1410
+ }
1411
+ async function sessionPath(value) {
1412
+ const candidate = resolve2(value);
1413
+ try {
1414
+ const facts = await stat2(candidate);
1415
+ if (facts.isDirectory()) return join2(candidate, "current.jsonl");
1416
+ if (facts.isFile()) return candidate;
1417
+ } catch {
1418
+ }
1419
+ try {
1420
+ assertSafeId(value, "session");
1421
+ } catch (error) {
1422
+ throw new CliUsageError(error instanceof Error ? error.message : String(error));
1423
+ }
1424
+ const sessionsRoot = join2(clioStatePath(), "sessions");
1425
+ let cwdHashes;
1426
+ try {
1427
+ cwdHashes = await readdir2(sessionsRoot);
1428
+ } catch {
1429
+ throw new Error(`session not found: ${value}`);
1430
+ }
1431
+ for (const cwdHash of cwdHashes.sort()) {
1432
+ const current = join2(sessionsRoot, cwdHash, value, "current.jsonl");
1433
+ try {
1434
+ if ((await stat2(current)).isFile()) return current;
1435
+ } catch {
1436
+ }
1437
+ }
1438
+ throw new Error(`session not found: ${value}`);
1439
+ }
1440
+ async function pinnedLeafForSession(source) {
1441
+ try {
1442
+ const raw = await readFile2(join2(dirname2(source), "meta.json"), "utf8");
1443
+ const value = JSON.parse(raw);
1444
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
1445
+ const pinned = value.pinnedLeafTurnId;
1446
+ return typeof pinned === "string" && pinned.length > 0 ? pinned : void 0;
1447
+ } catch {
1448
+ return void 0;
1449
+ }
1450
+ }
1451
+ async function sessionCwdForSession(source) {
1452
+ try {
1453
+ const raw = await readFile2(join2(dirname2(source), "meta.json"), "utf8");
1454
+ const value = JSON.parse(raw);
1455
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return null;
1456
+ const cwd = value.cwd;
1457
+ return typeof cwd === "string" && cwd.length > 0 ? cwd : null;
1458
+ } catch {
1459
+ return null;
1460
+ }
1461
+ }
1462
+ function formatWorkingSet(trace) {
1463
+ const view = foldWorkingSet(trace.entries);
1464
+ const index = buildPathIndex(trace.entries, { cwd: trace.cwd });
1465
+ const graph = buildReferenceGraph(trace, index);
1466
+ const evictedTokens = [...view.evicted.values()].reduce((sum, state) => sum + state.tokensFreed, 0);
1467
+ const churn = view.itemsEvicted === 0 ? "n/a" : (view.recalls / view.itemsEvicted).toFixed(3);
1468
+ const opCounts = /* @__PURE__ */ new Map();
1469
+ for (const observation of index.observations) {
1470
+ opCounts.set(observation.op, (opCounts.get(observation.op) ?? 0) + 1);
1471
+ }
1472
+ const rewrittenPaths = /* @__PURE__ */ new Set();
1473
+ for (const edge of graph.edges) {
1474
+ if (edge.kind !== "file_rewrite") continue;
1475
+ const path = index.byRef.get(edge.from)?.path;
1476
+ if (path) rewrittenPaths.add(path);
1477
+ }
1478
+ const lines = [
1479
+ `session: ${trace.id}`,
1480
+ `source: ${trace.source}`,
1481
+ "working set:",
1482
+ ` policy: ${view.lastPolicyId ?? "none"}`,
1483
+ ` eviction events: ${view.evictionEvents}`,
1484
+ ` evicted refs: ${view.evicted.size}`,
1485
+ ` items evicted: ${view.itemsEvicted}`,
1486
+ ` evicted tokens: ${evictedTokens}`,
1487
+ ` recalls: ${view.recalls}`,
1488
+ ` churn: ${churn}`,
1489
+ " refs:",
1490
+ ...[...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}`),
1491
+ "path index:",
1492
+ ` observations: ${index.observations.length}`,
1493
+ ` ops: ${[...opCounts.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([op, count]) => `${op}=${count}`).join(", ") || "none"}`,
1494
+ ` paths with rewrites: ${rewrittenPaths.size}`,
1495
+ ...[...rewrittenPaths].sort().map((path) => ` ${path}`),
1496
+ ""
1497
+ ];
1498
+ return lines.join("\n");
1499
+ }
1500
+ async function runContextWorkingSetCommand(args) {
1501
+ if (args.includes("--help") || args.includes("-h")) {
1502
+ process.stdout.write(WORKING_SET_HELP);
1503
+ return 0;
1504
+ }
1505
+ let session;
1506
+ for (let index = 0; index < args.length; index += 1) {
1507
+ const arg = args[index];
1508
+ if (arg === "--session") {
1509
+ try {
1510
+ session = requiredValue(args, index, arg);
1511
+ } catch (error) {
1512
+ process.stderr.write(
1513
+ `clio-coder context working-set: ${error instanceof Error ? error.message : String(error)}
1514
+ ${WORKING_SET_HELP}`
1515
+ );
1516
+ return 2;
1517
+ }
1518
+ index += 1;
1519
+ continue;
1520
+ }
1521
+ process.stderr.write(`clio-coder context working-set: unknown flag ${arg}
1522
+ ${WORKING_SET_HELP}`);
1523
+ return 2;
1524
+ }
1525
+ if (session === void 0) {
1526
+ process.stderr.write(`clio-coder context working-set: --session is required
1527
+ ${WORKING_SET_HELP}`);
1528
+ return 2;
1529
+ }
1530
+ try {
1531
+ const source = await sessionPath(session);
1532
+ const raw = await readFile2(source, "utf8");
1533
+ const parsed = parseSessionEntries(raw, source);
1534
+ if (parsed.errors.length > 0) throw new Error(parsed.errors.join("; "));
1535
+ const entries = filterEntriesToActivePath(parsed.entries, await pinnedLeafForSession(source));
1536
+ const cwd = await sessionCwdForSession(source);
1537
+ process.stdout.write(
1538
+ formatWorkingSet({
1539
+ id: basename2(dirname2(source)),
1540
+ source,
1541
+ cwd,
1542
+ entries,
1543
+ turnCount: buildPathIndex(entries, { cwd }).turnCount
1544
+ })
1545
+ );
1546
+ return 0;
1547
+ } catch (error) {
1548
+ if (error instanceof CliUsageError) {
1549
+ process.stderr.write(`clio-coder context working-set: ${error.message}
1550
+ ${WORKING_SET_HELP}`);
1551
+ return 2;
1552
+ }
1553
+ process.stderr.write(
1554
+ `clio-coder context working-set failed: ${error instanceof Error ? error.message : String(error)}
1555
+ `
1556
+ );
1557
+ return 1;
1558
+ }
1559
+ }
1560
+ export {
1561
+ runContextReplayCommand,
1562
+ runContextWorkingSetCommand
1563
+ };
1564
+ //# sourceMappingURL=context-working-set-MRAEVDNV.js.map