simple-memory-mcp 1.1.3
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/LICENSE +21 -0
- package/README.md +742 -0
- package/dist/cli/arg-parser.d.ts +9 -0
- package/dist/cli/arg-parser.d.ts.map +1 -0
- package/dist/cli/arg-parser.js +68 -0
- package/dist/cli/arg-parser.js.map +1 -0
- package/dist/cli/help-generator.d.ts +8 -0
- package/dist/cli/help-generator.d.ts.map +1 -0
- package/dist/cli/help-generator.js +89 -0
- package/dist/cli/help-generator.js.map +1 -0
- package/dist/cli/index.d.ts +27 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +56 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/query-builder.d.ts +8 -0
- package/dist/cli/query-builder.d.ts.map +1 -0
- package/dist/cli/query-builder.js +63 -0
- package/dist/cli/query-builder.js.map +1 -0
- package/dist/cli/shortcuts-config.d.ts +26 -0
- package/dist/cli/shortcuts-config.d.ts.map +1 -0
- package/dist/cli/shortcuts-config.js +94 -0
- package/dist/cli/shortcuts-config.js.map +1 -0
- package/dist/graphql/resolvers.d.ts +101 -0
- package/dist/graphql/resolvers.d.ts.map +1 -0
- package/dist/graphql/resolvers.js +98 -0
- package/dist/graphql/resolvers.js.map +1 -0
- package/dist/graphql/schema.d.ts +13 -0
- package/dist/graphql/schema.d.ts.map +1 -0
- package/dist/graphql/schema.js +314 -0
- package/dist/graphql/schema.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +573 -0
- package/dist/index.js.map +1 -0
- package/dist/services/backup-service.d.ts +57 -0
- package/dist/services/backup-service.d.ts.map +1 -0
- package/dist/services/backup-service.js +191 -0
- package/dist/services/backup-service.js.map +1 -0
- package/dist/services/database-optimizer.d.ts +15 -0
- package/dist/services/database-optimizer.d.ts.map +1 -0
- package/dist/services/database-optimizer.js +45 -0
- package/dist/services/database-optimizer.js.map +1 -0
- package/dist/services/memory-service.d.ts +126 -0
- package/dist/services/memory-service.d.ts.map +1 -0
- package/dist/services/memory-service.js +862 -0
- package/dist/services/memory-service.js.map +1 -0
- package/dist/services/migrations.d.ts +17 -0
- package/dist/services/migrations.d.ts.map +1 -0
- package/dist/services/migrations.js +273 -0
- package/dist/services/migrations.js.map +1 -0
- package/dist/tests/backup-export-test.d.ts +2 -0
- package/dist/tests/backup-export-test.d.ts.map +1 -0
- package/dist/tests/backup-export-test.js +162 -0
- package/dist/tests/backup-export-test.js.map +1 -0
- package/dist/tests/backup-test.d.ts +14 -0
- package/dist/tests/backup-test.d.ts.map +1 -0
- package/dist/tests/backup-test.js +209 -0
- package/dist/tests/backup-test.js.map +1 -0
- package/dist/tests/export-import-test.d.ts +15 -0
- package/dist/tests/export-import-test.d.ts.map +1 -0
- package/dist/tests/export-import-test.js +227 -0
- package/dist/tests/export-import-test.js.map +1 -0
- package/dist/tests/graphql-comprehensive-test.d.ts +6 -0
- package/dist/tests/graphql-comprehensive-test.d.ts.map +1 -0
- package/dist/tests/graphql-comprehensive-test.js +342 -0
- package/dist/tests/graphql-comprehensive-test.js.map +1 -0
- package/dist/tests/graphql-performance-test.d.ts +6 -0
- package/dist/tests/graphql-performance-test.d.ts.map +1 -0
- package/dist/tests/graphql-performance-test.js +141 -0
- package/dist/tests/graphql-performance-test.js.map +1 -0
- package/dist/tests/graphql-test.d.ts +5 -0
- package/dist/tests/graphql-test.d.ts.map +1 -0
- package/dist/tests/graphql-test.js +47 -0
- package/dist/tests/graphql-test.js.map +1 -0
- package/dist/tests/memory-server-tests.d.ts +7 -0
- package/dist/tests/memory-server-tests.d.ts.map +1 -0
- package/dist/tests/memory-server-tests.js +466 -0
- package/dist/tests/memory-server-tests.js.map +1 -0
- package/dist/tests/migration-test.d.ts +2 -0
- package/dist/tests/migration-test.d.ts.map +1 -0
- package/dist/tests/migration-test.js +270 -0
- package/dist/tests/migration-test.js.map +1 -0
- package/dist/tests/performance-benchmark.d.ts +7 -0
- package/dist/tests/performance-benchmark.d.ts.map +1 -0
- package/dist/tests/performance-benchmark.js +234 -0
- package/dist/tests/performance-benchmark.js.map +1 -0
- package/dist/tests/performance-test.d.ts +3 -0
- package/dist/tests/performance-test.d.ts.map +1 -0
- package/dist/tests/performance-test.js +61 -0
- package/dist/tests/performance-test.js.map +1 -0
- package/dist/tests/time-range-test.d.ts +7 -0
- package/dist/tests/time-range-test.d.ts.map +1 -0
- package/dist/tests/time-range-test.js +169 -0
- package/dist/tests/time-range-test.js.map +1 -0
- package/dist/tools/delete-memory/cli-parser.d.ts +2 -0
- package/dist/tools/delete-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/delete-memory/cli-parser.js +13 -0
- package/dist/tools/delete-memory/cli-parser.js.map +1 -0
- package/dist/tools/delete-memory/executor.d.ts +13 -0
- package/dist/tools/delete-memory/executor.d.ts.map +1 -0
- package/dist/tools/delete-memory/executor.js +40 -0
- package/dist/tools/delete-memory/executor.js.map +1 -0
- package/dist/tools/delete-memory/index.d.ts +3 -0
- package/dist/tools/delete-memory/index.d.ts.map +1 -0
- package/dist/tools/delete-memory/index.js +24 -0
- package/dist/tools/delete-memory/index.js.map +1 -0
- package/dist/tools/export-memory/cli-parser.d.ts +2 -0
- package/dist/tools/export-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/export-memory/cli-parser.js +34 -0
- package/dist/tools/export-memory/cli-parser.js.map +1 -0
- package/dist/tools/export-memory/executor.d.ts +10 -0
- package/dist/tools/export-memory/executor.d.ts.map +1 -0
- package/dist/tools/export-memory/executor.js +41 -0
- package/dist/tools/export-memory/executor.js.map +1 -0
- package/dist/tools/export-memory/index.d.ts +4 -0
- package/dist/tools/export-memory/index.d.ts.map +1 -0
- package/dist/tools/export-memory/index.js +99 -0
- package/dist/tools/export-memory/index.js.map +1 -0
- package/dist/tools/import-memory/cli-parser.d.ts +2 -0
- package/dist/tools/import-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/import-memory/cli-parser.js +25 -0
- package/dist/tools/import-memory/cli-parser.js.map +1 -0
- package/dist/tools/import-memory/executor.d.ts +8 -0
- package/dist/tools/import-memory/executor.d.ts.map +1 -0
- package/dist/tools/import-memory/executor.js +31 -0
- package/dist/tools/import-memory/executor.js.map +1 -0
- package/dist/tools/import-memory/index.d.ts +4 -0
- package/dist/tools/import-memory/index.d.ts.map +1 -0
- package/dist/tools/import-memory/index.js +70 -0
- package/dist/tools/import-memory/index.js.map +1 -0
- package/dist/tools/index.d.ts +14 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +48 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/memory-graphql/cli-parser.d.ts +6 -0
- package/dist/tools/memory-graphql/cli-parser.d.ts.map +1 -0
- package/dist/tools/memory-graphql/cli-parser.js +24 -0
- package/dist/tools/memory-graphql/cli-parser.js.map +1 -0
- package/dist/tools/memory-graphql/executor.d.ts +18 -0
- package/dist/tools/memory-graphql/executor.d.ts.map +1 -0
- package/dist/tools/memory-graphql/executor.js +53 -0
- package/dist/tools/memory-graphql/executor.js.map +1 -0
- package/dist/tools/memory-graphql/index.d.ts +3 -0
- package/dist/tools/memory-graphql/index.d.ts.map +1 -0
- package/dist/tools/memory-graphql/index.js +73 -0
- package/dist/tools/memory-graphql/index.js.map +1 -0
- package/dist/tools/memory-stats/cli-parser.d.ts +2 -0
- package/dist/tools/memory-stats/cli-parser.d.ts.map +1 -0
- package/dist/tools/memory-stats/cli-parser.js +8 -0
- package/dist/tools/memory-stats/cli-parser.js.map +1 -0
- package/dist/tools/memory-stats/executor.d.ts +4 -0
- package/dist/tools/memory-stats/executor.d.ts.map +1 -0
- package/dist/tools/memory-stats/executor.js +4 -0
- package/dist/tools/memory-stats/executor.js.map +1 -0
- package/dist/tools/memory-stats/index.d.ts +3 -0
- package/dist/tools/memory-stats/index.d.ts.map +1 -0
- package/dist/tools/memory-stats/index.js +15 -0
- package/dist/tools/memory-stats/index.js.map +1 -0
- package/dist/tools/search-memory/cli-parser.d.ts +2 -0
- package/dist/tools/search-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/search-memory/cli-parser.js +56 -0
- package/dist/tools/search-memory/cli-parser.js.map +1 -0
- package/dist/tools/search-memory/executor.d.ts +36 -0
- package/dist/tools/search-memory/executor.d.ts.map +1 -0
- package/dist/tools/search-memory/executor.js +83 -0
- package/dist/tools/search-memory/executor.js.map +1 -0
- package/dist/tools/search-memory/index.d.ts +3 -0
- package/dist/tools/search-memory/index.d.ts.map +1 -0
- package/dist/tools/search-memory/index.js +89 -0
- package/dist/tools/search-memory/index.js.map +1 -0
- package/dist/tools/store-memory/cli-parser.d.ts +2 -0
- package/dist/tools/store-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/store-memory/cli-parser.js +21 -0
- package/dist/tools/store-memory/cli-parser.js.map +1 -0
- package/dist/tools/store-memory/executor.d.ts +16 -0
- package/dist/tools/store-memory/executor.d.ts.map +1 -0
- package/dist/tools/store-memory/executor.js +100 -0
- package/dist/tools/store-memory/executor.js.map +1 -0
- package/dist/tools/store-memory/index.d.ts +3 -0
- package/dist/tools/store-memory/index.d.ts.map +1 -0
- package/dist/tools/store-memory/index.js +68 -0
- package/dist/tools/store-memory/index.js.map +1 -0
- package/dist/tools/sync-memory/cli-parser.d.ts +1 -0
- package/dist/tools/sync-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/sync-memory/cli-parser.js +2 -0
- package/dist/tools/sync-memory/cli-parser.js.map +1 -0
- package/dist/tools/sync-memory/executor.d.ts +1 -0
- package/dist/tools/sync-memory/executor.d.ts.map +1 -0
- package/dist/tools/sync-memory/executor.js +2 -0
- package/dist/tools/sync-memory/executor.js.map +1 -0
- package/dist/tools/sync-memory/index.d.ts +1 -0
- package/dist/tools/sync-memory/index.d.ts.map +1 -0
- package/dist/tools/sync-memory/index.js +2 -0
- package/dist/tools/sync-memory/index.js.map +1 -0
- package/dist/tools/update-memory/cli-parser.d.ts +2 -0
- package/dist/tools/update-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/update-memory/cli-parser.js +17 -0
- package/dist/tools/update-memory/cli-parser.js.map +1 -0
- package/dist/tools/update-memory/executor.d.ts +16 -0
- package/dist/tools/update-memory/executor.d.ts.map +1 -0
- package/dist/tools/update-memory/executor.js +59 -0
- package/dist/tools/update-memory/executor.js.map +1 -0
- package/dist/tools/update-memory/index.d.ts +3 -0
- package/dist/tools/update-memory/index.d.ts.map +1 -0
- package/dist/tools/update-memory/index.js +30 -0
- package/dist/tools/update-memory/index.js.map +1 -0
- package/dist/transports/streamable-http.d.ts +38 -0
- package/dist/transports/streamable-http.d.ts.map +1 -0
- package/dist/transports/streamable-http.js +209 -0
- package/dist/transports/streamable-http.js.map +1 -0
- package/dist/types/tools.d.ts +79 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +3 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/cli-parser.d.ts +12 -0
- package/dist/utils/cli-parser.d.ts.map +1 -0
- package/dist/utils/cli-parser.js +43 -0
- package/dist/utils/cli-parser.js.map +1 -0
- package/dist/utils/config.d.ts +95 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +176 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/db-integrity-check.d.ts +22 -0
- package/dist/utils/db-integrity-check.d.ts.map +1 -0
- package/dist/utils/db-integrity-check.js +69 -0
- package/dist/utils/db-integrity-check.js.map +1 -0
- package/dist/utils/debug.d.ts +25 -0
- package/dist/utils/debug.d.ts.map +1 -0
- package/dist/utils/debug.js +67 -0
- package/dist/utils/debug.js.map +1 -0
- package/dist/utils/help-generator.d.ts +18 -0
- package/dist/utils/help-generator.d.ts.map +1 -0
- package/dist/utils/help-generator.js +81 -0
- package/dist/utils/help-generator.js.map +1 -0
- package/dist/utils/json-parser.d.ts +12 -0
- package/dist/utils/json-parser.d.ts.map +1 -0
- package/dist/utils/json-parser.js +52 -0
- package/dist/utils/json-parser.js.map +1 -0
- package/dist/utils/mcp-config.d.ts +12 -0
- package/dist/utils/mcp-config.d.ts.map +1 -0
- package/dist/utils/mcp-config.js +64 -0
- package/dist/utils/mcp-config.js.map +1 -0
- package/dist/web-server.d.ts +3 -0
- package/dist/web-server.d.ts.map +1 -0
- package/dist/web-server.js +265 -0
- package/dist/web-server.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
interface IntegrityCheckResult {
|
|
2
|
+
totalMemories: number;
|
|
3
|
+
orphanedHashIndexes: number;
|
|
4
|
+
missingHashIndexes: number;
|
|
5
|
+
corruptedHashes: number;
|
|
6
|
+
orphanedMemories: Array<{
|
|
7
|
+
id: number;
|
|
8
|
+
hash: string;
|
|
9
|
+
content: string;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Check database integrity for hash index corruption
|
|
14
|
+
* This helps diagnose why hash lookups fail while data exists
|
|
15
|
+
*/
|
|
16
|
+
export declare function checkDatabaseIntegrity(dbPath: string): IntegrityCheckResult;
|
|
17
|
+
/**
|
|
18
|
+
* Rebuild hash index (REINDEX)
|
|
19
|
+
*/
|
|
20
|
+
export declare function rebuildHashIndex(dbPath: string): void;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=db-integrity-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-integrity-check.d.ts","sourceRoot":"","sources":["../../src/utils/db-integrity-check.ts"],"names":[],"mappings":"AAGA,UAAU,oBAAoB;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,KAAK,CAAC;QACtB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAwD3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAUrD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import { createHash } from 'crypto';
|
|
3
|
+
/**
|
|
4
|
+
* Check database integrity for hash index corruption
|
|
5
|
+
* This helps diagnose why hash lookups fail while data exists
|
|
6
|
+
*/
|
|
7
|
+
export function checkDatabaseIntegrity(dbPath) {
|
|
8
|
+
const db = new Database(dbPath);
|
|
9
|
+
const result = {
|
|
10
|
+
totalMemories: 0,
|
|
11
|
+
orphanedHashIndexes: 0,
|
|
12
|
+
missingHashIndexes: 0,
|
|
13
|
+
corruptedHashes: 0,
|
|
14
|
+
orphanedMemories: []
|
|
15
|
+
};
|
|
16
|
+
try {
|
|
17
|
+
// Get all memories
|
|
18
|
+
const allMemories = db.prepare('SELECT id, hash, content FROM memories').all();
|
|
19
|
+
result.totalMemories = allMemories.length;
|
|
20
|
+
for (const memory of allMemories) {
|
|
21
|
+
// Check 1: Can we find it via hash index lookup?
|
|
22
|
+
const indexedLookup = db.prepare('SELECT id FROM memories WHERE hash = ?').get(memory.hash);
|
|
23
|
+
// Check 2: Can we find it via full table scan?
|
|
24
|
+
const scanLookup = db.prepare('SELECT id FROM memories WHERE +hash = ?').get(memory.hash);
|
|
25
|
+
// Check 3: Does the hash match the content?
|
|
26
|
+
const computedHash = createHash('md5').update(memory.content).digest('hex');
|
|
27
|
+
if (computedHash !== memory.hash) {
|
|
28
|
+
result.corruptedHashes++;
|
|
29
|
+
result.orphanedMemories.push({
|
|
30
|
+
id: memory.id,
|
|
31
|
+
hash: memory.hash,
|
|
32
|
+
content: memory.content.substring(0, 100) + '...'
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
else if (!indexedLookup && scanLookup) {
|
|
36
|
+
// Hash is correct but index lookup fails - this is hash index corruption
|
|
37
|
+
result.orphanedHashIndexes++;
|
|
38
|
+
result.orphanedMemories.push({
|
|
39
|
+
id: memory.id,
|
|
40
|
+
hash: memory.hash,
|
|
41
|
+
content: memory.content.substring(0, 100) + '...'
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else if (indexedLookup && !scanLookup) {
|
|
45
|
+
// Index works but scan doesn't - very strange, shouldn't happen
|
|
46
|
+
result.missingHashIndexes++;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
db.close();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Rebuild hash index (REINDEX)
|
|
57
|
+
*/
|
|
58
|
+
export function rebuildHashIndex(dbPath) {
|
|
59
|
+
const db = new Database(dbPath);
|
|
60
|
+
try {
|
|
61
|
+
console.log('Rebuilding hash index...');
|
|
62
|
+
db.prepare('REINDEX idx_memories_hash').run();
|
|
63
|
+
console.log('✓ Hash index rebuilt successfully');
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
db.close();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=db-integrity-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-integrity-check.js","sourceRoot":"","sources":["../../src/utils/db-integrity-check.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAcpC;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc;IACnD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEhC,MAAM,MAAM,GAAyB;QACnC,aAAa,EAAE,CAAC;QAChB,mBAAmB,EAAE,CAAC;QACtB,kBAAkB,EAAE,CAAC;QACrB,eAAe,EAAE,CAAC;QAClB,gBAAgB,EAAE,EAAE;KACrB,CAAC;IAEF,IAAI,CAAC;QACH,mBAAmB;QACnB,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,EAI1E,CAAC;QAEH,MAAM,CAAC,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC;QAE1C,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YACjC,iDAAiD;YACjD,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;YAEnG,+CAA+C;YAC/C,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;YAEjG,4CAA4C;YAC5C,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAE5E,IAAI,YAAY,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjC,MAAM,CAAC,eAAe,EAAE,CAAC;gBACzB,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBAC3B,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK;iBAClD,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,CAAC,aAAa,IAAI,UAAU,EAAE,CAAC;gBACxC,yEAAyE;gBACzE,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAC7B,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBAC3B,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK;iBAClD,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,aAAa,IAAI,CAAC,UAAU,EAAE,CAAC;gBACxC,gEAAgE;gBAChE,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEhC,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main debug logging function
|
|
3
|
+
*/
|
|
4
|
+
export declare function debugLog(message: string, ...args: any[]): void;
|
|
5
|
+
/**
|
|
6
|
+
* Format hash for display (first 8 chars + ellipsis)
|
|
7
|
+
*/
|
|
8
|
+
export declare function formatHash(hash: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Debug log with hash formatting
|
|
11
|
+
*/
|
|
12
|
+
export declare function debugLogHash(message: string, hash: string, ...args: any[]): void;
|
|
13
|
+
/**
|
|
14
|
+
* Debug log with multiple hash formatting
|
|
15
|
+
*/
|
|
16
|
+
export declare function debugLogHashes(message: string, ...hashes: string[]): void;
|
|
17
|
+
export declare function debugToolCall(name: string, args: any): void;
|
|
18
|
+
/**
|
|
19
|
+
* Format timestamp for filenames
|
|
20
|
+
* Converts ISO timestamp to filesystem-safe format: YYYY-MM-DD_HH-MM-SS
|
|
21
|
+
* Example: 2025-01-15T14:30:45.123Z -> 2025-01-15_14-30-45
|
|
22
|
+
*/
|
|
23
|
+
export declare function formatTimestampForFilename(date?: Date): string;
|
|
24
|
+
export declare const debugMCP: typeof debugLog;
|
|
25
|
+
//# sourceMappingURL=debug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,QAMvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,QAIzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,QAKlE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAOpD;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAK1E;AAGD,eAAO,MAAM,QAAQ,iBAAW,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// Debug logging utilities
|
|
2
|
+
/**
|
|
3
|
+
* Check if debug logging is enabled
|
|
4
|
+
* Respects MEMORY_DEBUG=false to suppress output in CLI mode
|
|
5
|
+
*/
|
|
6
|
+
function isDebugEnabled() {
|
|
7
|
+
// Explicitly disabled (CLI mode sets this)
|
|
8
|
+
if (process.env.MEMORY_DEBUG === 'false') {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
return process.env.DEBUG === 'true' || process.argv.length > 2;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Main debug logging function
|
|
15
|
+
*/
|
|
16
|
+
export function debugLog(message, ...args) {
|
|
17
|
+
// Always use stderr for debug output
|
|
18
|
+
// Check for DEBUG env var or CLI mode
|
|
19
|
+
if (isDebugEnabled()) {
|
|
20
|
+
console.error(`[DEBUG] ${message}`, ...args);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Format hash for display (first 8 chars + ellipsis)
|
|
25
|
+
*/
|
|
26
|
+
export function formatHash(hash) {
|
|
27
|
+
return hash.length > 8 ? hash.substring(0, 8) + '...' : hash;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Debug log with hash formatting
|
|
31
|
+
*/
|
|
32
|
+
export function debugLogHash(message, hash, ...args) {
|
|
33
|
+
if (isDebugEnabled()) {
|
|
34
|
+
debugLog(message, formatHash(hash), ...args);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Debug log with multiple hash formatting
|
|
39
|
+
*/
|
|
40
|
+
export function debugLogHashes(message, ...hashes) {
|
|
41
|
+
if (isDebugEnabled()) {
|
|
42
|
+
const formatted = hashes.map(formatHash).join(', ');
|
|
43
|
+
debugLog(message, formatted);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function debugToolCall(name, args) {
|
|
47
|
+
// Only log in CLI mode, not MCP mode
|
|
48
|
+
if (process.argv.length > 2) {
|
|
49
|
+
debugLog(`MCP Tool called: ${name}`);
|
|
50
|
+
debugLog(`Arguments:`, JSON.stringify(args, null, 2));
|
|
51
|
+
debugLog(`Timestamp:`, new Date().toISOString());
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Format timestamp for filenames
|
|
56
|
+
* Converts ISO timestamp to filesystem-safe format: YYYY-MM-DD_HH-MM-SS
|
|
57
|
+
* Example: 2025-01-15T14:30:45.123Z -> 2025-01-15_14-30-45
|
|
58
|
+
*/
|
|
59
|
+
export function formatTimestampForFilename(date = new Date()) {
|
|
60
|
+
return date.toISOString()
|
|
61
|
+
.replace(/[:.]/g, '-') // Replace colons and dots with dashes
|
|
62
|
+
.replace('T', '_') // Replace T with underscore for readability
|
|
63
|
+
.slice(0, -5); // Remove milliseconds and Z suffix
|
|
64
|
+
}
|
|
65
|
+
// Alias for compatibility
|
|
66
|
+
export const debugMCP = debugLog;
|
|
67
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAE1B;;;GAGG;AACH,SAAS,cAAc;IACrB,2CAA2C;IAC3C,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,GAAG,IAAW;IACtD,qCAAqC;IACrC,sCAAsC;IACtC,IAAI,cAAc,EAAE,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,WAAW,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,IAAY,EAAE,GAAG,IAAW;IACxE,IAAI,cAAc,EAAE,EAAE,CAAC;QACrB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,GAAG,MAAgB;IACjE,IAAI,cAAc,EAAE,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,IAAS;IACnD,qCAAqC;IACrC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,QAAQ,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;QACrC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACtD,QAAQ,CAAC,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAa,IAAI,IAAI,EAAE;IAChE,OAAO,IAAI,CAAC,WAAW,EAAE;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAE,sCAAsC;SAC7D,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAO,4CAA4C;SACpE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAU,mCAAmC;AAC/D,CAAC;AAED,0BAA0B;AAC1B,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Help generator utility - auto-generates CLI help from tool schemas
|
|
3
|
+
*/
|
|
4
|
+
import type { ToolDefinition } from '../types/tools.js';
|
|
5
|
+
export interface HelpOptions {
|
|
6
|
+
includeExamples?: boolean;
|
|
7
|
+
includeDefaults?: boolean;
|
|
8
|
+
width?: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Generate help text from a tool definition schema
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateHelpFromSchema(toolDef: ToolDefinition, examples?: string[], options?: HelpOptions): string;
|
|
14
|
+
/**
|
|
15
|
+
* Generate CLI parser function that uses schema-based help
|
|
16
|
+
*/
|
|
17
|
+
export declare function createSchemaBasedCliParser(toolDef: ToolDefinition, examples?: string[], customParser?: (parsed: any) => any): (args: string[]) => any;
|
|
18
|
+
//# sourceMappingURL=help-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-generator.d.ts","sourceRoot":"","sources":["../../src/utils/help-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,EACnB,OAAO,GAAE,WAAgB,GACxB,MAAM,CAmER;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,cAAc,EACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,EACnB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,IAE3B,MAAM,MAAM,EAAE,SAcvB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Help generator utility - auto-generates CLI help from tool schemas
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Generate help text from a tool definition schema
|
|
6
|
+
*/
|
|
7
|
+
export function generateHelpFromSchema(toolDef, examples, options = {}) {
|
|
8
|
+
const { includeExamples = true, includeDefaults = true, width = 80 } = options;
|
|
9
|
+
let help = `\nUsage: ${toolDef.name} [options]\n\n`;
|
|
10
|
+
help += `${toolDef.description}\n\n`;
|
|
11
|
+
// Generate options from schema properties
|
|
12
|
+
if (toolDef.inputSchema.properties && Object.keys(toolDef.inputSchema.properties).length > 0) {
|
|
13
|
+
help += `Options:\n`;
|
|
14
|
+
for (const [propName, propDef] of Object.entries(toolDef.inputSchema.properties)) {
|
|
15
|
+
const isRequired = toolDef.inputSchema.required?.includes(propName) ?? false;
|
|
16
|
+
const flagName = `--${propName.replace(/([A-Z])/g, '-$1').toLowerCase()}`;
|
|
17
|
+
let line = ` ${flagName}`;
|
|
18
|
+
// Add type hint
|
|
19
|
+
if (propDef.type === 'string') {
|
|
20
|
+
line += ` <${propDef.type}>`;
|
|
21
|
+
}
|
|
22
|
+
else if (propDef.type === 'number') {
|
|
23
|
+
line += ` <number>`;
|
|
24
|
+
}
|
|
25
|
+
else if (propDef.type === 'array') {
|
|
26
|
+
line += ` <list>`;
|
|
27
|
+
}
|
|
28
|
+
// Pad to align descriptions
|
|
29
|
+
line = line.padEnd(25);
|
|
30
|
+
// Add description
|
|
31
|
+
if (propDef.description) {
|
|
32
|
+
line += propDef.description;
|
|
33
|
+
}
|
|
34
|
+
// Add required indicator
|
|
35
|
+
if (isRequired) {
|
|
36
|
+
line += ' (required)';
|
|
37
|
+
}
|
|
38
|
+
// Add default value
|
|
39
|
+
if (includeDefaults && propDef.default !== undefined) {
|
|
40
|
+
line += ` (default: ${propDef.default})`;
|
|
41
|
+
}
|
|
42
|
+
// Add constraints
|
|
43
|
+
if (propDef.minimum !== undefined || propDef.maximum !== undefined) {
|
|
44
|
+
const constraints = [];
|
|
45
|
+
if (propDef.minimum !== undefined)
|
|
46
|
+
constraints.push(`min: ${propDef.minimum}`);
|
|
47
|
+
if (propDef.maximum !== undefined)
|
|
48
|
+
constraints.push(`max: ${propDef.maximum}`);
|
|
49
|
+
line += ` (${constraints.join(', ')})`;
|
|
50
|
+
}
|
|
51
|
+
help += `${line}\n`;
|
|
52
|
+
}
|
|
53
|
+
help += ` --help Show this help message\n`;
|
|
54
|
+
help += `\n`;
|
|
55
|
+
}
|
|
56
|
+
// Add examples if provided
|
|
57
|
+
if (includeExamples && examples && examples.length > 0) {
|
|
58
|
+
help += `Examples:\n`;
|
|
59
|
+
examples.forEach(example => {
|
|
60
|
+
help += ` ${example}\n`;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return help;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Generate CLI parser function that uses schema-based help
|
|
67
|
+
*/
|
|
68
|
+
export function createSchemaBasedCliParser(toolDef, examples, customParser) {
|
|
69
|
+
return (args) => {
|
|
70
|
+
// Import here to avoid circular dependencies
|
|
71
|
+
const { parseCommandLineArgs } = require('./cli-parser.js');
|
|
72
|
+
const parsed = parseCommandLineArgs([toolDef.name, ...args]);
|
|
73
|
+
if (parsed.help) {
|
|
74
|
+
console.log(generateHelpFromSchema(toolDef, examples));
|
|
75
|
+
process.exit(0);
|
|
76
|
+
}
|
|
77
|
+
// Apply custom parsing logic if provided
|
|
78
|
+
return customParser ? customParser(parsed) : parsed;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=help-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-generator.js","sourceRoot":"","sources":["../../src/utils/help-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON parsing utilities for CLI output processing
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Parse JSON output from CLI command, handling multi-line formatted JSON
|
|
6
|
+
* and filtering out debug messages
|
|
7
|
+
*
|
|
8
|
+
* @param output - Raw CLI output string
|
|
9
|
+
* @returns Parsed JSON object or null if parsing fails
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseJsonOutput(output: string): any;
|
|
12
|
+
//# sourceMappingURL=json-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-parser.d.ts","sourceRoot":"","sources":["../../src/utils/json-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CA8CnD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON parsing utilities for CLI output processing
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Parse JSON output from CLI command, handling multi-line formatted JSON
|
|
6
|
+
* and filtering out debug messages
|
|
7
|
+
*
|
|
8
|
+
* @param output - Raw CLI output string
|
|
9
|
+
* @returns Parsed JSON object or null if parsing fails
|
|
10
|
+
*/
|
|
11
|
+
export function parseJsonOutput(output) {
|
|
12
|
+
try {
|
|
13
|
+
// Remove debug messages and parse JSON
|
|
14
|
+
const lines = output.split('\n').filter(line => !line.startsWith('[DEBUG]'));
|
|
15
|
+
// Find where JSON starts and ends
|
|
16
|
+
let jsonStartIndex = -1;
|
|
17
|
+
let jsonEndIndex = -1;
|
|
18
|
+
let braceCount = 0;
|
|
19
|
+
for (let i = 0; i < lines.length; i++) {
|
|
20
|
+
const line = lines[i].trim();
|
|
21
|
+
if (line.startsWith('{') && jsonStartIndex === -1) {
|
|
22
|
+
jsonStartIndex = i;
|
|
23
|
+
}
|
|
24
|
+
if (jsonStartIndex >= 0) {
|
|
25
|
+
// Count braces to find the end
|
|
26
|
+
for (const char of line) {
|
|
27
|
+
if (char === '{')
|
|
28
|
+
braceCount++;
|
|
29
|
+
if (char === '}')
|
|
30
|
+
braceCount--;
|
|
31
|
+
}
|
|
32
|
+
if (braceCount === 0) {
|
|
33
|
+
jsonEndIndex = i;
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (jsonStartIndex === -1 || jsonEndIndex === -1) {
|
|
39
|
+
console.error('Failed to find complete JSON in output:', output);
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
// Reconstruct the JSON string
|
|
43
|
+
const jsonLines = lines.slice(jsonStartIndex, jsonEndIndex + 1);
|
|
44
|
+
const jsonString = jsonLines.join('\n');
|
|
45
|
+
return JSON.parse(jsonString);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
console.error('Failed to parse JSON output:', output, 'Error:', error);
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=json-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-parser.js","sourceRoot":"","sources":["../../src/utils/json-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,IAAI,CAAC;QACH,uCAAuC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAC7C,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAC5B,CAAC;QAEF,kCAAkC;QAClC,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC;QACxB,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;QACtB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;gBAClD,cAAc,GAAG,CAAC,CAAC;YACrB,CAAC;YAED,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;gBACxB,+BAA+B;gBAC/B,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;oBACxB,IAAI,IAAI,KAAK,GAAG;wBAAE,UAAU,EAAE,CAAC;oBAC/B,IAAI,IAAI,KAAK,GAAG;wBAAE,UAAU,EAAE,CAAC;gBACjC,CAAC;gBAED,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;oBACrB,YAAY,GAAG,CAAC,CAAC;oBACjB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,cAAc,KAAK,CAAC,CAAC,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,MAAM,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,8BAA8B;QAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface MCPConfigPath {
|
|
2
|
+
name: string;
|
|
3
|
+
path: string;
|
|
4
|
+
exists: boolean;
|
|
5
|
+
matchingServers?: string[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Get potential MCP configuration file paths across multiple clients
|
|
9
|
+
* Returns an array of config paths with their existence status and matching server entries
|
|
10
|
+
*/
|
|
11
|
+
export declare function getMCPConfigPaths(): MCPConfigPath[];
|
|
12
|
+
//# sourceMappingURL=mcp-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../src/utils/mcp-config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AASD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,EAAE,CAmEnD"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
/**
|
|
5
|
+
* Normalize path to use forward slashes for better cross-platform copy/paste
|
|
6
|
+
*/
|
|
7
|
+
function normalizePath(p) {
|
|
8
|
+
return p.replace(/\\/g, '/');
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Get potential MCP configuration file paths across multiple clients
|
|
12
|
+
* Returns an array of config paths with their existence status and matching server entries
|
|
13
|
+
*/
|
|
14
|
+
export function getMCPConfigPaths() {
|
|
15
|
+
const platform = process.platform;
|
|
16
|
+
const home = homedir();
|
|
17
|
+
const paths = [];
|
|
18
|
+
if (platform === 'win32') {
|
|
19
|
+
const appData = process.env.APPDATA || join(home, 'AppData', 'Roaming');
|
|
20
|
+
paths.push({ name: 'VS Code', path: normalizePath(join(appData, 'Code', 'User', 'mcp.json')), exists: false }, { name: 'VS Code Insiders', path: normalizePath(join(appData, 'Code - Insiders', 'User', 'mcp.json')), exists: false }, { name: 'Cursor', path: normalizePath(join(appData, 'Cursor', 'User', 'mcp.json')), exists: false }, { name: 'Claude Desktop', path: normalizePath(join(appData, 'Claude', 'claude_desktop_config.json')), exists: false });
|
|
21
|
+
}
|
|
22
|
+
else if (platform === 'darwin') {
|
|
23
|
+
const appSupport = join(home, 'Library', 'Application Support');
|
|
24
|
+
paths.push({ name: 'VS Code', path: normalizePath(join(appSupport, 'Code', 'User', 'mcp.json')), exists: false }, { name: 'VS Code Insiders', path: normalizePath(join(appSupport, 'Code - Insiders', 'User', 'mcp.json')), exists: false }, { name: 'Cursor', path: normalizePath(join(appSupport, 'Cursor', 'User', 'mcp.json')), exists: false }, { name: 'Claude Desktop', path: normalizePath(join(appSupport, 'Claude', 'claude_desktop_config.json')), exists: false });
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
const config = join(home, '.config');
|
|
28
|
+
paths.push({ name: 'VS Code', path: normalizePath(join(config, 'Code', 'User', 'mcp.json')), exists: false }, { name: 'VS Code Insiders', path: normalizePath(join(config, 'Code - Insiders', 'User', 'mcp.json')), exists: false }, { name: 'Cursor', path: normalizePath(join(config, 'Cursor', 'User', 'mcp.json')), exists: false }, { name: 'Claude Desktop', path: normalizePath(join(config, 'Claude', 'claude_desktop_config.json')), exists: false });
|
|
29
|
+
}
|
|
30
|
+
const currentDb = process.env.MEMORY_DB || 'memory.db';
|
|
31
|
+
// Check which paths exist and find matching server entries
|
|
32
|
+
for (const pathInfo of paths) {
|
|
33
|
+
pathInfo.exists = existsSync(pathInfo.path);
|
|
34
|
+
if (pathInfo.exists) {
|
|
35
|
+
try {
|
|
36
|
+
const content = readFileSync(pathInfo.path, 'utf-8');
|
|
37
|
+
const config = JSON.parse(content);
|
|
38
|
+
const servers = pathInfo.name === 'Claude Desktop' ? config.mcpServers : config.servers;
|
|
39
|
+
if (servers) {
|
|
40
|
+
const matching = [];
|
|
41
|
+
for (const [name, serverConfig] of Object.entries(servers)) {
|
|
42
|
+
if (typeof serverConfig === 'object' && serverConfig !== null) {
|
|
43
|
+
const cmd = serverConfig.command || '';
|
|
44
|
+
if (cmd.includes('simple-memory')) {
|
|
45
|
+
const configDb = serverConfig.env?.MEMORY_DB || 'memory.db';
|
|
46
|
+
if (configDb === currentDb) {
|
|
47
|
+
matching.push(name);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (matching.length > 0) {
|
|
53
|
+
pathInfo.matchingServers = matching;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Ignore parse errors
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return paths;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=mcp-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/utils/mcp-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-server.d.ts","sourceRoot":"","sources":["../src/web-server.ts"],"names":[],"mappings":""}
|