@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.
- package/README.md +148 -53
- package/dist/agent/context-manager.d.ts +15 -1
- package/dist/agent/context-manager.js +50 -19
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/dependency-resolver.js +13 -7
- package/dist/agent/dependency-resolver.js.map +1 -1
- package/dist/agent/llm-agent.d.ts +37 -0
- package/dist/agent/llm-agent.js +318 -98
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/agent/status-reporter.d.ts +114 -0
- package/dist/agent/status-reporter.js +335 -0
- package/dist/agent/status-reporter.js.map +1 -0
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js +8 -2
- package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js.map +1 -1
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js +3 -1
- package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js.map +1 -1
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.js +3 -1
- package/dist/analyzers/best-practices/rules/typescript/prefer-const.js.map +1 -1
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js +3 -1
- package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js.map +1 -1
- package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js +9 -3
- package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js.map +1 -1
- package/dist/analyzers/git/churn-calculator.d.ts +2 -0
- package/dist/analyzers/git/churn-calculator.js +42 -8
- package/dist/analyzers/git/churn-calculator.js.map +1 -1
- package/dist/analyzers/git/hotspot-detector.js +2 -2
- package/dist/analyzers/git/hotspot-detector.js.map +1 -1
- package/dist/analyzers/metrics/metrics-analyzer.js +1 -1
- package/dist/analyzers/metrics/metrics-analyzer.js.map +1 -1
- package/dist/analyzers/security/security-analyzer.js +1 -1
- package/dist/analyzers/security/security-analyzer.js.map +1 -1
- package/dist/checkpoint/manager.d.ts +1 -0
- package/dist/checkpoint/manager.js +49 -9
- package/dist/checkpoint/manager.js.map +1 -1
- package/dist/checkpoint/storage.js +2 -2
- package/dist/checkpoint/storage.js.map +1 -1
- package/dist/commands/mcp-migrate.d.ts +9 -0
- package/dist/commands/mcp-migrate.js +172 -0
- package/dist/commands/mcp-migrate.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.js +211 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/vscode.d.ts +7 -0
- package/dist/commands/vscode.js +363 -0
- package/dist/commands/vscode.js.map +1 -0
- package/dist/index.js +79 -30
- package/dist/index.js.map +1 -1
- package/dist/llm/client.js +33 -4
- package/dist/llm/client.js.map +1 -1
- package/dist/mcp/automatosx-loader.d.ts +84 -0
- package/dist/mcp/automatosx-loader.js +238 -0
- package/dist/mcp/automatosx-loader.js.map +1 -0
- package/dist/mcp/client-mutex-patch.d.ts +36 -0
- package/dist/mcp/client-mutex-patch.js +75 -0
- package/dist/mcp/client-mutex-patch.js.map +1 -0
- package/dist/mcp/client-v2.d.ts +229 -0
- package/dist/mcp/client-v2.js +740 -0
- package/dist/mcp/client-v2.js.map +1 -0
- package/dist/mcp/client.d.ts +111 -13
- package/dist/mcp/client.js +168 -253
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/config-detector-v2.d.ts +83 -0
- package/dist/mcp/config-detector-v2.js +328 -0
- package/dist/mcp/config-detector-v2.js.map +1 -0
- package/dist/mcp/config-detector.d.ts +90 -0
- package/dist/mcp/config-detector.js +242 -0
- package/dist/mcp/config-detector.js.map +1 -0
- package/dist/mcp/config-migrator-v2.d.ts +89 -0
- package/dist/mcp/config-migrator-v2.js +288 -0
- package/dist/mcp/config-migrator-v2.js.map +1 -0
- package/dist/mcp/config-migrator.d.ts +63 -0
- package/dist/mcp/config-migrator.js +269 -0
- package/dist/mcp/config-migrator.js.map +1 -0
- package/dist/mcp/config-v2.d.ts +106 -0
- package/dist/mcp/config-v2.js +417 -0
- package/dist/mcp/config-v2.js.map +1 -0
- package/dist/mcp/config.d.ts +12 -1
- package/dist/mcp/config.js +95 -10
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/error-formatter.d.ts +46 -0
- package/dist/mcp/error-formatter.js +244 -0
- package/dist/mcp/error-formatter.js.map +1 -0
- package/dist/mcp/health.d.ts +5 -0
- package/dist/mcp/health.js +22 -2
- package/dist/mcp/health.js.map +1 -1
- package/dist/mcp/invariants.d.ts +141 -0
- package/dist/mcp/invariants.js +243 -0
- package/dist/mcp/invariants.js.map +1 -0
- package/dist/mcp/mutex-safe.d.ts +153 -0
- package/dist/mcp/mutex-safe.js +260 -0
- package/dist/mcp/mutex-safe.js.map +1 -0
- package/dist/mcp/mutex.d.ts +73 -0
- package/dist/mcp/mutex.js +137 -0
- package/dist/mcp/mutex.js.map +1 -0
- package/dist/mcp/reconnection.d.ts +4 -0
- package/dist/mcp/reconnection.js +25 -1
- package/dist/mcp/reconnection.js.map +1 -1
- package/dist/mcp/transports-v2.d.ts +152 -0
- package/dist/mcp/transports-v2.js +481 -0
- package/dist/mcp/transports-v2.js.map +1 -0
- package/dist/mcp/type-safety.d.ts +231 -0
- package/dist/mcp/type-safety.js +273 -0
- package/dist/mcp/type-safety.js.map +1 -0
- package/dist/planner/task-planner.js +13 -0
- package/dist/planner/task-planner.js.map +1 -1
- package/dist/planner/types.d.ts +6 -6
- package/dist/schemas/confirmation-schemas.d.ts +2 -2
- package/dist/schemas/settings-schemas.d.ts +196 -0
- package/dist/schemas/settings-schemas.js +146 -5
- package/dist/schemas/settings-schemas.js.map +1 -1
- package/dist/sdk/index.d.ts +118 -2
- package/dist/sdk/index.js +146 -4
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/testing.d.ts +182 -0
- package/dist/sdk/testing.js +231 -0
- package/dist/sdk/testing.js.map +1 -1
- package/dist/sdk/version.d.ts +114 -15
- package/dist/sdk/version.js +137 -15
- package/dist/sdk/version.js.map +1 -1
- package/dist/tools/bash.js +54 -9
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/registry.d.ts +146 -0
- package/dist/tools/registry.js +170 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/search.js +12 -2
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/text-editor.js +84 -26
- package/dist/tools/text-editor.js.map +1 -1
- package/dist/ui/components/chat-history.js +6 -1
- package/dist/ui/components/chat-history.js.map +1 -1
- package/dist/ui/components/chat-input.d.ts +2 -1
- package/dist/ui/components/chat-input.js +5 -2
- package/dist/ui/components/chat-input.js.map +1 -1
- package/dist/ui/components/chat-interface.js +187 -5
- package/dist/ui/components/chat-interface.js.map +1 -1
- package/dist/ui/components/context-breakdown.d.ts +23 -0
- package/dist/ui/components/context-breakdown.js +124 -0
- package/dist/ui/components/context-breakdown.js.map +1 -0
- package/dist/ui/components/keyboard-help.d.ts +17 -0
- package/dist/ui/components/keyboard-help.js +116 -0
- package/dist/ui/components/keyboard-help.js.map +1 -0
- package/dist/ui/components/keyboard-hints.js +2 -2
- package/dist/ui/components/keyboard-hints.js.map +1 -1
- package/dist/ui/components/quick-actions.js +43 -7
- package/dist/ui/components/quick-actions.js.map +1 -1
- package/dist/ui/components/status-bar.d.ts +3 -0
- package/dist/ui/components/status-bar.js +25 -16
- package/dist/ui/components/status-bar.js.map +1 -1
- package/dist/ui/components/toast-notification.d.ts +42 -0
- package/dist/ui/components/toast-notification.js +30 -2
- package/dist/ui/components/toast-notification.js.map +1 -1
- package/dist/ui/components/tool-group-display.js +34 -4
- package/dist/ui/components/tool-group-display.js.map +1 -1
- package/dist/ui/components/welcome-panel.js +2 -2
- package/dist/ui/components/welcome-panel.js.map +1 -1
- package/dist/ui/hooks/use-enhanced-input.d.ts +9 -1
- package/dist/ui/hooks/use-enhanced-input.js +901 -90
- package/dist/ui/hooks/use-enhanced-input.js.map +1 -1
- package/dist/ui/hooks/use-input-handler.d.ts +11 -1
- package/dist/ui/hooks/use-input-handler.js +67 -3
- package/dist/ui/hooks/use-input-handler.js.map +1 -1
- package/dist/ui/hooks/use-input-history.d.ts +1 -1
- package/dist/ui/hooks/use-input-history.js +50 -14
- package/dist/ui/hooks/use-input-history.js.map +1 -1
- package/dist/ui/utils/bracketed-paste-handler.d.ts +97 -0
- package/dist/ui/utils/bracketed-paste-handler.js +322 -0
- package/dist/ui/utils/bracketed-paste-handler.js.map +1 -0
- package/dist/ui/utils/change-summarizer.js +16 -6
- package/dist/ui/utils/change-summarizer.js.map +1 -1
- package/dist/ui/utils/tool-grouper.d.ts +10 -1
- package/dist/ui/utils/tool-grouper.js +143 -30
- package/dist/ui/utils/tool-grouper.js.map +1 -1
- package/dist/utils/auto-accept-logger.d.ts +173 -0
- package/dist/utils/auto-accept-logger.js +420 -0
- package/dist/utils/auto-accept-logger.js.map +1 -0
- package/dist/utils/background-task-manager.d.ts +11 -0
- package/dist/utils/background-task-manager.js +124 -38
- package/dist/utils/background-task-manager.js.map +1 -1
- package/dist/utils/confirmation-service.d.ts +1 -0
- package/dist/utils/confirmation-service.js +6 -1
- package/dist/utils/confirmation-service.js.map +1 -1
- package/dist/utils/encryption.d.ts +8 -0
- package/dist/utils/encryption.js +44 -27
- package/dist/utils/encryption.js.map +1 -1
- package/dist/utils/enhanced-error-messages.d.ts +33 -0
- package/dist/utils/enhanced-error-messages.js +420 -0
- package/dist/utils/enhanced-error-messages.js.map +1 -0
- package/dist/utils/error-handler.d.ts +13 -3
- package/dist/utils/error-handler.js +16 -4
- package/dist/utils/error-handler.js.map +1 -1
- package/dist/utils/external-editor.d.ts +47 -0
- package/dist/utils/external-editor.js +179 -0
- package/dist/utils/external-editor.js.map +1 -0
- package/dist/utils/history-migration.d.ts +9 -0
- package/dist/utils/history-migration.js +36 -0
- package/dist/utils/history-migration.js.map +1 -0
- package/dist/utils/paste-utils.js +12 -11
- package/dist/utils/paste-utils.js.map +1 -1
- package/dist/utils/rate-limiter.js +20 -1
- package/dist/utils/rate-limiter.js.map +1 -1
- package/dist/utils/safety-rules.d.ts +64 -0
- package/dist/utils/safety-rules.js +225 -0
- package/dist/utils/safety-rules.js.map +1 -0
- package/dist/utils/settings-manager.d.ts +89 -1
- package/dist/utils/settings-manager.js +359 -3
- package/dist/utils/settings-manager.js.map +1 -1
- package/dist/utils/token-counter.d.ts +2 -0
- package/dist/utils/token-counter.js +32 -9
- package/dist/utils/token-counter.js.map +1 -1
- package/dist/utils/version.d.ts +11 -2
- package/dist/utils/version.js +54 -21
- package/dist/utils/version.js.map +1 -1
- 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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"}
|
package/dist/mcp/config.d.ts
CHANGED
|
@@ -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;
|
package/dist/mcp/config.js
CHANGED
|
@@ -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
|
-
|
|
23
|
+
// Load ax-cli servers
|
|
24
|
+
const axCliRawServers = projectSettings.mcpServers
|
|
11
25
|
? Object.values(projectSettings.mcpServers)
|
|
12
26
|
: [];
|
|
13
|
-
//
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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();
|
package/dist/mcp/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;
|
|
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;
|