@cdoing/core 0.1.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/coordinator.d.ts +114 -0
- package/dist/agents/coordinator.d.ts.map +1 -0
- package/dist/agents/coordinator.js +158 -0
- package/dist/agents/coordinator.js.map +1 -0
- package/dist/context-providers/clipboard.d.ts +13 -0
- package/dist/context-providers/clipboard.d.ts.map +1 -0
- package/dist/context-providers/clipboard.js +53 -0
- package/dist/context-providers/clipboard.js.map +1 -0
- package/dist/context-providers/codebase.d.ts +46 -0
- package/dist/context-providers/codebase.d.ts.map +1 -0
- package/dist/context-providers/codebase.js +273 -0
- package/dist/context-providers/codebase.js.map +1 -0
- package/dist/context-providers/diff.d.ts +18 -0
- package/dist/context-providers/diff.d.ts.map +1 -0
- package/dist/context-providers/diff.js +63 -0
- package/dist/context-providers/diff.js.map +1 -0
- package/dist/context-providers/docs.d.ts +21 -0
- package/dist/context-providers/docs.d.ts.map +1 -0
- package/dist/context-providers/docs.js +180 -0
- package/dist/context-providers/docs.js.map +1 -0
- package/dist/context-providers/file-include.d.ts +13 -0
- package/dist/context-providers/file-include.d.ts.map +1 -0
- package/dist/context-providers/file-include.js +82 -0
- package/dist/context-providers/file-include.js.map +1 -0
- package/dist/context-providers/folder.d.ts +19 -0
- package/dist/context-providers/folder.d.ts.map +1 -0
- package/dist/context-providers/folder.js +130 -0
- package/dist/context-providers/folder.js.map +1 -0
- package/dist/context-providers/git.d.ts +19 -0
- package/dist/context-providers/git.d.ts.map +1 -0
- package/dist/context-providers/git.js +74 -0
- package/dist/context-providers/git.js.map +1 -0
- package/dist/context-providers/index.d.ts +26 -0
- package/dist/context-providers/index.d.ts.map +1 -0
- package/dist/context-providers/index.js +37 -0
- package/dist/context-providers/index.js.map +1 -0
- package/dist/context-providers/open-files.d.ts +25 -0
- package/dist/context-providers/open-files.d.ts.map +1 -0
- package/dist/context-providers/open-files.js +134 -0
- package/dist/context-providers/open-files.js.map +1 -0
- package/dist/context-providers/problems.d.ts +24 -0
- package/dist/context-providers/problems.d.ts.map +1 -0
- package/dist/context-providers/problems.js +97 -0
- package/dist/context-providers/problems.js.map +1 -0
- package/dist/context-providers/registry.d.ts +61 -0
- package/dist/context-providers/registry.d.ts.map +1 -0
- package/dist/context-providers/registry.js +92 -0
- package/dist/context-providers/registry.js.map +1 -0
- package/dist/context-providers/terminal.d.ts +25 -0
- package/dist/context-providers/terminal.d.ts.map +1 -0
- package/dist/context-providers/terminal.js +55 -0
- package/dist/context-providers/terminal.js.map +1 -0
- package/dist/context-providers/tree.d.ts +29 -0
- package/dist/context-providers/tree.d.ts.map +1 -0
- package/dist/context-providers/tree.js +172 -0
- package/dist/context-providers/tree.js.map +1 -0
- package/dist/context-providers/types.d.ts +72 -0
- package/dist/context-providers/types.d.ts.map +1 -0
- package/dist/context-providers/types.js +10 -0
- package/dist/context-providers/types.js.map +1 -0
- package/dist/context-providers/url.d.ts +27 -0
- package/dist/context-providers/url.d.ts.map +1 -0
- package/dist/context-providers/url.js +131 -0
- package/dist/context-providers/url.js.map +1 -0
- package/dist/effort/index.d.ts +78 -0
- package/dist/effort/index.d.ts.map +1 -0
- package/dist/effort/index.js +146 -0
- package/dist/effort/index.js.map +1 -0
- package/dist/hooks/index.d.ts +47 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +151 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +75 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +152 -0
- package/dist/index.js.map +1 -0
- package/dist/indexing/chunker.d.ts +25 -0
- package/dist/indexing/chunker.d.ts.map +1 -0
- package/dist/indexing/chunker.js +217 -0
- package/dist/indexing/chunker.js.map +1 -0
- package/dist/indexing/database.d.ts +49 -0
- package/dist/indexing/database.d.ts.map +1 -0
- package/dist/indexing/database.js +287 -0
- package/dist/indexing/database.js.map +1 -0
- package/dist/indexing/index.d.ts +9 -0
- package/dist/indexing/index.d.ts.map +1 -0
- package/dist/indexing/index.js +13 -0
- package/dist/indexing/index.js.map +1 -0
- package/dist/indexing/indexer.d.ts +63 -0
- package/dist/indexing/indexer.d.ts.map +1 -0
- package/dist/indexing/indexer.js +352 -0
- package/dist/indexing/indexer.js.map +1 -0
- package/dist/indexing/recent-edits-cache.d.ts +77 -0
- package/dist/indexing/recent-edits-cache.d.ts.map +1 -0
- package/dist/indexing/recent-edits-cache.js +123 -0
- package/dist/indexing/recent-edits-cache.js.map +1 -0
- package/dist/indexing/types.d.ts +39 -0
- package/dist/indexing/types.d.ts.map +1 -0
- package/dist/indexing/types.js +6 -0
- package/dist/indexing/types.js.map +1 -0
- package/dist/mcp/index.d.ts +33 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +37 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +123 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +331 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/oauth.d.ts +33 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +312 -0
- package/dist/oauth.js.map +1 -0
- package/dist/permissions/index.d.ts +216 -0
- package/dist/permissions/index.d.ts.map +1 -0
- package/dist/permissions/index.js +938 -0
- package/dist/permissions/index.js.map +1 -0
- package/dist/plan/index.d.ts +20 -0
- package/dist/plan/index.d.ts.map +1 -0
- package/dist/plan/index.js +24 -0
- package/dist/plan/index.js.map +1 -0
- package/dist/plan/manager.d.ts +101 -0
- package/dist/plan/manager.d.ts.map +1 -0
- package/dist/plan/manager.js +170 -0
- package/dist/plan/manager.js.map +1 -0
- package/dist/rules/index.d.ts +28 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +31 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/manager.d.ts +77 -0
- package/dist/rules/manager.d.ts.map +1 -0
- package/dist/rules/manager.js +279 -0
- package/dist/rules/manager.js.map +1 -0
- package/dist/rules/types.d.ts +34 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +9 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/sandbox/filesystem.d.ts +20 -0
- package/dist/sandbox/filesystem.d.ts.map +1 -0
- package/dist/sandbox/filesystem.js +141 -0
- package/dist/sandbox/filesystem.js.map +1 -0
- package/dist/sandbox/index.d.ts +4 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +8 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/sandbox/manager.d.ts +47 -0
- package/dist/sandbox/manager.d.ts.map +1 -0
- package/dist/sandbox/manager.js +220 -0
- package/dist/sandbox/manager.js.map +1 -0
- package/dist/sandbox/network.d.ts +14 -0
- package/dist/sandbox/network.d.ts.map +1 -0
- package/dist/sandbox/network.js +87 -0
- package/dist/sandbox/network.js.map +1 -0
- package/dist/sandbox/types.d.ts +42 -0
- package/dist/sandbox/types.d.ts.map +1 -0
- package/dist/sandbox/types.js +25 -0
- package/dist/sandbox/types.js.map +1 -0
- package/dist/tools/ast-edit.d.ts +57 -0
- package/dist/tools/ast-edit.d.ts.map +1 -0
- package/dist/tools/ast-edit.js +443 -0
- package/dist/tools/ast-edit.js.map +1 -0
- package/dist/tools/code-verify.d.ts +8 -0
- package/dist/tools/code-verify.d.ts.map +1 -0
- package/dist/tools/code-verify.js +159 -0
- package/dist/tools/code-verify.js.map +1 -0
- package/dist/tools/codebase-search.d.ts +17 -0
- package/dist/tools/codebase-search.d.ts.map +1 -0
- package/dist/tools/codebase-search.js +104 -0
- package/dist/tools/codebase-search.js.map +1 -0
- package/dist/tools/file-delete.d.ts +26 -0
- package/dist/tools/file-delete.d.ts.map +1 -0
- package/dist/tools/file-delete.js +179 -0
- package/dist/tools/file-delete.js.map +1 -0
- package/dist/tools/file-edit.d.ts +10 -0
- package/dist/tools/file-edit.d.ts.map +1 -0
- package/dist/tools/file-edit.js +138 -0
- package/dist/tools/file-edit.js.map +1 -0
- package/dist/tools/file-read.d.ts +12 -0
- package/dist/tools/file-read.d.ts.map +1 -0
- package/dist/tools/file-read.js +211 -0
- package/dist/tools/file-read.js.map +1 -0
- package/dist/tools/file-run.d.ts +10 -0
- package/dist/tools/file-run.d.ts.map +1 -0
- package/dist/tools/file-run.js +179 -0
- package/dist/tools/file-run.js.map +1 -0
- package/dist/tools/file-write.d.ts +10 -0
- package/dist/tools/file-write.d.ts.map +1 -0
- package/dist/tools/file-write.js +134 -0
- package/dist/tools/file-write.js.map +1 -0
- package/dist/tools/glob-search.d.ts +8 -0
- package/dist/tools/glob-search.d.ts.map +1 -0
- package/dist/tools/glob-search.js +108 -0
- package/dist/tools/glob-search.js.map +1 -0
- package/dist/tools/grep-search.d.ts +8 -0
- package/dist/tools/grep-search.d.ts.map +1 -0
- package/dist/tools/grep-search.js +139 -0
- package/dist/tools/grep-search.js.map +1 -0
- package/dist/tools/list-dir.d.ts +16 -0
- package/dist/tools/list-dir.d.ts.map +1 -0
- package/dist/tools/list-dir.js +183 -0
- package/dist/tools/list-dir.js.map +1 -0
- package/dist/tools/multi-edit.d.ts +16 -0
- package/dist/tools/multi-edit.d.ts.map +1 -0
- package/dist/tools/multi-edit.js +163 -0
- package/dist/tools/multi-edit.js.map +1 -0
- package/dist/tools/notebook-edit.d.ts +31 -0
- package/dist/tools/notebook-edit.d.ts.map +1 -0
- package/dist/tools/notebook-edit.js +321 -0
- package/dist/tools/notebook-edit.js.map +1 -0
- package/dist/tools/registry.d.ts +16 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +41 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/shell-exec.d.ts +12 -0
- package/dist/tools/shell-exec.d.ts.map +1 -0
- package/dist/tools/shell-exec.js +261 -0
- package/dist/tools/shell-exec.js.map +1 -0
- package/dist/tools/sub-agent-manager.d.ts +57 -0
- package/dist/tools/sub-agent-manager.d.ts.map +1 -0
- package/dist/tools/sub-agent-manager.js +153 -0
- package/dist/tools/sub-agent-manager.js.map +1 -0
- package/dist/tools/sub-agent-status.d.ts +12 -0
- package/dist/tools/sub-agent-status.d.ts.map +1 -0
- package/dist/tools/sub-agent-status.js +59 -0
- package/dist/tools/sub-agent-status.js.map +1 -0
- package/dist/tools/sub-agent-terminate.d.ts +12 -0
- package/dist/tools/sub-agent-terminate.d.ts.map +1 -0
- package/dist/tools/sub-agent-terminate.js +55 -0
- package/dist/tools/sub-agent-terminate.js.map +1 -0
- package/dist/tools/sub-agent.d.ts +34 -0
- package/dist/tools/sub-agent.d.ts.map +1 -0
- package/dist/tools/sub-agent.js +140 -0
- package/dist/tools/sub-agent.js.map +1 -0
- package/dist/tools/system-info.d.ts +24 -0
- package/dist/tools/system-info.d.ts.map +1 -0
- package/dist/tools/system-info.js +220 -0
- package/dist/tools/system-info.js.map +1 -0
- package/dist/tools/todo.d.ts +16 -0
- package/dist/tools/todo.d.ts.map +1 -0
- package/dist/tools/todo.js +144 -0
- package/dist/tools/todo.js.map +1 -0
- package/dist/tools/types.d.ts +20 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +3 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/view-diff.d.ts +11 -0
- package/dist/tools/view-diff.d.ts.map +1 -0
- package/dist/tools/view-diff.js +88 -0
- package/dist/tools/view-diff.js.map +1 -0
- package/dist/tools/view-repo-map.d.ts +18 -0
- package/dist/tools/view-repo-map.d.ts.map +1 -0
- package/dist/tools/view-repo-map.js +245 -0
- package/dist/tools/view-repo-map.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +13 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +106 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/tools/web-search.d.ts +10 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +106 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/utils/gitignore.d.ts +10 -0
- package/dist/utils/gitignore.d.ts.map +1 -0
- package/dist/utils/gitignore.js +104 -0
- package/dist/utils/gitignore.js.map +1 -0
- package/dist/utils/lazy-apply.d.ts +45 -0
- package/dist/utils/lazy-apply.d.ts.map +1 -0
- package/dist/utils/lazy-apply.js +164 -0
- package/dist/utils/lazy-apply.js.map +1 -0
- package/dist/utils/memory.d.ts +36 -0
- package/dist/utils/memory.d.ts.map +1 -0
- package/dist/utils/memory.js +136 -0
- package/dist/utils/memory.js.map +1 -0
- package/dist/utils/path-matching.d.ts +24 -0
- package/dist/utils/path-matching.d.ts.map +1 -0
- package/dist/utils/path-matching.js +116 -0
- package/dist/utils/path-matching.js.map +1 -0
- package/dist/utils/path-safety.d.ts +13 -0
- package/dist/utils/path-safety.d.ts.map +1 -0
- package/dist/utils/path-safety.js +54 -0
- package/dist/utils/path-safety.js.map +1 -0
- package/dist/utils/project-config.d.ts +18 -0
- package/dist/utils/project-config.d.ts.map +1 -0
- package/dist/utils/project-config.js +76 -0
- package/dist/utils/project-config.js.map +1 -0
- package/dist/utils/search-match.d.ts +63 -0
- package/dist/utils/search-match.d.ts.map +1 -0
- package/dist/utils/search-match.js +426 -0
- package/dist/utils/search-match.js.map +1 -0
- package/dist/utils/shell-paths.d.ts +17 -0
- package/dist/utils/shell-paths.d.ts.map +1 -0
- package/dist/utils/shell-paths.js +107 -0
- package/dist/utils/shell-paths.js.map +1 -0
- package/dist/utils/streaming-diff.d.ts +45 -0
- package/dist/utils/streaming-diff.d.ts.map +1 -0
- package/dist/utils/streaming-diff.js +230 -0
- package/dist/utils/streaming-diff.js.map +1 -0
- package/dist/utils/todo.d.ts +47 -0
- package/dist/utils/todo.d.ts.map +1 -0
- package/dist/utils/todo.js +102 -0
- package/dist/utils/todo.js.map +1 -0
- package/package.json +23 -0
- package/src/agents/coordinator.ts +240 -0
- package/src/context-providers/clipboard.ts +48 -0
- package/src/context-providers/codebase.ts +274 -0
- package/src/context-providers/diff.ts +66 -0
- package/src/context-providers/docs.ts +160 -0
- package/src/context-providers/file-include.ts +54 -0
- package/src/context-providers/folder.ts +106 -0
- package/src/context-providers/git.ts +72 -0
- package/src/context-providers/index.ts +26 -0
- package/src/context-providers/open-files.ts +113 -0
- package/src/context-providers/problems.ts +100 -0
- package/src/context-providers/registry.ts +99 -0
- package/src/context-providers/terminal.ts +58 -0
- package/src/context-providers/tree.ts +161 -0
- package/src/context-providers/types.ts +84 -0
- package/src/context-providers/url.ts +138 -0
- package/src/effort/index.ts +177 -0
- package/src/hooks/index.ts +148 -0
- package/src/index.ts +114 -0
- package/src/indexing/README.md +267 -0
- package/src/indexing/chunker.ts +206 -0
- package/src/indexing/database.ts +299 -0
- package/src/indexing/index.ts +15 -0
- package/src/indexing/indexer.ts +383 -0
- package/src/indexing/recent-edits-cache.ts +150 -0
- package/src/indexing/types.ts +44 -0
- package/src/mcp/index.ts +33 -0
- package/src/mcp/manager.ts +385 -0
- package/src/oauth.ts +330 -0
- package/src/permissions/index.ts +1011 -0
- package/src/plan/index.ts +20 -0
- package/src/plan/manager.ts +233 -0
- package/src/rules/index.ts +28 -0
- package/src/rules/manager.ts +276 -0
- package/src/rules/types.ts +40 -0
- package/src/sandbox/filesystem.ts +135 -0
- package/src/sandbox/index.ts +9 -0
- package/src/sandbox/manager.ts +213 -0
- package/src/sandbox/network.ts +101 -0
- package/src/sandbox/types.ts +63 -0
- package/src/tools/ast-edit.ts +493 -0
- package/src/tools/code-verify.ts +143 -0
- package/src/tools/codebase-search.ts +117 -0
- package/src/tools/file-delete.ts +155 -0
- package/src/tools/file-edit.ts +115 -0
- package/src/tools/file-read.ts +195 -0
- package/src/tools/file-run.ts +158 -0
- package/src/tools/file-write.ts +104 -0
- package/src/tools/glob-search.ts +80 -0
- package/src/tools/grep-search.ts +120 -0
- package/src/tools/list-dir.ts +172 -0
- package/src/tools/multi-edit.ts +138 -0
- package/src/tools/notebook-edit.ts +342 -0
- package/src/tools/registry.ts +43 -0
- package/src/tools/shell-exec.ts +251 -0
- package/src/tools/sub-agent-manager.ts +183 -0
- package/src/tools/sub-agent-status.ts +67 -0
- package/src/tools/sub-agent-terminate.ts +62 -0
- package/src/tools/sub-agent.ts +162 -0
- package/src/tools/system-info.ts +248 -0
- package/src/tools/todo.ts +149 -0
- package/src/tools/types.ts +21 -0
- package/src/tools/view-diff.ts +99 -0
- package/src/tools/view-repo-map.ts +249 -0
- package/src/tools/web-fetch.ts +118 -0
- package/src/tools/web-search.ts +129 -0
- package/src/utils/gitignore.ts +73 -0
- package/src/utils/lazy-apply.ts +189 -0
- package/src/utils/memory.ts +124 -0
- package/src/utils/path-matching.ts +84 -0
- package/src/utils/path-safety.ts +19 -0
- package/src/utils/project-config.ts +41 -0
- package/src/utils/search-match.ts +495 -0
- package/src/utils/shell-paths.ts +79 -0
- package/src/utils/streaming-diff.ts +260 -0
- package/src/utils/todo.ts +115 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MCP (Model Context Protocol) Server Support
|
|
4
|
+
*
|
|
5
|
+
* MCP is an open protocol that lets AI models connect to external
|
|
6
|
+
* data sources and tools. Think of it as "USB for AI" — a standard
|
|
7
|
+
* way to plug in capabilities.
|
|
8
|
+
*
|
|
9
|
+
* How it works:
|
|
10
|
+
* 1. User configures MCP servers in .cdoing/mcp.json or settings
|
|
11
|
+
* 2. On startup, we connect to each configured server
|
|
12
|
+
* 3. Discover available tools from each server
|
|
13
|
+
* 4. Register those tools so the agent can call them
|
|
14
|
+
* 5. Route tool calls through the MCP protocol
|
|
15
|
+
*
|
|
16
|
+
* Configuration format (.cdoing/mcp.json):
|
|
17
|
+
* {
|
|
18
|
+
* "servers": [
|
|
19
|
+
* {
|
|
20
|
+
* "name": "jira",
|
|
21
|
+
* "command": "npx",
|
|
22
|
+
* "args": ["-y", "@modelcontextprotocol/server-jira"],
|
|
23
|
+
* "env": { "JIRA_URL": "https://..." }
|
|
24
|
+
* }
|
|
25
|
+
* ]
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* Learning note: MCP uses JSON-RPC over stdio or SSE (Server-Sent Events).
|
|
29
|
+
* Each server is a separate process that we spawn and communicate with
|
|
30
|
+
* through its stdin/stdout. This isolation means a buggy MCP server
|
|
31
|
+
* can't crash the main agent.
|
|
32
|
+
*/
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.McpManager = void 0;
|
|
35
|
+
var manager_1 = require("./manager");
|
|
36
|
+
Object.defineProperty(exports, "McpManager", { enumerable: true, get: function () { return manager_1.McpManager; } });
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;;;AAEH,qCAA2E;AAAlE,qGAAA,UAAU,OAAA"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Manager — Manages connections to MCP (Model Context Protocol) servers.
|
|
3
|
+
*
|
|
4
|
+
* Handles:
|
|
5
|
+
* - Loading server configurations
|
|
6
|
+
* - Spawning and connecting to server processes
|
|
7
|
+
* - Tool discovery (listing available tools from each server)
|
|
8
|
+
* - Routing tool calls to the correct server
|
|
9
|
+
* - Graceful shutdown of server processes
|
|
10
|
+
*
|
|
11
|
+
* Learning note: This uses JSON-RPC 2.0 over stdio for communication.
|
|
12
|
+
* Each message is a JSON object separated by newlines. The protocol
|
|
13
|
+
* is stateless — each request gets exactly one response.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Configuration for a single MCP server.
|
|
17
|
+
*/
|
|
18
|
+
export interface McpServerConfig {
|
|
19
|
+
/** Human-readable name for this server */
|
|
20
|
+
name: string;
|
|
21
|
+
/** Command to run the server (e.g., "npx", "python") */
|
|
22
|
+
command: string;
|
|
23
|
+
/** Arguments to pass to the command */
|
|
24
|
+
args?: string[];
|
|
25
|
+
/** Environment variables for the server process */
|
|
26
|
+
env?: Record<string, string>;
|
|
27
|
+
/** Working directory for the server */
|
|
28
|
+
cwd?: string;
|
|
29
|
+
/** Whether this server is enabled (default: true) */
|
|
30
|
+
enabled?: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A tool discovered from an MCP server.
|
|
34
|
+
*/
|
|
35
|
+
export interface McpTool {
|
|
36
|
+
/** Tool name (namespaced: "server_name.tool_name") */
|
|
37
|
+
name: string;
|
|
38
|
+
/** Human-readable description */
|
|
39
|
+
description: string;
|
|
40
|
+
/** JSON Schema for the tool's input parameters */
|
|
41
|
+
inputSchema: Record<string, unknown>;
|
|
42
|
+
/** Which MCP server provides this tool */
|
|
43
|
+
serverName: string;
|
|
44
|
+
}
|
|
45
|
+
export declare class McpManager {
|
|
46
|
+
/** Active server connections */
|
|
47
|
+
private connections;
|
|
48
|
+
/** Working directory for resolving config paths */
|
|
49
|
+
private workingDir;
|
|
50
|
+
constructor(workingDir: string);
|
|
51
|
+
/**
|
|
52
|
+
* Load MCP server configurations from config files.
|
|
53
|
+
*
|
|
54
|
+
* Checks these locations (in order):
|
|
55
|
+
* 1. .cdoing/mcp.json (project-specific)
|
|
56
|
+
* 2. ~/.cdoing/mcp.json (global)
|
|
57
|
+
*
|
|
58
|
+
* Learning note: Project configs take precedence over global ones.
|
|
59
|
+
* This lets you have project-specific MCP servers (e.g., a Jira
|
|
60
|
+
* server for one project, a Notion server for another).
|
|
61
|
+
*/
|
|
62
|
+
loadConfig(): McpServerConfig[];
|
|
63
|
+
/**
|
|
64
|
+
* Connect to all configured MCP servers.
|
|
65
|
+
* Spawns each server process and discovers its tools.
|
|
66
|
+
*/
|
|
67
|
+
connectAll(): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Connect to a single MCP server.
|
|
70
|
+
*
|
|
71
|
+
* Learning note: We spawn the server as a child process and
|
|
72
|
+
* communicate via JSON-RPC over stdio. The "initialize" handshake
|
|
73
|
+
* tells the server our capabilities, and "tools/list" discovers
|
|
74
|
+
* what tools it offers.
|
|
75
|
+
*/
|
|
76
|
+
connect(config: McpServerConfig): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Send a JSON-RPC request to an MCP server.
|
|
79
|
+
*
|
|
80
|
+
* Learning note: JSON-RPC uses numeric IDs to match requests
|
|
81
|
+
* with responses. We store pending requests in a Map and resolve
|
|
82
|
+
* the Promise when we get the matching response.
|
|
83
|
+
*/
|
|
84
|
+
private sendRequest;
|
|
85
|
+
/**
|
|
86
|
+
* Handle an incoming message from an MCP server.
|
|
87
|
+
*/
|
|
88
|
+
private handleServerMessage;
|
|
89
|
+
/**
|
|
90
|
+
* Get all tools from all connected MCP servers.
|
|
91
|
+
*/
|
|
92
|
+
getAllTools(): McpTool[];
|
|
93
|
+
/**
|
|
94
|
+
* Call a tool on an MCP server.
|
|
95
|
+
*
|
|
96
|
+
* @param toolName - Namespaced tool name (e.g., "jira_create_issue")
|
|
97
|
+
* @param input - Tool input parameters
|
|
98
|
+
* @returns Tool execution result
|
|
99
|
+
*/
|
|
100
|
+
callTool(toolName: string, input: Record<string, unknown>): Promise<{
|
|
101
|
+
success: boolean;
|
|
102
|
+
output: string;
|
|
103
|
+
error?: string;
|
|
104
|
+
}>;
|
|
105
|
+
/**
|
|
106
|
+
* Check if a tool name belongs to an MCP server.
|
|
107
|
+
*/
|
|
108
|
+
isMcpTool(toolName: string): boolean;
|
|
109
|
+
/**
|
|
110
|
+
* Get connected server names.
|
|
111
|
+
*/
|
|
112
|
+
getConnectedServers(): string[];
|
|
113
|
+
/**
|
|
114
|
+
* Disconnect from all MCP servers.
|
|
115
|
+
* Sends a graceful shutdown signal to each server process.
|
|
116
|
+
*/
|
|
117
|
+
disconnectAll(): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Update the working directory.
|
|
120
|
+
*/
|
|
121
|
+
setWorkingDir(dir: string): void;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IAEb,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAEhB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IAEb,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IAEpB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAErC,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;CACpB;AAiBD,qBAAa,UAAU;IACrB,gCAAgC;IAChC,OAAO,CAAC,WAAW,CAAoC;IAEvD,mDAAmD;IACnD,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM;IAI9B;;;;;;;;;;OAUG;IACH,UAAU,IAAI,eAAe,EAAE;IA8B/B;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC;;;;;;;OAOG;IACG,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA+ErD;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;IA8BnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;IACH,WAAW,IAAI,OAAO,EAAE;IAQxB;;;;;;OAMG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;QACxE,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IA8BF;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IASpC;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAI/B;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAWpC;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAGjC"}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MCP Manager — Manages connections to MCP (Model Context Protocol) servers.
|
|
4
|
+
*
|
|
5
|
+
* Handles:
|
|
6
|
+
* - Loading server configurations
|
|
7
|
+
* - Spawning and connecting to server processes
|
|
8
|
+
* - Tool discovery (listing available tools from each server)
|
|
9
|
+
* - Routing tool calls to the correct server
|
|
10
|
+
* - Graceful shutdown of server processes
|
|
11
|
+
*
|
|
12
|
+
* Learning note: This uses JSON-RPC 2.0 over stdio for communication.
|
|
13
|
+
* Each message is a JSON object separated by newlines. The protocol
|
|
14
|
+
* is stateless — each request gets exactly one response.
|
|
15
|
+
*/
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
33
|
+
var ownKeys = function(o) {
|
|
34
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
35
|
+
var ar = [];
|
|
36
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
37
|
+
return ar;
|
|
38
|
+
};
|
|
39
|
+
return ownKeys(o);
|
|
40
|
+
};
|
|
41
|
+
return function (mod) {
|
|
42
|
+
if (mod && mod.__esModule) return mod;
|
|
43
|
+
var result = {};
|
|
44
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
45
|
+
__setModuleDefault(result, mod);
|
|
46
|
+
return result;
|
|
47
|
+
};
|
|
48
|
+
})();
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.McpManager = void 0;
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const os = __importStar(require("os"));
|
|
54
|
+
const child_process_1 = require("child_process");
|
|
55
|
+
class McpManager {
|
|
56
|
+
/** Active server connections */
|
|
57
|
+
connections = new Map();
|
|
58
|
+
/** Working directory for resolving config paths */
|
|
59
|
+
workingDir;
|
|
60
|
+
constructor(workingDir) {
|
|
61
|
+
this.workingDir = workingDir;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Load MCP server configurations from config files.
|
|
65
|
+
*
|
|
66
|
+
* Checks these locations (in order):
|
|
67
|
+
* 1. .cdoing/mcp.json (project-specific)
|
|
68
|
+
* 2. ~/.cdoing/mcp.json (global)
|
|
69
|
+
*
|
|
70
|
+
* Learning note: Project configs take precedence over global ones.
|
|
71
|
+
* This lets you have project-specific MCP servers (e.g., a Jira
|
|
72
|
+
* server for one project, a Notion server for another).
|
|
73
|
+
*/
|
|
74
|
+
loadConfig() {
|
|
75
|
+
const configs = [];
|
|
76
|
+
const paths = [
|
|
77
|
+
path.join(this.workingDir, ".cdoing", "mcp.json"),
|
|
78
|
+
path.join(os.homedir(), ".cdoing", "mcp.json"),
|
|
79
|
+
];
|
|
80
|
+
for (const configPath of paths) {
|
|
81
|
+
try {
|
|
82
|
+
if (fs.existsSync(configPath)) {
|
|
83
|
+
const raw = fs.readFileSync(configPath, "utf-8");
|
|
84
|
+
const parsed = JSON.parse(raw);
|
|
85
|
+
if (parsed.servers && Array.isArray(parsed.servers)) {
|
|
86
|
+
for (const server of parsed.servers) {
|
|
87
|
+
// Don't add duplicates (project config overrides global)
|
|
88
|
+
if (!configs.some((c) => c.name === server.name)) {
|
|
89
|
+
configs.push(server);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Skip invalid config files
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return configs;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Connect to all configured MCP servers.
|
|
103
|
+
* Spawns each server process and discovers its tools.
|
|
104
|
+
*/
|
|
105
|
+
async connectAll() {
|
|
106
|
+
const configs = this.loadConfig();
|
|
107
|
+
for (const config of configs) {
|
|
108
|
+
if (config.enabled === false)
|
|
109
|
+
continue;
|
|
110
|
+
try {
|
|
111
|
+
await this.connect(config);
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
console.error(`[MCP] Failed to connect to ${config.name}:`, err);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Connect to a single MCP server.
|
|
120
|
+
*
|
|
121
|
+
* Learning note: We spawn the server as a child process and
|
|
122
|
+
* communicate via JSON-RPC over stdio. The "initialize" handshake
|
|
123
|
+
* tells the server our capabilities, and "tools/list" discovers
|
|
124
|
+
* what tools it offers.
|
|
125
|
+
*/
|
|
126
|
+
async connect(config) {
|
|
127
|
+
// Spawn the server process
|
|
128
|
+
const child = (0, child_process_1.spawn)(config.command, config.args || [], {
|
|
129
|
+
cwd: config.cwd || this.workingDir,
|
|
130
|
+
env: { ...process.env, ...config.env },
|
|
131
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
132
|
+
});
|
|
133
|
+
const connection = {
|
|
134
|
+
config,
|
|
135
|
+
process: child,
|
|
136
|
+
tools: [],
|
|
137
|
+
requestId: 0,
|
|
138
|
+
pendingRequests: new Map(),
|
|
139
|
+
buffer: "",
|
|
140
|
+
};
|
|
141
|
+
// Handle incoming messages from the server
|
|
142
|
+
child.stdout?.on("data", (data) => {
|
|
143
|
+
connection.buffer += data.toString();
|
|
144
|
+
// Process complete JSON-RPC messages (delimited by newlines)
|
|
145
|
+
let newlineIndex;
|
|
146
|
+
while ((newlineIndex = connection.buffer.indexOf("\n")) >= 0) {
|
|
147
|
+
const line = connection.buffer.substring(0, newlineIndex).trim();
|
|
148
|
+
connection.buffer = connection.buffer.substring(newlineIndex + 1);
|
|
149
|
+
if (!line)
|
|
150
|
+
continue;
|
|
151
|
+
try {
|
|
152
|
+
const message = JSON.parse(line);
|
|
153
|
+
this.handleServerMessage(config.name, message, connection);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// Skip non-JSON lines (e.g., server startup logs)
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
// Handle server errors
|
|
161
|
+
child.stderr?.on("data", (data) => {
|
|
162
|
+
// Log but don't crash — server stderr is often debug output
|
|
163
|
+
const text = data.toString().trim();
|
|
164
|
+
if (text) {
|
|
165
|
+
console.error(`[MCP:${config.name}] ${text}`);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
child.on("exit", (code) => {
|
|
169
|
+
this.connections.delete(config.name);
|
|
170
|
+
});
|
|
171
|
+
this.connections.set(config.name, connection);
|
|
172
|
+
// Perform MCP handshake
|
|
173
|
+
try {
|
|
174
|
+
await this.sendRequest(config.name, "initialize", {
|
|
175
|
+
protocolVersion: "2024-11-05",
|
|
176
|
+
capabilities: {},
|
|
177
|
+
clientInfo: { name: "cdoing-agent", version: "0.1.0" },
|
|
178
|
+
});
|
|
179
|
+
// Discover tools
|
|
180
|
+
const toolsResult = await this.sendRequest(config.name, "tools/list", {});
|
|
181
|
+
if (toolsResult?.tools) {
|
|
182
|
+
connection.tools = toolsResult.tools.map((t) => ({
|
|
183
|
+
name: `${config.name}_${t.name}`,
|
|
184
|
+
description: `[${config.name}] ${t.description || t.name}`,
|
|
185
|
+
inputSchema: t.inputSchema || { type: "object", properties: {} },
|
|
186
|
+
serverName: config.name,
|
|
187
|
+
}));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
// If handshake fails, clean up
|
|
192
|
+
child.kill();
|
|
193
|
+
this.connections.delete(config.name);
|
|
194
|
+
throw err;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Send a JSON-RPC request to an MCP server.
|
|
199
|
+
*
|
|
200
|
+
* Learning note: JSON-RPC uses numeric IDs to match requests
|
|
201
|
+
* with responses. We store pending requests in a Map and resolve
|
|
202
|
+
* the Promise when we get the matching response.
|
|
203
|
+
*/
|
|
204
|
+
sendRequest(serverName, method, params) {
|
|
205
|
+
const connection = this.connections.get(serverName);
|
|
206
|
+
if (!connection) {
|
|
207
|
+
return Promise.reject(new Error(`MCP server not connected: ${serverName}`));
|
|
208
|
+
}
|
|
209
|
+
return new Promise((resolve, reject) => {
|
|
210
|
+
const id = ++connection.requestId;
|
|
211
|
+
connection.pendingRequests.set(id, { resolve, reject });
|
|
212
|
+
const message = JSON.stringify({
|
|
213
|
+
jsonrpc: "2.0",
|
|
214
|
+
id,
|
|
215
|
+
method,
|
|
216
|
+
params,
|
|
217
|
+
});
|
|
218
|
+
connection.process.stdin?.write(message + "\n");
|
|
219
|
+
// Timeout after 30 seconds
|
|
220
|
+
setTimeout(() => {
|
|
221
|
+
const pending = connection.pendingRequests.get(id);
|
|
222
|
+
if (pending) {
|
|
223
|
+
connection.pendingRequests.delete(id);
|
|
224
|
+
pending.reject(new Error(`MCP request timeout: ${method}`));
|
|
225
|
+
}
|
|
226
|
+
}, 30000);
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Handle an incoming message from an MCP server.
|
|
231
|
+
*/
|
|
232
|
+
handleServerMessage(serverName, message, connection) {
|
|
233
|
+
// JSON-RPC response (has an "id" field)
|
|
234
|
+
if (message.id !== undefined) {
|
|
235
|
+
const pending = connection.pendingRequests.get(message.id);
|
|
236
|
+
if (pending) {
|
|
237
|
+
connection.pendingRequests.delete(message.id);
|
|
238
|
+
if (message.error) {
|
|
239
|
+
pending.reject(new Error(message.error.message || "MCP error"));
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
pending.resolve(message.result);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// JSON-RPC notification (no "id" field) — log but ignore
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Get all tools from all connected MCP servers.
|
|
250
|
+
*/
|
|
251
|
+
getAllTools() {
|
|
252
|
+
const tools = [];
|
|
253
|
+
for (const connection of this.connections.values()) {
|
|
254
|
+
tools.push(...connection.tools);
|
|
255
|
+
}
|
|
256
|
+
return tools;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Call a tool on an MCP server.
|
|
260
|
+
*
|
|
261
|
+
* @param toolName - Namespaced tool name (e.g., "jira_create_issue")
|
|
262
|
+
* @param input - Tool input parameters
|
|
263
|
+
* @returns Tool execution result
|
|
264
|
+
*/
|
|
265
|
+
async callTool(toolName, input) {
|
|
266
|
+
// Find which server provides this tool
|
|
267
|
+
for (const connection of this.connections.values()) {
|
|
268
|
+
const tool = connection.tools.find((t) => t.name === toolName);
|
|
269
|
+
if (tool) {
|
|
270
|
+
// Strip the server name prefix to get the original tool name
|
|
271
|
+
const originalName = toolName.replace(`${tool.serverName}_`, "");
|
|
272
|
+
try {
|
|
273
|
+
const result = await this.sendRequest(tool.serverName, "tools/call", {
|
|
274
|
+
name: originalName,
|
|
275
|
+
arguments: input,
|
|
276
|
+
});
|
|
277
|
+
// MCP tool results have a "content" array
|
|
278
|
+
const output = result?.content
|
|
279
|
+
?.map((c) => c.text || JSON.stringify(c))
|
|
280
|
+
.join("\n") || JSON.stringify(result);
|
|
281
|
+
return { success: true, output };
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
285
|
+
return { success: false, output: "", error: message };
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return { success: false, output: "", error: `Unknown MCP tool: ${toolName}` };
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Check if a tool name belongs to an MCP server.
|
|
293
|
+
*/
|
|
294
|
+
isMcpTool(toolName) {
|
|
295
|
+
for (const connection of this.connections.values()) {
|
|
296
|
+
if (connection.tools.some((t) => t.name === toolName)) {
|
|
297
|
+
return true;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Get connected server names.
|
|
304
|
+
*/
|
|
305
|
+
getConnectedServers() {
|
|
306
|
+
return Array.from(this.connections.keys());
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Disconnect from all MCP servers.
|
|
310
|
+
* Sends a graceful shutdown signal to each server process.
|
|
311
|
+
*/
|
|
312
|
+
async disconnectAll() {
|
|
313
|
+
for (const [name, connection] of this.connections) {
|
|
314
|
+
try {
|
|
315
|
+
connection.process.kill("SIGTERM");
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
// Process may already be dead
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
this.connections.clear();
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Update the working directory.
|
|
325
|
+
*/
|
|
326
|
+
setWorkingDir(dir) {
|
|
327
|
+
this.workingDir = dir;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
exports.McpManager = McpManager;
|
|
331
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,iDAAyD;AAyDzD,MAAa,UAAU;IACrB,gCAAgC;IACxB,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEvD,mDAAmD;IAC3C,UAAU,CAAS;IAE3B,YAAY,UAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;;;;;;;;OAUG;IACH,UAAU;QACR,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG;YACZ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC;SAC/C,CAAC;QAEF,KAAK,MAAM,UAAU,IAAI,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC9B,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAE/B,IAAI,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;wBACpD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;4BACpC,yDAAyD;4BACzD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gCACjD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;4BACvB,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,4BAA4B;YAC9B,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAElC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK;gBAAE,SAAS;YAEvC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,MAAM,CAAC,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,CAAC,MAAuB;QACnC,2BAA2B;QAC3B,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE;YACrD,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU;YAClC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE;YACtC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAkB;YAChC,MAAM;YACN,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,CAAC;YACZ,eAAe,EAAE,IAAI,GAAG,EAAE;YAC1B,MAAM,EAAE,EAAE;SACX,CAAC;QAEF,2CAA2C;QAC3C,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACxC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAErC,6DAA6D;YAC7D,IAAI,YAAoB,CAAC;YACzB,OAAO,CAAC,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjE,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBAElE,IAAI,CAAC,IAAI;oBAAE,SAAS;gBAEpB,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACjC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;gBAC7D,CAAC;gBAAC,MAAM,CAAC;oBACP,kDAAkD;gBACpD,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACxC,4DAA4D;YAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,QAAQ,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAE9C,wBAAwB;QACxB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE;gBAChD,eAAe,EAAE,YAAY;gBAC7B,YAAY,EAAE,EAAE;gBAChB,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE;aACvD,CAAC,CAAC;YAEH,iBAAiB;YACjB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,CAAQ,CAAC;YACjF,IAAI,WAAW,EAAE,KAAK,EAAE,CAAC;gBACvB,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;oBACpD,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE;oBAChC,WAAW,EAAE,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,EAAE;oBAC1D,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;oBAChE,UAAU,EAAE,MAAM,CAAC,IAAI;iBACxB,CAAC,CAAC,CAAC;YACN,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,+BAA+B;YAC/B,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,WAAW,CAAC,UAAkB,EAAE,MAAc,EAAE,MAAe;QACrE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC;YAClC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAExD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC7B,OAAO,EAAE,KAAK;gBACd,EAAE;gBACF,MAAM;gBACN,MAAM;aACP,CAAC,CAAC;YAEH,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;YAEhD,2BAA2B;YAC3B,UAAU,CAAC,GAAG,EAAE;gBACd,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACnD,IAAI,OAAO,EAAE,CAAC;oBACZ,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACtC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC,EAAE,KAAK,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,UAAkB,EAClB,OAAY,EACZ,UAAyB;QAEzB,wCAAwC;QACxC,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC3D,IAAI,OAAO,EAAE,CAAC;gBACZ,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC9C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAClB,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC;gBAClE,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;QACD,yDAAyD;IAC3D,CAAC;IAED;;OAEG;IACH,WAAW;QACT,MAAM,KAAK,GAAc,EAAE,CAAC;QAC5B,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,KAA8B;QAK7D,uCAAuC;QACvC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YAC/D,IAAI,IAAI,EAAE,CAAC;gBACT,6DAA6D;gBAC7D,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,CAAC,CAAC;gBAEjE,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE;wBACnE,IAAI,EAAE,YAAY;wBAClB,SAAS,EAAE,KAAK;qBACjB,CAAQ,CAAC;oBAEV,0CAA0C;oBAC1C,MAAM,MAAM,GAAG,MAAM,EAAE,OAAO;wBAC5B,EAAE,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;yBAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBAExC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gBACnC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACjE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,qBAAqB,QAAQ,EAAE,EAAE,CAAC;IAChF,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,QAAgB;QACxB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YACnD,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACtD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa;QACjB,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClD,IAAI,CAAC;gBACH,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,8BAA8B;YAChC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,GAAW;QACvB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;IACxB,CAAC;CACF;AArTD,gCAqTC"}
|
package/dist/oauth.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth 2.0 (PKCE) for Claude — Shared Core Module
|
|
3
|
+
*
|
|
4
|
+
* All credential storage, token management, and OAuth flow logic lives here.
|
|
5
|
+
* Both CLI and VS Code extension import from this module.
|
|
6
|
+
*
|
|
7
|
+
* Credential storage:
|
|
8
|
+
* - macOS: encrypted Keychain via `security` CLI
|
|
9
|
+
* - Linux: libsecret via `secret-tool` if available, else file fallback
|
|
10
|
+
* - Windows: Windows Credential Manager via `cmdkey`, else file fallback
|
|
11
|
+
*/
|
|
12
|
+
export interface OAuthTokens {
|
|
13
|
+
access_token: string;
|
|
14
|
+
refresh_token?: string;
|
|
15
|
+
expires_at?: number;
|
|
16
|
+
token_type: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function saveOAuthTokens(tokens: OAuthTokens): void;
|
|
19
|
+
export declare function loadOAuthTokens(): OAuthTokens | null;
|
|
20
|
+
export declare function clearOAuthTokens(): void;
|
|
21
|
+
export declare function isOAuthExpired(tokens: OAuthTokens): boolean;
|
|
22
|
+
export declare function refreshAccessToken(refreshToken: string): Promise<OAuthTokens | null>;
|
|
23
|
+
export declare function resolveOAuthToken(): Promise<string | null>;
|
|
24
|
+
export declare function generateOAuthUrl(): {
|
|
25
|
+
url: string;
|
|
26
|
+
codeVerifier: string;
|
|
27
|
+
};
|
|
28
|
+
export declare function exchangeOAuthCode(code: string, codeVerifier: string): Promise<OAuthTokens>;
|
|
29
|
+
export declare function getOAuthStatus(): {
|
|
30
|
+
status: "none" | "active" | "expired";
|
|
31
|
+
expiresAt?: number;
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAmKD,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAEzD;AAED,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CASpD;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAG3D;AAID,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA2B1F;AAID,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUhE;AAID,wBAAgB,gBAAgB,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAgBxE;AAID,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA8BhG;AAID,wBAAgB,cAAc,IAAI;IAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAK9F"}
|