@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,217 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { ExportResultCode } from '@opentelemetry/core';
|
|
6
|
+
import { SpanKind, SpanStatusCode } from '@opentelemetry/api';
|
|
7
|
+
import { Client } from '@opensearch-project/opensearch';
|
|
8
|
+
/**
|
|
9
|
+
* Convert OTel HrTime [seconds, nanoseconds] to ISO date string
|
|
10
|
+
*/
|
|
11
|
+
function hrTimeToDate(hrTime) {
|
|
12
|
+
const ms = hrTime[0] * 1000 + hrTime[1] / 1_000_000;
|
|
13
|
+
return new Date(ms).toISOString();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Convert OTel HrTime to nanoseconds
|
|
17
|
+
*/
|
|
18
|
+
function hrTimeToNanos(hrTime) {
|
|
19
|
+
return hrTime[0] * 1_000_000_000 + hrTime[1];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Convert duration between two HrTimes to nanoseconds
|
|
23
|
+
*/
|
|
24
|
+
function durationNanos(start, end) {
|
|
25
|
+
return hrTimeToNanos(end) - hrTimeToNanos(start);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Map OTel SpanKind to OSIS string format
|
|
29
|
+
*/
|
|
30
|
+
function spanKindToString(kind) {
|
|
31
|
+
switch (kind) {
|
|
32
|
+
case SpanKind.INTERNAL: return 'SPAN_KIND_INTERNAL';
|
|
33
|
+
case SpanKind.SERVER: return 'SPAN_KIND_SERVER';
|
|
34
|
+
case SpanKind.CLIENT: return 'SPAN_KIND_CLIENT';
|
|
35
|
+
case SpanKind.PRODUCER: return 'SPAN_KIND_PRODUCER';
|
|
36
|
+
case SpanKind.CONSUMER: return 'SPAN_KIND_CONSUMER';
|
|
37
|
+
default: return 'SPAN_KIND_INTERNAL';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Map OTel SpanStatusCode to OSIS integer
|
|
42
|
+
*/
|
|
43
|
+
function statusCodeToInt(code) {
|
|
44
|
+
switch (code) {
|
|
45
|
+
case SpanStatusCode.UNSET: return 0;
|
|
46
|
+
case SpanStatusCode.OK: return 1;
|
|
47
|
+
case SpanStatusCode.ERROR: return 2;
|
|
48
|
+
default: return 0;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Convert a ReadableSpan to an OSIS-compatible OpenSearch document
|
|
53
|
+
*/
|
|
54
|
+
function spanToDocument(span) {
|
|
55
|
+
const doc = {
|
|
56
|
+
traceId: span.spanContext().traceId,
|
|
57
|
+
spanId: span.spanContext().spanId,
|
|
58
|
+
parentSpanId: (span.parentSpanContext?.spanId && span.parentSpanContext.spanId !== '0000000000000000')
|
|
59
|
+
? span.parentSpanContext.spanId : '',
|
|
60
|
+
name: span.name,
|
|
61
|
+
kind: spanKindToString(span.kind),
|
|
62
|
+
startTime: hrTimeToDate(span.startTime),
|
|
63
|
+
endTime: hrTimeToDate(span.endTime),
|
|
64
|
+
durationInNanos: durationNanos(span.startTime, span.endTime),
|
|
65
|
+
status: {
|
|
66
|
+
code: statusCodeToInt(span.status.code),
|
|
67
|
+
message: span.status.message || '',
|
|
68
|
+
},
|
|
69
|
+
traceState: '',
|
|
70
|
+
droppedAttributesCount: span.droppedAttributesCount,
|
|
71
|
+
droppedEventsCount: span.droppedEventsCount,
|
|
72
|
+
droppedLinksCount: span.droppedLinksCount,
|
|
73
|
+
};
|
|
74
|
+
// Span attributes: nested object keyed by literal dotted OTel names
|
|
75
|
+
// (Data Prepper trace-analytics-plain-raw / OTEL-faithful schema).
|
|
76
|
+
const spanAttributes = {};
|
|
77
|
+
for (const [key, value] of Object.entries(span.attributes)) {
|
|
78
|
+
if (value !== undefined) {
|
|
79
|
+
spanAttributes[key] = value;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
doc.attributes = spanAttributes;
|
|
83
|
+
// Resource attributes: nested resource.attributes object, literal dotted keys.
|
|
84
|
+
const resource = span.resource;
|
|
85
|
+
const resourceAttributes = {};
|
|
86
|
+
if (resource?.attributes) {
|
|
87
|
+
for (const [key, value] of Object.entries(resource.attributes)) {
|
|
88
|
+
if (value !== undefined) {
|
|
89
|
+
resourceAttributes[key] = value;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
doc.resource = { attributes: resourceAttributes };
|
|
94
|
+
// Set serviceName from resource
|
|
95
|
+
const serviceName = resource?.attributes?.['service.name'] || 'unknown';
|
|
96
|
+
doc.serviceName = serviceName;
|
|
97
|
+
// Instrumentation scope — nested object (runtime property is instrumentationScope).
|
|
98
|
+
const scope = span.instrumentationScope ?? span.instrumentationLibrary ?? {};
|
|
99
|
+
doc.instrumentationScope = {
|
|
100
|
+
name: scope.name || '',
|
|
101
|
+
...(scope.version ? { version: scope.version } : {}),
|
|
102
|
+
};
|
|
103
|
+
// Events (nested array; attribute keys are literal dotted OTel names)
|
|
104
|
+
if (span.events.length > 0) {
|
|
105
|
+
doc.events = span.events.map(event => {
|
|
106
|
+
const eventDoc = {
|
|
107
|
+
name: event.name,
|
|
108
|
+
time: hrTimeToDate(event.time),
|
|
109
|
+
droppedAttributesCount: event.droppedAttributesCount || 0,
|
|
110
|
+
};
|
|
111
|
+
if (event.attributes) {
|
|
112
|
+
const attrs = {};
|
|
113
|
+
for (const [key, value] of Object.entries(event.attributes)) {
|
|
114
|
+
if (value !== undefined) {
|
|
115
|
+
attrs[key] = value;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
eventDoc.attributes = attrs;
|
|
119
|
+
}
|
|
120
|
+
return eventDoc;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
doc.events = [];
|
|
125
|
+
}
|
|
126
|
+
// Links
|
|
127
|
+
if (span.links.length > 0) {
|
|
128
|
+
doc.links = span.links.map(link => ({
|
|
129
|
+
traceId: link.context.traceId,
|
|
130
|
+
spanId: link.context.spanId,
|
|
131
|
+
traceState: link.context.traceState?.serialize() || '',
|
|
132
|
+
attributes: link.attributes || {},
|
|
133
|
+
droppedAttributesCount: link.droppedAttributesCount || 0,
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
doc.links = [];
|
|
138
|
+
}
|
|
139
|
+
// traceGroupFields (populated for root spans)
|
|
140
|
+
const hasRealParent = span.parentSpanContext?.spanId && span.parentSpanContext.spanId !== '0000000000000000';
|
|
141
|
+
if (!hasRealParent) {
|
|
142
|
+
doc.traceGroup = span.name;
|
|
143
|
+
doc.traceGroupFields = {
|
|
144
|
+
endTime: hrTimeToDate(span.endTime),
|
|
145
|
+
durationInNanos: durationNanos(span.startTime, span.endTime),
|
|
146
|
+
statusCode: statusCodeToInt(span.status.code),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return doc;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Custom SpanExporter that writes directly to OpenSearch.
|
|
153
|
+
*
|
|
154
|
+
* Formats spans in OSIS-compatible format so eval spans co-exist
|
|
155
|
+
* with agent spans in the same otel-v1-apm-span-* indices.
|
|
156
|
+
*/
|
|
157
|
+
export class OpenSearchSpanExporter {
|
|
158
|
+
constructor(config) {
|
|
159
|
+
this.shutdownRequested = false;
|
|
160
|
+
const auth = config.username && config.password
|
|
161
|
+
? `${config.username}:${config.password}`
|
|
162
|
+
: undefined;
|
|
163
|
+
this.client = new Client({
|
|
164
|
+
node: config.endpoint,
|
|
165
|
+
auth: auth ? { username: config.username, password: config.password } : undefined,
|
|
166
|
+
ssl: {
|
|
167
|
+
rejectUnauthorized: config.tlsSkipVerify !== true,
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
this.indexName = config.indexName || 'otel-v1-apm-span-000001';
|
|
171
|
+
console.log(`[Telemetry] OpenSearch exporter initialized → ${config.endpoint} (index: ${this.indexName})`);
|
|
172
|
+
}
|
|
173
|
+
export(spans, resultCallback) {
|
|
174
|
+
if (this.shutdownRequested) {
|
|
175
|
+
resultCallback({ code: ExportResultCode.FAILED });
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
this._export(spans)
|
|
179
|
+
.then(() => resultCallback({ code: ExportResultCode.SUCCESS }))
|
|
180
|
+
.catch((err) => {
|
|
181
|
+
console.error('[Telemetry] OpenSearch export failed:', err instanceof Error ? err.message : err);
|
|
182
|
+
resultCallback({ code: ExportResultCode.FAILED });
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
async _export(spans) {
|
|
186
|
+
if (spans.length === 0)
|
|
187
|
+
return;
|
|
188
|
+
// Use bulk API for efficiency
|
|
189
|
+
const body = [];
|
|
190
|
+
for (const span of spans) {
|
|
191
|
+
const doc = spanToDocument(span);
|
|
192
|
+
const docId = `${doc.traceId}/${doc.spanId}`;
|
|
193
|
+
body.push({ index: { _index: this.indexName, _id: docId } });
|
|
194
|
+
body.push(doc);
|
|
195
|
+
}
|
|
196
|
+
const response = await this.client.bulk({ body });
|
|
197
|
+
if (response.body.errors) {
|
|
198
|
+
const errors = response.body.items
|
|
199
|
+
.filter((item) => item.index?.error)
|
|
200
|
+
.map((item) => `${item.index.error.type}: ${item.index.error.reason}`);
|
|
201
|
+
if (errors.length > 0) {
|
|
202
|
+
console.warn(`[Telemetry] OpenSearch bulk write had ${errors.length} error(s):`, errors[0]);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
console.log(`[Telemetry] Exported ${spans.length} span(s) to OpenSearch`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
async shutdown() {
|
|
210
|
+
this.shutdownRequested = true;
|
|
211
|
+
await this.client.close();
|
|
212
|
+
}
|
|
213
|
+
async forceFlush() {
|
|
214
|
+
// No buffering — exports are immediate via bulk API
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=opensearchExporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opensearchExporter.js","sourceRoot":"","sources":["../../../telemetry/opensearchExporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OTel TracerProvider management for evaluation telemetry.
|
|
3
|
+
*
|
|
4
|
+
* Manages a singleton TracerProvider that exports evaluation spans
|
|
5
|
+
* via OTLP/HTTP to a collector, or directly to OpenSearch when an
|
|
6
|
+
* observability data source is configured.
|
|
7
|
+
*/
|
|
8
|
+
import { type Tracer } from '@opentelemetry/api';
|
|
9
|
+
import { type OpenSearchExporterConfig } from './opensearchExporter.js';
|
|
10
|
+
/**
|
|
11
|
+
* Configuration for evaluation telemetry
|
|
12
|
+
*/
|
|
13
|
+
export interface EvalTelemetryConfig {
|
|
14
|
+
/** Whether evaluation telemetry is enabled */
|
|
15
|
+
enabled: boolean;
|
|
16
|
+
/** OTLP exporter endpoint (e.g., http://localhost:4318/v1/traces) */
|
|
17
|
+
exporterEndpoint: string;
|
|
18
|
+
/** Optional headers for the OTLP exporter (e.g., auth) */
|
|
19
|
+
exporterHeaders?: Record<string, string>;
|
|
20
|
+
/** Service name for resource attributes */
|
|
21
|
+
serviceName?: string;
|
|
22
|
+
/** OpenSearch direct export config (derived from observability data source) */
|
|
23
|
+
opensearch?: OpenSearchExporterConfig;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolve telemetry config from environment variables and optional user config
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveEvalTelemetryConfig(userConfig?: Partial<EvalTelemetryConfig>): EvalTelemetryConfig;
|
|
29
|
+
/**
|
|
30
|
+
* Initialize the evaluation TracerProvider.
|
|
31
|
+
* Safe to call multiple times — subsequent calls are no-ops.
|
|
32
|
+
*
|
|
33
|
+
* When an OpenSearch config is provided (from observability data source),
|
|
34
|
+
* spans are written directly to OpenSearch in OSIS-compatible format.
|
|
35
|
+
* Otherwise, falls back to OTLP/HTTP exporter.
|
|
36
|
+
*/
|
|
37
|
+
export declare function initEvalTracerProvider(config: EvalTelemetryConfig): void;
|
|
38
|
+
/**
|
|
39
|
+
* Get the evaluation tracer. Returns a no-op tracer if telemetry is disabled.
|
|
40
|
+
*/
|
|
41
|
+
export declare function getEvalTracer(): Tracer;
|
|
42
|
+
/**
|
|
43
|
+
* Check if evaluation telemetry is enabled
|
|
44
|
+
*/
|
|
45
|
+
export declare function isEvalTelemetryEnabled(): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Force-flush any buffered spans to the exporter.
|
|
48
|
+
* Call after emitting spans to ensure they are exported promptly.
|
|
49
|
+
*/
|
|
50
|
+
export declare function flushEvalTracer(): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Flush pending spans and shut down the TracerProvider.
|
|
53
|
+
*/
|
|
54
|
+
export declare function shutdownEvalTracer(): Promise<void>;
|
|
55
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../telemetry/provider.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AAEH,OAAO,EAAS,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAKxD,OAAO,EAA0B,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEhG;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,gBAAgB,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,wBAAwB,CAAC;CACvC;AAKD;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,mBAAmB,CAwBzG;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAqDxE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAQrD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAOxD"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* OTel TracerProvider management for evaluation telemetry.
|
|
7
|
+
*
|
|
8
|
+
* Manages a singleton TracerProvider that exports evaluation spans
|
|
9
|
+
* via OTLP/HTTP to a collector, or directly to OpenSearch when an
|
|
10
|
+
* observability data source is configured.
|
|
11
|
+
*/
|
|
12
|
+
import { trace } from '@opentelemetry/api';
|
|
13
|
+
import { NodeTracerProvider, BatchSpanProcessor, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-node';
|
|
14
|
+
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
|
15
|
+
import { resourceFromAttributes } from '@opentelemetry/resources';
|
|
16
|
+
import { EVAL_TRACER_NAME } from './constants.js';
|
|
17
|
+
import { OpenSearchSpanExporter } from './opensearchExporter.js';
|
|
18
|
+
let provider = null;
|
|
19
|
+
let telemetryEnabled = false;
|
|
20
|
+
/**
|
|
21
|
+
* Resolve telemetry config from environment variables and optional user config
|
|
22
|
+
*/
|
|
23
|
+
export function resolveEvalTelemetryConfig(userConfig) {
|
|
24
|
+
const enabled = userConfig?.enabled
|
|
25
|
+
?? process.env.OTEL_EVAL_ENABLED === 'true';
|
|
26
|
+
const exporterEndpoint = userConfig?.exporterEndpoint
|
|
27
|
+
?? process.env.OTEL_EVAL_EXPORTER_ENDPOINT
|
|
28
|
+
?? 'http://localhost:4318/v1/traces';
|
|
29
|
+
let exporterHeaders = userConfig?.exporterHeaders;
|
|
30
|
+
if (!exporterHeaders && process.env.OTEL_EVAL_EXPORTER_HEADERS) {
|
|
31
|
+
try {
|
|
32
|
+
exporterHeaders = JSON.parse(process.env.OTEL_EVAL_EXPORTER_HEADERS);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
console.warn('[Telemetry] Failed to parse OTEL_EVAL_EXPORTER_HEADERS as JSON');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Use a dedicated env var for eval service name — do NOT fall back to
|
|
39
|
+
// OTEL_SERVICE_NAME which belongs to the agent's own telemetry (e.g. claude-code-agent).
|
|
40
|
+
const serviceName = userConfig?.serviceName
|
|
41
|
+
?? process.env.OTEL_EVAL_SERVICE_NAME
|
|
42
|
+
?? 'agent-health';
|
|
43
|
+
return { enabled, exporterEndpoint, exporterHeaders, serviceName, opensearch: userConfig?.opensearch };
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Initialize the evaluation TracerProvider.
|
|
47
|
+
* Safe to call multiple times — subsequent calls are no-ops.
|
|
48
|
+
*
|
|
49
|
+
* When an OpenSearch config is provided (from observability data source),
|
|
50
|
+
* spans are written directly to OpenSearch in OSIS-compatible format.
|
|
51
|
+
* Otherwise, falls back to OTLP/HTTP exporter.
|
|
52
|
+
*/
|
|
53
|
+
export function initEvalTracerProvider(config) {
|
|
54
|
+
if (provider) {
|
|
55
|
+
return; // Already initialized
|
|
56
|
+
}
|
|
57
|
+
if (!config.enabled) {
|
|
58
|
+
telemetryEnabled = false;
|
|
59
|
+
console.log('[Telemetry] Evaluation telemetry disabled (OTEL_EVAL_ENABLED != true)');
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const resource = resourceFromAttributes({
|
|
63
|
+
'service.name': config.serviceName ?? 'agent-health',
|
|
64
|
+
'telemetry.sdk.name': 'agent-health',
|
|
65
|
+
'telemetry.sdk.language': 'nodejs',
|
|
66
|
+
});
|
|
67
|
+
// Choose exporter priority:
|
|
68
|
+
// 1. OTLP/HTTP when exporterEndpoint is explicitly configured (e.g., OSIS pipeline)
|
|
69
|
+
// 2. OpenSearch direct when observability data source is configured
|
|
70
|
+
// 3. OTLP/HTTP with default endpoint as last resort
|
|
71
|
+
const spanProcessors = [];
|
|
72
|
+
const hasExplicitOtlpEndpoint = config.exporterEndpoint !== 'http://localhost:4318/v1/traces';
|
|
73
|
+
if (hasExplicitOtlpEndpoint) {
|
|
74
|
+
// User explicitly configured an OTLP endpoint (e.g., OSIS pipeline) — prefer it
|
|
75
|
+
const otlpExporter = new OTLPTraceExporter({
|
|
76
|
+
url: config.exporterEndpoint,
|
|
77
|
+
headers: config.exporterHeaders,
|
|
78
|
+
});
|
|
79
|
+
spanProcessors.push(new BatchSpanProcessor(otlpExporter));
|
|
80
|
+
console.log(`[Telemetry] Evaluation telemetry enabled → OTLP (${config.exporterEndpoint})`);
|
|
81
|
+
}
|
|
82
|
+
else if (config.opensearch) {
|
|
83
|
+
const osExporter = new OpenSearchSpanExporter(config.opensearch);
|
|
84
|
+
// Use SimpleSpanProcessor for immediate export (eval spans are infrequent)
|
|
85
|
+
spanProcessors.push(new SimpleSpanProcessor(osExporter));
|
|
86
|
+
console.log(`[Telemetry] Evaluation telemetry enabled → OpenSearch direct (${config.opensearch.endpoint})`);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
const otlpExporter = new OTLPTraceExporter({
|
|
90
|
+
url: config.exporterEndpoint,
|
|
91
|
+
headers: config.exporterHeaders,
|
|
92
|
+
});
|
|
93
|
+
spanProcessors.push(new BatchSpanProcessor(otlpExporter));
|
|
94
|
+
console.log(`[Telemetry] Evaluation telemetry enabled → OTLP (${config.exporterEndpoint})`);
|
|
95
|
+
}
|
|
96
|
+
provider = new NodeTracerProvider({
|
|
97
|
+
resource,
|
|
98
|
+
spanProcessors,
|
|
99
|
+
});
|
|
100
|
+
provider.register();
|
|
101
|
+
telemetryEnabled = true;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get the evaluation tracer. Returns a no-op tracer if telemetry is disabled.
|
|
105
|
+
*/
|
|
106
|
+
export function getEvalTracer() {
|
|
107
|
+
return trace.getTracer(EVAL_TRACER_NAME);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Check if evaluation telemetry is enabled
|
|
111
|
+
*/
|
|
112
|
+
export function isEvalTelemetryEnabled() {
|
|
113
|
+
return telemetryEnabled;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Force-flush any buffered spans to the exporter.
|
|
117
|
+
* Call after emitting spans to ensure they are exported promptly.
|
|
118
|
+
*/
|
|
119
|
+
export async function flushEvalTracer() {
|
|
120
|
+
if (provider) {
|
|
121
|
+
try {
|
|
122
|
+
await provider.forceFlush();
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
console.warn('[Telemetry] forceFlush failed:', err instanceof Error ? err.message : err);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Flush pending spans and shut down the TracerProvider.
|
|
131
|
+
*/
|
|
132
|
+
export async function shutdownEvalTracer() {
|
|
133
|
+
if (provider) {
|
|
134
|
+
await provider.shutdown();
|
|
135
|
+
provider = null;
|
|
136
|
+
telemetryEnabled = false;
|
|
137
|
+
console.log('[Telemetry] Evaluation telemetry shut down');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../telemetry/provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAe,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAC5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAiC,MAAM,yBAAyB,CAAC;AAkBhG,IAAI,QAAQ,GAA8B,IAAI,CAAC;AAC/C,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAE7B;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,UAAyC;IAClF,MAAM,OAAO,GAAG,UAAU,EAAE,OAAO;WAC9B,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM,CAAC;IAE9C,MAAM,gBAAgB,GAAG,UAAU,EAAE,gBAAgB;WAChD,OAAO,CAAC,GAAG,CAAC,2BAA2B;WACvC,iCAAiC,CAAC;IAEvC,IAAI,eAAe,GAAG,UAAU,EAAE,eAAe,CAAC;IAClD,IAAI,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,yFAAyF;IACzF,MAAM,WAAW,GAAG,UAAU,EAAE,WAAW;WACtC,OAAO,CAAC,GAAG,CAAC,sBAAsB;WAClC,cAAc,CAAC;IAEpB,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AACzG,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA2B;IAChE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,sBAAsB;IAChC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,gBAAgB,GAAG,KAAK,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QACrF,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC;QACtC,cAAc,EAAE,MAAM,CAAC,WAAW,IAAI,cAAc;QACpD,oBAAoB,EAAE,cAAc;QACpC,wBAAwB,EAAE,QAAQ;KACnC,CAAC,CAAC;IAEH,4BAA4B;IAC5B,sFAAsF;IACtF,sEAAsE;IACtE,sDAAsD;IACtD,MAAM,cAAc,GAAG,EAAE,CAAC;IAC1B,MAAM,uBAAuB,GAAG,MAAM,CAAC,gBAAgB,KAAK,iCAAiC,CAAC;IAE9F,IAAI,uBAAuB,EAAE,CAAC;QAC5B,gFAAgF;QAChF,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC;YACzC,GAAG,EAAE,MAAM,CAAC,gBAAgB;YAC5B,OAAO,EAAE,MAAM,CAAC,eAAe;SAChC,CAAC,CAAC;QACH,cAAc,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,oDAAoD,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC9F,CAAC;SAAM,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,IAAI,sBAAsB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjE,2EAA2E;QAC3E,cAAc,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,iEAAiE,MAAM,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC9G,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC;YACzC,GAAG,EAAE,MAAM,CAAC,gBAAgB;YAC5B,OAAO,EAAE,MAAM,CAAC,eAAe;SAChC,CAAC,CAAC;QACH,cAAc,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,oDAAoD,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC9F,CAAC;IAED,QAAQ,GAAG,IAAI,kBAAkB,CAAC;QAChC,QAAQ;QACR,cAAc;KACf,CAAC,CAAC;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAEpB,gBAAgB,GAAG,IAAI,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC1B,QAAQ,GAAG,IAAI,CAAC;QAChB,gBAAgB,GAAG,KAAK,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type DifficultyLabel = 'Easy' | 'Medium' | 'Hard';
|
|
2
|
+
/**
|
|
3
|
+
* Extract the category from a labels array, or undefined when not present.
|
|
4
|
+
* If multiple `category:` labels are present, the first one wins.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getCategoryFromLabels(labels?: string[]): string | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* Extract the difficulty from a labels array, or undefined when not present.
|
|
9
|
+
* Values are normalized to the canonical `Easy | Medium | Hard` form when
|
|
10
|
+
* possible; non-canonical values are returned as-is.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getDifficultyFromLabels(labels?: string[]): DifficultyLabel | string | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Extract the subcategory from a labels array, or undefined when not present.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getSubcategoryFromLabels(labels?: string[]): string | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Build a labels array from the legacy top-level `category` / `difficulty`
|
|
19
|
+
* fields, preserving any existing labels and refusing to add a duplicate
|
|
20
|
+
* facet (e.g. won't add `category:RCA` if a `category:` label is already
|
|
21
|
+
* present).
|
|
22
|
+
*/
|
|
23
|
+
export declare function migrateLegacyFieldsToLabels(input: {
|
|
24
|
+
category?: string;
|
|
25
|
+
difficulty?: string;
|
|
26
|
+
subcategory?: string;
|
|
27
|
+
labels?: string[];
|
|
28
|
+
}): string[];
|
|
29
|
+
/**
|
|
30
|
+
* Returns true when the labels array contains a structured facet for the
|
|
31
|
+
* given prefix. Useful in migrations to avoid double-applying.
|
|
32
|
+
*/
|
|
33
|
+
export declare function hasLabelPrefix(labels: string[] | undefined, prefix: string): boolean;
|
|
34
|
+
//# sourceMappingURL=testCaseLabels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testCaseLabels.d.ts","sourceRoot":"","sources":["../../testCaseLabels.ts"],"names":[],"mappings":"AAwBA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAI3E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,eAAe,GAAG,MAAM,GAAG,SAAS,CAU/F;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAI9E;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,GAAG,MAAM,EAAE,CAYX;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAIpF"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Helpers for the unified `labels` tagging system that replaces the legacy
|
|
7
|
+
* top-level `category` and `difficulty` fields on TestCase.
|
|
8
|
+
*
|
|
9
|
+
* Convention: structured labels use a `prefix:value` form so we can extract
|
|
10
|
+
* specific facets (e.g. category, difficulty) when the UI needs them.
|
|
11
|
+
*
|
|
12
|
+
* 'category:RCA'
|
|
13
|
+
* 'difficulty:Medium'
|
|
14
|
+
* 'team:platform'
|
|
15
|
+
* 'tier:p0'
|
|
16
|
+
*
|
|
17
|
+
* Free-form labels without a prefix are also allowed for human tagging.
|
|
18
|
+
*/
|
|
19
|
+
const CATEGORY_PREFIX = 'category:';
|
|
20
|
+
const DIFFICULTY_PREFIX = 'difficulty:';
|
|
21
|
+
const SUBCATEGORY_PREFIX = 'subcategory:';
|
|
22
|
+
/**
|
|
23
|
+
* Extract the category from a labels array, or undefined when not present.
|
|
24
|
+
* If multiple `category:` labels are present, the first one wins.
|
|
25
|
+
*/
|
|
26
|
+
export function getCategoryFromLabels(labels) {
|
|
27
|
+
if (!labels || labels.length === 0)
|
|
28
|
+
return undefined;
|
|
29
|
+
const hit = labels.find(l => l.startsWith(CATEGORY_PREFIX));
|
|
30
|
+
return hit ? hit.slice(CATEGORY_PREFIX.length) || undefined : undefined;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Extract the difficulty from a labels array, or undefined when not present.
|
|
34
|
+
* Values are normalized to the canonical `Easy | Medium | Hard` form when
|
|
35
|
+
* possible; non-canonical values are returned as-is.
|
|
36
|
+
*/
|
|
37
|
+
export function getDifficultyFromLabels(labels) {
|
|
38
|
+
if (!labels || labels.length === 0)
|
|
39
|
+
return undefined;
|
|
40
|
+
const hit = labels.find(l => l.startsWith(DIFFICULTY_PREFIX));
|
|
41
|
+
if (!hit)
|
|
42
|
+
return undefined;
|
|
43
|
+
const raw = hit.slice(DIFFICULTY_PREFIX.length).trim();
|
|
44
|
+
const normalized = raw.charAt(0).toUpperCase() + raw.slice(1).toLowerCase();
|
|
45
|
+
if (normalized === 'Easy' || normalized === 'Medium' || normalized === 'Hard') {
|
|
46
|
+
return normalized;
|
|
47
|
+
}
|
|
48
|
+
return raw || undefined;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Extract the subcategory from a labels array, or undefined when not present.
|
|
52
|
+
*/
|
|
53
|
+
export function getSubcategoryFromLabels(labels) {
|
|
54
|
+
if (!labels || labels.length === 0)
|
|
55
|
+
return undefined;
|
|
56
|
+
const hit = labels.find(l => l.startsWith(SUBCATEGORY_PREFIX));
|
|
57
|
+
return hit ? hit.slice(SUBCATEGORY_PREFIX.length) || undefined : undefined;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Build a labels array from the legacy top-level `category` / `difficulty`
|
|
61
|
+
* fields, preserving any existing labels and refusing to add a duplicate
|
|
62
|
+
* facet (e.g. won't add `category:RCA` if a `category:` label is already
|
|
63
|
+
* present).
|
|
64
|
+
*/
|
|
65
|
+
export function migrateLegacyFieldsToLabels(input) {
|
|
66
|
+
const out = [...(input.labels ?? [])];
|
|
67
|
+
if (input.category && !out.some(l => l.startsWith(CATEGORY_PREFIX))) {
|
|
68
|
+
out.push(`${CATEGORY_PREFIX}${input.category}`);
|
|
69
|
+
}
|
|
70
|
+
if (input.difficulty && !out.some(l => l.startsWith(DIFFICULTY_PREFIX))) {
|
|
71
|
+
out.push(`${DIFFICULTY_PREFIX}${input.difficulty}`);
|
|
72
|
+
}
|
|
73
|
+
if (input.subcategory && !out.some(l => l.startsWith(SUBCATEGORY_PREFIX))) {
|
|
74
|
+
out.push(`${SUBCATEGORY_PREFIX}${input.subcategory}`);
|
|
75
|
+
}
|
|
76
|
+
return out;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Returns true when the labels array contains a structured facet for the
|
|
80
|
+
* given prefix. Useful in migrations to avoid double-applying.
|
|
81
|
+
*/
|
|
82
|
+
export function hasLabelPrefix(labels, prefix) {
|
|
83
|
+
if (!labels)
|
|
84
|
+
return false;
|
|
85
|
+
const normalized = prefix.endsWith(':') ? prefix : `${prefix}:`;
|
|
86
|
+
return labels.some(l => l.startsWith(normalized));
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=testCaseLabels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testCaseLabels.js","sourceRoot":"","sources":["../../testCaseLabels.ts"],"names":[],"mappings":"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"}
|