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,342 @@
1
+ /**
2
+ * Comprehensive GraphQL Test Suite
3
+ * Tests all CRUD operations, search, batching, and error handling via GraphQL
4
+ */
5
+ import { MemoryService } from '../services/memory-service.js';
6
+ import { execute } from '../tools/memory-graphql/executor.js';
7
+ import { unlink } from 'fs/promises';
8
+ const TEST_DB = './test-graphql.db';
9
+ let memoryService;
10
+ let context;
11
+ async function setup() {
12
+ // Clean up any existing test database
13
+ try {
14
+ await unlink(TEST_DB);
15
+ }
16
+ catch { /* ignore if doesn't exist */ }
17
+ memoryService = new MemoryService(TEST_DB);
18
+ memoryService.initialize();
19
+ context = { memoryService, config: {} };
20
+ }
21
+ async function cleanup() {
22
+ memoryService?.close();
23
+ try {
24
+ await unlink(TEST_DB);
25
+ }
26
+ catch { /* ignore */ }
27
+ }
28
+ async function runTest(name, testFn) {
29
+ const start = Date.now();
30
+ try {
31
+ await testFn();
32
+ return { name, success: true, duration: Date.now() - start };
33
+ }
34
+ catch (error) {
35
+ return {
36
+ name,
37
+ success: false,
38
+ error: error instanceof Error ? error.message : String(error),
39
+ duration: Date.now() - start
40
+ };
41
+ }
42
+ }
43
+ // ============================================================================
44
+ // TESTS
45
+ // ============================================================================
46
+ async function testStats() {
47
+ const result = await execute({ query: '{ stats { totalMemories version schemaVersion } }' }, context);
48
+ if (result.errors)
49
+ throw new Error(`Stats query failed: ${result.errors[0].message}`);
50
+ if (typeof result.data?.stats?.totalMemories !== 'number') {
51
+ throw new Error('Stats should return totalMemories as number');
52
+ }
53
+ if (!result.data?.stats?.version) {
54
+ throw new Error('Stats should return version');
55
+ }
56
+ console.log(` ✓ Stats: ${result.data.stats.totalMemories} memories, v${result.data.stats.version}`);
57
+ }
58
+ async function testStoreMutation() {
59
+ const result = await execute({
60
+ query: `mutation {
61
+ store(content: "Test memory for GraphQL comprehensive test", tags: ["test", "graphql"]) {
62
+ success
63
+ hash
64
+ error
65
+ }
66
+ }`
67
+ }, context);
68
+ if (result.errors)
69
+ throw new Error(`Store mutation failed: ${result.errors[0].message}`);
70
+ if (!result.data?.store?.success) {
71
+ throw new Error(`Store failed: ${result.data?.store?.error || 'unknown'}`);
72
+ }
73
+ if (!result.data?.store?.hash) {
74
+ throw new Error('Store should return hash');
75
+ }
76
+ console.log(` ✓ Stored memory with hash: ${result.data.store.hash.slice(0, 8)}...`);
77
+ return result.data.store.hash;
78
+ }
79
+ async function testSearchByQuery(expectedHash) {
80
+ const result = await execute({
81
+ query: '{ memories(query: "comprehensive test", limit: 5) { hash title tags } }'
82
+ }, context);
83
+ if (result.errors)
84
+ throw new Error(`Search failed: ${result.errors[0].message}`);
85
+ if (!Array.isArray(result.data?.memories)) {
86
+ throw new Error('Search should return memories array');
87
+ }
88
+ const found = result.data.memories.find((m) => m.hash === expectedHash);
89
+ if (!found) {
90
+ throw new Error('Should find the stored memory by content search');
91
+ }
92
+ console.log(` ✓ Found ${result.data.memories.length} memories by content search`);
93
+ }
94
+ async function testSearchByTags(expectedHash) {
95
+ const result = await execute({
96
+ query: '{ memories(tags: ["graphql"], limit: 10) { hash title tags } }'
97
+ }, context);
98
+ if (result.errors)
99
+ throw new Error(`Tag search failed: ${result.errors[0].message}`);
100
+ if (!Array.isArray(result.data?.memories)) {
101
+ throw new Error('Tag search should return memories array');
102
+ }
103
+ const found = result.data.memories.find((m) => m.hash === expectedHash);
104
+ if (!found) {
105
+ throw new Error('Should find the stored memory by tag search');
106
+ }
107
+ console.log(` ✓ Found ${result.data.memories.length} memories by tag search`);
108
+ }
109
+ async function testGetByHash(hash) {
110
+ const result = await execute({
111
+ query: `{ memory(hash: "${hash}") { hash content tags createdAt } }`
112
+ }, context);
113
+ if (result.errors)
114
+ throw new Error(`Get by hash failed: ${result.errors[0].message}`);
115
+ if (!result.data?.memory) {
116
+ throw new Error('Should find memory by hash');
117
+ }
118
+ if (result.data.memory.hash !== hash) {
119
+ throw new Error('Returned hash should match requested hash');
120
+ }
121
+ if (!result.data.memory.content.includes('comprehensive test')) {
122
+ throw new Error('Content should match stored content');
123
+ }
124
+ console.log(` ✓ Retrieved memory by hash with ${result.data.memory.tags.length} tags`);
125
+ }
126
+ async function testUpdateMutation(hash) {
127
+ const result = await execute({
128
+ query: `mutation {
129
+ update(hash: "${hash}", content: "Updated content for GraphQL test", tags: ["test", "graphql", "updated"]) {
130
+ success
131
+ newHash
132
+ error
133
+ }
134
+ }`
135
+ }, context);
136
+ if (result.errors)
137
+ throw new Error(`Update mutation failed: ${result.errors[0].message}`);
138
+ if (!result.data?.update?.success) {
139
+ throw new Error(`Update failed: ${result.data?.update?.error || 'unknown'}`);
140
+ }
141
+ if (!result.data?.update?.newHash) {
142
+ throw new Error('Update should return newHash');
143
+ }
144
+ // Verify old hash no longer exists
145
+ const oldCheck = await execute({
146
+ query: `{ memory(hash: "${hash}") { hash } }`
147
+ }, context);
148
+ if (oldCheck.data?.memory) {
149
+ throw new Error('Old hash should no longer exist after update');
150
+ }
151
+ console.log(` ✓ Updated memory, new hash: ${result.data.update.newHash.slice(0, 8)}...`);
152
+ return result.data.update.newHash;
153
+ }
154
+ async function testDeleteMutation(hash) {
155
+ const result = await execute({
156
+ query: `mutation {
157
+ delete(hash: "${hash}") {
158
+ success
159
+ deletedCount
160
+ error
161
+ }
162
+ }`
163
+ }, context);
164
+ if (result.errors)
165
+ throw new Error(`Delete mutation failed: ${result.errors[0].message}`);
166
+ if (!result.data?.delete?.success) {
167
+ throw new Error(`Delete failed: ${result.data?.delete?.error || 'unknown'}`);
168
+ }
169
+ if (result.data?.delete?.deletedCount !== 1) {
170
+ throw new Error('Should delete exactly 1 memory');
171
+ }
172
+ // Verify deletion
173
+ const check = await execute({
174
+ query: `{ memory(hash: "${hash}") { hash } }`
175
+ }, context);
176
+ if (check.data?.memory) {
177
+ throw new Error('Deleted memory should not be found');
178
+ }
179
+ console.log(` ✓ Deleted memory successfully`);
180
+ }
181
+ async function testBatchedQuery() {
182
+ // Store some test data first
183
+ await execute({
184
+ query: `mutation { store(content: "Batch test memory 1", tags: ["batch"]) { hash } }`
185
+ }, context);
186
+ await execute({
187
+ query: `mutation { store(content: "Batch test memory 2", tags: ["batch"]) { hash } }`
188
+ }, context);
189
+ // Batched query - multiple operations in one call
190
+ const result = await execute({
191
+ query: `{
192
+ batchSearch: memories(tags: ["batch"], limit: 5) { hash title }
193
+ stats { totalMemories totalRelationships }
194
+ }`
195
+ }, context);
196
+ if (result.errors)
197
+ throw new Error(`Batched query failed: ${result.errors[0].message}`);
198
+ if (!Array.isArray(result.data?.batchSearch)) {
199
+ throw new Error('Batched search should return array');
200
+ }
201
+ if (typeof result.data?.stats?.totalMemories !== 'number') {
202
+ throw new Error('Batched stats should return totalMemories');
203
+ }
204
+ console.log(` ✓ Batched query: ${result.data.batchSearch.length} results + stats in one call`);
205
+ // Cleanup batch test data
206
+ await execute({
207
+ query: `mutation { delete(tag: "batch") { deletedCount } }`
208
+ }, context);
209
+ }
210
+ async function testDeleteByTag() {
211
+ // Store test memories with specific tag
212
+ await execute({
213
+ query: `mutation { store(content: "Delete by tag test 1", tags: ["delete-test"]) { hash } }`
214
+ }, context);
215
+ await execute({
216
+ query: `mutation { store(content: "Delete by tag test 2", tags: ["delete-test"]) { hash } }`
217
+ }, context);
218
+ // Delete by tag
219
+ const result = await execute({
220
+ query: `mutation { delete(tag: "delete-test") { success deletedCount } }`
221
+ }, context);
222
+ if (result.errors)
223
+ throw new Error(`Delete by tag failed: ${result.errors[0].message}`);
224
+ if (!result.data?.delete?.success) {
225
+ throw new Error('Delete by tag should succeed');
226
+ }
227
+ if (result.data?.delete?.deletedCount < 2) {
228
+ throw new Error('Should delete at least 2 memories');
229
+ }
230
+ console.log(` ✓ Deleted ${result.data.delete.deletedCount} memories by tag`);
231
+ }
232
+ async function testErrorHandling() {
233
+ // Invalid query syntax
234
+ const syntaxError = await execute({ query: '{ invalid' }, context);
235
+ if (!syntaxError.errors || syntaxError.errors.length === 0) {
236
+ throw new Error('Invalid syntax should return errors');
237
+ }
238
+ // Non-existent field
239
+ const fieldError = await execute({ query: '{ nonExistentField }' }, context);
240
+ if (!fieldError.errors || fieldError.errors.length === 0) {
241
+ throw new Error('Non-existent field should return errors');
242
+ }
243
+ // Update non-existent memory
244
+ const updateError = await execute({
245
+ query: `mutation { update(hash: "nonexistent123", content: "test") { success error } }`
246
+ }, context);
247
+ if (updateError.data?.update?.success !== false) {
248
+ throw new Error('Update non-existent should return success: false');
249
+ }
250
+ // Delete without hash or tag
251
+ const deleteError = await execute({
252
+ query: `mutation { delete { success error } }`
253
+ }, context);
254
+ if (deleteError.data?.delete?.success !== false) {
255
+ throw new Error('Delete without params should return success: false');
256
+ }
257
+ console.log(` ✓ Error handling works correctly`);
258
+ }
259
+ async function testRelatedMemories() {
260
+ // Store related memories
261
+ const result1 = await execute({
262
+ query: `mutation { store(content: "TypeScript fundamentals guide", tags: ["typescript", "guide"]) { hash } }`
263
+ }, context);
264
+ const hash1 = result1.data?.store?.hash;
265
+ await execute({
266
+ query: `mutation { store(content: "Advanced TypeScript patterns", tags: ["typescript", "advanced"]) { hash } }`
267
+ }, context);
268
+ // Query related memories
269
+ const related = await execute({
270
+ query: `{ related(hash: "${hash1}", limit: 5) { hash title tags } }`
271
+ }, context);
272
+ if (related.errors)
273
+ throw new Error(`Related query failed: ${related.errors[0].message}`);
274
+ // Related might be empty if no relationships created, that's OK
275
+ console.log(` ✓ Related query returned ${related.data?.related?.length || 0} related memories`);
276
+ // Cleanup
277
+ await execute({
278
+ query: `mutation { delete(tag: "typescript") { deletedCount } }`
279
+ }, context);
280
+ }
281
+ // ============================================================================
282
+ // MAIN
283
+ // ============================================================================
284
+ async function runAllTests() {
285
+ console.log('🧪 GraphQL Comprehensive Test Suite');
286
+ console.log('====================================\n');
287
+ await setup();
288
+ const results = [];
289
+ let storedHash = '';
290
+ let updatedHash = '';
291
+ // Run tests in sequence (some depend on previous results)
292
+ console.log('Running tests...\n');
293
+ results.push(await runTest('Stats Query', testStats));
294
+ results.push(await runTest('Store Mutation', async () => {
295
+ storedHash = await testStoreMutation();
296
+ }));
297
+ results.push(await runTest('Search by Query', async () => {
298
+ await testSearchByQuery(storedHash);
299
+ }));
300
+ results.push(await runTest('Search by Tags', async () => {
301
+ await testSearchByTags(storedHash);
302
+ }));
303
+ results.push(await runTest('Get by Hash', async () => {
304
+ await testGetByHash(storedHash);
305
+ }));
306
+ results.push(await runTest('Update Mutation', async () => {
307
+ updatedHash = await testUpdateMutation(storedHash);
308
+ }));
309
+ results.push(await runTest('Delete Mutation', async () => {
310
+ await testDeleteMutation(updatedHash);
311
+ }));
312
+ results.push(await runTest('Batched Query', testBatchedQuery));
313
+ results.push(await runTest('Delete by Tag', testDeleteByTag));
314
+ results.push(await runTest('Related Memories', testRelatedMemories));
315
+ results.push(await runTest('Error Handling', testErrorHandling));
316
+ // Summary
317
+ console.log('\n📊 Test Summary');
318
+ console.log('===============');
319
+ const passed = results.filter(r => r.success).length;
320
+ const total = results.length;
321
+ const totalTime = results.reduce((sum, r) => sum + r.duration, 0);
322
+ for (const r of results) {
323
+ const icon = r.success ? '✅' : '❌';
324
+ console.log(`${icon} ${r.name} (${r.duration}ms)${r.error ? ` - ${r.error}` : ''}`);
325
+ }
326
+ console.log(`\nPassed: ${passed}/${total}`);
327
+ console.log(`Total time: ${totalTime}ms`);
328
+ await cleanup();
329
+ console.log('\n🧹 Test database cleaned up');
330
+ if (passed !== total) {
331
+ console.log('\n💥 Some tests failed!');
332
+ process.exit(1);
333
+ }
334
+ else {
335
+ console.log('\n🎉 All tests passed!');
336
+ }
337
+ }
338
+ runAllTests().catch(error => {
339
+ console.error('Test runner failed:', error);
340
+ process.exit(1);
341
+ });
342
+ //# sourceMappingURL=graphql-comprehensive-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-comprehensive-test.js","sourceRoot":"","sources":["../../src/tests/graphql-comprehensive-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * GraphQL Performance Benchmark
3
+ * Compares GraphQL layer overhead vs direct MemoryService calls
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=graphql-performance-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-performance-test.d.ts","sourceRoot":"","sources":["../../src/tests/graphql-performance-test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * GraphQL Performance Benchmark
3
+ * Compares GraphQL layer overhead vs direct MemoryService calls
4
+ */
5
+ import { MemoryService } from '../services/memory-service.js';
6
+ import { execute as executeGraphQL } from '../tools/memory-graphql/executor.js';
7
+ import { unlink } from 'fs/promises';
8
+ const TEST_DB = './perf-test.db';
9
+ const ITERATIONS = 100;
10
+ async function cleanup() {
11
+ try {
12
+ await unlink(TEST_DB);
13
+ }
14
+ catch { /* ignore */ }
15
+ }
16
+ async function benchmark(name, fn, iterations = ITERATIONS) {
17
+ // Warmup
18
+ for (let i = 0; i < 5; i++)
19
+ await fn();
20
+ const start = performance.now();
21
+ for (let i = 0; i < iterations; i++) {
22
+ await fn();
23
+ }
24
+ const elapsed = performance.now() - start;
25
+ const avgMs = elapsed / iterations;
26
+ const opsPerSec = Math.round(1000 / avgMs);
27
+ console.log(` ${name}: ${avgMs.toFixed(3)}ms avg (${opsPerSec.toLocaleString()} ops/sec)`);
28
+ return avgMs;
29
+ }
30
+ async function runBenchmarks() {
31
+ console.log('🏎️ GraphQL vs Direct MemoryService Performance\n');
32
+ console.log(`Iterations per test: ${ITERATIONS}\n`);
33
+ await cleanup();
34
+ const memoryService = new MemoryService(TEST_DB);
35
+ memoryService.initialize();
36
+ const context = { memoryService, config: {} };
37
+ // Seed some data
38
+ console.log('Seeding test data...');
39
+ for (let i = 0; i < 50; i++) {
40
+ memoryService.store(`Test memory ${i} with some content about topic ${i % 10}`, [`tag${i % 5}`, 'test']);
41
+ }
42
+ console.log('');
43
+ // ============================================================================
44
+ // STORE BENCHMARKS
45
+ // ============================================================================
46
+ console.log('📝 STORE OPERATIONS:');
47
+ let storeCounter = 1000;
48
+ const directStoreTime = await benchmark('Direct MemoryService.store()', async () => {
49
+ memoryService.store(`Benchmark content ${storeCounter++}`, ['benchmark']);
50
+ });
51
+ const graphqlStoreTime = await benchmark('GraphQL mutation { store }', async () => {
52
+ await executeGraphQL({
53
+ query: `mutation { store(content: "GraphQL benchmark ${storeCounter++}", tags: ["benchmark"]) { hash } }`
54
+ }, context);
55
+ });
56
+ console.log(` → GraphQL overhead: ${((graphqlStoreTime / directStoreTime - 1) * 100).toFixed(1)}%\n`);
57
+ // ============================================================================
58
+ // SEARCH BENCHMARKS
59
+ // ============================================================================
60
+ console.log('🔍 SEARCH OPERATIONS:');
61
+ const directSearchTime = await benchmark('Direct MemoryService.search()', async () => {
62
+ memoryService.search('topic', undefined, 10);
63
+ });
64
+ const graphqlSearchTime = await benchmark('GraphQL { memories(query) }', async () => {
65
+ await executeGraphQL({
66
+ query: '{ memories(query: "topic", limit: 10) { hash title } }'
67
+ }, context);
68
+ });
69
+ console.log(` → GraphQL overhead: ${((graphqlSearchTime / directSearchTime - 1) * 100).toFixed(1)}%\n`);
70
+ // ============================================================================
71
+ // TAG SEARCH BENCHMARKS
72
+ // ============================================================================
73
+ console.log('🏷️ TAG SEARCH:');
74
+ const directTagTime = await benchmark('Direct MemoryService.search(tags)', async () => {
75
+ memoryService.search(undefined, ['tag1'], 10);
76
+ });
77
+ const graphqlTagTime = await benchmark('GraphQL { memories(tags) }', async () => {
78
+ await executeGraphQL({
79
+ query: '{ memories(tags: ["tag1"], limit: 10) { hash title tags } }'
80
+ }, context);
81
+ });
82
+ console.log(` → GraphQL overhead: ${((graphqlTagTime / directTagTime - 1) * 100).toFixed(1)}%\n`);
83
+ // ============================================================================
84
+ // STATS BENCHMARKS
85
+ // ============================================================================
86
+ console.log('📊 STATS:');
87
+ const directStatsTime = await benchmark('Direct MemoryService.stats()', async () => {
88
+ memoryService.stats();
89
+ });
90
+ const graphqlStatsTime = await benchmark('GraphQL { stats }', async () => {
91
+ await executeGraphQL({
92
+ query: '{ stats { totalMemories version } }'
93
+ }, context);
94
+ });
95
+ console.log(` → GraphQL overhead: ${((graphqlStatsTime / directStatsTime - 1) * 100).toFixed(1)}%\n`);
96
+ // ============================================================================
97
+ // BATCHED QUERY (GraphQL advantage)
98
+ // ============================================================================
99
+ console.log('⚡ BATCHED OPERATIONS (GraphQL advantage):');
100
+ const separateCallsTime = await benchmark('3 separate direct calls', async () => {
101
+ memoryService.search('topic', undefined, 5);
102
+ memoryService.search(undefined, ['tag1'], 5);
103
+ memoryService.stats();
104
+ });
105
+ const batchedGraphqlTime = await benchmark('1 batched GraphQL call', async () => {
106
+ await executeGraphQL({
107
+ query: `{
108
+ search: memories(query: "topic", limit: 5) { hash title }
109
+ tagged: memories(tags: ["tag1"], limit: 5) { hash title }
110
+ stats { totalMemories }
111
+ }`
112
+ }, context);
113
+ });
114
+ console.log(` → Batched is ${(separateCallsTime / batchedGraphqlTime).toFixed(1)}x the throughput of 3 separate\n`);
115
+ // ============================================================================
116
+ // SUMMARY
117
+ // ============================================================================
118
+ console.log('═══════════════════════════════════════════════════');
119
+ console.log('📋 SUMMARY:');
120
+ console.log('═══════════════════════════════════════════════════');
121
+ console.log(`
122
+ GraphQL adds ~0.3-0.6ms overhead per call for:
123
+ - Query parsing & validation
124
+ - Resolver dispatch
125
+ (Schema is cached after first call)
126
+
127
+ But enables:
128
+ - Batched queries (multiple ops in 1 call)
129
+ - Field selection (return only what you need)
130
+ - 62% reduction in MCP tools (8→3)
131
+
132
+ For MCP usage, GraphQL overhead is negligible compared to:
133
+ - Network round-trip time (~50-200ms)
134
+ - LLM processing time (~500-2000ms)
135
+ - Context token costs
136
+ `);
137
+ memoryService.close();
138
+ await cleanup();
139
+ }
140
+ runBenchmarks().catch(console.error);
141
+ //# sourceMappingURL=graphql-performance-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-performance-test.js","sourceRoot":"","sources":["../../src/tests/graphql-performance-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Quick test for GraphQL tool
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=graphql-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-test.d.ts","sourceRoot":"","sources":["../../src/tests/graphql-test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Quick test for GraphQL tool
3
+ */
4
+ import { MemoryService } from '../services/memory-service.js';
5
+ import { execute } from '../tools/memory-graphql/executor.js';
6
+ const dbPath = process.env.MEMORY_DB || './memory.db';
7
+ const memoryService = new MemoryService(dbPath);
8
+ memoryService.initialize();
9
+ const context = { memoryService, config: {} };
10
+ async function test() {
11
+ console.log('=== Testing GraphQL Tool ===\n');
12
+ // Test 1: Stats
13
+ console.log('1. Stats query:');
14
+ const stats = await execute({ query: '{ stats { totalMemories version schemaVersion } }' }, context);
15
+ console.log(JSON.stringify(stats, null, 2));
16
+ // Test 2: Search with summaries
17
+ console.log('\n2. Search with title only:');
18
+ const search = await execute({
19
+ query: '{ memories(query: "graphql", limit: 2) { hash title tags } }'
20
+ }, context);
21
+ console.log(JSON.stringify(search, null, 2));
22
+ // Test 3: Get by hash (if we got results)
23
+ if (search.data?.memories?.length > 0) {
24
+ const hash = search.data.memories[0].hash;
25
+ console.log(`\n3. Get full content by hash (${hash.slice(0, 8)}...):`);
26
+ const memory = await execute({
27
+ query: `{ memory(hash: "${hash}") { content tags createdAt } }`
28
+ }, context);
29
+ console.log(JSON.stringify(memory, null, 2));
30
+ }
31
+ // Test 4: Batched query
32
+ console.log('\n4. Batched query (search + stats in one call):');
33
+ const batched = await execute({
34
+ query: `{
35
+ recent: memories(limit: 2) { hash title }
36
+ stats { totalMemories totalRelationships }
37
+ }`
38
+ }, context);
39
+ console.log(JSON.stringify(batched, null, 2));
40
+ // Test 5: Error handling
41
+ console.log('\n5. Error handling (invalid query):');
42
+ const error = await execute({ query: '{ invalid }' }, context);
43
+ console.log(JSON.stringify(error, null, 2));
44
+ memoryService.close();
45
+ }
46
+ test().catch(console.error);
47
+ //# sourceMappingURL=graphql-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-test.js","sourceRoot":"","sources":["../../src/tests/graphql-test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAE9D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,aAAa,CAAC;AACtD,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;AAChD,aAAa,CAAC,UAAU,EAAE,CAAC;AAE3B,MAAM,OAAO,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAS,CAAC;AAErD,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,gBAAgB;IAChB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,EAAE,KAAK,EAAE,mDAAmD,EAAE,EAAE,OAAO,CAAC,CAAC;IACrG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE5C,gCAAgC;IAChC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;QAC3B,KAAK,EAAE,8DAA8D;KACtE,EAAE,OAAO,CAAC,CAAC;IACZ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7C,0CAA0C;IAC1C,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,kCAAkC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,KAAK,EAAE,mBAAmB,IAAI,iCAAiC;SAChE,EAAE,OAAO,CAAC,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,wBAAwB;IACxB,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC;QAC5B,KAAK,EAAE;;;MAGL;KACH,EAAE,OAAO,CAAC,CAAC;IACZ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE9C,yBAAyB;IACzB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE5C,aAAa,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Simple Memory MCP Server Tests
4
+ * Tests the CLI functionality of all memory tools
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=memory-server-tests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-server-tests.d.ts","sourceRoot":"","sources":["../../src/tests/memory-server-tests.ts"],"names":[],"mappings":";AAEA;;;GAGG"}