@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,195 @@
|
|
|
1
|
+
# Agent Health: NPX CLI Tool
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Package the Agent Health application as an NPX-runnable CLI tool. Agent and judge model selection is done in the UI.
|
|
6
|
+
|
|
7
|
+
**Package name**: `@opensearch-project/agent-health`
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Key Concept: Sample Data Always Visible
|
|
12
|
+
|
|
13
|
+
Sample data (`demo-*` prefixed items) is **always included** in API responses:
|
|
14
|
+
|
|
15
|
+
- **5 sample test cases** - RCA scenarios for e-commerce
|
|
16
|
+
- **1 sample experiment** - With completed runs
|
|
17
|
+
- **5 sample runs** - With realistic trajectories and judge evaluations
|
|
18
|
+
- **Sample traces** - OTel spans linked to runs
|
|
19
|
+
|
|
20
|
+
When OpenSearch is configured, real data is merged with sample data. Sample data is **read-only** - write operations to `demo-*` IDs are rejected.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Quick Start
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Start the server
|
|
28
|
+
npx @opensearch-project/agent-health
|
|
29
|
+
|
|
30
|
+
# With custom port
|
|
31
|
+
npx @opensearch-project/agent-health --port 3000
|
|
32
|
+
|
|
33
|
+
# With environment file
|
|
34
|
+
npx @opensearch-project/agent-health --env-file .env
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Configuration is done via:
|
|
38
|
+
- **UI dropdowns** - Select agent and judge model in the interface
|
|
39
|
+
- **Environment variables** - Configure OpenSearch storage, AWS credentials via `.env` file
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Architecture
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
@opensearch-project/agent-health
|
|
47
|
+
├── bin/
|
|
48
|
+
│ └── cli.js # Entry point (#!/usr/bin/env node)
|
|
49
|
+
├── cli/
|
|
50
|
+
│ ├── index.ts # Main CLI - starts server
|
|
51
|
+
│ ├── demo/
|
|
52
|
+
│ │ ├── sampleTestCases.ts # 5 embedded test cases (always visible)
|
|
53
|
+
│ │ ├── sampleExperiments.ts # 1 sample experiment (always visible)
|
|
54
|
+
│ │ ├── sampleRuns.ts # 5 runs with trajectories (always visible)
|
|
55
|
+
│ │ └── sampleTraces.ts # OTel spans for sample runs (always visible)
|
|
56
|
+
│ └── utils/
|
|
57
|
+
│ └── startServer.ts # Server startup utility
|
|
58
|
+
├── server/ # Backend (Express)
|
|
59
|
+
│ ├── services/
|
|
60
|
+
│ │ └── opensearchClient.ts # Returns null if not configured
|
|
61
|
+
│ └── routes/
|
|
62
|
+
│ └── storage/ # All routes merge sample + real data
|
|
63
|
+
├── dist/ # Built frontend
|
|
64
|
+
└── package.json
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Storage Behavior
|
|
70
|
+
|
|
71
|
+
| OpenSearch | Sample Data | Real Data | Writes |
|
|
72
|
+
|-----------|-------------|-----------|--------|
|
|
73
|
+
| Not configured | Yes | No | Rejected |
|
|
74
|
+
| Configured | Yes | Yes | Allowed |
|
|
75
|
+
|
|
76
|
+
**Key behavior:**
|
|
77
|
+
- Sample data (`demo-*`) is **always** returned by APIs
|
|
78
|
+
- OpenSearch is **optional** - APIs work without it
|
|
79
|
+
- Write operations require OpenSearch to be configured
|
|
80
|
+
- Write operations to `demo-*` IDs always rejected (read-only)
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Sample Test Cases
|
|
85
|
+
|
|
86
|
+
5 pre-configured RCA scenarios based on e-commerce observability:
|
|
87
|
+
|
|
88
|
+
| ID | Name | Difficulty |
|
|
89
|
+
|----|------|------------|
|
|
90
|
+
| demo-otel-001 | Payment Service Latency Spike | Medium |
|
|
91
|
+
| demo-otel-002 | Cart Service Error Rate Spike | Medium |
|
|
92
|
+
| demo-otel-003 | Database Connection Pool Exhaustion | Hard |
|
|
93
|
+
| demo-otel-004 | Recommendation Service Cold Start | Medium |
|
|
94
|
+
| demo-otel-005 | Cascading Failure Investigation | Hard |
|
|
95
|
+
|
|
96
|
+
Each includes prompt, context, and expected outcomes.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## CLI Options
|
|
101
|
+
|
|
102
|
+
| Flag | Description | Default |
|
|
103
|
+
|------|-------------|---------|
|
|
104
|
+
| `-p, --port <num>` | Server port | 4001 |
|
|
105
|
+
| `-e, --env-file <path>` | Load environment variables from file | - |
|
|
106
|
+
| `--no-browser` | Don't open browser automatically | false |
|
|
107
|
+
|
|
108
|
+
**Examples:**
|
|
109
|
+
```bash
|
|
110
|
+
# Start on custom port
|
|
111
|
+
npx @opensearch-project/agent-health --port 3000
|
|
112
|
+
|
|
113
|
+
# Start without opening browser
|
|
114
|
+
npx @opensearch-project/agent-health --no-browser
|
|
115
|
+
|
|
116
|
+
# Use custom environment file
|
|
117
|
+
npx @opensearch-project/agent-health --env-file .env.production
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Configuration
|
|
123
|
+
|
|
124
|
+
Configuration is done via environment variables (`.env` file):
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# AWS credentials for Bedrock Judge
|
|
128
|
+
AWS_REGION=us-west-2
|
|
129
|
+
AWS_ACCESS_KEY_ID=your_key
|
|
130
|
+
AWS_SECRET_ACCESS_KEY=your_secret
|
|
131
|
+
|
|
132
|
+
# OpenSearch Storage (optional - for persisting data)
|
|
133
|
+
OPENSEARCH_STORAGE_ENDPOINT=http://localhost:9200
|
|
134
|
+
OPENSEARCH_STORAGE_USERNAME=admin
|
|
135
|
+
OPENSEARCH_STORAGE_PASSWORD=admin
|
|
136
|
+
|
|
137
|
+
# Traces (optional)
|
|
138
|
+
OPENSEARCH_LOGS_ENDPOINT=http://localhost:9200
|
|
139
|
+
OPENSEARCH_LOGS_TRACES_INDEX=otel-v1-apm-span-*
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Note:** Storage is optional. When not configured, sample data is displayed.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## What Gets Packaged
|
|
147
|
+
|
|
148
|
+
### NPM Package Contents
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"files": [
|
|
152
|
+
"bin/",
|
|
153
|
+
"cli/dist/",
|
|
154
|
+
"server/dist/",
|
|
155
|
+
"dist/"
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Size Estimate
|
|
161
|
+
- Frontend build: ~2MB
|
|
162
|
+
- Server build: ~500KB
|
|
163
|
+
- CLI + sample data: ~300KB
|
|
164
|
+
- **Total: ~3MB**
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Development
|
|
169
|
+
|
|
170
|
+
### Building
|
|
171
|
+
```bash
|
|
172
|
+
npm run build:cli # Build CLI only
|
|
173
|
+
npm run build:all # Build everything (UI + server + CLI)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Testing Locally
|
|
177
|
+
```bash
|
|
178
|
+
npm link
|
|
179
|
+
agent-health
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Publishing
|
|
183
|
+
```bash
|
|
184
|
+
npm run prepublishOnly
|
|
185
|
+
npm publish --access public
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Security
|
|
191
|
+
|
|
192
|
+
1. **Config file permissions** - 600 on ~/.agent-health/config.json
|
|
193
|
+
2. **AWS credentials** - Uses default credential chain, never stored in config
|
|
194
|
+
3. **OpenSearch auth optional** - For localhost dev without security
|
|
195
|
+
4. **Sample data is synthetic** - No sensitive information
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# Performance Monitoring Guide
|
|
2
|
+
|
|
3
|
+
This document explains how to use the performance monitoring tools added to measure and visualize the impact of performance optimizations.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The traces page has been optimized with several key improvements:
|
|
8
|
+
- **Single-pass tree preprocessing** (60-75% reduction in tree traversals)
|
|
9
|
+
- **Pagination** (80% reduction in initial payload: 500 → 100 spans)
|
|
10
|
+
- **Increased refresh interval** (67% reduction in API calls: 10s → 30s)
|
|
11
|
+
- **Visibility-based pausing** (stops refreshing when tab is hidden)
|
|
12
|
+
|
|
13
|
+
## Enabling Performance Monitoring
|
|
14
|
+
|
|
15
|
+
### In the Browser
|
|
16
|
+
|
|
17
|
+
Open the browser console and run:
|
|
18
|
+
|
|
19
|
+
```javascript
|
|
20
|
+
localStorage.setItem('DEBUG_PERFORMANCE', 'true')
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Refresh the page to see the performance overlay appear in the bottom-right corner.
|
|
24
|
+
|
|
25
|
+
### Disable Performance Monitoring
|
|
26
|
+
|
|
27
|
+
```javascript
|
|
28
|
+
localStorage.removeItem('DEBUG_PERFORMANCE')
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Or click the ❌ button in the performance overlay.
|
|
32
|
+
|
|
33
|
+
## Using the Performance Overlay
|
|
34
|
+
|
|
35
|
+
Once enabled, the overlay shows:
|
|
36
|
+
|
|
37
|
+
1. **Real-time metrics** - Updated every 500ms
|
|
38
|
+
2. **Color-coded performance**:
|
|
39
|
+
- 🟢 Green: < 50ms (Fast)
|
|
40
|
+
- 🟡 Yellow: 50-200ms (OK)
|
|
41
|
+
- 🔴 Red: > 200ms (Slow)
|
|
42
|
+
3. **Statistics per operation**:
|
|
43
|
+
- Average duration
|
|
44
|
+
- Min/Max range
|
|
45
|
+
- Call count
|
|
46
|
+
|
|
47
|
+
## Key Metrics to Monitor
|
|
48
|
+
|
|
49
|
+
### TracesPage Operations
|
|
50
|
+
|
|
51
|
+
| Metric | Description | Expected Performance |
|
|
52
|
+
|--------|-------------|---------------------|
|
|
53
|
+
| `TracesPage.fetchTraces` | Full fetch cycle (API + state update) | < 200ms |
|
|
54
|
+
| `TracesPage.apiCall` | Backend API call for traces | < 150ms |
|
|
55
|
+
| `TracesPage.processTree` | Build hierarchical tree from flat spans | < 20ms |
|
|
56
|
+
| `TracesPage.updateState` | React state updates | < 10ms |
|
|
57
|
+
|
|
58
|
+
### TraceFlowView Operations
|
|
59
|
+
|
|
60
|
+
| Metric | Description | Expected Performance |
|
|
61
|
+
|--------|-------------|---------------------|
|
|
62
|
+
| `TraceFlowView.preprocessing` | **Single-pass tree processing** | < 50ms |
|
|
63
|
+
| `TraceFlowView.flowTransform` | Dagre layout calculation | < 100ms |
|
|
64
|
+
|
|
65
|
+
### Performance Comparison
|
|
66
|
+
|
|
67
|
+
**Before Optimization:**
|
|
68
|
+
- 4-6 separate tree traversals: ~150-200ms combined
|
|
69
|
+
- API call for 500 spans: ~300-400ms
|
|
70
|
+
- Total refresh time: ~500-700ms
|
|
71
|
+
|
|
72
|
+
**After Optimization:**
|
|
73
|
+
- 1 single-pass preprocessing: ~30-50ms
|
|
74
|
+
- API call for 100 spans: ~100-150ms
|
|
75
|
+
- Total refresh time: ~150-250ms
|
|
76
|
+
|
|
77
|
+
**Improvement: 60-70% faster**
|
|
78
|
+
|
|
79
|
+
## Measuring Impact
|
|
80
|
+
|
|
81
|
+
### Test Scenario 1: Initial Page Load
|
|
82
|
+
|
|
83
|
+
1. Enable performance monitoring
|
|
84
|
+
2. Navigate to `/traces`
|
|
85
|
+
3. Check the overlay for:
|
|
86
|
+
- `TracesPage.fetchTraces` - should be < 200ms
|
|
87
|
+
- `TraceFlowView.preprocessing` - should be < 50ms
|
|
88
|
+
|
|
89
|
+
### Test Scenario 2: Live Tailing
|
|
90
|
+
|
|
91
|
+
1. Enable performance monitoring
|
|
92
|
+
2. Go to `/traces` and wait for 2-3 auto-refreshes
|
|
93
|
+
3. Observe metrics in the overlay
|
|
94
|
+
4. Check console for performance logs:
|
|
95
|
+
```
|
|
96
|
+
[Performance] 🟢 TracesPage.fetchTraces: 187.45ms
|
|
97
|
+
[Performance] 🟢 TracesPage.apiCall: 142.30ms
|
|
98
|
+
[Performance] 🟢 TracesPage.processTree: 12.50ms
|
|
99
|
+
[Performance] 🟢 TraceFlowView.preprocessing: 38.20ms
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Test Scenario 3: Load More (Pagination)
|
|
103
|
+
|
|
104
|
+
1. Enable performance monitoring
|
|
105
|
+
2. Go to `/traces`
|
|
106
|
+
3. Click "Load More Spans" button
|
|
107
|
+
4. Check `TracesPage.fetchMore` metric
|
|
108
|
+
5. Should be significantly faster than initial load (incremental data)
|
|
109
|
+
|
|
110
|
+
## Console API
|
|
111
|
+
|
|
112
|
+
The performance library exposes a global API for programmatic access:
|
|
113
|
+
|
|
114
|
+
```javascript
|
|
115
|
+
// Import in code
|
|
116
|
+
import { enable, disable, getMetrics, logSummary, clearMetrics } from '@/lib/performance';
|
|
117
|
+
|
|
118
|
+
// Or use in browser console
|
|
119
|
+
// Enable
|
|
120
|
+
localStorage.setItem('DEBUG_PERFORMANCE', 'true')
|
|
121
|
+
|
|
122
|
+
// Get all metrics
|
|
123
|
+
performance.getMetrics()
|
|
124
|
+
|
|
125
|
+
// Get average for specific metric
|
|
126
|
+
performance.getAverageDuration('TraceFlowView.preprocessing')
|
|
127
|
+
|
|
128
|
+
// Log summary
|
|
129
|
+
performance.logSummary()
|
|
130
|
+
|
|
131
|
+
// Clear metrics
|
|
132
|
+
performance.clearMetrics()
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Troubleshooting
|
|
136
|
+
|
|
137
|
+
### Overlay Not Appearing
|
|
138
|
+
|
|
139
|
+
1. Check localStorage: `localStorage.getItem('DEBUG_PERFORMANCE')`
|
|
140
|
+
2. Should return `"true"`
|
|
141
|
+
3. Refresh the page after setting
|
|
142
|
+
|
|
143
|
+
### No Metrics Showing
|
|
144
|
+
|
|
145
|
+
1. Navigate to `/traces` page
|
|
146
|
+
2. Metrics only appear when operations are performed
|
|
147
|
+
3. Wait for an auto-refresh (30 seconds) or click manual refresh
|
|
148
|
+
|
|
149
|
+
### Performance Seems Slower
|
|
150
|
+
|
|
151
|
+
If performance seems slower after changes:
|
|
152
|
+
|
|
153
|
+
1. Check if you have many traces (>100 spans)
|
|
154
|
+
2. Look for red (🔴) metrics in the overlay
|
|
155
|
+
3. Check browser console for errors
|
|
156
|
+
4. Try clearing browser cache and rebuilding:
|
|
157
|
+
```bash
|
|
158
|
+
npm run build:all
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Performance Optimization Summary
|
|
162
|
+
|
|
163
|
+
### Changes Made
|
|
164
|
+
|
|
165
|
+
1. **Single-Pass Preprocessing** (`services/traces/spanPreprocessing.ts`)
|
|
166
|
+
- Combines categorization, flattening, stats, and indexing in one traversal
|
|
167
|
+
- Reduces 4-6 tree walks to 1
|
|
168
|
+
- O(1) span lookups via Map index
|
|
169
|
+
|
|
170
|
+
2. **Pagination**
|
|
171
|
+
- Default page size: 500 → 100 spans (80% reduction)
|
|
172
|
+
- Cursor-based pagination with "Load More" button
|
|
173
|
+
- Reduces initial network payload
|
|
174
|
+
|
|
175
|
+
3. **Optimized Refresh Rate**
|
|
176
|
+
- Auto-refresh: 10s → 30s (67% fewer API calls)
|
|
177
|
+
- Pauses when tab is hidden
|
|
178
|
+
- Manual refresh button always available
|
|
179
|
+
|
|
180
|
+
4. **Performance Instrumentation**
|
|
181
|
+
- Real-time metrics overlay
|
|
182
|
+
- Detailed timing for each operation
|
|
183
|
+
- Color-coded performance indicators
|
|
184
|
+
|
|
185
|
+
## Expected Results
|
|
186
|
+
|
|
187
|
+
With 100-200 spans in the traces view:
|
|
188
|
+
|
|
189
|
+
- **Initial load**: < 250ms (was ~600ms)
|
|
190
|
+
- **Preprocessing**: < 50ms (was ~200ms from 4-6 traversals)
|
|
191
|
+
- **API call**: < 150ms (was ~300ms for 500 spans)
|
|
192
|
+
- **Memory usage**: Reduced by ~40% due to smaller initial payload
|
|
193
|
+
|
|
194
|
+
## Questions?
|
|
195
|
+
|
|
196
|
+
If you have questions or notice performance issues, please:
|
|
197
|
+
|
|
198
|
+
1. Capture metrics from the performance overlay
|
|
199
|
+
2. Check browser console for any errors
|
|
200
|
+
3. Report with specific metric values and operation names
|