@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,56 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
export const CATEGORY_COLORS = {
|
|
6
|
+
AGENT: {
|
|
7
|
+
border: 'border-indigo-500/50',
|
|
8
|
+
bg: 'bg-indigo-500/10',
|
|
9
|
+
text: 'text-indigo-400',
|
|
10
|
+
bar: 'bg-indigo-500',
|
|
11
|
+
chipHover: 'hover:bg-indigo-500/20',
|
|
12
|
+
},
|
|
13
|
+
LLM: {
|
|
14
|
+
border: 'border-purple-500/50',
|
|
15
|
+
bg: 'bg-purple-500/10',
|
|
16
|
+
text: 'text-purple-400',
|
|
17
|
+
bar: 'bg-purple-500',
|
|
18
|
+
chipHover: 'hover:bg-purple-500/20',
|
|
19
|
+
},
|
|
20
|
+
TOOL: {
|
|
21
|
+
border: 'border-amber-500/50',
|
|
22
|
+
bg: 'bg-amber-500/10',
|
|
23
|
+
text: 'text-amber-400',
|
|
24
|
+
bar: 'bg-amber-500',
|
|
25
|
+
chipHover: 'hover:bg-amber-500/20',
|
|
26
|
+
},
|
|
27
|
+
EVAL: {
|
|
28
|
+
border: 'border-emerald-500/50',
|
|
29
|
+
bg: 'bg-emerald-500/10',
|
|
30
|
+
text: 'text-emerald-400',
|
|
31
|
+
bar: 'bg-emerald-500',
|
|
32
|
+
chipHover: 'hover:bg-emerald-500/20',
|
|
33
|
+
},
|
|
34
|
+
ERROR: {
|
|
35
|
+
border: 'border-red-500/50',
|
|
36
|
+
bg: 'bg-red-500/10',
|
|
37
|
+
text: 'text-red-400',
|
|
38
|
+
bar: 'bg-red-500',
|
|
39
|
+
chipHover: 'hover:bg-red-500/20',
|
|
40
|
+
},
|
|
41
|
+
OTHER: {
|
|
42
|
+
border: 'border-slate-500/50',
|
|
43
|
+
bg: 'bg-slate-500/10',
|
|
44
|
+
text: 'text-slate-400',
|
|
45
|
+
bar: 'bg-slate-500',
|
|
46
|
+
chipHover: 'hover:bg-slate-500/20',
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Get category colors for a given category string.
|
|
51
|
+
* Falls back to OTHER for unknown categories.
|
|
52
|
+
*/
|
|
53
|
+
export function getCategoryColors(category) {
|
|
54
|
+
return CATEGORY_COLORS[category] || CATEGORY_COLORS.OTHER;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=categoryStyles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"categoryStyles.js","sourceRoot":"","sources":["../../../../services/traces/categoryStyles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,MAAM,CAAC,MAAM,eAAe,GAAwD;IAClF,KAAK,EAAE;QACL,MAAM,EAAE,sBAAsB;QAC9B,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,iBAAiB;QACvB,GAAG,EAAE,eAAe;QACpB,SAAS,EAAE,wBAAwB;KACpC;IACD,GAAG,EAAE;QACH,MAAM,EAAE,sBAAsB;QAC9B,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,iBAAiB;QACvB,GAAG,EAAE,eAAe;QACpB,SAAS,EAAE,wBAAwB;KACpC;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,qBAAqB;QAC7B,EAAE,EAAE,iBAAiB;QACrB,IAAI,EAAE,gBAAgB;QACtB,GAAG,EAAE,cAAc;QACnB,SAAS,EAAE,uBAAuB;KACnC;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,uBAAuB;QAC/B,EAAE,EAAE,mBAAmB;QACvB,IAAI,EAAE,kBAAkB;QACxB,GAAG,EAAE,gBAAgB;QACrB,SAAS,EAAE,yBAAyB;KACrC;IACD,KAAK,EAAE;QACL,MAAM,EAAE,mBAAmB;QAC3B,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,cAAc;QACpB,GAAG,EAAE,YAAY;QACjB,SAAS,EAAE,qBAAqB;KACjC;IACD,KAAK,EAAE;QACL,MAAM,EAAE,qBAAqB;QAC7B,EAAE,EAAE,iBAAiB;QACrB,IAAI,EAAE,gBAAgB;QACtB,GAAG,EAAE,cAAc;QACnB,SAAS,EAAE,uBAAuB;KACnC;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,OAAO,eAAe,CAAC,QAAwB,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { CategorizedSpan, FlowTransformResult, FlowTransformOptions } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Detect if a span is a container span (wrapper for entire execution).
|
|
4
|
+
* Container spans are excluded from flow nodes - only their children are shown.
|
|
5
|
+
*
|
|
6
|
+
* Uses multiple heuristics to support different agent implementations:
|
|
7
|
+
* 1. OTEL GenAI semantic convention (gen_ai.operation.name)
|
|
8
|
+
* 2. Name-based pattern matching
|
|
9
|
+
* 3. Duration heuristic (span covers 90%+ of children duration)
|
|
10
|
+
*/
|
|
11
|
+
declare function isContainerSpan(span: CategorizedSpan): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Find the main flow spans (entry point for execution flow).
|
|
14
|
+
* Adapts to different agent span structures.
|
|
15
|
+
*/
|
|
16
|
+
declare function findMainFlowSpans(spanTree: CategorizedSpan[]): CategorizedSpan[];
|
|
17
|
+
/**
|
|
18
|
+
* Sort spans by startTime for execution order
|
|
19
|
+
*/
|
|
20
|
+
declare function sortByStartTime(spans: CategorizedSpan[]): CategorizedSpan[];
|
|
21
|
+
/**
|
|
22
|
+
* Main transform function: Convert span tree to execution-order flow.
|
|
23
|
+
*
|
|
24
|
+
* Algorithm:
|
|
25
|
+
* 1. Find main flow spans (skip container root if present)
|
|
26
|
+
* 2. Process each level: create nodes, sequential edges between siblings
|
|
27
|
+
* 3. For spans with children: create branch edges, recurse into children
|
|
28
|
+
* 4. Apply dagre layout for positioning
|
|
29
|
+
*/
|
|
30
|
+
export declare function spansToExecutionFlow(spanTree: CategorizedSpan[], totalDuration: number, options?: FlowTransformOptions): FlowTransformResult;
|
|
31
|
+
/**
|
|
32
|
+
* Export utility functions for testing
|
|
33
|
+
*/
|
|
34
|
+
export { isContainerSpan, findMainFlowSpans, sortByStartTime };
|
|
35
|
+
//# sourceMappingURL=executionOrderTransform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executionOrderTransform.d.ts","sourceRoot":"","sources":["../../../../services/traces/executionOrderTransform.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,eAAe,EAEf,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAqBjB;;;;;;;;GAQG;AACH,iBAAS,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAyCvD;AAED;;;GAGG;AACH,iBAAS,iBAAiB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAmBzE;AAED;;GAEG;AACH,iBAAS,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAIpE;AAmJD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EAAE,EAC3B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,CAgDrB;AAwDD;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Execution Order Transform Service
|
|
7
|
+
*
|
|
8
|
+
* Transforms span trees to React Flow format using execution-order linking
|
|
9
|
+
* (like AWS Step Functions) instead of parent-child hierarchy.
|
|
10
|
+
*
|
|
11
|
+
* Key differences from hierarchy mode:
|
|
12
|
+
* - Siblings at each level linked by execution order (startTime)
|
|
13
|
+
* - Container spans (like agent.run) excluded from flow nodes
|
|
14
|
+
* - Parent→child shown as branch edges (detail), not main flow
|
|
15
|
+
* - Parallel detection only among siblings with overlapping times
|
|
16
|
+
*/
|
|
17
|
+
import { MarkerType } from '@xyflow/react';
|
|
18
|
+
import dagre from 'dagre';
|
|
19
|
+
import { ATTR_GEN_AI_OPERATION_NAME, GEN_AI_OPERATION_NAME_VALUE_INVOKE_AGENT, GEN_AI_OPERATION_NAME_VALUE_CREATE_AGENT, } from '@opentelemetry/semantic-conventions/incubating';
|
|
20
|
+
const DEFAULT_OPTIONS = {
|
|
21
|
+
direction: 'TB',
|
|
22
|
+
mode: 'execution-order',
|
|
23
|
+
nodeWidth: 200,
|
|
24
|
+
nodeHeight: 70,
|
|
25
|
+
nodeSpacingX: 50,
|
|
26
|
+
nodeSpacingY: 80,
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Detect if a span is a container span (wrapper for entire execution).
|
|
30
|
+
* Container spans are excluded from flow nodes - only their children are shown.
|
|
31
|
+
*
|
|
32
|
+
* Uses multiple heuristics to support different agent implementations:
|
|
33
|
+
* 1. OTEL GenAI semantic convention (gen_ai.operation.name)
|
|
34
|
+
* 2. Name-based pattern matching
|
|
35
|
+
* 3. Duration heuristic (span covers 90%+ of children duration)
|
|
36
|
+
*/
|
|
37
|
+
function isContainerSpan(span) {
|
|
38
|
+
// 1. OTEL GenAI convention: invoke_agent/create_agent are container operations
|
|
39
|
+
const operationName = span.attributes?.[ATTR_GEN_AI_OPERATION_NAME];
|
|
40
|
+
if (operationName === GEN_AI_OPERATION_NAME_VALUE_INVOKE_AGENT ||
|
|
41
|
+
operationName === GEN_AI_OPERATION_NAME_VALUE_CREATE_AGENT) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
// 2. Name-based heuristic for agents that don't use OTEL attributes
|
|
45
|
+
const name = span.name?.toLowerCase() || '';
|
|
46
|
+
if (name.includes('agent.run') || name.includes('invoke_agent')) {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
// 3. Single root with children that spans entire trace
|
|
50
|
+
if (!span.parentSpanId && span.children && span.children.length > 1) {
|
|
51
|
+
const spanStart = new Date(span.startTime).getTime();
|
|
52
|
+
const spanEnd = new Date(span.endTime).getTime();
|
|
53
|
+
const spanDuration = spanEnd - spanStart;
|
|
54
|
+
// Get min start and max end from children
|
|
55
|
+
const children = span.children;
|
|
56
|
+
let minChildStart = Infinity;
|
|
57
|
+
let maxChildEnd = -Infinity;
|
|
58
|
+
children.forEach(child => {
|
|
59
|
+
const childStart = new Date(child.startTime).getTime();
|
|
60
|
+
const childEnd = new Date(child.endTime).getTime();
|
|
61
|
+
minChildStart = Math.min(minChildStart, childStart);
|
|
62
|
+
maxChildEnd = Math.max(maxChildEnd, childEnd);
|
|
63
|
+
});
|
|
64
|
+
const childrenSpan = maxChildEnd - minChildStart;
|
|
65
|
+
// If span encompasses children (90%+ coverage), it's likely a container
|
|
66
|
+
if (childrenSpan > 0 && spanDuration >= childrenSpan * 0.9) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Find the main flow spans (entry point for execution flow).
|
|
74
|
+
* Adapts to different agent span structures.
|
|
75
|
+
*/
|
|
76
|
+
function findMainFlowSpans(spanTree) {
|
|
77
|
+
// spanTree contains top-level spans from processSpansIntoTree().
|
|
78
|
+
// These are tree roots even if they have a parentSpanId pointing to a span
|
|
79
|
+
// outside the fetched data (e.g., a parent in a different service/trace context).
|
|
80
|
+
// Use all top-level spans as roots instead of filtering by !parentSpanId.
|
|
81
|
+
const roots = spanTree;
|
|
82
|
+
// Case 1: Single root that's a container → main flow is its children
|
|
83
|
+
if (roots.length === 1 && isContainerSpan(roots[0])) {
|
|
84
|
+
const children = roots[0].children || [];
|
|
85
|
+
if (children.length === 0) {
|
|
86
|
+
// Fallback: container has no children, show the root itself instead of empty graph
|
|
87
|
+
return roots;
|
|
88
|
+
}
|
|
89
|
+
return children;
|
|
90
|
+
}
|
|
91
|
+
// Case 2: Multiple roots OR single non-container root → roots are main flow
|
|
92
|
+
return roots;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Sort spans by startTime for execution order
|
|
96
|
+
*/
|
|
97
|
+
function sortByStartTime(spans) {
|
|
98
|
+
return [...spans].sort((a, b) => new Date(a.startTime).getTime() - new Date(b.startTime).getTime());
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Create a flow node from a categorized span
|
|
102
|
+
*/
|
|
103
|
+
function createNode(span, totalDuration, options) {
|
|
104
|
+
return {
|
|
105
|
+
id: span.spanId,
|
|
106
|
+
type: span.category.toLowerCase(),
|
|
107
|
+
data: {
|
|
108
|
+
span,
|
|
109
|
+
totalDuration,
|
|
110
|
+
},
|
|
111
|
+
position: { x: 0, y: 0 }, // Will be set by dagre layout
|
|
112
|
+
style: {
|
|
113
|
+
width: options.nodeWidth,
|
|
114
|
+
height: options.nodeHeight,
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Create an edge between two nodes with appropriate styling
|
|
120
|
+
*/
|
|
121
|
+
function createEdge(sourceId, targetId, edgeType) {
|
|
122
|
+
const baseStyle = {
|
|
123
|
+
strokeWidth: 2,
|
|
124
|
+
};
|
|
125
|
+
switch (edgeType) {
|
|
126
|
+
case 'sequential':
|
|
127
|
+
return {
|
|
128
|
+
id: `${sourceId}-${targetId}`,
|
|
129
|
+
source: sourceId,
|
|
130
|
+
target: targetId,
|
|
131
|
+
type: 'smoothstep',
|
|
132
|
+
animated: false,
|
|
133
|
+
style: {
|
|
134
|
+
...baseStyle,
|
|
135
|
+
stroke: '#64748b', // slate
|
|
136
|
+
},
|
|
137
|
+
markerEnd: {
|
|
138
|
+
type: MarkerType.ArrowClosed,
|
|
139
|
+
width: 12,
|
|
140
|
+
height: 12,
|
|
141
|
+
color: '#64748b',
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
case 'parallel':
|
|
145
|
+
return {
|
|
146
|
+
id: `${sourceId}-${targetId}`,
|
|
147
|
+
source: sourceId,
|
|
148
|
+
target: targetId,
|
|
149
|
+
type: 'smoothstep',
|
|
150
|
+
animated: true,
|
|
151
|
+
style: {
|
|
152
|
+
...baseStyle,
|
|
153
|
+
stroke: '#f59e0b', // amber
|
|
154
|
+
strokeDasharray: '5,5',
|
|
155
|
+
},
|
|
156
|
+
markerEnd: {
|
|
157
|
+
type: MarkerType.ArrowClosed,
|
|
158
|
+
width: 12,
|
|
159
|
+
height: 12,
|
|
160
|
+
color: '#f59e0b',
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
case 'branch':
|
|
164
|
+
return {
|
|
165
|
+
id: `${sourceId}-branch-${targetId}`,
|
|
166
|
+
source: sourceId,
|
|
167
|
+
target: targetId,
|
|
168
|
+
type: 'smoothstep',
|
|
169
|
+
animated: false,
|
|
170
|
+
style: {
|
|
171
|
+
...baseStyle,
|
|
172
|
+
stroke: '#6366f1', // indigo
|
|
173
|
+
strokeDasharray: '3,3',
|
|
174
|
+
strokeWidth: 1.5,
|
|
175
|
+
},
|
|
176
|
+
markerEnd: {
|
|
177
|
+
type: MarkerType.ArrowClosed,
|
|
178
|
+
width: 10,
|
|
179
|
+
height: 10,
|
|
180
|
+
color: '#6366f1',
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Create edges between siblings in execution order.
|
|
187
|
+
* Detects parallel execution when spans overlap in time.
|
|
188
|
+
*/
|
|
189
|
+
function createSiblingEdges(siblings) {
|
|
190
|
+
if (siblings.length < 2)
|
|
191
|
+
return [];
|
|
192
|
+
const edges = [];
|
|
193
|
+
const sorted = sortByStartTime(siblings);
|
|
194
|
+
for (let i = 0; i < sorted.length - 1; i++) {
|
|
195
|
+
const current = sorted[i];
|
|
196
|
+
const next = sorted[i + 1];
|
|
197
|
+
// Check for parallel execution (overlapping times)
|
|
198
|
+
const currentEnd = new Date(current.endTime).getTime();
|
|
199
|
+
const nextStart = new Date(next.startTime).getTime();
|
|
200
|
+
// Allow small overlap threshold (10ms) for timing jitter
|
|
201
|
+
const isParallel = nextStart < currentEnd - 10;
|
|
202
|
+
edges.push(createEdge(current.spanId, next.spanId, isParallel ? 'parallel' : 'sequential'));
|
|
203
|
+
}
|
|
204
|
+
return edges;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Create branch edges from parent to its first child.
|
|
208
|
+
* Shows nesting/detail relationship, not main execution flow.
|
|
209
|
+
*/
|
|
210
|
+
function createBranchEdges(span) {
|
|
211
|
+
if (!span.children || span.children.length === 0)
|
|
212
|
+
return [];
|
|
213
|
+
const children = span.children;
|
|
214
|
+
const sorted = sortByStartTime(children);
|
|
215
|
+
// Edge from parent to first child only (branch off point)
|
|
216
|
+
return [createEdge(span.spanId, sorted[0].spanId, 'branch')];
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Main transform function: Convert span tree to execution-order flow.
|
|
220
|
+
*
|
|
221
|
+
* Algorithm:
|
|
222
|
+
* 1. Find main flow spans (skip container root if present)
|
|
223
|
+
* 2. Process each level: create nodes, sequential edges between siblings
|
|
224
|
+
* 3. For spans with children: create branch edges, recurse into children
|
|
225
|
+
* 4. Apply dagre layout for positioning
|
|
226
|
+
*/
|
|
227
|
+
export function spansToExecutionFlow(spanTree, totalDuration, options = {}) {
|
|
228
|
+
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
229
|
+
const nodes = [];
|
|
230
|
+
const edges = [];
|
|
231
|
+
// Find the main flow entry point
|
|
232
|
+
const mainFlowSpans = findMainFlowSpans(spanTree);
|
|
233
|
+
if (mainFlowSpans.length === 0) {
|
|
234
|
+
return { nodes: [], edges: [] };
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Process a level of siblings in the span hierarchy.
|
|
238
|
+
* Creates nodes and edges for this level, then recurses into children.
|
|
239
|
+
*/
|
|
240
|
+
function processLevel(siblings) {
|
|
241
|
+
if (siblings.length === 0)
|
|
242
|
+
return;
|
|
243
|
+
const sorted = sortByStartTime(siblings);
|
|
244
|
+
// Create nodes for all spans at this level
|
|
245
|
+
sorted.forEach(span => {
|
|
246
|
+
nodes.push(createNode(span, totalDuration, opts));
|
|
247
|
+
});
|
|
248
|
+
// Create sequential edges between siblings
|
|
249
|
+
edges.push(...createSiblingEdges(sorted));
|
|
250
|
+
// Process children for each span
|
|
251
|
+
sorted.forEach(span => {
|
|
252
|
+
if (span.children && span.children.length > 0) {
|
|
253
|
+
const children = span.children;
|
|
254
|
+
// Create branch edge from parent to children
|
|
255
|
+
edges.push(...createBranchEdges(span));
|
|
256
|
+
// Recursively process children
|
|
257
|
+
processLevel(children);
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
// Start processing from main flow level
|
|
262
|
+
processLevel(mainFlowSpans);
|
|
263
|
+
// Apply dagre layout for positioning
|
|
264
|
+
return applyDagreLayout(nodes, edges, opts);
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Apply dagre layout algorithm to position nodes.
|
|
268
|
+
* Uses TB (top-to-bottom) direction for vertical flow.
|
|
269
|
+
*/
|
|
270
|
+
function applyDagreLayout(nodes, edges, options) {
|
|
271
|
+
if (nodes.length === 0) {
|
|
272
|
+
return { nodes: [], edges: [] };
|
|
273
|
+
}
|
|
274
|
+
const dagreGraph = new dagre.graphlib.Graph();
|
|
275
|
+
dagreGraph.setDefaultEdgeLabel(() => ({}));
|
|
276
|
+
dagreGraph.setGraph({
|
|
277
|
+
rankdir: options.direction, // TB for vertical flow
|
|
278
|
+
nodesep: options.nodeSpacingX,
|
|
279
|
+
ranksep: options.nodeSpacingY,
|
|
280
|
+
marginx: 20,
|
|
281
|
+
marginy: 20,
|
|
282
|
+
});
|
|
283
|
+
// Add nodes to dagre
|
|
284
|
+
nodes.forEach(node => {
|
|
285
|
+
dagreGraph.setNode(node.id, {
|
|
286
|
+
width: options.nodeWidth,
|
|
287
|
+
height: options.nodeHeight,
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
// Add edges to dagre
|
|
291
|
+
edges.forEach(edge => {
|
|
292
|
+
dagreGraph.setEdge(edge.source, edge.target);
|
|
293
|
+
});
|
|
294
|
+
// Run layout algorithm
|
|
295
|
+
dagre.layout(dagreGraph);
|
|
296
|
+
// Apply calculated positions to nodes
|
|
297
|
+
const layoutedNodes = nodes.map(node => {
|
|
298
|
+
const nodeWithPosition = dagreGraph.node(node.id);
|
|
299
|
+
return {
|
|
300
|
+
...node,
|
|
301
|
+
position: {
|
|
302
|
+
x: nodeWithPosition.x - options.nodeWidth / 2,
|
|
303
|
+
y: nodeWithPosition.y - options.nodeHeight / 2,
|
|
304
|
+
},
|
|
305
|
+
};
|
|
306
|
+
});
|
|
307
|
+
return { nodes: layoutedNodes, edges };
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Export utility functions for testing
|
|
311
|
+
*/
|
|
312
|
+
export { isContainerSpan, findMainFlowSpans, sortByStartTime };
|
|
313
|
+
//# sourceMappingURL=executionOrderTransform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executionOrderTransform.js","sourceRoot":"","sources":["../../../../services/traces/executionOrderTransform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight polling helper used by the SDK runner to pre-load OTel
|
|
3
|
+
* spans into the `traces` fixture for deterministic test bodies (#230).
|
|
4
|
+
*
|
|
5
|
+
* This is a thinner cousin of `tracePollingManager.startPolling`:
|
|
6
|
+
* - no judge wiring, no report storage updates, no trajectory rebuild
|
|
7
|
+
* - returns a result object that includes the **last error message**
|
|
8
|
+
* when polling never produced spans, so the caller can build a
|
|
9
|
+
* specific `unavailableTracesAccessor("fetch failed: …")` reason
|
|
10
|
+
* instead of a generic "no spans found"
|
|
11
|
+
*
|
|
12
|
+
* **Defaults are deliberately faster than the judge poller** in
|
|
13
|
+
* `services/traces/tracePoller.ts`. The judge runs as a background
|
|
14
|
+
* task while the user already sees a "pending" badge; ten minutes of
|
|
15
|
+
* polling there is fine. The SDK fixture pre-load, however, is
|
|
16
|
+
* synchronous inside the test body — every test waits on it before
|
|
17
|
+
* its first assertion can run, so we cap the default budget at
|
|
18
|
+
* ~10 seconds (10 × 1s). Users can still bump this via `tracePolling`
|
|
19
|
+
* on the agent config or via `TRACE_POLL_INTERVAL_MS` /
|
|
20
|
+
* `TRACE_POLL_MAX_ATTEMPTS` env vars (the same vars the judge poller
|
|
21
|
+
* honours), and a hard `MAX_POLL_CEILING` mirrors the one in
|
|
22
|
+
* `tracePoller.ts` so a misconfigured agent can't block a test for
|
|
23
|
+
* an unbounded time.
|
|
24
|
+
*/
|
|
25
|
+
import type { Span } from '../../types/index.js';
|
|
26
|
+
/**
|
|
27
|
+
* Strategy-C correlation input: an agent's OTel `service.name` plus the run's
|
|
28
|
+
* wall-clock window. Used as a fallback (and union) when the agent's spans are
|
|
29
|
+
* not tagged with the connector `runId` (Strategy B) — e.g. Claude Code / any
|
|
30
|
+
* subprocess agent whose OTel SDK emits its own trace and never sees our runId.
|
|
31
|
+
* Mirrors the `windowAgents` clause the run-report Traces tab already issues.
|
|
32
|
+
*/
|
|
33
|
+
export interface TraceWindowAgent {
|
|
34
|
+
serviceName: string;
|
|
35
|
+
startedAt: number;
|
|
36
|
+
endedAt: number;
|
|
37
|
+
/** Strategy D: precise per-run correlator (e.g. Claude Code `session.id`). */
|
|
38
|
+
sessionId?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Hard ceiling on `maxAttempts`, mirroring the constant in
|
|
42
|
+
* `services/traces/tracePoller.ts`. Prevents a misconfigured agent
|
|
43
|
+
* (e.g. `tracePolling.maxAttempts: 10_000`) from blocking a test body
|
|
44
|
+
* indefinitely.
|
|
45
|
+
*/
|
|
46
|
+
export declare const SDK_TRACE_POLL_CEILING = 60;
|
|
47
|
+
/** Default interval between polling attempts. ~1s for SDK interactivity. */
|
|
48
|
+
export declare const SDK_DEFAULT_POLL_INTERVAL_MS: number;
|
|
49
|
+
/** Default attempt budget. 10 attempts × ~1s ≈ 10s total for SDK pre-load. */
|
|
50
|
+
export declare const SDK_DEFAULT_MAX_ATTEMPTS: number;
|
|
51
|
+
export interface FetchSpansForRunOptions {
|
|
52
|
+
/** Total number of attempts. Capped at {@link SDK_TRACE_POLL_CEILING}. */
|
|
53
|
+
maxAttempts?: number;
|
|
54
|
+
/** Delay between attempts in ms. */
|
|
55
|
+
intervalMs?: number;
|
|
56
|
+
/**
|
|
57
|
+
* Strategy-C fallback: when provided, each poll unions the `runId` clause
|
|
58
|
+
* with a service-name + time-window clause. This is what lets the SDK
|
|
59
|
+
* `traces` fixture (and therefore the judge) actually receive spans from
|
|
60
|
+
* agents like Claude Code whose OTel spans carry their own traceId +
|
|
61
|
+
* `service.name` but NOT our connector `runId`. Without this, runId-only
|
|
62
|
+
* correlation returns 0 spans and the judge never sees the trace (#XXX).
|
|
63
|
+
*/
|
|
64
|
+
windowAgents?: TraceWindowAgent[];
|
|
65
|
+
}
|
|
66
|
+
export interface FetchSpansForRunResult {
|
|
67
|
+
/** Spans returned on the first non-empty attempt, or `[]` on timeout / error. */
|
|
68
|
+
spans: Span[];
|
|
69
|
+
/**
|
|
70
|
+
* If `spans` is empty, the message of the last error thrown by
|
|
71
|
+
* `fetchTracesByRunIds` (auth failure, 5xx, network down, etc.).
|
|
72
|
+
* `undefined` when polling completed without errors but the trace
|
|
73
|
+
* backend simply had no spans for this `runId` yet — in that case the
|
|
74
|
+
* caller should report a "no spans found" reason rather than a "fetch
|
|
75
|
+
* failed" reason.
|
|
76
|
+
*/
|
|
77
|
+
lastError?: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Poll for spans associated with a single agent runId. Resolves with
|
|
81
|
+
* the spans on the first non-empty fetch, or with `{ spans: [],
|
|
82
|
+
* lastError? }` after `maxAttempts` of empty / failing responses.
|
|
83
|
+
* Never throws.
|
|
84
|
+
*/
|
|
85
|
+
export declare function fetchSpansForRun(runId: string | undefined, options?: FetchSpansForRunOptions): Promise<FetchSpansForRunResult>;
|
|
86
|
+
//# sourceMappingURL=fetchSpansForRun.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchSpansForRun.d.ts","sourceRoot":"","sources":["../../../../services/traces/fetchSpansForRun.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAIpC;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AASzC,4EAA4E;AAC5E,eAAO,MAAM,4BAA4B,QAAyC,CAAC;AACnF,8EAA8E;AAC9E,eAAO,MAAM,wBAAwB,QAAwC,CAAC;AAE9E,MAAM,WAAW,uBAAuB;IACtC,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,iFAAiF;IACjF,KAAK,EAAE,IAAI,EAAE,CAAC;IACd;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,sBAAsB,CAAC,CAwCjC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright OpenSearch Contributors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { debug } from '../../lib/debug.js';
|
|
6
|
+
import { fetchTracesForRun } from './index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Hard ceiling on `maxAttempts`, mirroring the constant in
|
|
9
|
+
* `services/traces/tracePoller.ts`. Prevents a misconfigured agent
|
|
10
|
+
* (e.g. `tracePolling.maxAttempts: 10_000`) from blocking a test body
|
|
11
|
+
* indefinitely.
|
|
12
|
+
*/
|
|
13
|
+
export const SDK_TRACE_POLL_CEILING = 60;
|
|
14
|
+
const envInt = (name, fallback) => {
|
|
15
|
+
const raw = process.env?.[name];
|
|
16
|
+
if (!raw)
|
|
17
|
+
return fallback;
|
|
18
|
+
const n = parseInt(raw, 10);
|
|
19
|
+
return Number.isFinite(n) && n > 0 ? n : fallback;
|
|
20
|
+
};
|
|
21
|
+
/** Default interval between polling attempts. ~1s for SDK interactivity. */
|
|
22
|
+
export const SDK_DEFAULT_POLL_INTERVAL_MS = envInt('TRACE_POLL_INTERVAL_MS', 1000);
|
|
23
|
+
/** Default attempt budget. 10 attempts × ~1s ≈ 10s total for SDK pre-load. */
|
|
24
|
+
export const SDK_DEFAULT_MAX_ATTEMPTS = envInt('TRACE_POLL_MAX_ATTEMPTS', 10);
|
|
25
|
+
/**
|
|
26
|
+
* Poll for spans associated with a single agent runId. Resolves with
|
|
27
|
+
* the spans on the first non-empty fetch, or with `{ spans: [],
|
|
28
|
+
* lastError? }` after `maxAttempts` of empty / failing responses.
|
|
29
|
+
* Never throws.
|
|
30
|
+
*/
|
|
31
|
+
export async function fetchSpansForRun(runId, options = {}) {
|
|
32
|
+
const requestedMax = options.maxAttempts ?? SDK_DEFAULT_MAX_ATTEMPTS;
|
|
33
|
+
const maxAttempts = Math.max(1, Math.min(requestedMax, SDK_TRACE_POLL_CEILING));
|
|
34
|
+
const intervalMs = Math.max(0, options.intervalMs ?? SDK_DEFAULT_POLL_INTERVAL_MS);
|
|
35
|
+
const windowAgents = options.windowAgents?.length ? options.windowAgents : undefined;
|
|
36
|
+
const label = runId ?? `service:${windowAgents?.map(a => a.serviceName).join(',') ?? 'none'}`;
|
|
37
|
+
let lastError;
|
|
38
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
39
|
+
try {
|
|
40
|
+
// Union of Strategy B (runId) and Strategy C (service-name + time window),
|
|
41
|
+
// matching the run-report Traces tab. Either clause alone can be empty
|
|
42
|
+
// (e.g. Claude Code never tags spans with our runId), so we need both.
|
|
43
|
+
const result = await fetchTracesForRun({
|
|
44
|
+
runId: runId || undefined,
|
|
45
|
+
includeWindowFallback: !!windowAgents,
|
|
46
|
+
windowAgents,
|
|
47
|
+
});
|
|
48
|
+
if (result?.spans && result.spans.length > 0) {
|
|
49
|
+
debug('FetchSpansForRun', `${label} attempt=${attempt} found ${result.spans.length} spans`);
|
|
50
|
+
return { spans: result.spans };
|
|
51
|
+
}
|
|
52
|
+
// Successful fetch but no spans yet — clear any previous transient
|
|
53
|
+
// error so the caller doesn't blame a long-since-recovered hiccup.
|
|
54
|
+
lastError = undefined;
|
|
55
|
+
debug('FetchSpansForRun', `${label} attempt=${attempt}/${maxAttempts} empty`);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
// Capture the message but keep retrying — the caller decides
|
|
59
|
+
// whether to surface it as `unavailableTracesAccessor` reason.
|
|
60
|
+
lastError = err instanceof Error ? err.message : String(err);
|
|
61
|
+
debug('FetchSpansForRun', `${label} attempt=${attempt} fetch error: ${lastError}`);
|
|
62
|
+
}
|
|
63
|
+
if (attempt < maxAttempts && intervalMs > 0) {
|
|
64
|
+
await new Promise(resolve => setTimeout(resolve, intervalMs));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return { spans: [], lastError };
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=fetchSpansForRun.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchSpansForRun.js","sourceRoot":"","sources":["../../../../services/traces/fetchSpansForRun.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Node, Edge } from '@xyflow/react';
|
|
2
|
+
import { CategorizedSpan, SpanNodeData, FlowTransformResult, FlowTransformOptions, ParallelGroup } from '../../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Convert a categorized span tree to React Flow nodes and edges.
|
|
5
|
+
*
|
|
6
|
+
* @param spanTree - Categorized span tree to transform
|
|
7
|
+
* @param totalDuration - Total trace duration for relative sizing
|
|
8
|
+
* @param options - Transform options including mode
|
|
9
|
+
* @returns Flow nodes and edges for React Flow
|
|
10
|
+
*/
|
|
11
|
+
export declare function spansToFlow(spanTree: CategorizedSpan[], totalDuration: number, options?: FlowTransformOptions): FlowTransformResult;
|
|
12
|
+
/**
|
|
13
|
+
* Detect parallel execution among sibling spans by checking time overlap
|
|
14
|
+
*/
|
|
15
|
+
export declare function detectParallelExecution(spans: CategorizedSpan[]): ParallelGroup[];
|
|
16
|
+
/**
|
|
17
|
+
* Apply dagre layout algorithm to position nodes
|
|
18
|
+
*/
|
|
19
|
+
export declare function applyDagreLayout(nodes: Node<SpanNodeData>[], edges: Edge[], options?: FlowTransformOptions): FlowTransformResult;
|
|
20
|
+
/**
|
|
21
|
+
* Get total span count from a tree (for stats display)
|
|
22
|
+
*/
|
|
23
|
+
export declare function countSpansInTree(spans: CategorizedSpan[]): number;
|
|
24
|
+
//# sourceMappingURL=flowTransform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flowTransform.d.ts","sourceRoot":"","sources":["../../../../services/traces/flowTransform.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAc,MAAM,eAAe,CAAC;AACvD,OAAO,EACL,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACd,MAAM,SAAS,CAAC;AAYjB;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,eAAe,EAAE,EAC3B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,CAUrB;AAsGD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAqDjF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,EAC3B,KAAK,EAAE,IAAI,EAAE,EACb,OAAO,GAAE,oBAAyB,GACjC,mBAAmB,CA0CrB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM,CAYjE"}
|