context-vault 3.4.0 → 3.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +98 -19
- package/dist/server.js +220 -17
- package/dist/server.js.map +1 -1
- package/node_modules/@context-vault/core/package.json +1 -1
- package/package.json +2 -2
- package/src/server.ts +212 -17
package/bin/cli.js
CHANGED
|
@@ -5457,33 +5457,100 @@ ${bold('Subcommands:')}
|
|
|
5457
5457
|
|
|
5458
5458
|
} else if (sub === 'install') {
|
|
5459
5459
|
const port = parseInt(getFlag('--port') || String(defaultPort), 10);
|
|
5460
|
-
const existing = readPid();
|
|
5461
|
-
|
|
5462
|
-
if (!existing || !isAlive(existing.pid)) {
|
|
5463
|
-
if (existing) try { unlinkSync(pidPath); } catch {}
|
|
5464
5460
|
|
|
5465
|
-
|
|
5461
|
+
// 1. Install LaunchAgent on macOS for auto-start on login
|
|
5462
|
+
if (platform() === 'darwin') {
|
|
5463
|
+
const launchAgentDir = join(HOME, 'Library', 'LaunchAgents');
|
|
5464
|
+
const plistPath = join(launchAgentDir, 'com.context-vault.daemon.plist');
|
|
5465
|
+
const logPath = join(HOME, '.context-mcp', 'daemon.log');
|
|
5466
5466
|
const vaultDir = getFlag('--vault-dir');
|
|
5467
|
-
const
|
|
5468
|
-
if (vaultDir)
|
|
5469
|
-
|
|
5470
|
-
const
|
|
5471
|
-
|
|
5472
|
-
|
|
5473
|
-
|
|
5474
|
-
|
|
5475
|
-
|
|
5467
|
+
const progArgs = [process.execPath, SERVER_PATH, '--http', '--port', String(port)];
|
|
5468
|
+
if (vaultDir) progArgs.push('--vault-dir', vaultDir);
|
|
5469
|
+
|
|
5470
|
+
const plist = `<?xml version="1.0" encoding="UTF-8"?>
|
|
5471
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
5472
|
+
<plist version="1.0">
|
|
5473
|
+
<dict>
|
|
5474
|
+
<key>Label</key>
|
|
5475
|
+
<string>com.context-vault.daemon</string>
|
|
5476
|
+
<key>ProgramArguments</key>
|
|
5477
|
+
<array>
|
|
5478
|
+
${progArgs.map(a => ` <string>${a}</string>`).join('\n')}
|
|
5479
|
+
</array>
|
|
5480
|
+
<key>RunAtLoad</key>
|
|
5481
|
+
<true/>
|
|
5482
|
+
<key>KeepAlive</key>
|
|
5483
|
+
<dict>
|
|
5484
|
+
<key>SuccessfulExit</key>
|
|
5485
|
+
<false/>
|
|
5486
|
+
</dict>
|
|
5487
|
+
<key>StandardErrorPath</key>
|
|
5488
|
+
<string>${logPath}</string>
|
|
5489
|
+
<key>StandardOutPath</key>
|
|
5490
|
+
<string>/dev/null</string>
|
|
5491
|
+
<key>EnvironmentVariables</key>
|
|
5492
|
+
<dict>
|
|
5493
|
+
<key>NODE_OPTIONS</key>
|
|
5494
|
+
<string>--no-warnings=ExperimentalWarning</string>
|
|
5495
|
+
<key>CONTEXT_VAULT_NO_DAEMON</key>
|
|
5496
|
+
<string>1</string>
|
|
5497
|
+
</dict>
|
|
5498
|
+
<key>ThrottleInterval</key>
|
|
5499
|
+
<integer>5</integer>
|
|
5500
|
+
</dict>
|
|
5501
|
+
</plist>`;
|
|
5502
|
+
|
|
5503
|
+
mkdirSync(launchAgentDir, { recursive: true });
|
|
5504
|
+
|
|
5505
|
+
// Unload existing agent if present
|
|
5506
|
+
try { execSync(`launchctl unload "${plistPath}" 2>/dev/null`, { stdio: 'pipe' }); } catch {}
|
|
5507
|
+
|
|
5508
|
+
writeFileSync(plistPath, plist);
|
|
5509
|
+
try {
|
|
5510
|
+
execSync(`launchctl load -w "${plistPath}"`, { stdio: 'pipe' });
|
|
5511
|
+
console.log(` ${green('✓')} LaunchAgent installed (auto-starts on login, restarts on crash)`);
|
|
5512
|
+
} catch (e) {
|
|
5513
|
+
console.log(` ${yellow('!')} LaunchAgent write succeeded but launchctl load failed: ${e.message}`);
|
|
5514
|
+
}
|
|
5476
5515
|
|
|
5477
|
-
|
|
5478
|
-
|
|
5479
|
-
|
|
5516
|
+
// Wait for launchd to start the daemon
|
|
5517
|
+
const health = await pollHealth(port, 8000);
|
|
5518
|
+
if (health) {
|
|
5519
|
+
console.log(` ${green('✓')} Daemon running (PID ${health.pid})`);
|
|
5520
|
+
} else {
|
|
5521
|
+
console.error(red(` Daemon did not start. Check log: ${logPath}`));
|
|
5480
5522
|
process.exit(1);
|
|
5481
5523
|
}
|
|
5482
|
-
console.log(` ${green('✓')} Daemon started (PID ${health.pid})`);
|
|
5483
5524
|
} else {
|
|
5484
|
-
|
|
5525
|
+
// Non-macOS: direct spawn (no service manager integration yet)
|
|
5526
|
+
const existing = readPid();
|
|
5527
|
+
if (!existing || !isAlive(existing.pid)) {
|
|
5528
|
+
if (existing) try { unlinkSync(pidPath); } catch {}
|
|
5529
|
+
|
|
5530
|
+
console.log(` Starting daemon on port ${port}...`);
|
|
5531
|
+
const vaultDir = getFlag('--vault-dir');
|
|
5532
|
+
const serverArgs = [SERVER_PATH, '--http', '--port', String(port)];
|
|
5533
|
+
if (vaultDir) serverArgs.push('--vault-dir', vaultDir);
|
|
5534
|
+
|
|
5535
|
+
const child = spawn(process.execPath, serverArgs, {
|
|
5536
|
+
detached: true,
|
|
5537
|
+
stdio: 'ignore',
|
|
5538
|
+
env: { ...process.env, NODE_OPTIONS: '--no-warnings=ExperimentalWarning' },
|
|
5539
|
+
});
|
|
5540
|
+
child.unref();
|
|
5541
|
+
|
|
5542
|
+
const health = await pollHealth(port);
|
|
5543
|
+
if (!health) {
|
|
5544
|
+
console.error(red(` Failed to start daemon.`));
|
|
5545
|
+
process.exit(1);
|
|
5546
|
+
}
|
|
5547
|
+
console.log(` ${green('✓')} Daemon started (PID ${health.pid})`);
|
|
5548
|
+
} else {
|
|
5549
|
+
console.log(` ${green('✓')} Daemon already running (PID ${existing.pid})`);
|
|
5550
|
+
}
|
|
5485
5551
|
}
|
|
5486
5552
|
|
|
5553
|
+
// 2. Configure Claude Code for HTTP transport
|
|
5487
5554
|
console.log(` Configuring Claude Code to use HTTP transport...`);
|
|
5488
5555
|
try {
|
|
5489
5556
|
configureClaudeDaemon(port);
|
|
@@ -5496,6 +5563,7 @@ ${bold('Subcommands:')}
|
|
|
5496
5563
|
}
|
|
5497
5564
|
|
|
5498
5565
|
} else if (sub === 'uninstall') {
|
|
5566
|
+
// 1. Revert Claude Code to stdio
|
|
5499
5567
|
console.log(` Reverting Claude Code to stdio mode...`);
|
|
5500
5568
|
try {
|
|
5501
5569
|
const vaultDir = getFlag('--vault-dir') || join(HOME, '.vault');
|
|
@@ -5506,6 +5574,17 @@ ${bold('Subcommands:')}
|
|
|
5506
5574
|
console.error(red(` Failed to reconfigure Claude Code: ${e.message}`));
|
|
5507
5575
|
}
|
|
5508
5576
|
|
|
5577
|
+
// 2. Remove LaunchAgent on macOS
|
|
5578
|
+
if (platform() === 'darwin') {
|
|
5579
|
+
const plistPath = join(HOME, 'Library', 'LaunchAgents', 'com.context-vault.daemon.plist');
|
|
5580
|
+
if (existsSync(plistPath)) {
|
|
5581
|
+
try { execSync(`launchctl unload "${plistPath}" 2>/dev/null`, { stdio: 'pipe' }); } catch {}
|
|
5582
|
+
try { unlinkSync(plistPath); } catch {}
|
|
5583
|
+
console.log(` ${green('✓')} LaunchAgent removed`);
|
|
5584
|
+
}
|
|
5585
|
+
}
|
|
5586
|
+
|
|
5587
|
+
// 3. Stop daemon if running
|
|
5509
5588
|
const existing = readPid();
|
|
5510
5589
|
if (existing && isAlive(existing.pid)) {
|
|
5511
5590
|
console.log(` Stopping daemon (PID ${existing.pid})...`);
|
package/dist/server.js
CHANGED
|
@@ -18,6 +18,162 @@ import { embed } from '@context-vault/core/embed';
|
|
|
18
18
|
import { initDatabase, NativeModuleError, prepareStatements, insertVec, deleteVec, } from '@context-vault/core/db';
|
|
19
19
|
import { registerTools } from './register-tools.js';
|
|
20
20
|
import { pruneExpired } from '@context-vault/core/index';
|
|
21
|
+
const DAEMON_PORT = 3377;
|
|
22
|
+
const PID_PATH = join(homedir(), '.context-mcp', 'daemon.pid');
|
|
23
|
+
async function tryAutoDaemon() {
|
|
24
|
+
// Check if daemon is already running
|
|
25
|
+
if (existsSync(PID_PATH)) {
|
|
26
|
+
try {
|
|
27
|
+
const { pid, port } = JSON.parse(readFileSync(PID_PATH, 'utf-8'));
|
|
28
|
+
process.kill(pid, 0); // throws if dead
|
|
29
|
+
const res = await fetch(`http://localhost:${port}/health`);
|
|
30
|
+
if (res.ok)
|
|
31
|
+
return; // daemon is healthy, nothing to do
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// stale PID file or unhealthy, continue to start daemon
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const { spawn, execFileSync } = await import('node:child_process');
|
|
38
|
+
// Spawn daemon process
|
|
39
|
+
const serverPath = join(__dirname, 'server.js');
|
|
40
|
+
const child = spawn(process.execPath, [serverPath, '--http', '--port', String(DAEMON_PORT)], {
|
|
41
|
+
detached: true,
|
|
42
|
+
stdio: 'ignore',
|
|
43
|
+
env: { ...process.env, NODE_OPTIONS: '--no-warnings=ExperimentalWarning' },
|
|
44
|
+
});
|
|
45
|
+
child.unref();
|
|
46
|
+
// Wait for daemon to be healthy
|
|
47
|
+
const deadline = Date.now() + 5000;
|
|
48
|
+
let healthy = false;
|
|
49
|
+
while (Date.now() < deadline) {
|
|
50
|
+
try {
|
|
51
|
+
const res = await fetch(`http://localhost:${DAEMON_PORT}/health`);
|
|
52
|
+
if (res.ok) {
|
|
53
|
+
healthy = true;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch { }
|
|
58
|
+
await new Promise(r => setTimeout(r, 200));
|
|
59
|
+
}
|
|
60
|
+
if (!healthy) {
|
|
61
|
+
console.error('[context-vault] Auto-daemon failed to start, continuing in stdio mode');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Reconfigure Claude Code to use HTTP transport
|
|
65
|
+
const env = { ...process.env };
|
|
66
|
+
delete env.CLAUDECODE;
|
|
67
|
+
try {
|
|
68
|
+
execFileSync('claude', ['mcp', 'remove', 'context-vault', '-s', 'user'], { stdio: 'pipe', env });
|
|
69
|
+
}
|
|
70
|
+
catch { }
|
|
71
|
+
try {
|
|
72
|
+
execFileSync('claude', [
|
|
73
|
+
'mcp', 'add', '-s', 'user', '--transport', 'http',
|
|
74
|
+
'context-vault', `http://localhost:${DAEMON_PORT}/mcp`,
|
|
75
|
+
], { stdio: 'pipe', env });
|
|
76
|
+
console.error(`[context-vault] Daemon started on port ${DAEMON_PORT}. New sessions will use shared HTTP mode.`);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
console.error('[context-vault] Daemon started but could not reconfigure Claude Code');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function selfCheck(port) {
|
|
83
|
+
const { execFileSync } = await import('node:child_process');
|
|
84
|
+
const env = { ...process.env };
|
|
85
|
+
delete env.CLAUDECODE;
|
|
86
|
+
// 1. Validate LaunchAgent plist on macOS (correct node/server paths)
|
|
87
|
+
if (process.platform === 'darwin') {
|
|
88
|
+
const plistPath = join(homedir(), 'Library', 'LaunchAgents', 'com.context-vault.daemon.plist');
|
|
89
|
+
if (existsSync(plistPath)) {
|
|
90
|
+
try {
|
|
91
|
+
const plist = readFileSync(plistPath, 'utf-8');
|
|
92
|
+
const currentNode = process.execPath;
|
|
93
|
+
const currentServer = join(__dirname, 'server.js');
|
|
94
|
+
if (!plist.includes(currentNode) || !plist.includes(currentServer)) {
|
|
95
|
+
console.error('[context-vault] Self-heal: LaunchAgent has stale paths, rewriting...');
|
|
96
|
+
const vaultDirIdx = process.argv.indexOf('--vault-dir');
|
|
97
|
+
const vaultDir = vaultDirIdx !== -1 ? process.argv[vaultDirIdx + 1] : undefined;
|
|
98
|
+
const progArgs = [currentNode, currentServer, '--http', '--port', String(port)];
|
|
99
|
+
if (vaultDir)
|
|
100
|
+
progArgs.push('--vault-dir', vaultDir);
|
|
101
|
+
const logPath = join(homedir(), '.context-mcp', 'daemon.log');
|
|
102
|
+
const newPlist = `<?xml version="1.0" encoding="UTF-8"?>
|
|
103
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
104
|
+
<plist version="1.0">
|
|
105
|
+
<dict>
|
|
106
|
+
<key>Label</key>
|
|
107
|
+
<string>com.context-vault.daemon</string>
|
|
108
|
+
<key>ProgramArguments</key>
|
|
109
|
+
<array>
|
|
110
|
+
${progArgs.map(a => ` <string>${a}</string>`).join('\n')}
|
|
111
|
+
</array>
|
|
112
|
+
<key>RunAtLoad</key>
|
|
113
|
+
<true/>
|
|
114
|
+
<key>KeepAlive</key>
|
|
115
|
+
<dict>
|
|
116
|
+
<key>SuccessfulExit</key>
|
|
117
|
+
<false/>
|
|
118
|
+
</dict>
|
|
119
|
+
<key>StandardErrorPath</key>
|
|
120
|
+
<string>${logPath}</string>
|
|
121
|
+
<key>StandardOutPath</key>
|
|
122
|
+
<string>/dev/null</string>
|
|
123
|
+
<key>EnvironmentVariables</key>
|
|
124
|
+
<dict>
|
|
125
|
+
<key>NODE_OPTIONS</key>
|
|
126
|
+
<string>--no-warnings=ExperimentalWarning</string>
|
|
127
|
+
<key>CONTEXT_VAULT_NO_DAEMON</key>
|
|
128
|
+
<string>1</string>
|
|
129
|
+
</dict>
|
|
130
|
+
<key>ThrottleInterval</key>
|
|
131
|
+
<integer>5</integer>
|
|
132
|
+
</dict>
|
|
133
|
+
</plist>`;
|
|
134
|
+
writeFileSync(plistPath, newPlist);
|
|
135
|
+
// Reload the agent so launchd picks up new paths
|
|
136
|
+
try {
|
|
137
|
+
execFileSync('launchctl', ['unload', plistPath], { stdio: 'pipe' });
|
|
138
|
+
}
|
|
139
|
+
catch { }
|
|
140
|
+
try {
|
|
141
|
+
execFileSync('launchctl', ['load', '-w', plistPath], { stdio: 'pipe' });
|
|
142
|
+
}
|
|
143
|
+
catch { }
|
|
144
|
+
console.error('[context-vault] Self-heal: LaunchAgent updated with current paths');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (e) {
|
|
148
|
+
console.error(`[context-vault] LaunchAgent check failed: ${e.message}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// 2. Validate Claude Code MCP config points to this daemon
|
|
153
|
+
try {
|
|
154
|
+
const result = execFileSync('claude', ['mcp', 'list'], {
|
|
155
|
+
encoding: 'utf-8',
|
|
156
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
157
|
+
env,
|
|
158
|
+
timeout: 5000,
|
|
159
|
+
});
|
|
160
|
+
if (result.includes('context-vault') && !result.includes(`localhost:${port}`)) {
|
|
161
|
+
console.error('[context-vault] Self-heal: Claude Code not pointing to this daemon, reconfiguring...');
|
|
162
|
+
try {
|
|
163
|
+
execFileSync('claude', ['mcp', 'remove', 'context-vault', '-s', 'user'], { stdio: 'pipe', env });
|
|
164
|
+
}
|
|
165
|
+
catch { }
|
|
166
|
+
execFileSync('claude', [
|
|
167
|
+
'mcp', 'add', '-s', 'user', '--transport', 'http',
|
|
168
|
+
'context-vault', `http://localhost:${port}/mcp`,
|
|
169
|
+
], { stdio: 'pipe', env });
|
|
170
|
+
console.error('[context-vault] Self-heal: Claude Code reconfigured');
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
// claude CLI not available or check failed, skip
|
|
175
|
+
}
|
|
176
|
+
}
|
|
21
177
|
async function main() {
|
|
22
178
|
let phase = 'CONFIG';
|
|
23
179
|
let db;
|
|
@@ -169,6 +325,21 @@ async function main() {
|
|
|
169
325
|
sessions: Object.keys(transports).length,
|
|
170
326
|
}));
|
|
171
327
|
});
|
|
328
|
+
function createTransport() {
|
|
329
|
+
const transport = new StreamableHTTPServerTransport({
|
|
330
|
+
sessionIdGenerator: () => randomUUID(),
|
|
331
|
+
onsessioninitialized: (sid) => {
|
|
332
|
+
transports[sid] = transport;
|
|
333
|
+
},
|
|
334
|
+
});
|
|
335
|
+
transport.onclose = () => {
|
|
336
|
+
const sid = transport.sessionId;
|
|
337
|
+
if (sid && transports[sid]) {
|
|
338
|
+
delete transports[sid];
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
return transport;
|
|
342
|
+
}
|
|
172
343
|
app.post('/mcp', async (req, res) => {
|
|
173
344
|
const sessionId = req.headers['mcp-session-id'];
|
|
174
345
|
try {
|
|
@@ -176,24 +347,26 @@ async function main() {
|
|
|
176
347
|
if (sessionId && transports[sessionId]) {
|
|
177
348
|
transport = transports[sessionId];
|
|
178
349
|
}
|
|
179
|
-
else if (
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
transports[sid] = transport;
|
|
184
|
-
},
|
|
185
|
-
});
|
|
186
|
-
transport.onclose = () => {
|
|
187
|
-
const sid = transport.sessionId;
|
|
188
|
-
if (sid && transports[sid]) {
|
|
189
|
-
delete transports[sid];
|
|
190
|
-
}
|
|
191
|
-
};
|
|
350
|
+
else if (isInitializeRequest(req.body)) {
|
|
351
|
+
// Allow (re-)initialization with or without a stale session ID.
|
|
352
|
+
// Covers: first connect, reconnect after daemon restart.
|
|
353
|
+
transport = createTransport();
|
|
192
354
|
const sessionServer = createServer();
|
|
193
355
|
await sessionServer.connect(transport);
|
|
194
356
|
await transport.handleRequest(req, res, req.body);
|
|
195
357
|
return;
|
|
196
358
|
}
|
|
359
|
+
else if (sessionId) {
|
|
360
|
+
// Stale session (e.g., daemon restarted). Per MCP spec, 404 tells
|
|
361
|
+
// the client to re-initialize automatically.
|
|
362
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
363
|
+
res.end(JSON.stringify({
|
|
364
|
+
jsonrpc: '2.0',
|
|
365
|
+
error: { code: -32000, message: 'Session not found. Please reinitialize.' },
|
|
366
|
+
id: null,
|
|
367
|
+
}));
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
197
370
|
else {
|
|
198
371
|
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
199
372
|
res.end(JSON.stringify({
|
|
@@ -220,8 +393,8 @@ async function main() {
|
|
|
220
393
|
app.get('/mcp', async (req, res) => {
|
|
221
394
|
const sessionId = req.headers['mcp-session-id'];
|
|
222
395
|
if (!sessionId || !transports[sessionId]) {
|
|
223
|
-
res.writeHead(
|
|
224
|
-
res.end('
|
|
396
|
+
res.writeHead(404);
|
|
397
|
+
res.end('Session not found');
|
|
225
398
|
return;
|
|
226
399
|
}
|
|
227
400
|
await transports[sessionId].handleRequest(req, res);
|
|
@@ -229,8 +402,8 @@ async function main() {
|
|
|
229
402
|
app.delete('/mcp', async (req, res) => {
|
|
230
403
|
const sessionId = req.headers['mcp-session-id'];
|
|
231
404
|
if (!sessionId || !transports[sessionId]) {
|
|
232
|
-
res.writeHead(
|
|
233
|
-
res.end('
|
|
405
|
+
res.writeHead(404);
|
|
406
|
+
res.end('Session not found');
|
|
234
407
|
return;
|
|
235
408
|
}
|
|
236
409
|
await transports[sessionId].handleRequest(req, res);
|
|
@@ -240,11 +413,41 @@ async function main() {
|
|
|
240
413
|
const pidDir = join(homedir(), '.context-mcp');
|
|
241
414
|
mkdirSync(pidDir, { recursive: true });
|
|
242
415
|
writeFileSync(join(pidDir, 'daemon.pid'), JSON.stringify({ pid: process.pid, port }));
|
|
416
|
+
// Self-healing: validate and repair infrastructure on startup
|
|
417
|
+
selfCheck(port).catch(() => { });
|
|
418
|
+
// Periodic health monitor: validate DB, vault, and PID file every 5 minutes
|
|
419
|
+
setInterval(() => {
|
|
420
|
+
try {
|
|
421
|
+
// Verify DB is accessible
|
|
422
|
+
ctx.db.exec('SELECT 1');
|
|
423
|
+
// Verify PID file is correct
|
|
424
|
+
const pidData = existsSync(PID_PATH)
|
|
425
|
+
? JSON.parse(readFileSync(PID_PATH, 'utf-8'))
|
|
426
|
+
: null;
|
|
427
|
+
if (!pidData || pidData.pid !== process.pid || pidData.port !== port) {
|
|
428
|
+
writeFileSync(PID_PATH, JSON.stringify({ pid: process.pid, port }));
|
|
429
|
+
console.error('[context-vault] Self-heal: repaired stale PID file');
|
|
430
|
+
}
|
|
431
|
+
// Verify vault directory
|
|
432
|
+
if (!existsSync(ctx.config.vaultDir)) {
|
|
433
|
+
console.error(`[context-vault] Warning: vault directory missing: ${ctx.config.vaultDir}`);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
catch (e) {
|
|
437
|
+
console.error(`[context-vault] Health check failed: ${e.message}`);
|
|
438
|
+
}
|
|
439
|
+
}, 5 * 60 * 1000);
|
|
243
440
|
});
|
|
244
441
|
}
|
|
245
442
|
else {
|
|
246
443
|
const transport = new StdioServerTransport();
|
|
247
444
|
await server.connect(transport);
|
|
445
|
+
// Auto-daemonize: if no daemon is running, spawn one in the background
|
|
446
|
+
// and reconfigure Claude Code to use HTTP. Next session onwards, all
|
|
447
|
+
// sessions share the single daemon process. This session stays on stdio.
|
|
448
|
+
if (!process.env.CONTEXT_VAULT_NO_DAEMON) {
|
|
449
|
+
setTimeout(() => tryAutoDaemon().catch(() => { }), 2000);
|
|
450
|
+
}
|
|
248
451
|
}
|
|
249
452
|
setTimeout(() => {
|
|
250
453
|
import('node:child_process')
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAElF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAErF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,SAAS,GACV,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,MAAM,WAAW,GAAG,IAAI,CAAC;AACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;AAE/D,KAAK,UAAU,aAAa;IAC1B,qCAAqC;IACrC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;YACvC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,SAAS,CAAC,CAAC;YAC3D,IAAI,GAAG,CAAC,EAAE;gBAAE,OAAO,CAAC,mCAAmC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;QAC1D,CAAC;IACH,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAEnE,uBAAuB;IACvB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE;QAC3F,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,mCAAmC,EAAE;KAC3E,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,gCAAgC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IACnC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,oBAAoB,WAAW,SAAS,CAAC,CAAC;YAClE,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBAAC,OAAO,GAAG,IAAI,CAAC;gBAAC,MAAM;YAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IAED,gDAAgD;IAChD,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,OAAQ,GAA0C,CAAC,UAAU,CAAC;IAC9D,IAAI,CAAC;QACH,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACnG,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,IAAI,CAAC;QACH,YAAY,CAAC,QAAQ,EAAE;YACrB,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;YACjD,eAAe,EAAE,oBAAoB,WAAW,MAAM;SACvD,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,0CAA0C,WAAW,2CAA2C,CAAC,CAAC;IAClH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAY;IACnC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,OAAQ,GAA0C,CAAC,UAAU,CAAC;IAE9D,qEAAqE;IACrE,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,gCAAgC,CAAC,CAAC;QAC/F,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;gBACrC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;gBACnD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;oBACnE,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;oBACtF,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;oBACxD,MAAM,QAAQ,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBAChF,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;oBAChF,IAAI,QAAQ;wBAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;oBACrD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;oBAC9D,MAAM,QAAQ,GAAG;;;;;;;;EAQzB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;YAU/C,OAAO;;;;;;;;;;;;;SAaV,CAAC;oBACA,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBACnC,iDAAiD;oBACjD,IAAI,CAAC;wBAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAA,CAAC;oBACrF,IAAI,CAAC;wBAAC,YAAY,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAA,CAAC;oBACzF,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,6CAA8C,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;YACrD,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,GAAG;YACH,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC;YAC9E,OAAO,CAAC,KAAK,CAAC,sFAAsF,CAAC,CAAC;YACtG,IAAI,CAAC;gBAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAClH,YAAY,CAAC,QAAQ,EAAE;gBACrB,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;gBACjD,eAAe,EAAE,oBAAoB,IAAI,MAAM;aAChD,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;IACnD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,KAAK,GAAG,QAAQ,CAAC;IACrB,IAAI,EAAkD,CAAC;IACvD,IAAI,MAAmE,CAAC;IAExE,IAAI,CAAC;QACH,MAAM,GAAG,aAAa,EAAE,CAAC;QAEzB,KAAK,GAAG,MAAM,CAAC;QACf,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YACpD,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzB,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,QAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,2DAA2D,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5F,OAAO,CAAC,KAAK,CAAC,mBAAoB,QAAkB,CAAC,OAAO,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,KAAK,CAAC,+CAA+C,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;YACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;gBACvC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAC/C,CAAC,CAAC,EAAE,CAAC;YACP,aAAa,CACX,UAAU,EACV,IAAI,CAAC,SAAS,CACZ;gBACE,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACvD,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI,CACT,CAAC;QACJ,CAAC;QAAC,OAAO,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CACX,yDAA0D,SAAmB,CAAC,OAAO,EAAE,CACxF,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEpD,OAAO,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,6BAA6B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,KAAK,CAAC,4BAA4B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACvE,CAAC;QAED,KAAK,GAAG,IAAI,CAAC;QACb,EAAE,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAEpC,MAAM,GAAG,GAAa;YACpB,EAAE;YACF,MAAM;YACN,KAAK;YACL,KAAK;YACL,SAAS,EAAE,CAAC,KAAa,EAAE,SAAuB,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;YACzF,SAAS,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;YACrD,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACvB,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE;SACjD,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CACX,0BAA0B,MAAM,YAAY,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CACjF,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,QAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CACX,kDAAmD,QAAkB,CAAC,OAAO,EAAE,CAChF,CAAC;QACJ,CAAC;QAED,KAAK,GAAG,QAAQ,CAAC;QAEjB,MAAM,mBAAmB,GAAG,MAAM,CAAC;QACnC,IAAI,YAAY,GAAG,MAAM,CAAC;QAC1B,IAAI,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;QACnC,MAAM,CAAC,cAAc,CAAC,GAAa,EAAE,QAAQ,EAAE;YAC7C,GAAG;gBACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,IAAI,GAAG,GAAG,cAAc,GAAG,mBAAmB;oBAAE,OAAO,YAAa,CAAC;gBACrE,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;gBAC9B,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;oBACpC,OAAO,CAAC,KAAK,CAAC,wDAAwD,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACxF,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;oBAC9B,KAAK,CAAC,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACpD,CAAC;gBACD,YAAY,GAAG,KAAK,CAAC;gBACrB,cAAc,GAAG,GAAG,CAAC;gBACrB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QAEH,SAAS,YAAY;YACnB,MAAM,CAAC,GAAG,IAAI,SAAS,CACrB,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAC/C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;YACF,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACtB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;QAE9B,SAAS,OAAO;YACd,IAAI,CAAC;gBACH,IAAK,EAAU,CAAC,aAAa,EAAE,CAAC;oBAC9B,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;oBACpE,EAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACvB,CAAC;gBACA,EAAU,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;gBAC/C,EAAG,CAAC,KAAK,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC5D,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,mCAAoC,WAAqB,CAAC,OAAO,EAAE,CAAC,CAAC;YACrF,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,SAAS,QAAQ,CAAC,MAAc;YAC9B,OAAO,CAAC,KAAK,CAAC,4BAA4B,MAAM,oBAAoB,CAAC,CAAC;YACtE,IAAI,CAAC;gBAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAE3E,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,KAAK,CACX,+BAA+B,GAAG,CAAC,SAAS,CAAC,KAAK,4BAA4B,CAC/E,CAAC;gBACF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;oBAC7B,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;wBAC9B,aAAa,CAAC,KAAK,CAAC,CAAC;wBACrB,OAAO,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC,EAAE,GAAG,CAAC,CAAC;gBACR,UAAU,CAAC,GAAG,EAAE;oBACd,aAAa,CAAC,KAAK,CAAC,CAAC;oBACrB,OAAO,CAAC,KAAK,CACX,oCAAoC,GAAG,CAAC,SAAS,CAAC,KAAK,6BAA6B,CACrF,CAAC;oBACF,OAAO,EAAE,CAAC;gBACZ,CAAC,EAAE,IAAI,CAAC,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAEjD,KAAK,GAAG,WAAW,CAAC;QAEpB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;gBACtD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;gBACzC,CAAC,CAAC,IAAI,CAAC;YAET,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;YAClC,MAAM,UAAU,GAAkD,EAAE,CAAC;YAErE,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAqB,EAAE,GAAmB,EAAE,EAAE;gBAChE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrB,EAAE,EAAE,IAAI;oBACR,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;oBACxB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM;iBACzC,CAAC,CAAC,CAAC;YACN,CAAC,CAAC,CAAC;YAEH,SAAS,eAAe;gBACtB,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;oBAClD,kBAAkB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;oBACtC,oBAAoB,EAAE,CAAC,GAAW,EAAE,EAAE;wBACpC,UAAU,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;oBAC9B,CAAC;iBACF,CAAC,CAAC;gBACH,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;oBACvB,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC;oBAChC,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC3B,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC,CAAC;gBACF,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,GAAyC,EAAE,GAAmB,EAAE,EAAE;gBACxF,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;gBACtE,IAAI,CAAC;oBACH,IAAI,SAAwC,CAAC;oBAC7C,IAAI,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;wBACvC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;oBACpC,CAAC;yBAAM,IAAI,mBAAmB,CAAE,GAAW,CAAC,IAAI,CAAC,EAAE,CAAC;wBAClD,gEAAgE;wBAChE,yDAAyD;wBACzD,SAAS,GAAG,eAAe,EAAE,CAAC;wBAC9B,MAAM,aAAa,GAAG,YAAY,EAAE,CAAC;wBACrC,MAAM,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;wBACvC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAG,GAAW,CAAC,IAAI,CAAC,CAAC;wBAC3D,OAAO;oBACT,CAAC;yBAAM,IAAI,SAAS,EAAE,CAAC;wBACrB,kEAAkE;wBAClE,6CAA6C;wBAC7C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;wBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;4BACrB,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,yCAAyC,EAAE;4BAC3E,EAAE,EAAE,IAAI;yBACT,CAAC,CAAC,CAAC;wBACJ,OAAO;oBACT,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;wBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;4BACrB,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,kCAAkC,EAAE;4BACpE,EAAE,EAAE,IAAI;yBACT,CAAC,CAAC,CAAC;wBACJ,OAAO;oBACT,CAAC;oBACD,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAG,GAAW,CAAC,IAAI,CAAC,CAAC;gBAC7D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;oBACpD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;wBACrB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;wBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;4BACrB,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE;4BACzD,EAAE,EAAE,IAAI;yBACT,CAAC,CAAC,CAAC;oBACN,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAE,EAAE;gBAClE,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;gBACtE,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBACzC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBACnB,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;oBAC7B,OAAO;gBACT,CAAC;gBACD,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAE,EAAE;gBACrE,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;gBACtE,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBACzC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBACnB,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;oBAC7B,OAAO;gBACT,CAAC;gBACD,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;gBACpB,OAAO,CAAC,KAAK,CAAC,+CAA+C,IAAI,MAAM,CAAC,CAAC;gBACzE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;gBAC/C,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAEtF,8DAA8D;gBAC9D,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAEhC,4EAA4E;gBAC5E,WAAW,CAAC,GAAG,EAAE;oBACf,IAAI,CAAC;wBACH,0BAA0B;wBAC1B,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACxB,6BAA6B;wBAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC;4BAClC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;4BAC7C,CAAC,CAAC,IAAI,CAAC;wBACT,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;4BACrE,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;4BACpE,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;wBACtE,CAAC;wBACD,yBAAyB;wBACzB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;4BACrC,OAAO,CAAC,KAAK,CAAC,qDAAqD,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;wBAC5F,CAAC;oBACH,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,OAAO,CAAC,KAAK,CAAC,wCAAyC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;oBAChF,CAAC;gBACH,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;YAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAEhC,uEAAuE;YACvE,qEAAqE;YACrE,yEAAyE;YACzE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;gBACzC,UAAU,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,CAAC,oBAAoB,CAAC;iBACzB,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACrB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,QAAQ,CAAC,gCAAgC,EAAE;wBACxD,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,IAAI;wBACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;qBAChC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACV,IAAI,MAAM,IAAI,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;wBACrC,OAAO,CAAC,KAAK,CACX,sCAAsC,GAAG,CAAC,OAAO,OAAO,MAAM,6BAA6B,CAC5F,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACrB,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,MAAe,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;QAEnE,MAAM,QAAQ,GAAG;YACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,UAAU,EAAG,GAAW,CAAC,WAAW,EAAE,IAAI,IAAI,OAAO;YACrD,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,YAAY,EAAE,OAAO,CAAC,OAAO;YAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,GAAG,CAAC,OAAO;YACvB,KAAK;SACN,CAAC;QACF,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,aAAa,CACX,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,EAC5B,GAAG,QAAQ,CAAC,SAAS,KAAK,KAAK,KAAK,GAAG,CAAC,OAAO,EAAE,CAClD,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,kBAAkB,CAAC,MAAM,EAAE;YACzB,KAAK,EAAE,eAAe;YACtB,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,GAAG,CAAC,OAAO;SACxB,CAAC,CAAC;QAEH,IAAI,MAAM,YAAY,iBAAiB,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;YAClF,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACjF,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;YAClF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,sCAAsC,KAAK,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QAC1E,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CACX,gEAAgE,MAAM,EAAE,MAAM,IAAI,UAAU,GAAG,CAChG,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG;QACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,UAAU,EAAE,mBAAmB;QAC/B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QACrD,YAAY,EAAE,OAAO,CAAC,OAAO;QAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,GAAG,CAAC,OAAO;KACxB,CAAC;IACF,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClC,OAAO,CAAC,KAAK,CAAC,uCAAuC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAC1E,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG;QACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,UAAU,EAAE,oBAAoB;QAChC,OAAO;QACP,YAAY,EAAE,OAAO,CAAC,OAAO;QAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,GAAG,CAAC,OAAO;KACxB,CAAC;IACF,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClC,OAAO,CAAC,KAAK,CAAC,wCAAwC,OAAO,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;IAC1E,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,2CAA2C,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "context-vault",
|
|
3
|
-
"version": "3.4.
|
|
3
|
+
"version": "3.4.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Persistent memory for AI agents — saves and searches knowledge across sessions",
|
|
6
6
|
"bin": {
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"@context-vault/core"
|
|
64
64
|
],
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@context-vault/core": "^3.4.
|
|
66
|
+
"@context-vault/core": "^3.4.2",
|
|
67
67
|
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
68
68
|
"adm-zip": "^0.5.16",
|
|
69
69
|
"sqlite-vec": "^0.1.0"
|
package/src/server.ts
CHANGED
|
@@ -30,6 +30,152 @@ import {
|
|
|
30
30
|
import { registerTools } from './register-tools.js';
|
|
31
31
|
import { pruneExpired } from '@context-vault/core/index';
|
|
32
32
|
|
|
33
|
+
const DAEMON_PORT = 3377;
|
|
34
|
+
const PID_PATH = join(homedir(), '.context-mcp', 'daemon.pid');
|
|
35
|
+
|
|
36
|
+
async function tryAutoDaemon(): Promise<void> {
|
|
37
|
+
// Check if daemon is already running
|
|
38
|
+
if (existsSync(PID_PATH)) {
|
|
39
|
+
try {
|
|
40
|
+
const { pid, port } = JSON.parse(readFileSync(PID_PATH, 'utf-8'));
|
|
41
|
+
process.kill(pid, 0); // throws if dead
|
|
42
|
+
const res = await fetch(`http://localhost:${port}/health`);
|
|
43
|
+
if (res.ok) return; // daemon is healthy, nothing to do
|
|
44
|
+
} catch {
|
|
45
|
+
// stale PID file or unhealthy, continue to start daemon
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const { spawn, execFileSync } = await import('node:child_process');
|
|
50
|
+
|
|
51
|
+
// Spawn daemon process
|
|
52
|
+
const serverPath = join(__dirname, 'server.js');
|
|
53
|
+
const child = spawn(process.execPath, [serverPath, '--http', '--port', String(DAEMON_PORT)], {
|
|
54
|
+
detached: true,
|
|
55
|
+
stdio: 'ignore',
|
|
56
|
+
env: { ...process.env, NODE_OPTIONS: '--no-warnings=ExperimentalWarning' },
|
|
57
|
+
});
|
|
58
|
+
child.unref();
|
|
59
|
+
|
|
60
|
+
// Wait for daemon to be healthy
|
|
61
|
+
const deadline = Date.now() + 5000;
|
|
62
|
+
let healthy = false;
|
|
63
|
+
while (Date.now() < deadline) {
|
|
64
|
+
try {
|
|
65
|
+
const res = await fetch(`http://localhost:${DAEMON_PORT}/health`);
|
|
66
|
+
if (res.ok) { healthy = true; break; }
|
|
67
|
+
} catch {}
|
|
68
|
+
await new Promise(r => setTimeout(r, 200));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (!healthy) {
|
|
72
|
+
console.error('[context-vault] Auto-daemon failed to start, continuing in stdio mode');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Reconfigure Claude Code to use HTTP transport
|
|
77
|
+
const env = { ...process.env };
|
|
78
|
+
delete (env as Record<string, string | undefined>).CLAUDECODE;
|
|
79
|
+
try {
|
|
80
|
+
execFileSync('claude', ['mcp', 'remove', 'context-vault', '-s', 'user'], { stdio: 'pipe', env });
|
|
81
|
+
} catch {}
|
|
82
|
+
try {
|
|
83
|
+
execFileSync('claude', [
|
|
84
|
+
'mcp', 'add', '-s', 'user', '--transport', 'http',
|
|
85
|
+
'context-vault', `http://localhost:${DAEMON_PORT}/mcp`,
|
|
86
|
+
], { stdio: 'pipe', env });
|
|
87
|
+
console.error(`[context-vault] Daemon started on port ${DAEMON_PORT}. New sessions will use shared HTTP mode.`);
|
|
88
|
+
} catch {
|
|
89
|
+
console.error('[context-vault] Daemon started but could not reconfigure Claude Code');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async function selfCheck(port: number): Promise<void> {
|
|
94
|
+
const { execFileSync } = await import('node:child_process');
|
|
95
|
+
const env = { ...process.env };
|
|
96
|
+
delete (env as Record<string, string | undefined>).CLAUDECODE;
|
|
97
|
+
|
|
98
|
+
// 1. Validate LaunchAgent plist on macOS (correct node/server paths)
|
|
99
|
+
if (process.platform === 'darwin') {
|
|
100
|
+
const plistPath = join(homedir(), 'Library', 'LaunchAgents', 'com.context-vault.daemon.plist');
|
|
101
|
+
if (existsSync(plistPath)) {
|
|
102
|
+
try {
|
|
103
|
+
const plist = readFileSync(plistPath, 'utf-8');
|
|
104
|
+
const currentNode = process.execPath;
|
|
105
|
+
const currentServer = join(__dirname, 'server.js');
|
|
106
|
+
if (!plist.includes(currentNode) || !plist.includes(currentServer)) {
|
|
107
|
+
console.error('[context-vault] Self-heal: LaunchAgent has stale paths, rewriting...');
|
|
108
|
+
const vaultDirIdx = process.argv.indexOf('--vault-dir');
|
|
109
|
+
const vaultDir = vaultDirIdx !== -1 ? process.argv[vaultDirIdx + 1] : undefined;
|
|
110
|
+
const progArgs = [currentNode, currentServer, '--http', '--port', String(port)];
|
|
111
|
+
if (vaultDir) progArgs.push('--vault-dir', vaultDir);
|
|
112
|
+
const logPath = join(homedir(), '.context-mcp', 'daemon.log');
|
|
113
|
+
const newPlist = `<?xml version="1.0" encoding="UTF-8"?>
|
|
114
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
115
|
+
<plist version="1.0">
|
|
116
|
+
<dict>
|
|
117
|
+
<key>Label</key>
|
|
118
|
+
<string>com.context-vault.daemon</string>
|
|
119
|
+
<key>ProgramArguments</key>
|
|
120
|
+
<array>
|
|
121
|
+
${progArgs.map(a => ` <string>${a}</string>`).join('\n')}
|
|
122
|
+
</array>
|
|
123
|
+
<key>RunAtLoad</key>
|
|
124
|
+
<true/>
|
|
125
|
+
<key>KeepAlive</key>
|
|
126
|
+
<dict>
|
|
127
|
+
<key>SuccessfulExit</key>
|
|
128
|
+
<false/>
|
|
129
|
+
</dict>
|
|
130
|
+
<key>StandardErrorPath</key>
|
|
131
|
+
<string>${logPath}</string>
|
|
132
|
+
<key>StandardOutPath</key>
|
|
133
|
+
<string>/dev/null</string>
|
|
134
|
+
<key>EnvironmentVariables</key>
|
|
135
|
+
<dict>
|
|
136
|
+
<key>NODE_OPTIONS</key>
|
|
137
|
+
<string>--no-warnings=ExperimentalWarning</string>
|
|
138
|
+
<key>CONTEXT_VAULT_NO_DAEMON</key>
|
|
139
|
+
<string>1</string>
|
|
140
|
+
</dict>
|
|
141
|
+
<key>ThrottleInterval</key>
|
|
142
|
+
<integer>5</integer>
|
|
143
|
+
</dict>
|
|
144
|
+
</plist>`;
|
|
145
|
+
writeFileSync(plistPath, newPlist);
|
|
146
|
+
// Reload the agent so launchd picks up new paths
|
|
147
|
+
try { execFileSync('launchctl', ['unload', plistPath], { stdio: 'pipe' }); } catch {}
|
|
148
|
+
try { execFileSync('launchctl', ['load', '-w', plistPath], { stdio: 'pipe' }); } catch {}
|
|
149
|
+
console.error('[context-vault] Self-heal: LaunchAgent updated with current paths');
|
|
150
|
+
}
|
|
151
|
+
} catch (e) {
|
|
152
|
+
console.error(`[context-vault] LaunchAgent check failed: ${(e as Error).message}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// 2. Validate Claude Code MCP config points to this daemon
|
|
158
|
+
try {
|
|
159
|
+
const result = execFileSync('claude', ['mcp', 'list'], {
|
|
160
|
+
encoding: 'utf-8',
|
|
161
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
162
|
+
env,
|
|
163
|
+
timeout: 5000,
|
|
164
|
+
});
|
|
165
|
+
if (result.includes('context-vault') && !result.includes(`localhost:${port}`)) {
|
|
166
|
+
console.error('[context-vault] Self-heal: Claude Code not pointing to this daemon, reconfiguring...');
|
|
167
|
+
try { execFileSync('claude', ['mcp', 'remove', 'context-vault', '-s', 'user'], { stdio: 'pipe', env }); } catch {}
|
|
168
|
+
execFileSync('claude', [
|
|
169
|
+
'mcp', 'add', '-s', 'user', '--transport', 'http',
|
|
170
|
+
'context-vault', `http://localhost:${port}/mcp`,
|
|
171
|
+
], { stdio: 'pipe', env });
|
|
172
|
+
console.error('[context-vault] Self-heal: Claude Code reconfigured');
|
|
173
|
+
}
|
|
174
|
+
} catch {
|
|
175
|
+
// claude CLI not available or check failed, skip
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
33
179
|
async function main(): Promise<void> {
|
|
34
180
|
let phase = 'CONFIG';
|
|
35
181
|
let db: import('node:sqlite').DatabaseSync | undefined;
|
|
@@ -214,29 +360,46 @@ async function main(): Promise<void> {
|
|
|
214
360
|
}));
|
|
215
361
|
});
|
|
216
362
|
|
|
363
|
+
function createTransport(): StreamableHTTPServerTransport {
|
|
364
|
+
const transport = new StreamableHTTPServerTransport({
|
|
365
|
+
sessionIdGenerator: () => randomUUID(),
|
|
366
|
+
onsessioninitialized: (sid: string) => {
|
|
367
|
+
transports[sid] = transport;
|
|
368
|
+
},
|
|
369
|
+
});
|
|
370
|
+
transport.onclose = () => {
|
|
371
|
+
const sid = transport.sessionId;
|
|
372
|
+
if (sid && transports[sid]) {
|
|
373
|
+
delete transports[sid];
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
return transport;
|
|
377
|
+
}
|
|
378
|
+
|
|
217
379
|
app.post('/mcp', async (req: IncomingMessage & { body?: unknown }, res: ServerResponse) => {
|
|
218
380
|
const sessionId = req.headers['mcp-session-id'] as string | undefined;
|
|
219
381
|
try {
|
|
220
382
|
let transport: StreamableHTTPServerTransport;
|
|
221
383
|
if (sessionId && transports[sessionId]) {
|
|
222
384
|
transport = transports[sessionId];
|
|
223
|
-
} else if (
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
transports[sid] = transport;
|
|
228
|
-
},
|
|
229
|
-
});
|
|
230
|
-
transport.onclose = () => {
|
|
231
|
-
const sid = transport.sessionId;
|
|
232
|
-
if (sid && transports[sid]) {
|
|
233
|
-
delete transports[sid];
|
|
234
|
-
}
|
|
235
|
-
};
|
|
385
|
+
} else if (isInitializeRequest((req as any).body)) {
|
|
386
|
+
// Allow (re-)initialization with or without a stale session ID.
|
|
387
|
+
// Covers: first connect, reconnect after daemon restart.
|
|
388
|
+
transport = createTransport();
|
|
236
389
|
const sessionServer = createServer();
|
|
237
390
|
await sessionServer.connect(transport);
|
|
238
391
|
await transport.handleRequest(req, res, (req as any).body);
|
|
239
392
|
return;
|
|
393
|
+
} else if (sessionId) {
|
|
394
|
+
// Stale session (e.g., daemon restarted). Per MCP spec, 404 tells
|
|
395
|
+
// the client to re-initialize automatically.
|
|
396
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
397
|
+
res.end(JSON.stringify({
|
|
398
|
+
jsonrpc: '2.0',
|
|
399
|
+
error: { code: -32000, message: 'Session not found. Please reinitialize.' },
|
|
400
|
+
id: null,
|
|
401
|
+
}));
|
|
402
|
+
return;
|
|
240
403
|
} else {
|
|
241
404
|
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
242
405
|
res.end(JSON.stringify({
|
|
@@ -263,8 +426,8 @@ async function main(): Promise<void> {
|
|
|
263
426
|
app.get('/mcp', async (req: IncomingMessage, res: ServerResponse) => {
|
|
264
427
|
const sessionId = req.headers['mcp-session-id'] as string | undefined;
|
|
265
428
|
if (!sessionId || !transports[sessionId]) {
|
|
266
|
-
res.writeHead(
|
|
267
|
-
res.end('
|
|
429
|
+
res.writeHead(404);
|
|
430
|
+
res.end('Session not found');
|
|
268
431
|
return;
|
|
269
432
|
}
|
|
270
433
|
await transports[sessionId].handleRequest(req, res);
|
|
@@ -273,8 +436,8 @@ async function main(): Promise<void> {
|
|
|
273
436
|
app.delete('/mcp', async (req: IncomingMessage, res: ServerResponse) => {
|
|
274
437
|
const sessionId = req.headers['mcp-session-id'] as string | undefined;
|
|
275
438
|
if (!sessionId || !transports[sessionId]) {
|
|
276
|
-
res.writeHead(
|
|
277
|
-
res.end('
|
|
439
|
+
res.writeHead(404);
|
|
440
|
+
res.end('Session not found');
|
|
278
441
|
return;
|
|
279
442
|
}
|
|
280
443
|
await transports[sessionId].handleRequest(req, res);
|
|
@@ -285,10 +448,42 @@ async function main(): Promise<void> {
|
|
|
285
448
|
const pidDir = join(homedir(), '.context-mcp');
|
|
286
449
|
mkdirSync(pidDir, { recursive: true });
|
|
287
450
|
writeFileSync(join(pidDir, 'daemon.pid'), JSON.stringify({ pid: process.pid, port }));
|
|
451
|
+
|
|
452
|
+
// Self-healing: validate and repair infrastructure on startup
|
|
453
|
+
selfCheck(port).catch(() => {});
|
|
454
|
+
|
|
455
|
+
// Periodic health monitor: validate DB, vault, and PID file every 5 minutes
|
|
456
|
+
setInterval(() => {
|
|
457
|
+
try {
|
|
458
|
+
// Verify DB is accessible
|
|
459
|
+
ctx.db.exec('SELECT 1');
|
|
460
|
+
// Verify PID file is correct
|
|
461
|
+
const pidData = existsSync(PID_PATH)
|
|
462
|
+
? JSON.parse(readFileSync(PID_PATH, 'utf-8'))
|
|
463
|
+
: null;
|
|
464
|
+
if (!pidData || pidData.pid !== process.pid || pidData.port !== port) {
|
|
465
|
+
writeFileSync(PID_PATH, JSON.stringify({ pid: process.pid, port }));
|
|
466
|
+
console.error('[context-vault] Self-heal: repaired stale PID file');
|
|
467
|
+
}
|
|
468
|
+
// Verify vault directory
|
|
469
|
+
if (!existsSync(ctx.config.vaultDir)) {
|
|
470
|
+
console.error(`[context-vault] Warning: vault directory missing: ${ctx.config.vaultDir}`);
|
|
471
|
+
}
|
|
472
|
+
} catch (e) {
|
|
473
|
+
console.error(`[context-vault] Health check failed: ${(e as Error).message}`);
|
|
474
|
+
}
|
|
475
|
+
}, 5 * 60 * 1000);
|
|
288
476
|
});
|
|
289
477
|
} else {
|
|
290
478
|
const transport = new StdioServerTransport();
|
|
291
479
|
await server.connect(transport);
|
|
480
|
+
|
|
481
|
+
// Auto-daemonize: if no daemon is running, spawn one in the background
|
|
482
|
+
// and reconfigure Claude Code to use HTTP. Next session onwards, all
|
|
483
|
+
// sessions share the single daemon process. This session stays on stdio.
|
|
484
|
+
if (!process.env.CONTEXT_VAULT_NO_DAEMON) {
|
|
485
|
+
setTimeout(() => tryAutoDaemon().catch(() => {}), 2000);
|
|
486
|
+
}
|
|
292
487
|
}
|
|
293
488
|
|
|
294
489
|
setTimeout(() => {
|