@opensearch-project/agent-health 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -5
- package/cli/dist/index.js +8292 -2938
- package/deployment/cloudformation/agent-health-observability.yaml +223 -32
- package/dist/assets/index-BfxtxmKc.css +1 -0
- package/dist/assets/index-CrjAfDHu.js +243 -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 +474 -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 +397 -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 +626 -0
- package/docs/SKILLS.md +264 -0
- package/docs/STORAGE_INDEX_FIELD_LIMITS.md +216 -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 +652 -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/ops-rca-classification.eval.js +71 -0
- package/examples/eval-files/ops-rca-evaluator.json +15 -0
- package/examples/eval-files/sdk-demo.eval.js +72 -0
- package/examples/eval-files/sdk-describe-demo.eval.js +50 -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/bedrockCompat.d.ts +27 -0
- package/lib/dist/lib/bedrockCompat.d.ts.map +1 -0
- package/lib/dist/lib/bedrockCompat.js +83 -0
- package/lib/dist/lib/bedrockCompat.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/benchmarkImage.d.ts +52 -0
- package/lib/dist/lib/benchmarkImage.d.ts.map +1 -0
- package/lib/dist/lib/benchmarkImage.js +113 -0
- package/lib/dist/lib/benchmarkImage.js.map +1 -0
- package/lib/dist/lib/benchmarkVersionUtils.d.ts +50 -0
- package/lib/dist/lib/benchmarkVersionUtils.d.ts.map +1 -0
- package/lib/dist/lib/benchmarkVersionUtils.js +89 -0
- package/lib/dist/lib/benchmarkVersionUtils.js.map +1 -0
- package/lib/dist/lib/chunkedFetch.d.ts +18 -0
- package/lib/dist/lib/chunkedFetch.d.ts.map +1 -0
- package/lib/dist/lib/chunkedFetch.js +40 -0
- package/lib/dist/lib/chunkedFetch.js.map +1 -0
- package/lib/dist/lib/comparisonInsights.d.ts +104 -0
- package/lib/dist/lib/comparisonInsights.d.ts.map +1 -0
- package/lib/dist/lib/comparisonInsights.js +212 -0
- package/lib/dist/lib/comparisonInsights.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 +263 -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 +245 -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 +81 -0
- package/lib/dist/lib/constants.d.ts.map +1 -0
- package/lib/dist/lib/constants.js +374 -0
- package/lib/dist/lib/constants.js.map +1 -0
- package/lib/dist/lib/contextFormat.d.ts +26 -0
- package/lib/dist/lib/contextFormat.d.ts.map +1 -0
- package/lib/dist/lib/contextFormat.js +28 -0
- package/lib/dist/lib/contextFormat.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 +82 -0
- package/lib/dist/lib/envCompat.js.map +1 -0
- package/lib/dist/lib/evaluationRerun.d.ts +63 -0
- package/lib/dist/lib/evaluationRerun.d.ts.map +1 -0
- package/lib/dist/lib/evaluationRerun.js +85 -0
- package/lib/dist/lib/evaluationRerun.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 +70 -0
- package/lib/dist/lib/matchers/traces.d.ts.map +1 -0
- package/lib/dist/lib/matchers/traces.js +236 -0
- package/lib/dist/lib/matchers/traces.js.map +1 -0
- package/lib/dist/lib/matchers/tracesPricing.d.ts +38 -0
- package/lib/dist/lib/matchers/tracesPricing.d.ts.map +1 -0
- package/lib/dist/lib/matchers/tracesPricing.js +64 -0
- package/lib/dist/lib/matchers/tracesPricing.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 +116 -0
- package/lib/dist/lib/runStats.d.ts.map +1 -0
- package/lib/dist/lib/runStats.js +192 -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 +36 -0
- package/lib/dist/lib/testCases/loader.d.ts.map +1 -0
- package/lib/dist/lib/testCases/loader.js +179 -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 +111 -0
- package/lib/dist/lib/utils.d.ts.map +1 -0
- package/lib/dist/lib/utils.js +254 -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 +126 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.d.ts.map +1 -0
- package/lib/dist/services/connectors/claude-code/ClaudeCodeConnector.js +417 -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 +426 -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 +71 -0
- package/lib/dist/services/evaluation/bedrockJudge.d.ts.map +1 -0
- package/lib/dist/services/evaluation/bedrockJudge.js +169 -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 +440 -0
- package/lib/dist/services/storage/asyncBenchmarkStorage.js.map +1 -0
- package/lib/dist/services/storage/asyncRunStorage.d.ts +135 -0
- package/lib/dist/services/storage/asyncRunStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncRunStorage.js +524 -0
- package/lib/dist/services/storage/asyncRunStorage.js.map +1 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.d.ts +170 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.d.ts.map +1 -0
- package/lib/dist/services/storage/asyncTestCaseStorage.js +301 -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 +947 -0
- package/lib/dist/services/storage/opensearchClient.d.ts.map +1 -0
- package/lib/dist/services/storage/opensearchClient.js +442 -0
- package/lib/dist/services/storage/opensearchClient.js.map +1 -0
- package/lib/dist/services/traces/browserRecovery.d.ts +37 -0
- package/lib/dist/services/traces/browserRecovery.d.ts.map +1 -0
- package/lib/dist/services/traces/browserRecovery.js +108 -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 +313 -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 +425 -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 +108 -0
- package/lib/dist/services/traces/tracePoller.d.ts.map +1 -0
- package/lib/dist/services/traces/tracePoller.js +475 -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 +1229 -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 +45 -9
- package/server/dist/app.js +34031 -18731
- package/server/dist/index.js +30737 -15338
- package/tsconfig.lib.json +71 -0
- package/dist/assets/index-BOIP5L7h.js +0 -246
- package/dist/assets/index-CU9YKpAL.css +0 -1
- package/lib/dist/config/index.js +0 -452
- package/lib/dist/index.js +0 -1725
|
@@ -0,0 +1,524 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Async Run Storage
|
|
7
|
+
*
|
|
8
|
+
* Async wrapper around OpenSearch storage for runs (test case executions).
|
|
9
|
+
* Replaces the localStorage-based reportStorage.
|
|
10
|
+
* Maps between app's EvaluationReport/TestCaseRun and OpenSearch StorageRun.
|
|
11
|
+
*/
|
|
12
|
+
import { runStorage as opensearchRuns, } from './opensearchClient.js';
|
|
13
|
+
import { fetchChunked } from '../../lib/chunkedFetch.js';
|
|
14
|
+
/**
|
|
15
|
+
* Coerce a stored metrics object — which may contain any subset of dynamic
|
|
16
|
+
* metric names (driven by the evaluator's `scoringConfig.metrics`) — into
|
|
17
|
+
* the app-side `EvaluationMetrics` shape.
|
|
18
|
+
*
|
|
19
|
+
* Two important guarantees:
|
|
20
|
+
* 1. **Preserves all numeric metric names**, not just the four legacy ones
|
|
21
|
+
* (accuracy / faithfulness / latency_score / trajectory_alignment_score).
|
|
22
|
+
* Custom and non-RCA system evaluators emit names like
|
|
23
|
+
* `tool_selection_accuracy`, `reasoning_coherence`, `bias_detection`, etc.
|
|
24
|
+
* 2. **Distinguishes "missing" from "zero"**. Previously the read-side
|
|
25
|
+
* whitelist defaulted every missing field to `0`, which made the runs
|
|
26
|
+
* list show `0%` for every run that didn't happen to have an `accuracy`
|
|
27
|
+
* metric — even runs the judge had passed. Missing entries are now
|
|
28
|
+
* simply absent (so UI consumers can render `—` instead of fabricated 0).
|
|
29
|
+
*/
|
|
30
|
+
function storedMetricsToApp(raw) {
|
|
31
|
+
const out = {};
|
|
32
|
+
if (!raw || typeof raw !== 'object')
|
|
33
|
+
return out;
|
|
34
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
35
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
36
|
+
out[key] = value;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return out;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Convert OpenSearch storage format to app TestCaseRun format
|
|
43
|
+
*/
|
|
44
|
+
function toTestCaseRun(stored) {
|
|
45
|
+
// Cast to access trace-mode fields
|
|
46
|
+
const storedAny = stored;
|
|
47
|
+
return {
|
|
48
|
+
id: stored.id,
|
|
49
|
+
name: stored.name,
|
|
50
|
+
description: stored.description,
|
|
51
|
+
timestamp: stored.createdAt,
|
|
52
|
+
testCaseId: stored.testCaseId,
|
|
53
|
+
testCaseVersion: parseInt(stored.testCaseVersionId?.split('-v')[1] || '1'),
|
|
54
|
+
experimentId: stored.experimentId || undefined,
|
|
55
|
+
experimentRunId: stored.experimentRunId || undefined,
|
|
56
|
+
agentName: stored.agentName || stored.agentId,
|
|
57
|
+
agentKey: stored.agentId,
|
|
58
|
+
modelName: stored.modelId,
|
|
59
|
+
modelId: stored.modelId,
|
|
60
|
+
// Judge model used for this run (PR #390 persists it). Without this
|
|
61
|
+
// mapping, browser-side trace-recovery judging silently fell back to the
|
|
62
|
+
// agent's modelId even when a distinct judge model was configured.
|
|
63
|
+
judgeModelId: stored.judgeModelId,
|
|
64
|
+
status: stored.status,
|
|
65
|
+
passFailStatus: stored.passFailStatus,
|
|
66
|
+
evaluatorId: stored.evaluatorId,
|
|
67
|
+
trajectory: (stored.trajectory || []),
|
|
68
|
+
// Preserve every metric the judge emitted, not just the four legacy keys.
|
|
69
|
+
// Custom evaluators (and even system evaluators other than RCA Default)
|
|
70
|
+
// produce dynamic metric names like `tool_selection_accuracy` or
|
|
71
|
+
// `reasoning_coherence`; the previous shape whitelisted only
|
|
72
|
+
// accuracy/faithfulness/latency_score/trajectory_alignment_score and
|
|
73
|
+
// — worse — collapsed missing values to `0` via `|| 0`, which made
|
|
74
|
+
// every run look like it had scored zero in the runs list.
|
|
75
|
+
//
|
|
76
|
+
// We spread the stored object directly and only filter out non-numeric
|
|
77
|
+
// entries so the resulting shape matches `EvaluationMetrics`'s
|
|
78
|
+
// `[key: string]: number | undefined` index signature without leaking
|
|
79
|
+
// surprise types into downstream consumers.
|
|
80
|
+
metrics: storedMetricsToApp(stored.metrics),
|
|
81
|
+
// Per-test-case wall-clock timing (durationMs/agentDurationMs/...) as
|
|
82
|
+
// persisted by the evaluation/benchmark runner (see services/evaluationRunner.ts,
|
|
83
|
+
// services/benchmarkRunner.ts) and already read server-side (server/routes/
|
|
84
|
+
// comparison.ts). NOT declared on the narrow `StorageRun` interface above —
|
|
85
|
+
// same pattern as judgeModelId/traceId/sessionId below — so without this
|
|
86
|
+
// mapping every BROWSER-side consumer of a report loaded via
|
|
87
|
+
// getReportsByIds() (e.g. the comparison deep-dive panel's per-case
|
|
88
|
+
// Score/Duration/Tools header) silently saw `report.performanceMetrics`
|
|
89
|
+
// as undefined even though the field is stored and non-empty.
|
|
90
|
+
performanceMetrics: stored.performanceMetrics,
|
|
91
|
+
llmJudgeReasoning: stored.llmJudgeReasoning || '',
|
|
92
|
+
annotations: (stored.annotations || []).map(ann => ({
|
|
93
|
+
id: ann.id,
|
|
94
|
+
reportId: stored.id,
|
|
95
|
+
text: ann.text,
|
|
96
|
+
timestamp: ann.createdAt,
|
|
97
|
+
tags: ann.tags,
|
|
98
|
+
author: ann.author,
|
|
99
|
+
})),
|
|
100
|
+
runId: stored.traceId || stored.runId,
|
|
101
|
+
// Preserve the OTel traceId as its OWN field (distinct from runId). The
|
|
102
|
+
// comparison Traces tab correlates spans by report.traceId (Strategy A);
|
|
103
|
+
// without this it was always undefined here — mapped into runId only — so
|
|
104
|
+
// agents that emit their own trace (pi) / Claude Code never showed traces.
|
|
105
|
+
traceId: stored.traceId,
|
|
106
|
+
sessionId: stored.sessionId,
|
|
107
|
+
rawEvents: stored.rawEvents,
|
|
108
|
+
logs: (stored.logs || []),
|
|
109
|
+
improvementStrategies: stored.improvementStrategies,
|
|
110
|
+
// Per-matcher verdicts captured by the SDK during the test body
|
|
111
|
+
matcherResults: stored.matcherResults,
|
|
112
|
+
// Trace-mode fields
|
|
113
|
+
metricsStatus: storedAny.metricsStatus,
|
|
114
|
+
traceFetchAttempts: storedAny.traceFetchAttempts,
|
|
115
|
+
lastTraceFetchAt: storedAny.lastTraceFetchAt,
|
|
116
|
+
traceError: storedAny.traceError,
|
|
117
|
+
spans: storedAny.spans,
|
|
118
|
+
connectorProtocol: storedAny.connectorProtocol,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Convert app TestCaseRun format to OpenSearch storage format
|
|
123
|
+
*/
|
|
124
|
+
function toStorageFormat(report) {
|
|
125
|
+
const base = {
|
|
126
|
+
name: report.name,
|
|
127
|
+
description: report.description,
|
|
128
|
+
experimentId: '', // Storage field for benchmarkId (name preserved for data compatibility)
|
|
129
|
+
experimentRunId: '', // Storage field for benchmarkRunId (name preserved for data compatibility)
|
|
130
|
+
testCaseId: report.testCaseId,
|
|
131
|
+
testCaseVersionId: `${report.testCaseId}-v${report.testCaseVersion || 1}`,
|
|
132
|
+
agentId: report.agentKey || report.agentName,
|
|
133
|
+
modelId: report.modelId || report.modelName,
|
|
134
|
+
iteration: 1, // Default to 1, can be overridden
|
|
135
|
+
status: report.status,
|
|
136
|
+
passFailStatus: report.passFailStatus,
|
|
137
|
+
traceId: report.runId,
|
|
138
|
+
tags: [],
|
|
139
|
+
actualOutcomes: [],
|
|
140
|
+
llmJudgeReasoning: report.llmJudgeReasoning,
|
|
141
|
+
// Pass the full dynamic metrics object through. Whitelisting fixed names
|
|
142
|
+
// here used to silently drop any metric the evaluator emitted that wasn't
|
|
143
|
+
// one of the four legacy keys (accuracy/faithfulness/latency_score/
|
|
144
|
+
// trajectory_alignment_score), making per-evaluator scores invisible in
|
|
145
|
+
// listing pages. The OpenSearch index uses dynamic mapping under
|
|
146
|
+
// `metrics`, so arbitrary numeric fields are accepted by the cluster.
|
|
147
|
+
metrics: report.metrics,
|
|
148
|
+
trajectory: report.trajectory,
|
|
149
|
+
rawEvents: report.rawEvents,
|
|
150
|
+
logs: report.logs || report.openSearchLogs,
|
|
151
|
+
improvementStrategies: report.improvementStrategies,
|
|
152
|
+
};
|
|
153
|
+
// Add trace-mode fields if present
|
|
154
|
+
if (report.metricsStatus !== undefined)
|
|
155
|
+
base.metricsStatus = report.metricsStatus;
|
|
156
|
+
if (report.sessionId !== undefined)
|
|
157
|
+
base.sessionId = report.sessionId;
|
|
158
|
+
// Judge inputs: the read mapper (toTestCaseRun) and the server-side save
|
|
159
|
+
// path (server/services/storage/index.ts) both carry evaluatorId +
|
|
160
|
+
// judgeModelId, but this client-side write mapper silently dropped them —
|
|
161
|
+
// so any report persisted through asyncRunStorage.saveReport (e.g. the
|
|
162
|
+
// localStorage→OpenSearch migration) lost which evaluator/judge produced it
|
|
163
|
+
// and could never round-trip them back to the runs list. Both fields are
|
|
164
|
+
// part of the StorageRun type (see services/storage/opensearchClient.ts),
|
|
165
|
+
// so this is a plain typed assignment now — no `as any` needed.
|
|
166
|
+
if (report.evaluatorId !== undefined)
|
|
167
|
+
base.evaluatorId = report.evaluatorId;
|
|
168
|
+
if (report.judgeModelId !== undefined)
|
|
169
|
+
base.judgeModelId = report.judgeModelId;
|
|
170
|
+
if (report.traceFetchAttempts !== undefined)
|
|
171
|
+
base.traceFetchAttempts = report.traceFetchAttempts;
|
|
172
|
+
if (report.lastTraceFetchAt !== undefined)
|
|
173
|
+
base.lastTraceFetchAt = report.lastTraceFetchAt;
|
|
174
|
+
if (report.traceError !== undefined)
|
|
175
|
+
base.traceError = report.traceError;
|
|
176
|
+
if (report.spans !== undefined)
|
|
177
|
+
base.spans = report.spans;
|
|
178
|
+
if (report.connectorProtocol !== undefined)
|
|
179
|
+
base.connectorProtocol = report.connectorProtocol;
|
|
180
|
+
// SDK matcher verdicts: persist alongside the report
|
|
181
|
+
if (report.matcherResults !== undefined)
|
|
182
|
+
base.matcherResults = report.matcherResults;
|
|
183
|
+
return base;
|
|
184
|
+
}
|
|
185
|
+
// Batch-fetch id lists (e.g. GET /runs?ids=<comma-joined>) get chunked into
|
|
186
|
+
// batches of this size so the request URL/header stays well under practical
|
|
187
|
+
// size limits regardless of how many ids are requested — see #431 ("Request
|
|
188
|
+
// Header Fields Too Large") on the comparison page, 4 runs x 400 reports.
|
|
189
|
+
// Shared by getReportsByIds() and getReportSummariesByIds() so the policy
|
|
190
|
+
// stays in one place. (The chunking primitive itself now lives in
|
|
191
|
+
// lib/chunkedFetch.ts, shared with asyncTestCaseStorage's id-scoped lookup.)
|
|
192
|
+
const REPORT_ID_CHUNK_SIZE = 100;
|
|
193
|
+
class AsyncRunStorage {
|
|
194
|
+
// ==================== Core CRUD Operations ====================
|
|
195
|
+
/**
|
|
196
|
+
* Save a report/run
|
|
197
|
+
*/
|
|
198
|
+
async saveReport(report, options) {
|
|
199
|
+
const storageData = toStorageFormat(report);
|
|
200
|
+
// Apply experiment context if provided
|
|
201
|
+
if (options?.experimentId) {
|
|
202
|
+
storageData.experimentId = options.experimentId;
|
|
203
|
+
}
|
|
204
|
+
if (options?.experimentRunId) {
|
|
205
|
+
storageData.experimentRunId = options.experimentRunId;
|
|
206
|
+
}
|
|
207
|
+
if (options?.iteration) {
|
|
208
|
+
storageData.iteration = options.iteration;
|
|
209
|
+
}
|
|
210
|
+
const created = await opensearchRuns.create(storageData);
|
|
211
|
+
return toTestCaseRun(created);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Get run counts grouped by test case ID (single bulk query)
|
|
215
|
+
*/
|
|
216
|
+
async getRunCountsByTestCase() {
|
|
217
|
+
return opensearchRuns.getCountsByTestCase();
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Get all reports for a specific test case
|
|
221
|
+
*/
|
|
222
|
+
async getReportsByTestCase(testCaseId, options = {}) {
|
|
223
|
+
const { limit = 100, offset = 0 } = options;
|
|
224
|
+
const result = await opensearchRuns.getByTestCase(testCaseId, limit, offset);
|
|
225
|
+
return { reports: result.runs.map(toTestCaseRun), total: result.total };
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get all reports across all test cases
|
|
229
|
+
*/
|
|
230
|
+
async getAllReports(options = {}) {
|
|
231
|
+
const { limit = 100, offset = 0, fields } = options;
|
|
232
|
+
// Build query options with optional field projection
|
|
233
|
+
const queryOptions = { size: limit, from: offset };
|
|
234
|
+
if (fields && fields.length > 0) {
|
|
235
|
+
queryOptions._source = fields;
|
|
236
|
+
}
|
|
237
|
+
const result = await opensearchRuns.getAll(queryOptions);
|
|
238
|
+
return result.runs.map(toTestCaseRun);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get a single report by ID
|
|
242
|
+
*/
|
|
243
|
+
async getReportById(reportId) {
|
|
244
|
+
const stored = await opensearchRuns.getById(reportId);
|
|
245
|
+
return stored ? toTestCaseRun(stored) : null;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Batch-fetch reports by id in a SINGLE request (vs N getReportById calls).
|
|
249
|
+
* Returned map is keyed by the requested reportId (the storage doc id).
|
|
250
|
+
*/
|
|
251
|
+
async getReportsByIds(reportIds) {
|
|
252
|
+
if (reportIds.length === 0)
|
|
253
|
+
return {};
|
|
254
|
+
// Chunk into batches so the request stays well under practical
|
|
255
|
+
// URL/header-size limits. A multi-run comparison over a large benchmark
|
|
256
|
+
// can ask for thousands of ids in one call — with 4 runs x 400 reports
|
|
257
|
+
// the single unchunked GET /api/storage/runs?ids=<all> URL blew past the
|
|
258
|
+
// server's header/URL size limit and failed with HTTP 431 (Request
|
|
259
|
+
// Header Fields Too Large), which the comparison page's loader treated
|
|
260
|
+
// as "no reports" and rendered every cell as "Not run".
|
|
261
|
+
//
|
|
262
|
+
// Chunked into at most ceil(N / REPORT_ID_CHUNK_SIZE) requests, fanned
|
|
263
|
+
// out with a capped concurrency (same pattern as getReportSummariesByIds
|
|
264
|
+
// below, and computeBatchMetrics's Promise.all-over-chunks in
|
|
265
|
+
// server/services/metricsService.ts) — never one unbounded request, and
|
|
266
|
+
// never an unbounded burst of parallel ones either.
|
|
267
|
+
//
|
|
268
|
+
// Deliberately no per-chunk try/catch here: a genuine failure (network
|
|
269
|
+
// error, 431, 5xx) must propagate to the caller so it can surface a real
|
|
270
|
+
// error instead of quietly returning a partial/empty map that renders
|
|
271
|
+
// every cell as "Not run".
|
|
272
|
+
const stored = await fetchChunked(reportIds, REPORT_ID_CHUNK_SIZE, chunk => opensearchRuns.getByIds(chunk));
|
|
273
|
+
const out = {};
|
|
274
|
+
for (const s of stored) {
|
|
275
|
+
out[s.id] = toTestCaseRun(s);
|
|
276
|
+
}
|
|
277
|
+
return out;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Lightweight batch fetch: status/verdict fields only (KBs for ~100
|
|
281
|
+
* reports vs MBs for the full documents). Enough for status badges
|
|
282
|
+
* (getResultStatus), pass/fail tallies, annotation counts, and
|
|
283
|
+
* trace-polling recovery (runId/metricsStatus/judgeModelId/modelId).
|
|
284
|
+
* Full reports stay on-demand via getReportById for the selected row.
|
|
285
|
+
*/
|
|
286
|
+
async getReportSummariesByIds(reportIds) {
|
|
287
|
+
if (reportIds.length === 0)
|
|
288
|
+
return {};
|
|
289
|
+
// Stored-doc field names (the projection runs server-side on the stored
|
|
290
|
+
// shape): `traceId` maps to app-level `runId` in toTestCaseRun.
|
|
291
|
+
const fields = [
|
|
292
|
+
'status', 'passFailStatus', 'metricsStatus', 'traceId', 'sessionId',
|
|
293
|
+
'judgeModelId', 'modelId', 'agentId', 'testCaseId', 'createdAt', 'annotations',
|
|
294
|
+
];
|
|
295
|
+
// Chunk to keep the URL well under practical limits for large benchmarks.
|
|
296
|
+
const stored = await fetchChunked(reportIds, REPORT_ID_CHUNK_SIZE, chunk => opensearchRuns.getByIds(chunk, { fields }));
|
|
297
|
+
const out = {};
|
|
298
|
+
for (const s of stored)
|
|
299
|
+
out[s.id] = toTestCaseRun(s);
|
|
300
|
+
return out;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Delete a report and its annotations
|
|
304
|
+
*/
|
|
305
|
+
async deleteReport(reportId) {
|
|
306
|
+
const result = await opensearchRuns.delete(reportId);
|
|
307
|
+
return result.deleted;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Partial update of a report
|
|
311
|
+
* Used for updating trace-mode runs after traces become available
|
|
312
|
+
*/
|
|
313
|
+
async updateReport(reportId, updates) {
|
|
314
|
+
// Convert app format to storage format for the updates
|
|
315
|
+
const storageUpdates = {};
|
|
316
|
+
// Map fields from EvaluationReport to StorageRun format
|
|
317
|
+
if (updates.status !== undefined)
|
|
318
|
+
storageUpdates.status = updates.status;
|
|
319
|
+
// `passFailStatus` accepts an explicit `null` to clear a stale verdict
|
|
320
|
+
// on a run that just transitioned to `metricsStatus: 'error'` (issue
|
|
321
|
+
// #242). Without this, `buildEvaluatorErrorPatch`'s `passFailStatus: null`
|
|
322
|
+
// would still be filtered out by a strict `!== undefined` check and the
|
|
323
|
+
// persisted document would keep its previous 'passed'/'failed' value.
|
|
324
|
+
if (updates.passFailStatus !== undefined)
|
|
325
|
+
storageUpdates.passFailStatus = updates.passFailStatus;
|
|
326
|
+
if (updates.llmJudgeReasoning !== undefined)
|
|
327
|
+
storageUpdates.llmJudgeReasoning = updates.llmJudgeReasoning;
|
|
328
|
+
if (updates.trajectory !== undefined)
|
|
329
|
+
storageUpdates.trajectory = updates.trajectory;
|
|
330
|
+
if (updates.rawEvents !== undefined)
|
|
331
|
+
storageUpdates.rawEvents = updates.rawEvents;
|
|
332
|
+
if (updates.logs !== undefined)
|
|
333
|
+
storageUpdates.logs = updates.logs;
|
|
334
|
+
if (updates.runId !== undefined)
|
|
335
|
+
storageUpdates.traceId = updates.runId;
|
|
336
|
+
if (updates.sessionId !== undefined)
|
|
337
|
+
storageUpdates.sessionId = updates.sessionId;
|
|
338
|
+
if (updates.improvementStrategies !== undefined)
|
|
339
|
+
storageUpdates.improvementStrategies = updates.improvementStrategies;
|
|
340
|
+
if (updates.matcherResults !== undefined)
|
|
341
|
+
storageUpdates.matcherResults = updates.matcherResults;
|
|
342
|
+
// Map metrics
|
|
343
|
+
if (updates.metrics) {
|
|
344
|
+
storageUpdates.metrics = {
|
|
345
|
+
accuracy: updates.metrics.accuracy,
|
|
346
|
+
faithfulness: updates.metrics.faithfulness,
|
|
347
|
+
latency_score: updates.metrics.latency_score,
|
|
348
|
+
trajectory_alignment_score: updates.metrics.trajectory_alignment_score,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
// Pass through trace-mode specific fields directly
|
|
352
|
+
if (updates.metricsStatus !== undefined)
|
|
353
|
+
storageUpdates.metricsStatus = updates.metricsStatus;
|
|
354
|
+
if (updates.traceFetchAttempts !== undefined)
|
|
355
|
+
storageUpdates.traceFetchAttempts = updates.traceFetchAttempts;
|
|
356
|
+
if (updates.lastTraceFetchAt !== undefined)
|
|
357
|
+
storageUpdates.lastTraceFetchAt = updates.lastTraceFetchAt;
|
|
358
|
+
if (updates.traceError !== undefined)
|
|
359
|
+
storageUpdates.traceError = updates.traceError;
|
|
360
|
+
if (updates.spans !== undefined)
|
|
361
|
+
storageUpdates.spans = updates.spans;
|
|
362
|
+
const updated = await opensearchRuns.partialUpdate(reportId, storageUpdates);
|
|
363
|
+
return toTestCaseRun(updated);
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Get total count of reports
|
|
367
|
+
*/
|
|
368
|
+
async getReportCount() {
|
|
369
|
+
const result = await opensearchRuns.getAll({ size: 0 });
|
|
370
|
+
return result.total;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Get report count for a specific test case
|
|
374
|
+
*/
|
|
375
|
+
async getReportCountByTestCase(testCaseId) {
|
|
376
|
+
const result = await opensearchRuns.getByTestCase(testCaseId, 0);
|
|
377
|
+
return result.total;
|
|
378
|
+
}
|
|
379
|
+
// ==================== Benchmark-Specific Operations ====================
|
|
380
|
+
/**
|
|
381
|
+
* Get runs for a benchmark
|
|
382
|
+
*/
|
|
383
|
+
async getByBenchmark(benchmarkId, size) {
|
|
384
|
+
const stored = await opensearchRuns.getByBenchmark(benchmarkId, size);
|
|
385
|
+
return stored.map(toTestCaseRun);
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Get runs for a specific benchmark run config
|
|
389
|
+
*/
|
|
390
|
+
async getByBenchmarkRun(benchmarkId, runId, size) {
|
|
391
|
+
const stored = await opensearchRuns.getByBenchmarkRun(benchmarkId, runId, size);
|
|
392
|
+
return stored.map(toTestCaseRun);
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Get all iterations for a test case in a benchmark
|
|
396
|
+
*/
|
|
397
|
+
async getIterations(benchmarkId, testCaseId, benchmarkRunId) {
|
|
398
|
+
const result = await opensearchRuns.getIterations(benchmarkId, testCaseId, benchmarkRunId);
|
|
399
|
+
return {
|
|
400
|
+
runs: result.runs.map(toTestCaseRun),
|
|
401
|
+
total: result.total,
|
|
402
|
+
maxIteration: result.maxIteration,
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
// Backwards compatibility aliases
|
|
406
|
+
/** @deprecated Use getByBenchmark instead */
|
|
407
|
+
async getByExperiment(experimentId, size) {
|
|
408
|
+
return this.getByBenchmark(experimentId, size);
|
|
409
|
+
}
|
|
410
|
+
/** @deprecated Use getByBenchmarkRun instead */
|
|
411
|
+
async getByExperimentRun(experimentId, runId, size) {
|
|
412
|
+
return this.getByBenchmarkRun(experimentId, runId, size);
|
|
413
|
+
}
|
|
414
|
+
// ==================== Annotation Operations ====================
|
|
415
|
+
/**
|
|
416
|
+
* Add an annotation to a report
|
|
417
|
+
*/
|
|
418
|
+
async addAnnotation(reportId, annotation) {
|
|
419
|
+
const created = await opensearchRuns.addAnnotation(reportId, {
|
|
420
|
+
text: annotation.text,
|
|
421
|
+
tags: annotation.tags,
|
|
422
|
+
author: annotation.author,
|
|
423
|
+
});
|
|
424
|
+
return {
|
|
425
|
+
id: created.id,
|
|
426
|
+
reportId,
|
|
427
|
+
text: created.text,
|
|
428
|
+
timestamp: created.createdAt,
|
|
429
|
+
tags: created.tags,
|
|
430
|
+
author: created.author,
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Update an existing annotation
|
|
435
|
+
*/
|
|
436
|
+
async updateAnnotation(reportId, annotationId, updates) {
|
|
437
|
+
try {
|
|
438
|
+
await opensearchRuns.updateAnnotation(reportId, annotationId, {
|
|
439
|
+
text: updates.text,
|
|
440
|
+
tags: updates.tags,
|
|
441
|
+
});
|
|
442
|
+
return true;
|
|
443
|
+
}
|
|
444
|
+
catch {
|
|
445
|
+
return false;
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Delete an annotation
|
|
450
|
+
*/
|
|
451
|
+
async deleteAnnotation(reportId, annotationId) {
|
|
452
|
+
const result = await opensearchRuns.deleteAnnotation(reportId, annotationId);
|
|
453
|
+
return result.deleted;
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Get all annotations for a report
|
|
457
|
+
*/
|
|
458
|
+
async getAnnotationsByReport(reportId) {
|
|
459
|
+
const report = await opensearchRuns.getById(reportId);
|
|
460
|
+
if (!report || !report.annotations)
|
|
461
|
+
return [];
|
|
462
|
+
return report.annotations.map(ann => ({
|
|
463
|
+
id: ann.id,
|
|
464
|
+
reportId,
|
|
465
|
+
text: ann.text,
|
|
466
|
+
timestamp: ann.createdAt,
|
|
467
|
+
tags: ann.tags,
|
|
468
|
+
author: ann.author,
|
|
469
|
+
}));
|
|
470
|
+
}
|
|
471
|
+
// ==================== Search and Filter ====================
|
|
472
|
+
/**
|
|
473
|
+
* Search reports with complex filtering
|
|
474
|
+
*/
|
|
475
|
+
async searchReports(query) {
|
|
476
|
+
const filters = {};
|
|
477
|
+
if (query.testCaseIds && query.testCaseIds.length > 0) {
|
|
478
|
+
// Note: OpenSearch search supports single testCaseId, would need to loop
|
|
479
|
+
filters.testCaseId = query.testCaseIds[0];
|
|
480
|
+
}
|
|
481
|
+
if (query.dateRange) {
|
|
482
|
+
filters.dateRange = query.dateRange;
|
|
483
|
+
}
|
|
484
|
+
if (query.status && query.status.length > 0) {
|
|
485
|
+
filters.status = query.status[0];
|
|
486
|
+
}
|
|
487
|
+
const result = await opensearchRuns.search(filters);
|
|
488
|
+
let reports = result.runs.map(toTestCaseRun);
|
|
489
|
+
// Apply additional client-side filters not supported by backend
|
|
490
|
+
if (query.agentNames && query.agentNames.length > 0) {
|
|
491
|
+
reports = reports.filter(r => query.agentNames.includes(r.agentName));
|
|
492
|
+
}
|
|
493
|
+
if (query.modelNames && query.modelNames.length > 0) {
|
|
494
|
+
reports = reports.filter(r => query.modelNames.includes(r.modelName));
|
|
495
|
+
}
|
|
496
|
+
if (query.minAccuracy !== undefined) {
|
|
497
|
+
reports = reports.filter(r => r.metrics.accuracy >= query.minAccuracy);
|
|
498
|
+
}
|
|
499
|
+
return reports;
|
|
500
|
+
}
|
|
501
|
+
// ==================== Utility Functions ====================
|
|
502
|
+
/**
|
|
503
|
+
* Generate a unique report ID
|
|
504
|
+
*/
|
|
505
|
+
generateReportId() {
|
|
506
|
+
return `run-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* Bulk create runs (for migration)
|
|
510
|
+
*/
|
|
511
|
+
async bulkCreate(runs) {
|
|
512
|
+
const storageData = runs.map(run => ({
|
|
513
|
+
...toStorageFormat(run),
|
|
514
|
+
id: run.id,
|
|
515
|
+
createdAt: run.timestamp,
|
|
516
|
+
}));
|
|
517
|
+
return opensearchRuns.bulkCreate(storageData);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
// Export singleton instance
|
|
521
|
+
export const asyncRunStorage = new AsyncRunStorage();
|
|
522
|
+
// Alias for backwards compatibility
|
|
523
|
+
export const asyncReportStorage = asyncRunStorage;
|
|
524
|
+
//# sourceMappingURL=asyncRunStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asyncRunStorage.js","sourceRoot":"","sources":["../../../../services/storage/asyncRunStorage.ts"],"names":[],"mappings":"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"}
|