@fractalizer/mcp-cli 0.3.17 → 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.
Files changed (120) hide show
  1. package/README.md +158 -266
  2. package/dist/commands/connect.command.d.ts +18 -15
  3. package/dist/commands/connect.command.d.ts.map +1 -1
  4. package/dist/commands/connect.command.js +66 -40
  5. package/dist/commands/connect.command.js.map +1 -1
  6. package/dist/commands/disconnect.command.d.ts +5 -17
  7. package/dist/commands/disconnect.command.d.ts.map +1 -1
  8. package/dist/commands/disconnect.command.js +4 -15
  9. package/dist/commands/disconnect.command.js.map +1 -1
  10. package/dist/commands/doctor.command.d.ts +34 -0
  11. package/dist/commands/doctor.command.d.ts.map +1 -0
  12. package/dist/commands/doctor.command.js +321 -0
  13. package/dist/commands/doctor.command.js.map +1 -0
  14. package/dist/commands/index.d.ts +1 -0
  15. package/dist/commands/index.d.ts.map +1 -1
  16. package/dist/commands/index.js +2 -0
  17. package/dist/commands/index.js.map +1 -1
  18. package/dist/commands/list.command.d.ts +4 -9
  19. package/dist/commands/list.command.d.ts.map +1 -1
  20. package/dist/commands/list.command.js +1 -5
  21. package/dist/commands/list.command.js.map +1 -1
  22. package/dist/commands/status.command.d.ts +6 -13
  23. package/dist/commands/status.command.d.ts.map +1 -1
  24. package/dist/commands/status.command.js +15 -12
  25. package/dist/commands/status.command.js.map +1 -1
  26. package/dist/commands/validate.command.d.ts +6 -11
  27. package/dist/commands/validate.command.d.ts.map +1 -1
  28. package/dist/commands/validate.command.js +15 -19
  29. package/dist/commands/validate.command.js.map +1 -1
  30. package/dist/connectors/base/base-connector.d.ts +31 -55
  31. package/dist/connectors/base/base-connector.d.ts.map +1 -1
  32. package/dist/connectors/base/base-connector.js +71 -57
  33. package/dist/connectors/base/base-connector.js.map +1 -1
  34. package/dist/connectors/base/configurable-connector.d.ts +89 -24
  35. package/dist/connectors/base/configurable-connector.d.ts.map +1 -1
  36. package/dist/connectors/base/configurable-connector.js +266 -23
  37. package/dist/connectors/base/configurable-connector.js.map +1 -1
  38. package/dist/connectors/base/connector.interface.d.ts +29 -20
  39. package/dist/connectors/base/connector.interface.d.ts.map +1 -1
  40. package/dist/connectors/base/index.d.ts +0 -1
  41. package/dist/connectors/base/index.d.ts.map +1 -1
  42. package/dist/connectors/base/index.js +0 -1
  43. package/dist/connectors/base/index.js.map +1 -1
  44. package/dist/connectors/claude-code/claude-code.connector.d.ts +100 -21
  45. package/dist/connectors/claude-code/claude-code.connector.d.ts.map +1 -1
  46. package/dist/connectors/claude-code/claude-code.connector.js +221 -40
  47. package/dist/connectors/claude-code/claude-code.connector.js.map +1 -1
  48. package/dist/connectors/connector-factory.d.ts +15 -15
  49. package/dist/connectors/connector-factory.d.ts.map +1 -1
  50. package/dist/connectors/connector-factory.js +61 -18
  51. package/dist/connectors/connector-factory.js.map +1 -1
  52. package/dist/connectors/index.d.ts +0 -4
  53. package/dist/connectors/index.d.ts.map +1 -1
  54. package/dist/connectors/index.js +2 -8
  55. package/dist/connectors/index.js.map +1 -1
  56. package/dist/connectors/registry.d.ts +20 -27
  57. package/dist/connectors/registry.d.ts.map +1 -1
  58. package/dist/connectors/registry.js +34 -34
  59. package/dist/connectors/registry.js.map +1 -1
  60. package/dist/tsconfig.tsbuildinfo +1 -1
  61. package/dist/types/{base.types.d.ts → client.types.d.ts} +30 -30
  62. package/dist/types/client.types.d.ts.map +1 -0
  63. package/dist/types/client.types.js +6 -0
  64. package/dist/types/client.types.js.map +1 -0
  65. package/dist/types/doctor.types.d.ts +91 -0
  66. package/dist/types/doctor.types.d.ts.map +1 -0
  67. package/dist/types/doctor.types.js +12 -0
  68. package/dist/types/doctor.types.js.map +1 -0
  69. package/dist/types/launch.types.d.ts +59 -0
  70. package/dist/types/launch.types.d.ts.map +1 -0
  71. package/dist/types/launch.types.js +6 -0
  72. package/dist/types/launch.types.js.map +1 -0
  73. package/dist/types.d.ts +23 -14
  74. package/dist/types.d.ts.map +1 -1
  75. package/dist/types.js +9 -2
  76. package/dist/types.js.map +1 -1
  77. package/dist/utils/command-executor.d.ts +39 -3
  78. package/dist/utils/command-executor.d.ts.map +1 -1
  79. package/dist/utils/command-executor.js +95 -8
  80. package/dist/utils/command-executor.js.map +1 -1
  81. package/dist/utils/config-manager.d.ts +25 -42
  82. package/dist/utils/config-manager.d.ts.map +1 -1
  83. package/dist/utils/config-manager.js +21 -49
  84. package/dist/utils/config-manager.js.map +1 -1
  85. package/dist/utils/index.d.ts +1 -0
  86. package/dist/utils/index.d.ts.map +1 -1
  87. package/dist/utils/index.js +1 -0
  88. package/dist/utils/index.js.map +1 -1
  89. package/dist/utils/interactive-prompter.d.ts +16 -64
  90. package/dist/utils/interactive-prompter.d.ts.map +1 -1
  91. package/dist/utils/interactive-prompter.js +12 -65
  92. package/dist/utils/interactive-prompter.js.map +1 -1
  93. package/dist/utils/launch-spec-helpers.d.ts +38 -0
  94. package/dist/utils/launch-spec-helpers.d.ts.map +1 -0
  95. package/dist/utils/launch-spec-helpers.js +131 -0
  96. package/dist/utils/launch-spec-helpers.js.map +1 -0
  97. package/package.json +2 -2
  98. package/dist/connectors/base/file-based-connector.d.ts +0 -97
  99. package/dist/connectors/base/file-based-connector.d.ts.map +0 -1
  100. package/dist/connectors/base/file-based-connector.js +0 -185
  101. package/dist/connectors/base/file-based-connector.js.map +0 -1
  102. package/dist/connectors/claude-desktop/claude-desktop.connector.d.ts +0 -38
  103. package/dist/connectors/claude-desktop/claude-desktop.connector.d.ts.map +0 -1
  104. package/dist/connectors/claude-desktop/claude-desktop.connector.js +0 -68
  105. package/dist/connectors/claude-desktop/claude-desktop.connector.js.map +0 -1
  106. package/dist/connectors/codex/codex.connector.d.ts +0 -51
  107. package/dist/connectors/codex/codex.connector.d.ts.map +0 -1
  108. package/dist/connectors/codex/codex.connector.js +0 -76
  109. package/dist/connectors/codex/codex.connector.js.map +0 -1
  110. package/dist/connectors/gemini/gemini.connector.d.ts +0 -41
  111. package/dist/connectors/gemini/gemini.connector.d.ts.map +0 -1
  112. package/dist/connectors/gemini/gemini.connector.js +0 -61
  113. package/dist/connectors/gemini/gemini.connector.js.map +0 -1
  114. package/dist/connectors/qwen/qwen.connector.d.ts +0 -41
  115. package/dist/connectors/qwen/qwen.connector.d.ts.map +0 -1
  116. package/dist/connectors/qwen/qwen.connector.js +0 -61
  117. package/dist/connectors/qwen/qwen.connector.js.map +0 -1
  118. package/dist/types/base.types.d.ts.map +0 -1
  119. package/dist/types/base.types.js +0 -6
  120. package/dist/types/base.types.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.command.js","sourceRoot":"","sources":["../../src/commands/doctor.command.ts"],"names":[],"mappings":"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"}
@@ -7,4 +7,5 @@ export * from './list.command.js';
7
7
  export * from './disconnect.command.js';
8
8
  export * from './connect.command.js';
9
9
  export * from './validate.command.js';
10
+ export * from './doctor.command.js';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,qBAAqB,CAAC"}
@@ -10,4 +10,6 @@ export * from './disconnect.command.js';
10
10
  export * from './connect.command.js';
11
11
  // Validate command (Stage 4.3)
12
12
  export * from './validate.command.js';
13
+ // Doctor command (Stage 1.3 — self-diagnostics)
14
+ export * from './doctor.command.js';
13
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,6BAA6B;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AAExC,8BAA8B;AAC9B,cAAc,sBAAsB,CAAC;AAErC,+BAA+B;AAC/B,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,6BAA6B;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AAExC,8BAA8B;AAC9B,cAAc,sBAAsB,CAAC;AAErC,+BAA+B;AAC/B,cAAc,uBAAuB,CAAC;AAEtC,gDAAgD;AAChD,cAAc,qBAAqB,CAAC"}
@@ -1,23 +1,18 @@
1
1
  import type { ConnectorRegistry } from '../connectors/registry.js';
2
- import type { BaseMCPServerConfig } from '../types.js';
3
2
  /**
4
3
  * Опции для команды list
5
4
  */
6
- export interface ListCommandOptions<TConfig extends BaseMCPServerConfig> {
5
+ export interface ListCommandOptions {
7
6
  /** Реестр MCP коннекторов */
8
- registry: ConnectorRegistry<TConfig>;
7
+ registry: ConnectorRegistry;
9
8
  }
10
9
  /**
11
- * Команда для отображения списка всех поддерживаемых MCP клиентов
12
- *
13
- * @param options - Опции команды
10
+ * Команда для отображения списка всех поддерживаемых MCP клиентов.
14
11
  *
15
12
  * @example
16
13
  * ```typescript
17
- * const registry = new ConnectorRegistry<YourConfig>();
18
- * // регистрация коннекторов...
19
14
  * await listCommand({ registry });
20
15
  * ```
21
16
  */
22
- export declare function listCommand<TConfig extends BaseMCPServerConfig>(options: ListCommandOptions<TConfig>): Promise<void>;
17
+ export declare function listCommand(options: ListCommandOptions): Promise<void>;
23
18
  //# sourceMappingURL=list.command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.command.d.ts","sourceRoot":"","sources":["../../src/commands/list.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,OAAO,SAAS,mBAAmB;IACrE,6BAA6B;IAC7B,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;CACtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,OAAO,SAAS,mBAAmB,EACnE,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAwBf"}
1
+ {"version":3,"file":"list.command.d.ts","sourceRoot":"","sources":["../../src/commands/list.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGnE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB5E"}
@@ -1,13 +1,9 @@
1
1
  import { Logger } from '../utils/logger.js';
2
2
  /**
3
- * Команда для отображения списка всех поддерживаемых MCP клиентов
4
- *
5
- * @param options - Опции команды
3
+ * Команда для отображения списка всех поддерживаемых MCP клиентов.
6
4
  *
7
5
  * @example
8
6
  * ```typescript
9
- * const registry = new ConnectorRegistry<YourConfig>();
10
- * // регистрация коннекторов...
11
7
  * await listCommand({ registry });
12
8
  * ```
13
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"list.command.js","sourceRoot":"","sources":["../../src/commands/list.command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAU5C;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAoC;IAEpC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC;IAC/C,MAAM,CAAC,OAAO,EAAE,CAAC;IAEjB,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;IAErC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;QAElD,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,gBAAgB,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"list.command.js","sourceRoot":"","sources":["../../src/commands/list.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAU5C;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,MAAM,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC;IAC/C,MAAM,CAAC,OAAO,EAAE,CAAC;IAEjB,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;IAErC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;QAElD,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,gBAAgB,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -1,23 +1,16 @@
1
1
  import type { ConnectorRegistry } from '../connectors/registry.js';
2
- import type { BaseMCPServerConfig } from '../types.js';
3
2
  /**
4
3
  * Опции для команды status
5
4
  */
6
- export interface StatusCommandOptions<TConfig extends BaseMCPServerConfig> {
5
+ export interface StatusCommandOptions {
7
6
  /** Реестр MCP коннекторов */
8
- registry: ConnectorRegistry<TConfig>;
7
+ registry: ConnectorRegistry;
9
8
  }
10
9
  /**
11
- * Команда для отображения статуса всех MCP подключений
10
+ * Команда для отображения статуса всех MCP подключений.
12
11
  *
13
- * @param options - Опции команды
14
- *
15
- * @example
16
- * ```typescript
17
- * const registry = new ConnectorRegistry<YourConfig>();
18
- * // регистрация коннекторов...
19
- * await statusCommand({ registry });
20
- * ```
12
+ * Сбор статусов выполняется параллельно через {@link ConnectorRegistry.checkAllStatuses},
13
+ * рендеринг — последовательно в детерминированном порядке регистрации.
21
14
  */
22
- export declare function statusCommand<TConfig extends BaseMCPServerConfig>(options: StatusCommandOptions<TConfig>): Promise<void>;
15
+ export declare function statusCommand(options: StatusCommandOptions): Promise<void>;
23
16
  //# sourceMappingURL=status.command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.command.d.ts","sourceRoot":"","sources":["../../src/commands/status.command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAoB,MAAM,aAAa,CAAC;AAGzE;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,OAAO,SAAS,mBAAmB;IACvE,6BAA6B;IAC7B,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;CACtC;AAqCD;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,OAAO,SAAS,mBAAmB,EACrE,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC,GACrC,OAAO,CAAC,IAAI,CAAC,CAsBf"}
1
+ {"version":3,"file":"status.command.d.ts","sourceRoot":"","sources":["../../src/commands/status.command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAInE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,6BAA6B;IAC7B,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AA2CD;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhF"}
@@ -23,36 +23,39 @@ async function displayConnectorStatus(connector, status) {
23
23
  if (status.connected) {
24
24
  Logger.success(`${info.displayName}: ✅ Подключен`);
25
25
  displayConnectionDetails(status);
26
+ if (status.error) {
27
+ Logger.warn(` └─ ${status.error}`);
28
+ }
29
+ }
30
+ else if (status.error) {
31
+ Logger.error(`${info.displayName}: ❗ Ошибка`);
32
+ Logger.error(` └─ ${status.error}`);
26
33
  }
27
34
  else {
28
35
  Logger.warn(`${info.displayName}: ⭕ Не подключен`);
29
36
  }
30
37
  }
31
38
  /**
32
- * Команда для отображения статуса всех MCP подключений
33
- *
34
- * @param options - Опции команды
39
+ * Команда для отображения статуса всех MCP подключений.
35
40
  *
36
- * @example
37
- * ```typescript
38
- * const registry = new ConnectorRegistry<YourConfig>();
39
- * // регистрация коннекторов...
40
- * await statusCommand({ registry });
41
- * ```
41
+ * Сбор статусов выполняется параллельно через {@link ConnectorRegistry.checkAllStatuses},
42
+ * рендеринг — последовательно в детерминированном порядке регистрации.
42
43
  */
43
44
  export async function statusCommand(options) {
44
45
  const { registry } = options;
45
46
  Logger.header('📊 Статус MCP подключений');
46
47
  Logger.newLine();
47
48
  const statuses = await registry.checkAllStatuses();
49
+ const connectors = registry.getAll();
48
50
  if (statuses.size === 0) {
49
51
  Logger.warn('Нет зарегистрированных MCP клиентов');
50
52
  Logger.newLine();
51
53
  return;
52
54
  }
53
- for (const [name, status] of statuses) {
54
- const connector = registry.get(name);
55
- if (!connector)
55
+ for (const connector of connectors) {
56
+ const name = connector.getClientInfo().name;
57
+ const status = statuses.get(name);
58
+ if (!status)
56
59
  continue;
57
60
  await displayConnectorStatus(connector, status);
58
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"status.command.js","sourceRoot":"","sources":["../../src/commands/status.command.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAU5C;;GAEG;AACH,SAAS,wBAAwB,CAAC,MAAwB;IACxD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO;IAE5B,MAAM,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,sBAAsB,CACnC,SAAgC,EAChC,MAAwB;IAExB,MAAM,IAAI,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;IAElD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,mBAAmB,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,eAAe,CAAC,CAAC;QACnD,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,kBAAkB,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAsC;IAEtC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAC3C,MAAM,CAAC,OAAO,EAAE,CAAC;IAEjB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IAEnD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS;YAAE,SAAS;QAEzB,MAAM,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"status.command.js","sourceRoot":"","sources":["../../src/commands/status.command.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAU5C;;GAEG;AACH,SAAS,wBAAwB,CAAC,MAAwB;IACxD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO;IAE5B,MAAM,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,sBAAsB,CACnC,SAAuB,EACvB,MAAwB;IAExB,MAAM,IAAI,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;IAElD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,mBAAmB,CAAC,CAAC;QACpD,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,eAAe,CAAC,CAAC;QACnD,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,YAAY,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,kBAAkB,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA6B;IAC/D,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAC3C,MAAM,CAAC,OAAO,EAAE,CAAC;IAEjB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IACnD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;IAErC,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC;QAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,CAAC;AACnB,CAAC"}
@@ -1,25 +1,20 @@
1
1
  import type { ConnectorRegistry } from '../connectors/registry.js';
2
- import type { BaseMCPServerConfig } from '../types.js';
3
2
  /**
4
3
  * Опции для команды validate
5
4
  */
6
- export interface ValidateCommandOptions<TConfig extends BaseMCPServerConfig> {
5
+ export interface ValidateCommandOptions {
7
6
  /** Реестр MCP коннекторов */
8
- registry: ConnectorRegistry<TConfig>;
7
+ registry: ConnectorRegistry;
9
8
  }
10
9
  /**
11
- * Команда для валидации конфигураций MCP клиентов
12
- * Проверяет корректность всех подключенных конфигураций
13
- * Завершается с кодом 1 если обнаружены ошибки
14
- *
15
- * @param options - Опции команды
10
+ * Команда для валидации конфигураций MCP клиентов.
11
+ * Проверяет корректность всех подключенных конфигураций.
12
+ * Завершается с кодом 1 если обнаружены ошибки.
16
13
  *
17
14
  * @example
18
15
  * ```typescript
19
- * const registry = new ConnectorRegistry<YourConfig>();
20
- * // регистрация коннекторов...
21
16
  * await validateCommand({ registry });
22
17
  * ```
23
18
  */
24
- export declare function validateCommand<TConfig extends BaseMCPServerConfig>(options: ValidateCommandOptions<TConfig>): Promise<void>;
19
+ export declare function validateCommand(options: ValidateCommandOptions): Promise<void>;
25
20
  //# sourceMappingURL=validate.command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.command.d.ts","sourceRoot":"","sources":["../../src/commands/validate.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,OAAO,SAAS,mBAAmB;IACzE,6BAA6B;IAC7B,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;CACtC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CAAC,OAAO,SAAS,mBAAmB,EACvE,OAAO,EAAE,sBAAsB,CAAC,OAAO,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
1
+ {"version":3,"file":"validate.command.d.ts","sourceRoot":"","sources":["../../src/commands/validate.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGnE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,6BAA6B;IAC7B,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDpF"}
@@ -1,15 +1,11 @@
1
1
  import { Logger } from '../utils/logger.js';
2
2
  /**
3
- * Команда для валидации конфигураций MCP клиентов
4
- * Проверяет корректность всех подключенных конфигураций
5
- * Завершается с кодом 1 если обнаружены ошибки
6
- *
7
- * @param options - Опции команды
3
+ * Команда для валидации конфигураций MCP клиентов.
4
+ * Проверяет корректность всех подключенных конфигураций.
5
+ * Завершается с кодом 1 если обнаружены ошибки.
8
6
  *
9
7
  * @example
10
8
  * ```typescript
11
- * const registry = new ConnectorRegistry<YourConfig>();
12
- * // регистрация коннекторов...
13
9
  * await validateCommand({ registry });
14
10
  * ```
15
11
  */
@@ -21,9 +17,11 @@ export async function validateCommand(options) {
21
17
  spinner.stop();
22
18
  let hasErrors = false;
23
19
  let connectedCount = 0;
24
- for (const [name, status] of statuses.entries()) {
25
- const connector = registry.get(name);
26
- if (!connector)
20
+ // Детерминированный порядок: по списку getAll()
21
+ for (const connector of registry.getAll()) {
22
+ const name = connector.getClientInfo().name;
23
+ const status = statuses.get(name);
24
+ if (!status)
27
25
  continue;
28
26
  const info = connector.getClientInfo();
29
27
  const isInstalled = await connector.isInstalled();
@@ -38,19 +36,17 @@ export async function validateCommand(options) {
38
36
  Logger.info(` Файл: ${status.details.configPath}`);
39
37
  }
40
38
  }
39
+ else if (status.error) {
40
+ Logger.error(`${info.displayName}: ошибка в конфигурации`);
41
+ Logger.error(` ${status.error}`);
42
+ hasErrors = true;
43
+ }
41
44
  else {
42
- if (status.error) {
43
- Logger.error(`${info.displayName}: ошибка в конфигурации`);
44
- Logger.error(` ${status.error}`);
45
- hasErrors = true;
46
- }
47
- else {
48
- Logger.info(`${info.displayName}: не подключен`);
49
- }
45
+ Logger.info(`${info.displayName}: не подключен`);
50
46
  }
51
47
  }
52
48
  Logger.newLine();
53
- Logger.info(`Итого: ${connectedCount} валидных конфигураций из ${statuses.size} проверенных`);
49
+ Logger.info(`Итого: ${String(connectedCount)} валидных конфигураций из ${String(statuses.size)} проверенных`);
54
50
  if (hasErrors) {
55
51
  process.exit(1);
56
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validate.command.js","sourceRoot":"","sources":["../../src/commands/validate.command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAU5C;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAwC;IAExC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,MAAM,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IACnD,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS;YAAE,SAAS;QAEzB,MAAM,IAAI,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;QAElD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,wBAAwB,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,cAAc,EAAE,CAAC;YACjB,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,wBAAwB,CAAC,CAAC;YAC5D,IAAI,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,yBAAyB,CAAC,CAAC;gBAC3D,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBAClC,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,gBAAgB,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,CAAC;IACjB,MAAM,CAAC,IAAI,CAAC,UAAU,cAAc,6BAA6B,QAAQ,CAAC,IAAI,cAAc,CAAC,CAAC;IAE9F,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"validate.command.js","sourceRoot":"","sources":["../../src/commands/validate.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAU5C;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA+B;IACnE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,MAAM,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IACnD,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,gDAAgD;IAChD,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC;QAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,MAAM,IAAI,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;QAElD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,wBAAwB,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,cAAc,EAAE,CAAC;YACjB,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,wBAAwB,CAAC,CAAC;YAC5D,IAAI,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,yBAAyB,CAAC,CAAC;YAC3D,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAClC,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,gBAAgB,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,CAAC;IACjB,MAAM,CAAC,IAAI,CACT,UAAU,MAAM,CAAC,cAAc,CAAC,6BAA6B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CACjG,CAAC;IAEF,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -4,80 +4,56 @@
4
4
  */
5
5
  import * as os from 'node:os';
6
6
  import type { MCPConnector } from './connector.interface.js';
7
- import type { BaseMCPServerConfig } from '../../types.js';
7
+ import type { ConnectionStatus, MCPClientInfo } from '../../types/client.types.js';
8
+ import type { ServerLaunchSpec } from '../../types/launch.types.js';
8
9
  /**
9
10
  * Абстрактный базовый класс для всех MCP коннекторов
10
- * Предоставляет общую функциональность и utility методы
11
- *
12
- * @template TConfig - Тип конфигурации MCP сервера
11
+ * Предоставляет общую функциональность и utility методы.
13
12
  *
14
13
  * @example
15
14
  * ```typescript
16
- * class MyConnector extends BaseConnector<MyServerConfig> {
17
- * getClientInfo(): MCPClientInfo {
18
- * return {
19
- * name: 'my-client',
20
- * displayName: 'My Client',
21
- * description: 'My MCP Client',
22
- * configPath: '/path/to/config',
23
- * platforms: ['darwin', 'linux'],
24
- * };
25
- * }
26
- *
27
- * async isInstalled(): Promise<boolean> {
28
- * // implementation
29
- * }
30
- *
31
- * // ... other methods
15
+ * class MyConnector extends BaseConnector {
16
+ * getClientInfo(): MCPClientInfo { ... }
17
+ * async isInstalled(): Promise<boolean> { ... }
18
+ * async connect(spec: ServerLaunchSpec): Promise<void> { ... }
19
+ * // ... остальные методы
32
20
  * }
33
21
  * ```
34
22
  */
35
- export declare abstract class BaseConnector<TConfig extends BaseMCPServerConfig = BaseMCPServerConfig> implements MCPConnector<TConfig> {
23
+ export declare abstract class BaseConnector implements MCPConnector {
36
24
  /**
37
25
  * Абстрактные методы - должны быть реализованы наследниками
38
26
  */
39
- abstract getClientInfo(): ReturnType<MCPConnector<TConfig>['getClientInfo']>;
40
- abstract isInstalled(): ReturnType<MCPConnector<TConfig>['isInstalled']>;
41
- abstract getStatus(): ReturnType<MCPConnector<TConfig>['getStatus']>;
42
- abstract connect(config: TConfig): ReturnType<MCPConnector<TConfig>['connect']>;
43
- abstract disconnect(): ReturnType<MCPConnector<TConfig>['disconnect']>;
27
+ abstract getClientInfo(): MCPClientInfo;
28
+ abstract isInstalled(): Promise<boolean>;
29
+ abstract getStatus(): Promise<ConnectionStatus>;
30
+ abstract connect(spec: ServerLaunchSpec): Promise<void>;
31
+ abstract disconnect(): Promise<void>;
32
+ abstract getLaunchSpec(): Promise<ServerLaunchSpec | null>;
44
33
  /**
45
- * Базовая валидация конфигурации
46
- * Проверяет обязательные поля BaseMCPServerConfig
34
+ * Базовая валидация спецификации запуска.
35
+ * Наследники могут переопределить метод, вызвав `super.validateLaunchSpec(spec)`
36
+ * для сохранения базовых проверок.
47
37
  *
48
- * Наследники могут переопределить этот метод для добавления своих правил валидации.
49
- * При переопределении рекомендуется вызывать super.validateConfig() для сохранения базовой валидации.
38
+ * Проверки:
39
+ * - `spec.command` непустой.
40
+ * - Если `spec.command` — абсолютный путь, проверяется существование файла.
41
+ * - Если `spec.command === 'node'`, ищется первый абсолютный путь в `spec.args`
42
+ * (учитывая возможные Node-флаги типа `--no-warnings`) и проверяется его существование.
43
+ * - Значения `spec.env` обязаны быть строками (runtime-проверка для JS-вызовов).
44
+ * - Если задан `spec.cwd` — путь должен быть абсолютным и существовать.
50
45
  *
51
- * @param config - Конфигурация для валидации
46
+ * @param spec - Спецификация для валидации
52
47
  * @returns Массив ошибок валидации (пустой если валидация успешна)
53
- *
54
- * @example
55
- * ```typescript
56
- * async validateConfig(config: MyServerConfig): Promise<string[]> {
57
- * const errors = await super.validateConfig(config);
58
- *
59
- * if (!config.apiKey) {
60
- * errors.push('API ключ обязателен');
61
- * }
62
- *
63
- * return errors;
64
- * }
65
- * ```
66
48
  */
67
- validateConfig(config: TConfig): Promise<string[]>;
49
+ validateLaunchSpec(spec: ServerLaunchSpec): Promise<string[]>;
50
+ /**
51
+ * Проверка существования файла без выброса исключений.
52
+ */
53
+ private fileExists;
68
54
  /**
69
55
  * Проверить поддержку текущей платформы
70
56
  * @returns true если текущая платформа поддерживается клиентом
71
- *
72
- * @example
73
- * ```typescript
74
- * async connect(config: TConfig): Promise<void> {
75
- * if (!this.isPlatformSupported()) {
76
- * throw new Error(`Платформа ${this.getCurrentPlatform()} не поддерживается`);
77
- * }
78
- * // ... rest of connect logic
79
- * }
80
- * ```
81
57
  */
82
58
  protected isPlatformSupported(): boolean;
83
59
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"base-connector.d.ts","sourceRoot":"","sources":["../../../src/connectors/base/base-connector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,8BAAsB,aAAa,CAAC,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,CAC3F,YAAW,YAAY,CAAC,OAAO,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,aAAa,IAAI,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC;IAC5E,QAAQ,CAAC,WAAW,IAAI,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC;IACxE,QAAQ,CAAC,SAAS,IAAI,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC;IACpE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/E,QAAQ,CAAC,UAAU,IAAI,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC;IAEtE;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAqBlD;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,mBAAmB,IAAI,OAAO;IAMxC;;;OAGG;IACH,SAAS,CAAC,kBAAkB,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;CAG/D"}
1
+ {"version":3,"file":"base-connector.d.ts","sourceRoot":"","sources":["../../../src/connectors/base/base-connector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAGpE;;;;;;;;;;;;;GAaG;AACH,8BAAsB,aAAc,YAAW,YAAY;IACzD;;OAEG;IACH,QAAQ,CAAC,aAAa,IAAI,aAAa;IACvC,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IACxC,QAAQ,CAAC,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAC/C,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IACvD,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IACpC,QAAQ,CAAC,aAAa,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAE1D;;;;;;;;;;;;;;;OAeG;IACG,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA+CnE;;OAEG;YACW,UAAU;IASxB;;;OAGG;IACH,SAAS,CAAC,mBAAmB,IAAI,OAAO;IAMxC;;;OAGG;IACH,SAAS,CAAC,kBAAkB,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;CAG/D"}
@@ -2,86 +2,100 @@
2
2
  * Base connector implementation for MCP clients
3
3
  * @packageDocumentation
4
4
  */
5
+ import * as fs from 'node:fs/promises';
5
6
  import * as os from 'node:os';
7
+ import * as path from 'node:path';
8
+ import { resolveExecutablePath } from '../../utils/launch-spec-helpers.js';
6
9
  /**
7
10
  * Абстрактный базовый класс для всех MCP коннекторов
8
- * Предоставляет общую функциональность и utility методы
9
- *
10
- * @template TConfig - Тип конфигурации MCP сервера
11
+ * Предоставляет общую функциональность и utility методы.
11
12
  *
12
13
  * @example
13
14
  * ```typescript
14
- * class MyConnector extends BaseConnector<MyServerConfig> {
15
- * getClientInfo(): MCPClientInfo {
16
- * return {
17
- * name: 'my-client',
18
- * displayName: 'My Client',
19
- * description: 'My MCP Client',
20
- * configPath: '/path/to/config',
21
- * platforms: ['darwin', 'linux'],
22
- * };
23
- * }
24
- *
25
- * async isInstalled(): Promise<boolean> {
26
- * // implementation
27
- * }
28
- *
29
- * // ... other methods
15
+ * class MyConnector extends BaseConnector {
16
+ * getClientInfo(): MCPClientInfo { ... }
17
+ * async isInstalled(): Promise<boolean> { ... }
18
+ * async connect(spec: ServerLaunchSpec): Promise<void> { ... }
19
+ * // ... остальные методы
30
20
  * }
31
21
  * ```
32
22
  */
33
23
  export class BaseConnector {
34
24
  /**
35
- * Базовая валидация конфигурации
36
- * Проверяет обязательные поля BaseMCPServerConfig
25
+ * Базовая валидация спецификации запуска.
26
+ * Наследники могут переопределить метод, вызвав `super.validateLaunchSpec(spec)`
27
+ * для сохранения базовых проверок.
37
28
  *
38
- * Наследники могут переопределить этот метод для добавления своих правил валидации.
39
- * При переопределении рекомендуется вызывать super.validateConfig() для сохранения базовой валидации.
29
+ * Проверки:
30
+ * - `spec.command` непустой.
31
+ * - Если `spec.command` — абсолютный путь, проверяется существование файла.
32
+ * - Если `spec.command === 'node'`, ищется первый абсолютный путь в `spec.args`
33
+ * (учитывая возможные Node-флаги типа `--no-warnings`) и проверяется его существование.
34
+ * - Значения `spec.env` обязаны быть строками (runtime-проверка для JS-вызовов).
35
+ * - Если задан `spec.cwd` — путь должен быть абсолютным и существовать.
40
36
  *
41
- * @param config - Конфигурация для валидации
37
+ * @param spec - Спецификация для валидации
42
38
  * @returns Массив ошибок валидации (пустой если валидация успешна)
43
- *
44
- * @example
45
- * ```typescript
46
- * async validateConfig(config: MyServerConfig): Promise<string[]> {
47
- * const errors = await super.validateConfig(config);
48
- *
49
- * if (!config.apiKey) {
50
- * errors.push('API ключ обязателен');
51
- * }
52
- *
53
- * return errors;
54
- * }
55
- * ```
56
39
  */
57
- validateConfig(config) {
40
+ async validateLaunchSpec(spec) {
58
41
  const errors = [];
59
- // Проверка projectPath
60
- if (!config.projectPath || config.projectPath.trim().length === 0) {
61
- errors.push('Путь к проекту обязателен');
42
+ if (!spec.command || spec.command.trim().length === 0) {
43
+ errors.push('Команда запуска (command) обязательна');
44
+ return errors;
45
+ }
46
+ if (path.isAbsolute(spec.command)) {
47
+ const ok = await this.fileExists(spec.command);
48
+ if (!ok) {
49
+ errors.push(`Файл команды не найден: ${spec.command}`);
50
+ }
51
+ }
52
+ else if (spec.command === 'node') {
53
+ const scriptPath = resolveExecutablePath(spec);
54
+ if (!scriptPath) {
55
+ errors.push('Для команды `node` не найден абсолютный путь к скрипту в args');
56
+ }
57
+ else {
58
+ const ok = await this.fileExists(scriptPath);
59
+ if (!ok) {
60
+ errors.push(`Скрипт не найден: ${scriptPath}`);
61
+ }
62
+ }
63
+ }
64
+ if (spec.env && typeof spec.env === 'object') {
65
+ for (const [key, value] of Object.entries(spec.env)) {
66
+ if (typeof value !== 'string') {
67
+ errors.push(`Значение env.${key} должно быть строкой, получено: ${typeof value}`);
68
+ }
69
+ }
62
70
  }
63
- // Проверка logLevel (если указан)
64
- if (config.logLevel) {
65
- const validLevels = ['debug', 'info', 'warn', 'error'];
66
- if (!validLevels.includes(config.logLevel)) {
67
- errors.push(`Неверный уровень логирования: ${config.logLevel}. Допустимые: ${validLevels.join(', ')}`);
71
+ if (spec.cwd !== undefined) {
72
+ if (!path.isAbsolute(spec.cwd)) {
73
+ errors.push(`Рабочая директория (cwd) должна быть абсолютным путём: ${spec.cwd}`);
68
74
  }
75
+ else {
76
+ const ok = await this.fileExists(spec.cwd);
77
+ if (!ok) {
78
+ errors.push(`Рабочая директория (cwd) не найдена: ${spec.cwd}`);
79
+ }
80
+ }
81
+ }
82
+ return errors;
83
+ }
84
+ /**
85
+ * Проверка существования файла без выброса исключений.
86
+ */
87
+ async fileExists(filePath) {
88
+ try {
89
+ await fs.access(filePath);
90
+ return true;
91
+ }
92
+ catch {
93
+ return false;
69
94
  }
70
- return Promise.resolve(errors);
71
95
  }
72
96
  /**
73
97
  * Проверить поддержку текущей платформы
74
98
  * @returns true если текущая платформа поддерживается клиентом
75
- *
76
- * @example
77
- * ```typescript
78
- * async connect(config: TConfig): Promise<void> {
79
- * if (!this.isPlatformSupported()) {
80
- * throw new Error(`Платформа ${this.getCurrentPlatform()} не поддерживается`);
81
- * }
82
- * // ... rest of connect logic
83
- * }
84
- * ```
85
99
  */
86
100
  isPlatformSupported() {
87
101
  const platform = os.platform();
@@ -1 +1 @@
1
- {"version":3,"file":"base-connector.js","sourceRoot":"","sources":["../../../src/connectors/base/base-connector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAI9B;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,OAAgB,aAAa;IAYjC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAAc,CAAC,MAAe;QAC5B,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,uBAAuB;QACvB,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC3C,CAAC;QAED,kCAAkC;QAClC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,IAAI,CACT,iCAAiC,MAAM,CAAC,QAAQ,iBAAiB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1F,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED;;;;;;;;;;;;;OAaG;IACO,mBAAmB;QAC3B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC;QAC1D,OAAO,kBAAkB,CAAC,QAAQ,CAAC,QAAwC,CAAC,CAAC;IAC/E,CAAC;IAED;;;OAGG;IACO,kBAAkB;QAC1B,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;IACvB,CAAC;CACF"}
1
+ {"version":3,"file":"base-connector.js","sourceRoot":"","sources":["../../../src/connectors/base/base-connector.ts"],"names":[],"mappings":"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"}