@tangle-network/agent-eval 0.161.1 → 0.170.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/CHANGELOG.md +156 -0
  2. package/README.md +2 -0
  3. package/dist/{active-curriculum-CD5TU2yW.js → active-curriculum-OjIWgrUJ.js} +2 -2
  4. package/dist/{active-curriculum-CD5TU2yW.js.map → active-curriculum-OjIWgrUJ.js.map} +1 -1
  5. package/dist/adapters/http.d.ts +108 -0
  6. package/dist/adapters/http.d.ts.map +1 -0
  7. package/dist/adapters/http.js +208 -0
  8. package/dist/adapters/http.js.map +1 -0
  9. package/dist/analyst/index.d.ts +40 -70
  10. package/dist/analyst/index.d.ts.map +1 -1
  11. package/dist/analyst/index.js +18 -311
  12. package/dist/analyst/index.js.map +1 -1
  13. package/dist/{backend-integrity-DxuQCu_A.d.ts → backend-integrity-e79K3UPD.d.ts} +3 -3
  14. package/dist/{backend-integrity-DxuQCu_A.d.ts.map → backend-integrity-e79K3UPD.d.ts.map} +1 -1
  15. package/dist/{baseline-BhPRQBVn.js → baseline-BC-eBZ7U.js} +2 -2
  16. package/dist/{baseline-BhPRQBVn.js.map → baseline-BC-eBZ7U.js.map} +1 -1
  17. package/dist/{benchmark-BhT16ep9.js → benchmark-C4wk_Sjr.js} +10 -3
  18. package/dist/benchmark-C4wk_Sjr.js.map +1 -0
  19. package/dist/{benchmark-command-BDC3Gocz.js → benchmark-command-BA7qOdWw.js} +239 -253
  20. package/dist/benchmark-command-BA7qOdWw.js.map +1 -0
  21. package/dist/{benchmark-CGPp-kDC.d.ts → benchmark-h-h4bfqj.d.ts} +3 -3
  22. package/dist/{benchmark-CGPp-kDC.d.ts.map → benchmark-h-h4bfqj.d.ts.map} +1 -1
  23. package/dist/benchmarks/index.d.ts +5 -5
  24. package/dist/benchmarks/index.js +3 -3
  25. package/dist/builder-eval/index.d.ts +3 -3
  26. package/dist/builder-eval/index.d.ts.map +1 -1
  27. package/dist/builder-eval/index.js +22 -8
  28. package/dist/builder-eval/index.js.map +1 -1
  29. package/dist/campaign/index.d.ts +8 -8
  30. package/dist/campaign/index.js +9 -9
  31. package/dist/{campaign-BSmOwskD.js → campaign-BeCbxFqs.js} +19 -18
  32. package/dist/campaign-BeCbxFqs.js.map +1 -0
  33. package/dist/{canonical-IL-Bu-14.js → canonical-DPyQ_rpt.js} +22 -2
  34. package/dist/{canonical-IL-Bu-14.js.map → canonical-DPyQ_rpt.js.map} +1 -1
  35. package/dist/{chat-client-DlMlAeYI.js → chat-client-DEtybj5i.js} +5 -5
  36. package/dist/{chat-client-DlMlAeYI.js.map → chat-client-DEtybj5i.js.map} +1 -1
  37. package/dist/{chat-json-call-6g5sJobJ.js → chat-json-call-5Jxna-aV.js} +2 -2
  38. package/dist/{chat-json-call-6g5sJobJ.js.map → chat-json-call-5Jxna-aV.js.map} +1 -1
  39. package/dist/cli.js +3 -3
  40. package/dist/{client-CX7KqIdB.js → client-BvwNkIRN.js} +2 -2
  41. package/dist/{client-CX7KqIdB.js.map → client-BvwNkIRN.js.map} +1 -1
  42. package/dist/{client-L9VVPkim.d.ts → client-_Fsa5c2_.d.ts} +4 -4
  43. package/dist/{client-L9VVPkim.d.ts.map → client-_Fsa5c2_.d.ts.map} +1 -1
  44. package/dist/contract/index.d.ts +12 -703
  45. package/dist/contract/index.js +14 -14
  46. package/dist/{counterfactual-BaFUWK3H.d.ts → counterfactual-Bee5_BIn.d.ts} +4 -4
  47. package/dist/{counterfactual-BaFUWK3H.d.ts.map → counterfactual-Bee5_BIn.d.ts.map} +1 -1
  48. package/dist/{counterfactual-D_VWavVm.js → counterfactual-Bjq1mlUu.js} +2 -2
  49. package/dist/{counterfactual-D_VWavVm.js.map → counterfactual-Bjq1mlUu.js.map} +1 -1
  50. package/dist/{default-registry-G9CKMNkc.d.ts → default-registry-ovxrOP0_.d.ts} +6 -6
  51. package/dist/{default-registry-G9CKMNkc.d.ts.map → default-registry-ovxrOP0_.d.ts.map} +1 -1
  52. package/dist/{define-agent-eval-h-s-sI-v.js → define-agent-eval-Clj-8igZ.js} +27 -15
  53. package/dist/{define-agent-eval-h-s-sI-v.js.map → define-agent-eval-Clj-8igZ.js.map} +1 -1
  54. package/dist/{define-agent-eval-Dx1JnPEa.d.ts → define-agent-eval-DVJm8Xlh.d.ts} +7 -7
  55. package/dist/{define-agent-eval-Dx1JnPEa.d.ts.map → define-agent-eval-DVJm8Xlh.d.ts.map} +1 -1
  56. package/dist/{descriptive-jDOuI6mz.js → descriptive-1V17A-qa.js} +2 -2
  57. package/dist/{descriptive-jDOuI6mz.js.map → descriptive-1V17A-qa.js.map} +1 -1
  58. package/dist/{dspy-rlm-engine-DptEII26.js → dspy-rlm-engine-CS3qcCEk.js} +3 -10
  59. package/dist/dspy-rlm-engine-CS3qcCEk.js.map +1 -0
  60. package/dist/{emitter-D_jYSGRd.d.ts → emitter-Bvnu0VzL.d.ts} +3 -3
  61. package/dist/{emitter-D_jYSGRd.d.ts.map → emitter-Bvnu0VzL.d.ts.map} +1 -1
  62. package/dist/{emitter-BpYFQPj4.js → emitter-DeQHiDMm.js} +13 -6
  63. package/dist/emitter-DeQHiDMm.js.map +1 -0
  64. package/dist/{engine-Cu5qD5Fc.d.ts → engine-D12Rb6WB.d.ts} +7 -7
  65. package/dist/{engine-Cu5qD5Fc.d.ts.map → engine-D12Rb6WB.d.ts.map} +1 -1
  66. package/dist/{eval-campaign-BsXWL2-2.js → eval-campaign-JDTeE6Pl.js} +5 -5
  67. package/dist/{eval-campaign-BsXWL2-2.js.map → eval-campaign-JDTeE6Pl.js.map} +1 -1
  68. package/dist/{exact-types-qnexxJ1Z.d.ts → exact-types-BEecmnWm.d.ts} +2 -2
  69. package/dist/{exact-types-qnexxJ1Z.d.ts.map → exact-types-BEecmnWm.d.ts.map} +1 -1
  70. package/dist/experiment/index.d.ts +5 -5
  71. package/dist/experiment/index.js +11 -11
  72. package/dist/{experiment-tracker-Ym6rEQT1.js → experiment-tracker-BKEumQug.js} +2 -2
  73. package/dist/{experiment-tracker-Ym6rEQT1.js.map → experiment-tracker-BKEumQug.js.map} +1 -1
  74. package/dist/{experiment-tracker-DCO6Cz4s.d.ts → experiment-tracker-Dm8yQMqb.d.ts} +2 -2
  75. package/dist/{experiment-tracker-DCO6Cz4s.d.ts.map → experiment-tracker-Dm8yQMqb.d.ts.map} +1 -1
  76. package/dist/{external-optimizer-process-WosTBChy.js → external-optimizer-process-CQxylYeG.js} +4 -11
  77. package/dist/external-optimizer-process-CQxylYeG.js.map +1 -0
  78. package/dist/{external-optimizer-subprocess-BIWbHpgD.js → external-optimizer-subprocess-Cex8Da2i.js} +26 -12
  79. package/dist/external-optimizer-subprocess-Cex8Da2i.js.map +1 -0
  80. package/dist/{failure-cluster-CXL8NbEw.d.ts → failure-cluster-6YSvsKlp.d.ts} +3 -3
  81. package/dist/{failure-cluster-CXL8NbEw.d.ts.map → failure-cluster-6YSvsKlp.d.ts.map} +1 -1
  82. package/dist/{feedback-trajectory-B3ZHaHV_.d.ts → feedback-trajectory-DIqpCyF0.d.ts} +6 -6
  83. package/dist/{feedback-trajectory-B3ZHaHV_.d.ts.map → feedback-trajectory-DIqpCyF0.d.ts.map} +1 -1
  84. package/dist/fuzz.d.ts +2 -3
  85. package/dist/fuzz.d.ts.map +1 -1
  86. package/dist/fuzz.js +4 -10
  87. package/dist/fuzz.js.map +1 -1
  88. package/dist/{skillopt-optimization-method-x7TTF23P.d.ts → heldout-gate-Bn7_xWCv.d.ts} +111 -111
  89. package/dist/heldout-gate-Bn7_xWCv.d.ts.map +1 -0
  90. package/dist/hosted/index.d.ts +2 -2
  91. package/dist/hosted/index.js +1 -1
  92. package/dist/index-Bfs5aufo.d.ts +704 -0
  93. package/dist/index-Bfs5aufo.d.ts.map +1 -0
  94. package/dist/{index-CGtH1piv.d.ts → index-CM-SM00y.d.ts} +7 -38
  95. package/dist/index-CM-SM00y.d.ts.map +1 -0
  96. package/dist/{index-D-V8gCs_.d.ts → index-DBbivBNs.d.ts} +30 -22
  97. package/dist/index-DBbivBNs.d.ts.map +1 -0
  98. package/dist/{index-D-IiQIBB.d.ts → index-DMoxLG8P.d.ts} +3 -3
  99. package/dist/{index-D-IiQIBB.d.ts.map → index-DMoxLG8P.d.ts.map} +1 -1
  100. package/dist/{index-D_P7Ye43.d.ts → index-DNgf5gyG.d.ts} +2 -2
  101. package/dist/{index-D_P7Ye43.d.ts.map → index-DNgf5gyG.d.ts.map} +1 -1
  102. package/dist/index.d.ts +67 -37
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +47 -41
  105. package/dist/index.js.map +1 -1
  106. package/dist/{insight-report-DRe8LB6d.d.ts → insight-report-08F022xN.d.ts} +4 -4
  107. package/dist/{insight-report-DRe8LB6d.d.ts.map → insight-report-08F022xN.d.ts.map} +1 -1
  108. package/dist/{integrity-DUNX9Fao.d.ts → integrity-B_EDELom.d.ts} +2 -2
  109. package/dist/{integrity-DUNX9Fao.d.ts.map → integrity-B_EDELom.d.ts.map} +1 -1
  110. package/dist/{internal-BDHPCnjk.js → internal-BMFSR8Ns.js} +3 -19
  111. package/dist/internal-BMFSR8Ns.js.map +1 -0
  112. package/dist/{judge-calibration-zZjLz8hr.js → judge-calibration-BnpVKtnb.js} +3 -13
  113. package/dist/judge-calibration-BnpVKtnb.js.map +1 -0
  114. package/dist/judge-calibration-C5CbMYce.d.ts.map +1 -1
  115. package/dist/{kind-factory-DY8FdoXf.js → kind-factory-DMeEoMQZ.js} +3 -10
  116. package/dist/kind-factory-DMeEoMQZ.js.map +1 -0
  117. package/dist/ledger-core/index.js +2 -2
  118. package/dist/{ledger-core-BOzlRygb.js → ledger-core-PIfjCbKn.js} +2 -2
  119. package/dist/{ledger-core-BOzlRygb.js.map → ledger-core-PIfjCbKn.js.map} +1 -1
  120. package/dist/{llm-client-hgDieDNN.js → llm-client-BFMRpmqb.js} +8 -11
  121. package/dist/llm-client-BFMRpmqb.js.map +1 -0
  122. package/dist/{llm-judge-BhasIPFT.js → llm-judge-DbJdo8Nj.js} +101 -23
  123. package/dist/llm-judge-DbJdo8Nj.js.map +1 -0
  124. package/dist/matrix/index.d.ts +2 -2
  125. package/dist/{matrix-eXKRMHnL.d.ts → matrix-BpI5Trmo.d.ts} +3 -3
  126. package/dist/{matrix-eXKRMHnL.d.ts.map → matrix-BpI5Trmo.d.ts.map} +1 -1
  127. package/dist/meta-eval/index.d.ts +5 -4
  128. package/dist/meta-eval/index.d.ts.map +1 -1
  129. package/dist/meta-eval/index.js +14 -22
  130. package/dist/meta-eval/index.js.map +1 -1
  131. package/dist/{mint-DfODW1KW.js → mint-DjfDUMHr.js} +2 -2
  132. package/dist/{mint-DfODW1KW.js.map → mint-DjfDUMHr.js.map} +1 -1
  133. package/dist/multishot/golden/index.d.ts +1 -1
  134. package/dist/multishot/index.d.ts +2 -2
  135. package/dist/openapi.json +4 -4
  136. package/dist/{paired-arms-D-XRF_fy.js → paired-arms-D4aeIHUy.js} +3 -3
  137. package/dist/{paired-arms-D-XRF_fy.js.map → paired-arms-D4aeIHUy.js.map} +1 -1
  138. package/dist/{paired-tests-BHIhYVdu.js → paired-tests-C8iCsioC.js} +3 -3
  139. package/dist/{paired-tests-BHIhYVdu.js.map → paired-tests-C8iCsioC.js.map} +1 -1
  140. package/dist/pipelines/index.d.ts +7 -6
  141. package/dist/pipelines/index.d.ts.map +1 -1
  142. package/dist/pipelines/index.js +5 -20
  143. package/dist/pipelines/index.js.map +1 -1
  144. package/dist/{power-and-mde-CHIrXJll.js → power-and-mde-B8F2RdcD.js} +3 -3
  145. package/dist/{power-and-mde-CHIrXJll.js.map → power-and-mde-B8F2RdcD.js.map} +1 -1
  146. package/dist/{power-preflight-DEw-uC7q.js → power-preflight-CFXm0Vjo.js} +3 -3
  147. package/dist/{power-preflight-DEw-uC7q.js.map → power-preflight-CFXm0Vjo.js.map} +1 -1
  148. package/dist/{pareto-BqNW3LJR.d.ts → power-preflight-Ptse_Kq7.d.ts} +43 -43
  149. package/dist/power-preflight-Ptse_Kq7.d.ts.map +1 -0
  150. package/dist/{pre-registration-KN9jkh58.js → pre-registration-D94b7Of5.js} +2 -2
  151. package/dist/{pre-registration-KN9jkh58.js.map → pre-registration-D94b7Of5.js.map} +1 -1
  152. package/dist/{pre-registration-CzFCcwYk.d.ts → pre-registration-DHz6P_6f.d.ts} +2 -2
  153. package/dist/{pre-registration-CzFCcwYk.d.ts.map → pre-registration-DHz6P_6f.d.ts.map} +1 -1
  154. package/dist/{produced-state-DZ89riy5.js → produced-state-CtSIp5cQ.js} +5 -5
  155. package/dist/{produced-state-DZ89riy5.js.map → produced-state-CtSIp5cQ.js.map} +1 -1
  156. package/dist/profile-cell.js +1 -1
  157. package/dist/{promotion-policy-DtnOIZvk.d.ts → promotion-policy-CkXSgKkF.d.ts} +3 -3
  158. package/dist/{promotion-policy-DtnOIZvk.d.ts.map → promotion-policy-CkXSgKkF.d.ts.map} +1 -1
  159. package/dist/{promotion-policy-xzA40Evo.js → promotion-policy-LY9mVQ7W.js} +3 -3
  160. package/dist/{promotion-policy-xzA40Evo.js.map → promotion-policy-LY9mVQ7W.js.map} +1 -1
  161. package/dist/{run-score-lDzV0X8j.js → proposal-findings-bko3GGy-.js} +2 -31
  162. package/dist/proposal-findings-bko3GGy-.js.map +1 -0
  163. package/dist/{transient-failure-DKF5Mofa.d.ts → provenance-CIRUardl.d.ts} +891 -891
  164. package/dist/provenance-CIRUardl.d.ts.map +1 -0
  165. package/dist/{query-CHmMP42p.js → query-BPGMVlbM.js} +46 -4
  166. package/dist/query-BPGMVlbM.js.map +1 -0
  167. package/dist/{query-DxPYqpmT.d.ts → query-Na5gEIGd.d.ts} +21 -4
  168. package/dist/query-Na5gEIGd.d.ts.map +1 -0
  169. package/dist/random-Dn5fPWkt.js +21 -0
  170. package/dist/random-Dn5fPWkt.js.map +1 -0
  171. package/dist/record-id-DUgsK5qp.js +17 -0
  172. package/dist/record-id-DUgsK5qp.js.map +1 -0
  173. package/dist/{registry-8You7OK1.d.ts → registry-xEb_xfns.d.ts} +3 -3
  174. package/dist/{registry-8You7OK1.d.ts.map → registry-xEb_xfns.d.ts.map} +1 -1
  175. package/dist/{release-confidence-DKfD2RYU.js → release-confidence-CzUHc4z4.js} +4 -4
  176. package/dist/{release-confidence-DKfD2RYU.js.map → release-confidence-CzUHc4z4.js.map} +1 -1
  177. package/dist/{release-confidence-Dqt0NFep.d.ts → release-confidence-D6lQw_o7.d.ts} +4 -4
  178. package/dist/{release-confidence-Dqt0NFep.d.ts.map → release-confidence-D6lQw_o7.d.ts.map} +1 -1
  179. package/dist/reporting.d.ts +3 -3
  180. package/dist/reporting.js +6 -6
  181. package/dist/{researcher-Cz565b7D.d.ts → researcher-CMUTQXD7.d.ts} +6 -6
  182. package/dist/{researcher-Cz565b7D.d.ts.map → researcher-CMUTQXD7.d.ts.map} +1 -1
  183. package/dist/{reward-hacking-MBf7qpSB.d.ts → reward-hacking-CgPRUesA.d.ts} +2 -2
  184. package/dist/{reward-hacking-MBf7qpSB.d.ts.map → reward-hacking-CgPRUesA.d.ts.map} +1 -1
  185. package/dist/{reward-hacking-t4lB1yt8.js → reward-hacking-SkxYgT0x.js} +3 -3
  186. package/dist/{reward-hacking-t4lB1yt8.js.map → reward-hacking-SkxYgT0x.js.map} +1 -1
  187. package/dist/rl.d.ts +8 -8
  188. package/dist/rl.d.ts.map +1 -1
  189. package/dist/rl.js +13 -18
  190. package/dist/rl.js.map +1 -1
  191. package/dist/rollout/index.d.ts +1 -1
  192. package/dist/rollout/index.js +2 -2
  193. package/dist/{rollout-Dm2tSdiQ.js → rollout-Crypdx8s.js} +2 -2
  194. package/dist/{rollout-Dm2tSdiQ.js.map → rollout-Crypdx8s.js.map} +1 -1
  195. package/dist/{rubric-predictive-validity-CK8SCOg-.js → rubric-predictive-validity-2D5Gw9z9.js} +3 -3
  196. package/dist/{rubric-predictive-validity-CK8SCOg-.js.map → rubric-predictive-validity-2D5Gw9z9.js.map} +1 -1
  197. package/dist/{rubric-predictive-validity-CxycqzX5.d.ts → rubric-predictive-validity-DluJLCKQ.d.ts} +2 -2
  198. package/dist/{rubric-predictive-validity-CxycqzX5.d.ts.map → rubric-predictive-validity-DluJLCKQ.d.ts.map} +1 -1
  199. package/dist/{run-record-BC0ebuRP.js → run-record-DLORoL7t.js} +2 -2
  200. package/dist/{run-record-BC0ebuRP.js.map → run-record-DLORoL7t.js.map} +1 -1
  201. package/dist/{run-record-VVy4T9OW.d.ts → run-record-DQjRcYwA.d.ts} +3 -3
  202. package/dist/{run-record-VVy4T9OW.d.ts.map → run-record-DQjRcYwA.d.ts.map} +1 -1
  203. package/dist/{schema-k6ZBftVv.js → schema-CdIX2aHu.js} +5 -1
  204. package/dist/{schema-k6ZBftVv.js.map → schema-CdIX2aHu.js.map} +1 -1
  205. package/dist/{schema-Bjgdsn73.d.ts → schema-DID1Cqct.d.ts} +7 -3
  206. package/dist/{schema-Bjgdsn73.d.ts.map → schema-DID1Cqct.d.ts.map} +1 -1
  207. package/dist/{semantic-concept-judge-BSkKKHeq.js → semantic-concept-judge-I36eejJx.js} +3 -3
  208. package/dist/{semantic-concept-judge-BSkKKHeq.js.map → semantic-concept-judge-I36eejJx.js.map} +1 -1
  209. package/dist/{sequential-rYW-Ophm.js → sequential-B51qAYE4.js} +4 -4
  210. package/dist/{sequential-rYW-Ophm.js.map → sequential-B51qAYE4.js.map} +1 -1
  211. package/dist/{server-BtFd4uzB.js → server-CCEnywOR.js} +27 -19
  212. package/dist/server-CCEnywOR.js.map +1 -0
  213. package/dist/{skillopt-optimization-method-DbaekMcn.js → skillopt-optimization-method-B2R9C5aG.js} +11 -11
  214. package/dist/{skillopt-optimization-method-DbaekMcn.js.map → skillopt-optimization-method-B2R9C5aG.js.map} +1 -1
  215. package/dist/{statistical-heldout-Cy3EhjlC.d.ts → statistical-heldout-DFS7QGpS.d.ts} +3 -3
  216. package/dist/{statistical-heldout-Cy3EhjlC.d.ts.map → statistical-heldout-DFS7QGpS.d.ts.map} +1 -1
  217. package/dist/{store-B06JdC56.d.ts → store-Cq9oOrI1.d.ts} +2 -2
  218. package/dist/{store-B06JdC56.d.ts.map → store-Cq9oOrI1.d.ts.map} +1 -1
  219. package/dist/{store-otlp-C_Rq5I4D.js → store-otlp-CHjBvWQY.js} +2 -2
  220. package/dist/{store-otlp-C_Rq5I4D.js.map → store-otlp-CHjBvWQY.js.map} +1 -1
  221. package/dist/{store-tool-spans-DPUG7UUY.d.ts → store-tool-spans-B2DJ_82T.d.ts} +102 -36
  222. package/dist/store-tool-spans-B2DJ_82T.d.ts.map +1 -0
  223. package/dist/{store-tool-spans-Dlh9vkFK.js → store-tool-spans-B9o6tU8f.js} +23 -19
  224. package/dist/store-tool-spans-B9o6tU8f.js.map +1 -0
  225. package/dist/storyboard/index.d.ts +1 -1
  226. package/dist/{student-t-CvBq2mve.js → student-t-BA-Uy51p.js} +2 -2
  227. package/dist/{student-t-CvBq2mve.js.map → student-t-BA-Uy51p.js.map} +1 -1
  228. package/dist/{summary-report-BI5hUtvK.js → summary-report-Bgh8CpNK.js} +7 -7
  229. package/dist/{summary-report-BI5hUtvK.js.map → summary-report-Bgh8CpNK.js.map} +1 -1
  230. package/dist/{summary-report-CC07PhEL.d.ts → summary-report-DRstQNBX.d.ts} +3 -3
  231. package/dist/{summary-report-CC07PhEL.d.ts.map → summary-report-DRstQNBX.d.ts.map} +1 -1
  232. package/dist/supervisor-run/index.js +1 -1
  233. package/dist/{task-failure-attributes-DTl-7-Kw.js → task-failure-attributes-CBGtLS_H.js} +3 -3
  234. package/dist/{task-failure-attributes-DTl-7-Kw.js.map → task-failure-attributes-CBGtLS_H.js.map} +1 -1
  235. package/dist/{tool-groups-Ci8i9ErB.d.ts → tool-groups-BnXlCJZQ.d.ts} +3 -3
  236. package/dist/tool-groups-BnXlCJZQ.d.ts.map +1 -0
  237. package/dist/{tool-waste-Dro0gJi3.d.ts → tool-waste-BrmLKxMw.d.ts} +4 -4
  238. package/dist/{tool-waste-Dro0gJi3.d.ts.map → tool-waste-BrmLKxMw.d.ts.map} +1 -1
  239. package/dist/{tool-waste-BqzmVdJk.js → tool-waste-CwGHzBzX.js} +4 -4
  240. package/dist/{tool-waste-BqzmVdJk.js.map → tool-waste-CwGHzBzX.js.map} +1 -1
  241. package/dist/trace-repair/index.d.ts +3 -3
  242. package/dist/trace-repair/index.d.ts.map +1 -1
  243. package/dist/trace-repair/index.js +5 -4
  244. package/dist/trace-repair/index.js.map +1 -1
  245. package/dist/traces.d.ts +60 -62
  246. package/dist/traces.d.ts.map +1 -1
  247. package/dist/traces.js +13 -22
  248. package/dist/traces.js.map +1 -1
  249. package/dist/{trajectory-Bi157Gun.d.ts → trajectory-r1bQqvBQ.d.ts} +3 -3
  250. package/dist/{trajectory-Bi157Gun.d.ts.map → trajectory-r1bQqvBQ.d.ts.map} +1 -1
  251. package/dist/trajectory-replay/index.d.ts +3 -3
  252. package/dist/trajectory-replay/index.d.ts.map +1 -1
  253. package/dist/trajectory-replay/index.js +4 -14
  254. package/dist/trajectory-replay/index.js.map +1 -1
  255. package/dist/types-Bfk0uxRj.d.ts.map +1 -1
  256. package/dist/{types-BI4fT3HN.js → types-CiWITkGo.js} +11 -2
  257. package/dist/types-CiWITkGo.js.map +1 -0
  258. package/dist/{types-D9ssmxKL.d.ts → types-DMoNFDWi.d.ts} +6 -3
  259. package/dist/{types-D9ssmxKL.d.ts.map → types-DMoNFDWi.d.ts.map} +1 -1
  260. package/dist/{types-D4s7Z6nq.d.ts → types-Dy237wiH.d.ts} +3 -3
  261. package/dist/{types-D4s7Z6nq.d.ts.map → types-Dy237wiH.d.ts.map} +1 -1
  262. package/dist/{types-BPb2Kf_C2.d.ts → types-i21ccEkr.d.ts} +3 -3
  263. package/dist/types-i21ccEkr.d.ts.map +1 -0
  264. package/dist/{verdict-B0xltqu6.js → verdict-BQ3pCFf8.js} +2 -2
  265. package/dist/{verdict-B0xltqu6.js.map → verdict-BQ3pCFf8.js.map} +1 -1
  266. package/dist/{verdict-cache-CdVVTVmn.js → verdict-cache-B3eCVQtY.js} +2 -2
  267. package/dist/{verdict-cache-CdVVTVmn.js.map → verdict-cache-B3eCVQtY.js.map} +1 -1
  268. package/dist/wire/index.d.ts +23 -8
  269. package/dist/wire/index.d.ts.map +1 -1
  270. package/dist/wire/index.js +2 -2
  271. package/docs/code-agent-intake.md +64 -0
  272. package/docs/concepts.md +1 -1
  273. package/docs/design/statistics-decisions.md +1 -1
  274. package/docs/distributed-driver.md +3 -6
  275. package/docs/public-api.md +122 -106
  276. package/docs/wire-protocol.md +5 -3
  277. package/package.json +9 -2
  278. package/dist/benchmark-BhT16ep9.js.map +0 -1
  279. package/dist/benchmark-command-BDC3Gocz.js.map +0 -1
  280. package/dist/campaign-BSmOwskD.js.map +0 -1
  281. package/dist/capture-fetch-CqwsJkkG.d.ts +0 -68
  282. package/dist/capture-fetch-CqwsJkkG.d.ts.map +0 -1
  283. package/dist/contract/index.d.ts.map +0 -1
  284. package/dist/dspy-rlm-engine-DptEII26.js.map +0 -1
  285. package/dist/emitter-BpYFQPj4.js.map +0 -1
  286. package/dist/external-optimizer-process-WosTBChy.js.map +0 -1
  287. package/dist/external-optimizer-subprocess-BIWbHpgD.js.map +0 -1
  288. package/dist/index-CGtH1piv.d.ts.map +0 -1
  289. package/dist/index-D-V8gCs_.d.ts.map +0 -1
  290. package/dist/index-vrJugRal.d.ts +0 -1
  291. package/dist/internal-BDHPCnjk.js.map +0 -1
  292. package/dist/judge-calibration-zZjLz8hr.js.map +0 -1
  293. package/dist/kind-factory-DY8FdoXf.js.map +0 -1
  294. package/dist/llm-client-hgDieDNN.js.map +0 -1
  295. package/dist/llm-judge-BhasIPFT.js.map +0 -1
  296. package/dist/pareto-BqNW3LJR.d.ts.map +0 -1
  297. package/dist/query-CHmMP42p.js.map +0 -1
  298. package/dist/query-DxPYqpmT.d.ts.map +0 -1
  299. package/dist/run-score-lDzV0X8j.js.map +0 -1
  300. package/dist/server-BtFd4uzB.js.map +0 -1
  301. package/dist/skillopt-optimization-method-x7TTF23P.d.ts.map +0 -1
  302. package/dist/store-tool-spans-DPUG7UUY.d.ts.map +0 -1
  303. package/dist/store-tool-spans-Dlh9vkFK.js.map +0 -1
  304. package/dist/tool-groups-Ci8i9ErB.d.ts.map +0 -1
  305. package/dist/transient-failure-DKF5Mofa.d.ts.map +0 -1
  306. package/dist/types-BI4fT3HN.js.map +0 -1
  307. package/dist/types-BPb2Kf_C2.d.ts.map +0 -1
@@ -1,5 +1,5 @@
1
- import { c as AnalystRunInputs, f as AnalystUsageReceipt, i as AnalystFinding, p as EvidenceRef, w as TraceAnalysisStore } from "./types-D9ssmxKL.js";
2
- import { c as RegistryRunOpts, n as AnalystRegistry } from "./registry-8You7OK1.js";
1
+ import { c as AnalystRunInputs, f as AnalystUsageReceipt, i as AnalystFinding, p as EvidenceRef, w as TraceAnalysisStore } from "./types-DMoNFDWi.js";
2
+ import { c as RegistryRunOpts, n as AnalystRegistry } from "./registry-xEb_xfns.js";
3
3
  //#region src/analyst/benchmark-scoring.d.ts
4
4
  declare function scoreAnalystFindings(testCase: Pick<AnalystBenchmarkCase, 'id' | 'expectedIssues' | 'labeledEvidence'>, findings: readonly AnalystFinding[]): AnalystFindingScore;
5
5
  //#endregion
@@ -233,4 +233,4 @@ declare function registryBenchmarkRunner(options: {
233
233
  }): AnalystBenchmarkRunner<AnalystRunInputs>;
234
234
  //#endregion
235
235
  export { scoreAnalystFindings as C, traceStoreEvidenceResolver as S, AnalystIssueExpectation as _, AnalystBenchmarkLabelState as a, registryBenchmarkRunner as b, AnalystBenchmarkProvenance as c, AnalystBenchmarkSummary as d, AnalystEvidenceExpectation as f, AnalystFindingScore as g, AnalystEvidenceResolver as h, AnalystBenchmarkError as i, AnalystBenchmarkResult as l, AnalystEvidenceResolutionError as m, AnalystBenchmarkDatasetRef as n, AnalystBenchmarkObservation as o, AnalystEvidenceResolution as p, AnalystBenchmarkDescriptor as r, AnalystBenchmarkOutput as s, AnalystBenchmarkCase as t, AnalystBenchmarkRunner as u, AnalystLatencyDistribution as v, runAnalystBenchmark as x, RunAnalystBenchmarkOptions as y };
236
- //# sourceMappingURL=benchmark-CGPp-kDC.d.ts.map
236
+ //# sourceMappingURL=benchmark-h-h4bfqj.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"benchmark-CGPp-kDC.d.ts","names":[],"sources":["../src/analyst/benchmark-scoring.ts","../src/analyst/benchmark.ts"],"mappings":";;;iBASgB,qBACd,UAAU,KAAK,oEACf,mBAAmB,mBAClB;;;UCIc;EACf;EACA,OAAO;;UAGQ;EACf;EACA;EACA;EACA;EACA,oBAAoB;EACpB;;EAEA,4BAA4B;;KAGlB;UAEK,qBAAqB;EACpC;;EAEA;;EAEA,YAAY;EACZ,OAAO;EACP,yBAAyB;;EAEzB,2BAA2B;EAC3B;EACA,WAAW;;UAGI;EACf;EACA;EACA;EACA;EACA;EACA,mBAAmB;EACnB;EACA;EACA;EACA;;EAEA;;EAEA;;EAEA;EACA;;UAGe;EACf,UAAU;EACV;EACA;;UAGe;EACf;EACA;EACA,oBAAoB;EACpB,QAAQ;;EAER;;KAGU,wBAAwB,qBAAqB;EACvD;EACA,WAAW;EACX,UAAU;EACV,SAAS;gBACK;;;;;iBAMA,2BAA2B,QACzC,WAAW,OAAO,WAAW,qBAC5B,wBAAwB;UAoBV;EACf,mBAAmB;EACnB,QAAQ;EACR,WAAW;;;;;EAKX;;EAEA,QAAQ;;UAGO;EACf;EACA;EACA;EACA;;UAGe,uBAAuB;EACtC;EACA,QACE,OAAO,QACP;IAAW;IAAgB;IAAoB,SAAS;MACvD,yBAAyB,QAAQ;;UAGrB;EACf;EACA;EACA;EACA,YAAY;EACZ;EACA;EACA;EACA;EACA,mBAAmB;EACnB,OAAO;EACP,qBAAqB;EACrB;EACA,eAAe;EACf,QAAQ;EACR,iBAAiB;EACjB,QAAQ;;UAGO;EACf;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;;EAEA;;EAEA;;EAEA;EACA,WAAW;EACX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;;UAGe;EACf;EACA,UAAU;EACV;EACA,cAAc;EACd,WAAW;;UAGI,mCAAmC;EAClD;EACA;EACA;EACA;EACA;EACA;EACA;;UAGe;EACf,YAAY;EACZ,cAAc;EACd,WAAW;;UAGI,2BAA2B;EAC1C,gBAAgB,qBAAqB;EACrC,kBAAkB,uBAAuB;EACzC;EACA;EACA;EACA,kBAAkB,wBAAwB;EAC1C,YAAY;;EAEZ,+BAA+B;EAC/B,iBAAiB,aAAa,uCAAuC;EACrE,SAAS;;iBAGW,oBAAoB,QACxC,SAAS,2BAA2B,UACnC,QAAQ;iBAyDK,wBAAwB;EACtC;EACA,UAAU;EACV,aAAa,KAAK;;EAElB;IACE,uBAAuB"}
1
+ {"version":3,"file":"benchmark-h-h4bfqj.d.ts","names":[],"sources":["../src/analyst/benchmark-scoring.ts","../src/analyst/benchmark.ts"],"mappings":";;;iBASgB,qBACd,UAAU,KAAK,oEACf,mBAAmB,mBAClB;;;UCIc;EACf;EACA,OAAO;;UAGQ;EACf;EACA;EACA;EACA;EACA,oBAAoB;EACpB;;EAEA,4BAA4B;;KAGlB;UAEK,qBAAqB;EACpC;;EAEA;;EAEA,YAAY;EACZ,OAAO;EACP,yBAAyB;;EAEzB,2BAA2B;EAC3B;EACA,WAAW;;UAGI;EACf;EACA;EACA;EACA;EACA;EACA,mBAAmB;EACnB;EACA;EACA;EACA;;EAEA;;EAEA;;EAEA;EACA;;UAGe;EACf,UAAU;EACV;EACA;;UAGe;EACf;EACA;EACA,oBAAoB;EACpB,QAAQ;;EAER;;KAGU,wBAAwB,qBAAqB;EACvD;EACA,WAAW;EACX,UAAU;EACV,SAAS;gBACK;;;;;iBAMA,2BAA2B,QACzC,WAAW,OAAO,WAAW,qBAC5B,wBAAwB;UAoBV;EACf,mBAAmB;EACnB,QAAQ;EACR,WAAW;;;;;EAKX;;EAEA,QAAQ;;UAGO;EACf;EACA;EACA;EACA;;UAGe,uBAAuB;EACtC;EACA,QACE,OAAO,QACP;IAAW;IAAgB;IAAoB,SAAS;MACvD,yBAAyB,QAAQ;;UAGrB;EACf;EACA;EACA;EACA,YAAY;EACZ;EACA;EACA;EACA;EACA,mBAAmB;EACnB,OAAO;EACP,qBAAqB;EACrB;EACA,eAAe;EACf,QAAQ;EACR,iBAAiB;EACjB,QAAQ;;UAGO;EACf;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;;EAEA;;EAEA;;EAEA;EACA,WAAW;EACX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;;UAGe;EACf;EACA,UAAU;EACV;EACA,cAAc;EACd,WAAW;;UAGI,mCAAmC;EAClD;EACA;EACA;EACA;EACA;EACA;EACA;;UAGe;EACf,YAAY;EACZ,cAAc;EACd,WAAW;;UAGI,2BAA2B;EAC1C,gBAAgB,qBAAqB;EACrC,kBAAkB,uBAAuB;EACzC;EACA;EACA;EACA,kBAAkB,wBAAwB;EAC1C,YAAY;;EAEZ,+BAA+B;EAC/B,iBAAiB,aAAa,uCAAuC;EACrE,SAAS;;iBAGW,oBAAoB,QACxC,SAAS,2BAA2B,UACnC,QAAQ;iBAyDK,wBAAwB;EACtC;EACA,UAAU;EACV,aAAa,KAAK;;EAElB;IACE,uBAAuB"}
@@ -1,8 +1,8 @@
1
- import { s as RunSplitTag } from "../run-record-VVy4T9OW.js";
2
- import { Ln as CampaignStorage } from "../transient-failure-DKF5Mofa.js";
3
- import { a as CampaignResult } from "../types-D4s7Z6nq.js";
4
- import { a as BenchmarkFamily, c as BenchmarkSource, i as BenchmarkEvaluation, l as BenchmarkTaskKind, n as BenchmarkAdapter, o as BenchmarkResponder, r as BenchmarkDatasetItem, s as BenchmarkScenario, t as BENCHMARK_SPLIT_SEED, u as deterministicSplit } from "../types-BPb2Kf_C2.js";
5
- import "../index-D-V8gCs_.js";
1
+ import { s as RunSplitTag } from "../run-record-DQjRcYwA.js";
2
+ import { Un as CampaignStorage } from "../provenance-CIRUardl.js";
3
+ import { a as CampaignResult } from "../types-Dy237wiH.js";
4
+ import "../index-DBbivBNs.js";
5
+ import { a as BenchmarkFamily, c as BenchmarkSource, i as BenchmarkEvaluation, l as BenchmarkTaskKind, n as BenchmarkAdapter, o as BenchmarkResponder, r as BenchmarkDatasetItem, s as BenchmarkScenario, t as BENCHMARK_SPLIT_SEED, u as deterministicSplit } from "../types-i21ccEkr.js";
6
6
  //#region src/benchmarks/calibration.d.ts
7
7
  interface BenchmarkMetricCalibrationOptions<TPayload = unknown, TArtifact = string> {
8
8
  adapter: BenchmarkAdapter<BenchmarkDatasetItem<TPayload>, TPayload, TArtifact>;
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "../rolldown-runtime-8H4AJuhK.js";
2
- import { nt as runCampaign } from "../llm-judge-BhasIPFT.js";
3
- import { x as fsCampaignStorage } from "../external-optimizer-subprocess-BIWbHpgD.js";
4
- import "../campaign-BSmOwskD.js";
2
+ import { it as runCampaign } from "../llm-judge-DbJdo8Nj.js";
3
+ import { S as fsCampaignStorage } from "../external-optimizer-subprocess-Cex8Da2i.js";
4
+ import "../campaign-BeCbxFqs.js";
5
5
  import { join } from "node:path";
6
6
  //#region src/benchmarks/calibration.ts
7
7
  async function calibrateBenchmarkMetric(options) {
@@ -1,6 +1,6 @@
1
- import { f as Run, o as FailureClass } from "../schema-Bjgdsn73.js";
2
- import { s as TraceStore } from "../store-B06JdC56.js";
3
- import { i as TraceEmitter } from "../emitter-D_jYSGRd.js";
1
+ import { f as Run, o as FailureClass } from "../schema-DID1Cqct.js";
2
+ import { s as TraceStore } from "../store-Cq9oOrI1.js";
3
+ import { i as TraceEmitter } from "../emitter-Bvnu0VzL.js";
4
4
  import { n as SandboxDriver, r as SandboxHarnessResult, t as HarnessConfig } from "../sandbox-harness-BlSOu4LX.js";
5
5
  //#region src/test-graded-scenario.d.ts
6
6
  interface TestGradedScenario {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/test-graded-scenario.ts","../../src/builder-eval/builder-session.ts","../../src/builder-eval/three-layer-eval.ts","../../src/builder-eval/correlation.ts","../../src/builder-eval/project-registry.ts"],"mappings":";;;;;UAmBiB;EACf;EACA;EACA,SAAS;;EAET;;EAEA;;EAEA,OAAO;;UAUQ;EACf;EACA,UAAU;EACV,SAAS;EACT;EACA;EACA,eAAe;;;;UClBA;EACf;EACA;;EAEA,OAAO;;UAGQ;EACf,SAAS;EACT,SAAS;;EAET;;UAGe;EACf,UAAU;;EAEV,SAAS;;cAGE;UACH;UACA;WACC;WACA;UACD;UACA;UACA;EAER,YAAY,OAAO,YAAY,MAAM,oBAAoB,SAAS;;EAS5D,UAAU,sBAAwC;;MAYpD,WAAW;;;;;EAST,KAAK,SAAS,cAAc;IAAU;IAAe,QAAQ;;;;;;;;EA2B7D,eAAe,SAAS,wBAAwB,QAAQ;;;EAqBxD,gBAAgB,eAAe,qBAAqB;;EAcpD,QAAQ;IAAW;IAAe;IAAgB;MAAmB;;;;;;;;EAerE,gBAAgB,qBAAqB,QAAQ;;;;;;EAsB7C,iBAAiB;IACrB;IACA;IACA;IACA;MACE;MAqBA;MAGA;;;;;;;iBAUgB,qBACpB,OAAO,YACP,oBACC;EACD;EACA,UAAU;EACV,iBAAiB;EACjB,eAAe;EACf,oBAAoB;;;;KC3MV;UAEK;EACf;;;;;;;EAOA,MAAM;EACN;;EAEA;EACA;;EAEA;EACA;;EAEA;EACA;;;;;;EAMA;;iBAGoB,aACpB,OAAO,YACP,oBACC,QAAQ;;iBAuCW,iBAAiB,OAAO,aAAa,QAAQ;;;UC/ElD;EACf;EACA;EACA;;UAGe;;EAEf,cAAc;EACd,gBAAgB;EAChB,iBAAiB;;EAEjB;;iBAGc,gBAAgB,SAAS,4BAA4B;;;UCpBpD;EACf;EACA;EACA;EACA;EACA;EACA;EACA;IAAkB;IAAe;;;UAGlB;EACf;EACA;EACA;EACA;EACA;EACA,QAAQ;EACR,UAAU;;EAEV;EACA;EACA;EACA;;UAGe;EACf,KAAK;EACL;;cAGW;UACS;EAApB,YAAoB,OAAO;EAErB,gBAAgB,QAAQ;EAgCxB,gBAAgB,oBAAoB,QAAQ;EAgB5C,aAAa,oBAAoB,QAAQ"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/test-graded-scenario.ts","../../src/builder-eval/builder-session.ts","../../src/builder-eval/three-layer-eval.ts","../../src/builder-eval/correlation.ts","../../src/builder-eval/project-registry.ts"],"mappings":";;;;;UAmBiB;EACf;EACA;EACA,SAAS;;EAET;;EAEA;;EAEA,OAAO;;UAUQ;EACf;EACA,UAAU;EACV,SAAS;EACT;EACA;EACA,eAAe;;;;UCjBA;EACf;EACA;;EAEA,OAAO;;UAGQ;EACf,SAAS;EACT,SAAS;;EAET;;UAGe;EACf,UAAU;;EAEV,SAAS;;cAGE;UACH;UACA;WACC;WACA;UACD;UACA;UACA;EAER,YAAY,OAAO,YAAY,MAAM,oBAAoB,SAAS;;EAS5D,UAAU,sBAAwC;;MAYpD,WAAW;;;;;EAST,KAAK,SAAS,cAAc;IAAU;IAAe,QAAQ;;;;;;;;EA2B7D,eAAe,SAAS,wBAAwB,QAAQ;;;EAqBxD,gBAAgB,eAAe,qBAAqB;;EAcpD,QAAQ;IAAW;IAAe;IAAgB;MAAmB;;;;;;;;EAerE,gBAAgB,qBAAqB,QAAQ;;;;;;EAsB7C,iBAAiB;IACrB;IACA;IACA;IACA;MACE;MAqBA;MAGA;;;;;;;iBAUgB,qBACpB,OAAO,YACP,oBACC;EACD;EACA,UAAU;EACV,iBAAiB;EACjB,eAAe;EACf,oBAAoB;;;;KC5MV;UAEK;EACf;;;;;;;EAOA,MAAM;EACN;;EAEA;EACA;;EAEA;EACA;;EAEA;EACA;;;;;;EAMA;;iBAGoB,aACpB,OAAO,YACP,oBACC,QAAQ;;iBAuCW,iBAAiB,OAAO,aAAa,QAAQ;;;UC/ElD;EACf;EACA;EACA;;UAGe;;EAEf,cAAc;EACd,gBAAgB;EAChB,iBAAiB;;EAEjB;;iBAGc,gBAAgB,SAAS,4BAA4B;;;UCpBpD;EACf;EACA;EACA;EACA;EACA;EACA;EACA;IAAkB;IAAe;;;UAGlB;EACf;EACA;EACA;EACA;EACA;EACA,QAAQ;EACR,UAAU;;EAEV;EACA;EACA;EACA;;UAGe;EACf,KAAK;EACL;;cAGW;UACS;EAApB,YAAoB,OAAO;EAErB,gBAAgB,QAAQ;EAgCxB,gBAAgB,oBAAoB,QAAQ;EAgB5C,aAAa,oBAAoB,QAAQ"}
@@ -1,6 +1,7 @@
1
- import { a as spearmanR, r as pearsonR } from "../descriptive-jDOuI6mz.js";
2
- import { a as judgeSpans } from "../query-CHmMP42p.js";
3
- import { t as TraceEmitter } from "../emitter-BpYFQPj4.js";
1
+ import { a as spearmanR, r as pearsonR } from "../descriptive-1V17A-qa.js";
2
+ import { s as judgeSpans } from "../query-BPGMVlbM.js";
3
+ import { t as newRecordId } from "../record-id-DUgsK5qp.js";
4
+ import { t as TraceEmitter } from "../emitter-DeQHiDMm.js";
4
5
  //#region src/sandbox-harness.ts
5
6
  var SubprocessSandboxDriver = class {
6
7
  id = "subprocess";
@@ -227,6 +228,23 @@ function reasonForFailure(result) {
227
228
  }
228
229
  //#endregion
229
230
  //#region src/builder-eval/builder-session.ts
231
+ /**
232
+ * BuilderSession — ties a builder-of-builders workflow together.
233
+ *
234
+ * Models agent-builder's shape: Project → Chat → Edit → Ship → App →
235
+ * AppAgent. Each layer is a Run (linked via parentRunId). The
236
+ * framework-enforced invariants:
237
+ *
238
+ * - One Project → many Chats; chatId scopes runs within a project.
239
+ * - One Chat = one builder Run with `layer='builder'`.
240
+ * - One Ship = one child Run with `layer='app-build'` + SandboxHarness.
241
+ * - One AppScenario = one grandchild Run with `layer='app-runtime'`.
242
+ *
243
+ * Consumers obtain a BuilderSession, call `startChat`, drive the
244
+ * builder agent (emitting spans), and call `ship` / `runAppScenario`
245
+ * as the workflow progresses. The session reconstructs itself from
246
+ * trace data via `resume(store, projectId)`.
247
+ */
230
248
  var BuilderSession = class {
231
249
  store;
232
250
  builderEmitter;
@@ -238,7 +256,7 @@ var BuilderSession = class {
238
256
  constructor(store, init, driver) {
239
257
  this.store = store;
240
258
  this.projectId = init.projectId;
241
- this.chatId = init.chatId ?? cryptoId();
259
+ this.chatId = init.chatId ?? newRecordId();
242
260
  this.defaultDriver = driver;
243
261
  this.builderEmitter = new TraceEmitter(store);
244
262
  }
@@ -400,10 +418,6 @@ async function resumeBuilderSession(store, projectId) {
400
418
  lastAppRuntimeRuns: appRuntimeRuns
401
419
  };
402
420
  }
403
- function cryptoId() {
404
- if (typeof globalThis.crypto?.randomUUID === "function") return globalThis.crypto.randomUUID();
405
- return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
406
- }
407
421
  //#endregion
408
422
  //#region src/builder-eval/correlation.ts
409
423
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/sandbox-harness.ts","../../src/test-graded-scenario.ts","../../src/builder-eval/builder-session.ts","../../src/builder-eval/correlation.ts","../../src/builder-eval/project-registry.ts","../../src/builder-eval/three-layer-eval.ts"],"sourcesContent":["/**\n * SandboxHarness — executes a scenario in an isolated environment and\n * emits a rich SandboxSpan into the trace.\n *\n * Two built-in drivers:\n * - `SubprocessSandboxDriver` — spawn in a local cwd with env vars.\n * Fast, no dependencies, fine for unit tests and most CI gates.\n * - `DockerSandboxDriver` — lifted from tangle-router's sandbox path;\n * shells out to `docker run`. Stronger isolation, slower startup.\n *\n * Consumers implement `SandboxDriver` for custom backends (Firecracker,\n * Cloudflare sandbox product, etc.). The harness doesn't care which.\n */\n\nimport { ConfigError } from './errors'\nimport type { TraceEmitter } from './trace/emitter'\nimport type { SandboxSpan } from './trace/schema'\n\nexport interface HarnessConfig {\n /** Setup command (e.g. \"pnpm install\"). Non-zero exit fails the run. */\n setupCommand?: string\n /** Run command (e.g. \"pnpm build\"). */\n runCommand?: string\n /** Test command (e.g. \"pnpm test --run\"). Drives the test count + pass count. */\n testCommand?: string\n /** Absolute cwd for the subprocess driver. Ignored by docker driver. */\n cwd?: string\n /** Max wall-clock per phase in ms. Default 10 minutes. */\n timeoutMs?: number\n /**\n * Cap on captured stdout+stderr bytes per phase. A runaway process can\n * otherwise grow the in-memory buffer without bound. Once hit, further\n * output is dropped and `outputTruncated` is set. Default 16 MiB.\n */\n maxOutputBytes?: number\n /** Image for the docker driver. */\n image?: string\n /** Extra env vars (validated; shell-escaped). */\n env?: Record<string, string>\n /** Parser for the test output — maps stdout/stderr/exit code → pass count. */\n testParser?: TestOutputParser\n}\n\nexport interface TestOutputParser {\n id: string\n parse(\n stdout: string,\n stderr: string,\n exitCode: number,\n ): { testsTotal: number; testsPassed: number } | undefined\n}\n\nexport interface SandboxResult {\n phase: 'setup' | 'run' | 'test'\n exitCode: number\n stdout: string\n stderr: string\n wallMs: number\n testsTotal?: number\n testsPassed?: number\n /**\n * True when the process was killed because it exceeded `timeoutMs`. A\n * SIGKILLed child can still close with exit code 0; callers MUST treat\n * a timed-out phase as a hard failure regardless of `exitCode`, never\n * as a pass. `undefined`/`false` means the process completed on its own.\n */\n killedByTimeout?: boolean\n /**\n * True when captured stdout/stderr hit `maxOutputBytes` and further\n * output was dropped. The result is still returned (the process was\n * not killed for this), but downstream parsers see truncated text.\n */\n outputTruncated?: boolean\n}\n\nexport interface SandboxDriver {\n id: string\n exec(\n phase: SandboxResult['phase'],\n command: string,\n config: HarnessConfig,\n ): Promise<SandboxResult>\n}\n\n// ── Parsers ──────────────────────────────────────────────────────────\n\n/** Vitest default summary line: \"Tests X passed | Y failed\". */\nexport const vitestTestParser: TestOutputParser = {\n id: 'vitest',\n parse(stdout) {\n const m = stdout.match(/Tests\\s+(\\d+)\\s+(passed|failed)(?:\\s*\\|\\s*(\\d+)\\s+(passed|failed))?/i)\n if (!m) return undefined\n let passed = 0\n let failed = 0\n const a = parseInt(m[1]!, 10)\n const aLabel = m[2]!.toLowerCase()\n if (aLabel === 'passed') passed += a\n else failed += a\n if (m[3] && m[4]) {\n const b = parseInt(m[3], 10)\n if (m[4].toLowerCase() === 'passed') passed += b\n else failed += b\n }\n return { testsTotal: passed + failed, testsPassed: passed }\n },\n}\n\n/** Pytest default: \"collected N items\" + \" X passed, Y failed\". */\nexport const pytestTestParser: TestOutputParser = {\n id: 'pytest',\n parse(stdout) {\n const total = stdout.match(/collected\\s+(\\d+)\\s+items?/i)\n const passed = stdout.match(/(\\d+)\\s+passed/)\n if (!total || !passed) return undefined\n return { testsTotal: parseInt(total[1]!, 10), testsPassed: parseInt(passed[1]!, 10) }\n },\n}\n\n/** Jest: \"Tests: X passed, Y total\" (and optional failed). */\nexport const jestTestParser: TestOutputParser = {\n id: 'jest',\n parse(stdout) {\n const m = stdout.match(/Tests:\\s+(?:(\\d+)\\s+failed[^,]*,\\s*)?(\\d+)\\s+passed,\\s+(\\d+)\\s+total/i)\n if (!m) return undefined\n return { testsTotal: parseInt(m[3]!, 10), testsPassed: parseInt(m[2]!, 10) }\n },\n}\n\n/** Composite parser — tries a list of parsers in order. */\nexport function composeParsers(...parsers: TestOutputParser[]): TestOutputParser {\n return {\n id: parsers.map((p) => p.id).join('|'),\n parse(stdout, stderr, exitCode) {\n for (const p of parsers) {\n const res = p.parse(stdout, stderr, exitCode)\n if (res) return res\n }\n return undefined\n },\n }\n}\n\n// ── Drivers ──────────────────────────────────────────────────────────\n\nexport interface SubprocessSandboxDriverOptions {\n /**\n * Default cwd for all `exec` calls. Used when the per-call `HarnessConfig`\n * does not set its own `cwd`. Lets callers bind the driver to a working\n * directory once instead of spreading cwd into every harness config —\n * useful when the harness config is constructed far from the call site\n * (e.g. starter-foundry's promoter passes a static HarnessConfig per\n * family taxonomy but needs a per-run composed-scaffold cwd).\n */\n cwd?: string\n /**\n * Default env merged into every `exec` call's env (per-call `HarnessConfig.env`\n * still wins on key collision). Same ergonomic rationale as `cwd` above.\n */\n env?: Record<string, string>\n}\n\nexport class SubprocessSandboxDriver implements SandboxDriver {\n id = 'subprocess'\n private defaultCwd?: string\n private defaultEnv?: Record<string, string>\n\n constructor(options: SubprocessSandboxDriverOptions = {}) {\n this.defaultCwd = options.cwd\n this.defaultEnv = options.env\n }\n\n async exec(\n phase: SandboxResult['phase'],\n command: string,\n config: HarnessConfig,\n ): Promise<SandboxResult> {\n const { spawn } = await import('node:child_process')\n const start = Date.now()\n // Per-call config wins; fall back to constructor defaults. Honoring\n // the constructor `cwd` keeps the subprocess from inheriting Node's\n // cwd when only the constructor arg is supplied.\n const effectiveCwd = config.cwd ?? this.defaultCwd\n const effectiveEnv = { ...process.env, ...(this.defaultEnv ?? {}), ...(config.env ?? {}) }\n const maxOutputBytes = config.maxOutputBytes ?? 16 * 1024 * 1024\n return await new Promise<SandboxResult>((resolve) => {\n const child = spawn(command, {\n shell: true,\n cwd: effectiveCwd,\n env: effectiveEnv,\n // Own process group so a timeout can SIGKILL the whole tree, not\n // just the shell — otherwise a runaway grandchild keeps the pipes\n // open and `close` never fires (the timeout silently does nothing).\n detached: process.platform !== 'win32',\n })\n let stdout = ''\n let stderr = ''\n let outputBytes = 0\n let outputTruncated = false\n let killedByTimeout = false\n let settled = false\n\n const onStdout = (d: unknown) => {\n const chunk = capture(String(d))\n if (chunk) stdout += chunk\n }\n const onStderr = (d: unknown) => {\n const chunk = capture(String(d))\n if (chunk) stderr += chunk\n }\n // Bound the in-memory buffer so a runaway process can't OOM the\n // harness. Once the cap is hit we keep draining the streams (to let\n // the child reach `close`) but discard the bytes.\n function capture(s: string): string {\n if (outputBytes >= maxOutputBytes) {\n outputTruncated = true\n return ''\n }\n const room = maxOutputBytes - outputBytes\n if (s.length > room) {\n outputBytes = maxOutputBytes\n outputTruncated = true\n return s.slice(0, room)\n }\n outputBytes += s.length\n return s\n }\n\n child.stdout?.on('data', onStdout)\n child.stderr?.on('data', onStderr)\n\n const cleanup = () => {\n clearTimeout(timeout)\n if (forceResolve) clearTimeout(forceResolve)\n child.stdout?.off('data', onStdout)\n child.stderr?.off('data', onStderr)\n child.removeAllListeners('close')\n child.removeAllListeners('error')\n }\n\n // Resolve exactly once. `code`/`signal` come from `close`; on the\n // timeout path we force a non-zero exit so a SIGKILLed child that\n // reports exit 0 can never read as a clean pass downstream.\n const finish = (outcome: { code: number | null; runnerError?: string }) => {\n if (settled) return\n settled = true\n cleanup()\n const wallMs = Date.now() - start\n const exitCode = killedByTimeout\n ? outcome.code && outcome.code !== 0\n ? outcome.code\n : 124\n : (outcome.code ?? 1)\n const parsed =\n !killedByTimeout && phase === 'test' && config.testParser\n ? config.testParser.parse(stdout, stderr, exitCode)\n : undefined\n resolve({\n phase,\n exitCode,\n stdout,\n stderr: outcome.runnerError ? stderr + outcome.runnerError : stderr,\n wallMs,\n testsTotal: parsed?.testsTotal,\n testsPassed: parsed?.testsPassed,\n killedByTimeout: killedByTimeout || undefined,\n outputTruncated: outputTruncated || undefined,\n })\n }\n\n // Kill the whole process group on win32-less platforms (we spawned\n // detached). On a clean close this is a no-op.\n const killTree = () => {\n try {\n if (process.platform !== 'win32' && typeof child.pid === 'number') {\n process.kill(-child.pid, 'SIGKILL')\n } else {\n child.kill('SIGKILL')\n }\n } catch (err) {\n console.warn('[sandbox-harness] SIGKILL on timeout failed:', err)\n }\n }\n\n let forceResolve: ReturnType<typeof setTimeout> | undefined\n const timeout = setTimeout(\n () => {\n killedByTimeout = true\n killTree()\n // Give `close` a brief window to fire (flushing any final output)\n // after the group dies; if an orphaned grandchild keeps the pipes\n // open, force-resolve so the harness can't hang on a runaway.\n forceResolve = setTimeout(() => finish({ code: null }), 2000)\n },\n config.timeoutMs ?? 10 * 60_000,\n )\n\n child.on('close', (code) => {\n if (forceResolve) clearTimeout(forceResolve)\n finish({ code })\n })\n child.on('error', (err) => {\n if (forceResolve) clearTimeout(forceResolve)\n finish({ code: 127, runnerError: String(err) })\n })\n })\n }\n}\n\nexport class DockerSandboxDriver implements SandboxDriver {\n id = 'docker'\n\n async exec(\n phase: SandboxResult['phase'],\n command: string,\n config: HarnessConfig,\n ): Promise<SandboxResult> {\n if (!config.image) throw new ConfigError('DockerSandboxDriver requires config.image')\n const sub = new SubprocessSandboxDriver()\n const envArgs = Object.entries(config.env ?? {})\n .map(([k, v]) => `-e ${shellQuote(k)}=${shellQuote(v)}`)\n .join(' ')\n const wrapped = `docker run --rm ${envArgs} ${shellQuote(config.image)} sh -c ${shellQuote(command)}`\n return sub.exec(phase, wrapped, { ...config, env: undefined })\n }\n}\n\nfunction shellQuote(v: string): string {\n if (/^[A-Za-z0-9_\\-/.@:=]+$/.test(v)) return v\n return `'${v.replace(/'/g, `'\\\\''`)}'`\n}\n\n// ── Harness orchestration ────────────────────────────────────────────\n\nexport interface SandboxHarnessResult {\n passed: boolean\n setup?: SandboxResult\n run?: SandboxResult\n test?: SandboxResult\n totalWallMs: number\n /** Final score — 0 when no tests; otherwise testsPassed/testsTotal. */\n score: number\n}\n\nexport class SandboxHarness {\n private driver: SandboxDriver\n constructor(driver: SandboxDriver = new SubprocessSandboxDriver()) {\n this.driver = driver\n }\n\n async run(config: HarnessConfig, emitter: TraceEmitter): Promise<SandboxHarnessResult> {\n const handle = await emitter.sandbox({\n name: `sandbox(${this.driver.id})`,\n image: config.image,\n command: [config.setupCommand, config.runCommand, config.testCommand]\n .filter(Boolean)\n .join(' && '),\n })\n const result: SandboxHarnessResult = { passed: false, totalWallMs: 0, score: 0 }\n try {\n if (config.setupCommand) {\n result.setup = await this.driver.exec('setup', config.setupCommand, config)\n result.totalWallMs += result.setup.wallMs\n if (result.setup.killedByTimeout || result.setup.exitCode !== 0) {\n const reason = result.setup.killedByTimeout\n ? `setup timed out after ${result.setup.wallMs}ms`\n : `setup failed (exit ${result.setup.exitCode})`\n await handle.fail(reason, {\n exitCode: result.setup.exitCode,\n wallMs: result.totalWallMs,\n } as Partial<SandboxSpan>)\n return result\n }\n }\n if (config.runCommand) {\n result.run = await this.driver.exec('run', config.runCommand, config)\n result.totalWallMs += result.run.wallMs\n if (result.run.killedByTimeout || result.run.exitCode !== 0) {\n const reason = result.run.killedByTimeout\n ? `run timed out after ${result.run.wallMs}ms`\n : `run failed (exit ${result.run.exitCode})`\n await handle.fail(reason, {\n exitCode: result.run.exitCode,\n wallMs: result.totalWallMs,\n } as Partial<SandboxSpan>)\n return result\n }\n }\n if (config.testCommand) {\n result.test = await this.driver.exec('test', config.testCommand, config)\n result.totalWallMs += result.test.wallMs\n // A timed-out test phase is a hard fail regardless of the exit code\n // a SIGKILLed child happens to report — never let it score as a pass.\n const passed = !result.test.killedByTimeout && result.test.exitCode === 0\n result.passed = passed\n if (result.test.testsTotal !== undefined && result.test.testsTotal > 0) {\n result.score = (result.test.testsPassed ?? 0) / result.test.testsTotal\n } else {\n result.score = passed ? 1 : 0\n }\n await handle.end({\n exitCode: result.test.exitCode,\n testsTotal: result.test.testsTotal,\n testsPassed: result.test.testsPassed,\n wallMs: result.totalWallMs,\n status: passed ? 'ok' : 'error',\n } as Partial<SandboxSpan>)\n } else {\n result.passed = true\n result.score = 1\n await handle.end({ wallMs: result.totalWallMs } as Partial<SandboxSpan>)\n }\n } catch (err) {\n await handle.fail(err instanceof Error ? err : String(err))\n throw err\n }\n return result\n }\n}\n","/**\n * TestGradedScenario — a scenario whose score comes from a test suite.\n *\n * This is the SWE-bench pattern generalized. The scenario ships:\n * - fixture data (setup instructions)\n * - a test command the harness runs\n * - optional assertion overrides\n *\n * The runner emits a run, delegates to SandboxHarness, records the\n * outcome, and returns a structured verdict. Consumers bind their own\n * agent execution to this contract.\n */\n\nimport type { HarnessConfig, SandboxDriver, SandboxHarnessResult } from './sandbox-harness'\nimport { SandboxHarness } from './sandbox-harness'\nimport { TraceEmitter } from './trace/emitter'\nimport type { FailureClass, Run } from './trace/schema'\nimport type { TraceStore } from './trace/store'\n\nexport interface TestGradedScenario {\n id: string\n description?: string\n harness: HarnessConfig\n /** Optional pass threshold in 0..1 (default 1.0 = all tests must pass). */\n passThreshold?: number\n /** Provenance for dataset tracking. */\n datasetVersion?: string\n /** Free-form tags (difficulty, category, etc.). */\n tags?: Record<string, string>\n}\n\nexport interface TestGradedRunOptions {\n variantId?: string\n driver?: SandboxDriver\n /** Metadata recorded on the Run (codeSha, promptSha, modelFingerprint, seed). */\n provenance?: Pick<Run, 'codeSha' | 'promptSha' | 'modelFingerprint' | 'seed' | 'envFingerprint'>\n}\n\nexport interface TestGradedRunResult {\n runId: string\n scenario: TestGradedScenario\n harness: SandboxHarnessResult\n pass: boolean\n score: number\n failureClass?: FailureClass\n}\n\nexport async function runTestGradedScenario(\n scenario: TestGradedScenario,\n store: TraceStore,\n options: TestGradedRunOptions = {},\n): Promise<TestGradedRunResult> {\n const emitter = new TraceEmitter(store)\n await emitter.startRun({\n scenarioId: scenario.id,\n variantId: options.variantId,\n datasetVersion: scenario.datasetVersion,\n tags: scenario.tags,\n ...options.provenance,\n })\n const harness = new SandboxHarness(options.driver)\n const result = await harness.run(scenario.harness, emitter)\n const threshold = scenario.passThreshold ?? 1.0\n const pass = result.passed && result.score >= threshold\n const setupFailed = result.setup !== undefined && result.setup.exitCode !== 0\n const runFailed = result.run !== undefined && result.run.exitCode !== 0\n const testFailed = result.test !== undefined && result.test.exitCode !== 0\n const failureClass: FailureClass | undefined = pass\n ? 'success'\n : setupFailed || runFailed\n ? 'sandbox_failure'\n : testFailed\n ? 'format_drift'\n : 'unknown'\n await emitter.endRun({\n pass,\n score: result.score,\n failureClass,\n notes: pass ? undefined : reasonForFailure(result),\n })\n return {\n runId: emitter.runId,\n scenario,\n harness: result,\n pass,\n score: result.score,\n failureClass,\n }\n}\n\nfunction reasonForFailure(result: SandboxHarnessResult): string {\n if (result.setup && result.setup.exitCode !== 0)\n return `setup failed: exit ${result.setup.exitCode}`\n if (result.run && result.run.exitCode !== 0) return `run failed: exit ${result.run.exitCode}`\n if (result.test) {\n if (result.test.testsTotal !== undefined) {\n return `tests: ${result.test.testsPassed ?? 0}/${result.test.testsTotal}`\n }\n return `test exit ${result.test.exitCode}`\n }\n return 'no test command'\n}\n","/**\n * BuilderSession — ties a builder-of-builders workflow together.\n *\n * Models agent-builder's shape: Project → Chat → Edit → Ship → App →\n * AppAgent. Each layer is a Run (linked via parentRunId). The\n * framework-enforced invariants:\n *\n * - One Project → many Chats; chatId scopes runs within a project.\n * - One Chat = one builder Run with `layer='builder'`.\n * - One Ship = one child Run with `layer='app-build'` + SandboxHarness.\n * - One AppScenario = one grandchild Run with `layer='app-runtime'`.\n *\n * Consumers obtain a BuilderSession, call `startChat`, drive the\n * builder agent (emitting spans), and call `ship` / `runAppScenario`\n * as the workflow progresses. The session reconstructs itself from\n * trace data via `resume(store, projectId)`.\n */\n\nimport type { HarnessConfig, SandboxDriver, SandboxHarnessResult } from '../sandbox-harness'\nimport { SandboxHarness } from '../sandbox-harness'\nimport type { TestGradedRunResult, TestGradedScenario } from '../test-graded-scenario'\nimport { runTestGradedScenario } from '../test-graded-scenario'\nimport { TraceEmitter } from '../trace/emitter'\nimport type { Run } from '../trace/schema'\nimport type { TraceStore } from '../trace/store'\n\nexport interface BuilderSessionInit {\n projectId: string\n chatId?: string\n /** Free-form: user's task description, project name, etc. Stored on the builder Run. */\n tags?: Record<string, string>\n}\n\nexport interface ShipOptions {\n harness: HarnessConfig\n driver?: SandboxDriver\n /** scenarioId of this app-build run. Defaults to `${projectId}/build`. */\n scenarioId?: string\n}\n\nexport interface RunAppScenarioOptions {\n scenario: TestGradedScenario\n /** Harness driver override; defaults to the one the session was created with. */\n driver?: SandboxDriver\n}\n\nexport class BuilderSession {\n private store: TraceStore\n private builderEmitter: TraceEmitter\n readonly projectId: string\n readonly chatId: string\n private builderRunId?: string\n private lastBuildRunId?: string\n private defaultDriver?: SandboxDriver\n\n constructor(store: TraceStore, init: BuilderSessionInit, driver?: SandboxDriver) {\n this.store = store\n this.projectId = init.projectId\n this.chatId = init.chatId ?? cryptoId()\n this.defaultDriver = driver\n this.builderEmitter = new TraceEmitter(store)\n }\n\n /** Start the builder (L0) run for this chat. Returns the runId. */\n async startChat(scenarioId = `${this.projectId}/chat`): Promise<string> {\n await this.builderEmitter.startRun({\n scenarioId,\n projectId: this.projectId,\n chatId: this.chatId,\n layer: 'builder',\n })\n this.builderRunId = this.builderEmitter.runId\n return this.builderRunId\n }\n\n /** The emitter for builder-level spans (edits, LLM calls, tool invocations). */\n get emitter(): TraceEmitter {\n if (!this.builderRunId) throw new Error('BuilderSession.emitter: call startChat() first')\n return this.builderEmitter\n }\n\n /**\n * Ship the project's generated app: run the sandbox harness as a child\n * Run (`layer='app-build'`). Returns the build result + runId.\n */\n async ship(options: ShipOptions): Promise<{ runId: string; result: SandboxHarnessResult }> {\n if (!this.builderRunId) throw new Error('BuilderSession.ship: call startChat() first')\n const buildEmitter = new TraceEmitter(this.store)\n await buildEmitter.startRun({\n scenarioId: options.scenarioId ?? `${this.projectId}/build`,\n projectId: this.projectId,\n chatId: this.chatId,\n parentRunId: this.builderRunId,\n layer: 'app-build',\n })\n const harness = new SandboxHarness(options.driver ?? this.defaultDriver)\n const result = await harness.run(options.harness, buildEmitter)\n await buildEmitter.endRun({\n pass: result.passed,\n score: result.score,\n failureClass: result.passed ? 'success' : 'sandbox_failure',\n })\n this.lastBuildRunId = buildEmitter.runId\n return { runId: buildEmitter.runId, result }\n }\n\n /**\n * Run a domain scenario against the just-built app as a grandchild Run\n * (`layer='app-runtime'`). The `ship` call must precede this so the\n * parent is set correctly; if no build exists yet the session attaches\n * directly to the builder run (useful for prototypes).\n */\n async runAppScenario(options: RunAppScenarioOptions): Promise<TestGradedRunResult> {\n const parentRunId = this.lastBuildRunId ?? this.builderRunId\n if (!parentRunId)\n throw new Error('BuilderSession.runAppScenario: call startChat() + ship() first')\n const { scenario, driver } = options\n const result = await runTestGradedScenario(scenario, this.store, {\n driver: driver ?? this.defaultDriver,\n provenance: { codeSha: undefined, promptSha: undefined, modelFingerprint: undefined },\n })\n // Attach to the parent chain by updating the stored Run in place.\n await this.store.updateRun(result.runId, {\n parentRunId,\n projectId: this.projectId,\n chatId: this.chatId,\n layer: 'app-runtime',\n })\n return result\n }\n\n /** Record an end-of-chat meta score (judge verdict on whether the builder\n * served the user's intent). Accepts a numeric score + optional rationale. */\n async recordMetaScore(score: number, rationale?: string): Promise<void> {\n if (!this.builderRunId)\n throw new Error('BuilderSession.recordMetaScore: call startChat() first')\n await this.builderEmitter.recordJudge({\n judgeId: 'builder-meta',\n targetSpanId: this.builderRunId, // attach to the builder run itself\n dimension: 'user_intent_satisfaction',\n score,\n rationale,\n name: 'builder-meta',\n })\n }\n\n /** Close the builder Run with a final outcome. */\n async endChat(outcome: { pass: boolean; score?: number; notes?: string }): Promise<void> {\n await this.builderEmitter.endRun({\n pass: outcome.pass,\n score: outcome.score,\n notes: outcome.notes,\n })\n }\n\n /**\n * Inline app-runtime run — for cases where the \"scenario\" isn't a\n * SWE-bench-style test suite but a live agent interaction (LLM chat,\n * domain flow). Returns an emitter bound to a fresh Run in the\n * `app-runtime` layer; caller emits spans inside and calls\n * `.endRun()` with the final verdict.\n */\n async startAppRuntime(scenarioId: string): Promise<TraceEmitter> {\n const parentRunId = this.lastBuildRunId ?? this.builderRunId\n if (!parentRunId)\n throw new Error(\n 'BuilderSession.startAppRuntime: call startChat() + (optionally) ship() first',\n )\n const emitter = new TraceEmitter(this.store)\n await emitter.startRun({\n scenarioId,\n projectId: this.projectId,\n chatId: this.chatId,\n parentRunId,\n layer: 'app-runtime',\n })\n return emitter\n }\n\n /**\n * Lightweight \"ship marker\" — record an app-build Run with a caller-\n * provided verdict. Use when there isn't a sandbox harness to run but\n * you still want to mark the build state at publish time.\n */\n async recordShipMarker(args: {\n pass: boolean\n score: number\n scenarioId?: string\n notes?: string\n }): Promise<string> {\n if (!this.builderRunId)\n throw new Error('BuilderSession.recordShipMarker: call startChat() first')\n const emitter = new TraceEmitter(this.store)\n await emitter.startRun({\n scenarioId: args.scenarioId ?? `${this.projectId}/ship`,\n projectId: this.projectId,\n chatId: this.chatId,\n parentRunId: this.builderRunId,\n layer: 'app-build',\n })\n await emitter.endRun({\n pass: args.pass,\n score: args.score,\n failureClass: args.pass ? 'success' : 'sandbox_failure',\n notes: args.notes,\n })\n this.lastBuildRunId = emitter.runId\n return emitter.runId\n }\n\n get lastBuildRunIdValue(): string | undefined {\n return this.lastBuildRunId\n }\n get builderRunIdValue(): string | undefined {\n return this.builderRunId\n }\n}\n\n/**\n * Reconstruct the most recent BuilderSession state for a given project —\n * returns { builderRunId, lastBuildRunId, chatRuns }. For chat-first UIs\n * this is how a resumed session finds its place in the edit history.\n */\nexport async function resumeBuilderSession(\n store: TraceStore,\n projectId: string,\n): Promise<{\n projectId: string\n chatRuns: Run[]\n lastBuilderRun?: Run\n lastBuildRun?: Run\n lastAppRuntimeRuns: Run[]\n}> {\n const runs = await store.listRuns({ projectId })\n const chatRuns = runs\n .filter((r) => r.layer === 'builder')\n .sort((a, b) => b.startedAt - a.startedAt)\n const buildRuns = runs\n .filter((r) => r.layer === 'app-build')\n .sort((a, b) => b.startedAt - a.startedAt)\n const appRuntimeRuns = runs\n .filter((r) => r.layer === 'app-runtime')\n .sort((a, b) => b.startedAt - a.startedAt)\n return {\n projectId,\n chatRuns,\n lastBuilderRun: chatRuns[0],\n lastBuildRun: buildRuns[0],\n lastAppRuntimeRuns: appRuntimeRuns,\n }\n}\n\nfunction cryptoId(): string {\n if (typeof globalThis.crypto?.randomUUID === 'function') return globalThis.crypto.randomUUID()\n return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`\n}\n","/**\n * Meta-eval correlation — the highest-leverage signal in the framework.\n *\n * Given a corpus of three-layer project reports, compute how well each\n * pair of layers correlates. The question we care about most:\n *\n * Does `metaScore` (what the builder thinks it did) predict\n * `runtimeScore` (what the user actually gets)?\n *\n * If r < ~0.4, the builder's self-scoring is broken — it's optimizing\n * for something other than real-world success. If r > 0.7, meta_score\n * is a usable proxy and can drive CI gates cheaply.\n *\n * Non-parametric rank correlation (Spearman) is also reported because\n * meta scores are often ordinal-ish.\n */\n\nimport { pearsonR, spearmanR } from '../statistics'\nimport type { ThreeLayerProjectReport } from './three-layer-eval'\n\nexport interface LayerCorrelation {\n n: number\n pearson: number\n spearman: number\n}\n\nexport interface CorrelationReport {\n /** Pairs present in the corpus (layers with ≥ 2 matched data points). */\n metaVsBuild?: LayerCorrelation\n metaVsRuntime?: LayerCorrelation\n buildVsRuntime?: LayerCorrelation\n /** Number of complete projects (all 3 scores present). */\n completeProjects: number\n}\n\nexport function correlateLayers(reports: ThreeLayerProjectReport[]): CorrelationReport {\n const completeProjects = reports.filter((r) => r.complete).length\n return {\n metaVsBuild: pairwise(\n reports,\n (r) => r.metaScore,\n (r) => r.buildScore,\n ),\n metaVsRuntime: pairwise(\n reports,\n (r) => r.metaScore,\n (r) => r.runtimeScore,\n ),\n buildVsRuntime: pairwise(\n reports,\n (r) => r.buildScore,\n (r) => r.runtimeScore,\n ),\n completeProjects,\n }\n}\n\nfunction pairwise(\n reports: ThreeLayerProjectReport[],\n a: (r: ThreeLayerProjectReport) => number | null,\n b: (r: ThreeLayerProjectReport) => number | null,\n): LayerCorrelation | undefined {\n const xs: number[] = []\n const ys: number[] = []\n for (const r of reports) {\n const x = a(r)\n const y = b(r)\n if (x !== null && y !== null && Number.isFinite(x) && Number.isFinite(y)) {\n xs.push(x)\n ys.push(y)\n }\n }\n if (xs.length < 2) return undefined\n return {\n n: xs.length,\n pearson: pearsonR(xs, ys),\n spearman: spearmanR(xs, ys),\n }\n}\n","/**\n * ProjectRegistry — project-level aggregation over the trace corpus.\n *\n * Thin reader over TraceStore that answers the questions a chat-first,\n * resumable UI needs:\n * - listProjects() → project IDs with latest activity\n * - projectTimeline(id) → chats + builds + runtime runs, chronological\n * - projectChats(id) → chat-level summaries (turn count, outcome)\n *\n * All queries are pure reads; no state duplication.\n */\n\nimport type { Run } from '../trace/schema'\nimport type { TraceStore } from '../trace/store'\n\nexport interface ProjectSummary {\n projectId: string\n chatCount: number\n buildCount: number\n appRuntimeCount: number\n lastActivityAt: number\n latestChatId?: string\n latestOutcome?: { pass: boolean; score?: number }\n}\n\nexport interface ChatSummary {\n chatId: string\n projectId: string\n builderRunId: string\n startedAt: number\n endedAt?: number\n status: Run['status']\n outcome?: Run['outcome']\n /** Counts of spans emitted during the chat. */\n llmTurns?: number\n toolCalls?: number\n buildRunId?: string\n appRuntimeRunIds: string[]\n}\n\nexport interface ProjectTimelineEntry {\n run: Run\n layerBucket: 'chat' | 'build' | 'runtime' | 'other'\n}\n\nexport class ProjectRegistry {\n constructor(private store: TraceStore) {}\n\n async listProjects(): Promise<ProjectSummary[]> {\n const runs = await this.store.listRuns()\n const byProject = new Map<string, Run[]>()\n for (const r of runs) {\n if (!r.projectId) continue\n const arr = byProject.get(r.projectId) ?? []\n arr.push(r)\n byProject.set(r.projectId, arr)\n }\n const summaries: ProjectSummary[] = []\n for (const [projectId, projectRuns] of byProject) {\n const sorted = projectRuns.slice().sort((a, b) => b.startedAt - a.startedAt)\n const chats = projectRuns.filter((r) => r.layer === 'builder')\n const builds = projectRuns.filter((r) => r.layer === 'app-build')\n const runtimes = projectRuns.filter((r) => r.layer === 'app-runtime')\n const latest = sorted[0]\n if (!latest) continue\n summaries.push({\n projectId,\n chatCount: chats.length,\n buildCount: builds.length,\n appRuntimeCount: runtimes.length,\n lastActivityAt: latest.startedAt,\n latestChatId: chats[0]?.chatId,\n latestOutcome: latest.outcome\n ? { pass: latest.outcome.pass ?? false, score: latest.outcome.score }\n : undefined,\n })\n }\n return summaries.sort((a, b) => b.lastActivityAt - a.lastActivityAt)\n }\n\n async projectTimeline(projectId: string): Promise<ProjectTimelineEntry[]> {\n const runs = await this.store.listRuns({ projectId })\n const ordered = runs.slice().sort((a, b) => a.startedAt - b.startedAt)\n return ordered.map((run) => ({\n run,\n layerBucket:\n run.layer === 'builder'\n ? 'chat'\n : run.layer === 'app-build'\n ? 'build'\n : run.layer === 'app-runtime'\n ? 'runtime'\n : 'other',\n }))\n }\n\n async projectChats(projectId: string): Promise<ChatSummary[]> {\n const builderRuns = (await this.store.listRuns({ projectId, layer: 'builder' })).sort(\n (a, b) => b.startedAt - a.startedAt,\n )\n const childrenFor = async (runId: string) => this.store.listRuns({ parentRunId: runId })\n const out: ChatSummary[] = []\n for (const run of builderRuns) {\n const spans = await this.store.spans({ runId: run.runId })\n const children = await childrenFor(run.runId)\n const build = children.find((c) => c.layer === 'app-build')\n const runtime: string[] = []\n // Runtime runs can be grandchildren (attached to the build) or siblings\n // when shipped skipped.\n if (build) {\n const grands = await childrenFor(build.runId)\n for (const g of grands) if (g.layer === 'app-runtime') runtime.push(g.runId)\n }\n for (const c of children) if (c.layer === 'app-runtime') runtime.push(c.runId)\n out.push({\n chatId: run.chatId ?? run.runId,\n projectId,\n builderRunId: run.runId,\n startedAt: run.startedAt,\n endedAt: run.endedAt,\n status: run.status,\n outcome: run.outcome,\n llmTurns: spans.filter((s) => s.kind === 'llm').length,\n toolCalls: spans.filter((s) => s.kind === 'tool').length,\n buildRunId: build?.runId,\n appRuntimeRunIds: runtime,\n })\n }\n return out\n }\n}\n","/**\n * Three-layer evaluation — the canonical scoring breakdown for\n * builder-of-builders workflows.\n *\n * meta_score: did the builder understand + satisfy user intent?\n * (judge verdict attached to the builder run)\n * build_score: did the generated scaffold build + pass its own tests?\n * (outcome.score on the app-build child run)\n * runtime_score: did the generated agent pass its domain scenarios?\n * (mean outcome.score over app-runtime grandchild runs)\n *\n * Returns a structured report per project. The cross-layer correlation\n * is the highest-leverage signal the framework computes — if\n * meta_score doesn't predict runtime_score, the builder's self-scoring\n * is broken.\n *\n * Scaffold-only mode: when a project has no `app-runtime` runs (e.g. a\n * scaffold-builder eval that grades compose + build without driving a\n * runtime scenario), `kind` is `'scaffold-only'` and `complete` measures\n * meta + build only. Consumers can tell the two apart without having to\n * interpret null-runtime as either \"not yet computed\" or \"N/A for this\n * project shape\".\n */\n\nimport { judgeSpans } from '../trace/query'\nimport type { Run } from '../trace/schema'\nimport type { TraceStore } from '../trace/store'\n\nexport type ProjectKind = 'full' | 'scaffold-only'\n\nexport interface ThreeLayerProjectReport {\n projectId: string\n /**\n * `'full'` when the project has at least one `app-runtime` run;\n * `'scaffold-only'` when it only has meta + build layers. Lets\n * downstream consumers treat a null runtime score as expected\n * (scaffold-only) vs. missing (full, pipeline broke).\n */\n kind: ProjectKind\n builderRunId?: string\n /** Judge-verdict score on the builder run (0..1 after normalization). */\n metaScore: number | null\n buildRunId?: string\n /** 0..1 from the sandbox harness (testsPassed / testsTotal). */\n buildScore: number | null\n appRuntimeRunIds: string[]\n /** Mean of outcome.score over app-runtime runs, 0..1. Always null in scaffold-only mode. */\n runtimeScore: number | null\n runtimePassRate: number | null\n /**\n * Layer-aware completeness:\n * - `kind='full'`: all three layers scored\n * - `kind='scaffold-only'`: meta + build scored (runtime not applicable)\n */\n complete: boolean\n}\n\nexport async function scoreProject(\n store: TraceStore,\n projectId: string,\n): Promise<ThreeLayerProjectReport> {\n const allRuns = await store.listRuns({ projectId })\n const builder = latestByLayer(allRuns, 'builder')\n const build = latestByLayer(allRuns, 'app-build')\n const runtime = allRuns.filter((r) => r.layer === 'app-runtime')\n\n const metaScore = builder ? await extractMetaScore(store, builder.runId) : null\n const buildScore = build?.outcome?.score ?? null\n const runtimeScores = runtime\n .map((r) => r.outcome?.score)\n .filter((s): s is number => typeof s === 'number')\n const runtimeScore =\n runtimeScores.length > 0\n ? runtimeScores.reduce((a, b) => a + b, 0) / runtimeScores.length\n : null\n const runtimePassed = runtime.filter((r) => r.outcome?.pass === true).length\n const runtimePassRate = runtime.length > 0 ? runtimePassed / runtime.length : null\n\n const kind: ProjectKind = runtime.length === 0 ? 'scaffold-only' : 'full'\n const complete =\n kind === 'scaffold-only'\n ? metaScore !== null && buildScore !== null\n : metaScore !== null && buildScore !== null && runtimeScore !== null\n\n return {\n projectId,\n kind,\n builderRunId: builder?.runId,\n metaScore,\n buildRunId: build?.runId,\n buildScore,\n appRuntimeRunIds: runtime.map((r) => r.runId),\n runtimeScore,\n runtimePassRate,\n complete,\n }\n}\n\n/** Aggregate scoring across every project in a corpus. */\nexport async function scoreAllProjects(store: TraceStore): Promise<ThreeLayerProjectReport[]> {\n const runs = await store.listRuns()\n const projectIds = [...new Set(runs.map((r) => r.projectId).filter((p): p is string => !!p))]\n return Promise.all(projectIds.map((p) => scoreProject(store, p)))\n}\n\nfunction latestByLayer(runs: Run[], layer: Run['layer']): Run | undefined {\n const filtered = runs.filter((r) => r.layer === layer).sort((a, b) => b.startedAt - a.startedAt)\n return filtered[0]\n}\n\nasync function extractMetaScore(store: TraceStore, builderRunId: string): Promise<number | null> {\n const js = await judgeSpans(store, builderRunId)\n const meta = js.find(\n (s) => s.judgeId === 'builder-meta' && s.dimension === 'user_intent_satisfaction',\n )\n if (!meta) return null\n // Normalize score to 0..1. Accept 0-1 natively; 0-10 scale is also common.\n if (meta.score >= 0 && meta.score <= 1) return meta.score\n if (meta.score >= 0 && meta.score <= 10) return meta.score / 10\n return null\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/sandbox-harness.ts","../../src/test-graded-scenario.ts","../../src/builder-eval/builder-session.ts","../../src/builder-eval/correlation.ts","../../src/builder-eval/project-registry.ts","../../src/builder-eval/three-layer-eval.ts"],"sourcesContent":["/**\n * SandboxHarness — executes a scenario in an isolated environment and\n * emits a rich SandboxSpan into the trace.\n *\n * Two built-in drivers:\n * - `SubprocessSandboxDriver` — spawn in a local cwd with env vars.\n * Fast, no dependencies, fine for unit tests and most CI gates.\n * - `DockerSandboxDriver` — lifted from tangle-router's sandbox path;\n * shells out to `docker run`. Stronger isolation, slower startup.\n *\n * Consumers implement `SandboxDriver` for custom backends (Firecracker,\n * Cloudflare sandbox product, etc.). The harness doesn't care which.\n */\n\nimport { ConfigError } from './errors'\nimport type { TraceEmitter } from './trace/emitter'\nimport type { SandboxSpan } from './trace/schema'\n\nexport interface HarnessConfig {\n /** Setup command (e.g. \"pnpm install\"). Non-zero exit fails the run. */\n setupCommand?: string\n /** Run command (e.g. \"pnpm build\"). */\n runCommand?: string\n /** Test command (e.g. \"pnpm test --run\"). Drives the test count + pass count. */\n testCommand?: string\n /** Absolute cwd for the subprocess driver. Ignored by docker driver. */\n cwd?: string\n /** Max wall-clock per phase in ms. Default 10 minutes. */\n timeoutMs?: number\n /**\n * Cap on captured stdout+stderr bytes per phase. A runaway process can\n * otherwise grow the in-memory buffer without bound. Once hit, further\n * output is dropped and `outputTruncated` is set. Default 16 MiB.\n */\n maxOutputBytes?: number\n /** Image for the docker driver. */\n image?: string\n /** Extra env vars (validated; shell-escaped). */\n env?: Record<string, string>\n /** Parser for the test output — maps stdout/stderr/exit code → pass count. */\n testParser?: TestOutputParser\n}\n\nexport interface TestOutputParser {\n id: string\n parse(\n stdout: string,\n stderr: string,\n exitCode: number,\n ): { testsTotal: number; testsPassed: number } | undefined\n}\n\nexport interface SandboxResult {\n phase: 'setup' | 'run' | 'test'\n exitCode: number\n stdout: string\n stderr: string\n wallMs: number\n testsTotal?: number\n testsPassed?: number\n /**\n * True when the process was killed because it exceeded `timeoutMs`. A\n * SIGKILLed child can still close with exit code 0; callers MUST treat\n * a timed-out phase as a hard failure regardless of `exitCode`, never\n * as a pass. `undefined`/`false` means the process completed on its own.\n */\n killedByTimeout?: boolean\n /**\n * True when captured stdout/stderr hit `maxOutputBytes` and further\n * output was dropped. The result is still returned (the process was\n * not killed for this), but downstream parsers see truncated text.\n */\n outputTruncated?: boolean\n}\n\nexport interface SandboxDriver {\n id: string\n exec(\n phase: SandboxResult['phase'],\n command: string,\n config: HarnessConfig,\n ): Promise<SandboxResult>\n}\n\n// ── Parsers ──────────────────────────────────────────────────────────\n\n/** Vitest default summary line: \"Tests X passed | Y failed\". */\nexport const vitestTestParser: TestOutputParser = {\n id: 'vitest',\n parse(stdout) {\n const m = stdout.match(/Tests\\s+(\\d+)\\s+(passed|failed)(?:\\s*\\|\\s*(\\d+)\\s+(passed|failed))?/i)\n if (!m) return undefined\n let passed = 0\n let failed = 0\n const a = parseInt(m[1]!, 10)\n const aLabel = m[2]!.toLowerCase()\n if (aLabel === 'passed') passed += a\n else failed += a\n if (m[3] && m[4]) {\n const b = parseInt(m[3], 10)\n if (m[4].toLowerCase() === 'passed') passed += b\n else failed += b\n }\n return { testsTotal: passed + failed, testsPassed: passed }\n },\n}\n\n/** Pytest default: \"collected N items\" + \" X passed, Y failed\". */\nexport const pytestTestParser: TestOutputParser = {\n id: 'pytest',\n parse(stdout) {\n const total = stdout.match(/collected\\s+(\\d+)\\s+items?/i)\n const passed = stdout.match(/(\\d+)\\s+passed/)\n if (!total || !passed) return undefined\n return { testsTotal: parseInt(total[1]!, 10), testsPassed: parseInt(passed[1]!, 10) }\n },\n}\n\n/** Jest: \"Tests: X passed, Y total\" (and optional failed). */\nexport const jestTestParser: TestOutputParser = {\n id: 'jest',\n parse(stdout) {\n const m = stdout.match(/Tests:\\s+(?:(\\d+)\\s+failed[^,]*,\\s*)?(\\d+)\\s+passed,\\s+(\\d+)\\s+total/i)\n if (!m) return undefined\n return { testsTotal: parseInt(m[3]!, 10), testsPassed: parseInt(m[2]!, 10) }\n },\n}\n\n/** Composite parser — tries a list of parsers in order. */\nexport function composeParsers(...parsers: TestOutputParser[]): TestOutputParser {\n return {\n id: parsers.map((p) => p.id).join('|'),\n parse(stdout, stderr, exitCode) {\n for (const p of parsers) {\n const res = p.parse(stdout, stderr, exitCode)\n if (res) return res\n }\n return undefined\n },\n }\n}\n\n// ── Drivers ──────────────────────────────────────────────────────────\n\nexport interface SubprocessSandboxDriverOptions {\n /**\n * Default cwd for all `exec` calls. Used when the per-call `HarnessConfig`\n * does not set its own `cwd`. Lets callers bind the driver to a working\n * directory once instead of spreading cwd into every harness config —\n * useful when the harness config is constructed far from the call site\n * (e.g. starter-foundry's promoter passes a static HarnessConfig per\n * family taxonomy but needs a per-run composed-scaffold cwd).\n */\n cwd?: string\n /**\n * Default env merged into every `exec` call's env (per-call `HarnessConfig.env`\n * still wins on key collision). Same ergonomic rationale as `cwd` above.\n */\n env?: Record<string, string>\n}\n\nexport class SubprocessSandboxDriver implements SandboxDriver {\n id = 'subprocess'\n private defaultCwd?: string\n private defaultEnv?: Record<string, string>\n\n constructor(options: SubprocessSandboxDriverOptions = {}) {\n this.defaultCwd = options.cwd\n this.defaultEnv = options.env\n }\n\n async exec(\n phase: SandboxResult['phase'],\n command: string,\n config: HarnessConfig,\n ): Promise<SandboxResult> {\n const { spawn } = await import('node:child_process')\n const start = Date.now()\n // Per-call config wins; fall back to constructor defaults. Honoring\n // the constructor `cwd` keeps the subprocess from inheriting Node's\n // cwd when only the constructor arg is supplied.\n const effectiveCwd = config.cwd ?? this.defaultCwd\n const effectiveEnv = { ...process.env, ...(this.defaultEnv ?? {}), ...(config.env ?? {}) }\n const maxOutputBytes = config.maxOutputBytes ?? 16 * 1024 * 1024\n return await new Promise<SandboxResult>((resolve) => {\n const child = spawn(command, {\n shell: true,\n cwd: effectiveCwd,\n env: effectiveEnv,\n // Own process group so a timeout can SIGKILL the whole tree, not\n // just the shell — otherwise a runaway grandchild keeps the pipes\n // open and `close` never fires (the timeout silently does nothing).\n detached: process.platform !== 'win32',\n })\n let stdout = ''\n let stderr = ''\n let outputBytes = 0\n let outputTruncated = false\n let killedByTimeout = false\n let settled = false\n\n const onStdout = (d: unknown) => {\n const chunk = capture(String(d))\n if (chunk) stdout += chunk\n }\n const onStderr = (d: unknown) => {\n const chunk = capture(String(d))\n if (chunk) stderr += chunk\n }\n // Bound the in-memory buffer so a runaway process can't OOM the\n // harness. Once the cap is hit we keep draining the streams (to let\n // the child reach `close`) but discard the bytes.\n function capture(s: string): string {\n if (outputBytes >= maxOutputBytes) {\n outputTruncated = true\n return ''\n }\n const room = maxOutputBytes - outputBytes\n if (s.length > room) {\n outputBytes = maxOutputBytes\n outputTruncated = true\n return s.slice(0, room)\n }\n outputBytes += s.length\n return s\n }\n\n child.stdout?.on('data', onStdout)\n child.stderr?.on('data', onStderr)\n\n const cleanup = () => {\n clearTimeout(timeout)\n if (forceResolve) clearTimeout(forceResolve)\n child.stdout?.off('data', onStdout)\n child.stderr?.off('data', onStderr)\n child.removeAllListeners('close')\n child.removeAllListeners('error')\n }\n\n // Resolve exactly once. `code`/`signal` come from `close`; on the\n // timeout path we force a non-zero exit so a SIGKILLed child that\n // reports exit 0 can never read as a clean pass downstream.\n const finish = (outcome: { code: number | null; runnerError?: string }) => {\n if (settled) return\n settled = true\n cleanup()\n const wallMs = Date.now() - start\n const exitCode = killedByTimeout\n ? outcome.code && outcome.code !== 0\n ? outcome.code\n : 124\n : (outcome.code ?? 1)\n const parsed =\n !killedByTimeout && phase === 'test' && config.testParser\n ? config.testParser.parse(stdout, stderr, exitCode)\n : undefined\n resolve({\n phase,\n exitCode,\n stdout,\n stderr: outcome.runnerError ? stderr + outcome.runnerError : stderr,\n wallMs,\n testsTotal: parsed?.testsTotal,\n testsPassed: parsed?.testsPassed,\n killedByTimeout: killedByTimeout || undefined,\n outputTruncated: outputTruncated || undefined,\n })\n }\n\n // Kill the whole process group on win32-less platforms (we spawned\n // detached). On a clean close this is a no-op.\n const killTree = () => {\n try {\n if (process.platform !== 'win32' && typeof child.pid === 'number') {\n process.kill(-child.pid, 'SIGKILL')\n } else {\n child.kill('SIGKILL')\n }\n } catch (err) {\n console.warn('[sandbox-harness] SIGKILL on timeout failed:', err)\n }\n }\n\n let forceResolve: ReturnType<typeof setTimeout> | undefined\n const timeout = setTimeout(\n () => {\n killedByTimeout = true\n killTree()\n // Give `close` a brief window to fire (flushing any final output)\n // after the group dies; if an orphaned grandchild keeps the pipes\n // open, force-resolve so the harness can't hang on a runaway.\n forceResolve = setTimeout(() => finish({ code: null }), 2000)\n },\n config.timeoutMs ?? 10 * 60_000,\n )\n\n child.on('close', (code) => {\n if (forceResolve) clearTimeout(forceResolve)\n finish({ code })\n })\n child.on('error', (err) => {\n if (forceResolve) clearTimeout(forceResolve)\n finish({ code: 127, runnerError: String(err) })\n })\n })\n }\n}\n\nexport class DockerSandboxDriver implements SandboxDriver {\n id = 'docker'\n\n async exec(\n phase: SandboxResult['phase'],\n command: string,\n config: HarnessConfig,\n ): Promise<SandboxResult> {\n if (!config.image) throw new ConfigError('DockerSandboxDriver requires config.image')\n const sub = new SubprocessSandboxDriver()\n const envArgs = Object.entries(config.env ?? {})\n .map(([k, v]) => `-e ${shellQuote(k)}=${shellQuote(v)}`)\n .join(' ')\n const wrapped = `docker run --rm ${envArgs} ${shellQuote(config.image)} sh -c ${shellQuote(command)}`\n return sub.exec(phase, wrapped, { ...config, env: undefined })\n }\n}\n\nfunction shellQuote(v: string): string {\n if (/^[A-Za-z0-9_\\-/.@:=]+$/.test(v)) return v\n return `'${v.replace(/'/g, `'\\\\''`)}'`\n}\n\n// ── Harness orchestration ────────────────────────────────────────────\n\nexport interface SandboxHarnessResult {\n passed: boolean\n setup?: SandboxResult\n run?: SandboxResult\n test?: SandboxResult\n totalWallMs: number\n /** Final score — 0 when no tests; otherwise testsPassed/testsTotal. */\n score: number\n}\n\nexport class SandboxHarness {\n private driver: SandboxDriver\n constructor(driver: SandboxDriver = new SubprocessSandboxDriver()) {\n this.driver = driver\n }\n\n async run(config: HarnessConfig, emitter: TraceEmitter): Promise<SandboxHarnessResult> {\n const handle = await emitter.sandbox({\n name: `sandbox(${this.driver.id})`,\n image: config.image,\n command: [config.setupCommand, config.runCommand, config.testCommand]\n .filter(Boolean)\n .join(' && '),\n })\n const result: SandboxHarnessResult = { passed: false, totalWallMs: 0, score: 0 }\n try {\n if (config.setupCommand) {\n result.setup = await this.driver.exec('setup', config.setupCommand, config)\n result.totalWallMs += result.setup.wallMs\n if (result.setup.killedByTimeout || result.setup.exitCode !== 0) {\n const reason = result.setup.killedByTimeout\n ? `setup timed out after ${result.setup.wallMs}ms`\n : `setup failed (exit ${result.setup.exitCode})`\n await handle.fail(reason, {\n exitCode: result.setup.exitCode,\n wallMs: result.totalWallMs,\n } as Partial<SandboxSpan>)\n return result\n }\n }\n if (config.runCommand) {\n result.run = await this.driver.exec('run', config.runCommand, config)\n result.totalWallMs += result.run.wallMs\n if (result.run.killedByTimeout || result.run.exitCode !== 0) {\n const reason = result.run.killedByTimeout\n ? `run timed out after ${result.run.wallMs}ms`\n : `run failed (exit ${result.run.exitCode})`\n await handle.fail(reason, {\n exitCode: result.run.exitCode,\n wallMs: result.totalWallMs,\n } as Partial<SandboxSpan>)\n return result\n }\n }\n if (config.testCommand) {\n result.test = await this.driver.exec('test', config.testCommand, config)\n result.totalWallMs += result.test.wallMs\n // A timed-out test phase is a hard fail regardless of the exit code\n // a SIGKILLed child happens to report — never let it score as a pass.\n const passed = !result.test.killedByTimeout && result.test.exitCode === 0\n result.passed = passed\n if (result.test.testsTotal !== undefined && result.test.testsTotal > 0) {\n result.score = (result.test.testsPassed ?? 0) / result.test.testsTotal\n } else {\n result.score = passed ? 1 : 0\n }\n await handle.end({\n exitCode: result.test.exitCode,\n testsTotal: result.test.testsTotal,\n testsPassed: result.test.testsPassed,\n wallMs: result.totalWallMs,\n status: passed ? 'ok' : 'error',\n } as Partial<SandboxSpan>)\n } else {\n result.passed = true\n result.score = 1\n await handle.end({ wallMs: result.totalWallMs } as Partial<SandboxSpan>)\n }\n } catch (err) {\n await handle.fail(err instanceof Error ? err : String(err))\n throw err\n }\n return result\n }\n}\n","/**\n * TestGradedScenario — a scenario whose score comes from a test suite.\n *\n * This is the SWE-bench pattern generalized. The scenario ships:\n * - fixture data (setup instructions)\n * - a test command the harness runs\n * - optional assertion overrides\n *\n * The runner emits a run, delegates to SandboxHarness, records the\n * outcome, and returns a structured verdict. Consumers bind their own\n * agent execution to this contract.\n */\n\nimport type { HarnessConfig, SandboxDriver, SandboxHarnessResult } from './sandbox-harness'\nimport { SandboxHarness } from './sandbox-harness'\nimport { TraceEmitter } from './trace/emitter'\nimport type { FailureClass, Run } from './trace/schema'\nimport type { TraceStore } from './trace/store'\n\nexport interface TestGradedScenario {\n id: string\n description?: string\n harness: HarnessConfig\n /** Optional pass threshold in 0..1 (default 1.0 = all tests must pass). */\n passThreshold?: number\n /** Provenance for dataset tracking. */\n datasetVersion?: string\n /** Free-form tags (difficulty, category, etc.). */\n tags?: Record<string, string>\n}\n\nexport interface TestGradedRunOptions {\n variantId?: string\n driver?: SandboxDriver\n /** Metadata recorded on the Run (codeSha, promptSha, modelFingerprint, seed). */\n provenance?: Pick<Run, 'codeSha' | 'promptSha' | 'modelFingerprint' | 'seed' | 'envFingerprint'>\n}\n\nexport interface TestGradedRunResult {\n runId: string\n scenario: TestGradedScenario\n harness: SandboxHarnessResult\n pass: boolean\n score: number\n failureClass?: FailureClass\n}\n\nexport async function runTestGradedScenario(\n scenario: TestGradedScenario,\n store: TraceStore,\n options: TestGradedRunOptions = {},\n): Promise<TestGradedRunResult> {\n const emitter = new TraceEmitter(store)\n await emitter.startRun({\n scenarioId: scenario.id,\n variantId: options.variantId,\n datasetVersion: scenario.datasetVersion,\n tags: scenario.tags,\n ...options.provenance,\n })\n const harness = new SandboxHarness(options.driver)\n const result = await harness.run(scenario.harness, emitter)\n const threshold = scenario.passThreshold ?? 1.0\n const pass = result.passed && result.score >= threshold\n const setupFailed = result.setup !== undefined && result.setup.exitCode !== 0\n const runFailed = result.run !== undefined && result.run.exitCode !== 0\n const testFailed = result.test !== undefined && result.test.exitCode !== 0\n const failureClass: FailureClass | undefined = pass\n ? 'success'\n : setupFailed || runFailed\n ? 'sandbox_failure'\n : testFailed\n ? 'format_drift'\n : 'unknown'\n await emitter.endRun({\n pass,\n score: result.score,\n failureClass,\n notes: pass ? undefined : reasonForFailure(result),\n })\n return {\n runId: emitter.runId,\n scenario,\n harness: result,\n pass,\n score: result.score,\n failureClass,\n }\n}\n\nfunction reasonForFailure(result: SandboxHarnessResult): string {\n if (result.setup && result.setup.exitCode !== 0)\n return `setup failed: exit ${result.setup.exitCode}`\n if (result.run && result.run.exitCode !== 0) return `run failed: exit ${result.run.exitCode}`\n if (result.test) {\n if (result.test.testsTotal !== undefined) {\n return `tests: ${result.test.testsPassed ?? 0}/${result.test.testsTotal}`\n }\n return `test exit ${result.test.exitCode}`\n }\n return 'no test command'\n}\n","/**\n * BuilderSession — ties a builder-of-builders workflow together.\n *\n * Models agent-builder's shape: Project → Chat → Edit → Ship → App →\n * AppAgent. Each layer is a Run (linked via parentRunId). The\n * framework-enforced invariants:\n *\n * - One Project → many Chats; chatId scopes runs within a project.\n * - One Chat = one builder Run with `layer='builder'`.\n * - One Ship = one child Run with `layer='app-build'` + SandboxHarness.\n * - One AppScenario = one grandchild Run with `layer='app-runtime'`.\n *\n * Consumers obtain a BuilderSession, call `startChat`, drive the\n * builder agent (emitting spans), and call `ship` / `runAppScenario`\n * as the workflow progresses. The session reconstructs itself from\n * trace data via `resume(store, projectId)`.\n */\n\nimport { newRecordId } from '../record-id'\nimport type { HarnessConfig, SandboxDriver, SandboxHarnessResult } from '../sandbox-harness'\nimport { SandboxHarness } from '../sandbox-harness'\nimport type { TestGradedRunResult, TestGradedScenario } from '../test-graded-scenario'\nimport { runTestGradedScenario } from '../test-graded-scenario'\nimport { TraceEmitter } from '../trace/emitter'\nimport type { Run } from '../trace/schema'\nimport type { TraceStore } from '../trace/store'\n\nexport interface BuilderSessionInit {\n projectId: string\n chatId?: string\n /** Free-form: user's task description, project name, etc. Stored on the builder Run. */\n tags?: Record<string, string>\n}\n\nexport interface ShipOptions {\n harness: HarnessConfig\n driver?: SandboxDriver\n /** scenarioId of this app-build run. Defaults to `${projectId}/build`. */\n scenarioId?: string\n}\n\nexport interface RunAppScenarioOptions {\n scenario: TestGradedScenario\n /** Harness driver override; defaults to the one the session was created with. */\n driver?: SandboxDriver\n}\n\nexport class BuilderSession {\n private store: TraceStore\n private builderEmitter: TraceEmitter\n readonly projectId: string\n readonly chatId: string\n private builderRunId?: string\n private lastBuildRunId?: string\n private defaultDriver?: SandboxDriver\n\n constructor(store: TraceStore, init: BuilderSessionInit, driver?: SandboxDriver) {\n this.store = store\n this.projectId = init.projectId\n this.chatId = init.chatId ?? newRecordId()\n this.defaultDriver = driver\n this.builderEmitter = new TraceEmitter(store)\n }\n\n /** Start the builder (L0) run for this chat. Returns the runId. */\n async startChat(scenarioId = `${this.projectId}/chat`): Promise<string> {\n await this.builderEmitter.startRun({\n scenarioId,\n projectId: this.projectId,\n chatId: this.chatId,\n layer: 'builder',\n })\n this.builderRunId = this.builderEmitter.runId\n return this.builderRunId\n }\n\n /** The emitter for builder-level spans (edits, LLM calls, tool invocations). */\n get emitter(): TraceEmitter {\n if (!this.builderRunId) throw new Error('BuilderSession.emitter: call startChat() first')\n return this.builderEmitter\n }\n\n /**\n * Ship the project's generated app: run the sandbox harness as a child\n * Run (`layer='app-build'`). Returns the build result + runId.\n */\n async ship(options: ShipOptions): Promise<{ runId: string; result: SandboxHarnessResult }> {\n if (!this.builderRunId) throw new Error('BuilderSession.ship: call startChat() first')\n const buildEmitter = new TraceEmitter(this.store)\n await buildEmitter.startRun({\n scenarioId: options.scenarioId ?? `${this.projectId}/build`,\n projectId: this.projectId,\n chatId: this.chatId,\n parentRunId: this.builderRunId,\n layer: 'app-build',\n })\n const harness = new SandboxHarness(options.driver ?? this.defaultDriver)\n const result = await harness.run(options.harness, buildEmitter)\n await buildEmitter.endRun({\n pass: result.passed,\n score: result.score,\n failureClass: result.passed ? 'success' : 'sandbox_failure',\n })\n this.lastBuildRunId = buildEmitter.runId\n return { runId: buildEmitter.runId, result }\n }\n\n /**\n * Run a domain scenario against the just-built app as a grandchild Run\n * (`layer='app-runtime'`). The `ship` call must precede this so the\n * parent is set correctly; if no build exists yet the session attaches\n * directly to the builder run (useful for prototypes).\n */\n async runAppScenario(options: RunAppScenarioOptions): Promise<TestGradedRunResult> {\n const parentRunId = this.lastBuildRunId ?? this.builderRunId\n if (!parentRunId)\n throw new Error('BuilderSession.runAppScenario: call startChat() + ship() first')\n const { scenario, driver } = options\n const result = await runTestGradedScenario(scenario, this.store, {\n driver: driver ?? this.defaultDriver,\n provenance: { codeSha: undefined, promptSha: undefined, modelFingerprint: undefined },\n })\n // Attach to the parent chain by updating the stored Run in place.\n await this.store.updateRun(result.runId, {\n parentRunId,\n projectId: this.projectId,\n chatId: this.chatId,\n layer: 'app-runtime',\n })\n return result\n }\n\n /** Record an end-of-chat meta score (judge verdict on whether the builder\n * served the user's intent). Accepts a numeric score + optional rationale. */\n async recordMetaScore(score: number, rationale?: string): Promise<void> {\n if (!this.builderRunId)\n throw new Error('BuilderSession.recordMetaScore: call startChat() first')\n await this.builderEmitter.recordJudge({\n judgeId: 'builder-meta',\n targetSpanId: this.builderRunId, // attach to the builder run itself\n dimension: 'user_intent_satisfaction',\n score,\n rationale,\n name: 'builder-meta',\n })\n }\n\n /** Close the builder Run with a final outcome. */\n async endChat(outcome: { pass: boolean; score?: number; notes?: string }): Promise<void> {\n await this.builderEmitter.endRun({\n pass: outcome.pass,\n score: outcome.score,\n notes: outcome.notes,\n })\n }\n\n /**\n * Inline app-runtime run — for cases where the \"scenario\" isn't a\n * SWE-bench-style test suite but a live agent interaction (LLM chat,\n * domain flow). Returns an emitter bound to a fresh Run in the\n * `app-runtime` layer; caller emits spans inside and calls\n * `.endRun()` with the final verdict.\n */\n async startAppRuntime(scenarioId: string): Promise<TraceEmitter> {\n const parentRunId = this.lastBuildRunId ?? this.builderRunId\n if (!parentRunId)\n throw new Error(\n 'BuilderSession.startAppRuntime: call startChat() + (optionally) ship() first',\n )\n const emitter = new TraceEmitter(this.store)\n await emitter.startRun({\n scenarioId,\n projectId: this.projectId,\n chatId: this.chatId,\n parentRunId,\n layer: 'app-runtime',\n })\n return emitter\n }\n\n /**\n * Lightweight \"ship marker\" — record an app-build Run with a caller-\n * provided verdict. Use when there isn't a sandbox harness to run but\n * you still want to mark the build state at publish time.\n */\n async recordShipMarker(args: {\n pass: boolean\n score: number\n scenarioId?: string\n notes?: string\n }): Promise<string> {\n if (!this.builderRunId)\n throw new Error('BuilderSession.recordShipMarker: call startChat() first')\n const emitter = new TraceEmitter(this.store)\n await emitter.startRun({\n scenarioId: args.scenarioId ?? `${this.projectId}/ship`,\n projectId: this.projectId,\n chatId: this.chatId,\n parentRunId: this.builderRunId,\n layer: 'app-build',\n })\n await emitter.endRun({\n pass: args.pass,\n score: args.score,\n failureClass: args.pass ? 'success' : 'sandbox_failure',\n notes: args.notes,\n })\n this.lastBuildRunId = emitter.runId\n return emitter.runId\n }\n\n get lastBuildRunIdValue(): string | undefined {\n return this.lastBuildRunId\n }\n get builderRunIdValue(): string | undefined {\n return this.builderRunId\n }\n}\n\n/**\n * Reconstruct the most recent BuilderSession state for a given project —\n * returns { builderRunId, lastBuildRunId, chatRuns }. For chat-first UIs\n * this is how a resumed session finds its place in the edit history.\n */\nexport async function resumeBuilderSession(\n store: TraceStore,\n projectId: string,\n): Promise<{\n projectId: string\n chatRuns: Run[]\n lastBuilderRun?: Run\n lastBuildRun?: Run\n lastAppRuntimeRuns: Run[]\n}> {\n const runs = await store.listRuns({ projectId })\n const chatRuns = runs\n .filter((r) => r.layer === 'builder')\n .sort((a, b) => b.startedAt - a.startedAt)\n const buildRuns = runs\n .filter((r) => r.layer === 'app-build')\n .sort((a, b) => b.startedAt - a.startedAt)\n const appRuntimeRuns = runs\n .filter((r) => r.layer === 'app-runtime')\n .sort((a, b) => b.startedAt - a.startedAt)\n return {\n projectId,\n chatRuns,\n lastBuilderRun: chatRuns[0],\n lastBuildRun: buildRuns[0],\n lastAppRuntimeRuns: appRuntimeRuns,\n }\n}\n","/**\n * Meta-eval correlation — the highest-leverage signal in the framework.\n *\n * Given a corpus of three-layer project reports, compute how well each\n * pair of layers correlates. The question we care about most:\n *\n * Does `metaScore` (what the builder thinks it did) predict\n * `runtimeScore` (what the user actually gets)?\n *\n * If r < ~0.4, the builder's self-scoring is broken — it's optimizing\n * for something other than real-world success. If r > 0.7, meta_score\n * is a usable proxy and can drive CI gates cheaply.\n *\n * Non-parametric rank correlation (Spearman) is also reported because\n * meta scores are often ordinal-ish.\n */\n\nimport { pearsonR, spearmanR } from '../statistics'\nimport type { ThreeLayerProjectReport } from './three-layer-eval'\n\nexport interface LayerCorrelation {\n n: number\n pearson: number\n spearman: number\n}\n\nexport interface CorrelationReport {\n /** Pairs present in the corpus (layers with ≥ 2 matched data points). */\n metaVsBuild?: LayerCorrelation\n metaVsRuntime?: LayerCorrelation\n buildVsRuntime?: LayerCorrelation\n /** Number of complete projects (all 3 scores present). */\n completeProjects: number\n}\n\nexport function correlateLayers(reports: ThreeLayerProjectReport[]): CorrelationReport {\n const completeProjects = reports.filter((r) => r.complete).length\n return {\n metaVsBuild: pairwise(\n reports,\n (r) => r.metaScore,\n (r) => r.buildScore,\n ),\n metaVsRuntime: pairwise(\n reports,\n (r) => r.metaScore,\n (r) => r.runtimeScore,\n ),\n buildVsRuntime: pairwise(\n reports,\n (r) => r.buildScore,\n (r) => r.runtimeScore,\n ),\n completeProjects,\n }\n}\n\nfunction pairwise(\n reports: ThreeLayerProjectReport[],\n a: (r: ThreeLayerProjectReport) => number | null,\n b: (r: ThreeLayerProjectReport) => number | null,\n): LayerCorrelation | undefined {\n const xs: number[] = []\n const ys: number[] = []\n for (const r of reports) {\n const x = a(r)\n const y = b(r)\n if (x !== null && y !== null && Number.isFinite(x) && Number.isFinite(y)) {\n xs.push(x)\n ys.push(y)\n }\n }\n if (xs.length < 2) return undefined\n return {\n n: xs.length,\n pearson: pearsonR(xs, ys),\n spearman: spearmanR(xs, ys),\n }\n}\n","/**\n * ProjectRegistry — project-level aggregation over the trace corpus.\n *\n * Thin reader over TraceStore that answers the questions a chat-first,\n * resumable UI needs:\n * - listProjects() → project IDs with latest activity\n * - projectTimeline(id) → chats + builds + runtime runs, chronological\n * - projectChats(id) → chat-level summaries (turn count, outcome)\n *\n * All queries are pure reads; no state duplication.\n */\n\nimport type { Run } from '../trace/schema'\nimport type { TraceStore } from '../trace/store'\n\nexport interface ProjectSummary {\n projectId: string\n chatCount: number\n buildCount: number\n appRuntimeCount: number\n lastActivityAt: number\n latestChatId?: string\n latestOutcome?: { pass: boolean; score?: number }\n}\n\nexport interface ChatSummary {\n chatId: string\n projectId: string\n builderRunId: string\n startedAt: number\n endedAt?: number\n status: Run['status']\n outcome?: Run['outcome']\n /** Counts of spans emitted during the chat. */\n llmTurns?: number\n toolCalls?: number\n buildRunId?: string\n appRuntimeRunIds: string[]\n}\n\nexport interface ProjectTimelineEntry {\n run: Run\n layerBucket: 'chat' | 'build' | 'runtime' | 'other'\n}\n\nexport class ProjectRegistry {\n constructor(private store: TraceStore) {}\n\n async listProjects(): Promise<ProjectSummary[]> {\n const runs = await this.store.listRuns()\n const byProject = new Map<string, Run[]>()\n for (const r of runs) {\n if (!r.projectId) continue\n const arr = byProject.get(r.projectId) ?? []\n arr.push(r)\n byProject.set(r.projectId, arr)\n }\n const summaries: ProjectSummary[] = []\n for (const [projectId, projectRuns] of byProject) {\n const sorted = projectRuns.slice().sort((a, b) => b.startedAt - a.startedAt)\n const chats = projectRuns.filter((r) => r.layer === 'builder')\n const builds = projectRuns.filter((r) => r.layer === 'app-build')\n const runtimes = projectRuns.filter((r) => r.layer === 'app-runtime')\n const latest = sorted[0]\n if (!latest) continue\n summaries.push({\n projectId,\n chatCount: chats.length,\n buildCount: builds.length,\n appRuntimeCount: runtimes.length,\n lastActivityAt: latest.startedAt,\n latestChatId: chats[0]?.chatId,\n latestOutcome: latest.outcome\n ? { pass: latest.outcome.pass ?? false, score: latest.outcome.score }\n : undefined,\n })\n }\n return summaries.sort((a, b) => b.lastActivityAt - a.lastActivityAt)\n }\n\n async projectTimeline(projectId: string): Promise<ProjectTimelineEntry[]> {\n const runs = await this.store.listRuns({ projectId })\n const ordered = runs.slice().sort((a, b) => a.startedAt - b.startedAt)\n return ordered.map((run) => ({\n run,\n layerBucket:\n run.layer === 'builder'\n ? 'chat'\n : run.layer === 'app-build'\n ? 'build'\n : run.layer === 'app-runtime'\n ? 'runtime'\n : 'other',\n }))\n }\n\n async projectChats(projectId: string): Promise<ChatSummary[]> {\n const builderRuns = (await this.store.listRuns({ projectId, layer: 'builder' })).sort(\n (a, b) => b.startedAt - a.startedAt,\n )\n const childrenFor = async (runId: string) => this.store.listRuns({ parentRunId: runId })\n const out: ChatSummary[] = []\n for (const run of builderRuns) {\n const spans = await this.store.spans({ runId: run.runId })\n const children = await childrenFor(run.runId)\n const build = children.find((c) => c.layer === 'app-build')\n const runtime: string[] = []\n // Runtime runs can be grandchildren (attached to the build) or siblings\n // when shipped skipped.\n if (build) {\n const grands = await childrenFor(build.runId)\n for (const g of grands) if (g.layer === 'app-runtime') runtime.push(g.runId)\n }\n for (const c of children) if (c.layer === 'app-runtime') runtime.push(c.runId)\n out.push({\n chatId: run.chatId ?? run.runId,\n projectId,\n builderRunId: run.runId,\n startedAt: run.startedAt,\n endedAt: run.endedAt,\n status: run.status,\n outcome: run.outcome,\n llmTurns: spans.filter((s) => s.kind === 'llm').length,\n toolCalls: spans.filter((s) => s.kind === 'tool').length,\n buildRunId: build?.runId,\n appRuntimeRunIds: runtime,\n })\n }\n return out\n }\n}\n","/**\n * Three-layer evaluation — the canonical scoring breakdown for\n * builder-of-builders workflows.\n *\n * meta_score: did the builder understand + satisfy user intent?\n * (judge verdict attached to the builder run)\n * build_score: did the generated scaffold build + pass its own tests?\n * (outcome.score on the app-build child run)\n * runtime_score: did the generated agent pass its domain scenarios?\n * (mean outcome.score over app-runtime grandchild runs)\n *\n * Returns a structured report per project. The cross-layer correlation\n * is the highest-leverage signal the framework computes — if\n * meta_score doesn't predict runtime_score, the builder's self-scoring\n * is broken.\n *\n * Scaffold-only mode: when a project has no `app-runtime` runs (e.g. a\n * scaffold-builder eval that grades compose + build without driving a\n * runtime scenario), `kind` is `'scaffold-only'` and `complete` measures\n * meta + build only. Consumers can tell the two apart without having to\n * interpret null-runtime as either \"not yet computed\" or \"N/A for this\n * project shape\".\n */\n\nimport { judgeSpans } from '../trace/query'\nimport type { Run } from '../trace/schema'\nimport type { TraceStore } from '../trace/store'\n\nexport type ProjectKind = 'full' | 'scaffold-only'\n\nexport interface ThreeLayerProjectReport {\n projectId: string\n /**\n * `'full'` when the project has at least one `app-runtime` run;\n * `'scaffold-only'` when it only has meta + build layers. Lets\n * downstream consumers treat a null runtime score as expected\n * (scaffold-only) vs. missing (full, pipeline broke).\n */\n kind: ProjectKind\n builderRunId?: string\n /** Judge-verdict score on the builder run (0..1 after normalization). */\n metaScore: number | null\n buildRunId?: string\n /** 0..1 from the sandbox harness (testsPassed / testsTotal). */\n buildScore: number | null\n appRuntimeRunIds: string[]\n /** Mean of outcome.score over app-runtime runs, 0..1. Always null in scaffold-only mode. */\n runtimeScore: number | null\n runtimePassRate: number | null\n /**\n * Layer-aware completeness:\n * - `kind='full'`: all three layers scored\n * - `kind='scaffold-only'`: meta + build scored (runtime not applicable)\n */\n complete: boolean\n}\n\nexport async function scoreProject(\n store: TraceStore,\n projectId: string,\n): Promise<ThreeLayerProjectReport> {\n const allRuns = await store.listRuns({ projectId })\n const builder = latestByLayer(allRuns, 'builder')\n const build = latestByLayer(allRuns, 'app-build')\n const runtime = allRuns.filter((r) => r.layer === 'app-runtime')\n\n const metaScore = builder ? await extractMetaScore(store, builder.runId) : null\n const buildScore = build?.outcome?.score ?? null\n const runtimeScores = runtime\n .map((r) => r.outcome?.score)\n .filter((s): s is number => typeof s === 'number')\n const runtimeScore =\n runtimeScores.length > 0\n ? runtimeScores.reduce((a, b) => a + b, 0) / runtimeScores.length\n : null\n const runtimePassed = runtime.filter((r) => r.outcome?.pass === true).length\n const runtimePassRate = runtime.length > 0 ? runtimePassed / runtime.length : null\n\n const kind: ProjectKind = runtime.length === 0 ? 'scaffold-only' : 'full'\n const complete =\n kind === 'scaffold-only'\n ? metaScore !== null && buildScore !== null\n : metaScore !== null && buildScore !== null && runtimeScore !== null\n\n return {\n projectId,\n kind,\n builderRunId: builder?.runId,\n metaScore,\n buildRunId: build?.runId,\n buildScore,\n appRuntimeRunIds: runtime.map((r) => r.runId),\n runtimeScore,\n runtimePassRate,\n complete,\n }\n}\n\n/** Aggregate scoring across every project in a corpus. */\nexport async function scoreAllProjects(store: TraceStore): Promise<ThreeLayerProjectReport[]> {\n const runs = await store.listRuns()\n const projectIds = [...new Set(runs.map((r) => r.projectId).filter((p): p is string => !!p))]\n return Promise.all(projectIds.map((p) => scoreProject(store, p)))\n}\n\nfunction latestByLayer(runs: Run[], layer: Run['layer']): Run | undefined {\n const filtered = runs.filter((r) => r.layer === layer).sort((a, b) => b.startedAt - a.startedAt)\n return filtered[0]\n}\n\nasync function extractMetaScore(store: TraceStore, builderRunId: string): Promise<number | null> {\n const js = await judgeSpans(store, builderRunId)\n const meta = js.find(\n (s) => s.judgeId === 'builder-meta' && s.dimension === 'user_intent_satisfaction',\n )\n if (!meta) return null\n // Normalize score to 0..1. Accept 0-1 natively; 0-10 scale is also common.\n if (meta.score >= 0 && meta.score <= 1) return meta.score\n if (meta.score >= 0 && meta.score <= 10) return meta.score / 10\n return null\n}\n"],"mappings":";;;;;AAiKA,IAAa,0BAAb,MAA8D;CAC5D,KAAK;CACL;CACA;CAEA,YAAY,UAA0C,CAAC,GAAG;EACxD,KAAK,aAAa,QAAQ;EAC1B,KAAK,aAAa,QAAQ;CAC5B;CAEA,MAAM,KACJ,OACA,SACA,QACwB;EACxB,MAAM,EAAE,UAAU,MAAM,OAAO;EAC/B,MAAM,QAAQ,KAAK,IAAI;EAIvB,MAAM,eAAe,OAAO,OAAO,KAAK;EACxC,MAAM,eAAe;GAAE,GAAG,QAAQ;GAAK,GAAI,KAAK,cAAc,CAAC;GAAI,GAAI,OAAO,OAAO,CAAC;EAAG;EACzF,MAAM,iBAAiB,OAAO,kBAAkB,KAAK,OAAO;EAC5D,OAAO,MAAM,IAAI,SAAwB,YAAY;GACnD,MAAM,QAAQ,MAAM,SAAS;IAC3B,OAAO;IACP,KAAK;IACL,KAAK;IAIL,UAAU,QAAQ,aAAa;GACjC,CAAC;GACD,IAAI,SAAS;GACb,IAAI,SAAS;GACb,IAAI,cAAc;GAClB,IAAI,kBAAkB;GACtB,IAAI,kBAAkB;GACtB,IAAI,UAAU;GAEd,MAAM,YAAY,MAAe;IAC/B,MAAM,QAAQ,QAAQ,OAAO,CAAC,CAAC;IAC/B,IAAI,OAAO,UAAU;GACvB;GACA,MAAM,YAAY,MAAe;IAC/B,MAAM,QAAQ,QAAQ,OAAO,CAAC,CAAC;IAC/B,IAAI,OAAO,UAAU;GACvB;GAIA,SAAS,QAAQ,GAAmB;IAClC,IAAI,eAAe,gBAAgB;KACjC,kBAAkB;KAClB,OAAO;IACT;IACA,MAAM,OAAO,iBAAiB;IAC9B,IAAI,EAAE,SAAS,MAAM;KACnB,cAAc;KACd,kBAAkB;KAClB,OAAO,EAAE,MAAM,GAAG,IAAI;IACxB;IACA,eAAe,EAAE;IACjB,OAAO;GACT;GAEA,MAAM,QAAQ,GAAG,QAAQ,QAAQ;GACjC,MAAM,QAAQ,GAAG,QAAQ,QAAQ;GAEjC,MAAM,gBAAgB;IACpB,aAAa,OAAO;IACpB,IAAI,cAAc,aAAa,YAAY;IAC3C,MAAM,QAAQ,IAAI,QAAQ,QAAQ;IAClC,MAAM,QAAQ,IAAI,QAAQ,QAAQ;IAClC,MAAM,mBAAmB,OAAO;IAChC,MAAM,mBAAmB,OAAO;GAClC;GAKA,MAAM,UAAU,YAA2D;IACzE,IAAI,SAAS;IACb,UAAU;IACV,QAAQ;IACR,MAAM,SAAS,KAAK,IAAI,IAAI;IAC5B,MAAM,WAAW,kBACb,QAAQ,QAAQ,QAAQ,SAAS,IAC/B,QAAQ,OACR,MACD,QAAQ,QAAQ;IACrB,MAAM,SACJ,CAAC,mBAAmB,UAAU,UAAU,OAAO,aAC3C,OAAO,WAAW,MAAM,QAAQ,QAAQ,QAAQ,IAChD,KAAA;IACN,QAAQ;KACN;KACA;KACA;KACA,QAAQ,QAAQ,cAAc,SAAS,QAAQ,cAAc;KAC7D;KACA,YAAY,QAAQ;KACpB,aAAa,QAAQ;KACrB,iBAAiB,mBAAmB,KAAA;KACpC,iBAAiB,mBAAmB,KAAA;IACtC,CAAC;GACH;GAIA,MAAM,iBAAiB;IACrB,IAAI;KACF,IAAI,QAAQ,aAAa,WAAW,OAAO,MAAM,QAAQ,UACvD,QAAQ,KAAK,CAAC,MAAM,KAAK,SAAS;UAElC,MAAM,KAAK,SAAS;IAExB,SAAS,KAAK;KACZ,QAAQ,KAAK,gDAAgD,GAAG;IAClE;GACF;GAEA,IAAI;GACJ,MAAM,UAAU,iBACR;IACJ,kBAAkB;IAClB,SAAS;IAIT,eAAe,iBAAiB,OAAO,EAAE,MAAM,KAAK,CAAC,GAAG,GAAI;GAC9D,GACA,OAAO,aAAa,KAAK,GAC3B;GAEA,MAAM,GAAG,UAAU,SAAS;IAC1B,IAAI,cAAc,aAAa,YAAY;IAC3C,OAAO,EAAE,KAAK,CAAC;GACjB,CAAC;GACD,MAAM,GAAG,UAAU,QAAQ;IACzB,IAAI,cAAc,aAAa,YAAY;IAC3C,OAAO;KAAE,MAAM;KAAK,aAAa,OAAO,GAAG;IAAE,CAAC;GAChD,CAAC;EACH,CAAC;CACH;AACF;AAqCA,IAAa,iBAAb,MAA4B;CAC1B;CACA,YAAY,SAAwB,IAAI,wBAAwB,GAAG;EACjE,KAAK,SAAS;CAChB;CAEA,MAAM,IAAI,QAAuB,SAAsD;EACrF,MAAM,SAAS,MAAM,QAAQ,QAAQ;GACnC,MAAM,WAAW,KAAK,OAAO,GAAG;GAChC,OAAO,OAAO;GACd,SAAS;IAAC,OAAO;IAAc,OAAO;IAAY,OAAO;GAAW,CAAC,CAClE,OAAO,OAAO,CAAC,CACf,KAAK,MAAM;EAChB,CAAC;EACD,MAAM,SAA+B;GAAE,QAAQ;GAAO,aAAa;GAAG,OAAO;EAAE;EAC/E,IAAI;GACF,IAAI,OAAO,cAAc;IACvB,OAAO,QAAQ,MAAM,KAAK,OAAO,KAAK,SAAS,OAAO,cAAc,MAAM;IAC1E,OAAO,eAAe,OAAO,MAAM;IACnC,IAAI,OAAO,MAAM,mBAAmB,OAAO,MAAM,aAAa,GAAG;KAC/D,MAAM,SAAS,OAAO,MAAM,kBACxB,yBAAyB,OAAO,MAAM,OAAO,MAC7C,sBAAsB,OAAO,MAAM,SAAS;KAChD,MAAM,OAAO,KAAK,QAAQ;MACxB,UAAU,OAAO,MAAM;MACvB,QAAQ,OAAO;KACjB,CAAyB;KACzB,OAAO;IACT;GACF;GACA,IAAI,OAAO,YAAY;IACrB,OAAO,MAAM,MAAM,KAAK,OAAO,KAAK,OAAO,OAAO,YAAY,MAAM;IACpE,OAAO,eAAe,OAAO,IAAI;IACjC,IAAI,OAAO,IAAI,mBAAmB,OAAO,IAAI,aAAa,GAAG;KAC3D,MAAM,SAAS,OAAO,IAAI,kBACtB,uBAAuB,OAAO,IAAI,OAAO,MACzC,oBAAoB,OAAO,IAAI,SAAS;KAC5C,MAAM,OAAO,KAAK,QAAQ;MACxB,UAAU,OAAO,IAAI;MACrB,QAAQ,OAAO;KACjB,CAAyB;KACzB,OAAO;IACT;GACF;GACA,IAAI,OAAO,aAAa;IACtB,OAAO,OAAO,MAAM,KAAK,OAAO,KAAK,QAAQ,OAAO,aAAa,MAAM;IACvE,OAAO,eAAe,OAAO,KAAK;IAGlC,MAAM,SAAS,CAAC,OAAO,KAAK,mBAAmB,OAAO,KAAK,aAAa;IACxE,OAAO,SAAS;IAChB,IAAI,OAAO,KAAK,eAAe,KAAA,KAAa,OAAO,KAAK,aAAa,GACnE,OAAO,SAAS,OAAO,KAAK,eAAe,KAAK,OAAO,KAAK;SAE5D,OAAO,QAAQ,SAAS,IAAI;IAE9B,MAAM,OAAO,IAAI;KACf,UAAU,OAAO,KAAK;KACtB,YAAY,OAAO,KAAK;KACxB,aAAa,OAAO,KAAK;KACzB,QAAQ,OAAO;KACf,QAAQ,SAAS,OAAO;IAC1B,CAAyB;GAC3B,OAAO;IACL,OAAO,SAAS;IAChB,OAAO,QAAQ;IACf,MAAM,OAAO,IAAI,EAAE,QAAQ,OAAO,YAAY,CAAyB;GACzE;EACF,SAAS,KAAK;GACZ,MAAM,OAAO,KAAK,eAAe,QAAQ,MAAM,OAAO,GAAG,CAAC;GAC1D,MAAM;EACR;EACA,OAAO;CACT;AACF;;;AClXA,eAAsB,sBACpB,UACA,OACA,UAAgC,CAAC,GACH;CAC9B,MAAM,UAAU,IAAI,aAAa,KAAK;CACtC,MAAM,QAAQ,SAAS;EACrB,YAAY,SAAS;EACrB,WAAW,QAAQ;EACnB,gBAAgB,SAAS;EACzB,MAAM,SAAS;EACf,GAAG,QAAQ;CACb,CAAC;CAED,MAAM,SAAS,MAAM,IADD,eAAe,QAAQ,MAChB,CAAC,CAAC,IAAI,SAAS,SAAS,OAAO;CAC1D,MAAM,YAAY,SAAS,iBAAiB;CAC5C,MAAM,OAAO,OAAO,UAAU,OAAO,SAAS;CAC9C,MAAM,cAAc,OAAO,UAAU,KAAA,KAAa,OAAO,MAAM,aAAa;CAC5E,MAAM,YAAY,OAAO,QAAQ,KAAA,KAAa,OAAO,IAAI,aAAa;CACtE,MAAM,aAAa,OAAO,SAAS,KAAA,KAAa,OAAO,KAAK,aAAa;CACzE,MAAM,eAAyC,OAC3C,YACA,eAAe,YACb,oBACA,aACE,iBACA;CACR,MAAM,QAAQ,OAAO;EACnB;EACA,OAAO,OAAO;EACd;EACA,OAAO,OAAO,KAAA,IAAY,iBAAiB,MAAM;CACnD,CAAC;CACD,OAAO;EACL,OAAO,QAAQ;EACf;EACA,SAAS;EACT;EACA,OAAO,OAAO;EACd;CACF;AACF;AAEA,SAAS,iBAAiB,QAAsC;CAC9D,IAAI,OAAO,SAAS,OAAO,MAAM,aAAa,GAC5C,OAAO,sBAAsB,OAAO,MAAM;CAC5C,IAAI,OAAO,OAAO,OAAO,IAAI,aAAa,GAAG,OAAO,oBAAoB,OAAO,IAAI;CACnF,IAAI,OAAO,MAAM;EACf,IAAI,OAAO,KAAK,eAAe,KAAA,GAC7B,OAAO,UAAU,OAAO,KAAK,eAAe,EAAE,GAAG,OAAO,KAAK;EAE/D,OAAO,aAAa,OAAO,KAAK;CAClC;CACA,OAAO;AACT;;;;;;;;;;;;;;;;;;;;ACtDA,IAAa,iBAAb,MAA4B;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CAEA,YAAY,OAAmB,MAA0B,QAAwB;EAC/E,KAAK,QAAQ;EACb,KAAK,YAAY,KAAK;EACtB,KAAK,SAAS,KAAK,UAAU,YAAY;EACzC,KAAK,gBAAgB;EACrB,KAAK,iBAAiB,IAAI,aAAa,KAAK;CAC9C;;CAGA,MAAM,UAAU,aAAa,GAAG,KAAK,UAAU,QAAyB;EACtE,MAAM,KAAK,eAAe,SAAS;GACjC;GACA,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb,OAAO;EACT,CAAC;EACD,KAAK,eAAe,KAAK,eAAe;EACxC,OAAO,KAAK;CACd;;CAGA,IAAI,UAAwB;EAC1B,IAAI,CAAC,KAAK,cAAc,MAAM,IAAI,MAAM,gDAAgD;EACxF,OAAO,KAAK;CACd;;;;;CAMA,MAAM,KAAK,SAAgF;EACzF,IAAI,CAAC,KAAK,cAAc,MAAM,IAAI,MAAM,6CAA6C;EACrF,MAAM,eAAe,IAAI,aAAa,KAAK,KAAK;EAChD,MAAM,aAAa,SAAS;GAC1B,YAAY,QAAQ,cAAc,GAAG,KAAK,UAAU;GACpD,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb,aAAa,KAAK;GAClB,OAAO;EACT,CAAC;EAED,MAAM,SAAS,MAAM,IADD,eAAe,QAAQ,UAAU,KAAK,aAC/B,CAAC,CAAC,IAAI,QAAQ,SAAS,YAAY;EAC9D,MAAM,aAAa,OAAO;GACxB,MAAM,OAAO;GACb,OAAO,OAAO;GACd,cAAc,OAAO,SAAS,YAAY;EAC5C,CAAC;EACD,KAAK,iBAAiB,aAAa;EACnC,OAAO;GAAE,OAAO,aAAa;GAAO;EAAO;CAC7C;;;;;;;CAQA,MAAM,eAAe,SAA8D;EACjF,MAAM,cAAc,KAAK,kBAAkB,KAAK;EAChD,IAAI,CAAC,aACH,MAAM,IAAI,MAAM,gEAAgE;EAClF,MAAM,EAAE,UAAU,WAAW;EAC7B,MAAM,SAAS,MAAM,sBAAsB,UAAU,KAAK,OAAO;GAC/D,QAAQ,UAAU,KAAK;GACvB,YAAY;IAAE,SAAS,KAAA;IAAW,WAAW,KAAA;IAAW,kBAAkB,KAAA;GAAU;EACtF,CAAC;EAED,MAAM,KAAK,MAAM,UAAU,OAAO,OAAO;GACvC;GACA,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb,OAAO;EACT,CAAC;EACD,OAAO;CACT;;;CAIA,MAAM,gBAAgB,OAAe,WAAmC;EACtE,IAAI,CAAC,KAAK,cACR,MAAM,IAAI,MAAM,wDAAwD;EAC1E,MAAM,KAAK,eAAe,YAAY;GACpC,SAAS;GACT,cAAc,KAAK;GACnB,WAAW;GACX;GACA;GACA,MAAM;EACR,CAAC;CACH;;CAGA,MAAM,QAAQ,SAA2E;EACvF,MAAM,KAAK,eAAe,OAAO;GAC/B,MAAM,QAAQ;GACd,OAAO,QAAQ;GACf,OAAO,QAAQ;EACjB,CAAC;CACH;;;;;;;;CASA,MAAM,gBAAgB,YAA2C;EAC/D,MAAM,cAAc,KAAK,kBAAkB,KAAK;EAChD,IAAI,CAAC,aACH,MAAM,IAAI,MACR,8EACF;EACF,MAAM,UAAU,IAAI,aAAa,KAAK,KAAK;EAC3C,MAAM,QAAQ,SAAS;GACrB;GACA,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb;GACA,OAAO;EACT,CAAC;EACD,OAAO;CACT;;;;;;CAOA,MAAM,iBAAiB,MAKH;EAClB,IAAI,CAAC,KAAK,cACR,MAAM,IAAI,MAAM,yDAAyD;EAC3E,MAAM,UAAU,IAAI,aAAa,KAAK,KAAK;EAC3C,MAAM,QAAQ,SAAS;GACrB,YAAY,KAAK,cAAc,GAAG,KAAK,UAAU;GACjD,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb,aAAa,KAAK;GAClB,OAAO;EACT,CAAC;EACD,MAAM,QAAQ,OAAO;GACnB,MAAM,KAAK;GACX,OAAO,KAAK;GACZ,cAAc,KAAK,OAAO,YAAY;GACtC,OAAO,KAAK;EACd,CAAC;EACD,KAAK,iBAAiB,QAAQ;EAC9B,OAAO,QAAQ;CACjB;CAEA,IAAI,sBAA0C;EAC5C,OAAO,KAAK;CACd;CACA,IAAI,oBAAwC;EAC1C,OAAO,KAAK;CACd;AACF;;;;;;AAOA,eAAsB,qBACpB,OACA,WAOC;CACD,MAAM,OAAO,MAAM,MAAM,SAAS,EAAE,UAAU,CAAC;CAC/C,MAAM,WAAW,KACd,QAAQ,MAAM,EAAE,UAAU,SAAS,CAAC,CACpC,MAAM,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS;CAC3C,MAAM,YAAY,KACf,QAAQ,MAAM,EAAE,UAAU,WAAW,CAAC,CACtC,MAAM,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS;CAC3C,MAAM,iBAAiB,KACpB,QAAQ,MAAM,EAAE,UAAU,aAAa,CAAC,CACxC,MAAM,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS;CAC3C,OAAO;EACL;EACA;EACA,gBAAgB,SAAS;EACzB,cAAc,UAAU;EACxB,oBAAoB;CACtB;AACF;;;;;;;;;;;;;;;;;;;ACxNA,SAAgB,gBAAgB,SAAuD;CACrF,MAAM,mBAAmB,QAAQ,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC;CAC3D,OAAO;EACL,aAAa,SACX,UACC,MAAM,EAAE,YACR,MAAM,EAAE,UACX;EACA,eAAe,SACb,UACC,MAAM,EAAE,YACR,MAAM,EAAE,YACX;EACA,gBAAgB,SACd,UACC,MAAM,EAAE,aACR,MAAM,EAAE,YACX;EACA;CACF;AACF;AAEA,SAAS,SACP,SACA,GACA,GAC8B;CAC9B,MAAM,KAAe,CAAC;CACtB,MAAM,KAAe,CAAC;CACtB,KAAK,MAAM,KAAK,SAAS;EACvB,MAAM,IAAI,EAAE,CAAC;EACb,MAAM,IAAI,EAAE,CAAC;EACb,IAAI,MAAM,QAAQ,MAAM,QAAQ,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,CAAC,GAAG;GACxE,GAAG,KAAK,CAAC;GACT,GAAG,KAAK,CAAC;EACX;CACF;CACA,IAAI,GAAG,SAAS,GAAG,OAAO,KAAA;CAC1B,OAAO;EACL,GAAG,GAAG;EACN,SAAS,SAAS,IAAI,EAAE;EACxB,UAAU,UAAU,IAAI,EAAE;CAC5B;AACF;;;ACjCA,IAAa,kBAAb,MAA6B;CACP;CAApB,YAAY,OAA2B;EAAnB,KAAA,QAAA;CAAoB;CAExC,MAAM,eAA0C;EAC9C,MAAM,OAAO,MAAM,KAAK,MAAM,SAAS;EACvC,MAAM,4BAAY,IAAI,IAAmB;EACzC,KAAK,MAAM,KAAK,MAAM;GACpB,IAAI,CAAC,EAAE,WAAW;GAClB,MAAM,MAAM,UAAU,IAAI,EAAE,SAAS,KAAK,CAAC;GAC3C,IAAI,KAAK,CAAC;GACV,UAAU,IAAI,EAAE,WAAW,GAAG;EAChC;EACA,MAAM,YAA8B,CAAC;EACrC,KAAK,MAAM,CAAC,WAAW,gBAAgB,WAAW;GAChD,MAAM,SAAS,YAAY,MAAM,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS;GAC3E,MAAM,QAAQ,YAAY,QAAQ,MAAM,EAAE,UAAU,SAAS;GAC7D,MAAM,SAAS,YAAY,QAAQ,MAAM,EAAE,UAAU,WAAW;GAChE,MAAM,WAAW,YAAY,QAAQ,MAAM,EAAE,UAAU,aAAa;GACpE,MAAM,SAAS,OAAO;GACtB,IAAI,CAAC,QAAQ;GACb,UAAU,KAAK;IACb;IACA,WAAW,MAAM;IACjB,YAAY,OAAO;IACnB,iBAAiB,SAAS;IAC1B,gBAAgB,OAAO;IACvB,cAAc,MAAM,EAAE,EAAE;IACxB,eAAe,OAAO,UAClB;KAAE,MAAM,OAAO,QAAQ,QAAQ;KAAO,OAAO,OAAO,QAAQ;IAAM,IAClE,KAAA;GACN,CAAC;EACH;EACA,OAAO,UAAU,MAAM,GAAG,MAAM,EAAE,iBAAiB,EAAE,cAAc;CACrE;CAEA,MAAM,gBAAgB,WAAoD;EAGxE,QADgB,MADG,KAAK,MAAM,SAAS,EAAE,UAAU,CAAC,EAAA,CAC/B,MAAM,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,YAAY,EAAE,SAC/C,CAAC,CAAC,KAAK,SAAS;GAC3B;GACA,aACE,IAAI,UAAU,YACV,SACA,IAAI,UAAU,cACZ,UACA,IAAI,UAAU,gBACZ,YACA;EACZ,EAAE;CACJ;CAEA,MAAM,aAAa,WAA2C;EAC5D,MAAM,eAAe,MAAM,KAAK,MAAM,SAAS;GAAE;GAAW,OAAO;EAAU,CAAC,EAAA,CAAG,MAC9E,GAAG,MAAM,EAAE,YAAY,EAAE,SAC5B;EACA,MAAM,cAAc,OAAO,UAAkB,KAAK,MAAM,SAAS,EAAE,aAAa,MAAM,CAAC;EACvF,MAAM,MAAqB,CAAC;EAC5B,KAAK,MAAM,OAAO,aAAa;GAC7B,MAAM,QAAQ,MAAM,KAAK,MAAM,MAAM,EAAE,OAAO,IAAI,MAAM,CAAC;GACzD,MAAM,WAAW,MAAM,YAAY,IAAI,KAAK;GAC5C,MAAM,QAAQ,SAAS,MAAM,MAAM,EAAE,UAAU,WAAW;GAC1D,MAAM,UAAoB,CAAC;GAG3B,IAAI,OAAO;IACT,MAAM,SAAS,MAAM,YAAY,MAAM,KAAK;IAC5C,KAAK,MAAM,KAAK,QAAQ,IAAI,EAAE,UAAU,eAAe,QAAQ,KAAK,EAAE,KAAK;GAC7E;GACA,KAAK,MAAM,KAAK,UAAU,IAAI,EAAE,UAAU,eAAe,QAAQ,KAAK,EAAE,KAAK;GAC7E,IAAI,KAAK;IACP,QAAQ,IAAI,UAAU,IAAI;IAC1B;IACA,cAAc,IAAI;IAClB,WAAW,IAAI;IACf,SAAS,IAAI;IACb,QAAQ,IAAI;IACZ,SAAS,IAAI;IACb,UAAU,MAAM,QAAQ,MAAM,EAAE,SAAS,KAAK,CAAC,CAAC;IAChD,WAAW,MAAM,QAAQ,MAAM,EAAE,SAAS,MAAM,CAAC,CAAC;IAClD,YAAY,OAAO;IACnB,kBAAkB;GACpB,CAAC;EACH;EACA,OAAO;CACT;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;ACzEA,eAAsB,aACpB,OACA,WACkC;CAClC,MAAM,UAAU,MAAM,MAAM,SAAS,EAAE,UAAU,CAAC;CAClD,MAAM,UAAU,cAAc,SAAS,SAAS;CAChD,MAAM,QAAQ,cAAc,SAAS,WAAW;CAChD,MAAM,UAAU,QAAQ,QAAQ,MAAM,EAAE,UAAU,aAAa;CAE/D,MAAM,YAAY,UAAU,MAAM,iBAAiB,OAAO,QAAQ,KAAK,IAAI;CAC3E,MAAM,aAAa,OAAO,SAAS,SAAS;CAC5C,MAAM,gBAAgB,QACnB,KAAK,MAAM,EAAE,SAAS,KAAK,CAAC,CAC5B,QAAQ,MAAmB,OAAO,MAAM,QAAQ;CACnD,MAAM,eACJ,cAAc,SAAS,IACnB,cAAc,QAAQ,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,cAAc,SACzD;CACN,MAAM,gBAAgB,QAAQ,QAAQ,MAAM,EAAE,SAAS,SAAS,IAAI,CAAC,CAAC;CACtE,MAAM,kBAAkB,QAAQ,SAAS,IAAI,gBAAgB,QAAQ,SAAS;CAE9E,MAAM,OAAoB,QAAQ,WAAW,IAAI,kBAAkB;CACnE,MAAM,WACJ,SAAS,kBACL,cAAc,QAAQ,eAAe,OACrC,cAAc,QAAQ,eAAe,QAAQ,iBAAiB;CAEpE,OAAO;EACL;EACA;EACA,cAAc,SAAS;EACvB;EACA,YAAY,OAAO;EACnB;EACA,kBAAkB,QAAQ,KAAK,MAAM,EAAE,KAAK;EAC5C;EACA;EACA;CACF;AACF;;AAGA,eAAsB,iBAAiB,OAAuD;CAC5F,MAAM,OAAO,MAAM,MAAM,SAAS;CAClC,MAAM,aAAa,CAAC,GAAG,IAAI,IAAI,KAAK,KAAK,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,MAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5F,OAAO,QAAQ,IAAI,WAAW,KAAK,MAAM,aAAa,OAAO,CAAC,CAAC,CAAC;AAClE;AAEA,SAAS,cAAc,MAAa,OAAsC;CAExE,OADiB,KAAK,QAAQ,MAAM,EAAE,UAAU,KAAK,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,YAAY,EAAE,SACxE,CAAC,CAAC;AAClB;AAEA,eAAe,iBAAiB,OAAmB,cAA8C;CAE/F,MAAM,QAAO,MADI,WAAW,OAAO,YAAY,EAAA,CAC/B,MACb,MAAM,EAAE,YAAY,kBAAkB,EAAE,cAAc,0BACzD;CACA,IAAI,CAAC,MAAM,OAAO;CAElB,IAAI,KAAK,SAAS,KAAK,KAAK,SAAS,GAAG,OAAO,KAAK;CACpD,IAAI,KAAK,SAAS,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,QAAQ;CAC7D,OAAO;AACT"}
@@ -1,11 +1,11 @@
1
1
  import { c as CostLedgerHandle, w as PendingCostCallView } from "../cost-ledger-DbQdN3nO.js";
2
- import { $t as SearchOperationKind, A as runEval, An as CampaignCellRetryPolicy, At as verifySearchHistoryReceipt, B as SearchRecorderOptions, Bn as inMemoryCampaignStorage, Bt as SearchCandidateSlotClosedEvent, C as RunImprovementLoopResult, Cn as ExternalOptimizerSubmittedCandidate, Ct as SearchHistoryPolicy, D as RunOptimizationResult, Dn as readCachedCell, Dt as assertSearchHistoryMatchesReplay, E as RunOptimizationOptions, En as CacheRead, Et as assertCompleteSearchHistory, F as MeasuredSearchCandidate, Fn as PlanCampaignRunOptions, Ft as SearchAttemptAccounting, Gn as LlmJudgeOptions, Gt as SearchLedger, H as recordCandidatePopulationSearch, Hn as OpenAutoPrResult, Ht as SearchCompletedEvent, I as ProposedSearchCandidate, In as planCampaignRun, It as SearchCandidateDecidedEvent, Jt as SearchLedgerEvent, Kn as llmJudge, Kt as SearchLedgerAppendResult, L as SearchExecutionIdentity, Ln as CampaignStorage, Lt as SearchCandidateLineage, M as ParentSelectionContext, Mn as runCampaign, Mt as OpenSearchLedgerOptions, N as ParentSelector, Nn as CampaignRunPlan, Nt as SearchAccountingAudit, O as runOptimization, On as cellCachePath, Ot as createSearchHistoryReceipt, P as crowdedFrontierParent, Pn as CampaignRunPlanCell, Pt as SearchArtifactRef, Qt as SearchModelIdentity, R as SearchLedgerBinding, Rn as createRunCostLedger, Rt as SearchCandidateRegisteredEvent, S as RunImprovementLoopOptions, Sn as ExternalOptimizerObservationSummary, St as SearchHistoryCoverageRow, T as PremeasuredOptimizationBaseline, Tn as CacheIssueReason, Tt as SearchHistoryRequiredError, Un as openAutoPr, Ut as SearchCostAccounting, V as SearchRunIdentity, Vn as OpenAutoPrOptions, Vt as SearchCandidateSurface, Wn as LlmJudgeDimension, Wt as SearchFailureReason, Xt as SearchLedgerReplay, Yt as SearchLedgerHash, Zt as SearchLedgerTrustedHeadMode, _ as loopProvenanceArgsFromResult, _n as GepaCandidatePopulationSummary, _t as costFromLedgerSummary, a as EmitLoopProvenanceArgs, an as SearchPlannedTask, at as OptimizationMethod, b as provenanceSpansPath, bn as ExternalOptimizerExecutionSummary, bt as SearchHistoryAuditSummary, c as LoopProvenanceBackend, cn as SearchSurfaceEvidence, ct as OptimizationMethodPairwise, d as LoopProvenanceOptimizationMethod, dn as SearchTaskOutcome, dt as OptimizationMethodRunOptions, en as SearchOperationRecordedEvent, f as LoopProvenanceRecord, fn as SearchTokenAccounting, ft as OptimizationMethodScore, g as emitLoopProvenance, gn as GepaCandidatePopulationCandidate, gt as compareOptimizationMethods, h as canonicalDigest, hn as GepaCandidatePopulationArtifact, ht as combineComparisonCosts, i as BuildLoopProvenanceArgs, in as SearchPlannedOperation, it as ComparisonCost, j as CrowdedFrontierParentOptions, jn as RunCampaignOptions, jt as FileSearchLedger, k as RunEvalOptions, kn as CampaignCellFailureReceipt, kt as searchHistoryCoverageRow, l as LoopProvenanceCandidate, ln as SearchSurfaceKind, lt as OptimizationMethodProvenance, m as campaignMeasurementDigest, mn as validateSearchLedgerEvent, mt as OptimizationTokenUsage, n as isTransientTransportFailure, nn as SearchPlanExtendedEvent, o as EmitLoopProvenanceResult, on as SearchSourceRef, ot as OptimizationMethodComparison, p as buildLoopProvenanceRecord, pn as openSearchLedger, pt as OptimizationPackageSource, qt as SearchLedgerEntry, r as transientDispatchFailure, rn as SearchPlannedEvent, rt as CompareOptimizationMethodsOptions, s as LoopProvenanceArgsFromResult, sn as SearchSurfaceEffect, st as OptimizationMethodInput, t as TransientFailureOptions, tn as SearchPlan, u as LoopProvenanceEvidence, un as SearchTaskAttemptedEvent, ut as OptimizationMethodResult, v as loopProvenanceSpans, vn as GepaCandidateSelectionScore, vt as optimizationTokenUsageFromSummary, w as runImprovementLoop, wn as readExternalOptimizerObservationArtifact, wt as SearchHistoryReceipt, x as verifyLoopProvenanceRecord, xn as ExternalOptimizerObservationArtifact, xt as SearchHistoryCoverage, y as provenanceRecordPath, yn as readGepaCandidatePopulationArtifact, yt as CreateSearchHistoryReceiptInput, z as SearchRecorder, zn as fsCampaignStorage, zt as SearchCandidateSlot } from "../transient-failure-DKF5Mofa.js";
3
- import { _ as ProposalFinding, v as ProposalFindingOrigin, x as makeProposalFinding } from "../types-D9ssmxKL.js";
2
+ import { _ as ProposalFinding, v as ProposalFindingOrigin, x as makeProposalFinding } from "../types-DMoNFDWi.js";
3
+ import { $ as readExternalOptimizerObservationArtifact, $t as SearchLedgerAppendResult, An as runEval, At as SearchHistoryPolicy, B as OptimizationMethodResult, Bn as CacheRead, Bt as SearchAccountingAudit, Cn as ParentSelectionContext, Ct as GepaCandidatePopulationSummary, Dn as OpenAutoPrResult, Dt as SearchHistoryAuditSummary, En as OpenAutoPrOptions, Et as CreateSearchHistoryReceiptInput, F as OptimizationMethod, Fn as CampaignRunPlan, Ft as createSearchHistoryReceipt, G as combineComparisonCosts, Gn as fsCampaignStorage, Gt as SearchCandidateRegisteredEvent, H as OptimizationMethodScore, Hn as cellCachePath, Ht as SearchAttemptAccounting, I as OptimizationMethodComparison, In as CampaignRunPlanCell, It as searchHistoryCoverageRow, J as optimizationTokenUsageFromSummary, Jt as SearchCandidateSurface, K as compareOptimizationMethods, Kn as inMemoryCampaignStorage, Kt as SearchCandidateSlot, L as OptimizationMethodInput, Ln as PlanCampaignRunOptions, Lt as verifySearchHistoryReceipt, Mn as CampaignCellRetryPolicy, Mt as SearchHistoryRequiredError, N as CompareOptimizationMethodsOptions, Nn as RunCampaignOptions, Nt as assertCompleteSearchHistory, On as openAutoPr, Ot as SearchHistoryCoverage, P as ComparisonCost, Pn as runCampaign, Pt as assertSearchHistoryMatchesReplay, Q as ExternalOptimizerSubmittedCandidate, Qt as SearchLedger, R as OptimizationMethodPairwise, Rn as planCampaignRun, Rt as FileSearchLedger, Sn as CrowdedFrontierParentOptions, St as GepaCandidatePopulationCandidate, Tn as crowdedFrontierParent, Tt as readGepaCandidatePopulationArtifact, U as OptimizationPackageSource, Un as CampaignStorage, Ut as SearchCandidateDecidedEvent, V as OptimizationMethodRunOptions, Vn as readCachedCell, Vt as SearchArtifactRef, W as OptimizationTokenUsage, Wn as createRunCostLedger, Wt as SearchCandidateLineage, X as ExternalOptimizerObservationArtifact, Xt as SearchCostAccounting, Y as ExternalOptimizerExecutionSummary, Yt as SearchCompletedEvent, Z as ExternalOptimizerObservationSummary, Zt as SearchFailureReason, _ as provenanceSpansPath, _n as SearchTaskAttemptedEvent, _t as SearchRecorder, a as LoopProvenanceBackend, an as SearchModelIdentity, at as transientDispatchFailure, bn as openSearchLedger, bt as recordCandidatePopulationSearch, c as LoopProvenanceOptimizationMethod, cn as SearchPlan, ct as runImprovementLoop, d as campaignMeasurementDigest, dn as SearchPlannedOperation, dt as RunOptimizationResult, en as SearchLedgerEntry, et as LlmJudgeDimension, f as canonicalDigest, fn as SearchPlannedTask, ft as runOptimization, g as provenanceRecordPath, gn as SearchSurfaceKind, gt as SearchLedgerBinding, h as loopProvenanceSpans, hn as SearchSurfaceEvidence, ht as SearchExecutionIdentity, i as LoopProvenanceArgsFromResult, in as SearchLedgerTrustedHeadMode, it as isTransientTransportFailure, jn as CampaignCellFailureReceipt, jt as SearchHistoryReceipt, kn as RunEvalOptions, kt as SearchHistoryCoverageRow, l as LoopProvenanceRecord, ln as SearchPlanExtendedEvent, lt as PremeasuredOptimizationBaseline, m as loopProvenanceArgsFromResult, mn as SearchSurfaceEffect, mt as ProposedSearchCandidate, n as EmitLoopProvenanceArgs, nn as SearchLedgerHash, nt as llmJudge, o as LoopProvenanceCandidate, on as SearchOperationKind, ot as RunImprovementLoopOptions, p as emitLoopProvenance, pn as SearchSourceRef, pt as MeasuredSearchCandidate, q as costFromLedgerSummary, qt as SearchCandidateSlotClosedEvent, r as EmitLoopProvenanceResult, rn as SearchLedgerReplay, rt as TransientFailureOptions, s as LoopProvenanceEvidence, sn as SearchOperationRecordedEvent, st as RunImprovementLoopResult, t as BuildLoopProvenanceArgs, tn as SearchLedgerEvent, tt as LlmJudgeOptions, u as buildLoopProvenanceRecord, un as SearchPlannedEvent, ut as RunOptimizationOptions, v as verifyLoopProvenanceRecord, vn as SearchTaskOutcome, vt as SearchRecorderOptions, wn as ParentSelector, wt as GepaCandidateSelectionScore, xn as validateSearchLedgerEvent, xt as GepaCandidatePopulationArtifact, yn as SearchTokenAccounting, yt as SearchRunIdentity, z as OptimizationMethodProvenance, zn as CacheIssueReason, zt as OpenSearchLedgerOptions } from "../provenance-CIRUardl.js";
4
+ import { A as LabeledScenarioWrite, B as ScoredSurfaceOutcome, C as JudgeDimension, D as LabeledScenarioSampleArgs, E as LabeledScenarioRecord, F as ProposeContext, G as labelTrustRank, H as SurfaceProposer, I as ProposedCandidate, L as RedactionStatus, M as OptimizerConfig, N as ParetoParent, O as LabeledScenarioSource, P as ProposalTrackContext, R as Scenario, S as JudgeConfig, T as LabelTrust, U as TraceSpan, V as SessionScript, W as isProposedCandidate, _ as GateDecision, a as CampaignResult, b as GenerationRecord, c as CampaignTraceWriter, d as DispatchContext, f as DispatchFn, g as GateContribution, h as GateContext, i as CampaignCostMeter, j as MutableSurface, k as LabeledScenarioStore, l as CodeSurface, m as GateCheckStatus, n as CampaignArtifactWriter, o as CampaignScenarioIdentity, p as Gate, r as CampaignCellResult, s as CampaignTokenUsage, t as CampaignAggregates, u as ComponentSurface, v as GateResult, w as JudgeScore, x as JudgeAggregate, y as GenerationCandidate, z as ScenarioAggregate } from "../types-Dy237wiH.js";
5
+ import { B as campaignSplitDigestFromIdentities, C as ExternalTextOptimizerContext, D as decodeExternalTextCandidate, E as ExternalTextEvaluationResponse, I as assertCampaignDesign, L as assertCampaignSplitIdentity, N as ReferenceEquivalenceScenario, P as createReferenceEquivalenceJudge, R as campaignScenarioIdentity, S as ExternalTextOptimizationMethodConfig, T as ExternalOptimizationExample, _ as GepaRunnerCommand, a as DefaultProductionRewardHackingOptions, b as OptimizerModelBudget, c as SkillOptOptimizationMethodConfig, d as skillOptOptimizationMethod, f as GepaAdaptiveEngineRun, g as GepaOptimizationRecipe, h as GepaOptimizationMethodConfig, i as DefaultProductionGateOptions, j as ReferenceEquivalenceJudgeOptions, l as SkillOptRunnerCommand, m as GepaEngineRun, n as heldOutGate, o as defaultProductionGate, p as GepaEngineOptions, r as DefaultProductionGateCheck, s as composeGate, t as HeldOutGateOptions, u as SkillOptTrainerConfig, v as gepaOptimizationMethod, w as ExternalTextOptimizerResult, x as externalTextOptimizationMethod, y as OpenAICompatibleOptimizerModel, z as campaignSplitDigest } from "../heldout-gate-Bn7_xWCv.js";
6
+ import { $ as makePlaybackDispatch, $t as CrossSurfaceEvidenceBreakdown, A as scoreDiscrimination, At as LoadEvalFixtureScenariosOptions, B as ProfileMatrixSegmentResult, Bt as CrossSurfaceAttemptCompleteness, C as acquireSingleRunLock, Cn as SearchLedgerIntegrityError, Ct as neutralizationGate, D as compareRankKeys, Dt as EvalFixtureRunPlan, E as campaignMeanComposite, Et as EvalFixtureLoadOptions, F as FinalizeProfileMatrixOptions, Ft as planEvalFixtureRun, G as PlaybackContext, Gt as CrossSurfaceCandidateEvidence, H as createProfileMatrixPlan, Ht as CrossSurfaceBootstrapPolicy, I as FinalizedProfileMatrixResult, It as analyzeCrossSurfaceInteractions, J as ScoreboardRenderOptions, Jt as CrossSurfaceComponent, K as PlaybackDriver, Kt as CrossSurfaceCandidateOutcome, L as ProfileMatrixCoverage, Lt as AnalyzeCrossSurfaceInteractionsInput, M as resolveRunDir, Mt as discoverEvalFixtures, N as tangleTracesRoot, Nt as loadEvalFixture, O as DiscriminationScore, Ot as EvalFixtureScenario, P as CreateProfileMatrixPlanOptions, Pt as loadEvalFixtureScenarios, Q as UserStoryVerdict, Qt as CrossSurfaceEligibility, R as ProfileMatrixPlan, Rt as CrossSurfaceAdditionDecision, S as SingleRunLockOptions, Sn as SearchLedgerError, St as NeutralizationGateOptions, T as campaignBreakdown, Tt as EvalFixtureFile, U as finalizeProfileMatrix, Ut as CrossSurfaceCandidate, V as RunProfileMatrixSegmentOptions, Vt as CrossSurfaceBestSingleSelection, W as runProfileMatrixSegment, Wt as CrossSurfaceCandidateComparison, X as ScoreboardSummary, Xt as CrossSurfaceCompositionStep, Y as ScoreboardRow, Yt as CrossSurfaceComponentEvidence, Z as UserStory, Zt as CrossSurfaceDistribution, _ as componentSurfaceIdentityMaterial, _n as TraceAnalystArtifact, _t as RolloutCall, a as WorktreeAdapterError, an as CrossSurfaceInteractionTask, at as ProfileMatrixError, b as surfaceHash, bn as traceAnalystQualityJudge, bt as classifyUngroundedLiterals, c as verifyCodeSurface, cn as CrossSurfacePairEvidence, ct as RunProfileMatrixResult, d as PhoenixEvaluationResultLike, dn as CrossSurfaceRankedSingle, dt as neutralizeText, en as CrossSurfaceIneligibilityReason, et as renderScoreboardMarkdown, f as PhoenixEvaluatorLike, fn as CrossSurfaceRelativeCost, ft as FsLabeledScenarioStore, g as codeSurfaceIdentityMaterial, gn as BuildTraceAnalystSurfaceDispatchOptions, gt as RolloutArgumentDiffOptions, h as assertCodeSurfaceIdentity, hn as CrossSurfaceTaskRow, ht as RolloutArgumentDiff, i as WorktreeAdapter, in as CrossSurfaceInteractionReport, it as ProfileDispatchFn, j as selectDiscriminative, jt as PlanEvalFixtureRunOptions, k as ScenarioSignal, kt as EvalFixtureValidationMode, l as AutoevalsScoreLike, ln as CrossSurfacePairIncompatibilityReason, lt as ScenarioRollup, m as phoenixEvaluatorJudge, mn as CrossSurfaceSelections, mt as LabeledScenarioStoreError, n as GitWorktreeAdapterOptions, nn as CrossSurfaceInteractionEffect, nt as scoreboardSummary, o as gitWorktreeAdapter, on as CrossSurfaceNaiveStackSelection, ot as ProfileSummary, p as autoevalsScorerJudge, pn as CrossSurfaceSelectionPolicy, pt as FsLabeledScenarioStoreOptions, q as PlaybackStep, qt as CrossSurfaceCandidateSummary, r as Worktree, rn as CrossSurfaceInteractionPath, rt as userStoryScoreboard, s as resolveWorktreePath, sn as CrossSurfacePairCompatibility, st as RunProfileMatrixOptions, t as CodeSurfaceVerification, tn as CrossSurfaceInteractionAwareSelection, tt as scoreUserStory, u as AutoevalsScorerLike, un as CrossSurfacePairwiseEntry, ut as runProfileMatrix, v as renderSurfaceDiff, vn as TraceAnalystScenario, vt as ScoredRollout, w as CampaignBreakdown, wt as EvalFixture, x as SingleRunLock, xn as SearchLedgerConflictError, xt as rolloutArgumentDiff, y as surfaceContentHash, yn as buildTraceAnalystSurfaceDispatch, yt as UngroundedLiteralReport, z as ProfileMatrixRow, zt as CrossSurfaceAdditionRejectionReason } from "../index-DBbivBNs.js";
4
7
  import { _ as ExternalTextCandidate, a as ExternalOptimizerEndpointFormat, b as resolveExternalOptimizerProcessLimits, c as ExternalOptimizerModelBudget, d as ExternalOptimizerModelCallResult, f as ExternalOptimizerModelExecutionObservation, h as ExternalOptimizerRunnerCommand, i as ExternalOptimizerChatRequest, l as ExternalOptimizerModelCall, n as DEFAULT_EXTERNAL_OPTIMIZER_PROCESS_LIMITS, o as ExternalOptimizerEvaluationObservation, p as ExternalOptimizerProcessLimits, r as ExternalOptimizerCallbackLimits, s as ExternalOptimizerEvaluationRefusalReason, t as DEFAULT_EXTERNAL_OPTIMIZER_CALLBACK_LIMITS, u as ExternalOptimizerModelCallRequest, y as resolveExternalOptimizerCallbackLimits } from "../external-optimizer-contracts-szBJ_1vh.js";
5
- import { A as LabeledScenarioWrite, B as ScoredSurfaceOutcome, C as JudgeDimension, D as LabeledScenarioSampleArgs, E as LabeledScenarioRecord, F as ProposeContext, G as labelTrustRank, H as SurfaceProposer, I as ProposedCandidate, L as RedactionStatus, M as OptimizerConfig, N as ParetoParent, O as LabeledScenarioSource, P as ProposalTrackContext, R as Scenario, S as JudgeConfig, T as LabelTrust, U as TraceSpan, V as SessionScript, W as isProposedCandidate, _ as GateDecision, a as CampaignResult, b as GenerationRecord, c as CampaignTraceWriter, d as DispatchContext, f as DispatchFn, g as GateContribution, h as GateContext, i as CampaignCostMeter, j as MutableSurface, k as LabeledScenarioStore, l as CodeSurface, m as GateCheckStatus, n as CampaignArtifactWriter, o as CampaignScenarioIdentity, p as Gate, r as CampaignCellResult, s as CampaignTokenUsage, t as CampaignAggregates, u as ComponentSurface, v as GateResult, w as JudgeScore, x as JudgeAggregate, y as GenerationCandidate, z as ScenarioAggregate } from "../types-D4s7Z6nq.js";
6
- import { A as campaignScenarioIdentity, C as ExternalTextOptimizerContext, D as decodeExternalTextCandidate, E as ExternalTextEvaluationResponse, I as ReferenceEquivalenceJudgeOptions, M as campaignSplitDigestFromIdentities, O as assertCampaignDesign, R as ReferenceEquivalenceScenario, S as ExternalTextOptimizationMethodConfig, T as ExternalOptimizationExample, _ as DefaultProductionGateOptions, a as GepaAdaptiveEngineRun, b as composeGate, c as GepaOptimizationMethodConfig, d as gepaOptimizationMethod, f as OpenAICompatibleOptimizerModel, g as DefaultProductionGateCheck, h as heldOutGate, i as skillOptOptimizationMethod, j as campaignSplitDigest, k as assertCampaignSplitIdentity, l as GepaOptimizationRecipe, m as HeldOutGateOptions, n as SkillOptRunnerCommand, o as GepaEngineOptions, p as OptimizerModelBudget, r as SkillOptTrainerConfig, s as GepaEngineRun, t as SkillOptOptimizationMethodConfig, u as GepaRunnerCommand, v as DefaultProductionRewardHackingOptions, w as ExternalTextOptimizerResult, x as externalTextOptimizationMethod, y as defaultProductionGate, z as createReferenceEquivalenceJudge } from "../skillopt-optimization-method-x7TTF23P.js";
7
- import { $ as makePlaybackDispatch, $t as CrossSurfaceCompositionStep, A as scoreDiscrimination, At as LoadEvalFixtureScenariosOptions, B as ProfileMatrixSegmentResult, Bt as AnalyzeCrossSurfaceInteractionsInput, C as acquireSingleRunLock, Cn as traceAnalystQualityJudge, Ct as neutralizationGate, D as compareRankKeys, Dt as EvalFixtureRunPlan, E as campaignMeanComposite, Et as EvalFixtureLoadOptions, F as FinalizeProfileMatrixOptions, Ft as planEvalFixtureRun, G as PlaybackContext, Gt as CrossSurfaceBootstrapPolicy, H as createProfileMatrixPlan, Ht as CrossSurfaceAdditionRejectionReason, I as FinalizedProfileMatrixResult, It as SearchLedgerConflictError, J as ScoreboardRenderOptions, Jt as CrossSurfaceCandidateEvidence, K as PlaybackDriver, Kt as CrossSurfaceCandidate, L as ProfileMatrixCoverage, Lt as SearchLedgerError, M as resolveRunDir, Mt as discoverEvalFixtures, N as tangleTracesRoot, Nt as loadEvalFixture, O as DiscriminationScore, Ot as EvalFixtureScenario, P as CreateProfileMatrixPlanOptions, Pt as loadEvalFixtureScenarios, Q as UserStoryVerdict, Qt as CrossSurfaceComponentEvidence, R as ProfileMatrixPlan, Rt as SearchLedgerIntegrityError, S as SingleRunLockOptions, Sn as buildTraceAnalystSurfaceDispatch, St as NeutralizationGateOptions, T as campaignBreakdown, Tt as EvalFixtureFile, U as finalizeProfileMatrix, Ut as CrossSurfaceAttemptCompleteness, V as RunProfileMatrixSegmentOptions, Vt as CrossSurfaceAdditionDecision, W as runProfileMatrixSegment, Wt as CrossSurfaceBestSingleSelection, X as ScoreboardSummary, Xt as CrossSurfaceCandidateSummary, Y as ScoreboardRow, Yt as CrossSurfaceCandidateOutcome, Z as UserStory, Zt as CrossSurfaceComponent, _ as componentSurfaceIdentityMaterial, _n as CrossSurfaceSelections, _t as RolloutCall, a as WorktreeAdapterError, an as CrossSurfaceInteractionEffect, at as ProfileMatrixError, b as surfaceHash, bn as TraceAnalystArtifact, bt as classifyUngroundedLiterals, c as verifyCodeSurface, cn as CrossSurfaceInteractionTask, ct as RunProfileMatrixResult, d as PhoenixEvaluationResultLike, dn as CrossSurfacePairEvidence, dt as neutralizeText, en as CrossSurfaceDistribution, et as renderScoreboardMarkdown, f as PhoenixEvaluatorLike, fn as CrossSurfacePairIncompatibilityReason, ft as FsLabeledScenarioStore, g as codeSurfaceIdentityMaterial, gn as CrossSurfaceSelectionPolicy, gt as RolloutArgumentDiffOptions, h as assertCodeSurfaceIdentity, hn as CrossSurfaceRelativeCost, ht as RolloutArgumentDiff, i as WorktreeAdapter, in as CrossSurfaceInteractionAwareSelection, it as ProfileDispatchFn, j as selectDiscriminative, jt as PlanEvalFixtureRunOptions, k as ScenarioSignal, kt as EvalFixtureValidationMode, l as AutoevalsScoreLike, ln as CrossSurfaceNaiveStackSelection, lt as ScenarioRollup, m as phoenixEvaluatorJudge, mn as CrossSurfaceRankedSingle, mt as LabeledScenarioStoreError, n as GitWorktreeAdapterOptions, nn as CrossSurfaceEvidenceBreakdown, nt as scoreboardSummary, o as gitWorktreeAdapter, on as CrossSurfaceInteractionPath, ot as ProfileSummary, p as autoevalsScorerJudge, pn as CrossSurfacePairwiseEntry, pt as FsLabeledScenarioStoreOptions, q as PlaybackStep, qt as CrossSurfaceCandidateComparison, r as Worktree, rn as CrossSurfaceIneligibilityReason, rt as userStoryScoreboard, s as resolveWorktreePath, sn as CrossSurfaceInteractionReport, st as RunProfileMatrixOptions, t as CodeSurfaceVerification, tn as CrossSurfaceEligibility, tt as scoreUserStory, u as AutoevalsScorerLike, un as CrossSurfacePairCompatibility, ut as runProfileMatrix, v as renderSurfaceDiff, vn as CrossSurfaceTaskRow, vt as ScoredRollout, w as CampaignBreakdown, wt as EvalFixture, x as SingleRunLock, xn as TraceAnalystScenario, xt as rolloutArgumentDiff, y as surfaceContentHash, yn as BuildTraceAnalystSurfaceDispatchOptions, yt as UngroundedLiteralReport, z as ProfileMatrixRow, zt as analyzeCrossSurfaceInteractions } from "../index-D-V8gCs_.js";
8
- import { c as powerPreflight, o as PowerPreflight, s as PowerPreflightOptions } from "../pareto-BqNW3LJR.js";
9
- import { a as ObjectiveSource, c as PromotionPolicy, d as paretoSignificanceGate, i as EvidenceVector, l as buildEvidenceVector, n as AxisVerdict, o as ParetoSignificanceGateOptions, r as BuildEvidenceVectorOptions, s as PromotionObjective, t as AxisEvidence, u as paretoPolicy } from "../promotion-policy-DtnOIZvk.js";
10
- import { _ as sequentialPairedGate, a as detectScale, c as pairHoldout, d as SequentialDecision, f as SequentialObservation, g as sequentialDecide, h as SequentialStreamState, i as PairedHoldout, l as SequentialDecideFn, m as SequentialPairedGateOptions, n as HeldoutSignificance, o as dimensionRegressions, p as SequentialPairedGate, r as HeldoutSignificanceOptions, s as heldoutSignificance, t as DimensionRegression, u as SequentialDecideOptions } from "../statistical-heldout-Cy3EhjlC.js";
8
+ import { n as PowerPreflightOptions, r as powerPreflight, t as PowerPreflight } from "../power-preflight-Ptse_Kq7.js";
9
+ import { a as ObjectiveSource, c as PromotionPolicy, d as paretoSignificanceGate, i as EvidenceVector, l as buildEvidenceVector, n as AxisVerdict, o as ParetoSignificanceGateOptions, r as BuildEvidenceVectorOptions, s as PromotionObjective, t as AxisEvidence, u as paretoPolicy } from "../promotion-policy-CkXSgKkF.js";
10
+ import { _ as sequentialPairedGate, a as detectScale, c as pairHoldout, d as SequentialDecision, f as SequentialObservation, g as sequentialDecide, h as SequentialStreamState, i as PairedHoldout, l as SequentialDecideFn, m as SequentialPairedGateOptions, n as HeldoutSignificance, o as dimensionRegressions, p as SequentialPairedGate, r as HeldoutSignificanceOptions, s as heldoutSignificance, t as DimensionRegression, u as SequentialDecideOptions } from "../statistical-heldout-DFS7QGpS.js";
11
11
  export { type AnalyzeCrossSurfaceInteractionsInput, type AutoevalsScoreLike, type AutoevalsScorerLike, type AxisEvidence, type AxisVerdict, type BuildEvidenceVectorOptions, type BuildLoopProvenanceArgs, type BuildTraceAnalystSurfaceDispatchOptions, type CacheIssueReason, type CacheRead, type CampaignAggregates, type CampaignArtifactWriter, type CampaignBreakdown, type CampaignCellFailureReceipt, type CampaignCellResult, type CampaignCellRetryPolicy, type CampaignCostMeter, type CampaignResult, type CampaignRunPlan, type CampaignRunPlanCell, type CampaignScenarioIdentity, type CampaignStorage, type CampaignTokenUsage, type CampaignTraceWriter, type CodeSurface, type CodeSurfaceVerification, type CompareOptimizationMethodsOptions, type ComparisonCost, type ComponentSurface, type CostLedgerHandle, type CreateProfileMatrixPlanOptions, type CreateSearchHistoryReceiptInput, type CrossSurfaceAdditionDecision, type CrossSurfaceAdditionRejectionReason, type CrossSurfaceAttemptCompleteness, type CrossSurfaceBestSingleSelection, type CrossSurfaceBootstrapPolicy, type CrossSurfaceCandidate, type CrossSurfaceCandidateComparison, type CrossSurfaceCandidateEvidence, type CrossSurfaceCandidateOutcome, type CrossSurfaceCandidateSummary, type CrossSurfaceComponent, type CrossSurfaceComponentEvidence, type CrossSurfaceCompositionStep, type CrossSurfaceDistribution, type CrossSurfaceEligibility, type CrossSurfaceEvidenceBreakdown, type CrossSurfaceIneligibilityReason, type CrossSurfaceInteractionAwareSelection, type CrossSurfaceInteractionEffect, type CrossSurfaceInteractionPath, type CrossSurfaceInteractionReport, type CrossSurfaceInteractionTask, type CrossSurfaceNaiveStackSelection, type CrossSurfacePairCompatibility, type CrossSurfacePairEvidence, type CrossSurfacePairIncompatibilityReason, type CrossSurfacePairwiseEntry, type CrossSurfaceRankedSingle, type CrossSurfaceRelativeCost, type CrossSurfaceSelectionPolicy, type CrossSurfaceSelections, type CrossSurfaceTaskRow, type CrowdedFrontierParentOptions, DEFAULT_EXTERNAL_OPTIMIZER_CALLBACK_LIMITS, DEFAULT_EXTERNAL_OPTIMIZER_PROCESS_LIMITS, type DefaultProductionGateCheck, type DefaultProductionGateOptions, type DefaultProductionRewardHackingOptions, type DimensionRegression, type DiscriminationScore, type DispatchContext, type DispatchFn, type EmitLoopProvenanceArgs, type EmitLoopProvenanceResult, type EvalFixture, type EvalFixtureFile, type EvalFixtureLoadOptions, type EvalFixtureRunPlan, type EvalFixtureScenario, type EvalFixtureValidationMode, type EvidenceVector, type ExternalOptimizationExample, type ExternalOptimizerCallbackLimits, type ExternalOptimizerChatRequest, type ExternalOptimizerEndpointFormat, type ExternalOptimizerEvaluationObservation, type ExternalOptimizerEvaluationRefusalReason, type ExternalOptimizerExecutionSummary, type ExternalOptimizerModelBudget, type ExternalOptimizerModelCall, type ExternalOptimizerModelCallRequest, type ExternalOptimizerModelCallResult, type ExternalOptimizerModelExecutionObservation, type ExternalOptimizerObservationArtifact, type ExternalOptimizerObservationSummary, type ExternalOptimizerProcessLimits, type ExternalOptimizerRunnerCommand, type ExternalOptimizerSubmittedCandidate, type ExternalTextCandidate, type ExternalTextEvaluationResponse, type ExternalTextOptimizationMethodConfig, type ExternalTextOptimizerContext, type ExternalTextOptimizerResult, FileSearchLedger, type FinalizeProfileMatrixOptions, type FinalizedProfileMatrixResult, FsLabeledScenarioStore, type FsLabeledScenarioStoreOptions, type Gate, type GateCheckStatus, type GateContext, type GateContribution, type GateDecision, type GateResult, type GenerationCandidate, type GenerationRecord, type GepaAdaptiveEngineRun, type GepaCandidatePopulationArtifact, type GepaCandidatePopulationCandidate, type GepaCandidatePopulationSummary, type GepaCandidateSelectionScore, type GepaEngineOptions, type GepaEngineRun, type GepaOptimizationMethodConfig, type GepaOptimizationRecipe, type GepaRunnerCommand, type GitWorktreeAdapterOptions, type HeldOutGateOptions, type HeldoutSignificance, type HeldoutSignificanceOptions, type JudgeAggregate, type JudgeConfig, type JudgeDimension, type JudgeScore, type LabelTrust, type LabeledScenarioRecord, type LabeledScenarioSampleArgs, type LabeledScenarioSource, type LabeledScenarioStore, LabeledScenarioStoreError, type LabeledScenarioWrite, type LlmJudgeDimension, type LlmJudgeOptions, type LoadEvalFixtureScenariosOptions, type LoopProvenanceArgsFromResult, type LoopProvenanceBackend, type LoopProvenanceCandidate, type LoopProvenanceEvidence, type LoopProvenanceOptimizationMethod, type LoopProvenanceRecord, type MeasuredSearchCandidate, type MutableSurface, type NeutralizationGateOptions, type ObjectiveSource, type OpenAICompatibleOptimizerModel, type OpenAutoPrOptions, type OpenAutoPrResult, type OpenSearchLedgerOptions, type OptimizationMethod, type OptimizationMethodComparison, type OptimizationMethodInput, type OptimizationMethodPairwise, type OptimizationMethodProvenance, type OptimizationMethodResult, type OptimizationMethodRunOptions, type OptimizationMethodScore, type OptimizationPackageSource, type OptimizationTokenUsage, type OptimizerConfig, type OptimizerModelBudget, type PairedHoldout, type ParentSelectionContext, type ParentSelector, type ParetoParent, type ParetoSignificanceGateOptions, type PendingCostCallView, type PhoenixEvaluationResultLike, type PhoenixEvaluatorLike, type PlanCampaignRunOptions, type PlanEvalFixtureRunOptions, type PlaybackContext, type PlaybackDriver, type PlaybackStep, type PowerPreflight, type PowerPreflightOptions, type PremeasuredOptimizationBaseline, type ProfileDispatchFn, type ProfileMatrixCoverage, ProfileMatrixError, type ProfileMatrixPlan, type ProfileMatrixRow, type ProfileMatrixSegmentResult, type ProfileSummary, type PromotionObjective, type PromotionPolicy, type ProposalFinding, type ProposalFindingOrigin, type ProposalTrackContext, type ProposeContext, type ProposedCandidate, type ProposedSearchCandidate, type RedactionStatus, type ReferenceEquivalenceJudgeOptions, type ReferenceEquivalenceScenario, type RolloutArgumentDiff, type RolloutArgumentDiffOptions, type RolloutCall, type RunCampaignOptions, type RunEvalOptions, type RunImprovementLoopOptions, type RunImprovementLoopResult, type RunOptimizationOptions, type RunOptimizationResult, type RunProfileMatrixOptions, type RunProfileMatrixResult, type RunProfileMatrixSegmentOptions, type Scenario, type ScenarioAggregate, type ScenarioRollup, type ScenarioSignal, type ScoreboardRenderOptions, type ScoreboardRow, type ScoreboardSummary, type ScoredRollout, type ScoredSurfaceOutcome, type SearchAccountingAudit, type SearchArtifactRef, type SearchAttemptAccounting, type SearchCandidateDecidedEvent, type SearchCandidateLineage, type SearchCandidateRegisteredEvent, type SearchCandidateSlot, type SearchCandidateSlotClosedEvent, type SearchCandidateSurface, type SearchCompletedEvent, type SearchCostAccounting, type SearchExecutionIdentity, type SearchFailureReason, type SearchHistoryAuditSummary, type SearchHistoryCoverage, type SearchHistoryCoverageRow, type SearchHistoryPolicy, type SearchHistoryReceipt, SearchHistoryRequiredError, type SearchLedger, type SearchLedgerAppendResult, type SearchLedgerBinding, SearchLedgerConflictError, type SearchLedgerEntry, SearchLedgerError, type SearchLedgerEvent, type SearchLedgerHash, SearchLedgerIntegrityError, type SearchLedgerReplay, type SearchLedgerTrustedHeadMode, type SearchModelIdentity, type SearchOperationKind, type SearchOperationRecordedEvent, type SearchPlan, type SearchPlanExtendedEvent, type SearchPlannedEvent, type SearchPlannedOperation, type SearchPlannedTask, SearchRecorder, type SearchRecorderOptions, type SearchRunIdentity, type SearchSourceRef, type SearchSurfaceEffect, type SearchSurfaceEvidence, type SearchSurfaceKind, type SearchTaskAttemptedEvent, type SearchTaskOutcome, type SearchTokenAccounting, type SequentialDecideFn, type SequentialDecideOptions, type SequentialDecision, type SequentialObservation, type SequentialPairedGate, type SequentialPairedGateOptions, type SequentialStreamState, type SessionScript, type SingleRunLock, type SingleRunLockOptions, type SkillOptOptimizationMethodConfig, type SkillOptRunnerCommand, type SkillOptTrainerConfig, type SurfaceProposer, type TraceAnalystArtifact, type TraceAnalystScenario, type TraceSpan, type TransientFailureOptions, type UngroundedLiteralReport, type UserStory, type UserStoryVerdict, type Worktree, type WorktreeAdapter, WorktreeAdapterError, acquireSingleRunLock, analyzeCrossSurfaceInteractions, assertCampaignDesign, assertCampaignSplitIdentity, assertCodeSurfaceIdentity, assertCompleteSearchHistory, assertSearchHistoryMatchesReplay, autoevalsScorerJudge, buildEvidenceVector, buildLoopProvenanceRecord, buildTraceAnalystSurfaceDispatch, campaignBreakdown, campaignMeanComposite, campaignMeasurementDigest, campaignScenarioIdentity, campaignSplitDigest, campaignSplitDigestFromIdentities, canonicalDigest, cellCachePath, classifyUngroundedLiterals, codeSurfaceIdentityMaterial, combineComparisonCosts, compareOptimizationMethods, compareRankKeys, componentSurfaceIdentityMaterial, composeGate, costFromLedgerSummary, createProfileMatrixPlan, createReferenceEquivalenceJudge, createRunCostLedger, createSearchHistoryReceipt, crowdedFrontierParent, decodeExternalTextCandidate, defaultProductionGate, detectScale, dimensionRegressions, discoverEvalFixtures, emitLoopProvenance, externalTextOptimizationMethod, finalizeProfileMatrix, fsCampaignStorage, gepaOptimizationMethod, gitWorktreeAdapter, heldOutGate, heldoutSignificance, inMemoryCampaignStorage, isProposedCandidate, isTransientTransportFailure, labelTrustRank, llmJudge, loadEvalFixture, loadEvalFixtureScenarios, loopProvenanceArgsFromResult, loopProvenanceSpans, makePlaybackDispatch, makeProposalFinding, neutralizationGate, neutralizeText, openAutoPr, openSearchLedger, optimizationTokenUsageFromSummary, pairHoldout, paretoPolicy, paretoSignificanceGate, phoenixEvaluatorJudge, planCampaignRun, planEvalFixtureRun, powerPreflight, provenanceRecordPath, provenanceSpansPath, readCachedCell, readExternalOptimizerObservationArtifact, readGepaCandidatePopulationArtifact, recordCandidatePopulationSearch, renderScoreboardMarkdown, renderSurfaceDiff, resolveExternalOptimizerCallbackLimits, resolveExternalOptimizerProcessLimits, resolveRunDir, resolveWorktreePath, rolloutArgumentDiff, runCampaign, runEval, runImprovementLoop, runOptimization, runProfileMatrix, runProfileMatrixSegment, scoreDiscrimination, scoreUserStory, scoreboardSummary, searchHistoryCoverageRow, selectDiscriminative, sequentialDecide, sequentialPairedGate, skillOptOptimizationMethod, surfaceContentHash, surfaceHash, tangleTracesRoot, traceAnalystQualityJudge, transientDispatchFailure, userStoryScoreboard, validateSearchLedgerEvent, verifyCodeSurface, verifyLoopProvenanceRecord, verifySearchHistoryReceipt };
@@ -1,10 +1,10 @@
1
- import { A as codeSurfaceIdentityMaterial, B as verifySearchHistoryReceipt, C as openAutoPr, D as costFromLedgerSummary, E as compareOptimizationMethods, F as SearchHistoryRequiredError, H as campaignMeanComposite, I as assertCompleteSearchHistory, J as readGepaCandidatePopulationArtifact, L as assertSearchHistoryMatchesReplay, M as renderSurfaceDiff, N as surfaceContentHash, O as optimizationTokenUsageFromSummary, P as surfaceHash, R as createSearchHistoryReceipt, T as combineComparisonCosts, U as compareRankKeys, V as campaignBreakdown, Y as defaultProductionGate, _ as labelTrustRank, a as buildLoopProvenanceRecord, at as tangleTracesRoot, c as emitLoopProvenance, d as provenanceRecordPath, dt as campaignScenarioIdentity, f as provenanceSpansPath, ft as campaignSplitDigest, g as isProposedCandidate, h as runOptimization, ht as cellCachePath, i as transientDispatchFailure, it as resolveRunDir, j as componentSurfaceIdentityMaterial, k as assertCodeSurfaceIdentity, l as loopProvenanceArgsFromResult, lt as assertCampaignDesign, m as runImprovementLoop, mt as readCachedCell, nt as runCampaign, o as campaignMeasurementDigest, p as verifyLoopProvenanceRecord, pt as campaignSplitDigestFromIdentities, r as isTransientTransportFailure, rt as planCampaignRun, s as canonicalDigest, t as llmJudge, tt as runEval, u as loopProvenanceSpans, ut as assertCampaignSplitIdentity, v as SearchRecorder, y as recordCandidatePopulationSearch, z as searchHistoryCoverageRow } from "../llm-judge-BhasIPFT.js";
2
- import { E as SearchLedgerIntegrityError, S as inMemoryCampaignStorage, T as SearchLedgerError, _ as resolveExternalOptimizerCallbackLimits, b as createRunCostLedger, c as DEFAULT_EXTERNAL_OPTIMIZER_CALLBACK_LIMITS, l as DEFAULT_EXTERNAL_OPTIMIZER_PROCESS_LIMITS, v as resolveExternalOptimizerProcessLimits, w as SearchLedgerConflictError, x as fsCampaignStorage } from "../external-optimizer-subprocess-BIWbHpgD.js";
3
- import { a as heldoutSignificance, i as dimensionRegressions, o as pairHoldout, r as detectScale, t as powerPreflight } from "../power-preflight-DEw-uC7q.js";
4
- import { r as makeProposalFinding } from "../types-BI4fT3HN.js";
5
- import { n as acquireSingleRunLock } from "../external-optimizer-process-WosTBChy.js";
6
- import { a as validateSearchLedgerEvent, c as externalTextOptimizationMethod, i as openSearchLedger, l as decodeExternalTextCandidate, n as gepaOptimizationMethod, o as heldOutGate, p as createReferenceEquivalenceJudge, r as FileSearchLedger, s as composeGate, t as skillOptOptimizationMethod, u as readExternalOptimizerObservationArtifact } from "../skillopt-optimization-method-DbaekMcn.js";
7
- import { A as analyzeCrossSurfaceInteractions, C as classifyUngroundedLiterals, D as loadEvalFixture, E as discoverEvalFixtures, M as traceAnalystQualityJudge, O as loadEvalFixtureScenarios, S as LabeledScenarioStoreError, T as neutralizationGate, _ as scoreboardSummary, a as autoevalsScorerJudge, b as neutralizeText, c as selectDiscriminative, d as runProfileMatrixSegment, f as ProfileMatrixError, g as scoreUserStory, h as renderScoreboardMarkdown, i as verifyCodeSurface, j as buildTraceAnalystSurfaceDispatch, k as planEvalFixtureRun, l as createProfileMatrixPlan, m as makePlaybackDispatch, n as gitWorktreeAdapter, o as phoenixEvaluatorJudge, p as runProfileMatrix, r as resolveWorktreePath, s as scoreDiscrimination, t as WorktreeAdapterError, u as finalizeProfileMatrix, v as userStoryScoreboard, w as rolloutArgumentDiff, x as FsLabeledScenarioStore, y as crowdedFrontierParent } from "../campaign-BSmOwskD.js";
8
- import { n as paretoPolicy, r as paretoSignificanceGate, t as buildEvidenceVector } from "../promotion-policy-xzA40Evo.js";
9
- import { n as sequentialPairedGate, t as sequentialDecide } from "../sequential-rYW-Ophm.js";
1
+ import { A as optimizationTokenUsageFromSummary, B as createSearchHistoryReceipt, D as combineComparisonCosts, F as surfaceContentHash, G as compareRankKeys, H as verifySearchHistoryReceipt, I as surfaceHash, L as SearchHistoryRequiredError, M as codeSurfaceIdentityMaterial, N as componentSurfaceIdentityMaterial, O as compareOptimizationMethods, P as renderSurfaceDiff, R as assertCompleteSearchHistory, T as openAutoPr, U as campaignBreakdown, V as searchHistoryCoverageRow, W as campaignMeanComposite, X as readGepaCandidatePopulationArtifact, Z as defaultProductionGate, _ as runOptimization, _t as cellCachePath, at as planCampaignRun, b as SearchRecorder, c as campaignMeasurementDigest, d as loopProvenanceArgsFromResult, dt as assertCampaignDesign, f as loopProvenanceSpans, ft as assertCampaignSplitIdentity, g as runImprovementLoop, gt as readCachedCell, h as verifyLoopProvenanceRecord, ht as campaignSplitDigestFromIdentities, i as transientDispatchFailure, it as runCampaign, j as assertCodeSurfaceIdentity, k as costFromLedgerSummary, l as canonicalDigest, m as provenanceSpansPath, mt as campaignSplitDigest, ot as resolveRunDir, p as provenanceRecordPath, pt as campaignScenarioIdentity, r as isTransientTransportFailure, rt as runEval, s as buildLoopProvenanceRecord, st as tangleTracesRoot, t as llmJudge, u as emitLoopProvenance, v as isProposedCandidate, x as recordCandidatePopulationSearch, y as labelTrustRank, z as assertSearchHistoryMatchesReplay } from "../llm-judge-DbJdo8Nj.js";
2
+ import { C as inMemoryCampaignStorage, D as SearchLedgerIntegrityError, E as SearchLedgerError, S as fsCampaignStorage, T as SearchLedgerConflictError, l as DEFAULT_EXTERNAL_OPTIMIZER_CALLBACK_LIMITS, u as DEFAULT_EXTERNAL_OPTIMIZER_PROCESS_LIMITS, v as resolveExternalOptimizerCallbackLimits, x as createRunCostLedger, y as resolveExternalOptimizerProcessLimits } from "../external-optimizer-subprocess-Cex8Da2i.js";
3
+ import { a as heldoutSignificance, i as dimensionRegressions, o as pairHoldout, r as detectScale, t as powerPreflight } from "../power-preflight-CFXm0Vjo.js";
4
+ import { i as makeProposalFinding } from "../types-CiWITkGo.js";
5
+ import { n as acquireSingleRunLock } from "../external-optimizer-process-CQxylYeG.js";
6
+ import { a as validateSearchLedgerEvent, c as externalTextOptimizationMethod, i as openSearchLedger, l as decodeExternalTextCandidate, n as gepaOptimizationMethod, o as heldOutGate, p as createReferenceEquivalenceJudge, r as FileSearchLedger, s as composeGate, t as skillOptOptimizationMethod, u as readExternalOptimizerObservationArtifact } from "../skillopt-optimization-method-B2R9C5aG.js";
7
+ import { A as analyzeCrossSurfaceInteractions, C as classifyUngroundedLiterals, D as loadEvalFixture, E as discoverEvalFixtures, M as traceAnalystQualityJudge, O as loadEvalFixtureScenarios, S as LabeledScenarioStoreError, T as neutralizationGate, _ as scoreboardSummary, a as autoevalsScorerJudge, b as neutralizeText, c as selectDiscriminative, d as runProfileMatrixSegment, f as ProfileMatrixError, g as scoreUserStory, h as renderScoreboardMarkdown, i as verifyCodeSurface, j as buildTraceAnalystSurfaceDispatch, k as planEvalFixtureRun, l as createProfileMatrixPlan, m as makePlaybackDispatch, n as gitWorktreeAdapter, o as phoenixEvaluatorJudge, p as runProfileMatrix, r as resolveWorktreePath, s as scoreDiscrimination, t as WorktreeAdapterError, u as finalizeProfileMatrix, v as userStoryScoreboard, w as rolloutArgumentDiff, x as FsLabeledScenarioStore, y as crowdedFrontierParent } from "../campaign-BeCbxFqs.js";
8
+ import { n as paretoPolicy, r as paretoSignificanceGate, t as buildEvidenceVector } from "../promotion-policy-LY9mVQ7W.js";
9
+ import { n as sequentialPairedGate, t as sequentialDecide } from "../sequential-B51qAYE4.js";
10
10
  export { DEFAULT_EXTERNAL_OPTIMIZER_CALLBACK_LIMITS, DEFAULT_EXTERNAL_OPTIMIZER_PROCESS_LIMITS, FileSearchLedger, FsLabeledScenarioStore, LabeledScenarioStoreError, ProfileMatrixError, SearchHistoryRequiredError, SearchLedgerConflictError, SearchLedgerError, SearchLedgerIntegrityError, SearchRecorder, WorktreeAdapterError, acquireSingleRunLock, analyzeCrossSurfaceInteractions, assertCampaignDesign, assertCampaignSplitIdentity, assertCodeSurfaceIdentity, assertCompleteSearchHistory, assertSearchHistoryMatchesReplay, autoevalsScorerJudge, buildEvidenceVector, buildLoopProvenanceRecord, buildTraceAnalystSurfaceDispatch, campaignBreakdown, campaignMeanComposite, campaignMeasurementDigest, campaignScenarioIdentity, campaignSplitDigest, campaignSplitDigestFromIdentities, canonicalDigest, cellCachePath, classifyUngroundedLiterals, codeSurfaceIdentityMaterial, combineComparisonCosts, compareOptimizationMethods, compareRankKeys, componentSurfaceIdentityMaterial, composeGate, costFromLedgerSummary, createProfileMatrixPlan, createReferenceEquivalenceJudge, createRunCostLedger, createSearchHistoryReceipt, crowdedFrontierParent, decodeExternalTextCandidate, defaultProductionGate, detectScale, dimensionRegressions, discoverEvalFixtures, emitLoopProvenance, externalTextOptimizationMethod, finalizeProfileMatrix, fsCampaignStorage, gepaOptimizationMethod, gitWorktreeAdapter, heldOutGate, heldoutSignificance, inMemoryCampaignStorage, isProposedCandidate, isTransientTransportFailure, labelTrustRank, llmJudge, loadEvalFixture, loadEvalFixtureScenarios, loopProvenanceArgsFromResult, loopProvenanceSpans, makePlaybackDispatch, makeProposalFinding, neutralizationGate, neutralizeText, openAutoPr, openSearchLedger, optimizationTokenUsageFromSummary, pairHoldout, paretoPolicy, paretoSignificanceGate, phoenixEvaluatorJudge, planCampaignRun, planEvalFixtureRun, powerPreflight, provenanceRecordPath, provenanceSpansPath, readCachedCell, readExternalOptimizerObservationArtifact, readGepaCandidatePopulationArtifact, recordCandidatePopulationSearch, renderScoreboardMarkdown, renderSurfaceDiff, resolveExternalOptimizerCallbackLimits, resolveExternalOptimizerProcessLimits, resolveRunDir, resolveWorktreePath, rolloutArgumentDiff, runCampaign, runEval, runImprovementLoop, runOptimization, runProfileMatrix, runProfileMatrixSegment, scoreDiscrimination, scoreUserStory, scoreboardSummary, searchHistoryCoverageRow, selectDiscriminative, sequentialDecide, sequentialPairedGate, skillOptOptimizationMethod, surfaceContentHash, surfaceHash, tangleTracesRoot, traceAnalystQualityJudge, transientDispatchFailure, userStoryScoreboard, validateSearchLedgerEvent, verifyCodeSurface, verifyLoopProvenanceRecord, verifySearchHistoryReceipt };
@@ -1,21 +1,22 @@
1
1
  import { s as ValidationError, t as AgentEvalError } from "./errors-Dngq5h35.js";
2
- import { c as agentProfileId, d as harnessAxisOf, i as verifyCompletion, l as agentProfileModelId, s as agentProfileHash, t as extractProducedState } from "./produced-state-DZ89riy5.js";
2
+ import { i as compareCodeUnits } from "./canonical-DPyQ_rpt.js";
3
+ import { c as agentProfileId, d as harnessAxisOf, i as verifyCompletion, l as agentProfileModelId, s as agentProfileHash, t as extractProducedState } from "./produced-state-CtSIp5cQ.js";
3
4
  import { buildAgentProfileCell } from "./profile-cell.js";
4
- import { c as mulberry32 } from "./internal-BDHPCnjk.js";
5
- import { t as comparePairedArms } from "./paired-arms-D-XRF_fy.js";
6
- import { r as pairedBootstrap } from "./paired-tests-BHIhYVdu.js";
7
- import { c as validateRunRecord, i as modelHasSnapshot, n as UNKNOWN_MODEL, s as runTaskScore } from "./run-record-BC0ebuRP.js";
8
- import { n as contentHash, t as canonicalJson } from "./verdict-cache-CdVVTVmn.js";
9
- import { N as surfaceContentHash, S as paretoFrontierWithCrowding, _ as labelTrustRank, ct as summarizeBackendIntegrity, dt as campaignScenarioIdentity, gt as computeManifestHash, ht as cellCachePath, it as resolveRunDir, k as assertCodeSurfaceIdentity, lt as assertCampaignDesign, nt as runCampaign, rt as planCampaignRun, st as assertRealBackend } from "./llm-judge-BhasIPFT.js";
10
- import { a as campaignCellCostProvenance, l as campaignCellToRunRecord, u as projectCampaignCellQuality } from "./reward-hacking-t4lB1yt8.js";
5
+ import { t as mulberry32 } from "./random-Dn5fPWkt.js";
6
+ import { t as comparePairedArms } from "./paired-arms-D4aeIHUy.js";
7
+ import { r as pairedBootstrap } from "./paired-tests-C8iCsioC.js";
8
+ import { c as validateRunRecord, i as modelHasSnapshot, n as UNKNOWN_MODEL, s as runTaskScore } from "./run-record-DLORoL7t.js";
9
+ import { n as contentHash, t as canonicalJson } from "./verdict-cache-B3eCVQtY.js";
10
+ import { F as surfaceContentHash, _t as cellCachePath, at as planCampaignRun, dt as assertCampaignDesign, it as runCampaign, j as assertCodeSurfaceIdentity, lt as assertRealBackend, ot as resolveRunDir, pt as campaignScenarioIdentity, ut as summarizeBackendIntegrity, vt as computeManifestHash, w as paretoFrontierWithCrowding, y as labelTrustRank } from "./llm-judge-DbJdo8Nj.js";
11
+ import { a as campaignCellCostProvenance, l as campaignCellToRunRecord, u as projectCampaignCellQuality } from "./reward-hacking-SkxYgT0x.js";
11
12
  import { t as CostAccountingIncompleteError } from "./cost-ledger-B1qx30B4.js";
12
- import { u as mapConcurrent } from "./ledger-core-BOzlRygb.js";
13
- import { x as fsCampaignStorage } from "./external-optimizer-subprocess-BIWbHpgD.js";
14
- import { o as pairHoldout } from "./power-preflight-DEw-uC7q.js";
15
- import { a as scoreAnalystFindings } from "./benchmark-BhT16ep9.js";
16
- import "./external-optimizer-process-WosTBChy.js";
17
- import "./skillopt-optimization-method-DbaekMcn.js";
18
- import "./sequential-rYW-Ophm.js";
13
+ import { u as mapConcurrent } from "./ledger-core-PIfjCbKn.js";
14
+ import { S as fsCampaignStorage } from "./external-optimizer-subprocess-Cex8Da2i.js";
15
+ import { o as pairHoldout } from "./power-preflight-CFXm0Vjo.js";
16
+ import { a as scoreAnalystFindings } from "./benchmark-C4wk_Sjr.js";
17
+ import "./external-optimizer-process-CQxylYeG.js";
18
+ import "./skillopt-optimization-method-B2R9C5aG.js";
19
+ import "./sequential-B51qAYE4.js";
19
20
  import { createHash } from "node:crypto";
20
21
  import { closeSync, constants, existsSync, fstatSync, lstatSync, mkdirSync, mkdtempSync, openSync, readFileSync, readSync, readdirSync, readlinkSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
21
22
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
@@ -1182,8 +1183,8 @@ var FsLabeledScenarioStore = class {
1182
1183
  }
1183
1184
  }
1184
1185
  all.sort((a, b) => {
1185
- if (a.capturedAt !== b.capturedAt) return a.capturedAt.localeCompare(b.capturedAt);
1186
- return a.recordHash.localeCompare(b.recordHash);
1186
+ if (a.capturedAt !== b.capturedAt) return compareCodeUnits(a.capturedAt, b.capturedAt);
1187
+ return compareCodeUnits(a.recordHash, b.recordHash);
1187
1188
  });
1188
1189
  return all.slice(0, args.count);
1189
1190
  }
@@ -3049,4 +3050,4 @@ function resolveWorktreePath(surface, worktreeDir) {
3049
3050
  //#endregion
3050
3051
  export { analyzeCrossSurfaceInteractions as A, classifyUngroundedLiterals as C, loadEvalFixture as D, discoverEvalFixtures as E, traceAnalystQualityJudge as M, loadEvalFixtureScenarios as O, LabeledScenarioStoreError as S, neutralizationGate as T, scoreboardSummary as _, autoevalsScorerJudge as a, neutralizeText as b, selectDiscriminative as c, runProfileMatrixSegment as d, ProfileMatrixError as f, scoreUserStory as g, renderScoreboardMarkdown as h, verifyCodeSurface as i, buildTraceAnalystSurfaceDispatch as j, planEvalFixtureRun as k, createProfileMatrixPlan as l, makePlaybackDispatch as m, gitWorktreeAdapter as n, phoenixEvaluatorJudge as o, runProfileMatrix as p, resolveWorktreePath as r, scoreDiscrimination as s, WorktreeAdapterError as t, finalizeProfileMatrix as u, userStoryScoreboard as v, rolloutArgumentDiff as w, FsLabeledScenarioStore as x, crowdedFrontierParent as y };
3051
3052
 
3052
- //# sourceMappingURL=campaign-BSmOwskD.js.map
3053
+ //# sourceMappingURL=campaign-BeCbxFqs.js.map