@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,213 @@
1
+ import type { TestCase, TrajectoryStep, AgentHooks } from '../../types/index.js';
2
+ /**
3
+ * Protocol type for agent communication
4
+ * - agui-streaming: AG-UI protocol over SSE (current default)
5
+ * - rest: Non-streaming REST API
6
+ * - openai-compatible: OpenAI chat completions format (LiteLLM, Ollama, vLLM)
7
+ * - subprocess: CLI tools invoked as child processes
8
+ * - claude-code: Claude Code CLI (specialized subprocess)
9
+ * - strands: Amazon Strands via Bedrock Agent Runtime API
10
+ * - langgraph: LangGraph agent via direct REST API
11
+ * - mock: Demo/testing connector
12
+ */
13
+ export type ConnectorProtocol = 'agui-streaming' | 'rest' | 'openai-compatible' | 'subprocess' | 'claude-code' | 'kiro' | 'pi' | 'strands' | 'langgraph' | 'mock';
14
+ /**
15
+ * Authentication type for connectors
16
+ */
17
+ export type ConnectorAuthType = 'none' | 'basic' | 'bearer' | 'api-key' | 'aws-sigv4';
18
+ /**
19
+ * Authentication configuration for connectors
20
+ * Each connector handles its own auth strategy
21
+ */
22
+ export interface ConnectorAuth {
23
+ type: ConnectorAuthType;
24
+ username?: string;
25
+ password?: string;
26
+ token?: string;
27
+ awsRegion?: string;
28
+ awsService?: string;
29
+ awsAccessKeyId?: string;
30
+ awsSecretAccessKey?: string;
31
+ awsSessionToken?: string;
32
+ headers?: Record<string, string>;
33
+ }
34
+ /**
35
+ * Standard request format that connectors transform to agent-specific format
36
+ */
37
+ export interface ConnectorRequest {
38
+ testCase: TestCase;
39
+ modelId: string;
40
+ threadId?: string;
41
+ runId?: string;
42
+ /**
43
+ * Pre-built payload from hook processing.
44
+ * When set, connectors should use this directly instead of calling buildPayload().
45
+ * This ensures that any modifications made by beforeRequest hooks are preserved.
46
+ */
47
+ payload?: any;
48
+ /**
49
+ * Connector-specific configuration from agent config.
50
+ * Threaded from agent.connectorConfig at evaluation time.
51
+ */
52
+ connectorConfig?: Record<string, any>;
53
+ }
54
+ /**
55
+ * Response from connector execution
56
+ */
57
+ export interface ConnectorResponse {
58
+ trajectory: TrajectoryStep[];
59
+ runId: string | null;
60
+ rawEvents?: any[];
61
+ metadata?: Record<string, any>;
62
+ }
63
+ /**
64
+ * Progress callback for streaming connectors
65
+ */
66
+ export type ConnectorProgressCallback = (step: TrajectoryStep) => void;
67
+ /**
68
+ * Raw event callback for debugging
69
+ */
70
+ export type ConnectorRawEventCallback = (event: any) => void;
71
+ /**
72
+ * Per-connector configuration for propagating OTel trace context to the
73
+ * downstream agent, so the agent's spans become children of agent-health's
74
+ * `test_case` eval span (single trace tree).
75
+ *
76
+ * Strategies (see AGENTS.md → "Trace correlation conventions"):
77
+ * A. propagateEnv — inject W3C TRACEPARENT env var into subprocess
78
+ * A. propagateHeader — inject W3C `traceparent` HTTP header into request
79
+ * C. serviceName — OpenSearch `service.name` to look for as a
80
+ * time-window fallback when A/B don't apply
81
+ * (opt-in via UI toggle on the run report).
82
+ */
83
+ export interface TraceContextStrategy {
84
+ /** Inject W3C TRACEPARENT env var into the subprocess (Strategy A). */
85
+ propagateEnv?: boolean;
86
+ /** Inject W3C `traceparent` HTTP header (Strategy A). */
87
+ propagateHeader?: boolean;
88
+ /** Service name this connector's agent emits under in OpenSearch (Strategy C). */
89
+ serviceName?: string;
90
+ }
91
+ /**
92
+ * Base connector interface - all connectors must implement this
93
+ */
94
+ export interface AgentConnector {
95
+ /** Unique identifier for this connector type */
96
+ readonly type: ConnectorProtocol;
97
+ /** Human-readable name */
98
+ readonly name: string;
99
+ /** Whether this connector supports streaming */
100
+ readonly supportsStreaming: boolean;
101
+ /**
102
+ * Transform standard request to agent-specific payload
103
+ */
104
+ buildPayload(request: ConnectorRequest): any;
105
+ /**
106
+ * Execute the request and return trajectory
107
+ * @param endpoint - Agent endpoint URL or command
108
+ * @param request - Standard request format
109
+ * @param auth - Authentication configuration
110
+ * @param onProgress - Optional callback for streaming progress
111
+ * @param onRawEvent - Optional callback for raw events (debugging)
112
+ */
113
+ execute(endpoint: string, request: ConnectorRequest, auth: ConnectorAuth, onProgress?: ConnectorProgressCallback, onRawEvent?: ConnectorRawEventCallback): Promise<ConnectorResponse>;
114
+ /**
115
+ * Parse raw response into TrajectoryStep array
116
+ * Used internally by execute() and for re-processing stored raw events
117
+ */
118
+ parseResponse(rawResponse: any): TrajectoryStep[];
119
+ /**
120
+ * Optional health check for the connector
121
+ */
122
+ healthCheck?(endpoint: string, auth: ConnectorAuth): Promise<boolean>;
123
+ /**
124
+ * Optional trace-context propagation strategy. Defaults provided by each
125
+ * connector class; users may override per-agent via `connectorConfig.traceContext`.
126
+ */
127
+ traceContext?: TraceContextStrategy;
128
+ }
129
+ /**
130
+ * Input mode for subprocess connectors
131
+ */
132
+ export type SubprocessInputMode = 'stdin' | 'arg';
133
+ /**
134
+ * Output parser type for subprocess connectors
135
+ */
136
+ export type SubprocessOutputParser = 'json' | 'text' | 'streaming';
137
+ /**
138
+ * Configuration for subprocess-based connectors
139
+ */
140
+ export interface SubprocessConfig {
141
+ command: string;
142
+ args?: string[];
143
+ env?: Record<string, string>;
144
+ inputMode: SubprocessInputMode;
145
+ outputParser: SubprocessOutputParser;
146
+ timeout?: number;
147
+ workingDir?: string;
148
+ }
149
+ /**
150
+ * Extended AgentConfig with connector specification
151
+ * Extends the base AgentConfig from types/index.ts
152
+ */
153
+ export interface AgentConfigWithConnector {
154
+ key: string;
155
+ name: string;
156
+ endpoint: string;
157
+ description?: string;
158
+ enabled?: boolean;
159
+ models: string[];
160
+ headers?: Record<string, string>;
161
+ useTraces?: boolean;
162
+ /** Connector type to use (defaults to 'agui-streaming' for backwards compat) */
163
+ connectorType?: ConnectorProtocol;
164
+ /** Connector-specific configuration */
165
+ connectorConfig?: SubprocessConfig | Record<string, any>;
166
+ /** Authentication configuration */
167
+ auth?: ConnectorAuth;
168
+ /** Lifecycle hooks for custom setup/transform logic */
169
+ hooks?: AgentHooks;
170
+ }
171
+ /**
172
+ * Registry for connector implementations
173
+ * Allows code-level registration of new connectors
174
+ */
175
+ export interface ConnectorRegistry {
176
+ /**
177
+ * Register a connector implementation
178
+ */
179
+ register(connector: AgentConnector): void;
180
+ /**
181
+ * Get a connector by protocol type
182
+ */
183
+ get(type: ConnectorProtocol): AgentConnector | undefined;
184
+ /**
185
+ * Get all registered connectors
186
+ */
187
+ getAll(): AgentConnector[];
188
+ /**
189
+ * Check if a connector is registered
190
+ */
191
+ has(type: ConnectorProtocol): boolean;
192
+ /**
193
+ * Get connector for an agent config (with fallback to default)
194
+ */
195
+ getForAgent(agent: AgentConfigWithConnector): AgentConnector;
196
+ /**
197
+ * Get list of registered connector types
198
+ */
199
+ getRegisteredTypes(): ConnectorProtocol[];
200
+ /**
201
+ * Clear all registered connectors (useful for testing)
202
+ */
203
+ clear(): void;
204
+ }
205
+ /**
206
+ * Options for connector execution
207
+ */
208
+ export interface ConnectorExecuteOptions {
209
+ timeout?: number;
210
+ retries?: number;
211
+ retryDelay?: number;
212
+ }
213
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../services/connectors/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../services/connectors/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Bedrock LLM Judge Client
3
+ * Calls backend proxy for AWS Bedrock evaluations
4
+ */
5
+ import { TrajectoryStep, EvaluationMetrics, ImprovementStrategy, OpenSearchLog, PassFailStatus } from '../../types/index.js';
6
+ interface JudgeResult {
7
+ passFailStatus: PassFailStatus;
8
+ metrics: EvaluationMetrics;
9
+ llmJudgeReasoning: string;
10
+ improvementStrategies: ImprovementStrategy[];
11
+ judgeDurationMs?: number;
12
+ judgeAttempts?: number;
13
+ /** Raw text the judge model emitted (forwarded from /api/judge). */
14
+ rawResponse?: string;
15
+ /** Extra JSON keys the model emitted that weren't typed wire fields. */
16
+ extraFields?: Record<string, unknown>;
17
+ /** System/user prompts the judge actually saw (when AH_JUDGE_DEBUG=1). */
18
+ judgeDebug?: {
19
+ provider?: string;
20
+ modelId?: string;
21
+ evaluatorId?: string;
22
+ systemPrompt?: string;
23
+ userPrompt?: string;
24
+ };
25
+ }
26
+ interface ExpectedBehavior {
27
+ expectedOutcomes?: string[];
28
+ expectedTrajectory?: any[];
29
+ }
30
+ /**
31
+ * Real Bedrock Judge implementation via backend proxy with exponential backoff retry
32
+ * Calls the backend API which handles AWS Bedrock communication
33
+ * The backend routes to the appropriate provider (demo/bedrock/ollama) based on modelId
34
+ * @param trajectory - The agent's execution trajectory
35
+ * @param expected - Expected outcomes or trajectory
36
+ * @param logs - Optional OpenSearch logs
37
+ * @param onProgress - Optional progress callback
38
+ * @param modelId - Model ID for judge evaluation (determines provider routing)
39
+ * @param evaluatorId - Optional saved evaluator id (resolves the system prompt server-side)
40
+ * @param runId - Agent run id. Forwarded so the `agent` (trace) judge provider's
41
+ * read-only `query_spans` / `query_logs` tools can scope to this single run.
42
+ * Without it the route 400s with `runId is required for the agent (trace)
43
+ * judge provider`. For other providers it's ignored. Pre-fix the runner
44
+ * never forwarded this even when known on the report, so picking the
45
+ * `agent-trace-judge` model from the UI Judge Model dropdown always
46
+ * failed at the route layer.
47
+ * @param agents - Optional Strategy C correlation hints (service.name +
48
+ * time-window) for the agent (trace) judge. The trace tool unions
49
+ * Strategy B (`runIds`) with these so spans the agent emits under its
50
+ * own correlation (claude-code's session id, etc.) are findable. See #264.
51
+ */
52
+ export declare function callBedrockJudge(trajectory: TrajectoryStep[], expected: ExpectedBehavior, logs?: OpenSearchLog[], onProgress?: (chunk: string) => void, modelId?: string, evaluatorId?: string, runId?: string, agents?: Array<{
53
+ serviceName: string;
54
+ startedAt: number;
55
+ endedAt: number;
56
+ sessionId?: string;
57
+ }>): Promise<JudgeResult>;
58
+ /**
59
+ * Simulate Bedrock Judge evaluation (fallback for testing)
60
+ * @deprecated Use callBedrockJudge for real evaluations
61
+ */
62
+ export declare function simulateBedrockJudge(trajectory: TrajectoryStep[], expectedTrajectory: any[]): JudgeResult;
63
+ export {};
64
+ //# sourceMappingURL=bedrockJudge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrockJudge.d.ts","sourceRoot":"","sources":["../../../../services/evaluation/bedrockJudge.ts"],"names":[],"mappings":"AAKA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAIhH,UAAU,WAAW;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,mBAAmB,EAAE,CAAC;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,0EAA0E;IAC1E,UAAU,CAAC,EAAE;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AASD,UAAU,gBAAgB;IACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB,CAAC,EAAE,GAAG,EAAE,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,cAAc,EAAE,EAC5B,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,CAAC,EAAE,aAAa,EAAE,EACtB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACpC,OAAO,CAAC,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,KAAK,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9F,OAAO,CAAC,WAAW,CAAC,CAmHtB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,cAAc,EAAE,EAC5B,kBAAkB,EAAE,GAAG,EAAE,GACxB,WAAW,CA+Bb"}
@@ -0,0 +1,167 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { ENV_CONFIG } from '../../lib/config.js';
6
+ import { getBackendUrl } from '../../lib/portConfig.js';
7
+ /**
8
+ * Sleep utility for retry delays
9
+ */
10
+ function sleep(ms) {
11
+ return new Promise(resolve => setTimeout(resolve, ms));
12
+ }
13
+ /**
14
+ * Real Bedrock Judge implementation via backend proxy with exponential backoff retry
15
+ * Calls the backend API which handles AWS Bedrock communication
16
+ * The backend routes to the appropriate provider (demo/bedrock/ollama) based on modelId
17
+ * @param trajectory - The agent's execution trajectory
18
+ * @param expected - Expected outcomes or trajectory
19
+ * @param logs - Optional OpenSearch logs
20
+ * @param onProgress - Optional progress callback
21
+ * @param modelId - Model ID for judge evaluation (determines provider routing)
22
+ * @param evaluatorId - Optional saved evaluator id (resolves the system prompt server-side)
23
+ * @param runId - Agent run id. Forwarded so the `agent` (trace) judge provider's
24
+ * read-only `query_spans` / `query_logs` tools can scope to this single run.
25
+ * Without it the route 400s with `runId is required for the agent (trace)
26
+ * judge provider`. For other providers it's ignored. Pre-fix the runner
27
+ * never forwarded this even when known on the report, so picking the
28
+ * `agent-trace-judge` model from the UI Judge Model dropdown always
29
+ * failed at the route layer.
30
+ * @param agents - Optional Strategy C correlation hints (service.name +
31
+ * time-window) for the agent (trace) judge. The trace tool unions
32
+ * Strategy B (`runIds`) with these so spans the agent emits under its
33
+ * own correlation (claude-code's session id, etc.) are findable. See #264.
34
+ */
35
+ export async function callBedrockJudge(trajectory, expected, logs, onProgress, modelId, evaluatorId, runId, agents) {
36
+ const maxRetries = 10;
37
+ const baseDelay = 1000; // 1 second
38
+ const judgeApiUrl = ENV_CONFIG.judgeApiUrl || `${getBackendUrl()}/api/judge`;
39
+ console.log('[BedrockJudge] Sending request to backend proxy...');
40
+ console.log('[BedrockJudge] Trajectory steps:', trajectory.length);
41
+ console.log('[BedrockJudge] Expected outcomes:', expected.expectedOutcomes?.length || 0);
42
+ console.log('[BedrockJudge] Expected trajectory steps:', expected.expectedTrajectory?.length || 0);
43
+ console.log('[BedrockJudge] Logs provided:', logs?.length || 0);
44
+ console.log('[BedrockJudge] Model:', modelId || '(using default)');
45
+ const judgeStartTime = Date.now();
46
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
47
+ try {
48
+ console.log(`[BedrockJudge] Attempt ${attempt}/${maxRetries}`);
49
+ // Call backend proxy
50
+ const startTime = Date.now();
51
+ const response = await fetch(judgeApiUrl, {
52
+ method: 'POST',
53
+ headers: {
54
+ 'Content-Type': 'application/json',
55
+ },
56
+ body: JSON.stringify({
57
+ trajectory,
58
+ expectedOutcomes: expected.expectedOutcomes,
59
+ expectedTrajectory: expected.expectedTrajectory,
60
+ logs,
61
+ modelId,
62
+ ...(evaluatorId ? { evaluatorId } : {}),
63
+ // Forward runId so /api/judge can route to the `agent` (trace)
64
+ // provider — its tools require this to scope. Other providers
65
+ // ignore it.
66
+ ...(runId ? { runId } : {}),
67
+ // Forward Strategy C correlation hints (#264) so the agent (trace)
68
+ // judge tool can find spans the agent emits under its OWN
69
+ // correlation (claude-code's session id, etc.), not just spans
70
+ // that share agent-health's runId via gen_ai.request.id.
71
+ ...(agents && agents.length > 0 ? { agents } : {}),
72
+ }),
73
+ });
74
+ if (!response.ok) {
75
+ const errorData = await response.json();
76
+ const errorMessage = errorData.error || `API request failed with status ${response.status}`;
77
+ // 4xx client errors are validation failures — retrying won't help
78
+ if (response.status >= 400 && response.status < 500) {
79
+ throw Object.assign(new Error(`Bedrock Judge validation error (not retryable): ${errorMessage}`), { nonRetryable: true });
80
+ }
81
+ throw new Error(errorMessage);
82
+ }
83
+ const result = await response.json();
84
+ const duration = Date.now() - startTime;
85
+ console.log('[BedrockJudge] ✓ Evaluation completed in', duration, 'ms');
86
+ console.log('[BedrockJudge] Pass/Fail Status:', result.passFailStatus?.toUpperCase());
87
+ console.log('[BedrockJudge] Metrics:', result.metrics);
88
+ console.log('[BedrockJudge] Improvement strategies:', result.improvementStrategies?.length || 0);
89
+ // Call onProgress with the full reasoning if provided
90
+ if (onProgress && result.llmJudgeReasoning) {
91
+ onProgress(result.llmJudgeReasoning);
92
+ }
93
+ return {
94
+ passFailStatus: result.passFailStatus || 'failed', // Default to failed if missing
95
+ metrics: result.metrics,
96
+ llmJudgeReasoning: result.llmJudgeReasoning,
97
+ improvementStrategies: result.improvementStrategies || [],
98
+ judgeDurationMs: Date.now() - judgeStartTime,
99
+ judgeAttempts: attempt,
100
+ // Forward debug breadcrumbs from the route so the runner can persist
101
+ // them on the run document. These are absent in older /api/judge
102
+ // responses (back-compat) and in production unless AH_JUDGE_DEBUG=1.
103
+ rawResponse: result.rawResponse,
104
+ extraFields: result.extraFields,
105
+ judgeDebug: result.judgeDebug,
106
+ };
107
+ }
108
+ catch (error) {
109
+ const isLastAttempt = attempt === maxRetries;
110
+ let errorMessage = 'Unknown error occurred';
111
+ if (error instanceof Error) {
112
+ errorMessage = error.message;
113
+ // Check for network errors
114
+ if (errorMessage.includes('Failed to fetch') || errorMessage.includes('NetworkError')) {
115
+ errorMessage = `Cannot connect to Bedrock Judge backend at ${judgeApiUrl}. Please ensure the backend proxy server is running.`;
116
+ }
117
+ }
118
+ console.error(`[BedrockJudge] Attempt ${attempt} failed:`, errorMessage);
119
+ // Fail fast on non-retryable errors (4xx validation failures)
120
+ if (error?.nonRetryable) {
121
+ throw error;
122
+ }
123
+ // If this is the last attempt, throw the error
124
+ if (isLastAttempt) {
125
+ throw new Error(`Bedrock Judge evaluation failed after ${maxRetries} attempts: ${errorMessage}`);
126
+ }
127
+ // Calculate exponential backoff delay: 1s, 2s, 4s
128
+ const delay = baseDelay * Math.pow(2, attempt - 1);
129
+ console.log(`[BedrockJudge] Retrying in ${delay}ms...`);
130
+ await sleep(delay);
131
+ }
132
+ }
133
+ // This should never be reached due to throw in last attempt, but TypeScript needs it
134
+ throw new Error('Bedrock Judge evaluation failed: Maximum retries exceeded');
135
+ }
136
+ /**
137
+ * Simulate Bedrock Judge evaluation (fallback for testing)
138
+ * @deprecated Use callBedrockJudge for real evaluations
139
+ */
140
+ export function simulateBedrockJudge(trajectory, expectedTrajectory) {
141
+ console.warn('[BedrockJudge] Using simulated judge - this is for testing only');
142
+ const hasRequiredTools = expectedTrajectory.every(exp => trajectory.some(t => t.toolName && exp.requiredTools.includes(t.toolName)));
143
+ const accuracy = hasRequiredTools ? 92 : 65;
144
+ const faithfulness = 95;
145
+ const latency_score = 88;
146
+ return {
147
+ passFailStatus: hasRequiredTools ? 'passed' : 'failed',
148
+ metrics: {
149
+ accuracy,
150
+ faithfulness,
151
+ latency_score,
152
+ trajectory_alignment_score: hasRequiredTools ? 85 : 40
153
+ },
154
+ llmJudgeReasoning: hasRequiredTools
155
+ ? "The agent successfully followed the standard RCA procedure. It correctly identified the problematic node using `opensearch_nodes_stats` after checking health."
156
+ : "The agent deviated from the expected path. It jumped to conclusions without verifying individual node statistics first, missing the specific CPU spike confirmation.",
157
+ improvementStrategies: [
158
+ {
159
+ category: 'tool_usage',
160
+ issue: 'Missing comprehensive health check',
161
+ recommendation: 'Always start with cluster health check before diving into specific nodes',
162
+ priority: 'high'
163
+ }
164
+ ]
165
+ };
166
+ }
167
+ //# sourceMappingURL=bedrockJudge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrockJudge.js","sourceRoot":"","sources":["../../../../services/evaluation/bedrockJudge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Helpers for representing *evaluator failures* on a run.
3
+ *
4
+ * Issue #242: a non-retryable judge / evaluator validation error used to be
5
+ * recorded as a normal `completed` run with `metrics: { … all 0 }` and the
6
+ * surface field `llmJudgeReasoning` left at its `'Waiting for traces to
7
+ * become available...'` placeholder. From a user's perspective that was
8
+ * indistinguishable from "the agent answered terribly" — the actual cause
9
+ * (e.g. `Missing required field: expectedOutcomes`) was hidden in a
10
+ * separate `traceError` field that nothing surfaced in the UI or in
11
+ * benchmark summaries.
12
+ *
13
+ * Two things every error site must do consistently:
14
+ * 1. Set `metricsStatus: 'error'` so stats aggregation can bucket the run
15
+ * into `errored` instead of `failed` (see {@link RunStats}).
16
+ * 2. Replace `llmJudgeReasoning` with a clearly-labelled error message
17
+ * reflecting the *actual* terminal cause, so the run-report Judge tab
18
+ * stops showing the misleading "waiting for traces" placeholder.
19
+ *
20
+ * `buildEvaluatorErrorPatch()` returns the canonical patch payload covering
21
+ * both. Use it everywhere you would otherwise hand-roll
22
+ * `{ metricsStatus: 'error', traceError: ... }`.
23
+ */
24
+ export type EvaluatorErrorKind = 'judge_failed' | 'agent_failed' | 'trace_timeout' | 'trace_incomplete' | 'trace_callback_failed' | 'trace_fetch_failed' | 'unknown';
25
+ export interface EvaluatorErrorPatch {
26
+ metricsStatus: 'error';
27
+ /** Machine-readable cause, persisted alongside the run. */
28
+ traceError: string;
29
+ /** Human-readable surface message shown in the Judge tab. */
30
+ llmJudgeReasoning: string;
31
+ /**
32
+ * Pass/fail is meaningless when the evaluator never ran — set to `null`
33
+ * so the storage layer (`asyncRunStorage.updateReport`) actually CLEARS
34
+ * the field on the persisted document. Using `undefined` here would be
35
+ * filtered out by the typical `!== undefined` allow-list, leaving a
36
+ * stale `'passed'` / `'failed'` on disk inconsistent with
37
+ * `metricsStatus: 'error'`.
38
+ */
39
+ passFailStatus: null;
40
+ /** Reset metrics so charts don't graph the placeholder zeroes as a real run. */
41
+ metrics: {
42
+ accuracy: 0;
43
+ faithfulness: 0;
44
+ latency_score: 0;
45
+ trajectory_alignment_score: 0;
46
+ };
47
+ }
48
+ /**
49
+ * Build the canonical "evaluator could not run" patch for `runs.update()`.
50
+ *
51
+ * @param kind short tag used in logs and as the `traceError` prefix
52
+ * @param error the underlying error or message; we extract `.message`
53
+ * when given an Error so logs aren't `[object Object]`
54
+ */
55
+ export declare function buildEvaluatorErrorPatch(kind: EvaluatorErrorKind, error: unknown): EvaluatorErrorPatch;
56
+ //# sourceMappingURL=evaluatorError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluatorError.d.ts","sourceRoot":"","sources":["../../../../services/evaluation/evaluatorError.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,cAAc,GACd,eAAe,GACf,kBAAkB,GAClB,uBAAuB,GACvB,oBAAoB,GACpB,SAAS,CAAC;AAEd,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;;;;OAOG;IACH,cAAc,EAAE,IAAI,CAAC;IACrB,gFAAgF;IAChF,OAAO,EAAE;QAAE,QAAQ,EAAE,CAAC,CAAC;QAAC,YAAY,EAAE,CAAC,CAAC;QAAC,aAAa,EAAE,CAAC,CAAC;QAAC,0BAA0B,EAAE,CAAC,CAAA;KAAE,CAAC;CAC5F;AAYD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,OAAO,GACb,mBAAmB,CAmCrB"}
@@ -0,0 +1,56 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ const KIND_LABEL = {
6
+ judge_failed: 'Judge evaluation failed',
7
+ agent_failed: 'Agent run did not complete',
8
+ trace_timeout: 'Traces never arrived',
9
+ trace_incomplete: 'Trace did not converge',
10
+ trace_callback_failed: 'Post-trace callback failed',
11
+ trace_fetch_failed: 'Trace fetch failed',
12
+ unknown: 'Evaluator error',
13
+ };
14
+ /**
15
+ * Build the canonical "evaluator could not run" patch for `runs.update()`.
16
+ *
17
+ * @param kind short tag used in logs and as the `traceError` prefix
18
+ * @param error the underlying error or message; we extract `.message`
19
+ * when given an Error so logs aren't `[object Object]`
20
+ */
21
+ export function buildEvaluatorErrorPatch(kind, error) {
22
+ const message = error instanceof Error
23
+ ? error.message
24
+ : typeof error === 'string'
25
+ ? error
26
+ : 'Unknown error';
27
+ const label = KIND_LABEL[kind];
28
+ // `agent_failed` is not an *evaluator* failure — the agent itself never
29
+ // produced a trajectory (timeout/crash). Use prose that says so, instead of
30
+ // the misleading "the evaluator failed" wording, so the Judge tab is honest.
31
+ const isAgent = kind === 'agent_failed';
32
+ return {
33
+ metricsStatus: 'error',
34
+ // Both the human label AND the machine-readable kind token are
35
+ // included — logs / dashboards can grep by `kind=judge_failed`
36
+ // without having to parse the human label, while users skimming
37
+ // a trace view still see the friendly prose form. Format:
38
+ // `<Human Label> (kind=<kind>): <underlying message>`.
39
+ traceError: `${label} (kind=${kind}): ${message}`,
40
+ // The Judge tab renders this directly. Keep the prose concise and
41
+ // explicit: the user must immediately see *why* there is no score.
42
+ llmJudgeReasoning: isAgent
43
+ ? `**Agent run did not complete.**\n\n` +
44
+ `The agent failed to produce a result (e.g. a subprocess timeout or crash) before ` +
45
+ `the evaluation could run, so there is no trajectory to judge. This run is excluded ` +
46
+ `from pass-rate aggregation.\n\n` +
47
+ `**Reason (${kind}):** ${message}`
48
+ : `**Evaluator could not run.**\n\n` +
49
+ `The agent may have completed normally, but the evaluator (judge or trace pipeline) ` +
50
+ `failed before it could produce a verdict. This run is excluded from pass-rate aggregation.\n\n` +
51
+ `**Reason (${kind}):** ${message}`,
52
+ passFailStatus: null,
53
+ metrics: { accuracy: 0, faithfulness: 0, latency_score: 0, trajectory_alignment_score: 0 },
54
+ };
55
+ }
56
+ //# sourceMappingURL=evaluatorError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluatorError.js","sourceRoot":"","sources":["../../../../services/evaluation/evaluatorError.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsDH,MAAM,UAAU,GAAuC;IACrD,YAAY,EAAE,yBAAyB;IACvC,YAAY,EAAE,4BAA4B;IAC1C,aAAa,EAAE,sBAAsB;IACrC,gBAAgB,EAAE,wBAAwB;IAC1C,qBAAqB,EAAE,4BAA4B;IACnD,kBAAkB,EAAE,oBAAoB;IACxC,OAAO,EAAE,iBAAiB;CAC3B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAAwB,EACxB,KAAc;IAEd,MAAM,OAAO,GACX,KAAK,YAAY,KAAK;QACpB,CAAC,CAAC,KAAK,CAAC,OAAO;QACf,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ;YACzB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,eAAe,CAAC;IACxB,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,wEAAwE;IACxE,4EAA4E;IAC5E,6EAA6E;IAC7E,MAAM,OAAO,GAAG,IAAI,KAAK,cAAc,CAAC;IACxC,OAAO;QACL,aAAa,EAAE,OAAO;QACtB,+DAA+D;QAC/D,+DAA+D;QAC/D,gEAAgE;QAChE,0DAA0D;QAC1D,uDAAuD;QACvD,UAAU,EAAE,GAAG,KAAK,UAAU,IAAI,MAAM,OAAO,EAAE;QACjD,kEAAkE;QAClE,mEAAmE;QACnE,iBAAiB,EAAE,OAAO;YACxB,CAAC,CAAC,qCAAqC;gBACrC,mFAAmF;gBACnF,qFAAqF;gBACrF,iCAAiC;gBACjC,aAAa,IAAI,QAAQ,OAAO,EAAE;YACpC,CAAC,CAAC,kCAAkC;gBAClC,qFAAqF;gBACrF,gGAAgG;gBAChG,aAAa,IAAI,QAAQ,OAAO,EAAE;QACtC,cAAc,EAAE,IAAI;QACpB,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,0BAA0B,EAAE,CAAC,EAAE;KAC3F,CAAC;AACJ,CAAC"}