@chances-ai/engine 24.0.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/dist/agents/discover.d.ts +30 -0
- package/dist/agents/discover.d.ts.map +1 -0
- package/dist/agents/discover.js +183 -0
- package/dist/agents/discover.js.map +1 -0
- package/dist/agents/index.d.ts +20 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +52 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/parse.d.ts +61 -0
- package/dist/agents/parse.d.ts.map +1 -0
- package/dist/agents/parse.js +527 -0
- package/dist/agents/parse.js.map +1 -0
- package/dist/agents/types.d.ts +52 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +8 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/ai/adapters/ai-sdk-stream.d.ts +19 -0
- package/dist/ai/adapters/ai-sdk-stream.d.ts.map +1 -0
- package/dist/ai/adapters/ai-sdk-stream.js +125 -0
- package/dist/ai/adapters/ai-sdk-stream.js.map +1 -0
- package/dist/ai/adapters/ai-sdk.d.ts +56 -0
- package/dist/ai/adapters/ai-sdk.d.ts.map +1 -0
- package/dist/ai/adapters/ai-sdk.js +112 -0
- package/dist/ai/adapters/ai-sdk.js.map +1 -0
- package/dist/ai/adapters/mock.d.ts +13 -0
- package/dist/ai/adapters/mock.d.ts.map +1 -0
- package/dist/ai/adapters/mock.js +54 -0
- package/dist/ai/adapters/mock.js.map +1 -0
- package/dist/ai/adapters/openai-compatible.d.ts +23 -0
- package/dist/ai/adapters/openai-compatible.d.ts.map +1 -0
- package/dist/ai/adapters/openai-compatible.js +45 -0
- package/dist/ai/adapters/openai-compatible.js.map +1 -0
- package/dist/ai/cost.d.ts +3 -0
- package/dist/ai/cost.d.ts.map +1 -0
- package/dist/ai/cost.js +5 -0
- package/dist/ai/cost.js.map +1 -0
- package/dist/ai/index.d.ts +12 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +11 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/known-models.d.ts +20 -0
- package/dist/ai/known-models.d.ts.map +1 -0
- package/dist/ai/known-models.js +129 -0
- package/dist/ai/known-models.js.map +1 -0
- package/dist/ai/registry.d.ts +12 -0
- package/dist/ai/registry.d.ts.map +1 -0
- package/dist/ai/registry.js +24 -0
- package/dist/ai/registry.js.map +1 -0
- package/dist/ai/retry.d.ts +11 -0
- package/dist/ai/retry.d.ts.map +1 -0
- package/dist/ai/retry.js +14 -0
- package/dist/ai/retry.js.map +1 -0
- package/dist/ai/router.d.ts +25 -0
- package/dist/ai/router.d.ts.map +1 -0
- package/dist/ai/router.js +36 -0
- package/dist/ai/router.js.map +1 -0
- package/dist/ai/setup.d.ts +23 -0
- package/dist/ai/setup.d.ts.map +1 -0
- package/dist/ai/setup.js +47 -0
- package/dist/ai/setup.js.map +1 -0
- package/dist/ai/summarizer.d.ts +24 -0
- package/dist/ai/summarizer.d.ts.map +1 -0
- package/dist/ai/summarizer.js +56 -0
- package/dist/ai/summarizer.js.map +1 -0
- package/dist/ai/types.d.ts +83 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +2 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/core/compaction/circuit-breaker.d.ts +32 -0
- package/dist/core/compaction/circuit-breaker.d.ts.map +1 -0
- package/dist/core/compaction/circuit-breaker.js +42 -0
- package/dist/core/compaction/circuit-breaker.js.map +1 -0
- package/dist/core/compaction/compactor.d.ts +75 -0
- package/dist/core/compaction/compactor.d.ts.map +1 -0
- package/dist/core/compaction/compactor.js +261 -0
- package/dist/core/compaction/compactor.js.map +1 -0
- package/dist/core/compaction/estimate.d.ts +39 -0
- package/dist/core/compaction/estimate.d.ts.map +1 -0
- package/dist/core/compaction/estimate.js +74 -0
- package/dist/core/compaction/estimate.js.map +1 -0
- package/dist/core/compaction/index.d.ts +5 -0
- package/dist/core/compaction/index.d.ts.map +1 -0
- package/dist/core/compaction/index.js +5 -0
- package/dist/core/compaction/index.js.map +1 -0
- package/dist/core/compaction/prune.d.ts +43 -0
- package/dist/core/compaction/prune.d.ts.map +1 -0
- package/dist/core/compaction/prune.js +51 -0
- package/dist/core/compaction/prune.js.map +1 -0
- package/dist/core/engine.d.ts +268 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +767 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/task-tool.d.ts +175 -0
- package/dist/core/task-tool.d.ts.map +1 -0
- package/dist/core/task-tool.js +901 -0
- package/dist/core/task-tool.js.map +1 -0
- package/dist/core/workspace-query.d.ts +83 -0
- package/dist/core/workspace-query.d.ts.map +1 -0
- package/dist/core/workspace-query.js +217 -0
- package/dist/core/workspace-query.js.map +1 -0
- package/dist/core/worktree/active-marker.d.ts +31 -0
- package/dist/core/worktree/active-marker.d.ts.map +1 -0
- package/dist/core/worktree/active-marker.js +109 -0
- package/dist/core/worktree/active-marker.js.map +1 -0
- package/dist/core/worktree/create.d.ts +40 -0
- package/dist/core/worktree/create.d.ts.map +1 -0
- package/dist/core/worktree/create.js +121 -0
- package/dist/core/worktree/create.js.map +1 -0
- package/dist/core/worktree/errors.d.ts +7 -0
- package/dist/core/worktree/errors.d.ts.map +1 -0
- package/dist/core/worktree/errors.js +11 -0
- package/dist/core/worktree/errors.js.map +1 -0
- package/dist/core/worktree/gc.d.ts +39 -0
- package/dist/core/worktree/gc.d.ts.map +1 -0
- package/dist/core/worktree/gc.js +146 -0
- package/dist/core/worktree/gc.js.map +1 -0
- package/dist/core/worktree/git.d.ts +53 -0
- package/dist/core/worktree/git.d.ts.map +1 -0
- package/dist/core/worktree/git.js +166 -0
- package/dist/core/worktree/git.js.map +1 -0
- package/dist/core/worktree/index.d.ts +8 -0
- package/dist/core/worktree/index.d.ts.map +1 -0
- package/dist/core/worktree/index.js +8 -0
- package/dist/core/worktree/index.js.map +1 -0
- package/dist/core/worktree/paths.d.ts +26 -0
- package/dist/core/worktree/paths.d.ts.map +1 -0
- package/dist/core/worktree/paths.js +57 -0
- package/dist/core/worktree/paths.js.map +1 -0
- package/dist/core/worktree/slug.d.ts +6 -0
- package/dist/core/worktree/slug.d.ts.map +1 -0
- package/dist/core/worktree/slug.js +21 -0
- package/dist/core/worktree/slug.js.map +1 -0
- package/dist/local-vault/file-store.d.ts +64 -0
- package/dist/local-vault/file-store.d.ts.map +1 -0
- package/dist/local-vault/file-store.js +225 -0
- package/dist/local-vault/file-store.js.map +1 -0
- package/dist/local-vault/index.d.ts +57 -0
- package/dist/local-vault/index.d.ts.map +1 -0
- package/dist/local-vault/index.js +68 -0
- package/dist/local-vault/index.js.map +1 -0
- package/dist/local-vault/keychain.d.ts +58 -0
- package/dist/local-vault/keychain.d.ts.map +1 -0
- package/dist/local-vault/keychain.js +200 -0
- package/dist/local-vault/keychain.js.map +1 -0
- package/dist/local-vault/mutex.d.ts +20 -0
- package/dist/local-vault/mutex.d.ts.map +1 -0
- package/dist/local-vault/mutex.js +44 -0
- package/dist/local-vault/mutex.js.map +1 -0
- package/dist/local-vault/passphrase.d.ts +30 -0
- package/dist/local-vault/passphrase.d.ts.map +1 -0
- package/dist/local-vault/passphrase.js +72 -0
- package/dist/local-vault/passphrase.js.map +1 -0
- package/dist/lsp/config.d.ts +34 -0
- package/dist/lsp/config.d.ts.map +1 -0
- package/dist/lsp/config.js +68 -0
- package/dist/lsp/config.js.map +1 -0
- package/dist/lsp/detect.d.ts +7 -0
- package/dist/lsp/detect.d.ts.map +1 -0
- package/dist/lsp/detect.js +78 -0
- package/dist/lsp/detect.js.map +1 -0
- package/dist/lsp/errors.d.ts +11 -0
- package/dist/lsp/errors.d.ts.map +1 -0
- package/dist/lsp/errors.js +11 -0
- package/dist/lsp/errors.js.map +1 -0
- package/dist/lsp/formatters.d.ts +147 -0
- package/dist/lsp/formatters.d.ts.map +1 -0
- package/dist/lsp/formatters.js +259 -0
- package/dist/lsp/formatters.js.map +1 -0
- package/dist/lsp/index.d.ts +31 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +31 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/instance.d.ts +72 -0
- package/dist/lsp/instance.d.ts.map +1 -0
- package/dist/lsp/instance.js +489 -0
- package/dist/lsp/instance.js.map +1 -0
- package/dist/lsp/lazy-load.d.ts +27 -0
- package/dist/lsp/lazy-load.d.ts.map +1 -0
- package/dist/lsp/lazy-load.js +57 -0
- package/dist/lsp/lazy-load.js.map +1 -0
- package/dist/lsp/manager.d.ts +59 -0
- package/dist/lsp/manager.d.ts.map +1 -0
- package/dist/lsp/manager.js +242 -0
- package/dist/lsp/manager.js.map +1 -0
- package/dist/lsp/ops.d.ts +13 -0
- package/dist/lsp/ops.d.ts.map +1 -0
- package/dist/lsp/ops.js +225 -0
- package/dist/lsp/ops.js.map +1 -0
- package/dist/lsp/rpc.d.ts +47 -0
- package/dist/lsp/rpc.d.ts.map +1 -0
- package/dist/lsp/rpc.js +134 -0
- package/dist/lsp/rpc.js.map +1 -0
- package/dist/lsp/safe-uri.d.ts +18 -0
- package/dist/lsp/safe-uri.d.ts.map +1 -0
- package/dist/lsp/safe-uri.js +96 -0
- package/dist/lsp/safe-uri.js.map +1 -0
- package/dist/lsp/types.d.ts +70 -0
- package/dist/lsp/types.d.ts.map +1 -0
- package/dist/lsp/types.js +16 -0
- package/dist/lsp/types.js.map +1 -0
- package/dist/mcp/bridge.d.ts +57 -0
- package/dist/mcp/bridge.d.ts.map +1 -0
- package/dist/mcp/bridge.js +98 -0
- package/dist/mcp/bridge.js.map +1 -0
- package/dist/mcp/category.d.ts +22 -0
- package/dist/mcp/category.d.ts.map +1 -0
- package/dist/mcp/category.js +11 -0
- package/dist/mcp/category.js.map +1 -0
- package/dist/mcp/client.d.ts +228 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +352 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/content.d.ts +86 -0
- package/dist/mcp/content.d.ts.map +1 -0
- package/dist/mcp/content.js +147 -0
- package/dist/mcp/content.js.map +1 -0
- package/dist/mcp/env.d.ts +19 -0
- package/dist/mcp/env.d.ts.map +1 -0
- package/dist/mcp/env.js +50 -0
- package/dist/mcp/env.js.map +1 -0
- package/dist/mcp/host.d.ts +199 -0
- package/dist/mcp/host.d.ts.map +1 -0
- package/dist/mcp/host.js +530 -0
- package/dist/mcp/host.js.map +1 -0
- package/dist/mcp/index.d.ts +18 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +17 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/load-mcp-host.d.ts +32 -0
- package/dist/mcp/load-mcp-host.d.ts.map +1 -0
- package/dist/mcp/load-mcp-host.js +49 -0
- package/dist/mcp/load-mcp-host.js.map +1 -0
- package/dist/mcp/oauth/callback-server.d.ts +73 -0
- package/dist/mcp/oauth/callback-server.d.ts.map +1 -0
- package/dist/mcp/oauth/callback-server.js +280 -0
- package/dist/mcp/oauth/callback-server.js.map +1 -0
- package/dist/mcp/oauth/config-hash.d.ts +24 -0
- package/dist/mcp/oauth/config-hash.d.ts.map +1 -0
- package/dist/mcp/oauth/config-hash.js +55 -0
- package/dist/mcp/oauth/config-hash.js.map +1 -0
- package/dist/mcp/oauth/error-normalize.d.ts +39 -0
- package/dist/mcp/oauth/error-normalize.d.ts.map +1 -0
- package/dist/mcp/oauth/error-normalize.js +91 -0
- package/dist/mcp/oauth/error-normalize.js.map +1 -0
- package/dist/mcp/oauth/provider.d.ts +190 -0
- package/dist/mcp/oauth/provider.d.ts.map +1 -0
- package/dist/mcp/oauth/provider.js +305 -0
- package/dist/mcp/oauth/provider.js.map +1 -0
- package/dist/mcp/oauth/refresh-coalescer.d.ts +46 -0
- package/dist/mcp/oauth/refresh-coalescer.d.ts.map +1 -0
- package/dist/mcp/oauth/refresh-coalescer.js +77 -0
- package/dist/mcp/oauth/refresh-coalescer.js.map +1 -0
- package/dist/mcp/oauth/sdk-shapes.d.ts +77 -0
- package/dist/mcp/oauth/sdk-shapes.d.ts.map +1 -0
- package/dist/mcp/oauth/sdk-shapes.js +21 -0
- package/dist/mcp/oauth/sdk-shapes.js.map +1 -0
- package/dist/mcp/parse.d.ts +28 -0
- package/dist/mcp/parse.d.ts.map +1 -0
- package/dist/mcp/parse.js +209 -0
- package/dist/mcp/parse.js.map +1 -0
- package/dist/mcp/prompts.d.ts +31 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +71 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/redact.d.ts +62 -0
- package/dist/mcp/redact.d.ts.map +1 -0
- package/dist/mcp/redact.js +87 -0
- package/dist/mcp/redact.js.map +1 -0
- package/dist/mcp/resources.d.ts +70 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +170 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/types.d.ts +123 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +2 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/memory/frontmatter.d.ts +18 -0
- package/dist/memory/frontmatter.d.ts.map +1 -0
- package/dist/memory/frontmatter.js +81 -0
- package/dist/memory/frontmatter.js.map +1 -0
- package/dist/memory/index.d.ts +5 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +5 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/store.d.ts +44 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +237 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/memory/tools.d.ts +11 -0
- package/dist/memory/tools.d.ts.map +1 -0
- package/dist/memory/tools.js +159 -0
- package/dist/memory/tools.js.map +1 -0
- package/dist/memory/types.d.ts +32 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +20 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/plugin-api/index.d.ts +167 -0
- package/dist/plugin-api/index.d.ts.map +1 -0
- package/dist/plugin-api/index.js +151 -0
- package/dist/plugin-api/index.js.map +1 -0
- package/dist/plugin-logger/index.d.ts +21 -0
- package/dist/plugin-logger/index.d.ts.map +1 -0
- package/dist/plugin-logger/index.js +59 -0
- package/dist/plugin-logger/index.js.map +1 -0
- package/dist/session/index.d.ts +125 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +202 -0
- package/dist/session/index.js.map +1 -0
- package/dist/tools/approval.d.ts +33 -0
- package/dist/tools/approval.d.ts.map +1 -0
- package/dist/tools/approval.js +53 -0
- package/dist/tools/approval.js.map +1 -0
- package/dist/tools/builtins/_shared.d.ts +94 -0
- package/dist/tools/builtins/_shared.d.ts.map +1 -0
- package/dist/tools/builtins/_shared.js +246 -0
- package/dist/tools/builtins/_shared.js.map +1 -0
- package/dist/tools/builtins/ask-user-question.d.ts +27 -0
- package/dist/tools/builtins/ask-user-question.d.ts.map +1 -0
- package/dist/tools/builtins/ask-user-question.js +191 -0
- package/dist/tools/builtins/ask-user-question.js.map +1 -0
- package/dist/tools/builtins/bash.d.ts +3 -0
- package/dist/tools/builtins/bash.d.ts.map +1 -0
- package/dist/tools/builtins/bash.js +158 -0
- package/dist/tools/builtins/bash.js.map +1 -0
- package/dist/tools/builtins/diff.d.ts +3 -0
- package/dist/tools/builtins/diff.d.ts.map +1 -0
- package/dist/tools/builtins/diff.js +83 -0
- package/dist/tools/builtins/diff.js.map +1 -0
- package/dist/tools/builtins/edit.d.ts +3 -0
- package/dist/tools/builtins/edit.d.ts.map +1 -0
- package/dist/tools/builtins/edit.js +40 -0
- package/dist/tools/builtins/edit.js.map +1 -0
- package/dist/tools/builtins/glob.d.ts +3 -0
- package/dist/tools/builtins/glob.d.ts.map +1 -0
- package/dist/tools/builtins/glob.js +37 -0
- package/dist/tools/builtins/glob.js.map +1 -0
- package/dist/tools/builtins/grep.d.ts +3 -0
- package/dist/tools/builtins/grep.d.ts.map +1 -0
- package/dist/tools/builtins/grep.js +81 -0
- package/dist/tools/builtins/grep.js.map +1 -0
- package/dist/tools/builtins/lsp.d.ts +3 -0
- package/dist/tools/builtins/lsp.d.ts.map +1 -0
- package/dist/tools/builtins/lsp.js +102 -0
- package/dist/tools/builtins/lsp.js.map +1 -0
- package/dist/tools/builtins/pty.d.ts +64 -0
- package/dist/tools/builtins/pty.d.ts.map +1 -0
- package/dist/tools/builtins/pty.js +536 -0
- package/dist/tools/builtins/pty.js.map +1 -0
- package/dist/tools/builtins/read.d.ts +3 -0
- package/dist/tools/builtins/read.d.ts.map +1 -0
- package/dist/tools/builtins/read.js +18 -0
- package/dist/tools/builtins/read.js.map +1 -0
- package/dist/tools/builtins/web-fetch.d.ts +4 -0
- package/dist/tools/builtins/web-fetch.d.ts.map +1 -0
- package/dist/tools/builtins/web-fetch.js +353 -0
- package/dist/tools/builtins/web-fetch.js.map +1 -0
- package/dist/tools/builtins/write.d.ts +3 -0
- package/dist/tools/builtins/write.d.ts.map +1 -0
- package/dist/tools/builtins/write.js +48 -0
- package/dist/tools/builtins/write.js.map +1 -0
- package/dist/tools/builtins.d.ts +9 -0
- package/dist/tools/builtins.d.ts.map +1 -0
- package/dist/tools/builtins.js +29 -0
- package/dist/tools/builtins.js.map +1 -0
- package/dist/tools/diff.d.ts +18 -0
- package/dist/tools/diff.d.ts.map +1 -0
- package/dist/tools/diff.js +57 -0
- package/dist/tools/diff.js.map +1 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/permission.d.ts +120 -0
- package/dist/tools/permission.d.ts.map +1 -0
- package/dist/tools/permission.js +208 -0
- package/dist/tools/permission.js.map +1 -0
- package/dist/tools/registry.d.ts +12 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +19 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +244 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +15 -0
- package/dist/tools/types.js.map +1 -0
- package/package.json +109 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import type { McpCallToolClient, McpCallToolResult, McpToolDescriptor } from "./bridge.js";
|
|
2
|
+
import type { McpPrompt, McpPromptMessage, McpResource, McpResourceContent, McpServerConfig } from "./types.js";
|
|
3
|
+
type Redactor = (msg: string) => string;
|
|
4
|
+
/**
|
|
5
|
+
* Identity the SDK announces to the server during the initialize handshake.
|
|
6
|
+
* Library default — almost always overridden by callers (the CLI passes its
|
|
7
|
+
* own `package.json` name/version, which the existing `version.ts` pattern
|
|
8
|
+
* has proven works under `bun build --compile`). Keeping the import-time
|
|
9
|
+
* read out of this file avoids the unverified "binary embeds a transitive
|
|
10
|
+
* workspace JSON import" path that codex flagged.
|
|
11
|
+
*/
|
|
12
|
+
export interface ClientIdentity {
|
|
13
|
+
name: string;
|
|
14
|
+
version: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Minimal SDK surface this module touches. Defined as a structural type so
|
|
18
|
+
* tests can construct an in-memory pair via `McpClient.fromExisting` without
|
|
19
|
+
* loading the real SDK at all.
|
|
20
|
+
*/
|
|
21
|
+
export interface SdkLikeTransport {
|
|
22
|
+
start?(): Promise<void>;
|
|
23
|
+
close(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Optional cooperative session teardown. Streamable HTTP transports
|
|
26
|
+
* expose this; stdio does not. We call it best-effort before `close()`
|
|
27
|
+
* so the server can free session state (per MCP spec, clients SHOULD
|
|
28
|
+
* issue HTTP DELETE on session shutdown).
|
|
29
|
+
*/
|
|
30
|
+
terminateSession?(): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
export interface SdkLikeClient {
|
|
33
|
+
connect(transport: SdkLikeTransport): Promise<void>;
|
|
34
|
+
close(): Promise<void>;
|
|
35
|
+
/** (5.4) Register an inbound request handler — used to answer the
|
|
36
|
+
* server-initiated `roots/list`. Optional on the structural type so
|
|
37
|
+
* hand-rolled test fakes need not implement it. */
|
|
38
|
+
setRequestHandler?(schema: unknown, handler: (req: unknown) => unknown | Promise<unknown>): void;
|
|
39
|
+
listTools(params?: unknown, options?: {
|
|
40
|
+
signal?: AbortSignal;
|
|
41
|
+
timeout?: number;
|
|
42
|
+
}): Promise<{
|
|
43
|
+
tools: McpToolDescriptor[];
|
|
44
|
+
}>;
|
|
45
|
+
callTool(params: {
|
|
46
|
+
name: string;
|
|
47
|
+
arguments: Record<string, unknown>;
|
|
48
|
+
}, resultSchema?: unknown, options?: {
|
|
49
|
+
signal?: AbortSignal;
|
|
50
|
+
timeout?: number;
|
|
51
|
+
}): Promise<McpCallToolResult>;
|
|
52
|
+
listResources?(params?: unknown, options?: {
|
|
53
|
+
signal?: AbortSignal;
|
|
54
|
+
timeout?: number;
|
|
55
|
+
}): Promise<{
|
|
56
|
+
resources?: SdkResourceWire[];
|
|
57
|
+
}>;
|
|
58
|
+
readResource?(params: {
|
|
59
|
+
uri: string;
|
|
60
|
+
}, options?: {
|
|
61
|
+
signal?: AbortSignal;
|
|
62
|
+
timeout?: number;
|
|
63
|
+
}): Promise<{
|
|
64
|
+
contents?: SdkResourceContentWire[];
|
|
65
|
+
}>;
|
|
66
|
+
listPrompts?(params?: unknown, options?: {
|
|
67
|
+
signal?: AbortSignal;
|
|
68
|
+
timeout?: number;
|
|
69
|
+
}): Promise<{
|
|
70
|
+
prompts?: SdkPromptWire[];
|
|
71
|
+
}>;
|
|
72
|
+
getPrompt?(params: {
|
|
73
|
+
name: string;
|
|
74
|
+
arguments?: Record<string, string>;
|
|
75
|
+
}, options?: {
|
|
76
|
+
signal?: AbortSignal;
|
|
77
|
+
timeout?: number;
|
|
78
|
+
}): Promise<{
|
|
79
|
+
messages?: SdkPromptMessageWire[];
|
|
80
|
+
description?: string;
|
|
81
|
+
}>;
|
|
82
|
+
}
|
|
83
|
+
/** Wire shapes the SDK returns for resources/prompts (the subset we read). */
|
|
84
|
+
interface SdkResourceWire {
|
|
85
|
+
uri: string;
|
|
86
|
+
name?: string;
|
|
87
|
+
description?: string;
|
|
88
|
+
mimeType?: string;
|
|
89
|
+
}
|
|
90
|
+
interface SdkResourceContentWire {
|
|
91
|
+
uri?: string;
|
|
92
|
+
mimeType?: string;
|
|
93
|
+
text?: string;
|
|
94
|
+
blob?: string;
|
|
95
|
+
}
|
|
96
|
+
interface SdkPromptWire {
|
|
97
|
+
name: string;
|
|
98
|
+
description?: string;
|
|
99
|
+
arguments?: {
|
|
100
|
+
name: string;
|
|
101
|
+
description?: string;
|
|
102
|
+
required?: boolean;
|
|
103
|
+
}[];
|
|
104
|
+
}
|
|
105
|
+
interface SdkPromptMessageWire {
|
|
106
|
+
role: "user" | "assistant";
|
|
107
|
+
content: unknown;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Connected MCP client. Wraps an SDK `Client` + transport pair, exposes the
|
|
111
|
+
* narrow surface the bridge / host actually need, and owns disposal.
|
|
112
|
+
*
|
|
113
|
+
* Two constructors:
|
|
114
|
+
* - `McpClient.connect(serverId, config, opts)`: production path. Lazily
|
|
115
|
+
* loads the SDK via dynamic import and surfaces a labeled error if the
|
|
116
|
+
* optional peer dep isn't installed.
|
|
117
|
+
* - `McpClient.fromExisting(client, transport, timeoutMs?)`: test path.
|
|
118
|
+
* Lets the caller wire `InMemoryTransport` pairs from the SDK or a
|
|
119
|
+
* hand-rolled fake without any dynamic import.
|
|
120
|
+
*/
|
|
121
|
+
export declare class McpClient implements McpCallToolClient {
|
|
122
|
+
private readonly client;
|
|
123
|
+
private readonly transport;
|
|
124
|
+
private readonly timeoutMs;
|
|
125
|
+
private readonly redact;
|
|
126
|
+
private constructor();
|
|
127
|
+
static connect(serverId: string, config: McpServerConfig, opts?: {
|
|
128
|
+
connectTimeoutMs?: number;
|
|
129
|
+
redact?: Redactor;
|
|
130
|
+
clientIdentity?: ClientIdentity;
|
|
131
|
+
/** (3.7) When set, the SDK wires this provider into the HTTP
|
|
132
|
+
* transport's OAuth helper so 401s trigger the `auth()` flow. */
|
|
133
|
+
authProvider?: unknown;
|
|
134
|
+
/** (5.4 D6′) Absolute workspace root advertised to the server via a
|
|
135
|
+
* `roots/list` handler. Only used when `advertiseRoots` is true. */
|
|
136
|
+
workspaceRoot?: string;
|
|
137
|
+
/** (5.4 D6′ / S5) Advertise the `roots` capability + answer
|
|
138
|
+
* `roots/list` with `workspaceRoot`. Default false at the library
|
|
139
|
+
* layer; the CLI passes `config.mcp.advertiseRoots` (default true).
|
|
140
|
+
* `listChanged` is always false — we don't push live root changes. */
|
|
141
|
+
advertiseRoots?: boolean;
|
|
142
|
+
}): Promise<McpClient>;
|
|
143
|
+
/** Test seam — see class docstring. */
|
|
144
|
+
static fromExisting(client: SdkLikeClient, transport: SdkLikeTransport, timeoutMs?: number, redact?: Redactor): McpClient;
|
|
145
|
+
/** Exposed so the bridge can scrub MCP tool errors with the same secret bag. */
|
|
146
|
+
redactor(): Redactor;
|
|
147
|
+
listTools(): Promise<McpToolDescriptor[]>;
|
|
148
|
+
callTool(name: string, args: Record<string, unknown>, opts: {
|
|
149
|
+
signal: AbortSignal;
|
|
150
|
+
timeoutMs?: number;
|
|
151
|
+
}): Promise<McpCallToolResult>;
|
|
152
|
+
/** `resources/list`. Returns the server's resources (no `server` stamp). */
|
|
153
|
+
listResources(): Promise<Omit<McpResource, "server">[]>;
|
|
154
|
+
/** `resources/read`. Returns the content items (text xor blob). */
|
|
155
|
+
readResource(uri: string, opts: {
|
|
156
|
+
signal: AbortSignal;
|
|
157
|
+
timeoutMs?: number;
|
|
158
|
+
}): Promise<McpResourceContent[]>;
|
|
159
|
+
/** `prompts/list`. Returns the server's prompts (no `server` stamp). */
|
|
160
|
+
listPrompts(): Promise<Omit<McpPrompt, "server">[]>;
|
|
161
|
+
/** `prompts/get`. Returns the prompt's messages + optional description. */
|
|
162
|
+
getPrompt(name: string, args: Record<string, string>, opts: {
|
|
163
|
+
signal: AbortSignal;
|
|
164
|
+
timeoutMs?: number;
|
|
165
|
+
}): Promise<{
|
|
166
|
+
messages: McpPromptMessage[];
|
|
167
|
+
description?: string;
|
|
168
|
+
}>;
|
|
169
|
+
dispose(): Promise<void>;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Loaded SDK module shape we depend on. The actual import returns far more
|
|
173
|
+
* than this — narrowing keeps the load path self-documenting.
|
|
174
|
+
*
|
|
175
|
+
* **(3.7 codex Round-1 MUST-FIX #6)** All specifiers are computed at runtime
|
|
176
|
+
* (`["@modelcontextprotocol", "sdk", ...].join("/")`) so `bun build --compile`
|
|
177
|
+
* does NOT statically resolve them. Literal `import("@modelcontextprotocol/sdk/...")`
|
|
178
|
+
* would force the SDK to be present at compile time even though it's an
|
|
179
|
+
* OPTIONAL peer dep — the resulting binary would fail to build for
|
|
180
|
+
* consumers who don't enable MCP. The 3.6 OTel pass established the
|
|
181
|
+
* pattern; 3.7 closes the latent 3.1 hole here.
|
|
182
|
+
*/
|
|
183
|
+
export interface LoadedSdk {
|
|
184
|
+
Client: new (info: ClientIdentity, options?: unknown) => unknown;
|
|
185
|
+
/** (5.4) Zod schema for `roots/list`, used to register the inbound handler.
|
|
186
|
+
* Loaded from `…/sdk/types.js`. Absent → roots advertisement is skipped. */
|
|
187
|
+
ListRootsRequestSchema?: unknown;
|
|
188
|
+
StdioClientTransport: new (params: {
|
|
189
|
+
command: string;
|
|
190
|
+
args?: string[];
|
|
191
|
+
env?: Record<string, string>;
|
|
192
|
+
cwd?: string;
|
|
193
|
+
}) => SdkLikeTransport;
|
|
194
|
+
StreamableHTTPClientTransport: new (url: URL, opts?: {
|
|
195
|
+
requestInit?: {
|
|
196
|
+
headers?: Record<string, string>;
|
|
197
|
+
};
|
|
198
|
+
/** (3.7) When supplied, the SDK wires this provider into its OAuth
|
|
199
|
+
* helper so 401s trigger the `auth()` orchestrator. */
|
|
200
|
+
authProvider?: unknown;
|
|
201
|
+
}) => SdkLikeTransport;
|
|
202
|
+
/** (3.7) Loaded lazily via `loadSdkAuth()`. Tests may inject a stub
|
|
203
|
+
* via `__setAuthFnForTest`. */
|
|
204
|
+
auth?: (provider: unknown, options: {
|
|
205
|
+
serverUrl: string | URL;
|
|
206
|
+
authorizationCode?: string;
|
|
207
|
+
scope?: string;
|
|
208
|
+
resourceMetadataUrl?: URL;
|
|
209
|
+
}) => Promise<"AUTHORIZED" | "REDIRECT">;
|
|
210
|
+
}
|
|
211
|
+
/** @internal */
|
|
212
|
+
export declare function __setSdkLoaderForTest(loader: () => Promise<LoadedSdk>): void;
|
|
213
|
+
/** @internal */
|
|
214
|
+
export declare function __resetSdkLoaderForTest(): void;
|
|
215
|
+
/** @internal */
|
|
216
|
+
export declare function __setAuthFnForTest(loader: () => Promise<LoadedSdk["auth"]>): void;
|
|
217
|
+
/** @internal */
|
|
218
|
+
export declare function __resetAuthFnForTest(): void;
|
|
219
|
+
/**
|
|
220
|
+
* Lazily loads `@modelcontextprotocol/sdk/client/auth.js` via a computed
|
|
221
|
+
* specifier so the optional peer dep is NOT pulled into a non-MCP
|
|
222
|
+
* `bun build --compile` binary. Cached after first success.
|
|
223
|
+
*
|
|
224
|
+
* Throws an `AppError(Config)` when the SDK isn't installed.
|
|
225
|
+
*/
|
|
226
|
+
export declare function loadSdkAuth(): Promise<NonNullable<LoadedSdk["auth"]>>;
|
|
227
|
+
export {};
|
|
228
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import { pathToFileURL } from "node:url";
|
|
2
|
+
import { AppError, ErrorCode } from "@chances-ai/runtime";
|
|
3
|
+
const identity = (m) => m;
|
|
4
|
+
const DEFAULT_CLIENT_IDENTITY = {
|
|
5
|
+
name: "@chances-ai/cli",
|
|
6
|
+
version: "0.0.0-dev",
|
|
7
|
+
};
|
|
8
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
9
|
+
/**
|
|
10
|
+
* Connected MCP client. Wraps an SDK `Client` + transport pair, exposes the
|
|
11
|
+
* narrow surface the bridge / host actually need, and owns disposal.
|
|
12
|
+
*
|
|
13
|
+
* Two constructors:
|
|
14
|
+
* - `McpClient.connect(serverId, config, opts)`: production path. Lazily
|
|
15
|
+
* loads the SDK via dynamic import and surfaces a labeled error if the
|
|
16
|
+
* optional peer dep isn't installed.
|
|
17
|
+
* - `McpClient.fromExisting(client, transport, timeoutMs?)`: test path.
|
|
18
|
+
* Lets the caller wire `InMemoryTransport` pairs from the SDK or a
|
|
19
|
+
* hand-rolled fake without any dynamic import.
|
|
20
|
+
*/
|
|
21
|
+
export class McpClient {
|
|
22
|
+
client;
|
|
23
|
+
transport;
|
|
24
|
+
timeoutMs;
|
|
25
|
+
redact;
|
|
26
|
+
constructor(client, transport, timeoutMs, redact) {
|
|
27
|
+
this.client = client;
|
|
28
|
+
this.transport = transport;
|
|
29
|
+
this.timeoutMs = timeoutMs;
|
|
30
|
+
this.redact = redact;
|
|
31
|
+
}
|
|
32
|
+
static async connect(serverId, config, opts = {}) {
|
|
33
|
+
const redact = opts.redact ?? identity;
|
|
34
|
+
const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
35
|
+
const sdk = await loadSdk();
|
|
36
|
+
const transport = await buildTransport(config, sdk, opts.authProvider);
|
|
37
|
+
// (5.4 D6′) Advertise `roots` (workspace root) when asked. `listChanged:
|
|
38
|
+
// false` because we never emit `notifications/roots/list_changed`.
|
|
39
|
+
// (5.4 R2 S5) Gate the capability on `ListRootsRequestSchema` being loaded
|
|
40
|
+
// too — otherwise we'd advertise a capability we can't answer, and a server
|
|
41
|
+
// could send `roots/list` to a missing handler.
|
|
42
|
+
const advertiseRoots = opts.advertiseRoots === true && !!opts.workspaceRoot && !!sdk.ListRootsRequestSchema;
|
|
43
|
+
const clientOptions = advertiseRoots
|
|
44
|
+
? { capabilities: { roots: { listChanged: false } } }
|
|
45
|
+
: undefined;
|
|
46
|
+
const client = new sdk.Client(opts.clientIdentity ?? DEFAULT_CLIENT_IDENTITY, clientOptions);
|
|
47
|
+
if (advertiseRoots && typeof client.setRequestHandler === "function") {
|
|
48
|
+
const rootUri = pathToFileURL(opts.workspaceRoot).href;
|
|
49
|
+
client.setRequestHandler(sdk.ListRootsRequestSchema, async () => ({
|
|
50
|
+
roots: [{ uri: rootUri, name: "workspace" }],
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
await withTimeout(client.connect(transport), opts.connectTimeoutMs ?? timeoutMs, `mcp '${serverId}': connect timed out after ${opts.connectTimeoutMs ?? timeoutMs}ms`);
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
// Best-effort transport teardown so we don't leak a child process if
|
|
58
|
+
// the initialize handshake stalled.
|
|
59
|
+
try {
|
|
60
|
+
await transport.close();
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// swallow — the original error is what the caller needs to see
|
|
64
|
+
}
|
|
65
|
+
if (e instanceof AppError) {
|
|
66
|
+
// The labeled message from withTimeout has no secrets; preserve it.
|
|
67
|
+
throw e;
|
|
68
|
+
}
|
|
69
|
+
throw new AppError(ErrorCode.Provider, redact(`mcp '${serverId}': failed to connect: ${e.message}`));
|
|
70
|
+
}
|
|
71
|
+
return new McpClient(client, transport, timeoutMs, redact);
|
|
72
|
+
}
|
|
73
|
+
/** Test seam — see class docstring. */
|
|
74
|
+
static fromExisting(client, transport, timeoutMs = DEFAULT_TIMEOUT_MS, redact = identity) {
|
|
75
|
+
return new McpClient(client, transport, timeoutMs, redact);
|
|
76
|
+
}
|
|
77
|
+
/** Exposed so the bridge can scrub MCP tool errors with the same secret bag. */
|
|
78
|
+
redactor() {
|
|
79
|
+
return this.redact;
|
|
80
|
+
}
|
|
81
|
+
async listTools() {
|
|
82
|
+
const result = await this.client.listTools(undefined, { timeout: this.timeoutMs });
|
|
83
|
+
return result.tools ?? [];
|
|
84
|
+
}
|
|
85
|
+
async callTool(name, args, opts) {
|
|
86
|
+
return this.client.callTool({ name, arguments: args }, undefined, { signal: opts.signal, timeout: opts.timeoutMs ?? this.timeoutMs });
|
|
87
|
+
}
|
|
88
|
+
// ─── 5.4 resources + prompts ─────────────────────────────────────────
|
|
89
|
+
//
|
|
90
|
+
// Each guards `typeof fn === "function"` and throws a clear AppError when
|
|
91
|
+
// the SDK/server doesn't expose the method, so the host can downgrade the
|
|
92
|
+
// feature to "unsupported" rather than failing the whole server. Results are
|
|
93
|
+
// returned WITHOUT the `server` stamp — the host adds it (it owns the id).
|
|
94
|
+
/** `resources/list`. Returns the server's resources (no `server` stamp). */
|
|
95
|
+
async listResources() {
|
|
96
|
+
if (typeof this.client.listResources !== "function") {
|
|
97
|
+
throw new AppError(ErrorCode.Provider, "server does not support resources/list");
|
|
98
|
+
}
|
|
99
|
+
const result = await this.client.listResources(undefined, { timeout: this.timeoutMs });
|
|
100
|
+
return (result.resources ?? []).map((r) => ({
|
|
101
|
+
uri: r.uri,
|
|
102
|
+
name: r.name,
|
|
103
|
+
description: r.description,
|
|
104
|
+
mimeType: r.mimeType,
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
/** `resources/read`. Returns the content items (text xor blob). */
|
|
108
|
+
async readResource(uri, opts) {
|
|
109
|
+
if (typeof this.client.readResource !== "function") {
|
|
110
|
+
throw new AppError(ErrorCode.Provider, "server does not support resources/read");
|
|
111
|
+
}
|
|
112
|
+
const result = await this.client.readResource({ uri }, { signal: opts.signal, timeout: opts.timeoutMs ?? this.timeoutMs });
|
|
113
|
+
return (result.contents ?? []).map((c) => ({
|
|
114
|
+
uri: c.uri,
|
|
115
|
+
mimeType: c.mimeType,
|
|
116
|
+
text: c.text,
|
|
117
|
+
blob: c.blob,
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
120
|
+
/** `prompts/list`. Returns the server's prompts (no `server` stamp). */
|
|
121
|
+
async listPrompts() {
|
|
122
|
+
if (typeof this.client.listPrompts !== "function") {
|
|
123
|
+
throw new AppError(ErrorCode.Provider, "server does not support prompts/list");
|
|
124
|
+
}
|
|
125
|
+
const result = await this.client.listPrompts(undefined, { timeout: this.timeoutMs });
|
|
126
|
+
return (result.prompts ?? []).map((p) => ({
|
|
127
|
+
name: p.name,
|
|
128
|
+
description: p.description,
|
|
129
|
+
arguments: p.arguments?.map((a) => ({
|
|
130
|
+
name: a.name,
|
|
131
|
+
description: a.description,
|
|
132
|
+
required: a.required,
|
|
133
|
+
})),
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
/** `prompts/get`. Returns the prompt's messages + optional description. */
|
|
137
|
+
async getPrompt(name, args, opts) {
|
|
138
|
+
if (typeof this.client.getPrompt !== "function") {
|
|
139
|
+
throw new AppError(ErrorCode.Provider, "server does not support prompts/get");
|
|
140
|
+
}
|
|
141
|
+
const result = await this.client.getPrompt({ name, arguments: args }, { signal: opts.signal, timeout: opts.timeoutMs ?? this.timeoutMs });
|
|
142
|
+
return {
|
|
143
|
+
messages: (result.messages ?? []).map((m) => ({ role: m.role, content: m.content })),
|
|
144
|
+
description: result.description,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
async dispose() {
|
|
148
|
+
// Three legs, all best-effort: terminateSession (HTTP only, lets the
|
|
149
|
+
// server drop session state), client.close, transport.close. We want
|
|
150
|
+
// the host's overall `dispose()` to finish even if one is wedged.
|
|
151
|
+
let firstError;
|
|
152
|
+
if (typeof this.transport.terminateSession === "function") {
|
|
153
|
+
try {
|
|
154
|
+
await this.transport.terminateSession();
|
|
155
|
+
}
|
|
156
|
+
catch (e) {
|
|
157
|
+
firstError = e;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
await this.client.close();
|
|
162
|
+
}
|
|
163
|
+
catch (e) {
|
|
164
|
+
firstError ??= e;
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
await this.transport.close();
|
|
168
|
+
}
|
|
169
|
+
catch (e) {
|
|
170
|
+
firstError ??= e;
|
|
171
|
+
}
|
|
172
|
+
if (firstError) {
|
|
173
|
+
const wrapped = new Error(this.redact(firstError.message));
|
|
174
|
+
wrapped.stack = firstError.stack;
|
|
175
|
+
throw wrapped;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/** Test seam: overridable loader so unit tests can avoid the dynamic import. */
|
|
180
|
+
let sdkLoader = defaultSdkLoader;
|
|
181
|
+
/** Test seam: overridable auth-function loader. Returns `undefined` when
|
|
182
|
+
* not in test mode — `loadSdkAuth()` falls back to the live SDK then. */
|
|
183
|
+
let authFnLoader;
|
|
184
|
+
/** @internal */
|
|
185
|
+
export function __setSdkLoaderForTest(loader) {
|
|
186
|
+
sdkLoader = loader;
|
|
187
|
+
}
|
|
188
|
+
/** @internal */
|
|
189
|
+
export function __resetSdkLoaderForTest() {
|
|
190
|
+
sdkLoader = defaultSdkLoader;
|
|
191
|
+
}
|
|
192
|
+
/** @internal */
|
|
193
|
+
export function __setAuthFnForTest(loader) {
|
|
194
|
+
authFnLoader = loader;
|
|
195
|
+
}
|
|
196
|
+
/** @internal */
|
|
197
|
+
export function __resetAuthFnForTest() {
|
|
198
|
+
authFnLoader = undefined;
|
|
199
|
+
cachedSdkAuth = undefined;
|
|
200
|
+
}
|
|
201
|
+
async function loadSdk() {
|
|
202
|
+
return sdkLoader();
|
|
203
|
+
}
|
|
204
|
+
/** (codex Round-2 NICE #1) Module-level cache for the resolved
|
|
205
|
+
* `auth()` function. ESM module caching already prevents re-execution
|
|
206
|
+
* of the imported file, but caching the resolved property dodges
|
|
207
|
+
* redundant Promise allocation + property lookup on every /mcp login. */
|
|
208
|
+
let cachedSdkAuth;
|
|
209
|
+
/**
|
|
210
|
+
* Lazily loads `@modelcontextprotocol/sdk/client/auth.js` via a computed
|
|
211
|
+
* specifier so the optional peer dep is NOT pulled into a non-MCP
|
|
212
|
+
* `bun build --compile` binary. Cached after first success.
|
|
213
|
+
*
|
|
214
|
+
* Throws an `AppError(Config)` when the SDK isn't installed.
|
|
215
|
+
*/
|
|
216
|
+
export async function loadSdkAuth() {
|
|
217
|
+
// Test seam takes precedence so per-test fakes always win over the cache.
|
|
218
|
+
if (authFnLoader) {
|
|
219
|
+
const fn = await authFnLoader();
|
|
220
|
+
if (fn)
|
|
221
|
+
return fn;
|
|
222
|
+
}
|
|
223
|
+
if (cachedSdkAuth)
|
|
224
|
+
return cachedSdkAuth;
|
|
225
|
+
const specifier = ["@modelcontextprotocol", "sdk", "client", "auth.js"].join("/");
|
|
226
|
+
try {
|
|
227
|
+
const mod = (await import(specifier));
|
|
228
|
+
if (typeof mod.auth !== "function") {
|
|
229
|
+
throw new AppError(ErrorCode.Config, `mcp: '${specifier}' loaded but does not export an 'auth()' function`);
|
|
230
|
+
}
|
|
231
|
+
cachedSdkAuth = mod.auth;
|
|
232
|
+
return cachedSdkAuth;
|
|
233
|
+
}
|
|
234
|
+
catch (e) {
|
|
235
|
+
if (e instanceof AppError)
|
|
236
|
+
throw e;
|
|
237
|
+
if (isModuleNotFound(e, "@modelcontextprotocol/sdk")) {
|
|
238
|
+
throw new AppError(ErrorCode.Config, `mcp: optional peer dependency '@modelcontextprotocol/sdk' is not installed. ` +
|
|
239
|
+
`OAuth flows require the SDK — run \`bun add @modelcontextprotocol/sdk\` first.`);
|
|
240
|
+
}
|
|
241
|
+
throw new AppError(ErrorCode.Config, `mcp: failed to load OAuth helper '${specifier}': ${e.message}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
async function defaultSdkLoader() {
|
|
245
|
+
// Computed specifiers: see LoadedSdk docstring + § 16 of 3.7-design.md.
|
|
246
|
+
const ROOT = ["@modelcontextprotocol", "sdk", "client", "index.js"].join("/");
|
|
247
|
+
const STDIO = ["@modelcontextprotocol", "sdk", "client", "stdio.js"].join("/");
|
|
248
|
+
const HTTP = ["@modelcontextprotocol", "sdk", "client", "streamableHttp.js"].join("/");
|
|
249
|
+
const TYPES = ["@modelcontextprotocol", "sdk", "types.js"].join("/");
|
|
250
|
+
let probe;
|
|
251
|
+
try {
|
|
252
|
+
await import(ROOT);
|
|
253
|
+
probe = { ok: true };
|
|
254
|
+
}
|
|
255
|
+
catch (e) {
|
|
256
|
+
probe = { ok: false, error: e };
|
|
257
|
+
}
|
|
258
|
+
if (!probe.ok) {
|
|
259
|
+
if (isModuleNotFound(probe.error, "@modelcontextprotocol/sdk")) {
|
|
260
|
+
throw new AppError(ErrorCode.Config, `mcp: optional peer dependency '@modelcontextprotocol/sdk' is not installed. ` +
|
|
261
|
+
`Run \`bun add @modelcontextprotocol/sdk\` (or \`npm i\` / \`pnpm add\`) to use MCP servers.`);
|
|
262
|
+
}
|
|
263
|
+
throw new AppError(ErrorCode.Config, `mcp: failed to load '${ROOT}': ${probe.error.message}`);
|
|
264
|
+
}
|
|
265
|
+
const [clientMod, stdioMod, httpMod, typesMod] = await Promise.all([
|
|
266
|
+
import(ROOT),
|
|
267
|
+
import(STDIO).catch((e) => {
|
|
268
|
+
throw new AppError(ErrorCode.Config, `mcp: failed to load stdio transport: ${e.message}`);
|
|
269
|
+
}),
|
|
270
|
+
import(HTTP).catch((e) => {
|
|
271
|
+
throw new AppError(ErrorCode.Config, `mcp: failed to load streamableHttp transport: ${e.message}`);
|
|
272
|
+
}),
|
|
273
|
+
// (5.4) types.js carries the request schemas. Non-fatal if it can't
|
|
274
|
+
// load — roots advertisement just stays off (the core tools/resources
|
|
275
|
+
// path doesn't depend on it).
|
|
276
|
+
import(TYPES).catch(() => undefined),
|
|
277
|
+
]);
|
|
278
|
+
return {
|
|
279
|
+
Client: clientMod.Client,
|
|
280
|
+
ListRootsRequestSchema: typesMod
|
|
281
|
+
?.ListRootsRequestSchema,
|
|
282
|
+
StdioClientTransport: stdioMod
|
|
283
|
+
.StdioClientTransport,
|
|
284
|
+
StreamableHTTPClientTransport: httpMod.StreamableHTTPClientTransport,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
/** Heuristic: Node throws `MODULE_NOT_FOUND` (CJS path), `ERR_MODULE_NOT_FOUND`
|
|
288
|
+
* (ESM path), or sometimes a TypeError with `Cannot find module`. We match the
|
|
289
|
+
* code first, then verify the *requested* specifier (in the first quoted
|
|
290
|
+
* segment of the message) matches ours. Just substring-matching the whole
|
|
291
|
+
* message would mis-classify a missing transitive dep — e.g. `Cannot find
|
|
292
|
+
* package 'foo' imported from .../@modelcontextprotocol/sdk/...` — as the SDK
|
|
293
|
+
* itself being absent.
|
|
294
|
+
*/
|
|
295
|
+
function isModuleNotFound(err, specifier) {
|
|
296
|
+
const code = err.code;
|
|
297
|
+
const hasMissingCode = code === "MODULE_NOT_FOUND" ||
|
|
298
|
+
code === "ERR_MODULE_NOT_FOUND" ||
|
|
299
|
+
/Cannot find (module|package)/.test(err.message);
|
|
300
|
+
if (!hasMissingCode)
|
|
301
|
+
return false;
|
|
302
|
+
// The first quoted token after "Cannot find package/module" is the
|
|
303
|
+
// requested specifier; match against that, not the whole message.
|
|
304
|
+
const requested = /Cannot find (?:package|module) ['"]([^'"]+)['"]/.exec(err.message);
|
|
305
|
+
if (requested && requested[1] !== undefined) {
|
|
306
|
+
return requested[1] === specifier || requested[1].startsWith(`${specifier}/`);
|
|
307
|
+
}
|
|
308
|
+
// Older Node versions or non-standard formats may not have the quoted
|
|
309
|
+
// requested specifier — fall through to an endsWith check on the SDK name
|
|
310
|
+
// tokens. Defensive but rare path.
|
|
311
|
+
const tokens = err.message.split(/\s+/);
|
|
312
|
+
return tokens.some((t) => t === specifier || t.startsWith(`${specifier}/`));
|
|
313
|
+
}
|
|
314
|
+
async function buildTransport(config, sdk, authProvider) {
|
|
315
|
+
if (config.type === "stdio") {
|
|
316
|
+
return new sdk.StdioClientTransport({
|
|
317
|
+
command: config.command,
|
|
318
|
+
args: config.args,
|
|
319
|
+
env: config.env,
|
|
320
|
+
cwd: config.cwd,
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
let url;
|
|
324
|
+
try {
|
|
325
|
+
url = new URL(config.url);
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
// Intentionally do not echo the URL — it can carry an env-substituted
|
|
329
|
+
// bearer token in the query string or userinfo. The user can read
|
|
330
|
+
// their config to see what they put there.
|
|
331
|
+
throw new AppError(ErrorCode.Config, "mcp http transport: invalid url (see config)");
|
|
332
|
+
}
|
|
333
|
+
const httpOpts = {};
|
|
334
|
+
if (config.headers)
|
|
335
|
+
httpOpts.requestInit = { headers: config.headers };
|
|
336
|
+
if (authProvider)
|
|
337
|
+
httpOpts.authProvider = authProvider;
|
|
338
|
+
return new sdk.StreamableHTTPClientTransport(url, httpOpts);
|
|
339
|
+
}
|
|
340
|
+
async function withTimeout(p, ms, message) {
|
|
341
|
+
return new Promise((resolve, reject) => {
|
|
342
|
+
const timer = setTimeout(() => reject(new AppError(ErrorCode.Provider, message)), ms);
|
|
343
|
+
p.then((v) => {
|
|
344
|
+
clearTimeout(timer);
|
|
345
|
+
resolve(v);
|
|
346
|
+
}, (e) => {
|
|
347
|
+
clearTimeout(timer);
|
|
348
|
+
reject(e);
|
|
349
|
+
});
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"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"}
|