cleanup_memories
Remove old or low-relevance short-term memories to maintain system performance by deleting entries older than one year or with minimal relevance while preserving essential data.
Instructions
Manually trigger cleanup of old or low-relevance short-term memories. This removes memories older than 1 year or with very low relevance scores, keeping at least 512 memories.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| conversation_id | Yes | Conversation ID for storage |
Implementation Reference
- src/tools/short-term-tools.js:173-197 (handler)MCP tool 'cleanup_memories' handler: triggers ShortTermMemoryManager.cleanup() and persists changes via storage.{ name: 'cleanup_memories', description: 'Manually trigger cleanup of old or low-relevance short-term memories. This removes memories older than 1 year or with very low relevance scores, keeping at least 512 memories.', inputSchema: z.object({ conversation_id: z.string().describe('Conversation ID for storage') }), handler: async (args) => { try { const removedCount = memoryManager.cleanup(); await storageManager.saveShortTermMemories(memoryManager.getMemories()); return { success: true, removedCount, remainingCount: memoryManager.getMemories().length, message: `Cleanup complete: removed ${removedCount} memor${removedCount === 1 ? 'y' : 'ies'}` }; } catch (error) { return { success: false, error: error.message }; } } },
- src/memory/short-term.js:613-655 (helper)Core cleanup logic in ShortTermMemoryManager: filters out memories older than 1 year or below relevance threshold, ensures minimum 512 retained by score.cleanup(currentTimeStamp = Date.now()) { const initialCount = this.memories.length; const oneYearAgo = currentTimeStamp - MEMORY_TTL_MS; const passingMemories = []; const failingMemories = []; for (const mem of this.memories) { const relevance = this.calculateRelevance(mem, [], currentTimeStamp, {}); mem._relevance = relevance; if (mem.time_stamp.getTime() < oneYearAgo) { failingMemories.push(mem); } else if (relevance >= CLEANUP_MIN_SCORE_THRESHOLD) { passingMemories.push(mem); } else { failingMemories.push(mem); } } if (passingMemories.length >= MIN_RETAINED_MEMORIES) { this.memories = passingMemories; } else { const neededFromFailing = MIN_RETAINED_MEMORIES - passingMemories.length; failingMemories.sort((a, b) => b._relevance - a._relevance); const supplementaryMemories = failingMemories.slice(0, neededFromFailing); this.memories = [...passingMemories, ...supplementaryMemories]; } // 清理临时属性 for (const mem of this.memories) { delete mem._relevance; } this.lastCleanupTime = currentTimeStamp; const removed = initialCount - this.memories.length; if (removed > 0) { console.log(`[Memory] Cleanup: removed ${removed} entries, ${this.memories.length} remaining`); } return removed; }
- Input schema for cleanup_memories tool: requires conversation_id.inputSchema: z.object({ conversation_id: z.string().describe('Conversation ID for storage') }),
- src/index.js:152-154 (registration)Registers all short-term tools including cleanup_memories to the toolRegistry.// 注册所有短期记忆工具 const shortTermTools = createShortTermTools(defaultShortTermManager, defaultStorageManager); shortTermTools.forEach(tool => registerTool(tool, 'short-term'));