context-vault 3.4.1 → 3.4.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.
package/dist/server.js CHANGED
@@ -79,6 +79,184 @@ async function tryAutoDaemon() {
79
79
  console.error('[context-vault] Daemon started but could not reconfigure Claude Code');
80
80
  }
81
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
+ }
177
+ /**
178
+ * Auto-update: check npm for a newer version. In daemon (HTTP) mode,
179
+ * install the update and gracefully restart. In stdio mode, just log.
180
+ */
181
+ async function autoUpdate(isDaemon) {
182
+ const { execSync, spawn: spawnProc } = await import('node:child_process');
183
+ // Use a non-blocking npm check to avoid event loop stalls during reindex
184
+ const latest = await new Promise((resolve, reject) => {
185
+ const child = spawnProc('npm', ['view', 'context-vault', 'version'], {
186
+ stdio: ['pipe', 'pipe', 'pipe'],
187
+ timeout: 10000,
188
+ });
189
+ let out = '';
190
+ child.stdout?.on('data', (d) => { out += d.toString(); });
191
+ child.on('close', (code) => {
192
+ if (code === 0 && out.trim())
193
+ resolve(out.trim());
194
+ else
195
+ reject(new Error(`npm view failed (code ${code})`));
196
+ });
197
+ child.on('error', reject);
198
+ }).catch(() => null);
199
+ if (!latest)
200
+ return null; // offline or registry unreachable
201
+ if (latest === pkg.version)
202
+ return latest;
203
+ console.error(`[context-vault] Update available: v${pkg.version} -> v${latest}`);
204
+ if (!isDaemon) {
205
+ console.error('[context-vault] Run: context-vault update');
206
+ return latest;
207
+ }
208
+ // Daemon mode: auto-install and restart
209
+ console.error(`[context-vault] Auto-updating to v${latest}...`);
210
+ try {
211
+ execSync('npm install -g context-vault@latest', {
212
+ encoding: 'utf-8',
213
+ timeout: 120000,
214
+ stdio: ['pipe', 'pipe', 'pipe'],
215
+ });
216
+ console.error(`[context-vault] Installed v${latest}. Restarting daemon...`);
217
+ // Find our own server.js path in the updated install
218
+ const newBin = execSync('which context-vault', {
219
+ encoding: 'utf-8',
220
+ timeout: 5000,
221
+ stdio: ['pipe', 'pipe', 'pipe'],
222
+ }).trim();
223
+ // Resolve the actual package root from the binary
224
+ const { readlinkSync } = await import('node:fs');
225
+ const { resolve: resolvePath } = await import('node:path');
226
+ let binTarget = newBin;
227
+ try {
228
+ binTarget = readlinkSync(newBin);
229
+ }
230
+ catch { }
231
+ const newPkgRoot = resolvePath(dirname(binTarget), '..');
232
+ const newServerJs = join(newPkgRoot, 'dist', 'server.js');
233
+ // Spawn the new version as a replacement daemon
234
+ const portIdx = process.argv.indexOf('--port');
235
+ const port = portIdx !== -1 ? process.argv[portIdx + 1] : '3377';
236
+ const args = [newServerJs, '--http', '--port', port];
237
+ // Pass through vault-dir if specified
238
+ const vaultIdx = process.argv.indexOf('--vault-dir');
239
+ if (vaultIdx !== -1 && process.argv[vaultIdx + 1]) {
240
+ args.push('--vault-dir', process.argv[vaultIdx + 1]);
241
+ }
242
+ const { spawn } = await import('node:child_process');
243
+ const child = spawn(process.execPath, args, {
244
+ detached: true,
245
+ stdio: 'ignore',
246
+ env: { ...process.env, NODE_OPTIONS: '--no-warnings=ExperimentalWarning', CONTEXT_VAULT_NO_DAEMON: '1' },
247
+ });
248
+ child.unref();
249
+ // Give the new process a moment to bind the port, then exit
250
+ await new Promise(r => setTimeout(r, 2000));
251
+ console.error(`[context-vault] New daemon spawned (PID ${child.pid}). Old daemon exiting.`);
252
+ process.exit(0);
253
+ }
254
+ catch (e) {
255
+ console.error(`[context-vault] Auto-update failed: ${e.message}`);
256
+ console.error('[context-vault] Run manually: context-vault update');
257
+ }
258
+ return latest;
259
+ }
82
260
  async function main() {
83
261
  let phase = 'CONFIG';
84
262
  let db;
@@ -212,6 +390,7 @@ async function main() {
212
390
  process.on('SIGINT', () => shutdown('SIGINT'));
213
391
  process.on('SIGTERM', () => shutdown('SIGTERM'));
214
392
  phase = 'CONNECTED';
393
+ let latestKnownVersion = null;
215
394
  const useHttp = process.argv.includes('--http');
216
395
  if (useHttp) {
217
396
  const portIdx = process.argv.indexOf('--port');
@@ -225,11 +404,28 @@ async function main() {
225
404
  res.end(JSON.stringify({
226
405
  ok: true,
227
406
  version: pkg.version,
407
+ latestVersion: latestKnownVersion,
408
+ updateAvailable: latestKnownVersion ? latestKnownVersion !== pkg.version : null,
228
409
  pid: process.pid,
229
410
  uptime: process.uptime(),
230
411
  sessions: Object.keys(transports).length,
231
412
  }));
232
413
  });
414
+ function createTransport() {
415
+ const transport = new StreamableHTTPServerTransport({
416
+ sessionIdGenerator: () => randomUUID(),
417
+ onsessioninitialized: (sid) => {
418
+ transports[sid] = transport;
419
+ },
420
+ });
421
+ transport.onclose = () => {
422
+ const sid = transport.sessionId;
423
+ if (sid && transports[sid]) {
424
+ delete transports[sid];
425
+ }
426
+ };
427
+ return transport;
428
+ }
233
429
  app.post('/mcp', async (req, res) => {
234
430
  const sessionId = req.headers['mcp-session-id'];
235
431
  try {
@@ -237,24 +433,26 @@ async function main() {
237
433
  if (sessionId && transports[sessionId]) {
238
434
  transport = transports[sessionId];
239
435
  }
240
- else if (!sessionId && isInitializeRequest(req.body)) {
241
- transport = new StreamableHTTPServerTransport({
242
- sessionIdGenerator: () => randomUUID(),
243
- onsessioninitialized: (sid) => {
244
- transports[sid] = transport;
245
- },
246
- });
247
- transport.onclose = () => {
248
- const sid = transport.sessionId;
249
- if (sid && transports[sid]) {
250
- delete transports[sid];
251
- }
252
- };
436
+ else if (isInitializeRequest(req.body)) {
437
+ // Allow (re-)initialization with or without a stale session ID.
438
+ // Covers: first connect, reconnect after daemon restart.
439
+ transport = createTransport();
253
440
  const sessionServer = createServer();
254
441
  await sessionServer.connect(transport);
255
442
  await transport.handleRequest(req, res, req.body);
256
443
  return;
257
444
  }
445
+ else if (sessionId) {
446
+ // Stale session (e.g., daemon restarted). Per MCP spec, 404 tells
447
+ // the client to re-initialize automatically.
448
+ res.writeHead(404, { 'Content-Type': 'application/json' });
449
+ res.end(JSON.stringify({
450
+ jsonrpc: '2.0',
451
+ error: { code: -32000, message: 'Session not found. Please reinitialize.' },
452
+ id: null,
453
+ }));
454
+ return;
455
+ }
258
456
  else {
259
457
  res.writeHead(400, { 'Content-Type': 'application/json' });
260
458
  res.end(JSON.stringify({
@@ -281,8 +479,8 @@ async function main() {
281
479
  app.get('/mcp', async (req, res) => {
282
480
  const sessionId = req.headers['mcp-session-id'];
283
481
  if (!sessionId || !transports[sessionId]) {
284
- res.writeHead(400);
285
- res.end('Invalid or missing session ID');
482
+ res.writeHead(404);
483
+ res.end('Session not found');
286
484
  return;
287
485
  }
288
486
  await transports[sessionId].handleRequest(req, res);
@@ -290,8 +488,8 @@ async function main() {
290
488
  app.delete('/mcp', async (req, res) => {
291
489
  const sessionId = req.headers['mcp-session-id'];
292
490
  if (!sessionId || !transports[sessionId]) {
293
- res.writeHead(400);
294
- res.end('Invalid or missing session ID');
491
+ res.writeHead(404);
492
+ res.end('Session not found');
295
493
  return;
296
494
  }
297
495
  await transports[sessionId].handleRequest(req, res);
@@ -301,6 +499,30 @@ async function main() {
301
499
  const pidDir = join(homedir(), '.context-mcp');
302
500
  mkdirSync(pidDir, { recursive: true });
303
501
  writeFileSync(join(pidDir, 'daemon.pid'), JSON.stringify({ pid: process.pid, port }));
502
+ // Self-healing: validate and repair infrastructure on startup
503
+ selfCheck(port).catch(() => { });
504
+ // Periodic health monitor: validate DB, vault, and PID file every 5 minutes
505
+ setInterval(() => {
506
+ try {
507
+ // Verify DB is accessible
508
+ ctx.db.exec('SELECT 1');
509
+ // Verify PID file is correct
510
+ const pidData = existsSync(PID_PATH)
511
+ ? JSON.parse(readFileSync(PID_PATH, 'utf-8'))
512
+ : null;
513
+ if (!pidData || pidData.pid !== process.pid || pidData.port !== port) {
514
+ writeFileSync(PID_PATH, JSON.stringify({ pid: process.pid, port }));
515
+ console.error('[context-vault] Self-heal: repaired stale PID file');
516
+ }
517
+ // Verify vault directory
518
+ if (!existsSync(ctx.config.vaultDir)) {
519
+ console.error(`[context-vault] Warning: vault directory missing: ${ctx.config.vaultDir}`);
520
+ }
521
+ }
522
+ catch (e) {
523
+ console.error(`[context-vault] Health check failed: ${e.message}`);
524
+ }
525
+ }, 5 * 60 * 1000);
304
526
  });
305
527
  }
306
528
  else {
@@ -313,23 +535,19 @@ async function main() {
313
535
  setTimeout(() => tryAutoDaemon().catch(() => { }), 2000);
314
536
  }
315
537
  }
316
- setTimeout(() => {
317
- import('node:child_process')
318
- .then(({ execSync }) => {
319
- try {
320
- const latest = execSync('npm view context-vault version', {
321
- encoding: 'utf-8',
322
- timeout: 5000,
323
- stdio: ['pipe', 'pipe', 'pipe'],
324
- }).trim();
325
- if (latest && latest !== pkg.version) {
326
- console.error(`[context-vault] Update available: v${pkg.version} → v${latest}. Run: context-vault update`);
327
- }
328
- }
329
- catch { }
330
- })
331
- .catch(() => { });
332
- }, 3000);
538
+ // Auto-update check (and apply for daemon mode)
539
+ const updateCheck = async () => {
540
+ const result = await autoUpdate(useHttp);
541
+ if (result)
542
+ latestKnownVersion = result;
543
+ };
544
+ setTimeout(() => updateCheck().catch((e) => {
545
+ console.error(`[context-vault] Update check failed: ${e.message}`);
546
+ }), 5000);
547
+ // Re-check daily for long-running daemons
548
+ if (useHttp) {
549
+ setInterval(() => updateCheck().catch(() => { }), 24 * 60 * 60 * 1000);
550
+ }
333
551
  }
334
552
  catch (rawErr) {
335
553
  const err = rawErr;
@@ -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;;;GAGG;AACH,KAAK,UAAU,UAAU,CAAC,QAAiB;IACzC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAC1E,yEAAyE;IACzE,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3D,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE;YACnE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAmB,EAAE,EAAE;YACxC,IAAI,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;;gBAC7C,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,IAAI,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAqB,CAAW,CAAC;IAEhD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,CAAC,kCAAkC;IAC5D,IAAI,MAAM,KAAK,GAAG,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IAE1C,OAAO,CAAC,KAAK,CAAC,sCAAsC,GAAG,CAAC,OAAO,QAAQ,MAAM,EAAE,CAAC,CAAC;IAEjF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,wCAAwC;IACxC,OAAO,CAAC,KAAK,CAAC,qCAAqC,MAAM,KAAK,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,QAAQ,CAAC,qCAAqC,EAAE;YAC9C,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,8BAA8B,MAAM,wBAAwB,CAAC,CAAC;QAE5E,qDAAqD;QACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,EAAE;YAC7C,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,kDAAkD;QAClD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAI,SAAS,GAAG,MAAM,CAAC;QACvB,IAAI,CAAC;YAAC,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAClD,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAE1D,gDAAgD;QAChD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACjE,MAAM,IAAI,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAErD,sCAAsC;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACrD,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE;YAC1C,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;YACf,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,mCAAmC,EAAE,uBAAuB,EAAE,GAAG,EAAE;SACzG,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,4DAA4D;QAC5D,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,2CAA2C,KAAK,CAAC,GAAG,wBAAwB,CAAC,CAAC;QAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,uCAAwC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7E,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,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;QACpB,IAAI,kBAAkB,GAAkB,IAAI,CAAC;QAE7C,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,aAAa,EAAE,kBAAkB;oBACjC,eAAe,EAAE,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;oBAC/E,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,gDAAgD;QAChD,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;YAC7B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,MAAM;gBAAE,kBAAkB,GAAG,MAAM,CAAC;QAC1C,CAAC,CAAC;QACF,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACzC,OAAO,CAAC,KAAK,CAAC,wCAAyC,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACV,0CAA0C;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,WAAW,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACxE,CAAC;IACH,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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@context-vault/core",
3
- "version": "3.4.1",
3
+ "version": "3.4.3",
4
4
  "type": "module",
5
5
  "description": "Pure local engine: capture, index, search, and utilities for context-vault",
6
6
  "main": "dist/main.js",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "context-vault",
3
- "version": "3.4.1",
3
+ "version": "3.4.3",
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.1",
66
+ "@context-vault/core": "^3.4.3",
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
@@ -90,6 +90,178 @@ async function tryAutoDaemon(): Promise<void> {
90
90
  }
91
91
  }
92
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
+
179
+ /**
180
+ * Auto-update: check npm for a newer version. In daemon (HTTP) mode,
181
+ * install the update and gracefully restart. In stdio mode, just log.
182
+ */
183
+ async function autoUpdate(isDaemon: boolean): Promise<string | null> {
184
+ const { execSync, spawn: spawnProc } = await import('node:child_process');
185
+ // Use a non-blocking npm check to avoid event loop stalls during reindex
186
+ const latest = await new Promise<string>((resolve, reject) => {
187
+ const child = spawnProc('npm', ['view', 'context-vault', 'version'], {
188
+ stdio: ['pipe', 'pipe', 'pipe'],
189
+ timeout: 10000,
190
+ });
191
+ let out = '';
192
+ child.stdout?.on('data', (d: Buffer) => { out += d.toString(); });
193
+ child.on('close', (code: number | null) => {
194
+ if (code === 0 && out.trim()) resolve(out.trim());
195
+ else reject(new Error(`npm view failed (code ${code})`));
196
+ });
197
+ child.on('error', reject);
198
+ }).catch(() => null as string | null) as string;
199
+
200
+ if (!latest) return null; // offline or registry unreachable
201
+ if (latest === pkg.version) return latest;
202
+
203
+ console.error(`[context-vault] Update available: v${pkg.version} -> v${latest}`);
204
+
205
+ if (!isDaemon) {
206
+ console.error('[context-vault] Run: context-vault update');
207
+ return latest;
208
+ }
209
+
210
+ // Daemon mode: auto-install and restart
211
+ console.error(`[context-vault] Auto-updating to v${latest}...`);
212
+ try {
213
+ execSync('npm install -g context-vault@latest', {
214
+ encoding: 'utf-8',
215
+ timeout: 120000,
216
+ stdio: ['pipe', 'pipe', 'pipe'],
217
+ });
218
+ console.error(`[context-vault] Installed v${latest}. Restarting daemon...`);
219
+
220
+ // Find our own server.js path in the updated install
221
+ const newBin = execSync('which context-vault', {
222
+ encoding: 'utf-8',
223
+ timeout: 5000,
224
+ stdio: ['pipe', 'pipe', 'pipe'],
225
+ }).trim();
226
+
227
+ // Resolve the actual package root from the binary
228
+ const { readlinkSync } = await import('node:fs');
229
+ const { resolve: resolvePath } = await import('node:path');
230
+ let binTarget = newBin;
231
+ try { binTarget = readlinkSync(newBin); } catch {}
232
+ const newPkgRoot = resolvePath(dirname(binTarget), '..');
233
+ const newServerJs = join(newPkgRoot, 'dist', 'server.js');
234
+
235
+ // Spawn the new version as a replacement daemon
236
+ const portIdx = process.argv.indexOf('--port');
237
+ const port = portIdx !== -1 ? process.argv[portIdx + 1] : '3377';
238
+ const args = [newServerJs, '--http', '--port', port];
239
+
240
+ // Pass through vault-dir if specified
241
+ const vaultIdx = process.argv.indexOf('--vault-dir');
242
+ if (vaultIdx !== -1 && process.argv[vaultIdx + 1]) {
243
+ args.push('--vault-dir', process.argv[vaultIdx + 1]);
244
+ }
245
+
246
+ const { spawn } = await import('node:child_process');
247
+ const child = spawn(process.execPath, args, {
248
+ detached: true,
249
+ stdio: 'ignore',
250
+ env: { ...process.env, NODE_OPTIONS: '--no-warnings=ExperimentalWarning', CONTEXT_VAULT_NO_DAEMON: '1' },
251
+ });
252
+ child.unref();
253
+
254
+ // Give the new process a moment to bind the port, then exit
255
+ await new Promise(r => setTimeout(r, 2000));
256
+ console.error(`[context-vault] New daemon spawned (PID ${child.pid}). Old daemon exiting.`);
257
+ process.exit(0);
258
+ } catch (e) {
259
+ console.error(`[context-vault] Auto-update failed: ${(e as Error).message}`);
260
+ console.error('[context-vault] Run manually: context-vault update');
261
+ }
262
+ return latest;
263
+ }
264
+
93
265
  async function main(): Promise<void> {
94
266
  let phase = 'CONFIG';
95
267
  let db: import('node:sqlite').DatabaseSync | undefined;
@@ -251,6 +423,7 @@ async function main(): Promise<void> {
251
423
  process.on('SIGTERM', () => shutdown('SIGTERM'));
252
424
 
253
425
  phase = 'CONNECTED';
426
+ let latestKnownVersion: string | null = null;
254
427
 
255
428
  const useHttp = process.argv.includes('--http');
256
429
 
@@ -268,35 +441,54 @@ async function main(): Promise<void> {
268
441
  res.end(JSON.stringify({
269
442
  ok: true,
270
443
  version: pkg.version,
444
+ latestVersion: latestKnownVersion,
445
+ updateAvailable: latestKnownVersion ? latestKnownVersion !== pkg.version : null,
271
446
  pid: process.pid,
272
447
  uptime: process.uptime(),
273
448
  sessions: Object.keys(transports).length,
274
449
  }));
275
450
  });
276
451
 
452
+ function createTransport(): StreamableHTTPServerTransport {
453
+ const transport = new StreamableHTTPServerTransport({
454
+ sessionIdGenerator: () => randomUUID(),
455
+ onsessioninitialized: (sid: string) => {
456
+ transports[sid] = transport;
457
+ },
458
+ });
459
+ transport.onclose = () => {
460
+ const sid = transport.sessionId;
461
+ if (sid && transports[sid]) {
462
+ delete transports[sid];
463
+ }
464
+ };
465
+ return transport;
466
+ }
467
+
277
468
  app.post('/mcp', async (req: IncomingMessage & { body?: unknown }, res: ServerResponse) => {
278
469
  const sessionId = req.headers['mcp-session-id'] as string | undefined;
279
470
  try {
280
471
  let transport: StreamableHTTPServerTransport;
281
472
  if (sessionId && transports[sessionId]) {
282
473
  transport = transports[sessionId];
283
- } else if (!sessionId && isInitializeRequest((req as any).body)) {
284
- transport = new StreamableHTTPServerTransport({
285
- sessionIdGenerator: () => randomUUID(),
286
- onsessioninitialized: (sid: string) => {
287
- transports[sid] = transport;
288
- },
289
- });
290
- transport.onclose = () => {
291
- const sid = transport.sessionId;
292
- if (sid && transports[sid]) {
293
- delete transports[sid];
294
- }
295
- };
474
+ } else if (isInitializeRequest((req as any).body)) {
475
+ // Allow (re-)initialization with or without a stale session ID.
476
+ // Covers: first connect, reconnect after daemon restart.
477
+ transport = createTransport();
296
478
  const sessionServer = createServer();
297
479
  await sessionServer.connect(transport);
298
480
  await transport.handleRequest(req, res, (req as any).body);
299
481
  return;
482
+ } else if (sessionId) {
483
+ // Stale session (e.g., daemon restarted). Per MCP spec, 404 tells
484
+ // the client to re-initialize automatically.
485
+ res.writeHead(404, { 'Content-Type': 'application/json' });
486
+ res.end(JSON.stringify({
487
+ jsonrpc: '2.0',
488
+ error: { code: -32000, message: 'Session not found. Please reinitialize.' },
489
+ id: null,
490
+ }));
491
+ return;
300
492
  } else {
301
493
  res.writeHead(400, { 'Content-Type': 'application/json' });
302
494
  res.end(JSON.stringify({
@@ -323,8 +515,8 @@ async function main(): Promise<void> {
323
515
  app.get('/mcp', async (req: IncomingMessage, res: ServerResponse) => {
324
516
  const sessionId = req.headers['mcp-session-id'] as string | undefined;
325
517
  if (!sessionId || !transports[sessionId]) {
326
- res.writeHead(400);
327
- res.end('Invalid or missing session ID');
518
+ res.writeHead(404);
519
+ res.end('Session not found');
328
520
  return;
329
521
  }
330
522
  await transports[sessionId].handleRequest(req, res);
@@ -333,8 +525,8 @@ async function main(): Promise<void> {
333
525
  app.delete('/mcp', async (req: IncomingMessage, res: ServerResponse) => {
334
526
  const sessionId = req.headers['mcp-session-id'] as string | undefined;
335
527
  if (!sessionId || !transports[sessionId]) {
336
- res.writeHead(400);
337
- res.end('Invalid or missing session ID');
528
+ res.writeHead(404);
529
+ res.end('Session not found');
338
530
  return;
339
531
  }
340
532
  await transports[sessionId].handleRequest(req, res);
@@ -345,6 +537,31 @@ async function main(): Promise<void> {
345
537
  const pidDir = join(homedir(), '.context-mcp');
346
538
  mkdirSync(pidDir, { recursive: true });
347
539
  writeFileSync(join(pidDir, 'daemon.pid'), JSON.stringify({ pid: process.pid, port }));
540
+
541
+ // Self-healing: validate and repair infrastructure on startup
542
+ selfCheck(port).catch(() => {});
543
+
544
+ // Periodic health monitor: validate DB, vault, and PID file every 5 minutes
545
+ setInterval(() => {
546
+ try {
547
+ // Verify DB is accessible
548
+ ctx.db.exec('SELECT 1');
549
+ // Verify PID file is correct
550
+ const pidData = existsSync(PID_PATH)
551
+ ? JSON.parse(readFileSync(PID_PATH, 'utf-8'))
552
+ : null;
553
+ if (!pidData || pidData.pid !== process.pid || pidData.port !== port) {
554
+ writeFileSync(PID_PATH, JSON.stringify({ pid: process.pid, port }));
555
+ console.error('[context-vault] Self-heal: repaired stale PID file');
556
+ }
557
+ // Verify vault directory
558
+ if (!existsSync(ctx.config.vaultDir)) {
559
+ console.error(`[context-vault] Warning: vault directory missing: ${ctx.config.vaultDir}`);
560
+ }
561
+ } catch (e) {
562
+ console.error(`[context-vault] Health check failed: ${(e as Error).message}`);
563
+ }
564
+ }, 5 * 60 * 1000);
348
565
  });
349
566
  } else {
350
567
  const transport = new StdioServerTransport();
@@ -358,24 +575,18 @@ async function main(): Promise<void> {
358
575
  }
359
576
  }
360
577
 
361
- setTimeout(() => {
362
- import('node:child_process')
363
- .then(({ execSync }) => {
364
- try {
365
- const latest = execSync('npm view context-vault version', {
366
- encoding: 'utf-8',
367
- timeout: 5000,
368
- stdio: ['pipe', 'pipe', 'pipe'],
369
- }).trim();
370
- if (latest && latest !== pkg.version) {
371
- console.error(
372
- `[context-vault] Update available: v${pkg.version} → v${latest}. Run: context-vault update`
373
- );
374
- }
375
- } catch {}
376
- })
377
- .catch(() => {});
378
- }, 3000);
578
+ // Auto-update check (and apply for daemon mode)
579
+ const updateCheck = async () => {
580
+ const result = await autoUpdate(useHttp);
581
+ if (result) latestKnownVersion = result;
582
+ };
583
+ setTimeout(() => updateCheck().catch((e) => {
584
+ console.error(`[context-vault] Update check failed: ${(e as Error).message}`);
585
+ }), 5000);
586
+ // Re-check daily for long-running daemons
587
+ if (useHttp) {
588
+ setInterval(() => updateCheck().catch(() => {}), 24 * 60 * 60 * 1000);
589
+ }
379
590
  } catch (rawErr) {
380
591
  const err = rawErr as Error;
381
592
  const dataDir = config?.dataDir || join(homedir(), '.context-mcp');