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.
- package/bin/cli.js +1369 -1774
- package/dist/archive.d.ts +23 -0
- package/dist/archive.d.ts.map +1 -0
- package/dist/archive.js +197 -0
- package/dist/archive.js.map +1 -0
- package/dist/consolidation.d.ts +14 -0
- package/dist/consolidation.d.ts.map +1 -0
- package/dist/consolidation.js +59 -0
- package/dist/consolidation.js.map +1 -0
- package/dist/error-log.d.ts +4 -0
- package/dist/error-log.d.ts.map +1 -0
- package/dist/error-log.js +33 -0
- package/dist/error-log.js.map +1 -0
- package/dist/helpers.d.ts +10 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +42 -0
- package/dist/helpers.js.map +1 -0
- package/dist/linking.d.ts +13 -0
- package/dist/linking.d.ts.map +1 -0
- package/dist/linking.js +86 -0
- package/dist/linking.js.map +1 -0
- package/dist/migrate-dirs.d.ts +16 -0
- package/dist/migrate-dirs.d.ts.map +1 -0
- package/dist/migrate-dirs.js +127 -0
- package/dist/migrate-dirs.js.map +1 -0
- package/dist/register-tools.d.ts +3 -0
- package/dist/register-tools.d.ts.map +1 -0
- package/dist/register-tools.js +161 -0
- package/dist/register-tools.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +241 -0
- package/dist/server.js.map +1 -0
- package/dist/status.d.ts +18 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +265 -0
- package/dist/status.js.map +1 -0
- package/dist/telemetry.d.ts +6 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +74 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/temporal.d.ts +9 -0
- package/dist/temporal.d.ts.map +1 -0
- package/dist/temporal.js +76 -0
- package/dist/temporal.js.map +1 -0
- package/dist/tools/clear-context.d.ts +11 -0
- package/dist/tools/clear-context.d.ts.map +1 -0
- package/dist/tools/clear-context.js +28 -0
- package/dist/tools/clear-context.js.map +1 -0
- package/dist/tools/context-status.d.ts +6 -0
- package/dist/tools/context-status.d.ts.map +1 -0
- package/dist/tools/context-status.js +160 -0
- package/dist/tools/context-status.js.map +1 -0
- package/dist/tools/create-snapshot.d.ts +13 -0
- package/dist/tools/create-snapshot.d.ts.map +1 -0
- package/dist/tools/create-snapshot.js +161 -0
- package/dist/tools/create-snapshot.js.map +1 -0
- package/dist/tools/delete-context.d.ts +9 -0
- package/dist/tools/delete-context.d.ts.map +1 -0
- package/dist/tools/delete-context.js +45 -0
- package/dist/tools/delete-context.js.map +1 -0
- package/dist/tools/get-context.d.ts +85 -0
- package/dist/tools/get-context.d.ts.map +1 -0
- package/dist/tools/get-context.js +576 -0
- package/dist/tools/get-context.js.map +1 -0
- package/dist/tools/ingest-project.d.ts +11 -0
- package/dist/tools/ingest-project.d.ts.map +1 -0
- package/dist/tools/ingest-project.js +226 -0
- package/dist/tools/ingest-project.js.map +1 -0
- package/dist/tools/ingest-url.d.ts +11 -0
- package/dist/tools/ingest-url.d.ts.map +1 -0
- package/dist/tools/ingest-url.js +62 -0
- package/dist/tools/ingest-url.js.map +1 -0
- package/dist/tools/list-buckets.d.ts +9 -0
- package/dist/tools/list-buckets.d.ts.map +1 -0
- package/dist/tools/list-buckets.js +76 -0
- package/dist/tools/list-buckets.js.map +1 -0
- package/dist/tools/list-context.d.ts +19 -0
- package/dist/tools/list-context.d.ts.map +1 -0
- package/dist/tools/list-context.js +110 -0
- package/dist/tools/list-context.js.map +1 -0
- package/dist/tools/save-context.d.ts +36 -0
- package/dist/tools/save-context.d.ts.map +1 -0
- package/dist/tools/save-context.js +458 -0
- package/dist/tools/save-context.js.map +1 -0
- package/dist/tools/session-start.d.ts +11 -0
- package/dist/tools/session-start.d.ts.map +1 -0
- package/dist/tools/session-start.js +224 -0
- package/dist/tools/session-start.js.map +1 -0
- package/dist/types.d.ts +37 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/node_modules/@context-vault/core/dist/capture.d.ts +1 -1
- package/node_modules/@context-vault/core/dist/capture.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/capture.js +34 -47
- package/node_modules/@context-vault/core/dist/capture.js.map +1 -1
- package/node_modules/@context-vault/core/dist/categories.js +30 -30
- package/node_modules/@context-vault/core/dist/config.d.ts +1 -1
- package/node_modules/@context-vault/core/dist/config.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/config.js +37 -43
- package/node_modules/@context-vault/core/dist/config.js.map +1 -1
- package/node_modules/@context-vault/core/dist/constants.d.ts +1 -1
- package/node_modules/@context-vault/core/dist/constants.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/constants.js +4 -4
- package/node_modules/@context-vault/core/dist/constants.js.map +1 -1
- package/node_modules/@context-vault/core/dist/db.d.ts +2 -2
- package/node_modules/@context-vault/core/dist/db.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/db.js +21 -20
- package/node_modules/@context-vault/core/dist/db.js.map +1 -1
- package/node_modules/@context-vault/core/dist/embed.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/embed.js +11 -11
- package/node_modules/@context-vault/core/dist/embed.js.map +1 -1
- package/node_modules/@context-vault/core/dist/files.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/files.js +12 -13
- package/node_modules/@context-vault/core/dist/files.js.map +1 -1
- package/node_modules/@context-vault/core/dist/formatters.js +5 -5
- package/node_modules/@context-vault/core/dist/frontmatter.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/frontmatter.js +23 -23
- package/node_modules/@context-vault/core/dist/frontmatter.js.map +1 -1
- package/node_modules/@context-vault/core/dist/index.d.ts +1 -1
- package/node_modules/@context-vault/core/dist/index.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/index.js +58 -46
- package/node_modules/@context-vault/core/dist/index.js.map +1 -1
- package/node_modules/@context-vault/core/dist/ingest-url.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/ingest-url.js +30 -33
- package/node_modules/@context-vault/core/dist/ingest-url.js.map +1 -1
- package/node_modules/@context-vault/core/dist/main.d.ts +13 -13
- package/node_modules/@context-vault/core/dist/main.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/main.js +12 -12
- package/node_modules/@context-vault/core/dist/main.js.map +1 -1
- package/node_modules/@context-vault/core/dist/search.d.ts +1 -1
- package/node_modules/@context-vault/core/dist/search.d.ts.map +1 -1
- package/node_modules/@context-vault/core/dist/search.js +20 -22
- package/node_modules/@context-vault/core/dist/search.js.map +1 -1
- package/node_modules/@context-vault/core/dist/types.d.ts +1 -1
- package/node_modules/@context-vault/core/package.json +1 -1
- package/node_modules/@context-vault/core/src/capture.ts +44 -81
- package/node_modules/@context-vault/core/src/categories.ts +30 -30
- package/node_modules/@context-vault/core/src/config.ts +45 -60
- package/node_modules/@context-vault/core/src/constants.ts +8 -10
- package/node_modules/@context-vault/core/src/db.ts +37 -56
- package/node_modules/@context-vault/core/src/embed.ts +15 -26
- package/node_modules/@context-vault/core/src/files.ts +13 -16
- package/node_modules/@context-vault/core/src/formatters.ts +5 -5
- package/node_modules/@context-vault/core/src/frontmatter.ts +26 -30
- package/node_modules/@context-vault/core/src/index.ts +94 -100
- package/node_modules/@context-vault/core/src/ingest-url.ts +56 -93
- package/node_modules/@context-vault/core/src/main.ts +13 -18
- package/node_modules/@context-vault/core/src/search.ts +34 -56
- package/node_modules/@context-vault/core/src/types.ts +1 -1
- package/package.json +10 -4
- package/scripts/postinstall.js +18 -25
- package/scripts/prepack.js +13 -19
- package/src/archive.ts +244 -0
- package/src/consolidation.ts +78 -0
- package/src/{error-log.js → error-log.ts} +10 -10
- package/src/helpers.ts +61 -0
- package/src/{linking.js → linking.ts} +22 -20
- package/src/migrate-dirs.ts +152 -0
- package/src/register-tools.ts +183 -0
- package/src/{server.js → server.ts} +89 -109
- package/src/{status.js → status.ts} +94 -108
- package/src/telemetry.ts +80 -0
- package/src/{temporal.js → temporal.ts} +29 -33
- package/src/tools/clear-context.ts +41 -0
- package/src/tools/{context-status.js → context-status.ts} +43 -66
- package/src/tools/{create-snapshot.js → create-snapshot.ts} +54 -65
- package/src/tools/delete-context.ts +53 -0
- package/src/tools/{get-context.js → get-context.ts} +142 -205
- package/src/tools/ingest-project.ts +260 -0
- package/src/tools/ingest-url.ts +74 -0
- package/src/tools/{list-buckets.js → list-buckets.ts} +27 -37
- package/src/tools/{list-context.js → list-context.ts} +46 -71
- package/src/tools/{save-context.js → save-context.ts} +148 -204
- package/src/tools/{session-start.js → session-start.ts} +72 -79
- package/src/types.ts +29 -0
- package/src/helpers.js +0 -57
- package/src/register-tools.js +0 -175
- package/src/telemetry.js +0 -80
- package/src/tools/clear-context.js +0 -47
- package/src/tools/delete-context.js +0 -54
- package/src/tools/ingest-project.js +0 -272
- package/src/tools/ingest-url.js +0 -87
|
@@ -1,69 +1,58 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { McpServer } from
|
|
4
|
-
import { StdioServerTransport } from
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
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
|
|
32
|
-
import { registerTools } from
|
|
33
|
-
import { pruneExpired } from
|
|
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 =
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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,
|
|
53
|
+
const markerPath = join(config.vaultDir, '.context-mcp');
|
|
65
54
|
const markerData = existsSync(markerPath)
|
|
66
|
-
? JSON.parse(readFileSync(markerPath,
|
|
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
|
-
) +
|
|
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 =
|
|
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 ?
|
|
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 =
|
|
111
|
+
phase = 'SERVER';
|
|
123
112
|
const server = new McpServer(
|
|
124
|
-
{ name:
|
|
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,
|
|
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(
|
|
150
|
-
db
|
|
135
|
+
if ((db as any).inTransaction) {
|
|
136
|
+
console.error('[context-vault] Rolling back active transaction...');
|
|
137
|
+
db!.exec('ROLLBACK');
|
|
151
138
|
}
|
|
152
|
-
db.pragma(
|
|
153
|
-
db
|
|
154
|
-
console.error(
|
|
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(
|
|
186
|
-
process.on(
|
|
172
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
173
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
187
174
|
|
|
188
|
-
phase =
|
|
175
|
+
phase = 'CONNECTED';
|
|
189
176
|
const transport = new StdioServerTransport();
|
|
190
177
|
await server.connect(transport);
|
|
191
178
|
|
|
192
179
|
setTimeout(() => {
|
|
193
|
-
import(
|
|
180
|
+
import('node:child_process')
|
|
194
181
|
.then(({ execSync }) => {
|
|
195
182
|
try {
|
|
196
|
-
const latest = execSync(
|
|
197
|
-
encoding:
|
|
183
|
+
const latest = execSync('npm view context-vault version', {
|
|
184
|
+
encoding: 'utf-8',
|
|
198
185
|
timeout: 5000,
|
|
199
|
-
stdio: [
|
|
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 (
|
|
211
|
-
const
|
|
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 ||
|
|
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,
|
|
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:
|
|
221
|
+
event: 'startup_error',
|
|
234
222
|
code: phase,
|
|
235
223
|
tool: null,
|
|
236
224
|
cv_version: pkg.version,
|
|
237
225
|
});
|
|
238
226
|
|
|
239
|
-
if (
|
|
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,
|
|
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
|
-
|
|
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 ||
|
|
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(
|
|
274
|
-
const dataDir = join(homedir(),
|
|
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:
|
|
257
|
+
error_type: 'uncaughtException',
|
|
278
258
|
message: err.message,
|
|
279
|
-
stack: err.stack?.split(
|
|
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,
|
|
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(
|
|
293
|
-
const dataDir = join(homedir(),
|
|
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:
|
|
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,
|
|
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
|
});
|