Add backup system documentation and utility scripts
Documentation: - MODIFICATIONS_BACKUP_SYSTEM.md: Complete documentation of the new backup system - Problem analysis (old system truncated to 200 chars) - New architecture using append_to_conversation - ChromaDB structure (1 principal + N individual message docs) - Coverage comparison (1.2% → 100% for long conversations) - Migration guide and test procedures Utility Scripts: - test_backup_python.py: Direct Python test of backup system - Bypasses Node.js MCP layer - Tests append_to_conversation with complete messages - Displays embedding coverage statistics - fix_stats.mjs: JavaScript patch for getMemoryStats() - patch_stats.py: Python patch for getMemoryStats() function Key Documentation Sections: - Old vs New system comparison table - ChromaDB document structure explanation - Step-by-step migration instructions - Test procedures with expected outputs - Troubleshooting guide 🤖 Generated with Claude Code Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
143
fix_stats.mjs
Normal file
143
fix_stats.mjs
Normal file
@@ -0,0 +1,143 @@
|
||||
// Script pour corriger getMemoryStats() dans memoryService.js
|
||||
import fs from 'fs';
|
||||
|
||||
const filePath = 'C:/GitHub/Linear_coding/generations/my_project/server/services/memoryService.js';
|
||||
let content = fs.readFileSync(filePath, 'utf8');
|
||||
|
||||
// Trouver et remplacer la fonction getMemoryStats
|
||||
const oldFunction = `/**
|
||||
* Get basic statistics about the memory store
|
||||
* This is a convenience function that uses searchMemories to estimate count
|
||||
*
|
||||
* @returns {Promise<Object>} Statistics about the memory store
|
||||
*/
|
||||
export async function getMemoryStats() {
|
||||
const status = getMCPStatus();
|
||||
|
||||
if (!isMCPConnected()) {
|
||||
return {
|
||||
connected: false,
|
||||
enabled: status.enabled,
|
||||
configured: status.configured,
|
||||
total_memories: 0,
|
||||
last_save: null,
|
||||
error: status.error,
|
||||
serverPath: status.serverPath,
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
// Try to get a rough count by searching with a broad query
|
||||
const result = await searchMemories('*', 1);
|
||||
|
||||
return {
|
||||
connected: true,
|
||||
enabled: status.enabled,
|
||||
configured: status.configured,
|
||||
total_memories: result.count || 0,
|
||||
last_save: new Date().toISOString(), // Would need to track this separately
|
||||
error: null,
|
||||
serverPath: status.serverPath,
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
connected: true,
|
||||
enabled: status.enabled,
|
||||
configured: status.configured,
|
||||
total_memories: 0,
|
||||
last_save: null,
|
||||
error: error.message,
|
||||
serverPath: status.serverPath,
|
||||
};
|
||||
}
|
||||
}`;
|
||||
|
||||
const newFunction = `/**
|
||||
* Get basic statistics about the memory store
|
||||
* Counts thoughts and conversations separately using dedicated search tools
|
||||
*
|
||||
* @returns {Promise<Object>} Statistics about the memory store
|
||||
*/
|
||||
export async function getMemoryStats() {
|
||||
const status = getMCPStatus();
|
||||
|
||||
if (!isMCPConnected()) {
|
||||
return {
|
||||
connected: false,
|
||||
enabled: status.enabled,
|
||||
configured: status.configured,
|
||||
total_memories: 0,
|
||||
thoughts_count: 0,
|
||||
conversations_count: 0,
|
||||
last_save: null,
|
||||
error: status.error,
|
||||
serverPath: status.serverPath,
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
// Count thoughts using search_thoughts with broad query
|
||||
let thoughtsCount = 0;
|
||||
try {
|
||||
const thoughtsResult = await callMCPTool('search_thoughts', {
|
||||
query: 'a', // Simple query that will match most thoughts
|
||||
n_results: 100
|
||||
});
|
||||
|
||||
// Parse the text response to count thoughts
|
||||
const thoughtsText = thoughtsResult.content?.[0]?.text || '';
|
||||
const thoughtMatches = thoughtsText.match(/\\[Pertinence:/g);
|
||||
thoughtsCount = thoughtMatches ? thoughtMatches.length : 0;
|
||||
} catch (err) {
|
||||
console.log('[getMemoryStats] Could not count thoughts:', err.message);
|
||||
}
|
||||
|
||||
// Count conversations using search_conversations with search_level="full"
|
||||
let conversationsCount = 0;
|
||||
try {
|
||||
const convsResult = await callMCPTool('search_conversations', {
|
||||
query: 'a', // Simple query that will match most conversations
|
||||
n_results: 100,
|
||||
search_level: 'full'
|
||||
});
|
||||
|
||||
// Parse the text response to count conversations
|
||||
const convsText = convsResult.content?.[0]?.text || '';
|
||||
const convMatches = convsText.match(/\\[Pertinence:/g);
|
||||
conversationsCount = convMatches ? convMatches.length : 0;
|
||||
} catch (err) {
|
||||
console.log('[getMemoryStats] Could not count conversations:', err.message);
|
||||
}
|
||||
|
||||
const totalMemories = thoughtsCount + conversationsCount;
|
||||
|
||||
return {
|
||||
connected: true,
|
||||
enabled: status.enabled,
|
||||
configured: status.configured,
|
||||
total_memories: totalMemories,
|
||||
thoughts_count: thoughtsCount,
|
||||
conversations_count: conversationsCount,
|
||||
last_save: new Date().toISOString(), // Would need to track this separately
|
||||
error: null,
|
||||
serverPath: status.serverPath,
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
connected: true,
|
||||
enabled: status.enabled,
|
||||
configured: status.configured,
|
||||
total_memories: 0,
|
||||
thoughts_count: 0,
|
||||
conversations_count: 0,
|
||||
last_save: null,
|
||||
error: error.message,
|
||||
serverPath: status.serverPath,
|
||||
};
|
||||
}
|
||||
}`;
|
||||
|
||||
content = content.replace(oldFunction, newFunction);
|
||||
|
||||
fs.writeFileSync(filePath, content, 'utf8');
|
||||
console.log('File updated successfully');
|
||||
Reference in New Issue
Block a user