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.
- package/bin/cli.js +263 -414
- package/dist/error-log.d.ts +2 -0
- package/dist/error-log.d.ts.map +1 -1
- package/dist/error-log.js +31 -1
- package/dist/error-log.js.map +1 -1
- package/dist/register-tools.d.ts.map +1 -1
- package/dist/register-tools.js +4 -0
- package/dist/register-tools.js.map +1 -1
- package/dist/server.js +23 -426
- package/dist/server.js.map +1 -1
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +17 -0
- package/dist/status.js.map +1 -1
- package/dist/tools/context-status.d.ts.map +1 -1
- package/dist/tools/context-status.js +26 -1
- package/dist/tools/context-status.js.map +1 -1
- package/dist/tools/delete-context.d.ts +1 -1
- package/dist/tools/delete-context.d.ts.map +1 -1
- package/dist/tools/delete-context.js +15 -2
- package/dist/tools/delete-context.js.map +1 -1
- package/dist/tools/get-context.d.ts.map +1 -1
- package/dist/tools/get-context.js +3 -2
- package/dist/tools/get-context.js.map +1 -1
- package/dist/tools/list-context.d.ts +7 -15
- package/dist/tools/list-context.d.ts.map +1 -1
- package/dist/tools/list-context.js +570 -111
- package/dist/tools/list-context.js.map +1 -1
- package/dist/tools/publish-to-team.js +1 -1
- package/dist/tools/publish-to-team.js.map +1 -1
- package/dist/tools/save-context.js +2 -2
- package/dist/tools/save-context.js.map +1 -1
- package/dist/tools/session-start.d.ts +20 -7
- package/dist/tools/session-start.d.ts.map +1 -1
- package/dist/tools/session-start.js +406 -439
- package/dist/tools/session-start.js.map +1 -1
- package/node_modules/@context-vault/core/dist/capture.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/capture.js +4 -0
- package/node_modules/@context-vault/core/dist/capture.js.map +1 -1
- package/node_modules/@context-vault/core/dist/categories.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/categories.js +8 -0
- package/node_modules/@context-vault/core/dist/categories.js.map +1 -1
- package/node_modules/@context-vault/core/dist/compact.d.ts +38 -0
- package/node_modules/@context-vault/core/dist/compact.d.ts.map +1 -0
- package/node_modules/@context-vault/core/dist/compact.js +127 -0
- package/node_modules/@context-vault/core/dist/compact.js.map +1 -0
- package/node_modules/@context-vault/core/dist/config.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/config.js +12 -0
- package/node_modules/@context-vault/core/dist/config.js.map +1 -1
- package/node_modules/@context-vault/core/dist/db.d.ts +1 -1
- package/node_modules/@context-vault/core/dist/db.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/db.js +40 -4
- package/node_modules/@context-vault/core/dist/db.js.map +1 -1
- package/node_modules/@context-vault/core/dist/main.d.ts +6 -2
- package/node_modules/@context-vault/core/dist/main.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/main.js +5 -1
- package/node_modules/@context-vault/core/dist/main.js.map +1 -1
- package/node_modules/@context-vault/core/dist/search.d.ts +13 -1
- package/node_modules/@context-vault/core/dist/search.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/search.js +50 -5
- package/node_modules/@context-vault/core/dist/search.js.map +1 -1
- package/node_modules/@context-vault/core/dist/tier-analysis.d.ts +36 -0
- package/node_modules/@context-vault/core/dist/tier-analysis.d.ts.map +1 -0
- package/node_modules/@context-vault/core/dist/tier-analysis.js +227 -0
- package/node_modules/@context-vault/core/dist/tier-analysis.js.map +1 -0
- package/node_modules/@context-vault/core/dist/types.d.ts +12 -0
- package/node_modules/@context-vault/core/dist/types.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/watch.d.ts +21 -0
- package/node_modules/@context-vault/core/dist/watch.d.ts.map +1 -0
- package/node_modules/@context-vault/core/dist/watch.js +230 -0
- package/node_modules/@context-vault/core/dist/watch.js.map +1 -0
- package/node_modules/@context-vault/core/package.json +13 -1
- package/node_modules/@context-vault/core/src/capture.ts +4 -0
- package/node_modules/@context-vault/core/src/categories.ts +8 -0
- package/node_modules/@context-vault/core/src/compact.ts +183 -0
- package/node_modules/@context-vault/core/src/config.ts +8 -0
- package/node_modules/@context-vault/core/src/db.ts +40 -4
- package/node_modules/@context-vault/core/src/main.ts +10 -0
- package/node_modules/@context-vault/core/src/search.ts +55 -4
- package/node_modules/@context-vault/core/src/tier-analysis.ts +299 -0
- package/node_modules/@context-vault/core/src/types.ts +10 -0
- package/node_modules/@context-vault/core/src/watch.ts +269 -0
- package/package.json +2 -2
- package/scripts/postinstall.js +26 -1
- package/src/error-log.ts +30 -0
- package/src/register-tools.ts +4 -0
- package/src/server.ts +23 -423
- package/src/status.ts +17 -0
- package/src/tools/context-status.ts +30 -1
- package/src/tools/delete-context.ts +10 -5
- package/src/tools/get-context.ts +3 -2
- package/src/tools/list-context.ts +620 -119
- package/src/tools/publish-to-team.ts +1 -1
- package/src/tools/save-context.ts +2 -2
- package/src/tools/session-start.ts +444 -484
package/dist/error-log.d.ts
CHANGED
|
@@ -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
|
package/dist/error-log.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-log.d.ts","sourceRoot":"","sources":["../src/error-log.ts"],"names":[],"mappings":"
|
|
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
|
package/dist/error-log.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/register-tools.js
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
438
|
-
const
|
|
439
|
-
|
|
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;
|