@opensearch-project/agent-health 0.4.0 → 0.6.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 (551) hide show
  1. package/README.md +36 -5
  2. package/cli/dist/index.js +8292 -2938
  3. package/deployment/cloudformation/agent-health-observability.yaml +223 -32
  4. package/dist/assets/index-BfxtxmKc.css +1 -0
  5. package/dist/assets/index-CrjAfDHu.js +243 -0
  6. package/dist/index.html +2 -2
  7. package/docs/ARCHITECTURE.md +450 -0
  8. package/docs/BACKEND_JOB_QUEUE.md +405 -0
  9. package/docs/CLAUDE_CODE_TELEMETRY.md +283 -0
  10. package/docs/CLI.md +474 -0
  11. package/docs/CODING_AGENT_ANALYTICS.md +298 -0
  12. package/docs/CONFIGURATION.md +388 -0
  13. package/docs/CONNECTORS.md +536 -0
  14. package/docs/INSTRUMENT_WITH_OTEL.md +397 -0
  15. package/docs/ML-COMMONS-SETUP.md +289 -0
  16. package/docs/NPX_PACKAGING.md +195 -0
  17. package/docs/PERFORMANCE-MONITORING.md +200 -0
  18. package/docs/PERFORMANCE.md +390 -0
  19. package/docs/PI_PROFILING.md +169 -0
  20. package/docs/PLAN-non-agui-agent-support.md +525 -0
  21. package/docs/SDK.md +626 -0
  22. package/docs/SKILLS.md +264 -0
  23. package/docs/STORAGE_INDEX_FIELD_LIMITS.md +216 -0
  24. package/docs/blogs/2026-02-28-opensearch-agent-health.md +200 -0
  25. package/docs/blogs/getting-started-blog.md +608 -0
  26. package/docs/diagrams/Agent-health.excalidraw +5656 -0
  27. package/docs/diagrams/architecture.png +0 -0
  28. package/docs/plans/field-redesign.md +468 -0
  29. package/docs/rfcs/001-coding-agent-analytics.md +374 -0
  30. package/docs/rfcs/002-enterprise-leaderboard.md +267 -0
  31. package/docs/rfcs/003-remote-aggregation.md +146 -0
  32. package/docs/rfcs/004-test-sdk-v2.md +599 -0
  33. package/docs/skills/AGENT_HEALTH.md +652 -0
  34. package/docs/skills/AGENT_PROFILE.md +191 -0
  35. package/docs/skills/add-connector/SKILL.md +68 -0
  36. package/docs/skills/agent-health-profile/SKILL.md +40 -0
  37. package/docs/skills/config-auth/SKILL.md +194 -0
  38. package/docs/skills/config-auth/evals/evals.json +35 -0
  39. package/docs/skills/create-pr/SKILL.md +73 -0
  40. package/docs/skills/instrument-otel/SKILL.md +84 -0
  41. package/docs/skills/write-test/SKILL.md +124 -0
  42. package/docs/ui prd.md +376 -0
  43. package/examples/README.md +53 -0
  44. package/examples/config/agent-health.config.example.ts +155 -0
  45. package/examples/connectors/echo-connector.ts +131 -0
  46. package/examples/eval-files/demo.eval.js +128 -0
  47. package/examples/eval-files/ops-rca-classification.eval.js +71 -0
  48. package/examples/eval-files/ops-rca-evaluator.json +15 -0
  49. package/examples/eval-files/sdk-demo.eval.js +72 -0
  50. package/examples/eval-files/sdk-describe-demo.eval.js +50 -0
  51. package/examples/eval-files/sdk-hooks-demo.eval.js +99 -0
  52. package/examples/pi-profiling/README.md +77 -0
  53. package/examples/pi-profiling/agent-health-profile.ts +417 -0
  54. package/lib/dist/lib/agentUtils.d.ts +29 -0
  55. package/lib/dist/lib/agentUtils.d.ts.map +1 -0
  56. package/lib/dist/lib/agentUtils.js +43 -0
  57. package/lib/dist/lib/agentUtils.js.map +1 -0
  58. package/lib/dist/lib/bedrockCompat.d.ts +27 -0
  59. package/lib/dist/lib/bedrockCompat.d.ts.map +1 -0
  60. package/lib/dist/lib/bedrockCompat.js +83 -0
  61. package/lib/dist/lib/bedrockCompat.js.map +1 -0
  62. package/lib/dist/lib/benchmarkExport.d.ts +14 -0
  63. package/lib/dist/lib/benchmarkExport.d.ts.map +1 -0
  64. package/lib/dist/lib/benchmarkExport.js +41 -0
  65. package/lib/dist/lib/benchmarkExport.js.map +1 -0
  66. package/lib/dist/lib/benchmarkImage.d.ts +52 -0
  67. package/lib/dist/lib/benchmarkImage.d.ts.map +1 -0
  68. package/lib/dist/lib/benchmarkImage.js +113 -0
  69. package/lib/dist/lib/benchmarkImage.js.map +1 -0
  70. package/lib/dist/lib/benchmarkVersionUtils.d.ts +50 -0
  71. package/lib/dist/lib/benchmarkVersionUtils.d.ts.map +1 -0
  72. package/lib/dist/lib/benchmarkVersionUtils.js +89 -0
  73. package/lib/dist/lib/benchmarkVersionUtils.js.map +1 -0
  74. package/lib/dist/lib/chunkedFetch.d.ts +18 -0
  75. package/lib/dist/lib/chunkedFetch.d.ts.map +1 -0
  76. package/lib/dist/lib/chunkedFetch.js +40 -0
  77. package/lib/dist/lib/chunkedFetch.js.map +1 -0
  78. package/lib/dist/lib/comparisonInsights.d.ts +104 -0
  79. package/lib/dist/lib/comparisonInsights.d.ts.map +1 -0
  80. package/lib/dist/lib/comparisonInsights.js +212 -0
  81. package/lib/dist/lib/comparisonInsights.js.map +1 -0
  82. package/lib/dist/lib/config/defineConfig.d.ts +27 -0
  83. package/lib/dist/lib/config/defineConfig.d.ts.map +1 -0
  84. package/lib/dist/lib/config/defineConfig.js +28 -0
  85. package/lib/dist/lib/config/defineConfig.js.map +1 -0
  86. package/lib/dist/lib/config/index.d.ts +9 -0
  87. package/lib/dist/lib/config/index.d.ts.map +1 -0
  88. package/lib/dist/lib/config/index.js +8 -0
  89. package/lib/dist/lib/config/index.js.map +1 -0
  90. package/lib/dist/lib/config/loader.d.ts +39 -0
  91. package/lib/dist/lib/config/loader.d.ts.map +1 -0
  92. package/lib/dist/lib/config/loader.js +263 -0
  93. package/lib/dist/lib/config/loader.js.map +1 -0
  94. package/lib/dist/lib/config/statePaths.d.ts +61 -0
  95. package/lib/dist/lib/config/statePaths.d.ts.map +1 -0
  96. package/lib/dist/lib/config/statePaths.js +188 -0
  97. package/lib/dist/lib/config/statePaths.js.map +1 -0
  98. package/lib/dist/lib/config/types.d.ts +245 -0
  99. package/lib/dist/lib/config/types.d.ts.map +1 -0
  100. package/lib/dist/lib/config/types.js +6 -0
  101. package/lib/dist/lib/config/types.js.map +1 -0
  102. package/lib/dist/lib/config.d.ts +39 -0
  103. package/lib/dist/lib/config.d.ts.map +1 -0
  104. package/lib/dist/lib/config.js +118 -0
  105. package/lib/dist/lib/config.js.map +1 -0
  106. package/lib/dist/lib/constants.d.ts +81 -0
  107. package/lib/dist/lib/constants.d.ts.map +1 -0
  108. package/lib/dist/lib/constants.js +374 -0
  109. package/lib/dist/lib/constants.js.map +1 -0
  110. package/lib/dist/lib/contextFormat.d.ts +26 -0
  111. package/lib/dist/lib/contextFormat.d.ts.map +1 -0
  112. package/lib/dist/lib/contextFormat.js +28 -0
  113. package/lib/dist/lib/contextFormat.js.map +1 -0
  114. package/lib/dist/lib/contextUtilization.d.ts +23 -0
  115. package/lib/dist/lib/contextUtilization.d.ts.map +1 -0
  116. package/lib/dist/lib/contextUtilization.js +72 -0
  117. package/lib/dist/lib/contextUtilization.js.map +1 -0
  118. package/lib/dist/lib/dashboardMetrics.d.ts +87 -0
  119. package/lib/dist/lib/dashboardMetrics.d.ts.map +1 -0
  120. package/lib/dist/lib/dashboardMetrics.js +242 -0
  121. package/lib/dist/lib/dashboardMetrics.js.map +1 -0
  122. package/lib/dist/lib/dataSourceConfig.d.ts +108 -0
  123. package/lib/dist/lib/dataSourceConfig.d.ts.map +1 -0
  124. package/lib/dist/lib/dataSourceConfig.js +166 -0
  125. package/lib/dist/lib/dataSourceConfig.js.map +1 -0
  126. package/lib/dist/lib/debug.d.ts +26 -0
  127. package/lib/dist/lib/debug.d.ts.map +1 -0
  128. package/lib/dist/lib/debug.js +132 -0
  129. package/lib/dist/lib/debug.js.map +1 -0
  130. package/lib/dist/lib/diagnostics.d.ts +28 -0
  131. package/lib/dist/lib/diagnostics.d.ts.map +1 -0
  132. package/lib/dist/lib/diagnostics.js +65 -0
  133. package/lib/dist/lib/diagnostics.js.map +1 -0
  134. package/lib/dist/lib/envCompat.d.ts +27 -0
  135. package/lib/dist/lib/envCompat.d.ts.map +1 -0
  136. package/lib/dist/lib/envCompat.js +82 -0
  137. package/lib/dist/lib/envCompat.js.map +1 -0
  138. package/lib/dist/lib/evaluationRerun.d.ts +63 -0
  139. package/lib/dist/lib/evaluationRerun.d.ts.map +1 -0
  140. package/lib/dist/lib/evaluationRerun.js +85 -0
  141. package/lib/dist/lib/evaluationRerun.js.map +1 -0
  142. package/lib/dist/lib/findPackageRoot.d.ts +7 -0
  143. package/lib/dist/lib/findPackageRoot.d.ts.map +1 -0
  144. package/lib/dist/lib/findPackageRoot.js +57 -0
  145. package/lib/dist/lib/findPackageRoot.js.map +1 -0
  146. package/lib/dist/lib/hooks.d.ts +36 -0
  147. package/lib/dist/lib/hooks.d.ts.map +1 -0
  148. package/lib/dist/lib/hooks.js +112 -0
  149. package/lib/dist/lib/hooks.js.map +1 -0
  150. package/lib/dist/lib/index.d.ts +47 -0
  151. package/lib/dist/lib/index.d.ts.map +1 -0
  152. package/lib/dist/lib/index.js +62 -0
  153. package/lib/dist/lib/index.js.map +1 -0
  154. package/lib/dist/lib/labels.d.ts +90 -0
  155. package/lib/dist/lib/labels.d.ts.map +1 -0
  156. package/lib/dist/lib/labels.js +158 -0
  157. package/lib/dist/lib/labels.js.map +1 -0
  158. package/lib/dist/lib/markdown.d.ts +16 -0
  159. package/lib/dist/lib/markdown.d.ts.map +1 -0
  160. package/lib/dist/lib/markdown.js +42 -0
  161. package/lib/dist/lib/markdown.js.map +1 -0
  162. package/lib/dist/lib/matchers/expect.d.ts +3 -0
  163. package/lib/dist/lib/matchers/expect.d.ts.map +1 -0
  164. package/lib/dist/lib/matchers/expect.js +225 -0
  165. package/lib/dist/lib/matchers/expect.js.map +1 -0
  166. package/lib/dist/lib/matchers/index.d.ts +8 -0
  167. package/lib/dist/lib/matchers/index.d.ts.map +1 -0
  168. package/lib/dist/lib/matchers/index.js +9 -0
  169. package/lib/dist/lib/matchers/index.js.map +1 -0
  170. package/lib/dist/lib/matchers/judgeAccessor.d.ts +113 -0
  171. package/lib/dist/lib/matchers/judgeAccessor.d.ts.map +1 -0
  172. package/lib/dist/lib/matchers/judgeAccessor.js +183 -0
  173. package/lib/dist/lib/matchers/judgeAccessor.js.map +1 -0
  174. package/lib/dist/lib/matchers/session.d.ts +39 -0
  175. package/lib/dist/lib/matchers/session.d.ts.map +1 -0
  176. package/lib/dist/lib/matchers/session.js +116 -0
  177. package/lib/dist/lib/matchers/session.js.map +1 -0
  178. package/lib/dist/lib/matchers/traces.d.ts +70 -0
  179. package/lib/dist/lib/matchers/traces.d.ts.map +1 -0
  180. package/lib/dist/lib/matchers/traces.js +236 -0
  181. package/lib/dist/lib/matchers/traces.js.map +1 -0
  182. package/lib/dist/lib/matchers/tracesPricing.d.ts +38 -0
  183. package/lib/dist/lib/matchers/tracesPricing.d.ts.map +1 -0
  184. package/lib/dist/lib/matchers/tracesPricing.js +64 -0
  185. package/lib/dist/lib/matchers/tracesPricing.js.map +1 -0
  186. package/lib/dist/lib/matchers/types.d.ts +75 -0
  187. package/lib/dist/lib/matchers/types.d.ts.map +1 -0
  188. package/lib/dist/lib/matchers/types.js +6 -0
  189. package/lib/dist/lib/matchers/types.js.map +1 -0
  190. package/lib/dist/lib/packagePaths.d.ts +29 -0
  191. package/lib/dist/lib/packagePaths.d.ts.map +1 -0
  192. package/lib/dist/lib/packagePaths.js +63 -0
  193. package/lib/dist/lib/packagePaths.js.map +1 -0
  194. package/lib/dist/lib/performance.d.ts +51 -0
  195. package/lib/dist/lib/performance.d.ts.map +1 -0
  196. package/lib/dist/lib/performance.js +159 -0
  197. package/lib/dist/lib/performance.js.map +1 -0
  198. package/lib/dist/lib/portConfig.d.ts +29 -0
  199. package/lib/dist/lib/portConfig.d.ts.map +1 -0
  200. package/lib/dist/lib/portConfig.js +64 -0
  201. package/lib/dist/lib/portConfig.js.map +1 -0
  202. package/lib/dist/lib/preferences.d.ts +63 -0
  203. package/lib/dist/lib/preferences.d.ts.map +1 -0
  204. package/lib/dist/lib/preferences.js +117 -0
  205. package/lib/dist/lib/preferences.js.map +1 -0
  206. package/lib/dist/lib/resolveAgentModel.d.ts +22 -0
  207. package/lib/dist/lib/resolveAgentModel.d.ts.map +1 -0
  208. package/lib/dist/lib/resolveAgentModel.js +37 -0
  209. package/lib/dist/lib/resolveAgentModel.js.map +1 -0
  210. package/lib/dist/lib/runStats.d.ts +116 -0
  211. package/lib/dist/lib/runStats.d.ts.map +1 -0
  212. package/lib/dist/lib/runStats.js +192 -0
  213. package/lib/dist/lib/runStats.js.map +1 -0
  214. package/lib/dist/lib/telemetry/constants.d.ts +60 -0
  215. package/lib/dist/lib/telemetry/constants.d.ts.map +1 -0
  216. package/lib/dist/lib/telemetry/constants.js +87 -0
  217. package/lib/dist/lib/telemetry/constants.js.map +1 -0
  218. package/lib/dist/lib/telemetry/evalSpans.d.ts +61 -0
  219. package/lib/dist/lib/telemetry/evalSpans.d.ts.map +1 -0
  220. package/lib/dist/lib/telemetry/evalSpans.js +254 -0
  221. package/lib/dist/lib/telemetry/evalSpans.js.map +1 -0
  222. package/lib/dist/lib/telemetry/index.d.ts +11 -0
  223. package/lib/dist/lib/telemetry/index.d.ts.map +1 -0
  224. package/lib/dist/lib/telemetry/index.js +15 -0
  225. package/lib/dist/lib/telemetry/index.js.map +1 -0
  226. package/lib/dist/lib/telemetry/opensearchExporter.d.ts +43 -0
  227. package/lib/dist/lib/telemetry/opensearchExporter.d.ts.map +1 -0
  228. package/lib/dist/lib/telemetry/opensearchExporter.js +217 -0
  229. package/lib/dist/lib/telemetry/opensearchExporter.js.map +1 -0
  230. package/lib/dist/lib/telemetry/provider.d.ts +55 -0
  231. package/lib/dist/lib/telemetry/provider.d.ts.map +1 -0
  232. package/lib/dist/lib/telemetry/provider.js +140 -0
  233. package/lib/dist/lib/telemetry/provider.js.map +1 -0
  234. package/lib/dist/lib/testCaseLabels.d.ts +34 -0
  235. package/lib/dist/lib/testCaseLabels.d.ts.map +1 -0
  236. package/lib/dist/lib/testCaseLabels.js +88 -0
  237. package/lib/dist/lib/testCaseLabels.js.map +1 -0
  238. package/lib/dist/lib/testCaseValidation.d.ts +140 -0
  239. package/lib/dist/lib/testCaseValidation.d.ts.map +1 -0
  240. package/lib/dist/lib/testCaseValidation.js +162 -0
  241. package/lib/dist/lib/testCaseValidation.js.map +1 -0
  242. package/lib/dist/lib/testCases/agentFixture.d.ts +80 -0
  243. package/lib/dist/lib/testCases/agentFixture.d.ts.map +1 -0
  244. package/lib/dist/lib/testCases/agentFixture.js +43 -0
  245. package/lib/dist/lib/testCases/agentFixture.js.map +1 -0
  246. package/lib/dist/lib/testCases/authoringSurface.d.ts +10 -0
  247. package/lib/dist/lib/testCases/authoringSurface.d.ts.map +1 -0
  248. package/lib/dist/lib/testCases/authoringSurface.js +54 -0
  249. package/lib/dist/lib/testCases/authoringSurface.js.map +1 -0
  250. package/lib/dist/lib/testCases/codemod.d.ts +13 -0
  251. package/lib/dist/lib/testCases/codemod.d.ts.map +1 -0
  252. package/lib/dist/lib/testCases/codemod.js +169 -0
  253. package/lib/dist/lib/testCases/codemod.js.map +1 -0
  254. package/lib/dist/lib/testCases/define.d.ts +114 -0
  255. package/lib/dist/lib/testCases/define.d.ts.map +1 -0
  256. package/lib/dist/lib/testCases/define.js +253 -0
  257. package/lib/dist/lib/testCases/define.js.map +1 -0
  258. package/lib/dist/lib/testCases/evaluators.d.ts +80 -0
  259. package/lib/dist/lib/testCases/evaluators.d.ts.map +1 -0
  260. package/lib/dist/lib/testCases/evaluators.js +105 -0
  261. package/lib/dist/lib/testCases/evaluators.js.map +1 -0
  262. package/lib/dist/lib/testCases/index.d.ts +14 -0
  263. package/lib/dist/lib/testCases/index.d.ts.map +1 -0
  264. package/lib/dist/lib/testCases/index.js +12 -0
  265. package/lib/dist/lib/testCases/index.js.map +1 -0
  266. package/lib/dist/lib/testCases/judge.d.ts +165 -0
  267. package/lib/dist/lib/testCases/judge.d.ts.map +1 -0
  268. package/lib/dist/lib/testCases/judge.js +359 -0
  269. package/lib/dist/lib/testCases/judge.js.map +1 -0
  270. package/lib/dist/lib/testCases/loader.d.ts +36 -0
  271. package/lib/dist/lib/testCases/loader.d.ts.map +1 -0
  272. package/lib/dist/lib/testCases/loader.js +179 -0
  273. package/lib/dist/lib/testCases/loader.js.map +1 -0
  274. package/lib/dist/lib/testCases/types.d.ts +242 -0
  275. package/lib/dist/lib/testCases/types.d.ts.map +1 -0
  276. package/lib/dist/lib/testCases/types.js +6 -0
  277. package/lib/dist/lib/testCases/types.js.map +1 -0
  278. package/lib/dist/lib/theme.d.ts +6 -0
  279. package/lib/dist/lib/theme.d.ts.map +1 -0
  280. package/lib/dist/lib/theme.js +36 -0
  281. package/lib/dist/lib/theme.js.map +1 -0
  282. package/lib/dist/lib/uiTelemetry.d.ts +7 -0
  283. package/lib/dist/lib/uiTelemetry.d.ts.map +1 -0
  284. package/lib/dist/lib/uiTelemetry.js +25 -0
  285. package/lib/dist/lib/uiTelemetry.js.map +1 -0
  286. package/lib/dist/lib/utils.d.ts +111 -0
  287. package/lib/dist/lib/utils.d.ts.map +1 -0
  288. package/lib/dist/lib/utils.js +254 -0
  289. package/lib/dist/lib/utils.js.map +1 -0
  290. package/lib/dist/lib/workflow/consolidate.d.ts +12 -0
  291. package/lib/dist/lib/workflow/consolidate.d.ts.map +1 -0
  292. package/lib/dist/lib/workflow/consolidate.js +33 -0
  293. package/lib/dist/lib/workflow/consolidate.js.map +1 -0
  294. package/lib/dist/lib/workflow/index.d.ts +13 -0
  295. package/lib/dist/lib/workflow/index.d.ts.map +1 -0
  296. package/lib/dist/lib/workflow/index.js +12 -0
  297. package/lib/dist/lib/workflow/index.js.map +1 -0
  298. package/lib/dist/lib/workflow/ledger.d.ts +30 -0
  299. package/lib/dist/lib/workflow/ledger.d.ts.map +1 -0
  300. package/lib/dist/lib/workflow/ledger.js +41 -0
  301. package/lib/dist/lib/workflow/ledger.js.map +1 -0
  302. package/lib/dist/lib/workflow/pool.d.ts +13 -0
  303. package/lib/dist/lib/workflow/pool.d.ts.map +1 -0
  304. package/lib/dist/lib/workflow/pool.js +44 -0
  305. package/lib/dist/lib/workflow/pool.js.map +1 -0
  306. package/lib/dist/lib/workflow/source.d.ts +22 -0
  307. package/lib/dist/lib/workflow/source.d.ts.map +1 -0
  308. package/lib/dist/lib/workflow/source.js +29 -0
  309. package/lib/dist/lib/workflow/source.js.map +1 -0
  310. package/lib/dist/lib/workflow/stepB.d.ts +71 -0
  311. package/lib/dist/lib/workflow/stepB.d.ts.map +1 -0
  312. package/lib/dist/lib/workflow/stepB.js +99 -0
  313. package/lib/dist/lib/workflow/stepB.js.map +1 -0
  314. package/lib/dist/lib/workflow/types.d.ts +86 -0
  315. package/lib/dist/lib/workflow/types.d.ts.map +1 -0
  316. package/lib/dist/lib/workflow/types.js +6 -0
  317. package/lib/dist/lib/workflow/types.js.map +1 -0
  318. package/lib/dist/lib/workflow/workflow.d.ts +119 -0
  319. package/lib/dist/lib/workflow/workflow.d.ts.map +1 -0
  320. package/lib/dist/lib/workflow/workflow.js +195 -0
  321. package/lib/dist/lib/workflow/workflow.js.map +1 -0
  322. package/lib/dist/services/agent/aguiConverter.d.ts +50 -0
  323. package/lib/dist/services/agent/aguiConverter.d.ts.map +1 -0
  324. package/lib/dist/services/agent/aguiConverter.js +449 -0
  325. package/lib/dist/services/agent/aguiConverter.js.map +1 -0
  326. package/lib/dist/services/agent/index.d.ts +10 -0
  327. package/lib/dist/services/agent/index.d.ts.map +1 -0
  328. package/lib/dist/services/agent/index.js +12 -0
  329. package/lib/dist/services/agent/index.js.map +1 -0
  330. package/lib/dist/services/agent/payloadBuilder.d.ts +33 -0
  331. package/lib/dist/services/agent/payloadBuilder.d.ts.map +1 -0
  332. package/lib/dist/services/agent/payloadBuilder.js +75 -0
  333. package/lib/dist/services/agent/payloadBuilder.js.map +1 -0
  334. package/lib/dist/services/agent/sseStream.d.ts +43 -0
  335. package/lib/dist/services/agent/sseStream.d.ts.map +1 -0
  336. package/lib/dist/services/agent/sseStream.js +223 -0
  337. package/lib/dist/services/agent/sseStream.js.map +1 -0
  338. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts +44 -0
  339. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts.map +1 -0
  340. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js +95 -0
  341. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js.map +1 -0
  342. package/lib/dist/services/connectors/base/BaseConnector.d.ts +81 -0
  343. package/lib/dist/services/connectors/base/BaseConnector.d.ts.map +1 -0
  344. package/lib/dist/services/connectors/base/BaseConnector.js +170 -0
  345. package/lib/dist/services/connectors/base/BaseConnector.js.map +1 -0
  346. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts +126 -0
  347. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts.map +1 -0
  348. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js +417 -0
  349. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js.map +1 -0
  350. package/lib/dist/services/connectors/index.d.ts +13 -0
  351. package/lib/dist/services/connectors/index.d.ts.map +1 -0
  352. package/lib/dist/services/connectors/index.js +32 -0
  353. package/lib/dist/services/connectors/index.js.map +1 -0
  354. package/lib/dist/services/connectors/kiro/KiroConnector.d.ts +48 -0
  355. package/lib/dist/services/connectors/kiro/KiroConnector.d.ts.map +1 -0
  356. package/lib/dist/services/connectors/kiro/KiroConnector.js +158 -0
  357. package/lib/dist/services/connectors/kiro/KiroConnector.js.map +1 -0
  358. package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts +36 -0
  359. package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts.map +1 -0
  360. package/lib/dist/services/connectors/langgraph/LangGraphConnector.js +175 -0
  361. package/lib/dist/services/connectors/langgraph/LangGraphConnector.js.map +1 -0
  362. package/lib/dist/services/connectors/mock/MockConnector.d.ts +37 -0
  363. package/lib/dist/services/connectors/mock/MockConnector.d.ts.map +1 -0
  364. package/lib/dist/services/connectors/mock/MockConnector.js +120 -0
  365. package/lib/dist/services/connectors/mock/MockConnector.js.map +1 -0
  366. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts +42 -0
  367. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts.map +1 -0
  368. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js +133 -0
  369. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js.map +1 -0
  370. package/lib/dist/services/connectors/pi/PiConnector.d.ts +87 -0
  371. package/lib/dist/services/connectors/pi/PiConnector.d.ts.map +1 -0
  372. package/lib/dist/services/connectors/pi/PiConnector.js +274 -0
  373. package/lib/dist/services/connectors/pi/PiConnector.js.map +1 -0
  374. package/lib/dist/services/connectors/registry.d.ts +57 -0
  375. package/lib/dist/services/connectors/registry.d.ts.map +1 -0
  376. package/lib/dist/services/connectors/registry.js +106 -0
  377. package/lib/dist/services/connectors/registry.js.map +1 -0
  378. package/lib/dist/services/connectors/rest/RESTConnector.d.ts +38 -0
  379. package/lib/dist/services/connectors/rest/RESTConnector.d.ts.map +1 -0
  380. package/lib/dist/services/connectors/rest/RESTConnector.js +117 -0
  381. package/lib/dist/services/connectors/rest/RESTConnector.js.map +1 -0
  382. package/lib/dist/services/connectors/server.d.ts +13 -0
  383. package/lib/dist/services/connectors/server.d.ts.map +1 -0
  384. package/lib/dist/services/connectors/server.js +34 -0
  385. package/lib/dist/services/connectors/server.js.map +1 -0
  386. package/lib/dist/services/connectors/strands/StrandsConnector.d.ts +48 -0
  387. package/lib/dist/services/connectors/strands/StrandsConnector.d.ts.map +1 -0
  388. package/lib/dist/services/connectors/strands/StrandsConnector.js +221 -0
  389. package/lib/dist/services/connectors/strands/StrandsConnector.js.map +1 -0
  390. package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts +88 -0
  391. package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts.map +1 -0
  392. package/lib/dist/services/connectors/subprocess/SubprocessConnector.js +426 -0
  393. package/lib/dist/services/connectors/subprocess/SubprocessConnector.js.map +1 -0
  394. package/lib/dist/services/connectors/types.d.ts +213 -0
  395. package/lib/dist/services/connectors/types.d.ts.map +1 -0
  396. package/lib/dist/services/connectors/types.js +6 -0
  397. package/lib/dist/services/connectors/types.js.map +1 -0
  398. package/lib/dist/services/evaluation/bedrockJudge.d.ts +71 -0
  399. package/lib/dist/services/evaluation/bedrockJudge.d.ts.map +1 -0
  400. package/lib/dist/services/evaluation/bedrockJudge.js +169 -0
  401. package/lib/dist/services/evaluation/bedrockJudge.js.map +1 -0
  402. package/lib/dist/services/evaluation/evaluatorError.d.ts +56 -0
  403. package/lib/dist/services/evaluation/evaluatorError.d.ts.map +1 -0
  404. package/lib/dist/services/evaluation/evaluatorError.js +56 -0
  405. package/lib/dist/services/evaluation/evaluatorError.js.map +1 -0
  406. package/lib/dist/services/evaluation/index.d.ts +106 -0
  407. package/lib/dist/services/evaluation/index.d.ts.map +1 -0
  408. package/lib/dist/services/evaluation/index.js +684 -0
  409. package/lib/dist/services/evaluation/index.js.map +1 -0
  410. package/lib/dist/services/evaluation/mockTrajectory.d.ts +3 -0
  411. package/lib/dist/services/evaluation/mockTrajectory.d.ts.map +1 -0
  412. package/lib/dist/services/evaluation/mockTrajectory.js +72 -0
  413. package/lib/dist/services/evaluation/mockTrajectory.js.map +1 -0
  414. package/lib/dist/services/opensearch/client.d.ts +26 -0
  415. package/lib/dist/services/opensearch/client.d.ts.map +1 -0
  416. package/lib/dist/services/opensearch/client.js +131 -0
  417. package/lib/dist/services/opensearch/client.js.map +1 -0
  418. package/lib/dist/services/opensearch/index.d.ts +16 -0
  419. package/lib/dist/services/opensearch/index.d.ts.map +1 -0
  420. package/lib/dist/services/opensearch/index.js +25 -0
  421. package/lib/dist/services/opensearch/index.js.map +1 -0
  422. package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts +123 -0
  423. package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts.map +1 -0
  424. package/lib/dist/services/storage/asyncBenchmarkStorage.js +440 -0
  425. package/lib/dist/services/storage/asyncBenchmarkStorage.js.map +1 -0
  426. package/lib/dist/services/storage/asyncRunStorage.d.ts +135 -0
  427. package/lib/dist/services/storage/asyncRunStorage.d.ts.map +1 -0
  428. package/lib/dist/services/storage/asyncRunStorage.js +524 -0
  429. package/lib/dist/services/storage/asyncRunStorage.js.map +1 -0
  430. package/lib/dist/services/storage/asyncTestCaseStorage.d.ts +170 -0
  431. package/lib/dist/services/storage/asyncTestCaseStorage.d.ts.map +1 -0
  432. package/lib/dist/services/storage/asyncTestCaseStorage.js +301 -0
  433. package/lib/dist/services/storage/asyncTestCaseStorage.js.map +1 -0
  434. package/lib/dist/services/storage/index.d.ts +17 -0
  435. package/lib/dist/services/storage/index.d.ts.map +1 -0
  436. package/lib/dist/services/storage/index.js +20 -0
  437. package/lib/dist/services/storage/index.js.map +1 -0
  438. package/lib/dist/services/storage/migration.d.ts +54 -0
  439. package/lib/dist/services/storage/migration.d.ts.map +1 -0
  440. package/lib/dist/services/storage/migration.js +296 -0
  441. package/lib/dist/services/storage/migration.js.map +1 -0
  442. package/lib/dist/services/storage/opensearchClient.d.ts +947 -0
  443. package/lib/dist/services/storage/opensearchClient.d.ts.map +1 -0
  444. package/lib/dist/services/storage/opensearchClient.js +442 -0
  445. package/lib/dist/services/storage/opensearchClient.js.map +1 -0
  446. package/lib/dist/services/traces/browserRecovery.d.ts +37 -0
  447. package/lib/dist/services/traces/browserRecovery.d.ts.map +1 -0
  448. package/lib/dist/services/traces/browserRecovery.js +108 -0
  449. package/lib/dist/services/traces/browserRecovery.js.map +1 -0
  450. package/lib/dist/services/traces/categoryStyles.d.ts +21 -0
  451. package/lib/dist/services/traces/categoryStyles.d.ts.map +1 -0
  452. package/lib/dist/services/traces/categoryStyles.js +56 -0
  453. package/lib/dist/services/traces/categoryStyles.js.map +1 -0
  454. package/lib/dist/services/traces/executionOrderTransform.d.ts +35 -0
  455. package/lib/dist/services/traces/executionOrderTransform.d.ts.map +1 -0
  456. package/lib/dist/services/traces/executionOrderTransform.js +313 -0
  457. package/lib/dist/services/traces/executionOrderTransform.js.map +1 -0
  458. package/lib/dist/services/traces/fetchSpansForRun.d.ts +86 -0
  459. package/lib/dist/services/traces/fetchSpansForRun.d.ts.map +1 -0
  460. package/lib/dist/services/traces/fetchSpansForRun.js +69 -0
  461. package/lib/dist/services/traces/fetchSpansForRun.js.map +1 -0
  462. package/lib/dist/services/traces/flowTransform.d.ts +24 -0
  463. package/lib/dist/services/traces/flowTransform.d.ts.map +1 -0
  464. package/lib/dist/services/traces/flowTransform.js +228 -0
  465. package/lib/dist/services/traces/flowTransform.js.map +1 -0
  466. package/lib/dist/services/traces/index.d.ts +121 -0
  467. package/lib/dist/services/traces/index.d.ts.map +1 -0
  468. package/lib/dist/services/traces/index.js +255 -0
  469. package/lib/dist/services/traces/index.js.map +1 -0
  470. package/lib/dist/services/traces/intentTransform.d.ts +20 -0
  471. package/lib/dist/services/traces/intentTransform.d.ts.map +1 -0
  472. package/lib/dist/services/traces/intentTransform.js +131 -0
  473. package/lib/dist/services/traces/intentTransform.js.map +1 -0
  474. package/lib/dist/services/traces/judgeAgentsHints.d.ts +63 -0
  475. package/lib/dist/services/traces/judgeAgentsHints.d.ts.map +1 -0
  476. package/lib/dist/services/traces/judgeAgentsHints.js +89 -0
  477. package/lib/dist/services/traces/judgeAgentsHints.js.map +1 -0
  478. package/lib/dist/services/traces/messageExtraction.d.ts +15 -0
  479. package/lib/dist/services/traces/messageExtraction.d.ts.map +1 -0
  480. package/lib/dist/services/traces/messageExtraction.js +313 -0
  481. package/lib/dist/services/traces/messageExtraction.js.map +1 -0
  482. package/lib/dist/services/traces/spanCategorization.d.ts +63 -0
  483. package/lib/dist/services/traces/spanCategorization.d.ts.map +1 -0
  484. package/lib/dist/services/traces/spanCategorization.js +276 -0
  485. package/lib/dist/services/traces/spanCategorization.js.map +1 -0
  486. package/lib/dist/services/traces/spanPreprocessing.d.ts +37 -0
  487. package/lib/dist/services/traces/spanPreprocessing.d.ts.map +1 -0
  488. package/lib/dist/services/traces/spanPreprocessing.js +102 -0
  489. package/lib/dist/services/traces/spanPreprocessing.js.map +1 -0
  490. package/lib/dist/services/traces/spansToTrajectory.d.ts +36 -0
  491. package/lib/dist/services/traces/spansToTrajectory.d.ts.map +1 -0
  492. package/lib/dist/services/traces/spansToTrajectory.js +425 -0
  493. package/lib/dist/services/traces/spansToTrajectory.js.map +1 -0
  494. package/lib/dist/services/traces/toolSimilarity.d.ts +35 -0
  495. package/lib/dist/services/traces/toolSimilarity.d.ts.map +1 -0
  496. package/lib/dist/services/traces/toolSimilarity.js +203 -0
  497. package/lib/dist/services/traces/toolSimilarity.js.map +1 -0
  498. package/lib/dist/services/traces/traceComparison.d.ts +31 -0
  499. package/lib/dist/services/traces/traceComparison.d.ts.map +1 -0
  500. package/lib/dist/services/traces/traceComparison.js +318 -0
  501. package/lib/dist/services/traces/traceComparison.js.map +1 -0
  502. package/lib/dist/services/traces/traceGrouping.d.ts +19 -0
  503. package/lib/dist/services/traces/traceGrouping.d.ts.map +1 -0
  504. package/lib/dist/services/traces/traceGrouping.js +107 -0
  505. package/lib/dist/services/traces/traceGrouping.js.map +1 -0
  506. package/lib/dist/services/traces/tracePoller.d.ts +108 -0
  507. package/lib/dist/services/traces/tracePoller.d.ts.map +1 -0
  508. package/lib/dist/services/traces/tracePoller.js +475 -0
  509. package/lib/dist/services/traces/tracePoller.js.map +1 -0
  510. package/lib/dist/services/traces/traceStats.d.ts +45 -0
  511. package/lib/dist/services/traces/traceStats.d.ts.map +1 -0
  512. package/lib/dist/services/traces/traceStats.js +114 -0
  513. package/lib/dist/services/traces/traceStats.js.map +1 -0
  514. package/lib/dist/services/traces/traceSummary.d.ts +47 -0
  515. package/lib/dist/services/traces/traceSummary.d.ts.map +1 -0
  516. package/lib/dist/services/traces/traceSummary.js +68 -0
  517. package/lib/dist/services/traces/traceSummary.js.map +1 -0
  518. package/lib/dist/services/traces/utils.d.ts +33 -0
  519. package/lib/dist/services/traces/utils.d.ts.map +1 -0
  520. package/lib/dist/services/traces/utils.js +114 -0
  521. package/lib/dist/services/traces/utils.js.map +1 -0
  522. package/lib/dist/types/agui.d.ts +13 -0
  523. package/lib/dist/types/agui.d.ts.map +1 -0
  524. package/lib/dist/types/agui.js +16 -0
  525. package/lib/dist/types/agui.js.map +1 -0
  526. package/lib/dist/types/index.d.ts +1229 -0
  527. package/lib/dist/types/index.d.ts.map +1 -0
  528. package/lib/dist/types/index.js +12 -0
  529. package/lib/dist/types/index.js.map +1 -0
  530. package/lib/dist/types/skills.d.ts +146 -0
  531. package/lib/dist/types/skills.d.ts.map +1 -0
  532. package/lib/dist/types/skills.js +6 -0
  533. package/lib/dist/types/skills.js.map +1 -0
  534. package/observio-sample-agent/pi-package/README.md +112 -0
  535. package/observio-sample-agent/pi-package/extensions/agent-health.ts +373 -0
  536. package/observio-sample-agent/pi-package/package.json +17 -0
  537. package/observio-sample-agent/pi-package/prompts/agent-health.md +37 -0
  538. package/observio-sample-agent/pi-package/skills/create-pr/SKILL.md +88 -0
  539. package/observio-sample-agent/pi-package/skills/fix-bug/SKILL.md +71 -0
  540. package/observio-sample-agent/pi-package/skills/implement-feature/SKILL.md +156 -0
  541. package/observio-sample-agent/pi-package/skills/instrument-otel/SKILL.md +208 -0
  542. package/observio-sample-agent/pi-package/skills/setup-collector/SKILL.md +146 -0
  543. package/observio-sample-agent/pi-package/skills/write-test/SKILL.md +115 -0
  544. package/package.json +45 -9
  545. package/server/dist/app.js +34031 -18731
  546. package/server/dist/index.js +30737 -15338
  547. package/tsconfig.lib.json +71 -0
  548. package/dist/assets/index-BOIP5L7h.js +0 -246
  549. package/dist/assets/index-CU9YKpAL.css +0 -1
  550. package/lib/dist/config/index.js +0 -452
  551. package/lib/dist/index.js +0 -1725
@@ -0,0 +1,254 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ /**
6
+ * OTel span helpers for evaluation telemetry.
7
+ *
8
+ * Creates and manages spans for benchmark execution following
9
+ * OpenTelemetry semantic conventions for test suites and GenAI evaluation.
10
+ *
11
+ * Span structure:
12
+ * test_suite_run {benchmarkName} ← root span (1 per benchmark run)
13
+ * └── test_case ← child span (1 per test case)
14
+ * └── Event: gen_ai.evaluation.result
15
+ */
16
+ import { context, trace, TraceFlags, SpanKind, SpanStatusCode, } from '@opentelemetry/api';
17
+ import { getEvalTracer, isEvalTelemetryEnabled, flushEvalTracer } from './provider.js';
18
+ import {
19
+ // In-spec attributes
20
+ ATTR_TEST_SUITE_NAME, ATTR_TEST_SUITE_RUN_STATUS, ATTR_TEST_CASE_NAME, ATTR_TEST_CASE_RESULT_STATUS, ATTR_GEN_AI_OPERATION_NAME, ATTR_GEN_AI_EVALUATION_NAME, ATTR_GEN_AI_CONVERSATION_ID, ATTR_GEN_AI_EVALUATION_SCORE_VALUE, ATTR_GEN_AI_EVALUATION_SCORE_LABEL, ATTR_GEN_AI_EVALUATION_EXPLANATION, EVENT_GEN_AI_EVALUATION_RESULT, TEST_SUITE_RUN_STATUS_VALUE_SUCCESS, TEST_SUITE_RUN_STATUS_VALUE_FAILURE, TEST_CASE_RESULT_STATUS_VALUE_PASS, TEST_CASE_RESULT_STATUS_VALUE_FAIL,
21
+ // Proposed attributes (#3398)
22
+ ATTR_TEST_SUITE_RUN_ID, ATTR_TEST_CASE_ID,
23
+ // IO attributes
24
+ ATTR_TEST_CASE_INPUT, ATTR_TEST_CASE_OUTPUT, ATTR_TEST_CASE_EXPECTED,
25
+ // Agent Health extensions
26
+ ATTR_AGENT_HEALTH_JUDGE_MODEL_ID, ATTR_AGENT_HEALTH_JUDGE_DURATION_MS, ATTR_AGENT_HEALTH_JUDGE_ATTEMPTS, ATTR_AGENT_HEALTH_AGENT_DURATION_MS, ATTR_AGENT_HEALTH_CONNECTOR_PROTOCOL, ATTR_AGENT_HEALTH_AGENT_RUN_ID,
27
+ // Constants
28
+ GEN_AI_OPERATION_NAME_VALUE_EVALUATION, MAX_ATTRIBUTE_LENGTH, MAX_EXPLANATION_LENGTH, } from './constants.js';
29
+ /**
30
+ * Truncate a string to the given max length
31
+ */
32
+ function truncate(value, maxLength) {
33
+ if (!value)
34
+ return undefined;
35
+ return value.length > maxLength ? value.slice(0, maxLength) + '...' : value;
36
+ }
37
+ /**
38
+ * Extract the agent's final response from a trajectory
39
+ */
40
+ function extractAgentResponse(report) {
41
+ const responseStep = [...report.trajectory].reverse().find(s => s.type === 'response' || s.type === 'assistant');
42
+ return responseStep?.content;
43
+ }
44
+ /**
45
+ * Start a test_suite_run root span for a benchmark run.
46
+ *
47
+ * Returns the span and a context carrying it for child span creation.
48
+ * The caller MUST call finalizeTestSuiteRunSpan() when the run completes.
49
+ */
50
+ export function startTestSuiteRunSpan(benchmark, run) {
51
+ if (!isEvalTelemetryEnabled())
52
+ return null;
53
+ const tracer = getEvalTracer();
54
+ const span = tracer.startSpan(`test_suite_run ${benchmark.name}`, {
55
+ kind: SpanKind.INTERNAL,
56
+ attributes: {
57
+ [ATTR_TEST_SUITE_NAME]: benchmark.name,
58
+ [ATTR_TEST_SUITE_RUN_ID]: run.id,
59
+ [ATTR_GEN_AI_OPERATION_NAME]: GEN_AI_OPERATION_NAME_VALUE_EVALUATION,
60
+ },
61
+ });
62
+ const ctx = context.active();
63
+ const spanContext = trace.setSpan(ctx, span);
64
+ console.log(`[Telemetry] Started test_suite_run span for "${benchmark.name}" (runId=${run.id})`);
65
+ return { span, context: spanContext };
66
+ }
67
+ /**
68
+ * Start a test_case child span for a single test case evaluation.
69
+ *
70
+ * @param parentCtx - Context from the parent test_suite_run span
71
+ * @param testCase - The test case being evaluated
72
+ * @param benchmark - Parent benchmark (for name duplication)
73
+ * @param run - Parent benchmark run (for run ID duplication)
74
+ * @param agentRunId - Optional agent execution run ID (links eval span to agent traces)
75
+ * @param links - Optional span links (e.g., to agent execution trace)
76
+ */
77
+ export function startTestCaseSpan(parentCtx, testCase, benchmark, run, agentRunId, links) {
78
+ if (!isEvalTelemetryEnabled())
79
+ return null;
80
+ const tracer = getEvalTracer();
81
+ const attributes = {
82
+ [ATTR_TEST_SUITE_NAME]: benchmark.name,
83
+ [ATTR_TEST_SUITE_RUN_ID]: run.id,
84
+ [ATTR_TEST_CASE_ID]: testCase.id,
85
+ [ATTR_TEST_CASE_NAME]: testCase.name,
86
+ [ATTR_GEN_AI_OPERATION_NAME]: GEN_AI_OPERATION_NAME_VALUE_EVALUATION,
87
+ };
88
+ if (agentRunId) {
89
+ attributes[ATTR_AGENT_HEALTH_AGENT_RUN_ID] = agentRunId;
90
+ // OTEL-standard correlation id (incubating). Set to the same agent run id
91
+ // so trace queries correlating on `gen_ai.conversation.id` find this eval
92
+ // span alongside `agent_health.run.id` (Strategy B).
93
+ attributes[ATTR_GEN_AI_CONVERSATION_ID] = agentRunId;
94
+ }
95
+ attributes[ATTR_TEST_CASE_INPUT] = truncate(testCase.initialPrompt || '', MAX_ATTRIBUTE_LENGTH);
96
+ const expected = truncate(testCase.expectedOutcomes ? JSON.stringify(testCase.expectedOutcomes) : undefined, MAX_ATTRIBUTE_LENGTH);
97
+ if (expected)
98
+ attributes[ATTR_TEST_CASE_EXPECTED] = expected;
99
+ const span = tracer.startSpan('test_case', {
100
+ kind: SpanKind.INTERNAL,
101
+ attributes,
102
+ links,
103
+ }, parentCtx);
104
+ const ctx = trace.setSpan(parentCtx, span);
105
+ console.log(`[Telemetry] Started test_case span for "${testCase.name}" (agentRunId=${agentRunId || 'none'})`);
106
+ return { span, context: ctx };
107
+ }
108
+ /**
109
+ * Add gen_ai.evaluation.result events to a test case span.
110
+ *
111
+ * Emits one event per metric (currently: accuracy with pass/fail label).
112
+ */
113
+ export function addEvaluationResultEvents(span, report) {
114
+ if (!isEvalTelemetryEnabled())
115
+ return;
116
+ // Primary metric: accuracy
117
+ if (report.metrics?.accuracy !== undefined) {
118
+ span.addEvent(EVENT_GEN_AI_EVALUATION_RESULT, {
119
+ [ATTR_GEN_AI_EVALUATION_NAME]: 'accuracy',
120
+ [ATTR_GEN_AI_EVALUATION_SCORE_VALUE]: report.metrics.accuracy,
121
+ [ATTR_GEN_AI_EVALUATION_SCORE_LABEL]: report.passFailStatus === 'passed' ? 'pass' : 'fail',
122
+ [ATTR_GEN_AI_EVALUATION_EXPLANATION]: truncate(report.llmJudgeReasoning, MAX_EXPLANATION_LENGTH),
123
+ });
124
+ }
125
+ // Additional metrics (faithfulness, latency_score, trajectory_alignment_score)
126
+ if (report.metrics?.faithfulness !== undefined) {
127
+ span.addEvent(EVENT_GEN_AI_EVALUATION_RESULT, {
128
+ [ATTR_GEN_AI_EVALUATION_NAME]: 'faithfulness',
129
+ [ATTR_GEN_AI_EVALUATION_SCORE_VALUE]: report.metrics.faithfulness,
130
+ });
131
+ }
132
+ if (report.metrics?.latency_score !== undefined) {
133
+ span.addEvent(EVENT_GEN_AI_EVALUATION_RESULT, {
134
+ [ATTR_GEN_AI_EVALUATION_NAME]: 'latency_score',
135
+ [ATTR_GEN_AI_EVALUATION_SCORE_VALUE]: report.metrics.latency_score,
136
+ });
137
+ }
138
+ if (report.metrics?.trajectory_alignment_score !== undefined) {
139
+ span.addEvent(EVENT_GEN_AI_EVALUATION_RESULT, {
140
+ [ATTR_GEN_AI_EVALUATION_NAME]: 'trajectory_alignment_score',
141
+ [ATTR_GEN_AI_EVALUATION_SCORE_VALUE]: report.metrics.trajectory_alignment_score,
142
+ });
143
+ }
144
+ }
145
+ /**
146
+ * Finalize a test case span with evaluation results and end it.
147
+ */
148
+ export function finalizeTestCaseSpan(span, report, endTime) {
149
+ if (!isEvalTelemetryEnabled())
150
+ return;
151
+ // Set result status
152
+ const status = report.passFailStatus === 'passed'
153
+ ? TEST_CASE_RESULT_STATUS_VALUE_PASS
154
+ : TEST_CASE_RESULT_STATUS_VALUE_FAIL;
155
+ span.setAttribute(ATTR_TEST_CASE_RESULT_STATUS, status);
156
+ // Set output (agent's final response) — always set so UI can distinguish missing vs empty
157
+ const output = extractAgentResponse(report) || '';
158
+ span.setAttribute(ATTR_TEST_CASE_OUTPUT, truncate(output, MAX_ATTRIBUTE_LENGTH));
159
+ // Set Agent Health extension attributes
160
+ if (report.connectorProtocol) {
161
+ span.setAttribute(ATTR_AGENT_HEALTH_CONNECTOR_PROTOCOL, report.connectorProtocol);
162
+ }
163
+ if (report.performanceMetrics?.agentDurationMs !== undefined) {
164
+ span.setAttribute(ATTR_AGENT_HEALTH_AGENT_DURATION_MS, report.performanceMetrics.agentDurationMs);
165
+ }
166
+ if (report.performanceMetrics?.judgeDurationMs !== undefined) {
167
+ span.setAttribute(ATTR_AGENT_HEALTH_JUDGE_DURATION_MS, report.performanceMetrics.judgeDurationMs);
168
+ }
169
+ if (report.performanceMetrics?.judgeAttempts !== undefined) {
170
+ span.setAttribute(ATTR_AGENT_HEALTH_JUDGE_ATTEMPTS, report.performanceMetrics.judgeAttempts);
171
+ }
172
+ if (report.llmJudgeResponse?.modelId) {
173
+ span.setAttribute(ATTR_AGENT_HEALTH_JUDGE_MODEL_ID, report.llmJudgeResponse.modelId);
174
+ }
175
+ // Set span status based on evaluation outcome
176
+ if (report.status === 'failed') {
177
+ span.setStatus({ code: SpanStatusCode.ERROR, message: 'Evaluation failed' });
178
+ }
179
+ span.end(endTime);
180
+ console.log(`[Telemetry] Finalized test_case span (status=${status}, passFailStatus=${report.passFailStatus})`);
181
+ }
182
+ /**
183
+ * Finalize a test_suite_run span and end it.
184
+ */
185
+ export function finalizeTestSuiteRunSpan(span, run) {
186
+ if (!isEvalTelemetryEnabled())
187
+ return;
188
+ // Compute overall status from results
189
+ const results = Object.values(run.results);
190
+ const hasFailures = results.some(r => r.status === 'failed');
191
+ const status = hasFailures
192
+ ? TEST_SUITE_RUN_STATUS_VALUE_FAILURE
193
+ : TEST_SUITE_RUN_STATUS_VALUE_SUCCESS;
194
+ span.setAttribute(ATTR_TEST_SUITE_RUN_STATUS, status);
195
+ if (hasFailures) {
196
+ const failCount = results.filter(r => r.status === 'failed').length;
197
+ span.setStatus({ code: SpanStatusCode.ERROR, message: `${failCount} case(s) failed` });
198
+ }
199
+ span.end();
200
+ console.log(`[Telemetry] Finalized test_suite_run span (status=${status}), flushing...`);
201
+ flushEvalTracer().catch(() => { });
202
+ }
203
+ /**
204
+ * Emit a complete test case span for a deferred (trace-mode) evaluation.
205
+ *
206
+ * Used when the judge runs asynchronously after trace polling completes.
207
+ * Creates a standalone span with explicit timestamps reflecting the original execution.
208
+ */
209
+ export function emitDeferredTestCaseSpan(testCase, report, benchmark, runId, agentRunId, startTime, endTime, agentTraceId) {
210
+ if (!isEvalTelemetryEnabled())
211
+ return;
212
+ const tracer = getEvalTracer();
213
+ const attributes = {
214
+ [ATTR_TEST_SUITE_NAME]: benchmark.name,
215
+ [ATTR_TEST_SUITE_RUN_ID]: runId,
216
+ [ATTR_TEST_CASE_ID]: testCase.id,
217
+ [ATTR_TEST_CASE_NAME]: testCase.name,
218
+ [ATTR_GEN_AI_OPERATION_NAME]: GEN_AI_OPERATION_NAME_VALUE_EVALUATION,
219
+ };
220
+ if (agentRunId) {
221
+ attributes[ATTR_AGENT_HEALTH_AGENT_RUN_ID] = agentRunId;
222
+ attributes[ATTR_GEN_AI_CONVERSATION_ID] = agentRunId;
223
+ }
224
+ attributes[ATTR_TEST_CASE_INPUT] = truncate(testCase.initialPrompt || '', MAX_ATTRIBUTE_LENGTH);
225
+ const expected = truncate(testCase.expectedOutcomes ? JSON.stringify(testCase.expectedOutcomes) : undefined, MAX_ATTRIBUTE_LENGTH);
226
+ if (expected)
227
+ attributes[ATTR_TEST_CASE_EXPECTED] = expected;
228
+ // If an agent traceId is provided, create the span within the same trace
229
+ // so it appears as a sibling of the agent's root span in the trace tree.
230
+ let parentCtx;
231
+ if (agentTraceId && /^[0-9a-f]{32}$/i.test(agentTraceId)) {
232
+ const remoteSpanContext = {
233
+ traceId: agentTraceId,
234
+ // Use a valid synthetic spanId — an all-zero spanId is considered invalid
235
+ // by the OTel SDK and would cause it to ignore this context entirely.
236
+ // This "remote" context carries the traceId forward so the eval span
237
+ // shares the same trace as the agent spans.
238
+ spanId: 'eeee000000000001',
239
+ traceFlags: TraceFlags.SAMPLED,
240
+ isRemote: true,
241
+ };
242
+ parentCtx = trace.setSpanContext(context.active(), remoteSpanContext);
243
+ }
244
+ const span = tracer.startSpan('test_case', {
245
+ kind: SpanKind.INTERNAL,
246
+ startTime,
247
+ attributes,
248
+ }, parentCtx);
249
+ addEvaluationResultEvents(span, report);
250
+ finalizeTestCaseSpan(span, report, endTime);
251
+ console.log(`[Telemetry] Emitted deferred test_case span for "${testCase.name}" (agentRunId=${agentRunId || 'none'}, traceId=${agentTraceId || 'new'}), flushing...`);
252
+ flushEvalTracer().catch(() => { });
253
+ }
254
+ //# sourceMappingURL=evalSpans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evalSpans.js","sourceRoot":"","sources":["../../../telemetry/evalSpans.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Evaluation Telemetry Module
3
+ *
4
+ * Emits OTel spans for benchmark evaluation data using semantic conventions.
5
+ * Disabled by default — enable via OTEL_EVAL_ENABLED=true or config file.
6
+ */
7
+ export { initEvalTracerProvider, getEvalTracer, isEvalTelemetryEnabled, flushEvalTracer, shutdownEvalTracer, resolveEvalTelemetryConfig, type EvalTelemetryConfig, } from './provider.js';
8
+ export { startTestSuiteRunSpan, startTestCaseSpan, addEvaluationResultEvents, finalizeTestCaseSpan, finalizeTestSuiteRunSpan, emitDeferredTestCaseSpan, } from './evalSpans.js';
9
+ export * from './constants.js';
10
+ export { OpenSearchSpanExporter, type OpenSearchExporterConfig, } from './opensearchExporter.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../telemetry/index.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AAEH,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,mBAAmB,GACzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAExB,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EACtB,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ /**
6
+ * Evaluation Telemetry Module
7
+ *
8
+ * Emits OTel spans for benchmark evaluation data using semantic conventions.
9
+ * Disabled by default — enable via OTEL_EVAL_ENABLED=true or config file.
10
+ */
11
+ export { initEvalTracerProvider, getEvalTracer, isEvalTelemetryEnabled, flushEvalTracer, shutdownEvalTracer, resolveEvalTelemetryConfig, } from './provider.js';
12
+ export { startTestSuiteRunSpan, startTestCaseSpan, addEvaluationResultEvents, finalizeTestCaseSpan, finalizeTestSuiteRunSpan, emitDeferredTestCaseSpan, } from './evalSpans.js';
13
+ export * from './constants.js';
14
+ export { OpenSearchSpanExporter, } from './opensearchExporter.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../telemetry/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,0BAA0B,GAE3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAExB,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EACL,sBAAsB,GAEvB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Custom OpenSearch Span Exporter
3
+ *
4
+ * Writes OTel spans directly to an OpenSearch cluster using the same
5
+ * observability data source config that the trace reader uses.
6
+ * Formats spans in the OTEL-faithful Data Prepper `trace-analytics-plain-raw`
7
+ * schema (a nested `attributes` object keyed by literal dotted OTel names)
8
+ * so they co-exist with agent spans already in the otel-v1-apm-span-* index.
9
+ */
10
+ import { SpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-node';
11
+ import { ExportResult } from '@opentelemetry/core';
12
+ /**
13
+ * Configuration for the OpenSearch exporter
14
+ */
15
+ export interface OpenSearchExporterConfig {
16
+ /** OpenSearch endpoint URL */
17
+ endpoint: string;
18
+ /** Basic auth username */
19
+ username?: string;
20
+ /** Basic auth password */
21
+ password?: string;
22
+ /** Index pattern to write to (default: otel-v1-apm-span-000001) */
23
+ indexName?: string;
24
+ /** Whether to skip TLS verification */
25
+ tlsSkipVerify?: boolean;
26
+ }
27
+ /**
28
+ * Custom SpanExporter that writes directly to OpenSearch.
29
+ *
30
+ * Formats spans in OSIS-compatible format so eval spans co-exist
31
+ * with agent spans in the same otel-v1-apm-span-* indices.
32
+ */
33
+ export declare class OpenSearchSpanExporter implements SpanExporter {
34
+ private client;
35
+ private indexName;
36
+ private shutdownRequested;
37
+ constructor(config: OpenSearchExporterConfig);
38
+ export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void;
39
+ private _export;
40
+ shutdown(): Promise<void>;
41
+ forceFlush(): Promise<void>;
42
+ }
43
+ //# sourceMappingURL=opensearchExporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opensearchExporter.d.ts","sourceRoot":"","sources":["../../../telemetry/opensearchExporter.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAoB,MAAM,qBAAqB,CAAC;AAIrE;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AA6JD;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,YAAY;IACzD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,iBAAiB,CAAS;gBAEtB,MAAM,EAAE,wBAAwB;IAiB5C,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;YAcrE,OAAO;IA0Bf,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
@@ -0,0 +1,217 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { ExportResultCode } from '@opentelemetry/core';
6
+ import { SpanKind, SpanStatusCode } from '@opentelemetry/api';
7
+ import { Client } from '@opensearch-project/opensearch';
8
+ /**
9
+ * Convert OTel HrTime [seconds, nanoseconds] to ISO date string
10
+ */
11
+ function hrTimeToDate(hrTime) {
12
+ const ms = hrTime[0] * 1000 + hrTime[1] / 1_000_000;
13
+ return new Date(ms).toISOString();
14
+ }
15
+ /**
16
+ * Convert OTel HrTime to nanoseconds
17
+ */
18
+ function hrTimeToNanos(hrTime) {
19
+ return hrTime[0] * 1_000_000_000 + hrTime[1];
20
+ }
21
+ /**
22
+ * Convert duration between two HrTimes to nanoseconds
23
+ */
24
+ function durationNanos(start, end) {
25
+ return hrTimeToNanos(end) - hrTimeToNanos(start);
26
+ }
27
+ /**
28
+ * Map OTel SpanKind to OSIS string format
29
+ */
30
+ function spanKindToString(kind) {
31
+ switch (kind) {
32
+ case SpanKind.INTERNAL: return 'SPAN_KIND_INTERNAL';
33
+ case SpanKind.SERVER: return 'SPAN_KIND_SERVER';
34
+ case SpanKind.CLIENT: return 'SPAN_KIND_CLIENT';
35
+ case SpanKind.PRODUCER: return 'SPAN_KIND_PRODUCER';
36
+ case SpanKind.CONSUMER: return 'SPAN_KIND_CONSUMER';
37
+ default: return 'SPAN_KIND_INTERNAL';
38
+ }
39
+ }
40
+ /**
41
+ * Map OTel SpanStatusCode to OSIS integer
42
+ */
43
+ function statusCodeToInt(code) {
44
+ switch (code) {
45
+ case SpanStatusCode.UNSET: return 0;
46
+ case SpanStatusCode.OK: return 1;
47
+ case SpanStatusCode.ERROR: return 2;
48
+ default: return 0;
49
+ }
50
+ }
51
+ /**
52
+ * Convert a ReadableSpan to an OSIS-compatible OpenSearch document
53
+ */
54
+ function spanToDocument(span) {
55
+ const doc = {
56
+ traceId: span.spanContext().traceId,
57
+ spanId: span.spanContext().spanId,
58
+ parentSpanId: (span.parentSpanContext?.spanId && span.parentSpanContext.spanId !== '0000000000000000')
59
+ ? span.parentSpanContext.spanId : '',
60
+ name: span.name,
61
+ kind: spanKindToString(span.kind),
62
+ startTime: hrTimeToDate(span.startTime),
63
+ endTime: hrTimeToDate(span.endTime),
64
+ durationInNanos: durationNanos(span.startTime, span.endTime),
65
+ status: {
66
+ code: statusCodeToInt(span.status.code),
67
+ message: span.status.message || '',
68
+ },
69
+ traceState: '',
70
+ droppedAttributesCount: span.droppedAttributesCount,
71
+ droppedEventsCount: span.droppedEventsCount,
72
+ droppedLinksCount: span.droppedLinksCount,
73
+ };
74
+ // Span attributes: nested object keyed by literal dotted OTel names
75
+ // (Data Prepper trace-analytics-plain-raw / OTEL-faithful schema).
76
+ const spanAttributes = {};
77
+ for (const [key, value] of Object.entries(span.attributes)) {
78
+ if (value !== undefined) {
79
+ spanAttributes[key] = value;
80
+ }
81
+ }
82
+ doc.attributes = spanAttributes;
83
+ // Resource attributes: nested resource.attributes object, literal dotted keys.
84
+ const resource = span.resource;
85
+ const resourceAttributes = {};
86
+ if (resource?.attributes) {
87
+ for (const [key, value] of Object.entries(resource.attributes)) {
88
+ if (value !== undefined) {
89
+ resourceAttributes[key] = value;
90
+ }
91
+ }
92
+ }
93
+ doc.resource = { attributes: resourceAttributes };
94
+ // Set serviceName from resource
95
+ const serviceName = resource?.attributes?.['service.name'] || 'unknown';
96
+ doc.serviceName = serviceName;
97
+ // Instrumentation scope — nested object (runtime property is instrumentationScope).
98
+ const scope = span.instrumentationScope ?? span.instrumentationLibrary ?? {};
99
+ doc.instrumentationScope = {
100
+ name: scope.name || '',
101
+ ...(scope.version ? { version: scope.version } : {}),
102
+ };
103
+ // Events (nested array; attribute keys are literal dotted OTel names)
104
+ if (span.events.length > 0) {
105
+ doc.events = span.events.map(event => {
106
+ const eventDoc = {
107
+ name: event.name,
108
+ time: hrTimeToDate(event.time),
109
+ droppedAttributesCount: event.droppedAttributesCount || 0,
110
+ };
111
+ if (event.attributes) {
112
+ const attrs = {};
113
+ for (const [key, value] of Object.entries(event.attributes)) {
114
+ if (value !== undefined) {
115
+ attrs[key] = value;
116
+ }
117
+ }
118
+ eventDoc.attributes = attrs;
119
+ }
120
+ return eventDoc;
121
+ });
122
+ }
123
+ else {
124
+ doc.events = [];
125
+ }
126
+ // Links
127
+ if (span.links.length > 0) {
128
+ doc.links = span.links.map(link => ({
129
+ traceId: link.context.traceId,
130
+ spanId: link.context.spanId,
131
+ traceState: link.context.traceState?.serialize() || '',
132
+ attributes: link.attributes || {},
133
+ droppedAttributesCount: link.droppedAttributesCount || 0,
134
+ }));
135
+ }
136
+ else {
137
+ doc.links = [];
138
+ }
139
+ // traceGroupFields (populated for root spans)
140
+ const hasRealParent = span.parentSpanContext?.spanId && span.parentSpanContext.spanId !== '0000000000000000';
141
+ if (!hasRealParent) {
142
+ doc.traceGroup = span.name;
143
+ doc.traceGroupFields = {
144
+ endTime: hrTimeToDate(span.endTime),
145
+ durationInNanos: durationNanos(span.startTime, span.endTime),
146
+ statusCode: statusCodeToInt(span.status.code),
147
+ };
148
+ }
149
+ return doc;
150
+ }
151
+ /**
152
+ * Custom SpanExporter that writes directly to OpenSearch.
153
+ *
154
+ * Formats spans in OSIS-compatible format so eval spans co-exist
155
+ * with agent spans in the same otel-v1-apm-span-* indices.
156
+ */
157
+ export class OpenSearchSpanExporter {
158
+ constructor(config) {
159
+ this.shutdownRequested = false;
160
+ const auth = config.username && config.password
161
+ ? `${config.username}:${config.password}`
162
+ : undefined;
163
+ this.client = new Client({
164
+ node: config.endpoint,
165
+ auth: auth ? { username: config.username, password: config.password } : undefined,
166
+ ssl: {
167
+ rejectUnauthorized: config.tlsSkipVerify !== true,
168
+ },
169
+ });
170
+ this.indexName = config.indexName || 'otel-v1-apm-span-000001';
171
+ console.log(`[Telemetry] OpenSearch exporter initialized → ${config.endpoint} (index: ${this.indexName})`);
172
+ }
173
+ export(spans, resultCallback) {
174
+ if (this.shutdownRequested) {
175
+ resultCallback({ code: ExportResultCode.FAILED });
176
+ return;
177
+ }
178
+ this._export(spans)
179
+ .then(() => resultCallback({ code: ExportResultCode.SUCCESS }))
180
+ .catch((err) => {
181
+ console.error('[Telemetry] OpenSearch export failed:', err instanceof Error ? err.message : err);
182
+ resultCallback({ code: ExportResultCode.FAILED });
183
+ });
184
+ }
185
+ async _export(spans) {
186
+ if (spans.length === 0)
187
+ return;
188
+ // Use bulk API for efficiency
189
+ const body = [];
190
+ for (const span of spans) {
191
+ const doc = spanToDocument(span);
192
+ const docId = `${doc.traceId}/${doc.spanId}`;
193
+ body.push({ index: { _index: this.indexName, _id: docId } });
194
+ body.push(doc);
195
+ }
196
+ const response = await this.client.bulk({ body });
197
+ if (response.body.errors) {
198
+ const errors = response.body.items
199
+ .filter((item) => item.index?.error)
200
+ .map((item) => `${item.index.error.type}: ${item.index.error.reason}`);
201
+ if (errors.length > 0) {
202
+ console.warn(`[Telemetry] OpenSearch bulk write had ${errors.length} error(s):`, errors[0]);
203
+ }
204
+ }
205
+ else {
206
+ console.log(`[Telemetry] Exported ${spans.length} span(s) to OpenSearch`);
207
+ }
208
+ }
209
+ async shutdown() {
210
+ this.shutdownRequested = true;
211
+ await this.client.close();
212
+ }
213
+ async forceFlush() {
214
+ // No buffering — exports are immediate via bulk API
215
+ }
216
+ }
217
+ //# sourceMappingURL=opensearchExporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opensearchExporter.js","sourceRoot":"","sources":["../../../telemetry/opensearchExporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * OTel TracerProvider management for evaluation telemetry.
3
+ *
4
+ * Manages a singleton TracerProvider that exports evaluation spans
5
+ * via OTLP/HTTP to a collector, or directly to OpenSearch when an
6
+ * observability data source is configured.
7
+ */
8
+ import { type Tracer } from '@opentelemetry/api';
9
+ import { type OpenSearchExporterConfig } from './opensearchExporter.js';
10
+ /**
11
+ * Configuration for evaluation telemetry
12
+ */
13
+ export interface EvalTelemetryConfig {
14
+ /** Whether evaluation telemetry is enabled */
15
+ enabled: boolean;
16
+ /** OTLP exporter endpoint (e.g., http://localhost:4318/v1/traces) */
17
+ exporterEndpoint: string;
18
+ /** Optional headers for the OTLP exporter (e.g., auth) */
19
+ exporterHeaders?: Record<string, string>;
20
+ /** Service name for resource attributes */
21
+ serviceName?: string;
22
+ /** OpenSearch direct export config (derived from observability data source) */
23
+ opensearch?: OpenSearchExporterConfig;
24
+ }
25
+ /**
26
+ * Resolve telemetry config from environment variables and optional user config
27
+ */
28
+ export declare function resolveEvalTelemetryConfig(userConfig?: Partial<EvalTelemetryConfig>): EvalTelemetryConfig;
29
+ /**
30
+ * Initialize the evaluation TracerProvider.
31
+ * Safe to call multiple times — subsequent calls are no-ops.
32
+ *
33
+ * When an OpenSearch config is provided (from observability data source),
34
+ * spans are written directly to OpenSearch in OSIS-compatible format.
35
+ * Otherwise, falls back to OTLP/HTTP exporter.
36
+ */
37
+ export declare function initEvalTracerProvider(config: EvalTelemetryConfig): void;
38
+ /**
39
+ * Get the evaluation tracer. Returns a no-op tracer if telemetry is disabled.
40
+ */
41
+ export declare function getEvalTracer(): Tracer;
42
+ /**
43
+ * Check if evaluation telemetry is enabled
44
+ */
45
+ export declare function isEvalTelemetryEnabled(): boolean;
46
+ /**
47
+ * Force-flush any buffered spans to the exporter.
48
+ * Call after emitting spans to ensure they are exported promptly.
49
+ */
50
+ export declare function flushEvalTracer(): Promise<void>;
51
+ /**
52
+ * Flush pending spans and shut down the TracerProvider.
53
+ */
54
+ export declare function shutdownEvalTracer(): Promise<void>;
55
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../telemetry/provider.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AAEH,OAAO,EAAS,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAKxD,OAAO,EAA0B,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEhG;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,gBAAgB,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,wBAAwB,CAAC;CACvC;AAKD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAwBzG;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAqDxE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAQrD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAOxD"}