@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,448 @@
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
+ /**
14
+ * Coerce a stored metrics object — which may contain any subset of dynamic
15
+ * metric names (driven by the evaluator's `scoringConfig.metrics`) — into
16
+ * the app-side `EvaluationMetrics` shape.
17
+ *
18
+ * Two important guarantees:
19
+ * 1. **Preserves all numeric metric names**, not just the four legacy ones
20
+ * (accuracy / faithfulness / latency_score / trajectory_alignment_score).
21
+ * Custom and non-RCA system evaluators emit names like
22
+ * `tool_selection_accuracy`, `reasoning_coherence`, `bias_detection`, etc.
23
+ * 2. **Distinguishes "missing" from "zero"**. Previously the read-side
24
+ * whitelist defaulted every missing field to `0`, which made the runs
25
+ * list show `0%` for every run that didn't happen to have an `accuracy`
26
+ * metric — even runs the judge had passed. Missing entries are now
27
+ * simply absent (so UI consumers can render `—` instead of fabricated 0).
28
+ */
29
+ function storedMetricsToApp(raw) {
30
+ const out = {};
31
+ if (!raw || typeof raw !== 'object')
32
+ return out;
33
+ for (const [key, value] of Object.entries(raw)) {
34
+ if (typeof value === 'number' && Number.isFinite(value)) {
35
+ out[key] = value;
36
+ }
37
+ }
38
+ return out;
39
+ }
40
+ /**
41
+ * Convert OpenSearch storage format to app TestCaseRun format
42
+ */
43
+ function toTestCaseRun(stored) {
44
+ // Cast to access trace-mode fields
45
+ const storedAny = stored;
46
+ return {
47
+ id: stored.id,
48
+ name: stored.name,
49
+ description: stored.description,
50
+ timestamp: stored.createdAt,
51
+ testCaseId: stored.testCaseId,
52
+ testCaseVersion: parseInt(stored.testCaseVersionId?.split('-v')[1] || '1'),
53
+ experimentId: stored.experimentId || undefined,
54
+ experimentRunId: stored.experimentRunId || undefined,
55
+ agentName: stored.agentName || stored.agentId,
56
+ agentKey: stored.agentId,
57
+ modelName: stored.modelId,
58
+ modelId: stored.modelId,
59
+ status: stored.status,
60
+ passFailStatus: stored.passFailStatus,
61
+ evaluatorId: stored.evaluatorId,
62
+ trajectory: (stored.trajectory || []),
63
+ // Preserve every metric the judge emitted, not just the four legacy keys.
64
+ // Custom evaluators (and even system evaluators other than RCA Default)
65
+ // produce dynamic metric names like `tool_selection_accuracy` or
66
+ // `reasoning_coherence`; the previous shape whitelisted only
67
+ // accuracy/faithfulness/latency_score/trajectory_alignment_score and
68
+ // — worse — collapsed missing values to `0` via `|| 0`, which made
69
+ // every run look like it had scored zero in the runs list.
70
+ //
71
+ // We spread the stored object directly and only filter out non-numeric
72
+ // entries so the resulting shape matches `EvaluationMetrics`'s
73
+ // `[key: string]: number | undefined` index signature without leaking
74
+ // surprise types into downstream consumers.
75
+ metrics: storedMetricsToApp(stored.metrics),
76
+ llmJudgeReasoning: stored.llmJudgeReasoning || '',
77
+ annotations: (stored.annotations || []).map(ann => ({
78
+ id: ann.id,
79
+ reportId: stored.id,
80
+ text: ann.text,
81
+ timestamp: ann.createdAt,
82
+ tags: ann.tags,
83
+ author: ann.author,
84
+ })),
85
+ runId: stored.traceId || stored.runId,
86
+ // Preserve the OTel traceId as its OWN field (distinct from runId). The
87
+ // comparison Traces tab correlates spans by report.traceId (Strategy A);
88
+ // without this it was always undefined here — mapped into runId only — so
89
+ // agents that emit their own trace (pi) / Claude Code never showed traces.
90
+ traceId: stored.traceId,
91
+ sessionId: stored.sessionId,
92
+ rawEvents: stored.rawEvents,
93
+ logs: (stored.logs || []),
94
+ improvementStrategies: stored.improvementStrategies,
95
+ // Per-matcher verdicts captured by the SDK during the test body
96
+ matcherResults: stored.matcherResults,
97
+ // Trace-mode fields
98
+ metricsStatus: storedAny.metricsStatus,
99
+ traceFetchAttempts: storedAny.traceFetchAttempts,
100
+ lastTraceFetchAt: storedAny.lastTraceFetchAt,
101
+ traceError: storedAny.traceError,
102
+ spans: storedAny.spans,
103
+ connectorProtocol: storedAny.connectorProtocol,
104
+ };
105
+ }
106
+ /**
107
+ * Convert app TestCaseRun format to OpenSearch storage format
108
+ */
109
+ function toStorageFormat(report) {
110
+ const base = {
111
+ name: report.name,
112
+ description: report.description,
113
+ experimentId: '', // Storage field for benchmarkId (name preserved for data compatibility)
114
+ experimentRunId: '', // Storage field for benchmarkRunId (name preserved for data compatibility)
115
+ testCaseId: report.testCaseId,
116
+ testCaseVersionId: `${report.testCaseId}-v${report.testCaseVersion || 1}`,
117
+ agentId: report.agentKey || report.agentName,
118
+ modelId: report.modelId || report.modelName,
119
+ iteration: 1, // Default to 1, can be overridden
120
+ status: report.status,
121
+ passFailStatus: report.passFailStatus,
122
+ traceId: report.runId,
123
+ tags: [],
124
+ actualOutcomes: [],
125
+ llmJudgeReasoning: report.llmJudgeReasoning,
126
+ // Pass the full dynamic metrics object through. Whitelisting fixed names
127
+ // here used to silently drop any metric the evaluator emitted that wasn't
128
+ // one of the four legacy keys (accuracy/faithfulness/latency_score/
129
+ // trajectory_alignment_score), making per-evaluator scores invisible in
130
+ // listing pages. The OpenSearch index uses dynamic mapping under
131
+ // `metrics`, so arbitrary numeric fields are accepted by the cluster.
132
+ metrics: report.metrics,
133
+ trajectory: report.trajectory,
134
+ rawEvents: report.rawEvents,
135
+ logs: report.logs || report.openSearchLogs,
136
+ improvementStrategies: report.improvementStrategies,
137
+ };
138
+ // Add trace-mode fields if present
139
+ if (report.metricsStatus !== undefined)
140
+ base.metricsStatus = report.metricsStatus;
141
+ if (report.sessionId !== undefined)
142
+ base.sessionId = report.sessionId;
143
+ if (report.traceFetchAttempts !== undefined)
144
+ base.traceFetchAttempts = report.traceFetchAttempts;
145
+ if (report.lastTraceFetchAt !== undefined)
146
+ base.lastTraceFetchAt = report.lastTraceFetchAt;
147
+ if (report.traceError !== undefined)
148
+ base.traceError = report.traceError;
149
+ if (report.spans !== undefined)
150
+ base.spans = report.spans;
151
+ if (report.connectorProtocol !== undefined)
152
+ base.connectorProtocol = report.connectorProtocol;
153
+ // SDK matcher verdicts: persist alongside the report
154
+ if (report.matcherResults !== undefined)
155
+ base.matcherResults = report.matcherResults;
156
+ return base;
157
+ }
158
+ class AsyncRunStorage {
159
+ // ==================== Core CRUD Operations ====================
160
+ /**
161
+ * Save a report/run
162
+ */
163
+ async saveReport(report, options) {
164
+ const storageData = toStorageFormat(report);
165
+ // Apply experiment context if provided
166
+ if (options?.experimentId) {
167
+ storageData.experimentId = options.experimentId;
168
+ }
169
+ if (options?.experimentRunId) {
170
+ storageData.experimentRunId = options.experimentRunId;
171
+ }
172
+ if (options?.iteration) {
173
+ storageData.iteration = options.iteration;
174
+ }
175
+ const created = await opensearchRuns.create(storageData);
176
+ return toTestCaseRun(created);
177
+ }
178
+ /**
179
+ * Get run counts grouped by test case ID (single bulk query)
180
+ */
181
+ async getRunCountsByTestCase() {
182
+ return opensearchRuns.getCountsByTestCase();
183
+ }
184
+ /**
185
+ * Get all reports for a specific test case
186
+ */
187
+ async getReportsByTestCase(testCaseId, options = {}) {
188
+ const { limit = 100, offset = 0 } = options;
189
+ const result = await opensearchRuns.getByTestCase(testCaseId, limit, offset);
190
+ return { reports: result.runs.map(toTestCaseRun), total: result.total };
191
+ }
192
+ /**
193
+ * Get all reports across all test cases
194
+ */
195
+ async getAllReports(options = {}) {
196
+ const { limit = 100, offset = 0, fields } = options;
197
+ // Build query options with optional field projection
198
+ const queryOptions = { size: limit, from: offset };
199
+ if (fields && fields.length > 0) {
200
+ queryOptions._source = fields;
201
+ }
202
+ const result = await opensearchRuns.getAll(queryOptions);
203
+ return result.runs.map(toTestCaseRun);
204
+ }
205
+ /**
206
+ * Get a single report by ID
207
+ */
208
+ async getReportById(reportId) {
209
+ const stored = await opensearchRuns.getById(reportId);
210
+ return stored ? toTestCaseRun(stored) : null;
211
+ }
212
+ /**
213
+ * Batch-fetch reports by id in a SINGLE request (vs N getReportById calls).
214
+ * Returned map is keyed by the requested reportId (the storage doc id).
215
+ */
216
+ async getReportsByIds(reportIds) {
217
+ if (reportIds.length === 0)
218
+ return {};
219
+ const stored = await opensearchRuns.getByIds(reportIds);
220
+ const out = {};
221
+ for (const s of stored) {
222
+ out[s.id] = toTestCaseRun(s);
223
+ }
224
+ return out;
225
+ }
226
+ /**
227
+ * Delete a report and its annotations
228
+ */
229
+ async deleteReport(reportId) {
230
+ const result = await opensearchRuns.delete(reportId);
231
+ return result.deleted;
232
+ }
233
+ /**
234
+ * Partial update of a report
235
+ * Used for updating trace-mode runs after traces become available
236
+ */
237
+ async updateReport(reportId, updates) {
238
+ // Convert app format to storage format for the updates
239
+ const storageUpdates = {};
240
+ // Map fields from EvaluationReport to StorageRun format
241
+ if (updates.status !== undefined)
242
+ storageUpdates.status = updates.status;
243
+ // `passFailStatus` accepts an explicit `null` to clear a stale verdict
244
+ // on a run that just transitioned to `metricsStatus: 'error'` (issue
245
+ // #242). Without this, `buildEvaluatorErrorPatch`'s `passFailStatus: null`
246
+ // would still be filtered out by a strict `!== undefined` check and the
247
+ // persisted document would keep its previous 'passed'/'failed' value.
248
+ if (updates.passFailStatus !== undefined)
249
+ storageUpdates.passFailStatus = updates.passFailStatus;
250
+ if (updates.llmJudgeReasoning !== undefined)
251
+ storageUpdates.llmJudgeReasoning = updates.llmJudgeReasoning;
252
+ if (updates.trajectory !== undefined)
253
+ storageUpdates.trajectory = updates.trajectory;
254
+ if (updates.rawEvents !== undefined)
255
+ storageUpdates.rawEvents = updates.rawEvents;
256
+ if (updates.logs !== undefined)
257
+ storageUpdates.logs = updates.logs;
258
+ if (updates.runId !== undefined)
259
+ storageUpdates.traceId = updates.runId;
260
+ if (updates.sessionId !== undefined)
261
+ storageUpdates.sessionId = updates.sessionId;
262
+ if (updates.improvementStrategies !== undefined)
263
+ storageUpdates.improvementStrategies = updates.improvementStrategies;
264
+ if (updates.matcherResults !== undefined)
265
+ storageUpdates.matcherResults = updates.matcherResults;
266
+ // Map metrics
267
+ if (updates.metrics) {
268
+ storageUpdates.metrics = {
269
+ accuracy: updates.metrics.accuracy,
270
+ faithfulness: updates.metrics.faithfulness,
271
+ latency_score: updates.metrics.latency_score,
272
+ trajectory_alignment_score: updates.metrics.trajectory_alignment_score,
273
+ };
274
+ }
275
+ // Pass through trace-mode specific fields directly
276
+ if (updates.metricsStatus !== undefined)
277
+ storageUpdates.metricsStatus = updates.metricsStatus;
278
+ if (updates.traceFetchAttempts !== undefined)
279
+ storageUpdates.traceFetchAttempts = updates.traceFetchAttempts;
280
+ if (updates.lastTraceFetchAt !== undefined)
281
+ storageUpdates.lastTraceFetchAt = updates.lastTraceFetchAt;
282
+ if (updates.traceError !== undefined)
283
+ storageUpdates.traceError = updates.traceError;
284
+ if (updates.spans !== undefined)
285
+ storageUpdates.spans = updates.spans;
286
+ const updated = await opensearchRuns.partialUpdate(reportId, storageUpdates);
287
+ return toTestCaseRun(updated);
288
+ }
289
+ /**
290
+ * Get total count of reports
291
+ */
292
+ async getReportCount() {
293
+ const result = await opensearchRuns.getAll({ size: 0 });
294
+ return result.total;
295
+ }
296
+ /**
297
+ * Get report count for a specific test case
298
+ */
299
+ async getReportCountByTestCase(testCaseId) {
300
+ const result = await opensearchRuns.getByTestCase(testCaseId, 0);
301
+ return result.total;
302
+ }
303
+ // ==================== Benchmark-Specific Operations ====================
304
+ /**
305
+ * Get runs for a benchmark
306
+ */
307
+ async getByBenchmark(benchmarkId, size) {
308
+ const stored = await opensearchRuns.getByBenchmark(benchmarkId, size);
309
+ return stored.map(toTestCaseRun);
310
+ }
311
+ /**
312
+ * Get runs for a specific benchmark run config
313
+ */
314
+ async getByBenchmarkRun(benchmarkId, runId, size) {
315
+ const stored = await opensearchRuns.getByBenchmarkRun(benchmarkId, runId, size);
316
+ return stored.map(toTestCaseRun);
317
+ }
318
+ /**
319
+ * Get all iterations for a test case in a benchmark
320
+ */
321
+ async getIterations(benchmarkId, testCaseId, benchmarkRunId) {
322
+ const result = await opensearchRuns.getIterations(benchmarkId, testCaseId, benchmarkRunId);
323
+ return {
324
+ runs: result.runs.map(toTestCaseRun),
325
+ total: result.total,
326
+ maxIteration: result.maxIteration,
327
+ };
328
+ }
329
+ // Backwards compatibility aliases
330
+ /** @deprecated Use getByBenchmark instead */
331
+ async getByExperiment(experimentId, size) {
332
+ return this.getByBenchmark(experimentId, size);
333
+ }
334
+ /** @deprecated Use getByBenchmarkRun instead */
335
+ async getByExperimentRun(experimentId, runId, size) {
336
+ return this.getByBenchmarkRun(experimentId, runId, size);
337
+ }
338
+ // ==================== Annotation Operations ====================
339
+ /**
340
+ * Add an annotation to a report
341
+ */
342
+ async addAnnotation(reportId, annotation) {
343
+ const created = await opensearchRuns.addAnnotation(reportId, {
344
+ text: annotation.text,
345
+ tags: annotation.tags,
346
+ author: annotation.author,
347
+ });
348
+ return {
349
+ id: created.id,
350
+ reportId,
351
+ text: created.text,
352
+ timestamp: created.createdAt,
353
+ tags: created.tags,
354
+ author: created.author,
355
+ };
356
+ }
357
+ /**
358
+ * Update an existing annotation
359
+ */
360
+ async updateAnnotation(reportId, annotationId, updates) {
361
+ try {
362
+ await opensearchRuns.updateAnnotation(reportId, annotationId, {
363
+ text: updates.text,
364
+ tags: updates.tags,
365
+ });
366
+ return true;
367
+ }
368
+ catch {
369
+ return false;
370
+ }
371
+ }
372
+ /**
373
+ * Delete an annotation
374
+ */
375
+ async deleteAnnotation(reportId, annotationId) {
376
+ const result = await opensearchRuns.deleteAnnotation(reportId, annotationId);
377
+ return result.deleted;
378
+ }
379
+ /**
380
+ * Get all annotations for a report
381
+ */
382
+ async getAnnotationsByReport(reportId) {
383
+ const report = await opensearchRuns.getById(reportId);
384
+ if (!report || !report.annotations)
385
+ return [];
386
+ return report.annotations.map(ann => ({
387
+ id: ann.id,
388
+ reportId,
389
+ text: ann.text,
390
+ timestamp: ann.createdAt,
391
+ tags: ann.tags,
392
+ author: ann.author,
393
+ }));
394
+ }
395
+ // ==================== Search and Filter ====================
396
+ /**
397
+ * Search reports with complex filtering
398
+ */
399
+ async searchReports(query) {
400
+ const filters = {};
401
+ if (query.testCaseIds && query.testCaseIds.length > 0) {
402
+ // Note: OpenSearch search supports single testCaseId, would need to loop
403
+ filters.testCaseId = query.testCaseIds[0];
404
+ }
405
+ if (query.dateRange) {
406
+ filters.dateRange = query.dateRange;
407
+ }
408
+ if (query.status && query.status.length > 0) {
409
+ filters.status = query.status[0];
410
+ }
411
+ const result = await opensearchRuns.search(filters);
412
+ let reports = result.runs.map(toTestCaseRun);
413
+ // Apply additional client-side filters not supported by backend
414
+ if (query.agentNames && query.agentNames.length > 0) {
415
+ reports = reports.filter(r => query.agentNames.includes(r.agentName));
416
+ }
417
+ if (query.modelNames && query.modelNames.length > 0) {
418
+ reports = reports.filter(r => query.modelNames.includes(r.modelName));
419
+ }
420
+ if (query.minAccuracy !== undefined) {
421
+ reports = reports.filter(r => r.metrics.accuracy >= query.minAccuracy);
422
+ }
423
+ return reports;
424
+ }
425
+ // ==================== Utility Functions ====================
426
+ /**
427
+ * Generate a unique report ID
428
+ */
429
+ generateReportId() {
430
+ return `run-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
431
+ }
432
+ /**
433
+ * Bulk create runs (for migration)
434
+ */
435
+ async bulkCreate(runs) {
436
+ const storageData = runs.map(run => ({
437
+ ...toStorageFormat(run),
438
+ id: run.id,
439
+ createdAt: run.timestamp,
440
+ }));
441
+ return opensearchRuns.bulkCreate(storageData);
442
+ }
443
+ }
444
+ // Export singleton instance
445
+ export const asyncRunStorage = new AsyncRunStorage();
446
+ // Alias for backwards compatibility
447
+ export const asyncReportStorage = asyncRunStorage;
448
+ //# sourceMappingURL=asyncRunStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncRunStorage.js","sourceRoot":"","sources":["../../../../services/storage/asyncRunStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ import type { TestCase, TestCaseVersion, AgentContextItem, AgentToolDefinition } from '../../types/index.js';
2
+ export interface CreateTestCaseInput {
3
+ /** Optional ID - if provided, will be used instead of generating a new one (useful for migration) */
4
+ id?: string;
5
+ name: string;
6
+ description?: string;
7
+ labels?: string[];
8
+ /** @deprecated Use labels instead */
9
+ category?: string;
10
+ /** @deprecated Use labels instead */
11
+ subcategory?: string;
12
+ /** @deprecated Use labels instead */
13
+ difficulty?: 'Easy' | 'Medium' | 'Hard';
14
+ initialPrompt: string;
15
+ context: AgentContextItem[];
16
+ tools?: AgentToolDefinition[];
17
+ expectedPPL?: string;
18
+ expectedOutcomes?: string[];
19
+ expectedTrajectory?: {
20
+ step: number;
21
+ description: string;
22
+ requiredTools: string[];
23
+ }[];
24
+ followUpQuestions?: {
25
+ trigger: 'results_available' | 'error' | 'always';
26
+ question: string;
27
+ businessValue: string;
28
+ }[];
29
+ tags?: string[];
30
+ author?: string;
31
+ isPromoted?: boolean;
32
+ }
33
+ export interface UpdateTestCaseInput {
34
+ name?: string;
35
+ description?: string;
36
+ labels?: string[];
37
+ /** @deprecated Use labels instead */
38
+ category?: string;
39
+ /** @deprecated Use labels instead */
40
+ subcategory?: string;
41
+ /** @deprecated Use labels instead */
42
+ difficulty?: 'Easy' | 'Medium' | 'Hard';
43
+ initialPrompt?: string;
44
+ context?: AgentContextItem[];
45
+ tools?: AgentToolDefinition[];
46
+ expectedPPL?: string;
47
+ expectedOutcomes?: string[];
48
+ expectedTrajectory?: {
49
+ step: number;
50
+ description: string;
51
+ requiredTools: string[];
52
+ }[];
53
+ followUpQuestions?: {
54
+ trigger: 'results_available' | 'error' | 'always';
55
+ question: string;
56
+ businessValue: string;
57
+ }[];
58
+ tags?: string[];
59
+ isPromoted?: boolean;
60
+ }
61
+ /** Paginated response from getAll with summary/pagination options */
62
+ export interface TestCasePage {
63
+ testCases: TestCase[];
64
+ total: number;
65
+ after?: string | null;
66
+ hasMore?: boolean;
67
+ }
68
+ declare class AsyncTestCaseStorage {
69
+ /**
70
+ * Get all test cases (latest versions), sorted by updatedAt descending
71
+ * @param options.summary - true to fetch lightweight summary (no context/expectedOutcomes)
72
+ * @param options.size - page size for pagination
73
+ * @param options.after - cursor token for next page
74
+ * @param options.includeSample - whether to include sample/demo data
75
+ */
76
+ getAll(options: {
77
+ summary?: boolean;
78
+ size: number;
79
+ after?: string;
80
+ includeSample?: boolean;
81
+ }): Promise<TestCasePage>;
82
+ getAll(options?: {
83
+ summary?: boolean;
84
+ size?: number;
85
+ after?: string;
86
+ includeSample?: boolean;
87
+ }): Promise<TestCase[]>;
88
+ /**
89
+ * Get only promoted test cases (for Experiments)
90
+ */
91
+ getPromoted(): Promise<TestCase[]>;
92
+ /**
93
+ * Get test cases by specific IDs (for efficient filtered fetching)
94
+ * Used when you only need test cases for a specific benchmark
95
+ */
96
+ getByIds(ids: string[]): Promise<TestCase[]>;
97
+ /**
98
+ * Get a test case by ID (latest version)
99
+ */
100
+ getById(id: string): Promise<TestCase | null>;
101
+ /**
102
+ * Create a new test case
103
+ */
104
+ create(input: CreateTestCaseInput): Promise<TestCase>;
105
+ /**
106
+ * Update a test case (creates new version automatically in OpenSearch)
107
+ */
108
+ update(id: string, updates: UpdateTestCaseInput): Promise<TestCase | null>;
109
+ /**
110
+ * Delete a test case (all versions)
111
+ */
112
+ delete(id: string): Promise<boolean>;
113
+ /**
114
+ * Set promoted status for a test case
115
+ */
116
+ setPromoted(id: string, isPromoted: boolean): Promise<boolean>;
117
+ /**
118
+ * Get all versions of a test case
119
+ */
120
+ getVersions(testCaseId: string): Promise<TestCaseVersion[]>;
121
+ /**
122
+ * Get a specific version of a test case
123
+ */
124
+ getVersion(testCaseId: string, version: number): Promise<TestCaseVersion | null>;
125
+ /**
126
+ * Generate a unique ID
127
+ */
128
+ generateId(): string;
129
+ /**
130
+ * Get unique categories from all test cases
131
+ * @deprecated Use getLabels() instead
132
+ */
133
+ getCategories(): Promise<string[]>;
134
+ /**
135
+ * Get all unique labels from all test cases
136
+ */
137
+ getLabels(): Promise<string[]>;
138
+ /**
139
+ * Get test cases count
140
+ */
141
+ getCount(): Promise<number>;
142
+ /**
143
+ * Get promoted count
144
+ */
145
+ getPromotedCount(): Promise<number>;
146
+ /**
147
+ * Bulk create test cases (for migration)
148
+ */
149
+ bulkCreate(testCases: CreateTestCaseInput[]): Promise<{
150
+ created: number;
151
+ errors: boolean;
152
+ }>;
153
+ }
154
+ export declare const asyncTestCaseStorage: AsyncTestCaseStorage;
155
+ export {};
156
+ //# sourceMappingURL=asyncTestCaseStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncTestCaseStorage.d.ts","sourceRoot":"","sources":["../../../../services/storage/asyncTestCaseStorage.ts"],"names":[],"mappings":"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"}