reeval 0.7.0 → 0.9.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 (233) hide show
  1. package/README.md +12 -12
  2. package/dist/{agent-Dhd5FJCZ.js → agent-6FefIhX7.js} +6 -6
  3. package/dist/{agent-Dhd5FJCZ.js.map → agent-6FefIhX7.js.map} +1 -1
  4. package/dist/{agent-gjBiZis8.js → agent-WSmTaesf.js} +52 -17
  5. package/dist/agent-WSmTaesf.js.map +1 -0
  6. package/dist/{analysis-BV3TCznv.js → analysis-DlGBDjTj.js} +4 -4
  7. package/dist/{analysis-BV3TCznv.js.map → analysis-DlGBDjTj.js.map} +1 -1
  8. package/dist/{assemble-Dd_mZYnu.js → assemble-BCZzTyR7.js} +259 -18
  9. package/dist/assemble-BCZzTyR7.js.map +1 -0
  10. package/dist/assemble-C5qq5yT2.js +2 -0
  11. package/dist/capture-Bp74Z6Fr.js +1257 -0
  12. package/dist/capture-Bp74Z6Fr.js.map +1 -0
  13. package/dist/capture-DS-cPyuE.js +2 -0
  14. package/dist/{cli-r9CDqoFL.js → cli-CVrMh_qz.js} +210 -112
  15. package/dist/cli-CVrMh_qz.js.map +1 -0
  16. package/dist/{cli-spec-DOyxAMc2.js → cli-spec-CKEYa8V2.js} +6 -5
  17. package/dist/cli-spec-CKEYa8V2.js.map +1 -0
  18. package/dist/cli.js +2 -2
  19. package/dist/{client-LsfDiD-X.js → client-Bbo9SPlK.js} +31 -201
  20. package/dist/client-Bbo9SPlK.js.map +1 -0
  21. package/dist/{command-l4ZFCeMh.js → command-BFP0hKEb.js} +7 -7
  22. package/dist/{command-l4ZFCeMh.js.map → command-BFP0hKEb.js.map} +1 -1
  23. package/dist/command-BrmXUC-W.js +2 -0
  24. package/dist/{command-DMR69l5G.js → command-C5xFPKHM.js} +21 -20
  25. package/dist/command-C5xFPKHM.js.map +1 -0
  26. package/dist/{command-Cej2t3y-.js → command-CzIFp1JQ.js} +10 -10
  27. package/dist/{command-Cej2t3y-.js.map → command-CzIFp1JQ.js.map} +1 -1
  28. package/dist/{command-D6r2pwO5.js → command-DUT5l13I.js} +221 -54
  29. package/dist/command-DUT5l13I.js.map +1 -0
  30. package/dist/{commands-BA_NCh2h.js → commands-CLmPBrTS.js} +6 -6
  31. package/dist/{commands-BA_NCh2h.js.map → commands-CLmPBrTS.js.map} +1 -1
  32. package/dist/{commands-DgOUkcSO.js → commands-fI3G2Wnh.js} +1 -1
  33. package/dist/{config-DuQDCx0B.js → config-CGvBeewH.js} +18 -8
  34. package/dist/config-CGvBeewH.js.map +1 -0
  35. package/dist/{context-CvUv7DUb.js → context-DbSMEVKs.js} +1 -5
  36. package/dist/{context-CvUv7DUb.js.map → context-DbSMEVKs.js.map} +1 -1
  37. package/dist/{db-o_osRkqr.js → db-CSSFtGcN.js} +1 -1
  38. package/dist/{db-CjX7JF4o.js → db-CfQFwJtq.js} +209 -40
  39. package/dist/db-CfQFwJtq.js.map +1 -0
  40. package/dist/{docker-DaUaG4XZ.js → docker-CRQGQbIt.js} +17 -5
  41. package/dist/docker-CRQGQbIt.js.map +1 -0
  42. package/dist/{docker-ZaYeKE2w.js → docker-DV2GNgle.js} +2 -2
  43. package/dist/{docker-ZaYeKE2w.js.map → docker-DV2GNgle.js.map} +1 -1
  44. package/dist/{docker-Dnya8eo9.js → docker-Df_YOxxB.js} +1 -1
  45. package/dist/{doctor-Bk6aJeec.js → doctor-DlKycx5H.js} +13 -13
  46. package/dist/{doctor-Bk6aJeec.js.map → doctor-DlKycx5H.js.map} +1 -1
  47. package/dist/{egress-BKbyriEa.js → egress-BhzNh7Yi.js} +18 -10
  48. package/dist/egress-BhzNh7Yi.js.map +1 -0
  49. package/dist/{environment-DiCljXMD.js → environment-1jE-HhO-.js} +2 -2
  50. package/dist/{environment-DiCljXMD.js.map → environment-1jE-HhO-.js.map} +1 -1
  51. package/dist/fake-instructions-CUI33I_F.js +32 -0
  52. package/dist/fake-instructions-CUI33I_F.js.map +1 -0
  53. package/dist/family-D2b7WD10.js +67 -0
  54. package/dist/family-D2b7WD10.js.map +1 -0
  55. package/dist/files-AiEKuEZe.js +2 -0
  56. package/dist/files-BMCvfB4X.js +2 -0
  57. package/dist/{files-TNrZJQ3Y.js → files-CSzVADHn.js} +5 -5
  58. package/dist/{files-TNrZJQ3Y.js.map → files-CSzVADHn.js.map} +1 -1
  59. package/dist/{files-BSMSnQMa.js → files-DJUFg-4e.js} +3 -3
  60. package/dist/{files-BSMSnQMa.js.map → files-DJUFg-4e.js.map} +1 -1
  61. package/dist/{git-DNGtrOg9.js → git-DfG-YJ1u.js} +2 -2
  62. package/dist/{git-DNGtrOg9.js.map → git-DfG-YJ1u.js.map} +1 -1
  63. package/dist/{harness-CDRaaGvR.js → harness-CeCp2GSW.js} +52 -12
  64. package/dist/harness-CeCp2GSW.js.map +1 -0
  65. package/dist/harness.d.ts +26 -13
  66. package/dist/harness.js +1 -1
  67. package/dist/{header-BZF8Xss1.js → header-CALhmafp.js} +10 -3
  68. package/dist/{header-BZF8Xss1.js.map → header-CALhmafp.js.map} +1 -1
  69. package/dist/{images-BpwFDT1E.js → images-BMgdpMAX.js} +6 -6
  70. package/dist/{images-BpwFDT1E.js.map → images-BMgdpMAX.js.map} +1 -1
  71. package/dist/index.d.ts +17 -5
  72. package/dist/index.js +165 -67
  73. package/dist/index.js.map +1 -1
  74. package/dist/init-B6vegaP_.js +2 -0
  75. package/dist/{init-CBWt1rZT.js → init-BIdLF0F9.js} +4 -4
  76. package/dist/{init-CBWt1rZT.js.map → init-BIdLF0F9.js.map} +1 -1
  77. package/dist/{invocations-DArYWyXN.js → invocations-CLaL8AuW.js} +3 -3
  78. package/dist/{invocations-DArYWyXN.js.map → invocations-CLaL8AuW.js.map} +1 -1
  79. package/dist/{judge-7WjNdU9z.js → judge-CeYPN8P_.js} +2 -2
  80. package/dist/{judge-7WjNdU9z.js.map → judge-CeYPN8P_.js.map} +1 -1
  81. package/dist/judge.d.ts +5 -4
  82. package/dist/judge.js +4 -3
  83. package/dist/judge.js.map +1 -1
  84. package/dist/{live-DZkCtmNP.js → live-S0qODb6o.js} +2 -2
  85. package/dist/{live-DZkCtmNP.js.map → live-S0qODb6o.js.map} +1 -1
  86. package/dist/{model-Cp6NoAT3.js → model-B1BZoZ9b.js} +9 -8
  87. package/dist/model-B1BZoZ9b.js.map +1 -0
  88. package/dist/{model-DyQbu7KF.js → model-BOnlAPzs.js} +288 -38
  89. package/dist/model-BOnlAPzs.js.map +1 -0
  90. package/dist/{model-Bv8uUZ07.js → model-DEQo3FkZ.js} +6 -6
  91. package/dist/model-DEQo3FkZ.js.map +1 -0
  92. package/dist/model-DWeg5J7z.js +2 -0
  93. package/dist/{model-BeoRxCcJ.js → model-FXko2kl7.js} +1 -1
  94. package/dist/{options-Ge_x32XE.js → options-CKqyPGxX.js} +161 -34
  95. package/dist/options-CKqyPGxX.js.map +1 -0
  96. package/dist/pairs-DDsjgm5F.js +149 -0
  97. package/dist/pairs-DDsjgm5F.js.map +1 -0
  98. package/dist/{patch-CGCVipPu.js → patch-bDV8YFW0.js} +2 -2
  99. package/dist/{patch-CGCVipPu.js.map → patch-bDV8YFW0.js.map} +1 -1
  100. package/dist/{plan-BqBadHYj.js → plan-DUydFc_1.js} +69 -31
  101. package/dist/plan-DUydFc_1.js.map +1 -0
  102. package/dist/{preflight-CyaAZE9r.js → preflight-BkoSxf4C.js} +3 -3
  103. package/dist/{preflight-CyaAZE9r.js.map → preflight-BkoSxf4C.js.map} +1 -1
  104. package/dist/{preflight-CFtZNTLt.js → preflight-D5LW7Oqi.js} +1 -1
  105. package/dist/{prepare-Zr1xOMUX.js → prepare-CUAWHebF.js} +5 -5
  106. package/dist/{prepare-Zr1xOMUX.js.map → prepare-CUAWHebF.js.map} +1 -1
  107. package/dist/{prepare-Dl7-t3fO.js → prepare-oji2oO8W.js} +2 -2
  108. package/dist/process-CSVO_jsc.js +119 -0
  109. package/dist/process-CSVO_jsc.js.map +1 -0
  110. package/dist/{provenance-Byl2T6LJ.js → provenance-D7HK3vzt.js} +2 -2
  111. package/dist/{provenance-Byl2T6LJ.js.map → provenance-D7HK3vzt.js.map} +1 -1
  112. package/dist/{providers-Cflw7Ks-.js → providers-B1DzMvmH.js} +3 -3
  113. package/dist/{providers-Cflw7Ks-.js.map → providers-B1DzMvmH.js.map} +1 -1
  114. package/dist/{providers-SBMExI53.js → providers-CpEfNU1F.js} +1 -1
  115. package/dist/{query-DUSLlic0.js → query-BjBMLa-C.js} +2 -2
  116. package/dist/{query-DUSLlic0.js.map → query-BjBMLa-C.js.map} +1 -1
  117. package/dist/query-oPO_XrTy.js +2 -0
  118. package/dist/{questions-ZdT3JDyQ.js → questions-B8by4Bbt.js} +28 -119
  119. package/dist/questions-B8by4Bbt.js.map +1 -0
  120. package/dist/{record-CbuQH4l1.js → record-BRP9vZrj.js} +21 -1
  121. package/dist/record-BRP9vZrj.js.map +1 -0
  122. package/dist/{results-owJR-NFm.js → results-Di7m8dQ3.js} +4 -4
  123. package/dist/{results-owJR-NFm.js.map → results-Di7m8dQ3.js.map} +1 -1
  124. package/dist/{resume-BL4Yw7Ld.js → resume-SUz1GskV.js} +4 -4
  125. package/dist/{resume-BL4Yw7Ld.js.map → resume-SUz1GskV.js.map} +1 -1
  126. package/dist/runtime-DdsfnRz_.js +344 -0
  127. package/dist/runtime-DdsfnRz_.js.map +1 -0
  128. package/dist/{sandbox--ZXuscAZ.js → sandbox-D5v-of6d.js} +10 -5
  129. package/dist/sandbox-D5v-of6d.js.map +1 -0
  130. package/dist/sandbox.d.ts +4 -3
  131. package/dist/sandbox.js +1 -1
  132. package/dist/{server-yFVUxAm0.js → server-BNnXtmS8.js} +9 -9
  133. package/dist/{server-yFVUxAm0.js.map → server-BNnXtmS8.js.map} +1 -1
  134. package/dist/server-BNwoKzlm.js +2 -0
  135. package/dist/source-Bk_0ZaEY.js +2 -0
  136. package/dist/{source-M3gS517R.js → source-Dof0NQBm.js} +2 -2
  137. package/dist/{source-M3gS517R.js.map → source-Dof0NQBm.js.map} +1 -1
  138. package/dist/{src-79JhW-zG.js → src-8rRXy4u9.js} +71 -124
  139. package/dist/src-8rRXy4u9.js.map +1 -0
  140. package/dist/src-BGWuWp6I.js +3 -0
  141. package/dist/src-BRt0O02i.js +3 -0
  142. package/dist/src-Bx2x1ekD.js +3 -0
  143. package/dist/{src-s-VffoYK.js → src-C1E9HDWO.js} +5 -3
  144. package/dist/{src-s-VffoYK.js.map → src-C1E9HDWO.js.map} +1 -1
  145. package/dist/{src-IOr1rhEg.js → src-COgE7991.js} +10 -8
  146. package/dist/{src-IOr1rhEg.js.map → src-COgE7991.js.map} +1 -1
  147. package/dist/{src-CokPbYCb.js → src-C_4Umgh2.js} +23 -14
  148. package/dist/{src-CokPbYCb.js.map → src-C_4Umgh2.js.map} +1 -1
  149. package/dist/{src-DxFJrMUA.js → src-D95O-Smv.js} +12 -7
  150. package/dist/{src-DxFJrMUA.js.map → src-D95O-Smv.js.map} +1 -1
  151. package/dist/{src-DTcalvuF.js → src-DDNXsD9H.js} +28 -4
  152. package/dist/{src-DTcalvuF.js.map → src-DDNXsD9H.js.map} +1 -1
  153. package/dist/src-DLa-ESW0.js +4 -0
  154. package/dist/{src-DSE0FWaU.js → src-DVy58-zZ.js} +2 -2
  155. package/dist/{src-DSE0FWaU.js.map → src-DVy58-zZ.js.map} +1 -1
  156. package/dist/src-cN0aB-WR.js +3 -0
  157. package/dist/{src-DH0jhpoi.js → src-cdIVjC5b.js} +1 -1
  158. package/dist/src-sIsDHWYq.js +3 -0
  159. package/dist/state-Bo5zg4da.js +2 -0
  160. package/dist/{state-DEj_utaE.js → state-CiXyLqg0.js} +10 -10
  161. package/dist/{state-DEj_utaE.js.map → state-CiXyLqg0.js.map} +1 -1
  162. package/dist/studio-app/assets/index-B9MCTfuu.css +2 -0
  163. package/dist/studio-app/assets/{index-Bbl0oTxu.js → index-CROH2NB3.js} +12 -12
  164. package/dist/studio-app/index.html +2 -2
  165. package/dist/{summary-D012KlUM.js → summary-2OAWF2N7.js} +7 -7
  166. package/dist/{summary-D012KlUM.js.map → summary-2OAWF2N7.js.map} +1 -1
  167. package/dist/{summary--FBuB_sr.js → summary-BTksrIxn.js} +63 -5
  168. package/dist/summary-BTksrIxn.js.map +1 -0
  169. package/dist/testing.d.ts +14 -0
  170. package/dist/testing.js +2 -0
  171. package/dist/{tools-CJHw-zCo.js → tools-B10Uj7OI.js} +4 -4
  172. package/dist/tools-B10Uj7OI.js.map +1 -0
  173. package/dist/types-C5vI3g1C.js.map +1 -1
  174. package/dist/{types-BsRSknLe.d.ts → types-D8RLfkFP.d.ts} +453 -42
  175. package/dist/{usage-DsYUqIUM.js → usage-DDF_6tkV.js} +4 -2
  176. package/dist/{usage-DsYUqIUM.js.map → usage-DDF_6tkV.js.map} +1 -1
  177. package/dist/view/index.d.ts +60 -15
  178. package/dist/view/index.js +7 -6
  179. package/dist/views-Cs2Oqayd.js +3 -0
  180. package/dist/{views-jhL9Jb8A.js → views-Dqa5ojfZ.js} +4 -4
  181. package/dist/{views-jhL9Jb8A.js.map → views-Dqa5ojfZ.js.map} +1 -1
  182. package/dist/{worker-entry-OwnsrUdr.js → worker-entry-BAikHl9F.js} +9 -4
  183. package/dist/worker-entry-BAikHl9F.js.map +1 -0
  184. package/dist/{workspace-C4_J0pqb.js → workspace-C-TrNIUc.js} +4 -4
  185. package/dist/{workspace-C4_J0pqb.js.map → workspace-C-TrNIUc.js.map} +1 -1
  186. package/dist/{workspace-wudSz_W-.js → workspace-Do_SiWBs.js} +1 -1
  187. package/docker/Dockerfile +7 -5
  188. package/package.json +9 -4
  189. package/dist/agent-gjBiZis8.js.map +0 -1
  190. package/dist/assemble-D8sZ4Jiv.js +0 -2
  191. package/dist/assemble-Dd_mZYnu.js.map +0 -1
  192. package/dist/capture-CisAmy-G.js +0 -587
  193. package/dist/capture-CisAmy-G.js.map +0 -1
  194. package/dist/capture-DquyqAHC.js +0 -2
  195. package/dist/cli-r9CDqoFL.js.map +0 -1
  196. package/dist/cli-spec-DOyxAMc2.js.map +0 -1
  197. package/dist/client-LsfDiD-X.js.map +0 -1
  198. package/dist/command-Cxfgghqo.js +0 -2
  199. package/dist/command-D6r2pwO5.js.map +0 -1
  200. package/dist/command-DMR69l5G.js.map +0 -1
  201. package/dist/config-DuQDCx0B.js.map +0 -1
  202. package/dist/db-CjX7JF4o.js.map +0 -1
  203. package/dist/docker-DaUaG4XZ.js.map +0 -1
  204. package/dist/egress-BKbyriEa.js.map +0 -1
  205. package/dist/files-DmZGPsWK.js +0 -2
  206. package/dist/files-Tb8wY0Ze.js +0 -2
  207. package/dist/harness-CDRaaGvR.js.map +0 -1
  208. package/dist/init-1THeGfut.js +0 -2
  209. package/dist/model-Bv8uUZ07.js.map +0 -1
  210. package/dist/model-Cp6NoAT3.js.map +0 -1
  211. package/dist/model-D_pF3Vcl.js +0 -2
  212. package/dist/model-DyQbu7KF.js.map +0 -1
  213. package/dist/options-Ge_x32XE.js.map +0 -1
  214. package/dist/plan-BqBadHYj.js.map +0 -1
  215. package/dist/query-CvutWHaL.js +0 -2
  216. package/dist/questions-ZdT3JDyQ.js.map +0 -1
  217. package/dist/record-CbuQH4l1.js.map +0 -1
  218. package/dist/sandbox--ZXuscAZ.js.map +0 -1
  219. package/dist/server-CNPsB0cT.js +0 -2
  220. package/dist/source-Cmc5SKFn.js +0 -2
  221. package/dist/src--L8B4WGa.js +0 -3
  222. package/dist/src-79JhW-zG.js.map +0 -1
  223. package/dist/src-BLN459er.js +0 -3
  224. package/dist/src-Bz66jDtE.js +0 -3
  225. package/dist/src-CfUwg9UY.js +0 -3
  226. package/dist/src-DV_3QDHA.js +0 -4
  227. package/dist/src-Ljh2vKXm.js +0 -3
  228. package/dist/state-DkqbCVVp.js +0 -2
  229. package/dist/studio-app/assets/index-CUx6GoL5.css +0 -2
  230. package/dist/summary--FBuB_sr.js.map +0 -1
  231. package/dist/tools-CJHw-zCo.js.map +0 -1
  232. package/dist/views-yPmmoo8f.js +0 -3
  233. package/dist/worker-entry-OwnsrUdr.js.map +0 -1
@@ -2,13 +2,13 @@ import { n as UsageError } from "./errors-yDAEwmZo.js";
2
2
  import { t as parseDuration } from "./duration-JsJrIWXq.js";
3
3
  import { t as inCI } from "./env-BQqj93gu.js";
4
4
  import { u as ownFileURL } from "./root-CvdRlRZX.js";
5
- import { _ as isSecret, p as helpersFor } from "./environment-DiCljXMD.js";
6
- import { c as DEFAULT_HARNESS, g as isAgentKind, l as HARNESS_EXAMPLE, m as credentialOf, s as AGENTS } from "./egress-BKbyriEa.js";
5
+ import { _ as isSecret, p as helpersFor } from "./environment-1jE-HhO-.js";
6
+ import { c as DEFAULT_HARNESS, g as isAgentKind, l as HARNESS_EXAMPLE, m as credentialOf, s as AGENTS } from "./egress-BhzNh7Yi.js";
7
7
  import { a as fromCwd } from "./ids-Bp6ut7ZD.js";
8
8
  import { t as esJiti } from "./jiti-BcJHCtrb.js";
9
- import { a as checkModelString, i as badJudgeList, s as judgeCredentials } from "./judge-7WjNdU9z.js";
10
- import { i as checkOptions, r as checkHarnesses, u as profileJudge } from "./options-Ge_x32XE.js";
11
- import { t as docker } from "./sandbox--ZXuscAZ.js";
9
+ import { a as checkModelString, i as badJudgeList, s as judgeCredentials } from "./judge-CeYPN8P_.js";
10
+ import { i as checkOptions, r as checkHarnesses, u as profileJudge } from "./options-CKqyPGxX.js";
11
+ import { t as docker } from "./sandbox-D5v-of6d.js";
12
12
  import { existsSync } from "node:fs";
13
13
  import { availableParallelism, totalmem } from "node:os";
14
14
  import { dirname, join, resolve } from "node:path";
@@ -75,6 +75,15 @@ const CONFIG_FILES = [
75
75
  "cjs"
76
76
  ].map((ext) => `reeval.config.${ext}`);
77
77
  const DEFAULT_CONFIG_FILE = "reeval.config.ts";
78
+ /** The names `findConfig` looks for, as doctor and the missing-config error list them. */
79
+ const configFilesPhrase = () => `${CONFIG_FILES[0]} (or ${CONFIG_FILES.slice(1).join(", ")})`;
80
+ /** Usage error when `findConfig()` finds nothing: same names as doctor, plus `reeval init`. */
81
+ const missingConfigMessage = () => `No ${configFilesPhrase()} here or above. Run reeval init.`;
82
+ /** A found config path, or the missing-config usage error. */
83
+ function requireConfig(path) {
84
+ if (path === void 0) throw new UsageError(missingConfigMessage());
85
+ return path;
86
+ }
78
87
  /**
79
88
  * The nearest config file in `from` or a directory above it, up to the filesystem root, the way
80
89
  * Vitest and ESLint find theirs. A git or workspace root doesn't stop the search: a nested
@@ -95,7 +104,8 @@ const configPathFor = (flag) => flag === void 0 ? findConfig() : resolve(flag);
95
104
  const configLabel = (path) => fromCwd(path) || path;
96
105
  /**
97
106
  * Loads the config at `path` (see `configPathFor`); its directory is the project root. Without a
98
- * config file, every key takes its default and the current directory is the root.
107
+ * path, every key takes its default and the current directory is the root. `reeval run` and
108
+ * `reeval image build` refuse a missing file before this.
99
109
  */
100
110
  async function loadConfig(path, command = "run", profile = void 0) {
101
111
  if (path === void 0) return resolveConfig({}, process.cwd(), DEFAULT_CONFIG_FILE);
@@ -442,6 +452,6 @@ function malformedCredentials(config, env = process.env, options = {}) {
442
452
  });
443
453
  }
444
454
  //#endregion
445
- export { defaultConcurrency as a, hostCapacity as c, missingCredentials as d, resolveConcurrency as f, configPathFor as i, loadConfig as l, badCharacterAt as n, defineConfig as o, selectProfile as p, configLabel as r, findConfig as s, CONFIG_FILES as t, malformedCredentials as u };
455
+ export { configPathFor as a, findConfig as c, malformedCredentials as d, missingCredentials as f, selectProfile as h, configLabel as i, hostCapacity as l, resolveConcurrency as m, badCharacterAt as n, defaultConcurrency as o, requireConfig as p, configFilesPhrase as r, defineConfig as s, CONFIG_FILES as t, loadConfig as u };
446
456
 
447
- //# sourceMappingURL=config-DuQDCx0B.js.map
457
+ //# sourceMappingURL=config-CGvBeewH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-CGvBeewH.js","names":[],"sources":["../src/config.ts"],"mappings":"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"}
@@ -89,10 +89,6 @@ function contextTaker(a) {
89
89
  };
90
90
  }
91
91
  const ADAPTER_HOME = /^~\/\.ai-sdk-harness\/\.harness-bootstrap\/[^/]+\/implementation\/home\//;
92
- /**
93
- * Paths older Cursor records may still list as context. No current harness writes session
94
- * state into the paths reeval records.
95
- */
96
92
  const RETIRED_RUNTIME_STATE = /* @__PURE__ */ new Set([".cursor/cli-config.json", ".cursor/skills-cursor/.sync-manifest.json"]);
97
93
  /** A context path that is some agent CLI's own runtime state, whichever harness recorded it. */
98
94
  function isRuntimeState(path) {
@@ -102,4 +98,4 @@ function isRuntimeState(path) {
102
98
  //#endregion
103
99
  export { isRuntimeState as n, contextTaker as t };
104
100
 
105
- //# sourceMappingURL=context-CvUv7DUb.js.map
101
+ //# sourceMappingURL=context-DbSMEVKs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-CvUv7DUb.js","names":[],"sources":["../src/attempt/context.ts"],"mappings":";;AAKA,MAAM,qBAAqB;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAEA,MAAM,gBAAgB;;;;;AAMtB,MAAM,gBAAgB;CACpB,GAAG,mBAAmB,KAAK,MAAM,SAAS,GAAG;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,eAAe,aAAa,KAAc,QAAqD;CAC7F,MAAM,eAAe,YAAY,cAAc,gBAAgB,mBAAmB,KAAK,GAAG,EAAE;CAC5F,MAAM,SAAS,cAAc,cAAc,KAAK,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,wBAAwB,aAAa;CAC/G,MAAM,IAAI,MAAM,IAAI,KAAK,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI;CAC7D,IAAI,GAAG,aAAa,GAAG,OAAO,CAAC;CAC/B,MAAM,QAAQ,MAAM,IAAI,KAAK,uBAAqB,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,EAAA,EAAI,UAAU;CAC5F,OAAO,EAAE,OACN,MAAM,IAAI,CAAC,CACX,OAAO,OAAO,CAAC,CACf,KAAK,SAAS;EACb,MAAM,CAAC,KAAK,GAAG,QAAQ,KAAK,MAAM,GAAI;EACtC,MAAM,OAAO,KAAK,KAAK,GAAI;EAC3B,OAAO;GACL,MAAM,QAAQ,KAAK,WAAW,GAAG,KAAK,EAAE,IAAI,IAAI,KAAK,MAAM,KAAK,MAAM,MAAM;GAC5E,QAAQ,OAAO;EACjB;CACF,CAAC;AACL;;;;;AAMA,SAAgB,aAAa,GAAY;CACvC,IAAI,QAAQ;CACZ,OAAO,OAAO,KAAc,WAAwB;EAClD,IAAI,SAAS,EAAE,KAAK,QAAQ,SAAS,UAAU;EAC/C,QAAQ;EACR,EAAE,OAAO,UAAU,MAAM,aAAa,KAAK,MAAM;CACnD;AACF;AAEA,MAAM,eAAe;;;;;AAMrB,MAAM,wCAAwB,IAAI,IAAI,CACpC,2BACA,2CACF,CAAC;;AAGD,SAAgB,eAAe,MAAuB;CACpD,IAAI,CAAC,KAAK,WAAW,IAAI,GAAG,OAAO;CACnC,OAAO,sBAAsB,IAAI,KAAK,QAAQ,cAAc,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5E"}
1
+ {"version":3,"file":"context-DbSMEVKs.js","names":[],"sources":["../src/attempt/context.ts"],"mappings":";;AAKA,MAAM,qBAAqB;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAEA,MAAM,gBAAgB;;;;;AAMtB,MAAM,gBAAgB;CACpB,GAAG,mBAAmB,KAAK,MAAM,SAAS,GAAG;CAC7C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,eAAe,aAAa,KAAc,QAAqD;CAC7F,MAAM,eAAe,YAAY,cAAc,gBAAgB,mBAAmB,KAAK,GAAG,EAAE;CAC5F,MAAM,SAAS,cAAc,cAAc,KAAK,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,wBAAwB,aAAa;CAC/G,MAAM,IAAI,MAAM,IAAI,KAAK,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI;CAC7D,IAAI,GAAG,aAAa,GAAG,OAAO,CAAC;CAC/B,MAAM,QAAQ,MAAM,IAAI,KAAK,uBAAqB,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,EAAA,EAAI,UAAU;CAC5F,OAAO,EAAE,OACN,MAAM,IAAI,CAAC,CACX,OAAO,OAAO,CAAC,CACf,KAAK,SAAS;EACb,MAAM,CAAC,KAAK,GAAG,QAAQ,KAAK,MAAM,GAAI;EACtC,MAAM,OAAO,KAAK,KAAK,GAAI;EAC3B,OAAO;GACL,MAAM,QAAQ,KAAK,WAAW,GAAG,KAAK,EAAE,IAAI,IAAI,KAAK,MAAM,KAAK,MAAM,MAAM;GAC5E,QAAQ,OAAO;EACjB;CACF,CAAC;AACL;;;;;AAMA,SAAgB,aAAa,GAAY;CACvC,IAAI,QAAQ;CACZ,OAAO,OAAO,KAAc,WAAwB;EAClD,IAAI,SAAS,EAAE,KAAK,QAAQ,SAAS,UAAU;EAC/C,QAAQ;EACR,EAAE,OAAO,UAAU,MAAM,aAAa,KAAK,MAAM;CACnD;AACF;AAEA,MAAM,eAAe;AAErB,MAAM,wCAAwB,IAAI,IAAI,CACpC,2BACA,2CACF,CAAC;;AAGD,SAAgB,eAAe,MAAuB;CACpD,IAAI,CAAC,KAAK,WAAW,IAAI,GAAG,OAAO;CACnC,OAAO,sBAAsB,IAAI,KAAK,QAAQ,cAAc,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5E"}
@@ -1,3 +1,3 @@
1
1
  import "./tool-target-BU1JnSE9.js";
2
- import { s as openHistoryDb } from "./db-CjX7JF4o.js";
2
+ import { s as openHistoryDb } from "./db-CfQFwJtq.js";
3
3
  export { openHistoryDb };
@@ -3,9 +3,9 @@ import { n as UsageError } from "./errors-yDAEwmZo.js";
3
3
  import { d as ownRequire, t as BUILD_ID } from "./root-CvdRlRZX.js";
4
4
  import { t as RUN_ID } from "./paths-BmR-7tx3.js";
5
5
  import { c as relativeFile, l as sha256 } from "./ids-Bp6ut7ZD.js";
6
- import { n as isRuntimeState } from "./context-CvUv7DUb.js";
7
- import { $ as liftInterval, K as effortOf, U as contrastEffort, et as round3, tt as wilson } from "./model-DyQbu7KF.js";
8
- import { m as warnUnreadable, p as scratchDir, s as readRecord, u as recordNames } from "./files-TNrZJQ3Y.js";
6
+ import { n as isRuntimeState } from "./context-DbSMEVKs.js";
7
+ import { G as contrastEffort, J as effortOf, lt as wilson, nt as liftInterval, st as round3 } from "./model-BOnlAPzs.js";
8
+ import { m as warnUnreadable, p as scratchDir, s as readRecord, u as recordNames } from "./files-CSzVADHn.js";
9
9
  import { dirname, join } from "node:path";
10
10
  import { mkdir, readFile, stat } from "node:fs/promises";
11
11
  /** A failing verdict this close to its threshold points at the judge, not the agent. */
@@ -15,9 +15,12 @@ CREATE TABLE effort_m (
15
15
  run_id TEXT, eval_key TEXT, cell_key TEXT, role TEXT, variant TEXT, harness TEXT,
16
16
  environment TEXT, n INTEGER, tools_median REAL, tools_q1 REAL, tools_q3 REAL,
17
17
  agent_s_median REAL, agent_s_q1 REAL, agent_s_q3 REAL, file_edits_median REAL,
18
+ tokens_median REAL, tokens_q1 REAL, tokens_q3 REAL,
18
19
  control_key TEXT, control_n INTEGER, control_tools_median REAL, control_agent_s_median REAL,
19
- tools_ratio REAL, agent_s_ratio REAL, agent_s_delta REAL, tools_p REAL, agent_s_p REAL,
20
- separated INTEGER, verdict TEXT, time_verdict TEXT
20
+ control_tokens_median REAL,
21
+ tools_ratio REAL, agent_s_ratio REAL, agent_s_delta REAL, tokens_ratio REAL,
22
+ tools_p REAL, agent_s_p REAL, tokens_p REAL,
23
+ separated INTEGER, verdict TEXT, time_verdict TEXT, tokens_verdict TEXT, tokens_note TEXT
21
24
  );
22
25
  CREATE TABLE factor_effects_m (
23
26
  factor TEXT, level TEXT, baseline TEXT, context TEXT, tier TEXT, run_id TEXT, eval_key TEXT,
@@ -25,18 +28,38 @@ CREATE TABLE factor_effects_m (
25
28
  control_pass INTEGER, control_counted INTEGER, points REAL, lo REAL, hi REAL,
26
29
  within_noise INTEGER, pass_verdict TEXT, tools_ratio REAL, tools_ratios TEXT,
27
30
  agent_s_ratio REAL, tools_p REAL, consistent INTEGER, separated INTEGER, effort_verdict TEXT,
31
+ tokens_ratio REAL, tokens_p REAL, tokens_verdict TEXT, tokens_note TEXT,
28
32
  note TEXT
29
33
  );
30
34
  CREATE TABLE flaky_m (
31
35
  eval_key TEXT, cell_key TEXT, fingerprint TEXT, runs INTEGER, flaky_runs INTEGER,
32
36
  first_seen TEXT, last_seen TEXT, pass INTEGER, counted INTEGER, infra_error INTEGER,
33
- rate REAL, lo REAL, hi REAL, verdict TEXT, cause TEXT, min_attempts INTEGER
37
+ pass_at_1 REAL, lo REAL, hi REAL, verdict TEXT, cause TEXT, min_attempts INTEGER
34
38
  );
35
39
  CREATE TABLE drift_m (
36
40
  run_id TEXT, prev_run_id TEXT, eval_key TEXT, cell_key TEXT, changed TEXT,
37
41
  changed_paths TEXT, noise INTEGER, real_changed TEXT
38
42
  );
39
43
  `;
44
+ const FAMILY_COLUMNS = [
45
+ "run_id",
46
+ "family_id",
47
+ "harness",
48
+ "variant",
49
+ "pairs",
50
+ "points",
51
+ "lo",
52
+ "hi",
53
+ "within_noise",
54
+ "verdict",
55
+ "tools_ratio",
56
+ "tools_p",
57
+ "effort_verdict",
58
+ "agent_s_ratio",
59
+ "tokens_ratio",
60
+ "tokens_p",
61
+ "tokens_verdict"
62
+ ];
40
63
  const DERIVED = [
41
64
  "effort_m",
42
65
  "factor_effects_m",
@@ -76,6 +99,14 @@ function passCols(v, c) {
76
99
  pass_verdict: Math.min(v.counted, c.counted) < 2 ? "insufficient" : noise ? "noise" : "effect"
77
100
  };
78
101
  }
102
+ function tokenCols(e) {
103
+ return {
104
+ tokens_ratio: r4(e?.tokensRatio ?? null),
105
+ tokens_p: r4(e?.tokensP ?? null),
106
+ tokens_verdict: e?.tokensVerdict ?? null,
107
+ tokens_note: e?.tokensNote ?? null
108
+ };
109
+ }
79
110
  function effortCols(e) {
80
111
  return {
81
112
  tools_ratio: r4(e?.toolsRatio ?? null),
@@ -84,7 +115,8 @@ function effortCols(e) {
84
115
  tools_p: r4(e?.toolsP ?? null),
85
116
  consistent: e && (e.verdict === "fewer" || e.verdict === "more") ? 1 : 0,
86
117
  separated: e?.separated ? 1 : 0,
87
- effort_verdict: e?.verdict ?? null
118
+ effort_verdict: e?.verdict ?? null,
119
+ ...tokenCols(e)
88
120
  };
89
121
  }
90
122
  /** Across strata: an effect when ≥ 2/3 of them show it in the same direction at p < 0.05. */
@@ -106,7 +138,36 @@ function pooledEffort(strata) {
106
138
  tools_p: r4(known.length ? Math.max(...known.map((s) => s.toolsP ?? 1)) : null),
107
139
  consistent: verdict === "fewer" || verdict === "more" ? count(verdict) : 0,
108
140
  separated: known.filter((s) => s.separated).length,
109
- effort_verdict: verdict
141
+ effort_verdict: verdict,
142
+ ...pooledTokens(known)
143
+ };
144
+ }
145
+ /**
146
+ * Token verdict over the strata that reported usage. A stratum without token samples is
147
+ * dropped from this pool only — not `insufficient`, and it does not blank tokens on the rest.
148
+ */
149
+ function pooledTokens(known) {
150
+ const withTokens = known.filter((s) => s.tokensVerdict !== null);
151
+ if (withTokens.length === 0) return {
152
+ tokens_ratio: null,
153
+ tokens_p: null,
154
+ tokens_verdict: null,
155
+ tokens_note: null
156
+ };
157
+ const k = withTokens.length;
158
+ const count = (v) => withTokens.filter((s) => s.tokensVerdict === v).length;
159
+ const needed = Math.ceil(2 * k / 3);
160
+ let verdict = "noise";
161
+ if (count("fewer") >= needed && count("more") === 0) verdict = "fewer";
162
+ else if (count("more") >= needed && count("fewer") === 0) verdict = "more";
163
+ else if (count("insufficient") === k) verdict = "insufficient";
164
+ const sorted = [...withTokens.map((s) => s.tokensRatio).filter((r) => r !== null)].sort((a, b) => a - b);
165
+ const mid = sorted.length ? sorted.length % 2 ? sorted[(sorted.length - 1) / 2] : (sorted[sorted.length / 2 - 1] + sorted[sorted.length / 2]) / 2 : null;
166
+ return {
167
+ tokens_ratio: r4(mid),
168
+ tokens_p: r4(Math.max(...withTokens.map((s) => s.tokensP ?? 1))),
169
+ tokens_verdict: verdict,
170
+ tokens_note: known.some((s) => s.tokensNote) || withTokens.length < known.length ? "some cells did not report usage" : null
110
171
  };
111
172
  }
112
173
  const merge = (sides) => ({
@@ -124,7 +185,9 @@ function insertAll(db, table, rows) {
124
185
  function deriveFacts(db) {
125
186
  for (const table of DERIVED) db.exec(`DELETE FROM ${table}`);
126
187
  const cells = db.prepare("SELECT c.*, r.started_at FROM cells c JOIN runs r USING (run_id) ORDER BY c.run_id, c.rowid").all();
127
- const attempts = db.prepare("SELECT run_id, eval_key, cell_key, key, outcome, error_kind, tools, agent_ms, file_edits FROM attempts ORDER BY run_id, rowid").all();
188
+ const attempts = db.prepare(`SELECT run_id, eval_key, cell_key, key, outcome, error_kind, tools, agent_ms, file_edits,
189
+ input_tokens, output_tokens, cache_read_tokens, cache_write_tokens, reasoning_tokens
190
+ FROM attempts ORDER BY run_id, rowid`).all();
128
191
  const nearThreshold = new Set(db.prepare(`SELECT DISTINCT run_id, attempt_key FROM judgements WHERE verdict = 'fail' AND ABS(score - threshold) <= ${JUDGE_MARGIN}`).all().map((r) => `${r.run_id}\0${r.attempt_key}`));
129
192
  const samples = /* @__PURE__ */ new Map();
130
193
  const byCell = /* @__PURE__ */ new Map();
@@ -132,10 +195,12 @@ function deriveFacts(db) {
132
195
  const id = cellId(a.run_id, a.eval_key, a.cell_key);
133
196
  byCell.set(id, [...byCell.get(id) ?? [], a]);
134
197
  if (a.outcome !== "pass" && a.outcome !== "fail") continue;
198
+ const tokens = a.input_tokens === null ? void 0 : a.input_tokens + (a.output_tokens ?? 0) + (a.cache_read_tokens ?? 0) + (a.cache_write_tokens ?? 0) + (a.reasoning_tokens ?? 0);
135
199
  samples.set(id, [...samples.get(id) ?? [], {
136
200
  tools: a.tools,
137
201
  agentMs: a.agent_ms,
138
- fileEdits: a.file_edits
202
+ fileEdits: a.file_edits,
203
+ ...tokens !== void 0 ? { tokens } : {}
139
204
  }]);
140
205
  }
141
206
  const side = (c) => ({
@@ -164,18 +229,26 @@ function deriveFacts(db) {
164
229
  agent_s_q1: own ? s1(own.agentMs.q1) : null,
165
230
  agent_s_q3: own ? s1(own.agentMs.q3) : null,
166
231
  file_edits_median: own?.fileEdits ?? null,
232
+ tokens_median: own?.tokens?.median ?? null,
233
+ tokens_q1: own?.tokens?.q1 ?? null,
234
+ tokens_q3: own?.tokens?.q3 ?? null,
167
235
  control_key: control?.key ?? null,
168
236
  control_n: vs?.control.n ?? null,
169
237
  control_tools_median: vs?.control.tools.median ?? null,
170
238
  control_agent_s_median: vs ? s1(vs.control.agentMs.median) : null,
239
+ control_tokens_median: vs?.control.tokens?.median ?? null,
171
240
  tools_ratio: r4(vs?.toolsRatio ?? null),
172
241
  agent_s_ratio: r4(vs?.agentMsRatio ?? null),
173
242
  agent_s_delta: vs ? s1(vs.agentMsDelta) : null,
243
+ tokens_ratio: r4(vs?.tokensRatio ?? null),
174
244
  tools_p: r4(vs?.toolsP ?? null),
175
245
  agent_s_p: r4(vs?.agentMsP ?? null),
246
+ tokens_p: r4(vs?.tokensP ?? null),
176
247
  separated: vs ? vs.separated ? 1 : 0 : null,
177
248
  verdict: vs?.verdict ?? null,
178
- time_verdict: vs?.timeVerdict ?? null
249
+ time_verdict: vs?.timeVerdict ?? null,
250
+ tokens_verdict: vs?.tokensVerdict ?? null,
251
+ tokens_note: vs?.tokensNote ?? null
179
252
  };
180
253
  }));
181
254
  const pairs = [];
@@ -276,15 +349,20 @@ function deriveFacts(db) {
276
349
  first.context
277
350
  ].join("\0");
278
351
  strata.set(id, [...strata.get(id) ?? [], {
352
+ evalKey: first.evalKey,
353
+ pool: first.pool,
279
354
  v,
280
355
  c
281
356
  }]);
282
357
  }
283
358
  for (const [id, list] of strata) {
284
- if (list.length < 2) continue;
359
+ const poolsByEval = /* @__PURE__ */ new Map();
360
+ for (const s of list) poolsByEval.set(s.evalKey, /* @__PURE__ */ new Set([...poolsByEval.get(s.evalKey) ?? [], s.pool]));
361
+ const comparable = list.filter((s) => (poolsByEval.get(s.evalKey)?.size ?? 0) === 1);
362
+ if (new Set(comparable.map((s) => s.evalKey)).size < 2) continue;
285
363
  const [factor, level, baseline, context] = id.split("\0");
286
- const v = merge(list.map((s) => s.v));
287
- const c = merge(list.map((s) => s.c));
364
+ const v = merge(comparable.map((s) => s.v));
365
+ const c = merge(comparable.map((s) => s.c));
288
366
  factorRows.push({
289
367
  ...head({
290
368
  factor,
@@ -295,13 +373,38 @@ function deriveFacts(db) {
295
373
  tier: "pooled",
296
374
  run_id: null,
297
375
  eval_key: null,
298
- strata: list.length,
376
+ strata: comparable.length,
299
377
  runs: null,
300
378
  ...passCols(v, c),
301
- ...pooledEffort(list.map((s) => contrastEffort(s.v.samples, s.c.samples))),
302
- note: "pass rate: summed counts; effort: an effect in at least 2/3 of strata"
379
+ ...pooledEffort(comparable.map((s) => contrastEffort(s.v.samples, s.c.samples))),
380
+ note: "pass@1: summed counts; effort: an effect in at least 2/3 of strata"
303
381
  });
304
382
  }
383
+ const familyLifts = db.prepare(`SELECT ${FAMILY_COLUMNS.join(", ")} FROM family_lift_m`).all();
384
+ for (const f of familyLifts) factorRows.push({
385
+ factor: "environment",
386
+ level: f.variant,
387
+ baseline: "control",
388
+ context: f.harness,
389
+ tier: "paired",
390
+ run_id: f.run_id,
391
+ eval_key: f.family_id,
392
+ strata: f.pairs,
393
+ runs: 1,
394
+ points: f.points,
395
+ lo: f.lo,
396
+ hi: f.hi,
397
+ within_noise: f.within_noise,
398
+ pass_verdict: f.verdict === "insufficient" ? "insufficient" : f.within_noise ? "noise" : "effect",
399
+ tools_ratio: f.tools_ratio,
400
+ agent_s_ratio: f.agent_s_ratio,
401
+ tools_p: f.tools_p,
402
+ effort_verdict: f.effort_verdict,
403
+ tokens_ratio: f.tokens_ratio,
404
+ tokens_p: f.tokens_p,
405
+ tokens_verdict: f.tokens_verdict,
406
+ note: "paired by case over a pooled evaluate.each: strata is the paired cases"
407
+ });
305
408
  const driftRows = [];
306
409
  const series = /* @__PURE__ */ new Map();
307
410
  for (const c of cells) {
@@ -407,7 +510,7 @@ function deriveFacts(db) {
407
510
  pass,
408
511
  counted: pass + fail,
409
512
  infra_error: infra,
410
- rate: round3(pass / (pass + fail)),
513
+ pass_at_1: round3(pass / (pass + fail)),
411
514
  lo: round3(w.low),
412
515
  hi: round3(w.high),
413
516
  verdict: pass + fail >= 6 ? "flaky" : "insufficient",
@@ -421,7 +524,7 @@ function deriveFacts(db) {
421
524
  //#endregion
422
525
  //#region src/history/db.ts
423
526
  /** Bump when the tables or views change: a database from another version is rebuilt. */
424
- const DB_VERSION = 3;
527
+ const DB_VERSION = 9;
425
528
  /** This build of reeval, like the header cache: another reeval re-derives every row. */
426
529
  const BUILD = BUILD_ID;
427
530
  const historyDbPath = (root) => join(root, ".reeval", "history.db");
@@ -459,16 +562,33 @@ CREATE TABLE runs (
459
562
  );
460
563
  CREATE TABLE evals (
461
564
  run_id TEXT NOT NULL, key TEXT NOT NULL, id TEXT, slug TEXT, file TEXT, groups TEXT, name TEXT,
462
- tags TEXT, fingerprint TEXT, outcome TEXT, pass_rate REAL, sources TEXT,
565
+ tags TEXT, fingerprint TEXT, outcome TEXT, pass_at_1 REAL, sources TEXT, family_id TEXT,
566
+ case_index INTEGER,
463
567
  PRIMARY KEY (run_id, key)
464
568
  );
569
+ -- Each pooled evaluate.each per run: its cases, and each cell's pass rate over them.
570
+ CREATE TABLE families (
571
+ run_id TEXT NOT NULL, family_id TEXT NOT NULL, file TEXT, groups TEXT, name TEXT,
572
+ cases INTEGER, ran INTEGER, cell_key TEXT NOT NULL, cell_cases INTEGER, pass INTEGER,
573
+ counted INTEGER, pass_rate REAL, lo REAL, hi REAL, method TEXT, outcome TEXT,
574
+ PRIMARY KEY (run_id, family_id, cell_key)
575
+ );
576
+ CREATE TABLE family_lift_m (
577
+ run_id TEXT NOT NULL, family_id TEXT NOT NULL, name TEXT, harness TEXT, variant TEXT,
578
+ cell_key TEXT, control TEXT,
579
+ pairs INTEGER, variant_rate REAL, control_rate REAL, discordant_vc INTEGER,
580
+ discordant_cv INTEGER, points REAL, lo REAL, hi REAL, method TEXT, p REAL,
581
+ within_noise INTEGER, verdict TEXT, min_lift REAL, outcome TEXT, tools_ratio REAL,
582
+ tools_p REAL, effort_verdict TEXT, agent_s_ratio REAL, agent_s_p REAL, time_verdict TEXT,
583
+ tokens_ratio REAL, tokens_p REAL, tokens_verdict TEXT
584
+ );
465
585
  CREATE TABLE cells (
466
586
  run_id TEXT NOT NULL, eval_key TEXT NOT NULL, key TEXT NOT NULL, role TEXT, variant TEXT,
467
- harness TEXT, harness_kind TEXT, model TEXT, environment TEXT, environment_digest TEXT,
468
- sandbox TEXT, gate TEXT, gate_pass_rate REAL, fingerprint TEXT, fp_sources TEXT,
469
- fp_harness TEXT, fp_environment TEXT, fp_image TEXT, fp_agent_cli TEXT, fp_judge TEXT,
470
- fp_context TEXT, runs INTEGER, pass INTEGER, fail INTEGER, infra_error INTEGER,
471
- skipped INTEGER, pass_rate REAL, outcome TEXT, lift_vs TEXT, lift_points REAL, lift_lo REAL,
587
+ harness TEXT, harness_kind TEXT, model TEXT, reasoning_effort TEXT, environment TEXT,
588
+ environment_digest TEXT, sandbox TEXT, gate TEXT, gate_pass_rate REAL, fingerprint TEXT,
589
+ fp_sources TEXT, fp_harness TEXT, fp_environment TEXT, fp_image TEXT, fp_agent_cli TEXT,
590
+ fp_judge TEXT, fp_context TEXT, runs INTEGER, pass INTEGER, fail INTEGER, infra_error INTEGER,
591
+ skipped INTEGER, pass_at_1 REAL, outcome TEXT, lift_vs TEXT, lift_points REAL, lift_lo REAL,
472
592
  lift_hi REAL, within_noise INTEGER, min_lift REAL, comparable TEXT,
473
593
  PRIMARY KEY (run_id, eval_key, key)
474
594
  );
@@ -478,7 +598,8 @@ CREATE TABLE attempts (
478
598
  error_message TEXT, duration_ms INTEGER, image_id TEXT, turns INTEGER, tools INTEGER,
479
599
  file_edits INTEGER, setup_ms INTEGER, agent_ms INTEGER, checks_ms INTEGER, judge_ms INTEGER,
480
600
  last_text TEXT, input_tokens INTEGER, output_tokens INTEGER, cache_read_tokens INTEGER,
481
- cache_write_tokens INTEGER, reasoning_tokens INTEGER, served_model TEXT,
601
+ cache_write_tokens INTEGER, reasoning_tokens INTEGER, served_model TEXT, oom_kills INTEGER,
602
+ reasoning_effort TEXT, served_reasoning_effort TEXT,
482
603
  PRIMARY KEY (run_id, key)
483
604
  );
484
605
  CREATE TABLE judgements (
@@ -507,7 +628,20 @@ CREATE TABLE tool_calls (
507
628
  run_id TEXT NOT NULL, attempt_key TEXT NOT NULL, line INTEGER NOT NULL, turn INTEGER,
508
629
  tool TEXT, target TEXT, ok INTEGER, duration_ms INTEGER
509
630
  );
631
+ -- Every expect / expect.soft matcher call each attempt made, in call order (seq from 1).
632
+ CREATE TABLE assertions (
633
+ run_id TEXT NOT NULL, attempt_key TEXT NOT NULL, eval_key TEXT NOT NULL, cell_key TEXT NOT NULL,
634
+ seq INTEGER NOT NULL, label TEXT NOT NULL, labelled INTEGER, matcher TEXT, status TEXT,
635
+ soft INTEGER, message TEXT, duration_ms INTEGER
636
+ );
637
+ -- Each check (assertion label) per cell over its counted attempts; on a variant, its control's too.
638
+ CREATE TABLE cell_checks (
639
+ run_id TEXT NOT NULL, eval_key TEXT NOT NULL, cell_key TEXT NOT NULL, label TEXT NOT NULL,
640
+ pass INTEGER, fail INTEGER, error INTEGER, not_run INTEGER, control_pass INTEGER,
641
+ control_fail INTEGER, control_error INTEGER, control_not_run INTEGER, verdict TEXT
642
+ );
510
643
  ${DERIVED_TABLES}
644
+ CREATE INDEX assertions_by_attempt ON assertions (run_id, attempt_key);
511
645
  CREATE INDEX cells_by_eval ON cells (eval_key, key);
512
646
  CREATE INDEX tool_calls_by_attempt ON tool_calls (run_id, attempt_key);
513
647
  CREATE INDEX context_by_attempt ON attempt_context (run_id, attempt_key);
@@ -520,12 +654,18 @@ const VIEWS = `
520
654
  CREATE VIEW lift AS
521
655
  SELECT c.run_id, r.started_at, r.branch, c.eval_key, c.harness, c.model, c.variant,
522
656
  c.lift_vs AS control, c.pass AS variant_pass, c.pass + c.fail AS variant_counted,
523
- k.pass AS control_pass, k.pass + k.fail AS control_counted, c.lift_points AS points,
657
+ k.pass AS control_pass, k.pass + k.fail AS control_counted, c.pass_at_1 AS variant_pass_at_1,
658
+ k.pass_at_1 AS control_pass_at_1, c.lift_points AS points,
524
659
  c.lift_lo AS lo, c.lift_hi AS hi, c.within_noise, c.min_lift, c.outcome, c.fingerprint
525
660
  FROM cells c JOIN runs r USING (run_id)
526
661
  JOIN cells k ON k.run_id = c.run_id AND k.eval_key = c.eval_key AND k.key = c.lift_vs
527
662
  WHERE c.role = 'variant';
528
663
 
664
+ -- Each variant against its control over a pooled evaluate.each's cases, paired by case, per run.
665
+ CREATE VIEW family_lift AS
666
+ SELECT f.*, r.started_at, r.branch
667
+ FROM family_lift_m f JOIN runs r USING (run_id);
668
+
529
669
  -- Cells with mixed outcomes, pooled over runs whose fingerprints match once agent runtime state is
530
670
  -- left out; 'flaky' needs FLAKY_MIN_ATTEMPTS counted attempts, else 'insufficient'.
531
671
  CREATE VIEW flaky_cells AS SELECT * FROM flaky_m;
@@ -534,7 +674,7 @@ CREATE VIEW flaky_cells AS SELECT * FROM flaky_m;
534
674
  -- paths, and noise = 1 when only agent runtime state changed (not a real change).
535
675
  CREATE VIEW drift AS SELECT * FROM drift_m;
536
676
 
537
- -- Tool calls and agent time per cell, and a variant's against its control in the same run.
677
+ -- Tool calls, agent time and tokens per cell, and a variant's against its control in the same run.
538
678
  CREATE VIEW effort AS SELECT * FROM effort_m;
539
679
 
540
680
  -- What a factor (environment, harness, model) did, by evidence tier: controlled (one run),
@@ -557,19 +697,32 @@ CREATE VIEW skill_reads AS
557
697
  JOIN cells c ON c.run_id = a.run_id AND c.eval_key = a.eval_key AND c.key = a.cell_key
558
698
  JOIN env_skills s ON s.run_id = c.run_id AND s.digest = c.environment_digest;
559
699
 
560
- -- Failed attempts with the cell's harness, model and each of its environment's skills.
700
+ -- Failed attempts and infra errors (an OOM kill among them) with the cell's harness, model, each
701
+ -- of its environment's skills and the label of the first check that failed.
561
702
  CREATE VIEW failing_attempts AS
562
703
  SELECT a.run_id, r.started_at, a.eval_key, a.key AS attempt_key, a.cell_key, c.harness,
563
- c.model, c.environment, s.name AS skill, a.error_kind, a.error_message, a.duration_ms
704
+ c.model, c.environment, s.name AS skill, a.outcome, a.error_kind, a.error_message,
705
+ a.duration_ms, a.oom_kills,
706
+ (SELECT x.label FROM assertions x WHERE x.run_id = a.run_id AND x.attempt_key = a.key
707
+ AND x.status = 'fail' ORDER BY x.seq LIMIT 1) AS first_failed_check
564
708
  FROM attempts a JOIN runs r USING (run_id)
565
709
  JOIN cells c ON c.run_id = a.run_id AND c.eval_key = a.eval_key AND c.key = a.cell_key
566
710
  LEFT JOIN env_skills s ON s.run_id = c.run_id AND s.digest = c.environment_digest
567
- WHERE a.outcome = 'fail';
711
+ WHERE a.outcome IN ('fail', 'infra_error');
568
712
 
569
- -- One eval per run: outcome and pass rate, with the branch and pull request.
713
+ -- Each check of a variant cell beside its control's: whether it tells them apart.
714
+ CREATE VIEW check_discrimination AS
715
+ SELECT k.run_id, k.eval_key, c.harness, c.variant, c.key AS cell_key, k.label,
716
+ k.pass AS variant_pass, k.fail AS variant_fail, k.not_run AS variant_not_run,
717
+ k.control_pass, k.control_fail, k.control_not_run, k.verdict
718
+ FROM cell_checks k
719
+ JOIN cells c ON c.run_id = k.run_id AND c.eval_key = k.eval_key AND c.key = k.cell_key
720
+ WHERE c.role = 'variant' AND k.verdict IS NOT NULL;
721
+
722
+ -- One eval per run: outcome and pass@1, with the branch and pull request.
570
723
  CREATE VIEW eval_trend AS
571
724
  SELECT e.eval_key, r.run_id, r.started_at, r.branch, r.pr_number, r.recorded, e.outcome,
572
- e.pass_rate, e.fingerprint
725
+ e.pass_at_1, e.fingerprint
573
726
  FROM (SELECT key AS eval_key, * FROM evals) e JOIN runs r USING (run_id);
574
727
 
575
728
  -- Each judge question's pass rate per cell per run, where it differs from that cell's last run.
@@ -589,6 +742,7 @@ CREATE VIEW verdict_flips AS
589
742
  `;
590
743
  const VIEW_NAMES = [
591
744
  "lift",
745
+ "family_lift",
592
746
  "effort",
593
747
  "factor_effects",
594
748
  "skill_reads",
@@ -596,7 +750,8 @@ const VIEW_NAMES = [
596
750
  "drift",
597
751
  "failing_attempts",
598
752
  "eval_trend",
599
- "verdict_flips"
753
+ "verdict_flips",
754
+ "check_discrimination"
600
755
  ];
601
756
  const json = (value) => JSON.stringify(value);
602
757
  /** `attempts.last_text` is the agent's final message, capped: most "why" questions start there. */
@@ -649,14 +804,16 @@ function insertRun(db, record, recorded, transcripts) {
649
804
  for (const s of env.skills) run("INSERT INTO env_skills VALUES (?, ?, ?, ?, ?, ?, ?)", record.runId, env.digest, s.name, s.source, s.commit, s.sha256, s.placement);
650
805
  }
651
806
  for (const e of record.evals) {
652
- run(`INSERT INTO evals VALUES (${Array(12).fill("?").join(", ")})`, record.runId, e.key, e.id, e.slug, e.file, json(e.group), e.name, json(e.tags), e.fingerprint, e.outcome, e.passRate, json(e.sources));
807
+ run(`INSERT INTO evals VALUES (${Array(14).fill("?").join(", ")})`, record.runId, e.key, e.id, e.slug, e.file, json(e.group), e.name, json(e.tags), e.fingerprint, e.outcome, e.passRate, json(e.sources), e.family?.id ?? null, e.family?.case ?? null);
653
808
  for (const c of e.cells) {
654
809
  const p = c.fingerprintParts;
655
- run(`INSERT INTO cells VALUES (${Array(35).fill("?").join(", ")})`, record.runId, e.key, c.key, c.role, c.variant ?? null, c.harness, c.harnessKind, c.model, c.environment, c.environmentDigest, c.sandbox, typeof c.gate === "string" ? c.gate : "passRate", typeof c.gate === "string" ? null : c.gate.passRate, c.fingerprint, p.sources, p.harness, p.environment, p.image, p.agentCli, p.judge, p.context, c.runs, c.pass, c.fail, c.infraError, c.skipped, c.passRate, c.outcome, c.lift?.vs ?? null, c.lift?.points ?? null, c.lift?.interval.lo ?? null, c.lift?.interval.hi ?? null, c.lift ? c.lift.withinNoise ? 1 : 0 : null, c.lift?.minLift ?? null, comparableFingerprint(c, e.attempts));
810
+ run(`INSERT INTO cells VALUES (${Array(36).fill("?").join(", ")})`, record.runId, e.key, c.key, c.role, c.variant ?? null, c.harness, c.harnessKind, c.model, c.effort ?? null, c.environment, c.environmentDigest, c.sandbox, typeof c.gate === "string" ? c.gate : "passRate", typeof c.gate === "string" ? null : c.gate.passRate, c.fingerprint, p.sources, p.harness, p.environment, p.image, p.agentCli, p.judge, p.context, c.runs, c.pass, c.fail, c.infraError, c.skipped, c.passRate, c.outcome, c.lift?.vs ?? null, c.lift?.points ?? null, c.lift?.interval.lo ?? null, c.lift?.interval.hi ?? null, c.lift ? c.lift.withinNoise ? 1 : 0 : null, c.lift?.minLift ?? null, comparableFingerprint(c, e.attempts));
811
+ for (const k of c.checks ?? []) run(`INSERT INTO cell_checks VALUES (${Array(13).fill("?").join(", ")})`, record.runId, e.key, c.key, k.label, k.pass, k.fail, k.error, k.notRun, k.control?.pass ?? null, k.control?.fail ?? null, k.control?.error ?? null, k.control?.notRun ?? null, k.verdict ?? null);
656
812
  }
657
813
  for (const a of e.attempts) {
658
- run(`INSERT INTO attempts VALUES (${Array(27).fill("?").join(", ")})`, record.runId, e.key, a.cell, a.key, a.id, a.n, a.seq, a.startedAt, a.outcome, a.error?.kind ?? null, a.error?.message ?? null, a.durationMs, a.imageId, a.turns.length, a.activity.tools, a.activity.fileEdits, a.timings.setupMs, a.timings.agentMs, a.timings.checksMs, a.timings.judgeMs, a.turns.at(-1)?.text.slice(0, 2048) ?? null, a.usage?.input ?? null, a.usage?.output ?? null, a.usage?.cacheRead ?? null, a.usage?.cacheWrite ?? null, a.usage?.reasoning ?? null, a.turns.findLast((t) => t.model)?.model ?? null);
814
+ run(`INSERT INTO attempts VALUES (${Array(30).fill("?").join(", ")})`, record.runId, e.key, a.cell, a.key, a.id, a.n, a.seq, a.startedAt, a.outcome, a.error?.kind ?? null, a.error?.message ?? null, a.durationMs, a.imageId, a.turns.length, a.activity.tools, a.activity.fileEdits, a.timings.setupMs, a.timings.agentMs, a.timings.checksMs, a.timings.judgeMs, a.turns.at(-1)?.text.slice(0, 2048) ?? null, a.usage?.input ?? null, a.usage?.output ?? null, a.usage?.cacheRead ?? null, a.usage?.cacheWrite ?? null, a.usage?.reasoning ?? null, a.turns.findLast((t) => t.model)?.model ?? null, a.error?.resource?.cause === "oom" ? a.error.resource.kills : 0, a.effort ?? null, a.servedEffort ?? null);
659
815
  for (const c of a.context) run("INSERT INTO attempt_context VALUES (?, ?, ?, ?, ?)", record.runId, a.key, c.path, c.sha256, isRuntimeState(c.path) ? 1 : 0);
816
+ for (const [i, x] of (a.assertions ?? []).entries()) run(`INSERT INTO assertions VALUES (${Array(12).fill("?").join(", ")})`, record.runId, a.key, e.key, a.cell, i + 1, x.label, x.labelled ? 1 : 0, x.matcher, x.status, x.soft ? 1 : 0, x.message ?? null, x.durationMs ?? null);
660
817
  const transcript = transcripts.get(a.key);
661
818
  for (const t of transcript ? toolCalls(transcript) : []) run("INSERT INTO tool_calls VALUES (?, ?, ?, ?, ?, ?, ?, ?)", record.runId, a.key, t.line, t.turn, t.tool, t.target, t.ok ? 1 : 0, t.durationMs);
662
819
  for (const j of a.judgements) run("INSERT OR IGNORE INTO judgements VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", record.runId, a.key, j.key, j.question, j.verdict, j.score, j.threshold, j.model, j.resolvedModel ?? null, a.files.judgeInput?.path ?? null);
@@ -670,10 +827,20 @@ function insertRun(db, record, recorded, transcripts) {
670
827
  });
671
828
  }
672
829
  }
830
+ for (const f of record.families ?? []) {
831
+ for (const r of f.rates) run(`INSERT INTO families VALUES (${Array(16).fill("?").join(", ")})`, record.runId, f.id, f.file, json(f.group), f.name, f.cases, f.ran, r.cell, r.cases, r.pass, r.counted, r.rate, r.interval.lo, r.interval.hi, r.interval.method, f.outcome);
832
+ for (const l of f.lifts) {
833
+ const e = l.effort;
834
+ const cell = record.evals.find((x) => x.family?.id === f.id && x.cells.some((c) => c.key === l.variant))?.cells.find((c) => c.key === l.variant);
835
+ run(`INSERT INTO family_lift_m VALUES (${Array(30).fill("?").join(", ")})`, record.runId, f.id, f.name, cell?.harness ?? null, cell?.variant ?? cell?.environment ?? null, l.variant, l.vs, l.pairs, l.variantRate, l.controlRate, l.discordant?.variantOnly ?? null, l.discordant?.controlOnly ?? null, l.points, l.interval.lo, l.interval.hi, l.interval.method, l.p, l.withinNoise ? 1 : 0, l.verdict, l.minLift ?? null, l.outcome, e?.tools.ratio ?? null, e?.tools.p ?? null, e?.tools.verdict ?? null, e?.agentMs.ratio ?? null, e?.agentMs.p ?? null, e?.agentMs.verdict ?? null, e?.tokens?.ratio ?? null, e?.tokens?.p ?? null, e?.tokens?.verdict ?? null);
836
+ }
837
+ }
673
838
  }
674
839
  const DATA_TABLES = [
675
840
  "runs",
676
841
  "evals",
842
+ "families",
843
+ "family_lift_m",
677
844
  "cells",
678
845
  "attempts",
679
846
  "judgements",
@@ -681,7 +848,9 @@ const DATA_TABLES = [
681
848
  "env_skills",
682
849
  "artifacts",
683
850
  "attempt_context",
684
- "tool_calls"
851
+ "tool_calls",
852
+ "assertions",
853
+ "cell_checks"
685
854
  ];
686
855
  function removeRun(db, runId) {
687
856
  for (const table of DATA_TABLES) db.prepare(`DELETE FROM ${table} WHERE run_id = ?`).run(runId);
@@ -804,7 +973,7 @@ async function openHistoryDb(root, historyDir, options = {}) {
804
973
  }
805
974
  },
806
975
  schema() {
807
- return db.prepare(`SELECT name, type FROM sqlite_schema WHERE type IN ('table', 'view') AND name NOT IN ('meta', 'files', ${DERIVED.map((d) => `'${d}'`).join(", ")}) AND name NOT LIKE 'sqlite_%' ORDER BY type, name`).all().map((o) => ({
976
+ return db.prepare(`SELECT name, type FROM sqlite_schema WHERE type IN ('table', 'view') AND name NOT IN ('meta', 'files', 'family_lift_m', ${DERIVED.map((d) => `'${d}'`).join(", ")}) AND name NOT LIKE 'sqlite_%' ORDER BY type, name`).all().map((o) => ({
808
977
  ...o,
809
978
  columns: db.prepare(`PRAGMA table_info("${o.name}")`).all().map((c) => c.name)
810
979
  }));
@@ -815,4 +984,4 @@ async function openHistoryDb(root, historyDir, options = {}) {
815
984
  //#endregion
816
985
  export { historyDbPath as a, toolCalls as c, comparableFingerprint as i, SQLITE_NODE as n, nodeAtLeast as o, VIEW_NAMES as r, openHistoryDb as s, LAST_TEXT_LIMIT as t };
817
986
 
818
- //# sourceMappingURL=db-CjX7JF4o.js.map
987
+ //# sourceMappingURL=db-CfQFwJtq.js.map