@qodo/sdk 0.13.3 → 2.0.0-next.0
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 +1115 -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 +800 -0
- package/dist/client/connection.d.ts.map +1 -0
- package/dist/client/connection.js +2020 -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 -104
- package/dist/api/agent.d.ts.map +0 -1
- package/dist/api/agent.js +0 -939
- 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,536 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `QarRegistryClient` — SDK-process-scoped local registries for consumer-built
|
|
3
|
+
* agents and MCP servers.
|
|
4
|
+
*
|
|
5
|
+
* Surface: `client.qar.registerAgent(spec)` + `client.qar.registerMcp(name, config)`.
|
|
6
|
+
* Returns branded handles (`RegisteredAgentRef` / `RegisteredMcpRef`) the
|
|
7
|
+
* consumer can pass to `tasks.start` and slot into `spawnable_agents`.
|
|
8
|
+
*
|
|
9
|
+
* **Architectural posture.** The local agent body is never serialized to
|
|
10
|
+
* QAR. Registration keeps the spec in-process so the SDK can execute the
|
|
11
|
+
* agent locally (the dispatch loop is the SDK's; QAR remains the
|
|
12
|
+
* runtime / orchestrator that issues `task.start` envelopes). For
|
|
13
|
+
* `agent_id` referenced in a `task.start` payload, the SDK auto-fills
|
|
14
|
+
* the wire's `agent_id` field from `ref.name` — that's the only thing
|
|
15
|
+
* that crosses the wire.
|
|
16
|
+
*
|
|
17
|
+
* **Scope.** In-memory only; no persistence. The registries belong to a
|
|
18
|
+
* `QodoClient` instance — a fresh client starts empty. Re-registering the
|
|
19
|
+
* same name throws `QodoRegistryConflictError` unless `replace: true` is set,
|
|
20
|
+
* so consumers can't silently shadow a previous registration.
|
|
21
|
+
*
|
|
22
|
+
* **No built-in MCPs.** The SDK ships with zero default MCP servers
|
|
23
|
+
* (clean-slate departure from 1.x). The registries start empty;
|
|
24
|
+
* `qar.registerMcp` is the canonical path for adding any consumer MCP.
|
|
25
|
+
*/
|
|
26
|
+
import { QodoRegistryConflictError } from './errors.js';
|
|
27
|
+
import { McpClientPool } from './mcp/McpClientPool.js';
|
|
28
|
+
import { A2ARegistry } from './a2a/registerA2A.js';
|
|
29
|
+
/**
|
|
30
|
+
* Type guard for the URL-only SDK1 ergonomic — `{ url, headers?, requestInit? }`
|
|
31
|
+
* with no explicit `transport` field. Structural-shape detection so the SDK
|
|
32
|
+
* can normalize at register-time without forcing consumers to discriminate.
|
|
33
|
+
*/
|
|
34
|
+
function isUrlOnlyConfig(config) {
|
|
35
|
+
return (config.transport === undefined &&
|
|
36
|
+
typeof config.url === 'string');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Normalize a {@link McpConfig} to either the canonical
|
|
40
|
+
* remote/stdio/streamable shape (consumed by the pool's `prepareEntry`)
|
|
41
|
+
* or the `'sdk'` in-process shape (which the pool never sees). Returns
|
|
42
|
+
* the input verbatim for the four explicit-discriminator shapes;
|
|
43
|
+
* synthesizes a `'remote-streamable-http'` config from the URL-only
|
|
44
|
+
* shape.
|
|
45
|
+
*/
|
|
46
|
+
function normalizeMcpConfig(config) {
|
|
47
|
+
if (isUrlOnlyConfig(config)) {
|
|
48
|
+
// SDK1's `mcpServers: { name: { url, headers? } }` had no explicit
|
|
49
|
+
// transport; the canonical MCP wire protocol today is Streamable
|
|
50
|
+
// HTTP, so default the URL-only shape to that.
|
|
51
|
+
const out = {
|
|
52
|
+
transport: 'remote-streamable-http',
|
|
53
|
+
url: config.url,
|
|
54
|
+
...(config.headers !== undefined ? { headers: config.headers } : {}),
|
|
55
|
+
...(config.requestInit !== undefined ? { requestInit: config.requestInit } : {}),
|
|
56
|
+
};
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
// Already in canonical form (one of the four explicit-discriminator shapes).
|
|
60
|
+
return config;
|
|
61
|
+
}
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// QarRegistryClient
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
export class QarRegistryClient {
|
|
66
|
+
agents = new Map();
|
|
67
|
+
/**
|
|
68
|
+
* S9 — typed A2A endpoint registry. Lazy-allocated on first use so
|
|
69
|
+
* consumers who never register an A2A endpoint pay no extra memory.
|
|
70
|
+
* The bridge that consumes these registrations lives runtime-side in
|
|
71
|
+
* QAR; the SDK keeps registration purely local.
|
|
72
|
+
*/
|
|
73
|
+
a2aRegistry = null;
|
|
74
|
+
// Map values are the NORMALIZED shape — URL-only configs are
|
|
75
|
+
// collapsed to `'remote-streamable-http'` by `normalizeMcpConfig` at
|
|
76
|
+
// register-time, so every stored entry has an explicit `transport`
|
|
77
|
+
// discriminator. Public-surface `getMcp` returns the normalized form
|
|
78
|
+
// (the only thing downstream code touches).
|
|
79
|
+
mcps = new Map();
|
|
80
|
+
/**
|
|
81
|
+
* Per-MCP projection policy. Keyed by registered MCP name.
|
|
82
|
+
* `prefixToolNames` defaults to `true` and `unavailability` defaults
|
|
83
|
+
* to `'fail'`; the map only stores the explicit consumer overrides so
|
|
84
|
+
* defaulting at read time keeps the policy lookup branch-free for the
|
|
85
|
+
* common case. Re-registration with `replace: true` rewrites the
|
|
86
|
+
* entry; `unregisterMcp` deletes it.
|
|
87
|
+
*/
|
|
88
|
+
mcpPolicies = new Map();
|
|
89
|
+
/**
|
|
90
|
+
* Connection pool for remote / stdio MCPs. Owns one
|
|
91
|
+
* `@modelcontextprotocol/sdk` `Client` instance per registered MCP whose
|
|
92
|
+
* config is NOT `transport: 'sdk'`. The pool is lazy — instantiated only
|
|
93
|
+
* if/when a non-`sdk` config is registered, so consumers that never wire
|
|
94
|
+
* a remote MCP pay no `@modelcontextprotocol/sdk` runtime cost beyond the
|
|
95
|
+
* static import.
|
|
96
|
+
*
|
|
97
|
+
* SDK-transport (`'sdk'`) configs DO NOT enter the pool — their dispatch
|
|
98
|
+
* route is the existing `client.skillsMcpServer` bridge in
|
|
99
|
+
* `QodoClient.attachSkillsMcpBridge()` (and any consumer-built sibling).
|
|
100
|
+
* Pooling them would double-register the qodo-skills tools against a
|
|
101
|
+
* second dispatch path.
|
|
102
|
+
*/
|
|
103
|
+
mcpPool = null;
|
|
104
|
+
/**
|
|
105
|
+
* @internal — hook set by `QodoClient` to keep the generic `tool.request`
|
|
106
|
+
* MCP-dispatch bridge attached only while at least one remote / stdio
|
|
107
|
+
* MCP is registered. Without this gate the bridge would shadow the
|
|
108
|
+
* dispatcher's "zero handlers → deny" path for consumers that registered
|
|
109
|
+
* no remote MCPs (any handler returning `undefined` defeats the deny
|
|
110
|
+
* fallback per `ToolClient`'s stack semantics).
|
|
111
|
+
*
|
|
112
|
+
* The QodoClient sets both callbacks once on `connect()`; `disconnect()`
|
|
113
|
+
* clears them. Pre-connect, the hooks are `undefined` — the registry
|
|
114
|
+
* still tracks the count and replays the most recent transition the
|
|
115
|
+
* first time a connect happens.
|
|
116
|
+
*/
|
|
117
|
+
remoteMcpHook;
|
|
118
|
+
/** Tally of registered configs whose transport is NOT `'sdk'`. */
|
|
119
|
+
remoteMcpCount = 0;
|
|
120
|
+
/**
|
|
121
|
+
* Register a locally-built agent.
|
|
122
|
+
*
|
|
123
|
+
* Returns a branded `RegisteredAgentRef` the consumer can pass into
|
|
124
|
+
* `tasks.start({ agent_id: ref })` and other forward-looking surfaces
|
|
125
|
+
* (`spawnable_agents`).
|
|
126
|
+
*
|
|
127
|
+
* @throws {QodoRegistryConflictError} when an agent with `spec.name` is
|
|
128
|
+
* already registered and `opts.replace` is not `true`.
|
|
129
|
+
*/
|
|
130
|
+
registerAgent(spec, opts) {
|
|
131
|
+
if (spec.name.length === 0) {
|
|
132
|
+
throw new QodoRegistryConflictError('agent', spec.name, 'agent name must be a non-empty string');
|
|
133
|
+
}
|
|
134
|
+
if (this.agents.has(spec.name) && opts?.replace !== true) {
|
|
135
|
+
throw new QodoRegistryConflictError('agent', spec.name, `agent '${spec.name}' is already registered; pass { replace: true } to overwrite`);
|
|
136
|
+
}
|
|
137
|
+
this.agents.set(spec.name, spec);
|
|
138
|
+
return { kind: 'agent', name: spec.name };
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Register an MCP server the SDK can dispatch tool calls into.
|
|
142
|
+
*
|
|
143
|
+
* Returns a branded `RegisteredMcpRef` the consumer can reference in
|
|
144
|
+
* `AgentSpec.tools` (string form) or pass to forward-looking dispatch
|
|
145
|
+
* surfaces (the `tool.request` → MCP routing handler).
|
|
146
|
+
*
|
|
147
|
+
* @throws {QodoRegistryConflictError} when an MCP with `name` is already
|
|
148
|
+
* registered and `opts.replace` is not `true`.
|
|
149
|
+
*/
|
|
150
|
+
registerMcp(name, config, opts) {
|
|
151
|
+
if (name.length === 0) {
|
|
152
|
+
throw new QodoRegistryConflictError('mcp', name, 'mcp name must be a non-empty string');
|
|
153
|
+
}
|
|
154
|
+
const isReplace = this.mcps.has(name);
|
|
155
|
+
if (isReplace && opts?.replace !== true) {
|
|
156
|
+
throw new QodoRegistryConflictError('mcp', name, `mcp '${name}' is already registered; pass { replace: true } to overwrite`);
|
|
157
|
+
}
|
|
158
|
+
// Normalize SDK1's URL-only shape (`{ url, headers? }` with no
|
|
159
|
+
// explicit `transport`) into the canonical `'remote-streamable-http'`
|
|
160
|
+
// form BEFORE any discrimination. Five surface shapes collapse to
|
|
161
|
+
// four dispatch paths.
|
|
162
|
+
const normalized = normalizeMcpConfig(config);
|
|
163
|
+
const newIsRemote = normalized.transport !== 'sdk';
|
|
164
|
+
// Two-phase commit: validate synchronously before any registry / pool
|
|
165
|
+
// / count mutation. If `McpClientPool.prepareEntry` throws (malformed
|
|
166
|
+
// URL, unsupported discriminator) the registry stays untouched and a
|
|
167
|
+
// subsequent retry can come through cleanly. The prepared `Client +
|
|
168
|
+
// Transport` pair carries no I/O until {@link McpClientPool.commitEntry}
|
|
169
|
+
// is called.
|
|
170
|
+
let prepared = null;
|
|
171
|
+
if (newIsRemote) {
|
|
172
|
+
if (this.mcpPool === null)
|
|
173
|
+
this.mcpPool = new McpClientPool();
|
|
174
|
+
// `newIsRemote` narrowing already excludes the `'sdk'` arm; the
|
|
175
|
+
// remaining union is `PoolableMcpConfig` (URL-only was collapsed
|
|
176
|
+
// upstream by `normalizeMcpConfig`).
|
|
177
|
+
prepared = this.mcpPool.prepareEntry(name, normalized);
|
|
178
|
+
}
|
|
179
|
+
// All synchronous validation passed — safe to commit registry side
|
|
180
|
+
// effects and the close-prior-then-install-new sequence.
|
|
181
|
+
let priorWasRemote = false;
|
|
182
|
+
if (isReplace) {
|
|
183
|
+
const prior = this.mcps.get(name);
|
|
184
|
+
priorWasRemote = prior !== undefined && prior.transport !== 'sdk';
|
|
185
|
+
// Close any pool entry for the replaced name. Idempotent — drops
|
|
186
|
+
// nothing when the prior config was `transport: 'sdk'`.
|
|
187
|
+
this.mcpPool?.removeAndClose(name);
|
|
188
|
+
}
|
|
189
|
+
// Store the NORMALIZED config in the registry so subsequent
|
|
190
|
+
// `getMcp(name)` returns the canonical shape and `_rebuildPoolEntries`
|
|
191
|
+
// doesn't have to re-normalize on reconnect. The URL-only shape was
|
|
192
|
+
// pure consumer-side ergonomic; downstream code (and tests) read
|
|
193
|
+
// off `.transport` and shouldn't have to handle the undefined case.
|
|
194
|
+
this.mcps.set(name, normalized);
|
|
195
|
+
if (prepared !== null && this.mcpPool !== null) {
|
|
196
|
+
// Install the prepared entry + fire the background connect.
|
|
197
|
+
this.mcpPool.commitEntry(name, prepared);
|
|
198
|
+
}
|
|
199
|
+
// Tally + bridge-hook bookkeeping. The count transitions from 0→1 fire
|
|
200
|
+
// `onFirstRegistered`, N>0→0 fires `onLastUnregistered` (delegated to
|
|
201
|
+
// QodoClient so the `tool.request` MCP bridge attaches symmetric to
|
|
202
|
+
// remote-MCP presence and never shadows the dispatcher's deny path).
|
|
203
|
+
const before = this.remoteMcpCount;
|
|
204
|
+
if (newIsRemote && !priorWasRemote)
|
|
205
|
+
this.remoteMcpCount += 1;
|
|
206
|
+
if (!newIsRemote && priorWasRemote)
|
|
207
|
+
this.remoteMcpCount -= 1;
|
|
208
|
+
this.applyRemoteMcpHook(before, this.remoteMcpCount);
|
|
209
|
+
// MCP projection policy. Defaults — `prefixToolNames: true`
|
|
210
|
+
// (matches OpenAI Agents SDK's `include_server_in_tool_names`)
|
|
211
|
+
// and `unavailability: 'fail'` (local-sidecar default; the consumer
|
|
212
|
+
// explicitly opts into degradation on `'warn'`).
|
|
213
|
+
this.mcpPolicies.set(name, {
|
|
214
|
+
prefixToolNames: opts?.prefixToolNames !== false,
|
|
215
|
+
unavailability: opts?.unavailability ?? 'fail',
|
|
216
|
+
});
|
|
217
|
+
return { kind: 'mcp', name };
|
|
218
|
+
}
|
|
219
|
+
applyRemoteMcpHook(before, after) {
|
|
220
|
+
if (this.remoteMcpHook === undefined)
|
|
221
|
+
return;
|
|
222
|
+
if (before === 0 && after > 0)
|
|
223
|
+
this.remoteMcpHook.onFirstRegistered();
|
|
224
|
+
else if (before > 0 && after === 0)
|
|
225
|
+
this.remoteMcpHook.onLastUnregistered();
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Remove a previously-registered agent. Returns `true` if the agent was
|
|
229
|
+
* present, `false` if there was nothing to remove. Idempotent.
|
|
230
|
+
*/
|
|
231
|
+
unregisterAgent(name) {
|
|
232
|
+
return this.agents.delete(name);
|
|
233
|
+
}
|
|
234
|
+
/** Remove a previously-registered MCP. Idempotent (see `unregisterAgent`). */
|
|
235
|
+
unregisterMcp(name) {
|
|
236
|
+
const prior = this.mcps.get(name);
|
|
237
|
+
const existed = this.mcps.delete(name);
|
|
238
|
+
if (existed) {
|
|
239
|
+
// Fire-and-forget close — `unregisterMcp` is sync so consumers can call
|
|
240
|
+
// it from anywhere (config diffing, hot-reload). The pool's
|
|
241
|
+
// `removeAndClose` logs but does not throw on close failure.
|
|
242
|
+
this.mcpPool?.removeAndClose(name);
|
|
243
|
+
this.mcpPolicies.delete(name);
|
|
244
|
+
if (prior !== undefined && prior.transport !== 'sdk') {
|
|
245
|
+
const before = this.remoteMcpCount;
|
|
246
|
+
this.remoteMcpCount = Math.max(0, before - 1);
|
|
247
|
+
this.applyRemoteMcpHook(before, this.remoteMcpCount);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return existed;
|
|
251
|
+
}
|
|
252
|
+
/** Lookup — undefined when no agent is registered under that name. */
|
|
253
|
+
getAgent(name) {
|
|
254
|
+
return this.agents.get(name);
|
|
255
|
+
}
|
|
256
|
+
/** Lookup — undefined when no MCP is registered under that name. */
|
|
257
|
+
getMcp(name) {
|
|
258
|
+
return this.mcps.get(name);
|
|
259
|
+
}
|
|
260
|
+
/** Presence check — handy in tests and conditional-register flows. */
|
|
261
|
+
hasAgent(name) {
|
|
262
|
+
return this.agents.has(name);
|
|
263
|
+
}
|
|
264
|
+
hasMcp(name) {
|
|
265
|
+
return this.mcps.has(name);
|
|
266
|
+
}
|
|
267
|
+
// -------------------------------------------------------------------------
|
|
268
|
+
// S9 — A2A endpoint registry. Paired with QAR Q1's outbound A2A bridge.
|
|
269
|
+
//
|
|
270
|
+
// The SDK side is pure typed registration; no A2A protocol library is
|
|
271
|
+
// bundled. Consumers register an endpoint (+ optional auth headers,
|
|
272
|
+
// inline AgentCard, HITL kind override) and pass the returned
|
|
273
|
+
// `RegisteredA2ARef` into graph spawnable_agents lists. The wire-side
|
|
274
|
+
// dispatch lives in QAR — see Q1's `a2a_bridge.py`.
|
|
275
|
+
// -------------------------------------------------------------------------
|
|
276
|
+
/**
|
|
277
|
+
* Register an external A2A endpoint as a spawnable agent.
|
|
278
|
+
*
|
|
279
|
+
* Returns a {@link RegisteredA2ARef} the consumer slots into
|
|
280
|
+
* graph spawnable_agents lists; QAR's outbound A2A bridge resolves
|
|
281
|
+
* the ref to the registered endpoint on dispatch.
|
|
282
|
+
*
|
|
283
|
+
* @throws {QodoRegistryConflictError} on empty name, empty endpoint,
|
|
284
|
+
* or duplicate name without `{ replace: true }`.
|
|
285
|
+
*/
|
|
286
|
+
registerA2A(name, config, opts) {
|
|
287
|
+
if (this.a2aRegistry === null)
|
|
288
|
+
this.a2aRegistry = new A2ARegistry();
|
|
289
|
+
return this.a2aRegistry.register(name, config, opts);
|
|
290
|
+
}
|
|
291
|
+
/** Lookup — undefined when no A2A endpoint is registered under that name. */
|
|
292
|
+
getA2A(name) {
|
|
293
|
+
return this.a2aRegistry?.get(name);
|
|
294
|
+
}
|
|
295
|
+
/** Presence check. */
|
|
296
|
+
hasA2A(name) {
|
|
297
|
+
return this.a2aRegistry?.has(name) ?? false;
|
|
298
|
+
}
|
|
299
|
+
/** Snapshot of registered A2A endpoints. Stable order = registration order. */
|
|
300
|
+
listA2A() {
|
|
301
|
+
return this.a2aRegistry?.list() ?? [];
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Remove a previously-registered A2A endpoint. Idempotent — returns
|
|
305
|
+
* `false` for unknown names and for callers that never registered an
|
|
306
|
+
* A2A endpoint at all (the registry is lazy-allocated).
|
|
307
|
+
*/
|
|
308
|
+
unregisterA2A(name) {
|
|
309
|
+
return this.a2aRegistry?.unregister(name) ?? false;
|
|
310
|
+
}
|
|
311
|
+
/** Snapshot of currently-registered agents. Stable order = registration order. */
|
|
312
|
+
listAgents() {
|
|
313
|
+
return [...this.agents.values()];
|
|
314
|
+
}
|
|
315
|
+
/** Snapshot of currently-registered MCPs (name + config). */
|
|
316
|
+
listMcps() {
|
|
317
|
+
return [...this.mcps.entries()].map(([name, config]) => ({ name, config }));
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* @internal — list of MCP names registered with `transport: 'sdk'`
|
|
321
|
+
* (in-process handlers). Used by the MCP projection layer in
|
|
322
|
+
* `TaskClient` to widen its "known names" set so a consumer who
|
|
323
|
+
* registers an in-process MCP and references it in `mcpTools` doesn't
|
|
324
|
+
* trip the unknownMcps diagnostic.
|
|
325
|
+
*
|
|
326
|
+
* SDK-transport MCPs have no `tools/list` contract — projection
|
|
327
|
+
* skips them silently (no auto-projected tools). Their tools ship
|
|
328
|
+
* through consumer `tools[]` instead.
|
|
329
|
+
*/
|
|
330
|
+
_listSdkTransportMcpNames() {
|
|
331
|
+
const names = [];
|
|
332
|
+
for (const [name, config] of this.mcps) {
|
|
333
|
+
if (config.transport === 'sdk')
|
|
334
|
+
names.push(name);
|
|
335
|
+
}
|
|
336
|
+
return names;
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Projection-policy snapshot for the named MCP. Returns the
|
|
340
|
+
* defaults (`prefixToolNames: true`, `unavailability: 'fail'`) when the
|
|
341
|
+
* MCP is not registered — callers walk the registered set first, so
|
|
342
|
+
* a missing entry would be a programming error; defaulting keeps the
|
|
343
|
+
* signature `undefined`-free for the common path.
|
|
344
|
+
*/
|
|
345
|
+
getMcpPolicy(name) {
|
|
346
|
+
return (this.mcpPolicies.get(name) ?? {
|
|
347
|
+
prefixToolNames: true,
|
|
348
|
+
unavailability: 'fail',
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* @internal — used by the MCP projection layer in `TaskClient` to
|
|
353
|
+
* settle catalogs + read the live pool snapshot before the wire write.
|
|
354
|
+
* Returns the pool instance (or `null` when no remote/stdio MCPs are
|
|
355
|
+
* registered).
|
|
356
|
+
*/
|
|
357
|
+
_getMcpPool() {
|
|
358
|
+
return this.mcpPool;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Resolve a `string | RegisteredAgentRef` to the wire-shape `agent_id`.
|
|
362
|
+
*
|
|
363
|
+
* Strings pass through verbatim (they're treated as server-static agent
|
|
364
|
+
* ids — QAR is the authority on whether they exist). Non-string inputs
|
|
365
|
+
* are validated against this registry: a ref whose `name` isn't currently
|
|
366
|
+
* registered means either a stale ref (the agent was unregistered) or a
|
|
367
|
+
* lookalike `{ kind: 'agent', name: '...' }` object the consumer
|
|
368
|
+
* constructed manually instead of going through `registerAgent`. Both
|
|
369
|
+
* cases throw `QodoRegistryConflictError` to avoid silently dispatching
|
|
370
|
+
* the unverified `.name` over the wire.
|
|
371
|
+
*
|
|
372
|
+
* @internal Used by `TaskClient` to auto-fill the wire's `agent_id` when
|
|
373
|
+
* the caller passes a ref instead of a bare string.
|
|
374
|
+
*/
|
|
375
|
+
/**
|
|
376
|
+
* Await the underlying MCP `Client.connect` for a registered remote
|
|
377
|
+
* / stdio MCP. Resolves when the connection is open and `listTools`
|
|
378
|
+
* has populated the per-MCP tool index; rejects with
|
|
379
|
+
* `QodoMcpClientError` on connection failure.
|
|
380
|
+
*
|
|
381
|
+
* Returns immediately for `transport: 'sdk'` configs (no connection
|
|
382
|
+
* lifecycle) and for unknown names (idempotent — same shape as
|
|
383
|
+
* `unregisterMcp`).
|
|
384
|
+
*/
|
|
385
|
+
ready(name) {
|
|
386
|
+
return this.mcpPool?.ready(name) ?? Promise.resolve();
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Return the cached tool catalog for a registered remote / stdio
|
|
390
|
+
* MCP. The catalog is populated during `register` (via the MCP
|
|
391
|
+
* SDK's `Client.listTools()`); awaits any in-flight connect.
|
|
392
|
+
*
|
|
393
|
+
* `undefined` for unknown names and for `transport: 'sdk'` configs (the
|
|
394
|
+
* in-process handler doesn't expose a structured tool catalog through
|
|
395
|
+
* this surface — qodo-skills callers go through `client.skillsMcpServer`).
|
|
396
|
+
*/
|
|
397
|
+
async listMcpTools(name) {
|
|
398
|
+
return this.mcpPool?.listTools(name);
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Invoke a tool against a registered remote / stdio MCP via the
|
|
402
|
+
* canonical `@modelcontextprotocol/sdk` `Client.callTool`. Awaits
|
|
403
|
+
* the underlying connection; throws `QodoMcpClientError` on
|
|
404
|
+
* connection failure and `QodoMcpToolError` on tool-side failure
|
|
405
|
+
* (either transport error or `isError: true` in the MCP envelope).
|
|
406
|
+
*
|
|
407
|
+
* Returns the raw MCP `{ content, isError? }` envelope unchanged — the
|
|
408
|
+
* SDK doesn't repackage; consumers handling the envelope already speak
|
|
409
|
+
* MCP shape (`McpToolResult` mirror in `src/skills/mcp/types.ts`).
|
|
410
|
+
*/
|
|
411
|
+
callMcpTool(name, toolName, args) {
|
|
412
|
+
const pool = this.mcpPool;
|
|
413
|
+
if (pool === undefined || pool === null) {
|
|
414
|
+
throw new QodoRegistryConflictError('mcp', name, `mcp '${name}' is not registered (no remote / stdio MCPs on this client)`);
|
|
415
|
+
}
|
|
416
|
+
return pool.callTool(name, toolName, args);
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Return the `mcpName` that owns a given tool name, or `undefined`
|
|
420
|
+
* when no registered remote / stdio MCP advertises it.
|
|
421
|
+
*
|
|
422
|
+
* Resolution order:
|
|
423
|
+
* 1. **Prefix form** — `mcpName.toolName` / `mcpName:toolName` /
|
|
424
|
+
* `mcpName/toolName` returns `mcpName` verbatim when an MCP by
|
|
425
|
+
* that name is registered (the suffix isn't validated against
|
|
426
|
+
* the cached catalog — the round-trip itself surfaces unknown
|
|
427
|
+
* tools as a typed `QodoMcpToolError`).
|
|
428
|
+
* 2. **Bare form** — scans the cached tool indices across every
|
|
429
|
+
* registered remote / stdio MCP and returns the first match.
|
|
430
|
+
* Equal-name collisions across MCPs resolve to the
|
|
431
|
+
* earlier-registered server (registration order).
|
|
432
|
+
*
|
|
433
|
+
* Used by `QodoClient`'s generic MCP bridge to route `tool.request`
|
|
434
|
+
* envelopes (carrying ToolCall.name strings) onto `callMcpTool`.
|
|
435
|
+
*/
|
|
436
|
+
resolveMcpForTool(toolNameOrPrefixed) {
|
|
437
|
+
return this.mcpPool?.resolveMcpForTool(toolNameOrPrefixed);
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* @internal — awaits every pending remote/stdio MCP's `connect +
|
|
441
|
+
* listTools` cycle so bare-name resolution in the generic
|
|
442
|
+
* `tool.request` bridge doesn't race-lose against a fast first
|
|
443
|
+
* dispatch. No-op when the pool is empty or every catalog has already
|
|
444
|
+
* settled.
|
|
445
|
+
*/
|
|
446
|
+
async _waitForMcpCatalogsToSettle() {
|
|
447
|
+
if (this.mcpPool === null)
|
|
448
|
+
return;
|
|
449
|
+
await this.mcpPool.waitForCatalogsToSettle();
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* @internal — used by `QodoClient.disconnect()` to close every pooled MCP
|
|
453
|
+
* `Client` on tear-down. Idempotent; safe to call when the pool is empty
|
|
454
|
+
* or already disposed. Registry state (`this.mcps`) is preserved so a
|
|
455
|
+
* subsequent `connect()` can rebuild the pool via {@link _rebuildPoolEntries}.
|
|
456
|
+
*/
|
|
457
|
+
async _disposePool() {
|
|
458
|
+
if (this.mcpPool === null)
|
|
459
|
+
return;
|
|
460
|
+
await this.mcpPool.dispose();
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* @internal — invoked by `QodoClient.connect()` to register the bridge
|
|
464
|
+
* lifecycle callbacks AND immediately fire `onFirstRegistered` if any
|
|
465
|
+
* remote/stdio MCPs were registered pre-connect. Subsequent
|
|
466
|
+
* register/unregister cycles drive the hooks via the transition tally.
|
|
467
|
+
*/
|
|
468
|
+
_installRemoteMcpHook(hook) {
|
|
469
|
+
this.remoteMcpHook = hook;
|
|
470
|
+
if (this.remoteMcpCount > 0)
|
|
471
|
+
hook.onFirstRegistered();
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* @internal — invoked by `QodoClient.disconnect()` to drop the bridge
|
|
475
|
+
* callbacks. The remote/stdio MCP count tally is preserved so a
|
|
476
|
+
* subsequent connect/install reconciles correctly against the registry.
|
|
477
|
+
*/
|
|
478
|
+
_clearRemoteMcpHook() {
|
|
479
|
+
this.remoteMcpHook = undefined;
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* @internal — used by `QodoClient.connect()` to re-instantiate pool
|
|
483
|
+
* entries for remote / stdio configs that survive a disconnect cycle.
|
|
484
|
+
* Idempotent (skips entries already present in the pool); a no-op when
|
|
485
|
+
* the registry has no non-`sdk` configs. Connect failures surface on
|
|
486
|
+
* the first dependent call exactly the same way as eager
|
|
487
|
+
* `registerMcp`-time failures do.
|
|
488
|
+
*
|
|
489
|
+
* Synchronous prepare failures (malformed URL / unsupported transport
|
|
490
|
+
* discriminator that somehow made it into the registry) are
|
|
491
|
+
* **swallowed** at the per-entry level — connect has already committed
|
|
492
|
+
* the WS at this seam, and surfacing the throw would force the
|
|
493
|
+
* consumer to handle a partial-connect failure mode that the original
|
|
494
|
+
* `registerMcp` already enforced as impossible. The skipped entry
|
|
495
|
+
* stays in the registry's `mcps` map and `ready(name)` / `callTool(...)`
|
|
496
|
+
* still reject with the original construction error via the registry's
|
|
497
|
+
* happy path — but `QodoClient.connect()` itself succeeds. Returns
|
|
498
|
+
* the list of names that failed prepare so callers (and tests) can
|
|
499
|
+
* observe the skip.
|
|
500
|
+
*/
|
|
501
|
+
_rebuildPoolEntries() {
|
|
502
|
+
const failures = [];
|
|
503
|
+
for (const [name, config] of this.mcps) {
|
|
504
|
+
if (config.transport === 'sdk')
|
|
505
|
+
continue;
|
|
506
|
+
if (this.mcpPool === null)
|
|
507
|
+
this.mcpPool = new McpClientPool();
|
|
508
|
+
if (this.mcpPool._hasEntry(name))
|
|
509
|
+
continue;
|
|
510
|
+
try {
|
|
511
|
+
// `mcps` only stores normalized configs (URL-only is collapsed at
|
|
512
|
+
// register-time), so `transport !== 'sdk'` narrows the remaining
|
|
513
|
+
// union to `PoolableMcpConfig`.
|
|
514
|
+
const prepared = this.mcpPool.prepareEntry(name, config);
|
|
515
|
+
this.mcpPool.commitEntry(name, prepared);
|
|
516
|
+
}
|
|
517
|
+
catch (err) {
|
|
518
|
+
// eslint-disable-next-line no-console
|
|
519
|
+
console.error(`[@qodo/sdk] _rebuildPoolEntries: failed to rebuild pool entry for MCP '${name}': ${err instanceof Error ? err.message : String(err)}`);
|
|
520
|
+
failures.push(name);
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
return failures;
|
|
524
|
+
}
|
|
525
|
+
resolveAgentId(idOrRef) {
|
|
526
|
+
if (typeof idOrRef === 'string')
|
|
527
|
+
return idOrRef;
|
|
528
|
+
if (!this.agents.has(idOrRef.name)) {
|
|
529
|
+
throw new QodoRegistryConflictError('agent', idOrRef.name, `agent '${idOrRef.name}' is not registered on this client. ` +
|
|
530
|
+
`Call client.qar.registerAgent({ name: '${idOrRef.name}', ... }) first, ` +
|
|
531
|
+
`or pass the agent id as a string for server-static dispatch.`);
|
|
532
|
+
}
|
|
533
|
+
return idOrRef.name;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
//# sourceMappingURL=QarRegistryClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QarRegistryClient.js","sourceRoot":"","sources":["../../src/client/QarRegistryClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAgOnD;;;;GAIG;AACH,SAAS,eAAe,CAAC,MAAiB;IACxC,OAAO,CACJ,MAAkC,CAAC,SAAS,KAAK,SAAS;QAC3D,OAAQ,MAA4B,CAAC,GAAG,KAAK,QAAQ,CACtD,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,kBAAkB,CACzB,MAAiB;IAEjB,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,mEAAmE;QACnE,iEAAiE;QACjE,+CAA+C;QAC/C,MAAM,GAAG,GAAkC;YACzC,SAAS,EAAE,wBAAwB;YACnC,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjF,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,6EAA6E;IAC7E,OAAO,MAA+D,CAAC;AACzE,CAAC;AAgDD,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,OAAO,iBAAiB;IACX,MAAM,GAAG,IAAI,GAAG,EAAqB,CAAC;IACvD;;;;;OAKG;IACK,WAAW,GAAuB,IAAI,CAAC;IAC/C,6DAA6D;IAC7D,qEAAqE;IACrE,mEAAmE;IACnE,qEAAqE;IACrE,4CAA4C;IAC3B,IAAI,GAAG,IAAI,GAAG,EAAiE,CAAC;IACjG;;;;;;;OAOG;IACc,WAAW,GAAG,IAAI,GAAG,EAGnC,CAAC;IACJ;;;;;;;;;;;;;OAaG;IACK,OAAO,GAAyB,IAAI,CAAC;IAE7C;;;;;;;;;;;;OAYG;IACK,aAAa,CAGnB;IACF,kEAAkE;IAC1D,cAAc,GAAG,CAAC,CAAC;IAE3B;;;;;;;;;OASG;IACI,aAAa,CAAC,IAAe,EAAE,IAAsB;QAC1D,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,yBAAyB,CACjC,OAAO,EACP,IAAI,CAAC,IAAI,EACT,uCAAuC,CACxC,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;YACzD,MAAM,IAAI,yBAAyB,CACjC,OAAO,EACP,IAAI,CAAC,IAAI,EACT,UAAU,IAAI,CAAC,IAAI,8DAA8D,CAClF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED;;;;;;;;;OASG;IACI,WAAW,CAAC,IAAY,EAAE,MAAiB,EAAE,IAAyB;QAC3E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,yBAAyB,CACjC,KAAK,EACL,IAAI,EACJ,qCAAqC,CACtC,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,SAAS,IAAI,IAAI,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,yBAAyB,CACjC,KAAK,EACL,IAAI,EACJ,QAAQ,IAAI,8DAA8D,CAC3E,CAAC;QACJ,CAAC;QACD,+DAA+D;QAC/D,sEAAsE;QACtE,kEAAkE;QAClE,uBAAuB;QACvB,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,KAAK,KAAK,CAAC;QACnD,sEAAsE;QACtE,sEAAsE;QACtE,qEAAqE;QACrE,oEAAoE;QACpE,yEAAyE;QACzE,aAAa;QACb,IAAI,QAAQ,GAAyB,IAAI,CAAC;QAC1C,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;gBAAE,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;YAC9D,gEAAgE;YAChE,iEAAiE;YACjE,qCAAqC;YACrC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAClC,IAAI,EACJ,UAA+D,CAChE,CAAC;QACJ,CAAC;QACD,mEAAmE;QACnE,yDAAyD;QACzD,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClC,cAAc,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC;YAClE,iEAAiE;YACjE,wDAAwD;YACxD,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QACD,4DAA4D;QAC5D,uEAAuE;QACvE,oEAAoE;QACpE,iEAAiE;QACjE,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAChC,IAAI,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC/C,4DAA4D;YAC5D,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;QACD,uEAAuE;QACvE,sEAAsE;QACtE,oEAAoE;QACpE,qEAAqE;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;QACnC,IAAI,WAAW,IAAI,CAAC,cAAc;YAAE,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,IAAI,cAAc;YAAE,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACrD,4DAA4D;QAC5D,+DAA+D;QAC/D,oEAAoE;QACpE,iDAAiD;QACjD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE;YACzB,eAAe,EAAE,IAAI,EAAE,eAAe,KAAK,KAAK;YAChD,cAAc,EAAE,IAAI,EAAE,cAAc,IAAI,MAAM;SAC/C,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC/B,CAAC;IAEO,kBAAkB,CAAC,MAAc,EAAE,KAAa;QACtD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;YAAE,OAAO;QAC7C,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;YAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;aACjE,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC;YAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;IAC9E,CAAC;IAED;;;OAGG;IACI,eAAe,CAAC,IAAY;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,8EAA8E;IACvE,aAAa,CAAC,IAAY;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,wEAAwE;YACxE,4DAA4D;YAC5D,6DAA6D;YAC7D,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;gBACrD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;gBACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC9C,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,sEAAsE;IAC/D,QAAQ,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,oEAAoE;IAC7D,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,sEAAsE;IAC/D,QAAQ,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEM,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,4EAA4E;IAC5E,wEAAwE;IACxE,EAAE;IACF,sEAAsE;IACtE,oEAAoE;IACpE,8DAA8D;IAC9D,sEAAsE;IACtE,oDAAoD;IACpD,4EAA4E;IAE5E;;;;;;;;;OASG;IACI,WAAW,CAChB,IAAY,EACZ,MAA6B,EAC7B,IAAsB;QAEtB,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QACpE,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,6EAA6E;IACtE,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,sBAAsB;IACf,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;IAC9C,CAAC;IAED,+EAA+E;IACxE,OAAO;QACZ,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACI,aAAa,CAAC,IAAY;QAC/B,OAAO,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;IACrD,CAAC;IAED,kFAAkF;IAC3E,UAAU;QACf,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,6DAA6D;IACtD,QAAQ;QACb,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED;;;;;;;;;;OAUG;IACI,yBAAyB;QAC9B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACI,YAAY,CACjB,IAAY;QAEZ,OAAO,CACL,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI;YAC5B,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,MAAM;SACvB,CACF,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,WAAW;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH;;;;;;;;;OASG;IACI,KAAK,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACxD,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,YAAY,CAAC,IAAY;QACpC,OAAO,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED;;;;;;;;;;OAUG;IACI,WAAW,CAChB,IAAY,EACZ,QAAgB,EAChB,IAAyC;QAEzC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;QAC1B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,yBAAyB,CACjC,KAAK,EACL,IAAI,EACJ,QAAQ,IAAI,6DAA6D,CAC1E,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACI,iBAAiB,CAAC,kBAA0B;QACjD,OAAO,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAC7D,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,2BAA2B;QACtC,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO;QAClC,MAAM,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAC/C,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,YAAY;QACvB,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO;QAClC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACI,qBAAqB,CAAC,IAG5B;QACC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC;YAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACI,mBAAmB;QACxB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;IACjC,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACI,mBAAmB;QACxB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK;gBAAE,SAAS;YACzC,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;gBAAE,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;YAC9D,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC3C,IAAI,CAAC;gBACH,kEAAkE;gBAClE,iEAAiE;gBACjE,gCAAgC;gBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACzD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,sCAAsC;gBACtC,OAAO,CAAC,KAAK,CACX,0EAA0E,IAAI,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACvI,CAAC;gBACF,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,cAAc,CAAC,OAAoC;QACxD,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,yBAAyB,CACjC,OAAO,EACP,OAAO,CAAC,IAAI,EACZ,UAAU,OAAO,CAAC,IAAI,sCAAsC;gBAC1D,0CAA0C,OAAO,CAAC,IAAI,mBAAmB;gBACzE,8DAA8D,CACjE,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;CACF"}
|