@tangle-network/agent-eval 0.216.0 → 0.217.1

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 (553) hide show
  1. package/CHANGELOG.md +141 -57
  2. package/README.md +2 -2
  3. package/dist/adapters/http.d.ts +3 -3
  4. package/dist/{agent-profile-CIA2Atnt.d.ts → agent-profile-DTt8uGP9.d.ts} +5 -18
  5. package/dist/agent-profile-DTt8uGP9.d.ts.map +1 -0
  6. package/dist/{agent-profile-cell-BYc0bxsL.js → agent-profile-cell-B1V1gUZs.js} +4 -53
  7. package/dist/agent-profile-cell-B1V1gUZs.js.map +1 -0
  8. package/dist/{agent-profile-cell-BNp-Js9F.d.ts → agent-profile-cell-BcpFbNd5.d.ts} +2 -22
  9. package/dist/agent-profile-cell-BcpFbNd5.d.ts.map +1 -0
  10. package/dist/{agreement-irr-DsTURxdr.js → agreement-irr-BhAqjluA.js} +5 -5
  11. package/dist/agreement-irr-BhAqjluA.js.map +1 -0
  12. package/dist/analyst/index.d.ts +37 -170
  13. package/dist/analyst/index.d.ts.map +1 -1
  14. package/dist/analyst/index.js +17 -192
  15. package/dist/analyst/index.js.map +1 -1
  16. package/dist/{analyze-runs-3xpby3p2.js → analyze-runs-DqPJaJ4X.js} +763 -555
  17. package/dist/analyze-runs-DqPJaJ4X.js.map +1 -0
  18. package/dist/{analyze-runs-CSDAh8A7.d.ts → analyze-runs-DyeNcenW.d.ts} +18 -16
  19. package/dist/analyze-runs-DyeNcenW.d.ts.map +1 -0
  20. package/dist/authenticity/index.d.ts +0 -23
  21. package/dist/authenticity/index.d.ts.map +1 -1
  22. package/dist/authenticity/index.js +1 -34
  23. package/dist/authenticity/index.js.map +1 -1
  24. package/dist/{benchmark-command-CByl9dxG.js → benchmark-command-xQK8nOI6.js} +591 -109
  25. package/dist/benchmark-command-xQK8nOI6.js.map +1 -0
  26. package/dist/benchmarks/index.d.ts +5 -6
  27. package/dist/benchmarks/index.d.ts.map +1 -1
  28. package/dist/benchmarks/index.js +4 -4
  29. package/dist/benchmarks/index.js.map +1 -1
  30. package/dist/builder-eval/index.d.ts +3 -3
  31. package/dist/builder-eval/index.js +2 -2
  32. package/dist/builder-eval/index.js.map +1 -1
  33. package/dist/campaign/index.d.ts +8 -8
  34. package/dist/campaign/index.js +15 -15
  35. package/dist/{campaign-BQ-Jujuj.js → campaign-CJGkxAQ6.js} +256 -765
  36. package/dist/campaign-CJGkxAQ6.js.map +1 -0
  37. package/dist/{campaign-evidence-OcUciD-N.js → campaign-evidence-CQYw8_0H.js} +10 -18
  38. package/dist/{campaign-evidence-OcUciD-N.js.map → campaign-evidence-CQYw8_0H.js.map} +1 -1
  39. package/dist/{canonical-BsZVgBhW.js → canonical-Dq2hOQ8L.js} +2 -2
  40. package/dist/{canonical-BsZVgBhW.js.map → canonical-Dq2hOQ8L.js.map} +1 -1
  41. package/dist/cell-spend-DEWR3nj-.js +90 -0
  42. package/dist/cell-spend-DEWR3nj-.js.map +1 -0
  43. package/dist/{chat-client-DthPOYGd.js → chat-client-ldqxYYTN.js} +2 -2
  44. package/dist/{chat-client-DthPOYGd.js.map → chat-client-ldqxYYTN.js.map} +1 -1
  45. package/dist/{chat-json-call-BrKsyspg.js → chat-json-call-DavzexSp.js} +3 -2
  46. package/dist/chat-json-call-DavzexSp.js.map +1 -0
  47. package/dist/{claim-BXcZw-jo.js → claim-BPVuyHuy.js} +4 -4
  48. package/dist/claim-BPVuyHuy.js.map +1 -0
  49. package/dist/cli.js +113 -12
  50. package/dist/cli.js.map +1 -1
  51. package/dist/{client-BzL9niqi.d.ts → client-hwo3cJjR.d.ts} +3 -16
  52. package/dist/client-hwo3cJjR.d.ts.map +1 -0
  53. package/dist/{cluster-bootstrap-B3JywQQn.js → cluster-bootstrap-DEwwhl0C.js} +3 -3
  54. package/dist/{cluster-bootstrap-B3JywQQn.js.map → cluster-bootstrap-DEwwhl0C.js.map} +1 -1
  55. package/dist/{produced-state-ZCtDBxAE.js → completion-verifier-B_jw6C9p.js} +9 -64
  56. package/dist/completion-verifier-B_jw6C9p.js.map +1 -0
  57. package/dist/contract/index.d.ts +13 -13
  58. package/dist/contract/index.js +1041 -1473
  59. package/dist/contract/index.js.map +1 -1
  60. package/dist/{cost-ledger-D2FnJPBF.js → cost-ledger-D0352Z4d.js} +832 -817
  61. package/dist/cost-ledger-D0352Z4d.js.map +1 -0
  62. package/dist/{cost-ledger-CO7UyEcQ.d.ts → cost-ledger-Jk62OBfF.d.ts} +12 -47
  63. package/dist/cost-ledger-Jk62OBfF.d.ts.map +1 -0
  64. package/dist/dataset-DQqhOCPt.d.ts.map +1 -1
  65. package/dist/{default-registry-Cn1LQ2Ve.js → default-registry-ClYjq3QE.js} +8 -11
  66. package/dist/default-registry-ClYjq3QE.js.map +1 -0
  67. package/dist/{default-registry-BrWh62zf.d.ts → default-registry-DXgLmoDI.d.ts} +7 -50
  68. package/dist/default-registry-DXgLmoDI.d.ts.map +1 -0
  69. package/dist/{define-agent-eval-Ch3MWX6k.js → define-agent-eval-BDxNlP3D.js} +10 -10
  70. package/dist/define-agent-eval-BDxNlP3D.js.map +1 -0
  71. package/dist/{define-agent-eval-CEWkX5wZ.d.ts → define-agent-eval-BIkH_gAR.d.ts} +9 -9
  72. package/dist/define-agent-eval-BIkH_gAR.d.ts.map +1 -0
  73. package/dist/{descriptive-CnU8Yq29.js → descriptive-CVNy48rR.js} +2 -2
  74. package/dist/{descriptive-CnU8Yq29.js.map → descriptive-CVNy48rR.js.map} +1 -1
  75. package/dist/diagnosis/index.d.ts +4 -14
  76. package/dist/diagnosis/index.d.ts.map +1 -1
  77. package/dist/diagnosis/index.js +67 -28
  78. package/dist/diagnosis/index.js.map +1 -1
  79. package/dist/{dspy-rlm-engine-D-KX_e64.js → dspy-rlm-engine-DhdCr1Dc.js} +5 -10
  80. package/dist/dspy-rlm-engine-DhdCr1Dc.js.map +1 -0
  81. package/dist/{emitter-HcCmFQl_.d.ts → emitter-DABYYTcH.d.ts} +5 -5
  82. package/dist/emitter-DABYYTcH.d.ts.map +1 -0
  83. package/dist/emitter-DbMXUIVP.js.map +1 -1
  84. package/dist/{engine-C_zNWfM8.d.ts → engine-BvZ0R-36.d.ts} +18 -22
  85. package/dist/engine-BvZ0R-36.d.ts.map +1 -0
  86. package/dist/{equal-terms-Blx9Zk5I.js → equal-terms-DbPGcVtI.js} +2 -2
  87. package/dist/equal-terms-DbPGcVtI.js.map +1 -0
  88. package/dist/{errors-Dngq5h35.js → errors-BcOs5MKW.js} +6 -8
  89. package/dist/{errors-Dngq5h35.js.map → errors-BcOs5MKW.js.map} +1 -1
  90. package/dist/{eval-campaign-4byTtqrf.js → eval-campaign-BLEfBGbA.js} +6 -6
  91. package/dist/{eval-campaign-4byTtqrf.js.map → eval-campaign-BLEfBGbA.js.map} +1 -1
  92. package/dist/{evaluation-Cn2dRZIz.d.ts → evaluation-jTjC_QQD.d.ts} +8 -8
  93. package/dist/evaluation-jTjC_QQD.d.ts.map +1 -0
  94. package/dist/evaluation.d.ts +2 -2
  95. package/dist/evaluation.js +1 -1
  96. package/dist/evaluation.js.map +1 -1
  97. package/dist/{exact-types-CD0lf5Qd.d.ts → exact-types-CflbJ9f3.d.ts} +2 -2
  98. package/dist/{exact-types-CD0lf5Qd.d.ts.map → exact-types-CflbJ9f3.d.ts.map} +1 -1
  99. package/dist/{exec-ChJ6d5if.js → exec-CpbtOXVt.js} +2 -24
  100. package/dist/{exec-ChJ6d5if.js.map → exec-CpbtOXVt.js.map} +1 -1
  101. package/dist/execution-tracks-CpgFPpS5.js.map +1 -1
  102. package/dist/experiment/index.d.ts +331 -33
  103. package/dist/experiment/index.d.ts.map +1 -1
  104. package/dist/experiment/index.js +303 -101
  105. package/dist/experiment/index.js.map +1 -1
  106. package/dist/{exporters-X4xwla8A.js → exporters-Cl6IeNAu.js} +3 -3
  107. package/dist/exporters-Cl6IeNAu.js.map +1 -0
  108. package/dist/{exporters-ChTnR90l.d.ts → exporters-Dk3oEbK_.d.ts} +2 -4
  109. package/dist/{exporters-ChTnR90l.d.ts.map → exporters-Dk3oEbK_.d.ts.map} +1 -1
  110. package/dist/{external-optimizer-process-nnsY5D_4.js → external-optimizer-process-KVFGvYX1.js} +4 -3
  111. package/dist/external-optimizer-process-KVFGvYX1.js.map +1 -0
  112. package/dist/{external-optimizer-subprocess-DcerlZSG.js → external-optimizer-subprocess-XIHBOSKt.js} +551 -553
  113. package/dist/external-optimizer-subprocess-XIHBOSKt.js.map +1 -0
  114. package/dist/{extract-usage-BrnzRJ6H.js → extract-usage-BZLU01kR.js} +2 -23
  115. package/dist/{extract-usage-BrnzRJ6H.js.map → extract-usage-BZLU01kR.js.map} +1 -1
  116. package/dist/{failure-cluster-CbgEDcFJ.d.ts → failure-cluster-DN0t63Z0.d.ts} +4 -43
  117. package/dist/failure-cluster-DN0t63Z0.d.ts.map +1 -0
  118. package/dist/{failure-taxonomy-CjabTATj.js → failure-taxonomy-Bx5oWqaW.js} +2 -19
  119. package/dist/{failure-taxonomy-CjabTATj.js.map → failure-taxonomy-Bx5oWqaW.js.map} +1 -1
  120. package/dist/{feedback-trajectory-DkaDj0dj.d.ts → feedback-trajectory-BWmhRBGu.d.ts} +8 -13
  121. package/dist/feedback-trajectory-BWmhRBGu.d.ts.map +1 -0
  122. package/dist/{semantic-concept-judge-zQBG9hHU.js → findings-store-BMVQtEsm.js} +13 -255
  123. package/dist/findings-store-BMVQtEsm.js.map +1 -0
  124. package/dist/fuzz.d.ts +20 -63
  125. package/dist/fuzz.d.ts.map +1 -1
  126. package/dist/fuzz.js +62 -108
  127. package/dist/fuzz.js.map +1 -1
  128. package/dist/{hf-dataset-BR2yhuNn.js → hf-dataset-D9f7-oX7.js} +4 -24
  129. package/dist/hf-dataset-D9f7-oX7.js.map +1 -0
  130. package/dist/hosted/index.d.ts +2 -2
  131. package/dist/hosted/index.js +2 -2
  132. package/dist/{index-DHKEAv3s.d.ts → index-9jJ2fKSX.d.ts} +2 -64
  133. package/dist/index-9jJ2fKSX.d.ts.map +1 -0
  134. package/dist/{index-oQ4aHziK.d.ts → index-BLGqZ81N.d.ts} +11 -16
  135. package/dist/{index-oQ4aHziK.d.ts.map → index-BLGqZ81N.d.ts.map} +1 -1
  136. package/dist/{index-DlH0Y9gI.d.ts → index-BiT6RtNH.d.ts} +31 -43
  137. package/dist/index-BiT6RtNH.d.ts.map +1 -0
  138. package/dist/{index-Ch9VxCpK.d.ts → index-CX-GAUpw.d.ts} +4 -8
  139. package/dist/index-CX-GAUpw.d.ts.map +1 -0
  140. package/dist/{index-CPJJr98o.d.ts → index-CiRwLv2R.d.ts} +5 -68
  141. package/dist/index-CiRwLv2R.d.ts.map +1 -0
  142. package/dist/{index-NvGBiO8H.d.ts → index-ZuWx52WG.d.ts} +266 -495
  143. package/dist/index-ZuWx52WG.d.ts.map +1 -0
  144. package/dist/index.d.ts +2256 -2165
  145. package/dist/index.d.ts.map +1 -1
  146. package/dist/index.js +514 -1192
  147. package/dist/index.js.map +1 -1
  148. package/dist/{integrity-BV1ZDf42.js → integrity-DOd9Q86O.js} +7 -12
  149. package/dist/integrity-DOd9Q86O.js.map +1 -0
  150. package/dist/{integrity-BvnVARVl.js → integrity-W4CADcFc.js} +3 -7
  151. package/dist/{integrity-BvnVARVl.js.map → integrity-W4CADcFc.js.map} +1 -1
  152. package/dist/{integrity-CCAxGVK6.d.ts → integrity-_qgZLA5p.d.ts} +4 -6
  153. package/dist/{integrity-CCAxGVK6.d.ts.map → integrity-_qgZLA5p.d.ts.map} +1 -1
  154. package/dist/{internal-CRHwS9iz.js → internal-BTK91Bqt.js} +3 -3
  155. package/dist/{internal-CRHwS9iz.js.map → internal-BTK91Bqt.js.map} +1 -1
  156. package/dist/interval-Dq9gt7jx.js +219 -0
  157. package/dist/interval-Dq9gt7jx.js.map +1 -0
  158. package/dist/interval-ohuOJurX.d.ts +47 -0
  159. package/dist/interval-ohuOJurX.d.ts.map +1 -0
  160. package/dist/{journal-DvKCvjty.js → journal-CR4QikYp.js} +110 -110
  161. package/dist/journal-CR4QikYp.js.map +1 -0
  162. package/dist/json-BhdsJaOQ.js +111 -0
  163. package/dist/json-BhdsJaOQ.js.map +1 -0
  164. package/dist/{judge-calibration-N44V04Se.js → judge-calibration-BkXMIWA4.js} +3 -3
  165. package/dist/{judge-calibration-N44V04Se.js.map → judge-calibration-BkXMIWA4.js.map} +1 -1
  166. package/dist/{judge-gate-B1qYnkpi.js → judge-gate-Co5tuh57.js} +4 -27
  167. package/dist/judge-gate-Co5tuh57.js.map +1 -0
  168. package/dist/{judge-gate-DNcUrRFA.d.ts → judge-gate-DsL0yFcb.d.ts} +9 -10
  169. package/dist/judge-gate-DsL0yFcb.d.ts.map +1 -0
  170. package/dist/{kind-factory-CbZ-6tvu.js → kind-factory-Gy4fXixd.js} +88 -17
  171. package/dist/kind-factory-Gy4fXixd.js.map +1 -0
  172. package/dist/ledger-core/index.d.ts +2 -2
  173. package/dist/ledger-core/index.js +4 -4
  174. package/dist/{ledger-core-B2hahzrt.js → ledger-core-DrJhbms9.js} +5 -84
  175. package/dist/ledger-core-DrJhbms9.js.map +1 -0
  176. package/dist/{llm-client-DQveoxSM.js → llm-client-BshCREn6.js} +90 -219
  177. package/dist/llm-client-BshCREn6.js.map +1 -0
  178. package/dist/{llm-judge-PXV7Xljl.js → llm-judge-C8jMTNNG.js} +501 -931
  179. package/dist/llm-judge-C8jMTNNG.js.map +1 -0
  180. package/dist/matrix/index.d.ts +4 -4
  181. package/dist/matrix/index.js +3 -2
  182. package/dist/{matrix-_BV9-Lk5.js → matrix-B8l-Nsxd.js} +7 -96
  183. package/dist/matrix-B8l-Nsxd.js.map +1 -0
  184. package/dist/{matrix-CHMiebFx.d.ts → matrix-DHe-dwVJ.d.ts} +10 -19
  185. package/dist/matrix-DHe-dwVJ.d.ts.map +1 -0
  186. package/dist/{paired-tests-jbwPdSz5.js → mean-BbA_JCzW.js} +45 -5
  187. package/dist/mean-BbA_JCzW.js.map +1 -0
  188. package/dist/meta-eval/index.d.ts +6 -6
  189. package/dist/meta-eval/index.js +10 -10
  190. package/dist/meta-eval/index.js.map +1 -1
  191. package/dist/metrics-BKaPBtIG.js.map +1 -1
  192. package/dist/mint-BRZXuwRi.d.ts +81 -0
  193. package/dist/mint-BRZXuwRi.d.ts.map +1 -0
  194. package/dist/{mint-Csor1BLJ.js → mint-zszyYlpA.js} +4 -4
  195. package/dist/{mint-Csor1BLJ.js.map → mint-zszyYlpA.js.map} +1 -1
  196. package/dist/{multi-layer-verifier-BUaQ4C17.d.ts → multi-layer-verifier-DEgMUk6v.d.ts} +2 -2
  197. package/dist/{multi-layer-verifier-BUaQ4C17.d.ts.map → multi-layer-verifier-DEgMUk6v.d.ts.map} +1 -1
  198. package/dist/{multiplicity-D9cjmStq.js → multiplicity-Sg0U7h8j.js} +2 -2
  199. package/dist/{multiplicity-D9cjmStq.js.map → multiplicity-Sg0U7h8j.js.map} +1 -1
  200. package/dist/multishot/golden/index.d.ts +1 -23
  201. package/dist/multishot/golden/index.d.ts.map +1 -1
  202. package/dist/multishot/golden/index.js +5 -8
  203. package/dist/multishot/golden/index.js.map +1 -1
  204. package/dist/multishot/index.d.ts +3 -12
  205. package/dist/multishot/index.d.ts.map +1 -1
  206. package/dist/multishot/index.js +4 -3
  207. package/dist/multishot/index.js.map +1 -1
  208. package/dist/nonnegative-number-DvdMxg_f.js +9 -0
  209. package/dist/nonnegative-number-DvdMxg_f.js.map +1 -0
  210. package/dist/openapi.json +114 -10
  211. package/dist/{otel-spans-C8YIJWy1.js → otel-spans-CdN909k1.js} +3 -3
  212. package/dist/{otel-spans-C8YIJWy1.js.map → otel-spans-CdN909k1.js.map} +1 -1
  213. package/dist/{paired-arms-DzKn0TfY.js → paired-arms-Ct4LTKc1.js} +32 -9
  214. package/dist/paired-arms-Ct4LTKc1.js.map +1 -0
  215. package/dist/{paired-binary-Q36bhn2R.js → paired-binary-B_nejA44.js} +3 -36
  216. package/dist/paired-binary-B_nejA44.js.map +1 -0
  217. package/dist/{paired-promotion-decision-DPKz8ZnF.d.ts → paired-promotion-decision-CQMJ5xGN.d.ts} +2 -34
  218. package/dist/paired-promotion-decision-CQMJ5xGN.d.ts.map +1 -0
  219. package/dist/{paired-promotion-decision-BN6IQTiu.js → paired-promotion-decision-D0SHb-ZL.js} +3 -3
  220. package/dist/{paired-promotion-decision-BN6IQTiu.js.map → paired-promotion-decision-D0SHb-ZL.js.map} +1 -1
  221. package/dist/{search-kernel-BztlERLv.js → pareto-BzsxidFD.js} +883 -861
  222. package/dist/pareto-BzsxidFD.js.map +1 -0
  223. package/dist/pipelines/index.d.ts +16 -19
  224. package/dist/pipelines/index.d.ts.map +1 -1
  225. package/dist/pipelines/index.js +4 -68
  226. package/dist/pipelines/index.js.map +1 -1
  227. package/dist/{power-and-mde-fK5Qocwo.js → power-and-mde-N5nU4_Ly.js} +3 -3
  228. package/dist/{power-and-mde-fK5Qocwo.js.map → power-and-mde-N5nU4_Ly.js.map} +1 -1
  229. package/dist/predicate-FdKmElA_.js +38 -0
  230. package/dist/predicate-FdKmElA_.js.map +1 -0
  231. package/dist/{prime-protocol-DcAK9pC8.js → prime-protocol-BFgGrEMP.js} +3 -3
  232. package/dist/prime-protocol-BFgGrEMP.js.map +1 -0
  233. package/dist/{prime-protocol-CEE4BR9N.d.ts → prime-protocol-BWG2DQIk.d.ts} +4 -22
  234. package/dist/prime-protocol-BWG2DQIk.d.ts.map +1 -0
  235. package/dist/profile-cell.d.ts +2 -2
  236. package/dist/profile-cell.js +2 -2
  237. package/dist/{release-confidence-BK2QCB5M.d.ts → promotion-gate-DaY95yU6.d.ts} +105 -106
  238. package/dist/promotion-gate-DaY95yU6.d.ts.map +1 -0
  239. package/dist/{promotion-policy-CWW35UWq.js → promotion-policy-6A8osGr_.js} +4 -4
  240. package/dist/{promotion-policy-CWW35UWq.js.map → promotion-policy-6A8osGr_.js.map} +1 -1
  241. package/dist/{proposal-findings-BZiMTzAF.js → proposal-findings-BbWidvUk.js} +3 -3
  242. package/dist/proposal-findings-BbWidvUk.js.map +1 -0
  243. package/dist/{query-B1D1qp2Z.js → query-B_RZ36an.js} +5 -5
  244. package/dist/query-B_RZ36an.js.map +1 -0
  245. package/dist/{query-DK1nWcmp.d.ts → query-Cmv_U8vf.d.ts} +4 -24
  246. package/dist/{query-DK1nWcmp.d.ts.map → query-Cmv_U8vf.d.ts.map} +1 -1
  247. package/dist/{random-Dn5fPWkt.js → random-DDDcC7YU.js} +2 -2
  248. package/dist/{random-Dn5fPWkt.js.map → random-DDDcC7YU.js.map} +1 -1
  249. package/dist/{raw-provider-sink-rB2DYxr6.js → raw-provider-sink-75w4FWBj.js} +2 -2
  250. package/dist/{raw-provider-sink-rB2DYxr6.js.map → raw-provider-sink-75w4FWBj.js.map} +1 -1
  251. package/dist/{redact-Cveoq6fJ.d.ts → redact-DXdlFb_U.d.ts} +4 -21
  252. package/dist/redact-DXdlFb_U.d.ts.map +1 -0
  253. package/dist/{redact-Dk1ZdJEm.js → redact-mtkTiJVk.js} +92 -98
  254. package/dist/redact-mtkTiJVk.js.map +1 -0
  255. package/dist/{registry-JYfPxcVz.d.ts → registry-ssNoHzwD.d.ts} +5 -5
  256. package/dist/{registry-JYfPxcVz.d.ts.map → registry-ssNoHzwD.d.ts.map} +1 -1
  257. package/dist/{release-confidence-Dbe9AS_X.js → release-confidence-CYIFH-fp.js} +6 -11
  258. package/dist/release-confidence-CYIFH-fp.js.map +1 -0
  259. package/dist/{report-command-y8H6RSX8.js → render-C-w2EZ6p.js} +331 -554
  260. package/dist/render-C-w2EZ6p.js.map +1 -0
  261. package/dist/reporting-html-Kvlc8oMt.js +100 -0
  262. package/dist/reporting-html-Kvlc8oMt.js.map +1 -0
  263. package/dist/reporting.d.ts +6 -6
  264. package/dist/reporting.js +8 -8
  265. package/dist/{researcher-f6mZhh58.d.ts → researcher-0ABVIdGa.d.ts} +9 -9
  266. package/dist/{researcher-f6mZhh58.d.ts.map → researcher-0ABVIdGa.d.ts.map} +1 -1
  267. package/dist/reward-DrZ71vnf.d.ts +55 -0
  268. package/dist/reward-DrZ71vnf.d.ts.map +1 -0
  269. package/dist/{reward-hacking-BFcQgkux.js → reward-hacking-ByuETaIb.js} +3 -3
  270. package/dist/{reward-hacking-BFcQgkux.js.map → reward-hacking-ByuETaIb.js.map} +1 -1
  271. package/dist/{reward-hacking-DHA7c1l8.d.ts → reward-hacking-E52wq86n.d.ts} +5 -18
  272. package/dist/reward-hacking-E52wq86n.d.ts.map +1 -0
  273. package/dist/reward-nw2xZGZG.js.map +1 -1
  274. package/dist/rl.d.ts +117 -295
  275. package/dist/rl.d.ts.map +1 -1
  276. package/dist/rl.js +27 -747
  277. package/dist/rl.js.map +1 -1
  278. package/dist/rollout/index.d.ts +5 -4
  279. package/dist/rollout/index.js +7 -8
  280. package/dist/{rollout-D9bKKBnZ.js → rollout-D6C50mfA.js} +88 -13
  281. package/dist/rollout-D6C50mfA.js.map +1 -0
  282. package/dist/round-decimal-COrKglMh.js +10 -0
  283. package/dist/round-decimal-COrKglMh.js.map +1 -0
  284. package/dist/{rubric-predictive-validity-BsgkBfT0.js → rubric-predictive-validity-D3_oI72N.js} +3 -3
  285. package/dist/{rubric-predictive-validity-BsgkBfT0.js.map → rubric-predictive-validity-D3_oI72N.js.map} +1 -1
  286. package/dist/{rubric-predictive-validity-2SgHxoa5.d.ts → rubric-predictive-validity-DiwT8PbL.d.ts} +2 -2
  287. package/dist/{rubric-predictive-validity-2SgHxoa5.d.ts.map → rubric-predictive-validity-DiwT8PbL.d.ts.map} +1 -1
  288. package/dist/{run-record-D1Hw-Jml.d.ts → run-record-CaxbLq6Y.d.ts} +5 -11
  289. package/dist/run-record-CaxbLq6Y.d.ts.map +1 -0
  290. package/dist/{run-record-ES07wfz9.js → run-record-CysKLB93.js} +3 -5
  291. package/dist/run-record-CysKLB93.js.map +1 -0
  292. package/dist/{run-record-DlTZ_lqe.js → run-record-DhEJgoPz.js} +4 -4
  293. package/dist/{run-record-DlTZ_lqe.js.map → run-record-DhEJgoPz.js.map} +1 -1
  294. package/dist/sandbox-harness-BlSOu4LX.d.ts.map +1 -1
  295. package/dist/{schema-CSf6qWgZ.js → schema-Bt2vLFm3.js} +2 -14
  296. package/dist/schema-Bt2vLFm3.js.map +1 -0
  297. package/dist/schema-C-ziyJD7.d.ts.map +1 -1
  298. package/dist/{schema-2g7trUwH.d.ts → schema-D6EVKzTB.d.ts} +4 -5
  299. package/dist/schema-D6EVKzTB.d.ts.map +1 -0
  300. package/dist/{schema-BuiujZ-g.js → schema-DxcKTzbi.js} +2 -2
  301. package/dist/schema-DxcKTzbi.js.map +1 -0
  302. package/dist/search/index.d.ts +39 -53
  303. package/dist/search/index.d.ts.map +1 -1
  304. package/dist/search/index.js +4 -4
  305. package/dist/{search-kernel-CpcKH5Ih.d.ts → search-kernel-DxqjBxA-.d.ts} +18 -31
  306. package/dist/search-kernel-DxqjBxA-.d.ts.map +1 -0
  307. package/dist/{search-ledger-d7V8o9Lk.js → search-ledger-TUvB5gWH.js} +189 -199
  308. package/dist/search-ledger-TUvB5gWH.js.map +1 -0
  309. package/dist/{search-ledger-file-BqOo-bVo.js → search-ledger-file-UKCO2r8a.js} +4 -4
  310. package/dist/search-ledger-file-UKCO2r8a.js.map +1 -0
  311. package/dist/search-ledger-types-p2xKfiDJ.d.ts.map +1 -1
  312. package/dist/{search-shipper-er4pK5_Y.js → search-shipper-Cw2z3-td.js} +4 -4
  313. package/dist/search-shipper-Cw2z3-td.js.map +1 -0
  314. package/dist/{search-summary-CBvz3u_S.js → search-summary-DQIvJsSB.js} +5 -5
  315. package/dist/{search-summary-CBvz3u_S.js.map → search-summary-DQIvJsSB.js.map} +1 -1
  316. package/dist/{sequential-CzK5DarL.js → sequential-BVv1sjsw.js} +2 -32
  317. package/dist/{sequential-CzK5DarL.js.map → sequential-BVv1sjsw.js.map} +1 -1
  318. package/dist/{sequential-D-1PPCmM.js → sequential-CimQrbjv.js} +5 -5
  319. package/dist/sequential-CimQrbjv.js.map +1 -0
  320. package/dist/{sequential-BhsrMupG.d.ts → sequential-KwGspfeR.d.ts} +2 -9
  321. package/dist/{sequential-BhsrMupG.d.ts.map → sequential-KwGspfeR.d.ts.map} +1 -1
  322. package/dist/{sequential-eprocess-D1jKoihe.js → sequential-eprocess-DodI6RoF.js} +2 -2
  323. package/dist/{sequential-eprocess-D1jKoihe.js.map → sequential-eprocess-DodI6RoF.js.map} +1 -1
  324. package/dist/{server-DbcC7xMl.js → server-DoVbqqtJ.js} +101 -101
  325. package/dist/server-DoVbqqtJ.js.map +1 -0
  326. package/dist/{single-run-lock-fVu3MZWH.js → single-run-lock-U58yf8N6.js} +2 -2
  327. package/dist/{single-run-lock-fVu3MZWH.js.map → single-run-lock-U58yf8N6.js.map} +1 -1
  328. package/dist/{skillopt-optimization-method-CCtzralq.js → skillopt-optimization-method-kyL94-ri.js} +428 -91
  329. package/dist/skillopt-optimization-method-kyL94-ri.js.map +1 -0
  330. package/dist/{spans-D9_ehFuk.d.ts → spans-CVngGij3.d.ts} +2 -2
  331. package/dist/{spans-D9_ehFuk.d.ts.map → spans-CVngGij3.d.ts.map} +1 -1
  332. package/dist/{statistical-heldout-1Gbmex7v.js → statistical-heldout-Bksv92Th.js} +3 -3
  333. package/dist/statistical-heldout-Bksv92Th.js.map +1 -0
  334. package/dist/{statistical-heldout-BeR4bOdg.d.ts → statistical-heldout-C9AbgREN.d.ts} +8 -67
  335. package/dist/statistical-heldout-C9AbgREN.d.ts.map +1 -0
  336. package/dist/{steps-Bg5-KVx1.d.ts → steps-DlepJPwD.d.ts} +2 -56
  337. package/dist/steps-DlepJPwD.d.ts.map +1 -0
  338. package/dist/{store-C4avFjIi.d.ts → store-B3nWRy3B.d.ts} +2 -2
  339. package/dist/{store-C4avFjIi.d.ts.map → store-B3nWRy3B.d.ts.map} +1 -1
  340. package/dist/{store-otlp-DtB4Slsr.js → store-otlp-BteDAbHK.js} +135 -132
  341. package/dist/store-otlp-BteDAbHK.js.map +1 -0
  342. package/dist/{store-tool-spans-fZIigrpP.js → store-tool-spans-D5l_OfTJ.js} +9 -9
  343. package/dist/store-tool-spans-D5l_OfTJ.js.map +1 -0
  344. package/dist/{store-tool-spans-DR1SrCLK.d.ts → store-tool-spans-DZS0HWVf.d.ts} +157 -165
  345. package/dist/store-tool-spans-DZS0HWVf.d.ts.map +1 -0
  346. package/dist/storyboard/index.d.ts +4 -11
  347. package/dist/storyboard/index.d.ts.map +1 -1
  348. package/dist/storyboard/index.js +21 -19
  349. package/dist/storyboard/index.js.map +1 -1
  350. package/dist/{summary-report-DtdRucM0.js → summary-report-BsXJoYX5.js} +588 -598
  351. package/dist/summary-report-BsXJoYX5.js.map +1 -0
  352. package/dist/{summary-report-C-CtItCN.d.ts → summary-report-DM7tlml1.d.ts} +16 -20
  353. package/dist/summary-report-DM7tlml1.d.ts.map +1 -0
  354. package/dist/supervisor-run/index.d.ts +189 -153
  355. package/dist/supervisor-run/index.d.ts.map +1 -1
  356. package/dist/supervisor-run/index.js +58 -450
  357. package/dist/supervisor-run/index.js.map +1 -1
  358. package/dist/{systemone-CpTLAlqb.d.ts → systemone-Bp_Ac0p1.d.ts} +6 -6
  359. package/dist/{systemone-CpTLAlqb.d.ts.map → systemone-Bp_Ac0p1.d.ts.map} +1 -1
  360. package/dist/systemone-protocol.js +1 -1
  361. package/dist/{systemone-review-B_yo1xsd.d.ts → systemone-review-CwE6JGIp.d.ts} +2 -2
  362. package/dist/{systemone-review-B_yo1xsd.d.ts.map → systemone-review-CwE6JGIp.d.ts.map} +1 -1
  363. package/dist/{systemone-review-BZWfrtq1.js → systemone-review-DzdOJ8I6.js} +3 -3
  364. package/dist/{systemone-review-BZWfrtq1.js.map → systemone-review-DzdOJ8I6.js.map} +1 -1
  365. package/dist/systemone.d.ts +5 -5
  366. package/dist/systemone.js +5 -5
  367. package/dist/systemone.js.map +1 -1
  368. package/dist/{task-failure-attributes-DngaLdE4.js → task-failure-attributes-BMsblaDh.js} +3 -3
  369. package/dist/task-failure-attributes-BMsblaDh.js.map +1 -0
  370. package/dist/{terminal-record-BHocwFw1.js → terminal-record-78g6E4vh.js} +17 -13
  371. package/dist/terminal-record-78g6E4vh.js.map +1 -0
  372. package/dist/{tool-groups-mcxOXVlb.d.ts → tool-groups-DyNz2JZ_.d.ts} +3 -3
  373. package/dist/tool-groups-DyNz2JZ_.d.ts.map +1 -0
  374. package/dist/{tool-waste-Wi4g6Ekb.d.ts → tool-waste-CkjzWmeY.d.ts} +53 -56
  375. package/dist/tool-waste-CkjzWmeY.d.ts.map +1 -0
  376. package/dist/{tool-waste-D52PqU9Q.js → tool-waste-DLsjS_p-.js} +5 -5
  377. package/dist/{tool-waste-D52PqU9Q.js.map → tool-waste-DLsjS_p-.js.map} +1 -1
  378. package/dist/{trace-questions-DG7nqLQ7.d.ts → trace-questions-xxwgsuMi.d.ts} +5 -10
  379. package/dist/{trace-questions-DG7nqLQ7.d.ts.map → trace-questions-xxwgsuMi.d.ts.map} +1 -1
  380. package/dist/trace-repair/index.d.ts +15 -212
  381. package/dist/trace-repair/index.d.ts.map +1 -1
  382. package/dist/trace-repair/index.js +865 -987
  383. package/dist/trace-repair/index.js.map +1 -1
  384. package/dist/traces.d.ts +76 -86
  385. package/dist/traces.d.ts.map +1 -1
  386. package/dist/traces.js +13 -13
  387. package/dist/traces.js.map +1 -1
  388. package/dist/trajectory-replay/index.d.ts +3 -117
  389. package/dist/trajectory-replay/index.d.ts.map +1 -1
  390. package/dist/trajectory-replay/index.js +98 -56
  391. package/dist/trajectory-replay/index.js.map +1 -1
  392. package/dist/{tree-rXLW3M_4.js → tree-BGRglkKd.js} +2355 -2414
  393. package/dist/tree-BGRglkKd.js.map +1 -0
  394. package/dist/{types-B3jzCp0p.js → types-BXgASBCL.js} +2 -2
  395. package/dist/{types-B3jzCp0p.js.map → types-BXgASBCL.js.map} +1 -1
  396. package/dist/{types-oKRhQAde.d.ts → types-CW8ewATZ.d.ts} +5 -114
  397. package/dist/types-CW8ewATZ.d.ts.map +1 -0
  398. package/dist/{types-BqkVmHfv.d.ts → types-CmXY0PQf.d.ts} +2 -4
  399. package/dist/types-CmXY0PQf.d.ts.map +1 -0
  400. package/dist/{types-DBZ7keha.d.ts → types-D-mgRzlh.d.ts} +9 -72
  401. package/dist/types-D-mgRzlh.d.ts.map +1 -0
  402. package/dist/{types-B4C5nFw6.d.ts → types-D8GhJoHk.d.ts} +79 -75
  403. package/dist/types-D8GhJoHk.d.ts.map +1 -0
  404. package/dist/{types-IXD2HJzu.js → types-DqFMNTgK.js} +2 -4
  405. package/dist/types-DqFMNTgK.js.map +1 -0
  406. package/dist/{types-CfZMIzB_.d.ts → types-DtMbFw6U.d.ts} +3 -3
  407. package/dist/{types-CfZMIzB_.d.ts.map → types-DtMbFw6U.d.ts.map} +1 -1
  408. package/dist/{verdict-DhPoXApk.js → verdict-BGQmxQ8A.js} +3 -3
  409. package/dist/verdict-BGQmxQ8A.js.map +1 -0
  410. package/dist/{verdict-E4eRNf7-.d.ts → verdict-C24NELtN.d.ts} +2 -15
  411. package/dist/{verdict-E4eRNf7-.d.ts.map → verdict-C24NELtN.d.ts.map} +1 -1
  412. package/dist/{verdict-cache-BQEsVy9n.js → verdict-cache-CL_7tePD.js} +2 -2
  413. package/dist/verdict-cache-CL_7tePD.js.map +1 -0
  414. package/dist/wire/index.d.ts +32 -411
  415. package/dist/wire/index.d.ts.map +1 -1
  416. package/dist/wire/index.js +2 -2
  417. package/docs/changes/jev-evidence-review.md +1 -1
  418. package/docs/changes/jev-product-adoption.md +1 -1
  419. package/docs/changes/jev-recorded-evidence.md +1 -1
  420. package/docs/design/mlbenchmarks-book-review.md +1 -1
  421. package/docs/design/mlbenchmarks-review/probes.mts +23 -31
  422. package/docs/design/statistics-decisions.md +17 -17
  423. package/docs/design.md +1 -1
  424. package/docs/evaluation-integrity.md +1 -1
  425. package/docs/experiment.md +1 -1
  426. package/docs/proofs/campaign-attempt-retention-20261001/README.md +2 -2
  427. package/docs/public-api.md +138 -529
  428. package/docs/rollout.md +1 -1
  429. package/docs/trace-repair-admission.md +1 -1
  430. package/docs/wire-protocol.md +1 -1
  431. package/package.json +1 -1
  432. package/dist/active-curriculum-B_Lc9kfO.js +0 -61
  433. package/dist/active-curriculum-B_Lc9kfO.js.map +0 -1
  434. package/dist/agent-profile-CIA2Atnt.d.ts.map +0 -1
  435. package/dist/agent-profile-cell-BNp-Js9F.d.ts.map +0 -1
  436. package/dist/agent-profile-cell-BYc0bxsL.js.map +0 -1
  437. package/dist/agreement-irr-DsTURxdr.js.map +0 -1
  438. package/dist/analyze-runs-3xpby3p2.js.map +0 -1
  439. package/dist/analyze-runs-CSDAh8A7.d.ts.map +0 -1
  440. package/dist/ast-DJ6Bc7ab.js +0 -558
  441. package/dist/ast-DJ6Bc7ab.js.map +0 -1
  442. package/dist/ast-hI-vjW6J.d.ts +0 -457
  443. package/dist/ast-hI-vjW6J.d.ts.map +0 -1
  444. package/dist/baseline-Dm8966du.js +0 -259
  445. package/dist/baseline-Dm8966du.js.map +0 -1
  446. package/dist/benchmark-BywPeAUo.js +0 -562
  447. package/dist/benchmark-BywPeAUo.js.map +0 -1
  448. package/dist/benchmark-command-CByl9dxG.js.map +0 -1
  449. package/dist/campaign-BQ-Jujuj.js.map +0 -1
  450. package/dist/chat-json-call-BrKsyspg.js.map +0 -1
  451. package/dist/claim-BXcZw-jo.js.map +0 -1
  452. package/dist/claude-jsonl-dZir12m6.js +0 -86
  453. package/dist/claude-jsonl-dZir12m6.js.map +0 -1
  454. package/dist/client-BzL9niqi.d.ts.map +0 -1
  455. package/dist/cost-ledger-CO7UyEcQ.d.ts.map +0 -1
  456. package/dist/cost-ledger-D2FnJPBF.js.map +0 -1
  457. package/dist/counterfactual-CPaWN99-.d.ts +0 -60
  458. package/dist/counterfactual-CPaWN99-.d.ts.map +0 -1
  459. package/dist/counterfactual-DtMWvn7D.js +0 -98
  460. package/dist/counterfactual-DtMWvn7D.js.map +0 -1
  461. package/dist/default-registry-BrWh62zf.d.ts.map +0 -1
  462. package/dist/default-registry-Cn1LQ2Ve.js.map +0 -1
  463. package/dist/define-agent-eval-CEWkX5wZ.d.ts.map +0 -1
  464. package/dist/define-agent-eval-Ch3MWX6k.js.map +0 -1
  465. package/dist/dspy-rlm-engine-D-KX_e64.js.map +0 -1
  466. package/dist/effect-sizes-DiH8MGOH.js +0 -82
  467. package/dist/effect-sizes-DiH8MGOH.js.map +0 -1
  468. package/dist/emitter-HcCmFQl_.d.ts.map +0 -1
  469. package/dist/engine-C_zNWfM8.d.ts.map +0 -1
  470. package/dist/equal-terms-Blx9Zk5I.js.map +0 -1
  471. package/dist/evaluation-Cn2dRZIz.d.ts.map +0 -1
  472. package/dist/exporters-X4xwla8A.js.map +0 -1
  473. package/dist/external-optimizer-process-nnsY5D_4.js.map +0 -1
  474. package/dist/external-optimizer-subprocess-DcerlZSG.js.map +0 -1
  475. package/dist/failure-cluster-CbgEDcFJ.d.ts.map +0 -1
  476. package/dist/feedback-trajectory-DkaDj0dj.d.ts.map +0 -1
  477. package/dist/hf-dataset-BR2yhuNn.js.map +0 -1
  478. package/dist/index-CPJJr98o.d.ts.map +0 -1
  479. package/dist/index-Ch9VxCpK.d.ts.map +0 -1
  480. package/dist/index-DHKEAv3s.d.ts.map +0 -1
  481. package/dist/index-DlH0Y9gI.d.ts.map +0 -1
  482. package/dist/index-NvGBiO8H.d.ts.map +0 -1
  483. package/dist/integrity-BV1ZDf42.js.map +0 -1
  484. package/dist/journal-DvKCvjty.js.map +0 -1
  485. package/dist/judge-gate-B1qYnkpi.js.map +0 -1
  486. package/dist/judge-gate-DNcUrRFA.d.ts.map +0 -1
  487. package/dist/kind-factory-CbZ-6tvu.js.map +0 -1
  488. package/dist/ledger-core-B2hahzrt.js.map +0 -1
  489. package/dist/llm-client-DQveoxSM.js.map +0 -1
  490. package/dist/llm-judge-PXV7Xljl.js.map +0 -1
  491. package/dist/matrix-CHMiebFx.d.ts.map +0 -1
  492. package/dist/matrix-_BV9-Lk5.js.map +0 -1
  493. package/dist/mint-DCGoBYhB.d.ts +0 -155
  494. package/dist/mint-DCGoBYhB.d.ts.map +0 -1
  495. package/dist/normal-DsJZtrJc.js +0 -25
  496. package/dist/normal-DsJZtrJc.js.map +0 -1
  497. package/dist/paired-arms-DzKn0TfY.js.map +0 -1
  498. package/dist/paired-binary-Q36bhn2R.js.map +0 -1
  499. package/dist/paired-promotion-decision-DPKz8ZnF.d.ts.map +0 -1
  500. package/dist/paired-tests-jbwPdSz5.js.map +0 -1
  501. package/dist/prime-protocol-CEE4BR9N.d.ts.map +0 -1
  502. package/dist/prime-protocol-DcAK9pC8.js.map +0 -1
  503. package/dist/produced-state-ZCtDBxAE.js.map +0 -1
  504. package/dist/proposal-findings-BZiMTzAF.js.map +0 -1
  505. package/dist/query-B1D1qp2Z.js.map +0 -1
  506. package/dist/redact-Cveoq6fJ.d.ts.map +0 -1
  507. package/dist/redact-Dk1ZdJEm.js.map +0 -1
  508. package/dist/release-confidence-BK2QCB5M.d.ts.map +0 -1
  509. package/dist/release-confidence-Dbe9AS_X.js.map +0 -1
  510. package/dist/report-command-y8H6RSX8.js.map +0 -1
  511. package/dist/reward-hacking-DHA7c1l8.d.ts.map +0 -1
  512. package/dist/rollout-D9bKKBnZ.js.map +0 -1
  513. package/dist/run-record-D1Hw-Jml.d.ts.map +0 -1
  514. package/dist/run-record-ES07wfz9.js.map +0 -1
  515. package/dist/schema-2g7trUwH.d.ts.map +0 -1
  516. package/dist/schema-BuiujZ-g.js.map +0 -1
  517. package/dist/schema-CSf6qWgZ.js.map +0 -1
  518. package/dist/search-kernel-BztlERLv.js.map +0 -1
  519. package/dist/search-kernel-CpcKH5Ih.d.ts.map +0 -1
  520. package/dist/search-ledger-d7V8o9Lk.js.map +0 -1
  521. package/dist/search-ledger-file-BqOo-bVo.js.map +0 -1
  522. package/dist/search-shipper-er4pK5_Y.js.map +0 -1
  523. package/dist/semantic-concept-judge-zQBG9hHU.js.map +0 -1
  524. package/dist/sequential-D-1PPCmM.js.map +0 -1
  525. package/dist/server-DbcC7xMl.js.map +0 -1
  526. package/dist/skillopt-optimization-method-CCtzralq.js.map +0 -1
  527. package/dist/statistical-heldout-1Gbmex7v.js.map +0 -1
  528. package/dist/statistical-heldout-BeR4bOdg.d.ts.map +0 -1
  529. package/dist/steps-Bg5-KVx1.d.ts.map +0 -1
  530. package/dist/store-otlp-DtB4Slsr.js.map +0 -1
  531. package/dist/store-tool-spans-DR1SrCLK.d.ts.map +0 -1
  532. package/dist/store-tool-spans-fZIigrpP.js.map +0 -1
  533. package/dist/student-t-BQeKJx2N.js +0 -39
  534. package/dist/student-t-BQeKJx2N.js.map +0 -1
  535. package/dist/summary-report-C-CtItCN.d.ts.map +0 -1
  536. package/dist/summary-report-DtdRucM0.js.map +0 -1
  537. package/dist/task-failure-attributes-DngaLdE4.js.map +0 -1
  538. package/dist/terminal-record-BHocwFw1.js.map +0 -1
  539. package/dist/tool-groups-mcxOXVlb.d.ts.map +0 -1
  540. package/dist/tool-waste-Wi4g6Ekb.d.ts.map +0 -1
  541. package/dist/trajectory-Y1fmdlw7.d.ts +0 -24
  542. package/dist/trajectory-Y1fmdlw7.d.ts.map +0 -1
  543. package/dist/tree-rXLW3M_4.js.map +0 -1
  544. package/dist/types-B4C5nFw6.d.ts.map +0 -1
  545. package/dist/types-BqkVmHfv.d.ts.map +0 -1
  546. package/dist/types-DBZ7keha.d.ts.map +0 -1
  547. package/dist/types-IXD2HJzu.js.map +0 -1
  548. package/dist/types-oKRhQAde.d.ts.map +0 -1
  549. package/dist/usage-receipt-Cx3xNeyB.js +0 -76
  550. package/dist/usage-receipt-Cx3xNeyB.js.map +0 -1
  551. package/dist/verdict-DhPoXApk.js.map +0 -1
  552. package/dist/verdict-cache-BQEsVy9n.js.map +0 -1
  553. package/docs/design/self-improvement-evidence-audit.md +0 -263
@@ -1,115 +1,29 @@
1
- import { s as ValidationError, t as AgentEvalError } from "./errors-Dngq5h35.js";
2
- import { a as hashCanonical, i as compareCodeUnits, r as canonicalString } from "./canonical-BsZVgBhW.js";
3
- import { c as agentProfileId, d as harnessAxisOf, i as verifyCompletion, l as agentProfileModelId, s as agentProfileHash, t as extractProducedState } from "./produced-state-ZCtDBxAE.js";
4
- import { o as buildAgentProfileCell } from "./agent-profile-cell-BYc0bxsL.js";
5
- import { r as pairedBootstrap } from "./paired-tests-jbwPdSz5.js";
6
- import { t as comparePairedArms } from "./paired-arms-DzKn0TfY.js";
7
- import { o as pairHoldout } from "./statistical-heldout-1Gbmex7v.js";
8
- import { c as validateRunRecord, i as modelHasSnapshot, n as UNKNOWN_MODEL, o as runTaskScore } from "./run-record-DlTZ_lqe.js";
9
- import { n as contentHash, t as canonicalJson } from "./verdict-cache-BQEsVy9n.js";
10
- import { at as resolveRunDir, d as combineComparisonCosts, it as planCampaignRun, lt as cellCachePath, rt as runCampaign, u as executeOptimizationMethod, ut as computeManifestHash, v as labelTrustRank } from "./llm-judge-PXV7Xljl.js";
11
- import { n as campaignCellToRunRecord, r as projectCampaignCellQuality, t as campaignCellCostProvenance } from "./run-record-ES07wfz9.js";
12
- import { t as CostAccountingIncompleteError } from "./cost-ledger-D2FnJPBF.js";
13
- import { B as assertCampaignDesign, N as surfaceContentHash, R as assertRealBackend, W as campaignScenarioIdentity, k as assertCodeSurfaceIdentity, z as summarizeBackendIntegrity } from "./campaign-evidence-OcUciD-N.js";
14
- import { m as mapConcurrent } from "./journal-DvKCvjty.js";
15
- import { P as fsCampaignStorage } from "./external-optimizer-subprocess-DcerlZSG.js";
16
- import "./search-kernel-BztlERLv.js";
17
- import "./search-ledger-d7V8o9Lk.js";
18
- import "./search-summary-CBvz3u_S.js";
19
- import { a as scoreAnalystFindings } from "./benchmark-BywPeAUo.js";
20
- import "./external-optimizer-process-nnsY5D_4.js";
21
- import "./skillopt-optimization-method-CCtzralq.js";
22
- import "./sequential-D-1PPCmM.js";
1
+ import { s as ValidationError, t as AgentEvalError } from "./errors-BcOs5MKW.js";
2
+ import { a as hashCanonical, i as compareCodeUnits, r as canonicalString } from "./canonical-Dq2hOQ8L.js";
3
+ import { c as agentProfileModelId, o as agentProfileHash, r as verifyCompletion, s as agentProfileId, u as harnessAxisOf } from "./completion-verifier-B_jw6C9p.js";
4
+ import { i as buildAgentProfileCell } from "./agent-profile-cell-B1V1gUZs.js";
5
+ import { c as validateRunRecord, i as modelHasSnapshot, n as UNKNOWN_MODEL, o as runTaskScore } from "./run-record-DhEJgoPz.js";
6
+ import { t as comparePairedArms } from "./paired-arms-Ct4LTKc1.js";
7
+ import { i as pairedBootstrap } from "./mean-BbA_JCzW.js";
8
+ import { o as pairHoldout } from "./statistical-heldout-Bksv92Th.js";
9
+ import { n as contentHash, t as canonicalJson } from "./verdict-cache-CL_7tePD.js";
10
+ import { $ as planCampaignRun, Q as runCampaign, et as resolveRunDir, nt as cellCachePath, rt as computeManifestHash, s as executeOptimizationMethod, u as combineComparisonCosts } from "./llm-judge-C8jMTNNG.js";
11
+ import { n as campaignCellToRunRecord, r as projectCampaignCellQuality, t as campaignCellCostProvenance } from "./run-record-CysKLB93.js";
12
+ import { C as assertCodeSurfaceIdentity, D as surfaceContentHash, M as assertRealBackend, N as summarizeBackendIntegrity, P as assertCampaignDesign, R as campaignScenarioIdentity } from "./campaign-evidence-CQYw8_0H.js";
13
+ import { a as mapConcurrent } from "./journal-CR4QikYp.js";
14
+ import { M as fsCampaignStorage } from "./external-optimizer-subprocess-XIHBOSKt.js";
15
+ import "./pareto-BzsxidFD.js";
16
+ import "./search-ledger-TUvB5gWH.js";
17
+ import "./search-summary-DQIvJsSB.js";
18
+ import "./external-optimizer-process-KVFGvYX1.js";
19
+ import "./skillopt-optimization-method-kyL94-ri.js";
20
+ import "./sequential-CimQrbjv.js";
23
21
  import { createHash } from "node:crypto";
24
- import { closeSync, constants, existsSync, fstatSync, lstatSync, mkdirSync, mkdtempSync, openSync, readFileSync, readSync, readdirSync, readlinkSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
22
+ import { closeSync, constants, existsSync, fstatSync, lstatSync, mkdirSync, mkdtempSync, openSync, readFileSync, readSync, readdirSync, readlinkSync, realpathSync, rmSync, statSync } from "node:fs";
25
23
  import { z } from "zod";
26
24
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
27
25
  import { devNull, tmpdir } from "node:os";
28
26
  import { execFileSync } from "node:child_process";
29
- //#region src/campaign/analyst-surface.ts
30
- function buildTraceAnalystSurfaceDispatch(options) {
31
- return async (surface, scenario, context) => {
32
- if (typeof surface !== "string") throw new TypeError(`buildTraceAnalystSurfaceDispatch requires a string prompt, received ${surface.kind}`);
33
- return options.analyze({
34
- instructions: surface,
35
- traceStore: scenario.traceStore,
36
- runId: `${context.cellId}:${scenario.id}`,
37
- signal: context.signal
38
- });
39
- };
40
- }
41
- function traceAnalystQualityJudge() {
42
- return {
43
- name: "trace-analyst-quality",
44
- judgeVersion: "agent-eval:trace-analyst-quality:v3",
45
- dimensions: [
46
- {
47
- key: "issue_recall",
48
- description: "share of labeled issues found"
49
- },
50
- {
51
- key: "finding_precision",
52
- description: "share of findings tied to a labeled issue"
53
- },
54
- {
55
- key: "f1",
56
- description: "harmonic mean of issue recall and finding precision"
57
- },
58
- {
59
- key: "critical_step_accuracy",
60
- description: "share of labeled causal steps cited"
61
- },
62
- {
63
- key: "citation_coverage",
64
- description: "share of findings with evidence citations"
65
- },
66
- {
67
- key: "citation_label_agreement",
68
- description: "share of citations matching a labeled case location"
69
- },
70
- {
71
- key: "clean",
72
- description: "1 when a clean case produces no findings"
73
- }
74
- ],
75
- appliesTo: (scenario) => scenario.kind === "trace-analyst" && scenario.labelState !== "unlabeled",
76
- score({ artifact, scenario }) {
77
- assertScorableScenario(scenario);
78
- return traceAnalystJudgeScore(scoreAnalystFindings({
79
- id: scenario.id,
80
- expectedIssues: scenario.expectedIssues,
81
- labeledEvidence: scenario.labeledEvidence
82
- }, artifact.findings));
83
- }
84
- };
85
- }
86
- function assertScorableScenario(scenario) {
87
- if (scenario.labelState === "unlabeled") throw new TypeError(`trace analyst scenario '${scenario.id}' has no quality labels`);
88
- if (scenario.labelState === "positive" && scenario.expectedIssues.length === 0) throw new TypeError(`positive trace analyst scenario '${scenario.id}' requires expected issues`);
89
- if (scenario.labelState === "trusted-negative" && scenario.expectedIssues.length > 0) throw new TypeError(`trusted-negative trace analyst scenario '${scenario.id}' cannot contain expected issues`);
90
- }
91
- function traceAnalystJudgeScore(score) {
92
- const dimensions = {
93
- issue_recall: score.issueRecall,
94
- finding_precision: score.findingPrecision,
95
- f1: score.f1,
96
- clean: score.predictionOnLabelEmptyCase ? 0 : 1
97
- };
98
- if (score.criticalStepAccuracy !== null) dimensions.critical_step_accuracy = score.criticalStepAccuracy;
99
- if (score.citationCoverage !== null) dimensions.citation_coverage = score.citationCoverage;
100
- if (score.citationLabelAgreement !== null) dimensions.citation_label_agreement = score.citationLabelAgreement;
101
- const notes = [
102
- `${score.matchedIssueIds.length}/${score.expectedIssueCount} issues found`,
103
- `${score.supportedFindingIndexes.length}/${score.supportedFindingIndexes.length + score.unsupportedFindingIndexes.length} findings supported`,
104
- `${score.unlabeledEvidence.length} citations outside labeled locations`
105
- ].join("; ");
106
- return {
107
- dimensions,
108
- composite: score.criticalStepAccuracy === null ? score.f1 : (score.f1 + score.criticalStepAccuracy) / 2,
109
- notes
110
- };
111
- }
112
- //#endregion
113
27
  //#region src/campaign/cross-surface-context.ts
114
28
  function validateCrossSurfaceInput(input) {
115
29
  assertNonEmptyUnique(input.taskOrder, "taskOrder");
@@ -283,92 +197,7 @@ function arraysEqual(left, right) {
283
197
  return left.length === right.length && left.every((value, index) => value === right[index]);
284
198
  }
285
199
  //#endregion
286
- //#region src/campaign/cross-surface-interaction.ts
287
- /**
288
- * Task-paired comparison and deterministic selection for independently
289
- * proposed agent surfaces. Unlike factorial cell-mean attribution, every
290
- * benefit, regression, and interaction remains attached to its task row.
291
- */
292
- /**
293
- * Build the complete cross-surface evidence matrix and derive all three frozen
294
- * candidates. The task/candidate/component orders are part of the input so
295
- * neither insertion order nor an after-the-fact tie-break can change a result.
296
- */
297
- function analyzeCrossSurfaceInteractions(input) {
298
- const context = validateCrossSurfaceInput(input);
299
- const baseline = context.candidateById.get(input.baselineCandidateId);
300
- const preliminary = context.candidates.map((candidate) => summarizeCandidate(context, candidate, baseline));
301
- const baselineSummary = preliminary.find((summary) => summary.candidate.candidateId === input.baselineCandidateId);
302
- const summaries = preliminary.map((summary) => summary.candidate.candidateId === input.baselineCandidateId ? summary : {
303
- ...summary,
304
- eligibility: candidateEligibility(context, summary, baselineSummary)
305
- });
306
- const summaryById = new Map(summaries.map((summary) => [summary.candidate.candidateId, summary]));
307
- const eligibleSingles = rankedEligibleSingles(context, summaryById);
308
- const interactionReadySingles = rankedInteractionReadySingles(context, summaryById);
309
- const pairwise = buildPairwise(context, summaryById, interactionReadySingles, baselineSummary);
310
- const selections = selectCandidates(context, summaryById, eligibleSingles, interactionReadySingles, pairwise);
311
- const rows = context.candidates.flatMap((candidate) => input.taskOrder.map((taskId) => context.rowsByCandidate.get(candidate.candidateId).get(taskId)));
312
- return {
313
- taskIds: [...input.taskOrder],
314
- componentIds: [...input.componentOrder],
315
- candidateIds: [...input.candidateOrder],
316
- costMetrics: [...input.costMetricOrder],
317
- rows,
318
- missingAttempts: rows.filter((row) => row.completeness === "missing"),
319
- invalidAttempts: rows.filter((row) => row.completeness === "invalid"),
320
- candidates: summaries,
321
- pairwise,
322
- selections
323
- };
324
- }
325
- function summarizeCandidate(context, candidate, baseline) {
326
- const rows = crossSurfaceRowsFor(context, candidate.candidateId);
327
- const outcome = summarizeOutcome(context, rows, crossSurfaceRowsFor(context, baseline.candidateId), candidate.candidateId === baseline.candidateId);
328
- const completeScores = rows.filter((row) => row.completeness === "complete").map((row) => row.score);
329
- const costs = Object.fromEntries(context.input.costMetricOrder.map((metric) => [metric, distribution(rows.map((row) => row.cost[metric]))]));
330
- return {
331
- candidate,
332
- outcome,
333
- score: completeScores.length === 0 ? null : distribution(completeScores),
334
- costs,
335
- firing: summarizeCandidateEvidence(rows, candidate.componentIds, "fired"),
336
- effect: summarizeCandidateEvidence(rows, candidate.componentIds, "effectObserved"),
337
- comparisonToBaseline: candidate.candidateId === baseline.candidateId ? null : pairedComparison(context, baseline.candidateId, candidate.candidateId),
338
- eligibility: null
339
- };
340
- }
341
- function summarizeOutcome(context, rows, baselineRows, isBaseline) {
342
- const resolvedTaskIds = [];
343
- const failedTaskIds = [];
344
- const missingTaskIds = [];
345
- const invalidTaskIds = [];
346
- const benefitTaskIds = [];
347
- const regressionTaskIds = [];
348
- const comparisonMissingTaskIds = [];
349
- for (let index = 0; index < context.input.taskOrder.length; index++) {
350
- const row = rows[index];
351
- const baseline = baselineRows[index];
352
- if (row.completeness === "missing") missingTaskIds.push(row.taskId);
353
- else if (row.completeness === "invalid") invalidTaskIds.push(row.taskId);
354
- else if (row.pass) resolvedTaskIds.push(row.taskId);
355
- else failedTaskIds.push(row.taskId);
356
- if (isBaseline) continue;
357
- if (row.completeness !== "complete" || baseline.completeness !== "complete") comparisonMissingTaskIds.push(row.taskId);
358
- else if (row.pass && !baseline.pass) benefitTaskIds.push(row.taskId);
359
- else if (!row.pass && baseline.pass) regressionTaskIds.push(row.taskId);
360
- }
361
- return {
362
- resolvedTaskIds,
363
- failedTaskIds,
364
- missingTaskIds,
365
- invalidTaskIds,
366
- benefitTaskIds,
367
- regressionTaskIds,
368
- comparisonMissingTaskIds,
369
- netBenefit: benefitTaskIds.length - regressionTaskIds.length
370
- };
371
- }
200
+ //#region src/campaign/cross-surface-evidence.ts
372
201
  function summarizeCandidateEvidence(rows, componentIds, field) {
373
202
  if (componentIds.length === 0) return {
374
203
  byComponent: [],
@@ -413,49 +242,161 @@ function summarizeCandidateEvidence(rows, componentIds, field) {
413
242
  unobservedTaskIds
414
243
  };
415
244
  }
416
- function candidateEligibility(context, summary, baseline) {
417
- const reasons = [];
418
- if (summary.outcome.missingTaskIds.length > 0) reasons.push("missing_attempt");
419
- if (summary.outcome.invalidTaskIds.length > 0) reasons.push("invalid_attempt");
420
- if (summary.outcome.comparisonMissingTaskIds.length > 0) reasons.push("baseline_outcome_missing");
421
- if (summary.outcome.benefitTaskIds.length <= summary.outcome.regressionTaskIds.length) reasons.push("benefit_not_greater_than_regression");
422
- appendEvidenceEligibilityReasons(reasons, summary.firing, context.input.selection.minimumFiringTasks, context.input.selection.requireObservedFiring, "firing_below_minimum", "firing_unobserved");
423
- appendEvidenceEligibilityReasons(reasons, summary.effect, context.input.selection.minimumEffectTasks, context.input.selection.requireObservedEffect, "effect_below_minimum", "effect_unobserved");
424
- if (!withinCostLimits(context, summary, baseline)) reasons.push("cost_limit_exceeded");
245
+ function summarizePairEvidence(rows, leftComponentId, rightComponentId, field) {
246
+ const bothTaskIds = [];
247
+ const leftOnlyTaskIds = [];
248
+ const rightOnlyTaskIds = [];
249
+ const neitherTaskIds = [];
250
+ const unobservedTaskIds = [];
251
+ for (const row of rows) {
252
+ const left = evidenceValue(row, leftComponentId, field);
253
+ const right = evidenceValue(row, rightComponentId, field);
254
+ if (left === null || right === null) unobservedTaskIds.push(row.taskId);
255
+ else if (left && right) bothTaskIds.push(row.taskId);
256
+ else if (left) leftOnlyTaskIds.push(row.taskId);
257
+ else if (right) rightOnlyTaskIds.push(row.taskId);
258
+ else neitherTaskIds.push(row.taskId);
259
+ }
425
260
  return {
426
- eligible: reasons.length === 0,
427
- reasons: unique(reasons)
261
+ bothTaskIds,
262
+ leftOnlyTaskIds,
263
+ rightOnlyTaskIds,
264
+ neitherTaskIds,
265
+ unobservedTaskIds
428
266
  };
429
267
  }
430
- function appendEvidenceEligibilityReasons(reasons, evidence, minimum, requireObserved, belowReason, unobservedReason) {
268
+ function evidenceValue(row, componentId, field) {
269
+ return row.componentEvidence.find((evidence) => evidence.componentId === componentId)[field];
270
+ }
271
+ function appendEvidenceReasons(reasons, evidence, minimum, requireObserved, belowReason, unobservedReason) {
431
272
  if (evidence.byComponent.some((component) => component.observedTaskIds.length < minimum)) reasons.push(belowReason);
432
273
  if (requireObserved && evidence.byComponent.some((component) => component.unobservedTaskIds.length > 0)) reasons.push(unobservedReason);
433
274
  }
434
- function rankedEligibleSingles(context, summaryById) {
435
- return [...context.singleByComponent.values()].map((candidate) => summaryById.get(candidate.candidateId)).filter((summary) => summary.eligibility?.eligible).sort((left, right) => compareSingleSummaries(context, left, right));
436
- }
275
+ //#endregion
276
+ //#region src/campaign/cross-surface-interaction.ts
437
277
  /**
438
- * A neutral constituent may seed a composition when it has complete, bounded,
439
- * observed evidence and causes no baseline regression. Individual benefit is
440
- * deliberately left to the best-single arm rather than used as a pair gate.
278
+ * Task-paired comparison and deterministic selection for independently
279
+ * proposed agent surfaces. Unlike factorial cell-mean attribution, every
280
+ * benefit, regression, and interaction remains attached to its task row.
441
281
  */
442
- function rankedInteractionReadySingles(context, summaryById) {
443
- return [...context.singleByComponent.values()].map((candidate) => summaryById.get(candidate.candidateId)).filter((summary) => summary.outcome.regressionTaskIds.length === 0 && summary.eligibility?.reasons.every((reason) => reason === "benefit_not_greater_than_regression")).sort((left, right) => compareSingleSummaries(context, left, right));
282
+ /**
283
+ * Build the complete cross-surface evidence matrix and derive all three frozen
284
+ * candidates. The task/candidate/component orders are part of the input so
285
+ * neither insertion order nor an after-the-fact tie-break can change a result.
286
+ */
287
+ function analyzeCrossSurfaceInteractions(input) {
288
+ const context = validateCrossSurfaceInput(input);
289
+ const baseline = context.candidateById.get(input.baselineCandidateId);
290
+ const preliminary = context.candidates.map((candidate) => summarizeCandidate(context, candidate, baseline));
291
+ const baselineSummary = preliminary.find((summary) => summary.candidate.candidateId === input.baselineCandidateId);
292
+ const summaries = preliminary.map((summary) => summary.candidate.candidateId === input.baselineCandidateId ? summary : {
293
+ ...summary,
294
+ eligibility: candidateEligibility(context, summary, baselineSummary)
295
+ });
296
+ const summaryById = new Map(summaries.map((summary) => [summary.candidate.candidateId, summary]));
297
+ const eligibleSingles = rankedEligibleSingles(context, summaryById);
298
+ const interactionReadySingles = rankedInteractionReadySingles(context, summaryById);
299
+ const pairwise = buildPairwise(context, summaryById, interactionReadySingles, baselineSummary);
300
+ const selections = selectCandidates(context, summaryById, eligibleSingles, interactionReadySingles, pairwise);
301
+ const rows = context.candidates.flatMap((candidate) => input.taskOrder.map((taskId) => context.rowsByCandidate.get(candidate.candidateId).get(taskId)));
302
+ return {
303
+ taskIds: [...input.taskOrder],
304
+ componentIds: [...input.componentOrder],
305
+ candidateIds: [...input.candidateOrder],
306
+ costMetrics: [...input.costMetricOrder],
307
+ rows,
308
+ missingAttempts: rows.filter((row) => row.completeness === "missing"),
309
+ invalidAttempts: rows.filter((row) => row.completeness === "invalid"),
310
+ candidates: summaries,
311
+ pairwise,
312
+ selections
313
+ };
444
314
  }
445
- function compareSingleSummaries(context, left, right) {
446
- const byNetBenefit = right.outcome.netBenefit - left.outcome.netBenefit;
447
- if (byNetBenefit !== 0) return byNetBenefit;
448
- const byBenefit = right.outcome.benefitTaskIds.length - left.outcome.benefitTaskIds.length;
449
- if (byBenefit !== 0) return byBenefit;
450
- const byRegression = left.outcome.regressionTaskIds.length - right.outcome.regressionTaskIds.length;
451
- if (byRegression !== 0) return byRegression;
452
- for (const metric of context.input.costMetricOrder) {
453
- const byCost = left.costs[metric].median - right.costs[metric].median;
454
- if (byCost !== 0) return byCost;
315
+ function compareCandidates(context, summaryById, comparatorCandidateId, treatmentCandidateId) {
316
+ const winsTaskIds = [];
317
+ const regressionTaskIds = [];
318
+ const missingTaskIds = [];
319
+ for (const taskId of context.input.taskOrder) {
320
+ const comparator = crossSurfaceRowFor(context, comparatorCandidateId, taskId);
321
+ const treatment = crossSurfaceRowFor(context, treatmentCandidateId, taskId);
322
+ if (comparator.completeness !== "complete" || treatment.completeness !== "complete") missingTaskIds.push(taskId);
323
+ else if (treatment.pass && !comparator.pass) winsTaskIds.push(taskId);
324
+ else if (!treatment.pass && comparator.pass) regressionTaskIds.push(taskId);
455
325
  }
456
- const byBytes = left.candidate.artifactBytes - right.candidate.artifactBytes;
457
- if (byBytes !== 0) return byBytes;
458
- return context.candidateIndex.get(left.candidate.candidateId) - context.candidateIndex.get(right.candidate.candidateId);
326
+ return {
327
+ comparatorCandidateId,
328
+ treatmentCandidateId,
329
+ winsTaskIds,
330
+ regressionTaskIds,
331
+ missingTaskIds,
332
+ paired: pairedComparison(context, comparatorCandidateId, treatmentCandidateId),
333
+ relativeCost: relativeCosts(context, summaryById.get(treatmentCandidateId), summaryById.get(comparatorCandidateId))
334
+ };
335
+ }
336
+ function pairedComparison(context, comparatorCandidateId, treatmentCandidateId) {
337
+ const rows = [];
338
+ for (const taskId of context.input.taskOrder) {
339
+ rows.push(toPairedArmRow(context, crossSurfaceRowFor(context, comparatorCandidateId, taskId)));
340
+ rows.push(toPairedArmRow(context, crossSurfaceRowFor(context, treatmentCandidateId, taskId)));
341
+ }
342
+ return comparePairedArms(rows, {
343
+ baselineArm: comparatorCandidateId,
344
+ treatmentArm: treatmentCandidateId,
345
+ metricNames: ["score", ...context.input.costMetricOrder],
346
+ bootstrap: {
347
+ ...context.input.bootstrap,
348
+ statistic: "mean"
349
+ }
350
+ });
351
+ }
352
+ function toPairedArmRow(context, row) {
353
+ const metrics = Object.fromEntries(context.input.costMetricOrder.map((metric) => [metric, row.cost[metric]]));
354
+ if (row.completeness === "complete") metrics.score = row.score;
355
+ return {
356
+ pairKey: row.taskId,
357
+ arm: row.candidateId,
358
+ ...row.completeness === "complete" ? { pass: row.pass } : {},
359
+ metrics
360
+ };
361
+ }
362
+ function relativeCosts(context, treatment, comparator) {
363
+ return Object.fromEntries(context.input.costMetricOrder.map((metric) => {
364
+ const treatmentMedian = treatment.costs[metric].median;
365
+ const comparatorMedian = comparator.costs[metric].median;
366
+ return [metric, {
367
+ treatmentMedian,
368
+ comparatorMedian,
369
+ medianDelta: treatmentMedian - comparatorMedian,
370
+ medianRatio: comparatorMedian === 0 ? treatmentMedian === 0 ? 1 : null : treatmentMedian / comparatorMedian
371
+ }];
372
+ }));
373
+ }
374
+ function withinCostLimits(context, treatment, baseline) {
375
+ const relative = relativeCosts(context, treatment, baseline);
376
+ return Object.entries(context.input.selection.maximumMedianCostRatioToBaseline).every(([metric, limit]) => {
377
+ const ratio = relative[metric].medianRatio;
378
+ return ratio !== null && ratio <= limit;
379
+ });
380
+ }
381
+ function distribution(values) {
382
+ const sorted = [...values].sort((left, right) => left - right);
383
+ const total = sorted.reduce((sum, value) => sum + value, 0);
384
+ const middle = Math.floor(sorted.length / 2);
385
+ const median = sorted.length % 2 === 1 ? sorted[middle] : (sorted[middle - 1] + sorted[middle]) / 2;
386
+ return {
387
+ n: sorted.length,
388
+ min: sorted[0],
389
+ median,
390
+ mean: total / sorted.length,
391
+ max: sorted[sorted.length - 1],
392
+ total
393
+ };
394
+ }
395
+ function meanOrNull$1(values) {
396
+ return values.length === 0 ? null : values.reduce((sum, value) => sum + value, 0) / values.length;
397
+ }
398
+ function unique(values) {
399
+ return [...new Set(values)];
459
400
  }
460
401
  function buildPairwise(context, summaryById, interactionReadySingles, baseline) {
461
402
  const interactionReadyIds = new Set(interactionReadySingles.map((summary) => summary.candidate.candidateId));
@@ -682,8 +623,8 @@ function evaluateAddition(context, summaryById, pairByComponents, baseline, curr
682
623
  const comparison = compareCandidates(context, summaryById, current.candidate.candidateId, bundle.candidateId);
683
624
  if (comparison.winsTaskIds.length === 0) reasons.push("no_incremental_resolution");
684
625
  if (comparison.regressionTaskIds.length > 0) reasons.push("incremental_regression");
685
- appendBundleEvidenceReasons(reasons, bundleSummary.firing, context.input.selection.minimumFiringTasks, context.input.selection.requireObservedFiring, "firing_below_minimum", "firing_unobserved");
686
- appendBundleEvidenceReasons(reasons, bundleSummary.effect, context.input.selection.minimumEffectTasks, context.input.selection.requireObservedEffect, "effect_below_minimum", "effect_unobserved");
626
+ appendEvidenceReasons(reasons, bundleSummary.firing, context.input.selection.minimumFiringTasks, context.input.selection.requireObservedFiring, "firing_below_minimum", "firing_unobserved");
627
+ appendEvidenceReasons(reasons, bundleSummary.effect, context.input.selection.minimumEffectTasks, context.input.selection.requireObservedEffect, "effect_below_minimum", "effect_unobserved");
687
628
  if (!withinCostLimits(context, bundleSummary, baseline)) reasons.push("cost_limit_exceeded");
688
629
  return {
689
630
  additionCandidateId: addition.candidate.candidateId,
@@ -708,134 +649,105 @@ function emptyAdditionDecision(addition, additionComponentId, reasons) {
708
649
  eligible: false,
709
650
  selected: false,
710
651
  reasons: unique(reasons)
711
- };
712
- }
713
- function appendBundleEvidenceReasons(reasons, evidence, minimum, requireObserved, belowReason, unobservedReason) {
714
- if (evidence.byComponent.some((component) => component.observedTaskIds.length < minimum)) reasons.push(belowReason);
715
- if (requireObserved && evidence.byComponent.some((component) => component.unobservedTaskIds.length > 0)) reasons.push(unobservedReason);
716
- }
717
- function compareAdditionDecisions(context, summaryById, left, right) {
718
- const byWins = right.incrementalResolutionTaskIds.length - left.incrementalResolutionTaskIds.length;
719
- if (byWins !== 0) return byWins;
720
- for (const metric of context.input.costMetricOrder) {
721
- const byCost = left.incrementalMedianCost[metric] - right.incrementalMedianCost[metric];
722
- if (byCost !== 0) return byCost;
723
- }
724
- const byBytes = summaryById.get(left.additionCandidateId).candidate.artifactBytes - summaryById.get(right.additionCandidateId).candidate.artifactBytes;
725
- if (byBytes !== 0) return byBytes;
726
- return context.candidateIndex.get(left.additionCandidateId) - context.candidateIndex.get(right.additionCandidateId);
727
- }
728
- function compareCandidates(context, summaryById, comparatorCandidateId, treatmentCandidateId) {
729
- const winsTaskIds = [];
730
- const regressionTaskIds = [];
731
- const missingTaskIds = [];
732
- for (const taskId of context.input.taskOrder) {
733
- const comparator = crossSurfaceRowFor(context, comparatorCandidateId, taskId);
734
- const treatment = crossSurfaceRowFor(context, treatmentCandidateId, taskId);
735
- if (comparator.completeness !== "complete" || treatment.completeness !== "complete") missingTaskIds.push(taskId);
736
- else if (treatment.pass && !comparator.pass) winsTaskIds.push(taskId);
737
- else if (!treatment.pass && comparator.pass) regressionTaskIds.push(taskId);
738
- }
739
- return {
740
- comparatorCandidateId,
741
- treatmentCandidateId,
742
- winsTaskIds,
743
- regressionTaskIds,
744
- missingTaskIds,
745
- paired: pairedComparison(context, comparatorCandidateId, treatmentCandidateId),
746
- relativeCost: relativeCosts(context, summaryById.get(treatmentCandidateId), summaryById.get(comparatorCandidateId))
747
- };
748
- }
749
- function pairedComparison(context, comparatorCandidateId, treatmentCandidateId) {
750
- const rows = [];
751
- for (const taskId of context.input.taskOrder) {
752
- rows.push(toPairedArmRow(context, crossSurfaceRowFor(context, comparatorCandidateId, taskId)));
753
- rows.push(toPairedArmRow(context, crossSurfaceRowFor(context, treatmentCandidateId, taskId)));
652
+ };
653
+ }
654
+ function compareAdditionDecisions(context, summaryById, left, right) {
655
+ const byWins = right.incrementalResolutionTaskIds.length - left.incrementalResolutionTaskIds.length;
656
+ if (byWins !== 0) return byWins;
657
+ for (const metric of context.input.costMetricOrder) {
658
+ const byCost = left.incrementalMedianCost[metric] - right.incrementalMedianCost[metric];
659
+ if (byCost !== 0) return byCost;
754
660
  }
755
- return comparePairedArms(rows, {
756
- baselineArm: comparatorCandidateId,
757
- treatmentArm: treatmentCandidateId,
758
- metricNames: ["score", ...context.input.costMetricOrder],
759
- bootstrap: {
760
- ...context.input.bootstrap,
761
- statistic: "mean"
762
- }
763
- });
661
+ const byBytes = summaryById.get(left.additionCandidateId).candidate.artifactBytes - summaryById.get(right.additionCandidateId).candidate.artifactBytes;
662
+ if (byBytes !== 0) return byBytes;
663
+ return context.candidateIndex.get(left.additionCandidateId) - context.candidateIndex.get(right.additionCandidateId);
764
664
  }
765
- function toPairedArmRow(context, row) {
766
- const metrics = Object.fromEntries(context.input.costMetricOrder.map((metric) => [metric, row.cost[metric]]));
767
- if (row.completeness === "complete") metrics.score = row.score;
665
+ function summarizeCandidate(context, candidate, baseline) {
666
+ const rows = crossSurfaceRowsFor(context, candidate.candidateId);
667
+ const outcome = summarizeOutcome(context, rows, crossSurfaceRowsFor(context, baseline.candidateId), candidate.candidateId === baseline.candidateId);
668
+ const completeScores = rows.filter((row) => row.completeness === "complete").map((row) => row.score);
669
+ const costs = Object.fromEntries(context.input.costMetricOrder.map((metric) => [metric, distribution(rows.map((row) => row.cost[metric]))]));
768
670
  return {
769
- pairKey: row.taskId,
770
- arm: row.candidateId,
771
- ...row.completeness === "complete" ? { pass: row.pass } : {},
772
- metrics
671
+ candidate,
672
+ outcome,
673
+ score: completeScores.length === 0 ? null : distribution(completeScores),
674
+ costs,
675
+ firing: summarizeCandidateEvidence(rows, candidate.componentIds, "fired"),
676
+ effect: summarizeCandidateEvidence(rows, candidate.componentIds, "effectObserved"),
677
+ comparisonToBaseline: candidate.candidateId === baseline.candidateId ? null : pairedComparison(context, baseline.candidateId, candidate.candidateId),
678
+ eligibility: null
773
679
  };
774
680
  }
775
- function summarizePairEvidence(rows, leftComponentId, rightComponentId, field) {
776
- const bothTaskIds = [];
777
- const leftOnlyTaskIds = [];
778
- const rightOnlyTaskIds = [];
779
- const neitherTaskIds = [];
780
- const unobservedTaskIds = [];
781
- for (const row of rows) {
782
- const left = evidenceValue(row, leftComponentId, field);
783
- const right = evidenceValue(row, rightComponentId, field);
784
- if (left === null || right === null) unobservedTaskIds.push(row.taskId);
785
- else if (left && right) bothTaskIds.push(row.taskId);
786
- else if (left) leftOnlyTaskIds.push(row.taskId);
787
- else if (right) rightOnlyTaskIds.push(row.taskId);
788
- else neitherTaskIds.push(row.taskId);
681
+ function summarizeOutcome(context, rows, baselineRows, isBaseline) {
682
+ const resolvedTaskIds = [];
683
+ const failedTaskIds = [];
684
+ const missingTaskIds = [];
685
+ const invalidTaskIds = [];
686
+ const benefitTaskIds = [];
687
+ const regressionTaskIds = [];
688
+ const comparisonMissingTaskIds = [];
689
+ for (let index = 0; index < context.input.taskOrder.length; index++) {
690
+ const row = rows[index];
691
+ const baseline = baselineRows[index];
692
+ if (row.completeness === "missing") missingTaskIds.push(row.taskId);
693
+ else if (row.completeness === "invalid") invalidTaskIds.push(row.taskId);
694
+ else if (row.pass) resolvedTaskIds.push(row.taskId);
695
+ else failedTaskIds.push(row.taskId);
696
+ if (isBaseline) continue;
697
+ if (row.completeness !== "complete" || baseline.completeness !== "complete") comparisonMissingTaskIds.push(row.taskId);
698
+ else if (row.pass && !baseline.pass) benefitTaskIds.push(row.taskId);
699
+ else if (!row.pass && baseline.pass) regressionTaskIds.push(row.taskId);
789
700
  }
790
701
  return {
791
- bothTaskIds,
792
- leftOnlyTaskIds,
793
- rightOnlyTaskIds,
794
- neitherTaskIds,
795
- unobservedTaskIds
702
+ resolvedTaskIds,
703
+ failedTaskIds,
704
+ missingTaskIds,
705
+ invalidTaskIds,
706
+ benefitTaskIds,
707
+ regressionTaskIds,
708
+ comparisonMissingTaskIds,
709
+ netBenefit: benefitTaskIds.length - regressionTaskIds.length
796
710
  };
797
711
  }
798
- function relativeCosts(context, treatment, comparator) {
799
- return Object.fromEntries(context.input.costMetricOrder.map((metric) => {
800
- const treatmentMedian = treatment.costs[metric].median;
801
- const comparatorMedian = comparator.costs[metric].median;
802
- return [metric, {
803
- treatmentMedian,
804
- comparatorMedian,
805
- medianDelta: treatmentMedian - comparatorMedian,
806
- medianRatio: comparatorMedian === 0 ? treatmentMedian === 0 ? 1 : null : treatmentMedian / comparatorMedian
807
- }];
808
- }));
809
- }
810
- function withinCostLimits(context, treatment, baseline) {
811
- const relative = relativeCosts(context, treatment, baseline);
812
- return Object.entries(context.input.selection.maximumMedianCostRatioToBaseline).every(([metric, limit]) => {
813
- const ratio = relative[metric].medianRatio;
814
- return ratio !== null && ratio <= limit;
815
- });
816
- }
817
- function distribution(values) {
818
- const sorted = [...values].sort((left, right) => left - right);
819
- const total = sorted.reduce((sum, value) => sum + value, 0);
820
- const middle = Math.floor(sorted.length / 2);
821
- const median = sorted.length % 2 === 1 ? sorted[middle] : (sorted[middle - 1] + sorted[middle]) / 2;
712
+ function candidateEligibility(context, summary, baseline) {
713
+ const reasons = [];
714
+ if (summary.outcome.missingTaskIds.length > 0) reasons.push("missing_attempt");
715
+ if (summary.outcome.invalidTaskIds.length > 0) reasons.push("invalid_attempt");
716
+ if (summary.outcome.comparisonMissingTaskIds.length > 0) reasons.push("baseline_outcome_missing");
717
+ if (summary.outcome.benefitTaskIds.length <= summary.outcome.regressionTaskIds.length) reasons.push("benefit_not_greater_than_regression");
718
+ appendEvidenceReasons(reasons, summary.firing, context.input.selection.minimumFiringTasks, context.input.selection.requireObservedFiring, "firing_below_minimum", "firing_unobserved");
719
+ appendEvidenceReasons(reasons, summary.effect, context.input.selection.minimumEffectTasks, context.input.selection.requireObservedEffect, "effect_below_minimum", "effect_unobserved");
720
+ if (!withinCostLimits(context, summary, baseline)) reasons.push("cost_limit_exceeded");
822
721
  return {
823
- n: sorted.length,
824
- min: sorted[0],
825
- median,
826
- mean: total / sorted.length,
827
- max: sorted[sorted.length - 1],
828
- total
722
+ eligible: reasons.length === 0,
723
+ reasons: unique(reasons)
829
724
  };
830
725
  }
831
- function evidenceValue(row, componentId, field) {
832
- return row.componentEvidence.find((evidence) => evidence.componentId === componentId)[field];
726
+ function rankedEligibleSingles(context, summaryById) {
727
+ return [...context.singleByComponent.values()].map((candidate) => summaryById.get(candidate.candidateId)).filter((summary) => summary.eligibility?.eligible).sort((left, right) => compareSingleSummaries(context, left, right));
833
728
  }
834
- function meanOrNull$1(values) {
835
- return values.length === 0 ? null : values.reduce((sum, value) => sum + value, 0) / values.length;
729
+ /**
730
+ * A neutral constituent may seed a composition when it has complete, bounded,
731
+ * observed evidence and causes no baseline regression. Individual benefit is
732
+ * deliberately left to the best-single arm rather than used as a pair gate.
733
+ */
734
+ function rankedInteractionReadySingles(context, summaryById) {
735
+ return [...context.singleByComponent.values()].map((candidate) => summaryById.get(candidate.candidateId)).filter((summary) => summary.outcome.regressionTaskIds.length === 0 && summary.eligibility?.reasons.every((reason) => reason === "benefit_not_greater_than_regression")).sort((left, right) => compareSingleSummaries(context, left, right));
836
736
  }
837
- function unique(values) {
838
- return [...new Set(values)];
737
+ function compareSingleSummaries(context, left, right) {
738
+ const byNetBenefit = right.outcome.netBenefit - left.outcome.netBenefit;
739
+ if (byNetBenefit !== 0) return byNetBenefit;
740
+ const byBenefit = right.outcome.benefitTaskIds.length - left.outcome.benefitTaskIds.length;
741
+ if (byBenefit !== 0) return byBenefit;
742
+ const byRegression = left.outcome.regressionTaskIds.length - right.outcome.regressionTaskIds.length;
743
+ if (byRegression !== 0) return byRegression;
744
+ for (const metric of context.input.costMetricOrder) {
745
+ const byCost = left.costs[metric].median - right.costs[metric].median;
746
+ if (byCost !== 0) return byCost;
747
+ }
748
+ const byBytes = left.candidate.artifactBytes - right.candidate.artifactBytes;
749
+ if (byBytes !== 0) return byBytes;
750
+ return context.candidateIndex.get(left.candidate.candidateId) - context.candidateIndex.get(right.candidate.candidateId);
839
751
  }
840
752
  //#endregion
841
753
  //#region src/campaign/fixtures.ts
@@ -1047,264 +959,6 @@ function neutralizationGate(options) {
1047
959
  };
1048
960
  }
1049
961
  //#endregion
1050
- //#region src/campaign/grounded-reflection.ts
1051
- /**
1052
- * Deterministic per-field diff of call arguments between passing and failing
1053
- * rollouts. A field set by failing rollouts but left unset by passing ones is
1054
- * the classic poison-input signature; a field whose values differ across the
1055
- * split points at the correct value. Feed `text` to the reviser verbatim.
1056
- */
1057
- function rolloutArgumentDiff(rollouts, opts = {}) {
1058
- const passThreshold = opts.passThreshold ?? 1;
1059
- const maxValues = opts.maxValuesPerField ?? 4;
1060
- const collect = (pass) => {
1061
- const byField = /* @__PURE__ */ new Map();
1062
- for (const r of rollouts) {
1063
- if (pass !== r.score >= passThreshold) continue;
1064
- for (const c of r.calls) for (const [k, v] of Object.entries(c.args)) {
1065
- const set = byField.get(k) ?? /* @__PURE__ */ new Set();
1066
- set.add(String(v));
1067
- byField.set(k, set);
1068
- }
1069
- }
1070
- return byField;
1071
- };
1072
- const passing = collect(true);
1073
- const failing = collect(false);
1074
- const lines = [];
1075
- for (const field of /* @__PURE__ */ new Set([...passing.keys(), ...failing.keys()])) {
1076
- const pv = [...passing.get(field) ?? []].slice(0, maxValues);
1077
- const fv = [...failing.get(field) ?? []].slice(0, maxValues);
1078
- const render = (vals) => vals.length ? JSON.stringify(vals) : "NOT SET (omitted)";
1079
- lines.push(` ${field}: passing runs -> ${render(pv)} | failing runs -> ${render(fv)}`);
1080
- }
1081
- const lower = (m) => {
1082
- const out = /* @__PURE__ */ new Set();
1083
- for (const vals of m.values()) for (const v of vals) out.add(v.toLowerCase());
1084
- return out;
1085
- };
1086
- return {
1087
- text: lines.join("\n") || " (no calls observed)",
1088
- passingValues: lower(passing),
1089
- failingValues: lower(failing)
1090
- };
1091
- }
1092
- /**
1093
- * Scan revised artifact text for single-quoted single-word literals (the
1094
- * "use exactly 'new'" pattern) that appear in no passing rollout's argument
1095
- * values. Multi-word quotes pass (they are prose, not prescriptions).
1096
- * Callers should reject on `harmful` (with a bounded retry) and at most log
1097
- * `ungrounded` - see the module header for why the severities differ.
1098
- */
1099
- function classifyUngroundedLiterals(text, diff) {
1100
- const ungrounded = /* @__PURE__ */ new Set();
1101
- for (const m of text.matchAll(/'([a-z][a-z_-]{1,19})'/gi)) {
1102
- const w = m[1].toLowerCase();
1103
- if (!diff.passingValues.has(w)) ungrounded.add(w);
1104
- }
1105
- const all = [...ungrounded];
1106
- return {
1107
- ungrounded: all,
1108
- harmful: all.filter((w) => diff.failingValues.has(w))
1109
- };
1110
- }
1111
- //#endregion
1112
- //#region src/campaign/labeled-store/fs-adapter.ts
1113
- /**
1114
- * Filesystem `LabeledScenarioStore` adapter. The default capture sink for
1115
- * traces + eval artifacts. Production deployments typically swap for a
1116
- * Turso/SQLite adapter (same interface).
1117
- *
1118
- * Records land as one JSONL file per source under `<root>/<source>.jsonl`.
1119
- * Each line is a `LabeledScenarioRecord`. Append-only — no in-place edits.
1120
- *
1121
- * Safety properties enforced at write-time:
1122
- *
1123
- * - **Provenance required**: writes without `source`, `sourceVersionHash`,
1124
- * `capturedAt`, `redactionStatus` are rejected. Closes the alignment
1125
- * reviewer's data-poisoning gap.
1126
- * - **Per-source rate limits**: optional `rateLimitBucket` + `maxWritesPerMinute`
1127
- * stops a single tenant/source from flooding the store.
1128
- *
1129
- * Safety properties enforced at sample-time:
1130
- *
1131
- * - **Required split + capturedBefore**: substrate refuses to sample without
1132
- * an explicit `split` ('train' | 'test') AND a temporal cutoff. Eliminates
1133
- * accidental train/test contamination.
1134
- * - **Default training-source filter**: when the store is sampled with
1135
- * `split: 'train'`, production-trace records are EXCLUDED unless the
1136
- * caller passes `filter.source: 'production-trace'` explicitly. Closes
1137
- * the contamination-by-default gap flagged by the senior eval engineer.
1138
- */
1139
- /** Typed rejection from a labeled-scenario store (bad provenance, rate limit, invalid sample args) — carries a stable string `code`. */
1140
- var LabeledScenarioStoreError = class extends Error {
1141
- code;
1142
- constructor(code, message) {
1143
- super(message);
1144
- this.code = code;
1145
- this.name = "LabeledScenarioStoreError";
1146
- }
1147
- };
1148
- /**
1149
- * Filesystem `LabeledScenarioStore`: appends one JSONL file per source with provenance and
1150
- * rate-limit guards. For tests, local dev, and small workloads — high-throughput lands in Turso.
1151
- */
1152
- var FsLabeledScenarioStore = class {
1153
- options;
1154
- now;
1155
- rateLimits = /* @__PURE__ */ new Map();
1156
- constructor(options) {
1157
- this.options = options;
1158
- if (!existsSync(options.root)) mkdirSync(options.root, { recursive: true });
1159
- this.now = options.now ?? Date.now;
1160
- }
1161
- async observe(write) {
1162
- this.assertProvenance(write);
1163
- this.assertRateLimit(write);
1164
- const record = this.toRecord(write);
1165
- appendLine(this.pathForSource(write.source), `${JSON.stringify(record)}\n`);
1166
- }
1167
- async sample(args) {
1168
- if (!args.split) throw new LabeledScenarioStoreError("split_required", "sample() requires an explicit `split` (train | test) — substrate refuses ambiguous reads");
1169
- if (!args.capturedBefore) throw new LabeledScenarioStoreError("capturedBefore_required", "sample() requires an explicit `capturedBefore` timestamp for temporal-split discipline");
1170
- const all = [];
1171
- for (const source of ALL_SOURCES) {
1172
- if (args.split === "train" && source === "production-trace") {
1173
- if (!sourceFilterContains(args.filter?.source, "production-trace")) continue;
1174
- }
1175
- const path = this.pathForSource(source);
1176
- if (!existsSync(path)) continue;
1177
- const lines = readFileSync(path, "utf8").split("\n").filter(Boolean);
1178
- for (const line of lines) {
1179
- let record;
1180
- try {
1181
- record = JSON.parse(line);
1182
- } catch {
1183
- continue;
1184
- }
1185
- if (!matchesFilter(record, args, source)) continue;
1186
- all.push(record);
1187
- }
1188
- }
1189
- all.sort((a, b) => {
1190
- if (a.capturedAt !== b.capturedAt) return compareCodeUnits(a.capturedAt, b.capturedAt);
1191
- return compareCodeUnits(a.recordHash, b.recordHash);
1192
- });
1193
- return all.slice(0, args.count);
1194
- }
1195
- async size() {
1196
- const bySource = {};
1197
- const byTrust = {
1198
- unverified: 0,
1199
- "verified-signal": 0,
1200
- "human-rated": 0
1201
- };
1202
- let total = 0;
1203
- for (const source of ALL_SOURCES) {
1204
- const path = this.pathForSource(source);
1205
- if (!existsSync(path)) {
1206
- bySource[source] = 0;
1207
- continue;
1208
- }
1209
- const lines = readFileSync(path, "utf8").split("\n").filter(Boolean);
1210
- bySource[source] = lines.length;
1211
- total += lines.length;
1212
- for (const line of lines) {
1213
- let trust = "unverified";
1214
- try {
1215
- trust = JSON.parse(line).labelTrust ?? "unverified";
1216
- } catch {}
1217
- byTrust[trust] += 1;
1218
- }
1219
- }
1220
- return {
1221
- train: total,
1222
- test: total,
1223
- bySource,
1224
- byTrust
1225
- };
1226
- }
1227
- assertProvenance(write) {
1228
- if (!write.source) throw new LabeledScenarioStoreError("missing_source", "LabeledScenarioWrite requires `source`");
1229
- if (!write.sourceVersionHash || write.sourceVersionHash.length === 0) throw new LabeledScenarioStoreError("missing_source_version", "LabeledScenarioWrite requires `sourceVersionHash` (git sha or substrate version)");
1230
- if (!write.capturedAt) throw new LabeledScenarioStoreError("missing_captured_at", "LabeledScenarioWrite requires `capturedAt` ISO timestamp");
1231
- if (!write.redactionStatus) throw new LabeledScenarioStoreError("missing_redaction_status", "LabeledScenarioWrite requires explicit `redactionStatus` — raw / redacted-pii / redacted-secrets / fully-redacted");
1232
- if (!ALL_SOURCES.includes(write.source)) throw new LabeledScenarioStoreError("unknown_source", `LabeledScenarioWrite.source must be one of: ${ALL_SOURCES.join(", ")}`);
1233
- }
1234
- assertRateLimit(write) {
1235
- const cap = this.options.maxWritesPerMinutePerBucket;
1236
- if (!cap || !write.rateLimitBucket) return;
1237
- const now = this.now();
1238
- const windowMs = 6e4;
1239
- let state = this.rateLimits.get(write.rateLimitBucket);
1240
- if (!state || now - state.windowStartMs >= windowMs) {
1241
- state = {
1242
- bucket: write.rateLimitBucket,
1243
- windowStartMs: now,
1244
- count: 0
1245
- };
1246
- this.rateLimits.set(write.rateLimitBucket, state);
1247
- }
1248
- if (state.count >= cap) throw new LabeledScenarioStoreError("rate_limit_exceeded", `LabeledScenarioStore: bucket ${write.rateLimitBucket} exceeded ${cap} writes/min`);
1249
- state.count += 1;
1250
- }
1251
- toRecord(write) {
1252
- const recordHash = sha256$1(JSON.stringify({
1253
- id: write.scenario.id,
1254
- src: write.source,
1255
- at: write.capturedAt,
1256
- ver: write.sourceVersionHash
1257
- }));
1258
- return {
1259
- ...write,
1260
- recordHash,
1261
- split: "train"
1262
- };
1263
- }
1264
- pathForSource(source) {
1265
- return join(this.options.root, `${source}.jsonl`);
1266
- }
1267
- };
1268
- const ALL_SOURCES = [
1269
- "production-trace",
1270
- "eval-run",
1271
- "manual",
1272
- "red-team",
1273
- "synthetic"
1274
- ];
1275
- function sourceFilterContains(filter, needle) {
1276
- if (!filter) return false;
1277
- if (Array.isArray(filter)) return filter.includes(needle);
1278
- return filter === needle;
1279
- }
1280
- function matchesFilter(record, args, source) {
1281
- if (args.split === "train" && record.capturedAt >= args.capturedBefore) return false;
1282
- if (args.split === "test" && record.capturedAt < args.capturedBefore) return false;
1283
- const f = args.filter;
1284
- if (!f) return true;
1285
- if (f.kind && record.scenario.kind !== f.kind) return false;
1286
- if (f.source) {
1287
- if (!(Array.isArray(f.source) ? f.source : [f.source]).includes(source)) return false;
1288
- }
1289
- if (f.minComposite !== void 0 || f.maxComposite !== void 0) {
1290
- const composites = Object.values(record.judgeScores).map((s) => s.composite);
1291
- const max = composites.length === 0 ? 0 : Math.max(...composites);
1292
- if (f.minComposite !== void 0 && max < f.minComposite) return false;
1293
- if (f.maxComposite !== void 0 && max > f.maxComposite) return false;
1294
- }
1295
- if (f.minTrust !== void 0 && labelTrustRank(record.labelTrust) < labelTrustRank(f.minTrust)) return false;
1296
- return true;
1297
- }
1298
- function sha256$1(input) {
1299
- return createHash("sha256").update(input).digest("hex").slice(0, 16);
1300
- }
1301
- function appendLine(path, line) {
1302
- if (existsSync(path)) {
1303
- const existing = readFileSync(path, "utf8");
1304
- writeFileSync(path, existing + line);
1305
- } else writeFileSync(path, line);
1306
- }
1307
- //#endregion
1308
962
  //#region src/campaign/neutralize.ts
1309
963
  /**
1310
964
  * @module
@@ -1444,20 +1098,6 @@ function sequentialOptimizationMethod(options) {
1444
1098
  //#endregion
1445
1099
  //#region src/campaign/presets/playback.ts
1446
1100
  /**
1447
- * Adapt a `PlaybackDriver` into a `runProfileMatrix` dispatch. The artifact the
1448
- * matrix scores is the `ProducedState` extracted from the driver's event
1449
- * stream — grade it with `scoreUserStory` (or a judge wrapping it).
1450
- */
1451
- function makePlaybackDispatch(driver) {
1452
- return async (profile, scenario, ctx) => {
1453
- const events = await driver.run(scenario, {
1454
- ...ctx,
1455
- profile
1456
- });
1457
- return extractProducedState(events);
1458
- };
1459
- }
1460
- /**
1461
1101
  * Score one story's produced state against its requirements. Thin wrapper over
1462
1102
  * `verifyCompletion` that builds the gold from the story and returns a
1463
1103
  * per-requirement PASS/FAIL verdict. `checkCorrectness` is injected — a
@@ -2763,155 +2403,6 @@ function scoreDiscrimination(signals, opts) {
2763
2403
  };
2764
2404
  }).sort(compareDiscrimination);
2765
2405
  }
2766
- /**
2767
- * Select the top-`k` most discriminative scenario ids for a holdout, EXCLUDING
2768
- * fully saturated ties when enough non-tied scenarios exist (a tie in the
2769
- * holdout wastes a paired cell).
2770
- *
2771
- * Prefers non-tied scenarios; if fewer than `k` non-tied exist, fills with the
2772
- * least-saturated tied ones (tied scenarios are already ordered least-saturated
2773
- * first by `meanScore` asc). Deterministic. Throws if `k < 1`. If
2774
- * `signals.length <= k`, returns all ids in discrimination order.
2775
- */
2776
- function selectDiscriminative(signals, k, opts) {
2777
- if (k < 1) throw new Error(`selectDiscriminative: k must be >= 1 (got ${k})`);
2778
- const ranked = scoreDiscrimination(signals, opts);
2779
- if (ranked.length <= k) return ranked.map((s) => s.scenarioId);
2780
- const nonTied = ranked.filter((s) => !s.tied);
2781
- if (nonTied.length >= k) return nonTied.slice(0, k).map((s) => s.scenarioId);
2782
- const fill = ranked.filter((s) => s.tied).slice(0, k - nonTied.length);
2783
- return [...nonTied, ...fill].map((s) => s.scenarioId);
2784
- }
2785
- //#endregion
2786
- //#region src/campaign/upstream-evaluators.ts
2787
- function phoenixEvaluatorJudge(evaluator, options) {
2788
- if ((evaluator.optimizationDirection === "MINIMIZE" || evaluator.optimizationDirection === "NEUTRAL") && !options.toComposite) throw new TypeError(`phoenixEvaluatorJudge requires toComposite for a ${evaluator.optimizationDirection} evaluator`);
2789
- const paidCall = validatePaidEvaluation(evaluator.name, evaluator.kind, options.paidCall);
2790
- return upstreamJudge({
2791
- name: options.name ?? evaluator.name,
2792
- dimension: options.dimension,
2793
- judgeVersion: options.judgeVersion,
2794
- appliesTo: options.appliesTo,
2795
- toComposite: options.toComposite
2796
- }, async (input) => {
2797
- const result = await runUpstreamEvaluation({
2798
- name: evaluator.name,
2799
- kind: evaluator.kind,
2800
- signal: input.signal,
2801
- costLedger: input.costLedger,
2802
- costPhase: input.costPhase,
2803
- costTags: input.costTags,
2804
- scenarioId: input.scenario.id,
2805
- paidCall,
2806
- execute: (context) => evaluator.evaluate(options.mapInput({
2807
- artifact: input.artifact,
2808
- scenario: input.scenario
2809
- }), context)
2810
- });
2811
- if (result.score === void 0 || !Number.isFinite(result.score)) throw new Error(`${evaluator.name}: Phoenix evaluator returned no finite score`);
2812
- return {
2813
- score: result.score,
2814
- notes: [result.label, result.explanation].filter(Boolean).join(": ") || evaluator.name
2815
- };
2816
- });
2817
- }
2818
- function autoevalsScorerJudge(scorer, options) {
2819
- const paidCall = validatePaidEvaluation(options.name, options.kind, options.paidCall);
2820
- return upstreamJudge(options, async (input) => {
2821
- const result = await runUpstreamEvaluation({
2822
- name: options.name,
2823
- kind: options.kind,
2824
- signal: input.signal,
2825
- costLedger: input.costLedger,
2826
- costPhase: input.costPhase,
2827
- costTags: input.costTags,
2828
- scenarioId: input.scenario.id,
2829
- paidCall,
2830
- execute: (context) => scorer(options.mapInput({
2831
- artifact: input.artifact,
2832
- scenario: input.scenario
2833
- }), context)
2834
- });
2835
- if (result.score === null || !Number.isFinite(result.score)) throw new Error(`${options.name}: Autoevals scorer returned no finite score`);
2836
- return {
2837
- score: result.score,
2838
- notes: result.metadata ? JSON.stringify(result.metadata) : result.name
2839
- };
2840
- });
2841
- }
2842
- function upstreamJudge(options, evaluate) {
2843
- const dimension = options.dimension ?? options.name;
2844
- return {
2845
- name: options.name,
2846
- judgeVersion: options.judgeVersion,
2847
- dimensions: [{
2848
- key: dimension,
2849
- description: `Score from ${options.name}`
2850
- }],
2851
- appliesTo: options.appliesTo,
2852
- async score(input) {
2853
- const result = await evaluate(input);
2854
- const composite = options.toComposite ? options.toComposite(result.score) : result.score;
2855
- if (!Number.isFinite(composite)) throw new Error(`${options.name}: toComposite returned a non-finite score`);
2856
- return {
2857
- dimensions: { [dimension]: result.score },
2858
- composite,
2859
- notes: result.notes
2860
- };
2861
- }
2862
- };
2863
- }
2864
- function validatePaidEvaluation(name, kind, paidCall) {
2865
- if (kind === "CODE") {
2866
- if (paidCall) throw new TypeError(`${name}: CODE evaluator cannot declare paidCall`);
2867
- return;
2868
- }
2869
- if (!paidCall) throw new TypeError(`${name}: LLM evaluator requires paidCall cost and token capture`);
2870
- if (!paidCall.model.trim()) throw new TypeError(`${name}: paidCall.model must be non-empty`);
2871
- return paidCall;
2872
- }
2873
- async function runUpstreamEvaluation(input) {
2874
- if (input.kind === "CODE") return abortableEvaluation(input.signal, () => input.execute({ signal: input.signal }));
2875
- if (!input.paidCall) throw new CostAccountingIncompleteError(`${input.name}: missing paid-call configuration`);
2876
- if (!input.costLedger) throw new CostAccountingIncompleteError(`${input.name}: LLM evaluator requires the campaign cost ledger`);
2877
- const paid = await input.costLedger.runPaidCall({
2878
- channel: "judge",
2879
- phase: input.costPhase ?? "judge",
2880
- actor: input.name,
2881
- model: input.paidCall.model,
2882
- ...input.paidCall.maximumCharge ? { maximumCharge: input.paidCall.maximumCharge } : {},
2883
- tags: {
2884
- ...input.costTags,
2885
- scenarioId: input.scenarioId
2886
- },
2887
- signal: input.signal,
2888
- execute: (signal, callId) => Promise.resolve(input.execute({
2889
- signal,
2890
- callId
2891
- })),
2892
- receipt: input.paidCall.receipt,
2893
- ...input.paidCall.receiptFromError ? { receiptFromError: input.paidCall.receiptFromError } : {}
2894
- });
2895
- if (!paid.succeeded) throw paid.error;
2896
- const recorded = input.costLedger.list().find((receipt) => receipt.callId === paid.callId);
2897
- if (!recorded) throw new CostAccountingIncompleteError(`${input.name}: paid evaluator returned without a recorded cost receipt`);
2898
- if (recorded.costUnknown || recorded.usageUnknown) throw new CostAccountingIncompleteError(`${input.name}: paid evaluator returned without complete cost and token usage`);
2899
- return paid.value;
2900
- }
2901
- async function abortableEvaluation(signal, execute) {
2902
- if (signal.aborted) throw signal.reason;
2903
- let rejectAborted;
2904
- const aborted = new Promise((_resolve, reject) => {
2905
- rejectAborted = reject;
2906
- });
2907
- const onAbort = () => rejectAborted(signal.reason);
2908
- signal.addEventListener("abort", onAbort, { once: true });
2909
- try {
2910
- return await Promise.race([Promise.resolve().then(execute), aborted]);
2911
- } finally {
2912
- signal.removeEventListener("abort", onAbort);
2913
- }
2914
- }
2915
2406
  //#endregion
2916
2407
  //#region src/campaign/worktree/index.ts
2917
2408
  /**
@@ -3434,6 +2925,6 @@ function resolveWorktreePath(surface, worktreeDir) {
3434
2925
  return verifyCodeSurface(surface, worktreeDir).path;
3435
2926
  }
3436
2927
  //#endregion
3437
- export { loadEvalFixtureScenarios as A, FsLabeledScenarioStore as C, neutralizationGate as D, rolloutArgumentDiff as E, analyzeCrossSurfaceInteractions as M, buildTraceAnalystSurfaceDispatch as N, discoverEvalFixtures as O, traceAnalystQualityJudge as P, neutralizeText as S, classifyUngroundedLiterals as T, scoreUserStory as _, autoevalsScorerJudge as a, scopedOptimizationMethod as b, selectDiscriminative as c, finalizeProfileMatrix as d, runProfileMatrixSegment as f, renderScoreboardMarkdown as g, makePlaybackDispatch as h, verifyCodeSurface as i, planEvalFixtureRun as j, loadEvalFixture as k, createRetainedDispatch as l, runProfileMatrix as m, gitWorktreeAdapter as n, phoenixEvaluatorJudge as o, ProfileMatrixError as p, resolveWorktreePath as r, scoreDiscrimination as s, WorktreeAdapterError as t, createProfileMatrixPlan as u, scoreboardSummary as v, LabeledScenarioStoreError as w, sequentialOptimizationMethod as x, userStoryScoreboard as y };
2928
+ export { analyzeCrossSurfaceInteractions as S, neutralizationGate as _, createRetainedDispatch as a, loadEvalFixtureScenarios as b, runProfileMatrixSegment as c, scoreUserStory as d, scoreboardSummary as f, neutralizeText as g, sequentialOptimizationMethod as h, scoreDiscrimination as i, runProfileMatrix as l, scopedOptimizationMethod as m, resolveWorktreePath as n, createProfileMatrixPlan as o, userStoryScoreboard as p, verifyCodeSurface as r, finalizeProfileMatrix as s, gitWorktreeAdapter as t, renderScoreboardMarkdown as u, discoverEvalFixtures as v, planEvalFixtureRun as x, loadEvalFixture as y };
3438
2929
 
3439
- //# sourceMappingURL=campaign-BQ-Jujuj.js.map
2930
+ //# sourceMappingURL=campaign-CJGkxAQ6.js.map