@tangle-network/agent-eval 0.216.1 → 0.217.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +102 -57
- package/README.md +2 -2
- package/dist/adapters/http.d.ts +2 -2
- package/dist/{agent-profile-VFcQncbW.d.ts → agent-profile-DTt8uGP9.d.ts} +4 -17
- package/dist/agent-profile-DTt8uGP9.d.ts.map +1 -0
- package/dist/{agent-profile-cell-BK8mlqlq.js → agent-profile-cell-B1V1gUZs.js} +4 -53
- package/dist/agent-profile-cell-B1V1gUZs.js.map +1 -0
- package/dist/{agent-profile-cell-BNp-Js9F.d.ts → agent-profile-cell-BcpFbNd5.d.ts} +2 -22
- package/dist/agent-profile-cell-BcpFbNd5.d.ts.map +1 -0
- package/dist/{agreement-irr-BEWLIF3_.js → agreement-irr-BhAqjluA.js} +5 -5
- package/dist/agreement-irr-BhAqjluA.js.map +1 -0
- package/dist/analyst/index.d.ts +36 -169
- package/dist/analyst/index.d.ts.map +1 -1
- package/dist/analyst/index.js +17 -192
- package/dist/analyst/index.js.map +1 -1
- package/dist/{analyze-runs-C84irm4i.js → analyze-runs-DqPJaJ4X.js} +225 -21
- package/dist/analyze-runs-DqPJaJ4X.js.map +1 -0
- package/dist/{analyze-runs-D68fd-su.d.ts → analyze-runs-DyeNcenW.d.ts} +5 -5
- package/dist/{analyze-runs-D68fd-su.d.ts.map → analyze-runs-DyeNcenW.d.ts.map} +1 -1
- package/dist/authenticity/index.d.ts +0 -23
- package/dist/authenticity/index.d.ts.map +1 -1
- package/dist/authenticity/index.js +1 -34
- package/dist/authenticity/index.js.map +1 -1
- package/dist/{benchmark-command-By0vh8q7.js → benchmark-command-xQK8nOI6.js} +554 -89
- package/dist/benchmark-command-xQK8nOI6.js.map +1 -0
- package/dist/benchmarks/index.d.ts +5 -6
- package/dist/benchmarks/index.d.ts.map +1 -1
- package/dist/benchmarks/index.js +4 -4
- package/dist/benchmarks/index.js.map +1 -1
- package/dist/builder-eval/index.d.ts +3 -3
- package/dist/builder-eval/index.js +2 -2
- package/dist/builder-eval/index.js.map +1 -1
- package/dist/campaign/index.d.ts +7 -7
- package/dist/campaign/index.js +15 -15
- package/dist/{campaign-BudZ70zo.js → campaign-CJGkxAQ6.js} +23 -530
- package/dist/campaign-CJGkxAQ6.js.map +1 -0
- package/dist/{campaign-evidence-Clrn4hBV.js → campaign-evidence-CQYw8_0H.js} +10 -18
- package/dist/{campaign-evidence-Clrn4hBV.js.map → campaign-evidence-CQYw8_0H.js.map} +1 -1
- package/dist/{canonical-B2RqLofv.js → canonical-Dq2hOQ8L.js} +2 -2
- package/dist/{canonical-B2RqLofv.js.map → canonical-Dq2hOQ8L.js.map} +1 -1
- package/dist/cell-spend-DEWR3nj-.js +90 -0
- package/dist/cell-spend-DEWR3nj-.js.map +1 -0
- package/dist/{chat-client-l-MVDlDk.js → chat-client-ldqxYYTN.js} +2 -2
- package/dist/{chat-client-l-MVDlDk.js.map → chat-client-ldqxYYTN.js.map} +1 -1
- package/dist/{chat-json-call-puMArmtW.js → chat-json-call-DavzexSp.js} +3 -2
- package/dist/chat-json-call-DavzexSp.js.map +1 -0
- package/dist/{claim-q4HQhK1G.js → claim-BPVuyHuy.js} +3 -3
- package/dist/{claim-q4HQhK1G.js.map → claim-BPVuyHuy.js.map} +1 -1
- package/dist/cli.js +113 -12
- package/dist/cli.js.map +1 -1
- package/dist/{client-BzL9niqi.d.ts → client-hwo3cJjR.d.ts} +3 -16
- package/dist/client-hwo3cJjR.d.ts.map +1 -0
- package/dist/{cluster-bootstrap-qcUWYFl-.js → cluster-bootstrap-DEwwhl0C.js} +3 -3
- package/dist/{cluster-bootstrap-qcUWYFl-.js.map → cluster-bootstrap-DEwwhl0C.js.map} +1 -1
- package/dist/{produced-state-BsDmnwxc.js → completion-verifier-B_jw6C9p.js} +9 -64
- package/dist/completion-verifier-B_jw6C9p.js.map +1 -0
- package/dist/contract/index.d.ts +12 -12
- package/dist/contract/index.js +25 -401
- package/dist/contract/index.js.map +1 -1
- package/dist/{cost-ledger-BP8V4kUQ.js → cost-ledger-D0352Z4d.js} +4 -8
- package/dist/cost-ledger-D0352Z4d.js.map +1 -0
- package/dist/dataset-DQqhOCPt.d.ts.map +1 -1
- package/dist/{default-registry-COhk9g36.js → default-registry-ClYjq3QE.js} +8 -11
- package/dist/default-registry-ClYjq3QE.js.map +1 -0
- package/dist/{default-registry-DzHiGruW.d.ts → default-registry-DXgLmoDI.d.ts} +7 -50
- package/dist/default-registry-DXgLmoDI.d.ts.map +1 -0
- package/dist/{define-agent-eval-CNTPzIkp.js → define-agent-eval-BDxNlP3D.js} +10 -10
- package/dist/{define-agent-eval-CNTPzIkp.js.map → define-agent-eval-BDxNlP3D.js.map} +1 -1
- package/dist/{define-agent-eval-WSck0CZJ.d.ts → define-agent-eval-BIkH_gAR.d.ts} +8 -8
- package/dist/define-agent-eval-BIkH_gAR.d.ts.map +1 -0
- package/dist/{descriptive-DboxPZrG.js → descriptive-CVNy48rR.js} +2 -2
- package/dist/{descriptive-DboxPZrG.js.map → descriptive-CVNy48rR.js.map} +1 -1
- package/dist/diagnosis/index.d.ts +4 -14
- package/dist/diagnosis/index.d.ts.map +1 -1
- package/dist/diagnosis/index.js +67 -28
- package/dist/diagnosis/index.js.map +1 -1
- package/dist/{dspy-rlm-engine-LRCu61m5.js → dspy-rlm-engine-DhdCr1Dc.js} +5 -10
- package/dist/dspy-rlm-engine-DhdCr1Dc.js.map +1 -0
- package/dist/{emitter-HcCmFQl_.d.ts → emitter-DABYYTcH.d.ts} +5 -5
- package/dist/emitter-DABYYTcH.d.ts.map +1 -0
- package/dist/emitter-DbMXUIVP.js.map +1 -1
- package/dist/{engine-3A_4jOlI.d.ts → engine-BvZ0R-36.d.ts} +17 -21
- package/dist/engine-BvZ0R-36.d.ts.map +1 -0
- package/dist/{equal-terms-BtdXayCJ.js → equal-terms-DbPGcVtI.js} +2 -2
- package/dist/equal-terms-DbPGcVtI.js.map +1 -0
- package/dist/{errors-DVZiqS7K.js → errors-BcOs5MKW.js} +2 -8
- package/dist/{errors-DVZiqS7K.js.map → errors-BcOs5MKW.js.map} +1 -1
- package/dist/{eval-campaign-90jeaCAI.js → eval-campaign-BLEfBGbA.js} +6 -6
- package/dist/{eval-campaign-90jeaCAI.js.map → eval-campaign-BLEfBGbA.js.map} +1 -1
- package/dist/{evaluation-6Yoi74gM.d.ts → evaluation-jTjC_QQD.d.ts} +7 -7
- package/dist/evaluation-jTjC_QQD.d.ts.map +1 -0
- package/dist/evaluation.d.ts +2 -2
- package/dist/evaluation.js +1 -1
- package/dist/evaluation.js.map +1 -1
- package/dist/{exact-types-ClugMJfI.d.ts → exact-types-CflbJ9f3.d.ts} +2 -2
- package/dist/{exact-types-ClugMJfI.d.ts.map → exact-types-CflbJ9f3.d.ts.map} +1 -1
- package/dist/{exec-ChJ6d5if.js → exec-CpbtOXVt.js} +2 -24
- package/dist/{exec-ChJ6d5if.js.map → exec-CpbtOXVt.js.map} +1 -1
- package/dist/execution-tracks-CpgFPpS5.js.map +1 -1
- package/dist/experiment/index.d.ts +9 -112
- package/dist/experiment/index.d.ts.map +1 -1
- package/dist/experiment/index.js +149 -241
- package/dist/experiment/index.js.map +1 -1
- package/dist/{exporters-X4xwla8A.js → exporters-Cl6IeNAu.js} +3 -3
- package/dist/exporters-Cl6IeNAu.js.map +1 -0
- package/dist/{exporters-ChTnR90l.d.ts → exporters-Dk3oEbK_.d.ts} +2 -4
- package/dist/{exporters-ChTnR90l.d.ts.map → exporters-Dk3oEbK_.d.ts.map} +1 -1
- package/dist/{external-optimizer-process-BjMGUuds.js → external-optimizer-process-KVFGvYX1.js} +4 -3
- package/dist/external-optimizer-process-KVFGvYX1.js.map +1 -0
- package/dist/{external-optimizer-subprocess-BqW0hHcI.js → external-optimizer-subprocess-XIHBOSKt.js} +9 -11
- package/dist/external-optimizer-subprocess-XIHBOSKt.js.map +1 -0
- package/dist/{extract-usage-BrnzRJ6H.js → extract-usage-BZLU01kR.js} +2 -23
- package/dist/{extract-usage-BrnzRJ6H.js.map → extract-usage-BZLU01kR.js.map} +1 -1
- package/dist/{failure-cluster-CbgEDcFJ.d.ts → failure-cluster-DN0t63Z0.d.ts} +4 -43
- package/dist/failure-cluster-DN0t63Z0.d.ts.map +1 -0
- package/dist/{failure-taxonomy-CjabTATj.js → failure-taxonomy-Bx5oWqaW.js} +2 -19
- package/dist/{failure-taxonomy-CjabTATj.js.map → failure-taxonomy-Bx5oWqaW.js.map} +1 -1
- package/dist/{feedback-trajectory-C4EG0nNH.d.ts → feedback-trajectory-BWmhRBGu.d.ts} +7 -9
- package/dist/feedback-trajectory-BWmhRBGu.d.ts.map +1 -0
- package/dist/{semantic-concept-judge-BQF8te0T.js → findings-store-BMVQtEsm.js} +9 -249
- package/dist/findings-store-BMVQtEsm.js.map +1 -0
- package/dist/fuzz.d.ts +19 -62
- package/dist/fuzz.d.ts.map +1 -1
- package/dist/fuzz.js +62 -108
- package/dist/fuzz.js.map +1 -1
- package/dist/{hf-dataset-BR2yhuNn.js → hf-dataset-D9f7-oX7.js} +4 -24
- package/dist/hf-dataset-D9f7-oX7.js.map +1 -0
- package/dist/hosted/index.d.ts +2 -2
- package/dist/hosted/index.js +2 -2
- package/dist/{index-DHKEAv3s.d.ts → index-9jJ2fKSX.d.ts} +2 -64
- package/dist/index-9jJ2fKSX.d.ts.map +1 -0
- package/dist/{index-DV-jSzxF.d.ts → index-BLGqZ81N.d.ts} +10 -15
- package/dist/{index-DV-jSzxF.d.ts.map → index-BLGqZ81N.d.ts.map} +1 -1
- package/dist/{index-DPcngtwt.d.ts → index-BiT6RtNH.d.ts} +11 -36
- package/dist/index-BiT6RtNH.d.ts.map +1 -0
- package/dist/{index-BO41eGj5.d.ts → index-CX-GAUpw.d.ts} +3 -7
- package/dist/index-CX-GAUpw.d.ts.map +1 -0
- package/dist/{index-BFRO6chs.d.ts → index-CiRwLv2R.d.ts} +5 -69
- package/dist/index-CiRwLv2R.d.ts.map +1 -0
- package/dist/{index-CyszSg4O.d.ts → index-ZuWx52WG.d.ts} +115 -347
- package/dist/index-ZuWx52WG.d.ts.map +1 -0
- package/dist/index.d.ts +211 -218
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +402 -1040
- package/dist/index.js.map +1 -1
- package/dist/{integrity-dLiDe2kD.js → integrity-DOd9Q86O.js} +7 -9
- package/dist/integrity-DOd9Q86O.js.map +1 -0
- package/dist/{integrity-BXOsAb3i.js → integrity-W4CADcFc.js} +3 -7
- package/dist/{integrity-BXOsAb3i.js.map → integrity-W4CADcFc.js.map} +1 -1
- package/dist/{integrity-DAMEDFaC.d.ts → integrity-_qgZLA5p.d.ts} +4 -6
- package/dist/{integrity-DAMEDFaC.d.ts.map → integrity-_qgZLA5p.d.ts.map} +1 -1
- package/dist/{internal-Epl-YBZW.js → internal-BTK91Bqt.js} +3 -3
- package/dist/{internal-Epl-YBZW.js.map → internal-BTK91Bqt.js.map} +1 -1
- package/dist/{interval-CELpye1n.js → interval-Dq9gt7jx.js} +3 -3
- package/dist/{interval-CELpye1n.js.map → interval-Dq9gt7jx.js.map} +1 -1
- package/dist/{journal-DfRz9kps.js → journal-CR4QikYp.js} +110 -110
- package/dist/journal-CR4QikYp.js.map +1 -0
- package/dist/json-BhdsJaOQ.js +111 -0
- package/dist/json-BhdsJaOQ.js.map +1 -0
- package/dist/{judge-calibration-BpCy5XQl.js → judge-calibration-BkXMIWA4.js} +3 -3
- package/dist/{judge-calibration-BpCy5XQl.js.map → judge-calibration-BkXMIWA4.js.map} +1 -1
- package/dist/{judge-gate-iY9s4L44.js → judge-gate-Co5tuh57.js} +4 -27
- package/dist/{judge-gate-iY9s4L44.js.map → judge-gate-Co5tuh57.js.map} +1 -1
- package/dist/{judge-gate-CE7CQAgt.d.ts → judge-gate-DsL0yFcb.d.ts} +8 -9
- package/dist/judge-gate-DsL0yFcb.d.ts.map +1 -0
- package/dist/{kind-factory-BobI5Jy3.js → kind-factory-Gy4fXixd.js} +88 -17
- package/dist/kind-factory-Gy4fXixd.js.map +1 -0
- package/dist/ledger-core/index.d.ts +2 -2
- package/dist/ledger-core/index.js +4 -4
- package/dist/{ledger-core-Gq7yp8lP.js → ledger-core-DrJhbms9.js} +5 -84
- package/dist/ledger-core-DrJhbms9.js.map +1 -0
- package/dist/{llm-client-CyBAoYiX.js → llm-client-BshCREn6.js} +6 -108
- package/dist/llm-client-BshCREn6.js.map +1 -0
- package/dist/{llm-judge-CG12SQJq.js → llm-judge-C8jMTNNG.js} +24 -32
- package/dist/llm-judge-C8jMTNNG.js.map +1 -0
- package/dist/matrix/index.d.ts +3 -3
- package/dist/matrix/index.js +3 -2
- package/dist/{matrix-Dm0BQW7U.js → matrix-B8l-Nsxd.js} +3 -88
- package/dist/matrix-B8l-Nsxd.js.map +1 -0
- package/dist/{matrix-DSrSxjjy.d.ts → matrix-DHe-dwVJ.d.ts} +9 -18
- package/dist/matrix-DHe-dwVJ.d.ts.map +1 -0
- package/dist/{mean-DHoMiudD.js → mean-BbA_JCzW.js} +39 -5
- package/dist/mean-BbA_JCzW.js.map +1 -0
- package/dist/meta-eval/index.d.ts +5 -5
- package/dist/meta-eval/index.js +10 -10
- package/dist/metrics-BKaPBtIG.js.map +1 -1
- package/dist/{mint-DNU8QPG4.d.ts → mint-BRZXuwRi.d.ts} +4 -4
- package/dist/{mint-DNU8QPG4.d.ts.map → mint-BRZXuwRi.d.ts.map} +1 -1
- package/dist/{mint-QaD5cA0u.js → mint-zszyYlpA.js} +4 -4
- package/dist/{mint-QaD5cA0u.js.map → mint-zszyYlpA.js.map} +1 -1
- package/dist/{multi-layer-verifier-BUaQ4C17.d.ts → multi-layer-verifier-DEgMUk6v.d.ts} +2 -2
- package/dist/{multi-layer-verifier-BUaQ4C17.d.ts.map → multi-layer-verifier-DEgMUk6v.d.ts.map} +1 -1
- package/dist/{multiplicity-DQUFcbW4.js → multiplicity-Sg0U7h8j.js} +2 -2
- package/dist/{multiplicity-DQUFcbW4.js.map → multiplicity-Sg0U7h8j.js.map} +1 -1
- package/dist/multishot/golden/index.d.ts +1 -23
- package/dist/multishot/golden/index.d.ts.map +1 -1
- package/dist/multishot/golden/index.js +3 -3
- package/dist/multishot/golden/index.js.map +1 -1
- package/dist/multishot/index.d.ts +3 -12
- package/dist/multishot/index.d.ts.map +1 -1
- package/dist/multishot/index.js +4 -3
- package/dist/multishot/index.js.map +1 -1
- package/dist/openapi.json +114 -10
- package/dist/{otel-spans-B9tUXRHF.js → otel-spans-CdN909k1.js} +3 -3
- package/dist/{otel-spans-B9tUXRHF.js.map → otel-spans-CdN909k1.js.map} +1 -1
- package/dist/{paired-arms-CwMGJsrS.js → paired-arms-Ct4LTKc1.js} +32 -9
- package/dist/paired-arms-Ct4LTKc1.js.map +1 -0
- package/dist/{paired-binary-CvpFHfKZ.js → paired-binary-B_nejA44.js} +3 -36
- package/dist/paired-binary-B_nejA44.js.map +1 -0
- package/dist/{paired-promotion-decision-DPKz8ZnF.d.ts → paired-promotion-decision-CQMJ5xGN.d.ts} +2 -34
- package/dist/paired-promotion-decision-CQMJ5xGN.d.ts.map +1 -0
- package/dist/{paired-promotion-decision-DsAPYGCm.js → paired-promotion-decision-D0SHb-ZL.js} +3 -3
- package/dist/{paired-promotion-decision-DsAPYGCm.js.map → paired-promotion-decision-D0SHb-ZL.js.map} +1 -1
- package/dist/{pareto-Cm6ndrWN.js → pareto-BzsxidFD.js} +11 -11
- package/dist/pareto-BzsxidFD.js.map +1 -0
- package/dist/pipelines/index.d.ts +16 -19
- package/dist/pipelines/index.d.ts.map +1 -1
- package/dist/pipelines/index.js +4 -68
- package/dist/pipelines/index.js.map +1 -1
- package/dist/{power-and-mde-Hj2ubb4B.js → power-and-mde-N5nU4_Ly.js} +3 -3
- package/dist/{power-and-mde-Hj2ubb4B.js.map → power-and-mde-N5nU4_Ly.js.map} +1 -1
- package/dist/{prime-protocol-CHKgA3a6.js → prime-protocol-BFgGrEMP.js} +3 -3
- package/dist/prime-protocol-BFgGrEMP.js.map +1 -0
- package/dist/{prime-protocol-HiB9HX7E.d.ts → prime-protocol-BWG2DQIk.d.ts} +3 -21
- package/dist/prime-protocol-BWG2DQIk.d.ts.map +1 -0
- package/dist/profile-cell.d.ts +2 -2
- package/dist/profile-cell.js +2 -2
- package/dist/{promotion-gate-BawrdPYr.d.ts → promotion-gate-DaY95yU6.d.ts} +7 -8
- package/dist/{promotion-gate-BawrdPYr.d.ts.map → promotion-gate-DaY95yU6.d.ts.map} +1 -1
- package/dist/{promotion-policy-KO57gbyV.js → promotion-policy-6A8osGr_.js} +4 -4
- package/dist/{promotion-policy-KO57gbyV.js.map → promotion-policy-6A8osGr_.js.map} +1 -1
- package/dist/{proposal-findings-CY1xKn_a.js → proposal-findings-BbWidvUk.js} +3 -3
- package/dist/proposal-findings-BbWidvUk.js.map +1 -0
- package/dist/{query-BUCZCK7F.js → query-B_RZ36an.js} +5 -5
- package/dist/query-B_RZ36an.js.map +1 -0
- package/dist/{query-DK1nWcmp.d.ts → query-Cmv_U8vf.d.ts} +4 -24
- package/dist/{query-DK1nWcmp.d.ts.map → query-Cmv_U8vf.d.ts.map} +1 -1
- package/dist/{random-ByUSnV9w.js → random-DDDcC7YU.js} +2 -2
- package/dist/{random-ByUSnV9w.js.map → random-DDDcC7YU.js.map} +1 -1
- package/dist/{raw-provider-sink-DoHz4JNG.js → raw-provider-sink-75w4FWBj.js} +2 -2
- package/dist/{raw-provider-sink-DoHz4JNG.js.map → raw-provider-sink-75w4FWBj.js.map} +1 -1
- package/dist/{redact-mtCCcT8z.d.ts → redact-DXdlFb_U.d.ts} +2 -3
- package/dist/redact-DXdlFb_U.d.ts.map +1 -0
- package/dist/{redact-B5xXKqQ3.js → redact-mtkTiJVk.js} +2 -7
- package/dist/{redact-B5xXKqQ3.js.map → redact-mtkTiJVk.js.map} +1 -1
- package/dist/{registry-D7_hm2fK.d.ts → registry-ssNoHzwD.d.ts} +4 -4
- package/dist/{registry-D7_hm2fK.d.ts.map → registry-ssNoHzwD.d.ts.map} +1 -1
- package/dist/{release-confidence-CpuP65S5.js → release-confidence-CYIFH-fp.js} +6 -11
- package/dist/release-confidence-CYIFH-fp.js.map +1 -0
- package/dist/{report-command-SC9nqb4M.js → render-C-w2EZ6p.js} +205 -363
- package/dist/render-C-w2EZ6p.js.map +1 -0
- package/dist/reporting.d.ts +6 -6
- package/dist/reporting.js +8 -8
- package/dist/{researcher-CEcfku-T.d.ts → researcher-0ABVIdGa.d.ts} +9 -9
- package/dist/{researcher-CEcfku-T.d.ts.map → researcher-0ABVIdGa.d.ts.map} +1 -1
- package/dist/{reward-CpCmAM8L.d.ts → reward-DrZ71vnf.d.ts} +3 -26
- package/dist/reward-DrZ71vnf.d.ts.map +1 -0
- package/dist/{reward-hacking-E0d-WVcP.js → reward-hacking-ByuETaIb.js} +3 -3
- package/dist/{reward-hacking-E0d-WVcP.js.map → reward-hacking-ByuETaIb.js.map} +1 -1
- package/dist/{reward-hacking-RVdZ6Kkt.d.ts → reward-hacking-E52wq86n.d.ts} +5 -18
- package/dist/reward-hacking-E52wq86n.d.ts.map +1 -0
- package/dist/reward-nw2xZGZG.js.map +1 -1
- package/dist/rl.d.ts +117 -295
- package/dist/rl.d.ts.map +1 -1
- package/dist/rl.js +27 -747
- package/dist/rl.js.map +1 -1
- package/dist/rollout/index.d.ts +5 -5
- package/dist/rollout/index.js +7 -8
- package/dist/{rollout-DZV1t2Wg.js → rollout-D6C50mfA.js} +88 -13
- package/dist/rollout-D6C50mfA.js.map +1 -0
- package/dist/{rubric-predictive-validity-DaFW70y9.js → rubric-predictive-validity-D3_oI72N.js} +3 -3
- package/dist/{rubric-predictive-validity-DaFW70y9.js.map → rubric-predictive-validity-D3_oI72N.js.map} +1 -1
- package/dist/{rubric-predictive-validity-C03EC7ZE.d.ts → rubric-predictive-validity-DiwT8PbL.d.ts} +2 -2
- package/dist/{rubric-predictive-validity-C03EC7ZE.d.ts.map → rubric-predictive-validity-DiwT8PbL.d.ts.map} +1 -1
- package/dist/{run-record-C1E24G2A.d.ts → run-record-CaxbLq6Y.d.ts} +4 -10
- package/dist/run-record-CaxbLq6Y.d.ts.map +1 -0
- package/dist/{run-record-C5e7FjhJ.js → run-record-CysKLB93.js} +3 -3
- package/dist/run-record-CysKLB93.js.map +1 -0
- package/dist/{run-record-Boc5IUTp.js → run-record-DhEJgoPz.js} +4 -4
- package/dist/{run-record-Boc5IUTp.js.map → run-record-DhEJgoPz.js.map} +1 -1
- package/dist/sandbox-harness-BlSOu4LX.d.ts.map +1 -1
- package/dist/{schema-CSf6qWgZ.js → schema-Bt2vLFm3.js} +2 -14
- package/dist/schema-Bt2vLFm3.js.map +1 -0
- package/dist/schema-C-ziyJD7.d.ts.map +1 -1
- package/dist/{schema-2g7trUwH.d.ts → schema-D6EVKzTB.d.ts} +4 -5
- package/dist/schema-D6EVKzTB.d.ts.map +1 -0
- package/dist/{schema-BuiujZ-g.js → schema-DxcKTzbi.js} +2 -2
- package/dist/schema-DxcKTzbi.js.map +1 -0
- package/dist/search/index.d.ts +3 -31
- package/dist/search/index.d.ts.map +1 -1
- package/dist/search/index.js +4 -4
- package/dist/{search-kernel-DyNEa6IU.d.ts → search-kernel-DxqjBxA-.d.ts} +10 -27
- package/dist/search-kernel-DxqjBxA-.d.ts.map +1 -0
- package/dist/{search-ledger-CVUGLDZp.js → search-ledger-TUvB5gWH.js} +7 -7
- package/dist/{search-ledger-CVUGLDZp.js.map → search-ledger-TUvB5gWH.js.map} +1 -1
- package/dist/{search-ledger-file-DDQUgvCg.js → search-ledger-file-UKCO2r8a.js} +4 -4
- package/dist/search-ledger-file-UKCO2r8a.js.map +1 -0
- package/dist/{search-shipper-BOSD46qv.js → search-shipper-Cw2z3-td.js} +4 -4
- package/dist/search-shipper-Cw2z3-td.js.map +1 -0
- package/dist/{search-summary-BQCSWf1g.js → search-summary-DQIvJsSB.js} +5 -5
- package/dist/{search-summary-BQCSWf1g.js.map → search-summary-DQIvJsSB.js.map} +1 -1
- package/dist/{sequential-CzK5DarL.js → sequential-BVv1sjsw.js} +2 -32
- package/dist/{sequential-CzK5DarL.js.map → sequential-BVv1sjsw.js.map} +1 -1
- package/dist/{sequential-Bf_pbE50.js → sequential-CimQrbjv.js} +5 -5
- package/dist/sequential-CimQrbjv.js.map +1 -0
- package/dist/{sequential-BhsrMupG.d.ts → sequential-KwGspfeR.d.ts} +2 -9
- package/dist/{sequential-BhsrMupG.d.ts.map → sequential-KwGspfeR.d.ts.map} +1 -1
- package/dist/{sequential-eprocess-DM_qENCl.js → sequential-eprocess-DodI6RoF.js} +2 -2
- package/dist/{sequential-eprocess-DM_qENCl.js.map → sequential-eprocess-DodI6RoF.js.map} +1 -1
- package/dist/{server-e9oWO_bN.js → server-DoVbqqtJ.js} +101 -101
- package/dist/server-DoVbqqtJ.js.map +1 -0
- package/dist/{single-run-lock-CV9Eyd_q.js → single-run-lock-U58yf8N6.js} +2 -2
- package/dist/{single-run-lock-CV9Eyd_q.js.map → single-run-lock-U58yf8N6.js.map} +1 -1
- package/dist/{skillopt-optimization-method-BiwA8nfX.js → skillopt-optimization-method-kyL94-ri.js} +17 -95
- package/dist/skillopt-optimization-method-kyL94-ri.js.map +1 -0
- package/dist/{spans-BHAUXMGN.d.ts → spans-CVngGij3.d.ts} +2 -2
- package/dist/{spans-BHAUXMGN.d.ts.map → spans-CVngGij3.d.ts.map} +1 -1
- package/dist/{statistical-heldout-42NlCNDe.js → statistical-heldout-Bksv92Th.js} +3 -3
- package/dist/statistical-heldout-Bksv92Th.js.map +1 -0
- package/dist/{statistical-heldout-CYpGaoDH.d.ts → statistical-heldout-C9AbgREN.d.ts} +8 -67
- package/dist/statistical-heldout-C9AbgREN.d.ts.map +1 -0
- package/dist/{steps-Bg5-KVx1.d.ts → steps-DlepJPwD.d.ts} +2 -56
- package/dist/steps-DlepJPwD.d.ts.map +1 -0
- package/dist/{store-C4avFjIi.d.ts → store-B3nWRy3B.d.ts} +2 -2
- package/dist/{store-C4avFjIi.d.ts.map → store-B3nWRy3B.d.ts.map} +1 -1
- package/dist/{store-otlp-DJ9dtA5x.js → store-otlp-BteDAbHK.js} +3 -3
- package/dist/{store-otlp-DJ9dtA5x.js.map → store-otlp-BteDAbHK.js.map} +1 -1
- package/dist/{store-tool-spans-CIX5arAG.js → store-tool-spans-D5l_OfTJ.js} +8 -8
- package/dist/store-tool-spans-D5l_OfTJ.js.map +1 -0
- package/dist/{store-tool-spans-DdCSPa7C.d.ts → store-tool-spans-DZS0HWVf.d.ts} +9 -18
- package/dist/store-tool-spans-DZS0HWVf.d.ts.map +1 -0
- package/dist/storyboard/index.d.ts +4 -11
- package/dist/storyboard/index.d.ts.map +1 -1
- package/dist/storyboard/index.js +1 -16
- package/dist/storyboard/index.js.map +1 -1
- package/dist/{summary-report-V_JACR4Y.js → summary-report-BsXJoYX5.js} +88 -10
- package/dist/summary-report-BsXJoYX5.js.map +1 -0
- package/dist/{summary-report-bdFDXq0b.d.ts → summary-report-DM7tlml1.d.ts} +10 -19
- package/dist/summary-report-DM7tlml1.d.ts.map +1 -0
- package/dist/supervisor-run/index.d.ts +60 -28
- package/dist/supervisor-run/index.d.ts.map +1 -1
- package/dist/supervisor-run/index.js +4 -458
- package/dist/supervisor-run/index.js.map +1 -1
- package/dist/{systemone-BomhHr2c.d.ts → systemone-Bp_Ac0p1.d.ts} +5 -5
- package/dist/{systemone-BomhHr2c.d.ts.map → systemone-Bp_Ac0p1.d.ts.map} +1 -1
- package/dist/systemone-protocol.js +1 -1
- package/dist/{systemone-review-CUVcQJu6.d.ts → systemone-review-CwE6JGIp.d.ts} +2 -2
- package/dist/{systemone-review-CUVcQJu6.d.ts.map → systemone-review-CwE6JGIp.d.ts.map} +1 -1
- package/dist/{systemone-review-D7sXwsqq.js → systemone-review-DzdOJ8I6.js} +3 -3
- package/dist/{systemone-review-D7sXwsqq.js.map → systemone-review-DzdOJ8I6.js.map} +1 -1
- package/dist/systemone.d.ts +5 -5
- package/dist/systemone.js +5 -5
- package/dist/systemone.js.map +1 -1
- package/dist/{task-failure-attributes-hEmASjix.js → task-failure-attributes-BMsblaDh.js} +3 -3
- package/dist/task-failure-attributes-BMsblaDh.js.map +1 -0
- package/dist/{terminal-record-DZyQZ3pz.js → terminal-record-78g6E4vh.js} +5 -5
- package/dist/terminal-record-78g6E4vh.js.map +1 -0
- package/dist/{tool-groups-C3NEcdCM.d.ts → tool-groups-DyNz2JZ_.d.ts} +3 -3
- package/dist/tool-groups-DyNz2JZ_.d.ts.map +1 -0
- package/dist/{tool-waste-BKgvd-TP.d.ts → tool-waste-CkjzWmeY.d.ts} +25 -28
- package/dist/tool-waste-CkjzWmeY.d.ts.map +1 -0
- package/dist/{tool-waste-BlesqTqW.js → tool-waste-DLsjS_p-.js} +5 -5
- package/dist/{tool-waste-BlesqTqW.js.map → tool-waste-DLsjS_p-.js.map} +1 -1
- package/dist/{trace-questions-CM2CAocU.d.ts → trace-questions-xxwgsuMi.d.ts} +4 -9
- package/dist/{trace-questions-CM2CAocU.d.ts.map → trace-questions-xxwgsuMi.d.ts.map} +1 -1
- package/dist/trace-repair/index.d.ts +14 -211
- package/dist/trace-repair/index.d.ts.map +1 -1
- package/dist/trace-repair/index.js +865 -981
- package/dist/trace-repair/index.js.map +1 -1
- package/dist/traces.d.ts +18 -46
- package/dist/traces.d.ts.map +1 -1
- package/dist/traces.js +13 -13
- package/dist/traces.js.map +1 -1
- package/dist/trajectory-replay/index.d.ts +3 -117
- package/dist/trajectory-replay/index.d.ts.map +1 -1
- package/dist/trajectory-replay/index.js +98 -56
- package/dist/trajectory-replay/index.js.map +1 -1
- package/dist/{tree-C1XYeXvy.js → tree-BGRglkKd.js} +13 -10
- package/dist/tree-BGRglkKd.js.map +1 -0
- package/dist/{types-B3jzCp0p.js → types-BXgASBCL.js} +2 -2
- package/dist/{types-B3jzCp0p.js.map → types-BXgASBCL.js.map} +1 -1
- package/dist/{types-C1tnkEgM.d.ts → types-CW8ewATZ.d.ts} +4 -113
- package/dist/types-CW8ewATZ.d.ts.map +1 -0
- package/dist/{types-BqkVmHfv.d.ts → types-CmXY0PQf.d.ts} +2 -4
- package/dist/types-CmXY0PQf.d.ts.map +1 -0
- package/dist/{types-C02qtnG8.d.ts → types-D-mgRzlh.d.ts} +7 -28
- package/dist/types-D-mgRzlh.d.ts.map +1 -0
- package/dist/{types-Cq8mSbq8.d.ts → types-D8GhJoHk.d.ts} +7 -9
- package/dist/{types-Cq8mSbq8.d.ts.map → types-D8GhJoHk.d.ts.map} +1 -1
- package/dist/{types-IXD2HJzu.js → types-DqFMNTgK.js} +2 -4
- package/dist/types-DqFMNTgK.js.map +1 -0
- package/dist/{types-Cbe2fWBa.d.ts → types-DtMbFw6U.d.ts} +3 -3
- package/dist/{types-Cbe2fWBa.d.ts.map → types-DtMbFw6U.d.ts.map} +1 -1
- package/dist/{verdict-Dl0tiT1X.js → verdict-BGQmxQ8A.js} +3 -3
- package/dist/verdict-BGQmxQ8A.js.map +1 -0
- package/dist/{verdict-E4eRNf7-.d.ts → verdict-C24NELtN.d.ts} +2 -15
- package/dist/{verdict-E4eRNf7-.d.ts.map → verdict-C24NELtN.d.ts.map} +1 -1
- package/dist/{verdict-cache-Bm8EKL2s.js → verdict-cache-CL_7tePD.js} +2 -2
- package/dist/verdict-cache-CL_7tePD.js.map +1 -0
- package/dist/wire/index.d.ts +31 -410
- package/dist/wire/index.d.ts.map +1 -1
- package/dist/wire/index.js +2 -2
- package/docs/changes/jev-evidence-review.md +1 -1
- package/docs/changes/jev-product-adoption.md +1 -1
- package/docs/changes/jev-recorded-evidence.md +1 -1
- package/docs/design/statistics-decisions.md +17 -17
- package/docs/design.md +1 -1
- package/docs/evaluation-integrity.md +1 -1
- package/docs/proofs/campaign-attempt-retention-20261001/README.md +2 -2
- package/docs/public-api.md +138 -529
- package/docs/rollout.md +1 -1
- package/docs/trace-repair-admission.md +1 -1
- package/docs/wire-protocol.md +1 -1
- package/package.json +1 -1
- package/dist/active-curriculum-B_Lc9kfO.js +0 -61
- package/dist/active-curriculum-B_Lc9kfO.js.map +0 -1
- package/dist/agent-profile-VFcQncbW.d.ts.map +0 -1
- package/dist/agent-profile-cell-BK8mlqlq.js.map +0 -1
- package/dist/agent-profile-cell-BNp-Js9F.d.ts.map +0 -1
- package/dist/agreement-irr-BEWLIF3_.js.map +0 -1
- package/dist/analyze-runs-C84irm4i.js.map +0 -1
- package/dist/baseline-Udi_PLuT.js +0 -259
- package/dist/baseline-Udi_PLuT.js.map +0 -1
- package/dist/benchmark-CXmVVHH2.js +0 -562
- package/dist/benchmark-CXmVVHH2.js.map +0 -1
- package/dist/benchmark-command-By0vh8q7.js.map +0 -1
- package/dist/campaign-BudZ70zo.js.map +0 -1
- package/dist/chat-json-call-puMArmtW.js.map +0 -1
- package/dist/claude-jsonl-dZir12m6.js +0 -86
- package/dist/claude-jsonl-dZir12m6.js.map +0 -1
- package/dist/client-BzL9niqi.d.ts.map +0 -1
- package/dist/cost-ledger-BP8V4kUQ.js.map +0 -1
- package/dist/counterfactual-CPaWN99-.d.ts +0 -60
- package/dist/counterfactual-CPaWN99-.d.ts.map +0 -1
- package/dist/counterfactual-Dn3veueY.js +0 -98
- package/dist/counterfactual-Dn3veueY.js.map +0 -1
- package/dist/default-registry-COhk9g36.js.map +0 -1
- package/dist/default-registry-DzHiGruW.d.ts.map +0 -1
- package/dist/define-agent-eval-WSck0CZJ.d.ts.map +0 -1
- package/dist/dspy-rlm-engine-LRCu61m5.js.map +0 -1
- package/dist/effect-sizes-BhzEpXMc.js +0 -82
- package/dist/effect-sizes-BhzEpXMc.js.map +0 -1
- package/dist/emitter-HcCmFQl_.d.ts.map +0 -1
- package/dist/engine-3A_4jOlI.d.ts.map +0 -1
- package/dist/equal-terms-BtdXayCJ.js.map +0 -1
- package/dist/evaluation-6Yoi74gM.d.ts.map +0 -1
- package/dist/exporters-X4xwla8A.js.map +0 -1
- package/dist/external-optimizer-process-BjMGUuds.js.map +0 -1
- package/dist/external-optimizer-subprocess-BqW0hHcI.js.map +0 -1
- package/dist/failure-cluster-CbgEDcFJ.d.ts.map +0 -1
- package/dist/feedback-trajectory-C4EG0nNH.d.ts.map +0 -1
- package/dist/hf-dataset-BR2yhuNn.js.map +0 -1
- package/dist/index-BFRO6chs.d.ts.map +0 -1
- package/dist/index-BO41eGj5.d.ts.map +0 -1
- package/dist/index-CyszSg4O.d.ts.map +0 -1
- package/dist/index-DHKEAv3s.d.ts.map +0 -1
- package/dist/index-DPcngtwt.d.ts.map +0 -1
- package/dist/integrity-dLiDe2kD.js.map +0 -1
- package/dist/journal-DfRz9kps.js.map +0 -1
- package/dist/judge-gate-CE7CQAgt.d.ts.map +0 -1
- package/dist/kind-factory-BobI5Jy3.js.map +0 -1
- package/dist/ledger-core-Gq7yp8lP.js.map +0 -1
- package/dist/llm-client-CyBAoYiX.js.map +0 -1
- package/dist/llm-judge-CG12SQJq.js.map +0 -1
- package/dist/matrix-DSrSxjjy.d.ts.map +0 -1
- package/dist/matrix-Dm0BQW7U.js.map +0 -1
- package/dist/mean-DHoMiudD.js.map +0 -1
- package/dist/normal-DsJZtrJc.js +0 -25
- package/dist/normal-DsJZtrJc.js.map +0 -1
- package/dist/paired-arms-CwMGJsrS.js.map +0 -1
- package/dist/paired-binary-CvpFHfKZ.js.map +0 -1
- package/dist/paired-promotion-decision-DPKz8ZnF.d.ts.map +0 -1
- package/dist/pareto-Cm6ndrWN.js.map +0 -1
- package/dist/prime-protocol-CHKgA3a6.js.map +0 -1
- package/dist/prime-protocol-HiB9HX7E.d.ts.map +0 -1
- package/dist/produced-state-BsDmnwxc.js.map +0 -1
- package/dist/proposal-findings-CY1xKn_a.js.map +0 -1
- package/dist/query-BUCZCK7F.js.map +0 -1
- package/dist/redact-mtCCcT8z.d.ts.map +0 -1
- package/dist/release-confidence-CpuP65S5.js.map +0 -1
- package/dist/report-command-SC9nqb4M.js.map +0 -1
- package/dist/reward-CpCmAM8L.d.ts.map +0 -1
- package/dist/reward-hacking-RVdZ6Kkt.d.ts.map +0 -1
- package/dist/rollout-DZV1t2Wg.js.map +0 -1
- package/dist/run-record-C1E24G2A.d.ts.map +0 -1
- package/dist/run-record-C5e7FjhJ.js.map +0 -1
- package/dist/schema-2g7trUwH.d.ts.map +0 -1
- package/dist/schema-BuiujZ-g.js.map +0 -1
- package/dist/schema-CSf6qWgZ.js.map +0 -1
- package/dist/search-kernel-DyNEa6IU.d.ts.map +0 -1
- package/dist/search-ledger-file-DDQUgvCg.js.map +0 -1
- package/dist/search-shipper-BOSD46qv.js.map +0 -1
- package/dist/semantic-concept-judge-BQF8te0T.js.map +0 -1
- package/dist/sequential-Bf_pbE50.js.map +0 -1
- package/dist/server-e9oWO_bN.js.map +0 -1
- package/dist/skillopt-optimization-method-BiwA8nfX.js.map +0 -1
- package/dist/statistical-heldout-42NlCNDe.js.map +0 -1
- package/dist/statistical-heldout-CYpGaoDH.d.ts.map +0 -1
- package/dist/steps-Bg5-KVx1.d.ts.map +0 -1
- package/dist/store-tool-spans-CIX5arAG.js.map +0 -1
- package/dist/store-tool-spans-DdCSPa7C.d.ts.map +0 -1
- package/dist/student-t-DVPW7CdL.js +0 -39
- package/dist/student-t-DVPW7CdL.js.map +0 -1
- package/dist/summary-report-V_JACR4Y.js.map +0 -1
- package/dist/summary-report-bdFDXq0b.d.ts.map +0 -1
- package/dist/task-failure-attributes-hEmASjix.js.map +0 -1
- package/dist/terminal-record-DZyQZ3pz.js.map +0 -1
- package/dist/tool-groups-C3NEcdCM.d.ts.map +0 -1
- package/dist/tool-waste-BKgvd-TP.d.ts.map +0 -1
- package/dist/trajectory-Y1fmdlw7.d.ts +0 -24
- package/dist/trajectory-Y1fmdlw7.d.ts.map +0 -1
- package/dist/tree-C1XYeXvy.js.map +0 -1
- package/dist/types-BqkVmHfv.d.ts.map +0 -1
- package/dist/types-C02qtnG8.d.ts.map +0 -1
- package/dist/types-C1tnkEgM.d.ts.map +0 -1
- package/dist/types-IXD2HJzu.js.map +0 -1
- package/dist/usage-receipt-Cx3xNeyB.js +0 -76
- package/dist/usage-receipt-Cx3xNeyB.js.map +0 -1
- package/dist/verdict-Dl0tiT1X.js.map +0 -1
- package/dist/verdict-cache-Bm8EKL2s.js.map +0 -1
- package/docs/design/self-improvement-evidence-audit.md +0 -263
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as hashCanonical, i as compareCodeUnits, o as jsonDocument, r as canonicalString } from "./canonical-
|
|
3
|
-
import { i as pairedBootstrap, t as mean$
|
|
1
|
+
import { c as errorMessage, s as ValidationError, t as AgentEvalError } from "./errors-BcOs5MKW.js";
|
|
2
|
+
import { a as hashCanonical, i as compareCodeUnits, o as jsonDocument, r as canonicalString } from "./canonical-Dq2hOQ8L.js";
|
|
3
|
+
import { i as pairedBootstrap, t as mean$3 } from "./mean-BbA_JCzW.js";
|
|
4
4
|
import { a as resolveModelPricing } from "./metrics-BKaPBtIG.js";
|
|
5
|
-
import { a as CostLedgerPersistenceError, i as CostCeilingReachedError, n as CostAccountingIncompleteError, o as CostReceiptCaptureError, r as CostCallConflictError, s as CostReservationExceededError, t as CostLedger } from "./cost-ledger-
|
|
6
|
-
import {
|
|
7
|
-
import "./ledger-core-
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { t as acquireSingleRunLock } from "./single-run-lock-
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { t as createDspyRlmTraceEngine } from "./dspy-rlm-engine-
|
|
16
|
-
import { i as otlpTextToTraceAnalysisStore, n as DEFAULT_MAX_TRACE_FILE_BYTES, t as BufferTraceStore } from "./store-otlp-
|
|
17
|
-
import
|
|
18
|
-
import "./
|
|
19
|
-
import { t as
|
|
20
|
-
import { c as primeProtocolSha256, d as runPrimeExchange, f as decodeReplyRows, n as buildPrimePrompt, t as analystUsageReceiptFromPrimeUsage, u as projectPrimeTrajectory } from "./prime-protocol-CHKgA3a6.js";
|
|
5
|
+
import { a as CostLedgerPersistenceError, i as CostCeilingReachedError, n as CostAccountingIncompleteError, o as CostReceiptCaptureError, r as CostCallConflictError, s as CostReservationExceededError, t as CostLedger } from "./cost-ledger-D0352Z4d.js";
|
|
6
|
+
import { l as withLedgerFileLock, u as writeLedgerFileAtomically } from "./journal-CR4QikYp.js";
|
|
7
|
+
import "./ledger-core-DrJhbms9.js";
|
|
8
|
+
import { M as fsCampaignStorage, b as AnalystFindingSchema, i as startExternalOptimizerModelProxy, j as createRunCostLedger, r as runWithCleanup, v as resolveExternalOptimizerProcessLimits } from "./external-optimizer-subprocess-XIHBOSKt.js";
|
|
9
|
+
import { s as redactText } from "./redact-mtkTiJVk.js";
|
|
10
|
+
import { i as makeFinding } from "./types-DqFMNTgK.js";
|
|
11
|
+
import { t as acquireSingleRunLock } from "./single-run-lock-U58yf8N6.js";
|
|
12
|
+
import { a as LlmCallError, n as isRecord, o as LlmResponseError } from "./json-BhdsJaOQ.js";
|
|
13
|
+
import { A as RawAnalystFindingSchema, U as assertValidAnalystUsageReceipt, W as usageReceiptFromCostLedger, j as evidenceRefsFromRawFinding, k as RAW_FINDING_SCHEMA_PROMPT, m as TRACE_ANALYSIS_LIMITS, n as runTraceAnalyst } from "./kind-factory-Gy4fXixd.js";
|
|
14
|
+
import { n as callLlmJson } from "./llm-client-BshCREn6.js";
|
|
15
|
+
import { t as createDspyRlmTraceEngine } from "./dspy-rlm-engine-DhdCr1Dc.js";
|
|
16
|
+
import { i as otlpTextToTraceAnalysisStore, n as DEFAULT_MAX_TRACE_FILE_BYTES, t as BufferTraceStore } from "./store-otlp-BteDAbHK.js";
|
|
17
|
+
import "./external-optimizer-process-KVFGvYX1.js";
|
|
18
|
+
import { t as assertEqualDeclarativeTerms } from "./equal-terms-DbPGcVtI.js";
|
|
19
|
+
import { c as runPrimeExchange, l as decodeReplyRows, n as buildPrimePrompt, o as primeProtocolSha256, s as projectPrimeTrajectory, t as analystUsageReceiptFromPrimeUsage } from "./prime-protocol-BFgGrEMP.js";
|
|
21
20
|
import { t as nodeHttpPrimeBridgeTransport } from "./prime-bridge-transport-Z3cpKGoV.js";
|
|
22
21
|
import { createHash, randomUUID } from "node:crypto";
|
|
23
22
|
import { constants, existsSync, lstatSync, readFileSync } from "node:fs";
|
|
@@ -28,6 +27,504 @@ import { arch, platform } from "node:os";
|
|
|
28
27
|
import { pathToFileURL } from "node:url";
|
|
29
28
|
import { link, lstat, mkdir, open, readFile, readdir, realpath, stat, unlink } from "node:fs/promises";
|
|
30
29
|
import { TextDecoder as TextDecoder$1 } from "node:util";
|
|
30
|
+
import { performance } from "node:perf_hooks";
|
|
31
|
+
import { linearSumAssignment } from "linear-sum-assignment";
|
|
32
|
+
//#region src/analyst/benchmark-scoring.ts
|
|
33
|
+
function scoreAnalystFindings(testCase, findings) {
|
|
34
|
+
assertValidAnalystScoringCase(testCase);
|
|
35
|
+
const matchedFindingByIssue = matchFindingsToIssues(testCase.expectedIssues, findings);
|
|
36
|
+
const matchedIssueIds = testCase.expectedIssues.filter((_, index) => matchedFindingByIssue.has(index)).map((issue) => issue.id);
|
|
37
|
+
const missedIssueIds = testCase.expectedIssues.filter((_, index) => !matchedFindingByIssue.has(index)).map((issue) => issue.id);
|
|
38
|
+
const supportedFindingIndexes = new Set(matchedFindingByIssue.values());
|
|
39
|
+
const unsupportedFindingIndexes = findings.map((_, index) => index).filter((index) => !supportedFindingIndexes.has(index));
|
|
40
|
+
const expectedIssueCount = testCase.expectedIssues.length;
|
|
41
|
+
const issueRecall = expectedIssueCount === 0 ? 1 : matchedIssueIds.length / expectedIssueCount;
|
|
42
|
+
const findingPrecision = findings.length === 0 ? expectedIssueCount === 0 ? 1 : 0 : supportedFindingIndexes.size / findings.length;
|
|
43
|
+
const f1 = harmonicMeanScore(findingPrecision, issueRecall);
|
|
44
|
+
const allEvidence = findings.flatMap((finding) => finding.evidence_refs);
|
|
45
|
+
const criticalIssues = testCase.expectedIssues.filter((issue) => (issue.criticalEvidence?.length ?? 0) > 0);
|
|
46
|
+
const criticalHits = testCase.expectedIssues.filter((issue) => {
|
|
47
|
+
if ((issue.criticalEvidence?.length ?? 0) === 0) return false;
|
|
48
|
+
return matchesEvidence(allEvidence, issue.criticalEvidence ?? [], "any");
|
|
49
|
+
}).length;
|
|
50
|
+
const findingsWithEvidence = findings.filter((finding) => finding.evidence_refs.length > 0).length;
|
|
51
|
+
const unlabeledEvidence = testCase.labeledEvidence ? allEvidence.filter((ref) => !testCase.labeledEvidence.some((expected) => evidenceMatches(ref, expected))) : [];
|
|
52
|
+
return {
|
|
53
|
+
expectedIssueCount,
|
|
54
|
+
matchedIssueIds,
|
|
55
|
+
missedIssueIds,
|
|
56
|
+
supportedFindingIndexes: [...supportedFindingIndexes].sort((a, b) => a - b),
|
|
57
|
+
unsupportedFindingIndexes,
|
|
58
|
+
unlabeledEvidence,
|
|
59
|
+
issueRecall,
|
|
60
|
+
findingPrecision,
|
|
61
|
+
f1,
|
|
62
|
+
criticalStepAccuracy: criticalIssues.length === 0 ? null : criticalHits / criticalIssues.length,
|
|
63
|
+
citationCoverage: findings.length === 0 ? null : findingsWithEvidence / findings.length,
|
|
64
|
+
citationExcerptCoverage: allEvidence.length === 0 ? null : allEvidence.filter((evidence) => Boolean(evidence.excerpt?.trim())).length / allEvidence.length,
|
|
65
|
+
citationLabelAgreement: testCase.labeledEvidence === void 0 ? null : allEvidence.length === 0 ? findings.length === 0 ? null : 0 : (allEvidence.length - unlabeledEvidence.length) / allEvidence.length,
|
|
66
|
+
predictionOnLabelEmptyCase: expectedIssueCount === 0 && findings.length > 0
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function assertValidAnalystScoringCase(testCase) {
|
|
70
|
+
if (!testCase.id.trim()) throw new TypeError("analyst benchmark case id must not be empty");
|
|
71
|
+
const ids = /* @__PURE__ */ new Set();
|
|
72
|
+
for (const issue of testCase.expectedIssues) {
|
|
73
|
+
if (!issue.id.trim()) throw new TypeError(`${testCase.id}: expected issue id must not be empty`);
|
|
74
|
+
if (ids.has(issue.id)) throw new TypeError(`${testCase.id}: duplicate expected issue id '${issue.id}'`);
|
|
75
|
+
ids.add(issue.id);
|
|
76
|
+
if (!issue.findingIds?.length && !issue.areas?.length && !issue.subjects?.length && !issue.evidence?.length) throw new TypeError(`${testCase.id}/${issue.id}: expected issue must identify a finding by id, area, subject, or evidence`);
|
|
77
|
+
}
|
|
78
|
+
for (const ref of testCase.labeledEvidence ?? []) if (!ref.uri.trim()) throw new TypeError(`${testCase.id}: labeled evidence URI must not be empty`);
|
|
79
|
+
}
|
|
80
|
+
function harmonicMeanScore(a, b) {
|
|
81
|
+
return a + b === 0 ? 0 : 2 * a * b / (a + b);
|
|
82
|
+
}
|
|
83
|
+
function matchFindingsToIssues(issues, findings) {
|
|
84
|
+
if (issues.length === 0) return /* @__PURE__ */ new Map();
|
|
85
|
+
const cardinalityWeight = issues.length + 1;
|
|
86
|
+
const scores = issues.map((issue) => [...findings.map((finding) => {
|
|
87
|
+
if (!findingMatchesIssue(finding, issue)) return -1;
|
|
88
|
+
const criticalHit = (issue.criticalEvidence?.length ?? 0) > 0 && matchesEvidence(finding.evidence_refs, issue.criticalEvidence ?? [], "any");
|
|
89
|
+
return cardinalityWeight + Number(criticalHit);
|
|
90
|
+
}), ...Array.from({ length: issues.length }, () => 0)]);
|
|
91
|
+
const assignment = linearSumAssignment(scores, { maximaze: true }).rowAssignments;
|
|
92
|
+
const matches = /* @__PURE__ */ new Map();
|
|
93
|
+
for (const [issueIndex, column] of assignment.entries()) {
|
|
94
|
+
if (column < 0 || column >= findings.length) continue;
|
|
95
|
+
if (!findingMatchesIssue(findings[column], issues[issueIndex])) continue;
|
|
96
|
+
matches.set(issueIndex, column);
|
|
97
|
+
}
|
|
98
|
+
return matches;
|
|
99
|
+
}
|
|
100
|
+
function findingMatchesIssue(finding, issue) {
|
|
101
|
+
if (issue.findingIds && !issue.findingIds.includes(finding.finding_id)) return false;
|
|
102
|
+
if (issue.areas && !issue.areas.includes(finding.area)) return false;
|
|
103
|
+
if (issue.subjects && (!finding.subject || !issue.subjects.includes(finding.subject))) return false;
|
|
104
|
+
if (issue.evidence && !matchesEvidence(finding.evidence_refs, issue.evidence, issue.evidenceMode ?? "any")) return false;
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
function matchesEvidence(actual, expected, mode) {
|
|
108
|
+
if (expected.length === 0) return true;
|
|
109
|
+
const match = (target) => actual.some((ref) => evidenceMatches(ref, target));
|
|
110
|
+
return mode === "all" ? expected.every(match) : expected.some(match);
|
|
111
|
+
}
|
|
112
|
+
function evidenceMatches(actual, expected) {
|
|
113
|
+
return actual.uri === expected.uri && (expected.kind === void 0 || actual.kind === expected.kind);
|
|
114
|
+
}
|
|
115
|
+
//#endregion
|
|
116
|
+
//#region src/analyst/benchmark-summary.ts
|
|
117
|
+
function summarizeAnalystBenchmarkRunner(runnerId, observations) {
|
|
118
|
+
const issueBearing = observations.filter((observation) => observation.labelState === "positive");
|
|
119
|
+
const completed = observations.filter((observation) => !observation.error);
|
|
120
|
+
const expectedIssues = issueBearing.reduce((sum, observation) => sum + observation.score.expectedIssueCount, 0);
|
|
121
|
+
const matchedIssues = issueBearing.reduce((sum, observation) => sum + observation.score.matchedIssueIds.length, 0);
|
|
122
|
+
const issueFindings = issueBearing.reduce((sum, observation) => sum + (observation.error ? 0 : observation.findings.length), 0);
|
|
123
|
+
const supportedFindings = issueBearing.reduce((sum, observation) => sum + observation.score.supportedFindingIndexes.length, 0);
|
|
124
|
+
const issueRecall = expectedIssues === 0 ? null : matchedIssues / expectedIssues;
|
|
125
|
+
const findingPrecision = expectedIssues === 0 ? null : issueFindings === 0 ? 0 : supportedFindings / issueFindings;
|
|
126
|
+
const macroIssueRecall = issueBearing.length === 0 ? null : mean$2(issueBearing.map((observation) => observation.score.issueRecall));
|
|
127
|
+
const macroFindingPrecision = issueBearing.length === 0 ? null : mean$2(issueBearing.map((observation) => observation.score.findingPrecision));
|
|
128
|
+
const macroF1 = issueBearing.length === 0 ? null : mean$2(issueBearing.map((observation) => observation.score.f1));
|
|
129
|
+
const critical = observations.map((observation) => observation.score.criticalStepAccuracy).filter((value) => value !== null);
|
|
130
|
+
const findingsWithEvidence = completed.reduce((sum, observation) => sum + observation.findings.filter((finding) => finding.evidence_refs.length > 0).length, 0);
|
|
131
|
+
const allFindings = completed.reduce((sum, observation) => sum + observation.findings.length, 0);
|
|
132
|
+
const allCitations = completed.flatMap((observation) => observation.findings.flatMap((finding) => finding.evidence_refs));
|
|
133
|
+
const citationObservations = completed.filter((observation) => observation.score.citationLabelAgreement !== null);
|
|
134
|
+
const citationCount = citationObservations.reduce((sum, observation) => sum + observation.findings.reduce((count, finding) => count + finding.evidence_refs.length, 0), 0);
|
|
135
|
+
const invalidCitationCount = citationObservations.reduce((sum, observation) => sum + observation.score.unlabeledEvidence.length, 0);
|
|
136
|
+
const trustedNegative = observations.filter((observation) => observation.labelState === "trusted-negative");
|
|
137
|
+
const completedTrustedNegative = trustedNegative.filter((observation) => !observation.error);
|
|
138
|
+
const unlabeled = observations.filter((observation) => observation.labelState === "unlabeled");
|
|
139
|
+
const completedUnlabeled = unlabeled.filter((observation) => !observation.error);
|
|
140
|
+
const resolvedCitations = completed.reduce((sum, observation) => sum + (observation.evidenceResolution?.resolved ?? 0), 0);
|
|
141
|
+
const unresolvedCitations = completed.reduce((sum, observation) => sum + (observation.evidenceResolution?.unresolvedEvidence.length ?? 0), 0);
|
|
142
|
+
const citationResolutionErrors = completed.reduce((sum, observation) => sum + (observation.evidenceResolution?.errors.length ?? 0), 0);
|
|
143
|
+
const resolutionAttempts = completed.filter((observation) => observation.findings.some((finding) => finding.evidence_refs.length > 0));
|
|
144
|
+
const citationResolutionUnknownRuns = resolutionAttempts.filter((observation) => !observation.evidenceResolution || observation.evidenceResolution.errors.length > 0).length;
|
|
145
|
+
const usages = observations.map((observation) => observation.usage);
|
|
146
|
+
const knownCostUsd = stableSum(usages.map((usage) => {
|
|
147
|
+
if (!usage) return 0;
|
|
148
|
+
return usage.cost.kind === "uncaptured" ? usage.knownCostUsd ?? 0 : usage.cost.usd;
|
|
149
|
+
}));
|
|
150
|
+
const predictionAgreement = repeatedObservationAgreement(observations, predictionSignature);
|
|
151
|
+
const matchedLabelAgreement = repeatedObservationAgreement(observations.filter((observation) => observation.labelState === "positive"), matchedLabelSignature);
|
|
152
|
+
return {
|
|
153
|
+
runnerId,
|
|
154
|
+
plannedRuns: observations.length,
|
|
155
|
+
completedRuns: observations.filter((observation) => !observation.error).length,
|
|
156
|
+
failedRuns: observations.filter((observation) => Boolean(observation.error)).length,
|
|
157
|
+
issueBearingRuns: issueBearing.length,
|
|
158
|
+
trustedNegativeRuns: trustedNegative.length,
|
|
159
|
+
unlabeledRuns: unlabeled.length,
|
|
160
|
+
issueRecall,
|
|
161
|
+
findingPrecision,
|
|
162
|
+
f1: findingPrecision === null || issueRecall === null ? null : harmonicMeanScore(findingPrecision, issueRecall),
|
|
163
|
+
macroIssueRecall,
|
|
164
|
+
macroFindingPrecision,
|
|
165
|
+
macroF1,
|
|
166
|
+
criticalStepAccuracy: critical.length === 0 ? null : mean$2(critical),
|
|
167
|
+
citationCoverage: allFindings === 0 ? null : findingsWithEvidence / allFindings,
|
|
168
|
+
citationExcerptCoverage: allCitations.length === 0 ? null : allCitations.filter((evidence) => Boolean(evidence.excerpt?.trim())).length / allCitations.length,
|
|
169
|
+
citationLabelAgreement: citationObservations.length === 0 ? null : citationCount === 0 ? 0 : (citationCount - invalidCitationCount) / citationCount,
|
|
170
|
+
citationResolution: resolutionAttempts.length === 0 || citationResolutionUnknownRuns > 0 || resolvedCitations + unresolvedCitations === 0 ? null : resolvedCitations / (resolvedCitations + unresolvedCitations),
|
|
171
|
+
citationResolutionUnknownRuns,
|
|
172
|
+
unresolvedCitations,
|
|
173
|
+
citationResolutionErrors,
|
|
174
|
+
trustedNegativeFalsePositiveRate: completedTrustedNegative.length === 0 ? null : completedTrustedNegative.filter((observation) => observation.score.predictionOnLabelEmptyCase).length / completedTrustedNegative.length,
|
|
175
|
+
trustedNegativeFailureRate: trustedNegative.length === 0 ? null : trustedNegative.filter((observation) => Boolean(observation.error)).length / trustedNegative.length,
|
|
176
|
+
unlabeledPredictionRate: completedUnlabeled.length === 0 ? null : completedUnlabeled.filter((observation) => observation.findings.length > 0).length / completedUnlabeled.length,
|
|
177
|
+
unlabeledFailureRate: unlabeled.length === 0 ? null : unlabeled.filter((observation) => Boolean(observation.error)).length / unlabeled.length,
|
|
178
|
+
predictionAgreement: predictionAgreement.value,
|
|
179
|
+
predictionAgreementCases: predictionAgreement.cases,
|
|
180
|
+
matchedLabelAgreement: matchedLabelAgreement.value,
|
|
181
|
+
matchedLabelAgreementCases: matchedLabelAgreement.cases,
|
|
182
|
+
latencyMs: latencyDistribution(observations.map((observation) => observation.latencyMs).filter((value) => value !== null)),
|
|
183
|
+
benchmarkClockLatencyRuns: observations.filter((observation) => observation.latencySource === "benchmark-clock").length,
|
|
184
|
+
runnerReportedLatencyRuns: observations.filter((observation) => observation.latencySource === "runner-reported").length,
|
|
185
|
+
latencyUnknownRuns: observations.filter((observation) => observation.latencySource === "uncaptured").length,
|
|
186
|
+
calls: usages.reduce((sum, usage) => sum + (usage?.calls ?? 0), 0),
|
|
187
|
+
callsUnknownRuns: usages.filter((usage) => !usage || usage.calls === null).length,
|
|
188
|
+
inputTokens: usages.reduce((sum, usage) => sum + (usage?.tokens?.input ?? 0), 0),
|
|
189
|
+
outputTokens: usages.reduce((sum, usage) => sum + (usage?.tokens?.output ?? 0), 0),
|
|
190
|
+
reasoningTokens: usages.reduce((sum, usage) => sum + (usage?.tokens?.reasoning ?? 0), 0),
|
|
191
|
+
cachedTokens: usages.reduce((sum, usage) => sum + (usage?.tokens?.cached ?? 0), 0),
|
|
192
|
+
cacheWriteTokens: usages.reduce((sum, usage) => sum + (usage?.tokens?.cacheWrite ?? 0), 0),
|
|
193
|
+
tokenUsageUnknownRuns: usages.filter((usage) => !usage?.tokens).length,
|
|
194
|
+
reasoningTokenUsageUnknownRuns: usages.filter((usage) => usage?.tokens?.reasoning === void 0).length,
|
|
195
|
+
cachedTokenUsageUnknownRuns: usages.filter((usage) => usage?.tokens?.cached === void 0).length,
|
|
196
|
+
cacheWriteTokenUsageUnknownRuns: usages.filter((usage) => usage?.tokens?.cacheWrite === void 0).length,
|
|
197
|
+
knownCostUsd,
|
|
198
|
+
costUnknownRuns: usages.filter((usage) => !usage || usage.cost.kind === "uncaptured").length
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
function mean$2(values) {
|
|
202
|
+
return values.length === 0 ? 0 : stableSum(values) / values.length;
|
|
203
|
+
}
|
|
204
|
+
function stableSum(values) {
|
|
205
|
+
const ordered = [...values].sort((left, right) => Math.abs(left) - Math.abs(right) || left - right);
|
|
206
|
+
let sum = 0;
|
|
207
|
+
let correction = 0;
|
|
208
|
+
for (const value of ordered) {
|
|
209
|
+
const next = sum + value;
|
|
210
|
+
correction += Math.abs(sum) >= Math.abs(value) ? sum - next + value : value - next + sum;
|
|
211
|
+
sum = next;
|
|
212
|
+
}
|
|
213
|
+
return sum + correction;
|
|
214
|
+
}
|
|
215
|
+
function latencyDistribution(values) {
|
|
216
|
+
if (values.length === 0) return null;
|
|
217
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
218
|
+
return {
|
|
219
|
+
min: sorted[0],
|
|
220
|
+
mean: mean$2(sorted),
|
|
221
|
+
p50: percentile(sorted, .5),
|
|
222
|
+
p95: percentile(sorted, .95),
|
|
223
|
+
max: sorted.at(-1)
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
function percentile(sorted, quantile) {
|
|
227
|
+
if (sorted.length === 0) return 0;
|
|
228
|
+
return sorted[Math.ceil(quantile * sorted.length) - 1] ?? sorted.at(-1) ?? 0;
|
|
229
|
+
}
|
|
230
|
+
function repeatedObservationAgreement(observations, signature) {
|
|
231
|
+
const byCase = /* @__PURE__ */ new Map();
|
|
232
|
+
for (const observation of observations) {
|
|
233
|
+
const rows = byCase.get(observation.caseId) ?? [];
|
|
234
|
+
rows.push(observation);
|
|
235
|
+
byCase.set(observation.caseId, rows);
|
|
236
|
+
}
|
|
237
|
+
const caseAgreements = [];
|
|
238
|
+
for (const rows of byCase.values()) {
|
|
239
|
+
const agreements = [];
|
|
240
|
+
for (let left = 0; left < rows.length; left++) for (let right = left + 1; right < rows.length; right++) agreements.push(jaccard(signature(rows[left]), signature(rows[right])));
|
|
241
|
+
if (agreements.length > 0) caseAgreements.push(mean$2(agreements));
|
|
242
|
+
}
|
|
243
|
+
return {
|
|
244
|
+
value: caseAgreements.length === 0 ? null : mean$2(caseAgreements),
|
|
245
|
+
cases: caseAgreements.length
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
function matchedLabelSignature(observation) {
|
|
249
|
+
if (observation.error) return [`error:${observation.error.class}`];
|
|
250
|
+
return observation.score.matchedIssueIds;
|
|
251
|
+
}
|
|
252
|
+
function predictionSignature(observation) {
|
|
253
|
+
if (observation.error) return [`error:${observation.error.class}`];
|
|
254
|
+
return observation.findings.map((finding) => JSON.stringify([finding.finding_id, finding.evidence_refs.map((evidence) => [
|
|
255
|
+
evidence.kind,
|
|
256
|
+
evidence.uri,
|
|
257
|
+
evidence.excerpt ?? null
|
|
258
|
+
]).sort((left, right) => compareCodeUnits(JSON.stringify(left), JSON.stringify(right)))])).sort();
|
|
259
|
+
}
|
|
260
|
+
function jaccard(left, right) {
|
|
261
|
+
const a = new Set(left);
|
|
262
|
+
const b = new Set(right);
|
|
263
|
+
const union = /* @__PURE__ */ new Set([...a, ...b]);
|
|
264
|
+
if (union.size === 0) return 1;
|
|
265
|
+
let intersection = 0;
|
|
266
|
+
for (const value of a) if (b.has(value)) intersection += 1;
|
|
267
|
+
return intersection / union.size;
|
|
268
|
+
}
|
|
269
|
+
//#endregion
|
|
270
|
+
//#region src/analyst/benchmark.ts
|
|
271
|
+
/**
|
|
272
|
+
* Resolve canonical `trace://<trace>/span/<span>` evidence against a trace store.
|
|
273
|
+
* Other evidence kinds and URI schemes require a caller-supplied resolver.
|
|
274
|
+
*/
|
|
275
|
+
function traceStoreEvidenceResolver(getStore) {
|
|
276
|
+
return async ({ caseInput, evidence, signal }) => {
|
|
277
|
+
if (evidence.kind !== "span") return false;
|
|
278
|
+
const location = parseTraceSpanUri(evidence.uri);
|
|
279
|
+
if (!location) return false;
|
|
280
|
+
const result = await getStore(caseInput).viewSpans({
|
|
281
|
+
trace_id: location.traceId,
|
|
282
|
+
span_ids: [location.spanId]
|
|
283
|
+
}, signal ? { signal } : void 0);
|
|
284
|
+
return result.trace_id === location.traceId && result.missing_span_ids.length === 0 && result.spans.some((span) => span.span_id === location.spanId);
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
async function runAnalystBenchmark(options) {
|
|
288
|
+
validateBenchmarkOptions(options);
|
|
289
|
+
const startedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
290
|
+
const repetitions = options.repetitions ?? 1;
|
|
291
|
+
const runnerOrderSeed = options.runnerOrderSeed ?? 0;
|
|
292
|
+
const allJobs = benchmarkJobs(options.cases, options.runners, repetitions, runnerOrderSeed);
|
|
293
|
+
const maxConcurrency = Math.min(options.maxConcurrency ?? 1, allJobs.length);
|
|
294
|
+
const initialObservations = validateInitialObservations(options.initialObservations ?? [], allJobs);
|
|
295
|
+
const completed = new Set(initialObservations.map(observationKey$1));
|
|
296
|
+
const jobs = allJobs.filter((job) => !completed.has(jobKey(job)));
|
|
297
|
+
const observations = [...initialObservations];
|
|
298
|
+
let cursor = 0;
|
|
299
|
+
const worker = async () => {
|
|
300
|
+
while (cursor < jobs.length) {
|
|
301
|
+
options.signal?.throwIfAborted();
|
|
302
|
+
const job = jobs[cursor++];
|
|
303
|
+
const observation = await runBenchmarkJob(job, options.signal, options.resolveEvidence);
|
|
304
|
+
options.signal?.throwIfAborted();
|
|
305
|
+
await options.onObservation?.(observation);
|
|
306
|
+
options.signal?.throwIfAborted();
|
|
307
|
+
observations.push(observation);
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
await Promise.all(Array.from({ length: Math.min(maxConcurrency, jobs.length) }, worker));
|
|
311
|
+
options.signal?.throwIfAborted();
|
|
312
|
+
const runnerOrder = new Map(options.runners.map((runner, index) => [runner.id, index]));
|
|
313
|
+
const caseOrder = new Map(options.cases.map((testCase, index) => [testCase.id, index]));
|
|
314
|
+
observations.sort((a, b) => (runnerOrder.get(a.runnerId) ?? 0) - (runnerOrder.get(b.runnerId) ?? 0) || (caseOrder.get(a.caseId) ?? 0) - (caseOrder.get(b.caseId) ?? 0) || a.repetition - b.repetition);
|
|
315
|
+
return {
|
|
316
|
+
provenance: {
|
|
317
|
+
...options.benchmark,
|
|
318
|
+
startedAt,
|
|
319
|
+
endedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
320
|
+
caseCount: options.cases.length,
|
|
321
|
+
runnerIds: options.runners.map((runner) => runner.id),
|
|
322
|
+
repetitions,
|
|
323
|
+
maxConcurrency,
|
|
324
|
+
runnerOrderSeed
|
|
325
|
+
},
|
|
326
|
+
observations,
|
|
327
|
+
summaries: options.runners.map((runner) => summarizeAnalystBenchmarkRunner(runner.id, observations.filter((observation) => observation.runnerId === runner.id)))
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
async function runBenchmarkJob(job, signal, resolveEvidence) {
|
|
331
|
+
const started = performance.now();
|
|
332
|
+
try {
|
|
333
|
+
const output = await job.runner.analyze(job.testCase.input, {
|
|
334
|
+
caseId: job.testCase.id,
|
|
335
|
+
repetition: job.repetition,
|
|
336
|
+
signal
|
|
337
|
+
});
|
|
338
|
+
if (output.usage) assertValidAnalystUsageReceipt(output.usage, "analyst benchmark usage");
|
|
339
|
+
const benchmarkLatencyMs = performance.now() - started;
|
|
340
|
+
const latency = resolveBenchmarkLatency(output.observedLatencyMs, benchmarkLatencyMs);
|
|
341
|
+
const scoredFindings = output.error ? [] : output.findings;
|
|
342
|
+
return {
|
|
343
|
+
runnerId: job.runner.id,
|
|
344
|
+
caseId: job.testCase.id,
|
|
345
|
+
clusterId: job.testCase.clusterId,
|
|
346
|
+
labelState: job.testCase.labelState,
|
|
347
|
+
repetition: job.repetition,
|
|
348
|
+
executionIndex: job.executionIndex,
|
|
349
|
+
latencyMs: latency.value,
|
|
350
|
+
latencySource: latency.source,
|
|
351
|
+
findings: output.findings,
|
|
352
|
+
score: scoreAnalystFindings(job.testCase, scoredFindings),
|
|
353
|
+
evidenceResolution: resolveEvidence ? await resolveFindingEvidence(job.testCase, output.findings, resolveEvidence, signal) : void 0,
|
|
354
|
+
caseTags: [...job.testCase.tags ?? []],
|
|
355
|
+
caseMetadata: job.testCase.metadata,
|
|
356
|
+
usage: output.usage,
|
|
357
|
+
runnerMetadata: output.metadata,
|
|
358
|
+
...output.error ? { error: output.error } : {}
|
|
359
|
+
};
|
|
360
|
+
} catch (error) {
|
|
361
|
+
if (signal?.aborted) throw error;
|
|
362
|
+
const findings = [];
|
|
363
|
+
return {
|
|
364
|
+
runnerId: job.runner.id,
|
|
365
|
+
caseId: job.testCase.id,
|
|
366
|
+
clusterId: job.testCase.clusterId,
|
|
367
|
+
labelState: job.testCase.labelState,
|
|
368
|
+
repetition: job.repetition,
|
|
369
|
+
executionIndex: job.executionIndex,
|
|
370
|
+
latencyMs: performance.now() - started,
|
|
371
|
+
latencySource: "benchmark-clock",
|
|
372
|
+
findings,
|
|
373
|
+
score: scoreAnalystFindings(job.testCase, findings),
|
|
374
|
+
caseTags: [...job.testCase.tags ?? []],
|
|
375
|
+
caseMetadata: job.testCase.metadata,
|
|
376
|
+
error: {
|
|
377
|
+
class: error instanceof Error ? error.constructor.name : "Error",
|
|
378
|
+
message: error instanceof Error ? error.message : String(error)
|
|
379
|
+
}
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
function resolveBenchmarkLatency(observedLatencyMs, fallbackMs) {
|
|
384
|
+
if (observedLatencyMs === void 0) return {
|
|
385
|
+
value: fallbackMs,
|
|
386
|
+
source: "benchmark-clock"
|
|
387
|
+
};
|
|
388
|
+
if (observedLatencyMs === null) return {
|
|
389
|
+
value: null,
|
|
390
|
+
source: "uncaptured"
|
|
391
|
+
};
|
|
392
|
+
if (!Number.isFinite(observedLatencyMs) || observedLatencyMs < 0) throw new RangeError("analyst benchmark observedLatencyMs must be finite and non-negative");
|
|
393
|
+
return {
|
|
394
|
+
value: observedLatencyMs,
|
|
395
|
+
source: "runner-reported"
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
function benchmarkJobs(cases, runners, repetitions, runnerOrderSeed) {
|
|
399
|
+
const seededRunners = [...runners].sort((left, right) => stableHash(`${runnerOrderSeed}\u0000${left.id}`) - stableHash(`${runnerOrderSeed}\u0000${right.id}`) || left.id.localeCompare(right.id));
|
|
400
|
+
let executionIndex = 0;
|
|
401
|
+
return cases.flatMap((testCase, caseIndex) => Array.from({ length: repetitions }, (_, repetition) => {
|
|
402
|
+
const rotation = (caseIndex * repetitions + repetition) % seededRunners.length;
|
|
403
|
+
return [...seededRunners.slice(rotation), ...seededRunners.slice(0, rotation)].map((runner) => ({
|
|
404
|
+
runner,
|
|
405
|
+
testCase,
|
|
406
|
+
repetition,
|
|
407
|
+
executionIndex: executionIndex++
|
|
408
|
+
}));
|
|
409
|
+
}).flat());
|
|
410
|
+
}
|
|
411
|
+
function validateInitialObservations(observations, jobs) {
|
|
412
|
+
const expected = new Map(jobs.map((job) => [jobKey(job), job]));
|
|
413
|
+
const seen = /* @__PURE__ */ new Set();
|
|
414
|
+
return observations.map((observation) => {
|
|
415
|
+
const key = observationKey$1(observation);
|
|
416
|
+
if (seen.has(key)) throw new TypeError(`duplicate initial analyst benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}'`);
|
|
417
|
+
seen.add(key);
|
|
418
|
+
const job = expected.get(key);
|
|
419
|
+
if (!job) throw new TypeError(`initial analyst benchmark observation does not match a planned job: '${observation.runnerId}/${observation.caseId}/${observation.repetition}'`);
|
|
420
|
+
if (observation.executionIndex !== job.executionIndex) throw new TypeError(`initial analyst benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}' has executionIndex ${observation.executionIndex}; expected ${job.executionIndex}`);
|
|
421
|
+
if (observation.clusterId !== job.testCase.clusterId || observation.labelState !== job.testCase.labelState) throw new TypeError(`initial analyst benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}' does not match the current case labels`);
|
|
422
|
+
if (JSON.stringify(observation.caseTags) !== JSON.stringify(job.testCase.tags ?? []) || JSON.stringify(observation.caseMetadata) !== JSON.stringify(job.testCase.metadata)) throw new TypeError(`initial analyst benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}' does not match the current case metadata`);
|
|
423
|
+
const expectedScore = scoreAnalystFindings(job.testCase, observation.error ? [] : observation.findings);
|
|
424
|
+
if (JSON.stringify(observation.score) !== JSON.stringify(expectedScore)) throw new TypeError(`initial analyst benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}' has stale or invalid scores`);
|
|
425
|
+
if (observation.usage) assertValidAnalystUsageReceipt(observation.usage, `initial analyst benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}' usage`);
|
|
426
|
+
if (![
|
|
427
|
+
"benchmark-clock",
|
|
428
|
+
"runner-reported",
|
|
429
|
+
"uncaptured"
|
|
430
|
+
].includes(observation.latencySource) || observation.latencySource === "uncaptured" && observation.latencyMs !== null || observation.latencySource !== "uncaptured" && (observation.latencyMs === null || !Number.isFinite(observation.latencyMs) || observation.latencyMs < 0)) throw new TypeError(`initial analyst benchmark observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}' has invalid latency`);
|
|
431
|
+
return { ...observation };
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
function jobKey(job) {
|
|
435
|
+
return `${job.runner.id}\u0000${job.testCase.id}\u0000${job.repetition}`;
|
|
436
|
+
}
|
|
437
|
+
function observationKey$1(observation) {
|
|
438
|
+
return `${observation.runnerId}\u0000${observation.caseId}\u0000${observation.repetition}`;
|
|
439
|
+
}
|
|
440
|
+
async function resolveFindingEvidence(testCase, findings, resolver, signal) {
|
|
441
|
+
const evidence = findings.flatMap((finding) => finding.evidence_refs);
|
|
442
|
+
const resolved = [];
|
|
443
|
+
const unresolvedEvidence = [];
|
|
444
|
+
const errors = [];
|
|
445
|
+
for (const ref of evidence) {
|
|
446
|
+
signal?.throwIfAborted();
|
|
447
|
+
try {
|
|
448
|
+
if (await resolver({
|
|
449
|
+
caseId: testCase.id,
|
|
450
|
+
caseInput: testCase.input,
|
|
451
|
+
evidence: ref,
|
|
452
|
+
signal
|
|
453
|
+
})) resolved.push(ref);
|
|
454
|
+
else unresolvedEvidence.push(ref);
|
|
455
|
+
} catch (error) {
|
|
456
|
+
if (signal?.aborted) throw error;
|
|
457
|
+
errors.push({
|
|
458
|
+
evidence: ref,
|
|
459
|
+
class: error instanceof Error ? error.constructor.name : "Error",
|
|
460
|
+
message: error instanceof Error ? error.message : String(error)
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
return {
|
|
465
|
+
checked: evidence.length,
|
|
466
|
+
resolved: resolved.length,
|
|
467
|
+
unresolvedEvidence,
|
|
468
|
+
errors,
|
|
469
|
+
validity: evidence.length === 0 || errors.length > 0 ? null : resolved.length / evidence.length
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
function parseTraceSpanUri(uri) {
|
|
473
|
+
const match = /^trace:\/\/([^/]+)\/span\/([^/]+)$/.exec(uri);
|
|
474
|
+
if (!match) return null;
|
|
475
|
+
try {
|
|
476
|
+
const traceId = decodeURIComponent(match[1]);
|
|
477
|
+
const spanId = decodeURIComponent(match[2]);
|
|
478
|
+
return traceId && spanId ? {
|
|
479
|
+
traceId,
|
|
480
|
+
spanId
|
|
481
|
+
} : null;
|
|
482
|
+
} catch {
|
|
483
|
+
return null;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
function validateBenchmarkOptions(options) {
|
|
487
|
+
if (options.cases.length === 0) throw new TypeError("runAnalystBenchmark requires cases");
|
|
488
|
+
if (options.runners.length === 0) throw new TypeError("runAnalystBenchmark requires runners");
|
|
489
|
+
const repetitions = options.repetitions ?? 1;
|
|
490
|
+
const maxConcurrency = options.maxConcurrency ?? 1;
|
|
491
|
+
if (!Number.isSafeInteger(repetitions) || repetitions < 1) throw new RangeError("runAnalystBenchmark repetitions must be a positive safe integer");
|
|
492
|
+
if (!Number.isSafeInteger(maxConcurrency) || maxConcurrency < 1) throw new RangeError("runAnalystBenchmark maxConcurrency must be a positive safe integer");
|
|
493
|
+
if (!Number.isSafeInteger(options.runnerOrderSeed ?? 0)) throw new RangeError("runAnalystBenchmark runnerOrderSeed must be a safe integer");
|
|
494
|
+
assertUniqueNonEmpty(options.cases.map((testCase) => testCase.id), "case");
|
|
495
|
+
assertUniqueNonEmpty(options.runners.map((runner) => runner.id), "runner");
|
|
496
|
+
for (const testCase of options.cases) validateBenchmarkCase(testCase);
|
|
497
|
+
}
|
|
498
|
+
function validateBenchmarkCase(testCase) {
|
|
499
|
+
assertValidAnalystScoringCase(testCase);
|
|
500
|
+
if (!testCase.clusterId.trim()) throw new TypeError(`${testCase.id}: analyst benchmark clusterId must not be empty`);
|
|
501
|
+
if (testCase.labelState !== "positive" && testCase.labelState !== "trusted-negative" && testCase.labelState !== "unlabeled") throw new TypeError(`${testCase.id}: analyst benchmark labelState is invalid`);
|
|
502
|
+
if (testCase.labelState === "positive" && testCase.expectedIssues.length === 0) throw new TypeError(`${testCase.id}: positive case requires at least one expected issue`);
|
|
503
|
+
if (testCase.labelState !== "positive" && testCase.expectedIssues.length > 0) throw new TypeError(`${testCase.id}: ${testCase.labelState} case cannot contain expected issues`);
|
|
504
|
+
}
|
|
505
|
+
function assertUniqueNonEmpty(values, label) {
|
|
506
|
+
const seen = /* @__PURE__ */ new Set();
|
|
507
|
+
for (const value of values) {
|
|
508
|
+
if (!value.trim()) throw new TypeError(`analyst benchmark ${label} id must not be empty`);
|
|
509
|
+
if (seen.has(value)) throw new TypeError(`duplicate analyst benchmark ${label} id '${value}'`);
|
|
510
|
+
seen.add(value);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
/** 32-bit FNV-1a over raw UTF-16 code units, left SIGNED so subtracting two
|
|
514
|
+
* results is a valid comparator.
|
|
515
|
+
*
|
|
516
|
+
* Frozen: it fixes the runner order a benchmark reports. Adding the `>>> 0`
|
|
517
|
+
* the other variants carry would change that order, which is why this one
|
|
518
|
+
* does not have it. */
|
|
519
|
+
function stableHash(value) {
|
|
520
|
+
let hash = 2166136261;
|
|
521
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
522
|
+
hash ^= value.charCodeAt(index);
|
|
523
|
+
hash = Math.imul(hash, 16777619);
|
|
524
|
+
}
|
|
525
|
+
return hash >>> 0;
|
|
526
|
+
}
|
|
527
|
+
//#endregion
|
|
31
528
|
//#region src/analyst/benchmark-dataset-utils.ts
|
|
32
529
|
function normalizeBenchmarkLabel(value) {
|
|
33
530
|
const normalized = nonEmpty$1(value, "benchmark label").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
@@ -47,9 +544,6 @@ function assertStepWithinRange(step, stepCount, field) {
|
|
|
47
544
|
function defaultStepUri(trajectoryId, step) {
|
|
48
545
|
return `trace://${encodeURIComponent(trajectoryId)}/span/step-${step}`;
|
|
49
546
|
}
|
|
50
|
-
function isRecord$2(value) {
|
|
51
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
52
|
-
}
|
|
53
547
|
function positiveStep(value, field) {
|
|
54
548
|
if (!Number.isSafeInteger(value) || value < 1) throw new RangeError(`${field} must be a positive safe integer`);
|
|
55
549
|
return value;
|
|
@@ -203,7 +697,7 @@ function parseAgentRxPredictions(output, trajectoryId) {
|
|
|
203
697
|
let failures;
|
|
204
698
|
let report;
|
|
205
699
|
if (Array.isArray(output)) failures = output;
|
|
206
|
-
else if (isRecord
|
|
700
|
+
else if (isRecord(output)) {
|
|
207
701
|
assertMatchingAgentRxTaskId(output.task_id, trajectoryId, "report.task_id");
|
|
208
702
|
if (!Object.hasOwn(output, "failures")) throw new TypeError(`AgentRx prediction '${trajectoryId}' report must contain failures`);
|
|
209
703
|
failures = output.failures;
|
|
@@ -219,11 +713,11 @@ function parseAgentRxPredictions(output, trajectoryId) {
|
|
|
219
713
|
} else throw new TypeError(`AgentRx prediction '${trajectoryId}' must be a report or failures array`);
|
|
220
714
|
if (!Array.isArray(failures)) throw new TypeError(`AgentRx prediction '${trajectoryId}' failures must be an array`);
|
|
221
715
|
if (failures.length === 0) throw new TypeError(`AgentRx prediction '${trajectoryId}' failures must contain a judge prediction`);
|
|
222
|
-
if (isRecord
|
|
716
|
+
if (isRecord(output) && output.num_judges !== void 0 && output.num_judges !== failures.length) throw new TypeError(`AgentRx prediction '${trajectoryId}' declares ${output.num_judges} judges but contains ${failures.length} failures`);
|
|
223
717
|
return {
|
|
224
718
|
predictions: failures.map((value, index) => {
|
|
225
719
|
const field = `AgentRx prediction '${trajectoryId}' failures[${index}]`;
|
|
226
|
-
if (!isRecord
|
|
720
|
+
if (!isRecord(value)) throw new TypeError(`${field} must be an object`);
|
|
227
721
|
assertMatchingAgentRxTaskId(value.task_id, trajectoryId, `${field}.task_id`);
|
|
228
722
|
const failureCase = parseAgentRxFailureCase(value.failure_case, `${field}.failure_case`);
|
|
229
723
|
if (!Number.isSafeInteger(value.step_number)) throw new TypeError(`${field}.step_number must be a safe integer`);
|
|
@@ -437,7 +931,7 @@ function parseCodeTracerPredictionLabels(value, trajectoryId) {
|
|
|
437
931
|
flat.push(toCodeTracerPredictionLabel(item, codeTracerStageId(item, index + 1, trajectoryId), trajectoryId));
|
|
438
932
|
continue;
|
|
439
933
|
}
|
|
440
|
-
if (!isRecord
|
|
934
|
+
if (!isRecord(item) || !Array.isArray(item.labels)) throw new TypeError(`CodeTracer prediction '${trajectoryId}' contains an unsupported label row`);
|
|
441
935
|
const stageId = codeTracerStageId(item, index + 1, trajectoryId);
|
|
442
936
|
for (const label of item.labels) {
|
|
443
937
|
if (!isCodeTracerStepLabel(label)) throw new TypeError(`CodeTracer prediction '${trajectoryId}' contains an invalid step label`);
|
|
@@ -447,10 +941,10 @@ function parseCodeTracerPredictionLabels(value, trajectoryId) {
|
|
|
447
941
|
return flat;
|
|
448
942
|
}
|
|
449
943
|
function isCodeTraceStageAnnotation(value) {
|
|
450
|
-
return isRecord
|
|
944
|
+
return isRecord(value) && Number.isSafeInteger(value.stage_id) && value.stage_id > 0 && optionalStepArray(value.incorrect_step_ids) && optionalStepArray(value.unuseful_step_ids) && (value.reasoning === void 0 || typeof value.reasoning === "string");
|
|
451
945
|
}
|
|
452
946
|
function isCodeTracerStepLabel(value) {
|
|
453
|
-
return isRecord
|
|
947
|
+
return isRecord(value) && Number.isSafeInteger(value.step_id) && value.step_id > 0 && (value.stage === void 0 || typeof value.stage === "string" || typeof value.stage === "number") && (value.stage_name === void 0 || typeof value.stage_name === "string" || typeof value.stage_name === "number") && (value.stage_id === void 0 || typeof value.stage_id === "string" || typeof value.stage_id === "number") && (value.label === "incorrect" || value.label === "unuseful") && (value.rationale === void 0 || typeof value.rationale === "string") && (value.reason === void 0 || typeof value.reason === "string") && (value.note === void 0 || typeof value.note === "string") && (value.comment === void 0 || typeof value.comment === "string");
|
|
454
948
|
}
|
|
455
949
|
function toCodeTracerPredictionLabel(label, stageId, trajectoryId) {
|
|
456
950
|
if (!isCodeTracerStepLabel(label)) throw new TypeError(`CodeTracer prediction '${trajectoryId}' contains an invalid step label`);
|
|
@@ -728,8 +1222,8 @@ function compareMetric(options) {
|
|
|
728
1222
|
if (caseBefore.length === 0 || !clusterId) continue;
|
|
729
1223
|
pairedCases.push({
|
|
730
1224
|
clusterId,
|
|
731
|
-
baseline: mean$
|
|
732
|
-
candidate: mean$
|
|
1225
|
+
baseline: mean$3(caseBefore),
|
|
1226
|
+
candidate: mean$3(caseAfter)
|
|
733
1227
|
});
|
|
734
1228
|
}
|
|
735
1229
|
const byCluster = /* @__PURE__ */ new Map();
|
|
@@ -738,8 +1232,8 @@ function compareMetric(options) {
|
|
|
738
1232
|
rows.push(pairedCase);
|
|
739
1233
|
byCluster.set(pairedCase.clusterId, rows);
|
|
740
1234
|
}
|
|
741
|
-
const before = [...byCluster.values()].map((rows) => mean$
|
|
742
|
-
const after = [...byCluster.values()].map((rows) => mean$
|
|
1235
|
+
const before = [...byCluster.values()].map((rows) => mean$3(rows.map((row) => row.baseline)));
|
|
1236
|
+
const after = [...byCluster.values()].map((rows) => mean$3(rows.map((row) => row.candidate)));
|
|
743
1237
|
const interval = before.length === 0 ? null : pairedBootstrap(before, after, {
|
|
744
1238
|
confidence: options.confidence,
|
|
745
1239
|
resamples: options.resamples,
|
|
@@ -762,8 +1256,8 @@ function compareMetric(options) {
|
|
|
762
1256
|
candidateMissingObservations,
|
|
763
1257
|
asymmetricMissingObservations,
|
|
764
1258
|
survivorOnly,
|
|
765
|
-
baselineMean: before.length === 0 ? null : mean$
|
|
766
|
-
candidateMean: after.length === 0 ? null : mean$
|
|
1259
|
+
baselineMean: before.length === 0 ? null : mean$3(before),
|
|
1260
|
+
candidateMean: after.length === 0 ? null : mean$3(after),
|
|
767
1261
|
meanDelta: interval?.mean ?? null,
|
|
768
1262
|
intervalLow: interval?.low ?? null,
|
|
769
1263
|
intervalHigh: interval?.high ?? null,
|
|
@@ -1347,7 +1841,7 @@ const ANALYST_BENCHMARK_COST_LEDGER_FILE = "cost-ledger.jsonl";
|
|
|
1347
1841
|
function observationKey(observation) {
|
|
1348
1842
|
return `${observation.runnerId}\u0000${observation.caseId}\u0000${observation.repetition}`;
|
|
1349
1843
|
}
|
|
1350
|
-
function
|
|
1844
|
+
function parseJsonText(text, source) {
|
|
1351
1845
|
try {
|
|
1352
1846
|
return JSON.parse(text);
|
|
1353
1847
|
} catch {
|
|
@@ -1371,22 +1865,13 @@ function digestCanonical(value) {
|
|
|
1371
1865
|
}
|
|
1372
1866
|
/** RFC 8785 canonical JSON of the value's JSON document form — the byte form
|
|
1373
1867
|
* the receipt digests and compares against. */
|
|
1374
|
-
function
|
|
1868
|
+
function canonicalJsonDocument(value) {
|
|
1375
1869
|
return canonicalString(jsonDocument(value));
|
|
1376
1870
|
}
|
|
1377
|
-
function isRecord$1(value) {
|
|
1378
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1379
|
-
}
|
|
1380
1871
|
function isSha256(value) {
|
|
1381
1872
|
return typeof value === "string" && /^[a-f0-9]{64}$/.test(value);
|
|
1382
1873
|
}
|
|
1383
|
-
|
|
1384
|
-
//#region src/analyst/benchmark-implementation.ts
|
|
1385
|
-
const ANALYST_BENCHMARK_IMPLEMENTATION_DIGEST_ALGORITHM = "sha256-canonical-source-manifest";
|
|
1386
|
-
/** The dependency files' manifest digest with the package's own version
|
|
1387
|
-
* fields blanked, so a release that only bumps the version keeps the pin. */
|
|
1388
|
-
const ANALYST_BENCHMARK_DEPENDENCY_LOCK_DIGEST_ALGORITHM = "sha256-canonical-file-manifest-without-own-version";
|
|
1389
|
-
const ANALYST_BENCHMARK_DEPENDENCY_LOCK_FILES = Object.freeze([
|
|
1874
|
+
Object.freeze([
|
|
1390
1875
|
"clients/python/pyproject.toml",
|
|
1391
1876
|
"clients/python/uv.lock",
|
|
1392
1877
|
"package.json",
|
|
@@ -1542,13 +2027,7 @@ const ANALYST_BENCHMARK_IMPLEMENTATION_FILES = Object.freeze([
|
|
|
1542
2027
|
"src/trace/redaction/detectors.ts",
|
|
1543
2028
|
"src/verdict-cache.ts"
|
|
1544
2029
|
]);
|
|
1545
|
-
const ANALYST_BENCHMARK_IMPLEMENTATION_SHA256 = "
|
|
1546
|
-
function analystBenchmarkImplementationDigest() {
|
|
1547
|
-
return ANALYST_BENCHMARK_IMPLEMENTATION_SHA256;
|
|
1548
|
-
}
|
|
1549
|
-
function analystBenchmarkDependencyLockDigest() {
|
|
1550
|
-
return ANALYST_BENCHMARK_DEPENDENCY_LOCK_SHA256;
|
|
1551
|
-
}
|
|
2030
|
+
const ANALYST_BENCHMARK_IMPLEMENTATION_SHA256 = "705fdcf5f1226d15fde853ffe5c8f8771fea0dfb0f3e66671748cff8aa70e8b5";
|
|
1552
2031
|
//#endregion
|
|
1553
2032
|
//#region src/analyst/benchmark-evidence-validation.ts
|
|
1554
2033
|
const MIN_ACTION_EXCERPT_CHARACTERS = 12;
|
|
@@ -2356,17 +2835,6 @@ function isMissing(error) {
|
|
|
2356
2835
|
function isNodeError$1(error, code) {
|
|
2357
2836
|
return error instanceof Error && "code" in error && error.code === code;
|
|
2358
2837
|
}
|
|
2359
|
-
//#endregion
|
|
2360
|
-
//#region src/analyst/benchmark-public-prompt.ts
|
|
2361
|
-
/** Widest contiguous failure block a model may report. The published corpus's
|
|
2362
|
-
* widest labeled block is 8 steps and its widest stage span is 9, so this bound
|
|
2363
|
-
* never binds honest enumeration; it caps how far one over-wide block can push
|
|
2364
|
-
* unlabeled steps into the precision denominator. */
|
|
2365
|
-
const MAX_INCORRECT_BLOCK_STEPS = 12;
|
|
2366
|
-
/** Most blocks a model may report for one trajectory. The published corpus's
|
|
2367
|
-
* densest case carries 4 disjoint labeled blocks. Together with the per-block
|
|
2368
|
-
* cap this bounds one case at 192 predicted steps without a second ceiling. */
|
|
2369
|
-
const MAX_INCORRECT_BLOCKS = 16;
|
|
2370
2838
|
const TRACE_PROJECTION_ATTRIBUTE_BYTE_CAPS = [
|
|
2371
2839
|
4096,
|
|
2372
2840
|
2048,
|
|
@@ -2738,8 +3206,8 @@ async function readAndValidateResumeFiles(paths, currentIdentity, currentIdentit
|
|
|
2738
3206
|
if (!await regularFileExists(paths.initializationComplete)) return initializeRunFiles(paths, currentIdentity, currentIdentitySha256, currentLocalIdentitySha256, localReceiptInput);
|
|
2739
3207
|
const manifest = await readAndValidateManifest(paths.manifest, currentIdentity, currentIdentitySha256, currentLocalIdentitySha256);
|
|
2740
3208
|
const localReceiptContent = await readRegularFile(paths.localReceipt, "benchmark local run receipt");
|
|
2741
|
-
const value =
|
|
2742
|
-
if (!isRecord
|
|
3209
|
+
const value = parseJsonText(localReceiptContent, paths.localReceipt);
|
|
3210
|
+
if (!isRecord(value)) throw new TypeError(`benchmark local run receipt must be an object: ${paths.localReceipt}`);
|
|
2743
3211
|
assertExactKeys(value, [
|
|
2744
3212
|
"kind",
|
|
2745
3213
|
"runIdentitySha256",
|
|
@@ -2749,13 +3217,13 @@ async function readAndValidateResumeFiles(paths, currentIdentity, currentIdentit
|
|
|
2749
3217
|
"environment",
|
|
2750
3218
|
"files"
|
|
2751
3219
|
], "benchmark local run receipt");
|
|
2752
|
-
if (value.kind !== "agent-eval/analyst-benchmark-local-run" || value.runIdentitySha256 !== currentIdentitySha256 || value.localIdentitySha256 !== currentLocalIdentitySha256 || !isRecord
|
|
3220
|
+
if (value.kind !== "agent-eval/analyst-benchmark-local-run" || value.runIdentitySha256 !== currentIdentitySha256 || value.localIdentitySha256 !== currentLocalIdentitySha256 || !isRecord(value.local)) throw new Error("benchmark local run receipt does not match the requested resume");
|
|
2753
3221
|
const expectedLocalReceipt = {
|
|
2754
3222
|
...localReceiptInput,
|
|
2755
3223
|
runIdentitySha256: currentIdentitySha256,
|
|
2756
3224
|
localIdentitySha256: currentLocalIdentitySha256
|
|
2757
3225
|
};
|
|
2758
|
-
if (digestCanonical(value.local) !== currentLocalIdentitySha256 ||
|
|
3226
|
+
if (digestCanonical(value.local) !== currentLocalIdentitySha256 || canonicalJsonDocument(value.local) !== canonicalJsonDocument(localReceiptInput.local)) throw new Error("benchmark local paths or model-owner module do not match the requested resume");
|
|
2759
3227
|
if (localReceiptContent !== `${JSON.stringify(expectedLocalReceipt, null, 2)}\n`) throw new Error(`benchmark local run receipt does not exactly match: ${paths.localReceipt}`);
|
|
2760
3228
|
if (await readRegularFile(paths.initializationComplete, "benchmark initialization marker") !== renderInitializationComplete(manifest)) throw new Error(`benchmark initialization marker does not match the run manifest: ${paths.initializationComplete}`);
|
|
2761
3229
|
return manifest;
|
|
@@ -2767,8 +3235,8 @@ async function readAndValidateManifest(path, currentIdentity, currentIdentitySha
|
|
|
2767
3235
|
return manifest;
|
|
2768
3236
|
}
|
|
2769
3237
|
async function readAndValidateManifestContent(path, content, currentIdentity, currentIdentitySha256, currentLocalIdentitySha256) {
|
|
2770
|
-
const value =
|
|
2771
|
-
if (!isRecord
|
|
3238
|
+
const value = parseJsonText(content, path);
|
|
3239
|
+
if (!isRecord(value)) throw new TypeError(`benchmark run manifest must be an object: ${path}`);
|
|
2772
3240
|
assertExactKeys(value, [
|
|
2773
3241
|
"kind",
|
|
2774
3242
|
"createdAt",
|
|
@@ -2778,9 +3246,9 @@ async function readAndValidateManifestContent(path, content, currentIdentity, cu
|
|
|
2778
3246
|
], "benchmark run manifest");
|
|
2779
3247
|
if (value.kind !== "agent-eval/analyst-benchmark-run") throw new TypeError(`unsupported benchmark run manifest: ${path}`);
|
|
2780
3248
|
if (typeof value.createdAt !== "string" || !Number.isFinite(Date.parse(value.createdAt))) throw new TypeError(`benchmark run manifest has an invalid createdAt: ${path}`);
|
|
2781
|
-
if (!isSha256(value.identitySha256) || !isSha256(value.localIdentitySha256) || !isRecord
|
|
3249
|
+
if (!isSha256(value.identitySha256) || !isSha256(value.localIdentitySha256) || !isRecord(value.identity)) throw new TypeError(`benchmark run manifest has an invalid identity: ${path}`);
|
|
2782
3250
|
if (digestCanonical(value.identity) !== value.identitySha256) throw new Error(`benchmark run manifest identity digest does not match its contents: ${path}`);
|
|
2783
|
-
if (currentIdentitySha256 !== value.identitySha256 || currentLocalIdentitySha256 !== value.localIdentitySha256 ||
|
|
3251
|
+
if (currentIdentitySha256 !== value.identitySha256 || currentLocalIdentitySha256 !== value.localIdentitySha256 || canonicalJsonDocument(currentIdentity) !== canonicalJsonDocument(value.identity)) throw new Error(`benchmark resume configuration or inputs do not match ${ANALYST_BENCHMARK_MANIFEST_FILE}`);
|
|
2784
3252
|
return {
|
|
2785
3253
|
kind: "agent-eval/analyst-benchmark-run",
|
|
2786
3254
|
createdAt: value.createdAt,
|
|
@@ -2844,8 +3312,8 @@ async function readProgress(path, runIdentitySha256, caseIds, repetitions, analy
|
|
|
2844
3312
|
const plannedObservationCount = caseIds.length * 2 * repetitions;
|
|
2845
3313
|
for (const [index, line] of rawLines.entries()) {
|
|
2846
3314
|
if (!line.trim()) throw new Error(`benchmark observation log contains an empty row at line ${index + 1}`);
|
|
2847
|
-
const parsed =
|
|
2848
|
-
if (!isRecord
|
|
3315
|
+
const parsed = parseJsonText(line, `${path}:${index + 1}`);
|
|
3316
|
+
if (!isRecord(parsed)) throw new TypeError(`benchmark observation row ${index + 1} must be an object`);
|
|
2849
3317
|
assertExactKeys(parsed, [
|
|
2850
3318
|
"sequence",
|
|
2851
3319
|
"runIdentitySha256",
|
|
@@ -3045,7 +3513,7 @@ function escapeCell$1(value) {
|
|
|
3045
3513
|
//#endregion
|
|
3046
3514
|
//#region src/analyst/benchmark-command-result.ts
|
|
3047
3515
|
async function readAnalystBenchmarkArtifact(path) {
|
|
3048
|
-
const value =
|
|
3516
|
+
const value = parseJsonText(await readRegularFile(path, "analyst benchmark result"), path);
|
|
3049
3517
|
assertAnalystBenchmarkArtifact(value, "analyst benchmark result");
|
|
3050
3518
|
return value;
|
|
3051
3519
|
}
|
|
@@ -3103,33 +3571,33 @@ function assertCompletedArtifactMatchesRun(artifact, manifest, observations, pre
|
|
|
3103
3571
|
dependencyLockSha256: config.dependencyLockSha256
|
|
3104
3572
|
}
|
|
3105
3573
|
};
|
|
3106
|
-
if (
|
|
3574
|
+
if (canonicalJsonDocument(artifact.inputs) !== canonicalJsonDocument(expectedInputs)) throw new Error("completed benchmark result inputs do not match the run manifest");
|
|
3107
3575
|
const provenance = artifact.result.provenance;
|
|
3108
3576
|
const expectedDatasetId = config.dataset === "agentrx" ? "microsoft/AgentRx" : "NJU-LINK/CodeTraceBench";
|
|
3109
3577
|
const expectedOutputAdapter = config.dataset === "agentrx" ? "agentrx-taxonomy-and-root-step" : "codetracebench-incorrect-block";
|
|
3110
|
-
if (provenance.id !== `${config.dataset}-real-model-analyst` || provenance.startedAt !== manifest.createdAt || !Number.isFinite(Date.parse(provenance.endedAt)) || Date.parse(provenance.endedAt) < Date.parse(provenance.startedAt) ||
|
|
3578
|
+
if (provenance.id !== `${config.dataset}-real-model-analyst` || provenance.startedAt !== manifest.createdAt || !Number.isFinite(Date.parse(provenance.endedAt)) || Date.parse(provenance.endedAt) < Date.parse(provenance.startedAt) || canonicalJsonDocument(provenance.dataset) !== canonicalJsonDocument({
|
|
3111
3579
|
id: expectedDatasetId,
|
|
3112
3580
|
revision: config.datasetRevision,
|
|
3113
3581
|
split: config.datasetSplit
|
|
3114
|
-
}) || provenance.caseCount !== inputs.selectedCaseIds.length ||
|
|
3582
|
+
}) || provenance.caseCount !== inputs.selectedCaseIds.length || canonicalJsonDocument(provenance.runnerIds) !== canonicalJsonDocument(config.runnerIds) || provenance.repetitions !== config.repetitions || provenance.maxConcurrency !== Math.min(config.concurrency, expectedCount) || provenance.runnerOrderSeed !== config.seed || provenance.metadata?.model !== config.model.id || provenance.metadata?.modelOwnerCallRef !== config.model.ownerCallRef || provenance.metadata?.rlmSamples !== config.rlmSamples || provenance.metadata?.outputAdapter !== expectedOutputAdapter || provenance.metadata?.caseSelection !== prepared.selection.method || provenance.metadata?.caseSelectionSeed !== config.seed || provenance.metadata?.selectionStratified !== prepared.selection.stratified || provenance.metadata?.protocolSha256 !== config.analystProtocolSha256 || provenance.metadata?.implementationSha256 !== config.implementationSha256 || provenance.metadata?.dependencyLockSha256 !== config.dependencyLockSha256 || provenance.metadata?.populationRepresentativenessProven !== false) throw new Error("completed benchmark result provenance does not match the run manifest");
|
|
3115
3583
|
const expectedSummaries = config.runnerIds.map((runnerId) => summarizeAnalystBenchmarkRunner(runnerId, observations.filter((observation) => observation.runnerId === runnerId)));
|
|
3116
|
-
if (
|
|
3584
|
+
if (canonicalJsonDocument(artifact.result.summaries) !== canonicalJsonDocument(expectedSummaries)) throw new Error("completed benchmark summaries do not match durable observations");
|
|
3117
3585
|
const expectedComparisons = [compareAnalystRunners(artifact.result, {
|
|
3118
3586
|
baselineRunnerId: "empty",
|
|
3119
3587
|
candidateRunnerId: config.runnerIds[1],
|
|
3120
3588
|
seed: config.seed
|
|
3121
3589
|
})];
|
|
3122
|
-
if (
|
|
3590
|
+
if (canonicalJsonDocument(artifact.comparisons) !== canonicalJsonDocument(expectedComparisons)) throw new Error("completed benchmark comparisons do not match durable observations");
|
|
3123
3591
|
if (config.dataset === "codetracebench") {
|
|
3124
|
-
if (
|
|
3125
|
-
} else if (
|
|
3592
|
+
if (canonicalJsonDocument(artifact.codeTraceCalibration) !== canonicalJsonDocument(summarizeCodeTraceCalibration(artifact.result)) || artifact.agentRxCalibration !== void 0) throw new Error("completed CodeTraceBench calibration does not match durable observations");
|
|
3593
|
+
} else if (canonicalJsonDocument(artifact.agentRxCalibration) !== canonicalJsonDocument(summarizeAgentRxCalibration(artifact.result, "f228165bfec60a801fd5fedd9d8ffe0f9de0c69d")) || artifact.codeTraceCalibration !== void 0) throw new Error("completed AgentRx calibration does not match durable observations");
|
|
3126
3594
|
}
|
|
3127
3595
|
function assertSameObservations(expected, actual) {
|
|
3128
3596
|
if (expected.length !== actual.length) throw new Error(`benchmark result has ${expected.length} observations but the durable log has ${actual.length}`);
|
|
3129
|
-
const expectedByKey = new Map(expected.map((observation) => [observationKey(observation),
|
|
3597
|
+
const expectedByKey = new Map(expected.map((observation) => [observationKey(observation), canonicalJsonDocument(observation)]));
|
|
3130
3598
|
for (const observation of actual) {
|
|
3131
3599
|
const key = observationKey(observation);
|
|
3132
|
-
if (expectedByKey.get(key) !==
|
|
3600
|
+
if (expectedByKey.get(key) !== canonicalJsonDocument(observation)) throw new Error(`benchmark result does not match durable observation '${observation.runnerId}/${observation.caseId}/${observation.repetition}'`);
|
|
3133
3601
|
expectedByKey.delete(key);
|
|
3134
3602
|
}
|
|
3135
3603
|
if (expectedByKey.size > 0) throw new Error("benchmark result is missing durable observations");
|
|
@@ -3475,9 +3943,6 @@ function safeInteger(value, field) {
|
|
|
3475
3943
|
if (!Number.isSafeInteger(value)) throw new RangeError(`${field} must be a safe integer`);
|
|
3476
3944
|
return value;
|
|
3477
3945
|
}
|
|
3478
|
-
function isRecord(value) {
|
|
3479
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3480
|
-
}
|
|
3481
3946
|
//#endregion
|
|
3482
3947
|
//#region src/analyst/benchmark-response-cache.ts
|
|
3483
3948
|
const SHA256 = /^[a-f0-9]{64}$/;
|
|
@@ -6324,6 +6789,6 @@ function shellQuote(value) {
|
|
|
6324
6789
|
return /^[a-zA-Z0-9_./:@%+=,-]+$/.test(value) ? value : `'${value.replaceAll("'", "'\\''")}'`;
|
|
6325
6790
|
}
|
|
6326
6791
|
//#endregion
|
|
6327
|
-
export {
|
|
6792
|
+
export { agentRxBenchmarkCase as A, ANALYST_BENCHMARK_COST_LEDGER_FILE as C, AGENT_RX_UPSTREAM_REVISION as D, ANALYST_BENCHMARK_OBSERVATIONS_FILE as E, normalizeAgentRxCategory as M, runAnalystBenchmark as N, codeTraceBenchCase as O, traceStoreEvidenceResolver as P, ANALYST_BENCHMARK_IMPLEMENTATION_FILES as S, ANALYST_BENCHMARK_MANIFEST_FILE as T, readAnalystBenchmarkArtifact as _, runInlineAnalystDefinition as a, ANALYST_BENCHMARK_EVIDENCE_DEPENDENCY_LOCK_SHA256 as b, publicRlmAnalystDefinition as c, publicDirectAnalystDefinition as d, runChunkedAnalystDefinition as f, expandCodeTraceFailureBlocks as g, analystDefinitionProtocolSha256 as h, primeCodeTraceAnalystDefinition as i, agentRxPredictionsToFindings as j, codeTracerPredictionsToFindings as k, runReplVariableAnalystDefinition as l, analystDefinitionAsymmetries as m, createPrimeBenchmarkRunner as n, loadPublicBenchmarkRows as o, AnalystExpressivenessError as p, primeAnalystProtocolSha256 as r, createPublicBenchmarkRlmRunner as s, runAnalystBenchmarkCommand as t, createPublicBenchmarkDirectRunner as u, CODE_TRACE_BENCH_ANALYST_PROMPT as v, ANALYST_BENCHMARK_LOCAL_RECEIPT_FILE as w, ANALYST_BENCHMARK_EVIDENCE_IMPLEMENTATION_SHA256 as x, publicBenchmarkProtocolSha256 as y };
|
|
6328
6793
|
|
|
6329
|
-
//# sourceMappingURL=benchmark-command-
|
|
6794
|
+
//# sourceMappingURL=benchmark-command-xQK8nOI6.js.map
|