reeval 0.11.0 → 0.12.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 (283) hide show
  1. package/README.md +3 -1
  2. package/bin/mcp-timer.cjs +224 -0
  3. package/dist/{adapter-Bwy3QxAK.js → adapter-DigeVFWC.js} +3 -3
  4. package/dist/{adapter-Bwy3QxAK.js.map → adapter-DigeVFWC.js.map} +1 -1
  5. package/dist/{agent-DpE80WPz.js → agent-CatUEo5h.js} +21 -6
  6. package/dist/{agent-DpE80WPz.js.map → agent-CatUEo5h.js.map} +1 -1
  7. package/dist/{assemble-D9GWr-HS.js → assemble-CF063ms6.js} +19 -17
  8. package/dist/assemble-CF063ms6.js.map +1 -0
  9. package/dist/assemble-CJoD_Rzr.js +1 -0
  10. package/dist/bridge/index.mjs +2 -1
  11. package/dist/{capture-BQlGHiMC.js → capture-BiD7lVaM.js} +25 -17
  12. package/dist/{capture-BQlGHiMC.js.map → capture-BiD7lVaM.js.map} +1 -1
  13. package/dist/capture-Dp3q7K7Y.js +1 -0
  14. package/dist/{cli-ClpPT8kn.js → cli-B5zQCR2r.js} +161 -116
  15. package/dist/cli-B5zQCR2r.js.map +1 -0
  16. package/dist/{cli-spec-qmEnQ25_.js → cli-spec-BXIBUlaK.js} +34 -15
  17. package/dist/cli-spec-BXIBUlaK.js.map +1 -0
  18. package/dist/cli.js +2 -2
  19. package/dist/{command-TgbzPizb.js → command-BMHXHqMT.js} +15 -14
  20. package/dist/command-BMHXHqMT.js.map +1 -0
  21. package/dist/command-C94CQNh8.js +91 -0
  22. package/dist/command-C94CQNh8.js.map +1 -0
  23. package/dist/command-CVtgyqlM.js +335 -0
  24. package/dist/command-CVtgyqlM.js.map +1 -0
  25. package/dist/{command-DbAe1Rzb.js → command-CaZgCTIw.js} +14 -17
  26. package/dist/command-CaZgCTIw.js.map +1 -0
  27. package/dist/{command-BlM0y8jN.js → command-DTgBZR0k.js} +6 -6
  28. package/dist/{command-BlM0y8jN.js.map → command-DTgBZR0k.js.map} +1 -1
  29. package/dist/{commands-CthqwkAn.js → commands-BXzIDB3X.js} +1 -1
  30. package/dist/commands-CjpGBUWr.js +666 -0
  31. package/dist/commands-CjpGBUWr.js.map +1 -0
  32. package/dist/{config-DrVSEVN0.js → config-Dv5MG7Rp.js} +27 -48
  33. package/dist/config-Dv5MG7Rp.js.map +1 -0
  34. package/dist/{context-C1mxXh80.js → context-Dgn48BqT.js} +13 -2
  35. package/dist/context-Dgn48BqT.js.map +1 -0
  36. package/dist/{contrasts-5zsj32gk.js → contrasts-CcoMLC_y.js} +3 -3
  37. package/dist/{contrasts-5zsj32gk.js.map → contrasts-CcoMLC_y.js.map} +1 -1
  38. package/dist/db-BeqRiWLl.js +602 -0
  39. package/dist/db-BeqRiWLl.js.map +1 -0
  40. package/dist/db-CJDRVQal.js +2 -0
  41. package/dist/{dist-CuY4ehEk.js → dist-CMjp3qqF.js} +2 -2
  42. package/dist/{dist-CuY4ehEk.js.map → dist-CMjp3qqF.js.map} +1 -1
  43. package/dist/{docker-DOvjji9I.js → docker-BbTlMmYi.js} +2 -2
  44. package/dist/{docker-DOvjji9I.js.map → docker-BbTlMmYi.js.map} +1 -1
  45. package/dist/{docker-D1HZDS6q.js → docker-CCXdbREk.js} +20 -4
  46. package/dist/{docker-D1HZDS6q.js.map → docker-CCXdbREk.js.map} +1 -1
  47. package/dist/{docker-DNmMPOBb.js → docker-DC69dKxB.js} +1 -1
  48. package/dist/{doctor-D2MbNO8L.js → doctor-CqttrZcs.js} +57 -22
  49. package/dist/doctor-CqttrZcs.js.map +1 -0
  50. package/dist/{egress-2-qzPvGi.js → egress-BfK_O9ce.js} +435 -30
  51. package/dist/egress-BfK_O9ce.js.map +1 -0
  52. package/dist/env-BQqj93gu.js +21 -0
  53. package/dist/env-BQqj93gu.js.map +1 -0
  54. package/dist/{environment-Cca6a4wB.js → environment-BBz1Yes9.js} +224 -10
  55. package/dist/environment-BBz1Yes9.js.map +1 -0
  56. package/dist/{evaluate-DKIl54Hb.js → evaluate-CXQ1o-pd.js} +539 -559
  57. package/dist/evaluate-CXQ1o-pd.js.map +1 -0
  58. package/dist/{evaluate-DMyaGQEj.d.ts → evaluate-yjZKUexW.d.ts} +2 -2
  59. package/dist/facts-DtENlf9s.js +898 -0
  60. package/dist/facts-DtENlf9s.js.map +1 -0
  61. package/dist/{files-BpUYBwGu.js → files-B-eUpCZ1.js} +30 -7
  62. package/dist/files-B-eUpCZ1.js.map +1 -0
  63. package/dist/files-BsQbYz2i.js +65 -0
  64. package/dist/files-BsQbYz2i.js.map +1 -0
  65. package/dist/{files-BXHZFWmx.js → files-COHQLEHE.js} +6 -17
  66. package/dist/files-COHQLEHE.js.map +1 -0
  67. package/dist/files-DqCBW7i8.js +1 -0
  68. package/dist/files-Ha-jsQXf.js +1 -0
  69. package/dist/generate-Cs2TMH_k.js +1647 -0
  70. package/dist/generate-Cs2TMH_k.js.map +1 -0
  71. package/dist/{git-Crl3b87o.js → git-DhykwgKF.js} +2 -2
  72. package/dist/{git-Crl3b87o.js.map → git-DhykwgKF.js.map} +1 -1
  73. package/dist/{harness-CEuntrla.js → harness-BAjw1fcr.js} +2 -2
  74. package/dist/{harness-CEuntrla.js.map → harness-BAjw1fcr.js.map} +1 -1
  75. package/dist/harness.d.ts +1 -1
  76. package/dist/harness.js +1 -1
  77. package/dist/{header-DHQv_ZrF.js → header-kSmWatcO.js} +10 -3
  78. package/dist/{header-DHQv_ZrF.js.map → header-kSmWatcO.js.map} +1 -1
  79. package/dist/{images-Bi3aGxb9.js → images-BmJRuTpm.js} +61 -13
  80. package/dist/images-BmJRuTpm.js.map +1 -0
  81. package/dist/index.d.ts +3 -3
  82. package/dist/index.js +4 -4
  83. package/dist/init-Bwc9byQr.js +543 -0
  84. package/dist/init-Bwc9byQr.js.map +1 -0
  85. package/dist/init-D7Y1ny1z.js +1 -0
  86. package/dist/insights-B2Xmhz9o.js +64 -0
  87. package/dist/insights-B2Xmhz9o.js.map +1 -0
  88. package/dist/{invocations-BYDPe3fV.js → invocations-CQTbP092.js} +3 -3
  89. package/dist/{invocations-BYDPe3fV.js.map → invocations-CQTbP092.js.map} +1 -1
  90. package/dist/{judge-DW_GDOmB.js → judge-Dt6KW6_O.js} +5 -3
  91. package/dist/judge-Dt6KW6_O.js.map +1 -0
  92. package/dist/judge.d.ts +7 -6
  93. package/dist/judge.js +8 -7
  94. package/dist/judge.js.map +1 -1
  95. package/dist/{live-jlfszAbb.js → live-DYd2QEyR.js} +2 -2
  96. package/dist/{live-jlfszAbb.js.map → live-DYd2QEyR.js.map} +1 -1
  97. package/dist/{model-D0IcOQao.js → model-B-mel-Gv.js} +43 -18
  98. package/dist/model-B-mel-Gv.js.map +1 -0
  99. package/dist/model-BGKYVpoj.js +1 -0
  100. package/dist/{model-DaVCY3rb.js → model-C7tSwT7f.js} +2 -2
  101. package/dist/{model-DaVCY3rb.js.map → model-C7tSwT7f.js.map} +1 -1
  102. package/dist/{model-DaX4bNLZ.js → model-CWlAqmbU.js} +135 -40
  103. package/dist/model-CWlAqmbU.js.map +1 -0
  104. package/dist/model-DHY-dfoO.js +1 -0
  105. package/dist/{node-B3ydHo6t.js → node-D0mtjRAO.js} +3 -3
  106. package/dist/{node-B3ydHo6t.js.map → node-D0mtjRAO.js.map} +1 -1
  107. package/dist/{options-C0d0AzeR.js → options-CPUW97_7.js} +7 -9
  108. package/dist/options-CPUW97_7.js.map +1 -0
  109. package/dist/{pairs-CnInRu-G.js → pairs-DP6XOJby.js} +2 -2
  110. package/dist/{pairs-CnInRu-G.js.map → pairs-DP6XOJby.js.map} +1 -1
  111. package/dist/{patch-B1bnfhN-.js → patch-D4oluWzH.js} +2 -2
  112. package/dist/{patch-B1bnfhN-.js.map → patch-D4oluWzH.js.map} +1 -1
  113. package/dist/{plan-DgQxp9yy.js → plan-OkwUcJQ9.js} +21 -8
  114. package/dist/plan-OkwUcJQ9.js.map +1 -0
  115. package/dist/plugins-CUWMnSNb.js +654 -0
  116. package/dist/plugins-CUWMnSNb.js.map +1 -0
  117. package/dist/{preflight-DlQvbySb.js → preflight-B6pY89bF.js} +1 -1
  118. package/dist/{preflight-BRzD30L5.js → preflight-Bjm7_ylE.js} +14 -10
  119. package/dist/preflight-Bjm7_ylE.js.map +1 -0
  120. package/dist/{prepare-B_y-AFMv.js → prepare-CQmK3SBn.js} +70 -23
  121. package/dist/prepare-CQmK3SBn.js.map +1 -0
  122. package/dist/prepare-DbdgtZKe.js +2 -0
  123. package/dist/{provenance-DQ0AXn6c.js → provenance-B3Y17oCC.js} +3 -3
  124. package/dist/{provenance-DQ0AXn6c.js.map → provenance-B3Y17oCC.js.map} +1 -1
  125. package/dist/providers-CXN2RFz-.js +1 -0
  126. package/dist/{providers-DoTq1jHW.js → providers-eoniqK6w.js} +24 -10
  127. package/dist/providers-eoniqK6w.js.map +1 -0
  128. package/dist/{query-BO-ux7RB.js → query-CLRZmWBT.js} +3 -3
  129. package/dist/{query-BO-ux7RB.js.map → query-CLRZmWBT.js.map} +1 -1
  130. package/dist/query-CmBDYt0_.js +1 -0
  131. package/dist/{questions-C2dym2ce.js → questions-1XOulevV.js} +6 -6
  132. package/dist/{questions-C2dym2ce.js.map → questions-1XOulevV.js.map} +1 -1
  133. package/dist/{record-BKmMvZ6O.js → record-kk9M1hj-.js} +8 -4
  134. package/dist/record-kk9M1hj-.js.map +1 -0
  135. package/dist/remarks-1521zwfW.js +38 -0
  136. package/dist/remarks-1521zwfW.js.map +1 -0
  137. package/dist/remarks-BhAV1H4V.js +1 -0
  138. package/dist/remarks-DlJCqWRs.js +278 -0
  139. package/dist/remarks-DlJCqWRs.js.map +1 -0
  140. package/dist/{remote-CPPW86Q9.js → remote-cE2VWfkJ.js} +3 -3
  141. package/dist/{remote-CPPW86Q9.js.map → remote-cE2VWfkJ.js.map} +1 -1
  142. package/dist/resolve-C4zeccCH.js +724 -0
  143. package/dist/resolve-C4zeccCH.js.map +1 -0
  144. package/dist/resolve-D30yZYmB.js +1 -0
  145. package/dist/{results-BE2f-1XS.js → results-Drtt0uFl.js} +33 -8
  146. package/dist/results-Drtt0uFl.js.map +1 -0
  147. package/dist/{resume-Ca1c8vix.js → resume-BEFazUfy.js} +4 -4
  148. package/dist/{resume-Ca1c8vix.js.map → resume-BEFazUfy.js.map} +1 -1
  149. package/dist/rules-BFzQqPIm.js +317 -0
  150. package/dist/rules-BFzQqPIm.js.map +1 -0
  151. package/dist/run-BeMy92Us.js +88 -0
  152. package/dist/run-BeMy92Us.js.map +1 -0
  153. package/dist/{sandbox-DLrsvu7U.js → sandbox-CQaJj7n9.js} +2 -2
  154. package/dist/{sandbox-DLrsvu7U.js.map → sandbox-CQaJj7n9.js.map} +1 -1
  155. package/dist/sandbox.d.ts +1 -1
  156. package/dist/sandbox.js +1 -1
  157. package/dist/server-V4-2w0l8.js +1 -0
  158. package/dist/{server-TUY5xA_A.js → server-xK0les4f.js} +8 -8
  159. package/dist/{server-TUY5xA_A.js.map → server-xK0les4f.js.map} +1 -1
  160. package/dist/source-BDow_oW8.js +1 -0
  161. package/dist/{source-DJGS0a0u.js → source-Q1hEKbCs.js} +2 -2
  162. package/dist/{source-DJGS0a0u.js.map → source-Q1hEKbCs.js.map} +1 -1
  163. package/dist/src-B9L9yGKI.js +1 -0
  164. package/dist/{src-CLoOMVWI.js → src-Bcah6ZkT.js} +1 -1
  165. package/dist/{src-DvCg0NBs.js → src-BhmaorOU.js} +28 -6
  166. package/dist/{src-DvCg0NBs.js.map → src-BhmaorOU.js.map} +1 -1
  167. package/dist/{src-CF17Ug08.js → src-C0CeKiLU.js} +19 -4
  168. package/dist/{src-CF17Ug08.js.map → src-C0CeKiLU.js.map} +1 -1
  169. package/dist/src-C0xowZ3C.js +2 -0
  170. package/dist/src-CHIfIKUu.js +2 -0
  171. package/dist/src-DLtyz4w5.js +2 -0
  172. package/dist/src-DPIjmReZ.js +2 -0
  173. package/dist/{src-BxfCKA3_.js → src-DXNh5mTr.js} +1 -1
  174. package/dist/{src-FGXhkEkH.js → src-DiLMkIr9.js} +142 -13
  175. package/dist/src-DiLMkIr9.js.map +1 -0
  176. package/dist/{src-ftu5wPSt.js → src-LekQrr_S.js} +209 -29
  177. package/dist/src-LekQrr_S.js.map +1 -0
  178. package/dist/src-bCnsA6Vp.js +2 -0
  179. package/dist/{src-u8_ixn_F.js → src-cbCb-MPy.js} +20 -4
  180. package/dist/src-cbCb-MPy.js.map +1 -0
  181. package/dist/{src-DvK0EIZx.js → src-qGoFkuJF.js} +55 -6
  182. package/dist/{src-DvK0EIZx.js.map → src-qGoFkuJF.js.map} +1 -1
  183. package/dist/{src-DSYYPEOj.js → src-ynBVosfX.js} +1 -1
  184. package/dist/state-BQR_BCm4.js +1 -0
  185. package/dist/{state-DfpHox6b.js → state-BmZ8QVZ8.js} +12 -12
  186. package/dist/{state-DfpHox6b.js.map → state-BmZ8QVZ8.js.map} +1 -1
  187. package/dist/studio-app/assets/{index-CBkhNAv8.js → index-CnYJijyI.js} +9 -9
  188. package/dist/studio-app/index.html +1 -1
  189. package/dist/suite-BaHPmAGy.js +1 -0
  190. package/dist/{suite-Cw_7G2RM.js → suite-C8sw2pox.js} +80 -28
  191. package/dist/suite-C8sw2pox.js.map +1 -0
  192. package/dist/{summary-BUKfU-9l.js → summary-0oQNGskv.js} +273 -47
  193. package/dist/summary-0oQNGskv.js.map +1 -0
  194. package/dist/testing.d.ts +2 -2
  195. package/dist/testing.js +2 -2
  196. package/dist/{text-gEcKjAyp.js → text-CrVy5ioL.js} +18 -2
  197. package/dist/text-CrVy5ioL.js.map +1 -0
  198. package/dist/{transcript-BNNANU8A.js → transcript-BTxJpW4R.js} +2 -2
  199. package/dist/{transcript-BNNANU8A.js.map → transcript-BTxJpW4R.js.map} +1 -1
  200. package/dist/types-C5vI3g1C.js.map +1 -1
  201. package/dist/{types-BYdlwMwo.d.ts → types-GraZtfHN.d.ts} +848 -34
  202. package/dist/usage-BDo2q_yu.js +1 -0
  203. package/dist/{command-Bj39y-Wm.js → validate-BdoXUuL_.js} +15 -372
  204. package/dist/validate-BdoXUuL_.js.map +1 -0
  205. package/dist/view/index.d.ts +20 -257
  206. package/dist/view/index.js +7 -6
  207. package/dist/{views-B8w2J-gD.js → views-BoUoX4_A.js} +8 -98
  208. package/dist/views-BoUoX4_A.js.map +1 -0
  209. package/dist/views-noVQNCUP.js +2 -0
  210. package/dist/{worker-entry-DNnveLqx.js → worker-entry-D0-GErmU.js} +2 -2
  211. package/dist/{worker-entry-DNnveLqx.js.map → worker-entry-D0-GErmU.js.map} +1 -1
  212. package/dist/{workspace-C_X0tdv6.js → workspace-B90YDU_a.js} +1 -1
  213. package/dist/{workspace-C4RA3srV.js → workspace-tjZFkjxC.js} +4 -4
  214. package/dist/{workspace-C4RA3srV.js.map → workspace-tjZFkjxC.js.map} +1 -1
  215. package/package.json +3 -1
  216. package/skills/eval-rubric/SKILL.md +130 -0
  217. package/dist/agent-D483ru7D.js +0 -334
  218. package/dist/agent-D483ru7D.js.map +0 -1
  219. package/dist/assemble-D5KGrwnJ.js +0 -1
  220. package/dist/assemble-D9GWr-HS.js.map +0 -1
  221. package/dist/capture-CYGLpWxR.js +0 -1
  222. package/dist/cli-ClpPT8kn.js.map +0 -1
  223. package/dist/cli-spec-qmEnQ25_.js.map +0 -1
  224. package/dist/command-Bj39y-Wm.js.map +0 -1
  225. package/dist/command-C-cVjlny.js +0 -1
  226. package/dist/command-DbAe1Rzb.js.map +0 -1
  227. package/dist/command-TgbzPizb.js.map +0 -1
  228. package/dist/commands-YUwlyTbr.js +0 -228
  229. package/dist/commands-YUwlyTbr.js.map +0 -1
  230. package/dist/config-DrVSEVN0.js.map +0 -1
  231. package/dist/context-C1mxXh80.js.map +0 -1
  232. package/dist/db-CKg5NtiW.js +0 -2
  233. package/dist/db-DfhipHEF.js +0 -1416
  234. package/dist/db-DfhipHEF.js.map +0 -1
  235. package/dist/doctor-D2MbNO8L.js.map +0 -1
  236. package/dist/egress-2-qzPvGi.js.map +0 -1
  237. package/dist/environment-Cca6a4wB.js.map +0 -1
  238. package/dist/evaluate-DKIl54Hb.js.map +0 -1
  239. package/dist/files-BXHZFWmx.js.map +0 -1
  240. package/dist/files-BpUYBwGu.js.map +0 -1
  241. package/dist/files-Bw8lWEjg.js +0 -1
  242. package/dist/files-D6J0iSdx.js +0 -1
  243. package/dist/images-Bi3aGxb9.js.map +0 -1
  244. package/dist/init-Cl3f3NBT.js +0 -360
  245. package/dist/init-Cl3f3NBT.js.map +0 -1
  246. package/dist/init-fhOXED8F.js +0 -1
  247. package/dist/judge-DW_GDOmB.js.map +0 -1
  248. package/dist/model-CXhrziBe.js +0 -1
  249. package/dist/model-D0IcOQao.js.map +0 -1
  250. package/dist/model-DaX4bNLZ.js.map +0 -1
  251. package/dist/model-_bxNrk2h.js +0 -1
  252. package/dist/options-C0d0AzeR.js.map +0 -1
  253. package/dist/plan-DgQxp9yy.js.map +0 -1
  254. package/dist/preflight-BRzD30L5.js.map +0 -1
  255. package/dist/prepare-B_y-AFMv.js.map +0 -1
  256. package/dist/prepare-DCKTLHN3.js +0 -2
  257. package/dist/providers-B9yTdIqF.js +0 -1
  258. package/dist/providers-DoTq1jHW.js.map +0 -1
  259. package/dist/query-CRQfsw0e.js +0 -1
  260. package/dist/record-BKmMvZ6O.js.map +0 -1
  261. package/dist/results-BE2f-1XS.js.map +0 -1
  262. package/dist/server-Dp8eOeK5.js +0 -1
  263. package/dist/source-DdbLGR1M.js +0 -1
  264. package/dist/src-CcrQbpG8.js +0 -2
  265. package/dist/src-DCFtJRp0.js +0 -2
  266. package/dist/src-DYO3DdnQ.js +0 -1
  267. package/dist/src-FGXhkEkH.js.map +0 -1
  268. package/dist/src-WD-zgQYZ.js +0 -2
  269. package/dist/src-_oI9AePb.js +0 -2
  270. package/dist/src-ftu5wPSt.js.map +0 -1
  271. package/dist/src-qsKCqv7a.js +0 -2
  272. package/dist/src-u8_ixn_F.js.map +0 -1
  273. package/dist/state-DpAxYyED.js +0 -1
  274. package/dist/suite-Cw_7G2RM.js.map +0 -1
  275. package/dist/suite-DamAEnNF.js +0 -1
  276. package/dist/summary-BUKfU-9l.js.map +0 -1
  277. package/dist/summary-Baa4rTHS.js +0 -192
  278. package/dist/summary-Baa4rTHS.js.map +0 -1
  279. package/dist/text-gEcKjAyp.js.map +0 -1
  280. package/dist/tools-DLHgetpx.js +0 -249
  281. package/dist/tools-DLHgetpx.js.map +0 -1
  282. package/dist/views-B8w2J-gD.js.map +0 -1
  283. package/dist/views-DblnI3kA.js +0 -2
@@ -66,7 +66,10 @@ declare const effortSample: (a: Pick<AttemptRecord, 'activity' | 'timings' | 'us
66
66
  /** Token totals from the attempts that reported usage; empty when none did. */
67
67
  declare const tokenValues: (samples: EffortSample[]) => number[];
68
68
  declare function effortOf(samples: EffortSample[]): CellEffort | null;
69
- /** The verdict of an exact rank test of `xs` (variant) against `ys` (control). */
69
+ /**
70
+ * The verdict of an exact rank test of `xs` (variant) against `ys` (control). Its direction is
71
+ * the test's (which side ranks lower), not the medians', which can be equal or disagree.
72
+ */
70
73
  declare function effortVerdict(xs: number[], ys: number[]): {
71
74
  p: number | null;
72
75
  verdict: EffortVerdict;
@@ -268,7 +271,10 @@ type AttemptRecord = {
268
271
  outcome: Outcome;
269
272
  error: AttemptError | null;
270
273
  durationMs: number;
271
- /** `text` is the agent's final message, cut at 8 KB; the whole of it is in `transcript.jsonl`. */
274
+ /**
275
+ * `text` is the agent's final message, cut at 8 KB; the whole of it is in `transcript.jsonl`.
276
+ * `mcpStartup` times each stdio MCP server's start in the turn (`McpStartup`).
277
+ */
272
278
  turns: Array<{
273
279
  prompt: string;
274
280
  status: TurnStatus;
@@ -283,6 +289,8 @@ type AttemptRecord = {
283
289
  unreported: WebEventType[];
284
290
  /** The turn's first error, such as a provider's billing or auth error, cut at 1 KB; else null. */
285
291
  error: string | null;
292
+ /** Each stdio MCP server start during the turn; see `McpStartup`. */
293
+ mcpStartup?: McpStartup[];
286
294
  }>;
287
295
  /** Tokens across the attempt's turns; null when the harness reported none. */
288
296
  usage: TokenUsage | null;
@@ -413,7 +421,10 @@ type FamilyEffortMetric = {
413
421
  ratio: number | null;
414
422
  /** Wilcoxon signed-rank over the per-case differences; null when every difference is 0. */
415
423
  p: number | null;
416
- /** `insufficient` below 6 non-zero differences, where the exact test can't reach 0.05. */
424
+ /**
425
+ * `insufficient` below 6 non-zero differences, where the exact test can't reach 0.05. `fewer`
426
+ * and `more` are the test's direction (which side's differences rank higher), not the median's.
427
+ */
417
428
  verdict: 'fewer' | 'more' | 'noise' | 'insufficient';
418
429
  };
419
430
  /** The variant's effort against the control's, paired by case. */
@@ -671,6 +682,11 @@ type RunRecord = {
671
682
  evals: EvalEntry[];
672
683
  /** Each pooled `evaluate.each` that ran; unset when none did. */
673
684
  families?: FamilyRecord[];
685
+ /**
686
+ * Errors outside any attempt, redacted: an eval file that didn't load, a rejection or throw no
687
+ * attempt awaited, a worker that died. Any one fails the run. Unset when there were none.
688
+ */
689
+ errors?: string[];
674
690
  };
675
691
  /** What ran and graded the agents: the machine, images, harnesses and judge. */
676
692
  type Stack = {
@@ -719,7 +735,7 @@ type Stack = {
719
735
  effort: string | null;
720
736
  /**
721
737
  * The models the harness reported serving, across every turn in the run, with the variant it
722
- * resolved (`composer-2.5[fast=true]` for `composer-2.5` with no `params`); empty when it
738
+ * resolved (`composer-2.5[fast=false]` for `composer-2.5` with no `params`); empty when it
723
739
  * reports none.
724
740
  */
725
741
  resolvedModels: string[];
@@ -774,6 +790,8 @@ type HistoryCell = Pick<CellRecord, 'key' | 'role' | 'variant' | 'harness' | 'mo
774
790
  };
775
791
  /** Median tool calls, agent time and tokens over the counted attempts; null when none counted. */
776
792
  effort: CellEffort | null;
793
+ /** Of `fail`, the attempts the run's interrupt cancelled (`error.kind: 'aborted'`); unset when none. */
794
+ cancelled?: number;
777
795
  };
778
796
  /**
779
797
  * One line of the derived history listing: cached locally by the CLI, and the run header in the
@@ -814,6 +832,592 @@ type HistoryEntry = {
814
832
  }>;
815
833
  /** The run's pooled families; unset when none ran. */
816
834
  families?: Array<Pick<FamilyRecord, 'id' | 'name' | 'cases' | 'ran' | 'outcome'>>;
835
+ /** The run's errors outside any attempt; unset when there were none. */
836
+ errors?: string[];
837
+ };
838
+ //#endregion
839
+ //#region src/view/suite.d.ts
840
+ /**
841
+ * A variant against its baseline: `better` or `worse` when the stored 95% interval on the
842
+ * difference excludes 0, `same` when both pass at the same rate, and `unclear` otherwise,
843
+ * including whenever either side has fewer than `EFFECT_MIN_COUNTED` counted attempts.
844
+ */
845
+ type Effect = 'better' | 'worse' | 'same' | 'unclear';
846
+ /**
847
+ * What an eval's cells compare: `change` when it has variants (or several environments),
848
+ * `harness` when it has several harnesses, `both`, or `none`.
849
+ */
850
+ type Across = 'none' | 'change' | 'harness' | 'both';
851
+ /** The fewest counted attempts a side for an effect to be anything but `unclear`. */
852
+ declare const EFFECT_MIN_COUNTED = 4;
853
+ /**
854
+ * One finished run's facts. Every node has a `path`, a stable id to cite it by, and `paths`
855
+ * lists them all in the order the nodes appear.
856
+ *
857
+ * A path is `/`-separated segments, each with `%`, `/` and `+` percent-encoded:
858
+ *
859
+ * - `<eval>`: the eval's id (`evals/a.eval.ts › group › name`) or a family's
860
+ * (`evals/a.eval.ts › fixes $id`);
861
+ * - `<eval>/<case>`: a family case, by its label (`GH-101` for `fixes GH-101`);
862
+ * - `<eval>[/<case>]/<harness>+<environment>+<sandbox>`: a cell;
863
+ * - `<cell>/checks/<label>`: a check, by its assertion label;
864
+ * - `<cell>/effort`: the cell's effort, only when it was tested;
865
+ * - `<eval>/<harness>+<environment>+<sandbox>`: on a family, a variant's pooled effect.
866
+ *
867
+ * A case segment never has a raw `+` and a cell segment always has two, so the two can't be
868
+ * confused. Ids, labels and cell keys are what runs are matched on, so a path names the same
869
+ * fact in every run that has it.
870
+ */
871
+ type SuiteResult = {
872
+ runId: string;
873
+ status: RunRecord['status'];
874
+ /**
875
+ * The run's outcome, which `reeval run`'s exit code is read from: `fail` on any error outside
876
+ * an attempt, and `skipped` on an interrupted run.
877
+ */
878
+ outcome: Outcome;
879
+ /**
880
+ * Errors outside any attempt: an eval file that didn't load, a rejection or throw no attempt
881
+ * awaited, a worker that died. Any one fails the run.
882
+ */
883
+ errors: string[];
884
+ /**
885
+ * Outcomes counted per block: each family case is one, each eval with no cases is one, and a
886
+ * family whose pooled gate failed is one more fail. `errors` counts the run's `errors`.
887
+ */
888
+ tally: SuiteTally;
889
+ /** Sorted by path. */
890
+ files: ResultFile[];
891
+ /** Every node's `path`, in the order they appear. */
892
+ paths: string[];
893
+ };
894
+ type SuiteTally = {
895
+ errors: number;
896
+ pass: number;
897
+ fail: number;
898
+ infraError: number;
899
+ cancelled: number;
900
+ skipped: number;
901
+ };
902
+ /**
903
+ * An eval's or a family case's outcome: the record's, except `cancelled` where its only failed
904
+ * gated attempts are ones the run's interrupt cancelled, since the agent didn't fail those.
905
+ */
906
+ type ResultOutcome = Outcome | 'cancelled';
907
+ type ResultFile = {
908
+ path: string;
909
+ evals: EvalResult[];
910
+ };
911
+ type EvalResult = {
912
+ path: string;
913
+ /** The eval's id, or the family's. */
914
+ id: string;
915
+ group: string[];
916
+ /** The eval's name; on a family, its template. */
917
+ name: string;
918
+ /** A family's name template (`fixes $id`); null on a single eval. */
919
+ template: string | null;
920
+ /** Source order in the file. */
921
+ order: number;
922
+ across: Across;
923
+ /**
924
+ * A pooled `evaluate.each` with two or more cases: `cases` is set and `cells` is null. An
925
+ * unpooled one (`{ pool: false }`) is recorded as separate evals, each a single eval.
926
+ */
927
+ family: boolean;
928
+ /** A placeholder (`evaluate.todo`) that never ran. */
929
+ todo: boolean;
930
+ /** On a family: `fail` when a case failed or its pooled gate did. */
931
+ outcome: ResultOutcome;
932
+ cells: CellResult[] | null;
933
+ cases: CaseResult[] | null;
934
+ /** A family's variants against their baseline, pooled over the cases; null on a single eval. */
935
+ pooled: PooledArm[] | null;
936
+ /**
937
+ * Its compare questions' answers. On a family, each question asked of any case, in first-asked
938
+ * order, with its votes and wins summed over the cases that answered it.
939
+ */
940
+ questions: QuestionResult[];
941
+ };
942
+ /** A compare question: each side's wins over the pairs the model decided. Never gates. */
943
+ type QuestionResult = {
944
+ question: string;
945
+ /** Pairs voted, each counted once per order it was asked in. */
946
+ votes: number;
947
+ rates: Array<{
948
+ cut: 'within' | 'across';
949
+ name: string;
950
+ wins: number;
951
+ n: number;
952
+ }>;
953
+ /** Why some or all of its votes are missing: the model call failed. */
954
+ error: string | null;
955
+ };
956
+ type CaseResult = {
957
+ path: string;
958
+ /** The case's own eval id. */
959
+ id: string;
960
+ /** Its name less the template's literal text: `GH-101` for `fixes GH-101`. */
961
+ label: string;
962
+ name: string;
963
+ /** Its place in the case list. */
964
+ order: number;
965
+ outcome: ResultOutcome;
966
+ cells: CellResult[];
967
+ };
968
+ type CellResult = {
969
+ path: string;
970
+ key: string;
971
+ harness: string;
972
+ /** `-` when no environment is set. */
973
+ environment: string;
974
+ sandbox: string;
975
+ /** The variant's name; null on a control. */
976
+ variant: string | null;
977
+ /** The control of an eval that has variants: the arm the variants are measured against. */
978
+ baseline: boolean;
979
+ /** On a variant, its baseline cell's key; else null. */
980
+ vs: string | null;
981
+ /** The cell's place in the eval's cells. */
982
+ order: number;
983
+ /** Its failures fail the eval (its gate isn't `'none'`). */
984
+ gated: boolean;
985
+ outcome: Outcome;
986
+ /** Every attempt: `passed + failed + infraError + skipped`. */
987
+ attempts: number;
988
+ passed: number;
989
+ failed: number;
990
+ /** Infrastructure errors, which are neither passes nor fails. */
991
+ infraError: number;
992
+ skipped: number;
993
+ fingerprint: string;
994
+ /** The skill sources and files the cell's environment placed, as written. */
995
+ context: string[];
996
+ /**
997
+ * Every check the eval's attempts recorded (on a family, any case's). A cell with no counted
998
+ * attempt (every one an infra error or skipped) lists each as `not run`.
999
+ */
1000
+ checks: CheckResult[];
1001
+ /** On a variant, against its baseline; null on a control. */
1002
+ effect: Effect | null;
1003
+ /** The stored 95% interval on the variant's difference from its baseline. Not for display. */
1004
+ interval: Interval | null;
1005
+ /** On a variant, the compare's `minLift`, a fraction like the interval; null without one. */
1006
+ minLift: number | null;
1007
+ /** Medians over the counted attempts; null below `EFFECT_MIN_COUNTED` of them. */
1008
+ effort: EffortCounters | null;
1009
+ /** On a variant, its tool calls, agent time or tokens differ from its baseline's by the rank test. */
1010
+ effortDiffers: boolean;
1011
+ /** Why attempts failed or errored where no check says: a timeout, an infra error, a throw. */
1012
+ errors: CellError[];
1013
+ /** Web searches and fetches per counted attempt; null where the harness can't report them. */
1014
+ searches: Array<number | null>;
1015
+ fetches: Array<number | null>;
1016
+ };
1017
+ /** A cell's attempts the run's interrupt cancelled: recorded as fails, but not the agent's. */
1018
+ declare const cancelledOf: (cell: CellResult) => number;
1019
+ /** A cell's counted tries: its passes and fails, less the ones the interrupt cancelled. */
1020
+ declare const countedOf: (cell: CellResult) => number;
1021
+ type CheckResult = {
1022
+ path: string;
1023
+ label: string;
1024
+ /** First-seen order across the eval's attempts. */
1025
+ order: number;
1026
+ outcome: CheckOutcome;
1027
+ /**
1028
+ * On a variant, this check against the baseline's (`unclear` when the baseline never ran it);
1029
+ * null on a control or without one.
1030
+ */
1031
+ effect: Effect | null;
1032
+ /** Set when the check is a judge verdict. */
1033
+ judge: JudgeResult | null;
1034
+ };
1035
+ /**
1036
+ * `not run`: no counted attempt reached the check, because a hard `expect` before it failed or
1037
+ * none counted. That is not a failure, and is never `0 of N`. `ran`: counts over the counted attempts that
1038
+ * reached it (`errored` ones couldn't answer), with `notRun` for those that didn't, and the
1039
+ * first failure's message.
1040
+ */
1041
+ type CheckOutcome = {
1042
+ status: 'not run';
1043
+ } | {
1044
+ status: 'ran';
1045
+ passed: number;
1046
+ failed: number;
1047
+ errored: number;
1048
+ notRun: number;
1049
+ assertion: string | null;
1050
+ };
1051
+ /**
1052
+ * One distinct error over a cell's attempts: its kind (`turn` for a turn the harness ended with
1053
+ * an error), its message's first line, and how often.
1054
+ */
1055
+ type CellError = {
1056
+ kind: ErrorKind | 'turn';
1057
+ message: string;
1058
+ attempts: number;
1059
+ };
1060
+ type JudgeResult = {
1061
+ question: string;
1062
+ threshold: number;
1063
+ /** One per counted attempt that judged it. */
1064
+ scores: number[];
1065
+ };
1066
+ type Interval = {
1067
+ low: number;
1068
+ high: number;
1069
+ };
1070
+ /** A null counter is one the harness didn't record; a recorded zero stays zero. */
1071
+ type EffortCounters = {
1072
+ tools: number | null;
1073
+ agentMs: number | null;
1074
+ tokens: number | null;
1075
+ };
1076
+ type PooledArm = {
1077
+ path: string;
1078
+ /** The variant cell's key, the same in every case. */
1079
+ key: string;
1080
+ vs: string;
1081
+ effect: Effect;
1082
+ /** Cases with counted attempts on both sides. */
1083
+ pairs: number;
1084
+ interval: Interval;
1085
+ /** The compare's `minLift`, a fraction like the interval, which gates its low end; null without one. */
1086
+ minLift: number | null;
1087
+ outcome: 'pass' | 'fail';
1088
+ };
1089
+ type Side = {
1090
+ pass: number;
1091
+ counted: number;
1092
+ };
1093
+ /**
1094
+ * The effect of `variant` against `control`, from the interval on their difference. A side
1095
+ * with fewer than `EFFECT_MIN_COUNTED` counted attempts is `unclear`, whatever the interval.
1096
+ */
1097
+ declare function effectOf(variant: Side, control: Side, interval: Interval | null): Effect;
1098
+ /** The check's effect, on the same Newcombe interval the record stores for a cell's lift. */
1099
+ declare function checkEffect(variant: CheckTally, control: CheckTally): Effect;
1100
+ /** One path segment: `%`, `/` and `+` percent-encoded, so segments split back unambiguously. */
1101
+ declare const factSegment: (s: string) => string;
1102
+ declare function evalAcross(cells: readonly Pick<CellRecord, 'harness' | 'environment' | 'role'>[]): Across;
1103
+ /**
1104
+ * An error's one line: its first line with any letter or digit in it, joined with the next one
1105
+ * when it ends with `:`, since `Docker failed:` alone says nothing. A log line's `| ` is dropped.
1106
+ */
1107
+ declare function messageLine(text: string): string;
1108
+ /** The facts of a run, from its record. Pure: the same record always gives the same result. */
1109
+ declare function suiteResult(record: RunRecord): SuiteResult;
1110
+ //#endregion
1111
+ //#region src/view/insights.d.ts
1112
+ /** `<history>/<run>/insights.json`, beside the record. */
1113
+ declare const INSIGHTS_FILE = "insights.json";
1114
+ /** `RunInsights.model` when no analysis model wrote the file: it holds deterministic remarks only. */
1115
+ declare const NO_MODEL = "none";
1116
+ /** Whether an analysis model wrote these insights, rather than reeval alone for its remarks. */
1117
+ declare const fromModel: (insights: RunInsights) => boolean;
1118
+ /** What one attempt tests. Only an analysis model can tell; without one every eval is `other`. */
1119
+ type Job = 'choose' | 'finish' | 'other';
1120
+ /**
1121
+ * A run's insights, `<history>/<run>/insights.json`. Written create-only; the record is untouched.
1122
+ * They're for the facts they were written from: a `factsHash` that isn't the run's marks them stale.
1123
+ */
1124
+ type RunInsights = {
1125
+ kind: 'reeval-insights';
1126
+ schemaVersion: 1;
1127
+ runId: string;
1128
+ /**
1129
+ * The analysis model, as configured (`google/gemini-3.8-flash`, or `fake`); `NO_MODEL` when
1130
+ * reeval wrote the file without one, to hold the run's deterministic remarks only.
1131
+ */
1132
+ model: string;
1133
+ /** The prompts' version: insights from another version were asked differently. */
1134
+ promptVersion: string;
1135
+ /** sha256 of the run's `SuiteResult` as canonical JSON: the facts the model saw. */
1136
+ factsHash: string;
1137
+ createdAt: string;
1138
+ /**
1139
+ * Over every call; `outputTokens` includes `reasoningTokens`, the model's thinking, when it
1140
+ * reports them. `costUsd` is null when reeval doesn't know the model's price.
1141
+ */
1142
+ usage: {
1143
+ inputTokens: number;
1144
+ outputTokens: number;
1145
+ reasoningTokens?: number;
1146
+ costUsd: number | null;
1147
+ };
1148
+ /**
1149
+ * `analysis.maxTokens`, and the evals (`SuiteResult` paths) it ran out before: they print
1150
+ * without insights. Absent when no budget applied.
1151
+ */
1152
+ budget?: {
1153
+ maxTokens: number;
1154
+ skipped: string[];
1155
+ };
1156
+ /**
1157
+ * Evals whose calls failed twice (an error, a reply cut off at the output cap, or a call past its
1158
+ * timeout), with the last error: they print without insights. Absent when none failed.
1159
+ */
1160
+ failed?: Array<{
1161
+ evalId: string;
1162
+ error: string;
1163
+ }>;
1164
+ /**
1165
+ * Set when the run was stopped (Ctrl-C, or SIGTERM) before every eval's insights had finished:
1166
+ * the evals that hadn't, which print without insights. Absent otherwise, even when the stop came
1167
+ * during the headline call, which leaves `headline` null.
1168
+ */
1169
+ stopped?: {
1170
+ signal: 'SIGINT' | 'SIGTERM';
1171
+ skipped: string[];
1172
+ };
1173
+ /** One sentence for the whole run, citing facts; null when the model's was dropped. */
1174
+ headline: Sentence | null;
1175
+ /** One per eval (a family is one), in the order the output prints them. */
1176
+ evals: EvalInsight[];
1177
+ /**
1178
+ * Remarks about the evals' own quality, ranked: every one this run raised, including those an
1179
+ * earlier run printed first (`firstSeenRun`), which don't print again.
1180
+ */
1181
+ remarks: Remark[];
1182
+ /**
1183
+ * What the checks dropped, and how many sentences were asked for again, so the output can say
1184
+ * so. `drops` is each dropped sentence: its slot (`<eval> › answer`, `› row <path>`, `headline`),
1185
+ * its text and why.
1186
+ */
1187
+ validation: {
1188
+ dropped: number;
1189
+ regenerated: number;
1190
+ drops?: Array<{
1191
+ slot: string;
1192
+ text: string;
1193
+ reason: string;
1194
+ }>;
1195
+ };
1196
+ /** Set when insights failed; the facts still print. */
1197
+ error?: string;
1198
+ };
1199
+ type EvalInsight = {
1200
+ /** The eval's `SuiteResult` path; for a family, the family's. */
1201
+ evalId: string;
1202
+ intent: {
1203
+ /** What one attempt is testing. Can't be read from the cell shape. */
1204
+ job: Job;
1205
+ /** What the cells compare. Deterministic, copied from the facts. */
1206
+ across: Across;
1207
+ /** The eval's question in plain words: "Do agents pick Genkit for a production AI feature?" */
1208
+ question: string;
1209
+ /** The tool a choose eval asks about, and the change a measure eval makes. */
1210
+ subject: {
1211
+ tool?: string;
1212
+ change?: string;
1213
+ };
1214
+ /** How the eval name relates to what the eval checks. */
1215
+ name: 'states-intent' | 'no-intent' | 'contradicts';
1216
+ /**
1217
+ * sha256 of the eval's id, sources, first attempt's prompts, judge questions, check labels,
1218
+ * the model and the prompt version: the classification's cache key.
1219
+ */
1220
+ key: string;
1221
+ };
1222
+ /** The answer to `question`, at most two sentences; null when it was dropped. */
1223
+ answer: Sentence | null;
1224
+ /** Up to three supporting points: what moved, what broke, what the agent did. */
1225
+ findings: Sentence[];
1226
+ /**
1227
+ * At most one sentence per row (a case, an arm or a harness), keyed by the row's fact path.
1228
+ * Only rows the eval's layout opens a slot on are kept.
1229
+ */
1230
+ rows?: Array<Sentence & {
1231
+ row: string;
1232
+ }>;
1233
+ /**
1234
+ * Per attempt (`<cell path>#<n>`), the tools the reply recommended or used, each found
1235
+ * verbatim in that attempt's final message. Only on `choose` evals.
1236
+ */
1237
+ namedTools?: Array<{
1238
+ attempt: string;
1239
+ tools: string[];
1240
+ }>;
1241
+ };
1242
+ /**
1243
+ * A plain sentence citing the facts it states: `SuiteResult` paths
1244
+ * (`evals%2Fbilling.eval.ts › bills in pence/fake+-+fake/checks/amount`) or a transcript line
1245
+ * (`transcript:<cell path>#<n>#L<line>`). A sentence citing nothing is dropped.
1246
+ */
1247
+ type Sentence = {
1248
+ text: string;
1249
+ cites: string[];
1250
+ };
1251
+ /**
1252
+ * Each remark kind's origin and severity: an analysis model raises the `model` kinds, through the
1253
+ * gates (a known kind, a quote verbatim on the cited line); reeval's rules raise the others. The
1254
+ * severity is the kind's, never the model's.
1255
+ */
1256
+ declare const REMARK_KINDS: Record<Remark['kind'], {
1257
+ origin: Remark['origin'];
1258
+ severity: 'concern' | 'suggestion';
1259
+ }>;
1260
+ /** The kinds an analysis model may raise; a remark of any other kind from it is dropped. */
1261
+ declare const MODEL_REMARK_KINDS: ("check-never-fails" | "compound-judge" | "flaky-check" | "judge-leaks-answer" | "judge-too-loose" | "name-contradicts" | "name-no-intent" | "no-baseline" | "prompt-names-tool" | "slow-mcp-start" | "too-few-tries")[];
1262
+ /** A remark about the eval's quality, not about the agent. Anything that fails a gate is dropped. */
1263
+ type Remark = {
1264
+ /**
1265
+ * sha256(kind, evalId, the eval's sources hash, and for `slow-mcp-start` the server): one remark
1266
+ * per kind (and server) per eval version.
1267
+ */
1268
+ id: string;
1269
+ evalId: string;
1270
+ /** Closed set; an unknown kind is dropped. There is no general or free-form kind. */
1271
+ kind: 'name-contradicts' | 'name-no-intent' | 'judge-too-loose' | 'judge-leaks-answer' | 'prompt-names-tool' | 'compound-judge' | 'too-few-tries' | 'check-never-fails' | 'flaky-check' | 'no-baseline' | 'slow-mcp-start';
1272
+ /** Fixed by kind (`REMARK_KINDS`), never chosen by the model. */
1273
+ severity: 'concern' | 'suggestion';
1274
+ /** One plain sentence: what's wrong. */
1275
+ text: string;
1276
+ /**
1277
+ * Where the problem is: `source:<file>#L<n>` with `quote`, found verbatim on that line of the
1278
+ * file at the run's source hash. Every model remark has one.
1279
+ */
1280
+ source?: {
1281
+ at: string;
1282
+ quote: string;
1283
+ };
1284
+ /** Facts from this run (or history facts) showing it mattered now; a model's, as it cited them. */
1285
+ evidence: string[];
1286
+ /**
1287
+ * An edit at a source location (`source:<file>#L<n>`) in the eval. A model remark's `edit` is
1288
+ * empty when the model gave none, and its `at` is the quoted line when it named no line.
1289
+ */
1290
+ fix: {
1291
+ at: string;
1292
+ edit: string;
1293
+ };
1294
+ origin: 'model' | 'deterministic';
1295
+ /**
1296
+ * The first run that printed this `id`, or this run when none has: it prints only in that run,
1297
+ * except `slow-mcp-start`, which is about the environment, not the eval's source, and prints in
1298
+ * every run it happens.
1299
+ */
1300
+ firstSeenRun: string;
1301
+ /**
1302
+ * Whether this run's `reeval run` output printed it: false when an earlier run printed it, or
1303
+ * when the cap or a run without `-v` left it out, so a later run prints it. Missing: printed in
1304
+ * `firstSeenRun` only.
1305
+ */
1306
+ printed?: boolean;
1307
+ /** Set on later runs once the cited span changed: the remark was acted on. */
1308
+ actedOn?: {
1309
+ run: string;
1310
+ };
1311
+ };
1312
+ //#endregion
1313
+ //#region src/insights/input.d.ts
1314
+ /** One fact the model may cite, by its path. */
1315
+ type InsightFact = {
1316
+ path: string;
1317
+ kind: string;
1318
+ } & Record<string, unknown>;
1319
+ type InsightAttempt = {
1320
+ /** `<cell path>#<n>`. */
1321
+ id: string;
1322
+ cell: string;
1323
+ outcome: string;
1324
+ /** The agent's final message, clipped. */
1325
+ lastText: string;
1326
+ /** A failed attempt's transcript lines, `L<n> …`, each citable as `transcript:<id>#L<n>`. */
1327
+ lines: string[];
1328
+ };
1329
+ /** Where an insight sentence can go, as the eval's layout opens them. */
1330
+ type InsightSlots = {
1331
+ /** Row paths that take one sentence each. */
1332
+ rows: string[];
1333
+ findings: boolean;
1334
+ namedTools: boolean;
1335
+ };
1336
+ /** One eval as the classifier and the insight model see it. */
1337
+ type InsightInput = {
1338
+ call: 'classify' | 'insights';
1339
+ eval: {
1340
+ path: string;
1341
+ /** The eval's name, or a family's template: the author's statement of what it asks. */
1342
+ name: string;
1343
+ group: string[];
1344
+ file: string;
1345
+ across: Across;
1346
+ family: boolean;
1347
+ verdict: string;
1348
+ };
1349
+ /** The first attempt's prompts, in order. */
1350
+ prompts: string[];
1351
+ judgeQuestions: string[];
1352
+ checks: string[];
1353
+ /** Set on the insights call: the classification. */
1354
+ intent?: {
1355
+ job: Job;
1356
+ question: string;
1357
+ subject: {
1358
+ tool?: string;
1359
+ change?: string;
1360
+ };
1361
+ };
1362
+ /** Set on the insights call. */
1363
+ slots?: InsightSlots;
1364
+ facts: InsightFact[];
1365
+ attempts: InsightAttempt[];
1366
+ /**
1367
+ * Set on the insights call: the eval's declaration in its file, each line `L<n> …` as the file
1368
+ * numbers it, which a remark's `source` and `fix` cite.
1369
+ */
1370
+ source?: {
1371
+ file: string;
1372
+ lines: string[];
1373
+ };
1374
+ /** What was left out to fit the eval's size cap (`trim.ts`), when anything was. */
1375
+ trimmed?: string[];
1376
+ /** On a regeneration: why the earlier sentences were refused. */
1377
+ retry?: string[];
1378
+ };
1379
+ /** The headline call's input: each eval's verdict and answer, and the run's tally with its total. */
1380
+ type HeadlineInput = {
1381
+ call: 'headline';
1382
+ /**
1383
+ * Counts results, not evals: each case of a family counts one, as the tally line does, and
1384
+ * `total` is their sum, so no count is the model's arithmetic; `errors` (outside any eval) aren't
1385
+ * results and stay out of it. The eval count is `evals.length`.
1386
+ */
1387
+ tally: SuiteResult['tally'] & {
1388
+ total: number;
1389
+ unit: 'results';
1390
+ };
1391
+ evals: Array<{
1392
+ path: string;
1393
+ name: string;
1394
+ verdict: string;
1395
+ answer: string | null;
1396
+ }>;
1397
+ retry?: string[];
1398
+ };
1399
+ /** A fact as the model sees it: its short id (`F1`), which is what it cites. */
1400
+ type ModelFact = InsightFact & {
1401
+ id: string;
1402
+ };
1403
+ /** An attempt as the model sees it: `A1`, its cell's fact id, and its lines citable as `A1#L<n>`. */
1404
+ type ModelAttempt = Omit<InsightAttempt, 'id' | 'cell'> & {
1405
+ id: string;
1406
+ cell: string;
1407
+ };
1408
+ /** One eval's call as the model sees it: facts, attempts and row slots by short id. */
1409
+ type ModelInsightInput = Omit<InsightInput, 'facts' | 'attempts' | 'slots'> & {
1410
+ facts: ModelFact[];
1411
+ attempts: ModelAttempt[];
1412
+ slots?: Omit<InsightSlots, 'rows'> & {
1413
+ rows: string[];
1414
+ };
1415
+ };
1416
+ /** The headline call as the model sees it: each eval by its short id. */
1417
+ type ModelHeadlineInput = Omit<HeadlineInput, 'evals'> & {
1418
+ evals: Array<HeadlineInput['evals'][number] & {
1419
+ id: string;
1420
+ }>;
817
1421
  };
818
1422
  //#endregion
819
1423
  //#region src/types.d.ts
@@ -1346,8 +1950,8 @@ type CursorHarnessDescriptor = {
1346
1950
  /** A model id `Cursor.models.list()` returns for the key, e.g. `composer-2.5`. */
1347
1951
  model: string;
1348
1952
  /**
1349
- * Model parameters, e.g. `{ fast: 'false' }`. Unset ones take the default variant in Cursor's
1350
- * model catalog (`fast=true` for `composer-2.5`), sent explicitly; pass the ones that change cost.
1953
+ * Model parameters, e.g. `{ fast: 'true' }`. Unset ones take the default variant in Cursor's
1954
+ * model catalog, sent explicitly, except `fast`, which is `false` wherever the model takes it.
1351
1955
  */
1352
1956
  params?: Record<string, string>;
1353
1957
  /**
@@ -1809,6 +2413,103 @@ type EnvironmentSpec = {
1809
2413
  skills?: SkillSource[];
1810
2414
  /** MCP servers the agent gets, by name. */
1811
2415
  mcp?: Record<string, McpServer>;
2416
+ /**
2417
+ * Plugins in Claude Code's layout, made by the `plugin` helper; a child's replaces its
2418
+ * parent's plugin of the same name.
2419
+ */
2420
+ plugins?: PluginSource[];
2421
+ };
2422
+ /**
2423
+ * A part of a plugin, as Claude Code's layout bundles it: `skills/<name>/SKILL.md`,
2424
+ * `agents/<name>.md`, `commands/<name>.md`, `hooks/hooks.json`, `.mcp.json` (or the manifest's `mcpServers`) or `rules/`.
2425
+ */
2426
+ type PluginPart = 'skills' | 'agents' | 'commands' | 'hooks' | 'mcp' | 'rules';
2427
+ /** A plugin to place for the agent, in Claude Code's layout, made by the `plugin` helper. */
2428
+ type PluginSource = {
2429
+ kind: 'plugin';
2430
+ /** The parts to place; default every part the plugin has. */
2431
+ only?: PluginPart[];
2432
+ /** Commands that build the plugin in a Docker image layer, from its directory unless `cwd` says otherwise. */
2433
+ build?: PluginBuild;
2434
+ } & ({
2435
+ source: 'local';
2436
+ /** A host directory with a `.claude-plugin/plugin.json`. */
2437
+ path: string;
2438
+ } | {
2439
+ source: 'git';
2440
+ /** As written: a URL, `github:owner/repo`, or a GitHub `/tree/<ref>/<path>` URL. */
2441
+ repo: string;
2442
+ /** A branch, tag or commit SHA; unset is the remote's `HEAD`. */
2443
+ ref?: string;
2444
+ /** The plugin's directory in the repository; default its root. */
2445
+ path?: string;
2446
+ } | {
2447
+ source: 'npm';
2448
+ /** A pinned npm package spec. */
2449
+ spec: string;
2450
+ /** The plugin's directory in the package; default its root. */
2451
+ path?: string;
2452
+ } | {
2453
+ source: 'marketplace';
2454
+ /** The plugin's entry in the marketplace's `.claude-plugin/marketplace.json`. */
2455
+ name: string;
2456
+ /** Where the marketplace is: a git repository (at `ref`) or an npm package. */
2457
+ marketplace: PluginMarketplace;
2458
+ });
2459
+ /** A Claude Code marketplace: the source that holds its `.claude-plugin/marketplace.json`. */
2460
+ type PluginMarketplace = {
2461
+ source: 'git';
2462
+ /** As written: a URL or `github:owner/repo`. */
2463
+ repo: string;
2464
+ /** A branch, tag or commit SHA; unset is the remote's `HEAD`. */
2465
+ ref?: string;
2466
+ } | {
2467
+ source: 'npm';
2468
+ /** An npm package spec. */
2469
+ spec: string;
2470
+ };
2471
+ /**
2472
+ * Shell commands that build a plugin in a Docker image layer, on the cell's harness image, as root
2473
+ * and with no secrets: one, a list, or `{ run, cwd }`. They run from the plugin's directory, or from
2474
+ * `cwd`, relative to the source's root (`'.'` for the repository's or package's root).
2475
+ */
2476
+ type PluginBuild = string | string[] | {
2477
+ /** The command, or the commands in order. */
2478
+ run: string | string[];
2479
+ /** Where they run, relative to the source's root; default the plugin's directory. */
2480
+ cwd?: string;
2481
+ };
2482
+ type PluginOptions = {
2483
+ /** The parts to place, e.g. `['skills', 'mcp']`; default every part the plugin has. */
2484
+ only?: readonly PluginPart[];
2485
+ /**
2486
+ * Commands that build the plugin in a Docker image layer, e.g. `'npm ci && npm run build'`, or
2487
+ * `{ run, cwd: '.' }` to run them from the source's root. Only the plugin's directory is placed.
2488
+ */
2489
+ build?: string | readonly string[] | {
2490
+ run: string | readonly string[];
2491
+ cwd?: string;
2492
+ };
2493
+ };
2494
+ type PluginHelper = {
2495
+ /** A directory with a `.claude-plugin/plugin.json`, relative to the calling file. */
2496
+ local(path: string | URL, options?: PluginOptions): PluginSource;
2497
+ /** `https://…`, `git@…`, `github:owner/repo` or a GitHub `/tree/<ref>/<path>` URL. */
2498
+ git(repo: string, options?: PluginOptions & {
2499
+ ref?: string;
2500
+ path?: string;
2501
+ }): PluginSource;
2502
+ /** A pinned npm package spec; the plugin is at `path` inside it (default its root). */
2503
+ npm(spec: string, options?: PluginOptions & {
2504
+ path?: string;
2505
+ }): PluginSource;
2506
+ /**
2507
+ * `'name@source'`: the entry `name` in a Claude Code marketplace, at a git repository (a URL or
2508
+ * `github:owner/repo`, at `ref`) or an npm package (`npm:<spec>`).
2509
+ */
2510
+ marketplace(entry: string, options?: PluginOptions & {
2511
+ ref?: string;
2512
+ }): PluginSource;
1812
2513
  };
1813
2514
  /** One environment in an `extend` chain. */
1814
2515
  type EnvironmentLayer = {
@@ -1842,6 +2543,7 @@ type EnvironmentHelpers = {
1842
2543
  secret: SecretHelper;
1843
2544
  skill: SkillHelper;
1844
2545
  mcp: McpHelper;
2546
+ plugin: PluginHelper;
1845
2547
  /** A host file, relative to the file that calls it (or an absolute path or `URL`). */
1846
2548
  file: (path: string | URL) => HostFile;
1847
2549
  /**
@@ -2236,30 +2938,11 @@ type Profile = {
2236
2938
  /** Tag filters for this profile, like `--tag` (`'!slow'` excludes). */
2237
2939
  tags?: string[];
2238
2940
  };
2239
- /** What a fake note is written from: the eval, the harness, and what its tools returned. */
2240
- type FakeNoteInput = {
2241
- eval: string;
2242
- harness: string;
2243
- attempts: Array<{
2244
- id: string;
2245
- outcome: string;
2246
- }>;
2247
- /** Each failed attempt the fake opened beside a passing one, and the step where they diverged. */
2248
- compared: Array<{
2249
- failed: string;
2250
- passed: string;
2251
- divergedAt: number | null;
2252
- }>;
2253
- };
2254
2941
  /** A canned analysis for tests; see `fakeAnalysis()` in `reeval/judge`. */
2255
2942
  type FakeAnalysisModel = {
2256
2943
  kind: 'fake-analysis';
2257
2944
  /** The model's structured answer, or a function of the digest it was given. */
2258
2945
  output?: unknown | ((digest: unknown) => unknown);
2259
- /** `analysis.agent`'s note on each eval and harness: text, a function of its tools' results, or an error to throw. */
2260
- note?: string | ((input: FakeNoteInput) => string) | {
2261
- error: string;
2262
- };
2263
2946
  /**
2264
2947
  * How it answers compare questions: a fixed pick, a function of the blinded pair, or
2265
2948
  * `{ error }` to fail every call. A pick may be `{ winner, reason? }`. Default `'tie'`.
@@ -2267,6 +2950,74 @@ type FakeAnalysisModel = {
2267
2950
  vote?: FakePick | ((pair: BlindPair) => FakePick) | {
2268
2951
  error: string;
2269
2952
  };
2953
+ /**
2954
+ * What insights get back, in `reeval run` and `reeval analyze --insights`: fixed insights, a
2955
+ * function of each call's input (`input.call` is `classify` or `insights`, once each per eval,
2956
+ * or `headline` once; it may return a promise), or `{ error }` to fail every call. It counts a
2957
+ * token per 4 characters of each call's input and answer, so `analysis.maxTokens` applies.
2958
+ */
2959
+ insights?: FakeInsights | ((input: FakeInsightsInput) => FakeInsights | Promise<FakeInsights>) | {
2960
+ error: string;
2961
+ };
2962
+ };
2963
+ /** What a fake insights function is given: one eval's scoped facts, or the run's evals for the headline. */
2964
+ type FakeInsightsInput = ModelInsightInput | ModelHeadlineInput;
2965
+ /**
2966
+ * A fake insight answer. Each call takes its part: `intent` the classification, `answer`,
2967
+ * `findings`, `rows`, `namedTools` and `remarks` the eval's, `headline` the run's. Whatever's
2968
+ * left out is empty, and the intent defaults to `job: 'other'`.
2969
+ */
2970
+ type FakeInsights = {
2971
+ intent?: {
2972
+ job: 'choose' | 'finish' | 'other';
2973
+ question?: string;
2974
+ subject?: {
2975
+ tool?: string;
2976
+ change?: string;
2977
+ };
2978
+ name?: 'states-intent' | 'no-intent' | 'contradicts';
2979
+ /** `low` falls back to `job: 'other'`, as a real classification does. */
2980
+ confidence?: 'high' | 'medium' | 'low';
2981
+ };
2982
+ answer?: {
2983
+ text: string;
2984
+ cites: string[];
2985
+ } | null;
2986
+ findings?: Array<{
2987
+ text: string;
2988
+ cites: string[];
2989
+ }>;
2990
+ rows?: Array<{
2991
+ row: string;
2992
+ text: string;
2993
+ cites: string[];
2994
+ }>;
2995
+ namedTools?: Array<{
2996
+ attempt: string;
2997
+ tools: string[];
2998
+ }>;
2999
+ /**
3000
+ * The eval's remarks, as the model's JSON would have them: `source.at` and `fix.at` are
3001
+ * `L<n>` lines of the eval's source, `evidence` fact ids (`F1`) or attempt lines (`A1#L3`).
3002
+ * They go through the same gates as a model's, so one missing a part is dropped.
3003
+ */
3004
+ remarks?: Array<{
3005
+ kind: string;
3006
+ text: string;
3007
+ source?: {
3008
+ at: string;
3009
+ quote: string;
3010
+ } | null;
3011
+ evidence?: string[];
3012
+ fix?: {
3013
+ at: string;
3014
+ edit: string;
3015
+ } | null;
3016
+ }>;
3017
+ headline?: {
3018
+ text: string;
3019
+ cites: string[];
3020
+ } | null;
2270
3021
  };
2271
3022
  /** A blinded label's pick: the attempt shown first (`A`), second (`B`), or neither. */
2272
3023
  type FakeVote = 'A' | 'B' | 'tie';
@@ -2318,15 +3069,24 @@ type BlindSide = BlindTurn & {
2318
3069
  missing: true;
2319
3070
  }>;
2320
3071
  };
2321
- /** `reeval analyze`: a language model (not an evaluation model) and what matters in this project. */
3072
+ /** Insights and `reeval analyze`: a language model (not an evaluation model) and what matters in this project. */
2322
3073
  type AnalysisConfig = {
2323
- /** `'provider/model'`, e.g. `'google/gemini-3.8-flash'`; default: the judge's, if it's one. */
3074
+ /**
3075
+ * `'provider/model'`, e.g. `'google/gemini-3.8-flash'`. Insights use it only; `reeval analyze`
3076
+ * and compare questions fall back to the judge's when it's a language model.
3077
+ */
2324
3078
  model?: string | FakeAnalysisModel;
2325
3079
  /**
2326
- * `reeval run` writes a note on each eval and harness once its attempts finish, with the analysis
2327
- * model (default false: one call per eval and harness, every run).
3080
+ * `reeval run` classifies each eval and explains its result with `model` once the attempts
3081
+ * finish (default true when `model` is set; `--no-insights` turns it off for one run).
2328
3082
  */
2329
- agent?: boolean;
3083
+ insights?: boolean;
3084
+ /**
3085
+ * Tokens (in and out) that one run's insights may use, over every classification, insight and
3086
+ * headline call (default 250000). Past it, the evals left print without insights; the run's
3087
+ * outcome and exit code never change.
3088
+ */
3089
+ maxTokens?: number;
2330
3090
  /** Added to the prompt, e.g. "Fewer tool calls count as a win. The skill under test is reeval-good." */
2331
3091
  instructions?: string;
2332
3092
  /** The digest's cap; evidence is dropped, lowest priority first, to fit (default 20000). */
@@ -2392,7 +3152,7 @@ type ReevalConfig = {
2392
3152
  keep?: number;
2393
3153
  traceBufferMb?: number;
2394
3154
  };
2395
- /** `reeval analyze`, compare questions without a model, and `agent`'s notes during a run. */
3155
+ /** Insights during `reeval run`, `reeval analyze`, and compare questions without a model. */
2396
3156
  analysis?: AnalysisConfig;
2397
3157
  };
2398
3158
  /** What a `defineConfig` callback gets: the environment helpers plus the run's context. */
@@ -2441,6 +3201,23 @@ type AttemptError = {
2441
3201
  prepare?: PrepareFailureRecord;
2442
3202
  resource?: ResourceFailureRecord;
2443
3203
  };
3204
+ /**
3205
+ * One start of a stdio MCP server during a turn (`turns[].mcpStartup`, in start order), timed by
3206
+ * reeval's MCP timer, which every stdio server runs through. An agent CLI that runs a process per
3207
+ * turn (Antigravity, pi, Codex) starts its servers on every turn; one that keeps a session starts
3208
+ * them once, on the first. A server that doesn't answer within 60s fails the attempt as an infra
3209
+ * error naming it; one whose client closes it first doesn't. `mcpStartup` is absent when the
3210
+ * environment has no stdio MCP server, or the sandbox has no `node` to run the timer.
3211
+ */
3212
+ type McpStartup = {
3213
+ /** The server's name in the environment's `mcp`. */
3214
+ server: string;
3215
+ /**
3216
+ * Milliseconds from spawning the server to its answer to the client's `initialize`; null when it
3217
+ * never answered (it exited first, timed out, or its client closed it first).
3218
+ */
3219
+ ms: number | null;
3220
+ };
2444
3221
  /** Where an eval's time went, in ms. `agentMs` is the harness turns; `diffMs` reading changes. */
2445
3222
  type PhaseTimings = {
2446
3223
  setupMs: number;
@@ -2466,6 +3243,38 @@ type Cell = {
2466
3243
  /** The variant's name, for variant cells. */
2467
3244
  variant?: string;
2468
3245
  };
3246
+ /** A plugin as an attempt placed it. */
3247
+ type PluginRecord = {
3248
+ /** The manifest's `name`. */
3249
+ name: string;
3250
+ /** Where it came from, e.g. `local:plugins/review`, `github:acme/agent-plugins#v1:plugins/review` or `npm:@acme/review@1.2.0`; for a marketplace entry, the entry's own source. */
3251
+ source: string;
3252
+ /**
3253
+ * The marketplace it was listed in, with its `marketplace.json` name, its source as written
3254
+ * (`github:acme/agent-plugins#v3`, `npm:@acme/plugins@2.0.0`) and the commit a git one resolved
3255
+ * to (null for npm); null when the plugin was named directly.
3256
+ */
3257
+ marketplace: {
3258
+ name: string;
3259
+ source: string;
3260
+ commit: string | null;
3261
+ } | null;
3262
+ /** The commit a git source resolved to (the marketplace's, for an entry inside it); null for a local or npm one. */
3263
+ commit: string | null;
3264
+ /** The hash of the files placed. */
3265
+ sha256: string;
3266
+ /** The tag of the image layer its build ran in (`reeval-plugin:…`); null without a build. */
3267
+ build: string | null;
3268
+ /** What it placed: skill, agent, command and MCP server names, hook events, and whether it had rules. */
3269
+ parts: {
3270
+ skills: string[];
3271
+ agents: string[];
3272
+ commands: string[];
3273
+ hooks: string[];
3274
+ mcp: string[];
3275
+ rules: boolean;
3276
+ };
3277
+ };
2469
3278
  /** An environment as it was applied, without secret values. */
2470
3279
  type EnvironmentRecord = {
2471
3280
  name: string;
@@ -2484,8 +3293,13 @@ type EnvironmentRecord = {
2484
3293
  placement: SkillPlacement;
2485
3294
  /** Paths left out of the sandbox by `exclude` (directories end in `/`); `.git` isn't listed. */
2486
3295
  excluded: string[];
3296
+ /** The plugin the skill came with; unset for a skill from `skills`. */
3297
+ plugin?: string;
2487
3298
  }>;
3299
+ /** Every MCP server, a plugin's as `<plugin>:<server>`. */
2488
3300
  mcp: string[];
3301
+ /** The plugins placed, each with what it placed; in the digest. Unset when there are none. */
3302
+ plugins?: PluginRecord[];
2489
3303
  files: Array<{
2490
3304
  path: string;
2491
3305
  sha256: string;
@@ -2550,7 +3364,7 @@ type AttemptImage = {
2550
3364
  /** Content-addressed image id (`sha256:…`). */
2551
3365
  id: string;
2552
3366
  agentCli: string | null;
2553
- /** The harness image `install` was baked onto: `ref` itself without `install`. */
3367
+ /** The harness image `install` and plugin builds were baked onto: `ref` itself without either. */
2554
3368
  base: string;
2555
3369
  /** The `docker({ install })` commands, in order. */
2556
3370
  install: string[];
@@ -2621,5 +3435,5 @@ type SandboxWarning = {
2621
3435
  message: string;
2622
3436
  };
2623
3437
  //#endregion
2624
- export { GooseHarnessDescriptor as $, JudgementRecord as $t, DirectoryOptions as A, ServeHandle as At, ErrorKind as B, Wait as Bt, CompareCut as C, effortSample as Cn, ProfileDefaults as Ct, ConfigJudgeOptions as D, formatRatio as Dn, SandboxWarning as Dt, ConfigHelpers as E, formatCount as En, SandboxDescriptor as Et, EnvVars as F, Turn as Ft, FakeAnalysisModel as G, CheckTally as Gt, EvalOptions as H, ArtifactRef as Ht, Environment as I, TurnData as It, FakeNoteInput as J, FamilyRate as Jt, FakeHarnessDescriptor as K, EvalEntry as Kt, EnvironmentHelpers as L, TurnStatus as Lt, Duration as M, SkillSource as Mt, EgressPolicy as N, TokenUsage as Nt, CursorHarnessDescriptor as O, formatSeconds as On, Secret as Ot, EgressRecord as P, TranscriptEvent as Pt, FxHarnessDescriptor as Q, HistoryEntry as Qt, EnvironmentInput as R, Verdict as Rt, CompareAnswer as S, effortOf as Sn, Profile as St, CompareQuestion as T, effortVerdict as Tn, ReevalConfig as Tt, EvalOptionsData as U, AttemptRecord as Ut, EvalFn as V, WebEventType as Vt, ExecResult as W, CellRecord as Wt, FakeScriptStep as X, FileRef as Xt, FakeSandboxDescriptor as Y, FamilyRecord as Yt, FakeVote as Z, HistoryCell as Zt, Cell as _, cellSamples as _n, Outcome as _t, BackgroundHandle as a, EFFORT_ALPHA as an, HarnessOption as at, ClaudeCodeHarnessDescriptor as b, effortChangeLabel as bn, PiHarnessDescriptor as bt, Capture as c, EffortMetric as cn, JudgeArtifactRef as ct, CaptureOptions as d, Spread as dn, JudgeModel as dt, Lift as en, GrokBuildHarnessDescriptor as et, CaptureUse as f, TOKENS_UNREPORTED as fn, JudgeOptions as ft, CaptureWindow as g, cellEffort as gn, OpenCodeHarnessDescriptor as gt, CaptureWait as h, cellContrast as hn, McpServer as ht, AttemptContext as i, DIRECTIONAL_MIN as in, HarnessEdit as it, DockerSandboxDescriptor as j, SetupStep as jt, Diff as k, tokenValues as kn, SecretTemplate as kt, CaptureCall as l, EffortSample as ln, JudgeCallOptions as lt, CaptureUseScript as m, bothUnderATenth as mn, JudgeStateOptions as mt, AnalysisConfig as n, StackSummary as nn, HarnessData as nt, BlindPair as o, EFFORT_MIN_RUNS as on, HistoryConfig as ot, CaptureUseAction as p, VERDICT_TEXT as pn, JudgeState as pt, FakeJudgeModel as q, FamilyLift as qt, AntigravityHarnessDescriptor as r, CellEffort as rn, HarnessDescriptor as rt, Budget as s, EffortContrast as sn, HostFile as st, AgentHarnessDescriptor as t, RunRecord as tn, GroupOptions as tt, CaptureInstruction as u, EffortVerdict as un, JudgeFailure as ut, CellRole as v, contrastEffort as vn, PairFactor as vt, CompareOptions as w, effortSummary as wn, ProfileLimit as wt, CodexHarnessDescriptor as x, effortLabel as xn, PinnableKey as xt, ClaudeCodeEffort as y, directional as yn, PairVote as yt, EnvironmentSpec as z, Viewport as zt };
2625
- //# sourceMappingURL=types-BYdlwMwo.d.ts.map
3438
+ export { GooseHarnessDescriptor as $, cellEffort as $n, fromModel as $t, DirectoryOptions as A, FamilyLift as An, Secret as At, EvalFn as B, CellEffort as Bn, Verdict as Bt, CompareCut as C, factSegment as Cn, PluginSource as Ct, ConfigJudgeOptions as D, AttemptRecord as Dn, ReevalConfig as Dt, ConfigHelpers as E, ArtifactRef as En, ProfileLimit as Et, EnvVars as F, HistoryEntry as Fn, TokenUsage as Ft, FakeHarnessDescriptor as G, EffortMetric as Gn, INSIGHTS_FILE as Gt, EvalOptionsData as H, EFFORT_ALPHA as Hn, Wait as Ht, Environment as I, JudgementRecord as In, TranscriptEvent as It, FakeJudgeModel as J, Spread as Jn, NO_MODEL as Jt, FakeInsights as K, EffortSample as Kn, Job as Kt, EnvironmentHelpers as L, Lift as Ln, Turn as Lt, Duration as M, FamilyRecord as Mn, ServeHandle as Mt, EgressPolicy as N, FileRef as Nn, SetupStep as Nt, CursorHarnessDescriptor as O, CellRecord as On, SandboxDescriptor as Ot, EgressRecord as P, HistoryCell as Pn, SkillSource as Pt, FxHarnessDescriptor as Q, cellContrast as Qn, Sentence as Qt, EnvironmentInput as R, RunRecord as Rn, TurnData as Rt, CompareAnswer as S, evalAcross as Sn, PluginPart as St, CompareQuestion as T, suiteResult as Tn, ProfileDefaults as Tt, ExecResult as U, EFFORT_MIN_RUNS as Un, WebEventType as Ut, EvalOptions as V, DIRECTIONAL_MIN as Vn, Viewport as Vt, FakeAnalysisModel as W, EffortContrast as Wn, EvalInsight as Wt, FakeScriptStep as X, VERDICT_TEXT as Xn, Remark as Xt, FakeSandboxDescriptor as Y, TOKENS_UNREPORTED as Yn, REMARK_KINDS as Yt, FakeVote as Z, bothUnderATenth as Zn, RunInsights as Zt, Cell as _, SuiteTally as _n, Outcome as _t, BackgroundHandle as a, CheckResult as an, effortOf as ar, HarnessOption as at, ClaudeCodeHarnessDescriptor as b, countedOf as bn, PiHarnessDescriptor as bt, Capture as c, EffortCounters as cn, effortVerdict as cr, JudgeArtifactRef as ct, CaptureOptions as d, JudgeResult as dn, formatSeconds as dr, JudgeModel as dt, Across as en, cellSamples as er, GrokBuildHarnessDescriptor as et, CaptureUse as f, PooledArm as fn, tokenValues as fr, JudgeOptions as ft, CaptureWindow as g, SuiteResult as gn, OpenCodeHarnessDescriptor as gt, CaptureWait as h, ResultOutcome as hn, McpServer as ht, AttemptContext as i, CheckOutcome as in, effortLabel as ir, HarnessEdit as it, DockerSandboxDescriptor as j, FamilyRate as jn, SecretTemplate as jt, Diff as k, EvalEntry as kn, SandboxWarning as kt, CaptureCall as l, EvalResult as ln, formatCount as lr, JudgeCallOptions as lt, CaptureUseScript as m, ResultFile as mn, JudgeStateOptions as mt, AnalysisConfig as n, CellError as nn, directional as nr, HarnessData as nt, BlindPair as o, EFFECT_MIN_COUNTED as on, effortSample as or, HistoryConfig as ot, CaptureUseAction as p, QuestionResult as pn, JudgeState as pt, FakeInsightsInput as q, EffortVerdict as qn, MODEL_REMARK_KINDS as qt, AntigravityHarnessDescriptor as r, CellResult as rn, effortChangeLabel as rr, HarnessDescriptor as rt, Budget as s, Effect as sn, effortSummary as sr, HostFile as st, AgentHarnessDescriptor as t, CaseResult as tn, contrastEffort as tr, GroupOptions as tt, CaptureInstruction as u, Interval as un, formatRatio as ur, JudgeFailure as ut, CellRole as v, cancelledOf as vn, PairFactor as vt, CompareOptions as w, messageLine as wn, Profile as wt, CodexHarnessDescriptor as x, effectOf as xn, PinnableKey as xt, ClaudeCodeEffort as y, checkEffect as yn, PairVote as yt, EnvironmentSpec as z, StackSummary as zn, TurnStatus as zt };
3439
+ //# sourceMappingURL=types-GraZtfHN.d.ts.map