@tangle-network/agent-eval 0.129.0 → 0.130.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (428) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +2 -0
  3. package/dist/active-curriculum-C4mk67HP.js +214 -0
  4. package/dist/active-curriculum-C4mk67HP.js.map +1 -0
  5. package/dist/adversarial-smnADNFS.d.ts +21 -0
  6. package/dist/adversarial-smnADNFS.d.ts.map +1 -0
  7. package/dist/analyst/index.d.ts +81 -2872
  8. package/dist/analyst/index.d.ts.map +1 -0
  9. package/dist/analyst/index.js +319 -360
  10. package/dist/analyst/index.js.map +1 -1
  11. package/dist/analyst-BkTS3C58.d.ts +89 -0
  12. package/dist/analyst-BkTS3C58.d.ts.map +1 -0
  13. package/dist/analyst-LsnNpSkm.js +152 -0
  14. package/dist/analyst-LsnNpSkm.js.map +1 -0
  15. package/dist/analyze-runs-C1CavBMk.js +1067 -0
  16. package/dist/analyze-runs-C1CavBMk.js.map +1 -0
  17. package/dist/analyze-runs-FsgYCinh.d.ts +72 -0
  18. package/dist/analyze-runs-FsgYCinh.d.ts.map +1 -0
  19. package/dist/attribute-vocabulary-DLJ6303h.d.ts +54 -0
  20. package/dist/attribute-vocabulary-DLJ6303h.d.ts.map +1 -0
  21. package/dist/authenticity/index.d.ts +81 -79
  22. package/dist/authenticity/index.d.ts.map +1 -0
  23. package/dist/authenticity/index.js +209 -193
  24. package/dist/authenticity/index.js.map +1 -1
  25. package/dist/baseline-HsBvw_dk.js +550 -0
  26. package/dist/baseline-HsBvw_dk.js.map +1 -0
  27. package/dist/baseline-hG3K85h4.d.ts +125 -0
  28. package/dist/baseline-hG3K85h4.d.ts.map +1 -0
  29. package/dist/belief-state/index.d.ts +448 -1188
  30. package/dist/belief-state/index.d.ts.map +1 -0
  31. package/dist/belief-state/index.js +1617 -1709
  32. package/dist/belief-state/index.js.map +1 -1
  33. package/dist/benchmarks/index.d.ts +2 -891
  34. package/dist/benchmarks/index.js +2 -60
  35. package/dist/benchmarks-BJgDGkAD.js +754 -0
  36. package/dist/benchmarks-BJgDGkAD.js.map +1 -0
  37. package/dist/builder-eval/index.d.ts +150 -662
  38. package/dist/builder-eval/index.d.ts.map +1 -0
  39. package/dist/builder-eval/index.js +356 -345
  40. package/dist/builder-eval/index.js.map +1 -1
  41. package/dist/calibration-CNWWA6K8.js +94 -0
  42. package/dist/calibration-CNWWA6K8.js.map +1 -0
  43. package/dist/campaign/index.d.ts +5 -6381
  44. package/dist/campaign/index.js +3 -213
  45. package/dist/campaign-aKJt6emI.js +3886 -0
  46. package/dist/campaign-aKJt6emI.js.map +1 -0
  47. package/dist/cli.d.ts +1 -1
  48. package/dist/cli.js +164 -175
  49. package/dist/cli.js.map +1 -1
  50. package/dist/client-C97NMzqi.d.ts +581 -0
  51. package/dist/client-C97NMzqi.d.ts.map +1 -0
  52. package/dist/client-CYzbdJOZ.js +637 -0
  53. package/dist/client-CYzbdJOZ.js.map +1 -0
  54. package/dist/code-agent-session-BjkMTQ7H.js +1390 -0
  55. package/dist/code-agent-session-BjkMTQ7H.js.map +1 -0
  56. package/dist/code-agent-session-DqqgOJaz.d.ts +143 -0
  57. package/dist/code-agent-session-DqqgOJaz.d.ts.map +1 -0
  58. package/dist/concurrency-DIxRZF_J.js +85 -0
  59. package/dist/concurrency-DIxRZF_J.js.map +1 -0
  60. package/dist/contract/index.d.ts +645 -5565
  61. package/dist/contract/index.d.ts.map +1 -0
  62. package/dist/contract/index.js +1730 -1938
  63. package/dist/contract/index.js.map +1 -1
  64. package/dist/control.d.ts +3 -1030
  65. package/dist/control.js +2 -33
  66. package/dist/cost-ledger-DIgQUFZZ.js +801 -0
  67. package/dist/cost-ledger-DIgQUFZZ.js.map +1 -0
  68. package/dist/cost-ledger-Dye6jCgg.d.ts +236 -0
  69. package/dist/cost-ledger-Dye6jCgg.d.ts.map +1 -0
  70. package/dist/dataset-BvtnC8Dc.d.ts +115 -0
  71. package/dist/dataset-BvtnC8Dc.d.ts.map +1 -0
  72. package/dist/default-registry-C-vFCSEc.js +2579 -0
  73. package/dist/default-registry-C-vFCSEc.js.map +1 -0
  74. package/dist/default-registry-CNPo-Vsb.d.ts +540 -0
  75. package/dist/default-registry-CNPo-Vsb.d.ts.map +1 -0
  76. package/dist/emitter-CPBAhxum.js +266 -0
  77. package/dist/emitter-CPBAhxum.js.map +1 -0
  78. package/dist/emitter-DGQGoLyj.d.ts +113 -0
  79. package/dist/emitter-DGQGoLyj.d.ts.map +1 -0
  80. package/dist/errors-8YnH8WlF.js +64 -0
  81. package/dist/errors-8YnH8WlF.js.map +1 -0
  82. package/dist/errors-CEk209JS.d.ts +76 -0
  83. package/dist/errors-CEk209JS.d.ts.map +1 -0
  84. package/dist/eval-campaign-DEm6c8ru.js +349 -0
  85. package/dist/eval-campaign-DEm6c8ru.js.map +1 -0
  86. package/dist/execution-tracks-CpgFPpS5.js +93 -0
  87. package/dist/execution-tracks-CpgFPpS5.js.map +1 -0
  88. package/dist/exporters-q9iL-2Jf.js +148 -0
  89. package/dist/exporters-q9iL-2Jf.js.map +1 -0
  90. package/dist/extract-usage-BrQ8mCLX.js +155 -0
  91. package/dist/extract-usage-BrQ8mCLX.js.map +1 -0
  92. package/dist/failure-cluster-CqcvCcdR.d.ts +59 -0
  93. package/dist/failure-cluster-CqcvCcdR.d.ts.map +1 -0
  94. package/dist/feedback-trajectory-CVaeREXV.d.ts +340 -0
  95. package/dist/feedback-trajectory-CVaeREXV.d.ts.map +1 -0
  96. package/dist/fuzz.d.ts +320 -646
  97. package/dist/fuzz.d.ts.map +1 -0
  98. package/dist/fuzz.js +670 -618
  99. package/dist/fuzz.js.map +1 -1
  100. package/dist/hf-dataset-DBJXXoY1.js +763 -0
  101. package/dist/hf-dataset-DBJXXoY1.js.map +1 -0
  102. package/dist/hosted/index.d.ts +11 -831
  103. package/dist/hosted/index.d.ts.map +1 -0
  104. package/dist/hosted/index.js +2 -37
  105. package/dist/index-2JJSA6-r2.d.ts +926 -0
  106. package/dist/index-2JJSA6-r2.d.ts.map +1 -0
  107. package/dist/index-6N0aYmpW.d.ts +217 -0
  108. package/dist/index-6N0aYmpW.d.ts.map +1 -0
  109. package/dist/index-BAvgST_9.d.ts +131 -0
  110. package/dist/index-BAvgST_9.d.ts.map +1 -0
  111. package/dist/index-BvnJuTGD.d.ts +68 -0
  112. package/dist/index-BvnJuTGD.d.ts.map +1 -0
  113. package/dist/index-C61Wi7yg.d.ts +547 -0
  114. package/dist/index-C61Wi7yg.d.ts.map +1 -0
  115. package/dist/index-CD_WZ_Xr.d.ts +2250 -0
  116. package/dist/index-CD_WZ_Xr.d.ts.map +1 -0
  117. package/dist/index-DSC51roc.d.ts +102 -0
  118. package/dist/index-DSC51roc.d.ts.map +1 -0
  119. package/dist/index-Em67JBjs.d.ts +335 -0
  120. package/dist/index-Em67JBjs.d.ts.map +1 -0
  121. package/dist/index.d.ts +3755 -15555
  122. package/dist/index.d.ts.map +1 -0
  123. package/dist/index.js +11182 -11216
  124. package/dist/index.js.map +1 -1
  125. package/dist/integrity-BzRbCHzi.js +424 -0
  126. package/dist/integrity-BzRbCHzi.js.map +1 -0
  127. package/dist/integrity-rmVhXWA7.d.ts +61 -0
  128. package/dist/integrity-rmVhXWA7.d.ts.map +1 -0
  129. package/dist/judge-calibration-DFtEMlde.d.ts +146 -0
  130. package/dist/judge-calibration-DFtEMlde.d.ts.map +1 -0
  131. package/dist/ledger-core/index.d.ts +2 -0
  132. package/dist/ledger-core/index.js +2 -0
  133. package/dist/ledger-core-DtZz1RG0.js +388 -0
  134. package/dist/ledger-core-DtZz1RG0.js.map +1 -0
  135. package/dist/llm-client--GR4JbZE.js +687 -0
  136. package/dist/llm-client--GR4JbZE.js.map +1 -0
  137. package/dist/llm-client-B_nIBlYo.d.ts +290 -0
  138. package/dist/llm-client-B_nIBlYo.d.ts.map +1 -0
  139. package/dist/matrix/index.d.ts +3 -155
  140. package/dist/matrix/index.js +2 -8
  141. package/dist/matrix-BzQnu2S6.js +270 -0
  142. package/dist/matrix-BzQnu2S6.js.map +1 -0
  143. package/dist/meta-eval/index.d.ts +4 -1027
  144. package/dist/meta-eval/index.js +393 -390
  145. package/dist/meta-eval/index.js.map +1 -1
  146. package/dist/metrics-C9YY1OcL.js +239 -0
  147. package/dist/metrics-C9YY1OcL.js.map +1 -0
  148. package/dist/mint-yN2M2eh0.js +201 -0
  149. package/dist/mint-yN2M2eh0.js.map +1 -0
  150. package/dist/multi-layer-verifier-BHY1gWAc.d.ts +138 -0
  151. package/dist/multi-layer-verifier-BHY1gWAc.d.ts.map +1 -0
  152. package/dist/multishot/index.d.ts +273 -480
  153. package/dist/multishot/index.d.ts.map +1 -0
  154. package/dist/multishot/index.js +595 -548
  155. package/dist/multishot/index.js.map +1 -1
  156. package/dist/off-policy-DvgzvtIx.js +220 -0
  157. package/dist/off-policy-DvgzvtIx.js.map +1 -0
  158. package/dist/off-policy-mskQw8Mb.d.ts +153 -0
  159. package/dist/off-policy-mskQw8Mb.d.ts.map +1 -0
  160. package/dist/openapi.json +1 -1
  161. package/dist/opencode-sqlite-BGrHeDu3.js +318 -0
  162. package/dist/opencode-sqlite-BGrHeDu3.js.map +1 -0
  163. package/dist/outcome-store-BYHIuO0e.d.ts +65 -0
  164. package/dist/outcome-store-BYHIuO0e.d.ts.map +1 -0
  165. package/dist/outcome-store-ChBKlTd_.js +75 -0
  166. package/dist/outcome-store-ChBKlTd_.js.map +1 -0
  167. package/dist/paired-arms-D9D0wXj2.js +260 -0
  168. package/dist/paired-arms-D9D0wXj2.js.map +1 -0
  169. package/dist/pipelines/index.d.ts +95 -532
  170. package/dist/pipelines/index.d.ts.map +1 -0
  171. package/dist/pipelines/index.js +497 -478
  172. package/dist/pipelines/index.js.map +1 -1
  173. package/dist/pre-registration-DakwTRXk.js +96 -0
  174. package/dist/pre-registration-DakwTRXk.js.map +1 -0
  175. package/dist/propose-review-control-LhIWGzHl.js +1458 -0
  176. package/dist/propose-review-control-LhIWGzHl.js.map +1 -0
  177. package/dist/query-CJ_DX8vl.d.ts +28 -0
  178. package/dist/query-CJ_DX8vl.d.ts.map +1 -0
  179. package/dist/query-Di7eEQ79.js +83 -0
  180. package/dist/query-Di7eEQ79.js.map +1 -0
  181. package/dist/raw-provider-sink-BQd7mzyT.js +201 -0
  182. package/dist/raw-provider-sink-BQd7mzyT.js.map +1 -0
  183. package/dist/raw-provider-sink-BU29Sh8h.d.ts +134 -0
  184. package/dist/raw-provider-sink-BU29Sh8h.d.ts.map +1 -0
  185. package/dist/redact-7Aq1ukl-.js +107 -0
  186. package/dist/redact-7Aq1ukl-.js.map +1 -0
  187. package/dist/release-report-Cz9NKH39.js +603 -0
  188. package/dist/release-report-Cz9NKH39.js.map +1 -0
  189. package/dist/release-report-mvB2G4_J.d.ts +244 -0
  190. package/dist/release-report-mvB2G4_J.d.ts.map +1 -0
  191. package/dist/replay-GnyotH0J.js +1741 -0
  192. package/dist/replay-GnyotH0J.js.map +1 -0
  193. package/dist/replay-OoidtG1E.d.ts +749 -0
  194. package/dist/replay-OoidtG1E.d.ts.map +1 -0
  195. package/dist/reporting.d.ts +6 -1312
  196. package/dist/reporting.js +6 -51
  197. package/dist/researcher-CwTdwXG1.d.ts +314 -0
  198. package/dist/researcher-CwTdwXG1.d.ts.map +1 -0
  199. package/dist/reward-hacking-eAnOsynk.d.ts +224 -0
  200. package/dist/reward-hacking-eAnOsynk.d.ts.map +1 -0
  201. package/dist/reward-hacking-qipEpKvY.js +596 -0
  202. package/dist/reward-hacking-qipEpKvY.js.map +1 -0
  203. package/dist/reward-nw2xZGZG.js +137 -0
  204. package/dist/reward-nw2xZGZG.js.map +1 -0
  205. package/dist/rl.d.ts +760 -4010
  206. package/dist/rl.d.ts.map +1 -0
  207. package/dist/rl.js +2325 -1958
  208. package/dist/rl.js.map +1 -1
  209. package/dist/rolldown-runtime-8H4AJuhK.js +14 -0
  210. package/dist/rollout/index.d.ts +3 -2087
  211. package/dist/rollout/index.js +8 -168
  212. package/dist/rollout-BOYjemfR.js +624 -0
  213. package/dist/rollout-BOYjemfR.js.map +1 -0
  214. package/dist/rubric-predictive-validity-B3xmbmS1.js +141 -0
  215. package/dist/rubric-predictive-validity-B3xmbmS1.js.map +1 -0
  216. package/dist/rubric-predictive-validity-Ku_clp_1.d.ts +74 -0
  217. package/dist/rubric-predictive-validity-Ku_clp_1.d.ts.map +1 -0
  218. package/dist/run-evidence-ClRX_8A9.d.ts +225 -0
  219. package/dist/run-evidence-ClRX_8A9.d.ts.map +1 -0
  220. package/dist/run-record-BuoE80Dq.js +467 -0
  221. package/dist/{chunk-56TAVBOK.js.map → run-record-BuoE80Dq.js.map} +1 -1
  222. package/dist/run-record-CnZu_gjl.d.ts +357 -0
  223. package/dist/run-record-CnZu_gjl.d.ts.map +1 -0
  224. package/dist/run-score-iEEAWiBY.js +41 -0
  225. package/dist/run-score-iEEAWiBY.js.map +1 -0
  226. package/dist/runtime-trajectory-1gyaTOoC.js +93 -0
  227. package/dist/runtime-trajectory-1gyaTOoC.js.map +1 -0
  228. package/dist/runtime-trajectory-BvSZcCHD.d.ts +50 -0
  229. package/dist/runtime-trajectory-BvSZcCHD.d.ts.map +1 -0
  230. package/dist/schema-BtVldJ3T.d.ts +206 -0
  231. package/dist/schema-BtVldJ3T.d.ts.map +1 -0
  232. package/dist/schema-C6DW4ZHR.js +821 -0
  233. package/dist/schema-C6DW4ZHR.js.map +1 -0
  234. package/dist/schema-CRhEY1SO.js +69 -0
  235. package/dist/schema-CRhEY1SO.js.map +1 -0
  236. package/dist/schema-Cef2cFmb.d.ts +408 -0
  237. package/dist/schema-Cef2cFmb.d.ts.map +1 -0
  238. package/dist/semantic-concept-judge-B6cWNJ2K.js +725 -0
  239. package/dist/semantic-concept-judge-B6cWNJ2K.js.map +1 -0
  240. package/dist/sequential-Br0mAPHA.js +148 -0
  241. package/dist/sequential-Br0mAPHA.js.map +1 -0
  242. package/dist/sequential-CYwq6Ff_.d.ts +141 -0
  243. package/dist/sequential-CYwq6Ff_.d.ts.map +1 -0
  244. package/dist/series-convergence-CjO2QdRW.js +43 -0
  245. package/dist/series-convergence-CjO2QdRW.js.map +1 -0
  246. package/dist/series-convergence-ofsqPWhs.d.ts +35 -0
  247. package/dist/series-convergence-ofsqPWhs.d.ts.map +1 -0
  248. package/dist/server-m5D9cvnG.js +1040 -0
  249. package/dist/server-m5D9cvnG.js.map +1 -0
  250. package/dist/skill-usage-C_pXm7lP.d.ts +534 -0
  251. package/dist/skill-usage-C_pXm7lP.d.ts.map +1 -0
  252. package/dist/skillopt-optimization-method-CUmHkGbI.js +7718 -0
  253. package/dist/skillopt-optimization-method-CUmHkGbI.js.map +1 -0
  254. package/dist/skillopt-optimization-method-CWKVTnks.d.ts +1740 -0
  255. package/dist/skillopt-optimization-method-CWKVTnks.d.ts.map +1 -0
  256. package/dist/statistics-Cmj6nynr.d.ts +514 -0
  257. package/dist/statistics-Cmj6nynr.d.ts.map +1 -0
  258. package/dist/statistics-CnnxdpOg.js +1437 -0
  259. package/dist/statistics-CnnxdpOg.js.map +1 -0
  260. package/dist/store-CT9YIIve.d.ts +117 -0
  261. package/dist/store-CT9YIIve.d.ts.map +1 -0
  262. package/dist/store-CxJry_cs.d.ts +229 -0
  263. package/dist/store-CxJry_cs.d.ts.map +1 -0
  264. package/dist/storyboard/index.d.ts +84 -203
  265. package/dist/storyboard/index.d.ts.map +1 -0
  266. package/dist/storyboard/index.js +609 -542
  267. package/dist/storyboard/index.js.map +1 -1
  268. package/dist/summary-report-BNs5nmXI.js +862 -0
  269. package/dist/summary-report-BNs5nmXI.js.map +1 -0
  270. package/dist/summary-report-Cj9gdw4i.d.ts +407 -0
  271. package/dist/summary-report-Cj9gdw4i.d.ts.map +1 -0
  272. package/dist/supervisor-run/index.d.ts +2 -959
  273. package/dist/supervisor-run/index.js +2 -65
  274. package/dist/supervisor-run-_lnTLM3z.js +1679 -0
  275. package/dist/supervisor-run-_lnTLM3z.js.map +1 -0
  276. package/dist/task-failure-attributes-CQZlB3et.js +311 -0
  277. package/dist/task-failure-attributes-CQZlB3et.js.map +1 -0
  278. package/dist/test-graded-scenario-BsqWLmPt.js +318 -0
  279. package/dist/test-graded-scenario-BsqWLmPt.js.map +1 -0
  280. package/dist/test-graded-scenario-D1TaI2va.d.ts +141 -0
  281. package/dist/test-graded-scenario-D1TaI2va.d.ts.map +1 -0
  282. package/dist/tools-BmuN627J.js +1085 -0
  283. package/dist/tools-BmuN627J.js.map +1 -0
  284. package/dist/trace-attributes.d.ts +2 -52
  285. package/dist/trace-attributes.js +131 -61
  286. package/dist/trace-attributes.js.map +1 -1
  287. package/dist/traces.d.ts +12 -2365
  288. package/dist/traces.js +12 -252
  289. package/dist/trajectory-D_7rLrvE.js +56 -0
  290. package/dist/trajectory-D_7rLrvE.js.map +1 -0
  291. package/dist/types-DGsxbAEd.d.ts +387 -0
  292. package/dist/types-DGsxbAEd.d.ts.map +1 -0
  293. package/dist/types-k9tZGKUg.d.ts +640 -0
  294. package/dist/types-k9tZGKUg.d.ts.map +1 -0
  295. package/dist/verdict-Dps8_okt.d.ts +37 -0
  296. package/dist/verdict-Dps8_okt.d.ts.map +1 -0
  297. package/dist/wire/index.d.ts +702 -1173
  298. package/dist/wire/index.d.ts.map +1 -0
  299. package/dist/wire/index.js +2 -81
  300. package/docs/campaign-proposers.md +1 -0
  301. package/package.json +17 -9
  302. package/dist/benchmarks/index.js.map +0 -1
  303. package/dist/campaign/index.js.map +0 -1
  304. package/dist/chunk-2QU3YOPR.js +0 -7374
  305. package/dist/chunk-2QU3YOPR.js.map +0 -1
  306. package/dist/chunk-3OCR4R5I.js +0 -728
  307. package/dist/chunk-3OCR4R5I.js.map +0 -1
  308. package/dist/chunk-3RF76KTD.js +0 -84
  309. package/dist/chunk-3RF76KTD.js.map +0 -1
  310. package/dist/chunk-56TAVBOK.js +0 -698
  311. package/dist/chunk-5DTSBUL2.js +0 -159
  312. package/dist/chunk-5DTSBUL2.js.map +0 -1
  313. package/dist/chunk-7FO3TNPI.js +0 -232
  314. package/dist/chunk-7FO3TNPI.js.map +0 -1
  315. package/dist/chunk-7ZZMD7UK.js +0 -386
  316. package/dist/chunk-7ZZMD7UK.js.map +0 -1
  317. package/dist/chunk-BOD4O7OF.js +0 -40
  318. package/dist/chunk-BOD4O7OF.js.map +0 -1
  319. package/dist/chunk-BSO5JDQH.js +0 -2335
  320. package/dist/chunk-BSO5JDQH.js.map +0 -1
  321. package/dist/chunk-C6LXANRU.js +0 -1550
  322. package/dist/chunk-C6LXANRU.js.map +0 -1
  323. package/dist/chunk-DODXQREJ.js +0 -752
  324. package/dist/chunk-DODXQREJ.js.map +0 -1
  325. package/dist/chunk-DRYIUNWY.js +0 -622
  326. package/dist/chunk-DRYIUNWY.js.map +0 -1
  327. package/dist/chunk-E7QXT7SX.js +0 -183
  328. package/dist/chunk-E7QXT7SX.js.map +0 -1
  329. package/dist/chunk-EG66UGL4.js +0 -341
  330. package/dist/chunk-EG66UGL4.js.map +0 -1
  331. package/dist/chunk-FXTVJPYD.js +0 -576
  332. package/dist/chunk-FXTVJPYD.js.map +0 -1
  333. package/dist/chunk-G7MGMCZD.js +0 -153
  334. package/dist/chunk-G7MGMCZD.js.map +0 -1
  335. package/dist/chunk-GGE4NNQT.js +0 -65
  336. package/dist/chunk-GGE4NNQT.js.map +0 -1
  337. package/dist/chunk-H23X7XKK.js +0 -181
  338. package/dist/chunk-H23X7XKK.js.map +0 -1
  339. package/dist/chunk-HHWE3POT.js +0 -94
  340. package/dist/chunk-HHWE3POT.js.map +0 -1
  341. package/dist/chunk-HPWUNB47.js +0 -289
  342. package/dist/chunk-HPWUNB47.js.map +0 -1
  343. package/dist/chunk-IYCLP2N2.js +0 -766
  344. package/dist/chunk-IYCLP2N2.js.map +0 -1
  345. package/dist/chunk-JHCHEVET.js +0 -274
  346. package/dist/chunk-JHCHEVET.js.map +0 -1
  347. package/dist/chunk-JQSF5DQT.js +0 -701
  348. package/dist/chunk-JQSF5DQT.js.map +0 -1
  349. package/dist/chunk-K4DBDHLK.js +0 -158
  350. package/dist/chunk-K4DBDHLK.js.map +0 -1
  351. package/dist/chunk-K6N6XJJX.js +0 -306
  352. package/dist/chunk-K6N6XJJX.js.map +0 -1
  353. package/dist/chunk-M4YBQKIJ.js +0 -1040
  354. package/dist/chunk-M4YBQKIJ.js.map +0 -1
  355. package/dist/chunk-MA6HLL3S.js +0 -65
  356. package/dist/chunk-MA6HLL3S.js.map +0 -1
  357. package/dist/chunk-MAZ26DC7.js +0 -99
  358. package/dist/chunk-MAZ26DC7.js.map +0 -1
  359. package/dist/chunk-NPCTHQIO.js +0 -91
  360. package/dist/chunk-NPCTHQIO.js.map +0 -1
  361. package/dist/chunk-NY44NC4A.js +0 -1056
  362. package/dist/chunk-NY44NC4A.js.map +0 -1
  363. package/dist/chunk-OIUOT4QD.js +0 -44
  364. package/dist/chunk-OIUOT4QD.js.map +0 -1
  365. package/dist/chunk-ONWEPEDO.js +0 -57
  366. package/dist/chunk-ONWEPEDO.js.map +0 -1
  367. package/dist/chunk-OWN5NPMC.js +0 -152
  368. package/dist/chunk-OWN5NPMC.js.map +0 -1
  369. package/dist/chunk-P6FYH6K4.js +0 -1161
  370. package/dist/chunk-P6FYH6K4.js.map +0 -1
  371. package/dist/chunk-PC4UYEBM.js +0 -166
  372. package/dist/chunk-PC4UYEBM.js.map +0 -1
  373. package/dist/chunk-PC5DOSM7.js +0 -579
  374. package/dist/chunk-PC5DOSM7.js.map +0 -1
  375. package/dist/chunk-PXE2VKMX.js +0 -140
  376. package/dist/chunk-PXE2VKMX.js.map +0 -1
  377. package/dist/chunk-PZ5AY32C.js +0 -10
  378. package/dist/chunk-PZ5AY32C.js.map +0 -1
  379. package/dist/chunk-QB6BDBP2.js +0 -4464
  380. package/dist/chunk-QB6BDBP2.js.map +0 -1
  381. package/dist/chunk-RXHCETDZ.js +0 -536
  382. package/dist/chunk-RXHCETDZ.js.map +0 -1
  383. package/dist/chunk-RZTMDUO7.js +0 -49
  384. package/dist/chunk-RZTMDUO7.js.map +0 -1
  385. package/dist/chunk-SFLLL76A.js +0 -669
  386. package/dist/chunk-SFLLL76A.js.map +0 -1
  387. package/dist/chunk-SZLVEKMJ.js +0 -1446
  388. package/dist/chunk-SZLVEKMJ.js.map +0 -1
  389. package/dist/chunk-T4SQEITX.js +0 -95
  390. package/dist/chunk-T4SQEITX.js.map +0 -1
  391. package/dist/chunk-T6RLYGAD.js +0 -158
  392. package/dist/chunk-T6RLYGAD.js.map +0 -1
  393. package/dist/chunk-TJVT4QFF.js +0 -911
  394. package/dist/chunk-TJVT4QFF.js.map +0 -1
  395. package/dist/chunk-TQ7LNKZ3.js +0 -136
  396. package/dist/chunk-TQ7LNKZ3.js.map +0 -1
  397. package/dist/chunk-U4L7JRPZ.js +0 -1706
  398. package/dist/chunk-U4L7JRPZ.js.map +0 -1
  399. package/dist/chunk-U4PHLT2N.js +0 -419
  400. package/dist/chunk-U4PHLT2N.js.map +0 -1
  401. package/dist/chunk-VCZ5FQYW.js +0 -928
  402. package/dist/chunk-VCZ5FQYW.js.map +0 -1
  403. package/dist/chunk-VI2UW6B6.js +0 -162
  404. package/dist/chunk-VI2UW6B6.js.map +0 -1
  405. package/dist/chunk-VQMK5FMP.js +0 -247
  406. package/dist/chunk-VQMK5FMP.js.map +0 -1
  407. package/dist/chunk-WGXIEX7P.js +0 -116
  408. package/dist/chunk-WGXIEX7P.js.map +0 -1
  409. package/dist/chunk-WVATSFCP.js +0 -1553
  410. package/dist/chunk-WVATSFCP.js.map +0 -1
  411. package/dist/chunk-X4YIBDER.js +0 -1662
  412. package/dist/chunk-X4YIBDER.js.map +0 -1
  413. package/dist/chunk-YQN4ICPP.js +0 -355
  414. package/dist/chunk-YQN4ICPP.js.map +0 -1
  415. package/dist/chunk-ZET2UAYW.js +0 -89
  416. package/dist/chunk-ZET2UAYW.js.map +0 -1
  417. package/dist/chunk-ZHTZ4EYI.js +0 -1212
  418. package/dist/chunk-ZHTZ4EYI.js.map +0 -1
  419. package/dist/control.js.map +0 -1
  420. package/dist/hosted/index.js.map +0 -1
  421. package/dist/matrix/index.js.map +0 -1
  422. package/dist/reporting.js.map +0 -1
  423. package/dist/rollout/index.js.map +0 -1
  424. package/dist/run-campaign-OJJ7CZF4.js +0 -18
  425. package/dist/run-campaign-OJJ7CZF4.js.map +0 -1
  426. package/dist/supervisor-run/index.js.map +0 -1
  427. package/dist/traces.js.map +0 -1
  428. package/dist/wire/index.js.map +0 -1
@@ -1,386 +0,0 @@
1
- import {
2
- FAILURE_CLASSES
3
- } from "./chunk-MA6HLL3S.js";
4
- import {
5
- ValidationError
6
- } from "./chunk-ONWEPEDO.js";
7
- import {
8
- LLM_CACHED_TOKEN_ATTR_KEYS,
9
- LLM_CACHE_WRITE_TOKEN_ATTR_KEYS,
10
- LLM_COST_ATTR_KEYS,
11
- LLM_INPUT_TOKEN_ATTR_KEYS,
12
- LLM_OUTPUT_TOKEN_ATTR_KEYS,
13
- LLM_REASONING_TOKEN_ATTR_KEYS,
14
- RUN_COST_ATTR_KEYS
15
- } from "./chunk-K4DBDHLK.js";
16
-
17
- // src/trace/error-classification.ts
18
- function summarizeTraceErrors(signals) {
19
- const byId = /* @__PURE__ */ new Map();
20
- for (const signal of signals) {
21
- if (byId.has(signal.id)) {
22
- throw new Error(`summarizeTraceErrors: duplicate span id '${signal.id}'`);
23
- }
24
- byId.set(signal.id, signal);
25
- }
26
- const propagated = /* @__PURE__ */ new Set();
27
- for (const signal of signals) {
28
- if (!signal.error) continue;
29
- const visited = /* @__PURE__ */ new Set();
30
- let parentId = signal.parentId;
31
- while (parentId && !visited.has(parentId)) {
32
- visited.add(parentId);
33
- const parent = byId.get(parentId);
34
- if (!parent) break;
35
- if (parent.error) propagated.add(parent.id);
36
- parentId = parent.parentId;
37
- }
38
- }
39
- const summary = {
40
- total: 0,
41
- execution: 0,
42
- process: 0,
43
- guardrail: 0,
44
- evaluation: 0,
45
- propagated: 0,
46
- unclassified: 0
47
- };
48
- for (const signal of signals) {
49
- if (!signal.error) continue;
50
- summary.total += 1;
51
- if (signal.role === "GUARDRAIL") {
52
- summary.guardrail += 1;
53
- } else if (signal.role === "EVALUATOR") {
54
- summary.evaluation += 1;
55
- } else if (signal.processRoot) {
56
- summary.process += 1;
57
- } else if (propagated.has(signal.id)) {
58
- summary.propagated += 1;
59
- } else if (signal.role === "AGENT" || signal.role === "CHAIN" || signal.role === "LLM" || signal.role === "TOOL") {
60
- summary.execution += 1;
61
- } else {
62
- summary.unclassified += 1;
63
- }
64
- }
65
- return summary;
66
- }
67
-
68
- // src/trace/execution-measurements.ts
69
- var TOKEN_MEASUREMENT_KEY_GROUPS = [
70
- LLM_INPUT_TOKEN_ATTR_KEYS,
71
- LLM_OUTPUT_TOKEN_ATTR_KEYS,
72
- LLM_REASONING_TOKEN_ATTR_KEYS,
73
- LLM_CACHED_TOKEN_ATTR_KEYS,
74
- LLM_CACHE_WRITE_TOKEN_ATTR_KEYS
75
- ];
76
- var EXECUTION_MEASUREMENT_KEY_GROUPS = [
77
- ...TOKEN_MEASUREMENT_KEY_GROUPS,
78
- LLM_COST_ATTR_KEYS
79
- ];
80
- function summarizeExecutionMeasurements(spans) {
81
- const byId = /* @__PURE__ */ new Map();
82
- for (const span of spans) {
83
- if (byId.has(span.id)) {
84
- throw new Error(`summarizeExecutionMeasurements: duplicate span id "${span.id}"`);
85
- }
86
- byId.set(span.id, span);
87
- }
88
- const tokenMeasurementKeys = TOKEN_MEASUREMENT_KEY_GROUPS.flat();
89
- const candidates = spans.filter(
90
- (span) => span.modelCall || !span.aggregate && readNumber(span.attributes, tokenMeasurementKeys) !== void 0
91
- );
92
- const candidateIds = new Set(candidates.map((span) => span.id));
93
- const candidateChildren = /* @__PURE__ */ new Map();
94
- for (const candidate of candidates) {
95
- const parentId = nearestCandidateParent(candidate, byId, candidateIds);
96
- if (!parentId) continue;
97
- const children = candidateChildren.get(parentId) ?? [];
98
- children.push(candidate);
99
- candidateChildren.set(parentId, children);
100
- }
101
- const aggregateIds = classifyAggregateSpans(candidates, candidateChildren);
102
- const untypedRunCostIds = new Set(
103
- spans.filter(
104
- (span) => !span.modelCall && !span.aggregate && !candidateIds.has(span.id) && readNumber(span.attributes, RUN_COST_ATTR_KEYS) !== void 0
105
- ).map((span) => span.id)
106
- );
107
- const aggregateSourceIds = new Set(
108
- spans.filter(
109
- (span) => span.aggregate || aggregateIds.has(span.id) || untypedRunCostIds.has(span.id)
110
- ).map((span) => span.id)
111
- );
112
- const calls = candidates.filter((span) => !aggregateIds.has(span.id));
113
- const input = reconcileMeasurement(calls, byId, aggregateSourceIds, LLM_INPUT_TOKEN_ATTR_KEYS);
114
- const reasoning = reconcileMeasurement(
115
- calls,
116
- byId,
117
- aggregateSourceIds,
118
- LLM_REASONING_TOKEN_ATTR_KEYS
119
- );
120
- const output = reconcileMeasurement(
121
- calls,
122
- byId,
123
- aggregateSourceIds,
124
- LLM_OUTPUT_TOKEN_ATTR_KEYS,
125
- LLM_REASONING_TOKEN_ATTR_KEYS
126
- );
127
- const cached = reconcileMeasurement(calls, byId, aggregateSourceIds, LLM_CACHED_TOKEN_ATTR_KEYS);
128
- const cacheWrite = reconcileMeasurement(
129
- calls,
130
- byId,
131
- aggregateSourceIds,
132
- LLM_CACHE_WRITE_TOKEN_ATTR_KEYS
133
- );
134
- const aggregate = summarizeAggregateMeasurements(
135
- spans,
136
- byId,
137
- /* @__PURE__ */ new Set([...aggregateIds, ...untypedRunCostIds])
138
- );
139
- return {
140
- tokenUsage: {
141
- input: input.value ?? 0,
142
- output: Math.max(output.value ?? 0, reasoning.value ?? 0),
143
- ...reasoning.value !== void 0 ? { reasoning: reasoning.value } : {},
144
- ...cached.value !== void 0 ? { cached: cached.value } : {},
145
- ...cacheWrite.value !== void 0 ? { cacheWrite: cacheWrite.value } : {}
146
- },
147
- modelCallCount: calls.length,
148
- callSpanIds: calls.map((span) => span.id),
149
- cost: reconcileMeasurement(calls, byId, aggregateSourceIds, LLM_COST_ATTR_KEYS),
150
- ...aggregate ? { aggregate } : {}
151
- };
152
- }
153
- function recordAggregateMeasurements(raw, aggregate) {
154
- if (!aggregate) return;
155
- raw.aggregate_prompt_tokens = aggregate.tokenUsage.input;
156
- raw.aggregate_completion_tokens = aggregate.tokenUsage.output;
157
- if (aggregate.tokenUsage.reasoning !== void 0)
158
- raw.aggregate_reasoning_tokens = aggregate.tokenUsage.reasoning;
159
- if (aggregate.tokenUsage.cached !== void 0)
160
- raw.aggregate_cached_tokens = aggregate.tokenUsage.cached;
161
- if (aggregate.tokenUsage.cacheWrite !== void 0)
162
- raw.aggregate_cache_write_tokens = aggregate.tokenUsage.cacheWrite;
163
- if (aggregate.costUsd !== void 0) raw.aggregate_cost_usd = aggregate.costUsd;
164
- }
165
- function summarizeAggregateMeasurements(spans, byId, aggregateIds) {
166
- const aggregates = spans.filter((span) => span.aggregate || aggregateIds.has(span.id));
167
- const input = reconcileTopLevelMeasurement(aggregates, byId, LLM_INPUT_TOKEN_ATTR_KEYS);
168
- const output = reconcileTopLevelMeasurement(aggregates, byId, LLM_OUTPUT_TOKEN_ATTR_KEYS);
169
- const reasoning = reconcileTopLevelMeasurement(aggregates, byId, LLM_REASONING_TOKEN_ATTR_KEYS);
170
- const cached = reconcileTopLevelMeasurement(aggregates, byId, LLM_CACHED_TOKEN_ATTR_KEYS);
171
- const cacheWrite = reconcileTopLevelMeasurement(aggregates, byId, LLM_CACHE_WRITE_TOKEN_ATTR_KEYS);
172
- const costUsd = reconcileTopLevelMeasurement(aggregates, byId, LLM_COST_ATTR_KEYS);
173
- if (input === void 0 && output === void 0 && reasoning === void 0 && cached === void 0 && cacheWrite === void 0 && costUsd === void 0)
174
- return void 0;
175
- return {
176
- tokenUsage: {
177
- input: input ?? 0,
178
- output: output ?? reasoning ?? 0,
179
- ...reasoning !== void 0 ? { reasoning } : {},
180
- ...cached !== void 0 ? { cached } : {},
181
- ...cacheWrite !== void 0 ? { cacheWrite } : {}
182
- },
183
- ...costUsd !== void 0 ? { costUsd } : {}
184
- };
185
- }
186
- function reconcileTopLevelMeasurement(spans, byId, keys) {
187
- const selected = /* @__PURE__ */ new Map();
188
- for (const span of spans) {
189
- const value = readNumber(span.attributes, keys);
190
- if (value !== void 0) selected.set(span.id, value);
191
- }
192
- for (const spanId of [...selected.keys()]) {
193
- const span = byId.get(spanId);
194
- if (!span) continue;
195
- if (ancestorIds(span, byId).some((ancestorId) => selected.has(ancestorId))) {
196
- selected.delete(spanId);
197
- }
198
- }
199
- return selected.size > 0 ? [...selected.values()].reduce((total, value) => total + value, 0) : void 0;
200
- }
201
- function reconcileMeasurement(calls, byId, aggregateSourceIds, keys, fallbackKeys) {
202
- const selected = /* @__PURE__ */ new Map();
203
- const callIds = new Set(calls.map((call) => call.id));
204
- let reportingCalls = 0;
205
- for (const call of calls) {
206
- const primary = nearestMeasurement(call, byId, callIds, aggregateSourceIds, keys);
207
- const fallback = fallbackKeys ? nearestMeasurement(call, byId, callIds, aggregateSourceIds, fallbackKeys) : void 0;
208
- const source = primary && fallback && primary.span.id === fallback.span.id ? { span: primary.span, value: Math.max(primary.value, fallback.value) } : primary ?? fallback;
209
- if (!source) continue;
210
- reportingCalls += 1;
211
- selected.set(source.span.id, source.value);
212
- }
213
- for (const spanId of [...selected.keys()]) {
214
- const span = byId.get(spanId);
215
- if (!span) continue;
216
- if (ancestorIds(span, byId).some(
217
- (ancestorId) => selected.has(ancestorId) && !callIds.has(ancestorId)
218
- )) {
219
- selected.delete(spanId);
220
- }
221
- }
222
- return {
223
- ...selected.size > 0 ? { value: [...selected.values()].reduce((total, value) => total + value, 0) } : {},
224
- reportingCalls,
225
- complete: calls.length > 0 && reportingCalls === calls.length
226
- };
227
- }
228
- function nearestMeasurement(call, byId, callIds, aggregateSourceIds, keys) {
229
- let current = call;
230
- const seen = /* @__PURE__ */ new Set();
231
- while (current && !seen.has(current.id)) {
232
- seen.add(current.id);
233
- const value = readNumber(current.attributes, keys);
234
- if (value !== void 0 && (current.id === call.id || !callIds.has(current.id) && aggregateSourceIds.has(current.id))) {
235
- return { span: current, value };
236
- }
237
- current = current.parentId ? byId.get(current.parentId) : void 0;
238
- }
239
- return void 0;
240
- }
241
- function classifyAggregateSpans(candidates, childrenById) {
242
- const aggregateIds = /* @__PURE__ */ new Set();
243
- const summaries = /* @__PURE__ */ new Map();
244
- const visiting = /* @__PURE__ */ new Set();
245
- const visit = (span) => {
246
- const cached = summaries.get(span.id);
247
- if (cached) return cached;
248
- if (visiting.has(span.id)) return emptyRetainedCallSummary();
249
- visiting.add(span.id);
250
- const descendants = emptyRetainedCallSummary();
251
- for (const child of childrenById.get(span.id) ?? []) {
252
- const childDescendants = visit(child);
253
- if (!aggregateIds.has(child.id)) addRetainedCall(descendants, child);
254
- addRetainedCallSummary(descendants, childDescendants);
255
- }
256
- if (descendants.callCount > 0 && (!span.modelCall || hasCompatibleDescendantMeasurements(span, descendants))) {
257
- aggregateIds.add(span.id);
258
- }
259
- visiting.delete(span.id);
260
- summaries.set(span.id, descendants);
261
- return descendants;
262
- };
263
- for (const candidate of candidates) visit(candidate);
264
- return aggregateIds;
265
- }
266
- function emptyRetainedCallSummary() {
267
- return {
268
- callCount: 0,
269
- measurements: EXECUTION_MEASUREMENT_KEY_GROUPS.map(() => ({
270
- total: 0,
271
- reportingCalls: 0
272
- }))
273
- };
274
- }
275
- function addRetainedCall(summary, span) {
276
- summary.callCount += 1;
277
- for (let index = 0; index < EXECUTION_MEASUREMENT_KEY_GROUPS.length; index += 1) {
278
- const value = readNumber(span.attributes, EXECUTION_MEASUREMENT_KEY_GROUPS[index]);
279
- if (value === void 0) continue;
280
- const measurement = summary.measurements[index];
281
- measurement.total += value;
282
- measurement.reportingCalls += 1;
283
- }
284
- }
285
- function addRetainedCallSummary(target, source) {
286
- target.callCount += source.callCount;
287
- for (let index = 0; index < target.measurements.length; index += 1) {
288
- const measurement = target.measurements[index];
289
- const sourceMeasurement = source.measurements[index];
290
- measurement.total += sourceMeasurement.total;
291
- measurement.reportingCalls += sourceMeasurement.reportingCalls;
292
- }
293
- }
294
- function hasCompatibleDescendantMeasurements(span, descendants) {
295
- let parentMeasurements = 0;
296
- let descendantMeasurements = 0;
297
- for (let index = 0; index < EXECUTION_MEASUREMENT_KEY_GROUPS.length; index += 1) {
298
- const keys = EXECUTION_MEASUREMENT_KEY_GROUPS[index];
299
- const parentValue = readNumber(span.attributes, keys);
300
- const measurement = descendants.measurements[index];
301
- if (parentValue !== void 0) parentMeasurements += 1;
302
- if (measurement.reportingCalls > 0) descendantMeasurements += 1;
303
- if (parentValue === void 0 || measurement.reportingCalls === 0) continue;
304
- if (measurement.reportingCalls !== descendants.callCount) continue;
305
- if (Math.abs(parentValue - measurement.total) > 1e-12) return false;
306
- }
307
- return parentMeasurements === 0 || descendantMeasurements > 0;
308
- }
309
- function ancestorIds(span, byId) {
310
- const ids = [];
311
- const seen = /* @__PURE__ */ new Set();
312
- let parentId = span.parentId;
313
- while (parentId && !seen.has(parentId)) {
314
- ids.push(parentId);
315
- seen.add(parentId);
316
- parentId = byId.get(parentId)?.parentId;
317
- }
318
- return ids;
319
- }
320
- function nearestCandidateParent(span, byId, candidateIds) {
321
- const seen = /* @__PURE__ */ new Set();
322
- let parentId = span.parentId;
323
- while (parentId && !seen.has(parentId)) {
324
- if (candidateIds.has(parentId)) return parentId;
325
- seen.add(parentId);
326
- parentId = byId.get(parentId)?.parentId;
327
- }
328
- return void 0;
329
- }
330
- function readNumber(attributes, keys) {
331
- for (const key of keys) {
332
- const value = attributes[key];
333
- const parsed = typeof value === "number" ? value : typeof value === "string" && value.length > 0 ? Number(value) : Number.NaN;
334
- if (Number.isFinite(parsed) && parsed >= 0) return parsed;
335
- }
336
- return void 0;
337
- }
338
-
339
- // src/trace/task-failure-attributes.ts
340
- var TASK_FAILURE_CLASS_ATTR = "tangle.task.failure_class";
341
- var TASK_FAILURE_MODE_ATTR = "tangle.task.failure_mode";
342
- function readTaskFailureLabels(roots, context) {
343
- const failureClass = readConsistentRootString(roots, TASK_FAILURE_CLASS_ATTR, context);
344
- const failureMode = readConsistentRootString(roots, TASK_FAILURE_MODE_ATTR, context);
345
- if (failureClass !== void 0 && !FAILURE_CLASSES.includes(failureClass)) {
346
- throw new ValidationError(
347
- `${context}: ${TASK_FAILURE_CLASS_ATTR} must be one of ${FAILURE_CLASSES.join(", ")}`
348
- );
349
- }
350
- if (failureMode !== void 0 && (failureClass === void 0 || failureClass === "success")) {
351
- throw new ValidationError(
352
- `${context}: ${TASK_FAILURE_MODE_ATTR} requires a non-success ${TASK_FAILURE_CLASS_ATTR}`
353
- );
354
- }
355
- if (failureClass === void 0) return {};
356
- if (failureClass === "success") return { failureClass };
357
- return {
358
- failureClass,
359
- ...failureMode ? { failureMode } : {}
360
- };
361
- }
362
- function readConsistentRootString(roots, key, context) {
363
- const values = /* @__PURE__ */ new Set();
364
- for (const root of roots) {
365
- if (!Object.hasOwn(root.attributes, key)) continue;
366
- const value = root.attributes[key];
367
- if (typeof value !== "string" || value.trim().length === 0) {
368
- throw new ValidationError(`${context}: ${key} must be a non-empty string`);
369
- }
370
- values.add(value);
371
- }
372
- if (values.size > 1) {
373
- throw new ValidationError(
374
- `${context}: conflicting ${key} values: ${[...values].sort().join(", ")}`
375
- );
376
- }
377
- return values.values().next().value;
378
- }
379
-
380
- export {
381
- summarizeTraceErrors,
382
- summarizeExecutionMeasurements,
383
- recordAggregateMeasurements,
384
- readTaskFailureLabels
385
- };
386
- //# sourceMappingURL=chunk-7ZZMD7UK.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/trace/error-classification.ts","../src/trace/execution-measurements.ts","../src/trace/task-failure-attributes.ts"],"sourcesContent":["import type { OtlpSpanRole } from './otlp-attributes'\n\nexport type TraceErrorRole = OtlpSpanRole\n\nexport interface TraceErrorSignal {\n id: string\n parentId?: string\n role: TraceErrorRole\n error: boolean\n processRoot: boolean\n}\n\nexport interface TraceErrorSummary {\n total: number\n execution: number\n process: number\n guardrail: number\n evaluation: number\n propagated: number\n unclassified: number\n}\n\n/**\n * Classify errored spans without counting a propagated parent status as a\n * second execution failure.\n */\nexport function summarizeTraceErrors(signals: readonly TraceErrorSignal[]): TraceErrorSummary {\n const byId = new Map<string, TraceErrorSignal>()\n for (const signal of signals) {\n if (byId.has(signal.id)) {\n throw new Error(`summarizeTraceErrors: duplicate span id '${signal.id}'`)\n }\n byId.set(signal.id, signal)\n }\n\n const propagated = new Set<string>()\n for (const signal of signals) {\n if (!signal.error) continue\n const visited = new Set<string>()\n let parentId = signal.parentId\n while (parentId && !visited.has(parentId)) {\n visited.add(parentId)\n const parent = byId.get(parentId)\n if (!parent) break\n if (parent.error) propagated.add(parent.id)\n parentId = parent.parentId\n }\n }\n\n const summary: TraceErrorSummary = {\n total: 0,\n execution: 0,\n process: 0,\n guardrail: 0,\n evaluation: 0,\n propagated: 0,\n unclassified: 0,\n }\n\n for (const signal of signals) {\n if (!signal.error) continue\n summary.total += 1\n if (signal.role === 'GUARDRAIL') {\n summary.guardrail += 1\n } else if (signal.role === 'EVALUATOR') {\n summary.evaluation += 1\n } else if (signal.processRoot) {\n summary.process += 1\n } else if (propagated.has(signal.id)) {\n summary.propagated += 1\n } else if (\n signal.role === 'AGENT' ||\n signal.role === 'CHAIN' ||\n signal.role === 'LLM' ||\n signal.role === 'TOOL'\n ) {\n summary.execution += 1\n } else {\n summary.unclassified += 1\n }\n }\n\n return summary\n}\n","import type { RunTokenUsage } from '../run-record'\nimport {\n LLM_CACHE_WRITE_TOKEN_ATTR_KEYS,\n LLM_CACHED_TOKEN_ATTR_KEYS,\n LLM_COST_ATTR_KEYS,\n LLM_INPUT_TOKEN_ATTR_KEYS,\n LLM_OUTPUT_TOKEN_ATTR_KEYS,\n LLM_REASONING_TOKEN_ATTR_KEYS,\n RUN_COST_ATTR_KEYS,\n} from './otlp-attributes'\n\nexport interface ExecutionMeasurementSpan {\n id: string\n parentId?: string\n attributes: Record<string, unknown>\n modelCall: boolean\n aggregate: boolean\n}\n\nexport interface MeasurementCoverage {\n value?: number\n reportingCalls: number\n complete: boolean\n}\n\nexport interface ExecutionMeasurements {\n tokenUsage: RunTokenUsage\n modelCallCount: number\n callSpanIds: string[]\n cost: MeasurementCoverage\n aggregate?: {\n tokenUsage: RunTokenUsage\n costUsd?: number\n }\n}\n\nconst TOKEN_MEASUREMENT_KEY_GROUPS = [\n LLM_INPUT_TOKEN_ATTR_KEYS,\n LLM_OUTPUT_TOKEN_ATTR_KEYS,\n LLM_REASONING_TOKEN_ATTR_KEYS,\n LLM_CACHED_TOKEN_ATTR_KEYS,\n LLM_CACHE_WRITE_TOKEN_ATTR_KEYS,\n] as const\n\nconst EXECUTION_MEASUREMENT_KEY_GROUPS = [\n ...TOKEN_MEASUREMENT_KEY_GROUPS,\n LLM_COST_ATTR_KEYS,\n] as const\n\ninterface RetainedCallSummary {\n callCount: number\n measurements: Array<{\n total: number\n reportingCalls: number\n }>\n}\n\n/**\n * Reconcile execution measurements across nested telemetry wrappers.\n * A measured parent is used only when a descendant call does not report the\n * same field, so aggregate wrappers neither duplicate complete child data nor\n * erase complementary parent fields.\n */\nexport function summarizeExecutionMeasurements(\n spans: ExecutionMeasurementSpan[],\n): ExecutionMeasurements {\n const byId = new Map<string, ExecutionMeasurementSpan>()\n for (const span of spans) {\n if (byId.has(span.id)) {\n throw new Error(`summarizeExecutionMeasurements: duplicate span id \"${span.id}\"`)\n }\n byId.set(span.id, span)\n }\n const tokenMeasurementKeys = TOKEN_MEASUREMENT_KEY_GROUPS.flat()\n const candidates = spans.filter(\n (span) =>\n span.modelCall ||\n (!span.aggregate && readNumber(span.attributes, tokenMeasurementKeys) !== undefined),\n )\n const candidateIds = new Set(candidates.map((span) => span.id))\n const candidateChildren = new Map<string, ExecutionMeasurementSpan[]>()\n for (const candidate of candidates) {\n const parentId = nearestCandidateParent(candidate, byId, candidateIds)\n if (!parentId) continue\n const children = candidateChildren.get(parentId) ?? []\n children.push(candidate)\n candidateChildren.set(parentId, children)\n }\n const aggregateIds = classifyAggregateSpans(candidates, candidateChildren)\n const untypedRunCostIds = new Set(\n spans\n .filter(\n (span) =>\n !span.modelCall &&\n !span.aggregate &&\n !candidateIds.has(span.id) &&\n readNumber(span.attributes, RUN_COST_ATTR_KEYS) !== undefined,\n )\n .map((span) => span.id),\n )\n const aggregateSourceIds = new Set(\n spans\n .filter(\n (span) => span.aggregate || aggregateIds.has(span.id) || untypedRunCostIds.has(span.id),\n )\n .map((span) => span.id),\n )\n\n const calls = candidates.filter((span) => !aggregateIds.has(span.id))\n const input = reconcileMeasurement(calls, byId, aggregateSourceIds, LLM_INPUT_TOKEN_ATTR_KEYS)\n const reasoning = reconcileMeasurement(\n calls,\n byId,\n aggregateSourceIds,\n LLM_REASONING_TOKEN_ATTR_KEYS,\n )\n const output = reconcileMeasurement(\n calls,\n byId,\n aggregateSourceIds,\n LLM_OUTPUT_TOKEN_ATTR_KEYS,\n LLM_REASONING_TOKEN_ATTR_KEYS,\n )\n const cached = reconcileMeasurement(calls, byId, aggregateSourceIds, LLM_CACHED_TOKEN_ATTR_KEYS)\n const cacheWrite = reconcileMeasurement(\n calls,\n byId,\n aggregateSourceIds,\n LLM_CACHE_WRITE_TOKEN_ATTR_KEYS,\n )\n const aggregate = summarizeAggregateMeasurements(\n spans,\n byId,\n new Set([...aggregateIds, ...untypedRunCostIds]),\n )\n\n return {\n tokenUsage: {\n input: input.value ?? 0,\n output: Math.max(output.value ?? 0, reasoning.value ?? 0),\n ...(reasoning.value !== undefined ? { reasoning: reasoning.value } : {}),\n ...(cached.value !== undefined ? { cached: cached.value } : {}),\n ...(cacheWrite.value !== undefined ? { cacheWrite: cacheWrite.value } : {}),\n },\n modelCallCount: calls.length,\n callSpanIds: calls.map((span) => span.id),\n cost: reconcileMeasurement(calls, byId, aggregateSourceIds, LLM_COST_ATTR_KEYS),\n ...(aggregate ? { aggregate } : {}),\n }\n}\n\nexport function recordAggregateMeasurements(\n raw: Record<string, number>,\n aggregate: ExecutionMeasurements['aggregate'],\n): void {\n if (!aggregate) return\n raw.aggregate_prompt_tokens = aggregate.tokenUsage.input\n raw.aggregate_completion_tokens = aggregate.tokenUsage.output\n if (aggregate.tokenUsage.reasoning !== undefined)\n raw.aggregate_reasoning_tokens = aggregate.tokenUsage.reasoning\n if (aggregate.tokenUsage.cached !== undefined)\n raw.aggregate_cached_tokens = aggregate.tokenUsage.cached\n if (aggregate.tokenUsage.cacheWrite !== undefined)\n raw.aggregate_cache_write_tokens = aggregate.tokenUsage.cacheWrite\n if (aggregate.costUsd !== undefined) raw.aggregate_cost_usd = aggregate.costUsd\n}\n\nfunction summarizeAggregateMeasurements(\n spans: ExecutionMeasurementSpan[],\n byId: Map<string, ExecutionMeasurementSpan>,\n aggregateIds: Set<string>,\n): ExecutionMeasurements['aggregate'] {\n const aggregates = spans.filter((span) => span.aggregate || aggregateIds.has(span.id))\n const input = reconcileTopLevelMeasurement(aggregates, byId, LLM_INPUT_TOKEN_ATTR_KEYS)\n const output = reconcileTopLevelMeasurement(aggregates, byId, LLM_OUTPUT_TOKEN_ATTR_KEYS)\n const reasoning = reconcileTopLevelMeasurement(aggregates, byId, LLM_REASONING_TOKEN_ATTR_KEYS)\n const cached = reconcileTopLevelMeasurement(aggregates, byId, LLM_CACHED_TOKEN_ATTR_KEYS)\n const cacheWrite = reconcileTopLevelMeasurement(aggregates, byId, LLM_CACHE_WRITE_TOKEN_ATTR_KEYS)\n const costUsd = reconcileTopLevelMeasurement(aggregates, byId, LLM_COST_ATTR_KEYS)\n if (\n input === undefined &&\n output === undefined &&\n reasoning === undefined &&\n cached === undefined &&\n cacheWrite === undefined &&\n costUsd === undefined\n )\n return undefined\n return {\n tokenUsage: {\n input: input ?? 0,\n output: output ?? reasoning ?? 0,\n ...(reasoning !== undefined ? { reasoning } : {}),\n ...(cached !== undefined ? { cached } : {}),\n ...(cacheWrite !== undefined ? { cacheWrite } : {}),\n },\n ...(costUsd !== undefined ? { costUsd } : {}),\n }\n}\n\nfunction reconcileTopLevelMeasurement(\n spans: ExecutionMeasurementSpan[],\n byId: Map<string, ExecutionMeasurementSpan>,\n keys: readonly string[],\n): number | undefined {\n const selected = new Map<string, number>()\n for (const span of spans) {\n const value = readNumber(span.attributes, keys)\n if (value !== undefined) selected.set(span.id, value)\n }\n for (const spanId of [...selected.keys()]) {\n const span = byId.get(spanId)\n if (!span) continue\n if (ancestorIds(span, byId).some((ancestorId) => selected.has(ancestorId))) {\n selected.delete(spanId)\n }\n }\n return selected.size > 0\n ? [...selected.values()].reduce((total, value) => total + value, 0)\n : undefined\n}\n\nfunction reconcileMeasurement(\n calls: ExecutionMeasurementSpan[],\n byId: Map<string, ExecutionMeasurementSpan>,\n aggregateSourceIds: Set<string>,\n keys: readonly string[],\n fallbackKeys?: readonly string[],\n): MeasurementCoverage {\n const selected = new Map<string, number>()\n const callIds = new Set(calls.map((call) => call.id))\n let reportingCalls = 0\n\n for (const call of calls) {\n const primary = nearestMeasurement(call, byId, callIds, aggregateSourceIds, keys)\n const fallback = fallbackKeys\n ? nearestMeasurement(call, byId, callIds, aggregateSourceIds, fallbackKeys)\n : undefined\n const source =\n primary && fallback && primary.span.id === fallback.span.id\n ? { span: primary.span, value: Math.max(primary.value, fallback.value) }\n : (primary ?? fallback)\n if (!source) continue\n reportingCalls += 1\n selected.set(source.span.id, source.value)\n }\n\n for (const spanId of [...selected.keys()]) {\n const span = byId.get(spanId)\n if (!span) continue\n if (\n ancestorIds(span, byId).some(\n (ancestorId) => selected.has(ancestorId) && !callIds.has(ancestorId),\n )\n ) {\n selected.delete(spanId)\n }\n }\n\n return {\n ...(selected.size > 0\n ? { value: [...selected.values()].reduce((total, value) => total + value, 0) }\n : {}),\n reportingCalls,\n complete: calls.length > 0 && reportingCalls === calls.length,\n }\n}\n\nfunction nearestMeasurement(\n call: ExecutionMeasurementSpan,\n byId: Map<string, ExecutionMeasurementSpan>,\n callIds: Set<string>,\n aggregateSourceIds: Set<string>,\n keys: readonly string[],\n): { span: ExecutionMeasurementSpan; value: number } | undefined {\n let current: ExecutionMeasurementSpan | undefined = call\n const seen = new Set<string>()\n while (current && !seen.has(current.id)) {\n seen.add(current.id)\n const value = readNumber(current.attributes, keys)\n if (\n value !== undefined &&\n (current.id === call.id || (!callIds.has(current.id) && aggregateSourceIds.has(current.id)))\n ) {\n return { span: current, value }\n }\n current = current.parentId ? byId.get(current.parentId) : undefined\n }\n return undefined\n}\n\nfunction classifyAggregateSpans(\n candidates: ExecutionMeasurementSpan[],\n childrenById: Map<string, ExecutionMeasurementSpan[]>,\n): Set<string> {\n const aggregateIds = new Set<string>()\n const summaries = new Map<string, RetainedCallSummary>()\n const visiting = new Set<string>()\n\n const visit = (span: ExecutionMeasurementSpan): RetainedCallSummary => {\n const cached = summaries.get(span.id)\n if (cached) return cached\n if (visiting.has(span.id)) return emptyRetainedCallSummary()\n visiting.add(span.id)\n\n const descendants = emptyRetainedCallSummary()\n for (const child of childrenById.get(span.id) ?? []) {\n const childDescendants = visit(child)\n if (!aggregateIds.has(child.id)) addRetainedCall(descendants, child)\n addRetainedCallSummary(descendants, childDescendants)\n }\n\n if (\n descendants.callCount > 0 &&\n (!span.modelCall || hasCompatibleDescendantMeasurements(span, descendants))\n ) {\n aggregateIds.add(span.id)\n }\n\n visiting.delete(span.id)\n summaries.set(span.id, descendants)\n return descendants\n }\n\n for (const candidate of candidates) visit(candidate)\n return aggregateIds\n}\n\nfunction emptyRetainedCallSummary(): RetainedCallSummary {\n return {\n callCount: 0,\n measurements: EXECUTION_MEASUREMENT_KEY_GROUPS.map(() => ({\n total: 0,\n reportingCalls: 0,\n })),\n }\n}\n\nfunction addRetainedCall(summary: RetainedCallSummary, span: ExecutionMeasurementSpan): void {\n summary.callCount += 1\n for (let index = 0; index < EXECUTION_MEASUREMENT_KEY_GROUPS.length; index += 1) {\n const value = readNumber(span.attributes, EXECUTION_MEASUREMENT_KEY_GROUPS[index]!)\n if (value === undefined) continue\n const measurement = summary.measurements[index]!\n measurement.total += value\n measurement.reportingCalls += 1\n }\n}\n\nfunction addRetainedCallSummary(target: RetainedCallSummary, source: RetainedCallSummary): void {\n target.callCount += source.callCount\n for (let index = 0; index < target.measurements.length; index += 1) {\n const measurement = target.measurements[index]!\n const sourceMeasurement = source.measurements[index]!\n measurement.total += sourceMeasurement.total\n measurement.reportingCalls += sourceMeasurement.reportingCalls\n }\n}\n\nfunction hasCompatibleDescendantMeasurements(\n span: ExecutionMeasurementSpan,\n descendants: RetainedCallSummary,\n): boolean {\n let parentMeasurements = 0\n let descendantMeasurements = 0\n for (let index = 0; index < EXECUTION_MEASUREMENT_KEY_GROUPS.length; index += 1) {\n const keys = EXECUTION_MEASUREMENT_KEY_GROUPS[index]!\n const parentValue = readNumber(span.attributes, keys)\n const measurement = descendants.measurements[index]!\n if (parentValue !== undefined) parentMeasurements += 1\n if (measurement.reportingCalls > 0) descendantMeasurements += 1\n if (parentValue === undefined || measurement.reportingCalls === 0) continue\n if (measurement.reportingCalls !== descendants.callCount) continue\n if (Math.abs(parentValue - measurement.total) > 1e-12) return false\n }\n return parentMeasurements === 0 || descendantMeasurements > 0\n}\n\nfunction ancestorIds(\n span: ExecutionMeasurementSpan,\n byId: Map<string, ExecutionMeasurementSpan>,\n): string[] {\n const ids: string[] = []\n const seen = new Set<string>()\n let parentId = span.parentId\n while (parentId && !seen.has(parentId)) {\n ids.push(parentId)\n seen.add(parentId)\n parentId = byId.get(parentId)?.parentId\n }\n return ids\n}\n\nfunction nearestCandidateParent(\n span: ExecutionMeasurementSpan,\n byId: Map<string, ExecutionMeasurementSpan>,\n candidateIds: Set<string>,\n): string | undefined {\n const seen = new Set<string>()\n let parentId = span.parentId\n while (parentId && !seen.has(parentId)) {\n if (candidateIds.has(parentId)) return parentId\n seen.add(parentId)\n parentId = byId.get(parentId)?.parentId\n }\n return undefined\n}\n\nfunction readNumber(\n attributes: Record<string, unknown>,\n keys: readonly string[],\n): number | undefined {\n for (const key of keys) {\n const value = attributes[key]\n const parsed =\n typeof value === 'number'\n ? value\n : typeof value === 'string' && value.length > 0\n ? Number(value)\n : Number.NaN\n if (Number.isFinite(parsed) && parsed >= 0) return parsed\n }\n return undefined\n}\n","import { ValidationError } from '../errors'\nimport { FAILURE_CLASSES, type FailureClass } from './schema'\n\nconst TASK_FAILURE_CLASS_ATTR = 'tangle.task.failure_class'\nconst TASK_FAILURE_MODE_ATTR = 'tangle.task.failure_mode'\n\ninterface AttributeCarrier {\n attributes: Record<string, unknown>\n}\n\nexport type TaskFailureLabels =\n | { failureClass?: undefined; failureMode?: undefined }\n | { failureClass: 'success'; failureMode?: undefined }\n | { failureClass: Exclude<FailureClass, 'success'>; failureMode?: string }\n\nexport function readTaskFailureLabels(\n roots: readonly AttributeCarrier[],\n context: string,\n): TaskFailureLabels {\n const failureClass = readConsistentRootString(roots, TASK_FAILURE_CLASS_ATTR, context)\n const failureMode = readConsistentRootString(roots, TASK_FAILURE_MODE_ATTR, context)\n\n if (failureClass !== undefined && !FAILURE_CLASSES.includes(failureClass as FailureClass)) {\n throw new ValidationError(\n `${context}: ${TASK_FAILURE_CLASS_ATTR} must be one of ${FAILURE_CLASSES.join(', ')}`,\n )\n }\n if (failureMode !== undefined && (failureClass === undefined || failureClass === 'success')) {\n throw new ValidationError(\n `${context}: ${TASK_FAILURE_MODE_ATTR} requires a non-success ${TASK_FAILURE_CLASS_ATTR}`,\n )\n }\n\n if (failureClass === undefined) return {}\n if (failureClass === 'success') return { failureClass }\n return {\n failureClass: failureClass as Exclude<FailureClass, 'success'>,\n ...(failureMode ? { failureMode } : {}),\n }\n}\n\nfunction readConsistentRootString(\n roots: readonly AttributeCarrier[],\n key: string,\n context: string,\n): string | undefined {\n const values = new Set<string>()\n for (const root of roots) {\n if (!Object.hasOwn(root.attributes, key)) continue\n const value = root.attributes[key]\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new ValidationError(`${context}: ${key} must be a non-empty string`)\n }\n values.add(value)\n }\n\n if (values.size > 1) {\n throw new ValidationError(\n `${context}: conflicting ${key} values: ${[...values].sort().join(', ')}`,\n )\n }\n return values.values().next().value\n}\n"],"mappings":"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","names":[]}
@@ -1,40 +0,0 @@
1
- // src/series-convergence.ts
2
- function analyzeSeries(values, options = {}) {
3
- const window = options.window ?? 5;
4
- const stableCv = options.stableCv ?? 0.05;
5
- const driftRun = options.driftRun ?? 3;
6
- if (values.length < Math.max(2, Math.min(window, 3))) {
7
- return { state: "insufficient-data", windowMean: 0, windowCv: 0, tailRun: 0, stable: false };
8
- }
9
- const tail = values.slice(-window);
10
- const mean = tail.reduce((a, b) => a + b, 0) / tail.length;
11
- const variance = tail.reduce((acc, v) => acc + (v - mean) ** 2, 0) / tail.length;
12
- const stdDev = Math.sqrt(variance);
13
- const refMean = Math.abs(mean) > 1e-9 ? Math.abs(mean) : 1;
14
- const cv = stdDev / refMean;
15
- const stable = tail.length >= window && cv <= stableCv;
16
- let tailRun = 0;
17
- let direction = 0;
18
- for (let i = values.length - 1; i > 0; i--) {
19
- const delta = values[i] - values[i - 1];
20
- if (delta === 0) break;
21
- const dir = delta > 0 ? 1 : -1;
22
- if (direction === 0) direction = dir;
23
- if (dir !== direction) break;
24
- tailRun += dir;
25
- }
26
- let state;
27
- if (stable) {
28
- state = "stabilized";
29
- } else if (Math.abs(tailRun) >= driftRun) {
30
- state = tailRun > 0 ? "drifting-up" : "drifting-down";
31
- } else {
32
- state = "noisy";
33
- }
34
- return { state, windowMean: mean, windowCv: cv, tailRun, stable };
35
- }
36
-
37
- export {
38
- analyzeSeries
39
- };
40
- //# sourceMappingURL=chunk-BOD4O7OF.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/series-convergence.ts"],"sourcesContent":["/**\n * Series convergence — detects whether a sequence of scalar measurements\n * is stabilizing, drifting, or noisy.\n *\n * Lifted from ADC convergence.ts. The per-turn `ConvergenceTracker` is\n * about progress *within* a single run; this module is about drift\n * *across* runs (e.g. \"are my nightly eval scores stabilizing?\").\n *\n * Three signals:\n * - stabilized: last K values have low variance (< epsilon) — done\n * - drifting: recent trend is monotonic and beyond noise — regressing or improving\n * - noisy: neither — keep iterating, but flag as untrustworthy for gating\n */\n\nexport interface SeriesConvergenceOptions {\n /** Window size for \"recent\" analysis (default 5). */\n window?: number\n /** Coefficient-of-variation threshold below which the window is stabilized (default 0.05 = 5%). */\n stableCv?: number\n /** Minimum monotone run length to call drift (default 3). */\n driftRun?: number\n}\n\nexport interface SeriesConvergenceResult {\n state: 'stabilized' | 'drifting-up' | 'drifting-down' | 'noisy' | 'insufficient-data'\n windowMean: number\n windowCv: number\n /** Longest monotonic run at the tail of the series (positive for up, negative for down). */\n tailRun: number\n /** True when n ≥ window AND windowCv ≤ stableCv. */\n stable: boolean\n}\n\nexport function analyzeSeries(\n values: number[],\n options: SeriesConvergenceOptions = {},\n): SeriesConvergenceResult {\n const window = options.window ?? 5\n const stableCv = options.stableCv ?? 0.05\n const driftRun = options.driftRun ?? 3\n\n if (values.length < Math.max(2, Math.min(window, 3))) {\n return { state: 'insufficient-data', windowMean: 0, windowCv: 0, tailRun: 0, stable: false }\n }\n\n const tail = values.slice(-window)\n const mean = tail.reduce((a, b) => a + b, 0) / tail.length\n const variance = tail.reduce((acc, v) => acc + (v - mean) ** 2, 0) / tail.length\n const stdDev = Math.sqrt(variance)\n const refMean = Math.abs(mean) > 1e-9 ? Math.abs(mean) : 1\n const cv = stdDev / refMean\n const stable = tail.length >= window && cv <= stableCv\n\n // Tail monotonic run: count how many consecutive strictly-increasing (or decreasing)\n // steps end at the final value.\n let tailRun = 0\n let direction: 1 | -1 | 0 = 0\n for (let i = values.length - 1; i > 0; i--) {\n const delta = values[i]! - values[i - 1]!\n if (delta === 0) break\n const dir = delta > 0 ? 1 : -1\n if (direction === 0) direction = dir\n if (dir !== direction) break\n tailRun += dir\n }\n\n let state: SeriesConvergenceResult['state']\n if (stable) {\n state = 'stabilized'\n } else if (Math.abs(tailRun) >= driftRun) {\n state = tailRun > 0 ? 'drifting-up' : 'drifting-down'\n } else {\n state = 'noisy'\n }\n\n return { state, windowMean: mean, windowCv: cv, tailRun, stable }\n}\n"],"mappings":";AAiCO,SAAS,cACd,QACA,UAAoC,CAAC,GACZ;AACzB,QAAM,SAAS,QAAQ,UAAU;AACjC,QAAM,WAAW,QAAQ,YAAY;AACrC,QAAM,WAAW,QAAQ,YAAY;AAErC,MAAI,OAAO,SAAS,KAAK,IAAI,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,GAAG;AACpD,WAAO,EAAE,OAAO,qBAAqB,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,MAAM;AAAA,EAC7F;AAEA,QAAM,OAAO,OAAO,MAAM,CAAC,MAAM;AACjC,QAAM,OAAO,KAAK,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK;AACpD,QAAM,WAAW,KAAK,OAAO,CAAC,KAAK,MAAM,OAAO,IAAI,SAAS,GAAG,CAAC,IAAI,KAAK;AAC1E,QAAM,SAAS,KAAK,KAAK,QAAQ;AACjC,QAAM,UAAU,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI;AACzD,QAAM,KAAK,SAAS;AACpB,QAAM,SAAS,KAAK,UAAU,UAAU,MAAM;AAI9C,MAAI,UAAU;AACd,MAAI,YAAwB;AAC5B,WAAS,IAAI,OAAO,SAAS,GAAG,IAAI,GAAG,KAAK;AAC1C,UAAM,QAAQ,OAAO,CAAC,IAAK,OAAO,IAAI,CAAC;AACvC,QAAI,UAAU,EAAG;AACjB,UAAM,MAAM,QAAQ,IAAI,IAAI;AAC5B,QAAI,cAAc,EAAG,aAAY;AACjC,QAAI,QAAQ,UAAW;AACvB,eAAW;AAAA,EACb;AAEA,MAAI;AACJ,MAAI,QAAQ;AACV,YAAQ;AAAA,EACV,WAAW,KAAK,IAAI,OAAO,KAAK,UAAU;AACxC,YAAQ,UAAU,IAAI,gBAAgB;AAAA,EACxC,OAAO;AACL,YAAQ;AAAA,EACV;AAEA,SAAO,EAAE,OAAO,YAAY,MAAM,UAAU,IAAI,SAAS,OAAO;AAClE;","names":[]}