context-vault 3.13.0 → 3.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/bin/cli.js +263 -414
  2. package/dist/error-log.d.ts +2 -0
  3. package/dist/error-log.d.ts.map +1 -1
  4. package/dist/error-log.js +31 -1
  5. package/dist/error-log.js.map +1 -1
  6. package/dist/register-tools.d.ts.map +1 -1
  7. package/dist/register-tools.js +4 -0
  8. package/dist/register-tools.js.map +1 -1
  9. package/dist/server.js +23 -426
  10. package/dist/server.js.map +1 -1
  11. package/dist/status.d.ts.map +1 -1
  12. package/dist/status.js +17 -0
  13. package/dist/status.js.map +1 -1
  14. package/dist/tools/context-status.d.ts.map +1 -1
  15. package/dist/tools/context-status.js +26 -1
  16. package/dist/tools/context-status.js.map +1 -1
  17. package/dist/tools/delete-context.d.ts +1 -1
  18. package/dist/tools/delete-context.d.ts.map +1 -1
  19. package/dist/tools/delete-context.js +15 -2
  20. package/dist/tools/delete-context.js.map +1 -1
  21. package/dist/tools/get-context.d.ts.map +1 -1
  22. package/dist/tools/get-context.js +3 -2
  23. package/dist/tools/get-context.js.map +1 -1
  24. package/dist/tools/list-context.d.ts +7 -15
  25. package/dist/tools/list-context.d.ts.map +1 -1
  26. package/dist/tools/list-context.js +570 -111
  27. package/dist/tools/list-context.js.map +1 -1
  28. package/dist/tools/publish-to-team.js +1 -1
  29. package/dist/tools/publish-to-team.js.map +1 -1
  30. package/dist/tools/save-context.js +2 -2
  31. package/dist/tools/save-context.js.map +1 -1
  32. package/dist/tools/session-start.d.ts +20 -7
  33. package/dist/tools/session-start.d.ts.map +1 -1
  34. package/dist/tools/session-start.js +406 -439
  35. package/dist/tools/session-start.js.map +1 -1
  36. package/node_modules/@context-vault/core/dist/capture.d.ts.map +1 -1
  37. package/node_modules/@context-vault/core/dist/capture.js +4 -0
  38. package/node_modules/@context-vault/core/dist/capture.js.map +1 -1
  39. package/node_modules/@context-vault/core/dist/categories.d.ts.map +1 -1
  40. package/node_modules/@context-vault/core/dist/categories.js +8 -0
  41. package/node_modules/@context-vault/core/dist/categories.js.map +1 -1
  42. package/node_modules/@context-vault/core/dist/compact.d.ts +38 -0
  43. package/node_modules/@context-vault/core/dist/compact.d.ts.map +1 -0
  44. package/node_modules/@context-vault/core/dist/compact.js +127 -0
  45. package/node_modules/@context-vault/core/dist/compact.js.map +1 -0
  46. package/node_modules/@context-vault/core/dist/config.d.ts.map +1 -1
  47. package/node_modules/@context-vault/core/dist/config.js +12 -0
  48. package/node_modules/@context-vault/core/dist/config.js.map +1 -1
  49. package/node_modules/@context-vault/core/dist/db.d.ts +1 -1
  50. package/node_modules/@context-vault/core/dist/db.d.ts.map +1 -1
  51. package/node_modules/@context-vault/core/dist/db.js +40 -4
  52. package/node_modules/@context-vault/core/dist/db.js.map +1 -1
  53. package/node_modules/@context-vault/core/dist/main.d.ts +6 -2
  54. package/node_modules/@context-vault/core/dist/main.d.ts.map +1 -1
  55. package/node_modules/@context-vault/core/dist/main.js +5 -1
  56. package/node_modules/@context-vault/core/dist/main.js.map +1 -1
  57. package/node_modules/@context-vault/core/dist/search.d.ts +13 -1
  58. package/node_modules/@context-vault/core/dist/search.d.ts.map +1 -1
  59. package/node_modules/@context-vault/core/dist/search.js +50 -5
  60. package/node_modules/@context-vault/core/dist/search.js.map +1 -1
  61. package/node_modules/@context-vault/core/dist/tier-analysis.d.ts +36 -0
  62. package/node_modules/@context-vault/core/dist/tier-analysis.d.ts.map +1 -0
  63. package/node_modules/@context-vault/core/dist/tier-analysis.js +227 -0
  64. package/node_modules/@context-vault/core/dist/tier-analysis.js.map +1 -0
  65. package/node_modules/@context-vault/core/dist/types.d.ts +12 -0
  66. package/node_modules/@context-vault/core/dist/types.d.ts.map +1 -1
  67. package/node_modules/@context-vault/core/dist/watch.d.ts +21 -0
  68. package/node_modules/@context-vault/core/dist/watch.d.ts.map +1 -0
  69. package/node_modules/@context-vault/core/dist/watch.js +230 -0
  70. package/node_modules/@context-vault/core/dist/watch.js.map +1 -0
  71. package/node_modules/@context-vault/core/package.json +13 -1
  72. package/node_modules/@context-vault/core/src/capture.ts +4 -0
  73. package/node_modules/@context-vault/core/src/categories.ts +8 -0
  74. package/node_modules/@context-vault/core/src/compact.ts +183 -0
  75. package/node_modules/@context-vault/core/src/config.ts +8 -0
  76. package/node_modules/@context-vault/core/src/db.ts +40 -4
  77. package/node_modules/@context-vault/core/src/main.ts +10 -0
  78. package/node_modules/@context-vault/core/src/search.ts +55 -4
  79. package/node_modules/@context-vault/core/src/tier-analysis.ts +299 -0
  80. package/node_modules/@context-vault/core/src/types.ts +10 -0
  81. package/node_modules/@context-vault/core/src/watch.ts +269 -0
  82. package/package.json +2 -2
  83. package/scripts/postinstall.js +26 -1
  84. package/src/error-log.ts +30 -0
  85. package/src/register-tools.ts +4 -0
  86. package/src/server.ts +23 -423
  87. package/src/status.ts +17 -0
  88. package/src/tools/context-status.ts +30 -1
  89. package/src/tools/delete-context.ts +10 -5
  90. package/src/tools/get-context.ts +3 -2
  91. package/src/tools/list-context.ts +620 -119
  92. package/src/tools/publish-to-team.ts +1 -1
  93. package/src/tools/save-context.ts +2 -2
  94. package/src/tools/session-start.ts +444 -484
@@ -1,4 +1,6 @@
1
1
  export declare function errorLogPath(dataDir: string): string;
2
2
  export declare function appendErrorLog(dataDir: string, entry: Record<string, unknown>): void;
3
3
  export declare function errorLogCount(dataDir: string): number;
4
+ /** Scan the tail of error.log for embedding-related lines (support + large-vault triage). */
5
+ export declare function embedRelatedLogTail(dataDir: string, maxBytes?: number, maxMatches?: number): string[];
4
6
  //# sourceMappingURL=error-log.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-log.d.ts","sourceRoot":"","sources":["../src/error-log.ts"],"names":[],"mappings":"AAYA,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAWpF;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUrD"}
1
+ {"version":3,"file":"error-log.d.ts","sourceRoot":"","sources":["../src/error-log.ts"],"names":[],"mappings":"AAeA,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAWpF;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAUrD;AAED,6FAA6F;AAC7F,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAS,EAAE,UAAU,SAAI,GAAG,MAAM,EAAE,CAwBhG"}
package/dist/error-log.js CHANGED
@@ -1,4 +1,4 @@
1
- import { appendFileSync, existsSync, mkdirSync, readFileSync, statSync, writeFileSync, } from 'node:fs';
1
+ import { appendFileSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, readSync, statSync, writeFileSync, } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  const MAX_LOG_SIZE = 1024 * 1024;
4
4
  export function errorLogPath(dataDir) {
@@ -30,4 +30,34 @@ export function errorLogCount(dataDir) {
30
30
  return 0;
31
31
  }
32
32
  }
33
+ /** Scan the tail of error.log for embedding-related lines (support + large-vault triage). */
34
+ export function embedRelatedLogTail(dataDir, maxBytes = 16_384, maxMatches = 8) {
35
+ try {
36
+ const logPath = errorLogPath(dataDir);
37
+ if (!existsSync(logPath))
38
+ return [];
39
+ const size = statSync(logPath).size;
40
+ let raw;
41
+ if (size <= maxBytes) {
42
+ raw = readFileSync(logPath, 'utf-8');
43
+ }
44
+ else {
45
+ const buf = Buffer.alloc(maxBytes);
46
+ const fd = openSync(logPath, 'r');
47
+ try {
48
+ readSync(fd, buf, 0, maxBytes, size - maxBytes);
49
+ }
50
+ finally {
51
+ closeSync(fd);
52
+ }
53
+ raw = buf.toString('utf-8');
54
+ }
55
+ const embedRe = /\bembed(ding|dings)?\b/i;
56
+ const lines = raw.split('\n').filter((l) => l.trim() && embedRe.test(l));
57
+ return lines.slice(-maxMatches);
58
+ }
59
+ catch {
60
+ return [];
61
+ }
62
+ }
33
63
  //# sourceMappingURL=error-log.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-log.js","sourceRoot":"","sources":["../src/error-log.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,UAAU,EACV,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjC,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,KAA8B;IAC5E,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,YAAY,EAAE,CAAC;YAClE,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,CAAC,CAAC;QACnC,OAAO,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC;aAClC,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"error-log.js","sourceRoot":"","sources":["../src/error-log.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-tools.d.ts","sourceRoot":"","sources":["../src/register-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAyB,MAAM,YAAY,CAAC;AAkFlE,wBAAgB,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CA8I9D"}
1
+ {"version":3,"file":"register-tools.d.ts","sourceRoot":"","sources":["../src/register-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAyB,MAAM,YAAY,CAAC;AAoFlE,wBAAgB,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAgJ9D"}
@@ -67,7 +67,11 @@ let reindexPromise = null;
67
67
  let reindexAttempts = 0;
68
68
  let reindexFailed = false;
69
69
  const MAX_REINDEX_ATTEMPTS = 2;
70
+ const registeredServers = new WeakSet();
70
71
  export function registerTools(server, ctx) {
72
+ if (registeredServers.has(server))
73
+ return;
74
+ registeredServers.add(server);
71
75
  function tracked(handler, toolName) {
72
76
  return async (...args) => {
73
77
  if (ctx.activeOps)
@@ -1 +1 @@
1
- {"version":3,"file":"register-tools.js","sourceRoot":"","sources":["../src/register-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register-tools.js","sourceRoot":"","sources":["../src/register-tools.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -2,9 +2,6 @@
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
4
4
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
5
- import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
6
- import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
7
- import { createMcpExpressApp } from '@modelcontextprotocol/sdk/server/express.js';
8
5
  import { existsSync, mkdirSync, writeFileSync, readFileSync, unlinkSync, readdirSync } from 'node:fs';
9
6
  import { join, dirname } from 'node:path';
10
7
  import { homedir, tmpdir } from 'node:os';
@@ -18,246 +15,8 @@ import { embed } from '@context-vault/core/embed';
18
15
  import { initDatabase, NativeModuleError, prepareStatements, insertVec, deleteVec, insertCtxVec, deleteCtxVec, } from '@context-vault/core/db';
19
16
  import { registerTools } from './register-tools.js';
20
17
  import { pruneExpired } from '@context-vault/core/index';
18
+ import { startWatcher } from '@context-vault/core/watch';
21
19
  import { setSessionId } from '@context-vault/core/search';
22
- const DAEMON_PORT = 3377;
23
- const PID_PATH = join(homedir(), '.context-mcp', 'daemon.pid');
24
- async function tryAutoDaemon() {
25
- // Check if daemon is already running
26
- if (existsSync(PID_PATH)) {
27
- try {
28
- const { pid, port } = JSON.parse(readFileSync(PID_PATH, 'utf-8'));
29
- process.kill(pid, 0); // throws if dead
30
- const res = await fetch(`http://localhost:${port}/health`);
31
- if (res.ok)
32
- return; // daemon is healthy, nothing to do
33
- }
34
- catch {
35
- // stale PID file or unhealthy, continue to start daemon
36
- }
37
- }
38
- const { spawn, execFileSync } = await import('node:child_process');
39
- // Spawn daemon process
40
- const serverPath = join(__dirname, 'server.js');
41
- const child = spawn(process.execPath, [serverPath, '--http', '--port', String(DAEMON_PORT)], {
42
- detached: true,
43
- stdio: 'ignore',
44
- env: { ...process.env, NODE_OPTIONS: '--no-warnings=ExperimentalWarning' },
45
- });
46
- child.unref();
47
- // Wait for daemon to be healthy
48
- const deadline = Date.now() + 5000;
49
- let healthy = false;
50
- while (Date.now() < deadline) {
51
- try {
52
- const res = await fetch(`http://localhost:${DAEMON_PORT}/health`);
53
- if (res.ok) {
54
- healthy = true;
55
- break;
56
- }
57
- }
58
- catch { }
59
- await new Promise(r => setTimeout(r, 200));
60
- }
61
- if (!healthy) {
62
- console.error('[context-vault] Auto-daemon failed to start, continuing in stdio mode');
63
- return;
64
- }
65
- // Reconfigure Claude Code to use HTTP transport
66
- const env = { ...process.env };
67
- delete env.CLAUDECODE;
68
- try {
69
- execFileSync('claude', ['mcp', 'remove', 'context-vault', '-s', 'user'], { stdio: 'pipe', env });
70
- }
71
- catch { }
72
- try {
73
- execFileSync('claude', [
74
- 'mcp', 'add', '-s', 'user', '--transport', 'http',
75
- 'context-vault', `http://localhost:${DAEMON_PORT}/mcp`,
76
- ], { stdio: 'pipe', env });
77
- console.error(`[context-vault] Daemon started on port ${DAEMON_PORT}. New sessions will use shared HTTP mode.`);
78
- }
79
- catch {
80
- console.error('[context-vault] Daemon started but could not reconfigure Claude Code');
81
- }
82
- }
83
- async function selfCheck(port) {
84
- const { execFileSync } = await import('node:child_process');
85
- const env = { ...process.env };
86
- delete env.CLAUDECODE;
87
- // 1. Validate LaunchAgent plist on macOS (correct node/server paths)
88
- if (process.platform === 'darwin') {
89
- const plistPath = join(homedir(), 'Library', 'LaunchAgents', 'com.context-vault.daemon.plist');
90
- if (existsSync(plistPath)) {
91
- try {
92
- const plist = readFileSync(plistPath, 'utf-8');
93
- const currentNode = process.execPath;
94
- const currentServer = join(__dirname, 'server.js');
95
- if (!plist.includes(currentNode) || !plist.includes(currentServer)) {
96
- console.error('[context-vault] Self-heal: LaunchAgent has stale paths, rewriting...');
97
- const vaultDirIdx = process.argv.indexOf('--vault-dir');
98
- const vaultDir = vaultDirIdx !== -1 ? process.argv[vaultDirIdx + 1] : undefined;
99
- const progArgs = [currentNode, currentServer, '--http', '--port', String(port)];
100
- if (vaultDir)
101
- progArgs.push('--vault-dir', vaultDir);
102
- const logPath = join(homedir(), '.context-mcp', 'daemon.log');
103
- const newPlist = `<?xml version="1.0" encoding="UTF-8"?>
104
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
105
- <plist version="1.0">
106
- <dict>
107
- <key>Label</key>
108
- <string>com.context-vault.daemon</string>
109
- <key>ProgramArguments</key>
110
- <array>
111
- ${progArgs.map(a => ` <string>${a}</string>`).join('\n')}
112
- </array>
113
- <key>RunAtLoad</key>
114
- <true/>
115
- <key>KeepAlive</key>
116
- <dict>
117
- <key>SuccessfulExit</key>
118
- <false/>
119
- </dict>
120
- <key>StandardErrorPath</key>
121
- <string>${logPath}</string>
122
- <key>StandardOutPath</key>
123
- <string>/dev/null</string>
124
- <key>EnvironmentVariables</key>
125
- <dict>
126
- <key>NODE_OPTIONS</key>
127
- <string>--no-warnings=ExperimentalWarning</string>
128
- <key>CONTEXT_VAULT_NO_DAEMON</key>
129
- <string>1</string>
130
- </dict>
131
- <key>ThrottleInterval</key>
132
- <integer>5</integer>
133
- </dict>
134
- </plist>`;
135
- writeFileSync(plistPath, newPlist);
136
- // Reload the agent so launchd picks up new paths
137
- try {
138
- execFileSync('launchctl', ['unload', plistPath], { stdio: 'pipe' });
139
- }
140
- catch { }
141
- try {
142
- execFileSync('launchctl', ['load', '-w', plistPath], { stdio: 'pipe' });
143
- }
144
- catch { }
145
- console.error('[context-vault] Self-heal: LaunchAgent updated with current paths');
146
- }
147
- }
148
- catch (e) {
149
- console.error(`[context-vault] LaunchAgent check failed: ${e.message}`);
150
- }
151
- }
152
- }
153
- // 2. Validate Claude Code MCP config points to this daemon
154
- try {
155
- const result = execFileSync('claude', ['mcp', 'list'], {
156
- encoding: 'utf-8',
157
- stdio: ['pipe', 'pipe', 'pipe'],
158
- env,
159
- timeout: 5000,
160
- });
161
- if (result.includes('context-vault') && !result.includes(`localhost:${port}`)) {
162
- console.error('[context-vault] Self-heal: Claude Code not pointing to this daemon, reconfiguring...');
163
- try {
164
- execFileSync('claude', ['mcp', 'remove', 'context-vault', '-s', 'user'], { stdio: 'pipe', env });
165
- }
166
- catch { }
167
- execFileSync('claude', [
168
- 'mcp', 'add', '-s', 'user', '--transport', 'http',
169
- 'context-vault', `http://localhost:${port}/mcp`,
170
- ], { stdio: 'pipe', env });
171
- console.error('[context-vault] Self-heal: Claude Code reconfigured');
172
- }
173
- }
174
- catch {
175
- // claude CLI not available or check failed, skip
176
- }
177
- }
178
- /**
179
- * Auto-update: check npm for a newer version. In daemon (HTTP) mode,
180
- * install the update and gracefully restart. In stdio mode, just log.
181
- */
182
- async function autoUpdate(isDaemon) {
183
- const { execSync, spawn: spawnProc } = await import('node:child_process');
184
- // Use a non-blocking npm check to avoid event loop stalls during reindex
185
- const latest = await new Promise((resolve, reject) => {
186
- const child = spawnProc('npm', ['view', 'context-vault', 'version'], {
187
- stdio: ['pipe', 'pipe', 'pipe'],
188
- timeout: 10000,
189
- });
190
- let out = '';
191
- child.stdout?.on('data', (d) => { out += d.toString(); });
192
- child.on('close', (code) => {
193
- if (code === 0 && out.trim())
194
- resolve(out.trim());
195
- else
196
- reject(new Error(`npm view failed (code ${code})`));
197
- });
198
- child.on('error', reject);
199
- }).catch(() => null);
200
- if (!latest)
201
- return null; // offline or registry unreachable
202
- if (latest === pkg.version)
203
- return latest;
204
- console.error(`[context-vault] Update available: v${pkg.version} -> v${latest}`);
205
- if (!isDaemon) {
206
- console.error('[context-vault] Run: context-vault update');
207
- return latest;
208
- }
209
- // Daemon mode: auto-install and restart
210
- console.error(`[context-vault] Auto-updating to v${latest}...`);
211
- try {
212
- execSync('npm install -g context-vault@latest', {
213
- encoding: 'utf-8',
214
- timeout: 120000,
215
- stdio: ['pipe', 'pipe', 'pipe'],
216
- });
217
- console.error(`[context-vault] Installed v${latest}. Restarting daemon...`);
218
- // Find our own server.js path in the updated install
219
- const newBin = execSync('which context-vault', {
220
- encoding: 'utf-8',
221
- timeout: 5000,
222
- stdio: ['pipe', 'pipe', 'pipe'],
223
- }).trim();
224
- // Resolve the actual package root from the binary
225
- const { readlinkSync } = await import('node:fs');
226
- const { resolve: resolvePath } = await import('node:path');
227
- let binTarget = newBin;
228
- try {
229
- binTarget = readlinkSync(newBin);
230
- }
231
- catch { }
232
- const newPkgRoot = resolvePath(dirname(binTarget), '..');
233
- const newServerJs = join(newPkgRoot, 'dist', 'server.js');
234
- // Spawn the new version as a replacement daemon
235
- const portIdx = process.argv.indexOf('--port');
236
- const port = portIdx !== -1 ? process.argv[portIdx + 1] : '3377';
237
- const args = [newServerJs, '--http', '--port', port];
238
- // Pass through vault-dir if specified
239
- const vaultIdx = process.argv.indexOf('--vault-dir');
240
- if (vaultIdx !== -1 && process.argv[vaultIdx + 1]) {
241
- args.push('--vault-dir', process.argv[vaultIdx + 1]);
242
- }
243
- const { spawn } = await import('node:child_process');
244
- const child = spawn(process.execPath, args, {
245
- detached: true,
246
- stdio: 'ignore',
247
- env: { ...process.env, NODE_OPTIONS: '--no-warnings=ExperimentalWarning', CONTEXT_VAULT_NO_DAEMON: '1' },
248
- });
249
- child.unref();
250
- // Give the new process a moment to bind the port, then exit
251
- await new Promise(r => setTimeout(r, 2000));
252
- console.error(`[context-vault] New daemon spawned (PID ${child.pid}). Old daemon exiting.`);
253
- process.exit(0);
254
- }
255
- catch (e) {
256
- console.error(`[context-vault] Auto-update failed: ${e.message}`);
257
- console.error('[context-vault] Run manually: context-vault update');
258
- }
259
- return latest;
260
- }
261
20
  async function main() {
262
21
  let phase = 'CONFIG';
263
22
  let db;
@@ -346,6 +105,24 @@ async function main() {
346
105
  catch (pruneErr) {
347
106
  console.error(`[context-vault] Warning: startup prune failed: ${pruneErr.message}`);
348
107
  }
108
+ if (config.watch?.enabled === true && config.vaultDirExists) {
109
+ try {
110
+ const vaultWatcher = startWatcher(ctx, {
111
+ vaultDir: config.watch?.path || config.vaultDir,
112
+ debounceMs: config.watch?.debounceMs ?? 500,
113
+ indexingConfig: config.indexing,
114
+ dataDir: config.dataDir,
115
+ onError: (err) => console.error(`[context-vault] Watcher: ${err.message}`),
116
+ });
117
+ // Expose markSelfWrite on ctx so save_context can suppress re-indexing
118
+ ctx.markSelfWrite = vaultWatcher.markSelfWrite;
119
+ process.on('exit', () => vaultWatcher.close());
120
+ console.error('[context-vault] Filesystem watcher active (opt-in via config)');
121
+ }
122
+ catch (err) {
123
+ console.error(`[context-vault] Watcher skipped: ${err.message}`);
124
+ }
125
+ }
349
126
  phase = 'SERVER';
350
127
  const CONFIG_CACHE_TTL_MS = 30_000;
351
128
  let cachedConfig = config;
@@ -373,14 +150,13 @@ async function main() {
373
150
  registerTools(s, ctx);
374
151
  return s;
375
152
  }
376
- const server = createServer();
377
153
  function closeDb() {
378
154
  try {
379
155
  if (db.inTransaction) {
380
156
  console.error('[context-vault] Rolling back active transaction...');
381
157
  db.exec('ROLLBACK');
382
158
  }
383
- db.pragma('wal_checkpoint(TRUNCATE)');
159
+ db.exec('PRAGMA wal_checkpoint(TRUNCATE)');
384
160
  db.close();
385
161
  console.error('[context-vault] Database closed cleanly.');
386
162
  }
@@ -391,10 +167,6 @@ async function main() {
391
167
  }
392
168
  function shutdown(signal) {
393
169
  console.error(`[context-vault] Received ${signal}, shutting down...`);
394
- try {
395
- unlinkSync(join(homedir(), '.context-mcp', 'daemon.pid'));
396
- }
397
- catch { }
398
170
  if (ctx.activeOps.count > 0) {
399
171
  console.error(`[context-vault] Waiting for ${ctx.activeOps.count} in-flight operation(s)...`);
400
172
  const check = setInterval(() => {
@@ -425,189 +197,14 @@ async function main() {
425
197
  const capMb = Math.round(MAX_RSS_BYTES / 1024 / 1024);
426
198
  console.error(`[context-vault] WATCHDOG: RSS ${rssMb}MB exceeds ${capMb}MB limit. Shutting down to protect system resources.`);
427
199
  console.error(`[context-vault] Adjust limit with CONTEXT_VAULT_MAX_RSS_MB env var, or run 'context-vault reindex' manually.`);
428
- try {
429
- unlinkSync(PID_PATH);
430
- }
431
- catch { }
432
200
  process.exit(137);
433
201
  }
434
202
  }, 5_000);
435
203
  rssWatchdog.unref();
436
204
  phase = 'CONNECTED';
437
- let latestKnownVersion = null;
438
- const useHttp = process.argv.includes('--http');
439
- if (useHttp) {
440
- const portIdx = process.argv.indexOf('--port');
441
- const port = portIdx !== -1 && process.argv[portIdx + 1]
442
- ? parseInt(process.argv[portIdx + 1], 10)
443
- : 3377;
444
- const app = createMcpExpressApp();
445
- const transports = {};
446
- app.get('/health', (_req, res) => {
447
- res.writeHead(200, { 'Content-Type': 'application/json' });
448
- res.end(JSON.stringify({
449
- ok: true,
450
- version: pkg.version,
451
- latestVersion: latestKnownVersion,
452
- updateAvailable: latestKnownVersion ? latestKnownVersion !== pkg.version : null,
453
- pid: process.pid,
454
- uptime: process.uptime(),
455
- sessions: Object.keys(transports).length,
456
- }));
457
- });
458
- function createTransport() {
459
- const transport = new StreamableHTTPServerTransport({
460
- sessionIdGenerator: () => randomUUID(),
461
- onsessioninitialized: (sid) => {
462
- transports[sid] = transport;
463
- },
464
- });
465
- transport.onclose = () => {
466
- const sid = transport.sessionId;
467
- if (sid && transports[sid]) {
468
- delete transports[sid];
469
- }
470
- };
471
- return transport;
472
- }
473
- app.post('/mcp', async (req, res) => {
474
- const sessionId = req.headers['mcp-session-id'];
475
- try {
476
- let transport;
477
- if (sessionId && transports[sessionId]) {
478
- transport = transports[sessionId];
479
- }
480
- else if (isInitializeRequest(req.body)) {
481
- // Allow (re-)initialization with or without a stale session ID.
482
- // Covers: first connect, reconnect after daemon restart.
483
- transport = createTransport();
484
- const sessionServer = createServer();
485
- await sessionServer.connect(transport);
486
- await transport.handleRequest(req, res, req.body);
487
- return;
488
- }
489
- else if (sessionId) {
490
- // Stale session (e.g., daemon restarted). Claude Code's MCP client
491
- // does not auto-reinitialize on 404, so we recover transparently:
492
- // create a new transport reusing the stale session ID, force it into
493
- // initialized state, and handle the request as if nothing happened.
494
- console.error(`[context-vault] Recovering stale session ${sessionId.slice(0, 8)}...`);
495
- transport = new StreamableHTTPServerTransport({
496
- sessionIdGenerator: () => sessionId,
497
- onsessioninitialized: (sid) => {
498
- transports[sid] = transport;
499
- },
500
- });
501
- transport.onclose = () => {
502
- if (transports[sessionId])
503
- delete transports[sessionId];
504
- };
505
- const sessionServer = createServer();
506
- await sessionServer.connect(transport);
507
- // Force transport into initialized state, bypassing the initialize
508
- // handshake. The inner WebStandardStreamableHTTPServerTransport holds
509
- // the _initialized flag and sessionId.
510
- const inner = transport._webStandardTransport;
511
- inner._initialized = true;
512
- inner.sessionId = sessionId;
513
- transports[sessionId] = transport;
514
- // Fall through to handleRequest below
515
- }
516
- else {
517
- res.writeHead(400, { 'Content-Type': 'application/json' });
518
- res.end(JSON.stringify({
519
- jsonrpc: '2.0',
520
- error: { code: -32000, message: 'Bad Request: No valid session ID' },
521
- id: null,
522
- }));
523
- return;
524
- }
525
- await transport.handleRequest(req, res, req.body);
526
- }
527
- catch (error) {
528
- console.error('[context-vault] HTTP error:', error);
529
- if (!res.headersSent) {
530
- res.writeHead(500, { 'Content-Type': 'application/json' });
531
- res.end(JSON.stringify({
532
- jsonrpc: '2.0',
533
- error: { code: -32603, message: 'Internal server error' },
534
- id: null,
535
- }));
536
- }
537
- }
538
- });
539
- app.get('/mcp', async (req, res) => {
540
- const sessionId = req.headers['mcp-session-id'];
541
- if (!sessionId || !transports[sessionId]) {
542
- res.writeHead(404);
543
- res.end('Session not found');
544
- return;
545
- }
546
- await transports[sessionId].handleRequest(req, res);
547
- });
548
- app.delete('/mcp', async (req, res) => {
549
- const sessionId = req.headers['mcp-session-id'];
550
- if (!sessionId || !transports[sessionId]) {
551
- res.writeHead(404);
552
- res.end('Session not found');
553
- return;
554
- }
555
- await transports[sessionId].handleRequest(req, res);
556
- });
557
- app.listen(port, () => {
558
- console.error(`[context-vault] Serving on http://localhost:${port}/mcp`);
559
- const pidDir = join(homedir(), '.context-mcp');
560
- mkdirSync(pidDir, { recursive: true });
561
- writeFileSync(join(pidDir, 'daemon.pid'), JSON.stringify({ pid: process.pid, port }));
562
- // Self-healing: validate and repair infrastructure on startup
563
- selfCheck(port).catch(() => { });
564
- // Periodic health monitor: validate DB, vault, and PID file every 5 minutes
565
- setInterval(() => {
566
- try {
567
- // Verify DB is accessible
568
- ctx.db.exec('SELECT 1');
569
- // Verify PID file is correct
570
- const pidData = existsSync(PID_PATH)
571
- ? JSON.parse(readFileSync(PID_PATH, 'utf-8'))
572
- : null;
573
- if (!pidData || pidData.pid !== process.pid || pidData.port !== port) {
574
- writeFileSync(PID_PATH, JSON.stringify({ pid: process.pid, port }));
575
- console.error('[context-vault] Self-heal: repaired stale PID file');
576
- }
577
- // Verify vault directory
578
- if (!existsSync(ctx.config.vaultDir)) {
579
- console.error(`[context-vault] Warning: vault directory missing: ${ctx.config.vaultDir}`);
580
- }
581
- }
582
- catch (e) {
583
- console.error(`[context-vault] Health check failed: ${e.message}`);
584
- }
585
- }, 5 * 60 * 1000);
586
- });
587
- }
588
- else {
589
- const transport = new StdioServerTransport();
590
- await server.connect(transport);
591
- // Auto-daemonize: if no daemon is running, spawn one in the background
592
- // and reconfigure Claude Code to use HTTP. Next session onwards, all
593
- // sessions share the single daemon process. This session stays on stdio.
594
- if (!process.env.CONTEXT_VAULT_NO_DAEMON) {
595
- setTimeout(() => tryAutoDaemon().catch(() => { }), 2000);
596
- }
597
- }
598
- // Auto-update check (and apply for daemon mode)
599
- const updateCheck = async () => {
600
- const result = await autoUpdate(useHttp);
601
- if (result)
602
- latestKnownVersion = result;
603
- };
604
- setTimeout(() => updateCheck().catch((e) => {
605
- console.error(`[context-vault] Update check failed: ${e.message}`);
606
- }), 5000);
607
- // Re-check daily for long-running daemons
608
- if (useHttp) {
609
- setInterval(() => updateCheck().catch(() => { }), 24 * 60 * 60 * 1000);
610
- }
205
+ const server = createServer();
206
+ const transport = new StdioServerTransport();
207
+ await server.connect(transport);
611
208
  }
612
209
  catch (rawErr) {
613
210
  const err = rawErr;