@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,225 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ /**
6
+ * Chai-based `expect` with two extensions:
7
+ *
8
+ * 1. A recording plugin that captures every assertion outcome on the
9
+ * active matcher session (so the runner can persist per-matcher
10
+ * results and the UI can show a breakdown).
11
+ *
12
+ * 2. Custom matchers tailored to agent trajectories:
13
+ * - `.haveCalledTool(name)` — tool was invoked
14
+ * - `.haveStepsOfType(type)` — at least one step of given type
15
+ * - `.haveOutputMatching(regex)` — final response matches regex
16
+ * - `.haveCompletedWithin(ms)` — durationMs is below threshold
17
+ *
18
+ * Chai's BDD style: `expect(value).to.<matcher>(...)`.
19
+ */
20
+ import * as chai from 'chai';
21
+ import { recordVerdict } from './session.js';
22
+ let pluginsInstalled = false;
23
+ /**
24
+ * Install the recording plugin once per process. Subsequent calls are
25
+ * no-ops so the plugin doesn't double-record when the SDK is loaded
26
+ * multiple times in the same Node session.
27
+ */
28
+ function ensurePluginsInstalled() {
29
+ if (pluginsInstalled)
30
+ return;
31
+ pluginsInstalled = true;
32
+ const Assertion = chai.Assertion;
33
+ const utils = chai.util;
34
+ // ─── Recording plugin ────────────────────────────────────────────────
35
+ // Wraps Assertion.prototype.assert so every chai expr produces a
36
+ // MatcherResult on the active session.
37
+ const originalAssert = Assertion.prototype.assert;
38
+ Assertion.prototype.assert = function (expr, msg, negateMsg, expected, actual, showDiff) {
39
+ const negate = utils.flag(this, 'negate');
40
+ const ok = negate ? !expr : !!expr;
41
+ // chai resolves #{this}, #{exp}, #{act} placeholders only when it builds
42
+ // its own error message. We resolve them here so the recorded
43
+ // description is human-readable in the UI for both passing and failing
44
+ // assertions.
45
+ const description = describeAssertion(this, expr, msg, negateMsg, expected, actual, utils);
46
+ try {
47
+ const result = originalAssert.call(this, expr, msg, negateMsg, expected, actual, showDiff);
48
+ if (description) {
49
+ recordVerdict({
50
+ description,
51
+ pass: true,
52
+ method: 'code-assertion',
53
+ actual: safeClone(actual ?? utils.flag(this, 'object')),
54
+ expected: safeClone(expected),
55
+ });
56
+ }
57
+ return result;
58
+ }
59
+ catch (err) {
60
+ if (description) {
61
+ recordVerdict({
62
+ description,
63
+ pass: false,
64
+ method: 'code-assertion',
65
+ actual: safeClone(actual ?? utils.flag(this, 'object')),
66
+ expected: safeClone(expected),
67
+ errorMessage: err?.message || String(err),
68
+ });
69
+ }
70
+ throw err;
71
+ }
72
+ };
73
+ // ─── Custom matchers ──────────────────────────────────────────────────
74
+ /**
75
+ * `.haveCalledTool(toolName, argsPartial?)`
76
+ * Asserts that `actual` is an array of TrajectoryStep with at least one
77
+ * `action` step whose toolName matches and whose toolArgs is a superset
78
+ * of `argsPartial` (when provided).
79
+ */
80
+ Assertion.addMethod('haveCalledTool', function (toolName, argsPartial) {
81
+ const trajectory = utils.flag(this, 'object');
82
+ if (!Array.isArray(trajectory)) {
83
+ this.assert(false, 'expected an array of TrajectoryStep', '', toolName, trajectory);
84
+ return;
85
+ }
86
+ const matches = trajectory.filter((step) => step?.type === 'action' && step?.toolName === toolName);
87
+ let hit = matches[0];
88
+ if (argsPartial && matches.length > 0) {
89
+ hit = matches.find((s) => isSupersetOf(s.toolArgs ?? s.input, argsPartial));
90
+ }
91
+ const argsLabel = argsPartial ? ` with args ${JSON.stringify(argsPartial)}` : '';
92
+ this.assert(!!hit, `expected trajectory to have called tool '${toolName}'${argsLabel}`, `expected trajectory to NOT have called tool '${toolName}'${argsLabel}`, toolName, matches.map((m) => ({ toolName: m.toolName, toolArgs: m.toolArgs ?? m.input })));
93
+ });
94
+ /**
95
+ * `.haveStepsOfType(type)` — at least one step has the given `type`
96
+ * (e.g. 'thinking', 'action', 'response', 'tool_result').
97
+ */
98
+ Assertion.addMethod('haveStepsOfType', function (type) {
99
+ const trajectory = utils.flag(this, 'object');
100
+ const arr = Array.isArray(trajectory) ? trajectory : [];
101
+ const found = arr.filter((s) => s?.type === type);
102
+ this.assert(found.length > 0, `expected trajectory to have at least one step of type '${type}'`, `expected trajectory to have NO steps of type '${type}' but found ${found.length}`, type, arr.map((s) => s?.type));
103
+ });
104
+ /**
105
+ * `.haveOutputMatching(pattern)` — `actual` is a string and matches the
106
+ * given regex (or contains the given substring).
107
+ */
108
+ Assertion.addMethod('haveOutputMatching', function (pattern) {
109
+ const text = utils.flag(this, 'object');
110
+ const str = typeof text === 'string' ? text : '';
111
+ const re = pattern instanceof RegExp ? pattern : new RegExp(escapeRegex(String(pattern)));
112
+ this.assert(re.test(str), `expected output to match ${re}`, `expected output to NOT match ${re}`, pattern, str);
113
+ });
114
+ /**
115
+ * `.haveCompletedWithin(thresholdMs)` — `actual` is an EvalResult-shaped
116
+ * object whose `durationMs` is below `thresholdMs`.
117
+ */
118
+ Assertion.addMethod('haveCompletedWithin', function (thresholdMs) {
119
+ const obj = utils.flag(this, 'object');
120
+ const duration = obj?.durationMs ?? 0;
121
+ this.assert(duration <= thresholdMs, `expected to have completed within ${thresholdMs}ms (took ${duration}ms)`, `expected to have NOT completed within ${thresholdMs}ms`, thresholdMs, duration);
122
+ });
123
+ /**
124
+ * `.toPass()` — assert a judge {@link Verdict} passed. Gives `judge()`'s
125
+ * non-throwing verdict an ergonomic gate:
126
+ * expect(await judge(result, claim)).toPass();
127
+ * Reads `verdict.pass`; surfaces `verdict.reasoning` / `errorMessage` on
128
+ * failure so the recorded matcher is actionable.
129
+ */
130
+ Assertion.addMethod('toPass', function () {
131
+ const verdict = utils.flag(this, 'object');
132
+ const passed = !!verdict?.pass;
133
+ const detail = verdict?.errorMessage || verdict?.reasoning || '';
134
+ this.assert(passed, `expected judge verdict to pass${detail ? ` — ${detail}` : ''}`, `expected judge verdict to NOT pass`, true, passed);
135
+ });
136
+ }
137
+ ensurePluginsInstalled();
138
+ /** The user-facing `expect` — chai's expect with our plugin pre-installed. */
139
+ export const expect = chai.expect;
140
+ /**
141
+ * Build a UI-friendly description for an assertion. Chai's raw msg/negateMsg
142
+ * contain `#{this}`, `#{exp}`, `#{act}` placeholders that only get resolved
143
+ * by chai when it builds an error message. We resolve them here so the
144
+ * description is readable on pass too.
145
+ */
146
+ function describeAssertion(ctx, _expr, msg, negateMsg, expected, actual, utils) {
147
+ const rawMsg = typeof msg === 'function' ? msg() : msg;
148
+ const rawNeg = typeof negateMsg === 'function' ? negateMsg() : negateMsg;
149
+ const template = rawMsg || rawNeg || '';
150
+ if (!template)
151
+ return '';
152
+ const obj = utils.flag(ctx, 'object');
153
+ const resolved = template
154
+ .replace(/#\{this\}/g, () => safeInspect(obj, utils))
155
+ .replace(/#\{act\}/g, () => safeInspect(actual, utils))
156
+ .replace(/#\{exp\}/g, () => safeInspect(expected, utils));
157
+ return shortDescription(resolved);
158
+ }
159
+ function safeInspect(v, utils) {
160
+ try {
161
+ const str = utils.objDisplay && typeof utils.objDisplay === 'function'
162
+ ? utils.objDisplay(v)
163
+ : utils.inspect
164
+ ? utils.inspect(v)
165
+ : String(v);
166
+ if (typeof str !== 'string')
167
+ return String(v);
168
+ return str.length > 60 ? `${str.slice(0, 57)}\u2026` : str;
169
+ }
170
+ catch {
171
+ return String(v);
172
+ }
173
+ }
174
+ /** Trim chai's verbose default messages to a UI-friendly description. */
175
+ function shortDescription(msg) {
176
+ // chai messages look like "expected X to contain Y". Drop the "expected X "
177
+ // prefix when we have a useful object label so the UI shows the matcher,
178
+ // not the actual data dump.
179
+ const trimmed = msg.replace(/^expected\s+/i, '');
180
+ // Cap at 120 chars to keep tables readable.
181
+ return trimmed.length > 120 ? `${trimmed.slice(0, 117)}\u2026` : trimmed;
182
+ }
183
+ /** Best-effort clone for serialization \u2014 stringify primitives and small objects. */
184
+ function safeClone(v) {
185
+ if (v === undefined || v === null)
186
+ return v;
187
+ if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')
188
+ return v;
189
+ try {
190
+ const s = JSON.stringify(v);
191
+ if (s && s.length < 2000)
192
+ return JSON.parse(s);
193
+ return s ? `${s.slice(0, 1997)}...` : '[unserializable]';
194
+ }
195
+ catch {
196
+ return '[circular]';
197
+ }
198
+ }
199
+ function isSupersetOf(actual, expected) {
200
+ if (typeof actual !== 'object' || actual === null)
201
+ return false;
202
+ for (const [k, v] of Object.entries(expected)) {
203
+ if (!(k in actual))
204
+ return false;
205
+ if (typeof v === 'object' && v !== null) {
206
+ if (!isSupersetOf(actual[k], v))
207
+ return false;
208
+ }
209
+ else if (actual[k] !== v) {
210
+ return false;
211
+ }
212
+ }
213
+ return true;
214
+ }
215
+ function escapeRegex(s) {
216
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
217
+ }
218
+ // ─── TypeScript module augmentation ─────────────────────────────────
219
+ // chai@4 uses ambient namespace declarations rather than modules, so we
220
+ // can't `declare module 'chai'` here. The custom matchers above
221
+ // (haveCalledTool, haveStepsOfType, haveOutputMatching, haveCompletedWithin)
222
+ // are registered via `Assertion.addMethod` and work at runtime; user code
223
+ // that wants type-safe access can either cast `as any` or drop a tiny
224
+ // .d.ts in their own project that augments `Chai.Assertion`.
225
+ //# sourceMappingURL=expect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expect.js","sourceRoot":"","sources":["../../../matchers/expect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAE7B;;;;GAIG;AACH,SAAS,sBAAsB;IAC7B,IAAI,gBAAgB;QAAE,OAAO;IAC7B,gBAAgB,GAAG,IAAI,CAAC;IAExB,MAAM,SAAS,GAAI,IAAY,CAAC,SAAS,CAAC;IAC1C,MAAM,KAAK,GAAI,IAAY,CAAC,IAAI,CAAC;IAEjC,wEAAwE;IACxE,iEAAiE;IACjE,uCAAuC;IACvC,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC;IAClD,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,UAE3B,IAAa,EACb,GAA4B,EAC5B,SAAkC,EAClC,QAAiB,EACjB,MAAe,EACf,QAAiB;QAEjB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACnC,yEAAyE;QACzE,8DAA8D;QAC9D,uEAAuE;QACvE,cAAc;QACd,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAE3F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC3F,IAAI,WAAW,EAAE,CAAC;gBAChB,aAAa,CAAC;oBACZ,WAAW;oBACX,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,gBAAgB;oBACxB,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBACvD,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC;iBAC9B,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,WAAW,EAAE,CAAC;gBAChB,aAAa,CAAC;oBACZ,WAAW;oBACX,IAAI,EAAE,KAAK;oBACX,MAAM,EAAE,gBAAgB;oBACxB,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBACvD,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC;oBAC7B,YAAY,EAAE,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;iBAC1C,CAAC,CAAC;YACL,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;IAEF,yEAAyE;IAEzE;;;;;OAKG;IACH,SAAS,CAAC,SAAS,CAAC,gBAAgB,EAAE,UAAqB,QAAgB,EAAE,WAAqC;QAChH,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAqB,CAAC;QAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,qCAAqC,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YACpF,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,IAAI,IAAI,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC;QACzG,IAAI,GAAG,GAA+B,OAAO,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,IAAI,CAAC,MAAM,CACT,CAAC,CAAC,GAAG,EACL,4CAA4C,QAAQ,IAAI,SAAS,EAAE,EACnE,gDAAgD,QAAQ,IAAI,SAAS,EAAE,EACvE,QAAQ,EACR,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CACrF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,iBAAiB,EAAE,UAAqB,IAAY;QACtE,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAqB,CAAC;QAClE,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CACT,KAAK,CAAC,MAAM,GAAG,CAAC,EAChB,0DAA0D,IAAI,GAAG,EACjE,iDAAiD,IAAI,eAAe,KAAK,CAAC,MAAM,EAAE,EAClF,IAAI,EACJ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAC7B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,oBAAoB,EAAE,UAAqB,OAAwB;QACrF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAY,CAAC;QACnD,MAAM,GAAG,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,EAAE,GAAG,OAAO,YAAY,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1F,IAAI,CAAC,MAAM,CACT,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EACZ,4BAA4B,EAAE,EAAE,EAChC,gCAAgC,EAAE,EAAE,EACpC,OAAO,EACP,GAAG,CACJ,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,qBAAqB,EAAE,UAAqB,WAAmB;QACjF,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAA4B,CAAC;QAClE,MAAM,QAAQ,GAAG,GAAG,EAAE,UAAU,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CACT,QAAQ,IAAI,WAAW,EACvB,qCAAqC,WAAW,YAAY,QAAQ,KAAK,EACzE,yCAAyC,WAAW,IAAI,EACxD,WAAW,EACX,QAAQ,CACT,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH;;;;;;OAMG;IACH,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAExC,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC;QAC/B,MAAM,MAAM,GAAG,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;QACjE,IAAI,CAAC,MAAM,CACT,MAAM,EACN,iCAAiC,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAC/D,oCAAoC,EACpC,IAAI,EACJ,MAAM,CACP,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sBAAsB,EAAE,CAAC;AAEzB,8EAA8E;AAC9E,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAElC;;;;;GAKG;AACH,SAAS,iBAAiB,CACxB,GAAQ,EACR,KAAc,EACd,GAA4B,EAC5B,SAAkC,EAClC,QAAiB,EACjB,MAAe,EACf,KAAU;IAEV,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACvD,MAAM,MAAM,GAAG,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,MAAM,QAAQ,GAAW,MAAM,IAAI,MAAM,IAAI,EAAE,CAAC;IAChD,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,QAAQ;SACtB,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SACpD,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SACtD,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5D,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,WAAW,CAAC,CAAU,EAAE,KAAU;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GACP,KAAK,CAAC,UAAU,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,UAAU;YACxD,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YACrB,CAAC,CAAC,KAAK,CAAC,OAAO;gBACf,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAClB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,SAAS,gBAAgB,CAAC,GAAW;IACnC,4EAA4E;IAC5E,yEAAyE;IACzE,4BAA4B;IAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACjD,4CAA4C;IAC5C,OAAO,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC3E,CAAC;AAED,yFAAyF;AACzF,SAAS,SAAS,CAAC,CAAU;IAC3B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACvF,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAAW,EAAE,QAAiC;IAClE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAChE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QACjC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,YAAY,CAAE,MAAc,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;gBAAE,OAAO,KAAK,CAAC;QACpF,CAAC;aAAM,IAAK,MAAc,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,uEAAuE;AACvE,wEAAwE;AACxE,gEAAgE;AAChE,6EAA6E;AAC7E,0EAA0E;AAC1E,sEAAsE;AACtE,6DAA6D"}
@@ -0,0 +1,8 @@
1
+ export { expect } from './expect.js';
2
+ export type { TracesAccessor } from './traces.js';
3
+ export { buildTracesAccessor, emptyTracesAccessor, unavailableTracesAccessor } from './traces.js';
4
+ export type { MatcherResult, MatcherMethod } from './types.js';
5
+ export { getJudgeMatcherResults, getJudgeReasoningText, recordJudgeMatcherResult, buildJudgeMatcherEntry, formatExpectedOutcomesAsClaim, } from './judgeAccessor.js';
6
+ export type { JudgeAccessReport, JudgeResultLike } from './judgeAccessor.js';
7
+ export { startSession, endSession, isSessionActive, recordVerdict, recordWithTiming, runInSession, } from './session.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../matchers/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAClG,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EACL,YAAY,EACZ,UAAU,EACV,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAC"}
@@ -0,0 +1,9 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ export { expect } from './expect.js';
6
+ export { buildTracesAccessor, emptyTracesAccessor, unavailableTracesAccessor } from './traces.js';
7
+ export { getJudgeMatcherResults, getJudgeReasoningText, recordJudgeMatcherResult, buildJudgeMatcherEntry, formatExpectedOutcomesAsClaim, } from './judgeAccessor.js';
8
+ export { startSession, endSession, isSessionActive, recordVerdict, recordWithTiming, runInSession, } from './session.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../matchers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAElG,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,YAAY,EACZ,UAAU,EACV,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAC"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Unified judge accessor — single source of truth for "what the LLM judge
3
+ * said" on an EvaluationReport.
4
+ *
5
+ * Background: historically the judge verdict + reasoning lived in two
6
+ * parallel surfaces:
7
+ *
8
+ * 1. report.llmJudgeReasoning (string) — written by the legacy
9
+ * auto-judge path (services/evaluation/index.ts and the various
10
+ * runners that call callBedrockJudge against expectedOutcomes).
11
+ * One per report, last writer wins.
12
+ *
13
+ * 2. report.matcherResults[*] with method: 'llm-judge' — written by
14
+ * the SDK `judge(result, claim)` matcher. Many per report.
15
+ *
16
+ * Both ultimately come from the same Bedrock Judge endpoint. Storing
17
+ * them in two places caused real bugs (notably issue #230, where the
18
+ * trace-mode placeholder leaked into the legacy field and bled through
19
+ * to the UI for deterministic SDK runs).
20
+ *
21
+ * The fix: `matcherResults[]` is the canonical surface. The legacy
22
+ * `llmJudgeReasoning` field is kept populated as a derived
23
+ * convenience for backward-compat readers, but new code MUST use
24
+ * {@link getJudgeMatcherResults} on the read side and
25
+ * {@link recordJudgeMatcherResult} on the write side.
26
+ */
27
+ import type { MatcherResult } from './types.js';
28
+ /** A minimal duck-typed report shape — accepts any object with the two fields. */
29
+ export interface JudgeAccessReport {
30
+ matcherResults?: MatcherResult[];
31
+ llmJudgeReasoning?: string;
32
+ }
33
+ /**
34
+ * Returns every llm-judge MatcherResult on the report, including a
35
+ * synthetic entry derived from the legacy `llmJudgeReasoning` field
36
+ * when the report pre-dates the unified surface.
37
+ *
38
+ * Read-only: nothing is written back to the report.
39
+ *
40
+ * Behaviour matrix:
41
+ *
42
+ * | matcherResults has [llm-judge] | llmJudgeReasoning | Returns |
43
+ * |--------------------------------|------------------------|----------------------------|
44
+ * | yes | anything | the existing entries |
45
+ * | no | empty / placeholder | [] |
46
+ * | no | real reasoning | [<synthetic entry>] |
47
+ *
48
+ * The placeholder string `Waiting for traces to become available...`
49
+ * is treated as "no judge ran yet" \u2014 see issue #230.
50
+ */
51
+ export declare function getJudgeMatcherResults(report: JudgeAccessReport): MatcherResult[];
52
+ /**
53
+ * Convenience: the single most recent llm-judge reasoning string, or
54
+ * empty when no judge ran. Used by surfaces that historically read
55
+ * `llmJudgeReasoning` directly (HTML report, skills grader, compare
56
+ * view) and only need a flat string.
57
+ */
58
+ export declare function getJudgeReasoningText(report: JudgeAccessReport): string;
59
+ /**
60
+ * Convert a `JudgeResult` from `callBedrockJudge` into a `MatcherResult`.
61
+ * Pure: doesn't touch any report. Used by inline-return code paths in
62
+ * services/evaluation/index.ts where building a fresh report object is
63
+ * cleaner than the mutate-then-return pattern.
64
+ */
65
+ export declare function buildJudgeMatcherEntry(judgeResult: JudgeResultLike, options?: {
66
+ claim?: string;
67
+ model?: string;
68
+ }): MatcherResult;
69
+ /**
70
+ * Format an arbitrary `expectedOutcomes` value into a single description
71
+ * fragment suitable for the matcher entry's `description` field. Accepts
72
+ * the SDK's flat `string[]` *and* the legacy `{ rootCauses, requiredFacts,
73
+ * conclusions }` object — both shapes appear on persisted test cases.
74
+ */
75
+ export declare function formatExpectedOutcomesAsClaim(outcomes?: unknown): string;
76
+ /**
77
+ * Convert a `JudgeResult` from `callBedrockJudge` into a `MatcherResult`
78
+ * and append it to `report.matcherResults`. Also keeps the legacy
79
+ * `report.llmJudgeReasoning` field populated as a derived
80
+ * backward-compat shim (it equals the reasoning of the just-pushed
81
+ * entry, so direct readers continue to work).
82
+ *
83
+ * Mutates the passed report and returns the matcher entry.
84
+ *
85
+ * The `claim` argument is what the auto-judge was evaluating against
86
+ * (the test case's expected outcomes). The matcher description ends
87
+ * up as `judge: <claim>` matching the SDK convention.
88
+ */
89
+ export declare function recordJudgeMatcherResult(report: JudgeAccessReport & {
90
+ matcherResults?: MatcherResult[];
91
+ llmJudgeReasoning?: string;
92
+ }, judgeResult: JudgeResultLike, options?: {
93
+ claim?: string;
94
+ model?: string;
95
+ }): MatcherResult;
96
+ /** Subset of `JudgeResult` we depend on \u2014 keeps this module type-import-light. */
97
+ export interface JudgeResultLike {
98
+ passFailStatus: 'passed' | 'failed';
99
+ metrics: {
100
+ accuracy?: number;
101
+ [k: string]: number | undefined;
102
+ };
103
+ llmJudgeReasoning: string;
104
+ judgeDurationMs?: number;
105
+ improvementStrategies?: Array<{
106
+ category: string;
107
+ issue: string;
108
+ recommendation: string;
109
+ priority: 'high' | 'medium' | 'low';
110
+ }>;
111
+ }
112
+ export type { JudgeResult } from '../../types/index.js';
113
+ //# sourceMappingURL=judgeAccessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judgeAccessor.d.ts","sourceRoot":"","sources":["../../../matchers/judgeAccessor.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,EAAE,CAuBjF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAevE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,eAAe,EAC5B,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,aAAa,CA0Bf;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAoBxE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,iBAAiB,GAAG;IAAE,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5F,WAAW,EAAE,eAAe,EAC5B,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,aAAa,CAcf;AAED,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACpC,OAAO,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAChE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,KAAK,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;KACrC,CAAC,CAAC;CACJ;AA+BD,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,183 @@
1
+ /*
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ /**
6
+ * Returns every llm-judge MatcherResult on the report, including a
7
+ * synthetic entry derived from the legacy `llmJudgeReasoning` field
8
+ * when the report pre-dates the unified surface.
9
+ *
10
+ * Read-only: nothing is written back to the report.
11
+ *
12
+ * Behaviour matrix:
13
+ *
14
+ * | matcherResults has [llm-judge] | llmJudgeReasoning | Returns |
15
+ * |--------------------------------|------------------------|----------------------------|
16
+ * | yes | anything | the existing entries |
17
+ * | no | empty / placeholder | [] |
18
+ * | no | real reasoning | [<synthetic entry>] |
19
+ *
20
+ * The placeholder string `Waiting for traces to become available...`
21
+ * is treated as "no judge ran yet" \u2014 see issue #230.
22
+ */
23
+ export function getJudgeMatcherResults(report) {
24
+ const fromMatcher = (report.matcherResults ?? []).filter(m => m.method === 'llm-judge');
25
+ if (fromMatcher.length > 0) {
26
+ return fromMatcher;
27
+ }
28
+ const legacy = report.llmJudgeReasoning?.trim();
29
+ if (!legacy || isPlaceholderReasoning(legacy)) {
30
+ return [];
31
+ }
32
+ // Old report: synthesize a single virtual matcher entry so UIs that
33
+ // render only matcherResults still have something to show.
34
+ return [
35
+ {
36
+ description: 'judge: expected outcomes',
37
+ pass: inferPassFromReport(report),
38
+ method: 'llm-judge',
39
+ reasoning: legacy,
40
+ },
41
+ ];
42
+ }
43
+ /**
44
+ * Convenience: the single most recent llm-judge reasoning string, or
45
+ * empty when no judge ran. Used by surfaces that historically read
46
+ * `llmJudgeReasoning` directly (HTML report, skills grader, compare
47
+ * view) and only need a flat string.
48
+ */
49
+ export function getJudgeReasoningText(report) {
50
+ const entries = getJudgeMatcherResults(report);
51
+ if (entries.length === 0)
52
+ return '';
53
+ // Most-recent-first: prefer the last entry the runner pushed. If
54
+ // multiple entries exist (SDK with several judge() calls) we join
55
+ // them with horizontal-rule markers so a flat-string consumer still
56
+ // sees every claim.
57
+ if (entries.length === 1)
58
+ return entries[0].reasoning ?? '';
59
+ return entries
60
+ .map((m, i) => {
61
+ const claim = m.description?.replace(/^judge:\s*/, '') ?? `claim ${i + 1}`;
62
+ const verdict = m.pass ? 'PASS' : 'FAIL';
63
+ return `### ${verdict} \u2014 ${claim}\n\n${m.reasoning ?? ''}`;
64
+ })
65
+ .join('\n\n---\n\n');
66
+ }
67
+ /**
68
+ * Convert a `JudgeResult` from `callBedrockJudge` into a `MatcherResult`.
69
+ * Pure: doesn't touch any report. Used by inline-return code paths in
70
+ * services/evaluation/index.ts where building a fresh report object is
71
+ * cleaner than the mutate-then-return pattern.
72
+ */
73
+ export function buildJudgeMatcherEntry(judgeResult, options) {
74
+ const claim = options?.claim?.trim() || 'expected outcomes';
75
+ const accuracy = judgeResult.metrics?.accuracy;
76
+ const score = typeof accuracy === 'number' ? accuracy / 100 : undefined;
77
+ const pass = judgeResult.passFailStatus === 'passed';
78
+ const reasoning = judgeResult.llmJudgeReasoning ?? '';
79
+ return {
80
+ description: `judge: ${claim}`,
81
+ pass,
82
+ method: 'llm-judge',
83
+ durationMs: judgeResult.judgeDurationMs,
84
+ score,
85
+ reasoning,
86
+ ...(options?.model ? { model: options.model } : {}),
87
+ ...(pass ? {} : { errorMessage: reasoning }),
88
+ // Carry the rest of the judge payload through so SDK
89
+ // `getJudgeMatcherResults()` consumers see the same data the
90
+ // legacy report-level fields used to expose. See MatcherResult.
91
+ ...(Array.isArray(judgeResult.improvementStrategies) && judgeResult.improvementStrategies.length > 0
92
+ ? { improvementStrategies: judgeResult.improvementStrategies }
93
+ : {}),
94
+ ...(judgeResult.metrics && typeof judgeResult.metrics === 'object'
95
+ ? { judgeMetrics: { ...judgeResult.metrics } }
96
+ : {}),
97
+ };
98
+ }
99
+ /**
100
+ * Format an arbitrary `expectedOutcomes` value into a single description
101
+ * fragment suitable for the matcher entry's `description` field. Accepts
102
+ * the SDK's flat `string[]` *and* the legacy `{ rootCauses, requiredFacts,
103
+ * conclusions }` object — both shapes appear on persisted test cases.
104
+ */
105
+ export function formatExpectedOutcomesAsClaim(outcomes) {
106
+ const items = [];
107
+ if (Array.isArray(outcomes)) {
108
+ for (const o of outcomes) {
109
+ if (typeof o === 'string' && o.trim())
110
+ items.push(o.trim());
111
+ }
112
+ }
113
+ else if (outcomes && typeof outcomes === 'object') {
114
+ // Legacy shape: { rootCauses?: string[]; requiredFacts?: string[]; conclusions?: string[] }
115
+ for (const key of Object.keys(outcomes)) {
116
+ const v = outcomes[key];
117
+ if (Array.isArray(v)) {
118
+ for (const s of v) {
119
+ if (typeof s === 'string' && s.trim())
120
+ items.push(s.trim());
121
+ }
122
+ }
123
+ }
124
+ }
125
+ if (items.length === 0)
126
+ return 'expected outcomes';
127
+ if (items.length === 1)
128
+ return items[0];
129
+ return `${items.length} expected outcomes`;
130
+ }
131
+ /**
132
+ * Convert a `JudgeResult` from `callBedrockJudge` into a `MatcherResult`
133
+ * and append it to `report.matcherResults`. Also keeps the legacy
134
+ * `report.llmJudgeReasoning` field populated as a derived
135
+ * backward-compat shim (it equals the reasoning of the just-pushed
136
+ * entry, so direct readers continue to work).
137
+ *
138
+ * Mutates the passed report and returns the matcher entry.
139
+ *
140
+ * The `claim` argument is what the auto-judge was evaluating against
141
+ * (the test case's expected outcomes). The matcher description ends
142
+ * up as `judge: <claim>` matching the SDK convention.
143
+ */
144
+ export function recordJudgeMatcherResult(report, judgeResult, options) {
145
+ const entry = buildJudgeMatcherEntry(judgeResult, options);
146
+ const existing = report.matcherResults ?? [];
147
+ report.matcherResults = [...existing, entry];
148
+ // Backward-compat shim: keep the legacy field populated with the most
149
+ // recent reasoning so external readers that haven't migrated still
150
+ // work. Empty string is a deliberate signal for SDK-multi-judge runs
151
+ // (the field can't represent multiple verdicts; consumers must look
152
+ // at matcherResults).
153
+ report.llmJudgeReasoning = entry.reasoning ?? '';
154
+ return entry;
155
+ }
156
+ // ─── internal helpers ───────────────────────────────────────────────────────
157
+ /**
158
+ * The trace-mode init path sets `llmJudgeReasoning` to a placeholder
159
+ * before any real verdict exists. We must not synthesize a virtual
160
+ * matcher entry from that string \u2014 it's a "judge has not run yet"
161
+ * signal, not real reasoning.
162
+ */
163
+ function isPlaceholderReasoning(s) {
164
+ return /^Waiting for traces/i.test(s);
165
+ }
166
+ /**
167
+ * Best-effort guess at the verdict for a synthesized entry on an old
168
+ * report. Prefers an explicit `passFailStatus` if present; otherwise
169
+ * falls back to the report's metrics.accuracy (>=70 ~ pass), and
170
+ * finally defaults to `false` so a missing verdict never silently
171
+ * looks green.
172
+ */
173
+ function inferPassFromReport(report) {
174
+ if (report.passFailStatus === 'passed')
175
+ return true;
176
+ if (report.passFailStatus === 'failed')
177
+ return false;
178
+ const acc = report.metrics?.accuracy;
179
+ if (typeof acc === 'number')
180
+ return acc >= 70;
181
+ return false;
182
+ }
183
+ //# sourceMappingURL=judgeAccessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judgeAccessor.js","sourceRoot":"","sources":["../../../matchers/judgeAccessor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { MatcherResult, MatcherMethod } from './types.js';
2
+ export interface MatcherSession {
3
+ results: MatcherResult[];
4
+ startedAt: number;
5
+ }
6
+ /**
7
+ * Run `fn` with a fresh, isolated matcher session and return the verdicts
8
+ * recorded during it. Concurrency-safe: each call gets its own session via
9
+ * AsyncLocalStorage, so interleaved bodies never share verdicts.
10
+ *
11
+ * Results are returned even when `fn` throws — the caller can inspect both
12
+ * the partial results and the error (cleanup hooks that record after a body
13
+ * failure therefore still surface in the breakdown).
14
+ */
15
+ export declare function runInSession<T>(fn: () => Promise<T> | T): Promise<{
16
+ results: MatcherResult[];
17
+ value?: T;
18
+ error?: unknown;
19
+ }>;
20
+ /**
21
+ * Begin a fresh global session and make it active (legacy API).
22
+ *
23
+ * Prefer {@link runInSession} for anything that may run concurrently. This
24
+ * remains for synchronous, single-threaded callers.
25
+ */
26
+ export declare function startSession(): MatcherSession;
27
+ /** Stop the current global session and return its results (legacy API). */
28
+ export declare function endSession(): MatcherResult[];
29
+ /** True when a session is active (ALS scope or legacy global). */
30
+ export declare function isSessionActive(): boolean;
31
+ /** Record a single matcher verdict on the active session. No-op when none. */
32
+ export declare function recordVerdict(result: MatcherResult): void;
33
+ /**
34
+ * Record a verdict computed from a try/catch around the matcher body.
35
+ * Convenience wrapper used by judge() and traces helpers; chai matchers go
36
+ * through the chai plugin in `./expect.ts`.
37
+ */
38
+ export declare function recordWithTiming<T>(description: string, method: MatcherMethod, fn: () => Promise<T> | T): Promise<T>;
39
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../matchers/session.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAiBD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAQnE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,cAAc,CAG7C;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,IAAI,aAAa,EAAE,CAK5C;AAED,kEAAkE;AAClE,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAIzD;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GACvB,OAAO,CAAC,CAAC,CAAC,CAqBZ"}