@tangle-network/agent-eval 0.187.2 → 0.189.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/dist/adapters/http.d.ts +2 -2
  3. package/dist/{agent-profile-uAIQK3Nr.d.ts → agent-profile-DNV_U6QR.d.ts} +4 -4
  4. package/dist/{agent-profile-uAIQK3Nr.d.ts.map → agent-profile-DNV_U6QR.d.ts.map} +1 -1
  5. package/dist/analyst/index.d.ts +12 -12
  6. package/dist/analyst/index.d.ts.map +1 -1
  7. package/dist/analyst/index.js +7 -7
  8. package/dist/{analyze-runs-DapYZz02.d.ts → analyze-runs-BvK4-wSs.d.ts} +5 -5
  9. package/dist/{analyze-runs-DapYZz02.d.ts.map → analyze-runs-BvK4-wSs.d.ts.map} +1 -1
  10. package/dist/{analyze-runs-DCY7LMt4.js → analyze-runs-SCSWYpy0.js} +17 -9
  11. package/dist/analyze-runs-SCSWYpy0.js.map +1 -0
  12. package/dist/{benchmark-command-DGokT8zd.js → benchmark-command-BhhAYstU.js} +14 -14
  13. package/dist/benchmark-command-BhhAYstU.js.map +1 -0
  14. package/dist/benchmarks/index.d.ts +4 -4
  15. package/dist/benchmarks/index.js +3 -3
  16. package/dist/builder-eval/index.d.ts +3 -3
  17. package/dist/builder-eval/index.js +1 -1
  18. package/dist/campaign/index.d.ts +5 -5
  19. package/dist/campaign/index.js +7 -7
  20. package/dist/{campaign-DlxdTOvw.js → campaign-BWoSQPSU.js} +10 -10
  21. package/dist/{campaign-DlxdTOvw.js.map → campaign-BWoSQPSU.js.map} +1 -1
  22. package/dist/{campaign-evidence-IF1p0oDa.js → campaign-evidence-CBlGJ3kC.js} +5 -5
  23. package/dist/campaign-evidence-CBlGJ3kC.js.map +1 -0
  24. package/dist/{chat-client-DqPqWzVV.js → chat-client-C4dg7Ng_.js} +2 -2
  25. package/dist/{chat-client-DqPqWzVV.js.map → chat-client-C4dg7Ng_.js.map} +1 -1
  26. package/dist/{chat-json-call-C-DnDxEy.js → chat-json-call-JVGbfx95.js} +2 -2
  27. package/dist/{chat-json-call-C-DnDxEy.js.map → chat-json-call-JVGbfx95.js.map} +1 -1
  28. package/dist/cli.js +4 -4
  29. package/dist/{client-DCc7a8ZC.d.ts → client-BhEyAdfe.d.ts} +4 -4
  30. package/dist/{client-DCc7a8ZC.d.ts.map → client-BhEyAdfe.d.ts.map} +1 -1
  31. package/dist/{client-CXE-U1SA.js → client-QwJpsNYU.js} +5 -1
  32. package/dist/client-QwJpsNYU.js.map +1 -0
  33. package/dist/contract/index.d.ts +11 -11
  34. package/dist/contract/index.js +22 -13
  35. package/dist/contract/index.js.map +1 -1
  36. package/dist/{counterfactual-CLgrwhkY.d.ts → counterfactual-CPaWN99-.d.ts} +4 -4
  37. package/dist/{counterfactual-CLgrwhkY.d.ts.map → counterfactual-CPaWN99-.d.ts.map} +1 -1
  38. package/dist/{counterfactual-Bjq1mlUu.js → counterfactual-DtMWvn7D.js} +2 -2
  39. package/dist/{counterfactual-Bjq1mlUu.js.map → counterfactual-DtMWvn7D.js.map} +1 -1
  40. package/dist/deep-freeze-CurcOQg3.js +16 -0
  41. package/dist/deep-freeze-CurcOQg3.js.map +1 -0
  42. package/dist/{default-registry-DMxeb4GD.d.ts → default-registry-B5HrwrPM.d.ts} +6 -6
  43. package/dist/{default-registry-DMxeb4GD.d.ts.map → default-registry-B5HrwrPM.d.ts.map} +1 -1
  44. package/dist/{default-registry-Ca2IWH1X.js → default-registry-m2jhbG6Q.js} +4 -3
  45. package/dist/default-registry-m2jhbG6Q.js.map +1 -0
  46. package/dist/{define-agent-eval-C0EqJ9Gz.js → define-agent-eval-98sgUaC1.js} +8 -8
  47. package/dist/{define-agent-eval-C0EqJ9Gz.js.map → define-agent-eval-98sgUaC1.js.map} +1 -1
  48. package/dist/{define-agent-eval-CGBwPPaq.d.ts → define-agent-eval-q6890HU4.d.ts} +7 -7
  49. package/dist/{define-agent-eval-CGBwPPaq.d.ts.map → define-agent-eval-q6890HU4.d.ts.map} +1 -1
  50. package/dist/diagnosis/index.d.ts +38 -96
  51. package/dist/diagnosis/index.d.ts.map +1 -1
  52. package/dist/diagnosis/index.js +84 -135
  53. package/dist/diagnosis/index.js.map +1 -1
  54. package/dist/{dspy-rlm-engine-BE9lCzzL.js → dspy-rlm-engine-DLYttKBm.js} +3 -3
  55. package/dist/{dspy-rlm-engine-BE9lCzzL.js.map → dspy-rlm-engine-DLYttKBm.js.map} +1 -1
  56. package/dist/emitter-DbMXUIVP.js +334 -0
  57. package/dist/emitter-DbMXUIVP.js.map +1 -0
  58. package/dist/{emitter-Cs0egaFd.d.ts → emitter-HcCmFQl_.d.ts} +37 -6
  59. package/dist/emitter-HcCmFQl_.d.ts.map +1 -0
  60. package/dist/{engine-DNlKhIm0.d.ts → engine-BkLCnZQX.d.ts} +15 -5
  61. package/dist/engine-BkLCnZQX.d.ts.map +1 -0
  62. package/dist/{eval-campaign-XFHEpN86.js → eval-campaign-C0Q1Eeo_.js} +8 -5
  63. package/dist/{eval-campaign-XFHEpN86.js.map → eval-campaign-C0Q1Eeo_.js.map} +1 -1
  64. package/dist/evaluation.d.ts +2 -2
  65. package/dist/{exact-types-BEHN7tnq.d.ts → exact-types-CfpP2A4Z.d.ts} +2 -2
  66. package/dist/{exact-types-BEHN7tnq.d.ts.map → exact-types-CfpP2A4Z.d.ts.map} +1 -1
  67. package/dist/experiment/index.d.ts +3 -3
  68. package/dist/experiment/index.js +2 -3
  69. package/dist/experiment/index.js.map +1 -1
  70. package/dist/{external-optimizer-process-BbhvXTFx.js → external-optimizer-process-C3quNeKV.js} +3 -3
  71. package/dist/{external-optimizer-process-BbhvXTFx.js.map → external-optimizer-process-C3quNeKV.js.map} +1 -1
  72. package/dist/{external-optimizer-subprocess-DMgmqTB6.js → external-optimizer-subprocess-BDwgKLO1.js} +3 -3
  73. package/dist/{external-optimizer-subprocess-DMgmqTB6.js.map → external-optimizer-subprocess-BDwgKLO1.js.map} +1 -1
  74. package/dist/{failure-cluster-OldNRoAt.d.ts → failure-cluster-CbgEDcFJ.d.ts} +3 -3
  75. package/dist/{failure-cluster-OldNRoAt.d.ts.map → failure-cluster-CbgEDcFJ.d.ts.map} +1 -1
  76. package/dist/failure-taxonomy-CjabTATj.js +538 -0
  77. package/dist/failure-taxonomy-CjabTATj.js.map +1 -0
  78. package/dist/{feedback-trajectory-CytTR7u4.d.ts → feedback-trajectory-B3ZSkfAq.d.ts} +6 -6
  79. package/dist/{feedback-trajectory-CytTR7u4.d.ts.map → feedback-trajectory-B3ZSkfAq.d.ts.map} +1 -1
  80. package/dist/hosted/index.d.ts +2 -2
  81. package/dist/hosted/index.d.ts.map +1 -1
  82. package/dist/hosted/index.js +1 -1
  83. package/dist/{index-vYNHCV2G.d.ts → index-2e_MTznj.d.ts} +8 -8
  84. package/dist/{index-vYNHCV2G.d.ts.map → index-2e_MTznj.d.ts.map} +1 -1
  85. package/dist/{index-CKZa_rnt.d.ts → index-Bcc9PkOz.d.ts} +3 -3
  86. package/dist/{index-CKZa_rnt.d.ts.map → index-Bcc9PkOz.d.ts.map} +1 -1
  87. package/dist/{index-u0d1Jp4F.d.ts → index-BqDJ6fUK.d.ts} +45 -24
  88. package/dist/index-BqDJ6fUK.d.ts.map +1 -0
  89. package/dist/{index-BRsrfSHT.d.ts → index-CnJOPR_E.d.ts} +10 -10
  90. package/dist/{index-BRsrfSHT.d.ts.map → index-CnJOPR_E.d.ts.map} +1 -1
  91. package/dist/{index-YZrbnBSV.d.ts → index-Dk1dOUfm.d.ts} +11 -11
  92. package/dist/{index-YZrbnBSV.d.ts.map → index-Dk1dOUfm.d.ts.map} +1 -1
  93. package/dist/index.d.ts +384 -69
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +1492 -217
  96. package/dist/index.js.map +1 -1
  97. package/dist/{insight-report-DpOo-3iL.d.ts → insight-report-CvPkEIcC.d.ts} +14 -7
  98. package/dist/insight-report-CvPkEIcC.d.ts.map +1 -0
  99. package/dist/{integrity-Cy9WHAtb.js → integrity-BFP4kjGj.js} +6 -1
  100. package/dist/integrity-BFP4kjGj.js.map +1 -0
  101. package/dist/{integrity-rGOfSUle.d.ts → integrity-CaeNeusS.d.ts} +4 -4
  102. package/dist/integrity-CaeNeusS.d.ts.map +1 -0
  103. package/dist/jev.d.ts +2 -2
  104. package/dist/jev.js +2 -1
  105. package/dist/jev.js.map +1 -1
  106. package/dist/{journal-BuRLm6ho.js → journal-CDP0Vhx_.js} +262 -115
  107. package/dist/journal-CDP0Vhx_.js.map +1 -0
  108. package/dist/{kind-factory-V79Hw0AU.js → kind-factory-BGwN0nE6.js} +17 -5
  109. package/dist/{kind-factory-V79Hw0AU.js.map → kind-factory-BGwN0nE6.js.map} +1 -1
  110. package/dist/ledger-core/index.d.ts +2 -2
  111. package/dist/ledger-core/index.js +1 -1
  112. package/dist/{llm-client-DDhZ29Vm.js → llm-client-DF9bPNYA.js} +2 -2
  113. package/dist/{llm-client-DDhZ29Vm.js.map → llm-client-DF9bPNYA.js.map} +1 -1
  114. package/dist/{llm-judge-BVso5x-u.js → llm-judge-M_l_WXw2.js} +26 -24
  115. package/dist/llm-judge-M_l_WXw2.js.map +1 -0
  116. package/dist/{matrix-CPKsRY8Y.d.ts → matrix-CNypzP-v.d.ts} +2 -2
  117. package/dist/{matrix-CPKsRY8Y.d.ts.map → matrix-CNypzP-v.d.ts.map} +1 -1
  118. package/dist/meta-eval/index.d.ts +4 -4
  119. package/dist/{mint-BI14xehJ.d.ts → mint-DsS38v5c.d.ts} +25 -5
  120. package/dist/{mint-BI14xehJ.d.ts.map → mint-DsS38v5c.d.ts.map} +1 -1
  121. package/dist/{mint-B4zgSAJW.js → mint-iCD-W43s.js} +30 -12
  122. package/dist/mint-iCD-W43s.js.map +1 -0
  123. package/dist/multishot/golden/index.d.ts +1 -1
  124. package/dist/multishot/index.d.ts +2 -2
  125. package/dist/openapi.json +1 -1
  126. package/dist/pipelines/index.d.ts +67 -12
  127. package/dist/pipelines/index.d.ts.map +1 -1
  128. package/dist/pipelines/index.js +178 -41
  129. package/dist/pipelines/index.js.map +1 -1
  130. package/dist/{prime-protocol-CDBcL9NM.d.ts → prime-protocol-Fwvctmhm.d.ts} +2 -2
  131. package/dist/{prime-protocol-CDBcL9NM.d.ts.map → prime-protocol-Fwvctmhm.d.ts.map} +1 -1
  132. package/dist/{produced-state-Cn9ECr4v.js → produced-state-BOY98IJO.js} +4 -4
  133. package/dist/{produced-state-Cn9ECr4v.js.map → produced-state-BOY98IJO.js.map} +1 -1
  134. package/dist/{query-D6W6MaGx.d.ts → query-DBUQhehH.d.ts} +3 -3
  135. package/dist/{query-D6W6MaGx.d.ts.map → query-DBUQhehH.d.ts.map} +1 -1
  136. package/dist/random-DGEyr3zG.d.ts +83 -0
  137. package/dist/random-DGEyr3zG.d.ts.map +1 -0
  138. package/dist/{raw-provider-sink-BQd7mzyT.js → raw-provider-sink-C96CcqeG.js} +19 -56
  139. package/dist/raw-provider-sink-C96CcqeG.js.map +1 -0
  140. package/dist/redact-DPoH1-OW.d.ts +158 -0
  141. package/dist/redact-DPoH1-OW.d.ts.map +1 -0
  142. package/dist/redact-DxwlUAvh.js +824 -0
  143. package/dist/redact-DxwlUAvh.js.map +1 -0
  144. package/dist/{registry-D5Ly3GRV.d.ts → registry-mAQVtuLx.d.ts} +4 -4
  145. package/dist/{registry-D5Ly3GRV.d.ts.map → registry-mAQVtuLx.d.ts.map} +1 -1
  146. package/dist/{release-confidence-CSp3MsU4.d.ts → release-confidence-CkoXFx9I.d.ts} +4 -4
  147. package/dist/{release-confidence-CSp3MsU4.d.ts.map → release-confidence-CkoXFx9I.d.ts.map} +1 -1
  148. package/dist/{release-confidence-RanRUXRW.js → release-confidence-XQm_xjhR.js} +3 -3
  149. package/dist/release-confidence-XQm_xjhR.js.map +1 -0
  150. package/dist/{report-command-CSTjzFGY.js → report-command-DKJ_yAIj.js} +21 -12
  151. package/dist/{report-command-CSTjzFGY.js.map → report-command-DKJ_yAIj.js.map} +1 -1
  152. package/dist/reporting.d.ts +3 -3
  153. package/dist/reporting.js +1 -1
  154. package/dist/{researcher-D7E92STT.d.ts → researcher-DojEMb7E.d.ts} +7 -7
  155. package/dist/{researcher-D7E92STT.d.ts.map → researcher-DojEMb7E.d.ts.map} +1 -1
  156. package/dist/{reward-hacking-BIQ2BWLG.d.ts → reward-hacking-Cyk-QHk9.d.ts} +2 -2
  157. package/dist/{reward-hacking-BIQ2BWLG.d.ts.map → reward-hacking-Cyk-QHk9.d.ts.map} +1 -1
  158. package/dist/rl.d.ts +11 -10
  159. package/dist/rl.d.ts.map +1 -1
  160. package/dist/rl.js +7 -6
  161. package/dist/rl.js.map +1 -1
  162. package/dist/rollout/index.d.ts +4 -4
  163. package/dist/rollout/index.js +2 -2
  164. package/dist/{rollout-C0Ifk3vK.js → rollout-B-XBReTC.js} +2 -2
  165. package/dist/{rollout-C0Ifk3vK.js.map → rollout-B-XBReTC.js.map} +1 -1
  166. package/dist/{rubric-predictive-validity-CTU8y8Cv.d.ts → rubric-predictive-validity-DIUwJJ9Y.d.ts} +2 -2
  167. package/dist/{rubric-predictive-validity-CTU8y8Cv.d.ts.map → rubric-predictive-validity-DIUwJJ9Y.d.ts.map} +1 -1
  168. package/dist/{run-record-tg_5H2IK.js → run-record-BRlM99rX.js} +41 -3
  169. package/dist/run-record-BRlM99rX.js.map +1 -0
  170. package/dist/{run-record-D9wS35fK.d.ts → run-record-DF-fuu31.d.ts} +59 -7
  171. package/dist/run-record-DF-fuu31.d.ts.map +1 -0
  172. package/dist/{run-record-CNNzWGpB.js → run-record-DnMFyg_g.js} +26 -13
  173. package/dist/run-record-DnMFyg_g.js.map +1 -0
  174. package/dist/{schema-CR5cpjQ3.d.ts → schema-2g7trUwH.d.ts} +17 -2
  175. package/dist/schema-2g7trUwH.d.ts.map +1 -0
  176. package/dist/{schema-BzWDXhOR.d.ts → schema-B5LtYvn9.d.ts} +7 -5
  177. package/dist/{schema-BzWDXhOR.d.ts.map → schema-B5LtYvn9.d.ts.map} +1 -1
  178. package/dist/schema-C1aaAxTf.js.map +1 -1
  179. package/dist/schema-CSf6qWgZ.js.map +1 -1
  180. package/dist/{semantic-concept-judge-Cnt0TWp0.js → semantic-concept-judge-Cm2K2wAo.js} +6 -6
  181. package/dist/{semantic-concept-judge-Cnt0TWp0.js.map → semantic-concept-judge-Cm2K2wAo.js.map} +1 -1
  182. package/dist/{series-convergence-BnMs_uAr.d.ts → series-convergence-DY7ha0kx.d.ts} +2 -2
  183. package/dist/{series-convergence-BnMs_uAr.d.ts.map → series-convergence-DY7ha0kx.d.ts.map} +1 -1
  184. package/dist/{server-DmpcFiVK.js → server-C8XvqCg8.js} +2 -2
  185. package/dist/{server-DmpcFiVK.js.map → server-C8XvqCg8.js.map} +1 -1
  186. package/dist/{skillopt-optimization-method-Cc9SVLqi.js → skillopt-optimization-method-BVSB676o.js} +7 -7
  187. package/dist/{skillopt-optimization-method-Cc9SVLqi.js.map → skillopt-optimization-method-BVSB676o.js.map} +1 -1
  188. package/dist/spans-W0o8pbEg.d.ts +60 -0
  189. package/dist/spans-W0o8pbEg.d.ts.map +1 -0
  190. package/dist/{statistical-heldout-DTmhTW8P.d.ts → statistical-heldout-plAHG82H.d.ts} +3 -3
  191. package/dist/{statistical-heldout-DTmhTW8P.d.ts.map → statistical-heldout-plAHG82H.d.ts.map} +1 -1
  192. package/dist/{store-BErPvYBr.d.ts → store-C4avFjIi.d.ts} +2 -2
  193. package/dist/{store-BErPvYBr.d.ts.map → store-C4avFjIi.d.ts.map} +1 -1
  194. package/dist/{store-otlp-2gYCy-v0.js → store-otlp-D0AV4cvB.js} +2 -2
  195. package/dist/{store-otlp-2gYCy-v0.js.map → store-otlp-D0AV4cvB.js.map} +1 -1
  196. package/dist/{store-tool-spans-B3bX9yqn.d.ts → store-tool-spans-8PAyhRqb.d.ts} +9 -54
  197. package/dist/store-tool-spans-8PAyhRqb.d.ts.map +1 -0
  198. package/dist/{store-tool-spans-B1e6Auc2.js → store-tool-spans-B_0mXvYl.js} +4 -4
  199. package/dist/{store-tool-spans-B1e6Auc2.js.map → store-tool-spans-B_0mXvYl.js.map} +1 -1
  200. package/dist/storyboard/index.d.ts +1 -1
  201. package/dist/{summary-report-Iy6kXo8x.d.ts → summary-report-DvvesgR_.d.ts} +6 -5
  202. package/dist/summary-report-DvvesgR_.d.ts.map +1 -0
  203. package/dist/supervisor-run/index.d.ts +2 -2
  204. package/dist/supervisor-run/index.d.ts.map +1 -1
  205. package/dist/supervisor-run/index.js +1 -1
  206. package/dist/{tool-groups-veQYPiTy.d.ts → tool-groups-W7MJobX_.d.ts} +3 -3
  207. package/dist/tool-groups-W7MJobX_.d.ts.map +1 -0
  208. package/dist/{tool-waste-nbHPAxei.js → tool-waste-CJDfxH45.js} +3 -537
  209. package/dist/tool-waste-CJDfxH45.js.map +1 -0
  210. package/dist/{tool-waste-D23I0zWm.d.ts → tool-waste-CP5DO383.d.ts} +4 -4
  211. package/dist/{tool-waste-D23I0zWm.d.ts.map → tool-waste-CP5DO383.d.ts.map} +1 -1
  212. package/dist/trace-repair/index.d.ts +2 -2
  213. package/dist/traces.d.ts +12 -11
  214. package/dist/traces.d.ts.map +1 -1
  215. package/dist/traces.js +9 -9
  216. package/dist/{trajectory-D7qrNvaN.d.ts → trajectory-Y1fmdlw7.d.ts} +3 -3
  217. package/dist/{trajectory-D7qrNvaN.d.ts.map → trajectory-Y1fmdlw7.d.ts.map} +1 -1
  218. package/dist/trajectory-replay/index.d.ts +3 -3
  219. package/dist/trajectory-replay/index.js +2 -2
  220. package/dist/{types-BjB2wZM9.d.ts → types-Bay1dh2o.d.ts} +6 -6
  221. package/dist/{types-BjB2wZM9.d.ts.map → types-Bay1dh2o.d.ts.map} +1 -1
  222. package/dist/{types-BTRcIqFr.d.ts → types-BvmWNjjs.d.ts} +4 -4
  223. package/dist/{types-BTRcIqFr.d.ts.map → types-BvmWNjjs.d.ts.map} +1 -1
  224. package/dist/{types-CBbLtr2J.d.ts → types-C0bWoSKC.d.ts} +10 -11
  225. package/dist/types-C0bWoSKC.d.ts.map +1 -0
  226. package/dist/{types-C8VBbiw6.js → types-CW5b90JH.js} +2 -15
  227. package/dist/types-CW5b90JH.js.map +1 -0
  228. package/dist/{types--18oHwVF.d.ts → types-Cvqy7asY.d.ts} +3 -3
  229. package/dist/{types--18oHwVF.d.ts.map → types-Cvqy7asY.d.ts.map} +1 -1
  230. package/dist/{types-Tp5WhYL9.d.ts → types-DRNlLbBR.d.ts} +2 -2
  231. package/dist/{types-Tp5WhYL9.d.ts.map → types-DRNlLbBR.d.ts.map} +1 -1
  232. package/dist/wire/index.d.ts +3 -3
  233. package/dist/wire/index.js +1 -1
  234. package/docs/code-agent-intake.md +1 -1
  235. package/docs/diagnosis.md +2 -3
  236. package/docs/eval-surface-map.md +1 -1
  237. package/docs/experiment.md +0 -1
  238. package/docs/insight-report.md +3 -2
  239. package/docs/public-api.md +2 -2
  240. package/docs/redaction.md +59 -0
  241. package/docs/rollout.md +5 -5
  242. package/docs/search-history-receipts.md +1 -0
  243. package/docs/trace-contracts.md +102 -0
  244. package/docs/verdicts.md +1 -1
  245. package/package.json +3 -2
  246. package/dist/analyze-runs-DCY7LMt4.js.map +0 -1
  247. package/dist/benchmark-command-DGokT8zd.js.map +0 -1
  248. package/dist/campaign-evidence-IF1p0oDa.js.map +0 -1
  249. package/dist/client-CXE-U1SA.js.map +0 -1
  250. package/dist/default-registry-Ca2IWH1X.js.map +0 -1
  251. package/dist/emitter-Cs0egaFd.d.ts.map +0 -1
  252. package/dist/emitter-DeQHiDMm.js +0 -257
  253. package/dist/emitter-DeQHiDMm.js.map +0 -1
  254. package/dist/engine-DNlKhIm0.d.ts.map +0 -1
  255. package/dist/experiment-tracker-BKEumQug.js +0 -280
  256. package/dist/experiment-tracker-BKEumQug.js.map +0 -1
  257. package/dist/experiment-tracker-URRGP9ek.d.ts +0 -237
  258. package/dist/experiment-tracker-URRGP9ek.d.ts.map +0 -1
  259. package/dist/index-u0d1Jp4F.d.ts.map +0 -1
  260. package/dist/insight-report-DpOo-3iL.d.ts.map +0 -1
  261. package/dist/integrity-Cy9WHAtb.js.map +0 -1
  262. package/dist/integrity-rGOfSUle.d.ts.map +0 -1
  263. package/dist/journal-BuRLm6ho.js.map +0 -1
  264. package/dist/llm-judge-BVso5x-u.js.map +0 -1
  265. package/dist/mint-B4zgSAJW.js.map +0 -1
  266. package/dist/raw-provider-sink-BQd7mzyT.js.map +0 -1
  267. package/dist/redact-7Aq1ukl-.js +0 -107
  268. package/dist/redact-7Aq1ukl-.js.map +0 -1
  269. package/dist/release-confidence-RanRUXRW.js.map +0 -1
  270. package/dist/run-record-CNNzWGpB.js.map +0 -1
  271. package/dist/run-record-D9wS35fK.d.ts.map +0 -1
  272. package/dist/run-record-tg_5H2IK.js.map +0 -1
  273. package/dist/schema-CR5cpjQ3.d.ts.map +0 -1
  274. package/dist/store-tool-spans-B3bX9yqn.d.ts.map +0 -1
  275. package/dist/summary-report-Iy6kXo8x.d.ts.map +0 -1
  276. package/dist/tool-groups-veQYPiTy.d.ts.map +0 -1
  277. package/dist/tool-waste-nbHPAxei.js.map +0 -1
  278. package/dist/types-C8VBbiw6.js.map +0 -1
  279. package/dist/types-CBbLtr2J.d.ts.map +0 -1
@@ -1,5 +1,5 @@
1
- import { C as TraceEvent, _ as Span, f as Run, o as FailureClass } from "./schema-CR5cpjQ3.js";
2
- import { s as TraceStore } from "./store-BErPvYBr.js";
1
+ import { f as Run, o as FailureClass, v as Span, w as TraceEvent } from "./schema-2g7trUwH.js";
2
+ import { s as TraceStore } from "./store-C4avFjIi.js";
3
3
  //#region src/failure-taxonomy.d.ts
4
4
  /**
5
5
  * Who a failure is charged to. This is the axis a comparison reads before it
@@ -151,4 +151,4 @@ declare function failureClusterView(store: TraceStore, options?: {
151
151
  }): Promise<FailureClusterReport>;
152
152
  //#endregion
153
153
  export { FAILURE_BLAME as a, FailureContext as c, INFRA_FAILURE_BLAMES as d, classifyFailure as f, DEFAULT_FAILURE_REASON_RULES as i, FailureReasonRule as l, failureBlame as m, FailureClusterReport as n, FailureBlame as o, classifyFailureReason as p, failureClusterView as r, FailureClassification as s, FailureCluster as t, FailureRule as u };
154
- //# sourceMappingURL=failure-cluster-OldNRoAt.d.ts.map
154
+ //# sourceMappingURL=failure-cluster-CbgEDcFJ.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"failure-cluster-OldNRoAt.d.ts","names":[],"sources":["../src/failure-taxonomy.ts","../src/pipelines/failure-cluster.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;KA6CY;;;;;;;;;;;;;cAcC,eAAe,SAAS,OAAO,cAAc;;;;;;;;;;;;;;;;;cAmG7C,sBAAsB,YAAY;;iBAM/B,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;;;;;;;;;;cAWG,uCAAuC;;;;;;;;;;;iBA6DpC,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"}
1
+ {"version":3,"file":"failure-cluster-CbgEDcFJ.d.ts","names":[],"sources":["../src/failure-taxonomy.ts","../src/pipelines/failure-cluster.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;KA6CY;;;;;;;;;;;;;cAcC,eAAe,SAAS,OAAO,cAAc;;;;;;;;;;;;;;;;;cAmG7C,sBAAsB,YAAY;;iBAM/B,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;;;;;;;;;;cAWG,uCAAuC;;;;;;;;;;;iBA6DpC,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"}
@@ -0,0 +1,538 @@
1
+ //#region src/failure-taxonomy.ts
2
+ /**
3
+ * Blame for every canonical class. The `Record` is exhaustive on purpose: a
4
+ * class added to `FAILURE_CLASSES` without a blame here fails to compile, so
5
+ * the axis cannot silently acquire a hole that reads as `undefined` — and a
6
+ * missing blame would void or charge a run by accident.
7
+ *
8
+ * The assignment rule, applied member by member: a class is `machine` only
9
+ * when the run demonstrably never reached a model. An environment that refuses
10
+ * one specific action the agent chose (a denied write, an out-of-scope call,
11
+ * an approval hold) stays `agent`, because the agent selected the action and
12
+ * every arm faces the same policy.
13
+ */
14
+ const FAILURE_BLAME = {
15
+ success: "none",
16
+ reasoning_error: "agent",
17
+ tool_selection_error: "agent",
18
+ tool_argument_error: "agent",
19
+ tool_recovery_failure: "agent",
20
+ hallucination: "agent",
21
+ instruction_following: "agent",
22
+ safety_refusal_miss: "agent",
23
+ policy_violation: "agent",
24
+ budget_exceeded: "agent",
25
+ format_drift: "agent",
26
+ permission_escalation: "agent",
27
+ pii_leak: "agent",
28
+ cost_overrun: "agent",
29
+ timeout: "agent",
30
+ sandbox_failure: "agent",
31
+ missing_user_data: "agent",
32
+ missing_domain_data: "agent",
33
+ missing_codebase_context: "agent",
34
+ missing_runtime_context: "agent",
35
+ stale_external_data: "agent",
36
+ bad_retrieval: "agent",
37
+ insufficient_evidence: "agent",
38
+ contradictory_evidence: "agent",
39
+ ambiguous_user_intent: "agent",
40
+ missing_credentials: "machine",
41
+ missing_integration_connection: "machine",
42
+ integration_auth_expired: "machine",
43
+ bad_integration_manifest: "machine",
44
+ knowledge_readiness_blocked: "machine",
45
+ missing_integration_scope: "agent",
46
+ integration_approval_required: "agent",
47
+ unsafe_integration_write_denied: "agent",
48
+ integration_provider_failure: "provider",
49
+ bridge_unreachable: "machine",
50
+ bridge_lane_saturated: "machine",
51
+ router_usage_mismatch: "machine",
52
+ session_profile_conflict: "machine",
53
+ runtime_restart: "machine",
54
+ root_driver_failed: "machine",
55
+ box_provision_failure: "machine",
56
+ box_teardown_failure: "machine",
57
+ profile_refused: "agent",
58
+ empty_completion: "provider",
59
+ stream_protocol_error: "provider",
60
+ stream_incomplete: "provider",
61
+ message_sealed: "provider",
62
+ process_killed: "provider",
63
+ terminated: "provider",
64
+ cancelled: "unknown",
65
+ traversal_cap_exhausted: "agent",
66
+ unreported: "unknown",
67
+ unknown: "unknown"
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
+ /** Who the named class is charged to. */
87
+ function failureBlame(failureClass) {
88
+ return FAILURE_BLAME[failureClass];
89
+ }
90
+ /**
91
+ * The default ordered reason rules, measured against the transport death
92
+ * strings this stack records — runtime settle reasons, bridge errors, sandbox
93
+ * provisioning errors, and provider stream errors.
94
+ *
95
+ * A consumer with a different transport passes its own set to
96
+ * `classifyFailureReason`; nothing here is a gate.
97
+ */
98
+ const DEFAULT_FAILURE_REASON_RULES = [
99
+ {
100
+ failureClass: "bridge_unreachable",
101
+ pattern: /ECONNREFUSED|disconnected before terminal acknowledgement|bridge .* unreachable/i
102
+ },
103
+ {
104
+ failureClass: "bridge_lane_saturated",
105
+ pattern: /acquire timeout after \d+ms|in_flight=\d+\/\d+/i
106
+ },
107
+ {
108
+ failureClass: "router_usage_mismatch",
109
+ pattern: /did not match its recorded usage/i
110
+ },
111
+ {
112
+ failureClass: "session_profile_conflict",
113
+ pattern: /bound to a different AgentProfile|profile materialization changed across session turns/i
114
+ },
115
+ {
116
+ failureClass: "runtime_restart",
117
+ pattern: /agent runtime restarted/i
118
+ },
119
+ {
120
+ failureClass: "root_driver_failed",
121
+ pattern: /root driver failed/i
122
+ },
123
+ {
124
+ failureClass: "box_provision_failure",
125
+ pattern: /Sandbox create did not complete within|failed to (create|provision) (a )?box|box .*: (create|provision) failed/i
126
+ },
127
+ {
128
+ failureClass: "box_teardown_failure",
129
+ pattern: /teardown reported destroyed=false/i
130
+ },
131
+ {
132
+ failureClass: "profile_refused",
133
+ pattern: /workspace materialization failed|cannot replace its harness's system prompt|has no explicit entry in .*models\.json|conflicts with agent_profile\.model/i
134
+ },
135
+ {
136
+ failureClass: "empty_completion",
137
+ pattern: /without emitting any visible output/i
138
+ },
139
+ {
140
+ failureClass: "stream_protocol_error",
141
+ pattern: /JSON error injected into SSE stream/i
142
+ },
143
+ {
144
+ failureClass: "stream_incomplete",
145
+ pattern: /Prompt stream ended before a terminal event/i
146
+ },
147
+ {
148
+ failureClass: "message_sealed",
149
+ pattern: /already rolled up \(sealed\)/i
150
+ },
151
+ {
152
+ failureClass: "process_killed",
153
+ pattern: /killed by SIGKILL|exited with code null/i
154
+ },
155
+ {
156
+ failureClass: "cancelled",
157
+ pattern: /cancelled by user/i
158
+ },
159
+ {
160
+ failureClass: "terminated",
161
+ pattern: /(^|: )terminated\b/i
162
+ },
163
+ {
164
+ failureClass: "budget_exceeded",
165
+ pattern: /budget pool: ticket \d+ spent/i
166
+ },
167
+ {
168
+ failureClass: "timeout",
169
+ pattern: /deadline|timed out|timeout/i
170
+ },
171
+ {
172
+ failureClass: "traversal_cap_exhausted",
173
+ pattern: /traversal|iteration cap|exhausted/i
174
+ }
175
+ ];
176
+ /**
177
+ * Name the failure one reason string describes.
178
+ *
179
+ * This is the entry point for a run that died before it produced a span: a
180
+ * terminal record, a settle row, a spawn journal line. An unmatched reason is
181
+ * never dropped — it returns `unknown` and keeps the text, so a new failure
182
+ * mode shows up as a named gap instead of a silent bucket. An absent reason
183
+ * returns `unreported`, which is a different fact: the record itself is
184
+ * incomplete.
185
+ */
186
+ function classifyFailureReason(reason, rules = DEFAULT_FAILURE_REASON_RULES) {
187
+ const text = String(reason ?? "").trim();
188
+ if (text === "") return {
189
+ failureClass: "unreported",
190
+ blame: FAILURE_BLAME.unreported,
191
+ reason: ""
192
+ };
193
+ for (const rule of rules) if (rule.pattern.test(text)) return {
194
+ failureClass: rule.failureClass,
195
+ blame: rule.blame ?? FAILURE_BLAME[rule.failureClass],
196
+ reason: text
197
+ };
198
+ return {
199
+ failureClass: "unknown",
200
+ blame: FAILURE_BLAME.unknown,
201
+ reason: text
202
+ };
203
+ }
204
+ const DEFAULT_RULES = [
205
+ {
206
+ id: "explicit-outcome",
207
+ match: ({ run }) => {
208
+ const fc = run.outcome?.failureClass;
209
+ if (fc && fc !== "unknown") return {
210
+ failureClass: fc,
211
+ reason: "outcome.failureClass set explicitly"
212
+ };
213
+ return null;
214
+ }
215
+ },
216
+ {
217
+ id: "knowledge-readiness-blocked",
218
+ match: ({ events }) => {
219
+ const event = events.find((e) => e.kind === "custom" && e.payload.kind === "readiness_scored" && e.payload.passed === false);
220
+ return event ? {
221
+ failureClass: "knowledge_readiness_blocked",
222
+ reason: "knowledge readiness report blocked execution",
223
+ triggerEventId: event.eventId
224
+ } : null;
225
+ }
226
+ },
227
+ {
228
+ id: "bad-integration-manifest",
229
+ match: ({ events }) => {
230
+ const event = events.find((e) => e.kind === "custom" && (e.payload.kind === "integration_manifest_validated" && e.payload.valid === false || e.payload.kind === "integration_invoke_failed" && e.payload.code === "manifest_invalid"));
231
+ return event ? {
232
+ failureClass: "bad_integration_manifest",
233
+ reason: "integration manifest validation failed before launch",
234
+ triggerEventId: event.eventId
235
+ } : null;
236
+ }
237
+ },
238
+ {
239
+ id: "missing-integration-connection",
240
+ match: ({ events }) => {
241
+ const event = events.find((e) => e.kind === "custom" && e.payload.kind === "integration_manifest_resolved" && hasResolutionStatus(e.payload, "missing_connection"));
242
+ return event ? {
243
+ failureClass: "missing_integration_connection",
244
+ reason: "required integration connection was missing",
245
+ triggerEventId: event.eventId
246
+ } : null;
247
+ }
248
+ },
249
+ {
250
+ id: "missing-integration-scope",
251
+ match: ({ events }) => {
252
+ const event = events.find((e) => e.kind === "custom" && (e.payload.kind === "integration_manifest_resolved" && hasMissingScopes(e.payload) || e.payload.kind === "integration_invoke_failed" && e.payload.code === "scope_denied"));
253
+ return event ? {
254
+ failureClass: "missing_integration_scope",
255
+ reason: "integration grant or connection lacks required scopes",
256
+ triggerEventId: event.eventId
257
+ } : null;
258
+ }
259
+ },
260
+ {
261
+ id: "integration-approval-required",
262
+ match: ({ events }) => {
263
+ const event = events.find((e) => e.kind === "custom" && (e.payload.kind === "integration_invoke" && e.payload.status === "approval_required" || e.payload.kind === "integration_invoke_failed" && e.payload.code === "approval_required" || e.payload.kind === "integration_approval_required"));
264
+ return event ? {
265
+ failureClass: "integration_approval_required",
266
+ reason: "integration write paused for user approval",
267
+ triggerEventId: event.eventId
268
+ } : null;
269
+ }
270
+ },
271
+ {
272
+ id: "integration-auth-expired",
273
+ match: ({ events }) => {
274
+ const event = events.find((e) => e.kind === "custom" && e.payload.kind === "integration_invoke_failed" && (e.payload.code === "auth_expired" || e.payload.code === "connection_not_active" || e.payload.code === "capability_expired" || e.payload.status === "expired"));
275
+ return event ? {
276
+ failureClass: "integration_auth_expired",
277
+ reason: "integration connection or capability expired",
278
+ triggerEventId: event.eventId
279
+ } : null;
280
+ }
281
+ },
282
+ {
283
+ id: "unsafe-integration-write-denied",
284
+ match: ({ events }) => {
285
+ const event = events.find((e) => e.kind === "custom" && e.payload.kind === "integration_invoke_failed" && (e.payload.code === "unsafe_write_denied" || e.payload.code === "policy_denied" || e.payload.code === "action_denied"));
286
+ return event ? {
287
+ failureClass: "unsafe_integration_write_denied",
288
+ reason: "integration write was denied by policy or capability scope",
289
+ triggerEventId: event.eventId
290
+ } : null;
291
+ }
292
+ },
293
+ {
294
+ id: "integration-provider-failure",
295
+ match: ({ events }) => {
296
+ const event = events.find((e) => e.kind === "custom" && e.payload.kind === "integration_invoke_failed" && ![
297
+ "scope_denied",
298
+ "approval_required",
299
+ "auth_expired",
300
+ "connection_not_active",
301
+ "capability_expired",
302
+ "unsafe_write_denied",
303
+ "policy_denied",
304
+ "action_denied",
305
+ "manifest_invalid"
306
+ ].includes(String(e.payload.code)));
307
+ return event ? {
308
+ failureClass: "integration_provider_failure",
309
+ reason: "integration provider invocation failed",
310
+ triggerEventId: event.eventId
311
+ } : null;
312
+ }
313
+ },
314
+ {
315
+ id: "missing-credentials",
316
+ match: ({ events }) => {
317
+ const event = events.find((e) => e.kind === "custom" && e.payload.kind === "knowledge_gap" && e.payload.category === "credential_or_secret");
318
+ return event ? {
319
+ failureClass: "missing_credentials",
320
+ reason: "required credential or secret was missing",
321
+ triggerEventId: event.eventId
322
+ } : null;
323
+ }
324
+ },
325
+ {
326
+ id: "bad-retrieval",
327
+ match: ({ run, spans }) => {
328
+ if (run.outcome?.pass !== false) return null;
329
+ const retrieval = spans.find((s) => s.kind === "retrieval" && (s.hits.length === 0 || s.hits.every((hit) => hit.score <= 0)));
330
+ return retrieval ? {
331
+ failureClass: "bad_retrieval",
332
+ reason: "retrieval returned no useful hits for a failed run",
333
+ triggerSpanId: retrieval.spanId
334
+ } : null;
335
+ }
336
+ },
337
+ {
338
+ id: "insufficient-evidence",
339
+ match: ({ events }) => {
340
+ const event = events.find((e) => e.kind === "custom" && e.payload.kind === "knowledge_gap" && e.payload.reason === "insufficient_evidence");
341
+ return event ? {
342
+ failureClass: "insufficient_evidence",
343
+ reason: "task proceeded with insufficient supporting evidence",
344
+ triggerEventId: event.eventId
345
+ } : null;
346
+ }
347
+ },
348
+ {
349
+ id: "contradictory-evidence",
350
+ match: ({ events }) => {
351
+ const event = events.find((e) => e.kind === "custom" && e.payload.kind === "knowledge_gap" && e.payload.reason === "contradictory_evidence");
352
+ return event ? {
353
+ failureClass: "contradictory_evidence",
354
+ reason: "supporting evidence contradicted itself",
355
+ triggerEventId: event.eventId
356
+ } : null;
357
+ }
358
+ },
359
+ {
360
+ id: "budget-breach",
361
+ match: ({ events }) => {
362
+ const breach = events.find((e) => e.kind === "budget_breach");
363
+ return breach ? {
364
+ failureClass: "budget_exceeded",
365
+ reason: `budget breached on ${breach.payload.dimension ?? "unknown dimension"}`,
366
+ triggerEventId: breach.eventId
367
+ } : null;
368
+ }
369
+ },
370
+ {
371
+ id: "policy-violation",
372
+ match: ({ events }) => {
373
+ const e = events.find((x) => x.kind === "policy_violation");
374
+ return e ? {
375
+ failureClass: "policy_violation",
376
+ reason: "policy_violation event emitted",
377
+ triggerEventId: e.eventId
378
+ } : null;
379
+ }
380
+ },
381
+ {
382
+ id: "sandbox-failure",
383
+ match: ({ spans }) => {
384
+ const s = spans.find((x) => x.kind === "sandbox" && typeof x.exitCode === "number" && x.exitCode !== 0);
385
+ if (!s) return null;
386
+ return {
387
+ failureClass: "sandbox_failure",
388
+ reason: `sandbox exited ${s.exitCode}`,
389
+ triggerSpanId: s.spanId
390
+ };
391
+ }
392
+ },
393
+ {
394
+ id: "timeout",
395
+ match: ({ run, events }) => {
396
+ if (run.status !== "aborted") return null;
397
+ const hasTimeout = events.some((e) => e.kind === "error" && String(e.payload.reason ?? "").toLowerCase().includes("timeout"));
398
+ const note = (run.outcome?.notes ?? "").toLowerCase();
399
+ if (hasTimeout || note.includes("timeout") || note.includes("deadline")) return {
400
+ failureClass: "timeout",
401
+ reason: "timeout signal observed"
402
+ };
403
+ return null;
404
+ }
405
+ },
406
+ {
407
+ id: "tool-recovery-failure",
408
+ match: ({ spans }) => {
409
+ const tools = spans.filter((s) => s.kind === "tool");
410
+ const byTool = /* @__PURE__ */ new Map();
411
+ for (const t of tools) {
412
+ const name = t.toolName;
413
+ const arr = byTool.get(name) ?? [];
414
+ arr.push(t);
415
+ byTool.set(name, arr);
416
+ }
417
+ for (const [name, arr] of byTool) {
418
+ const errs = arr.filter((s) => s.status === "error");
419
+ if (errs.length >= 3 && errs.length === arr.length) return {
420
+ failureClass: "tool_recovery_failure",
421
+ reason: `${errs.length} consecutive errors on tool "${name}"`,
422
+ triggerSpanId: errs[errs.length - 1].spanId
423
+ };
424
+ }
425
+ return null;
426
+ }
427
+ },
428
+ {
429
+ id: "tool-selection-error",
430
+ match: ({ run, spans }) => {
431
+ if (run.outcome?.pass !== false) return null;
432
+ const hasToolsAvailable = spans.some((s) => s.kind === "agent" && s.attributes?.toolsAvailable !== void 0 && s.attributes?.toolsAvailable > 0);
433
+ const tools = spans.filter((s) => s.kind === "tool");
434
+ if (hasToolsAvailable && tools.length === 0) return {
435
+ failureClass: "tool_selection_error",
436
+ reason: "tools were available but none were called"
437
+ };
438
+ return null;
439
+ }
440
+ },
441
+ {
442
+ id: "format-drift",
443
+ match: ({ spans }) => {
444
+ const judge = spans.find((s) => s.kind === "judge" && s.dimension === "format" && s.score < .5);
445
+ return judge ? {
446
+ failureClass: "format_drift",
447
+ reason: "format judge scored below 0.5",
448
+ triggerSpanId: judge.spanId
449
+ } : null;
450
+ }
451
+ }
452
+ ];
453
+ function hasResolutionStatus(payload, status) {
454
+ if (status === "missing_connection" && stringArray(payload.missingConnections).length > 0) return true;
455
+ return resolutionItems(payload).some((item) => item.status === status);
456
+ }
457
+ function hasMissingScopes(payload) {
458
+ if (stringArray(payload.missingScopes).length > 0) return true;
459
+ return resolutionItems(payload).some((item) => Array.isArray(item.missingScopes) && item.missingScopes.length > 0);
460
+ }
461
+ function resolutionItems(payload) {
462
+ return [
463
+ ...records(payload.missing),
464
+ ...records(payload.optionalMissing),
465
+ ...records(payload.ready)
466
+ ];
467
+ }
468
+ function records(value) {
469
+ if (!Array.isArray(value)) return [];
470
+ return value.filter((item) => Boolean(item) && typeof item === "object" && !Array.isArray(item));
471
+ }
472
+ function stringArray(value) {
473
+ return Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
474
+ }
475
+ /**
476
+ * Classify the failure mode of a run using an ordered rule list.
477
+ *
478
+ * Structural rules run first, in their declared order. When none matches, the
479
+ * reason strings the run did record are classified with
480
+ * `classifyFailureReason`, so a run whose only evidence is a transport error
481
+ * on an error event is named instead of landing in `unknown`. Only a run that
482
+ * would already have returned `unknown` can change class this way.
483
+ */
484
+ function classifyFailure(ctx, rules = DEFAULT_RULES, reasonRules = DEFAULT_FAILURE_REASON_RULES) {
485
+ if (ctx.run.outcome?.pass !== false && ctx.run.status === "completed") return {
486
+ failureClass: "success",
487
+ blame: FAILURE_BLAME.success,
488
+ reason: "run completed with pass=true (or no explicit fail)"
489
+ };
490
+ for (const rule of rules) {
491
+ const hit = rule.match(ctx);
492
+ if (hit) return {
493
+ ...hit,
494
+ blame: hit.blame ?? FAILURE_BLAME[hit.failureClass]
495
+ };
496
+ }
497
+ for (const candidate of recordedReasons(ctx)) {
498
+ const classified = classifyFailureReason(candidate.text, reasonRules);
499
+ if (classified.failureClass === "unknown" || classified.failureClass === "unreported") continue;
500
+ return {
501
+ ...classified,
502
+ ...candidate.eventId === void 0 ? {} : { triggerEventId: candidate.eventId }
503
+ };
504
+ }
505
+ return {
506
+ failureClass: "unknown",
507
+ blame: FAILURE_BLAME.unknown,
508
+ reason: "no rule matched; run failed for unclassified reason"
509
+ };
510
+ }
511
+ /**
512
+ * The reason strings a failed run recorded, error events first because they
513
+ * sit closest to the failure, then the outcome notes.
514
+ */
515
+ function recordedReasons(ctx) {
516
+ const found = [];
517
+ for (const event of ctx.events) {
518
+ if (event.kind !== "error") continue;
519
+ for (const field of [
520
+ "reason",
521
+ "message",
522
+ "error"
523
+ ]) {
524
+ const value = event.payload[field];
525
+ if (typeof value === "string" && value.trim()) found.push({
526
+ text: value,
527
+ eventId: event.eventId
528
+ });
529
+ }
530
+ }
531
+ const notes = ctx.run.outcome?.notes;
532
+ if (typeof notes === "string" && notes.trim()) found.push({ text: notes });
533
+ return found;
534
+ }
535
+ //#endregion
536
+ export { classifyFailure as a, INFRA_FAILURE_BLAMES as i, DEFAULT_RULES as n, classifyFailureReason as o, FAILURE_BLAME as r, failureBlame as s, DEFAULT_FAILURE_REASON_RULES as t };
537
+
538
+ //# sourceMappingURL=failure-taxonomy-CjabTATj.js.map
@@ -0,0 +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":";;;;;;;;;;;;;AA2DA,MAAa,gBAA8D;CACzE,SAAS;CAGT,iBAAiB;CACjB,sBAAsB;CACtB,qBAAqB;CACrB,uBAAuB;CACvB,eAAe;CACf,uBAAuB;CACvB,qBAAqB;CACrB,kBAAkB;CAClB,iBAAiB;CACjB,cAAc;CACd,uBAAuB;CACvB,UAAU;CACV,cAAc;CACd,SAAS;CAET,iBAAiB;CAIjB,mBAAmB;CACnB,qBAAqB;CACrB,0BAA0B;CAC1B,yBAAyB;CACzB,qBAAqB;CACrB,eAAe;CACf,uBAAuB;CACvB,wBAAwB;CACxB,uBAAuB;CAIvB,qBAAqB;CACrB,gCAAgC;CAChC,0BAA0B;CAC1B,0BAA0B;CAC1B,6BAA6B;CAG7B,2BAA2B;CAC3B,+BAA+B;CAC/B,iCAAiC;CAGjC,8BAA8B;CAG9B,oBAAoB;CACpB,uBAAuB;CACvB,uBAAuB;CACvB,0BAA0B;CAC1B,iBAAiB;CACjB,oBAAoB;CACpB,uBAAuB;CACvB,sBAAsB;CAItB,iBAAiB;CAGjB,kBAAkB;CAClB,uBAAuB;CACvB,mBAAmB;CACnB,gBAAgB;CAChB,gBAAgB;CAChB,YAAY;CAMZ,WAAW;CAEX,yBAAyB;CAEzB,YAAY;CACZ,SAAS;AACX;;;;;;;;;;;;;;;;;AAkBA,MAAa,uCAAkD,IAAI,IAAkB,CACnF,WACA,UACF,CAAC;;AAGD,SAAgB,aAAa,cAA0C;CACrE,OAAO,cAAc;AACvB;;;;;;;;;AAqDA,MAAa,+BAA6D;CACxE;EACE,cAAc;EACd,SAAS;CACX;CACA;EACE,cAAc;EACd,SAAS;CACX;CACA;EAAE,cAAc;EAAyB,SAAS;CAAoC;CACtF;EACE,cAAc;EACd,SACE;CACJ;CACA;EAAE,cAAc;EAAmB,SAAS;CAA2B;CACvE;EAAE,cAAc;EAAsB,SAAS;CAAsB;CACrE;EACE,cAAc;EACd,SACE;CACJ;CACA;EAAE,cAAc;EAAwB,SAAS;CAAqC;CACtF;EACE,cAAc;EACd,SACE;CACJ;CACA;EAAE,cAAc;EAAoB,SAAS;CAAuC;CACpF;EAAE,cAAc;EAAyB,SAAS;CAAuC;CACzF;EACE,cAAc;EACd,SAAS;CACX;CACA;EAAE,cAAc;EAAkB,SAAS;CAAgC;CAC3E;EAAE,cAAc;EAAkB,SAAS;CAA2C;CACtF;EAAE,cAAc;EAAa,SAAS;CAAqB;CAC3D;EAAE,cAAc;EAAc,SAAS;CAAsB;CAC7D;EAAE,cAAc;EAAmB,SAAS;CAAiC;CAS7E;EAAE,cAAc;EAAW,SAAS;CAA8B;CAClE;EAAE,cAAc;EAA2B,SAAS;CAAqC;AAC3F;;;;;;;;;;;AAYA,SAAgB,sBACd,QACA,QAAsC,8BACf;CACvB,MAAM,OAAO,OAAO,UAAU,EAAE,CAAC,CAAC,KAAK;CACvC,IAAI,SAAS,IACX,OAAO;EAAE,cAAc;EAAc,OAAO,cAAc;EAAY,QAAQ;CAAG;CAEnF,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,QAAQ,KAAK,IAAI,GACxB,OAAO;EACL,cAAc,KAAK;EACnB,OAAO,KAAK,SAAS,cAAc,KAAK;EACxC,QAAQ;CACV;CAGJ,OAAO;EAAE,cAAc;EAAW,OAAO,cAAc;EAAS,QAAQ;CAAK;AAC/E;AAEA,MAAa,gBAA+B;CAE1C;EACE,IAAI;EACJ,QAAQ,EAAE,UAAU;GAClB,MAAM,KAAK,IAAI,SAAS;GACxB,IAAI,MAAM,OAAO,WACf,OAAO;IAAE,cAAc;IAAI,QAAQ;GAAsC;GAC3E,OAAO;EACT;CACF;CACA;EACE,IAAI;EACJ,QAAQ,EAAE,aAAa;GACrB,MAAM,QAAQ,OAAO,MAClB,MACC,EAAE,SAAS,YACX,EAAE,QAAQ,SAAS,sBACnB,EAAE,QAAQ,WAAW,KACzB;GACA,OAAO,QACH;IACE,cAAc;IACd,QAAQ;IACR,gBAAgB,MAAM;GACxB,IACA;EACN;CACF;CACA;EACE,IAAI;EACJ,QAAQ,EAAE,aAAa;GACrB,MAAM,QAAQ,OAAO,MAClB,MACC,EAAE,SAAS,aACT,EAAE,QAAQ,SAAS,oCAAoC,EAAE,QAAQ,UAAU,SAC1E,EAAE,QAAQ,SAAS,+BAClB,EAAE,QAAQ,SAAS,mBAC3B;GACA,OAAO,QACH;IACE,cAAc;IACd,QAAQ;IACR,gBAAgB,MAAM;GACxB,IACA;EACN;CACF;CACA;EACE,IAAI;EACJ,QAAQ,EAAE,aAAa;GACrB,MAAM,QAAQ,OAAO,MAClB,MACC,EAAE,SAAS,YACX,EAAE,QAAQ,SAAS,mCACnB,oBAAoB,EAAE,SAAS,oBAAoB,CACvD;GACA,OAAO,QACH;IACE,cAAc;IACd,QAAQ;IACR,gBAAgB,MAAM;GACxB,IACA;EACN;CACF;CACA;EACE,IAAI;EACJ,QAAQ,EAAE,aAAa;GACrB,MAAM,QAAQ,OAAO,MAClB,MACC,EAAE,SAAS,aACT,EAAE,QAAQ,SAAS,mCAAmC,iBAAiB,EAAE,OAAO,KAC/E,EAAE,QAAQ,SAAS,+BAA+B,EAAE,QAAQ,SAAS,eAC5E;GACA,OAAO,QACH;IACE,cAAc;IACd,QAAQ;IACR,gBAAgB,MAAM;GACxB,IACA;EACN;CACF;CACA;EACE,IAAI;EACJ,QAAQ,EAAE,aAAa;GACrB,MAAM,QAAQ,OAAO,MAClB,MACC,EAAE,SAAS,aACT,EAAE,QAAQ,SAAS,wBAAwB,EAAE,QAAQ,WAAW,uBAC/D,EAAE,QAAQ,SAAS,+BAClB,EAAE,QAAQ,SAAS,uBACrB,EAAE,QAAQ,SAAS,gCACzB;GACA,OAAO,QACH;IACE,cAAc;IACd,QAAQ;IACR,gBAAgB,MAAM;GACxB,IACA;EACN;CACF;CACA;EACE,IAAI;EACJ,QAAQ,EAAE,aAAa;GACrB,MAAM,QAAQ,OAAO,MAClB,MACC,EAAE,SAAS,YACX,EAAE,QAAQ,SAAS,gCAClB,EAAE,QAAQ,SAAS,kBAClB,EAAE,QAAQ,SAAS,2BACnB,EAAE,QAAQ,SAAS,wBACnB,EAAE,QAAQ,WAAW,UAC3B;GACA,OAAO,QACH;IACE,cAAc;IACd,QAAQ;IACR,gBAAgB,MAAM;GACxB,IACA;EACN;CACF;CACA;EACE,IAAI;EACJ,QAAQ,EAAE,aAAa;GACrB,MAAM,QAAQ,OAAO,MAClB,MACC,EAAE,SAAS,YACX,EAAE,QAAQ,SAAS,gCAClB,EAAE,QAAQ,SAAS,yBAClB,EAAE,QAAQ,SAAS,mBACnB,EAAE,QAAQ,SAAS,gBACzB;GACA,OAAO,QACH;IACE,cAAc;IACd,QAAQ;IACR,gBAAgB,MAAM;GACxB,IACA;EACN;CACF;CACA;EACE,IAAI;EACJ,QAAQ,EAAE,aAAa;GACrB,MAAM,QAAQ,OAAO,MAClB,MACC,EAAE,SAAS,YACX,EAAE,QAAQ,SAAS,+BACnB,CAAC;IACC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF,CAAC,CAAC,SAAS,OAAO,EAAE,QAAQ,IAAI,CAAC,CACrC;GACA,OAAO,QACH;IACE,cAAc;IACd,QAAQ;IACR,gBAAgB,MAAM;GACxB,IACA;EACN;CACF;CACA;EACE,IAAI;EACJ,QAAQ,EAAE,aAAa;GACrB,MAAM,QAAQ,OAAO,MAClB,MACC,EAAE,SAAS,YACX,EAAE,QAAQ,SAAS,mBACnB,EAAE,QAAQ,aAAa,sBAC3B;GACA,OAAO,QACH;IACE,cAAc;IACd,QAAQ;IACR,gBAAgB,MAAM;GACxB,IACA;EACN;CACF;CACA;EACE,IAAI;EACJ,QAAQ,EAAE,KAAK,YAAY;GACzB,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO;GACxC,MAAM,YAAY,MAAM,MACrB,MACC,EAAE,SAAS,gBAAgB,EAAE,KAAK,WAAW,KAAK,EAAE,KAAK,OAAO,QAAQ,IAAI,SAAS,CAAC,EAC1F;GACA,OAAO,YACH;IACE,cAAc;IACd,QAAQ;IACR,eAAe,UAAU;GAC3B,IACA;EACN;CACF;CACA;EACE,IAAI;EACJ,QAAQ,EAAE,aAAa;GACrB,MAAM,QAAQ,OAAO,MAClB,MACC,EAAE,SAAS,YACX,EAAE,QAAQ,SAAS,mBACnB,EAAE,QAAQ,WAAW,uBACzB;GACA,OAAO,QACH;IACE,cAAc;IACd,QAAQ;IACR,gBAAgB,MAAM;GACxB,IACA;EACN;CACF;CACA;EACE,IAAI;EACJ,QAAQ,EAAE,aAAa;GACrB,MAAM,QAAQ,OAAO,MAClB,MACC,EAAE,SAAS,YACX,EAAE,QAAQ,SAAS,mBACnB,EAAE,QAAQ,WAAW,wBACzB;GACA,OAAO,QACH;IACE,cAAc;IACd,QAAQ;IACR,gBAAgB,MAAM;GACxB,IACA;EACN;CACF;CAEA;EACE,IAAI;EACJ,QAAQ,EAAE,aAAa;GACrB,MAAM,SAAS,OAAO,MAAM,MAAM,EAAE,SAAS,eAAe;GAC5D,OAAO,SACH;IACE,cAAc;IACd,QAAQ,sBAAsB,OAAO,QAAQ,aAAa;IAC1D,gBAAgB,OAAO;GACzB,IACA;EACN;CACF;CAEA;EACE,IAAI;EACJ,QAAQ,EAAE,aAAa;GACrB,MAAM,IAAI,OAAO,MAAM,MAAM,EAAE,SAAS,kBAAkB;GAC1D,OAAO,IACH;IACE,cAAc;IACd,QAAQ;IACR,gBAAgB,EAAE;GACpB,IACA;EACN;CACF;CAEA;EACE,IAAI;EACJ,QAAQ,EAAE,YAAY;GACpB,MAAM,IAAI,MAAM,MACb,MAAM,EAAE,SAAS,aAAa,OAAO,EAAE,aAAa,YAAY,EAAE,aAAa,CAClF;GACA,IAAI,CAAC,GAAG,OAAO;GACf,OAAO;IACL,cAAc;IACd,QAAQ,kBAAmB,EAAyC;IACpE,eAAe,EAAE;GACnB;EACF;CACF;CAEA;EACE,IAAI;EACJ,QAAQ,EAAE,KAAK,aAAa;GAC1B,IAAI,IAAI,WAAW,WAAW,OAAO;GACrC,MAAM,aAAa,OAAO,MACvB,MACC,EAAE,SAAS,WACX,OAAO,EAAE,QAAQ,UAAU,EAAE,CAAC,CAC3B,YAAY,CAAC,CACb,SAAS,SAAS,CACzB;GACA,MAAM,QAAQ,IAAI,SAAS,SAAS,GAAA,CAAI,YAAY;GACpD,IAAI,cAAc,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,UAAU,GACpE,OAAO;IAAE,cAAc;IAAW,QAAQ;GAA0B;GAEtE,OAAO;EACT;CACF;CAEA;EACE,IAAI;EACJ,QAAQ,EAAE,YAAY;GACpB,MAAM,QAAQ,MAAM,QAAQ,MAAM,EAAE,SAAS,MAAM;GACnD,MAAM,yBAAS,IAAI,IAAoB;GACvC,KAAK,MAAM,KAAK,OAAO;IACrB,MAAM,OAAQ,EAAsC;IACpD,MAAM,MAAM,OAAO,IAAI,IAAI,KAAK,CAAC;IACjC,IAAI,KAAK,CAAC;IACV,OAAO,IAAI,MAAM,GAAG;GACtB;GACA,KAAK,MAAM,CAAC,MAAM,QAAQ,QAAQ;IAChC,MAAM,OAAO,IAAI,QAAQ,MAAM,EAAE,WAAW,OAAO;IACnD,IAAI,KAAK,UAAU,KAAK,KAAK,WAAW,IAAI,QAC1C,OAAO;KACL,cAAc;KACd,QAAQ,GAAG,KAAK,OAAO,+BAA+B,KAAK;KAC3D,eAAe,KAAK,KAAK,SAAS,EAAE,CAAE;IACxC;GAEJ;GACA,OAAO;EACT;CACF;CAEA;EACE,IAAI;EACJ,QAAQ,EAAE,KAAK,YAAY;GACzB,IAAI,IAAI,SAAS,SAAS,OAAO,OAAO;GACxC,MAAM,oBAAoB,MAAM,MAC7B,MACC,EAAE,SAAS,WACV,EAAE,YAAY,mBAA0C,KAAA,KACxD,EAAE,YAAY,iBAA4B,CAC/C;GACA,MAAM,QAAQ,MAAM,QAAQ,MAAM,EAAE,SAAS,MAAM;GACnD,IAAI,qBAAqB,MAAM,WAAW,GACxC,OAAO;IACL,cAAc;IACd,QAAQ;GACV;GAEF,OAAO;EACT;CACF;CAEA;EACE,IAAI;EACJ,QAAQ,EAAE,YAAY;GACpB,MAAM,QAAQ,MAAM,MACjB,MACC,EAAE,SAAS,WACV,EAAuC,cAAc,YACrD,EAAuC,QAAQ,EACpD;GACA,OAAO,QACH;IACE,cAAc;IACd,QAAQ;IACR,eAAe,MAAM;GACvB,IACA;EACN;CACF;AACF;AAEA,SAAS,oBAAoB,SAAkC,QAAyB;CACtF,IAAI,WAAW,wBAAwB,YAAY,QAAQ,kBAAkB,CAAC,CAAC,SAAS,GACtF,OAAO;CACT,OAAO,gBAAgB,OAAO,CAAC,CAAC,MAAM,SAAS,KAAK,WAAW,MAAM;AACvE;AAEA,SAAS,iBAAiB,SAA2C;CACnE,IAAI,YAAY,QAAQ,aAAa,CAAC,CAAC,SAAS,GAAG,OAAO;CAC1D,OAAO,gBAAgB,OAAO,CAAC,CAAC,MAC7B,SAAS,MAAM,QAAQ,KAAK,aAAa,KAAK,KAAK,cAAc,SAAS,CAC7E;AACF;AAEA,SAAS,gBAAgB,SAAkE;CACzF,OAAO;EACL,GAAG,QAAQ,QAAQ,OAAO;EAC1B,GAAG,QAAQ,QAAQ,eAAe;EAClC,GAAG,QAAQ,QAAQ,KAAK;CAC1B;AACF;AAEA,SAAS,QAAQ,OAAgD;CAC/D,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG,OAAO,CAAC;CACnC,OAAO,MAAM,QACV,SACC,QAAQ,IAAI,KAAK,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,CACpE;AACF;AAEA,SAAS,YAAY,OAA0B;CAC7C,OAAO,MAAM,QAAQ,KAAK,IACtB,MAAM,QAAQ,SAAyB,OAAO,SAAS,QAAQ,IAC/D,CAAC;AACP;;;;;;;;;;AAWA,SAAgB,gBACd,KACA,QAAuB,eACvB,cAA4C,8BACrB;CACvB,IAAI,IAAI,IAAI,SAAS,SAAS,SAAS,IAAI,IAAI,WAAW,aACxD,OAAO;EACL,cAAc;EACd,OAAO,cAAc;EACrB,QAAQ;CACV;CAEF,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,MAAM,KAAK,MAAM,GAAG;EAC1B,IAAI,KAAK,OAAO;GAAE,GAAG;GAAK,OAAO,IAAI,SAAS,cAAc,IAAI;EAAc;CAChF;CACA,KAAK,MAAM,aAAa,gBAAgB,GAAG,GAAG;EAC5C,MAAM,aAAa,sBAAsB,UAAU,MAAM,WAAW;EACpE,IAAI,WAAW,iBAAiB,aAAa,WAAW,iBAAiB,cAAc;EACvF,OAAO;GACL,GAAG;GACH,GAAI,UAAU,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,gBAAgB,UAAU,QAAQ;EACjF;CACF;CACA,OAAO;EACL,cAAc;EACd,OAAO,cAAc;EACrB,QAAQ;CACV;AACF;;;;;AAMA,SAAS,gBAAgB,KAAgE;CACvF,MAAM,QAAmD,CAAC;CAC1D,KAAK,MAAM,SAAS,IAAI,QAAQ;EAC9B,IAAI,MAAM,SAAS,SAAS;EAC5B,KAAK,MAAM,SAAS;GAAC;GAAU;GAAW;EAAO,GAAY;GAC3D,MAAM,QAAQ,MAAM,QAAQ;GAC5B,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,GAC1C,MAAM,KAAK;IAAE,MAAM;IAAO,SAAS,MAAM;GAAQ,CAAC;EAEtD;CACF;CACA,MAAM,QAAQ,IAAI,IAAI,SAAS;CAC/B,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,GAAG,MAAM,KAAK,EAAE,MAAM,MAAM,CAAC;CACzE,OAAO;AACT"}
@@ -1,9 +1,9 @@
1
- import { o as FailureClass } from "./schema-CR5cpjQ3.js";
2
- import { i as AnalystFinding, l as AnalystRunResult, p as EvidenceRef } from "./types-BjB2wZM9.js";
1
+ import { o as FailureClass } from "./schema-2g7trUwH.js";
2
+ import { i as AnalystFinding, l as AnalystRunResult, p as EvidenceRef } from "./types-Bay1dh2o.js";
3
3
  import { i as DatasetSplit, r as DatasetScenario } from "./dataset-DQqhOCPt.js";
4
- import { s as TraceStore } from "./store-BErPvYBr.js";
5
- import "./exact-types-BEHN7tnq.js";
6
- import { i as TraceEmitter } from "./emitter-Cs0egaFd.js";
4
+ import { s as TraceStore } from "./store-C4avFjIi.js";
5
+ import "./exact-types-CfpP2A4Z.js";
6
+ import { o as TraceEmitter } from "./emitter-HcCmFQl_.js";
7
7
  //#region src/control-runtime.d.ts
8
8
  type ControlSeverity = 'info' | 'warning' | 'error' | 'critical';
9
9
  type ControlActionFailureMode = 'continue' | 'stop';
@@ -394,4 +394,4 @@ declare function controlRunToFeedbackTrajectory<TState, TAction, TActionResult>(
394
394
  }): FeedbackTrajectory;
395
395
  //#endregion
396
396
  export { AnalystFindingDigest as A, ControlRunResult as B, createFeedbackTrajectory as C, renderPreferenceMemoryMarkdown as D, feedbackTrajectoryToOptimizerRow as E, ControlActionOutcome as F, StopDecision as G, ControlRuntimeError as H, ControlBudget as I, subjectiveEval as J, objectiveEval as K, ControlContext as L, AnalystRunDigest as M, analystFindingDigest as N, summarizePreferenceMemory as O, analystRunDigest as P, ControlDecision as R, controlRunToFeedbackTrajectory as S, feedbackTrajectoriesToOptimizerRows as T, ControlSeverity as U, ControlRuntimeConfig as V, ControlStep 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, runAgentControlLoop as q, FeedbackArtifactType as r, FeedbackLabelSource as s, AnalystFeedbackTrajectoryOptions as t, FeedbackSplitPolicy as u, ProposedSideEffect as v, feedbackTrajectoriesToDatasetScenarios as w, assignFeedbackSplit as x, analystRunToFeedbackTrajectory as y, ControlEvalResult as z };
397
- //# sourceMappingURL=feedback-trajectory-CytTR7u4.d.ts.map
397
+ //# sourceMappingURL=feedback-trajectory-B3ZSkfAq.d.ts.map