funolio-agent 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/README.md +55 -0
- package/dist/clerk/index.d.ts +62 -0
- package/dist/clerk/index.d.ts.map +1 -0
- package/dist/clerk/index.js +186 -0
- package/dist/clerk/index.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +42 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/configure.d.ts +2 -0
- package/dist/commands/configure.d.ts.map +1 -0
- package/dist/commands/configure.js +252 -0
- package/dist/commands/configure.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +151 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +6 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +170 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/start.d.ts +8 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +179 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +55 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config.d.ts +46 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +113 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +9 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +15 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +83 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +338 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/registry.d.ts +32 -0
- package/dist/mcp/registry.d.ts.map +1 -0
- package/dist/mcp/registry.js +139 -0
- package/dist/mcp/registry.js.map +1 -0
- package/dist/message-loop.d.ts +18 -0
- package/dist/message-loop.d.ts.map +1 -0
- package/dist/message-loop.js +165 -0
- package/dist/message-loop.js.map +1 -0
- package/dist/mqtt-client.d.ts +67 -0
- package/dist/mqtt-client.d.ts.map +1 -0
- package/dist/mqtt-client.js +148 -0
- package/dist/mqtt-client.js.map +1 -0
- package/dist/providers/anthropic.d.ts +10 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +183 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/google.d.ts +10 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +161 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +42 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +19 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai.d.ts +10 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +173 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/retry.d.ts +6 -0
- package/dist/providers/retry.d.ts.map +1 -0
- package/dist/providers/retry.js +38 -0
- package/dist/providers/retry.js.map +1 -0
- package/dist/subagent/index.d.ts +8 -0
- package/dist/subagent/index.d.ts.map +1 -0
- package/dist/subagent/index.js +14 -0
- package/dist/subagent/index.js.map +1 -0
- package/dist/subagent/orchestrator.d.ts +67 -0
- package/dist/subagent/orchestrator.d.ts.map +1 -0
- package/dist/subagent/orchestrator.js +152 -0
- package/dist/subagent/orchestrator.js.map +1 -0
- package/dist/subagent/queue.d.ts +66 -0
- package/dist/subagent/queue.d.ts.map +1 -0
- package/dist/subagent/queue.js +298 -0
- package/dist/subagent/queue.js.map +1 -0
- package/dist/subagent/types.d.ts +76 -0
- package/dist/subagent/types.d.ts.map +1 -0
- package/dist/subagent/types.js +14 -0
- package/dist/subagent/types.js.map +1 -0
- package/dist/tools/edit-file.d.ts +3 -0
- package/dist/tools/edit-file.d.ts.map +1 -0
- package/dist/tools/edit-file.js +112 -0
- package/dist/tools/edit-file.js.map +1 -0
- package/dist/tools/git-tools.d.ts +5 -0
- package/dist/tools/git-tools.d.ts.map +1 -0
- package/dist/tools/git-tools.js +144 -0
- package/dist/tools/git-tools.js.map +1 -0
- package/dist/tools/index.d.ts +40 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +126 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/installer.d.ts +41 -0
- package/dist/tools/installer.d.ts.map +1 -0
- package/dist/tools/installer.js +227 -0
- package/dist/tools/installer.js.map +1 -0
- package/dist/tools/list-directory.d.ts +3 -0
- package/dist/tools/list-directory.d.ts.map +1 -0
- package/dist/tools/list-directory.js +107 -0
- package/dist/tools/list-directory.js.map +1 -0
- package/dist/tools/read-file.d.ts +3 -0
- package/dist/tools/read-file.d.ts.map +1 -0
- package/dist/tools/read-file.js +89 -0
- package/dist/tools/read-file.js.map +1 -0
- package/dist/tools/run-command.d.ts +3 -0
- package/dist/tools/run-command.d.ts.map +1 -0
- package/dist/tools/run-command.js +86 -0
- package/dist/tools/run-command.js.map +1 -0
- package/dist/tools/sandbox.d.ts +17 -0
- package/dist/tools/sandbox.d.ts.map +1 -0
- package/dist/tools/sandbox.js +78 -0
- package/dist/tools/sandbox.js.map +1 -0
- package/dist/tools/write-file.d.ts +3 -0
- package/dist/tools/write-file.d.ts.map +1 -0
- package/dist/tools/write-file.js +88 -0
- package/dist/tools/write-file.js.map +1 -0
- package/dist/types.d.ts +67 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/verification/index.d.ts +17 -0
- package/dist/verification/index.d.ts.map +1 -0
- package/dist/verification/index.js +224 -0
- package/dist/verification/index.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Phase 3J: MCP Manager
|
|
4
|
+
* Manages MCP server lifecycle: install, launch, tool discovery, persistence.
|
|
5
|
+
*
|
|
6
|
+
* MCP Protocol: communicates with MCP servers via JSON-RPC over stdio.
|
|
7
|
+
* Each server is launched as a subprocess; tools are discovered via the
|
|
8
|
+
* `initialize` + `tools/list` handshake.
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.MCPManager = void 0;
|
|
45
|
+
const child_process_1 = require("child_process");
|
|
46
|
+
const fs = __importStar(require("fs"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
const readline = __importStar(require("readline"));
|
|
49
|
+
const events_1 = require("events");
|
|
50
|
+
const config_1 = require("../config");
|
|
51
|
+
const registry_1 = require("./registry");
|
|
52
|
+
/**
|
|
53
|
+
* MCP Manager — singleton per agent instance.
|
|
54
|
+
*/
|
|
55
|
+
class MCPManager extends events_1.EventEmitter {
|
|
56
|
+
servers = new Map();
|
|
57
|
+
configPath;
|
|
58
|
+
allDiscoveredTools = [];
|
|
59
|
+
constructor() {
|
|
60
|
+
super();
|
|
61
|
+
this.configPath = path.join((0, config_1.getConfigDir)(), 'mcp-servers.json');
|
|
62
|
+
}
|
|
63
|
+
/** Load persisted MCP server configs */
|
|
64
|
+
loadPersistedConfigs() {
|
|
65
|
+
try {
|
|
66
|
+
if (fs.existsSync(this.configPath)) {
|
|
67
|
+
return JSON.parse(fs.readFileSync(this.configPath, 'utf-8'));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// ignore corrupt file
|
|
72
|
+
}
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
/** Save configs to disk */
|
|
76
|
+
saveConfigs() {
|
|
77
|
+
const configs = Array.from(this.servers.values()).map((s) => s.config);
|
|
78
|
+
const dir = path.dirname(this.configPath);
|
|
79
|
+
if (!fs.existsSync(dir)) {
|
|
80
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
81
|
+
}
|
|
82
|
+
fs.writeFileSync(this.configPath, JSON.stringify(configs, null, 2), { mode: 0o600 });
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Auto-launch all "always on" MCP servers on agent start.
|
|
86
|
+
*/
|
|
87
|
+
async autoLaunch() {
|
|
88
|
+
const configs = this.loadPersistedConfigs();
|
|
89
|
+
const alwaysOn = configs.filter((c) => c.alwaysOn);
|
|
90
|
+
for (const config of alwaysOn) {
|
|
91
|
+
const entry = registry_1.BUILTIN_REGISTRY.find((e) => e.id === config.id);
|
|
92
|
+
if (entry) {
|
|
93
|
+
try {
|
|
94
|
+
await this.launchServer(config, entry);
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
console.error(`[MCP] Failed to auto-launch ${config.id}: ${err.message}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Suggest MCP servers for a capability the agent is missing.
|
|
104
|
+
*/
|
|
105
|
+
suggestServers(query) {
|
|
106
|
+
const running = new Set(this.servers.keys());
|
|
107
|
+
return (0, registry_1.findMatchingServers)(query).filter((e) => !running.has(e.id));
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Install and launch an MCP server after user approval.
|
|
111
|
+
*/
|
|
112
|
+
async installAndLaunch(entry, envVars = {}, alwaysOn = false) {
|
|
113
|
+
if (this.servers.has(entry.id)) {
|
|
114
|
+
return this.servers.get(entry.id).tools;
|
|
115
|
+
}
|
|
116
|
+
const config = {
|
|
117
|
+
id: entry.id,
|
|
118
|
+
npmPackage: entry.npmPackage,
|
|
119
|
+
pipPackage: entry.pipPackage,
|
|
120
|
+
alwaysOn,
|
|
121
|
+
envVars,
|
|
122
|
+
args: entry.defaultArgs || [],
|
|
123
|
+
installedAt: new Date().toISOString(),
|
|
124
|
+
};
|
|
125
|
+
const tools = await this.launchServer(config, entry);
|
|
126
|
+
this.saveConfigs();
|
|
127
|
+
return tools;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Launch an MCP server subprocess and perform tool discovery.
|
|
131
|
+
*/
|
|
132
|
+
async launchServer(config, entry) {
|
|
133
|
+
const cmd = config.npmPackage ? 'npx' : 'pip';
|
|
134
|
+
const args = config.npmPackage
|
|
135
|
+
? ['-y', config.npmPackage, ...config.args]
|
|
136
|
+
: ['run', config.pipPackage, ...config.args];
|
|
137
|
+
const env = { ...process.env, ...config.envVars };
|
|
138
|
+
const child = (0, child_process_1.spawn)(cmd, args, {
|
|
139
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
140
|
+
env,
|
|
141
|
+
});
|
|
142
|
+
const instance = {
|
|
143
|
+
config,
|
|
144
|
+
entry,
|
|
145
|
+
process: child,
|
|
146
|
+
tools: [],
|
|
147
|
+
ready: false,
|
|
148
|
+
requestId: 0,
|
|
149
|
+
pendingRequests: new Map(),
|
|
150
|
+
};
|
|
151
|
+
this.servers.set(config.id, instance);
|
|
152
|
+
// Set up JSON-RPC reader on stdout
|
|
153
|
+
const rl = readline.createInterface({ input: child.stdout });
|
|
154
|
+
rl.on('line', (line) => {
|
|
155
|
+
try {
|
|
156
|
+
const msg = JSON.parse(line);
|
|
157
|
+
if (msg.id !== undefined && instance.pendingRequests.has(msg.id)) {
|
|
158
|
+
const { resolve, reject } = instance.pendingRequests.get(msg.id);
|
|
159
|
+
instance.pendingRequests.delete(msg.id);
|
|
160
|
+
if (msg.error) {
|
|
161
|
+
reject(new Error(msg.error.message || JSON.stringify(msg.error)));
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
resolve(msg.result);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// non-JSON output, ignore
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
child.stderr?.on('data', (data) => {
|
|
173
|
+
const msg = data.toString().trim();
|
|
174
|
+
if (msg)
|
|
175
|
+
console.error(`[MCP:${config.id}] ${msg}`);
|
|
176
|
+
});
|
|
177
|
+
child.on('exit', (code) => {
|
|
178
|
+
console.log(`[MCP] Server ${config.id} exited with code ${code}`);
|
|
179
|
+
this.servers.delete(config.id);
|
|
180
|
+
this.rebuildToolList();
|
|
181
|
+
this.emit('server-stopped', config.id);
|
|
182
|
+
});
|
|
183
|
+
// MCP handshake: initialize
|
|
184
|
+
try {
|
|
185
|
+
await this.sendRequest(instance, 'initialize', {
|
|
186
|
+
protocolVersion: '2024-11-05',
|
|
187
|
+
capabilities: {},
|
|
188
|
+
clientInfo: { name: 'funolio-agent', version: '0.1.0' },
|
|
189
|
+
});
|
|
190
|
+
// Notify initialized
|
|
191
|
+
this.sendNotification(instance, 'notifications/initialized', {});
|
|
192
|
+
// Discover tools
|
|
193
|
+
const toolsResult = await this.sendRequest(instance, 'tools/list', {});
|
|
194
|
+
const tools = (toolsResult?.tools || []).map((t) => ({
|
|
195
|
+
name: `mcp_${config.id}_${t.name}`,
|
|
196
|
+
description: `[MCP:${entry.name}] ${t.description || t.name}`,
|
|
197
|
+
inputSchema: t.inputSchema || {},
|
|
198
|
+
serverId: config.id,
|
|
199
|
+
}));
|
|
200
|
+
instance.tools = tools;
|
|
201
|
+
instance.ready = true;
|
|
202
|
+
this.rebuildToolList();
|
|
203
|
+
console.log(`[MCP] ${entry.name} launched — ${tools.length} tools discovered`);
|
|
204
|
+
this.emit('server-ready', config.id, tools);
|
|
205
|
+
return tools;
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
// Cleanup on handshake failure
|
|
209
|
+
child.kill();
|
|
210
|
+
this.servers.delete(config.id);
|
|
211
|
+
throw new Error(`MCP handshake failed for ${config.id}: ${err.message}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/** Send a JSON-RPC request to an MCP server */
|
|
215
|
+
sendRequest(instance, method, params) {
|
|
216
|
+
return new Promise((resolve, reject) => {
|
|
217
|
+
const id = ++instance.requestId;
|
|
218
|
+
const msg = JSON.stringify({ jsonrpc: '2.0', id, method, params }) + '\n';
|
|
219
|
+
instance.pendingRequests.set(id, { resolve, reject });
|
|
220
|
+
instance.process.stdin.write(msg);
|
|
221
|
+
// Timeout after 30s
|
|
222
|
+
setTimeout(() => {
|
|
223
|
+
if (instance.pendingRequests.has(id)) {
|
|
224
|
+
instance.pendingRequests.delete(id);
|
|
225
|
+
reject(new Error(`MCP request ${method} timed out`));
|
|
226
|
+
}
|
|
227
|
+
}, 30_000);
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/** Send a JSON-RPC notification (no response expected) */
|
|
231
|
+
sendNotification(instance, method, params) {
|
|
232
|
+
const msg = JSON.stringify({ jsonrpc: '2.0', method, params }) + '\n';
|
|
233
|
+
instance.process.stdin.write(msg);
|
|
234
|
+
}
|
|
235
|
+
/** Call a tool on an MCP server */
|
|
236
|
+
async callTool(toolName, args) {
|
|
237
|
+
const tool = this.allDiscoveredTools.find((t) => t.name === toolName);
|
|
238
|
+
if (!tool)
|
|
239
|
+
throw new Error(`MCP tool not found: ${toolName}`);
|
|
240
|
+
const instance = this.servers.get(tool.serverId);
|
|
241
|
+
if (!instance || !instance.ready)
|
|
242
|
+
throw new Error(`MCP server ${tool.serverId} not running`);
|
|
243
|
+
// Strip the mcp_{serverId}_ prefix to get the original tool name
|
|
244
|
+
const originalName = toolName.replace(`mcp_${tool.serverId}_`, '');
|
|
245
|
+
const result = await this.sendRequest(instance, 'tools/call', {
|
|
246
|
+
name: originalName,
|
|
247
|
+
arguments: args,
|
|
248
|
+
});
|
|
249
|
+
return result;
|
|
250
|
+
}
|
|
251
|
+
/** Rebuild the merged list of all discovered tools */
|
|
252
|
+
rebuildToolList() {
|
|
253
|
+
this.allDiscoveredTools = [];
|
|
254
|
+
for (const instance of this.servers.values()) {
|
|
255
|
+
if (instance.ready) {
|
|
256
|
+
this.allDiscoveredTools.push(...instance.tools);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/** Get all discovered MCP tools as ToolDefinitions for the agent */
|
|
261
|
+
getToolDefinitions() {
|
|
262
|
+
return this.allDiscoveredTools.map((t) => ({
|
|
263
|
+
name: t.name,
|
|
264
|
+
description: t.description,
|
|
265
|
+
parameters: t.inputSchema,
|
|
266
|
+
execute: async (args, _ctx) => {
|
|
267
|
+
try {
|
|
268
|
+
const result = await this.callTool(t.name, args);
|
|
269
|
+
const output = result?.content
|
|
270
|
+
? result.content.map((c) => c.text || JSON.stringify(c)).join('\n')
|
|
271
|
+
: JSON.stringify(result);
|
|
272
|
+
return {
|
|
273
|
+
tool_call_id: '',
|
|
274
|
+
name: t.name,
|
|
275
|
+
success: !result?.isError,
|
|
276
|
+
output,
|
|
277
|
+
verified: true,
|
|
278
|
+
verification_details: 'MCP tool execution',
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
catch (err) {
|
|
282
|
+
return {
|
|
283
|
+
tool_call_id: '',
|
|
284
|
+
name: t.name,
|
|
285
|
+
success: false,
|
|
286
|
+
output: '',
|
|
287
|
+
error: err.message,
|
|
288
|
+
verified: true,
|
|
289
|
+
verification_details: 'MCP tool execution failed',
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
}));
|
|
294
|
+
}
|
|
295
|
+
/** Get list of running server IDs */
|
|
296
|
+
getRunningServers() {
|
|
297
|
+
return Array.from(this.servers.keys());
|
|
298
|
+
}
|
|
299
|
+
/** Get info about a running server */
|
|
300
|
+
getServerInfo(id) {
|
|
301
|
+
const instance = this.servers.get(id);
|
|
302
|
+
if (!instance)
|
|
303
|
+
return null;
|
|
304
|
+
return {
|
|
305
|
+
entry: instance.entry,
|
|
306
|
+
tools: instance.tools,
|
|
307
|
+
alwaysOn: instance.config.alwaysOn,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
/** Stop a running MCP server */
|
|
311
|
+
async stopServer(id) {
|
|
312
|
+
const instance = this.servers.get(id);
|
|
313
|
+
if (!instance)
|
|
314
|
+
return;
|
|
315
|
+
instance.process.kill();
|
|
316
|
+
this.servers.delete(id);
|
|
317
|
+
this.rebuildToolList();
|
|
318
|
+
this.saveConfigs();
|
|
319
|
+
}
|
|
320
|
+
/** Set always-on flag for a server */
|
|
321
|
+
setAlwaysOn(id, alwaysOn) {
|
|
322
|
+
const instance = this.servers.get(id);
|
|
323
|
+
if (instance) {
|
|
324
|
+
instance.config.alwaysOn = alwaysOn;
|
|
325
|
+
this.saveConfigs();
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
/** Shutdown all MCP servers */
|
|
329
|
+
async shutdown() {
|
|
330
|
+
for (const [id, instance] of this.servers) {
|
|
331
|
+
instance.process.kill();
|
|
332
|
+
}
|
|
333
|
+
this.servers.clear();
|
|
334
|
+
this.allDiscoveredTools = [];
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
exports.MCPManager = MCPManager;
|
|
338
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,iDAAoD;AACpD,uCAAyB;AACzB,2CAA6B;AAC7B,mDAAqC;AACrC,mCAAsC;AACtC,sCAAyC;AACzC,yCAAmF;AAkCnF;;GAEG;AACH,MAAa,UAAW,SAAQ,qBAAY;IAClC,OAAO,GAAmC,IAAI,GAAG,EAAE,CAAC;IACpD,UAAU,CAAS;IACnB,kBAAkB,GAAwB,EAAE,CAAC;IAErD;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAA,qBAAY,GAAE,EAAE,kBAAkB,CAAC,CAAC;IAClE,CAAC;IAED,wCAAwC;IACxC,oBAAoB;QAClB,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,2BAA2B;IACnB,WAAW;QACjB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAEnD,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,2BAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/D,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACzC,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,OAAO,CAAC,KAAK,CAAC,+BAA+B,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,KAAa;QAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,OAAO,IAAA,8BAAmB,EAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,KAAqB,EACrB,UAAkC,EAAE,EACpC,WAAoB,KAAK;QAEzB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAE,CAAC,KAAK,CAAC;QAC3C,CAAC;QAED,MAAM,MAAM,GAAoB;YAC9B,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,QAAQ;YACR,OAAO;YACP,IAAI,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;YAC7B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,MAAuB,EAAE,KAAqB;QACvE,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU;YAC5B,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;YAC3C,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,UAAW,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAEhD,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAElD,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,GAAG,EAAE,IAAI,EAAE;YAC7B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,GAAG;SACJ,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAsB;YAClC,MAAM;YACN,KAAK;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,KAAK;YACZ,SAAS,EAAE,CAAC;YACZ,eAAe,EAAE,IAAI,GAAG,EAAE;SAC3B,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAEtC,mCAAmC;QACnC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAO,EAAE,CAAC,CAAC;QAC9D,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBACjE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;oBAClE,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACxC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;wBACd,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACpE,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACtB,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,GAAG;gBAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,MAAM,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,EAAE,qBAAqB,IAAI,EAAE,CAAC,CAAC;YAClE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,4BAA4B;QAC5B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE;gBAC7C,eAAe,EAAE,YAAY;gBAC7B,YAAY,EAAE,EAAE;gBAChB,UAAU,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE;aACxD,CAAC,CAAC;YAEH,qBAAqB;YACrB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,2BAA2B,EAAE,EAAE,CAAC,CAAC;YAEjE,iBAAiB;YACjB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;YACvE,MAAM,KAAK,GAAwB,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;gBAC7E,IAAI,EAAE,OAAO,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE;gBAClC,WAAW,EAAE,QAAQ,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,EAAE;gBAC7D,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;gBAChC,QAAQ,EAAE,MAAM,CAAC,EAAE;aACpB,CAAC,CAAC,CAAC;YAEJ,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;YACvB,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,eAAe,KAAK,CAAC,MAAM,mBAAmB,CAAC,CAAC;YAC/E,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAE5C,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,+BAA+B;YAC/B,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,+CAA+C;IACvC,WAAW,CAAC,QAA2B,EAAE,MAAc,EAAE,MAAW;QAC1E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;YAE1E,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACtD,QAAQ,CAAC,OAAO,CAAC,KAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEnC,oBAAoB;YACpB,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBACrC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACpC,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,MAAM,YAAY,CAAC,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC,EAAE,MAAM,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC;IAED,0DAA0D;IAClD,gBAAgB,CAAC,QAA2B,EAAE,MAAc,EAAE,MAAW;QAC/E,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;QACtE,QAAQ,CAAC,OAAO,CAAC,KAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,IAA6B;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QAE9D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,QAAQ,cAAc,CAAC,CAAC;QAE7F,iEAAiE;QACjE,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,QAAQ,GAAG,EAAE,EAAE,CAAC,CAAC;QAEnE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE;YAC5D,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,sDAAsD;IAC9C,eAAe;QACrB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,kBAAkB;QAChB,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,UAAU,EAAE,CAAC,CAAC,WAAW;YACzB,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,IAAiB,EAAuB,EAAE;gBACvF,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACjD,MAAM,MAAM,GAAG,MAAM,EAAE,OAAO;wBAC5B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;wBACxE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBAC3B,OAAO;wBACL,YAAY,EAAE,EAAE;wBAChB,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO;wBACzB,MAAM;wBACN,QAAQ,EAAE,IAAI;wBACd,oBAAoB,EAAE,oBAAoB;qBAC3C,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,OAAO;wBACL,YAAY,EAAE,EAAE;wBAChB,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,OAAO,EAAE,KAAK;wBACd,MAAM,EAAE,EAAE;wBACV,KAAK,EAAE,GAAG,CAAC,OAAO;wBAClB,QAAQ,EAAE,IAAI;wBACd,oBAAoB,EAAE,2BAA2B;qBAClD,CAAC;gBACJ,CAAC;YACH,CAAC;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAED,qCAAqC;IACrC,iBAAiB;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,sCAAsC;IACtC,aAAa,CAAC,EAAU;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,OAAO;YACL,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ;SACnC,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,sCAAsC;IACtC,WAAW,CAAC,EAAU,EAAE,QAAiB;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACpC,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,KAAK,CAAC,QAAQ;QACZ,KAAK,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1C,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;IAC/B,CAAC;CACF;AAzTD,gCAyTC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 3J: MCP Registry
|
|
3
|
+
* Curated catalog of known MCP servers with their capabilities.
|
|
4
|
+
*/
|
|
5
|
+
export interface MCPServerEntry {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
npmPackage?: string;
|
|
10
|
+
pipPackage?: string;
|
|
11
|
+
/** Tools this server provides */
|
|
12
|
+
tools: string[];
|
|
13
|
+
/** Capability keywords for auto-suggest matching */
|
|
14
|
+
capabilities: string[];
|
|
15
|
+
/** Trust level: official, community, experimental */
|
|
16
|
+
trustLevel: 'official' | 'community' | 'experimental';
|
|
17
|
+
/** Environment variables needed */
|
|
18
|
+
envVars?: string[];
|
|
19
|
+
/** Default launch args */
|
|
20
|
+
defaultArgs?: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Built-in curated registry of popular MCP servers.
|
|
24
|
+
* This is bundled with the agent and supplemented by remote registry fetch.
|
|
25
|
+
*/
|
|
26
|
+
export declare const BUILTIN_REGISTRY: MCPServerEntry[];
|
|
27
|
+
/**
|
|
28
|
+
* Find MCP servers that match a capability query.
|
|
29
|
+
* Used for auto-suggest when LLM needs a missing capability.
|
|
30
|
+
*/
|
|
31
|
+
export declare function findMatchingServers(query: string, registry?: MCPServerEntry[]): MCPServerEntry[];
|
|
32
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iCAAiC;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,oDAAoD;IACpD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,qDAAqD;IACrD,UAAU,EAAE,UAAU,GAAG,WAAW,GAAG,cAAc,CAAC;IACtD,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,EA+F5C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,cAAc,EAAqB,GAAG,cAAc,EAAE,CAsBlH"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Phase 3J: MCP Registry
|
|
4
|
+
* Curated catalog of known MCP servers with their capabilities.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.BUILTIN_REGISTRY = void 0;
|
|
8
|
+
exports.findMatchingServers = findMatchingServers;
|
|
9
|
+
/**
|
|
10
|
+
* Built-in curated registry of popular MCP servers.
|
|
11
|
+
* This is bundled with the agent and supplemented by remote registry fetch.
|
|
12
|
+
*/
|
|
13
|
+
exports.BUILTIN_REGISTRY = [
|
|
14
|
+
{
|
|
15
|
+
id: 'playwright',
|
|
16
|
+
name: 'Playwright MCP',
|
|
17
|
+
description: 'Browser automation — navigate, click, screenshot, scrape web pages',
|
|
18
|
+
npmPackage: '@anthropic/mcp-server-playwright',
|
|
19
|
+
tools: ['browser_navigate', 'browser_click', 'browser_screenshot', 'browser_fill', 'browser_evaluate'],
|
|
20
|
+
capabilities: ['browser', 'web', 'screenshot', 'scrape', 'navigate', 'click', 'automation'],
|
|
21
|
+
trustLevel: 'official',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
id: 'postgres',
|
|
25
|
+
name: 'PostgreSQL MCP',
|
|
26
|
+
description: 'Query PostgreSQL databases — run SQL, inspect schema, list tables',
|
|
27
|
+
npmPackage: '@anthropic/mcp-server-postgres',
|
|
28
|
+
tools: ['query', 'describe_table', 'list_tables', 'get_schema'],
|
|
29
|
+
capabilities: ['database', 'sql', 'postgres', 'postgresql', 'query', 'schema', 'tables'],
|
|
30
|
+
trustLevel: 'official',
|
|
31
|
+
envVars: ['DATABASE_URL'],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
id: 'filesystem',
|
|
35
|
+
name: 'Filesystem MCP',
|
|
36
|
+
description: 'Extended filesystem operations — search, glob, watch files',
|
|
37
|
+
npmPackage: '@anthropic/mcp-server-filesystem',
|
|
38
|
+
tools: ['search_files', 'glob', 'watch_file', 'get_file_info'],
|
|
39
|
+
capabilities: ['files', 'filesystem', 'search', 'glob', 'watch'],
|
|
40
|
+
trustLevel: 'official',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: 'github',
|
|
44
|
+
name: 'GitHub MCP',
|
|
45
|
+
description: 'GitHub API — repos, issues, PRs, actions, code search',
|
|
46
|
+
npmPackage: '@anthropic/mcp-server-github',
|
|
47
|
+
tools: ['list_repos', 'create_issue', 'search_code', 'get_pull_request', 'list_actions'],
|
|
48
|
+
capabilities: ['github', 'git', 'issues', 'pull-request', 'pr', 'repos', 'actions'],
|
|
49
|
+
trustLevel: 'official',
|
|
50
|
+
envVars: ['GITHUB_TOKEN'],
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: 'slack',
|
|
54
|
+
name: 'Slack MCP',
|
|
55
|
+
description: 'Slack integration — send messages, read channels, manage threads',
|
|
56
|
+
npmPackage: '@anthropic/mcp-server-slack',
|
|
57
|
+
tools: ['send_message', 'read_channel', 'list_channels', 'reply_thread'],
|
|
58
|
+
capabilities: ['slack', 'chat', 'messaging', 'channels', 'threads'],
|
|
59
|
+
trustLevel: 'official',
|
|
60
|
+
envVars: ['SLACK_BOT_TOKEN'],
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: 'notion',
|
|
64
|
+
name: 'Notion MCP',
|
|
65
|
+
description: 'Notion workspace — read/write pages, databases, search',
|
|
66
|
+
npmPackage: '@anthropic/mcp-server-notion',
|
|
67
|
+
tools: ['search_pages', 'read_page', 'create_page', 'query_database'],
|
|
68
|
+
capabilities: ['notion', 'notes', 'wiki', 'docs', 'documentation', 'pages'],
|
|
69
|
+
trustLevel: 'community',
|
|
70
|
+
envVars: ['NOTION_API_KEY'],
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: 'docker',
|
|
74
|
+
name: 'Docker MCP',
|
|
75
|
+
description: 'Docker container management — run, stop, logs, build images',
|
|
76
|
+
npmPackage: '@anthropic/mcp-server-docker',
|
|
77
|
+
tools: ['docker_run', 'docker_stop', 'docker_logs', 'docker_build', 'docker_ps'],
|
|
78
|
+
capabilities: ['docker', 'container', 'containers', 'devops', 'deploy'],
|
|
79
|
+
trustLevel: 'community',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
id: 'sqlite',
|
|
83
|
+
name: 'SQLite MCP',
|
|
84
|
+
description: 'SQLite database access — query, schema inspection',
|
|
85
|
+
npmPackage: '@anthropic/mcp-server-sqlite',
|
|
86
|
+
tools: ['query', 'describe_table', 'list_tables'],
|
|
87
|
+
capabilities: ['sqlite', 'database', 'sql', 'local-db'],
|
|
88
|
+
trustLevel: 'official',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
id: 'puppeteer',
|
|
92
|
+
name: 'Puppeteer MCP',
|
|
93
|
+
description: 'Headless Chrome automation via Puppeteer',
|
|
94
|
+
npmPackage: '@anthropic/mcp-server-puppeteer',
|
|
95
|
+
tools: ['navigate', 'screenshot', 'click', 'type', 'evaluate'],
|
|
96
|
+
capabilities: ['browser', 'puppeteer', 'chrome', 'headless', 'scrape'],
|
|
97
|
+
trustLevel: 'community',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
id: 'memory',
|
|
101
|
+
name: 'Memory MCP',
|
|
102
|
+
description: 'Persistent key-value memory for the agent across sessions',
|
|
103
|
+
npmPackage: '@anthropic/mcp-server-memory',
|
|
104
|
+
tools: ['store', 'retrieve', 'list_keys', 'delete'],
|
|
105
|
+
capabilities: ['memory', 'persistence', 'storage', 'remember', 'recall'],
|
|
106
|
+
trustLevel: 'official',
|
|
107
|
+
},
|
|
108
|
+
];
|
|
109
|
+
/**
|
|
110
|
+
* Find MCP servers that match a capability query.
|
|
111
|
+
* Used for auto-suggest when LLM needs a missing capability.
|
|
112
|
+
*/
|
|
113
|
+
function findMatchingServers(query, registry = exports.BUILTIN_REGISTRY) {
|
|
114
|
+
const queryLower = query.toLowerCase();
|
|
115
|
+
const queryWords = queryLower.split(/\s+/);
|
|
116
|
+
return registry
|
|
117
|
+
.map((entry) => {
|
|
118
|
+
let score = 0;
|
|
119
|
+
for (const word of queryWords) {
|
|
120
|
+
// Check capabilities
|
|
121
|
+
if (entry.capabilities.some((c) => c.includes(word)))
|
|
122
|
+
score += 3;
|
|
123
|
+
// Check name
|
|
124
|
+
if (entry.name.toLowerCase().includes(word))
|
|
125
|
+
score += 2;
|
|
126
|
+
// Check description
|
|
127
|
+
if (entry.description.toLowerCase().includes(word))
|
|
128
|
+
score += 1;
|
|
129
|
+
// Check tool names
|
|
130
|
+
if (entry.tools.some((t) => t.includes(word)))
|
|
131
|
+
score += 2;
|
|
132
|
+
}
|
|
133
|
+
return { entry, score };
|
|
134
|
+
})
|
|
135
|
+
.filter(({ score }) => score > 0)
|
|
136
|
+
.sort((a, b) => b.score - a.score)
|
|
137
|
+
.map(({ entry }) => entry);
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AgentMqttClient, AgentCommand } from './mqtt-client';
|
|
2
|
+
export interface MessageLoopOptions {
|
|
3
|
+
provider: string;
|
|
4
|
+
model: string;
|
|
5
|
+
apiKey: string;
|
|
6
|
+
projectDir: string;
|
|
7
|
+
userId: string;
|
|
8
|
+
mqttClient: AgentMqttClient;
|
|
9
|
+
}
|
|
10
|
+
export declare class MessageLoop {
|
|
11
|
+
private options;
|
|
12
|
+
private llmProvider;
|
|
13
|
+
private activeCommandId;
|
|
14
|
+
constructor(options: MessageLoopOptions);
|
|
15
|
+
handleCommand(command: AgentCommand): Promise<void>;
|
|
16
|
+
private publishError;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=message-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-loop.d.ts","sourceRoot":"","sources":["../src/message-loop.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAe,MAAM,eAAe,CAAC;AAG3E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,eAAe,CAAC;CAC7B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,eAAe,CAAuB;gBAElC,OAAO,EAAE,kBAAkB;IAQjC,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YA2J3C,YAAY;CAQ3B"}
|