reeval 0.10.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 (295) hide show
  1. package/README.md +64 -39
  2. package/THIRD_PARTY_NOTICES.md +75 -106
  3. package/bin/mcp-timer.cjs +224 -0
  4. package/dist/{adapter-DWlpOtRn.js → adapter-DigeVFWC.js} +3 -3
  5. package/dist/{adapter-DWlpOtRn.js.map → adapter-DigeVFWC.js.map} +1 -1
  6. package/dist/{agent-CaS_2Sce.js → agent-CatUEo5h.js} +21 -6
  7. package/dist/{agent-CaS_2Sce.js.map → agent-CatUEo5h.js.map} +1 -1
  8. package/dist/{assemble-B9Alds-z.js → assemble-CF063ms6.js} +19 -17
  9. package/dist/assemble-CF063ms6.js.map +1 -0
  10. package/dist/assemble-CJoD_Rzr.js +1 -0
  11. package/dist/bridge/index.mjs +15 -7
  12. package/dist/{capture-CNb9SuU5.js → capture-BiD7lVaM.js} +26 -18
  13. package/dist/{capture-CNb9SuU5.js.map → capture-BiD7lVaM.js.map} +1 -1
  14. package/dist/capture-Dp3q7K7Y.js +1 -0
  15. package/dist/{cli-D303Vj5N.js → cli-B5zQCR2r.js} +266 -547
  16. package/dist/cli-B5zQCR2r.js.map +1 -0
  17. package/dist/{cli-spec-BPZbQG2p.js → cli-spec-BXIBUlaK.js} +46 -18
  18. package/dist/cli-spec-BXIBUlaK.js.map +1 -0
  19. package/dist/cli.js +2 -2
  20. package/dist/{command-BT9a37ZR.js → command-BMHXHqMT.js} +17 -14
  21. package/dist/command-BMHXHqMT.js.map +1 -0
  22. package/dist/command-C94CQNh8.js +91 -0
  23. package/dist/command-C94CQNh8.js.map +1 -0
  24. package/dist/command-CVtgyqlM.js +335 -0
  25. package/dist/command-CVtgyqlM.js.map +1 -0
  26. package/dist/{command-BLfT7vnQ.js → command-CaZgCTIw.js} +13 -17
  27. package/dist/command-CaZgCTIw.js.map +1 -0
  28. package/dist/{command-CMJtHKRa.js → command-DTgBZR0k.js} +6 -6
  29. package/dist/{command-CMJtHKRa.js.map → command-DTgBZR0k.js.map} +1 -1
  30. package/dist/{commands-1p-bIWhN.js → commands-BXzIDB3X.js} +1 -1
  31. package/dist/commands-CjpGBUWr.js +666 -0
  32. package/dist/commands-CjpGBUWr.js.map +1 -0
  33. package/dist/{config-DEgnUiU-.js → config-Dv5MG7Rp.js} +31 -34
  34. package/dist/config-Dv5MG7Rp.js.map +1 -0
  35. package/dist/{context-C1mxXh80.js → context-Dgn48BqT.js} +13 -2
  36. package/dist/context-Dgn48BqT.js.map +1 -0
  37. package/dist/contrasts-CcoMLC_y.js +101 -0
  38. package/dist/contrasts-CcoMLC_y.js.map +1 -0
  39. package/dist/db-BeqRiWLl.js +602 -0
  40. package/dist/db-BeqRiWLl.js.map +1 -0
  41. package/dist/db-CJDRVQal.js +2 -0
  42. package/dist/{dist-B8hJImYt.js → dist-CMjp3qqF.js} +81 -14
  43. package/dist/dist-CMjp3qqF.js.map +1 -0
  44. package/dist/{docker-sZrNrr82.js → docker-BbTlMmYi.js} +2 -2
  45. package/dist/{docker-sZrNrr82.js.map → docker-BbTlMmYi.js.map} +1 -1
  46. package/dist/{docker-7b_2SaH7.js → docker-CCXdbREk.js} +20 -4
  47. package/dist/{docker-7b_2SaH7.js.map → docker-CCXdbREk.js.map} +1 -1
  48. package/dist/{docker-yauK-9X8.js → docker-DC69dKxB.js} +1 -1
  49. package/dist/{doctor-BYNok4UO.js → doctor-CqttrZcs.js} +56 -22
  50. package/dist/doctor-CqttrZcs.js.map +1 -0
  51. package/dist/{egress-C4PZTSSe.js → egress-BfK_O9ce.js} +435 -31
  52. package/dist/egress-BfK_O9ce.js.map +1 -0
  53. package/dist/{environment-DNjRk0nU.js → environment-BBz1Yes9.js} +225 -12
  54. package/dist/environment-BBz1Yes9.js.map +1 -0
  55. package/dist/{evaluate-D4zeRGBF.js → evaluate-CXQ1o-pd.js} +539 -562
  56. package/dist/evaluate-CXQ1o-pd.js.map +1 -0
  57. package/dist/{evaluate-C1UVL21l.d.ts → evaluate-yjZKUexW.d.ts} +2 -2
  58. package/dist/facts-DtENlf9s.js +898 -0
  59. package/dist/facts-DtENlf9s.js.map +1 -0
  60. package/dist/{files-BXUdY8tr.js → files-B-eUpCZ1.js} +30 -7
  61. package/dist/files-B-eUpCZ1.js.map +1 -0
  62. package/dist/files-BsQbYz2i.js +65 -0
  63. package/dist/files-BsQbYz2i.js.map +1 -0
  64. package/dist/{files-DQmHE7pb.js → files-COHQLEHE.js} +6 -17
  65. package/dist/files-COHQLEHE.js.map +1 -0
  66. package/dist/files-DqCBW7i8.js +1 -0
  67. package/dist/files-Ha-jsQXf.js +1 -0
  68. package/dist/generate-Cs2TMH_k.js +1647 -0
  69. package/dist/generate-Cs2TMH_k.js.map +1 -0
  70. package/dist/{git-DfG-YJ1u.js → git-DhykwgKF.js} +2 -2
  71. package/dist/{git-DfG-YJ1u.js.map → git-DhykwgKF.js.map} +1 -1
  72. package/dist/{harness-B8QC9u0O.js → harness-BAjw1fcr.js} +3 -3
  73. package/dist/{harness-B8QC9u0O.js.map → harness-BAjw1fcr.js.map} +1 -1
  74. package/dist/harness.d.ts +1 -1
  75. package/dist/harness.js +1 -1
  76. package/dist/{header-hK-Z_Po9.js → header-kSmWatcO.js} +10 -3
  77. package/dist/{header-hK-Z_Po9.js.map → header-kSmWatcO.js.map} +1 -1
  78. package/dist/{images-0On0cztu.js → images-BmJRuTpm.js} +61 -13
  79. package/dist/images-BmJRuTpm.js.map +1 -0
  80. package/dist/index.d.ts +3 -3
  81. package/dist/index.js +4 -4
  82. package/dist/init-Bwc9byQr.js +543 -0
  83. package/dist/init-Bwc9byQr.js.map +1 -0
  84. package/dist/init-D7Y1ny1z.js +1 -0
  85. package/dist/insights-B2Xmhz9o.js +64 -0
  86. package/dist/insights-B2Xmhz9o.js.map +1 -0
  87. package/dist/{invocations-DbGfBAA_.js → invocations-CQTbP092.js} +3 -3
  88. package/dist/{invocations-DbGfBAA_.js.map → invocations-CQTbP092.js.map} +1 -1
  89. package/dist/{judge-DW_GDOmB.js → judge-Dt6KW6_O.js} +5 -3
  90. package/dist/judge-Dt6KW6_O.js.map +1 -0
  91. package/dist/judge.d.ts +7 -6
  92. package/dist/judge.js +8 -7
  93. package/dist/judge.js.map +1 -1
  94. package/dist/{live-jlfszAbb.js → live-DYd2QEyR.js} +2 -2
  95. package/dist/{live-jlfszAbb.js.map → live-DYd2QEyR.js.map} +1 -1
  96. package/dist/{model-h_cDtcRr.js → model-B-mel-Gv.js} +46 -20
  97. package/dist/model-B-mel-Gv.js.map +1 -0
  98. package/dist/model-BGKYVpoj.js +1 -0
  99. package/dist/{model-DaVCY3rb.js → model-C7tSwT7f.js} +2 -2
  100. package/dist/{model-DaVCY3rb.js.map → model-C7tSwT7f.js.map} +1 -1
  101. package/dist/{model-oqcDplJG.js → model-CWlAqmbU.js} +150 -46
  102. package/dist/model-CWlAqmbU.js.map +1 -0
  103. package/dist/model-DHY-dfoO.js +1 -0
  104. package/dist/{node-B3ydHo6t.js → node-D0mtjRAO.js} +3 -3
  105. package/dist/{node-B3ydHo6t.js.map → node-D0mtjRAO.js.map} +1 -1
  106. package/dist/{options-Bh2W63dK.js → options-CPUW97_7.js} +9 -12
  107. package/dist/options-CPUW97_7.js.map +1 -0
  108. package/dist/{pairs-CnInRu-G.js → pairs-DP6XOJby.js} +2 -2
  109. package/dist/{pairs-CnInRu-G.js.map → pairs-DP6XOJby.js.map} +1 -1
  110. package/dist/{patch-Zac5aIRM.js → patch-D4oluWzH.js} +2 -2
  111. package/dist/{patch-Zac5aIRM.js.map → patch-D4oluWzH.js.map} +1 -1
  112. package/dist/{plan-C9Cy27Ay.js → plan-OkwUcJQ9.js} +31 -12
  113. package/dist/plan-OkwUcJQ9.js.map +1 -0
  114. package/dist/plugins-CUWMnSNb.js +654 -0
  115. package/dist/plugins-CUWMnSNb.js.map +1 -0
  116. package/dist/{preflight-CPWpQeBI.js → preflight-B6pY89bF.js} +1 -1
  117. package/dist/{preflight-D7iFPKeK.js → preflight-Bjm7_ylE.js} +14 -10
  118. package/dist/preflight-Bjm7_ylE.js.map +1 -0
  119. package/dist/{prepare-doGxaAGR.js → prepare-CQmK3SBn.js} +71 -24
  120. package/dist/prepare-CQmK3SBn.js.map +1 -0
  121. package/dist/prepare-DbdgtZKe.js +2 -0
  122. package/dist/{provenance-DmE9uPVt.js → provenance-B3Y17oCC.js} +2 -2
  123. package/dist/{provenance-DmE9uPVt.js.map → provenance-B3Y17oCC.js.map} +1 -1
  124. package/dist/providers-CXN2RFz-.js +1 -0
  125. package/dist/{providers-tAOD1NQN.js → providers-eoniqK6w.js} +24 -10
  126. package/dist/providers-eoniqK6w.js.map +1 -0
  127. package/dist/query-CLRZmWBT.js +139 -0
  128. package/dist/query-CLRZmWBT.js.map +1 -0
  129. package/dist/query-CmBDYt0_.js +1 -0
  130. package/dist/{questions-DjAwMxZ3.js → questions-1XOulevV.js} +6 -6
  131. package/dist/{questions-DjAwMxZ3.js.map → questions-1XOulevV.js.map} +1 -1
  132. package/dist/{record-BKmMvZ6O.js → record-kk9M1hj-.js} +8 -4
  133. package/dist/record-kk9M1hj-.js.map +1 -0
  134. package/dist/remarks-1521zwfW.js +38 -0
  135. package/dist/remarks-1521zwfW.js.map +1 -0
  136. package/dist/remarks-BhAV1H4V.js +1 -0
  137. package/dist/remarks-DlJCqWRs.js +278 -0
  138. package/dist/remarks-DlJCqWRs.js.map +1 -0
  139. package/dist/{remote-HDRt16ew.js → remote-cE2VWfkJ.js} +3 -3
  140. package/dist/{remote-HDRt16ew.js.map → remote-cE2VWfkJ.js.map} +1 -1
  141. package/dist/resolve-C4zeccCH.js +724 -0
  142. package/dist/resolve-C4zeccCH.js.map +1 -0
  143. package/dist/resolve-D30yZYmB.js +1 -0
  144. package/dist/{results-DuauQI3Z.js → results-Drtt0uFl.js} +33 -7
  145. package/dist/results-Drtt0uFl.js.map +1 -0
  146. package/dist/{resume-BRfa8E_s.js → resume-BEFazUfy.js} +4 -4
  147. package/dist/{resume-BRfa8E_s.js.map → resume-BEFazUfy.js.map} +1 -1
  148. package/dist/rules-BFzQqPIm.js +317 -0
  149. package/dist/rules-BFzQqPIm.js.map +1 -0
  150. package/dist/run-BeMy92Us.js +88 -0
  151. package/dist/run-BeMy92Us.js.map +1 -0
  152. package/dist/{sandbox-D3A8oUb7.js → sandbox-CQaJj7n9.js} +2 -2
  153. package/dist/{sandbox-D3A8oUb7.js.map → sandbox-CQaJj7n9.js.map} +1 -1
  154. package/dist/sandbox.d.ts +1 -1
  155. package/dist/sandbox.js +1 -1
  156. package/dist/server-V4-2w0l8.js +1 -0
  157. package/dist/{server-XDleKaF_.js → server-xK0les4f.js} +8 -8
  158. package/dist/{server-XDleKaF_.js.map → server-xK0les4f.js.map} +1 -1
  159. package/dist/{shared-DYpIb1BI.js → shared-CA61BuPJ.js} +25 -3
  160. package/dist/shared-CA61BuPJ.js.map +1 -0
  161. package/dist/source-BDow_oW8.js +1 -0
  162. package/dist/{source-C8xumIWj.js → source-Q1hEKbCs.js} +2 -2
  163. package/dist/{source-C8xumIWj.js.map → source-Q1hEKbCs.js.map} +1 -1
  164. package/dist/src-B9L9yGKI.js +1 -0
  165. package/dist/{src-ofUaYbuY.js → src-Bcah6ZkT.js} +1 -1
  166. package/dist/{src-DvCg0NBs.js → src-BhmaorOU.js} +28 -6
  167. package/dist/{src-DvCg0NBs.js.map → src-BhmaorOU.js.map} +1 -1
  168. package/dist/{src-CF17Ug08.js → src-C0CeKiLU.js} +19 -4
  169. package/dist/{src-CF17Ug08.js.map → src-C0CeKiLU.js.map} +1 -1
  170. package/dist/src-C0xowZ3C.js +2 -0
  171. package/dist/src-CHIfIKUu.js +2 -0
  172. package/dist/src-DLtyz4w5.js +2 -0
  173. package/dist/src-DPIjmReZ.js +2 -0
  174. package/dist/{src-C_lPtowT.js → src-DXNh5mTr.js} +1 -1
  175. package/dist/{src-FGXhkEkH.js → src-DiLMkIr9.js} +142 -13
  176. package/dist/src-DiLMkIr9.js.map +1 -0
  177. package/dist/{src-B7treWa8.js → src-LekQrr_S.js} +324 -32
  178. package/dist/src-LekQrr_S.js.map +1 -0
  179. package/dist/src-bCnsA6Vp.js +2 -0
  180. package/dist/{src-u8_ixn_F.js → src-cbCb-MPy.js} +20 -4
  181. package/dist/src-cbCb-MPy.js.map +1 -0
  182. package/dist/{src-DvK0EIZx.js → src-qGoFkuJF.js} +55 -6
  183. package/dist/{src-DvK0EIZx.js.map → src-qGoFkuJF.js.map} +1 -1
  184. package/dist/{src-jzagbuqH.js → src-ynBVosfX.js} +1 -1
  185. package/dist/state-BQR_BCm4.js +1 -0
  186. package/dist/{state-C__9swoG.js → state-BmZ8QVZ8.js} +12 -12
  187. package/dist/{state-C__9swoG.js.map → state-BmZ8QVZ8.js.map} +1 -1
  188. package/dist/studio-app/assets/index-CnYJijyI.js +58 -0
  189. package/dist/studio-app/index.html +1 -1
  190. package/dist/suite-BaHPmAGy.js +1 -0
  191. package/dist/suite-C8sw2pox.js +481 -0
  192. package/dist/suite-C8sw2pox.js.map +1 -0
  193. package/dist/summary-0oQNGskv.js +837 -0
  194. package/dist/summary-0oQNGskv.js.map +1 -0
  195. package/dist/testing.d.ts +2 -2
  196. package/dist/testing.js +2 -2
  197. package/dist/{text-gEcKjAyp.js → text-CrVy5ioL.js} +18 -2
  198. package/dist/text-CrVy5ioL.js.map +1 -0
  199. package/dist/{transcript-BNNANU8A.js → transcript-BTxJpW4R.js} +2 -2
  200. package/dist/{transcript-BNNANU8A.js.map → transcript-BTxJpW4R.js.map} +1 -1
  201. package/dist/types-C5vI3g1C.js.map +1 -1
  202. package/dist/{types-g17bRAzt.d.ts → types-GraZtfHN.d.ts} +858 -39
  203. package/dist/usage-BDo2q_yu.js +1 -0
  204. package/dist/{command-Bge8F7Ko.js → validate-BdoXUuL_.js} +35 -383
  205. package/dist/validate-BdoXUuL_.js.map +1 -0
  206. package/dist/view/index.d.ts +20 -9
  207. package/dist/view/index.js +7 -6
  208. package/dist/views-BoUoX4_A.js +125 -0
  209. package/dist/views-BoUoX4_A.js.map +1 -0
  210. package/dist/views-noVQNCUP.js +2 -0
  211. package/dist/{worker-entry-yOchGYYv.js → worker-entry-D0-GErmU.js} +2 -2
  212. package/dist/{worker-entry-yOchGYYv.js.map → worker-entry-D0-GErmU.js.map} +1 -1
  213. package/dist/{workspace-D8sSgpiy.js → workspace-B90YDU_a.js} +1 -1
  214. package/dist/{workspace-CgyHEM0l.js → workspace-tjZFkjxC.js} +4 -4
  215. package/dist/{workspace-CgyHEM0l.js.map → workspace-tjZFkjxC.js.map} +1 -1
  216. package/package.json +10 -8
  217. package/skills/eval-rubric/SKILL.md +130 -0
  218. package/dist/agent-CURAwx_q.js +0 -334
  219. package/dist/agent-CURAwx_q.js.map +0 -1
  220. package/dist/assemble-B9Alds-z.js.map +0 -1
  221. package/dist/assemble-J5MukZFY.js +0 -1
  222. package/dist/capture-jquXZBKK.js +0 -1
  223. package/dist/cli-D303Vj5N.js.map +0 -1
  224. package/dist/cli-spec-BPZbQG2p.js.map +0 -1
  225. package/dist/command-BLfT7vnQ.js.map +0 -1
  226. package/dist/command-BT9a37ZR.js.map +0 -1
  227. package/dist/command-Bge8F7Ko.js.map +0 -1
  228. package/dist/command-BkFjijN2.js +0 -1
  229. package/dist/commands-BFx16WB8.js +0 -225
  230. package/dist/commands-BFx16WB8.js.map +0 -1
  231. package/dist/config-DEgnUiU-.js.map +0 -1
  232. package/dist/context-C1mxXh80.js.map +0 -1
  233. package/dist/db-CdHizc4_.js +0 -1406
  234. package/dist/db-CdHizc4_.js.map +0 -1
  235. package/dist/db-Dm1cRJJP.js +0 -2
  236. package/dist/dist-B8hJImYt.js.map +0 -1
  237. package/dist/doctor-BYNok4UO.js.map +0 -1
  238. package/dist/duration-CEOQww97.js +0 -26
  239. package/dist/duration-CEOQww97.js.map +0 -1
  240. package/dist/egress-C4PZTSSe.js.map +0 -1
  241. package/dist/environment-DNjRk0nU.js.map +0 -1
  242. package/dist/evaluate-D4zeRGBF.js.map +0 -1
  243. package/dist/family-D2b7WD10.js +0 -67
  244. package/dist/family-D2b7WD10.js.map +0 -1
  245. package/dist/files-BXUdY8tr.js.map +0 -1
  246. package/dist/files-BhyltlDB.js +0 -1
  247. package/dist/files-DQmHE7pb.js.map +0 -1
  248. package/dist/files-ZZPqfAo6.js +0 -1
  249. package/dist/images-0On0cztu.js.map +0 -1
  250. package/dist/init-B77Rpcqc.js +0 -360
  251. package/dist/init-B77Rpcqc.js.map +0 -1
  252. package/dist/init-BrOWin3W.js +0 -1
  253. package/dist/judge-DW_GDOmB.js.map +0 -1
  254. package/dist/model-NM3ID0uR.js +0 -1
  255. package/dist/model-h_cDtcRr.js.map +0 -1
  256. package/dist/model-nwWJvaUR.js +0 -1
  257. package/dist/model-oqcDplJG.js.map +0 -1
  258. package/dist/options-Bh2W63dK.js.map +0 -1
  259. package/dist/plan-C9Cy27Ay.js.map +0 -1
  260. package/dist/preflight-D7iFPKeK.js.map +0 -1
  261. package/dist/prepare-BGjePFQl.js +0 -2
  262. package/dist/prepare-doGxaAGR.js.map +0 -1
  263. package/dist/process-CSVO_jsc.js +0 -119
  264. package/dist/process-CSVO_jsc.js.map +0 -1
  265. package/dist/providers-gDMko8fl.js +0 -1
  266. package/dist/providers-tAOD1NQN.js.map +0 -1
  267. package/dist/query-Bes9Kh6Y.js +0 -91
  268. package/dist/query-Bes9Kh6Y.js.map +0 -1
  269. package/dist/query-C_G_svLU.js +0 -1
  270. package/dist/record-BKmMvZ6O.js.map +0 -1
  271. package/dist/results-DuauQI3Z.js.map +0 -1
  272. package/dist/server-C7sg1ndo.js +0 -1
  273. package/dist/shared-DYpIb1BI.js.map +0 -1
  274. package/dist/source-fGd0SaKP.js +0 -1
  275. package/dist/src-B7treWa8.js.map +0 -1
  276. package/dist/src-DNnG4e4R.js +0 -2
  277. package/dist/src-DTbrY1hi.js +0 -2
  278. package/dist/src-DdyJEh2v.js +0 -2
  279. package/dist/src-Dj9PAroc.js +0 -2
  280. package/dist/src-Du8H85Qq.js +0 -2
  281. package/dist/src-FGXhkEkH.js.map +0 -1
  282. package/dist/src-pJZOrYR9.js +0 -1
  283. package/dist/src-u8_ixn_F.js.map +0 -1
  284. package/dist/state-CgjQo29K.js +0 -1
  285. package/dist/studio-app/assets/index-DrQc2Yxd.js +0 -58
  286. package/dist/summary-BLAVLySU.js +0 -385
  287. package/dist/summary-BLAVLySU.js.map +0 -1
  288. package/dist/summary-DgyjUh_l.js +0 -192
  289. package/dist/summary-DgyjUh_l.js.map +0 -1
  290. package/dist/text-gEcKjAyp.js.map +0 -1
  291. package/dist/tools-GCyNYSc1.js +0 -249
  292. package/dist/tools-GCyNYSc1.js.map +0 -1
  293. package/dist/views-BW6oCDUQ.js +0 -2
  294. package/dist/views-BmQF4UCI.js +0 -225
  295. package/dist/views-BmQF4UCI.js.map +0 -1
@@ -0,0 +1,602 @@
1
+ import { n as toolTarget } from "./tool-target-D2mcYlSQ.js";
2
+ import { n as UsageError } from "./errors-B6BSMs03.js";
3
+ import { t as RUN_ID } from "./paths-BmR-7tx3.js";
4
+ import { c as relativeFile, l as sha256 } from "./ids-Bp6ut7ZD.js";
5
+ import { d as ownRequire, t as BUILD_ID } from "./root-DICDHCtp.js";
6
+ import { n as isRuntimeState } from "./context-Dgn48BqT.js";
7
+ import { r as pairTallies } from "./pairs-DP6XOJby.js";
8
+ import { m as warnUnreadable, p as scratchDir, s as readRecord, u as recordNames } from "./files-B-eUpCZ1.js";
9
+ import { a as classifyCall, n as DERIVED_TABLES, o as rowsOf, r as deriveFacts, t as DERIVED } from "./facts-DtENlf9s.js";
10
+ import { dirname, join } from "node:path";
11
+ import { mkdir, readFile, stat } from "node:fs/promises";
12
+ //#region src/history/db.ts
13
+ /** Bump when the tables or views change: a database from another version is rebuilt. */
14
+ const DB_VERSION = 13;
15
+ /** This build of reeval, like the header cache: another reeval re-derives every row. */
16
+ const BUILD = BUILD_ID;
17
+ const historyDbPath = (root) => join(root, ".reeval", "history.db");
18
+ /** `node:sqlite` is in Node from 22.13 (package `engines`); before 24 it warns on load. */
19
+ const SQLITE_NODE = "22.13.0";
20
+ function nodeAtLeast(version, min = SQLITE_NODE) {
21
+ const [a = 0, b = 0, c = 0] = version.replace(/^v/, "").split(".").map(Number);
22
+ const [x = 0, y = 0, z = 0] = min.split(".").map(Number);
23
+ return a !== x ? a > x : b !== y ? b > y : c >= z;
24
+ }
25
+ function loadSqlite() {
26
+ if (!nodeAtLeast(process.versions.node)) throw new UsageError(`reeval query needs Node ${SQLITE_NODE} or later for node:sqlite (this is Node ${process.versions.node}).`);
27
+ const emit = process.emitWarning;
28
+ process.emitWarning = ((warning, ...rest) => {
29
+ const text = typeof warning === "string" ? warning : warning.message;
30
+ if (/SQLite/.test(text)) return;
31
+ return emit.call(process, warning, ...rest);
32
+ });
33
+ try {
34
+ return ownRequire("node:sqlite");
35
+ } finally {
36
+ process.emitWarning = emit;
37
+ }
38
+ }
39
+ const TABLES = `
40
+ CREATE TABLE meta (key TEXT PRIMARY KEY, value TEXT NOT NULL);
41
+ -- The record file each run was read from, and its size and mtime when it was.
42
+ CREATE TABLE files (run_id TEXT PRIMARY KEY, path TEXT NOT NULL, size INTEGER NOT NULL, mtime_ms REAL NOT NULL);
43
+ CREATE TABLE runs (
44
+ run_id TEXT PRIMARY KEY, recorded INTEGER NOT NULL, status TEXT, started_at TEXT, ended_at TEXT,
45
+ duration_ms INTEGER, author TEXT, git_sha TEXT, branch TEXT, dirty INTEGER, runner TEXT,
46
+ ci_provider TEXT, ci_url TEXT, pr_number INTEGER, pr_base TEXT, reeval TEXT, judge_model TEXT,
47
+ judge_version TEXT, profile TEXT, evals INTEGER, attempts INTEGER, pass INTEGER, fail INTEGER,
48
+ not_gated INTEGER, infra_error INTEGER, skipped INTEGER
49
+ );
50
+ CREATE TABLE evals (
51
+ run_id TEXT NOT NULL, key TEXT NOT NULL, id TEXT, slug TEXT, file TEXT, groups TEXT, name TEXT,
52
+ tags TEXT, fingerprint TEXT, outcome TEXT, pass_at_1 REAL, sources TEXT, family_id TEXT,
53
+ case_index INTEGER,
54
+ PRIMARY KEY (run_id, key)
55
+ );
56
+ -- Each pooled evaluate.each per run: its cases, and each cell's pass@1 over them (the mean of the
57
+ -- cases' pass@1).
58
+ CREATE TABLE families (
59
+ run_id TEXT NOT NULL, family_id TEXT NOT NULL, file TEXT, groups TEXT, name TEXT,
60
+ cases INTEGER, ran INTEGER, cell_key TEXT NOT NULL, cell_cases INTEGER, pass INTEGER,
61
+ counted INTEGER, pass_at_1 REAL, lo REAL, hi REAL, method TEXT, outcome TEXT,
62
+ PRIMARY KEY (run_id, family_id, cell_key)
63
+ );
64
+ -- Every compare-question vote: a pair of sides (arms within a harness, harnesses across an arm)
65
+ -- on one run, shown in one order (swapped = 1: b first), and the side picked or 'tie'.
66
+ CREATE TABLE votes (
67
+ run_id TEXT NOT NULL, eval_key TEXT NOT NULL, question TEXT NOT NULL, cut TEXT, held TEXT,
68
+ pair_run INTEGER, a TEXT, b TEXT, winner TEXT, swapped INTEGER, reason TEXT
69
+ );
70
+ -- Each pair of sides' head-to-head per question: a pair decides when both orders agree (or one
71
+ -- ties); a split is a pair whose orders picked opposite sides, split_first those that picked
72
+ -- the side shown first both times.
73
+ CREATE TABLE question_pairs_m (
74
+ run_id TEXT NOT NULL, eval_key TEXT NOT NULL, question TEXT NOT NULL, cut TEXT, held TEXT,
75
+ a TEXT, b TEXT, pairs INTEGER, a_wins INTEGER, b_wins INTEGER, ties INTEGER, splits INTEGER,
76
+ splits_first INTEGER
77
+ );
78
+ CREATE TABLE family_lift_m (
79
+ run_id TEXT NOT NULL, family_id TEXT NOT NULL, name TEXT, harness TEXT, variant TEXT,
80
+ cell_key TEXT, control TEXT,
81
+ pairs INTEGER, variant_pass_at_1 REAL, control_pass_at_1 REAL, discordant_vc INTEGER,
82
+ discordant_cv INTEGER, points REAL, lo REAL, hi REAL, method TEXT, p REAL,
83
+ within_noise INTEGER, verdict TEXT, min_lift REAL, outcome TEXT, tools_ratio REAL,
84
+ tools_p REAL, effort_verdict TEXT, agent_s_ratio REAL, agent_s_p REAL, time_verdict TEXT,
85
+ tokens_ratio REAL, tokens_p REAL, tokens_verdict TEXT
86
+ );
87
+ CREATE TABLE cells (
88
+ run_id TEXT NOT NULL, eval_key TEXT NOT NULL, key TEXT NOT NULL, role TEXT, variant TEXT,
89
+ harness TEXT, harness_kind TEXT, model TEXT, reasoning_effort TEXT, environment TEXT,
90
+ environment_digest TEXT, sandbox TEXT, gate TEXT, gate_pass_rate REAL, fingerprint TEXT,
91
+ fp_sources TEXT, fp_harness TEXT, fp_environment TEXT, fp_image TEXT, fp_agent_cli TEXT,
92
+ fp_judge TEXT, fp_context TEXT, runs INTEGER, pass INTEGER, fail INTEGER, infra_error INTEGER,
93
+ skipped INTEGER, pass_at_1 REAL, outcome TEXT, lift_vs TEXT, lift_points REAL, lift_lo REAL,
94
+ lift_hi REAL, within_noise INTEGER, min_lift REAL, comparable TEXT,
95
+ PRIMARY KEY (run_id, eval_key, key)
96
+ );
97
+ CREATE TABLE attempts (
98
+ run_id TEXT NOT NULL, eval_key TEXT NOT NULL, cell_key TEXT NOT NULL, key TEXT NOT NULL,
99
+ id TEXT, n INTEGER, seq INTEGER, started_at TEXT, outcome TEXT, error_kind TEXT,
100
+ error_message TEXT, duration_ms INTEGER, image_id TEXT, turns INTEGER, tools INTEGER,
101
+ file_edits INTEGER, setup_ms INTEGER, agent_ms INTEGER, checks_ms INTEGER, judge_ms INTEGER,
102
+ last_text TEXT, input_tokens INTEGER, output_tokens INTEGER, cache_read_tokens INTEGER,
103
+ cache_write_tokens INTEGER, reasoning_tokens INTEGER, served_model TEXT, oom_kills INTEGER,
104
+ reasoning_effort TEXT, served_reasoning_effort TEXT,
105
+ PRIMARY KEY (run_id, key)
106
+ );
107
+ CREATE TABLE judgements (
108
+ run_id TEXT NOT NULL, attempt_key TEXT NOT NULL, key TEXT NOT NULL, question TEXT,
109
+ verdict TEXT, score REAL, threshold REAL, model TEXT, resolved_model TEXT, input_path TEXT,
110
+ PRIMARY KEY (run_id, attempt_key, key)
111
+ );
112
+ CREATE TABLE environments (
113
+ run_id TEXT NOT NULL, name TEXT NOT NULL, digest TEXT NOT NULL, parent TEXT, overrides TEXT,
114
+ PRIMARY KEY (run_id, digest)
115
+ );
116
+ CREATE TABLE env_skills (
117
+ run_id TEXT NOT NULL, digest TEXT NOT NULL, name TEXT NOT NULL, source TEXT, commit_sha TEXT,
118
+ sha256 TEXT, placement TEXT
119
+ );
120
+ CREATE TABLE artifacts (
121
+ run_id TEXT NOT NULL, attempt_key TEXT NOT NULL, kind TEXT NOT NULL, path TEXT NOT NULL,
122
+ sha256 TEXT, bytes INTEGER
123
+ );
124
+ -- What the agent could see, by content hash; runtime = 1 for an agent CLI's own session state,
125
+ -- declared = 1 for a file the environment declared (its skills' files, rules and config).
126
+ CREATE TABLE attempt_context (
127
+ run_id TEXT NOT NULL, attempt_key TEXT NOT NULL, path TEXT NOT NULL, sha256 TEXT, runtime INTEGER,
128
+ declared INTEGER
129
+ );
130
+ -- Every tool call in each attempt's transcript: its line in transcript.jsonl (from 1), target and
131
+ -- class (context, dependency, web, verify or workspace: a heuristic, see tool-class.ts).
132
+ CREATE TABLE tool_calls (
133
+ run_id TEXT NOT NULL, attempt_key TEXT NOT NULL, line INTEGER NOT NULL, turn INTEGER,
134
+ tool TEXT, target TEXT, ok INTEGER, duration_ms INTEGER, class TEXT
135
+ );
136
+ -- Each placed file a tool call named (directly or through a glob), by the call's line.
137
+ CREATE TABLE context_reads (
138
+ run_id TEXT NOT NULL, attempt_key TEXT NOT NULL, line INTEGER NOT NULL, path TEXT NOT NULL
139
+ );
140
+ -- Each stdio MCP server start in each attempt's turns (turn from 1): ms from spawning it to its
141
+ -- answer to initialize, null when it never answered.
142
+ CREATE TABLE mcp_startup (
143
+ run_id TEXT NOT NULL, attempt_key TEXT NOT NULL, turn INTEGER NOT NULL, server TEXT NOT NULL, ms INTEGER
144
+ );
145
+ -- Every expect / expect.soft matcher call each attempt made, in call order (seq from 1).
146
+ CREATE TABLE assertions (
147
+ run_id TEXT NOT NULL, attempt_key TEXT NOT NULL, eval_key TEXT NOT NULL, cell_key TEXT NOT NULL,
148
+ seq INTEGER NOT NULL, label TEXT NOT NULL, labelled INTEGER, matcher TEXT, status TEXT,
149
+ soft INTEGER, message TEXT, duration_ms INTEGER
150
+ );
151
+ -- Each check (assertion label) per cell over its counted attempts; on a variant, its control's too.
152
+ CREATE TABLE cell_checks (
153
+ run_id TEXT NOT NULL, eval_key TEXT NOT NULL, cell_key TEXT NOT NULL, label TEXT NOT NULL,
154
+ pass INTEGER, fail INTEGER, error INTEGER, not_run INTEGER, control_pass INTEGER,
155
+ control_fail INTEGER, control_error INTEGER, control_not_run INTEGER, verdict TEXT
156
+ );
157
+ ${DERIVED_TABLES}
158
+ CREATE INDEX assertions_by_attempt ON assertions (run_id, attempt_key);
159
+ CREATE INDEX cells_by_eval ON cells (eval_key, key);
160
+ CREATE INDEX tool_calls_by_attempt ON tool_calls (run_id, attempt_key);
161
+ CREATE INDEX context_by_attempt ON attempt_context (run_id, attempt_key);
162
+ CREATE INDEX context_reads_by_attempt ON context_reads (run_id, attempt_key);
163
+ CREATE INDEX attempts_by_cell ON attempts (run_id, eval_key, cell_key);
164
+ CREATE INDEX env_skills_by_digest ON env_skills (run_id, digest);
165
+ `;
166
+ /** Canned questions about the history, as views to filter. */
167
+ const VIEWS = `
168
+ -- Variant against control, per harness, per run.
169
+ CREATE VIEW lift AS
170
+ SELECT c.run_id, r.started_at, r.branch, c.eval_key, c.harness, c.model, c.variant,
171
+ c.lift_vs AS control, c.pass AS variant_pass, c.pass + c.fail AS variant_counted,
172
+ k.pass AS control_pass, k.pass + k.fail AS control_counted, c.pass_at_1 AS variant_pass_at_1,
173
+ k.pass_at_1 AS control_pass_at_1, c.lift_points AS points,
174
+ c.lift_lo AS lo, c.lift_hi AS hi, c.within_noise, c.min_lift, c.outcome, c.fingerprint
175
+ FROM cells c JOIN runs r USING (run_id)
176
+ JOIN cells k ON k.run_id = c.run_id AND k.eval_key = c.eval_key AND k.key = c.lift_vs
177
+ WHERE c.role = 'variant';
178
+
179
+ -- Each variant against its control over a pooled evaluate.each's cases, paired by case, per run.
180
+ CREATE VIEW family_lift AS
181
+ SELECT f.*, r.started_at, r.branch
182
+ FROM family_lift_m f JOIN runs r USING (run_id);
183
+
184
+ -- Cells with mixed outcomes, pooled over runs whose fingerprints match once agent runtime state is
185
+ -- left out; 'flaky' needs FLAKY_MIN_ATTEMPTS counted attempts, else 'insufficient'.
186
+ CREATE VIEW flaky_cells AS SELECT * FROM flaky_m;
187
+
188
+ -- Each run where a cell's fingerprint differs from its previous run: which parts, which context
189
+ -- paths, and noise = 1 when only agent runtime state changed (not a real change).
190
+ CREATE VIEW drift AS SELECT * FROM drift_m;
191
+
192
+ -- Each check per cell, comparable fingerprint and branch over recorded runs: how many newest runs
193
+ -- in a row it passed with no fail or error (on a variant, passed on both sides), their tries, and
194
+ -- the run that ended the streak (null: it never failed).
195
+ CREATE VIEW check_streaks AS SELECT * FROM check_streaks_m;
196
+
197
+ -- Tool calls, agent time and tokens per cell, and a variant's against its control in the same run.
198
+ CREATE VIEW effort AS SELECT * FROM effort_m;
199
+
200
+ -- Each pair of arms (cells a and b) on one harness and sandbox, when an eval has two variants or
201
+ -- more: pass@1 lift of a over b, effort with its verdicts and separation, and the checks that
202
+ -- tell them apart. A variant against its control is here too; gating stays variant vs control.
203
+ CREATE VIEW contrasts AS SELECT * FROM contrasts_m;
204
+
205
+ -- Each compare question's pairs of sides, head to head: wins when both orders agree, and splits
206
+ -- when the order decided. The pooled win rate counts a split as a win for each side.
207
+ CREATE VIEW question_pairs AS SELECT * FROM question_pairs_m;
208
+
209
+ -- What a factor (environment, harness, model) did, by evidence tier: controlled (one run),
210
+ -- pooled (comparable runs, and across evals), observed (over time), not_measured (one level).
211
+ CREATE VIEW factor_effects AS SELECT * FROM factor_effects_m;
212
+
213
+ -- Whether each attempt read each skill its environment placed, and at which transcript line.
214
+ -- A read is a tool whose target is under skills/<name>/, or a dedicated load
215
+ -- (OpenCode skill, Goose load_skill) whose target is the skill name.
216
+ CREATE VIEW skill_reads AS
217
+ SELECT a.run_id, a.eval_key, a.cell_key, a.key AS attempt_key, a.id AS attempt_id, c.variant,
218
+ s.name AS skill, s.placement,
219
+ (SELECT MIN(t.line) FROM tool_calls t WHERE t.run_id = a.run_id AND t.attempt_key = a.key
220
+ AND (t.target LIKE '%skills/' || s.name || '/%'
221
+ OR (t.tool IN ('skill', 'Skill', 'load_skill') AND t.target = s.name))) AS read_line,
222
+ (SELECT COUNT(*) FROM tool_calls t WHERE t.run_id = a.run_id AND t.attempt_key = a.key
223
+ AND (t.target LIKE '%skills/' || s.name || '/%'
224
+ OR (t.tool IN ('skill', 'Skill', 'load_skill') AND t.target = s.name))) AS reads
225
+ FROM attempts a
226
+ JOIN cells c ON c.run_id = a.run_id AND c.eval_key = a.eval_key AND c.key = a.cell_key
227
+ JOIN env_skills s ON s.run_id = c.run_id AND s.digest = c.environment_digest;
228
+
229
+ -- Tool calls per attempt by class: context (a placed skill, rules file or other placed file, a
230
+ -- skill load, an MCP tool of the environment), dependency (node_modules, site-packages, vendor,
231
+ -- --help), web, verify (a command the eval's checks run, or test/build/lint/tsc) and workspace.
232
+ -- A heuristic: shell commands are split into words and exclusions are not counted.
233
+ CREATE VIEW context_use AS
234
+ SELECT a.run_id, a.eval_key, a.cell_key, c.environment, a.key AS attempt_key, a.id AS attempt_id,
235
+ t.class, COUNT(*) AS calls, MIN(t.line) AS first_line,
236
+ (SELECT x.target FROM tool_calls x WHERE x.run_id = a.run_id AND x.attempt_key = a.key
237
+ AND x.class = t.class ORDER BY x.line LIMIT 1) AS example
238
+ FROM tool_calls t
239
+ JOIN attempts a ON a.run_id = t.run_id AND a.key = t.attempt_key
240
+ JOIN cells c ON c.run_id = a.run_id AND c.eval_key = a.eval_key AND c.key = a.cell_key
241
+ GROUP BY a.run_id, a.key, t.class;
242
+
243
+ -- Each file the environment declared (its skills' files, rules), per attempt: how many tool calls
244
+ -- named it, directly or through a glob, and the first one's transcript line (null: never read).
245
+ CREATE VIEW skill_files AS
246
+ SELECT a.run_id, a.eval_key, a.cell_key, c.environment, a.key AS attempt_key,
247
+ a.id AS attempt_id, x.path,
248
+ (SELECT COUNT(*) FROM context_reads r WHERE r.run_id = a.run_id AND r.attempt_key = a.key
249
+ AND r.path = x.path) AS reads,
250
+ (SELECT MIN(r.line) FROM context_reads r WHERE r.run_id = a.run_id AND r.attempt_key = a.key
251
+ AND r.path = x.path) AS first_line
252
+ FROM attempt_context x
253
+ JOIN attempts a ON a.run_id = x.run_id AND a.key = x.attempt_key
254
+ JOIN cells c ON c.run_id = a.run_id AND c.eval_key = a.eval_key AND c.key = a.cell_key
255
+ WHERE x.declared = 1;
256
+
257
+ -- Failed attempts and infra errors (an OOM kill among them) with the cell's harness, model, each
258
+ -- of its environment's skills and the label of the first check that failed.
259
+ CREATE VIEW failing_attempts AS
260
+ SELECT a.run_id, r.started_at, a.eval_key, a.key AS attempt_key, a.cell_key, c.harness,
261
+ c.model, c.environment, s.name AS skill, a.outcome, a.error_kind, a.error_message,
262
+ a.duration_ms, a.oom_kills,
263
+ (SELECT x.label FROM assertions x WHERE x.run_id = a.run_id AND x.attempt_key = a.key
264
+ AND x.status = 'fail' ORDER BY x.seq LIMIT 1) AS first_failed_check
265
+ FROM attempts a JOIN runs r USING (run_id)
266
+ JOIN cells c ON c.run_id = a.run_id AND c.eval_key = a.eval_key AND c.key = a.cell_key
267
+ LEFT JOIN env_skills s ON s.run_id = c.run_id AND s.digest = c.environment_digest
268
+ WHERE a.outcome IN ('fail', 'infra_error');
269
+
270
+ -- Each check of a variant cell beside its control's: whether it tells them apart.
271
+ CREATE VIEW check_discrimination AS
272
+ SELECT k.run_id, k.eval_key, c.harness, c.variant, c.key AS cell_key, k.label,
273
+ k.pass AS variant_pass, k.fail AS variant_fail, k.not_run AS variant_not_run,
274
+ k.control_pass, k.control_fail, k.control_not_run, k.verdict
275
+ FROM cell_checks k
276
+ JOIN cells c ON c.run_id = k.run_id AND c.eval_key = k.eval_key AND c.key = k.cell_key
277
+ WHERE c.role = 'variant' AND k.verdict IS NOT NULL;
278
+
279
+ -- Each check (expect label) per cell per run, on every cell (control and variant alike), over the
280
+ -- cell's counted attempts. rate = pass / (pass + fail): an error (the matcher couldn't answer) and
281
+ -- a not-run (a hard expect before it failed) are left out; null when neither passed nor failed.
282
+ CREATE VIEW check_rates AS
283
+ SELECT k.run_id, k.eval_key, k.cell_key, c.harness, c.environment, c.role, k.label, k.pass,
284
+ k.fail, k.error, k.not_run, CAST(k.pass AS REAL) / NULLIF(k.pass + k.fail, 0) AS rate
285
+ FROM cell_checks k
286
+ JOIN cells c ON c.run_id = k.run_id AND c.eval_key = k.eval_key AND c.key = k.cell_key;
287
+
288
+ -- One eval per run: outcome and pass@1, with the branch and pull request.
289
+ CREATE VIEW eval_trend AS
290
+ SELECT e.eval_key, r.run_id, r.started_at, r.branch, r.pr_number, r.recorded, e.outcome,
291
+ e.pass_at_1, e.fingerprint
292
+ FROM (SELECT key AS eval_key, * FROM evals) e JOIN runs r USING (run_id);
293
+
294
+ -- Each judge question's pass rate per cell per run, where it differs from that cell's last run.
295
+ CREATE VIEW verdict_flips AS
296
+ WITH rates AS (
297
+ SELECT j.run_id, a.eval_key, a.cell_key, j.key AS judgement_key, j.question,
298
+ AVG(j.verdict = 'pass') AS pass_rate, COUNT(*) AS n
299
+ FROM judgements j JOIN attempts a ON a.run_id = j.run_id AND a.key = j.attempt_key
300
+ GROUP BY j.run_id, a.eval_key, a.cell_key, j.key
301
+ ), ordered AS (
302
+ SELECT *, LAG(pass_rate) OVER w AS prev_pass_rate, LAG(run_id) OVER w AS prev_run_id
303
+ FROM rates WINDOW w AS (PARTITION BY eval_key, cell_key, judgement_key ORDER BY run_id)
304
+ )
305
+ SELECT run_id, prev_run_id, eval_key, cell_key, judgement_key, question, prev_pass_rate,
306
+ pass_rate, n
307
+ FROM ordered WHERE prev_run_id IS NOT NULL AND pass_rate IS NOT prev_pass_rate;
308
+ `;
309
+ const VIEW_NAMES = [
310
+ "lift",
311
+ "family_lift",
312
+ "effort",
313
+ "contrasts",
314
+ "question_pairs",
315
+ "factor_effects",
316
+ "skill_reads",
317
+ "context_use",
318
+ "skill_files",
319
+ "flaky_cells",
320
+ "drift",
321
+ "failing_attempts",
322
+ "eval_trend",
323
+ "verdict_flips",
324
+ "check_discrimination",
325
+ "check_rates",
326
+ "check_streaks"
327
+ ];
328
+ const json = (value) => JSON.stringify(value);
329
+ /** The agent CLI's home config, which its harness writes (MCP servers, settings), not the eval. */
330
+ const HARNESS_CONFIG = /^~\/.*(^|\/)(config\.(toml|ya?ml|json)|settings(\.local)?\.json|mcp\.json)$/;
331
+ /**
332
+ * A placed file the environment declared: under one of its skills, or a rules file outside any
333
+ * skills directory. Not an agent CLI's own state or home config, its bundled skills or the
334
+ * adapter's skill index.
335
+ */
336
+ const declaredContext = (path, skills) => !isRuntimeState(path) && !path.endsWith("/.ai-sdk-harness-skills.json") && !HARNESS_CONFIG.test(path) && (skills.some((s) => path.includes(`skills/${s}/`)) || !/(^|\/)skills(-[^/]+)?\//.test(path));
337
+ /** `attempts.last_text` is the agent's final message, capped: most "why" questions start there. */
338
+ const LAST_TEXT_LIMIT = 2048;
339
+ /** The tool calls in a transcript.jsonl, numbered by line from 1; lines that aren't JSON are skipped. */
340
+ function toolCalls(transcript) {
341
+ const calls = [];
342
+ transcript.split("\n").forEach((line, i) => {
343
+ if (!line.trim()) return;
344
+ let event;
345
+ try {
346
+ event = JSON.parse(line);
347
+ } catch {
348
+ return;
349
+ }
350
+ if (event?.type !== "tool") return;
351
+ calls.push({
352
+ line: i + 1,
353
+ turn: typeof event.turn === "number" ? event.turn : null,
354
+ tool: String(event.tool ?? ""),
355
+ target: toolTarget(event.input, String(event.tool ?? "")),
356
+ ok: event.ok !== false,
357
+ durationMs: typeof event.durationMs === "number" ? event.durationMs : null
358
+ });
359
+ });
360
+ return calls;
361
+ }
362
+ /** `classifyCall`, but a call its heuristic can't read counts as workspace: one transcript line can't stop the sync. */
363
+ function classifyOrWorkspace(tool, target, ctx) {
364
+ try {
365
+ return classifyCall(tool, target, ctx);
366
+ } catch {
367
+ return {
368
+ class: "workspace",
369
+ files: []
370
+ };
371
+ }
372
+ }
373
+ /**
374
+ * What a cell's results can be pooled on across runs: its fingerprint parts, with the context
375
+ * part replaced by the context files that aren't an agent CLI's own runtime state.
376
+ */
377
+ function comparableFingerprint(cell, attempts) {
378
+ const { context: _context, ...parts } = cell.fingerprintParts;
379
+ const files = /* @__PURE__ */ new Map();
380
+ for (const a of attempts) {
381
+ if (a.cell !== cell.key) continue;
382
+ for (const c of a.context) if (!isRuntimeState(c.path)) files.set(c.path, c.sha256);
383
+ }
384
+ return sha256(json({
385
+ parts,
386
+ context: [...files].sort(([a], [b]) => a < b ? -1 : 1)
387
+ }));
388
+ }
389
+ function insertRun(db, record, recorded, transcripts) {
390
+ const run = (sql, ...values) => db.prepare(sql).run(...values);
391
+ const { runner, summary, git } = record;
392
+ run(`INSERT INTO runs VALUES (${Array(26).fill("?").join(", ")})`, record.runId, recorded ? 1 : 0, record.status, record.startedAt, record.endedAt, record.durationMs, record.author, git?.sha ?? null, git?.branch ?? null, git ? git.dirty ? 1 : 0 : null, runner.kind, runner.kind === "ci" ? runner.provider : null, runner.kind === "ci" ? runner.runUrl : null, runner.kind === "ci" ? runner.pr?.number ?? null : null, runner.kind === "ci" ? runner.pr?.baseRef ?? null : null, record.stack.reeval, record.stack.judge.model, record.stack.judge.version, record.profile?.name ?? null, summary.evals, summary.attempts, summary.pass, summary.fail, summary.notGated, summary.infraError, summary.skipped);
393
+ for (const env of record.environments) {
394
+ run("INSERT OR IGNORE INTO environments VALUES (?, ?, ?, ?, ?)", record.runId, env.name, env.digest, env.parent, json(env.overrides));
395
+ 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);
396
+ }
397
+ const envOf = new Map(record.environments.map((env) => [env.digest, env]));
398
+ for (const e of record.evals) {
399
+ const cellEnv = new Map(e.cells.map((c) => [c.key, c.environmentDigest ?? ""]));
400
+ 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);
401
+ for (const c of e.cells) {
402
+ const p = c.fingerprintParts;
403
+ 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));
404
+ 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);
405
+ }
406
+ for (const answer of e.answers ?? []) {
407
+ for (const v of answer.votes) run(`INSERT INTO votes VALUES (${Array(11).fill("?").join(", ")})`, record.runId, e.key, answer.question, v.cut, v.harness ?? v.arm ?? null, v.run, v.a, v.b, v.winner, v.swapped ? 1 : 0, v.reason ?? null);
408
+ for (const t of pairTallies(answer.votes)) run(`INSERT INTO question_pairs_m VALUES (${Array(13).fill("?").join(", ")})`, record.runId, e.key, answer.question, t.cut, t.held, t.a, t.b, t.pairs, t.aWins, t.bWins, t.ties, t.splits, t.splitsFirst);
409
+ }
410
+ for (const a of e.attempts) {
411
+ 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);
412
+ const env = envOf.get(cellEnv.get(a.cell) ?? "");
413
+ const skills = env?.skills.map((x) => x.name) ?? [];
414
+ 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, declaredContext(c.path, skills) ? 1 : 0);
415
+ for (const [i, t] of a.turns.entries()) for (const m of t.mcpStartup ?? []) run("INSERT INTO mcp_startup VALUES (?, ?, ?, ?, ?)", record.runId, a.key, i + 1, m.server, m.ms);
416
+ 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);
417
+ const transcript = transcripts.get(a.key);
418
+ const ctx = {
419
+ skills,
420
+ files: a.context.map((c) => c.path).filter((p) => declaredContext(p, skills)),
421
+ mcp: env?.mcp ?? [],
422
+ verify: a.checks.map((c) => c.command)
423
+ };
424
+ for (const t of transcript ? toolCalls(transcript) : []) {
425
+ const call = classifyOrWorkspace(t.tool, t.target, ctx);
426
+ run("INSERT INTO tool_calls VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", record.runId, a.key, t.line, t.turn, t.tool, t.target, t.ok ? 1 : 0, t.durationMs, call.class);
427
+ for (const path of call.files) run("INSERT INTO context_reads VALUES (?, ?, ?, ?)", record.runId, a.key, t.line, path);
428
+ }
429
+ 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);
430
+ for (const [kind, ref] of Object.entries(a.files)) {
431
+ if (ref == null || Array.isArray(ref) || typeof ref.path !== "string") continue;
432
+ run("INSERT INTO artifacts VALUES (?, ?, ?, ?, ?, ?)", record.runId, a.key, kind, ref.path, ref.sha256, ref.bytes);
433
+ }
434
+ a.checks.forEach((c, i) => {
435
+ if (!c.log) return;
436
+ run("INSERT INTO artifacts VALUES (?, ?, ?, ?, ?, ?)", record.runId, a.key, `check:${i + 1}`, c.log.path, c.log.sha256, c.log.bytes);
437
+ });
438
+ }
439
+ }
440
+ for (const f of record.families ?? []) {
441
+ 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);
442
+ for (const l of f.lifts) {
443
+ const e = l.effort;
444
+ 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);
445
+ 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);
446
+ }
447
+ }
448
+ }
449
+ const DATA_TABLES = [
450
+ "runs",
451
+ "evals",
452
+ "families",
453
+ "family_lift_m",
454
+ "votes",
455
+ "question_pairs_m",
456
+ "cells",
457
+ "attempts",
458
+ "judgements",
459
+ "environments",
460
+ "env_skills",
461
+ "artifacts",
462
+ "attempt_context",
463
+ "tool_calls",
464
+ "context_reads",
465
+ "mcp_startup",
466
+ "assertions",
467
+ "cell_checks"
468
+ ];
469
+ function removeRun(db, runId) {
470
+ for (const table of DATA_TABLES) db.prepare(`DELETE FROM ${table} WHERE run_id = ?`).run(runId);
471
+ db.prepare("DELETE FROM files WHERE run_id = ?").run(runId);
472
+ }
473
+ function freshSchema(db) {
474
+ const objects = rowsOf(db.prepare("SELECT type, name FROM sqlite_schema WHERE type IN ('table', 'view')"));
475
+ for (const o of objects) {
476
+ if (o.name.startsWith("sqlite_")) continue;
477
+ db.exec(`DROP ${o.type === "view" ? "VIEW" : "TABLE"} IF EXISTS "${o.name}"`);
478
+ }
479
+ db.exec(TABLES);
480
+ db.exec(VIEWS);
481
+ db.prepare("INSERT INTO meta VALUES (?, ?), (?, ?)").run("version", String(DB_VERSION), "build", String(BUILD));
482
+ }
483
+ function current(db) {
484
+ try {
485
+ const rows = rowsOf(db.prepare("SELECT key, value FROM meta"));
486
+ const meta = Object.fromEntries(rows.map((r) => [r.key, r.value]));
487
+ return meta.version === String(DB_VERSION) && meta.build === String(BUILD);
488
+ } catch {
489
+ return false;
490
+ }
491
+ }
492
+ /** Each attempt's transcript.jsonl, by attempt key, where the run kept it. */
493
+ async function readTranscripts(dir, record) {
494
+ const out = /* @__PURE__ */ new Map();
495
+ for (const e of record.evals) for (const a of e.attempts) {
496
+ const ref = a.files.transcript;
497
+ if (!ref) continue;
498
+ const text = await readFile(join(dir, record.runId, ...ref.path.split("/")), "utf8").catch(() => null);
499
+ if (text !== null) out.set(a.key, text);
500
+ }
501
+ return out;
502
+ }
503
+ /**
504
+ * Brings the projection up to date with the record files: recorded runs in `historyDir` win over
505
+ * the same run's scratch copy in `.reeval/runs`. Only new, changed or removed files are touched.
506
+ */
507
+ async function sync(db, root, historyDir, rebuild) {
508
+ const wanted = /* @__PURE__ */ new Map();
509
+ for (const [dir, recorded] of [[historyDir, true], [scratchDir(root), false]]) for (const name of await recordNames(dir) ?? []) {
510
+ const runId = name.slice(0, -5);
511
+ if (!RUN_ID.test(runId) || wanted.has(runId)) continue;
512
+ wanted.set(runId, {
513
+ path: join(dir, name),
514
+ recorded
515
+ });
516
+ }
517
+ let rebuilt = false;
518
+ let added = 0;
519
+ let removed = 0;
520
+ db.exec("BEGIN IMMEDIATE");
521
+ try {
522
+ if (rebuild) db.exec("DROP TABLE IF EXISTS meta");
523
+ rebuilt = !current(db);
524
+ if (rebuilt) freshSchema(db);
525
+ const known = new Map(rowsOf(db.prepare("SELECT run_id, path, size, mtime_ms FROM files")).map((r) => [r.run_id, r]));
526
+ for (const runId of known.keys()) if (!wanted.has(runId)) {
527
+ removeRun(db, runId);
528
+ removed++;
529
+ }
530
+ for (const [runId, { path, recorded }] of wanted) {
531
+ const info = await stat(path);
532
+ const rel = relativeFile(root, path);
533
+ const had = known.get(runId);
534
+ if (had && had.path === rel && had.size === info.size && had.mtime_ms === info.mtimeMs) continue;
535
+ let record;
536
+ try {
537
+ record = await readRecord(path);
538
+ } catch (error) {
539
+ warnUnreadable(path, error);
540
+ continue;
541
+ }
542
+ if (had) removeRun(db, runId);
543
+ insertRun(db, record, recorded, await readTranscripts(dirname(path), record));
544
+ db.prepare("INSERT INTO files VALUES (?, ?, ?, ?)").run(runId, rel, info.size, info.mtimeMs);
545
+ added++;
546
+ }
547
+ if (added || removed || rebuilt) deriveFacts(db);
548
+ db.exec("COMMIT");
549
+ } catch (error) {
550
+ db.exec("ROLLBACK");
551
+ throw error;
552
+ }
553
+ return {
554
+ runs: wanted.size,
555
+ added,
556
+ removed,
557
+ rebuilt
558
+ };
559
+ }
560
+ /** Opens `.reeval/history.db`, synced with the records; statements after this are read-only. */
561
+ async function openHistoryDb(root, historyDir, options = {}) {
562
+ const { DatabaseSync } = loadSqlite();
563
+ const path = historyDbPath(root);
564
+ await mkdir(dirname(path), { recursive: true });
565
+ const writer = new DatabaseSync(path);
566
+ let synced;
567
+ try {
568
+ writer.exec("PRAGMA busy_timeout = 120000");
569
+ synced = await sync(writer, root, historyDir, options.rebuild ?? false);
570
+ } finally {
571
+ writer.close();
572
+ }
573
+ const db = new DatabaseSync(path, { readOnly: true });
574
+ db.exec("PRAGMA busy_timeout = 5000");
575
+ return {
576
+ sync: synced,
577
+ query(sql, params = []) {
578
+ try {
579
+ const statement = db.prepare(sql);
580
+ const rows = Array.isArray(params) ? statement.all(...params) : statement.all(params);
581
+ return {
582
+ columns: typeof statement.columns === "function" ? statement.columns().map((c) => c.name) : Object.keys(rows[0] ?? {}),
583
+ rows
584
+ };
585
+ } catch (error) {
586
+ const message = error.message;
587
+ throw new UsageError(/readonly|read-only/i.test(message) ? `reeval query is read-only: .reeval/history.db is a projection of the run records (${message})` : `reeval query: ${message}`);
588
+ }
589
+ },
590
+ schema() {
591
+ return rowsOf(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`)).map((o) => ({
592
+ ...o,
593
+ columns: rowsOf(db.prepare(`PRAGMA table_info("${o.name}")`)).map((c) => c.name)
594
+ }));
595
+ },
596
+ close: () => db.close()
597
+ };
598
+ }
599
+ //#endregion
600
+ 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 };
601
+
602
+ //# sourceMappingURL=db-BeqRiWLl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-BeqRiWLl.js","names":[],"sources":["../src/history/db.ts"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import "./tool-target-D2mcYlSQ.js";
2
+ export { s as openHistoryDb } from "./db-BeqRiWLl.js";