@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure-cluster-DN0t63Z0.d.ts","names":[],"sources":["../src/failure-taxonomy.ts","../src/pipelines/failure-cluster.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;KA6CY;;iBAuHI,aAAa,cAAc,eAAe;UAIzC;EACf,KAAK;EACL,OAAO;EACP,QAAQ;;UAGO;EACf,cAAc;;EAEd,OAAO;EACP;EACA;EACA;;;UAIe;EACf;EACA,QAAQ,KAAK;IACX,cAAc;IACd;;IAEA,QAAQ;IACR;IACA;;;;;;;;;;UAWa;;EAEf,cAAc;EACd,SAAS;;EAET,QAAQ;;;;;;;;;;;;iBAwEM,sBACd,mCACA,iBAAgB,sBACf;;;;;;;;;;iBAkba,gBACd,KAAK,gBACL,QAAO,eACP,uBAAsB,sBACrB;;;UCpsBc;EACf,cAAc;;EAEd;;EAEA;;;;;;;EAOA;EACA;EACA;EACA;EACA;;UAGe;EACf,UAAU;EACV;EACA;;iBAGoB,mBACpB,OAAO,YACP;EAAW,QAAQ;EAAe;IACjC,QAAQ"}
|
|
@@ -66,23 +66,6 @@ const FAILURE_BLAME = {
|
|
|
66
66
|
unreported: "unknown",
|
|
67
67
|
unknown: "unknown"
|
|
68
68
|
};
|
|
69
|
-
/**
|
|
70
|
-
* The blames that mean the run got no usable turn out of the machine or the
|
|
71
|
-
* provider.
|
|
72
|
-
*
|
|
73
|
-
* This answers a different question from `machine` alone, and the two must not
|
|
74
|
-
* be confused. "Is this run evidence about the agent?" is answered by `machine`
|
|
75
|
-
* and by nothing else — a `provider` death stays charged, because every arm
|
|
76
|
-
* faces the same provider on the same day. "Is this seat producing usable turns
|
|
77
|
-
* at all?" is answered by this set, because a seat that only ever returns empty
|
|
78
|
-
* completions and torn streams is as dead as one whose bridge refuses, however
|
|
79
|
-
* the individual runs are charged.
|
|
80
|
-
*
|
|
81
|
-
* So a reader counting an outage streak counts these; a reader deciding whether
|
|
82
|
-
* to void a run reads `machine`. Nothing an operator did lands here: `cancelled`
|
|
83
|
-
* is blamed `unknown` for exactly that reason.
|
|
84
|
-
*/
|
|
85
|
-
const INFRA_FAILURE_BLAMES = /* @__PURE__ */ new Set(["machine", "provider"]);
|
|
86
69
|
/** Who the named class is charged to. */
|
|
87
70
|
function failureBlame(failureClass) {
|
|
88
71
|
return FAILURE_BLAME[failureClass];
|
|
@@ -533,6 +516,6 @@ function recordedReasons(ctx) {
|
|
|
533
516
|
return found;
|
|
534
517
|
}
|
|
535
518
|
//#endregion
|
|
536
|
-
export {
|
|
519
|
+
export { failureBlame as i, classifyFailure as n, classifyFailureReason as r, DEFAULT_RULES as t };
|
|
537
520
|
|
|
538
|
-
//# sourceMappingURL=failure-taxonomy-
|
|
521
|
+
//# sourceMappingURL=failure-taxonomy-Bx5oWqaW.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"failure-taxonomy-CjabTATj.js","names":[],"sources":["../src/failure-taxonomy.ts"],"sourcesContent":["/**\n * Failure taxonomy — canonical classes, who each one is charged to, and two\n * default classifiers.\n *\n * Every failed run should end up in a named class. The classifiers here are\n * rule-based (fast, deterministic); an LLM fallback can be added by the\n * consumer for novel cases and trained into the rule base over time.\n *\n * Two entry points, because a dead run does not always leave a trace:\n * - `classifyFailure(ctx)` reads a run with its spans and events, and\n * persists as `Run.outcome.failureClass`;\n * - `classifyFailureReason(text)` reads the one thing a run that died before\n * any span always leaves — a reason string on its terminal record.\n * `classifyFailure` calls the reason classifier itself when no structural rule\n * matches, so a run whose only evidence is `ECONNREFUSED` no longer lands in\n * `unknown`.\n *\n * Every classification carries a `blame`. Without it a comparison charges\n * infrastructure outages to the agent under test: a run that never reached a\n * model is not evidence about the agent and must be voided, not counted as a\n * loss.\n */\n\nimport type { FailureClass, Run, Span, TraceEvent } from './trace/schema'\nimport { FAILURE_CLASSES } from './trace/schema'\n\nexport { FAILURE_CLASSES, type FailureClass }\n\n/**\n * Who a failure is charged to. This is the axis a comparison reads before it\n * counts a loss.\n *\n * `machine` — the run never reached a model. The bridge refused, its lane was\n * full, the box never provisioned, the credential was absent. An\n * agent cannot route around this, so a run that recorded nothing\n * behind only machine failures is not evidence about the agent.\n * `provider` — the model was reached and the turn did not complete: an empty\n * completion, a torn stream, a killed process. Every arm faces\n * the same provider on the same day, so this stays charged.\n * `agent` — the agent's own reasoning, tool use, budgeting, or scheduling\n * produced the failure. Charged.\n * `unknown` — the record does not say. Never voids a run: an unread reason is\n * not a proven outage.\n * `none` — no failure to charge.\n */\nexport type FailureBlame = 'none' | 'machine' | 'provider' | 'agent' | 'unknown'\n\n/**\n * Blame for every canonical class. The `Record` is exhaustive on purpose: a\n * class added to `FAILURE_CLASSES` without a blame here fails to compile, so\n * the axis cannot silently acquire a hole that reads as `undefined` — and a\n * missing blame would void or charge a run by accident.\n *\n * The assignment rule, applied member by member: a class is `machine` only\n * when the run demonstrably never reached a model. An environment that refuses\n * one specific action the agent chose (a denied write, an out-of-scope call,\n * an approval hold) stays `agent`, because the agent selected the action and\n * every arm faces the same policy.\n */\nexport const FAILURE_BLAME: Readonly<Record<FailureClass, FailureBlame>> = {\n success: 'none',\n\n // Behaviour: the agent ran and its own work is what failed.\n reasoning_error: 'agent',\n tool_selection_error: 'agent',\n tool_argument_error: 'agent',\n tool_recovery_failure: 'agent',\n hallucination: 'agent',\n instruction_following: 'agent',\n safety_refusal_miss: 'agent',\n policy_violation: 'agent',\n budget_exceeded: 'agent',\n format_drift: 'agent',\n permission_escalation: 'agent',\n pii_leak: 'agent',\n cost_overrun: 'agent',\n timeout: 'agent',\n // A command the agent ran exited non-zero inside a live box. The box worked.\n sandbox_failure: 'agent',\n\n // Knowledge and evidence: a model answered, and how the agent handled the\n // gap is exactly what is under test. Every arm faces the same gap.\n missing_user_data: 'agent',\n missing_domain_data: 'agent',\n missing_codebase_context: 'agent',\n missing_runtime_context: 'agent',\n stale_external_data: 'agent',\n bad_retrieval: 'agent',\n insufficient_evidence: 'agent',\n contradictory_evidence: 'agent',\n ambiguous_user_intent: 'agent',\n\n // Environment provisioning: the run could not reach the model or was stopped\n // before execution, through no act of the agent.\n missing_credentials: 'machine',\n missing_integration_connection: 'machine',\n integration_auth_expired: 'machine',\n bad_integration_manifest: 'machine',\n knowledge_readiness_blocked: 'machine',\n\n // Environment refusing one action the agent chose.\n missing_integration_scope: 'agent',\n integration_approval_required: 'agent',\n unsafe_integration_write_denied: 'agent',\n\n // A third-party invocation the agent reached and that did not complete.\n integration_provider_failure: 'provider',\n\n // Transport: never reached a model.\n bridge_unreachable: 'machine',\n bridge_lane_saturated: 'machine',\n router_usage_mismatch: 'machine',\n session_profile_conflict: 'machine',\n runtime_restart: 'machine',\n root_driver_failed: 'machine',\n box_provision_failure: 'machine',\n box_teardown_failure: 'machine',\n\n // The agent wrote the broken instrument, so the run is charged: the machine\n // answered, and a run dying on its own profile is not an outage.\n profile_refused: 'agent',\n\n // Transport: reached the model, the turn did not complete.\n empty_completion: 'provider',\n stream_protocol_error: 'provider',\n stream_incomplete: 'provider',\n message_sealed: 'provider',\n process_killed: 'provider',\n terminated: 'provider',\n\n // An operator stopping a run is not the machine, the provider or the agent.\n // Charging it to any of the three would make a deliberate stop read as a\n // failure of the thing that was stopped, and counting it as infrastructure\n // would turn a cancelled batch into an outage streak.\n cancelled: 'unknown',\n\n traversal_cap_exhausted: 'agent',\n\n unreported: 'unknown',\n unknown: 'unknown',\n}\n\n/**\n * The blames that mean the run got no usable turn out of the machine or the\n * provider.\n *\n * This answers a different question from `machine` alone, and the two must not\n * be confused. \"Is this run evidence about the agent?\" is answered by `machine`\n * and by nothing else — a `provider` death stays charged, because every arm\n * faces the same provider on the same day. \"Is this seat producing usable turns\n * at all?\" is answered by this set, because a seat that only ever returns empty\n * completions and torn streams is as dead as one whose bridge refuses, however\n * the individual runs are charged.\n *\n * So a reader counting an outage streak counts these; a reader deciding whether\n * to void a run reads `machine`. Nothing an operator did lands here: `cancelled`\n * is blamed `unknown` for exactly that reason.\n */\nexport const INFRA_FAILURE_BLAMES: ReadonlySet<FailureBlame> = new Set<FailureBlame>([\n 'machine',\n 'provider',\n])\n\n/** Who the named class is charged to. */\nexport function failureBlame(failureClass: FailureClass): FailureBlame {\n return FAILURE_BLAME[failureClass]\n}\n\nexport interface FailureContext {\n run: Run\n spans: Span[]\n events: TraceEvent[]\n}\n\nexport interface FailureClassification {\n failureClass: FailureClass\n /** Who the failure is charged to. Derived from the class unless a rule overrode it. */\n blame: FailureBlame\n reason: string\n triggerSpanId?: string\n triggerEventId?: string\n}\n\n/** Ordered rules — first match wins. */\nexport interface FailureRule {\n id: string\n match: (ctx: FailureContext) => {\n failureClass: FailureClass\n reason: string\n /** Overrides the class's canonical blame. State why at the call site. */\n blame?: FailureBlame\n triggerSpanId?: string\n triggerEventId?: string\n } | null\n}\n\n/**\n * One ordered rule over a failure reason string.\n *\n * Order is load-bearing, because one reason string carries two signals: a seat\n * killed by SIGKILL while the bridge refuses connections is a bridge failure,\n * not a process failure, so the bridge patterns are tested first.\n */\nexport interface FailureReasonRule {\n /** The class the first matching pattern names. */\n failureClass: FailureClass\n pattern: RegExp\n /** Overrides the class's canonical blame. State why at the call site. */\n blame?: FailureBlame\n}\n\n/**\n * The default ordered reason rules, measured against the transport death\n * strings this stack records — runtime settle reasons, bridge errors, sandbox\n * provisioning errors, and provider stream errors.\n *\n * A consumer with a different transport passes its own set to\n * `classifyFailureReason`; nothing here is a gate.\n */\nexport const DEFAULT_FAILURE_REASON_RULES: readonly FailureReasonRule[] = [\n {\n failureClass: 'bridge_unreachable',\n pattern: /ECONNREFUSED|disconnected before terminal acknowledgement|bridge .* unreachable/i,\n },\n {\n failureClass: 'bridge_lane_saturated',\n pattern: /acquire timeout after \\d+ms|in_flight=\\d+\\/\\d+/i,\n },\n { failureClass: 'router_usage_mismatch', pattern: /did not match its recorded usage/i },\n {\n failureClass: 'session_profile_conflict',\n pattern:\n /bound to a different AgentProfile|profile materialization changed across session turns/i,\n },\n { failureClass: 'runtime_restart', pattern: /agent runtime restarted/i },\n { failureClass: 'root_driver_failed', pattern: /root driver failed/i },\n {\n failureClass: 'box_provision_failure',\n pattern:\n /Sandbox create did not complete within|failed to (create|provision) (a )?box|box .*: (create|provision) failed/i,\n },\n { failureClass: 'box_teardown_failure', pattern: /teardown reported destroyed=false/i },\n {\n failureClass: 'profile_refused',\n pattern:\n /workspace materialization failed|cannot replace its harness's system prompt|has no explicit entry in .*models\\.json|conflicts with agent_profile\\.model/i,\n },\n { failureClass: 'empty_completion', pattern: /without emitting any visible output/i },\n { failureClass: 'stream_protocol_error', pattern: /JSON error injected into SSE stream/i },\n {\n failureClass: 'stream_incomplete',\n pattern: /Prompt stream ended before a terminal event/i,\n },\n { failureClass: 'message_sealed', pattern: /already rolled up \\(sealed\\)/i },\n { failureClass: 'process_killed', pattern: /killed by SIGKILL|exited with code null/i },\n { failureClass: 'cancelled', pattern: /cancelled by user/i },\n { failureClass: 'terminated', pattern: /(^|: )terminated\\b/i },\n { failureClass: 'budget_exceeded', pattern: /budget pool: ticket \\d+ spent/i },\n // Deliberately last and deliberately broad: by the time a reason reaches this\n // rule every transport pattern above has declined it, so what remains is the\n // agent's own clock. That boundary is the rule set's, not a fact about the\n // word: a transport whose deadline wording is not matched above would be\n // charged to the agent here, which is the mis-charge this taxonomy exists to\n // stop. A consumer whose machine has its own deadline wording adds a rule for\n // it AHEAD of this one rather than widening this one — inventing patterns for\n // strings nobody has recorded is how a rule set stops describing anything.\n { failureClass: 'timeout', pattern: /deadline|timed out|timeout/i },\n { failureClass: 'traversal_cap_exhausted', pattern: /traversal|iteration cap|exhausted/i },\n]\n\n/**\n * Name the failure one reason string describes.\n *\n * This is the entry point for a run that died before it produced a span: a\n * terminal record, a settle row, a spawn journal line. An unmatched reason is\n * never dropped — it returns `unknown` and keeps the text, so a new failure\n * mode shows up as a named gap instead of a silent bucket. An absent reason\n * returns `unreported`, which is a different fact: the record itself is\n * incomplete.\n */\nexport function classifyFailureReason(\n reason: string | null | undefined,\n rules: readonly FailureReasonRule[] = DEFAULT_FAILURE_REASON_RULES,\n): FailureClassification {\n const text = String(reason ?? '').trim()\n if (text === '') {\n return { failureClass: 'unreported', blame: FAILURE_BLAME.unreported, reason: '' }\n }\n for (const rule of rules) {\n if (rule.pattern.test(text)) {\n return {\n failureClass: rule.failureClass,\n blame: rule.blame ?? FAILURE_BLAME[rule.failureClass],\n reason: text,\n }\n }\n }\n return { failureClass: 'unknown', blame: FAILURE_BLAME.unknown, reason: text }\n}\n\nexport const DEFAULT_RULES: FailureRule[] = [\n // Outcome already named? Respect it.\n {\n id: 'explicit-outcome',\n match: ({ run }) => {\n const fc = run.outcome?.failureClass\n if (fc && fc !== 'unknown')\n return { failureClass: fc, reason: 'outcome.failureClass set explicitly' }\n return null\n },\n },\n {\n id: 'knowledge-readiness-blocked',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'readiness_scored' &&\n e.payload.passed === false,\n )\n return event\n ? {\n failureClass: 'knowledge_readiness_blocked',\n reason: 'knowledge readiness report blocked execution',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'bad-integration-manifest',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n ((e.payload.kind === 'integration_manifest_validated' && e.payload.valid === false) ||\n (e.payload.kind === 'integration_invoke_failed' &&\n e.payload.code === 'manifest_invalid')),\n )\n return event\n ? {\n failureClass: 'bad_integration_manifest',\n reason: 'integration manifest validation failed before launch',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'missing-integration-connection',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'integration_manifest_resolved' &&\n hasResolutionStatus(e.payload, 'missing_connection'),\n )\n return event\n ? {\n failureClass: 'missing_integration_connection',\n reason: 'required integration connection was missing',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'missing-integration-scope',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n ((e.payload.kind === 'integration_manifest_resolved' && hasMissingScopes(e.payload)) ||\n (e.payload.kind === 'integration_invoke_failed' && e.payload.code === 'scope_denied')),\n )\n return event\n ? {\n failureClass: 'missing_integration_scope',\n reason: 'integration grant or connection lacks required scopes',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'integration-approval-required',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n ((e.payload.kind === 'integration_invoke' && e.payload.status === 'approval_required') ||\n (e.payload.kind === 'integration_invoke_failed' &&\n e.payload.code === 'approval_required') ||\n e.payload.kind === 'integration_approval_required'),\n )\n return event\n ? {\n failureClass: 'integration_approval_required',\n reason: 'integration write paused for user approval',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'integration-auth-expired',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'integration_invoke_failed' &&\n (e.payload.code === 'auth_expired' ||\n e.payload.code === 'connection_not_active' ||\n e.payload.code === 'capability_expired' ||\n e.payload.status === 'expired'),\n )\n return event\n ? {\n failureClass: 'integration_auth_expired',\n reason: 'integration connection or capability expired',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'unsafe-integration-write-denied',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'integration_invoke_failed' &&\n (e.payload.code === 'unsafe_write_denied' ||\n e.payload.code === 'policy_denied' ||\n e.payload.code === 'action_denied'),\n )\n return event\n ? {\n failureClass: 'unsafe_integration_write_denied',\n reason: 'integration write was denied by policy or capability scope',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'integration-provider-failure',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'integration_invoke_failed' &&\n ![\n 'scope_denied',\n 'approval_required',\n 'auth_expired',\n 'connection_not_active',\n 'capability_expired',\n 'unsafe_write_denied',\n 'policy_denied',\n 'action_denied',\n 'manifest_invalid',\n ].includes(String(e.payload.code)),\n )\n return event\n ? {\n failureClass: 'integration_provider_failure',\n reason: 'integration provider invocation failed',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'missing-credentials',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'knowledge_gap' &&\n e.payload.category === 'credential_or_secret',\n )\n return event\n ? {\n failureClass: 'missing_credentials',\n reason: 'required credential or secret was missing',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'bad-retrieval',\n match: ({ run, spans }) => {\n if (run.outcome?.pass !== false) return null\n const retrieval = spans.find(\n (s) =>\n s.kind === 'retrieval' && (s.hits.length === 0 || s.hits.every((hit) => hit.score <= 0)),\n )\n return retrieval\n ? {\n failureClass: 'bad_retrieval',\n reason: 'retrieval returned no useful hits for a failed run',\n triggerSpanId: retrieval.spanId,\n }\n : null\n },\n },\n {\n id: 'insufficient-evidence',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'knowledge_gap' &&\n e.payload.reason === 'insufficient_evidence',\n )\n return event\n ? {\n failureClass: 'insufficient_evidence',\n reason: 'task proceeded with insufficient supporting evidence',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'contradictory-evidence',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'knowledge_gap' &&\n e.payload.reason === 'contradictory_evidence',\n )\n return event\n ? {\n failureClass: 'contradictory_evidence',\n reason: 'supporting evidence contradicted itself',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n // Budget breach events\n {\n id: 'budget-breach',\n match: ({ events }) => {\n const breach = events.find((e) => e.kind === 'budget_breach')\n return breach\n ? {\n failureClass: 'budget_exceeded',\n reason: `budget breached on ${breach.payload.dimension ?? 'unknown dimension'}`,\n triggerEventId: breach.eventId,\n }\n : null\n },\n },\n // Policy violations\n {\n id: 'policy-violation',\n match: ({ events }) => {\n const e = events.find((x) => x.kind === 'policy_violation')\n return e\n ? {\n failureClass: 'policy_violation',\n reason: 'policy_violation event emitted',\n triggerEventId: e.eventId,\n }\n : null\n },\n },\n // Sandbox non-zero exit code\n {\n id: 'sandbox-failure',\n match: ({ spans }) => {\n const s = spans.find(\n (x) => x.kind === 'sandbox' && typeof x.exitCode === 'number' && x.exitCode !== 0,\n )\n if (!s) return null\n return {\n failureClass: 'sandbox_failure',\n reason: `sandbox exited ${(s as Extract<Span, { kind: 'sandbox' }>).exitCode}`,\n triggerSpanId: s.spanId,\n }\n },\n },\n // Timeout: run aborted by external signal\n {\n id: 'timeout',\n match: ({ run, events }) => {\n if (run.status !== 'aborted') return null\n const hasTimeout = events.some(\n (e) =>\n e.kind === 'error' &&\n String(e.payload.reason ?? '')\n .toLowerCase()\n .includes('timeout'),\n )\n const note = (run.outcome?.notes ?? '').toLowerCase()\n if (hasTimeout || note.includes('timeout') || note.includes('deadline')) {\n return { failureClass: 'timeout', reason: 'timeout signal observed' }\n }\n return null\n },\n },\n // Tool recovery failure: many consecutive tool errors on the same tool\n {\n id: 'tool-recovery-failure',\n match: ({ spans }) => {\n const tools = spans.filter((s) => s.kind === 'tool')\n const byTool = new Map<string, Span[]>()\n for (const t of tools) {\n const name = (t as Extract<Span, { kind: 'tool' }>).toolName\n const arr = byTool.get(name) ?? []\n arr.push(t)\n byTool.set(name, arr)\n }\n for (const [name, arr] of byTool) {\n const errs = arr.filter((s) => s.status === 'error')\n if (errs.length >= 3 && errs.length === arr.length) {\n return {\n failureClass: 'tool_recovery_failure',\n reason: `${errs.length} consecutive errors on tool \"${name}\"`,\n triggerSpanId: errs[errs.length - 1]!.spanId,\n }\n }\n }\n return null\n },\n },\n // Tool selection error: the run failed and agent called zero tools despite having them\n {\n id: 'tool-selection-error',\n match: ({ run, spans }) => {\n if (run.outcome?.pass !== false) return null\n const hasToolsAvailable = spans.some(\n (s) =>\n s.kind === 'agent' &&\n (s.attributes?.toolsAvailable as number | undefined) !== undefined &&\n (s.attributes?.toolsAvailable as number) > 0,\n )\n const tools = spans.filter((s) => s.kind === 'tool')\n if (hasToolsAvailable && tools.length === 0) {\n return {\n failureClass: 'tool_selection_error',\n reason: 'tools were available but none were called',\n }\n }\n return null\n },\n },\n // Format drift: scored by a judge with dimension='format' below threshold\n {\n id: 'format-drift',\n match: ({ spans }) => {\n const judge = spans.find(\n (s) =>\n s.kind === 'judge' &&\n (s as Extract<Span, { kind: 'judge' }>).dimension === 'format' &&\n (s as Extract<Span, { kind: 'judge' }>).score < 0.5,\n )\n return judge\n ? {\n failureClass: 'format_drift',\n reason: 'format judge scored below 0.5',\n triggerSpanId: judge.spanId,\n }\n : null\n },\n },\n]\n\nfunction hasResolutionStatus(payload: Record<string, unknown>, status: string): boolean {\n if (status === 'missing_connection' && stringArray(payload.missingConnections).length > 0)\n return true\n return resolutionItems(payload).some((item) => item.status === status)\n}\n\nfunction hasMissingScopes(payload: Record<string, unknown>): boolean {\n if (stringArray(payload.missingScopes).length > 0) return true\n return resolutionItems(payload).some(\n (item) => Array.isArray(item.missingScopes) && item.missingScopes.length > 0,\n )\n}\n\nfunction resolutionItems(payload: Record<string, unknown>): Array<Record<string, unknown>> {\n return [\n ...records(payload.missing),\n ...records(payload.optionalMissing),\n ...records(payload.ready),\n ]\n}\n\nfunction records(value: unknown): Array<Record<string, unknown>> {\n if (!Array.isArray(value)) return []\n return value.filter(\n (item): item is Record<string, unknown> =>\n Boolean(item) && typeof item === 'object' && !Array.isArray(item),\n )\n}\n\nfunction stringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : []\n}\n\n/**\n * Classify the failure mode of a run using an ordered rule list.\n *\n * Structural rules run first, in their declared order. When none matches, the\n * reason strings the run did record are classified with\n * `classifyFailureReason`, so a run whose only evidence is a transport error\n * on an error event is named instead of landing in `unknown`. Only a run that\n * would already have returned `unknown` can change class this way.\n */\nexport function classifyFailure(\n ctx: FailureContext,\n rules: FailureRule[] = DEFAULT_RULES,\n reasonRules: readonly FailureReasonRule[] = DEFAULT_FAILURE_REASON_RULES,\n): FailureClassification {\n if (ctx.run.outcome?.pass !== false && ctx.run.status === 'completed') {\n return {\n failureClass: 'success',\n blame: FAILURE_BLAME.success,\n reason: 'run completed with pass=true (or no explicit fail)',\n }\n }\n for (const rule of rules) {\n const hit = rule.match(ctx)\n if (hit) return { ...hit, blame: hit.blame ?? FAILURE_BLAME[hit.failureClass] }\n }\n for (const candidate of recordedReasons(ctx)) {\n const classified = classifyFailureReason(candidate.text, reasonRules)\n if (classified.failureClass === 'unknown' || classified.failureClass === 'unreported') continue\n return {\n ...classified,\n ...(candidate.eventId === undefined ? {} : { triggerEventId: candidate.eventId }),\n }\n }\n return {\n failureClass: 'unknown',\n blame: FAILURE_BLAME.unknown,\n reason: 'no rule matched; run failed for unclassified reason',\n }\n}\n\n/**\n * The reason strings a failed run recorded, error events first because they\n * sit closest to the failure, then the outcome notes.\n */\nfunction recordedReasons(ctx: FailureContext): Array<{ text: string; eventId?: string }> {\n const found: Array<{ text: string; eventId?: string }> = []\n for (const event of ctx.events) {\n if (event.kind !== 'error') continue\n for (const field of ['reason', 'message', 'error'] as const) {\n const value = event.payload[field]\n if (typeof value === 'string' && value.trim()) {\n found.push({ text: value, eventId: event.eventId })\n }\n }\n }\n const notes = ctx.run.outcome?.notes\n if (typeof notes === 'string' && notes.trim()) found.push({ text: notes })\n return found\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"failure-taxonomy-Bx5oWqaW.js","names":[],"sources":["../src/failure-taxonomy.ts"],"sourcesContent":["/**\n * Failure taxonomy — canonical classes, who each one is charged to, and two\n * default classifiers.\n *\n * Every failed run should end up in a named class. The classifiers here are\n * rule-based (fast, deterministic); an LLM fallback can be added by the\n * consumer for novel cases and trained into the rule base over time.\n *\n * Two entry points, because a dead run does not always leave a trace:\n * - `classifyFailure(ctx)` reads a run with its spans and events, and\n * persists as `Run.outcome.failureClass`;\n * - `classifyFailureReason(text)` reads the one thing a run that died before\n * any span always leaves — a reason string on its terminal record.\n * `classifyFailure` calls the reason classifier itself when no structural rule\n * matches, so a run whose only evidence is `ECONNREFUSED` no longer lands in\n * `unknown`.\n *\n * Every classification carries a `blame`. Without it a comparison charges\n * infrastructure outages to the agent under test: a run that never reached a\n * model is not evidence about the agent and must be voided, not counted as a\n * loss.\n */\n\nimport type { FailureClass, Run, Span, TraceEvent } from './trace/schema'\nimport { FAILURE_CLASSES } from './trace/schema'\n\nexport { FAILURE_CLASSES, type FailureClass }\n\n/**\n * Who a failure is charged to. This is the axis a comparison reads before it\n * counts a loss.\n *\n * `machine` — the run never reached a model. The bridge refused, its lane was\n * full, the box never provisioned, the credential was absent. An\n * agent cannot route around this, so a run that recorded nothing\n * behind only machine failures is not evidence about the agent.\n * `provider` — the model was reached and the turn did not complete: an empty\n * completion, a torn stream, a killed process. Every arm faces\n * the same provider on the same day, so this stays charged.\n * `agent` — the agent's own reasoning, tool use, budgeting, or scheduling\n * produced the failure. Charged.\n * `unknown` — the record does not say. Never voids a run: an unread reason is\n * not a proven outage.\n * `none` — no failure to charge.\n */\nexport type FailureBlame = 'none' | 'machine' | 'provider' | 'agent' | 'unknown'\n\n/**\n * Blame for every canonical class. The `Record` is exhaustive on purpose: a\n * class added to `FAILURE_CLASSES` without a blame here fails to compile, so\n * the axis cannot silently acquire a hole that reads as `undefined` — and a\n * missing blame would void or charge a run by accident.\n *\n * The assignment rule, applied member by member: a class is `machine` only\n * when the run demonstrably never reached a model. An environment that refuses\n * one specific action the agent chose (a denied write, an out-of-scope call,\n * an approval hold) stays `agent`, because the agent selected the action and\n * every arm faces the same policy.\n */\nexport const FAILURE_BLAME: Readonly<Record<FailureClass, FailureBlame>> = {\n success: 'none',\n\n // Behaviour: the agent ran and its own work is what failed.\n reasoning_error: 'agent',\n tool_selection_error: 'agent',\n tool_argument_error: 'agent',\n tool_recovery_failure: 'agent',\n hallucination: 'agent',\n instruction_following: 'agent',\n safety_refusal_miss: 'agent',\n policy_violation: 'agent',\n budget_exceeded: 'agent',\n format_drift: 'agent',\n permission_escalation: 'agent',\n pii_leak: 'agent',\n cost_overrun: 'agent',\n timeout: 'agent',\n // A command the agent ran exited non-zero inside a live box. The box worked.\n sandbox_failure: 'agent',\n\n // Knowledge and evidence: a model answered, and how the agent handled the\n // gap is exactly what is under test. Every arm faces the same gap.\n missing_user_data: 'agent',\n missing_domain_data: 'agent',\n missing_codebase_context: 'agent',\n missing_runtime_context: 'agent',\n stale_external_data: 'agent',\n bad_retrieval: 'agent',\n insufficient_evidence: 'agent',\n contradictory_evidence: 'agent',\n ambiguous_user_intent: 'agent',\n\n // Environment provisioning: the run could not reach the model or was stopped\n // before execution, through no act of the agent.\n missing_credentials: 'machine',\n missing_integration_connection: 'machine',\n integration_auth_expired: 'machine',\n bad_integration_manifest: 'machine',\n knowledge_readiness_blocked: 'machine',\n\n // Environment refusing one action the agent chose.\n missing_integration_scope: 'agent',\n integration_approval_required: 'agent',\n unsafe_integration_write_denied: 'agent',\n\n // A third-party invocation the agent reached and that did not complete.\n integration_provider_failure: 'provider',\n\n // Transport: never reached a model.\n bridge_unreachable: 'machine',\n bridge_lane_saturated: 'machine',\n router_usage_mismatch: 'machine',\n session_profile_conflict: 'machine',\n runtime_restart: 'machine',\n root_driver_failed: 'machine',\n box_provision_failure: 'machine',\n box_teardown_failure: 'machine',\n\n // The agent wrote the broken instrument, so the run is charged: the machine\n // answered, and a run dying on its own profile is not an outage.\n profile_refused: 'agent',\n\n // Transport: reached the model, the turn did not complete.\n empty_completion: 'provider',\n stream_protocol_error: 'provider',\n stream_incomplete: 'provider',\n message_sealed: 'provider',\n process_killed: 'provider',\n terminated: 'provider',\n\n // An operator stopping a run is not the machine, the provider or the agent.\n // Charging it to any of the three would make a deliberate stop read as a\n // failure of the thing that was stopped, and counting it as infrastructure\n // would turn a cancelled batch into an outage streak.\n cancelled: 'unknown',\n\n traversal_cap_exhausted: 'agent',\n\n unreported: 'unknown',\n unknown: 'unknown',\n}\n\n/**\n * The blames that mean the run got no usable turn out of the machine or the\n * provider.\n *\n * This answers a different question from `machine` alone, and the two must not\n * be confused. \"Is this run evidence about the agent?\" is answered by `machine`\n * and by nothing else — a `provider` death stays charged, because every arm\n * faces the same provider on the same day. \"Is this seat producing usable turns\n * at all?\" is answered by this set, because a seat that only ever returns empty\n * completions and torn streams is as dead as one whose bridge refuses, however\n * the individual runs are charged.\n *\n * So a reader counting an outage streak counts these; a reader deciding whether\n * to void a run reads `machine`. Nothing an operator did lands here: `cancelled`\n * is blamed `unknown` for exactly that reason.\n */\nexport const INFRA_FAILURE_BLAMES: ReadonlySet<FailureBlame> = new Set<FailureBlame>([\n 'machine',\n 'provider',\n])\n\n/** Who the named class is charged to. */\nexport function failureBlame(failureClass: FailureClass): FailureBlame {\n return FAILURE_BLAME[failureClass]\n}\n\nexport interface FailureContext {\n run: Run\n spans: Span[]\n events: TraceEvent[]\n}\n\nexport interface FailureClassification {\n failureClass: FailureClass\n /** Who the failure is charged to. Derived from the class unless a rule overrode it. */\n blame: FailureBlame\n reason: string\n triggerSpanId?: string\n triggerEventId?: string\n}\n\n/** Ordered rules — first match wins. */\nexport interface FailureRule {\n id: string\n match: (ctx: FailureContext) => {\n failureClass: FailureClass\n reason: string\n /** Overrides the class's canonical blame. State why at the call site. */\n blame?: FailureBlame\n triggerSpanId?: string\n triggerEventId?: string\n } | null\n}\n\n/**\n * One ordered rule over a failure reason string.\n *\n * Order is load-bearing, because one reason string carries two signals: a seat\n * killed by SIGKILL while the bridge refuses connections is a bridge failure,\n * not a process failure, so the bridge patterns are tested first.\n */\nexport interface FailureReasonRule {\n /** The class the first matching pattern names. */\n failureClass: FailureClass\n pattern: RegExp\n /** Overrides the class's canonical blame. State why at the call site. */\n blame?: FailureBlame\n}\n\n/**\n * The default ordered reason rules, measured against the transport death\n * strings this stack records — runtime settle reasons, bridge errors, sandbox\n * provisioning errors, and provider stream errors.\n *\n * A consumer with a different transport passes its own set to\n * `classifyFailureReason`; nothing here is a gate.\n */\nexport const DEFAULT_FAILURE_REASON_RULES: readonly FailureReasonRule[] = [\n {\n failureClass: 'bridge_unreachable',\n pattern: /ECONNREFUSED|disconnected before terminal acknowledgement|bridge .* unreachable/i,\n },\n {\n failureClass: 'bridge_lane_saturated',\n pattern: /acquire timeout after \\d+ms|in_flight=\\d+\\/\\d+/i,\n },\n { failureClass: 'router_usage_mismatch', pattern: /did not match its recorded usage/i },\n {\n failureClass: 'session_profile_conflict',\n pattern:\n /bound to a different AgentProfile|profile materialization changed across session turns/i,\n },\n { failureClass: 'runtime_restart', pattern: /agent runtime restarted/i },\n { failureClass: 'root_driver_failed', pattern: /root driver failed/i },\n {\n failureClass: 'box_provision_failure',\n pattern:\n /Sandbox create did not complete within|failed to (create|provision) (a )?box|box .*: (create|provision) failed/i,\n },\n { failureClass: 'box_teardown_failure', pattern: /teardown reported destroyed=false/i },\n {\n failureClass: 'profile_refused',\n pattern:\n /workspace materialization failed|cannot replace its harness's system prompt|has no explicit entry in .*models\\.json|conflicts with agent_profile\\.model/i,\n },\n { failureClass: 'empty_completion', pattern: /without emitting any visible output/i },\n { failureClass: 'stream_protocol_error', pattern: /JSON error injected into SSE stream/i },\n {\n failureClass: 'stream_incomplete',\n pattern: /Prompt stream ended before a terminal event/i,\n },\n { failureClass: 'message_sealed', pattern: /already rolled up \\(sealed\\)/i },\n { failureClass: 'process_killed', pattern: /killed by SIGKILL|exited with code null/i },\n { failureClass: 'cancelled', pattern: /cancelled by user/i },\n { failureClass: 'terminated', pattern: /(^|: )terminated\\b/i },\n { failureClass: 'budget_exceeded', pattern: /budget pool: ticket \\d+ spent/i },\n // Deliberately last and deliberately broad: by the time a reason reaches this\n // rule every transport pattern above has declined it, so what remains is the\n // agent's own clock. That boundary is the rule set's, not a fact about the\n // word: a transport whose deadline wording is not matched above would be\n // charged to the agent here, which is the mis-charge this taxonomy exists to\n // stop. A consumer whose machine has its own deadline wording adds a rule for\n // it AHEAD of this one rather than widening this one — inventing patterns for\n // strings nobody has recorded is how a rule set stops describing anything.\n { failureClass: 'timeout', pattern: /deadline|timed out|timeout/i },\n { failureClass: 'traversal_cap_exhausted', pattern: /traversal|iteration cap|exhausted/i },\n]\n\n/**\n * Name the failure one reason string describes.\n *\n * This is the entry point for a run that died before it produced a span: a\n * terminal record, a settle row, a spawn journal line. An unmatched reason is\n * never dropped — it returns `unknown` and keeps the text, so a new failure\n * mode shows up as a named gap instead of a silent bucket. An absent reason\n * returns `unreported`, which is a different fact: the record itself is\n * incomplete.\n */\nexport function classifyFailureReason(\n reason: string | null | undefined,\n rules: readonly FailureReasonRule[] = DEFAULT_FAILURE_REASON_RULES,\n): FailureClassification {\n const text = String(reason ?? '').trim()\n if (text === '') {\n return { failureClass: 'unreported', blame: FAILURE_BLAME.unreported, reason: '' }\n }\n for (const rule of rules) {\n if (rule.pattern.test(text)) {\n return {\n failureClass: rule.failureClass,\n blame: rule.blame ?? FAILURE_BLAME[rule.failureClass],\n reason: text,\n }\n }\n }\n return { failureClass: 'unknown', blame: FAILURE_BLAME.unknown, reason: text }\n}\n\nexport const DEFAULT_RULES: FailureRule[] = [\n // Outcome already named? Respect it.\n {\n id: 'explicit-outcome',\n match: ({ run }) => {\n const fc = run.outcome?.failureClass\n if (fc && fc !== 'unknown')\n return { failureClass: fc, reason: 'outcome.failureClass set explicitly' }\n return null\n },\n },\n {\n id: 'knowledge-readiness-blocked',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'readiness_scored' &&\n e.payload.passed === false,\n )\n return event\n ? {\n failureClass: 'knowledge_readiness_blocked',\n reason: 'knowledge readiness report blocked execution',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'bad-integration-manifest',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n ((e.payload.kind === 'integration_manifest_validated' && e.payload.valid === false) ||\n (e.payload.kind === 'integration_invoke_failed' &&\n e.payload.code === 'manifest_invalid')),\n )\n return event\n ? {\n failureClass: 'bad_integration_manifest',\n reason: 'integration manifest validation failed before launch',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'missing-integration-connection',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'integration_manifest_resolved' &&\n hasResolutionStatus(e.payload, 'missing_connection'),\n )\n return event\n ? {\n failureClass: 'missing_integration_connection',\n reason: 'required integration connection was missing',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'missing-integration-scope',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n ((e.payload.kind === 'integration_manifest_resolved' && hasMissingScopes(e.payload)) ||\n (e.payload.kind === 'integration_invoke_failed' && e.payload.code === 'scope_denied')),\n )\n return event\n ? {\n failureClass: 'missing_integration_scope',\n reason: 'integration grant or connection lacks required scopes',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'integration-approval-required',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n ((e.payload.kind === 'integration_invoke' && e.payload.status === 'approval_required') ||\n (e.payload.kind === 'integration_invoke_failed' &&\n e.payload.code === 'approval_required') ||\n e.payload.kind === 'integration_approval_required'),\n )\n return event\n ? {\n failureClass: 'integration_approval_required',\n reason: 'integration write paused for user approval',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'integration-auth-expired',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'integration_invoke_failed' &&\n (e.payload.code === 'auth_expired' ||\n e.payload.code === 'connection_not_active' ||\n e.payload.code === 'capability_expired' ||\n e.payload.status === 'expired'),\n )\n return event\n ? {\n failureClass: 'integration_auth_expired',\n reason: 'integration connection or capability expired',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'unsafe-integration-write-denied',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'integration_invoke_failed' &&\n (e.payload.code === 'unsafe_write_denied' ||\n e.payload.code === 'policy_denied' ||\n e.payload.code === 'action_denied'),\n )\n return event\n ? {\n failureClass: 'unsafe_integration_write_denied',\n reason: 'integration write was denied by policy or capability scope',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'integration-provider-failure',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'integration_invoke_failed' &&\n ![\n 'scope_denied',\n 'approval_required',\n 'auth_expired',\n 'connection_not_active',\n 'capability_expired',\n 'unsafe_write_denied',\n 'policy_denied',\n 'action_denied',\n 'manifest_invalid',\n ].includes(String(e.payload.code)),\n )\n return event\n ? {\n failureClass: 'integration_provider_failure',\n reason: 'integration provider invocation failed',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'missing-credentials',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'knowledge_gap' &&\n e.payload.category === 'credential_or_secret',\n )\n return event\n ? {\n failureClass: 'missing_credentials',\n reason: 'required credential or secret was missing',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'bad-retrieval',\n match: ({ run, spans }) => {\n if (run.outcome?.pass !== false) return null\n const retrieval = spans.find(\n (s) =>\n s.kind === 'retrieval' && (s.hits.length === 0 || s.hits.every((hit) => hit.score <= 0)),\n )\n return retrieval\n ? {\n failureClass: 'bad_retrieval',\n reason: 'retrieval returned no useful hits for a failed run',\n triggerSpanId: retrieval.spanId,\n }\n : null\n },\n },\n {\n id: 'insufficient-evidence',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'knowledge_gap' &&\n e.payload.reason === 'insufficient_evidence',\n )\n return event\n ? {\n failureClass: 'insufficient_evidence',\n reason: 'task proceeded with insufficient supporting evidence',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n {\n id: 'contradictory-evidence',\n match: ({ events }) => {\n const event = events.find(\n (e) =>\n e.kind === 'custom' &&\n e.payload.kind === 'knowledge_gap' &&\n e.payload.reason === 'contradictory_evidence',\n )\n return event\n ? {\n failureClass: 'contradictory_evidence',\n reason: 'supporting evidence contradicted itself',\n triggerEventId: event.eventId,\n }\n : null\n },\n },\n // Budget breach events\n {\n id: 'budget-breach',\n match: ({ events }) => {\n const breach = events.find((e) => e.kind === 'budget_breach')\n return breach\n ? {\n failureClass: 'budget_exceeded',\n reason: `budget breached on ${breach.payload.dimension ?? 'unknown dimension'}`,\n triggerEventId: breach.eventId,\n }\n : null\n },\n },\n // Policy violations\n {\n id: 'policy-violation',\n match: ({ events }) => {\n const e = events.find((x) => x.kind === 'policy_violation')\n return e\n ? {\n failureClass: 'policy_violation',\n reason: 'policy_violation event emitted',\n triggerEventId: e.eventId,\n }\n : null\n },\n },\n // Sandbox non-zero exit code\n {\n id: 'sandbox-failure',\n match: ({ spans }) => {\n const s = spans.find(\n (x) => x.kind === 'sandbox' && typeof x.exitCode === 'number' && x.exitCode !== 0,\n )\n if (!s) return null\n return {\n failureClass: 'sandbox_failure',\n reason: `sandbox exited ${(s as Extract<Span, { kind: 'sandbox' }>).exitCode}`,\n triggerSpanId: s.spanId,\n }\n },\n },\n // Timeout: run aborted by external signal\n {\n id: 'timeout',\n match: ({ run, events }) => {\n if (run.status !== 'aborted') return null\n const hasTimeout = events.some(\n (e) =>\n e.kind === 'error' &&\n String(e.payload.reason ?? '')\n .toLowerCase()\n .includes('timeout'),\n )\n const note = (run.outcome?.notes ?? '').toLowerCase()\n if (hasTimeout || note.includes('timeout') || note.includes('deadline')) {\n return { failureClass: 'timeout', reason: 'timeout signal observed' }\n }\n return null\n },\n },\n // Tool recovery failure: many consecutive tool errors on the same tool\n {\n id: 'tool-recovery-failure',\n match: ({ spans }) => {\n const tools = spans.filter((s) => s.kind === 'tool')\n const byTool = new Map<string, Span[]>()\n for (const t of tools) {\n const name = (t as Extract<Span, { kind: 'tool' }>).toolName\n const arr = byTool.get(name) ?? []\n arr.push(t)\n byTool.set(name, arr)\n }\n for (const [name, arr] of byTool) {\n const errs = arr.filter((s) => s.status === 'error')\n if (errs.length >= 3 && errs.length === arr.length) {\n return {\n failureClass: 'tool_recovery_failure',\n reason: `${errs.length} consecutive errors on tool \"${name}\"`,\n triggerSpanId: errs[errs.length - 1]!.spanId,\n }\n }\n }\n return null\n },\n },\n // Tool selection error: the run failed and agent called zero tools despite having them\n {\n id: 'tool-selection-error',\n match: ({ run, spans }) => {\n if (run.outcome?.pass !== false) return null\n const hasToolsAvailable = spans.some(\n (s) =>\n s.kind === 'agent' &&\n (s.attributes?.toolsAvailable as number | undefined) !== undefined &&\n (s.attributes?.toolsAvailable as number) > 0,\n )\n const tools = spans.filter((s) => s.kind === 'tool')\n if (hasToolsAvailable && tools.length === 0) {\n return {\n failureClass: 'tool_selection_error',\n reason: 'tools were available but none were called',\n }\n }\n return null\n },\n },\n // Format drift: scored by a judge with dimension='format' below threshold\n {\n id: 'format-drift',\n match: ({ spans }) => {\n const judge = spans.find(\n (s) =>\n s.kind === 'judge' &&\n (s as Extract<Span, { kind: 'judge' }>).dimension === 'format' &&\n (s as Extract<Span, { kind: 'judge' }>).score < 0.5,\n )\n return judge\n ? {\n failureClass: 'format_drift',\n reason: 'format judge scored below 0.5',\n triggerSpanId: judge.spanId,\n }\n : null\n },\n },\n]\n\nfunction hasResolutionStatus(payload: Record<string, unknown>, status: string): boolean {\n if (status === 'missing_connection' && stringArray(payload.missingConnections).length > 0)\n return true\n return resolutionItems(payload).some((item) => item.status === status)\n}\n\nfunction hasMissingScopes(payload: Record<string, unknown>): boolean {\n if (stringArray(payload.missingScopes).length > 0) return true\n return resolutionItems(payload).some(\n (item) => Array.isArray(item.missingScopes) && item.missingScopes.length > 0,\n )\n}\n\nfunction resolutionItems(payload: Record<string, unknown>): Array<Record<string, unknown>> {\n return [\n ...records(payload.missing),\n ...records(payload.optionalMissing),\n ...records(payload.ready),\n ]\n}\n\nfunction records(value: unknown): Array<Record<string, unknown>> {\n if (!Array.isArray(value)) return []\n return value.filter(\n (item): item is Record<string, unknown> =>\n Boolean(item) && typeof item === 'object' && !Array.isArray(item),\n )\n}\n\nfunction stringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : []\n}\n\n/**\n * Classify the failure mode of a run using an ordered rule list.\n *\n * Structural rules run first, in their declared order. When none matches, the\n * reason strings the run did record are classified with\n * `classifyFailureReason`, so a run whose only evidence is a transport error\n * on an error event is named instead of landing in `unknown`. Only a run that\n * would already have returned `unknown` can change class this way.\n */\nexport function classifyFailure(\n ctx: FailureContext,\n rules: FailureRule[] = DEFAULT_RULES,\n reasonRules: readonly FailureReasonRule[] = DEFAULT_FAILURE_REASON_RULES,\n): FailureClassification {\n if (ctx.run.outcome?.pass !== false && ctx.run.status === 'completed') {\n return {\n failureClass: 'success',\n blame: FAILURE_BLAME.success,\n reason: 'run completed with pass=true (or no explicit fail)',\n }\n }\n for (const rule of rules) {\n const hit = rule.match(ctx)\n if (hit) return { ...hit, blame: hit.blame ?? FAILURE_BLAME[hit.failureClass] }\n }\n for (const candidate of recordedReasons(ctx)) {\n const classified = classifyFailureReason(candidate.text, reasonRules)\n if (classified.failureClass === 'unknown' || classified.failureClass === 'unreported') continue\n return {\n ...classified,\n ...(candidate.eventId === undefined ? {} : { triggerEventId: candidate.eventId }),\n }\n }\n return {\n failureClass: 'unknown',\n blame: FAILURE_BLAME.unknown,\n reason: 'no rule matched; run failed for unclassified reason',\n }\n}\n\n/**\n * The reason strings a failed run recorded, error events first because they\n * sit closest to the failure, then the outcome notes.\n */\nfunction recordedReasons(ctx: FailureContext): Array<{ text: string; eventId?: string }> {\n const found: Array<{ text: string; eventId?: string }> = []\n for (const event of ctx.events) {\n if (event.kind !== 'error') continue\n for (const field of ['reason', 'message', 'error'] as const) {\n const value = event.payload[field]\n if (typeof value === 'string' && value.trim()) {\n found.push({ text: value, eventId: event.eventId })\n }\n }\n }\n const notes = ctx.run.outcome?.notes\n if (typeof notes === 'string' && notes.trim()) found.push({ text: notes })\n return found\n}\n"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { o as FailureClass } from "./schema-
|
|
2
|
-
import {
|
|
3
|
-
import { s as TraceStore } from "./store-
|
|
1
|
+
import { o as FailureClass } from "./schema-D6EVKzTB.js";
|
|
2
|
+
import { i as AnalystFinding, m as EvidenceRef, u as AnalystRunResult } from "./types-CW8ewATZ.js";
|
|
3
|
+
import { s as TraceStore } from "./store-B3nWRy3B.js";
|
|
4
4
|
import { i as DatasetSplit, r as DatasetScenario } from "./dataset-DQqhOCPt.js";
|
|
5
|
-
import "./exact-types-
|
|
6
|
-
import { o as TraceEmitter } from "./emitter-
|
|
7
|
-
//#region src/control-runtime.d.ts
|
|
5
|
+
import "./exact-types-CflbJ9f3.js";
|
|
6
|
+
import { o as TraceEmitter } from "./emitter-DABYYTcH.js";
|
|
7
|
+
//#region src/control-runtime/contract.d.ts
|
|
8
8
|
type ControlSeverity = 'info' | 'warning' | 'error' | 'critical';
|
|
9
9
|
type ControlActionFailureMode = 'continue' | 'stop';
|
|
10
10
|
interface ControlEvalResult {
|
|
@@ -165,9 +165,6 @@ interface ControlRuntimeConfig<TState, TAction, TActionResult, TEval extends Con
|
|
|
165
165
|
projectId?: string;
|
|
166
166
|
variantId?: string;
|
|
167
167
|
}
|
|
168
|
-
declare function runAgentControlLoop<TState, TAction, TActionResult, TEval extends ControlEvalResult = ControlEvalResult>(config: ControlRuntimeConfig<TState, TAction, TActionResult, TEval>): Promise<ControlRunResult<TState, TAction, TActionResult, TEval>>;
|
|
169
|
-
declare function objectiveEval(input: Omit<ControlEvalResult, 'objective'>): ControlEvalResult;
|
|
170
|
-
declare function subjectiveEval(input: Omit<ControlEvalResult, 'objective'>): ControlEvalResult;
|
|
171
168
|
//#endregion
|
|
172
169
|
//#region src/feedback-trajectory-review.d.ts
|
|
173
170
|
type AnalystReviewSource = Exclude<FeedbackLabelSource, 'system'>;
|
|
@@ -197,8 +194,6 @@ type AnalystReviewDecision = (AnalystReviewDecisionBase & {
|
|
|
197
194
|
findingId?: never;
|
|
198
195
|
findingDigest?: never;
|
|
199
196
|
});
|
|
200
|
-
/** Bind an analyst finding's complete canonical JSON content to a stable digest. */
|
|
201
|
-
declare function analystFindingDigest(finding: AnalystFinding): AnalystFindingDigest;
|
|
202
197
|
/** Bind the complete analyst result to one immutable review target. */
|
|
203
198
|
declare function analystRunDigest(run: AnalystRunResult): AnalystRunDigest;
|
|
204
199
|
//#endregion
|
|
@@ -393,5 +388,5 @@ declare function controlRunToFeedbackTrajectory<TState, TAction, TActionResult>(
|
|
|
393
388
|
createdAt?: string;
|
|
394
389
|
}): FeedbackTrajectory;
|
|
395
390
|
//#endregion
|
|
396
|
-
export { AnalystFindingDigest as A,
|
|
397
|
-
//# sourceMappingURL=feedback-trajectory-
|
|
391
|
+
export { AnalystFindingDigest as A, ControlRuntimeConfig as B, createFeedbackTrajectory as C, renderPreferenceMemoryMarkdown as D, feedbackTrajectoryToOptimizerRow as E, ControlBudget as F, ControlSeverity as H, ControlContext as I, ControlDecision as L, AnalystRunDigest as M, analystRunDigest as N, summarizePreferenceMemory as O, ControlActionOutcome as P, ControlEvalResult as R, controlRunToFeedbackTrajectory as S, feedbackTrajectoriesToOptimizerRows as T, ControlStep as U, ControlRuntimeError as V, StopDecision as W, PreferenceMemoryEntry as _, FeedbackLabel as a, analystRunToReviewRequests as b, FeedbackOptimizerRow as c, FeedbackTask as d, FeedbackTrajectory as f, InMemoryFeedbackTrajectoryStore as g, FileSystemFeedbackTrajectoryStore as h, FeedbackAttempt as i, AnalystReviewDecision as j, withAssignedFeedbackSplit as k, FeedbackOutcome as l, FeedbackTrajectoryStore as m, AnalystReviewRequest as n, FeedbackLabelKind as o, FeedbackTrajectoryFilter as p, FeedbackArtifactType as r, FeedbackLabelSource as s, AnalystFeedbackTrajectoryOptions as t, FeedbackSplitPolicy as u, ProposedSideEffect as v, feedbackTrajectoriesToDatasetScenarios as w, assignFeedbackSplit as x, analystRunToFeedbackTrajectory as y, ControlRunResult as z };
|
|
392
|
+
//# sourceMappingURL=feedback-trajectory-BWmhRBGu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-trajectory-BWmhRBGu.d.ts","names":[],"sources":["../src/control-runtime/contract.ts","../src/feedback-trajectory-review.ts","../src/feedback-trajectory.ts"],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
1
|
+
import { c as errorMessage } from "./errors-BcOs5MKW.js";
|
|
2
|
+
import { i as Mutex } from "./journal-CR4QikYp.js";
|
|
3
|
+
import { t as extractJsonPayload } from "./json-BhdsJaOQ.js";
|
|
4
|
+
import { A as RawAnalystFindingSchema } from "./kind-factory-Gy4fXixd.js";
|
|
5
|
+
import "./llm-client-BshCREn6.js";
|
|
6
|
+
import { t as paidChat } from "./chat-json-call-DavzexSp.js";
|
|
7
|
+
import { n as decodeRawFindingArray } from "./dspy-rlm-engine-DhdCr1Dc.js";
|
|
7
8
|
import { appendFileSync, existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
8
9
|
import { z } from "zod";
|
|
9
10
|
import { dirname } from "node:path";
|
|
@@ -301,7 +302,7 @@ async function executeTool(call, toolsByName, request) {
|
|
|
301
302
|
return {
|
|
302
303
|
ok: false,
|
|
303
304
|
truncated: false,
|
|
304
|
-
payload: toolError(`arguments for '${call.name}' were not JSON: ${
|
|
305
|
+
payload: toolError(`arguments for '${call.name}' were not JSON: ${errorMessage(error)}. Send valid JSON arguments.`)
|
|
305
306
|
};
|
|
306
307
|
}
|
|
307
308
|
try {
|
|
@@ -313,12 +314,12 @@ async function executeTool(call, toolsByName, request) {
|
|
|
313
314
|
engine: ENGINE_ID,
|
|
314
315
|
analyst_id: request.analystId,
|
|
315
316
|
tool: call.name,
|
|
316
|
-
reason:
|
|
317
|
+
reason: errorMessage(error)
|
|
317
318
|
});
|
|
318
319
|
return {
|
|
319
320
|
ok: false,
|
|
320
321
|
truncated: false,
|
|
321
|
-
payload: toolError(
|
|
322
|
+
payload: toolError(errorMessage(error))
|
|
322
323
|
};
|
|
323
324
|
}
|
|
324
325
|
}
|
|
@@ -387,7 +388,7 @@ function coerceReportEnvelope(content, analystId) {
|
|
|
387
388
|
try {
|
|
388
389
|
value = JSON.parse(extractJsonPayload(content));
|
|
389
390
|
} catch (error) {
|
|
390
|
-
throw new Error(`chat trace engine report for '${analystId}' was not JSON: ${
|
|
391
|
+
throw new Error(`chat trace engine report for '${analystId}' was not JSON: ${errorMessage(error)}`);
|
|
391
392
|
}
|
|
392
393
|
if (typeof value !== "object" || value === null || Array.isArray(value)) throw new Error(`chat trace engine report for '${analystId}' was not a JSON object`);
|
|
393
394
|
return value;
|
|
@@ -397,9 +398,6 @@ function resolveModel(options) {
|
|
|
397
398
|
if (typeof model !== "string" || !model.trim() || model !== model.trim()) throw new TypeError("chat trace engine needs a model: pass ChatTraceEngineOptions.model or bind defaultModel on the ChatClient");
|
|
398
399
|
return model;
|
|
399
400
|
}
|
|
400
|
-
function messageOf(error) {
|
|
401
|
-
return error instanceof Error ? error.message : String(error);
|
|
402
|
-
}
|
|
403
401
|
//#endregion
|
|
404
402
|
//#region src/locked-jsonl-appender.ts
|
|
405
403
|
/**
|
|
@@ -535,246 +533,6 @@ function diffFindings(previous, current, policy = {}) {
|
|
|
535
533
|
};
|
|
536
534
|
}
|
|
537
535
|
//#endregion
|
|
538
|
-
|
|
539
|
-
const DEFAULT_COMPLEXITY_WEIGHTS = {
|
|
540
|
-
render: 1,
|
|
541
|
-
integrate: 2,
|
|
542
|
-
compute: 2.5
|
|
543
|
-
};
|
|
544
|
-
const SEMANTIC_CONCEPT_JUDGE_VERSION = "semantic-concept-judge-v1-2026-04-24";
|
|
545
|
-
const DEFAULT_MAX_SOURCE = 45e3;
|
|
546
|
-
const DEFAULT_MAX_HTML = 3e4;
|
|
547
|
-
const DEFAULT_MAX_PER_FILE = 2e4;
|
|
548
|
-
const DEFAULT_TIMEOUT = 3e5;
|
|
549
|
-
const DEFAULT_MAX_TOKENS = 16e3;
|
|
550
|
-
const DEFAULT_MODEL = "claude-sonnet-4-6";
|
|
551
|
-
const SEMANTIC_SCHEMA = {
|
|
552
|
-
type: "object",
|
|
553
|
-
additionalProperties: false,
|
|
554
|
-
required: ["summary", "concepts"],
|
|
555
|
-
properties: {
|
|
556
|
-
summary: {
|
|
557
|
-
type: "string",
|
|
558
|
-
minLength: 20,
|
|
559
|
-
maxLength: 600
|
|
560
|
-
},
|
|
561
|
-
concepts: {
|
|
562
|
-
type: "array",
|
|
563
|
-
minItems: 1,
|
|
564
|
-
items: {
|
|
565
|
-
type: "object",
|
|
566
|
-
additionalProperties: false,
|
|
567
|
-
required: [
|
|
568
|
-
"concept",
|
|
569
|
-
"present",
|
|
570
|
-
"score",
|
|
571
|
-
"evidence",
|
|
572
|
-
"severity"
|
|
573
|
-
],
|
|
574
|
-
properties: {
|
|
575
|
-
concept: {
|
|
576
|
-
type: "string",
|
|
577
|
-
minLength: 1,
|
|
578
|
-
maxLength: 120
|
|
579
|
-
},
|
|
580
|
-
present: { type: "boolean" },
|
|
581
|
-
score: {
|
|
582
|
-
type: "number",
|
|
583
|
-
minimum: 0,
|
|
584
|
-
maximum: 10
|
|
585
|
-
},
|
|
586
|
-
evidence: {
|
|
587
|
-
type: "string",
|
|
588
|
-
minLength: 5,
|
|
589
|
-
maxLength: 400
|
|
590
|
-
},
|
|
591
|
-
severity: {
|
|
592
|
-
type: "string",
|
|
593
|
-
enum: [
|
|
594
|
-
"critical",
|
|
595
|
-
"major",
|
|
596
|
-
"minor",
|
|
597
|
-
"info"
|
|
598
|
-
]
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
};
|
|
605
|
-
function truncate(body, cap, label) {
|
|
606
|
-
if (body.length <= cap) return body;
|
|
607
|
-
return `${body.slice(0, cap)}\n… [truncated ${body.length - cap} chars of ${label}]`;
|
|
608
|
-
}
|
|
609
|
-
function buildPrompt(input, opts) {
|
|
610
|
-
const sourceBlob = input.sourceFiles.filter((f) => f.content.length <= opts.maxPerFileChars).map((f) => `--- FILE: ${f.path} ---\n${f.content}`).join("\n\n");
|
|
611
|
-
const html = input.servedHtml ?? "";
|
|
612
|
-
return `You are a strict code-review judge evaluating whether an agent's 0-to-1 build actually implements the features the user asked for.
|
|
613
|
-
|
|
614
|
-
You MUST distinguish:
|
|
615
|
-
(a) WORKING code that implements the concept (rendered UI, wired handler, real API call),
|
|
616
|
-
(b) KEYWORD-PRESENT stub (comments mentioning the concept, variable names, TODOs),
|
|
617
|
-
(c) ABSENT (concept nowhere).
|
|
618
|
-
|
|
619
|
-
A comment like "// TODO: add mint button" is NOT present — score 2-3. Only count a concept as present if there is real functional code: a rendered component, a call handler wired to state or a network call, a computed value actually used.
|
|
620
|
-
|
|
621
|
-
USER REQUEST (what the agent was asked to build):
|
|
622
|
-
${input.userRequest}
|
|
623
|
-
|
|
624
|
-
${input.artifactLabel ? `ARTIFACT METADATA:\n name: ${input.artifactLabel}\n description: ${input.artifactDescription ?? ""}\n\n` : ""}EXPECTED CONCEPTS (each must be graded independently):
|
|
625
|
-
${input.expectedConcepts.map((c, i) => ` ${i + 1}. "${c.name}"${c.keywords?.length ? ` — hints: [${c.keywords.slice(0, 6).join(" | ")}]` : ""}`).join("\n")}
|
|
626
|
-
|
|
627
|
-
${html ? `SERVED HTML (what the preview returns when hit):\n${truncate(html, opts.maxHtmlChars, "HTML")}\n\n` : ""}SOURCE FILES (the agent's workdir):
|
|
628
|
-
${truncate(sourceBlob, opts.maxSourceChars, "source")}
|
|
629
|
-
|
|
630
|
-
For EACH concept, return:
|
|
631
|
-
- concept: the concept name as given (match exactly)
|
|
632
|
-
- present: boolean — does a working implementation exist?
|
|
633
|
-
- score: 0-10 — 10 = production-ready; 7 = functional but thin; 4 = partial/stubbed; 2 = keyword-only comment; 0 = absent
|
|
634
|
-
- evidence: cite "<file>:<line>" or "served-html:<selector>" pointing at the strongest supporting code. If the concept is absent or stubbed, explain what's missing.
|
|
635
|
-
- severity:
|
|
636
|
-
"info" when present: true AND score >= 7
|
|
637
|
-
"minor" when present: true AND 4 <= score < 7
|
|
638
|
-
"major" when present: false OR score < 4
|
|
639
|
-
"critical" when the concept is not only absent but a core user flow depends on it
|
|
640
|
-
|
|
641
|
-
Also produce a "summary" (one sentence, 20-600 chars): overall verdict on whether this is a shippable implementation of the user request vs a keyword-dense placeholder.
|
|
642
|
-
|
|
643
|
-
BE SKEPTICAL. Keyword matching already passed — your job is to catch what keyword matching misses. If the agent shipped a working build, say so. If it shipped a stub, say so. Don't grade on effort.
|
|
644
|
-
|
|
645
|
-
Return STRICT JSON. No prose outside the JSON.`;
|
|
646
|
-
}
|
|
647
|
-
/**
|
|
648
|
-
* Run the semantic concept judge. Soft-fails to available=false on
|
|
649
|
-
* LLM/JSON errors — callers in a MultiLayerVerifier pipeline can treat
|
|
650
|
-
* that as "skip" rather than "fail."
|
|
651
|
-
*/
|
|
652
|
-
async function runSemanticConceptJudge(input, options) {
|
|
653
|
-
const start = Date.now();
|
|
654
|
-
const totalCount = input.expectedConcepts.length;
|
|
655
|
-
if (totalCount === 0) return {
|
|
656
|
-
kind: "semantic-concept",
|
|
657
|
-
version: SEMANTIC_CONCEPT_JUDGE_VERSION,
|
|
658
|
-
score: 0,
|
|
659
|
-
presentCount: 0,
|
|
660
|
-
totalCount: 0,
|
|
661
|
-
findings: [],
|
|
662
|
-
summary: "no expected concepts declared",
|
|
663
|
-
durationMs: 0,
|
|
664
|
-
costUsd: null,
|
|
665
|
-
available: false,
|
|
666
|
-
error: "no expected concepts declared"
|
|
667
|
-
};
|
|
668
|
-
const opts = {
|
|
669
|
-
chat: options.chat,
|
|
670
|
-
model: options.model ?? options.chat.defaultModel ?? DEFAULT_MODEL,
|
|
671
|
-
timeoutMs: options.timeoutMs ?? DEFAULT_TIMEOUT,
|
|
672
|
-
maxTokens: options.maxTokens ?? DEFAULT_MAX_TOKENS,
|
|
673
|
-
maxSourceChars: options.maxSourceChars ?? DEFAULT_MAX_SOURCE,
|
|
674
|
-
maxPerFileChars: options.maxPerFileChars ?? DEFAULT_MAX_PER_FILE,
|
|
675
|
-
maxHtmlChars: options.maxHtmlChars ?? DEFAULT_MAX_HTML,
|
|
676
|
-
...options.pricing ? { pricing: options.pricing } : {},
|
|
677
|
-
costLedger: options.costLedger ?? new CostLedger(),
|
|
678
|
-
costPhase: options.costPhase ?? "judge.semantic-concept",
|
|
679
|
-
costTags: options.costTags ?? {},
|
|
680
|
-
signal: options.signal ?? new AbortController().signal,
|
|
681
|
-
weightConcepts: options.weightConcepts ?? "mean",
|
|
682
|
-
complexityWeights: {
|
|
683
|
-
...DEFAULT_COMPLEXITY_WEIGHTS,
|
|
684
|
-
...options.complexityWeights ?? {}
|
|
685
|
-
}
|
|
686
|
-
};
|
|
687
|
-
const weightForConcept = (spec) => {
|
|
688
|
-
if (opts.weightConcepts === "mean") return 1;
|
|
689
|
-
if (spec.weight != null) return spec.weight;
|
|
690
|
-
if (opts.weightConcepts === "complexity") return opts.complexityWeights[spec.complexity ?? "render"] ?? 1;
|
|
691
|
-
return 1;
|
|
692
|
-
};
|
|
693
|
-
const weightByName = new Map(input.expectedConcepts.map((c) => [c.name, weightForConcept(c)]));
|
|
694
|
-
let receipt;
|
|
695
|
-
try {
|
|
696
|
-
const request = {
|
|
697
|
-
model: opts.model,
|
|
698
|
-
messages: [{
|
|
699
|
-
role: "system",
|
|
700
|
-
content: "You are a strict code-review judge. Return strict JSON only. No prose outside the JSON. A keyword in a comment is NOT a working implementation."
|
|
701
|
-
}, {
|
|
702
|
-
role: "user",
|
|
703
|
-
content: buildPrompt(input, opts)
|
|
704
|
-
}],
|
|
705
|
-
jsonSchema: {
|
|
706
|
-
name: "semantic_concept_judge",
|
|
707
|
-
schema: SEMANTIC_SCHEMA
|
|
708
|
-
},
|
|
709
|
-
temperature: 0,
|
|
710
|
-
maxTokens: opts.maxTokens,
|
|
711
|
-
timeoutMs: opts.timeoutMs
|
|
712
|
-
};
|
|
713
|
-
const paid = await paidJsonChat({
|
|
714
|
-
chat: opts.chat,
|
|
715
|
-
request,
|
|
716
|
-
ledger: opts.costLedger,
|
|
717
|
-
channel: "judge",
|
|
718
|
-
phase: opts.costPhase,
|
|
719
|
-
actor: "semantic-concept",
|
|
720
|
-
tags: opts.costTags,
|
|
721
|
-
signal: opts.signal,
|
|
722
|
-
...opts.pricing ? { pricing: opts.pricing } : {}
|
|
723
|
-
});
|
|
724
|
-
receipt = paid.receipt;
|
|
725
|
-
if (!paid.succeeded) throw paid.error;
|
|
726
|
-
const { value } = paid;
|
|
727
|
-
if (!value?.concepts || !Array.isArray(value.concepts)) throw new Error("judge returned malformed response — expected array under \"concepts\"");
|
|
728
|
-
const findings = value.concepts.map((c) => ({
|
|
729
|
-
concept: String(c.concept),
|
|
730
|
-
present: Boolean(c.present),
|
|
731
|
-
score: Math.max(0, Math.min(10, Number(c.score ?? 0))),
|
|
732
|
-
evidence: String(c.evidence ?? ""),
|
|
733
|
-
severity: [
|
|
734
|
-
"critical",
|
|
735
|
-
"major",
|
|
736
|
-
"minor",
|
|
737
|
-
"info"
|
|
738
|
-
].includes(c.severity) ? c.severity : "info"
|
|
739
|
-
}));
|
|
740
|
-
const presentCount = findings.filter((f) => f.present && f.score >= 7).length;
|
|
741
|
-
let weightSum = 0;
|
|
742
|
-
let weightedScoreSum = 0;
|
|
743
|
-
for (const f of findings) {
|
|
744
|
-
const w = weightByName.get(f.concept) ?? 1;
|
|
745
|
-
weightSum += w;
|
|
746
|
-
weightedScoreSum += w * f.score;
|
|
747
|
-
}
|
|
748
|
-
const scoreAvg = weightSum > 0 ? weightedScoreSum / weightSum : findings.reduce((a, f) => a + f.score, 0) / Math.max(1, findings.length);
|
|
749
|
-
return {
|
|
750
|
-
kind: "semantic-concept",
|
|
751
|
-
version: SEMANTIC_CONCEPT_JUDGE_VERSION,
|
|
752
|
-
score: Number((scoreAvg / 10).toFixed(3)),
|
|
753
|
-
presentCount,
|
|
754
|
-
totalCount,
|
|
755
|
-
findings,
|
|
756
|
-
summary: String(value.summary ?? ""),
|
|
757
|
-
durationMs: Date.now() - start,
|
|
758
|
-
costUsd: paid.receipt.costUnknown ? null : paid.receipt.costUsd,
|
|
759
|
-
available: true
|
|
760
|
-
};
|
|
761
|
-
} catch (err) {
|
|
762
|
-
return {
|
|
763
|
-
kind: "semantic-concept",
|
|
764
|
-
version: SEMANTIC_CONCEPT_JUDGE_VERSION,
|
|
765
|
-
score: 0,
|
|
766
|
-
presentCount: 0,
|
|
767
|
-
totalCount,
|
|
768
|
-
findings: [],
|
|
769
|
-
summary: "",
|
|
770
|
-
durationMs: Date.now() - start,
|
|
771
|
-
costUsd: receipt && !receipt.costUnknown ? receipt.costUsd : null,
|
|
772
|
-
available: false,
|
|
773
|
-
error: err instanceof Error ? err.message : String(err)
|
|
774
|
-
};
|
|
775
|
-
}
|
|
776
|
-
}
|
|
777
|
-
//#endregion
|
|
778
|
-
export { diffFindings as a, defaultIsMaterial as i, runSemanticConceptJudge as n, createChatTraceEngine as o, FindingsStore as r, SEMANTIC_CONCEPT_JUDGE_VERSION as t };
|
|
536
|
+
export { diffFindings as n, createChatTraceEngine as r, FindingsStore as t };
|
|
779
537
|
|
|
780
|
-
//# sourceMappingURL=
|
|
538
|
+
//# sourceMappingURL=findings-store-BMVQtEsm.js.map
|