@opensearch-project/agent-health 0.3.0 → 0.5.2

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 (518) hide show
  1. package/README.md +77 -6
  2. package/cli/dist/index.js +10072 -4502
  3. package/deployment/cloudformation/agent-health-observability.yaml +762 -0
  4. package/dist/assets/index-CCQRDlO0.js +243 -0
  5. package/dist/assets/index-CNHQVbcj.css +1 -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 +431 -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 +390 -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 +577 -0
  22. package/docs/SKILLS.md +264 -0
  23. package/docs/blogs/2026-02-28-opensearch-agent-health.md +200 -0
  24. package/docs/blogs/getting-started-blog.md +608 -0
  25. package/docs/diagrams/Agent-health.excalidraw +5656 -0
  26. package/docs/diagrams/architecture.png +0 -0
  27. package/docs/plans/field-redesign.md +468 -0
  28. package/docs/rfcs/001-coding-agent-analytics.md +374 -0
  29. package/docs/rfcs/002-enterprise-leaderboard.md +267 -0
  30. package/docs/rfcs/003-remote-aggregation.md +146 -0
  31. package/docs/rfcs/004-test-sdk-v2.md +599 -0
  32. package/docs/skills/AGENT_HEALTH.md +598 -0
  33. package/docs/skills/AGENT_PROFILE.md +191 -0
  34. package/docs/skills/add-connector/SKILL.md +68 -0
  35. package/docs/skills/agent-health-profile/SKILL.md +40 -0
  36. package/docs/skills/config-auth/SKILL.md +194 -0
  37. package/docs/skills/config-auth/evals/evals.json +35 -0
  38. package/docs/skills/create-pr/SKILL.md +73 -0
  39. package/docs/skills/instrument-otel/SKILL.md +84 -0
  40. package/docs/skills/write-test/SKILL.md +124 -0
  41. package/docs/ui prd.md +376 -0
  42. package/examples/README.md +53 -0
  43. package/examples/config/agent-health.config.example.ts +155 -0
  44. package/examples/connectors/echo-connector.ts +131 -0
  45. package/examples/eval-files/demo.eval.js +128 -0
  46. package/examples/eval-files/sdk-hooks-demo.eval.js +99 -0
  47. package/examples/pi-profiling/README.md +77 -0
  48. package/examples/pi-profiling/agent-health-profile.ts +417 -0
  49. package/lib/dist/lib/agentUtils.d.ts +29 -0
  50. package/lib/dist/lib/agentUtils.d.ts.map +1 -0
  51. package/lib/dist/lib/agentUtils.js +43 -0
  52. package/lib/dist/lib/agentUtils.js.map +1 -0
  53. package/lib/dist/lib/benchmarkExport.d.ts +14 -0
  54. package/lib/dist/lib/benchmarkExport.d.ts.map +1 -0
  55. package/lib/dist/lib/benchmarkExport.js +41 -0
  56. package/lib/dist/lib/benchmarkExport.js.map +1 -0
  57. package/lib/dist/lib/benchmarkVersionUtils.d.ts +37 -0
  58. package/lib/dist/lib/benchmarkVersionUtils.d.ts.map +1 -0
  59. package/lib/dist/lib/benchmarkVersionUtils.js +68 -0
  60. package/lib/dist/lib/benchmarkVersionUtils.js.map +1 -0
  61. package/lib/dist/lib/config/defineConfig.d.ts +27 -0
  62. package/lib/dist/lib/config/defineConfig.d.ts.map +1 -0
  63. package/lib/dist/lib/config/defineConfig.js +28 -0
  64. package/lib/dist/lib/config/defineConfig.js.map +1 -0
  65. package/lib/dist/lib/config/index.d.ts +9 -0
  66. package/lib/dist/lib/config/index.d.ts.map +1 -0
  67. package/lib/dist/lib/config/index.js +8 -0
  68. package/lib/dist/lib/config/index.js.map +1 -0
  69. package/lib/dist/lib/config/loader.d.ts +39 -0
  70. package/lib/dist/lib/config/loader.d.ts.map +1 -0
  71. package/lib/dist/lib/config/loader.js +258 -0
  72. package/lib/dist/lib/config/loader.js.map +1 -0
  73. package/lib/dist/lib/config/statePaths.d.ts +61 -0
  74. package/lib/dist/lib/config/statePaths.d.ts.map +1 -0
  75. package/lib/dist/lib/config/statePaths.js +188 -0
  76. package/lib/dist/lib/config/statePaths.js.map +1 -0
  77. package/lib/dist/lib/config/types.d.ts +231 -0
  78. package/lib/dist/lib/config/types.d.ts.map +1 -0
  79. package/lib/dist/lib/config/types.js +6 -0
  80. package/lib/dist/lib/config/types.js.map +1 -0
  81. package/lib/dist/lib/config.d.ts +39 -0
  82. package/lib/dist/lib/config.d.ts.map +1 -0
  83. package/lib/dist/lib/config.js +118 -0
  84. package/lib/dist/lib/config.js.map +1 -0
  85. package/lib/dist/lib/constants.d.ts +70 -0
  86. package/lib/dist/lib/constants.d.ts.map +1 -0
  87. package/lib/dist/lib/constants.js +365 -0
  88. package/lib/dist/lib/constants.js.map +1 -0
  89. package/lib/dist/lib/contextUtilization.d.ts +23 -0
  90. package/lib/dist/lib/contextUtilization.d.ts.map +1 -0
  91. package/lib/dist/lib/contextUtilization.js +72 -0
  92. package/lib/dist/lib/contextUtilization.js.map +1 -0
  93. package/lib/dist/lib/dashboardMetrics.d.ts +87 -0
  94. package/lib/dist/lib/dashboardMetrics.d.ts.map +1 -0
  95. package/lib/dist/lib/dashboardMetrics.js +242 -0
  96. package/lib/dist/lib/dashboardMetrics.js.map +1 -0
  97. package/lib/dist/lib/dataSourceConfig.d.ts +108 -0
  98. package/lib/dist/lib/dataSourceConfig.d.ts.map +1 -0
  99. package/lib/dist/lib/dataSourceConfig.js +166 -0
  100. package/lib/dist/lib/dataSourceConfig.js.map +1 -0
  101. package/lib/dist/lib/debug.d.ts +26 -0
  102. package/lib/dist/lib/debug.d.ts.map +1 -0
  103. package/lib/dist/lib/debug.js +132 -0
  104. package/lib/dist/lib/debug.js.map +1 -0
  105. package/lib/dist/lib/diagnostics.d.ts +28 -0
  106. package/lib/dist/lib/diagnostics.d.ts.map +1 -0
  107. package/lib/dist/lib/diagnostics.js +65 -0
  108. package/lib/dist/lib/diagnostics.js.map +1 -0
  109. package/lib/dist/lib/envCompat.d.ts +27 -0
  110. package/lib/dist/lib/envCompat.d.ts.map +1 -0
  111. package/lib/dist/lib/envCompat.js +73 -0
  112. package/lib/dist/lib/envCompat.js.map +1 -0
  113. package/lib/dist/lib/findPackageRoot.d.ts +7 -0
  114. package/lib/dist/lib/findPackageRoot.d.ts.map +1 -0
  115. package/lib/dist/lib/findPackageRoot.js +57 -0
  116. package/lib/dist/lib/findPackageRoot.js.map +1 -0
  117. package/lib/dist/lib/hooks.d.ts +36 -0
  118. package/lib/dist/lib/hooks.d.ts.map +1 -0
  119. package/lib/dist/lib/hooks.js +112 -0
  120. package/lib/dist/lib/hooks.js.map +1 -0
  121. package/lib/dist/lib/index.d.ts +47 -0
  122. package/lib/dist/lib/index.d.ts.map +1 -0
  123. package/lib/dist/lib/index.js +62 -0
  124. package/lib/dist/lib/index.js.map +1 -0
  125. package/lib/dist/lib/labels.d.ts +90 -0
  126. package/lib/dist/lib/labels.d.ts.map +1 -0
  127. package/lib/dist/lib/labels.js +158 -0
  128. package/lib/dist/lib/labels.js.map +1 -0
  129. package/lib/dist/lib/markdown.d.ts +16 -0
  130. package/lib/dist/lib/markdown.d.ts.map +1 -0
  131. package/lib/dist/lib/markdown.js +42 -0
  132. package/lib/dist/lib/markdown.js.map +1 -0
  133. package/lib/dist/lib/matchers/expect.d.ts +3 -0
  134. package/lib/dist/lib/matchers/expect.d.ts.map +1 -0
  135. package/lib/dist/lib/matchers/expect.js +225 -0
  136. package/lib/dist/lib/matchers/expect.js.map +1 -0
  137. package/lib/dist/lib/matchers/index.d.ts +8 -0
  138. package/lib/dist/lib/matchers/index.d.ts.map +1 -0
  139. package/lib/dist/lib/matchers/index.js +9 -0
  140. package/lib/dist/lib/matchers/index.js.map +1 -0
  141. package/lib/dist/lib/matchers/judgeAccessor.d.ts +113 -0
  142. package/lib/dist/lib/matchers/judgeAccessor.d.ts.map +1 -0
  143. package/lib/dist/lib/matchers/judgeAccessor.js +183 -0
  144. package/lib/dist/lib/matchers/judgeAccessor.js.map +1 -0
  145. package/lib/dist/lib/matchers/session.d.ts +39 -0
  146. package/lib/dist/lib/matchers/session.d.ts.map +1 -0
  147. package/lib/dist/lib/matchers/session.js +116 -0
  148. package/lib/dist/lib/matchers/session.js.map +1 -0
  149. package/lib/dist/lib/matchers/traces.d.ts +55 -0
  150. package/lib/dist/lib/matchers/traces.d.ts.map +1 -0
  151. package/lib/dist/lib/matchers/traces.js +116 -0
  152. package/lib/dist/lib/matchers/traces.js.map +1 -0
  153. package/lib/dist/lib/matchers/types.d.ts +75 -0
  154. package/lib/dist/lib/matchers/types.d.ts.map +1 -0
  155. package/lib/dist/lib/matchers/types.js +6 -0
  156. package/lib/dist/lib/matchers/types.js.map +1 -0
  157. package/lib/dist/lib/packagePaths.d.ts +29 -0
  158. package/lib/dist/lib/packagePaths.d.ts.map +1 -0
  159. package/lib/dist/lib/packagePaths.js +63 -0
  160. package/lib/dist/lib/packagePaths.js.map +1 -0
  161. package/lib/dist/lib/performance.d.ts +51 -0
  162. package/lib/dist/lib/performance.d.ts.map +1 -0
  163. package/lib/dist/lib/performance.js +159 -0
  164. package/lib/dist/lib/performance.js.map +1 -0
  165. package/lib/dist/lib/portConfig.d.ts +29 -0
  166. package/lib/dist/lib/portConfig.d.ts.map +1 -0
  167. package/lib/dist/lib/portConfig.js +64 -0
  168. package/lib/dist/lib/portConfig.js.map +1 -0
  169. package/lib/dist/lib/preferences.d.ts +63 -0
  170. package/lib/dist/lib/preferences.d.ts.map +1 -0
  171. package/lib/dist/lib/preferences.js +117 -0
  172. package/lib/dist/lib/preferences.js.map +1 -0
  173. package/lib/dist/lib/resolveAgentModel.d.ts +22 -0
  174. package/lib/dist/lib/resolveAgentModel.d.ts.map +1 -0
  175. package/lib/dist/lib/resolveAgentModel.js +37 -0
  176. package/lib/dist/lib/resolveAgentModel.js.map +1 -0
  177. package/lib/dist/lib/runStats.d.ts +92 -0
  178. package/lib/dist/lib/runStats.d.ts.map +1 -0
  179. package/lib/dist/lib/runStats.js +160 -0
  180. package/lib/dist/lib/runStats.js.map +1 -0
  181. package/lib/dist/lib/telemetry/constants.d.ts +60 -0
  182. package/lib/dist/lib/telemetry/constants.d.ts.map +1 -0
  183. package/lib/dist/lib/telemetry/constants.js +87 -0
  184. package/lib/dist/lib/telemetry/constants.js.map +1 -0
  185. package/lib/dist/lib/telemetry/evalSpans.d.ts +61 -0
  186. package/lib/dist/lib/telemetry/evalSpans.d.ts.map +1 -0
  187. package/lib/dist/lib/telemetry/evalSpans.js +254 -0
  188. package/lib/dist/lib/telemetry/evalSpans.js.map +1 -0
  189. package/lib/dist/lib/telemetry/index.d.ts +11 -0
  190. package/lib/dist/lib/telemetry/index.d.ts.map +1 -0
  191. package/lib/dist/lib/telemetry/index.js +15 -0
  192. package/lib/dist/lib/telemetry/index.js.map +1 -0
  193. package/lib/dist/lib/telemetry/opensearchExporter.d.ts +43 -0
  194. package/lib/dist/lib/telemetry/opensearchExporter.d.ts.map +1 -0
  195. package/lib/dist/lib/telemetry/opensearchExporter.js +217 -0
  196. package/lib/dist/lib/telemetry/opensearchExporter.js.map +1 -0
  197. package/lib/dist/lib/telemetry/provider.d.ts +55 -0
  198. package/lib/dist/lib/telemetry/provider.d.ts.map +1 -0
  199. package/lib/dist/lib/telemetry/provider.js +140 -0
  200. package/lib/dist/lib/telemetry/provider.js.map +1 -0
  201. package/lib/dist/lib/testCaseLabels.d.ts +34 -0
  202. package/lib/dist/lib/testCaseLabels.d.ts.map +1 -0
  203. package/lib/dist/lib/testCaseLabels.js +88 -0
  204. package/lib/dist/lib/testCaseLabels.js.map +1 -0
  205. package/lib/dist/lib/testCaseValidation.d.ts +140 -0
  206. package/lib/dist/lib/testCaseValidation.d.ts.map +1 -0
  207. package/lib/dist/lib/testCaseValidation.js +162 -0
  208. package/lib/dist/lib/testCaseValidation.js.map +1 -0
  209. package/lib/dist/lib/testCases/agentFixture.d.ts +80 -0
  210. package/lib/dist/lib/testCases/agentFixture.d.ts.map +1 -0
  211. package/lib/dist/lib/testCases/agentFixture.js +43 -0
  212. package/lib/dist/lib/testCases/agentFixture.js.map +1 -0
  213. package/lib/dist/lib/testCases/authoringSurface.d.ts +10 -0
  214. package/lib/dist/lib/testCases/authoringSurface.d.ts.map +1 -0
  215. package/lib/dist/lib/testCases/authoringSurface.js +54 -0
  216. package/lib/dist/lib/testCases/authoringSurface.js.map +1 -0
  217. package/lib/dist/lib/testCases/codemod.d.ts +13 -0
  218. package/lib/dist/lib/testCases/codemod.d.ts.map +1 -0
  219. package/lib/dist/lib/testCases/codemod.js +169 -0
  220. package/lib/dist/lib/testCases/codemod.js.map +1 -0
  221. package/lib/dist/lib/testCases/define.d.ts +114 -0
  222. package/lib/dist/lib/testCases/define.d.ts.map +1 -0
  223. package/lib/dist/lib/testCases/define.js +253 -0
  224. package/lib/dist/lib/testCases/define.js.map +1 -0
  225. package/lib/dist/lib/testCases/evaluators.d.ts +80 -0
  226. package/lib/dist/lib/testCases/evaluators.d.ts.map +1 -0
  227. package/lib/dist/lib/testCases/evaluators.js +105 -0
  228. package/lib/dist/lib/testCases/evaluators.js.map +1 -0
  229. package/lib/dist/lib/testCases/index.d.ts +14 -0
  230. package/lib/dist/lib/testCases/index.d.ts.map +1 -0
  231. package/lib/dist/lib/testCases/index.js +12 -0
  232. package/lib/dist/lib/testCases/index.js.map +1 -0
  233. package/lib/dist/lib/testCases/judge.d.ts +165 -0
  234. package/lib/dist/lib/testCases/judge.d.ts.map +1 -0
  235. package/lib/dist/lib/testCases/judge.js +359 -0
  236. package/lib/dist/lib/testCases/judge.js.map +1 -0
  237. package/lib/dist/lib/testCases/loader.d.ts +26 -0
  238. package/lib/dist/lib/testCases/loader.d.ts.map +1 -0
  239. package/lib/dist/lib/testCases/loader.js +149 -0
  240. package/lib/dist/lib/testCases/loader.js.map +1 -0
  241. package/lib/dist/lib/testCases/types.d.ts +242 -0
  242. package/lib/dist/lib/testCases/types.d.ts.map +1 -0
  243. package/lib/dist/lib/testCases/types.js +6 -0
  244. package/lib/dist/lib/testCases/types.js.map +1 -0
  245. package/lib/dist/lib/theme.d.ts +6 -0
  246. package/lib/dist/lib/theme.d.ts.map +1 -0
  247. package/lib/dist/lib/theme.js +36 -0
  248. package/lib/dist/lib/theme.js.map +1 -0
  249. package/lib/dist/lib/uiTelemetry.d.ts +7 -0
  250. package/lib/dist/lib/uiTelemetry.d.ts.map +1 -0
  251. package/lib/dist/lib/uiTelemetry.js +25 -0
  252. package/lib/dist/lib/uiTelemetry.js.map +1 -0
  253. package/lib/dist/lib/utils.d.ts +96 -0
  254. package/lib/dist/lib/utils.d.ts.map +1 -0
  255. package/lib/dist/lib/utils.js +232 -0
  256. package/lib/dist/lib/utils.js.map +1 -0
  257. package/lib/dist/lib/workflow/consolidate.d.ts +12 -0
  258. package/lib/dist/lib/workflow/consolidate.d.ts.map +1 -0
  259. package/lib/dist/lib/workflow/consolidate.js +33 -0
  260. package/lib/dist/lib/workflow/consolidate.js.map +1 -0
  261. package/lib/dist/lib/workflow/index.d.ts +13 -0
  262. package/lib/dist/lib/workflow/index.d.ts.map +1 -0
  263. package/lib/dist/lib/workflow/index.js +12 -0
  264. package/lib/dist/lib/workflow/index.js.map +1 -0
  265. package/lib/dist/lib/workflow/ledger.d.ts +30 -0
  266. package/lib/dist/lib/workflow/ledger.d.ts.map +1 -0
  267. package/lib/dist/lib/workflow/ledger.js +41 -0
  268. package/lib/dist/lib/workflow/ledger.js.map +1 -0
  269. package/lib/dist/lib/workflow/pool.d.ts +13 -0
  270. package/lib/dist/lib/workflow/pool.d.ts.map +1 -0
  271. package/lib/dist/lib/workflow/pool.js +44 -0
  272. package/lib/dist/lib/workflow/pool.js.map +1 -0
  273. package/lib/dist/lib/workflow/source.d.ts +22 -0
  274. package/lib/dist/lib/workflow/source.d.ts.map +1 -0
  275. package/lib/dist/lib/workflow/source.js +29 -0
  276. package/lib/dist/lib/workflow/source.js.map +1 -0
  277. package/lib/dist/lib/workflow/stepB.d.ts +71 -0
  278. package/lib/dist/lib/workflow/stepB.d.ts.map +1 -0
  279. package/lib/dist/lib/workflow/stepB.js +99 -0
  280. package/lib/dist/lib/workflow/stepB.js.map +1 -0
  281. package/lib/dist/lib/workflow/types.d.ts +86 -0
  282. package/lib/dist/lib/workflow/types.d.ts.map +1 -0
  283. package/lib/dist/lib/workflow/types.js +6 -0
  284. package/lib/dist/lib/workflow/types.js.map +1 -0
  285. package/lib/dist/lib/workflow/workflow.d.ts +119 -0
  286. package/lib/dist/lib/workflow/workflow.d.ts.map +1 -0
  287. package/lib/dist/lib/workflow/workflow.js +195 -0
  288. package/lib/dist/lib/workflow/workflow.js.map +1 -0
  289. package/lib/dist/services/agent/aguiConverter.d.ts +50 -0
  290. package/lib/dist/services/agent/aguiConverter.d.ts.map +1 -0
  291. package/lib/dist/services/agent/aguiConverter.js +449 -0
  292. package/lib/dist/services/agent/aguiConverter.js.map +1 -0
  293. package/lib/dist/services/agent/index.d.ts +10 -0
  294. package/lib/dist/services/agent/index.d.ts.map +1 -0
  295. package/lib/dist/services/agent/index.js +12 -0
  296. package/lib/dist/services/agent/index.js.map +1 -0
  297. package/lib/dist/services/agent/payloadBuilder.d.ts +33 -0
  298. package/lib/dist/services/agent/payloadBuilder.d.ts.map +1 -0
  299. package/lib/dist/services/agent/payloadBuilder.js +75 -0
  300. package/lib/dist/services/agent/payloadBuilder.js.map +1 -0
  301. package/lib/dist/services/agent/sseStream.d.ts +43 -0
  302. package/lib/dist/services/agent/sseStream.d.ts.map +1 -0
  303. package/lib/dist/services/agent/sseStream.js +223 -0
  304. package/lib/dist/services/agent/sseStream.js.map +1 -0
  305. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts +44 -0
  306. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts.map +1 -0
  307. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js +95 -0
  308. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js.map +1 -0
  309. package/lib/dist/services/connectors/base/BaseConnector.d.ts +81 -0
  310. package/lib/dist/services/connectors/base/BaseConnector.d.ts.map +1 -0
  311. package/lib/dist/services/connectors/base/BaseConnector.js +170 -0
  312. package/lib/dist/services/connectors/base/BaseConnector.js.map +1 -0
  313. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts +116 -0
  314. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts.map +1 -0
  315. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js +403 -0
  316. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js.map +1 -0
  317. package/lib/dist/services/connectors/index.d.ts +13 -0
  318. package/lib/dist/services/connectors/index.d.ts.map +1 -0
  319. package/lib/dist/services/connectors/index.js +32 -0
  320. package/lib/dist/services/connectors/index.js.map +1 -0
  321. package/lib/dist/services/connectors/kiro/KiroConnector.d.ts +48 -0
  322. package/lib/dist/services/connectors/kiro/KiroConnector.d.ts.map +1 -0
  323. package/lib/dist/services/connectors/kiro/KiroConnector.js +158 -0
  324. package/lib/dist/services/connectors/kiro/KiroConnector.js.map +1 -0
  325. package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts +36 -0
  326. package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts.map +1 -0
  327. package/lib/dist/services/connectors/langgraph/LangGraphConnector.js +175 -0
  328. package/lib/dist/services/connectors/langgraph/LangGraphConnector.js.map +1 -0
  329. package/lib/dist/services/connectors/mock/MockConnector.d.ts +37 -0
  330. package/lib/dist/services/connectors/mock/MockConnector.d.ts.map +1 -0
  331. package/lib/dist/services/connectors/mock/MockConnector.js +120 -0
  332. package/lib/dist/services/connectors/mock/MockConnector.js.map +1 -0
  333. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts +42 -0
  334. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts.map +1 -0
  335. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js +133 -0
  336. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js.map +1 -0
  337. package/lib/dist/services/connectors/pi/PiConnector.d.ts +87 -0
  338. package/lib/dist/services/connectors/pi/PiConnector.d.ts.map +1 -0
  339. package/lib/dist/services/connectors/pi/PiConnector.js +274 -0
  340. package/lib/dist/services/connectors/pi/PiConnector.js.map +1 -0
  341. package/lib/dist/services/connectors/registry.d.ts +57 -0
  342. package/lib/dist/services/connectors/registry.d.ts.map +1 -0
  343. package/lib/dist/services/connectors/registry.js +106 -0
  344. package/lib/dist/services/connectors/registry.js.map +1 -0
  345. package/lib/dist/services/connectors/rest/RESTConnector.d.ts +38 -0
  346. package/lib/dist/services/connectors/rest/RESTConnector.d.ts.map +1 -0
  347. package/lib/dist/services/connectors/rest/RESTConnector.js +117 -0
  348. package/lib/dist/services/connectors/rest/RESTConnector.js.map +1 -0
  349. package/lib/dist/services/connectors/server.d.ts +13 -0
  350. package/lib/dist/services/connectors/server.d.ts.map +1 -0
  351. package/lib/dist/services/connectors/server.js +34 -0
  352. package/lib/dist/services/connectors/server.js.map +1 -0
  353. package/lib/dist/services/connectors/strands/StrandsConnector.d.ts +48 -0
  354. package/lib/dist/services/connectors/strands/StrandsConnector.d.ts.map +1 -0
  355. package/lib/dist/services/connectors/strands/StrandsConnector.js +221 -0
  356. package/lib/dist/services/connectors/strands/StrandsConnector.js.map +1 -0
  357. package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts +88 -0
  358. package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts.map +1 -0
  359. package/lib/dist/services/connectors/subprocess/SubprocessConnector.js +418 -0
  360. package/lib/dist/services/connectors/subprocess/SubprocessConnector.js.map +1 -0
  361. package/lib/dist/services/connectors/types.d.ts +213 -0
  362. package/lib/dist/services/connectors/types.d.ts.map +1 -0
  363. package/lib/dist/services/connectors/types.js +6 -0
  364. package/lib/dist/services/connectors/types.js.map +1 -0
  365. package/lib/dist/services/evaluation/bedrockJudge.d.ts +64 -0
  366. package/lib/dist/services/evaluation/bedrockJudge.d.ts.map +1 -0
  367. package/lib/dist/services/evaluation/bedrockJudge.js +167 -0
  368. package/lib/dist/services/evaluation/bedrockJudge.js.map +1 -0
  369. package/lib/dist/services/evaluation/evaluatorError.d.ts +56 -0
  370. package/lib/dist/services/evaluation/evaluatorError.d.ts.map +1 -0
  371. package/lib/dist/services/evaluation/evaluatorError.js +56 -0
  372. package/lib/dist/services/evaluation/evaluatorError.js.map +1 -0
  373. package/lib/dist/services/evaluation/index.d.ts +106 -0
  374. package/lib/dist/services/evaluation/index.d.ts.map +1 -0
  375. package/lib/dist/services/evaluation/index.js +684 -0
  376. package/lib/dist/services/evaluation/index.js.map +1 -0
  377. package/lib/dist/services/evaluation/mockTrajectory.d.ts +3 -0
  378. package/lib/dist/services/evaluation/mockTrajectory.d.ts.map +1 -0
  379. package/lib/dist/services/evaluation/mockTrajectory.js +72 -0
  380. package/lib/dist/services/evaluation/mockTrajectory.js.map +1 -0
  381. package/lib/dist/services/opensearch/client.d.ts +26 -0
  382. package/lib/dist/services/opensearch/client.d.ts.map +1 -0
  383. package/lib/dist/services/opensearch/client.js +131 -0
  384. package/lib/dist/services/opensearch/client.js.map +1 -0
  385. package/lib/dist/services/opensearch/index.d.ts +16 -0
  386. package/lib/dist/services/opensearch/index.d.ts.map +1 -0
  387. package/lib/dist/services/opensearch/index.js +25 -0
  388. package/lib/dist/services/opensearch/index.js.map +1 -0
  389. package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts +123 -0
  390. package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts.map +1 -0
  391. package/lib/dist/services/storage/asyncBenchmarkStorage.js +429 -0
  392. package/lib/dist/services/storage/asyncBenchmarkStorage.js.map +1 -0
  393. package/lib/dist/services/storage/asyncRunStorage.d.ts +127 -0
  394. package/lib/dist/services/storage/asyncRunStorage.d.ts.map +1 -0
  395. package/lib/dist/services/storage/asyncRunStorage.js +448 -0
  396. package/lib/dist/services/storage/asyncRunStorage.js.map +1 -0
  397. package/lib/dist/services/storage/asyncTestCaseStorage.d.ts +156 -0
  398. package/lib/dist/services/storage/asyncTestCaseStorage.d.ts.map +1 -0
  399. package/lib/dist/services/storage/asyncTestCaseStorage.js +285 -0
  400. package/lib/dist/services/storage/asyncTestCaseStorage.js.map +1 -0
  401. package/lib/dist/services/storage/index.d.ts +17 -0
  402. package/lib/dist/services/storage/index.d.ts.map +1 -0
  403. package/lib/dist/services/storage/index.js +20 -0
  404. package/lib/dist/services/storage/index.js.map +1 -0
  405. package/lib/dist/services/storage/migration.d.ts +54 -0
  406. package/lib/dist/services/storage/migration.d.ts.map +1 -0
  407. package/lib/dist/services/storage/migration.js +296 -0
  408. package/lib/dist/services/storage/migration.js.map +1 -0
  409. package/lib/dist/services/storage/opensearchClient.d.ts +924 -0
  410. package/lib/dist/services/storage/opensearchClient.d.ts.map +1 -0
  411. package/lib/dist/services/storage/opensearchClient.js +435 -0
  412. package/lib/dist/services/storage/opensearchClient.js.map +1 -0
  413. package/lib/dist/services/traces/browserRecovery.d.ts +26 -0
  414. package/lib/dist/services/traces/browserRecovery.d.ts.map +1 -0
  415. package/lib/dist/services/traces/browserRecovery.js +81 -0
  416. package/lib/dist/services/traces/browserRecovery.js.map +1 -0
  417. package/lib/dist/services/traces/categoryStyles.d.ts +21 -0
  418. package/lib/dist/services/traces/categoryStyles.d.ts.map +1 -0
  419. package/lib/dist/services/traces/categoryStyles.js +56 -0
  420. package/lib/dist/services/traces/categoryStyles.js.map +1 -0
  421. package/lib/dist/services/traces/executionOrderTransform.d.ts +35 -0
  422. package/lib/dist/services/traces/executionOrderTransform.d.ts.map +1 -0
  423. package/lib/dist/services/traces/executionOrderTransform.js +313 -0
  424. package/lib/dist/services/traces/executionOrderTransform.js.map +1 -0
  425. package/lib/dist/services/traces/fetchSpansForRun.d.ts +86 -0
  426. package/lib/dist/services/traces/fetchSpansForRun.d.ts.map +1 -0
  427. package/lib/dist/services/traces/fetchSpansForRun.js +69 -0
  428. package/lib/dist/services/traces/fetchSpansForRun.js.map +1 -0
  429. package/lib/dist/services/traces/flowTransform.d.ts +24 -0
  430. package/lib/dist/services/traces/flowTransform.d.ts.map +1 -0
  431. package/lib/dist/services/traces/flowTransform.js +228 -0
  432. package/lib/dist/services/traces/flowTransform.js.map +1 -0
  433. package/lib/dist/services/traces/index.d.ts +121 -0
  434. package/lib/dist/services/traces/index.d.ts.map +1 -0
  435. package/lib/dist/services/traces/index.js +255 -0
  436. package/lib/dist/services/traces/index.js.map +1 -0
  437. package/lib/dist/services/traces/intentTransform.d.ts +20 -0
  438. package/lib/dist/services/traces/intentTransform.d.ts.map +1 -0
  439. package/lib/dist/services/traces/intentTransform.js +131 -0
  440. package/lib/dist/services/traces/intentTransform.js.map +1 -0
  441. package/lib/dist/services/traces/judgeAgentsHints.d.ts +63 -0
  442. package/lib/dist/services/traces/judgeAgentsHints.d.ts.map +1 -0
  443. package/lib/dist/services/traces/judgeAgentsHints.js +89 -0
  444. package/lib/dist/services/traces/judgeAgentsHints.js.map +1 -0
  445. package/lib/dist/services/traces/messageExtraction.d.ts +15 -0
  446. package/lib/dist/services/traces/messageExtraction.d.ts.map +1 -0
  447. package/lib/dist/services/traces/messageExtraction.js +251 -0
  448. package/lib/dist/services/traces/messageExtraction.js.map +1 -0
  449. package/lib/dist/services/traces/spanCategorization.d.ts +63 -0
  450. package/lib/dist/services/traces/spanCategorization.d.ts.map +1 -0
  451. package/lib/dist/services/traces/spanCategorization.js +276 -0
  452. package/lib/dist/services/traces/spanCategorization.js.map +1 -0
  453. package/lib/dist/services/traces/spanPreprocessing.d.ts +37 -0
  454. package/lib/dist/services/traces/spanPreprocessing.d.ts.map +1 -0
  455. package/lib/dist/services/traces/spanPreprocessing.js +102 -0
  456. package/lib/dist/services/traces/spanPreprocessing.js.map +1 -0
  457. package/lib/dist/services/traces/spansToTrajectory.d.ts +36 -0
  458. package/lib/dist/services/traces/spansToTrajectory.d.ts.map +1 -0
  459. package/lib/dist/services/traces/spansToTrajectory.js +387 -0
  460. package/lib/dist/services/traces/spansToTrajectory.js.map +1 -0
  461. package/lib/dist/services/traces/toolSimilarity.d.ts +35 -0
  462. package/lib/dist/services/traces/toolSimilarity.d.ts.map +1 -0
  463. package/lib/dist/services/traces/toolSimilarity.js +203 -0
  464. package/lib/dist/services/traces/toolSimilarity.js.map +1 -0
  465. package/lib/dist/services/traces/traceComparison.d.ts +31 -0
  466. package/lib/dist/services/traces/traceComparison.d.ts.map +1 -0
  467. package/lib/dist/services/traces/traceComparison.js +318 -0
  468. package/lib/dist/services/traces/traceComparison.js.map +1 -0
  469. package/lib/dist/services/traces/traceGrouping.d.ts +19 -0
  470. package/lib/dist/services/traces/traceGrouping.d.ts.map +1 -0
  471. package/lib/dist/services/traces/traceGrouping.js +107 -0
  472. package/lib/dist/services/traces/traceGrouping.js.map +1 -0
  473. package/lib/dist/services/traces/tracePoller.d.ts +84 -0
  474. package/lib/dist/services/traces/tracePoller.d.ts.map +1 -0
  475. package/lib/dist/services/traces/tracePoller.js +309 -0
  476. package/lib/dist/services/traces/tracePoller.js.map +1 -0
  477. package/lib/dist/services/traces/traceStats.d.ts +45 -0
  478. package/lib/dist/services/traces/traceStats.d.ts.map +1 -0
  479. package/lib/dist/services/traces/traceStats.js +114 -0
  480. package/lib/dist/services/traces/traceStats.js.map +1 -0
  481. package/lib/dist/services/traces/traceSummary.d.ts +47 -0
  482. package/lib/dist/services/traces/traceSummary.d.ts.map +1 -0
  483. package/lib/dist/services/traces/traceSummary.js +68 -0
  484. package/lib/dist/services/traces/traceSummary.js.map +1 -0
  485. package/lib/dist/services/traces/utils.d.ts +33 -0
  486. package/lib/dist/services/traces/utils.d.ts.map +1 -0
  487. package/lib/dist/services/traces/utils.js +114 -0
  488. package/lib/dist/services/traces/utils.js.map +1 -0
  489. package/lib/dist/types/agui.d.ts +13 -0
  490. package/lib/dist/types/agui.d.ts.map +1 -0
  491. package/lib/dist/types/agui.js +16 -0
  492. package/lib/dist/types/agui.js.map +1 -0
  493. package/lib/dist/types/index.d.ts +1175 -0
  494. package/lib/dist/types/index.d.ts.map +1 -0
  495. package/lib/dist/types/index.js +12 -0
  496. package/lib/dist/types/index.js.map +1 -0
  497. package/lib/dist/types/skills.d.ts +146 -0
  498. package/lib/dist/types/skills.d.ts.map +1 -0
  499. package/lib/dist/types/skills.js +6 -0
  500. package/lib/dist/types/skills.js.map +1 -0
  501. package/observio-sample-agent/pi-package/README.md +112 -0
  502. package/observio-sample-agent/pi-package/extensions/agent-health.ts +373 -0
  503. package/observio-sample-agent/pi-package/package.json +17 -0
  504. package/observio-sample-agent/pi-package/prompts/agent-health.md +37 -0
  505. package/observio-sample-agent/pi-package/skills/create-pr/SKILL.md +88 -0
  506. package/observio-sample-agent/pi-package/skills/fix-bug/SKILL.md +71 -0
  507. package/observio-sample-agent/pi-package/skills/implement-feature/SKILL.md +156 -0
  508. package/observio-sample-agent/pi-package/skills/instrument-otel/SKILL.md +208 -0
  509. package/observio-sample-agent/pi-package/skills/setup-collector/SKILL.md +146 -0
  510. package/observio-sample-agent/pi-package/skills/write-test/SKILL.md +115 -0
  511. package/package.json +64 -13
  512. package/server/dist/app.js +32651 -17637
  513. package/server/dist/index.js +29875 -14638
  514. package/tsconfig.lib.json +71 -0
  515. package/dist/assets/index-EvPLSTAS.js +0 -267
  516. package/dist/assets/index-RXasQKUs.css +0 -1
  517. package/lib/dist/config/index.js +0 -404
  518. package/lib/dist/index.js +0 -1665
@@ -0,0 +1,228 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ /**
6
+ * Flow Transform Service
7
+ *
8
+ * Converts span trees to React Flow nodes and edges for DAG visualization.
9
+ * Uses dagre for automatic layout positioning.
10
+ *
11
+ * Supports two modes:
12
+ * - 'hierarchy': Traditional parent-child edges (legacy)
13
+ * - 'execution-order': Sibling execution-order edges like AWS Step Functions (default)
14
+ */
15
+ import dagre from 'dagre';
16
+ import { MarkerType } from '@xyflow/react';
17
+ import { spansToExecutionFlow } from './executionOrderTransform.js';
18
+ const DEFAULT_OPTIONS = {
19
+ direction: 'TB',
20
+ mode: 'execution-order',
21
+ nodeWidth: 200,
22
+ nodeHeight: 70,
23
+ nodeSpacingX: 50,
24
+ nodeSpacingY: 80,
25
+ };
26
+ /**
27
+ * Convert a categorized span tree to React Flow nodes and edges.
28
+ *
29
+ * @param spanTree - Categorized span tree to transform
30
+ * @param totalDuration - Total trace duration for relative sizing
31
+ * @param options - Transform options including mode
32
+ * @returns Flow nodes and edges for React Flow
33
+ */
34
+ export function spansToFlow(spanTree, totalDuration, options = {}) {
35
+ const opts = { ...DEFAULT_OPTIONS, ...options };
36
+ // Use execution-order mode by default (Step Functions style)
37
+ if (opts.mode === 'execution-order') {
38
+ return spansToExecutionFlow(spanTree, totalDuration, opts);
39
+ }
40
+ // Legacy hierarchy mode (parent-child edges)
41
+ return spansToHierarchyFlow(spanTree, totalDuration, opts);
42
+ }
43
+ /**
44
+ * Legacy hierarchy mode: parent-child edges
45
+ */
46
+ function spansToHierarchyFlow(spanTree, totalDuration, opts) {
47
+ const nodes = [];
48
+ const edges = [];
49
+ // Build nodes and edges from span tree
50
+ const processSpan = (span, parentId) => {
51
+ // Create node
52
+ const node = {
53
+ id: span.spanId,
54
+ type: span.category.toLowerCase(),
55
+ data: {
56
+ span,
57
+ totalDuration,
58
+ },
59
+ position: { x: 0, y: 0 }, // Will be set by layout
60
+ style: {
61
+ width: opts.nodeWidth,
62
+ height: opts.nodeHeight,
63
+ },
64
+ };
65
+ nodes.push(node);
66
+ // Create edge from parent
67
+ if (parentId) {
68
+ const isParallel = false; // Will be determined later
69
+ edges.push(createEdge(parentId, span.spanId, isParallel));
70
+ }
71
+ // Process children
72
+ if (span.children && span.children.length > 0) {
73
+ const children = span.children;
74
+ // Detect parallel execution among siblings
75
+ const parallelGroups = detectParallelExecution(children);
76
+ const parallelSpanIds = new Set(parallelGroups.flatMap(g => g.spans.map(s => s.spanId)));
77
+ // Update edges for parallel spans
78
+ children.forEach(child => {
79
+ processSpan(child, span.spanId);
80
+ // Mark edge as parallel if span is in a parallel group
81
+ if (parallelSpanIds.has(child.spanId)) {
82
+ const edge = edges.find(e => e.source === span.spanId && e.target === child.spanId);
83
+ if (edge) {
84
+ edge.animated = true;
85
+ edge.style = {
86
+ ...edge.style,
87
+ stroke: '#f59e0b',
88
+ strokeDasharray: '5,5',
89
+ };
90
+ }
91
+ }
92
+ });
93
+ }
94
+ };
95
+ // Process all root spans
96
+ spanTree.forEach(span => processSpan(span));
97
+ // Apply layout
98
+ const layoutedResult = applyDagreLayout(nodes, edges, opts);
99
+ return layoutedResult;
100
+ }
101
+ /**
102
+ * Create an edge between two nodes
103
+ */
104
+ function createEdge(sourceId, targetId, isParallel) {
105
+ return {
106
+ id: `${sourceId}-${targetId}`,
107
+ source: sourceId,
108
+ target: targetId,
109
+ type: 'smoothstep',
110
+ animated: isParallel,
111
+ style: {
112
+ stroke: isParallel ? '#f59e0b' : '#64748b',
113
+ strokeWidth: 2,
114
+ strokeDasharray: isParallel ? '5,5' : undefined,
115
+ },
116
+ markerEnd: {
117
+ type: MarkerType.ArrowClosed,
118
+ width: 12,
119
+ height: 12,
120
+ color: isParallel ? '#f59e0b' : '#64748b',
121
+ },
122
+ };
123
+ }
124
+ /**
125
+ * Detect parallel execution among sibling spans by checking time overlap
126
+ */
127
+ export function detectParallelExecution(spans) {
128
+ if (spans.length < 2)
129
+ return [];
130
+ // Sort by start time
131
+ const sorted = [...spans].sort((a, b) => new Date(a.startTime).getTime() - new Date(b.startTime).getTime());
132
+ const groups = [];
133
+ let currentGroup = [sorted[0]];
134
+ let groupEndTime = new Date(sorted[0].endTime).getTime();
135
+ for (let i = 1; i < sorted.length; i++) {
136
+ const span = sorted[i];
137
+ const spanStart = new Date(span.startTime).getTime();
138
+ const spanEnd = new Date(span.endTime).getTime();
139
+ // Check if this span overlaps with the current group
140
+ // Using a threshold of 10% of the span's duration to account for minor timing differences
141
+ const overlapThreshold = Math.min((groupEndTime - new Date(currentGroup[0].startTime).getTime()) * 0.1, 100 // Max 100ms threshold
142
+ );
143
+ if (spanStart < groupEndTime + overlapThreshold) {
144
+ // Overlaps - add to current group
145
+ currentGroup.push(span);
146
+ groupEndTime = Math.max(groupEndTime, spanEnd);
147
+ }
148
+ else {
149
+ // No overlap - save current group if it has multiple spans
150
+ if (currentGroup.length > 1) {
151
+ groups.push({
152
+ spans: currentGroup,
153
+ startTime: new Date(currentGroup[0].startTime).getTime(),
154
+ endTime: groupEndTime,
155
+ });
156
+ }
157
+ // Start new group
158
+ currentGroup = [span];
159
+ groupEndTime = spanEnd;
160
+ }
161
+ }
162
+ // Don't forget the last group
163
+ if (currentGroup.length > 1) {
164
+ groups.push({
165
+ spans: currentGroup,
166
+ startTime: new Date(currentGroup[0].startTime).getTime(),
167
+ endTime: groupEndTime,
168
+ });
169
+ }
170
+ return groups;
171
+ }
172
+ /**
173
+ * Apply dagre layout algorithm to position nodes
174
+ */
175
+ export function applyDagreLayout(nodes, edges, options = {}) {
176
+ const opts = { ...DEFAULT_OPTIONS, ...options };
177
+ const dagreGraph = new dagre.graphlib.Graph();
178
+ dagreGraph.setDefaultEdgeLabel(() => ({}));
179
+ dagreGraph.setGraph({
180
+ rankdir: opts.direction,
181
+ nodesep: opts.nodeSpacingX,
182
+ ranksep: opts.nodeSpacingY,
183
+ marginx: 20,
184
+ marginy: 20,
185
+ });
186
+ // Add nodes to dagre
187
+ nodes.forEach(node => {
188
+ dagreGraph.setNode(node.id, {
189
+ width: opts.nodeWidth,
190
+ height: opts.nodeHeight,
191
+ });
192
+ });
193
+ // Add edges to dagre
194
+ edges.forEach(edge => {
195
+ dagreGraph.setEdge(edge.source, edge.target);
196
+ });
197
+ // Run layout algorithm
198
+ dagre.layout(dagreGraph);
199
+ // Apply calculated positions to nodes
200
+ const layoutedNodes = nodes.map(node => {
201
+ const nodeWithPosition = dagreGraph.node(node.id);
202
+ return {
203
+ ...node,
204
+ position: {
205
+ x: nodeWithPosition.x - opts.nodeWidth / 2,
206
+ y: nodeWithPosition.y - opts.nodeHeight / 2,
207
+ },
208
+ };
209
+ });
210
+ return { nodes: layoutedNodes, edges };
211
+ }
212
+ /**
213
+ * Get total span count from a tree (for stats display)
214
+ */
215
+ export function countSpansInTree(spans) {
216
+ let count = 0;
217
+ const countRecursive = (nodes) => {
218
+ for (const node of nodes) {
219
+ count++;
220
+ if (node.children) {
221
+ countRecursive(node.children);
222
+ }
223
+ }
224
+ };
225
+ countRecursive(spans);
226
+ return count;
227
+ }
228
+ //# sourceMappingURL=flowTransform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flowTransform.js","sourceRoot":"","sources":["../../../../services/traces/flowTransform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Traces Service - Fetch and process trace data from OpenSearch
3
+ */
4
+ import { Span, TimeRange, TraceQueryParams, TraceSearchResult } from '../../types/index.js';
5
+ export { groupSpansByTrace, getSpansForTrace } from './traceGrouping.js';
6
+ export { extractMessagesFromSpans } from './messageExtraction.js';
7
+ /**
8
+ * Fetch traces from the backend API
9
+ * Backend handles config resolution (file or env vars) - no headers needed from frontend
10
+ */
11
+ export declare function fetchTraces(params: TraceQueryParams): Promise<TraceSearchResult>;
12
+ /**
13
+ * Fetch traces by trace ID
14
+ */
15
+ export declare function fetchTraceById(traceId: string): Promise<TraceSearchResult>;
16
+ /**
17
+ * Fetch traces by run IDs
18
+ */
19
+ export declare function fetchTracesByRunIds(runIds: string[]): Promise<TraceSearchResult>;
20
+ /**
21
+ * Fetch traces correlated with a single test-case run, using all available
22
+ * correlation strategies (see AGENTS.md → Trace correlation conventions):
23
+ *
24
+ * A. traceId — W3C-propagated agents share traceId with the eval span
25
+ * B. runId — agents tag spans with `agent_health.run.id == runId` (or the
26
+ * OTEL-standard `gen_ai.conversation.id`); the server query
27
+ * unions both. NOT `gen_ai.request.id` — that is not a
28
+ * registered Gen AI semconv attribute. See AGENTS.md → Strategy B.
29
+ * C. agents — service.name + time-window fallback (opt-in / `includeWindowFallback`)
30
+ *
31
+ * Strategies A and B are always safe (no false positives). Strategy C is
32
+ * opt-in because it can surface concurrent runs of the same agent and
33
+ * cross-team noise on a shared cluster.
34
+ */
35
+ export declare function fetchTracesForRun(params: {
36
+ /**
37
+ * Agent run id (Strategy B correlation). Optional — runs persisted via the
38
+ * deferred trace-mode path may not carry one; in that case correlation
39
+ * falls back to the time-window `windowAgents` clause (Strategy C).
40
+ */
41
+ runId?: string;
42
+ evalTraceId?: string;
43
+ /**
44
+ * Strategy A (direct): the report's own `traceId`. Agents that emit their
45
+ * own OTel trace (e.g. pi) carry it on every span but NOT our connector
46
+ * `runId`, so a direct `traceId` lookup returns the run's spans immediately
47
+ * — independent of the deep-dive's window hints.
48
+ */
49
+ traceId?: string;
50
+ /**
51
+ * Strategy D (direct): the report's `session.id`. Claude Code stamps it on
52
+ * every span; a direct `sessionId` lookup correlates without needing a
53
+ * window. (Server matches both the analyzed field and its `.keyword`.)
54
+ */
55
+ sessionId?: string;
56
+ includeWindowFallback?: boolean;
57
+ windowAgents?: Array<{
58
+ serviceName: string;
59
+ startedAt: number;
60
+ endedAt: number;
61
+ sessionId?: string;
62
+ }>;
63
+ size?: number;
64
+ }): Promise<TraceSearchResult>;
65
+ /**
66
+ * Fetch recent traces for live tailing
67
+ */
68
+ export declare function fetchRecentTraces(options: {
69
+ minutesAgo?: number;
70
+ sessionId?: string;
71
+ serviceName?: string;
72
+ textSearch?: string;
73
+ size?: number;
74
+ cursor?: string;
75
+ }): Promise<TraceSearchResult>;
76
+ /**
77
+ * Fetch all traces for a Claude Code session by session ID
78
+ */
79
+ export declare function fetchTracesBySessionId(sessionId: string): Promise<TraceSearchResult>;
80
+ /**
81
+ * Check traces API health
82
+ * Backend handles config resolution (file or env vars) - no headers needed from frontend
83
+ */
84
+ export declare function checkTracesHealth(): Promise<{
85
+ status: string;
86
+ index?: string;
87
+ error?: string;
88
+ }>;
89
+ /**
90
+ * Process flat spans into a hierarchical tree structure
91
+ */
92
+ export declare function processSpansIntoTree(flatSpans: Span[]): Span[];
93
+ /**
94
+ * Calculate global time range across all spans
95
+ */
96
+ export declare function calculateTimeRange(spans: Span[]): TimeRange;
97
+ /**
98
+ * Get color for a span based on its type/name
99
+ */
100
+ export declare function getSpanColor(span: Span): string;
101
+ /**
102
+ * Compute the initial expanded-spans set for a trace: every root, plus
103
+ * every ancestor of any ERROR-status span so the failing span is visible
104
+ * on load instead of hidden behind collapsed parents (TraceTree and
105
+ * Timeline both key off this set).
106
+ */
107
+ export declare function getInitialExpandedSpans(spanTree: Span[]): Set<string>;
108
+ /**
109
+ * Flatten tree into visible spans based on expanded state
110
+ */
111
+ export declare function flattenVisibleSpans(spans: Span[], expandedSpans: Set<string>, depth?: number): Span[];
112
+ export { categorizeSpan, categorizeSpans, categorizeSpanTree, getSpanCategory, getCategoryMeta, filterSpansByCategory, filterSpanTreeByCategory, countByCategory, buildDisplayName, checkOTelCompliance, hasAnyWarnings, } from './spanCategorization.js';
113
+ export { extractCommonArgKeys, groupToolSpans, calculateToolSimilarity, getToolGroupStats, } from './toolSimilarity.js';
114
+ export { calculateSpanSimilarity, compareTraces, flattenAlignedTree, getComparisonTypeInfo, } from './traceComparison.js';
115
+ export { spansToFlow, applyDagreLayout, detectParallelExecution, countSpansInTree, } from './flowTransform.js';
116
+ export { spansToExecutionFlow, isContainerSpan, findMainFlowSpans, sortByStartTime, } from './executionOrderTransform.js';
117
+ export { spansToIntentNodes, getRootContainerSpan, } from './intentTransform.js';
118
+ export { CATEGORY_COLORS, getCategoryColors, type CategoryColorConfig, } from './categoryStyles.js';
119
+ export { flattenSpans, calculateCategoryStats, extractToolName, extractToolStats, type CategoryStats, type ToolInfo, } from './traceStats.js';
120
+ export { computeTraceSummary, isEmptyTraceSummary, type TraceSummary, } from './traceSummary.js';
121
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../services/traces/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,255 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { getSpanCategory } from './spanCategorization.js';
6
+ import { getBackendUrl } from '../../lib/portConfig.js';
7
+ // Re-export trace grouping utilities
8
+ export { groupSpansByTrace, getSpansForTrace } from './traceGrouping.js';
9
+ // Re-export message extraction
10
+ export { extractMessagesFromSpans } from './messageExtraction.js';
11
+ /**
12
+ * Get API base URL dynamically
13
+ * Server-side (Node.js): Use localhost with AH_PORT env var (legacy: AGENT_HEALTH_PORT)
14
+ * Client-side (browser): Use relative URLs
15
+ */
16
+ function getApiBaseUrl() {
17
+ const isServerSide = typeof window === 'undefined';
18
+ if (isServerSide) {
19
+ // Server-side self-call — use the canonical backend URL (AH_PORT is kept
20
+ // in lockstep with the actual bound port; see server lifecycle).
21
+ return getBackendUrl();
22
+ }
23
+ return ''; // Relative URLs in browser
24
+ }
25
+ /**
26
+ * Fetch traces from the backend API
27
+ * Backend handles config resolution (file or env vars) - no headers needed from frontend
28
+ */
29
+ export async function fetchTraces(params) {
30
+ const response = await fetch(`${getApiBaseUrl()}/api/traces`, {
31
+ method: 'POST',
32
+ headers: {
33
+ 'Content-Type': 'application/json',
34
+ },
35
+ body: JSON.stringify(params)
36
+ });
37
+ if (!response.ok) {
38
+ const error = await response.json().catch(() => ({ error: 'Unknown error' }));
39
+ throw new Error(error.error || `HTTP ${response.status}`);
40
+ }
41
+ return response.json();
42
+ }
43
+ /**
44
+ * Fetch traces by trace ID
45
+ */
46
+ export async function fetchTraceById(traceId) {
47
+ return fetchTraces({ traceId });
48
+ }
49
+ /**
50
+ * Fetch traces by run IDs
51
+ */
52
+ export async function fetchTracesByRunIds(runIds) {
53
+ return fetchTraces({ runIds });
54
+ }
55
+ /**
56
+ * Fetch traces correlated with a single test-case run, using all available
57
+ * correlation strategies (see AGENTS.md → Trace correlation conventions):
58
+ *
59
+ * A. traceId — W3C-propagated agents share traceId with the eval span
60
+ * B. runId — agents tag spans with `agent_health.run.id == runId` (or the
61
+ * OTEL-standard `gen_ai.conversation.id`); the server query
62
+ * unions both. NOT `gen_ai.request.id` — that is not a
63
+ * registered Gen AI semconv attribute. See AGENTS.md → Strategy B.
64
+ * C. agents — service.name + time-window fallback (opt-in / `includeWindowFallback`)
65
+ *
66
+ * Strategies A and B are always safe (no false positives). Strategy C is
67
+ * opt-in because it can surface concurrent runs of the same agent and
68
+ * cross-team noise on a shared cluster.
69
+ */
70
+ export async function fetchTracesForRun(params) {
71
+ const { runId, evalTraceId, traceId, sessionId, includeWindowFallback, windowAgents, size = 1000 } = params;
72
+ // Only include the runIds clause when runId is a non-empty string. A
73
+ // `[undefined]` array makes the server build a `terms: [null]` query that
74
+ // OpenSearch rejects wholesale (taking the Strategy C window fallback down
75
+ // with it). Runs persisted via the deferred trace-mode path may not carry
76
+ // a runId, so this guard is load-bearing for the Traces tab. See #264.
77
+ const query = { size };
78
+ if (typeof runId === 'string' && runId.length > 0) {
79
+ query.runIds = [runId];
80
+ }
81
+ // traceId: explicit param wins, else the eval-span traceId (both → query.traceId).
82
+ if (traceId || evalTraceId)
83
+ query.traceId = traceId || evalTraceId;
84
+ if (typeof sessionId === 'string' && sessionId.length > 0)
85
+ query.sessionId = sessionId;
86
+ if (includeWindowFallback && windowAgents && windowAgents.length > 0) {
87
+ query.agents = windowAgents;
88
+ }
89
+ return fetchTraces(query);
90
+ }
91
+ /**
92
+ * Fetch recent traces for live tailing
93
+ */
94
+ export async function fetchRecentTraces(options) {
95
+ const { minutesAgo = 5, sessionId, serviceName, textSearch, size = 100, cursor } = options;
96
+ // Session queries don't need a time range — fetch all spans for the session
97
+ if (sessionId) {
98
+ return fetchTraces({ sessionId, serviceName, textSearch, size, cursor });
99
+ }
100
+ const now = Date.now();
101
+ const startTime = now - (minutesAgo * 60 * 1000);
102
+ return fetchTraces({
103
+ startTime,
104
+ endTime: now,
105
+ serviceName,
106
+ textSearch,
107
+ size,
108
+ cursor,
109
+ });
110
+ }
111
+ /**
112
+ * Fetch all traces for a Claude Code session by session ID
113
+ */
114
+ export async function fetchTracesBySessionId(sessionId) {
115
+ return fetchTraces({ sessionId, size: 1000 });
116
+ }
117
+ /**
118
+ * Check traces API health
119
+ * Backend handles config resolution (file or env vars) - no headers needed from frontend
120
+ */
121
+ export async function checkTracesHealth() {
122
+ const response = await fetch(`${getApiBaseUrl()}/api/traces/health`);
123
+ return response.json();
124
+ }
125
+ /**
126
+ * Process flat spans into a hierarchical tree structure
127
+ */
128
+ export function processSpansIntoTree(flatSpans) {
129
+ if (!flatSpans || flatSpans.length === 0)
130
+ return [];
131
+ const spanMap = new Map();
132
+ const roots = [];
133
+ // First pass: index all spans
134
+ flatSpans.forEach(span => {
135
+ spanMap.set(span.spanId, { ...span, children: [] });
136
+ });
137
+ // Second pass: build tree structure
138
+ spanMap.forEach(span => {
139
+ if (span.parentSpanId && spanMap.has(span.parentSpanId)) {
140
+ const parent = spanMap.get(span.parentSpanId);
141
+ parent.children = parent.children || [];
142
+ parent.children.push(span);
143
+ }
144
+ else {
145
+ roots.push(span);
146
+ }
147
+ });
148
+ // Sort children by startTime
149
+ const sortChildren = (spans) => {
150
+ spans.sort((a, b) => new Date(a.startTime).getTime() - new Date(b.startTime).getTime());
151
+ spans.forEach(span => {
152
+ if (span.children && span.children.length > 0) {
153
+ sortChildren(span.children);
154
+ }
155
+ });
156
+ };
157
+ sortChildren(roots);
158
+ return roots;
159
+ }
160
+ /**
161
+ * Calculate global time range across all spans
162
+ */
163
+ export function calculateTimeRange(spans) {
164
+ if (!spans || spans.length === 0) {
165
+ return { startTime: 0, endTime: 0, duration: 0 };
166
+ }
167
+ let startTime = Infinity;
168
+ let endTime = -Infinity;
169
+ spans.forEach(span => {
170
+ const spanStart = new Date(span.startTime).getTime();
171
+ const spanEnd = new Date(span.endTime).getTime();
172
+ if (spanStart < startTime)
173
+ startTime = spanStart;
174
+ if (spanEnd > endTime)
175
+ endTime = spanEnd;
176
+ });
177
+ return {
178
+ startTime,
179
+ endTime,
180
+ duration: endTime - startTime
181
+ };
182
+ }
183
+ /**
184
+ * Get color for a span based on its type/name
185
+ */
186
+ export function getSpanColor(span) {
187
+ const category = getSpanCategory(span);
188
+ const CATEGORY_HEX = {
189
+ AGENT: '#6366f1', // indigo
190
+ LLM: '#a855f7', // purple
191
+ TOOL: '#f59e0b', // amber
192
+ EVAL: '#10b981', // emerald
193
+ ERROR: '#ef4444', // red
194
+ OTHER: '#64748b', // slate
195
+ };
196
+ return CATEGORY_HEX[category] || CATEGORY_HEX.OTHER;
197
+ }
198
+ /**
199
+ * Compute the initial expanded-spans set for a trace: every root, plus
200
+ * every ancestor of any ERROR-status span so the failing span is visible
201
+ * on load instead of hidden behind collapsed parents (TraceTree and
202
+ * Timeline both key off this set).
203
+ */
204
+ export function getInitialExpandedSpans(spanTree) {
205
+ const expanded = new Set();
206
+ const walk = (spans, ancestors) => {
207
+ for (const span of spans) {
208
+ if (!span.parentSpanId)
209
+ expanded.add(span.spanId);
210
+ if (span.status === 'ERROR') {
211
+ for (const id of ancestors)
212
+ expanded.add(id);
213
+ }
214
+ if (span.children?.length) {
215
+ walk(span.children, [...ancestors, span.spanId]);
216
+ }
217
+ }
218
+ };
219
+ walk(spanTree, []);
220
+ return expanded;
221
+ }
222
+ /**
223
+ * Flatten tree into visible spans based on expanded state
224
+ */
225
+ export function flattenVisibleSpans(spans, expandedSpans, depth = 0) {
226
+ const result = [];
227
+ for (const span of spans) {
228
+ const hasChildren = (span.children?.length || 0) > 0;
229
+ result.push({ ...span, depth, hasChildren });
230
+ if (hasChildren && expandedSpans.has(span.spanId)) {
231
+ result.push(...flattenVisibleSpans(span.children, expandedSpans, depth + 1));
232
+ }
233
+ }
234
+ return result;
235
+ }
236
+ // Re-export categorization functions
237
+ export { categorizeSpan, categorizeSpans, categorizeSpanTree, getSpanCategory, getCategoryMeta, filterSpansByCategory, filterSpanTreeByCategory, countByCategory, buildDisplayName, checkOTelCompliance, hasAnyWarnings, } from './spanCategorization.js';
238
+ // Re-export tool similarity functions
239
+ export { extractCommonArgKeys, groupToolSpans, calculateToolSimilarity, getToolGroupStats, } from './toolSimilarity.js';
240
+ // Re-export trace comparison functions
241
+ export { calculateSpanSimilarity, compareTraces, flattenAlignedTree, getComparisonTypeInfo, } from './traceComparison.js';
242
+ // Re-export flow transform functions
243
+ export { spansToFlow, applyDagreLayout, detectParallelExecution, countSpansInTree, } from './flowTransform.js';
244
+ // Re-export execution order transform functions
245
+ export { spansToExecutionFlow, isContainerSpan, findMainFlowSpans, sortByStartTime, } from './executionOrderTransform.js';
246
+ // Re-export intent transform functions
247
+ export { spansToIntentNodes, getRootContainerSpan, } from './intentTransform.js';
248
+ // Re-export category styles
249
+ export { CATEGORY_COLORS, getCategoryColors, } from './categoryStyles.js';
250
+ // Re-export trace stats utilities
251
+ export { flattenSpans, calculateCategoryStats, extractToolName, extractToolStats, } from './traceStats.js';
252
+ // Trace-level summary (category counts + tokens + models) reused by both
253
+ // the inline expansion header and the fullscreen header.
254
+ export { computeTraceSummary, isEmptyTraceSummary, } from './traceSummary.js';
255
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../services/traces/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Intent Transform Service
3
+ *
4
+ * Transforms span trees into time-series compressed nodes for Intent view.
5
+ * Groups only CONSECUTIVE same-category spans, preserving execution order.
6
+ *
7
+ * Example: LLM, TOOL, LLM, TOOL, TOOL, LLM
8
+ * Result: [LLM], [TOOL], [LLM], [TOOL ×2], [LLM]
9
+ */
10
+ import { CategorizedSpan, IntentNode } from '../../types/index.js';
11
+ /**
12
+ * Transform a categorized span tree into IntentNodes for the Intent view.
13
+ * Groups only consecutive same-category spans, preserving execution order.
14
+ */
15
+ export declare function spansToIntentNodes(spanTree: CategorizedSpan[]): IntentNode[];
16
+ /**
17
+ * Get the root/container span for display as header (if exists)
18
+ */
19
+ export declare function getRootContainerSpan(spanTree: CategorizedSpan[]): CategorizedSpan | null;
20
+ //# sourceMappingURL=intentTransform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intentTransform.d.ts","sourceRoot":"","sources":["../../../../services/traces/intentTransform.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,UAAU,EAAgB,MAAM,SAAS,CAAC;AA0HpE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,UAAU,EAAE,CAM5E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,eAAe,GAAG,IAAI,CAYxF"}