@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,525 @@
1
+ <!--
2
+ * Copyright OpenSearch Contributors
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ -->
5
+
6
+ # Plan: Non-AG-UI Agent Support in Agent Health
7
+
8
+ > **Status: Implemented** via the connector system (not the separate adapter pattern originally proposed here).
9
+ > See `services/connectors/strands/` and `services/connectors/langgraph/` for the Strands and LangGraph implementations.
10
+
11
+ ## Problem Statement
12
+
13
+ Currently, Agent Health only supports agents that emit AG-UI protocol SSE events. This excludes:
14
+ - **Claude Code** - CLI tool with its own execution model
15
+ - **LangGraph non-AG-UI instances** - LangGraph without AG-UI endpoints
16
+ - **Amazon Strands Agents** - AWS agent framework
17
+
18
+ ## Key Insight
19
+
20
+ OTEL traces alone are insufficient for evaluation - they typically capture metadata (timing, spans) but not the **actual content** (full responses, tool outputs) needed for LLM judge evaluation.
21
+
22
+ Reference implementations:
23
+ - **Strands Evals**: Direct execution captures output, OTEL supplements with trajectory
24
+ - **LangSmith**: Rich tracing with full content at every step
25
+
26
+ ## Solution Approach
27
+
28
+ **Unified Agent Adapter Pattern** - One interface that works for API, CLI, and streaming agents:
29
+
30
+ ```typescript
31
+ interface AgentAdapter {
32
+ execute(prompt: string, context?: any): Promise<AgentResult>;
33
+ }
34
+
35
+ interface AgentResult {
36
+ output: string; // The actual response (required)
37
+ trajectory?: TrajectoryStep[]; // Execution steps (optional)
38
+ metadata?: Record<string, any>; // Agent-specific data
39
+ }
40
+ ```
41
+
42
+ Each agent type has an adapter that:
43
+ 1. **Executes the agent** (CLI, API, or SSE)
44
+ 2. **Captures the actual output** directly
45
+ 3. **Optionally captures trajectory** from output parsing or OTEL
46
+ 4. **Returns unified result** for evaluation
47
+
48
+ ---
49
+
50
+ ## Architecture Overview
51
+
52
+ ```
53
+ ┌──────────────────────┐
54
+ │ Agent Health │
55
+ │ (Experiment Runner)│
56
+ └──────────┬───────────┘
57
+ │ calls adapter.execute()
58
+ ┌──────────▼───────────┐
59
+ │ Agent Adapter │
60
+ │ Registry │
61
+ └──────────┬───────────┘
62
+ ┌───────────────────────┼───────────────────────┐
63
+ │ │ │
64
+ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
65
+ │ Claude Code │ │ Strands │ │ LangGraph │
66
+ │ Adapter │ │ Adapter │ │ Adapter │
67
+ │ (CLI) │ │ (API) │ │ (AG-UI) │
68
+ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘
69
+ │ │ │
70
+ │ exec CLI │ AWS SDK │ SSE stream
71
+ ▼ ▼ ▼
72
+ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
73
+ │ claude CLI │ │ Strands API │ │ LangGraph │
74
+ └─────────────┘ └─────────────┘ └─────────────┘
75
+ │ │ │
76
+ └──────────────────────┼──────────────────────┘
77
+ │
78
+ ┌─────────▼─────────┐
79
+ │ AgentResult │
80
+ │ {output, trajectory}│
81
+ └─────────┬─────────┘
82
+ │
83
+ ┌─────────▼─────────┐
84
+ │ LLM Judge │
85
+ │ (unchanged) │
86
+ └───────────────────┘
87
+ ```
88
+
89
+ ---
90
+
91
+ ## Phase 1: Agent Adapter Framework (Foundation)
92
+
93
+ ### 1.1 Core Types
94
+
95
+ **File: `types/index.ts`** - Add:
96
+ ```typescript
97
+ // Adapter types
98
+ export type AdapterType = 'ag-ui' | 'cli' | 'api' | 'custom';
99
+
100
+ export interface AgentResult {
101
+ output: string; // Required: the actual response
102
+ trajectory?: TrajectoryStep[]; // Optional: execution steps
103
+ metadata?: {
104
+ executionTime?: number;
105
+ tokenCount?: number;
106
+ traceId?: string;
107
+ [key: string]: any;
108
+ };
109
+ }
110
+
111
+ export interface AgentAdapter {
112
+ type: AdapterType;
113
+ execute(
114
+ prompt: string,
115
+ context?: { tools?: any[]; history?: any[] }
116
+ ): Promise<AgentResult>;
117
+
118
+ // Optional streaming support
119
+ executeStream?(
120
+ prompt: string,
121
+ context?: any,
122
+ onChunk?: (chunk: string) => void
123
+ ): Promise<AgentResult>;
124
+ }
125
+
126
+ // Extended AgentConfig
127
+ export interface AgentConfig {
128
+ // ... existing fields ...
129
+ adapterType: AdapterType; // Required: which adapter to use
130
+ adapterConfig?: {
131
+ command?: string; // For CLI adapters
132
+ apiEndpoint?: string; // For API adapters
133
+ timeout?: number;
134
+ [key: string]: any;
135
+ };
136
+ }
137
+ ```
138
+
139
+ ### 1.2 Adapter Registry
140
+
141
+ **New file: `services/adapters/index.ts`**
142
+ ```typescript
143
+ import { AgentAdapter, AgentConfig } from '@/types';
144
+
145
+ // Registry of available adapters
146
+ const adapters: Record<string, new (config: AgentConfig) => AgentAdapter> = {};
147
+
148
+ export function registerAdapter(
149
+ type: string,
150
+ adapterClass: new (config: AgentConfig) => AgentAdapter
151
+ ): void;
152
+
153
+ export function getAdapter(config: AgentConfig): AgentAdapter;
154
+
155
+ export function listAdapters(): string[];
156
+ ```
157
+
158
+ ### 1.3 Base Adapter Class
159
+
160
+ **New file: `services/adapters/baseAdapter.ts`**
161
+ ```typescript
162
+ export abstract class BaseAdapter implements AgentAdapter {
163
+ protected config: AgentConfig;
164
+
165
+ constructor(config: AgentConfig) {
166
+ this.config = config;
167
+ }
168
+
169
+ abstract execute(prompt: string, context?: any): Promise<AgentResult>;
170
+
171
+ // Helper to build trajectory from raw output
172
+ protected parseTrajectory(output: string): TrajectoryStep[] {
173
+ // Default implementation - can be overridden
174
+ }
175
+ }
176
+ ```
177
+
178
+ ---
179
+
180
+ ## Phase 2: Built-in Adapters
181
+
182
+ ### 2.1 AG-UI Adapter (Existing Flow)
183
+
184
+ **New file: `services/adapters/aguiAdapter.ts`**
185
+ ```typescript
186
+ /**
187
+ * Wraps existing AG-UI flow as an adapter
188
+ * Uses SSEClient + AGUIToTrajectoryConverter internally
189
+ */
190
+ export class AGUIAdapter extends BaseAdapter {
191
+ type = 'ag-ui' as const;
192
+
193
+ async execute(prompt: string, context?: any): Promise<AgentResult> {
194
+ // Use existing AG-UI streaming flow
195
+ const trajectory = await streamAgentExecution(
196
+ this.config.endpoint,
197
+ buildPayload(prompt, context),
198
+ this.config.headers
199
+ );
200
+
201
+ return {
202
+ output: extractFinalResponse(trajectory),
203
+ trajectory,
204
+ };
205
+ }
206
+
207
+ async executeStream(prompt, context, onChunk): Promise<AgentResult> {
208
+ // Real-time streaming with callbacks
209
+ }
210
+ }
211
+ ```
212
+
213
+ ### 2.2 Claude Code Adapter (CLI)
214
+
215
+ **New file: `services/adapters/claudeCodeAdapter.ts`**
216
+ ```typescript
217
+ import { spawn } from 'child_process';
218
+
219
+ export class ClaudeCodeAdapter extends BaseAdapter {
220
+ type = 'cli' as const;
221
+
222
+ async execute(prompt: string, context?: any): Promise<AgentResult> {
223
+ const { command = 'claude', timeout = 300000 } = this.config.adapterConfig || {};
224
+
225
+ // Execute: claude --print "prompt" --output-format json
226
+ const result = await this.runCLI(command, [
227
+ '--print', prompt,
228
+ '--output-format', 'stream-json', // Get structured output
229
+ ], timeout);
230
+
231
+ return {
232
+ output: result.finalResponse,
233
+ trajectory: this.parseClaudeCodeOutput(result.events),
234
+ metadata: { executionTime: result.duration },
235
+ };
236
+ }
237
+
238
+ private parseClaudeCodeOutput(events: any[]): TrajectoryStep[] {
239
+ // Parse Claude Code's JSON output format
240
+ // Maps: assistant → response, tool_use → action, tool_result → tool_result
241
+ }
242
+ }
243
+ ```
244
+
245
+ ### 2.3 Strands Adapter (AWS API)
246
+
247
+ **New file: `services/adapters/strandsAdapter.ts`**
248
+ ```typescript
249
+ import { BedrockAgentRuntimeClient, InvokeAgentCommand } from '@aws-sdk/client-bedrock-agent-runtime';
250
+
251
+ export class StrandsAdapter extends BaseAdapter {
252
+ type = 'api' as const;
253
+ private client: BedrockAgentRuntimeClient;
254
+
255
+ async execute(prompt: string, context?: any): Promise<AgentResult> {
256
+ const { agentId, agentAliasId, region } = this.config.adapterConfig || {};
257
+
258
+ const response = await this.client.send(new InvokeAgentCommand({
259
+ agentId,
260
+ agentAliasId,
261
+ sessionId: context?.sessionId || generateSessionId(),
262
+ inputText: prompt,
263
+ }));
264
+
265
+ return {
266
+ output: await this.extractCompletion(response),
267
+ trajectory: this.parseStrandsTrace(response.trace),
268
+ metadata: { sessionId: response.sessionId },
269
+ };
270
+ }
271
+
272
+ private parseStrandsTrace(trace: any): TrajectoryStep[] {
273
+ // Parse Strands trace format to TrajectoryStep[]
274
+ }
275
+ }
276
+ ```
277
+
278
+ ### 2.4 LangGraph Adapter (Non-AG-UI)
279
+
280
+ **New file: `services/adapters/langgraphAdapter.ts`**
281
+ ```typescript
282
+ export class LangGraphAdapter extends BaseAdapter {
283
+ type = 'api' as const;
284
+
285
+ async execute(prompt: string, context?: any): Promise<AgentResult> {
286
+ const { apiEndpoint } = this.config.adapterConfig || {};
287
+
288
+ // Call LangGraph API directly (not AG-UI SSE)
289
+ const response = await fetch(apiEndpoint, {
290
+ method: 'POST',
291
+ headers: { 'Content-Type': 'application/json' },
292
+ body: JSON.stringify({ input: prompt, ...context }),
293
+ });
294
+
295
+ const data = await response.json();
296
+
297
+ return {
298
+ output: data.output,
299
+ trajectory: this.parseLangGraphOutput(data),
300
+ };
301
+ }
302
+ }
303
+ ```
304
+
305
+ ### 2.5 Custom Adapter (User-Provided)
306
+
307
+ **New file: `services/adapters/customAdapter.ts`**
308
+ ```typescript
309
+ /**
310
+ * Allows users to provide a task function (like Strands Evals pattern)
311
+ */
312
+ export class CustomAdapter extends BaseAdapter {
313
+ type = 'custom' as const;
314
+ private taskFunction: (prompt: string, context?: any) => Promise<AgentResult>;
315
+
316
+ setTaskFunction(fn: typeof this.taskFunction): void {
317
+ this.taskFunction = fn;
318
+ }
319
+
320
+ async execute(prompt: string, context?: any): Promise<AgentResult> {
321
+ if (!this.taskFunction) {
322
+ throw new Error('Custom adapter requires a task function');
323
+ }
324
+ return this.taskFunction(prompt, context);
325
+ }
326
+ }
327
+ ```
328
+
329
+ ---
330
+
331
+ ## Phase 3: Integration & UI
332
+
333
+ ### 3.1 Update Experiment Runner
334
+
335
+ **File: `services/experimentRunner.ts`** - Refactor:
336
+ ```typescript
337
+ import { getAdapter } from './adapters';
338
+
339
+ async function executeTestCase(run, testCase) {
340
+ const agent = getAgentConfig(run.agentKey);
341
+ const adapter = getAdapter(agent);
342
+
343
+ // Unified execution through adapter
344
+ const result = await adapter.execute(
345
+ testCase.initialPrompt,
346
+ { tools: testCase.tools, history: [] }
347
+ );
348
+
349
+ // Evaluate with judge (same for all adapters)
350
+ return await evaluateResult(result, testCase);
351
+ }
352
+ ```
353
+
354
+ ### 3.2 Update Agent Configuration UI
355
+
356
+ **File: `components/ConfigEditor.tsx`** - Add:
357
+ - Adapter type selector dropdown
358
+ - Adapter-specific configuration fields
359
+ - Test connection button
360
+
361
+ ### 3.3 Update QuickRunModal
362
+
363
+ **File: `components/QuickRunModal.tsx`**
364
+ - Show adapter type indicator
365
+ - Streaming output for adapters that support it
366
+ - Progress indication for non-streaming adapters
367
+
368
+ ### 3.4 Add Agent Configuration
369
+
370
+ **File: `lib/constants.ts`** - Add new agents:
371
+ ```typescript
372
+ {
373
+ key: "claude-code",
374
+ name: "Claude Code",
375
+ adapterType: "cli",
376
+ adapterConfig: {
377
+ command: "claude",
378
+ timeout: 300000,
379
+ },
380
+ models: ["claude-sonnet-4", "claude-opus-4"],
381
+ description: "Anthropic's Claude Code CLI agent",
382
+ },
383
+ {
384
+ key: "strands",
385
+ name: "Amazon Strands",
386
+ adapterType: "api",
387
+ adapterConfig: {
388
+ agentId: "${STRANDS_AGENT_ID}",
389
+ agentAliasId: "${STRANDS_ALIAS_ID}",
390
+ region: "us-east-1",
391
+ },
392
+ models: ["claude-sonnet-4", "amazon-nova"],
393
+ description: "Amazon Strands agent framework",
394
+ },
395
+ {
396
+ key: "langgraph-api",
397
+ name: "LangGraph (API)",
398
+ adapterType: "api",
399
+ adapterConfig: {
400
+ apiEndpoint: "${LANGGRAPH_API_ENDPOINT}",
401
+ },
402
+ models: ["claude-sonnet-4.5"],
403
+ description: "LangGraph agent via direct API",
404
+ }
405
+ ```
406
+
407
+ ---
408
+
409
+ ## Phase 4: OTEL Trace Enrichment (Optional)
410
+
411
+ For agents that emit OTEL traces, add optional trace fetching to enrich trajectory:
412
+
413
+ ### 4.1 Trace Enrichment Service
414
+
415
+ **New file: `services/adapters/traceEnrichment.ts`**
416
+ ```typescript
417
+ /**
418
+ * Optionally fetch OTEL traces to enrich trajectory with timing/metadata
419
+ */
420
+ export async function enrichWithTraces(
421
+ result: AgentResult,
422
+ traceConfig: { serviceName: string; traceId?: string }
423
+ ): Promise<AgentResult> {
424
+ if (!result.metadata?.traceId) return result;
425
+
426
+ const spans = await fetchTraces(traceConfig);
427
+
428
+ return {
429
+ ...result,
430
+ trajectory: mergeTrajectoryWithSpans(result.trajectory, spans),
431
+ };
432
+ }
433
+ ```
434
+
435
+ ---
436
+
437
+ ## Files Summary
438
+
439
+ ### New Files
440
+ | File | Purpose |
441
+ |------|---------|
442
+ | `services/adapters/index.ts` | Adapter registry and factory |
443
+ | `services/adapters/baseAdapter.ts` | Base adapter class |
444
+ | `services/adapters/aguiAdapter.ts` | AG-UI adapter (wraps existing) |
445
+ | `services/adapters/claudeCodeAdapter.ts` | Claude Code CLI adapter |
446
+ | `services/adapters/strandsAdapter.ts` | Amazon Strands API adapter |
447
+ | `services/adapters/langgraphAdapter.ts` | LangGraph API adapter |
448
+ | `services/adapters/customAdapter.ts` | User-provided task function |
449
+ | `services/adapters/traceEnrichment.ts` | Optional OTEL trace enrichment |
450
+
451
+ ### Modified Files
452
+ | File | Changes |
453
+ |------|---------|
454
+ | `types/index.ts` | Add `AdapterType`, `AgentResult`, `AgentAdapter` |
455
+ | `lib/constants.ts` | Add Claude Code, Strands, LangGraph configs |
456
+ | `services/experimentRunner.ts` | Use adapter pattern for execution |
457
+ | `components/QuickRunModal.tsx` | Adapter-aware UI |
458
+ | `components/ConfigEditor.tsx` | Adapter configuration UI |
459
+
460
+ ---
461
+
462
+ ## Implementation Order
463
+
464
+ 1. **Phase 1** - Adapter Framework
465
+ - Core types (`AgentResult`, `AgentAdapter`)
466
+ - Adapter registry
467
+ - Base adapter class
468
+
469
+ 2. **Phase 2** - Built-in Adapters
470
+ - AG-UI adapter (wrap existing)
471
+ - Claude Code adapter (CLI)
472
+ - Strands adapter (AWS API)
473
+ - LangGraph adapter (API)
474
+
475
+ 3. **Phase 3** - Integration & UI
476
+ - Update experiment runner
477
+ - Configuration UI
478
+ - Quick run modal updates
479
+
480
+ 4. **Phase 4** - OTEL Enrichment (Optional)
481
+ - Trace enrichment service
482
+ - Merge spans with trajectory
483
+
484
+ ---
485
+
486
+ ## Environment Variables
487
+
488
+ ```bash
489
+ # Claude Code
490
+ CLAUDE_CODE_COMMAND=claude
491
+ CLAUDE_CODE_TIMEOUT=300000
492
+
493
+ # Amazon Strands
494
+ STRANDS_AGENT_ID=your-agent-id
495
+ STRANDS_ALIAS_ID=your-alias-id
496
+ AWS_REGION=us-east-1
497
+
498
+ # LangGraph (non-AG-UI)
499
+ LANGGRAPH_API_ENDPOINT=http://localhost:8000/invoke
500
+
501
+ # Optional: OTEL for trace enrichment
502
+ OTEL_TRACE_ENDPOINT=http://localhost:16686
503
+ ```
504
+
505
+ ---
506
+
507
+ ## Verification Plan
508
+
509
+ 1. **Unit tests**:
510
+ - Each adapter's output parsing
511
+ - Adapter registry functionality
512
+ - AgentResult validation
513
+
514
+ 2. **Integration tests**:
515
+ - Claude Code adapter with mock CLI
516
+ - Strands adapter with mock AWS SDK
517
+ - AG-UI adapter (existing flow)
518
+
519
+ 3. **E2E tests**:
520
+ - Mixed-adapter experiment (AG-UI + CLI)
521
+ - Comparison view with different adapters
522
+
523
+ 4. **Manual testing**:
524
+ - Run Claude Code via adapter, evaluate
525
+ - Compare Claude Code vs AG-UI agent on same test case