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
@@ -1,5 +1,10 @@
1
- import { describe, it, beforeEach, afterEach } from 'node:test';
1
+ import { describe, it, beforeEach, afterEach } from 'vitest';
2
2
  import assert from 'node:assert';
3
+ import { FLOAT_TOLERANCE } from '../../test-helpers/test-data-builders.js';
4
+ import { DEFAULT_LIMIT_10, SAMPLE_SIZE_100, COUNT_FOUR, COUNT_FIFTEEN, COUNT_FIVE, COUNT_NINE, COUNT_SIX, COUNT_THREE, COUNT_TWO, VALUE_FORTY_TWO, } from '../../test-helpers/test-constants.js';
5
+ import { MAX_RESULTS_IN_MEMORY, RETENTION_DAYS_DEFAULT, STREAMING_THRESHOLD, } from './constants.js';
6
+ import { TIME_MS, } from './units.js';
7
+ import { ESTIMATED_SIZE_MAX_BYTES, ESTIMATED_SIZE_MIN_BYTES, LARGE_ARRAY_SAMPLE_SIZE, LARGE_JSONL_LINE_COUNT, LARGE_RESERVOIR_DATASET_SIZE, LARGE_RESERVOIR_P50_EXPECTED, LARGE_RESERVOIR_P95_EXPECTED, LARGE_RESERVOIR_SUM_UPPER_TERM, MIXED_ARRAY_CIRCULAR_ITEMS, MIXED_ARRAY_NORMAL_ITEMS, MOSTLY_CIRCULAR_ITEMS, MOSTLY_CIRCULAR_NORMAL_ITEMS, PERCENTILE_P50_EXPECTED, PERCENTILE_P95_EXPECTED, PERCENTILE_P99_EXPECTED, PERCENTILE_TEST_SAMPLE_SIZE, RESULT_COUNT_EIGHT, RESULT_COUNT_TEN, NUMERIC_SEQUENCE_FIVE_TWO_EIGHT, NUMERIC_SEQUENCE_NEGATIVE_TEN_TO_TEN, NUMERIC_SEQUENCE_ONE_TO_FIVE, NUMERIC_SEQUENCE_ONE_TO_TEN, NUMERIC_SEQUENCE_ONE_TO_THREE, NUMERIC_SEQUENCE_TEN_TWENTY_THIRTY, RELATIVE_ERROR_TEN_PERCENT, STREAMING_COUNT_CUSTOM_HIGH, STREAMING_COUNT_CUSTOM_LOW, STREAMING_COUNT_CUSTOM_THRESHOLD, STREAMING_COUNT_DEFAULT_THRESHOLD, WINDOW_LIMIT_FIVE, WINDOW_LIMIT_TEN, WINDOW_LIMIT_THREE, WINDOW_OFFSET_TWO, } from './file-utils.test-constants.js';
3
8
  import * as fs from 'fs';
4
9
  import * as path from 'path';
5
10
  import * as os from 'os';
@@ -41,7 +46,7 @@ describe('file-utils', () => {
41
46
  });
42
47
  describe('loadJson', () => {
43
48
  it('should load and parse valid JSON file', () => {
44
- const testData = { key: 'value', num: 42 };
49
+ const testData = { key: 'value', num: VALUE_FORTY_TWO };
45
50
  const filePath = path.join(testDir, 'test.json');
46
51
  fs.writeFileSync(filePath, JSON.stringify(testData));
47
52
  const result = loadJson(filePath);
@@ -78,7 +83,7 @@ describe('file-utils', () => {
78
83
  it('should parse complex nested JSON', () => {
79
84
  const testData = {
80
85
  nested: { deep: { value: 'test' } },
81
- array: [1, 2, 3],
86
+ array: [1, COUNT_TWO, COUNT_THREE],
82
87
  };
83
88
  const filePath = path.join(testDir, 'complex.json');
84
89
  fs.writeFileSync(filePath, JSON.stringify(testData));
@@ -152,7 +157,7 @@ describe('file-utils', () => {
152
157
  fs.writeFileSync(path.join(testDir, 'file3.txt'), 'text');
153
158
  fs.writeFileSync(path.join(testDir, 'file4.json'), '{}');
154
159
  const result = listFiles(testDir, /\.json$/);
155
- assert.strictEqual(result.length, 3);
160
+ assert.strictEqual(result.length, COUNT_THREE);
156
161
  assert(result.every(f => f.endsWith('.json')));
157
162
  });
158
163
  it('should return full paths', () => {
@@ -168,9 +173,9 @@ describe('file-utils', () => {
168
173
  const file3 = path.join(testDir, 'file3.json');
169
174
  fs.writeFileSync(file1, '{}');
170
175
  // Small delay to ensure different mtimes
171
- await new Promise(resolve => setTimeout(resolve, 50));
176
+ await new Promise(resolve => setTimeout(resolve, STREAMING_COUNT_CUSTOM_LOW));
172
177
  fs.writeFileSync(file2, '{}');
173
- await new Promise(resolve => setTimeout(resolve, 50));
178
+ await new Promise(resolve => setTimeout(resolve, STREAMING_COUNT_CUSTOM_LOW));
174
179
  fs.writeFileSync(file3, '{}');
175
180
  const result = listFiles(testDir, /\.json$/);
176
181
  assert.strictEqual(result[0], file3); // newest first
@@ -187,7 +192,7 @@ describe('file-utils', () => {
187
192
  fs.writeFileSync(path.join(testDir, 'logs-2026-01-28.jsonl'), '{}');
188
193
  fs.writeFileSync(path.join(testDir, 'other.txt'), 'text');
189
194
  const result = listFiles(testDir, /^\w+-\d{4}-\d{2}-\d{2}\.jsonl$/);
190
- assert.strictEqual(result.length, 3);
195
+ assert.strictEqual(result.length, COUNT_THREE);
191
196
  });
192
197
  });
193
198
  describe('parseDateFromFilename', () => {
@@ -265,7 +270,7 @@ describe('file-utils', () => {
265
270
  const filePath = path.join(testDir, 'test.jsonl');
266
271
  fs.writeFileSync(filePath, '{"id":1,"name":"first"}\n{"id":2,"name":"second"}\n{"id":3,"name":"third"}');
267
272
  const result = readJsonlSync(filePath);
268
- assert.strictEqual(result.length, 3);
273
+ assert.strictEqual(result.length, COUNT_THREE);
269
274
  assert.deepStrictEqual(result[0], { id: 1, name: 'first' });
270
275
  assert.deepStrictEqual(result[1], { id: 2, name: 'second' });
271
276
  assert.deepStrictEqual(result[2], { id: 3, name: 'third' });
@@ -274,34 +279,34 @@ describe('file-utils', () => {
274
279
  const filePath = path.join(testDir, 'test.jsonl');
275
280
  fs.writeFileSync(filePath, '{"id":1}\n\n{"id":2}\n \n{"id":3}');
276
281
  const result = readJsonlSync(filePath);
277
- assert.strictEqual(result.length, 3);
282
+ assert.strictEqual(result.length, COUNT_THREE);
278
283
  });
279
284
  it('should skip malformed JSON lines', () => {
280
285
  const filePath = path.join(testDir, 'test.jsonl');
281
286
  fs.writeFileSync(filePath, '{"id":1}\n{invalid json}\n{"id":2}');
282
287
  const result = readJsonlSync(filePath);
283
- assert.strictEqual(result.length, 2);
288
+ assert.strictEqual(result.length, COUNT_TWO);
284
289
  assert.deepStrictEqual(result[0], { id: 1 });
285
290
  assert.deepStrictEqual(result[1], { id: 2 });
286
291
  });
287
292
  it('should respect limit parameter', () => {
288
293
  const filePath = path.join(testDir, 'test.jsonl');
289
294
  fs.writeFileSync(filePath, '{"id":1}\n{"id":2}\n{"id":3}\n{"id":4}\n{"id":5}');
290
- const result = readJsonlSync(filePath, 3);
291
- assert.strictEqual(result.length, 3);
295
+ const result = readJsonlSync(filePath, COUNT_THREE);
296
+ assert.strictEqual(result.length, COUNT_THREE);
292
297
  });
293
298
  it('should stop reading at limit even with more lines', () => {
294
299
  const filePath = path.join(testDir, 'test.jsonl');
295
300
  fs.writeFileSync(filePath, '{"id":1}\n{"id":2}\n{"id":3}\n{"id":4}');
296
- const result = readJsonlSync(filePath, 2);
297
- assert.strictEqual(result.length, 2);
301
+ const result = readJsonlSync(filePath, COUNT_TWO);
302
+ assert.strictEqual(result.length, COUNT_TWO);
298
303
  assert.deepStrictEqual(result[1], { id: 2 });
299
304
  });
300
305
  it('should handle file with trailing whitespace', () => {
301
306
  const filePath = path.join(testDir, 'test.jsonl');
302
307
  fs.writeFileSync(filePath, '{"id":1}\n{"id":2}\n ');
303
308
  const result = readJsonlSync(filePath);
304
- assert.strictEqual(result.length, 2);
309
+ assert.strictEqual(result.length, COUNT_TWO);
305
310
  });
306
311
  it('should handle single line file', () => {
307
312
  const filePath = path.join(testDir, 'test.jsonl');
@@ -315,7 +320,7 @@ describe('file-utils', () => {
315
320
  fs.writeFileSync(filePath, '{"nested":{"deep":{"value":1}}}\n{"array":[1,2,3]}');
316
321
  const result = readJsonlSync(filePath);
317
322
  assert.deepStrictEqual(result[0], { nested: { deep: { value: 1 } } });
318
- assert.deepStrictEqual(result[1], { array: [1, 2, 3] });
323
+ assert.deepStrictEqual(result[1], { array: [1, COUNT_TWO, COUNT_THREE] });
319
324
  });
320
325
  });
321
326
  describe('isGzipFile', () => {
@@ -373,7 +378,7 @@ describe('file-utils', () => {
373
378
  for await (const item of streamJsonl(filePath)) {
374
379
  results.push(item);
375
380
  }
376
- assert.strictEqual(results.length, 3);
381
+ assert.strictEqual(results.length, COUNT_THREE);
377
382
  assert.deepStrictEqual(results[0], { id: 1 });
378
383
  assert.deepStrictEqual(results[1], { id: 2 });
379
384
  assert.deepStrictEqual(results[2], { id: 3 });
@@ -385,7 +390,7 @@ describe('file-utils', () => {
385
390
  for await (const item of streamJsonl(filePath)) {
386
391
  results.push(item);
387
392
  }
388
- assert.strictEqual(results.length, 2);
393
+ assert.strictEqual(results.length, COUNT_TWO);
389
394
  });
390
395
  it('should skip malformed JSON lines', async () => {
391
396
  const filePath = path.join(testDir, 'test.jsonl');
@@ -394,19 +399,19 @@ describe('file-utils', () => {
394
399
  for await (const item of streamJsonl(filePath)) {
395
400
  results.push(item);
396
401
  }
397
- assert.strictEqual(results.length, 2);
402
+ assert.strictEqual(results.length, COUNT_TWO);
398
403
  assert.deepStrictEqual(results[0], { id: 1 });
399
404
  assert.deepStrictEqual(results[1], { id: 2 });
400
405
  });
401
406
  it('should handle large JSONL files efficiently', async () => {
402
407
  const filePath = path.join(testDir, 'large.jsonl');
403
- const lines = Array.from({ length: 1000 }, (_, i) => JSON.stringify({ id: i })).join('\n');
408
+ const lines = Array.from({ length: LARGE_JSONL_LINE_COUNT }, (_, i) => JSON.stringify({ id: i })).join('\n');
404
409
  fs.writeFileSync(filePath, lines);
405
410
  let count = 0;
406
411
  for await (const _item of streamJsonl(filePath)) {
407
412
  count++;
408
413
  }
409
- assert.strictEqual(count, 1000);
414
+ assert.strictEqual(count, LARGE_JSONL_LINE_COUNT);
410
415
  });
411
416
  it('should stream gzipped JSONL file', async () => {
412
417
  const filePath = path.join(testDir, 'test.jsonl.gz');
@@ -416,7 +421,7 @@ describe('file-utils', () => {
416
421
  for await (const item of streamJsonl(filePath)) {
417
422
  results.push(item);
418
423
  }
419
- assert.strictEqual(results.length, 3);
424
+ assert.strictEqual(results.length, COUNT_THREE);
420
425
  assert.deepStrictEqual(results[0], { id: 1 });
421
426
  assert.deepStrictEqual(results[1], { id: 2 });
422
427
  assert.deepStrictEqual(results[2], { id: 3 });
@@ -429,10 +434,40 @@ describe('file-utils', () => {
429
434
  for await (const item of streamJsonl(filePath)) {
430
435
  results.push(item);
431
436
  }
432
- assert.strictEqual(results.length, 2);
437
+ assert.strictEqual(results.length, COUNT_TWO);
433
438
  assert.deepStrictEqual(results[0], { id: 1 });
434
439
  assert.deepStrictEqual(results[1], { id: 2 });
435
440
  });
441
+ it('should track parse stats when statsTracker is provided', async () => {
442
+ const filePath = path.join(testDir, 'test.jsonl');
443
+ // 2 valid, 1 invalid, 2 empty
444
+ fs.writeFileSync(filePath, '{"id":1}\n\n{invalid}\n \n{"id":2}');
445
+ const tracker = {
446
+ successes: 0,
447
+ failures: 0,
448
+ empties: 0,
449
+ recordSuccess(_path) { this.successes++; },
450
+ recordFailure(_path) { this.failures++; },
451
+ recordEmpty(_path) { this.empties++; },
452
+ };
453
+ const results = [];
454
+ for await (const item of streamJsonl(filePath, { statsTracker: tracker })) {
455
+ results.push(item);
456
+ }
457
+ assert.strictEqual(results.length, COUNT_TWO);
458
+ assert.strictEqual(tracker.successes, COUNT_TWO);
459
+ assert.strictEqual(tracker.failures, 1);
460
+ assert.strictEqual(tracker.empties, COUNT_TWO);
461
+ });
462
+ it('should work without statsTracker (backward compatible)', async () => {
463
+ const filePath = path.join(testDir, 'test.jsonl');
464
+ fs.writeFileSync(filePath, '{"id":1}\n{"id":2}');
465
+ const results = [];
466
+ for await (const item of streamJsonl(filePath)) {
467
+ results.push(item);
468
+ }
469
+ assert.strictEqual(results.length, COUNT_TWO);
470
+ });
436
471
  });
437
472
  describe('filterByDateRange', () => {
438
473
  const items = [
@@ -443,31 +478,31 @@ describe('file-utils', () => {
443
478
  ];
444
479
  it('should return all items if no date range specified', () => {
445
480
  const result = filterByDateRange(items);
446
- assert.strictEqual(result.length, 4);
481
+ assert.strictEqual(result.length, WINDOW_LIMIT_FIVE - 1);
447
482
  });
448
483
  it('should filter items after startDate', () => {
449
484
  const result = filterByDateRange(items, '2026-01-15');
450
- assert.strictEqual(result.length, 3);
485
+ assert.strictEqual(result.length, COUNT_THREE);
451
486
  assert.deepStrictEqual(result[0], { id: 2, timestamp: '2026-01-15' });
452
487
  });
453
488
  it('should filter items before endDate', () => {
454
489
  const result = filterByDateRange(items, undefined, '2026-01-20');
455
- assert.strictEqual(result.length, 3);
490
+ assert.strictEqual(result.length, COUNT_THREE);
456
491
  assert.deepStrictEqual(result[2], { id: 3, timestamp: '2026-01-20' });
457
492
  });
458
493
  it('should filter items between startDate and endDate', () => {
459
494
  const result = filterByDateRange(items, '2026-01-12', '2026-01-22');
460
- assert.strictEqual(result.length, 2);
495
+ assert.strictEqual(result.length, COUNT_TWO);
461
496
  assert.deepStrictEqual(result[0], { id: 2, timestamp: '2026-01-15' });
462
497
  assert.deepStrictEqual(result[1], { id: 3, timestamp: '2026-01-20' });
463
498
  });
464
499
  it('should include items with exact startDate', () => {
465
500
  const result = filterByDateRange(items, '2026-01-15');
466
- assert(result.some(item => item.id === 2));
501
+ assert(result.some(item => item.id === COUNT_TWO));
467
502
  });
468
503
  it('should include items with exact endDate', () => {
469
504
  const result = filterByDateRange(items, undefined, '2026-01-15');
470
- assert(result.some(item => item.id === 2));
505
+ assert(result.some(item => item.id === COUNT_TWO));
471
506
  });
472
507
  it('should include items without timestamp', () => {
473
508
  const itemsWithoutTs = [
@@ -476,8 +511,8 @@ describe('file-utils', () => {
476
511
  { id: 3, timestamp: '2026-01-20' },
477
512
  ];
478
513
  const result = filterByDateRange(itemsWithoutTs, '2026-01-15');
479
- assert.strictEqual(result.length, 2);
480
- assert(result.some(item => item.id === 2));
514
+ assert.strictEqual(result.length, COUNT_TWO);
515
+ assert(result.some(item => item.id === COUNT_TWO));
481
516
  });
482
517
  it('should return empty array if no items in range', () => {
483
518
  const result = filterByDateRange(items, '2026-02-01', '2026-02-28');
@@ -496,7 +531,7 @@ describe('file-utils', () => {
496
531
  // Note: filterByDateRange uses lexicographic comparison
497
532
  // '2026-01-15T...' > '2026-01-15' due to 'T', so use end of day
498
533
  const result = filterByDateRange(itemsWithTime, '2026-01-15', '2026-01-15T23:59:59');
499
- assert.strictEqual(result.length, 2);
534
+ assert.strictEqual(result.length, COUNT_TWO);
500
535
  });
501
536
  it('should handle lexicographic string comparison correctly', () => {
502
537
  const itemsWithDates = [
@@ -505,7 +540,7 @@ describe('file-utils', () => {
505
540
  { id: 3, timestamp: '2026-10-01' },
506
541
  ];
507
542
  const result = filterByDateRange(itemsWithDates, '2026-02-01', '2026-10-01');
508
- assert.strictEqual(result.length, 2);
543
+ assert.strictEqual(result.length, COUNT_TWO);
509
544
  });
510
545
  it('should handle generic type with optional timestamp', () => {
511
546
  const customItems = [
@@ -513,60 +548,60 @@ describe('file-utils', () => {
513
548
  { name: 'item2' },
514
549
  ];
515
550
  const result = filterByDateRange(customItems, '2026-01-09', '2026-01-11');
516
- assert.strictEqual(result.length, 2);
551
+ assert.strictEqual(result.length, COUNT_TWO);
517
552
  });
518
553
  });
519
554
  describe('paginateResults', () => {
520
- const items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
555
+ const items = NUMERIC_SEQUENCE_ONE_TO_TEN;
521
556
  it('should return items from offset to offset + limit', () => {
522
- const result = paginateResults(items, 2, 3);
523
- assert.deepStrictEqual(result, [3, 4, 5]);
557
+ const result = paginateResults(items, WINDOW_OFFSET_TWO, WINDOW_LIMIT_THREE);
558
+ assert.deepStrictEqual(result, NUMERIC_SEQUENCE_ONE_TO_TEN.slice(WINDOW_LIMIT_THREE - 1, COUNT_SIX - 1));
524
559
  });
525
560
  it('should return from start when offset is 0', () => {
526
- const result = paginateResults(items, 0, 5);
527
- assert.deepStrictEqual(result, [1, 2, 3, 4, 5]);
561
+ const result = paginateResults(items, 0, WINDOW_LIMIT_FIVE);
562
+ assert.deepStrictEqual(result, NUMERIC_SEQUENCE_ONE_TO_FIVE);
528
563
  });
529
564
  it('should handle offset at end of array', () => {
530
- const result = paginateResults(items, 8, 5);
531
- assert.deepStrictEqual(result, [9, 10]);
565
+ const result = paginateResults(items, RESULT_COUNT_EIGHT, WINDOW_LIMIT_FIVE);
566
+ assert.deepStrictEqual(result, [COUNT_NINE, DEFAULT_LIMIT_10]);
532
567
  });
533
568
  it('should return empty array when offset exceeds length', () => {
534
- const result = paginateResults(items, 15, 5);
569
+ const result = paginateResults(items, COUNT_FIFTEEN, WINDOW_LIMIT_FIVE);
535
570
  assert.deepStrictEqual(result, []);
536
571
  });
537
572
  it('should handle limit larger than remaining items', () => {
538
- const result = paginateResults(items, 7, 10);
539
- assert.deepStrictEqual(result, [8, 9, 10]);
573
+ const result = paginateResults(items, COUNT_SIX + 1, WINDOW_LIMIT_TEN);
574
+ assert.deepStrictEqual(result, [RESULT_COUNT_EIGHT, COUNT_NINE, DEFAULT_LIMIT_10]);
540
575
  });
541
576
  it('should handle empty array', () => {
542
- const result = paginateResults([], 0, 10);
577
+ const result = paginateResults([], 0, WINDOW_LIMIT_TEN);
543
578
  assert.deepStrictEqual(result, []);
544
579
  });
545
580
  it('should work with object arrays', () => {
546
- const objs = [{ id: 1 }, { id: 2 }, { id: 3 }];
547
- const result = paginateResults(objs, 1, 2);
548
- assert.deepStrictEqual(result, [{ id: 2 }, { id: 3 }]);
581
+ const objs = NUMERIC_SEQUENCE_ONE_TO_THREE.map((id) => ({ id }));
582
+ const result = paginateResults(objs, 1, WINDOW_OFFSET_TWO);
583
+ assert.deepStrictEqual(result, objs.slice(1));
549
584
  });
550
585
  });
551
586
  describe('hasReachedLimit', () => {
552
587
  it('should return true when results equal offset + limit', () => {
553
- const result = hasReachedLimit(10, 5, 5);
588
+ const result = hasReachedLimit(RESULT_COUNT_TEN, WINDOW_LIMIT_FIVE, WINDOW_LIMIT_FIVE);
554
589
  assert.strictEqual(result, true);
555
590
  });
556
591
  it('should return true when results exceed offset + limit', () => {
557
- const result = hasReachedLimit(15, 5, 5);
592
+ const result = hasReachedLimit(COUNT_FIFTEEN, WINDOW_LIMIT_FIVE, WINDOW_LIMIT_FIVE);
558
593
  assert.strictEqual(result, true);
559
594
  });
560
595
  it('should return false when results are less than offset + limit', () => {
561
- const result = hasReachedLimit(8, 5, 5);
596
+ const result = hasReachedLimit(RESULT_COUNT_EIGHT, WINDOW_LIMIT_FIVE, WINDOW_LIMIT_FIVE);
562
597
  assert.strictEqual(result, false);
563
598
  });
564
599
  it('should return false with zero results', () => {
565
- const result = hasReachedLimit(0, 0, 10);
600
+ const result = hasReachedLimit(0, 0, WINDOW_LIMIT_TEN);
566
601
  assert.strictEqual(result, false);
567
602
  });
568
603
  it('should handle zero offset', () => {
569
- const result = hasReachedLimit(10, 0, 10);
604
+ const result = hasReachedLimit(RESULT_COUNT_TEN, 0, WINDOW_LIMIT_TEN);
570
605
  assert.strictEqual(result, true);
571
606
  });
572
607
  });
@@ -577,9 +612,9 @@ describe('file-utils', () => {
577
612
  const result = readJsonlSyncWithStats(filePath);
578
613
  assert.ok('data' in result);
579
614
  assert.ok('stats' in result);
580
- assert.strictEqual(result.data.length, 3);
581
- assert.strictEqual(result.stats.totalLines, 3);
582
- assert.strictEqual(result.stats.parsedLines, 3);
615
+ assert.strictEqual(result.data.length, COUNT_THREE);
616
+ assert.strictEqual(result.stats.totalLines, COUNT_THREE);
617
+ assert.strictEqual(result.stats.parsedLines, COUNT_THREE);
583
618
  assert.strictEqual(result.stats.skippedLines, 0);
584
619
  assert.strictEqual(result.stats.emptyLines, 0);
585
620
  });
@@ -587,24 +622,24 @@ describe('file-utils', () => {
587
622
  const filePath = path.join(testDir, 'test.jsonl');
588
623
  fs.writeFileSync(filePath, '{"id":1}\n{invalid json}\n{"id":2}\n{also invalid}');
589
624
  const result = readJsonlSyncWithStats(filePath);
590
- assert.strictEqual(result.data.length, 2);
591
- assert.strictEqual(result.stats.parsedLines, 2);
592
- assert.strictEqual(result.stats.skippedLines, 2);
625
+ assert.strictEqual(result.data.length, COUNT_TWO);
626
+ assert.strictEqual(result.stats.parsedLines, COUNT_TWO);
627
+ assert.strictEqual(result.stats.skippedLines, COUNT_TWO);
593
628
  });
594
629
  it('should count empty lines', () => {
595
630
  const filePath = path.join(testDir, 'test.jsonl');
596
631
  // Note: trailing empty lines are removed by trim(), so only internal empty lines are counted
597
632
  fs.writeFileSync(filePath, '{"id":1}\n\n \n{"id":2}');
598
633
  const result = readJsonlSyncWithStats(filePath);
599
- assert.strictEqual(result.data.length, 2);
600
- assert.strictEqual(result.stats.emptyLines, 2);
634
+ assert.strictEqual(result.data.length, COUNT_TWO);
635
+ assert.strictEqual(result.stats.emptyLines, COUNT_TWO);
601
636
  });
602
637
  it('should respect limit parameter', () => {
603
638
  const filePath = path.join(testDir, 'test.jsonl');
604
639
  fs.writeFileSync(filePath, '{"id":1}\n{"id":2}\n{"id":3}\n{"id":4}\n{"id":5}');
605
- const result = readJsonlSyncWithStats(filePath, 3);
606
- assert.strictEqual(result.data.length, 3);
607
- assert.strictEqual(result.stats.parsedLines, 3);
640
+ const result = readJsonlSyncWithStats(filePath, COUNT_THREE);
641
+ assert.strictEqual(result.data.length, COUNT_THREE);
642
+ assert.strictEqual(result.stats.parsedLines, COUNT_THREE);
608
643
  });
609
644
  it('should return empty stats for non-existent file', () => {
610
645
  const result = readJsonlSyncWithStats(path.join(testDir, 'nonexistent.jsonl'));
@@ -616,11 +651,11 @@ describe('file-utils', () => {
616
651
  const filePath = path.join(testDir, 'test.jsonl');
617
652
  fs.writeFileSync(filePath, '{"id":1}\n\n{bad}\n{"id":2}\n \n{invalid}\n{"id":3}');
618
653
  const result = readJsonlSyncWithStats(filePath);
619
- assert.strictEqual(result.data.length, 3);
620
- assert.strictEqual(result.stats.totalLines, 7);
621
- assert.strictEqual(result.stats.parsedLines, 3);
622
- assert.strictEqual(result.stats.skippedLines, 2);
623
- assert.strictEqual(result.stats.emptyLines, 2);
654
+ assert.strictEqual(result.data.length, COUNT_THREE);
655
+ assert.strictEqual(result.stats.totalLines, COUNT_FIVE + COUNT_TWO);
656
+ assert.strictEqual(result.stats.parsedLines, COUNT_THREE);
657
+ assert.strictEqual(result.stats.skippedLines, COUNT_TWO);
658
+ assert.strictEqual(result.stats.emptyLines, COUNT_TWO);
624
659
  });
625
660
  });
626
661
  describe('cleanupOldFiles', () => {
@@ -636,8 +671,8 @@ describe('file-utils', () => {
636
671
  fs.writeFileSync(path.join(testDir, `traces-${oldDate}.jsonl`), '{}');
637
672
  fs.writeFileSync(path.join(testDir, `logs-${oldDate}.jsonl`), '{}');
638
673
  fs.writeFileSync(path.join(testDir, `traces-${recentDate}.jsonl`), '{}');
639
- const result = cleanupOldFiles(testDir, 7);
640
- assert.strictEqual(result.deleted, 2);
674
+ const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
675
+ assert.strictEqual(result.deleted, COUNT_TWO);
641
676
  assert.deepStrictEqual(result.errors, []);
642
677
  // Verify old files are deleted
643
678
  assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${oldDate}.jsonl`)), false);
@@ -647,17 +682,17 @@ describe('file-utils', () => {
647
682
  });
648
683
  it('should not delete files within retention period', () => {
649
684
  const today = new Date();
650
- const yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000);
685
+ const yesterday = new Date(today.getTime() - TIME_MS.DAY);
651
686
  const yesterdayStr = yesterday.toISOString().split('T')[0];
652
687
  fs.writeFileSync(path.join(testDir, `traces-${yesterdayStr}.jsonl`), '{}');
653
- const result = cleanupOldFiles(testDir, 7);
688
+ const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
654
689
  assert.strictEqual(result.deleted, 0);
655
690
  assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${yesterdayStr}.jsonl`)), true);
656
691
  });
657
692
  it('should skip files without parseable dates', () => {
658
693
  fs.writeFileSync(path.join(testDir, 'some-random-file.jsonl'), '{}');
659
694
  fs.writeFileSync(path.join(testDir, 'no-date.jsonl'), '{}');
660
- const result = cleanupOldFiles(testDir, 7);
695
+ const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
661
696
  assert.strictEqual(result.deleted, 0);
662
697
  assert.strictEqual(fs.existsSync(path.join(testDir, 'some-random-file.jsonl')), true);
663
698
  assert.strictEqual(fs.existsSync(path.join(testDir, 'no-date.jsonl')), true);
@@ -667,7 +702,7 @@ describe('file-utils', () => {
667
702
  fs.writeFileSync(path.join(testDir, `traces-${oldDate}.jsonl`), '{}');
668
703
  fs.writeFileSync(path.join(testDir, `traces-${oldDate}.json`), '{}');
669
704
  fs.writeFileSync(path.join(testDir, `traces-${oldDate}.txt`), 'text');
670
- const result = cleanupOldFiles(testDir, 7);
705
+ const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
671
706
  assert.strictEqual(result.deleted, 1);
672
707
  // Only .jsonl file should be deleted
673
708
  assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${oldDate}.jsonl`)), false);
@@ -677,20 +712,20 @@ describe('file-utils', () => {
677
712
  it('should respect custom retention period', () => {
678
713
  const today = new Date();
679
714
  // Create file from 5 days ago
680
- const fiveDaysAgo = new Date(today.getTime() - 5 * 24 * 60 * 60 * 1000);
715
+ const fiveDaysAgo = new Date(today.getTime() - COUNT_FIVE * TIME_MS.DAY);
681
716
  const fiveDaysAgoStr = fiveDaysAgo.toISOString().split('T')[0];
682
717
  fs.writeFileSync(path.join(testDir, `traces-${fiveDaysAgoStr}.jsonl`), '{}');
683
718
  // With 7 day retention, file should be kept
684
- let result = cleanupOldFiles(testDir, 7);
719
+ let result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
685
720
  assert.strictEqual(result.deleted, 0);
686
721
  assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${fiveDaysAgoStr}.jsonl`)), true);
687
722
  // With 3 day retention, file should be deleted
688
- result = cleanupOldFiles(testDir, 3);
723
+ result = cleanupOldFiles(testDir, COUNT_THREE);
689
724
  assert.strictEqual(result.deleted, 1);
690
725
  assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${fiveDaysAgoStr}.jsonl`)), false);
691
726
  });
692
727
  it('should handle empty directory', () => {
693
- const result = cleanupOldFiles(testDir, 7);
728
+ const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
694
729
  assert.strictEqual(result.deleted, 0);
695
730
  assert.deepStrictEqual(result.errors, []);
696
731
  });
@@ -698,7 +733,7 @@ describe('file-utils', () => {
698
733
  const outsideDir = fs.mkdtempSync(path.join(os.tmpdir(), 'outside-'));
699
734
  try {
700
735
  fs.writeFileSync(path.join(outsideDir, 'traces-2020-01-01.jsonl'), '{}');
701
- const result = cleanupOldFiles(outsideDir, 7, [testDir]);
736
+ const result = cleanupOldFiles(outsideDir, RETENTION_DAYS_DEFAULT, [testDir]);
702
737
  assert.strictEqual(result.deleted, 0);
703
738
  assert.strictEqual(result.errors.length, 1);
704
739
  assert(result.errors[0].includes('not within allowed paths'));
@@ -713,7 +748,7 @@ describe('file-utils', () => {
713
748
  const subDir = path.join(testDir, 'subdir');
714
749
  fs.mkdirSync(subDir);
715
750
  fs.writeFileSync(path.join(subDir, 'traces-2020-01-01.jsonl'), '{}');
716
- const result = cleanupOldFiles(subDir, 7, [testDir]);
751
+ const result = cleanupOldFiles(subDir, RETENTION_DAYS_DEFAULT, [testDir]);
717
752
  assert.strictEqual(result.deleted, 1);
718
753
  assert.deepStrictEqual(result.errors, []);
719
754
  });
@@ -722,17 +757,17 @@ describe('file-utils', () => {
722
757
  fs.writeFileSync(path.join(testDir, `traces-${oldDate}.jsonl`), '{}');
723
758
  fs.writeFileSync(path.join(testDir, `logs-${oldDate}.jsonl`), '{}');
724
759
  fs.writeFileSync(path.join(testDir, `metrics-${oldDate}.jsonl`), '{}');
725
- const result = cleanupOldFiles(testDir, 7);
726
- assert.strictEqual(result.deleted, 3);
760
+ const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
761
+ assert.strictEqual(result.deleted, COUNT_THREE);
727
762
  assert.deepStrictEqual(result.errors, []);
728
763
  });
729
764
  it('should use default retention of 7 days', () => {
730
765
  const today = new Date();
731
766
  // Create file from 8 days ago
732
- const eightDaysAgo = new Date(today.getTime() - 8 * 24 * 60 * 60 * 1000);
767
+ const eightDaysAgo = new Date(today.getTime() - RESULT_COUNT_EIGHT * TIME_MS.DAY);
733
768
  const eightDaysAgoStr = eightDaysAgo.toISOString().split('T')[0];
734
- // Create file from 6 days ago
735
- const sixDaysAgo = new Date(today.getTime() - 6 * 24 * 60 * 60 * 1000);
769
+ // Create file from COUNT_SIX days ago
770
+ const sixDaysAgo = new Date(today.getTime() - COUNT_SIX * TIME_MS.DAY);
736
771
  const sixDaysAgoStr = sixDaysAgo.toISOString().split('T')[0];
737
772
  fs.writeFileSync(path.join(testDir, `traces-${eightDaysAgoStr}.jsonl`), '{}');
738
773
  fs.writeFileSync(path.join(testDir, `traces-${sixDaysAgoStr}.jsonl`), '{}');
@@ -748,8 +783,8 @@ describe('file-utils', () => {
748
783
  fs.writeFileSync(path.join(testDir, `traces-${oldDate}.jsonl.gz`), gzipSync('{}'));
749
784
  fs.writeFileSync(path.join(testDir, `logs-${oldDate}.jsonl.gz`), gzipSync('{}'));
750
785
  fs.writeFileSync(path.join(testDir, `traces-${recentDate}.jsonl.gz`), gzipSync('{}'));
751
- const result = cleanupOldFiles(testDir, 7);
752
- assert.strictEqual(result.deleted, 2);
786
+ const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
787
+ assert.strictEqual(result.deleted, COUNT_TWO);
753
788
  assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${oldDate}.jsonl.gz`)), false);
754
789
  assert.strictEqual(fs.existsSync(path.join(testDir, `logs-${oldDate}.jsonl.gz`)), false);
755
790
  assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${recentDate}.jsonl.gz`)), true);
@@ -758,8 +793,8 @@ describe('file-utils', () => {
758
793
  const oldDate = '2020-01-01';
759
794
  fs.writeFileSync(path.join(testDir, `traces-${oldDate}.jsonl`), '{}');
760
795
  fs.writeFileSync(path.join(testDir, `logs-${oldDate}.jsonl.gz`), gzipSync('{}'));
761
- const result = cleanupOldFiles(testDir, 7);
762
- assert.strictEqual(result.deleted, 2);
796
+ const result = cleanupOldFiles(testDir, RETENTION_DAYS_DEFAULT);
797
+ assert.strictEqual(result.deleted, COUNT_TWO);
763
798
  assert.strictEqual(fs.existsSync(path.join(testDir, `traces-${oldDate}.jsonl`)), false);
764
799
  assert.strictEqual(fs.existsSync(path.join(testDir, `logs-${oldDate}.jsonl.gz`)), false);
765
800
  });
@@ -776,19 +811,19 @@ describe('file-utils', () => {
776
811
  writer.close();
777
812
  const content = fs.readFileSync(filePath, 'utf-8');
778
813
  const lines = content.trim().split('\n');
779
- assert.strictEqual(lines.length, 3);
814
+ assert.strictEqual(lines.length, COUNT_THREE);
780
815
  });
781
816
  it('should flush remaining records on close', () => {
782
817
  const filePath = path.join(testDir, 'batch.jsonl');
783
- const writer = new BatchWriter(filePath, { batchSize: 10 });
818
+ const writer = new BatchWriter(filePath, { batchSize: DEFAULT_LIMIT_10 });
784
819
  writer.write({ id: 1 });
785
820
  writer.write({ id: 2 });
786
821
  const stats = writer.close();
787
- assert.strictEqual(stats.recordsWritten, 2);
822
+ assert.strictEqual(stats.recordsWritten, COUNT_TWO);
788
823
  assert.strictEqual(fs.existsSync(filePath), true);
789
824
  const content = fs.readFileSync(filePath, 'utf-8');
790
825
  const lines = content.trim().split('\n');
791
- assert.strictEqual(lines.length, 2);
826
+ assert.strictEqual(lines.length, COUNT_TWO);
792
827
  });
793
828
  it('should append to file on multiple flushes', () => {
794
829
  const filePath = path.join(testDir, 'batch.jsonl');
@@ -801,14 +836,14 @@ describe('file-utils', () => {
801
836
  writer.close(); // Flush 3
802
837
  const content = fs.readFileSync(filePath, 'utf-8');
803
838
  const lines = content.trim().split('\n');
804
- assert.strictEqual(lines.length, 5);
839
+ assert.strictEqual(lines.length, COUNT_FIVE);
805
840
  // Verify content
806
841
  assert.deepStrictEqual(JSON.parse(lines[0]), { id: 1 });
807
842
  assert.deepStrictEqual(JSON.parse(lines[4]), { id: 5 });
808
843
  });
809
844
  it('should write gzip compressed output', () => {
810
845
  const filePath = path.join(testDir, 'batch.jsonl.gz');
811
- const writer = new BatchWriter(filePath, { batchSize: 10, gzip: true });
846
+ const writer = new BatchWriter(filePath, { batchSize: DEFAULT_LIMIT_10, gzip: true });
812
847
  writer.write({ id: 1 });
813
848
  writer.write({ id: 2 });
814
849
  writer.close();
@@ -816,7 +851,7 @@ describe('file-utils', () => {
816
851
  const compressed = fs.readFileSync(filePath);
817
852
  const decompressed = gunzipSync(compressed).toString('utf-8');
818
853
  const lines = decompressed.trim().split('\n');
819
- assert.strictEqual(lines.length, 2);
854
+ assert.strictEqual(lines.length, COUNT_TWO);
820
855
  });
821
856
  it('should handle gzip append correctly', () => {
822
857
  const filePath = path.join(testDir, 'batch.jsonl.gz');
@@ -828,7 +863,7 @@ describe('file-utils', () => {
828
863
  const compressed = fs.readFileSync(filePath);
829
864
  const decompressed = gunzipSync(compressed).toString('utf-8');
830
865
  const lines = decompressed.trim().split('\n');
831
- assert.strictEqual(lines.length, 3);
866
+ assert.strictEqual(lines.length, COUNT_THREE);
832
867
  });
833
868
  it('should create parent directories if mkdirp is true', () => {
834
869
  const filePath = path.join(testDir, 'nested', 'dir', 'batch.jsonl');
@@ -840,13 +875,14 @@ describe('file-utils', () => {
840
875
  it('should use default batch size of 100', () => {
841
876
  const filePath = path.join(testDir, 'batch.jsonl');
842
877
  const writer = new BatchWriter(filePath);
878
+ const preFlushCount = SAMPLE_SIZE_100 - 1;
843
879
  // Write 99 records - should not flush
844
- for (let i = 0; i < 99; i++) {
880
+ for (let i = 0; i < preFlushCount; i++) {
845
881
  writer.write({ id: i });
846
882
  }
847
883
  assert.strictEqual(fs.existsSync(filePath), false);
848
884
  // 100th record triggers flush
849
- writer.write({ id: 99 });
885
+ writer.write({ id: preFlushCount });
850
886
  assert.strictEqual(fs.existsSync(filePath), true);
851
887
  writer.close();
852
888
  });
@@ -857,8 +893,8 @@ describe('file-utils', () => {
857
893
  writer.write({ id: 2 }); // Flush 1
858
894
  writer.write({ id: 3 });
859
895
  const stats = writer.close(); // Flush 2
860
- assert.strictEqual(stats.recordsWritten, 3);
861
- assert.strictEqual(stats.flushCount, 2);
896
+ assert.strictEqual(stats.recordsWritten, COUNT_THREE);
897
+ assert.strictEqual(stats.flushCount, COUNT_TWO);
862
898
  assert.ok(stats.bytesWritten > 0);
863
899
  });
864
900
  it('should report buffered count correctly', () => {
@@ -868,18 +904,18 @@ describe('file-utils', () => {
868
904
  writer.write({ id: 1 });
869
905
  assert.strictEqual(writer.bufferedCount, 1);
870
906
  writer.write({ id: 2 });
871
- assert.strictEqual(writer.bufferedCount, 2);
907
+ assert.strictEqual(writer.bufferedCount, COUNT_TWO);
872
908
  writer.close();
873
909
  assert.strictEqual(writer.bufferedCount, 0);
874
910
  });
875
911
  it('should handle writeAll for multiple records', () => {
876
912
  const filePath = path.join(testDir, 'batch.jsonl');
877
- const writer = new BatchWriter(filePath, { batchSize: 10 });
913
+ const writer = new BatchWriter(filePath, { batchSize: DEFAULT_LIMIT_10 });
878
914
  writer.writeAll([{ id: 1 }, { id: 2 }, { id: 3 }]);
879
915
  writer.close();
880
916
  const content = fs.readFileSync(filePath, 'utf-8');
881
917
  const lines = content.trim().split('\n');
882
- assert.strictEqual(lines.length, 3);
918
+ assert.strictEqual(lines.length, COUNT_THREE);
883
919
  });
884
920
  it('should handle empty close gracefully', () => {
885
921
  const filePath = path.join(testDir, 'batch.jsonl');
@@ -893,70 +929,61 @@ describe('file-utils', () => {
893
929
  describe('StreamingAggregator', () => {
894
930
  it('should compute count correctly', () => {
895
931
  const aggregator = new StreamingAggregator();
896
- aggregator.add(1);
897
- aggregator.add(2);
898
- aggregator.add(3);
899
- assert.strictEqual(aggregator.getResult('count'), 3);
900
- assert.strictEqual(aggregator.getCount(), 3);
932
+ aggregator.addAll(NUMERIC_SEQUENCE_ONE_TO_THREE);
933
+ assert.strictEqual(aggregator.getResult('count'), COUNT_THREE);
934
+ assert.strictEqual(aggregator.getCount(), COUNT_THREE);
901
935
  });
902
936
  it('should compute sum correctly', () => {
903
937
  const aggregator = new StreamingAggregator();
904
- aggregator.add(10);
905
- aggregator.add(20);
906
- aggregator.add(30);
907
- assert.strictEqual(aggregator.getResult('sum'), 60);
938
+ aggregator.addAll(NUMERIC_SEQUENCE_TEN_TWENTY_THIRTY);
939
+ assert.strictEqual(aggregator.getResult('sum'), NUMERIC_SEQUENCE_TEN_TWENTY_THIRTY.reduce((sum, value) => sum + value, 0));
908
940
  });
909
941
  it('should compute avg correctly', () => {
910
942
  const aggregator = new StreamingAggregator();
911
- aggregator.add(10);
912
- aggregator.add(20);
913
- aggregator.add(30);
914
- assert.strictEqual(aggregator.getResult('avg'), 20);
943
+ aggregator.addAll(NUMERIC_SEQUENCE_TEN_TWENTY_THIRTY);
944
+ assert.strictEqual(aggregator.getResult('avg'), NUMERIC_SEQUENCE_TEN_TWENTY_THIRTY.reduce((sum, value) => sum + value, 0)
945
+ / COUNT_THREE);
915
946
  });
916
947
  it('should compute min correctly', () => {
917
948
  const aggregator = new StreamingAggregator();
918
- aggregator.add(5);
919
- aggregator.add(2);
920
- aggregator.add(8);
921
- assert.strictEqual(aggregator.getResult('min'), 2);
949
+ aggregator.addAll(NUMERIC_SEQUENCE_FIVE_TWO_EIGHT);
950
+ assert.strictEqual(aggregator.getResult('min'), COUNT_TWO);
922
951
  });
923
952
  it('should compute max correctly', () => {
924
953
  const aggregator = new StreamingAggregator();
925
- aggregator.add(5);
926
- aggregator.add(2);
927
- aggregator.add(8);
928
- assert.strictEqual(aggregator.getResult('max'), 8);
954
+ aggregator.addAll(NUMERIC_SEQUENCE_FIVE_TWO_EIGHT);
955
+ assert.strictEqual(aggregator.getResult('max'), RESULT_COUNT_EIGHT);
929
956
  });
930
957
  it('should compute p50 (median) correctly', () => {
931
958
  const aggregator = new StreamingAggregator();
932
959
  // Add values 1-100 for predictable p50
933
- for (let i = 1; i <= 100; i++) {
960
+ for (let i = 1; i <= PERCENTILE_TEST_SAMPLE_SIZE; i++) {
934
961
  aggregator.add(i);
935
962
  }
936
963
  const p50 = aggregator.getResult('p50');
937
964
  assert.ok(p50 !== undefined);
938
965
  // p50 should be close to 50.5 for 1-100
939
- assert.ok(Math.abs(p50 - 50.5) < 1);
966
+ assert.ok(Math.abs(p50 - PERCENTILE_P50_EXPECTED) < 1);
940
967
  });
941
968
  it('should compute p95 correctly', () => {
942
969
  const aggregator = new StreamingAggregator();
943
- for (let i = 1; i <= 100; i++) {
970
+ for (let i = 1; i <= PERCENTILE_TEST_SAMPLE_SIZE; i++) {
944
971
  aggregator.add(i);
945
972
  }
946
973
  const p95 = aggregator.getResult('p95');
947
974
  assert.ok(p95 !== undefined);
948
975
  // p95 should be close to 95.05 for 1-100
949
- assert.ok(Math.abs(p95 - 95.05) < 1);
976
+ assert.ok(Math.abs(p95 - PERCENTILE_P95_EXPECTED) < 1);
950
977
  });
951
978
  it('should compute p99 correctly', () => {
952
979
  const aggregator = new StreamingAggregator();
953
- for (let i = 1; i <= 100; i++) {
980
+ for (let i = 1; i <= PERCENTILE_TEST_SAMPLE_SIZE; i++) {
954
981
  aggregator.add(i);
955
982
  }
956
983
  const p99 = aggregator.getResult('p99');
957
984
  assert.ok(p99 !== undefined);
958
985
  // p99 should be close to 99.01 for 1-100
959
- assert.ok(Math.abs(p99 - 99.01) < 1);
986
+ assert.ok(Math.abs(p99 - PERCENTILE_P99_EXPECTED) < 1);
960
987
  });
961
988
  it('should return undefined for aggregations on empty aggregator', () => {
962
989
  const aggregator = new StreamingAggregator();
@@ -969,47 +996,46 @@ describe('file-utils', () => {
969
996
  });
970
997
  it('should handle single value', () => {
971
998
  const aggregator = new StreamingAggregator();
972
- aggregator.add(42);
999
+ aggregator.add(VALUE_FORTY_TWO);
973
1000
  assert.strictEqual(aggregator.getResult('count'), 1);
974
- assert.strictEqual(aggregator.getResult('sum'), 42);
975
- assert.strictEqual(aggregator.getResult('avg'), 42);
976
- assert.strictEqual(aggregator.getResult('min'), 42);
977
- assert.strictEqual(aggregator.getResult('max'), 42);
978
- assert.strictEqual(aggregator.getResult('p50'), 42);
1001
+ assert.strictEqual(aggregator.getResult('sum'), VALUE_FORTY_TWO);
1002
+ assert.strictEqual(aggregator.getResult('avg'), VALUE_FORTY_TWO);
1003
+ assert.strictEqual(aggregator.getResult('min'), VALUE_FORTY_TWO);
1004
+ assert.strictEqual(aggregator.getResult('max'), VALUE_FORTY_TWO);
1005
+ // DDSketch uses relative error; approximate match for percentiles
1006
+ const p50Raw = aggregator.getResult('p50');
1007
+ assert(p50Raw !== undefined, 'p50 result should be defined');
1008
+ assert.ok(Math.abs(p50Raw - VALUE_FORTY_TWO) < VALUE_FORTY_TWO * 0.05, `p50 ${p50Raw} should approximate ${VALUE_FORTY_TWO}`);
979
1009
  });
980
1010
  it('should handle negative values', () => {
981
1011
  const aggregator = new StreamingAggregator();
982
- aggregator.add(-10);
983
- aggregator.add(-5);
984
- aggregator.add(0);
985
- aggregator.add(5);
986
- aggregator.add(10);
1012
+ aggregator.addAll(NUMERIC_SEQUENCE_NEGATIVE_TEN_TO_TEN);
987
1013
  assert.strictEqual(aggregator.getResult('sum'), 0);
988
- assert.strictEqual(aggregator.getResult('min'), -10);
989
- assert.strictEqual(aggregator.getResult('max'), 10);
1014
+ assert.strictEqual(aggregator.getResult('min'), -RESULT_COUNT_TEN);
1015
+ assert.strictEqual(aggregator.getResult('max'), RESULT_COUNT_TEN);
990
1016
  assert.strictEqual(aggregator.getResult('avg'), 0);
991
1017
  });
992
1018
  it('should skip non-finite values', () => {
993
1019
  const aggregator = new StreamingAggregator();
994
- aggregator.add(10);
1020
+ aggregator.add(RESULT_COUNT_TEN);
995
1021
  aggregator.add(Infinity);
996
1022
  aggregator.add(-Infinity);
997
1023
  aggregator.add(NaN);
998
- aggregator.add(20);
999
- assert.strictEqual(aggregator.getResult('count'), 2);
1000
- assert.strictEqual(aggregator.getResult('sum'), 30);
1001
- assert.strictEqual(aggregator.getResult('avg'), 15);
1024
+ aggregator.add(RESULT_COUNT_TEN * COUNT_TWO);
1025
+ assert.strictEqual(aggregator.getResult('count'), COUNT_TWO);
1026
+ assert.strictEqual(aggregator.getResult('sum'), RESULT_COUNT_TEN * COUNT_THREE);
1027
+ assert.strictEqual(aggregator.getResult('avg'), COUNT_FIFTEEN);
1002
1028
  });
1003
1029
  it('should support addAll for multiple values', () => {
1004
1030
  const aggregator = new StreamingAggregator();
1005
- aggregator.addAll([1, 2, 3, 4, 5]);
1006
- assert.strictEqual(aggregator.getResult('count'), 5);
1007
- assert.strictEqual(aggregator.getResult('sum'), 15);
1008
- assert.strictEqual(aggregator.getResult('avg'), 3);
1031
+ aggregator.addAll(NUMERIC_SEQUENCE_ONE_TO_FIVE);
1032
+ assert.strictEqual(aggregator.getResult('count'), COUNT_FIVE);
1033
+ assert.strictEqual(aggregator.getResult('sum'), COUNT_FIFTEEN);
1034
+ assert.strictEqual(aggregator.getResult('avg'), COUNT_THREE);
1009
1035
  });
1010
1036
  it('should reset correctly', () => {
1011
1037
  const aggregator = new StreamingAggregator();
1012
- aggregator.addAll([1, 2, 3, 4, 5]);
1038
+ aggregator.addAll(NUMERIC_SEQUENCE_ONE_TO_FIVE);
1013
1039
  aggregator.reset();
1014
1040
  assert.strictEqual(aggregator.getResult('count'), 0);
1015
1041
  assert.strictEqual(aggregator.getResult('sum'), undefined);
@@ -1017,83 +1043,83 @@ describe('file-utils', () => {
1017
1043
  });
1018
1044
  it('should return all stats via getStats()', () => {
1019
1045
  const aggregator = new StreamingAggregator();
1020
- aggregator.addAll([1, 2, 3, 4, 5]);
1046
+ aggregator.addAll(NUMERIC_SEQUENCE_ONE_TO_FIVE);
1021
1047
  const stats = aggregator.getStats();
1022
- assert.strictEqual(stats.count, 5);
1023
- assert.strictEqual(stats.sum, 15);
1024
- assert.strictEqual(stats.avg, 3);
1048
+ assert.strictEqual(stats.count, COUNT_FIVE);
1049
+ assert.strictEqual(stats.sum, COUNT_FIFTEEN);
1050
+ assert.strictEqual(stats.avg, COUNT_THREE);
1025
1051
  assert.strictEqual(stats.min, 1);
1026
- assert.strictEqual(stats.max, 5);
1052
+ assert.strictEqual(stats.max, COUNT_FIVE);
1027
1053
  assert.ok(stats.p50 !== undefined);
1028
1054
  });
1029
1055
  it('should handle large datasets with reservoir sampling', () => {
1030
1056
  const aggregator = new StreamingAggregator();
1031
1057
  // Add 50000 values - larger than reservoir size
1032
- for (let i = 1; i <= 50000; i++) {
1058
+ for (let i = 1; i <= LARGE_RESERVOIR_DATASET_SIZE; i++) {
1033
1059
  aggregator.add(i);
1034
1060
  }
1035
- assert.strictEqual(aggregator.getResult('count'), 50000);
1036
- assert.strictEqual(aggregator.getResult('sum'), (50000 * 50001) / 2);
1061
+ assert.strictEqual(aggregator.getResult('count'), LARGE_RESERVOIR_DATASET_SIZE);
1062
+ assert.strictEqual(aggregator.getResult('sum'), (LARGE_RESERVOIR_DATASET_SIZE * LARGE_RESERVOIR_SUM_UPPER_TERM) / COUNT_TWO);
1037
1063
  assert.strictEqual(aggregator.getResult('min'), 1);
1038
- assert.strictEqual(aggregator.getResult('max'), 50000);
1064
+ assert.strictEqual(aggregator.getResult('max'), LARGE_RESERVOIR_DATASET_SIZE);
1039
1065
  // Percentiles should be approximately correct (within 10% error due to sampling)
1040
1066
  const p50 = aggregator.getResult('p50');
1041
1067
  assert.ok(p50 !== undefined);
1042
- assert.ok(Math.abs(p50 - 25000) / 25000 < 0.10);
1068
+ assert.ok(Math.abs(p50 - LARGE_RESERVOIR_P50_EXPECTED) / LARGE_RESERVOIR_P50_EXPECTED < RELATIVE_ERROR_TEN_PERCENT);
1043
1069
  const p95 = aggregator.getResult('p95');
1044
1070
  assert.ok(p95 !== undefined);
1045
- assert.ok(Math.abs(p95 - 47500) / 47500 < 0.10);
1071
+ assert.ok(Math.abs(p95 - LARGE_RESERVOIR_P95_EXPECTED) / LARGE_RESERVOIR_P95_EXPECTED < RELATIVE_ERROR_TEN_PERCENT);
1046
1072
  });
1047
1073
  it('should handle decimal values', () => {
1048
1074
  const aggregator = new StreamingAggregator();
1049
- aggregator.add(0.1);
1050
- aggregator.add(0.2);
1051
- aggregator.add(0.3);
1075
+ aggregator.add(RELATIVE_ERROR_TEN_PERCENT);
1076
+ aggregator.add(COUNT_TWO / DEFAULT_LIMIT_10);
1077
+ aggregator.add(COUNT_THREE / DEFAULT_LIMIT_10);
1052
1078
  const sum = aggregator.getResult('sum');
1053
1079
  assert.ok(sum !== undefined);
1054
- assert.ok(Math.abs(sum - 0.6) < 0.0001);
1080
+ assert.ok(Math.abs(sum - (COUNT_SIX / DEFAULT_LIMIT_10)) < FLOAT_TOLERANCE);
1055
1081
  });
1056
1082
  });
1057
1083
  describe('enforceMemoryLimit', () => {
1058
1084
  it('should return results unchanged when under limit', () => {
1059
- const items = [1, 2, 3, 4, 5];
1060
- const result = enforceMemoryLimit(items, 10);
1085
+ const items = NUMERIC_SEQUENCE_ONE_TO_FIVE;
1086
+ const result = enforceMemoryLimit(items, WINDOW_LIMIT_TEN);
1061
1087
  assert.deepStrictEqual(result.results, items);
1062
1088
  assert.strictEqual(result.truncated, false);
1063
- assert.strictEqual(result.originalCount, 5);
1089
+ assert.strictEqual(result.originalCount, COUNT_FIVE);
1064
1090
  });
1065
1091
  it('should truncate results when over limit', () => {
1066
- const items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
1067
- const result = enforceMemoryLimit(items, 5);
1068
- assert.deepStrictEqual(result.results, [1, 2, 3, 4, 5]);
1092
+ const items = NUMERIC_SEQUENCE_ONE_TO_TEN;
1093
+ const result = enforceMemoryLimit(items, WINDOW_LIMIT_FIVE);
1094
+ assert.deepStrictEqual(result.results, NUMERIC_SEQUENCE_ONE_TO_FIVE);
1069
1095
  assert.strictEqual(result.truncated, true);
1070
- assert.strictEqual(result.originalCount, 10);
1096
+ assert.strictEqual(result.originalCount, RESULT_COUNT_TEN);
1071
1097
  });
1072
1098
  it('should return exactly at limit without truncation', () => {
1073
- const items = [1, 2, 3, 4, 5];
1074
- const result = enforceMemoryLimit(items, 5);
1099
+ const items = NUMERIC_SEQUENCE_ONE_TO_FIVE;
1100
+ const result = enforceMemoryLimit(items, WINDOW_LIMIT_FIVE);
1075
1101
  assert.deepStrictEqual(result.results, items);
1076
1102
  assert.strictEqual(result.truncated, false);
1077
- assert.strictEqual(result.originalCount, 5);
1103
+ assert.strictEqual(result.originalCount, COUNT_FIVE);
1078
1104
  });
1079
1105
  it('should handle empty array', () => {
1080
- const result = enforceMemoryLimit([], 10);
1106
+ const result = enforceMemoryLimit([], WINDOW_LIMIT_TEN);
1081
1107
  assert.deepStrictEqual(result.results, []);
1082
1108
  assert.strictEqual(result.truncated, false);
1083
1109
  assert.strictEqual(result.originalCount, 0);
1084
1110
  });
1085
1111
  it('should work with object arrays', () => {
1086
- const items = [{ id: 1 }, { id: 2 }, { id: 3 }];
1087
- const result = enforceMemoryLimit(items, 2);
1088
- assert.deepStrictEqual(result.results, [{ id: 1 }, { id: 2 }]);
1112
+ const items = NUMERIC_SEQUENCE_ONE_TO_THREE.map((id) => ({ id }));
1113
+ const result = enforceMemoryLimit(items, WINDOW_OFFSET_TWO);
1114
+ assert.deepStrictEqual(result.results, items.slice(0, WINDOW_OFFSET_TWO));
1089
1115
  assert.strictEqual(result.truncated, true);
1090
1116
  });
1091
1117
  it('should use default limit when not specified', () => {
1092
- const items = Array.from({ length: 100 }, (_, i) => i);
1118
+ const items = Array.from({ length: SAMPLE_SIZE_100 }, (_, i) => i);
1093
1119
  const result = enforceMemoryLimit(items);
1094
1120
  // Default is 10000, so 100 items should not be truncated
1095
1121
  assert.strictEqual(result.truncated, false);
1096
- assert.strictEqual(result.results.length, 100);
1122
+ assert.strictEqual(result.results.length, SAMPLE_SIZE_100);
1097
1123
  });
1098
1124
  it('should log warning when truncating (verify via side effect)', () => {
1099
1125
  // Store original console.warn
@@ -1105,10 +1131,10 @@ describe('file-utils', () => {
1105
1131
  warnMessage = msg;
1106
1132
  };
1107
1133
  try {
1108
- const items = [1, 2, 3, 4, 5];
1109
- enforceMemoryLimit(items, 3);
1134
+ const items = [1, COUNT_TWO, COUNT_THREE, COUNT_FOUR, COUNT_FIVE];
1135
+ enforceMemoryLimit(items, COUNT_THREE);
1110
1136
  assert.strictEqual(warnCalled, true);
1111
- assert.ok(warnMessage.includes('[MEMORY]'));
1137
+ assert.ok(warnMessage.includes('"memory"') || warnMessage.includes('memory'), 'Warning should reference memory component');
1112
1138
  assert.ok(warnMessage.includes('5'));
1113
1139
  assert.ok(warnMessage.includes('3'));
1114
1140
  }
@@ -1119,21 +1145,21 @@ describe('file-utils', () => {
1119
1145
  });
1120
1146
  describe('shouldUseStreamingAggregation', () => {
1121
1147
  it('should return false when count is below threshold', () => {
1122
- assert.strictEqual(shouldUseStreamingAggregation(100, 5000), false);
1123
- assert.strictEqual(shouldUseStreamingAggregation(4999, 5000), false);
1124
- assert.strictEqual(shouldUseStreamingAggregation(5000, 5000), false);
1148
+ assert.strictEqual(shouldUseStreamingAggregation(STREAMING_COUNT_CUSTOM_THRESHOLD, STREAMING_THRESHOLD), false);
1149
+ assert.strictEqual(shouldUseStreamingAggregation(STREAMING_THRESHOLD - 1, STREAMING_THRESHOLD), false);
1150
+ assert.strictEqual(shouldUseStreamingAggregation(STREAMING_THRESHOLD, STREAMING_THRESHOLD), false);
1125
1151
  });
1126
1152
  it('should return true when count exceeds threshold', () => {
1127
- assert.strictEqual(shouldUseStreamingAggregation(5001, 5000), true);
1128
- assert.strictEqual(shouldUseStreamingAggregation(10000, 5000), true);
1153
+ assert.strictEqual(shouldUseStreamingAggregation(STREAMING_THRESHOLD + 1, STREAMING_THRESHOLD), true);
1154
+ assert.strictEqual(shouldUseStreamingAggregation(MAX_RESULTS_IN_MEMORY, STREAMING_THRESHOLD), true);
1129
1155
  });
1130
1156
  it('should use default threshold when not specified', () => {
1131
- // Default is 5000
1132
- assert.strictEqual(shouldUseStreamingAggregation(4000), false);
1157
+ // Default is STREAMING_THRESHOLD
1158
+ assert.strictEqual(shouldUseStreamingAggregation(STREAMING_COUNT_DEFAULT_THRESHOLD), false);
1133
1159
  });
1134
1160
  it('should work with custom threshold', () => {
1135
- assert.strictEqual(shouldUseStreamingAggregation(500, 100), true);
1136
- assert.strictEqual(shouldUseStreamingAggregation(50, 100), false);
1161
+ assert.strictEqual(shouldUseStreamingAggregation(STREAMING_COUNT_CUSTOM_HIGH, STREAMING_COUNT_CUSTOM_THRESHOLD), true);
1162
+ assert.strictEqual(shouldUseStreamingAggregation(STREAMING_COUNT_CUSTOM_LOW, STREAMING_COUNT_CUSTOM_THRESHOLD), false);
1137
1163
  });
1138
1164
  });
1139
1165
  describe('getMemoryLimits', () => {
@@ -1151,7 +1177,7 @@ describe('file-utils', () => {
1151
1177
  it('should return false for primitive values', () => {
1152
1178
  assert.strictEqual(hasCircularReference(null), false);
1153
1179
  assert.strictEqual(hasCircularReference(undefined), false);
1154
- assert.strictEqual(hasCircularReference(42), false);
1180
+ assert.strictEqual(hasCircularReference(VALUE_FORTY_TWO), false);
1155
1181
  assert.strictEqual(hasCircularReference('string'), false);
1156
1182
  assert.strictEqual(hasCircularReference(true), false);
1157
1183
  });
@@ -1160,7 +1186,7 @@ describe('file-utils', () => {
1160
1186
  assert.strictEqual(hasCircularReference({ nested: { deep: { value: 1 } } }), false);
1161
1187
  });
1162
1188
  it('should return false for simple arrays', () => {
1163
- assert.strictEqual(hasCircularReference([1, 2, 3]), false);
1189
+ assert.strictEqual(hasCircularReference([1, COUNT_TWO, COUNT_THREE]), false);
1164
1190
  assert.strictEqual(hasCircularReference([{ id: 1 }, { id: 2 }]), false);
1165
1191
  });
1166
1192
  it('should detect self-referencing object', () => {
@@ -1169,7 +1195,7 @@ describe('file-utils', () => {
1169
1195
  assert.strictEqual(hasCircularReference(obj), true);
1170
1196
  });
1171
1197
  it('should detect self-referencing array', () => {
1172
- const arr = [1, 2, 3];
1198
+ const arr = [1, COUNT_TWO, COUNT_THREE];
1173
1199
  arr.push(arr);
1174
1200
  assert.strictEqual(hasCircularReference(arr), true);
1175
1201
  });
@@ -1209,7 +1235,7 @@ describe('file-utils', () => {
1209
1235
  const circularObj = { id: 1 };
1210
1236
  circularObj.self = circularObj;
1211
1237
  const items = [];
1212
- for (let i = 0; i < 200; i++) {
1238
+ for (let i = 0; i < LARGE_ARRAY_SAMPLE_SIZE; i++) {
1213
1239
  items.push(circularObj);
1214
1240
  }
1215
1241
  const result = estimateByteSize(items);
@@ -1221,11 +1247,11 @@ describe('file-utils', () => {
1221
1247
  circularObj.self = circularObj;
1222
1248
  const items = [];
1223
1249
  // Add 150 normal items (75% of 200)
1224
- for (let i = 0; i < 150; i++) {
1250
+ for (let i = 0; i < MIXED_ARRAY_NORMAL_ITEMS; i++) {
1225
1251
  items.push({ id: i, data: 'normal' });
1226
1252
  }
1227
1253
  // Add 50 circular items (25% of 200)
1228
- for (let i = 0; i < 50; i++) {
1254
+ for (let i = 0; i < MIXED_ARRAY_CIRCULAR_ITEMS; i++) {
1229
1255
  items.push(circularObj);
1230
1256
  }
1231
1257
  // Since less than 50% failed, should extrapolate from successful samples
@@ -1240,11 +1266,11 @@ describe('file-utils', () => {
1240
1266
  circularObj.self = circularObj;
1241
1267
  const items = [];
1242
1268
  // Add 40 normal items (20% of 200)
1243
- for (let i = 0; i < 40; i++) {
1269
+ for (let i = 0; i < MOSTLY_CIRCULAR_NORMAL_ITEMS; i++) {
1244
1270
  items.push({ id: i });
1245
1271
  }
1246
1272
  // Add 160 circular items (80% of 200)
1247
- for (let i = 0; i < 160; i++) {
1273
+ for (let i = 0; i < MOSTLY_CIRCULAR_ITEMS; i++) {
1248
1274
  items.push(circularObj);
1249
1275
  }
1250
1276
  const result = estimateByteSize(items);
@@ -1253,13 +1279,13 @@ describe('file-utils', () => {
1253
1279
  });
1254
1280
  it('should extrapolate size for large non-circular arrays', () => {
1255
1281
  // Create array larger than sample size
1256
- const items = Array.from({ length: 200 }, (_, i) => ({ id: i, name: `item-${i}` }));
1282
+ const items = Array.from({ length: LARGE_ARRAY_SAMPLE_SIZE }, (_, i) => ({ id: i, name: `item-${i}` }));
1257
1283
  const result = estimateByteSize(items);
1258
1284
  // Result should be positive and reasonable
1259
1285
  assert.ok(result > 0);
1260
1286
  // Rough estimate: each item is ~25 bytes, so 200 items ~5000 bytes
1261
- assert.ok(result > 1000);
1262
- assert.ok(result < 100000);
1287
+ assert.ok(result > ESTIMATED_SIZE_MIN_BYTES);
1288
+ assert.ok(result < ESTIMATED_SIZE_MAX_BYTES);
1263
1289
  });
1264
1290
  });
1265
1291
  describe('enforceMemoryLimit with circular references', () => {
@@ -1271,7 +1297,7 @@ describe('file-utils', () => {
1271
1297
  // which exceeds the 50MB limit would not trigger, but the detection
1272
1298
  // prevents bypass (the conservative estimate ensures the check works)
1273
1299
  const items = [obj];
1274
- const result = enforceMemoryLimit(items, 10000);
1300
+ const result = enforceMemoryLimit(items, MAX_RESULTS_IN_MEMORY);
1275
1301
  // Since a single item with circular ref returns 1MB estimate,
1276
1302
  // and 1MB < 50MB limit, it won't truncate
1277
1303
  // But the important thing is it doesn't crash and returns valid result
@@ -1284,19 +1310,19 @@ describe('file-utils', () => {
1284
1310
  obj1.ref = obj2;
1285
1311
  obj2.ref = obj1;
1286
1312
  const items = [obj1, obj2, { normal: 'object' }];
1287
- const result = enforceMemoryLimit(items, 10000);
1313
+ const result = enforceMemoryLimit(items, MAX_RESULTS_IN_MEMORY);
1288
1314
  assert.ok(Array.isArray(result.results));
1289
- assert.strictEqual(result.originalCount, 3);
1315
+ assert.strictEqual(result.originalCount, COUNT_THREE);
1290
1316
  });
1291
1317
  it('should not crash when JSON.stringify would throw', () => {
1292
1318
  // Create an object that would cause JSON.stringify to throw
1293
1319
  const obj = {};
1294
1320
  obj.circular = obj;
1295
1321
  const items = Array.from({ length: 50 }, () => obj);
1296
- const result = enforceMemoryLimit(items, 10000);
1322
+ const result = enforceMemoryLimit(items, MAX_RESULTS_IN_MEMORY);
1297
1323
  // Should not throw and should return valid result
1298
1324
  assert.ok(Array.isArray(result.results));
1299
- assert.strictEqual(result.originalCount, 50);
1325
+ assert.strictEqual(result.originalCount, STREAMING_COUNT_CUSTOM_LOW);
1300
1326
  });
1301
1327
  });
1302
1328
  });