@qodo/sdk 0.13.4 → 2.0.0-next.1
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/LICENSE +31 -118
- package/README.md +133 -121
- package/bin/qodo-skills.mjs +13 -0
- package/bundled-skills/code-review/SKILL.md +41 -0
- package/bundled-skills/pr-summary/SKILL.md +59 -0
- package/bundled-skills/test-gen/SKILL.md +47 -0
- package/dist/auth/index.browser.d.ts +38 -0
- package/dist/auth/index.browser.d.ts.map +1 -0
- package/dist/auth/index.browser.js +62 -0
- package/dist/auth/index.browser.js.map +1 -0
- package/dist/auth/index.d.ts +44 -30
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +57 -110
- package/dist/auth/index.js.map +1 -1
- package/dist/client/AgentsClient.d.ts +33 -0
- package/dist/client/AgentsClient.d.ts.map +1 -0
- package/dist/client/AgentsClient.js +40 -0
- package/dist/client/AgentsClient.js.map +1 -0
- package/dist/client/ArtifactsClient.d.ts +43 -0
- package/dist/client/ArtifactsClient.d.ts.map +1 -0
- package/dist/client/ArtifactsClient.js +54 -0
- package/dist/client/ArtifactsClient.js.map +1 -0
- package/dist/client/BulletinClient.d.ts +45 -0
- package/dist/client/BulletinClient.d.ts.map +1 -0
- package/dist/client/BulletinClient.js +51 -0
- package/dist/client/BulletinClient.js.map +1 -0
- package/dist/client/InfoClient.d.ts +58 -0
- package/dist/client/InfoClient.d.ts.map +1 -0
- package/dist/client/InfoClient.js +135 -0
- package/dist/client/InfoClient.js.map +1 -0
- package/dist/client/PipelineClient.d.ts +162 -0
- package/dist/client/PipelineClient.d.ts.map +1 -0
- package/dist/client/PipelineClient.js +340 -0
- package/dist/client/PipelineClient.js.map +1 -0
- package/dist/client/QarRegistryClient.d.ts +396 -0
- package/dist/client/QarRegistryClient.d.ts.map +1 -0
- package/dist/client/QarRegistryClient.js +536 -0
- package/dist/client/QarRegistryClient.js.map +1 -0
- package/dist/client/QodoClient.d.ts +296 -0
- package/dist/client/QodoClient.d.ts.map +1 -0
- package/dist/client/QodoClient.js +803 -0
- package/dist/client/QodoClient.js.map +1 -0
- package/dist/client/SpecsClient.d.ts +121 -0
- package/dist/client/SpecsClient.d.ts.map +1 -0
- package/dist/client/SpecsClient.js +252 -0
- package/dist/client/SpecsClient.js.map +1 -0
- package/dist/client/StateClient.d.ts +35 -0
- package/dist/client/StateClient.d.ts.map +1 -0
- package/dist/client/StateClient.js +36 -0
- package/dist/client/StateClient.js.map +1 -0
- package/dist/client/TaskClient.d.ts +706 -0
- package/dist/client/TaskClient.d.ts.map +1 -0
- package/dist/client/TaskClient.js +2522 -0
- package/dist/client/TaskClient.js.map +1 -0
- package/dist/client/ToolClient.d.ts +278 -0
- package/dist/client/ToolClient.d.ts.map +1 -0
- package/dist/client/ToolClient.js +1139 -0
- package/dist/client/ToolClient.js.map +1 -0
- package/dist/client/a2a/index.d.ts +10 -0
- package/dist/client/a2a/index.d.ts.map +1 -0
- package/dist/client/a2a/index.js +9 -0
- package/dist/client/a2a/index.js.map +1 -0
- package/dist/client/a2a/registerA2A.d.ts +170 -0
- package/dist/client/a2a/registerA2A.d.ts.map +1 -0
- package/dist/client/a2a/registerA2A.js +85 -0
- package/dist/client/a2a/registerA2A.js.map +1 -0
- package/dist/client/connection.d.ts +893 -0
- package/dist/client/connection.d.ts.map +1 -0
- package/dist/client/connection.js +2189 -0
- package/dist/client/connection.js.map +1 -0
- package/dist/client/errors.d.ts +735 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +921 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/index.d.ts +26 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +20 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/inlineGraph.d.ts +66 -0
- package/dist/client/inlineGraph.d.ts.map +1 -0
- package/dist/client/inlineGraph.js +500 -0
- package/dist/client/inlineGraph.js.map +1 -0
- package/dist/client/internal/thenable.d.ts +27 -0
- package/dist/client/internal/thenable.d.ts.map +1 -0
- package/dist/client/internal/thenable.js +31 -0
- package/dist/client/internal/thenable.js.map +1 -0
- package/dist/client/iterator.d.ts +32 -0
- package/dist/client/iterator.d.ts.map +1 -0
- package/dist/client/iterator.js +73 -0
- package/dist/client/iterator.js.map +1 -0
- package/dist/client/mcp/McpClientPool.browser.d.ts +76 -0
- package/dist/client/mcp/McpClientPool.browser.d.ts.map +1 -0
- package/dist/client/mcp/McpClientPool.browser.js +78 -0
- package/dist/client/mcp/McpClientPool.browser.js.map +1 -0
- package/dist/client/mcp/McpClientPool.d.ts +236 -0
- package/dist/client/mcp/McpClientPool.d.ts.map +1 -0
- package/dist/client/mcp/McpClientPool.js +585 -0
- package/dist/client/mcp/McpClientPool.js.map +1 -0
- package/dist/client/mcp/projection.d.ts +109 -0
- package/dist/client/mcp/projection.d.ts.map +1 -0
- package/dist/client/mcp/projection.js +446 -0
- package/dist/client/mcp/projection.js.map +1 -0
- package/dist/client/mcp/substituteEnv.browser.d.ts +18 -0
- package/dist/client/mcp/substituteEnv.browser.d.ts.map +1 -0
- package/dist/client/mcp/substituteEnv.browser.js +20 -0
- package/dist/client/mcp/substituteEnv.browser.js.map +1 -0
- package/dist/client/mcp/substituteEnv.d.ts +45 -0
- package/dist/client/mcp/substituteEnv.d.ts.map +1 -0
- package/dist/client/mcp/substituteEnv.js +63 -0
- package/dist/client/mcp/substituteEnv.js.map +1 -0
- package/dist/client/observers.d.ts +57 -0
- package/dist/client/observers.d.ts.map +1 -0
- package/dist/client/observers.js +203 -0
- package/dist/client/observers.js.map +1 -0
- package/dist/client/options.d.ts +269 -0
- package/dist/client/options.d.ts.map +1 -0
- package/dist/client/options.js +9 -0
- package/dist/client/options.js.map +1 -0
- package/dist/client/tools/_readlineApprovalPrompt.browser.d.ts +17 -0
- package/dist/client/tools/_readlineApprovalPrompt.browser.d.ts.map +1 -0
- package/dist/client/tools/_readlineApprovalPrompt.browser.js +24 -0
- package/dist/client/tools/_readlineApprovalPrompt.browser.js.map +1 -0
- package/dist/client/tools/_readlineApprovalPrompt.d.ts +33 -0
- package/dist/client/tools/_readlineApprovalPrompt.d.ts.map +1 -0
- package/dist/client/tools/_readlineApprovalPrompt.js +90 -0
- package/dist/client/tools/_readlineApprovalPrompt.js.map +1 -0
- package/dist/client/tools/approval.d.ts +280 -0
- package/dist/client/tools/approval.d.ts.map +1 -0
- package/dist/client/tools/approval.js +229 -0
- package/dist/client/tools/approval.js.map +1 -0
- package/dist/client/tools/bindFunctionToolDefs.d.ts +156 -0
- package/dist/client/tools/bindFunctionToolDefs.d.ts.map +1 -0
- package/dist/client/tools/bindFunctionToolDefs.js +360 -0
- package/dist/client/tools/bindFunctionToolDefs.js.map +1 -0
- package/dist/client/tools/defineFunctionTool.d.ts +277 -0
- package/dist/client/tools/defineFunctionTool.d.ts.map +1 -0
- package/dist/client/tools/defineFunctionTool.js +190 -0
- package/dist/client/tools/defineFunctionTool.js.map +1 -0
- package/dist/client/transport.browser.d.ts +20 -0
- package/dist/client/transport.browser.d.ts.map +1 -0
- package/dist/client/transport.browser.js +29 -0
- package/dist/client/transport.browser.js.map +1 -0
- package/dist/client/transport.d.ts +47 -0
- package/dist/client/transport.d.ts.map +1 -0
- package/dist/client/transport.js +102 -0
- package/dist/client/transport.js.map +1 -0
- package/dist/client/transport.shared.d.ts +30 -0
- package/dist/client/transport.shared.d.ts.map +1 -0
- package/dist/client/transport.shared.js +40 -0
- package/dist/client/transport.shared.js.map +1 -0
- package/dist/client/uuid.d.ts +32 -0
- package/dist/client/uuid.d.ts.map +1 -0
- package/dist/client/uuid.js +65 -0
- package/dist/client/uuid.js.map +1 -0
- package/dist/index.d.ts +88 -39
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +166 -43
- package/dist/index.js.map +1 -1
- package/dist/observability/attributes.d.ts +136 -0
- package/dist/observability/attributes.d.ts.map +1 -0
- package/dist/observability/attributes.js +184 -0
- package/dist/observability/attributes.js.map +1 -0
- package/dist/observability/index.d.ts +14 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +11 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/resolveOTel.browser.d.ts +13 -0
- package/dist/observability/resolveOTel.browser.d.ts.map +1 -0
- package/dist/observability/resolveOTel.browser.js +14 -0
- package/dist/observability/resolveOTel.browser.js.map +1 -0
- package/dist/observability/resolveOTel.d.ts +28 -0
- package/dist/observability/resolveOTel.d.ts.map +1 -0
- package/dist/observability/resolveOTel.js +74 -0
- package/dist/observability/resolveOTel.js.map +1 -0
- package/dist/observability/spans.d.ts +198 -0
- package/dist/observability/spans.d.ts.map +1 -0
- package/dist/observability/spans.js +300 -0
- package/dist/observability/spans.js.map +1 -0
- package/dist/observability/traceContext.d.ts +51 -0
- package/dist/observability/traceContext.d.ts.map +1 -0
- package/dist/observability/traceContext.js +151 -0
- package/dist/observability/traceContext.js.map +1 -0
- package/dist/observability/transportMetrics.d.ts +58 -0
- package/dist/observability/transportMetrics.d.ts.map +1 -0
- package/dist/observability/transportMetrics.js +55 -0
- package/dist/observability/transportMetrics.js.map +1 -0
- package/dist/qar/agentSpec.d.ts +93 -0
- package/dist/qar/agentSpec.d.ts.map +1 -0
- package/dist/qar/agentSpec.js +184 -0
- package/dist/qar/agentSpec.js.map +1 -0
- package/dist/qar/clientEvents.d.ts +86 -0
- package/dist/qar/clientEvents.d.ts.map +1 -0
- package/dist/qar/clientEvents.js +36 -0
- package/dist/qar/clientEvents.js.map +1 -0
- package/dist/qar/envelopes.d.ts +227 -0
- package/dist/qar/envelopes.d.ts.map +1 -0
- package/dist/qar/envelopes.js +67 -0
- package/dist/qar/envelopes.js.map +1 -0
- package/dist/qar/generated/envelope.d.ts +332 -0
- package/dist/qar/generated/envelope.d.ts.map +1 -0
- package/dist/qar/generated/envelope.js +15 -0
- package/dist/qar/generated/envelope.js.map +1 -0
- package/dist/qar/generated/qar-info.d.ts +76 -0
- package/dist/qar/generated/qar-info.d.ts.map +1 -0
- package/dist/qar/generated/qar-info.js +15 -0
- package/dist/qar/generated/qar-info.js.map +1 -0
- package/dist/qar/generated/qodo-task-start-payload.d.ts +54 -0
- package/dist/qar/generated/qodo-task-start-payload.d.ts.map +1 -0
- package/dist/qar/generated/qodo-task-start-payload.js +15 -0
- package/dist/qar/generated/qodo-task-start-payload.js.map +1 -0
- package/dist/qar/ids.d.ts +19 -0
- package/dist/qar/ids.d.ts.map +1 -0
- package/dist/qar/ids.js +11 -0
- package/dist/qar/ids.js.map +1 -0
- package/dist/qar/index.d.ts +24 -0
- package/dist/qar/index.d.ts.map +1 -0
- package/dist/qar/index.js +16 -0
- package/dist/qar/index.js.map +1 -0
- package/dist/qar/info.d.ts +37 -0
- package/dist/qar/info.d.ts.map +1 -0
- package/dist/qar/info.js +17 -0
- package/dist/qar/info.js.map +1 -0
- package/dist/qar/json.d.ts +14 -0
- package/dist/qar/json.d.ts.map +1 -0
- package/dist/qar/json.js +9 -0
- package/dist/qar/json.js.map +1 -0
- package/dist/qar/payloads.d.ts +480 -0
- package/dist/qar/payloads.d.ts.map +1 -0
- package/dist/qar/payloads.js +37 -0
- package/dist/qar/payloads.js.map +1 -0
- package/dist/qar/specs.d.ts +604 -0
- package/dist/qar/specs.d.ts.map +1 -0
- package/dist/qar/specs.js +29 -0
- package/dist/qar/specs.js.map +1 -0
- package/dist/qar/taskEvents.d.ts +25 -0
- package/dist/qar/taskEvents.d.ts.map +1 -0
- package/dist/qar/taskEvents.js +22 -0
- package/dist/qar/taskEvents.js.map +1 -0
- package/dist/qar/trace.d.ts +12 -0
- package/dist/qar/trace.d.ts.map +1 -0
- package/dist/qar/trace.js +12 -0
- package/dist/qar/trace.js.map +1 -0
- package/dist/skills/activation.d.ts +177 -0
- package/dist/skills/activation.d.ts.map +1 -0
- package/dist/skills/activation.js +428 -0
- package/dist/skills/activation.js.map +1 -0
- package/dist/skills/cli/index.browser.d.ts +18 -0
- package/dist/skills/cli/index.browser.d.ts.map +1 -0
- package/dist/skills/cli/index.browser.js +27 -0
- package/dist/skills/cli/index.browser.js.map +1 -0
- package/dist/skills/cli/index.d.ts +37 -0
- package/dist/skills/cli/index.d.ts.map +1 -0
- package/dist/skills/cli/index.js +494 -0
- package/dist/skills/cli/index.js.map +1 -0
- package/dist/skills/events.d.ts +255 -0
- package/dist/skills/events.d.ts.map +1 -0
- package/dist/skills/events.js +224 -0
- package/dist/skills/events.js.map +1 -0
- package/dist/skills/index.d.ts +45 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +34 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/inject.d.ts +57 -0
- package/dist/skills/inject.d.ts.map +1 -0
- package/dist/skills/inject.js +162 -0
- package/dist/skills/inject.js.map +1 -0
- package/dist/skills/lockfile.browser.d.ts +56 -0
- package/dist/skills/lockfile.browser.d.ts.map +1 -0
- package/dist/skills/lockfile.browser.js +55 -0
- package/dist/skills/lockfile.browser.js.map +1 -0
- package/dist/skills/lockfile.d.ts +137 -0
- package/dist/skills/lockfile.d.ts.map +1 -0
- package/dist/skills/lockfile.js +423 -0
- package/dist/skills/lockfile.js.map +1 -0
- package/dist/skills/manager.browser.d.ts +94 -0
- package/dist/skills/manager.browser.d.ts.map +1 -0
- package/dist/skills/manager.browser.js +159 -0
- package/dist/skills/manager.browser.js.map +1 -0
- package/dist/skills/manager.d.ts +362 -0
- package/dist/skills/manager.d.ts.map +1 -0
- package/dist/skills/manager.js +1386 -0
- package/dist/skills/manager.js.map +1 -0
- package/dist/skills/mcp/index.d.ts +15 -0
- package/dist/skills/mcp/index.d.ts.map +1 -0
- package/dist/skills/mcp/index.js +12 -0
- package/dist/skills/mcp/index.js.map +1 -0
- package/dist/skills/mcp/path.browser.d.ts +27 -0
- package/dist/skills/mcp/path.browser.d.ts.map +1 -0
- package/dist/skills/mcp/path.browser.js +33 -0
- package/dist/skills/mcp/path.browser.js.map +1 -0
- package/dist/skills/mcp/path.d.ts +57 -0
- package/dist/skills/mcp/path.d.ts.map +1 -0
- package/dist/skills/mcp/path.js +150 -0
- package/dist/skills/mcp/path.js.map +1 -0
- package/dist/skills/mcp/server.browser.d.ts +32 -0
- package/dist/skills/mcp/server.browser.d.ts.map +1 -0
- package/dist/skills/mcp/server.browser.js +53 -0
- package/dist/skills/mcp/server.browser.js.map +1 -0
- package/dist/skills/mcp/server.d.ts +144 -0
- package/dist/skills/mcp/server.d.ts.map +1 -0
- package/dist/skills/mcp/server.js +841 -0
- package/dist/skills/mcp/server.js.map +1 -0
- package/dist/skills/mcp/types.d.ts +72 -0
- package/dist/skills/mcp/types.d.ts.map +1 -0
- package/dist/skills/mcp/types.js +20 -0
- package/dist/skills/mcp/types.js.map +1 -0
- package/dist/skills/mcp/wireDefs.d.ts +58 -0
- package/dist/skills/mcp/wireDefs.d.ts.map +1 -0
- package/dist/skills/mcp/wireDefs.js +141 -0
- package/dist/skills/mcp/wireDefs.js.map +1 -0
- package/dist/skills/parser.d.ts +63 -0
- package/dist/skills/parser.d.ts.map +1 -0
- package/dist/skills/parser.js +755 -0
- package/dist/skills/parser.js.map +1 -0
- package/dist/skills/prefilter.d.ts +104 -0
- package/dist/skills/prefilter.d.ts.map +1 -0
- package/dist/skills/prefilter.js +398 -0
- package/dist/skills/prefilter.js.map +1 -0
- package/dist/skills/preprocess.d.ts +169 -0
- package/dist/skills/preprocess.d.ts.map +1 -0
- package/dist/skills/preprocess.js +535 -0
- package/dist/skills/preprocess.js.map +1 -0
- package/dist/skills/render.d.ts +83 -0
- package/dist/skills/render.d.ts.map +1 -0
- package/dist/skills/render.js +397 -0
- package/dist/skills/render.js.map +1 -0
- package/dist/skills/sources/index.browser.d.ts +29 -0
- package/dist/skills/sources/index.browser.d.ts.map +1 -0
- package/dist/skills/sources/index.browser.js +16 -0
- package/dist/skills/sources/index.browser.js.map +1 -0
- package/dist/skills/sources/index.d.ts +59 -0
- package/dist/skills/sources/index.d.ts.map +1 -0
- package/dist/skills/sources/index.js +471 -0
- package/dist/skills/sources/index.js.map +1 -0
- package/dist/skills/sources/walk.browser.d.ts +17 -0
- package/dist/skills/sources/walk.browser.d.ts.map +1 -0
- package/dist/skills/sources/walk.browser.js +19 -0
- package/dist/skills/sources/walk.browser.js.map +1 -0
- package/dist/skills/sources/walk.d.ts +68 -0
- package/dist/skills/sources/walk.d.ts.map +1 -0
- package/dist/skills/sources/walk.js +264 -0
- package/dist/skills/sources/walk.js.map +1 -0
- package/dist/skills/substitute.d.ts +87 -0
- package/dist/skills/substitute.d.ts.map +1 -0
- package/dist/skills/substitute.js +322 -0
- package/dist/skills/substitute.js.map +1 -0
- package/dist/skills/testing/SkillKit.browser.d.ts +62 -0
- package/dist/skills/testing/SkillKit.browser.d.ts.map +1 -0
- package/dist/skills/testing/SkillKit.browser.js +41 -0
- package/dist/skills/testing/SkillKit.browser.js.map +1 -0
- package/dist/skills/testing/SkillKit.d.ts +130 -0
- package/dist/skills/testing/SkillKit.d.ts.map +1 -0
- package/dist/skills/testing/SkillKit.js +316 -0
- package/dist/skills/testing/SkillKit.js.map +1 -0
- package/dist/skills/testing/index.d.ts +9 -0
- package/dist/skills/testing/index.d.ts.map +1 -0
- package/dist/skills/testing/index.js +8 -0
- package/dist/skills/testing/index.js.map +1 -0
- package/dist/skills/trust.d.ts +72 -0
- package/dist/skills/trust.d.ts.map +1 -0
- package/dist/skills/trust.js +183 -0
- package/dist/skills/trust.js.map +1 -0
- package/dist/skills/types.d.ts +627 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +85 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/skills/validator.d.ts +95 -0
- package/dist/skills/validator.d.ts.map +1 -0
- package/dist/skills/validator.js +486 -0
- package/dist/skills/validator.js.map +1 -0
- package/dist/tracing/PipelineTracer.d.ts +35 -22
- package/dist/tracing/PipelineTracer.d.ts.map +1 -1
- package/dist/tracing/PipelineTracer.js +106 -61
- package/dist/tracing/PipelineTracer.js.map +1 -1
- package/dist/tracing/SdkTracer.d.ts +63 -61
- package/dist/tracing/SdkTracer.d.ts.map +1 -1
- package/dist/tracing/SdkTracer.js +185 -177
- package/dist/tracing/SdkTracer.js.map +1 -1
- package/dist/tracing/index.d.ts +10 -1
- package/dist/tracing/index.d.ts.map +1 -1
- package/dist/tracing/index.js +9 -0
- package/dist/tracing/index.js.map +1 -1
- package/dist/tracing/types.d.ts +89 -16
- package/dist/tracing/types.d.ts.map +1 -1
- package/dist/tracing/types.js +17 -4
- package/dist/tracing/types.js.map +1 -1
- package/dist/types.d.ts +6 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +10 -20
- package/dist/version.js.map +1 -1
- package/package.json +53 -39
- package/.claude/skills/qodo-agent/SKILL.md +0 -974
- package/.claude/skills/qodo-agent/assets/programmatic-agent.ts +0 -407
- package/.claude/skills/qodo-agent/references/builtin-tools.md +0 -342
- package/.claude/skills/qodo-agent/references/common-issues.md +0 -537
- package/bin/rg +0 -0
- package/dist/api/agent.d.ts +0 -105
- package/dist/api/agent.d.ts.map +0 -1
- package/dist/api/agent.js +0 -963
- package/dist/api/agent.js.map +0 -1
- package/dist/api/analytics.d.ts +0 -43
- package/dist/api/analytics.d.ts.map +0 -1
- package/dist/api/analytics.js +0 -163
- package/dist/api/analytics.js.map +0 -1
- package/dist/api/http.d.ts +0 -5
- package/dist/api/http.d.ts.map +0 -1
- package/dist/api/http.js +0 -62
- package/dist/api/http.js.map +0 -1
- package/dist/api/index.d.ts +0 -12
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js +0 -17
- package/dist/api/index.js.map +0 -1
- package/dist/api/taskTracking.d.ts +0 -54
- package/dist/api/taskTracking.d.ts.map +0 -1
- package/dist/api/taskTracking.js +0 -208
- package/dist/api/taskTracking.js.map +0 -1
- package/dist/api/types.d.ts +0 -93
- package/dist/api/types.d.ts.map +0 -1
- package/dist/api/types.js +0 -2
- package/dist/api/types.js.map +0 -1
- package/dist/api/utils.d.ts +0 -8
- package/dist/api/utils.d.ts.map +0 -1
- package/dist/api/utils.js +0 -63
- package/dist/api/utils.js.map +0 -1
- package/dist/api/websocket.d.ts +0 -203
- package/dist/api/websocket.d.ts.map +0 -1
- package/dist/api/websocket.js +0 -1166
- package/dist/api/websocket.js.map +0 -1
- package/dist/bin/install-skill.d.ts +0 -14
- package/dist/bin/install-skill.d.ts.map +0 -1
- package/dist/bin/install-skill.js +0 -125
- package/dist/bin/install-skill.js.map +0 -1
- package/dist/bin/run-helpers.d.ts +0 -34
- package/dist/bin/run-helpers.d.ts.map +0 -1
- package/dist/bin/run-helpers.js +0 -186
- package/dist/bin/run-helpers.js.map +0 -1
- package/dist/bin/run.d.ts +0 -13
- package/dist/bin/run.d.ts.map +0 -1
- package/dist/bin/run.js +0 -57
- package/dist/bin/run.js.map +0 -1
- package/dist/clients/index.d.ts +0 -10
- package/dist/clients/index.d.ts.map +0 -1
- package/dist/clients/index.js +0 -8
- package/dist/clients/index.js.map +0 -1
- package/dist/clients/info/InfoClient.d.ts +0 -37
- package/dist/clients/info/InfoClient.d.ts.map +0 -1
- package/dist/clients/info/InfoClient.js +0 -69
- package/dist/clients/info/InfoClient.js.map +0 -1
- package/dist/clients/info/index.d.ts +0 -4
- package/dist/clients/info/index.d.ts.map +0 -1
- package/dist/clients/info/index.js +0 -2
- package/dist/clients/info/index.js.map +0 -1
- package/dist/clients/info/types.d.ts +0 -21
- package/dist/clients/info/types.d.ts.map +0 -1
- package/dist/clients/info/types.js +0 -2
- package/dist/clients/info/types.js.map +0 -1
- package/dist/clients/sessions/SessionsClient.d.ts +0 -34
- package/dist/clients/sessions/SessionsClient.d.ts.map +0 -1
- package/dist/clients/sessions/SessionsClient.js +0 -71
- package/dist/clients/sessions/SessionsClient.js.map +0 -1
- package/dist/clients/sessions/index.d.ts +0 -4
- package/dist/clients/sessions/index.d.ts.map +0 -1
- package/dist/clients/sessions/index.js +0 -2
- package/dist/clients/sessions/index.js.map +0 -1
- package/dist/clients/sessions/types.d.ts +0 -20
- package/dist/clients/sessions/types.d.ts.map +0 -1
- package/dist/clients/sessions/types.js +0 -2
- package/dist/clients/sessions/types.js.map +0 -1
- package/dist/clients/tools/ToolsClient.d.ts +0 -39
- package/dist/clients/tools/ToolsClient.d.ts.map +0 -1
- package/dist/clients/tools/ToolsClient.js +0 -95
- package/dist/clients/tools/ToolsClient.js.map +0 -1
- package/dist/clients/tools/index.d.ts +0 -4
- package/dist/clients/tools/index.d.ts.map +0 -1
- package/dist/clients/tools/index.js +0 -2
- package/dist/clients/tools/index.js.map +0 -1
- package/dist/clients/tools/types.d.ts +0 -14
- package/dist/clients/tools/types.d.ts.map +0 -1
- package/dist/clients/tools/types.js +0 -2
- package/dist/clients/tools/types.js.map +0 -1
- package/dist/config/ConfigManager.d.ts +0 -43
- package/dist/config/ConfigManager.d.ts.map +0 -1
- package/dist/config/ConfigManager.js +0 -472
- package/dist/config/ConfigManager.js.map +0 -1
- package/dist/config/index.d.ts +0 -6
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -7
- package/dist/config/index.js.map +0 -1
- package/dist/config/urlConfig.d.ts +0 -15
- package/dist/config/urlConfig.d.ts.map +0 -1
- package/dist/config/urlConfig.js +0 -75
- package/dist/config/urlConfig.js.map +0 -1
- package/dist/constants/errors.d.ts +0 -2
- package/dist/constants/errors.d.ts.map +0 -1
- package/dist/constants/errors.js +0 -2
- package/dist/constants/errors.js.map +0 -1
- package/dist/constants/index.d.ts +0 -7
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js +0 -11
- package/dist/constants/index.js.map +0 -1
- package/dist/constants/tools.d.ts +0 -4
- package/dist/constants/tools.d.ts.map +0 -1
- package/dist/constants/tools.js +0 -4
- package/dist/constants/tools.js.map +0 -1
- package/dist/constants/versions.d.ts +0 -2
- package/dist/constants/versions.d.ts.map +0 -1
- package/dist/constants/versions.js +0 -2
- package/dist/constants/versions.js.map +0 -1
- package/dist/context/buildUserContext.d.ts +0 -18
- package/dist/context/buildUserContext.d.ts.map +0 -1
- package/dist/context/buildUserContext.js +0 -34
- package/dist/context/buildUserContext.js.map +0 -1
- package/dist/context/index.d.ts +0 -9
- package/dist/context/index.d.ts.map +0 -1
- package/dist/context/index.js +0 -9
- package/dist/context/index.js.map +0 -1
- package/dist/context/messageManager.d.ts +0 -42
- package/dist/context/messageManager.d.ts.map +0 -1
- package/dist/context/messageManager.js +0 -322
- package/dist/context/messageManager.js.map +0 -1
- package/dist/context/taskFocus.d.ts +0 -2
- package/dist/context/taskFocus.d.ts.map +0 -1
- package/dist/context/taskFocus.js +0 -26
- package/dist/context/taskFocus.js.map +0 -1
- package/dist/context/userInput.d.ts +0 -3
- package/dist/context/userInput.d.ts.map +0 -1
- package/dist/context/userInput.js +0 -20
- package/dist/context/userInput.js.map +0 -1
- package/dist/mcp/MCPManager.d.ts +0 -109
- package/dist/mcp/MCPManager.d.ts.map +0 -1
- package/dist/mcp/MCPManager.js +0 -592
- package/dist/mcp/MCPManager.js.map +0 -1
- package/dist/mcp/approvedTools.d.ts +0 -4
- package/dist/mcp/approvedTools.d.ts.map +0 -1
- package/dist/mcp/approvedTools.js +0 -19
- package/dist/mcp/approvedTools.js.map +0 -1
- package/dist/mcp/baseServer.d.ts +0 -75
- package/dist/mcp/baseServer.d.ts.map +0 -1
- package/dist/mcp/baseServer.js +0 -107
- package/dist/mcp/baseServer.js.map +0 -1
- package/dist/mcp/builtinServers.d.ts +0 -15
- package/dist/mcp/builtinServers.d.ts.map +0 -1
- package/dist/mcp/builtinServers.js +0 -141
- package/dist/mcp/builtinServers.js.map +0 -1
- package/dist/mcp/dynamicBEServer.d.ts +0 -20
- package/dist/mcp/dynamicBEServer.d.ts.map +0 -1
- package/dist/mcp/dynamicBEServer.js +0 -52
- package/dist/mcp/dynamicBEServer.js.map +0 -1
- package/dist/mcp/index.d.ts +0 -18
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/index.js +0 -23
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/mcpInitialization.d.ts +0 -2
- package/dist/mcp/mcpInitialization.d.ts.map +0 -1
- package/dist/mcp/mcpInitialization.js +0 -56
- package/dist/mcp/mcpInitialization.js.map +0 -1
- package/dist/mcp/servers/filesystem.d.ts +0 -44
- package/dist/mcp/servers/filesystem.d.ts.map +0 -1
- package/dist/mcp/servers/filesystem.js +0 -776
- package/dist/mcp/servers/filesystem.js.map +0 -1
- package/dist/mcp/servers/git.d.ts +0 -18
- package/dist/mcp/servers/git.d.ts.map +0 -1
- package/dist/mcp/servers/git.js +0 -441
- package/dist/mcp/servers/git.js.map +0 -1
- package/dist/mcp/servers/ripgrep.d.ts +0 -39
- package/dist/mcp/servers/ripgrep.d.ts.map +0 -1
- package/dist/mcp/servers/ripgrep.js +0 -550
- package/dist/mcp/servers/ripgrep.js.map +0 -1
- package/dist/mcp/servers/shell.d.ts +0 -20
- package/dist/mcp/servers/shell.d.ts.map +0 -1
- package/dist/mcp/servers/shell.js +0 -519
- package/dist/mcp/servers/shell.js.map +0 -1
- package/dist/mcp/serversRegistry.d.ts +0 -55
- package/dist/mcp/serversRegistry.d.ts.map +0 -1
- package/dist/mcp/serversRegistry.js +0 -416
- package/dist/mcp/serversRegistry.js.map +0 -1
- package/dist/mcp/toolProcessor.d.ts +0 -82
- package/dist/mcp/toolProcessor.d.ts.map +0 -1
- package/dist/mcp/toolProcessor.js +0 -392
- package/dist/mcp/toolProcessor.js.map +0 -1
- package/dist/mcp/types.d.ts +0 -29
- package/dist/mcp/types.d.ts.map +0 -1
- package/dist/mcp/types.js +0 -2
- package/dist/mcp/types.js.map +0 -1
- package/dist/messages/index.d.ts +0 -8
- package/dist/messages/index.d.ts.map +0 -1
- package/dist/messages/index.js +0 -7
- package/dist/messages/index.js.map +0 -1
- package/dist/messages/openai.d.ts +0 -26
- package/dist/messages/openai.d.ts.map +0 -1
- package/dist/messages/openai.js +0 -55
- package/dist/messages/openai.js.map +0 -1
- package/dist/messages/types.d.ts +0 -73
- package/dist/messages/types.d.ts.map +0 -1
- package/dist/messages/types.js +0 -78
- package/dist/messages/types.js.map +0 -1
- package/dist/parser/index.d.ts +0 -72
- package/dist/parser/index.d.ts.map +0 -1
- package/dist/parser/index.js +0 -967
- package/dist/parser/index.js.map +0 -1
- package/dist/parser/types.d.ts +0 -153
- package/dist/parser/types.d.ts.map +0 -1
- package/dist/parser/types.js +0 -6
- package/dist/parser/types.js.map +0 -1
- package/dist/parser/utils.d.ts +0 -18
- package/dist/parser/utils.d.ts.map +0 -1
- package/dist/parser/utils.js +0 -64
- package/dist/parser/utils.js.map +0 -1
- package/dist/sdk/QodoSDK.d.ts +0 -218
- package/dist/sdk/QodoSDK.d.ts.map +0 -1
- package/dist/sdk/QodoSDK.js +0 -1115
- package/dist/sdk/QodoSDK.js.map +0 -1
- package/dist/sdk/artifacts.d.ts +0 -156
- package/dist/sdk/artifacts.d.ts.map +0 -1
- package/dist/sdk/artifacts.js +0 -166
- package/dist/sdk/artifacts.js.map +0 -1
- package/dist/sdk/bootstrap.d.ts +0 -16
- package/dist/sdk/bootstrap.d.ts.map +0 -1
- package/dist/sdk/bootstrap.js +0 -28
- package/dist/sdk/bootstrap.js.map +0 -1
- package/dist/sdk/builders.d.ts +0 -54
- package/dist/sdk/builders.d.ts.map +0 -1
- package/dist/sdk/builders.js +0 -117
- package/dist/sdk/builders.js.map +0 -1
- package/dist/sdk/defaults.d.ts +0 -11
- package/dist/sdk/defaults.d.ts.map +0 -1
- package/dist/sdk/defaults.js +0 -39
- package/dist/sdk/defaults.js.map +0 -1
- package/dist/sdk/discovery.d.ts +0 -2
- package/dist/sdk/discovery.d.ts.map +0 -1
- package/dist/sdk/discovery.js +0 -25
- package/dist/sdk/discovery.js.map +0 -1
- package/dist/sdk/events.d.ts +0 -269
- package/dist/sdk/events.d.ts.map +0 -1
- package/dist/sdk/events.js +0 -69
- package/dist/sdk/events.js.map +0 -1
- package/dist/sdk/exit-expression.d.ts +0 -13
- package/dist/sdk/exit-expression.d.ts.map +0 -1
- package/dist/sdk/exit-expression.js +0 -35
- package/dist/sdk/exit-expression.js.map +0 -1
- package/dist/sdk/index.d.ts +0 -17
- package/dist/sdk/index.d.ts.map +0 -1
- package/dist/sdk/index.js +0 -17
- package/dist/sdk/index.js.map +0 -1
- package/dist/sdk/middleware.d.ts +0 -59
- package/dist/sdk/middleware.d.ts.map +0 -1
- package/dist/sdk/middleware.js +0 -69
- package/dist/sdk/middleware.js.map +0 -1
- package/dist/sdk/pipeline/PipelineBuilder.d.ts +0 -79
- package/dist/sdk/pipeline/PipelineBuilder.d.ts.map +0 -1
- package/dist/sdk/pipeline/PipelineBuilder.js +0 -129
- package/dist/sdk/pipeline/PipelineBuilder.js.map +0 -1
- package/dist/sdk/pipeline/PipelineRunner.d.ts +0 -28
- package/dist/sdk/pipeline/PipelineRunner.d.ts.map +0 -1
- package/dist/sdk/pipeline/PipelineRunner.js +0 -326
- package/dist/sdk/pipeline/PipelineRunner.js.map +0 -1
- package/dist/sdk/pipeline/compiler.d.ts +0 -24
- package/dist/sdk/pipeline/compiler.d.ts.map +0 -1
- package/dist/sdk/pipeline/compiler.js +0 -199
- package/dist/sdk/pipeline/compiler.js.map +0 -1
- package/dist/sdk/pipeline/declarative.d.ts +0 -34
- package/dist/sdk/pipeline/declarative.d.ts.map +0 -1
- package/dist/sdk/pipeline/declarative.js +0 -9
- package/dist/sdk/pipeline/declarative.js.map +0 -1
- package/dist/sdk/pipeline/index.d.ts +0 -20
- package/dist/sdk/pipeline/index.d.ts.map +0 -1
- package/dist/sdk/pipeline/index.js +0 -19
- package/dist/sdk/pipeline/index.js.map +0 -1
- package/dist/sdk/pipeline/types.d.ts +0 -93
- package/dist/sdk/pipeline/types.d.ts.map +0 -1
- package/dist/sdk/pipeline/types.js +0 -10
- package/dist/sdk/pipeline/types.js.map +0 -1
- package/dist/sdk/policies.d.ts +0 -163
- package/dist/sdk/policies.d.ts.map +0 -1
- package/dist/sdk/policies.js +0 -243
- package/dist/sdk/policies.js.map +0 -1
- package/dist/sdk/runner/AgentRunner.d.ts +0 -22
- package/dist/sdk/runner/AgentRunner.d.ts.map +0 -1
- package/dist/sdk/runner/AgentRunner.js +0 -222
- package/dist/sdk/runner/AgentRunner.js.map +0 -1
- package/dist/sdk/runner/finalize.d.ts +0 -56
- package/dist/sdk/runner/finalize.d.ts.map +0 -1
- package/dist/sdk/runner/finalize.js +0 -155
- package/dist/sdk/runner/finalize.js.map +0 -1
- package/dist/sdk/runner/formats.d.ts +0 -7
- package/dist/sdk/runner/formats.d.ts.map +0 -1
- package/dist/sdk/runner/formats.js +0 -76
- package/dist/sdk/runner/formats.js.map +0 -1
- package/dist/sdk/runner/index.d.ts +0 -9
- package/dist/sdk/runner/index.d.ts.map +0 -1
- package/dist/sdk/runner/index.js +0 -9
- package/dist/sdk/runner/index.js.map +0 -1
- package/dist/sdk/runner/progress.d.ts +0 -3
- package/dist/sdk/runner/progress.d.ts.map +0 -1
- package/dist/sdk/runner/progress.js +0 -16
- package/dist/sdk/runner/progress.js.map +0 -1
- package/dist/sdk/schemas.d.ts +0 -72
- package/dist/sdk/schemas.d.ts.map +0 -1
- package/dist/sdk/schemas.js +0 -282
- package/dist/sdk/schemas.js.map +0 -1
- package/dist/sdk/trigger-context.d.ts +0 -24
- package/dist/sdk/trigger-context.d.ts.map +0 -1
- package/dist/sdk/trigger-context.js +0 -136
- package/dist/sdk/trigger-context.js.map +0 -1
- package/dist/session/SessionContext.d.ts +0 -89
- package/dist/session/SessionContext.d.ts.map +0 -1
- package/dist/session/SessionContext.js +0 -410
- package/dist/session/SessionContext.js.map +0 -1
- package/dist/session/environment.d.ts +0 -52
- package/dist/session/environment.d.ts.map +0 -1
- package/dist/session/environment.js +0 -27
- package/dist/session/environment.js.map +0 -1
- package/dist/session/history.d.ts +0 -18
- package/dist/session/history.d.ts.map +0 -1
- package/dist/session/history.js +0 -68
- package/dist/session/history.js.map +0 -1
- package/dist/session/index.d.ts +0 -10
- package/dist/session/index.d.ts.map +0 -1
- package/dist/session/index.js +0 -9
- package/dist/session/index.js.map +0 -1
- package/dist/session/serverData.d.ts +0 -38
- package/dist/session/serverData.d.ts.map +0 -1
- package/dist/session/serverData.js +0 -261
- package/dist/session/serverData.js.map +0 -1
- package/dist/tracing/pipelineHelpers.d.ts +0 -29
- package/dist/tracing/pipelineHelpers.d.ts.map +0 -1
- package/dist/tracing/pipelineHelpers.js +0 -224
- package/dist/tracing/pipelineHelpers.js.map +0 -1
- package/dist/tracking/Tracker.d.ts +0 -55
- package/dist/tracking/Tracker.d.ts.map +0 -1
- package/dist/tracking/Tracker.js +0 -217
- package/dist/tracking/Tracker.js.map +0 -1
- package/dist/tracking/index.d.ts +0 -8
- package/dist/tracking/index.d.ts.map +0 -1
- package/dist/tracking/index.js +0 -8
- package/dist/tracking/index.js.map +0 -1
- package/dist/tracking/schemas.d.ts +0 -292
- package/dist/tracking/schemas.d.ts.map +0 -1
- package/dist/tracking/schemas.js +0 -91
- package/dist/tracking/schemas.js.map +0 -1
- package/dist/utils/extractSetFlags.d.ts +0 -6
- package/dist/utils/extractSetFlags.d.ts.map +0 -1
- package/dist/utils/extractSetFlags.js +0 -16
- package/dist/utils/extractSetFlags.js.map +0 -1
- package/dist/utils/formatTimeAgo.d.ts +0 -2
- package/dist/utils/formatTimeAgo.d.ts.map +0 -1
- package/dist/utils/formatTimeAgo.js +0 -20
- package/dist/utils/formatTimeAgo.js.map +0 -1
- package/dist/utils/index.d.ts +0 -12
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -12
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/machineId.d.ts +0 -14
- package/dist/utils/machineId.d.ts.map +0 -1
- package/dist/utils/machineId.js +0 -66
- package/dist/utils/machineId.js.map +0 -1
- package/dist/utils/pathUtils.d.ts +0 -22
- package/dist/utils/pathUtils.d.ts.map +0 -1
- package/dist/utils/pathUtils.js +0 -54
- package/dist/utils/pathUtils.js.map +0 -1
- package/scripts/download-ripgrep.js +0 -269
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK 2.0 span emission helpers.
|
|
3
|
+
*
|
|
4
|
+
* Public-API methods on the client open and close spans through `SpanRecorder`.
|
|
5
|
+
* The recorder is the single place that knows about the OTel API: when no OTel
|
|
6
|
+
* is configured, every method returns a no-op `SpanLifecycle` so the call
|
|
7
|
+
* sites don't branch.
|
|
8
|
+
*
|
|
9
|
+
* Span boundaries:
|
|
10
|
+
*
|
|
11
|
+
* - `qar.client.connect` — wraps `client.connect()` until the WS upgrade resolves.
|
|
12
|
+
* - `qar.client.disconnect` — short-lived; ends when teardown returns.
|
|
13
|
+
* - `qar.client.task.start` — wraps `tasks.start`; ends when the iterator closes.
|
|
14
|
+
* - `qar.client.task.continue` — same shape, distinct name.
|
|
15
|
+
* - `qar.client.task.cancel` — short-lived; ends when `task.done(canceled)` arrives.
|
|
16
|
+
* - `qar.client.task.resubscribe` — wraps `tasks.resubscribe` invocation.
|
|
17
|
+
* - `qar.client.tool.respond` — short-lived; ends when the WS write resolves.
|
|
18
|
+
* - `qar.client.tool.handler` — wraps the inbound `tool.request` → handler invocation.
|
|
19
|
+
*
|
|
20
|
+
* Spans inherit from the consumer's currently-active OTel context. Errors
|
|
21
|
+
* record an exception and set `ERROR` status. Cleanly-terminated spans set
|
|
22
|
+
* `OK`. Iterator early-termination still records `OK` (cancellation isn't an
|
|
23
|
+
* error), with an attribute distinguishing terminal vs cancel paths.
|
|
24
|
+
*/
|
|
25
|
+
import { GEN_AI_CONVERSATION_ID, GEN_AI_OPERATION_NAME, GEN_AI_OP_EXECUTE_TOOL, QAR_AGENT_ID, QAR_AGENT_KIND, QAR_GRAPH_DEPTH, QAR_GRAPH_ENTRY, QAR_MESSAGE_ID, QAR_NODE_NAME, QAR_PARENT_MESSAGE_ID, QAR_SESSION_ID, QAR_SKILL_NAME, QAR_TASK_ID, QAR_TOOL_CALL_ID, QAR_TOOL_NAME, QAR_TOOL_ORIGIN, QAR_TOOL_OUTCOME, SERVICE_NAME, SERVICE_NAMESPACE, SERVICE_NAMESPACE_VALUE, SERVICE_NAME_VALUE, SERVICE_VERSION, SPAN_CONNECT, SPAN_DISCONNECT, SPAN_TASK_CANCEL, SPAN_TASK_CONTINUE, SPAN_TASK_RESUBSCRIBE, SPAN_TASK_START, SPAN_TOOL_HANDLER, SPAN_TOOL_RESPOND, TOOL_ORIGIN_SDK_SIDE, TOOL_OUTCOME_DENIED, TOOL_OUTCOME_ERROR, TOOL_OUTCOME_SUCCESS, } from './attributes.js';
|
|
26
|
+
/** Default tracer name. Same as `service.name` so Phoenix groups spans naturally. */
|
|
27
|
+
const TRACER_NAME = SERVICE_NAME_VALUE;
|
|
28
|
+
/**
|
|
29
|
+
* Span emission entry-point. One instance per `QodoClient`. Methods return a
|
|
30
|
+
* `SpanLifecycle` the call site closes when the operation completes (or fails).
|
|
31
|
+
*
|
|
32
|
+
* A `SpanRecorder` constructed with `otel === undefined` returns a single
|
|
33
|
+
* shared no-op lifecycle for every method. No allocations, no overhead beyond
|
|
34
|
+
* a method-call dispatch.
|
|
35
|
+
*/
|
|
36
|
+
export class SpanRecorder {
|
|
37
|
+
otel;
|
|
38
|
+
tracer;
|
|
39
|
+
statusOk;
|
|
40
|
+
statusError;
|
|
41
|
+
/** Cached resource attrs stamped on every span so Phoenix groups by service. */
|
|
42
|
+
resourceAttrs;
|
|
43
|
+
constructor(otel, sdkVersion) {
|
|
44
|
+
this.otel = otel;
|
|
45
|
+
if (otel !== undefined) {
|
|
46
|
+
this.tracer = otel.trace.getTracer(TRACER_NAME, sdkVersion);
|
|
47
|
+
}
|
|
48
|
+
this.statusOk = otel?.SpanStatusCode.OK ?? 1;
|
|
49
|
+
this.statusError = otel?.SpanStatusCode.ERROR ?? 2;
|
|
50
|
+
this.resourceAttrs = {
|
|
51
|
+
[SERVICE_NAME]: SERVICE_NAME_VALUE,
|
|
52
|
+
[SERVICE_NAMESPACE]: SERVICE_NAMESPACE_VALUE,
|
|
53
|
+
[SERVICE_VERSION]: sdkVersion,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** Whether OTel emission is wired (vs no-op). */
|
|
57
|
+
get isEnabled() {
|
|
58
|
+
return this.tracer !== undefined;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Open a `qar.client.task.start` span. The caller is responsible for closing
|
|
62
|
+
* it — typically via the `TaskSubscription` lifecycle wired in `TaskClient`.
|
|
63
|
+
*/
|
|
64
|
+
startTaskStartSpan(attrs) {
|
|
65
|
+
return this.openTaskSpan(SPAN_TASK_START, {
|
|
66
|
+
...(attrs.sessionId !== undefined
|
|
67
|
+
? {
|
|
68
|
+
[QAR_SESSION_ID]: attrs.sessionId,
|
|
69
|
+
[GEN_AI_CONVERSATION_ID]: attrs.sessionId,
|
|
70
|
+
}
|
|
71
|
+
: {}),
|
|
72
|
+
[QAR_MESSAGE_ID]: attrs.messageId,
|
|
73
|
+
...(attrs.agentId !== undefined ? { [QAR_AGENT_ID]: attrs.agentId } : {}),
|
|
74
|
+
...(attrs.skillName !== undefined ? { [QAR_SKILL_NAME]: attrs.skillName } : {}),
|
|
75
|
+
...(attrs.operationName !== undefined ? { [GEN_AI_OPERATION_NAME]: attrs.operationName } : {}),
|
|
76
|
+
...(attrs.graphEntry !== undefined ? { [QAR_GRAPH_ENTRY]: attrs.graphEntry } : {}),
|
|
77
|
+
...(attrs.graphDepth !== undefined ? { [QAR_GRAPH_DEPTH]: attrs.graphDepth } : {}),
|
|
78
|
+
...(attrs.agentKind !== undefined ? { [QAR_AGENT_KIND]: attrs.agentKind } : {}),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/** Open a `qar.client.task.continue` span. */
|
|
82
|
+
startTaskContinueSpan(attrs) {
|
|
83
|
+
return this.openTaskSpan(SPAN_TASK_CONTINUE, {
|
|
84
|
+
...(attrs.sessionId !== undefined
|
|
85
|
+
? {
|
|
86
|
+
[QAR_SESSION_ID]: attrs.sessionId,
|
|
87
|
+
[GEN_AI_CONVERSATION_ID]: attrs.sessionId,
|
|
88
|
+
}
|
|
89
|
+
: {}),
|
|
90
|
+
[QAR_MESSAGE_ID]: attrs.messageId,
|
|
91
|
+
[QAR_TASK_ID]: attrs.taskId,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/** Open a `qar.client.task.cancel` span. */
|
|
95
|
+
startTaskCancelSpan(attrs) {
|
|
96
|
+
return this.openSpan(SPAN_TASK_CANCEL, {
|
|
97
|
+
...(attrs.sessionId !== undefined
|
|
98
|
+
? {
|
|
99
|
+
[QAR_SESSION_ID]: attrs.sessionId,
|
|
100
|
+
[GEN_AI_CONVERSATION_ID]: attrs.sessionId,
|
|
101
|
+
}
|
|
102
|
+
: {}),
|
|
103
|
+
[QAR_MESSAGE_ID]: attrs.messageId,
|
|
104
|
+
[QAR_TASK_ID]: attrs.taskId,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/** Open a `qar.client.task.resubscribe` span. */
|
|
108
|
+
startTaskResubscribeSpan(attrs) {
|
|
109
|
+
return this.openTaskSpan(SPAN_TASK_RESUBSCRIBE, {
|
|
110
|
+
...(attrs.sessionId !== undefined
|
|
111
|
+
? {
|
|
112
|
+
[QAR_SESSION_ID]: attrs.sessionId,
|
|
113
|
+
[GEN_AI_CONVERSATION_ID]: attrs.sessionId,
|
|
114
|
+
}
|
|
115
|
+
: {}),
|
|
116
|
+
[QAR_MESSAGE_ID]: attrs.messageId,
|
|
117
|
+
[QAR_TASK_ID]: attrs.taskId,
|
|
118
|
+
...(attrs.sinceMessageId !== undefined
|
|
119
|
+
? { [QAR_PARENT_MESSAGE_ID]: attrs.sinceMessageId }
|
|
120
|
+
: {}),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Open a `qar.client.tool.respond` span — short-lived, ends on WS write.
|
|
125
|
+
*
|
|
126
|
+
* Every outbound `tool.response` envelope carries a `node_name` so the
|
|
127
|
+
* span records it for parallel-graph telemetry routing.
|
|
128
|
+
*/
|
|
129
|
+
startToolRespondSpan(attrs) {
|
|
130
|
+
return this.openSpan(SPAN_TOOL_RESPOND, {
|
|
131
|
+
...(attrs.sessionId !== undefined
|
|
132
|
+
? {
|
|
133
|
+
[QAR_SESSION_ID]: attrs.sessionId,
|
|
134
|
+
[GEN_AI_CONVERSATION_ID]: attrs.sessionId,
|
|
135
|
+
}
|
|
136
|
+
: {}),
|
|
137
|
+
[QAR_TOOL_CALL_ID]: attrs.toolCallId,
|
|
138
|
+
[QAR_TOOL_ORIGIN]: TOOL_ORIGIN_SDK_SIDE,
|
|
139
|
+
[QAR_TOOL_OUTCOME]: attrs.outcome,
|
|
140
|
+
[QAR_NODE_NAME]: attrs.nodeName,
|
|
141
|
+
[GEN_AI_OPERATION_NAME]: GEN_AI_OP_EXECUTE_TOOL,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Open a `qar.client.tool.handler` span around the invocation of a registered
|
|
146
|
+
* handler for one `ToolCall` from an inbound `tool.request`. Caller updates
|
|
147
|
+
* `qar.tool_outcome` and closes via `succeed()` / `fail()` based on the
|
|
148
|
+
* handler's per-call result.
|
|
149
|
+
*
|
|
150
|
+
* A parallel-batched `tool.request` carrying N calls opens N sibling
|
|
151
|
+
* spans (one per call), each tagged with its own
|
|
152
|
+
* `qar.tool_call_id` and the request's `qar.node_name`. The shared parent
|
|
153
|
+
* is whatever OTel context was active when the inbound envelope arrived —
|
|
154
|
+
* typically the task span.
|
|
155
|
+
*/
|
|
156
|
+
startToolHandlerSpan(attrs) {
|
|
157
|
+
return this.openSpan(SPAN_TOOL_HANDLER, {
|
|
158
|
+
...(attrs.sessionId !== undefined
|
|
159
|
+
? {
|
|
160
|
+
[QAR_SESSION_ID]: attrs.sessionId,
|
|
161
|
+
[GEN_AI_CONVERSATION_ID]: attrs.sessionId,
|
|
162
|
+
}
|
|
163
|
+
: {}),
|
|
164
|
+
[QAR_TOOL_CALL_ID]: attrs.toolCallId,
|
|
165
|
+
[QAR_TOOL_NAME]: attrs.toolName,
|
|
166
|
+
[QAR_TOOL_ORIGIN]: TOOL_ORIGIN_SDK_SIDE,
|
|
167
|
+
[QAR_NODE_NAME]: attrs.nodeName,
|
|
168
|
+
[GEN_AI_OPERATION_NAME]: GEN_AI_OP_EXECUTE_TOOL,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
/** Open a `qar.client.connect` span. Ends when the WS upgrade resolves. */
|
|
172
|
+
startConnectSpan() {
|
|
173
|
+
return this.openSpan(SPAN_CONNECT, {});
|
|
174
|
+
}
|
|
175
|
+
/** Open a `qar.client.disconnect` span. */
|
|
176
|
+
startDisconnectSpan(attrs) {
|
|
177
|
+
return this.openSpan(SPAN_DISCONNECT, {
|
|
178
|
+
...(attrs.sessionId !== undefined ? { [QAR_SESSION_ID]: attrs.sessionId } : {}),
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Internal: open a span as a child of the consumer's currently-active
|
|
183
|
+
* context, attaching attributes + the resource attrs. Returns a
|
|
184
|
+
* `SpanLifecycle` the caller closes.
|
|
185
|
+
*/
|
|
186
|
+
openSpan(name, attrs) {
|
|
187
|
+
if (this.tracer === undefined)
|
|
188
|
+
return NOOP_LIFECYCLE;
|
|
189
|
+
const otel = this.otel;
|
|
190
|
+
const parentContext = otel.context.active();
|
|
191
|
+
const span = this.tracer.startSpan(name, { attributes: { ...this.resourceAttrs, ...attrs } }, parentContext);
|
|
192
|
+
const spanContext = otel.trace.setSpan(parentContext, span);
|
|
193
|
+
return new RealSpanLifecycle(otel, span, spanContext, this.statusOk, this.statusError);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Internal: open a span and return both the lifecycle and the OTel context
|
|
197
|
+
* pinning that span — so a caller (e.g. `TaskSubscription`) can re-attach
|
|
198
|
+
* the context every time it yields an event to the consumer's iterator.
|
|
199
|
+
*/
|
|
200
|
+
openTaskSpan(name, attrs) {
|
|
201
|
+
const lifecycle = this.openSpan(name, attrs);
|
|
202
|
+
return { lifecycle, otelContext: lifecycle.context() };
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/** Outcome-attribute helper used by `TaskClient`/`ToolClient` call sites. */
|
|
206
|
+
export function toolOutcomeFor(outcome) {
|
|
207
|
+
switch (outcome) {
|
|
208
|
+
case 'success':
|
|
209
|
+
return TOOL_OUTCOME_SUCCESS;
|
|
210
|
+
case 'error':
|
|
211
|
+
return TOOL_OUTCOME_ERROR;
|
|
212
|
+
case 'denied':
|
|
213
|
+
return TOOL_OUTCOME_DENIED;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// ---------------------------------------------------------------------------
|
|
217
|
+
// Lifecycle implementations
|
|
218
|
+
// ---------------------------------------------------------------------------
|
|
219
|
+
/**
|
|
220
|
+
* Real span — backed by the consumer's OTel TracerProvider. `succeed()` /
|
|
221
|
+
* `fail()` are idempotent: a second call after close is a no-op so callers
|
|
222
|
+
* don't need to track close state themselves.
|
|
223
|
+
*/
|
|
224
|
+
class RealSpanLifecycle {
|
|
225
|
+
otel;
|
|
226
|
+
span;
|
|
227
|
+
otelContext;
|
|
228
|
+
okCode;
|
|
229
|
+
errorCode;
|
|
230
|
+
closed = false;
|
|
231
|
+
constructor(otel, span, otelContext, okCode, errorCode) {
|
|
232
|
+
this.otel = otel;
|
|
233
|
+
this.span = span;
|
|
234
|
+
this.otelContext = otelContext;
|
|
235
|
+
this.okCode = okCode;
|
|
236
|
+
this.errorCode = errorCode;
|
|
237
|
+
}
|
|
238
|
+
setAttribute(key, value) {
|
|
239
|
+
if (this.closed)
|
|
240
|
+
return;
|
|
241
|
+
try {
|
|
242
|
+
this.span.setAttribute(key, value);
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
// Defensive — consumer may have wired an unstable TracerProvider impl.
|
|
246
|
+
// Telemetry should never crash the SDK's hot path.
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
succeed() {
|
|
250
|
+
if (this.closed)
|
|
251
|
+
return;
|
|
252
|
+
this.closed = true;
|
|
253
|
+
try {
|
|
254
|
+
this.span.setStatus({ code: this.okCode });
|
|
255
|
+
this.span.end();
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
// see setAttribute()
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
fail(err) {
|
|
262
|
+
if (this.closed)
|
|
263
|
+
return;
|
|
264
|
+
this.closed = true;
|
|
265
|
+
try {
|
|
266
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
267
|
+
this.span.recordException(err instanceof Error ? err : message);
|
|
268
|
+
this.span.setStatus({ code: this.errorCode, message });
|
|
269
|
+
this.span.end();
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
// see setAttribute()
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
withContext(fn) {
|
|
276
|
+
return this.otel.context.with(this.otelContext, fn);
|
|
277
|
+
}
|
|
278
|
+
context() {
|
|
279
|
+
return this.otelContext;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/** Shared no-op lifecycle — one instance, no allocations on the hot path. */
|
|
283
|
+
const NOOP_LIFECYCLE = {
|
|
284
|
+
setAttribute() {
|
|
285
|
+
/* no-op */
|
|
286
|
+
},
|
|
287
|
+
succeed() {
|
|
288
|
+
/* no-op */
|
|
289
|
+
},
|
|
290
|
+
fail() {
|
|
291
|
+
/* no-op */
|
|
292
|
+
},
|
|
293
|
+
withContext(fn) {
|
|
294
|
+
return fn();
|
|
295
|
+
},
|
|
296
|
+
context() {
|
|
297
|
+
return undefined;
|
|
298
|
+
},
|
|
299
|
+
};
|
|
300
|
+
//# sourceMappingURL=spans.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spans.js","sourceRoot":"","sources":["../../src/observability/spans.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* W3C Trace Context provider.
|
|
3
|
+
*
|
|
4
|
+
* Reads the consumer's currently-active OTel `Context` and serializes the
|
|
5
|
+
* active span's `SpanContext` into a W3C `traceparent` header value
|
|
6
|
+
* (`00-<trace_id>-<span_id>-<trace_flags>`). The `tracestate` arm carries any
|
|
7
|
+
* vendor-specific propagation data attached upstream.
|
|
8
|
+
*
|
|
9
|
+
* Without an `OTelAPI` (or with an OTel API but no active recording span), the
|
|
10
|
+
* provider falls back to the per-envelope filler — a fresh, valid 55-char
|
|
11
|
+
* `traceparent` per call. The QAR server tolerates the synthetic value; what it
|
|
12
|
+
* doesn't tolerate is an empty string (the schema enforces the regex).
|
|
13
|
+
*/
|
|
14
|
+
import type { OTelAPI } from '../tracing/types.js';
|
|
15
|
+
/** Concrete `trace_context` value the SDK writes onto every outbound envelope. */
|
|
16
|
+
export interface TraceContextValue {
|
|
17
|
+
/** Always present, always 55 chars (`00-<32hex>-<16hex>-<2hex>`). */
|
|
18
|
+
readonly traceparent: string;
|
|
19
|
+
/** Optional, only when the active context has a non-empty tracestate. */
|
|
20
|
+
readonly tracestate?: string;
|
|
21
|
+
}
|
|
22
|
+
/** Build a W3C `traceparent` from the components of a SpanContext. */
|
|
23
|
+
export declare function formatTraceparent(traceId: string, spanId: string, traceFlags: number): string;
|
|
24
|
+
/**
|
|
25
|
+
* Provider for the per-envelope `trace_context`. Stateless — every call reads
|
|
26
|
+
* the live OTel context anew. Cheap; no caching needed (a hot envelope path
|
|
27
|
+
* does ~1 read per send).
|
|
28
|
+
*/
|
|
29
|
+
export declare class TraceContextProvider {
|
|
30
|
+
private readonly otel;
|
|
31
|
+
/**
|
|
32
|
+
* @param otel Optional OTel API. When `undefined`, every `current()` call
|
|
33
|
+
* returns a fresh random traceparent.
|
|
34
|
+
*/
|
|
35
|
+
constructor(otel: OTelAPI | undefined);
|
|
36
|
+
/**
|
|
37
|
+
* Resolve the active SpanContext (if any) and return the wire `trace_context`.
|
|
38
|
+
*
|
|
39
|
+
* Order of preference:
|
|
40
|
+
* 1. The currently-active OTel span — its trace-id/span-id are written into
|
|
41
|
+
* `traceparent`, its `traceState.serialize()` (when non-empty) into
|
|
42
|
+
* `tracestate`. This is what stitches the SDK's outbound envelope into
|
|
43
|
+
* the consumer's trace.
|
|
44
|
+
* 2. Filler — a fresh random 55-char `traceparent` per call. The server
|
|
45
|
+
* doesn't reject it; the trace just doesn't continue past the SDK.
|
|
46
|
+
*/
|
|
47
|
+
current(): TraceContextValue;
|
|
48
|
+
/** The currently-active recording span, or `undefined` if no OTel / no span. */
|
|
49
|
+
private activeSpan;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=traceContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traceContext.d.ts","sourceRoot":"","sources":["../../src/observability/traceContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAA6B,MAAM,qBAAqB,CAAC;AAE9E,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAaD,sEAAsE;AACtE,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,MAAM,CAKR;AAED;;;;GAIG;AACH,qBAAa,oBAAoB;IAKnB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJjC;;;OAGG;gBAC0B,IAAI,EAAE,OAAO,GAAG,SAAS;IAEtD;;;;;;;;;;OAUG;IACI,OAAO,IAAI,iBAAiB;IA8BnC,gFAAgF;IAChF,OAAO,CAAC,UAAU;CAiBnB"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* W3C Trace Context provider.
|
|
3
|
+
*
|
|
4
|
+
* Reads the consumer's currently-active OTel `Context` and serializes the
|
|
5
|
+
* active span's `SpanContext` into a W3C `traceparent` header value
|
|
6
|
+
* (`00-<trace_id>-<span_id>-<trace_flags>`). The `tracestate` arm carries any
|
|
7
|
+
* vendor-specific propagation data attached upstream.
|
|
8
|
+
*
|
|
9
|
+
* Without an `OTelAPI` (or with an OTel API but no active recording span), the
|
|
10
|
+
* provider falls back to the per-envelope filler — a fresh, valid 55-char
|
|
11
|
+
* `traceparent` per call. The QAR server tolerates the synthetic value; what it
|
|
12
|
+
* doesn't tolerate is an empty string (the schema enforces the regex).
|
|
13
|
+
*/
|
|
14
|
+
/** Hex characters per W3C trace_id field. */
|
|
15
|
+
const TRACE_ID_HEX_LEN = 32;
|
|
16
|
+
/** Hex characters per W3C span_id field. */
|
|
17
|
+
const SPAN_ID_HEX_LEN = 16;
|
|
18
|
+
/**
|
|
19
|
+
* The "invalid" trace-id and span-id values defined by the W3C spec — used to
|
|
20
|
+
* detect a noop / non-recording SpanContext. Treated as if no active span.
|
|
21
|
+
*/
|
|
22
|
+
const INVALID_TRACE_ID = '0'.repeat(TRACE_ID_HEX_LEN);
|
|
23
|
+
const INVALID_SPAN_ID = '0'.repeat(SPAN_ID_HEX_LEN);
|
|
24
|
+
/** Build a W3C `traceparent` from the components of a SpanContext. */
|
|
25
|
+
export function formatTraceparent(traceId, spanId, traceFlags) {
|
|
26
|
+
// W3C: trace_flags is 1 byte = 2 lowercase hex chars. Mask to the low byte
|
|
27
|
+
// so an SDK that hands us a wider int doesn't break the header shape.
|
|
28
|
+
const flagsHex = (traceFlags & 0xff).toString(16).padStart(2, '0');
|
|
29
|
+
return `00-${traceId}-${spanId}-${flagsHex}`;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Provider for the per-envelope `trace_context`. Stateless — every call reads
|
|
33
|
+
* the live OTel context anew. Cheap; no caching needed (a hot envelope path
|
|
34
|
+
* does ~1 read per send).
|
|
35
|
+
*/
|
|
36
|
+
export class TraceContextProvider {
|
|
37
|
+
otel;
|
|
38
|
+
/**
|
|
39
|
+
* @param otel Optional OTel API. When `undefined`, every `current()` call
|
|
40
|
+
* returns a fresh random traceparent.
|
|
41
|
+
*/
|
|
42
|
+
constructor(otel) {
|
|
43
|
+
this.otel = otel;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Resolve the active SpanContext (if any) and return the wire `trace_context`.
|
|
47
|
+
*
|
|
48
|
+
* Order of preference:
|
|
49
|
+
* 1. The currently-active OTel span — its trace-id/span-id are written into
|
|
50
|
+
* `traceparent`, its `traceState.serialize()` (when non-empty) into
|
|
51
|
+
* `tracestate`. This is what stitches the SDK's outbound envelope into
|
|
52
|
+
* the consumer's trace.
|
|
53
|
+
* 2. Filler — a fresh random 55-char `traceparent` per call. The server
|
|
54
|
+
* doesn't reject it; the trace just doesn't continue past the SDK.
|
|
55
|
+
*/
|
|
56
|
+
current() {
|
|
57
|
+
const span = this.activeSpan();
|
|
58
|
+
if (span === undefined)
|
|
59
|
+
return fillerTraceContext();
|
|
60
|
+
let ctx;
|
|
61
|
+
try {
|
|
62
|
+
ctx = span.spanContext();
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Defensive — shouldn't happen with a real OTel implementation, but a
|
|
66
|
+
// user-supplied fake might mis-shape spanContext(). Falling back to the
|
|
67
|
+
// filler keeps outbound envelopes valid rather than throwing on the
|
|
68
|
+
// emit path.
|
|
69
|
+
return fillerTraceContext();
|
|
70
|
+
}
|
|
71
|
+
if (typeof ctx.traceId !== 'string' ||
|
|
72
|
+
typeof ctx.spanId !== 'string' ||
|
|
73
|
+
ctx.traceId.length !== TRACE_ID_HEX_LEN ||
|
|
74
|
+
ctx.spanId.length !== SPAN_ID_HEX_LEN ||
|
|
75
|
+
ctx.traceId === INVALID_TRACE_ID ||
|
|
76
|
+
ctx.spanId === INVALID_SPAN_ID) {
|
|
77
|
+
// Non-recording / noop span — its SpanContext carries the all-zero ids
|
|
78
|
+
// and isn't meaningful to propagate. Filler.
|
|
79
|
+
return fillerTraceContext();
|
|
80
|
+
}
|
|
81
|
+
const traceparent = formatTraceparent(ctx.traceId, ctx.spanId, ctx.traceFlags);
|
|
82
|
+
const tracestate = serializeTraceState(ctx.traceState);
|
|
83
|
+
return tracestate !== undefined ? { traceparent, tracestate } : { traceparent };
|
|
84
|
+
}
|
|
85
|
+
/** The currently-active recording span, or `undefined` if no OTel / no span. */
|
|
86
|
+
activeSpan() {
|
|
87
|
+
const otel = this.otel;
|
|
88
|
+
if (otel === undefined)
|
|
89
|
+
return undefined;
|
|
90
|
+
const span = otel.trace.getActiveSpan();
|
|
91
|
+
if (span === undefined)
|
|
92
|
+
return undefined;
|
|
93
|
+
// A non-recording span carries the noop SpanContext (all zeros). Skip it
|
|
94
|
+
// here so we fall into the filler arm and emit a valid traceparent.
|
|
95
|
+
try {
|
|
96
|
+
if (typeof span.isRecording === 'function' && !span.isRecording()) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Defensive — see `current()`.
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
return span;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/** Serialize a TraceState object to its header form. Returns `undefined` for missing/empty. */
|
|
108
|
+
function serializeTraceState(ts) {
|
|
109
|
+
if (ts === undefined)
|
|
110
|
+
return undefined;
|
|
111
|
+
let serialized;
|
|
112
|
+
try {
|
|
113
|
+
serialized = ts.serialize();
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
if (typeof serialized !== 'string' || serialized.length === 0)
|
|
119
|
+
return undefined;
|
|
120
|
+
return serialized;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Build a fresh, valid 55-char `traceparent`. Used when no OTel API or no
|
|
124
|
+
* active span — keeps QAR's schema validator happy and ensures every envelope
|
|
125
|
+
* carries a syntactically well-formed header.
|
|
126
|
+
*
|
|
127
|
+
* The flags byte is `00` (not sampled): the trace doesn't continue past the
|
|
128
|
+
* SDK in the absence of a TracerProvider, so opting in to sampling would be
|
|
129
|
+
* misleading.
|
|
130
|
+
*/
|
|
131
|
+
function fillerTraceContext() {
|
|
132
|
+
const traceId = randomHex(16);
|
|
133
|
+
const spanId = randomHex(8);
|
|
134
|
+
return { traceparent: formatTraceparent(traceId, spanId, 0) };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Random lowercase-hex of `byteCount` bytes, isomorphic between Node and
|
|
138
|
+
* browser. Reads from `globalThis.crypto.getRandomValues` — present on Node
|
|
139
|
+
* 19+ and every modern browser. Output shape (length, alphabet) matches the
|
|
140
|
+
* pre-2.0 `randomBytes(N).toString('hex')` exactly so wire emission is
|
|
141
|
+
* byte-identical.
|
|
142
|
+
*/
|
|
143
|
+
function randomHex(byteCount) {
|
|
144
|
+
const bytes = new Uint8Array(byteCount);
|
|
145
|
+
globalThis.crypto.getRandomValues(bytes);
|
|
146
|
+
let hex = '';
|
|
147
|
+
for (const b of bytes)
|
|
148
|
+
hex += b.toString(16).padStart(2, '0');
|
|
149
|
+
return hex;
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=traceContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traceContext.js","sourceRoot":"","sources":["../../src/observability/traceContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire-level transport counters for the SDK's reconnect + replay path.
|
|
3
|
+
*
|
|
4
|
+
* Three counters expose the contract `task.resubscribe` flow has with
|
|
5
|
+
* QAR's per-session replay buffer: how many resubscribes the SDK has
|
|
6
|
+
* sent, how many replayed envelopes have come back, and how often the
|
|
7
|
+
* anchor `since_message_id` rotated out before the SDK could
|
|
8
|
+
* re-anchor.
|
|
9
|
+
*
|
|
10
|
+
* The counters are wire-agnostic — they live next to the spans the SDK
|
|
11
|
+
* already emits (`src/observability/spans.ts`) rather than inside the
|
|
12
|
+
* connection itself so consumers can read them off `client.transportMetrics`
|
|
13
|
+
* without holding a reference to the WS layer.
|
|
14
|
+
*
|
|
15
|
+
* Backing storage is in-memory. The SDK does NOT shovel these into an OTel
|
|
16
|
+
* meter — consumers wanting Prometheus/StatsD scrape paths read the values
|
|
17
|
+
* via {@link TransportMetrics.snapshot} and forward them through their own
|
|
18
|
+
* exporter. (OTel's metrics API is a heavier surface than the SDK's tracing
|
|
19
|
+
* peer-dependency posture wants to pull in for three counters.)
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Snapshot of every counter at a point in time. Counter names are
|
|
23
|
+
* wire-aligned with QAR's runtime documentation: `*_total` suffix per the
|
|
24
|
+
* OpenMetrics convention, even though the SDK doesn't ship them through an
|
|
25
|
+
* OTel meter — the suffix is part of the published name so consumers
|
|
26
|
+
* forwarding to Prometheus get the canonical metric name without renames.
|
|
27
|
+
*/
|
|
28
|
+
export interface TransportMetricsSnapshot {
|
|
29
|
+
/** Envelopes received via `task.resubscribe` replay (descendants of an anchor). */
|
|
30
|
+
readonly replay_envelopes_received_total: number;
|
|
31
|
+
/** `task.resubscribe` envelopes emitted by the SDK (auto-replay + manual). */
|
|
32
|
+
readonly resubscribes_sent_total: number;
|
|
33
|
+
/** Inbound `error { code: "replay_anchor_missing" }` envelopes from QAR. */
|
|
34
|
+
readonly replay_anchor_missing_total: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* In-memory counter store. One instance per `QodoClient` — survives
|
|
38
|
+
* reconnects so the counters accumulate across the client's lifetime.
|
|
39
|
+
*
|
|
40
|
+
* The store is intentionally minimal: three monotonic counters + a
|
|
41
|
+
* `snapshot()` reader. No reset, no labels, no histograms. Consumers
|
|
42
|
+
* wanting label dimensionality (per-session, per-task) read the per-event
|
|
43
|
+
* span attributes instead — the counters are the aggregate roll-up.
|
|
44
|
+
*/
|
|
45
|
+
export declare class TransportMetrics {
|
|
46
|
+
private replayEnvelopesReceived;
|
|
47
|
+
private resubscribesSent;
|
|
48
|
+
private replayAnchorMissing;
|
|
49
|
+
/** Increment per inbound envelope that arrived via a `task.resubscribe` replay window. */
|
|
50
|
+
recordReplayEnvelopeReceived(): void;
|
|
51
|
+
/** Increment per outbound `task.resubscribe` envelope written to the wire. */
|
|
52
|
+
recordResubscribeSent(): void;
|
|
53
|
+
/** Increment per inbound `error { code: 'replay_anchor_missing' }` envelope. */
|
|
54
|
+
recordReplayAnchorMissing(): void;
|
|
55
|
+
/** Read every counter atomically — single-threaded JS, so this is a copy. */
|
|
56
|
+
snapshot(): TransportMetricsSnapshot;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=transportMetrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transportMetrics.d.ts","sourceRoot":"","sources":["../../src/observability/transportMetrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,wBAAwB;IACvC,mFAAmF;IACnF,QAAQ,CAAC,+BAA+B,EAAE,MAAM,CAAC;IACjD,8EAA8E;IAC9E,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,4EAA4E;IAC5E,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;CAC9C;AAED;;;;;;;;GAQG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,uBAAuB,CAAK;IACpC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,mBAAmB,CAAK;IAEhC,0FAA0F;IACnF,4BAA4B,IAAI,IAAI;IAI3C,8EAA8E;IACvE,qBAAqB,IAAI,IAAI;IAIpC,gFAAgF;IACzE,yBAAyB,IAAI,IAAI;IAIxC,6EAA6E;IACtE,QAAQ,IAAI,wBAAwB;CAO5C"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire-level transport counters for the SDK's reconnect + replay path.
|
|
3
|
+
*
|
|
4
|
+
* Three counters expose the contract `task.resubscribe` flow has with
|
|
5
|
+
* QAR's per-session replay buffer: how many resubscribes the SDK has
|
|
6
|
+
* sent, how many replayed envelopes have come back, and how often the
|
|
7
|
+
* anchor `since_message_id` rotated out before the SDK could
|
|
8
|
+
* re-anchor.
|
|
9
|
+
*
|
|
10
|
+
* The counters are wire-agnostic — they live next to the spans the SDK
|
|
11
|
+
* already emits (`src/observability/spans.ts`) rather than inside the
|
|
12
|
+
* connection itself so consumers can read them off `client.transportMetrics`
|
|
13
|
+
* without holding a reference to the WS layer.
|
|
14
|
+
*
|
|
15
|
+
* Backing storage is in-memory. The SDK does NOT shovel these into an OTel
|
|
16
|
+
* meter — consumers wanting Prometheus/StatsD scrape paths read the values
|
|
17
|
+
* via {@link TransportMetrics.snapshot} and forward them through their own
|
|
18
|
+
* exporter. (OTel's metrics API is a heavier surface than the SDK's tracing
|
|
19
|
+
* peer-dependency posture wants to pull in for three counters.)
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* In-memory counter store. One instance per `QodoClient` — survives
|
|
23
|
+
* reconnects so the counters accumulate across the client's lifetime.
|
|
24
|
+
*
|
|
25
|
+
* The store is intentionally minimal: three monotonic counters + a
|
|
26
|
+
* `snapshot()` reader. No reset, no labels, no histograms. Consumers
|
|
27
|
+
* wanting label dimensionality (per-session, per-task) read the per-event
|
|
28
|
+
* span attributes instead — the counters are the aggregate roll-up.
|
|
29
|
+
*/
|
|
30
|
+
export class TransportMetrics {
|
|
31
|
+
replayEnvelopesReceived = 0;
|
|
32
|
+
resubscribesSent = 0;
|
|
33
|
+
replayAnchorMissing = 0;
|
|
34
|
+
/** Increment per inbound envelope that arrived via a `task.resubscribe` replay window. */
|
|
35
|
+
recordReplayEnvelopeReceived() {
|
|
36
|
+
this.replayEnvelopesReceived += 1;
|
|
37
|
+
}
|
|
38
|
+
/** Increment per outbound `task.resubscribe` envelope written to the wire. */
|
|
39
|
+
recordResubscribeSent() {
|
|
40
|
+
this.resubscribesSent += 1;
|
|
41
|
+
}
|
|
42
|
+
/** Increment per inbound `error { code: 'replay_anchor_missing' }` envelope. */
|
|
43
|
+
recordReplayAnchorMissing() {
|
|
44
|
+
this.replayAnchorMissing += 1;
|
|
45
|
+
}
|
|
46
|
+
/** Read every counter atomically — single-threaded JS, so this is a copy. */
|
|
47
|
+
snapshot() {
|
|
48
|
+
return {
|
|
49
|
+
replay_envelopes_received_total: this.replayEnvelopesReceived,
|
|
50
|
+
resubscribes_sent_total: this.resubscribesSent,
|
|
51
|
+
replay_anchor_missing_total: this.replayAnchorMissing,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=transportMetrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transportMetrics.js","sourceRoot":"","sources":["../../src/observability/transportMetrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAkBH;;;;;;;;GAQG;AACH,MAAM,OAAO,gBAAgB;IACnB,uBAAuB,GAAG,CAAC,CAAC;IAC5B,gBAAgB,GAAG,CAAC,CAAC;IACrB,mBAAmB,GAAG,CAAC,CAAC;IAEhC,0FAA0F;IACnF,4BAA4B;QACjC,IAAI,CAAC,uBAAuB,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,8EAA8E;IACvE,qBAAqB;QAC1B,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,gFAAgF;IACzE,yBAAyB;QAC9B,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,6EAA6E;IACtE,QAAQ;QACb,OAAO;YACL,+BAA+B,EAAE,IAAI,CAAC,uBAAuB;YAC7D,uBAAuB,EAAE,IAAI,CAAC,gBAAgB;YAC9C,2BAA2B,EAAE,IAAI,CAAC,mBAAmB;SACtD,CAAC;IACJ,CAAC;CACF"}
|