@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,116 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Empty accessor — silent zeros. Used when the agent opted out of traces
|
|
7
|
+
* (`useTraces: false`). Reading any accessor returns `0` / `[]` so user
|
|
8
|
+
* matchers in opt-out scenarios don't throw.
|
|
9
|
+
*/
|
|
10
|
+
export function emptyTracesAccessor() {
|
|
11
|
+
return {
|
|
12
|
+
totalTokens: 0,
|
|
13
|
+
totalCost: 0,
|
|
14
|
+
toolCalls: [],
|
|
15
|
+
spanDuration: () => 0,
|
|
16
|
+
spans: [],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Loud-failure accessor — every read throws. Used when the agent opted
|
|
21
|
+
* in to traces (`useTraces: true`) but spans were not retrievable. This
|
|
22
|
+
* turns the silent false-pass described in issue #230 into an actionable
|
|
23
|
+
* error, e.g.:
|
|
24
|
+
*
|
|
25
|
+
* Error: traces fixture unavailable: no spans found for runId=…
|
|
26
|
+
*
|
|
27
|
+
* Construction never throws — only attribute / method access does.
|
|
28
|
+
*/
|
|
29
|
+
export function unavailableTracesAccessor(reason) {
|
|
30
|
+
const fail = () => {
|
|
31
|
+
throw new Error(`traces fixture unavailable: ${reason}`);
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
get totalTokens() { return fail(); },
|
|
35
|
+
get totalCost() { return fail(); },
|
|
36
|
+
get toolCalls() { return fail(); },
|
|
37
|
+
get spans() { return fail(); },
|
|
38
|
+
spanDuration(_name) { return fail(); },
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** Build a TracesAccessor from a flat list of spans. */
|
|
42
|
+
export function buildTracesAccessor(spans) {
|
|
43
|
+
let totalTokens = 0;
|
|
44
|
+
let totalCost = 0;
|
|
45
|
+
const toolCalls = [];
|
|
46
|
+
for (const span of spans) {
|
|
47
|
+
const attrs = span.attributes ?? {};
|
|
48
|
+
const promptTokens = pickNumber(attrs, [
|
|
49
|
+
'gen_ai.usage.prompt_tokens',
|
|
50
|
+
'gen_ai.usage.input_tokens',
|
|
51
|
+
'llm.usage.prompt_tokens',
|
|
52
|
+
]);
|
|
53
|
+
const completionTokens = pickNumber(attrs, [
|
|
54
|
+
'gen_ai.usage.completion_tokens',
|
|
55
|
+
'gen_ai.usage.output_tokens',
|
|
56
|
+
'llm.usage.completion_tokens',
|
|
57
|
+
]);
|
|
58
|
+
if (promptTokens)
|
|
59
|
+
totalTokens += promptTokens;
|
|
60
|
+
if (completionTokens)
|
|
61
|
+
totalTokens += completionTokens;
|
|
62
|
+
const cost = pickNumber(attrs, [
|
|
63
|
+
'gen_ai.usage.cost_usd',
|
|
64
|
+
'gen_ai.usage.cost',
|
|
65
|
+
'llm.usage.cost_usd',
|
|
66
|
+
]);
|
|
67
|
+
if (cost)
|
|
68
|
+
totalCost += cost;
|
|
69
|
+
// Tool spans
|
|
70
|
+
const toolName = pickString(attrs, ['gen_ai.tool.name', 'llm.tool.name']);
|
|
71
|
+
if (toolName) {
|
|
72
|
+
toolCalls.push({ name: toolName, durationMs: spanDurationMs(span) });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
totalTokens,
|
|
77
|
+
totalCost,
|
|
78
|
+
toolCalls,
|
|
79
|
+
spanDuration(name) {
|
|
80
|
+
const hit = spans.find(s => s.name === name);
|
|
81
|
+
return hit ? spanDurationMs(hit) : 0;
|
|
82
|
+
},
|
|
83
|
+
spans,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function spanDurationMs(span) {
|
|
87
|
+
const start = span.startTimeUnixNano ?? span.startTime;
|
|
88
|
+
const end = span.endTimeUnixNano ?? span.endTime;
|
|
89
|
+
if (typeof start === 'number' && typeof end === 'number') {
|
|
90
|
+
// Heuristic: nanosecond timestamps when 13+ digits, else ms
|
|
91
|
+
const factor = Math.abs(start) > 1e15 ? 1e6 : 1;
|
|
92
|
+
return Math.max(0, Math.round((end - start) / factor));
|
|
93
|
+
}
|
|
94
|
+
if (typeof span.durationMs === 'number')
|
|
95
|
+
return span.durationMs;
|
|
96
|
+
return 0;
|
|
97
|
+
}
|
|
98
|
+
function pickNumber(attrs, keys) {
|
|
99
|
+
for (const k of keys) {
|
|
100
|
+
const v = attrs[k];
|
|
101
|
+
if (typeof v === 'number' && Number.isFinite(v))
|
|
102
|
+
return v;
|
|
103
|
+
if (typeof v === 'string' && v.trim() !== '' && Number.isFinite(Number(v)))
|
|
104
|
+
return Number(v);
|
|
105
|
+
}
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
function pickString(attrs, keys) {
|
|
109
|
+
for (const k of keys) {
|
|
110
|
+
const v = attrs[k];
|
|
111
|
+
if (typeof v === 'string' && v.length > 0)
|
|
112
|
+
return v;
|
|
113
|
+
}
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=traces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traces.js","sourceRoot":"","sources":["../../../matchers/traces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-matcher result types.
|
|
3
|
+
*
|
|
4
|
+
* Each call into `expect(...).to.X(...)`, `judge(...)`, or a traces helper
|
|
5
|
+
* produces one MatcherResult. The runner collects them per test case and
|
|
6
|
+
* persists them on TestCaseRun so the UI can show a breakdown like
|
|
7
|
+
*
|
|
8
|
+
* ✅ to contain 'root cause' [code-assertion]
|
|
9
|
+
* ❌ to be lessThan 30000 [code-assertion] actual: 47320
|
|
10
|
+
* ✅ identifies failing dependency [llm-judge] score: 0.85
|
|
11
|
+
* ✅ traces.totalTokens < 10000 [traces]
|
|
12
|
+
*/
|
|
13
|
+
export type MatcherMethod = 'code-assertion' | 'llm-judge' | 'traces' | 'evaluator';
|
|
14
|
+
export interface MatcherResult {
|
|
15
|
+
/** Human-readable description, e.g. "to contain 'root cause'". */
|
|
16
|
+
description: string;
|
|
17
|
+
/** Whether this matcher passed. */
|
|
18
|
+
pass: boolean;
|
|
19
|
+
/** Family the matcher belongs to. */
|
|
20
|
+
method: MatcherMethod;
|
|
21
|
+
/**
|
|
22
|
+
* Whether this signal gates the test verdict. `gate` (default) means a
|
|
23
|
+
* failing result fails the test; `observe` means the result is recorded
|
|
24
|
+
* for score/insights only and never fails the test (RFC 004 §4.8).
|
|
25
|
+
* `code-assertion` and `traces` matchers are always gates; `llm-judge`
|
|
26
|
+
* entries are `gate` for `judge()` and `observe` for `judge.observe()`.
|
|
27
|
+
*/
|
|
28
|
+
role?: 'gate' | 'observe';
|
|
29
|
+
/**
|
|
30
|
+
* True when the matcher could not be evaluated at all (e.g. the judge
|
|
31
|
+
* endpoint errored) — distinct from a clean `pass: false`. Errored
|
|
32
|
+
* signals are excluded from pass-rate aggregation (status `errored`).
|
|
33
|
+
*/
|
|
34
|
+
errored?: boolean;
|
|
35
|
+
/** Wall-clock time spent evaluating this matcher (ms). */
|
|
36
|
+
durationMs?: number;
|
|
37
|
+
/** The actual value as seen by the matcher (best-effort). */
|
|
38
|
+
actual?: unknown;
|
|
39
|
+
/** The expected value as configured by the user (best-effort). */
|
|
40
|
+
expected?: unknown;
|
|
41
|
+
/** Failure message from the chai assertion when pass is false. */
|
|
42
|
+
errorMessage?: string;
|
|
43
|
+
/** Confidence score on the [0, 1] interval, when available. */
|
|
44
|
+
score?: number;
|
|
45
|
+
/** Free-form judge reasoning, when available. */
|
|
46
|
+
reasoning?: string;
|
|
47
|
+
/** Model used by the judge for this matcher. */
|
|
48
|
+
model?: string;
|
|
49
|
+
/**
|
|
50
|
+
* Actionable suggestions produced by the judge when the verdict is
|
|
51
|
+
* `pass: false` (or, for the auto-judge path, when accuracy < 100).
|
|
52
|
+
* Same shape as the report-level field; carried per-call here so
|
|
53
|
+
* SDK multi-judge runs preserve per-claim feedback.
|
|
54
|
+
*/
|
|
55
|
+
improvementStrategies?: Array<{
|
|
56
|
+
category: string;
|
|
57
|
+
issue: string;
|
|
58
|
+
recommendation: string;
|
|
59
|
+
priority: 'high' | 'medium' | 'low';
|
|
60
|
+
}>;
|
|
61
|
+
/**
|
|
62
|
+
* Full judge metric breakdown when the judge produces multiple
|
|
63
|
+
* dimensions. `score` (above) is the headline value (typically
|
|
64
|
+
* `accuracy / 100`); this object exposes the rest. All keys are
|
|
65
|
+
* optional because the judge only emits them when applicable.
|
|
66
|
+
*/
|
|
67
|
+
judgeMetrics?: {
|
|
68
|
+
accuracy?: number;
|
|
69
|
+
faithfulness?: number;
|
|
70
|
+
latency_score?: number;
|
|
71
|
+
trajectory_alignment_score?: number;
|
|
72
|
+
[k: string]: number | undefined;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../matchers/types.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,aAAa,GACrB,gBAAgB,GAChB,WAAW,GACX,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,qCAAqC;IACrC,MAAM,EAAE,aAAa,CAAC;IACtB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IASf;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,KAAK,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;KACrC,CAAC,CAAC;IAEH;;;;;OAKG;IACH,YAAY,CAAC,EAAE;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,0BAA0B,CAAC,EAAE,MAAM,CAAC;QACpC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KACjC,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../matchers/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Absolute path to the agent-health package root, computed once per process.
|
|
3
|
+
*
|
|
4
|
+
* Works in three runtime contexts:
|
|
5
|
+
* - Production (`node_modules/@opensearch-project/agent-health/...`)
|
|
6
|
+
* - Local dev from a checkout (`<repo>/...`)
|
|
7
|
+
* - Bundled output from esbuild (`<root>/server/dist/...`)
|
|
8
|
+
*
|
|
9
|
+
* @throws if the package root cannot be located.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getPackageRoot(): string;
|
|
12
|
+
/**
|
|
13
|
+
* Resolve a path inside `<package_root>/docs/skills/`.
|
|
14
|
+
*
|
|
15
|
+
* @param fileName Defaults to `AGENT_HEALTH.md` for the top-level skill.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getSkillPath(fileName?: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Resolve the bundled pi-package directory shipped alongside the
|
|
20
|
+
* Observio sample agent. Used by the Pi judge service.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getPiPackagePath(): string;
|
|
23
|
+
/**
|
|
24
|
+
* TEST-ONLY: reset the cached root. Exported so unit tests for the
|
|
25
|
+
* resolver itself (or downstream services) can re-evaluate without
|
|
26
|
+
* spawning a fresh process.
|
|
27
|
+
*/
|
|
28
|
+
export declare function _resetPackageRootCacheForTests(): void;
|
|
29
|
+
//# sourceMappingURL=packagePaths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packagePaths.d.ts","sourceRoot":"","sources":["../../packagePaths.ts"],"names":[],"mappings":"AA4BA;;;;;;;;;GASG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAIvC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,GAAE,MAA0B,GAAG,MAAM,CAEzE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,IAAI,IAAI,CAErD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Package asset path resolution.
|
|
7
|
+
*
|
|
8
|
+
* Resolves the location of files that ship inside the agent-health package
|
|
9
|
+
* (skill markdown files, the bundled pi-package, etc.) regardless of the
|
|
10
|
+
* caller's working directory. This unblocks running agent-health from a
|
|
11
|
+
* directory other than the repo root (e.g., from inside the user's own
|
|
12
|
+
* agent project).
|
|
13
|
+
*
|
|
14
|
+
* Anchors on `import.meta.url` of THIS module, then walks upwards looking
|
|
15
|
+
* for the agent-health package's own `package.json`. The pure walking
|
|
16
|
+
* logic lives in `findPackageRoot.ts` so it can be unit-tested under
|
|
17
|
+
* Jest's CommonJS loader (which doesn't support `import.meta.url`).
|
|
18
|
+
*/
|
|
19
|
+
import { fileURLToPath } from 'url';
|
|
20
|
+
import { dirname, join } from 'path';
|
|
21
|
+
import { findPackageRootFrom } from './findPackageRoot.js';
|
|
22
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
23
|
+
let cachedRoot = null;
|
|
24
|
+
/**
|
|
25
|
+
* Absolute path to the agent-health package root, computed once per process.
|
|
26
|
+
*
|
|
27
|
+
* Works in three runtime contexts:
|
|
28
|
+
* - Production (`node_modules/@opensearch-project/agent-health/...`)
|
|
29
|
+
* - Local dev from a checkout (`<repo>/...`)
|
|
30
|
+
* - Bundled output from esbuild (`<root>/server/dist/...`)
|
|
31
|
+
*
|
|
32
|
+
* @throws if the package root cannot be located.
|
|
33
|
+
*/
|
|
34
|
+
export function getPackageRoot() {
|
|
35
|
+
if (cachedRoot)
|
|
36
|
+
return cachedRoot;
|
|
37
|
+
cachedRoot = findPackageRootFrom(__dirname);
|
|
38
|
+
return cachedRoot;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolve a path inside `<package_root>/docs/skills/`.
|
|
42
|
+
*
|
|
43
|
+
* @param fileName Defaults to `AGENT_HEALTH.md` for the top-level skill.
|
|
44
|
+
*/
|
|
45
|
+
export function getSkillPath(fileName = 'AGENT_HEALTH.md') {
|
|
46
|
+
return join(getPackageRoot(), 'docs', 'skills', fileName);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Resolve the bundled pi-package directory shipped alongside the
|
|
50
|
+
* Observio sample agent. Used by the Pi judge service.
|
|
51
|
+
*/
|
|
52
|
+
export function getPiPackagePath() {
|
|
53
|
+
return join(getPackageRoot(), 'observio-sample-agent', 'pi-package');
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* TEST-ONLY: reset the cached root. Exported so unit tests for the
|
|
57
|
+
* resolver itself (or downstream services) can re-evaluate without
|
|
58
|
+
* spawning a fresh process.
|
|
59
|
+
*/
|
|
60
|
+
export function _resetPackageRootCacheForTests() {
|
|
61
|
+
cachedRoot = null;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=packagePaths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packagePaths.js","sourceRoot":"","sources":["../../packagePaths.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,IAAI,UAAU,GAAkB,IAAI,CAAC;AAErC;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,UAAU,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB,iBAAiB;IAC/D,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,uBAAuB,EAAE,YAAY,CAAC,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B;IAC5C,UAAU,GAAG,IAAI,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
interface PerformanceMetric {
|
|
2
|
+
name: string;
|
|
3
|
+
duration: number;
|
|
4
|
+
timestamp: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Start a performance measurement
|
|
8
|
+
*/
|
|
9
|
+
export declare function startMeasure(name: string): void;
|
|
10
|
+
/**
|
|
11
|
+
* End a performance measurement and log the duration
|
|
12
|
+
*/
|
|
13
|
+
export declare function endMeasure(name: string, logToConsole?: boolean): number | null;
|
|
14
|
+
/**
|
|
15
|
+
* Measure a synchronous function
|
|
16
|
+
*/
|
|
17
|
+
export declare function measureSync<T>(name: string, fn: () => T, logToConsole?: boolean): T;
|
|
18
|
+
/**
|
|
19
|
+
* Measure an async function
|
|
20
|
+
*/
|
|
21
|
+
export declare function measureAsync<T>(name: string, fn: () => Promise<T>, logToConsole?: boolean): Promise<T>;
|
|
22
|
+
/**
|
|
23
|
+
* Get all recorded metrics
|
|
24
|
+
*/
|
|
25
|
+
export declare function getMetrics(): PerformanceMetric[];
|
|
26
|
+
/**
|
|
27
|
+
* Get metrics for a specific measurement name
|
|
28
|
+
*/
|
|
29
|
+
export declare function getMetricsByName(name: string): PerformanceMetric[];
|
|
30
|
+
/**
|
|
31
|
+
* Get average duration for a metric
|
|
32
|
+
*/
|
|
33
|
+
export declare function getAverageDuration(name: string): number | null;
|
|
34
|
+
/**
|
|
35
|
+
* Clear all metrics
|
|
36
|
+
*/
|
|
37
|
+
export declare function clearMetrics(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Log a summary of all metrics
|
|
40
|
+
*/
|
|
41
|
+
export declare function logSummary(): void;
|
|
42
|
+
/**
|
|
43
|
+
* Enable performance monitoring
|
|
44
|
+
*/
|
|
45
|
+
export declare function enable(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Disable performance monitoring
|
|
48
|
+
*/
|
|
49
|
+
export declare function disable(): void;
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=performance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../performance.ts"],"names":[],"mappings":"AAiBA,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAgBD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAO/C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,UAAO,GAAG,MAAM,GAAG,IAAI,CA2B3E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,YAAY,UAAO,GAAG,CAAC,CAShF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,YAAY,UAAO,GAClB,OAAO,CAAC,CAAC,CAAC,CASZ;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,iBAAiB,EAAE,CAEhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAElE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM9D;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CA+BjC;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,IAAI,CAO7B;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAO9B"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
// In-memory storage for performance marks and metrics
|
|
6
|
+
const marks = new Map();
|
|
7
|
+
const metrics = [];
|
|
8
|
+
// Performance monitoring enabled in development or when DEBUG=true
|
|
9
|
+
const isEnabled = () => {
|
|
10
|
+
if (typeof window !== 'undefined') {
|
|
11
|
+
return localStorage.getItem('DEBUG_PERFORMANCE') === 'true' ||
|
|
12
|
+
process.env.NODE_ENV === 'development';
|
|
13
|
+
}
|
|
14
|
+
return process.env.DEBUG_PERFORMANCE === 'true' ||
|
|
15
|
+
process.env.NODE_ENV === 'development';
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Start a performance measurement
|
|
19
|
+
*/
|
|
20
|
+
export function startMeasure(name) {
|
|
21
|
+
if (!isEnabled())
|
|
22
|
+
return;
|
|
23
|
+
marks.set(name, {
|
|
24
|
+
name,
|
|
25
|
+
startTime: performance.now(),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* End a performance measurement and log the duration
|
|
30
|
+
*/
|
|
31
|
+
export function endMeasure(name, logToConsole = true) {
|
|
32
|
+
if (!isEnabled())
|
|
33
|
+
return null;
|
|
34
|
+
const mark = marks.get(name);
|
|
35
|
+
if (!mark) {
|
|
36
|
+
console.warn(`[Performance] No start mark found for: ${name}`);
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const duration = performance.now() - mark.startTime;
|
|
40
|
+
const metric = {
|
|
41
|
+
name,
|
|
42
|
+
duration,
|
|
43
|
+
timestamp: Date.now(),
|
|
44
|
+
};
|
|
45
|
+
metrics.push(metric);
|
|
46
|
+
marks.delete(name);
|
|
47
|
+
if (logToConsole) {
|
|
48
|
+
const color = duration < 50 ? '🟢' : duration < 200 ? '🟡' : '🔴';
|
|
49
|
+
console.log(`[Performance] ${color} ${name}: ${duration.toFixed(2)}ms`);
|
|
50
|
+
}
|
|
51
|
+
return duration;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Measure a synchronous function
|
|
55
|
+
*/
|
|
56
|
+
export function measureSync(name, fn, logToConsole = true) {
|
|
57
|
+
if (!isEnabled())
|
|
58
|
+
return fn();
|
|
59
|
+
startMeasure(name);
|
|
60
|
+
try {
|
|
61
|
+
return fn();
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
endMeasure(name, logToConsole);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Measure an async function
|
|
69
|
+
*/
|
|
70
|
+
export async function measureAsync(name, fn, logToConsole = true) {
|
|
71
|
+
if (!isEnabled())
|
|
72
|
+
return fn();
|
|
73
|
+
startMeasure(name);
|
|
74
|
+
try {
|
|
75
|
+
return await fn();
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
endMeasure(name, logToConsole);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get all recorded metrics
|
|
83
|
+
*/
|
|
84
|
+
export function getMetrics() {
|
|
85
|
+
return [...metrics];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get metrics for a specific measurement name
|
|
89
|
+
*/
|
|
90
|
+
export function getMetricsByName(name) {
|
|
91
|
+
return metrics.filter(m => m.name === name);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get average duration for a metric
|
|
95
|
+
*/
|
|
96
|
+
export function getAverageDuration(name) {
|
|
97
|
+
const metricsForName = getMetricsByName(name);
|
|
98
|
+
if (metricsForName.length === 0)
|
|
99
|
+
return null;
|
|
100
|
+
const sum = metricsForName.reduce((acc, m) => acc + m.duration, 0);
|
|
101
|
+
return sum / metricsForName.length;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Clear all metrics
|
|
105
|
+
*/
|
|
106
|
+
export function clearMetrics() {
|
|
107
|
+
metrics.length = 0;
|
|
108
|
+
marks.clear();
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Log a summary of all metrics
|
|
112
|
+
*/
|
|
113
|
+
export function logSummary() {
|
|
114
|
+
if (!isEnabled() || metrics.length === 0)
|
|
115
|
+
return;
|
|
116
|
+
console.group('📊 Performance Summary');
|
|
117
|
+
// Group metrics by name
|
|
118
|
+
const grouped = new Map();
|
|
119
|
+
metrics.forEach(m => {
|
|
120
|
+
if (!grouped.has(m.name)) {
|
|
121
|
+
grouped.set(m.name, []);
|
|
122
|
+
}
|
|
123
|
+
grouped.get(m.name).push(m);
|
|
124
|
+
});
|
|
125
|
+
// Calculate stats for each metric
|
|
126
|
+
grouped.forEach((metricsForName, name) => {
|
|
127
|
+
const durations = metricsForName.map(m => m.duration);
|
|
128
|
+
const avg = durations.reduce((a, b) => a + b, 0) / durations.length;
|
|
129
|
+
const min = Math.min(...durations);
|
|
130
|
+
const max = Math.max(...durations);
|
|
131
|
+
console.log(`${name}:`, `avg=${avg.toFixed(2)}ms`, `min=${min.toFixed(2)}ms`, `max=${max.toFixed(2)}ms`, `count=${metricsForName.length}`);
|
|
132
|
+
});
|
|
133
|
+
console.groupEnd();
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Enable performance monitoring
|
|
137
|
+
*/
|
|
138
|
+
export function enable() {
|
|
139
|
+
if (typeof window !== 'undefined') {
|
|
140
|
+
localStorage.setItem('DEBUG_PERFORMANCE', 'true');
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
process.env.DEBUG_PERFORMANCE = 'true';
|
|
144
|
+
}
|
|
145
|
+
console.log('✅ Performance monitoring enabled');
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Disable performance monitoring
|
|
149
|
+
*/
|
|
150
|
+
export function disable() {
|
|
151
|
+
if (typeof window !== 'undefined') {
|
|
152
|
+
localStorage.removeItem('DEBUG_PERFORMANCE');
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
delete process.env.DEBUG_PERFORMANCE;
|
|
156
|
+
}
|
|
157
|
+
console.log('❌ Performance monitoring disabled');
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=performance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.js","sourceRoot":"","sources":["../../performance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export declare const DEFAULT_BACKEND_PORT = 4001;
|
|
2
|
+
export declare const DEFAULT_DEV_PORT = 4000;
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the backend server port from AH_PORT env var (legacy: AGENT_HEALTH_PORT).
|
|
5
|
+
*/
|
|
6
|
+
export declare function resolveBackendPort(): number;
|
|
7
|
+
/**
|
|
8
|
+
* Resolve the frontend dev server port from AH_DEV_PORT env var (legacy: AGENT_HEALTH_DEV_PORT).
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveDevPort(): number;
|
|
11
|
+
/**
|
|
12
|
+
* Whether the backend port was *explicitly* configured (AH_PORT /
|
|
13
|
+
* AGENT_HEALTH_PORT set) vs. silently defaulted to {@link DEFAULT_BACKEND_PORT}.
|
|
14
|
+
*
|
|
15
|
+
* Callers that dial the backend over HTTP (e.g. the SDK `judge()` matcher
|
|
16
|
+
* run outside the server lifecycle) use this to warn before defaulting to
|
|
17
|
+
* 4001 — where a foreign instance (a live demo, another checkout) may be
|
|
18
|
+
* listening. See AGENTS.md → server lifecycle.
|
|
19
|
+
*
|
|
20
|
+
* Only a value that parses to a valid integer counts as explicit — a
|
|
21
|
+
* garbage `AH_PORT=abc` silently falls back to the default in
|
|
22
|
+
* {@link resolveBackendPort}, so the warn-once must still fire for it.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isBackendPortExplicit(): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Get the full backend URL (http://localhost:<port>).
|
|
27
|
+
*/
|
|
28
|
+
export declare function getBackendUrl(): string;
|
|
29
|
+
//# sourceMappingURL=portConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portConfig.d.ts","sourceRoot":"","sources":["../../portConfig.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAO3C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAOvC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAG/C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Port Configuration - Single source of truth for all port settings.
|
|
7
|
+
*
|
|
8
|
+
* Backend port: AH_PORT (default 4001)
|
|
9
|
+
* Frontend dev port: AH_DEV_PORT (default 4000)
|
|
10
|
+
*
|
|
11
|
+
* The legacy names AGENT_HEALTH_PORT and AGENT_HEALTH_DEV_PORT are still
|
|
12
|
+
* accepted for one release with a deprecation warning.
|
|
13
|
+
*/
|
|
14
|
+
import { readEnv } from './envCompat.js';
|
|
15
|
+
export const DEFAULT_BACKEND_PORT = 4001;
|
|
16
|
+
export const DEFAULT_DEV_PORT = 4000;
|
|
17
|
+
/**
|
|
18
|
+
* Resolve the backend server port from AH_PORT env var (legacy: AGENT_HEALTH_PORT).
|
|
19
|
+
*/
|
|
20
|
+
export function resolveBackendPort() {
|
|
21
|
+
const port = readEnv('AH_PORT', 'AGENT_HEALTH_PORT');
|
|
22
|
+
if (port) {
|
|
23
|
+
const parsed = parseInt(port, 10);
|
|
24
|
+
if (!isNaN(parsed))
|
|
25
|
+
return parsed;
|
|
26
|
+
}
|
|
27
|
+
return DEFAULT_BACKEND_PORT;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Resolve the frontend dev server port from AH_DEV_PORT env var (legacy: AGENT_HEALTH_DEV_PORT).
|
|
31
|
+
*/
|
|
32
|
+
export function resolveDevPort() {
|
|
33
|
+
const port = readEnv('AH_DEV_PORT', 'AGENT_HEALTH_DEV_PORT');
|
|
34
|
+
if (port) {
|
|
35
|
+
const parsed = parseInt(port, 10);
|
|
36
|
+
if (!isNaN(parsed))
|
|
37
|
+
return parsed;
|
|
38
|
+
}
|
|
39
|
+
return DEFAULT_DEV_PORT;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Whether the backend port was *explicitly* configured (AH_PORT /
|
|
43
|
+
* AGENT_HEALTH_PORT set) vs. silently defaulted to {@link DEFAULT_BACKEND_PORT}.
|
|
44
|
+
*
|
|
45
|
+
* Callers that dial the backend over HTTP (e.g. the SDK `judge()` matcher
|
|
46
|
+
* run outside the server lifecycle) use this to warn before defaulting to
|
|
47
|
+
* 4001 — where a foreign instance (a live demo, another checkout) may be
|
|
48
|
+
* listening. See AGENTS.md → server lifecycle.
|
|
49
|
+
*
|
|
50
|
+
* Only a value that parses to a valid integer counts as explicit — a
|
|
51
|
+
* garbage `AH_PORT=abc` silently falls back to the default in
|
|
52
|
+
* {@link resolveBackendPort}, so the warn-once must still fire for it.
|
|
53
|
+
*/
|
|
54
|
+
export function isBackendPortExplicit() {
|
|
55
|
+
const port = readEnv('AH_PORT', 'AGENT_HEALTH_PORT');
|
|
56
|
+
return !!port && !isNaN(parseInt(port, 10));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get the full backend URL (http://localhost:<port>).
|
|
60
|
+
*/
|
|
61
|
+
export function getBackendUrl() {
|
|
62
|
+
return `http://localhost:${resolveBackendPort()}`;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=portConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portConfig.js","sourceRoot":"","sources":["../../portConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACrD,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;IACpC,CAAC;IACD,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC;IAC7D,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;IACpC,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACrD,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,oBAAoB,kBAAkB,EAAE,EAAE,CAAC;AACpD,CAAC"}
|