UNPKG

claude-flow

Version:

Ruflo - Enterprise AI agent orchestration for Claude Code. Deploy 60+ specialized agents in coordinated swarms with self-learning, fault-tolerant consensus, vector memory, and MCP integration

158 lines (140 loc) 3.41 kB
/** * Memory Domain Entity * * Represents a memory entry in the V3 system */ import type { Memory as IMemory, MemoryType } from '../../shared/types'; export interface Memory extends IMemory { id: string; agentId: string; content: string; type: MemoryType; timestamp: number; embedding?: number[]; metadata?: Record<string, unknown>; } export class MemoryEntity implements Memory { public readonly id: string; public readonly agentId: string; public content: string; public readonly type: MemoryType; public readonly timestamp: number; public embedding?: number[]; public metadata?: Record<string, unknown>; constructor(config: Memory) { this.id = config.id; this.agentId = config.agentId; this.content = config.content; this.type = config.type; this.timestamp = config.timestamp || Date.now(); this.embedding = config.embedding; this.metadata = config.metadata || {}; } /** * Check if memory has an embedding */ hasEmbedding(): boolean { return this.embedding !== undefined && this.embedding.length > 0; } /** * Get embedding dimension */ getEmbeddingDimension(): number | undefined { return this.embedding?.length; } /** * Update content */ updateContent(content: string): void { this.content = content; } /** * Set embedding */ setEmbedding(embedding: number[]): void { this.embedding = embedding; } /** * Update metadata */ updateMetadata(metadata: Record<string, unknown>): void { this.metadata = { ...this.metadata, ...metadata }; } /** * Check if memory matches a query */ matches(query: Partial<Memory>): boolean { if (query.agentId && this.agentId !== query.agentId) return false; if (query.type && this.type !== query.type) return false; if (query.id && this.id !== query.id) return false; return true; } /** * Calculate age in milliseconds */ getAge(): number { return Date.now() - this.timestamp; } /** * Convert to plain object for serialization */ toJSON(): Memory { return { id: this.id, agentId: this.agentId, content: this.content, type: this.type, timestamp: this.timestamp, embedding: this.embedding, metadata: this.metadata }; } /** * Create memory from config */ static fromConfig(config: Memory): MemoryEntity { return new MemoryEntity(config); } /** * Create a task memory */ static createTaskMemory(agentId: string, content: string, taskId: string): MemoryEntity { return new MemoryEntity({ id: `task-${taskId}-${Date.now()}`, agentId, content, type: 'task', timestamp: Date.now(), metadata: { taskId } }); } /** * Create a context memory */ static createContextMemory(agentId: string, content: string): MemoryEntity { return new MemoryEntity({ id: `context-${Date.now()}`, agentId, content, type: 'context', timestamp: Date.now() }); } /** * Create an event memory */ static createEventMemory(agentId: string, eventType: string, content: string): MemoryEntity { return new MemoryEntity({ id: `event-${Date.now()}`, agentId, content, type: 'event', timestamp: Date.now(), metadata: { eventType } }); } } export { MemoryEntity as default };