@tangle-network/agent-eval 0.218.1 → 0.219.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 (198) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/adapters/http.d.ts +3 -3
  3. package/dist/adapters/http.d.ts.map +1 -1
  4. package/dist/adapters/http.js +1 -0
  5. package/dist/adapters/http.js.map +1 -1
  6. package/dist/{agent-profile-DTt8uGP9.d.ts → agent-profile-D01Io2Xw.d.ts} +4 -4
  7. package/dist/{agent-profile-DTt8uGP9.d.ts.map → agent-profile-D01Io2Xw.d.ts.map} +1 -1
  8. package/dist/analyst/index.d.ts +13 -13
  9. package/dist/analyst/index.d.ts.map +1 -1
  10. package/dist/analyst/index.js +8 -8
  11. package/dist/analyst/index.js.map +1 -1
  12. package/dist/{analyze-runs-DjlZOVXx.d.ts → analyze-runs-BWAHBDAw.d.ts} +4 -4
  13. package/dist/{analyze-runs-DjlZOVXx.d.ts.map → analyze-runs-BWAHBDAw.d.ts.map} +1 -1
  14. package/dist/{benchmark-command-BupdHRyf.js → benchmark-command-BzmMTnvC.js} +10 -10
  15. package/dist/{benchmark-command-BupdHRyf.js.map → benchmark-command-BzmMTnvC.js.map} +1 -1
  16. package/dist/benchmarks/index.d.ts +5 -5
  17. package/dist/benchmarks/index.js +3 -3
  18. package/dist/benchmarks/index.js.map +1 -1
  19. package/dist/campaign/index.d.ts +8 -8
  20. package/dist/campaign/index.js +8 -8
  21. package/dist/{campaign-CGvUTnmc.js → campaign-BVPC6ODQ.js} +149 -10
  22. package/dist/campaign-BVPC6ODQ.js.map +1 -0
  23. package/dist/campaign-evidence-DunzcJGv.js.map +1 -1
  24. package/dist/{chat-client-B2pXlPdx.js → chat-client-CMQ8_h4J.js} +2 -2
  25. package/dist/{chat-client-B2pXlPdx.js.map → chat-client-CMQ8_h4J.js.map} +1 -1
  26. package/dist/{chat-json-call-Dm9c-b41.js → chat-json-call-BrZKn0L3.js} +2 -2
  27. package/dist/{chat-json-call-Dm9c-b41.js.map → chat-json-call-BrZKn0L3.js.map} +1 -1
  28. package/dist/cli.js +8 -8
  29. package/dist/{completion-verifier-DbLVf3i8.js → completion-verifier-Cigap8CG.js} +4 -4
  30. package/dist/{completion-verifier-DbLVf3i8.js.map → completion-verifier-Cigap8CG.js.map} +1 -1
  31. package/dist/contract/index.d.ts +11 -11
  32. package/dist/contract/index.js +7 -7
  33. package/dist/{cost-ledger-D0352Z4d.js → cost-ledger-BGZB6yY2.js} +75 -2
  34. package/dist/cost-ledger-BGZB6yY2.js.map +1 -0
  35. package/dist/{cost-ledger-Jk62OBfF.d.ts → cost-ledger-C1W3ICmP.d.ts} +26 -2
  36. package/dist/cost-ledger-C1W3ICmP.d.ts.map +1 -0
  37. package/dist/{default-registry-BJ-Pq6yL.js → default-registry-BrKmT01n.js} +3 -3
  38. package/dist/{default-registry-BJ-Pq6yL.js.map → default-registry-BrKmT01n.js.map} +1 -1
  39. package/dist/{default-registry-DXgLmoDI.d.ts → default-registry-Cwg_QN3d.d.ts} +6 -6
  40. package/dist/{default-registry-DXgLmoDI.d.ts.map → default-registry-Cwg_QN3d.d.ts.map} +1 -1
  41. package/dist/{define-agent-eval-BlH10zEw.d.ts → define-agent-eval-C2nFhHPu.d.ts} +8 -8
  42. package/dist/{define-agent-eval-BlH10zEw.d.ts.map → define-agent-eval-C2nFhHPu.d.ts.map} +1 -1
  43. package/dist/{define-agent-eval-BGdFKlrc.js → define-agent-eval-UQY3VbJ2.js} +4 -4
  44. package/dist/{define-agent-eval-BGdFKlrc.js.map → define-agent-eval-UQY3VbJ2.js.map} +1 -1
  45. package/dist/diagnosis/index.d.ts +2 -2
  46. package/dist/{dspy-rlm-engine-CSMwudLO.js → dspy-rlm-engine-Bn_Mt_LW.js} +3 -3
  47. package/dist/{dspy-rlm-engine-CSMwudLO.js.map → dspy-rlm-engine-Bn_Mt_LW.js.map} +1 -1
  48. package/dist/{engine-BvZ0R-36.d.ts → engine-BpGGw6cd.d.ts} +3 -3
  49. package/dist/{engine-BvZ0R-36.d.ts.map → engine-BpGGw6cd.d.ts.map} +1 -1
  50. package/dist/{evaluation-BOZ38vOH.d.ts → evaluation-CBdQt_kr.d.ts} +4 -4
  51. package/dist/{evaluation-BOZ38vOH.d.ts.map → evaluation-CBdQt_kr.d.ts.map} +1 -1
  52. package/dist/evaluation.d.ts +1 -1
  53. package/dist/evaluation.js +1 -1
  54. package/dist/{exact-types-CflbJ9f3.d.ts → exact-types-BYFmYq44.d.ts} +2 -2
  55. package/dist/{exact-types-CflbJ9f3.d.ts.map → exact-types-BYFmYq44.d.ts.map} +1 -1
  56. package/dist/experiment/index.d.ts +24 -1
  57. package/dist/experiment/index.d.ts.map +1 -1
  58. package/dist/experiment/index.js.map +1 -1
  59. package/dist/{external-optimizer-process-C3Wm7Vhn.js → external-optimizer-process-wOLfzsCC.js} +2 -2
  60. package/dist/{external-optimizer-process-C3Wm7Vhn.js.map → external-optimizer-process-wOLfzsCC.js.map} +1 -1
  61. package/dist/{external-optimizer-subprocess-B5gdLRZv.js → external-optimizer-subprocess-D670Oxf2.js} +3 -3
  62. package/dist/{external-optimizer-subprocess-B5gdLRZv.js.map → external-optimizer-subprocess-D670Oxf2.js.map} +1 -1
  63. package/dist/{feedback-trajectory-BWmhRBGu.d.ts → feedback-trajectory-DhB9WzYg.d.ts} +3 -3
  64. package/dist/{feedback-trajectory-BWmhRBGu.d.ts.map → feedback-trajectory-DhB9WzYg.d.ts.map} +1 -1
  65. package/dist/{findings-store-BtTzPL0d.js → findings-store-CvNo712L.js} +5 -5
  66. package/dist/{findings-store-BtTzPL0d.js.map → findings-store-CvNo712L.js.map} +1 -1
  67. package/dist/fuzz.d.ts +1 -1
  68. package/dist/fuzz.js +1 -1
  69. package/dist/hosted/index.js +1 -1
  70. package/dist/{index-CX-GAUpw.d.ts → index-CHxwfW5g.d.ts} +2 -2
  71. package/dist/{index-CX-GAUpw.d.ts.map → index-CHxwfW5g.d.ts.map} +1 -1
  72. package/dist/{index-BLGqZ81N.d.ts → index-CVFStrQD.d.ts} +8 -8
  73. package/dist/{index-BLGqZ81N.d.ts.map → index-CVFStrQD.d.ts.map} +1 -1
  74. package/dist/{index-CiRwLv2R.d.ts → index-D7fmC-1K.d.ts} +3 -4
  75. package/dist/index-D7fmC-1K.d.ts.map +1 -0
  76. package/dist/{index-DbMOXYnP.d.ts → index-DAXfpVf7.d.ts} +10 -10
  77. package/dist/{index-DbMOXYnP.d.ts.map → index-DAXfpVf7.d.ts.map} +1 -1
  78. package/dist/{index-B16FNdW5.d.ts → index-Q6DvdcwI.d.ts} +37 -11
  79. package/dist/index-Q6DvdcwI.d.ts.map +1 -0
  80. package/dist/index.d.ts +26 -26
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +14 -14
  83. package/dist/index.js.map +1 -1
  84. package/dist/{integrity-_qgZLA5p.d.ts → integrity-CCwvezWS.d.ts} +2 -2
  85. package/dist/{integrity-_qgZLA5p.d.ts.map → integrity-CCwvezWS.d.ts.map} +1 -1
  86. package/dist/judge-gate-Co5tuh57.js.map +1 -1
  87. package/dist/{judge-gate-DsL0yFcb.d.ts → judge-gate-Dc_mXQsL.d.ts} +2 -2
  88. package/dist/judge-gate-Dc_mXQsL.d.ts.map +1 -0
  89. package/dist/{kind-factory-Gy4fXixd.js → kind-factory-BhxbtUsQ.js} +2 -2
  90. package/dist/{kind-factory-Gy4fXixd.js.map → kind-factory-BhxbtUsQ.js.map} +1 -1
  91. package/dist/{llm-client-_Y6ic-tf.js → llm-client-DXuOTseU.js} +2 -2
  92. package/dist/{llm-client-_Y6ic-tf.js.map → llm-client-DXuOTseU.js.map} +1 -1
  93. package/dist/{llm-judge-Djxh-Uhs.js → llm-judge-Cc8vDJh_.js} +9 -8
  94. package/dist/llm-judge-Cc8vDJh_.js.map +1 -0
  95. package/dist/matrix/index.d.ts +2 -2
  96. package/dist/{matrix-CCSBna4q.d.ts → matrix-Cf-AGxGh.d.ts} +4 -4
  97. package/dist/{matrix-CCSBna4q.d.ts.map → matrix-Cf-AGxGh.d.ts.map} +1 -1
  98. package/dist/meta-eval/index.d.ts +2 -2
  99. package/dist/{mint-BRZXuwRi.d.ts → mint-CkzpVPdz.d.ts} +3 -3
  100. package/dist/{mint-BRZXuwRi.d.ts.map → mint-CkzpVPdz.d.ts.map} +1 -1
  101. package/dist/multishot/golden/index.d.ts +1 -1
  102. package/dist/multishot/index.d.ts +2 -2
  103. package/dist/multishot/index.js.map +1 -1
  104. package/dist/openapi.json +1 -1
  105. package/dist/{pareto-CTv8vozZ.js → pareto-BiBnQXAE.js} +304 -210
  106. package/dist/pareto-BiBnQXAE.js.map +1 -0
  107. package/dist/pipelines/index.d.ts.map +1 -1
  108. package/dist/pipelines/index.js.map +1 -1
  109. package/dist/{prime-protocol-BWG2DQIk.d.ts → prime-protocol-CckHBxGu.d.ts} +3 -3
  110. package/dist/{prime-protocol-BWG2DQIk.d.ts.map → prime-protocol-CckHBxGu.d.ts.map} +1 -1
  111. package/dist/{promotion-gate-CxEHRsZW.d.ts → promotion-gate-CkVZHagC.d.ts} +3 -3
  112. package/dist/{promotion-gate-CxEHRsZW.d.ts.map → promotion-gate-CkVZHagC.d.ts.map} +1 -1
  113. package/dist/{proposal-findings-n-5WBbEx.js → proposal-findings-E1aSC_cU.js} +2 -2
  114. package/dist/{proposal-findings-n-5WBbEx.js.map → proposal-findings-E1aSC_cU.js.map} +1 -1
  115. package/dist/{registry-ssNoHzwD.d.ts → registry-B_yG-1jh.d.ts} +5 -5
  116. package/dist/{registry-ssNoHzwD.d.ts.map → registry-B_yG-1jh.d.ts.map} +1 -1
  117. package/dist/render-Cs34y0iX.js.map +1 -1
  118. package/dist/reporting.d.ts +3 -3
  119. package/dist/{researcher-GU1tV4dn.d.ts → researcher-H0p44OYC.d.ts} +5 -5
  120. package/dist/{researcher-GU1tV4dn.d.ts.map → researcher-H0p44OYC.d.ts.map} +1 -1
  121. package/dist/{reward-DrZ71vnf.d.ts → reward-BeUgVVC_.d.ts} +2 -2
  122. package/dist/{reward-DrZ71vnf.d.ts.map → reward-BeUgVVC_.d.ts.map} +1 -1
  123. package/dist/{reward-hacking-E52wq86n.d.ts → reward-hacking-WTxUbtbb.d.ts} +2 -2
  124. package/dist/{reward-hacking-E52wq86n.d.ts.map → reward-hacking-WTxUbtbb.d.ts.map} +1 -1
  125. package/dist/rl.d.ts +8 -8
  126. package/dist/rollout/index.d.ts +3 -3
  127. package/dist/rollout-Dd1ucT_M.js.map +1 -1
  128. package/dist/{rubric-predictive-validity-DiwT8PbL.d.ts → rubric-predictive-validity-noY7uE03.d.ts} +2 -2
  129. package/dist/{rubric-predictive-validity-DiwT8PbL.d.ts.map → rubric-predictive-validity-noY7uE03.d.ts.map} +1 -1
  130. package/dist/{run-record-CaxbLq6Y.d.ts → run-record-C3awiXPf.d.ts} +2 -2
  131. package/dist/{run-record-CaxbLq6Y.d.ts.map → run-record-C3awiXPf.d.ts.map} +1 -1
  132. package/dist/schema-CvhfLjtZ.js.map +1 -1
  133. package/dist/search/index.d.ts +2 -2
  134. package/dist/search/index.js +2 -2
  135. package/dist/{search-kernel-p9JB3SmL.d.ts → search-kernel-Dloxd6gs.d.ts} +4 -4
  136. package/dist/{search-kernel-p9JB3SmL.d.ts.map → search-kernel-Dloxd6gs.d.ts.map} +1 -1
  137. package/dist/{search-ledger-ClpN4I3e.js → search-ledger-CZRqtFbW.js} +249 -242
  138. package/dist/search-ledger-CZRqtFbW.js.map +1 -0
  139. package/dist/{search-shipper-Bg2HW3Uv.js → search-shipper-Dn3NLsuH.js} +2 -2
  140. package/dist/{search-shipper-Bg2HW3Uv.js.map → search-shipper-Dn3NLsuH.js.map} +1 -1
  141. package/dist/{search-summary-CrBuvVnf.js → search-summary-D4bwYnAE.js} +2 -2
  142. package/dist/{search-summary-CrBuvVnf.js.map → search-summary-D4bwYnAE.js.map} +1 -1
  143. package/dist/{server-C6M0qR8h.js → server-8TS8XCvg.js} +3 -3
  144. package/dist/{server-C6M0qR8h.js.map → server-8TS8XCvg.js.map} +1 -1
  145. package/dist/{skillopt-optimization-method-5dlex7MJ.js → skillopt-optimization-method-DLKqdhcR.js} +106 -61
  146. package/dist/skillopt-optimization-method-DLKqdhcR.js.map +1 -0
  147. package/dist/{statistical-heldout-BHfLZHrm.d.ts → statistical-heldout-3z3I-kJN.d.ts} +3 -3
  148. package/dist/{statistical-heldout-BHfLZHrm.d.ts.map → statistical-heldout-3z3I-kJN.d.ts.map} +1 -1
  149. package/dist/{store-otlp-BteDAbHK.js → store-otlp-dyWE3wAG.js} +2 -2
  150. package/dist/{store-otlp-BteDAbHK.js.map → store-otlp-dyWE3wAG.js.map} +1 -1
  151. package/dist/{store-tool-spans-D5l_OfTJ.js → store-tool-spans-DIUgZbzu.js} +3 -3
  152. package/dist/{store-tool-spans-D5l_OfTJ.js.map → store-tool-spans-DIUgZbzu.js.map} +1 -1
  153. package/dist/{store-tool-spans-DZS0HWVf.d.ts → store-tool-spans-DPwXHQkH.d.ts} +7 -7
  154. package/dist/{store-tool-spans-DZS0HWVf.d.ts.map → store-tool-spans-DPwXHQkH.d.ts.map} +1 -1
  155. package/dist/{summary-report-CkbRcSuu.d.ts → summary-report-C8V49Jt3.d.ts} +3 -3
  156. package/dist/{summary-report-CkbRcSuu.d.ts.map → summary-report-C8V49Jt3.d.ts.map} +1 -1
  157. package/dist/{systemone-BMzDJb1i.d.ts → systemone-DVA7t76V.d.ts} +6 -6
  158. package/dist/{systemone-BMzDJb1i.d.ts.map → systemone-DVA7t76V.d.ts.map} +1 -1
  159. package/dist/{systemone-review-CwE6JGIp.d.ts → systemone-review-CUBMuTLi.d.ts} +2 -2
  160. package/dist/{systemone-review-CwE6JGIp.d.ts.map → systemone-review-CUBMuTLi.d.ts.map} +1 -1
  161. package/dist/systemone.d.ts +3 -3
  162. package/dist/{tool-groups-DyNz2JZ_.d.ts → tool-groups-LISbBWCg.d.ts} +3 -3
  163. package/dist/tool-groups-LISbBWCg.d.ts.map +1 -0
  164. package/dist/{trace-questions-xxwgsuMi.d.ts → trace-questions-C42fYEE4.d.ts} +4 -4
  165. package/dist/{trace-questions-xxwgsuMi.d.ts.map → trace-questions-C42fYEE4.d.ts.map} +1 -1
  166. package/dist/trace-repair/index.d.ts +3 -3
  167. package/dist/traces.d.ts +6 -6
  168. package/dist/traces.js +3 -3
  169. package/dist/trajectory-replay/index.js +24 -3
  170. package/dist/trajectory-replay/index.js.map +1 -1
  171. package/dist/{tree-B5e1uAeL.js → tree-DSqwJpL9.js} +3 -3
  172. package/dist/{tree-B5e1uAeL.js.map → tree-DSqwJpL9.js.map} +1 -1
  173. package/dist/{types-CW8ewATZ.d.ts → types-8yQzNm8u.d.ts} +4 -4
  174. package/dist/{types-CW8ewATZ.d.ts.map → types-8yQzNm8u.d.ts.map} +1 -1
  175. package/dist/{types-DtkO1G9L.d.ts → types-CHfn1zg5.d.ts} +69 -71
  176. package/dist/types-CHfn1zg5.d.ts.map +1 -0
  177. package/dist/{types-BKCzzmit.d.ts → types-D8GXK9Z5.d.ts} +3 -3
  178. package/dist/{types-BKCzzmit.d.ts.map → types-D8GXK9Z5.d.ts.map} +1 -1
  179. package/dist/{types-D-mgRzlh.d.ts → types-eMhdacVp.d.ts} +2 -2
  180. package/dist/{types-D-mgRzlh.d.ts.map → types-eMhdacVp.d.ts.map} +1 -1
  181. package/dist/wire/index.d.ts +3 -3
  182. package/dist/wire/index.js +1 -1
  183. package/docs/campaign-proposers.md +16 -0
  184. package/docs/concepts.md +31 -0
  185. package/docs/public-api.md +76 -75
  186. package/package.json +2 -5
  187. package/dist/campaign-CGvUTnmc.js.map +0 -1
  188. package/dist/cost-ledger-D0352Z4d.js.map +0 -1
  189. package/dist/cost-ledger-Jk62OBfF.d.ts.map +0 -1
  190. package/dist/index-B16FNdW5.d.ts.map +0 -1
  191. package/dist/index-CiRwLv2R.d.ts.map +0 -1
  192. package/dist/judge-gate-DsL0yFcb.d.ts.map +0 -1
  193. package/dist/llm-judge-Djxh-Uhs.js.map +0 -1
  194. package/dist/pareto-CTv8vozZ.js.map +0 -1
  195. package/dist/search-ledger-ClpN4I3e.js.map +0 -1
  196. package/dist/skillopt-optimization-method-5dlex7MJ.js.map +0 -1
  197. package/dist/tool-groups-DyNz2JZ_.d.ts.map +0 -1
  198. package/dist/types-DtkO1G9L.d.ts.map +0 -1
@@ -1,8 +1,8 @@
1
- import { c as RunSplitTag } from "../run-record-CaxbLq6Y.js";
2
- import "../index-B16FNdW5.js";
3
- import { a as CampaignResult } from "../types-DtkO1G9L.js";
4
- import { Wt as CampaignStorage } from "../search-kernel-p9JB3SmL.js";
5
- import { a as BenchmarkFamily, c as BenchmarkSource, i as BenchmarkEvaluation, l as BenchmarkTaskKind, n as BenchmarkAdapter, o as BenchmarkResponder, r as BenchmarkDatasetItem, s as BenchmarkScenario, t as BENCHMARK_SPLIT_SEED, u as deterministicSplit } from "../types-BKCzzmit.js";
1
+ import { c as RunSplitTag } from "../run-record-C3awiXPf.js";
2
+ import "../index-Q6DvdcwI.js";
3
+ import { a as CampaignResult } from "../types-CHfn1zg5.js";
4
+ import { Wt as CampaignStorage } from "../search-kernel-Dloxd6gs.js";
5
+ import { a as BenchmarkFamily, c as BenchmarkSource, i as BenchmarkEvaluation, l as BenchmarkTaskKind, n as BenchmarkAdapter, o as BenchmarkResponder, r as BenchmarkDatasetItem, s as BenchmarkScenario, t as BENCHMARK_SPLIT_SEED, u as deterministicSplit } from "../types-D8GXK9Z5.js";
6
6
  //#region src/benchmarks/calibration.d.ts
7
7
  interface BenchmarkMetricCalibrationOptions<TPayload = unknown, TArtifact = string> {
8
8
  adapter: BenchmarkAdapter<BenchmarkDatasetItem<TPayload>, TPayload, TArtifact>;
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "../rolldown-runtime-8H4AJuhK.js";
2
- import { Q as runCampaign } from "../llm-judge-Djxh-Uhs.js";
3
- import { M as fsCampaignStorage } from "../external-optimizer-subprocess-B5gdLRZv.js";
4
- import "../campaign-CGvUTnmc.js";
2
+ import { Q as runCampaign } from "../llm-judge-Cc8vDJh_.js";
3
+ import { M as fsCampaignStorage } from "../external-optimizer-subprocess-D670Oxf2.js";
4
+ import "../campaign-BVPC6ODQ.js";
5
5
  import { join, resolve } from "node:path";
6
6
  import { readFile, readdir, stat } from "node:fs/promises";
7
7
  import { parse } from "smol-toml";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["clamp01","parseToml","entries"],"sources":["../../src/benchmarks/calibration.ts","../../src/benchmarks/types.ts","../../src/benchmarks/harbor.ts","../../src/benchmarks/routing/dataset.ts","../../src/benchmarks/routing/index.ts","../../src/benchmarks/runner.ts","../../src/benchmarks/standard-formats.ts"],"sourcesContent":["import type { BenchmarkAdapter, BenchmarkDatasetItem, BenchmarkEvaluation } from './types'\n\nexport interface BenchmarkMetricCalibrationOptions<TPayload = unknown, TArtifact = string> {\n adapter: BenchmarkAdapter<BenchmarkDatasetItem<TPayload>, TPayload, TArtifact>\n item: BenchmarkDatasetItem<TPayload>\n weakArtifact: TArtifact\n strongArtifact: TArtifact\n maxWeakScore?: number\n minStrongScore?: number\n minGap?: number\n}\n\nexport interface BenchmarkMetricCalibrationResult {\n passed: boolean\n weak: BenchmarkEvaluation\n strong: BenchmarkEvaluation\n weakScore: number\n strongScore: number\n gap: number\n reasons: string[]\n}\n\nexport async function calibrateBenchmarkMetric<TPayload = unknown, TArtifact = string>(\n options: BenchmarkMetricCalibrationOptions<TPayload, TArtifact>,\n): Promise<BenchmarkMetricCalibrationResult> {\n const weak = await options.adapter.evaluate(options.item, options.weakArtifact)\n const strong = await options.adapter.evaluate(options.item, options.strongArtifact)\n const weakScore = clamp01(weak.score)\n const strongScore = clamp01(strong.score)\n const maxWeakScore = options.maxWeakScore ?? 0.3\n const minStrongScore = options.minStrongScore ?? 0.7\n const minGap = options.minGap ?? 0.4\n const gap = strongScore - weakScore\n const reasons = [\n weakScore <= maxWeakScore\n ? undefined\n : `weak score ${weakScore.toFixed(3)} exceeds max ${maxWeakScore.toFixed(3)}`,\n strongScore >= minStrongScore\n ? undefined\n : `strong score ${strongScore.toFixed(3)} below min ${minStrongScore.toFixed(3)}`,\n gap >= minGap ? undefined : `gap ${gap.toFixed(3)} below min ${minGap.toFixed(3)}`,\n ].filter((reason): reason is string => Boolean(reason))\n\n return {\n passed: reasons.length === 0,\n weak,\n strong,\n weakScore,\n strongScore,\n gap,\n reasons,\n }\n}\n\nfunction clamp01(value: number): number {\n if (!Number.isFinite(value)) return 0\n if (value < 0) return 0\n if (value > 1) return 1\n return value\n}\n","/**\n * Shared types for the reference benchmark wrappers under\n * `src/benchmarks/`. Each wrapper exports the three functions in\n * `BenchmarkAdapter` plus its own typed `DatasetItem` shape.\n */\n\nimport type { DispatchContext, Scenario } from '../campaign/types'\nimport type { RunSplitTag } from '../run-record'\n\nexport type BenchmarkTaskKind =\n | 'retrieval'\n | 'rag-answer'\n | 'hallucination'\n | 'kb-improvement'\n | 'routing'\n | 'custom'\n\nexport type BenchmarkFamily =\n | 'beir'\n | 'mteb-retrieval'\n | 'msmarco'\n | 'trec-dl'\n | 'miracl'\n | 'lotte'\n | 'bright'\n | 'crag'\n | 'hotpotqa'\n | 'kilt'\n | 'ragtruth'\n | 'faithbench'\n | 'first-party'\n | 'custom'\n\nexport interface BenchmarkDatasetItem<TPayload = unknown> {\n /** Stable dataset-local item id (used for split assignment + paper\n * references). Unique within a benchmark. */\n id: string\n /** Free-form payload. Each benchmark defines its own shape. */\n payload: TPayload\n /** Optional precomputed split. When absent, adapters use assignSplit(id). */\n split?: RunSplitTag\n /** Benchmark family this row came from, e.g. `beir` or `crag`. */\n family?: BenchmarkFamily | string\n /** Benchmark-local task kind, e.g. retrieval vs answer quality. */\n taskKind?: BenchmarkTaskKind | string\n /** Slice labels such as language, domain, freshness, multihop, long-tail. */\n tags?: string[]\n /** Dataset provenance, version, URL, or license notes. */\n source?: BenchmarkSource\n metadata?: Record<string, unknown>\n}\n\nexport interface BenchmarkEvaluation {\n /** [0, 1] score for the response on this item. Exact-match\n * benchmarks use 0/1; partial-credit benchmarks may return\n * fractional values. */\n score: number\n /** Optional pass/fail projection. Defaults to `score > 0` when absent. */\n passed?: boolean\n /** Numeric sub-metrics. These become report dimensions. */\n dimensions?: Record<string, number>\n /** Optional bag of raw scoring signals — e.g. parsed numeric\n * answer, regex match, judge sub-scores. */\n raw: Record<string, unknown>\n notes?: string\n}\n\nexport interface BenchmarkSource {\n name?: string\n url?: string\n version?: string\n /** The exact upstream revision, such as a git commit, when `version` names a release. */\n revision?: string\n license?: string\n citation?: string\n /** Where the upstream states how a result must be produced to count, such as leaderboard rules. */\n rules?: string\n /**\n * Whether the tasks or their solutions may be in a model's training data: `unknown` until\n * checked, `none-known`, `suspected`, or `confirmed` (then report results as historical).\n */\n contamination?: 'unknown' | 'none-known' | 'suspected' | 'confirmed'\n}\n\n/** Common signature implemented by every adapter under `src/benchmarks/*`. */\n// `TPayload` is the per-item payload type; `_TItem` is preserved for\n// downstream type-narrowing extensions (a richer `BenchmarkDatasetItem`\n// subclass that adds e.g. provenance metadata) but is intentionally\n// unused here. `noUnusedLocals` requires the leading underscore.\nexport interface BenchmarkAdapter<_TItem = unknown, TPayload = unknown, TArtifact = string> {\n /** Stable benchmark id such as `beir/nfcorpus` or `crag/smoke`. */\n id?: string\n family?: BenchmarkFamily | string\n taskKind?: BenchmarkTaskKind | string\n description?: string\n source?: BenchmarkSource\n defaultMetric?: string\n /** Load the dataset for the given split. May hit the network on\n * first call but should be cache-friendly. Adapters that don't\n * ship the dataset itself MUST throw a clearly-marked error\n * pointing the caller at the loader script. */\n loadDataset(split: RunSplitTag): Promise<BenchmarkDatasetItem<TPayload>[]>\n /** Score a single response. Pure with respect to the inputs. */\n evaluate(item: BenchmarkDatasetItem<TPayload>, artifact: TArtifact): Promise<BenchmarkEvaluation>\n /** Deterministic split assignment via item id hashing. The\n * fraction of items in each split is implementation-defined but\n * MUST be stable across processes and platforms. */\n assignSplit(itemId: string): RunSplitTag\n}\n\nexport interface BenchmarkScenario<TPayload = unknown> extends Scenario {\n kind: 'benchmark'\n benchmarkId: string\n family: BenchmarkFamily | string\n taskKind: BenchmarkTaskKind | string\n splitTag: RunSplitTag\n item: BenchmarkDatasetItem<TPayload>\n}\n\nexport type BenchmarkResponder<TPayload = unknown, TArtifact = string> = (input: {\n scenario: BenchmarkScenario<TPayload>\n item: BenchmarkDatasetItem<TPayload>\n context: DispatchContext\n}) => Promise<TArtifact> | TArtifact\n\n// ── Deterministic split assignment ───────────────────────────────────\n\n/**\n * 32-bit FNV-1a hash. Stable, allocation-free, deterministic across\n * runtimes. We use it to assign items to splits rather than depending\n * on a polyfilled crypto.subtle path.\n */\nfunction fnv1a32(input: string): number {\n let h = 0x811c9dc5\n for (let i = 0; i < input.length; i++) {\n h ^= input.charCodeAt(i) & 0xff\n h = (h + ((h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24))) >>> 0\n }\n return h >>> 0\n}\n\n/** Split-assignment seed shared across all benchmarks. Bumping this\n * value reshuffles every split — do NOT do that lightly. */\nexport const BENCHMARK_SPLIT_SEED = 'agent-eval-v1'\n\n/**\n * Assign an item id to one of `'search' | 'dev' | 'holdout'` using a\n * stable 32-bit hash of `${seed}::${id}`. Default proportions:\n *\n * search: 60% (optimization-readable)\n * dev: 20% (held-out for tuning, leak-on-purpose during dev)\n * holdout:20% (paper-grade held-out, gated reads)\n */\nexport function deterministicSplit(\n itemId: string,\n seed: string = BENCHMARK_SPLIT_SEED,\n): RunSplitTag {\n const h = fnv1a32(`${seed}::${itemId}`)\n const pos = h / 0x100000000\n if (pos < 0.6) return 'search'\n if (pos < 0.8) return 'dev'\n return 'holdout'\n}\n","/**\n * A Harbor dataset as a `BenchmarkAdapter`.\n *\n * Harbor (https://harborframework.com) lays out each task as a directory with `task.toml`,\n * `instruction.md`, the agent's `environment/`, and the `tests/` its verifier runs, usually in a\n * verifier image of their own. This importer reads a local checkout of such a dataset, at the\n * revision the caller pins in `source`, into `BenchmarkDatasetItem`s.\n *\n * Scoring stays Harbor's. `evaluate` hands the task and the agent's artifact to the caller's\n * `grade` callback, which runs the task's own verifier (for example `harbor run -p <taskDir>`\n * with an agent that installs the collected artifacts) and reports its reward. This package does\n * not start containers. A verifier that did not run is an error, never a score of zero.\n */\n\nimport { readdir, readFile, stat } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\n\nimport { parse as parseToml } from 'smol-toml'\n\nimport type { RunSplitTag } from '../run-record'\nimport type {\n BenchmarkAdapter,\n BenchmarkDatasetItem,\n BenchmarkEvaluation,\n BenchmarkSource,\n} from './types'\nimport { deterministicSplit } from './types'\n\n/** One Harbor task, as its `task.toml` and `instruction.md` state it. */\nexport interface HarborTaskPayload {\n /** `[task].name`, such as `terminal-bench/interleaved-vigenere`; the directory name when absent. */\n name: string\n /** The task's directory name inside the dataset's `tasks/`. */\n dir: string\n /** Absolute path of the task directory, for the grader. */\n taskDir: string\n /** `instruction.md`, verbatim. */\n instruction: string\n /** `[agent].timeout_sec`; null when the task sets none. */\n agentTimeoutSec: number | null\n /** `[verifier].timeout_sec`; null when the task sets none. */\n verifierTimeoutSec: number | null\n /** `[verifier].environment_mode`: `separate` runs the tests in their own image. */\n verifierMode: string | null\n /** `[environment]` requests; null where the task states none. */\n resources: {\n cpus: number | null\n memoryMb: number | null\n storageMb: number | null\n gpus: number\n }\n /** Paths the verifier reads from the agent's environment (`artifacts`, sources only). */\n artifacts: string[]\n /** The environment starts more than one container (a docker-compose file). */\n multiContainer: boolean\n /** `[metadata].category`. */\n category: string | null\n /** `[metadata].expert_time_estimate_hours`. */\n expertTimeEstimateHours: number | null\n}\n\nexport type HarborTaskItem = BenchmarkDatasetItem<HarborTaskPayload>\n\n/** What the verifier returned for one task, or why it did not return. */\nexport type HarborGradeOutcome =\n | { succeeded: true; value: { reward: number; detail?: string } }\n | { succeeded: false; error: string }\n\nexport interface HarborBenchmarkOptions<TArtifact> {\n /** Stable benchmark id, such as `terminal-bench@4.0.0`. */\n id: string\n /** A checkout of the dataset: the directory that holds `tasks/`. */\n datasetDir: string\n /** The upstream name, URL, version, revision, rules and contamination status the checkout is. */\n source: BenchmarkSource & { revision: string }\n /** Task directory names to load, in this order; every task under `tasks/` when absent. */\n tasks?: readonly string[]\n /** Run the task's own verifier on the agent's artifact. */\n grade: (item: HarborTaskItem, artifact: TArtifact) => Promise<HarborGradeOutcome>\n /** Split assignment; `deterministicSplit` over the benchmark id and task directory by default. */\n assignSplit?: (itemId: string) => RunSplitTag\n}\n\n/** Harbor adapter plus a loader that ignores splits, since a public benchmark reports every task. */\nexport interface HarborBenchmarkAdapter<TArtifact>\n extends BenchmarkAdapter<HarborTaskItem, HarborTaskPayload, TArtifact> {\n loadAll(): Promise<HarborTaskItem[]>\n}\n\nconst table = (value: unknown): Record<string, unknown> =>\n value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {}\nconst numberOrNull = (value: unknown): number | null =>\n typeof value === 'number' && Number.isFinite(value) ? value : null\nconst textOrNull = (value: unknown): string | null =>\n typeof value === 'string' && value.length > 0 ? value : null\n\n/** Read one Harbor task directory. Throws when `task.toml` or `instruction.md` is missing or malformed. */\nasync function readHarborTask(taskDir: string): Promise<HarborTaskPayload> {\n const dir = resolve(taskDir)\n const config = parseToml(await readFile(join(dir, 'task.toml'), 'utf8')) as Record<\n string,\n unknown\n >\n const instruction = await readFile(join(dir, 'instruction.md'), 'utf8')\n const task = table(config.task)\n const agent = table(config.agent)\n const verifier = table(config.verifier)\n const environment = table(config.environment)\n const metadata = table(config.metadata)\n const artifacts = (Array.isArray(config.artifacts) ? config.artifacts : []).map(\n (entry, index) => {\n const source = typeof entry === 'string' ? entry : table(entry).source\n if (typeof source !== 'string' || source.length === 0) {\n throw new Error(`${dir}/task.toml: artifacts[${index}] names no source path`)\n }\n return source\n },\n )\n const environmentFiles = await readdir(join(dir, 'environment')).catch(() => [] as string[])\n const name = dir.split('/').pop() ?? dir\n return {\n name: textOrNull(task.name) ?? name,\n dir: name,\n taskDir: dir,\n instruction,\n agentTimeoutSec: numberOrNull(agent.timeout_sec),\n verifierTimeoutSec: numberOrNull(verifier.timeout_sec),\n verifierMode: textOrNull(verifier.environment_mode),\n resources: {\n cpus: numberOrNull(environment.cpus),\n memoryMb: numberOrNull(environment.memory_mb),\n storageMb: numberOrNull(environment.storage_mb),\n gpus: numberOrNull(environment.gpus) ?? 0,\n },\n artifacts,\n multiContainer: environmentFiles.some((file) => /compose\\.ya?ml$/u.test(file)),\n category: textOrNull(metadata.category),\n expertTimeEstimateHours: numberOrNull(metadata.expert_time_estimate_hours),\n }\n}\n\n/** Import a Harbor dataset checkout as a `BenchmarkAdapter` whose scorer is the dataset's own verifier. */\nexport function createHarborBenchmarkAdapter<TArtifact = string>(\n options: HarborBenchmarkOptions<TArtifact>,\n): HarborBenchmarkAdapter<TArtifact> {\n const split =\n options.assignSplit ?? ((itemId: string) => deterministicSplit(`${options.id}::${itemId}`))\n const tasksDir = join(resolve(options.datasetDir), 'tasks')\n\n async function loadAll(): Promise<HarborTaskItem[]> {\n const names =\n options.tasks ??\n (\n await Promise.all(\n (\n await readdir(tasksDir)\n ).map(async (entry) =>\n (await stat(join(tasksDir, entry, 'task.toml')).catch(() => null)) === null\n ? null\n : entry,\n ),\n )\n )\n .filter((entry): entry is string => entry !== null)\n .sort()\n return Promise.all(\n names.map(async (dir) => {\n const payload = await readHarborTask(join(tasksDir, dir))\n return {\n id: dir,\n payload,\n split: split(dir),\n family: options.source.name ?? 'harbor',\n taskKind: 'harbor-task',\n tags: payload.category === null ? [] : [payload.category],\n source: options.source,\n }\n }),\n )\n }\n\n return {\n id: options.id,\n family: options.source.name ?? 'harbor',\n taskKind: 'harbor-task',\n description:\n `${options.source.name ?? 'Harbor dataset'} ${options.source.version ?? ''} at ${options.source.revision}, scored by its own verifier`.replace(\n /\\s+/gu,\n ' ',\n ),\n source: options.source,\n defaultMetric: 'reward',\n loadAll,\n async loadDataset(tag: RunSplitTag) {\n return (await loadAll()).filter((item) => item.split === tag)\n },\n async evaluate(item: HarborTaskItem, artifact: TArtifact): Promise<BenchmarkEvaluation> {\n const outcome = await options.grade(item, artifact)\n if (!outcome.succeeded)\n throw new Error(\n `${options.id} ${item.id}: the verifier did not score this artifact: ${outcome.error}`,\n )\n const { reward, detail } = outcome.value\n if (!(Number.isFinite(reward) && reward >= 0 && reward <= 1)) {\n throw new Error(\n `${options.id} ${item.id}: the verifier returned reward ${reward}, outside [0, 1]`,\n )\n }\n return {\n score: reward,\n passed: reward === 1,\n raw: { reward, ...(detail === undefined ? {} : { detail }) },\n }\n },\n assignSplit: split,\n }\n}\n","/**\n * Synthetic routing dataset. 16 tasks across 4 categories. Used as a\n * deterministic, dependency-free benchmark for any router that maps a\n * natural-language request to one of a fixed set of route labels.\n *\n * Format (see `routing/README.md` for prose):\n *\n * {\n * id: stable per-task ID (matches across processes).\n * category: one of the four route labels.\n * prompt: the user-facing request the router must classify.\n * route: the ground-truth route the router should pick.\n * synonyms: other strings that count as a correct answer.\n * hardNegatives:close-but-wrong route labels — used to detect the\n * \"always picks the popular route\" failure mode.\n * }\n *\n * The four categories are intentionally cross-domain (file ops,\n * math, search, conversation) so a router that collapses to one\n * category is easy to spot.\n */\n\nexport interface RoutingItem {\n id: string\n category: 'file' | 'math' | 'search' | 'chat'\n prompt: string\n /** Canonical correct route label. */\n route: string\n /** Alternate route labels that also count as correct. */\n synonyms: string[]\n /** Wrong-but-tempting route labels (for analysis, not grading). */\n hardNegatives: string[]\n}\n\nexport const ROUTING_DATASET: RoutingItem[] = [\n {\n id: 'file_001',\n category: 'file',\n prompt: 'Save the meeting notes to /tmp/notes-2025-04.md as markdown.',\n route: 'fs.write',\n synonyms: ['filesystem.write', 'write_file'],\n hardNegatives: ['fs.read', 'chat.reply'],\n },\n {\n id: 'file_002',\n category: 'file',\n prompt: 'Read the contents of /etc/hosts and summarize the entries.',\n route: 'fs.read',\n synonyms: ['filesystem.read', 'read_file'],\n hardNegatives: ['fs.write', 'search.web'],\n },\n {\n id: 'file_003',\n category: 'file',\n prompt: 'List every Python file under src/ recursively.',\n route: 'fs.list',\n synonyms: ['filesystem.list', 'list_files'],\n hardNegatives: ['fs.read', 'search.code'],\n },\n {\n id: 'file_004',\n category: 'file',\n prompt: 'Delete the cached build at .turbo/cache.',\n route: 'fs.delete',\n synonyms: ['filesystem.delete', 'remove_file'],\n hardNegatives: ['fs.write', 'fs.list'],\n },\n {\n id: 'math_001',\n category: 'math',\n prompt: 'What is the integral of 3x^2 + 2x from 0 to 5?',\n route: 'math.integral',\n synonyms: ['calculator.integral', 'math.solve'],\n hardNegatives: ['math.derivative', 'chat.reply'],\n },\n {\n id: 'math_002',\n category: 'math',\n prompt: 'Compute the derivative of sin(x) * cos(x).',\n route: 'math.derivative',\n synonyms: ['calculator.derivative', 'math.solve'],\n hardNegatives: ['math.integral', 'math.algebra'],\n },\n {\n id: 'math_003',\n category: 'math',\n prompt: 'Solve 2x + 7 = 19 for x.',\n route: 'math.algebra',\n synonyms: ['calculator.algebra', 'math.solve'],\n hardNegatives: ['math.derivative', 'math.integral'],\n },\n {\n id: 'math_004',\n category: 'math',\n prompt: 'What is the prime factorization of 360?',\n route: 'math.numbertheory',\n synonyms: ['calculator.factor', 'math.solve'],\n hardNegatives: ['math.algebra', 'search.web'],\n },\n {\n id: 'search_001',\n category: 'search',\n prompt: 'Find recent papers on agent prompt optimization with held-out promotion gates.',\n route: 'search.web',\n synonyms: ['web.search', 'search.papers'],\n hardNegatives: ['search.code', 'chat.reply'],\n },\n {\n id: 'search_002',\n category: 'search',\n prompt: 'Search the codebase for every call site of `runProposeReview`.',\n route: 'search.code',\n synonyms: ['code.search', 'grep'],\n hardNegatives: ['search.web', 'fs.read'],\n },\n {\n id: 'search_003',\n category: 'search',\n prompt: 'What is the latest release of the Tangle network on GitHub?',\n route: 'search.web',\n synonyms: ['web.search', 'github.releases'],\n hardNegatives: ['search.code', 'chat.reply'],\n },\n {\n id: 'search_004',\n category: 'search',\n prompt: 'Find all TODO comments in the agent-eval src tree.',\n route: 'search.code',\n synonyms: ['code.search', 'grep'],\n hardNegatives: ['search.web', 'fs.list'],\n },\n {\n id: 'chat_001',\n category: 'chat',\n prompt: 'Hi there, how are you doing today?',\n route: 'chat.reply',\n synonyms: ['conversation.reply'],\n hardNegatives: ['search.web', 'fs.read'],\n },\n {\n id: 'chat_002',\n category: 'chat',\n prompt: 'Please explain the difference between an LLM and a foundation model.',\n route: 'chat.reply',\n synonyms: ['conversation.reply', 'qa.answer'],\n hardNegatives: ['search.web', 'math.algebra'],\n },\n {\n id: 'chat_003',\n category: 'chat',\n prompt: 'Tell me a short joke about distributed systems.',\n route: 'chat.reply',\n synonyms: ['conversation.reply'],\n hardNegatives: ['search.web', 'fs.read'],\n },\n {\n id: 'chat_004',\n category: 'chat',\n prompt: 'Acknowledge my last message with a thumbs up.',\n route: 'chat.reply',\n synonyms: ['conversation.reply', 'react'],\n hardNegatives: ['fs.write', 'search.web'],\n },\n]\n","/**\n * Routing benchmark — synthetic, dependency-free, ships in the\n * package. 16 cross-category items in `dataset.ts`. See\n * `routing/README.md` for the format.\n *\n * `evaluate` does case-insensitive exact match against the canonical\n * route plus declared synonyms. The first valid route token in the\n * response wins; everything else is ignored. Wrong answers also\n * report whether they hit a hard negative — useful when triaging\n * \"always picks the popular route\" failure modes.\n */\n\nimport type { RunSplitTag } from '../../run-record'\nimport type { BenchmarkAdapter, BenchmarkDatasetItem, BenchmarkEvaluation } from '../types'\nimport { deterministicSplit } from '../types'\nimport { ROUTING_DATASET, type RoutingItem } from './dataset'\n\nexport type { RoutingItem }\nexport type RoutingPayload = RoutingItem\nexport type RoutingDatasetItem = BenchmarkDatasetItem<RoutingPayload>\n\nclass RoutingAdapter implements BenchmarkAdapter<RoutingDatasetItem, RoutingPayload> {\n readonly id = 'first-party/routing'\n readonly family = 'first-party'\n readonly taskKind = 'routing'\n readonly description = 'Synthetic fixed-route classification smoke benchmark'\n readonly defaultMetric = 'route_exact_match'\n\n async loadDataset(split: RunSplitTag): Promise<RoutingDatasetItem[]> {\n return ROUTING_DATASET.map((item) => ({ id: item.id, payload: item })).filter(\n (it) => assignSplitImpl(it.id) === split,\n )\n }\n\n async evaluate(item: RoutingDatasetItem, response: string): Promise<BenchmarkEvaluation> {\n const tokens = extractRouteTokens(response)\n const correct = new Set<string>(\n [item.payload.route, ...item.payload.synonyms].map((s) => s.toLowerCase()),\n )\n const hardNeg = new Set<string>(item.payload.hardNegatives.map((s) => s.toLowerCase()))\n const firstMatch = tokens.find((t) => correct.has(t.toLowerCase())) ?? null\n const firstHardNeg = tokens.find((t) => hardNeg.has(t.toLowerCase())) ?? null\n const score = firstMatch ? 1 : 0\n return {\n score,\n raw: {\n firstToken: tokens[0] ?? null,\n matchedRoute: firstMatch,\n hitHardNegative: Boolean(firstHardNeg),\n hardNegativeRoute: firstHardNeg,\n category: item.payload.category,\n },\n }\n }\n\n assignSplit(itemId: string): RunSplitTag {\n return assignSplitImpl(itemId)\n }\n}\n\nfunction assignSplitImpl(itemId: string): RunSplitTag {\n return deterministicSplit(`routing::${itemId}`)\n}\n\n/**\n * Pull route-shaped tokens out of a model response. Routes look like\n * `category.action` (`fs.write`, `chat.reply`). Bare alphanumerics\n * are not routes, but `category.action` patterns are robust to most\n * model wrappers (JSON output, prose explanations, code fences).\n */\nexport function extractRouteTokens(response: string): string[] {\n const matches = response.match(/[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*/gi)\n return matches ?? []\n}\n\nconst adapter = new RoutingAdapter()\n\nexport const loadDataset = adapter.loadDataset.bind(adapter)\nexport const evaluate = adapter.evaluate.bind(adapter)\nexport const assignSplit = adapter.assignSplit.bind(adapter)\nexport { ROUTING_DATASET, RoutingAdapter }\n","import { join } from 'node:path'\nimport {\n type CampaignResult,\n type DispatchFn,\n type JudgeConfig,\n type JudgeScore,\n runCampaign,\n type Scenario,\n} from '../campaign'\nimport { type CampaignStorage, fsCampaignStorage } from '../campaign/storage'\nimport type { RunSplitTag } from '../run-record'\nimport type {\n BenchmarkAdapter,\n BenchmarkDatasetItem,\n BenchmarkEvaluation,\n BenchmarkFamily,\n BenchmarkResponder,\n BenchmarkScenario,\n BenchmarkTaskKind,\n} from './types'\n\nexport interface BenchmarkRunOptions<TPayload = unknown, TArtifact = string> {\n adapter: BenchmarkAdapter<BenchmarkDatasetItem<TPayload>, TPayload, TArtifact>\n respond: BenchmarkResponder<TPayload, TArtifact>\n splits?: readonly RunSplitTag[]\n runDir: string\n repo?: string\n seed?: number\n reps?: number\n resumable?: boolean\n costCeiling?: number\n maxConcurrency?: number\n dispatchTimeoutMs?: number\n expectUsage?: 'assert' | 'warn' | 'off'\n storage?: CampaignStorage\n now?: () => Date\n}\n\nexport interface BenchmarkReport {\n benchmarkId: string\n family: BenchmarkFamily | string\n taskKind: BenchmarkTaskKind | string\n source?: BenchmarkAdapter['source']\n runDir: string\n manifestHash: string\n seed: number\n startedAt: string\n endedAt: string\n durationMs: number\n totalItems: number\n totalCells: number\n cellsFailed: number\n cellsCached: number\n totalCostUsd: number\n splits: Record<string, BenchmarkSliceSummary>\n tags: Record<string, BenchmarkSliceSummary>\n dimensions: Record<string, BenchmarkDistribution>\n score: BenchmarkDistribution\n costUsd: BenchmarkDistribution\n latencyMs: BenchmarkDistribution\n}\n\nexport interface BenchmarkSliceSummary {\n n: number\n meanScore: number\n passRate: number\n score: BenchmarkDistribution\n costUsd: BenchmarkDistribution\n latencyMs: BenchmarkDistribution\n}\n\nexport interface BenchmarkDistribution {\n n: number\n min: number\n mean: number\n median: number\n p90: number\n max: number\n}\n\nexport interface BenchmarkRunResult<TPayload = unknown, TArtifact = string> {\n scenarios: Array<BenchmarkScenario<TPayload>>\n campaign: CampaignResult<TArtifact, BenchmarkScenario<TPayload>>\n report: BenchmarkReport\n reportJsonPath: string\n reportMarkdownPath: string\n}\n\nexport async function runBenchmarkAdapter<TPayload = unknown, TArtifact = string>(\n options: BenchmarkRunOptions<TPayload, TArtifact>,\n): Promise<BenchmarkRunResult<TPayload, TArtifact>> {\n const storage = options.storage ?? fsCampaignStorage()\n const benchmarkId = benchmarkIdFor(options.adapter)\n const scenarios = await loadBenchmarkScenarios(options.adapter, options.splits)\n const judge = benchmarkAdapterJudge(options.adapter)\n const dispatch: DispatchFn<BenchmarkScenario<TPayload>, TArtifact> = async (\n scenario,\n context,\n ) => {\n return options.respond({ scenario, item: scenario.item, context })\n }\n\n const campaign = await runCampaign<BenchmarkScenario<TPayload>, TArtifact>({\n scenarios,\n dispatch,\n dispatchRef: `benchmark:${benchmarkId}`,\n judges: [judge],\n seed: options.seed,\n reps: options.reps,\n resumable: options.resumable,\n costCeiling: options.costCeiling,\n maxConcurrency: options.maxConcurrency,\n dispatchTimeoutMs: options.dispatchTimeoutMs,\n expectUsage: options.expectUsage ?? 'off',\n runDir: options.runDir,\n repo: options.repo,\n storage,\n now: options.now,\n })\n const report = summarizeBenchmarkCampaign({\n adapter: options.adapter,\n scenarios,\n campaign,\n })\n storage.ensureDir(campaign.runDir)\n const reportJsonPath = join(campaign.runDir, 'benchmark-report.json')\n const reportMarkdownPath = join(campaign.runDir, 'benchmark-report.md')\n storage.write(reportJsonPath, `${JSON.stringify(report, null, 2)}\\n`)\n storage.write(reportMarkdownPath, renderBenchmarkReportMarkdown(report))\n return { scenarios, campaign, report, reportJsonPath, reportMarkdownPath }\n}\n\nasync function loadBenchmarkScenarios<TPayload>(\n adapter: BenchmarkAdapter<BenchmarkDatasetItem<TPayload>, TPayload, unknown>,\n splits: readonly RunSplitTag[] = ['search', 'dev', 'holdout'],\n): Promise<Array<BenchmarkScenario<TPayload>>> {\n const benchmarkId = benchmarkIdFor(adapter)\n const family = adapter.family ?? 'custom'\n const taskKind = adapter.taskKind ?? 'custom'\n const out: Array<BenchmarkScenario<TPayload>> = []\n const seen = new Set<string>()\n for (const split of splits) {\n const items = await adapter.loadDataset(split)\n for (const item of items) {\n const splitTag = item.split ?? adapter.assignSplit(item.id)\n if (splitTag !== split) continue\n const key = `${benchmarkId}:${item.id}`\n if (seen.has(key)) continue\n seen.add(key)\n out.push({\n id: key,\n kind: 'benchmark',\n benchmarkId,\n family: item.family ?? family,\n taskKind: item.taskKind ?? taskKind,\n splitTag,\n tags: [...new Set([splitTag, ...(item.tags ?? [])])],\n item,\n })\n }\n }\n return out\n}\n\nfunction benchmarkAdapterJudge<TPayload, TArtifact>(\n adapter: BenchmarkAdapter<BenchmarkDatasetItem<TPayload>, TPayload, TArtifact>,\n): JudgeConfig<TArtifact, BenchmarkScenario<TPayload>> {\n const benchmarkId = benchmarkIdFor(adapter)\n return {\n name: `${benchmarkId}:score`,\n dimensions: [\n { key: 'score', description: `Primary ${benchmarkId} benchmark score` },\n { key: 'passed', description: 'Binary pass projection for aggregate reporting' },\n ],\n appliesTo: (scenario: Scenario): scenario is BenchmarkScenario<TPayload> => {\n return scenario.kind === 'benchmark' && scenario.id.startsWith(`${benchmarkId}:`)\n },\n async score({ artifact, scenario }) {\n const evaluation = await adapter.evaluate(scenario.item, artifact)\n const dimensions = normalizeEvaluationDimensions(evaluation)\n return {\n dimensions,\n composite: clamp01(evaluation.score),\n notes: evaluation.notes ?? '',\n }\n },\n }\n}\n\nfunction summarizeBenchmarkCampaign<TPayload, TArtifact>(input: {\n adapter: BenchmarkAdapter<BenchmarkDatasetItem<TPayload>, TPayload, TArtifact>\n scenarios: Array<BenchmarkScenario<TPayload>>\n campaign: CampaignResult<TArtifact, BenchmarkScenario<TPayload>>\n}): BenchmarkReport {\n const scenarioById = new Map(input.scenarios.map((scenario) => [scenario.id, scenario]))\n const rows = input.campaign.cells.map((cell) => {\n const scenario = scenarioById.get(cell.scenarioId)\n const judge = firstJudgeScore(cell.judgeScores)\n const score = judge?.composite ?? 0\n return {\n cell,\n scenario,\n score,\n passed: (judge?.dimensions.passed ?? (score > 0 ? 1 : 0)) >= 1,\n dimensions: judge?.dimensions ?? {},\n }\n })\n const successful = rows.filter((row) => !row.cell.error)\n const scoreValues = successful.map((row) => row.score)\n return {\n benchmarkId: benchmarkIdFor(input.adapter),\n family: input.adapter.family ?? 'custom',\n taskKind: input.adapter.taskKind ?? 'custom',\n ...(input.adapter.source ? { source: input.adapter.source } : {}),\n runDir: input.campaign.runDir,\n manifestHash: input.campaign.manifestHash,\n seed: input.campaign.seed,\n startedAt: input.campaign.startedAt,\n endedAt: input.campaign.endedAt,\n durationMs: input.campaign.durationMs,\n totalItems: input.scenarios.length,\n totalCells: input.campaign.cells.length,\n cellsFailed: input.campaign.aggregates.cellsFailed,\n cellsCached: input.campaign.aggregates.cellsCached,\n totalCostUsd: input.campaign.aggregates.cost.totalCostUsd,\n splits: summarizeSlices(successful, (row) => row.scenario?.splitTag ?? 'unknown', [\n 'search',\n 'dev',\n 'holdout',\n ]),\n tags: summarizeSlices(successful, (row) => row.scenario?.tags ?? []),\n dimensions: summarizeDimensions(successful.map((row) => row.dimensions)),\n score: distribution(scoreValues),\n costUsd: distribution(successful.map((row) => row.cell.costUsd)),\n latencyMs: distribution(successful.map((row) => row.cell.durationMs)),\n }\n}\n\nfunction renderBenchmarkReportMarkdown(report: BenchmarkReport): string {\n const splitRows = Object.entries(report.splits)\n .map(([split, summary]) => {\n return `| ${split} | ${summary.n} | ${fmt(summary.meanScore)} | ${fmt(summary.passRate)} | ${fmt(summary.score.p90)} | ${fmt(summary.costUsd.mean)} | ${fmt(summary.latencyMs.p90)} |`\n })\n .join('\\n')\n const dimRows = Object.entries(report.dimensions)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, dist]) => `| ${key} | ${dist.n} | ${fmt(dist.mean)} | ${fmt(dist.p90)} |`)\n .join('\\n')\n return [\n `# Benchmark Report: ${report.benchmarkId}`,\n '',\n `- family: ${report.family}`,\n `- task kind: ${report.taskKind}`,\n `- run dir: ${report.runDir}`,\n `- manifest: ${report.manifestHash}`,\n `- cells: ${report.totalCells} total, ${report.cellsFailed} failed, ${report.cellsCached} cached`,\n `- cost: $${fmt(report.totalCostUsd)}`,\n `- score: mean ${fmt(report.score.mean)}, median ${fmt(report.score.median)}, p90 ${fmt(report.score.p90)}, n=${report.score.n}`,\n '',\n '## Splits',\n '',\n '| split | n | mean score | pass rate | score p90 | mean cost | latency p90 ms |',\n '| --- | ---: | ---: | ---: | ---: | ---: | ---: |',\n splitRows || '| none | 0 | 0 | 0 | 0 | 0 | 0 |',\n '',\n '## Dimensions',\n '',\n '| dimension | n | mean | p90 |',\n '| --- | ---: | ---: | ---: |',\n dimRows || '| none | 0 | 0 | 0 |',\n '',\n ].join('\\n')\n}\n\nfunction benchmarkIdFor(adapter: Pick<BenchmarkAdapter, 'id' | 'family' | 'taskKind'>): string {\n return adapter.id ?? `${adapter.family ?? 'custom'}/${adapter.taskKind ?? 'custom'}`\n}\n\nfunction normalizeEvaluationDimensions(evaluation: BenchmarkEvaluation): Record<string, number> {\n const dimensions: Record<string, number> = { score: clamp01(evaluation.score) }\n for (const [key, value] of Object.entries(evaluation.dimensions ?? {})) {\n if (Number.isFinite(value)) dimensions[key] = value\n }\n dimensions.passed = (evaluation.passed ?? evaluation.score > 0) ? 1 : 0\n return dimensions\n}\n\nfunction summarizeDimensions(\n rows: Array<Record<string, number>>,\n): Record<string, BenchmarkDistribution> {\n const values = new Map<string, number[]>()\n for (const row of rows) {\n for (const [key, value] of Object.entries(row)) {\n if (!Number.isFinite(value)) continue\n const list = values.get(key) ?? []\n list.push(value)\n values.set(key, list)\n }\n }\n return Object.fromEntries([...values.entries()].map(([key, vals]) => [key, distribution(vals)]))\n}\n\nfunction summarizeSlices<T>(\n rows: T[],\n keyOf: (row: T) => string | string[],\n knownKeys: readonly string[] = [],\n): Record<string, BenchmarkSliceSummary> {\n const grouped = new Map<string, T[]>()\n for (const key of knownKeys) grouped.set(key, [])\n for (const row of rows) {\n const keys = keyOf(row)\n for (const key of Array.isArray(keys) ? keys : [keys]) {\n const list = grouped.get(key) ?? []\n list.push(row)\n grouped.set(key, list)\n }\n }\n const out: Record<string, BenchmarkSliceSummary> = {}\n for (const [key, list] of grouped) {\n const withShape = list as Array<{\n score: number\n passed: boolean\n cell: { costUsd: number; durationMs: number }\n }>\n out[key] = {\n n: list.length,\n meanScore: mean(withShape.map((row) => row.score)),\n passRate: mean(withShape.map((row) => (row.passed ? 1 : 0))),\n score: distribution(withShape.map((row) => row.score)),\n costUsd: distribution(withShape.map((row) => row.cell.costUsd)),\n latencyMs: distribution(withShape.map((row) => row.cell.durationMs)),\n }\n }\n return out\n}\n\nfunction firstJudgeScore(\n judgeScores: CampaignResult<unknown>['cells'][number]['judgeScores'],\n): JudgeScore | undefined {\n return Object.values(judgeScores)[0]\n}\n\nfunction distribution(values: readonly number[]): BenchmarkDistribution {\n const finite = [...values].filter(Number.isFinite).sort((a, b) => a - b)\n if (finite.length === 0) return { n: 0, min: 0, mean: 0, median: 0, p90: 0, max: 0 }\n return {\n n: finite.length,\n min: finite[0]!,\n mean: mean(finite),\n median: percentile(finite, 0.5),\n p90: percentile(finite, 0.9),\n max: finite[finite.length - 1]!,\n }\n}\n\nfunction percentile(sortedValues: readonly number[], p: number): number {\n if (sortedValues.length === 0) return 0\n const index = Math.min(\n sortedValues.length - 1,\n Math.max(0, Math.ceil(p * sortedValues.length) - 1),\n )\n return sortedValues[index]!\n}\n\nfunction mean(values: readonly number[]): number {\n const finite = values.filter(Number.isFinite)\n if (finite.length === 0) return 0\n return finite.reduce((sum, value) => sum + value, 0) / finite.length\n}\n\nfunction clamp01(value: number): number {\n if (!Number.isFinite(value)) return 0\n if (value < 0) return 0\n if (value > 1) return 1\n return value\n}\n\nfunction fmt(value: number): string {\n if (!Number.isFinite(value)) return '0'\n return value.toFixed(value === 0 || Math.abs(value) >= 10 ? 0 : 3)\n}\n","import type { RunSplitTag } from '../run-record'\nimport type {\n BenchmarkAdapter,\n BenchmarkDatasetItem,\n BenchmarkFamily,\n BenchmarkSource,\n BenchmarkTaskKind,\n} from './types'\nimport { deterministicSplit } from './types'\n\nexport interface StandardRetrievalDocument {\n id: string\n title?: string\n text: string\n metadata?: Record<string, unknown>\n}\n\nexport interface StandardRetrievalQuery {\n id: string\n text: string\n metadata?: Record<string, unknown>\n}\n\nexport interface StandardRetrievalQrel {\n queryId: string\n documentId: string\n score: number\n}\n\nexport interface StandardRetrievalPayload {\n queryId: string\n query: string\n expectedDocumentIds: string[]\n expectedScores: Record<string, number>\n corpus?: Record<string, StandardRetrievalDocument>\n metadata?: Record<string, unknown>\n}\n\nexport interface BuildStandardRetrievalItemsOptions {\n benchmarkId: string\n family: BenchmarkFamily | string\n queries: readonly StandardRetrievalQuery[]\n qrels: readonly StandardRetrievalQrel[]\n corpus?: readonly StandardRetrievalDocument[]\n includeCorpusInPayload?: boolean\n source?: BenchmarkSource\n tags?: readonly string[]\n splitOf?: (queryId: string) => RunSplitTag\n}\n\nexport interface RetrievalIdAdapterOptions extends BuildStandardRetrievalItemsOptions {\n responseIdPattern?: RegExp\n cutoffs?: readonly number[]\n primaryMetric?: string\n passMetric?: string\n passThreshold?: number\n}\n\nexport interface StandardRetrievalResult {\n id?: string\n documentId?: string\n docId?: string\n score?: number\n}\n\nexport type StandardRetrievalArtifact =\n | string\n | readonly string[]\n | readonly StandardRetrievalResult[]\n | {\n ids?: readonly string[]\n documentIds?: readonly string[]\n results?: readonly StandardRetrievalResult[]\n }\n\nexport interface StandardRetrievalEvaluationOptions {\n responseIdPattern?: RegExp\n cutoffs?: readonly number[]\n primaryMetric?: string\n passMetric?: string\n passThreshold?: number\n}\n\nexport function parseJsonlRows<T = unknown>(text: string): T[] {\n return text\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line, index) => {\n try {\n return JSON.parse(line) as T\n } catch (error) {\n throw new Error(`invalid JSONL row ${index + 1}: ${(error as Error).message}`)\n }\n })\n}\n\nfunction parseTsvRows(text: string): string[][] {\n return text\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .filter((line) => !line.startsWith('#'))\n .map((line) => line.split(/\\t|\\s+/))\n}\n\nexport function parseQrels(text: string): StandardRetrievalQrel[] {\n return parseTsvRows(text).flatMap((parts, index) => {\n if (parts.length < 3) return []\n const [queryId, maybeZeroOrDocId, maybeDocIdOrScore, maybeScore] = parts\n if (!queryId || !maybeZeroOrDocId || !maybeDocIdOrScore) return []\n if (queryId.toLowerCase() === 'query-id' || queryId.toLowerCase() === 'qid') return []\n const documentId = maybeScore === undefined ? maybeZeroOrDocId : maybeDocIdOrScore\n const scoreText = maybeScore === undefined ? maybeDocIdOrScore : maybeScore\n const score = Number(scoreText)\n if (!documentId || !Number.isFinite(score)) {\n throw new Error(`invalid qrels row ${index + 1}: expected query id, doc id, score`)\n }\n return [{ queryId, documentId, score }]\n })\n}\n\nexport function parseBeirCorpusJsonl(text: string): StandardRetrievalDocument[] {\n return parseJsonlRows<Record<string, unknown>>(text).map((row, index) => {\n const id = stringField(row, '_id') ?? stringField(row, 'id')\n const body = stringField(row, 'text') ?? stringField(row, 'contents')\n if (!id || body === undefined) {\n throw new Error(`invalid BEIR corpus row ${index + 1}: expected _id/id and text/contents`)\n }\n return {\n id,\n title: stringField(row, 'title'),\n text: body,\n metadata: stripKnown(row, ['_id', 'id', 'title', 'text', 'contents']),\n }\n })\n}\n\nexport function parseBeirQueriesJsonl(text: string): StandardRetrievalQuery[] {\n return parseJsonlRows<Record<string, unknown>>(text).map((row, index) => {\n const id = stringField(row, '_id') ?? stringField(row, 'id') ?? stringField(row, 'query_id')\n const query = stringField(row, 'text') ?? stringField(row, 'query')\n if (!id || !query) {\n throw new Error(`invalid BEIR query row ${index + 1}: expected _id/id and text/query`)\n }\n return {\n id,\n text: query,\n metadata: stripKnown(row, ['_id', 'id', 'query_id', 'text', 'query']),\n }\n })\n}\n\nexport function buildStandardRetrievalItems(\n options: BuildStandardRetrievalItemsOptions,\n): Array<BenchmarkDatasetItem<StandardRetrievalPayload>> {\n const qrelsByQuery = new Map<string, StandardRetrievalQrel[]>()\n for (const qrel of options.qrels) {\n if (qrel.score <= 0) continue\n const list = qrelsByQuery.get(qrel.queryId) ?? []\n list.push(qrel)\n qrelsByQuery.set(qrel.queryId, list)\n }\n const corpus =\n options.includeCorpusInPayload && options.corpus\n ? Object.fromEntries(options.corpus.map((document) => [document.id, document]))\n : undefined\n return options.queries.flatMap((query) => {\n const qrels = qrelsByQuery.get(query.id) ?? []\n if (qrels.length === 0) return []\n const split =\n options.splitOf?.(query.id) ?? deterministicSplit(`${options.benchmarkId}:${query.id}`)\n return [\n {\n id: query.id,\n split,\n family: options.family,\n taskKind: 'retrieval',\n tags: [...new Set([...(options.tags ?? []), split])],\n ...(options.source ? { source: options.source } : {}),\n ...(query.metadata ? { metadata: query.metadata } : {}),\n payload: {\n queryId: query.id,\n query: query.text,\n expectedDocumentIds: qrels.map((qrel) => qrel.documentId),\n expectedScores: Object.fromEntries(qrels.map((qrel) => [qrel.documentId, qrel.score])),\n ...(corpus ? { corpus } : {}),\n ...(query.metadata ? { metadata: query.metadata } : {}),\n },\n },\n ]\n })\n}\n\nexport function createRetrievalIdBenchmarkAdapter(\n options: RetrievalIdAdapterOptions,\n): BenchmarkAdapter<\n BenchmarkDatasetItem<StandardRetrievalPayload>,\n StandardRetrievalPayload,\n StandardRetrievalArtifact\n> {\n const items = buildStandardRetrievalItems(options)\n return {\n id: options.benchmarkId,\n family: options.family,\n taskKind: 'retrieval' satisfies BenchmarkTaskKind,\n source: options.source,\n defaultMetric: options.primaryMetric ?? 'ndcg@10',\n async loadDataset(split) {\n return items.filter((item) => item.split === split)\n },\n async evaluate(item, artifact) {\n return evaluateStandardRetrieval(item.payload, artifact, options)\n },\n assignSplit(itemId) {\n return options.splitOf?.(itemId) ?? deterministicSplit(`${options.benchmarkId}:${itemId}`)\n },\n }\n}\n\nexport function evaluateStandardRetrieval(\n payload: StandardRetrievalPayload,\n artifact: StandardRetrievalArtifact,\n options: StandardRetrievalEvaluationOptions = {},\n) {\n const rankedDocumentIds = normalizeRetrievedDocumentIds(\n artifact,\n options.responseIdPattern ?? /[A-Za-z0-9_.:/-]+/g,\n )\n const cutoffs = normalizeCutoffs(options.cutoffs ?? [1, 3, 5, 10])\n const dimensions: Record<string, number> = {\n expected_count: payload.expectedDocumentIds.length,\n returned_count: rankedDocumentIds.length,\n }\n for (const cutoff of cutoffs) {\n Object.assign(\n dimensions,\n retrievalMetricsAtCutoff({\n rankedDocumentIds,\n expectedScores: payload.expectedScores,\n cutoff,\n }),\n )\n }\n const primaryMetric = options.primaryMetric ?? 'ndcg@10'\n const passMetric = options.passMetric ?? 'hit@10'\n const score = dimensions[primaryMetric] ?? dimensions[`ndcg@${cutoffs[cutoffs.length - 1]}`] ?? 0\n const passScore =\n dimensions[passMetric] ?? dimensions[`hit@${cutoffs[cutoffs.length - 1]}`] ?? score\n return {\n score,\n passed: passScore >= (options.passThreshold ?? 1),\n dimensions,\n raw: {\n rankedDocumentIds,\n expectedDocumentIds: payload.expectedDocumentIds,\n expectedScores: payload.expectedScores,\n },\n }\n}\n\nfunction normalizeRetrievedDocumentIds(\n artifact: StandardRetrievalArtifact,\n responseIdPattern: RegExp = /[A-Za-z0-9_.:/-]+/g,\n): string[] {\n if (typeof artifact === 'string') {\n return uniqueOrdered((artifact.match(responseIdPattern) ?? []).map((value) => value.trim()))\n }\n if (Array.isArray(artifact)) {\n const entries = artifact as readonly (string | StandardRetrievalResult)[]\n return uniqueOrdered(\n entries.flatMap((entry) => {\n if (typeof entry === 'string') return [entry]\n return [entry.documentId ?? entry.docId ?? entry.id ?? '']\n }),\n )\n }\n const objectArtifact = artifact as Exclude<StandardRetrievalArtifact, string | readonly unknown[]>\n return uniqueOrdered(\n [\n ...(objectArtifact.documentIds ?? []),\n ...(objectArtifact.ids ?? []),\n ...(objectArtifact.results ?? []).map(\n (entry) => entry.documentId ?? entry.docId ?? entry.id ?? '',\n ),\n ].map((value) => value.trim()),\n )\n}\n\nfunction retrievalMetricsAtCutoff(input: {\n rankedDocumentIds: readonly string[]\n expectedScores: Record<string, number>\n cutoff: number\n}): Record<string, number> {\n const top = input.rankedDocumentIds.slice(0, input.cutoff)\n const relevantIds = Object.keys(input.expectedScores).filter(\n (id) => input.expectedScores[id]! > 0,\n )\n const relevant = new Set(relevantIds)\n const hits = top.filter((id) => relevant.has(id)).length\n const firstRelevantRank = top.findIndex((id) => relevant.has(id))\n const prefix = `@${input.cutoff}`\n return {\n [`hit${prefix}`]: hits > 0 ? 1 : 0,\n [`recall${prefix}`]: relevant.size === 0 ? 1 : hits / relevant.size,\n [`precision${prefix}`]: hits / input.cutoff,\n [`mrr${prefix}`]: firstRelevantRank === -1 ? 0 : 1 / (firstRelevantRank + 1),\n [`ndcg${prefix}`]: ndcgAt(input.rankedDocumentIds, input.expectedScores, input.cutoff),\n }\n}\n\nfunction stringField(row: Record<string, unknown>, key: string): string | undefined {\n const value = row[key]\n return typeof value === 'string' ? value : undefined\n}\n\nfunction stripKnown(\n row: Record<string, unknown>,\n keys: readonly string[],\n): Record<string, unknown> {\n const known = new Set(keys)\n return Object.fromEntries(Object.entries(row).filter(([key]) => !known.has(key)))\n}\n\nfunction normalizeCutoffs(cutoffs: readonly number[]): number[] {\n return [\n ...new Set(cutoffs.map((cutoff) => Math.trunc(cutoff)).filter((cutoff) => cutoff > 0)),\n ].sort((a, b) => a - b)\n}\n\nfunction uniqueOrdered(values: readonly string[]): string[] {\n const seen = new Set<string>()\n const out: string[] = []\n for (const value of values) {\n const trimmed = value.trim()\n if (!trimmed || seen.has(trimmed)) continue\n seen.add(trimmed)\n out.push(trimmed)\n }\n return out\n}\n\nfunction ndcgAt(\n rankedDocumentIds: readonly string[],\n expectedScores: Record<string, number>,\n cutoff: number,\n): number {\n const dcg = rankedDocumentIds\n .slice(0, cutoff)\n .reduce(\n (sum, documentId, index) => sum + discountedGain(expectedScores[documentId] ?? 0, index),\n 0,\n )\n const ideal = Object.values(expectedScores)\n .filter((score) => score > 0)\n .sort((a, b) => b - a)\n .slice(0, cutoff)\n .reduce((sum, score, index) => sum + discountedGain(score, index), 0)\n return ideal === 0 ? 1 : dcg / ideal\n}\n\nfunction discountedGain(relevance: number, zeroBasedRank: number): number {\n if (relevance <= 0) return 0\n return (2 ** relevance - 1) / Math.log2(zeroBasedRank + 2)\n}\n"],"mappings":";;;;;;;;AAsBA,eAAsB,yBACpB,SAC2C;CAC3C,MAAM,OAAO,MAAM,QAAQ,QAAQ,SAAS,QAAQ,MAAM,QAAQ,YAAY;CAC9E,MAAM,SAAS,MAAM,QAAQ,QAAQ,SAAS,QAAQ,MAAM,QAAQ,cAAc;CAClF,MAAM,YAAYA,UAAQ,KAAK,KAAK;CACpC,MAAM,cAAcA,UAAQ,OAAO,KAAK;CACxC,MAAM,eAAe,QAAQ,gBAAgB;CAC7C,MAAM,iBAAiB,QAAQ,kBAAkB;CACjD,MAAM,SAAS,QAAQ,UAAU;CACjC,MAAM,MAAM,cAAc;CAC1B,MAAM,UAAU;EACd,aAAa,eACT,KAAA,IACA,cAAc,UAAU,QAAQ,CAAC,EAAE,eAAe,aAAa,QAAQ,CAAC;EAC5E,eAAe,iBACX,KAAA,IACA,gBAAgB,YAAY,QAAQ,CAAC,EAAE,aAAa,eAAe,QAAQ,CAAC;EAChF,OAAO,SAAS,KAAA,IAAY,OAAO,IAAI,QAAQ,CAAC,EAAE,aAAa,OAAO,QAAQ,CAAC;CACjF,CAAC,CAAC,QAAQ,WAA6B,QAAQ,MAAM,CAAC;CAEtD,OAAO;EACL,QAAQ,QAAQ,WAAW;EAC3B;EACA;EACA;EACA;EACA;EACA;CACF;AACF;AAEA,SAASA,UAAQ,OAAuB;CACtC,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG,OAAO;CACpC,IAAI,QAAQ,GAAG,OAAO;CACtB,IAAI,QAAQ,GAAG,OAAO;CACtB,OAAO;AACT;;;;;;;;ACyEA,SAAS,QAAQ,OAAuB;CACtC,IAAI,IAAI;CACR,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;EACrC,KAAK,MAAM,WAAW,CAAC,IAAI;EAC3B,IAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,SAAU;CACxE;CACA,OAAO,MAAM;AACf;;;AAIA,MAAa,uBAAuB;;;;;;;;;AAUpC,SAAgB,mBACd,QACA,OAAe,sBACF;CAEb,MAAM,MADI,QAAQ,GAAG,KAAK,IAAI,QAClB,IAAI;CAChB,IAAI,MAAM,IAAK,OAAO;CACtB,IAAI,MAAM,IAAK,OAAO;CACtB,OAAO;AACT;;;;;;;;;;;;;;;;ACzEA,MAAM,SAAS,UACb,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAC9D,QACD,CAAC;AACP,MAAM,gBAAgB,UACpB,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ;AAChE,MAAM,cAAc,UAClB,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;;AAG1D,eAAe,eAAe,SAA6C;CACzE,MAAM,MAAM,QAAQ,OAAO;CAC3B,MAAM,SAASC,MAAU,MAAM,SAAS,KAAK,KAAK,WAAW,GAAG,MAAM,CAAC;CAIvE,MAAM,cAAc,MAAM,SAAS,KAAK,KAAK,gBAAgB,GAAG,MAAM;CACtE,MAAM,OAAO,MAAM,OAAO,IAAI;CAC9B,MAAM,QAAQ,MAAM,OAAO,KAAK;CAChC,MAAM,WAAW,MAAM,OAAO,QAAQ;CACtC,MAAM,cAAc,MAAM,OAAO,WAAW;CAC5C,MAAM,WAAW,MAAM,OAAO,QAAQ;CACtC,MAAM,aAAa,MAAM,QAAQ,OAAO,SAAS,IAAI,OAAO,YAAY,CAAC,EAAA,CAAG,KACzE,OAAO,UAAU;EAChB,MAAM,SAAS,OAAO,UAAU,WAAW,QAAQ,MAAM,KAAK,CAAC,CAAC;EAChE,IAAI,OAAO,WAAW,YAAY,OAAO,WAAW,GAClD,MAAM,IAAI,MAAM,GAAG,IAAI,wBAAwB,MAAM,uBAAuB;EAE9E,OAAO;CACT,CACF;CACA,MAAM,mBAAmB,MAAM,QAAQ,KAAK,KAAK,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAa;CAC3F,MAAM,OAAO,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK;CACrC,OAAO;EACL,MAAM,WAAW,KAAK,IAAI,KAAK;EAC/B,KAAK;EACL,SAAS;EACT;EACA,iBAAiB,aAAa,MAAM,WAAW;EAC/C,oBAAoB,aAAa,SAAS,WAAW;EACrD,cAAc,WAAW,SAAS,gBAAgB;EAClD,WAAW;GACT,MAAM,aAAa,YAAY,IAAI;GACnC,UAAU,aAAa,YAAY,SAAS;GAC5C,WAAW,aAAa,YAAY,UAAU;GAC9C,MAAM,aAAa,YAAY,IAAI,KAAK;EAC1C;EACA;EACA,gBAAgB,iBAAiB,MAAM,SAAS,mBAAmB,KAAK,IAAI,CAAC;EAC7E,UAAU,WAAW,SAAS,QAAQ;EACtC,yBAAyB,aAAa,SAAS,0BAA0B;CAC3E;AACF;;AAGA,SAAgB,6BACd,SACmC;CACnC,MAAM,QACJ,QAAQ,iBAAiB,WAAmB,mBAAmB,GAAG,QAAQ,GAAG,IAAI,QAAQ;CAC3F,MAAM,WAAW,KAAK,QAAQ,QAAQ,UAAU,GAAG,OAAO;CAE1D,eAAe,UAAqC;EAClD,MAAM,QACJ,QAAQ,UAEN,MAAM,QAAQ,KAEV,MAAM,QAAQ,QAAQ,EAAA,CACtB,IAAI,OAAO,UACV,MAAM,KAAK,KAAK,UAAU,OAAO,WAAW,CAAC,CAAC,CAAC,YAAY,IAAI,MAAO,OACnE,OACA,KACN,CACF,EAAA,CAEC,QAAQ,UAA2B,UAAU,IAAI,CAAC,CAClD,KAAK;EACV,OAAO,QAAQ,IACb,MAAM,IAAI,OAAO,QAAQ;GACvB,MAAM,UAAU,MAAM,eAAe,KAAK,UAAU,GAAG,CAAC;GACxD,OAAO;IACL,IAAI;IACJ;IACA,OAAO,MAAM,GAAG;IAChB,QAAQ,QAAQ,OAAO,QAAQ;IAC/B,UAAU;IACV,MAAM,QAAQ,aAAa,OAAO,CAAC,IAAI,CAAC,QAAQ,QAAQ;IACxD,QAAQ,QAAQ;GAClB;EACF,CAAC,CACH;CACF;CAEA,OAAO;EACL,IAAI,QAAQ;EACZ,QAAQ,QAAQ,OAAO,QAAQ;EAC/B,UAAU;EACV,aACE,GAAG,QAAQ,OAAO,QAAQ,iBAAiB,GAAG,QAAQ,OAAO,WAAW,GAAG,MAAM,QAAQ,OAAO,SAAS,8BAA8B,QACrI,SACA,GACF;EACF,QAAQ,QAAQ;EAChB,eAAe;EACf;EACA,MAAM,YAAY,KAAkB;GAClC,QAAQ,MAAM,QAAQ,EAAA,CAAG,QAAQ,SAAS,KAAK,UAAU,GAAG;EAC9D;EACA,MAAM,SAAS,MAAsB,UAAmD;GACtF,MAAM,UAAU,MAAM,QAAQ,MAAM,MAAM,QAAQ;GAClD,IAAI,CAAC,QAAQ,WACX,MAAM,IAAI,MACR,GAAG,QAAQ,GAAG,GAAG,KAAK,GAAG,8CAA8C,QAAQ,OACjF;GACF,MAAM,EAAE,QAAQ,WAAW,QAAQ;GACnC,IAAI,EAAE,OAAO,SAAS,MAAM,KAAK,UAAU,KAAK,UAAU,IACxD,MAAM,IAAI,MACR,GAAG,QAAQ,GAAG,GAAG,KAAK,GAAG,iCAAiC,OAAO,iBACnE;GAEF,OAAO;IACL,OAAO;IACP,QAAQ,WAAW;IACnB,KAAK;KAAE;KAAQ,GAAI,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO;IAAG;GAC7D;EACF;EACA,aAAa;CACf;AACF;;;ACxLA,MAAa,kBAAiC;CAC5C;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,oBAAoB,YAAY;EAC3C,eAAe,CAAC,WAAW,YAAY;CACzC;CACA;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,mBAAmB,WAAW;EACzC,eAAe,CAAC,YAAY,YAAY;CAC1C;CACA;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,mBAAmB,YAAY;EAC1C,eAAe,CAAC,WAAW,aAAa;CAC1C;CACA;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,qBAAqB,aAAa;EAC7C,eAAe,CAAC,YAAY,SAAS;CACvC;CACA;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,uBAAuB,YAAY;EAC9C,eAAe,CAAC,mBAAmB,YAAY;CACjD;CACA;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,yBAAyB,YAAY;EAChD,eAAe,CAAC,iBAAiB,cAAc;CACjD;CACA;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,sBAAsB,YAAY;EAC7C,eAAe,CAAC,mBAAmB,eAAe;CACpD;CACA;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,qBAAqB,YAAY;EAC5C,eAAe,CAAC,gBAAgB,YAAY;CAC9C;CACA;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,cAAc,eAAe;EACxC,eAAe,CAAC,eAAe,YAAY;CAC7C;CACA;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,eAAe,MAAM;EAChC,eAAe,CAAC,cAAc,SAAS;CACzC;CACA;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,cAAc,iBAAiB;EAC1C,eAAe,CAAC,eAAe,YAAY;CAC7C;CACA;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,eAAe,MAAM;EAChC,eAAe,CAAC,cAAc,SAAS;CACzC;CACA;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,oBAAoB;EAC/B,eAAe,CAAC,cAAc,SAAS;CACzC;CACA;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,sBAAsB,WAAW;EAC5C,eAAe,CAAC,cAAc,cAAc;CAC9C;CACA;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,oBAAoB;EAC/B,eAAe,CAAC,cAAc,SAAS;CACzC;CACA;EACE,IAAI;EACJ,UAAU;EACV,QAAQ;EACR,OAAO;EACP,UAAU,CAAC,sBAAsB,OAAO;EACxC,eAAe,CAAC,YAAY,YAAY;CAC1C;AACF;;;;;;;;;;;AC9IA,IAAM,iBAAN,MAAqF;CACnF,KAAc;CACd,SAAkB;CAClB,WAAoB;CACpB,cAAuB;CACvB,gBAAyB;CAEzB,MAAM,YAAY,OAAmD;EACnE,OAAO,gBAAgB,KAAK,UAAU;GAAE,IAAI,KAAK;GAAI,SAAS;EAAK,EAAE,CAAC,CAAC,QACpE,OAAO,gBAAgB,GAAG,EAAE,MAAM,KACrC;CACF;CAEA,MAAM,SAAS,MAA0B,UAAgD;EACvF,MAAM,SAAS,mBAAmB,QAAQ;EAC1C,MAAM,UAAU,IAAI,IAClB,CAAC,KAAK,QAAQ,OAAO,GAAG,KAAK,QAAQ,QAAQ,CAAC,CAAC,KAAK,MAAM,EAAE,YAAY,CAAC,CAC3E;EACA,MAAM,UAAU,IAAI,IAAY,KAAK,QAAQ,cAAc,KAAK,MAAM,EAAE,YAAY,CAAC,CAAC;EACtF,MAAM,aAAa,OAAO,MAAM,MAAM,QAAQ,IAAI,EAAE,YAAY,CAAC,CAAC,KAAK;EACvE,MAAM,eAAe,OAAO,MAAM,MAAM,QAAQ,IAAI,EAAE,YAAY,CAAC,CAAC,KAAK;EAEzE,OAAO;GACL,OAFY,aAAa,IAAI;GAG7B,KAAK;IACH,YAAY,OAAO,MAAM;IACzB,cAAc;IACd,iBAAiB,QAAQ,YAAY;IACrC,mBAAmB;IACnB,UAAU,KAAK,QAAQ;GACzB;EACF;CACF;CAEA,YAAY,QAA6B;EACvC,OAAO,gBAAgB,MAAM;CAC/B;AACF;AAEA,SAAS,gBAAgB,QAA6B;CACpD,OAAO,mBAAmB,YAAY,QAAQ;AAChD;;;;;;;AAQA,SAAgB,mBAAmB,UAA4B;CAE7D,OADgB,SAAS,MAAM,oCAClB,KAAK,CAAC;AACrB;AAEA,MAAM,UAAU,IAAI,eAAe;AAEnC,MAAa,cAAc,QAAQ,YAAY,KAAK,OAAO;AAC3D,MAAa,WAAW,QAAQ,SAAS,KAAK,OAAO;AACrD,MAAa,cAAc,QAAQ,YAAY,KAAK,OAAO;;;ACS3D,eAAsB,oBACpB,SACkD;CAClD,MAAM,UAAU,QAAQ,WAAW,kBAAkB;CACrD,MAAM,cAAc,eAAe,QAAQ,OAAO;CAClD,MAAM,YAAY,MAAM,uBAAuB,QAAQ,SAAS,QAAQ,MAAM;CAC9E,MAAM,QAAQ,sBAAsB,QAAQ,OAAO;CACnD,MAAM,WAA+D,OACnE,UACA,YACG;EACH,OAAO,QAAQ,QAAQ;GAAE;GAAU,MAAM,SAAS;GAAM;EAAQ,CAAC;CACnE;CAEA,MAAM,WAAW,MAAM,YAAoD;EACzE;EACA;EACA,aAAa,aAAa;EAC1B,QAAQ,CAAC,KAAK;EACd,MAAM,QAAQ;EACd,MAAM,QAAQ;EACd,WAAW,QAAQ;EACnB,aAAa,QAAQ;EACrB,gBAAgB,QAAQ;EACxB,mBAAmB,QAAQ;EAC3B,aAAa,QAAQ,eAAe;EACpC,QAAQ,QAAQ;EAChB,MAAM,QAAQ;EACd;EACA,KAAK,QAAQ;CACf,CAAC;CACD,MAAM,SAAS,2BAA2B;EACxC,SAAS,QAAQ;EACjB;EACA;CACF,CAAC;CACD,QAAQ,UAAU,SAAS,MAAM;CACjC,MAAM,iBAAiB,KAAK,SAAS,QAAQ,uBAAuB;CACpE,MAAM,qBAAqB,KAAK,SAAS,QAAQ,qBAAqB;CACtE,QAAQ,MAAM,gBAAgB,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,GAAG;CACpE,QAAQ,MAAM,oBAAoB,8BAA8B,MAAM,CAAC;CACvE,OAAO;EAAE;EAAW;EAAU;EAAQ;EAAgB;CAAmB;AAC3E;AAEA,eAAe,uBACb,SACA,SAAiC;CAAC;CAAU;CAAO;AAAS,GACf;CAC7C,MAAM,cAAc,eAAe,OAAO;CAC1C,MAAM,SAAS,QAAQ,UAAU;CACjC,MAAM,WAAW,QAAQ,YAAY;CACrC,MAAM,MAA0C,CAAC;CACjD,MAAM,uBAAO,IAAI,IAAY;CAC7B,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,QAAQ,MAAM,QAAQ,YAAY,KAAK;EAC7C,KAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,WAAW,KAAK,SAAS,QAAQ,YAAY,KAAK,EAAE;GAC1D,IAAI,aAAa,OAAO;GACxB,MAAM,MAAM,GAAG,YAAY,GAAG,KAAK;GACnC,IAAI,KAAK,IAAI,GAAG,GAAG;GACnB,KAAK,IAAI,GAAG;GACZ,IAAI,KAAK;IACP,IAAI;IACJ,MAAM;IACN;IACA,QAAQ,KAAK,UAAU;IACvB,UAAU,KAAK,YAAY;IAC3B;IACA,MAAM,CAAC,mBAAG,IAAI,IAAI,CAAC,UAAU,GAAI,KAAK,QAAQ,CAAC,CAAE,CAAC,CAAC;IACnD;GACF,CAAC;EACH;CACF;CACA,OAAO;AACT;AAEA,SAAS,sBACP,SACqD;CACrD,MAAM,cAAc,eAAe,OAAO;CAC1C,OAAO;EACL,MAAM,GAAG,YAAY;EACrB,YAAY,CACV;GAAE,KAAK;GAAS,aAAa,WAAW,YAAY;EAAkB,GACtE;GAAE,KAAK;GAAU,aAAa;EAAiD,CACjF;EACA,YAAY,aAAgE;GAC1E,OAAO,SAAS,SAAS,eAAe,SAAS,GAAG,WAAW,GAAG,YAAY,EAAE;EAClF;EACA,MAAM,MAAM,EAAE,UAAU,YAAY;GAClC,MAAM,aAAa,MAAM,QAAQ,SAAS,SAAS,MAAM,QAAQ;GAEjE,OAAO;IACL,YAFiB,8BAA8B,UAEtC;IACT,WAAW,QAAQ,WAAW,KAAK;IACnC,OAAO,WAAW,SAAS;GAC7B;EACF;CACF;AACF;AAEA,SAAS,2BAAgD,OAIrC;CAClB,MAAM,eAAe,IAAI,IAAI,MAAM,UAAU,KAAK,aAAa,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC;CAavF,MAAM,aAZO,MAAM,SAAS,MAAM,KAAK,SAAS;EAC9C,MAAM,WAAW,aAAa,IAAI,KAAK,UAAU;EACjD,MAAM,QAAQ,gBAAgB,KAAK,WAAW;EAC9C,MAAM,QAAQ,OAAO,aAAa;EAClC,OAAO;GACL;GACA;GACA;GACA,SAAS,OAAO,WAAW,WAAW,QAAQ,IAAI,IAAI,OAAO;GAC7D,YAAY,OAAO,cAAc,CAAC;EACpC;CACF,CACsB,CAAC,CAAC,QAAQ,QAAQ,CAAC,IAAI,KAAK,KAAK;CACvD,MAAM,cAAc,WAAW,KAAK,QAAQ,IAAI,KAAK;CACrD,OAAO;EACL,aAAa,eAAe,MAAM,OAAO;EACzC,QAAQ,MAAM,QAAQ,UAAU;EAChC,UAAU,MAAM,QAAQ,YAAY;EACpC,GAAI,MAAM,QAAQ,SAAS,EAAE,QAAQ,MAAM,QAAQ,OAAO,IAAI,CAAC;EAC/D,QAAQ,MAAM,SAAS;EACvB,cAAc,MAAM,SAAS;EAC7B,MAAM,MAAM,SAAS;EACrB,WAAW,MAAM,SAAS;EAC1B,SAAS,MAAM,SAAS;EACxB,YAAY,MAAM,SAAS;EAC3B,YAAY,MAAM,UAAU;EAC5B,YAAY,MAAM,SAAS,MAAM;EACjC,aAAa,MAAM,SAAS,WAAW;EACvC,aAAa,MAAM,SAAS,WAAW;EACvC,cAAc,MAAM,SAAS,WAAW,KAAK;EAC7C,QAAQ,gBAAgB,aAAa,QAAQ,IAAI,UAAU,YAAY,WAAW;GAChF;GACA;GACA;EACF,CAAC;EACD,MAAM,gBAAgB,aAAa,QAAQ,IAAI,UAAU,QAAQ,CAAC,CAAC;EACnE,YAAY,oBAAoB,WAAW,KAAK,QAAQ,IAAI,UAAU,CAAC;EACvE,OAAO,aAAa,WAAW;EAC/B,SAAS,aAAa,WAAW,KAAK,QAAQ,IAAI,KAAK,OAAO,CAAC;EAC/D,WAAW,aAAa,WAAW,KAAK,QAAQ,IAAI,KAAK,UAAU,CAAC;CACtE;AACF;AAEA,SAAS,8BAA8B,QAAiC;CACtE,MAAM,YAAY,OAAO,QAAQ,OAAO,MAAM,CAAC,CAC5C,KAAK,CAAC,OAAO,aAAa;EACzB,OAAO,KAAK,MAAM,KAAK,QAAQ,EAAE,KAAK,IAAI,QAAQ,SAAS,EAAE,KAAK,IAAI,QAAQ,QAAQ,EAAE,KAAK,IAAI,QAAQ,MAAM,GAAG,EAAE,KAAK,IAAI,QAAQ,QAAQ,IAAI,EAAE,KAAK,IAAI,QAAQ,UAAU,GAAG,EAAE;CACrL,CAAC,CAAC,CACD,KAAK,IAAI;CACZ,MAAM,UAAU,OAAO,QAAQ,OAAO,UAAU,CAAC,CAC9C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CACtC,KAAK,CAAC,KAAK,UAAU,KAAK,IAAI,KAAK,KAAK,EAAE,KAAK,IAAI,KAAK,IAAI,EAAE,KAAK,IAAI,KAAK,GAAG,EAAE,GAAG,CAAC,CACrF,KAAK,IAAI;CACZ,OAAO;EACL,uBAAuB,OAAO;EAC9B;EACA,aAAa,OAAO;EACpB,gBAAgB,OAAO;EACvB,cAAc,OAAO;EACrB,eAAe,OAAO;EACtB,YAAY,OAAO,WAAW,UAAU,OAAO,YAAY,WAAW,OAAO,YAAY;EACzF,YAAY,IAAI,OAAO,YAAY;EACnC,iBAAiB,IAAI,OAAO,MAAM,IAAI,EAAE,WAAW,IAAI,OAAO,MAAM,MAAM,EAAE,QAAQ,IAAI,OAAO,MAAM,GAAG,EAAE,MAAM,OAAO,MAAM;EAC7H;EACA;EACA;EACA;EACA;EACA,aAAa;EACb;EACA;EACA;EACA;EACA;EACA,WAAW;EACX;CACF,CAAC,CAAC,KAAK,IAAI;AACb;AAEA,SAAS,eAAe,SAAuE;CAC7F,OAAO,QAAQ,MAAM,GAAG,QAAQ,UAAU,SAAS,GAAG,QAAQ,YAAY;AAC5E;AAEA,SAAS,8BAA8B,YAAyD;CAC9F,MAAM,aAAqC,EAAE,OAAO,QAAQ,WAAW,KAAK,EAAE;CAC9E,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,WAAW,cAAc,CAAC,CAAC,GACnE,IAAI,OAAO,SAAS,KAAK,GAAG,WAAW,OAAO;CAEhD,WAAW,SAAU,WAAW,UAAU,WAAW,QAAQ,IAAK,IAAI;CACtE,OAAO;AACT;AAEA,SAAS,oBACP,MACuC;CACvC,MAAM,yBAAS,IAAI,IAAsB;CACzC,KAAK,MAAM,OAAO,MAChB,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,GAAG,GAAG;EAC9C,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG;EAC7B,MAAM,OAAO,OAAO,IAAI,GAAG,KAAK,CAAC;EACjC,KAAK,KAAK,KAAK;EACf,OAAO,IAAI,KAAK,IAAI;CACtB;CAEF,OAAO,OAAO,YAAY,CAAC,GAAG,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,KAAK,aAAa,IAAI,CAAC,CAAC,CAAC;AACjG;AAEA,SAAS,gBACP,MACA,OACA,YAA+B,CAAC,GACO;CACvC,MAAM,0BAAU,IAAI,IAAiB;CACrC,KAAK,MAAM,OAAO,WAAW,QAAQ,IAAI,KAAK,CAAC,CAAC;CAChD,KAAK,MAAM,OAAO,MAAM;EACtB,MAAM,OAAO,MAAM,GAAG;EACtB,KAAK,MAAM,OAAO,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,GAAG;GACrD,MAAM,OAAO,QAAQ,IAAI,GAAG,KAAK,CAAC;GAClC,KAAK,KAAK,GAAG;GACb,QAAQ,IAAI,KAAK,IAAI;EACvB;CACF;CACA,MAAM,MAA6C,CAAC;CACpD,KAAK,MAAM,CAAC,KAAK,SAAS,SAAS;EACjC,MAAM,YAAY;EAKlB,IAAI,OAAO;GACT,GAAG,KAAK;GACR,WAAW,KAAK,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC;GACjD,UAAU,KAAK,UAAU,KAAK,QAAS,IAAI,SAAS,IAAI,CAAE,CAAC;GAC3D,OAAO,aAAa,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC;GACrD,SAAS,aAAa,UAAU,KAAK,QAAQ,IAAI,KAAK,OAAO,CAAC;GAC9D,WAAW,aAAa,UAAU,KAAK,QAAQ,IAAI,KAAK,UAAU,CAAC;EACrE;CACF;CACA,OAAO;AACT;AAEA,SAAS,gBACP,aACwB;CACxB,OAAO,OAAO,OAAO,WAAW,CAAC,CAAC;AACpC;AAEA,SAAS,aAAa,QAAkD;CACtE,MAAM,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,OAAO,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC;CACvE,IAAI,OAAO,WAAW,GAAG,OAAO;EAAE,GAAG;EAAG,KAAK;EAAG,MAAM;EAAG,QAAQ;EAAG,KAAK;EAAG,KAAK;CAAE;CACnF,OAAO;EACL,GAAG,OAAO;EACV,KAAK,OAAO;EACZ,MAAM,KAAK,MAAM;EACjB,QAAQ,WAAW,QAAQ,EAAG;EAC9B,KAAK,WAAW,QAAQ,EAAG;EAC3B,KAAK,OAAO,OAAO,SAAS;CAC9B;AACF;AAEA,SAAS,WAAW,cAAiC,GAAmB;CACtE,IAAI,aAAa,WAAW,GAAG,OAAO;CAKtC,OAAO,aAJO,KAAK,IACjB,aAAa,SAAS,GACtB,KAAK,IAAI,GAAG,KAAK,KAAK,IAAI,aAAa,MAAM,IAAI,CAAC,CAE5B;AAC1B;AAEA,SAAS,KAAK,QAAmC;CAC/C,MAAM,SAAS,OAAO,OAAO,OAAO,QAAQ;CAC5C,IAAI,OAAO,WAAW,GAAG,OAAO;CAChC,OAAO,OAAO,QAAQ,KAAK,UAAU,MAAM,OAAO,CAAC,IAAI,OAAO;AAChE;AAEA,SAAS,QAAQ,OAAuB;CACtC,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG,OAAO;CACpC,IAAI,QAAQ,GAAG,OAAO;CACtB,IAAI,QAAQ,GAAG,OAAO;CACtB,OAAO;AACT;AAEA,SAAS,IAAI,OAAuB;CAClC,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG,OAAO;CACpC,OAAO,MAAM,QAAQ,UAAU,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,CAAC;AACnE;;;ACzSA,SAAgB,eAA4B,MAAmB;CAC7D,OAAO,KACJ,MAAM,OAAO,CAAC,CACd,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAC1B,OAAO,OAAO,CAAC,CACf,KAAK,MAAM,UAAU;EACpB,IAAI;GACF,OAAO,KAAK,MAAM,IAAI;EACxB,SAAS,OAAO;GACd,MAAM,IAAI,MAAM,qBAAqB,QAAQ,EAAE,IAAK,MAAgB,SAAS;EAC/E;CACF,CAAC;AACL;AAEA,SAAS,aAAa,MAA0B;CAC9C,OAAO,KACJ,MAAM,OAAO,CAAC,CACd,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAC1B,OAAO,OAAO,CAAC,CACf,QAAQ,SAAS,CAAC,KAAK,WAAW,GAAG,CAAC,CAAC,CACvC,KAAK,SAAS,KAAK,MAAM,QAAQ,CAAC;AACvC;AAEA,SAAgB,WAAW,MAAuC;CAChE,OAAO,aAAa,IAAI,CAAC,CAAC,SAAS,OAAO,UAAU;EAClD,IAAI,MAAM,SAAS,GAAG,OAAO,CAAC;EAC9B,MAAM,CAAC,SAAS,kBAAkB,mBAAmB,cAAc;EACnE,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,mBAAmB,OAAO,CAAC;EACjE,IAAI,QAAQ,YAAY,MAAM,cAAc,QAAQ,YAAY,MAAM,OAAO,OAAO,CAAC;EACrF,MAAM,aAAa,eAAe,KAAA,IAAY,mBAAmB;EAEjE,MAAM,QAAQ,OADI,eAAe,KAAA,IAAY,oBAAoB,UACnC;EAC9B,IAAI,CAAC,cAAc,CAAC,OAAO,SAAS,KAAK,GACvC,MAAM,IAAI,MAAM,qBAAqB,QAAQ,EAAE,mCAAmC;EAEpF,OAAO,CAAC;GAAE;GAAS;GAAY;EAAM,CAAC;CACxC,CAAC;AACH;AAEA,SAAgB,qBAAqB,MAA2C;CAC9E,OAAO,eAAwC,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU;EACvE,MAAM,KAAK,YAAY,KAAK,KAAK,KAAK,YAAY,KAAK,IAAI;EAC3D,MAAM,OAAO,YAAY,KAAK,MAAM,KAAK,YAAY,KAAK,UAAU;EACpE,IAAI,CAAC,MAAM,SAAS,KAAA,GAClB,MAAM,IAAI,MAAM,2BAA2B,QAAQ,EAAE,oCAAoC;EAE3F,OAAO;GACL;GACA,OAAO,YAAY,KAAK,OAAO;GAC/B,MAAM;GACN,UAAU,WAAW,KAAK;IAAC;IAAO;IAAM;IAAS;IAAQ;GAAU,CAAC;EACtE;CACF,CAAC;AACH;AAEA,SAAgB,sBAAsB,MAAwC;CAC5E,OAAO,eAAwC,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU;EACvE,MAAM,KAAK,YAAY,KAAK,KAAK,KAAK,YAAY,KAAK,IAAI,KAAK,YAAY,KAAK,UAAU;EAC3F,MAAM,QAAQ,YAAY,KAAK,MAAM,KAAK,YAAY,KAAK,OAAO;EAClE,IAAI,CAAC,MAAM,CAAC,OACV,MAAM,IAAI,MAAM,0BAA0B,QAAQ,EAAE,iCAAiC;EAEvF,OAAO;GACL;GACA,MAAM;GACN,UAAU,WAAW,KAAK;IAAC;IAAO;IAAM;IAAY;IAAQ;GAAO,CAAC;EACtE;CACF,CAAC;AACH;AAEA,SAAgB,4BACd,SACuD;CACvD,MAAM,+BAAe,IAAI,IAAqC;CAC9D,KAAK,MAAM,QAAQ,QAAQ,OAAO;EAChC,IAAI,KAAK,SAAS,GAAG;EACrB,MAAM,OAAO,aAAa,IAAI,KAAK,OAAO,KAAK,CAAC;EAChD,KAAK,KAAK,IAAI;EACd,aAAa,IAAI,KAAK,SAAS,IAAI;CACrC;CACA,MAAM,SACJ,QAAQ,0BAA0B,QAAQ,SACtC,OAAO,YAAY,QAAQ,OAAO,KAAK,aAAa,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC,IAC5E,KAAA;CACN,OAAO,QAAQ,QAAQ,SAAS,UAAU;EACxC,MAAM,QAAQ,aAAa,IAAI,MAAM,EAAE,KAAK,CAAC;EAC7C,IAAI,MAAM,WAAW,GAAG,OAAO,CAAC;EAChC,MAAM,QACJ,QAAQ,UAAU,MAAM,EAAE,KAAK,mBAAmB,GAAG,QAAQ,YAAY,GAAG,MAAM,IAAI;EACxF,OAAO,CACL;GACE,IAAI,MAAM;GACV;GACA,QAAQ,QAAQ;GAChB,UAAU;GACV,MAAM,CAAC,mBAAG,IAAI,IAAI,CAAC,GAAI,QAAQ,QAAQ,CAAC,GAAI,KAAK,CAAC,CAAC;GACnD,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;GACnD,GAAI,MAAM,WAAW,EAAE,UAAU,MAAM,SAAS,IAAI,CAAC;GACrD,SAAS;IACP,SAAS,MAAM;IACf,OAAO,MAAM;IACb,qBAAqB,MAAM,KAAK,SAAS,KAAK,UAAU;IACxD,gBAAgB,OAAO,YAAY,MAAM,KAAK,SAAS,CAAC,KAAK,YAAY,KAAK,KAAK,CAAC,CAAC;IACrF,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;IAC3B,GAAI,MAAM,WAAW,EAAE,UAAU,MAAM,SAAS,IAAI,CAAC;GACvD;EACF,CACF;CACF,CAAC;AACH;AAEA,SAAgB,kCACd,SAKA;CACA,MAAM,QAAQ,4BAA4B,OAAO;CACjD,OAAO;EACL,IAAI,QAAQ;EACZ,QAAQ,QAAQ;EAChB,UAAU;EACV,QAAQ,QAAQ;EAChB,eAAe,QAAQ,iBAAiB;EACxC,MAAM,YAAY,OAAO;GACvB,OAAO,MAAM,QAAQ,SAAS,KAAK,UAAU,KAAK;EACpD;EACA,MAAM,SAAS,MAAM,UAAU;GAC7B,OAAO,0BAA0B,KAAK,SAAS,UAAU,OAAO;EAClE;EACA,YAAY,QAAQ;GAClB,OAAO,QAAQ,UAAU,MAAM,KAAK,mBAAmB,GAAG,QAAQ,YAAY,GAAG,QAAQ;EAC3F;CACF;AACF;AAEA,SAAgB,0BACd,SACA,UACA,UAA8C,CAAC,GAC/C;CACA,MAAM,oBAAoB,8BACxB,UACA,QAAQ,qBAAqB,oBAC/B;CACA,MAAM,UAAU,iBAAiB,QAAQ,WAAW;EAAC;EAAG;EAAG;EAAG;CAAE,CAAC;CACjE,MAAM,aAAqC;EACzC,gBAAgB,QAAQ,oBAAoB;EAC5C,gBAAgB,kBAAkB;CACpC;CACA,KAAK,MAAM,UAAU,SACnB,OAAO,OACL,YACA,yBAAyB;EACvB;EACA,gBAAgB,QAAQ;EACxB;CACF,CAAC,CACH;CAEF,MAAM,gBAAgB,QAAQ,iBAAiB;CAC/C,MAAM,aAAa,QAAQ,cAAc;CACzC,MAAM,QAAQ,WAAW,kBAAkB,WAAW,QAAQ,QAAQ,QAAQ,SAAS,SAAS;CAGhG,OAAO;EACL;EACA,SAHA,WAAW,eAAe,WAAW,OAAO,QAAQ,QAAQ,SAAS,SAAS,WAGxD,QAAQ,iBAAiB;EAC/C;EACA,KAAK;GACH;GACA,qBAAqB,QAAQ;GAC7B,gBAAgB,QAAQ;EAC1B;CACF;AACF;AAEA,SAAS,8BACP,UACA,oBAA4B,sBAClB;CACV,IAAI,OAAO,aAAa,UACtB,OAAO,eAAe,SAAS,MAAM,iBAAiB,KAAK,CAAC,EAAA,CAAG,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC;CAE7F,IAAI,MAAM,QAAQ,QAAQ,GAExB,OAAO,cACLC,SAAQ,SAAS,UAAU;EACzB,IAAI,OAAO,UAAU,UAAU,OAAO,CAAC,KAAK;EAC5C,OAAO,CAAC,MAAM,cAAc,MAAM,SAAS,MAAM,MAAM,EAAE;CAC3D,CAAC,CACH;CAEF,MAAM,iBAAiB;CACvB,OAAO,cACL;EACE,GAAI,eAAe,eAAe,CAAC;EACnC,GAAI,eAAe,OAAO,CAAC;EAC3B,IAAI,eAAe,WAAW,CAAC,EAAA,CAAG,KAC/B,UAAU,MAAM,cAAc,MAAM,SAAS,MAAM,MAAM,EAC5D;CACF,CAAC,CAAC,KAAK,UAAU,MAAM,KAAK,CAAC,CAC/B;AACF;AAEA,SAAS,yBAAyB,OAIP;CACzB,MAAM,MAAM,MAAM,kBAAkB,MAAM,GAAG,MAAM,MAAM;CACzD,MAAM,cAAc,OAAO,KAAK,MAAM,cAAc,CAAC,CAAC,QACnD,OAAO,MAAM,eAAe,MAAO,CACtC;CACA,MAAM,WAAW,IAAI,IAAI,WAAW;CACpC,MAAM,OAAO,IAAI,QAAQ,OAAO,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;CAClD,MAAM,oBAAoB,IAAI,WAAW,OAAO,SAAS,IAAI,EAAE,CAAC;CAChE,MAAM,SAAS,IAAI,MAAM;CACzB,OAAO;GACJ,MAAM,WAAW,OAAO,IAAI,IAAI;GAChC,SAAS,WAAW,SAAS,SAAS,IAAI,IAAI,OAAO,SAAS;GAC9D,YAAY,WAAW,OAAO,MAAM;GACpC,MAAM,WAAW,sBAAsB,KAAK,IAAI,KAAK,oBAAoB;GACzE,OAAO,WAAW,OAAO,MAAM,mBAAmB,MAAM,gBAAgB,MAAM,MAAM;CACvF;AACF;AAEA,SAAS,YAAY,KAA8B,KAAiC;CAClF,MAAM,QAAQ,IAAI;CAClB,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAA;AAC7C;AAEA,SAAS,WACP,KACA,MACyB;CACzB,MAAM,QAAQ,IAAI,IAAI,IAAI;CAC1B,OAAO,OAAO,YAAY,OAAO,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;AAClF;AAEA,SAAS,iBAAiB,SAAsC;CAC9D,OAAO,CACL,GAAG,IAAI,IAAI,QAAQ,KAAK,WAAW,KAAK,MAAM,MAAM,CAAC,CAAC,CAAC,QAAQ,WAAW,SAAS,CAAC,CAAC,CACvF,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC;AACxB;AAEA,SAAS,cAAc,QAAqC;CAC1D,MAAM,uBAAO,IAAI,IAAY;CAC7B,MAAM,MAAgB,CAAC;CACvB,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,UAAU,MAAM,KAAK;EAC3B,IAAI,CAAC,WAAW,KAAK,IAAI,OAAO,GAAG;EACnC,KAAK,IAAI,OAAO;EAChB,IAAI,KAAK,OAAO;CAClB;CACA,OAAO;AACT;AAEA,SAAS,OACP,mBACA,gBACA,QACQ;CACR,MAAM,MAAM,kBACT,MAAM,GAAG,MAAM,CAAC,CAChB,QACE,KAAK,YAAY,UAAU,MAAM,eAAe,eAAe,eAAe,GAAG,KAAK,GACvF,CACF;CACF,MAAM,QAAQ,OAAO,OAAO,cAAc,CAAC,CACxC,QAAQ,UAAU,QAAQ,CAAC,CAAC,CAC5B,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CACrB,MAAM,GAAG,MAAM,CAAC,CAChB,QAAQ,KAAK,OAAO,UAAU,MAAM,eAAe,OAAO,KAAK,GAAG,CAAC;CACtE,OAAO,UAAU,IAAI,IAAI,MAAM;AACjC;AAEA,SAAS,eAAe,WAAmB,eAA+B;CACxE,IAAI,aAAa,GAAG,OAAO;CAC3B,QAAQ,KAAK,YAAY,KAAK,KAAK,KAAK,gBAAgB,CAAC;AAC3D"}
1
+ {"version":3,"file":"index.js","names":["clamp01","parseToml","entries"],"sources":["../../src/benchmarks/calibration.ts","../../src/benchmarks/types.ts","../../src/benchmarks/harbor.ts","../../src/benchmarks/routing/dataset.ts","../../src/benchmarks/routing/index.ts","../../src/benchmarks/runner.ts","../../src/benchmarks/standard-formats.ts"],"sourcesContent":["import type { BenchmarkAdapter, BenchmarkDatasetItem, BenchmarkEvaluation } from './types'\n\nexport interface BenchmarkMetricCalibrationOptions<TPayload = unknown, TArtifact = string> {\n adapter: BenchmarkAdapter<BenchmarkDatasetItem<TPayload>, TPayload, TArtifact>\n item: BenchmarkDatasetItem<TPayload>\n weakArtifact: TArtifact\n strongArtifact: TArtifact\n maxWeakScore?: number\n minStrongScore?: number\n minGap?: number\n}\n\nexport interface BenchmarkMetricCalibrationResult {\n passed: boolean\n weak: BenchmarkEvaluation\n strong: BenchmarkEvaluation\n weakScore: number\n strongScore: number\n gap: number\n reasons: string[]\n}\n\nexport async function calibrateBenchmarkMetric<TPayload = unknown, TArtifact = string>(\n options: BenchmarkMetricCalibrationOptions<TPayload, TArtifact>,\n): Promise<BenchmarkMetricCalibrationResult> {\n const weak = await options.adapter.evaluate(options.item, options.weakArtifact)\n const strong = await options.adapter.evaluate(options.item, options.strongArtifact)\n const weakScore = clamp01(weak.score)\n const strongScore = clamp01(strong.score)\n const maxWeakScore = options.maxWeakScore ?? 0.3\n const minStrongScore = options.minStrongScore ?? 0.7\n const minGap = options.minGap ?? 0.4\n const gap = strongScore - weakScore\n const reasons = [\n weakScore <= maxWeakScore\n ? undefined\n : `weak score ${weakScore.toFixed(3)} exceeds max ${maxWeakScore.toFixed(3)}`,\n strongScore >= minStrongScore\n ? undefined\n : `strong score ${strongScore.toFixed(3)} below min ${minStrongScore.toFixed(3)}`,\n gap >= minGap ? undefined : `gap ${gap.toFixed(3)} below min ${minGap.toFixed(3)}`,\n ].filter((reason): reason is string => Boolean(reason))\n\n return {\n passed: reasons.length === 0,\n weak,\n strong,\n weakScore,\n strongScore,\n gap,\n reasons,\n }\n}\n\nfunction clamp01(value: number): number {\n if (!Number.isFinite(value)) return 0\n if (value < 0) return 0\n if (value > 1) return 1\n return value\n}\n","/**\n * Shared types for the reference benchmark wrappers under\n * `src/benchmarks/`. Each wrapper exports the three functions in\n * `BenchmarkAdapter` plus its own typed `DatasetItem` shape.\n */\n\nimport type { DispatchContext, Scenario } from '../campaign/types'\nimport type { RunSplitTag } from '../run-record'\n\nexport type BenchmarkTaskKind =\n | 'retrieval'\n | 'rag-answer'\n | 'hallucination'\n | 'kb-improvement'\n | 'routing'\n | 'custom'\n\nexport type BenchmarkFamily =\n | 'beir'\n | 'mteb-retrieval'\n | 'msmarco'\n | 'trec-dl'\n | 'miracl'\n | 'lotte'\n | 'bright'\n | 'crag'\n | 'hotpotqa'\n | 'kilt'\n | 'ragtruth'\n | 'faithbench'\n | 'first-party'\n | 'custom'\n\nexport interface BenchmarkDatasetItem<TPayload = unknown> {\n /** Stable dataset-local item id (used for split assignment + paper\n * references). Unique within a benchmark. */\n id: string\n /** Free-form payload. Each benchmark defines its own shape. */\n payload: TPayload\n /** Optional precomputed split. When absent, adapters use assignSplit(id). */\n split?: RunSplitTag\n /** Benchmark family this row came from, e.g. `beir` or `crag`. */\n family?: BenchmarkFamily | string\n /** Benchmark-local task kind, e.g. retrieval vs answer quality. */\n taskKind?: BenchmarkTaskKind | string\n /** Slice labels such as language, domain, freshness, multihop, long-tail. */\n tags?: string[]\n /** Dataset provenance, version, URL, or license notes. */\n source?: BenchmarkSource\n metadata?: Record<string, unknown>\n}\n\nexport interface BenchmarkEvaluation {\n /** [0, 1] score for the response on this item. Exact-match\n * benchmarks use 0/1; partial-credit benchmarks may return\n * fractional values. */\n score: number\n /** Optional pass/fail projection. Defaults to `score > 0` when absent. */\n passed?: boolean\n /** Numeric sub-metrics. These become report dimensions. */\n dimensions?: Record<string, number>\n /** Optional bag of raw scoring signals — e.g. parsed numeric\n * answer, regex match, judge sub-scores. */\n raw: Record<string, unknown>\n notes?: string\n}\n\nexport interface BenchmarkSource {\n name?: string\n url?: string\n version?: string\n /** The exact upstream revision, such as a git commit, when `version` names a release. */\n revision?: string\n license?: string\n citation?: string\n /** Where the upstream states how a result must be produced to count, such as leaderboard rules. */\n rules?: string\n /**\n * Whether the tasks or their solutions may be in a model's training data: `unknown` until\n * checked, `none-known`, `suspected`, or `confirmed` (then report results as historical).\n */\n contamination?: 'unknown' | 'none-known' | 'suspected' | 'confirmed'\n}\n\n/** Common signature implemented by every adapter under `src/benchmarks/*`. */\n// `TPayload` is the per-item payload type; `_TItem` is preserved for\n// downstream type-narrowing extensions (a richer `BenchmarkDatasetItem`\n// subclass that adds e.g. provenance metadata) but is intentionally\n// unused here. `noUnusedLocals` requires the leading underscore.\nexport interface BenchmarkAdapter<_TItem = unknown, TPayload = unknown, TArtifact = string> {\n /** Stable benchmark id such as `beir/nfcorpus` or `crag/smoke`. */\n id?: string\n family?: BenchmarkFamily | string\n taskKind?: BenchmarkTaskKind | string\n description?: string\n source?: BenchmarkSource\n defaultMetric?: string\n /** Load the dataset for the given split. May hit the network on\n * first call but should be cache-friendly. Adapters that don't\n * ship the dataset itself MUST throw a clearly-marked error\n * pointing the caller at the loader script. */\n loadDataset(split: RunSplitTag): Promise<BenchmarkDatasetItem<TPayload>[]>\n /** Score a single response. Pure with respect to the inputs. */\n evaluate(item: BenchmarkDatasetItem<TPayload>, artifact: TArtifact): Promise<BenchmarkEvaluation>\n /** Deterministic split assignment via item id hashing. The\n * fraction of items in each split is implementation-defined but\n * MUST be stable across processes and platforms. */\n assignSplit(itemId: string): RunSplitTag\n}\n\nexport interface BenchmarkScenario<TPayload = unknown> extends Scenario {\n kind: 'benchmark'\n benchmarkId: string\n family: BenchmarkFamily | string\n taskKind: BenchmarkTaskKind | string\n splitTag: RunSplitTag\n item: BenchmarkDatasetItem<TPayload>\n}\n\nexport type BenchmarkResponder<TPayload = unknown, TArtifact = string> = (input: {\n scenario: BenchmarkScenario<TPayload>\n item: BenchmarkDatasetItem<TPayload>\n context: DispatchContext\n}) => Promise<TArtifact> | TArtifact\n\n// ── Deterministic split assignment ───────────────────────────────────\n\n/**\n * 32-bit FNV-1a hash. Stable, allocation-free, deterministic across\n * runtimes. We use it to assign items to splits rather than depending\n * on a polyfilled crypto.subtle path.\n */\nfunction fnv1a32(input: string): number {\n let h = 0x811c9dc5\n for (let i = 0; i < input.length; i++) {\n h ^= input.charCodeAt(i) & 0xff\n h = (h + ((h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24))) >>> 0\n }\n return h >>> 0\n}\n\n/** Split-assignment seed shared across all benchmarks. Bumping this\n * value reshuffles every split — do NOT do that lightly. */\nexport const BENCHMARK_SPLIT_SEED = 'agent-eval-v1'\n\n/**\n * Assign an item id to one of `'search' | 'dev' | 'holdout'` using a\n * stable 32-bit hash of `${seed}::${id}`. Default proportions:\n *\n * search: 60% (optimization-readable)\n * dev: 20% (held-out for tuning, leak-on-purpose during dev)\n * holdout:20% (paper-grade held-out, gated reads)\n */\nexport function deterministicSplit(\n itemId: string,\n seed: string = BENCHMARK_SPLIT_SEED,\n): RunSplitTag {\n const h = fnv1a32(`${seed}::${itemId}`)\n const pos = h / 0x100000000\n if (pos < 0.6) return 'search'\n if (pos < 0.8) return 'dev'\n return 'holdout'\n}\n","/**\n * A Harbor dataset as a `BenchmarkAdapter`.\n *\n * Harbor (https://harborframework.com) lays out each task as a directory with `task.toml`,\n * `instruction.md`, the agent's `environment/`, and the `tests/` its verifier runs, usually in a\n * verifier image of their own. This importer reads a local checkout of such a dataset, at the\n * revision the caller pins in `source`, into `BenchmarkDatasetItem`s.\n *\n * Scoring stays Harbor's. `evaluate` hands the task and the agent's artifact to the caller's\n * `grade` callback, which runs the task's own verifier (for example `harbor run -p <taskDir>`\n * with an agent that installs the collected artifacts) and reports its reward. This package does\n * not start containers. A verifier that did not run is an error, never a score of zero.\n */\n\nimport { readdir, readFile, stat } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\n\nimport { parse as parseToml } from 'smol-toml'\n\nimport type { RunSplitTag } from '../run-record'\nimport type {\n BenchmarkAdapter,\n BenchmarkDatasetItem,\n BenchmarkEvaluation,\n BenchmarkSource,\n} from './types'\nimport { deterministicSplit } from './types'\n\n/** One Harbor task, as its `task.toml` and `instruction.md` state it. */\nexport interface HarborTaskPayload {\n /** `[task].name`, such as `terminal-bench/interleaved-vigenere`; the directory name when absent. */\n name: string\n /** The task's directory name inside the dataset's `tasks/`. */\n dir: string\n /** Absolute path of the task directory, for the grader. */\n taskDir: string\n /** `instruction.md`, verbatim. */\n instruction: string\n /** `[agent].timeout_sec`; null when the task sets none. */\n agentTimeoutSec: number | null\n /** `[verifier].timeout_sec`; null when the task sets none. */\n verifierTimeoutSec: number | null\n /** `[verifier].environment_mode`: `separate` runs the tests in their own image. */\n verifierMode: string | null\n /** `[environment]` requests; null where the task states none. */\n resources: {\n cpus: number | null\n memoryMb: number | null\n storageMb: number | null\n gpus: number\n }\n /** Paths the verifier reads from the agent's environment (`artifacts`, sources only). */\n artifacts: string[]\n /** The environment starts more than one container (a docker-compose file). */\n multiContainer: boolean\n /** `[metadata].category`. */\n category: string | null\n /** `[metadata].expert_time_estimate_hours`. */\n expertTimeEstimateHours: number | null\n}\n\nexport type HarborTaskItem = BenchmarkDatasetItem<HarborTaskPayload>\n\n/** What the verifier returned for one task, or why it did not return. */\nexport type HarborGradeOutcome =\n | { succeeded: true; value: { reward: number; detail?: string } }\n | { succeeded: false; error: string }\n\nexport interface HarborBenchmarkOptions<TArtifact> {\n /** Stable benchmark id, such as `terminal-bench@4.0.0`. */\n id: string\n /** A checkout of the dataset: the directory that holds `tasks/`. */\n datasetDir: string\n /** The upstream name, URL, version, revision, rules and contamination status the checkout is. */\n source: BenchmarkSource & { revision: string }\n /** Task directory names to load, in this order; every task under `tasks/` when absent. */\n tasks?: readonly string[]\n /** Run the task's own verifier on the agent's artifact. */\n grade: (item: HarborTaskItem, artifact: TArtifact) => Promise<HarborGradeOutcome>\n /** Split assignment; `deterministicSplit` over the benchmark id and task directory by default. */\n assignSplit?: (itemId: string) => RunSplitTag\n}\n\n/** Harbor adapter plus a loader that ignores splits, since a public benchmark reports every task. */\nexport interface HarborBenchmarkAdapter<TArtifact>\n extends BenchmarkAdapter<HarborTaskItem, HarborTaskPayload, TArtifact> {\n loadAll(): Promise<HarborTaskItem[]>\n}\n\nconst table = (value: unknown): Record<string, unknown> =>\n value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {}\nconst numberOrNull = (value: unknown): number | null =>\n typeof value === 'number' && Number.isFinite(value) ? value : null\nconst textOrNull = (value: unknown): string | null =>\n typeof value === 'string' && value.length > 0 ? value : null\n\n/** Read one Harbor task directory. Throws when `task.toml` or `instruction.md` is missing or malformed. */\nasync function readHarborTask(taskDir: string): Promise<HarborTaskPayload> {\n const dir = resolve(taskDir)\n const config = parseToml(await readFile(join(dir, 'task.toml'), 'utf8')) as Record<\n string,\n unknown\n >\n const instruction = await readFile(join(dir, 'instruction.md'), 'utf8')\n const task = table(config.task)\n const agent = table(config.agent)\n const verifier = table(config.verifier)\n const environment = table(config.environment)\n const metadata = table(config.metadata)\n const artifacts = (Array.isArray(config.artifacts) ? config.artifacts : []).map(\n (entry, index) => {\n const source = typeof entry === 'string' ? entry : table(entry).source\n if (typeof source !== 'string' || source.length === 0) {\n throw new Error(`${dir}/task.toml: artifacts[${index}] names no source path`)\n }\n return source\n },\n )\n const environmentFiles = await readdir(join(dir, 'environment')).catch(() => [] as string[])\n const name = dir.split('/').pop() ?? dir\n return {\n name: textOrNull(task.name) ?? name,\n dir: name,\n taskDir: dir,\n instruction,\n agentTimeoutSec: numberOrNull(agent.timeout_sec),\n verifierTimeoutSec: numberOrNull(verifier.timeout_sec),\n verifierMode: textOrNull(verifier.environment_mode),\n resources: {\n cpus: numberOrNull(environment.cpus),\n memoryMb: numberOrNull(environment.memory_mb),\n storageMb: numberOrNull(environment.storage_mb),\n gpus: numberOrNull(environment.gpus) ?? 0,\n },\n artifacts,\n multiContainer: environmentFiles.some((file) => /compose\\.ya?ml$/u.test(file)),\n category: textOrNull(metadata.category),\n expertTimeEstimateHours: numberOrNull(metadata.expert_time_estimate_hours),\n }\n}\n\n/** Import a Harbor dataset checkout as a `BenchmarkAdapter` whose scorer is the dataset's own verifier. */\nexport function createHarborBenchmarkAdapter<TArtifact = string>(\n options: HarborBenchmarkOptions<TArtifact>,\n): HarborBenchmarkAdapter<TArtifact> {\n const split =\n options.assignSplit ?? ((itemId: string) => deterministicSplit(`${options.id}::${itemId}`))\n const tasksDir = join(resolve(options.datasetDir), 'tasks')\n\n async function loadAll(): Promise<HarborTaskItem[]> {\n const names =\n options.tasks ??\n (\n await Promise.all(\n (\n await readdir(tasksDir)\n ).map(async (entry) =>\n (await stat(join(tasksDir, entry, 'task.toml')).catch(() => null)) === null\n ? null\n : entry,\n ),\n )\n )\n .filter((entry): entry is string => entry !== null)\n .sort()\n return Promise.all(\n names.map(async (dir) => {\n const payload = await readHarborTask(join(tasksDir, dir))\n return {\n id: dir,\n payload,\n split: split(dir),\n family: options.source.name ?? 'harbor',\n taskKind: 'harbor-task',\n tags: payload.category === null ? [] : [payload.category],\n source: options.source,\n }\n }),\n )\n }\n\n return {\n id: options.id,\n family: options.source.name ?? 'harbor',\n taskKind: 'harbor-task',\n description:\n `${options.source.name ?? 'Harbor dataset'} ${options.source.version ?? ''} at ${options.source.revision}, scored by its own verifier`.replace(\n /\\s+/gu,\n ' ',\n ),\n source: options.source,\n defaultMetric: 'reward',\n loadAll,\n async loadDataset(tag: RunSplitTag) {\n return (await loadAll()).filter((item) => item.split === tag)\n },\n async evaluate(item: HarborTaskItem, artifact: TArtifact): Promise<BenchmarkEvaluation> {\n const outcome = await options.grade(item, artifact)\n if (!outcome.succeeded)\n throw new Error(\n `${options.id} ${item.id}: the verifier did not score this artifact: ${outcome.error}`,\n )\n const { reward, detail } = outcome.value\n if (!(Number.isFinite(reward) && reward >= 0 && reward <= 1)) {\n throw new Error(\n `${options.id} ${item.id}: the verifier returned reward ${reward}, outside [0, 1]`,\n )\n }\n return {\n score: reward,\n passed: reward === 1,\n raw: { reward, ...(detail === undefined ? {} : { detail }) },\n }\n },\n assignSplit: split,\n }\n}\n","/**\n * Synthetic routing dataset. 16 tasks across 4 categories. Used as a\n * deterministic, dependency-free benchmark for any router that maps a\n * natural-language request to one of a fixed set of route labels.\n *\n * Format (see `routing/README.md` for prose):\n *\n * {\n * id: stable per-task ID (matches across processes).\n * category: one of the four route labels.\n * prompt: the user-facing request the router must classify.\n * route: the ground-truth route the router should pick.\n * synonyms: other strings that count as a correct answer.\n * hardNegatives:close-but-wrong route labels — used to detect the\n * \"always picks the popular route\" failure mode.\n * }\n *\n * The four categories are intentionally cross-domain (file ops,\n * math, search, conversation) so a router that collapses to one\n * category is easy to spot.\n */\n\nexport interface RoutingItem {\n id: string\n category: 'file' | 'math' | 'search' | 'chat'\n prompt: string\n /** Canonical correct route label. */\n route: string\n /** Alternate route labels that also count as correct. */\n synonyms: string[]\n /** Wrong-but-tempting route labels (for analysis, not grading). */\n hardNegatives: string[]\n}\n\nexport const ROUTING_DATASET: RoutingItem[] = [\n {\n id: 'file_001',\n category: 'file',\n prompt: 'Save the meeting notes to /tmp/notes-2025-04.md as markdown.',\n route: 'fs.write',\n synonyms: ['filesystem.write', 'write_file'],\n hardNegatives: ['fs.read', 'chat.reply'],\n },\n {\n id: 'file_002',\n category: 'file',\n prompt: 'Read the contents of /etc/hosts and summarize the entries.',\n route: 'fs.read',\n synonyms: ['filesystem.read', 'read_file'],\n hardNegatives: ['fs.write', 'search.web'],\n },\n {\n id: 'file_003',\n category: 'file',\n prompt: 'List every Python file under src/ recursively.',\n route: 'fs.list',\n synonyms: ['filesystem.list', 'list_files'],\n hardNegatives: ['fs.read', 'search.code'],\n },\n {\n id: 'file_004',\n category: 'file',\n prompt: 'Delete the cached build at .turbo/cache.',\n route: 'fs.delete',\n synonyms: ['filesystem.delete', 'remove_file'],\n hardNegatives: ['fs.write', 'fs.list'],\n },\n {\n id: 'math_001',\n category: 'math',\n prompt: 'What is the integral of 3x^2 + 2x from 0 to 5?',\n route: 'math.integral',\n synonyms: ['calculator.integral', 'math.solve'],\n hardNegatives: ['math.derivative', 'chat.reply'],\n },\n {\n id: 'math_002',\n category: 'math',\n prompt: 'Compute the derivative of sin(x) * cos(x).',\n route: 'math.derivative',\n synonyms: ['calculator.derivative', 'math.solve'],\n hardNegatives: ['math.integral', 'math.algebra'],\n },\n {\n id: 'math_003',\n category: 'math',\n prompt: 'Solve 2x + 7 = 19 for x.',\n route: 'math.algebra',\n synonyms: ['calculator.algebra', 'math.solve'],\n hardNegatives: ['math.derivative', 'math.integral'],\n },\n {\n id: 'math_004',\n category: 'math',\n prompt: 'What is the prime factorization of 360?',\n route: 'math.numbertheory',\n synonyms: ['calculator.factor', 'math.solve'],\n hardNegatives: ['math.algebra', 'search.web'],\n },\n {\n id: 'search_001',\n category: 'search',\n prompt: 'Find recent papers on agent prompt optimization with held-out promotion gates.',\n route: 'search.web',\n synonyms: ['web.search', 'search.papers'],\n hardNegatives: ['search.code', 'chat.reply'],\n },\n {\n id: 'search_002',\n category: 'search',\n prompt: 'Search the codebase for every call site of `runProposeReview`.',\n route: 'search.code',\n synonyms: ['code.search', 'grep'],\n hardNegatives: ['search.web', 'fs.read'],\n },\n {\n id: 'search_003',\n category: 'search',\n prompt: 'What is the latest release of the Tangle network on GitHub?',\n route: 'search.web',\n synonyms: ['web.search', 'github.releases'],\n hardNegatives: ['search.code', 'chat.reply'],\n },\n {\n id: 'search_004',\n category: 'search',\n prompt: 'Find all TODO comments in the agent-eval src tree.',\n route: 'search.code',\n synonyms: ['code.search', 'grep'],\n hardNegatives: ['search.web', 'fs.list'],\n },\n {\n id: 'chat_001',\n category: 'chat',\n prompt: 'Hi there, how are you doing today?',\n route: 'chat.reply',\n synonyms: ['conversation.reply'],\n hardNegatives: ['search.web', 'fs.read'],\n },\n {\n id: 'chat_002',\n category: 'chat',\n prompt: 'Please explain the difference between an LLM and a foundation model.',\n route: 'chat.reply',\n synonyms: ['conversation.reply', 'qa.answer'],\n hardNegatives: ['search.web', 'math.algebra'],\n },\n {\n id: 'chat_003',\n category: 'chat',\n prompt: 'Tell me a short joke about distributed systems.',\n route: 'chat.reply',\n synonyms: ['conversation.reply'],\n hardNegatives: ['search.web', 'fs.read'],\n },\n {\n id: 'chat_004',\n category: 'chat',\n prompt: 'Acknowledge my last message with a thumbs up.',\n route: 'chat.reply',\n synonyms: ['conversation.reply', 'react'],\n hardNegatives: ['fs.write', 'search.web'],\n },\n]\n","/**\n * Routing benchmark — synthetic, dependency-free, ships in the\n * package. 16 cross-category items in `dataset.ts`. See\n * `routing/README.md` for the format.\n *\n * `evaluate` does case-insensitive exact match against the canonical\n * route plus declared synonyms. The first valid route token in the\n * response wins; everything else is ignored. Wrong answers also\n * report whether they hit a hard negative — useful when triaging\n * \"always picks the popular route\" failure modes.\n */\n\nimport type { RunSplitTag } from '../../run-record'\nimport type { BenchmarkAdapter, BenchmarkDatasetItem, BenchmarkEvaluation } from '../types'\nimport { deterministicSplit } from '../types'\nimport { ROUTING_DATASET, type RoutingItem } from './dataset'\n\nexport type { RoutingItem }\nexport type RoutingPayload = RoutingItem\nexport type RoutingDatasetItem = BenchmarkDatasetItem<RoutingPayload>\n\nclass RoutingAdapter implements BenchmarkAdapter<RoutingDatasetItem, RoutingPayload> {\n readonly id = 'first-party/routing'\n readonly family = 'first-party'\n readonly taskKind = 'routing'\n readonly description = 'Synthetic fixed-route classification smoke benchmark'\n readonly defaultMetric = 'route_exact_match'\n\n async loadDataset(split: RunSplitTag): Promise<RoutingDatasetItem[]> {\n return ROUTING_DATASET.map((item) => ({ id: item.id, payload: item })).filter(\n (it) => assignSplitImpl(it.id) === split,\n )\n }\n\n async evaluate(item: RoutingDatasetItem, response: string): Promise<BenchmarkEvaluation> {\n const tokens = extractRouteTokens(response)\n const correct = new Set<string>(\n [item.payload.route, ...item.payload.synonyms].map((s) => s.toLowerCase()),\n )\n const hardNeg = new Set<string>(item.payload.hardNegatives.map((s) => s.toLowerCase()))\n const firstMatch = tokens.find((t) => correct.has(t.toLowerCase())) ?? null\n const firstHardNeg = tokens.find((t) => hardNeg.has(t.toLowerCase())) ?? null\n const score = firstMatch ? 1 : 0\n return {\n score,\n raw: {\n firstToken: tokens[0] ?? null,\n matchedRoute: firstMatch,\n hitHardNegative: Boolean(firstHardNeg),\n hardNegativeRoute: firstHardNeg,\n category: item.payload.category,\n },\n }\n }\n\n assignSplit(itemId: string): RunSplitTag {\n return assignSplitImpl(itemId)\n }\n}\n\nfunction assignSplitImpl(itemId: string): RunSplitTag {\n return deterministicSplit(`routing::${itemId}`)\n}\n\n/**\n * Pull route-shaped tokens out of a model response. Routes look like\n * `category.action` (`fs.write`, `chat.reply`). Bare alphanumerics\n * are not routes, but `category.action` patterns are robust to most\n * model wrappers (JSON output, prose explanations, code fences).\n */\nexport function extractRouteTokens(response: string): string[] {\n const matches = response.match(/[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*/gi)\n return matches ?? []\n}\n\nconst adapter = new RoutingAdapter()\n\nexport const loadDataset = adapter.loadDataset.bind(adapter)\nexport const evaluate = adapter.evaluate.bind(adapter)\nexport const assignSplit = adapter.assignSplit.bind(adapter)\nexport { ROUTING_DATASET, RoutingAdapter }\n","import { join } from 'node:path'\nimport {\n type CampaignResult,\n type DispatchFn,\n type JudgeConfig,\n type JudgeScore,\n runCampaign,\n type Scenario,\n} from '../campaign'\nimport { type CampaignStorage, fsCampaignStorage } from '../campaign/storage'\nimport type { RunSplitTag } from '../run-record'\nimport type {\n BenchmarkAdapter,\n BenchmarkDatasetItem,\n BenchmarkEvaluation,\n BenchmarkFamily,\n BenchmarkResponder,\n BenchmarkScenario,\n BenchmarkTaskKind,\n} from './types'\n\nexport interface BenchmarkRunOptions<TPayload = unknown, TArtifact = string> {\n adapter: BenchmarkAdapter<BenchmarkDatasetItem<TPayload>, TPayload, TArtifact>\n respond: BenchmarkResponder<TPayload, TArtifact>\n splits?: readonly RunSplitTag[]\n runDir: string\n repo?: string\n seed?: number\n reps?: number\n resumable?: boolean\n costCeiling?: number\n maxConcurrency?: number\n dispatchTimeoutMs?: number\n expectUsage?: 'assert' | 'warn' | 'off'\n storage?: CampaignStorage\n now?: () => Date\n}\n\nexport interface BenchmarkReport {\n benchmarkId: string\n family: BenchmarkFamily | string\n taskKind: BenchmarkTaskKind | string\n source?: BenchmarkAdapter['source']\n runDir: string\n manifestHash: string\n seed: number\n startedAt: string\n endedAt: string\n durationMs: number\n totalItems: number\n totalCells: number\n cellsFailed: number\n cellsCached: number\n totalCostUsd: number\n splits: Record<string, BenchmarkSliceSummary>\n tags: Record<string, BenchmarkSliceSummary>\n dimensions: Record<string, BenchmarkDistribution>\n score: BenchmarkDistribution\n costUsd: BenchmarkDistribution\n latencyMs: BenchmarkDistribution\n}\n\nexport interface BenchmarkSliceSummary {\n n: number\n meanScore: number\n passRate: number\n score: BenchmarkDistribution\n costUsd: BenchmarkDistribution\n latencyMs: BenchmarkDistribution\n}\n\nexport interface BenchmarkDistribution {\n n: number\n min: number\n mean: number\n median: number\n p90: number\n max: number\n}\n\nexport interface BenchmarkRunResult<TPayload = unknown, TArtifact = string> {\n scenarios: Array<BenchmarkScenario<TPayload>>\n campaign: CampaignResult<TArtifact, BenchmarkScenario<TPayload>>\n report: BenchmarkReport\n reportJsonPath: string\n reportMarkdownPath: string\n}\n\nexport async function runBenchmarkAdapter<TPayload = unknown, TArtifact = string>(\n options: BenchmarkRunOptions<TPayload, TArtifact>,\n): Promise<BenchmarkRunResult<TPayload, TArtifact>> {\n const storage = options.storage ?? fsCampaignStorage()\n const benchmarkId = benchmarkIdFor(options.adapter)\n const scenarios = await loadBenchmarkScenarios(options.adapter, options.splits)\n const judge = benchmarkAdapterJudge(options.adapter)\n const dispatch: DispatchFn<BenchmarkScenario<TPayload>, TArtifact> = async (\n scenario,\n context,\n ) => {\n return options.respond({ scenario, item: scenario.item, context })\n }\n\n const campaign = await runCampaign<BenchmarkScenario<TPayload>, TArtifact>({\n scenarios,\n dispatch,\n dispatchRef: `benchmark:${benchmarkId}`,\n judges: [judge],\n seed: options.seed,\n reps: options.reps,\n resumable: options.resumable,\n costCeiling: options.costCeiling,\n maxConcurrency: options.maxConcurrency,\n dispatchTimeoutMs: options.dispatchTimeoutMs,\n expectUsage: options.expectUsage ?? 'off',\n runDir: options.runDir,\n repo: options.repo,\n storage,\n now: options.now,\n })\n const report = summarizeBenchmarkCampaign({\n adapter: options.adapter,\n scenarios,\n campaign,\n })\n storage.ensureDir(campaign.runDir)\n const reportJsonPath = join(campaign.runDir, 'benchmark-report.json')\n const reportMarkdownPath = join(campaign.runDir, 'benchmark-report.md')\n storage.write(reportJsonPath, `${JSON.stringify(report, null, 2)}\\n`)\n storage.write(reportMarkdownPath, renderBenchmarkReportMarkdown(report))\n return { scenarios, campaign, report, reportJsonPath, reportMarkdownPath }\n}\n\nasync function loadBenchmarkScenarios<TPayload>(\n adapter: BenchmarkAdapter<BenchmarkDatasetItem<TPayload>, TPayload, unknown>,\n splits: readonly RunSplitTag[] = ['search', 'dev', 'holdout'],\n): Promise<Array<BenchmarkScenario<TPayload>>> {\n const benchmarkId = benchmarkIdFor(adapter)\n const family = adapter.family ?? 'custom'\n const taskKind = adapter.taskKind ?? 'custom'\n const out: Array<BenchmarkScenario<TPayload>> = []\n const seen = new Set<string>()\n for (const split of splits) {\n const items = await adapter.loadDataset(split)\n for (const item of items) {\n const splitTag = item.split ?? adapter.assignSplit(item.id)\n if (splitTag !== split) continue\n const key = `${benchmarkId}:${item.id}`\n if (seen.has(key)) continue\n seen.add(key)\n out.push({\n id: key,\n kind: 'benchmark',\n benchmarkId,\n family: item.family ?? family,\n taskKind: item.taskKind ?? taskKind,\n splitTag,\n tags: [...new Set([splitTag, ...(item.tags ?? [])])],\n item,\n })\n }\n }\n return out\n}\n\nfunction benchmarkAdapterJudge<TPayload, TArtifact>(\n adapter: BenchmarkAdapter<BenchmarkDatasetItem<TPayload>, TPayload, TArtifact>,\n): JudgeConfig<TArtifact, BenchmarkScenario<TPayload>> {\n const benchmarkId = benchmarkIdFor(adapter)\n return {\n name: `${benchmarkId}:score`,\n dimensions: [\n { key: 'score', description: `Primary ${benchmarkId} benchmark score` },\n { key: 'passed', description: 'Binary pass projection for aggregate reporting' },\n ],\n appliesTo: (scenario: Scenario): scenario is BenchmarkScenario<TPayload> => {\n return scenario.kind === 'benchmark' && scenario.id.startsWith(`${benchmarkId}:`)\n },\n async score({ artifact, scenario }) {\n const evaluation = await adapter.evaluate(scenario.item, artifact)\n const dimensions = normalizeEvaluationDimensions(evaluation)\n return {\n dimensions,\n composite: clamp01(evaluation.score),\n notes: evaluation.notes ?? '',\n }\n },\n }\n}\n\nfunction summarizeBenchmarkCampaign<TPayload, TArtifact>(input: {\n adapter: BenchmarkAdapter<BenchmarkDatasetItem<TPayload>, TPayload, TArtifact>\n scenarios: Array<BenchmarkScenario<TPayload>>\n campaign: CampaignResult<TArtifact, BenchmarkScenario<TPayload>>\n}): BenchmarkReport {\n const scenarioById = new Map(input.scenarios.map((scenario) => [scenario.id, scenario]))\n const rows = input.campaign.cells.map((cell) => {\n const scenario = scenarioById.get(cell.scenarioId)\n const judge = firstJudgeScore(cell.judgeScores)\n const score = judge?.composite ?? 0\n return {\n cell,\n scenario,\n score,\n passed: (judge?.dimensions.passed ?? (score > 0 ? 1 : 0)) >= 1,\n dimensions: judge?.dimensions ?? {},\n }\n })\n const successful = rows.filter((row) => !row.cell.error)\n const scoreValues = successful.map((row) => row.score)\n return {\n benchmarkId: benchmarkIdFor(input.adapter),\n family: input.adapter.family ?? 'custom',\n taskKind: input.adapter.taskKind ?? 'custom',\n ...(input.adapter.source ? { source: input.adapter.source } : {}),\n runDir: input.campaign.runDir,\n manifestHash: input.campaign.manifestHash,\n seed: input.campaign.seed,\n startedAt: input.campaign.startedAt,\n endedAt: input.campaign.endedAt,\n durationMs: input.campaign.durationMs,\n totalItems: input.scenarios.length,\n totalCells: input.campaign.cells.length,\n cellsFailed: input.campaign.aggregates.cellsFailed,\n cellsCached: input.campaign.aggregates.cellsCached,\n totalCostUsd: input.campaign.aggregates.cost.totalCostUsd,\n splits: summarizeSlices(successful, (row) => row.scenario?.splitTag ?? 'unknown', [\n 'search',\n 'dev',\n 'holdout',\n ]),\n tags: summarizeSlices(successful, (row) => row.scenario?.tags ?? []),\n dimensions: summarizeDimensions(successful.map((row) => row.dimensions)),\n score: distribution(scoreValues),\n costUsd: distribution(successful.map((row) => row.cell.costUsd)),\n latencyMs: distribution(successful.map((row) => row.cell.durationMs)),\n }\n}\n\nfunction renderBenchmarkReportMarkdown(report: BenchmarkReport): string {\n const splitRows = Object.entries(report.splits)\n .map(([split, summary]) => {\n return `| ${split} | ${summary.n} | ${fmt(summary.meanScore)} | ${fmt(summary.passRate)} | ${fmt(summary.score.p90)} | ${fmt(summary.costUsd.mean)} | ${fmt(summary.latencyMs.p90)} |`\n })\n .join('\\n')\n const dimRows = Object.entries(report.dimensions)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, dist]) => `| ${key} | ${dist.n} | ${fmt(dist.mean)} | ${fmt(dist.p90)} |`)\n .join('\\n')\n return [\n `# Benchmark Report: ${report.benchmarkId}`,\n '',\n `- family: ${report.family}`,\n `- task kind: ${report.taskKind}`,\n `- run dir: ${report.runDir}`,\n `- manifest: ${report.manifestHash}`,\n `- cells: ${report.totalCells} total, ${report.cellsFailed} failed, ${report.cellsCached} cached`,\n `- cost: $${fmt(report.totalCostUsd)}`,\n `- score: mean ${fmt(report.score.mean)}, median ${fmt(report.score.median)}, p90 ${fmt(report.score.p90)}, n=${report.score.n}`,\n '',\n '## Splits',\n '',\n '| split | n | mean score | pass rate | score p90 | mean cost | latency p90 ms |',\n '| --- | ---: | ---: | ---: | ---: | ---: | ---: |',\n splitRows || '| none | 0 | 0 | 0 | 0 | 0 | 0 |',\n '',\n '## Dimensions',\n '',\n '| dimension | n | mean | p90 |',\n '| --- | ---: | ---: | ---: |',\n dimRows || '| none | 0 | 0 | 0 |',\n '',\n ].join('\\n')\n}\n\nfunction benchmarkIdFor(adapter: Pick<BenchmarkAdapter, 'id' | 'family' | 'taskKind'>): string {\n return adapter.id ?? `${adapter.family ?? 'custom'}/${adapter.taskKind ?? 'custom'}`\n}\n\nfunction normalizeEvaluationDimensions(evaluation: BenchmarkEvaluation): Record<string, number> {\n const dimensions: Record<string, number> = { score: clamp01(evaluation.score) }\n for (const [key, value] of Object.entries(evaluation.dimensions ?? {})) {\n if (Number.isFinite(value)) dimensions[key] = value\n }\n dimensions.passed = (evaluation.passed ?? evaluation.score > 0) ? 1 : 0\n return dimensions\n}\n\nfunction summarizeDimensions(\n rows: Array<Record<string, number>>,\n): Record<string, BenchmarkDistribution> {\n const values = new Map<string, number[]>()\n for (const row of rows) {\n for (const [key, value] of Object.entries(row)) {\n if (!Number.isFinite(value)) continue\n const list = values.get(key) ?? []\n list.push(value)\n values.set(key, list)\n }\n }\n return Object.fromEntries([...values.entries()].map(([key, vals]) => [key, distribution(vals)]))\n}\n\nfunction summarizeSlices<T>(\n rows: T[],\n keyOf: (row: T) => string | string[],\n knownKeys: readonly string[] = [],\n): Record<string, BenchmarkSliceSummary> {\n const grouped = new Map<string, T[]>()\n for (const key of knownKeys) grouped.set(key, [])\n for (const row of rows) {\n const keys = keyOf(row)\n for (const key of Array.isArray(keys) ? keys : [keys]) {\n const list = grouped.get(key) ?? []\n list.push(row)\n grouped.set(key, list)\n }\n }\n const out: Record<string, BenchmarkSliceSummary> = {}\n for (const [key, list] of grouped) {\n const withShape = list as Array<{\n score: number\n passed: boolean\n cell: { costUsd: number; durationMs: number }\n }>\n out[key] = {\n n: list.length,\n meanScore: mean(withShape.map((row) => row.score)),\n passRate: mean(withShape.map((row) => (row.passed ? 1 : 0))),\n score: distribution(withShape.map((row) => row.score)),\n costUsd: distribution(withShape.map((row) => row.cell.costUsd)),\n latencyMs: distribution(withShape.map((row) => row.cell.durationMs)),\n }\n }\n return out\n}\n\nfunction firstJudgeScore(\n judgeScores: CampaignResult<unknown>['cells'][number]['judgeScores'],\n): JudgeScore | undefined {\n return Object.values(judgeScores)[0]\n}\n\nfunction distribution(values: readonly number[]): BenchmarkDistribution {\n const finite = [...values].filter(Number.isFinite).sort((a, b) => a - b)\n if (finite.length === 0) return { n: 0, min: 0, mean: 0, median: 0, p90: 0, max: 0 }\n return {\n n: finite.length,\n min: finite[0]!,\n mean: mean(finite),\n median: percentile(finite, 0.5),\n p90: percentile(finite, 0.9),\n max: finite[finite.length - 1]!,\n }\n}\n\nfunction percentile(sortedValues: readonly number[], p: number): number {\n if (sortedValues.length === 0) return 0\n const index = Math.min(\n sortedValues.length - 1,\n Math.max(0, Math.ceil(p * sortedValues.length) - 1),\n )\n return sortedValues[index]!\n}\n\nfunction mean(values: readonly number[]): number {\n const finite = values.filter(Number.isFinite)\n if (finite.length === 0) return 0\n return finite.reduce((sum, value) => sum + value, 0) / finite.length\n}\n\nfunction clamp01(value: number): number {\n if (!Number.isFinite(value)) return 0\n if (value < 0) return 0\n if (value > 1) return 1\n return value\n}\n\nfunction fmt(value: number): string {\n if (!Number.isFinite(value)) return '0'\n return value.toFixed(value === 0 || Math.abs(value) >= 10 ? 0 : 3)\n}\n","import type { RunSplitTag } from '../run-record'\nimport type {\n BenchmarkAdapter,\n BenchmarkDatasetItem,\n BenchmarkFamily,\n BenchmarkSource,\n BenchmarkTaskKind,\n} from './types'\nimport { deterministicSplit } from './types'\n\nexport interface StandardRetrievalDocument {\n id: string\n title?: string\n text: string\n metadata?: Record<string, unknown>\n}\n\nexport interface StandardRetrievalQuery {\n id: string\n text: string\n metadata?: Record<string, unknown>\n}\n\nexport interface StandardRetrievalQrel {\n queryId: string\n documentId: string\n score: number\n}\n\nexport interface StandardRetrievalPayload {\n queryId: string\n query: string\n expectedDocumentIds: string[]\n expectedScores: Record<string, number>\n corpus?: Record<string, StandardRetrievalDocument>\n metadata?: Record<string, unknown>\n}\n\nexport interface BuildStandardRetrievalItemsOptions {\n benchmarkId: string\n family: BenchmarkFamily | string\n queries: readonly StandardRetrievalQuery[]\n qrels: readonly StandardRetrievalQrel[]\n corpus?: readonly StandardRetrievalDocument[]\n includeCorpusInPayload?: boolean\n source?: BenchmarkSource\n tags?: readonly string[]\n splitOf?: (queryId: string) => RunSplitTag\n}\n\nexport interface RetrievalIdAdapterOptions extends BuildStandardRetrievalItemsOptions {\n responseIdPattern?: RegExp\n cutoffs?: readonly number[]\n primaryMetric?: string\n passMetric?: string\n passThreshold?: number\n}\n\nexport interface StandardRetrievalResult {\n id?: string\n documentId?: string\n docId?: string\n score?: number\n}\n\nexport type StandardRetrievalArtifact =\n | string\n | readonly string[]\n | readonly StandardRetrievalResult[]\n | {\n ids?: readonly string[]\n documentIds?: readonly string[]\n results?: readonly StandardRetrievalResult[]\n }\n\nexport interface StandardRetrievalEvaluationOptions {\n responseIdPattern?: RegExp\n cutoffs?: readonly number[]\n primaryMetric?: string\n passMetric?: string\n passThreshold?: number\n}\n\nfunction parseJsonlRows<T = unknown>(text: string): T[] {\n return text\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line, index) => {\n try {\n return JSON.parse(line) as T\n } catch (error) {\n throw new Error(`invalid JSONL row ${index + 1}: ${(error as Error).message}`)\n }\n })\n}\n\nfunction parseTsvRows(text: string): string[][] {\n return text\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .filter((line) => !line.startsWith('#'))\n .map((line) => line.split(/\\t|\\s+/))\n}\n\nexport function parseQrels(text: string): StandardRetrievalQrel[] {\n return parseTsvRows(text).flatMap((parts, index) => {\n if (parts.length < 3) return []\n const [queryId, maybeZeroOrDocId, maybeDocIdOrScore, maybeScore] = parts\n if (!queryId || !maybeZeroOrDocId || !maybeDocIdOrScore) return []\n if (queryId.toLowerCase() === 'query-id' || queryId.toLowerCase() === 'qid') return []\n const documentId = maybeScore === undefined ? maybeZeroOrDocId : maybeDocIdOrScore\n const scoreText = maybeScore === undefined ? maybeDocIdOrScore : maybeScore\n const score = Number(scoreText)\n if (!documentId || !Number.isFinite(score)) {\n throw new Error(`invalid qrels row ${index + 1}: expected query id, doc id, score`)\n }\n return [{ queryId, documentId, score }]\n })\n}\n\nexport function parseBeirCorpusJsonl(text: string): StandardRetrievalDocument[] {\n return parseJsonlRows<Record<string, unknown>>(text).map((row, index) => {\n const id = stringField(row, '_id') ?? stringField(row, 'id')\n const body = stringField(row, 'text') ?? stringField(row, 'contents')\n if (!id || body === undefined) {\n throw new Error(`invalid BEIR corpus row ${index + 1}: expected _id/id and text/contents`)\n }\n return {\n id,\n title: stringField(row, 'title'),\n text: body,\n metadata: stripKnown(row, ['_id', 'id', 'title', 'text', 'contents']),\n }\n })\n}\n\nexport function parseBeirQueriesJsonl(text: string): StandardRetrievalQuery[] {\n return parseJsonlRows<Record<string, unknown>>(text).map((row, index) => {\n const id = stringField(row, '_id') ?? stringField(row, 'id') ?? stringField(row, 'query_id')\n const query = stringField(row, 'text') ?? stringField(row, 'query')\n if (!id || !query) {\n throw new Error(`invalid BEIR query row ${index + 1}: expected _id/id and text/query`)\n }\n return {\n id,\n text: query,\n metadata: stripKnown(row, ['_id', 'id', 'query_id', 'text', 'query']),\n }\n })\n}\n\nexport function buildStandardRetrievalItems(\n options: BuildStandardRetrievalItemsOptions,\n): Array<BenchmarkDatasetItem<StandardRetrievalPayload>> {\n const qrelsByQuery = new Map<string, StandardRetrievalQrel[]>()\n for (const qrel of options.qrels) {\n if (qrel.score <= 0) continue\n const list = qrelsByQuery.get(qrel.queryId) ?? []\n list.push(qrel)\n qrelsByQuery.set(qrel.queryId, list)\n }\n const corpus =\n options.includeCorpusInPayload && options.corpus\n ? Object.fromEntries(options.corpus.map((document) => [document.id, document]))\n : undefined\n return options.queries.flatMap((query) => {\n const qrels = qrelsByQuery.get(query.id) ?? []\n if (qrels.length === 0) return []\n const split =\n options.splitOf?.(query.id) ?? deterministicSplit(`${options.benchmarkId}:${query.id}`)\n return [\n {\n id: query.id,\n split,\n family: options.family,\n taskKind: 'retrieval',\n tags: [...new Set([...(options.tags ?? []), split])],\n ...(options.source ? { source: options.source } : {}),\n ...(query.metadata ? { metadata: query.metadata } : {}),\n payload: {\n queryId: query.id,\n query: query.text,\n expectedDocumentIds: qrels.map((qrel) => qrel.documentId),\n expectedScores: Object.fromEntries(qrels.map((qrel) => [qrel.documentId, qrel.score])),\n ...(corpus ? { corpus } : {}),\n ...(query.metadata ? { metadata: query.metadata } : {}),\n },\n },\n ]\n })\n}\n\nexport function createRetrievalIdBenchmarkAdapter(\n options: RetrievalIdAdapterOptions,\n): BenchmarkAdapter<\n BenchmarkDatasetItem<StandardRetrievalPayload>,\n StandardRetrievalPayload,\n StandardRetrievalArtifact\n> {\n const items = buildStandardRetrievalItems(options)\n return {\n id: options.benchmarkId,\n family: options.family,\n taskKind: 'retrieval' satisfies BenchmarkTaskKind,\n source: options.source,\n defaultMetric: options.primaryMetric ?? 'ndcg@10',\n async loadDataset(split) {\n return items.filter((item) => item.split === split)\n },\n async evaluate(item, artifact) {\n return evaluateStandardRetrieval(item.payload, artifact, options)\n },\n assignSplit(itemId) {\n return options.splitOf?.(itemId) ?? deterministicSplit(`${options.benchmarkId}:${itemId}`)\n },\n }\n}\n\nexport function evaluateStandardRetrieval(\n payload: StandardRetrievalPayload,\n artifact: StandardRetrievalArtifact,\n options: StandardRetrievalEvaluationOptions = {},\n) {\n const rankedDocumentIds = normalizeRetrievedDocumentIds(\n artifact,\n options.responseIdPattern ?? /[A-Za-z0-9_.:/-]+/g,\n )\n const cutoffs = normalizeCutoffs(options.cutoffs ?? [1, 3, 5, 10])\n const dimensions: Record<string, number> = {\n expected_count: payload.expectedDocumentIds.length,\n returned_count: rankedDocumentIds.length,\n }\n for (const cutoff of cutoffs) {\n Object.assign(\n dimensions,\n retrievalMetricsAtCutoff({\n rankedDocumentIds,\n expectedScores: payload.expectedScores,\n cutoff,\n }),\n )\n }\n const primaryMetric = options.primaryMetric ?? 'ndcg@10'\n const passMetric = options.passMetric ?? 'hit@10'\n const score = dimensions[primaryMetric] ?? dimensions[`ndcg@${cutoffs[cutoffs.length - 1]}`] ?? 0\n const passScore =\n dimensions[passMetric] ?? dimensions[`hit@${cutoffs[cutoffs.length - 1]}`] ?? score\n return {\n score,\n passed: passScore >= (options.passThreshold ?? 1),\n dimensions,\n raw: {\n rankedDocumentIds,\n expectedDocumentIds: payload.expectedDocumentIds,\n expectedScores: payload.expectedScores,\n },\n }\n}\n\nfunction normalizeRetrievedDocumentIds(\n artifact: StandardRetrievalArtifact,\n responseIdPattern: RegExp = /[A-Za-z0-9_.:/-]+/g,\n): string[] {\n if (typeof artifact === 'string') {\n return uniqueOrdered((artifact.match(responseIdPattern) ?? []).map((value) => value.trim()))\n }\n if (Array.isArray(artifact)) {\n const entries = artifact as readonly (string | StandardRetrievalResult)[]\n return uniqueOrdered(\n entries.flatMap((entry) => {\n if (typeof entry === 'string') return [entry]\n return [entry.documentId ?? entry.docId ?? entry.id ?? '']\n }),\n )\n }\n const objectArtifact = artifact as Exclude<StandardRetrievalArtifact, string | readonly unknown[]>\n return uniqueOrdered(\n [\n ...(objectArtifact.documentIds ?? []),\n ...(objectArtifact.ids ?? []),\n ...(objectArtifact.results ?? []).map(\n (entry) => entry.documentId ?? entry.docId ?? entry.id ?? '',\n ),\n ].map((value) => value.trim()),\n )\n}\n\nfunction retrievalMetricsAtCutoff(input: {\n rankedDocumentIds: readonly string[]\n expectedScores: Record<string, number>\n cutoff: number\n}): Record<string, number> {\n const top = input.rankedDocumentIds.slice(0, input.cutoff)\n const relevantIds = Object.keys(input.expectedScores).filter(\n (id) => input.expectedScores[id]! > 0,\n )\n const relevant = new Set(relevantIds)\n const hits = top.filter((id) => relevant.has(id)).length\n const firstRelevantRank = top.findIndex((id) => relevant.has(id))\n const prefix = `@${input.cutoff}`\n return {\n [`hit${prefix}`]: hits > 0 ? 1 : 0,\n [`recall${prefix}`]: relevant.size === 0 ? 1 : hits / relevant.size,\n [`precision${prefix}`]: hits / input.cutoff,\n [`mrr${prefix}`]: firstRelevantRank === -1 ? 0 : 1 / (firstRelevantRank + 1),\n [`ndcg${prefix}`]: ndcgAt(input.rankedDocumentIds, input.expectedScores, input.cutoff),\n }\n}\n\nfunction stringField(row: Record<string, unknown>, key: string): string | undefined {\n const value = row[key]\n return typeof value === 'string' ? value : undefined\n}\n\nfunction stripKnown(\n row: Record<string, unknown>,\n keys: readonly string[],\n): Record<string, unknown> {\n const known = new Set(keys)\n return Object.fromEntries(Object.entries(row).filter(([key]) => !known.has(key)))\n}\n\nfunction normalizeCutoffs(cutoffs: readonly number[]): number[] {\n return [\n ...new Set(cutoffs.map((cutoff) => Math.trunc(cutoff)).filter((cutoff) => cutoff > 0)),\n ].sort((a, b) => a - b)\n}\n\nfunction uniqueOrdered(values: readonly string[]): string[] {\n const seen = new Set<string>()\n const out: string[] = []\n for (const value of values) {\n const trimmed = value.trim()\n if (!trimmed || seen.has(trimmed)) continue\n seen.add(trimmed)\n out.push(trimmed)\n }\n return out\n}\n\nfunction ndcgAt(\n rankedDocumentIds: readonly string[],\n expectedScores: Record<string, number>,\n cutoff: number,\n): number {\n const dcg = rankedDocumentIds\n .slice(0, cutoff)\n .reduce(\n (sum, documentId, index) => sum + discountedGain(expectedScores[documentId] ?? 0, index),\n 0,\n )\n const ideal = Object.values(expectedScores)\n .filter((score) => score > 0)\n .sort((a, b) => b - a)\n .slice(0, cutoff)\n .reduce((sum, score, index) => sum + discountedGain(score, index), 0)\n return ideal === 0 ? 1 : dcg / ideal\n}\n\nfunction discountedGain(relevance: number, zeroBasedRank: number): number {\n if (relevance <= 0) return 0\n return (2 ** relevance - 1) / Math.log2(zeroBasedRank + 2)\n}\n"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { _ as PendingCostCallView, a as CostLedgerHandle } from "../cost-ledger-Jk62OBfF.js";
2
- import { S as makeProposalFinding, v as ProposalFinding, y as ProposalFindingOrigin } from "../types-CW8ewATZ.js";
1
+ import { o as CostLedgerHandle, r as CostBreakdown, v as PendingCostCallView } from "../cost-ledger-C1W3ICmP.js";
2
+ import { S as makeProposalFinding, v as ProposalFinding, y as ProposalFindingOrigin } from "../types-8yQzNm8u.js";
3
3
  import { t as SeriesDistribution } from "../descriptive-B2iPaT9J.js";
4
- import { B as powerPreflight, G as ObjectiveSource, H as AxisVerdict, J as PromotionPolicy, K as ParetoSignificanceGateOptions, R as PowerPreflight, U as BuildEvidenceVectorOptions, V as AxisEvidence, W as EvidenceVector, X as paretoPolicy, Y as buildEvidenceVector, Z as paretoSignificanceGate, a as dimensionRegressions, c as SequentialDecideFn, d as SequentialObservation, f as SequentialPairedGate, g as sequentialPairedGate, h as sequentialDecide, i as PairedHoldout, l as SequentialDecideOptions, m as SequentialStreamState, n as HeldoutSignificance, o as heldoutSignificance, p as SequentialPairedGateOptions, q as PromotionObjective, r as HeldoutSignificanceOptions, s as pairHoldout, t as DimensionRegression, u as SequentialGateDecision, z as PowerPreflightOptions } from "../statistical-heldout-BHfLZHrm.js";
4
+ import { B as powerPreflight, G as ObjectiveSource, H as AxisVerdict, J as PromotionPolicy, K as ParetoSignificanceGateOptions, R as PowerPreflight, U as BuildEvidenceVectorOptions, V as AxisEvidence, W as EvidenceVector, X as paretoPolicy, Y as buildEvidenceVector, Z as paretoSignificanceGate, a as dimensionRegressions, c as SequentialDecideFn, d as SequentialObservation, f as SequentialPairedGate, g as sequentialPairedGate, h as sequentialDecide, i as PairedHoldout, l as SequentialDecideOptions, m as SequentialStreamState, n as HeldoutSignificance, o as heldoutSignificance, p as SequentialPairedGateOptions, q as PromotionObjective, r as HeldoutSignificanceOptions, s as pairHoldout, t as DimensionRegression, u as SequentialGateDecision, z as PowerPreflightOptions } from "../statistical-heldout-3z3I-kJN.js";
5
5
  import { $ as SearchTokenAccounting, A as SearchLedgerHash, B as SearchOperationStartedEvent, C as SearchEdgeOperator, D as SearchFailureReason, E as SearchExecutionIdentity, F as SearchNodeRegisteredEvent, G as SearchSplit, H as SearchProposerKind, I as SearchNodeStatus, J as SearchSurfaceEffect, K as SearchSplitTasks, L as SearchOpenedEvent, M as SearchNodeDecidedEvent, N as SearchNodeDecision, O as SearchLedgerEntry, P as SearchNodeRef, Q as SearchTaskOutcome, R as SearchOperationKind, S as SearchEdgeAttribution, T as SearchEstimateMethod, U as SearchReservation, V as SearchProposer, W as SearchSourceRef, X as SearchSurfaceKind, Y as SearchSurfaceEvidence, Z as SearchTask, _ as SearchClaimPower, a as SearchAttemptAccounting, b as SearchClosedEvent, c as SearchCancelReason, d as SearchCellCancelledEvent, et as SearchTraceRef, f as SearchCellSettledEvent, g as SearchClaimFinalist, h as SearchClaimEstimator, i as SearchArtifactRef, j as SearchModelIdentity, k as SearchLedgerEvent, l as SearchCandidateSurface, m as SearchClaim, n as SEARCH_LEDGER_SCHEMA, o as SearchAudit, p as SearchCellStage, q as SearchSplits, r as SearchArtifactKind, s as SearchBudget, t as NodeEstimate, tt as SearchUnknown, u as SearchCellAllocatedEvent, v as SearchClaimTest, w as SearchEdgeRecordedEvent, x as SearchCostAccounting, y as SearchCloseReason, z as SearchOperationRecordedEvent } from "../search-ledger-types-p2xKfiDJ.js";
6
- import { $i as campaignCoverage, $r as OptimizationMethodRunOptions, $t as PlanEvalFixtureRunOptions, A as RetainedDispatchOptions, Ai as runOptimization, An as CrossSurfacePairEvidence, Ar as OptimizationMethodScore, At as sequentialOptimizationMethod, B as RunProfileMatrixSegmentOptions, Bi as CampaignRunPlan, Bn as TraceAnalystScenario, Br as OptimizerModelBudget, Bt as GepaPopulationImport, C as searchModelIdentity, Ci as transientDispatchFailure, Cn as CrossSurfaceInteractionAwareSelection, Cr as SkillOptOptimizationMethodConfig, D as ScenarioSignal, Di as PremeasuredOptimizationBaseline, Dn as CrossSurfaceInteractionTask, Dr as CompareOptimizationMethodsOptions, E as DiscriminationScore, Ei as runImprovementLoop, En as CrossSurfaceInteractionReport, Er as skillOptOptimizationMethod, F as FinalizedProfileMatrixResult, Fi as runEval, Fn as CrossSurfaceSelectionPolicy, Fr as GepaOptimizationMethodConfig, Ft as RolloutCall, G as ProfileSummary, Gi as CacheRead, Gn as LoopProvenanceBackend, Gr as ExternalOptimizationExample, Gt as neutralizationGate, H as finalizeProfileMatrix, Hi as PlanCampaignRunOptions, Hn as EmitLoopProvenanceArgs, Hr as ExternalTextOptimizationMethodConfig, Ht as importExternalEvaluations, I as ProfileMatrixCoverage, Ii as CampaignCellFailureReceipt, In as CrossSurfaceSelections, Ir as GepaOptimizationRecipe, It as ScoredRollout, J as ScenarioRollup, Ji as cellCachePath, Jn as LoopProvenanceOptimizationMethod, Jr as OptimizationMethod, Jt as EvalFixtureLoadOptions, K as RunProfileMatrixOptions, Ki as CellScheduleSlot, Kn as LoopProvenanceCandidate, Kr as ExternalTextEvaluationResponse, Kt as EvalFixture, L as ProfileMatrixPlan, Li as CampaignCellRetryPolicy, Ln as CrossSurfaceTaskRow, Lr as GepaRunnerCommand, Lt as UngroundedLiteralReport, M as createRetainedDispatch, Mi as OpenAutoPrResult, Mn as CrossSurfacePairwiseEntry, Mr as GepaAdaptiveEngineRun, Mt as FsLabeledScenarioStoreOptions, N as CreateProfileMatrixPlanOptions, Nn as CrossSurfaceRankedSingle, Nr as GepaEngineOptions, Nt as RolloutArgumentDiff, O as scoreDiscrimination, Oi as RunOptimizationOptions, On as CrossSurfaceNaiveStackSelection, Or as OptimizationMethodComparison, P as FinalizeProfileMatrixOptions, Pi as RunEvalOptions, Pn as CrossSurfaceRelativeCost, Pr as GepaEngineRun, Pt as RolloutArgumentDiffOptions, Qi as assertCampaignDesign, Qn as CampaignBreakdown, Qr as OptimizationMethodResult, Qt as LoadEvalFixtureScenariosOptions, R as ProfileMatrixRow, Ri as RunCampaignOptions, Rn as BuildTraceAnalystSurfaceDispatchOptions, Rr as gepaOptimizationMethod, Rt as ExternalSearchOptimizer, S as campaignCellSearchResult, Si as isTransientTransportFailure, Sn as CrossSurfaceIneligibilityReason, Sr as composeGate, T as searchReceiptAccounting, Ti as RunImprovementLoopResult, Tn as CrossSurfaceInteractionPath, Tr as SkillOptTrainerConfig, U as runProfileMatrixSegment, Ui as planCampaignRun, Un as EmitLoopProvenanceResult, Ur as ExternalTextOptimizerContext, Ut as importGepaPopulation, V as createProfileMatrixPlan, Vi as CampaignRunPlanCell, Vn as BuildLoopProvenanceArgs, Vr as externalTextOptimizationMethod, Vt as externalSurface, W as ProfileDispatchFn, Wi as CacheIssueReason, Wn as LoopProvenanceArgsFromResult, Wr as ExternalTextOptimizerResult, Wt as NeutralizationGateOptions, Xi as FinalEvidenceUse, Xn as canonicalDigest, Xr as OptimizationMethodInput, Xt as EvalFixtureScenario, Y as runProfileMatrix, Yi as FinalEvidencePolicy, Yn as LoopProvenanceRecord, Yr as OptimizationMethodComposition, Yt as EvalFixtureRunPlan, Zi as CampaignCoverage, Zn as emitLoopProvenance, Zr as OptimizationMethodProvenance, Zt as EvalFixtureValidationMode, _ as surfaceDispatchRef, _i as ReferenceEquivalenceScenario, _n as CrossSurfaceComponentEvidence, a as gitWorktreeAdapter, ai as GepaCandidatePopulationCandidate, an as AnalyzeCrossSurfaceInteractionsInput, ar as DefaultProductionGateOptions, at as ScoreboardSummary, b as SingleRunLockOptions, bi as llmJudge, bn as CrossSurfaceEligibility, c as AutoevalsScoreLike, ci as readGepaCandidatePopulationArtifact, cn as CrossSurfaceAttemptCompleteness, ct as renderScoreboardMarkdown, d as PhoenixEvaluatorLike, di as ExternalOptimizerObservationSummary, dn as CrossSurfaceCandidate, dt as userStoryScoreboard, ea as campaignScenarioIdentity, ei as OptimizationPackageSource, en as discoverEvalFixtures, er as campaignBreakdown, et as PlaybackContext, f as assertCodeSurfaceIdentity, fi as ExternalOptimizerSubmittedCandidate, fn as CrossSurfaceCandidateComparison, g as surfaceContentHash, gn as CrossSurfaceComponent, h as renderSurfaceDiff, hi as ReferenceEquivalenceJudgeOptions, hn as CrossSurfaceCandidateSummary, i as WorktreeAdapter, ia as SearchLedgerIntegrityError, ii as GepaCandidatePopulationArtifact, in as analyzeCrossSurfaceInteractions, ir as DefaultProductionGateCheck, it as ScoreboardRow, j as RetainedDispatchOutcome, ji as OpenAutoPrOptions, jn as CrossSurfacePairIncompatibilityReason, jr as compareOptimizationMethods, jt as neutralizeText, k as resolveRunDir, ki as RunOptimizationResult, kn as CrossSurfacePairCompatibility, kr as OptimizationMethodPairwise, kt as scopedOptimizationMethod, l as AutoevalsScorerLike, li as ExternalOptimizerExecutionSummary, ln as CrossSurfaceBestSingleSelection, lt as scoreUserStory, m as componentSurfaceIdentityMaterial, mn as CrossSurfaceCandidateOutcome, n as GitWorktreeAdapterOptions, na as campaignSplitDigestFromIdentities, ni as OptimizationTokenUsage, nn as loadEvalFixtureScenarios, nr as HeldOutGateOptions, nt as PlaybackStep, o as resolveWorktreePath, oi as GepaCandidatePopulationSummary, on as CrossSurfaceAdditionDecision, or as DefaultProductionRewardHackingOptions, ot as UserStory, p as codeSurfaceIdentityMaterial, pi as readExternalOptimizerObservationArtifact, pn as CrossSurfaceCandidateEvidence, q as RunProfileMatrixResult, qi as buildCellSchedule, qn as LoopProvenanceEvidence, qr as decodeExternalTextCandidate, qt as EvalFixtureFile, r as Worktree, ra as SearchLedgerError, ri as costFromLedgerSummary, rn as planEvalFixtureRun, rr as heldOutGate, rt as ScoreboardRenderOptions, s as verifyCodeSurface, si as GepaCandidateSelectionScore, sn as CrossSurfaceAdditionRejectionReason, sr as defaultProductionGate, st as UserStoryVerdict, t as CodeSurfaceVerification, ta as campaignSplitDigest, ti as ComparisonCost, tn as loadEvalFixture, tr as campaignMeanComposite, tt as PlaybackDriver, u as PhoenixEvaluationResultLike, ui as ExternalOptimizerObservationArtifact, un as CrossSurfaceBootstrapPolicy, ut as scoreboardSummary, v as surfaceHash, vi as LlmJudgeDimension, vn as CrossSurfaceCompositionStep, w as searchProposalExecution, wi as RunImprovementLoopOptions, wn as CrossSurfaceInteractionEffect, wr as SkillOptRunnerCommand, x as acquireSingleRunLock, xi as TransientFailureOptions, xn as CrossSurfaceEvidenceBreakdown, y as SingleRunLock, yi as LlmJudgeOptions, yn as CrossSurfaceDistribution, z as ProfileMatrixSegmentResult, zi as runCampaign, zn as TraceAnalystArtifact, zr as OpenAICompatibleOptimizerModel, zt as GepaEvaluationImport } from "../index-B16FNdW5.js";
7
- import { $ as SearchCompletion, A as LabeledScenarioWrite, B as ScoredSurfaceOutcome, C as JudgeDimension, D as LabeledScenarioSampleArgs, E as LabeledScenarioRecord, F as ProposeContext, G as SearchProposerView, H as SurfaceProposer, I as ProposedCandidate, J as searchProposerView, K as SearchSummaryOptions, L as RedactionStatus, M as OptimizerConfig, N as ParetoParent, O as LabeledScenarioSource, P as ProposalTrackContext, Q as SearchCell, R as Scenario, S as JudgeConfig, T as LabelTrust, U as TraceSpan, V as SessionScript, W as isProposedCandidate, X as SearchStateView, Y as SearchState, Z as searchUnitScores, _ as GateDecision, a as CampaignResult, at as SearchUnitScore, b as GenerationRecord, c as CampaignTraceWriter, ct as searchTaskSetDigest, d as DispatchContext, et as SearchDecisionRecord, f as DispatchFn, g as GateContribution, h as GateContext, i as CampaignCostMeter, it as SearchSpend, j as MutableSurface, k as LabeledScenarioStore, l as CodeSurface, m as GateCheckStatus, n as CampaignArtifactWriter, nt as SearchOperation, o as CampaignScenarioIdentity, ot as searchCellId, p as Gate, q as renderSearchSummary, r as CampaignCellResult, rt as SearchScoredCell, s as CampaignTokenUsage, st as searchNodeId, t as CampaignAggregates, tt as SearchNode, u as ComponentSurface, v as GateResult, w as JudgeScore, x as JudgeAggregate, y as GenerationCandidate, z as ScenarioAggregate } from "../types-DtkO1G9L.js";
8
- import { A as SearchRungDecision, At as SearchHistoryReceipt, B as beam, Bt as openSearchLedger, C as searchClaimDecision, Ct as surfaceNode, D as SearchAllocationView, Dt as SearchHistoryCoverage, E as AshaOptions, Et as SearchHistoryAuditSummary, F as SearchExpansion, Ft as FileSearchLedger, G as NodePosterior, Gt as createRunCostLedger, H as incumbent, Ht as replaySearchLedgerText, I as SearchPolicy, It as OpenSearchLedgerOptions, J as estimateNode, K as SEARCH_ESTIMATOR, Kt as fsCampaignStorage, L as SearchPolicyNode, Lt as SearchLedger, M as asha, Mt as createSearchHistoryReceipt, N as uniform, Nt as verifySearchHistoryArtifact, O as SearchAllocator, Ot as SearchHistoryCoverageRow, P as AideOptions, Pt as verifySearchHistoryReceipt, Q as searchPosterior, R as SearchPolicyView, Rt as SearchLedgerAppendResult, S as planSearchClaim, St as surfaceDiff, T as verifySearchClaim, Tt as SearchHistoryAdmissionOptions, U as incumbentWithOperatorBandit, Ut as validateSearchLedgerEvent, V as crowdedFrontierParent, Vt as parseSearchLedgerLine, W as EstimateNodeCellsInput, Wt as CampaignStorage, X as searchCellSetDigest, Y as estimateNodeFromCells, Z as searchEstimateMethod, _ as SEARCH_CLAIM_RULE, _t as SearchRecorderOptions, a as SearchArtifactCodec, b as SearchClaimVerification, bt as developmentClaim, c as SearchExecutor, d as SearchProposalRequest, dt as AllocateSearchCellInput, f as SearchProposalResult, ft as RecordSearchEdgeInput, g as PlanSearchClaimInput, gt as SearchRecorder, h as SearchRunResult, ht as SearchOpening, i as RunSearchOptions, j as SearchUnitExtension, jt as assertSearchHistoryMatchesState, k as SearchCellPlan, kt as SearchHistoryPolicy, l as SearchLane, m as SearchProposerPort, mt as SearchLedgerBinding, n as searchDivergence, o as SearchCellResult, p as SearchProposedChild, pt as RegisterSearchNodeInput, q as SearchPosterior, qt as inMemoryCampaignStorage, r as searchPolicyView, s as SearchCellWork, t as runSearch, u as SearchProposalBlob, v as SearchClaimDecision, vt as SearchRunIdentity, w as searchClaimReserveUsd, wt as CreateSearchHistoryReceiptInput, x as decideSearchClaim, xt as searchEdgeId, y as SearchClaimPlan, yt as SettleSearchCellInput, z as aide, zt as SearchLedgerTrustedHeadMode } from "../search-kernel-p9JB3SmL.js";
9
- import { B as ExternalOptimizerModelCallRequest, F as ExternalOptimizerEndpointFormat, G as ExternalOptimizerRunnerCommand, H as ExternalOptimizerModelExecutionObservation, I as ExternalOptimizerEvaluationObservation, L as ExternalOptimizerEvaluationRefusalReason, M as DEFAULT_EXTERNAL_OPTIMIZER_PROCESS_LIMITS, N as ExternalOptimizerCallbackLimits, P as ExternalOptimizerChatRequest, R as ExternalOptimizerModelBudget, U as ExternalOptimizerProcessLimits, V as ExternalOptimizerModelCallResult, j as DEFAULT_EXTERNAL_OPTIMIZER_CALLBACK_LIMITS, q as ExternalTextCandidate, z as ExternalOptimizerModelCall } from "../agent-profile-DTt8uGP9.js";
10
- export { type AideOptions, type AllocateSearchCellInput, type AnalyzeCrossSurfaceInteractionsInput, type AshaOptions, type AutoevalsScoreLike, type AutoevalsScorerLike, type AxisEvidence, type AxisVerdict, type BuildEvidenceVectorOptions, type BuildLoopProvenanceArgs, type BuildTraceAnalystSurfaceDispatchOptions, type CacheIssueReason, type CacheRead, type CampaignAggregates, type CampaignArtifactWriter, type CampaignBreakdown, type CampaignCellFailureReceipt, type CampaignCellResult, type CampaignCellRetryPolicy, type CampaignCostMeter, type CampaignCoverage, type CampaignResult, type CampaignRunPlan, type CampaignRunPlanCell, type CampaignScenarioIdentity, type CampaignStorage, type CampaignTokenUsage, type CampaignTraceWriter, type CellScheduleSlot, type CodeSurface, type CodeSurfaceVerification, type CompareOptimizationMethodsOptions, type ComparisonCost, type ComponentSurface, type CostLedgerHandle, type CreateProfileMatrixPlanOptions, type CreateSearchHistoryReceiptInput, type CrossSurfaceAdditionDecision, type CrossSurfaceAdditionRejectionReason, type CrossSurfaceAttemptCompleteness, type CrossSurfaceBestSingleSelection, type CrossSurfaceBootstrapPolicy, type CrossSurfaceCandidate, type CrossSurfaceCandidateComparison, type CrossSurfaceCandidateEvidence, type CrossSurfaceCandidateOutcome, type CrossSurfaceCandidateSummary, type CrossSurfaceComponent, type CrossSurfaceComponentEvidence, type CrossSurfaceCompositionStep, type CrossSurfaceDistribution, type CrossSurfaceEligibility, type CrossSurfaceEvidenceBreakdown, type CrossSurfaceIneligibilityReason, type CrossSurfaceInteractionAwareSelection, type CrossSurfaceInteractionEffect, type CrossSurfaceInteractionPath, type CrossSurfaceInteractionReport, type CrossSurfaceInteractionTask, type CrossSurfaceNaiveStackSelection, type CrossSurfacePairCompatibility, type CrossSurfacePairEvidence, type CrossSurfacePairIncompatibilityReason, type CrossSurfacePairwiseEntry, type CrossSurfaceRankedSingle, type CrossSurfaceRelativeCost, type CrossSurfaceSelectionPolicy, type CrossSurfaceSelections, type CrossSurfaceTaskRow, DEFAULT_EXTERNAL_OPTIMIZER_CALLBACK_LIMITS, DEFAULT_EXTERNAL_OPTIMIZER_PROCESS_LIMITS, type DefaultProductionGateCheck, type DefaultProductionGateOptions, type DefaultProductionRewardHackingOptions, type DimensionRegression, type DiscriminationScore, type DispatchContext, type DispatchFn, type EmitLoopProvenanceArgs, type EmitLoopProvenanceResult, type EstimateNodeCellsInput, type EvalFixture, type EvalFixtureFile, type EvalFixtureLoadOptions, type EvalFixtureRunPlan, type EvalFixtureScenario, type EvalFixtureValidationMode, type EvidenceVector, type ExternalOptimizationExample, type ExternalOptimizerCallbackLimits, type ExternalOptimizerChatRequest, type ExternalOptimizerEndpointFormat, type ExternalOptimizerEvaluationObservation, type ExternalOptimizerEvaluationRefusalReason, type ExternalOptimizerExecutionSummary, type ExternalOptimizerModelBudget, type ExternalOptimizerModelCall, type ExternalOptimizerModelCallRequest, type ExternalOptimizerModelCallResult, type ExternalOptimizerModelExecutionObservation, type ExternalOptimizerObservationArtifact, type ExternalOptimizerObservationSummary, type ExternalOptimizerProcessLimits, type ExternalOptimizerRunnerCommand, type ExternalOptimizerSubmittedCandidate, type ExternalSearchOptimizer, type ExternalTextCandidate, type ExternalTextEvaluationResponse, type ExternalTextOptimizationMethodConfig, type ExternalTextOptimizerContext, type ExternalTextOptimizerResult, FileSearchLedger, type FinalEvidencePolicy, type FinalEvidenceUse, type FinalizeProfileMatrixOptions, type FinalizedProfileMatrixResult, type FsLabeledScenarioStoreOptions, type Gate, type GateCheckStatus, type GateContext, type GateContribution, type GateDecision, type GateResult, type GenerationCandidate, type GenerationRecord, type GepaAdaptiveEngineRun, type GepaCandidatePopulationArtifact, type GepaCandidatePopulationCandidate, type GepaCandidatePopulationSummary, type GepaCandidateSelectionScore, type GepaEngineOptions, type GepaEngineRun, type GepaEvaluationImport, type GepaOptimizationMethodConfig, type GepaOptimizationRecipe, type GepaPopulationImport, type GepaRunnerCommand, type GitWorktreeAdapterOptions, type HeldOutGateOptions, type HeldoutSignificance, type HeldoutSignificanceOptions, type JudgeAggregate, type JudgeConfig, type JudgeDimension, type JudgeScore, type LabelTrust, type LabeledScenarioRecord, type LabeledScenarioSampleArgs, type LabeledScenarioSource, type LabeledScenarioStore, type LabeledScenarioWrite, type LlmJudgeDimension, type LlmJudgeOptions, type LoadEvalFixtureScenariosOptions, type LoopProvenanceArgsFromResult, type LoopProvenanceBackend, type LoopProvenanceCandidate, type LoopProvenanceEvidence, type LoopProvenanceOptimizationMethod, type LoopProvenanceRecord, type MutableSurface, type NeutralizationGateOptions, type NodeEstimate, type NodePosterior, type ObjectiveSource, type OpenAICompatibleOptimizerModel, type OpenAutoPrOptions, type OpenAutoPrResult, type OpenSearchLedgerOptions, type OptimizationMethod, type OptimizationMethodComparison, type OptimizationMethodComposition, type OptimizationMethodInput, type OptimizationMethodPairwise, type OptimizationMethodProvenance, type OptimizationMethodResult, type OptimizationMethodRunOptions, type OptimizationMethodScore, type OptimizationPackageSource, type OptimizationTokenUsage, type OptimizerConfig, type OptimizerModelBudget, type PairedHoldout, type ParetoParent, type ParetoSignificanceGateOptions, type PendingCostCallView, type PhoenixEvaluationResultLike, type PhoenixEvaluatorLike, type PlanCampaignRunOptions, type PlanEvalFixtureRunOptions, type PlanSearchClaimInput, type PlaybackContext, type PlaybackDriver, type PlaybackStep, type PowerPreflight, type PowerPreflightOptions, type PremeasuredOptimizationBaseline, type ProfileDispatchFn, type ProfileMatrixCoverage, type ProfileMatrixPlan, type ProfileMatrixRow, type ProfileMatrixSegmentResult, type ProfileSummary, type PromotionObjective, type PromotionPolicy, type ProposalFinding, type ProposalFindingOrigin, type ProposalTrackContext, type ProposeContext, type ProposedCandidate, type RecordSearchEdgeInput, type RedactionStatus, type ReferenceEquivalenceJudgeOptions, type ReferenceEquivalenceScenario, type RegisterSearchNodeInput, type RetainedDispatchOptions, type RetainedDispatchOutcome, type RolloutArgumentDiff, type RolloutArgumentDiffOptions, type RolloutCall, type RunCampaignOptions, type RunEvalOptions, type RunImprovementLoopOptions, type RunImprovementLoopResult, type RunOptimizationOptions, type RunOptimizationResult, type RunProfileMatrixOptions, type RunProfileMatrixResult, type RunProfileMatrixSegmentOptions, type RunSearchOptions, SEARCH_CLAIM_RULE, SEARCH_ESTIMATOR, SEARCH_LEDGER_SCHEMA, type Scenario, type ScenarioAggregate, type ScenarioRollup, type ScenarioSignal, type ScoreboardRenderOptions, type ScoreboardRow, type ScoreboardSummary, type ScoredRollout, type ScoredSurfaceOutcome, type SearchAllocationView, type SearchAllocator, type SearchArtifactCodec, type SearchArtifactKind, type SearchArtifactRef, type SearchAttemptAccounting, type SearchAudit, type SearchBudget, type SearchCancelReason, type SearchCandidateSurface, type SearchCell, type SearchCellAllocatedEvent, type SearchCellCancelledEvent, type SearchCellPlan, type SearchCellResult, type SearchCellSettledEvent, type SearchCellStage, type SearchCellWork, type SearchClaim, type SearchClaimDecision, type SearchClaimEstimator, type SearchClaimFinalist, type SearchClaimPlan, type SearchClaimPower, type SearchClaimTest, type SearchClaimVerification, type SearchCloseReason, type SearchClosedEvent, type SearchCompletion, type SearchCostAccounting, type SearchDecisionRecord, type SearchEdgeAttribution, type SearchEdgeOperator, type SearchEdgeRecordedEvent, type SearchEstimateMethod, type SearchExecutionIdentity, type SearchExecutor, type SearchExpansion, type SearchFailureReason, type SearchHistoryAdmissionOptions, type SearchHistoryAuditSummary, type SearchHistoryCoverage, type SearchHistoryCoverageRow, type SearchHistoryPolicy, type SearchHistoryReceipt, type SearchLane, type SearchLedger, type SearchLedgerAppendResult, type SearchLedgerBinding, type SearchLedgerEntry, SearchLedgerError, type SearchLedgerEvent, type SearchLedgerHash, SearchLedgerIntegrityError, type SearchLedgerTrustedHeadMode, type SearchModelIdentity, type SearchNode, type SearchNodeDecidedEvent, type SearchNodeDecision, type SearchNodeRef, type SearchNodeRegisteredEvent, type SearchNodeStatus, type SearchOpenedEvent, type SearchOpening, type SearchOperation, type SearchOperationKind, type SearchOperationRecordedEvent, type SearchOperationStartedEvent, type SearchPolicy, type SearchPolicyNode, type SearchPolicyView, type SearchPosterior, type SearchProposalBlob, type SearchProposalRequest, type SearchProposalResult, type SearchProposedChild, type SearchProposer, type SearchProposerKind, type SearchProposerPort, type SearchProposerView, SearchRecorder, type SearchRecorderOptions, type SearchReservation, type SearchRunIdentity, type SearchRunResult, type SearchRungDecision, type SearchScoredCell, type SearchSourceRef, type SearchSpend, type SearchSplit, type SearchSplitTasks, type SearchSplits, SearchState, SearchStateView, type SearchSummaryOptions, type SearchSurfaceEffect, type SearchSurfaceEvidence, type SearchSurfaceKind, type SearchTask, type SearchTaskOutcome, type SearchTokenAccounting, type SearchTraceRef, type SearchUnitExtension, type SearchUnitScore, type SearchUnknown, type SequentialDecideFn, type SequentialDecideOptions, type SequentialGateDecision, type SequentialObservation, type SequentialPairedGate, type SequentialPairedGateOptions, type SequentialStreamState, type SeriesDistribution, type SessionScript, type SettleSearchCellInput, type SingleRunLock, type SingleRunLockOptions, type SkillOptOptimizationMethodConfig, type SkillOptRunnerCommand, type SkillOptTrainerConfig, type SurfaceProposer, type TraceAnalystArtifact, type TraceAnalystScenario, type TraceSpan, type TransientFailureOptions, type UngroundedLiteralReport, type UserStory, type UserStoryVerdict, type Worktree, type WorktreeAdapter, acquireSingleRunLock, aide, analyzeCrossSurfaceInteractions, asha, assertCampaignDesign, assertCodeSurfaceIdentity, assertSearchHistoryMatchesState, beam, buildCellSchedule, buildEvidenceVector, campaignBreakdown, campaignCellSearchResult, campaignCoverage, campaignMeanComposite, campaignScenarioIdentity, campaignSplitDigest, campaignSplitDigestFromIdentities, canonicalDigest, cellCachePath, codeSurfaceIdentityMaterial, compareOptimizationMethods, componentSurfaceIdentityMaterial, composeGate, costFromLedgerSummary, createProfileMatrixPlan, createRetainedDispatch, createRunCostLedger, createSearchHistoryReceipt, crowdedFrontierParent, decideSearchClaim, decodeExternalTextCandidate, defaultProductionGate, developmentClaim, dimensionRegressions, discoverEvalFixtures, emitLoopProvenance, estimateNode, estimateNodeFromCells, externalSurface, externalTextOptimizationMethod, finalizeProfileMatrix, fsCampaignStorage, gepaOptimizationMethod, gitWorktreeAdapter, heldOutGate, heldoutSignificance, importExternalEvaluations, importGepaPopulation, inMemoryCampaignStorage, incumbent, incumbentWithOperatorBandit, isProposedCandidate, isTransientTransportFailure, llmJudge, loadEvalFixture, loadEvalFixtureScenarios, makeProposalFinding, neutralizationGate, neutralizeText, openSearchLedger, pairHoldout, paretoPolicy, paretoSignificanceGate, parseSearchLedgerLine, planCampaignRun, planEvalFixtureRun, planSearchClaim, powerPreflight, readExternalOptimizerObservationArtifact, readGepaCandidatePopulationArtifact, renderScoreboardMarkdown, renderSearchSummary, renderSurfaceDiff, replaySearchLedgerText, resolveRunDir, resolveWorktreePath, runCampaign, runEval, runImprovementLoop, runOptimization, runProfileMatrix, runProfileMatrixSegment, runSearch, scopedOptimizationMethod, scoreDiscrimination, scoreUserStory, scoreboardSummary, searchCellId, searchCellSetDigest, searchClaimDecision, searchClaimReserveUsd, searchDivergence, searchEdgeId, searchEstimateMethod, searchModelIdentity, searchNodeId, searchPolicyView, searchPosterior, searchProposalExecution, searchProposerView, searchReceiptAccounting, searchTaskSetDigest, searchUnitScores, sequentialDecide, sequentialOptimizationMethod, sequentialPairedGate, skillOptOptimizationMethod, surfaceContentHash, surfaceDiff, surfaceDispatchRef, surfaceHash, surfaceNode, transientDispatchFailure, uniform, userStoryScoreboard, validateSearchLedgerEvent, verifyCodeSurface, verifySearchClaim, verifySearchHistoryArtifact, verifySearchHistoryReceipt };
6
+ import { $i as assertCampaignDesign, $n as CampaignBreakdown, $r as OptimizationMethodResult, $t as PlanEvalFixtureRunOptions, A as RetainedDispatchOptions, Ai as RunOptimizationResult, An as CrossSurfacePairEvidence, Ar as OptimizationMethodPairwise, At as sequentialOptimizationMethod, B as RunProfileMatrixSegmentOptions, Bi as runCampaign, Bn as TraceAnalystArtifact, Br as OpenAICompatibleOptimizerModel, Bt as GepaPopulationImport, C as searchModelIdentity, Ci as isTransientTransportFailure, Cn as CrossSurfaceInteractionAwareSelection, Cr as composeGate, D as ScenarioSignal, Di as runImprovementLoop, Dn as CrossSurfaceInteractionTask, Dr as skillOptOptimizationMethod, E as DiscriminationScore, Ei as RunImprovementLoopResult, En as CrossSurfaceInteractionReport, Er as SkillOptTrainerConfig, F as FinalizedProfileMatrixResult, Fi as RunEvalOptions, Fn as CrossSurfaceSelectionPolicy, Fr as GepaEngineRun, Ft as RolloutCall, G as ProfileSummary, Gi as CacheIssueReason, Gn as LoopProvenanceArgsFromResult, Gr as ExternalTextOptimizerResult, Gt as neutralizationGate, H as finalizeProfileMatrix, Hi as CampaignRunPlanCell, Hn as BuildLoopProvenanceArgs, Hr as externalTextOptimizationMethod, Ht as importExternalEvaluations, I as ProfileMatrixCoverage, Ii as runEval, In as CrossSurfaceSelections, Ir as GepaOptimizationMethodConfig, It as ScoredRollout, J as ScenarioRollup, Ji as buildCellSchedule, Jn as LoopProvenanceEvidence, Jr as decodeExternalTextCandidate, Jt as EvalFixtureLoadOptions, K as RunProfileMatrixOptions, Ki as CacheRead, Kn as LoopProvenanceBackend, Kr as ExternalOptimizationExample, Kt as EvalFixture, L as ProfileMatrixPlan, Li as CampaignCellFailureReceipt, Ln as CrossSurfaceTaskRow, Lr as GepaOptimizationRecipe, Lt as UngroundedLiteralReport, M as createRetainedDispatch, Mi as OpenAutoPrOptions, Mn as CrossSurfacePairwiseEntry, Mr as compareOptimizationMethods, Mt as FsLabeledScenarioStoreOptions, N as CreateProfileMatrixPlanOptions, Ni as OpenAutoPrResult, Nn as CrossSurfaceRankedSingle, Nr as GepaAdaptiveEngineRun, Nt as RolloutArgumentDiff, O as scoreDiscrimination, Oi as PremeasuredOptimizationBaseline, On as CrossSurfaceNaiveStackSelection, Or as CompareOptimizationMethodsOptions, P as FinalizeProfileMatrixOptions, Pn as CrossSurfaceRelativeCost, Pr as GepaEngineOptions, Pt as RolloutArgumentDiffOptions, Qi as CampaignCoverage, Qn as emitLoopProvenance, Qr as OptimizationMethodProvenance, Qt as LoadEvalFixtureScenariosOptions, R as ProfileMatrixRow, Ri as CampaignCellRetryPolicy, Rn as measureCampaignCost, Rr as GepaRunnerCommand, Rt as ExternalSearchOptimizer, S as campaignCellSearchResult, Si as TransientFailureOptions, Sn as CrossSurfaceIneligibilityReason, T as searchReceiptAccounting, Ti as RunImprovementLoopOptions, Tn as CrossSurfaceInteractionPath, Tr as SkillOptRunnerCommand, U as runProfileMatrixSegment, Ui as PlanCampaignRunOptions, Un as EmitLoopProvenanceArgs, Ur as ExternalTextOptimizationMethodConfig, Ut as importGepaPopulation, V as createProfileMatrixPlan, Vi as CampaignRunPlan, Vn as TraceAnalystScenario, Vr as OptimizerModelBudget, Vt as externalSurface, W as ProfileDispatchFn, Wi as planCampaignRun, Wn as EmitLoopProvenanceResult, Wr as ExternalTextOptimizerContext, Wt as NeutralizationGateOptions, Xi as FinalEvidencePolicy, Xn as LoopProvenanceRecord, Xr as OptimizationMethodComposition, Xt as EvalFixtureScenario, Y as runProfileMatrix, Yi as cellCachePath, Yn as LoopProvenanceOptimizationMethod, Yr as OptimizationMethod, Yt as EvalFixtureRunPlan, Zi as FinalEvidenceUse, Zn as canonicalDigest, Zr as OptimizationMethodInput, Zt as EvalFixtureValidationMode, _ as surfaceDispatchRef, _n as CrossSurfaceComponentEvidence, a as gitWorktreeAdapter, aa as SearchLedgerIntegrityError, ai as GepaCandidatePopulationArtifact, an as AnalyzeCrossSurfaceInteractionsInput, ar as DefaultProductionGateCheck, at as ScoreboardSummary, b as SingleRunLockOptions, bi as LlmJudgeOptions, bn as CrossSurfaceEligibility, c as AutoevalsScoreLike, ci as GepaCandidateSelectionScore, cn as CrossSurfaceAttemptCompleteness, cr as defaultProductionGate, ct as renderScoreboardMarkdown, d as PhoenixEvaluatorLike, di as ExternalOptimizerObservationArtifact, dn as CrossSurfaceCandidate, dt as userStoryScoreboard, ea as campaignCoverage, ei as OptimizationMethodRunOptions, en as discoverEvalFixtures, et as PlaybackContext, f as assertCodeSurfaceIdentity, fi as ExternalOptimizerObservationSummary, fn as CrossSurfaceCandidateComparison, g as surfaceContentHash, gi as ReferenceEquivalenceJudgeOptions, gn as CrossSurfaceComponent, h as renderSurfaceDiff, hn as CrossSurfaceCandidateSummary, i as WorktreeAdapter, ia as SearchLedgerError, ii as costFromLedgerSummary, in as analyzeCrossSurfaceInteractions, ir as heldOutGate, it as ScoreboardRow, j as RetainedDispatchOutcome, ji as runOptimization, jn as CrossSurfacePairIncompatibilityReason, jr as OptimizationMethodScore, jt as neutralizeText, k as resolveRunDir, ki as RunOptimizationOptions, kn as CrossSurfacePairCompatibility, kr as OptimizationMethodComparison, kt as scopedOptimizationMethod, l as AutoevalsScorerLike, li as readGepaCandidatePopulationArtifact, ln as CrossSurfaceBestSingleSelection, lt as scoreUserStory, m as componentSurfaceIdentityMaterial, mi as readExternalOptimizerObservationArtifact, mn as CrossSurfaceCandidateOutcome, n as GitWorktreeAdapterOptions, na as campaignSplitDigest, ni as ComparisonCost, nn as loadEvalFixtureScenarios, nr as campaignMeanComposite, nt as PlaybackStep, o as resolveWorktreePath, oi as GepaCandidatePopulationCandidate, on as CrossSurfaceAdditionDecision, or as DefaultProductionGateOptions, ot as UserStory, p as codeSurfaceIdentityMaterial, pi as ExternalOptimizerSubmittedCandidate, pn as CrossSurfaceCandidateEvidence, q as RunProfileMatrixResult, qi as CellScheduleSlot, qn as LoopProvenanceCandidate, qr as ExternalTextEvaluationResponse, qt as EvalFixtureFile, r as Worktree, ra as campaignSplitDigestFromIdentities, ri as OptimizationTokenUsage, rn as planEvalFixtureRun, rr as HeldOutGateOptions, rt as ScoreboardRenderOptions, s as verifyCodeSurface, si as GepaCandidatePopulationSummary, sn as CrossSurfaceAdditionRejectionReason, sr as DefaultProductionRewardHackingOptions, st as UserStoryVerdict, t as CodeSurfaceVerification, ta as campaignScenarioIdentity, ti as OptimizationPackageSource, tn as loadEvalFixture, tr as campaignBreakdown, tt as PlaybackDriver, u as PhoenixEvaluationResultLike, ui as ExternalOptimizerExecutionSummary, un as CrossSurfaceBootstrapPolicy, ut as scoreboardSummary, v as surfaceHash, vi as ReferenceEquivalenceScenario, vn as CrossSurfaceCompositionStep, w as searchProposalExecution, wi as transientDispatchFailure, wn as CrossSurfaceInteractionEffect, wr as SkillOptOptimizationMethodConfig, x as acquireSingleRunLock, xi as llmJudge, xn as CrossSurfaceEvidenceBreakdown, y as SingleRunLock, yi as LlmJudgeDimension, yn as CrossSurfaceDistribution, z as ProfileMatrixSegmentResult, zi as RunCampaignOptions, zn as BuildTraceAnalystSurfaceDispatchOptions, zr as gepaOptimizationMethod, zt as GepaEvaluationImport } from "../index-Q6DvdcwI.js";
7
+ import { $ as SearchCompletion, A as LabeledScenarioWrite, B as ScoredSurfaceOutcome, C as JudgeDimension, D as LabeledScenarioSampleArgs, E as LabeledScenarioRecord, F as ProposeContext, G as SearchProposerView, H as SurfaceProposer, I as ProposedCandidate, J as searchProposerView, K as SearchSummaryOptions, L as RedactionStatus, M as OptimizerConfig, N as ParetoParent, O as LabeledScenarioSource, P as ProposalTrackContext, Q as SearchCell, R as Scenario, S as JudgeConfig, T as LabelTrust, U as TraceSpan, V as SessionScript, W as isProposedCandidate, X as SearchStateView, Y as SearchState, Z as searchUnitScores, _ as GateDecision, a as CampaignResult, at as SearchUnitScore, b as GenerationRecord, c as CampaignTraceWriter, ct as searchTaskSetDigest, d as DispatchContext, et as SearchDecisionRecord, f as DispatchFn, g as GateContribution, h as GateContext, i as CampaignCostMeter, it as SearchSpend, j as MutableSurface, k as LabeledScenarioStore, l as CodeSurface, m as GateCheckStatus, n as CampaignArtifactWriter, nt as SearchOperation, o as CampaignScenarioIdentity, ot as searchCellId, p as Gate, q as renderSearchSummary, r as CampaignCellResult, rt as SearchScoredCell, s as CampaignTokenUsage, st as searchNodeId, t as CampaignAggregates, tt as SearchNode, u as ComponentSurface, v as GateResult, w as JudgeScore, x as JudgeAggregate, y as GenerationCandidate, z as ScenarioAggregate } from "../types-CHfn1zg5.js";
8
+ import { A as SearchRungDecision, At as SearchHistoryReceipt, B as beam, Bt as openSearchLedger, C as searchClaimDecision, Ct as surfaceNode, D as SearchAllocationView, Dt as SearchHistoryCoverage, E as AshaOptions, Et as SearchHistoryAuditSummary, F as SearchExpansion, Ft as FileSearchLedger, G as NodePosterior, Gt as createRunCostLedger, H as incumbent, Ht as replaySearchLedgerText, I as SearchPolicy, It as OpenSearchLedgerOptions, J as estimateNode, K as SEARCH_ESTIMATOR, Kt as fsCampaignStorage, L as SearchPolicyNode, Lt as SearchLedger, M as asha, Mt as createSearchHistoryReceipt, N as uniform, Nt as verifySearchHistoryArtifact, O as SearchAllocator, Ot as SearchHistoryCoverageRow, P as AideOptions, Pt as verifySearchHistoryReceipt, Q as searchPosterior, R as SearchPolicyView, Rt as SearchLedgerAppendResult, S as planSearchClaim, St as surfaceDiff, T as verifySearchClaim, Tt as SearchHistoryAdmissionOptions, U as incumbentWithOperatorBandit, Ut as validateSearchLedgerEvent, V as crowdedFrontierParent, Vt as parseSearchLedgerLine, W as EstimateNodeCellsInput, Wt as CampaignStorage, X as searchCellSetDigest, Y as estimateNodeFromCells, Z as searchEstimateMethod, _ as SEARCH_CLAIM_RULE, _t as SearchRecorderOptions, a as SearchArtifactCodec, b as SearchClaimVerification, bt as developmentClaim, c as SearchExecutor, d as SearchProposalRequest, dt as AllocateSearchCellInput, f as SearchProposalResult, ft as RecordSearchEdgeInput, g as PlanSearchClaimInput, gt as SearchRecorder, h as SearchRunResult, ht as SearchOpening, i as RunSearchOptions, j as SearchUnitExtension, jt as assertSearchHistoryMatchesState, k as SearchCellPlan, kt as SearchHistoryPolicy, l as SearchLane, m as SearchProposerPort, mt as SearchLedgerBinding, n as searchDivergence, o as SearchCellResult, p as SearchProposedChild, pt as RegisterSearchNodeInput, q as SearchPosterior, qt as inMemoryCampaignStorage, r as searchPolicyView, s as SearchCellWork, t as runSearch, u as SearchProposalBlob, v as SearchClaimDecision, vt as SearchRunIdentity, w as searchClaimReserveUsd, wt as CreateSearchHistoryReceiptInput, x as decideSearchClaim, xt as searchEdgeId, y as SearchClaimPlan, yt as SettleSearchCellInput, z as aide, zt as SearchLedgerTrustedHeadMode } from "../search-kernel-Dloxd6gs.js";
9
+ import { B as ExternalOptimizerModelCallRequest, F as ExternalOptimizerEndpointFormat, G as ExternalOptimizerRunnerCommand, H as ExternalOptimizerModelExecutionObservation, I as ExternalOptimizerEvaluationObservation, L as ExternalOptimizerEvaluationRefusalReason, M as DEFAULT_EXTERNAL_OPTIMIZER_PROCESS_LIMITS, N as ExternalOptimizerCallbackLimits, P as ExternalOptimizerChatRequest, R as ExternalOptimizerModelBudget, U as ExternalOptimizerProcessLimits, V as ExternalOptimizerModelCallResult, j as DEFAULT_EXTERNAL_OPTIMIZER_CALLBACK_LIMITS, q as ExternalTextCandidate, z as ExternalOptimizerModelCall } from "../agent-profile-D01Io2Xw.js";
10
+ export { type AideOptions, type AllocateSearchCellInput, type AnalyzeCrossSurfaceInteractionsInput, type AshaOptions, type AutoevalsScoreLike, type AutoevalsScorerLike, type AxisEvidence, type AxisVerdict, type BuildEvidenceVectorOptions, type BuildLoopProvenanceArgs, type BuildTraceAnalystSurfaceDispatchOptions, type CacheIssueReason, type CacheRead, type CampaignAggregates, type CampaignArtifactWriter, type CampaignBreakdown, type CampaignCellFailureReceipt, type CampaignCellResult, type CampaignCellRetryPolicy, type CampaignCostMeter, type CampaignCoverage, type CampaignResult, type CampaignRunPlan, type CampaignRunPlanCell, type CampaignScenarioIdentity, type CampaignStorage, type CampaignTokenUsage, type CampaignTraceWriter, type CellScheduleSlot, type CodeSurface, type CodeSurfaceVerification, type CompareOptimizationMethodsOptions, type ComparisonCost, type ComponentSurface, type CostBreakdown, type CostLedgerHandle, type CreateProfileMatrixPlanOptions, type CreateSearchHistoryReceiptInput, type CrossSurfaceAdditionDecision, type CrossSurfaceAdditionRejectionReason, type CrossSurfaceAttemptCompleteness, type CrossSurfaceBestSingleSelection, type CrossSurfaceBootstrapPolicy, type CrossSurfaceCandidate, type CrossSurfaceCandidateComparison, type CrossSurfaceCandidateEvidence, type CrossSurfaceCandidateOutcome, type CrossSurfaceCandidateSummary, type CrossSurfaceComponent, type CrossSurfaceComponentEvidence, type CrossSurfaceCompositionStep, type CrossSurfaceDistribution, type CrossSurfaceEligibility, type CrossSurfaceEvidenceBreakdown, type CrossSurfaceIneligibilityReason, type CrossSurfaceInteractionAwareSelection, type CrossSurfaceInteractionEffect, type CrossSurfaceInteractionPath, type CrossSurfaceInteractionReport, type CrossSurfaceInteractionTask, type CrossSurfaceNaiveStackSelection, type CrossSurfacePairCompatibility, type CrossSurfacePairEvidence, type CrossSurfacePairIncompatibilityReason, type CrossSurfacePairwiseEntry, type CrossSurfaceRankedSingle, type CrossSurfaceRelativeCost, type CrossSurfaceSelectionPolicy, type CrossSurfaceSelections, type CrossSurfaceTaskRow, DEFAULT_EXTERNAL_OPTIMIZER_CALLBACK_LIMITS, DEFAULT_EXTERNAL_OPTIMIZER_PROCESS_LIMITS, type DefaultProductionGateCheck, type DefaultProductionGateOptions, type DefaultProductionRewardHackingOptions, type DimensionRegression, type DiscriminationScore, type DispatchContext, type DispatchFn, type EmitLoopProvenanceArgs, type EmitLoopProvenanceResult, type EstimateNodeCellsInput, type EvalFixture, type EvalFixtureFile, type EvalFixtureLoadOptions, type EvalFixtureRunPlan, type EvalFixtureScenario, type EvalFixtureValidationMode, type EvidenceVector, type ExternalOptimizationExample, type ExternalOptimizerCallbackLimits, type ExternalOptimizerChatRequest, type ExternalOptimizerEndpointFormat, type ExternalOptimizerEvaluationObservation, type ExternalOptimizerEvaluationRefusalReason, type ExternalOptimizerExecutionSummary, type ExternalOptimizerModelBudget, type ExternalOptimizerModelCall, type ExternalOptimizerModelCallRequest, type ExternalOptimizerModelCallResult, type ExternalOptimizerModelExecutionObservation, type ExternalOptimizerObservationArtifact, type ExternalOptimizerObservationSummary, type ExternalOptimizerProcessLimits, type ExternalOptimizerRunnerCommand, type ExternalOptimizerSubmittedCandidate, type ExternalSearchOptimizer, type ExternalTextCandidate, type ExternalTextEvaluationResponse, type ExternalTextOptimizationMethodConfig, type ExternalTextOptimizerContext, type ExternalTextOptimizerResult, FileSearchLedger, type FinalEvidencePolicy, type FinalEvidenceUse, type FinalizeProfileMatrixOptions, type FinalizedProfileMatrixResult, type FsLabeledScenarioStoreOptions, type Gate, type GateCheckStatus, type GateContext, type GateContribution, type GateDecision, type GateResult, type GenerationCandidate, type GenerationRecord, type GepaAdaptiveEngineRun, type GepaCandidatePopulationArtifact, type GepaCandidatePopulationCandidate, type GepaCandidatePopulationSummary, type GepaCandidateSelectionScore, type GepaEngineOptions, type GepaEngineRun, type GepaEvaluationImport, type GepaOptimizationMethodConfig, type GepaOptimizationRecipe, type GepaPopulationImport, type GepaRunnerCommand, type GitWorktreeAdapterOptions, type HeldOutGateOptions, type HeldoutSignificance, type HeldoutSignificanceOptions, type JudgeAggregate, type JudgeConfig, type JudgeDimension, type JudgeScore, type LabelTrust, type LabeledScenarioRecord, type LabeledScenarioSampleArgs, type LabeledScenarioSource, type LabeledScenarioStore, type LabeledScenarioWrite, type LlmJudgeDimension, type LlmJudgeOptions, type LoadEvalFixtureScenariosOptions, type LoopProvenanceArgsFromResult, type LoopProvenanceBackend, type LoopProvenanceCandidate, type LoopProvenanceEvidence, type LoopProvenanceOptimizationMethod, type LoopProvenanceRecord, type MutableSurface, type NeutralizationGateOptions, type NodeEstimate, type NodePosterior, type ObjectiveSource, type OpenAICompatibleOptimizerModel, type OpenAutoPrOptions, type OpenAutoPrResult, type OpenSearchLedgerOptions, type OptimizationMethod, type OptimizationMethodComparison, type OptimizationMethodComposition, type OptimizationMethodInput, type OptimizationMethodPairwise, type OptimizationMethodProvenance, type OptimizationMethodResult, type OptimizationMethodRunOptions, type OptimizationMethodScore, type OptimizationPackageSource, type OptimizationTokenUsage, type OptimizerConfig, type OptimizerModelBudget, type PairedHoldout, type ParetoParent, type ParetoSignificanceGateOptions, type PendingCostCallView, type PhoenixEvaluationResultLike, type PhoenixEvaluatorLike, type PlanCampaignRunOptions, type PlanEvalFixtureRunOptions, type PlanSearchClaimInput, type PlaybackContext, type PlaybackDriver, type PlaybackStep, type PowerPreflight, type PowerPreflightOptions, type PremeasuredOptimizationBaseline, type ProfileDispatchFn, type ProfileMatrixCoverage, type ProfileMatrixPlan, type ProfileMatrixRow, type ProfileMatrixSegmentResult, type ProfileSummary, type PromotionObjective, type PromotionPolicy, type ProposalFinding, type ProposalFindingOrigin, type ProposalTrackContext, type ProposeContext, type ProposedCandidate, type RecordSearchEdgeInput, type RedactionStatus, type ReferenceEquivalenceJudgeOptions, type ReferenceEquivalenceScenario, type RegisterSearchNodeInput, type RetainedDispatchOptions, type RetainedDispatchOutcome, type RolloutArgumentDiff, type RolloutArgumentDiffOptions, type RolloutCall, type RunCampaignOptions, type RunEvalOptions, type RunImprovementLoopOptions, type RunImprovementLoopResult, type RunOptimizationOptions, type RunOptimizationResult, type RunProfileMatrixOptions, type RunProfileMatrixResult, type RunProfileMatrixSegmentOptions, type RunSearchOptions, SEARCH_CLAIM_RULE, SEARCH_ESTIMATOR, SEARCH_LEDGER_SCHEMA, type Scenario, type ScenarioAggregate, type ScenarioRollup, type ScenarioSignal, type ScoreboardRenderOptions, type ScoreboardRow, type ScoreboardSummary, type ScoredRollout, type ScoredSurfaceOutcome, type SearchAllocationView, type SearchAllocator, type SearchArtifactCodec, type SearchArtifactKind, type SearchArtifactRef, type SearchAttemptAccounting, type SearchAudit, type SearchBudget, type SearchCancelReason, type SearchCandidateSurface, type SearchCell, type SearchCellAllocatedEvent, type SearchCellCancelledEvent, type SearchCellPlan, type SearchCellResult, type SearchCellSettledEvent, type SearchCellStage, type SearchCellWork, type SearchClaim, type SearchClaimDecision, type SearchClaimEstimator, type SearchClaimFinalist, type SearchClaimPlan, type SearchClaimPower, type SearchClaimTest, type SearchClaimVerification, type SearchCloseReason, type SearchClosedEvent, type SearchCompletion, type SearchCostAccounting, type SearchDecisionRecord, type SearchEdgeAttribution, type SearchEdgeOperator, type SearchEdgeRecordedEvent, type SearchEstimateMethod, type SearchExecutionIdentity, type SearchExecutor, type SearchExpansion, type SearchFailureReason, type SearchHistoryAdmissionOptions, type SearchHistoryAuditSummary, type SearchHistoryCoverage, type SearchHistoryCoverageRow, type SearchHistoryPolicy, type SearchHistoryReceipt, type SearchLane, type SearchLedger, type SearchLedgerAppendResult, type SearchLedgerBinding, type SearchLedgerEntry, SearchLedgerError, type SearchLedgerEvent, type SearchLedgerHash, SearchLedgerIntegrityError, type SearchLedgerTrustedHeadMode, type SearchModelIdentity, type SearchNode, type SearchNodeDecidedEvent, type SearchNodeDecision, type SearchNodeRef, type SearchNodeRegisteredEvent, type SearchNodeStatus, type SearchOpenedEvent, type SearchOpening, type SearchOperation, type SearchOperationKind, type SearchOperationRecordedEvent, type SearchOperationStartedEvent, type SearchPolicy, type SearchPolicyNode, type SearchPolicyView, type SearchPosterior, type SearchProposalBlob, type SearchProposalRequest, type SearchProposalResult, type SearchProposedChild, type SearchProposer, type SearchProposerKind, type SearchProposerPort, type SearchProposerView, SearchRecorder, type SearchRecorderOptions, type SearchReservation, type SearchRunIdentity, type SearchRunResult, type SearchRungDecision, type SearchScoredCell, type SearchSourceRef, type SearchSpend, type SearchSplit, type SearchSplitTasks, type SearchSplits, SearchState, SearchStateView, type SearchSummaryOptions, type SearchSurfaceEffect, type SearchSurfaceEvidence, type SearchSurfaceKind, type SearchTask, type SearchTaskOutcome, type SearchTokenAccounting, type SearchTraceRef, type SearchUnitExtension, type SearchUnitScore, type SearchUnknown, type SequentialDecideFn, type SequentialDecideOptions, type SequentialGateDecision, type SequentialObservation, type SequentialPairedGate, type SequentialPairedGateOptions, type SequentialStreamState, type SeriesDistribution, type SessionScript, type SettleSearchCellInput, type SingleRunLock, type SingleRunLockOptions, type SkillOptOptimizationMethodConfig, type SkillOptRunnerCommand, type SkillOptTrainerConfig, type SurfaceProposer, type TraceAnalystArtifact, type TraceAnalystScenario, type TraceSpan, type TransientFailureOptions, type UngroundedLiteralReport, type UserStory, type UserStoryVerdict, type Worktree, type WorktreeAdapter, acquireSingleRunLock, aide, analyzeCrossSurfaceInteractions, asha, assertCampaignDesign, assertCodeSurfaceIdentity, assertSearchHistoryMatchesState, beam, buildCellSchedule, buildEvidenceVector, campaignBreakdown, campaignCellSearchResult, campaignCoverage, campaignMeanComposite, campaignScenarioIdentity, campaignSplitDigest, campaignSplitDigestFromIdentities, canonicalDigest, cellCachePath, codeSurfaceIdentityMaterial, compareOptimizationMethods, componentSurfaceIdentityMaterial, composeGate, costFromLedgerSummary, createProfileMatrixPlan, createRetainedDispatch, createRunCostLedger, createSearchHistoryReceipt, crowdedFrontierParent, decideSearchClaim, decodeExternalTextCandidate, defaultProductionGate, developmentClaim, dimensionRegressions, discoverEvalFixtures, emitLoopProvenance, estimateNode, estimateNodeFromCells, externalSurface, externalTextOptimizationMethod, finalizeProfileMatrix, fsCampaignStorage, gepaOptimizationMethod, gitWorktreeAdapter, heldOutGate, heldoutSignificance, importExternalEvaluations, importGepaPopulation, inMemoryCampaignStorage, incumbent, incumbentWithOperatorBandit, isProposedCandidate, isTransientTransportFailure, llmJudge, loadEvalFixture, loadEvalFixtureScenarios, makeProposalFinding, measureCampaignCost, neutralizationGate, neutralizeText, openSearchLedger, pairHoldout, paretoPolicy, paretoSignificanceGate, parseSearchLedgerLine, planCampaignRun, planEvalFixtureRun, planSearchClaim, powerPreflight, readExternalOptimizerObservationArtifact, readGepaCandidatePopulationArtifact, renderScoreboardMarkdown, renderSearchSummary, renderSurfaceDiff, replaySearchLedgerText, resolveRunDir, resolveWorktreePath, runCampaign, runEval, runImprovementLoop, runOptimization, runProfileMatrix, runProfileMatrixSegment, runSearch, scopedOptimizationMethod, scoreDiscrimination, scoreUserStory, scoreboardSummary, searchCellId, searchCellSetDigest, searchClaimDecision, searchClaimReserveUsd, searchDivergence, searchEdgeId, searchEstimateMethod, searchModelIdentity, searchNodeId, searchPolicyView, searchPosterior, searchProposalExecution, searchProposerView, searchReceiptAccounting, searchTaskSetDigest, searchUnitScores, sequentialDecide, sequentialOptimizationMethod, sequentialPairedGate, skillOptOptimizationMethod, surfaceContentHash, surfaceDiff, surfaceDispatchRef, surfaceHash, surfaceNode, transientDispatchFailure, uniform, userStoryScoreboard, validateSearchLedgerEvent, verifyCodeSurface, verifySearchClaim, verifySearchHistoryArtifact, verifySearchHistoryReceipt };
@@ -1,15 +1,15 @@
1
1
  import { a as heldoutSignificance, i as dimensionRegressions, o as pairHoldout } from "../statistical-heldout-Bksv92Th.js";
2
- import { $ as planCampaignRun, A as verifySearchHistoryReceipt, B as defaultProductionGate, C as searchEdgeId, D as assertSearchHistoryMatchesState, F as asha, I as uniform, M as searchModelIdentity, N as searchProposalExecution, O as createSearchHistoryReceipt, P as searchReceiptAccounting, Q as runCampaign, S as developmentClaim, T as surfaceNode, Z as runEval, _ as beam, b as incumbentWithOperatorBandit, d as costFromLedgerSummary, et as resolveRunDir, g as aide, h as isProposedCandidate, i as transientDispatchFailure, j as campaignCellSearchResult, k as verifySearchHistoryArtifact, l as readGepaCandidatePopulationArtifact, m as runOptimization, nt as cellCachePath, p as runImprovementLoop, r as isTransientTransportFailure, t as llmJudge, tt as buildCellSchedule, v as crowdedFrontierParent, w as surfaceDiff, x as SearchRecorder, y as incumbent } from "../llm-judge-Djxh-Uhs.js";
2
+ import { $ as planCampaignRun, A as verifySearchHistoryReceipt, B as defaultProductionGate, C as searchEdgeId, D as assertSearchHistoryMatchesState, F as asha, I as uniform, M as searchModelIdentity, N as searchProposalExecution, O as createSearchHistoryReceipt, P as searchReceiptAccounting, Q as runCampaign, S as developmentClaim, T as surfaceNode, Z as runEval, _ as beam, b as incumbentWithOperatorBandit, d as costFromLedgerSummary, et as resolveRunDir, g as aide, h as isProposedCandidate, i as transientDispatchFailure, j as campaignCellSearchResult, k as verifySearchHistoryArtifact, l as readGepaCandidatePopulationArtifact, m as runOptimization, nt as cellCachePath, p as runImprovementLoop, r as isTransientTransportFailure, t as llmJudge, tt as buildCellSchedule, v as crowdedFrontierParent, w as surfaceDiff, x as SearchRecorder, y as incumbent } from "../llm-judge-Cc8vDJh_.js";
3
3
  import { B as campaignSplitDigestFromIdentities, C as assertCodeSurfaceIdentity, D as surfaceContentHash, E as renderSurfaceDiff, L as campaignCoverage, O as surfaceDispatchRef, P as assertCampaignDesign, R as campaignScenarioIdentity, T as componentSurfaceIdentityMaterial, f as campaignBreakdown, k as surfaceHash, l as canonicalDigest, p as campaignMeanComposite, u as emitLoopProvenance, w as codeSurfaceIdentityMaterial, y as powerPreflight, z as campaignSplitDigest } from "../campaign-evidence-DunzcJGv.js";
4
4
  import { a as SearchLedgerError, o as SearchLedgerIntegrityError } from "../search-ledger-file-Bd5Tioq6.js";
5
- import { M as fsCampaignStorage, N as inMemoryCampaignStorage, j as createRunCostLedger, l as DEFAULT_EXTERNAL_OPTIMIZER_CALLBACK_LIMITS, u as DEFAULT_EXTERNAL_OPTIMIZER_PROCESS_LIMITS } from "../external-optimizer-subprocess-B5gdLRZv.js";
5
+ import { M as fsCampaignStorage, N as inMemoryCampaignStorage, j as createRunCostLedger, l as DEFAULT_EXTERNAL_OPTIMIZER_CALLBACK_LIMITS, u as DEFAULT_EXTERNAL_OPTIMIZER_PROCESS_LIMITS } from "../external-optimizer-subprocess-D670Oxf2.js";
6
6
  import { a as makeProposalFinding } from "../types-DqFMNTgK.js";
7
- import { C as SEARCH_ESTIMATOR, D as searchEstimateMethod, E as searchCellSetDigest, O as searchPosterior, T as estimateNodeFromCells, _ as planSearchClaim, a as searchDivergence, b as verifySearchClaim, g as decideSearchClaim, h as SEARCH_CLAIM_RULE, i as runSearch, o as searchPolicyView, v as searchClaimDecision, w as estimateNode, y as searchClaimReserveUsd } from "../pareto-CTv8vozZ.js";
8
- import { a as validateSearchLedgerEvent, c as SearchStateView, d as searchNodeId, f as searchTaskSetDigest, i as replaySearchLedgerText, l as searchUnitScores, n as openSearchLedger, o as SEARCH_LEDGER_SCHEMA, r as parseSearchLedgerLine, s as SearchState, t as FileSearchLedger, u as searchCellId } from "../search-ledger-ClpN4I3e.js";
7
+ import { C as SEARCH_ESTIMATOR, D as searchEstimateMethod, E as searchCellSetDigest, O as searchPosterior, T as estimateNodeFromCells, _ as planSearchClaim, a as searchDivergence, b as verifySearchClaim, g as decideSearchClaim, h as SEARCH_CLAIM_RULE, i as runSearch, o as searchPolicyView, v as searchClaimDecision, w as estimateNode, y as searchClaimReserveUsd } from "../pareto-BiBnQXAE.js";
8
+ import { a as validateSearchLedgerEvent, c as SearchStateView, d as searchNodeId, f as searchTaskSetDigest, i as replaySearchLedgerText, l as searchUnitScores, n as openSearchLedger, o as SEARCH_LEDGER_SCHEMA, r as parseSearchLedgerLine, s as SearchState, t as FileSearchLedger, u as searchCellId } from "../search-ledger-CZRqtFbW.js";
9
9
  import { t as acquireSingleRunLock } from "../single-run-lock-Dekd8_Wv.js";
10
- import { n as searchProposerView, t as renderSearchSummary } from "../search-summary-CrBuvVnf.js";
11
- import { S as analyzeCrossSurfaceInteractions, _ as neutralizationGate, a as createRetainedDispatch, b as loadEvalFixtureScenarios, c as runProfileMatrixSegment, d as scoreUserStory, f as scoreboardSummary, g as neutralizeText, h as sequentialOptimizationMethod, i as scoreDiscrimination, l as runProfileMatrix, m as scopedOptimizationMethod, n as resolveWorktreePath, o as createProfileMatrixPlan, p as userStoryScoreboard, r as verifyCodeSurface, s as finalizeProfileMatrix, t as gitWorktreeAdapter, u as renderScoreboardMarkdown, v as discoverEvalFixtures, x as planEvalFixtureRun, y as loadEvalFixture } from "../campaign-CGvUTnmc.js";
12
- import { a as importExternalEvaluations, c as composeGate, d as readExternalOptimizerObservationArtifact, i as externalSurface, l as externalTextOptimizationMethod, n as compareOptimizationMethods, o as importGepaPopulation, r as gepaOptimizationMethod, s as heldOutGate, t as skillOptOptimizationMethod, u as decodeExternalTextCandidate } from "../skillopt-optimization-method-5dlex7MJ.js";
10
+ import { n as searchProposerView, t as renderSearchSummary } from "../search-summary-D4bwYnAE.js";
11
+ import { C as measureCampaignCost, S as analyzeCrossSurfaceInteractions, _ as neutralizationGate, a as createRetainedDispatch, b as loadEvalFixtureScenarios, c as runProfileMatrixSegment, d as scoreUserStory, f as scoreboardSummary, g as neutralizeText, h as sequentialOptimizationMethod, i as scoreDiscrimination, l as runProfileMatrix, m as scopedOptimizationMethod, n as resolveWorktreePath, o as createProfileMatrixPlan, p as userStoryScoreboard, r as verifyCodeSurface, s as finalizeProfileMatrix, t as gitWorktreeAdapter, u as renderScoreboardMarkdown, v as discoverEvalFixtures, x as planEvalFixtureRun, y as loadEvalFixture } from "../campaign-BVPC6ODQ.js";
12
+ import { a as importExternalEvaluations, c as composeGate, d as readExternalOptimizerObservationArtifact, i as externalSurface, l as externalTextOptimizationMethod, n as compareOptimizationMethods, o as importGepaPopulation, r as gepaOptimizationMethod, s as heldOutGate, t as skillOptOptimizationMethod, u as decodeExternalTextCandidate } from "../skillopt-optimization-method-DLKqdhcR.js";
13
13
  import { n as paretoPolicy, r as paretoSignificanceGate, t as buildEvidenceVector } from "../promotion-policy-6A8osGr_.js";
14
14
  import { n as sequentialPairedGate, t as sequentialDecide } from "../sequential-CimQrbjv.js";
15
- export { DEFAULT_EXTERNAL_OPTIMIZER_CALLBACK_LIMITS, DEFAULT_EXTERNAL_OPTIMIZER_PROCESS_LIMITS, FileSearchLedger, SEARCH_CLAIM_RULE, SEARCH_ESTIMATOR, SEARCH_LEDGER_SCHEMA, SearchLedgerError, SearchLedgerIntegrityError, SearchRecorder, SearchState, SearchStateView, acquireSingleRunLock, aide, analyzeCrossSurfaceInteractions, asha, assertCampaignDesign, assertCodeSurfaceIdentity, assertSearchHistoryMatchesState, beam, buildCellSchedule, buildEvidenceVector, campaignBreakdown, campaignCellSearchResult, campaignCoverage, campaignMeanComposite, campaignScenarioIdentity, campaignSplitDigest, campaignSplitDigestFromIdentities, canonicalDigest, cellCachePath, codeSurfaceIdentityMaterial, compareOptimizationMethods, componentSurfaceIdentityMaterial, composeGate, costFromLedgerSummary, createProfileMatrixPlan, createRetainedDispatch, createRunCostLedger, createSearchHistoryReceipt, crowdedFrontierParent, decideSearchClaim, decodeExternalTextCandidate, defaultProductionGate, developmentClaim, dimensionRegressions, discoverEvalFixtures, emitLoopProvenance, estimateNode, estimateNodeFromCells, externalSurface, externalTextOptimizationMethod, finalizeProfileMatrix, fsCampaignStorage, gepaOptimizationMethod, gitWorktreeAdapter, heldOutGate, heldoutSignificance, importExternalEvaluations, importGepaPopulation, inMemoryCampaignStorage, incumbent, incumbentWithOperatorBandit, isProposedCandidate, isTransientTransportFailure, llmJudge, loadEvalFixture, loadEvalFixtureScenarios, makeProposalFinding, neutralizationGate, neutralizeText, openSearchLedger, pairHoldout, paretoPolicy, paretoSignificanceGate, parseSearchLedgerLine, planCampaignRun, planEvalFixtureRun, planSearchClaim, powerPreflight, readExternalOptimizerObservationArtifact, readGepaCandidatePopulationArtifact, renderScoreboardMarkdown, renderSearchSummary, renderSurfaceDiff, replaySearchLedgerText, resolveRunDir, resolveWorktreePath, runCampaign, runEval, runImprovementLoop, runOptimization, runProfileMatrix, runProfileMatrixSegment, runSearch, scopedOptimizationMethod, scoreDiscrimination, scoreUserStory, scoreboardSummary, searchCellId, searchCellSetDigest, searchClaimDecision, searchClaimReserveUsd, searchDivergence, searchEdgeId, searchEstimateMethod, searchModelIdentity, searchNodeId, searchPolicyView, searchPosterior, searchProposalExecution, searchProposerView, searchReceiptAccounting, searchTaskSetDigest, searchUnitScores, sequentialDecide, sequentialOptimizationMethod, sequentialPairedGate, skillOptOptimizationMethod, surfaceContentHash, surfaceDiff, surfaceDispatchRef, surfaceHash, surfaceNode, transientDispatchFailure, uniform, userStoryScoreboard, validateSearchLedgerEvent, verifyCodeSurface, verifySearchClaim, verifySearchHistoryArtifact, verifySearchHistoryReceipt };
15
+ export { DEFAULT_EXTERNAL_OPTIMIZER_CALLBACK_LIMITS, DEFAULT_EXTERNAL_OPTIMIZER_PROCESS_LIMITS, FileSearchLedger, SEARCH_CLAIM_RULE, SEARCH_ESTIMATOR, SEARCH_LEDGER_SCHEMA, SearchLedgerError, SearchLedgerIntegrityError, SearchRecorder, SearchState, SearchStateView, acquireSingleRunLock, aide, analyzeCrossSurfaceInteractions, asha, assertCampaignDesign, assertCodeSurfaceIdentity, assertSearchHistoryMatchesState, beam, buildCellSchedule, buildEvidenceVector, campaignBreakdown, campaignCellSearchResult, campaignCoverage, campaignMeanComposite, campaignScenarioIdentity, campaignSplitDigest, campaignSplitDigestFromIdentities, canonicalDigest, cellCachePath, codeSurfaceIdentityMaterial, compareOptimizationMethods, componentSurfaceIdentityMaterial, composeGate, costFromLedgerSummary, createProfileMatrixPlan, createRetainedDispatch, createRunCostLedger, createSearchHistoryReceipt, crowdedFrontierParent, decideSearchClaim, decodeExternalTextCandidate, defaultProductionGate, developmentClaim, dimensionRegressions, discoverEvalFixtures, emitLoopProvenance, estimateNode, estimateNodeFromCells, externalSurface, externalTextOptimizationMethod, finalizeProfileMatrix, fsCampaignStorage, gepaOptimizationMethod, gitWorktreeAdapter, heldOutGate, heldoutSignificance, importExternalEvaluations, importGepaPopulation, inMemoryCampaignStorage, incumbent, incumbentWithOperatorBandit, isProposedCandidate, isTransientTransportFailure, llmJudge, loadEvalFixture, loadEvalFixtureScenarios, makeProposalFinding, measureCampaignCost, neutralizationGate, neutralizeText, openSearchLedger, pairHoldout, paretoPolicy, paretoSignificanceGate, parseSearchLedgerLine, planCampaignRun, planEvalFixtureRun, planSearchClaim, powerPreflight, readExternalOptimizerObservationArtifact, readGepaCandidatePopulationArtifact, renderScoreboardMarkdown, renderSearchSummary, renderSurfaceDiff, replaySearchLedgerText, resolveRunDir, resolveWorktreePath, runCampaign, runEval, runImprovementLoop, runOptimization, runProfileMatrix, runProfileMatrixSegment, runSearch, scopedOptimizationMethod, scoreDiscrimination, scoreUserStory, scoreboardSummary, searchCellId, searchCellSetDigest, searchClaimDecision, searchClaimReserveUsd, searchDivergence, searchEdgeId, searchEstimateMethod, searchModelIdentity, searchNodeId, searchPolicyView, searchPosterior, searchProposalExecution, searchProposerView, searchReceiptAccounting, searchTaskSetDigest, searchUnitScores, sequentialDecide, sequentialOptimizationMethod, sequentialPairedGate, skillOptOptimizationMethod, surfaceContentHash, surfaceDiff, surfaceDispatchRef, surfaceHash, surfaceNode, transientDispatchFailure, uniform, userStoryScoreboard, validateSearchLedgerEvent, verifyCodeSurface, verifySearchClaim, verifySearchHistoryArtifact, verifySearchHistoryReceipt };