@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
package/dist/mcp/host.js
ADDED
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
import { AppError, ErrorCode } from "@chances-ai/runtime";
|
|
2
|
+
import { McpClient } from "./client.js";
|
|
3
|
+
import { bridgeMcpTool, sanitizeMcpName } from "./bridge.js";
|
|
4
|
+
import { expandServerEnv } from "./env.js";
|
|
5
|
+
import { buildRedactor, collectSecrets } from "./redact.js";
|
|
6
|
+
import { ChancesOAuthClientProvider } from "./oauth/provider.js";
|
|
7
|
+
import { LoopbackCallbackServer } from "./oauth/callback-server.js";
|
|
8
|
+
/**
|
|
9
|
+
* Lifecycle orchestrator for one or more MCP servers. Connects them in
|
|
10
|
+
* parallel on `start()`, surfaces per-server failures as `failed` status
|
|
11
|
+
* instead of crashing the whole boot, and registers each server's discovered
|
|
12
|
+
* tools into the host `ToolRegistry`.
|
|
13
|
+
*
|
|
14
|
+
* Not a Plugin — MCP integration lives at the runtime layer because the
|
|
15
|
+
* engine consumes tools, not plugin hooks. Slash commands and CLI glue talk
|
|
16
|
+
* to the host directly.
|
|
17
|
+
*
|
|
18
|
+
* **Lifecycle serialization.** Every method that mutates host state
|
|
19
|
+
* (`startServer` / `restart` / `remove` / `dispose`) is chained behind a
|
|
20
|
+
* single `opsLock` promise so concurrent calls observe a consistent state
|
|
21
|
+
* machine. Two concurrent `restart(x)` calls run sequentially; a
|
|
22
|
+
* `dispose()` interleaved with a `restart()` always wins (because each
|
|
23
|
+
* step re-checks `disposed`). This guards against the codex-flagged race
|
|
24
|
+
* where a floating `/mcp restart` could resurrect a server after global
|
|
25
|
+
* teardown.
|
|
26
|
+
*/
|
|
27
|
+
export class McpHost {
|
|
28
|
+
opts;
|
|
29
|
+
states = new Map();
|
|
30
|
+
disposed = false;
|
|
31
|
+
opsLock = Promise.resolve();
|
|
32
|
+
constructor(opts) {
|
|
33
|
+
this.opts = opts;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Constructs and starts the host. Returns once every server has either
|
|
37
|
+
* connected (and its tools are in the registry) or failed (status
|
|
38
|
+
* `failed`, error message logged). Always resolves — never throws — so a
|
|
39
|
+
* misconfigured MCP server can't take down the agent.
|
|
40
|
+
*/
|
|
41
|
+
static async start(opts) {
|
|
42
|
+
const host = new McpHost(opts);
|
|
43
|
+
const entries = Object.entries(opts.servers);
|
|
44
|
+
if (entries.length === 0)
|
|
45
|
+
return host;
|
|
46
|
+
await Promise.allSettled(entries.map(([id, cfg]) => host.runOp(() => host.startServer(id, cfg))));
|
|
47
|
+
return host;
|
|
48
|
+
}
|
|
49
|
+
status() {
|
|
50
|
+
return [...this.states.values()].map((s) => ({ ...s.status }));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Tears down the named server (if any), wipes its registered tools, then
|
|
54
|
+
* reconnects from its current config. Surfaces the new status. Caller is
|
|
55
|
+
* the `/mcp restart` slash command.
|
|
56
|
+
*/
|
|
57
|
+
async restart(id) {
|
|
58
|
+
return this.runOp(async () => {
|
|
59
|
+
const state = this.states.get(id);
|
|
60
|
+
if (!state) {
|
|
61
|
+
throw new AppError(ErrorCode.Config, `mcp: unknown server '${id}'`);
|
|
62
|
+
}
|
|
63
|
+
if (this.disposed) {
|
|
64
|
+
throw new AppError(ErrorCode.Config, `mcp: host is disposed; cannot restart '${id}'`);
|
|
65
|
+
}
|
|
66
|
+
await this.disposeServer(state);
|
|
67
|
+
// dispose() may have flipped `disposed` while we were awaiting; bail
|
|
68
|
+
// before we resurrect the server.
|
|
69
|
+
if (this.disposed) {
|
|
70
|
+
throw new AppError(ErrorCode.Config, `mcp: host was disposed during restart of '${id}'`);
|
|
71
|
+
}
|
|
72
|
+
await this.startServer(id, state.config);
|
|
73
|
+
return this.states.get(id).status;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Tears down the named server and unregisters its tools, but leaves no
|
|
78
|
+
* trace in host state — callers (typically `/mcp remove`) own the config
|
|
79
|
+
* mutation. Throws if no such server is known.
|
|
80
|
+
*/
|
|
81
|
+
async remove(id) {
|
|
82
|
+
return this.runOp(async () => {
|
|
83
|
+
const state = this.states.get(id);
|
|
84
|
+
if (!state) {
|
|
85
|
+
throw new AppError(ErrorCode.Config, `mcp: unknown server '${id}'`);
|
|
86
|
+
}
|
|
87
|
+
await this.disposeServer(state);
|
|
88
|
+
this.states.delete(id);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* One-shot validation: connect, list tools, dispose. Doesn't register any
|
|
93
|
+
* tools or mutate host state. Caller is `/mcp test`.
|
|
94
|
+
*/
|
|
95
|
+
async test(id) {
|
|
96
|
+
const cfg = this.opts.servers[id];
|
|
97
|
+
if (!cfg)
|
|
98
|
+
return { ok: false, output: `unknown server '${id}'` };
|
|
99
|
+
const expanded = safeExpandEnv(cfg, this.opts.env ?? process.env, id);
|
|
100
|
+
if (expanded instanceof AppError)
|
|
101
|
+
return { ok: false, output: expanded.message };
|
|
102
|
+
const redact = buildRedactor(secretsFor(expanded));
|
|
103
|
+
let client;
|
|
104
|
+
try {
|
|
105
|
+
client = await McpClient.connect(id, expanded, {
|
|
106
|
+
connectTimeoutMs: this.opts.connectTimeoutMs,
|
|
107
|
+
clientIdentity: this.opts.clientIdentity,
|
|
108
|
+
redact,
|
|
109
|
+
});
|
|
110
|
+
const tools = await client.listTools();
|
|
111
|
+
const names = tools.map((t) => t.name).join(", ") || "(no tools advertised)";
|
|
112
|
+
return { ok: true, output: `connected — ${tools.length} tool(s): ${names}` };
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
return { ok: false, output: redact(e.message) };
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
if (client) {
|
|
119
|
+
try {
|
|
120
|
+
await client.dispose();
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
this.opts.logger.warn(`mcp '${id}': test dispose failed: ${redact(e.message)}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Tears down every server and unregisters their tools. Safe to call
|
|
130
|
+
* repeatedly; subsequent calls are no-ops.
|
|
131
|
+
*/
|
|
132
|
+
async dispose() {
|
|
133
|
+
return this.runOp(async () => {
|
|
134
|
+
if (this.disposed)
|
|
135
|
+
return;
|
|
136
|
+
this.disposed = true;
|
|
137
|
+
await Promise.allSettled([...this.states.values()].map((s) => this.disposeServer(s)));
|
|
138
|
+
this.states.clear();
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Serializes a lifecycle operation behind `opsLock` so concurrent
|
|
143
|
+
* `restart`/`remove`/`dispose` calls run one at a time. The lock is a
|
|
144
|
+
* promise chain — every new op `.then`s itself onto the previous one.
|
|
145
|
+
*/
|
|
146
|
+
runOp(op) {
|
|
147
|
+
const next = this.opsLock.then(op, op);
|
|
148
|
+
// Replace the lock with a never-rejected continuation so a rejected
|
|
149
|
+
// op doesn't poison the chain. The caller still sees the rejection.
|
|
150
|
+
this.opsLock = next.catch(() => undefined);
|
|
151
|
+
return next;
|
|
152
|
+
}
|
|
153
|
+
async startServer(id, config) {
|
|
154
|
+
// Preserve OAuth provider/redactor/coalescer across restart so a
|
|
155
|
+
// refresh in flight when the user runs /mcp restart can still be
|
|
156
|
+
// aborted, and so token scrubs from the previous connect still hold.
|
|
157
|
+
const prior = this.states.get(id);
|
|
158
|
+
const state = {
|
|
159
|
+
config,
|
|
160
|
+
status: { id, state: "starting" },
|
|
161
|
+
registeredToolNames: [],
|
|
162
|
+
oauth: prior?.oauth,
|
|
163
|
+
redactor: (m) => m,
|
|
164
|
+
resources: [],
|
|
165
|
+
prompts: [],
|
|
166
|
+
generation: (prior?.generation ?? 0) + 1,
|
|
167
|
+
};
|
|
168
|
+
this.states.set(id, state);
|
|
169
|
+
if (config.enabled === false) {
|
|
170
|
+
state.status = { id, state: "disabled" };
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const expanded = safeExpandEnv(config, this.opts.env ?? process.env, id);
|
|
174
|
+
if (expanded instanceof AppError) {
|
|
175
|
+
state.status = { id, state: "failed", error: expanded.message };
|
|
176
|
+
this.opts.logger.warn(`mcp '${id}': ${expanded.message}`);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const redact = state.oauth?.redactor ?? buildRedactor(secretsFor(expanded));
|
|
180
|
+
// (5.4) Keep the redactor on state so resource/prompt reads scrub the same
|
|
181
|
+
// secret bag the bridge does (codex R1 S1).
|
|
182
|
+
state.redactor = redact;
|
|
183
|
+
// (3.7) Build / reuse the OAuth provider for this server when
|
|
184
|
+
// `auth.kind === "oauth"`. The provider survives across restarts
|
|
185
|
+
// (refresh coalescer must persist so an in-flight refresh can be
|
|
186
|
+
// aborted by /mcp logout); only the callback server is per-flow.
|
|
187
|
+
let authProvider;
|
|
188
|
+
if (isOAuthHttp(expanded)) {
|
|
189
|
+
if (!this.opts.vault) {
|
|
190
|
+
const message = `mcp '${id}': OAuth configured but local-vault unavailable — ` +
|
|
191
|
+
`install '../local-vault/index.js' or remove the 'auth' block`;
|
|
192
|
+
state.status = { id, state: "failed", error: message };
|
|
193
|
+
this.opts.logger.warn(message);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
// (codex Round-2 MUST-FIX #3) Always create a FRESH provider +
|
|
197
|
+
// callback server on startServer. The provider captures its
|
|
198
|
+
// vault-generation snapshot at construction and drops every later
|
|
199
|
+
// save when `current.generation > snapshotGen`; reusing the same
|
|
200
|
+
// instance across logout/restart leaves the snapshot stale and the
|
|
201
|
+
// next /mcp login can never persist tokens. The redactor is the
|
|
202
|
+
// only thing we preserve so secrets discovered before restart
|
|
203
|
+
// still scrub from errors after.
|
|
204
|
+
const callbackServer = new LoopbackCallbackServer();
|
|
205
|
+
const provider = await ChancesOAuthClientProvider.create({
|
|
206
|
+
serverName: id,
|
|
207
|
+
serverConfig: expanded,
|
|
208
|
+
vault: this.opts.vault,
|
|
209
|
+
callbackServer,
|
|
210
|
+
redactor: redact,
|
|
211
|
+
logger: this.opts.logger,
|
|
212
|
+
openBrowser: this.opts.openBrowser ?? (async () => undefined),
|
|
213
|
+
});
|
|
214
|
+
// Close the previous flow's callback server if one was still bound
|
|
215
|
+
// (e.g. user Ctrl-C'd a previous /mcp login mid-flow before restart).
|
|
216
|
+
if (state.oauth?.callbackServer) {
|
|
217
|
+
try {
|
|
218
|
+
await state.oauth.callbackServer.close();
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
// best-effort
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
state.oauth = {
|
|
225
|
+
provider,
|
|
226
|
+
callbackServer,
|
|
227
|
+
redactor: redact,
|
|
228
|
+
config: expanded,
|
|
229
|
+
};
|
|
230
|
+
authProvider = state.oauth.provider;
|
|
231
|
+
}
|
|
232
|
+
let client;
|
|
233
|
+
try {
|
|
234
|
+
client = await McpClient.connect(id, expanded, {
|
|
235
|
+
connectTimeoutMs: this.opts.connectTimeoutMs,
|
|
236
|
+
clientIdentity: this.opts.clientIdentity,
|
|
237
|
+
redact,
|
|
238
|
+
authProvider,
|
|
239
|
+
workspaceRoot: this.opts.workspaceRoot,
|
|
240
|
+
advertiseRoots: this.opts.advertiseRoots,
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
catch (e) {
|
|
244
|
+
const message = redact(e.message);
|
|
245
|
+
state.status = { id, state: "failed", error: message };
|
|
246
|
+
this.opts.logger.warn(`mcp '${id}': connect failed: ${message}`);
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
// Host may have been disposed while we were connecting. Drop the new
|
|
250
|
+
// client cleanly instead of registering tools that will never be torn
|
|
251
|
+
// down by `dispose()` (it already drained `states`).
|
|
252
|
+
if (this.disposed) {
|
|
253
|
+
try {
|
|
254
|
+
await client.dispose();
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
// best-effort
|
|
258
|
+
}
|
|
259
|
+
this.states.delete(id);
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
state.client = client;
|
|
263
|
+
let descriptors;
|
|
264
|
+
try {
|
|
265
|
+
descriptors = await client.listTools();
|
|
266
|
+
}
|
|
267
|
+
catch (e) {
|
|
268
|
+
const message = `listTools failed: ${redact(e.message)}`;
|
|
269
|
+
state.status = { id, state: "failed", error: message };
|
|
270
|
+
this.opts.logger.warn(`mcp '${id}': ${message}`);
|
|
271
|
+
try {
|
|
272
|
+
await client.dispose();
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
// best-effort
|
|
276
|
+
}
|
|
277
|
+
state.client = undefined;
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
// Detect sanitization collisions BEFORE registering anything. Two MCP
|
|
281
|
+
// tool names that sanitize to the same `mcp__<srv>__<tool>` would let
|
|
282
|
+
// a later descriptor silently overwrite an earlier one in the shared
|
|
283
|
+
// `ToolRegistry` — and the per-tool permission rule key would be
|
|
284
|
+
// ambiguous between them. Fail the server instead.
|
|
285
|
+
const seen = new Map();
|
|
286
|
+
for (const d of descriptors) {
|
|
287
|
+
const final = `mcp__${sanitizeMcpName(id)}__${sanitizeMcpName(d.name)}`;
|
|
288
|
+
const prior = seen.get(final);
|
|
289
|
+
if (prior !== undefined) {
|
|
290
|
+
const message = `tool name collision: '${prior}' and '${d.name}' both sanitize to '${final}'`;
|
|
291
|
+
state.status = { id, state: "failed", error: message };
|
|
292
|
+
this.opts.logger.warn(`mcp '${id}': ${message}`);
|
|
293
|
+
try {
|
|
294
|
+
await client.dispose();
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
// best-effort
|
|
298
|
+
}
|
|
299
|
+
state.client = undefined;
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
seen.set(final, d.name);
|
|
303
|
+
}
|
|
304
|
+
// Also catch collisions with existing registry entries (built-in tools
|
|
305
|
+
// or tools from another already-running MCP server). Registering over
|
|
306
|
+
// them would silently replace a previously-approved tool.
|
|
307
|
+
for (const finalName of seen.keys()) {
|
|
308
|
+
if (this.opts.registry.get(finalName)) {
|
|
309
|
+
const message = `tool name '${finalName}' is already registered (built-in or another MCP server)`;
|
|
310
|
+
state.status = { id, state: "failed", error: message };
|
|
311
|
+
this.opts.logger.warn(`mcp '${id}': ${message}`);
|
|
312
|
+
try {
|
|
313
|
+
await client.dispose();
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
// best-effort
|
|
317
|
+
}
|
|
318
|
+
state.client = undefined;
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
const tools = descriptors.map((d) => bridgeMcpTool(id, d, client, { defaultTimeoutMs: config.timeoutMs, redact }));
|
|
323
|
+
for (const tool of tools) {
|
|
324
|
+
this.opts.registry.register(tool);
|
|
325
|
+
state.registeredToolNames.push(tool.name);
|
|
326
|
+
}
|
|
327
|
+
// (5.4 D9′) Best-effort resources + prompts discovery. A server that lacks
|
|
328
|
+
// the capability (rejects with -32601) or errors yields an empty list — we
|
|
329
|
+
// NEVER fail the server for it: its tools are already registered and useful.
|
|
330
|
+
state.resources = await this.discoverResources(id, client, redact);
|
|
331
|
+
state.prompts = await this.discoverPrompts(id, client, redact);
|
|
332
|
+
state.status = {
|
|
333
|
+
id,
|
|
334
|
+
state: "ready",
|
|
335
|
+
toolCount: tools.length,
|
|
336
|
+
toolNames: state.registeredToolNames.slice(),
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
async discoverResources(id, client, redact) {
|
|
340
|
+
try {
|
|
341
|
+
const list = await client.listResources();
|
|
342
|
+
return list.map((r) => ({ ...r, server: id }));
|
|
343
|
+
}
|
|
344
|
+
catch (e) {
|
|
345
|
+
this.opts.logger.debug(`mcp '${id}': resources/list unavailable: ${redact(e.message)}`);
|
|
346
|
+
return [];
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
async discoverPrompts(id, client, redact) {
|
|
350
|
+
try {
|
|
351
|
+
const list = await client.listPrompts();
|
|
352
|
+
return list.map((p) => ({ ...p, server: id }));
|
|
353
|
+
}
|
|
354
|
+
catch (e) {
|
|
355
|
+
this.opts.logger.debug(`mcp '${id}': prompts/list unavailable: ${redact(e.message)}`);
|
|
356
|
+
return [];
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
async disposeServer(state) {
|
|
360
|
+
for (const name of state.registeredToolNames) {
|
|
361
|
+
this.opts.registry.unregister(name);
|
|
362
|
+
}
|
|
363
|
+
state.registeredToolNames = [];
|
|
364
|
+
// (5.4) Drop cached resources/prompts. Prompt SLASH commands are owned by
|
|
365
|
+
// the CLI (rebuilt per respawn from `host.prompts()` — codex R1 M1), so
|
|
366
|
+
// there's nothing to unregister here.
|
|
367
|
+
state.resources = [];
|
|
368
|
+
state.prompts = [];
|
|
369
|
+
// (5.4 R2 S3) Detach the client + bump the generation BEFORE awaiting
|
|
370
|
+
// dispose. A concurrent `readResource`/`getPrompt` snapshots client+gen
|
|
371
|
+
// synchronously, then awaits; clearing here means its post-await
|
|
372
|
+
// `assertSameGeneration` sees `client !== captured` (and a higher gen) and
|
|
373
|
+
// fails cleanly instead of returning content from a server mid-teardown.
|
|
374
|
+
const client = state.client;
|
|
375
|
+
state.client = undefined;
|
|
376
|
+
state.generation += 1;
|
|
377
|
+
if (client) {
|
|
378
|
+
try {
|
|
379
|
+
await client.dispose();
|
|
380
|
+
}
|
|
381
|
+
catch (e) {
|
|
382
|
+
this.opts.logger.warn(`mcp '${state.status.id}': dispose failed: ${e.message}`);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
state.status = { id: state.status.id, state: "disposed" };
|
|
386
|
+
}
|
|
387
|
+
// ─── 5.4 resources + prompts accessors ───────────────────────────────
|
|
388
|
+
// Implements `McpResourceProvider` (resources + readResource); the CLI uses
|
|
389
|
+
// `prompts`/`getPrompt` directly to build slash commands. Reads run OUTSIDE
|
|
390
|
+
// `opsLock`; each snapshots the client + generation so a concurrent
|
|
391
|
+
// `/mcp restart` that swaps the client mid-read fails cleanly (codex R1 S3).
|
|
392
|
+
/** Cached `resources/list` snapshot across servers (optional filter). */
|
|
393
|
+
resources(server) {
|
|
394
|
+
const all = [...this.states.values()].flatMap((s) => s.resources);
|
|
395
|
+
return server ? all.filter((r) => r.server === server) : all;
|
|
396
|
+
}
|
|
397
|
+
/** Cached `prompts/list` snapshot across servers (optional filter). */
|
|
398
|
+
prompts(server) {
|
|
399
|
+
const all = [...this.states.values()].flatMap((s) => s.prompts);
|
|
400
|
+
return server ? all.filter((p) => p.server === server) : all;
|
|
401
|
+
}
|
|
402
|
+
async readResource(server, uri, signal) {
|
|
403
|
+
const state = this.states.get(server);
|
|
404
|
+
if (!state?.client) {
|
|
405
|
+
throw new AppError(ErrorCode.Config, `mcp: server '${server}' is not connected`);
|
|
406
|
+
}
|
|
407
|
+
const client = state.client;
|
|
408
|
+
const gen = state.generation;
|
|
409
|
+
const redact = state.redactor;
|
|
410
|
+
let contents;
|
|
411
|
+
try {
|
|
412
|
+
contents = await client.readResource(uri, { signal });
|
|
413
|
+
}
|
|
414
|
+
catch (e) {
|
|
415
|
+
if (e instanceof AppError && e.code === ErrorCode.Cancelled)
|
|
416
|
+
throw e;
|
|
417
|
+
throw new AppError(ErrorCode.Provider, redact(e.message));
|
|
418
|
+
}
|
|
419
|
+
this.assertSameGeneration(server, client, gen, "read");
|
|
420
|
+
return { contents, redact };
|
|
421
|
+
}
|
|
422
|
+
async getPrompt(server, name, args, signal) {
|
|
423
|
+
const state = this.states.get(server);
|
|
424
|
+
if (!state?.client) {
|
|
425
|
+
throw new AppError(ErrorCode.Config, `mcp: server '${server}' is not connected`);
|
|
426
|
+
}
|
|
427
|
+
const client = state.client;
|
|
428
|
+
const gen = state.generation;
|
|
429
|
+
const redact = state.redactor;
|
|
430
|
+
let result;
|
|
431
|
+
try {
|
|
432
|
+
result = await client.getPrompt(name, args, { signal });
|
|
433
|
+
}
|
|
434
|
+
catch (e) {
|
|
435
|
+
if (e instanceof AppError && e.code === ErrorCode.Cancelled)
|
|
436
|
+
throw e;
|
|
437
|
+
throw new AppError(ErrorCode.Provider, redact(e.message));
|
|
438
|
+
}
|
|
439
|
+
this.assertSameGeneration(server, client, gen, "prompt fetch");
|
|
440
|
+
return { ...result, redact };
|
|
441
|
+
}
|
|
442
|
+
/** (5.4 S3) Throw if the server's client was swapped/disposed during an await. */
|
|
443
|
+
assertSameGeneration(server, client, gen, op) {
|
|
444
|
+
const after = this.states.get(server);
|
|
445
|
+
if (!after || after.generation !== gen || after.client !== client) {
|
|
446
|
+
throw new AppError(ErrorCode.Provider, `mcp: server '${server}' restarted during ${op}; retry`);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
// ─── 3.7 OAuth surface ─────────────────────────────────────────────
|
|
450
|
+
/**
|
|
451
|
+
* Test/slash seam — returns the per-server OAuth bag (provider,
|
|
452
|
+
* callback server, coalescer, redactor). Returns undefined when the
|
|
453
|
+
* server isn't OAuth-configured or hasn't been started yet.
|
|
454
|
+
*/
|
|
455
|
+
getOAuthState(id) {
|
|
456
|
+
return this.states.get(id)?.oauth;
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* (3.7) Logs out a single OAuth-configured server:
|
|
460
|
+
* 1. Bumps the vault payload's generation (via `invalidateCredentials("all")`)
|
|
461
|
+
* so late-arriving `saveTokens` from a refresh that escaped the
|
|
462
|
+
* teardown drops on the generation guard inside `mergeMutate`
|
|
463
|
+
* (codex Round-1 MUST-FIX #5).
|
|
464
|
+
* 2. Restarts the server. **(codex Round-2 MUST-FIX #3)** `startServer`
|
|
465
|
+
* constructs a FRESH `ChancesOAuthClientProvider` with the new
|
|
466
|
+
* generation snapshot, so the next `/mcp login` can persist tokens
|
|
467
|
+
* and the old provider's cached state can't resurface.
|
|
468
|
+
*
|
|
469
|
+
* No-op when the server isn't OAuth-configured.
|
|
470
|
+
*/
|
|
471
|
+
async logout(id) {
|
|
472
|
+
return this.runOp(async () => {
|
|
473
|
+
const state = this.states.get(id);
|
|
474
|
+
if (!state?.oauth) {
|
|
475
|
+
// Either unknown server or non-OAuth. Neither is an error — slash
|
|
476
|
+
// commands surface their own messaging.
|
|
477
|
+
return;
|
|
478
|
+
}
|
|
479
|
+
await state.oauth.provider.invalidateCredentials("all");
|
|
480
|
+
// disposeServer + startServer together rebuild the OAuth state with
|
|
481
|
+
// a fresh provider (gen snapshot reads the just-bumped generation)
|
|
482
|
+
// and a fresh callback server. The previous callback server gets
|
|
483
|
+
// closed in startServer before assignment.
|
|
484
|
+
await this.disposeServer(state);
|
|
485
|
+
if (!this.disposed) {
|
|
486
|
+
await this.startServer(id, state.config);
|
|
487
|
+
}
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
/** (3.7) Logs out every OAuth-configured server. Per-server failures
|
|
491
|
+
* don't abort the loop. */
|
|
492
|
+
async logoutAll() {
|
|
493
|
+
const oauthIds = [...this.states.entries()]
|
|
494
|
+
.filter(([, s]) => s.oauth !== undefined)
|
|
495
|
+
.map(([id]) => id);
|
|
496
|
+
for (const id of oauthIds) {
|
|
497
|
+
try {
|
|
498
|
+
await this.logout(id);
|
|
499
|
+
}
|
|
500
|
+
catch (e) {
|
|
501
|
+
this.opts.logger.warn(`mcp '${id}': logout failed: ${e.message}`);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* (3.7) Discriminator — is this config an HTTP MCP server with OAuth?
|
|
508
|
+
* Used by `startServer` to decide whether to construct a provider.
|
|
509
|
+
*/
|
|
510
|
+
function isOAuthHttp(c) {
|
|
511
|
+
return c.type === "http" && c.auth?.kind === "oauth";
|
|
512
|
+
}
|
|
513
|
+
function safeExpandEnv(config, env, id) {
|
|
514
|
+
try {
|
|
515
|
+
return expandServerEnv(config, env);
|
|
516
|
+
}
|
|
517
|
+
catch (e) {
|
|
518
|
+
if (e instanceof AppError) {
|
|
519
|
+
return new AppError(ErrorCode.Config, `mcp '${id}': ${e.message}`);
|
|
520
|
+
}
|
|
521
|
+
return new AppError(ErrorCode.Config, `mcp '${id}': env expansion failed: ${e.message}`);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
function secretsFor(config) {
|
|
525
|
+
if (config.type === "stdio") {
|
|
526
|
+
return collectSecrets({ env: config.env });
|
|
527
|
+
}
|
|
528
|
+
return collectSecrets({ headers: config.headers, url: config.url });
|
|
529
|
+
}
|
|
530
|
+
//# sourceMappingURL=host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/mcp/host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type { HttpMcpConfig, McpPrompt, McpPromptArgument, McpPromptMessage, McpResource, McpResourceContent, McpServerConfig, McpServerStatus, McpTestResult, OAuthMcpAuth, StdioMcpConfig, } from "./types.js";
|
|
2
|
+
export { type McpContentPart, type RenderOptions, type FormatResourceOptions, renderMcpContentParts, capUtf8, formatResourceContents, persistResourceBlob, safeBlobExt, } from "./content.js";
|
|
3
|
+
export { parsePromptArgs, renderPromptMessages } from "./prompts.js";
|
|
4
|
+
export { type McpResolvedResource, type McpResourceProvider, type ResourceMention, type ResourceToolOptions, extractResourceMentions, makeResourceTools, resolveMcpMentions, } from "./resources.js";
|
|
5
|
+
export { type BridgeOptions, type McpCallToolClient, type McpCallToolResult, type McpToolDescriptor, bridgeMcpTool, sanitizeMcpName, } from "./bridge.js";
|
|
6
|
+
export { type ToolAnnotations, categoryFromAnnotations } from "./category.js";
|
|
7
|
+
export { expandEnv, expandServerEnv } from "./env.js";
|
|
8
|
+
export { type ClientIdentity, type LoadedSdk, type SdkLikeClient, type SdkLikeTransport, McpClient, __resetAuthFnForTest, __resetSdkLoaderForTest, __setAuthFnForTest, __setSdkLoaderForTest, loadSdkAuth, } from "./client.js";
|
|
9
|
+
export { type LocalVaultLike, type McpHostOptions, McpHost } from "./host.js";
|
|
10
|
+
export { type ParseFailure, parseServerConfig, parseServerMap } from "./parse.js";
|
|
11
|
+
export { type RuntimeRedactor, buildRedactor, collectSecrets, stripTerminalControls, } from "./redact.js";
|
|
12
|
+
export { loadMcpHost } from "./load-mcp-host.js";
|
|
13
|
+
export { ChancesOAuthClientProvider, type VaultPayload, type OAuthDiscoveryStateInput, type OAuthDiscoveryStateOutput, } from "./oauth/provider.js";
|
|
14
|
+
export { LoopbackCallbackServer } from "./oauth/callback-server.js";
|
|
15
|
+
export { RefreshCoalescer } from "./oauth/refresh-coalescer.js";
|
|
16
|
+
export { makeConfigHash, makeVaultKey } from "./oauth/config-hash.js";
|
|
17
|
+
export { classifyOAuthResponse, isDefinitiveOAuthError, type NormalisedOAuthError, } from "./oauth/error-normalize.js";
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,aAAa,EACb,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,qBAAqB,EACrB,OAAO,EACP,sBAAsB,EACtB,mBAAmB,EACnB,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,aAAa,EACb,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,eAAe,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,SAAS,EACT,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAE,KAAK,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EACL,KAAK,eAAe,EACpB,aAAa,EACb,cAAc,EACd,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EACL,0BAA0B,EAC1B,KAAK,YAAY,EACjB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,GAC/B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { renderMcpContentParts, capUtf8, formatResourceContents, persistResourceBlob, safeBlobExt, } from "./content.js";
|
|
2
|
+
export { parsePromptArgs, renderPromptMessages } from "./prompts.js";
|
|
3
|
+
export { extractResourceMentions, makeResourceTools, resolveMcpMentions, } from "./resources.js";
|
|
4
|
+
export { bridgeMcpTool, sanitizeMcpName, } from "./bridge.js";
|
|
5
|
+
export { categoryFromAnnotations } from "./category.js";
|
|
6
|
+
export { expandEnv, expandServerEnv } from "./env.js";
|
|
7
|
+
export { McpClient, __resetAuthFnForTest, __resetSdkLoaderForTest, __setAuthFnForTest, __setSdkLoaderForTest, loadSdkAuth, } from "./client.js";
|
|
8
|
+
export { McpHost } from "./host.js";
|
|
9
|
+
export { parseServerConfig, parseServerMap } from "./parse.js";
|
|
10
|
+
export { buildRedactor, collectSecrets, stripTerminalControls, } from "./redact.js";
|
|
11
|
+
export { loadMcpHost } from "./load-mcp-host.js";
|
|
12
|
+
export { ChancesOAuthClientProvider, } from "./oauth/provider.js";
|
|
13
|
+
export { LoopbackCallbackServer } from "./oauth/callback-server.js";
|
|
14
|
+
export { RefreshCoalescer } from "./oauth/refresh-coalescer.js";
|
|
15
|
+
export { makeConfigHash, makeVaultKey } from "./oauth/config-hash.js";
|
|
16
|
+
export { classifyOAuthResponse, isDefinitiveOAuthError, } from "./oauth/error-normalize.js";
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAIL,qBAAqB,EACrB,OAAO,EACP,sBAAsB,EACtB,mBAAmB,EACnB,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAKL,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAKL,aAAa,EACb,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAwB,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAKL,SAAS,EACT,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAA4C,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAqB,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAEL,aAAa,EACb,cAAc,EACd,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EACL,0BAA0B,GAI3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (3.7) `loadMcpHost({withVault})` — boot-time factory for `McpHost` that
|
|
3
|
+
* lazily resolves `@chances-ai/local-vault` ONLY when the caller asks for
|
|
4
|
+
* a vault. Keeps the cold-start budget intact when no OAuth-configured
|
|
5
|
+
* MCP server is present (`apps/cli/src/boot/load-runtime.ts` passes
|
|
6
|
+
* `withVault: needsOAuth`).
|
|
7
|
+
*
|
|
8
|
+
* **Boundary decision (codex Round-1 NICE).** `apps/cli` MUST NOT import
|
|
9
|
+
* `@chances-ai/local-vault` directly — the only `app → local-vault` edge
|
|
10
|
+
* would force dependency-cruiser to permit a new boundary rule. Routing
|
|
11
|
+
* vault creation through this factory keeps the graph clean: only
|
|
12
|
+
* `@chances-ai/mcp` reaches into the vault package.
|
|
13
|
+
*
|
|
14
|
+
* **`bun build --compile` story.** The vault specifier is COMPUTED
|
|
15
|
+
* (`["@chances-ai", "local-vault"].join("/")`) so Bun's bundler doesn't
|
|
16
|
+
* statically resolve it. A binary built without `@chances-ai/local-vault`
|
|
17
|
+
* in node_modules still compiles cleanly — at runtime, the dynamic
|
|
18
|
+
* import fails, we log a clear diagnostic, and OAuth-configured MCP
|
|
19
|
+
* servers individually fail with the same diagnostic (the non-OAuth
|
|
20
|
+
* servers keep working). § 13.4 / § 16 of `docs/3.7-design.md` cover
|
|
21
|
+
* the five-permutation smoke gate that pins this property.
|
|
22
|
+
*/
|
|
23
|
+
import { McpHost, type LocalVaultLike, type McpHostOptions } from "./host.js";
|
|
24
|
+
export interface LoadMcpHostOptions extends Omit<McpHostOptions, "vault"> {
|
|
25
|
+
/** Set to `true` when at least one configured server has OAuth — see
|
|
26
|
+
* `apps/cli/src/boot/load-runtime.ts` for the determinant. */
|
|
27
|
+
withVault: boolean;
|
|
28
|
+
/** Override the vault loader for tests. */
|
|
29
|
+
vaultLoader?: () => Promise<LocalVaultLike>;
|
|
30
|
+
}
|
|
31
|
+
export declare function loadMcpHost(opts: LoadMcpHostOptions): Promise<McpHost>;
|
|
32
|
+
//# sourceMappingURL=load-mcp-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-mcp-host.d.ts","sourceRoot":"","sources":["../../src/mcp/load-mcp-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAE9E,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;IACvE;mEAC+D;IAC/D,SAAS,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;CAC7C;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAiB5E"}
|