context-vault 3.2.2 → 3.3.0
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 +180 -36
- package/dist/server.js +93 -4
- package/dist/server.js.map +1 -1
- package/node_modules/@context-vault/core/dist/db.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/db.js +35 -5
- package/node_modules/@context-vault/core/dist/db.js.map +1 -1
- package/node_modules/@context-vault/core/package.json +1 -1
- package/node_modules/@context-vault/core/src/db.ts +34 -3
- package/package.json +2 -2
- package/src/server.ts +101 -7
package/bin/cli.js
CHANGED
|
@@ -3,9 +3,30 @@
|
|
|
3
3
|
// Node.js version guard — must run before any ESM imports
|
|
4
4
|
const nodeVersion = parseInt(process.versions.node.split('.')[0], 10);
|
|
5
5
|
if (nodeVersion < 22) {
|
|
6
|
+
const p = process.platform;
|
|
7
|
+
let upgradeHint;
|
|
8
|
+
if (p === 'darwin') {
|
|
9
|
+
upgradeHint =
|
|
10
|
+
` Upgrade options:\n` +
|
|
11
|
+
` brew install node # Homebrew (recommended)\n` +
|
|
12
|
+
` nvm install 22 # if using nvm\n` +
|
|
13
|
+
` fnm install 22 # if using fnm\n`;
|
|
14
|
+
} else if (p === 'win32') {
|
|
15
|
+
upgradeHint =
|
|
16
|
+
` Upgrade options:\n` +
|
|
17
|
+
` winget install OpenJS.NodeJS.LTS # Windows Package Manager\n` +
|
|
18
|
+
` nvm install 22 # if using nvm-windows\n` +
|
|
19
|
+
` https://nodejs.org/ # manual download\n`;
|
|
20
|
+
} else {
|
|
21
|
+
upgradeHint =
|
|
22
|
+
` Upgrade options:\n` +
|
|
23
|
+
` nvm install 22 # recommended\n` +
|
|
24
|
+
` fnm install 22 # if using fnm\n` +
|
|
25
|
+
` # or via NodeSource: https://github.com/nodesource/distributions\n`;
|
|
26
|
+
}
|
|
6
27
|
process.stderr.write(
|
|
7
|
-
`\ncontext-vault requires Node.js >= 22 (you have ${process.versions.node}).\n` +
|
|
8
|
-
|
|
28
|
+
`\ncontext-vault requires Node.js >= 22 (you have ${process.versions.node}).\n\n` +
|
|
29
|
+
upgradeHint + `\n`
|
|
9
30
|
);
|
|
10
31
|
process.exit(1);
|
|
11
32
|
}
|
|
@@ -41,7 +62,8 @@ function isInstalledPackage() {
|
|
|
41
62
|
if (ROOT.includes('/node_modules/') || ROOT.includes('\\node_modules\\')) return true;
|
|
42
63
|
// Also check if `context-vault` binary on PATH resolves to this package
|
|
43
64
|
try {
|
|
44
|
-
const
|
|
65
|
+
const cmd = platform() === 'win32' ? 'where context-vault' : 'which context-vault';
|
|
66
|
+
const which = execSync(cmd, { encoding: 'utf-8', stdio: 'pipe' }).trim();
|
|
45
67
|
if (which) return true;
|
|
46
68
|
} catch {}
|
|
47
69
|
return false;
|
|
@@ -52,6 +74,42 @@ function isNpx() {
|
|
|
52
74
|
return ROOT.includes('/_npx/') || ROOT.includes('\\_npx\\');
|
|
53
75
|
}
|
|
54
76
|
|
|
77
|
+
/** Detect user experience level based on dev environment signals */
|
|
78
|
+
function detectUserExperience() {
|
|
79
|
+
if (isNonInteractive) return 'developer';
|
|
80
|
+
try {
|
|
81
|
+
let signals = 0;
|
|
82
|
+
// Check for version manager dirs
|
|
83
|
+
const vmDirs = ['.nvm', '.fnm', '.volta'].map((d) => join(HOME, d));
|
|
84
|
+
if (vmDirs.some((d) => existsSync(d))) signals++;
|
|
85
|
+
// Check for 3+ global npm packages
|
|
86
|
+
try {
|
|
87
|
+
const out = execSync('npm ls -g --depth=0 --json 2>/dev/null', {
|
|
88
|
+
encoding: 'utf-8',
|
|
89
|
+
timeout: 5000,
|
|
90
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
91
|
+
});
|
|
92
|
+
const deps = JSON.parse(out).dependencies || {};
|
|
93
|
+
if (Object.keys(deps).length >= 3) signals++;
|
|
94
|
+
} catch {}
|
|
95
|
+
// Check for git config
|
|
96
|
+
try {
|
|
97
|
+
execSync('git config user.email', { encoding: 'utf-8', timeout: 3000, stdio: 'pipe' });
|
|
98
|
+
signals++;
|
|
99
|
+
} catch {}
|
|
100
|
+
return signals >= 2 ? 'developer' : 'beginner';
|
|
101
|
+
} catch {
|
|
102
|
+
return 'developer';
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** Print a verbose hint — only shown to beginners */
|
|
107
|
+
function verbose(userLevel, msg) {
|
|
108
|
+
if (userLevel === 'beginner') {
|
|
109
|
+
console.log(dim(` ${msg}`));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
55
113
|
const MARKER_FILE = '.context-vault';
|
|
56
114
|
|
|
57
115
|
function writeMarkerFile(vaultDir) {
|
|
@@ -343,6 +401,7 @@ ${bold('Commands:')}
|
|
|
343
401
|
|
|
344
402
|
async function runSetup() {
|
|
345
403
|
const setupStart = Date.now();
|
|
404
|
+
const userLevel = detectUserExperience();
|
|
346
405
|
|
|
347
406
|
// Banner
|
|
348
407
|
console.log();
|
|
@@ -513,12 +572,21 @@ async function runSetup() {
|
|
|
513
572
|
|
|
514
573
|
// Detect tools
|
|
515
574
|
console.log(dim(` [1/6]`) + bold(' Detecting tools...\n'));
|
|
575
|
+
verbose(userLevel, 'Scanning for AI tools on this machine.');
|
|
576
|
+
if (userLevel === 'beginner') console.log();
|
|
516
577
|
const { detected, results: detectionResults } = await detectAllTools();
|
|
517
578
|
printDetectionResults(detectionResults);
|
|
518
579
|
console.log();
|
|
519
580
|
|
|
520
581
|
if (detected.length === 0) {
|
|
521
582
|
console.log(yellow(' No supported tools detected.\n'));
|
|
583
|
+
if (userLevel === 'beginner') {
|
|
584
|
+
console.log(' Install an AI tool first:');
|
|
585
|
+
console.log(dim(' Claude Code: https://docs.anthropic.com/en/docs/claude-code'));
|
|
586
|
+
console.log(dim(' Cursor: https://cursor.com'));
|
|
587
|
+
console.log(dim(' Windsurf: https://codeium.com/windsurf'));
|
|
588
|
+
console.log();
|
|
589
|
+
}
|
|
522
590
|
console.log(" To manually configure, add to your tool's MCP config:\n");
|
|
523
591
|
if (isInstalledPackage() || isNpx()) {
|
|
524
592
|
console.log(` ${dim('{')}
|
|
@@ -576,6 +644,8 @@ async function runSetup() {
|
|
|
576
644
|
|
|
577
645
|
// Vault directory (content files)
|
|
578
646
|
console.log(dim(` [2/6]`) + bold(' Configuring vault...\n'));
|
|
647
|
+
verbose(userLevel, 'Your vault is a folder of plain markdown files — you own it.');
|
|
648
|
+
if (userLevel === 'beginner') console.log();
|
|
579
649
|
|
|
580
650
|
// Scan for existing vaults via marker file
|
|
581
651
|
let defaultVaultDir = getFlag('--vault-dir') || join(HOME, '.vault');
|
|
@@ -717,6 +787,7 @@ async function runSetup() {
|
|
|
717
787
|
|
|
718
788
|
// Telemetry opt-in
|
|
719
789
|
console.log(`\n ${dim('[3/6]')}${bold(' Anonymous error reporting\n')}`);
|
|
790
|
+
verbose(userLevel, 'Entirely optional — works identically either way.\n');
|
|
720
791
|
console.log(dim(' When enabled, unhandled errors send a minimal event (type, tool name,'));
|
|
721
792
|
console.log(dim(' version, platform) to help diagnose issues. No vault content,'));
|
|
722
793
|
console.log(dim(' file paths, or personal data is ever sent. Off by default.'));
|
|
@@ -749,6 +820,7 @@ async function runSetup() {
|
|
|
749
820
|
console.log(dim(' To enable later: context-vault setup (without --skip-embeddings)'));
|
|
750
821
|
} else {
|
|
751
822
|
console.log(`\n ${dim('[4/6]')}${bold(' Downloading embedding model...')}`);
|
|
823
|
+
verbose(userLevel, 'Enables meaning-based search. ~22MB download, runs fully offline.');
|
|
752
824
|
console.log(dim(' all-MiniLM-L6-v2 (~22MB, one-time download)'));
|
|
753
825
|
console.log(dim(` Slow connection? Re-run with --skip-embeddings (enables FTS-only mode)\n`));
|
|
754
826
|
{
|
|
@@ -811,6 +883,11 @@ async function runSetup() {
|
|
|
811
883
|
}
|
|
812
884
|
console.log(dim(` Retry: ${isNpx() ? 'npx context-vault' : 'context-vault'} setup`));
|
|
813
885
|
console.log(dim(` Semantic search disabled — full-text search still works.`));
|
|
886
|
+
if (userLevel === 'beginner') {
|
|
887
|
+
console.log();
|
|
888
|
+
console.log(dim(` Don't worry — your vault works fine without this.`));
|
|
889
|
+
console.log(dim(` Keyword search is active. Meaning-based search can be added later.`));
|
|
890
|
+
}
|
|
814
891
|
}
|
|
815
892
|
}
|
|
816
893
|
}
|
|
@@ -826,6 +903,7 @@ async function runSetup() {
|
|
|
826
903
|
|
|
827
904
|
// Configure each tool — pass vault dir as arg if non-default
|
|
828
905
|
console.log(`\n ${dim('[5/6]')}${bold(' Configuring tools...\n')}`);
|
|
906
|
+
verbose(userLevel, 'Writing config so your AI tool can find your vault.\n');
|
|
829
907
|
const results = [];
|
|
830
908
|
const defaultVDir = join(HOME, 'vault');
|
|
831
909
|
const customVaultDir = resolvedVaultDir !== resolve(defaultVDir) ? resolvedVaultDir : null;
|
|
@@ -956,46 +1034,99 @@ async function runSetup() {
|
|
|
956
1034
|
|
|
957
1035
|
// Health check
|
|
958
1036
|
console.log(`\n ${dim('[6/6]')}${bold(' Health check...')}\n`);
|
|
1037
|
+
verbose(userLevel, 'Verifying vault, config, and database are accessible.\n');
|
|
959
1038
|
const okResults = results.filter((r) => r.ok);
|
|
960
1039
|
|
|
961
1040
|
// Verify DB is accessible
|
|
962
1041
|
let dbAccessible = false;
|
|
1042
|
+
let dbError = null;
|
|
963
1043
|
try {
|
|
964
1044
|
const { initDatabase } = await import('@context-vault/core/db');
|
|
965
1045
|
const db = await initDatabase(vaultConfig.dbPath);
|
|
966
1046
|
db.prepare('SELECT 1').get();
|
|
967
1047
|
db.close();
|
|
968
1048
|
dbAccessible = true;
|
|
969
|
-
} catch {
|
|
1049
|
+
} catch (e) {
|
|
1050
|
+
dbError = e;
|
|
1051
|
+
}
|
|
970
1052
|
|
|
971
1053
|
const checks = [
|
|
972
1054
|
{ label: 'Vault directory exists', pass: existsSync(resolvedVaultDir) },
|
|
973
1055
|
{ label: 'Config file written', pass: existsSync(configPath) },
|
|
974
|
-
{ label: 'Database accessible', pass: dbAccessible },
|
|
1056
|
+
{ label: 'Database accessible', pass: dbAccessible, error: dbError },
|
|
975
1057
|
{ label: 'At least one tool configured', pass: okResults.length > 0 },
|
|
976
1058
|
];
|
|
977
1059
|
const passed = checks.filter((c) => c.pass).length;
|
|
978
1060
|
for (const c of checks) {
|
|
979
1061
|
console.log(` ${c.pass ? green('✓') : red('✗')} ${c.label}`);
|
|
1062
|
+
if (!c.pass && c.error) {
|
|
1063
|
+
console.log(` ${dim(c.error.message)}`);
|
|
1064
|
+
if (c.error.message.includes('EACCES') || c.error.message.includes('permission')) {
|
|
1065
|
+
console.log(` ${dim('Fix: check file permissions on ' + vaultConfig.dbPath)}`);
|
|
1066
|
+
}
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
// Smoke test — write and read a test file to verify vault I/O
|
|
1071
|
+
{
|
|
1072
|
+
const testFile = join(resolvedVaultDir, '.smoke-test-' + Date.now() + '.md');
|
|
1073
|
+
try {
|
|
1074
|
+
writeFileSync(testFile, '# Smoke test\n');
|
|
1075
|
+
const content = readFileSync(testFile, 'utf-8');
|
|
1076
|
+
unlinkSync(testFile);
|
|
1077
|
+
if (content.includes('Smoke test')) {
|
|
1078
|
+
console.log(` ${green('✓')} Smoke test: vault read/write verified`);
|
|
1079
|
+
} else {
|
|
1080
|
+
console.log(` ${red('✗')} Smoke test: file written but content mismatch`);
|
|
1081
|
+
}
|
|
1082
|
+
} catch (e) {
|
|
1083
|
+
try { unlinkSync(testFile); } catch {}
|
|
1084
|
+
console.log(` ${red('✗')} Smoke test failed: ${e.message}`);
|
|
1085
|
+
console.log(` ${dim('Check permissions on ' + resolvedVaultDir)}`);
|
|
1086
|
+
}
|
|
980
1087
|
}
|
|
981
1088
|
|
|
982
1089
|
// Completion box
|
|
983
1090
|
const elapsed = ((Date.now() - setupStart) / 1000).toFixed(1);
|
|
984
1091
|
const toolName = okResults.length ? okResults[0].tool.name : 'your AI tool';
|
|
985
|
-
const
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
1092
|
+
const cli = isNpx() ? 'npx context-vault' : 'context-vault';
|
|
1093
|
+
|
|
1094
|
+
let boxLines;
|
|
1095
|
+
if (userLevel === 'beginner') {
|
|
1096
|
+
boxLines = [
|
|
1097
|
+
` ✓ Setup complete — ${passed}/${checks.length} checks passed (${elapsed}s)`,
|
|
1098
|
+
``,
|
|
1099
|
+
` ${bold('What to do next:')}`,
|
|
1100
|
+
``,
|
|
1101
|
+
` 1. Restart ${toolName}`,
|
|
1102
|
+
` ${dim('(required for it to see the vault)')}`,
|
|
1103
|
+
``,
|
|
1104
|
+
` 2. Ask your AI: ${cyan('"Search my vault for getting started"')}`,
|
|
1105
|
+
` ${dim('This confirms everything is working.')}`,
|
|
1106
|
+
``,
|
|
1107
|
+
` 3. Try: ${cyan('"Save an insight about [any topic]"')}`,
|
|
1108
|
+
` ${dim('Your first vault entry!')}`,
|
|
1109
|
+
``,
|
|
1110
|
+
` ${dim(`Your vault: ${resolvedVaultDir}`)}`,
|
|
1111
|
+
` ${dim('These are plain markdown files — open them in any text editor.')}`,
|
|
1112
|
+
];
|
|
1113
|
+
} else {
|
|
1114
|
+
boxLines = [
|
|
1115
|
+
` ✓ Setup complete — ${passed}/${checks.length} checks passed (${elapsed}s)`,
|
|
1116
|
+
``,
|
|
1117
|
+
` ${bold('Next:')} restart ${toolName} to activate the vault`,
|
|
1118
|
+
``,
|
|
1119
|
+
` ${bold('Try:')}`,
|
|
1120
|
+
` "Search my vault for getting started"`,
|
|
1121
|
+
` "Save an insight about [topic]"`,
|
|
1122
|
+
` "Show my vault status"`,
|
|
1123
|
+
``,
|
|
1124
|
+
` ${bold('CLI:')} ${cli} status · ${cli} doctor`,
|
|
1125
|
+
...(isNpx()
|
|
1126
|
+
? [``, ` ${dim('Tip: npm i -g context-vault for faster MCP startup')}`]
|
|
1127
|
+
: []),
|
|
1128
|
+
];
|
|
1129
|
+
}
|
|
999
1130
|
const innerWidth = Math.max(...boxLines.map((l) => l.length)) + 2;
|
|
1000
1131
|
const pad = (s) => s + ' '.repeat(Math.max(0, innerWidth - s.length));
|
|
1001
1132
|
console.log();
|
|
@@ -3878,11 +4009,12 @@ function installSessionEndHook() {
|
|
|
3878
4009
|
);
|
|
3879
4010
|
if (alreadyInstalled) return false;
|
|
3880
4011
|
|
|
4012
|
+
const flushCmd = isInstalledPackage() && !isNpx() ? 'context-vault flush' : 'npx -y context-vault flush';
|
|
3881
4013
|
settings.hooks.SessionEnd.push({
|
|
3882
4014
|
hooks: [
|
|
3883
4015
|
{
|
|
3884
4016
|
type: 'command',
|
|
3885
|
-
command:
|
|
4017
|
+
command: flushCmd,
|
|
3886
4018
|
timeout: 10,
|
|
3887
4019
|
},
|
|
3888
4020
|
],
|
|
@@ -4367,9 +4499,9 @@ async function runDoctor() {
|
|
|
4367
4499
|
|
|
4368
4500
|
// ── Node.js version ──────────────────────────────────────────────────────
|
|
4369
4501
|
const nodeMajor = parseInt(process.versions.node.split('.')[0], 10);
|
|
4370
|
-
if (nodeMajor <
|
|
4371
|
-
console.log(` ${red('✘')} Node.js ${process.versions.node} — requires >=
|
|
4372
|
-
console.log(` ${dim('Fix: install
|
|
4502
|
+
if (nodeMajor < 22) {
|
|
4503
|
+
console.log(` ${red('✘')} Node.js ${process.versions.node} — requires >= 22`);
|
|
4504
|
+
console.log(` ${dim('Fix: nvm install 22 / fnm install 22 / https://nodejs.org/')}`);
|
|
4373
4505
|
allOk = false;
|
|
4374
4506
|
} else {
|
|
4375
4507
|
console.log(` ${green('✓')} Node.js ${process.versions.node} ${dim(`(${process.execPath})`)}`);
|
|
@@ -4869,28 +5001,40 @@ async function runRestart() {
|
|
|
4869
5001
|
console.log(` ${bold('◇ context-vault restart')}`);
|
|
4870
5002
|
console.log();
|
|
4871
5003
|
|
|
5004
|
+
const isWin = platform() === 'win32';
|
|
4872
5005
|
let psOutput;
|
|
4873
5006
|
try {
|
|
4874
|
-
|
|
5007
|
+
const psCmd = isWin
|
|
5008
|
+
? 'wmic process where "CommandLine like \'%context-vault%\'" get ProcessId,CommandLine /format:list'
|
|
5009
|
+
: 'ps aux';
|
|
5010
|
+
psOutput = execSync(psCmd, { encoding: 'utf-8', timeout: 5000 });
|
|
4875
5011
|
} catch (e) {
|
|
4876
5012
|
console.error(red(` Failed to list processes: ${e.message}`));
|
|
4877
5013
|
process.exit(1);
|
|
4878
5014
|
}
|
|
4879
5015
|
|
|
4880
5016
|
const currentPid = process.pid;
|
|
4881
|
-
const lines = psOutput.split('\n');
|
|
4882
|
-
|
|
4883
5017
|
const serverPids = [];
|
|
4884
|
-
|
|
4885
|
-
|
|
4886
|
-
|
|
4887
|
-
const
|
|
4888
|
-
|
|
4889
|
-
|
|
4890
|
-
|
|
4891
|
-
|
|
4892
|
-
)
|
|
4893
|
-
|
|
5018
|
+
|
|
5019
|
+
if (isWin) {
|
|
5020
|
+
const pidMatches = psOutput.matchAll(/ProcessId=(\d+)/g);
|
|
5021
|
+
for (const m of pidMatches) {
|
|
5022
|
+
const pid = parseInt(m[1], 10);
|
|
5023
|
+
if (pid !== currentPid) serverPids.push(pid);
|
|
5024
|
+
}
|
|
5025
|
+
} else {
|
|
5026
|
+
const lines = psOutput.split('\n');
|
|
5027
|
+
for (const line of lines) {
|
|
5028
|
+
const match = line.match(/^\S+\s+(\d+)\s/);
|
|
5029
|
+
if (!match) continue;
|
|
5030
|
+
const pid = parseInt(match[1], 10);
|
|
5031
|
+
if (pid === currentPid) continue;
|
|
5032
|
+
if (
|
|
5033
|
+
/context-vault.*(serve|stdio|server\/index)/.test(line) ||
|
|
5034
|
+
/server\/index\.js.*context-vault/.test(line)
|
|
5035
|
+
) {
|
|
5036
|
+
serverPids.push(pid);
|
|
5037
|
+
}
|
|
4894
5038
|
}
|
|
4895
5039
|
}
|
|
4896
5040
|
|
package/dist/server.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
2
3
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
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';
|
|
4
8
|
import { existsSync, mkdirSync, writeFileSync, readFileSync, unlinkSync } from 'node:fs';
|
|
5
9
|
import { join, dirname } from 'node:path';
|
|
6
10
|
import { homedir } from 'node:os';
|
|
@@ -78,7 +82,6 @@ async function main() {
|
|
|
78
82
|
console.error(`[context-vault] Warning: startup prune failed: ${pruneErr.message}`);
|
|
79
83
|
}
|
|
80
84
|
phase = 'SERVER';
|
|
81
|
-
const server = new McpServer({ name: 'context-vault', version: pkg.version }, { capabilities: { tools: {} } });
|
|
82
85
|
const CONFIG_CACHE_TTL_MS = 30_000;
|
|
83
86
|
let cachedConfig = config;
|
|
84
87
|
let configCachedAt = Date.now();
|
|
@@ -100,7 +103,12 @@ async function main() {
|
|
|
100
103
|
},
|
|
101
104
|
configurable: true,
|
|
102
105
|
});
|
|
103
|
-
|
|
106
|
+
function createServer() {
|
|
107
|
+
const s = new McpServer({ name: 'context-vault', version: pkg.version }, { capabilities: { tools: {} } });
|
|
108
|
+
registerTools(s, ctx);
|
|
109
|
+
return s;
|
|
110
|
+
}
|
|
111
|
+
const server = createServer();
|
|
104
112
|
function closeDb() {
|
|
105
113
|
try {
|
|
106
114
|
if (db.inTransaction) {
|
|
@@ -139,8 +147,88 @@ async function main() {
|
|
|
139
147
|
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
140
148
|
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
141
149
|
phase = 'CONNECTED';
|
|
142
|
-
const
|
|
143
|
-
|
|
150
|
+
const useHttp = process.argv.includes('--http');
|
|
151
|
+
if (useHttp) {
|
|
152
|
+
const portIdx = process.argv.indexOf('--port');
|
|
153
|
+
const port = portIdx !== -1 && process.argv[portIdx + 1]
|
|
154
|
+
? parseInt(process.argv[portIdx + 1], 10)
|
|
155
|
+
: 3377;
|
|
156
|
+
const app = createMcpExpressApp();
|
|
157
|
+
const transports = {};
|
|
158
|
+
app.post('/mcp', async (req, res) => {
|
|
159
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
160
|
+
try {
|
|
161
|
+
let transport;
|
|
162
|
+
if (sessionId && transports[sessionId]) {
|
|
163
|
+
transport = transports[sessionId];
|
|
164
|
+
}
|
|
165
|
+
else if (!sessionId && isInitializeRequest(req.body)) {
|
|
166
|
+
transport = new StreamableHTTPServerTransport({
|
|
167
|
+
sessionIdGenerator: () => randomUUID(),
|
|
168
|
+
onsessioninitialized: (sid) => {
|
|
169
|
+
transports[sid] = transport;
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
transport.onclose = () => {
|
|
173
|
+
const sid = transport.sessionId;
|
|
174
|
+
if (sid && transports[sid]) {
|
|
175
|
+
delete transports[sid];
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
const sessionServer = createServer();
|
|
179
|
+
await sessionServer.connect(transport);
|
|
180
|
+
await transport.handleRequest(req, res, req.body);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
185
|
+
res.end(JSON.stringify({
|
|
186
|
+
jsonrpc: '2.0',
|
|
187
|
+
error: { code: -32000, message: 'Bad Request: No valid session ID' },
|
|
188
|
+
id: null,
|
|
189
|
+
}));
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
await transport.handleRequest(req, res, req.body);
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
console.error('[context-vault] HTTP error:', error);
|
|
196
|
+
if (!res.headersSent) {
|
|
197
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
198
|
+
res.end(JSON.stringify({
|
|
199
|
+
jsonrpc: '2.0',
|
|
200
|
+
error: { code: -32603, message: 'Internal server error' },
|
|
201
|
+
id: null,
|
|
202
|
+
}));
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
app.get('/mcp', async (req, res) => {
|
|
207
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
208
|
+
if (!sessionId || !transports[sessionId]) {
|
|
209
|
+
res.writeHead(400);
|
|
210
|
+
res.end('Invalid or missing session ID');
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
await transports[sessionId].handleRequest(req, res);
|
|
214
|
+
});
|
|
215
|
+
app.delete('/mcp', async (req, res) => {
|
|
216
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
217
|
+
if (!sessionId || !transports[sessionId]) {
|
|
218
|
+
res.writeHead(400);
|
|
219
|
+
res.end('Invalid or missing session ID');
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
await transports[sessionId].handleRequest(req, res);
|
|
223
|
+
});
|
|
224
|
+
app.listen(port, () => {
|
|
225
|
+
console.error(`[context-vault] Serving on http://localhost:${port}/mcp`);
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
const transport = new StdioServerTransport();
|
|
230
|
+
await server.connect(transport);
|
|
231
|
+
}
|
|
144
232
|
setTimeout(() => {
|
|
145
233
|
import('node:child_process')
|
|
146
234
|
.then(({ execSync }) => {
|
|
@@ -192,6 +280,7 @@ async function main() {
|
|
|
192
280
|
console.error('');
|
|
193
281
|
console.error(err.message);
|
|
194
282
|
console.error('');
|
|
283
|
+
console.error(` Platform: ${process.platform}/${process.arch}`);
|
|
195
284
|
console.error(` Node.js path: ${process.execPath}`);
|
|
196
285
|
console.error(` Node.js version: ${process.version}`);
|
|
197
286
|
console.error(` Error log: ${join(dataDir, 'error.log')}`);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAiDrD,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,aAAa,EAAE,KAAK,CAAC;gBACT,aAAa,EAAE,KAAK;CAMjC;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAiDrD,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,aAAa,EAAE,KAAK,CAAC;gBACT,aAAa,EAAE,KAAK;CAMjC;AAiED,eAAO,MAAM,UAAU,szEAoDtB,CAAC;AAIF,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAyExE;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,kBAAkB,CAiCtE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI,CAIjG;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIxE;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAOxD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { unlinkSync, copyFileSync, existsSync, openSync, closeSync, mkdirSync } from 'node:fs';
|
|
1
|
+
import { unlinkSync, copyFileSync, existsSync, openSync, closeSync, mkdirSync, statSync } from 'node:fs';
|
|
2
2
|
import { dirname } from 'node:path';
|
|
3
3
|
import { DatabaseSync } from 'node:sqlite';
|
|
4
4
|
/**
|
|
@@ -30,7 +30,7 @@ function acquireInitLock(dbPath, timeoutMs = 10_000) {
|
|
|
30
30
|
throw err;
|
|
31
31
|
// Stale lock detection — if lock file is older than 30s, it's from a crashed process
|
|
32
32
|
try {
|
|
33
|
-
const { mtimeMs } =
|
|
33
|
+
const { mtimeMs } = statSync(lockPath);
|
|
34
34
|
if (Date.now() - mtimeMs > 30_000) {
|
|
35
35
|
try {
|
|
36
36
|
unlinkSync(lockPath);
|
|
@@ -64,15 +64,45 @@ export class NativeModuleError extends Error {
|
|
|
64
64
|
this.originalError = originalError;
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
+
function platformFixCommands() {
|
|
68
|
+
const p = process.platform;
|
|
69
|
+
if (p === 'darwin') {
|
|
70
|
+
return [
|
|
71
|
+
' Fix options:',
|
|
72
|
+
' brew reinstall node && npm rebuild sqlite-vec',
|
|
73
|
+
' nvm install 22 && npm rebuild sqlite-vec',
|
|
74
|
+
' npx -y context-vault@latest setup',
|
|
75
|
+
];
|
|
76
|
+
}
|
|
77
|
+
if (p === 'win32') {
|
|
78
|
+
return [
|
|
79
|
+
' Fix options:',
|
|
80
|
+
' Verify architecture matches: node -p process.arch (expect x64)',
|
|
81
|
+
' winget install OpenJS.NodeJS.LTS && npm rebuild sqlite-vec',
|
|
82
|
+
' npx -y context-vault@latest setup',
|
|
83
|
+
];
|
|
84
|
+
}
|
|
85
|
+
// linux and others
|
|
86
|
+
return [
|
|
87
|
+
' Fix options:',
|
|
88
|
+
' nvm install 22 && npm rebuild sqlite-vec',
|
|
89
|
+
' npx -y context-vault@latest setup',
|
|
90
|
+
];
|
|
91
|
+
}
|
|
67
92
|
function formatNativeModuleError(err) {
|
|
68
93
|
const msg = err.message || '';
|
|
69
94
|
return [
|
|
70
95
|
`sqlite-vec extension failed to load: ${msg}`,
|
|
71
96
|
'',
|
|
72
|
-
`
|
|
97
|
+
` Platform: ${process.platform}/${process.arch}`,
|
|
98
|
+
` Node.js: ${process.version} (${process.execPath})`,
|
|
73
99
|
'',
|
|
74
|
-
'
|
|
75
|
-
'
|
|
100
|
+
' This means the native binary was compiled for a different',
|
|
101
|
+
' Node.js version or CPU architecture than the one running.',
|
|
102
|
+
'',
|
|
103
|
+
...platformFixCommands(),
|
|
104
|
+
'',
|
|
105
|
+
' Known issues: https://github.com/fellanH/context-vault/issues?q=sqlite-vec',
|
|
76
106
|
].join('\n');
|
|
77
107
|
}
|
|
78
108
|
let _sqliteVec = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,15 +60,46 @@ export class NativeModuleError extends Error {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
function platformFixCommands(): string[] {
|
|
64
|
+
const p = process.platform;
|
|
65
|
+
if (p === 'darwin') {
|
|
66
|
+
return [
|
|
67
|
+
' Fix options:',
|
|
68
|
+
' brew reinstall node && npm rebuild sqlite-vec',
|
|
69
|
+
' nvm install 22 && npm rebuild sqlite-vec',
|
|
70
|
+
' npx -y context-vault@latest setup',
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
if (p === 'win32') {
|
|
74
|
+
return [
|
|
75
|
+
' Fix options:',
|
|
76
|
+
' Verify architecture matches: node -p process.arch (expect x64)',
|
|
77
|
+
' winget install OpenJS.NodeJS.LTS && npm rebuild sqlite-vec',
|
|
78
|
+
' npx -y context-vault@latest setup',
|
|
79
|
+
];
|
|
80
|
+
}
|
|
81
|
+
// linux and others
|
|
82
|
+
return [
|
|
83
|
+
' Fix options:',
|
|
84
|
+
' nvm install 22 && npm rebuild sqlite-vec',
|
|
85
|
+
' npx -y context-vault@latest setup',
|
|
86
|
+
];
|
|
87
|
+
}
|
|
88
|
+
|
|
63
89
|
function formatNativeModuleError(err: Error): string {
|
|
64
90
|
const msg = err.message || '';
|
|
65
91
|
return [
|
|
66
92
|
`sqlite-vec extension failed to load: ${msg}`,
|
|
67
93
|
'',
|
|
68
|
-
`
|
|
94
|
+
` Platform: ${process.platform}/${process.arch}`,
|
|
95
|
+
` Node.js: ${process.version} (${process.execPath})`,
|
|
69
96
|
'',
|
|
70
|
-
'
|
|
71
|
-
'
|
|
97
|
+
' This means the native binary was compiled for a different',
|
|
98
|
+
' Node.js version or CPU architecture than the one running.',
|
|
99
|
+
'',
|
|
100
|
+
...platformFixCommands(),
|
|
101
|
+
'',
|
|
102
|
+
' Known issues: https://github.com/fellanH/context-vault/issues?q=sqlite-vec',
|
|
72
103
|
].join('\n');
|
|
73
104
|
}
|
|
74
105
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "context-vault",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
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.
|
|
66
|
+
"@context-vault/core": "^3.3.0",
|
|
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
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
+
import { randomUUID } from 'node:crypto';
|
|
3
4
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
4
5
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
6
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
7
|
+
import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
|
|
8
|
+
import { createMcpExpressApp } from '@modelcontextprotocol/sdk/server/express.js';
|
|
9
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
5
10
|
import { existsSync, mkdirSync, writeFileSync, readFileSync, unlinkSync } from 'node:fs';
|
|
6
11
|
import { join, dirname } from 'node:path';
|
|
7
12
|
import { homedir } from 'node:os';
|
|
@@ -109,10 +114,6 @@ async function main(): Promise<void> {
|
|
|
109
114
|
}
|
|
110
115
|
|
|
111
116
|
phase = 'SERVER';
|
|
112
|
-
const server = new McpServer(
|
|
113
|
-
{ name: 'context-vault', version: pkg.version },
|
|
114
|
-
{ capabilities: { tools: {} } }
|
|
115
|
-
);
|
|
116
117
|
|
|
117
118
|
const CONFIG_CACHE_TTL_MS = 30_000;
|
|
118
119
|
let cachedConfig = config;
|
|
@@ -135,7 +136,16 @@ async function main(): Promise<void> {
|
|
|
135
136
|
configurable: true,
|
|
136
137
|
});
|
|
137
138
|
|
|
138
|
-
|
|
139
|
+
function createServer(): McpServer {
|
|
140
|
+
const s = new McpServer(
|
|
141
|
+
{ name: 'context-vault', version: pkg.version },
|
|
142
|
+
{ capabilities: { tools: {} } }
|
|
143
|
+
);
|
|
144
|
+
registerTools(s, ctx);
|
|
145
|
+
return s;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const server = createServer();
|
|
139
149
|
|
|
140
150
|
function closeDb(): void {
|
|
141
151
|
try {
|
|
@@ -180,8 +190,91 @@ async function main(): Promise<void> {
|
|
|
180
190
|
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
181
191
|
|
|
182
192
|
phase = 'CONNECTED';
|
|
183
|
-
|
|
184
|
-
|
|
193
|
+
|
|
194
|
+
const useHttp = process.argv.includes('--http');
|
|
195
|
+
|
|
196
|
+
if (useHttp) {
|
|
197
|
+
const portIdx = process.argv.indexOf('--port');
|
|
198
|
+
const port = portIdx !== -1 && process.argv[portIdx + 1]
|
|
199
|
+
? parseInt(process.argv[portIdx + 1], 10)
|
|
200
|
+
: 3377;
|
|
201
|
+
|
|
202
|
+
const app = createMcpExpressApp();
|
|
203
|
+
const transports: Record<string, StreamableHTTPServerTransport> = {};
|
|
204
|
+
|
|
205
|
+
app.post('/mcp', async (req: IncomingMessage & { body?: unknown }, res: ServerResponse) => {
|
|
206
|
+
const sessionId = req.headers['mcp-session-id'] as string | undefined;
|
|
207
|
+
try {
|
|
208
|
+
let transport: StreamableHTTPServerTransport;
|
|
209
|
+
if (sessionId && transports[sessionId]) {
|
|
210
|
+
transport = transports[sessionId];
|
|
211
|
+
} else if (!sessionId && isInitializeRequest((req as any).body)) {
|
|
212
|
+
transport = new StreamableHTTPServerTransport({
|
|
213
|
+
sessionIdGenerator: () => randomUUID(),
|
|
214
|
+
onsessioninitialized: (sid: string) => {
|
|
215
|
+
transports[sid] = transport;
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
transport.onclose = () => {
|
|
219
|
+
const sid = transport.sessionId;
|
|
220
|
+
if (sid && transports[sid]) {
|
|
221
|
+
delete transports[sid];
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
const sessionServer = createServer();
|
|
225
|
+
await sessionServer.connect(transport);
|
|
226
|
+
await transport.handleRequest(req, res, (req as any).body);
|
|
227
|
+
return;
|
|
228
|
+
} else {
|
|
229
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
230
|
+
res.end(JSON.stringify({
|
|
231
|
+
jsonrpc: '2.0',
|
|
232
|
+
error: { code: -32000, message: 'Bad Request: No valid session ID' },
|
|
233
|
+
id: null,
|
|
234
|
+
}));
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
await transport.handleRequest(req, res, (req as any).body);
|
|
238
|
+
} catch (error) {
|
|
239
|
+
console.error('[context-vault] HTTP error:', error);
|
|
240
|
+
if (!res.headersSent) {
|
|
241
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
242
|
+
res.end(JSON.stringify({
|
|
243
|
+
jsonrpc: '2.0',
|
|
244
|
+
error: { code: -32603, message: 'Internal server error' },
|
|
245
|
+
id: null,
|
|
246
|
+
}));
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
app.get('/mcp', async (req: IncomingMessage, res: ServerResponse) => {
|
|
252
|
+
const sessionId = req.headers['mcp-session-id'] as string | undefined;
|
|
253
|
+
if (!sessionId || !transports[sessionId]) {
|
|
254
|
+
res.writeHead(400);
|
|
255
|
+
res.end('Invalid or missing session ID');
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
await transports[sessionId].handleRequest(req, res);
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
app.delete('/mcp', async (req: IncomingMessage, res: ServerResponse) => {
|
|
262
|
+
const sessionId = req.headers['mcp-session-id'] as string | undefined;
|
|
263
|
+
if (!sessionId || !transports[sessionId]) {
|
|
264
|
+
res.writeHead(400);
|
|
265
|
+
res.end('Invalid or missing session ID');
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
await transports[sessionId].handleRequest(req, res);
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
app.listen(port, () => {
|
|
272
|
+
console.error(`[context-vault] Serving on http://localhost:${port}/mcp`);
|
|
273
|
+
});
|
|
274
|
+
} else {
|
|
275
|
+
const transport = new StdioServerTransport();
|
|
276
|
+
await server.connect(transport);
|
|
277
|
+
}
|
|
185
278
|
|
|
186
279
|
setTimeout(() => {
|
|
187
280
|
import('node:child_process')
|
|
@@ -239,6 +332,7 @@ async function main(): Promise<void> {
|
|
|
239
332
|
console.error('');
|
|
240
333
|
console.error(err.message);
|
|
241
334
|
console.error('');
|
|
335
|
+
console.error(` Platform: ${process.platform}/${process.arch}`);
|
|
242
336
|
console.error(` Node.js path: ${process.execPath}`);
|
|
243
337
|
console.error(` Node.js version: ${process.version}`);
|
|
244
338
|
console.error(` Error log: ${join(dataDir, 'error.log')}`);
|