@opensearch-project/agent-health 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (551) hide show
  1. package/README.md +36 -5
  2. package/cli/dist/index.js +8292 -2938
  3. package/deployment/cloudformation/agent-health-observability.yaml +223 -32
  4. package/dist/assets/index-BfxtxmKc.css +1 -0
  5. package/dist/assets/index-CrjAfDHu.js +243 -0
  6. package/dist/index.html +2 -2
  7. package/docs/ARCHITECTURE.md +450 -0
  8. package/docs/BACKEND_JOB_QUEUE.md +405 -0
  9. package/docs/CLAUDE_CODE_TELEMETRY.md +283 -0
  10. package/docs/CLI.md +474 -0
  11. package/docs/CODING_AGENT_ANALYTICS.md +298 -0
  12. package/docs/CONFIGURATION.md +388 -0
  13. package/docs/CONNECTORS.md +536 -0
  14. package/docs/INSTRUMENT_WITH_OTEL.md +397 -0
  15. package/docs/ML-COMMONS-SETUP.md +289 -0
  16. package/docs/NPX_PACKAGING.md +195 -0
  17. package/docs/PERFORMANCE-MONITORING.md +200 -0
  18. package/docs/PERFORMANCE.md +390 -0
  19. package/docs/PI_PROFILING.md +169 -0
  20. package/docs/PLAN-non-agui-agent-support.md +525 -0
  21. package/docs/SDK.md +626 -0
  22. package/docs/SKILLS.md +264 -0
  23. package/docs/STORAGE_INDEX_FIELD_LIMITS.md +216 -0
  24. package/docs/blogs/2026-02-28-opensearch-agent-health.md +200 -0
  25. package/docs/blogs/getting-started-blog.md +608 -0
  26. package/docs/diagrams/Agent-health.excalidraw +5656 -0
  27. package/docs/diagrams/architecture.png +0 -0
  28. package/docs/plans/field-redesign.md +468 -0
  29. package/docs/rfcs/001-coding-agent-analytics.md +374 -0
  30. package/docs/rfcs/002-enterprise-leaderboard.md +267 -0
  31. package/docs/rfcs/003-remote-aggregation.md +146 -0
  32. package/docs/rfcs/004-test-sdk-v2.md +599 -0
  33. package/docs/skills/AGENT_HEALTH.md +652 -0
  34. package/docs/skills/AGENT_PROFILE.md +191 -0
  35. package/docs/skills/add-connector/SKILL.md +68 -0
  36. package/docs/skills/agent-health-profile/SKILL.md +40 -0
  37. package/docs/skills/config-auth/SKILL.md +194 -0
  38. package/docs/skills/config-auth/evals/evals.json +35 -0
  39. package/docs/skills/create-pr/SKILL.md +73 -0
  40. package/docs/skills/instrument-otel/SKILL.md +84 -0
  41. package/docs/skills/write-test/SKILL.md +124 -0
  42. package/docs/ui prd.md +376 -0
  43. package/examples/README.md +53 -0
  44. package/examples/config/agent-health.config.example.ts +155 -0
  45. package/examples/connectors/echo-connector.ts +131 -0
  46. package/examples/eval-files/demo.eval.js +128 -0
  47. package/examples/eval-files/ops-rca-classification.eval.js +71 -0
  48. package/examples/eval-files/ops-rca-evaluator.json +15 -0
  49. package/examples/eval-files/sdk-demo.eval.js +72 -0
  50. package/examples/eval-files/sdk-describe-demo.eval.js +50 -0
  51. package/examples/eval-files/sdk-hooks-demo.eval.js +99 -0
  52. package/examples/pi-profiling/README.md +77 -0
  53. package/examples/pi-profiling/agent-health-profile.ts +417 -0
  54. package/lib/dist/lib/agentUtils.d.ts +29 -0
  55. package/lib/dist/lib/agentUtils.d.ts.map +1 -0
  56. package/lib/dist/lib/agentUtils.js +43 -0
  57. package/lib/dist/lib/agentUtils.js.map +1 -0
  58. package/lib/dist/lib/bedrockCompat.d.ts +27 -0
  59. package/lib/dist/lib/bedrockCompat.d.ts.map +1 -0
  60. package/lib/dist/lib/bedrockCompat.js +83 -0
  61. package/lib/dist/lib/bedrockCompat.js.map +1 -0
  62. package/lib/dist/lib/benchmarkExport.d.ts +14 -0
  63. package/lib/dist/lib/benchmarkExport.d.ts.map +1 -0
  64. package/lib/dist/lib/benchmarkExport.js +41 -0
  65. package/lib/dist/lib/benchmarkExport.js.map +1 -0
  66. package/lib/dist/lib/benchmarkImage.d.ts +52 -0
  67. package/lib/dist/lib/benchmarkImage.d.ts.map +1 -0
  68. package/lib/dist/lib/benchmarkImage.js +113 -0
  69. package/lib/dist/lib/benchmarkImage.js.map +1 -0
  70. package/lib/dist/lib/benchmarkVersionUtils.d.ts +50 -0
  71. package/lib/dist/lib/benchmarkVersionUtils.d.ts.map +1 -0
  72. package/lib/dist/lib/benchmarkVersionUtils.js +89 -0
  73. package/lib/dist/lib/benchmarkVersionUtils.js.map +1 -0
  74. package/lib/dist/lib/chunkedFetch.d.ts +18 -0
  75. package/lib/dist/lib/chunkedFetch.d.ts.map +1 -0
  76. package/lib/dist/lib/chunkedFetch.js +40 -0
  77. package/lib/dist/lib/chunkedFetch.js.map +1 -0
  78. package/lib/dist/lib/comparisonInsights.d.ts +104 -0
  79. package/lib/dist/lib/comparisonInsights.d.ts.map +1 -0
  80. package/lib/dist/lib/comparisonInsights.js +212 -0
  81. package/lib/dist/lib/comparisonInsights.js.map +1 -0
  82. package/lib/dist/lib/config/defineConfig.d.ts +27 -0
  83. package/lib/dist/lib/config/defineConfig.d.ts.map +1 -0
  84. package/lib/dist/lib/config/defineConfig.js +28 -0
  85. package/lib/dist/lib/config/defineConfig.js.map +1 -0
  86. package/lib/dist/lib/config/index.d.ts +9 -0
  87. package/lib/dist/lib/config/index.d.ts.map +1 -0
  88. package/lib/dist/lib/config/index.js +8 -0
  89. package/lib/dist/lib/config/index.js.map +1 -0
  90. package/lib/dist/lib/config/loader.d.ts +39 -0
  91. package/lib/dist/lib/config/loader.d.ts.map +1 -0
  92. package/lib/dist/lib/config/loader.js +263 -0
  93. package/lib/dist/lib/config/loader.js.map +1 -0
  94. package/lib/dist/lib/config/statePaths.d.ts +61 -0
  95. package/lib/dist/lib/config/statePaths.d.ts.map +1 -0
  96. package/lib/dist/lib/config/statePaths.js +188 -0
  97. package/lib/dist/lib/config/statePaths.js.map +1 -0
  98. package/lib/dist/lib/config/types.d.ts +245 -0
  99. package/lib/dist/lib/config/types.d.ts.map +1 -0
  100. package/lib/dist/lib/config/types.js +6 -0
  101. package/lib/dist/lib/config/types.js.map +1 -0
  102. package/lib/dist/lib/config.d.ts +39 -0
  103. package/lib/dist/lib/config.d.ts.map +1 -0
  104. package/lib/dist/lib/config.js +118 -0
  105. package/lib/dist/lib/config.js.map +1 -0
  106. package/lib/dist/lib/constants.d.ts +81 -0
  107. package/lib/dist/lib/constants.d.ts.map +1 -0
  108. package/lib/dist/lib/constants.js +374 -0
  109. package/lib/dist/lib/constants.js.map +1 -0
  110. package/lib/dist/lib/contextFormat.d.ts +26 -0
  111. package/lib/dist/lib/contextFormat.d.ts.map +1 -0
  112. package/lib/dist/lib/contextFormat.js +28 -0
  113. package/lib/dist/lib/contextFormat.js.map +1 -0
  114. package/lib/dist/lib/contextUtilization.d.ts +23 -0
  115. package/lib/dist/lib/contextUtilization.d.ts.map +1 -0
  116. package/lib/dist/lib/contextUtilization.js +72 -0
  117. package/lib/dist/lib/contextUtilization.js.map +1 -0
  118. package/lib/dist/lib/dashboardMetrics.d.ts +87 -0
  119. package/lib/dist/lib/dashboardMetrics.d.ts.map +1 -0
  120. package/lib/dist/lib/dashboardMetrics.js +242 -0
  121. package/lib/dist/lib/dashboardMetrics.js.map +1 -0
  122. package/lib/dist/lib/dataSourceConfig.d.ts +108 -0
  123. package/lib/dist/lib/dataSourceConfig.d.ts.map +1 -0
  124. package/lib/dist/lib/dataSourceConfig.js +166 -0
  125. package/lib/dist/lib/dataSourceConfig.js.map +1 -0
  126. package/lib/dist/lib/debug.d.ts +26 -0
  127. package/lib/dist/lib/debug.d.ts.map +1 -0
  128. package/lib/dist/lib/debug.js +132 -0
  129. package/lib/dist/lib/debug.js.map +1 -0
  130. package/lib/dist/lib/diagnostics.d.ts +28 -0
  131. package/lib/dist/lib/diagnostics.d.ts.map +1 -0
  132. package/lib/dist/lib/diagnostics.js +65 -0
  133. package/lib/dist/lib/diagnostics.js.map +1 -0
  134. package/lib/dist/lib/envCompat.d.ts +27 -0
  135. package/lib/dist/lib/envCompat.d.ts.map +1 -0
  136. package/lib/dist/lib/envCompat.js +82 -0
  137. package/lib/dist/lib/envCompat.js.map +1 -0
  138. package/lib/dist/lib/evaluationRerun.d.ts +63 -0
  139. package/lib/dist/lib/evaluationRerun.d.ts.map +1 -0
  140. package/lib/dist/lib/evaluationRerun.js +85 -0
  141. package/lib/dist/lib/evaluationRerun.js.map +1 -0
  142. package/lib/dist/lib/findPackageRoot.d.ts +7 -0
  143. package/lib/dist/lib/findPackageRoot.d.ts.map +1 -0
  144. package/lib/dist/lib/findPackageRoot.js +57 -0
  145. package/lib/dist/lib/findPackageRoot.js.map +1 -0
  146. package/lib/dist/lib/hooks.d.ts +36 -0
  147. package/lib/dist/lib/hooks.d.ts.map +1 -0
  148. package/lib/dist/lib/hooks.js +112 -0
  149. package/lib/dist/lib/hooks.js.map +1 -0
  150. package/lib/dist/lib/index.d.ts +47 -0
  151. package/lib/dist/lib/index.d.ts.map +1 -0
  152. package/lib/dist/lib/index.js +62 -0
  153. package/lib/dist/lib/index.js.map +1 -0
  154. package/lib/dist/lib/labels.d.ts +90 -0
  155. package/lib/dist/lib/labels.d.ts.map +1 -0
  156. package/lib/dist/lib/labels.js +158 -0
  157. package/lib/dist/lib/labels.js.map +1 -0
  158. package/lib/dist/lib/markdown.d.ts +16 -0
  159. package/lib/dist/lib/markdown.d.ts.map +1 -0
  160. package/lib/dist/lib/markdown.js +42 -0
  161. package/lib/dist/lib/markdown.js.map +1 -0
  162. package/lib/dist/lib/matchers/expect.d.ts +3 -0
  163. package/lib/dist/lib/matchers/expect.d.ts.map +1 -0
  164. package/lib/dist/lib/matchers/expect.js +225 -0
  165. package/lib/dist/lib/matchers/expect.js.map +1 -0
  166. package/lib/dist/lib/matchers/index.d.ts +8 -0
  167. package/lib/dist/lib/matchers/index.d.ts.map +1 -0
  168. package/lib/dist/lib/matchers/index.js +9 -0
  169. package/lib/dist/lib/matchers/index.js.map +1 -0
  170. package/lib/dist/lib/matchers/judgeAccessor.d.ts +113 -0
  171. package/lib/dist/lib/matchers/judgeAccessor.d.ts.map +1 -0
  172. package/lib/dist/lib/matchers/judgeAccessor.js +183 -0
  173. package/lib/dist/lib/matchers/judgeAccessor.js.map +1 -0
  174. package/lib/dist/lib/matchers/session.d.ts +39 -0
  175. package/lib/dist/lib/matchers/session.d.ts.map +1 -0
  176. package/lib/dist/lib/matchers/session.js +116 -0
  177. package/lib/dist/lib/matchers/session.js.map +1 -0
  178. package/lib/dist/lib/matchers/traces.d.ts +70 -0
  179. package/lib/dist/lib/matchers/traces.d.ts.map +1 -0
  180. package/lib/dist/lib/matchers/traces.js +236 -0
  181. package/lib/dist/lib/matchers/traces.js.map +1 -0
  182. package/lib/dist/lib/matchers/tracesPricing.d.ts +38 -0
  183. package/lib/dist/lib/matchers/tracesPricing.d.ts.map +1 -0
  184. package/lib/dist/lib/matchers/tracesPricing.js +64 -0
  185. package/lib/dist/lib/matchers/tracesPricing.js.map +1 -0
  186. package/lib/dist/lib/matchers/types.d.ts +75 -0
  187. package/lib/dist/lib/matchers/types.d.ts.map +1 -0
  188. package/lib/dist/lib/matchers/types.js +6 -0
  189. package/lib/dist/lib/matchers/types.js.map +1 -0
  190. package/lib/dist/lib/packagePaths.d.ts +29 -0
  191. package/lib/dist/lib/packagePaths.d.ts.map +1 -0
  192. package/lib/dist/lib/packagePaths.js +63 -0
  193. package/lib/dist/lib/packagePaths.js.map +1 -0
  194. package/lib/dist/lib/performance.d.ts +51 -0
  195. package/lib/dist/lib/performance.d.ts.map +1 -0
  196. package/lib/dist/lib/performance.js +159 -0
  197. package/lib/dist/lib/performance.js.map +1 -0
  198. package/lib/dist/lib/portConfig.d.ts +29 -0
  199. package/lib/dist/lib/portConfig.d.ts.map +1 -0
  200. package/lib/dist/lib/portConfig.js +64 -0
  201. package/lib/dist/lib/portConfig.js.map +1 -0
  202. package/lib/dist/lib/preferences.d.ts +63 -0
  203. package/lib/dist/lib/preferences.d.ts.map +1 -0
  204. package/lib/dist/lib/preferences.js +117 -0
  205. package/lib/dist/lib/preferences.js.map +1 -0
  206. package/lib/dist/lib/resolveAgentModel.d.ts +22 -0
  207. package/lib/dist/lib/resolveAgentModel.d.ts.map +1 -0
  208. package/lib/dist/lib/resolveAgentModel.js +37 -0
  209. package/lib/dist/lib/resolveAgentModel.js.map +1 -0
  210. package/lib/dist/lib/runStats.d.ts +116 -0
  211. package/lib/dist/lib/runStats.d.ts.map +1 -0
  212. package/lib/dist/lib/runStats.js +192 -0
  213. package/lib/dist/lib/runStats.js.map +1 -0
  214. package/lib/dist/lib/telemetry/constants.d.ts +60 -0
  215. package/lib/dist/lib/telemetry/constants.d.ts.map +1 -0
  216. package/lib/dist/lib/telemetry/constants.js +87 -0
  217. package/lib/dist/lib/telemetry/constants.js.map +1 -0
  218. package/lib/dist/lib/telemetry/evalSpans.d.ts +61 -0
  219. package/lib/dist/lib/telemetry/evalSpans.d.ts.map +1 -0
  220. package/lib/dist/lib/telemetry/evalSpans.js +254 -0
  221. package/lib/dist/lib/telemetry/evalSpans.js.map +1 -0
  222. package/lib/dist/lib/telemetry/index.d.ts +11 -0
  223. package/lib/dist/lib/telemetry/index.d.ts.map +1 -0
  224. package/lib/dist/lib/telemetry/index.js +15 -0
  225. package/lib/dist/lib/telemetry/index.js.map +1 -0
  226. package/lib/dist/lib/telemetry/opensearchExporter.d.ts +43 -0
  227. package/lib/dist/lib/telemetry/opensearchExporter.d.ts.map +1 -0
  228. package/lib/dist/lib/telemetry/opensearchExporter.js +217 -0
  229. package/lib/dist/lib/telemetry/opensearchExporter.js.map +1 -0
  230. package/lib/dist/lib/telemetry/provider.d.ts +55 -0
  231. package/lib/dist/lib/telemetry/provider.d.ts.map +1 -0
  232. package/lib/dist/lib/telemetry/provider.js +140 -0
  233. package/lib/dist/lib/telemetry/provider.js.map +1 -0
  234. package/lib/dist/lib/testCaseLabels.d.ts +34 -0
  235. package/lib/dist/lib/testCaseLabels.d.ts.map +1 -0
  236. package/lib/dist/lib/testCaseLabels.js +88 -0
  237. package/lib/dist/lib/testCaseLabels.js.map +1 -0
  238. package/lib/dist/lib/testCaseValidation.d.ts +140 -0
  239. package/lib/dist/lib/testCaseValidation.d.ts.map +1 -0
  240. package/lib/dist/lib/testCaseValidation.js +162 -0
  241. package/lib/dist/lib/testCaseValidation.js.map +1 -0
  242. package/lib/dist/lib/testCases/agentFixture.d.ts +80 -0
  243. package/lib/dist/lib/testCases/agentFixture.d.ts.map +1 -0
  244. package/lib/dist/lib/testCases/agentFixture.js +43 -0
  245. package/lib/dist/lib/testCases/agentFixture.js.map +1 -0
  246. package/lib/dist/lib/testCases/authoringSurface.d.ts +10 -0
  247. package/lib/dist/lib/testCases/authoringSurface.d.ts.map +1 -0
  248. package/lib/dist/lib/testCases/authoringSurface.js +54 -0
  249. package/lib/dist/lib/testCases/authoringSurface.js.map +1 -0
  250. package/lib/dist/lib/testCases/codemod.d.ts +13 -0
  251. package/lib/dist/lib/testCases/codemod.d.ts.map +1 -0
  252. package/lib/dist/lib/testCases/codemod.js +169 -0
  253. package/lib/dist/lib/testCases/codemod.js.map +1 -0
  254. package/lib/dist/lib/testCases/define.d.ts +114 -0
  255. package/lib/dist/lib/testCases/define.d.ts.map +1 -0
  256. package/lib/dist/lib/testCases/define.js +253 -0
  257. package/lib/dist/lib/testCases/define.js.map +1 -0
  258. package/lib/dist/lib/testCases/evaluators.d.ts +80 -0
  259. package/lib/dist/lib/testCases/evaluators.d.ts.map +1 -0
  260. package/lib/dist/lib/testCases/evaluators.js +105 -0
  261. package/lib/dist/lib/testCases/evaluators.js.map +1 -0
  262. package/lib/dist/lib/testCases/index.d.ts +14 -0
  263. package/lib/dist/lib/testCases/index.d.ts.map +1 -0
  264. package/lib/dist/lib/testCases/index.js +12 -0
  265. package/lib/dist/lib/testCases/index.js.map +1 -0
  266. package/lib/dist/lib/testCases/judge.d.ts +165 -0
  267. package/lib/dist/lib/testCases/judge.d.ts.map +1 -0
  268. package/lib/dist/lib/testCases/judge.js +359 -0
  269. package/lib/dist/lib/testCases/judge.js.map +1 -0
  270. package/lib/dist/lib/testCases/loader.d.ts +36 -0
  271. package/lib/dist/lib/testCases/loader.d.ts.map +1 -0
  272. package/lib/dist/lib/testCases/loader.js +179 -0
  273. package/lib/dist/lib/testCases/loader.js.map +1 -0
  274. package/lib/dist/lib/testCases/types.d.ts +242 -0
  275. package/lib/dist/lib/testCases/types.d.ts.map +1 -0
  276. package/lib/dist/lib/testCases/types.js +6 -0
  277. package/lib/dist/lib/testCases/types.js.map +1 -0
  278. package/lib/dist/lib/theme.d.ts +6 -0
  279. package/lib/dist/lib/theme.d.ts.map +1 -0
  280. package/lib/dist/lib/theme.js +36 -0
  281. package/lib/dist/lib/theme.js.map +1 -0
  282. package/lib/dist/lib/uiTelemetry.d.ts +7 -0
  283. package/lib/dist/lib/uiTelemetry.d.ts.map +1 -0
  284. package/lib/dist/lib/uiTelemetry.js +25 -0
  285. package/lib/dist/lib/uiTelemetry.js.map +1 -0
  286. package/lib/dist/lib/utils.d.ts +111 -0
  287. package/lib/dist/lib/utils.d.ts.map +1 -0
  288. package/lib/dist/lib/utils.js +254 -0
  289. package/lib/dist/lib/utils.js.map +1 -0
  290. package/lib/dist/lib/workflow/consolidate.d.ts +12 -0
  291. package/lib/dist/lib/workflow/consolidate.d.ts.map +1 -0
  292. package/lib/dist/lib/workflow/consolidate.js +33 -0
  293. package/lib/dist/lib/workflow/consolidate.js.map +1 -0
  294. package/lib/dist/lib/workflow/index.d.ts +13 -0
  295. package/lib/dist/lib/workflow/index.d.ts.map +1 -0
  296. package/lib/dist/lib/workflow/index.js +12 -0
  297. package/lib/dist/lib/workflow/index.js.map +1 -0
  298. package/lib/dist/lib/workflow/ledger.d.ts +30 -0
  299. package/lib/dist/lib/workflow/ledger.d.ts.map +1 -0
  300. package/lib/dist/lib/workflow/ledger.js +41 -0
  301. package/lib/dist/lib/workflow/ledger.js.map +1 -0
  302. package/lib/dist/lib/workflow/pool.d.ts +13 -0
  303. package/lib/dist/lib/workflow/pool.d.ts.map +1 -0
  304. package/lib/dist/lib/workflow/pool.js +44 -0
  305. package/lib/dist/lib/workflow/pool.js.map +1 -0
  306. package/lib/dist/lib/workflow/source.d.ts +22 -0
  307. package/lib/dist/lib/workflow/source.d.ts.map +1 -0
  308. package/lib/dist/lib/workflow/source.js +29 -0
  309. package/lib/dist/lib/workflow/source.js.map +1 -0
  310. package/lib/dist/lib/workflow/stepB.d.ts +71 -0
  311. package/lib/dist/lib/workflow/stepB.d.ts.map +1 -0
  312. package/lib/dist/lib/workflow/stepB.js +99 -0
  313. package/lib/dist/lib/workflow/stepB.js.map +1 -0
  314. package/lib/dist/lib/workflow/types.d.ts +86 -0
  315. package/lib/dist/lib/workflow/types.d.ts.map +1 -0
  316. package/lib/dist/lib/workflow/types.js +6 -0
  317. package/lib/dist/lib/workflow/types.js.map +1 -0
  318. package/lib/dist/lib/workflow/workflow.d.ts +119 -0
  319. package/lib/dist/lib/workflow/workflow.d.ts.map +1 -0
  320. package/lib/dist/lib/workflow/workflow.js +195 -0
  321. package/lib/dist/lib/workflow/workflow.js.map +1 -0
  322. package/lib/dist/services/agent/aguiConverter.d.ts +50 -0
  323. package/lib/dist/services/agent/aguiConverter.d.ts.map +1 -0
  324. package/lib/dist/services/agent/aguiConverter.js +449 -0
  325. package/lib/dist/services/agent/aguiConverter.js.map +1 -0
  326. package/lib/dist/services/agent/index.d.ts +10 -0
  327. package/lib/dist/services/agent/index.d.ts.map +1 -0
  328. package/lib/dist/services/agent/index.js +12 -0
  329. package/lib/dist/services/agent/index.js.map +1 -0
  330. package/lib/dist/services/agent/payloadBuilder.d.ts +33 -0
  331. package/lib/dist/services/agent/payloadBuilder.d.ts.map +1 -0
  332. package/lib/dist/services/agent/payloadBuilder.js +75 -0
  333. package/lib/dist/services/agent/payloadBuilder.js.map +1 -0
  334. package/lib/dist/services/agent/sseStream.d.ts +43 -0
  335. package/lib/dist/services/agent/sseStream.d.ts.map +1 -0
  336. package/lib/dist/services/agent/sseStream.js +223 -0
  337. package/lib/dist/services/agent/sseStream.js.map +1 -0
  338. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts +44 -0
  339. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts.map +1 -0
  340. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js +95 -0
  341. package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js.map +1 -0
  342. package/lib/dist/services/connectors/base/BaseConnector.d.ts +81 -0
  343. package/lib/dist/services/connectors/base/BaseConnector.d.ts.map +1 -0
  344. package/lib/dist/services/connectors/base/BaseConnector.js +170 -0
  345. package/lib/dist/services/connectors/base/BaseConnector.js.map +1 -0
  346. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts +126 -0
  347. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts.map +1 -0
  348. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js +417 -0
  349. package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js.map +1 -0
  350. package/lib/dist/services/connectors/index.d.ts +13 -0
  351. package/lib/dist/services/connectors/index.d.ts.map +1 -0
  352. package/lib/dist/services/connectors/index.js +32 -0
  353. package/lib/dist/services/connectors/index.js.map +1 -0
  354. package/lib/dist/services/connectors/kiro/KiroConnector.d.ts +48 -0
  355. package/lib/dist/services/connectors/kiro/KiroConnector.d.ts.map +1 -0
  356. package/lib/dist/services/connectors/kiro/KiroConnector.js +158 -0
  357. package/lib/dist/services/connectors/kiro/KiroConnector.js.map +1 -0
  358. package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts +36 -0
  359. package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts.map +1 -0
  360. package/lib/dist/services/connectors/langgraph/LangGraphConnector.js +175 -0
  361. package/lib/dist/services/connectors/langgraph/LangGraphConnector.js.map +1 -0
  362. package/lib/dist/services/connectors/mock/MockConnector.d.ts +37 -0
  363. package/lib/dist/services/connectors/mock/MockConnector.d.ts.map +1 -0
  364. package/lib/dist/services/connectors/mock/MockConnector.js +120 -0
  365. package/lib/dist/services/connectors/mock/MockConnector.js.map +1 -0
  366. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts +42 -0
  367. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts.map +1 -0
  368. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js +133 -0
  369. package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js.map +1 -0
  370. package/lib/dist/services/connectors/pi/PiConnector.d.ts +87 -0
  371. package/lib/dist/services/connectors/pi/PiConnector.d.ts.map +1 -0
  372. package/lib/dist/services/connectors/pi/PiConnector.js +274 -0
  373. package/lib/dist/services/connectors/pi/PiConnector.js.map +1 -0
  374. package/lib/dist/services/connectors/registry.d.ts +57 -0
  375. package/lib/dist/services/connectors/registry.d.ts.map +1 -0
  376. package/lib/dist/services/connectors/registry.js +106 -0
  377. package/lib/dist/services/connectors/registry.js.map +1 -0
  378. package/lib/dist/services/connectors/rest/RESTConnector.d.ts +38 -0
  379. package/lib/dist/services/connectors/rest/RESTConnector.d.ts.map +1 -0
  380. package/lib/dist/services/connectors/rest/RESTConnector.js +117 -0
  381. package/lib/dist/services/connectors/rest/RESTConnector.js.map +1 -0
  382. package/lib/dist/services/connectors/server.d.ts +13 -0
  383. package/lib/dist/services/connectors/server.d.ts.map +1 -0
  384. package/lib/dist/services/connectors/server.js +34 -0
  385. package/lib/dist/services/connectors/server.js.map +1 -0
  386. package/lib/dist/services/connectors/strands/StrandsConnector.d.ts +48 -0
  387. package/lib/dist/services/connectors/strands/StrandsConnector.d.ts.map +1 -0
  388. package/lib/dist/services/connectors/strands/StrandsConnector.js +221 -0
  389. package/lib/dist/services/connectors/strands/StrandsConnector.js.map +1 -0
  390. package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts +88 -0
  391. package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts.map +1 -0
  392. package/lib/dist/services/connectors/subprocess/SubprocessConnector.js +426 -0
  393. package/lib/dist/services/connectors/subprocess/SubprocessConnector.js.map +1 -0
  394. package/lib/dist/services/connectors/types.d.ts +213 -0
  395. package/lib/dist/services/connectors/types.d.ts.map +1 -0
  396. package/lib/dist/services/connectors/types.js +6 -0
  397. package/lib/dist/services/connectors/types.js.map +1 -0
  398. package/lib/dist/services/evaluation/bedrockJudge.d.ts +71 -0
  399. package/lib/dist/services/evaluation/bedrockJudge.d.ts.map +1 -0
  400. package/lib/dist/services/evaluation/bedrockJudge.js +169 -0
  401. package/lib/dist/services/evaluation/bedrockJudge.js.map +1 -0
  402. package/lib/dist/services/evaluation/evaluatorError.d.ts +56 -0
  403. package/lib/dist/services/evaluation/evaluatorError.d.ts.map +1 -0
  404. package/lib/dist/services/evaluation/evaluatorError.js +56 -0
  405. package/lib/dist/services/evaluation/evaluatorError.js.map +1 -0
  406. package/lib/dist/services/evaluation/index.d.ts +106 -0
  407. package/lib/dist/services/evaluation/index.d.ts.map +1 -0
  408. package/lib/dist/services/evaluation/index.js +684 -0
  409. package/lib/dist/services/evaluation/index.js.map +1 -0
  410. package/lib/dist/services/evaluation/mockTrajectory.d.ts +3 -0
  411. package/lib/dist/services/evaluation/mockTrajectory.d.ts.map +1 -0
  412. package/lib/dist/services/evaluation/mockTrajectory.js +72 -0
  413. package/lib/dist/services/evaluation/mockTrajectory.js.map +1 -0
  414. package/lib/dist/services/opensearch/client.d.ts +26 -0
  415. package/lib/dist/services/opensearch/client.d.ts.map +1 -0
  416. package/lib/dist/services/opensearch/client.js +131 -0
  417. package/lib/dist/services/opensearch/client.js.map +1 -0
  418. package/lib/dist/services/opensearch/index.d.ts +16 -0
  419. package/lib/dist/services/opensearch/index.d.ts.map +1 -0
  420. package/lib/dist/services/opensearch/index.js +25 -0
  421. package/lib/dist/services/opensearch/index.js.map +1 -0
  422. package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts +123 -0
  423. package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts.map +1 -0
  424. package/lib/dist/services/storage/asyncBenchmarkStorage.js +440 -0
  425. package/lib/dist/services/storage/asyncBenchmarkStorage.js.map +1 -0
  426. package/lib/dist/services/storage/asyncRunStorage.d.ts +135 -0
  427. package/lib/dist/services/storage/asyncRunStorage.d.ts.map +1 -0
  428. package/lib/dist/services/storage/asyncRunStorage.js +524 -0
  429. package/lib/dist/services/storage/asyncRunStorage.js.map +1 -0
  430. package/lib/dist/services/storage/asyncTestCaseStorage.d.ts +170 -0
  431. package/lib/dist/services/storage/asyncTestCaseStorage.d.ts.map +1 -0
  432. package/lib/dist/services/storage/asyncTestCaseStorage.js +301 -0
  433. package/lib/dist/services/storage/asyncTestCaseStorage.js.map +1 -0
  434. package/lib/dist/services/storage/index.d.ts +17 -0
  435. package/lib/dist/services/storage/index.d.ts.map +1 -0
  436. package/lib/dist/services/storage/index.js +20 -0
  437. package/lib/dist/services/storage/index.js.map +1 -0
  438. package/lib/dist/services/storage/migration.d.ts +54 -0
  439. package/lib/dist/services/storage/migration.d.ts.map +1 -0
  440. package/lib/dist/services/storage/migration.js +296 -0
  441. package/lib/dist/services/storage/migration.js.map +1 -0
  442. package/lib/dist/services/storage/opensearchClient.d.ts +947 -0
  443. package/lib/dist/services/storage/opensearchClient.d.ts.map +1 -0
  444. package/lib/dist/services/storage/opensearchClient.js +442 -0
  445. package/lib/dist/services/storage/opensearchClient.js.map +1 -0
  446. package/lib/dist/services/traces/browserRecovery.d.ts +37 -0
  447. package/lib/dist/services/traces/browserRecovery.d.ts.map +1 -0
  448. package/lib/dist/services/traces/browserRecovery.js +108 -0
  449. package/lib/dist/services/traces/browserRecovery.js.map +1 -0
  450. package/lib/dist/services/traces/categoryStyles.d.ts +21 -0
  451. package/lib/dist/services/traces/categoryStyles.d.ts.map +1 -0
  452. package/lib/dist/services/traces/categoryStyles.js +56 -0
  453. package/lib/dist/services/traces/categoryStyles.js.map +1 -0
  454. package/lib/dist/services/traces/executionOrderTransform.d.ts +35 -0
  455. package/lib/dist/services/traces/executionOrderTransform.d.ts.map +1 -0
  456. package/lib/dist/services/traces/executionOrderTransform.js +313 -0
  457. package/lib/dist/services/traces/executionOrderTransform.js.map +1 -0
  458. package/lib/dist/services/traces/fetchSpansForRun.d.ts +86 -0
  459. package/lib/dist/services/traces/fetchSpansForRun.d.ts.map +1 -0
  460. package/lib/dist/services/traces/fetchSpansForRun.js +69 -0
  461. package/lib/dist/services/traces/fetchSpansForRun.js.map +1 -0
  462. package/lib/dist/services/traces/flowTransform.d.ts +24 -0
  463. package/lib/dist/services/traces/flowTransform.d.ts.map +1 -0
  464. package/lib/dist/services/traces/flowTransform.js +228 -0
  465. package/lib/dist/services/traces/flowTransform.js.map +1 -0
  466. package/lib/dist/services/traces/index.d.ts +121 -0
  467. package/lib/dist/services/traces/index.d.ts.map +1 -0
  468. package/lib/dist/services/traces/index.js +255 -0
  469. package/lib/dist/services/traces/index.js.map +1 -0
  470. package/lib/dist/services/traces/intentTransform.d.ts +20 -0
  471. package/lib/dist/services/traces/intentTransform.d.ts.map +1 -0
  472. package/lib/dist/services/traces/intentTransform.js +131 -0
  473. package/lib/dist/services/traces/intentTransform.js.map +1 -0
  474. package/lib/dist/services/traces/judgeAgentsHints.d.ts +63 -0
  475. package/lib/dist/services/traces/judgeAgentsHints.d.ts.map +1 -0
  476. package/lib/dist/services/traces/judgeAgentsHints.js +89 -0
  477. package/lib/dist/services/traces/judgeAgentsHints.js.map +1 -0
  478. package/lib/dist/services/traces/messageExtraction.d.ts +15 -0
  479. package/lib/dist/services/traces/messageExtraction.d.ts.map +1 -0
  480. package/lib/dist/services/traces/messageExtraction.js +313 -0
  481. package/lib/dist/services/traces/messageExtraction.js.map +1 -0
  482. package/lib/dist/services/traces/spanCategorization.d.ts +63 -0
  483. package/lib/dist/services/traces/spanCategorization.d.ts.map +1 -0
  484. package/lib/dist/services/traces/spanCategorization.js +276 -0
  485. package/lib/dist/services/traces/spanCategorization.js.map +1 -0
  486. package/lib/dist/services/traces/spanPreprocessing.d.ts +37 -0
  487. package/lib/dist/services/traces/spanPreprocessing.d.ts.map +1 -0
  488. package/lib/dist/services/traces/spanPreprocessing.js +102 -0
  489. package/lib/dist/services/traces/spanPreprocessing.js.map +1 -0
  490. package/lib/dist/services/traces/spansToTrajectory.d.ts +36 -0
  491. package/lib/dist/services/traces/spansToTrajectory.d.ts.map +1 -0
  492. package/lib/dist/services/traces/spansToTrajectory.js +425 -0
  493. package/lib/dist/services/traces/spansToTrajectory.js.map +1 -0
  494. package/lib/dist/services/traces/toolSimilarity.d.ts +35 -0
  495. package/lib/dist/services/traces/toolSimilarity.d.ts.map +1 -0
  496. package/lib/dist/services/traces/toolSimilarity.js +203 -0
  497. package/lib/dist/services/traces/toolSimilarity.js.map +1 -0
  498. package/lib/dist/services/traces/traceComparison.d.ts +31 -0
  499. package/lib/dist/services/traces/traceComparison.d.ts.map +1 -0
  500. package/lib/dist/services/traces/traceComparison.js +318 -0
  501. package/lib/dist/services/traces/traceComparison.js.map +1 -0
  502. package/lib/dist/services/traces/traceGrouping.d.ts +19 -0
  503. package/lib/dist/services/traces/traceGrouping.d.ts.map +1 -0
  504. package/lib/dist/services/traces/traceGrouping.js +107 -0
  505. package/lib/dist/services/traces/traceGrouping.js.map +1 -0
  506. package/lib/dist/services/traces/tracePoller.d.ts +108 -0
  507. package/lib/dist/services/traces/tracePoller.d.ts.map +1 -0
  508. package/lib/dist/services/traces/tracePoller.js +475 -0
  509. package/lib/dist/services/traces/tracePoller.js.map +1 -0
  510. package/lib/dist/services/traces/traceStats.d.ts +45 -0
  511. package/lib/dist/services/traces/traceStats.d.ts.map +1 -0
  512. package/lib/dist/services/traces/traceStats.js +114 -0
  513. package/lib/dist/services/traces/traceStats.js.map +1 -0
  514. package/lib/dist/services/traces/traceSummary.d.ts +47 -0
  515. package/lib/dist/services/traces/traceSummary.d.ts.map +1 -0
  516. package/lib/dist/services/traces/traceSummary.js +68 -0
  517. package/lib/dist/services/traces/traceSummary.js.map +1 -0
  518. package/lib/dist/services/traces/utils.d.ts +33 -0
  519. package/lib/dist/services/traces/utils.d.ts.map +1 -0
  520. package/lib/dist/services/traces/utils.js +114 -0
  521. package/lib/dist/services/traces/utils.js.map +1 -0
  522. package/lib/dist/types/agui.d.ts +13 -0
  523. package/lib/dist/types/agui.d.ts.map +1 -0
  524. package/lib/dist/types/agui.js +16 -0
  525. package/lib/dist/types/agui.js.map +1 -0
  526. package/lib/dist/types/index.d.ts +1229 -0
  527. package/lib/dist/types/index.d.ts.map +1 -0
  528. package/lib/dist/types/index.js +12 -0
  529. package/lib/dist/types/index.js.map +1 -0
  530. package/lib/dist/types/skills.d.ts +146 -0
  531. package/lib/dist/types/skills.d.ts.map +1 -0
  532. package/lib/dist/types/skills.js +6 -0
  533. package/lib/dist/types/skills.js.map +1 -0
  534. package/observio-sample-agent/pi-package/README.md +112 -0
  535. package/observio-sample-agent/pi-package/extensions/agent-health.ts +373 -0
  536. package/observio-sample-agent/pi-package/package.json +17 -0
  537. package/observio-sample-agent/pi-package/prompts/agent-health.md +37 -0
  538. package/observio-sample-agent/pi-package/skills/create-pr/SKILL.md +88 -0
  539. package/observio-sample-agent/pi-package/skills/fix-bug/SKILL.md +71 -0
  540. package/observio-sample-agent/pi-package/skills/implement-feature/SKILL.md +156 -0
  541. package/observio-sample-agent/pi-package/skills/instrument-otel/SKILL.md +208 -0
  542. package/observio-sample-agent/pi-package/skills/setup-collector/SKILL.md +146 -0
  543. package/observio-sample-agent/pi-package/skills/write-test/SKILL.md +115 -0
  544. package/package.json +45 -9
  545. package/server/dist/app.js +34031 -18731
  546. package/server/dist/index.js +30737 -15338
  547. package/tsconfig.lib.json +71 -0
  548. package/dist/assets/index-BOIP5L7h.js +0 -246
  549. package/dist/assets/index-CU9YKpAL.css +0 -1
  550. package/lib/dist/config/index.js +0 -452
  551. package/lib/dist/index.js +0 -1725
@@ -0,0 +1,524 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ /**
6
+ * Async Run Storage
7
+ *
8
+ * Async wrapper around OpenSearch storage for runs (test case executions).
9
+ * Replaces the localStorage-based reportStorage.
10
+ * Maps between app's EvaluationReport/TestCaseRun and OpenSearch StorageRun.
11
+ */
12
+ import { runStorage as opensearchRuns, } from './opensearchClient.js';
13
+ import { fetchChunked } from '../../lib/chunkedFetch.js';
14
+ /**
15
+ * Coerce a stored metrics object — which may contain any subset of dynamic
16
+ * metric names (driven by the evaluator's `scoringConfig.metrics`) — into
17
+ * the app-side `EvaluationMetrics` shape.
18
+ *
19
+ * Two important guarantees:
20
+ * 1. **Preserves all numeric metric names**, not just the four legacy ones
21
+ * (accuracy / faithfulness / latency_score / trajectory_alignment_score).
22
+ * Custom and non-RCA system evaluators emit names like
23
+ * `tool_selection_accuracy`, `reasoning_coherence`, `bias_detection`, etc.
24
+ * 2. **Distinguishes "missing" from "zero"**. Previously the read-side
25
+ * whitelist defaulted every missing field to `0`, which made the runs
26
+ * list show `0%` for every run that didn't happen to have an `accuracy`
27
+ * metric — even runs the judge had passed. Missing entries are now
28
+ * simply absent (so UI consumers can render `—` instead of fabricated 0).
29
+ */
30
+ function storedMetricsToApp(raw) {
31
+ const out = {};
32
+ if (!raw || typeof raw !== 'object')
33
+ return out;
34
+ for (const [key, value] of Object.entries(raw)) {
35
+ if (typeof value === 'number' && Number.isFinite(value)) {
36
+ out[key] = value;
37
+ }
38
+ }
39
+ return out;
40
+ }
41
+ /**
42
+ * Convert OpenSearch storage format to app TestCaseRun format
43
+ */
44
+ function toTestCaseRun(stored) {
45
+ // Cast to access trace-mode fields
46
+ const storedAny = stored;
47
+ return {
48
+ id: stored.id,
49
+ name: stored.name,
50
+ description: stored.description,
51
+ timestamp: stored.createdAt,
52
+ testCaseId: stored.testCaseId,
53
+ testCaseVersion: parseInt(stored.testCaseVersionId?.split('-v')[1] || '1'),
54
+ experimentId: stored.experimentId || undefined,
55
+ experimentRunId: stored.experimentRunId || undefined,
56
+ agentName: stored.agentName || stored.agentId,
57
+ agentKey: stored.agentId,
58
+ modelName: stored.modelId,
59
+ modelId: stored.modelId,
60
+ // Judge model used for this run (PR #390 persists it). Without this
61
+ // mapping, browser-side trace-recovery judging silently fell back to the
62
+ // agent's modelId even when a distinct judge model was configured.
63
+ judgeModelId: stored.judgeModelId,
64
+ status: stored.status,
65
+ passFailStatus: stored.passFailStatus,
66
+ evaluatorId: stored.evaluatorId,
67
+ trajectory: (stored.trajectory || []),
68
+ // Preserve every metric the judge emitted, not just the four legacy keys.
69
+ // Custom evaluators (and even system evaluators other than RCA Default)
70
+ // produce dynamic metric names like `tool_selection_accuracy` or
71
+ // `reasoning_coherence`; the previous shape whitelisted only
72
+ // accuracy/faithfulness/latency_score/trajectory_alignment_score and
73
+ // — worse — collapsed missing values to `0` via `|| 0`, which made
74
+ // every run look like it had scored zero in the runs list.
75
+ //
76
+ // We spread the stored object directly and only filter out non-numeric
77
+ // entries so the resulting shape matches `EvaluationMetrics`'s
78
+ // `[key: string]: number | undefined` index signature without leaking
79
+ // surprise types into downstream consumers.
80
+ metrics: storedMetricsToApp(stored.metrics),
81
+ // Per-test-case wall-clock timing (durationMs/agentDurationMs/...) as
82
+ // persisted by the evaluation/benchmark runner (see services/evaluationRunner.ts,
83
+ // services/benchmarkRunner.ts) and already read server-side (server/routes/
84
+ // comparison.ts). NOT declared on the narrow `StorageRun` interface above —
85
+ // same pattern as judgeModelId/traceId/sessionId below — so without this
86
+ // mapping every BROWSER-side consumer of a report loaded via
87
+ // getReportsByIds() (e.g. the comparison deep-dive panel's per-case
88
+ // Score/Duration/Tools header) silently saw `report.performanceMetrics`
89
+ // as undefined even though the field is stored and non-empty.
90
+ performanceMetrics: stored.performanceMetrics,
91
+ llmJudgeReasoning: stored.llmJudgeReasoning || '',
92
+ annotations: (stored.annotations || []).map(ann => ({
93
+ id: ann.id,
94
+ reportId: stored.id,
95
+ text: ann.text,
96
+ timestamp: ann.createdAt,
97
+ tags: ann.tags,
98
+ author: ann.author,
99
+ })),
100
+ runId: stored.traceId || stored.runId,
101
+ // Preserve the OTel traceId as its OWN field (distinct from runId). The
102
+ // comparison Traces tab correlates spans by report.traceId (Strategy A);
103
+ // without this it was always undefined here — mapped into runId only — so
104
+ // agents that emit their own trace (pi) / Claude Code never showed traces.
105
+ traceId: stored.traceId,
106
+ sessionId: stored.sessionId,
107
+ rawEvents: stored.rawEvents,
108
+ logs: (stored.logs || []),
109
+ improvementStrategies: stored.improvementStrategies,
110
+ // Per-matcher verdicts captured by the SDK during the test body
111
+ matcherResults: stored.matcherResults,
112
+ // Trace-mode fields
113
+ metricsStatus: storedAny.metricsStatus,
114
+ traceFetchAttempts: storedAny.traceFetchAttempts,
115
+ lastTraceFetchAt: storedAny.lastTraceFetchAt,
116
+ traceError: storedAny.traceError,
117
+ spans: storedAny.spans,
118
+ connectorProtocol: storedAny.connectorProtocol,
119
+ };
120
+ }
121
+ /**
122
+ * Convert app TestCaseRun format to OpenSearch storage format
123
+ */
124
+ function toStorageFormat(report) {
125
+ const base = {
126
+ name: report.name,
127
+ description: report.description,
128
+ experimentId: '', // Storage field for benchmarkId (name preserved for data compatibility)
129
+ experimentRunId: '', // Storage field for benchmarkRunId (name preserved for data compatibility)
130
+ testCaseId: report.testCaseId,
131
+ testCaseVersionId: `${report.testCaseId}-v${report.testCaseVersion || 1}`,
132
+ agentId: report.agentKey || report.agentName,
133
+ modelId: report.modelId || report.modelName,
134
+ iteration: 1, // Default to 1, can be overridden
135
+ status: report.status,
136
+ passFailStatus: report.passFailStatus,
137
+ traceId: report.runId,
138
+ tags: [],
139
+ actualOutcomes: [],
140
+ llmJudgeReasoning: report.llmJudgeReasoning,
141
+ // Pass the full dynamic metrics object through. Whitelisting fixed names
142
+ // here used to silently drop any metric the evaluator emitted that wasn't
143
+ // one of the four legacy keys (accuracy/faithfulness/latency_score/
144
+ // trajectory_alignment_score), making per-evaluator scores invisible in
145
+ // listing pages. The OpenSearch index uses dynamic mapping under
146
+ // `metrics`, so arbitrary numeric fields are accepted by the cluster.
147
+ metrics: report.metrics,
148
+ trajectory: report.trajectory,
149
+ rawEvents: report.rawEvents,
150
+ logs: report.logs || report.openSearchLogs,
151
+ improvementStrategies: report.improvementStrategies,
152
+ };
153
+ // Add trace-mode fields if present
154
+ if (report.metricsStatus !== undefined)
155
+ base.metricsStatus = report.metricsStatus;
156
+ if (report.sessionId !== undefined)
157
+ base.sessionId = report.sessionId;
158
+ // Judge inputs: the read mapper (toTestCaseRun) and the server-side save
159
+ // path (server/services/storage/index.ts) both carry evaluatorId +
160
+ // judgeModelId, but this client-side write mapper silently dropped them —
161
+ // so any report persisted through asyncRunStorage.saveReport (e.g. the
162
+ // localStorage→OpenSearch migration) lost which evaluator/judge produced it
163
+ // and could never round-trip them back to the runs list. Both fields are
164
+ // part of the StorageRun type (see services/storage/opensearchClient.ts),
165
+ // so this is a plain typed assignment now — no `as any` needed.
166
+ if (report.evaluatorId !== undefined)
167
+ base.evaluatorId = report.evaluatorId;
168
+ if (report.judgeModelId !== undefined)
169
+ base.judgeModelId = report.judgeModelId;
170
+ if (report.traceFetchAttempts !== undefined)
171
+ base.traceFetchAttempts = report.traceFetchAttempts;
172
+ if (report.lastTraceFetchAt !== undefined)
173
+ base.lastTraceFetchAt = report.lastTraceFetchAt;
174
+ if (report.traceError !== undefined)
175
+ base.traceError = report.traceError;
176
+ if (report.spans !== undefined)
177
+ base.spans = report.spans;
178
+ if (report.connectorProtocol !== undefined)
179
+ base.connectorProtocol = report.connectorProtocol;
180
+ // SDK matcher verdicts: persist alongside the report
181
+ if (report.matcherResults !== undefined)
182
+ base.matcherResults = report.matcherResults;
183
+ return base;
184
+ }
185
+ // Batch-fetch id lists (e.g. GET /runs?ids=<comma-joined>) get chunked into
186
+ // batches of this size so the request URL/header stays well under practical
187
+ // size limits regardless of how many ids are requested — see #431 ("Request
188
+ // Header Fields Too Large") on the comparison page, 4 runs x 400 reports.
189
+ // Shared by getReportsByIds() and getReportSummariesByIds() so the policy
190
+ // stays in one place. (The chunking primitive itself now lives in
191
+ // lib/chunkedFetch.ts, shared with asyncTestCaseStorage's id-scoped lookup.)
192
+ const REPORT_ID_CHUNK_SIZE = 100;
193
+ class AsyncRunStorage {
194
+ // ==================== Core CRUD Operations ====================
195
+ /**
196
+ * Save a report/run
197
+ */
198
+ async saveReport(report, options) {
199
+ const storageData = toStorageFormat(report);
200
+ // Apply experiment context if provided
201
+ if (options?.experimentId) {
202
+ storageData.experimentId = options.experimentId;
203
+ }
204
+ if (options?.experimentRunId) {
205
+ storageData.experimentRunId = options.experimentRunId;
206
+ }
207
+ if (options?.iteration) {
208
+ storageData.iteration = options.iteration;
209
+ }
210
+ const created = await opensearchRuns.create(storageData);
211
+ return toTestCaseRun(created);
212
+ }
213
+ /**
214
+ * Get run counts grouped by test case ID (single bulk query)
215
+ */
216
+ async getRunCountsByTestCase() {
217
+ return opensearchRuns.getCountsByTestCase();
218
+ }
219
+ /**
220
+ * Get all reports for a specific test case
221
+ */
222
+ async getReportsByTestCase(testCaseId, options = {}) {
223
+ const { limit = 100, offset = 0 } = options;
224
+ const result = await opensearchRuns.getByTestCase(testCaseId, limit, offset);
225
+ return { reports: result.runs.map(toTestCaseRun), total: result.total };
226
+ }
227
+ /**
228
+ * Get all reports across all test cases
229
+ */
230
+ async getAllReports(options = {}) {
231
+ const { limit = 100, offset = 0, fields } = options;
232
+ // Build query options with optional field projection
233
+ const queryOptions = { size: limit, from: offset };
234
+ if (fields && fields.length > 0) {
235
+ queryOptions._source = fields;
236
+ }
237
+ const result = await opensearchRuns.getAll(queryOptions);
238
+ return result.runs.map(toTestCaseRun);
239
+ }
240
+ /**
241
+ * Get a single report by ID
242
+ */
243
+ async getReportById(reportId) {
244
+ const stored = await opensearchRuns.getById(reportId);
245
+ return stored ? toTestCaseRun(stored) : null;
246
+ }
247
+ /**
248
+ * Batch-fetch reports by id in a SINGLE request (vs N getReportById calls).
249
+ * Returned map is keyed by the requested reportId (the storage doc id).
250
+ */
251
+ async getReportsByIds(reportIds) {
252
+ if (reportIds.length === 0)
253
+ return {};
254
+ // Chunk into batches so the request stays well under practical
255
+ // URL/header-size limits. A multi-run comparison over a large benchmark
256
+ // can ask for thousands of ids in one call — with 4 runs x 400 reports
257
+ // the single unchunked GET /api/storage/runs?ids=<all> URL blew past the
258
+ // server's header/URL size limit and failed with HTTP 431 (Request
259
+ // Header Fields Too Large), which the comparison page's loader treated
260
+ // as "no reports" and rendered every cell as "Not run".
261
+ //
262
+ // Chunked into at most ceil(N / REPORT_ID_CHUNK_SIZE) requests, fanned
263
+ // out with a capped concurrency (same pattern as getReportSummariesByIds
264
+ // below, and computeBatchMetrics's Promise.all-over-chunks in
265
+ // server/services/metricsService.ts) — never one unbounded request, and
266
+ // never an unbounded burst of parallel ones either.
267
+ //
268
+ // Deliberately no per-chunk try/catch here: a genuine failure (network
269
+ // error, 431, 5xx) must propagate to the caller so it can surface a real
270
+ // error instead of quietly returning a partial/empty map that renders
271
+ // every cell as "Not run".
272
+ const stored = await fetchChunked(reportIds, REPORT_ID_CHUNK_SIZE, chunk => opensearchRuns.getByIds(chunk));
273
+ const out = {};
274
+ for (const s of stored) {
275
+ out[s.id] = toTestCaseRun(s);
276
+ }
277
+ return out;
278
+ }
279
+ /**
280
+ * Lightweight batch fetch: status/verdict fields only (KBs for ~100
281
+ * reports vs MBs for the full documents). Enough for status badges
282
+ * (getResultStatus), pass/fail tallies, annotation counts, and
283
+ * trace-polling recovery (runId/metricsStatus/judgeModelId/modelId).
284
+ * Full reports stay on-demand via getReportById for the selected row.
285
+ */
286
+ async getReportSummariesByIds(reportIds) {
287
+ if (reportIds.length === 0)
288
+ return {};
289
+ // Stored-doc field names (the projection runs server-side on the stored
290
+ // shape): `traceId` maps to app-level `runId` in toTestCaseRun.
291
+ const fields = [
292
+ 'status', 'passFailStatus', 'metricsStatus', 'traceId', 'sessionId',
293
+ 'judgeModelId', 'modelId', 'agentId', 'testCaseId', 'createdAt', 'annotations',
294
+ ];
295
+ // Chunk to keep the URL well under practical limits for large benchmarks.
296
+ const stored = await fetchChunked(reportIds, REPORT_ID_CHUNK_SIZE, chunk => opensearchRuns.getByIds(chunk, { fields }));
297
+ const out = {};
298
+ for (const s of stored)
299
+ out[s.id] = toTestCaseRun(s);
300
+ return out;
301
+ }
302
+ /**
303
+ * Delete a report and its annotations
304
+ */
305
+ async deleteReport(reportId) {
306
+ const result = await opensearchRuns.delete(reportId);
307
+ return result.deleted;
308
+ }
309
+ /**
310
+ * Partial update of a report
311
+ * Used for updating trace-mode runs after traces become available
312
+ */
313
+ async updateReport(reportId, updates) {
314
+ // Convert app format to storage format for the updates
315
+ const storageUpdates = {};
316
+ // Map fields from EvaluationReport to StorageRun format
317
+ if (updates.status !== undefined)
318
+ storageUpdates.status = updates.status;
319
+ // `passFailStatus` accepts an explicit `null` to clear a stale verdict
320
+ // on a run that just transitioned to `metricsStatus: 'error'` (issue
321
+ // #242). Without this, `buildEvaluatorErrorPatch`'s `passFailStatus: null`
322
+ // would still be filtered out by a strict `!== undefined` check and the
323
+ // persisted document would keep its previous 'passed'/'failed' value.
324
+ if (updates.passFailStatus !== undefined)
325
+ storageUpdates.passFailStatus = updates.passFailStatus;
326
+ if (updates.llmJudgeReasoning !== undefined)
327
+ storageUpdates.llmJudgeReasoning = updates.llmJudgeReasoning;
328
+ if (updates.trajectory !== undefined)
329
+ storageUpdates.trajectory = updates.trajectory;
330
+ if (updates.rawEvents !== undefined)
331
+ storageUpdates.rawEvents = updates.rawEvents;
332
+ if (updates.logs !== undefined)
333
+ storageUpdates.logs = updates.logs;
334
+ if (updates.runId !== undefined)
335
+ storageUpdates.traceId = updates.runId;
336
+ if (updates.sessionId !== undefined)
337
+ storageUpdates.sessionId = updates.sessionId;
338
+ if (updates.improvementStrategies !== undefined)
339
+ storageUpdates.improvementStrategies = updates.improvementStrategies;
340
+ if (updates.matcherResults !== undefined)
341
+ storageUpdates.matcherResults = updates.matcherResults;
342
+ // Map metrics
343
+ if (updates.metrics) {
344
+ storageUpdates.metrics = {
345
+ accuracy: updates.metrics.accuracy,
346
+ faithfulness: updates.metrics.faithfulness,
347
+ latency_score: updates.metrics.latency_score,
348
+ trajectory_alignment_score: updates.metrics.trajectory_alignment_score,
349
+ };
350
+ }
351
+ // Pass through trace-mode specific fields directly
352
+ if (updates.metricsStatus !== undefined)
353
+ storageUpdates.metricsStatus = updates.metricsStatus;
354
+ if (updates.traceFetchAttempts !== undefined)
355
+ storageUpdates.traceFetchAttempts = updates.traceFetchAttempts;
356
+ if (updates.lastTraceFetchAt !== undefined)
357
+ storageUpdates.lastTraceFetchAt = updates.lastTraceFetchAt;
358
+ if (updates.traceError !== undefined)
359
+ storageUpdates.traceError = updates.traceError;
360
+ if (updates.spans !== undefined)
361
+ storageUpdates.spans = updates.spans;
362
+ const updated = await opensearchRuns.partialUpdate(reportId, storageUpdates);
363
+ return toTestCaseRun(updated);
364
+ }
365
+ /**
366
+ * Get total count of reports
367
+ */
368
+ async getReportCount() {
369
+ const result = await opensearchRuns.getAll({ size: 0 });
370
+ return result.total;
371
+ }
372
+ /**
373
+ * Get report count for a specific test case
374
+ */
375
+ async getReportCountByTestCase(testCaseId) {
376
+ const result = await opensearchRuns.getByTestCase(testCaseId, 0);
377
+ return result.total;
378
+ }
379
+ // ==================== Benchmark-Specific Operations ====================
380
+ /**
381
+ * Get runs for a benchmark
382
+ */
383
+ async getByBenchmark(benchmarkId, size) {
384
+ const stored = await opensearchRuns.getByBenchmark(benchmarkId, size);
385
+ return stored.map(toTestCaseRun);
386
+ }
387
+ /**
388
+ * Get runs for a specific benchmark run config
389
+ */
390
+ async getByBenchmarkRun(benchmarkId, runId, size) {
391
+ const stored = await opensearchRuns.getByBenchmarkRun(benchmarkId, runId, size);
392
+ return stored.map(toTestCaseRun);
393
+ }
394
+ /**
395
+ * Get all iterations for a test case in a benchmark
396
+ */
397
+ async getIterations(benchmarkId, testCaseId, benchmarkRunId) {
398
+ const result = await opensearchRuns.getIterations(benchmarkId, testCaseId, benchmarkRunId);
399
+ return {
400
+ runs: result.runs.map(toTestCaseRun),
401
+ total: result.total,
402
+ maxIteration: result.maxIteration,
403
+ };
404
+ }
405
+ // Backwards compatibility aliases
406
+ /** @deprecated Use getByBenchmark instead */
407
+ async getByExperiment(experimentId, size) {
408
+ return this.getByBenchmark(experimentId, size);
409
+ }
410
+ /** @deprecated Use getByBenchmarkRun instead */
411
+ async getByExperimentRun(experimentId, runId, size) {
412
+ return this.getByBenchmarkRun(experimentId, runId, size);
413
+ }
414
+ // ==================== Annotation Operations ====================
415
+ /**
416
+ * Add an annotation to a report
417
+ */
418
+ async addAnnotation(reportId, annotation) {
419
+ const created = await opensearchRuns.addAnnotation(reportId, {
420
+ text: annotation.text,
421
+ tags: annotation.tags,
422
+ author: annotation.author,
423
+ });
424
+ return {
425
+ id: created.id,
426
+ reportId,
427
+ text: created.text,
428
+ timestamp: created.createdAt,
429
+ tags: created.tags,
430
+ author: created.author,
431
+ };
432
+ }
433
+ /**
434
+ * Update an existing annotation
435
+ */
436
+ async updateAnnotation(reportId, annotationId, updates) {
437
+ try {
438
+ await opensearchRuns.updateAnnotation(reportId, annotationId, {
439
+ text: updates.text,
440
+ tags: updates.tags,
441
+ });
442
+ return true;
443
+ }
444
+ catch {
445
+ return false;
446
+ }
447
+ }
448
+ /**
449
+ * Delete an annotation
450
+ */
451
+ async deleteAnnotation(reportId, annotationId) {
452
+ const result = await opensearchRuns.deleteAnnotation(reportId, annotationId);
453
+ return result.deleted;
454
+ }
455
+ /**
456
+ * Get all annotations for a report
457
+ */
458
+ async getAnnotationsByReport(reportId) {
459
+ const report = await opensearchRuns.getById(reportId);
460
+ if (!report || !report.annotations)
461
+ return [];
462
+ return report.annotations.map(ann => ({
463
+ id: ann.id,
464
+ reportId,
465
+ text: ann.text,
466
+ timestamp: ann.createdAt,
467
+ tags: ann.tags,
468
+ author: ann.author,
469
+ }));
470
+ }
471
+ // ==================== Search and Filter ====================
472
+ /**
473
+ * Search reports with complex filtering
474
+ */
475
+ async searchReports(query) {
476
+ const filters = {};
477
+ if (query.testCaseIds && query.testCaseIds.length > 0) {
478
+ // Note: OpenSearch search supports single testCaseId, would need to loop
479
+ filters.testCaseId = query.testCaseIds[0];
480
+ }
481
+ if (query.dateRange) {
482
+ filters.dateRange = query.dateRange;
483
+ }
484
+ if (query.status && query.status.length > 0) {
485
+ filters.status = query.status[0];
486
+ }
487
+ const result = await opensearchRuns.search(filters);
488
+ let reports = result.runs.map(toTestCaseRun);
489
+ // Apply additional client-side filters not supported by backend
490
+ if (query.agentNames && query.agentNames.length > 0) {
491
+ reports = reports.filter(r => query.agentNames.includes(r.agentName));
492
+ }
493
+ if (query.modelNames && query.modelNames.length > 0) {
494
+ reports = reports.filter(r => query.modelNames.includes(r.modelName));
495
+ }
496
+ if (query.minAccuracy !== undefined) {
497
+ reports = reports.filter(r => r.metrics.accuracy >= query.minAccuracy);
498
+ }
499
+ return reports;
500
+ }
501
+ // ==================== Utility Functions ====================
502
+ /**
503
+ * Generate a unique report ID
504
+ */
505
+ generateReportId() {
506
+ return `run-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
507
+ }
508
+ /**
509
+ * Bulk create runs (for migration)
510
+ */
511
+ async bulkCreate(runs) {
512
+ const storageData = runs.map(run => ({
513
+ ...toStorageFormat(run),
514
+ id: run.id,
515
+ createdAt: run.timestamp,
516
+ }));
517
+ return opensearchRuns.bulkCreate(storageData);
518
+ }
519
+ }
520
+ // Export singleton instance
521
+ export const asyncRunStorage = new AsyncRunStorage();
522
+ // Alias for backwards compatibility
523
+ export const asyncReportStorage = asyncRunStorage;
524
+ //# sourceMappingURL=asyncRunStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncRunStorage.js","sourceRoot":"","sources":["../../../../services/storage/asyncRunStorage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AAEH,OAAO,EACL,UAAU,IAAI,cAAc,GAG7B,MAAM,oBAAoB,CAAC;AAW5B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAkClD;;;;;;;;;;;;;;;GAeG;AACH,SAAS,kBAAkB,CACzB,GAAwC;IAExC,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IAChD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,MAAkB;IACvC,mCAAmC;IACnC,MAAM,SAAS,GAAG,MAOjB,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAG,MAAc,CAAC,IAAI;QAC1B,WAAW,EAAG,MAAc,CAAC,WAAW;QACxC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QAC1E,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,SAAS;QAC9C,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,SAAS;QACpD,SAAS,EAAG,MAAc,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO;QACtD,QAAQ,EAAE,MAAM,CAAC,OAAO;QACxB,SAAS,EAAE,MAAM,CAAC,OAAO;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,oEAAoE;QACpE,yEAAyE;QACzE,mEAAmE;QACnE,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,cAAc,EAAE,MAAM,CAAC,cAAiD;QACxE,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,UAAU,EAAE,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAqB;QACzD,0EAA0E;QAC1E,wEAAwE;QACxE,iEAAiE;QACjE,6DAA6D;QAC7D,qEAAqE;QACrE,mEAAmE;QACnE,2DAA2D;QAC3D,EAAE;QACF,uEAAuE;QACvE,+DAA+D;QAC/D,sEAAsE;QACtE,4CAA4C;QAC5C,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,OAA8C,CAAC;QAClF,sEAAsE;QACtE,kFAAkF;QAClF,4EAA4E;QAC5E,4EAA4E;QAC5E,yEAAyE;QACzE,6DAA6D;QAC7D,oEAAoE;QACpE,wEAAwE;QACxE,8DAA8D;QAC9D,kBAAkB,EAAG,MAAc,CAAC,kBAAkB;QACtD,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,EAAE;QACjD,WAAW,EAAE,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClD,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC,CAAC;QACH,KAAK,EAAE,MAAM,CAAC,OAAO,IAAK,MAAc,CAAC,KAAK;QAC9C,wEAAwE;QACxE,yEAAyE;QACzE,0EAA0E;QAC1E,2EAA2E;QAC3E,OAAO,EAAG,MAAc,CAAC,OAAO;QAChC,SAAS,EAAG,MAAc,CAAC,SAAS;QACpC,SAAS,EAAE,MAAM,CAAC,SAA8B;QAChD,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAoB;QAC5C,qBAAqB,EAAE,MAAM,CAAC,qBAA0C;QACxE,gEAAgE;QAChE,cAAc,EAAG,MAAc,CAAC,cAAmC;QACnE,oBAAoB;QACpB,aAAa,EAAE,SAAS,CAAC,aAA0E;QACnG,kBAAkB,EAAE,SAAS,CAAC,kBAAkB;QAChD,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;QAC5C,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,KAAK,EAAE,SAAS,CAAC,KAA0B;QAC3C,iBAAiB,EAAE,SAAS,CAAC,iBAAkD;KAChF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,MAAwB;IAC/C,MAAM,IAAI,GAAoF;QAC5F,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,YAAY,EAAE,EAAE,EAAE,wEAAwE;QAC1F,eAAe,EAAE,EAAE,EAAE,2EAA2E;QAChG,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,iBAAiB,EAAE,GAAG,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,eAAe,IAAI,CAAC,EAAE;QACzE,OAAO,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS;QAC5C,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS;QAC3C,SAAS,EAAE,CAAC,EAAE,kCAAkC;QAChD,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,OAAO,EAAE,MAAM,CAAC,KAAK;QACrB,IAAI,EAAE,EAAE;QACR,cAAc,EAAE,EAAE;QAClB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,yEAAyE;QACzE,0EAA0E;QAC1E,oEAAoE;QACpE,wEAAwE;QACxE,iEAAiE;QACjE,sEAAsE;QACtE,OAAO,EAAE,MAAM,CAAC,OAAgC;QAChD,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,cAAc;QAC1C,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;KACpD,CAAC;IAEF,mCAAmC;IACnC,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS;QAAE,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAClF,IAAK,MAAc,CAAC,SAAS,KAAK,SAAS;QAAG,IAAY,CAAC,SAAS,GAAI,MAAc,CAAC,SAAS,CAAC;IACjG,yEAAyE;IACzE,mEAAmE;IACnE,0EAA0E;IAC1E,uEAAuE;IACvE,4EAA4E;IAC5E,yEAAyE;IACzE,0EAA0E;IAC1E,gEAAgE;IAChE,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;QAAE,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAC5E,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;QAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC/E,IAAI,MAAM,CAAC,kBAAkB,KAAK,SAAS;QAAE,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;IACjG,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS;QAAE,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAC3F,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;QAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACzE,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC1D,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS;QAAE,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC9F,qDAAqD;IACrD,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS;QAAG,IAAY,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAE9F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,4EAA4E;AAC5E,4EAA4E;AAC5E,4EAA4E;AAC5E,0EAA0E;AAC1E,0EAA0E;AAC1E,kEAAkE;AAClE,6EAA6E;AAC7E,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAEjC,MAAM,eAAe;IACnB,iEAAiE;IAEjE;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,MAAwB,EACxB,OAAiF;QAEjF,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAE5C,uCAAuC;QACvC,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;YAC1B,WAAW,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QAClD,CAAC;QACD,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC;YAC7B,WAAW,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QACxD,CAAC;QACD,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;YACvB,WAAW,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAC5C,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzD,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,sBAAsB;QAC1B,OAAO,cAAc,CAAC,mBAAmB,EAAE,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CACxB,UAAkB,EAClB,UAA6B,EAAE;QAE/B,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,UAA6B,EAAE;QACjD,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAEpD,qDAAqD;QACrD,MAAM,YAAY,GAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACxD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC;QAChC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CAAC,SAAmB;QACvC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,+DAA+D;QAC/D,wEAAwE;QACxE,uEAAuE;QACvE,yEAAyE;QACzE,mEAAmE;QACnE,uEAAuE;QACvE,wDAAwD;QACxD,EAAE;QACF,uEAAuE;QACvE,yEAAyE;QACzE,8DAA8D;QAC9D,wEAAwE;QACxE,oDAAoD;QACpD,EAAE;QACF,uEAAuE;QACvE,yEAAyE;QACzE,sEAAsE;QACtE,2BAA2B;QAC3B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5G,MAAM,GAAG,GAAqC,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,uBAAuB,CAAC,SAAmB;QAC/C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,wEAAwE;QACxE,gEAAgE;QAChE,MAAM,MAAM,GAAG;YACb,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW;YACnE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa;SAC/E,CAAC;QACF,0EAA0E;QAC1E,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACxH,MAAM,GAAG,GAAqC,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,MAAM;YAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QACrD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAChB,QAAgB,EAChB,OAAkC;QAElC,uDAAuD;QACvD,MAAM,cAAc,GAA4B,EAAE,CAAC;QAEnD,wDAAwD;QACxD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,cAAc,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACzE,uEAAuE;QACvE,qEAAqE;QACrE,2EAA2E;QAC3E,wEAAwE;QACxE,sEAAsE;QACtE,IAAK,OAAe,CAAC,cAAc,KAAK,SAAS;YAAE,cAAc,CAAC,cAAc,GAAI,OAAe,CAAC,cAAc,CAAC;QACnH,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS;YAAE,cAAc,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QAC1G,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;YAAE,cAAc,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrF,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;YAAE,cAAc,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAClF,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,cAAc,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACnE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;YAAE,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;QACxE,IAAK,OAAe,CAAC,SAAS,KAAK,SAAS;YAAG,cAAsB,CAAC,SAAS,GAAI,OAAe,CAAC,SAAS,CAAC;QAC7G,IAAI,OAAO,CAAC,qBAAqB,KAAK,SAAS;YAAE,cAAc,CAAC,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;QACtH,IAAK,OAAe,CAAC,cAAc,KAAK,SAAS;YAAG,cAAsB,CAAC,cAAc,GAAI,OAAe,CAAC,cAAc,CAAC;QAE5H,cAAc;QACd,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,cAAc,CAAC,OAAO,GAAG;gBACvB,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;gBAClC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY;gBAC1C,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa;gBAC5C,0BAA0B,EAAE,OAAO,CAAC,OAAO,CAAC,0BAA0B;aACvE,CAAC;QACJ,CAAC;QAED,mDAAmD;QACnD,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;YAAE,cAAc,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC9F,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS;YAAE,cAAc,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QAC7G,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS;YAAE,cAAc,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACvG,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS;YAAE,cAAc,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrF,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;YAAE,cAAc,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAEtE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC7E,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,wBAAwB,CAAC,UAAkB;QAC/C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACjE,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,0EAA0E;IAE1E;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,WAAmB,EAAE,IAAa;QACrD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACtE,OAAO,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CACrB,WAAmB,EACnB,KAAa,EACb,IAAa;QAEb,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAChF,OAAO,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,WAAmB,EACnB,UAAkB,EAClB,cAAuB;QAEvB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;QAC3F,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;YACpC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,6CAA6C;IAC7C,KAAK,CAAC,eAAe,CAAC,YAAoB,EAAE,IAAa;QACvD,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,gDAAgD;IAChD,KAAK,CAAC,kBAAkB,CACtB,YAAoB,EACpB,KAAa,EACb,IAAa;QAEb,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,kEAAkE;IAElE;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,QAAgB,EAChB,UAAgE;QAEhE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,QAAQ,EAAE;YAC3D,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,QAAQ;YACR,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,QAAgB,EAChB,YAAoB,EACpB,OAA+B;QAE/B,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE;gBAC5D,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,QAAgB,EAAE,YAAoB;QAC3D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC7E,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,sBAAsB,CAAC,QAAgB;QAC3C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAE9C,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpC,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,QAAQ;YACR,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,8DAA8D;IAE9D;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,KAAkB;QACpC,MAAM,OAAO,GAAgD,EAAE,CAAC;QAEhE,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,yEAAyE;YACzE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACtC,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAE7C,gEAAgE;QAChE,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,WAAY,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,8DAA8D;IAE9D;;OAEG;IACH,gBAAgB;QACd,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,IAAwB;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnC,GAAG,eAAe,CAAC,GAAG,CAAC;YACvB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC,CAAC,CAAC;QACJ,OAAO,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC;CACF;AAED,4BAA4B;AAC5B,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAErD,oCAAoC;AACpC,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC"}