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.
- package/LICENSE +21 -0
- package/README.md +742 -0
- package/dist/cli/arg-parser.d.ts +9 -0
- package/dist/cli/arg-parser.d.ts.map +1 -0
- package/dist/cli/arg-parser.js +68 -0
- package/dist/cli/arg-parser.js.map +1 -0
- package/dist/cli/help-generator.d.ts +8 -0
- package/dist/cli/help-generator.d.ts.map +1 -0
- package/dist/cli/help-generator.js +89 -0
- package/dist/cli/help-generator.js.map +1 -0
- package/dist/cli/index.d.ts +27 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +56 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/query-builder.d.ts +8 -0
- package/dist/cli/query-builder.d.ts.map +1 -0
- package/dist/cli/query-builder.js +63 -0
- package/dist/cli/query-builder.js.map +1 -0
- package/dist/cli/shortcuts-config.d.ts +26 -0
- package/dist/cli/shortcuts-config.d.ts.map +1 -0
- package/dist/cli/shortcuts-config.js +94 -0
- package/dist/cli/shortcuts-config.js.map +1 -0
- package/dist/graphql/resolvers.d.ts +101 -0
- package/dist/graphql/resolvers.d.ts.map +1 -0
- package/dist/graphql/resolvers.js +98 -0
- package/dist/graphql/resolvers.js.map +1 -0
- package/dist/graphql/schema.d.ts +13 -0
- package/dist/graphql/schema.d.ts.map +1 -0
- package/dist/graphql/schema.js +314 -0
- package/dist/graphql/schema.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +573 -0
- package/dist/index.js.map +1 -0
- package/dist/services/backup-service.d.ts +57 -0
- package/dist/services/backup-service.d.ts.map +1 -0
- package/dist/services/backup-service.js +191 -0
- package/dist/services/backup-service.js.map +1 -0
- package/dist/services/database-optimizer.d.ts +15 -0
- package/dist/services/database-optimizer.d.ts.map +1 -0
- package/dist/services/database-optimizer.js +45 -0
- package/dist/services/database-optimizer.js.map +1 -0
- package/dist/services/memory-service.d.ts +126 -0
- package/dist/services/memory-service.d.ts.map +1 -0
- package/dist/services/memory-service.js +862 -0
- package/dist/services/memory-service.js.map +1 -0
- package/dist/services/migrations.d.ts +17 -0
- package/dist/services/migrations.d.ts.map +1 -0
- package/dist/services/migrations.js +273 -0
- package/dist/services/migrations.js.map +1 -0
- package/dist/tests/backup-export-test.d.ts +2 -0
- package/dist/tests/backup-export-test.d.ts.map +1 -0
- package/dist/tests/backup-export-test.js +162 -0
- package/dist/tests/backup-export-test.js.map +1 -0
- package/dist/tests/backup-test.d.ts +14 -0
- package/dist/tests/backup-test.d.ts.map +1 -0
- package/dist/tests/backup-test.js +209 -0
- package/dist/tests/backup-test.js.map +1 -0
- package/dist/tests/export-import-test.d.ts +15 -0
- package/dist/tests/export-import-test.d.ts.map +1 -0
- package/dist/tests/export-import-test.js +227 -0
- package/dist/tests/export-import-test.js.map +1 -0
- package/dist/tests/graphql-comprehensive-test.d.ts +6 -0
- package/dist/tests/graphql-comprehensive-test.d.ts.map +1 -0
- package/dist/tests/graphql-comprehensive-test.js +342 -0
- package/dist/tests/graphql-comprehensive-test.js.map +1 -0
- package/dist/tests/graphql-performance-test.d.ts +6 -0
- package/dist/tests/graphql-performance-test.d.ts.map +1 -0
- package/dist/tests/graphql-performance-test.js +141 -0
- package/dist/tests/graphql-performance-test.js.map +1 -0
- package/dist/tests/graphql-test.d.ts +5 -0
- package/dist/tests/graphql-test.d.ts.map +1 -0
- package/dist/tests/graphql-test.js +47 -0
- package/dist/tests/graphql-test.js.map +1 -0
- package/dist/tests/memory-server-tests.d.ts +7 -0
- package/dist/tests/memory-server-tests.d.ts.map +1 -0
- package/dist/tests/memory-server-tests.js +466 -0
- package/dist/tests/memory-server-tests.js.map +1 -0
- package/dist/tests/migration-test.d.ts +2 -0
- package/dist/tests/migration-test.d.ts.map +1 -0
- package/dist/tests/migration-test.js +270 -0
- package/dist/tests/migration-test.js.map +1 -0
- package/dist/tests/performance-benchmark.d.ts +7 -0
- package/dist/tests/performance-benchmark.d.ts.map +1 -0
- package/dist/tests/performance-benchmark.js +234 -0
- package/dist/tests/performance-benchmark.js.map +1 -0
- package/dist/tests/performance-test.d.ts +3 -0
- package/dist/tests/performance-test.d.ts.map +1 -0
- package/dist/tests/performance-test.js +61 -0
- package/dist/tests/performance-test.js.map +1 -0
- package/dist/tests/time-range-test.d.ts +7 -0
- package/dist/tests/time-range-test.d.ts.map +1 -0
- package/dist/tests/time-range-test.js +169 -0
- package/dist/tests/time-range-test.js.map +1 -0
- package/dist/tools/delete-memory/cli-parser.d.ts +2 -0
- package/dist/tools/delete-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/delete-memory/cli-parser.js +13 -0
- package/dist/tools/delete-memory/cli-parser.js.map +1 -0
- package/dist/tools/delete-memory/executor.d.ts +13 -0
- package/dist/tools/delete-memory/executor.d.ts.map +1 -0
- package/dist/tools/delete-memory/executor.js +40 -0
- package/dist/tools/delete-memory/executor.js.map +1 -0
- package/dist/tools/delete-memory/index.d.ts +3 -0
- package/dist/tools/delete-memory/index.d.ts.map +1 -0
- package/dist/tools/delete-memory/index.js +24 -0
- package/dist/tools/delete-memory/index.js.map +1 -0
- package/dist/tools/export-memory/cli-parser.d.ts +2 -0
- package/dist/tools/export-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/export-memory/cli-parser.js +34 -0
- package/dist/tools/export-memory/cli-parser.js.map +1 -0
- package/dist/tools/export-memory/executor.d.ts +10 -0
- package/dist/tools/export-memory/executor.d.ts.map +1 -0
- package/dist/tools/export-memory/executor.js +41 -0
- package/dist/tools/export-memory/executor.js.map +1 -0
- package/dist/tools/export-memory/index.d.ts +4 -0
- package/dist/tools/export-memory/index.d.ts.map +1 -0
- package/dist/tools/export-memory/index.js +99 -0
- package/dist/tools/export-memory/index.js.map +1 -0
- package/dist/tools/import-memory/cli-parser.d.ts +2 -0
- package/dist/tools/import-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/import-memory/cli-parser.js +25 -0
- package/dist/tools/import-memory/cli-parser.js.map +1 -0
- package/dist/tools/import-memory/executor.d.ts +8 -0
- package/dist/tools/import-memory/executor.d.ts.map +1 -0
- package/dist/tools/import-memory/executor.js +31 -0
- package/dist/tools/import-memory/executor.js.map +1 -0
- package/dist/tools/import-memory/index.d.ts +4 -0
- package/dist/tools/import-memory/index.d.ts.map +1 -0
- package/dist/tools/import-memory/index.js +70 -0
- package/dist/tools/import-memory/index.js.map +1 -0
- package/dist/tools/index.d.ts +14 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +48 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/memory-graphql/cli-parser.d.ts +6 -0
- package/dist/tools/memory-graphql/cli-parser.d.ts.map +1 -0
- package/dist/tools/memory-graphql/cli-parser.js +24 -0
- package/dist/tools/memory-graphql/cli-parser.js.map +1 -0
- package/dist/tools/memory-graphql/executor.d.ts +18 -0
- package/dist/tools/memory-graphql/executor.d.ts.map +1 -0
- package/dist/tools/memory-graphql/executor.js +53 -0
- package/dist/tools/memory-graphql/executor.js.map +1 -0
- package/dist/tools/memory-graphql/index.d.ts +3 -0
- package/dist/tools/memory-graphql/index.d.ts.map +1 -0
- package/dist/tools/memory-graphql/index.js +73 -0
- package/dist/tools/memory-graphql/index.js.map +1 -0
- package/dist/tools/memory-stats/cli-parser.d.ts +2 -0
- package/dist/tools/memory-stats/cli-parser.d.ts.map +1 -0
- package/dist/tools/memory-stats/cli-parser.js +8 -0
- package/dist/tools/memory-stats/cli-parser.js.map +1 -0
- package/dist/tools/memory-stats/executor.d.ts +4 -0
- package/dist/tools/memory-stats/executor.d.ts.map +1 -0
- package/dist/tools/memory-stats/executor.js +4 -0
- package/dist/tools/memory-stats/executor.js.map +1 -0
- package/dist/tools/memory-stats/index.d.ts +3 -0
- package/dist/tools/memory-stats/index.d.ts.map +1 -0
- package/dist/tools/memory-stats/index.js +15 -0
- package/dist/tools/memory-stats/index.js.map +1 -0
- package/dist/tools/search-memory/cli-parser.d.ts +2 -0
- package/dist/tools/search-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/search-memory/cli-parser.js +56 -0
- package/dist/tools/search-memory/cli-parser.js.map +1 -0
- package/dist/tools/search-memory/executor.d.ts +36 -0
- package/dist/tools/search-memory/executor.d.ts.map +1 -0
- package/dist/tools/search-memory/executor.js +83 -0
- package/dist/tools/search-memory/executor.js.map +1 -0
- package/dist/tools/search-memory/index.d.ts +3 -0
- package/dist/tools/search-memory/index.d.ts.map +1 -0
- package/dist/tools/search-memory/index.js +89 -0
- package/dist/tools/search-memory/index.js.map +1 -0
- package/dist/tools/store-memory/cli-parser.d.ts +2 -0
- package/dist/tools/store-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/store-memory/cli-parser.js +21 -0
- package/dist/tools/store-memory/cli-parser.js.map +1 -0
- package/dist/tools/store-memory/executor.d.ts +16 -0
- package/dist/tools/store-memory/executor.d.ts.map +1 -0
- package/dist/tools/store-memory/executor.js +100 -0
- package/dist/tools/store-memory/executor.js.map +1 -0
- package/dist/tools/store-memory/index.d.ts +3 -0
- package/dist/tools/store-memory/index.d.ts.map +1 -0
- package/dist/tools/store-memory/index.js +68 -0
- package/dist/tools/store-memory/index.js.map +1 -0
- package/dist/tools/sync-memory/cli-parser.d.ts +1 -0
- package/dist/tools/sync-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/sync-memory/cli-parser.js +2 -0
- package/dist/tools/sync-memory/cli-parser.js.map +1 -0
- package/dist/tools/sync-memory/executor.d.ts +1 -0
- package/dist/tools/sync-memory/executor.d.ts.map +1 -0
- package/dist/tools/sync-memory/executor.js +2 -0
- package/dist/tools/sync-memory/executor.js.map +1 -0
- package/dist/tools/sync-memory/index.d.ts +1 -0
- package/dist/tools/sync-memory/index.d.ts.map +1 -0
- package/dist/tools/sync-memory/index.js +2 -0
- package/dist/tools/sync-memory/index.js.map +1 -0
- package/dist/tools/update-memory/cli-parser.d.ts +2 -0
- package/dist/tools/update-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/update-memory/cli-parser.js +17 -0
- package/dist/tools/update-memory/cli-parser.js.map +1 -0
- package/dist/tools/update-memory/executor.d.ts +16 -0
- package/dist/tools/update-memory/executor.d.ts.map +1 -0
- package/dist/tools/update-memory/executor.js +59 -0
- package/dist/tools/update-memory/executor.js.map +1 -0
- package/dist/tools/update-memory/index.d.ts +3 -0
- package/dist/tools/update-memory/index.d.ts.map +1 -0
- package/dist/tools/update-memory/index.js +30 -0
- package/dist/tools/update-memory/index.js.map +1 -0
- package/dist/transports/streamable-http.d.ts +38 -0
- package/dist/transports/streamable-http.d.ts.map +1 -0
- package/dist/transports/streamable-http.js +209 -0
- package/dist/transports/streamable-http.js.map +1 -0
- package/dist/types/tools.d.ts +79 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +3 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/cli-parser.d.ts +12 -0
- package/dist/utils/cli-parser.d.ts.map +1 -0
- package/dist/utils/cli-parser.js +43 -0
- package/dist/utils/cli-parser.js.map +1 -0
- package/dist/utils/config.d.ts +95 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +176 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/db-integrity-check.d.ts +22 -0
- package/dist/utils/db-integrity-check.d.ts.map +1 -0
- package/dist/utils/db-integrity-check.js +69 -0
- package/dist/utils/db-integrity-check.js.map +1 -0
- package/dist/utils/debug.d.ts +25 -0
- package/dist/utils/debug.d.ts.map +1 -0
- package/dist/utils/debug.js +67 -0
- package/dist/utils/debug.js.map +1 -0
- package/dist/utils/help-generator.d.ts +18 -0
- package/dist/utils/help-generator.d.ts.map +1 -0
- package/dist/utils/help-generator.js +81 -0
- package/dist/utils/help-generator.js.map +1 -0
- package/dist/utils/json-parser.d.ts +12 -0
- package/dist/utils/json-parser.d.ts.map +1 -0
- package/dist/utils/json-parser.js +52 -0
- package/dist/utils/json-parser.js.map +1 -0
- package/dist/utils/mcp-config.d.ts +12 -0
- package/dist/utils/mcp-config.d.ts.map +1 -0
- package/dist/utils/mcp-config.js +64 -0
- package/dist/utils/mcp-config.js.map +1 -0
- package/dist/web-server.d.ts +3 -0
- package/dist/web-server.d.ts.map +1 -0
- package/dist/web-server.js +265 -0
- package/dist/web-server.js.map +1 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"graphql-comprehensive-test.d.ts","sourceRoot":"","sources":["../../src/tests/graphql-comprehensive-test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|