@defai.digital/ax-cli 3.7.2 → 3.8.2

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 (213) hide show
  1. package/README.md +148 -53
  2. package/dist/agent/context-manager.d.ts +15 -1
  3. package/dist/agent/context-manager.js +50 -19
  4. package/dist/agent/context-manager.js.map +1 -1
  5. package/dist/agent/dependency-resolver.js +13 -7
  6. package/dist/agent/dependency-resolver.js.map +1 -1
  7. package/dist/agent/llm-agent.d.ts +37 -0
  8. package/dist/agent/llm-agent.js +318 -98
  9. package/dist/agent/llm-agent.js.map +1 -1
  10. package/dist/agent/status-reporter.d.ts +114 -0
  11. package/dist/agent/status-reporter.js +335 -0
  12. package/dist/agent/status-reporter.js.map +1 -0
  13. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js +8 -2
  14. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js.map +1 -1
  15. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js +3 -1
  16. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js.map +1 -1
  17. package/dist/analyzers/best-practices/rules/typescript/prefer-const.js +3 -1
  18. package/dist/analyzers/best-practices/rules/typescript/prefer-const.js.map +1 -1
  19. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js +3 -1
  20. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js.map +1 -1
  21. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js +9 -3
  22. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js.map +1 -1
  23. package/dist/analyzers/git/churn-calculator.d.ts +2 -0
  24. package/dist/analyzers/git/churn-calculator.js +42 -8
  25. package/dist/analyzers/git/churn-calculator.js.map +1 -1
  26. package/dist/analyzers/git/hotspot-detector.js +2 -2
  27. package/dist/analyzers/git/hotspot-detector.js.map +1 -1
  28. package/dist/analyzers/metrics/metrics-analyzer.js +1 -1
  29. package/dist/analyzers/metrics/metrics-analyzer.js.map +1 -1
  30. package/dist/analyzers/security/security-analyzer.js +1 -1
  31. package/dist/analyzers/security/security-analyzer.js.map +1 -1
  32. package/dist/checkpoint/manager.d.ts +1 -0
  33. package/dist/checkpoint/manager.js +49 -9
  34. package/dist/checkpoint/manager.js.map +1 -1
  35. package/dist/checkpoint/storage.js +2 -2
  36. package/dist/checkpoint/storage.js.map +1 -1
  37. package/dist/commands/mcp-migrate.d.ts +9 -0
  38. package/dist/commands/mcp-migrate.js +172 -0
  39. package/dist/commands/mcp-migrate.js.map +1 -0
  40. package/dist/commands/status.d.ts +7 -0
  41. package/dist/commands/status.js +211 -0
  42. package/dist/commands/status.js.map +1 -0
  43. package/dist/commands/vscode.d.ts +7 -0
  44. package/dist/commands/vscode.js +363 -0
  45. package/dist/commands/vscode.js.map +1 -0
  46. package/dist/index.js +79 -30
  47. package/dist/index.js.map +1 -1
  48. package/dist/llm/client.js +33 -4
  49. package/dist/llm/client.js.map +1 -1
  50. package/dist/mcp/automatosx-loader.d.ts +84 -0
  51. package/dist/mcp/automatosx-loader.js +238 -0
  52. package/dist/mcp/automatosx-loader.js.map +1 -0
  53. package/dist/mcp/client-mutex-patch.d.ts +36 -0
  54. package/dist/mcp/client-mutex-patch.js +75 -0
  55. package/dist/mcp/client-mutex-patch.js.map +1 -0
  56. package/dist/mcp/client-v2.d.ts +229 -0
  57. package/dist/mcp/client-v2.js +740 -0
  58. package/dist/mcp/client-v2.js.map +1 -0
  59. package/dist/mcp/client.d.ts +111 -13
  60. package/dist/mcp/client.js +168 -253
  61. package/dist/mcp/client.js.map +1 -1
  62. package/dist/mcp/config-detector-v2.d.ts +83 -0
  63. package/dist/mcp/config-detector-v2.js +328 -0
  64. package/dist/mcp/config-detector-v2.js.map +1 -0
  65. package/dist/mcp/config-detector.d.ts +90 -0
  66. package/dist/mcp/config-detector.js +242 -0
  67. package/dist/mcp/config-detector.js.map +1 -0
  68. package/dist/mcp/config-migrator-v2.d.ts +89 -0
  69. package/dist/mcp/config-migrator-v2.js +288 -0
  70. package/dist/mcp/config-migrator-v2.js.map +1 -0
  71. package/dist/mcp/config-migrator.d.ts +63 -0
  72. package/dist/mcp/config-migrator.js +269 -0
  73. package/dist/mcp/config-migrator.js.map +1 -0
  74. package/dist/mcp/config-v2.d.ts +106 -0
  75. package/dist/mcp/config-v2.js +417 -0
  76. package/dist/mcp/config-v2.js.map +1 -0
  77. package/dist/mcp/config.d.ts +12 -1
  78. package/dist/mcp/config.js +95 -10
  79. package/dist/mcp/config.js.map +1 -1
  80. package/dist/mcp/error-formatter.d.ts +46 -0
  81. package/dist/mcp/error-formatter.js +244 -0
  82. package/dist/mcp/error-formatter.js.map +1 -0
  83. package/dist/mcp/health.d.ts +5 -0
  84. package/dist/mcp/health.js +22 -2
  85. package/dist/mcp/health.js.map +1 -1
  86. package/dist/mcp/invariants.d.ts +141 -0
  87. package/dist/mcp/invariants.js +243 -0
  88. package/dist/mcp/invariants.js.map +1 -0
  89. package/dist/mcp/mutex-safe.d.ts +153 -0
  90. package/dist/mcp/mutex-safe.js +260 -0
  91. package/dist/mcp/mutex-safe.js.map +1 -0
  92. package/dist/mcp/mutex.d.ts +73 -0
  93. package/dist/mcp/mutex.js +137 -0
  94. package/dist/mcp/mutex.js.map +1 -0
  95. package/dist/mcp/reconnection.d.ts +4 -0
  96. package/dist/mcp/reconnection.js +25 -1
  97. package/dist/mcp/reconnection.js.map +1 -1
  98. package/dist/mcp/transports-v2.d.ts +152 -0
  99. package/dist/mcp/transports-v2.js +481 -0
  100. package/dist/mcp/transports-v2.js.map +1 -0
  101. package/dist/mcp/type-safety.d.ts +231 -0
  102. package/dist/mcp/type-safety.js +273 -0
  103. package/dist/mcp/type-safety.js.map +1 -0
  104. package/dist/planner/task-planner.js +13 -0
  105. package/dist/planner/task-planner.js.map +1 -1
  106. package/dist/planner/types.d.ts +6 -6
  107. package/dist/schemas/confirmation-schemas.d.ts +2 -2
  108. package/dist/schemas/settings-schemas.d.ts +196 -0
  109. package/dist/schemas/settings-schemas.js +146 -5
  110. package/dist/schemas/settings-schemas.js.map +1 -1
  111. package/dist/sdk/index.d.ts +118 -2
  112. package/dist/sdk/index.js +146 -4
  113. package/dist/sdk/index.js.map +1 -1
  114. package/dist/sdk/testing.d.ts +182 -0
  115. package/dist/sdk/testing.js +231 -0
  116. package/dist/sdk/testing.js.map +1 -1
  117. package/dist/sdk/version.d.ts +114 -15
  118. package/dist/sdk/version.js +137 -15
  119. package/dist/sdk/version.js.map +1 -1
  120. package/dist/tools/bash.js +54 -9
  121. package/dist/tools/bash.js.map +1 -1
  122. package/dist/tools/registry.d.ts +146 -0
  123. package/dist/tools/registry.js +170 -0
  124. package/dist/tools/registry.js.map +1 -0
  125. package/dist/tools/search.js +12 -2
  126. package/dist/tools/search.js.map +1 -1
  127. package/dist/tools/text-editor.js +84 -26
  128. package/dist/tools/text-editor.js.map +1 -1
  129. package/dist/ui/components/chat-history.js +6 -1
  130. package/dist/ui/components/chat-history.js.map +1 -1
  131. package/dist/ui/components/chat-input.d.ts +2 -1
  132. package/dist/ui/components/chat-input.js +5 -2
  133. package/dist/ui/components/chat-input.js.map +1 -1
  134. package/dist/ui/components/chat-interface.js +187 -5
  135. package/dist/ui/components/chat-interface.js.map +1 -1
  136. package/dist/ui/components/context-breakdown.d.ts +23 -0
  137. package/dist/ui/components/context-breakdown.js +124 -0
  138. package/dist/ui/components/context-breakdown.js.map +1 -0
  139. package/dist/ui/components/keyboard-help.d.ts +17 -0
  140. package/dist/ui/components/keyboard-help.js +116 -0
  141. package/dist/ui/components/keyboard-help.js.map +1 -0
  142. package/dist/ui/components/keyboard-hints.js +2 -2
  143. package/dist/ui/components/keyboard-hints.js.map +1 -1
  144. package/dist/ui/components/quick-actions.js +43 -7
  145. package/dist/ui/components/quick-actions.js.map +1 -1
  146. package/dist/ui/components/status-bar.d.ts +3 -0
  147. package/dist/ui/components/status-bar.js +25 -16
  148. package/dist/ui/components/status-bar.js.map +1 -1
  149. package/dist/ui/components/toast-notification.d.ts +42 -0
  150. package/dist/ui/components/toast-notification.js +30 -2
  151. package/dist/ui/components/toast-notification.js.map +1 -1
  152. package/dist/ui/components/tool-group-display.js +34 -4
  153. package/dist/ui/components/tool-group-display.js.map +1 -1
  154. package/dist/ui/components/welcome-panel.js +2 -2
  155. package/dist/ui/components/welcome-panel.js.map +1 -1
  156. package/dist/ui/hooks/use-enhanced-input.d.ts +9 -1
  157. package/dist/ui/hooks/use-enhanced-input.js +901 -90
  158. package/dist/ui/hooks/use-enhanced-input.js.map +1 -1
  159. package/dist/ui/hooks/use-input-handler.d.ts +11 -1
  160. package/dist/ui/hooks/use-input-handler.js +67 -3
  161. package/dist/ui/hooks/use-input-handler.js.map +1 -1
  162. package/dist/ui/hooks/use-input-history.d.ts +1 -1
  163. package/dist/ui/hooks/use-input-history.js +50 -14
  164. package/dist/ui/hooks/use-input-history.js.map +1 -1
  165. package/dist/ui/utils/bracketed-paste-handler.d.ts +97 -0
  166. package/dist/ui/utils/bracketed-paste-handler.js +322 -0
  167. package/dist/ui/utils/bracketed-paste-handler.js.map +1 -0
  168. package/dist/ui/utils/change-summarizer.js +16 -6
  169. package/dist/ui/utils/change-summarizer.js.map +1 -1
  170. package/dist/ui/utils/tool-grouper.d.ts +10 -1
  171. package/dist/ui/utils/tool-grouper.js +143 -30
  172. package/dist/ui/utils/tool-grouper.js.map +1 -1
  173. package/dist/utils/auto-accept-logger.d.ts +173 -0
  174. package/dist/utils/auto-accept-logger.js +420 -0
  175. package/dist/utils/auto-accept-logger.js.map +1 -0
  176. package/dist/utils/background-task-manager.d.ts +11 -0
  177. package/dist/utils/background-task-manager.js +124 -38
  178. package/dist/utils/background-task-manager.js.map +1 -1
  179. package/dist/utils/confirmation-service.d.ts +1 -0
  180. package/dist/utils/confirmation-service.js +6 -1
  181. package/dist/utils/confirmation-service.js.map +1 -1
  182. package/dist/utils/encryption.d.ts +8 -0
  183. package/dist/utils/encryption.js +44 -27
  184. package/dist/utils/encryption.js.map +1 -1
  185. package/dist/utils/enhanced-error-messages.d.ts +33 -0
  186. package/dist/utils/enhanced-error-messages.js +420 -0
  187. package/dist/utils/enhanced-error-messages.js.map +1 -0
  188. package/dist/utils/error-handler.d.ts +13 -3
  189. package/dist/utils/error-handler.js +16 -4
  190. package/dist/utils/error-handler.js.map +1 -1
  191. package/dist/utils/external-editor.d.ts +47 -0
  192. package/dist/utils/external-editor.js +179 -0
  193. package/dist/utils/external-editor.js.map +1 -0
  194. package/dist/utils/history-migration.d.ts +9 -0
  195. package/dist/utils/history-migration.js +36 -0
  196. package/dist/utils/history-migration.js.map +1 -0
  197. package/dist/utils/paste-utils.js +12 -11
  198. package/dist/utils/paste-utils.js.map +1 -1
  199. package/dist/utils/rate-limiter.js +20 -1
  200. package/dist/utils/rate-limiter.js.map +1 -1
  201. package/dist/utils/safety-rules.d.ts +64 -0
  202. package/dist/utils/safety-rules.js +225 -0
  203. package/dist/utils/safety-rules.js.map +1 -0
  204. package/dist/utils/settings-manager.d.ts +89 -1
  205. package/dist/utils/settings-manager.js +359 -3
  206. package/dist/utils/settings-manager.js.map +1 -1
  207. package/dist/utils/token-counter.d.ts +2 -0
  208. package/dist/utils/token-counter.js +32 -9
  209. package/dist/utils/token-counter.js.map +1 -1
  210. package/dist/utils/version.d.ts +11 -2
  211. package/dist/utils/version.js +54 -21
  212. package/dist/utils/version.js.map +1 -1
  213. package/package.json +2 -1
@@ -0,0 +1,417 @@
1
+ /**
2
+ * Type-Safe MCP Configuration (Phase 2 Improvements)
3
+ *
4
+ * Improvements applied:
5
+ * 1. Result types for all functions (explicit error handling)
6
+ * 2. No global mutable state (class-based design)
7
+ * 3. Branded types for ServerName
8
+ * 4. Invariant checks for validation
9
+ * 5. Phantom types for non-empty server lists
10
+ *
11
+ * Coverage: 85% → 90% (Phase 2)
12
+ */
13
+ import { getSettingsManager } from "../utils/settings-manager.js";
14
+ import { MCPServerConfigSchema } from "../schemas/settings-schemas.js";
15
+ import { ErrorCategory, createErrorMessage } from "../utils/error-handler.js";
16
+ import { loadAutomatosXMCPServers, mergeConfigs, getConfigRecommendation, formatMergeResult } from "./automatosx-loader.js";
17
+ import { migrateConfig } from "./config-migrator.js";
18
+ import { detectConfigFormat } from "./config-detector.js";
19
+ import { formatMCPConfigError, formatWarning, formatInfo } from "./error-formatter.js";
20
+ // Phase 2: Import type safety utilities
21
+ import { Ok, Err } from "./type-safety.js";
22
+ import { createServerName, asNonEmpty } from "./type-safety.js";
23
+ import { assertValidServerName } from "./invariants.js";
24
+ /**
25
+ * Type-safe MCP Configuration Loader
26
+ *
27
+ * Phase 2 improvements:
28
+ * - No global mutable state (class instead of module-level variables)
29
+ * - Result types for all operations
30
+ * - Branded types for server names
31
+ * - Better error aggregation
32
+ */
33
+ export class MCPConfigLoader {
34
+ hasShownMigrationWarnings = false;
35
+ /**
36
+ * Load MCP configuration from project settings with validation and auto-migration
37
+ *
38
+ * Returns Result type instead of throwing
39
+ */
40
+ loadMCPConfig() {
41
+ try {
42
+ const manager = getSettingsManager();
43
+ const projectSettings = manager.loadProjectSettings();
44
+ // Load ax-cli servers
45
+ const axCliRawServers = projectSettings.mcpServers
46
+ ? Object.values(projectSettings.mcpServers)
47
+ : [];
48
+ // Process ax-cli servers with migration
49
+ const axCliResult = this.processAxCliServers(axCliRawServers);
50
+ if (!axCliResult.success) {
51
+ return axCliResult;
52
+ }
53
+ const { servers: axCliServers, hadLegacy } = axCliResult.value;
54
+ // Load AutomatosX servers (if exists)
55
+ const automatosXResult = loadAutomatosXMCPServers();
56
+ if (automatosXResult.found && !this.hasShownMigrationWarnings) {
57
+ if (automatosXResult.errors.length > 0) {
58
+ console.warn(formatWarning('AutomatosX config found but has errors:', automatosXResult.errors));
59
+ }
60
+ if (automatosXResult.warnings.length > 0 && process.env.DEBUG) {
61
+ automatosXResult.warnings.forEach(warning => {
62
+ console.warn(formatInfo(warning));
63
+ });
64
+ }
65
+ }
66
+ // Merge configs if we have both sources
67
+ let finalServers;
68
+ if (automatosXResult.found && automatosXResult.servers.length > 0) {
69
+ const mergeResult = mergeConfigs(axCliServers, automatosXResult.servers);
70
+ finalServers = mergeResult.servers;
71
+ // Show merge info only in debug mode or if there are conflicts
72
+ if (!this.hasShownMigrationWarnings && (mergeResult.conflicts.length > 0 || process.env.DEBUG)) {
73
+ if (process.env.DEBUG) {
74
+ console.log(formatMergeResult(mergeResult));
75
+ }
76
+ const recommendation = getConfigRecommendation(mergeResult);
77
+ if (recommendation && mergeResult.conflicts.length > 0) {
78
+ console.warn(formatInfo(recommendation));
79
+ }
80
+ }
81
+ }
82
+ else {
83
+ finalServers = axCliServers;
84
+ }
85
+ // Mark that we've shown warnings this session
86
+ if (hadLegacy || automatosXResult.found) {
87
+ this.hasShownMigrationWarnings = true;
88
+ }
89
+ return Ok({ servers: finalServers });
90
+ }
91
+ catch (error) {
92
+ return Err(error instanceof Error ? error : new Error(String(error)));
93
+ }
94
+ }
95
+ /**
96
+ * Process ax-cli servers with auto-migration
97
+ */
98
+ processAxCliServers(rawServers) {
99
+ const servers = [];
100
+ let hadLegacy = false;
101
+ const errors = [];
102
+ for (const server of rawServers) {
103
+ // Detect format
104
+ const detection = detectConfigFormat(server);
105
+ if (detection.isLegacy) {
106
+ hadLegacy = true;
107
+ // Auto-migrate legacy format
108
+ const migration = migrateConfig(server);
109
+ if (migration.success && migration.migratedConfig) {
110
+ servers.push(migration.migratedConfig);
111
+ if (!this.hasShownMigrationWarnings) {
112
+ console.warn(formatWarning(`Legacy MCP config format detected for "${server?.name || 'unknown'}"`, [
113
+ 'Auto-migrated to new format (temporary - not saved to file)',
114
+ 'Please update your config with: ax-cli mcp migrate',
115
+ 'See: https://docs.ax-cli.dev/mcp/migration'
116
+ ]));
117
+ }
118
+ }
119
+ else {
120
+ // Migration failed
121
+ if (detection.issues.length > 0 && !this.hasShownMigrationWarnings) {
122
+ const errorMsg = formatMCPConfigError(server?.name || 'unknown', { issues: detection.issues.map(i => ({ path: [], message: i })) });
123
+ console.warn(errorMsg);
124
+ errors.push(errorMsg);
125
+ }
126
+ }
127
+ }
128
+ else {
129
+ // Modern format - validate
130
+ const result = MCPServerConfigSchema.safeParse(server);
131
+ if (result.success && result.data) {
132
+ servers.push(result.data);
133
+ }
134
+ else {
135
+ // Show user-friendly error
136
+ if (!this.hasShownMigrationWarnings && result.error) {
137
+ const errorMsg = formatMCPConfigError(server?.name || 'unknown', result.error);
138
+ console.warn(errorMsg);
139
+ errors.push(errorMsg);
140
+ }
141
+ }
142
+ }
143
+ }
144
+ // If we have errors but also some valid servers, continue
145
+ // If ALL servers failed, return error
146
+ if (servers.length === 0 && errors.length > 0) {
147
+ return Err(new Error(`All MCP servers failed validation:\n${errors.join('\n')}`));
148
+ }
149
+ return Ok({ servers, hadLegacy });
150
+ }
151
+ /**
152
+ * Reset migration warning flag (useful for testing)
153
+ */
154
+ resetMigrationWarnings() {
155
+ this.hasShownMigrationWarnings = false;
156
+ }
157
+ /**
158
+ * Save MCP configuration
159
+ */
160
+ saveMCPConfig(config) {
161
+ try {
162
+ const manager = getSettingsManager();
163
+ const mcpServers = {};
164
+ // Convert servers array to object keyed by name
165
+ for (const server of config.servers) {
166
+ mcpServers[server.name] = server;
167
+ }
168
+ manager.updateProjectSetting('mcpServers', mcpServers);
169
+ return Ok(undefined);
170
+ }
171
+ catch (error) {
172
+ return Err(error instanceof Error ? error : new Error(String(error)));
173
+ }
174
+ }
175
+ /**
176
+ * Add MCP server with validation
177
+ */
178
+ addMCPServer(config) {
179
+ // Phase 2: Validate server name as branded type
180
+ const serverName = createServerName(config.name);
181
+ if (!serverName) {
182
+ return Err(new Error(`Invalid server name: "${config.name}"`));
183
+ }
184
+ // Validate server config before adding
185
+ const validationResult = MCPServerConfigSchema.safeParse(config);
186
+ if (!validationResult.success) {
187
+ return Err(new Error(createErrorMessage(ErrorCategory.VALIDATION, `Adding MCP server "${config.name}"`, validationResult.error || 'Invalid server configuration')));
188
+ }
189
+ try {
190
+ const manager = getSettingsManager();
191
+ const projectSettings = manager.loadProjectSettings();
192
+ const mcpServers = projectSettings.mcpServers || {};
193
+ // Check if server already exists
194
+ if (mcpServers[config.name]) {
195
+ return Err(new Error(`Server "${config.name}" already exists`));
196
+ }
197
+ // Type narrowing: validationResult.success is true, so data is defined
198
+ if (validationResult.data) {
199
+ mcpServers[config.name] = validationResult.data;
200
+ manager.updateProjectSetting('mcpServers', mcpServers);
201
+ }
202
+ return Ok(undefined);
203
+ }
204
+ catch (error) {
205
+ return Err(error instanceof Error ? error : new Error(String(error)));
206
+ }
207
+ }
208
+ /**
209
+ * Remove MCP server
210
+ */
211
+ removeMCPServer(serverName) {
212
+ // Phase 2: Invariant check
213
+ assertValidServerName(serverName);
214
+ try {
215
+ const manager = getSettingsManager();
216
+ const projectSettings = manager.loadProjectSettings();
217
+ const mcpServers = projectSettings.mcpServers;
218
+ if (!mcpServers) {
219
+ return Err(new Error('No MCP servers configured'));
220
+ }
221
+ if (!mcpServers[serverName]) {
222
+ return Err(new Error(`Server ${serverName} not found`));
223
+ }
224
+ delete mcpServers[serverName];
225
+ manager.updateProjectSetting('mcpServers', mcpServers);
226
+ return Ok(undefined);
227
+ }
228
+ catch (error) {
229
+ return Err(error instanceof Error ? error : new Error(String(error)));
230
+ }
231
+ }
232
+ /**
233
+ * Get MCP server by name
234
+ */
235
+ getMCPServer(serverName) {
236
+ // Phase 2: Invariant check
237
+ assertValidServerName(serverName);
238
+ try {
239
+ const manager = getSettingsManager();
240
+ const projectSettings = manager.loadProjectSettings();
241
+ const server = projectSettings.mcpServers?.[serverName];
242
+ if (!server) {
243
+ return Err(new Error(`Server ${serverName} not found`));
244
+ }
245
+ return Ok(server);
246
+ }
247
+ catch (error) {
248
+ return Err(error instanceof Error ? error : new Error(String(error)));
249
+ }
250
+ }
251
+ /**
252
+ * Get all configured servers
253
+ *
254
+ * Phase 2: Returns Result type
255
+ */
256
+ getAllServers() {
257
+ try {
258
+ const manager = getSettingsManager();
259
+ const projectSettings = manager.loadProjectSettings();
260
+ const mcpServers = projectSettings.mcpServers;
261
+ if (!mcpServers) {
262
+ return Ok([]);
263
+ }
264
+ const servers = Object.values(mcpServers);
265
+ return Ok(servers);
266
+ }
267
+ catch (error) {
268
+ return Err(error instanceof Error ? error : new Error(String(error)));
269
+ }
270
+ }
271
+ /**
272
+ * Get all server names
273
+ *
274
+ * Phase 2: Returns branded types
275
+ */
276
+ getAllServerNames() {
277
+ try {
278
+ const manager = getSettingsManager();
279
+ const projectSettings = manager.loadProjectSettings();
280
+ const mcpServers = projectSettings.mcpServers;
281
+ if (!mcpServers) {
282
+ return Ok([]);
283
+ }
284
+ const names = [];
285
+ for (const name of Object.keys(mcpServers)) {
286
+ const serverName = createServerName(name);
287
+ if (serverName) {
288
+ names.push(serverName);
289
+ }
290
+ }
291
+ return Ok(names);
292
+ }
293
+ catch (error) {
294
+ return Err(error instanceof Error ? error : new Error(String(error)));
295
+ }
296
+ }
297
+ /**
298
+ * Phase 2: Get non-empty list of servers
299
+ * Uses phantom types to prove list is non-empty
300
+ */
301
+ getNonEmptyServers() {
302
+ const serversResult = this.getAllServers();
303
+ if (!serversResult.success) {
304
+ return serversResult;
305
+ }
306
+ const servers = serversResult.value;
307
+ const nonEmpty = asNonEmpty(servers);
308
+ if (!nonEmpty) {
309
+ return Err(new Error('No MCP servers configured'));
310
+ }
311
+ return Ok(nonEmpty);
312
+ }
313
+ /**
314
+ * Type-safe method wrappers for tests
315
+ * These mirror the exported functions but as instance methods
316
+ */
317
+ getMCPServerSafe(serverName) {
318
+ const name = createServerName(serverName);
319
+ if (!name) {
320
+ return Err(new Error(`Invalid server name: "${serverName}"`));
321
+ }
322
+ return this.getMCPServer(name);
323
+ }
324
+ addMCPServerSafe(config) {
325
+ return this.addMCPServer(config);
326
+ }
327
+ removeMCPServerSafe(serverName) {
328
+ const name = createServerName(serverName);
329
+ if (!name) {
330
+ return Err(new Error(`Invalid server name: "${serverName}"`));
331
+ }
332
+ return this.removeMCPServer(name);
333
+ }
334
+ getNonEmptyServersSafe() {
335
+ return this.getNonEmptyServers();
336
+ }
337
+ }
338
+ /**
339
+ * Singleton instance for backward compatibility
340
+ */
341
+ const configLoader = new MCPConfigLoader();
342
+ /**
343
+ * Legacy function exports that wrap the class methods
344
+ */
345
+ export function loadMCPConfig() {
346
+ const result = configLoader.loadMCPConfig();
347
+ if (!result.success) {
348
+ throw result.error;
349
+ }
350
+ return result.value;
351
+ }
352
+ export function resetMigrationWarnings() {
353
+ configLoader.resetMigrationWarnings();
354
+ }
355
+ export function saveMCPConfig(config) {
356
+ const result = configLoader.saveMCPConfig(config);
357
+ if (!result.success) {
358
+ throw result.error;
359
+ }
360
+ }
361
+ export function addMCPServer(config) {
362
+ const result = configLoader.addMCPServer(config);
363
+ if (!result.success) {
364
+ throw result.error;
365
+ }
366
+ }
367
+ export function removeMCPServer(serverName) {
368
+ const name = createServerName(serverName);
369
+ if (!name) {
370
+ throw new Error(`Invalid server name: "${serverName}"`);
371
+ }
372
+ const result = configLoader.removeMCPServer(name);
373
+ if (!result.success) {
374
+ throw result.error;
375
+ }
376
+ }
377
+ export function getMCPServer(serverName) {
378
+ const name = createServerName(serverName);
379
+ if (!name) {
380
+ return undefined;
381
+ }
382
+ const result = configLoader.getMCPServer(name);
383
+ if (!result.success) {
384
+ return undefined;
385
+ }
386
+ return result.value;
387
+ }
388
+ /**
389
+ * New type-safe exports (preferred for new code)
390
+ */
391
+ export function loadMCPConfigSafe() {
392
+ return configLoader.loadMCPConfig();
393
+ }
394
+ export function saveMCPConfigSafe(config) {
395
+ return configLoader.saveMCPConfig(config);
396
+ }
397
+ export function addMCPServerSafe(config) {
398
+ return configLoader.addMCPServer(config);
399
+ }
400
+ export function removeMCPServerSafe(serverName) {
401
+ return configLoader.removeMCPServer(serverName);
402
+ }
403
+ export function getMCPServerSafe(serverName) {
404
+ return configLoader.getMCPServer(serverName);
405
+ }
406
+ export function getAllServersSafe() {
407
+ return configLoader.getAllServers();
408
+ }
409
+ export function getAllServerNamesSafe() {
410
+ return configLoader.getAllServerNames();
411
+ }
412
+ export function getNonEmptyServersSafe() {
413
+ return configLoader.getNonEmptyServers();
414
+ }
415
+ // Import templates
416
+ export { TEMPLATES as PREDEFINED_SERVERS, getTemplate, hasTemplate, generateConfigFromTemplate } from './templates.js';
417
+ //# sourceMappingURL=config-v2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-v2.js","sourceRoot":"","sources":["../../src/mcp/config-v2.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,20 @@ export interface MCPConfig {
3
3
  servers: MCPServerConfig[];
4
4
  }
5
5
  /**
6
- * Load MCP configuration from project settings with validation
6
+ * Load MCP configuration from project settings with validation and auto-migration
7
+ *
8
+ * This function:
9
+ * 1. Loads configs from .ax-cli/settings.json
10
+ * 2. Loads configs from .automatosx/config.json (if exists)
11
+ * 3. Auto-migrates legacy formats
12
+ * 4. Merges both sources (ax-cli takes precedence)
13
+ * 5. Validates final configs
7
14
  */
8
15
  export declare function loadMCPConfig(): MCPConfig;
16
+ /**
17
+ * Reset migration warning flag (useful for testing)
18
+ */
19
+ export declare function resetMigrationWarnings(): void;
9
20
  export declare function saveMCPConfig(config: MCPConfig): void;
10
21
  export declare function addMCPServer(config: MCPServerConfig): void;
11
22
  export declare function removeMCPServer(serverName: string): void;
@@ -1,27 +1,112 @@
1
1
  import { getSettingsManager } from "../utils/settings-manager.js";
2
2
  import { MCPServerConfigSchema } from "../schemas/settings-schemas.js";
3
3
  import { ErrorCategory, createErrorMessage } from "../utils/error-handler.js";
4
+ import { loadAutomatosXMCPServers, mergeConfigs, getConfigRecommendation, formatMergeResult } from "./automatosx-loader.js";
5
+ import { migrateConfig } from "./config-migrator.js";
6
+ import { detectConfigFormat } from "./config-detector.js";
7
+ import { formatMCPConfigError, formatWarning, formatInfo } from "./error-formatter.js";
8
+ // Track if we've already shown migration warnings this session
9
+ let hasShownMigrationWarnings = false;
4
10
  /**
5
- * Load MCP configuration from project settings with validation
11
+ * Load MCP configuration from project settings with validation and auto-migration
12
+ *
13
+ * This function:
14
+ * 1. Loads configs from .ax-cli/settings.json
15
+ * 2. Loads configs from .automatosx/config.json (if exists)
16
+ * 3. Auto-migrates legacy formats
17
+ * 4. Merges both sources (ax-cli takes precedence)
18
+ * 5. Validates final configs
6
19
  */
7
20
  export function loadMCPConfig() {
8
21
  const manager = getSettingsManager();
9
22
  const projectSettings = manager.loadProjectSettings();
10
- const rawServers = projectSettings.mcpServers
23
+ // Load ax-cli servers
24
+ const axCliRawServers = projectSettings.mcpServers
11
25
  ? Object.values(projectSettings.mcpServers)
12
26
  : [];
13
- // Validate each server config
14
- const validatedServers = [];
15
- for (const server of rawServers) {
16
- const result = MCPServerConfigSchema.safeParse(server);
17
- if (result.success && result.data) {
18
- validatedServers.push(result.data);
27
+ // Process ax-cli servers with migration
28
+ const axCliServers = [];
29
+ let axCliHadLegacy = false;
30
+ for (const server of axCliRawServers) {
31
+ // Detect format
32
+ const detection = detectConfigFormat(server);
33
+ if (detection.isLegacy) {
34
+ axCliHadLegacy = true;
35
+ // Auto-migrate legacy format
36
+ const migration = migrateConfig(server);
37
+ if (migration.success && migration.migratedConfig) {
38
+ axCliServers.push(migration.migratedConfig);
39
+ if (!hasShownMigrationWarnings) {
40
+ console.warn(formatWarning(`Legacy MCP config format detected for "${server?.name || 'unknown'}"`, [
41
+ 'Auto-migrated to new format (temporary - not saved to file)',
42
+ 'Please update your config with: ax-cli mcp migrate',
43
+ 'See: https://docs.ax-cli.dev/mcp/migration'
44
+ ]));
45
+ }
46
+ }
47
+ else {
48
+ // Migration failed - use formatted error
49
+ if (detection.issues.length > 0 && !hasShownMigrationWarnings) {
50
+ console.warn(formatMCPConfigError(server?.name || 'unknown', { issues: detection.issues.map(i => ({ path: [], message: i })) }));
51
+ }
52
+ }
19
53
  }
20
54
  else {
21
- console.warn(createErrorMessage(ErrorCategory.VALIDATION, `MCP server config validation for "${server?.name || 'unknown'}"`, result.error || 'Invalid configuration'));
55
+ // Modern format - validate
56
+ const result = MCPServerConfigSchema.safeParse(server);
57
+ if (result.success && result.data) {
58
+ axCliServers.push(result.data);
59
+ }
60
+ else {
61
+ // Show user-friendly error instead of technical validation error
62
+ if (!hasShownMigrationWarnings && result.error) {
63
+ console.warn(formatMCPConfigError(server?.name || 'unknown', result.error));
64
+ }
65
+ }
22
66
  }
23
67
  }
24
- return { servers: validatedServers };
68
+ // Load AutomatosX servers (if exists)
69
+ const automatosXResult = loadAutomatosXMCPServers();
70
+ if (automatosXResult.found && !hasShownMigrationWarnings) {
71
+ if (automatosXResult.errors.length > 0) {
72
+ console.warn(formatWarning('AutomatosX config found but has errors:', automatosXResult.errors));
73
+ }
74
+ if (automatosXResult.warnings.length > 0 && process.env.DEBUG) {
75
+ automatosXResult.warnings.forEach(warning => {
76
+ console.warn(formatInfo(warning));
77
+ });
78
+ }
79
+ }
80
+ // Merge configs if we have both sources
81
+ let finalServers;
82
+ if (automatosXResult.found && automatosXResult.servers.length > 0) {
83
+ const mergeResult = mergeConfigs(axCliServers, automatosXResult.servers);
84
+ finalServers = mergeResult.servers;
85
+ // Show merge info only in debug mode or if there are conflicts
86
+ if (!hasShownMigrationWarnings && (mergeResult.conflicts.length > 0 || process.env.DEBUG)) {
87
+ if (process.env.DEBUG) {
88
+ console.log(formatMergeResult(mergeResult));
89
+ }
90
+ const recommendation = getConfigRecommendation(mergeResult);
91
+ if (recommendation && mergeResult.conflicts.length > 0) {
92
+ console.warn(formatInfo(recommendation));
93
+ }
94
+ }
95
+ }
96
+ else {
97
+ finalServers = axCliServers;
98
+ }
99
+ // Mark that we've shown warnings this session
100
+ if (axCliHadLegacy || automatosXResult.found) {
101
+ hasShownMigrationWarnings = true;
102
+ }
103
+ return { servers: finalServers };
104
+ }
105
+ /**
106
+ * Reset migration warning flag (useful for testing)
107
+ */
108
+ export function resetMigrationWarnings() {
109
+ hasShownMigrationWarnings = false;
25
110
  }
26
111
  export function saveMCPConfig(config) {
27
112
  const manager = getSettingsManager();
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * User-Friendly MCP Error Formatter
3
+ *
4
+ * Transforms cryptic Zod validation errors and technical errors into
5
+ * actionable, user-friendly messages with helpful hints and documentation links.
6
+ */
7
+ import type { z } from 'zod';
8
+ export interface FormattedError {
9
+ /** Main error title */
10
+ title: string;
11
+ /** Error details */
12
+ details: string[];
13
+ /** Helpful hints */
14
+ hints: string[];
15
+ /** Documentation link */
16
+ docLink?: string;
17
+ /** Example correct configuration */
18
+ example?: string;
19
+ }
20
+ /**
21
+ * Format a Zod validation error for MCP server config
22
+ */
23
+ export declare function formatMCPConfigError(serverName: string, error: z.ZodError, originalConfig?: any): string;
24
+ /**
25
+ * Format a connection error
26
+ */
27
+ export declare function formatConnectionError(serverName: string, error: Error, transportType?: string): string;
28
+ /**
29
+ * Format a validation error (generic)
30
+ */
31
+ export declare function formatValidationError(context: string, issues: Array<{
32
+ field: string;
33
+ message: string;
34
+ }>): string;
35
+ /**
36
+ * Format a warning message
37
+ */
38
+ export declare function formatWarning(message: string, details?: string[]): string;
39
+ /**
40
+ * Format a success message
41
+ */
42
+ export declare function formatSuccess(message: string, details?: string[]): string;
43
+ /**
44
+ * Format info message
45
+ */
46
+ export declare function formatInfo(message: string, details?: string[]): string;