@defai.digital/ax-cli 3.7.1 → 3.8.1

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 +143 -56
  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 +35 -0
  8. package/dist/agent/llm-agent.js +137 -4
  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 +1 -0
  24. package/dist/analyzers/git/churn-calculator.js +25 -6
  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 +22 -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 +130 -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 +15 -0
  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 +486 -41
  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 +7 -0
  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 +17 -4
  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,63 @@
1
+ /**
2
+ * MCP Configuration Migrator
3
+ *
4
+ * Automatically migrates legacy MCP configurations to modern format.
5
+ * Handles both AutomatosX and old ax-cli configs.
6
+ */
7
+ import type { MCPServerConfig } from '../schemas/settings-schemas.js';
8
+ export interface MigrationResult {
9
+ /** Whether migration was successful */
10
+ success: boolean;
11
+ /** Migrated configuration (if successful) */
12
+ migratedConfig?: MCPServerConfig;
13
+ /** Original configuration */
14
+ originalConfig: any;
15
+ /** Changes made during migration */
16
+ changes: string[];
17
+ /** Errors encountered */
18
+ errors: string[];
19
+ /** Warnings */
20
+ warnings: string[];
21
+ }
22
+ export interface BatchMigrationResult {
23
+ /** Total configs processed */
24
+ total: number;
25
+ /** Successfully migrated */
26
+ migrated: number;
27
+ /** Already in modern format (no migration needed) */
28
+ alreadyModern: number;
29
+ /** Failed migrations */
30
+ failed: number;
31
+ /** Individual results */
32
+ results: Map<string, MigrationResult>;
33
+ /** Summary message */
34
+ summary: string;
35
+ }
36
+ /**
37
+ * Migrate a legacy stdio-only config to modern format
38
+ */
39
+ export declare function migrateLegacyStdioConfig(config: any): MigrationResult;
40
+ /**
41
+ * Attempt to migrate any config (auto-detects format)
42
+ */
43
+ export declare function migrateConfig(config: any): MigrationResult;
44
+ /**
45
+ * Batch migrate multiple configs
46
+ */
47
+ export declare function batchMigrateConfigs(configs: Record<string, any>): BatchMigrationResult;
48
+ /**
49
+ * Create backup of config before migration
50
+ */
51
+ export declare function createConfigBackup(config: any): {
52
+ success: boolean;
53
+ backup?: any;
54
+ error?: string;
55
+ };
56
+ /**
57
+ * Format migration result for display
58
+ */
59
+ export declare function formatMigrationResult(serverName: string, result: MigrationResult): string;
60
+ /**
61
+ * Format batch migration result for display
62
+ */
63
+ export declare function formatBatchMigrationResult(result: BatchMigrationResult): string;
@@ -0,0 +1,269 @@
1
+ /**
2
+ * MCP Configuration Migrator
3
+ *
4
+ * Automatically migrates legacy MCP configurations to modern format.
5
+ * Handles both AutomatosX and old ax-cli configs.
6
+ */
7
+ import { MCPServerConfigSchema } from '../schemas/settings-schemas.js';
8
+ import { isLegacyStdioFormat, detectConfigFormat } from './config-detector.js';
9
+ /**
10
+ * Migrate a legacy stdio-only config to modern format
11
+ */
12
+ export function migrateLegacyStdioConfig(config) {
13
+ const changes = [];
14
+ const errors = [];
15
+ const warnings = [];
16
+ // Validate this is actually a legacy config
17
+ if (!isLegacyStdioFormat(config)) {
18
+ return {
19
+ success: false,
20
+ originalConfig: config,
21
+ changes,
22
+ errors: ['Config is not in legacy stdio format'],
23
+ warnings
24
+ };
25
+ }
26
+ // Build modern config
27
+ try {
28
+ const transportConfig = {
29
+ type: 'stdio',
30
+ command: config.command,
31
+ args: config.args || []
32
+ };
33
+ // Only add env if it exists (cleaner than undefined)
34
+ if (config.env) {
35
+ transportConfig.env = config.env;
36
+ }
37
+ const modernConfig = {
38
+ name: config.name,
39
+ transport: transportConfig
40
+ };
41
+ // Validate the migrated config
42
+ const validationResult = MCPServerConfigSchema.safeParse(modernConfig);
43
+ if (!validationResult.success) {
44
+ errors.push('Migrated config failed validation');
45
+ validationResult.error.issues.forEach(issue => {
46
+ errors.push(` - ${issue.path.join('.')}: ${issue.message}`);
47
+ });
48
+ return {
49
+ success: false,
50
+ originalConfig: config,
51
+ changes,
52
+ errors,
53
+ warnings
54
+ };
55
+ }
56
+ // Track changes
57
+ changes.push('Converted from legacy stdio-only format to modern format');
58
+ changes.push('Created "transport" object with type "stdio"');
59
+ changes.push(`Moved "command" field into transport: "${config.command}"`);
60
+ if (config.args) {
61
+ changes.push(`Moved "args" field into transport: [${config.args.length} args]`);
62
+ }
63
+ else {
64
+ changes.push('Added empty "args" array to transport');
65
+ warnings.push('No args specified in original config. Using empty array.');
66
+ }
67
+ if (config.env) {
68
+ changes.push(`Moved "env" field into transport: [${Object.keys(config.env).length} vars]`);
69
+ }
70
+ // Warn about removed fields
71
+ const knownFields = ['name', 'command', 'args', 'env', 'transport'];
72
+ const unknownFields = Object.keys(config).filter(key => !knownFields.includes(key));
73
+ if (unknownFields.length > 0) {
74
+ warnings.push(`Removed unknown fields: ${unknownFields.join(', ')}`);
75
+ }
76
+ return {
77
+ success: true,
78
+ migratedConfig: validationResult.data,
79
+ originalConfig: config,
80
+ changes,
81
+ errors,
82
+ warnings
83
+ };
84
+ }
85
+ catch (error) {
86
+ errors.push(`Migration failed: ${error instanceof Error ? error.message : String(error)}`);
87
+ return {
88
+ success: false,
89
+ originalConfig: config,
90
+ changes,
91
+ errors,
92
+ warnings
93
+ };
94
+ }
95
+ }
96
+ /**
97
+ * Attempt to migrate any config (auto-detects format)
98
+ */
99
+ export function migrateConfig(config) {
100
+ const detection = detectConfigFormat(config);
101
+ // Already in modern format
102
+ if (!detection.isLegacy && detection.isValid) {
103
+ return {
104
+ success: true,
105
+ migratedConfig: config,
106
+ originalConfig: config,
107
+ changes: ['No migration needed - already in modern format'],
108
+ errors: [],
109
+ warnings: detection.warnings
110
+ };
111
+ }
112
+ // Invalid format that's not legacy either
113
+ if (!detection.isLegacy && !detection.isValid) {
114
+ return {
115
+ success: false,
116
+ originalConfig: config,
117
+ changes: [],
118
+ errors: ['Config is neither legacy nor valid modern format', ...detection.issues],
119
+ warnings: detection.warnings
120
+ };
121
+ }
122
+ // Legacy stdio format - migrate it
123
+ if (detection.formatVersion === 'legacy-stdio') {
124
+ return migrateLegacyStdioConfig(config);
125
+ }
126
+ // Unknown format
127
+ return {
128
+ success: false,
129
+ originalConfig: config,
130
+ changes: [],
131
+ errors: [`Unknown config format: ${detection.formatVersion}`],
132
+ warnings: detection.warnings
133
+ };
134
+ }
135
+ /**
136
+ * Batch migrate multiple configs
137
+ */
138
+ export function batchMigrateConfigs(configs) {
139
+ const results = new Map();
140
+ let migrated = 0;
141
+ let alreadyModern = 0;
142
+ let failed = 0;
143
+ for (const [name, config] of Object.entries(configs)) {
144
+ // Ensure config has name field
145
+ const configWithName = { ...config, name: config.name || name };
146
+ const result = migrateConfig(configWithName);
147
+ results.set(name, result);
148
+ if (result.success) {
149
+ if (result.changes.some(c => c.includes('No migration needed'))) {
150
+ alreadyModern++;
151
+ }
152
+ else {
153
+ migrated++;
154
+ }
155
+ }
156
+ else {
157
+ failed++;
158
+ }
159
+ }
160
+ const total = results.size;
161
+ let summary = `Migration complete: ${total} config(s) processed.\n`;
162
+ if (migrated > 0) {
163
+ summary += ` ✅ ${migrated} migrated to modern format\n`;
164
+ }
165
+ if (alreadyModern > 0) {
166
+ summary += ` ℹ️ ${alreadyModern} already in modern format\n`;
167
+ }
168
+ if (failed > 0) {
169
+ summary += ` ❌ ${failed} failed to migrate\n`;
170
+ }
171
+ return {
172
+ total,
173
+ migrated,
174
+ alreadyModern,
175
+ failed,
176
+ results,
177
+ summary: summary.trim()
178
+ };
179
+ }
180
+ /**
181
+ * Create backup of config before migration
182
+ */
183
+ export function createConfigBackup(config) {
184
+ try {
185
+ // Deep clone the config
186
+ const backup = JSON.parse(JSON.stringify(config));
187
+ // Add backup metadata
188
+ const backupWithMetadata = {
189
+ _backup: true,
190
+ _timestamp: Date.now(),
191
+ _version: '3.7.2',
192
+ config: backup
193
+ };
194
+ return {
195
+ success: true,
196
+ backup: backupWithMetadata
197
+ };
198
+ }
199
+ catch (error) {
200
+ return {
201
+ success: false,
202
+ error: error instanceof Error ? error.message : String(error)
203
+ };
204
+ }
205
+ }
206
+ /**
207
+ * Format migration result for display
208
+ */
209
+ export function formatMigrationResult(serverName, result) {
210
+ const lines = [];
211
+ lines.push(`Server: ${serverName}`);
212
+ lines.push('─'.repeat(50));
213
+ if (result.success) {
214
+ lines.push('✅ Migration successful');
215
+ lines.push('');
216
+ lines.push('Changes:');
217
+ result.changes.forEach(change => {
218
+ lines.push(` • ${change}`);
219
+ });
220
+ }
221
+ else {
222
+ lines.push('❌ Migration failed');
223
+ lines.push('');
224
+ lines.push('Errors:');
225
+ result.errors.forEach(error => {
226
+ lines.push(` ❌ ${error}`);
227
+ });
228
+ }
229
+ if (result.warnings.length > 0) {
230
+ lines.push('');
231
+ lines.push('Warnings:');
232
+ result.warnings.forEach(warning => {
233
+ lines.push(` ⚠️ ${warning}`);
234
+ });
235
+ }
236
+ return lines.join('\n');
237
+ }
238
+ /**
239
+ * Format batch migration result for display
240
+ */
241
+ export function formatBatchMigrationResult(result) {
242
+ const lines = [];
243
+ lines.push('╭─ MCP Configuration Migration ─────────────────╮');
244
+ lines.push(`│ Total servers: ${result.total}`);
245
+ lines.push(`│ Migrated: ${result.migrated}`);
246
+ lines.push(`│ Already modern: ${result.alreadyModern}`);
247
+ lines.push(`│ Failed: ${result.failed}`);
248
+ lines.push('╰────────────────────────────────────────────────╯');
249
+ lines.push('');
250
+ // Show details for each server
251
+ for (const [name, serverResult] of result.results.entries()) {
252
+ if (serverResult.success && serverResult.changes.some(c => !c.includes('No migration needed'))) {
253
+ lines.push(formatMigrationResult(name, serverResult));
254
+ lines.push('');
255
+ }
256
+ }
257
+ // Show failures
258
+ const failures = Array.from(result.results.entries()).filter(([, r]) => !r.success);
259
+ if (failures.length > 0) {
260
+ lines.push('Failed Migrations:');
261
+ lines.push('─'.repeat(50));
262
+ failures.forEach(([name, serverResult]) => {
263
+ lines.push(formatMigrationResult(name, serverResult));
264
+ lines.push('');
265
+ });
266
+ }
267
+ return lines.join('\n');
268
+ }
269
+ //# sourceMappingURL=config-migrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-migrator.js","sourceRoot":"","sources":["../../src/mcp/config-migrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
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 { MCPServerConfig } from "./client.js";
14
+ import { Result } from "./type-safety.js";
15
+ import { ServerName, NonEmptyArray } from "./type-safety.js";
16
+ export interface MCPConfig {
17
+ servers: MCPServerConfig[];
18
+ }
19
+ /**
20
+ * Type-safe MCP Configuration Loader
21
+ *
22
+ * Phase 2 improvements:
23
+ * - No global mutable state (class instead of module-level variables)
24
+ * - Result types for all operations
25
+ * - Branded types for server names
26
+ * - Better error aggregation
27
+ */
28
+ export declare class MCPConfigLoader {
29
+ private hasShownMigrationWarnings;
30
+ /**
31
+ * Load MCP configuration from project settings with validation and auto-migration
32
+ *
33
+ * Returns Result type instead of throwing
34
+ */
35
+ loadMCPConfig(): Result<MCPConfig, Error>;
36
+ /**
37
+ * Process ax-cli servers with auto-migration
38
+ */
39
+ private processAxCliServers;
40
+ /**
41
+ * Reset migration warning flag (useful for testing)
42
+ */
43
+ resetMigrationWarnings(): void;
44
+ /**
45
+ * Save MCP configuration
46
+ */
47
+ saveMCPConfig(config: MCPConfig): Result<void, Error>;
48
+ /**
49
+ * Add MCP server with validation
50
+ */
51
+ addMCPServer(config: MCPServerConfig): Result<void, Error>;
52
+ /**
53
+ * Remove MCP server
54
+ */
55
+ removeMCPServer(serverName: ServerName): Result<void, Error>;
56
+ /**
57
+ * Get MCP server by name
58
+ */
59
+ getMCPServer(serverName: ServerName): Result<MCPServerConfig, Error>;
60
+ /**
61
+ * Get all configured servers
62
+ *
63
+ * Phase 2: Returns Result type
64
+ */
65
+ getAllServers(): Result<MCPServerConfig[], Error>;
66
+ /**
67
+ * Get all server names
68
+ *
69
+ * Phase 2: Returns branded types
70
+ */
71
+ getAllServerNames(): Result<ServerName[], Error>;
72
+ /**
73
+ * Phase 2: Get non-empty list of servers
74
+ * Uses phantom types to prove list is non-empty
75
+ */
76
+ getNonEmptyServers(): Result<NonEmptyArray<MCPServerConfig>, Error>;
77
+ /**
78
+ * Type-safe method wrappers for tests
79
+ * These mirror the exported functions but as instance methods
80
+ */
81
+ getMCPServerSafe(serverName: string): Result<MCPServerConfig, Error>;
82
+ addMCPServerSafe(config: MCPServerConfig): Result<void, Error>;
83
+ removeMCPServerSafe(serverName: string): Result<void, Error>;
84
+ getNonEmptyServersSafe(): Result<NonEmptyArray<MCPServerConfig>, Error>;
85
+ }
86
+ /**
87
+ * Legacy function exports that wrap the class methods
88
+ */
89
+ export declare function loadMCPConfig(): MCPConfig;
90
+ export declare function resetMigrationWarnings(): void;
91
+ export declare function saveMCPConfig(config: MCPConfig): void;
92
+ export declare function addMCPServer(config: MCPServerConfig): void;
93
+ export declare function removeMCPServer(serverName: string): void;
94
+ export declare function getMCPServer(serverName: string): MCPServerConfig | undefined;
95
+ /**
96
+ * New type-safe exports (preferred for new code)
97
+ */
98
+ export declare function loadMCPConfigSafe(): Result<MCPConfig, Error>;
99
+ export declare function saveMCPConfigSafe(config: MCPConfig): Result<void, Error>;
100
+ export declare function addMCPServerSafe(config: MCPServerConfig): Result<void, Error>;
101
+ export declare function removeMCPServerSafe(serverName: ServerName): Result<void, Error>;
102
+ export declare function getMCPServerSafe(serverName: ServerName): Result<MCPServerConfig, Error>;
103
+ export declare function getAllServersSafe(): Result<MCPServerConfig[], Error>;
104
+ export declare function getAllServerNamesSafe(): Result<ServerName[], Error>;
105
+ export declare function getNonEmptyServersSafe(): Result<NonEmptyArray<MCPServerConfig>, Error>;
106
+ export { TEMPLATES as PREDEFINED_SERVERS, getTemplate, hasTemplate, generateConfigFromTemplate } from './templates.js';