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