@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.
- package/README.md +77 -6
- package/cli/dist/index.js +10072 -4502
- package/deployment/cloudformation/agent-health-observability.yaml +762 -0
- package/dist/assets/index-CCQRDlO0.js +243 -0
- package/dist/assets/index-CNHQVbcj.css +1 -0
- package/dist/index.html +2 -2
- package/docs/ARCHITECTURE.md +450 -0
- package/docs/BACKEND_JOB_QUEUE.md +405 -0
- package/docs/CLAUDE_CODE_TELEMETRY.md +283 -0
- package/docs/CLI.md +431 -0
- package/docs/CODING_AGENT_ANALYTICS.md +298 -0
- package/docs/CONFIGURATION.md +388 -0
- package/docs/CONNECTORS.md +536 -0
- package/docs/INSTRUMENT_WITH_OTEL.md +390 -0
- package/docs/ML-COMMONS-SETUP.md +289 -0
- package/docs/NPX_PACKAGING.md +195 -0
- package/docs/PERFORMANCE-MONITORING.md +200 -0
- package/docs/PERFORMANCE.md +390 -0
- package/docs/PI_PROFILING.md +169 -0
- package/docs/PLAN-non-agui-agent-support.md +525 -0
- package/docs/SDK.md +577 -0
- package/docs/SKILLS.md +264 -0
- package/docs/blogs/2026-02-28-opensearch-agent-health.md +200 -0
- package/docs/blogs/getting-started-blog.md +608 -0
- package/docs/diagrams/Agent-health.excalidraw +5656 -0
- package/docs/diagrams/architecture.png +0 -0
- package/docs/plans/field-redesign.md +468 -0
- package/docs/rfcs/001-coding-agent-analytics.md +374 -0
- package/docs/rfcs/002-enterprise-leaderboard.md +267 -0
- package/docs/rfcs/003-remote-aggregation.md +146 -0
- package/docs/rfcs/004-test-sdk-v2.md +599 -0
- package/docs/skills/AGENT_HEALTH.md +598 -0
- package/docs/skills/AGENT_PROFILE.md +191 -0
- package/docs/skills/add-connector/SKILL.md +68 -0
- package/docs/skills/agent-health-profile/SKILL.md +40 -0
- package/docs/skills/config-auth/SKILL.md +194 -0
- package/docs/skills/config-auth/evals/evals.json +35 -0
- package/docs/skills/create-pr/SKILL.md +73 -0
- package/docs/skills/instrument-otel/SKILL.md +84 -0
- package/docs/skills/write-test/SKILL.md +124 -0
- package/docs/ui prd.md +376 -0
- package/examples/README.md +53 -0
- package/examples/config/agent-health.config.example.ts +155 -0
- package/examples/connectors/echo-connector.ts +131 -0
- package/examples/eval-files/demo.eval.js +128 -0
- package/examples/eval-files/sdk-hooks-demo.eval.js +99 -0
- package/examples/pi-profiling/README.md +77 -0
- package/examples/pi-profiling/agent-health-profile.ts +417 -0
- package/lib/dist/lib/agentUtils.d.ts +29 -0
- package/lib/dist/lib/agentUtils.d.ts.map +1 -0
- package/lib/dist/lib/agentUtils.js +43 -0
- package/lib/dist/lib/agentUtils.js.map +1 -0
- package/lib/dist/lib/benchmarkExport.d.ts +14 -0
- package/lib/dist/lib/benchmarkExport.d.ts.map +1 -0
- package/lib/dist/lib/benchmarkExport.js +41 -0
- package/lib/dist/lib/benchmarkExport.js.map +1 -0
- package/lib/dist/lib/benchmarkVersionUtils.d.ts +37 -0
- package/lib/dist/lib/benchmarkVersionUtils.d.ts.map +1 -0
- package/lib/dist/lib/benchmarkVersionUtils.js +68 -0
- package/lib/dist/lib/benchmarkVersionUtils.js.map +1 -0
- package/lib/dist/lib/config/defineConfig.d.ts +27 -0
- package/lib/dist/lib/config/defineConfig.d.ts.map +1 -0
- package/lib/dist/lib/config/defineConfig.js +28 -0
- package/lib/dist/lib/config/defineConfig.js.map +1 -0
- package/lib/dist/lib/config/index.d.ts +9 -0
- package/lib/dist/lib/config/index.d.ts.map +1 -0
- package/lib/dist/lib/config/index.js +8 -0
- package/lib/dist/lib/config/index.js.map +1 -0
- package/lib/dist/lib/config/loader.d.ts +39 -0
- package/lib/dist/lib/config/loader.d.ts.map +1 -0
- package/lib/dist/lib/config/loader.js +258 -0
- package/lib/dist/lib/config/loader.js.map +1 -0
- package/lib/dist/lib/config/statePaths.d.ts +61 -0
- package/lib/dist/lib/config/statePaths.d.ts.map +1 -0
- package/lib/dist/lib/config/statePaths.js +188 -0
- package/lib/dist/lib/config/statePaths.js.map +1 -0
- package/lib/dist/lib/config/types.d.ts +231 -0
- package/lib/dist/lib/config/types.d.ts.map +1 -0
- package/lib/dist/lib/config/types.js +6 -0
- package/lib/dist/lib/config/types.js.map +1 -0
- package/lib/dist/lib/config.d.ts +39 -0
- package/lib/dist/lib/config.d.ts.map +1 -0
- package/lib/dist/lib/config.js +118 -0
- package/lib/dist/lib/config.js.map +1 -0
- package/lib/dist/lib/constants.d.ts +70 -0
- package/lib/dist/lib/constants.d.ts.map +1 -0
- package/lib/dist/lib/constants.js +365 -0
- package/lib/dist/lib/constants.js.map +1 -0
- package/lib/dist/lib/contextUtilization.d.ts +23 -0
- package/lib/dist/lib/contextUtilization.d.ts.map +1 -0
- package/lib/dist/lib/contextUtilization.js +72 -0
- package/lib/dist/lib/contextUtilization.js.map +1 -0
- package/lib/dist/lib/dashboardMetrics.d.ts +87 -0
- package/lib/dist/lib/dashboardMetrics.d.ts.map +1 -0
- package/lib/dist/lib/dashboardMetrics.js +242 -0
- package/lib/dist/lib/dashboardMetrics.js.map +1 -0
- package/lib/dist/lib/dataSourceConfig.d.ts +108 -0
- package/lib/dist/lib/dataSourceConfig.d.ts.map +1 -0
- package/lib/dist/lib/dataSourceConfig.js +166 -0
- package/lib/dist/lib/dataSourceConfig.js.map +1 -0
- package/lib/dist/lib/debug.d.ts +26 -0
- package/lib/dist/lib/debug.d.ts.map +1 -0
- package/lib/dist/lib/debug.js +132 -0
- package/lib/dist/lib/debug.js.map +1 -0
- package/lib/dist/lib/diagnostics.d.ts +28 -0
- package/lib/dist/lib/diagnostics.d.ts.map +1 -0
- package/lib/dist/lib/diagnostics.js +65 -0
- package/lib/dist/lib/diagnostics.js.map +1 -0
- package/lib/dist/lib/envCompat.d.ts +27 -0
- package/lib/dist/lib/envCompat.d.ts.map +1 -0
- package/lib/dist/lib/envCompat.js +73 -0
- package/lib/dist/lib/envCompat.js.map +1 -0
- package/lib/dist/lib/findPackageRoot.d.ts +7 -0
- package/lib/dist/lib/findPackageRoot.d.ts.map +1 -0
- package/lib/dist/lib/findPackageRoot.js +57 -0
- package/lib/dist/lib/findPackageRoot.js.map +1 -0
- package/lib/dist/lib/hooks.d.ts +36 -0
- package/lib/dist/lib/hooks.d.ts.map +1 -0
- package/lib/dist/lib/hooks.js +112 -0
- package/lib/dist/lib/hooks.js.map +1 -0
- package/lib/dist/lib/index.d.ts +47 -0
- package/lib/dist/lib/index.d.ts.map +1 -0
- package/lib/dist/lib/index.js +62 -0
- package/lib/dist/lib/index.js.map +1 -0
- package/lib/dist/lib/labels.d.ts +90 -0
- package/lib/dist/lib/labels.d.ts.map +1 -0
- package/lib/dist/lib/labels.js +158 -0
- package/lib/dist/lib/labels.js.map +1 -0
- package/lib/dist/lib/markdown.d.ts +16 -0
- package/lib/dist/lib/markdown.d.ts.map +1 -0
- package/lib/dist/lib/markdown.js +42 -0
- package/lib/dist/lib/markdown.js.map +1 -0
- package/lib/dist/lib/matchers/expect.d.ts +3 -0
- package/lib/dist/lib/matchers/expect.d.ts.map +1 -0
- package/lib/dist/lib/matchers/expect.js +225 -0
- package/lib/dist/lib/matchers/expect.js.map +1 -0
- package/lib/dist/lib/matchers/index.d.ts +8 -0
- package/lib/dist/lib/matchers/index.d.ts.map +1 -0
- package/lib/dist/lib/matchers/index.js +9 -0
- package/lib/dist/lib/matchers/index.js.map +1 -0
- package/lib/dist/lib/matchers/judgeAccessor.d.ts +113 -0
- package/lib/dist/lib/matchers/judgeAccessor.d.ts.map +1 -0
- package/lib/dist/lib/matchers/judgeAccessor.js +183 -0
- package/lib/dist/lib/matchers/judgeAccessor.js.map +1 -0
- package/lib/dist/lib/matchers/session.d.ts +39 -0
- package/lib/dist/lib/matchers/session.d.ts.map +1 -0
- package/lib/dist/lib/matchers/session.js +116 -0
- package/lib/dist/lib/matchers/session.js.map +1 -0
- package/lib/dist/lib/matchers/traces.d.ts +55 -0
- package/lib/dist/lib/matchers/traces.d.ts.map +1 -0
- package/lib/dist/lib/matchers/traces.js +116 -0
- package/lib/dist/lib/matchers/traces.js.map +1 -0
- package/lib/dist/lib/matchers/types.d.ts +75 -0
- package/lib/dist/lib/matchers/types.d.ts.map +1 -0
- package/lib/dist/lib/matchers/types.js +6 -0
- package/lib/dist/lib/matchers/types.js.map +1 -0
- package/lib/dist/lib/packagePaths.d.ts +29 -0
- package/lib/dist/lib/packagePaths.d.ts.map +1 -0
- package/lib/dist/lib/packagePaths.js +63 -0
- package/lib/dist/lib/packagePaths.js.map +1 -0
- package/lib/dist/lib/performance.d.ts +51 -0
- package/lib/dist/lib/performance.d.ts.map +1 -0
- package/lib/dist/lib/performance.js +159 -0
- package/lib/dist/lib/performance.js.map +1 -0
- package/lib/dist/lib/portConfig.d.ts +29 -0
- package/lib/dist/lib/portConfig.d.ts.map +1 -0
- package/lib/dist/lib/portConfig.js +64 -0
- package/lib/dist/lib/portConfig.js.map +1 -0
- package/lib/dist/lib/preferences.d.ts +63 -0
- package/lib/dist/lib/preferences.d.ts.map +1 -0
- package/lib/dist/lib/preferences.js +117 -0
- package/lib/dist/lib/preferences.js.map +1 -0
- package/lib/dist/lib/resolveAgentModel.d.ts +22 -0
- package/lib/dist/lib/resolveAgentModel.d.ts.map +1 -0
- package/lib/dist/lib/resolveAgentModel.js +37 -0
- package/lib/dist/lib/resolveAgentModel.js.map +1 -0
- package/lib/dist/lib/runStats.d.ts +92 -0
- package/lib/dist/lib/runStats.d.ts.map +1 -0
- package/lib/dist/lib/runStats.js +160 -0
- package/lib/dist/lib/runStats.js.map +1 -0
- package/lib/dist/lib/telemetry/constants.d.ts +60 -0
- package/lib/dist/lib/telemetry/constants.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/constants.js +87 -0
- package/lib/dist/lib/telemetry/constants.js.map +1 -0
- package/lib/dist/lib/telemetry/evalSpans.d.ts +61 -0
- package/lib/dist/lib/telemetry/evalSpans.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/evalSpans.js +254 -0
- package/lib/dist/lib/telemetry/evalSpans.js.map +1 -0
- package/lib/dist/lib/telemetry/index.d.ts +11 -0
- package/lib/dist/lib/telemetry/index.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/index.js +15 -0
- package/lib/dist/lib/telemetry/index.js.map +1 -0
- package/lib/dist/lib/telemetry/opensearchExporter.d.ts +43 -0
- package/lib/dist/lib/telemetry/opensearchExporter.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/opensearchExporter.js +217 -0
- package/lib/dist/lib/telemetry/opensearchExporter.js.map +1 -0
- package/lib/dist/lib/telemetry/provider.d.ts +55 -0
- package/lib/dist/lib/telemetry/provider.d.ts.map +1 -0
- package/lib/dist/lib/telemetry/provider.js +140 -0
- package/lib/dist/lib/telemetry/provider.js.map +1 -0
- package/lib/dist/lib/testCaseLabels.d.ts +34 -0
- package/lib/dist/lib/testCaseLabels.d.ts.map +1 -0
- package/lib/dist/lib/testCaseLabels.js +88 -0
- package/lib/dist/lib/testCaseLabels.js.map +1 -0
- package/lib/dist/lib/testCaseValidation.d.ts +140 -0
- package/lib/dist/lib/testCaseValidation.d.ts.map +1 -0
- package/lib/dist/lib/testCaseValidation.js +162 -0
- package/lib/dist/lib/testCaseValidation.js.map +1 -0
- package/lib/dist/lib/testCases/agentFixture.d.ts +80 -0
- package/lib/dist/lib/testCases/agentFixture.d.ts.map +1 -0
- package/lib/dist/lib/testCases/agentFixture.js +43 -0
- package/lib/dist/lib/testCases/agentFixture.js.map +1 -0
- package/lib/dist/lib/testCases/authoringSurface.d.ts +10 -0
- package/lib/dist/lib/testCases/authoringSurface.d.ts.map +1 -0
- package/lib/dist/lib/testCases/authoringSurface.js +54 -0
- package/lib/dist/lib/testCases/authoringSurface.js.map +1 -0
- package/lib/dist/lib/testCases/codemod.d.ts +13 -0
- package/lib/dist/lib/testCases/codemod.d.ts.map +1 -0
- package/lib/dist/lib/testCases/codemod.js +169 -0
- package/lib/dist/lib/testCases/codemod.js.map +1 -0
- package/lib/dist/lib/testCases/define.d.ts +114 -0
- package/lib/dist/lib/testCases/define.d.ts.map +1 -0
- package/lib/dist/lib/testCases/define.js +253 -0
- package/lib/dist/lib/testCases/define.js.map +1 -0
- package/lib/dist/lib/testCases/evaluators.d.ts +80 -0
- package/lib/dist/lib/testCases/evaluators.d.ts.map +1 -0
- package/lib/dist/lib/testCases/evaluators.js +105 -0
- package/lib/dist/lib/testCases/evaluators.js.map +1 -0
- package/lib/dist/lib/testCases/index.d.ts +14 -0
- package/lib/dist/lib/testCases/index.d.ts.map +1 -0
- package/lib/dist/lib/testCases/index.js +12 -0
- package/lib/dist/lib/testCases/index.js.map +1 -0
- package/lib/dist/lib/testCases/judge.d.ts +165 -0
- package/lib/dist/lib/testCases/judge.d.ts.map +1 -0
- package/lib/dist/lib/testCases/judge.js +359 -0
- package/lib/dist/lib/testCases/judge.js.map +1 -0
- package/lib/dist/lib/testCases/loader.d.ts +26 -0
- package/lib/dist/lib/testCases/loader.d.ts.map +1 -0
- package/lib/dist/lib/testCases/loader.js +149 -0
- package/lib/dist/lib/testCases/loader.js.map +1 -0
- package/lib/dist/lib/testCases/types.d.ts +242 -0
- package/lib/dist/lib/testCases/types.d.ts.map +1 -0
- package/lib/dist/lib/testCases/types.js +6 -0
- package/lib/dist/lib/testCases/types.js.map +1 -0
- package/lib/dist/lib/theme.d.ts +6 -0
- package/lib/dist/lib/theme.d.ts.map +1 -0
- package/lib/dist/lib/theme.js +36 -0
- package/lib/dist/lib/theme.js.map +1 -0
- package/lib/dist/lib/uiTelemetry.d.ts +7 -0
- package/lib/dist/lib/uiTelemetry.d.ts.map +1 -0
- package/lib/dist/lib/uiTelemetry.js +25 -0
- package/lib/dist/lib/uiTelemetry.js.map +1 -0
- package/lib/dist/lib/utils.d.ts +96 -0
- package/lib/dist/lib/utils.d.ts.map +1 -0
- package/lib/dist/lib/utils.js +232 -0
- package/lib/dist/lib/utils.js.map +1 -0
- package/lib/dist/lib/workflow/consolidate.d.ts +12 -0
- package/lib/dist/lib/workflow/consolidate.d.ts.map +1 -0
- package/lib/dist/lib/workflow/consolidate.js +33 -0
- package/lib/dist/lib/workflow/consolidate.js.map +1 -0
- package/lib/dist/lib/workflow/index.d.ts +13 -0
- package/lib/dist/lib/workflow/index.d.ts.map +1 -0
- package/lib/dist/lib/workflow/index.js +12 -0
- package/lib/dist/lib/workflow/index.js.map +1 -0
- package/lib/dist/lib/workflow/ledger.d.ts +30 -0
- package/lib/dist/lib/workflow/ledger.d.ts.map +1 -0
- package/lib/dist/lib/workflow/ledger.js +41 -0
- package/lib/dist/lib/workflow/ledger.js.map +1 -0
- package/lib/dist/lib/workflow/pool.d.ts +13 -0
- package/lib/dist/lib/workflow/pool.d.ts.map +1 -0
- package/lib/dist/lib/workflow/pool.js +44 -0
- package/lib/dist/lib/workflow/pool.js.map +1 -0
- package/lib/dist/lib/workflow/source.d.ts +22 -0
- package/lib/dist/lib/workflow/source.d.ts.map +1 -0
- package/lib/dist/lib/workflow/source.js +29 -0
- package/lib/dist/lib/workflow/source.js.map +1 -0
- package/lib/dist/lib/workflow/stepB.d.ts +71 -0
- package/lib/dist/lib/workflow/stepB.d.ts.map +1 -0
- package/lib/dist/lib/workflow/stepB.js +99 -0
- package/lib/dist/lib/workflow/stepB.js.map +1 -0
- package/lib/dist/lib/workflow/types.d.ts +86 -0
- package/lib/dist/lib/workflow/types.d.ts.map +1 -0
- package/lib/dist/lib/workflow/types.js +6 -0
- package/lib/dist/lib/workflow/types.js.map +1 -0
- package/lib/dist/lib/workflow/workflow.d.ts +119 -0
- package/lib/dist/lib/workflow/workflow.d.ts.map +1 -0
- package/lib/dist/lib/workflow/workflow.js +195 -0
- package/lib/dist/lib/workflow/workflow.js.map +1 -0
- package/lib/dist/services/agent/aguiConverter.d.ts +50 -0
- package/lib/dist/services/agent/aguiConverter.d.ts.map +1 -0
- package/lib/dist/services/agent/aguiConverter.js +449 -0
- package/lib/dist/services/agent/aguiConverter.js.map +1 -0
- package/lib/dist/services/agent/index.d.ts +10 -0
- package/lib/dist/services/agent/index.d.ts.map +1 -0
- package/lib/dist/services/agent/index.js +12 -0
- package/lib/dist/services/agent/index.js.map +1 -0
- package/lib/dist/services/agent/payloadBuilder.d.ts +33 -0
- package/lib/dist/services/agent/payloadBuilder.d.ts.map +1 -0
- package/lib/dist/services/agent/payloadBuilder.js +75 -0
- package/lib/dist/services/agent/payloadBuilder.js.map +1 -0
- package/lib/dist/services/agent/sseStream.d.ts +43 -0
- package/lib/dist/services/agent/sseStream.d.ts.map +1 -0
- package/lib/dist/services/agent/sseStream.js +223 -0
- package/lib/dist/services/agent/sseStream.js.map +1 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts +44 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js +95 -0
- package/lib/dist/services/connectors/agui/AGUIStreamingConnector.js.map +1 -0
- package/lib/dist/services/connectors/base/BaseConnector.d.ts +81 -0
- package/lib/dist/services/connectors/base/BaseConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/base/BaseConnector.js +170 -0
- package/lib/dist/services/connectors/base/BaseConnector.js.map +1 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts +116 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js +403 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js.map +1 -0
- package/lib/dist/services/connectors/index.d.ts +13 -0
- package/lib/dist/services/connectors/index.d.ts.map +1 -0
- package/lib/dist/services/connectors/index.js +32 -0
- package/lib/dist/services/connectors/index.js.map +1 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.d.ts +48 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.js +158 -0
- package/lib/dist/services/connectors/kiro/KiroConnector.js.map +1 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts +36 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.js +175 -0
- package/lib/dist/services/connectors/langgraph/LangGraphConnector.js.map +1 -0
- package/lib/dist/services/connectors/mock/MockConnector.d.ts +37 -0
- package/lib/dist/services/connectors/mock/MockConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/mock/MockConnector.js +120 -0
- package/lib/dist/services/connectors/mock/MockConnector.js.map +1 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts +42 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js +133 -0
- package/lib/dist/services/connectors/openai-compatible/OpenAICompatibleConnector.js.map +1 -0
- package/lib/dist/services/connectors/pi/PiConnector.d.ts +87 -0
- package/lib/dist/services/connectors/pi/PiConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/pi/PiConnector.js +274 -0
- package/lib/dist/services/connectors/pi/PiConnector.js.map +1 -0
- package/lib/dist/services/connectors/registry.d.ts +57 -0
- package/lib/dist/services/connectors/registry.d.ts.map +1 -0
- package/lib/dist/services/connectors/registry.js +106 -0
- package/lib/dist/services/connectors/registry.js.map +1 -0
- package/lib/dist/services/connectors/rest/RESTConnector.d.ts +38 -0
- package/lib/dist/services/connectors/rest/RESTConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/rest/RESTConnector.js +117 -0
- package/lib/dist/services/connectors/rest/RESTConnector.js.map +1 -0
- package/lib/dist/services/connectors/server.d.ts +13 -0
- package/lib/dist/services/connectors/server.d.ts.map +1 -0
- package/lib/dist/services/connectors/server.js +34 -0
- package/lib/dist/services/connectors/server.js.map +1 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.d.ts +48 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.js +221 -0
- package/lib/dist/services/connectors/strands/StrandsConnector.js.map +1 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts +88 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.js +418 -0
- package/lib/dist/services/connectors/subprocess/SubprocessConnector.js.map +1 -0
- package/lib/dist/services/connectors/types.d.ts +213 -0
- package/lib/dist/services/connectors/types.d.ts.map +1 -0
- package/lib/dist/services/connectors/types.js +6 -0
- package/lib/dist/services/connectors/types.js.map +1 -0
- package/lib/dist/services/evaluation/bedrockJudge.d.ts +64 -0
- package/lib/dist/services/evaluation/bedrockJudge.d.ts.map +1 -0
- package/lib/dist/services/evaluation/bedrockJudge.js +167 -0
- package/lib/dist/services/evaluation/bedrockJudge.js.map +1 -0
- package/lib/dist/services/evaluation/evaluatorError.d.ts +56 -0
- package/lib/dist/services/evaluation/evaluatorError.d.ts.map +1 -0
- package/lib/dist/services/evaluation/evaluatorError.js +56 -0
- package/lib/dist/services/evaluation/evaluatorError.js.map +1 -0
- package/lib/dist/services/evaluation/index.d.ts +106 -0
- package/lib/dist/services/evaluation/index.d.ts.map +1 -0
- package/lib/dist/services/evaluation/index.js +684 -0
- package/lib/dist/services/evaluation/index.js.map +1 -0
- package/lib/dist/services/evaluation/mockTrajectory.d.ts +3 -0
- package/lib/dist/services/evaluation/mockTrajectory.d.ts.map +1 -0
- package/lib/dist/services/evaluation/mockTrajectory.js +72 -0
- package/lib/dist/services/evaluation/mockTrajectory.js.map +1 -0
- package/lib/dist/services/opensearch/client.d.ts +26 -0
- package/lib/dist/services/opensearch/client.d.ts.map +1 -0
- package/lib/dist/services/opensearch/client.js +131 -0
- package/lib/dist/services/opensearch/client.js.map +1 -0
- package/lib/dist/services/opensearch/index.d.ts +16 -0
- package/lib/dist/services/opensearch/index.d.ts.map +1 -0
- package/lib/dist/services/opensearch/index.js +25 -0
- package/lib/dist/services/opensearch/index.js.map +1 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts +123 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.js +429 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.js.map +1 -0
- package/lib/dist/services/storage/asyncRunStorage.d.ts +127 -0
- package/lib/dist/services/storage/asyncRunStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncRunStorage.js +448 -0
- package/lib/dist/services/storage/asyncRunStorage.js.map +1 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.d.ts +156 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.js +285 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.js.map +1 -0
- package/lib/dist/services/storage/index.d.ts +17 -0
- package/lib/dist/services/storage/index.d.ts.map +1 -0
- package/lib/dist/services/storage/index.js +20 -0
- package/lib/dist/services/storage/index.js.map +1 -0
- package/lib/dist/services/storage/migration.d.ts +54 -0
- package/lib/dist/services/storage/migration.d.ts.map +1 -0
- package/lib/dist/services/storage/migration.js +296 -0
- package/lib/dist/services/storage/migration.js.map +1 -0
- package/lib/dist/services/storage/opensearchClient.d.ts +924 -0
- package/lib/dist/services/storage/opensearchClient.d.ts.map +1 -0
- package/lib/dist/services/storage/opensearchClient.js +435 -0
- package/lib/dist/services/storage/opensearchClient.js.map +1 -0
- package/lib/dist/services/traces/browserRecovery.d.ts +26 -0
- package/lib/dist/services/traces/browserRecovery.d.ts.map +1 -0
- package/lib/dist/services/traces/browserRecovery.js +81 -0
- package/lib/dist/services/traces/browserRecovery.js.map +1 -0
- package/lib/dist/services/traces/categoryStyles.d.ts +21 -0
- package/lib/dist/services/traces/categoryStyles.d.ts.map +1 -0
- package/lib/dist/services/traces/categoryStyles.js +56 -0
- package/lib/dist/services/traces/categoryStyles.js.map +1 -0
- package/lib/dist/services/traces/executionOrderTransform.d.ts +35 -0
- package/lib/dist/services/traces/executionOrderTransform.d.ts.map +1 -0
- package/lib/dist/services/traces/executionOrderTransform.js +313 -0
- package/lib/dist/services/traces/executionOrderTransform.js.map +1 -0
- package/lib/dist/services/traces/fetchSpansForRun.d.ts +86 -0
- package/lib/dist/services/traces/fetchSpansForRun.d.ts.map +1 -0
- package/lib/dist/services/traces/fetchSpansForRun.js +69 -0
- package/lib/dist/services/traces/fetchSpansForRun.js.map +1 -0
- package/lib/dist/services/traces/flowTransform.d.ts +24 -0
- package/lib/dist/services/traces/flowTransform.d.ts.map +1 -0
- package/lib/dist/services/traces/flowTransform.js +228 -0
- package/lib/dist/services/traces/flowTransform.js.map +1 -0
- package/lib/dist/services/traces/index.d.ts +121 -0
- package/lib/dist/services/traces/index.d.ts.map +1 -0
- package/lib/dist/services/traces/index.js +255 -0
- package/lib/dist/services/traces/index.js.map +1 -0
- package/lib/dist/services/traces/intentTransform.d.ts +20 -0
- package/lib/dist/services/traces/intentTransform.d.ts.map +1 -0
- package/lib/dist/services/traces/intentTransform.js +131 -0
- package/lib/dist/services/traces/intentTransform.js.map +1 -0
- package/lib/dist/services/traces/judgeAgentsHints.d.ts +63 -0
- package/lib/dist/services/traces/judgeAgentsHints.d.ts.map +1 -0
- package/lib/dist/services/traces/judgeAgentsHints.js +89 -0
- package/lib/dist/services/traces/judgeAgentsHints.js.map +1 -0
- package/lib/dist/services/traces/messageExtraction.d.ts +15 -0
- package/lib/dist/services/traces/messageExtraction.d.ts.map +1 -0
- package/lib/dist/services/traces/messageExtraction.js +251 -0
- package/lib/dist/services/traces/messageExtraction.js.map +1 -0
- package/lib/dist/services/traces/spanCategorization.d.ts +63 -0
- package/lib/dist/services/traces/spanCategorization.d.ts.map +1 -0
- package/lib/dist/services/traces/spanCategorization.js +276 -0
- package/lib/dist/services/traces/spanCategorization.js.map +1 -0
- package/lib/dist/services/traces/spanPreprocessing.d.ts +37 -0
- package/lib/dist/services/traces/spanPreprocessing.d.ts.map +1 -0
- package/lib/dist/services/traces/spanPreprocessing.js +102 -0
- package/lib/dist/services/traces/spanPreprocessing.js.map +1 -0
- package/lib/dist/services/traces/spansToTrajectory.d.ts +36 -0
- package/lib/dist/services/traces/spansToTrajectory.d.ts.map +1 -0
- package/lib/dist/services/traces/spansToTrajectory.js +387 -0
- package/lib/dist/services/traces/spansToTrajectory.js.map +1 -0
- package/lib/dist/services/traces/toolSimilarity.d.ts +35 -0
- package/lib/dist/services/traces/toolSimilarity.d.ts.map +1 -0
- package/lib/dist/services/traces/toolSimilarity.js +203 -0
- package/lib/dist/services/traces/toolSimilarity.js.map +1 -0
- package/lib/dist/services/traces/traceComparison.d.ts +31 -0
- package/lib/dist/services/traces/traceComparison.d.ts.map +1 -0
- package/lib/dist/services/traces/traceComparison.js +318 -0
- package/lib/dist/services/traces/traceComparison.js.map +1 -0
- package/lib/dist/services/traces/traceGrouping.d.ts +19 -0
- package/lib/dist/services/traces/traceGrouping.d.ts.map +1 -0
- package/lib/dist/services/traces/traceGrouping.js +107 -0
- package/lib/dist/services/traces/traceGrouping.js.map +1 -0
- package/lib/dist/services/traces/tracePoller.d.ts +84 -0
- package/lib/dist/services/traces/tracePoller.d.ts.map +1 -0
- package/lib/dist/services/traces/tracePoller.js +309 -0
- package/lib/dist/services/traces/tracePoller.js.map +1 -0
- package/lib/dist/services/traces/traceStats.d.ts +45 -0
- package/lib/dist/services/traces/traceStats.d.ts.map +1 -0
- package/lib/dist/services/traces/traceStats.js +114 -0
- package/lib/dist/services/traces/traceStats.js.map +1 -0
- package/lib/dist/services/traces/traceSummary.d.ts +47 -0
- package/lib/dist/services/traces/traceSummary.d.ts.map +1 -0
- package/lib/dist/services/traces/traceSummary.js +68 -0
- package/lib/dist/services/traces/traceSummary.js.map +1 -0
- package/lib/dist/services/traces/utils.d.ts +33 -0
- package/lib/dist/services/traces/utils.d.ts.map +1 -0
- package/lib/dist/services/traces/utils.js +114 -0
- package/lib/dist/services/traces/utils.js.map +1 -0
- package/lib/dist/types/agui.d.ts +13 -0
- package/lib/dist/types/agui.d.ts.map +1 -0
- package/lib/dist/types/agui.js +16 -0
- package/lib/dist/types/agui.js.map +1 -0
- package/lib/dist/types/index.d.ts +1175 -0
- package/lib/dist/types/index.d.ts.map +1 -0
- package/lib/dist/types/index.js +12 -0
- package/lib/dist/types/index.js.map +1 -0
- package/lib/dist/types/skills.d.ts +146 -0
- package/lib/dist/types/skills.d.ts.map +1 -0
- package/lib/dist/types/skills.js +6 -0
- package/lib/dist/types/skills.js.map +1 -0
- package/observio-sample-agent/pi-package/README.md +112 -0
- package/observio-sample-agent/pi-package/extensions/agent-health.ts +373 -0
- package/observio-sample-agent/pi-package/package.json +17 -0
- package/observio-sample-agent/pi-package/prompts/agent-health.md +37 -0
- package/observio-sample-agent/pi-package/skills/create-pr/SKILL.md +88 -0
- package/observio-sample-agent/pi-package/skills/fix-bug/SKILL.md +71 -0
- package/observio-sample-agent/pi-package/skills/implement-feature/SKILL.md +156 -0
- package/observio-sample-agent/pi-package/skills/instrument-otel/SKILL.md +208 -0
- package/observio-sample-agent/pi-package/skills/setup-collector/SKILL.md +146 -0
- package/observio-sample-agent/pi-package/skills/write-test/SKILL.md +115 -0
- package/package.json +64 -13
- package/server/dist/app.js +32651 -17637
- package/server/dist/index.js +29875 -14638
- package/tsconfig.lib.json +71 -0
- package/dist/assets/index-EvPLSTAS.js +0 -267
- package/dist/assets/index-RXasQKUs.css +0 -1
- package/lib/dist/config/index.js +0 -404
- 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
|