observability-toolkit 1.8.4 → 2.0.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 (364) hide show
  1. package/README.md +126 -5
  2. package/dist/backends/index.d.ts +163 -0
  3. package/dist/backends/index.d.ts.map +1 -1
  4. package/dist/backends/index.js +57 -0
  5. package/dist/backends/index.js.map +1 -1
  6. package/dist/backends/index.test.js +55 -1
  7. package/dist/backends/index.test.js.map +1 -1
  8. package/dist/backends/local-jsonl-boolean-search.test.js +8 -8
  9. package/dist/backends/local-jsonl-boolean-search.test.js.map +1 -1
  10. package/dist/backends/local-jsonl-cache.test.d.ts +2 -0
  11. package/dist/backends/local-jsonl-cache.test.d.ts.map +1 -0
  12. package/dist/backends/local-jsonl-cache.test.js +295 -0
  13. package/dist/backends/local-jsonl-cache.test.js.map +1 -0
  14. package/dist/backends/local-jsonl-circuit-breaker.test.d.ts +2 -0
  15. package/dist/backends/local-jsonl-circuit-breaker.test.d.ts.map +1 -0
  16. package/dist/backends/local-jsonl-circuit-breaker.test.js +180 -0
  17. package/dist/backends/local-jsonl-circuit-breaker.test.js.map +1 -0
  18. package/dist/backends/local-jsonl-export.test.d.ts +2 -0
  19. package/dist/backends/local-jsonl-export.test.d.ts.map +1 -0
  20. package/dist/backends/local-jsonl-export.test.js +704 -0
  21. package/dist/backends/local-jsonl-export.test.js.map +1 -0
  22. package/dist/backends/local-jsonl-index.test.d.ts +2 -0
  23. package/dist/backends/local-jsonl-index.test.d.ts.map +1 -0
  24. package/dist/backends/local-jsonl-index.test.js +554 -0
  25. package/dist/backends/local-jsonl-index.test.js.map +1 -0
  26. package/dist/backends/local-jsonl-logs.test.js +52 -43
  27. package/dist/backends/local-jsonl-logs.test.js.map +1 -1
  28. package/dist/backends/local-jsonl-metrics.test.d.ts +2 -0
  29. package/dist/backends/local-jsonl-metrics.test.d.ts.map +1 -0
  30. package/dist/backends/local-jsonl-metrics.test.js +876 -0
  31. package/dist/backends/local-jsonl-metrics.test.js.map +1 -0
  32. package/dist/backends/local-jsonl-traces.test.js +89 -83
  33. package/dist/backends/local-jsonl-traces.test.js.map +1 -1
  34. package/dist/backends/local-jsonl.d.ts +39 -0
  35. package/dist/backends/local-jsonl.d.ts.map +1 -1
  36. package/dist/backends/local-jsonl.js +975 -492
  37. package/dist/backends/local-jsonl.js.map +1 -1
  38. package/dist/backends/signoz-api-circuit-breaker.test.d.ts +6 -0
  39. package/dist/backends/signoz-api-circuit-breaker.test.d.ts.map +1 -0
  40. package/dist/backends/signoz-api-circuit-breaker.test.js +548 -0
  41. package/dist/backends/signoz-api-circuit-breaker.test.js.map +1 -0
  42. package/dist/backends/signoz-api-rate-limiter.test.d.ts +6 -0
  43. package/dist/backends/signoz-api-rate-limiter.test.d.ts.map +1 -0
  44. package/dist/backends/signoz-api-rate-limiter.test.js +390 -0
  45. package/dist/backends/signoz-api-rate-limiter.test.js.map +1 -0
  46. package/dist/backends/signoz-api-ssrf.test.d.ts +6 -0
  47. package/dist/backends/signoz-api-ssrf.test.d.ts.map +1 -0
  48. package/dist/backends/signoz-api-ssrf.test.js +216 -0
  49. package/dist/backends/signoz-api-ssrf.test.js.map +1 -0
  50. package/dist/backends/signoz-api-test-helpers.d.ts +80 -0
  51. package/dist/backends/signoz-api-test-helpers.d.ts.map +1 -0
  52. package/dist/backends/signoz-api-test-helpers.js +79 -0
  53. package/dist/backends/signoz-api-test-helpers.js.map +1 -0
  54. package/dist/backends/signoz-api.d.ts +31 -1
  55. package/dist/backends/signoz-api.d.ts.map +1 -1
  56. package/dist/backends/signoz-api.js +717 -539
  57. package/dist/backends/signoz-api.js.map +1 -1
  58. package/dist/backends/signoz-api.test.d.ts +9 -0
  59. package/dist/backends/signoz-api.test.d.ts.map +1 -1
  60. package/dist/backends/signoz-api.test.js +20 -1032
  61. package/dist/backends/signoz-api.test.js.map +1 -1
  62. package/dist/lib/agent-as-judge.d.ts +388 -0
  63. package/dist/lib/agent-as-judge.d.ts.map +1 -0
  64. package/dist/lib/agent-as-judge.js +740 -0
  65. package/dist/lib/agent-as-judge.js.map +1 -0
  66. package/dist/lib/agent-as-judge.test.d.ts +5 -0
  67. package/dist/lib/agent-as-judge.test.d.ts.map +1 -0
  68. package/dist/lib/agent-as-judge.test.js +816 -0
  69. package/dist/lib/agent-as-judge.test.js.map +1 -0
  70. package/dist/lib/cache.d.ts +61 -2
  71. package/dist/lib/cache.d.ts.map +1 -1
  72. package/dist/lib/cache.js +54 -3
  73. package/dist/lib/cache.js.map +1 -1
  74. package/dist/lib/circuit-breaker.d.ts +101 -0
  75. package/dist/lib/circuit-breaker.d.ts.map +1 -0
  76. package/dist/lib/circuit-breaker.js +158 -0
  77. package/dist/lib/circuit-breaker.js.map +1 -0
  78. package/dist/lib/circuit-breaker.test.d.ts +2 -0
  79. package/dist/lib/circuit-breaker.test.d.ts.map +1 -0
  80. package/dist/lib/circuit-breaker.test.js +263 -0
  81. package/dist/lib/circuit-breaker.test.js.map +1 -0
  82. package/dist/lib/confident-export.d.ts +101 -0
  83. package/dist/lib/confident-export.d.ts.map +1 -0
  84. package/dist/lib/confident-export.js +393 -0
  85. package/dist/lib/confident-export.js.map +1 -0
  86. package/dist/lib/confident-export.test.d.ts +7 -0
  87. package/dist/lib/confident-export.test.d.ts.map +1 -0
  88. package/dist/lib/confident-export.test.js +835 -0
  89. package/dist/lib/confident-export.test.js.map +1 -0
  90. package/dist/lib/constants-symlink.test.d.ts +12 -0
  91. package/dist/lib/constants-symlink.test.d.ts.map +1 -0
  92. package/dist/lib/constants-symlink.test.js +357 -0
  93. package/dist/lib/constants-symlink.test.js.map +1 -0
  94. package/dist/lib/constants.d.ts +75 -0
  95. package/dist/lib/constants.d.ts.map +1 -1
  96. package/dist/lib/constants.js +104 -1
  97. package/dist/lib/constants.js.map +1 -1
  98. package/dist/lib/datadog-export.d.ts +156 -0
  99. package/dist/lib/datadog-export.d.ts.map +1 -0
  100. package/dist/lib/datadog-export.js +464 -0
  101. package/dist/lib/datadog-export.js.map +1 -0
  102. package/dist/lib/datadog-export.test.d.ts +14 -0
  103. package/dist/lib/datadog-export.test.d.ts.map +1 -0
  104. package/dist/lib/datadog-export.test.js +890 -0
  105. package/dist/lib/datadog-export.test.js.map +1 -0
  106. package/dist/lib/edge-cases.test.js +17 -17
  107. package/dist/lib/edge-cases.test.js.map +1 -1
  108. package/dist/lib/error-sanitizer.d.ts.map +1 -1
  109. package/dist/lib/error-sanitizer.js +29 -3
  110. package/dist/lib/error-sanitizer.js.map +1 -1
  111. package/dist/lib/error-sanitizer.test.js +159 -0
  112. package/dist/lib/error-sanitizer.test.js.map +1 -1
  113. package/dist/lib/error-types.d.ts +54 -0
  114. package/dist/lib/error-types.d.ts.map +1 -0
  115. package/dist/lib/error-types.js +154 -0
  116. package/dist/lib/error-types.js.map +1 -0
  117. package/dist/lib/error-types.test.d.ts +2 -0
  118. package/dist/lib/error-types.test.d.ts.map +1 -0
  119. package/dist/lib/error-types.test.js +196 -0
  120. package/dist/lib/error-types.test.js.map +1 -0
  121. package/dist/lib/evaluation-hooks.d.ts +49 -0
  122. package/dist/lib/evaluation-hooks.d.ts.map +1 -0
  123. package/dist/lib/evaluation-hooks.js +488 -0
  124. package/dist/lib/evaluation-hooks.js.map +1 -0
  125. package/dist/lib/evaluation-hooks.test.d.ts +8 -0
  126. package/dist/lib/evaluation-hooks.test.d.ts.map +1 -0
  127. package/dist/lib/evaluation-hooks.test.js +624 -0
  128. package/dist/lib/evaluation-hooks.test.js.map +1 -0
  129. package/dist/lib/export-utils.d.ts +99 -0
  130. package/dist/lib/export-utils.d.ts.map +1 -0
  131. package/dist/lib/export-utils.js +238 -0
  132. package/dist/lib/export-utils.js.map +1 -0
  133. package/dist/lib/export-utils.test.d.ts +5 -0
  134. package/dist/lib/export-utils.test.d.ts.map +1 -0
  135. package/dist/lib/export-utils.test.js +193 -0
  136. package/dist/lib/export-utils.test.js.map +1 -0
  137. package/dist/lib/file-utils.d.ts +17 -2
  138. package/dist/lib/file-utils.d.ts.map +1 -1
  139. package/dist/lib/file-utils.js +24 -5
  140. package/dist/lib/file-utils.js.map +1 -1
  141. package/dist/lib/file-utils.test.js +30 -0
  142. package/dist/lib/file-utils.test.js.map +1 -1
  143. package/dist/lib/histogram.d.ts +119 -0
  144. package/dist/lib/histogram.d.ts.map +1 -0
  145. package/dist/lib/histogram.js +202 -0
  146. package/dist/lib/histogram.js.map +1 -0
  147. package/dist/lib/histogram.test.d.ts +5 -0
  148. package/dist/lib/histogram.test.d.ts.map +1 -0
  149. package/dist/lib/histogram.test.js +381 -0
  150. package/dist/lib/histogram.test.js.map +1 -0
  151. package/dist/lib/indexer.test.js +27 -27
  152. package/dist/lib/indexer.test.js.map +1 -1
  153. package/dist/lib/input-validator.d.ts +12 -0
  154. package/dist/lib/input-validator.d.ts.map +1 -1
  155. package/dist/lib/input-validator.fuzz.test.d.ts +12 -0
  156. package/dist/lib/input-validator.fuzz.test.d.ts.map +1 -0
  157. package/dist/lib/input-validator.fuzz.test.js +290 -0
  158. package/dist/lib/input-validator.fuzz.test.js.map +1 -0
  159. package/dist/lib/input-validator.js +57 -3
  160. package/dist/lib/input-validator.js.map +1 -1
  161. package/dist/lib/input-validator.test.js +129 -1
  162. package/dist/lib/input-validator.test.js.map +1 -1
  163. package/dist/lib/instrumentation.d.ts +153 -0
  164. package/dist/lib/instrumentation.d.ts.map +1 -0
  165. package/dist/lib/instrumentation.integration.test.d.ts +2 -0
  166. package/dist/lib/instrumentation.integration.test.d.ts.map +1 -0
  167. package/dist/lib/instrumentation.integration.test.js +589 -0
  168. package/dist/lib/instrumentation.integration.test.js.map +1 -0
  169. package/dist/lib/instrumentation.js +520 -0
  170. package/dist/lib/instrumentation.js.map +1 -0
  171. package/dist/lib/instrumentation.test.d.ts +2 -0
  172. package/dist/lib/instrumentation.test.d.ts.map +1 -0
  173. package/dist/lib/instrumentation.test.js +821 -0
  174. package/dist/lib/instrumentation.test.js.map +1 -0
  175. package/dist/lib/langfuse-export.d.ts +125 -0
  176. package/dist/lib/langfuse-export.d.ts.map +1 -0
  177. package/dist/lib/langfuse-export.js +367 -0
  178. package/dist/lib/langfuse-export.js.map +1 -0
  179. package/dist/lib/langfuse-export.test.d.ts +7 -0
  180. package/dist/lib/langfuse-export.test.d.ts.map +1 -0
  181. package/dist/lib/langfuse-export.test.js +1007 -0
  182. package/dist/lib/langfuse-export.test.js.map +1 -0
  183. package/dist/lib/llm-as-judge.d.ts +657 -0
  184. package/dist/lib/llm-as-judge.d.ts.map +1 -0
  185. package/dist/lib/llm-as-judge.js +1397 -0
  186. package/dist/lib/llm-as-judge.js.map +1 -0
  187. package/dist/lib/llm-as-judge.test.d.ts +2 -0
  188. package/dist/lib/llm-as-judge.test.d.ts.map +1 -0
  189. package/dist/lib/llm-as-judge.test.js +2409 -0
  190. package/dist/lib/llm-as-judge.test.js.map +1 -0
  191. package/dist/lib/logger.d.ts +46 -0
  192. package/dist/lib/logger.d.ts.map +1 -0
  193. package/dist/lib/logger.js +81 -0
  194. package/dist/lib/logger.js.map +1 -0
  195. package/dist/lib/logger.test.d.ts +2 -0
  196. package/dist/lib/logger.test.d.ts.map +1 -0
  197. package/dist/lib/logger.test.js +122 -0
  198. package/dist/lib/logger.test.js.map +1 -0
  199. package/dist/lib/metrics.d.ts +62 -0
  200. package/dist/lib/metrics.d.ts.map +1 -0
  201. package/dist/lib/metrics.js +166 -0
  202. package/dist/lib/metrics.js.map +1 -0
  203. package/dist/lib/metrics.test.d.ts +5 -0
  204. package/dist/lib/metrics.test.d.ts.map +1 -0
  205. package/dist/lib/metrics.test.js +189 -0
  206. package/dist/lib/metrics.test.js.map +1 -0
  207. package/dist/lib/parse-stats.d.ts +119 -0
  208. package/dist/lib/parse-stats.d.ts.map +1 -0
  209. package/dist/lib/parse-stats.js +206 -0
  210. package/dist/lib/parse-stats.js.map +1 -0
  211. package/dist/lib/parse-stats.test.d.ts +5 -0
  212. package/dist/lib/parse-stats.test.d.ts.map +1 -0
  213. package/dist/lib/parse-stats.test.js +283 -0
  214. package/dist/lib/parse-stats.test.js.map +1 -0
  215. package/dist/lib/phoenix-export.d.ts +109 -0
  216. package/dist/lib/phoenix-export.d.ts.map +1 -0
  217. package/dist/lib/phoenix-export.js +429 -0
  218. package/dist/lib/phoenix-export.js.map +1 -0
  219. package/dist/lib/phoenix-export.test.d.ts +11 -0
  220. package/dist/lib/phoenix-export.test.d.ts.map +1 -0
  221. package/dist/lib/phoenix-export.test.js +725 -0
  222. package/dist/lib/phoenix-export.test.js.map +1 -0
  223. package/dist/lib/server-utils.d.ts +14 -1
  224. package/dist/lib/server-utils.d.ts.map +1 -1
  225. package/dist/lib/server-utils.js +43 -3
  226. package/dist/lib/server-utils.js.map +1 -1
  227. package/dist/lib/shared-schemas.d.ts +28 -0
  228. package/dist/lib/shared-schemas.d.ts.map +1 -1
  229. package/dist/lib/shared-schemas.js +33 -4
  230. package/dist/lib/shared-schemas.js.map +1 -1
  231. package/dist/lib/toon-encoder.d.ts +7 -2
  232. package/dist/lib/toon-encoder.d.ts.map +1 -1
  233. package/dist/lib/toon-encoder.js +21 -6
  234. package/dist/lib/toon-encoder.js.map +1 -1
  235. package/dist/lib/toon-encoder.test.d.ts +5 -0
  236. package/dist/lib/toon-encoder.test.d.ts.map +1 -0
  237. package/dist/lib/toon-encoder.test.js +85 -0
  238. package/dist/lib/toon-encoder.test.js.map +1 -0
  239. package/dist/lib/verification-events.d.ts +100 -0
  240. package/dist/lib/verification-events.d.ts.map +1 -0
  241. package/dist/lib/verification-events.js +162 -0
  242. package/dist/lib/verification-events.js.map +1 -0
  243. package/dist/lib/verification-events.test.d.ts +5 -0
  244. package/dist/lib/verification-events.test.d.ts.map +1 -0
  245. package/dist/lib/verification-events.test.js +193 -0
  246. package/dist/lib/verification-events.test.js.map +1 -0
  247. package/dist/server.d.ts +5 -0
  248. package/dist/server.d.ts.map +1 -1
  249. package/dist/server.js +79 -21
  250. package/dist/server.js.map +1 -1
  251. package/dist/server.test.js +30 -0
  252. package/dist/server.test.js.map +1 -1
  253. package/dist/test-helpers/env-utils.d.ts +22 -0
  254. package/dist/test-helpers/env-utils.d.ts.map +1 -1
  255. package/dist/test-helpers/env-utils.js +38 -0
  256. package/dist/test-helpers/env-utils.js.map +1 -1
  257. package/dist/test-helpers/fuzz-generators.d.ts +58 -0
  258. package/dist/test-helpers/fuzz-generators.d.ts.map +1 -0
  259. package/dist/test-helpers/fuzz-generators.js +216 -0
  260. package/dist/test-helpers/fuzz-generators.js.map +1 -0
  261. package/dist/test-helpers/index.d.ts +1 -0
  262. package/dist/test-helpers/index.d.ts.map +1 -1
  263. package/dist/test-helpers/index.js +2 -0
  264. package/dist/test-helpers/index.js.map +1 -1
  265. package/dist/test-helpers/memfs-utils.d.ts +181 -0
  266. package/dist/test-helpers/memfs-utils.d.ts.map +1 -0
  267. package/dist/test-helpers/memfs-utils.js +292 -0
  268. package/dist/test-helpers/memfs-utils.js.map +1 -0
  269. package/dist/test-helpers/memfs-utils.test.d.ts +5 -0
  270. package/dist/test-helpers/memfs-utils.test.d.ts.map +1 -0
  271. package/dist/test-helpers/memfs-utils.test.js +338 -0
  272. package/dist/test-helpers/memfs-utils.test.js.map +1 -0
  273. package/dist/test-helpers/race-condition-helpers.d.ts +85 -0
  274. package/dist/test-helpers/race-condition-helpers.d.ts.map +1 -0
  275. package/dist/test-helpers/race-condition-helpers.js +279 -0
  276. package/dist/test-helpers/race-condition-helpers.js.map +1 -0
  277. package/dist/test-helpers/test-data-builders.d.ts +40 -3
  278. package/dist/test-helpers/test-data-builders.d.ts.map +1 -1
  279. package/dist/test-helpers/test-data-builders.js +54 -5
  280. package/dist/test-helpers/test-data-builders.js.map +1 -1
  281. package/dist/test-helpers/tool-validators.d.ts.map +1 -1
  282. package/dist/test-helpers/tool-validators.js +16 -1
  283. package/dist/test-helpers/tool-validators.js.map +1 -1
  284. package/dist/tools/context-stats.d.ts.map +1 -1
  285. package/dist/tools/context-stats.js +6 -8
  286. package/dist/tools/context-stats.js.map +1 -1
  287. package/dist/tools/export-confident.d.ts +145 -0
  288. package/dist/tools/export-confident.d.ts.map +1 -0
  289. package/dist/tools/export-confident.js +134 -0
  290. package/dist/tools/export-confident.js.map +1 -0
  291. package/dist/tools/export-confident.test.d.ts +7 -0
  292. package/dist/tools/export-confident.test.d.ts.map +1 -0
  293. package/dist/tools/export-confident.test.js +332 -0
  294. package/dist/tools/export-confident.test.js.map +1 -0
  295. package/dist/tools/export-datadog.d.ts +160 -0
  296. package/dist/tools/export-datadog.d.ts.map +1 -0
  297. package/dist/tools/export-datadog.js +160 -0
  298. package/dist/tools/export-datadog.js.map +1 -0
  299. package/dist/tools/export-datadog.test.d.ts +8 -0
  300. package/dist/tools/export-datadog.test.d.ts.map +1 -0
  301. package/dist/tools/export-datadog.test.js +419 -0
  302. package/dist/tools/export-datadog.test.js.map +1 -0
  303. package/dist/tools/export-langfuse.d.ts +137 -0
  304. package/dist/tools/export-langfuse.d.ts.map +1 -0
  305. package/dist/tools/export-langfuse.js +131 -0
  306. package/dist/tools/export-langfuse.js.map +1 -0
  307. package/dist/tools/export-langfuse.test.d.ts +7 -0
  308. package/dist/tools/export-langfuse.test.d.ts.map +1 -0
  309. package/dist/tools/export-langfuse.test.js +303 -0
  310. package/dist/tools/export-langfuse.test.js.map +1 -0
  311. package/dist/tools/export-phoenix.d.ts +145 -0
  312. package/dist/tools/export-phoenix.d.ts.map +1 -0
  313. package/dist/tools/export-phoenix.js +135 -0
  314. package/dist/tools/export-phoenix.js.map +1 -0
  315. package/dist/tools/export-phoenix.test.d.ts +7 -0
  316. package/dist/tools/export-phoenix.test.d.ts.map +1 -0
  317. package/dist/tools/export-phoenix.test.js +316 -0
  318. package/dist/tools/export-phoenix.test.js.map +1 -0
  319. package/dist/tools/health-check.d.ts +26 -0
  320. package/dist/tools/health-check.d.ts.map +1 -1
  321. package/dist/tools/health-check.js +36 -7
  322. package/dist/tools/health-check.js.map +1 -1
  323. package/dist/tools/index.d.ts +6 -0
  324. package/dist/tools/index.d.ts.map +1 -1
  325. package/dist/tools/index.js +6 -0
  326. package/dist/tools/index.js.map +1 -1
  327. package/dist/tools/inject-evaluations.d.ts +1315 -0
  328. package/dist/tools/inject-evaluations.d.ts.map +1 -0
  329. package/dist/tools/inject-evaluations.js +121 -0
  330. package/dist/tools/inject-evaluations.js.map +1 -0
  331. package/dist/tools/inject-evaluations.test.d.ts +5 -0
  332. package/dist/tools/inject-evaluations.test.d.ts.map +1 -0
  333. package/dist/tools/inject-evaluations.test.js +359 -0
  334. package/dist/tools/inject-evaluations.test.js.map +1 -0
  335. package/dist/tools/query-evaluations.d.ts +25 -4
  336. package/dist/tools/query-evaluations.d.ts.map +1 -1
  337. package/dist/tools/query-evaluations.js +26 -2
  338. package/dist/tools/query-evaluations.js.map +1 -1
  339. package/dist/tools/query-evaluations.test.js +53 -46
  340. package/dist/tools/query-evaluations.test.js.map +1 -1
  341. package/dist/tools/query-llm-events.js +2 -2
  342. package/dist/tools/query-llm-events.js.map +1 -1
  343. package/dist/tools/query-llm-events.test.js +6 -3
  344. package/dist/tools/query-llm-events.test.js.map +1 -1
  345. package/dist/tools/query-logs.d.ts +8 -8
  346. package/dist/tools/query-logs.js +3 -3
  347. package/dist/tools/query-logs.js.map +1 -1
  348. package/dist/tools/query-metrics.d.ts +4 -4
  349. package/dist/tools/query-metrics.js +2 -2
  350. package/dist/tools/query-metrics.js.map +1 -1
  351. package/dist/tools/query-traces.d.ts +8 -8
  352. package/dist/tools/query-verifications.d.ts +111 -0
  353. package/dist/tools/query-verifications.d.ts.map +1 -0
  354. package/dist/tools/query-verifications.js +101 -0
  355. package/dist/tools/query-verifications.js.map +1 -0
  356. package/dist/tools/query-verifications.test.d.ts +5 -0
  357. package/dist/tools/query-verifications.test.d.ts.map +1 -0
  358. package/dist/tools/query-verifications.test.js +156 -0
  359. package/dist/tools/query-verifications.test.js.map +1 -0
  360. package/dist/types/evaluation-hooks.d.ts +176 -0
  361. package/dist/types/evaluation-hooks.d.ts.map +1 -0
  362. package/dist/types/evaluation-hooks.js +49 -0
  363. package/dist/types/evaluation-hooks.js.map +1 -0
  364. package/package.json +11 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-jsonl-export.test.js","sourceRoot":"","sources":["../../src/backends/local-jsonl-export.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=local-jsonl-index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-jsonl-index.test.d.ts","sourceRoot":"","sources":["../../src/backends/local-jsonl-index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,554 @@
1
+ import { describe, it, before, after, beforeEach } from 'node:test';
2
+ import * as assert from 'node:assert';
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ import { LocalJsonlBackend, MultiDirectoryBackend } from './local-jsonl.js';
6
+ import { createTempDir, removeTempDir, getSharedTempDir, clearTempDir, removeSharedTempDir, writeJsonlFileAsync, getTestDate } from '../test-helpers/file-utils.js';
7
+ describe('LocalJsonlBackend', () => {
8
+ let tempDir;
9
+ let backend;
10
+ before(() => {
11
+ tempDir = getSharedTempDir('LocalJsonlBackend-Index');
12
+ });
13
+ beforeEach(() => {
14
+ clearTempDir(tempDir);
15
+ backend = new LocalJsonlBackend(tempDir);
16
+ });
17
+ after(() => {
18
+ removeSharedTempDir('LocalJsonlBackend-Index');
19
+ });
20
+ describe('healthCheck', () => {
21
+ it('should return error when telemetry directory does not exist', async () => {
22
+ const nonExistentBackend = new LocalJsonlBackend('/nonexistent/telemetry');
23
+ const result = await nonExistentBackend.healthCheck();
24
+ assert.strictEqual(result.status, 'error');
25
+ assert.match(result.message || '', /not found/);
26
+ });
27
+ it('should return ok when directory exists with no files', async () => {
28
+ // tempDir exists but has no files
29
+ const result = await backend.healthCheck();
30
+ assert.strictEqual(result.status, 'ok');
31
+ assert.match(result.message || '', /No telemetry files/);
32
+ });
33
+ it('should return ok with found files message', async () => {
34
+ const today = getTestDate();
35
+ // Create both traces and logs files
36
+ await writeJsonlFileAsync(path.join(tempDir, `traces-${today}.jsonl`), []);
37
+ await writeJsonlFileAsync(path.join(tempDir, `logs-${today}.jsonl`), []);
38
+ const result = await backend.healthCheck();
39
+ assert.strictEqual(result.status, 'ok');
40
+ assert.match(result.message || '', /traces.*logs/);
41
+ });
42
+ it('should include llm-events in health check message', async () => {
43
+ const today = getTestDate();
44
+ // Create all three file types
45
+ await writeJsonlFileAsync(path.join(tempDir, `traces-${today}.jsonl`), []);
46
+ await writeJsonlFileAsync(path.join(tempDir, `logs-${today}.jsonl`), []);
47
+ await writeJsonlFileAsync(path.join(tempDir, `llm-events-${today}.jsonl`), []);
48
+ const result = await backend.healthCheck();
49
+ assert.strictEqual(result.status, 'ok');
50
+ assert.match(result.message || '', /llm-events/);
51
+ });
52
+ });
53
+ describe('date range filtering', () => {
54
+ it('should filter files by startDate and endDate', async () => {
55
+ // Create files for multiple dates
56
+ await writeJsonlFileAsync(path.join(tempDir, 'traces-2026-01-26.jsonl'), [
57
+ { traceId: 'trace-26', spanId: 'span1', name: 'op1', startTime: [1700000000, 0] },
58
+ ]);
59
+ await writeJsonlFileAsync(path.join(tempDir, 'traces-2026-01-27.jsonl'), [
60
+ { traceId: 'trace-27', spanId: 'span1', name: 'op1', startTime: [1700000000, 0] },
61
+ ]);
62
+ await writeJsonlFileAsync(path.join(tempDir, 'traces-2026-01-28.jsonl'), [
63
+ { traceId: 'trace-28', spanId: 'span1', name: 'op1', startTime: [1700000000, 0] },
64
+ ]);
65
+ await writeJsonlFileAsync(path.join(tempDir, 'traces-2026-01-29.jsonl'), [
66
+ { traceId: 'trace-29', spanId: 'span1', name: 'op1', startTime: [1700000000, 0] },
67
+ ]);
68
+ const results = await backend.queryTraces({ startDate: '2026-01-27', endDate: '2026-01-28' });
69
+ assert.strictEqual(results.length, 2);
70
+ const traceIds = results.map(r => r.traceId);
71
+ assert.ok(traceIds.includes('trace-27'));
72
+ assert.ok(traceIds.includes('trace-28'));
73
+ assert.ok(!traceIds.includes('trace-26'));
74
+ assert.ok(!traceIds.includes('trace-29'));
75
+ });
76
+ it('should use today as default when no date range specified', async () => {
77
+ const today = getTestDate();
78
+ const yesterday = new Date(Date.now() - 86400000).toISOString().split('T')[0];
79
+ // Create file for today and yesterday
80
+ await writeJsonlFileAsync(path.join(tempDir, `traces-${today}.jsonl`), [
81
+ { traceId: 'today-trace', spanId: 'span1', name: 'op1', startTime: [1700000000, 0] },
82
+ ]);
83
+ await writeJsonlFileAsync(path.join(tempDir, `traces-${yesterday}.jsonl`), [
84
+ { traceId: 'yesterday-trace', spanId: 'span1', name: 'op1', startTime: [1700000000, 0] },
85
+ ]);
86
+ // Query with no date range should only get today's data
87
+ const results = await backend.queryTraces({});
88
+ assert.strictEqual(results.length, 1);
89
+ assert.strictEqual(results[0].traceId, 'today-trace');
90
+ });
91
+ });
92
+ describe('error handling', () => {
93
+ it('should handle JSONL parsing errors gracefully', async () => {
94
+ const today = getTestDate();
95
+ const filePath = path.join(tempDir, `traces-${today}.jsonl`);
96
+ // Write malformed JSON
97
+ fs.writeFileSync(filePath, 'not valid json\n{"traceId":"t1","spanId":"s1","name":"op"}\n', 'utf-8');
98
+ const results = await backend.queryTraces({});
99
+ // Should skip the malformed line and parse the valid one
100
+ assert.strictEqual(results.length, 1);
101
+ assert.strictEqual(results[0].traceId, 't1');
102
+ });
103
+ it('should skip spans with invalid time calculations', async () => {
104
+ const today = getTestDate();
105
+ const mockSpans = [
106
+ {
107
+ traceId: 'trace1',
108
+ spanId: 'span1',
109
+ name: 'op1',
110
+ startTime: [1700000000, 0],
111
+ endTime: [1700000000, 0],
112
+ },
113
+ ];
114
+ await writeJsonlFileAsync(path.join(tempDir, `traces-${today}.jsonl`), mockSpans);
115
+ const results = await backend.queryTraces({});
116
+ assert.strictEqual(results.length, 1);
117
+ assert.strictEqual(results[0].durationMs, 0);
118
+ });
119
+ });
120
+ });
121
+ describe('insertSortedBounded helper', () => {
122
+ // Test the insertSortedBounded function by observing its behavior
123
+ // through MultiDirectoryBackend's query methods
124
+ it('should maintain sorted order by timestamp in traces', async () => {
125
+ const projectDir = createTempDir();
126
+ try {
127
+ const today = getTestDate();
128
+ const localTelemetry = path.join(projectDir, 'telemetry');
129
+ fs.mkdirSync(localTelemetry, { recursive: true });
130
+ // Create traces with various timestamps
131
+ await writeJsonlFileAsync(path.join(localTelemetry, `traces-${today}.jsonl`), [
132
+ { traceId: 'sorted-test-1', spanId: 's1', name: 'SortedTestOp', startTime: [1700000005, 0] },
133
+ { traceId: 'sorted-test-2', spanId: 's2', name: 'SortedTestOp', startTime: [1700000001, 0] },
134
+ { traceId: 'sorted-test-3', spanId: 's3', name: 'SortedTestOp', startTime: [1700000009, 0] },
135
+ { traceId: 'sorted-test-4', spanId: 's4', name: 'SortedTestOp', startTime: [1700000003, 0] },
136
+ { traceId: 'sorted-test-5', spanId: 's5', name: 'SortedTestOp', startTime: [1700000007, 0] },
137
+ ]);
138
+ const backend = new MultiDirectoryBackend(projectDir);
139
+ const results = await backend.queryTraces({ spanName: 'SortedTestOp' });
140
+ // Should be sorted by timestamp descending (most recent first)
141
+ assert.strictEqual(results.length, 5);
142
+ assert.strictEqual(results[0].traceId, 'sorted-test-3'); // 1700000009
143
+ assert.strictEqual(results[1].traceId, 'sorted-test-5'); // 1700000007
144
+ assert.strictEqual(results[2].traceId, 'sorted-test-1'); // 1700000005
145
+ assert.strictEqual(results[3].traceId, 'sorted-test-4'); // 1700000003
146
+ assert.strictEqual(results[4].traceId, 'sorted-test-2'); // 1700000001
147
+ }
148
+ finally {
149
+ removeTempDir(projectDir);
150
+ }
151
+ });
152
+ it('should limit results to maxSize efficiently', async () => {
153
+ const projectDir = createTempDir();
154
+ try {
155
+ const today = getTestDate();
156
+ const localTelemetry = path.join(projectDir, 'telemetry');
157
+ fs.mkdirSync(localTelemetry, { recursive: true });
158
+ // Create 20 traces
159
+ await writeJsonlFileAsync(path.join(localTelemetry, `traces-${today}.jsonl`), Array.from({ length: 20 }, (_, i) => ({
160
+ traceId: `bounded-test-${i}`,
161
+ spanId: `s${i}`,
162
+ name: 'BoundedTestOp',
163
+ startTime: [1700000000 + i, 0],
164
+ })));
165
+ const backend = new MultiDirectoryBackend(projectDir);
166
+ const results = await backend.queryTraces({ spanName: 'BoundedTestOp', limit: 5 });
167
+ // Should return only 5 results
168
+ assert.strictEqual(results.length, 5);
169
+ // Results should be sorted by timestamp descending
170
+ // LocalJsonlBackend returns first 5 found (0-4), then sorted
171
+ assert.strictEqual(results[0].traceId, 'bounded-test-4'); // highest of 0-4
172
+ assert.strictEqual(results[4].traceId, 'bounded-test-0'); // lowest of 0-4
173
+ }
174
+ finally {
175
+ removeTempDir(projectDir);
176
+ }
177
+ });
178
+ it('should maintain sorted order in logs', async () => {
179
+ const projectDir = createTempDir();
180
+ try {
181
+ const today = getTestDate();
182
+ const localTelemetry = path.join(projectDir, 'telemetry');
183
+ fs.mkdirSync(localTelemetry, { recursive: true });
184
+ await writeJsonlFileAsync(path.join(localTelemetry, `logs-${today}.jsonl`), [
185
+ { timestamp: `${today}T10:00:00Z`, body: 'SortedLogTest_A' },
186
+ { timestamp: `${today}T12:00:00Z`, body: 'SortedLogTest_B' },
187
+ { timestamp: `${today}T08:00:00Z`, body: 'SortedLogTest_C' },
188
+ { timestamp: `${today}T14:00:00Z`, body: 'SortedLogTest_D' },
189
+ ]);
190
+ const backend = new MultiDirectoryBackend(projectDir);
191
+ const results = await backend.queryLogs({ search: 'SortedLogTest' });
192
+ // Should be sorted by timestamp descending
193
+ assert.strictEqual(results.length, 4);
194
+ assert.strictEqual(results[0].body, 'SortedLogTest_D'); // 14:00
195
+ assert.strictEqual(results[1].body, 'SortedLogTest_B'); // 12:00
196
+ assert.strictEqual(results[2].body, 'SortedLogTest_A'); // 10:00
197
+ assert.strictEqual(results[3].body, 'SortedLogTest_C'); // 08:00
198
+ }
199
+ finally {
200
+ removeTempDir(projectDir);
201
+ }
202
+ });
203
+ it('should maintain sorted order in LLM events', async () => {
204
+ const projectDir = createTempDir();
205
+ try {
206
+ const today = getTestDate();
207
+ const localTelemetry = path.join(projectDir, 'telemetry');
208
+ fs.mkdirSync(localTelemetry, { recursive: true });
209
+ await writeJsonlFileAsync(path.join(localTelemetry, `llm-events-${today}.jsonl`), [
210
+ { timestamp: `${today}T09:00:00Z`, name: 'SortedLLMTest.A', attributes: {} },
211
+ { timestamp: `${today}T15:00:00Z`, name: 'SortedLLMTest.B', attributes: {} },
212
+ { timestamp: `${today}T11:00:00Z`, name: 'SortedLLMTest.C', attributes: {} },
213
+ ]);
214
+ const backend = new MultiDirectoryBackend(projectDir);
215
+ const results = await backend.queryLLMEvents({ eventName: 'SortedLLMTest' });
216
+ // Should be sorted by timestamp descending
217
+ assert.strictEqual(results.length, 3);
218
+ assert.strictEqual(results[0].name, 'SortedLLMTest.B'); // 15:00
219
+ assert.strictEqual(results[1].name, 'SortedLLMTest.C'); // 11:00
220
+ assert.strictEqual(results[2].name, 'SortedLLMTest.A'); // 09:00
221
+ }
222
+ finally {
223
+ removeTempDir(projectDir);
224
+ }
225
+ });
226
+ });
227
+ describe('streaming JSONL optimization', () => {
228
+ it('should handle large files with streaming', async () => {
229
+ const tempDir = createTempDir();
230
+ try {
231
+ const today = getTestDate();
232
+ // Create a file with many records
233
+ const spans = Array.from({ length: 500 }, (_, i) => ({
234
+ traceId: `stream-test-${i}`,
235
+ spanId: `span-${i}`,
236
+ name: 'StreamTestOp',
237
+ startTime: [1700000000 + i, 0],
238
+ }));
239
+ await writeJsonlFileAsync(path.join(tempDir, `traces-${today}.jsonl`), spans);
240
+ const backend = new LocalJsonlBackend(tempDir);
241
+ const results = await backend.queryTraces({ spanName: 'StreamTestOp', limit: 50 });
242
+ // Should return limited results without loading all into memory
243
+ assert.strictEqual(results.length, 50);
244
+ }
245
+ finally {
246
+ removeTempDir(tempDir);
247
+ }
248
+ });
249
+ it('should terminate early when limit is reached', async () => {
250
+ const tempDir = createTempDir();
251
+ try {
252
+ const today = getTestDate();
253
+ // Create file with many records
254
+ const logs = Array.from({ length: 1000 }, (_, i) => ({
255
+ timestamp: new Date(Date.now() - i * 1000).toISOString(),
256
+ body: `StreamingLog_${i}`,
257
+ severity: 'INFO',
258
+ }));
259
+ await writeJsonlFileAsync(path.join(tempDir, `logs-${today}.jsonl`), logs);
260
+ const backend = new LocalJsonlBackend(tempDir);
261
+ const start = Date.now();
262
+ const results = await backend.queryLogs({ search: 'StreamingLog', limit: 10 });
263
+ const elapsed = Date.now() - start;
264
+ // Should return quickly with early termination
265
+ assert.strictEqual(results.length, 10);
266
+ // Processing should be fast due to early termination
267
+ assert.ok(elapsed < 1000, `Query took too long: ${elapsed}ms`);
268
+ }
269
+ finally {
270
+ removeTempDir(tempDir);
271
+ }
272
+ });
273
+ });
274
+ describe('MultiDirectoryBackend', () => {
275
+ let projectDir;
276
+ before(() => {
277
+ projectDir = getSharedTempDir('MultiDirectoryBackend');
278
+ });
279
+ beforeEach(() => {
280
+ // Clear project directory for each test
281
+ clearTempDir(projectDir);
282
+ });
283
+ after(() => {
284
+ removeSharedTempDir('MultiDirectoryBackend');
285
+ });
286
+ describe('constructor and getDirectories', () => {
287
+ it('should return directories when local telemetry dirs exist', () => {
288
+ // Create local telemetry directory
289
+ const localTelemetry = path.join(projectDir, 'telemetry');
290
+ fs.mkdirSync(localTelemetry, { recursive: true });
291
+ const backend = new MultiDirectoryBackend(projectDir);
292
+ const dirs = backend.getDirectories();
293
+ assert.ok(Array.isArray(dirs));
294
+ // Should include the local telemetry directory (resolved path due to symlink protection)
295
+ const resolvedPath = fs.realpathSync(localTelemetry);
296
+ const localDir = dirs.find(d => d.source === 'local' && d.path === resolvedPath);
297
+ assert.ok(localDir);
298
+ });
299
+ it('should have name property set to multi-directory', () => {
300
+ const backend = new MultiDirectoryBackend(projectDir);
301
+ assert.strictEqual(backend.name, 'multi-directory');
302
+ });
303
+ it('should detect .telemetry local directory', () => {
304
+ const localTelemetry = path.join(projectDir, '.telemetry');
305
+ fs.mkdirSync(localTelemetry, { recursive: true });
306
+ const backend = new MultiDirectoryBackend(projectDir);
307
+ const dirs = backend.getDirectories();
308
+ // Compare against resolved path (due to symlink protection)
309
+ const resolvedPath = fs.realpathSync(localTelemetry);
310
+ const localDir = dirs.find(d => d.path === resolvedPath);
311
+ assert.ok(localDir);
312
+ assert.strictEqual(localDir?.source, 'local');
313
+ });
314
+ it('should detect .claude/telemetry local directory', () => {
315
+ const localTelemetry = path.join(projectDir, '.claude', 'telemetry');
316
+ fs.mkdirSync(localTelemetry, { recursive: true });
317
+ const backend = new MultiDirectoryBackend(projectDir);
318
+ const dirs = backend.getDirectories();
319
+ // Compare against resolved path (due to symlink protection)
320
+ const resolvedPath = fs.realpathSync(localTelemetry);
321
+ const localDir = dirs.find(d => d.path === resolvedPath);
322
+ assert.ok(localDir);
323
+ assert.strictEqual(localDir?.source, 'local');
324
+ });
325
+ });
326
+ describe('queryTraces', () => {
327
+ it('should query traces from local telemetry directory', async () => {
328
+ const today = getTestDate();
329
+ const localTelemetry = path.join(projectDir, 'telemetry');
330
+ fs.mkdirSync(localTelemetry, { recursive: true });
331
+ // Create traces in local directory with unique IDs
332
+ await writeJsonlFileAsync(path.join(localTelemetry, `traces-${today}.jsonl`), [
333
+ { traceId: 'multidir-unique-test-abc123-1', spanId: 'span1', name: 'MultiDirUniqueOp_XYZ', startTime: [1700000000, 0] },
334
+ { traceId: 'multidir-unique-test-abc123-2', spanId: 'span2', name: 'MultiDirUniqueOp_XYZ', startTime: [1700000002, 0] },
335
+ ]);
336
+ const backend = new MultiDirectoryBackend(projectDir);
337
+ // Use spanName filter to find our specific test traces
338
+ const results = await backend.queryTraces({ spanName: 'MultiDirUniqueOp_XYZ' });
339
+ assert.strictEqual(results.length, 2);
340
+ assert.ok(results.some(t => t.traceId === 'multidir-unique-test-abc123-1'), 'Should find test trace 1');
341
+ assert.ok(results.some(t => t.traceId === 'multidir-unique-test-abc123-2'), 'Should find test trace 2');
342
+ });
343
+ it('should merge and sort traces by timestamp', async () => {
344
+ const today = getTestDate();
345
+ // Create two local telemetry directories
346
+ const localTelemetry1 = path.join(projectDir, 'telemetry');
347
+ const localTelemetry2 = path.join(projectDir, '.telemetry');
348
+ fs.mkdirSync(localTelemetry1, { recursive: true });
349
+ fs.mkdirSync(localTelemetry2, { recursive: true });
350
+ // Create traces with different timestamps and unique operation name
351
+ await writeJsonlFileAsync(path.join(localTelemetry1, `traces-${today}.jsonl`), [
352
+ { traceId: 'multidir-sort-old-xyz789', spanId: 'span1', name: 'MultiDirSortOp_ABC', startTime: [1700000000, 0] },
353
+ ]);
354
+ await writeJsonlFileAsync(path.join(localTelemetry2, `traces-${today}.jsonl`), [
355
+ { traceId: 'multidir-sort-new-xyz789', spanId: 'span2', name: 'MultiDirSortOp_ABC', startTime: [1700000010, 0] },
356
+ ]);
357
+ const backend = new MultiDirectoryBackend(projectDir);
358
+ const results = await backend.queryTraces({ spanName: 'MultiDirSortOp_ABC' });
359
+ assert.strictEqual(results.length, 2);
360
+ // Newer trace should be first (sorted by startTimeUnixNano descending)
361
+ assert.strictEqual(results[0].traceId, 'multidir-sort-new-xyz789');
362
+ assert.strictEqual(results[1].traceId, 'multidir-sort-old-xyz789');
363
+ });
364
+ it('should respect limit parameter', async () => {
365
+ const today = getTestDate();
366
+ const localTelemetry = path.join(projectDir, 'telemetry');
367
+ fs.mkdirSync(localTelemetry, { recursive: true });
368
+ // Create many traces with unique prefix
369
+ await writeJsonlFileAsync(path.join(localTelemetry, `traces-${today}.jsonl`), Array.from({ length: 150 }, (_, i) => ({
370
+ traceId: `multidir-limit-trace-${i}`,
371
+ spanId: `span${i}`,
372
+ name: `MultiDirLimitOp_${i}`,
373
+ startTime: [1700000000 + i, 0],
374
+ })));
375
+ const backend = new MultiDirectoryBackend(projectDir);
376
+ const results = await backend.queryTraces({ spanName: 'MultiDirLimitOp', limit: 50 });
377
+ assert.ok(results.length <= 50);
378
+ });
379
+ });
380
+ describe('queryLogs', () => {
381
+ it('should query logs from local telemetry directory', async () => {
382
+ const today = getTestDate();
383
+ const localTelemetry = path.join(projectDir, 'telemetry');
384
+ fs.mkdirSync(localTelemetry, { recursive: true });
385
+ await writeJsonlFileAsync(path.join(localTelemetry, `logs-${today}.jsonl`), [
386
+ { timestamp: `${today}T10:00:00Z`, body: 'MultiDirUniqueTestLog_ABC123_1', severity: 'INFO' },
387
+ { timestamp: `${today}T11:00:00Z`, body: 'MultiDirUniqueTestLog_ABC123_2', severity: 'ERROR' },
388
+ ]);
389
+ const backend = new MultiDirectoryBackend(projectDir);
390
+ // Use search filter to find our specific test logs
391
+ const results = await backend.queryLogs({ search: 'MultiDirUniqueTestLog_ABC123' });
392
+ assert.strictEqual(results.length, 2);
393
+ assert.ok(results.some(l => l.body === 'MultiDirUniqueTestLog_ABC123_1'), 'Should find test log 1');
394
+ assert.ok(results.some(l => l.body === 'MultiDirUniqueTestLog_ABC123_2'), 'Should find test log 2');
395
+ });
396
+ it('should sort logs by timestamp descending', async () => {
397
+ const today = getTestDate();
398
+ const localTelemetry = path.join(projectDir, 'telemetry');
399
+ fs.mkdirSync(localTelemetry, { recursive: true });
400
+ await writeJsonlFileAsync(path.join(localTelemetry, `logs-${today}.jsonl`), [
401
+ { timestamp: `${today}T08:00:00Z`, body: 'MultiDirSortTest_Early', severity: 'INFO' },
402
+ { timestamp: `${today}T12:00:00Z`, body: 'MultiDirSortTest_Late', severity: 'INFO' },
403
+ ]);
404
+ const backend = new MultiDirectoryBackend(projectDir);
405
+ const results = await backend.queryLogs({ search: 'MultiDirSortTest' });
406
+ assert.strictEqual(results.length, 2);
407
+ // Later log should come first (sorted descending)
408
+ assert.strictEqual(results[0].body, 'MultiDirSortTest_Late');
409
+ assert.strictEqual(results[1].body, 'MultiDirSortTest_Early');
410
+ });
411
+ });
412
+ describe('queryMetrics', () => {
413
+ it('should query metrics from local telemetry directory', async () => {
414
+ const today = getTestDate();
415
+ const localTelemetry = path.join(projectDir, 'telemetry');
416
+ fs.mkdirSync(localTelemetry, { recursive: true });
417
+ await writeJsonlFileAsync(path.join(localTelemetry, `metrics-${today}.jsonl`), [
418
+ { timestamp: `${today}T10:00:00Z`, name: 'multidir.unique.xyz789.metric1', value: 100, type: 'gauge' },
419
+ { timestamp: `${today}T11:00:00Z`, name: 'multidir.unique.xyz789.metric2', value: 200, type: 'gauge' },
420
+ ]);
421
+ const backend = new MultiDirectoryBackend(projectDir);
422
+ // Use metricName filter to find our specific test metrics
423
+ const results = await backend.queryMetrics({ metricName: 'multidir.unique.xyz789' });
424
+ assert.strictEqual(results.length, 2);
425
+ assert.ok(results.some(m => m.name === 'multidir.unique.xyz789.metric1'), 'Should find test metric 1');
426
+ assert.ok(results.some(m => m.name === 'multidir.unique.xyz789.metric2'), 'Should find test metric 2');
427
+ });
428
+ it('should respect limit parameter', async () => {
429
+ const today = getTestDate();
430
+ const localTelemetry = path.join(projectDir, 'telemetry');
431
+ fs.mkdirSync(localTelemetry, { recursive: true });
432
+ await writeJsonlFileAsync(path.join(localTelemetry, `metrics-${today}.jsonl`), Array.from({ length: 150 }, (_, i) => ({
433
+ timestamp: `${today}T10:${String(Math.floor(i / 60) % 60).padStart(2, '0')}:${String(i % 60).padStart(2, '0')}Z`,
434
+ name: `multidir.limit.abc123.metric-${i}`,
435
+ value: i * 10,
436
+ type: 'gauge',
437
+ })));
438
+ const backend = new MultiDirectoryBackend(projectDir);
439
+ const results = await backend.queryMetrics({ metricName: 'multidir.limit.abc123', limit: 50 });
440
+ assert.ok(results.length <= 50);
441
+ });
442
+ });
443
+ describe('queryLLMEvents', () => {
444
+ it('should query LLM events from local telemetry directory', async () => {
445
+ const today = getTestDate();
446
+ const localTelemetry = path.join(projectDir, 'telemetry');
447
+ fs.mkdirSync(localTelemetry, { recursive: true });
448
+ await writeJsonlFileAsync(path.join(localTelemetry, `llm-events-${today}.jsonl`), [
449
+ { timestamp: `${today}T10:00:00Z`, name: 'multidir.unique.xyz456.llm.event1', attributes: { model: 'claude' } },
450
+ { timestamp: `${today}T11:00:00Z`, name: 'multidir.unique.xyz456.llm.event2', attributes: { model: 'gpt' } },
451
+ ]);
452
+ const backend = new MultiDirectoryBackend(projectDir);
453
+ // Use eventName filter to find our specific test events
454
+ const results = await backend.queryLLMEvents({ eventName: 'multidir.unique.xyz456' });
455
+ assert.strictEqual(results.length, 2);
456
+ assert.ok(results.some(e => e.name === 'multidir.unique.xyz456.llm.event1'), 'Should find test event 1');
457
+ assert.ok(results.some(e => e.name === 'multidir.unique.xyz456.llm.event2'), 'Should find test event 2');
458
+ });
459
+ it('should sort LLM events by timestamp descending', async () => {
460
+ const today = getTestDate();
461
+ const localTelemetry = path.join(projectDir, 'telemetry');
462
+ fs.mkdirSync(localTelemetry, { recursive: true });
463
+ await writeJsonlFileAsync(path.join(localTelemetry, `llm-events-${today}.jsonl`), [
464
+ { timestamp: `${today}T08:00:00Z`, name: 'multidir.sort.abc789.early', attributes: {} },
465
+ { timestamp: `${today}T12:00:00Z`, name: 'multidir.sort.abc789.late', attributes: {} },
466
+ ]);
467
+ const backend = new MultiDirectoryBackend(projectDir);
468
+ const results = await backend.queryLLMEvents({ eventName: 'multidir.sort.abc789' });
469
+ assert.strictEqual(results.length, 2);
470
+ // Later event should be first (sorted descending)
471
+ assert.strictEqual(results[0].name, 'multidir.sort.abc789.late');
472
+ assert.strictEqual(results[1].name, 'multidir.sort.abc789.early');
473
+ });
474
+ });
475
+ describe('healthCheck', () => {
476
+ it('should return error when no directories found', async () => {
477
+ // Create a backend with cwd that has no telemetry directories
478
+ // AND ensure global telemetry doesn't exist for this test
479
+ const emptyProject = createTempDir();
480
+ try {
481
+ const backend = new MultiDirectoryBackend(emptyProject);
482
+ // Only test error condition if we actually have no directories
483
+ if (backend.getDirectories().length === 0) {
484
+ const health = await backend.healthCheck();
485
+ assert.strictEqual(health.status, 'error');
486
+ assert.ok(health.message?.includes('No telemetry directories'));
487
+ }
488
+ }
489
+ finally {
490
+ removeTempDir(emptyProject);
491
+ }
492
+ });
493
+ it('should return ok when local telemetry directory exists', async () => {
494
+ const today = getTestDate();
495
+ const localTelemetry = path.join(projectDir, 'telemetry');
496
+ fs.mkdirSync(localTelemetry, { recursive: true });
497
+ // Create some telemetry files
498
+ await writeJsonlFileAsync(path.join(localTelemetry, `traces-${today}.jsonl`), []);
499
+ const backend = new MultiDirectoryBackend(projectDir);
500
+ const health = await backend.healthCheck();
501
+ assert.strictEqual(health.status, 'ok');
502
+ assert.ok(health.directories);
503
+ assert.ok(health.directories.length > 0);
504
+ });
505
+ it('should include directory statuses in health response', async () => {
506
+ const localTelemetry = path.join(projectDir, 'telemetry');
507
+ fs.mkdirSync(localTelemetry, { recursive: true });
508
+ const backend = new MultiDirectoryBackend(projectDir);
509
+ const health = await backend.healthCheck();
510
+ if (health.directories) {
511
+ for (const dir of health.directories) {
512
+ assert.ok(dir.path);
513
+ assert.ok(dir.source);
514
+ assert.ok(dir.status);
515
+ }
516
+ }
517
+ });
518
+ it('should report correct directory count in message', async () => {
519
+ const localTelemetry = path.join(projectDir, 'telemetry');
520
+ fs.mkdirSync(localTelemetry, { recursive: true });
521
+ const backend = new MultiDirectoryBackend(projectDir);
522
+ const health = await backend.healthCheck();
523
+ assert.ok(health.message?.includes('telemetry director'));
524
+ });
525
+ });
526
+ describe('getCacheStats', () => {
527
+ it('should return aggregated cache stats from all backends', () => {
528
+ const localTelemetry = path.join(projectDir, 'telemetry');
529
+ fs.mkdirSync(localTelemetry, { recursive: true });
530
+ const backend = new MultiDirectoryBackend(projectDir);
531
+ const stats = backend.getCacheStats();
532
+ assert.ok(stats.traces, 'Should have traces stats');
533
+ assert.ok(stats.logs, 'Should have logs stats');
534
+ assert.ok(stats.metrics, 'Should have metrics stats');
535
+ assert.ok(stats.llmEvents, 'Should have llmEvents stats');
536
+ });
537
+ it('should have correct structure for aggregated stats', () => {
538
+ const localTelemetry = path.join(projectDir, 'telemetry');
539
+ fs.mkdirSync(localTelemetry, { recursive: true });
540
+ const backend = new MultiDirectoryBackend(projectDir);
541
+ const stats = backend.getCacheStats();
542
+ for (const key of ['traces', 'logs', 'metrics', 'llmEvents']) {
543
+ const stat = stats[key];
544
+ assert.strictEqual(typeof stat.hits, 'number', `${key} should have hits`);
545
+ assert.strictEqual(typeof stat.misses, 'number', `${key} should have misses`);
546
+ assert.strictEqual(typeof stat.evictions, 'number', `${key} should have evictions`);
547
+ assert.strictEqual(typeof stat.size, 'number', `${key} should have size`);
548
+ assert.strictEqual(typeof stat.hitRate, 'number', `${key} should have hitRate`);
549
+ assert.ok(stat.hitRate >= 0 && stat.hitRate <= 1, `${key} hitRate should be between 0 and 1`);
550
+ }
551
+ });
552
+ });
553
+ });
554
+ //# sourceMappingURL=local-jsonl-index.test.js.map