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,215 @@
1
+ /**
2
+ * Wyrm Security Module - Input validation and path security
3
+ *
4
+ * @copyright 2026 Ghost Protocol (Pvt) Ltd. All Rights Reserved.
5
+ * @license Proprietary - See LICENSE file for details.
6
+ * @module security
7
+ * @version 3.0.0
8
+ */
9
+ import { resolve, relative, normalize, sep } from 'path';
10
+ import { existsSync, statSync } from 'fs';
11
+ import { homedir } from 'os';
12
+ import { createHash } from 'crypto';
13
+ // ==================== PATH SECURITY ====================
14
+ /**
15
+ * Validate and sanitize a path to prevent traversal attacks
16
+ */
17
+ export function validatePath(basePath, targetPath) {
18
+ const normalizedBase = normalize(resolve(basePath));
19
+ const normalizedTarget = normalize(resolve(basePath, targetPath));
20
+ // Check if target is within base
21
+ const rel = relative(normalizedBase, normalizedTarget);
22
+ if (rel.startsWith('..') || rel.startsWith(sep)) {
23
+ throw new SecurityError('Path traversal detected', 'PATH_TRAVERSAL');
24
+ }
25
+ // Double-check resolved path
26
+ if (!normalizedTarget.startsWith(normalizedBase)) {
27
+ throw new SecurityError('Path traversal detected', 'PATH_TRAVERSAL');
28
+ }
29
+ return normalizedTarget;
30
+ }
31
+ /**
32
+ * Check if a path is a valid directory
33
+ */
34
+ export function validateDirectory(path) {
35
+ try {
36
+ return existsSync(path) && statSync(path).isDirectory();
37
+ }
38
+ catch {
39
+ return false;
40
+ }
41
+ }
42
+ /**
43
+ * Validate project path is within allowed directories
44
+ */
45
+ export function validateProjectPath(projectPath) {
46
+ const normalizedPath = normalize(resolve(projectPath));
47
+ // List of allowed root directories
48
+ const allowedRoots = [
49
+ normalize(resolve(homedir(), 'Git Projects')),
50
+ normalize(resolve(homedir(), 'Projects')),
51
+ normalize(resolve(homedir(), 'dev')),
52
+ normalize(resolve(homedir(), 'code')),
53
+ normalize(resolve(homedir(), 'repos')),
54
+ normalize('/tmp/wyrm-test'), // For testing
55
+ ];
56
+ // Add from environment
57
+ if (process.env.WYRM_ALLOWED_PATHS) {
58
+ const envPaths = process.env.WYRM_ALLOWED_PATHS.split(':');
59
+ for (const p of envPaths) {
60
+ allowedRoots.push(normalize(resolve(p)));
61
+ }
62
+ }
63
+ // Check if path is within an allowed root
64
+ const isAllowed = allowedRoots.some(root => normalizedPath === root || normalizedPath.startsWith(root + sep));
65
+ if (!isAllowed) {
66
+ throw new SecurityError('Project path not in allowed directories', 'INVALID_PROJECT_PATH');
67
+ }
68
+ if (!validateDirectory(normalizedPath)) {
69
+ throw new SecurityError('Path is not a valid directory', 'INVALID_DIRECTORY');
70
+ }
71
+ return normalizedPath;
72
+ }
73
+ // ==================== INPUT VALIDATION ====================
74
+ /**
75
+ * Sanitize FTS5 search query to prevent injection
76
+ */
77
+ export function sanitizeFtsQuery(query) {
78
+ if (!query || typeof query !== 'string') {
79
+ throw new SecurityError('Invalid search query', 'INVALID_INPUT');
80
+ }
81
+ // Remove FTS5 special syntax characters
82
+ // Allowed: alphanumeric, spaces, common punctuation
83
+ const sanitized = query
84
+ .replace(/[*"():^{}[\]\\]/g, ' ') // Remove FTS operators
85
+ .replace(/\s+/g, ' ') // Normalize whitespace
86
+ .trim()
87
+ .slice(0, 500); // Limit length
88
+ if (!sanitized) {
89
+ throw new SecurityError('Search query is empty after sanitization', 'INVALID_INPUT');
90
+ }
91
+ return sanitized;
92
+ }
93
+ /**
94
+ * Validate and sanitize string input
95
+ */
96
+ export function sanitizeString(input, maxLength = 10000) {
97
+ if (input === null || input === undefined) {
98
+ return '';
99
+ }
100
+ if (typeof input !== 'string') {
101
+ throw new SecurityError('Expected string input', 'INVALID_TYPE');
102
+ }
103
+ // Truncate if too long
104
+ return input.slice(0, maxLength);
105
+ }
106
+ /**
107
+ * Validate integer input
108
+ */
109
+ export function validateInt(input, min = 0, max = Number.MAX_SAFE_INTEGER) {
110
+ const num = Number(input);
111
+ if (!Number.isInteger(num)) {
112
+ throw new SecurityError('Expected integer input', 'INVALID_TYPE');
113
+ }
114
+ if (num < min || num > max) {
115
+ throw new SecurityError(`Integer out of range [${min}, ${max}]`, 'OUT_OF_RANGE');
116
+ }
117
+ return num;
118
+ }
119
+ /**
120
+ * Validate enum value
121
+ */
122
+ export function validateEnum(input, allowed, defaultValue) {
123
+ if (input === undefined && defaultValue !== undefined) {
124
+ return defaultValue;
125
+ }
126
+ if (typeof input !== 'string' || !allowed.includes(input)) {
127
+ throw new SecurityError(`Invalid value. Allowed: ${allowed.join(', ')}`, 'INVALID_ENUM');
128
+ }
129
+ return input;
130
+ }
131
+ // ==================== HTTP SECURITY ====================
132
+ /**
133
+ * Validate API key authentication
134
+ */
135
+ export function validateApiKey(authHeader, expectedHash) {
136
+ if (!authHeader || !authHeader.startsWith('Bearer ')) {
137
+ return false;
138
+ }
139
+ const token = authHeader.slice(7);
140
+ if (!token || token.length < 32) {
141
+ return false;
142
+ }
143
+ // Constant-time comparison
144
+ return constantTimeCompare(hashToken(token), expectedHash);
145
+ }
146
+ /**
147
+ * Hash a token for storage/comparison
148
+ */
149
+ export function hashToken(token) {
150
+ return createHash('sha256').update(token).digest('hex');
151
+ }
152
+ /**
153
+ * Constant-time string comparison to prevent timing attacks
154
+ */
155
+ export function constantTimeCompare(a, b) {
156
+ if (a.length !== b.length) {
157
+ return false;
158
+ }
159
+ let result = 0;
160
+ for (let i = 0; i < a.length; i++) {
161
+ result |= a.charCodeAt(i) ^ b.charCodeAt(i);
162
+ }
163
+ return result === 0;
164
+ }
165
+ const rateLimitStore = new Map();
166
+ /**
167
+ * Check rate limit for a given key (IP, API key, etc.)
168
+ */
169
+ export function checkRateLimit(key, maxRequests = 100, windowMs = 60000) {
170
+ const now = Date.now();
171
+ let entry = rateLimitStore.get(key);
172
+ // Clean up expired entries periodically
173
+ if (rateLimitStore.size > 10000) {
174
+ for (const [k, v] of rateLimitStore) {
175
+ if (v.resetAt < now) {
176
+ rateLimitStore.delete(k);
177
+ }
178
+ }
179
+ }
180
+ if (!entry || entry.resetAt < now) {
181
+ entry = { count: 0, resetAt: now + windowMs };
182
+ rateLimitStore.set(key, entry);
183
+ }
184
+ entry.count++;
185
+ return {
186
+ allowed: entry.count <= maxRequests,
187
+ remaining: Math.max(0, maxRequests - entry.count),
188
+ resetAt: entry.resetAt
189
+ };
190
+ }
191
+ // ==================== SECURITY ERROR ====================
192
+ export class SecurityError extends Error {
193
+ code;
194
+ constructor(message, code) {
195
+ super(message);
196
+ this.name = 'SecurityError';
197
+ this.code = code;
198
+ }
199
+ }
200
+ // ==================== REQUEST VALIDATION ====================
201
+ export const MAX_REQUEST_SIZE = 1024 * 1024; // 1MB
202
+ export const MAX_BATCH_SIZE = 1000;
203
+ export const MAX_QUERY_RESULTS = 1000;
204
+ /**
205
+ * Validate batch operation size
206
+ */
207
+ export function validateBatchSize(items) {
208
+ if (!Array.isArray(items)) {
209
+ throw new SecurityError('Expected array for batch operation', 'INVALID_TYPE');
210
+ }
211
+ if (items.length > MAX_BATCH_SIZE) {
212
+ throw new SecurityError(`Batch size ${items.length} exceeds maximum of ${MAX_BATCH_SIZE}`, 'BATCH_TOO_LARGE');
213
+ }
214
+ }
215
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Wyrm Setup CLI - Auto-configure Wyrm for any AI client
4
+ *
5
+ * Usage:
6
+ * wyrm-setup Auto-detect and configure all AI clients
7
+ * wyrm-setup --check Show current configuration status
8
+ * wyrm-setup --remove Remove Wyrm from all AI clients
9
+ * wyrm-setup --only X,Y Configure specific clients only
10
+ * wyrm-setup --server P Override server path
11
+ * wyrm-setup --db P Override database path
12
+ * wyrm-setup --reconf Re-configure previously configured clients
13
+ * wyrm-setup --list List all supported AI clients
14
+ *
15
+ * @copyright 2026 Ghost Protocol (Pvt) Ltd. All Rights Reserved.
16
+ * @license Proprietary - See LICENSE file for details.
17
+ * @module setup
18
+ * @version 3.0.0
19
+ */
20
+ export {};
21
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG"}
package/dist/setup.js ADDED
@@ -0,0 +1,261 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Wyrm Setup CLI - Auto-configure Wyrm for any AI client
4
+ *
5
+ * Usage:
6
+ * wyrm-setup Auto-detect and configure all AI clients
7
+ * wyrm-setup --check Show current configuration status
8
+ * wyrm-setup --remove Remove Wyrm from all AI clients
9
+ * wyrm-setup --only X,Y Configure specific clients only
10
+ * wyrm-setup --server P Override server path
11
+ * wyrm-setup --db P Override database path
12
+ * wyrm-setup --reconf Re-configure previously configured clients
13
+ * wyrm-setup --list List all supported AI clients
14
+ *
15
+ * @copyright 2026 Ghost Protocol (Pvt) Ltd. All Rights Reserved.
16
+ * @license Proprietary - See LICENSE file for details.
17
+ * @module setup
18
+ * @version 3.0.0
19
+ */
20
+ import { detectClients, autoConfigureAll, removeFromAll, configureSpecific, reconfAll, getStatusSummary, findWyrmServerPath, getDefaultDbPath, loadWyrmMeta, } from './autoconfig.js';
21
+ import { c, icons, BANNER, MINI_BANNER, printError, printSection } from './cli.js';
22
+ function parseArgs(argv) {
23
+ const args = argv.slice(2); // Skip node and script path
24
+ if (args.length === 0) {
25
+ return { command: 'auto' };
26
+ }
27
+ const result = { command: 'auto' };
28
+ for (let i = 0; i < args.length; i++) {
29
+ switch (args[i]) {
30
+ case '--check':
31
+ case '-c':
32
+ case 'check':
33
+ case 'status':
34
+ result.command = 'check';
35
+ break;
36
+ case '--remove':
37
+ case '-r':
38
+ case 'remove':
39
+ case 'uninstall':
40
+ result.command = 'remove';
41
+ break;
42
+ case '--only':
43
+ case '-o':
44
+ case 'only':
45
+ result.command = 'only';
46
+ if (args[i + 1]) {
47
+ result.clientIds = args[i + 1].split(',').map(s => s.trim());
48
+ i++;
49
+ }
50
+ break;
51
+ case '--reconf':
52
+ case '--reconfigure':
53
+ case 'reconf':
54
+ result.command = 'reconf';
55
+ break;
56
+ case '--list':
57
+ case '-l':
58
+ case 'list':
59
+ result.command = 'list';
60
+ break;
61
+ case '--server':
62
+ case '-s':
63
+ if (args[i + 1]) {
64
+ result.serverPath = args[i + 1];
65
+ i++;
66
+ }
67
+ break;
68
+ case '--db':
69
+ case '-d':
70
+ if (args[i + 1]) {
71
+ result.dbPath = args[i + 1];
72
+ i++;
73
+ }
74
+ break;
75
+ case '--help':
76
+ case '-h':
77
+ case 'help':
78
+ result.command = 'help';
79
+ break;
80
+ }
81
+ }
82
+ return result;
83
+ }
84
+ // ==================== OUTPUT ====================
85
+ function printResults(results) {
86
+ console.log('');
87
+ const configured = results.filter(r => r.action === 'configured');
88
+ const updated = results.filter(r => r.action === 'updated');
89
+ const skipped = results.filter(r => r.action === 'skipped');
90
+ const failed = results.filter(r => r.action === 'failed');
91
+ for (const r of configured) {
92
+ console.log(` ${icons.success} ${r.client.icon} ${c.green(r.client.name)} — ${c.success('configured')}`);
93
+ if (r.backup)
94
+ console.log(` ${c.dim(`backup → ${r.backup}`)}`);
95
+ }
96
+ for (const r of updated) {
97
+ console.log(` ${icons.sync} ${r.client.icon} ${c.blue(r.client.name)} — ${c.cyan('updated')}`);
98
+ if (r.backup)
99
+ console.log(` ${c.dim(`backup → ${r.backup}`)}`);
100
+ }
101
+ for (const r of skipped) {
102
+ console.log(` ${c.dim(` ○ ${r.client.icon} ${r.client.name} — ${r.message}`)}`);
103
+ }
104
+ for (const r of failed) {
105
+ console.log(` ${icons.error} ${r.client.icon} ${c.red(r.client.name)} — ${c.error(r.message)}`);
106
+ }
107
+ console.log('');
108
+ const successCount = configured.length + updated.length;
109
+ if (successCount > 0) {
110
+ console.log(` ${c.success(`${icons.dragon} Wyrm connected to ${successCount} AI client(s)`)}`);
111
+ console.log(` ${c.dim('Switch AIs anytime — run wyrm-setup again to reconnect')}`);
112
+ }
113
+ else if (failed.length > 0) {
114
+ console.log(` ${c.error('Some configurations failed. Check errors above.')}`);
115
+ }
116
+ else {
117
+ console.log(` ${c.dim('No AI clients detected. Install one and try again.')}`);
118
+ }
119
+ console.log('');
120
+ }
121
+ function printHelp() {
122
+ console.log(MINI_BANNER);
123
+ console.log('');
124
+ console.log(`${c.bold('Usage:')} wyrm-setup ${c.dim('[command] [options]')}`);
125
+ console.log('');
126
+ console.log(`${c.bold('Commands:')}`);
127
+ console.log(` ${c.cyan('(no args)')} Auto-detect and configure all AI clients`);
128
+ console.log(` ${c.cyan('check')} Show current configuration status`);
129
+ console.log(` ${c.cyan('list')} List all supported AI clients`);
130
+ console.log(` ${c.cyan('remove')} Remove Wyrm from all AI clients`);
131
+ console.log(` ${c.cyan('reconf')} Re-configure previously configured clients`);
132
+ console.log(` ${c.cyan('only X,Y')} Configure specific clients only`);
133
+ console.log(` ${c.cyan('help')} Show this help message`);
134
+ console.log('');
135
+ console.log(`${c.bold('Options:')}`);
136
+ console.log(` ${c.cyan('--server P')} Override Wyrm MCP server path`);
137
+ console.log(` ${c.cyan('--db P')} Override Wyrm database path`);
138
+ console.log('');
139
+ console.log(`${c.bold('Client IDs:')}`);
140
+ const clients = detectClients();
141
+ for (const cl of clients) {
142
+ console.log(` ${cl.icon} ${c.cyan(cl.id.padEnd(18))} ${cl.name}`);
143
+ }
144
+ console.log('');
145
+ console.log(`${c.bold('Examples:')}`);
146
+ console.log(` wyrm-setup ${c.dim('# Auto-configure everything')}`);
147
+ console.log(` wyrm-setup check ${c.dim('# See what\'s configured')}`);
148
+ console.log(` wyrm-setup only vscode-copilot,cursor ${c.dim('# Only VS Code + Cursor')}`);
149
+ console.log(` wyrm-setup --server /path/to/wyrm/dist/index.js ${c.dim('# Custom server path')}`);
150
+ console.log(` wyrm-setup remove ${c.dim('# Remove from all clients')}`);
151
+ console.log('');
152
+ }
153
+ function printClientList() {
154
+ console.log(MINI_BANNER);
155
+ console.log('');
156
+ printSection('Supported AI Clients');
157
+ console.log('');
158
+ const clients = detectClients();
159
+ for (const cl of clients) {
160
+ const status = cl.detected
161
+ ? cl.configured
162
+ ? c.success('● connected')
163
+ : c.yellow('◐ available')
164
+ : c.dim('○ not found');
165
+ const versionStr = cl.version ? ` ${c.dim(`v${cl.version}`)}` : '';
166
+ console.log(` ${cl.icon} ${c.bold(cl.name.padEnd(20))} ${c.cyan(cl.id.padEnd(18))} ${status}${versionStr}`);
167
+ console.log(` ${c.dim(`Config: ${cl.configPath}`)}`);
168
+ }
169
+ console.log('');
170
+ }
171
+ // ==================== MAIN ====================
172
+ async function main() {
173
+ const args = parseArgs(process.argv);
174
+ switch (args.command) {
175
+ case 'help':
176
+ printHelp();
177
+ break;
178
+ case 'check': {
179
+ console.log(MINI_BANNER);
180
+ console.log('');
181
+ console.log(getStatusSummary());
182
+ break;
183
+ }
184
+ case 'list':
185
+ printClientList();
186
+ break;
187
+ case 'auto': {
188
+ console.log(BANNER);
189
+ printSection('Auto-Configure');
190
+ console.log('');
191
+ const serverPath = args.serverPath || findWyrmServerPath();
192
+ const dbPath = args.dbPath || getDefaultDbPath();
193
+ console.log(` ${icons.sword} Server: ${c.cyan(serverPath)}`);
194
+ console.log(` ${icons.treasure} DB: ${c.cyan(dbPath)}`);
195
+ console.log('');
196
+ console.log(` ${c.dim('Scanning for AI clients...')}`);
197
+ const results = autoConfigureAll({
198
+ serverPath,
199
+ dbPath,
200
+ });
201
+ printResults(results);
202
+ break;
203
+ }
204
+ case 'only': {
205
+ if (!args.clientIds || args.clientIds.length === 0) {
206
+ printError('No client IDs specified. Use: wyrm-setup only vscode-copilot,cursor');
207
+ process.exit(1);
208
+ }
209
+ console.log(MINI_BANNER);
210
+ printSection(`Configure: ${args.clientIds.join(', ')}`);
211
+ const results = configureSpecific(args.clientIds, {
212
+ serverPath: args.serverPath,
213
+ dbPath: args.dbPath,
214
+ });
215
+ printResults(results);
216
+ break;
217
+ }
218
+ case 'remove': {
219
+ console.log(MINI_BANNER);
220
+ printSection('Remove Wyrm from AI Clients');
221
+ console.log('');
222
+ console.log(` ${c.warning('Removing Wyrm configuration from all AI clients...')}`);
223
+ const results = removeFromAll();
224
+ const removed = results.filter(r => r.action === 'configured');
225
+ const skipped = results.filter(r => r.action === 'skipped');
226
+ for (const r of removed) {
227
+ console.log(` ${icons.check} ${r.client.icon} ${r.client.name} — removed`);
228
+ if (r.backup)
229
+ console.log(` ${c.dim(`backup → ${r.backup}`)}`);
230
+ }
231
+ for (const r of skipped) {
232
+ console.log(` ${c.dim(` ○ ${r.client.icon} ${r.client.name} — ${r.message}`)}`);
233
+ }
234
+ console.log('');
235
+ if (removed.length > 0) {
236
+ console.log(` ${c.success(`Removed from ${removed.length} client(s). Run wyrm-setup to reconnect.`)}`);
237
+ }
238
+ console.log('');
239
+ break;
240
+ }
241
+ case 'reconf': {
242
+ console.log(MINI_BANNER);
243
+ printSection('Re-Configure');
244
+ const meta = loadWyrmMeta();
245
+ if (meta) {
246
+ console.log(` ${c.dim(`Restoring config for: ${meta.configuredClients.join(', ')}`)}`);
247
+ }
248
+ else {
249
+ console.log(` ${c.dim('No previous config found — running full auto-configure')}`);
250
+ }
251
+ const results = reconfAll();
252
+ printResults(results);
253
+ break;
254
+ }
255
+ }
256
+ }
257
+ main().catch((err) => {
258
+ printError(`Setup failed: ${err}`);
259
+ process.exit(1);
260
+ });
261
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Wyrm Summarizer - Compresses old sessions to save tokens
3
+ *
4
+ * Uses a simple extractive summarization:
5
+ * - Keeps key information (commits, files, major issues)
6
+ * - Drops verbose descriptions
7
+ * - Creates a condensed summary for archived sessions
8
+ */
9
+ import { Session } from './database.js';
10
+ export interface SummaryResult {
11
+ summary: string;
12
+ tokenEstimate: number;
13
+ }
14
+ export declare function summarizeSession(session: Session): SummaryResult;
15
+ export declare function summarizeMultipleSessions(sessions: Session[]): SummaryResult;
16
+ /**
17
+ * Estimate tokens in a string (rough approximation)
18
+ */
19
+ export declare function estimateTokens(text: string): number;
20
+ /**
21
+ * Create a compressed context bundle under a token limit
22
+ */
23
+ export declare function createContextBundle(project: {
24
+ name: string;
25
+ stack?: string;
26
+ }, currentContext: Record<string, string>, recentSessions: Session[], pendingQuests: {
27
+ title: string;
28
+ priority: string;
29
+ }[], maxTokens?: number): string;
30
+ //# sourceMappingURL=summarizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarizer.d.ts","sourceRoot":"","sources":["../src/summarizer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,CAgDhE;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,aAAa,CAO5E;AA+BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACzC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,cAAc,EAAE,OAAO,EAAE,EACzB,aAAa,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,EACpD,SAAS,SAAO,GACf,MAAM,CAqDR"}