vesper-memory 0.5.1 → 0.5.3

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 (92) hide show
  1. package/README.md +85 -18
  2. package/config/claude-rules/memory-discipline.md +39 -0
  3. package/config/claude-rules/vesper.md +218 -0
  4. package/dist/cli.js +59 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/router/smart-router.d.ts +9 -3
  7. package/dist/router/smart-router.d.ts.map +1 -1
  8. package/dist/router/smart-router.js +236 -57
  9. package/dist/router/smart-router.js.map +1 -1
  10. package/dist/server.js +127 -2
  11. package/dist/server.js.map +1 -1
  12. package/dist/utils/validation.d.ts +12 -0
  13. package/dist/utils/validation.d.ts.map +1 -1
  14. package/dist/utils/validation.js +13 -0
  15. package/dist/utils/validation.js.map +1 -1
  16. package/package.json +1 -2
  17. package/dist/cli 2.js +0 -583
  18. package/dist/cli.d 2.ts +0 -8
  19. package/dist/cli.d.ts 2.map +0 -1
  20. package/dist/cli.js 2.map +0 -1
  21. package/dist/config 2/rate-limits.d.ts +0 -76
  22. package/dist/config 2/rate-limits.d.ts.map +0 -1
  23. package/dist/config 2/rate-limits.js +0 -161
  24. package/dist/config 2/rate-limits.js.map +0 -1
  25. package/dist/consolidation 2/pipeline.d.ts +0 -52
  26. package/dist/consolidation 2/pipeline.d.ts.map +0 -1
  27. package/dist/consolidation 2/pipeline.js +0 -193
  28. package/dist/consolidation 2/pipeline.js.map +0 -1
  29. package/dist/embeddings 2/client.d.ts +0 -94
  30. package/dist/embeddings 2/client.d.ts.map +0 -1
  31. package/dist/embeddings 2/client.js +0 -144
  32. package/dist/embeddings 2/client.js.map +0 -1
  33. package/dist/memory-layers 2/semantic-memory.d.ts +0 -33
  34. package/dist/memory-layers 2/semantic-memory.d.ts.map +0 -1
  35. package/dist/memory-layers 2/semantic-memory.js +0 -114
  36. package/dist/memory-layers 2/semantic-memory.js.map +0 -1
  37. package/dist/memory-layers 2/skill-library.d.ts +0 -25
  38. package/dist/memory-layers 2/skill-library.d.ts.map +0 -1
  39. package/dist/memory-layers 2/skill-library.js +0 -54
  40. package/dist/memory-layers 2/skill-library.js.map +0 -1
  41. package/dist/memory-layers 2/working-memory.d.ts +0 -57
  42. package/dist/memory-layers 2/working-memory.d.ts.map +0 -1
  43. package/dist/memory-layers 2/working-memory.js +0 -153
  44. package/dist/memory-layers 2/working-memory.js.map +0 -1
  45. package/dist/middleware 2/auth.d.ts +0 -287
  46. package/dist/middleware 2/auth.d.ts.map +0 -1
  47. package/dist/middleware 2/auth.js +0 -610
  48. package/dist/middleware 2/auth.js.map +0 -1
  49. package/dist/monitoring 2/health.d.ts +0 -241
  50. package/dist/monitoring 2/health.d.ts.map +0 -1
  51. package/dist/monitoring 2/health.js +0 -649
  52. package/dist/monitoring 2/health.js.map +0 -1
  53. package/dist/monitoring 2/metrics.d.ts +0 -153
  54. package/dist/monitoring 2/metrics.d.ts.map +0 -1
  55. package/dist/monitoring 2/metrics.js +0 -349
  56. package/dist/monitoring 2/metrics.js.map +0 -1
  57. package/dist/retrieval 2/hybrid-search.d.ts +0 -186
  58. package/dist/retrieval 2/hybrid-search.d.ts.map +0 -1
  59. package/dist/retrieval 2/hybrid-search.js +0 -327
  60. package/dist/retrieval 2/hybrid-search.js.map +0 -1
  61. package/dist/router 2/smart-router.d.ts +0 -111
  62. package/dist/router 2/smart-router.d.ts.map +0 -1
  63. package/dist/router 2/smart-router.js +0 -383
  64. package/dist/router 2/smart-router.js.map +0 -1
  65. package/dist/security 2/rate-limit-middleware.d.ts +0 -119
  66. package/dist/security 2/rate-limit-middleware.d.ts.map +0 -1
  67. package/dist/security 2/rate-limit-middleware.js +0 -193
  68. package/dist/security 2/rate-limit-middleware.js.map +0 -1
  69. package/dist/server 2.js +0 -861
  70. package/dist/server-wrapper 2.js +0 -170
  71. package/dist/server-wrapper.d 2.ts +0 -12
  72. package/dist/server-wrapper.d.ts 2.map +0 -1
  73. package/dist/server-wrapper.js 2.map +0 -1
  74. package/dist/server.d 2.ts +0 -14
  75. package/dist/server.d.ts 2.map +0 -1
  76. package/dist/server.js 2.map +0 -1
  77. package/dist/synthesis 2/conflict-detector.d.ts +0 -43
  78. package/dist/synthesis 2/conflict-detector.d.ts.map +0 -1
  79. package/dist/synthesis 2/conflict-detector.js +0 -125
  80. package/dist/synthesis 2/conflict-detector.js.map +0 -1
  81. package/dist/utils 2/monitoring.d.ts +0 -25
  82. package/dist/utils 2/monitoring.d.ts.map +0 -1
  83. package/dist/utils 2/monitoring.js +0 -41
  84. package/dist/utils 2/monitoring.js.map +0 -1
  85. package/dist/utils 2/rate-limiter.d.ts +0 -97
  86. package/dist/utils 2/rate-limiter.d.ts.map +0 -1
  87. package/dist/utils 2/rate-limiter.js +0 -166
  88. package/dist/utils 2/rate-limiter.js.map +0 -1
  89. package/dist/utils 2/validation.d.ts +0 -139
  90. package/dist/utils 2/validation.d.ts.map +0 -1
  91. package/dist/utils 2/validation.js +0 -195
  92. package/dist/utils 2/validation.js.map +0 -1
package/dist/cli 2.js DELETED
@@ -1,583 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Vesper CLI
4
- *
5
- * Command-line interface for installing and managing Vesper
6
- */
7
- import { execSync } from 'child_process';
8
- import { existsSync, mkdirSync, writeFileSync, readFileSync, cpSync } from 'fs';
9
- import { homedir } from 'os';
10
- import { join, dirname } from 'path';
11
- import { fileURLToPath } from 'url';
12
- import { randomBytes } from 'crypto';
13
- const __filename = fileURLToPath(import.meta.url);
14
- const __dirname = dirname(__filename);
15
- // Installation directory
16
- const INSTALL_DIR = process.env.VESPER_INSTALL_DIR || join(homedir(), '.vesper');
17
- // Colors for terminal output
18
- const colors = {
19
- reset: '\x1b[0m',
20
- bright: '\x1b[1m',
21
- green: '\x1b[32m',
22
- blue: '\x1b[34m',
23
- yellow: '\x1b[33m',
24
- red: '\x1b[31m',
25
- cyan: '\x1b[36m',
26
- };
27
- function log(message, color = colors.reset) {
28
- console.log(`${color}${message}${colors.reset}`);
29
- }
30
- function header(message) {
31
- log(`\n${message}`, colors.bright + colors.cyan);
32
- }
33
- function success(message) {
34
- log(`✅ ${message}`, colors.green);
35
- }
36
- function error(message) {
37
- log(`❌ ${message}`, colors.red);
38
- }
39
- function warning(message) {
40
- log(`⚠️ ${message}`, colors.yellow);
41
- }
42
- function info(message) {
43
- log(`ℹ️ ${message}`, colors.blue);
44
- }
45
- // Generate secure random password
46
- function generatePassword() {
47
- return randomBytes(32).toString('base64');
48
- }
49
- // Check if Docker is running
50
- function checkDocker() {
51
- try {
52
- execSync('docker info', { stdio: 'ignore' });
53
- return true;
54
- }
55
- catch {
56
- return false;
57
- }
58
- }
59
- // Install Vesper
60
- async function install() {
61
- header('🌟 Installing Vesper - AI Memory System for Claude Code');
62
- // Check prerequisites
63
- info('Checking prerequisites...');
64
- try {
65
- execSync('node --version', { stdio: 'ignore' });
66
- success('Node.js found');
67
- }
68
- catch {
69
- error('Node.js 20+ required. Install from https://nodejs.org');
70
- process.exit(1);
71
- }
72
- if (!checkDocker()) {
73
- error('Docker not running. Please start Docker Desktop');
74
- process.exit(1);
75
- }
76
- success('Docker found');
77
- // Create installation directory
78
- info(`Installing to ${INSTALL_DIR}...`);
79
- if (existsSync(INSTALL_DIR)) {
80
- warning(`Directory ${INSTALL_DIR} already exists`);
81
- info('Updating existing installation...');
82
- }
83
- else {
84
- mkdirSync(INSTALL_DIR, { recursive: true });
85
- }
86
- // Copy files from npm package to install directory
87
- const packageRoot = join(__dirname, '..');
88
- info('Copying files...');
89
- const filesToCopy = [
90
- 'dist',
91
- 'config',
92
- 'embedding-service',
93
- 'scripts',
94
- 'docker-compose.yml',
95
- '.env.example',
96
- 'package.json',
97
- ];
98
- for (const file of filesToCopy) {
99
- const src = join(packageRoot, file);
100
- const dest = join(INSTALL_DIR, file);
101
- if (existsSync(src)) {
102
- cpSync(src, dest, { recursive: true });
103
- }
104
- }
105
- success('Files copied');
106
- // Create .env if it doesn't exist
107
- const envFile = join(INSTALL_DIR, '.env');
108
- if (!existsSync(envFile)) {
109
- info('Creating .env configuration...');
110
- cpSync(join(INSTALL_DIR, '.env.example'), envFile);
111
- success('.env created');
112
- }
113
- // Install dependencies in install directory
114
- info('Installing dependencies...');
115
- try {
116
- execSync('npm install --production --silent', {
117
- cwd: INSTALL_DIR,
118
- stdio: 'inherit',
119
- });
120
- success('Dependencies installed');
121
- }
122
- catch (err) {
123
- error('Failed to install dependencies');
124
- throw err;
125
- }
126
- // Start Docker services
127
- info('Starting infrastructure services...');
128
- try {
129
- execSync('docker-compose up -d redis qdrant embedding', {
130
- cwd: INSTALL_DIR,
131
- stdio: 'inherit',
132
- });
133
- success('Services started');
134
- }
135
- catch (err) {
136
- error('Failed to start services');
137
- throw err;
138
- }
139
- // Wait for services
140
- info('Waiting for services to be ready...');
141
- await new Promise(resolve => setTimeout(resolve, 10000));
142
- // Configure MCP using the official claude CLI
143
- info('Configuring Claude Code MCP integration...');
144
- // Check if claude CLI is available
145
- try {
146
- execSync('claude --version', { stdio: 'ignore' });
147
- }
148
- catch {
149
- error('Claude Code CLI not found in PATH');
150
- error('Please install Claude Code from: https://claude.ai/download');
151
- throw new Error('Claude CLI not found');
152
- }
153
- // Remove old MCP server if it exists (to ensure clean install)
154
- try {
155
- execSync('claude mcp remove vesper', { stdio: 'ignore' });
156
- }
157
- catch {
158
- // Ignore errors if server doesn't exist
159
- }
160
- // Add Vesper using the proper claude mcp add command
161
- const serverPath = join(INSTALL_DIR, 'dist', 'server.js');
162
- try {
163
- execSync(`claude mcp add vesper --transport stdio --scope user -e NODE_ENV=production -- node "${serverPath}"`, { stdio: 'inherit' });
164
- success('MCP server configured successfully');
165
- }
166
- catch (err) {
167
- error('Failed to configure Vesper MCP server');
168
- error(`You can manually configure it later with:`);
169
- error(`claude mcp add vesper --transport stdio --scope user -e NODE_ENV=production -- node "${serverPath}"`);
170
- throw err;
171
- }
172
- // Configure startup hook (optional - ensures Docker services are running)
173
- info('Configuring startup hook...');
174
- const settingsPath = join(homedir(), '.claude', 'settings.json');
175
- let settings = { hooks: {} };
176
- if (existsSync(settingsPath)) {
177
- try {
178
- settings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
179
- }
180
- catch (err) {
181
- warning('Could not parse settings.json, creating new one');
182
- settings = { hooks: {} };
183
- }
184
- }
185
- // Ensure hooks structure exists
186
- settings.hooks = settings.hooks || {};
187
- settings.hooks.SessionStart = settings.hooks.SessionStart || [];
188
- // Add or update Vesper startup hook (just for Docker services)
189
- const hookScript = join(INSTALL_DIR, 'scripts', 'ensure-infrastructure.sh');
190
- const vesperHook = {
191
- description: 'Ensure Vesper memory infrastructure is running',
192
- hooks: [{
193
- type: 'command',
194
- command: `if [ -f ${hookScript} ]; then ${hookScript} 2>&1; fi`,
195
- continueOnError: true
196
- }]
197
- };
198
- // Remove any existing Vesper hooks and add new one
199
- settings.hooks.SessionStart = settings.hooks.SessionStart.filter((h) => !h.description?.includes('Vesper') && !h.description?.includes('memory infrastructure'));
200
- settings.hooks.SessionStart.push(vesperHook);
201
- // Ensure directory exists
202
- mkdirSync(dirname(settingsPath), { recursive: true });
203
- writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
204
- success('Startup hook configured');
205
- info('Note: Permissions are handled automatically by claude mcp add');
206
- // Success message
207
- header('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
208
- success('✨ Vesper installation complete!');
209
- header('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
210
- log('\n🎯 Next steps:', colors.bright);
211
- log(' 1. Restart Claude Code to load Vesper');
212
- log(' 2. Ask Claude: "What MCP servers are available?"');
213
- log(' 3. Test it: "Store a memory: I love TypeScript"');
214
- log('\n📖 Documentation:', colors.bright);
215
- log(` • Installation: ${INSTALL_DIR}`);
216
- log(` • View config: claude mcp get vesper`);
217
- log(` • Logs: cd ${INSTALL_DIR} && docker-compose logs`);
218
- log('\n💡 Tip: Ask Claude to "store a memory" to test!\n');
219
- }
220
- // Uninstall Vesper
221
- async function uninstall() {
222
- header('🗑️ Uninstalling Vesper');
223
- if (!existsSync(INSTALL_DIR)) {
224
- warning('Vesper not installed');
225
- return;
226
- }
227
- // Stop services
228
- info('Stopping services...');
229
- try {
230
- execSync('docker-compose down -v', {
231
- cwd: INSTALL_DIR,
232
- stdio: 'inherit',
233
- });
234
- success('Services stopped');
235
- }
236
- catch {
237
- warning('Could not stop services (may not be running)');
238
- }
239
- // Remove from MCP config using claude CLI
240
- info('Removing from MCP config...');
241
- try {
242
- execSync('claude mcp remove vesper', { stdio: 'inherit' });
243
- success('Removed from MCP config');
244
- }
245
- catch {
246
- warning('Could not remove from MCP config (may not be configured)');
247
- }
248
- // Remove startup hook
249
- const settingsPath = join(homedir(), '.claude', 'settings.json');
250
- if (existsSync(settingsPath)) {
251
- info('Removing startup hook...');
252
- try {
253
- const settings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
254
- if (settings.hooks?.SessionStart) {
255
- settings.hooks.SessionStart = settings.hooks.SessionStart.filter((h) => !h.description?.includes('Vesper') && !h.description?.includes('memory infrastructure'));
256
- writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
257
- success('Startup hook removed');
258
- }
259
- }
260
- catch (err) {
261
- warning('Could not update settings.json');
262
- }
263
- }
264
- // Remove installation directory
265
- info('Removing files...');
266
- execSync(`rm -rf "${INSTALL_DIR}"`, { stdio: 'inherit' });
267
- success('Files removed');
268
- log('\n✅ Vesper uninstalled successfully\n');
269
- info('Restart Claude Code to complete removal');
270
- }
271
- // Load environment variables from .env file
272
- // If .env doesn't exist, create it from .env.example with secure generated passwords
273
- function loadEnvFile(packageRoot) {
274
- const envPath = join(packageRoot, '.env');
275
- const envExamplePath = join(packageRoot, '.env.example');
276
- let envContent;
277
- let shouldGeneratePasswords = false;
278
- if (!existsSync(envPath)) {
279
- if (existsSync(envExamplePath)) {
280
- info('Creating .env from .env.example...');
281
- envContent = readFileSync(envExamplePath, 'utf-8');
282
- shouldGeneratePasswords = true;
283
- }
284
- else {
285
- warning('.env and .env.example not found, using default values');
286
- return {};
287
- }
288
- }
289
- else {
290
- envContent = readFileSync(envPath, 'utf-8');
291
- }
292
- const env = {};
293
- // Parse environment variables
294
- for (const line of envContent.split('\n')) {
295
- const trimmed = line.trim();
296
- if (trimmed && !trimmed.startsWith('#')) {
297
- const match = trimmed.match(/^([^=]+)=(.*)$/);
298
- if (match) {
299
- const [, key, value] = match;
300
- env[key.trim()] = value.trim();
301
- }
302
- }
303
- }
304
- // Generate secure passwords if creating new .env
305
- if (shouldGeneratePasswords) {
306
- info('Generating secure passwords...');
307
- const redisPassword = generatePassword();
308
- const qdrantKey = generatePassword();
309
- const postgresPassword = generatePassword();
310
- // Replace placeholder passwords in content
311
- envContent = envContent.replace(/REDIS_PASSWORD=.*/, `REDIS_PASSWORD=${redisPassword}`);
312
- envContent = envContent.replace(/QDRANT_API_KEY=.*/, `QDRANT_API_KEY=${qdrantKey}`);
313
- envContent = envContent.replace(/POSTGRES_PASSWORD=.*/, `POSTGRES_PASSWORD=${postgresPassword}`);
314
- // Write new .env file
315
- writeFileSync(envPath, envContent);
316
- success('.env created with secure passwords');
317
- // Update env object with generated passwords
318
- env.REDIS_PASSWORD = redisPassword;
319
- env.QDRANT_API_KEY = qdrantKey;
320
- env.POSTGRES_PASSWORD = postgresPassword;
321
- }
322
- return env;
323
- }
324
- // Configure MCP only (no Docker services)
325
- async function configure() {
326
- header('⚙️ Configuring Vesper MCP Server');
327
- // Determine package location (could be in node_modules or ~/.vesper)
328
- const packageRoot = dirname(dirname(__filename));
329
- const serverPath = join(packageRoot, 'dist', 'server.js');
330
- if (!existsSync(serverPath)) {
331
- error(`Server not found at ${serverPath}`);
332
- error('Run "npm run build" first');
333
- process.exit(1);
334
- }
335
- info('Loading environment configuration...');
336
- const envVars = loadEnvFile(packageRoot);
337
- // Resolve SQLite DB path relative to package root
338
- const sqliteDb = envVars.SQLITE_DB || './data/memory.db';
339
- const absoluteSqliteDb = sqliteDb.startsWith('/')
340
- ? sqliteDb
341
- : join(packageRoot, sqliteDb);
342
- info('Configuring Claude Code MCP integration...');
343
- // Check if claude CLI is available
344
- try {
345
- execSync('claude --version', { stdio: 'ignore' });
346
- }
347
- catch {
348
- error('Claude Code CLI not found in PATH');
349
- error('Please install Claude Code from: https://claude.ai/download');
350
- throw new Error('Claude CLI not found');
351
- }
352
- // Remove old MCP server if it exists (to ensure clean install)
353
- try {
354
- execSync('claude mcp remove vesper', { stdio: 'ignore' });
355
- }
356
- catch {
357
- // Ignore errors if server doesn't exist
358
- }
359
- // Build environment variable flags (use -e for each variable)
360
- const envFlags = [
361
- // Connection settings
362
- `-e REDIS_HOST=${envVars.REDIS_HOST || 'localhost'}`,
363
- `-e REDIS_PORT=${envVars.REDIS_PORT || '6379'}`,
364
- `-e QDRANT_URL=${envVars.QDRANT_URL || 'http://localhost:6333'}`,
365
- `-e SQLITE_DB=${absoluteSqliteDb}`,
366
- `-e EMBEDDING_SERVICE_URL=${envVars.EMBEDDING_SERVICE_URL || 'http://localhost:8000'}`,
367
- // PostgreSQL (optional, for auth)
368
- `-e POSTGRES_HOST=${envVars.POSTGRES_HOST || 'localhost'}`,
369
- `-e POSTGRES_PORT=${envVars.POSTGRES_PORT || '5432'}`,
370
- `-e POSTGRES_DB=${envVars.POSTGRES_DB || 'memory'}`,
371
- `-e POSTGRES_USER=${envVars.POSTGRES_USER || 'postgres'}`,
372
- // Application settings
373
- `-e NODE_ENV=${envVars.NODE_ENV || 'production'}`,
374
- `-e LOG_LEVEL=${envVars.LOG_LEVEL || 'info'}`,
375
- // Authentication (optional)
376
- `-e AUTH_ENABLED=${envVars.AUTH_ENABLED || 'false'}`,
377
- `-e MCP_API_KEY_TIER=${envVars.MCP_API_KEY_TIER || 'standard'}`,
378
- `-e MCP_API_KEY_SCOPES=${envVars.MCP_API_KEY_SCOPES || '*'}`,
379
- // Rate limiting
380
- `-e RATE_LIMIT_DEFAULT_TIER=${envVars.RATE_LIMIT_DEFAULT_TIER || 'standard'}`,
381
- `-e RATE_LIMIT_FAIL_OPEN=${envVars.RATE_LIMIT_FAIL_OPEN || 'false'}`,
382
- ];
383
- // Add password environment variables only if they're set (don't expose empty passwords)
384
- if (envVars.REDIS_PASSWORD) {
385
- envFlags.push(`-e REDIS_PASSWORD=${envVars.REDIS_PASSWORD}`);
386
- }
387
- if (envVars.QDRANT_API_KEY) {
388
- envFlags.push(`-e QDRANT_API_KEY=${envVars.QDRANT_API_KEY}`);
389
- }
390
- if (envVars.POSTGRES_PASSWORD) {
391
- envFlags.push(`-e POSTGRES_PASSWORD=${envVars.POSTGRES_PASSWORD}`);
392
- }
393
- if (envVars.MCP_API_KEY_HASH) {
394
- envFlags.push(`-e MCP_API_KEY_HASH=${envVars.MCP_API_KEY_HASH}`);
395
- }
396
- if (envVars.MCP_API_KEY_USER_ID) {
397
- envFlags.push(`-e MCP_API_KEY_USER_ID=${envVars.MCP_API_KEY_USER_ID}`);
398
- }
399
- // Add Vesper using the proper claude mcp add command
400
- // Note: server name must come FIRST, then options
401
- const command = `claude mcp add vesper --transport stdio --scope user ${envFlags.join(' ')} -- node "${serverPath}"`;
402
- try {
403
- execSync(command, { stdio: 'inherit' });
404
- success('MCP server configured successfully');
405
- }
406
- catch (err) {
407
- error('Failed to configure Vesper MCP server');
408
- error(`You can manually configure it later with:`);
409
- error(command);
410
- throw err;
411
- }
412
- log(`\n📍 Server path: ${serverPath}`);
413
- log(`📁 Package root: ${packageRoot}`);
414
- info('Permissions are handled automatically by claude mcp add');
415
- success('✨ Vesper MCP server configured!');
416
- log('\n🎯 Next steps:', colors.bright);
417
- log(' 1. Ensure Docker services are running:');
418
- log(` cd ${packageRoot} && docker-compose up -d`);
419
- log(' 2. Restart Claude Code to load Vesper');
420
- log(' 3. Test: Ask Claude "What MCP servers are available?"\n');
421
- }
422
- // Enable Vesper
423
- async function enableVesper() {
424
- header('✅ Enabling Vesper Memory System');
425
- if (!existsSync(INSTALL_DIR)) {
426
- error('Vesper not installed');
427
- log('\nRun: vesper install');
428
- return;
429
- }
430
- // Re-run configure to enable (this will add the MCP server)
431
- info('Reconfiguring Vesper to enable...');
432
- await configure();
433
- log('\n💡 Restart Claude Code for changes to take effect\n');
434
- }
435
- // Disable Vesper
436
- async function disableVesper() {
437
- header('⏸️ Disabling Vesper Memory System');
438
- // Remove the MCP server to disable it
439
- info('Removing Vesper MCP server...');
440
- try {
441
- execSync('claude mcp remove vesper', { stdio: 'inherit' });
442
- success('Vesper memory system disabled');
443
- }
444
- catch {
445
- warning('Vesper not configured or already disabled');
446
- }
447
- log('\n📊 Useful for benchmarking or debugging');
448
- log('💡 Run "vesper enable" to re-enable');
449
- log('💡 Restart Claude Code for changes to take effect\n');
450
- }
451
- // Show status
452
- function status() {
453
- header('📊 Vesper Status');
454
- // Check installation
455
- log(`\n📁 Installation: ${INSTALL_DIR}`);
456
- if (existsSync(INSTALL_DIR)) {
457
- success('Installed');
458
- }
459
- else {
460
- error('Not installed');
461
- log('\nRun: vesper install');
462
- return;
463
- }
464
- // Check MCP config using claude CLI
465
- log('\n🤖 MCP Configuration:');
466
- try {
467
- const output = execSync('claude mcp get vesper', { encoding: 'utf-8', stdio: 'pipe' });
468
- if (output.includes('"vesper"') || output.toLowerCase().includes('vesper')) {
469
- success('Configured in Claude Code ✅');
470
- success('Memory system: ENABLED');
471
- }
472
- else {
473
- warning('Not configured in Claude Code');
474
- log(' Run "vesper configure" to set up');
475
- }
476
- }
477
- catch {
478
- warning('Not configured in Claude Code');
479
- log(' Run "vesper configure" to set up');
480
- }
481
- // Check services
482
- log('\n🐳 Docker Services:');
483
- if (checkDocker()) {
484
- try {
485
- const output = execSync('docker-compose ps --format json', {
486
- cwd: INSTALL_DIR,
487
- encoding: 'utf-8',
488
- });
489
- const services = output.trim().split('\n').filter(Boolean).map(line => JSON.parse(line));
490
- for (const service of services) {
491
- if (service.State === 'running') {
492
- success(`${service.Service}: running`);
493
- }
494
- else {
495
- warning(`${service.Service}: ${service.State}`);
496
- }
497
- }
498
- }
499
- catch {
500
- warning('Could not check service status');
501
- }
502
- }
503
- else {
504
- error('Docker not running');
505
- }
506
- log('');
507
- }
508
- // Main CLI
509
- const command = process.argv[2];
510
- switch (command) {
511
- case 'install':
512
- install().catch((err) => {
513
- error(`Installation failed: ${err.message}`);
514
- process.exit(1);
515
- });
516
- break;
517
- case 'uninstall':
518
- uninstall().catch((err) => {
519
- error(`Uninstallation failed: ${err.message}`);
520
- process.exit(1);
521
- });
522
- break;
523
- case 'configure':
524
- configure().catch((err) => {
525
- error(`Configuration failed: ${err.message}`);
526
- process.exit(1);
527
- });
528
- break;
529
- case 'status':
530
- status();
531
- break;
532
- case 'enable':
533
- enableVesper().catch((err) => {
534
- error(`Enable failed: ${err.message}`);
535
- process.exit(1);
536
- });
537
- break;
538
- case 'disable':
539
- disableVesper().catch((err) => {
540
- error(`Disable failed: ${err.message}`);
541
- process.exit(1);
542
- });
543
- break;
544
- case 'help':
545
- case '--help':
546
- case '-h':
547
- case undefined:
548
- log(`
549
- ${colors.bright}Vesper - AI Memory System for Claude Code${colors.reset}
550
-
551
- ${colors.bright}USAGE:${colors.reset}
552
- vesper <command>
553
-
554
- ${colors.bright}COMMANDS:${colors.reset}
555
- install Install Vesper and configure Claude Code (full setup)
556
- configure Configure MCP server only (no Docker setup)
557
- uninstall Remove Vesper completely
558
- status Show installation and service status
559
- enable Enable Vesper memory system
560
- disable Disable Vesper memory system (pass-through mode)
561
- help Show this help message
562
-
563
- ${colors.bright}EXAMPLES:${colors.reset}
564
- vesper install # Full installation with Docker setup
565
- vesper configure # Configure MCP only (lightweight)
566
- vesper status # Check if running
567
- vesper enable # Enable memory system
568
- vesper disable # Disable for benchmarking
569
- vesper uninstall # Remove Vesper
570
-
571
- ${colors.bright}DOCUMENTATION:${colors.reset}
572
- https://github.com/fitz2882/vesper
573
-
574
- ${colors.bright}SUPPORT:${colors.reset}
575
- https://github.com/fitz2882/vesper/issues
576
- `);
577
- break;
578
- default:
579
- error(`Unknown command: ${command}`);
580
- log('Run "vesper help" for usage');
581
- process.exit(1);
582
- }
583
- //# sourceMappingURL=cli.js.map
package/dist/cli.d 2.ts DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Vesper CLI
4
- *
5
- * Command-line interface for installing and managing Vesper
6
- */
7
- export {};
8
- //# sourceMappingURL=cli.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,yBAAyB;AACzB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAEjF,6BAA6B;AAC7B,MAAM,MAAM,GAAG;IACb,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,UAAU;IAClB,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,UAAU;CACjB,CAAC;AAEF,SAAS,GAAG,CAAC,OAAe,EAAE,KAAK,GAAG,MAAM,CAAC,KAAK;IAChD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,MAAM,CAAC,OAAe;IAC7B,GAAG,CAAC,KAAK,OAAO,EAAE,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,OAAO,CAAC,OAAe;IAC9B,GAAG,CAAC,KAAK,OAAO,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,KAAK,CAAC,OAAe;IAC5B,GAAG,CAAC,KAAK,OAAO,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,OAAO,CAAC,OAAe;IAC9B,GAAG,CAAC,OAAO,OAAO,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,IAAI,CAAC,OAAe;IAC3B,GAAG,CAAC,OAAO,OAAO,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,kCAAkC;AAClC,SAAS,gBAAgB;IACvB,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED,6BAA6B;AAC7B,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,QAAQ,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,iBAAiB;AACjB,KAAK,UAAU,OAAO;IACpB,MAAM,CAAC,yDAAyD,CAAC,CAAC;IAElE,sBAAsB;IACtB,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAElC,IAAI,CAAC;QACH,QAAQ,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,cAAc,CAAC,CAAC;IAExB,gCAAgC;IAChC,IAAI,CAAC,iBAAiB,WAAW,KAAK,CAAC,CAAC;IAExC,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,aAAa,WAAW,iBAAiB,CAAC,CAAC;QACnD,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,mDAAmD;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE1C,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACzB,MAAM,WAAW,GAAG;QAClB,MAAM;QACN,QAAQ;QACR,mBAAmB;QACnB,SAAS;QACT,oBAAoB;QACpB,cAAc;QACd,cAAc;KACf,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAErC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,cAAc,CAAC,CAAC;IAExB,kCAAkC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1B,CAAC;IAED,4CAA4C;IAC5C,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACnC,IAAI,CAAC;QACH,QAAQ,CAAC,mCAAmC,EAAE;YAC5C,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACxC,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,QAAQ,CAAC,6CAA6C,EAAE;YACtD,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAClC,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,oBAAoB;IACpB,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAC5C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAEzD,8CAA8C;IAC9C,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAEnD,mCAAmC;IACnC,IAAI,CAAC;QACH,QAAQ,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC3C,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,+DAA+D;IAC/D,IAAI,CAAC;QACH,QAAQ,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;IAC1C,CAAC;IAED,qDAAqD;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAE1D,IAAI,CAAC;QACH,QAAQ,CACN,wFAAwF,UAAU,GAAG,EACrG,EAAE,KAAK,EAAE,SAAS,EAAE,CACrB,CAAC;QACF,OAAO,CAAC,oCAAoC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC/C,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACnD,KAAK,CAAC,wFAAwF,UAAU,GAAG,CAAC,CAAC;QAC7G,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,0EAA0E;IAC1E,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAEpC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACjE,IAAI,QAAQ,GAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAElC,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,iDAAiD,CAAC,CAAC;YAC3D,QAAQ,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;IAEhE,+DAA+D;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG;QACjB,WAAW,EAAE,gDAAgD;QAC7D,KAAK,EAAE,CAAC;gBACN,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,WAAW,UAAU,YAAY,UAAU,WAAW;gBAC/D,eAAe,EAAE,IAAI;aACtB,CAAC;KACH,CAAC;IAEF,mDAAmD;IACnD,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAC9D,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CACpG,CAAC;IACF,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE7C,0BAA0B;IAC1B,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACnC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAEtE,kBAAkB;IAClB,MAAM,CAAC,8CAA8C,CAAC,CAAC;IACvD,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAC3C,MAAM,CAAC,8CAA8C,CAAC,CAAC;IAEvD,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAChD,GAAG,CAAC,qDAAqD,CAAC,CAAC;IAC3D,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAE1D,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,GAAG,CAAC,sBAAsB,WAAW,EAAE,CAAC,CAAC;IACzC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAC/C,GAAG,CAAC,iBAAiB,WAAW,yBAAyB,CAAC,CAAC;IAE3D,GAAG,CAAC,qDAAqD,CAAC,CAAC;AAC7D,CAAC;AAED,mBAAmB;AACnB,KAAK,UAAU,SAAS;IACtB,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAEnC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,gBAAgB;IAChB,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC7B,IAAI,CAAC;QACH,QAAQ,CAAC,wBAAwB,EAAE;YACjC,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,8CAA8C,CAAC,CAAC;IAC1D,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,QAAQ,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,0DAA0D,CAAC,CAAC;IACtE,CAAC;IAED,sBAAsB;IACtB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACjE,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YACjE,IAAI,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;gBACjC,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAC9D,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CACpG,CAAC;gBACF,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/D,OAAO,CAAC,sBAAsB,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC1B,QAAQ,CAAC,WAAW,WAAW,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,eAAe,CAAC,CAAC;IAEzB,GAAG,CAAC,uCAAuC,CAAC,CAAC;IAC7C,IAAI,CAAC,yCAAyC,CAAC,CAAC;AAClD,CAAC;AAED,4CAA4C;AAC5C,qFAAqF;AACrF,SAAS,WAAW,CAAC,WAAmB;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAEzD,IAAI,UAAkB,CAAC;IACvB,IAAI,uBAAuB,GAAG,KAAK,CAAC;IAEpC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,oCAAoC,CAAC,CAAC;YAC3C,UAAU,GAAG,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YACnD,uBAAuB,GAAG,IAAI,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,uDAAuD,CAAC,CAAC;YACjE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,GAAG,GAA2B,EAAE,CAAC;IAEvC,8BAA8B;IAC9B,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC9C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;gBAC7B,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,IAAI,uBAAuB,EAAE,CAAC;QAC5B,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAEvC,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;QACrC,MAAM,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;QAE5C,2CAA2C;QAC3C,UAAU,GAAG,UAAU,CAAC,OAAO,CAC7B,mBAAmB,EACnB,kBAAkB,aAAa,EAAE,CAClC,CAAC;QACF,UAAU,GAAG,UAAU,CAAC,OAAO,CAC7B,mBAAmB,EACnB,kBAAkB,SAAS,EAAE,CAC9B,CAAC;QACF,UAAU,GAAG,UAAU,CAAC,OAAO,CAC7B,sBAAsB,EACtB,qBAAqB,gBAAgB,EAAE,CACxC,CAAC;QAEF,sBAAsB;QACtB,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACnC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAE9C,6CAA6C;QAC7C,GAAG,CAAC,cAAc,GAAG,aAAa,CAAC;QACnC,GAAG,CAAC,cAAc,GAAG,SAAS,CAAC;QAC/B,GAAG,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0CAA0C;AAC1C,KAAK,UAAU,SAAS;IACtB,MAAM,CAAC,mCAAmC,CAAC,CAAC;IAE5C,qEAAqE;IACrE,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAE1D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,sCAAsC,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IAEzC,kDAAkD;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;IACzD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QAC/C,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAEhC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAEnD,mCAAmC;IACnC,IAAI,CAAC;QACH,QAAQ,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC3C,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,+DAA+D;IAC/D,IAAI,CAAC;QACH,QAAQ,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;IAC1C,CAAC;IAED,8DAA8D;IAC9D,MAAM,QAAQ,GAAG;QACf,sBAAsB;QACtB,iBAAiB,OAAO,CAAC,UAAU,IAAI,WAAW,EAAE;QACpD,iBAAiB,OAAO,CAAC,UAAU,IAAI,MAAM,EAAE;QAC/C,iBAAiB,OAAO,CAAC,UAAU,IAAI,uBAAuB,EAAE;QAChE,gBAAgB,gBAAgB,EAAE;QAClC,4BAA4B,OAAO,CAAC,qBAAqB,IAAI,uBAAuB,EAAE;QAEtF,kCAAkC;QAClC,oBAAoB,OAAO,CAAC,aAAa,IAAI,WAAW,EAAE;QAC1D,oBAAoB,OAAO,CAAC,aAAa,IAAI,MAAM,EAAE;QACrD,kBAAkB,OAAO,CAAC,WAAW,IAAI,QAAQ,EAAE;QACnD,oBAAoB,OAAO,CAAC,aAAa,IAAI,UAAU,EAAE;QAEzD,uBAAuB;QACvB,eAAe,OAAO,CAAC,QAAQ,IAAI,YAAY,EAAE;QACjD,gBAAgB,OAAO,CAAC,SAAS,IAAI,MAAM,EAAE;QAE7C,4BAA4B;QAC5B,mBAAmB,OAAO,CAAC,YAAY,IAAI,OAAO,EAAE;QACpD,uBAAuB,OAAO,CAAC,gBAAgB,IAAI,UAAU,EAAE;QAC/D,yBAAyB,OAAO,CAAC,kBAAkB,IAAI,GAAG,EAAE;QAE5D,gBAAgB;QAChB,8BAA8B,OAAO,CAAC,uBAAuB,IAAI,UAAU,EAAE;QAC7E,2BAA2B,OAAO,CAAC,oBAAoB,IAAI,OAAO,EAAE;KACrE,CAAC;IAEF,wFAAwF;IACxF,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,wBAAwB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,0BAA0B,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,qDAAqD;IACrD,kDAAkD;IAClD,MAAM,OAAO,GAAG,wDAAwD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,UAAU,GAAG,CAAC;IAErH,IAAI,CAAC;QACH,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,oCAAoC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC/C,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,GAAG,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;IACvC,GAAG,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IAEhE,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAC3C,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACjD,GAAG,CAAC,YAAY,WAAW,0BAA0B,CAAC,CAAC;IACvD,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAChD,GAAG,CAAC,4DAA4D,CAAC,CAAC;AACpE,CAAC;AAED,gBAAgB;AAChB,KAAK,UAAU,YAAY;IACzB,MAAM,CAAC,iCAAiC,CAAC,CAAC;IAE1C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC9B,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,4DAA4D;IAC5D,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAC1C,MAAM,SAAS,EAAE,CAAC;IAElB,GAAG,CAAC,uDAAuD,CAAC,CAAC;AAC/D,CAAC;AAED,iBAAiB;AACjB,KAAK,UAAU,aAAa;IAC1B,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAE7C,sCAAsC;IACtC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,QAAQ,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,2CAA2C,CAAC,CAAC;IACvD,CAAC;IAED,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACjD,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAC3C,GAAG,CAAC,qDAAqD,CAAC,CAAC;AAC7D,CAAC;AAED,cAAc;AACd,SAAS,MAAM;IACb,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAE3B,qBAAqB;IACrB,GAAG,CAAC,sBAAsB,WAAW,EAAE,CAAC,CAAC;IACzC,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,WAAW,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,eAAe,CAAC,CAAC;QACvB,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,oCAAoC;IACpC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACvF,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3E,OAAO,CAAC,6BAA6B,CAAC,CAAC;YACvC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,+BAA+B,CAAC,CAAC;YACzC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,+BAA+B,CAAC,CAAC;QACzC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAC7C,CAAC;IAED,iBAAiB;IACjB,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAC7B,IAAI,WAAW,EAAE,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,iCAAiC,EAAE;gBACzD,GAAG,EAAE,WAAW;gBAChB,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAEzF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAChC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC;gBACzC,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAAC,EAAE,CAAC,CAAC;AACV,CAAC;AAED,WAAW;AACX,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,SAAS;QACZ,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACtB,KAAK,CAAC,wBAAwB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IAER,KAAK,WAAW;QACd,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACxB,KAAK,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IAER,KAAK,WAAW;QACd,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACxB,KAAK,CAAC,yBAAyB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IAER,KAAK,QAAQ;QACX,MAAM,EAAE,CAAC;QACT,MAAM;IAER,KAAK,QAAQ;QACX,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC3B,KAAK,CAAC,kBAAkB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IAER,KAAK,SAAS;QACZ,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC5B,KAAK,CAAC,mBAAmB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,MAAM;IAER,KAAK,MAAM,CAAC;IACZ,KAAK,QAAQ,CAAC;IACd,KAAK,IAAI,CAAC;IACV,KAAK,SAAS;QACZ,GAAG,CAAC;EACN,MAAM,CAAC,MAAM,4CAA4C,MAAM,CAAC,KAAK;;EAErE,MAAM,CAAC,MAAM,SAAS,MAAM,CAAC,KAAK;;;EAGlC,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,KAAK;;;;;;;;;EASrC,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,KAAK;;;;;;;;EAQrC,MAAM,CAAC,MAAM,iBAAiB,MAAM,CAAC,KAAK;;;EAG1C,MAAM,CAAC,MAAM,WAAW,MAAM,CAAC,KAAK;;CAErC,CAAC,CAAC;QACC,MAAM;IAER;QACE,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;QACrC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}