observability-toolkit 1.8.5 → 2.1.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 (1168) hide show
  1. package/README.md +167 -281
  2. package/dist/__tests__/find-constant-dedup.test.d.ts +11 -0
  3. package/dist/__tests__/find-constant-dedup.test.d.ts.map +1 -0
  4. package/dist/__tests__/find-constant-dedup.test.js +132 -0
  5. package/dist/__tests__/find-constant-dedup.test.js.map +1 -0
  6. package/dist/backends/backend-schemas.d.ts +309 -0
  7. package/dist/backends/backend-schemas.d.ts.map +1 -0
  8. package/dist/backends/backend-schemas.js +215 -0
  9. package/dist/backends/backend-schemas.js.map +1 -0
  10. package/dist/backends/cloud.d.ts +46 -0
  11. package/dist/backends/cloud.d.ts.map +1 -0
  12. package/dist/backends/cloud.js +520 -0
  13. package/dist/backends/cloud.js.map +1 -0
  14. package/dist/backends/cloud.test.d.ts +2 -0
  15. package/dist/backends/cloud.test.d.ts.map +1 -0
  16. package/dist/backends/cloud.test.js +436 -0
  17. package/dist/backends/cloud.test.js.map +1 -0
  18. package/dist/backends/index.d.ts +672 -236
  19. package/dist/backends/index.d.ts.map +1 -1
  20. package/dist/backends/index.js +334 -0
  21. package/dist/backends/index.js.map +1 -1
  22. package/dist/backends/index.test.js +606 -31
  23. package/dist/backends/index.test.js.map +1 -1
  24. package/dist/backends/local-jsonl-boolean-search.test.js +8 -7
  25. package/dist/backends/local-jsonl-boolean-search.test.js.map +1 -1
  26. package/dist/backends/local-jsonl-cache.test.js +33 -31
  27. package/dist/backends/local-jsonl-cache.test.js.map +1 -1
  28. package/dist/backends/local-jsonl-circuit-breaker.test.js +9 -7
  29. package/dist/backends/local-jsonl-circuit-breaker.test.js.map +1 -1
  30. package/dist/backends/local-jsonl-export.test.js +73 -58
  31. package/dist/backends/local-jsonl-export.test.js.map +1 -1
  32. package/dist/backends/local-jsonl-index.test.js +52 -50
  33. package/dist/backends/local-jsonl-index.test.js.map +1 -1
  34. package/dist/backends/local-jsonl-logs.test.js +47 -31
  35. package/dist/backends/local-jsonl-logs.test.js.map +1 -1
  36. package/dist/backends/local-jsonl-metrics.test.js +85 -82
  37. package/dist/backends/local-jsonl-metrics.test.js.map +1 -1
  38. package/dist/backends/local-jsonl-otlp-unwrap.test.d.ts +2 -0
  39. package/dist/backends/local-jsonl-otlp-unwrap.test.d.ts.map +1 -0
  40. package/dist/backends/local-jsonl-otlp-unwrap.test.js +602 -0
  41. package/dist/backends/local-jsonl-otlp-unwrap.test.js.map +1 -0
  42. package/dist/backends/local-jsonl-traces.test.js +161 -147
  43. package/dist/backends/local-jsonl-traces.test.js.map +1 -1
  44. package/dist/backends/local-jsonl.d.ts +64 -5
  45. package/dist/backends/local-jsonl.d.ts.map +1 -1
  46. package/dist/backends/local-jsonl.js +1821 -612
  47. package/dist/backends/local-jsonl.js.map +1 -1
  48. package/dist/backends/shared.d.ts +9 -0
  49. package/dist/backends/shared.d.ts.map +1 -0
  50. package/dist/backends/shared.js +9 -0
  51. package/dist/backends/shared.js.map +1 -0
  52. package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.d.ts +40 -0
  53. package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.d.ts.map +1 -0
  54. package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.js +27 -0
  55. package/dist/generated/opentelemetry/proto/collector/logs/v1/logs_service_pb.js.map +1 -0
  56. package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.d.ts +106 -0
  57. package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.d.ts.map +1 -0
  58. package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.js +43 -0
  59. package/dist/generated/opentelemetry/proto/collector/metrics/v1/metrics_service_pb.js.map +1 -0
  60. package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.d.ts +111 -0
  61. package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.d.ts.map +1 -0
  62. package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.js +42 -0
  63. package/dist/generated/opentelemetry/proto/collector/profiles/v1development/profiles_service_pb.js.map +1 -0
  64. package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.d.ts +106 -0
  65. package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.d.ts.map +1 -0
  66. package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.js +43 -0
  67. package/dist/generated/opentelemetry/proto/collector/trace/v1/trace_service_pb.js.map +1 -0
  68. package/dist/generated/opentelemetry/proto/common/v1/common_pb.d.ts +243 -0
  69. package/dist/generated/opentelemetry/proto/common/v1/common_pb.d.ts.map +1 -0
  70. package/dist/generated/opentelemetry/proto/common/v1/common_pb.js +49 -0
  71. package/dist/generated/opentelemetry/proto/common/v1/common_pb.js.map +1 -0
  72. package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.d.ts +90 -0
  73. package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.d.ts.map +1 -0
  74. package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.js +66 -0
  75. package/dist/generated/opentelemetry/proto/logs/v1/logs_pb.js.map +1 -0
  76. package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.d.ts +1134 -0
  77. package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.d.ts.map +1 -0
  78. package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.js +223 -0
  79. package/dist/generated/opentelemetry/proto/metrics/v1/metrics_pb.js.map +1 -0
  80. package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.d.ts +678 -0
  81. package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.d.ts.map +1 -0
  82. package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.js +107 -0
  83. package/dist/generated/opentelemetry/proto/profiles/v1development/profiles_pb.js.map +1 -0
  84. package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.d.ts +46 -0
  85. package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.d.ts.map +1 -0
  86. package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.js +25 -0
  87. package/dist/generated/opentelemetry/proto/resource/v1/resource_pb.js.map +1 -0
  88. package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.d.ts +569 -0
  89. package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.d.ts.map +1 -0
  90. package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.js +195 -0
  91. package/dist/generated/opentelemetry/proto/trace/v1/trace_pb.js.map +1 -0
  92. package/dist/lib/agent-judge/agent-as-judge.d.ts +157 -0
  93. package/dist/lib/agent-judge/agent-as-judge.d.ts.map +1 -0
  94. package/dist/lib/agent-judge/agent-as-judge.js +137 -0
  95. package/dist/lib/agent-judge/agent-as-judge.js.map +1 -0
  96. package/dist/lib/agent-judge/agent-as-judge.test.d.ts +5 -0
  97. package/dist/lib/agent-judge/agent-as-judge.test.d.ts.map +1 -0
  98. package/dist/lib/agent-judge/agent-as-judge.test.js +839 -0
  99. package/dist/lib/agent-judge/agent-as-judge.test.js.map +1 -0
  100. package/dist/lib/agent-judge/agent-eval-metrics.d.ts +293 -0
  101. package/dist/lib/agent-judge/agent-eval-metrics.d.ts.map +1 -0
  102. package/dist/lib/agent-judge/agent-eval-metrics.js +715 -0
  103. package/dist/lib/agent-judge/agent-eval-metrics.js.map +1 -0
  104. package/dist/lib/agent-judge/agent-eval-metrics.test.d.ts +5 -0
  105. package/dist/lib/agent-judge/agent-eval-metrics.test.d.ts.map +1 -0
  106. package/dist/lib/agent-judge/agent-eval-metrics.test.js +676 -0
  107. package/dist/lib/agent-judge/agent-eval-metrics.test.js.map +1 -0
  108. package/dist/lib/agent-judge/agent-judge-classes.d.ts +95 -0
  109. package/dist/lib/agent-judge/agent-judge-classes.d.ts.map +1 -0
  110. package/dist/lib/agent-judge/agent-judge-classes.js +222 -0
  111. package/dist/lib/agent-judge/agent-judge-classes.js.map +1 -0
  112. package/dist/lib/agent-judge/agent-judge-classes.test.d.ts +6 -0
  113. package/dist/lib/agent-judge/agent-judge-classes.test.d.ts.map +1 -0
  114. package/dist/lib/agent-judge/agent-judge-classes.test.js +271 -0
  115. package/dist/lib/agent-judge/agent-judge-classes.test.js.map +1 -0
  116. package/dist/lib/agent-judge/agent-judge-consensus.d.ts +58 -0
  117. package/dist/lib/agent-judge/agent-judge-consensus.d.ts.map +1 -0
  118. package/dist/lib/agent-judge/agent-judge-consensus.js +149 -0
  119. package/dist/lib/agent-judge/agent-judge-consensus.js.map +1 -0
  120. package/dist/lib/agent-judge/agent-judge-consensus.test.d.ts +2 -0
  121. package/dist/lib/agent-judge/agent-judge-consensus.test.d.ts.map +1 -0
  122. package/dist/lib/agent-judge/agent-judge-consensus.test.js +170 -0
  123. package/dist/lib/agent-judge/agent-judge-consensus.test.js.map +1 -0
  124. package/dist/lib/agent-judge/agent-judge-verification.d.ts +89 -0
  125. package/dist/lib/agent-judge/agent-judge-verification.d.ts.map +1 -0
  126. package/dist/lib/agent-judge/agent-judge-verification.js +235 -0
  127. package/dist/lib/agent-judge/agent-judge-verification.js.map +1 -0
  128. package/dist/lib/agent-judge/agent-judge-verification.test.d.ts +5 -0
  129. package/dist/lib/agent-judge/agent-judge-verification.test.d.ts.map +1 -0
  130. package/dist/lib/agent-judge/agent-judge-verification.test.js +399 -0
  131. package/dist/lib/agent-judge/agent-judge-verification.test.js.map +1 -0
  132. package/dist/lib/audit/agent-auditor-scoring.d.ts +167 -0
  133. package/dist/lib/audit/agent-auditor-scoring.d.ts.map +1 -0
  134. package/dist/lib/audit/agent-auditor-scoring.js +338 -0
  135. package/dist/lib/audit/agent-auditor-scoring.js.map +1 -0
  136. package/dist/lib/audit/agent-auditor-scoring.test.d.ts +2 -0
  137. package/dist/lib/audit/agent-auditor-scoring.test.d.ts.map +1 -0
  138. package/dist/lib/audit/agent-auditor-scoring.test.js +576 -0
  139. package/dist/lib/audit/agent-auditor-scoring.test.js.map +1 -0
  140. package/dist/lib/audit/audit-record.d.ts +139 -0
  141. package/dist/lib/audit/audit-record.d.ts.map +1 -0
  142. package/dist/lib/audit/audit-record.js +288 -0
  143. package/dist/lib/audit/audit-record.js.map +1 -0
  144. package/dist/lib/audit/audit-record.test.d.ts +5 -0
  145. package/dist/lib/audit/audit-record.test.d.ts.map +1 -0
  146. package/dist/lib/audit/audit-record.test.js +258 -0
  147. package/dist/lib/audit/audit-record.test.js.map +1 -0
  148. package/dist/lib/audit/audit-scoring-constants.d.ts +57 -0
  149. package/dist/lib/audit/audit-scoring-constants.d.ts.map +1 -0
  150. package/dist/lib/audit/audit-scoring-constants.js +59 -0
  151. package/dist/lib/audit/audit-scoring-constants.js.map +1 -0
  152. package/dist/lib/audit/compliance-report.d.ts +125 -0
  153. package/dist/lib/audit/compliance-report.d.ts.map +1 -0
  154. package/dist/lib/audit/compliance-report.js +205 -0
  155. package/dist/lib/audit/compliance-report.js.map +1 -0
  156. package/dist/lib/audit/compliance-report.test.d.ts +5 -0
  157. package/dist/lib/audit/compliance-report.test.d.ts.map +1 -0
  158. package/dist/lib/audit/compliance-report.test.js +290 -0
  159. package/dist/lib/audit/compliance-report.test.js.map +1 -0
  160. package/dist/lib/audit/retention-guard.d.ts +41 -0
  161. package/dist/lib/audit/retention-guard.d.ts.map +1 -0
  162. package/dist/lib/audit/retention-guard.js +103 -0
  163. package/dist/lib/audit/retention-guard.js.map +1 -0
  164. package/dist/lib/audit/retention-guard.test.d.ts +5 -0
  165. package/dist/lib/audit/retention-guard.test.d.ts.map +1 -0
  166. package/dist/lib/audit/retention-guard.test.js +109 -0
  167. package/dist/lib/audit/retention-guard.test.js.map +1 -0
  168. package/dist/lib/audit/skill-auditor-scoring.d.ts +69 -0
  169. package/dist/lib/audit/skill-auditor-scoring.d.ts.map +1 -0
  170. package/dist/lib/audit/skill-auditor-scoring.js +149 -0
  171. package/dist/lib/audit/skill-auditor-scoring.js.map +1 -0
  172. package/dist/lib/audit/skill-auditor-scoring.test.d.ts +2 -0
  173. package/dist/lib/audit/skill-auditor-scoring.test.d.ts.map +1 -0
  174. package/dist/lib/audit/skill-auditor-scoring.test.js +369 -0
  175. package/dist/lib/audit/skill-auditor-scoring.test.js.map +1 -0
  176. package/dist/lib/audit/verification-events.d.ts +119 -0
  177. package/dist/lib/audit/verification-events.d.ts.map +1 -0
  178. package/dist/lib/audit/verification-events.js +175 -0
  179. package/dist/lib/audit/verification-events.js.map +1 -0
  180. package/dist/lib/audit/verification-events.test.d.ts +5 -0
  181. package/dist/lib/audit/verification-events.test.d.ts.map +1 -0
  182. package/dist/lib/audit/verification-events.test.js +197 -0
  183. package/dist/lib/audit/verification-events.test.js.map +1 -0
  184. package/dist/lib/core/constants-models.d.ts +90 -0
  185. package/dist/lib/core/constants-models.d.ts.map +1 -0
  186. package/dist/lib/core/constants-models.js +208 -0
  187. package/dist/lib/core/constants-models.js.map +1 -0
  188. package/dist/lib/core/constants-otel.d.ts +68 -0
  189. package/dist/lib/core/constants-otel.d.ts.map +1 -0
  190. package/dist/lib/core/constants-otel.js +128 -0
  191. package/dist/lib/core/constants-otel.js.map +1 -0
  192. package/dist/lib/core/constants-symlink.test.d.ts.map +1 -0
  193. package/dist/lib/{constants-symlink.test.js → core/constants-symlink.test.js} +25 -24
  194. package/dist/lib/core/constants-symlink.test.js.map +1 -0
  195. package/dist/lib/core/constants-telemetry.d.ts +21 -0
  196. package/dist/lib/core/constants-telemetry.d.ts.map +1 -0
  197. package/dist/lib/core/constants-telemetry.js +162 -0
  198. package/dist/lib/core/constants-telemetry.js.map +1 -0
  199. package/dist/lib/core/constants.d.ts +152 -0
  200. package/dist/lib/core/constants.d.ts.map +1 -0
  201. package/dist/lib/core/constants.js +223 -0
  202. package/dist/lib/core/constants.js.map +1 -0
  203. package/dist/lib/core/constants.test.d.ts.map +1 -0
  204. package/dist/lib/{constants.test.js → core/constants.test.js} +198 -82
  205. package/dist/lib/core/constants.test.js.map +1 -0
  206. package/dist/lib/core/doc-sync.test.d.ts +9 -0
  207. package/dist/lib/core/doc-sync.test.d.ts.map +1 -0
  208. package/dist/lib/core/doc-sync.test.js +159 -0
  209. package/dist/lib/core/doc-sync.test.js.map +1 -0
  210. package/dist/lib/core/edge-cases.test.d.ts.map +1 -0
  211. package/dist/lib/{edge-cases.test.js → core/edge-cases.test.js} +76 -73
  212. package/dist/lib/core/edge-cases.test.js.map +1 -0
  213. package/dist/lib/{file-utils.d.ts → core/file-utils.d.ts} +63 -8
  214. package/dist/lib/core/file-utils.d.ts.map +1 -0
  215. package/dist/lib/{file-utils.js → core/file-utils.js} +186 -93
  216. package/dist/lib/core/file-utils.js.map +1 -0
  217. package/dist/lib/core/file-utils.test-constants.d.ts +38 -0
  218. package/dist/lib/core/file-utils.test-constants.d.ts.map +1 -0
  219. package/dist/lib/core/file-utils.test-constants.js +40 -0
  220. package/dist/lib/core/file-utils.test-constants.js.map +1 -0
  221. package/dist/lib/core/file-utils.test.d.ts.map +1 -0
  222. package/dist/lib/{file-utils.test.js → core/file-utils.test.js} +240 -214
  223. package/dist/lib/core/file-utils.test.js.map +1 -0
  224. package/dist/lib/{input-validator.d.ts → core/input-validator.d.ts} +30 -20
  225. package/dist/lib/core/input-validator.d.ts.map +1 -0
  226. package/dist/lib/core/input-validator.fuzz.test.d.ts.map +1 -0
  227. package/dist/lib/{input-validator.fuzz.test.js → core/input-validator.fuzz.test.js} +41 -29
  228. package/dist/lib/core/input-validator.fuzz.test.js.map +1 -0
  229. package/dist/lib/{input-validator.js → core/input-validator.js} +83 -39
  230. package/dist/lib/core/input-validator.js.map +1 -0
  231. package/dist/lib/core/input-validator.test.d.ts.map +1 -0
  232. package/dist/lib/{input-validator.test.js → core/input-validator.test.js} +95 -45
  233. package/dist/lib/core/input-validator.test.js.map +1 -0
  234. package/dist/lib/{logger.d.ts → core/logger.d.ts} +4 -18
  235. package/dist/lib/core/logger.d.ts.map +1 -0
  236. package/dist/lib/core/logger.js +104 -0
  237. package/dist/lib/core/logger.js.map +1 -0
  238. package/dist/lib/core/logger.test.d.ts.map +1 -0
  239. package/dist/lib/core/logger.test.js.map +1 -0
  240. package/dist/lib/core/schema-types.d.ts +37 -0
  241. package/dist/lib/core/schema-types.d.ts.map +1 -0
  242. package/dist/lib/core/schema-types.js +29 -0
  243. package/dist/lib/core/schema-types.js.map +1 -0
  244. package/dist/lib/{server-utils.d.ts → core/server-utils.d.ts} +11 -1
  245. package/dist/lib/core/server-utils.d.ts.map +1 -0
  246. package/dist/lib/{server-utils.js → core/server-utils.js} +25 -5
  247. package/dist/lib/core/server-utils.js.map +1 -0
  248. package/dist/lib/core/shared-schemas.d.ts +301 -0
  249. package/dist/lib/core/shared-schemas.d.ts.map +1 -0
  250. package/dist/lib/core/shared-schemas.js +222 -0
  251. package/dist/lib/core/shared-schemas.js.map +1 -0
  252. package/dist/lib/core/shared-schemas.test.d.ts.map +1 -0
  253. package/dist/lib/{shared-schemas.test.js → core/shared-schemas.test.js} +48 -18
  254. package/dist/lib/core/shared-schemas.test.js.map +1 -0
  255. package/dist/lib/core/units.d.ts +67 -0
  256. package/dist/lib/core/units.d.ts.map +1 -0
  257. package/dist/lib/core/units.js +88 -0
  258. package/dist/lib/core/units.js.map +1 -0
  259. package/dist/lib/cost/cost-estimation.d.ts +264 -0
  260. package/dist/lib/cost/cost-estimation.d.ts.map +1 -0
  261. package/dist/lib/cost/cost-estimation.js +541 -0
  262. package/dist/lib/cost/cost-estimation.js.map +1 -0
  263. package/dist/lib/cost/cost-estimation.test.d.ts +5 -0
  264. package/dist/lib/cost/cost-estimation.test.d.ts.map +1 -0
  265. package/dist/lib/cost/cost-estimation.test.js +701 -0
  266. package/dist/lib/cost/cost-estimation.test.js.map +1 -0
  267. package/dist/lib/cost/pricing-cache.d.ts +59 -0
  268. package/dist/lib/cost/pricing-cache.d.ts.map +1 -0
  269. package/dist/lib/cost/pricing-cache.js +120 -0
  270. package/dist/lib/cost/pricing-cache.js.map +1 -0
  271. package/dist/lib/cost/pricing-cache.test.d.ts +5 -0
  272. package/dist/lib/cost/pricing-cache.test.d.ts.map +1 -0
  273. package/dist/lib/cost/pricing-cache.test.js +176 -0
  274. package/dist/lib/cost/pricing-cache.test.js.map +1 -0
  275. package/dist/lib/dashboard-file-utils.d.ts +35 -0
  276. package/dist/lib/dashboard-file-utils.d.ts.map +1 -0
  277. package/dist/lib/dashboard-file-utils.js +94 -0
  278. package/dist/lib/dashboard-file-utils.js.map +1 -0
  279. package/dist/lib/{error-sanitizer.d.ts → errors/error-sanitizer.d.ts} +5 -0
  280. package/dist/lib/errors/error-sanitizer.d.ts.map +1 -0
  281. package/dist/lib/{error-sanitizer.js → errors/error-sanitizer.js} +8 -6
  282. package/dist/lib/errors/error-sanitizer.js.map +1 -0
  283. package/dist/lib/errors/error-sanitizer.test.d.ts.map +1 -0
  284. package/dist/lib/{error-sanitizer.test.js → errors/error-sanitizer.test.js} +17 -11
  285. package/dist/lib/errors/error-sanitizer.test.js.map +1 -0
  286. package/dist/lib/{error-types.d.ts → errors/error-types.d.ts} +5 -0
  287. package/dist/lib/errors/error-types.d.ts.map +1 -0
  288. package/dist/lib/{error-types.js → errors/error-types.js} +34 -1
  289. package/dist/lib/errors/error-types.js.map +1 -0
  290. package/dist/lib/errors/error-types.test.d.ts.map +1 -0
  291. package/dist/lib/{error-types.test.js → errors/error-types.test.js} +51 -1
  292. package/dist/lib/errors/error-types.test.js.map +1 -0
  293. package/dist/lib/errors/query-sanitizer.d.ts.map +1 -0
  294. package/dist/lib/{query-sanitizer.js → errors/query-sanitizer.js} +9 -1
  295. package/dist/lib/errors/query-sanitizer.js.map +1 -0
  296. package/dist/lib/errors/query-sanitizer.test.d.ts.map +1 -0
  297. package/dist/lib/{query-sanitizer.test.js → errors/query-sanitizer.test.js} +9 -6
  298. package/dist/lib/errors/query-sanitizer.test.js.map +1 -0
  299. package/dist/lib/exports/confident-export.d.ts +105 -0
  300. package/dist/lib/exports/confident-export.d.ts.map +1 -0
  301. package/dist/lib/exports/confident-export.js +385 -0
  302. package/dist/lib/exports/confident-export.js.map +1 -0
  303. package/dist/lib/exports/confident-export.test.d.ts +7 -0
  304. package/dist/lib/exports/confident-export.test.d.ts.map +1 -0
  305. package/dist/lib/exports/confident-export.test.js +848 -0
  306. package/dist/lib/exports/confident-export.test.js.map +1 -0
  307. package/dist/lib/exports/datadog-export.d.ts +200 -0
  308. package/dist/lib/exports/datadog-export.d.ts.map +1 -0
  309. package/dist/lib/exports/datadog-export.js +488 -0
  310. package/dist/lib/exports/datadog-export.js.map +1 -0
  311. package/dist/lib/exports/datadog-export.test.d.ts +2 -0
  312. package/dist/lib/exports/datadog-export.test.d.ts.map +1 -0
  313. package/dist/lib/exports/datadog-export.test.js +890 -0
  314. package/dist/lib/exports/datadog-export.test.js.map +1 -0
  315. package/dist/lib/exports/export-config-schemas.d.ts +67 -0
  316. package/dist/lib/exports/export-config-schemas.d.ts.map +1 -0
  317. package/dist/lib/exports/export-config-schemas.js +120 -0
  318. package/dist/lib/exports/export-config-schemas.js.map +1 -0
  319. package/dist/lib/exports/export-config-schemas.test.d.ts +8 -0
  320. package/dist/lib/exports/export-config-schemas.test.d.ts.map +1 -0
  321. package/dist/lib/exports/export-config-schemas.test.js +503 -0
  322. package/dist/lib/exports/export-config-schemas.test.js.map +1 -0
  323. package/dist/lib/exports/export-utils.d.ts +127 -0
  324. package/dist/lib/exports/export-utils.d.ts.map +1 -0
  325. package/dist/lib/exports/export-utils.js +303 -0
  326. package/dist/lib/exports/export-utils.js.map +1 -0
  327. package/dist/lib/exports/export-utils.test.d.ts +5 -0
  328. package/dist/lib/exports/export-utils.test.d.ts.map +1 -0
  329. package/dist/lib/exports/export-utils.test.js +344 -0
  330. package/dist/lib/exports/export-utils.test.js.map +1 -0
  331. package/dist/lib/exports/langfuse-export.d.ts +129 -0
  332. package/dist/lib/exports/langfuse-export.d.ts.map +1 -0
  333. package/dist/lib/exports/langfuse-export.js +370 -0
  334. package/dist/lib/exports/langfuse-export.js.map +1 -0
  335. package/dist/lib/exports/langfuse-export.test.d.ts +7 -0
  336. package/dist/lib/exports/langfuse-export.test.d.ts.map +1 -0
  337. package/dist/lib/exports/langfuse-export.test.js +1020 -0
  338. package/dist/lib/exports/langfuse-export.test.js.map +1 -0
  339. package/dist/lib/{otlp-export.d.ts → exports/otlp-export.d.ts} +3 -2
  340. package/dist/lib/exports/otlp-export.d.ts.map +1 -0
  341. package/dist/lib/{otlp-export.js → exports/otlp-export.js} +51 -36
  342. package/dist/lib/exports/otlp-export.js.map +1 -0
  343. package/dist/lib/exports/otlp-format-converter.d.ts +70 -0
  344. package/dist/lib/exports/otlp-format-converter.d.ts.map +1 -0
  345. package/dist/lib/exports/otlp-format-converter.js +401 -0
  346. package/dist/lib/exports/otlp-format-converter.js.map +1 -0
  347. package/dist/lib/exports/otlp-proto-encode.d.ts +53 -0
  348. package/dist/lib/exports/otlp-proto-encode.d.ts.map +1 -0
  349. package/dist/lib/exports/otlp-proto-encode.js +165 -0
  350. package/dist/lib/exports/otlp-proto-encode.js.map +1 -0
  351. package/dist/lib/exports/otlp-proto-encode.test.d.ts +7 -0
  352. package/dist/lib/exports/otlp-proto-encode.test.d.ts.map +1 -0
  353. package/dist/lib/exports/otlp-proto-encode.test.js +997 -0
  354. package/dist/lib/exports/otlp-proto-encode.test.js.map +1 -0
  355. package/dist/lib/exports/phoenix-export.d.ts +119 -0
  356. package/dist/lib/exports/phoenix-export.d.ts.map +1 -0
  357. package/dist/lib/exports/phoenix-export.js +448 -0
  358. package/dist/lib/exports/phoenix-export.js.map +1 -0
  359. package/dist/lib/exports/phoenix-export.test.d.ts +11 -0
  360. package/dist/lib/exports/phoenix-export.test.d.ts.map +1 -0
  361. package/dist/lib/exports/phoenix-export.test.js +816 -0
  362. package/dist/lib/exports/phoenix-export.test.js.map +1 -0
  363. package/dist/lib/index.d.ts +16 -0
  364. package/dist/lib/index.d.ts.map +1 -0
  365. package/dist/lib/index.js +31 -0
  366. package/dist/lib/index.js.map +1 -0
  367. package/dist/lib/judge/evaluation-hooks-schemas.d.ts +186 -0
  368. package/dist/lib/judge/evaluation-hooks-schemas.d.ts.map +1 -0
  369. package/dist/lib/judge/evaluation-hooks-schemas.js +125 -0
  370. package/dist/lib/judge/evaluation-hooks-schemas.js.map +1 -0
  371. package/dist/lib/judge/evaluation-hooks.d.ts +88 -0
  372. package/dist/lib/judge/evaluation-hooks.d.ts.map +1 -0
  373. package/dist/lib/judge/evaluation-hooks.js +658 -0
  374. package/dist/lib/judge/evaluation-hooks.js.map +1 -0
  375. package/dist/lib/judge/evaluation-hooks.test.d.ts +8 -0
  376. package/dist/lib/judge/evaluation-hooks.test.d.ts.map +1 -0
  377. package/dist/lib/judge/evaluation-hooks.test.js +934 -0
  378. package/dist/lib/judge/evaluation-hooks.test.js.map +1 -0
  379. package/dist/lib/judge/llm-as-judge.d.ts +138 -0
  380. package/dist/lib/judge/llm-as-judge.d.ts.map +1 -0
  381. package/dist/lib/judge/llm-as-judge.js +103 -0
  382. package/dist/lib/judge/llm-as-judge.js.map +1 -0
  383. package/dist/lib/judge/llm-as-judge.test.d.ts +2 -0
  384. package/dist/lib/judge/llm-as-judge.test.d.ts.map +1 -0
  385. package/dist/lib/judge/llm-as-judge.test.js +2179 -0
  386. package/dist/lib/judge/llm-as-judge.test.js.map +1 -0
  387. package/dist/lib/judge/llm-judge-bias.d.ts +44 -0
  388. package/dist/lib/judge/llm-judge-bias.d.ts.map +1 -0
  389. package/dist/lib/judge/llm-judge-bias.js +130 -0
  390. package/dist/lib/judge/llm-judge-bias.js.map +1 -0
  391. package/dist/lib/judge/llm-judge-bias.test.d.ts +2 -0
  392. package/dist/lib/judge/llm-judge-bias.test.d.ts.map +1 -0
  393. package/dist/lib/judge/llm-judge-bias.test.js +380 -0
  394. package/dist/lib/judge/llm-judge-bias.test.js.map +1 -0
  395. package/dist/lib/judge/llm-judge-code.d.ts +99 -0
  396. package/dist/lib/judge/llm-judge-code.d.ts.map +1 -0
  397. package/dist/lib/judge/llm-judge-code.js +261 -0
  398. package/dist/lib/judge/llm-judge-code.js.map +1 -0
  399. package/dist/lib/judge/llm-judge-code.test.d.ts +2 -0
  400. package/dist/lib/judge/llm-judge-code.test.d.ts.map +1 -0
  401. package/dist/lib/judge/llm-judge-code.test.js +981 -0
  402. package/dist/lib/judge/llm-judge-code.test.js.map +1 -0
  403. package/dist/lib/judge/llm-judge-config.d.ts +241 -0
  404. package/dist/lib/judge/llm-judge-config.d.ts.map +1 -0
  405. package/dist/lib/judge/llm-judge-config.js +390 -0
  406. package/dist/lib/judge/llm-judge-config.js.map +1 -0
  407. package/dist/lib/judge/llm-judge-config.test.d.ts +5 -0
  408. package/dist/lib/judge/llm-judge-config.test.d.ts.map +1 -0
  409. package/dist/lib/judge/llm-judge-config.test.js +392 -0
  410. package/dist/lib/judge/llm-judge-config.test.js.map +1 -0
  411. package/dist/lib/judge/llm-judge-constants.d.ts +111 -0
  412. package/dist/lib/judge/llm-judge-constants.d.ts.map +1 -0
  413. package/dist/lib/judge/llm-judge-constants.js +150 -0
  414. package/dist/lib/judge/llm-judge-constants.js.map +1 -0
  415. package/dist/lib/judge/llm-judge-dag.d.ts +57 -0
  416. package/dist/lib/judge/llm-judge-dag.d.ts.map +1 -0
  417. package/dist/lib/judge/llm-judge-dag.js +217 -0
  418. package/dist/lib/judge/llm-judge-dag.js.map +1 -0
  419. package/dist/lib/judge/llm-judge-dag.test.d.ts +8 -0
  420. package/dist/lib/judge/llm-judge-dag.test.d.ts.map +1 -0
  421. package/dist/lib/judge/llm-judge-dag.test.js +973 -0
  422. package/dist/lib/judge/llm-judge-dag.test.js.map +1 -0
  423. package/dist/lib/judge/llm-judge-domain.d.ts +42 -0
  424. package/dist/lib/judge/llm-judge-domain.d.ts.map +1 -0
  425. package/dist/lib/judge/llm-judge-domain.js +167 -0
  426. package/dist/lib/judge/llm-judge-domain.js.map +1 -0
  427. package/dist/lib/judge/llm-judge-domain.test.d.ts +6 -0
  428. package/dist/lib/judge/llm-judge-domain.test.d.ts.map +1 -0
  429. package/dist/lib/judge/llm-judge-domain.test.js +337 -0
  430. package/dist/lib/judge/llm-judge-domain.test.js.map +1 -0
  431. package/dist/lib/judge/llm-judge-geval.d.ts +42 -0
  432. package/dist/lib/judge/llm-judge-geval.d.ts.map +1 -0
  433. package/dist/lib/judge/llm-judge-geval.js +213 -0
  434. package/dist/lib/judge/llm-judge-geval.js.map +1 -0
  435. package/dist/lib/judge/llm-judge-geval.test.d.ts +2 -0
  436. package/dist/lib/judge/llm-judge-geval.test.d.ts.map +1 -0
  437. package/dist/lib/judge/llm-judge-geval.test.js +556 -0
  438. package/dist/lib/judge/llm-judge-geval.test.js.map +1 -0
  439. package/dist/lib/judge/llm-judge-otel.test.d.ts +9 -0
  440. package/dist/lib/judge/llm-judge-otel.test.d.ts.map +1 -0
  441. package/dist/lib/judge/llm-judge-otel.test.js +91 -0
  442. package/dist/lib/judge/llm-judge-otel.test.js.map +1 -0
  443. package/dist/lib/judge/llm-judge-qag.d.ts +38 -0
  444. package/dist/lib/judge/llm-judge-qag.d.ts.map +1 -0
  445. package/dist/lib/judge/llm-judge-qag.js +205 -0
  446. package/dist/lib/judge/llm-judge-qag.js.map +1 -0
  447. package/dist/lib/judge/llm-judge-qag.test.d.ts +2 -0
  448. package/dist/lib/judge/llm-judge-qag.test.d.ts.map +1 -0
  449. package/dist/lib/judge/llm-judge-qag.test.js +386 -0
  450. package/dist/lib/judge/llm-judge-qag.test.js.map +1 -0
  451. package/dist/lib/judge/llm-judge-resilience.d.ts +74 -0
  452. package/dist/lib/judge/llm-judge-resilience.d.ts.map +1 -0
  453. package/dist/lib/judge/llm-judge-resilience.js +146 -0
  454. package/dist/lib/judge/llm-judge-resilience.js.map +1 -0
  455. package/dist/lib/judge/llm-judge-resilience.test.d.ts +2 -0
  456. package/dist/lib/judge/llm-judge-resilience.test.d.ts.map +1 -0
  457. package/dist/lib/judge/llm-judge-resilience.test.js +353 -0
  458. package/dist/lib/judge/llm-judge-resilience.test.js.map +1 -0
  459. package/dist/lib/judge/llm-judge-security.d.ts +106 -0
  460. package/dist/lib/judge/llm-judge-security.d.ts.map +1 -0
  461. package/dist/lib/judge/llm-judge-security.js +314 -0
  462. package/dist/lib/judge/llm-judge-security.js.map +1 -0
  463. package/dist/lib/judge/llm-judge-security.test.d.ts +2 -0
  464. package/dist/lib/judge/llm-judge-security.test.d.ts.map +1 -0
  465. package/dist/lib/judge/llm-judge-security.test.js +1011 -0
  466. package/dist/lib/judge/llm-judge-security.test.js.map +1 -0
  467. package/dist/lib/observability/context-accumulator.d.ts +32 -0
  468. package/dist/lib/observability/context-accumulator.d.ts.map +1 -0
  469. package/dist/lib/observability/context-accumulator.js +87 -0
  470. package/dist/lib/observability/context-accumulator.js.map +1 -0
  471. package/dist/lib/observability/evaluation-events.d.ts +35 -0
  472. package/dist/lib/observability/evaluation-events.d.ts.map +1 -0
  473. package/dist/lib/observability/evaluation-events.js +90 -0
  474. package/dist/lib/observability/evaluation-events.js.map +1 -0
  475. package/dist/lib/observability/file-span-exporter.d.ts +17 -0
  476. package/dist/lib/observability/file-span-exporter.d.ts.map +1 -0
  477. package/dist/lib/observability/file-span-exporter.js +49 -0
  478. package/dist/lib/observability/file-span-exporter.js.map +1 -0
  479. package/dist/lib/observability/histogram-bucket-constants.d.ts +25 -0
  480. package/dist/lib/observability/histogram-bucket-constants.d.ts.map +1 -0
  481. package/dist/lib/observability/histogram-bucket-constants.js +60 -0
  482. package/dist/lib/observability/histogram-bucket-constants.js.map +1 -0
  483. package/dist/lib/observability/histogram.d.ts +112 -0
  484. package/dist/lib/observability/histogram.d.ts.map +1 -0
  485. package/dist/lib/observability/histogram.js +170 -0
  486. package/dist/lib/observability/histogram.js.map +1 -0
  487. package/dist/lib/observability/histogram.test.d.ts +5 -0
  488. package/dist/lib/observability/histogram.test.d.ts.map +1 -0
  489. package/dist/lib/observability/histogram.test.js +385 -0
  490. package/dist/lib/observability/histogram.test.js.map +1 -0
  491. package/dist/lib/observability/indexer.d.ts +114 -0
  492. package/dist/lib/observability/indexer.d.ts.map +1 -0
  493. package/dist/lib/{indexer.js → observability/indexer.js} +65 -16
  494. package/dist/lib/observability/indexer.js.map +1 -0
  495. package/dist/lib/observability/indexer.test.d.ts.map +1 -0
  496. package/dist/lib/{indexer.test.js → observability/indexer.test.js} +94 -77
  497. package/dist/lib/observability/indexer.test.js.map +1 -0
  498. package/dist/lib/observability/instrumentation-eval.test.d.ts +5 -0
  499. package/dist/lib/observability/instrumentation-eval.test.d.ts.map +1 -0
  500. package/dist/lib/observability/instrumentation-eval.test.js +63 -0
  501. package/dist/lib/observability/instrumentation-eval.test.js.map +1 -0
  502. package/dist/lib/observability/instrumentation-init-errors.test.d.ts +13 -0
  503. package/dist/lib/observability/instrumentation-init-errors.test.d.ts.map +1 -0
  504. package/dist/lib/observability/instrumentation-init-errors.test.js +194 -0
  505. package/dist/lib/observability/instrumentation-init-errors.test.js.map +1 -0
  506. package/dist/lib/observability/instrumentation-retry-timeout.test.d.ts +15 -0
  507. package/dist/lib/observability/instrumentation-retry-timeout.test.d.ts.map +1 -0
  508. package/dist/lib/observability/instrumentation-retry-timeout.test.js +188 -0
  509. package/dist/lib/observability/instrumentation-retry-timeout.test.js.map +1 -0
  510. package/dist/lib/observability/instrumentation-set-otel.test.d.ts +5 -0
  511. package/dist/lib/observability/instrumentation-set-otel.test.d.ts.map +1 -0
  512. package/dist/lib/observability/instrumentation-set-otel.test.js +59 -0
  513. package/dist/lib/observability/instrumentation-set-otel.test.js.map +1 -0
  514. package/dist/lib/observability/instrumentation.d.ts +158 -0
  515. package/dist/lib/observability/instrumentation.d.ts.map +1 -0
  516. package/dist/lib/observability/instrumentation.integration.test.d.ts +2 -0
  517. package/dist/lib/observability/instrumentation.integration.test.d.ts.map +1 -0
  518. package/dist/lib/observability/instrumentation.integration.test.js +590 -0
  519. package/dist/lib/observability/instrumentation.integration.test.js.map +1 -0
  520. package/dist/lib/observability/instrumentation.js +512 -0
  521. package/dist/lib/observability/instrumentation.js.map +1 -0
  522. package/dist/lib/observability/instrumentation.test.d.ts +2 -0
  523. package/dist/lib/observability/instrumentation.test.d.ts.map +1 -0
  524. package/dist/lib/observability/instrumentation.test.js +822 -0
  525. package/dist/lib/observability/instrumentation.test.js.map +1 -0
  526. package/dist/lib/observability/mcp-semconv-constants.d.ts +98 -0
  527. package/dist/lib/observability/mcp-semconv-constants.d.ts.map +1 -0
  528. package/dist/lib/observability/mcp-semconv-constants.js +102 -0
  529. package/dist/lib/observability/mcp-semconv-constants.js.map +1 -0
  530. package/dist/lib/observability/mcp-semconv.d.ts +37 -0
  531. package/dist/lib/observability/mcp-semconv.d.ts.map +1 -0
  532. package/dist/lib/observability/mcp-semconv.js +87 -0
  533. package/dist/lib/observability/mcp-semconv.js.map +1 -0
  534. package/dist/lib/observability/mcp-semconv.test.d.ts +2 -0
  535. package/dist/lib/observability/mcp-semconv.test.d.ts.map +1 -0
  536. package/dist/lib/observability/mcp-semconv.test.js +168 -0
  537. package/dist/lib/observability/mcp-semconv.test.js.map +1 -0
  538. package/dist/lib/observability/metrics.d.ts +100 -0
  539. package/dist/lib/observability/metrics.d.ts.map +1 -0
  540. package/dist/lib/observability/metrics.js +429 -0
  541. package/dist/lib/observability/metrics.js.map +1 -0
  542. package/dist/lib/observability/metrics.test.d.ts +5 -0
  543. package/dist/lib/observability/metrics.test.d.ts.map +1 -0
  544. package/dist/lib/observability/metrics.test.js +191 -0
  545. package/dist/lib/observability/metrics.test.js.map +1 -0
  546. package/dist/lib/observability/observability-test-constants.d.ts +34 -0
  547. package/dist/lib/observability/observability-test-constants.d.ts.map +1 -0
  548. package/dist/lib/observability/observability-test-constants.js +55 -0
  549. package/dist/lib/observability/observability-test-constants.js.map +1 -0
  550. package/dist/lib/observability/opentelemetry-resources.test.d.ts +2 -0
  551. package/dist/lib/observability/opentelemetry-resources.test.d.ts.map +1 -0
  552. package/dist/lib/observability/opentelemetry-resources.test.js +19 -0
  553. package/dist/lib/observability/opentelemetry-resources.test.js.map +1 -0
  554. package/dist/lib/observability/parse-stats.d.ts +119 -0
  555. package/dist/lib/observability/parse-stats.d.ts.map +1 -0
  556. package/dist/lib/observability/parse-stats.js +207 -0
  557. package/dist/lib/observability/parse-stats.js.map +1 -0
  558. package/dist/lib/observability/parse-stats.test.d.ts +5 -0
  559. package/dist/lib/observability/parse-stats.test.d.ts.map +1 -0
  560. package/dist/lib/observability/parse-stats.test.js +287 -0
  561. package/dist/lib/observability/parse-stats.test.js.map +1 -0
  562. package/dist/lib/observability/render-trace-tree.d.ts +31 -0
  563. package/dist/lib/observability/render-trace-tree.d.ts.map +1 -0
  564. package/dist/lib/observability/render-trace-tree.js +95 -0
  565. package/dist/lib/observability/render-trace-tree.js.map +1 -0
  566. package/dist/lib/observability/render-trace-tree.test.d.ts +5 -0
  567. package/dist/lib/observability/render-trace-tree.test.d.ts.map +1 -0
  568. package/dist/lib/observability/render-trace-tree.test.js +97 -0
  569. package/dist/lib/observability/render-trace-tree.test.js.map +1 -0
  570. package/dist/lib/observability/span-attributes.d.ts +27 -0
  571. package/dist/lib/observability/span-attributes.d.ts.map +1 -0
  572. package/dist/lib/observability/span-attributes.js +85 -0
  573. package/dist/lib/observability/span-attributes.js.map +1 -0
  574. package/dist/lib/observability/trace-anomaly-detector.d.ts +23 -0
  575. package/dist/lib/observability/trace-anomaly-detector.d.ts.map +1 -0
  576. package/dist/lib/observability/trace-anomaly-detector.js +211 -0
  577. package/dist/lib/observability/trace-anomaly-detector.js.map +1 -0
  578. package/dist/lib/observability/trace-anomaly-detector.test.d.ts +5 -0
  579. package/dist/lib/observability/trace-anomaly-detector.test.d.ts.map +1 -0
  580. package/dist/lib/observability/trace-anomaly-detector.test.js +224 -0
  581. package/dist/lib/observability/trace-anomaly-detector.test.js.map +1 -0
  582. package/dist/lib/observability/trace-anomaly-schemas.d.ts +189 -0
  583. package/dist/lib/observability/trace-anomaly-schemas.d.ts.map +1 -0
  584. package/dist/lib/observability/trace-anomaly-schemas.js +167 -0
  585. package/dist/lib/observability/trace-anomaly-schemas.js.map +1 -0
  586. package/dist/lib/privacy/content-redaction.d.ts +141 -0
  587. package/dist/lib/privacy/content-redaction.d.ts.map +1 -0
  588. package/dist/lib/privacy/content-redaction.js +210 -0
  589. package/dist/lib/privacy/content-redaction.js.map +1 -0
  590. package/dist/lib/privacy/content-redaction.test.d.ts +2 -0
  591. package/dist/lib/privacy/content-redaction.test.d.ts.map +1 -0
  592. package/dist/lib/privacy/content-redaction.test.js +302 -0
  593. package/dist/lib/privacy/content-redaction.test.js.map +1 -0
  594. package/dist/lib/quality/bucket-utils.d.ts +17 -0
  595. package/dist/lib/quality/bucket-utils.d.ts.map +1 -0
  596. package/dist/lib/quality/bucket-utils.js +31 -0
  597. package/dist/lib/quality/bucket-utils.js.map +1 -0
  598. package/dist/lib/quality/bucket-utils.test.d.ts +2 -0
  599. package/dist/lib/quality/bucket-utils.test.d.ts.map +1 -0
  600. package/dist/lib/quality/bucket-utils.test.js +42 -0
  601. package/dist/lib/quality/bucket-utils.test.js.map +1 -0
  602. package/dist/lib/quality/qfe-backtest-detail.test.d.ts +5 -0
  603. package/dist/lib/quality/qfe-backtest-detail.test.d.ts.map +1 -0
  604. package/dist/lib/quality/qfe-backtest-detail.test.js +179 -0
  605. package/dist/lib/quality/qfe-backtest-detail.test.js.map +1 -0
  606. package/dist/lib/quality/qfe-calibration-paths.test.d.ts +5 -0
  607. package/dist/lib/quality/qfe-calibration-paths.test.d.ts.map +1 -0
  608. package/dist/lib/quality/qfe-calibration-paths.test.js +203 -0
  609. package/dist/lib/quality/qfe-calibration-paths.test.js.map +1 -0
  610. package/dist/lib/quality/qfe-correlation-helpers.test.d.ts +6 -0
  611. package/dist/lib/quality/qfe-correlation-helpers.test.d.ts.map +1 -0
  612. package/dist/lib/quality/qfe-correlation-helpers.test.js +143 -0
  613. package/dist/lib/quality/qfe-correlation-helpers.test.js.map +1 -0
  614. package/dist/lib/quality/qfe-cqi-paths.test.d.ts +6 -0
  615. package/dist/lib/quality/qfe-cqi-paths.test.d.ts.map +1 -0
  616. package/dist/lib/quality/qfe-cqi-paths.test.js +231 -0
  617. package/dist/lib/quality/qfe-cqi-paths.test.js.map +1 -0
  618. package/dist/lib/quality/qfe-critic-internals.test.d.ts +6 -0
  619. package/dist/lib/quality/qfe-critic-internals.test.d.ts.map +1 -0
  620. package/dist/lib/quality/qfe-critic-internals.test.js +191 -0
  621. package/dist/lib/quality/qfe-critic-internals.test.js.map +1 -0
  622. package/dist/lib/quality/qfe-derived-paths.test.d.ts +2 -0
  623. package/dist/lib/quality/qfe-derived-paths.test.d.ts.map +1 -0
  624. package/dist/lib/quality/qfe-derived-paths.test.js +372 -0
  625. package/dist/lib/quality/qfe-derived-paths.test.js.map +1 -0
  626. package/dist/lib/quality/qfe-dynamics-paths.test.d.ts +8 -0
  627. package/dist/lib/quality/qfe-dynamics-paths.test.d.ts.map +1 -0
  628. package/dist/lib/quality/qfe-dynamics-paths.test.js +223 -0
  629. package/dist/lib/quality/qfe-dynamics-paths.test.js.map +1 -0
  630. package/dist/lib/quality/qfe-granger-internals.test.d.ts +6 -0
  631. package/dist/lib/quality/qfe-granger-internals.test.d.ts.map +1 -0
  632. package/dist/lib/quality/qfe-granger-internals.test.js +158 -0
  633. package/dist/lib/quality/qfe-granger-internals.test.js.map +1 -0
  634. package/dist/lib/quality/qfe-label-normalize.test.d.ts +7 -0
  635. package/dist/lib/quality/qfe-label-normalize.test.d.ts.map +1 -0
  636. package/dist/lib/quality/qfe-label-normalize.test.js +332 -0
  637. package/dist/lib/quality/qfe-label-normalize.test.js.map +1 -0
  638. package/dist/lib/quality/qfe-ordinal-edge.test.d.ts +6 -0
  639. package/dist/lib/quality/qfe-ordinal-edge.test.d.ts.map +1 -0
  640. package/dist/lib/quality/qfe-ordinal-edge.test.js +98 -0
  641. package/dist/lib/quality/qfe-ordinal-edge.test.js.map +1 -0
  642. package/dist/lib/quality/qfe-roles-detail.test.d.ts +5 -0
  643. package/dist/lib/quality/qfe-roles-detail.test.d.ts.map +1 -0
  644. package/dist/lib/quality/qfe-roles-detail.test.js +115 -0
  645. package/dist/lib/quality/qfe-roles-detail.test.js.map +1 -0
  646. package/dist/lib/quality/qfe-rolling-detail.test.d.ts +7 -0
  647. package/dist/lib/quality/qfe-rolling-detail.test.d.ts.map +1 -0
  648. package/dist/lib/quality/qfe-rolling-detail.test.js +249 -0
  649. package/dist/lib/quality/qfe-rolling-detail.test.js.map +1 -0
  650. package/dist/lib/quality/qfe-stats-internals.test.d.ts +7 -0
  651. package/dist/lib/quality/qfe-stats-internals.test.d.ts.map +1 -0
  652. package/dist/lib/quality/qfe-stats-internals.test.js +143 -0
  653. package/dist/lib/quality/qfe-stats-internals.test.js.map +1 -0
  654. package/dist/lib/quality/qfe-streaming.test.d.ts +5 -0
  655. package/dist/lib/quality/qfe-streaming.test.d.ts.map +1 -0
  656. package/dist/lib/quality/qfe-streaming.test.js +239 -0
  657. package/dist/lib/quality/qfe-streaming.test.js.map +1 -0
  658. package/dist/lib/quality/qfe-sweep-detail.test.d.ts +6 -0
  659. package/dist/lib/quality/qfe-sweep-detail.test.d.ts.map +1 -0
  660. package/dist/lib/quality/qfe-sweep-detail.test.js +291 -0
  661. package/dist/lib/quality/qfe-sweep-detail.test.js.map +1 -0
  662. package/dist/lib/quality/quality-alerts.d.ts +23 -0
  663. package/dist/lib/quality/quality-alerts.d.ts.map +1 -0
  664. package/dist/lib/quality/quality-alerts.js +89 -0
  665. package/dist/lib/quality/quality-alerts.js.map +1 -0
  666. package/dist/lib/quality/quality-alerts.test.d.ts +2 -0
  667. package/dist/lib/quality/quality-alerts.test.d.ts.map +1 -0
  668. package/dist/lib/quality/quality-alerts.test.js +86 -0
  669. package/dist/lib/quality/quality-alerts.test.js.map +1 -0
  670. package/dist/lib/quality/quality-constants.d.ts +294 -0
  671. package/dist/lib/quality/quality-constants.d.ts.map +1 -0
  672. package/dist/lib/quality/quality-constants.js +335 -0
  673. package/dist/lib/quality/quality-constants.js.map +1 -0
  674. package/dist/lib/quality/quality-feature-engineering.d.ts +1071 -0
  675. package/dist/lib/quality/quality-feature-engineering.d.ts.map +1 -0
  676. package/dist/lib/quality/quality-feature-engineering.js +2076 -0
  677. package/dist/lib/quality/quality-feature-engineering.js.map +1 -0
  678. package/dist/lib/quality/quality-feature-engineering.test.d.ts +5 -0
  679. package/dist/lib/quality/quality-feature-engineering.test.d.ts.map +1 -0
  680. package/dist/lib/quality/quality-feature-engineering.test.js +2908 -0
  681. package/dist/lib/quality/quality-feature-engineering.test.js.map +1 -0
  682. package/dist/lib/quality/quality-metrics.d.ts +943 -0
  683. package/dist/lib/quality/quality-metrics.d.ts.map +1 -0
  684. package/dist/lib/quality/quality-metrics.js +1151 -0
  685. package/dist/lib/quality/quality-metrics.js.map +1 -0
  686. package/dist/lib/quality/quality-metrics.test.d.ts +5 -0
  687. package/dist/lib/quality/quality-metrics.test.d.ts.map +1 -0
  688. package/dist/lib/quality/quality-metrics.test.js +2766 -0
  689. package/dist/lib/quality/quality-metrics.test.js.map +1 -0
  690. package/dist/lib/quality/quality-multi-agent.d.ts +106 -0
  691. package/dist/lib/quality/quality-multi-agent.d.ts.map +1 -0
  692. package/dist/lib/quality/quality-multi-agent.js +124 -0
  693. package/dist/lib/quality/quality-multi-agent.js.map +1 -0
  694. package/dist/lib/quality/quality-multi-agent.test.d.ts +6 -0
  695. package/dist/lib/quality/quality-multi-agent.test.d.ts.map +1 -0
  696. package/dist/lib/quality/quality-multi-agent.test.js +163 -0
  697. package/dist/lib/quality/quality-multi-agent.test.js.map +1 -0
  698. package/dist/lib/quality/quality-sla.d.ts +35 -0
  699. package/dist/lib/quality/quality-sla.d.ts.map +1 -0
  700. package/dist/lib/quality/quality-sla.js +62 -0
  701. package/dist/lib/quality/quality-sla.js.map +1 -0
  702. package/dist/lib/quality/quality-sla.test.d.ts +5 -0
  703. package/dist/lib/quality/quality-sla.test.d.ts.map +1 -0
  704. package/dist/lib/quality/quality-sla.test.js +144 -0
  705. package/dist/lib/quality/quality-sla.test.js.map +1 -0
  706. package/dist/lib/quality/quality-test-constants.d.ts +23 -0
  707. package/dist/lib/quality/quality-test-constants.d.ts.map +1 -0
  708. package/dist/lib/quality/quality-test-constants.js +25 -0
  709. package/dist/lib/quality/quality-test-constants.js.map +1 -0
  710. package/dist/lib/quality/quality-trends.d.ts +101 -0
  711. package/dist/lib/quality/quality-trends.d.ts.map +1 -0
  712. package/dist/lib/quality/quality-trends.js +299 -0
  713. package/dist/lib/quality/quality-trends.js.map +1 -0
  714. package/dist/lib/quality/quality-trends.test.d.ts +6 -0
  715. package/dist/lib/quality/quality-trends.test.d.ts.map +1 -0
  716. package/dist/lib/quality/quality-trends.test.js +377 -0
  717. package/dist/lib/quality/quality-trends.test.js.map +1 -0
  718. package/dist/lib/quality/quality-views.d.ts +966 -0
  719. package/dist/lib/quality/quality-views.d.ts.map +1 -0
  720. package/dist/lib/quality/quality-views.js +367 -0
  721. package/dist/lib/quality/quality-views.js.map +1 -0
  722. package/dist/lib/quality/quality-views.test.d.ts +6 -0
  723. package/dist/lib/quality/quality-views.test.d.ts.map +1 -0
  724. package/dist/lib/quality/quality-views.test.js +262 -0
  725. package/dist/lib/quality/quality-views.test.js.map +1 -0
  726. package/dist/lib/quality/quality-visualization.d.ts +112 -0
  727. package/dist/lib/quality/quality-visualization.d.ts.map +1 -0
  728. package/dist/lib/quality/quality-visualization.js +136 -0
  729. package/dist/lib/quality/quality-visualization.js.map +1 -0
  730. package/dist/lib/quality/quality-visualization.test.d.ts +5 -0
  731. package/dist/lib/quality/quality-visualization.test.d.ts.map +1 -0
  732. package/dist/lib/quality/quality-visualization.test.js +189 -0
  733. package/dist/lib/quality/quality-visualization.test.js.map +1 -0
  734. package/dist/lib/resilience/cache.d.ts +56 -0
  735. package/dist/lib/resilience/cache.d.ts.map +1 -0
  736. package/dist/lib/resilience/cache.js +96 -0
  737. package/dist/lib/resilience/cache.js.map +1 -0
  738. package/dist/lib/resilience/cache.test.d.ts.map +1 -0
  739. package/dist/lib/{cache.test.js → resilience/cache.test.js} +21 -20
  740. package/dist/lib/resilience/cache.test.js.map +1 -0
  741. package/dist/lib/resilience/circuit-breaker.d.ts +147 -0
  742. package/dist/lib/resilience/circuit-breaker.d.ts.map +1 -0
  743. package/dist/lib/resilience/circuit-breaker.js +251 -0
  744. package/dist/lib/resilience/circuit-breaker.js.map +1 -0
  745. package/dist/lib/resilience/circuit-breaker.test.d.ts.map +1 -0
  746. package/dist/lib/{circuit-breaker.test.js → resilience/circuit-breaker.test.js} +29 -26
  747. package/dist/lib/resilience/circuit-breaker.test.js.map +1 -0
  748. package/dist/lib/{toon-encoder.d.ts → resilience/toon-encoder.d.ts} +6 -1
  749. package/dist/lib/resilience/toon-encoder.d.ts.map +1 -0
  750. package/dist/lib/{toon-encoder.js → resilience/toon-encoder.js} +7 -2
  751. package/dist/lib/resilience/toon-encoder.js.map +1 -0
  752. package/dist/lib/resilience/toon-encoder.test.d.ts.map +1 -0
  753. package/dist/lib/{toon-encoder.test.js → resilience/toon-encoder.test.js} +7 -6
  754. package/dist/lib/resilience/toon-encoder.test.js.map +1 -0
  755. package/dist/lib/testing/mock-llm-builder.d.ts +139 -0
  756. package/dist/lib/testing/mock-llm-builder.d.ts.map +1 -0
  757. package/dist/lib/testing/mock-llm-builder.js +254 -0
  758. package/dist/lib/testing/mock-llm-builder.js.map +1 -0
  759. package/dist/lib/testing/mock-llm-builder.test.d.ts +5 -0
  760. package/dist/lib/testing/mock-llm-builder.test.d.ts.map +1 -0
  761. package/dist/lib/testing/mock-llm-builder.test.js +304 -0
  762. package/dist/lib/testing/mock-llm-builder.test.js.map +1 -0
  763. package/dist/lib/validation/api-schemas.d.ts +705 -0
  764. package/dist/lib/validation/api-schemas.d.ts.map +1 -0
  765. package/dist/lib/validation/api-schemas.js +351 -0
  766. package/dist/lib/validation/api-schemas.js.map +1 -0
  767. package/dist/lib/validation/api-schemas.test.d.ts +5 -0
  768. package/dist/lib/validation/api-schemas.test.d.ts.map +1 -0
  769. package/dist/lib/validation/api-schemas.test.js +427 -0
  770. package/dist/lib/validation/api-schemas.test.js.map +1 -0
  771. package/dist/lib/validation/dashboard-schemas.d.ts +203 -0
  772. package/dist/lib/validation/dashboard-schemas.d.ts.map +1 -0
  773. package/dist/lib/validation/dashboard-schemas.js +186 -0
  774. package/dist/lib/validation/dashboard-schemas.js.map +1 -0
  775. package/dist/lib/validation/dashboard-schemas.test.d.ts +5 -0
  776. package/dist/lib/validation/dashboard-schemas.test.d.ts.map +1 -0
  777. package/dist/lib/validation/dashboard-schemas.test.js +353 -0
  778. package/dist/lib/validation/dashboard-schemas.test.js.map +1 -0
  779. package/dist/server.d.ts +7 -1
  780. package/dist/server.d.ts.map +1 -1
  781. package/dist/server.js +172 -102
  782. package/dist/server.js.map +1 -1
  783. package/dist/server.test.js +102 -95
  784. package/dist/server.test.js.map +1 -1
  785. package/dist/test-helpers/assertions.d.ts +6 -0
  786. package/dist/test-helpers/assertions.d.ts.map +1 -0
  787. package/dist/test-helpers/assertions.js +11 -0
  788. package/dist/test-helpers/assertions.js.map +1 -0
  789. package/dist/test-helpers/env-utils.d.ts +0 -64
  790. package/dist/test-helpers/env-utils.d.ts.map +1 -1
  791. package/dist/test-helpers/env-utils.js +0 -100
  792. package/dist/test-helpers/env-utils.js.map +1 -1
  793. package/dist/test-helpers/fuzz-generators.d.ts.map +1 -1
  794. package/dist/test-helpers/fuzz-generators.js +62 -22
  795. package/dist/test-helpers/fuzz-generators.js.map +1 -1
  796. package/dist/test-helpers/index.d.ts +3 -2
  797. package/dist/test-helpers/index.d.ts.map +1 -1
  798. package/dist/test-helpers/index.js +4 -2
  799. package/dist/test-helpers/index.js.map +1 -1
  800. package/dist/test-helpers/memfs-utils.test.js +81 -76
  801. package/dist/test-helpers/memfs-utils.test.js.map +1 -1
  802. package/dist/test-helpers/mock-backends.d.ts +19 -17
  803. package/dist/test-helpers/mock-backends.d.ts.map +1 -1
  804. package/dist/test-helpers/mock-backends.js +16 -4
  805. package/dist/test-helpers/mock-backends.js.map +1 -1
  806. package/dist/test-helpers/mock-backends.test.js +43 -112
  807. package/dist/test-helpers/mock-backends.test.js.map +1 -1
  808. package/dist/test-helpers/race-condition-helpers.d.ts.map +1 -1
  809. package/dist/test-helpers/race-condition-helpers.js +3 -2
  810. package/dist/test-helpers/race-condition-helpers.js.map +1 -1
  811. package/dist/test-helpers/schema-validators.d.ts +2 -2
  812. package/dist/test-helpers/schema-validators.d.ts.map +1 -1
  813. package/dist/test-helpers/schema-validators.js +35 -31
  814. package/dist/test-helpers/schema-validators.js.map +1 -1
  815. package/dist/test-helpers/test-constants.d.ts +74 -0
  816. package/dist/test-helpers/test-constants.d.ts.map +1 -0
  817. package/dist/test-helpers/test-constants.js +78 -0
  818. package/dist/test-helpers/test-constants.js.map +1 -0
  819. package/dist/test-helpers/test-data-builders.d.ts +25 -7
  820. package/dist/test-helpers/test-data-builders.d.ts.map +1 -1
  821. package/dist/test-helpers/test-data-builders.js +32 -9
  822. package/dist/test-helpers/test-data-builders.js.map +1 -1
  823. package/dist/test-helpers/test-data-builders.test.js +116 -107
  824. package/dist/test-helpers/test-data-builders.test.js.map +1 -1
  825. package/dist/test-helpers/tool-validators.d.ts +1 -1
  826. package/dist/test-helpers/tool-validators.d.ts.map +1 -1
  827. package/dist/test-helpers/tool-validators.js +10 -10
  828. package/dist/test-helpers/tool-validators.js.map +1 -1
  829. package/dist/tools/audit-trail.d.ts +170 -0
  830. package/dist/tools/audit-trail.d.ts.map +1 -0
  831. package/dist/tools/audit-trail.js +109 -0
  832. package/dist/tools/audit-trail.js.map +1 -0
  833. package/dist/tools/audit-trail.test.d.ts +5 -0
  834. package/dist/tools/audit-trail.test.d.ts.map +1 -0
  835. package/dist/tools/audit-trail.test.js +122 -0
  836. package/dist/tools/audit-trail.test.js.map +1 -0
  837. package/dist/tools/context-stats.d.ts +6 -20
  838. package/dist/tools/context-stats.d.ts.map +1 -1
  839. package/dist/tools/context-stats.js +106 -90
  840. package/dist/tools/context-stats.js.map +1 -1
  841. package/dist/tools/context-stats.test.js +109 -60
  842. package/dist/tools/context-stats.test.js.map +1 -1
  843. package/dist/tools/detect-trace-anomalies.d.ts +123 -0
  844. package/dist/tools/detect-trace-anomalies.d.ts.map +1 -0
  845. package/dist/tools/detect-trace-anomalies.js +66 -0
  846. package/dist/tools/detect-trace-anomalies.js.map +1 -0
  847. package/dist/tools/estimate-cost.d.ts +77 -0
  848. package/dist/tools/estimate-cost.d.ts.map +1 -0
  849. package/dist/tools/estimate-cost.js +104 -0
  850. package/dist/tools/estimate-cost.js.map +1 -0
  851. package/dist/tools/estimate-cost.test.d.ts +5 -0
  852. package/dist/tools/estimate-cost.test.d.ts.map +1 -0
  853. package/dist/tools/estimate-cost.test.js +343 -0
  854. package/dist/tools/estimate-cost.test.js.map +1 -0
  855. package/dist/tools/export-base.d.ts +77 -0
  856. package/dist/tools/export-base.d.ts.map +1 -0
  857. package/dist/tools/export-base.js +150 -0
  858. package/dist/tools/export-base.js.map +1 -0
  859. package/dist/tools/export-base.test.d.ts +18 -0
  860. package/dist/tools/export-base.test.d.ts.map +1 -0
  861. package/dist/tools/export-base.test.js +220 -0
  862. package/dist/tools/export-base.test.js.map +1 -0
  863. package/dist/tools/export-confident.d.ts +149 -0
  864. package/dist/tools/export-confident.d.ts.map +1 -0
  865. package/dist/tools/export-confident.js +36 -0
  866. package/dist/tools/export-confident.js.map +1 -0
  867. package/dist/tools/export-confident.test.d.ts +7 -0
  868. package/dist/tools/export-confident.test.d.ts.map +1 -0
  869. package/dist/tools/export-confident.test.js +336 -0
  870. package/dist/tools/export-confident.test.js.map +1 -0
  871. package/dist/tools/export-datadog.d.ts +121 -0
  872. package/dist/tools/export-datadog.d.ts.map +1 -0
  873. package/dist/tools/export-datadog.js +158 -0
  874. package/dist/tools/export-datadog.js.map +1 -0
  875. package/dist/tools/export-datadog.test.d.ts +8 -0
  876. package/dist/tools/export-datadog.test.d.ts.map +1 -0
  877. package/dist/tools/export-datadog.test.js +376 -0
  878. package/dist/tools/export-datadog.test.js.map +1 -0
  879. package/dist/tools/export-jaeger.d.ts +100 -0
  880. package/dist/tools/export-jaeger.d.ts.map +1 -0
  881. package/dist/tools/export-jaeger.js +154 -0
  882. package/dist/tools/export-jaeger.js.map +1 -0
  883. package/dist/tools/export-jaeger.test.d.ts +2 -0
  884. package/dist/tools/export-jaeger.test.d.ts.map +1 -0
  885. package/dist/tools/export-jaeger.test.js +113 -0
  886. package/dist/tools/export-jaeger.test.js.map +1 -0
  887. package/dist/tools/export-langfuse.d.ts +135 -0
  888. package/dist/tools/export-langfuse.d.ts.map +1 -0
  889. package/dist/tools/export-langfuse.js +33 -0
  890. package/dist/tools/export-langfuse.js.map +1 -0
  891. package/dist/tools/export-langfuse.test.d.ts +7 -0
  892. package/dist/tools/export-langfuse.test.d.ts.map +1 -0
  893. package/dist/tools/export-langfuse.test.js +292 -0
  894. package/dist/tools/export-langfuse.test.js.map +1 -0
  895. package/dist/tools/export-phoenix.d.ts +170 -0
  896. package/dist/tools/export-phoenix.d.ts.map +1 -0
  897. package/dist/tools/export-phoenix.js +47 -0
  898. package/dist/tools/export-phoenix.js.map +1 -0
  899. package/dist/tools/export-phoenix.test.d.ts +7 -0
  900. package/dist/tools/export-phoenix.test.d.ts.map +1 -0
  901. package/dist/tools/export-phoenix.test.js +317 -0
  902. package/dist/tools/export-phoenix.test.js.map +1 -0
  903. package/dist/tools/get-trace-url.d.ts +2 -10
  904. package/dist/tools/get-trace-url.d.ts.map +1 -1
  905. package/dist/tools/get-trace-url.js +5 -8
  906. package/dist/tools/get-trace-url.js.map +1 -1
  907. package/dist/tools/get-trace-url.test.js +81 -399
  908. package/dist/tools/get-trace-url.test.js.map +1 -1
  909. package/dist/tools/hallucination-detection.d.ts +203 -0
  910. package/dist/tools/hallucination-detection.d.ts.map +1 -0
  911. package/dist/tools/hallucination-detection.js +189 -0
  912. package/dist/tools/hallucination-detection.js.map +1 -0
  913. package/dist/tools/hallucination-detection.test.d.ts +5 -0
  914. package/dist/tools/hallucination-detection.test.d.ts.map +1 -0
  915. package/dist/tools/hallucination-detection.test.js +529 -0
  916. package/dist/tools/hallucination-detection.test.js.map +1 -0
  917. package/dist/tools/health-check.d.ts +35 -16
  918. package/dist/tools/health-check.d.ts.map +1 -1
  919. package/dist/tools/health-check.js +101 -85
  920. package/dist/tools/health-check.js.map +1 -1
  921. package/dist/tools/health-check.test.js +72 -165
  922. package/dist/tools/health-check.test.js.map +1 -1
  923. package/dist/tools/index.d.ts +19 -0
  924. package/dist/tools/index.d.ts.map +1 -1
  925. package/dist/tools/index.js +19 -0
  926. package/dist/tools/index.js.map +1 -1
  927. package/dist/tools/ingest-constants.d.ts +8 -0
  928. package/dist/tools/ingest-constants.d.ts.map +1 -0
  929. package/dist/tools/ingest-constants.js +8 -0
  930. package/dist/tools/ingest-constants.js.map +1 -0
  931. package/dist/tools/ingest-spans.d.ts +45 -0
  932. package/dist/tools/ingest-spans.d.ts.map +1 -0
  933. package/dist/tools/ingest-spans.js +129 -0
  934. package/dist/tools/ingest-spans.js.map +1 -0
  935. package/dist/tools/ingest-spans.test.d.ts +5 -0
  936. package/dist/tools/ingest-spans.test.d.ts.map +1 -0
  937. package/dist/tools/ingest-spans.test.js +250 -0
  938. package/dist/tools/ingest-spans.test.js.map +1 -0
  939. package/dist/tools/ingest-traces.d.ts +76 -0
  940. package/dist/tools/ingest-traces.d.ts.map +1 -0
  941. package/dist/tools/ingest-traces.js +164 -0
  942. package/dist/tools/ingest-traces.js.map +1 -0
  943. package/dist/tools/ingest-traces.test.d.ts +5 -0
  944. package/dist/tools/ingest-traces.test.d.ts.map +1 -0
  945. package/dist/tools/ingest-traces.test.js +483 -0
  946. package/dist/tools/ingest-traces.test.js.map +1 -0
  947. package/dist/tools/inject-evaluations.d.ts +254 -0
  948. package/dist/tools/inject-evaluations.d.ts.map +1 -0
  949. package/dist/tools/inject-evaluations.js +133 -0
  950. package/dist/tools/inject-evaluations.js.map +1 -0
  951. package/dist/tools/inject-evaluations.test.d.ts +5 -0
  952. package/dist/tools/inject-evaluations.test.d.ts.map +1 -0
  953. package/dist/tools/inject-evaluations.test.js +371 -0
  954. package/dist/tools/inject-evaluations.test.js.map +1 -0
  955. package/dist/tools/manage-datasets.d.ts +850 -0
  956. package/dist/tools/manage-datasets.d.ts.map +1 -0
  957. package/dist/tools/manage-datasets.js +139 -0
  958. package/dist/tools/manage-datasets.js.map +1 -0
  959. package/dist/tools/manage-datasets.test.d.ts +5 -0
  960. package/dist/tools/manage-datasets.test.d.ts.map +1 -0
  961. package/dist/tools/manage-datasets.test.js +430 -0
  962. package/dist/tools/manage-datasets.test.js.map +1 -0
  963. package/dist/tools/multi-agent-coordination.d.ts +178 -0
  964. package/dist/tools/multi-agent-coordination.d.ts.map +1 -0
  965. package/dist/tools/multi-agent-coordination.js +270 -0
  966. package/dist/tools/multi-agent-coordination.js.map +1 -0
  967. package/dist/tools/multi-agent-coordination.test.d.ts +5 -0
  968. package/dist/tools/multi-agent-coordination.test.d.ts.map +1 -0
  969. package/dist/tools/multi-agent-coordination.test.js +530 -0
  970. package/dist/tools/multi-agent-coordination.test.js.map +1 -0
  971. package/dist/tools/query-evaluations.d.ts +154 -91
  972. package/dist/tools/query-evaluations.d.ts.map +1 -1
  973. package/dist/tools/query-evaluations.js +206 -169
  974. package/dist/tools/query-evaluations.js.map +1 -1
  975. package/dist/tools/query-evaluations.test.js +386 -391
  976. package/dist/tools/query-evaluations.test.js.map +1 -1
  977. package/dist/tools/query-llm-events.d.ts +100 -75
  978. package/dist/tools/query-llm-events.d.ts.map +1 -1
  979. package/dist/tools/query-llm-events.js +106 -80
  980. package/dist/tools/query-llm-events.js.map +1 -1
  981. package/dist/tools/query-llm-events.test.js +183 -346
  982. package/dist/tools/query-llm-events.test.js.map +1 -1
  983. package/dist/tools/query-logs.d.ts +45 -58
  984. package/dist/tools/query-logs.d.ts.map +1 -1
  985. package/dist/tools/query-logs.js +54 -101
  986. package/dist/tools/query-logs.js.map +1 -1
  987. package/dist/tools/query-logs.test.js +118 -314
  988. package/dist/tools/query-logs.test.js.map +1 -1
  989. package/dist/tools/query-metric-histograms.d.ts +112 -0
  990. package/dist/tools/query-metric-histograms.d.ts.map +1 -0
  991. package/dist/tools/query-metric-histograms.js +69 -0
  992. package/dist/tools/query-metric-histograms.js.map +1 -0
  993. package/dist/tools/query-metric-histograms.test.d.ts +5 -0
  994. package/dist/tools/query-metric-histograms.test.d.ts.map +1 -0
  995. package/dist/tools/query-metric-histograms.test.js +209 -0
  996. package/dist/tools/query-metric-histograms.test.js.map +1 -0
  997. package/dist/tools/query-metrics.d.ts +159 -60
  998. package/dist/tools/query-metrics.d.ts.map +1 -1
  999. package/dist/tools/query-metrics.js +133 -111
  1000. package/dist/tools/query-metrics.js.map +1 -1
  1001. package/dist/tools/query-metrics.test.js +314 -389
  1002. package/dist/tools/query-metrics.test.js.map +1 -1
  1003. package/dist/tools/query-regressions.d.ts +76 -0
  1004. package/dist/tools/query-regressions.d.ts.map +1 -0
  1005. package/dist/tools/query-regressions.js +122 -0
  1006. package/dist/tools/query-regressions.js.map +1 -0
  1007. package/dist/tools/query-regressions.test.d.ts +8 -0
  1008. package/dist/tools/query-regressions.test.d.ts.map +1 -0
  1009. package/dist/tools/query-regressions.test.js +129 -0
  1010. package/dist/tools/query-regressions.test.js.map +1 -0
  1011. package/dist/tools/query-traces.d.ts +103 -71
  1012. package/dist/tools/query-traces.d.ts.map +1 -1
  1013. package/dist/tools/query-traces.js +75 -106
  1014. package/dist/tools/query-traces.js.map +1 -1
  1015. package/dist/tools/query-traces.test.js +140 -846
  1016. package/dist/tools/query-traces.test.js.map +1 -1
  1017. package/dist/tools/query-verifications.d.ts +123 -0
  1018. package/dist/tools/query-verifications.d.ts.map +1 -0
  1019. package/dist/tools/query-verifications.js +102 -0
  1020. package/dist/tools/query-verifications.js.map +1 -0
  1021. package/dist/tools/query-verifications.test.d.ts +5 -0
  1022. package/dist/tools/query-verifications.test.d.ts.map +1 -0
  1023. package/dist/tools/query-verifications.test.js +163 -0
  1024. package/dist/tools/query-verifications.test.js.map +1 -0
  1025. package/dist/tools/routing-telemetry.d.ts +168 -0
  1026. package/dist/tools/routing-telemetry.d.ts.map +1 -0
  1027. package/dist/tools/routing-telemetry.js +267 -0
  1028. package/dist/tools/routing-telemetry.js.map +1 -0
  1029. package/dist/tools/routing-telemetry.test.d.ts +5 -0
  1030. package/dist/tools/routing-telemetry.test.d.ts.map +1 -0
  1031. package/dist/tools/routing-telemetry.test.js +747 -0
  1032. package/dist/tools/routing-telemetry.test.js.map +1 -0
  1033. package/dist/tools/setup-claudeignore.d.ts +4 -32
  1034. package/dist/tools/setup-claudeignore.d.ts.map +1 -1
  1035. package/dist/tools/setup-claudeignore.js +18 -22
  1036. package/dist/tools/setup-claudeignore.js.map +1 -1
  1037. package/dist/tools/setup-claudeignore.test.js +50 -49
  1038. package/dist/tools/setup-claudeignore.test.js.map +1 -1
  1039. package/dist/tools/token-budget.d.ts +170 -0
  1040. package/dist/tools/token-budget.d.ts.map +1 -0
  1041. package/dist/tools/token-budget.js +219 -0
  1042. package/dist/tools/token-budget.js.map +1 -0
  1043. package/dist/tools/token-budget.test.d.ts +5 -0
  1044. package/dist/tools/token-budget.test.d.ts.map +1 -0
  1045. package/dist/tools/token-budget.test.js +293 -0
  1046. package/dist/tools/token-budget.test.js.map +1 -0
  1047. package/package.json +76 -6
  1048. package/dist/backends/local-jsonl.test.d.ts +0 -2
  1049. package/dist/backends/local-jsonl.test.d.ts.map +0 -1
  1050. package/dist/backends/local-jsonl.test.js +0 -4651
  1051. package/dist/backends/local-jsonl.test.js.map +0 -1
  1052. package/dist/backends/signoz-api-circuit-breaker.test.d.ts +0 -6
  1053. package/dist/backends/signoz-api-circuit-breaker.test.d.ts.map +0 -1
  1054. package/dist/backends/signoz-api-circuit-breaker.test.js +0 -548
  1055. package/dist/backends/signoz-api-circuit-breaker.test.js.map +0 -1
  1056. package/dist/backends/signoz-api-rate-limiter.test.d.ts +0 -6
  1057. package/dist/backends/signoz-api-rate-limiter.test.d.ts.map +0 -1
  1058. package/dist/backends/signoz-api-rate-limiter.test.js +0 -389
  1059. package/dist/backends/signoz-api-rate-limiter.test.js.map +0 -1
  1060. package/dist/backends/signoz-api-ssrf.test.d.ts +0 -6
  1061. package/dist/backends/signoz-api-ssrf.test.d.ts.map +0 -1
  1062. package/dist/backends/signoz-api-ssrf.test.js +0 -216
  1063. package/dist/backends/signoz-api-ssrf.test.js.map +0 -1
  1064. package/dist/backends/signoz-api-test-helpers.d.ts +0 -80
  1065. package/dist/backends/signoz-api-test-helpers.d.ts.map +0 -1
  1066. package/dist/backends/signoz-api-test-helpers.js +0 -79
  1067. package/dist/backends/signoz-api-test-helpers.js.map +0 -1
  1068. package/dist/backends/signoz-api.d.ts +0 -95
  1069. package/dist/backends/signoz-api.d.ts.map +0 -1
  1070. package/dist/backends/signoz-api.integration.test.d.ts +0 -8
  1071. package/dist/backends/signoz-api.integration.test.d.ts.map +0 -1
  1072. package/dist/backends/signoz-api.integration.test.js +0 -137
  1073. package/dist/backends/signoz-api.integration.test.js.map +0 -1
  1074. package/dist/backends/signoz-api.js +0 -1016
  1075. package/dist/backends/signoz-api.js.map +0 -1
  1076. package/dist/backends/signoz-api.test.d.ts +0 -11
  1077. package/dist/backends/signoz-api.test.d.ts.map +0 -1
  1078. package/dist/backends/signoz-api.test.js +0 -831
  1079. package/dist/backends/signoz-api.test.js.map +0 -1
  1080. package/dist/lib/cache.d.ts +0 -77
  1081. package/dist/lib/cache.d.ts.map +0 -1
  1082. package/dist/lib/cache.js +0 -119
  1083. package/dist/lib/cache.js.map +0 -1
  1084. package/dist/lib/cache.test.d.ts.map +0 -1
  1085. package/dist/lib/cache.test.js.map +0 -1
  1086. package/dist/lib/circuit-breaker.d.ts +0 -83
  1087. package/dist/lib/circuit-breaker.d.ts.map +0 -1
  1088. package/dist/lib/circuit-breaker.js +0 -125
  1089. package/dist/lib/circuit-breaker.js.map +0 -1
  1090. package/dist/lib/circuit-breaker.test.d.ts.map +0 -1
  1091. package/dist/lib/circuit-breaker.test.js.map +0 -1
  1092. package/dist/lib/constants-symlink.test.d.ts.map +0 -1
  1093. package/dist/lib/constants-symlink.test.js.map +0 -1
  1094. package/dist/lib/constants.d.ts +0 -108
  1095. package/dist/lib/constants.d.ts.map +0 -1
  1096. package/dist/lib/constants.js +0 -350
  1097. package/dist/lib/constants.js.map +0 -1
  1098. package/dist/lib/constants.test.d.ts.map +0 -1
  1099. package/dist/lib/constants.test.js.map +0 -1
  1100. package/dist/lib/edge-cases.test.d.ts.map +0 -1
  1101. package/dist/lib/edge-cases.test.js.map +0 -1
  1102. package/dist/lib/error-sanitizer.d.ts.map +0 -1
  1103. package/dist/lib/error-sanitizer.js.map +0 -1
  1104. package/dist/lib/error-sanitizer.test.d.ts.map +0 -1
  1105. package/dist/lib/error-sanitizer.test.js.map +0 -1
  1106. package/dist/lib/error-types.d.ts.map +0 -1
  1107. package/dist/lib/error-types.js.map +0 -1
  1108. package/dist/lib/error-types.test.d.ts.map +0 -1
  1109. package/dist/lib/error-types.test.js.map +0 -1
  1110. package/dist/lib/file-utils.d.ts.map +0 -1
  1111. package/dist/lib/file-utils.js.map +0 -1
  1112. package/dist/lib/file-utils.test.d.ts.map +0 -1
  1113. package/dist/lib/file-utils.test.js.map +0 -1
  1114. package/dist/lib/indexer.d.ts +0 -96
  1115. package/dist/lib/indexer.d.ts.map +0 -1
  1116. package/dist/lib/indexer.js.map +0 -1
  1117. package/dist/lib/indexer.test.d.ts.map +0 -1
  1118. package/dist/lib/indexer.test.js.map +0 -1
  1119. package/dist/lib/input-validator.d.ts.map +0 -1
  1120. package/dist/lib/input-validator.fuzz.test.d.ts.map +0 -1
  1121. package/dist/lib/input-validator.fuzz.test.js.map +0 -1
  1122. package/dist/lib/input-validator.js.map +0 -1
  1123. package/dist/lib/input-validator.test.d.ts.map +0 -1
  1124. package/dist/lib/input-validator.test.js.map +0 -1
  1125. package/dist/lib/logger.d.ts.map +0 -1
  1126. package/dist/lib/logger.js +0 -81
  1127. package/dist/lib/logger.js.map +0 -1
  1128. package/dist/lib/logger.test.d.ts.map +0 -1
  1129. package/dist/lib/logger.test.js.map +0 -1
  1130. package/dist/lib/otlp-export.d.ts.map +0 -1
  1131. package/dist/lib/otlp-export.js.map +0 -1
  1132. package/dist/lib/query-sanitizer.d.ts.map +0 -1
  1133. package/dist/lib/query-sanitizer.js.map +0 -1
  1134. package/dist/lib/query-sanitizer.test.d.ts.map +0 -1
  1135. package/dist/lib/query-sanitizer.test.js.map +0 -1
  1136. package/dist/lib/server-utils.d.ts.map +0 -1
  1137. package/dist/lib/server-utils.js.map +0 -1
  1138. package/dist/lib/shared-schemas.d.ts +0 -81
  1139. package/dist/lib/shared-schemas.d.ts.map +0 -1
  1140. package/dist/lib/shared-schemas.js +0 -80
  1141. package/dist/lib/shared-schemas.js.map +0 -1
  1142. package/dist/lib/shared-schemas.test.d.ts.map +0 -1
  1143. package/dist/lib/shared-schemas.test.js.map +0 -1
  1144. package/dist/lib/toon-encoder.d.ts.map +0 -1
  1145. package/dist/lib/toon-encoder.js.map +0 -1
  1146. package/dist/lib/toon-encoder.test.d.ts.map +0 -1
  1147. package/dist/lib/toon-encoder.test.js.map +0 -1
  1148. package/dist/tools/signoz.integration.test.d.ts +0 -8
  1149. package/dist/tools/signoz.integration.test.d.ts.map +0 -1
  1150. package/dist/tools/signoz.integration.test.js +0 -141
  1151. package/dist/tools/signoz.integration.test.js.map +0 -1
  1152. /package/dist/lib/{constants-symlink.test.d.ts → core/constants-symlink.test.d.ts} +0 -0
  1153. /package/dist/lib/{constants.test.d.ts → core/constants.test.d.ts} +0 -0
  1154. /package/dist/lib/{edge-cases.test.d.ts → core/edge-cases.test.d.ts} +0 -0
  1155. /package/dist/lib/{file-utils.test.d.ts → core/file-utils.test.d.ts} +0 -0
  1156. /package/dist/lib/{input-validator.fuzz.test.d.ts → core/input-validator.fuzz.test.d.ts} +0 -0
  1157. /package/dist/lib/{input-validator.test.d.ts → core/input-validator.test.d.ts} +0 -0
  1158. /package/dist/lib/{logger.test.d.ts → core/logger.test.d.ts} +0 -0
  1159. /package/dist/lib/{logger.test.js → core/logger.test.js} +0 -0
  1160. /package/dist/lib/{shared-schemas.test.d.ts → core/shared-schemas.test.d.ts} +0 -0
  1161. /package/dist/lib/{error-sanitizer.test.d.ts → errors/error-sanitizer.test.d.ts} +0 -0
  1162. /package/dist/lib/{error-types.test.d.ts → errors/error-types.test.d.ts} +0 -0
  1163. /package/dist/lib/{query-sanitizer.d.ts → errors/query-sanitizer.d.ts} +0 -0
  1164. /package/dist/lib/{query-sanitizer.test.d.ts → errors/query-sanitizer.test.d.ts} +0 -0
  1165. /package/dist/lib/{indexer.test.d.ts → observability/indexer.test.d.ts} +0 -0
  1166. /package/dist/lib/{cache.test.d.ts → resilience/cache.test.d.ts} +0 -0
  1167. /package/dist/lib/{circuit-breaker.test.d.ts → resilience/circuit-breaker.test.d.ts} +0 -0
  1168. /package/dist/lib/{toon-encoder.test.d.ts → resilience/toon-encoder.test.d.ts} +0 -0
@@ -0,0 +1,973 @@
1
+ /**
2
+ * DAGEval Tests — RED phase
3
+ *
4
+ * Tests for the not-yet-implemented dagEval function and DAGEvalConfig types.
5
+ * All tests are expected to fail until llm-judge-dag.ts is implemented.
6
+ */
7
+ import { describe, it } from 'vitest';
8
+ import assert from 'node:assert';
9
+ import { dagEval, validateDAGConfig, } from './llm-judge-dag.js';
10
+ // ============================================================================
11
+ // Constants
12
+ // ============================================================================
13
+ const DAG_NORMALIZED_MIN = 0;
14
+ const DAG_NORMALIZED_MAX = 1;
15
+ const DAG_SCORE_MID = 5;
16
+ const DAG_NORMALIZED_MID = 0.5;
17
+ const DAG_SCORE_TEN = 10;
18
+ const DAG_SCORE_ZERO = 0;
19
+ const FLOAT_TOLERANCE = 1e-9;
20
+ const SHORT_TIMEOUT_MS = 10;
21
+ const CONDITIONAL_THRESHOLD = 5;
22
+ const EDGE_WEIGHT_HALF = 0.5;
23
+ const MAX_DEPTH_TWO = 2;
24
+ // ============================================================================
25
+ // Mock LLM Provider
26
+ // ============================================================================
27
+ function createMockLLM(responses) {
28
+ let callIndex = 0;
29
+ return {
30
+ async generate(_prompt, _options) {
31
+ const response = responses[callIndex] ?? responses[responses.length - 1];
32
+ callIndex++;
33
+ return { text: response };
34
+ },
35
+ };
36
+ }
37
+ function createHangingLLM() {
38
+ return {
39
+ generate(_prompt, options) {
40
+ return new Promise((_resolve, _reject) => {
41
+ // Respect abort signal if provided
42
+ if (options?.signal) {
43
+ options.signal.addEventListener('abort', () => {
44
+ _reject(new Error('AbortError'));
45
+ });
46
+ }
47
+ // Otherwise hang forever
48
+ });
49
+ },
50
+ };
51
+ }
52
+ // ============================================================================
53
+ // Fixture Builders
54
+ // ============================================================================
55
+ const VERDICT_PASS = {
56
+ type: 'verdict',
57
+ score: DAG_SCORE_TEN,
58
+ label: 'pass',
59
+ };
60
+ const VERDICT_FAIL = {
61
+ type: 'verdict',
62
+ score: DAG_SCORE_ZERO,
63
+ label: 'fail',
64
+ };
65
+ const VERDICT_PARTIAL = {
66
+ type: 'verdict',
67
+ score: DAG_SCORE_MID,
68
+ label: 'partial',
69
+ };
70
+ const BASE_TEST_CASE = {
71
+ input: 'What is AI?',
72
+ output: 'AI is artificial intelligence.',
73
+ };
74
+ // ============================================================================
75
+ // Basic Traversal
76
+ // ============================================================================
77
+ describe('dagEval — basic traversal', () => {
78
+ it('should traverse a single VerdictNode and return normalized score', async () => {
79
+ const config = {
80
+ name: 'single-verdict',
81
+ nodes: new Map([['root', VERDICT_PASS]]),
82
+ rootId: 'root',
83
+ };
84
+ const result = await dagEval(createMockLLM([]), config, BASE_TEST_CASE);
85
+ assert.ok(result.score >= DAG_NORMALIZED_MIN && result.score <= DAG_NORMALIZED_MAX, `score ${result.score} should be in [0, 1]`);
86
+ assert.ok(Math.abs(result.score - DAG_NORMALIZED_MAX) < FLOAT_TOLERANCE, `score 10/10 should normalize to 1.0, got ${result.score}`);
87
+ });
88
+ it('should normalize VerdictNode score 0 to 0.0', async () => {
89
+ const config = {
90
+ name: 'verdict-zero',
91
+ nodes: new Map([['root', VERDICT_FAIL]]),
92
+ rootId: 'root',
93
+ };
94
+ const result = await dagEval(createMockLLM([]), config, BASE_TEST_CASE);
95
+ assert.ok(Math.abs(result.score - DAG_NORMALIZED_MIN) < FLOAT_TOLERANCE, `score 0/10 should normalize to 0.0, got ${result.score}`);
96
+ });
97
+ it('should normalize VerdictNode score 5 to 0.5', async () => {
98
+ const config = {
99
+ name: 'verdict-mid',
100
+ nodes: new Map([['root', VERDICT_PARTIAL]]),
101
+ rootId: 'root',
102
+ };
103
+ const result = await dagEval(createMockLLM([]), config, BASE_TEST_CASE);
104
+ assert.ok(Math.abs(result.score - DAG_NORMALIZED_MID) < FLOAT_TOLERANCE, `score 5/10 should normalize to 0.5, got ${result.score}`);
105
+ });
106
+ it('should follow BinaryJudgementNode true branch when LLM responds true', async () => {
107
+ const trueChild = { type: 'verdict', score: DAG_SCORE_TEN, label: 'true-branch' };
108
+ const falseChild = { type: 'verdict', score: DAG_SCORE_ZERO, label: 'false-branch' };
109
+ const judgeNode = {
110
+ type: 'binary_judgement',
111
+ criteria: 'Is the response relevant?',
112
+ trueChild: 'true-node',
113
+ falseChild: 'false-node',
114
+ };
115
+ const config = {
116
+ name: 'binary-true',
117
+ nodes: new Map([
118
+ ['root', judgeNode],
119
+ ['true-node', trueChild],
120
+ ['false-node', falseChild],
121
+ ]),
122
+ rootId: 'root',
123
+ };
124
+ const result = await dagEval(createMockLLM(['true']), config, BASE_TEST_CASE);
125
+ assert.ok(Math.abs(result.score - DAG_NORMALIZED_MAX) < FLOAT_TOLERANCE, `true branch should yield score 1.0, got ${result.score}`);
126
+ });
127
+ it('should follow BinaryJudgementNode false branch when LLM responds false', async () => {
128
+ const trueChild = { type: 'verdict', score: DAG_SCORE_TEN, label: 'true-branch' };
129
+ const falseChild = { type: 'verdict', score: DAG_SCORE_ZERO, label: 'false-branch' };
130
+ const judgeNode = {
131
+ type: 'binary_judgement',
132
+ criteria: 'Is the response relevant?',
133
+ trueChild: 'true-node',
134
+ falseChild: 'false-node',
135
+ };
136
+ const config = {
137
+ name: 'binary-false',
138
+ nodes: new Map([
139
+ ['root', judgeNode],
140
+ ['true-node', trueChild],
141
+ ['false-node', falseChild],
142
+ ]),
143
+ rootId: 'root',
144
+ };
145
+ const result = await dagEval(createMockLLM(['false']), config, BASE_TEST_CASE);
146
+ assert.ok(Math.abs(result.score - DAG_NORMALIZED_MIN) < FLOAT_TOLERANCE, `false branch should yield score 0.0, got ${result.score}`);
147
+ });
148
+ it('should follow NonBinaryJudgementNode to matching verdict child', async () => {
149
+ const excellentVerdict = { type: 'verdict', score: DAG_SCORE_TEN, label: 'excellent' };
150
+ const poorVerdict = { type: 'verdict', score: DAG_SCORE_ZERO, label: 'poor' };
151
+ const nonBinaryNode = {
152
+ type: 'non_binary_judgement',
153
+ criteria: 'Rate the quality',
154
+ verdicts: new Map([
155
+ ['excellent', 'excellent-node'],
156
+ ['poor', 'poor-node'],
157
+ ]),
158
+ };
159
+ const config = {
160
+ name: 'non-binary',
161
+ nodes: new Map([
162
+ ['root', nonBinaryNode],
163
+ ['excellent-node', excellentVerdict],
164
+ ['poor-node', poorVerdict],
165
+ ]),
166
+ rootId: 'root',
167
+ };
168
+ const result = await dagEval(createMockLLM(['excellent']), config, BASE_TEST_CASE);
169
+ assert.ok(Math.abs(result.score - DAG_NORMALIZED_MAX) < FLOAT_TOLERANCE, `'excellent' verdict should yield score 1.0, got ${result.score}`);
170
+ });
171
+ it('should use TaskNode output as transformed input for next node', async () => {
172
+ const taskNode = {
173
+ type: 'task',
174
+ instruction: 'Extract the main topic from the output',
175
+ next: 'judge-node',
176
+ };
177
+ const judgeNode = {
178
+ type: 'binary_judgement',
179
+ criteria: 'Is the topic relevant?',
180
+ trueChild: 'pass-node',
181
+ falseChild: 'fail-node',
182
+ };
183
+ const config = {
184
+ name: 'task-then-judge',
185
+ nodes: new Map([
186
+ ['root', taskNode],
187
+ ['judge-node', judgeNode],
188
+ ['pass-node', VERDICT_PASS],
189
+ ['fail-node', VERDICT_FAIL],
190
+ ]),
191
+ rootId: 'root',
192
+ };
193
+ // First LLM call: TaskNode transformation. Second: BinaryJudgementNode.
194
+ const result = await dagEval(createMockLLM(['artificial intelligence', 'true']), config, BASE_TEST_CASE);
195
+ assert.ok(result.score >= DAG_NORMALIZED_MIN && result.score <= DAG_NORMALIZED_MAX);
196
+ });
197
+ it('should traverse a multi-hop DAG and reach the correct VerdictNode', async () => {
198
+ const firstJudge = {
199
+ type: 'binary_judgement',
200
+ criteria: 'Is the output non-empty?',
201
+ trueChild: 'second-judge',
202
+ falseChild: 'fail-node',
203
+ };
204
+ const secondJudge = {
205
+ type: 'binary_judgement',
206
+ criteria: 'Is the output accurate?',
207
+ trueChild: 'pass-node',
208
+ falseChild: 'partial-node',
209
+ };
210
+ const config = {
211
+ name: 'multi-hop',
212
+ nodes: new Map([
213
+ ['root', firstJudge],
214
+ ['second-judge', secondJudge],
215
+ ['pass-node', VERDICT_PASS],
216
+ ['fail-node', VERDICT_FAIL],
217
+ ['partial-node', VERDICT_PARTIAL],
218
+ ]),
219
+ rootId: 'root',
220
+ };
221
+ const result = await dagEval(createMockLLM(['true', 'true']), config, BASE_TEST_CASE);
222
+ assert.ok(Math.abs(result.score - DAG_NORMALIZED_MAX) < FLOAT_TOLERANCE, `two true branches should reach pass verdict (1.0), got ${result.score}`);
223
+ });
224
+ });
225
+ // ============================================================================
226
+ // Explanation Trail
227
+ // ============================================================================
228
+ describe('dagEval — explanation trail', () => {
229
+ it('should return a non-empty reason string', async () => {
230
+ const config = {
231
+ name: 'reason-check',
232
+ nodes: new Map([['root', VERDICT_PASS]]),
233
+ rootId: 'root',
234
+ };
235
+ const result = await dagEval(createMockLLM([]), config, BASE_TEST_CASE);
236
+ assert.ok(typeof result.reason === 'string' && result.reason.length > 0, 'reason should be a non-empty string');
237
+ });
238
+ it('should include the verdict label in the reason', async () => {
239
+ const config = {
240
+ name: 'label-in-reason',
241
+ nodes: new Map([['root', VERDICT_PASS]]),
242
+ rootId: 'root',
243
+ };
244
+ const result = await dagEval(createMockLLM([]), config, BASE_TEST_CASE);
245
+ assert.ok(result.reason.includes('pass'), `reason should include verdict label 'pass', got: ${result.reason}`);
246
+ });
247
+ it('should include each traversed node ID in the reason', async () => {
248
+ const judgeNode = {
249
+ type: 'binary_judgement',
250
+ criteria: 'Is the output relevant?',
251
+ trueChild: 'verdict-node',
252
+ falseChild: 'fail-node',
253
+ };
254
+ const config = {
255
+ name: 'trail-test',
256
+ nodes: new Map([
257
+ ['root', judgeNode],
258
+ ['verdict-node', VERDICT_PASS],
259
+ ['fail-node', VERDICT_FAIL],
260
+ ]),
261
+ rootId: 'root',
262
+ };
263
+ const result = await dagEval(createMockLLM(['true']), config, BASE_TEST_CASE);
264
+ assert.ok(result.reason.includes('root') && result.reason.includes('verdict-node'), `reason should include traversed node IDs, got: ${result.reason}`);
265
+ });
266
+ it('should include each node decision in the reason', async () => {
267
+ const judgeNode = {
268
+ type: 'binary_judgement',
269
+ criteria: 'Is the response correct?',
270
+ trueChild: 'pass-node',
271
+ falseChild: 'fail-node',
272
+ };
273
+ const config = {
274
+ name: 'decision-trail',
275
+ nodes: new Map([
276
+ ['root', judgeNode],
277
+ ['pass-node', VERDICT_PASS],
278
+ ['fail-node', VERDICT_FAIL],
279
+ ]),
280
+ rootId: 'root',
281
+ };
282
+ const result = await dagEval(createMockLLM(['true']), config, BASE_TEST_CASE);
283
+ // Reason should capture the binary decision made
284
+ assert.ok(result.reason.length > 0);
285
+ assert.ok(typeof result.reason === 'string');
286
+ });
287
+ });
288
+ // ============================================================================
289
+ // Score Normalization
290
+ // ============================================================================
291
+ describe('dagEval — score normalization', () => {
292
+ it('should always return score in [0, 1] range regardless of VerdictNode score', async () => {
293
+ const scores = [DAG_SCORE_ZERO, 1, 3, DAG_SCORE_MID, 7, DAG_SCORE_TEN];
294
+ for (const rawScore of scores) {
295
+ const config = {
296
+ name: `score-${rawScore}`,
297
+ nodes: new Map([['root', { type: 'verdict', score: rawScore, label: 'test' }]]),
298
+ rootId: 'root',
299
+ };
300
+ const result = await dagEval(createMockLLM([]), config, BASE_TEST_CASE);
301
+ assert.ok(result.score >= DAG_NORMALIZED_MIN && result.score <= DAG_NORMALIZED_MAX, `raw score ${rawScore} normalized to ${result.score}, expected in [0, 1]`);
302
+ }
303
+ });
304
+ it('should produce monotonically increasing normalized scores for increasing raw scores', async () => {
305
+ const rawScores = [DAG_SCORE_ZERO, DAG_SCORE_MID, DAG_SCORE_TEN];
306
+ const normalizedScores = [];
307
+ for (const rawScore of rawScores) {
308
+ const config = {
309
+ name: `monotone-${rawScore}`,
310
+ nodes: new Map([['root', { type: 'verdict', score: rawScore, label: 'test' }]]),
311
+ rootId: 'root',
312
+ };
313
+ const result = await dagEval(createMockLLM([]), config, BASE_TEST_CASE);
314
+ normalizedScores.push(result.score);
315
+ }
316
+ assert.ok(normalizedScores[0] < normalizedScores[1], `0 → ${normalizedScores[0]} should be less than 5 → ${normalizedScores[1]}`);
317
+ assert.ok(normalizedScores[1] < normalizedScores[2], `5 → ${normalizedScores[1]} should be less than 10 → ${normalizedScores[2]}`);
318
+ });
319
+ });
320
+ // ============================================================================
321
+ // Cycle Detection
322
+ // ============================================================================
323
+ describe('dagEval — cycle detection', () => {
324
+ it('should throw when a node references itself as a child', async () => {
325
+ const selfRefNode = {
326
+ type: 'binary_judgement',
327
+ criteria: 'Is it valid?',
328
+ trueChild: 'root', // self-reference
329
+ falseChild: 'fail-node',
330
+ };
331
+ const config = {
332
+ name: 'self-cycle',
333
+ nodes: new Map([
334
+ ['root', selfRefNode],
335
+ ['fail-node', VERDICT_FAIL],
336
+ ]),
337
+ rootId: 'root',
338
+ };
339
+ await assert.rejects(dagEval(createMockLLM([]), config, BASE_TEST_CASE), /cycle/i, 'should throw an error mentioning cycle');
340
+ });
341
+ it('should throw when two nodes form a mutual cycle', async () => {
342
+ const nodeA = {
343
+ type: 'binary_judgement',
344
+ criteria: 'Check A',
345
+ trueChild: 'node-b',
346
+ falseChild: 'node-b',
347
+ };
348
+ const nodeB = {
349
+ type: 'binary_judgement',
350
+ criteria: 'Check B',
351
+ trueChild: 'node-a', // cycle back
352
+ falseChild: 'node-a',
353
+ };
354
+ const config = {
355
+ name: 'mutual-cycle',
356
+ nodes: new Map([
357
+ ['root', nodeA],
358
+ ['node-a', nodeA],
359
+ ['node-b', nodeB],
360
+ ]),
361
+ rootId: 'root',
362
+ };
363
+ await assert.rejects(dagEval(createMockLLM([]), config, BASE_TEST_CASE), /cycle/i);
364
+ });
365
+ it('should throw when validateDAGConfig is called with a cyclic config', () => {
366
+ const selfRefNode = {
367
+ type: 'binary_judgement',
368
+ criteria: 'Cycle check',
369
+ trueChild: 'root',
370
+ falseChild: 'fail-node',
371
+ };
372
+ const config = {
373
+ name: 'validate-cycle',
374
+ nodes: new Map([
375
+ ['root', selfRefNode],
376
+ ['fail-node', VERDICT_FAIL],
377
+ ]),
378
+ rootId: 'root',
379
+ };
380
+ assert.throws(() => validateDAGConfig(config), /cycle/i);
381
+ });
382
+ });
383
+ // ============================================================================
384
+ // Config Validation
385
+ // ============================================================================
386
+ describe('dagEval — config validation', () => {
387
+ it('should throw when rootId does not exist in nodes map', async () => {
388
+ const config = {
389
+ name: 'missing-root',
390
+ nodes: new Map([['other-node', VERDICT_PASS]]),
391
+ rootId: 'nonexistent',
392
+ };
393
+ await assert.rejects(dagEval(createMockLLM([]), config, BASE_TEST_CASE), /root/i, 'should throw an error mentioning root');
394
+ });
395
+ it('should throw when a child node reference does not exist in nodes map', async () => {
396
+ const judgeNode = {
397
+ type: 'binary_judgement',
398
+ criteria: 'Is it valid?',
399
+ trueChild: 'pass-node',
400
+ falseChild: 'dangling-node', // does not exist
401
+ };
402
+ const config = {
403
+ name: 'dangling-ref',
404
+ nodes: new Map([
405
+ ['root', judgeNode],
406
+ ['pass-node', VERDICT_PASS],
407
+ // 'dangling-node' intentionally omitted
408
+ ]),
409
+ rootId: 'root',
410
+ };
411
+ await assert.rejects(dagEval(createMockLLM([]), config, BASE_TEST_CASE), /node/i);
412
+ });
413
+ it('should throw when no VerdictNode is reachable from root', async () => {
414
+ // Non-binary node pointing to non-existent verdict keys with no matching responses
415
+ const nonBinaryNode = {
416
+ type: 'non_binary_judgement',
417
+ criteria: 'Classify quality',
418
+ verdicts: new Map([
419
+ ['good', 'good-verdict'],
420
+ ]),
421
+ };
422
+ const config = {
423
+ name: 'unreachable-verdict',
424
+ nodes: new Map([
425
+ ['root', nonBinaryNode],
426
+ ['good-verdict', VERDICT_PASS],
427
+ ]),
428
+ rootId: 'root',
429
+ };
430
+ // LLM returns a verdict key that doesn't exist in the map
431
+ await assert.rejects(dagEval(createMockLLM(['unknown-label']), config, BASE_TEST_CASE), /verdict/i);
432
+ });
433
+ it('should throw when nodes map is empty', async () => {
434
+ const config = {
435
+ name: 'empty-nodes',
436
+ nodes: new Map(),
437
+ rootId: 'root',
438
+ };
439
+ await assert.rejects(dagEval(createMockLLM([]), config, BASE_TEST_CASE), /root/i);
440
+ });
441
+ it('should throw when validateDAGConfig is called with missing rootId', () => {
442
+ const config = {
443
+ name: 'missing-root-validate',
444
+ nodes: new Map([['other', VERDICT_PASS]]),
445
+ rootId: 'missing',
446
+ };
447
+ assert.throws(() => validateDAGConfig(config), /root/i);
448
+ });
449
+ it('should throw when validateDAGConfig is called with a dangling child reference', () => {
450
+ const judgeNode = {
451
+ type: 'binary_judgement',
452
+ criteria: 'Check',
453
+ trueChild: 'exists',
454
+ falseChild: 'does-not-exist',
455
+ };
456
+ const config = {
457
+ name: 'dangling-validate',
458
+ nodes: new Map([
459
+ ['root', judgeNode],
460
+ ['exists', VERDICT_PASS],
461
+ ]),
462
+ rootId: 'root',
463
+ };
464
+ assert.throws(() => validateDAGConfig(config), /node/i);
465
+ });
466
+ it('should not throw when validateDAGConfig is called with a valid config', () => {
467
+ const judgeNode = {
468
+ type: 'binary_judgement',
469
+ criteria: 'Is it good?',
470
+ trueChild: 'pass-node',
471
+ falseChild: 'fail-node',
472
+ };
473
+ const config = {
474
+ name: 'valid-config',
475
+ nodes: new Map([
476
+ ['root', judgeNode],
477
+ ['pass-node', VERDICT_PASS],
478
+ ['fail-node', VERDICT_FAIL],
479
+ ]),
480
+ rootId: 'root',
481
+ };
482
+ assert.doesNotThrow(() => validateDAGConfig(config));
483
+ });
484
+ });
485
+ // ============================================================================
486
+ // Timeout Behavior
487
+ // ============================================================================
488
+ describe('dagEval — timeout', () => {
489
+ it('should reject with a timeout error when LLM hangs and timeoutMs is exceeded', async () => {
490
+ const judgeNode = {
491
+ type: 'binary_judgement',
492
+ criteria: 'Is the output relevant?',
493
+ trueChild: 'pass-node',
494
+ falseChild: 'fail-node',
495
+ };
496
+ const config = {
497
+ name: 'timeout-test',
498
+ nodes: new Map([
499
+ ['root', judgeNode],
500
+ ['pass-node', VERDICT_PASS],
501
+ ['fail-node', VERDICT_FAIL],
502
+ ]),
503
+ rootId: 'root',
504
+ };
505
+ await assert.rejects(dagEval(createHangingLLM(), config, BASE_TEST_CASE, SHORT_TIMEOUT_MS), (err) => {
506
+ const msg = err.message.toLowerCase();
507
+ return msg.includes('timeout') || msg.includes('abort') || err.constructor.name === 'LLMTimeoutError';
508
+ });
509
+ });
510
+ it('should complete without error when LLM responds before timeout', async () => {
511
+ const config = {
512
+ name: 'no-timeout',
513
+ nodes: new Map([['root', VERDICT_PASS]]),
514
+ rootId: 'root',
515
+ };
516
+ // VerdictNode requires no LLM call; any reasonable timeout should pass
517
+ const result = await dagEval(createMockLLM([]), config, BASE_TEST_CASE, 5000);
518
+ assert.ok(result.score >= DAG_NORMALIZED_MIN && result.score <= DAG_NORMALIZED_MAX);
519
+ });
520
+ });
521
+ // ============================================================================
522
+ // Return Shape
523
+ // ============================================================================
524
+ describe('dagEval — return shape', () => {
525
+ it('should return an object with score and reason fields', async () => {
526
+ const config = {
527
+ name: 'shape-test',
528
+ nodes: new Map([['root', VERDICT_PASS]]),
529
+ rootId: 'root',
530
+ };
531
+ const result = await dagEval(createMockLLM([]), config, BASE_TEST_CASE);
532
+ assert.ok('score' in result, 'result should have score field');
533
+ assert.ok('reason' in result, 'result should have reason field');
534
+ assert.ok(typeof result.score === 'number', 'score should be a number');
535
+ assert.ok(typeof result.reason === 'string', 'reason should be a string');
536
+ });
537
+ it('should include the config name somewhere in the result metadata or reason', async () => {
538
+ const config = {
539
+ name: 'unique-eval-name-xyz',
540
+ nodes: new Map([['root', VERDICT_PASS]]),
541
+ rootId: 'root',
542
+ };
543
+ const result = await dagEval(createMockLLM([]), config, BASE_TEST_CASE);
544
+ // Either reason includes the name, or rawResponse does — flexible check
545
+ const serialized = JSON.stringify(result);
546
+ assert.ok(serialized.includes('unique-eval-name-xyz') || result.reason.length > 0, 'result should reference the evaluation config name or have a non-empty reason');
547
+ });
548
+ });
549
+ // ============================================================================
550
+ // ConditionalJudgementNode
551
+ // ============================================================================
552
+ describe('dagEval — ConditionalJudgementNode', () => {
553
+ it('should route to aboveChild when LLM score >= threshold', async () => {
554
+ const conditionalNode = {
555
+ type: 'conditional_judgement',
556
+ criteria: 'Rate the quality',
557
+ scoreThreshold: CONDITIONAL_THRESHOLD,
558
+ aboveChild: 'pass-node',
559
+ belowChild: 'fail-node',
560
+ };
561
+ const config = {
562
+ name: 'conditional-above',
563
+ nodes: new Map([
564
+ ['root', conditionalNode],
565
+ ['pass-node', VERDICT_PASS],
566
+ ['fail-node', VERDICT_FAIL],
567
+ ]),
568
+ rootId: 'root',
569
+ };
570
+ // LLM returns 7, which is >= threshold of 5
571
+ const result = await dagEval(createMockLLM(['7']), config, BASE_TEST_CASE);
572
+ assert.ok(Math.abs(result.score - DAG_NORMALIZED_MAX) < FLOAT_TOLERANCE, `score >= threshold should route to pass (1.0), got ${result.score}`);
573
+ });
574
+ it('should route to belowChild when LLM score < threshold', async () => {
575
+ const conditionalNode = {
576
+ type: 'conditional_judgement',
577
+ criteria: 'Rate the quality',
578
+ scoreThreshold: CONDITIONAL_THRESHOLD,
579
+ aboveChild: 'pass-node',
580
+ belowChild: 'fail-node',
581
+ };
582
+ const config = {
583
+ name: 'conditional-below',
584
+ nodes: new Map([
585
+ ['root', conditionalNode],
586
+ ['pass-node', VERDICT_PASS],
587
+ ['fail-node', VERDICT_FAIL],
588
+ ]),
589
+ rootId: 'root',
590
+ };
591
+ // LLM returns 3, which is < threshold of 5
592
+ const result = await dagEval(createMockLLM(['3']), config, BASE_TEST_CASE);
593
+ assert.ok(Math.abs(result.score - DAG_NORMALIZED_MIN) < FLOAT_TOLERANCE, `score < threshold should route to fail (0.0), got ${result.score}`);
594
+ });
595
+ it('should throw when scoreThreshold is out of [0, 10] range', async () => {
596
+ const conditionalNode = {
597
+ type: 'conditional_judgement',
598
+ criteria: 'Rate the quality',
599
+ scoreThreshold: 11, // invalid
600
+ aboveChild: 'pass-node',
601
+ belowChild: 'fail-node',
602
+ };
603
+ const config = {
604
+ name: 'invalid-threshold',
605
+ nodes: new Map([
606
+ ['root', conditionalNode],
607
+ ['pass-node', VERDICT_PASS],
608
+ ['fail-node', VERDICT_FAIL],
609
+ ]),
610
+ rootId: 'root',
611
+ };
612
+ await assert.rejects(dagEval(createMockLLM([]), config, BASE_TEST_CASE), /scoreThreshold/i);
613
+ });
614
+ it('should throw when LLM returns non-numeric response for conditional node', async () => {
615
+ const conditionalNode = {
616
+ type: 'conditional_judgement',
617
+ criteria: 'Rate the quality',
618
+ scoreThreshold: CONDITIONAL_THRESHOLD,
619
+ aboveChild: 'pass-node',
620
+ belowChild: 'fail-node',
621
+ };
622
+ const config = {
623
+ name: 'conditional-bad-response',
624
+ nodes: new Map([
625
+ ['root', conditionalNode],
626
+ ['pass-node', VERDICT_PASS],
627
+ ['fail-node', VERDICT_FAIL],
628
+ ]),
629
+ rootId: 'root',
630
+ };
631
+ await assert.rejects(dagEval(createMockLLM(['not-a-number']), config, BASE_TEST_CASE), /score/i);
632
+ });
633
+ it('should parse score from multi-line response when number is not on first line', async () => {
634
+ const conditionalNode = {
635
+ type: 'conditional_judgement',
636
+ criteria: 'Rate the quality',
637
+ scoreThreshold: CONDITIONAL_THRESHOLD,
638
+ aboveChild: 'pass-node',
639
+ belowChild: 'fail-node',
640
+ };
641
+ const config = {
642
+ name: 'conditional-multiline',
643
+ nodes: new Map([
644
+ ['root', conditionalNode],
645
+ ['pass-node', VERDICT_PASS],
646
+ ['fail-node', VERDICT_FAIL],
647
+ ]),
648
+ rootId: 'root',
649
+ };
650
+ // LLM returns text then number on second line — should extract 8 and route above threshold
651
+ const result = await dagEval(createMockLLM(['The quality is high.\n8']), config, BASE_TEST_CASE);
652
+ assert.ok(Math.abs(result.score - DAG_NORMALIZED_MAX) < FLOAT_TOLERANCE, `multi-line response with score 8 should route above threshold (5) to 1.0, got ${result.score}`);
653
+ });
654
+ it('should not parse partial-numeric lines like "1.5x" as a score', async () => {
655
+ const conditionalNode = {
656
+ type: 'conditional_judgement',
657
+ criteria: 'Rate the quality',
658
+ scoreThreshold: CONDITIONAL_THRESHOLD,
659
+ aboveChild: 'pass-node',
660
+ belowChild: 'fail-node',
661
+ };
662
+ const config = {
663
+ name: 'conditional-partial-numeric',
664
+ nodes: new Map([
665
+ ['root', conditionalNode],
666
+ ['pass-node', VERDICT_PASS],
667
+ ['fail-node', VERDICT_FAIL],
668
+ ]),
669
+ rootId: 'root',
670
+ };
671
+ // "Score: 1.5x" is not a fully-numeric line — should throw rather than silently parse 1.5
672
+ await assert.rejects(dagEval(createMockLLM(['Score: 1.5x (out of 10)']), config, BASE_TEST_CASE), /Expected a line containing only a number/i);
673
+ });
674
+ it('should throw with descriptive message when all lines are non-numeric', async () => {
675
+ const conditionalNode = {
676
+ type: 'conditional_judgement',
677
+ criteria: 'Rate the quality',
678
+ scoreThreshold: CONDITIONAL_THRESHOLD,
679
+ aboveChild: 'pass-node',
680
+ belowChild: 'fail-node',
681
+ };
682
+ const config = {
683
+ name: 'conditional-all-text',
684
+ nodes: new Map([
685
+ ['root', conditionalNode],
686
+ ['pass-node', VERDICT_PASS],
687
+ ['fail-node', VERDICT_FAIL],
688
+ ]),
689
+ rootId: 'root',
690
+ };
691
+ await assert.rejects(dagEval(createMockLLM(['I cannot provide a number for this.']), config, BASE_TEST_CASE), /Expected a line containing only a number/i);
692
+ });
693
+ it('should clamp negative LLM score to 0 and route to belowChild', async () => {
694
+ const conditionalNode = {
695
+ type: 'conditional_judgement',
696
+ criteria: 'Rate the quality',
697
+ scoreThreshold: CONDITIONAL_THRESHOLD,
698
+ aboveChild: 'pass-node',
699
+ belowChild: 'fail-node',
700
+ };
701
+ const config = {
702
+ name: 'conditional-negative-clamp',
703
+ nodes: new Map([
704
+ ['root', conditionalNode],
705
+ ['pass-node', VERDICT_PASS],
706
+ ['fail-node', VERDICT_FAIL],
707
+ ]),
708
+ rootId: 'root',
709
+ };
710
+ // LLM returns -3: clamped to 0, which is < threshold (5), so routes to belowChild (fail)
711
+ const result = await dagEval(createMockLLM(['-3']), config, BASE_TEST_CASE);
712
+ assert.ok(Math.abs(result.score - DAG_NORMALIZED_MIN) < FLOAT_TOLERANCE, `negative score -3 should clamp to 0, route below threshold (5) to 0.0, got ${result.score}`);
713
+ });
714
+ it('should clamp LLM score to [0, 10] before comparing to threshold', async () => {
715
+ const conditionalNode = {
716
+ type: 'conditional_judgement',
717
+ criteria: 'Rate the quality',
718
+ scoreThreshold: CONDITIONAL_THRESHOLD,
719
+ aboveChild: 'pass-node',
720
+ belowChild: 'fail-node',
721
+ };
722
+ const config = {
723
+ name: 'conditional-clamp',
724
+ nodes: new Map([
725
+ ['root', conditionalNode],
726
+ ['pass-node', VERDICT_PASS],
727
+ ['fail-node', VERDICT_FAIL],
728
+ ]),
729
+ rootId: 'root',
730
+ };
731
+ // LLM returns 100 (clamped to 10 >= 5 → above)
732
+ const result = await dagEval(createMockLLM(['100']), config, BASE_TEST_CASE);
733
+ assert.ok(result.score > 0, `out-of-range score 100 should clamp to 10, route above threshold, got ${result.score}`);
734
+ });
735
+ });
736
+ // ============================================================================
737
+ // maxDepth
738
+ // ============================================================================
739
+ describe('dagEval — maxDepth', () => {
740
+ it('should throw when traversal depth exceeds maxDepth', async () => {
741
+ const judgeA = {
742
+ type: 'binary_judgement',
743
+ criteria: 'First check',
744
+ trueChild: 'judge-b',
745
+ falseChild: 'fail-node',
746
+ };
747
+ const judgeB = {
748
+ type: 'binary_judgement',
749
+ criteria: 'Second check',
750
+ trueChild: 'judge-c',
751
+ falseChild: 'fail-node',
752
+ };
753
+ const judgeC = {
754
+ type: 'binary_judgement',
755
+ criteria: 'Third check',
756
+ trueChild: 'pass-node',
757
+ falseChild: 'fail-node',
758
+ };
759
+ const config = {
760
+ name: 'depth-exceeded',
761
+ nodes: new Map([
762
+ ['root', judgeA],
763
+ ['judge-b', judgeB],
764
+ ['judge-c', judgeC],
765
+ ['pass-node', VERDICT_PASS],
766
+ ['fail-node', VERDICT_FAIL],
767
+ ]),
768
+ rootId: 'root',
769
+ maxDepth: MAX_DEPTH_TWO, // allows visiting ≤2 nodes; 3-hop chain exceeds this
770
+ };
771
+ await assert.rejects(dagEval(createMockLLM(['true', 'true', 'true']), config, BASE_TEST_CASE), /maxDepth/i);
772
+ });
773
+ it('should complete normally when traversal stays within maxDepth', async () => {
774
+ const config = {
775
+ name: 'depth-ok',
776
+ nodes: new Map([['root', VERDICT_PASS]]),
777
+ rootId: 'root',
778
+ maxDepth: MAX_DEPTH_TWO,
779
+ };
780
+ const result = await dagEval(createMockLLM([]), config, BASE_TEST_CASE);
781
+ assert.ok(result.score >= DAG_NORMALIZED_MIN && result.score <= DAG_NORMALIZED_MAX);
782
+ });
783
+ });
784
+ // ============================================================================
785
+ // edgeWeights
786
+ // ============================================================================
787
+ describe('dagEval — edgeWeights', () => {
788
+ it('should apply edge weight to final verdict score', async () => {
789
+ const judgeNode = {
790
+ type: 'binary_judgement',
791
+ criteria: 'Is the response relevant?',
792
+ trueChild: 'pass-node',
793
+ falseChild: 'fail-node',
794
+ };
795
+ const config = {
796
+ name: 'weighted-edge',
797
+ nodes: new Map([
798
+ ['root', judgeNode],
799
+ ['pass-node', VERDICT_PASS],
800
+ ['fail-node', VERDICT_FAIL],
801
+ ]),
802
+ rootId: 'root',
803
+ edgeWeights: new Map([['root:pass-node', EDGE_WEIGHT_HALF]]),
804
+ };
805
+ // Routes to pass-node (score=10), but edge weight=0.5 → final 1.0 * 0.5 = 0.5
806
+ const result = await dagEval(createMockLLM(['true']), config, BASE_TEST_CASE);
807
+ assert.ok(Math.abs(result.score - DAG_NORMALIZED_MID) < FLOAT_TOLERANCE, `edge weight 0.5 on pass path should yield 0.5, got ${result.score}`);
808
+ });
809
+ it('should use default weight 1.0 for edges not in edgeWeights map', async () => {
810
+ const config = {
811
+ name: 'default-weight',
812
+ nodes: new Map([['root', VERDICT_PASS]]),
813
+ rootId: 'root',
814
+ edgeWeights: new Map(), // empty map
815
+ };
816
+ const result = await dagEval(createMockLLM([]), config, BASE_TEST_CASE);
817
+ assert.ok(Math.abs(result.score - DAG_NORMALIZED_MAX) < FLOAT_TOLERANCE, `default weight should not affect score, expected 1.0, got ${result.score}`);
818
+ });
819
+ it('should throw when an edge weight is zero', async () => {
820
+ const judgeNode = {
821
+ type: 'binary_judgement',
822
+ criteria: 'Is the response relevant?',
823
+ trueChild: 'pass-node',
824
+ falseChild: 'fail-node',
825
+ };
826
+ const config = {
827
+ name: 'zero-weight',
828
+ nodes: new Map([
829
+ ['root', judgeNode],
830
+ ['pass-node', VERDICT_PASS],
831
+ ['fail-node', VERDICT_FAIL],
832
+ ]),
833
+ rootId: 'root',
834
+ edgeWeights: new Map([['root:pass-node', 0]]),
835
+ };
836
+ await assert.rejects(dagEval(createMockLLM(['true']), config, BASE_TEST_CASE), /edge weight/i);
837
+ });
838
+ it('should accumulate weights across multiple hops', async () => {
839
+ const judgeA = {
840
+ type: 'binary_judgement',
841
+ criteria: 'First check',
842
+ trueChild: 'judge-b',
843
+ falseChild: 'fail-node',
844
+ };
845
+ const judgeB = {
846
+ type: 'binary_judgement',
847
+ criteria: 'Second check',
848
+ trueChild: 'pass-node',
849
+ falseChild: 'fail-node',
850
+ };
851
+ const config = {
852
+ name: 'multi-hop-weights',
853
+ nodes: new Map([
854
+ ['root', judgeA],
855
+ ['judge-b', judgeB],
856
+ ['pass-node', VERDICT_PASS],
857
+ ['fail-node', VERDICT_FAIL],
858
+ ]),
859
+ rootId: 'root',
860
+ // Both edges weighted at 0.5 → accumulated = 0.25
861
+ edgeWeights: new Map([
862
+ ['root:judge-b', EDGE_WEIGHT_HALF],
863
+ ['judge-b:pass-node', EDGE_WEIGHT_HALF],
864
+ ]),
865
+ };
866
+ const result = await dagEval(createMockLLM(['true', 'true']), config, BASE_TEST_CASE);
867
+ // 1.0 * 0.5 * 0.5 = 0.25
868
+ assert.ok(Math.abs(result.score - 0.25) < FLOAT_TOLERANCE, `two 0.5 weights should accumulate to 0.25, got ${result.score}`);
869
+ });
870
+ });
871
+ // ============================================================================
872
+ // Stress Tests (ST-R6)
873
+ // ============================================================================
874
+ const ST_R6_DEEP_TREE_SIZE = 52; // 50+ nodes
875
+ const ST_R6_CYCLE_SIZE = 20;
876
+ /**
877
+ * Build a linear chain DAG: root → n1 → n2 → ... → verdict.
878
+ * Each intermediate node is a binary_judgement that always takes trueChild.
879
+ */
880
+ function buildDeepLinearDAG(depth) {
881
+ const nodes = new Map();
882
+ const verdictNode = { type: 'verdict', score: 8, label: 'deep-pass' };
883
+ nodes.set('verdict', verdictNode);
884
+ for (let i = depth - 1; i >= 0; i--) {
885
+ const nextId = i === depth - 1 ? 'verdict' : `node-${i + 1}`;
886
+ const judgeNode = {
887
+ type: 'binary_judgement',
888
+ criteria: `Check step ${i}`,
889
+ trueChild: nextId,
890
+ falseChild: 'verdict',
891
+ };
892
+ nodes.set(`node-${i}`, judgeNode);
893
+ }
894
+ return {
895
+ name: 'deep-linear',
896
+ nodes,
897
+ rootId: 'node-0',
898
+ };
899
+ }
900
+ describe('dagEval stress (ST-R6)', () => {
901
+ it('deep tree (50+ nodes): validateDAGConfig succeeds without throwing', () => {
902
+ const config = buildDeepLinearDAG(ST_R6_DEEP_TREE_SIZE);
903
+ assert.doesNotThrow(() => validateDAGConfig(config), 'validateDAGConfig should not throw for a valid deep tree');
904
+ });
905
+ it('deep tree (50+ nodes): traversal completes and score is in [0, 1]', async () => {
906
+ const config = buildDeepLinearDAG(ST_R6_DEEP_TREE_SIZE);
907
+ // Always return 'true' so traversal takes all trueChild paths
908
+ const responses = Array.from({ length: ST_R6_DEEP_TREE_SIZE }, () => 'true');
909
+ const result = await dagEval(createMockLLM(responses), config, BASE_TEST_CASE);
910
+ assert.ok(result.score >= DAG_NORMALIZED_MIN && result.score <= DAG_NORMALIZED_MAX, `score ${result.score} out of [0,1] for deep tree`);
911
+ });
912
+ it('maxDepth enforcement: passes with limit = total nodes, throws with limit = total nodes - 1', async () => {
913
+ // buildDeepLinearDAG(N) produces N judgment nodes + 1 verdict node = N+1 total nodes visited.
914
+ // The check is trail.length > maxDepth, so maxDepth must be >= N+1 to avoid throwing.
915
+ const totalNodes = ST_R6_DEEP_TREE_SIZE + 1; // 52 judgment + 1 verdict
916
+ // With maxDepth === totalNodes, trail.length never exceeds it → completes successfully
917
+ const configPass = { ...buildDeepLinearDAG(ST_R6_DEEP_TREE_SIZE), maxDepth: totalNodes };
918
+ const responsesPass = Array.from({ length: ST_R6_DEEP_TREE_SIZE }, () => 'true');
919
+ const resultPass = await dagEval(createMockLLM(responsesPass), configPass, BASE_TEST_CASE);
920
+ assert.ok(resultPass.score >= DAG_NORMALIZED_MIN && resultPass.score <= DAG_NORMALIZED_MAX, `score ${resultPass.score} out of [0,1] at exact maxDepth boundary`);
921
+ // With maxDepth === totalNodes - 1 (= ST_R6_DEEP_TREE_SIZE), the verdict push makes trail.length = N+1 > N → throws
922
+ const configFail = { ...buildDeepLinearDAG(ST_R6_DEEP_TREE_SIZE), maxDepth: ST_R6_DEEP_TREE_SIZE };
923
+ const responsesFail = Array.from({ length: ST_R6_DEEP_TREE_SIZE }, () => 'true');
924
+ await assert.rejects(dagEval(createMockLLM(responsesFail), configFail, BASE_TEST_CASE), /maxDepth/i, 'should throw when traversal exceeds maxDepth by exactly 1');
925
+ });
926
+ it('cyclic graph at scale: validateDAGConfig throws for a cycle in a large graph', () => {
927
+ // Build a long chain, then create a back-edge to simulate a cycle at scale
928
+ const nodes = new Map();
929
+ for (let i = 0; i < ST_R6_CYCLE_SIZE; i++) {
930
+ const nextId = i < ST_R6_CYCLE_SIZE - 1 ? `node-${i + 1}` : 'node-0'; // back-edge at end
931
+ const judgeNode = {
932
+ type: 'binary_judgement',
933
+ criteria: `Check ${i}`,
934
+ trueChild: nextId,
935
+ falseChild: nextId, // both branches continue chain
936
+ };
937
+ nodes.set(`node-${i}`, judgeNode);
938
+ }
939
+ const config = { name: 'cyclic-large', nodes, rootId: 'node-0' };
940
+ assert.throws(() => validateDAGConfig(config), /cycle/i, 'should reject cyclic graph at scale');
941
+ });
942
+ it('score normalization: all verdict scores are clamped to [0, 1] regardless of raw score value', async () => {
943
+ // Verdict with score=10 → normalized 1.0
944
+ const verdictMax = { type: 'verdict', score: 10, label: 'max' };
945
+ // Verdict with score=0 → normalized 0.0
946
+ const verdictMin = { type: 'verdict', score: 0, label: 'min' };
947
+ const rootNode = {
948
+ type: 'binary_judgement',
949
+ criteria: 'check',
950
+ trueChild: 'verdict-max',
951
+ falseChild: 'verdict-min',
952
+ };
953
+ const configMax = {
954
+ name: 'score-max',
955
+ nodes: new Map([['root', rootNode], ['verdict-max', verdictMax], ['verdict-min', verdictMin]]),
956
+ rootId: 'root',
957
+ };
958
+ const resultMax = await dagEval(createMockLLM(['true']), configMax, BASE_TEST_CASE);
959
+ const resultMin = await dagEval(createMockLLM(['false']), configMax, BASE_TEST_CASE);
960
+ assert.ok(Math.abs(resultMax.score - 1.0) < FLOAT_TOLERANCE, `score should be 1.0, got ${resultMax.score}`);
961
+ assert.ok(Math.abs(resultMin.score - 0.0) < FLOAT_TOLERANCE, `score should be 0.0, got ${resultMin.score}`);
962
+ });
963
+ it('score normalization stability: 50 traversals on a 50+-node tree all produce scores in [0,1]', async () => {
964
+ const config = buildDeepLinearDAG(ST_R6_DEEP_TREE_SIZE);
965
+ for (let trial = 0; trial < 50; trial++) {
966
+ // Random binary responses — each traversal takes a different path through the tree
967
+ const responses = Array.from({ length: ST_R6_DEEP_TREE_SIZE }, () => Math.random() > 0.5 ? 'true' : 'false');
968
+ const result = await dagEval(createMockLLM(responses), config, BASE_TEST_CASE);
969
+ assert.ok(result.score >= DAG_NORMALIZED_MIN && result.score <= DAG_NORMALIZED_MAX, `trial ${trial}: score ${result.score} out of [0,1]`);
970
+ }
971
+ });
972
+ });
973
+ //# sourceMappingURL=llm-judge-dag.test.js.map