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,70 @@
1
+ import { parseCliArgs } from './cli-parser.js';
2
+ import { execute } from './executor.js';
3
+ export const importMemoryTool = {
4
+ definition: {
5
+ name: 'import-memory',
6
+ description: 'Import memories from JSON file. Supports duplicate detection and timestamp preservation. Use for cross-machine sync or restoring backups.',
7
+ inputSchema: {
8
+ type: 'object',
9
+ properties: {
10
+ input: {
11
+ type: 'string',
12
+ description: 'Input JSON file path (required)'
13
+ },
14
+ skipDuplicates: {
15
+ type: 'boolean',
16
+ description: 'Skip memories that already exist (by hash)',
17
+ default: false
18
+ },
19
+ preserveTimestamps: {
20
+ type: 'boolean',
21
+ description: 'Keep original creation timestamps',
22
+ default: false
23
+ },
24
+ dryRun: {
25
+ type: 'boolean',
26
+ description: 'Preview import without making changes',
27
+ default: false
28
+ }
29
+ },
30
+ required: ['input']
31
+ }
32
+ },
33
+ handler: execute,
34
+ cliParser: parseCliArgs,
35
+ cliMetadata: {
36
+ options: [
37
+ {
38
+ name: '--input, -i',
39
+ description: 'Input JSON file path',
40
+ hasValue: true,
41
+ example: '--input memories.json'
42
+ },
43
+ {
44
+ name: '--skip-duplicates, -s',
45
+ description: 'Skip memories that already exist',
46
+ hasValue: false,
47
+ example: '--skip-duplicates'
48
+ },
49
+ {
50
+ name: '--preserve-timestamps',
51
+ description: 'Keep original creation timestamps',
52
+ hasValue: false,
53
+ example: '--preserve-timestamps'
54
+ },
55
+ {
56
+ name: '--dry-run',
57
+ description: 'Preview without importing',
58
+ hasValue: false,
59
+ example: '--dry-run'
60
+ }
61
+ ],
62
+ examples: [
63
+ 'import-memory --input memories.json',
64
+ 'import-memory --input backup.json --skip-duplicates',
65
+ 'import-memory --input export.json --preserve-timestamps'
66
+ ]
67
+ }
68
+ };
69
+ export default importMemoryTool;
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/import-memory/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,MAAM,gBAAgB,GAAS;IACpC,UAAU,EAAE;QACV,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,2IAA2I;QACxJ,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iCAAiC;iBAC/C;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,4CAA4C;oBACzD,OAAO,EAAE,KAAK;iBACf;gBACD,kBAAkB,EAAE;oBAClB,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,mCAAmC;oBAChD,OAAO,EAAE,KAAK;iBACf;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,uCAAuC;oBACpD,OAAO,EAAE,KAAK;iBACf;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;IACD,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE,YAAY;IACvB,WAAW,EAAE;QACX,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,sBAAsB;gBACnC,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,uBAAuB;aACjC;YACD;gBACE,IAAI,EAAE,uBAAuB;gBAC7B,WAAW,EAAE,kCAAkC;gBAC/C,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,mBAAmB;aAC7B;YACD;gBACE,IAAI,EAAE,uBAAuB;gBAC7B,WAAW,EAAE,mCAAmC;gBAChD,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,uBAAuB;aACjC;YACD;gBACE,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,2BAA2B;gBACxC,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,WAAW;aACrB;SACF;QACD,QAAQ,EAAE;YACR,qCAAqC;YACrC,qDAAqD;YACrD,yDAAyD;SAC1D;KACF;CACF,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ToolDefinition, ToolContext } from '../types/tools.js';
2
+ export declare class ToolRegistry {
3
+ private tools;
4
+ constructor();
5
+ private registerTool;
6
+ getDefinitions(): ToolDefinition[];
7
+ handle(toolName: string, args: any, context: ToolContext): Promise<any>;
8
+ getCliParser(toolName: string): import("../types/tools.js").CliParser | undefined;
9
+ getToolNames(): string[];
10
+ hasTool(toolName: string): boolean;
11
+ getCliMetadata(toolName: string): import("../types/tools.js").ToolCliMetadata | undefined;
12
+ }
13
+ export declare const toolRegistry: ToolRegistry;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAQ,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAS3E,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAgC;;IAU7C,OAAO,CAAC,YAAY;IAIpB,cAAc,IAAI,cAAc,EAAE;IAK5B,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAS7E,YAAY,CAAC,QAAQ,EAAE,MAAM;IAK7B,YAAY,IAAI,MAAM,EAAE;IAIxB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIlC,cAAc,CAAC,QAAQ,EAAE,MAAM;CAIhC;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
@@ -0,0 +1,48 @@
1
+ // Tool registry for Simple Memory MCP Server
2
+ // Import memory tools
3
+ // GraphQL unified interface - replaces store/search/update/delete/stats
4
+ import { memoryGraphqlTool } from './memory-graphql/index.js';
5
+ // File I/O tools - kept separate (not suitable for GraphQL)
6
+ import { exportMemoryTool } from './export-memory/index.js';
7
+ import { importMemoryTool } from './import-memory/index.js';
8
+ export class ToolRegistry {
9
+ tools = new Map();
10
+ constructor() {
11
+ // GraphQL: unified interface for all CRUD + stats operations
12
+ this.registerTool(memoryGraphqlTool);
13
+ // File I/O: export/import are separate (backup/restore, not queries)
14
+ this.registerTool(exportMemoryTool);
15
+ this.registerTool(importMemoryTool);
16
+ }
17
+ registerTool(tool) {
18
+ this.tools.set(tool.definition.name, tool);
19
+ }
20
+ getDefinitions() {
21
+ return Array.from(this.tools.values()).map(tool => tool.definition);
22
+ }
23
+ // Handle tool execution
24
+ async handle(toolName, args, context) {
25
+ const tool = this.tools.get(toolName);
26
+ if (!tool) {
27
+ throw new Error(`Unknown tool: ${toolName}`);
28
+ }
29
+ return await tool.handler(args, context);
30
+ }
31
+ getCliParser(toolName) {
32
+ const tool = this.tools.get(toolName);
33
+ return tool?.cliParser;
34
+ }
35
+ getToolNames() {
36
+ return Array.from(this.tools.keys());
37
+ }
38
+ hasTool(toolName) {
39
+ return this.tools.has(toolName);
40
+ }
41
+ getCliMetadata(toolName) {
42
+ const tool = this.tools.get(toolName);
43
+ return tool?.cliMetadata;
44
+ }
45
+ }
46
+ // Export singleton instance
47
+ export const toolRegistry = new ToolRegistry();
48
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAI7C,sBAAsB;AACtB,wEAAwE;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,4DAA4D;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,OAAO,YAAY;IACf,KAAK,GAAsB,IAAI,GAAG,EAAE,CAAC;IAE7C;QACE,6DAA6D;QAC7D,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACrC,qEAAqE;QACrE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACpC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACtC,CAAC;IAEO,YAAY,CAAC,IAAU;QAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtE,CAAC;IAED,wBAAwB;IACxB,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,IAAS,EAAE,OAAoB;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,YAAY,CAAC,QAAgB;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,OAAO,IAAI,EAAE,SAAS,CAAC;IACzB,CAAC;IAED,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,QAAgB;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,cAAc,CAAC,QAAgB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,OAAO,IAAI,EAAE,WAAW,CAAC;IAC3B,CAAC;CACF;AAED,4BAA4B;AAC5B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * CLI argument parser for memory-graphql tool
3
+ * Usage: node dist/index.js memory-graphql --query "{ stats { totalMemories } }"
4
+ */
5
+ export declare function parseCliArgs(args: string[]): any;
6
+ //# sourceMappingURL=cli-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-parser.d.ts","sourceRoot":"","sources":["../../../src/tools/memory-graphql/cli-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAoB1C"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * CLI argument parser for memory-graphql tool
3
+ * Usage: node dist/index.js memory-graphql --query "{ stats { totalMemories } }"
4
+ */
5
+ import { parseCommandLineArgs } from '../../utils/cli-parser.js';
6
+ export function parseCliArgs(args) {
7
+ const rawArgs = parseCommandLineArgs(args);
8
+ if (!rawArgs.query) {
9
+ throw new Error('Missing required argument: --query "<graphql query>"');
10
+ }
11
+ const result = {
12
+ query: rawArgs.query
13
+ };
14
+ if (rawArgs.variables) {
15
+ try {
16
+ result.variables = JSON.parse(rawArgs.variables);
17
+ }
18
+ catch {
19
+ throw new Error('--variables must be valid JSON');
20
+ }
21
+ }
22
+ return result;
23
+ }
24
+ //# sourceMappingURL=cli-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-parser.js","sourceRoot":"","sources":["../../../src/tools/memory-graphql/cli-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAE3C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,MAAM,GAAQ;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC;IAEF,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAmB,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * GraphQL executor for memory-graphql MCP tool
3
+ */
4
+ import type { ToolContext } from '../../types/tools.js';
5
+ interface MemoryGraphqlArgs {
6
+ query: string;
7
+ variables?: Record<string, any>;
8
+ }
9
+ interface MemoryGraphqlResult {
10
+ data?: any;
11
+ errors?: Array<{
12
+ message: string;
13
+ path?: string[];
14
+ }>;
15
+ }
16
+ export declare function execute(args: MemoryGraphqlArgs, context: ToolContext): Promise<MemoryGraphqlResult>;
17
+ export {};
18
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/tools/memory-graphql/executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAKxD,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACjC;AAED,UAAU,mBAAmB;IAC3B,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACtD;AAeD,wBAAsB,OAAO,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAsCzG"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * GraphQL executor for memory-graphql MCP tool
3
+ */
4
+ import { graphql } from 'graphql';
5
+ import { makeExecutableSchema } from '@graphql-tools/schema';
6
+ import { typeDefs } from '../../graphql/schema.js';
7
+ import { createResolvers } from '../../graphql/resolvers.js';
8
+ // Cache schema per memoryService instance to avoid rebuilding on every call
9
+ const schemaCache = new WeakMap();
10
+ function getOrCreateSchema(memoryService) {
11
+ let schema = schemaCache.get(memoryService);
12
+ if (!schema) {
13
+ const resolvers = createResolvers(memoryService);
14
+ schema = makeExecutableSchema({ typeDefs, resolvers });
15
+ schemaCache.set(memoryService, schema);
16
+ }
17
+ return schema;
18
+ }
19
+ export async function execute(args, context) {
20
+ if (!args.query || typeof args.query !== 'string') {
21
+ return {
22
+ errors: [{ message: 'Query is required and must be a string' }]
23
+ };
24
+ }
25
+ try {
26
+ // Get cached schema or create new one for this memoryService
27
+ const schema = getOrCreateSchema(context.memoryService);
28
+ // Execute the GraphQL query
29
+ const result = await graphql({
30
+ schema,
31
+ source: args.query,
32
+ variableValues: args.variables || {}
33
+ });
34
+ // Format response
35
+ const response = {};
36
+ if (result.data) {
37
+ response.data = result.data;
38
+ }
39
+ if (result.errors && result.errors.length > 0) {
40
+ response.errors = result.errors.map(err => ({
41
+ message: err.message,
42
+ path: err.path?.map(String)
43
+ }));
44
+ }
45
+ return response;
46
+ }
47
+ catch (error) {
48
+ return {
49
+ errors: [{ message: `GraphQL execution error: ${error.message}` }]
50
+ };
51
+ }
52
+ }
53
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/tools/memory-graphql/executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAa7D,4EAA4E;AAC5E,MAAM,WAAW,GAAG,IAAI,OAAO,EAA0D,CAAC;AAE1F,SAAS,iBAAiB,CAAC,aAA4B;IACrD,IAAI,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,GAAG,oBAAoB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QACvD,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAuB,EAAE,OAAoB;IACzE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO;YACL,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,wCAAwC,EAAE,CAAC;SAChE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,6DAA6D;QAC7D,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAExD,4BAA4B;QAC5B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,KAAK;YAClB,cAAc,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;SACrC,CAAC,CAAC;QAEH,kBAAkB;QAClB,MAAM,QAAQ,GAAwB,EAAE,CAAC;QAEzC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAC9B,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC1C,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;aAC5B,CAAC,CAAC,CAAC;QACN,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO;YACL,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,4BAA4B,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Tool } from '../../types/tools.js';
2
+ export declare const memoryGraphqlTool: Tool;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/memory-graphql/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAIjD,eAAO,MAAM,iBAAiB,EAAE,IAqE/B,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { execute } from './executor.js';
2
+ import { parseCliArgs } from './cli-parser.js';
3
+ export const memoryGraphqlTool = {
4
+ definition: {
5
+ name: 'memory-graphql',
6
+ description: `Execute GraphQL queries against the memory database. This single tool replaces multiple memory tools with a unified, flexible interface.
7
+
8
+ 🧠 PROACTIVE USAGE: Search memories at the START of conversations or when relevant topics arise to provide personalized, context-aware responses.
9
+
10
+ 💾 AUTO-CAPTURE: Use store mutation proactively to capture important information WITHOUT waiting for explicit requests.
11
+ ✓ Preferences, decisions, facts about people/projects, learnings, action items
12
+ ✗ Skip: greetings, temporary info, transactional exchanges
13
+ Store SILENTLY - don't announce saves.
14
+
15
+ SCHEMA:
16
+ Query {
17
+ memories(query: String, tags: [String], limit: Int, summaryOnly: Boolean, previewLength: Int): [Memory!]!
18
+ memory(hash: String!): Memory
19
+ related(hash: String!, limit: Int): [Memory!]!
20
+ stats: Stats!
21
+ }
22
+
23
+ Mutation {
24
+ store(content: String!, tags: [String]): StoreResult!
25
+ update(hash: String!, content: String!, tags: [String]): UpdateResult!
26
+ delete(hash: String, tag: String): DeleteResult!
27
+ }
28
+
29
+ Memory { hash, content, title, preview, tags, createdAt, relevance }
30
+ Stats { version, totalMemories, totalRelationships, dbSize, schemaVersion }
31
+
32
+ EXAMPLES:
33
+ # Search with summaries (efficient)
34
+ { memories(query: "typescript", summaryOnly: true) { hash title tags } }
35
+
36
+ # Get full content by hash
37
+ { memory(hash: "abc123...") { content tags } }
38
+
39
+ # Store new memory
40
+ mutation { store(content: "Remember this", tags: ["note"]) { success hash } }
41
+
42
+ # Batch operations in ONE call
43
+ {
44
+ search: memories(query: "mcp", limit: 3) { hash title }
45
+ recent: memories(limit: 5) { hash createdAt }
46
+ stats { totalMemories }
47
+ }
48
+
49
+ TIPS:
50
+ ⚠️ TOKEN COST: Full content = 500-2000 tokens/memory, summaries = ~20 tokens
51
+ • Use summaryOnly: true for search, then memory(hash) for full content
52
+ • Request only fields you need (e.g., { hash title } not { hash content title tags createdAt })
53
+ • Batch related queries to reduce round-trips`,
54
+ inputSchema: {
55
+ type: 'object',
56
+ properties: {
57
+ query: {
58
+ type: 'string',
59
+ description: 'GraphQL query or mutation to execute'
60
+ },
61
+ variables: {
62
+ type: 'object',
63
+ description: 'Optional variables for the query',
64
+ additionalProperties: true
65
+ }
66
+ },
67
+ required: ['query']
68
+ }
69
+ },
70
+ handler: execute,
71
+ cliParser: parseCliArgs
72
+ };
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/memory-graphql/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,CAAC,MAAM,iBAAiB,GAAS;IACrC,UAAU,EAAE;QACV,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDA+C+B;QAC5C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sCAAsC;iBACpD;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;oBAC/C,oBAAoB,EAAE,IAAI;iBAC3B;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;IACD,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE,YAAY;CACxB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function parseCliArgs(args: string[]): {};
2
+ //# sourceMappingURL=cli-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-parser.d.ts","sourceRoot":"","sources":["../../../src/tools/memory-stats/cli-parser.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAO1C"}
@@ -0,0 +1,8 @@
1
+ import { parseCommandLineArgs } from '../../utils/cli-parser.js';
2
+ export function parseCliArgs(args) {
3
+ // PHASE 1: Convert string array to object (shared utility)
4
+ const rawArgs = parseCommandLineArgs(args);
5
+ // PHASE 2: Validate and transform (command-specific logic - none needed for stats)
6
+ return {};
7
+ }
8
+ //# sourceMappingURL=cli-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-parser.js","sourceRoot":"","sources":["../../../src/tools/memory-stats/cli-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,2DAA2D;IAC3D,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAE3C,mFAAmF;IAEnF,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ToolContext } from '../../types/tools.js';
2
+ import type { MemoryStats } from '../../services/memory-service.js';
3
+ export declare function execute(args: any, context: ToolContext): Promise<MemoryStats>;
4
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/tools/memory-stats/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,wBAAsB,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAEnF"}
@@ -0,0 +1,4 @@
1
+ export async function execute(args, context) {
2
+ return context.memoryService.stats();
3
+ }
4
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/tools/memory-stats/executor.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAS,EAAE,OAAoB;IAC3D,OAAO,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Tool } from '../../types/tools.js';
2
+ export declare const memoryStatsTool: Tool;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/memory-stats/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAIjD,eAAO,MAAM,eAAe,EAAE,IAW7B,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { execute } from './executor.js';
2
+ import { parseCliArgs } from './cli-parser.js';
3
+ export const memoryStatsTool = {
4
+ definition: {
5
+ name: 'memory-stats',
6
+ description: 'Get statistics about stored memories and database usage',
7
+ inputSchema: {
8
+ type: 'object',
9
+ properties: {}
10
+ }
11
+ },
12
+ handler: execute,
13
+ cliParser: parseCliArgs
14
+ };
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/memory-stats/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,UAAU,EAAE;QACV,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,yDAAyD;QACtE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf;KACF;IACD,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE,YAAY;CACxB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function parseCliArgs(args: string[]): any;
2
+ //# sourceMappingURL=cli-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-parser.d.ts","sourceRoot":"","sources":["../../../src/tools/search-memory/cli-parser.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAyD1C"}
@@ -0,0 +1,56 @@
1
+ import { parseCommandLineArgs } from '../../utils/cli-parser.js';
2
+ export function parseCliArgs(args) {
3
+ // PHASE 1: Convert string array to object (shared utility)
4
+ const rawArgs = parseCommandLineArgs(args);
5
+ // PHASE 2: Validate and transform (command-specific logic)
6
+ const result = {
7
+ includeRelated: false,
8
+ relationshipDepth: 1,
9
+ summaryOnly: false,
10
+ contentPreview: 100
11
+ };
12
+ // Hash lookup (direct retrieval by hash)
13
+ if (rawArgs.hash) {
14
+ result.hash = rawArgs.hash;
15
+ }
16
+ if (rawArgs.query) {
17
+ result.query = rawArgs.query;
18
+ }
19
+ if (rawArgs.tags) {
20
+ result.tags = rawArgs.tags.split(',').map((tag) => tag.trim());
21
+ }
22
+ if (rawArgs.limit) {
23
+ result.limit = parseInt(rawArgs.limit, 10);
24
+ }
25
+ if (rawArgs.includeRelated !== undefined) {
26
+ result.includeRelated = rawArgs.includeRelated; // Already a boolean
27
+ }
28
+ if (rawArgs.relationshipDepth !== undefined) {
29
+ const depth = parseInt(rawArgs.relationshipDepth, 10);
30
+ result.relationshipDepth = Math.min(Math.max(depth, 1), 3); // Clamp between 1-3
31
+ }
32
+ if (rawArgs.daysAgo !== undefined) {
33
+ result.daysAgo = parseInt(rawArgs.daysAgo, 10);
34
+ }
35
+ if (rawArgs.startDate) {
36
+ result.startDate = rawArgs.startDate;
37
+ }
38
+ if (rawArgs.endDate) {
39
+ result.endDate = rawArgs.endDate;
40
+ }
41
+ if (rawArgs.minRelevance !== undefined) {
42
+ const relevance = parseFloat(rawArgs.minRelevance);
43
+ // Clamp between 0-1
44
+ result.minRelevance = Math.min(Math.max(relevance, 0), 1);
45
+ }
46
+ if (rawArgs.summary !== undefined || rawArgs.summaryOnly !== undefined) {
47
+ result.summaryOnly = rawArgs.summary || rawArgs.summaryOnly; // Already a boolean
48
+ }
49
+ if (rawArgs.previewLength !== undefined || rawArgs.contentPreview !== undefined) {
50
+ const length = parseInt((rawArgs.previewLength || rawArgs.contentPreview), 10);
51
+ // Clamp between 0-500
52
+ result.contentPreview = Math.min(Math.max(length, 0), 500);
53
+ }
54
+ return result;
55
+ }
56
+ //# sourceMappingURL=cli-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-parser.js","sourceRoot":"","sources":["../../../src/tools/search-memory/cli-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { ToolContext } from '../../types/tools.js';
2
+ import type { MemoryEntry } from '../../services/memory-service.js';
3
+ interface SearchMemoryArgs {
4
+ hash?: string;
5
+ query?: string;
6
+ tags?: string[];
7
+ limit?: number;
8
+ includeRelated?: boolean;
9
+ relationshipDepth?: number;
10
+ daysAgo?: number;
11
+ startDate?: string;
12
+ endDate?: string;
13
+ minRelevance?: number;
14
+ summaryOnly?: boolean;
15
+ contentPreview?: number;
16
+ }
17
+ interface MemorySummary {
18
+ hash: string;
19
+ title: string;
20
+ tags: string[];
21
+ createdAt: string;
22
+ relevance?: number;
23
+ preview: string;
24
+ }
25
+ interface SearchMemoryResult {
26
+ memories: MemoryEntry[] | MemorySummary[];
27
+ relatedMemories?: MemoryEntry[] | MemorySummary[];
28
+ total: number;
29
+ searchTerm?: string;
30
+ searchTags?: string[];
31
+ relationshipDepth?: number;
32
+ summaryOnly?: boolean;
33
+ }
34
+ export declare function execute(args: SearchMemoryArgs, context: ToolContext): Promise<SearchMemoryResult>;
35
+ export {};
36
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/tools/search-memory/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,WAAW,EAAE,GAAG,aAAa,EAAE,CAAC;IAC1C,eAAe,CAAC,EAAE,WAAW,EAAE,GAAG,aAAa,EAAE,CAAC;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA2BD,wBAAsB,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmFvG"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Convert a full memory entry to a compact summary
3
+ */
4
+ function toSummary(memory, previewLength) {
5
+ const content = memory.content || '';
6
+ // Title: first line, max 80 chars
7
+ const firstLine = content.split('\n')[0] || '';
8
+ const title = firstLine.length > 80 ? firstLine.slice(0, 77) + '...' : firstLine;
9
+ // Preview: first N chars
10
+ const preview = content.length > previewLength
11
+ ? content.slice(0, previewLength) + '...'
12
+ : content;
13
+ return {
14
+ hash: memory.hash,
15
+ title,
16
+ tags: memory.tags || [],
17
+ createdAt: memory.createdAt,
18
+ relevance: memory.relevance,
19
+ preview
20
+ };
21
+ }
22
+ export async function execute(args, context) {
23
+ // Direct hash lookup - bypasses all other search parameters
24
+ if (args.hash) {
25
+ const hash = args.hash.trim().toLowerCase();
26
+ // Validate hash format (MD5 = 32 hex characters)
27
+ if (!/^[a-f0-9]{32}$/.test(hash)) {
28
+ return {
29
+ memories: [],
30
+ total: 0,
31
+ error: 'Invalid hash format. Expected 32 character MD5 hex string.'
32
+ };
33
+ }
34
+ const memory = context.memoryService.getByHash(hash);
35
+ if (!memory) {
36
+ return {
37
+ memories: [],
38
+ total: 0,
39
+ error: `Memory not found with hash: ${hash}`
40
+ };
41
+ }
42
+ return {
43
+ memories: [memory],
44
+ total: 1
45
+ };
46
+ }
47
+ // Use provided limit or default to 10, ensure it's at least 1
48
+ const limit = Math.max(1, args.limit || 10);
49
+ const summaryOnly = args.summaryOnly || false;
50
+ const previewLength = args.contentPreview || 100;
51
+ const memories = context.memoryService.search(args.query, args.tags, limit, args.daysAgo, args.startDate, args.endDate, args.minRelevance);
52
+ // Transform to summaries if requested
53
+ const resultMemories = summaryOnly
54
+ ? memories.map(m => toSummary(m, previewLength))
55
+ : memories;
56
+ const result = {
57
+ memories: resultMemories,
58
+ total: memories.length,
59
+ searchTerm: args.query,
60
+ searchTags: args.tags,
61
+ summaryOnly
62
+ };
63
+ // Include related memories if requested
64
+ if (args.includeRelated) {
65
+ const relatedMemories = [];
66
+ const depth = args.relationshipDepth || 1;
67
+ for (const memory of memories) {
68
+ const related = context.memoryService.getRelated(memory.hash, Math.ceil(limit / memories.length));
69
+ relatedMemories.push(...related);
70
+ }
71
+ // Remove duplicates and original memories
72
+ const originalHashes = new Set(memories.map(m => m.hash));
73
+ const uniqueRelated = relatedMemories.filter((memory, index, arr) => !originalHashes.has(memory.hash) &&
74
+ arr.findIndex(m => m.hash === memory.hash) === index);
75
+ // Transform to summaries if requested
76
+ result.relatedMemories = summaryOnly
77
+ ? uniqueRelated.map(m => toSummary(m, previewLength))
78
+ : uniqueRelated;
79
+ result.relationshipDepth = depth;
80
+ }
81
+ return result;
82
+ }
83
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/tools/search-memory/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Tool } from '../../types/tools.js';
2
+ export declare const searchMemoryTool: Tool;
3
+ //# sourceMappingURL=index.d.ts.map