cursor-recursive-rag 0.2.0-alpha.2 → 0.2.0

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 (210) hide show
  1. package/README.md +179 -203
  2. package/dist/adapters/llm/anthropic.d.ts +27 -0
  3. package/dist/adapters/llm/anthropic.d.ts.map +1 -0
  4. package/dist/adapters/llm/anthropic.js +287 -0
  5. package/dist/adapters/llm/anthropic.js.map +1 -0
  6. package/dist/adapters/llm/base.d.ts +62 -0
  7. package/dist/adapters/llm/base.d.ts.map +1 -0
  8. package/dist/adapters/llm/base.js +140 -0
  9. package/dist/adapters/llm/base.js.map +1 -0
  10. package/dist/adapters/llm/deepseek.d.ts +24 -0
  11. package/dist/adapters/llm/deepseek.d.ts.map +1 -0
  12. package/dist/adapters/llm/deepseek.js +228 -0
  13. package/dist/adapters/llm/deepseek.js.map +1 -0
  14. package/dist/adapters/llm/groq.d.ts +25 -0
  15. package/dist/adapters/llm/groq.d.ts.map +1 -0
  16. package/dist/adapters/llm/groq.js +265 -0
  17. package/dist/adapters/llm/groq.js.map +1 -0
  18. package/dist/adapters/llm/index.d.ts +62 -0
  19. package/dist/adapters/llm/index.d.ts.map +1 -0
  20. package/dist/adapters/llm/index.js +380 -0
  21. package/dist/adapters/llm/index.js.map +1 -0
  22. package/dist/adapters/llm/ollama.d.ts +23 -0
  23. package/dist/adapters/llm/ollama.d.ts.map +1 -0
  24. package/dist/adapters/llm/ollama.js +261 -0
  25. package/dist/adapters/llm/ollama.js.map +1 -0
  26. package/dist/adapters/llm/openai.d.ts +22 -0
  27. package/dist/adapters/llm/openai.d.ts.map +1 -0
  28. package/dist/adapters/llm/openai.js +232 -0
  29. package/dist/adapters/llm/openai.js.map +1 -0
  30. package/dist/adapters/llm/openrouter.d.ts +27 -0
  31. package/dist/adapters/llm/openrouter.d.ts.map +1 -0
  32. package/dist/adapters/llm/openrouter.js +305 -0
  33. package/dist/adapters/llm/openrouter.js.map +1 -0
  34. package/dist/adapters/vector/index.d.ts.map +1 -1
  35. package/dist/adapters/vector/index.js +8 -0
  36. package/dist/adapters/vector/index.js.map +1 -1
  37. package/dist/adapters/vector/redis-native.d.ts +35 -0
  38. package/dist/adapters/vector/redis-native.d.ts.map +1 -0
  39. package/dist/adapters/vector/redis-native.js +170 -0
  40. package/dist/adapters/vector/redis-native.js.map +1 -0
  41. package/dist/cli/commands/chat.d.ts +4 -0
  42. package/dist/cli/commands/chat.d.ts.map +1 -0
  43. package/dist/cli/commands/chat.js +374 -0
  44. package/dist/cli/commands/chat.js.map +1 -0
  45. package/dist/cli/commands/maintenance.d.ts +4 -0
  46. package/dist/cli/commands/maintenance.d.ts.map +1 -0
  47. package/dist/cli/commands/maintenance.js +237 -0
  48. package/dist/cli/commands/maintenance.js.map +1 -0
  49. package/dist/cli/commands/rules.d.ts +9 -0
  50. package/dist/cli/commands/rules.d.ts.map +1 -0
  51. package/dist/cli/commands/rules.js +639 -0
  52. package/dist/cli/commands/rules.js.map +1 -0
  53. package/dist/cli/commands/setup.js +5 -4
  54. package/dist/cli/commands/setup.js.map +1 -1
  55. package/dist/cli/index.js +6 -0
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/config/memoryConfig.d.ts +427 -0
  58. package/dist/config/memoryConfig.d.ts.map +1 -0
  59. package/dist/config/memoryConfig.js +258 -0
  60. package/dist/config/memoryConfig.js.map +1 -0
  61. package/dist/config/rulesConfig.d.ts +486 -0
  62. package/dist/config/rulesConfig.d.ts.map +1 -0
  63. package/dist/config/rulesConfig.js +345 -0
  64. package/dist/config/rulesConfig.js.map +1 -0
  65. package/dist/dashboard/coreTools.d.ts +14 -0
  66. package/dist/dashboard/coreTools.d.ts.map +1 -0
  67. package/dist/dashboard/coreTools.js +413 -0
  68. package/dist/dashboard/coreTools.js.map +1 -0
  69. package/dist/dashboard/public/index.html +1982 -13
  70. package/dist/dashboard/server.d.ts +1 -8
  71. package/dist/dashboard/server.d.ts.map +1 -1
  72. package/dist/dashboard/server.js +846 -13
  73. package/dist/dashboard/server.js.map +1 -1
  74. package/dist/dashboard/toolRegistry.d.ts +192 -0
  75. package/dist/dashboard/toolRegistry.d.ts.map +1 -0
  76. package/dist/dashboard/toolRegistry.js +322 -0
  77. package/dist/dashboard/toolRegistry.js.map +1 -0
  78. package/dist/proxy/index.d.ts +1 -1
  79. package/dist/proxy/index.d.ts.map +1 -1
  80. package/dist/proxy/index.js +9 -6
  81. package/dist/proxy/index.js.map +1 -1
  82. package/dist/server/index.js +21 -0
  83. package/dist/server/index.js.map +1 -1
  84. package/dist/server/tools/crawl.d.ts.map +1 -1
  85. package/dist/server/tools/crawl.js +8 -0
  86. package/dist/server/tools/crawl.js.map +1 -1
  87. package/dist/server/tools/index.d.ts.map +1 -1
  88. package/dist/server/tools/index.js +19 -1
  89. package/dist/server/tools/index.js.map +1 -1
  90. package/dist/server/tools/ingest.d.ts.map +1 -1
  91. package/dist/server/tools/ingest.js +5 -0
  92. package/dist/server/tools/ingest.js.map +1 -1
  93. package/dist/server/tools/memory.d.ts +250 -0
  94. package/dist/server/tools/memory.d.ts.map +1 -0
  95. package/dist/server/tools/memory.js +472 -0
  96. package/dist/server/tools/memory.js.map +1 -0
  97. package/dist/server/tools/recursive-query.d.ts.map +1 -1
  98. package/dist/server/tools/recursive-query.js +6 -0
  99. package/dist/server/tools/recursive-query.js.map +1 -1
  100. package/dist/server/tools/search.d.ts.map +1 -1
  101. package/dist/server/tools/search.js +6 -0
  102. package/dist/server/tools/search.js.map +1 -1
  103. package/dist/services/activity-log.d.ts +10 -0
  104. package/dist/services/activity-log.d.ts.map +1 -0
  105. package/dist/services/activity-log.js +53 -0
  106. package/dist/services/activity-log.js.map +1 -0
  107. package/dist/services/categoryManager.d.ts +110 -0
  108. package/dist/services/categoryManager.d.ts.map +1 -0
  109. package/dist/services/categoryManager.js +549 -0
  110. package/dist/services/categoryManager.js.map +1 -0
  111. package/dist/services/contextEnvironment.d.ts +206 -0
  112. package/dist/services/contextEnvironment.d.ts.map +1 -0
  113. package/dist/services/contextEnvironment.js +481 -0
  114. package/dist/services/contextEnvironment.js.map +1 -0
  115. package/dist/services/conversationProcessor.d.ts +99 -0
  116. package/dist/services/conversationProcessor.d.ts.map +1 -0
  117. package/dist/services/conversationProcessor.js +311 -0
  118. package/dist/services/conversationProcessor.js.map +1 -0
  119. package/dist/services/cursorChatReader.d.ts +129 -0
  120. package/dist/services/cursorChatReader.d.ts.map +1 -0
  121. package/dist/services/cursorChatReader.js +419 -0
  122. package/dist/services/cursorChatReader.js.map +1 -0
  123. package/dist/services/decayCalculator.d.ts +85 -0
  124. package/dist/services/decayCalculator.d.ts.map +1 -0
  125. package/dist/services/decayCalculator.js +182 -0
  126. package/dist/services/decayCalculator.js.map +1 -0
  127. package/dist/services/enhancedVectorStore.d.ts +102 -0
  128. package/dist/services/enhancedVectorStore.d.ts.map +1 -0
  129. package/dist/services/enhancedVectorStore.js +245 -0
  130. package/dist/services/enhancedVectorStore.js.map +1 -0
  131. package/dist/services/hybridScorer.d.ts +120 -0
  132. package/dist/services/hybridScorer.d.ts.map +1 -0
  133. package/dist/services/hybridScorer.js +334 -0
  134. package/dist/services/hybridScorer.js.map +1 -0
  135. package/dist/services/knowledgeExtractor.d.ts +45 -0
  136. package/dist/services/knowledgeExtractor.d.ts.map +1 -0
  137. package/dist/services/knowledgeExtractor.js +436 -0
  138. package/dist/services/knowledgeExtractor.js.map +1 -0
  139. package/dist/services/knowledgeStorage.d.ts +102 -0
  140. package/dist/services/knowledgeStorage.d.ts.map +1 -0
  141. package/dist/services/knowledgeStorage.js +383 -0
  142. package/dist/services/knowledgeStorage.js.map +1 -0
  143. package/dist/services/maintenanceScheduler.d.ts +89 -0
  144. package/dist/services/maintenanceScheduler.d.ts.map +1 -0
  145. package/dist/services/maintenanceScheduler.js +479 -0
  146. package/dist/services/maintenanceScheduler.js.map +1 -0
  147. package/dist/services/memoryMetadataStore.d.ts +62 -0
  148. package/dist/services/memoryMetadataStore.d.ts.map +1 -0
  149. package/dist/services/memoryMetadataStore.js +570 -0
  150. package/dist/services/memoryMetadataStore.js.map +1 -0
  151. package/dist/services/recursiveRetrieval.d.ts +122 -0
  152. package/dist/services/recursiveRetrieval.d.ts.map +1 -0
  153. package/dist/services/recursiveRetrieval.js +443 -0
  154. package/dist/services/recursiveRetrieval.js.map +1 -0
  155. package/dist/services/relationshipGraph.d.ts +77 -0
  156. package/dist/services/relationshipGraph.d.ts.map +1 -0
  157. package/dist/services/relationshipGraph.js +411 -0
  158. package/dist/services/relationshipGraph.js.map +1 -0
  159. package/dist/services/rlmSafeguards.d.ts +273 -0
  160. package/dist/services/rlmSafeguards.d.ts.map +1 -0
  161. package/dist/services/rlmSafeguards.js +705 -0
  162. package/dist/services/rlmSafeguards.js.map +1 -0
  163. package/dist/services/rulesAnalyzer.d.ts +119 -0
  164. package/dist/services/rulesAnalyzer.d.ts.map +1 -0
  165. package/dist/services/rulesAnalyzer.js +768 -0
  166. package/dist/services/rulesAnalyzer.js.map +1 -0
  167. package/dist/services/rulesMerger.d.ts +75 -0
  168. package/dist/services/rulesMerger.d.ts.map +1 -0
  169. package/dist/services/rulesMerger.js +404 -0
  170. package/dist/services/rulesMerger.js.map +1 -0
  171. package/dist/services/rulesParser.d.ts +127 -0
  172. package/dist/services/rulesParser.d.ts.map +1 -0
  173. package/dist/services/rulesParser.js +594 -0
  174. package/dist/services/rulesParser.js.map +1 -0
  175. package/dist/services/smartChunker.d.ts +110 -0
  176. package/dist/services/smartChunker.d.ts.map +1 -0
  177. package/dist/services/smartChunker.js +520 -0
  178. package/dist/services/smartChunker.js.map +1 -0
  179. package/dist/types/categories.d.ts +105 -0
  180. package/dist/types/categories.d.ts.map +1 -0
  181. package/dist/types/categories.js +108 -0
  182. package/dist/types/categories.js.map +1 -0
  183. package/dist/types/extractedKnowledge.d.ts +233 -0
  184. package/dist/types/extractedKnowledge.d.ts.map +1 -0
  185. package/dist/types/extractedKnowledge.js +56 -0
  186. package/dist/types/extractedKnowledge.js.map +1 -0
  187. package/dist/types/index.d.ts +9 -2
  188. package/dist/types/index.d.ts.map +1 -1
  189. package/dist/types/index.js +12 -1
  190. package/dist/types/index.js.map +1 -1
  191. package/dist/types/llmProvider.d.ts +282 -0
  192. package/dist/types/llmProvider.d.ts.map +1 -0
  193. package/dist/types/llmProvider.js +48 -0
  194. package/dist/types/llmProvider.js.map +1 -0
  195. package/dist/types/memory.d.ts +227 -0
  196. package/dist/types/memory.d.ts.map +1 -0
  197. package/dist/types/memory.js +76 -0
  198. package/dist/types/memory.js.map +1 -0
  199. package/dist/types/relationships.d.ts +167 -0
  200. package/dist/types/relationships.d.ts.map +1 -0
  201. package/dist/types/relationships.js +106 -0
  202. package/dist/types/relationships.js.map +1 -0
  203. package/dist/types/rulesOptimizer.d.ts +345 -0
  204. package/dist/types/rulesOptimizer.d.ts.map +1 -0
  205. package/dist/types/rulesOptimizer.js +22 -0
  206. package/dist/types/rulesOptimizer.js.map +1 -0
  207. package/docs/cursor-recursive-rag-memory-spec.md +4569 -0
  208. package/docs/cursor-recursive-rag-tasks.md +1355 -0
  209. package/package.json +6 -3
  210. package/restart-rag.sh +16 -0
@@ -0,0 +1,479 @@
1
+ import { getMemoryMetadataStore } from './memoryMetadataStore.js';
2
+ import { getDecayCalculator } from './decayCalculator.js';
3
+ import { getCategoryManager } from './categoryManager.js';
4
+ import { getRelationshipGraph } from './relationshipGraph.js';
5
+ const DEFAULT_SCHEDULER_CONFIG = {
6
+ nightlyCron: '0 3 * * *', // 3 AM daily
7
+ weeklyCron: '0 4 * * 0', // 4 AM Sunday
8
+ monthlyCron: '0 5 1 * *', // 5 AM 1st of month
9
+ enableAutoScheduling: false,
10
+ };
11
+ export class MaintenanceScheduler {
12
+ metadataStore;
13
+ decayCalculator;
14
+ categoryManager;
15
+ relationshipGraph;
16
+ config;
17
+ running = false;
18
+ intervalIds = [];
19
+ stats;
20
+ constructor(metadataStore, decayCalculator, categoryManager, relationshipGraph, config) {
21
+ this.metadataStore = metadataStore || getMemoryMetadataStore();
22
+ this.decayCalculator = decayCalculator || getDecayCalculator();
23
+ this.categoryManager = categoryManager || getCategoryManager(this.metadataStore);
24
+ this.relationshipGraph = relationshipGraph || getRelationshipGraph(this.metadataStore);
25
+ this.config = { ...DEFAULT_SCHEDULER_CONFIG, ...config };
26
+ this.stats = {
27
+ lastDecayUpdate: null,
28
+ lastConsolidation: null,
29
+ lastSummarization: null,
30
+ lastReindex: null,
31
+ totalJobsRun: 0,
32
+ totalErrors: 0,
33
+ jobHistory: [],
34
+ };
35
+ }
36
+ isRunning() {
37
+ return this.running;
38
+ }
39
+ getStats() {
40
+ return { ...this.stats, jobHistory: [...this.stats.jobHistory] };
41
+ }
42
+ /**
43
+ * Start the background scheduler using setInterval
44
+ * Note: For production use with persistent scheduling, consider using node-cron
45
+ */
46
+ start() {
47
+ if (this.running) {
48
+ console.log('Scheduler already running');
49
+ return;
50
+ }
51
+ this.running = true;
52
+ console.log('Maintenance scheduler started');
53
+ console.log('Schedules:');
54
+ console.log(` - Decay updates: hourly`);
55
+ console.log(` - Nightly consolidation: daily at 3 AM`);
56
+ console.log(` - Weekly summarization: Sunday at 4 AM`);
57
+ console.log(` - Monthly reindex: 1st of month at 5 AM`);
58
+ // Hourly decay update (every hour)
59
+ const hourlyId = setInterval(async () => {
60
+ await this.runDecayUpdate().catch(err => {
61
+ console.error('Hourly decay update failed:', err);
62
+ });
63
+ }, 60 * 60 * 1000); // 1 hour
64
+ this.intervalIds.push(hourlyId);
65
+ // Calculate next run times and schedule
66
+ this.scheduleNightly();
67
+ this.scheduleWeekly();
68
+ this.scheduleMonthly();
69
+ }
70
+ stop() {
71
+ if (!this.running)
72
+ return;
73
+ for (const id of this.intervalIds) {
74
+ clearInterval(id);
75
+ }
76
+ this.intervalIds = [];
77
+ this.running = false;
78
+ console.log('Maintenance scheduler stopped');
79
+ }
80
+ /**
81
+ * Run a specific maintenance job manually
82
+ */
83
+ async runJob(jobName) {
84
+ switch (jobName) {
85
+ case 'decay':
86
+ return this.runDecayUpdate();
87
+ case 'consolidate':
88
+ return this.runNightlyConsolidation();
89
+ case 'summarize':
90
+ return this.runWeeklySummarization();
91
+ case 'reindex':
92
+ return this.runMonthlyReindex();
93
+ case 'cleanup':
94
+ return this.runCleanup();
95
+ default:
96
+ throw new Error(`Unknown job type: ${jobName}`);
97
+ }
98
+ }
99
+ /**
100
+ * Update decay scores for all chunks
101
+ */
102
+ async runDecayUpdate() {
103
+ const startTime = new Date();
104
+ const errors = [];
105
+ const metrics = {};
106
+ try {
107
+ const result = this.decayCalculator.updateAllDecayScores(this.metadataStore, false);
108
+ metrics.chunksUpdated = result.updated;
109
+ metrics.duration = result.duration;
110
+ this.stats.lastDecayUpdate = new Date();
111
+ }
112
+ catch (err) {
113
+ errors.push(err instanceof Error ? err.message : String(err));
114
+ }
115
+ const endTime = new Date();
116
+ const jobResult = this.createJobResult('decay', startTime, endTime, metrics, errors);
117
+ this.recordJobResult(jobResult);
118
+ return jobResult;
119
+ }
120
+ /**
121
+ * Nightly consolidation: decay updates, duplicate detection, hot item promotion
122
+ */
123
+ async runNightlyConsolidation() {
124
+ const startTime = new Date();
125
+ const errors = [];
126
+ const metrics = {
127
+ decayUpdated: 0,
128
+ duplicatesFound: 0,
129
+ hotItemsPromoted: 0,
130
+ itemsArchived: 0,
131
+ };
132
+ console.log('Running nightly consolidation...');
133
+ try {
134
+ // 1. Update all decay scores
135
+ const decayResult = this.decayCalculator.updateAllDecayScores(this.metadataStore, false);
136
+ metrics.decayUpdated = decayResult.updated;
137
+ console.log(` Updated ${decayResult.updated} decay scores`);
138
+ // 2. Find and consolidate near-duplicates
139
+ const duplicates = await this.findDuplicates();
140
+ metrics.duplicatesFound = duplicates.length;
141
+ for (const group of duplicates) {
142
+ try {
143
+ await this.mergeDuplicates(group);
144
+ }
145
+ catch (err) {
146
+ errors.push(`Failed to merge duplicates: ${err instanceof Error ? err.message : String(err)}`);
147
+ }
148
+ }
149
+ console.log(` Found ${duplicates.length} duplicate groups`);
150
+ // 3. Promote frequently accessed items (increase importance)
151
+ const hotItems = this.getHotItems(24); // Last 24 hours
152
+ for (const item of hotItems) {
153
+ this.promoteItem(item.chunkId, 0.05);
154
+ }
155
+ metrics.hotItemsPromoted = hotItems.length;
156
+ console.log(` Promoted ${hotItems.length} hot items`);
157
+ // 4. Archive items with very low decay scores
158
+ const archivedIds = this.metadataStore.archiveStaleChunks(0.15);
159
+ metrics.itemsArchived = archivedIds.length;
160
+ console.log(` Archived ${archivedIds.length} stale items`);
161
+ this.stats.lastConsolidation = new Date();
162
+ }
163
+ catch (err) {
164
+ errors.push(err instanceof Error ? err.message : String(err));
165
+ }
166
+ const endTime = new Date();
167
+ const duration = (endTime.getTime() - startTime.getTime()) / 1000;
168
+ console.log(`Nightly consolidation completed in ${duration.toFixed(1)}s`);
169
+ const jobResult = this.createJobResult('consolidate', startTime, endTime, metrics, errors);
170
+ this.recordJobResult(jobResult);
171
+ return jobResult;
172
+ }
173
+ /**
174
+ * Weekly summarization: update all category summaries
175
+ */
176
+ async runWeeklySummarization() {
177
+ const startTime = new Date();
178
+ const errors = [];
179
+ const metrics = {
180
+ categoriesUpdated: 0,
181
+ contradictionsFound: 0,
182
+ };
183
+ console.log('Running weekly summarization...');
184
+ try {
185
+ await this.categoryManager.initialize();
186
+ const categories = this.metadataStore.listCategories();
187
+ for (const category of categories) {
188
+ try {
189
+ const result = await this.categoryManager.evolveSummary(category.name);
190
+ if (result && result.itemsIntegrated > 0) {
191
+ metrics.categoriesUpdated++;
192
+ if (result.hadContradictions) {
193
+ metrics.contradictionsFound++;
194
+ }
195
+ }
196
+ }
197
+ catch (err) {
198
+ errors.push(`Failed to evolve summary for ${category.name}: ${err instanceof Error ? err.message : String(err)}`);
199
+ }
200
+ }
201
+ console.log(` Updated ${metrics.categoriesUpdated} category summaries`);
202
+ if (metrics.contradictionsFound > 0) {
203
+ console.log(` Resolved ${metrics.contradictionsFound} contradictions`);
204
+ }
205
+ this.stats.lastSummarization = new Date();
206
+ }
207
+ catch (err) {
208
+ errors.push(err instanceof Error ? err.message : String(err));
209
+ }
210
+ const endTime = new Date();
211
+ const duration = (endTime.getTime() - startTime.getTime()) / 1000;
212
+ console.log(`Weekly summarization completed in ${duration.toFixed(1)}s`);
213
+ const jobResult = this.createJobResult('summarize', startTime, endTime, metrics, errors);
214
+ this.recordJobResult(jobResult);
215
+ return jobResult;
216
+ }
217
+ /**
218
+ * Monthly reindex: cleanup, relationship re-weighting, database optimization
219
+ */
220
+ async runMonthlyReindex() {
221
+ const startTime = new Date();
222
+ const errors = [];
223
+ const metrics = {
224
+ relationshipsReweighted: 0,
225
+ oldItemsArchived: 0,
226
+ orphanedItemsCleaned: 0,
227
+ };
228
+ console.log('Running monthly reindex...');
229
+ try {
230
+ // 1. Re-weight relationships based on graph analysis
231
+ const graphStats = this.relationshipGraph.getStats();
232
+ metrics.totalRelationships = graphStats.totalRelationships;
233
+ // Find isolated chunks and weak relationships
234
+ metrics.isolatedChunks = graphStats.isolatedChunks;
235
+ console.log(` Graph has ${graphStats.totalRelationships} relationships, ${graphStats.isolatedChunks} isolated chunks`);
236
+ // 2. Archive very old, never-accessed items
237
+ const oldChunks = this.getOldUnusedChunks(180); // 6 months
238
+ for (const chunk of oldChunks) {
239
+ this.metadataStore.archiveChunk(chunk.chunkId);
240
+ }
241
+ metrics.oldItemsArchived = oldChunks.length;
242
+ console.log(` Archived ${oldChunks.length} old unused items`);
243
+ // 3. Clean up orphaned data
244
+ const orphanedCleaned = await this.cleanupOrphanedData();
245
+ metrics.orphanedItemsCleaned = orphanedCleaned;
246
+ console.log(` Cleaned ${orphanedCleaned} orphaned records`);
247
+ // 4. Vacuum database
248
+ this.metadataStore.vacuum();
249
+ console.log(` Database vacuumed`);
250
+ this.stats.lastReindex = new Date();
251
+ }
252
+ catch (err) {
253
+ errors.push(err instanceof Error ? err.message : String(err));
254
+ }
255
+ const endTime = new Date();
256
+ const duration = (endTime.getTime() - startTime.getTime()) / 1000;
257
+ console.log(`Monthly reindex completed in ${duration.toFixed(1)}s`);
258
+ const jobResult = this.createJobResult('reindex', startTime, endTime, metrics, errors);
259
+ this.recordJobResult(jobResult);
260
+ return jobResult;
261
+ }
262
+ /**
263
+ * General cleanup: remove archived items, compress data
264
+ */
265
+ async runCleanup(dryRun = false) {
266
+ const startTime = new Date();
267
+ const errors = [];
268
+ const metrics = {
269
+ archivedChunksFound: 0,
270
+ lowDecayChunksFound: 0,
271
+ orphanedRelationships: 0,
272
+ wouldDelete: 0,
273
+ deleted: 0,
274
+ };
275
+ console.log(`Running cleanup${dryRun ? ' (dry run)' : ''}...`);
276
+ try {
277
+ // 1. Find all archived chunks
278
+ const allChunks = this.metadataStore.getAllChunkMetadata({ includeArchived: true });
279
+ const archivedChunks = allChunks.filter(c => c.isArchived);
280
+ metrics.archivedChunksFound = archivedChunks.length;
281
+ // 2. Find chunks with very low decay scores
282
+ const lowDecayChunks = allChunks.filter(c => !c.isArchived && c.decayScore < 0.1);
283
+ metrics.lowDecayChunksFound = lowDecayChunks.length;
284
+ // 3. Calculate what would be deleted
285
+ metrics.wouldDelete = archivedChunks.length;
286
+ if (dryRun) {
287
+ console.log(` Would delete ${archivedChunks.length} archived chunks`);
288
+ console.log(` ${lowDecayChunks.length} chunks have low decay scores (candidates for archival)`);
289
+ }
290
+ else {
291
+ // Actually delete archived chunks
292
+ for (const chunk of archivedChunks) {
293
+ try {
294
+ this.metadataStore.deleteChunkMetadata(chunk.chunkId);
295
+ metrics.deleted++;
296
+ }
297
+ catch (err) {
298
+ errors.push(`Failed to delete ${chunk.chunkId}: ${err instanceof Error ? err.message : String(err)}`);
299
+ }
300
+ }
301
+ console.log(` Deleted ${metrics.deleted} archived chunks`);
302
+ }
303
+ // 4. Vacuum if actual deletion happened
304
+ if (!dryRun && metrics.deleted > 0) {
305
+ this.metadataStore.vacuum();
306
+ console.log(` Database vacuumed`);
307
+ }
308
+ }
309
+ catch (err) {
310
+ errors.push(err instanceof Error ? err.message : String(err));
311
+ }
312
+ const endTime = new Date();
313
+ const duration = (endTime.getTime() - startTime.getTime()) / 1000;
314
+ console.log(`Cleanup completed in ${duration.toFixed(1)}s`);
315
+ const jobResult = this.createJobResult('cleanup', startTime, endTime, metrics, errors);
316
+ this.recordJobResult(jobResult);
317
+ return jobResult;
318
+ }
319
+ scheduleNightly() {
320
+ const now = new Date();
321
+ const next3AM = new Date(now);
322
+ next3AM.setHours(3, 0, 0, 0);
323
+ if (next3AM <= now) {
324
+ next3AM.setDate(next3AM.getDate() + 1);
325
+ }
326
+ const msUntil3AM = next3AM.getTime() - now.getTime();
327
+ setTimeout(() => {
328
+ this.runNightlyConsolidation().catch(console.error);
329
+ // Then run every 24 hours
330
+ const dailyId = setInterval(() => {
331
+ this.runNightlyConsolidation().catch(console.error);
332
+ }, 24 * 60 * 60 * 1000);
333
+ this.intervalIds.push(dailyId);
334
+ }, msUntil3AM);
335
+ }
336
+ scheduleWeekly() {
337
+ const now = new Date();
338
+ const nextSunday4AM = new Date(now);
339
+ nextSunday4AM.setHours(4, 0, 0, 0);
340
+ const daysUntilSunday = (7 - now.getDay()) % 7;
341
+ nextSunday4AM.setDate(nextSunday4AM.getDate() + (daysUntilSunday === 0 && now.getHours() >= 4 ? 7 : daysUntilSunday));
342
+ const msUntilSunday = nextSunday4AM.getTime() - now.getTime();
343
+ setTimeout(() => {
344
+ this.runWeeklySummarization().catch(console.error);
345
+ // Then run every 7 days
346
+ const weeklyId = setInterval(() => {
347
+ this.runWeeklySummarization().catch(console.error);
348
+ }, 7 * 24 * 60 * 60 * 1000);
349
+ this.intervalIds.push(weeklyId);
350
+ }, msUntilSunday);
351
+ }
352
+ scheduleMonthly() {
353
+ const now = new Date();
354
+ const nextFirst5AM = new Date(now.getFullYear(), now.getMonth() + 1, 1, 5, 0, 0);
355
+ if (now.getDate() === 1 && now.getHours() < 5) {
356
+ nextFirst5AM.setMonth(now.getMonth());
357
+ }
358
+ const msUntilFirst = nextFirst5AM.getTime() - now.getTime();
359
+ setTimeout(() => {
360
+ this.runMonthlyReindex().catch(console.error);
361
+ // Schedule next month
362
+ this.scheduleMonthly();
363
+ }, msUntilFirst);
364
+ }
365
+ /**
366
+ * Find potential duplicate chunks based on high similarity
367
+ */
368
+ async findDuplicates() {
369
+ // For now, we do a basic approach: find chunks with identical sources and similar timestamps
370
+ // A more sophisticated approach would use vector similarity
371
+ const chunks = this.metadataStore.getAllChunkMetadata({ includeArchived: false });
372
+ const duplicateGroups = [];
373
+ const processed = new Set();
374
+ for (const chunk of chunks) {
375
+ if (processed.has(chunk.chunkId))
376
+ continue;
377
+ // Find chunks from the same source within 1 minute
378
+ const potentialDuplicates = chunks.filter(c => {
379
+ if (c.chunkId === chunk.chunkId || processed.has(c.chunkId))
380
+ return false;
381
+ const metadata1 = this.metadataStore.getChunkMetadata(chunk.chunkId);
382
+ const metadata2 = this.metadataStore.getChunkMetadata(c.chunkId);
383
+ if (!metadata1 || !metadata2)
384
+ return false;
385
+ const time1 = new Date(chunk.createdAt).getTime();
386
+ const time2 = new Date(c.createdAt).getTime();
387
+ const timeDiff = Math.abs(time1 - time2);
388
+ return timeDiff < 60000; // Within 1 minute
389
+ });
390
+ if (potentialDuplicates.length > 0) {
391
+ duplicateGroups.push({
392
+ primaryChunkId: chunk.chunkId,
393
+ duplicateChunkIds: potentialDuplicates.map(c => c.chunkId),
394
+ similarity: 0.95,
395
+ });
396
+ processed.add(chunk.chunkId);
397
+ for (const dup of potentialDuplicates) {
398
+ processed.add(dup.chunkId);
399
+ }
400
+ }
401
+ }
402
+ return duplicateGroups;
403
+ }
404
+ async mergeDuplicates(group) {
405
+ // Keep the primary chunk, archive the duplicates
406
+ // Transfer any unique relationships to the primary
407
+ for (const dupId of group.duplicateChunkIds) {
408
+ this.metadataStore.archiveChunk(dupId);
409
+ // Could also create a SUPERSEDES relationship
410
+ this.relationshipGraph.markSupersedes(group.primaryChunkId, dupId, group.similarity);
411
+ }
412
+ }
413
+ getHotItems(hours) {
414
+ const since = new Date(Date.now() - hours * 60 * 60 * 1000);
415
+ return this.metadataStore.getAccessStats(since).slice(0, 50);
416
+ }
417
+ promoteItem(chunkId, boost) {
418
+ const metadata = this.metadataStore.getChunkMetadata(chunkId);
419
+ if (metadata) {
420
+ const newImportance = Math.min(1.0, metadata.importance + boost);
421
+ this.metadataStore.upsertChunkMetadata({
422
+ ...metadata,
423
+ importance: newImportance,
424
+ });
425
+ }
426
+ }
427
+ getOldUnusedChunks(days) {
428
+ const cutoff = new Date(Date.now() - days * 24 * 60 * 60 * 1000);
429
+ const chunks = this.metadataStore.getAllChunkMetadata({ includeArchived: false });
430
+ return chunks.filter(c => {
431
+ const createdAt = new Date(c.createdAt);
432
+ return createdAt < cutoff && c.accessCount === 0;
433
+ });
434
+ }
435
+ async cleanupOrphanedData() {
436
+ // This would clean up:
437
+ // - Category items pointing to non-existent chunks
438
+ // - Relationships pointing to non-existent chunks
439
+ // - Access logs for deleted chunks
440
+ // For now, return 0 as a placeholder - the delete function handles cascading deletes
441
+ return 0;
442
+ }
443
+ createJobResult(jobName, startTime, endTime, metrics, errors) {
444
+ return {
445
+ jobName,
446
+ success: errors.length === 0,
447
+ startTime,
448
+ endTime,
449
+ duration: endTime.getTime() - startTime.getTime(),
450
+ metrics,
451
+ errors,
452
+ };
453
+ }
454
+ recordJobResult(result) {
455
+ this.stats.totalJobsRun++;
456
+ if (!result.success) {
457
+ this.stats.totalErrors += result.errors.length;
458
+ }
459
+ // Keep last 100 job results
460
+ this.stats.jobHistory.push(result);
461
+ if (this.stats.jobHistory.length > 100) {
462
+ this.stats.jobHistory.shift();
463
+ }
464
+ }
465
+ }
466
+ let instance = null;
467
+ export function getMaintenanceScheduler(metadataStore, config) {
468
+ if (!instance) {
469
+ instance = new MaintenanceScheduler(metadataStore, undefined, undefined, undefined, config);
470
+ }
471
+ return instance;
472
+ }
473
+ export function resetMaintenanceScheduler() {
474
+ if (instance) {
475
+ instance.stop();
476
+ instance = null;
477
+ }
478
+ }
479
+ //# sourceMappingURL=maintenanceScheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maintenanceScheduler.js","sourceRoot":"","sources":["../../src/services/maintenanceScheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { ChunkMetadata, ChunkRelationship, RelationshipType, Category, CategoryItem, ProcessedConversation, MemoryStats, ChunkType } from '../types/memory.js';
2
+ /**
3
+ * SQLite-based metadata store for memory tracking
4
+ *
5
+ * This store maintains temporal metadata, access patterns, and relationships
6
+ * independently of the vector store, allowing any vector backend to gain
7
+ * memory capabilities.
8
+ */
9
+ export declare class MemoryMetadataStore {
10
+ private db;
11
+ private dbPath;
12
+ constructor(dbPath?: string);
13
+ private initialize;
14
+ upsertChunkMetadata(metadata: Partial<ChunkMetadata> & {
15
+ chunkId: string;
16
+ source?: string;
17
+ }): void;
18
+ getChunkMetadata(chunkId: string): ChunkMetadata | null;
19
+ getAllChunkMetadata(options?: {
20
+ includeArchived?: boolean;
21
+ minDecayScore?: number;
22
+ chunkTypes?: ChunkType[];
23
+ }): ChunkMetadata[];
24
+ recordAccess(chunkId: string, queryText?: string, resultRank?: number): void;
25
+ updateDecayScore(chunkId: string, decayScore: number): void;
26
+ bulkUpdateDecayScores(updates: Array<{
27
+ chunkId: string;
28
+ decayScore: number;
29
+ }>): void;
30
+ archiveChunk(chunkId: string): void;
31
+ archiveStaleChunks(decayThreshold: number): string[];
32
+ deleteChunkMetadata(chunkId: string): void;
33
+ addRelationship(fromChunkId: string, toChunkId: string, relationshipType: RelationshipType, strength?: number, metadata?: Record<string, unknown>): void;
34
+ getRelationships(chunkId: string, direction?: 'from' | 'to' | 'both'): ChunkRelationship[];
35
+ getRelatedChunkIds(chunkId: string, relationshipType?: RelationshipType): string[];
36
+ findContradictions(chunkId: string): ChunkRelationship[];
37
+ deleteRelationship(fromChunkId: string, toChunkId: string, relationshipType: RelationshipType): void;
38
+ upsertCategory(category: Partial<Category> & {
39
+ id: string;
40
+ name: string;
41
+ }): void;
42
+ getCategory(id: string): Category | null;
43
+ getCategoryByName(name: string): Category | null;
44
+ listCategories(): Category[];
45
+ assignChunkToCategory(chunkId: string, categoryId: string, relevanceScore?: number): void;
46
+ getChunkCategories(chunkId: string): CategoryItem[];
47
+ getCategoryChunks(categoryId: string): CategoryItem[];
48
+ markConversationProcessed(conversationId: string, messageCount: number, chunksCreated: number, knowledgeExtracted: number): void;
49
+ isConversationProcessed(conversationId: string): boolean;
50
+ getProcessedConversation(conversationId: string): ProcessedConversation | null;
51
+ getMemoryStats(): MemoryStats;
52
+ getAccessStats(since?: Date): {
53
+ chunkId: string;
54
+ accessCount: number;
55
+ lastAccess: string;
56
+ }[];
57
+ close(): void;
58
+ vacuum(): void;
59
+ }
60
+ export declare function getMemoryMetadataStore(dbPath?: string): MemoryMetadataStore;
61
+ export declare function closeMemoryMetadataStore(): void;
62
+ //# sourceMappingURL=memoryMetadataStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryMetadataStore.d.ts","sourceRoot":"","sources":["../../src/services/memoryMetadataStore.ts"],"names":[],"mappings":"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"}