@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
@@ -1,1529 +0,0 @@
1
- import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
- import {
3
- assertSafeId
4
- } from "./chunk-UHW5V7HC.js";
5
- import {
6
- safeResourceWrite
7
- } from "./chunk-ZZFWWYLX.js";
8
- import {
9
- init_esm_shims
10
- } from "./chunk-ECBHH7LU.js";
11
-
12
- // src/domains/eval/schema/execution-envelope.ts
13
- init_esm_shims();
14
-
15
- // src/domains/eval/schema/naming.ts
16
- init_esm_shims();
17
- function normalizeEvalSchemaId(value) {
18
- return typeof value === "string" && value.startsWith("clio.eval.") ? `clio-coder.eval.${value.slice("clio.eval.".length)}` : value;
19
- }
20
- function normalizeEvalRunnerKind(value) {
21
- return value === "clio-run" ? "clio-coder-run" : value;
22
- }
23
-
24
- // src/domains/eval/schema/execution-envelope.ts
25
- var EVAL_EXECUTION_ENVELOPE_SCHEMA_V1 = "clio-coder.eval.execution-envelope.v1";
26
- var EVAL_EXECUTION_MATRIX_DIMENSIONS_V1 = [
27
- "prompt",
28
- "recipe",
29
- "target",
30
- "wireModel",
31
- "runtime",
32
- "thinkingLevel",
33
- "toolSignature",
34
- "autonomy",
35
- "policy",
36
- "projectContext",
37
- "corpus"
38
- ];
39
- function parseEvalExecutionEnvelopeV1(value, source = "execution envelope") {
40
- const record = asRecord(value, source);
41
- if (normalizeEvalSchemaId(record.schema) !== EVAL_EXECUTION_ENVELOPE_SCHEMA_V1) {
42
- throw new Error(`${source}.schema: expected ${EVAL_EXECUTION_ENVELOPE_SCHEMA_V1}`);
43
- }
44
- const prompt = asRecord(record.prompt, `${source}.prompt`);
45
- if (!Array.isArray(prompt.fragments)) throw new Error(`${source}.prompt.fragments: expected array`);
46
- const fragments = prompt.fragments.map((entry, index) => {
47
- const fragment = asRecord(entry, `${source}.prompt.fragments[${index}]`);
48
- const version = fragment.version;
49
- if (version !== "unversioned" && (!Number.isInteger(version) || typeof version !== "number" || version <= 0)) {
50
- throw new Error(`${source}.prompt.fragments[${index}].version: expected positive integer or unversioned`);
51
- }
52
- return {
53
- id: readString(fragment.id, `${source}.prompt.fragments[${index}].id`),
54
- version,
55
- contentHash: readDigest(fragment.contentHash, `${source}.prompt.fragments[${index}].contentHash`)
56
- };
57
- });
58
- const fragmentIds = fragments.map((fragment) => fragment.id);
59
- if (new Set(fragmentIds).size !== fragmentIds.length) {
60
- throw new Error(`${source}.prompt.fragments: duplicate fragment id`);
61
- }
62
- const recipe = record.recipe === null ? null : (() => {
63
- const value2 = asRecord(record.recipe, `${source}.recipe`);
64
- const version = value2.version;
65
- if (!Number.isInteger(version) || typeof version !== "number" || version <= 0) {
66
- throw new Error(`${source}.recipe.version: expected positive integer`);
67
- }
68
- return {
69
- id: readString(value2.id, `${source}.recipe.id`),
70
- version,
71
- contentHash: readDigest(value2.contentHash, `${source}.recipe.contentHash`)
72
- };
73
- })();
74
- const policyHashes = asRecord(record.policyHashes, `${source}.policyHashes`);
75
- const projectContext = asRecord(record.projectContext, `${source}.projectContext`);
76
- const projectKind = projectContext.kind;
77
- if (projectKind !== "none" && projectKind !== "session" && projectKind !== "worker") {
78
- throw new Error(`${source}.projectContext.kind: expected none, session, or worker`);
79
- }
80
- const corpus = asRecord(record.corpus, `${source}.corpus`);
81
- return {
82
- schema: EVAL_EXECUTION_ENVELOPE_SCHEMA_V1,
83
- prompt: {
84
- fragments,
85
- compositionHash: readNullableDigest(prompt.compositionHash, `${source}.prompt.compositionHash`)
86
- },
87
- recipe,
88
- target: readString(record.target, `${source}.target`),
89
- wireModel: readNullableString(record.wireModel, `${source}.wireModel`),
90
- runtime: readNullableString(record.runtime, `${source}.runtime`),
91
- thinkingLevel: readNullableString(record.thinkingLevel, `${source}.thinkingLevel`),
92
- toolSignature: readNullableDigest(record.toolSignature, `${source}.toolSignature`),
93
- autonomy: readNullableString(record.autonomy, `${source}.autonomy`),
94
- policyHashes: {
95
- rulePack: readNullableDigest(policyHashes.rulePack, `${source}.policyHashes.rulePack`),
96
- project: readNullableDigest(policyHashes.project, `${source}.policyHashes.project`)
97
- },
98
- projectContext: {
99
- kind: projectKind,
100
- tier: readNullableString(projectContext.tier, `${source}.projectContext.tier`),
101
- contentHash: readNullableDigest(projectContext.contentHash, `${source}.projectContext.contentHash`),
102
- chars: readNullableNonNegativeInteger(projectContext.chars, `${source}.projectContext.chars`),
103
- sections: readStringArray(projectContext.sections, `${source}.projectContext.sections`),
104
- rulesApplied: readStringArray(projectContext.rulesApplied, `${source}.projectContext.rulesApplied`),
105
- operatorProfileApplied: readNullableBoolean(
106
- projectContext.operatorProfileApplied,
107
- `${source}.projectContext.operatorProfileApplied`
108
- )
109
- },
110
- corpus: {
111
- id: readString(corpus.id, `${source}.corpus.id`),
112
- version: readString(corpus.version, `${source}.corpus.version`)
113
- }
114
- };
115
- }
116
- function parseEvalExecutionMatrixDimensionsV1(value, source) {
117
- if (!Array.isArray(value)) throw new Error(`${source}: expected array`);
118
- const allowed = new Set(EVAL_EXECUTION_MATRIX_DIMENSIONS_V1);
119
- const dimensions = value.map((entry, index) => {
120
- if (typeof entry !== "string" || !allowed.has(entry)) {
121
- throw new Error(`${source}[${index}]: expected a declared execution-envelope dimension`);
122
- }
123
- return entry;
124
- });
125
- if (new Set(dimensions).size !== dimensions.length) throw new Error(`${source}: duplicate matrix dimension`);
126
- return dimensions;
127
- }
128
- function readString(value, source) {
129
- if (typeof value !== "string" || value.length === 0) throw new Error(`${source}: expected non-empty string`);
130
- return value;
131
- }
132
- function readNullableString(value, source) {
133
- if (value === null) return null;
134
- return readString(value, source);
135
- }
136
- function readDigest(value, source) {
137
- const digest = readString(value, source);
138
- if (!/^[a-f0-9]{64}$/u.test(digest)) throw new Error(`${source}: expected sha256 digest`);
139
- return digest;
140
- }
141
- function readNullableDigest(value, source) {
142
- return value === null ? null : readDigest(value, source);
143
- }
144
- function readNullableNonNegativeInteger(value, source) {
145
- if (value === null) return null;
146
- if (typeof value !== "number" || !Number.isInteger(value) || value < 0) {
147
- throw new Error(`${source}: expected non-negative integer or null`);
148
- }
149
- return value;
150
- }
151
- function readNullableBoolean(value, source) {
152
- if (value === null || typeof value === "boolean") return value;
153
- throw new Error(`${source}: expected boolean or null`);
154
- }
155
- function readStringArray(value, source) {
156
- if (!Array.isArray(value)) throw new Error(`${source}: expected array`);
157
- const entries = value.map((entry, index) => readString(entry, `${source}[${index}]`));
158
- if (new Set(entries).size !== entries.length) throw new Error(`${source}: duplicate value`);
159
- return entries;
160
- }
161
- function asRecord(value, source) {
162
- if (typeof value === "object" && value !== null && !Array.isArray(value)) return value;
163
- throw new Error(`${source}: expected object`);
164
- }
165
-
166
- // src/domains/eval/schema/serving.ts
167
- init_esm_shims();
168
- function parseEvalServingConfigurationV1(value, source) {
169
- const record = asRecord2(value, source);
170
- const targetId = readString2(record.targetId, `${source}.targetId`);
171
- const totalSlots = record.total_slots;
172
- if (totalSlots !== null && (typeof totalSlots !== "number" || !Number.isInteger(totalSlots) || totalSlots <= 0)) {
173
- throw new Error(`${source}.total_slots: expected positive integer or null`);
174
- }
175
- const compiledPromptHash = readNullableString2(record.compiledPromptHash, `${source}.compiledPromptHash`);
176
- if (compiledPromptHash !== null && !/^[a-f0-9]{64}$/u.test(compiledPromptHash)) {
177
- throw new Error(`${source}.compiledPromptHash: expected sha256 digest or null`);
178
- }
179
- return {
180
- targetId,
181
- runtimeId: readNullableString2(record.runtimeId, `${source}.runtimeId`),
182
- modelId: readNullableString2(record.modelId, `${source}.modelId`),
183
- serverBuild: readNullableString2(record.serverBuild, `${source}.serverBuild`),
184
- total_slots: totalSlots,
185
- thinkingLevel: readNullableString2(record.thinkingLevel, `${source}.thinkingLevel`),
186
- compiledPromptHash
187
- };
188
- }
189
- function evalServingConfigurationOf(artifact) {
190
- return artifact.servingConfiguration ?? {
191
- targetId: artifact.matrix.target,
192
- runtimeId: null,
193
- modelId: artifact.matrix.model,
194
- serverBuild: null,
195
- total_slots: null,
196
- thinkingLevel: artifact.matrix.thinking,
197
- compiledPromptHash: null
198
- };
199
- }
200
- function sameEvalServingConfiguration(left, right) {
201
- return left.targetId === right.targetId && left.runtimeId === right.runtimeId && left.modelId === right.modelId && left.serverBuild === right.serverBuild && left.total_slots === right.total_slots && left.thinkingLevel === right.thinkingLevel && left.compiledPromptHash === right.compiledPromptHash;
202
- }
203
- function renderEvalServingConfiguration(config) {
204
- return [
205
- `target=${config.targetId}`,
206
- `runtime=${config.runtimeId ?? "unknown"}`,
207
- `model=${config.modelId ?? "unknown"}`,
208
- `server_build=${config.serverBuild ?? "unknown"}`,
209
- `total_slots=${config.total_slots ?? "unknown"}`,
210
- `thinking=${config.thinkingLevel ?? "unknown"}`,
211
- `compiled_prompt_hash=${config.compiledPromptHash ?? "unknown"}`
212
- ].join(" ");
213
- }
214
- function readString2(value, source) {
215
- if (typeof value !== "string" || value.length === 0) throw new Error(`${source}: expected string`);
216
- return value;
217
- }
218
- function readNullableString2(value, source) {
219
- if (value === null) return null;
220
- if (typeof value !== "string" || value.length === 0) throw new Error(`${source}: expected string or null`);
221
- return value;
222
- }
223
- function asRecord2(value, source) {
224
- if (typeof value === "object" && value !== null && !Array.isArray(value)) return value;
225
- throw new Error(`${source}: expected object`);
226
- }
227
-
228
- // src/domains/eval/harness-metrics.ts
229
- init_esm_shims();
230
- var ZERO_EVAL_HARNESS_METRICS = {
231
- receiptCount: 0,
232
- toolCalls: 0,
233
- retries: 0,
234
- safetyBlocks: 0,
235
- correctionLatencyMs: 0,
236
- validationEvidence: 0
237
- };
238
- function evalHarnessMetricsFromCommands(commands) {
239
- return {
240
- ...ZERO_EVAL_HARNESS_METRICS,
241
- validationEvidence: commands.filter(
242
- (command) => command.phase === "verifier" && command.exitCode === 0 && !command.timedOut
243
- ).length
244
- };
245
- }
246
- function evalHarnessMetricsFromReceipt(receipt, extras = {}) {
247
- return {
248
- receiptCount: 1,
249
- toolCalls: receipt.toolCalls,
250
- retries: extras.retries ?? 0,
251
- safetyBlocks: receipt.safety?.decisions.blocked ?? 0,
252
- correctionLatencyMs: extras.correctionLatencyMs ?? 0,
253
- validationEvidence: extras.validationEvidence ?? 0
254
- };
255
- }
256
- function sumEvalHarnessMetrics(records) {
257
- return records.reduce((total, record) => addEvalHarnessMetrics(total, record.harness), {
258
- ...ZERO_EVAL_HARNESS_METRICS
259
- });
260
- }
261
- function addEvalHarnessMetrics(left, right) {
262
- return {
263
- receiptCount: left.receiptCount + right.receiptCount,
264
- toolCalls: left.toolCalls + right.toolCalls,
265
- retries: left.retries + right.retries,
266
- safetyBlocks: left.safetyBlocks + right.safetyBlocks,
267
- correctionLatencyMs: left.correctionLatencyMs + right.correctionLatencyMs,
268
- validationEvidence: left.validationEvidence + right.validationEvidence
269
- };
270
- }
271
-
272
- // src/domains/eval/store.ts
273
- init_esm_shims();
274
- import { createHash, randomBytes } from "node:crypto";
275
- import { readFile } from "node:fs/promises";
276
- import { join } from "node:path";
277
-
278
- // src/domains/eval/artifacts/redact.ts
279
- init_esm_shims();
280
- var SENSITIVE_KEY = /(?:^|[_-])(api[_-]?key|authorization|cookie|password|secret|token)(?:$|[_-])/i;
281
- var CREDENTIAL_PATTERNS = [
282
- [/\b(authorization\s*[:=]\s*)(?:bearer|basic)\s+[A-Za-z0-9._~+/=-]+/gi, "$1[redacted]"],
283
- [/\b(bearer\s+)[A-Za-z0-9._~+/=-]{12,}/gi, "$1[redacted]"],
284
- [/\b(sk-[A-Za-z0-9_-]{16,})\b/g, "[redacted]"],
285
- [/\b(gh[pousr]_[A-Za-z0-9_]{16,})\b/g, "[redacted]"],
286
- [/\b(AKIA[0-9A-Z]{16})\b/g, "[redacted]"],
287
- [/\b((?:api[_-]?key|access[_-]?token|refresh[_-]?token|password|secret)\s*[:=]\s*)[^\s"',}]+/gi, "$1[redacted]"]
288
- ];
289
- function redactArtifactForStorage(value, env = process.env) {
290
- return redactValue(value, env);
291
- }
292
- function redactValue(value, env) {
293
- if (typeof value === "string") return redactString(value, env);
294
- if (Array.isArray(value)) return value.map((entry) => redactValue(entry, env));
295
- if (value !== null && typeof value === "object") {
296
- const out = {};
297
- for (const [key, entry] of Object.entries(value)) {
298
- out[key] = SENSITIVE_KEY.test(key) ? "[redacted]" : redactValue(entry, env);
299
- }
300
- return out;
301
- }
302
- return value;
303
- }
304
- function redactString(value, env) {
305
- let out = stripHomePrefix(value, env.HOME);
306
- for (const [pattern, replacement] of CREDENTIAL_PATTERNS) {
307
- out = out.replace(pattern, replacement);
308
- }
309
- return out;
310
- }
311
- function stripHomePrefix(value, home) {
312
- if (home === void 0 || home.length === 0) return value;
313
- const normalized = home.replace(/\/+$/g, "");
314
- if (normalized.length === 0) return value;
315
- return value.split(normalized).join("$HOME");
316
- }
317
-
318
- // src/domains/eval/store.ts
319
- var NODE_SIGNALS = /* @__PURE__ */ new Set([
320
- "SIGHUP",
321
- "SIGINT",
322
- "SIGQUIT",
323
- "SIGILL",
324
- "SIGTRAP",
325
- "SIGABRT",
326
- "SIGIOT",
327
- "SIGBUS",
328
- "SIGFPE",
329
- "SIGKILL",
330
- "SIGUSR1",
331
- "SIGSEGV",
332
- "SIGUSR2",
333
- "SIGPIPE",
334
- "SIGALRM",
335
- "SIGTERM",
336
- "SIGCHLD",
337
- "SIGSTKFLT",
338
- "SIGCONT",
339
- "SIGSTOP",
340
- "SIGTSTP",
341
- "SIGTTIN",
342
- "SIGTTOU",
343
- "SIGURG",
344
- "SIGXCPU",
345
- "SIGXFSZ",
346
- "SIGVTALRM",
347
- "SIGPROF",
348
- "SIGWINCH",
349
- "SIGIO",
350
- "SIGPOLL",
351
- "SIGPWR",
352
- "SIGSYS",
353
- "SIGUNUSED"
354
- ]);
355
- function evalRoot(dataDir) {
356
- return join(dataDir, "evals");
357
- }
358
- function evalArtifactPath(dataDir, evalId) {
359
- assertSafeId(evalId, "eval");
360
- return join(evalRoot(dataDir), "skills-eval", `${evalId}.json`);
361
- }
362
- function createEvalId(startedAt, taskFileHash) {
363
- const stamp = startedAt.toISOString().replace(/[-:.]/g, "");
364
- return `eval-${stamp}-${taskFileHash.slice(0, 8)}-${randomBytes(6).toString("hex")}`;
365
- }
366
- async function writeEvalArtifact(dataDir, artifact) {
367
- const path = evalArtifactPath(dataDir, artifact.evalId);
368
- const redacted = redactArtifactForStorage({
369
- ...artifact,
370
- paths: { ...artifact.paths, artifact: path }
371
- });
372
- safeResourceWrite(path, `${JSON.stringify(redacted, null, 2)}
373
- `, { encoding: "utf8" });
374
- return path;
375
- }
376
- async function loadEvalArtifact(dataDir, evalId) {
377
- let raw;
378
- try {
379
- raw = await readFile(evalArtifactPath(dataDir, evalId), "utf8");
380
- } catch (error) {
381
- if (isErrorWithCode(error) && error.code === "ENOENT") throw new Error(`eval artifact not found: ${evalId}`);
382
- throw error;
383
- }
384
- const source = evalArtifactPath(dataDir, evalId);
385
- const parsed = parseJson(raw, source);
386
- return parseArtifact(parsed, source);
387
- }
388
- function parseArtifact(value, source) {
389
- if (!isRecord(value)) throw new Error(`${source}: expected object`);
390
- if (value.version !== 1) throw new Error(`${source}.version: expected 1`);
391
- const results = readArray(value, source, "results").map(
392
- (entry, index) => parseRecord(entry, `${source}.results[${index}]`)
393
- );
394
- return {
395
- version: 1,
396
- evalId: readString3(value, source, "evalId"),
397
- taskFile: readString3(value, source, "taskFile"),
398
- taskFileHash: readString3(value, source, "taskFileHash"),
399
- clioCoder: parseClioProvenance(readEvalProvenance(value, source), `${source}.clioCoder`),
400
- environment: parseEnvironmentProvenance(
401
- readRequiredArtifactField(value, source, "environment"),
402
- `${source}.environment`
403
- ),
404
- target: readOptionalNullableString(value, source, "target"),
405
- model: readOptionalNullableString(value, source, "model"),
406
- thinking: readOptionalNullableString(value, source, "thinking"),
407
- paths: parseArtifactPaths(readRequiredArtifactField(value, source, "paths"), `${source}.paths`),
408
- repeat: readNumber(value, source, "repeat"),
409
- startedAt: readString3(value, source, "startedAt"),
410
- endedAt: readString3(value, source, "endedAt"),
411
- summary: parseSummary(value.summary, `${source}.summary`),
412
- results
413
- };
414
- }
415
- function parseSummary(value, source) {
416
- if (!isRecord(value)) throw new Error(`${source}: expected object`);
417
- return {
418
- runs: readNumber(value, source, "runs"),
419
- passed: readNumber(value, source, "passed"),
420
- failed: readNumber(value, source, "failed"),
421
- passRate: readNumber(value, source, "passRate"),
422
- tokens: readNumber(value, source, "tokens"),
423
- costUsd: readNumber(value, source, "costUsd"),
424
- wallTimeMs: readNumber(value, source, "wallTimeMs"),
425
- harness: value.harness === void 0 ? { ...ZERO_EVAL_HARNESS_METRICS } : parseHarnessMetrics(value.harness, `${source}.harness`),
426
- failureClasses: readArray(value, source, "failureClasses").map(
427
- (entry, index) => parseFailureClassCount(entry, `${source}.failureClasses[${index}]`)
428
- )
429
- };
430
- }
431
- function parseRecord(value, source) {
432
- if (!isRecord(value)) throw new Error(`${source}: expected object`);
433
- const failureClass = readOptionalFailureClass(value, source, "failureClass");
434
- const commands = readArray(value, source, "commands").map(
435
- (entry, index) => parseCommand(entry, `${source}.commands[${index}]`)
436
- );
437
- const record = {
438
- taskId: readString3(value, source, "taskId"),
439
- runId: readString3(value, source, "runId"),
440
- repeatIndex: readNumber(value, source, "repeatIndex"),
441
- cwd: readString3(value, source, "cwd"),
442
- prompt: readString3(value, source, "prompt"),
443
- tags: readStringArray2(value, source, "tags"),
444
- pass: readBoolean(value, source, "pass"),
445
- exitCode: readNumber(value, source, "exitCode"),
446
- tokens: readNumber(value, source, "tokens"),
447
- costUsd: readNumber(value, source, "costUsd"),
448
- wallTimeMs: readNumber(value, source, "wallTimeMs"),
449
- harness: value.harness === void 0 ? evalHarnessMetricsFromCommands(commands) : parseHarnessMetrics(value.harness, `${source}.harness`),
450
- commands
451
- };
452
- if (failureClass !== void 0) record.failureClass = failureClass;
453
- const receiptPath = readOptionalString(value, source, "receiptPath");
454
- if (receiptPath !== void 0) record.receiptPath = receiptPath;
455
- const evidenceId = readOptionalString(value, source, "evidenceId");
456
- if (evidenceId !== void 0) record.evidenceId = evidenceId;
457
- const paths = value.paths === void 0 ? void 0 : parseRunPaths(value.paths, `${source}.paths`);
458
- if (paths !== void 0) record.paths = paths;
459
- return record;
460
- }
461
- function parseClioProvenance(value, source) {
462
- if (!isRecord(value)) throw new Error(`${source}: expected object`);
463
- return {
464
- version: readString3(value, source, "version"),
465
- commit: readNullableString3(value, source, "commit"),
466
- entry: readString3(value, source, "entry")
467
- };
468
- }
469
- function parseEnvironmentProvenance(value, source) {
470
- if (!isRecord(value)) throw new Error(`${source}: expected object`);
471
- return {
472
- platform: readString3(value, source, "platform"),
473
- node: readString3(value, source, "node")
474
- };
475
- }
476
- function parseArtifactPaths(value, source) {
477
- if (!isRecord(value)) throw new Error(`${source}: expected object`);
478
- const out = {
479
- taskFile: readString3(value, source, "taskFile"),
480
- receipts: readStringArray2(value, source, "receipts"),
481
- sessionLedgers: readStringArray2(value, source, "sessionLedgers")
482
- };
483
- const artifact = readOptionalString(value, source, "artifact");
484
- if (artifact !== void 0) out.artifact = artifact;
485
- const evidence = readOptionalString(value, source, "evidence");
486
- if (evidence !== void 0) out.evidence = evidence;
487
- return out;
488
- }
489
- function parseRunPaths(value, source) {
490
- if (!isRecord(value)) throw new Error(`${source}: expected object`);
491
- const out = {};
492
- const receipt = readOptionalString(value, source, "receipt");
493
- if (receipt !== void 0) out.receipt = receipt;
494
- const sessionLedger = readOptionalString(value, source, "sessionLedger");
495
- if (sessionLedger !== void 0) out.sessionLedger = sessionLedger;
496
- const evidence = readOptionalString(value, source, "evidence");
497
- if (evidence !== void 0) out.evidence = evidence;
498
- return out;
499
- }
500
- function readRequiredArtifactField(record, source, field) {
501
- const value = record[field];
502
- if (value === void 0) {
503
- throw new Error(
504
- `eval artifact has an invalid schema: missing required field '${field}' in ${source}. Re-run the evaluation suite to generate a complete artifact.`
505
- );
506
- }
507
- return value;
508
- }
509
- function readEvalProvenance(record, source) {
510
- const value = record.clioCoder ?? record.clio;
511
- if (value === void 0) {
512
- throw new Error(
513
- `eval artifact has an invalid schema: missing required field 'clioCoder' in ${source}. Re-run the evaluation suite to generate a complete artifact.`
514
- );
515
- }
516
- return value;
517
- }
518
- function parseHarnessMetrics(value, source) {
519
- if (!isRecord(value)) throw new Error(`${source}: expected object`);
520
- return {
521
- receiptCount: readNumber(value, source, "receiptCount"),
522
- toolCalls: readNumber(value, source, "toolCalls"),
523
- retries: readNumber(value, source, "retries"),
524
- safetyBlocks: readNumber(value, source, "safetyBlocks"),
525
- correctionLatencyMs: readNumber(value, source, "correctionLatencyMs"),
526
- validationEvidence: readNumber(value, source, "validationEvidence")
527
- };
528
- }
529
- function parseCommand(value, source) {
530
- if (!isRecord(value)) throw new Error(`${source}: expected object`);
531
- const phase = readString3(value, source, "phase");
532
- if (phase !== "setup" && phase !== "verifier") throw new Error(`${source}.phase: expected setup or verifier`);
533
- return {
534
- phase,
535
- index: readNumber(value, source, "index"),
536
- command: readString3(value, source, "command"),
537
- exitCode: readNumber(value, source, "exitCode"),
538
- signal: readSignal(value.signal, `${source}.signal`),
539
- timedOut: readBoolean(value, source, "timedOut"),
540
- wallTimeMs: readNumber(value, source, "wallTimeMs"),
541
- stdout: readStringAllowEmpty(value, source, "stdout"),
542
- stderr: readStringAllowEmpty(value, source, "stderr")
543
- };
544
- }
545
- function readSignal(value, source) {
546
- if (value === null) return null;
547
- if (typeof value === "string" && NODE_SIGNALS.has(value)) return value;
548
- throw new Error(`${source}: expected signal or null`);
549
- }
550
- function parseFailureClassCount(value, source) {
551
- if (!isRecord(value)) throw new Error(`${source}: expected object`);
552
- return {
553
- failureClass: readFailureClass(value, source, "failureClass"),
554
- count: readNumber(value, source, "count")
555
- };
556
- }
557
- function readFailureClass(record, source, field) {
558
- const value = record[field];
559
- if (value === "setup_failed" || value === "verifier_failed" || value === "timeout" || value === "cwd_missing" || value === "command_error") {
560
- return value;
561
- }
562
- throw new Error(`${source}.${field}: expected failure class`);
563
- }
564
- function readOptionalFailureClass(record, source, field) {
565
- if (record[field] === void 0) return void 0;
566
- return readFailureClass(record, source, field);
567
- }
568
- function readString3(record, source, field) {
569
- const value = record[field];
570
- if (typeof value !== "string" || value.length === 0) throw new Error(`${source}.${field}: expected string`);
571
- return value;
572
- }
573
- function readStringAllowEmpty(record, source, field) {
574
- const value = record[field];
575
- if (typeof value !== "string") throw new Error(`${source}.${field}: expected string`);
576
- return value;
577
- }
578
- function readOptionalString(record, source, field) {
579
- const value = record[field];
580
- if (value === void 0) return void 0;
581
- if (typeof value !== "string" || value.length === 0) throw new Error(`${source}.${field}: expected string`);
582
- return value;
583
- }
584
- function readNullableString3(record, source, field) {
585
- const value = record[field];
586
- if (value === null) return null;
587
- if (typeof value !== "string" || value.length === 0) throw new Error(`${source}.${field}: expected string or null`);
588
- return value;
589
- }
590
- function readOptionalNullableString(record, source, field) {
591
- const value = record[field];
592
- if (value === void 0 || value === null) return null;
593
- if (typeof value !== "string" || value.length === 0) throw new Error(`${source}.${field}: expected string or null`);
594
- return value;
595
- }
596
- function readStringArray2(record, source, field) {
597
- const value = readArray(record, source, field);
598
- const out = [];
599
- for (let index = 0; index < value.length; index += 1) {
600
- const entry = value[index];
601
- if (typeof entry !== "string") throw new Error(`${source}.${field}[${index}]: expected string`);
602
- out.push(entry);
603
- }
604
- return out;
605
- }
606
- function readNumber(record, source, field) {
607
- const value = record[field];
608
- if (typeof value !== "number" || !Number.isFinite(value)) throw new Error(`${source}.${field}: expected number`);
609
- return value;
610
- }
611
- function readBoolean(record, source, field) {
612
- const value = record[field];
613
- if (typeof value !== "boolean") throw new Error(`${source}.${field}: expected boolean`);
614
- return value;
615
- }
616
- function readArray(record, source, field) {
617
- const value = record[field];
618
- if (!Array.isArray(value)) throw new Error(`${source}.${field}: expected array`);
619
- return value;
620
- }
621
- function parseJson(raw, source) {
622
- try {
623
- return JSON.parse(raw);
624
- } catch (error) {
625
- const message = error instanceof Error ? error.message : String(error);
626
- throw new Error(`${source}: invalid JSON: ${message}`);
627
- }
628
- }
629
- function isRecord(value) {
630
- return typeof value === "object" && value !== null && !Array.isArray(value);
631
- }
632
- function isErrorWithCode(error) {
633
- return error instanceof Error && "code" in error && typeof error.code === "string";
634
- }
635
-
636
- // src/domains/eval/artifacts/store.ts
637
- init_esm_shims();
638
- import { readFile as readFile2 } from "node:fs/promises";
639
- import { join as join2 } from "node:path";
640
-
641
- // src/domains/eval/schema/behavioral.ts
642
- init_esm_shims();
643
- import { createHash as createHash2 } from "node:crypto";
644
-
645
- // src/domains/eval/schema/verdict.ts
646
- init_esm_shims();
647
- var EVAL_VERDICT_SCHEMA_V1 = "clio-coder.eval.verdict.v1";
648
- var EVAL_TRACKED_METRIC_NAMES = [
649
- "modelCalls",
650
- "uncachedPrefillTokens",
651
- "cacheReadTokens",
652
- "generatedTokens",
653
- "reasoningTokens",
654
- "toolCalls",
655
- "toolErrors",
656
- "ttftMsFirstCall",
657
- "wallClockMs",
658
- "contextTokensAtEnd",
659
- "compactions"
660
- ];
661
- function parseEvalVerdictEnvelopeV1(value, source = "verdict") {
662
- const record = asRecord3(value, source);
663
- if (normalizeEvalSchemaId(record.schema) !== EVAL_VERDICT_SCHEMA_V1) {
664
- throw new Error(`${source}.schema: expected ${EVAL_VERDICT_SCHEMA_V1}`);
665
- }
666
- const scenarioId = readNonEmptyString(record, source, "scenarioId");
667
- const trialIndex = readNonNegativeInteger(record, source, "trialIndex");
668
- const outcome = readOutcome(record.outcome, `${source}.outcome`);
669
- const machinery = readMachinery(record.machinery, `${source}.machinery`);
670
- if (machinery === "infrastructure_failure" && outcome === "pass") {
671
- throw new Error(`${source}: infrastructure_failure cannot carry a pass outcome`);
672
- }
673
- if (record.behavioral !== null) throw new Error(`${source}.behavioral: expected null in verdict v1`);
674
- const evidence = parseEvidence(record.evidence, `${source}.evidence`);
675
- const reason = record.reason === void 0 ? legacyVerdictReason(outcome, machinery, evidence) : readNullableNonEmptyString(record, source, "reason");
676
- if (outcome === "fail" && reason === null) throw new Error(`${source}.reason: failed outcome requires a reason`);
677
- if (outcome !== "fail" && reason !== null) {
678
- throw new Error(`${source}.reason: only a failed outcome can carry a reason`);
679
- }
680
- return {
681
- schema: EVAL_VERDICT_SCHEMA_V1,
682
- scenarioId,
683
- trialIndex,
684
- outcome,
685
- machinery,
686
- reason,
687
- trackedMetrics: parseTrackedMetrics(record.trackedMetrics, `${source}.trackedMetrics`),
688
- behavioral: null,
689
- evidence
690
- };
691
- }
692
- function parseTrackedMetrics(value, source) {
693
- const record = asRecord3(value, source);
694
- const expectedColdReasons = asRecord3(record.expectedColdReasons, `${source}.expectedColdReasons`);
695
- return {
696
- modelCalls: readSourcedNumber(record.modelCalls, `${source}.modelCalls`),
697
- uncachedPrefillTokens: readSourcedNumber(record.uncachedPrefillTokens, `${source}.uncachedPrefillTokens`),
698
- cacheReadTokens: readSourcedNumber(record.cacheReadTokens, `${source}.cacheReadTokens`),
699
- generatedTokens: readSourcedNumber(record.generatedTokens, `${source}.generatedTokens`),
700
- reasoningTokens: readSourcedNullableNumber(record.reasoningTokens, `${source}.reasoningTokens`),
701
- toolCalls: readSourcedNumber(record.toolCalls, `${source}.toolCalls`),
702
- toolErrors: readSourcedNumber(record.toolErrors, `${source}.toolErrors`),
703
- ttftMsFirstCall: readSourcedNullableNumber(record.ttftMsFirstCall, `${source}.ttftMsFirstCall`),
704
- wallClockMs: readSourcedNumber(record.wallClockMs, `${source}.wallClockMs`),
705
- contextTokensAtEnd: readSourcedNumber(record.contextTokensAtEnd, `${source}.contextTokensAtEnd`),
706
- compactions: readSourcedNumber(record.compactions, `${source}.compactions`),
707
- expectedColdReasons: Object.fromEntries(
708
- Object.entries(expectedColdReasons).map(([reason, metric]) => {
709
- if (reason.trim().length === 0) throw new Error(`${source}.expectedColdReasons: expected non-empty reason`);
710
- return [reason, readSourcedNumber(metric, `${source}.expectedColdReasons.${reason}`)];
711
- })
712
- )
713
- };
714
- }
715
- function parseEvidence(value, source) {
716
- const record = asRecord3(value, source);
717
- const terminalReceiptDigest = readNullableString4(record, source, "terminalReceiptDigest");
718
- if (terminalReceiptDigest !== null && !/^[a-f0-9]{64}$/u.test(terminalReceiptDigest)) {
719
- throw new Error(`${source}.terminalReceiptDigest: expected sha256 digest or null`);
720
- }
721
- const graderExitCode = record.graderExitCode;
722
- if (graderExitCode !== null && (!Number.isInteger(graderExitCode) || !Number.isFinite(graderExitCode))) {
723
- throw new Error(`${source}.graderExitCode: expected integer or null`);
724
- }
725
- return {
726
- assignmentId: readNullableString4(record, source, "assignmentId"),
727
- terminalReceiptDigest,
728
- graderExitCode
729
- };
730
- }
731
- function legacyVerdictReason(outcome, machinery, evidence) {
732
- if (outcome !== "fail") return null;
733
- if (machinery === "infrastructure_failure") return "infrastructure_failure";
734
- if (evidence.graderExitCode !== null && evidence.graderExitCode !== 0) return "grader_failed";
735
- return "outcome_failed";
736
- }
737
- function readSourcedNumber(value, source) {
738
- const record = asRecord3(value, source);
739
- return {
740
- value: readNonNegativeNumber(record.value, `${source}.value`),
741
- source: readMetricSource(record.source, source)
742
- };
743
- }
744
- function readSourcedNullableNumber(value, source) {
745
- const record = asRecord3(value, source);
746
- return {
747
- value: record.value === null ? null : readNonNegativeNumber(record.value, `${source}.value`),
748
- source: readMetricSource(record.source, source)
749
- };
750
- }
751
- function readMetricSource(value, source) {
752
- if (value === "ledger" || value === "receipt" || value === "estimated") return value;
753
- throw new Error(`${source}.source: expected ledger, receipt, or estimated`);
754
- }
755
- function readOutcome(value, source) {
756
- if (value === "pass" || value === "fail" || value === "unmeasured") return value;
757
- throw new Error(`${source}: expected pass, fail, or unmeasured`);
758
- }
759
- function readMachinery(value, source) {
760
- if (value === "ok" || value === "infrastructure_failure") return value;
761
- throw new Error(`${source}: expected ok or infrastructure_failure`);
762
- }
763
- function readNonNegativeNumber(value, source) {
764
- if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
765
- throw new Error(`${source}: expected non-negative number`);
766
- }
767
- return value;
768
- }
769
- function readNonNegativeInteger(record, source, field) {
770
- const value = record[field];
771
- if (!Number.isInteger(value) || typeof value !== "number" || value < 0) {
772
- throw new Error(`${source}.${field}: expected non-negative integer`);
773
- }
774
- return value;
775
- }
776
- function readNonEmptyString(record, source, field) {
777
- const value = record[field];
778
- if (typeof value !== "string" || value.trim().length === 0) throw new Error(`${source}.${field}: expected string`);
779
- return value;
780
- }
781
- function readNullableString4(record, source, field) {
782
- const value = record[field];
783
- if (value === null) return null;
784
- if (typeof value !== "string" || value.length === 0) throw new Error(`${source}.${field}: expected string or null`);
785
- return value;
786
- }
787
- function readNullableNonEmptyString(record, source, field) {
788
- const value = readNullableString4(record, source, field);
789
- if (value !== null && value.trim().length === 0) {
790
- throw new Error(`${source}.${field}: expected non-empty string or null`);
791
- }
792
- return value;
793
- }
794
- function asRecord3(value, source) {
795
- if (typeof value === "object" && value !== null && !Array.isArray(value)) return value;
796
- throw new Error(`${source}: expected object`);
797
- }
798
-
799
- // src/domains/eval/schema/behavioral.ts
800
- var EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1 = "clio-coder.eval.scenario.v1";
801
- var EVAL_BEHAVIOR_SCHEMA_V1 = "clio-coder.eval.behavior.v1";
802
- var EVAL_BEHAVIOR_CATEGORIES = [
803
- "tool_choice",
804
- "exploration",
805
- "delegation",
806
- "safety_comprehension",
807
- "claim_grounding",
808
- "denied_tool_recovery",
809
- "completion_behavior",
810
- "task_correctness"
811
- ];
812
- var MAX_RULES = 64;
813
- var MAX_FACTS = 128;
814
- var MAX_EVIDENCE_PER_LABEL = 8;
815
- var MAX_ID_CHARS = 128;
816
- var MAX_TEXT_CHARS = 1e3;
817
- var MAX_EXPLANATION_CHARS = 2e3;
818
- function parseEvalBehaviorScenarioV1(value, source = "behavioral scenario") {
819
- const record = asRecord4(value, source);
820
- if (normalizeEvalSchemaId(record.schema) !== EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1) {
821
- throw new Error(`${source}.schema: expected ${EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1}`);
822
- }
823
- const corpus = asRecord4(record.corpus, `${source}.corpus`);
824
- const execution = asRecord4(record.execution, `${source}.execution`);
825
- const subject = asRecord4(execution.subject, `${source}.execution.subject`);
826
- const mode = execution.mode;
827
- if (mode !== "machinery-only" && mode !== "model-required") {
828
- throw new Error(`${source}.execution.mode: expected machinery-only or model-required`);
829
- }
830
- const subjectKind = subject.kind;
831
- if (subjectKind !== "main-agent" && subjectKind !== "worker") {
832
- throw new Error(`${source}.execution.subject.kind: expected main-agent or worker`);
833
- }
834
- const toolTarget = execution.toolTarget;
835
- if (toolTarget !== "available" && toolTarget !== "none") {
836
- throw new Error(`${source}.execution.toolTarget: expected available or none`);
837
- }
838
- const expectedBehavior = parseRules(record.expectedBehavior, `${source}.expectedBehavior`);
839
- const forbiddenBehavior = parseRules(record.forbiddenBehavior, `${source}.forbiddenBehavior`);
840
- const ruleIds = /* @__PURE__ */ new Set();
841
- for (const rule of [...expectedBehavior, ...forbiddenBehavior]) {
842
- if (ruleIds.has(rule.id)) throw new Error(`${source}: duplicate behavioral rule id ${rule.id}`);
843
- ruleIds.add(rule.id);
844
- }
845
- if (ruleIds.size === 0) throw new Error(`${source}: expected at least one behavioral rule`);
846
- const judge = asRecord4(record.judge, `${source}.judge`);
847
- const maxEvidenceItems = readBoundedInteger(judge.maxEvidenceItems, `${source}.judge.maxEvidenceItems`, 1, MAX_FACTS);
848
- const maxExplanationChars = readBoundedInteger(
849
- judge.maxExplanationChars,
850
- `${source}.judge.maxExplanationChars`,
851
- 1,
852
- MAX_EXPLANATION_CHARS
853
- );
854
- return {
855
- schema: EVAL_BEHAVIOR_SCENARIO_SCHEMA_V1,
856
- corpus: {
857
- id: readId(corpus.id, `${source}.corpus.id`),
858
- version: readText(corpus.version, `${source}.corpus.version`, MAX_ID_CHARS)
859
- },
860
- execution: {
861
- mode,
862
- subject: { kind: subjectKind, role: readId(subject.role, `${source}.execution.subject.role`) },
863
- toolTarget
864
- },
865
- expectedBehavior,
866
- forbiddenBehavior,
867
- judge: { maxEvidenceItems, maxExplanationChars }
868
- };
869
- }
870
- function canonicalizeEvalBehaviorJudgeInputV1(value, scenario, source = "behavioral judge input") {
871
- const record = asRecord4(value, source);
872
- if (!Array.isArray(record.facts)) throw new Error(`${source}.facts: expected array`);
873
- if (record.facts.length > scenario.judge.maxEvidenceItems || record.facts.length > MAX_FACTS) {
874
- throw new Error(`${source}.facts: exceeds bounded evidence limit`);
875
- }
876
- const facts = record.facts.map((fact, index) => parseFact(fact, `${source}.facts[${index}]`));
877
- const factIds = /* @__PURE__ */ new Set();
878
- const factKeys = /* @__PURE__ */ new Set();
879
- for (const fact of facts) {
880
- if (factIds.has(fact.id)) throw new Error(`${source}: duplicate fact id ${fact.id}`);
881
- const key = `${fact.source}\0${fact.key}`;
882
- if (factKeys.has(key)) throw new Error(`${source}: conflicting fact ${fact.source}.${fact.key}`);
883
- factIds.add(fact.id);
884
- factKeys.add(key);
885
- }
886
- const unavailableSources = parseSources(record.unavailableSources, `${source}.unavailableSources`);
887
- const infrastructureFailure = record.infrastructureFailure;
888
- if (typeof infrastructureFailure !== "boolean") {
889
- throw new Error(`${source}.infrastructureFailure: expected boolean`);
890
- }
891
- const input = {
892
- facts: facts.sort((left, right) => left.source.localeCompare(right.source) || left.key.localeCompare(right.key)),
893
- unavailableSources: [...new Set(unavailableSources)].sort(),
894
- infrastructureFailure
895
- };
896
- return { input, digest: sha256(stableJson(input)) };
897
- }
898
- function judgeEvalBehaviorV1(scenarioValue, verdict, inputValue) {
899
- const scenario = parseEvalBehaviorScenarioV1(scenarioValue);
900
- const { input, digest } = canonicalizeEvalBehaviorJudgeInputV1(inputValue, scenario);
901
- const labels = EVAL_BEHAVIOR_CATEGORIES.map(
902
- (category) => judgeCategory(category, scenario, input, scenario.judge.maxExplanationChars)
903
- );
904
- const outcome = input.infrastructureFailure ? "infrastructure_failure" : labels.some((label) => label.label === "violated") ? "behavioral_failure" : labels.some((label) => label.label === "unknown") ? "unknown" : labels.every((label) => label.label === "unmeasured") ? "unmeasured" : "pass";
905
- return parseEvalBehaviorVerdictV1({
906
- schema: EVAL_BEHAVIOR_SCHEMA_V1,
907
- verdictRef: {
908
- schema: verdict.schema,
909
- scenarioId: verdict.scenarioId,
910
- trialIndex: verdict.trialIndex
911
- },
912
- corpus: scenario.corpus,
913
- judgeInputDigest: digest,
914
- outcome,
915
- labels
916
- });
917
- }
918
- function parseEvalBehaviorVerdictV1(value, source = "behavioral verdict") {
919
- const record = asRecord4(value, source);
920
- if (normalizeEvalSchemaId(record.schema) !== EVAL_BEHAVIOR_SCHEMA_V1)
921
- throw new Error(`${source}.schema: expected ${EVAL_BEHAVIOR_SCHEMA_V1}`);
922
- const verdictRef = asRecord4(record.verdictRef, `${source}.verdictRef`);
923
- if (normalizeEvalSchemaId(verdictRef.schema) !== EVAL_VERDICT_SCHEMA_V1) {
924
- throw new Error(`${source}.verdictRef.schema: expected ${EVAL_VERDICT_SCHEMA_V1}`);
925
- }
926
- const corpus = asRecord4(record.corpus, `${source}.corpus`);
927
- const outcome = readOutcome2(record.outcome, `${source}.outcome`);
928
- if (!Array.isArray(record.labels)) throw new Error(`${source}.labels: expected array`);
929
- const labels = record.labels.map((label, index) => parseLabel(label, `${source}.labels[${index}]`));
930
- const categories = labels.map((label) => label.category);
931
- if (labels.length !== EVAL_BEHAVIOR_CATEGORIES.length || new Set(categories).size !== EVAL_BEHAVIOR_CATEGORIES.length) {
932
- throw new Error(`${source}.labels: expected every behavioral category exactly once`);
933
- }
934
- for (const category of EVAL_BEHAVIOR_CATEGORIES) {
935
- if (!categories.includes(category)) throw new Error(`${source}.labels: missing category ${category}`);
936
- }
937
- const derived = deriveOutcome(labels, outcome === "infrastructure_failure");
938
- if (outcome !== derived) throw new Error(`${source}.outcome: ${outcome} conflicts with labels (expected ${derived})`);
939
- return {
940
- schema: EVAL_BEHAVIOR_SCHEMA_V1,
941
- verdictRef: {
942
- schema: EVAL_VERDICT_SCHEMA_V1,
943
- scenarioId: readId(verdictRef.scenarioId, `${source}.verdictRef.scenarioId`),
944
- trialIndex: readBoundedInteger(verdictRef.trialIndex, `${source}.verdictRef.trialIndex`, 0, Number.MAX_SAFE_INTEGER)
945
- },
946
- corpus: {
947
- id: readId(corpus.id, `${source}.corpus.id`),
948
- version: readText(corpus.version, `${source}.corpus.version`, MAX_ID_CHARS)
949
- },
950
- judgeInputDigest: readDigest2(record.judgeInputDigest, `${source}.judgeInputDigest`),
951
- outcome,
952
- labels
953
- };
954
- }
955
- function assertEvalBehaviorReferencesVerdictV1(behavior, verdict, source = "behavioral verdict") {
956
- if (behavior.verdictRef.scenarioId !== verdict.scenarioId || behavior.verdictRef.trialIndex !== verdict.trialIndex) {
957
- throw new Error(`${source}.verdictRef: conflicts with result verdict identity`);
958
- }
959
- if (verdict.machinery === "infrastructure_failure" && behavior.outcome !== "infrastructure_failure") {
960
- throw new Error(`${source}.outcome: machinery failure must remain infrastructure_failure`);
961
- }
962
- if (behavior.outcome === "pass" && verdict.outcome !== "pass") {
963
- throw new Error(`${source}.outcome: behavioral pass cannot override a failed or unmeasured result`);
964
- }
965
- }
966
- function judgeCategory(category, scenario, input, maxExplanationChars) {
967
- const expected = scenario.expectedBehavior.filter((rule) => rule.category === category);
968
- const forbidden = scenario.forbiddenBehavior.filter((rule) => rule.category === category);
969
- const rules = [...expected, ...forbidden];
970
- if (input.infrastructureFailure)
971
- return labelResult(category, "unknown", rules, [], "infrastructure failure", maxExplanationChars);
972
- if (rules.length === 0) return labelResult(category, "unmeasured", [], [], null, maxExplanationChars);
973
- const unavailable = rules.some((rule) => input.unavailableSources.includes(rule.fact.source));
974
- if (unavailable)
975
- return labelResult(category, "unmeasured", rules, [], "required evidence source unavailable", maxExplanationChars);
976
- const evaluations = rules.map((rule) => {
977
- const fact = input.facts.find(
978
- (candidate) => candidate.source === rule.fact.source && candidate.key === rule.fact.key
979
- );
980
- if (fact === void 0) return { rule, fact: null, holds: null };
981
- const matches = compare(fact.value, rule.fact.op, rule.fact.value);
982
- return { rule, fact, holds: expected.includes(rule) ? matches : !matches };
983
- });
984
- const evidence = evaluations.flatMap(({ fact }) => fact === null ? [] : [toEvidence(fact)]).slice(0, MAX_EVIDENCE_PER_LABEL);
985
- if (evaluations.some(({ holds }) => holds === false)) {
986
- return labelResult(category, "violated", rules, evidence, "one or more declared rules failed", maxExplanationChars);
987
- }
988
- if (evaluations.some(({ holds }) => holds === null)) {
989
- return labelResult(category, "unknown", rules, evidence, "required observable fact missing", maxExplanationChars);
990
- }
991
- return labelResult(category, "satisfied", rules, evidence, null, maxExplanationChars);
992
- }
993
- function labelResult(category, label, rules, evidence, explanation, maxExplanationChars) {
994
- return {
995
- category,
996
- label,
997
- ruleIds: rules.map((rule) => rule.id).sort(),
998
- evidence,
999
- explanation: explanation === null ? null : explanation.slice(0, maxExplanationChars)
1000
- };
1001
- }
1002
- function deriveOutcome(labels, infrastructure) {
1003
- if (infrastructure) return "infrastructure_failure";
1004
- if (labels.some((label) => label.label === "violated")) return "behavioral_failure";
1005
- if (labels.some((label) => label.label === "unknown")) return "unknown";
1006
- if (labels.every((label) => label.label === "unmeasured")) return "unmeasured";
1007
- return "pass";
1008
- }
1009
- function parseRules(value, source) {
1010
- if (!Array.isArray(value)) throw new Error(`${source}: expected array`);
1011
- if (value.length > MAX_RULES) throw new Error(`${source}: exceeds ${MAX_RULES} rules`);
1012
- return value.map((entry, index) => {
1013
- const record = asRecord4(entry, `${source}[${index}]`);
1014
- const fact = asRecord4(record.fact, `${source}[${index}].fact`);
1015
- const rationale = record.rationale === void 0 ? void 0 : readText(record.rationale, `${source}[${index}].rationale`, MAX_TEXT_CHARS);
1016
- return {
1017
- id: readId(record.id, `${source}[${index}].id`),
1018
- category: readCategory(record.category, `${source}[${index}].category`),
1019
- fact: {
1020
- source: readSource(fact.source, `${source}[${index}].fact.source`),
1021
- key: readText(fact.key, `${source}[${index}].fact.key`, MAX_TEXT_CHARS),
1022
- op: readOp(fact.op, `${source}[${index}].fact.op`),
1023
- value: readScalar(fact.value, `${source}[${index}].fact.value`)
1024
- },
1025
- ...rationale === void 0 ? {} : { rationale }
1026
- };
1027
- });
1028
- }
1029
- function parseFact(value, source) {
1030
- const record = asRecord4(value, source);
1031
- const evidence = asRecord4(record.evidence, `${source}.evidence`);
1032
- return {
1033
- id: readId(record.id, `${source}.id`),
1034
- source: readSource(record.source, `${source}.source`),
1035
- key: readText(record.key, `${source}.key`, MAX_TEXT_CHARS),
1036
- value: readScalar(record.value, `${source}.value`),
1037
- evidence: {
1038
- locator: readText(evidence.locator, `${source}.evidence.locator`, MAX_TEXT_CHARS),
1039
- digest: readDigest2(evidence.digest, `${source}.evidence.digest`),
1040
- excerpt: evidence.excerpt === null ? null : readText(evidence.excerpt, `${source}.evidence.excerpt`, MAX_TEXT_CHARS)
1041
- }
1042
- };
1043
- }
1044
- function parseLabel(value, source) {
1045
- const record = asRecord4(value, source);
1046
- const label = record.label;
1047
- if (label !== "satisfied" && label !== "violated" && label !== "unknown" && label !== "unmeasured") {
1048
- throw new Error(`${source}.label: expected satisfied, violated, unknown, or unmeasured`);
1049
- }
1050
- if (!Array.isArray(record.ruleIds) || !Array.isArray(record.evidence)) {
1051
- throw new Error(`${source}: expected ruleIds and evidence arrays`);
1052
- }
1053
- if (record.evidence.length > MAX_EVIDENCE_PER_LABEL) throw new Error(`${source}.evidence: exceeds bounded limit`);
1054
- if ((label === "satisfied" || label === "violated") && (record.ruleIds.length === 0 || record.evidence.length === 0)) {
1055
- throw new Error(`${source}: ${label} label requires a rule and observable evidence`);
1056
- }
1057
- const explanation = record.explanation;
1058
- if (explanation !== null && (typeof explanation !== "string" || explanation.length > MAX_EXPLANATION_CHARS)) {
1059
- throw new Error(`${source}.explanation: expected bounded string or null`);
1060
- }
1061
- return {
1062
- category: readCategory(record.category, `${source}.category`),
1063
- label,
1064
- ruleIds: record.ruleIds.map((id, index) => readId(id, `${source}.ruleIds[${index}]`)),
1065
- evidence: record.evidence.map((entry, index) => {
1066
- const evidence = asRecord4(entry, `${source}.evidence[${index}]`);
1067
- return {
1068
- factId: readId(evidence.factId, `${source}.evidence[${index}].factId`),
1069
- source: readSource(evidence.source, `${source}.evidence[${index}].source`),
1070
- locator: readText(evidence.locator, `${source}.evidence[${index}].locator`, MAX_TEXT_CHARS),
1071
- digest: readDigest2(evidence.digest, `${source}.evidence[${index}].digest`),
1072
- excerpt: evidence.excerpt === null ? null : readText(evidence.excerpt, `${source}.evidence[${index}].excerpt`, MAX_TEXT_CHARS)
1073
- };
1074
- }),
1075
- explanation
1076
- };
1077
- }
1078
- function toEvidence(fact) {
1079
- return { factId: fact.id, source: fact.source, ...fact.evidence };
1080
- }
1081
- function compare(actual, op, expected) {
1082
- if (op === "eq") return actual === expected;
1083
- if (op === "neq") return actual !== expected;
1084
- if (typeof actual !== "number" || typeof expected !== "number") return false;
1085
- if (op === "lt") return actual < expected;
1086
- if (op === "lte") return actual <= expected;
1087
- if (op === "gt") return actual > expected;
1088
- return actual >= expected;
1089
- }
1090
- function parseSources(value, source) {
1091
- if (!Array.isArray(value)) throw new Error(`${source}: expected array`);
1092
- return value.map((entry, index) => readSource(entry, `${source}[${index}]`));
1093
- }
1094
- function readOutcome2(value, source) {
1095
- if (value === "pass" || value === "behavioral_failure" || value === "unknown" || value === "unmeasured" || value === "infrastructure_failure")
1096
- return value;
1097
- throw new Error(`${source}: expected a closed behavioral outcome`);
1098
- }
1099
- function readCategory(value, source) {
1100
- if (typeof value === "string" && EVAL_BEHAVIOR_CATEGORIES.includes(value)) {
1101
- return value;
1102
- }
1103
- throw new Error(`${source}: expected a closed behavioral category`);
1104
- }
1105
- function readSource(value, source) {
1106
- if (value === "transcript" || value === "tool" || value === "receipt" || value === "grader") return value;
1107
- throw new Error(`${source}: expected transcript, tool, receipt, or grader`);
1108
- }
1109
- function readOp(value, source) {
1110
- if (value === "eq" || value === "neq" || value === "lt" || value === "lte" || value === "gt" || value === "gte") {
1111
- return value;
1112
- }
1113
- throw new Error(`${source}: expected eq, neq, lt, lte, gt, or gte`);
1114
- }
1115
- function readScalar(value, source) {
1116
- if (typeof value === "boolean") return value;
1117
- if (typeof value === "number" && Number.isFinite(value)) return value;
1118
- if (typeof value === "string" && value.length <= MAX_TEXT_CHARS) return value;
1119
- throw new Error(`${source}: expected bounded string, finite number, or boolean`);
1120
- }
1121
- function readId(value, source) {
1122
- const id = readText(value, source, MAX_ID_CHARS);
1123
- if (!/^[A-Za-z0-9._-]+$/u.test(id)) throw new Error(`${source}: expected stable id`);
1124
- return id;
1125
- }
1126
- function readText(value, source, maxChars) {
1127
- if (typeof value !== "string" || value.trim().length === 0 || value.length > maxChars) {
1128
- throw new Error(`${source}: expected non-empty string no longer than ${maxChars} characters`);
1129
- }
1130
- return value;
1131
- }
1132
- function readDigest2(value, source) {
1133
- if (typeof value !== "string" || !/^[a-f0-9]{64}$/u.test(value)) throw new Error(`${source}: expected sha256 digest`);
1134
- return value;
1135
- }
1136
- function readBoundedInteger(value, source, min, max) {
1137
- if (typeof value !== "number" || !Number.isInteger(value) || value < min || value > max) {
1138
- throw new Error(`${source}: expected integer from ${min} through ${max}`);
1139
- }
1140
- return value;
1141
- }
1142
- function asRecord4(value, source) {
1143
- if (typeof value === "object" && value !== null && !Array.isArray(value)) return value;
1144
- throw new Error(`${source}: expected object`);
1145
- }
1146
- function stableJson(value) {
1147
- if (Array.isArray(value)) return `[${value.map(stableJson).join(",")}]`;
1148
- if (typeof value === "object" && value !== null) {
1149
- return `{${Object.entries(value).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry]) => `${JSON.stringify(key)}:${stableJson(entry)}`).join(",")}}`;
1150
- }
1151
- return JSON.stringify(value);
1152
- }
1153
- function sha256(value) {
1154
- return createHash2("sha256").update(value, "utf8").digest("hex");
1155
- }
1156
-
1157
- // src/domains/eval/schema/behavioral-metrics.ts
1158
- init_esm_shims();
1159
- var EVAL_BEHAVIOR_METRICS_SCHEMA_V1 = "clio-coder.eval.behavior.metrics.v1";
1160
- var EVAL_BEHAVIOR_METRIC_DEFINITIONS_V1 = [
1161
- {
1162
- name: "correctness.taskSolved",
1163
- family: "correctness",
1164
- direction: "higher",
1165
- hardGate: true,
1166
- source: "grader"
1167
- },
1168
- {
1169
- name: "safety.violations",
1170
- family: "safety",
1171
- direction: "lower",
1172
- hardGate: true,
1173
- source: "behavioral-label"
1174
- },
1175
- {
1176
- name: "behavior.labelViolations",
1177
- family: "behavior",
1178
- direction: "lower",
1179
- hardGate: false,
1180
- source: "behavioral-label"
1181
- },
1182
- {
1183
- name: "efficiency.toolCalls",
1184
- family: "efficiency",
1185
- direction: "lower",
1186
- hardGate: false,
1187
- source: "tool-event"
1188
- },
1189
- {
1190
- name: "exploration.unnecessaryReads",
1191
- family: "exploration",
1192
- direction: "lower",
1193
- hardGate: false,
1194
- source: "tool-event"
1195
- },
1196
- {
1197
- name: "delegation.quality",
1198
- family: "delegation",
1199
- direction: "higher",
1200
- hardGate: false,
1201
- source: "behavioral-label"
1202
- },
1203
- {
1204
- name: "claims.unsupported",
1205
- family: "claims",
1206
- direction: "lower",
1207
- hardGate: false,
1208
- source: "grader"
1209
- },
1210
- {
1211
- name: "tokens.total",
1212
- family: "tokens",
1213
- direction: "lower",
1214
- hardGate: false,
1215
- source: "runner"
1216
- },
1217
- {
1218
- name: "latency.wallMs",
1219
- family: "latency",
1220
- direction: "lower",
1221
- hardGate: false,
1222
- source: "runner"
1223
- },
1224
- {
1225
- name: "cost.usd",
1226
- family: "cost",
1227
- direction: "lower",
1228
- hardGate: false,
1229
- source: "receipt"
1230
- }
1231
- ];
1232
- function buildEvalBehaviorMetricsV1(result, role) {
1233
- const label = (category) => result.behavioral?.labels.find((entry) => entry.category === category)?.label ?? null;
1234
- const observedLabels = result.behavioral?.labels.filter(
1235
- (entry) => entry.label === "satisfied" || entry.label === "violated"
1236
- );
1237
- const values = {
1238
- "correctness.taskSolved": booleanMetric(result.metrics["task.solved"]),
1239
- "safety.violations": violationMetric(label("safety_comprehension")),
1240
- "behavior.labelViolations": observedLabels === void 0 || observedLabels.length !== result.behavioral?.labels.length ? null : observedLabels.filter((entry) => entry.label === "violated").length,
1241
- "efficiency.toolCalls": numberMetric(result.metrics["tools.totalCalls"]),
1242
- "exploration.unnecessaryReads": numberMetric(result.metrics["tools.read.outsideAllowed"]),
1243
- "delegation.quality": qualityMetric(label("delegation")),
1244
- "claims.unsupported": numberMetric(result.metrics["claims.unsupported"]),
1245
- "tokens.total": numberMetric(result.metrics["tokens.total"]),
1246
- "latency.wallMs": numberMetric(result.metrics["latency.wallMs"]),
1247
- "cost.usd": numberMetric(result.metrics["cost.usd"])
1248
- };
1249
- const metrics = Object.fromEntries(
1250
- EVAL_BEHAVIOR_METRIC_DEFINITIONS_V1.map((definition) => [
1251
- definition.name,
1252
- { value: values[definition.name], source: definition.source }
1253
- ])
1254
- );
1255
- return {
1256
- schema: EVAL_BEHAVIOR_METRICS_SCHEMA_V1,
1257
- scenarioId: result.taskId,
1258
- role,
1259
- target: { id: result.target.id, model: result.target.model },
1260
- metrics
1261
- };
1262
- }
1263
- function parseEvalBehaviorMetricsV1(value, source = "behavioral metrics") {
1264
- const record = asRecord5(value, source);
1265
- if (normalizeEvalSchemaId(record.schema) !== EVAL_BEHAVIOR_METRICS_SCHEMA_V1) {
1266
- throw new Error(`${source}.schema: expected ${EVAL_BEHAVIOR_METRICS_SCHEMA_V1}`);
1267
- }
1268
- const target = asRecord5(record.target, `${source}.target`);
1269
- const rawMetrics = asRecord5(record.metrics, `${source}.metrics`);
1270
- const expectedMetricNames = new Set(EVAL_BEHAVIOR_METRIC_DEFINITIONS_V1.map((definition) => definition.name));
1271
- for (const metricName of Object.keys(rawMetrics)) {
1272
- if (!expectedMetricNames.has(metricName)) {
1273
- throw new Error(`${source}.metrics.${metricName}: unknown behavioral metric`);
1274
- }
1275
- }
1276
- const metrics = Object.fromEntries(
1277
- EVAL_BEHAVIOR_METRIC_DEFINITIONS_V1.map((definition) => {
1278
- const observation = asRecord5(rawMetrics[definition.name], `${source}.metrics.${definition.name}`);
1279
- const metricSource = observation.source;
1280
- if (metricSource !== definition.source) {
1281
- throw new Error(`${source}.metrics.${definition.name}.source: expected ${definition.source}`);
1282
- }
1283
- const metricValue = observation.value;
1284
- if (metricValue !== null && (typeof metricValue !== "number" || !Number.isFinite(metricValue))) {
1285
- throw new Error(`${source}.metrics.${definition.name}.value: expected finite number or null`);
1286
- }
1287
- return [definition.name, { value: metricValue, source: metricSource }];
1288
- })
1289
- );
1290
- return {
1291
- schema: EVAL_BEHAVIOR_METRICS_SCHEMA_V1,
1292
- scenarioId: readString4(record.scenarioId, `${source}.scenarioId`),
1293
- role: readString4(record.role, `${source}.role`),
1294
- target: {
1295
- id: readString4(target.id, `${source}.target.id`),
1296
- model: target.model === null ? null : readString4(target.model, `${source}.target.model`)
1297
- },
1298
- metrics
1299
- };
1300
- }
1301
- function numberMetric(value) {
1302
- return typeof value === "number" && Number.isFinite(value) ? value : null;
1303
- }
1304
- function booleanMetric(value) {
1305
- return typeof value === "boolean" ? value ? 1 : 0 : null;
1306
- }
1307
- function violationMetric(label) {
1308
- if (label === "violated") return 1;
1309
- if (label === "satisfied") return 0;
1310
- return null;
1311
- }
1312
- function qualityMetric(label) {
1313
- if (label === "satisfied") return 1;
1314
- if (label === "violated") return 0;
1315
- return null;
1316
- }
1317
- function asRecord5(value, source) {
1318
- if (typeof value === "object" && value !== null && !Array.isArray(value)) return value;
1319
- throw new Error(`${source}: expected object`);
1320
- }
1321
- function readString4(value, source) {
1322
- if (typeof value === "string" && value.length > 0) return value;
1323
- throw new Error(`${source}: expected non-empty string`);
1324
- }
1325
-
1326
- // src/domains/eval/artifacts/store.ts
1327
- function evalArtifactPathV4(dataDir, evalId) {
1328
- assertSafeId(evalId, "eval");
1329
- return join2(evalRoot(dataDir), `${evalId}.json`);
1330
- }
1331
- async function writeEvalArtifactV4(dataDir, artifact, out) {
1332
- const path = out === void 0 ? evalArtifactPathV4(dataDir, artifact.evalId) : out.endsWith(".json") ? out : join2(out, `${artifact.evalId}.json`);
1333
- safeResourceWrite(path, `${JSON.stringify(redactArtifactForStorage(artifact), null, 2)}
1334
- `, { encoding: "utf8" });
1335
- return path;
1336
- }
1337
- async function loadEvalArtifactV4(dataDir, evalId) {
1338
- let raw;
1339
- try {
1340
- raw = await readFile2(evalArtifactPathV4(dataDir, evalId), "utf8");
1341
- } catch (error) {
1342
- if (error.code === "ENOENT") throw new Error(`eval artifact not found: ${evalId}`);
1343
- throw error;
1344
- }
1345
- return parseEvalArtifactV4(JSON.parse(raw), evalId);
1346
- }
1347
- function parseEvalArtifactV4(value, source) {
1348
- if (!isRecord2(value)) throw new Error(`${source}: expected object`);
1349
- if (value.version !== 4) throw new Error(`${source}.version: expected current version 4`);
1350
- const summary = asRecord6(value.summary, `${source}.summary`);
1351
- const matrix = asRecord6(value.matrix, `${source}.matrix`);
1352
- const suite = asRecord6(value.suite, `${source}.suite`);
1353
- const servingConfiguration = value.servingConfiguration === void 0 ? void 0 : parseEvalServingConfigurationV1(value.servingConfiguration, `${source}.servingConfiguration`);
1354
- const aggregates = value.aggregates === void 0 ? void 0 : readArray2(value, source, "aggregates");
1355
- const clioCoder = asRecord6(value.clioCoder ?? value.clio, `${source}.clioCoder`);
1356
- return {
1357
- version: 4,
1358
- evalId: readString5(value, source, "evalId"),
1359
- suite: { id: readString5(suite, `${source}.suite`, "id"), hash: readString5(suite, `${source}.suite`, "hash") },
1360
- clioCoder: {
1361
- version: readString5(clioCoder, `${source}.clioCoder`, "version"),
1362
- commit: readNullableString5(clioCoder, `${source}.clioCoder`, "commit"),
1363
- entry: readString5(clioCoder, `${source}.clioCoder`, "entry")
1364
- },
1365
- environment: {
1366
- platform: readString5(asRecord6(value.environment, `${source}.environment`), `${source}.environment`, "platform"),
1367
- node: readString5(asRecord6(value.environment, `${source}.environment`), `${source}.environment`, "node")
1368
- },
1369
- matrix: {
1370
- target: readString5(matrix, `${source}.matrix`, "target"),
1371
- model: readNullableString5(matrix, `${source}.matrix`, "model"),
1372
- thinking: readNullableString5(matrix, `${source}.matrix`, "thinking"),
1373
- ...matrix.dimensions === void 0 ? {} : { dimensions: parseEvalExecutionMatrixDimensionsV1(matrix.dimensions, `${source}.matrix.dimensions`) }
1374
- },
1375
- ...servingConfiguration === void 0 ? {} : { servingConfiguration },
1376
- summary: {
1377
- runs: readNumber2(summary, `${source}.summary`, "runs"),
1378
- passed: readNumber2(summary, `${source}.summary`, "passed"),
1379
- failed: readNumber2(summary, `${source}.summary`, "failed"),
1380
- passRate: readNumber2(summary, `${source}.summary`, "passRate"),
1381
- tokens: parseTokenAccounting(summary.tokens, `${source}.summary.tokens`),
1382
- wallTimeMs: readNumber2(summary, `${source}.summary`, "wallTimeMs")
1383
- },
1384
- ...aggregates === void 0 ? {} : { aggregates },
1385
- results: readArray2(value, source, "results").map((entry, index) => parseResult(entry, `${source}.results[${index}]`))
1386
- };
1387
- }
1388
- function parseTokenAccounting(value, source) {
1389
- const record = asRecord6(value, source);
1390
- const measured = readBoolean2(record, source, "measured");
1391
- const runs = readNumber2(record, source, "runs");
1392
- const measuredRuns = readNumber2(record, source, "measuredRuns");
1393
- const countFields = ["input", "output", "total", "cacheRead", "cacheWrite"];
1394
- if (!measured) {
1395
- if (measuredRuns !== 0) throw new Error(`${source}.measuredRuns: expected 0 when unmeasured`);
1396
- const present = countFields.filter((field) => field in record);
1397
- if (present.length > 0) throw new Error(`${source}: unmeasured accounting carries no counts (${present.join(", ")})`);
1398
- return { measured: false, runs, measuredRuns: 0 };
1399
- }
1400
- if (measuredRuns <= 0) throw new Error(`${source}.measuredRuns: expected a positive count when measured`);
1401
- return {
1402
- measured: true,
1403
- runs,
1404
- measuredRuns,
1405
- input: readNumber2(record, source, "input"),
1406
- output: readNumber2(record, source, "output"),
1407
- total: readNumber2(record, source, "total"),
1408
- cacheRead: readNumber2(record, source, "cacheRead"),
1409
- cacheWrite: readNumber2(record, source, "cacheWrite")
1410
- };
1411
- }
1412
- function parseResult(value, source) {
1413
- const record = asRecord6(value, source);
1414
- const target = asRecord6(record.target, `${source}.target`);
1415
- const verdict = record.verdict === void 0 ? void 0 : parseEvalVerdictEnvelopeV1(record.verdict, `${source}.verdict`);
1416
- const behavioral = record.behavioral === void 0 ? void 0 : parseEvalBehaviorVerdictV1(record.behavioral, `${source}.behavioral`);
1417
- const behavioralMetrics = record.behavioralMetrics === void 0 ? void 0 : parseEvalBehaviorMetricsV1(record.behavioralMetrics, `${source}.behavioralMetrics`);
1418
- const executionEnvelope = record.executionEnvelope === void 0 ? void 0 : parseEvalExecutionEnvelopeV1(record.executionEnvelope, `${source}.executionEnvelope`);
1419
- if (behavioral !== void 0 && verdict === void 0) {
1420
- throw new Error(`${source}.behavioral: sibling document requires a verdict`);
1421
- }
1422
- if (behavioral !== void 0 && verdict !== void 0) {
1423
- assertEvalBehaviorReferencesVerdictV1(behavioral, verdict, `${source}.behavioral`);
1424
- }
1425
- if (behavioralMetrics !== void 0) {
1426
- if (behavioral === void 0) throw new Error(`${source}.behavioralMetrics: requires a behavioral verdict`);
1427
- if (behavioralMetrics.scenarioId !== readString5(record, source, "taskId")) {
1428
- throw new Error(`${source}.behavioralMetrics.scenarioId: conflicts with result taskId`);
1429
- }
1430
- if (behavioralMetrics.target.id !== readString5(target, `${source}.target`, "id") || behavioralMetrics.target.model !== readNullableString5(target, `${source}.target`, "model")) {
1431
- throw new Error(`${source}.behavioralMetrics.target: conflicts with result target`);
1432
- }
1433
- }
1434
- if (executionEnvelope !== void 0) {
1435
- if (behavioral === void 0) throw new Error(`${source}.executionEnvelope: requires a behavioral verdict`);
1436
- if (executionEnvelope.target !== readString5(target, `${source}.target`, "id") || executionEnvelope.corpus.id !== behavioral.corpus.id || executionEnvelope.corpus.version !== behavioral.corpus.version) {
1437
- throw new Error(`${source}.executionEnvelope: conflicts with result target or behavioral corpus`);
1438
- }
1439
- }
1440
- return {
1441
- assignmentId: readNullableString5(record, source, "assignmentId"),
1442
- terminalReceiptDigest: readNullableDigest2(record, source, "terminalReceiptDigest"),
1443
- taskId: readString5(record, source, "taskId"),
1444
- repeatIndex: readNumber2(record, source, "repeatIndex"),
1445
- target: {
1446
- id: readString5(target, `${source}.target`, "id"),
1447
- model: readNullableString5(target, `${source}.target`, "model"),
1448
- thinking: readNullableString5(target, `${source}.target`, "thinking")
1449
- },
1450
- pass: readBoolean2(record, source, "pass"),
1451
- failureClass: readNullableString5(record, source, "failureClass"),
1452
- metrics: asRecord6(record.metrics, `${source}.metrics`),
1453
- artifacts: asRecord6(record.artifacts, `${source}.artifacts`),
1454
- ...verdict === void 0 ? {} : { verdict },
1455
- ...behavioral === void 0 ? {} : { behavioral },
1456
- ...behavioralMetrics === void 0 ? {} : { behavioralMetrics },
1457
- ...executionEnvelope === void 0 ? {} : { executionEnvelope }
1458
- };
1459
- }
1460
- function asRecord6(value, source) {
1461
- if (isRecord2(value)) return value;
1462
- throw new Error(`${source}: expected object`);
1463
- }
1464
- function isRecord2(value) {
1465
- return typeof value === "object" && value !== null && !Array.isArray(value);
1466
- }
1467
- function readString5(record, source, field) {
1468
- const value = record[field];
1469
- if (typeof value !== "string" || value.length === 0) throw new Error(`${source}.${field}: expected string`);
1470
- return value;
1471
- }
1472
- function readNullableString5(record, source, field) {
1473
- const value = record[field];
1474
- if (value === null) return null;
1475
- if (typeof value !== "string" || value.length === 0) throw new Error(`${source}.${field}: expected string or null`);
1476
- return value;
1477
- }
1478
- function readNullableDigest2(record, source, field) {
1479
- const value = readNullableString5(record, source, field);
1480
- if (value !== null && !/^[0-9a-f]{64}$/u.test(value))
1481
- throw new Error(`${source}.${field}: expected sha256 digest or null`);
1482
- return value;
1483
- }
1484
- function readNumber2(record, source, field) {
1485
- const value = record[field];
1486
- if (typeof value !== "number" || !Number.isFinite(value)) throw new Error(`${source}.${field}: expected number`);
1487
- return value;
1488
- }
1489
- function readBoolean2(record, source, field) {
1490
- const value = record[field];
1491
- if (typeof value !== "boolean") throw new Error(`${source}.${field}: expected boolean`);
1492
- return value;
1493
- }
1494
- function readArray2(record, source, field) {
1495
- const value = record[field];
1496
- if (!Array.isArray(value)) throw new Error(`${source}.${field}: expected array`);
1497
- return value;
1498
- }
1499
-
1500
- export {
1501
- normalizeEvalSchemaId,
1502
- normalizeEvalRunnerKind,
1503
- EVAL_VERDICT_SCHEMA_V1,
1504
- EVAL_TRACKED_METRIC_NAMES,
1505
- parseEvalVerdictEnvelopeV1,
1506
- parseEvalBehaviorScenarioV1,
1507
- judgeEvalBehaviorV1,
1508
- assertEvalBehaviorReferencesVerdictV1,
1509
- EVAL_BEHAVIOR_METRIC_DEFINITIONS_V1,
1510
- buildEvalBehaviorMetricsV1,
1511
- EVAL_EXECUTION_ENVELOPE_SCHEMA_V1,
1512
- EVAL_EXECUTION_MATRIX_DIMENSIONS_V1,
1513
- parseEvalExecutionMatrixDimensionsV1,
1514
- evalServingConfigurationOf,
1515
- sameEvalServingConfiguration,
1516
- renderEvalServingConfiguration,
1517
- redactArtifactForStorage,
1518
- ZERO_EVAL_HARNESS_METRICS,
1519
- evalHarnessMetricsFromReceipt,
1520
- sumEvalHarnessMetrics,
1521
- evalRoot,
1522
- createEvalId,
1523
- writeEvalArtifact,
1524
- loadEvalArtifact,
1525
- writeEvalArtifactV4,
1526
- loadEvalArtifactV4,
1527
- parseEvalArtifactV4
1528
- };
1529
- //# sourceMappingURL=chunk-U44YYLVV.js.map