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.
Files changed (87) hide show
  1. package/LICENSE +667 -0
  2. package/README.md +384 -0
  3. package/dist/analytics.d.ts +100 -0
  4. package/dist/analytics.d.ts.map +1 -0
  5. package/dist/analytics.js +368 -0
  6. package/dist/analytics.js.map +1 -0
  7. package/dist/auto-orchestrator.d.ts +118 -0
  8. package/dist/auto-orchestrator.d.ts.map +1 -0
  9. package/dist/auto-orchestrator.js +325 -0
  10. package/dist/auto-orchestrator.js.map +1 -0
  11. package/dist/autoconfig.d.ts +89 -0
  12. package/dist/autoconfig.d.ts.map +1 -0
  13. package/dist/autoconfig.js +576 -0
  14. package/dist/autoconfig.js.map +1 -0
  15. package/dist/cli.d.ts +148 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +281 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/cloud-backup.d.ts +100 -0
  20. package/dist/cloud-backup.d.ts.map +1 -0
  21. package/dist/cloud-backup.js +545 -0
  22. package/dist/cloud-backup.js.map +1 -0
  23. package/dist/crypto.d.ts +72 -0
  24. package/dist/crypto.d.ts.map +1 -0
  25. package/dist/crypto.js +164 -0
  26. package/dist/crypto.js.map +1 -0
  27. package/dist/database.d.ts +218 -0
  28. package/dist/database.d.ts.map +1 -0
  29. package/dist/database.js +1058 -0
  30. package/dist/database.js.map +1 -0
  31. package/dist/http-auth.d.ts +68 -0
  32. package/dist/http-auth.d.ts.map +1 -0
  33. package/dist/http-auth.js +296 -0
  34. package/dist/http-auth.js.map +1 -0
  35. package/dist/http-fast.d.ts +13 -0
  36. package/dist/http-fast.d.ts.map +1 -0
  37. package/dist/http-fast.js +325 -0
  38. package/dist/http-fast.js.map +1 -0
  39. package/dist/http-server.d.ts +12 -0
  40. package/dist/http-server.d.ts.map +1 -0
  41. package/dist/http-server.js +383 -0
  42. package/dist/http-server.js.map +1 -0
  43. package/dist/index.d.ts +19 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +1695 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/license.d.ts +177 -0
  48. package/dist/license.d.ts.map +1 -0
  49. package/dist/license.js +405 -0
  50. package/dist/license.js.map +1 -0
  51. package/dist/logger.d.ts +76 -0
  52. package/dist/logger.d.ts.map +1 -0
  53. package/dist/logger.js +195 -0
  54. package/dist/logger.js.map +1 -0
  55. package/dist/performance.d.ts +114 -0
  56. package/dist/performance.d.ts.map +1 -0
  57. package/dist/performance.js +228 -0
  58. package/dist/performance.js.map +1 -0
  59. package/dist/resilience.d.ts +146 -0
  60. package/dist/resilience.d.ts.map +1 -0
  61. package/dist/resilience.js +563 -0
  62. package/dist/resilience.js.map +1 -0
  63. package/dist/security.d.ts +68 -0
  64. package/dist/security.d.ts.map +1 -0
  65. package/dist/security.js +215 -0
  66. package/dist/security.js.map +1 -0
  67. package/dist/setup.d.ts +21 -0
  68. package/dist/setup.d.ts.map +1 -0
  69. package/dist/setup.js +261 -0
  70. package/dist/setup.js.map +1 -0
  71. package/dist/summarizer.d.ts +30 -0
  72. package/dist/summarizer.d.ts.map +1 -0
  73. package/dist/summarizer.js +139 -0
  74. package/dist/summarizer.js.map +1 -0
  75. package/dist/sync.d.ts +39 -0
  76. package/dist/sync.d.ts.map +1 -0
  77. package/dist/sync.js +356 -0
  78. package/dist/sync.js.map +1 -0
  79. package/dist/types.d.ts +267 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +30 -0
  82. package/dist/types.js.map +1 -0
  83. package/dist/vectors.d.ts +103 -0
  84. package/dist/vectors.d.ts.map +1 -0
  85. package/dist/vectors.js +311 -0
  86. package/dist/vectors.js.map +1 -0
  87. 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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"}