context-vault 3.1.6 → 3.1.8

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 (184) hide show
  1. package/bin/cli.js +1369 -1774
  2. package/dist/archive.d.ts +23 -0
  3. package/dist/archive.d.ts.map +1 -0
  4. package/dist/archive.js +197 -0
  5. package/dist/archive.js.map +1 -0
  6. package/dist/consolidation.d.ts +14 -0
  7. package/dist/consolidation.d.ts.map +1 -0
  8. package/dist/consolidation.js +59 -0
  9. package/dist/consolidation.js.map +1 -0
  10. package/dist/error-log.d.ts +4 -0
  11. package/dist/error-log.d.ts.map +1 -0
  12. package/dist/error-log.js +33 -0
  13. package/dist/error-log.js.map +1 -0
  14. package/dist/helpers.d.ts +10 -0
  15. package/dist/helpers.d.ts.map +1 -0
  16. package/dist/helpers.js +42 -0
  17. package/dist/helpers.js.map +1 -0
  18. package/dist/linking.d.ts +13 -0
  19. package/dist/linking.d.ts.map +1 -0
  20. package/dist/linking.js +86 -0
  21. package/dist/linking.js.map +1 -0
  22. package/dist/migrate-dirs.d.ts +16 -0
  23. package/dist/migrate-dirs.d.ts.map +1 -0
  24. package/dist/migrate-dirs.js +127 -0
  25. package/dist/migrate-dirs.js.map +1 -0
  26. package/dist/register-tools.d.ts +3 -0
  27. package/dist/register-tools.d.ts.map +1 -0
  28. package/dist/register-tools.js +161 -0
  29. package/dist/register-tools.js.map +1 -0
  30. package/dist/server.d.ts +3 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +241 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/status.d.ts +18 -0
  35. package/dist/status.d.ts.map +1 -0
  36. package/dist/status.js +265 -0
  37. package/dist/status.js.map +1 -0
  38. package/dist/telemetry.d.ts +6 -0
  39. package/dist/telemetry.d.ts.map +1 -0
  40. package/dist/telemetry.js +74 -0
  41. package/dist/telemetry.js.map +1 -0
  42. package/dist/temporal.d.ts +9 -0
  43. package/dist/temporal.d.ts.map +1 -0
  44. package/dist/temporal.js +76 -0
  45. package/dist/temporal.js.map +1 -0
  46. package/dist/tools/clear-context.d.ts +11 -0
  47. package/dist/tools/clear-context.d.ts.map +1 -0
  48. package/dist/tools/clear-context.js +28 -0
  49. package/dist/tools/clear-context.js.map +1 -0
  50. package/dist/tools/context-status.d.ts +6 -0
  51. package/dist/tools/context-status.d.ts.map +1 -0
  52. package/dist/tools/context-status.js +160 -0
  53. package/dist/tools/context-status.js.map +1 -0
  54. package/dist/tools/create-snapshot.d.ts +13 -0
  55. package/dist/tools/create-snapshot.d.ts.map +1 -0
  56. package/dist/tools/create-snapshot.js +161 -0
  57. package/dist/tools/create-snapshot.js.map +1 -0
  58. package/dist/tools/delete-context.d.ts +9 -0
  59. package/dist/tools/delete-context.d.ts.map +1 -0
  60. package/dist/tools/delete-context.js +45 -0
  61. package/dist/tools/delete-context.js.map +1 -0
  62. package/dist/tools/get-context.d.ts +85 -0
  63. package/dist/tools/get-context.d.ts.map +1 -0
  64. package/dist/tools/get-context.js +576 -0
  65. package/dist/tools/get-context.js.map +1 -0
  66. package/dist/tools/ingest-project.d.ts +11 -0
  67. package/dist/tools/ingest-project.d.ts.map +1 -0
  68. package/dist/tools/ingest-project.js +226 -0
  69. package/dist/tools/ingest-project.js.map +1 -0
  70. package/dist/tools/ingest-url.d.ts +11 -0
  71. package/dist/tools/ingest-url.d.ts.map +1 -0
  72. package/dist/tools/ingest-url.js +62 -0
  73. package/dist/tools/ingest-url.js.map +1 -0
  74. package/dist/tools/list-buckets.d.ts +9 -0
  75. package/dist/tools/list-buckets.d.ts.map +1 -0
  76. package/dist/tools/list-buckets.js +76 -0
  77. package/dist/tools/list-buckets.js.map +1 -0
  78. package/dist/tools/list-context.d.ts +19 -0
  79. package/dist/tools/list-context.d.ts.map +1 -0
  80. package/dist/tools/list-context.js +110 -0
  81. package/dist/tools/list-context.js.map +1 -0
  82. package/dist/tools/save-context.d.ts +36 -0
  83. package/dist/tools/save-context.d.ts.map +1 -0
  84. package/dist/tools/save-context.js +458 -0
  85. package/dist/tools/save-context.js.map +1 -0
  86. package/dist/tools/session-start.d.ts +11 -0
  87. package/dist/tools/session-start.d.ts.map +1 -0
  88. package/dist/tools/session-start.js +224 -0
  89. package/dist/tools/session-start.js.map +1 -0
  90. package/dist/types.d.ts +37 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +2 -0
  93. package/dist/types.js.map +1 -0
  94. package/node_modules/@context-vault/core/dist/capture.d.ts +1 -1
  95. package/node_modules/@context-vault/core/dist/capture.d.ts.map +1 -1
  96. package/node_modules/@context-vault/core/dist/capture.js +34 -47
  97. package/node_modules/@context-vault/core/dist/capture.js.map +1 -1
  98. package/node_modules/@context-vault/core/dist/categories.js +30 -30
  99. package/node_modules/@context-vault/core/dist/config.d.ts +1 -1
  100. package/node_modules/@context-vault/core/dist/config.d.ts.map +1 -1
  101. package/node_modules/@context-vault/core/dist/config.js +37 -43
  102. package/node_modules/@context-vault/core/dist/config.js.map +1 -1
  103. package/node_modules/@context-vault/core/dist/constants.d.ts +1 -1
  104. package/node_modules/@context-vault/core/dist/constants.d.ts.map +1 -1
  105. package/node_modules/@context-vault/core/dist/constants.js +4 -4
  106. package/node_modules/@context-vault/core/dist/constants.js.map +1 -1
  107. package/node_modules/@context-vault/core/dist/db.d.ts +2 -2
  108. package/node_modules/@context-vault/core/dist/db.d.ts.map +1 -1
  109. package/node_modules/@context-vault/core/dist/db.js +21 -20
  110. package/node_modules/@context-vault/core/dist/db.js.map +1 -1
  111. package/node_modules/@context-vault/core/dist/embed.d.ts.map +1 -1
  112. package/node_modules/@context-vault/core/dist/embed.js +11 -11
  113. package/node_modules/@context-vault/core/dist/embed.js.map +1 -1
  114. package/node_modules/@context-vault/core/dist/files.d.ts.map +1 -1
  115. package/node_modules/@context-vault/core/dist/files.js +12 -13
  116. package/node_modules/@context-vault/core/dist/files.js.map +1 -1
  117. package/node_modules/@context-vault/core/dist/formatters.js +5 -5
  118. package/node_modules/@context-vault/core/dist/frontmatter.d.ts.map +1 -1
  119. package/node_modules/@context-vault/core/dist/frontmatter.js +23 -23
  120. package/node_modules/@context-vault/core/dist/frontmatter.js.map +1 -1
  121. package/node_modules/@context-vault/core/dist/index.d.ts +1 -1
  122. package/node_modules/@context-vault/core/dist/index.d.ts.map +1 -1
  123. package/node_modules/@context-vault/core/dist/index.js +58 -46
  124. package/node_modules/@context-vault/core/dist/index.js.map +1 -1
  125. package/node_modules/@context-vault/core/dist/ingest-url.d.ts.map +1 -1
  126. package/node_modules/@context-vault/core/dist/ingest-url.js +30 -33
  127. package/node_modules/@context-vault/core/dist/ingest-url.js.map +1 -1
  128. package/node_modules/@context-vault/core/dist/main.d.ts +13 -13
  129. package/node_modules/@context-vault/core/dist/main.d.ts.map +1 -1
  130. package/node_modules/@context-vault/core/dist/main.js +12 -12
  131. package/node_modules/@context-vault/core/dist/main.js.map +1 -1
  132. package/node_modules/@context-vault/core/dist/search.d.ts +1 -1
  133. package/node_modules/@context-vault/core/dist/search.d.ts.map +1 -1
  134. package/node_modules/@context-vault/core/dist/search.js +20 -22
  135. package/node_modules/@context-vault/core/dist/search.js.map +1 -1
  136. package/node_modules/@context-vault/core/dist/types.d.ts +1 -1
  137. package/node_modules/@context-vault/core/package.json +1 -1
  138. package/node_modules/@context-vault/core/src/capture.ts +44 -81
  139. package/node_modules/@context-vault/core/src/categories.ts +30 -30
  140. package/node_modules/@context-vault/core/src/config.ts +45 -60
  141. package/node_modules/@context-vault/core/src/constants.ts +8 -10
  142. package/node_modules/@context-vault/core/src/db.ts +37 -56
  143. package/node_modules/@context-vault/core/src/embed.ts +15 -26
  144. package/node_modules/@context-vault/core/src/files.ts +13 -16
  145. package/node_modules/@context-vault/core/src/formatters.ts +5 -5
  146. package/node_modules/@context-vault/core/src/frontmatter.ts +26 -30
  147. package/node_modules/@context-vault/core/src/index.ts +94 -100
  148. package/node_modules/@context-vault/core/src/ingest-url.ts +56 -93
  149. package/node_modules/@context-vault/core/src/main.ts +13 -18
  150. package/node_modules/@context-vault/core/src/search.ts +34 -56
  151. package/node_modules/@context-vault/core/src/types.ts +1 -1
  152. package/package.json +10 -4
  153. package/scripts/postinstall.js +18 -25
  154. package/scripts/prepack.js +13 -19
  155. package/src/archive.ts +244 -0
  156. package/src/consolidation.ts +78 -0
  157. package/src/{error-log.js → error-log.ts} +10 -10
  158. package/src/helpers.ts +61 -0
  159. package/src/{linking.js → linking.ts} +22 -20
  160. package/src/migrate-dirs.ts +152 -0
  161. package/src/register-tools.ts +183 -0
  162. package/src/{server.js → server.ts} +89 -109
  163. package/src/{status.js → status.ts} +94 -108
  164. package/src/telemetry.ts +80 -0
  165. package/src/{temporal.js → temporal.ts} +29 -33
  166. package/src/tools/clear-context.ts +41 -0
  167. package/src/tools/{context-status.js → context-status.ts} +43 -66
  168. package/src/tools/{create-snapshot.js → create-snapshot.ts} +54 -65
  169. package/src/tools/delete-context.ts +53 -0
  170. package/src/tools/{get-context.js → get-context.ts} +142 -205
  171. package/src/tools/ingest-project.ts +260 -0
  172. package/src/tools/ingest-url.ts +74 -0
  173. package/src/tools/{list-buckets.js → list-buckets.ts} +27 -37
  174. package/src/tools/{list-context.js → list-context.ts} +46 -71
  175. package/src/tools/{save-context.js → save-context.ts} +148 -204
  176. package/src/tools/{session-start.js → session-start.ts} +72 -79
  177. package/src/types.ts +29 -0
  178. package/src/helpers.js +0 -57
  179. package/src/register-tools.js +0 -175
  180. package/src/telemetry.js +0 -80
  181. package/src/tools/clear-context.js +0 -47
  182. package/src/tools/delete-context.js +0 -54
  183. package/src/tools/ingest-project.js +0 -272
  184. package/src/tools/ingest-url.js +0 -87
@@ -1,69 +1,58 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
- import {
6
- existsSync,
7
- mkdirSync,
8
- writeFileSync,
9
- readFileSync,
10
- unlinkSync,
11
- } from "node:fs";
12
- import { join, dirname } from "node:path";
13
- import { homedir } from "node:os";
14
- import { fileURLToPath } from "node:url";
3
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
4
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
5
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, unlinkSync } from 'node:fs';
6
+ import { join, dirname } from 'node:path';
7
+ import { homedir } from 'node:os';
8
+ import { fileURLToPath } from 'node:url';
15
9
 
16
10
  const __dirname = dirname(fileURLToPath(import.meta.url));
17
- const pkg = JSON.parse(
18
- readFileSync(join(__dirname, "..", "package.json"), "utf-8"),
19
- );
11
+ const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
20
12
 
21
- import { resolveConfig } from "@context-vault/core/config";
22
- import { appendErrorLog } from "./error-log.js";
23
- import { sendTelemetryEvent, maybeShowTelemetryNotice } from "./telemetry.js";
24
- import { embed } from "@context-vault/core/embed";
13
+ import { resolveConfig } from '@context-vault/core/config';
14
+ import type { LocalCtx } from './types.js';
15
+ import { appendErrorLog } from './error-log.js';
16
+ import { sendTelemetryEvent, maybeShowTelemetryNotice } from './telemetry.js';
17
+ import { embed } from '@context-vault/core/embed';
25
18
  import {
26
19
  initDatabase,
27
20
  NativeModuleError,
28
21
  prepareStatements,
29
22
  insertVec,
30
23
  deleteVec,
31
- } from "@context-vault/core/db";
32
- import { registerTools } from "./register-tools.js";
33
- import { pruneExpired } from "@context-vault/core/index";
24
+ } from '@context-vault/core/db';
25
+ import { registerTools } from './register-tools.js';
26
+ import { pruneExpired } from '@context-vault/core/index';
34
27
 
35
- async function main() {
36
- let phase = "CONFIG";
37
- let db;
38
- let config;
28
+ async function main(): Promise<void> {
29
+ let phase = 'CONFIG';
30
+ let db: import('node:sqlite').DatabaseSync | undefined;
31
+ let config: import('@context-vault/core/types').VaultConfig | undefined;
39
32
 
40
33
  try {
41
34
  config = resolveConfig();
42
35
 
43
- phase = "DIRS";
36
+ phase = 'DIRS';
44
37
  mkdirSync(config.dataDir, { recursive: true });
45
38
  mkdirSync(config.vaultDir, { recursive: true });
46
39
  maybeShowTelemetryNotice(config.dataDir);
47
40
 
48
41
  try {
49
- const probe = join(config.vaultDir, ".write-probe");
50
- writeFileSync(probe, "");
42
+ const probe = join(config.vaultDir, '.write-probe');
43
+ writeFileSync(probe, '');
51
44
  unlinkSync(probe);
52
45
  } catch (writeErr) {
53
- console.error(
54
- `[context-vault] FATAL: Vault directory is not writable: ${config.vaultDir}`,
55
- );
56
- console.error(`[context-vault] ${writeErr.message}`);
57
- console.error(
58
- `[context-vault] Fix permissions: chmod u+w "${config.vaultDir}"`,
59
- );
46
+ console.error(`[context-vault] FATAL: Vault directory is not writable: ${config.vaultDir}`);
47
+ console.error(`[context-vault] ${(writeErr as Error).message}`);
48
+ console.error(`[context-vault] Fix permissions: chmod u+w "${config.vaultDir}"`);
60
49
  process.exit(1);
61
50
  }
62
51
 
63
52
  try {
64
- const markerPath = join(config.vaultDir, ".context-mcp");
53
+ const markerPath = join(config.vaultDir, '.context-mcp');
65
54
  const markerData = existsSync(markerPath)
66
- ? JSON.parse(readFileSync(markerPath, "utf-8"))
55
+ ? JSON.parse(readFileSync(markerPath, 'utf-8'))
67
56
  : {};
68
57
  writeFileSync(
69
58
  markerPath,
@@ -73,12 +62,12 @@ async function main() {
73
62
  version: pkg.version,
74
63
  },
75
64
  null,
76
- 2,
77
- ) + "\n",
65
+ 2
66
+ ) + '\n'
78
67
  );
79
68
  } catch (markerErr) {
80
69
  console.error(
81
- `[context-vault] Warning: could not write marker file: ${markerErr.message}`,
70
+ `[context-vault] Warning: could not write marker file: ${(markerErr as Error).message}`
82
71
  );
83
72
  }
84
73
 
@@ -91,17 +80,17 @@ async function main() {
91
80
  console.error(`[context-vault] WARNING: Vault directory not found!`);
92
81
  }
93
82
 
94
- phase = "DB";
83
+ phase = 'DB';
95
84
  db = await initDatabase(config.dbPath);
96
85
  const stmts = prepareStatements(db);
97
86
 
98
- const ctx = {
87
+ const ctx: LocalCtx = {
99
88
  db,
100
89
  config,
101
90
  stmts,
102
91
  embed,
103
- insertVec: (rowid, embedding) => insertVec(stmts, rowid, embedding),
104
- deleteVec: (rowid) => deleteVec(stmts, rowid),
92
+ insertVec: (rowid: number, embedding: Float32Array) => insertVec(stmts, rowid, embedding),
93
+ deleteVec: (rowid: number) => deleteVec(stmts, rowid),
105
94
  activeOps: { count: 0 },
106
95
  toolStats: { ok: 0, errors: 0, lastError: null },
107
96
  };
@@ -110,29 +99,27 @@ async function main() {
110
99
  const pruned = await pruneExpired(ctx);
111
100
  if (pruned > 0) {
112
101
  console.error(
113
- `[context-vault] Pruned ${pruned} expired ${pruned === 1 ? "entry" : "entries"}`,
102
+ `[context-vault] Pruned ${pruned} expired ${pruned === 1 ? 'entry' : 'entries'}`
114
103
  );
115
104
  }
116
105
  } catch (pruneErr) {
117
106
  console.error(
118
- `[context-vault] Warning: startup prune failed: ${pruneErr.message}`,
107
+ `[context-vault] Warning: startup prune failed: ${(pruneErr as Error).message}`
119
108
  );
120
109
  }
121
110
 
122
- phase = "SERVER";
111
+ phase = 'SERVER';
123
112
  const server = new McpServer(
124
- { name: "context-vault", version: pkg.version },
125
- { capabilities: { tools: {} } },
113
+ { name: 'context-vault', version: pkg.version },
114
+ { capabilities: { tools: {} } }
126
115
  );
127
116
 
128
117
  let lastVaultDir = config.vaultDir;
129
- Object.defineProperty(ctx, "config", {
118
+ Object.defineProperty(ctx as object, 'config', {
130
119
  get() {
131
120
  const fresh = resolveConfig();
132
121
  if (fresh.vaultDir !== lastVaultDir) {
133
- console.error(
134
- `[context-vault] Config reloaded: vaultDir changed to ${fresh.vaultDir}`,
135
- );
122
+ console.error(`[context-vault] Config reloaded: vaultDir changed to ${fresh.vaultDir}`);
136
123
  lastVaultDir = fresh.vaultDir;
137
124
  fresh.vaultDirExists = existsSync(fresh.vaultDir);
138
125
  }
@@ -143,27 +130,27 @@ async function main() {
143
130
 
144
131
  registerTools(server, ctx);
145
132
 
146
- function closeDb() {
133
+ function closeDb(): void {
147
134
  try {
148
- if (db.inTransaction) {
149
- console.error("[context-vault] Rolling back active transaction...");
150
- db.exec("ROLLBACK");
135
+ if ((db as any).inTransaction) {
136
+ console.error('[context-vault] Rolling back active transaction...');
137
+ db!.exec('ROLLBACK');
151
138
  }
152
- db.pragma("wal_checkpoint(TRUNCATE)");
153
- db.close();
154
- console.error("[context-vault] Database closed cleanly.");
139
+ (db as any).pragma('wal_checkpoint(TRUNCATE)');
140
+ db!.close();
141
+ console.error('[context-vault] Database closed cleanly.');
155
142
  } catch (shutdownErr) {
156
- console.error(`[context-vault] Shutdown error: ${shutdownErr.message}`);
143
+ console.error(`[context-vault] Shutdown error: ${(shutdownErr as Error).message}`);
157
144
  }
158
145
  process.exit(0);
159
146
  }
160
147
 
161
- function shutdown(signal) {
148
+ function shutdown(signal: string): void {
162
149
  console.error(`[context-vault] Received ${signal}, shutting down...`);
163
150
 
164
151
  if (ctx.activeOps.count > 0) {
165
152
  console.error(
166
- `[context-vault] Waiting for ${ctx.activeOps.count} in-flight operation(s)...`,
153
+ `[context-vault] Waiting for ${ctx.activeOps.count} in-flight operation(s)...`
167
154
  );
168
155
  const check = setInterval(() => {
169
156
  if (ctx.activeOps.count === 0) {
@@ -174,7 +161,7 @@ async function main() {
174
161
  setTimeout(() => {
175
162
  clearInterval(check);
176
163
  console.error(
177
- `[context-vault] Force shutdown — ${ctx.activeOps.count} operation(s) still running`,
164
+ `[context-vault] Force shutdown — ${ctx.activeOps.count} operation(s) still running`
178
165
  );
179
166
  closeDb();
180
167
  }, 5000);
@@ -182,37 +169,38 @@ async function main() {
182
169
  closeDb();
183
170
  }
184
171
  }
185
- process.on("SIGINT", () => shutdown("SIGINT"));
186
- process.on("SIGTERM", () => shutdown("SIGTERM"));
172
+ process.on('SIGINT', () => shutdown('SIGINT'));
173
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
187
174
 
188
- phase = "CONNECTED";
175
+ phase = 'CONNECTED';
189
176
  const transport = new StdioServerTransport();
190
177
  await server.connect(transport);
191
178
 
192
179
  setTimeout(() => {
193
- import("node:child_process")
180
+ import('node:child_process')
194
181
  .then(({ execSync }) => {
195
182
  try {
196
- const latest = execSync("npm view context-vault version", {
197
- encoding: "utf-8",
183
+ const latest = execSync('npm view context-vault version', {
184
+ encoding: 'utf-8',
198
185
  timeout: 5000,
199
- stdio: ["pipe", "pipe", "pipe"],
186
+ stdio: ['pipe', 'pipe', 'pipe'],
200
187
  }).trim();
201
188
  if (latest && latest !== pkg.version) {
202
189
  console.error(
203
- `[context-vault] Update available: v${pkg.version} → v${latest}. Run: context-vault update`,
190
+ `[context-vault] Update available: v${pkg.version} → v${latest}. Run: context-vault update`
204
191
  );
205
192
  }
206
193
  } catch {}
207
194
  })
208
195
  .catch(() => {});
209
196
  }, 3000);
210
- } catch (err) {
211
- const dataDir = config?.dataDir || join(homedir(), ".context-mcp");
197
+ } catch (rawErr) {
198
+ const err = rawErr as Error;
199
+ const dataDir = config?.dataDir || join(homedir(), '.context-mcp');
212
200
 
213
201
  const logEntry = {
214
202
  timestamp: new Date().toISOString(),
215
- error_type: err.constructor?.name || "Error",
203
+ error_type: (err as any).constructor?.name || 'Error',
216
204
  message: err.message,
217
205
  node_version: process.version,
218
206
  platform: process.platform,
@@ -224,59 +212,51 @@ async function main() {
224
212
  try {
225
213
  mkdirSync(dataDir, { recursive: true });
226
214
  writeFileSync(
227
- join(dataDir, ".last-error"),
228
- `${logEntry.timestamp} [${phase}] ${err.message}`,
215
+ join(dataDir, '.last-error'),
216
+ `${logEntry.timestamp} [${phase}] ${err.message}`
229
217
  );
230
218
  } catch {}
231
219
 
232
220
  sendTelemetryEvent(config, {
233
- event: "startup_error",
221
+ event: 'startup_error',
234
222
  code: phase,
235
223
  tool: null,
236
224
  cv_version: pkg.version,
237
225
  });
238
226
 
239
- if (err instanceof NativeModuleError) {
240
- console.error("");
241
- console.error(
242
- "╔══════════════════════════════════════════════════════════════╗",
243
- );
244
- console.error(
245
- "║ context-vault: Native Module Error ║",
246
- );
247
- console.error(
248
- "╚══════════════════════════════════════════════════════════════╝",
249
- );
250
- console.error("");
227
+ if (rawErr instanceof NativeModuleError) {
228
+ console.error('');
229
+ console.error('╔══════════════════════════════════════════════════════════════╗');
230
+ console.error('║ context-vault: Native Module Error ║');
231
+ console.error('╚══════════════════════════════════════════════════════════════╝');
232
+ console.error('');
251
233
  console.error(err.message);
252
- console.error("");
234
+ console.error('');
253
235
  console.error(` Node.js path: ${process.execPath}`);
254
236
  console.error(` Node.js version: ${process.version}`);
255
- console.error(` Error log: ${join(dataDir, "error.log")}`);
256
- console.error("");
237
+ console.error(` Error log: ${join(dataDir, 'error.log')}`);
238
+ console.error('');
257
239
  process.exit(78);
258
240
  }
259
241
 
260
- console.error(
261
- `[context-vault] Fatal error during ${phase} phase: ${err.message}`,
262
- );
263
- console.error(`[context-vault] Error log: ${join(dataDir, "error.log")}`);
264
- if (phase === "DB") {
242
+ console.error(`[context-vault] Fatal error during ${phase} phase: ${err.message}`);
243
+ console.error(`[context-vault] Error log: ${join(dataDir, 'error.log')}`);
244
+ if (phase === 'DB') {
265
245
  console.error(
266
- `[context-vault] Try deleting the DB file and restarting: rm "${config?.dbPath || "vault.db"}"`,
246
+ `[context-vault] Try deleting the DB file and restarting: rm "${config?.dbPath || 'vault.db'}"`
267
247
  );
268
248
  }
269
249
  process.exit(1);
270
250
  }
271
251
  }
272
252
 
273
- process.on("uncaughtException", (err) => {
274
- const dataDir = join(homedir(), ".context-mcp");
253
+ process.on('uncaughtException', (err) => {
254
+ const dataDir = join(homedir(), '.context-mcp');
275
255
  const logEntry = {
276
256
  timestamp: new Date().toISOString(),
277
- error_type: "uncaughtException",
257
+ error_type: 'uncaughtException',
278
258
  message: err.message,
279
- stack: err.stack?.split("\n").slice(0, 5).join(" | "),
259
+ stack: err.stack?.split('\n').slice(0, 5).join(' | '),
280
260
  node_version: process.version,
281
261
  platform: process.platform,
282
262
  arch: process.arch,
@@ -284,17 +264,17 @@ process.on("uncaughtException", (err) => {
284
264
  };
285
265
  appendErrorLog(dataDir, logEntry);
286
266
  console.error(`[context-vault] Uncaught exception: ${err.message}`);
287
- console.error(`[context-vault] Error log: ${join(dataDir, "error.log")}`);
267
+ console.error(`[context-vault] Error log: ${join(dataDir, 'error.log')}`);
288
268
  console.error(`[context-vault] Run: context-vault doctor`);
289
269
  process.exit(1);
290
270
  });
291
271
 
292
- process.on("unhandledRejection", (reason) => {
293
- const dataDir = join(homedir(), ".context-mcp");
272
+ process.on('unhandledRejection', (reason) => {
273
+ const dataDir = join(homedir(), '.context-mcp');
294
274
  const message = reason instanceof Error ? reason.message : String(reason);
295
275
  const logEntry = {
296
276
  timestamp: new Date().toISOString(),
297
- error_type: "unhandledRejection",
277
+ error_type: 'unhandledRejection',
298
278
  message,
299
279
  node_version: process.version,
300
280
  platform: process.platform,
@@ -303,7 +283,7 @@ process.on("unhandledRejection", (reason) => {
303
283
  };
304
284
  appendErrorLog(dataDir, logEntry);
305
285
  console.error(`[context-vault] Unhandled rejection: ${message}`);
306
- console.error(`[context-vault] Error log: ${join(dataDir, "error.log")}`);
286
+ console.error(`[context-vault] Error log: ${join(dataDir, 'error.log')}`);
307
287
  console.error(`[context-vault] Run: context-vault doctor`);
308
288
  process.exit(1);
309
289
  });