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,209 @@
1
+ /**
2
+ * Backup Service Test Suite
3
+ *
4
+ * Tests the backup service which now exports memories as JSON files:
5
+ * - Automatic backup on write operations
6
+ * - Backup throttling (interval-based)
7
+ * - Backup file cleanup (max backups)
8
+ * - JSON export format validation
9
+ * - Source identifier support
10
+ * - Manual backup creation
11
+ */
12
+ import { existsSync, unlinkSync, readdirSync, readFileSync, rmdirSync, mkdirSync } from 'fs';
13
+ import { join } from 'path';
14
+ import { MemoryService } from '../services/memory-service.js';
15
+ import { BackupService } from '../services/backup-service.js';
16
+ import { clearConfigCache } from '../utils/config.js';
17
+ const TEST_DB = './test-backup.db';
18
+ const BACKUP_DIR = './test-backup-dir';
19
+ // ==========================================
20
+ // Test Utilities
21
+ // ==========================================
22
+ function cleanup() {
23
+ clearConfigCache();
24
+ [TEST_DB, TEST_DB + '-wal', TEST_DB + '-shm'].forEach(file => {
25
+ try {
26
+ if (existsSync(file))
27
+ unlinkSync(file);
28
+ }
29
+ catch { }
30
+ });
31
+ try {
32
+ if (existsSync(BACKUP_DIR)) {
33
+ readdirSync(BACKUP_DIR).forEach(f => unlinkSync(join(BACKUP_DIR, f)));
34
+ rmdirSync(BACKUP_DIR);
35
+ }
36
+ }
37
+ catch { }
38
+ }
39
+ function assert(condition, message) {
40
+ if (!condition)
41
+ throw new Error(`[FAIL] ${message}`);
42
+ console.log(`[PASS] ${message}`);
43
+ }
44
+ function getBackupFiles() {
45
+ if (!existsSync(BACKUP_DIR))
46
+ return [];
47
+ return readdirSync(BACKUP_DIR).filter(f => f.endsWith('.json') && f.startsWith('smem_'));
48
+ }
49
+ function createBackupService(memService, overrides = {}) {
50
+ return new BackupService({
51
+ backupPath: BACKUP_DIR,
52
+ autoBackupInterval: 0,
53
+ maxBackups: 10,
54
+ getBackupData: () => memService.exportMemories(),
55
+ ...overrides
56
+ });
57
+ }
58
+ // Data-driven validation for memory fields
59
+ const REQUIRED_MEMORY_FIELDS = ['id', 'content', 'hash', 'createdAt'];
60
+ function assertMemoryFormat(memory, label = 'Memory') {
61
+ REQUIRED_MEMORY_FIELDS.forEach(field => {
62
+ assert(memory[field] !== undefined, `${label} has ${field}`);
63
+ });
64
+ assert(Array.isArray(memory.tags), `${label} has tags array`);
65
+ }
66
+ function assertBackupMetadata(data, expectedMemories, source) {
67
+ assert(data.totalMemories === expectedMemories, `Backup contains ${expectedMemories} memories`);
68
+ assert(data.exportVersion !== undefined, 'Export version present');
69
+ assert(data.exportedAt !== undefined, 'Export timestamp present');
70
+ assert(Array.isArray(data.memories), 'Memories is an array');
71
+ if (source) {
72
+ assert(data.source === source, `Source is "${source}"`);
73
+ }
74
+ }
75
+ const THROTTLE_TEST_CASES = [
76
+ { name: 'immediately after backup', interval: 60, elapsedMinutes: 0, shouldTrigger: false },
77
+ { name: 'after 30 minutes (half interval)', interval: 60, elapsedMinutes: 30, shouldTrigger: false },
78
+ { name: 'after 59 minutes (just before)', interval: 60, elapsedMinutes: 59, shouldTrigger: false },
79
+ { name: 'after 61 minutes (just after)', interval: 60, elapsedMinutes: 61, shouldTrigger: true },
80
+ { name: 'after 24 hours', interval: 60, elapsedMinutes: 1440, shouldTrigger: true },
81
+ { name: 'with interval=0 (always)', interval: 0, elapsedMinutes: 0, shouldTrigger: true },
82
+ ];
83
+ // ==========================================
84
+ // Test Runner
85
+ // ==========================================
86
+ async function runTests() {
87
+ console.log('\n=== Starting Backup Service Tests ===\n');
88
+ cleanup();
89
+ mkdirSync(BACKUP_DIR, { recursive: true });
90
+ const memService = new MemoryService(TEST_DB);
91
+ memService.initialize();
92
+ // Seed test data
93
+ const testMemories = [
94
+ { content: 'Test memory 1', tags: ['test', 'backup'] },
95
+ { content: 'Test memory 2', tags: ['test', 'important'] },
96
+ { content: 'Test memory 3 with relationship', tags: ['test'] },
97
+ ];
98
+ testMemories.forEach(m => memService.store(m.content, m.tags));
99
+ try {
100
+ // ==========================================
101
+ // Test 1: JSON Export Creation
102
+ // ==========================================
103
+ console.log('[TEST 1] BackupService creates JSON export files');
104
+ const backupService = createBackupService(memService, { source: 'test-source' });
105
+ const backupPath = backupService.backup('test');
106
+ assert(backupPath !== null, 'Backup was created');
107
+ assert(existsSync(backupPath), 'Backup file exists');
108
+ assert(backupPath.endsWith('.json'), 'Has .json extension');
109
+ assert(backupPath.includes('smem_test_'), 'Filename includes label');
110
+ const backupData = JSON.parse(readFileSync(backupPath, 'utf-8'));
111
+ assertBackupMetadata(backupData, 3, 'test-source');
112
+ // ==========================================
113
+ // Test 2: Memory Format Validation
114
+ // ==========================================
115
+ console.log('\n[TEST 2] Backup content matches export format');
116
+ backupData.memories.forEach((m, i) => assertMemoryFormat(m, `Memory ${i + 1}`));
117
+ const memory1 = backupData.memories.find((m) => m.content === 'Test memory 1');
118
+ assert(memory1 !== undefined, 'Found Test memory 1');
119
+ assert(memory1.tags.includes('test') && memory1.tags.includes('backup'), 'Memory 1 has expected tags');
120
+ // ==========================================
121
+ // Test 3: Throttle Logic (Data-Driven)
122
+ // ==========================================
123
+ console.log('\n[TEST 3] Backup throttling (data-driven)');
124
+ const originalDateNow = Date.now;
125
+ for (const tc of THROTTLE_TEST_CASES) {
126
+ const service = createBackupService(memService, { autoBackupInterval: tc.interval });
127
+ service.backup('throttle-test');
128
+ const baseTime = Date.now();
129
+ Date.now = () => baseTime + (tc.elapsedMinutes * 60 * 1000);
130
+ const result = service.shouldBackup();
131
+ assert(result === tc.shouldTrigger, `${tc.name}: shouldBackup=${tc.shouldTrigger}`);
132
+ Date.now = originalDateNow;
133
+ }
134
+ // ==========================================
135
+ // Test 4: Backup Cleanup (Max Backups)
136
+ // ==========================================
137
+ console.log('\n[TEST 4] Backup cleanup (keeps max backups)');
138
+ const cleanupService = createBackupService(memService, { maxBackups: 3 });
139
+ for (let i = 0; i < 5; i++) {
140
+ await new Promise(resolve => setTimeout(resolve, 50));
141
+ cleanupService.backup(`cleanup${i}`);
142
+ }
143
+ const backupCount = getBackupFiles().length;
144
+ assert(backupCount <= 3, `Cleanup kept max 3 backups (found ${backupCount})`);
145
+ // ==========================================
146
+ // Test 5: Utility Methods
147
+ // ==========================================
148
+ console.log('\n[TEST 5] Utility methods (getBackupCount, getTimeSinceLastBackup)');
149
+ const utilService = createBackupService(memService);
150
+ utilService.backup('util-test');
151
+ const count = utilService.getBackupCount();
152
+ assert(count === getBackupFiles().length, `getBackupCount matches file count (${count})`);
153
+ const timeSince = utilService.getTimeSinceLastBackup();
154
+ assert(timeSince >= 0 && timeSince < 1, `Time since backup is ~0 minutes (${timeSince})`);
155
+ // ==========================================
156
+ // Test 6: MemoryService Integration
157
+ // ==========================================
158
+ console.log('\n[TEST 6] Integration with MemoryService (via env vars)');
159
+ cleanup();
160
+ mkdirSync(BACKUP_DIR, { recursive: true });
161
+ process.env.MEMORY_DB = TEST_DB;
162
+ process.env.MEMORY_BACKUP_PATH = BACKUP_DIR;
163
+ process.env.MEMORY_BACKUP_INTERVAL = '0';
164
+ process.env.MEMORY_BACKUP_SOURCE = 'integration-test';
165
+ clearConfigCache();
166
+ const integratedService = new MemoryService(TEST_DB);
167
+ integratedService.initialize();
168
+ integratedService.store('Integration test memory', ['integration']);
169
+ const integrationBackups = getBackupFiles();
170
+ assert(integrationBackups.length > 0, 'MemoryService triggered backup on store');
171
+ const latestBackup = integrationBackups.sort().reverse()[0];
172
+ const intContent = JSON.parse(readFileSync(join(BACKUP_DIR, latestBackup), 'utf-8'));
173
+ assert(intContent.source === 'integration-test', 'Source from env var is used');
174
+ assert(intContent.totalMemories >= 1, 'Backup contains stored memory');
175
+ const stats = integratedService.stats();
176
+ assert(stats.backupEnabled === true, 'Stats show backup enabled');
177
+ assert(stats.backupPath === BACKUP_DIR, 'Stats show correct backup path');
178
+ integratedService.close();
179
+ // Cleanup env vars
180
+ delete process.env.MEMORY_DB;
181
+ delete process.env.MEMORY_BACKUP_PATH;
182
+ delete process.env.MEMORY_BACKUP_INTERVAL;
183
+ delete process.env.MEMORY_BACKUP_SOURCE;
184
+ memService.close();
185
+ console.log('\n[SUCCESS] All Backup Service tests passed!\n');
186
+ }
187
+ catch (error) {
188
+ console.error('\n[ERROR] Test failed:', error);
189
+ throw error;
190
+ }
191
+ finally {
192
+ cleanup();
193
+ console.log('[CLEANUP] Cleanup completed\n');
194
+ }
195
+ }
196
+ // Run tests if executed directly
197
+ if (process.argv[1]?.endsWith('backup-test.js')) {
198
+ runTests()
199
+ .then(() => {
200
+ console.log('[DONE] Backup Service test suite completed successfully');
201
+ process.exit(0);
202
+ })
203
+ .catch((error) => {
204
+ console.error('[FAILED] Test suite failed:', error);
205
+ process.exit(1);
206
+ });
207
+ }
208
+ export { runTests };
209
+ //# sourceMappingURL=backup-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup-test.js","sourceRoot":"","sources":["../../src/tests/backup-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Export/Import Feature Test Suite
3
+ *
4
+ * Tests the export-memory and import-memory tools for:
5
+ * - Basic export/import functionality
6
+ * - Tag filtering
7
+ * - Date range filtering (daysAgo, startDate, endDate)
8
+ * - Limit parameter
9
+ * - Duplicate detection
10
+ * - Relationship preservation
11
+ * - Cross-database portability
12
+ */
13
+ declare function runTests(): Promise<void>;
14
+ export { runTests };
15
+ //# sourceMappingURL=export-import-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-import-test.d.ts","sourceRoot":"","sources":["../../src/tests/export-import-test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8CH,iBAAe,QAAQ,kBAmNtB;AAgBD,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Export/Import Feature Test Suite
3
+ *
4
+ * Tests the export-memory and import-memory tools for:
5
+ * - Basic export/import functionality
6
+ * - Tag filtering
7
+ * - Date range filtering (daysAgo, startDate, endDate)
8
+ * - Limit parameter
9
+ * - Duplicate detection
10
+ * - Relationship preservation
11
+ * - Cross-database portability
12
+ */
13
+ import { existsSync, unlinkSync } from 'fs';
14
+ import { MemoryService } from '../services/memory-service.js';
15
+ import { toolRegistry } from '../tools/index.js';
16
+ const TEST_DB_EXPORT = './test-export-import-source.db';
17
+ const TEST_DB_IMPORT = './test-export-import-target.db';
18
+ const TEST_JSON_ALL = './test-export-all.json';
19
+ const TEST_JSON_FILTERED = './test-export-filtered.json';
20
+ // Test utilities
21
+ function cleanup() {
22
+ [TEST_DB_EXPORT, TEST_DB_IMPORT, TEST_JSON_ALL, TEST_JSON_FILTERED].forEach(file => {
23
+ if (existsSync(file)) {
24
+ unlinkSync(file);
25
+ }
26
+ });
27
+ }
28
+ function assert(condition, message) {
29
+ if (!condition) {
30
+ throw new Error(`[FAIL] Assertion failed: ${message}`);
31
+ }
32
+ console.log(`[PASS] ${message}`);
33
+ }
34
+ async function setupTestData(service) {
35
+ // Store test memories with various tags and timestamps
36
+ await service.store('First memory about TypeScript', ['typescript', 'programming', 'work']);
37
+ // Wait 1ms to ensure different timestamps
38
+ await new Promise(resolve => setTimeout(resolve, 1));
39
+ await service.store('Second memory about JavaScript', ['javascript', 'programming', 'work']);
40
+ await new Promise(resolve => setTimeout(resolve, 1));
41
+ await service.store('Personal note about weekend plans', ['personal', 'weekend']);
42
+ await new Promise(resolve => setTimeout(resolve, 1));
43
+ await service.store('Bug fix for authentication issue', ['bug', 'fix', 'work', 'auth']);
44
+ await new Promise(resolve => setTimeout(resolve, 1));
45
+ await service.store('Learning about React hooks', ['react', 'learning', 'javascript']);
46
+ }
47
+ async function runTests() {
48
+ console.log('\n=== Starting Export/Import Tests ===\n');
49
+ cleanup();
50
+ try {
51
+ // ==========================================
52
+ // Test 1: Setup and Export All
53
+ // ==========================================
54
+ console.log('[TEST 1] Export all memories');
55
+ const exportService = new MemoryService(TEST_DB_EXPORT);
56
+ exportService.initialize();
57
+ await setupTestData(exportService);
58
+ const exportContext = {
59
+ memoryService: exportService,
60
+ config: {}
61
+ };
62
+ const exportAllResult = await toolRegistry.handle('export-memory', {
63
+ output: TEST_JSON_ALL
64
+ }, exportContext);
65
+ assert(exportAllResult.success === true, 'Export all memories succeeded');
66
+ assert(exportAllResult.totalMemories === 5, 'Exported 5 memories');
67
+ assert(existsSync(TEST_JSON_ALL), 'Export file created');
68
+ // ==========================================
69
+ // Test 2: Export with Tag Filter
70
+ // ==========================================
71
+ console.log('\n[TEST 2] Export with tag filter');
72
+ const exportFilteredResult = await toolRegistry.handle('export-memory', {
73
+ output: TEST_JSON_FILTERED,
74
+ tags: ['work']
75
+ }, exportContext);
76
+ assert(exportFilteredResult.success === true, 'Export filtered memories succeeded');
77
+ assert(exportFilteredResult.totalMemories === 3, 'Exported 3 work-tagged memories');
78
+ assert(existsSync(TEST_JSON_FILTERED), 'Filtered export file created');
79
+ // ==========================================
80
+ // Test 3: Export with Limit
81
+ // ==========================================
82
+ console.log('\n[TEST 3] Export with limit');
83
+ const exportLimitResult = await toolRegistry.handle('export-memory', {
84
+ output: './test-limit.json',
85
+ limit: 2
86
+ }, exportContext);
87
+ assert(exportLimitResult.success === true, 'Export with limit succeeded');
88
+ assert(exportLimitResult.totalMemories === 2, 'Limited to 2 memories');
89
+ unlinkSync('./test-limit.json');
90
+ // ==========================================
91
+ // Test 4: Export with Limit (No Tags) - Most Recent
92
+ // ==========================================
93
+ console.log('\n[TEST 4] Export with limit only (should get most recent memories)');
94
+ const exportLimitOnlyResult = await toolRegistry.handle('export-memory', {
95
+ output: './test-limit-only.json',
96
+ limit: 3
97
+ }, exportContext);
98
+ assert(exportLimitOnlyResult.success === true, 'Export with limit only succeeded');
99
+ assert(exportLimitOnlyResult.totalMemories === 3, 'Got 3 most recent memories');
100
+ // Verify that we got the most recent memories (last 3 stored)
101
+ const { readFileSync } = await import('fs');
102
+ const limitOnlyData = JSON.parse(readFileSync('./test-limit-only.json', 'utf-8'));
103
+ const expectedContents = ['Learning about React hooks', 'Bug fix for authentication issue', 'Personal note about weekend plans'];
104
+ const actualContents = limitOnlyData.memories.map((m) => m.content);
105
+ const hasExpectedMemories = expectedContents.every(expected => actualContents.includes(expected));
106
+ assert(hasExpectedMemories, 'Export returned most recent memories (not FTS search)');
107
+ unlinkSync('./test-limit-only.json');
108
+ // ==========================================
109
+ // Test 5: Export with daysAgo
110
+ // ==========================================
111
+ console.log('\n[TEST 5] Export with daysAgo (should get all since just created)');
112
+ const exportDaysResult = await toolRegistry.handle('export-memory', {
113
+ output: './test-days.json',
114
+ daysAgo: 1
115
+ }, exportContext);
116
+ assert(exportDaysResult.success === true, 'Export with daysAgo succeeded');
117
+ assert(exportDaysResult.totalMemories === 5, 'Got all memories from today');
118
+ unlinkSync('./test-days.json');
119
+ exportService.close();
120
+ // ==========================================
121
+ // Test 6: Import to New Database
122
+ // ==========================================
123
+ console.log('\n[TEST 6] Import all memories to new database');
124
+ const importService = new MemoryService(TEST_DB_IMPORT);
125
+ importService.initialize();
126
+ const importContext = {
127
+ memoryService: importService,
128
+ config: {}
129
+ };
130
+ const importResult = await toolRegistry.handle('import-memory', {
131
+ input: TEST_JSON_ALL
132
+ }, importContext);
133
+ assert(importResult.success === true, 'Import succeeded');
134
+ assert(importResult.imported === 5, 'Imported 5 memories');
135
+ assert(importResult.skipped === 0, 'No duplicates skipped');
136
+ assert(importResult.errors.length === 0, 'No import errors');
137
+ // Verify imported data
138
+ const importedMemories = importService.search(undefined, undefined, 10);
139
+ assert(importedMemories.length === 5, 'All 5 memories are searchable');
140
+ // ==========================================
141
+ // Test 7: Import Duplicates (Skip)
142
+ // ==========================================
143
+ console.log('\n[TEST 7] Import duplicates with skip-duplicates flag');
144
+ const importDuplicatesResult = await toolRegistry.handle('import-memory', {
145
+ input: TEST_JSON_ALL,
146
+ skipDuplicates: true
147
+ }, importContext);
148
+ assert(importDuplicatesResult.success === true, 'Import with skip succeeded');
149
+ assert(importDuplicatesResult.imported === 0, 'No new memories imported');
150
+ assert(importDuplicatesResult.skipped === 5, 'All 5 duplicates skipped');
151
+ // ==========================================
152
+ // Test 8: Relationship Preservation
153
+ // ==========================================
154
+ console.log('\n[TEST 8] Verify relationship preservation');
155
+ // Check if relationships were restored
156
+ const memoriesWithRelationships = importService.search('TypeScript', undefined, 10);
157
+ if (memoriesWithRelationships.length > 0) {
158
+ const related = importService.getRelated(memoriesWithRelationships[0].hash, 5);
159
+ console.log(` Found ${related.length} related memories (relationships preserved)`);
160
+ }
161
+ // ==========================================
162
+ // Test 9: Import Filtered Export
163
+ // ==========================================
164
+ console.log('\n[TEST 9] Import filtered export (work-only)');
165
+ // Create a fresh database for filtered import test
166
+ const importFilteredService = new MemoryService('./test-filtered-import.db');
167
+ importFilteredService.initialize();
168
+ const filteredContext = {
169
+ memoryService: importFilteredService,
170
+ config: {}
171
+ };
172
+ const importFilteredResult = await toolRegistry.handle('import-memory', {
173
+ input: TEST_JSON_FILTERED
174
+ }, filteredContext);
175
+ assert(importFilteredResult.success === true, 'Filtered import succeeded');
176
+ assert(importFilteredResult.imported === 3, 'Imported 3 work memories');
177
+ const workMemories = importFilteredService.search(undefined, ['work'], 10);
178
+ assert(workMemories.length === 3, 'All imported memories have work tag');
179
+ importFilteredService.close();
180
+ unlinkSync('./test-filtered-import.db');
181
+ // ==========================================
182
+ // Test 10: Export Metadata Validation
183
+ // ==========================================
184
+ console.log('\n[TEST 10] Validate export metadata');
185
+ const fs = await import('fs');
186
+ const exportData = JSON.parse(fs.readFileSync(TEST_JSON_ALL, 'utf-8'));
187
+ assert(exportData.exportVersion !== undefined && exportData.exportVersion.match(/^\d+\.\d+\.\d+$/), 'Export version follows semver format (x.y.z)');
188
+ assert(exportData.exportedAt !== undefined, 'Export timestamp present');
189
+ assert(exportData.totalMemories === 5, 'Total count matches');
190
+ assert(Array.isArray(exportData.memories), 'Memories is an array');
191
+ assert(exportData.memories[0].hash !== undefined, 'Memory has hash');
192
+ assert(exportData.memories[0].content !== undefined, 'Memory has content');
193
+ assert(Array.isArray(exportData.memories[0].tags), 'Memory has tags array');
194
+ // ==========================================
195
+ // Test 11: Tag Filtering Accuracy
196
+ // ==========================================
197
+ console.log('\n[TEST 11] Verify tag filtering accuracy');
198
+ const workOnlyData = JSON.parse(fs.readFileSync(TEST_JSON_FILTERED, 'utf-8'));
199
+ const allHaveWorkTag = workOnlyData.memories.every((m) => m.tags.includes('work'));
200
+ assert(allHaveWorkTag, 'All filtered memories contain work tag');
201
+ importService.close();
202
+ console.log('\n[SUCCESS] All Export/Import tests passed!\n');
203
+ }
204
+ catch (error) {
205
+ console.error('\n[ERROR] Test failed:', error);
206
+ throw error;
207
+ }
208
+ finally {
209
+ cleanup();
210
+ console.log('[CLEANUP] Cleanup completed\n');
211
+ }
212
+ }
213
+ // Run tests if executed directly
214
+ const isMainModule = process.argv[1]?.endsWith('export-import-test.js');
215
+ if (isMainModule) {
216
+ runTests()
217
+ .then(() => {
218
+ console.log('[DONE] Export/Import test suite completed successfully');
219
+ process.exit(0);
220
+ })
221
+ .catch((error) => {
222
+ console.error('[FAILED] Test suite failed:', error);
223
+ process.exit(1);
224
+ });
225
+ }
226
+ export { runTests };
227
+ //# sourceMappingURL=export-import-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-import-test.js","sourceRoot":"","sources":["../../src/tests/export-import-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Comprehensive GraphQL Test Suite
3
+ * Tests all CRUD operations, search, batching, and error handling via GraphQL
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=graphql-comprehensive-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-comprehensive-test.d.ts","sourceRoot":"","sources":["../../src/tests/graphql-comprehensive-test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}