kaze-cli 2.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.
Files changed (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +224 -0
  3. package/dist/api/client.d.ts +15 -0
  4. package/dist/api/client.d.ts.map +1 -0
  5. package/dist/api/client.js +129 -0
  6. package/dist/api/client.js.map +1 -0
  7. package/dist/api/universal-client.d.ts +36 -0
  8. package/dist/api/universal-client.d.ts.map +1 -0
  9. package/dist/api/universal-client.js +184 -0
  10. package/dist/api/universal-client.js.map +1 -0
  11. package/dist/cli/config-command.d.ts +29 -0
  12. package/dist/cli/config-command.d.ts.map +1 -0
  13. package/dist/cli/config-command.js +458 -0
  14. package/dist/cli/config-command.js.map +1 -0
  15. package/dist/cli/repl.d.ts +98 -0
  16. package/dist/cli/repl.d.ts.map +1 -0
  17. package/dist/cli/repl.js +1782 -0
  18. package/dist/cli/repl.js.map +1 -0
  19. package/dist/config/interactive-setup.d.ts +26 -0
  20. package/dist/config/interactive-setup.d.ts.map +1 -0
  21. package/dist/config/interactive-setup.js +308 -0
  22. package/dist/config/interactive-setup.js.map +1 -0
  23. package/dist/config/manager.d.ts +125 -0
  24. package/dist/config/manager.d.ts.map +1 -0
  25. package/dist/config/manager.js +240 -0
  26. package/dist/config/manager.js.map +1 -0
  27. package/dist/config/setup.d.ts +29 -0
  28. package/dist/config/setup.d.ts.map +1 -0
  29. package/dist/config/setup.js +442 -0
  30. package/dist/config/setup.js.map +1 -0
  31. package/dist/context/memory.d.ts +65 -0
  32. package/dist/context/memory.d.ts.map +1 -0
  33. package/dist/context/memory.js +215 -0
  34. package/dist/context/memory.js.map +1 -0
  35. package/dist/index.d.ts +2 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +207 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/mcp/client.d.ts +38 -0
  40. package/dist/mcp/client.d.ts.map +1 -0
  41. package/dist/mcp/client.js +288 -0
  42. package/dist/mcp/client.js.map +1 -0
  43. package/dist/mcp/manager.d.ts +43 -0
  44. package/dist/mcp/manager.d.ts.map +1 -0
  45. package/dist/mcp/manager.js +230 -0
  46. package/dist/mcp/manager.js.map +1 -0
  47. package/dist/mcp/types.d.ts +106 -0
  48. package/dist/mcp/types.d.ts.map +1 -0
  49. package/dist/mcp/types.js +3 -0
  50. package/dist/mcp/types.js.map +1 -0
  51. package/dist/personality/manager.d.ts +24 -0
  52. package/dist/personality/manager.d.ts.map +1 -0
  53. package/dist/personality/manager.js +217 -0
  54. package/dist/personality/manager.js.map +1 -0
  55. package/dist/tools/codebase.d.ts +34 -0
  56. package/dist/tools/codebase.d.ts.map +1 -0
  57. package/dist/tools/codebase.js +291 -0
  58. package/dist/tools/codebase.js.map +1 -0
  59. package/dist/tools/filesystem.d.ts +41 -0
  60. package/dist/tools/filesystem.d.ts.map +1 -0
  61. package/dist/tools/filesystem.js +263 -0
  62. package/dist/tools/filesystem.js.map +1 -0
  63. package/dist/tools/terminal.d.ts +30 -0
  64. package/dist/tools/terminal.d.ts.map +1 -0
  65. package/dist/tools/terminal.js +217 -0
  66. package/dist/tools/terminal.js.map +1 -0
  67. package/dist/tools/todo.d.ts +58 -0
  68. package/dist/tools/todo.d.ts.map +1 -0
  69. package/dist/tools/todo.js +233 -0
  70. package/dist/tools/todo.js.map +1 -0
  71. package/dist/types/index.d.ts +104 -0
  72. package/dist/types/index.d.ts.map +1 -0
  73. package/dist/types/index.js +3 -0
  74. package/dist/types/index.js.map +1 -0
  75. package/dist/types/personality.d.ts +21 -0
  76. package/dist/types/personality.d.ts.map +1 -0
  77. package/dist/types/personality.js +3 -0
  78. package/dist/types/personality.js.map +1 -0
  79. package/dist/ui/logger.d.ts +76 -0
  80. package/dist/ui/logger.d.ts.map +1 -0
  81. package/dist/ui/logger.js +488 -0
  82. package/dist/ui/logger.js.map +1 -0
  83. package/dist/ui/renderer.d.ts +52 -0
  84. package/dist/ui/renderer.d.ts.map +1 -0
  85. package/dist/ui/renderer.js +294 -0
  86. package/dist/ui/renderer.js.map +1 -0
  87. package/dist/ui/tui.d.ts +53 -0
  88. package/dist/ui/tui.d.ts.map +1 -0
  89. package/dist/ui/tui.js +131 -0
  90. package/dist/ui/tui.js.map +1 -0
  91. package/package.json +70 -0
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MCPClient = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const readline_1 = require("readline");
6
+ const logger_1 = require("../ui/logger");
7
+ class MCPClient {
8
+ connections = new Map();
9
+ requestId = 1;
10
+ pendingRequests = new Map();
11
+ logger;
12
+ capabilities = {};
13
+ silentMode = false;
14
+ constructor(logger) {
15
+ this.logger = logger || new logger_1.Logger({ level: 1 });
16
+ }
17
+ setSilentMode(silent) {
18
+ this.silentMode = silent;
19
+ }
20
+ async connect(config) {
21
+ const existing = this.connections.get(config.name);
22
+ if (existing?.connected) {
23
+ return existing;
24
+ }
25
+ let connection;
26
+ if (config.transport === 'stdio') {
27
+ connection = await this.connectStdio(config);
28
+ }
29
+ else if (config.transport === 'sse') {
30
+ if (!config.url) {
31
+ throw new Error('URL is required for SSE transport');
32
+ }
33
+ connection = await this.connectSSE(config);
34
+ }
35
+ else {
36
+ throw new Error(`Unsupported transport: ${config.transport}`);
37
+ }
38
+ await this.initialize(connection);
39
+ this.connections.set(config.name, connection);
40
+ return connection;
41
+ }
42
+ async connectStdio(config) {
43
+ if (!config.command) {
44
+ throw new Error('Command is required for stdio transport');
45
+ }
46
+ const parts = config.command.split(' ');
47
+ const executable = parts[0];
48
+ const commandArgs = parts.slice(1);
49
+ const allArgs = [...commandArgs, ...(config.args || [])];
50
+ const mcpProcess = (0, child_process_1.spawn)(executable, allArgs, {
51
+ env: { ...process.env, ...config.env },
52
+ stdio: ['pipe', 'pipe', 'pipe']
53
+ });
54
+ const connection = {
55
+ config,
56
+ connected: false,
57
+ process: mcpProcess
58
+ };
59
+ const rl = (0, readline_1.createInterface)({
60
+ input: mcpProcess.stdout,
61
+ output: mcpProcess.stdin,
62
+ crlfDelay: Infinity
63
+ });
64
+ mcpProcess.stderr.on('data', (data) => {
65
+ this.logger.debug(`MCP stderr [${config.name}]: ${data.toString().trim()}`);
66
+ });
67
+ mcpProcess.on('error', (error) => {
68
+ this.logger.error(`MCP process error [${config.name}]: ${error.message}`);
69
+ connection.connected = false;
70
+ });
71
+ mcpProcess.on('exit', (code, signal) => {
72
+ if (!this.silentMode) {
73
+ this.logger.warning(`MCP process exited [${config.name}]: code=${code}, signal=${signal}`);
74
+ }
75
+ connection.connected = false;
76
+ });
77
+ connection['rl'] = rl;
78
+ return connection;
79
+ }
80
+ async connectSSE(config) {
81
+ throw new Error('SSE transport not yet implemented');
82
+ }
83
+ async initialize(connection) {
84
+ const initParams = {
85
+ protocolVersion: '2025-11-25',
86
+ capabilities: this.capabilities,
87
+ clientInfo: {
88
+ name: 'kaze-cli',
89
+ version: '2.0.0'
90
+ }
91
+ };
92
+ const result = await this.sendRequest(connection, 'initialize', initParams);
93
+ connection.capabilities = result.capabilities || {};
94
+ connection.connected = true;
95
+ await this.sendNotification(connection, 'notifications/initialized');
96
+ }
97
+ async disconnect(serverName) {
98
+ const connection = this.connections.get(serverName);
99
+ if (!connection) {
100
+ return;
101
+ }
102
+ connection.connected = false;
103
+ if (connection.process) {
104
+ connection.process.kill();
105
+ }
106
+ if (connection['rl']) {
107
+ connection['rl'].close();
108
+ }
109
+ this.connections.delete(serverName);
110
+ }
111
+ async disconnectAll() {
112
+ const serverNames = Array.from(this.connections.keys());
113
+ await Promise.all(serverNames.map(name => this.disconnect(name)));
114
+ }
115
+ async listTools(serverName) {
116
+ const connection = this.getConnection(serverName);
117
+ const result = await this.sendRequest(connection, 'tools/list');
118
+ const tools = result.tools || [];
119
+ connection.tools = tools;
120
+ return tools;
121
+ }
122
+ async callTool(serverName, toolName, args) {
123
+ const connection = this.getConnection(serverName);
124
+ const result = await this.sendRequest(connection, 'tools/call', {
125
+ name: toolName,
126
+ arguments: args
127
+ });
128
+ return result;
129
+ }
130
+ async listResources(serverName) {
131
+ const connection = this.getConnection(serverName);
132
+ const result = await this.sendRequest(connection, 'resources/list');
133
+ const resources = result.resources || [];
134
+ connection.resources = resources;
135
+ return resources;
136
+ }
137
+ async readResource(serverName, uri) {
138
+ const connection = this.getConnection(serverName);
139
+ const result = await this.sendRequest(connection, 'resources/read', { uri });
140
+ return result.contents[0];
141
+ }
142
+ async listPrompts(serverName) {
143
+ const connection = this.getConnection(serverName);
144
+ const result = await this.sendRequest(connection, 'prompts/list');
145
+ const prompts = result.prompts || [];
146
+ connection.prompts = prompts;
147
+ return prompts;
148
+ }
149
+ async getPrompt(serverName, promptName, args) {
150
+ const connection = this.getConnection(serverName);
151
+ const result = await this.sendRequest(connection, 'prompts/get', {
152
+ name: promptName,
153
+ arguments: args
154
+ });
155
+ return result;
156
+ }
157
+ async getAllTools() {
158
+ const toolsMap = new Map();
159
+ for (const [name, connection] of this.connections.entries()) {
160
+ if (connection.connected && connection.tools) {
161
+ toolsMap.set(name, connection.tools);
162
+ }
163
+ else if (connection.connected) {
164
+ try {
165
+ const tools = await this.listTools(name);
166
+ toolsMap.set(name, tools);
167
+ }
168
+ catch (error) {
169
+ this.logger.error(`Failed to list tools for ${name}: ${error}`);
170
+ }
171
+ }
172
+ }
173
+ return toolsMap;
174
+ }
175
+ async callToolAny(toolName, args) {
176
+ for (const [name, connection] of this.connections.entries()) {
177
+ if (!connection.connected) {
178
+ continue;
179
+ }
180
+ if (connection.tools?.some(t => t.name === toolName)) {
181
+ const result = await this.callTool(name, toolName, args);
182
+ return { serverName: name, result };
183
+ }
184
+ }
185
+ throw new Error(`Tool "${toolName}" not found in any connected MCP server`);
186
+ }
187
+ getConnection(serverName) {
188
+ const connection = this.connections.get(serverName);
189
+ if (!connection || !connection.connected) {
190
+ throw new Error(`Not connected to MCP server: ${serverName}`);
191
+ }
192
+ return connection;
193
+ }
194
+ async sendRequest(connection, method, params) {
195
+ const id = this.requestId++;
196
+ const request = {
197
+ jsonrpc: '2.0',
198
+ id,
199
+ method,
200
+ params
201
+ };
202
+ return new Promise((resolve, reject) => {
203
+ const timeout = setTimeout(() => {
204
+ this.pendingRequests.delete(id);
205
+ reject(new Error(`Request timeout: ${method}`));
206
+ }, 30000);
207
+ this.pendingRequests.set(id, { resolve, reject, timeout });
208
+ if (connection.config.transport === 'stdio' && connection['rl']) {
209
+ connection['rl'].output.write(JSON.stringify(request) + '\n');
210
+ this.setupMessageHandler(connection);
211
+ }
212
+ else {
213
+ reject(new Error('Transport not supported'));
214
+ }
215
+ });
216
+ }
217
+ async sendNotification(connection, method, params) {
218
+ const notification = {
219
+ jsonrpc: '2.0',
220
+ method,
221
+ params
222
+ };
223
+ if (connection.config.transport === 'stdio' && connection['rl']) {
224
+ connection['rl'].output.write(JSON.stringify(notification) + '\n');
225
+ }
226
+ }
227
+ setupMessageHandler(connection) {
228
+ if (connection['messageHandlerSet']) {
229
+ return;
230
+ }
231
+ connection['rl'].on('line', (line) => {
232
+ try {
233
+ const message = JSON.parse(line.trim());
234
+ this.handleMessage(connection, message);
235
+ }
236
+ catch (error) {
237
+ this.logger.error(`Failed to parse MCP message: ${error}`);
238
+ }
239
+ });
240
+ connection['messageHandlerSet'] = true;
241
+ }
242
+ handleMessage(connection, message) {
243
+ if ('id' in message && 'result' in message) {
244
+ const pending = this.pendingRequests.get(message.id);
245
+ if (pending) {
246
+ clearTimeout(pending.timeout);
247
+ this.pendingRequests.delete(message.id);
248
+ pending.resolve(message.result);
249
+ }
250
+ }
251
+ else if ('id' in message && 'error' in message) {
252
+ const pending = this.pendingRequests.get(message.id);
253
+ if (pending) {
254
+ clearTimeout(pending.timeout);
255
+ this.pendingRequests.delete(message.id);
256
+ pending.reject(new Error(message.error?.message || 'Unknown error'));
257
+ }
258
+ }
259
+ else if ('method' in message) {
260
+ this.handleNotification(connection, message);
261
+ }
262
+ }
263
+ handleNotification(connection, message) {
264
+ const method = message.method;
265
+ switch (method) {
266
+ case 'notifications/tools/list_changed':
267
+ this.logger.debug(`Tools list changed for ${connection.config.name}`);
268
+ break;
269
+ case 'notifications/resources/list_changed':
270
+ this.logger.debug(`Resources list changed for ${connection.config.name}`);
271
+ break;
272
+ case 'notifications/prompts/list_changed':
273
+ this.logger.debug(`Prompts list changed for ${connection.config.name}`);
274
+ break;
275
+ default:
276
+ this.logger.debug(`Unhandled notification: ${method}`);
277
+ }
278
+ }
279
+ getConnections() {
280
+ return new Map(this.connections);
281
+ }
282
+ isConnected(serverName) {
283
+ const connection = this.connections.get(serverName);
284
+ return connection?.connected || false;
285
+ }
286
+ }
287
+ exports.MCPClient = MCPClient;
288
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { Logger } from '../ui/logger';
2
+ import { ConfigManager } from '../config/manager';
3
+ import { MCPClient } from './client';
4
+ import { MCPServerConfig, MCPTool, MCPResource, MCPPrompt } from './types';
5
+ export interface MCPManagerConfig {
6
+ configDir: string;
7
+ configManager: ConfigManager;
8
+ logger?: Logger;
9
+ }
10
+ export declare class MCPManager {
11
+ private client;
12
+ private configManager;
13
+ private logger;
14
+ private configDir;
15
+ private servers;
16
+ constructor(config: MCPManagerConfig);
17
+ initialize(): Promise<void>;
18
+ addServer(config: MCPServerConfig): Promise<void>;
19
+ removeServer(name: string): Promise<boolean>;
20
+ connectServer(name: string): Promise<void>;
21
+ disconnectServer(name: string): Promise<void>;
22
+ connectAll(): Promise<void>;
23
+ connectAllSilent(): Promise<void>;
24
+ disconnectAll(): Promise<void>;
25
+ enableServer(name: string): Promise<void>;
26
+ disableServer(name: string): Promise<void>;
27
+ listServers(): Promise<MCPServerConfig[]>;
28
+ listTools(serverName?: string): Promise<Map<string, MCPTool[]>>;
29
+ callTool(serverName: string, toolName: string, args: Record<string, any>): Promise<any>;
30
+ listResources(serverName?: string): Promise<Map<string, MCPResource[]>>;
31
+ listPrompts(serverName?: string): Promise<Map<string, MCPPrompt[]>>;
32
+ getClient(): MCPClient;
33
+ isConnected(name: string): boolean;
34
+ private saveServerConfig;
35
+ private removeServerConfig;
36
+ getServerStatus(): Promise<Array<{
37
+ name: string;
38
+ connected: boolean;
39
+ transport: string;
40
+ disabled: boolean;
41
+ }>>;
42
+ }
43
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EACL,eAAe,EAEf,OAAO,EACP,WAAW,EACX,SAAS,EACV,MAAM,SAAS,CAAC;AACjB,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AACD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAA2C;gBAC9C,MAAM,EAAE,gBAAgB;IAM9B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU5C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAG7C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAG9B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASzC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1C,WAAW,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAGzC,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAS/D,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,OAAO,CAAC,GAAG,CAAC;IAQT,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAwBvE,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAwBzE,SAAS,IAAI,SAAS;IAGtB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;YAGpB,gBAAgB;YAkBhB,kBAAkB;IAU1B,eAAe,IAAI,OAAO,CAAC,KAAK,CAAC;QACrC,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;CAYJ"}
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MCPManager = void 0;
4
+ const logger_1 = require("../ui/logger");
5
+ const client_1 = require("./client");
6
+ class MCPManager {
7
+ client;
8
+ configManager;
9
+ logger;
10
+ configDir;
11
+ servers = new Map();
12
+ constructor(config) {
13
+ this.configDir = config.configDir;
14
+ this.configManager = config.configManager;
15
+ this.logger = config.logger || new logger_1.Logger({ level: 1 });
16
+ this.client = new client_1.MCPClient(this.logger);
17
+ }
18
+ async initialize() {
19
+ const config = await this.configManager.loadConfig('mcp.json', {
20
+ servers: [],
21
+ autoConnect: true
22
+ });
23
+ const servers = config.servers || [];
24
+ for (const server of servers) {
25
+ if (!server.disabled) {
26
+ this.servers.set(server.name, server);
27
+ }
28
+ }
29
+ }
30
+ async addServer(config) {
31
+ await this.saveServerConfig(config);
32
+ this.servers.set(config.name, config);
33
+ this.logger.success(`MCP server added: ${config.name}`);
34
+ }
35
+ async removeServer(name) {
36
+ const existed = this.servers.has(name);
37
+ if (this.client.isConnected(name)) {
38
+ await this.client.disconnect(name);
39
+ }
40
+ this.servers.delete(name);
41
+ await this.removeServerConfig(name);
42
+ this.logger.success(`MCP server removed: ${name}`);
43
+ return existed;
44
+ }
45
+ async connectServer(name) {
46
+ const config = this.servers.get(name);
47
+ if (!config) {
48
+ throw new Error(`MCP server not found: ${name}`);
49
+ }
50
+ if (config.disabled) {
51
+ throw new Error(`MCP server is disabled: ${name}`);
52
+ }
53
+ await this.client.connect(config);
54
+ }
55
+ async disconnectServer(name) {
56
+ await this.client.disconnect(name);
57
+ }
58
+ async connectAll() {
59
+ const promises = Array.from(this.servers.values())
60
+ .filter(config => !config.disabled)
61
+ .map(async (config) => {
62
+ try {
63
+ await this.client.connect(config);
64
+ }
65
+ catch (error) {
66
+ const errorMsg = error instanceof Error ? error.message : String(error);
67
+ this.logger.warning(`Failed to connect to ${config.name}: ${errorMsg}`);
68
+ }
69
+ });
70
+ await Promise.all(promises);
71
+ }
72
+ async connectAllSilent() {
73
+ this.client.setSilentMode(true);
74
+ const promises = Array.from(this.servers.values())
75
+ .filter(config => !config.disabled)
76
+ .map(async (config) => {
77
+ try {
78
+ await this.client.connect(config);
79
+ }
80
+ catch (error) {
81
+ }
82
+ });
83
+ await Promise.all(promises);
84
+ this.client.setSilentMode(false);
85
+ }
86
+ async disconnectAll() {
87
+ await this.client.disconnectAll();
88
+ }
89
+ async enableServer(name) {
90
+ const config = this.servers.get(name);
91
+ if (!config) {
92
+ throw new Error(`MCP server not found: ${name}`);
93
+ }
94
+ config.disabled = false;
95
+ await this.saveServerConfig(config);
96
+ this.logger.success(`MCP server enabled: ${name}`);
97
+ }
98
+ async disableServer(name) {
99
+ const config = this.servers.get(name);
100
+ if (!config) {
101
+ throw new Error(`MCP server not found: ${name}`);
102
+ }
103
+ if (this.client.isConnected(name)) {
104
+ await this.client.disconnect(name);
105
+ }
106
+ config.disabled = true;
107
+ await this.saveServerConfig(config);
108
+ this.logger.success(`MCP server disabled: ${name}`);
109
+ }
110
+ async listServers() {
111
+ return Array.from(this.servers.values());
112
+ }
113
+ async listTools(serverName) {
114
+ if (serverName) {
115
+ const tools = await this.client.listTools(serverName);
116
+ const map = new Map();
117
+ map.set(serverName, tools);
118
+ return map;
119
+ }
120
+ return await this.client.getAllTools();
121
+ }
122
+ async callTool(serverName, toolName, args) {
123
+ try {
124
+ return await this.client.callTool(serverName, toolName, args);
125
+ }
126
+ catch (error) {
127
+ this.logger.error(`Error calling tool ${toolName} on ${serverName}: ${error instanceof Error ? error.message : String(error)}`);
128
+ return { error: error instanceof Error ? error.message : String(error) };
129
+ }
130
+ }
131
+ async listResources(serverName) {
132
+ const map = new Map();
133
+ if (serverName) {
134
+ try {
135
+ const resources = await this.client.listResources(serverName);
136
+ map.set(serverName, resources);
137
+ }
138
+ catch (error) {
139
+ this.logger.warning(`Failed to list resources for ${serverName}: ${error instanceof Error ? error.message : String(error)}`);
140
+ }
141
+ return map;
142
+ }
143
+ for (const [name, config] of this.servers.entries()) {
144
+ if (config.disabled || !this.client.isConnected(name)) {
145
+ continue;
146
+ }
147
+ try {
148
+ const resources = await this.client.listResources(name);
149
+ map.set(name, resources);
150
+ }
151
+ catch (error) {
152
+ this.logger.warning(`Failed to list resources for ${name}: ${error instanceof Error ? error.message : String(error)}`);
153
+ }
154
+ }
155
+ return map;
156
+ }
157
+ async listPrompts(serverName) {
158
+ const map = new Map();
159
+ if (serverName) {
160
+ try {
161
+ const prompts = await this.client.listPrompts(serverName);
162
+ map.set(serverName, prompts);
163
+ }
164
+ catch (error) {
165
+ this.logger.warning(`Failed to list prompts for ${serverName}: ${error instanceof Error ? error.message : String(error)}`);
166
+ }
167
+ return map;
168
+ }
169
+ for (const [name, config] of this.servers.entries()) {
170
+ if (config.disabled || !this.client.isConnected(name)) {
171
+ continue;
172
+ }
173
+ try {
174
+ const prompts = await this.client.listPrompts(name);
175
+ map.set(name, prompts);
176
+ }
177
+ catch (error) {
178
+ this.logger.warning(`Failed to list prompts for ${name}: ${error instanceof Error ? error.message : String(error)}`);
179
+ }
180
+ }
181
+ return map;
182
+ }
183
+ getClient() {
184
+ return this.client;
185
+ }
186
+ isConnected(name) {
187
+ return this.client.isConnected(name);
188
+ }
189
+ async saveServerConfig(config) {
190
+ const mcpConfig = await this.configManager.loadConfig('mcp.json', {
191
+ servers: [],
192
+ autoConnect: true
193
+ });
194
+ if (!mcpConfig.servers) {
195
+ mcpConfig.servers = [];
196
+ }
197
+ const existingIndex = mcpConfig.servers.findIndex((s) => s.name === config.name);
198
+ if (existingIndex >= 0) {
199
+ mcpConfig.servers[existingIndex] = config;
200
+ }
201
+ else {
202
+ mcpConfig.servers.push(config);
203
+ }
204
+ await this.configManager.saveConfig('mcp.json', mcpConfig);
205
+ }
206
+ async removeServerConfig(name) {
207
+ const mcpConfig = await this.configManager.loadConfig('mcp.json', {
208
+ servers: [],
209
+ autoConnect: true
210
+ });
211
+ if (mcpConfig.servers) {
212
+ mcpConfig.servers = mcpConfig.servers.filter((s) => s.name !== name);
213
+ }
214
+ await this.configManager.saveConfig('mcp.json', mcpConfig);
215
+ }
216
+ async getServerStatus() {
217
+ const status = [];
218
+ for (const [name, config] of this.servers.entries()) {
219
+ status.push({
220
+ name,
221
+ connected: this.client.isConnected(name),
222
+ transport: config.transport,
223
+ disabled: config.disabled || false
224
+ });
225
+ }
226
+ return status;
227
+ }
228
+ }
229
+ exports.MCPManager = MCPManager;
230
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"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"}