@tangle-network/agent-eval 0.187.1 → 0.188.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 (220) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/dist/adapters/http.d.ts +2 -2
  3. package/dist/{agent-profile-uAIQK3Nr.d.ts → agent-profile-CfbuZk8b.d.ts} +4 -4
  4. package/dist/{agent-profile-uAIQK3Nr.d.ts.map → agent-profile-CfbuZk8b.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 +6 -6
  8. package/dist/{analyze-runs-DapYZz02.d.ts → analyze-runs-CLz5O01x.d.ts} +5 -5
  9. package/dist/{analyze-runs-DapYZz02.d.ts.map → analyze-runs-CLz5O01x.d.ts.map} +1 -1
  10. package/dist/{benchmark-command-CERRH0E6.js → benchmark-command-CdUGku3W.js} +12 -12
  11. package/dist/benchmark-command-CdUGku3W.js.map +1 -0
  12. package/dist/benchmarks/index.d.ts +4 -4
  13. package/dist/benchmarks/index.js +3 -3
  14. package/dist/builder-eval/index.d.ts +3 -3
  15. package/dist/builder-eval/index.js +1 -1
  16. package/dist/campaign/index.d.ts +5 -5
  17. package/dist/campaign/index.js +5 -5
  18. package/dist/{campaign-DlxdTOvw.js → campaign-DZuysBbS.js} +6 -6
  19. package/dist/{campaign-DlxdTOvw.js.map → campaign-DZuysBbS.js.map} +1 -1
  20. package/dist/{chat-client-DqPqWzVV.js → chat-client-C4dg7Ng_.js} +2 -2
  21. package/dist/{chat-client-DqPqWzVV.js.map → chat-client-C4dg7Ng_.js.map} +1 -1
  22. package/dist/{chat-json-call-C-DnDxEy.js → chat-json-call-JVGbfx95.js} +2 -2
  23. package/dist/{chat-json-call-C-DnDxEy.js.map → chat-json-call-JVGbfx95.js.map} +1 -1
  24. package/dist/cli.js +4 -4
  25. package/dist/{client-DCc7a8ZC.d.ts → client-CFj9dfcn.d.ts} +4 -4
  26. package/dist/{client-DCc7a8ZC.d.ts.map → client-CFj9dfcn.d.ts.map} +1 -1
  27. package/dist/contract/index.d.ts +11 -11
  28. package/dist/contract/index.js +6 -6
  29. package/dist/{counterfactual-CLgrwhkY.d.ts → counterfactual-CPaWN99-.d.ts} +4 -4
  30. package/dist/{counterfactual-CLgrwhkY.d.ts.map → counterfactual-CPaWN99-.d.ts.map} +1 -1
  31. package/dist/{counterfactual-Bjq1mlUu.js → counterfactual-DtMWvn7D.js} +2 -2
  32. package/dist/{counterfactual-Bjq1mlUu.js.map → counterfactual-DtMWvn7D.js.map} +1 -1
  33. package/dist/{default-registry-DMxeb4GD.d.ts → default-registry-BLsGfnoO.d.ts} +6 -6
  34. package/dist/{default-registry-DMxeb4GD.d.ts.map → default-registry-BLsGfnoO.d.ts.map} +1 -1
  35. package/dist/{default-registry-Ca2IWH1X.js → default-registry-BtZ_t-9b.js} +2 -2
  36. package/dist/{default-registry-Ca2IWH1X.js.map → default-registry-BtZ_t-9b.js.map} +1 -1
  37. package/dist/{define-agent-eval-C0EqJ9Gz.js → define-agent-eval-ChtddasD.js} +3 -3
  38. package/dist/{define-agent-eval-C0EqJ9Gz.js.map → define-agent-eval-ChtddasD.js.map} +1 -1
  39. package/dist/{define-agent-eval-CGBwPPaq.d.ts → define-agent-eval-CsicmDxt.d.ts} +7 -7
  40. package/dist/{define-agent-eval-CGBwPPaq.d.ts.map → define-agent-eval-CsicmDxt.d.ts.map} +1 -1
  41. package/dist/diagnosis/index.d.ts +38 -96
  42. package/dist/diagnosis/index.d.ts.map +1 -1
  43. package/dist/diagnosis/index.js +83 -134
  44. package/dist/diagnosis/index.js.map +1 -1
  45. package/dist/{dspy-rlm-engine-BE9lCzzL.js → dspy-rlm-engine-sPX7B5ac.js} +3 -3
  46. package/dist/{dspy-rlm-engine-BE9lCzzL.js.map → dspy-rlm-engine-sPX7B5ac.js.map} +1 -1
  47. package/dist/emitter-DbMXUIVP.js +334 -0
  48. package/dist/emitter-DbMXUIVP.js.map +1 -0
  49. package/dist/{emitter-Cs0egaFd.d.ts → emitter-HcCmFQl_.d.ts} +37 -6
  50. package/dist/emitter-HcCmFQl_.d.ts.map +1 -0
  51. package/dist/{engine-DNlKhIm0.d.ts → engine-Gw2n1irt.d.ts} +15 -5
  52. package/dist/engine-Gw2n1irt.d.ts.map +1 -0
  53. package/dist/{eval-campaign-XFHEpN86.js → eval-campaign-CeotQ1ZR.js} +7 -4
  54. package/dist/{eval-campaign-XFHEpN86.js.map → eval-campaign-CeotQ1ZR.js.map} +1 -1
  55. package/dist/evaluation.d.ts +2 -2
  56. package/dist/{exact-types-BEHN7tnq.d.ts → exact-types-CrhPoDp8.d.ts} +2 -2
  57. package/dist/{exact-types-BEHN7tnq.d.ts.map → exact-types-CrhPoDp8.d.ts.map} +1 -1
  58. package/dist/experiment/index.d.ts +57 -3
  59. package/dist/experiment/index.d.ts.map +1 -1
  60. package/dist/experiment/index.js +119 -2
  61. package/dist/experiment/index.js.map +1 -1
  62. package/dist/{external-optimizer-process-BbhvXTFx.js → external-optimizer-process-D3BLpZyR.js} +2 -2
  63. package/dist/{external-optimizer-process-BbhvXTFx.js.map → external-optimizer-process-D3BLpZyR.js.map} +1 -1
  64. package/dist/{external-optimizer-subprocess-DMgmqTB6.js → external-optimizer-subprocess-BrfsgL92.js} +2 -2
  65. package/dist/{external-optimizer-subprocess-DMgmqTB6.js.map → external-optimizer-subprocess-BrfsgL92.js.map} +1 -1
  66. package/dist/{failure-cluster-OldNRoAt.d.ts → failure-cluster-CbgEDcFJ.d.ts} +3 -3
  67. package/dist/{failure-cluster-OldNRoAt.d.ts.map → failure-cluster-CbgEDcFJ.d.ts.map} +1 -1
  68. package/dist/failure-taxonomy-CjabTATj.js +538 -0
  69. package/dist/failure-taxonomy-CjabTATj.js.map +1 -0
  70. package/dist/{feedback-trajectory-CytTR7u4.d.ts → feedback-trajectory-BJi4t3Vf.d.ts} +6 -6
  71. package/dist/{feedback-trajectory-CytTR7u4.d.ts.map → feedback-trajectory-BJi4t3Vf.d.ts.map} +1 -1
  72. package/dist/hosted/index.d.ts +2 -2
  73. package/dist/{index-CKZa_rnt.d.ts → index-B-s8qDRJ.d.ts} +2 -2
  74. package/dist/{index-CKZa_rnt.d.ts.map → index-B-s8qDRJ.d.ts.map} +1 -1
  75. package/dist/{index-YZrbnBSV.d.ts → index-BD1oSbHr.d.ts} +11 -11
  76. package/dist/{index-YZrbnBSV.d.ts.map → index-BD1oSbHr.d.ts.map} +1 -1
  77. package/dist/{index-vYNHCV2G.d.ts → index-Ca0_IjFu.d.ts} +7 -7
  78. package/dist/{index-vYNHCV2G.d.ts.map → index-Ca0_IjFu.d.ts.map} +1 -1
  79. package/dist/{index-BRsrfSHT.d.ts → index-eTTnPe3r.d.ts} +9 -9
  80. package/dist/{index-BRsrfSHT.d.ts.map → index-eTTnPe3r.d.ts.map} +1 -1
  81. package/dist/index.d.ts +383 -68
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +1482 -207
  84. package/dist/index.js.map +1 -1
  85. package/dist/{insight-report-DpOo-3iL.d.ts → insight-report-DeE1solA.d.ts} +4 -4
  86. package/dist/{insight-report-DpOo-3iL.d.ts.map → insight-report-DeE1solA.d.ts.map} +1 -1
  87. package/dist/{integrity-Cy9WHAtb.js → integrity-BFP4kjGj.js} +6 -1
  88. package/dist/integrity-BFP4kjGj.js.map +1 -0
  89. package/dist/{integrity-rGOfSUle.d.ts → integrity-CaeNeusS.d.ts} +4 -4
  90. package/dist/integrity-CaeNeusS.d.ts.map +1 -0
  91. package/dist/jev.d.ts +2 -2
  92. package/dist/{kind-factory-V79Hw0AU.js → kind-factory-g1ROw67A.js} +15 -4
  93. package/dist/{kind-factory-V79Hw0AU.js.map → kind-factory-g1ROw67A.js.map} +1 -1
  94. package/dist/{llm-client-DDhZ29Vm.js → llm-client-DF9bPNYA.js} +2 -2
  95. package/dist/{llm-client-DDhZ29Vm.js.map → llm-client-DF9bPNYA.js.map} +1 -1
  96. package/dist/{llm-judge-BVso5x-u.js → llm-judge-DF18J3CR.js} +9 -9
  97. package/dist/llm-judge-DF18J3CR.js.map +1 -0
  98. package/dist/{matrix-CPKsRY8Y.d.ts → matrix-BvA1WUpj.d.ts} +2 -2
  99. package/dist/{matrix-CPKsRY8Y.d.ts.map → matrix-BvA1WUpj.d.ts.map} +1 -1
  100. package/dist/meta-eval/index.d.ts +4 -4
  101. package/dist/{mint-BI14xehJ.d.ts → mint-CJFSYBIU.d.ts} +3 -3
  102. package/dist/{mint-BI14xehJ.d.ts.map → mint-CJFSYBIU.d.ts.map} +1 -1
  103. package/dist/multishot/golden/index.d.ts +1 -1
  104. package/dist/multishot/index.d.ts +2 -2
  105. package/dist/openapi.json +1 -1
  106. package/dist/pipelines/index.d.ts +67 -12
  107. package/dist/pipelines/index.d.ts.map +1 -1
  108. package/dist/pipelines/index.js +178 -41
  109. package/dist/pipelines/index.js.map +1 -1
  110. package/dist/{prime-protocol-CDBcL9NM.d.ts → prime-protocol-CF8Z43Fj.d.ts} +2 -2
  111. package/dist/{prime-protocol-CDBcL9NM.d.ts.map → prime-protocol-CF8Z43Fj.d.ts.map} +1 -1
  112. package/dist/{produced-state-Cn9ECr4v.js → produced-state-xsMMjYVc.js} +3 -3
  113. package/dist/{produced-state-Cn9ECr4v.js.map → produced-state-xsMMjYVc.js.map} +1 -1
  114. package/dist/{query-D6W6MaGx.d.ts → query-DBUQhehH.d.ts} +3 -3
  115. package/dist/{query-D6W6MaGx.d.ts.map → query-DBUQhehH.d.ts.map} +1 -1
  116. package/dist/random-DGEyr3zG.d.ts +83 -0
  117. package/dist/random-DGEyr3zG.d.ts.map +1 -0
  118. package/dist/{raw-provider-sink-BQd7mzyT.js → raw-provider-sink-C96CcqeG.js} +19 -56
  119. package/dist/raw-provider-sink-C96CcqeG.js.map +1 -0
  120. package/dist/redact-DPoH1-OW.d.ts +158 -0
  121. package/dist/redact-DPoH1-OW.d.ts.map +1 -0
  122. package/dist/redact-DxwlUAvh.js +824 -0
  123. package/dist/redact-DxwlUAvh.js.map +1 -0
  124. package/dist/{registry-D5Ly3GRV.d.ts → registry-BM2Kdk8T.d.ts} +4 -4
  125. package/dist/{registry-D5Ly3GRV.d.ts.map → registry-BM2Kdk8T.d.ts.map} +1 -1
  126. package/dist/{release-confidence-CSp3MsU4.d.ts → release-confidence-CG4Z9QLB.d.ts} +4 -4
  127. package/dist/{release-confidence-CSp3MsU4.d.ts.map → release-confidence-CG4Z9QLB.d.ts.map} +1 -1
  128. package/dist/{report-command-CSTjzFGY.js → report-command-DKJ_yAIj.js} +21 -12
  129. package/dist/{report-command-CSTjzFGY.js.map → report-command-DKJ_yAIj.js.map} +1 -1
  130. package/dist/reporting.d.ts +3 -3
  131. package/dist/{researcher-D7E92STT.d.ts → researcher-Bjcd_8T_.d.ts} +7 -7
  132. package/dist/{researcher-D7E92STT.d.ts.map → researcher-Bjcd_8T_.d.ts.map} +1 -1
  133. package/dist/{reward-hacking-BIQ2BWLG.d.ts → reward-hacking-DrKXJtgH.d.ts} +2 -2
  134. package/dist/{reward-hacking-BIQ2BWLG.d.ts.map → reward-hacking-DrKXJtgH.d.ts.map} +1 -1
  135. package/dist/rl.d.ts +8 -8
  136. package/dist/rl.js +1 -1
  137. package/dist/rollout/index.d.ts +2 -2
  138. package/dist/{rubric-predictive-validity-CTU8y8Cv.d.ts → rubric-predictive-validity-B14yBAmM.d.ts} +2 -2
  139. package/dist/{rubric-predictive-validity-CTU8y8Cv.d.ts.map → rubric-predictive-validity-B14yBAmM.d.ts.map} +1 -1
  140. package/dist/{run-record-D9wS35fK.d.ts → run-record-xEULpgML.d.ts} +2 -2
  141. package/dist/{run-record-D9wS35fK.d.ts.map → run-record-xEULpgML.d.ts.map} +1 -1
  142. package/dist/{schema-CR5cpjQ3.d.ts → schema-2g7trUwH.d.ts} +17 -2
  143. package/dist/schema-2g7trUwH.d.ts.map +1 -0
  144. package/dist/schema-CSf6qWgZ.js.map +1 -1
  145. package/dist/{semantic-concept-judge-Cnt0TWp0.js → semantic-concept-judge-70LxrCSL.js} +5 -5
  146. package/dist/{semantic-concept-judge-Cnt0TWp0.js.map → semantic-concept-judge-70LxrCSL.js.map} +1 -1
  147. package/dist/{series-convergence-BnMs_uAr.d.ts → series-convergence-DY7ha0kx.d.ts} +2 -2
  148. package/dist/{series-convergence-BnMs_uAr.d.ts.map → series-convergence-DY7ha0kx.d.ts.map} +1 -1
  149. package/dist/{server-DmpcFiVK.js → server-C8XvqCg8.js} +2 -2
  150. package/dist/{server-DmpcFiVK.js.map → server-C8XvqCg8.js.map} +1 -1
  151. package/dist/{skillopt-optimization-method-Cc9SVLqi.js → skillopt-optimization-method-C60h0Got.js} +5 -5
  152. package/dist/{skillopt-optimization-method-Cc9SVLqi.js.map → skillopt-optimization-method-C60h0Got.js.map} +1 -1
  153. package/dist/spans-W0o8pbEg.d.ts +60 -0
  154. package/dist/spans-W0o8pbEg.d.ts.map +1 -0
  155. package/dist/{statistical-heldout-DTmhTW8P.d.ts → statistical-heldout-CPv-y6sK.d.ts} +3 -3
  156. package/dist/{statistical-heldout-DTmhTW8P.d.ts.map → statistical-heldout-CPv-y6sK.d.ts.map} +1 -1
  157. package/dist/{store-BErPvYBr.d.ts → store-C4avFjIi.d.ts} +2 -2
  158. package/dist/{store-BErPvYBr.d.ts.map → store-C4avFjIi.d.ts.map} +1 -1
  159. package/dist/{store-otlp-2gYCy-v0.js → store-otlp-DPgzSQKS.js} +2 -2
  160. package/dist/{store-otlp-2gYCy-v0.js.map → store-otlp-DPgzSQKS.js.map} +1 -1
  161. package/dist/{store-tool-spans-B3bX9yqn.d.ts → store-tool-spans-C2lLwDzg.d.ts} +9 -54
  162. package/dist/store-tool-spans-C2lLwDzg.d.ts.map +1 -0
  163. package/dist/{store-tool-spans-B1e6Auc2.js → store-tool-spans-ClPxcvh2.js} +4 -4
  164. package/dist/{store-tool-spans-B1e6Auc2.js.map → store-tool-spans-ClPxcvh2.js.map} +1 -1
  165. package/dist/storyboard/index.d.ts +1 -1
  166. package/dist/{summary-report-Iy6kXo8x.d.ts → summary-report-SNvJoAvD.d.ts} +3 -3
  167. package/dist/{summary-report-Iy6kXo8x.d.ts.map → summary-report-SNvJoAvD.d.ts.map} +1 -1
  168. package/dist/supervisor-run/index.d.ts.map +1 -1
  169. package/dist/supervisor-run/index.js +1 -1
  170. package/dist/{tool-groups-veQYPiTy.d.ts → tool-groups-CCQqAa16.d.ts} +3 -3
  171. package/dist/tool-groups-CCQqAa16.d.ts.map +1 -0
  172. package/dist/{tool-waste-nbHPAxei.js → tool-waste-CJDfxH45.js} +3 -537
  173. package/dist/tool-waste-CJDfxH45.js.map +1 -0
  174. package/dist/{tool-waste-D23I0zWm.d.ts → tool-waste-CP5DO383.d.ts} +4 -4
  175. package/dist/{tool-waste-D23I0zWm.d.ts.map → tool-waste-CP5DO383.d.ts.map} +1 -1
  176. package/dist/trace-repair/index.d.ts +2 -2
  177. package/dist/traces.d.ts +12 -11
  178. package/dist/traces.d.ts.map +1 -1
  179. package/dist/traces.js +8 -8
  180. package/dist/{trajectory-D7qrNvaN.d.ts → trajectory-Y1fmdlw7.d.ts} +3 -3
  181. package/dist/{trajectory-D7qrNvaN.d.ts.map → trajectory-Y1fmdlw7.d.ts.map} +1 -1
  182. package/dist/trajectory-replay/index.d.ts +3 -3
  183. package/dist/trajectory-replay/index.js +2 -2
  184. package/dist/{types--18oHwVF.d.ts → types-5ak2PqnJ.d.ts} +3 -3
  185. package/dist/{types--18oHwVF.d.ts.map → types-5ak2PqnJ.d.ts.map} +1 -1
  186. package/dist/{types-BTRcIqFr.d.ts → types-B1vDZ694.d.ts} +4 -4
  187. package/dist/{types-BTRcIqFr.d.ts.map → types-B1vDZ694.d.ts.map} +1 -1
  188. package/dist/{types-CBbLtr2J.d.ts → types-C0bWoSKC.d.ts} +10 -11
  189. package/dist/types-C0bWoSKC.d.ts.map +1 -0
  190. package/dist/{types-BjB2wZM9.d.ts → types-DDp2Mb8Y.d.ts} +3 -3
  191. package/dist/{types-BjB2wZM9.d.ts.map → types-DDp2Mb8Y.d.ts.map} +1 -1
  192. package/dist/wire/index.d.ts +3 -3
  193. package/dist/wire/index.js +1 -1
  194. package/docs/diagnosis.md +2 -3
  195. package/docs/eval-surface-map.md +1 -1
  196. package/docs/experiment.md +8 -1
  197. package/docs/redaction.md +59 -0
  198. package/docs/trace-contracts.md +102 -0
  199. package/docs/verdicts.md +1 -1
  200. package/package.json +3 -2
  201. package/dist/benchmark-command-CERRH0E6.js.map +0 -1
  202. package/dist/emitter-Cs0egaFd.d.ts.map +0 -1
  203. package/dist/emitter-DeQHiDMm.js +0 -257
  204. package/dist/emitter-DeQHiDMm.js.map +0 -1
  205. package/dist/engine-DNlKhIm0.d.ts.map +0 -1
  206. package/dist/experiment-tracker-BKEumQug.js +0 -280
  207. package/dist/experiment-tracker-BKEumQug.js.map +0 -1
  208. package/dist/experiment-tracker-URRGP9ek.d.ts +0 -237
  209. package/dist/experiment-tracker-URRGP9ek.d.ts.map +0 -1
  210. package/dist/integrity-Cy9WHAtb.js.map +0 -1
  211. package/dist/integrity-rGOfSUle.d.ts.map +0 -1
  212. package/dist/llm-judge-BVso5x-u.js.map +0 -1
  213. package/dist/raw-provider-sink-BQd7mzyT.js.map +0 -1
  214. package/dist/redact-7Aq1ukl-.js +0 -107
  215. package/dist/redact-7Aq1ukl-.js.map +0 -1
  216. package/dist/schema-CR5cpjQ3.d.ts.map +0 -1
  217. package/dist/store-tool-spans-B3bX9yqn.d.ts.map +0 -1
  218. package/dist/tool-groups-veQYPiTy.d.ts.map +0 -1
  219. package/dist/tool-waste-nbHPAxei.js.map +0 -1
  220. package/dist/types-CBbLtr2J.d.ts.map +0 -1
@@ -1,237 +0,0 @@
1
- import { p as EvidenceRef } from "./types-BjB2wZM9.js";
2
- //#region src/statistics/power-and-mde.d.ts
3
- /**
4
- * Required N per arm for a two-sample comparison at target effect size,
5
- * alpha, and power. Normal-approximation formula:
6
- * n = 2 * ( (z_{1-α/2} + z_{1-β}) / d )^2
7
- * where d is Cohen's d. Returns Infinity for effect ≤ 0.
8
- */
9
- declare function requiredSampleSize(opts: {
10
- effect: number;
11
- alpha?: number;
12
- power?: number;
13
- twoSided?: boolean;
14
- }): number;
15
- /**
16
- * Required number of paired observations for a target Cohen's dz.
17
- * Unlike the independent-groups formula, this has no two-arm factor of two.
18
- *
19
- * Normal quantiles with no t correction, so treat the result as a LOWER bound:
20
- * it returns 32 where the exact t-based answer is 34 at dz = 0.5, and 13 where
21
- * it is 15 at dz = 0.8 — a 6–13 % shortfall precisely in the range a caller
22
- * consults to decide whether 3–10 repetitions suffice.
23
- */
24
- declare function requiredPairedSampleSize(opts: {
25
- effect: number;
26
- alpha?: number;
27
- power?: number;
28
- twoSided?: boolean;
29
- }): number;
30
- /**
31
- * Minimum detectable paired effect (standardised units) for a target paired
32
- * sample size: d_min = (z_{1-α/2} + z_β) / sqrt(n_paired). Multiply by
33
- * sd(deltas) for score units; treat as a lower bound — Wilcoxon and bootstrap
34
- * have asymptotic relative efficiency below 1 vs the t-test on heavy tails.
35
- */
36
- declare function pairedMde(opts: {
37
- nPaired: number;
38
- alpha?: number;
39
- power?: number;
40
- twoSided?: boolean;
41
- }): number;
42
- /**
43
- * Number of paired observations needed for a McNemar test to reach a target
44
- * power — the pre-registration companion to {@link mcnemar}. Parametrised by the
45
- * expected discordant-cell probabilities `p10` (P[treatment wins on a pair]) and
46
- * `p01` (P[control wins]); concordant pairs carry no information, so the count
47
- * is driven entirely by the discordant rate. Lachin's (1992) asymptotic normal
48
- * approximation: with discordant rate `pDisc = p10 + p01` and marginal effect
49
- * `δ = p10 − p01`,
50
- * n = ( z_{1-α/2}·√pDisc + z_{1-β}·√(pDisc − δ²) )² / δ².
51
- * Returns Infinity when there is no effect (p10 === p01). Asymptotic — at the
52
- * tiny discordant counts where the exact {@link mcnemar} differs from the normal
53
- * approximation, treat the result as a lower bound and prefer the discordant-pair
54
- * floor.
55
- */
56
- declare function mcnemarRequiredN(opts: {
57
- p10: number;
58
- p01: number;
59
- alpha?: number;
60
- power?: number;
61
- twoSided?: boolean;
62
- }): number;
63
- /**
64
- * Power of a McNemar test at a given number of paired observations, the inverse
65
- * of {@link mcnemarRequiredN} (same Lachin asymptotic model, same parameters).
66
- * Returns a value in [0, 1]; equals `alpha` when there is no effect.
67
- */
68
- declare function mcnemarPower(opts: {
69
- p10: number;
70
- p01: number;
71
- nPairs: number;
72
- alpha?: number;
73
- twoSided?: boolean;
74
- }): number;
75
- //#endregion
76
- //#region src/statistics/random.d.ts
77
- /** Tiny seedable PRNG (mulberry32) — deterministic resampling/shuffling, not
78
- * cryptographic. Exported so e-process shuffles and bootstrap resampling
79
- * share ONE PRNG implementation. Every distinct 32-bit seed gives a distinct
80
- * stream, including 0. */
81
- declare function mulberry32(seed: number): () => number;
82
- //#endregion
83
- //#region src/experiment-tracker.d.ts
84
- /** Verdict for one experiment relative to its parent. ITERATE is the neutral
85
- * "keep collecting reps / no parent to compare against" state. */
86
- type ExperimentVerdict = 'KEEP' | 'ITERATE' | 'NOISE' | 'REGRESSION';
87
- /** Git provenance for the working tree an experiment was run from. */
88
- interface ExperimentProvenance {
89
- /** Commit sha (short or full — the tracker does not interpret it). */
90
- commit: string;
91
- /** First line of the commit message. */
92
- message: string;
93
- /** Files changed vs the parent commit, or a marker like 'uncommitted'. */
94
- changedFiles: string[];
95
- }
96
- /** A single repetition of an experiment, carrying the score the verdict is
97
- * computed on plus any free-form per-rep metrics the consumer wants kept. */
98
- interface ExperimentRep {
99
- /** 0-indexed repetition number within the experiment. */
100
- rep: number;
101
- /** The score this rep is judged on (same scale as the thresholds). */
102
- score: number;
103
- /** ISO timestamp the rep completed. */
104
- timestamp: string;
105
- /** Stable execution/run identity that produced this score. */
106
- runId?: string;
107
- /** Mechanically resolvable trace, artifact, metric, or finding evidence. */
108
- evidence?: EvidenceRef[];
109
- /** Whether this rep passed the consumer's own gate — folded into `passRate`. */
110
- passed?: boolean;
111
- /** Free-form numeric metrics retained for later analysis. */
112
- metrics?: Record<string, number>;
113
- }
114
- interface ExperimentStats {
115
- median: number;
116
- mean: number;
117
- min: number;
118
- max: number;
119
- /** Inter-quartile range of the rep scores. */
120
- iqr: number;
121
- /** Population standard deviation of the rep scores. */
122
- stddev: number;
123
- /** Fraction of reps with `passed === true`, over reps that set `passed`.
124
- * null when no rep declared a pass/fail outcome. */
125
- passRate: number | null;
126
- /** Number of reps. */
127
- n: number;
128
- /** True when the sample is tight enough to trust for a verdict. */
129
- stable: boolean;
130
- }
131
- interface Experiment {
132
- /** Stable id for the experiment. */
133
- id: string;
134
- /** Free-form label / config descriptor. */
135
- label: string;
136
- /** Git provenance captured when the experiment was created. */
137
- provenance: ExperimentProvenance;
138
- /** Parent experiment id this candidate is compared against, if any. */
139
- parentId?: string;
140
- /** One-line summary of what changed from the parent. */
141
- changeSummary: string;
142
- reps: ExperimentRep[];
143
- stats: ExperimentStats;
144
- verdict: ExperimentVerdict;
145
- /** ISO timestamp the experiment was created. */
146
- createdAt: string;
147
- }
148
- interface ImprovementThresholds {
149
- /** medianDelta strictly above this ⇒ KEEP. Default 5. */
150
- keepThreshold?: number;
151
- /** medianDelta strictly below the negative of this ⇒ REGRESSION. Default 5. */
152
- regressionThreshold?: number;
153
- /** iqr at or above this ⇒ unstable. Default 10. */
154
- iqrUnstableAbove?: number;
155
- /** stddev at or above this ⇒ unstable. Default Infinity (iqr-only stability). */
156
- stddevUnstableAbove?: number;
157
- /** Reps required on BOTH candidate and parent before a verdict is rendered.
158
- * Default 3. */
159
- minRepsForVerdict?: number;
160
- }
161
- interface ImprovementVerdictResult {
162
- verdict: ExperimentVerdict;
163
- /** candidate.median − parent.median; null when no parent or insufficient reps. */
164
- medianDelta: number | null;
165
- /** Human-readable reason for the verdict — for dashboards and logs. */
166
- reason: string;
167
- }
168
- /**
169
- * Compute the N-rep statistics for a set of reps. Pure — no I/O. The `stable`
170
- * flag is the trust gate the verdict depends on: a sample whose spread exceeds
171
- * the configured bounds can't distinguish a real delta from run-to-run noise.
172
- */
173
- declare function computeExperimentStats(reps: ExperimentRep[], thresholds?: ImprovementThresholds): ExperimentStats;
174
- /**
175
- * Verdict for a candidate against its parent. Pure — operates on already-computed
176
- * stats. KEEP/REGRESSION require both sides to have `>= minRepsForVerdict` reps
177
- * AND the candidate to be `stable`; otherwise the result is NOISE (unstable) or
178
- * ITERATE (not enough reps / no parent).
179
- */
180
- declare function improvementVerdict(candidate: ExperimentStats, parent: ExperimentStats | null, thresholds?: ImprovementThresholds): ImprovementVerdictResult;
181
- /** Reads git provenance for the working tree. Inject a fake in tests; the
182
- * default implementation shells out to `git`. */
183
- type ProvenanceReader = () => ExperimentProvenance | Promise<ExperimentProvenance>;
184
- /** Persistence seam for the experiment log. Inject in-memory in tests; the
185
- * filesystem implementation is `fileExperimentStore`. */
186
- interface ExperimentStore {
187
- load(): Promise<Experiment[]>;
188
- save(experiments: Experiment[]): Promise<void>;
189
- }
190
- /** In-memory store — the default when no persistence is wanted (tests, ephemeral
191
- * runs). State lives on the instance. */
192
- declare function inMemoryExperimentStore(initial?: Experiment[]): ExperimentStore;
193
- /** Filesystem store — a single JSON array at `path`, created on first save. */
194
- declare function fileExperimentStore(path: string): ExperimentStore;
195
- interface ExperimentTrackerOptions {
196
- store?: ExperimentStore;
197
- provenanceReader?: ProvenanceReader;
198
- thresholds?: ImprovementThresholds;
199
- /** Clock seam for deterministic timestamps in tests. Default `Date.now`. */
200
- now?: () => number;
201
- }
202
- interface CreateExperimentInput {
203
- id: string;
204
- label: string;
205
- changeSummary: string;
206
- parentId?: string;
207
- /** Override provenance instead of reading from git (e.g. CI metadata). */
208
- provenance?: ExperimentProvenance;
209
- }
210
- /**
211
- * Stateful tracker over an `ExperimentStore`. Create an experiment (provenance
212
- * is captured once), append reps as they complete (stats + verdict recompute on
213
- * every append), and read the log back for a dashboard. All persistence and git
214
- * access flow through the injected seams, so the tracker is fully testable
215
- * without a repo or disk.
216
- */
217
- declare class ExperimentTracker {
218
- private readonly store;
219
- private readonly provenanceReader;
220
- private readonly thresholds;
221
- private readonly now;
222
- constructor(options?: ExperimentTrackerOptions);
223
- create(input: CreateExperimentInput): Promise<Experiment>;
224
- /** Append a rep (its `rep` index defaults to the current rep count) and
225
- * recompute stats + verdict. Returns the updated experiment. */
226
- addRep(experimentId: string, rep: Omit<ExperimentRep, 'rep' | 'timestamp'> & {
227
- rep?: number;
228
- timestamp?: string;
229
- }): Promise<Experiment>;
230
- get(experimentId: string): Promise<Experiment | undefined>;
231
- list(): Promise<Experiment[]>;
232
- /** Full verdict (not just the enum) for an experiment vs its parent. */
233
- verdictFor(experimentId: string): Promise<ImprovementVerdictResult>;
234
- }
235
- //#endregion
236
- export { requiredSampleSize as _, ExperimentVerdict as a, computeExperimentStats as c, inMemoryExperimentStore as d, mulberry32 as f, requiredPairedSampleSize as g, pairedMde as h, ExperimentTracker as i, fileExperimentStore as l, mcnemarRequiredN as m, ExperimentRep as n, ImprovementThresholds as o, mcnemarPower as p, ExperimentStats as r, ImprovementVerdictResult as s, Experiment as t, improvementVerdict as u };
237
- //# sourceMappingURL=experiment-tracker-URRGP9ek.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"experiment-tracker-URRGP9ek.d.ts","names":[],"sources":["../src/statistics/power-and-mde.ts","../src/statistics/random.ts","../src/experiment-tracker.ts"],"mappings":";;;;;;;;iBAWgB,mBAAmB;EACjC;EACA;EACA;EACA;;;;;;;;;;;iBAsBc,yBAAyB;EACvC;EACA;EACA;EACA;;;;;;;;iBAkBc,UAAU;EACxB;EACA;EACA;EACA;;;;;;;;;;;;;;;;iBAyBc,iBAAiB;EAC/B;EACA;EACA;EACA;EACA;;;;;;;iBAyBc,aAAa;EAC3B;EACA;EACA;EACA;EACA;;;;;;;;iBCrHc,WAAW;;;;;KCyBf;;UAGK;;EAEf;;EAEA;;EAEA;;;;UAKe;;EAEf;;EAEA;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA,UAAU;;UAGK;EACf;EACA;EACA;EACA;;EAEA;;EAEA;;;EAGA;;EAEA;;EAEA;;UAGe;;EAEf;;EAEA;;EAEA,YAAY;;EAEZ;;EAEA;EACA,MAAM;EACN,OAAO;EACP,SAAS;;EAET;;UAGe;;EAEf;;EAEA;;EAEA;;EAEA;;;EAGA;;UAGe;EACf,SAAS;;EAET;;EAEA;;;;;;;iBAkDc,uBACd,MAAM,iBACN,aAAa,wBACZ;;;;;;;iBAgDa,mBACd,WAAW,iBACX,QAAQ,wBACR,aAAa,wBACZ;;;KA6CS,yBAAyB,uBAAuB,QAAQ;;;UAInD;EACf,QAAQ,QAAQ;EAChB,KAAK,aAAa,eAAe;;;;iBAoBnB,wBAAwB,UAAS,eAAoB;;iBAarD,oBAAoB,eAAe;UAyBlC;EACf,QAAQ;EACR,mBAAmB;EACnB,aAAa;;EAEb;;UAGe;EACf;EACA;EACA;EACA;;EAEA,aAAa;;;;;;;;;cAUF;mBACM;mBACA;mBACA;mBACA;EAEjB,YAAY,UAAS;EAOf,OAAO,OAAO,wBAAwB,QAAQ;;;EA6B9C,OACJ,sBACA,KAAK,KAAK;IAAwC;IAAc;MAC/D,QAAQ;EAqCL,IAAI,uBAAuB,QAAQ;EAMnC,QAAQ,QAAQ;;EAKhB,WAAW,uBAAuB,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"integrity-Cy9WHAtb.js","names":[],"sources":["../src/trace/integrity.ts"],"sourcesContent":["/**\n * Run-completion integrity check — at end of run, verify the expected event\n * types were actually captured. The point is the launch-review failure mode:\n * a run *appears* successful but the raw provider events were never written,\n * so a downstream reviewer can't reconstruct what happened.\n *\n * Pattern:\n *\n * const report = await assertRunCaptured(store, runId, {\n * llmSpansMin: 1,\n * judgeSpansMin: 1,\n * rawSink: providerSink, // must have ≥ 1 event for this run\n * requireRawCoverageOfLlmSpans: true, // every llm span has matching raw events\n * })\n * if (!report.ok) throwIfRunIncomplete(report) // or mark run failed and continue\n *\n * The function is read-only on the store and returns a structured report;\n * the caller chooses the failure mode (throw, mark run failed, log warning).\n * `throwIfRunIncomplete` is the convenient strict mode.\n */\n\nimport { CaptureIntegrityError } from '../errors'\nimport type { RawProviderSink } from './raw-provider-sink'\nimport type { TraceStore } from './store'\n\nexport interface RunIntegrityExpectations {\n /** Minimum LLM span count. Default 0 (no requirement). */\n llmSpansMin?: number\n /** Minimum judge span count. Default 0. */\n judgeSpansMin?: number\n /** Minimum tool span count. Default 0. */\n toolSpansMin?: number\n /**\n * Raw provider sink to consult for capture verification. When present,\n * the check requires at least one raw event for the run.\n */\n rawSink?: RawProviderSink\n /** Minimum raw provider event count. Default 0; ignored when `rawSink` absent. */\n rawProviderEventsMin?: number\n /**\n * Every LLM span must have at least one matching raw `request` event\n * (matched by spanId). Catches the common bug where the structured span\n * was emitted but the raw HTTP capture was wired to a different sink.\n */\n requireRawCoverageOfLlmSpans?: boolean\n /** Run outcome must be set (not null/undefined). Default false. */\n requireOutcome?: boolean\n}\n\nexport type RunIntegrityIssueCode =\n | 'no_run'\n | 'missing_llm_spans'\n | 'missing_judge_spans'\n | 'missing_tool_spans'\n | 'missing_raw_events'\n | 'no_raw_sink'\n | 'orphan_llm_span'\n | 'missing_outcome'\n\nexport interface RunIntegrityIssue {\n code: RunIntegrityIssueCode\n message: string\n detail?: Record<string, unknown>\n}\n\nexport interface RunIntegrityReport {\n ok: boolean\n runId: string\n llmSpanCount: number\n judgeSpanCount: number\n toolSpanCount: number\n rawProviderEventCount: number\n /**\n * Coverage of LLM spans by raw provider events keyed on spanId.\n * `total` is the number of LLM spans; `covered` is the count with at\n * least one matching `request` raw event.\n */\n rawSpanCoverage: { covered: number; total: number }\n issues: RunIntegrityIssue[]\n}\n\nexport class RunIntegrityError extends CaptureIntegrityError {\n constructor(public readonly report: RunIntegrityReport) {\n super(\n `Run ${report.runId} failed integrity check: ${report.issues.map((i) => i.code).join(', ')}`,\n )\n }\n}\n\nexport async function assertRunCaptured(\n store: TraceStore,\n runId: string,\n expectations: RunIntegrityExpectations = {},\n): Promise<RunIntegrityReport> {\n const issues: RunIntegrityIssue[] = []\n const run = await store.getRun(runId)\n if (!run) {\n return {\n ok: false,\n runId,\n llmSpanCount: 0,\n judgeSpanCount: 0,\n toolSpanCount: 0,\n rawProviderEventCount: 0,\n rawSpanCoverage: { covered: 0, total: 0 },\n issues: [{ code: 'no_run', message: `Run ${runId} not found in store.` }],\n }\n }\n\n const spans = await store.spans({ runId })\n const llmSpans = spans.filter((s) => s.kind === 'llm')\n const judgeSpans = spans.filter((s) => s.kind === 'judge')\n const toolSpans = spans.filter((s) => s.kind === 'tool')\n\n const llmMin = expectations.llmSpansMin ?? 0\n const judgeMin = expectations.judgeSpansMin ?? 0\n const toolMin = expectations.toolSpansMin ?? 0\n\n if (llmSpans.length < llmMin) {\n issues.push({\n code: 'missing_llm_spans',\n message: `Expected ≥ ${llmMin} LLM spans, found ${llmSpans.length}.`,\n detail: { expected: llmMin, found: llmSpans.length },\n })\n }\n if (judgeSpans.length < judgeMin) {\n issues.push({\n code: 'missing_judge_spans',\n message: `Expected ≥ ${judgeMin} judge spans, found ${judgeSpans.length}.`,\n detail: { expected: judgeMin, found: judgeSpans.length },\n })\n }\n if (toolSpans.length < toolMin) {\n issues.push({\n code: 'missing_tool_spans',\n message: `Expected ≥ ${toolMin} tool spans, found ${toolSpans.length}.`,\n detail: { expected: toolMin, found: toolSpans.length },\n })\n }\n\n let rawEventCount = 0\n let coverage = { covered: 0, total: llmSpans.length }\n\n if (expectations.rawSink) {\n if (!expectations.rawSink.list) {\n issues.push({\n code: 'no_raw_sink',\n message: 'Provided rawSink does not implement list(); cannot verify capture.',\n })\n } else {\n const events = await expectations.rawSink.list({ runId })\n rawEventCount = events.length\n const rawMin = expectations.rawProviderEventsMin ?? 1\n if (rawEventCount < rawMin) {\n issues.push({\n code: 'missing_raw_events',\n message: `Expected ≥ ${rawMin} raw provider events, found ${rawEventCount}.`,\n detail: { expected: rawMin, found: rawEventCount },\n })\n }\n if (expectations.requireRawCoverageOfLlmSpans) {\n const requestEventsBySpan = new Set(\n events.filter((e) => e.direction === 'request' && e.spanId).map((e) => e.spanId!),\n )\n const orphaned = llmSpans.filter((s) => !requestEventsBySpan.has(s.spanId))\n coverage = { covered: llmSpans.length - orphaned.length, total: llmSpans.length }\n if (orphaned.length > 0) {\n issues.push({\n code: 'orphan_llm_span',\n message: `${orphaned.length} LLM span(s) have no matching raw provider request event.`,\n detail: { orphanedSpanIds: orphaned.map((s) => s.spanId) },\n })\n }\n }\n }\n } else if (expectations.requireRawCoverageOfLlmSpans || expectations.rawProviderEventsMin) {\n issues.push({\n code: 'no_raw_sink',\n message: 'Raw coverage required but no rawSink supplied to the integrity check.',\n })\n }\n\n if (expectations.requireOutcome && (run.outcome === undefined || run.outcome === null)) {\n issues.push({\n code: 'missing_outcome',\n message: `Run ${runId} has no outcome recorded.`,\n })\n }\n\n return {\n ok: issues.length === 0,\n runId,\n llmSpanCount: llmSpans.length,\n judgeSpanCount: judgeSpans.length,\n toolSpanCount: toolSpans.length,\n rawProviderEventCount: rawEventCount,\n rawSpanCoverage: coverage,\n issues,\n }\n}\n\n/** Strict mode: throws `RunIntegrityError` when the report isn't ok. */\nexport function throwIfRunIncomplete(report: RunIntegrityReport): void {\n if (!report.ok) throw new RunIntegrityError(report)\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"integrity-rGOfSUle.d.ts","names":[],"sources":["../src/trace/integrity.ts"],"mappings":";;;;UAyBiB;;EAEf;;EAEA;;EAEA;;;;;EAKA,UAAU;;EAEV;;;;;;EAMA;;EAEA;;KAGU;UAUK;EACf,MAAM;EACN;EACA,SAAS;;UAGM;EACf;EACA;EACA;EACA;EACA;EACA;;;;;;EAMA;IAAmB;IAAiB;;EACpC,QAAQ;;cAGG,0BAA0B;WACT,QAAQ;EAApC,YAA4B,QAAQ;;iBAOhB,kBACpB,OAAO,YACP,eACA,eAAc,2BACb,QAAQ;;iBA6GK,qBAAqB,QAAQ"}