@fractalizer/mcp-cli 0.3.18 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +158 -266
- package/dist/commands/connect.command.d.ts +18 -15
- package/dist/commands/connect.command.d.ts.map +1 -1
- package/dist/commands/connect.command.js +66 -40
- package/dist/commands/connect.command.js.map +1 -1
- package/dist/commands/disconnect.command.d.ts +5 -17
- package/dist/commands/disconnect.command.d.ts.map +1 -1
- package/dist/commands/disconnect.command.js +4 -15
- package/dist/commands/disconnect.command.js.map +1 -1
- package/dist/commands/doctor.command.d.ts +34 -0
- package/dist/commands/doctor.command.d.ts.map +1 -0
- package/dist/commands/doctor.command.js +321 -0
- package/dist/commands/doctor.command.js.map +1 -0
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/list.command.d.ts +4 -9
- package/dist/commands/list.command.d.ts.map +1 -1
- package/dist/commands/list.command.js +1 -5
- package/dist/commands/list.command.js.map +1 -1
- package/dist/commands/status.command.d.ts +6 -13
- package/dist/commands/status.command.d.ts.map +1 -1
- package/dist/commands/status.command.js +15 -12
- package/dist/commands/status.command.js.map +1 -1
- package/dist/commands/validate.command.d.ts +6 -11
- package/dist/commands/validate.command.d.ts.map +1 -1
- package/dist/commands/validate.command.js +15 -19
- package/dist/commands/validate.command.js.map +1 -1
- package/dist/connectors/base/base-connector.d.ts +31 -55
- package/dist/connectors/base/base-connector.d.ts.map +1 -1
- package/dist/connectors/base/base-connector.js +71 -57
- package/dist/connectors/base/base-connector.js.map +1 -1
- package/dist/connectors/base/configurable-connector.d.ts +89 -24
- package/dist/connectors/base/configurable-connector.d.ts.map +1 -1
- package/dist/connectors/base/configurable-connector.js +266 -23
- package/dist/connectors/base/configurable-connector.js.map +1 -1
- package/dist/connectors/base/connector.interface.d.ts +29 -20
- package/dist/connectors/base/connector.interface.d.ts.map +1 -1
- package/dist/connectors/base/index.d.ts +0 -1
- package/dist/connectors/base/index.d.ts.map +1 -1
- package/dist/connectors/base/index.js +0 -1
- package/dist/connectors/base/index.js.map +1 -1
- package/dist/connectors/claude-code/claude-code.connector.d.ts +100 -21
- package/dist/connectors/claude-code/claude-code.connector.d.ts.map +1 -1
- package/dist/connectors/claude-code/claude-code.connector.js +221 -40
- package/dist/connectors/claude-code/claude-code.connector.js.map +1 -1
- package/dist/connectors/connector-factory.d.ts +15 -15
- package/dist/connectors/connector-factory.d.ts.map +1 -1
- package/dist/connectors/connector-factory.js +61 -18
- package/dist/connectors/connector-factory.js.map +1 -1
- package/dist/connectors/index.d.ts +0 -4
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/index.js +2 -8
- package/dist/connectors/index.js.map +1 -1
- package/dist/connectors/registry.d.ts +20 -27
- package/dist/connectors/registry.d.ts.map +1 -1
- package/dist/connectors/registry.js +34 -34
- package/dist/connectors/registry.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/{base.types.d.ts → client.types.d.ts} +30 -30
- package/dist/types/client.types.d.ts.map +1 -0
- package/dist/types/client.types.js +6 -0
- package/dist/types/client.types.js.map +1 -0
- package/dist/types/doctor.types.d.ts +91 -0
- package/dist/types/doctor.types.d.ts.map +1 -0
- package/dist/types/doctor.types.js +12 -0
- package/dist/types/doctor.types.js.map +1 -0
- package/dist/types/launch.types.d.ts +59 -0
- package/dist/types/launch.types.d.ts.map +1 -0
- package/dist/types/launch.types.js +6 -0
- package/dist/types/launch.types.js.map +1 -0
- package/dist/types.d.ts +23 -14
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +9 -2
- package/dist/types.js.map +1 -1
- package/dist/utils/command-executor.d.ts +39 -3
- package/dist/utils/command-executor.d.ts.map +1 -1
- package/dist/utils/command-executor.js +95 -8
- package/dist/utils/command-executor.js.map +1 -1
- package/dist/utils/config-manager.d.ts +25 -42
- package/dist/utils/config-manager.d.ts.map +1 -1
- package/dist/utils/config-manager.js +21 -49
- package/dist/utils/config-manager.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/interactive-prompter.d.ts +16 -64
- package/dist/utils/interactive-prompter.d.ts.map +1 -1
- package/dist/utils/interactive-prompter.js +12 -65
- package/dist/utils/interactive-prompter.js.map +1 -1
- package/dist/utils/launch-spec-helpers.d.ts +38 -0
- package/dist/utils/launch-spec-helpers.d.ts.map +1 -0
- package/dist/utils/launch-spec-helpers.js +131 -0
- package/dist/utils/launch-spec-helpers.js.map +1 -0
- package/package.json +2 -2
- package/dist/connectors/base/file-based-connector.d.ts +0 -97
- package/dist/connectors/base/file-based-connector.d.ts.map +0 -1
- package/dist/connectors/base/file-based-connector.js +0 -185
- package/dist/connectors/base/file-based-connector.js.map +0 -1
- package/dist/connectors/claude-desktop/claude-desktop.connector.d.ts +0 -38
- package/dist/connectors/claude-desktop/claude-desktop.connector.d.ts.map +0 -1
- package/dist/connectors/claude-desktop/claude-desktop.connector.js +0 -68
- package/dist/connectors/claude-desktop/claude-desktop.connector.js.map +0 -1
- package/dist/connectors/codex/codex.connector.d.ts +0 -51
- package/dist/connectors/codex/codex.connector.d.ts.map +0 -1
- package/dist/connectors/codex/codex.connector.js +0 -76
- package/dist/connectors/codex/codex.connector.js.map +0 -1
- package/dist/connectors/gemini/gemini.connector.d.ts +0 -41
- package/dist/connectors/gemini/gemini.connector.d.ts.map +0 -1
- package/dist/connectors/gemini/gemini.connector.js +0 -61
- package/dist/connectors/gemini/gemini.connector.js.map +0 -1
- package/dist/connectors/qwen/qwen.connector.d.ts +0 -41
- package/dist/connectors/qwen/qwen.connector.d.ts.map +0 -1
- package/dist/connectors/qwen/qwen.connector.js +0 -61
- package/dist/connectors/qwen/qwen.connector.js.map +0 -1
- package/dist/types/base.types.d.ts.map +0 -1
- package/dist/types/base.types.js +0 -6
- package/dist/types/base.types.js.map +0 -1
|
@@ -1,20 +1,66 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Фабрика коннекторов для известных MCP
|
|
2
|
+
* Фабрика коннекторов для известных MCP клиентов.
|
|
3
3
|
*
|
|
4
4
|
* Централизует конфигурацию клиентов и устраняет дублирование кода.
|
|
5
5
|
*/
|
|
6
6
|
import * as os from 'node:os';
|
|
7
7
|
import * as path from 'node:path';
|
|
8
8
|
import { ConfigurableConnector, } from './base/configurable-connector.js';
|
|
9
|
+
/**
|
|
10
|
+
* Platform-aware путь к конфигу Claude Desktop.
|
|
11
|
+
*
|
|
12
|
+
* Вычисляется лениво (через функцию), чтобы избежать обращений к `os.platform()`
|
|
13
|
+
* при импорте модуля и упростить тестирование.
|
|
14
|
+
*
|
|
15
|
+
* Win32: предпочтительно используем `%APPDATA%`. Если переменная не задана
|
|
16
|
+
* (нестандартное окружение, CI без полного user profile, WSL fallback) —
|
|
17
|
+
* используем `~/AppData/Roaming/Claude/...`, что является каноническим путём
|
|
18
|
+
* для современных Windows-систем.
|
|
19
|
+
*/
|
|
20
|
+
function claudeDesktopConfigPath() {
|
|
21
|
+
const platform = os.platform();
|
|
22
|
+
if (platform === 'darwin') {
|
|
23
|
+
return path.join(os.homedir(), 'Library/Application Support/Claude/claude_desktop_config.json');
|
|
24
|
+
}
|
|
25
|
+
if (platform === 'linux') {
|
|
26
|
+
return path.join(os.homedir(), '.config/claude/claude_desktop_config.json');
|
|
27
|
+
}
|
|
28
|
+
// win32 и прочие
|
|
29
|
+
const appData = process.env['APPDATA'] ?? path.join(os.homedir(), 'AppData/Roaming');
|
|
30
|
+
return path.join(appData, 'Claude/claude_desktop_config.json');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Lazy paths для остальных клиентов — единообразие с claudeDesktopConfigPath
|
|
34
|
+
* и устойчивость к подмене `HOME`/`USERPROFILE` в runtime (важно для тестов
|
|
35
|
+
* и кастомных окружений).
|
|
36
|
+
*/
|
|
37
|
+
function geminiConfigPath() {
|
|
38
|
+
return path.join(os.homedir(), '.gemini/settings.json');
|
|
39
|
+
}
|
|
40
|
+
function qwenConfigPath() {
|
|
41
|
+
return path.join(os.homedir(), '.qwen/settings.json');
|
|
42
|
+
}
|
|
43
|
+
function codexConfigPath() {
|
|
44
|
+
return path.join(os.homedir(), '.codex/config.toml');
|
|
45
|
+
}
|
|
9
46
|
/**
|
|
10
47
|
* Конфигурации известных клиентов
|
|
11
48
|
*/
|
|
12
49
|
const CLIENT_CONFIGS = {
|
|
50
|
+
'claude-desktop': {
|
|
51
|
+
name: 'claude-desktop',
|
|
52
|
+
displayName: 'Claude Desktop',
|
|
53
|
+
description: 'Официальное десктопное приложение Claude от Anthropic',
|
|
54
|
+
configPath: claudeDesktopConfigPath,
|
|
55
|
+
platforms: ['darwin', 'linux', 'win32'],
|
|
56
|
+
serverKey: 'mcpServers',
|
|
57
|
+
configFormat: 'json',
|
|
58
|
+
},
|
|
13
59
|
gemini: {
|
|
14
60
|
name: 'gemini',
|
|
15
61
|
displayName: 'Gemini CLI',
|
|
16
62
|
description: 'Gemini CLI для разработки с MCP серверами',
|
|
17
|
-
configPath:
|
|
63
|
+
configPath: geminiConfigPath,
|
|
18
64
|
platforms: ['darwin', 'linux', 'win32'],
|
|
19
65
|
serverKey: 'mcpServers',
|
|
20
66
|
configFormat: 'json',
|
|
@@ -23,7 +69,7 @@ const CLIENT_CONFIGS = {
|
|
|
23
69
|
name: 'qwen',
|
|
24
70
|
displayName: 'Qwen Code',
|
|
25
71
|
description: 'Qwen Code для разработки с MCP серверами',
|
|
26
|
-
configPath:
|
|
72
|
+
configPath: qwenConfigPath,
|
|
27
73
|
platforms: ['darwin', 'linux', 'win32'],
|
|
28
74
|
serverKey: 'mcpServers',
|
|
29
75
|
configFormat: 'json',
|
|
@@ -32,7 +78,7 @@ const CLIENT_CONFIGS = {
|
|
|
32
78
|
name: 'codex',
|
|
33
79
|
displayName: 'Codex',
|
|
34
80
|
description: 'CLI инструмент Codex от OpenAI',
|
|
35
|
-
configPath:
|
|
81
|
+
configPath: codexConfigPath,
|
|
36
82
|
platforms: ['darwin', 'linux', 'win32'],
|
|
37
83
|
checkCommand: 'codex --version',
|
|
38
84
|
serverKey: 'mcp_servers',
|
|
@@ -40,40 +86,37 @@ const CLIENT_CONFIGS = {
|
|
|
40
86
|
},
|
|
41
87
|
};
|
|
42
88
|
/**
|
|
43
|
-
* Создать коннектор для известного
|
|
89
|
+
* Создать коннектор для известного клиента.
|
|
44
90
|
*
|
|
45
91
|
* @param client - Имя известного клиента
|
|
46
|
-
* @param serverName - Имя MCP сервера
|
|
47
|
-
* @param entryPoint - Относительный путь к точке входа сервера
|
|
92
|
+
* @param serverName - Имя MCP сервера для записи в конфиг
|
|
48
93
|
*
|
|
49
94
|
* @example
|
|
50
95
|
* ```typescript
|
|
51
|
-
* const
|
|
52
|
-
* const
|
|
96
|
+
* const gemini = createConnector('gemini', 'mcp-server-yandex-tracker');
|
|
97
|
+
* const desktop = createConnector('claude-desktop', 'mcp-server-yandex-tracker');
|
|
53
98
|
* ```
|
|
54
99
|
*/
|
|
55
|
-
export function createConnector(client, serverName
|
|
56
|
-
|
|
57
|
-
return new ConfigurableConnector(serverName, entryPoint, config);
|
|
100
|
+
export function createConnector(client, serverName) {
|
|
101
|
+
return new ConfigurableConnector(serverName, CLIENT_CONFIGS[client]);
|
|
58
102
|
}
|
|
59
103
|
/**
|
|
60
|
-
* Создать коннектор с
|
|
104
|
+
* Создать коннектор с произвольной конфигурацией клиента.
|
|
61
105
|
*
|
|
62
106
|
* @param serverName - Имя MCP сервера
|
|
63
|
-
* @param entryPoint - Относительный путь к точке входа сервера
|
|
64
107
|
* @param clientConfig - Конфигурация клиента
|
|
65
108
|
*/
|
|
66
|
-
export function createCustomConnector(serverName,
|
|
67
|
-
return new ConfigurableConnector(serverName,
|
|
109
|
+
export function createCustomConnector(serverName, clientConfig) {
|
|
110
|
+
return new ConfigurableConnector(serverName, clientConfig);
|
|
68
111
|
}
|
|
69
112
|
/**
|
|
70
|
-
* Получить конфигурацию известного клиента
|
|
113
|
+
* Получить конфигурацию известного клиента (копию).
|
|
71
114
|
*/
|
|
72
115
|
export function getClientConfig(client) {
|
|
73
116
|
return { ...CLIENT_CONFIGS[client] };
|
|
74
117
|
}
|
|
75
118
|
/**
|
|
76
|
-
* Получить список всех известных
|
|
119
|
+
* Получить список всех известных клиентов.
|
|
77
120
|
*/
|
|
78
121
|
export function getKnownClients() {
|
|
79
122
|
return Object.keys(CLIENT_CONFIGS);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connector-factory.js","sourceRoot":"","sources":["../../src/connectors/connector-factory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,qBAAqB,GAEtB,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"connector-factory.js","sourceRoot":"","sources":["../../src/connectors/connector-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export * from './base/index.js';
|
|
6
6
|
export * from './connector-factory.js';
|
|
7
|
-
export * from './claude-desktop/claude-desktop.connector.js';
|
|
8
7
|
export * from './claude-code/claude-code.connector.js';
|
|
9
|
-
export * from './codex/codex.connector.js';
|
|
10
|
-
export * from './gemini/gemini.connector.js';
|
|
11
|
-
export * from './qwen/qwen.connector.js';
|
|
12
8
|
export * from './registry.js';
|
|
13
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,iBAAiB,CAAC;AAGhC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,iBAAiB,CAAC;AAGhC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,wCAAwC,CAAC;AAGvD,cAAc,eAAe,CAAC"}
|
package/dist/connectors/index.js
CHANGED
|
@@ -4,16 +4,10 @@
|
|
|
4
4
|
*/
|
|
5
5
|
// Base connector types and classes
|
|
6
6
|
export * from './base/index.js';
|
|
7
|
-
// Connector factory (
|
|
7
|
+
// Connector factory (для файл-ориентированных клиентов)
|
|
8
8
|
export * from './connector-factory.js';
|
|
9
|
-
//
|
|
10
|
-
export * from './claude-desktop/claude-desktop.connector.js';
|
|
9
|
+
// Claude Code (управляется командами, не файлом)
|
|
11
10
|
export * from './claude-code/claude-code.connector.js';
|
|
12
|
-
// Legacy connectors (use createConnector() factory instead)
|
|
13
|
-
// Kept for backwards compatibility
|
|
14
|
-
export * from './codex/codex.connector.js';
|
|
15
|
-
export * from './gemini/gemini.connector.js';
|
|
16
|
-
export * from './qwen/qwen.connector.js';
|
|
17
11
|
// Registry
|
|
18
12
|
export * from './registry.js';
|
|
19
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mCAAmC;AACnC,cAAc,iBAAiB,CAAC;AAEhC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mCAAmC;AACnC,cAAc,iBAAiB,CAAC;AAEhC,wDAAwD;AACxD,cAAc,wBAAwB,CAAC;AAEvC,iDAAiD;AACjD,cAAc,wCAAwC,CAAC;AAEvD,WAAW;AACX,cAAc,eAAe,CAAC"}
|
|
@@ -2,53 +2,46 @@
|
|
|
2
2
|
* Реестр MCP коннекторов
|
|
3
3
|
*/
|
|
4
4
|
import type { MCPConnector } from './base/connector.interface.js';
|
|
5
|
-
import type {
|
|
5
|
+
import type { ConnectionStatus, IConnectorRegistry } from '../types.js';
|
|
6
6
|
/**
|
|
7
|
-
* Реестр MCP
|
|
8
|
-
* Управляет коллекцией доступных коннекторов и предоставляет методы для работы с
|
|
9
|
-
*
|
|
10
|
-
* @template TConfig - Тип конфигурации MCP сервера
|
|
7
|
+
* Реестр MCP коннекторов.
|
|
8
|
+
* Управляет коллекцией доступных коннекторов и предоставляет методы для работы с ними.
|
|
11
9
|
*
|
|
12
10
|
* @example
|
|
13
11
|
* ```typescript
|
|
14
|
-
* const registry = new ConnectorRegistry
|
|
15
|
-
* registry.register(
|
|
16
|
-
* registry.register(new ClaudeCodeConnector('my-server'
|
|
12
|
+
* const registry = new ConnectorRegistry();
|
|
13
|
+
* registry.register(createConnector('claude-desktop', 'my-server'));
|
|
14
|
+
* registry.register(new ClaudeCodeConnector('my-server'));
|
|
17
15
|
*
|
|
18
16
|
* const installed = await registry.findInstalled();
|
|
19
17
|
* const claudeDesktop = registry.get('claude-desktop');
|
|
20
18
|
* ```
|
|
21
19
|
*/
|
|
22
|
-
export declare class ConnectorRegistry
|
|
20
|
+
export declare class ConnectorRegistry implements IConnectorRegistry {
|
|
23
21
|
private connectors;
|
|
24
22
|
/**
|
|
25
|
-
* Зарегистрировать
|
|
26
|
-
* @param connector - Коннектор для регистрации
|
|
23
|
+
* Зарегистрировать коннектор.
|
|
27
24
|
*/
|
|
28
|
-
register(connector: MCPConnector
|
|
25
|
+
register(connector: MCPConnector): void;
|
|
29
26
|
/**
|
|
30
|
-
* Получить коннектор по
|
|
31
|
-
* @param name - Имя клиента (например, 'claude-desktop')
|
|
32
|
-
* @returns Коннектор или undefined если не найден
|
|
27
|
+
* Получить коннектор по имени.
|
|
33
28
|
*/
|
|
34
|
-
get(name: string): MCPConnector
|
|
29
|
+
get(name: string): MCPConnector | undefined;
|
|
35
30
|
/**
|
|
36
|
-
* Получить все зарегистрированные
|
|
37
|
-
* @returns Массив всех коннекторов
|
|
31
|
+
* Получить все зарегистрированные коннекторы.
|
|
38
32
|
*/
|
|
39
|
-
getAll(): MCPConnector
|
|
33
|
+
getAll(): MCPConnector[];
|
|
40
34
|
/**
|
|
41
|
-
* Найти установленные
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* @returns Массив установленных коннекторов
|
|
35
|
+
* Найти установленные клиенты.
|
|
36
|
+
* Проверка `isInstalled()` выполняется параллельно.
|
|
45
37
|
*/
|
|
46
|
-
findInstalled(): Promise<MCPConnector
|
|
38
|
+
findInstalled(): Promise<MCPConnector[]>;
|
|
47
39
|
/**
|
|
48
|
-
* Проверить статус всех клиентов
|
|
49
|
-
* Возвращает Map с именем клиента и его статусом
|
|
40
|
+
* Проверить статус всех клиентов параллельно через `Promise.allSettled`.
|
|
50
41
|
*
|
|
51
|
-
*
|
|
42
|
+
* Возвращает Map с именем клиента и его статусом. При ошибке `getStatus()`
|
|
43
|
+
* для конкретного коннектора — записывается `connected: false` с сообщением
|
|
44
|
+
* об ошибке (не пробрасывается, чтобы не падать на одном проблемном клиенте).
|
|
52
45
|
*/
|
|
53
46
|
checkAllStatuses(): Promise<Map<string, ConnectionStatus>>;
|
|
54
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;;;;;;;;;GAaG;AACH,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,UAAU,CAAwC;IAE1D;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;IAKvC;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI3C;;OAEG;IACH,MAAM,IAAI,YAAY,EAAE;IAIxB;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAM9C;;;;;;OAMG;IACG,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAkBjE"}
|
|
@@ -2,16 +2,14 @@
|
|
|
2
2
|
* Реестр MCP коннекторов
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
* Реестр MCP
|
|
6
|
-
* Управляет коллекцией доступных коннекторов и предоставляет методы для работы с
|
|
7
|
-
*
|
|
8
|
-
* @template TConfig - Тип конфигурации MCP сервера
|
|
5
|
+
* Реестр MCP коннекторов.
|
|
6
|
+
* Управляет коллекцией доступных коннекторов и предоставляет методы для работы с ними.
|
|
9
7
|
*
|
|
10
8
|
* @example
|
|
11
9
|
* ```typescript
|
|
12
|
-
* const registry = new ConnectorRegistry
|
|
13
|
-
* registry.register(
|
|
14
|
-
* registry.register(new ClaudeCodeConnector('my-server'
|
|
10
|
+
* const registry = new ConnectorRegistry();
|
|
11
|
+
* registry.register(createConnector('claude-desktop', 'my-server'));
|
|
12
|
+
* registry.register(new ClaudeCodeConnector('my-server'));
|
|
15
13
|
*
|
|
16
14
|
* const installed = await registry.findInstalled();
|
|
17
15
|
* const claudeDesktop = registry.get('claude-desktop');
|
|
@@ -20,56 +18,58 @@
|
|
|
20
18
|
export class ConnectorRegistry {
|
|
21
19
|
connectors = new Map();
|
|
22
20
|
/**
|
|
23
|
-
* Зарегистрировать
|
|
24
|
-
* @param connector - Коннектор для регистрации
|
|
21
|
+
* Зарегистрировать коннектор.
|
|
25
22
|
*/
|
|
26
23
|
register(connector) {
|
|
27
24
|
const info = connector.getClientInfo();
|
|
28
25
|
this.connectors.set(info.name, connector);
|
|
29
26
|
}
|
|
30
27
|
/**
|
|
31
|
-
* Получить коннектор по
|
|
32
|
-
* @param name - Имя клиента (например, 'claude-desktop')
|
|
33
|
-
* @returns Коннектор или undefined если не найден
|
|
28
|
+
* Получить коннектор по имени.
|
|
34
29
|
*/
|
|
35
30
|
get(name) {
|
|
36
31
|
return this.connectors.get(name);
|
|
37
32
|
}
|
|
38
33
|
/**
|
|
39
|
-
* Получить все зарегистрированные
|
|
40
|
-
* @returns Массив всех коннекторов
|
|
34
|
+
* Получить все зарегистрированные коннекторы.
|
|
41
35
|
*/
|
|
42
36
|
getAll() {
|
|
43
37
|
return Array.from(this.connectors.values());
|
|
44
38
|
}
|
|
45
39
|
/**
|
|
46
|
-
* Найти установленные
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* @returns Массив установленных коннекторов
|
|
40
|
+
* Найти установленные клиенты.
|
|
41
|
+
* Проверка `isInstalled()` выполняется параллельно.
|
|
50
42
|
*/
|
|
51
43
|
async findInstalled() {
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
installed.push(connector);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return installed;
|
|
44
|
+
const all = Array.from(this.connectors.values());
|
|
45
|
+
const checks = await Promise.all(all.map(async (c) => ({ c, ok: await c.isInstalled() })));
|
|
46
|
+
return checks.filter((x) => x.ok).map((x) => x.c);
|
|
59
47
|
}
|
|
60
48
|
/**
|
|
61
|
-
* Проверить статус всех клиентов
|
|
62
|
-
* Возвращает Map с именем клиента и его статусом
|
|
49
|
+
* Проверить статус всех клиентов параллельно через `Promise.allSettled`.
|
|
63
50
|
*
|
|
64
|
-
*
|
|
51
|
+
* Возвращает Map с именем клиента и его статусом. При ошибке `getStatus()`
|
|
52
|
+
* для конкретного коннектора — записывается `connected: false` с сообщением
|
|
53
|
+
* об ошибке (не пробрасывается, чтобы не падать на одном проблемном клиенте).
|
|
65
54
|
*/
|
|
66
55
|
async checkAllStatuses() {
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
56
|
+
const entries = Array.from(this.connectors.entries());
|
|
57
|
+
const settled = await Promise.allSettled(entries.map(([, c]) => c.getStatus()));
|
|
58
|
+
const result = new Map();
|
|
59
|
+
settled.forEach((res, i) => {
|
|
60
|
+
const name = entries[i]?.[0];
|
|
61
|
+
if (name === undefined)
|
|
62
|
+
return;
|
|
63
|
+
if (res.status === 'fulfilled') {
|
|
64
|
+
result.set(name, res.value);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const reason = res.reason;
|
|
68
|
+
const message = reason instanceof Error ? reason.message : String(reason);
|
|
69
|
+
result.set(name, { connected: false, error: `Ошибка проверки статуса: ${message}` });
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return result;
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/connectors/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,iBAAiB;IACpB,UAAU,GAA8B,IAAI,GAAG,EAAE,CAAC;IAE1D;;OAEG;IACH,QAAQ,CAAC,SAAuB;QAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3F,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,gBAAgB;QACpB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAEhF,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;QACnD,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YACzB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO;YAC/B,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC/B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,GAAG,CAAC,MAAiB,CAAC;gBACrC,MAAM,OAAO,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1E,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,OAAO,EAAE,EAAE,CAAC,CAAC;YACvF,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|