claude-flow-multilang
Version:
Revolutionary multilingual AI orchestration framework with cultural awareness and DDD architecture
293 lines (228 loc) • 7.89 kB
Markdown
# Memory Module
Unified memory persistence module for ruv-swarm, providing both generic SharedMemory and MCP-specific SwarmMemory implementations.
## Features
### SharedMemory
- **SQLite Backend**: Robust persistence with better-sqlite3
- **High-Performance Caching**: LRU cache with memory pressure handling
- **Migration Support**: Schema evolution with versioned migrations
- **TTL Support**: Automatic expiration of temporary data
- **Tagging & Search**: Flexible data organization and retrieval
- **Compression**: Automatic compression for large entries
- **Metrics**: Performance tracking and statistics
### SwarmMemory (extends SharedMemory)
- **Agent Management**: Store and track swarm agents
- **Task Coordination**: Persistent task state and assignment
- **Communication History**: Inter-agent message logging
- **Consensus Tracking**: Decision-making history
- **Neural Patterns**: Store and retrieve learned patterns
- **Performance Metrics**: Swarm-specific analytics
## Installation
The memory module is included with ruv-swarm. To use it in your project:
```javascript
import { SharedMemory, SwarmMemory } from './memory/index.js';
```
## Usage
### Basic SharedMemory Usage
```javascript
import { SharedMemory } from './memory/shared-memory.js';
// Initialize
const memory = new SharedMemory({
directory: '.hive-mind', // Storage directory
filename: 'memory.db', // Database filename
cacheSize: 1000, // Max cache entries
cacheMemoryMB: 50, // Max cache memory in MB
gcInterval: 300000, // Garbage collection interval (5 min)
});
await memory.initialize();
// Store data
await memory.store(
'user:123',
{
name: 'John Doe',
preferences: { theme: 'dark' },
},
{
namespace: 'users',
ttl: 3600, // Expires in 1 hour
tags: ['active', 'premium'],
metadata: { source: 'api' },
},
);
// Retrieve data
const user = await memory.retrieve('user:123', 'users');
// Search by pattern
const results = await memory.search({
pattern: 'user:*',
namespace: 'users',
tags: ['active'],
limit: 10,
});
// Get statistics
const stats = await memory.getStats();
// Close when done
await memory.close();
```
### SwarmMemory for MCP
```javascript
import { SwarmMemory } from './memory/swarm-memory.js';
const swarm = new SwarmMemory({
swarmId: 'my-swarm',
directory: '.swarm',
});
await swarm.initialize();
// Manage agents
await swarm.storeAgent('agent-1', {
id: 'agent-1',
name: 'Code Analyzer',
type: 'analyzer',
status: 'active',
capabilities: ['code-review', 'pattern-detection'],
});
// Track tasks
await swarm.storeTask('task-1', {
id: 'task-1',
description: 'Analyze codebase',
priority: 'high',
status: 'pending',
assignedAgents: ['agent-1'],
});
// Update task progress
await swarm.updateTaskStatus('task-1', 'in_progress', {
progress: 25,
currentFile: 'src/index.js',
});
// Store learned patterns
await swarm.storePattern('pattern-1', {
id: 'pattern-1',
type: 'optimization',
confidence: 0.92,
data: {
name: 'parallel-processing',
conditions: ['large-dataset', 'cpu-intensive'],
strategy: 'worker-threads',
},
});
// Find best patterns for context
const patterns = await swarm.findBestPatterns(
{
tags: ['optimization', 'performance'],
},
5,
);
// Get comprehensive stats
const stats = await swarm.getSwarmStats();
```
## Migration from Old System
To migrate from the old CollectiveMemory or hive-mind database:
```javascript
import { MemoryMigration } from './memory/migration.js';
const migration = new MemoryMigration({
dryRun: false, // Set to true to preview
verbose: true, // Show detailed progress
});
const result = await migration.migrate();
console.log('Migration result:', result);
```
## API Reference
### SharedMemory
#### Core Methods
- `initialize()` - Initialize the database and caching system
- `store(key, value, options)` - Store a value with optional namespace, TTL, tags
- `retrieve(key, namespace)` - Get a value by key and namespace
- `list(namespace, options)` - List entries in a namespace
- `delete(key, namespace)` - Delete a specific entry
- `clear(namespace)` - Clear all entries in a namespace
- `search(options)` - Search entries by pattern, tags, or namespace
- `getStats()` - Get memory statistics
- `backup(filepath)` - Backup the database
- `close()` - Close database connection
#### Events
- `initialized` - Database initialized
- `stored` - Data stored successfully
- `deleted` - Data deleted
- `error` - Error occurred
- `gc` - Garbage collection completed
### SwarmMemory
#### Additional Methods
- `storeAgent(agentId, data)` - Store agent information
- `getAgent(agentId)` - Retrieve agent data
- `listAgents(filter)` - List agents with optional filtering
- `storeTask(taskId, data)` - Store task information
- `updateTaskStatus(taskId, status, result)` - Update task progress
- `getTask(taskId)` - Retrieve task data
- `storeCommunication(from, to, message)` - Log agent communication
- `storeConsensus(id, decision)` - Store consensus decision
- `storePattern(id, pattern)` - Store neural pattern
- `updatePatternMetrics(id, success)` - Update pattern performance
- `findBestPatterns(context, limit)` - Find relevant patterns
- `getSwarmStats()` - Get swarm-specific statistics
- `exportSwarmState()` - Export complete swarm state
- `importSwarmState(state)` - Import swarm state
## Configuration Options
### SharedMemory Options
```javascript
{
directory: '.hive-mind', // Storage directory
filename: 'memory.db', // Database file
cacheSize: 1000, // Max cached entries
cacheMemoryMB: 50, // Max cache memory
compressionThreshold: 10240, // Compress if larger (bytes)
gcInterval: 300000, // GC interval (ms)
enableWAL: true, // Use Write-Ahead Logging
enableVacuum: true // Auto-vacuum database
}
```
### SwarmMemory Options
Inherits all SharedMemory options plus:
```javascript
{
swarmId: 'my-swarm', // Swarm identifier
mcpMode: true // Enable MCP features
}
```
## Performance Considerations
1. **Caching**: Frequently accessed data is cached in memory
2. **Indexing**: Key database fields are indexed for fast queries
3. **Compression**: Large entries are automatically compressed
4. **Garbage Collection**: Expired entries are cleaned periodically
5. **Connection Pooling**: Prepared statements reduce overhead
6. **Memory Management**: LRU eviction prevents unbounded growth
## Schema
### memory_store table
- `id` - Auto-incrementing primary key
- `key` - Unique key within namespace
- `namespace` - Data namespace
- `value` - Stored value (JSON or string)
- `type` - Value type (json/string)
- `metadata` - Additional metadata (JSON)
- `tags` - Search tags (JSON array)
- `created_at` - Creation timestamp
- `updated_at` - Last update timestamp
- `accessed_at` - Last access timestamp
- `access_count` - Number of accesses
- `ttl` - Time to live in seconds
- `expires_at` - Expiration timestamp
- `compressed` - Compression flag
- `size` - Data size in bytes
## Best Practices
1. **Use Namespaces**: Organize data logically
2. **Set TTLs**: Use expiration for temporary data
3. **Tag Data**: Enable efficient searching
4. **Monitor Stats**: Track performance metrics
5. **Regular Backups**: Backup important data
6. **Close Properly**: Always close connections
## Troubleshooting
### Common Issues
1. **Database Locked**: Ensure only one process accesses the database
2. **Memory Growth**: Check cache settings and TTLs
3. **Slow Queries**: Review indexes and search patterns
4. **Migration Errors**: Run with `dryRun: true` first
### Debug Mode
Enable verbose logging:
```javascript
memory.on('error', console.error);
memory.on('stored', console.log);
memory.on('gc', console.log);
```
## License
Part of the ruv-swarm project. See main LICENSE file.