@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,228 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Flow Transform Service
|
|
7
|
+
*
|
|
8
|
+
* Converts span trees to React Flow nodes and edges for DAG visualization.
|
|
9
|
+
* Uses dagre for automatic layout positioning.
|
|
10
|
+
*
|
|
11
|
+
* Supports two modes:
|
|
12
|
+
* - 'hierarchy': Traditional parent-child edges (legacy)
|
|
13
|
+
* - 'execution-order': Sibling execution-order edges like AWS Step Functions (default)
|
|
14
|
+
*/
|
|
15
|
+
import dagre from 'dagre';
|
|
16
|
+
import { MarkerType } from '@xyflow/react';
|
|
17
|
+
import { spansToExecutionFlow } from './executionOrderTransform.js';
|
|
18
|
+
const DEFAULT_OPTIONS = {
|
|
19
|
+
direction: 'TB',
|
|
20
|
+
mode: 'execution-order',
|
|
21
|
+
nodeWidth: 200,
|
|
22
|
+
nodeHeight: 70,
|
|
23
|
+
nodeSpacingX: 50,
|
|
24
|
+
nodeSpacingY: 80,
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Convert a categorized span tree to React Flow nodes and edges.
|
|
28
|
+
*
|
|
29
|
+
* @param spanTree - Categorized span tree to transform
|
|
30
|
+
* @param totalDuration - Total trace duration for relative sizing
|
|
31
|
+
* @param options - Transform options including mode
|
|
32
|
+
* @returns Flow nodes and edges for React Flow
|
|
33
|
+
*/
|
|
34
|
+
export function spansToFlow(spanTree, totalDuration, options = {}) {
|
|
35
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
36
|
+
// Use execution-order mode by default (Step Functions style)
|
|
37
|
+
if (opts.mode === 'execution-order') {
|
|
38
|
+
return spansToExecutionFlow(spanTree, totalDuration, opts);
|
|
39
|
+
}
|
|
40
|
+
// Legacy hierarchy mode (parent-child edges)
|
|
41
|
+
return spansToHierarchyFlow(spanTree, totalDuration, opts);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Legacy hierarchy mode: parent-child edges
|
|
45
|
+
*/
|
|
46
|
+
function spansToHierarchyFlow(spanTree, totalDuration, opts) {
|
|
47
|
+
const nodes = [];
|
|
48
|
+
const edges = [];
|
|
49
|
+
// Build nodes and edges from span tree
|
|
50
|
+
const processSpan = (span, parentId) => {
|
|
51
|
+
// Create node
|
|
52
|
+
const node = {
|
|
53
|
+
id: span.spanId,
|
|
54
|
+
type: span.category.toLowerCase(),
|
|
55
|
+
data: {
|
|
56
|
+
span,
|
|
57
|
+
totalDuration,
|
|
58
|
+
},
|
|
59
|
+
position: { x: 0, y: 0 }, // Will be set by layout
|
|
60
|
+
style: {
|
|
61
|
+
width: opts.nodeWidth,
|
|
62
|
+
height: opts.nodeHeight,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
nodes.push(node);
|
|
66
|
+
// Create edge from parent
|
|
67
|
+
if (parentId) {
|
|
68
|
+
const isParallel = false; // Will be determined later
|
|
69
|
+
edges.push(createEdge(parentId, span.spanId, isParallel));
|
|
70
|
+
}
|
|
71
|
+
// Process children
|
|
72
|
+
if (span.children && span.children.length > 0) {
|
|
73
|
+
const children = span.children;
|
|
74
|
+
// Detect parallel execution among siblings
|
|
75
|
+
const parallelGroups = detectParallelExecution(children);
|
|
76
|
+
const parallelSpanIds = new Set(parallelGroups.flatMap(g => g.spans.map(s => s.spanId)));
|
|
77
|
+
// Update edges for parallel spans
|
|
78
|
+
children.forEach(child => {
|
|
79
|
+
processSpan(child, span.spanId);
|
|
80
|
+
// Mark edge as parallel if span is in a parallel group
|
|
81
|
+
if (parallelSpanIds.has(child.spanId)) {
|
|
82
|
+
const edge = edges.find(e => e.source === span.spanId && e.target === child.spanId);
|
|
83
|
+
if (edge) {
|
|
84
|
+
edge.animated = true;
|
|
85
|
+
edge.style = {
|
|
86
|
+
...edge.style,
|
|
87
|
+
stroke: '#f59e0b',
|
|
88
|
+
strokeDasharray: '5,5',
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
// Process all root spans
|
|
96
|
+
spanTree.forEach(span => processSpan(span));
|
|
97
|
+
// Apply layout
|
|
98
|
+
const layoutedResult = applyDagreLayout(nodes, edges, opts);
|
|
99
|
+
return layoutedResult;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Create an edge between two nodes
|
|
103
|
+
*/
|
|
104
|
+
function createEdge(sourceId, targetId, isParallel) {
|
|
105
|
+
return {
|
|
106
|
+
id: `${sourceId}-${targetId}`,
|
|
107
|
+
source: sourceId,
|
|
108
|
+
target: targetId,
|
|
109
|
+
type: 'smoothstep',
|
|
110
|
+
animated: isParallel,
|
|
111
|
+
style: {
|
|
112
|
+
stroke: isParallel ? '#f59e0b' : '#64748b',
|
|
113
|
+
strokeWidth: 2,
|
|
114
|
+
strokeDasharray: isParallel ? '5,5' : undefined,
|
|
115
|
+
},
|
|
116
|
+
markerEnd: {
|
|
117
|
+
type: MarkerType.ArrowClosed,
|
|
118
|
+
width: 12,
|
|
119
|
+
height: 12,
|
|
120
|
+
color: isParallel ? '#f59e0b' : '#64748b',
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Detect parallel execution among sibling spans by checking time overlap
|
|
126
|
+
*/
|
|
127
|
+
export function detectParallelExecution(spans) {
|
|
128
|
+
if (spans.length < 2)
|
|
129
|
+
return [];
|
|
130
|
+
// Sort by start time
|
|
131
|
+
const sorted = [...spans].sort((a, b) => new Date(a.startTime).getTime() - new Date(b.startTime).getTime());
|
|
132
|
+
const groups = [];
|
|
133
|
+
let currentGroup = [sorted[0]];
|
|
134
|
+
let groupEndTime = new Date(sorted[0].endTime).getTime();
|
|
135
|
+
for (let i = 1; i < sorted.length; i++) {
|
|
136
|
+
const span = sorted[i];
|
|
137
|
+
const spanStart = new Date(span.startTime).getTime();
|
|
138
|
+
const spanEnd = new Date(span.endTime).getTime();
|
|
139
|
+
// Check if this span overlaps with the current group
|
|
140
|
+
// Using a threshold of 10% of the span's duration to account for minor timing differences
|
|
141
|
+
const overlapThreshold = Math.min((groupEndTime - new Date(currentGroup[0].startTime).getTime()) * 0.1, 100 // Max 100ms threshold
|
|
142
|
+
);
|
|
143
|
+
if (spanStart < groupEndTime + overlapThreshold) {
|
|
144
|
+
// Overlaps - add to current group
|
|
145
|
+
currentGroup.push(span);
|
|
146
|
+
groupEndTime = Math.max(groupEndTime, spanEnd);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// No overlap - save current group if it has multiple spans
|
|
150
|
+
if (currentGroup.length > 1) {
|
|
151
|
+
groups.push({
|
|
152
|
+
spans: currentGroup,
|
|
153
|
+
startTime: new Date(currentGroup[0].startTime).getTime(),
|
|
154
|
+
endTime: groupEndTime,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
// Start new group
|
|
158
|
+
currentGroup = [span];
|
|
159
|
+
groupEndTime = spanEnd;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Don't forget the last group
|
|
163
|
+
if (currentGroup.length > 1) {
|
|
164
|
+
groups.push({
|
|
165
|
+
spans: currentGroup,
|
|
166
|
+
startTime: new Date(currentGroup[0].startTime).getTime(),
|
|
167
|
+
endTime: groupEndTime,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
return groups;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Apply dagre layout algorithm to position nodes
|
|
174
|
+
*/
|
|
175
|
+
export function applyDagreLayout(nodes, edges, options = {}) {
|
|
176
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
177
|
+
const dagreGraph = new dagre.graphlib.Graph();
|
|
178
|
+
dagreGraph.setDefaultEdgeLabel(() => ({}));
|
|
179
|
+
dagreGraph.setGraph({
|
|
180
|
+
rankdir: opts.direction,
|
|
181
|
+
nodesep: opts.nodeSpacingX,
|
|
182
|
+
ranksep: opts.nodeSpacingY,
|
|
183
|
+
marginx: 20,
|
|
184
|
+
marginy: 20,
|
|
185
|
+
});
|
|
186
|
+
// Add nodes to dagre
|
|
187
|
+
nodes.forEach(node => {
|
|
188
|
+
dagreGraph.setNode(node.id, {
|
|
189
|
+
width: opts.nodeWidth,
|
|
190
|
+
height: opts.nodeHeight,
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
// Add edges to dagre
|
|
194
|
+
edges.forEach(edge => {
|
|
195
|
+
dagreGraph.setEdge(edge.source, edge.target);
|
|
196
|
+
});
|
|
197
|
+
// Run layout algorithm
|
|
198
|
+
dagre.layout(dagreGraph);
|
|
199
|
+
// Apply calculated positions to nodes
|
|
200
|
+
const layoutedNodes = nodes.map(node => {
|
|
201
|
+
const nodeWithPosition = dagreGraph.node(node.id);
|
|
202
|
+
return {
|
|
203
|
+
...node,
|
|
204
|
+
position: {
|
|
205
|
+
x: nodeWithPosition.x - opts.nodeWidth / 2,
|
|
206
|
+
y: nodeWithPosition.y - opts.nodeHeight / 2,
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
});
|
|
210
|
+
return { nodes: layoutedNodes, edges };
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Get total span count from a tree (for stats display)
|
|
214
|
+
*/
|
|
215
|
+
export function countSpansInTree(spans) {
|
|
216
|
+
let count = 0;
|
|
217
|
+
const countRecursive = (nodes) => {
|
|
218
|
+
for (const node of nodes) {
|
|
219
|
+
count++;
|
|
220
|
+
if (node.children) {
|
|
221
|
+
countRecursive(node.children);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
countRecursive(spans);
|
|
226
|
+
return count;
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=flowTransform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flowTransform.js","sourceRoot":"","sources":["../../../../services/traces/flowTransform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Traces Service - Fetch and process trace data from OpenSearch
|
|
3
|
+
*/
|
|
4
|
+
import { Span, TimeRange, TraceQueryParams, TraceSearchResult } from '../../types/index.js';
|
|
5
|
+
export { groupSpansByTrace, getSpansForTrace } from './traceGrouping.js';
|
|
6
|
+
export { extractMessagesFromSpans } from './messageExtraction.js';
|
|
7
|
+
/**
|
|
8
|
+
* Fetch traces from the backend API
|
|
9
|
+
* Backend handles config resolution (file or env vars) - no headers needed from frontend
|
|
10
|
+
*/
|
|
11
|
+
export declare function fetchTraces(params: TraceQueryParams): Promise<TraceSearchResult>;
|
|
12
|
+
/**
|
|
13
|
+
* Fetch traces by trace ID
|
|
14
|
+
*/
|
|
15
|
+
export declare function fetchTraceById(traceId: string): Promise<TraceSearchResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Fetch traces by run IDs
|
|
18
|
+
*/
|
|
19
|
+
export declare function fetchTracesByRunIds(runIds: string[]): Promise<TraceSearchResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Fetch traces correlated with a single test-case run, using all available
|
|
22
|
+
* correlation strategies (see AGENTS.md → Trace correlation conventions):
|
|
23
|
+
*
|
|
24
|
+
* A. traceId — W3C-propagated agents share traceId with the eval span
|
|
25
|
+
* B. runId — agents tag spans with `agent_health.run.id == runId` (or the
|
|
26
|
+
* OTEL-standard `gen_ai.conversation.id`); the server query
|
|
27
|
+
* unions both. NOT `gen_ai.request.id` — that is not a
|
|
28
|
+
* registered Gen AI semconv attribute. See AGENTS.md → Strategy B.
|
|
29
|
+
* C. agents — service.name + time-window fallback (opt-in / `includeWindowFallback`)
|
|
30
|
+
*
|
|
31
|
+
* Strategies A and B are always safe (no false positives). Strategy C is
|
|
32
|
+
* opt-in because it can surface concurrent runs of the same agent and
|
|
33
|
+
* cross-team noise on a shared cluster.
|
|
34
|
+
*/
|
|
35
|
+
export declare function fetchTracesForRun(params: {
|
|
36
|
+
/**
|
|
37
|
+
* Agent run id (Strategy B correlation). Optional — runs persisted via the
|
|
38
|
+
* deferred trace-mode path may not carry one; in that case correlation
|
|
39
|
+
* falls back to the time-window `windowAgents` clause (Strategy C).
|
|
40
|
+
*/
|
|
41
|
+
runId?: string;
|
|
42
|
+
evalTraceId?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Strategy A (direct): the report's own `traceId`. Agents that emit their
|
|
45
|
+
* own OTel trace (e.g. pi) carry it on every span but NOT our connector
|
|
46
|
+
* `runId`, so a direct `traceId` lookup returns the run's spans immediately
|
|
47
|
+
* — independent of the deep-dive's window hints.
|
|
48
|
+
*/
|
|
49
|
+
traceId?: string;
|
|
50
|
+
/**
|
|
51
|
+
* Strategy D (direct): the report's `session.id`. Claude Code stamps it on
|
|
52
|
+
* every span; a direct `sessionId` lookup correlates without needing a
|
|
53
|
+
* window. (Server matches both the analyzed field and its `.keyword`.)
|
|
54
|
+
*/
|
|
55
|
+
sessionId?: string;
|
|
56
|
+
includeWindowFallback?: boolean;
|
|
57
|
+
windowAgents?: Array<{
|
|
58
|
+
serviceName: string;
|
|
59
|
+
startedAt: number;
|
|
60
|
+
endedAt: number;
|
|
61
|
+
sessionId?: string;
|
|
62
|
+
}>;
|
|
63
|
+
size?: number;
|
|
64
|
+
}): Promise<TraceSearchResult>;
|
|
65
|
+
/**
|
|
66
|
+
* Fetch recent traces for live tailing
|
|
67
|
+
*/
|
|
68
|
+
export declare function fetchRecentTraces(options: {
|
|
69
|
+
minutesAgo?: number;
|
|
70
|
+
sessionId?: string;
|
|
71
|
+
serviceName?: string;
|
|
72
|
+
textSearch?: string;
|
|
73
|
+
size?: number;
|
|
74
|
+
cursor?: string;
|
|
75
|
+
}): Promise<TraceSearchResult>;
|
|
76
|
+
/**
|
|
77
|
+
* Fetch all traces for a Claude Code session by session ID
|
|
78
|
+
*/
|
|
79
|
+
export declare function fetchTracesBySessionId(sessionId: string): Promise<TraceSearchResult>;
|
|
80
|
+
/**
|
|
81
|
+
* Check traces API health
|
|
82
|
+
* Backend handles config resolution (file or env vars) - no headers needed from frontend
|
|
83
|
+
*/
|
|
84
|
+
export declare function checkTracesHealth(): Promise<{
|
|
85
|
+
status: string;
|
|
86
|
+
index?: string;
|
|
87
|
+
error?: string;
|
|
88
|
+
}>;
|
|
89
|
+
/**
|
|
90
|
+
* Process flat spans into a hierarchical tree structure
|
|
91
|
+
*/
|
|
92
|
+
export declare function processSpansIntoTree(flatSpans: Span[]): Span[];
|
|
93
|
+
/**
|
|
94
|
+
* Calculate global time range across all spans
|
|
95
|
+
*/
|
|
96
|
+
export declare function calculateTimeRange(spans: Span[]): TimeRange;
|
|
97
|
+
/**
|
|
98
|
+
* Get color for a span based on its type/name
|
|
99
|
+
*/
|
|
100
|
+
export declare function getSpanColor(span: Span): string;
|
|
101
|
+
/**
|
|
102
|
+
* Compute the initial expanded-spans set for a trace: every root, plus
|
|
103
|
+
* every ancestor of any ERROR-status span so the failing span is visible
|
|
104
|
+
* on load instead of hidden behind collapsed parents (TraceTree and
|
|
105
|
+
* Timeline both key off this set).
|
|
106
|
+
*/
|
|
107
|
+
export declare function getInitialExpandedSpans(spanTree: Span[]): Set<string>;
|
|
108
|
+
/**
|
|
109
|
+
* Flatten tree into visible spans based on expanded state
|
|
110
|
+
*/
|
|
111
|
+
export declare function flattenVisibleSpans(spans: Span[], expandedSpans: Set<string>, depth?: number): Span[];
|
|
112
|
+
export { categorizeSpan, categorizeSpans, categorizeSpanTree, getSpanCategory, getCategoryMeta, filterSpansByCategory, filterSpanTreeByCategory, countByCategory, buildDisplayName, checkOTelCompliance, hasAnyWarnings, } from './spanCategorization.js';
|
|
113
|
+
export { extractCommonArgKeys, groupToolSpans, calculateToolSimilarity, getToolGroupStats, } from './toolSimilarity.js';
|
|
114
|
+
export { calculateSpanSimilarity, compareTraces, flattenAlignedTree, getComparisonTypeInfo, } from './traceComparison.js';
|
|
115
|
+
export { spansToFlow, applyDagreLayout, detectParallelExecution, countSpansInTree, } from './flowTransform.js';
|
|
116
|
+
export { spansToExecutionFlow, isContainerSpan, findMainFlowSpans, sortByStartTime, } from './executionOrderTransform.js';
|
|
117
|
+
export { spansToIntentNodes, getRootContainerSpan, } from './intentTransform.js';
|
|
118
|
+
export { CATEGORY_COLORS, getCategoryColors, type CategoryColorConfig, } from './categoryStyles.js';
|
|
119
|
+
export { flattenSpans, calculateCategoryStats, extractToolName, extractToolStats, type CategoryStats, type ToolInfo, } from './traceStats.js';
|
|
120
|
+
export { computeTraceSummary, isEmptyTraceSummary, type TraceSummary, } from './traceSummary.js';
|
|
121
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../services/traces/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { getSpanCategory } from './spanCategorization.js';
|
|
6
|
+
import { getBackendUrl } from '../../lib/portConfig.js';
|
|
7
|
+
// Re-export trace grouping utilities
|
|
8
|
+
export { groupSpansByTrace, getSpansForTrace } from './traceGrouping.js';
|
|
9
|
+
// Re-export message extraction
|
|
10
|
+
export { extractMessagesFromSpans } from './messageExtraction.js';
|
|
11
|
+
/**
|
|
12
|
+
* Get API base URL dynamically
|
|
13
|
+
* Server-side (Node.js): Use localhost with AH_PORT env var (legacy: AGENT_HEALTH_PORT)
|
|
14
|
+
* Client-side (browser): Use relative URLs
|
|
15
|
+
*/
|
|
16
|
+
function getApiBaseUrl() {
|
|
17
|
+
const isServerSide = typeof window === 'undefined';
|
|
18
|
+
if (isServerSide) {
|
|
19
|
+
// Server-side self-call — use the canonical backend URL (AH_PORT is kept
|
|
20
|
+
// in lockstep with the actual bound port; see server lifecycle).
|
|
21
|
+
return getBackendUrl();
|
|
22
|
+
}
|
|
23
|
+
return ''; // Relative URLs in browser
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Fetch traces from the backend API
|
|
27
|
+
* Backend handles config resolution (file or env vars) - no headers needed from frontend
|
|
28
|
+
*/
|
|
29
|
+
export async function fetchTraces(params) {
|
|
30
|
+
const response = await fetch(`${getApiBaseUrl()}/api/traces`, {
|
|
31
|
+
method: 'POST',
|
|
32
|
+
headers: {
|
|
33
|
+
'Content-Type': 'application/json',
|
|
34
|
+
},
|
|
35
|
+
body: JSON.stringify(params)
|
|
36
|
+
});
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
const error = await response.json().catch(() => ({ error: 'Unknown error' }));
|
|
39
|
+
throw new Error(error.error || `HTTP ${response.status}`);
|
|
40
|
+
}
|
|
41
|
+
return response.json();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Fetch traces by trace ID
|
|
45
|
+
*/
|
|
46
|
+
export async function fetchTraceById(traceId) {
|
|
47
|
+
return fetchTraces({ traceId });
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Fetch traces by run IDs
|
|
51
|
+
*/
|
|
52
|
+
export async function fetchTracesByRunIds(runIds) {
|
|
53
|
+
return fetchTraces({ runIds });
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Fetch traces correlated with a single test-case run, using all available
|
|
57
|
+
* correlation strategies (see AGENTS.md → Trace correlation conventions):
|
|
58
|
+
*
|
|
59
|
+
* A. traceId — W3C-propagated agents share traceId with the eval span
|
|
60
|
+
* B. runId — agents tag spans with `agent_health.run.id == runId` (or the
|
|
61
|
+
* OTEL-standard `gen_ai.conversation.id`); the server query
|
|
62
|
+
* unions both. NOT `gen_ai.request.id` — that is not a
|
|
63
|
+
* registered Gen AI semconv attribute. See AGENTS.md → Strategy B.
|
|
64
|
+
* C. agents — service.name + time-window fallback (opt-in / `includeWindowFallback`)
|
|
65
|
+
*
|
|
66
|
+
* Strategies A and B are always safe (no false positives). Strategy C is
|
|
67
|
+
* opt-in because it can surface concurrent runs of the same agent and
|
|
68
|
+
* cross-team noise on a shared cluster.
|
|
69
|
+
*/
|
|
70
|
+
export async function fetchTracesForRun(params) {
|
|
71
|
+
const { runId, evalTraceId, traceId, sessionId, includeWindowFallback, windowAgents, size = 1000 } = params;
|
|
72
|
+
// Only include the runIds clause when runId is a non-empty string. A
|
|
73
|
+
// `[undefined]` array makes the server build a `terms: [null]` query that
|
|
74
|
+
// OpenSearch rejects wholesale (taking the Strategy C window fallback down
|
|
75
|
+
// with it). Runs persisted via the deferred trace-mode path may not carry
|
|
76
|
+
// a runId, so this guard is load-bearing for the Traces tab. See #264.
|
|
77
|
+
const query = { size };
|
|
78
|
+
if (typeof runId === 'string' && runId.length > 0) {
|
|
79
|
+
query.runIds = [runId];
|
|
80
|
+
}
|
|
81
|
+
// traceId: explicit param wins, else the eval-span traceId (both → query.traceId).
|
|
82
|
+
if (traceId || evalTraceId)
|
|
83
|
+
query.traceId = traceId || evalTraceId;
|
|
84
|
+
if (typeof sessionId === 'string' && sessionId.length > 0)
|
|
85
|
+
query.sessionId = sessionId;
|
|
86
|
+
if (includeWindowFallback && windowAgents && windowAgents.length > 0) {
|
|
87
|
+
query.agents = windowAgents;
|
|
88
|
+
}
|
|
89
|
+
return fetchTraces(query);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Fetch recent traces for live tailing
|
|
93
|
+
*/
|
|
94
|
+
export async function fetchRecentTraces(options) {
|
|
95
|
+
const { minutesAgo = 5, sessionId, serviceName, textSearch, size = 100, cursor } = options;
|
|
96
|
+
// Session queries don't need a time range — fetch all spans for the session
|
|
97
|
+
if (sessionId) {
|
|
98
|
+
return fetchTraces({ sessionId, serviceName, textSearch, size, cursor });
|
|
99
|
+
}
|
|
100
|
+
const now = Date.now();
|
|
101
|
+
const startTime = now - (minutesAgo * 60 * 1000);
|
|
102
|
+
return fetchTraces({
|
|
103
|
+
startTime,
|
|
104
|
+
endTime: now,
|
|
105
|
+
serviceName,
|
|
106
|
+
textSearch,
|
|
107
|
+
size,
|
|
108
|
+
cursor,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Fetch all traces for a Claude Code session by session ID
|
|
113
|
+
*/
|
|
114
|
+
export async function fetchTracesBySessionId(sessionId) {
|
|
115
|
+
return fetchTraces({ sessionId, size: 1000 });
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Check traces API health
|
|
119
|
+
* Backend handles config resolution (file or env vars) - no headers needed from frontend
|
|
120
|
+
*/
|
|
121
|
+
export async function checkTracesHealth() {
|
|
122
|
+
const response = await fetch(`${getApiBaseUrl()}/api/traces/health`);
|
|
123
|
+
return response.json();
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Process flat spans into a hierarchical tree structure
|
|
127
|
+
*/
|
|
128
|
+
export function processSpansIntoTree(flatSpans) {
|
|
129
|
+
if (!flatSpans || flatSpans.length === 0)
|
|
130
|
+
return [];
|
|
131
|
+
const spanMap = new Map();
|
|
132
|
+
const roots = [];
|
|
133
|
+
// First pass: index all spans
|
|
134
|
+
flatSpans.forEach(span => {
|
|
135
|
+
spanMap.set(span.spanId, { ...span, children: [] });
|
|
136
|
+
});
|
|
137
|
+
// Second pass: build tree structure
|
|
138
|
+
spanMap.forEach(span => {
|
|
139
|
+
if (span.parentSpanId && spanMap.has(span.parentSpanId)) {
|
|
140
|
+
const parent = spanMap.get(span.parentSpanId);
|
|
141
|
+
parent.children = parent.children || [];
|
|
142
|
+
parent.children.push(span);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
roots.push(span);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
// Sort children by startTime
|
|
149
|
+
const sortChildren = (spans) => {
|
|
150
|
+
spans.sort((a, b) => new Date(a.startTime).getTime() - new Date(b.startTime).getTime());
|
|
151
|
+
spans.forEach(span => {
|
|
152
|
+
if (span.children && span.children.length > 0) {
|
|
153
|
+
sortChildren(span.children);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
};
|
|
157
|
+
sortChildren(roots);
|
|
158
|
+
return roots;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Calculate global time range across all spans
|
|
162
|
+
*/
|
|
163
|
+
export function calculateTimeRange(spans) {
|
|
164
|
+
if (!spans || spans.length === 0) {
|
|
165
|
+
return { startTime: 0, endTime: 0, duration: 0 };
|
|
166
|
+
}
|
|
167
|
+
let startTime = Infinity;
|
|
168
|
+
let endTime = -Infinity;
|
|
169
|
+
spans.forEach(span => {
|
|
170
|
+
const spanStart = new Date(span.startTime).getTime();
|
|
171
|
+
const spanEnd = new Date(span.endTime).getTime();
|
|
172
|
+
if (spanStart < startTime)
|
|
173
|
+
startTime = spanStart;
|
|
174
|
+
if (spanEnd > endTime)
|
|
175
|
+
endTime = spanEnd;
|
|
176
|
+
});
|
|
177
|
+
return {
|
|
178
|
+
startTime,
|
|
179
|
+
endTime,
|
|
180
|
+
duration: endTime - startTime
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get color for a span based on its type/name
|
|
185
|
+
*/
|
|
186
|
+
export function getSpanColor(span) {
|
|
187
|
+
const category = getSpanCategory(span);
|
|
188
|
+
const CATEGORY_HEX = {
|
|
189
|
+
AGENT: '#6366f1', // indigo
|
|
190
|
+
LLM: '#a855f7', // purple
|
|
191
|
+
TOOL: '#f59e0b', // amber
|
|
192
|
+
EVAL: '#10b981', // emerald
|
|
193
|
+
ERROR: '#ef4444', // red
|
|
194
|
+
OTHER: '#64748b', // slate
|
|
195
|
+
};
|
|
196
|
+
return CATEGORY_HEX[category] || CATEGORY_HEX.OTHER;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Compute the initial expanded-spans set for a trace: every root, plus
|
|
200
|
+
* every ancestor of any ERROR-status span so the failing span is visible
|
|
201
|
+
* on load instead of hidden behind collapsed parents (TraceTree and
|
|
202
|
+
* Timeline both key off this set).
|
|
203
|
+
*/
|
|
204
|
+
export function getInitialExpandedSpans(spanTree) {
|
|
205
|
+
const expanded = new Set();
|
|
206
|
+
const walk = (spans, ancestors) => {
|
|
207
|
+
for (const span of spans) {
|
|
208
|
+
if (!span.parentSpanId)
|
|
209
|
+
expanded.add(span.spanId);
|
|
210
|
+
if (span.status === 'ERROR') {
|
|
211
|
+
for (const id of ancestors)
|
|
212
|
+
expanded.add(id);
|
|
213
|
+
}
|
|
214
|
+
if (span.children?.length) {
|
|
215
|
+
walk(span.children, [...ancestors, span.spanId]);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
walk(spanTree, []);
|
|
220
|
+
return expanded;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Flatten tree into visible spans based on expanded state
|
|
224
|
+
*/
|
|
225
|
+
export function flattenVisibleSpans(spans, expandedSpans, depth = 0) {
|
|
226
|
+
const result = [];
|
|
227
|
+
for (const span of spans) {
|
|
228
|
+
const hasChildren = (span.children?.length || 0) > 0;
|
|
229
|
+
result.push({ ...span, depth, hasChildren });
|
|
230
|
+
if (hasChildren && expandedSpans.has(span.spanId)) {
|
|
231
|
+
result.push(...flattenVisibleSpans(span.children, expandedSpans, depth + 1));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return result;
|
|
235
|
+
}
|
|
236
|
+
// Re-export categorization functions
|
|
237
|
+
export { categorizeSpan, categorizeSpans, categorizeSpanTree, getSpanCategory, getCategoryMeta, filterSpansByCategory, filterSpanTreeByCategory, countByCategory, buildDisplayName, checkOTelCompliance, hasAnyWarnings, } from './spanCategorization.js';
|
|
238
|
+
// Re-export tool similarity functions
|
|
239
|
+
export { extractCommonArgKeys, groupToolSpans, calculateToolSimilarity, getToolGroupStats, } from './toolSimilarity.js';
|
|
240
|
+
// Re-export trace comparison functions
|
|
241
|
+
export { calculateSpanSimilarity, compareTraces, flattenAlignedTree, getComparisonTypeInfo, } from './traceComparison.js';
|
|
242
|
+
// Re-export flow transform functions
|
|
243
|
+
export { spansToFlow, applyDagreLayout, detectParallelExecution, countSpansInTree, } from './flowTransform.js';
|
|
244
|
+
// Re-export execution order transform functions
|
|
245
|
+
export { spansToExecutionFlow, isContainerSpan, findMainFlowSpans, sortByStartTime, } from './executionOrderTransform.js';
|
|
246
|
+
// Re-export intent transform functions
|
|
247
|
+
export { spansToIntentNodes, getRootContainerSpan, } from './intentTransform.js';
|
|
248
|
+
// Re-export category styles
|
|
249
|
+
export { CATEGORY_COLORS, getCategoryColors, } from './categoryStyles.js';
|
|
250
|
+
// Re-export trace stats utilities
|
|
251
|
+
export { flattenSpans, calculateCategoryStats, extractToolName, extractToolStats, } from './traceStats.js';
|
|
252
|
+
// Trace-level summary (category counts + tokens + models) reused by both
|
|
253
|
+
// the inline expansion header and the fullscreen header.
|
|
254
|
+
export { computeTraceSummary, isEmptyTraceSummary, } from './traceSummary.js';
|
|
255
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../services/traces/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,qCAAqC;AACrC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,+BAA+B;AAC/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D;;;;GAIG;AACH,SAAS,aAAa;IACpB,MAAM,YAAY,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACnD,IAAI,YAAY,EAAE,CAAC;QACjB,yEAAyE;QACzE,iEAAiE;QACjE,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,EAAE,CAAC,CAAC,2BAA2B;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAwB;IACxD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,EAAE,aAAa,EAAE;QAC5D,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;KAC7B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IAClD,OAAO,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAgB;IACxD,OAAO,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAwBvC;IACC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,YAAY,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAC5G,qEAAqE;IACrE,0EAA0E;IAC1E,2EAA2E;IAC3E,0EAA0E;IAC1E,uEAAuE;IACvE,MAAM,KAAK,GAAqB,EAAE,IAAI,EAAE,CAAC;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,mFAAmF;IACnF,IAAI,OAAO,IAAI,WAAW;QAAE,KAAK,CAAC,OAAO,GAAG,OAAO,IAAI,WAAW,CAAC;IACnE,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IACvF,IAAI,qBAAqB,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrE,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;IAC9B,CAAC;IACD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAOvC;IACC,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE3F,4EAA4E;IAC5E,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,WAAW,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAEjD,OAAO,WAAW,CAAC;QACjB,SAAS;QACT,OAAO,EAAE,GAAG;QACZ,WAAW;QACX,UAAU;QACV,IAAI;QACJ,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,SAAiB;IAC5D,OAAO,WAAW,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,EAAE,oBAAoB,CAAC,CAAC;IACrE,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgB,CAAC;IACxC,MAAM,KAAK,GAAW,EAAE,CAAC;IAEzB,8BAA8B;IAC9B,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,oCAAoC;IACpC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACrB,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACxD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAE,CAAC;YAC/C,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;YACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,6BAA6B;IAC7B,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;QACrC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACxF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,YAAY,CAAC,KAAK,CAAC,CAAC;IACpB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACnD,CAAC;IAED,IAAI,SAAS,GAAG,QAAQ,CAAC;IACzB,IAAI,OAAO,GAAG,CAAC,QAAQ,CAAC;IAExB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACjD,IAAI,SAAS,GAAG,SAAS;YAAE,SAAS,GAAG,SAAS,CAAC;QACjD,IAAI,OAAO,GAAG,OAAO;YAAE,OAAO,GAAG,OAAO,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,SAAS;QACT,OAAO;QACP,QAAQ,EAAE,OAAO,GAAG,SAAS;KAC9B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAU;IACrC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAEvC,MAAM,YAAY,GAA2B;QAC3C,KAAK,EAAE,SAAS,EAAG,SAAS;QAC5B,GAAG,EAAE,SAAS,EAAK,SAAS;QAC5B,IAAI,EAAE,SAAS,EAAI,QAAQ;QAC3B,IAAI,EAAE,SAAS,EAAI,UAAU;QAC7B,KAAK,EAAE,SAAS,EAAG,MAAM;QACzB,KAAK,EAAE,SAAS,EAAG,QAAQ;KAC5B,CAAC;IAEF,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,SAAmB,EAAQ,EAAE;QACxD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC5B,KAAK,MAAM,EAAE,IAAI,SAAS;oBAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,aAA0B,EAC1B,KAAK,GAAG,CAAC;IAET,MAAM,MAAM,GAAW,EAAE,CAAC;IAE1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAE7C,IAAI,WAAW,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAS,EAAE,aAAa,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qCAAqC;AACrC,OAAO,EACL,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,sCAAsC;AACtC,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,uCAAuC;AACvC,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAE3B,qCAAqC;AACrC,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,gDAAgD;AAChD,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,eAAe,GAChB,MAAM,2BAA2B,CAAC;AAEnC,uCAAuC;AACvC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAE3B,4BAA4B;AAC5B,OAAO,EACL,eAAe,EACf,iBAAiB,GAElB,MAAM,kBAAkB,CAAC;AAE1B,kCAAkC;AAClC,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,eAAe,EACf,gBAAgB,GAGjB,MAAM,cAAc,CAAC;AAEtB,yEAAyE;AACzE,yDAAyD;AACzD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GAEpB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Intent Transform Service
|
|
3
|
+
*
|
|
4
|
+
* Transforms span trees into time-series compressed nodes for Intent view.
|
|
5
|
+
* Groups only CONSECUTIVE same-category spans, preserving execution order.
|
|
6
|
+
*
|
|
7
|
+
* Example: LLM, TOOL, LLM, TOOL, TOOL, LLM
|
|
8
|
+
* Result: [LLM], [TOOL], [LLM], [TOOL ×2], [LLM]
|
|
9
|
+
*/
|
|
10
|
+
import { CategorizedSpan, IntentNode } from '../../types/index.js';
|
|
11
|
+
/**
|
|
12
|
+
* Transform a categorized span tree into IntentNodes for the Intent view.
|
|
13
|
+
* Groups only consecutive same-category spans, preserving execution order.
|
|
14
|
+
*/
|
|
15
|
+
export declare function spansToIntentNodes(spanTree: CategorizedSpan[]): IntentNode[];
|
|
16
|
+
/**
|
|
17
|
+
* Get the root/container span for display as header (if exists)
|
|
18
|
+
*/
|
|
19
|
+
export declare function getRootContainerSpan(spanTree: CategorizedSpan[]): CategorizedSpan | null;
|
|
20
|
+
//# sourceMappingURL=intentTransform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intentTransform.d.ts","sourceRoot":"","sources":["../../../../services/traces/intentTransform.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,UAAU,EAAgB,MAAM,SAAS,CAAC;AA0HpE;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,UAAU,EAAE,CAM5E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,eAAe,GAAG,IAAI,CAYxF"}
|