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,191 @@
1
+ import { existsSync, mkdirSync, readdirSync, unlinkSync, writeFileSync, readFileSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { debugLog, formatTimestampForFilename } from '../utils/debug.js';
4
+ export class BackupService {
5
+ config;
6
+ lastBackupTime = 0;
7
+ constructor(config) {
8
+ this.config = {
9
+ ...config,
10
+ autoBackupInterval: config.autoBackupInterval || 0,
11
+ maxBackups: config.maxBackups || 10
12
+ };
13
+ // Ensure backup directory exists
14
+ try {
15
+ mkdirSync(this.config.backupPath, { recursive: true });
16
+ debugLog(`Backup directory ready: ${this.config.backupPath}`);
17
+ // Load lastBackupTime from metadata file (for CLI persistence)
18
+ this.lastBackupTime = this.getLastBackupTime();
19
+ }
20
+ catch (error) {
21
+ debugLog(`Warning: Could not create backup directory: ${error.message}`);
22
+ }
23
+ }
24
+ /**
25
+ * Get path to backup metadata file
26
+ */
27
+ getMetadataPath() {
28
+ return join(this.config.backupPath, '.backup-metadata.json');
29
+ }
30
+ /**
31
+ * Save backup metadata
32
+ * @returns true if saved successfully, false on error
33
+ */
34
+ saveMetadata() {
35
+ try {
36
+ const metadata = {
37
+ lastBackupTime: this.lastBackupTime,
38
+ lastBackupDate: new Date(this.lastBackupTime).toISOString()
39
+ };
40
+ writeFileSync(this.getMetadataPath(), JSON.stringify(metadata, null, 2));
41
+ return true;
42
+ }
43
+ catch (error) {
44
+ debugLog(`Warning: Could not save backup metadata: ${error.message}`);
45
+ return false;
46
+ }
47
+ }
48
+ /**
49
+ * Get last backup time from metadata file
50
+ * @returns timestamp in milliseconds, or 0 if no metadata exists
51
+ */
52
+ getLastBackupTime() {
53
+ try {
54
+ if (!existsSync(this.config.backupPath)) {
55
+ debugLog(`Backup path does not exist yet: ${this.config.backupPath}`);
56
+ return 0;
57
+ }
58
+ const metadataPath = this.getMetadataPath();
59
+ if (existsSync(metadataPath)) {
60
+ const metadata = JSON.parse(readFileSync(metadataPath, 'utf-8'));
61
+ debugLog(`📋 Loaded backup metadata: last backup at ${metadata.lastBackupDate}`);
62
+ return metadata.lastBackupTime;
63
+ }
64
+ else {
65
+ debugLog(`📋 No backup metadata found (will create on first backup)`);
66
+ return 0;
67
+ }
68
+ }
69
+ catch (error) {
70
+ debugLog(`Warning: Could not read last backup time: ${error.message}`);
71
+ return 0;
72
+ }
73
+ }
74
+ /**
75
+ * Create a JSON export backup of all memories
76
+ */
77
+ backup(label = 'manual') {
78
+ try {
79
+ const timestamp = formatTimestampForFilename();
80
+ const backupFileName = `smem_${label}_${timestamp}.json`;
81
+ const backupPath = join(this.config.backupPath, backupFileName);
82
+ // Get export data
83
+ const exportData = this.config.getBackupData();
84
+ // Override source if configured
85
+ if (this.config.source) {
86
+ exportData.source = this.config.source;
87
+ }
88
+ // Write JSON backup
89
+ writeFileSync(backupPath, JSON.stringify(exportData, null, 2), 'utf-8');
90
+ this.lastBackupTime = Date.now();
91
+ this.saveMetadata(); // Persist backup time
92
+ debugLog(`✅ Backup created: ${backupPath} (${exportData.totalMemories} memories)`);
93
+ // Clean up old backups
94
+ this.cleanupOldBackups();
95
+ return backupPath;
96
+ }
97
+ catch (error) {
98
+ debugLog(`❌ Backup failed: ${error.message}`);
99
+ return null;
100
+ }
101
+ }
102
+ /**
103
+ * Check if backup should be created based on throttle interval
104
+ */
105
+ shouldBackup() {
106
+ // If interval is 0, backup on every write
107
+ if (!this.config.autoBackupInterval || this.config.autoBackupInterval <= 0) {
108
+ return true;
109
+ }
110
+ const intervalMs = this.config.autoBackupInterval * 60 * 1000;
111
+ return (Date.now() - this.lastBackupTime) >= intervalMs;
112
+ }
113
+ /**
114
+ * Backup if enough time has passed since last backup (lazy backup on write)
115
+ */
116
+ backupIfNeeded() {
117
+ if (this.shouldBackup()) {
118
+ return this.backup('auto');
119
+ }
120
+ return null;
121
+ }
122
+ /**
123
+ * Initialize lazy backup mode (creates initial backup if needed)
124
+ * Backups will be created on write operations when interval has passed
125
+ */
126
+ initialize() {
127
+ const intervalMinutes = this.config.autoBackupInterval || 0;
128
+ debugLog(`Lazy backup enabled (interval: ${intervalMinutes} minutes)`);
129
+ this.backupIfNeeded();
130
+ }
131
+ /**
132
+ * Clean up old backups, keeping only the most recent N
133
+ */
134
+ cleanupOldBackups() {
135
+ if (this.config.maxBackups <= 0) {
136
+ return; // Keep all backups
137
+ }
138
+ try {
139
+ const files = readdirSync(this.config.backupPath)
140
+ .filter(f => f.endsWith('.json') && f.startsWith('smem_'))
141
+ .map(f => ({
142
+ name: f,
143
+ path: join(this.config.backupPath, f)
144
+ }))
145
+ // Sort by filename (which contains timestamp) - newest first
146
+ .sort((a, b) => b.name.localeCompare(a.name));
147
+ // Delete backups beyond the max count
148
+ const toDelete = files.slice(this.config.maxBackups);
149
+ for (const file of toDelete) {
150
+ try {
151
+ unlinkSync(file.path);
152
+ debugLog(`Deleted old backup: ${file.name}`);
153
+ }
154
+ catch (error) {
155
+ debugLog(`Warning: Could not delete old backup: ${error.message}`);
156
+ }
157
+ }
158
+ if (toDelete.length > 0) {
159
+ debugLog(`Cleaned up ${toDelete.length} old backup(s), kept ${this.config.maxBackups} most recent`);
160
+ }
161
+ }
162
+ catch (error) {
163
+ debugLog(`Warning: Backup cleanup failed: ${error.message}`);
164
+ }
165
+ }
166
+ /**
167
+ * Get count of available backups
168
+ */
169
+ getBackupCount() {
170
+ if (!existsSync(this.config.backupPath)) {
171
+ return 0;
172
+ }
173
+ try {
174
+ return readdirSync(this.config.backupPath)
175
+ .filter(f => f.endsWith('.json') && f.startsWith('smem_'))
176
+ .length;
177
+ }
178
+ catch {
179
+ return 0;
180
+ }
181
+ }
182
+ /**
183
+ * Get time since last backup in minutes
184
+ */
185
+ getTimeSinceLastBackup() {
186
+ if (this.lastBackupTime === 0)
187
+ return -1;
188
+ return Math.floor((Date.now() - this.lastBackupTime) / 60000);
189
+ }
190
+ }
191
+ //# sourceMappingURL=backup-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup-service.js","sourceRoot":"","sources":["../../src/services/backup-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import Database from 'better-sqlite3';
2
+ export declare class DatabaseOptimizer {
3
+ /**
4
+ * Apply SQLite performance optimizations
5
+ * Safe to run multiple times (idempotent)
6
+ *
7
+ * Set MEMORY_CLOUD_SAFE=true for OneDrive/Dropbox/cloud storage locations
8
+ */
9
+ static applyOptimizations(db: Database.Database): void;
10
+ /**
11
+ * Optimize FTS5 index (run periodically or after bulk inserts)
12
+ */
13
+ static optimizeFTS(db: Database.Database): void;
14
+ }
15
+ //# sourceMappingURL=database-optimizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-optimizer.d.ts","sourceRoot":"","sources":["../../src/services/database-optimizer.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,qBAAa,iBAAiB;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IA2BtD;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;CAShD"}
@@ -0,0 +1,45 @@
1
+ import { debugLog } from '../utils/debug.js';
2
+ export class DatabaseOptimizer {
3
+ /**
4
+ * Apply SQLite performance optimizations
5
+ * Safe to run multiple times (idempotent)
6
+ *
7
+ * Set MEMORY_CLOUD_SAFE=true for OneDrive/Dropbox/cloud storage locations
8
+ */
9
+ static applyOptimizations(db) {
10
+ const isCloudSafe = process.env.MEMORY_CLOUD_SAFE === 'true';
11
+ if (isCloudSafe) {
12
+ // Cloud-safe mode: Use DELETE journal (single file, no WAL shm/wal files)
13
+ db.pragma('journal_mode = DELETE');
14
+ debugLog('Database optimizations applied (CLOUD-SAFE MODE)');
15
+ debugLog('⚠️ Performance reduced for cloud storage compatibility');
16
+ }
17
+ else {
18
+ // Performance mode: WAL allows readers and writers to work simultaneously
19
+ db.pragma('journal_mode = WAL');
20
+ debugLog('Database optimizations applied (PERFORMANCE MODE)');
21
+ }
22
+ // Larger cache = fewer disk reads = faster queries (64MB)
23
+ db.pragma('cache_size = -64000');
24
+ // Store temp tables in memory (faster)
25
+ db.pragma('temp_store = MEMORY');
26
+ // Cloud-safe: Use FULL sync for maximum safety, else NORMAL for speed
27
+ db.pragma(isCloudSafe ? 'synchronous = FULL' : 'synchronous = NORMAL');
28
+ // Enforce foreign key constraints
29
+ db.pragma('foreign_keys = ON');
30
+ }
31
+ /**
32
+ * Optimize FTS5 index (run periodically or after bulk inserts)
33
+ */
34
+ static optimizeFTS(db) {
35
+ try {
36
+ db.exec(`INSERT INTO memories_fts(memories_fts) VALUES('optimize')`);
37
+ debugLog('FTS index optimized');
38
+ }
39
+ catch (error) {
40
+ // FTS table might not exist yet, that's fine
41
+ debugLog('FTS optimization skipped:', error.message);
42
+ }
43
+ }
44
+ }
45
+ //# sourceMappingURL=database-optimizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-optimizer.js","sourceRoot":"","sources":["../../src/services/database-optimizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,OAAO,iBAAiB;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,kBAAkB,CAAC,EAAqB;QAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM,CAAC;QAE7D,IAAI,WAAW,EAAE,CAAC;YAChB,0EAA0E;YAC1E,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;YACnC,QAAQ,CAAC,kDAAkD,CAAC,CAAC;YAC7D,QAAQ,CAAC,yDAAyD,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,0EAA0E;YAC1E,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAChC,QAAQ,CAAC,mDAAmD,CAAC,CAAC;QAChE,CAAC;QAED,0DAA0D;QAC1D,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAEjC,uCAAuC;QACvC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAEjC,sEAAsE;QACtE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;QAEvE,kCAAkC;QAClC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,EAAqB;QACtC,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;YACrE,QAAQ,CAAC,qBAAqB,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,6CAA6C;YAC7C,QAAQ,CAAC,2BAA2B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,126 @@
1
+ import { type MCPConfigPath } from '../utils/mcp-config.js';
2
+ import type { ExportFilters, ImportOptions, ImportResult, ExportFormat } from '../types/tools.js';
3
+ export interface MemoryEntry {
4
+ id: number;
5
+ content: string;
6
+ tags: string[];
7
+ createdAt: string;
8
+ hash: string;
9
+ relevance?: number;
10
+ }
11
+ export interface MemoryRelationship {
12
+ fromMemoryId: number;
13
+ toMemoryId: number;
14
+ relationshipType: string;
15
+ createdAt: string;
16
+ }
17
+ export interface MemoryStats {
18
+ version: string;
19
+ totalMemories: number;
20
+ totalRelationships: number;
21
+ dbSize: number;
22
+ dbPath: string;
23
+ resolvedPath: string;
24
+ schemaVersion: number;
25
+ configPath?: string;
26
+ backupEnabled?: boolean;
27
+ backupPath?: string;
28
+ backupCount?: number;
29
+ lastBackupAge?: number;
30
+ nextBackupIn?: number;
31
+ mcpConfigPaths?: MCPConfigPath[];
32
+ }
33
+ /**
34
+ * Memory Service for persistent storage and retrieval of memories with tagging and relationships.
35
+ * Based on SQLite with FTS (Full Text Search) for efficient querying.
36
+ */
37
+ export declare class MemoryService {
38
+ private db;
39
+ private dbPath;
40
+ private resolvedDbPath;
41
+ private stmts;
42
+ private maxContentSize;
43
+ private backup?;
44
+ constructor(dbPath?: string, maxContentSize?: number);
45
+ initialize(): void;
46
+ private initDb;
47
+ private prepareStatements;
48
+ /**
49
+ * Store a memory with optional tags
50
+ */
51
+ store(content: string, tags?: string[]): string;
52
+ /**
53
+ * Search memories by content or tags
54
+ */
55
+ search(query?: string, tags?: string[], limit?: number, daysAgo?: number, startDate?: string, endDate?: string, minRelevance?: number): MemoryEntry[];
56
+ /**
57
+ * Delete a memory by hash
58
+ */
59
+ delete(hash: string): boolean;
60
+ /**
61
+ * Delete memories by tag
62
+ */
63
+ deleteByTag(tag: string): number;
64
+ /**
65
+ * Bulk link memories in a single transaction for performance
66
+ * Returns the number of relationships successfully created
67
+ */
68
+ linkMemoriesBulk(relationships: Array<{
69
+ fromHash: string;
70
+ toHash: string;
71
+ relationshipType?: string;
72
+ }>): number;
73
+ /**
74
+ * Link two memories with a relationship
75
+ */
76
+ linkMemories(fromHash: string, toHash: string, relationshipType?: string): boolean;
77
+ /**
78
+ * Get memories related to a specific memory
79
+ */
80
+ getRelated(hash: string, limit?: number): MemoryEntry[];
81
+ /**
82
+ * Get statistics about the memory database
83
+ */
84
+ stats(): MemoryStats;
85
+ /**
86
+ * Update an existing memory by hash
87
+ * @param hash The hash of the memory to update
88
+ * @param newContent The new content for the memory
89
+ * @param newTags Optional new tags (if provided, replaces all existing tags)
90
+ * @returns The new hash if successful, null if memory not found
91
+ */
92
+ update(hash: string, newContent: string, newTags?: string[]): string | null;
93
+ /**
94
+ * Get memory by hash
95
+ */
96
+ getByHash(hash: string): MemoryEntry | null;
97
+ /**
98
+ * Close database connection
99
+ */
100
+ close(): void;
101
+ /**
102
+ * Create a manual backup
103
+ */
104
+ createBackup(label?: string): string | null;
105
+ /**
106
+ * Export memories to JSON format with optional filtering
107
+ */
108
+ exportMemories(filters?: ExportFilters): ExportFormat;
109
+ /**
110
+ * Import memories from JSON format
111
+ */
112
+ importMemories(jsonData: string, options?: ImportOptions): ImportResult;
113
+ /**
114
+ * Get relationships for a memory
115
+ */
116
+ private getMemoryRelationships;
117
+ /**
118
+ * Restore relationships after importing memories
119
+ */
120
+ private restoreRelationships;
121
+ /**
122
+ * Get a memory by its hash
123
+ */
124
+ private getMemoryByHash;
125
+ }
126
+ //# sourceMappingURL=memory-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-service.d.ts","sourceRoot":"","sources":["../../src/services/memory-service.ts"],"names":[],"mappings":"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"}