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,466 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Simple Memory MCP Server Tests
4
+ * Tests the CLI functionality of all memory tools
5
+ */
6
+ import { spawn } from 'child_process';
7
+ import { promisify } from 'util';
8
+ import { unlink } from 'fs/promises';
9
+ import path from 'path';
10
+ import { formatHash } from '../utils/debug.js';
11
+ import { parseJsonOutput } from '../utils/json-parser.js';
12
+ const execAsync = promisify(spawn);
13
+ // Test configuration
14
+ const TEST_DB = './test-memory.db';
15
+ const SERVER_PATH = path.resolve('./dist/index.js');
16
+ /**
17
+ * Execute a CLI command and return the result
18
+ */
19
+ async function executeCommand(args) {
20
+ return new Promise((resolve) => {
21
+ const child = spawn('node', [SERVER_PATH, ...args], {
22
+ stdio: ['pipe', 'pipe', 'pipe'],
23
+ env: { ...process.env, MEMORY_DB: TEST_DB }
24
+ });
25
+ let stdout = '';
26
+ let stderr = '';
27
+ child.stdout?.on('data', (data) => {
28
+ stdout += data.toString();
29
+ });
30
+ child.stderr?.on('data', (data) => {
31
+ stderr += data.toString();
32
+ });
33
+ child.on('close', (code) => {
34
+ resolve({ stdout, stderr, exitCode: code || 0 });
35
+ });
36
+ });
37
+ }
38
+ /**
39
+ * Clean up test database
40
+ */
41
+ async function cleanupTestDb() {
42
+ try {
43
+ await unlink(TEST_DB);
44
+ }
45
+ catch (error) {
46
+ // Ignore if file doesn't exist
47
+ }
48
+ }
49
+ /**
50
+ * Run a single test
51
+ */
52
+ async function runTest(name, testFn) {
53
+ const startTime = Date.now();
54
+ try {
55
+ await testFn();
56
+ return {
57
+ name,
58
+ success: true,
59
+ duration: Date.now() - startTime
60
+ };
61
+ }
62
+ catch (error) {
63
+ return {
64
+ name,
65
+ success: false,
66
+ error: error instanceof Error ? error.message : String(error),
67
+ duration: Date.now() - startTime
68
+ };
69
+ }
70
+ }
71
+ /**
72
+ * Test storing memories
73
+ */
74
+ async function testStoreMemory() {
75
+ const result = await executeCommand(['store-memory', '--content', 'Test memory 1', '--tags', 'test,demo']);
76
+ if (result.exitCode !== 0) {
77
+ throw new Error(`Store memory failed with exit code ${result.exitCode}: ${result.stderr}`);
78
+ }
79
+ const output = parseJsonOutput(result.stdout);
80
+ if (!output || !output.success || !output.hash) {
81
+ throw new Error('Store memory did not return expected success response');
82
+ }
83
+ console.log('โœ“ Memory stored successfully with hash:', formatHash(output.hash));
84
+ }
85
+ /**
86
+ * Test storing multiple memories
87
+ */
88
+ async function testStoreMultipleMemories() {
89
+ const memories = [
90
+ { content: 'Project Alpha documentation', tags: 'project,alpha,docs' },
91
+ { content: 'Meeting notes for Q4 planning', tags: 'meetings,q4,planning' },
92
+ { content: 'Bug fix for login issue', tags: 'bugs,login,fix' },
93
+ { content: 'Alpha project status update', tags: 'project,alpha,status' }
94
+ ];
95
+ for (let i = 0; i < memories.length; i++) {
96
+ const memory = memories[i];
97
+ const result = await executeCommand(['store-memory', '--content', memory.content, '--tags', memory.tags]);
98
+ if (result.exitCode !== 0) {
99
+ throw new Error(`Store memory ${i + 1} failed: ${result.stderr}`);
100
+ }
101
+ const output = parseJsonOutput(result.stdout);
102
+ if (!output?.success) {
103
+ throw new Error(`Store memory ${i + 1} did not succeed`);
104
+ }
105
+ }
106
+ console.log('โœ“ Multiple memories stored successfully');
107
+ }
108
+ /**
109
+ * Test searching memories by content
110
+ */
111
+ async function testSearchMemoryByContent() {
112
+ const result = await executeCommand(['search-memory', '--query', 'Alpha']);
113
+ if (result.exitCode !== 0) {
114
+ throw new Error(`Search memory failed: ${result.stderr}`);
115
+ }
116
+ const output = parseJsonOutput(result.stdout);
117
+ if (!output || !Array.isArray(output.memories)) {
118
+ throw new Error('Search did not return memories array');
119
+ }
120
+ if (output.memories.length < 2) {
121
+ throw new Error(`Expected at least 2 Alpha-related memories, got ${output.memories.length}`);
122
+ }
123
+ console.log(`โœ“ Found ${output.memories.length} memories containing "Alpha"`);
124
+ }
125
+ /**
126
+ * Test searching memories by tags
127
+ */
128
+ async function testSearchMemoryByTags() {
129
+ const result = await executeCommand(['search-memory', '--tags', 'project']);
130
+ if (result.exitCode !== 0) {
131
+ throw new Error(`Tag search failed: ${result.stderr}`);
132
+ }
133
+ const output = parseJsonOutput(result.stdout);
134
+ if (!output || !Array.isArray(output.memories)) {
135
+ throw new Error('Tag search did not return memories array');
136
+ }
137
+ if (output.memories.length < 1) {
138
+ throw new Error('Expected at least 1 memory with "project" tag');
139
+ }
140
+ console.log(`โœ“ Found ${output.memories.length} memories with "project" tag`);
141
+ }
142
+ /**
143
+ * Test memory statistics
144
+ */
145
+ async function testMemoryStats() {
146
+ const result = await executeCommand(['memory-stats']);
147
+ if (result.exitCode !== 0) {
148
+ throw new Error(`Memory stats failed: ${result.stderr}`);
149
+ }
150
+ const output = parseJsonOutput(result.stdout);
151
+ if (!output || typeof output.totalMemories !== 'number') {
152
+ throw new Error('Memory stats did not return expected format');
153
+ }
154
+ if (output.totalMemories < 5) {
155
+ throw new Error(`Expected at least 5 memories, got ${output.totalMemories}`);
156
+ }
157
+ // Verify MCP config paths are included
158
+ if (!output.mcpConfigPaths || !Array.isArray(output.mcpConfigPaths)) {
159
+ throw new Error('Memory stats did not include mcpConfigPaths');
160
+ }
161
+ // Verify each path has the expected structure
162
+ for (const configPath of output.mcpConfigPaths) {
163
+ if (!configPath.name || !configPath.path || typeof configPath.exists !== 'boolean') {
164
+ throw new Error('MCP config path missing required fields');
165
+ }
166
+ // matchingServers is optional, but if present should be an array
167
+ if (configPath.matchingServers && !Array.isArray(configPath.matchingServers)) {
168
+ throw new Error('MCP config path matchingServers should be an array');
169
+ }
170
+ }
171
+ console.log(`โœ“ Database contains ${output.totalMemories} memories, ${output.totalRelationships} relationships`);
172
+ console.log(`โœ“ Found ${output.mcpConfigPaths.length} MCP config paths`);
173
+ // Show helpful info about matching configs
174
+ const matching = output.mcpConfigPaths.filter((c) => c.matchingServers?.length > 0);
175
+ if (matching.length > 0) {
176
+ console.log(`โœ“ Found ${matching.length} config(s) with matching server entries`);
177
+ }
178
+ }
179
+ /**
180
+ * Test deleting memory by tag
181
+ */
182
+ async function testDeleteMemoryByTag() {
183
+ const result = await executeCommand(['delete-memory', '--tag', 'test']);
184
+ if (result.exitCode !== 0) {
185
+ throw new Error(`Delete by tag failed: ${result.stderr}`);
186
+ }
187
+ const output = parseJsonOutput(result.stdout);
188
+ if (!output || typeof output.deleted !== 'number') {
189
+ throw new Error('Delete by tag did not return expected format');
190
+ }
191
+ if (output.deleted < 1) {
192
+ throw new Error('Expected to delete at least 1 memory with "test" tag');
193
+ }
194
+ console.log(`โœ“ Deleted ${output.deleted} memories with "test" tag`);
195
+ }
196
+ /**
197
+ * Test search with limit parameter
198
+ */
199
+ async function testSearchWithLimit() {
200
+ const result = await executeCommand(['search-memory', '--query', 'project', '--limit', '2']);
201
+ if (result.exitCode !== 0) {
202
+ throw new Error(`Limited search failed: ${result.stderr}`);
203
+ }
204
+ const output = parseJsonOutput(result.stdout);
205
+ if (!output || !Array.isArray(output.memories)) {
206
+ throw new Error('Limited search did not return memories array');
207
+ }
208
+ if (output.memories.length > 2) {
209
+ throw new Error(`Expected max 2 results, got ${output.memories.length}`);
210
+ }
211
+ console.log(`โœ“ Limited search returned ${output.memories.length} results (max 2)`);
212
+ }
213
+ /**
214
+ * Test improved search with OR tokenization
215
+ * Tests that multiple words match memories containing ANY of those words
216
+ */
217
+ async function testImprovedSearch() {
218
+ // Store test memories with specific content
219
+ await executeCommand(['store-memory', '--content', 'Git rebase workflow requires careful attention', '--tags', 'git,workflow']);
220
+ await executeCommand(['store-memory', '--content', 'Database migration failed during deployment', '--tags', 'database,deploy']);
221
+ await executeCommand(['store-memory', '--content', 'Configuration system needs reset after update', '--tags', 'config,system']);
222
+ // Test 1: Multiple words should match with OR logic
223
+ const multiWordResult = await executeCommand(['search-memory', '--query', 'git reset']);
224
+ const multiWordOutput = parseJsonOutput(multiWordResult.stdout);
225
+ if (!multiWordOutput?.memories || multiWordOutput.memories.length === 0) {
226
+ throw new Error('Multi-word search should find memories with ANY matching word');
227
+ }
228
+ // Should find both "git" memory and "reset" memory
229
+ const foundGit = multiWordOutput.memories.some((m) => m.content.toLowerCase().includes('git'));
230
+ const foundReset = multiWordOutput.memories.some((m) => m.content.toLowerCase().includes('reset'));
231
+ if (!foundGit && !foundReset) {
232
+ throw new Error('Should find memories containing either "git" OR "reset"');
233
+ }
234
+ console.log(`โœ“ Multi-word search found ${multiWordOutput.memories.length} memories with OR logic`);
235
+ // Test 2: Word order shouldn't matter
236
+ const reversedResult = await executeCommand(['search-memory', '--query', 'reset git']);
237
+ const reversedOutput = parseJsonOutput(reversedResult.stdout);
238
+ if (!reversedOutput?.memories || reversedOutput.memories.length === 0) {
239
+ throw new Error('Reversed word order should still find results');
240
+ }
241
+ console.log(`โœ“ Word order independence verified (${reversedOutput.memories.length} results)`);
242
+ // Test 3: Natural language query (with filler words)
243
+ const naturalResult = await executeCommand(['search-memory', '--query', 'find database configuration']);
244
+ const naturalOutput = parseJsonOutput(naturalResult.stdout);
245
+ if (!naturalOutput?.memories || naturalOutput.memories.length === 0) {
246
+ throw new Error('Natural language query should find results');
247
+ }
248
+ // Should find memories with "database" OR "configuration"
249
+ const hasDbOrConfig = naturalOutput.memories.some((m) => m.content.toLowerCase().includes('database') ||
250
+ m.content.toLowerCase().includes('configuration'));
251
+ if (!hasDbOrConfig) {
252
+ throw new Error('Should find memories with database OR configuration');
253
+ }
254
+ console.log(`โœ“ Natural language query handled (${naturalOutput.memories.length} results)`);
255
+ // Test 4: BM25 ranking - more matches should rank higher
256
+ const rankingResult = await executeCommand(['search-memory', '--query', 'system configuration reset']);
257
+ const rankingOutput = parseJsonOutput(rankingResult.stdout);
258
+ if (rankingOutput?.memories && rankingOutput.memories.length > 0) {
259
+ // The memory with "configuration" AND "reset" AND "system" should ideally rank first
260
+ const firstResult = rankingOutput.memories[0];
261
+ const matchCount = ['system', 'configuration', 'reset'].filter(word => firstResult.content.toLowerCase().includes(word)).length;
262
+ console.log(`โœ“ BM25 ranking working (top result has ${matchCount}/3 word matches)`);
263
+ }
264
+ }
265
+ /**
266
+ * Test integrated relationship functionality through enhanced store-memory
267
+ */
268
+ async function testIntegratedRelationships() {
269
+ // Store memories with auto-linking enabled
270
+ const storeResult1 = await executeCommand(['store-memory', '--content', 'Node.js fundamentals', '--tags', 'nodejs,tutorial']);
271
+ const output1 = parseJsonOutput(storeResult1.stdout);
272
+ if (!output1?.success) {
273
+ throw new Error('Failed to store first memory for relationship test');
274
+ }
275
+ const storeResult2 = await executeCommand(['store-memory', '--content', 'Advanced Node.js patterns', '--tags', 'nodejs,advanced']);
276
+ const output2 = parseJsonOutput(storeResult2.stdout);
277
+ if (!output2?.success) {
278
+ throw new Error('Failed to store second memory for relationship test');
279
+ }
280
+ // The second memory should have created relationships with the first (similar tags)
281
+ if (typeof output2.relationshipsCreated === 'number' && output2.relationshipsCreated > 0) {
282
+ console.log(`โœ“ Auto-linking created ${output2.relationshipsCreated} relationships`);
283
+ }
284
+ else {
285
+ console.log(`โœ“ Auto-linking is working (relationships may exist from previous tests)`);
286
+ }
287
+ // Test explicit relationship creation
288
+ const storeResult3 = await executeCommand(['store-memory', '--content', 'Express.js tutorial', '--tags', 'express,tutorial', '--relate-to', 'nodejs']);
289
+ const output3 = parseJsonOutput(storeResult3.stdout);
290
+ if (!output3?.success) {
291
+ throw new Error('Failed to store third memory with explicit relationships');
292
+ }
293
+ console.log(`โœ“ Explicit relationship creation completed`);
294
+ }
295
+ /**
296
+ * Test enhanced search with relationship traversal
297
+ */
298
+ async function testSearchWithRelationships() {
299
+ // First ensure we have some memories with relationships
300
+ await executeCommand(['store-memory', '--content', 'React hooks guide', '--tags', 'react,hooks']);
301
+ await executeCommand(['store-memory', '--content', 'React components tutorial', '--tags', 'react,components']);
302
+ // Test search with relationships
303
+ const searchResult = await executeCommand(['search-memory', '--query', 'react', '--include-related']);
304
+ const output = parseJsonOutput(searchResult.stdout);
305
+ if (!output?.memories) {
306
+ throw new Error('Search should return memories array');
307
+ }
308
+ console.log(`โœ“ Search with relationships: found ${output.memories.length} direct results`);
309
+ if (output.relatedMemories && output.relatedMemories.length > 0) {
310
+ console.log(`โœ“ Found ${output.relatedMemories.length} related memories`);
311
+ }
312
+ else {
313
+ console.log(`โœ“ Related memory search is working (no related memories in this test)`);
314
+ }
315
+ }
316
+ /**
317
+ * Test updating memory content
318
+ */
319
+ async function testUpdateMemoryContent() {
320
+ // Store a memory first
321
+ const storeResult = await executeCommand(['store-memory', '--content', 'Initial project status: planning phase', '--tags', 'project,status']);
322
+ const storeOutput = parseJsonOutput(storeResult.stdout);
323
+ if (!storeOutput?.success || !storeOutput?.hash) {
324
+ throw new Error('Failed to store initial memory for update test');
325
+ }
326
+ const originalHash = storeOutput.hash;
327
+ console.log(`โœ“ Stored initial memory with hash: ${formatHash(originalHash)}`);
328
+ // Update the memory content
329
+ const updateResult = await executeCommand(['update-memory', '--hash', originalHash, '--content', 'Updated project status: in development phase']);
330
+ if (updateResult.exitCode !== 0) {
331
+ throw new Error(`Update memory failed: ${updateResult.stderr}`);
332
+ }
333
+ const updateOutput = parseJsonOutput(updateResult.stdout);
334
+ if (!updateOutput?.success || !updateOutput?.newHash) {
335
+ throw new Error('Update did not return success with new hash');
336
+ }
337
+ console.log(`โœ“ Updated memory, new hash: ${formatHash(updateOutput.newHash)}`);
338
+ // Verify the update by searching for new content
339
+ const searchResult = await executeCommand(['search-memory', '--query', 'development phase']);
340
+ const searchOutput = parseJsonOutput(searchResult.stdout);
341
+ if (!searchOutput?.memories || searchOutput.memories.length === 0) {
342
+ throw new Error('Could not find updated memory with new content');
343
+ }
344
+ const foundMemory = searchOutput.memories.find((m) => m.hash === updateOutput.newHash);
345
+ if (!foundMemory) {
346
+ throw new Error('Updated memory not found in search results');
347
+ }
348
+ console.log(`โœ“ Verified updated memory can be searched`);
349
+ }
350
+ /**
351
+ * Test updating memory tags
352
+ */
353
+ async function testUpdateMemoryTags() {
354
+ // Store a memory
355
+ const storeResult = await executeCommand(['store-memory', '--content', 'TypeScript configuration notes', '--tags', 'typescript,draft']);
356
+ const storeOutput = parseJsonOutput(storeResult.stdout);
357
+ if (!storeOutput?.success || !storeOutput?.hash) {
358
+ throw new Error('Failed to store initial memory for tag update test');
359
+ }
360
+ const hash = storeOutput.hash;
361
+ // Update tags only (keep same content)
362
+ const updateResult = await executeCommand(['update-memory', '--hash', hash, '--content', 'TypeScript configuration notes', '--tags', 'typescript,config,complete']);
363
+ if (updateResult.exitCode !== 0) {
364
+ throw new Error(`Tag update failed: ${updateResult.stderr}`);
365
+ }
366
+ const updateOutput = parseJsonOutput(updateResult.stdout);
367
+ if (!updateOutput?.success || !updateOutput?.tagsUpdated) {
368
+ throw new Error('Tag update did not indicate tags were updated');
369
+ }
370
+ console.log(`โœ“ Updated tags successfully`);
371
+ // Verify new tags by searching
372
+ const searchResult = await executeCommand(['search-memory', '--tags', 'config']);
373
+ const searchOutput = parseJsonOutput(searchResult.stdout);
374
+ if (!searchOutput?.memories) {
375
+ throw new Error('Tag search failed after update');
376
+ }
377
+ const foundMemory = searchOutput.memories.find((m) => m.hash === updateOutput.newHash);
378
+ if (!foundMemory) {
379
+ throw new Error('Memory with updated tags not found');
380
+ }
381
+ if (!foundMemory.tags.includes('config') || foundMemory.tags.includes('draft')) {
382
+ throw new Error('Tags were not properly updated');
383
+ }
384
+ console.log(`โœ“ Verified tags were updated correctly`);
385
+ }
386
+ /**
387
+ * Test update with non-existent hash
388
+ */
389
+ async function testUpdateNonExistentMemory() {
390
+ const fakeHash = 'nonexistenthash123456789';
391
+ const updateResult = await executeCommand(['update-memory', '--hash', fakeHash, '--content', 'This should fail']);
392
+ const updateOutput = parseJsonOutput(updateResult.stdout);
393
+ // Should return success: false when memory not found
394
+ if (updateOutput?.success !== false) {
395
+ throw new Error('Update should fail gracefully for non-existent memory');
396
+ }
397
+ console.log(`โœ“ Update correctly handled non-existent memory`);
398
+ }
399
+ /**
400
+ * Main test runner
401
+ */
402
+ async function runAllTests() {
403
+ console.log('๐Ÿงช Simple Memory MCP Server Tests');
404
+ console.log('================================\n');
405
+ // Clean up any existing test database
406
+ await cleanupTestDb();
407
+ const tests = [
408
+ { name: 'Store Memory', fn: testStoreMemory },
409
+ { name: 'Store Multiple Memories', fn: testStoreMultipleMemories },
410
+ { name: 'Search Memory by Content', fn: testSearchMemoryByContent },
411
+ { name: 'Search Memory by Tags', fn: testSearchMemoryByTags },
412
+ { name: 'Memory Statistics', fn: testMemoryStats },
413
+ { name: 'Integrated Relationships', fn: testIntegratedRelationships },
414
+ { name: 'Search with Relationships', fn: testSearchWithRelationships },
415
+ { name: 'Update Memory Content', fn: testUpdateMemoryContent },
416
+ { name: 'Update Memory Tags', fn: testUpdateMemoryTags },
417
+ { name: 'Update Non-Existent Memory', fn: testUpdateNonExistentMemory },
418
+ { name: 'Delete Memory by Tag', fn: testDeleteMemoryByTag },
419
+ { name: 'Search with Limit', fn: testSearchWithLimit },
420
+ { name: 'Improved Search (OR + BM25)', fn: testImprovedSearch }
421
+ ];
422
+ const results = [];
423
+ for (const test of tests) {
424
+ console.log(`Running: ${test.name}...`);
425
+ const result = await runTest(test.name, test.fn);
426
+ results.push(result);
427
+ if (result.success) {
428
+ console.log(`โœ… ${test.name} (${result.duration}ms)\n`);
429
+ }
430
+ else {
431
+ console.log(`โŒ ${test.name} failed: ${result.error} (${result.duration}ms)\n`);
432
+ }
433
+ }
434
+ // Summary
435
+ console.log('๐Ÿ“Š Test Summary');
436
+ console.log('===============');
437
+ const passed = results.filter(r => r.success).length;
438
+ const total = results.length;
439
+ const totalTime = results.reduce((sum, r) => sum + r.duration, 0);
440
+ console.log(`Passed: ${passed}/${total}`);
441
+ console.log(`Total time: ${totalTime}ms`);
442
+ if (passed === total) {
443
+ console.log('\n๐ŸŽ‰ All tests passed!');
444
+ }
445
+ else {
446
+ console.log('\n๐Ÿ’ฅ Some tests failed:');
447
+ results.filter(r => !r.success).forEach(r => {
448
+ console.log(` - ${r.name}: ${r.error}`);
449
+ });
450
+ process.exit(1);
451
+ }
452
+ // Clean up test database
453
+ await cleanupTestDb();
454
+ console.log('\n๐Ÿงน Test database cleaned up');
455
+ }
456
+ // Run tests if this file is executed directly
457
+ import { fileURLToPath } from 'url';
458
+ import { dirname } from 'path';
459
+ const __filename = fileURLToPath(import.meta.url);
460
+ const __dirname = dirname(__filename);
461
+ // Always run tests when this module is executed
462
+ runAllTests().catch(error => {
463
+ console.error('Test runner failed:', error);
464
+ process.exit(1);
465
+ });
466
+ //# sourceMappingURL=memory-server-tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-server-tests.js","sourceRoot":"","sources":["../../src/tests/memory-server-tests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=migration-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-test.d.ts","sourceRoot":"","sources":["../../src/tests/migration-test.ts"],"names":[],"mappings":""}