wyrm-mcp 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +667 -0
- package/README.md +384 -0
- package/dist/analytics.d.ts +100 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +368 -0
- package/dist/analytics.js.map +1 -0
- package/dist/auto-orchestrator.d.ts +118 -0
- package/dist/auto-orchestrator.d.ts.map +1 -0
- package/dist/auto-orchestrator.js +325 -0
- package/dist/auto-orchestrator.js.map +1 -0
- package/dist/autoconfig.d.ts +89 -0
- package/dist/autoconfig.d.ts.map +1 -0
- package/dist/autoconfig.js +576 -0
- package/dist/autoconfig.js.map +1 -0
- package/dist/cli.d.ts +148 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +281 -0
- package/dist/cli.js.map +1 -0
- package/dist/cloud-backup.d.ts +100 -0
- package/dist/cloud-backup.d.ts.map +1 -0
- package/dist/cloud-backup.js +545 -0
- package/dist/cloud-backup.js.map +1 -0
- package/dist/crypto.d.ts +72 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +164 -0
- package/dist/crypto.js.map +1 -0
- package/dist/database.d.ts +218 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +1058 -0
- package/dist/database.js.map +1 -0
- package/dist/http-auth.d.ts +68 -0
- package/dist/http-auth.d.ts.map +1 -0
- package/dist/http-auth.js +296 -0
- package/dist/http-auth.js.map +1 -0
- package/dist/http-fast.d.ts +13 -0
- package/dist/http-fast.d.ts.map +1 -0
- package/dist/http-fast.js +325 -0
- package/dist/http-fast.js.map +1 -0
- package/dist/http-server.d.ts +12 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +383 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1695 -0
- package/dist/index.js.map +1 -0
- package/dist/license.d.ts +177 -0
- package/dist/license.d.ts.map +1 -0
- package/dist/license.js +405 -0
- package/dist/license.js.map +1 -0
- package/dist/logger.d.ts +76 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +195 -0
- package/dist/logger.js.map +1 -0
- package/dist/performance.d.ts +114 -0
- package/dist/performance.d.ts.map +1 -0
- package/dist/performance.js +228 -0
- package/dist/performance.js.map +1 -0
- package/dist/resilience.d.ts +146 -0
- package/dist/resilience.d.ts.map +1 -0
- package/dist/resilience.js +563 -0
- package/dist/resilience.js.map +1 -0
- package/dist/security.d.ts +68 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +215 -0
- package/dist/security.js.map +1 -0
- package/dist/setup.d.ts +21 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +261 -0
- package/dist/setup.js.map +1 -0
- package/dist/summarizer.d.ts +30 -0
- package/dist/summarizer.d.ts.map +1 -0
- package/dist/summarizer.js +139 -0
- package/dist/summarizer.js.map +1 -0
- package/dist/sync.d.ts +39 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +356 -0
- package/dist/sync.js.map +1 -0
- package/dist/types.d.ts +267 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +30 -0
- package/dist/types.js.map +1 -0
- package/dist/vectors.d.ts +103 -0
- package/dist/vectors.d.ts.map +1 -0
- package/dist/vectors.js +311 -0
- package/dist/vectors.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,576 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wyrm Auto-Configure - Universal AI Client Detection & Setup
|
|
3
|
+
*
|
|
4
|
+
* Automatically detects installed AI clients (VS Code Copilot, Claude Desktop,
|
|
5
|
+
* Cursor, Windsurf, Zed, etc.) and configures Wyrm's MCP server in each.
|
|
6
|
+
* Handles provider switching seamlessly — change your AI, Wyrm follows.
|
|
7
|
+
*
|
|
8
|
+
* @copyright 2026 Ghost Protocol (Pvt) Ltd. All Rights Reserved.
|
|
9
|
+
* @license Proprietary - See LICENSE file for details.
|
|
10
|
+
* @module autoconfig
|
|
11
|
+
* @version 3.0.0
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
14
|
+
import { homedir, platform } from 'os';
|
|
15
|
+
import { join, dirname, resolve } from 'path';
|
|
16
|
+
import { spawnSync } from 'child_process';
|
|
17
|
+
// ==================== CLIENT DEFINITIONS ====================
|
|
18
|
+
function getConfigPaths() {
|
|
19
|
+
const home = homedir();
|
|
20
|
+
const os = platform();
|
|
21
|
+
// Base config directories per OS
|
|
22
|
+
const vscodeBase = os === 'darwin'
|
|
23
|
+
? join(home, 'Library', 'Application Support', 'Code', 'User')
|
|
24
|
+
: os === 'win32'
|
|
25
|
+
? join(home, 'AppData', 'Roaming', 'Code', 'User')
|
|
26
|
+
: join(home, '.config', 'Code', 'User');
|
|
27
|
+
const vscodeInsidersBase = os === 'darwin'
|
|
28
|
+
? join(home, 'Library', 'Application Support', 'Code - Insiders', 'User')
|
|
29
|
+
: os === 'win32'
|
|
30
|
+
? join(home, 'AppData', 'Roaming', 'Code - Insiders', 'User')
|
|
31
|
+
: join(home, '.config', 'Code - Insiders', 'User');
|
|
32
|
+
const claudeBase = os === 'darwin'
|
|
33
|
+
? join(home, 'Library', 'Application Support', 'Claude')
|
|
34
|
+
: os === 'win32'
|
|
35
|
+
? join(home, 'AppData', 'Roaming', 'Claude')
|
|
36
|
+
: join(home, '.config', 'claude');
|
|
37
|
+
const cursorBase = os === 'darwin'
|
|
38
|
+
? join(home, '.cursor')
|
|
39
|
+
: os === 'win32'
|
|
40
|
+
? join(home, '.cursor')
|
|
41
|
+
: join(home, '.cursor');
|
|
42
|
+
const windsurfBase = os === 'darwin'
|
|
43
|
+
? join(home, '.codeium', 'windsurf')
|
|
44
|
+
: os === 'win32'
|
|
45
|
+
? join(home, '.codeium', 'windsurf')
|
|
46
|
+
: join(home, '.codeium', 'windsurf');
|
|
47
|
+
const zedBase = os === 'darwin'
|
|
48
|
+
? join(home, '.config', 'zed')
|
|
49
|
+
: os === 'win32'
|
|
50
|
+
? join(home, 'AppData', 'Roaming', 'Zed')
|
|
51
|
+
: join(home, '.config', 'zed');
|
|
52
|
+
const continueBase = join(home, '.continue');
|
|
53
|
+
return [
|
|
54
|
+
{
|
|
55
|
+
id: 'vscode-copilot',
|
|
56
|
+
name: 'VS Code (Copilot)',
|
|
57
|
+
icon: '💻',
|
|
58
|
+
configPath: join(vscodeBase, 'settings.json'),
|
|
59
|
+
configFormat: 'vscode',
|
|
60
|
+
mcpKey: 'mcp.servers',
|
|
61
|
+
detected: false,
|
|
62
|
+
configured: false,
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: 'vscode-insiders',
|
|
66
|
+
name: 'VS Code Insiders',
|
|
67
|
+
icon: '🟢',
|
|
68
|
+
configPath: join(vscodeInsidersBase, 'settings.json'),
|
|
69
|
+
configFormat: 'vscode',
|
|
70
|
+
mcpKey: 'mcp.servers',
|
|
71
|
+
detected: false,
|
|
72
|
+
configured: false,
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: 'claude-desktop',
|
|
76
|
+
name: 'Claude Desktop',
|
|
77
|
+
icon: '🤖',
|
|
78
|
+
configPath: join(claudeBase, 'claude_desktop_config.json'),
|
|
79
|
+
configFormat: 'mcp-json',
|
|
80
|
+
mcpKey: 'mcpServers',
|
|
81
|
+
detected: false,
|
|
82
|
+
configured: false,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: 'cursor',
|
|
86
|
+
name: 'Cursor',
|
|
87
|
+
icon: '📐',
|
|
88
|
+
configPath: join(cursorBase, 'mcp.json'),
|
|
89
|
+
configFormat: 'mcp-json',
|
|
90
|
+
mcpKey: 'mcpServers',
|
|
91
|
+
detected: false,
|
|
92
|
+
configured: false,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
id: 'windsurf',
|
|
96
|
+
name: 'Windsurf',
|
|
97
|
+
icon: '🏄',
|
|
98
|
+
configPath: join(windsurfBase, 'mcp_config.json'),
|
|
99
|
+
configFormat: 'mcp-json',
|
|
100
|
+
mcpKey: 'mcpServers',
|
|
101
|
+
detected: false,
|
|
102
|
+
configured: false,
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
id: 'zed',
|
|
106
|
+
name: 'Zed',
|
|
107
|
+
icon: '⚡',
|
|
108
|
+
configPath: join(zedBase, 'settings.json'),
|
|
109
|
+
configFormat: 'zed',
|
|
110
|
+
mcpKey: 'context_servers',
|
|
111
|
+
detected: false,
|
|
112
|
+
configured: false,
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
id: 'continue',
|
|
116
|
+
name: 'Continue',
|
|
117
|
+
icon: '🔄',
|
|
118
|
+
configPath: join(continueBase, 'config.json'),
|
|
119
|
+
configFormat: 'mcp-json',
|
|
120
|
+
mcpKey: 'mcpServers',
|
|
121
|
+
detected: false,
|
|
122
|
+
configured: false,
|
|
123
|
+
},
|
|
124
|
+
];
|
|
125
|
+
}
|
|
126
|
+
// ==================== DETECTION ====================
|
|
127
|
+
/**
|
|
128
|
+
* Detect which AI clients are installed by checking for their config directories
|
|
129
|
+
*/
|
|
130
|
+
export function detectClients() {
|
|
131
|
+
const clients = getConfigPaths();
|
|
132
|
+
for (const client of clients) {
|
|
133
|
+
// Check if config directory exists (the client is installed)
|
|
134
|
+
const configDir = dirname(client.configPath);
|
|
135
|
+
client.detected = existsSync(configDir);
|
|
136
|
+
// Check if Wyrm is already configured
|
|
137
|
+
if (client.detected && existsSync(client.configPath)) {
|
|
138
|
+
try {
|
|
139
|
+
const content = readFileSync(client.configPath, 'utf-8');
|
|
140
|
+
const config = parseJsonWithComments(content);
|
|
141
|
+
client.configured = hasWyrmConfig(config, client);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
client.configured = false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Try to detect version
|
|
148
|
+
if (client.detected) {
|
|
149
|
+
client.version = detectClientVersion(client);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return clients;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Detect the version of an AI client
|
|
156
|
+
*/
|
|
157
|
+
function detectClientVersion(client) {
|
|
158
|
+
try {
|
|
159
|
+
switch (client.id) {
|
|
160
|
+
case 'vscode-copilot':
|
|
161
|
+
case 'vscode-insiders': {
|
|
162
|
+
const cmd = client.id === 'vscode-insiders' ? 'code-insiders' : 'code';
|
|
163
|
+
const result = spawnSync(cmd, ['--version'], { encoding: 'utf-8', timeout: 5000 });
|
|
164
|
+
if (result.stdout)
|
|
165
|
+
return result.stdout.split('\n')[0];
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
case 'cursor': {
|
|
169
|
+
const result = spawnSync('cursor', ['--version'], { encoding: 'utf-8', timeout: 5000 });
|
|
170
|
+
if (result.stdout)
|
|
171
|
+
return result.stdout.split('\n')[0];
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// Version detection is optional
|
|
178
|
+
}
|
|
179
|
+
return undefined;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Check if Wyrm is already configured in a client's config
|
|
183
|
+
*/
|
|
184
|
+
function hasWyrmConfig(config, client) {
|
|
185
|
+
switch (client.configFormat) {
|
|
186
|
+
case 'vscode': {
|
|
187
|
+
const mcp = config['mcp'];
|
|
188
|
+
const servers = mcp?.['servers'];
|
|
189
|
+
return servers?.['wyrm'] !== undefined;
|
|
190
|
+
}
|
|
191
|
+
case 'mcp-json': {
|
|
192
|
+
const servers = config[client.mcpKey];
|
|
193
|
+
return servers?.['wyrm'] !== undefined;
|
|
194
|
+
}
|
|
195
|
+
case 'zed': {
|
|
196
|
+
const servers = config[client.mcpKey];
|
|
197
|
+
return servers?.['wyrm'] !== undefined;
|
|
198
|
+
}
|
|
199
|
+
default:
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// ==================== CONFIGURATION ====================
|
|
204
|
+
/**
|
|
205
|
+
* Auto-detect Wyrm server path
|
|
206
|
+
*/
|
|
207
|
+
export function findWyrmServerPath() {
|
|
208
|
+
// 1. Check if wyrm-mcp binary is in PATH
|
|
209
|
+
try {
|
|
210
|
+
const result = spawnSync('which', ['wyrm-mcp'], { encoding: 'utf-8', timeout: 5000 });
|
|
211
|
+
if (result.stdout?.trim()) {
|
|
212
|
+
return result.stdout.trim();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
catch { }
|
|
216
|
+
// 2. Check common npm global install locations
|
|
217
|
+
try {
|
|
218
|
+
const result = spawnSync('npm', ['root', '-g'], { encoding: 'utf-8', timeout: 5000 });
|
|
219
|
+
const globalDir = result.stdout?.trim();
|
|
220
|
+
if (globalDir) {
|
|
221
|
+
const globalPath = join(globalDir, 'wyrm-mcp', 'dist', 'index.js');
|
|
222
|
+
if (existsSync(globalPath))
|
|
223
|
+
return globalPath;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
catch { }
|
|
227
|
+
// 3. Check local development path (relative to this file)
|
|
228
|
+
const devPath = resolve(__dirname, 'index.js');
|
|
229
|
+
if (existsSync(devPath))
|
|
230
|
+
return devPath;
|
|
231
|
+
// 4. Check ~/.wyrm/node_modules
|
|
232
|
+
const wyrmModulesPath = join(homedir(), '.wyrm', 'node_modules', 'wyrm-mcp', 'dist', 'index.js');
|
|
233
|
+
if (existsSync(wyrmModulesPath))
|
|
234
|
+
return wyrmModulesPath;
|
|
235
|
+
// 5. Check common project locations
|
|
236
|
+
const projectLocations = [
|
|
237
|
+
join(homedir(), 'Git Projects', 'Wyrm', 'packages', 'mcp-server', 'dist', 'index.js'),
|
|
238
|
+
join(homedir(), 'projects', 'Wyrm', 'packages', 'mcp-server', 'dist', 'index.js'),
|
|
239
|
+
join(homedir(), 'dev', 'Wyrm', 'packages', 'mcp-server', 'dist', 'index.js'),
|
|
240
|
+
];
|
|
241
|
+
for (const loc of projectLocations) {
|
|
242
|
+
if (existsSync(loc))
|
|
243
|
+
return loc;
|
|
244
|
+
}
|
|
245
|
+
// 6. Fallback to npx
|
|
246
|
+
return 'wyrm-mcp';
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Get the default Wyrm database path
|
|
250
|
+
*/
|
|
251
|
+
export function getDefaultDbPath() {
|
|
252
|
+
return join(homedir(), '.wyrm', 'wyrm.db');
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Build the Wyrm MCP config object for a specific client format
|
|
256
|
+
*/
|
|
257
|
+
function buildWyrmMcpConfig(client, wyrmConfig) {
|
|
258
|
+
const serverPath = wyrmConfig.serverPath;
|
|
259
|
+
const isNpx = serverPath === 'wyrm-mcp';
|
|
260
|
+
const isJsFile = serverPath.endsWith('.js');
|
|
261
|
+
switch (client.configFormat) {
|
|
262
|
+
case 'vscode':
|
|
263
|
+
return {
|
|
264
|
+
command: isNpx ? 'npx' : 'node',
|
|
265
|
+
args: isNpx ? ['wyrm-mcp'] : [serverPath],
|
|
266
|
+
env: {
|
|
267
|
+
WYRM_DB: wyrmConfig.dbPath,
|
|
268
|
+
},
|
|
269
|
+
};
|
|
270
|
+
case 'mcp-json':
|
|
271
|
+
return {
|
|
272
|
+
command: isNpx ? 'npx' : 'node',
|
|
273
|
+
args: isNpx ? ['wyrm-mcp'] : [serverPath],
|
|
274
|
+
env: {
|
|
275
|
+
WYRM_DB: wyrmConfig.dbPath,
|
|
276
|
+
},
|
|
277
|
+
};
|
|
278
|
+
case 'zed':
|
|
279
|
+
return {
|
|
280
|
+
command: isNpx ? 'npx' : 'node',
|
|
281
|
+
args: isNpx ? ['wyrm-mcp'] : [serverPath],
|
|
282
|
+
env: {
|
|
283
|
+
WYRM_DB: wyrmConfig.dbPath,
|
|
284
|
+
},
|
|
285
|
+
};
|
|
286
|
+
default:
|
|
287
|
+
return {};
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Configure Wyrm in a single AI client
|
|
292
|
+
*/
|
|
293
|
+
export function configureClient(client, wyrmConfig) {
|
|
294
|
+
if (!client.detected) {
|
|
295
|
+
return {
|
|
296
|
+
client,
|
|
297
|
+
action: 'skipped',
|
|
298
|
+
message: `${client.name} not detected`,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
try {
|
|
302
|
+
// Ensure config directory exists
|
|
303
|
+
const configDir = dirname(client.configPath);
|
|
304
|
+
if (!existsSync(configDir)) {
|
|
305
|
+
mkdirSync(configDir, { recursive: true });
|
|
306
|
+
}
|
|
307
|
+
// Read existing config or create new
|
|
308
|
+
let config = {};
|
|
309
|
+
let existed = false;
|
|
310
|
+
if (existsSync(client.configPath)) {
|
|
311
|
+
try {
|
|
312
|
+
const content = readFileSync(client.configPath, 'utf-8');
|
|
313
|
+
config = parseJsonWithComments(content);
|
|
314
|
+
existed = true;
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
// If config exists but is invalid, start fresh
|
|
318
|
+
config = {};
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
// Create backup before modifying
|
|
322
|
+
let backupPath;
|
|
323
|
+
if (existed) {
|
|
324
|
+
backupPath = `${client.configPath}.wyrm-backup`;
|
|
325
|
+
writeFileSync(backupPath, readFileSync(client.configPath));
|
|
326
|
+
}
|
|
327
|
+
// Build Wyrm MCP entry
|
|
328
|
+
const wyrmEntry = buildWyrmMcpConfig(client, wyrmConfig);
|
|
329
|
+
// Inject into config based on format
|
|
330
|
+
switch (client.configFormat) {
|
|
331
|
+
case 'vscode': {
|
|
332
|
+
// VS Code: { "mcp": { "servers": { "wyrm": {...} } } }
|
|
333
|
+
if (!config['mcp'])
|
|
334
|
+
config['mcp'] = {};
|
|
335
|
+
const mcp = config['mcp'];
|
|
336
|
+
if (!mcp['servers'])
|
|
337
|
+
mcp['servers'] = {};
|
|
338
|
+
const servers = mcp['servers'];
|
|
339
|
+
servers['wyrm'] = wyrmEntry;
|
|
340
|
+
break;
|
|
341
|
+
}
|
|
342
|
+
case 'mcp-json': {
|
|
343
|
+
// MCP JSON: { "mcpServers": { "wyrm": {...} } }
|
|
344
|
+
if (!config[client.mcpKey])
|
|
345
|
+
config[client.mcpKey] = {};
|
|
346
|
+
const servers = config[client.mcpKey];
|
|
347
|
+
servers['wyrm'] = wyrmEntry;
|
|
348
|
+
break;
|
|
349
|
+
}
|
|
350
|
+
case 'zed': {
|
|
351
|
+
// Zed: { "context_servers": { "wyrm": {...} } }
|
|
352
|
+
if (!config[client.mcpKey])
|
|
353
|
+
config[client.mcpKey] = {};
|
|
354
|
+
const servers = config[client.mcpKey];
|
|
355
|
+
servers['wyrm'] = wyrmEntry;
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
// Write config back
|
|
360
|
+
writeFileSync(client.configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
361
|
+
const action = client.configured ? 'updated' : 'configured';
|
|
362
|
+
client.configured = true;
|
|
363
|
+
return {
|
|
364
|
+
client,
|
|
365
|
+
action,
|
|
366
|
+
message: `${client.name} ${action === 'configured' ? 'configured' : 'updated'} successfully`,
|
|
367
|
+
backup: backupPath,
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
catch (error) {
|
|
371
|
+
return {
|
|
372
|
+
client,
|
|
373
|
+
action: 'failed',
|
|
374
|
+
message: `Failed to configure ${client.name}: ${error}`,
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Remove Wyrm from a single AI client
|
|
380
|
+
*/
|
|
381
|
+
export function removeFromClient(client) {
|
|
382
|
+
if (!client.detected || !client.configured) {
|
|
383
|
+
return {
|
|
384
|
+
client,
|
|
385
|
+
action: 'skipped',
|
|
386
|
+
message: `${client.name} not configured`,
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
try {
|
|
390
|
+
if (!existsSync(client.configPath)) {
|
|
391
|
+
return { client, action: 'skipped', message: `${client.name} config not found` };
|
|
392
|
+
}
|
|
393
|
+
const content = readFileSync(client.configPath, 'utf-8');
|
|
394
|
+
const config = parseJsonWithComments(content);
|
|
395
|
+
// Create backup
|
|
396
|
+
const backupPath = `${client.configPath}.wyrm-backup`;
|
|
397
|
+
writeFileSync(backupPath, content);
|
|
398
|
+
// Remove Wyrm entry
|
|
399
|
+
switch (client.configFormat) {
|
|
400
|
+
case 'vscode': {
|
|
401
|
+
const mcp = config['mcp'];
|
|
402
|
+
const servers = mcp?.['servers'];
|
|
403
|
+
if (servers)
|
|
404
|
+
delete servers['wyrm'];
|
|
405
|
+
break;
|
|
406
|
+
}
|
|
407
|
+
case 'mcp-json':
|
|
408
|
+
case 'zed': {
|
|
409
|
+
const servers = config[client.mcpKey];
|
|
410
|
+
if (servers)
|
|
411
|
+
delete servers['wyrm'];
|
|
412
|
+
break;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
writeFileSync(client.configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
416
|
+
client.configured = false;
|
|
417
|
+
return {
|
|
418
|
+
client,
|
|
419
|
+
action: 'configured',
|
|
420
|
+
message: `Removed Wyrm from ${client.name}`,
|
|
421
|
+
backup: backupPath,
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
catch (error) {
|
|
425
|
+
return {
|
|
426
|
+
client,
|
|
427
|
+
action: 'failed',
|
|
428
|
+
message: `Failed to remove from ${client.name}: ${error}`,
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
// ==================== ORCHESTRATION ====================
|
|
433
|
+
/**
|
|
434
|
+
* Auto-configure Wyrm in ALL detected AI clients
|
|
435
|
+
*/
|
|
436
|
+
export function autoConfigureAll(wyrmConfig) {
|
|
437
|
+
const config = {
|
|
438
|
+
serverPath: wyrmConfig?.serverPath || findWyrmServerPath(),
|
|
439
|
+
dbPath: wyrmConfig?.dbPath || getDefaultDbPath(),
|
|
440
|
+
httpPort: wyrmConfig?.httpPort,
|
|
441
|
+
};
|
|
442
|
+
// Ensure .wyrm directory exists
|
|
443
|
+
const wyrmDir = join(homedir(), '.wyrm');
|
|
444
|
+
if (!existsSync(wyrmDir)) {
|
|
445
|
+
mkdirSync(wyrmDir, { recursive: true });
|
|
446
|
+
}
|
|
447
|
+
// Save Wyrm's own config for future reference
|
|
448
|
+
saveWyrmMeta(config);
|
|
449
|
+
const clients = detectClients();
|
|
450
|
+
const results = [];
|
|
451
|
+
for (const client of clients) {
|
|
452
|
+
results.push(configureClient(client, config));
|
|
453
|
+
}
|
|
454
|
+
return results;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Remove Wyrm from ALL AI clients
|
|
458
|
+
*/
|
|
459
|
+
export function removeFromAll() {
|
|
460
|
+
const clients = detectClients();
|
|
461
|
+
const results = [];
|
|
462
|
+
for (const client of clients) {
|
|
463
|
+
results.push(removeFromClient(client));
|
|
464
|
+
}
|
|
465
|
+
return results;
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Configure Wyrm in specific clients only
|
|
469
|
+
*/
|
|
470
|
+
export function configureSpecific(clientIds, wyrmConfig) {
|
|
471
|
+
const config = {
|
|
472
|
+
serverPath: wyrmConfig?.serverPath || findWyrmServerPath(),
|
|
473
|
+
dbPath: wyrmConfig?.dbPath || getDefaultDbPath(),
|
|
474
|
+
httpPort: wyrmConfig?.httpPort,
|
|
475
|
+
};
|
|
476
|
+
saveWyrmMeta(config);
|
|
477
|
+
const clients = detectClients();
|
|
478
|
+
const results = [];
|
|
479
|
+
for (const client of clients) {
|
|
480
|
+
if (clientIds.includes(client.id)) {
|
|
481
|
+
results.push(configureClient(client, config));
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
return results;
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Save Wyrm's meta configuration for auto-updates
|
|
488
|
+
*/
|
|
489
|
+
function saveWyrmMeta(config) {
|
|
490
|
+
const metaPath = join(homedir(), '.wyrm', 'wyrm-config.json');
|
|
491
|
+
const clients = detectClients().filter(c => c.configured).map(c => c.id);
|
|
492
|
+
const meta = {
|
|
493
|
+
version: '3.0.0',
|
|
494
|
+
serverPath: config.serverPath,
|
|
495
|
+
dbPath: config.dbPath,
|
|
496
|
+
httpPort: config.httpPort,
|
|
497
|
+
configuredClients: clients,
|
|
498
|
+
lastSetup: new Date().toISOString(),
|
|
499
|
+
autoUpdate: true,
|
|
500
|
+
};
|
|
501
|
+
writeFileSync(metaPath, JSON.stringify(meta, null, 2) + '\n', 'utf-8');
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Load Wyrm's meta configuration
|
|
505
|
+
*/
|
|
506
|
+
export function loadWyrmMeta() {
|
|
507
|
+
const metaPath = join(homedir(), '.wyrm', 'wyrm-config.json');
|
|
508
|
+
if (!existsSync(metaPath))
|
|
509
|
+
return null;
|
|
510
|
+
try {
|
|
511
|
+
return JSON.parse(readFileSync(metaPath, 'utf-8'));
|
|
512
|
+
}
|
|
513
|
+
catch {
|
|
514
|
+
return null;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* Re-configure all previously configured clients (for use after updates)
|
|
519
|
+
*/
|
|
520
|
+
export function reconfAll() {
|
|
521
|
+
const meta = loadWyrmMeta();
|
|
522
|
+
if (!meta) {
|
|
523
|
+
return autoConfigureAll();
|
|
524
|
+
}
|
|
525
|
+
return configureSpecific(meta.configuredClients, {
|
|
526
|
+
serverPath: meta.serverPath,
|
|
527
|
+
dbPath: meta.dbPath,
|
|
528
|
+
httpPort: meta.httpPort,
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
// ==================== UTILITIES ====================
|
|
532
|
+
/**
|
|
533
|
+
* Parse JSON with comments (JSONC) - handles VS Code settings files
|
|
534
|
+
*/
|
|
535
|
+
function parseJsonWithComments(text) {
|
|
536
|
+
// Strip single-line comments
|
|
537
|
+
let cleaned = text.replace(/\/\/.*$/gm, '');
|
|
538
|
+
// Strip multi-line comments
|
|
539
|
+
cleaned = cleaned.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
540
|
+
// Handle trailing commas (common in VS Code settings)
|
|
541
|
+
cleaned = cleaned.replace(/,\s*([\]}])/g, '$1');
|
|
542
|
+
return JSON.parse(cleaned);
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* Get a friendly status summary of all AI clients
|
|
546
|
+
*/
|
|
547
|
+
export function getStatusSummary() {
|
|
548
|
+
const clients = detectClients();
|
|
549
|
+
const detected = clients.filter(c => c.detected);
|
|
550
|
+
const configured = clients.filter(c => c.configured);
|
|
551
|
+
let summary = `🐉 Wyrm Auto-Configure Status\n\n`;
|
|
552
|
+
summary += ` Detected: ${detected.length}/${clients.length} AI clients\n`;
|
|
553
|
+
summary += ` Configured: ${configured.length}/${detected.length} clients\n\n`;
|
|
554
|
+
for (const client of clients) {
|
|
555
|
+
const status = !client.detected
|
|
556
|
+
? ' ○' // Not installed
|
|
557
|
+
: client.configured
|
|
558
|
+
? ' ●' // Configured
|
|
559
|
+
: ' ◐'; // Installed but not configured
|
|
560
|
+
const versionStr = client.version ? ` (${client.version})` : '';
|
|
561
|
+
const statusLabel = !client.detected
|
|
562
|
+
? 'not found'
|
|
563
|
+
: client.configured
|
|
564
|
+
? 'configured ✓'
|
|
565
|
+
: 'detected — not configured';
|
|
566
|
+
summary += `${status} ${client.icon} ${client.name}${versionStr}: ${statusLabel}\n`;
|
|
567
|
+
}
|
|
568
|
+
const meta = loadWyrmMeta();
|
|
569
|
+
if (meta) {
|
|
570
|
+
summary += `\n Server: ${meta.serverPath}\n`;
|
|
571
|
+
summary += ` DB: ${meta.dbPath}\n`;
|
|
572
|
+
summary += ` Last: ${new Date(meta.lastSetup).toLocaleString()}\n`;
|
|
573
|
+
}
|
|
574
|
+
return summary;
|
|
575
|
+
}
|
|
576
|
+
//# sourceMappingURL=autoconfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoconfig.js","sourceRoot":"","sources":["../src/autoconfig.ts"],"names":[],"mappings":"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"}
|