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.
Files changed (247) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +742 -0
  3. package/dist/cli/arg-parser.d.ts +9 -0
  4. package/dist/cli/arg-parser.d.ts.map +1 -0
  5. package/dist/cli/arg-parser.js +68 -0
  6. package/dist/cli/arg-parser.js.map +1 -0
  7. package/dist/cli/help-generator.d.ts +8 -0
  8. package/dist/cli/help-generator.d.ts.map +1 -0
  9. package/dist/cli/help-generator.js +89 -0
  10. package/dist/cli/help-generator.js.map +1 -0
  11. package/dist/cli/index.d.ts +27 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +56 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/cli/query-builder.d.ts +8 -0
  16. package/dist/cli/query-builder.d.ts.map +1 -0
  17. package/dist/cli/query-builder.js +63 -0
  18. package/dist/cli/query-builder.js.map +1 -0
  19. package/dist/cli/shortcuts-config.d.ts +26 -0
  20. package/dist/cli/shortcuts-config.d.ts.map +1 -0
  21. package/dist/cli/shortcuts-config.js +94 -0
  22. package/dist/cli/shortcuts-config.js.map +1 -0
  23. package/dist/graphql/resolvers.d.ts +101 -0
  24. package/dist/graphql/resolvers.d.ts.map +1 -0
  25. package/dist/graphql/resolvers.js +98 -0
  26. package/dist/graphql/resolvers.js.map +1 -0
  27. package/dist/graphql/schema.d.ts +13 -0
  28. package/dist/graphql/schema.d.ts.map +1 -0
  29. package/dist/graphql/schema.js +314 -0
  30. package/dist/graphql/schema.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +573 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/services/backup-service.d.ts +57 -0
  36. package/dist/services/backup-service.d.ts.map +1 -0
  37. package/dist/services/backup-service.js +191 -0
  38. package/dist/services/backup-service.js.map +1 -0
  39. package/dist/services/database-optimizer.d.ts +15 -0
  40. package/dist/services/database-optimizer.d.ts.map +1 -0
  41. package/dist/services/database-optimizer.js +45 -0
  42. package/dist/services/database-optimizer.js.map +1 -0
  43. package/dist/services/memory-service.d.ts +126 -0
  44. package/dist/services/memory-service.d.ts.map +1 -0
  45. package/dist/services/memory-service.js +862 -0
  46. package/dist/services/memory-service.js.map +1 -0
  47. package/dist/services/migrations.d.ts +17 -0
  48. package/dist/services/migrations.d.ts.map +1 -0
  49. package/dist/services/migrations.js +273 -0
  50. package/dist/services/migrations.js.map +1 -0
  51. package/dist/tests/backup-export-test.d.ts +2 -0
  52. package/dist/tests/backup-export-test.d.ts.map +1 -0
  53. package/dist/tests/backup-export-test.js +162 -0
  54. package/dist/tests/backup-export-test.js.map +1 -0
  55. package/dist/tests/backup-test.d.ts +14 -0
  56. package/dist/tests/backup-test.d.ts.map +1 -0
  57. package/dist/tests/backup-test.js +209 -0
  58. package/dist/tests/backup-test.js.map +1 -0
  59. package/dist/tests/export-import-test.d.ts +15 -0
  60. package/dist/tests/export-import-test.d.ts.map +1 -0
  61. package/dist/tests/export-import-test.js +227 -0
  62. package/dist/tests/export-import-test.js.map +1 -0
  63. package/dist/tests/graphql-comprehensive-test.d.ts +6 -0
  64. package/dist/tests/graphql-comprehensive-test.d.ts.map +1 -0
  65. package/dist/tests/graphql-comprehensive-test.js +342 -0
  66. package/dist/tests/graphql-comprehensive-test.js.map +1 -0
  67. package/dist/tests/graphql-performance-test.d.ts +6 -0
  68. package/dist/tests/graphql-performance-test.d.ts.map +1 -0
  69. package/dist/tests/graphql-performance-test.js +141 -0
  70. package/dist/tests/graphql-performance-test.js.map +1 -0
  71. package/dist/tests/graphql-test.d.ts +5 -0
  72. package/dist/tests/graphql-test.d.ts.map +1 -0
  73. package/dist/tests/graphql-test.js +47 -0
  74. package/dist/tests/graphql-test.js.map +1 -0
  75. package/dist/tests/memory-server-tests.d.ts +7 -0
  76. package/dist/tests/memory-server-tests.d.ts.map +1 -0
  77. package/dist/tests/memory-server-tests.js +466 -0
  78. package/dist/tests/memory-server-tests.js.map +1 -0
  79. package/dist/tests/migration-test.d.ts +2 -0
  80. package/dist/tests/migration-test.d.ts.map +1 -0
  81. package/dist/tests/migration-test.js +270 -0
  82. package/dist/tests/migration-test.js.map +1 -0
  83. package/dist/tests/performance-benchmark.d.ts +7 -0
  84. package/dist/tests/performance-benchmark.d.ts.map +1 -0
  85. package/dist/tests/performance-benchmark.js +234 -0
  86. package/dist/tests/performance-benchmark.js.map +1 -0
  87. package/dist/tests/performance-test.d.ts +3 -0
  88. package/dist/tests/performance-test.d.ts.map +1 -0
  89. package/dist/tests/performance-test.js +61 -0
  90. package/dist/tests/performance-test.js.map +1 -0
  91. package/dist/tests/time-range-test.d.ts +7 -0
  92. package/dist/tests/time-range-test.d.ts.map +1 -0
  93. package/dist/tests/time-range-test.js +169 -0
  94. package/dist/tests/time-range-test.js.map +1 -0
  95. package/dist/tools/delete-memory/cli-parser.d.ts +2 -0
  96. package/dist/tools/delete-memory/cli-parser.d.ts.map +1 -0
  97. package/dist/tools/delete-memory/cli-parser.js +13 -0
  98. package/dist/tools/delete-memory/cli-parser.js.map +1 -0
  99. package/dist/tools/delete-memory/executor.d.ts +13 -0
  100. package/dist/tools/delete-memory/executor.d.ts.map +1 -0
  101. package/dist/tools/delete-memory/executor.js +40 -0
  102. package/dist/tools/delete-memory/executor.js.map +1 -0
  103. package/dist/tools/delete-memory/index.d.ts +3 -0
  104. package/dist/tools/delete-memory/index.d.ts.map +1 -0
  105. package/dist/tools/delete-memory/index.js +24 -0
  106. package/dist/tools/delete-memory/index.js.map +1 -0
  107. package/dist/tools/export-memory/cli-parser.d.ts +2 -0
  108. package/dist/tools/export-memory/cli-parser.d.ts.map +1 -0
  109. package/dist/tools/export-memory/cli-parser.js +34 -0
  110. package/dist/tools/export-memory/cli-parser.js.map +1 -0
  111. package/dist/tools/export-memory/executor.d.ts +10 -0
  112. package/dist/tools/export-memory/executor.d.ts.map +1 -0
  113. package/dist/tools/export-memory/executor.js +41 -0
  114. package/dist/tools/export-memory/executor.js.map +1 -0
  115. package/dist/tools/export-memory/index.d.ts +4 -0
  116. package/dist/tools/export-memory/index.d.ts.map +1 -0
  117. package/dist/tools/export-memory/index.js +99 -0
  118. package/dist/tools/export-memory/index.js.map +1 -0
  119. package/dist/tools/import-memory/cli-parser.d.ts +2 -0
  120. package/dist/tools/import-memory/cli-parser.d.ts.map +1 -0
  121. package/dist/tools/import-memory/cli-parser.js +25 -0
  122. package/dist/tools/import-memory/cli-parser.js.map +1 -0
  123. package/dist/tools/import-memory/executor.d.ts +8 -0
  124. package/dist/tools/import-memory/executor.d.ts.map +1 -0
  125. package/dist/tools/import-memory/executor.js +31 -0
  126. package/dist/tools/import-memory/executor.js.map +1 -0
  127. package/dist/tools/import-memory/index.d.ts +4 -0
  128. package/dist/tools/import-memory/index.d.ts.map +1 -0
  129. package/dist/tools/import-memory/index.js +70 -0
  130. package/dist/tools/import-memory/index.js.map +1 -0
  131. package/dist/tools/index.d.ts +14 -0
  132. package/dist/tools/index.d.ts.map +1 -0
  133. package/dist/tools/index.js +48 -0
  134. package/dist/tools/index.js.map +1 -0
  135. package/dist/tools/memory-graphql/cli-parser.d.ts +6 -0
  136. package/dist/tools/memory-graphql/cli-parser.d.ts.map +1 -0
  137. package/dist/tools/memory-graphql/cli-parser.js +24 -0
  138. package/dist/tools/memory-graphql/cli-parser.js.map +1 -0
  139. package/dist/tools/memory-graphql/executor.d.ts +18 -0
  140. package/dist/tools/memory-graphql/executor.d.ts.map +1 -0
  141. package/dist/tools/memory-graphql/executor.js +53 -0
  142. package/dist/tools/memory-graphql/executor.js.map +1 -0
  143. package/dist/tools/memory-graphql/index.d.ts +3 -0
  144. package/dist/tools/memory-graphql/index.d.ts.map +1 -0
  145. package/dist/tools/memory-graphql/index.js +73 -0
  146. package/dist/tools/memory-graphql/index.js.map +1 -0
  147. package/dist/tools/memory-stats/cli-parser.d.ts +2 -0
  148. package/dist/tools/memory-stats/cli-parser.d.ts.map +1 -0
  149. package/dist/tools/memory-stats/cli-parser.js +8 -0
  150. package/dist/tools/memory-stats/cli-parser.js.map +1 -0
  151. package/dist/tools/memory-stats/executor.d.ts +4 -0
  152. package/dist/tools/memory-stats/executor.d.ts.map +1 -0
  153. package/dist/tools/memory-stats/executor.js +4 -0
  154. package/dist/tools/memory-stats/executor.js.map +1 -0
  155. package/dist/tools/memory-stats/index.d.ts +3 -0
  156. package/dist/tools/memory-stats/index.d.ts.map +1 -0
  157. package/dist/tools/memory-stats/index.js +15 -0
  158. package/dist/tools/memory-stats/index.js.map +1 -0
  159. package/dist/tools/search-memory/cli-parser.d.ts +2 -0
  160. package/dist/tools/search-memory/cli-parser.d.ts.map +1 -0
  161. package/dist/tools/search-memory/cli-parser.js +56 -0
  162. package/dist/tools/search-memory/cli-parser.js.map +1 -0
  163. package/dist/tools/search-memory/executor.d.ts +36 -0
  164. package/dist/tools/search-memory/executor.d.ts.map +1 -0
  165. package/dist/tools/search-memory/executor.js +83 -0
  166. package/dist/tools/search-memory/executor.js.map +1 -0
  167. package/dist/tools/search-memory/index.d.ts +3 -0
  168. package/dist/tools/search-memory/index.d.ts.map +1 -0
  169. package/dist/tools/search-memory/index.js +89 -0
  170. package/dist/tools/search-memory/index.js.map +1 -0
  171. package/dist/tools/store-memory/cli-parser.d.ts +2 -0
  172. package/dist/tools/store-memory/cli-parser.d.ts.map +1 -0
  173. package/dist/tools/store-memory/cli-parser.js +21 -0
  174. package/dist/tools/store-memory/cli-parser.js.map +1 -0
  175. package/dist/tools/store-memory/executor.d.ts +16 -0
  176. package/dist/tools/store-memory/executor.d.ts.map +1 -0
  177. package/dist/tools/store-memory/executor.js +100 -0
  178. package/dist/tools/store-memory/executor.js.map +1 -0
  179. package/dist/tools/store-memory/index.d.ts +3 -0
  180. package/dist/tools/store-memory/index.d.ts.map +1 -0
  181. package/dist/tools/store-memory/index.js +68 -0
  182. package/dist/tools/store-memory/index.js.map +1 -0
  183. package/dist/tools/sync-memory/cli-parser.d.ts +1 -0
  184. package/dist/tools/sync-memory/cli-parser.d.ts.map +1 -0
  185. package/dist/tools/sync-memory/cli-parser.js +2 -0
  186. package/dist/tools/sync-memory/cli-parser.js.map +1 -0
  187. package/dist/tools/sync-memory/executor.d.ts +1 -0
  188. package/dist/tools/sync-memory/executor.d.ts.map +1 -0
  189. package/dist/tools/sync-memory/executor.js +2 -0
  190. package/dist/tools/sync-memory/executor.js.map +1 -0
  191. package/dist/tools/sync-memory/index.d.ts +1 -0
  192. package/dist/tools/sync-memory/index.d.ts.map +1 -0
  193. package/dist/tools/sync-memory/index.js +2 -0
  194. package/dist/tools/sync-memory/index.js.map +1 -0
  195. package/dist/tools/update-memory/cli-parser.d.ts +2 -0
  196. package/dist/tools/update-memory/cli-parser.d.ts.map +1 -0
  197. package/dist/tools/update-memory/cli-parser.js +17 -0
  198. package/dist/tools/update-memory/cli-parser.js.map +1 -0
  199. package/dist/tools/update-memory/executor.d.ts +16 -0
  200. package/dist/tools/update-memory/executor.d.ts.map +1 -0
  201. package/dist/tools/update-memory/executor.js +59 -0
  202. package/dist/tools/update-memory/executor.js.map +1 -0
  203. package/dist/tools/update-memory/index.d.ts +3 -0
  204. package/dist/tools/update-memory/index.d.ts.map +1 -0
  205. package/dist/tools/update-memory/index.js +30 -0
  206. package/dist/tools/update-memory/index.js.map +1 -0
  207. package/dist/transports/streamable-http.d.ts +38 -0
  208. package/dist/transports/streamable-http.d.ts.map +1 -0
  209. package/dist/transports/streamable-http.js +209 -0
  210. package/dist/transports/streamable-http.js.map +1 -0
  211. package/dist/types/tools.d.ts +79 -0
  212. package/dist/types/tools.d.ts.map +1 -0
  213. package/dist/types/tools.js +3 -0
  214. package/dist/types/tools.js.map +1 -0
  215. package/dist/utils/cli-parser.d.ts +12 -0
  216. package/dist/utils/cli-parser.d.ts.map +1 -0
  217. package/dist/utils/cli-parser.js +43 -0
  218. package/dist/utils/cli-parser.js.map +1 -0
  219. package/dist/utils/config.d.ts +95 -0
  220. package/dist/utils/config.d.ts.map +1 -0
  221. package/dist/utils/config.js +176 -0
  222. package/dist/utils/config.js.map +1 -0
  223. package/dist/utils/db-integrity-check.d.ts +22 -0
  224. package/dist/utils/db-integrity-check.d.ts.map +1 -0
  225. package/dist/utils/db-integrity-check.js +69 -0
  226. package/dist/utils/db-integrity-check.js.map +1 -0
  227. package/dist/utils/debug.d.ts +25 -0
  228. package/dist/utils/debug.d.ts.map +1 -0
  229. package/dist/utils/debug.js +67 -0
  230. package/dist/utils/debug.js.map +1 -0
  231. package/dist/utils/help-generator.d.ts +18 -0
  232. package/dist/utils/help-generator.d.ts.map +1 -0
  233. package/dist/utils/help-generator.js +81 -0
  234. package/dist/utils/help-generator.js.map +1 -0
  235. package/dist/utils/json-parser.d.ts +12 -0
  236. package/dist/utils/json-parser.d.ts.map +1 -0
  237. package/dist/utils/json-parser.js +52 -0
  238. package/dist/utils/json-parser.js.map +1 -0
  239. package/dist/utils/mcp-config.d.ts +12 -0
  240. package/dist/utils/mcp-config.d.ts.map +1 -0
  241. package/dist/utils/mcp-config.js +64 -0
  242. package/dist/utils/mcp-config.js.map +1 -0
  243. package/dist/web-server.d.ts +3 -0
  244. package/dist/web-server.d.ts.map +1 -0
  245. package/dist/web-server.js +265 -0
  246. package/dist/web-server.js.map +1 -0
  247. 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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=web-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-server.d.ts","sourceRoot":"","sources":["../src/web-server.ts"],"names":[],"mappings":""}