@memstack/core 0.7.1 → 0.7.3

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/memory/Summarizer.ts","../src/memory/Pruner.ts","../src/memory/ContextCompiler.ts","../src/memory/MemoryStore.ts","../src/adapters/storage/memory.ts","../src/client.ts","../src/adapters/storage/disk.ts","../src/adapters/storage/markdown.ts","../src/adapters/storage/hybrid.ts","../src/adapters/storage/postgres.ts","../src/adapters/storage/redis.ts","../src/adapters/storage/qdrant.ts","../src/adapters/storage/neo4j.ts","../src/adapters/storage/weaviate.ts","../src/adapters/storage/lancedb.ts","../src/adapters/storage/mongodb.ts","../src/adapters/storage/sqlite.ts","../src/adapters/llm/openai.ts","../src/adapters/llm/anthropic.ts","../src/adapters/embedding/openai.ts","../src/adapters/embedding/cohere.ts","../src/adapters/llm/ollama.ts","../src/adapters/llm/groq.ts"],"names":["mkdir","join","readFile","writeFile","rename","unlink","open","stat","readdir","appendFile","vector","results","points","filters","result","objects"],"mappings":"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","file":"index.cjs","sourcesContent":["export type MemStackErrorCode =\n | \"STORAGE_ERROR\"\n | \"EMBEDDING_ERROR\"\n | \"LLM_ERROR\"\n | \"VALIDATION_ERROR\"\n | \"NOT_FOUND\"\n | \"CONFIG_ERROR\";\n\nexport class MemStackError extends Error {\n code: MemStackErrorCode;\n retryable: boolean;\n details?: Record<string, unknown>;\n\n constructor(\n code: MemStackErrorCode,\n message: string,\n options: { retryable?: boolean; details?: Record<string, unknown> } = {}\n ) {\n super(message);\n this.name = \"MemStackError\";\n this.code = code;\n this.retryable = options.retryable ?? false;\n this.details = options.details;\n }\n}\n\nexport function notFound(entity: string, id: string): MemStackError {\n return new MemStackError(\"NOT_FOUND\", `${entity} not found: ${id}`, {\n retryable: false,\n details: { entity, id },\n });\n}\n\nexport function validationError(message: string, details?: Record<string, unknown>): MemStackError {\n return new MemStackError(\"VALIDATION_ERROR\", message, { details });\n}\n\nexport function storageError(message: string, cause?: unknown): MemStackError {\n return new MemStackError(\"STORAGE_ERROR\", message, {\n retryable: true,\n details: { cause: cause instanceof Error ? cause.message : String(cause) },\n });\n}\n\nexport function configError(message: string): MemStackError {\n return new MemStackError(\"CONFIG_ERROR\", message, { retryable: false });\n}\n","import type { LLMProvider } from \"../interfaces.js\";\nimport type { Memory } from \"../types.js\";\nimport type { SummarizeOptions } from \"../interfaces.js\";\nimport { MemStackError } from \"../errors.js\";\n\nexport class Summarizer {\n private llm: LLMProvider;\n private defaultPrompt: string;\n\n constructor(llm: LLMProvider, defaultPrompt?: string) {\n this.llm = llm;\n this.defaultPrompt = defaultPrompt ??\n \"You are a memory summarizer. Condense the following list of memories into a single, concise summary paragraph that captures the key events, emotional tone, and important details. Write in third person past tense.\";\n }\n\n async summarize(\n memories: Memory[],\n options: SummarizeOptions = {},\n promptOverride?: string\n ): Promise<{ summaryContent: string; tokenCount: number }> {\n if (memories.length === 0) {\n throw new MemStackError(\"VALIDATION_ERROR\", \"No memories to summarize\");\n }\n\n const chunkSize = options.chunkSize ?? 50;\n if (memories.length > chunkSize) {\n return this._summarizeChunked(memories, options, promptOverride);\n }\n\n const sorted = [...memories].sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n const memoryTexts = sorted.map((m) => `[${m.createdAt.toISOString()}] ${m.content}`);\n\n const system = promptOverride ?? this.defaultPrompt;\n const user = memoryTexts.join(\"\\n\\n\");\n\n try {\n const response = await this.llm.complete({ system, user });\n return {\n summaryContent: response.text.trim(),\n tokenCount: response.tokens.total,\n };\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n throw new MemStackError(\n \"LLM_ERROR\",\n `Summarization failed: ${err instanceof Error ? err.message : String(err)}`,\n { retryable: true, details: { cause: err instanceof Error ? err.message : String(err) } }\n );\n }\n }\n\n private async _summarizeChunked(\n memories: Memory[],\n options: SummarizeOptions,\n promptOverride?: string\n ): Promise<{ summaryContent: string; tokenCount: number }> {\n const chunkSize = options.chunkSize ?? 50;\n const sorted = [...memories].sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n\n const chunks: Memory[][] = [];\n for (let i = 0; i < sorted.length; i += chunkSize) {\n chunks.push(sorted.slice(i, i + chunkSize));\n }\n\n let totalTokens = 0;\n\n const chunkSummaries: string[] = [];\n for (const chunk of chunks) {\n const memoryTexts = chunk.map((m) => `[${m.createdAt.toISOString()}] ${m.content}`);\n const system = promptOverride ?? this.defaultPrompt;\n const user = memoryTexts.join(\"\\n\\n\");\n\n try {\n const response = await this.llm.complete({ system, user });\n chunkSummaries.push(response.text.trim());\n totalTokens += response.tokens.total;\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n throw new MemStackError(\n \"LLM_ERROR\",\n `Chunked summarization failed: ${err instanceof Error ? err.message : String(err)}`,\n { retryable: true, details: { cause: err instanceof Error ? err.message : String(err) } }\n );\n }\n }\n\n if (chunkSummaries.length === 1) {\n return { summaryContent: chunkSummaries[0], tokenCount: totalTokens };\n }\n\n const summaryMemories: Memory[] = chunkSummaries.map((content, i) => ({\n id: `_chunk_summary_${i}`,\n actorId: sorted[0].actorId,\n memoryType: \"summary\" as const,\n content,\n importance: 0.5,\n emotionalValence: 0,\n tags: [\"summary\"],\n createdAt: sorted[sorted.length - 1].createdAt,\n }));\n\n const merged = await this._summarizeChunked(summaryMemories, options, promptOverride);\n return {\n summaryContent: merged.summaryContent,\n tokenCount: totalTokens + merged.tokenCount,\n };\n }\n\n async *summarizeStream(\n memories: Memory[],\n options: SummarizeOptions = {},\n promptOverride?: string\n ): AsyncIterable<{ chunk: string; text: string }> {\n if (memories.length === 0) {\n throw new MemStackError(\"VALIDATION_ERROR\", \"No memories to summarize\");\n }\n if (!this.llm.completeStream) {\n const result = await this.summarize(memories, options, promptOverride);\n yield { chunk: result.summaryContent, text: result.summaryContent };\n return;\n }\n\n const chunkSize = options.chunkSize ?? 50;\n let toSummarize = memories;\n if (memories.length > chunkSize) {\n const chunked = await this._summarizeChunked(memories, options, promptOverride);\n toSummarize = [{ id: \"_chunked\", actorId: \"summarizer\", memoryType: \"summary\", content: chunked.summaryContent, importance: 0.5, emotionalValence: 0, tags: [], createdAt: new Date() }];\n }\n\n const sorted = [...toSummarize].sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n const memoryTexts = sorted.map((m) => `[${m.createdAt.toISOString()}] ${m.content}`);\n const system = promptOverride ?? this.defaultPrompt;\n const user = memoryTexts.join(\"\\n\\n\");\n\n let fullText = \"\";\n for await (const chunk of this.llm.completeStream({ system, user })) {\n fullText += chunk.text;\n yield { chunk: chunk.text, text: fullText };\n }\n }\n}\n","import type { Memory } from \"../types.js\";\nimport type { PruneStrategy } from \"../interfaces.js\";\n\nexport class Pruner {\n /** Returns memories to KEEP after applying the strategy. */\n execute(memories: Memory[], strategy: PruneStrategy): Memory[] {\n switch (strategy.type) {\n case \"byAge\":\n return this.keepByAge(memories, strategy);\n case \"byImportance\":\n return this.keepByImportance(memories, strategy);\n case \"byCount\":\n return this.keepByCount(memories, strategy);\n case \"byType\":\n return this.removeByType(memories, strategy);\n case \"custom\":\n return this.removeCustom(memories, strategy);\n case \"compose\":\n return this.keepCompose(memories, strategy);\n default:\n return memories;\n }\n }\n\n dryRun(memories: Memory[], strategy: PruneStrategy): Memory[] {\n return this.execute(memories, strategy);\n }\n\n private keepByAge(memories: Memory[], strategy: PruneStrategy): Memory[] {\n if (!strategy.maxAge) return memories;\n const cutoff = Date.now() - strategy.maxAge;\n return memories.filter((m) => m.createdAt.getTime() >= cutoff);\n }\n\n private keepByImportance(memories: Memory[], strategy: PruneStrategy): Memory[] {\n const threshold = strategy.minImportance ?? 0.5;\n return memories.filter((m) => m.importance >= threshold);\n }\n\n private keepByCount(memories: Memory[], strategy: PruneStrategy): Memory[] {\n const maxPerActor = strategy.maxPerActor ?? 100;\n const grouped = new Map<string, Memory[]>();\n for (const m of memories) {\n const list = grouped.get(m.actorId) || [];\n list.push(m);\n grouped.set(m.actorId, list);\n }\n\n const kept: Memory[] = [];\n for (const [, actorMemories] of grouped) {\n const sorted = [...actorMemories].sort((a, b) => b.importance - a.importance);\n kept.push(...sorted.slice(0, maxPerActor));\n }\n return kept;\n }\n\n /** Remove memories of specified types. Opposite of filtering — removes the matches. */\n private removeByType(memories: Memory[], strategy: PruneStrategy): Memory[] {\n if (!strategy.memoryTypes || strategy.memoryTypes.length === 0) return memories;\n return memories.filter((m) => !strategy.memoryTypes!.includes(m.memoryType));\n }\n\n /** Remove memories matching the predicate. Predicate returns true = should be removed. */\n private removeCustom(memories: Memory[], strategy: PruneStrategy): Memory[] {\n if (!strategy.shouldRemove) return memories;\n return memories.filter((m) => !strategy.shouldRemove!(m));\n }\n\n /** Apply sub-strategies cumulatively: kept memories must pass ALL. */\n private keepCompose(memories: Memory[], strategy: PruneStrategy): Memory[] {\n if (!strategy.strategies || strategy.strategies.length === 0) {\n return memories;\n }\n\n let kept = memories;\n for (const sub of strategy.strategies) {\n kept = this.execute(kept, sub);\n }\n return kept;\n }\n}\n","import type { Memory, CompiledContext } from \"../types.js\";\nimport type { ContextOptions, TokenCounter } from \"../interfaces.js\";\n\nexport class ContextCompiler {\n private tokenCounter: TokenCounter;\n private importantRatio: number;\n\n constructor(tokenCounter?: TokenCounter, importantRatio?: number) {\n this.tokenCounter = tokenCounter ?? this._heuristicTokens.bind(this);\n this.importantRatio = importantRatio ?? 0.6;\n }\n\n private _heuristicTokens(text: string): number {\n const charEst = Math.ceil(text.length / 4);\n const words = text.split(/\\s+/).filter((w) => w.length > 0);\n const wordEst = Math.ceil(words.length * 1.3);\n return Math.max(charEst, Math.max(1, wordEst));\n }\n\n private estimateTokens(text: string): number {\n return this.tokenCounter(text);\n }\n\n /**\n * Truncate text to fit within a token budget, preserving whole words.\n * Appends \"...\" when content is cut. Falls back to character-based\n * truncation for text with few/no word boundaries.\n */\n private truncateToTokens(text: string, maxTokens: number): string {\n if (this.estimateTokens(text) <= maxTokens) return text;\n\n const words = text.split(/\\s+/);\n const targetWords = Math.max(1, Math.floor(maxTokens / 1.3));\n let currentTokens = 0;\n let i = 0;\n for (; i < words.length && i < targetWords; i++) {\n currentTokens += this.estimateTokens(words[i]);\n if (currentTokens > maxTokens) break;\n }\n if (i >= words.length) return text;\n if (i > 0) return words.slice(0, i).join(\" \") + \"...\";\n\n // Single long word (e.g., JSON): fall back to character-based cut\n const charLimit = maxTokens * 4;\n return text.slice(0, charLimit) + \"...\";\n }\n\n compile(memories: Memory[], options: ContextOptions): CompiledContext {\n const maxTokens = options.maxTokens ?? 2000;\n\n const relevant = memories.filter((m) => {\n if (options.memoryTypes && options.memoryTypes.length > 0) {\n return options.memoryTypes.includes(m.memoryType);\n }\n return true;\n });\n\n const sortedRecent = [...relevant].sort(\n (a, b) => b.createdAt.getTime() - a.createdAt.getTime()\n );\n\n const sortedImportant = this.deduplicate(\n [...relevant]\n .filter((m) => m.importance >= 0.5)\n .sort((a, b) => b.importance - a.importance)\n );\n\n const { recentMemories, importantMemories, systemPrompt } =\n this.assembleTokenBudgeted(sortedRecent, sortedImportant, maxTokens);\n\n const tokenEstimate = this.estimateTokens(systemPrompt);\n\n if (options.format === \"messages\") {\n return {\n systemPrompt,\n messages: [{ role: \"system\", content: systemPrompt }],\n recentMemories,\n importantMemories,\n tokenEstimate,\n };\n }\n\n return { systemPrompt, recentMemories, importantMemories, tokenEstimate };\n }\n\n private assembleTokenBudgeted(\n recent: Memory[],\n important: Memory[],\n maxTokens: number\n ): { recentMemories: Memory[]; importantMemories: Memory[]; systemPrompt: string } {\n const includedImportant: Memory[] = [];\n const includedRecent: Memory[] = [];\n const seen = new Set<string>();\n let usedTokens = 0;\n\n // Add important memories first (signal over recency)\n for (const m of important) {\n if (seen.has(m.id)) continue;\n const prefix = `- `;\n const suffix = ` (${m.memoryType}, importance: ${m.importance.toFixed(2)})\\n`;\n const overhead = this.estimateTokens(prefix + suffix);\n let tokens = this.estimateTokens(m.content) + overhead;\n const remaining = Math.floor(maxTokens * this.importantRatio) - usedTokens;\n if (remaining <= 0) break;\n if (tokens > remaining) {\n const contentBudget = Math.max(0, remaining - overhead);\n if (contentBudget > 0) {\n const truncatedContent = this.truncateToTokens(m.content, contentBudget);\n includedImportant.push({ ...m, content: truncatedContent });\n tokens = this.estimateTokens(truncatedContent) + overhead;\n usedTokens += tokens;\n seen.add(m.id);\n }\n } else {\n includedImportant.push(m);\n usedTokens += tokens;\n seen.add(m.id);\n }\n }\n\n // Add recent memories until budget is full\n for (const m of recent) {\n if (seen.has(m.id)) continue;\n const prefix = `- `;\n const suffix = `\\n`;\n const overhead = this.estimateTokens(prefix + suffix);\n let tokens = this.estimateTokens(m.content) + overhead;\n const remaining = maxTokens - usedTokens;\n if (remaining <= 0) break;\n if (tokens > remaining) {\n const contentBudget = Math.max(0, remaining - overhead);\n if (contentBudget > 0) {\n const truncatedContent = this.truncateToTokens(m.content, contentBudget);\n includedRecent.push({ ...m, content: truncatedContent });\n tokens = this.estimateTokens(truncatedContent) + overhead;\n usedTokens += tokens;\n seen.add(m.id);\n }\n } else {\n includedRecent.push(m);\n usedTokens += tokens;\n seen.add(m.id);\n }\n }\n\n const parts: string[] = [];\n if (includedImportant.length > 0) {\n parts.push(\"## Important Memories\");\n for (const m of includedImportant) {\n parts.push(`- ${m.content} (${m.memoryType}, importance: ${m.importance.toFixed(2)})`);\n }\n }\n if (includedRecent.length > 0) {\n parts.push(\"\\n## Recent Interactions\");\n for (const m of includedRecent) {\n parts.push(`- ${m.content}`);\n }\n }\n\n return { recentMemories: includedRecent, importantMemories: includedImportant, systemPrompt: parts.join(\"\\n\") };\n }\n\n private deduplicate(memories: Memory[]): Memory[] {\n const seen = new Set<string>();\n const result: Memory[] = [];\n for (const m of memories) {\n const key = m.content.toLowerCase().trim();\n if (!seen.has(key)) {\n seen.add(key);\n result.push(m);\n }\n }\n return result;\n }\n}\n","import type { Memory, CompiledContext, MemoryStats } from \"../types.js\";\nimport type {\n StorageProvider,\n EmbeddingProvider,\n LLMProvider,\n MemoryStoreInput,\n MemoryRetrieveQuery,\n MemoryCountFilter,\n ContextOptions,\n SummarizeOptions,\n PruneStrategy,\n TokenCounter,\n} from \"../interfaces.js\";\nimport { Summarizer } from \"./Summarizer.js\";\nimport { Pruner } from \"./Pruner.js\";\nimport { ContextCompiler } from \"./ContextCompiler.js\";\nimport { notFound, validationError } from \"../errors.js\";\n\nexport interface MemoryStoreConfig {\n storage: StorageProvider;\n embedding?: EmbeddingProvider;\n llm?: LLMProvider;\n embedOnStore?: boolean;\n summarizationPrompt?: string;\n tokenCounter?: TokenCounter;\n contextImportantRatio?: number;\n limits?: {\n dedupScan?: number;\n contextScan?: number;\n summarizeScan?: number;\n pruneScan?: number;\n exportScan?: number;\n purgeScan?: number;\n };\n}\n\nexport class MemoryStore {\n private storage: StorageProvider;\n private embedding?: EmbeddingProvider;\n private summarizer?: Summarizer;\n private pruner: Pruner;\n private compiler: ContextCompiler;\n private embedOnStore: boolean;\n private limits: Required<NonNullable<MemoryStoreConfig[\"limits\"]>>;\n private contentHashIndex: Map<string, string> | null = null;\n private initialized = false;\n\n private async _ensureInit(): Promise<void> {\n if (!this.initialized) {\n await this.storage.initialize();\n this.initialized = true;\n }\n }\n\n constructor(config: MemoryStoreConfig) {\n this.storage = config.storage;\n this.embedding = config.embedding;\n this.embedOnStore = config.embedOnStore ?? true;\n if (config.llm) {\n this.summarizer = new Summarizer(config.llm, config.summarizationPrompt);\n }\n this.pruner = new Pruner();\n this.compiler = new ContextCompiler(config.tokenCounter, config.contextImportantRatio);\n this.limits = {\n dedupScan: 1000,\n contextScan: 50,\n summarizeScan: 1000,\n pruneScan: 10000,\n exportScan: 100000,\n purgeScan: 100000,\n ...config.limits,\n };\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n await this._ensureInit();\n if (input.onConflict === \"append\") {\n await this._ensureHashIndex();\n const hash = this._hashContent(input.actorId, input.content);\n const existingId = this.contentHashIndex!.get(hash);\n if (existingId) {\n const match = await this.storage.get(existingId);\n if (match) {\n const mergedTags = [...new Set([...(match.tags ?? []), ...(input.tags ?? [])])];\n const updated = await this.storage.store({\n id: match.id,\n actorId: match.actorId,\n content: match.content,\n memoryType: match.memoryType,\n importance: input.importance ?? match.importance,\n emotionalValence: input.emotionalValence ?? match.emotionalValence,\n tags: mergedTags,\n embedding: match.embedding,\n sourceId: input.sourceId ?? match.sourceId,\n metadata: { ...match.metadata, ...input.metadata },\n expiresAt: input.expiresAt ?? match.expiresAt,\n });\n this.contentHashIndex!.set(hash, updated.id);\n return updated;\n }\n }\n }\n\n let withEmbedding = input;\n if (this.embedding && this.embedOnStore) {\n const embeddings = await this.embedding.embed([input.content]);\n withEmbedding = { ...input, embedding: embeddings[0] };\n }\n const { onConflict: _, ...clean } = withEmbedding;\n const memory = await this.storage.store(clean);\n if (this.contentHashIndex !== null) {\n const hash = this._hashContent(memory.actorId, memory.content);\n this.contentHashIndex.set(hash, memory.id);\n }\n return memory;\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n await this._ensureInit();\n const appendInputs = inputs.filter((i) => i.onConflict === \"append\");\n const normalInputs = inputs.filter((i) => i.onConflict !== \"append\");\n\n const results: Memory[] = [];\n\n for (const input of appendInputs) {\n results.push(await this.store(input));\n }\n\n if (normalInputs.length === 0) return results;\n\n let stored: Memory[];\n if (this.embedding && this.embedOnStore) {\n const enrichedResults: Memory[] = [];\n const batchSize = this.embedding.maxBatchSize ?? 2048;\n for (let i = 0; i < normalInputs.length; i += batchSize) {\n const batch = normalInputs.slice(i, i + batchSize);\n const texts = batch.map((inp) => inp.content);\n const embeddings = await this.embedding!.embed(texts);\n const enriched = batch.map((input, j) => ({ ...input, embedding: embeddings[j] }));\n const batchResults = await this.storage.storeBatch(enriched);\n enrichedResults.push(...batchResults);\n }\n stored = enrichedResults;\n } else {\n stored = await this.storage.storeBatch(normalInputs);\n }\n\n if (this.contentHashIndex !== null) {\n for (const mem of stored) {\n const hash = this._hashContent(mem.actorId, mem.content);\n this.contentHashIndex.set(hash, mem.id);\n }\n }\n\n results.push(...stored);\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n await this._ensureInit();\n return this.storage.get(id);\n }\n\n async delete(id: string): Promise<void> {\n await this._ensureInit();\n return this.storage.delete(id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n await this._ensureInit();\n return this.storage.deleteMany(ids);\n }\n\n async touch(id: string): Promise<void> {\n await this._ensureInit();\n const memory = await this.storage.get(id);\n if (!memory) throw notFound(\"Memory\", id);\n if (this.storage.touch) {\n return this.storage.touch(id);\n }\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n await this._ensureInit();\n return this.storage.count(filter);\n }\n\n async retrieve(query: MemoryRetrieveQuery): Promise<Memory[]> {\n await this._ensureInit();\n let embedding: number[] | undefined;\n if (this.embedding && query.query && (query.strategy === \"semantic\" || query.strategy === \"hybrid\")) {\n const vecs = await this.embedding.embed([query.query]);\n embedding = vecs[0];\n }\n let results = await this.storage.retrieve(query, embedding);\n if (query.createdAfter) {\n results = results.filter((m) => m.createdAt >= query.createdAfter!);\n }\n if (query.createdBefore) {\n results = results.filter((m) => m.createdAt <= query.createdBefore!);\n }\n return results;\n }\n\n async compileContext(options: ContextOptions): Promise<CompiledContext> {\n await this._ensureInit();\n const maxTokens = options.maxTokens ?? 2000;\n const memories = await this.storage.retrieve({\n actorId: options.actorId,\n limit: this.limits.contextScan,\n strategy: options.retrieveStrategy,\n });\n return this.compiler.compile(memories, { ...options, maxTokens });\n }\n\n async summarize(\n options: SummarizeOptions,\n onError?: (err: Error) => void\n ): Promise<{ summary: Memory; deletedCount: number }> {\n await this._ensureInit();\n if (!this.summarizer) {\n throw validationError(\"No LLM configured for summarization\");\n }\n\n const allMemories = await this.storage.retrieve({\n actorId: options.actorId,\n memoryTypes: options.memoryTypes ?? [\"interaction\"],\n limit: this.limits.summarizeScan,\n strategy: \"recent\",\n });\n\n let toSummarize = allMemories;\n if (options.olderThan) {\n toSummarize = toSummarize.filter((m) => m.createdAt < options.olderThan!);\n }\n if (options.skipMostRecent) {\n const sorted = [...toSummarize].sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n toSummarize = sorted.slice(0, Math.max(0, sorted.length - options.skipMostRecent));\n }\n if (options.targetCount && toSummarize.length > options.targetCount) {\n const sorted = [...toSummarize].sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n toSummarize = sorted.slice(0, options.targetCount);\n }\n\n if (toSummarize.length === 0) {\n throw validationError(\"No memories to summarize\");\n }\n\n let summaryContent: string;\n try {\n const result = await this.summarizer.summarize(toSummarize, options, options.prompt);\n summaryContent = result.summaryContent;\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error(String(err)));\n throw err;\n }\n\n const summary: Memory = await this.storage.store({\n actorId: options.actorId ?? toSummarize[0].actorId,\n content: summaryContent,\n memoryType: \"summary\",\n importance: Math.max(...toSummarize.map((m) => m.importance)),\n emotionalValence:\n toSummarize.reduce((sum, m) => sum + m.emotionalValence, 0) / toSummarize.length,\n tags: [\"summary\"],\n sourceId: toSummarize[0].id,\n });\n\n let deletedCount = 0;\n if (!options.keepOriginals) {\n const ids = toSummarize.map((m) => m.id);\n deletedCount = await this.storage.deleteMany(ids);\n }\n\n return { summary, deletedCount };\n }\n\n async *summarizeStream(options: SummarizeOptions): AsyncIterable<{ chunk: string; text: string }> {\n await this._ensureInit();\n if (!this.summarizer) {\n throw validationError(\"No LLM configured for summarization\");\n }\n\n const allMemories = await this.storage.retrieve({\n actorId: options.actorId,\n memoryTypes: options.memoryTypes ?? [\"interaction\"],\n limit: this.limits.summarizeScan,\n strategy: \"recent\",\n });\n\n let toSummarize = allMemories;\n if (options.olderThan) {\n toSummarize = toSummarize.filter((m) => m.createdAt < options.olderThan!);\n }\n if (options.skipMostRecent) {\n const sorted = [...toSummarize].sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n toSummarize = sorted.slice(0, Math.max(0, sorted.length - options.skipMostRecent));\n }\n if (options.targetCount && toSummarize.length > options.targetCount) {\n const sorted = [...toSummarize].sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n toSummarize = sorted.slice(0, options.targetCount);\n }\n\n if (toSummarize.length === 0) {\n throw validationError(\"No memories to summarize\");\n }\n\n yield* this.summarizer.summarizeStream(toSummarize, options, options.prompt);\n }\n\n async prune(strategy: PruneStrategy): Promise<{ pruned: string[]; count: number }> {\n await this._ensureInit();\n const allMemories = await this.storage.retrieve({ actorId: strategy.actorId, limit: this.limits.pruneScan });\n const kept = this.pruner.execute(allMemories, strategy);\n const keptIds = new Set(kept.map((k) => k.id));\n const prunedIds = allMemories.filter((m) => !keptIds.has(m.id)).map((m) => m.id);\n let count = 0;\n if (prunedIds.length > 0) {\n count = await this.storage.deleteMany(prunedIds);\n }\n return { pruned: prunedIds, count };\n }\n\n async dryRunPrune(strategy: PruneStrategy): Promise<{ wouldPrune: string[]; count: number }> {\n await this._ensureInit();\n const allMemories = await this.storage.retrieve({ actorId: strategy.actorId, limit: this.limits.pruneScan });\n const kept = this.pruner.execute(allMemories, strategy);\n const keptIds = new Set(kept.map((k) => k.id));\n const wouldPrune = allMemories.filter((m) => !keptIds.has(m.id)).map((m) => m.id);\n return { wouldPrune, count: wouldPrune.length };\n }\n\n async export(actorId?: string): Promise<Memory[]> {\n await this._ensureInit();\n return this.storage.retrieve({ actorId, limit: this.limits.exportScan });\n }\n\n async stats(actorId?: string): Promise<MemoryStats> {\n await this._ensureInit();\n const memories = await this.storage.retrieve({ actorId, limit: this.limits.exportScan });\n const now = new Date();\n const byType: Record<string, number> = {};\n const byActor: Record<string, { count: number; oldest: Date; newest: Date; totalImportance: number }> = {};\n let totalImportance = 0;\n let expired = 0;\n let oldest: Date | null = null;\n let newest: Date | null = null;\n\n for (const m of memories) {\n totalImportance += m.importance;\n byType[m.memoryType] = (byType[m.memoryType] ?? 0) + 1;\n\n const actor = byActor[m.actorId] ?? { count: 0, oldest: m.createdAt, newest: m.createdAt, totalImportance: 0 };\n actor.count++;\n actor.totalImportance += m.importance;\n if (m.createdAt < actor.oldest) actor.oldest = m.createdAt;\n if (m.createdAt > actor.newest) actor.newest = m.createdAt;\n byActor[m.actorId] = actor;\n\n if (m.expiresAt && m.expiresAt <= now) expired++;\n if (!oldest || m.createdAt < oldest) oldest = m.createdAt;\n if (!newest || m.createdAt > newest) newest = m.createdAt;\n }\n\n const byActorFinal: MemoryStats[\"byActor\"] = {};\n for (const [id, a] of Object.entries(byActor)) {\n byActorFinal[id] = { count: a.count, oldest: a.oldest, newest: a.newest, avgImportance: a.totalImportance / a.count };\n }\n\n return {\n total: memories.length,\n expired,\n oldest,\n newest,\n avgImportance: memories.length > 0 ? totalImportance / memories.length : 0,\n byType: byType as Record<string, number>,\n byActor: byActorFinal,\n };\n }\n\n async purgeActor(actorId: string): Promise<number> {\n await this._ensureInit();\n const memories = await this.storage.retrieve({ actorId, limit: this.limits.purgeScan ?? 100000 });\n if (memories.length === 0) return 0;\n return this.storage.deleteMany(memories.map((m) => m.id));\n }\n\n async merge(ids: string[]): Promise<Memory> {\n await this._ensureInit();\n if (ids.length < 2) throw validationError(\"merge requires at least 2 memory IDs\");\n\n const memories: Memory[] = [];\n for (const id of ids) {\n const m = await this.storage.get(id);\n if (m) memories.push(m);\n }\n if (memories.length < 2) throw validationError(\"At least 2 of the provided IDs must exist\");\n\n const sorted = memories.sort((a, b) => b.importance - a.importance);\n const winner = sorted[0];\n const rest = sorted.slice(1);\n\n const mergedContent = [\n winner.content,\n \"\",\n \"--- merged from \" + rest.length + \" related memories ---\",\n ...rest.map((m) => \"- \" + m.content),\n ].join(\"\\n\");\n\n const mergedTags = [...new Set(memories.flatMap((m) => m.tags))];\n const mergedMetadata = {\n ...winner.metadata,\n mergedFrom: rest.map((m) => m.id),\n };\n\n const updated = await this.storage.store({\n id: winner.id,\n actorId: winner.actorId,\n content: mergedContent,\n memoryType: winner.memoryType,\n importance: winner.importance,\n emotionalValence: winner.emotionalValence,\n tags: mergedTags,\n embedding: winner.embedding,\n sourceId: winner.sourceId,\n metadata: mergedMetadata,\n expiresAt: winner.expiresAt,\n });\n\n await this.storage.deleteMany(rest.map((m) => m.id));\n\n return updated;\n }\n\n private async _ensureHashIndex(): Promise<void> {\n if (this.contentHashIndex !== null) return;\n this.contentHashIndex = new Map();\n const existing = await this.storage.retrieve({ limit: this.limits.dedupScan });\n for (const m of existing) {\n const hash = this._hashContent(m.actorId, m.content);\n this.contentHashIndex.set(hash, m.id);\n }\n }\n\n private _hashContent(actorId: string, content: string): string {\n const normalized = `${actorId}::${content.toLowerCase().trim()}`;\n let hash = 14695981039346656037n;\n for (let i = 0; i < normalized.length; i++) {\n hash ^= BigInt(normalized.charCodeAt(i));\n hash *= 1099511628211n;\n }\n return hash.toString(36);\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { notFound } from \"../../errors.js\";\n\ninterface MemoryRecord extends Memory {\n _touchedAt: Date;\n}\n\nexport class InMemoryStorageAdapter implements StorageProvider {\n private memories: Map<string, MemoryRecord> = new Map();\n\n async initialize(): Promise<void> {}\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const memory: MemoryRecord = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n _touchedAt: now,\n };\n this.memories.set(memory.id, memory);\n return memory;\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const memory = this.memories.get(id);\n if (!memory) return null;\n if (memory.expiresAt && memory.expiresAt <= new Date()) {\n this.memories.delete(id);\n return null;\n }\n return memory;\n }\n\n async delete(id: string): Promise<void> {\n if (!this.memories.has(id)) throw notFound(\"Memory\", id);\n this.memories.delete(id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n let count = 0;\n for (const id of ids) {\n if (this.memories.has(id)) {\n this.memories.delete(id);\n count++;\n }\n }\n return count;\n }\n\n async retrieve(query: MemoryRetrieveQuery, _embedding?: number[]): Promise<Memory[]> {\n let results = Array.from(this.memories.values());\n\n // Filter out expired\n const now = new Date();\n results = results.filter((m) => !m.expiresAt || m.expiresAt > now);\n\n if (query.actorId) {\n results = results.filter((m) => m.actorId === query.actorId);\n }\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n results = results.filter((m) => query.memoryTypes!.includes(m.memoryType));\n }\n if (query.tags && query.tags.length > 0) {\n results = results.filter((m) => m.tags?.some((t) => query.tags!.includes(t)));\n }\n if (query.query) {\n const terms = query.query.toLowerCase().split(/\\s+/).filter(Boolean);\n results = results.filter((m) => {\n const content = m.content.toLowerCase();\n return terms.some((t) => content.includes(t));\n });\n }\n if (query.createdAfter) {\n results = results.filter((m) => m.createdAt >= query.createdAfter!);\n }\n if (query.createdBefore) {\n results = results.filter((m) => m.createdAt <= query.createdBefore!);\n }\n\n switch (query.strategy) {\n case \"recent\":\n results.sort((a, b) => b._touchedAt.getTime() - a._touchedAt.getTime());\n break;\n case \"important\":\n results.sort((a, b) => b.importance - a.importance);\n break;\n case \"hybrid\":\n case \"semantic\":\n default:\n results.sort((a, b) => b.importance - a.importance || b._touchedAt.getTime() - a._touchedAt.getTime());\n break;\n }\n\n // Touch records on retrieval (for recency tracking in context assembly)\n for (const r of results.slice(0, query.limit ?? 10)) {\n r._touchedAt = new Date();\n }\n\n const limit = query.limit ?? 10;\n return results.slice(0, limit);\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const now = new Date();\n let results = Array.from(this.memories.values())\n .filter((m) => !m.expiresAt || m.expiresAt > now);\n\n if (filter?.actorId) {\n results = results.filter((m) => m.actorId === filter.actorId);\n }\n if (filter?.memoryType) {\n results = results.filter((m) => m.memoryType === filter.memoryType);\n }\n if (filter?.minImportance !== undefined) {\n results = results.filter((m) => m.importance >= filter.minImportance!);\n }\n return results.length;\n }\n\n async touch(id: string): Promise<void> {\n const memory = this.memories.get(id);\n if (!memory) throw notFound(\"Memory\", id);\n memory._touchedAt = new Date();\n }\n\n async close(): Promise<void> {\n this.memories.clear();\n }\n\n getAllMemories(): Memory[] {\n return Array.from(this.memories.values());\n }\n}\n","import type { Memory, ProcessResult, MemStackSnapshot, HealthStatus } from \"./types.js\";\nimport type { MemStackConfig, ProcessInput, MemoryStoreInput, StorageProvider } from \"./interfaces.js\";\nimport { MemoryStore } from \"./memory/MemoryStore.js\";\nimport { InMemoryStorageAdapter } from \"./adapters/storage/memory.js\";\nimport { configError, validationError } from \"./errors.js\";\n\nexport class MemStack {\n readonly memory: MemoryStore;\n\n private config: MemStackConfig;\n private storage: StorageProvider;\n private processCounts = new Map<string, number>();\n private pruneCheckCount = 0;\n\n constructor(config: MemStackConfig) {\n if (!config.llm) {\n throw configError(\"LLM provider is required\");\n }\n\n this.config = config;\n this.storage = config.storage ?? new InMemoryStorageAdapter();\n\n this.memory = new MemoryStore({\n storage: this.storage,\n embedding: config.embedding,\n llm: config.llm,\n embedOnStore: config.defaults?.embedOnStore ?? true,\n summarizationPrompt: config.defaults?.summarizationPrompt,\n });\n }\n\n async process(input: ProcessInput): Promise<ProcessResult> {\n // Auto-enrichment: importance + tags via LLM when not provided\n let importance = input.importance;\n let tags = input.tags;\n\n const needImportance = importance === undefined && this.config.defaults?.autoImportance;\n const needTags = (!tags || tags.length === 0) && this.config.defaults?.autoTags;\n\n if (needImportance || needTags) {\n try {\n if (needImportance && needTags) {\n // Batch both into one LLM call\n const result = await this.config.llm.complete({\n system:\n \"Analyze the memory and respond with a JSON object: {\\\"importance\\\": <0.0-1.0>, \\\"tags\\\": [<array of 1-5 lowercase single-word tags>]}. Return ONLY the JSON, nothing else.\",\n user: input.content,\n maxTokens: 100,\n temperature: 0,\n });\n const parsed = this._parseEnrichmentJson(result.text);\n if (parsed.importance !== undefined) importance = parsed.importance;\n if (parsed.tags) tags = parsed.tags;\n } else if (needImportance) {\n const result = await this.config.llm.complete({\n system:\n \"Rate the importance of the following memory for an AI agent on a scale of 0.0 to 1.0, where 0.0 is trivial and 1.0 is critical. Return ONLY a single float number, nothing else.\",\n user: input.content,\n maxTokens: 10,\n temperature: 0,\n });\n const parsed = parseFloat(result.text.trim());\n importance = Number.isFinite(parsed) ? Math.max(0, Math.min(1, parsed)) : 0.5;\n } else if (needTags) {\n const result = await this.config.llm.complete({\n system:\n \"Extract 1-5 concise, lowercase, single-word tags from the following memory. Return ONLY a JSON array of strings, nothing else. Example: [\\\"combat\\\", \\\"goblin\\\", \\\"forest\\\"]\",\n user: input.content,\n maxTokens: 80,\n temperature: 0,\n });\n tags = this._parseTagsJson(result.text);\n }\n } catch (err) {\n this.config.hooks?.onError?.(\n err instanceof Error ? err : new Error(String(err)),\n \"auto-enrich\"\n );\n if (importance === undefined) importance = 0.5;\n if (!tags) tags = [];\n }\n }\n\n const memoryInput: MemoryStoreInput = {\n actorId: input.actorId,\n content: input.content,\n memoryType: input.memoryType ?? \"interaction\",\n importance: importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: tags ?? [],\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n onConflict: input.onConflict,\n };\n\n const memory = await this.memory.store(memoryInput);\n this.config.hooks?.onMemoryStored?.(memory);\n\n const count = (this.processCounts.get(input.actorId) ?? 0) + 1;\n this.processCounts.set(input.actorId, count);\n\n // Auto-summarize if threshold is hit\n let summaryCreated: Memory | undefined;\n const threshold = this.config.defaults?.summarizationThreshold ?? 100;\n if (threshold > 0 && count % threshold === 0) {\n try {\n const result = await this.memory.summarize(\n {\n actorId: input.actorId,\n memoryTypes: [\"interaction\"],\n skipMostRecent: 5,\n targetCount: Math.min(15, count),\n },\n this.config.hooks?.onError\n ? (err) => this.config.hooks!.onError!(err, \"summarize\")\n : undefined\n );\n summaryCreated = result.summary;\n this.config.hooks?.onSummaryCreated?.(result.summary, result.deletedCount);\n } catch (err) {\n this.config.hooks?.onError?.(\n err instanceof Error ? err : new Error(String(err)),\n \"summarize\"\n );\n }\n }\n\n // Auto-prune if configured (throttled)\n this.pruneCheckCount++;\n const pruneStrategy = this.config.defaults?.pruneStrategy;\n const pruneInterval = this.config.defaults?.pruneInterval ?? 100;\n if (pruneStrategy && this.pruneCheckCount % pruneInterval === 0) {\n try {\n const pruneResult = await this.memory.prune(pruneStrategy);\n if (pruneResult.count > 0) {\n this.config.hooks?.onMemoryPruned?.(pruneResult.pruned);\n }\n } catch (err) {\n this.config.hooks?.onError?.(\n err instanceof Error ? err : new Error(String(err)),\n \"prune\"\n );\n }\n }\n\n return { memory, summaryCreated };\n }\n\n async export(actorId?: string): Promise<MemStackSnapshot> {\n const memories = await this.memory.export(actorId);\n return {\n version: 1,\n memories,\n exportedAt: new Date().toISOString(),\n };\n }\n\n async import(snapshot: MemStackSnapshot): Promise<void> {\n if (snapshot.version !== 1) {\n throw validationError(`Unsupported snapshot version: ${snapshot.version}`);\n }\n const memories = snapshot.memories.map((m, i) => {\n const createdAt = typeof m.createdAt === \"string\" ? new Date(m.createdAt) : m.createdAt;\n const expiresAt = typeof m.expiresAt === \"string\" ? new Date(m.expiresAt) : m.expiresAt;\n const label = m.id ? `id: ${m.id}` : `index ${i}`;\n if (createdAt && isNaN(createdAt.getTime())) {\n throw validationError(`Invalid createdAt for memory (${label}): ${String(m.createdAt)}`);\n }\n if (expiresAt && isNaN(expiresAt.getTime())) {\n throw validationError(`Invalid expiresAt for memory (${label}): ${String(m.expiresAt)}`);\n }\n return { ...m, createdAt, expiresAt };\n });\n await this.memory.storeBatch(memories);\n }\n\n async health(): Promise<HealthStatus> {\n const status: HealthStatus = { storage: false, llm: false, embedding: false };\n\n try {\n await this.memory.count();\n status.storage = true;\n } catch { /* storage check failed */ }\n\n try {\n await this.config.llm.complete({ system: \"ok\", user: \"health\", maxTokens: 1 });\n status.llm = true;\n } catch { /* llm check failed */ }\n\n if (this.config.embedding) {\n try {\n await this.config.embedding.embed([\"health check\"]);\n status.embedding = true;\n } catch { /* embedding check failed */ }\n }\n\n return status;\n }\n\n async close(): Promise<void> {\n await this.storage.close();\n }\n\n private _parseEnrichmentJson(\n text: string\n ): { importance?: number; tags?: string[] } {\n try {\n const json = JSON.parse(this._extractJson(text)) as Record<string, unknown>;\n const result: { importance?: number; tags?: string[] } = {};\n if (typeof json.importance === \"number\" && Number.isFinite(json.importance)) {\n result.importance = Math.max(0, Math.min(1, json.importance));\n }\n if (\n Array.isArray(json.tags) &&\n json.tags.every((t: unknown) => typeof t === \"string\")\n ) {\n result.tags = (json.tags as string[]).map((t) => t.toLowerCase().trim()).slice(0, 5);\n }\n return result;\n } catch {\n return {};\n }\n }\n\n private _parseTagsJson(text: string): string[] {\n try {\n const parsed = JSON.parse(this._extractJson(text)) as unknown;\n if (Array.isArray(parsed) && parsed.every((t: unknown) => typeof t === \"string\")) {\n return (parsed as string[]).map((t) => t.toLowerCase().trim()).slice(0, 5);\n }\n } catch {\n // Fallback: try comma-separated\n }\n return text\n .split(\",\")\n .map((t) => t.replace(/[\\[\\]\"]/g, \"\").trim().toLowerCase())\n .filter((t) => t.length > 0)\n .slice(0, 5);\n }\n\n /** Strip markdown code fences and extract the JSON payload from LLM output. */\n private _extractJson(text: string): string {\n let cleaned = text.trim();\n // Remove ```json ... ``` or ``` ... ``` fences\n const fenceMatch = cleaned.match(/```(?:json)?\\s*([\\s\\S]*?)```/);\n if (fenceMatch) cleaned = fenceMatch[1].trim();\n return cleaned;\n }\n}\n","import { mkdir, readFile, writeFile, readdir, open, unlink, rename, stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { storageError, notFound } from \"../../errors.js\";\n\ninterface MemoryRecord extends Memory {\n _touchedAt: string;\n}\n\nexport interface DiskStorageConfig {\n /** Directory to store memory files. Default: \"./memstack-data\" */\n storageDir?: string;\n}\n\nexport class DiskStorageAdapter implements StorageProvider {\n private dir: string;\n private _writeLocks = new Map<string, Promise<void>>();\n private _idIndex = new Map<string, string>();\n\n constructor(config: DiskStorageConfig = {}) {\n this.dir = config.storageDir ?? \"./memstack-data\";\n }\n\n async initialize(): Promise<void> {\n await mkdir(this.dir, { recursive: true });\n await this._buildIndex();\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const memory: MemoryRecord = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n _touchedAt: now.toISOString(),\n };\n\n await this._withWriteLock(input.actorId, async () => {\n const records = await this._readFile(input.actorId);\n const existingIdx = records.findIndex((r) => r.id === memory.id);\n if (existingIdx !== -1) {\n records[existingIdx] = memory;\n } else {\n records.push(memory);\n }\n this._idIndex.set(memory.id, input.actorId);\n await this._writeFile(input.actorId, records);\n });\n\n return this._toExternal(memory);\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const byActor = new Map<string, MemoryRecord[]>();\n const now = new Date();\n const all: MemoryRecord[] = [];\n\n for (const input of inputs) {\n const memory: MemoryRecord = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n _touchedAt: now.toISOString(),\n };\n all.push(memory);\n const group = byActor.get(input.actorId) ?? [];\n group.push(memory);\n byActor.set(input.actorId, group);\n }\n\n for (const [actorId, group] of byActor) {\n await this._withWriteLock(actorId, async () => {\n const existing = await this._readFile(actorId);\n for (const mem of group) {\n const existingIdx = existing.findIndex((r) => r.id === mem.id);\n if (existingIdx !== -1) {\n existing[existingIdx] = mem;\n } else {\n existing.push(mem);\n }\n this._idIndex.set(mem.id, actorId);\n }\n await this._writeFile(actorId, existing);\n });\n }\n\n return all.map((m) => this._toExternal(m));\n }\n\n async get(id: string): Promise<Memory | null> {\n const actorId = this._idIndex.get(id);\n if (actorId) {\n const records = await this._readFile(actorId);\n const record = records.find((r) => r.id === id);\n if (record) {\n if (record.expiresAt && new Date(record.expiresAt) <= new Date()) return null;\n return this._toExternal(record);\n }\n }\n const actorIds = await this._listActors();\n for (const aid of actorIds) {\n const records = await this._readFile(aid);\n const record = records.find((r) => r.id === id);\n if (record) {\n this._idIndex.set(id, aid);\n if (record.expiresAt && new Date(record.expiresAt) <= new Date()) return null;\n return this._toExternal(record);\n }\n }\n return null;\n }\n\n async delete(id: string): Promise<void> {\n let actorId = this._idIndex.get(id);\n if (!actorId) {\n const actorIds = await this._listActors();\n for (const aid of actorIds) {\n const records = await this._readFile(aid);\n if (records.some((r) => r.id === id)) { actorId = aid; break; }\n }\n }\n if (!actorId) throw notFound(\"Memory\", id);\n\n let deleted = false;\n await this._withWriteLock(actorId, async () => {\n const fresh = await this._readFile(actorId);\n const i = fresh.findIndex((r) => r.id === id);\n if (i !== -1) {\n fresh.splice(i, 1);\n this._idIndex.delete(id);\n await this._writeFile(actorId, fresh);\n deleted = true;\n }\n });\n\n if (!deleted) throw notFound(\"Memory\", id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const idSet = new Set(ids);\n let count = 0;\n const actorIds = await this._listActors();\n\n for (const actorId of actorIds) {\n await this._withWriteLock(actorId, async () => {\n const records = await this._readFile(actorId);\n const before = records.length;\n const filtered = records.filter((r) => !idSet.has(r.id));\n count += before - filtered.length;\n if (before !== filtered.length) {\n for (const r of records) {\n if (idSet.has(r.id)) this._idIndex.delete(r.id);\n }\n await this._writeFile(actorId, filtered);\n }\n });\n }\n\n return count;\n }\n\n async retrieve(query: MemoryRetrieveQuery, _embedding?: number[]): Promise<Memory[]> {\n const actorIds = query.actorId ? [query.actorId] : await this._listActors();\n let results: MemoryRecord[] = [];\n\n for (const actorId of actorIds) {\n let records = await this._readFile(actorId);\n const now = new Date();\n records = records.filter((r) => !r.expiresAt || new Date(r.expiresAt) > now);\n\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n records = records.filter((r) => query.memoryTypes!.includes(r.memoryType));\n }\n if (query.tags && query.tags.length > 0) {\n records = records.filter((r) => r.tags?.some((t) => query.tags!.includes(t)));\n }\n if (query.query) {\n const terms = query.query.toLowerCase().split(/\\s+/).filter(Boolean);\n records = records.filter((r) => {\n const content = r.content.toLowerCase();\n return terms.some((t) => content.includes(t));\n });\n }\n\n results.push(...records);\n }\n\n switch (query.strategy) {\n case \"recent\":\n results.sort((a, b) => new Date(b._touchedAt).getTime() - new Date(a._touchedAt).getTime());\n break;\n case \"important\":\n results.sort((a, b) => b.importance - a.importance);\n break;\n case \"hybrid\":\n case \"semantic\":\n default:\n results.sort(\n (a, b) =>\n b.importance - a.importance || new Date(b._touchedAt).getTime() - new Date(a._touchedAt).getTime()\n );\n break;\n }\n\n // Touch records on retrieval\n const nowStr = new Date().toISOString();\n const toTouch = results.slice(0, query.limit ?? 10);\n const touchedActors = new Set<string>();\n for (const r of toTouch) {\n r._touchedAt = nowStr;\n touchedActors.add(r.actorId);\n }\n // Persist touches back to disk\n for (const actorId of touchedActors) {\n await this._withWriteLock(actorId, async () => {\n const records = await this._readFile(actorId);\n let changed = false;\n for (const r of records) {\n const touched = toTouch.find((t) => t.id === r.id);\n if (touched) { r._touchedAt = nowStr; changed = true; }\n }\n if (changed) await this._writeFile(actorId, records);\n });\n }\n\n const limit = query.limit ?? 10;\n return results.slice(0, limit).map((r) => this._toExternal(r));\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const actorIds = filter?.actorId ? [filter.actorId] : await this._listActors();\n let total = 0;\n const now = new Date();\n\n for (const actorId of actorIds) {\n let records = await this._readFile(actorId);\n records = records.filter((r) => !r.expiresAt || new Date(r.expiresAt) > now);\n\n if (filter?.memoryType) {\n records = records.filter((r) => r.memoryType === filter.memoryType);\n }\n if (filter?.minImportance !== undefined) {\n records = records.filter((r) => r.importance >= filter.minImportance!);\n }\n total += records.length;\n }\n\n return total;\n }\n\n async touch(id: string): Promise<void> {\n const actorId = this._idIndex.get(id);\n if (!actorId) throw notFound(\"Memory\", id);\n\n const nowStr = new Date().toISOString();\n await this._withWriteLock(actorId, async () => {\n const fresh = await this._readFile(actorId);\n const match = fresh.find((r) => r.id === id);\n if (!match) throw notFound(\"Memory\", id);\n match._touchedAt = nowStr;\n await this._writeFile(actorId, fresh);\n });\n }\n\n async close(): Promise<void> {\n this._writeLocks.clear();\n }\n\n // ── Internal ──\n\n private _filePath(actorId: string): string {\n const safe = actorId.replace(/[^a-zA-Z0-9_\\-.,@]/g, \"_\");\n return join(this.dir, `${safe}.json`);\n }\n\n private async _readFile(actorId: string): Promise<MemoryRecord[]> {\n try {\n const raw = await readFile(this._filePath(actorId), \"utf-8\");\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed) ? (parsed as MemoryRecord[]) : [];\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return [];\n throw storageError(`Failed to read memories for actor ${actorId}: ${(err as Error).message}`);\n }\n }\n\n private async _writeFile(actorId: string, records: MemoryRecord[]): Promise<void> {\n const filePath = this._filePath(actorId);\n // Write-then-rename instead of an in-place write: `rename` is atomic on\n // POSIX filesystems, so a concurrent reader (get/retrieve, which don't\n // take the write lock) never observes a partially-written file.\n const tmpPath = `${filePath}.${process.pid}.${Date.now().toString(36)}.tmp`;\n try {\n await writeFile(tmpPath, JSON.stringify(records, null, 2), \"utf-8\");\n await rename(tmpPath, filePath);\n } catch (err) {\n await unlink(tmpPath).catch(() => {});\n throw storageError(`Failed to write memories for actor ${actorId}: ${(err as Error).message}`);\n }\n }\n\n private async _withWriteLock(actorId: string, fn: () => Promise<void>): Promise<void> {\n // In-process serialization: cheap, and avoids every same-process caller\n // hitting the cross-process lockfile's retry loop for no reason.\n const prev = this._writeLocks.get(actorId) ?? Promise.resolve();\n let resolve!: () => void;\n const next = new Promise<void>((r) => { resolve = r; });\n this._writeLocks.set(actorId, next);\n await prev;\n // Cross-process serialization: the in-process chain above only protects\n // callers sharing this adapter instance. Separate OS processes (e.g. two\n // `memstack` CLI invocations, or multiple server workers) each have their\n // own instance and their own copy of `_writeLocks`, so without this an\n // interleaved read-modify-write across processes silently loses updates.\n const releaseFileLock = await this._acquireFileLock(actorId);\n try {\n await fn();\n } finally {\n await releaseFileLock();\n resolve();\n // Clean up: only remove this entry if it hasn't been replaced by a newer lock\n if (this._writeLocks.get(actorId) === next) {\n this._writeLocks.delete(actorId);\n }\n }\n }\n\n /**\n * Acquires an exclusive cross-process lock for `actorId` via `open(path, \"wx\")`\n * (atomic create-if-absent). Retries with jittered backoff while the lock is\n * held elsewhere, and steals locks left behind by a crashed process once\n * they're older than `staleMs`.\n */\n private async _acquireFileLock(actorId: string): Promise<() => Promise<void>> {\n const lockPath = `${this._filePath(actorId)}.lock`;\n const staleMs = 10_000;\n const timeoutMs = 30_000;\n const start = Date.now();\n\n while (true) {\n try {\n const handle = await open(lockPath, \"wx\");\n await handle.close();\n return async () => {\n await unlink(lockPath).catch(() => {});\n };\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== \"EEXIST\") {\n throw storageError(`Failed to acquire lock for actor ${actorId}: ${(err as Error).message}`);\n }\n try {\n const st = await stat(lockPath);\n if (Date.now() - st.mtimeMs > staleMs) {\n await unlink(lockPath).catch(() => {});\n continue;\n }\n } catch {\n continue; // lock file disappeared between EEXIST and stat — retry immediately\n }\n if (Date.now() - start > timeoutMs) {\n throw storageError(`Timed out waiting for disk storage lock: ${lockPath}`);\n }\n await new Promise((r) => setTimeout(r, 15 + Math.random() * 35));\n }\n }\n }\n\n private async _listActors(): Promise<string[]> {\n try {\n const entries = await readdir(this.dir);\n return entries.filter((e) => e.endsWith(\".json\")).map((e) => e.slice(0, -5));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return [];\n throw storageError(`Failed to list actors: ${(err as Error).message}`);\n }\n }\n\n private async _buildIndex(): Promise<void> {\n const actorIds = await this._listActors();\n for (const actorId of actorIds) {\n const records = await this._readFile(actorId);\n for (const r of records) {\n this._idIndex.set(r.id, actorId);\n }\n }\n }\n\n private _toExternal(record: MemoryRecord): Memory {\n const { _touchedAt: _, ...rest } = record;\n return {\n ...rest,\n createdAt: new Date(record.createdAt),\n expiresAt: record.expiresAt ? new Date(record.expiresAt) : undefined,\n };\n }\n}\n","import { mkdir, readFile, writeFile, appendFile, readdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { storageError, notFound } from \"../../errors.js\";\n\nexport interface MarkdownStorageConfig {\n dir: string;\n oneFilePerActor?: boolean;\n}\n\nexport class MarkdownStorageAdapter implements StorageProvider {\n private dir: string;\n private oneFilePerActor: boolean;\n private _cache: Map<string, Memory> | null = null;\n private _deletedIds: Set<string> = new Set();\n private _cacheDirty: boolean = true;\n\n constructor(config: MarkdownStorageConfig) {\n this.dir = config.dir;\n this.oneFilePerActor = config.oneFilePerActor ?? true;\n }\n\n async initialize(): Promise<void> {\n await mkdir(this.dir, { recursive: true });\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const memory: Memory = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n };\n\n const filePath = this._filePath(input.actorId);\n const block = this._formatBlock(memory);\n await appendFile(filePath, block, \"utf-8\");\n this._cacheDirty = true;\n return memory;\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n await this._ensureCache();\n const memory = this._cache!.get(id);\n if (!memory) return null;\n if (memory.expiresAt && memory.expiresAt <= new Date()) return null;\n if (this._deletedIds.has(id)) return null;\n return memory;\n }\n\n async delete(id: string): Promise<void> {\n await this._ensureCache();\n const memory = this._cache!.get(id);\n if (!memory || this._deletedIds.has(id)) {\n throw notFound(\"Memory\", id);\n }\n if (memory.expiresAt && memory.expiresAt <= new Date()) {\n throw notFound(\"Memory\", id);\n }\n\n const filePath = this._filePath(memory.actorId);\n const tombstone = this._formatTombstone(id);\n await appendFile(filePath, tombstone, \"utf-8\");\n this._cacheDirty = true;\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n await this._ensureCache();\n const idSet = new Set(ids);\n \n const toDelete: { id: string; actorId: string }[] = [];\n for (const id of ids) {\n const memory = this._cache!.get(id);\n if (memory && !this._deletedIds.has(id)) {\n if (!memory.expiresAt || memory.expiresAt > new Date()) {\n toDelete.push({ id, actorId: memory.actorId });\n }\n }\n }\n\n const byActor = new Map<string, string[]>();\n for (const { id, actorId } of toDelete) {\n const group = byActor.get(actorId) ?? [];\n group.push(id);\n byActor.set(actorId, group);\n }\n\n for (const [actorId, groupIds] of byActor) {\n const filePath = this._filePath(actorId);\n const blocks = groupIds.map((gid) => this._formatTombstone(gid)).join(\"\");\n await appendFile(filePath, blocks, \"utf-8\");\n }\n\n this._cacheDirty = true;\n return toDelete.length;\n }\n\n async retrieve(query: MemoryRetrieveQuery, _embedding?: number[]): Promise<Memory[]> {\n await this._ensureCache();\n const now = new Date();\n let results = Array.from(this._cache!.values())\n .filter((m) => !this._deletedIds.has(m.id))\n .filter((m) => !m.expiresAt || m.expiresAt > now);\n\n if (query.actorId) {\n results = results.filter((m) => m.actorId === query.actorId);\n }\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n results = results.filter((m) => query.memoryTypes!.includes(m.memoryType));\n }\n if (query.tags && query.tags.length > 0) {\n results = results.filter((m) => m.tags?.some((t) => query.tags!.includes(t)));\n }\n if (query.query) {\n const terms = query.query.toLowerCase().split(/\\s+/).filter(Boolean);\n results = results.filter((m) => {\n const content = m.content.toLowerCase();\n return terms.some((t) => content.includes(t));\n });\n }\n\n switch (query.strategy) {\n case \"recent\":\n results.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\n break;\n case \"important\":\n results.sort((a, b) => b.importance - a.importance);\n break;\n case \"hybrid\":\n case \"semantic\":\n default:\n results.sort(\n (a, b) => b.importance - a.importance || b.createdAt.getTime() - a.createdAt.getTime()\n );\n break;\n }\n\n const limit = query.limit ?? 10;\n return results.slice(0, limit);\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n await this._ensureCache();\n const now = new Date();\n let results = Array.from(this._cache!.values())\n .filter((m) => !this._deletedIds.has(m.id))\n .filter((m) => !m.expiresAt || m.expiresAt > now);\n\n if (filter?.actorId) {\n results = results.filter((m) => m.actorId === filter.actorId);\n }\n if (filter?.memoryType) {\n results = results.filter((m) => m.memoryType === filter.memoryType);\n }\n if (filter?.minImportance !== undefined) {\n results = results.filter((m) => m.importance >= filter.minImportance!);\n }\n return results.length;\n }\n\n async close(): Promise<void> {\n this._cache = null;\n this._deletedIds.clear();\n this._cacheDirty = true;\n }\n\n async vacuum(): Promise<void> {\n if (this.oneFilePerActor) {\n const actorIds = await this._listActors();\n for (const actorId of actorIds) {\n await this._vacuumFile(this._filePath(actorId));\n }\n } else {\n await this._vacuumFile(this._filePath(\"\"));\n }\n this._cacheDirty = true;\n }\n\n // ── Internal ──\n\n private _filePath(actorId: string): string {\n if (!this.oneFilePerActor) {\n return join(this.dir, \"memories.md\");\n }\n const safe = actorId.replace(/[^a-zA-Z0-9_\\-.,@]/g, \"_\");\n return join(this.dir, `${safe}.md`);\n }\n\n private _formatBlock(memory: Memory): string {\n const iso = memory.createdAt.toISOString();\n const meta = JSON.stringify({\n id: memory.id,\n actorId: memory.actorId,\n memoryType: memory.memoryType,\n importance: memory.importance,\n emotionalValence: memory.emotionalValence,\n tags: memory.tags,\n embedding: memory.embedding,\n sourceId: memory.sourceId ?? null,\n metadata: memory.metadata ?? {},\n createdAt: memory.createdAt.toISOString(),\n expiresAt: memory.expiresAt?.toISOString() ?? null,\n });\n return `## ${iso}\\n\\n~~~json\\n${meta}\\n~~~\\n\\n${memory.content}\\n\\n---\\n`;\n }\n\n private _formatTombstone(id: string): string {\n const iso = new Date().toISOString();\n return `## ${iso}\\n\\n<!-- deleted: ${id} -->\\n\\n---\\n`;\n }\n\n private async _ensureCache(): Promise<void> {\n if (!this._cacheDirty) return;\n\n const allMemories = new Map<string, Memory>();\n const allDeletedIds = new Set<string>();\n\n if (this.oneFilePerActor) {\n const actorIds = await this._listActors();\n for (const actorId of actorIds) {\n const { memories, deletedIds } = await this._parseFile(this._filePath(actorId));\n for (const mem of memories) {\n allMemories.set(mem.id, mem);\n }\n for (const did of deletedIds) {\n allDeletedIds.add(did);\n }\n }\n } else {\n const { memories, deletedIds } = await this._parseFile(this._filePath(\"\"));\n for (const mem of memories) {\n allMemories.set(mem.id, mem);\n }\n for (const did of deletedIds) {\n allDeletedIds.add(did);\n }\n }\n\n this._cache = allMemories;\n this._deletedIds = allDeletedIds;\n this._cacheDirty = false;\n }\n\n private async _parseFile(filePath: string): Promise<{ memories: Memory[]; deletedIds: string[] }> {\n let raw: string;\n try {\n raw = await readFile(filePath, \"utf-8\");\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") {\n return { memories: [], deletedIds: [] };\n }\n throw storageError(`Failed to read file ${filePath}: ${(err as Error).message}`);\n }\n\n const memories: Memory[] = [];\n const deletedIds: string[] = [];\n\n const sections = raw.split(\"\\n---\\n\");\n\n for (const section of sections) {\n const trimmed = section.trim();\n if (!trimmed) continue;\n\n const cleanBlock = trimmed.replace(/\\n---$/, \"\");\n const lines = cleanBlock.split(\"\\n\");\n let i = 0;\n\n if (!lines[i]?.startsWith(\"## \")) continue;\n i++;\n\n while (i < lines.length && lines[i].trim() === \"\") i++;\n if (i >= lines.length) continue;\n\n const tombstoneMatch = lines[i].trim().match(/^<!-- deleted:\\s*(\\S+)\\s*-->/);\n if (tombstoneMatch) {\n deletedIds.push(tombstoneMatch[1]);\n continue;\n }\n\n if (lines[i].trim() !== \"~~~json\") continue;\n i++;\n\n const jsonLines: string[] = [];\n while (i < lines.length && lines[i].trim() !== \"~~~\") {\n jsonLines.push(lines[i]);\n i++;\n }\n i++;\n\n let metadata: Record<string, unknown> | null = null;\n try {\n metadata = JSON.parse(jsonLines.join(\"\\n\"));\n } catch {\n continue;\n }\n\n while (i < lines.length && lines[i].trim() === \"\") i++;\n\n const contentLines: string[] = [];\n while (i < lines.length) {\n contentLines.push(lines[i]);\n i++;\n }\n const content = contentLines.join(\"\\n\").trim();\n\n if (metadata && typeof metadata.id === \"string\") {\n memories.push({\n id: metadata.id,\n actorId: metadata.actorId as string,\n memoryType: (metadata.memoryType as MemoryType) ?? \"interaction\",\n content,\n importance: (metadata.importance as number) ?? 0.5,\n emotionalValence: (metadata.emotionalValence as number) ?? 0,\n tags: (metadata.tags as string[]) ?? [],\n embedding: metadata.embedding as number[] | undefined,\n sourceId: (metadata.sourceId as string | undefined) ?? undefined,\n metadata: (metadata.metadata as Record<string, unknown>) ?? {},\n createdAt: new Date(metadata.createdAt as string),\n expiresAt: metadata.expiresAt ? new Date(metadata.expiresAt as string) : undefined,\n });\n }\n }\n\n return { memories, deletedIds };\n }\n\n private async _vacuumFile(filePath: string): Promise<void> {\n await this._ensureCache();\n\n let raw: string;\n try {\n raw = await readFile(filePath, \"utf-8\");\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return;\n throw storageError(`Failed to read file for vacuum: ${(err as Error).message}`);\n }\n\n const sections = raw.split(\"\\n---\\n\");\n const kept: string[] = [];\n\n for (const section of sections) {\n const trimmed = section.trim();\n if (!trimmed) continue;\n\n const cleanBlock = trimmed.replace(/\\n---$/, \"\");\n const lines = cleanBlock.split(\"\\n\");\n let i = 0;\n\n if (!lines[i]?.startsWith(\"## \")) {\n kept.push(trimmed);\n continue;\n }\n i++;\n\n while (i < lines.length && lines[i].trim() === \"\") i++;\n if (i >= lines.length) {\n kept.push(trimmed);\n continue;\n }\n\n const tombstoneMatch = lines[i].trim().match(/^<!-- deleted:\\s*(\\S+)\\s*-->/);\n if (tombstoneMatch) continue;\n\n if (lines[i].trim() !== \"~~~json\") {\n kept.push(trimmed);\n continue;\n }\n i++;\n\n while (i < lines.length && lines[i].trim() !== \"~~~\") i++;\n i++;\n\n while (i < lines.length && lines[i].trim() === \"\") i++;\n\n const contentLines: string[] = [];\n while (i < lines.length) {\n contentLines.push(lines[i]);\n i++;\n }\n\n try {\n const jsonStartIdx = lines.findIndex((l) => l.trim() === \"~~~json\");\n const jsonEndIdx = lines.findIndex((l, idx) => idx > jsonStartIdx && l.trim() === \"~~~\");\n const jsonText = lines.slice(jsonStartIdx + 1, jsonEndIdx).join(\"\\n\");\n const meta = JSON.parse(jsonText);\n if (this._deletedIds.has(meta.id)) continue;\n } catch {\n // Keep block if we can't parse its metadata\n }\n\n const content = contentLines.join(\"\\n\").trim();\n if (content || trimmed.includes(\"~~~json\")) {\n kept.push(trimmed);\n }\n }\n\n const output = kept.length > 0 ? kept.join(\"\\n---\\n\") + \"\\n---\\n\" : \"\";\n await writeFile(filePath, output, \"utf-8\");\n }\n\n private async _listActors(): Promise<string[]> {\n try {\n const entries = await readdir(this.dir);\n return entries.filter((e) => e.endsWith(\".md\")).map((e) => e.slice(0, -3));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return [];\n throw storageError(`Failed to list actors: ${(err as Error).message}`);\n }\n }\n}\n","import type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport type { Memory } from \"../../types.js\";\nexport interface HybridStorageConfig {\n cache: StorageProvider;\n durable: StorageProvider;\n writeBoth?: boolean;\n readFromCache?: boolean;\n syncOnInit?: boolean;\n}\n\nexport class HybridStorageAdapter implements StorageProvider {\n private cache: StorageProvider;\n private durable: StorageProvider;\n private writeBoth: boolean;\n private readFromCache: boolean;\n private syncOnInit: boolean;\n\n constructor(config: HybridStorageConfig) {\n this.cache = config.cache;\n this.durable = config.durable;\n this.writeBoth = config.writeBoth ?? true;\n this.readFromCache = config.readFromCache ?? true;\n this.syncOnInit = config.syncOnInit ?? false;\n }\n\n async initialize(): Promise<void> {\n await Promise.all([this.cache.initialize(), this.durable.initialize()]);\n\n if (this.syncOnInit) {\n const results = await this.durable.retrieve({ limit: 100000 });\n if (results.length > 0) {\n await this.cache.storeBatch(results.map((m) => ({\n actorId: m.actorId,\n content: m.content,\n memoryType: m.memoryType,\n importance: m.importance,\n emotionalValence: m.emotionalValence,\n tags: m.tags,\n embedding: m.embedding,\n sourceId: m.sourceId,\n metadata: m.metadata,\n expiresAt: m.expiresAt,\n id: m.id,\n }))).catch(() => {});\n }\n }\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const result = await this.durable.store(input);\n\n if (this.writeBoth) {\n try {\n await this.cache.store({ ...input, id: result.id });\n } catch {}\n }\n\n return result;\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results = await this.durable.storeBatch(inputs);\n\n if (this.writeBoth) {\n const cacheInputs: MemoryStoreInput[] = results.map((r, i) => ({\n ...inputs[i],\n id: r.id,\n }));\n try {\n await this.cache.storeBatch(cacheInputs);\n } catch {}\n }\n\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n if (this.readFromCache) {\n const cached = await this.cache.get(id);\n if (cached) return cached;\n\n const result = await this.durable.get(id);\n if (result) {\n try { await this.cache.store({\n actorId: result.actorId,\n content: result.content,\n memoryType: result.memoryType,\n importance: result.importance,\n emotionalValence: result.emotionalValence,\n tags: result.tags,\n embedding: result.embedding,\n sourceId: result.sourceId,\n metadata: result.metadata,\n expiresAt: result.expiresAt,\n id: result.id,\n }); } catch {}\n }\n return result;\n }\n\n return this.durable.get(id);\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n if (this.readFromCache) {\n const cached = await this.cache.retrieve(query, embedding);\n if (cached.length > 0) return cached;\n\n const results = await this.durable.retrieve(query, embedding);\n if (results.length > 0) {\n const inputs: MemoryStoreInput[] = results.map((r) => ({\n actorId: r.actorId,\n content: r.content,\n memoryType: r.memoryType,\n importance: r.importance,\n emotionalValence: r.emotionalValence,\n tags: r.tags,\n embedding: r.embedding,\n sourceId: r.sourceId,\n metadata: r.metadata,\n expiresAt: r.expiresAt,\n id: r.id,\n }));\n try { await this.cache.storeBatch(inputs); } catch {}\n }\n return results;\n }\n\n return this.durable.retrieve(query, embedding);\n }\n\n async delete(id: string): Promise<void> {\n const results = await Promise.allSettled([\n this.cache.delete(id),\n this.durable.delete(id),\n ]);\n\n const durableResult = results[1];\n if (durableResult.status === \"rejected\") {\n throw durableResult.reason;\n }\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const [cacheResult, durableCount] = await Promise.all([\n this.cache.deleteMany(ids).catch(() => 0),\n this.durable.deleteMany(ids),\n ]);\n\n return durableCount;\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n return this.durable.count(filter);\n }\n\n async touch(id: string): Promise<void> {\n if (this.durable.touch) {\n await this.durable.touch(id);\n }\n }\n\n async close(): Promise<void> {\n await Promise.all([this.cache.close(), this.durable.close()]);\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { notFound, configError } from \"../../errors.js\";\n\ntype PgPool = {\n query(text: string, params?: unknown[]): Promise<{ rows: unknown[] }>;\n end?: () => Promise<void>;\n};\n\ninterface PgMemoryRow {\n id: string;\n actor_id: string;\n memory_type: string;\n content: string;\n importance: number;\n emotional_valence: number;\n tags: string[];\n embedding: number[] | null;\n source_id: string | null;\n metadata: Record<string, unknown>;\n expires_at: string | null;\n created_at: string;\n touched_at: string;\n}\n\nexport interface PostgresStorageConfig {\n pool?: PgPool;\n connectionString?: string;\n host?: string; port?: number; database?: string; user?: string; password?: string;\n tableName?: string;\n vectorDimensions?: number;\n ssl?: boolean | object;\n}\n\nexport class PostgresStorageAdapter implements StorageProvider {\n private pool!: PgPool;\n private table: string;\n private vectorDimensions: number;\n private _ownsPool = false;\n\n constructor(config: PostgresStorageConfig) {\n this.table = config.tableName ?? \"memstack_memories\";\n if (!/^[a-zA-Z0-9_]+$/.test(this.table)) {\n throw configError(`Invalid table name: \"${this.table}\". Use only alphanumeric characters and underscores.`);\n }\n this.vectorDimensions = config.vectorDimensions ?? 1536;\n\n if (config.pool) {\n this.pool = config.pool;\n } else if (config.connectionString) {\n this._connectionString = config.connectionString;\n this._ssl = config.ssl;\n } else if (config.host || config.database || config.user) {\n this._connParts = { host: config.host, port: config.port, database: config.database, user: config.user, password: config.password, ssl: config.ssl };\n } else {\n throw configError(\"PostgresStorageAdapter requires a pool, connectionString, or connection details\");\n }\n }\n\n private _connectionString?: string;\n private _connParts?: { host?: string; port?: number; database?: string; user?: string; password?: string; ssl?: boolean | object };\n private _ssl?: boolean | object;\n\n async initialize(): Promise<void> {\n if (this._connectionString || this._connParts) {\n this.pool = await this._createPool();\n this._ownsPool = true;\n }\n\n await this._runMigration();\n }\n\n private async _createPool(): Promise<PgPool> {\n const connStr = this._connectionString ?? this._buildConnString();\n\n try {\n // @ts-expect-error — optional peer dep, user installs 'postgres' (postgres.js) themselves\n const { default: createPostgres } = await import(\"postgres\");\n const options: Record<string, unknown> = {};\n if (this._ssl) {\n options.ssl = typeof this._ssl === \"object\" ? this._ssl : \"require\";\n }\n const sql = createPostgres(connStr, options) as { unsafe: (t: string, p: unknown[]) => Promise<unknown[]>; end: () => Promise<void> };\n return {\n query: (text: string, params?: unknown[]) =>\n sql.unsafe(text, params as never[]).then((r: unknown[]) => ({ rows: r })),\n end: () => sql.end(),\n };\n } catch {\n try {\n // @ts-expect-error — optional peer dep, user installs 'pg' (node-postgres) themselves\n const { Pool } = await import(\"pg\");\n const pool = new Pool({ connectionString: connStr, ssl: this._ssl }) as PgPool & { end: () => Promise<void> };\n return { query: (text: string, params?: unknown[]) => pool.query(text, params), end: () => pool.end() };\n } catch {\n throw configError(\"connectionString requires 'postgres' (postgres.js) or 'pg' (node-postgres) to be installed\");\n }\n }\n }\n\n private _buildConnString(): string {\n const p = this._connParts!;\n const host = p.host ?? \"localhost\";\n const port = p.port ?? 5432;\n const db = p.database ?? \"postgres\";\n const user = encodeURIComponent(p.user ?? \"postgres\");\n const pw = p.password ? `:${encodeURIComponent(p.password)}` : \"\";\n let connStr = `postgres://${user}${pw}@${host}:${port}/${db}`;\n if (this._ssl) {\n const sslmode = typeof this._ssl === \"object\" ? \"no-verify\" : \"require\";\n connStr += `?sslmode=${sslmode}`;\n }\n return connStr;\n }\n\n private async _runMigration(): Promise<void> {\n try { await this.pool.query(\"CREATE EXTENSION IF NOT EXISTS vector\"); } catch { /* pgvector may not be available */ }\n await this.pool.query(`\n CREATE TABLE IF NOT EXISTS ${this.table} (\n id TEXT PRIMARY KEY,\n actor_id TEXT NOT NULL,\n memory_type TEXT NOT NULL DEFAULT 'interaction',\n content TEXT NOT NULL,\n importance REAL NOT NULL DEFAULT 0.5,\n emotional_valence REAL NOT NULL DEFAULT 0,\n tags JSONB NOT NULL DEFAULT '[]',\n embedding vector(${this.vectorDimensions}),\n source_id TEXT,\n metadata JSONB NOT NULL DEFAULT '{}',\n expires_at TIMESTAMPTZ,\n created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n touched_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n )\n `);\n try {\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_${this.table}_actor ON ${this.table} (actor_id)`);\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_${this.table}_created ON ${this.table} (created_at DESC)`);\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_${this.table}_importance ON ${this.table} (importance DESC)`);\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_${this.table}_embedding ON ${this.table} USING hnsw (embedding vector_cosine_ops) WITH (m = 16, ef_construction = 64)`);\n } catch { /* index creation may fail; non-critical */ }\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date().toISOString();\n const id = input.id ?? this.generateId();\n\n await this.pool.query(\n `INSERT INTO ${this.table} (id, actor_id, memory_type, content, importance, emotional_valence, tags, embedding, source_id, metadata, expires_at, created_at, touched_at)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8::float8[]::vector, $9, $10, $11, $12, $13)\n ON CONFLICT (id) DO UPDATE SET\n content = EXCLUDED.content,\n importance = EXCLUDED.importance,\n emotional_valence = EXCLUDED.emotional_valence,\n tags = EXCLUDED.tags,\n embedding = EXCLUDED.embedding,\n source_id = EXCLUDED.source_id,\n metadata = EXCLUDED.metadata,\n expires_at = EXCLUDED.expires_at,\n touched_at = EXCLUDED.touched_at`,\n [\n id,\n input.actorId,\n input.memoryType ?? \"interaction\",\n input.content,\n input.importance ?? 0.5,\n input.emotionalValence ?? 0,\n JSON.stringify(input.tags ?? []),\n input.embedding ? `{${input.embedding.join(\",\")}}` : null,\n input.sourceId ?? null,\n JSON.stringify(input.metadata ?? {}),\n input.expiresAt?.toISOString() ?? null,\n now,\n now,\n ]\n );\n\n return {\n id,\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? new Date(now),\n };\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const { rows } = await this.pool.query(\n `SELECT * FROM ${this.table} WHERE id = $1 AND (expires_at IS NULL OR expires_at > NOW())`,\n [id]\n );\n if (rows.length === 0) return null;\n return this._rowToMemory(rows[0] as PgMemoryRow);\n }\n\n async delete(id: string): Promise<void> {\n const { rows } = await this.pool.query(`SELECT id FROM ${this.table} WHERE id = $1`, [id]);\n if (rows.length === 0) throw notFound(\"Memory\", id);\n await this.pool.query(`DELETE FROM ${this.table} WHERE id = $1`, [id]);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const placeholders = ids.map((_, i) => `$${i + 1}`).join(\", \");\n const { rows } = await this.pool.query(\n `DELETE FROM ${this.table} WHERE id IN (${placeholders}) RETURNING id`,\n ids\n );\n return rows.length;\n }\n\n async touch(id: string): Promise<void> {\n const { rows } = await this.pool.query(`SELECT id FROM ${this.table} WHERE id = $1`, [id]);\n if (rows.length === 0) throw notFound(\"Memory\", id);\n await this.pool.query(`UPDATE ${this.table} SET touched_at = NOW() WHERE id = $1`, [id]);\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n const conditions: string[] = [\"(expires_at IS NULL OR expires_at > NOW())\"];\n const params: unknown[] = [];\n let paramIdx = 1;\n\n if (query.actorId) {\n conditions.push(`actor_id = $${paramIdx++}`);\n params.push(query.actorId);\n }\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n conditions.push(`memory_type = ANY($${paramIdx++})`);\n params.push(query.memoryTypes);\n }\n if (query.tags && query.tags.length > 0) {\n conditions.push(`tags ?| $${paramIdx++}`);\n params.push(query.tags);\n }\n if (query.query) {\n conditions.push(`content ILIKE $${paramIdx++}`);\n params.push(`%${query.query}%`);\n }\n if (query.createdAfter) {\n conditions.push(`created_at >= $${paramIdx++}`);\n params.push(query.createdAfter.toISOString());\n }\n if (query.createdBefore) {\n conditions.push(`created_at <= $${paramIdx++}`);\n params.push(query.createdBefore.toISOString());\n }\n\n const where = conditions.length > 0 ? `WHERE ${conditions.join(\" AND \")}` : \"\";\n\n let orderBy: string;\n switch (query.strategy) {\n case \"recent\":\n orderBy = \"touched_at DESC\";\n break;\n case \"important\":\n orderBy = \"importance DESC\";\n break;\n case \"hybrid\":\n case \"semantic\":\n default:\n if (embedding) {\n return this._semanticRetrieve(embedding, query, params, where, paramIdx);\n }\n orderBy = \"importance DESC, touched_at DESC\";\n break;\n }\n\n const limit = query.limit ?? 10;\n const sql = `SELECT * FROM ${this.table} ${where} ORDER BY ${orderBy} LIMIT $${paramIdx}`;\n params.push(limit);\n\n const { rows } = await this.pool.query(sql, params);\n\n for (const row of rows.slice(0, limit)) {\n const r = row as PgMemoryRow;\n await this.pool.query(`UPDATE ${this.table} SET touched_at = NOW() WHERE id = $1`, [r.id]);\n }\n\n return (rows as PgMemoryRow[]).map((r) => this._rowToMemory(r));\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const conditions: string[] = [\"(expires_at IS NULL OR expires_at > NOW())\"];\n const params: unknown[] = [];\n let paramIdx = 1;\n\n if (filter?.actorId) {\n conditions.push(`actor_id = $${paramIdx++}`);\n params.push(filter.actorId);\n }\n if (filter?.memoryType) {\n conditions.push(`memory_type = $${paramIdx++}`);\n params.push(filter.memoryType);\n }\n if (filter?.minImportance !== undefined) {\n conditions.push(`importance >= $${paramIdx++}`);\n params.push(filter.minImportance);\n }\n if (filter?.createdAfter) {\n conditions.push(`created_at >= $${paramIdx++}`);\n params.push(filter.createdAfter.toISOString());\n }\n if (filter?.createdBefore) {\n conditions.push(`created_at <= $${paramIdx++}`);\n params.push(filter.createdBefore.toISOString());\n }\n\n const where = conditions.join(\" AND \");\n const { rows } = await this.pool.query(\n `SELECT COUNT(*) as count FROM ${this.table} WHERE ${where}`,\n params\n );\n return Number((rows[0] as { count: string }).count);\n }\n\n async close(): Promise<void> {\n if (this._ownsPool && this.pool?.end) {\n await this.pool.end();\n }\n }\n\n private async _semanticRetrieve(\n embedding: number[],\n query: MemoryRetrieveQuery,\n params: unknown[],\n baseWhere: string,\n paramIdx: number\n ): Promise<Memory[]> {\n const limit = query.limit ?? 10;\n const conditions = baseWhere.replace(/^WHERE\\s+/i, \"\");\n const whereClause = conditions\n ? `WHERE ${conditions} AND embedding IS NOT NULL`\n : `WHERE embedding IS NOT NULL`;\n const isHybrid = query.strategy === \"hybrid\";\n const sql = isHybrid ? `\n SELECT *,\n (embedding <-> $${paramIdx}::float8[]::vector) AS distance,\n (1.0 - (embedding <-> $${paramIdx}::float8[]::vector) / 2.0 + importance) AS score\n FROM ${this.table}\n ${whereClause}\n ORDER BY score DESC\n LIMIT $${paramIdx + 1}\n ` : `\n SELECT *,\n (embedding <-> $${paramIdx}::float8[]::vector) AS distance\n FROM ${this.table}\n ${whereClause}\n ORDER BY distance ASC\n LIMIT $${paramIdx + 1}\n `;\n params.push(embedding);\n params.push(limit);\n\n const { rows } = await this.pool.query(sql, params);\n\n for (const row of rows.slice(0, limit)) {\n const r = row as PgMemoryRow;\n await this.pool.query(`UPDATE ${this.table} SET touched_at = NOW() WHERE id = $1`, [r.id]);\n }\n\n return (rows as PgMemoryRow[]).map((r) => this._rowToMemory(r));\n }\n\n private _rowToMemory(row: PgMemoryRow): Memory {\n return {\n id: row.id,\n actorId: row.actor_id,\n memoryType: row.memory_type as MemoryType,\n content: row.content,\n importance: row.importance,\n emotionalValence: row.emotional_valence,\n tags: Array.isArray(row.tags) ? row.tags : [],\n embedding: row.embedding ?? undefined,\n sourceId: row.source_id ?? undefined,\n metadata: row.metadata ?? {},\n expiresAt: row.expires_at ? new Date(row.expires_at) : undefined,\n createdAt: new Date(row.created_at),\n };\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { notFound } from \"../../errors.js\";\n\ntype RedisClient = {\n set(key: string, value: string): Promise<unknown>;\n get(key: string): Promise<string | null>;\n del(key: string | string[]): Promise<number>;\n sadd(key: string, ...members: string[]): Promise<number>;\n srem(key: string, ...members: string[]): Promise<number>;\n smembers(key: string): Promise<string[]>;\n mget(...keys: string[]): Promise<(string | null)[]>;\n};\n\ninterface MemoryRecord extends Memory {\n _touchedAt: string;\n}\n\nexport interface RedisStorageConfig {\n redis: RedisClient;\n keyPrefix?: string;\n}\n\nexport class RedisStorageAdapter implements StorageProvider {\n private redis: RedisClient;\n private prefix: string;\n constructor(config: RedisStorageConfig) {\n this.redis = config.redis;\n this.prefix = config.keyPrefix ?? \"memstack\";\n }\n\n async initialize(): Promise<void> {\n // Connection is user-managed; no-op\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const memory: MemoryRecord = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n _touchedAt: now.toISOString(),\n };\n\n await this.redis.set(this._memKey(memory.id), JSON.stringify(memory));\n await this.redis.sadd(this._actorKey(memory.actorId), memory.id);\n await this.redis.sadd(this._actorsSetKey(), memory.actorId);\n\n return this._toExternal(memory);\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n const now = new Date();\n\n for (const input of inputs) {\n const memory: MemoryRecord = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n _touchedAt: now.toISOString(),\n };\n\n await this.redis.set(this._memKey(memory.id), JSON.stringify(memory));\n await this.redis.sadd(this._actorKey(memory.actorId), memory.id);\n await this.redis.sadd(this._actorsSetKey(), memory.actorId);\n results.push(this._toExternal(memory));\n }\n\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const raw = await this.redis.get(this._memKey(id));\n if (!raw) return null;\n\n const record = JSON.parse(raw) as MemoryRecord;\n if (record.expiresAt && new Date(record.expiresAt) <= new Date()) return null;\n return this._toExternal(record);\n }\n\n async delete(id: string): Promise<void> {\n const raw = await this.redis.get(this._memKey(id));\n if (!raw) throw notFound(\"Memory\", id);\n\n const record = JSON.parse(raw) as MemoryRecord;\n await this.redis.del(this._memKey(id));\n await this.redis.srem(this._actorKey(record.actorId), id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n let count = 0;\n const byActor = new Map<string, string[]>();\n\n for (const id of ids) {\n const raw = await this.redis.get(this._memKey(id));\n if (raw) {\n const record = JSON.parse(raw) as MemoryRecord;\n const list = byActor.get(record.actorId) ?? [];\n list.push(id);\n byActor.set(record.actorId, list);\n }\n }\n\n for (const [actorId, memIds] of byActor) {\n await this.redis.del(memIds.map((id) => this._memKey(id)));\n await this.redis.srem(this._actorKey(actorId), ...memIds);\n count += memIds.length;\n }\n\n return count;\n }\n\n async touch(id: string): Promise<void> {\n const raw = await this.redis.get(this._memKey(id));\n if (!raw) throw notFound(\"Memory\", id);\n\n const record = JSON.parse(raw) as MemoryRecord;\n record._touchedAt = new Date().toISOString();\n await this.redis.set(this._memKey(id), JSON.stringify(record));\n }\n\n async retrieve(query: MemoryRetrieveQuery, _embedding?: number[]): Promise<Memory[]> {\n let allRecords: MemoryRecord[] = [];\n\n if (query.actorId) {\n allRecords = await this._getActorRecords(query.actorId);\n } else {\n const actorIds = await this._listActors();\n for (const actorId of actorIds) {\n const records = await this._getActorRecords(actorId);\n allRecords.push(...records);\n }\n }\n\n const now = new Date();\n let results = allRecords.filter((r) => !r.expiresAt || new Date(r.expiresAt) > now);\n\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n results = results.filter((r) => query.memoryTypes!.includes(r.memoryType));\n }\n if (query.tags && query.tags.length > 0) {\n results = results.filter((r) => r.tags?.some((t) => query.tags!.includes(t)));\n }\n if (query.query) {\n const q = query.query.toLowerCase();\n results = results.filter((r) => r.content.toLowerCase().includes(q));\n }\n\n switch (query.strategy) {\n case \"recent\":\n results.sort((a, b) => new Date(b._touchedAt).getTime() - new Date(a._touchedAt).getTime());\n break;\n case \"important\":\n results.sort((a, b) => b.importance - a.importance);\n break;\n case \"hybrid\":\n case \"semantic\":\n default:\n results.sort(\n (a, b) =>\n b.importance - a.importance || new Date(b._touchedAt).getTime() - new Date(a._touchedAt).getTime()\n );\n break;\n }\n\n const nowStr = new Date().toISOString();\n const toTouch = results.slice(0, query.limit ?? 10);\n for (const r of toTouch) {\n r._touchedAt = nowStr;\n await this.redis.set(this._memKey(r.id), JSON.stringify(r));\n }\n\n const limit = query.limit ?? 10;\n return results.slice(0, limit).map((r) => this._toExternal(r));\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n let allRecords: MemoryRecord[] = [];\n\n if (filter?.actorId) {\n allRecords = await this._getActorRecords(filter.actorId);\n } else {\n const actorIds = await this._listActors();\n for (const actorId of actorIds) {\n const records = await this._getActorRecords(actorId);\n allRecords.push(...records);\n }\n }\n\n const now = new Date();\n let results = allRecords.filter((r) => !r.expiresAt || new Date(r.expiresAt) > now);\n\n if (filter?.memoryType) {\n results = results.filter((r) => r.memoryType === filter.memoryType);\n }\n if (filter?.minImportance !== undefined) {\n results = results.filter((r) => r.importance >= filter.minImportance!);\n }\n\n return results.length;\n }\n\n async close(): Promise<void> {\n }\n\n private _actorsSetKey(): string {\n return `${this.prefix}:actors`;\n }\n\n private _actorKey(actorId: string): string {\n const safe = actorId.replace(/[^a-zA-Z0-9_\\-.,@]/g, \"_\");\n return `${this.prefix}:a:${safe}`;\n }\n\n private _memKey(id: string): string {\n return `${this.prefix}:m:${id}`;\n }\n\n private async _getActorRecords(actorId: string): Promise<MemoryRecord[]> {\n const ids = await this.redis.smembers(this._actorKey(actorId));\n if (ids.length === 0) return [];\n\n const keys = ids.map((id) => this._memKey(id));\n const raws = await this.redis.mget(...keys);\n\n const records: MemoryRecord[] = [];\n for (const raw of raws) {\n if (raw) {\n try {\n records.push(JSON.parse(raw) as MemoryRecord);\n } catch {\n // Skip corrupted records\n }\n }\n }\n\n return records;\n }\n\n private async _listActors(): Promise<string[]> {\n return this.redis.smembers(this._actorsSetKey());\n }\n\n private _toExternal(record: MemoryRecord): Memory {\n const { _touchedAt: _, ...rest } = record;\n return {\n ...rest,\n createdAt: new Date(record.createdAt),\n expiresAt: record.expiresAt ? new Date(record.expiresAt) : undefined,\n };\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { storageError, notFound } from \"../../errors.js\";\n\ntype QdrantClient = {\n createCollection(name: string, config: { vectors: { size: number; distance: string } }): Promise<unknown>;\n getCollection(name: string): Promise<unknown>;\n upsert(name: string, opts: { points: { id: string; vector: number[]; payload: Record<string, unknown> }[] }): Promise<unknown>;\n retrieve(name: string, opts: { ids: string[] }): Promise<unknown[]>;\n search(name: string, opts: { vector: number[]; limit: number; filter?: { must: unknown[] } }): Promise<unknown[]>;\n delete(name: string, opts: { points: string[] }): Promise<unknown>;\n count(name: string, opts?: { filter?: { must: unknown[] } }): Promise<{ count: number }>;\n scroll(name: string, opts?: { filter?: { must: unknown[] }; limit?: number }): Promise<{ points: unknown[] }>;\n};\n\nexport interface QdrantStorageConfig {\n client: QdrantClient;\n collectionName?: string;\n vectorSize?: number;\n}\n\ninterface QdrantPoint {\n id: string;\n payload: Record<string, unknown>;\n vector?: number[];\n}\n\nexport class QdrantStorageAdapter implements StorageProvider {\n private client: QdrantClient;\n private collectionName: string;\n private vectorSize: number;\n private _idToQdrant = new Map<string, string>();\n\n constructor(config: QdrantStorageConfig) {\n this.client = config.client;\n this.collectionName = config.collectionName ?? \"memstack\";\n this.vectorSize = config.vectorSize ?? 1536;\n }\n\n async initialize(): Promise<void> {\n try {\n await this.client.getCollection(this.collectionName);\n } catch {\n await this.client.createCollection(this.collectionName, {\n vectors: { size: this.vectorSize, distance: \"Cosine\" },\n });\n }\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const memory: Memory = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n };\n\n const qdrantId = crypto.randomUUID();\n await this.client.upsert(this.collectionName, {\n points: [\n {\n id: qdrantId,\n vector: input.embedding ?? new Array(this.vectorSize).fill(0),\n payload: this._toPayload(memory),\n },\n ],\n });\n\n this._idToQdrant.set(memory.id, qdrantId);\n return memory;\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n const now = new Date();\n const points: { id: string; vector: number[]; payload: Record<string, unknown> }[] = [];\n\n for (const input of inputs) {\n const memory: Memory = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n };\n results.push(memory);\n const qid = crypto.randomUUID();\n points.push({\n id: qid,\n vector: input.embedding ?? new Array(this.vectorSize).fill(0),\n payload: this._toPayload(memory),\n });\n this._idToQdrant.set(memory.id, qid);\n }\n\n await this.client.upsert(this.collectionName, { points });\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const qdrantId = this._idToQdrant.get(id);\n if (qdrantId) {\n const points = await this.client.retrieve(this.collectionName, { ids: [qdrantId] });\n if (points && points.length > 0) {\n const point = points[0] as QdrantPoint;\n if (point.payload.expiresAt && new Date(point.payload.expiresAt as string) <= new Date()) return null;\n return this._fromPoint(point);\n }\n }\n return null;\n }\n\n async delete(id: string): Promise<void> {\n const qdrantId = this._idToQdrant.get(id);\n if (!qdrantId) throw notFound(\"Memory\", id);\n await this.client.delete(this.collectionName, { points: [qdrantId] });\n this._idToQdrant.delete(id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const qdrantIds: string[] = [];\n for (const id of ids) {\n const qid = this._idToQdrant.get(id);\n if (qid) { qdrantIds.push(qid); this._idToQdrant.delete(id); }\n }\n if (qdrantIds.length === 0) return 0;\n await this.client.delete(this.collectionName, { points: qdrantIds });\n return qdrantIds.length;\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n const must: unknown[] = [];\n\n if (query.actorId) {\n must.push({ key: \"actorId\", match: { value: query.actorId } });\n }\n\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n must.push({ key: \"memoryType\", match: { any: query.memoryTypes } });\n }\n\n if (query.tags && query.tags.length > 0) {\n must.push({ key: \"tags\", match: { any: query.tags } });\n }\n\n const filter = must.length > 0 ? { must } : undefined;\n const limit = query.limit ?? 10;\n\n if (query.strategy === \"semantic\" || query.strategy === \"hybrid\") {\n const vector = embedding ?? new Array(this.vectorSize).fill(0);\n const results = await this.client.search(this.collectionName, {\n vector,\n limit,\n filter: filter as { must: unknown[] } | undefined,\n });\n const points = results as QdrantPoint[];\n return points.map((p) => this._fromPoint(p));\n }\n\n const vector = new Array(this.vectorSize).fill(0);\n const results = await this.client.search(this.collectionName, {\n vector,\n limit: 10000,\n filter: filter as { must: unknown[] } | undefined,\n });\n let points = results as QdrantPoint[];\n\n switch (query.strategy) {\n case \"recent\":\n points.sort((a, b) => {\n const aTime = new Date(a.payload.createdAt as string).getTime();\n const bTime = new Date(b.payload.createdAt as string).getTime();\n return bTime - aTime;\n });\n break;\n case \"important\":\n points.sort((a, b) => (b.payload.importance as number) - (a.payload.importance as number));\n break;\n }\n\n return points.slice(0, limit).map((p) => this._fromPoint(p));\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const must: unknown[] = [];\n\n if (filter?.actorId) {\n must.push({ key: \"actorId\", match: { value: filter.actorId } });\n }\n\n if (filter?.memoryType) {\n must.push({ key: \"memoryType\", match: { value: filter.memoryType } });\n }\n\n if (filter?.minImportance !== undefined) {\n must.push({ key: \"importance\", range: { gte: filter.minImportance } });\n }\n\n const filterObj = must.length > 0 ? { must } : undefined;\n const result = await this.client.count(this.collectionName, filterObj ? { filter: filterObj } : undefined);\n return result.count;\n }\n\n async close(): Promise<void> {}\n\n private _toPayload(memory: Memory): Record<string, unknown> {\n return {\n _id: memory.id,\n actorId: memory.actorId,\n memoryType: memory.memoryType,\n importance: memory.importance,\n emotionalValence: memory.emotionalValence,\n tags: memory.tags,\n content: memory.content,\n metadata: memory.metadata ?? {},\n createdAt: memory.createdAt.toISOString(),\n sourceId: memory.sourceId ?? null,\n expiresAt: memory.expiresAt?.toISOString() ?? null,\n };\n }\n\n private _fromPoint(point: QdrantPoint): Memory {\n const p = point.payload;\n return {\n id: (p._id as string) ?? point.id,\n actorId: p.actorId as string,\n memoryType: p.memoryType as MemoryType,\n content: p.content as string,\n importance: p.importance as number,\n emotionalValence: (p.emotionalValence as number) ?? 0,\n tags: (p.tags as string[]) ?? [],\n embedding: point.vector as number[] | undefined,\n sourceId: (p.sourceId as string | undefined) ?? undefined,\n metadata: (p.metadata as Record<string, unknown>) ?? {},\n expiresAt: p.expiresAt ? new Date(p.expiresAt as string) : undefined,\n createdAt: new Date(p.createdAt as string),\n };\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { storageError, notFound } from \"../../errors.js\";\n\ntype Neo4jDriver = {\n session(opts?: { database?: string }): Neo4jSession;\n close(): Promise<void>;\n};\n\ntype Neo4jSession = {\n run(query: string, params?: Record<string, unknown>): Promise<{ records: { get(key: string): unknown; toObject(): Record<string, unknown> }[] }>;\n close(): Promise<void>;\n};\n\ninterface Neo4jMemoryNode {\n id: string;\n actorId: string;\n memoryType: string;\n content: string;\n importance: number;\n emotionalValence: number;\n tags: string[];\n sourceId: string | null;\n metadata: string;\n expiresAt: string | null;\n createdAt: string;\n embedding: number[] | null;\n}\n\nexport interface Neo4jStorageConfig {\n driver: Neo4jDriver;\n database?: string;\n}\n\nexport class Neo4jStorageAdapter implements StorageProvider {\n private driver: Neo4jDriver;\n private database: string;\n\n constructor(config: Neo4jStorageConfig) {\n this.driver = config.driver;\n this.database = config.database ?? \"neo4j\";\n }\n\n async initialize(): Promise<void> {\n const session = this.driver.session({ database: this.database });\n try {\n await session.run(\n \"CREATE CONSTRAINT memory_id IF NOT EXISTS FOR (m:Memory) REQUIRE m.id IS UNIQUE\"\n );\n await session.run(\n `CREATE VECTOR INDEX memory_embedding IF NOT EXISTS FOR (m:Memory) ON m.embedding\n OPTIONS { indexConfig: { \\`vector.dimensions\\`: 1536, \\`vector.similarity_function\\`: \"cosine\" } }`\n );\n } finally {\n await session.close();\n }\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date().toISOString();\n const id = input.id ?? this.generateId();\n\n const props: Record<string, unknown> = {\n actorId: input.actorId,\n memoryType: input.memoryType ?? \"interaction\",\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n sourceId: input.sourceId ?? null,\n metadata: JSON.stringify(input.metadata ?? {}),\n expiresAt: input.expiresAt?.toISOString() ?? null,\n createdAt: input.createdAt?.toISOString() ?? now,\n embedding: input.embedding ?? null,\n };\n\n const updateProps = { ...props };\n if (!input.createdAt) {\n delete updateProps.createdAt;\n }\n\n const session = this.driver.session({ database: this.database });\n try {\n await session.run(\n \"MERGE (m:Memory {id: $id}) ON CREATE SET m += $props ON MATCH SET m += $updateProps\",\n { id, props, updateProps }\n );\n } finally {\n await session.close();\n }\n\n return {\n id,\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? new Date(now),\n };\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const session = this.driver.session({ database: this.database });\n try {\n const result = await session.run(\n \"MATCH (m:Memory {id: $id}) WHERE m.expiresAt IS NULL OR m.expiresAt > datetime() RETURN m\",\n { id }\n );\n if (result.records.length === 0) return null;\n const raw = result.records[0].get(\"m\") as Record<string, unknown>;\n const node = (raw.properties ?? raw) as Neo4jMemoryNode;\n return this._nodeToMemory(node);\n } finally {\n await session.close();\n }\n }\n\n async delete(id: string): Promise<void> {\n const session = this.driver.session({ database: this.database });\n try {\n const check = await session.run(\"MATCH (m:Memory {id: $id}) RETURN m.id as id\", { id });\n if (check.records.length === 0) throw notFound(\"Memory\", id);\n await session.run(\"MATCH (m:Memory {id: $id}) DETACH DELETE m\", { id });\n } finally {\n await session.close();\n }\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const session = this.driver.session({ database: this.database });\n try {\n const result = await session.run(\n \"UNWIND $ids AS mid MATCH (m:Memory {id: mid}) DETACH DELETE m RETURN count(m) as deleted\",\n { ids }\n );\n const record = result.records[0];\n if (!record) return 0;\n return record.get(\"deleted\") as number;\n } finally {\n await session.close();\n }\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n const session = this.driver.session({ database: this.database });\n try {\n const limit = Math.floor(query.limit ?? 10);\n const strategy = query.strategy ?? \"hybrid\";\n\n if (strategy === \"semantic\" && embedding) {\n return this._semanticRetrieve(session, embedding, query, limit);\n }\n\n const strLimit = String(limit);\n let cypher: string;\n const params: Record<string, unknown> = {};\n\n const hasActor = query.actorId !== undefined;\n\n switch (strategy) {\n case \"recent\":\n if (hasActor) {\n cypher = \"MATCH (m:Memory) WHERE m.actorId = $actorId RETURN m ORDER BY m.createdAt DESC LIMIT \" + strLimit;\n params.actorId = query.actorId;\n } else {\n cypher = \"MATCH (m:Memory) RETURN m ORDER BY m.createdAt DESC LIMIT \" + strLimit;\n }\n break;\n case \"important\":\n if (hasActor) {\n cypher = \"MATCH (m:Memory) WHERE m.actorId = $actorId RETURN m ORDER BY m.importance DESC LIMIT \" + strLimit;\n params.actorId = query.actorId;\n } else {\n cypher = \"MATCH (m:Memory) RETURN m ORDER BY m.importance DESC LIMIT \" + strLimit;\n }\n break;\n case \"hybrid\":\n default:\n if (embedding) {\n return this._semanticRetrieve(session, embedding, query, limit);\n }\n if (hasActor) {\n cypher = \"MATCH (m:Memory) WHERE m.actorId = $actorId RETURN m ORDER BY m.importance DESC, m.createdAt DESC LIMIT \" + strLimit;\n params.actorId = query.actorId;\n } else {\n cypher = \"MATCH (m:Memory) RETURN m ORDER BY m.importance DESC, m.createdAt DESC LIMIT \" + strLimit;\n }\n break;\n }\n\n const result = await session.run(cypher, params);\n const memories = result.records.map((r) => {\n const raw = r.get(\"m\") as Record<string, unknown>;\n const node = (raw.properties ?? raw) as Neo4jMemoryNode;\n return this._nodeToMemory(node);\n });\n\n return this._postFilter(memories, query);\n } finally {\n await session.close();\n }\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const session = this.driver.session({ database: this.database });\n try {\n const conditions: string[] = [];\n const params: Record<string, unknown> = {};\n\n if (filter?.actorId) {\n conditions.push(\"m.actorId = $actorId\");\n params.actorId = filter.actorId;\n }\n if (filter?.memoryType) {\n conditions.push(\"m.memoryType = $memoryType\");\n params.memoryType = filter.memoryType;\n }\n if (filter?.minImportance !== undefined) {\n conditions.push(\"m.importance >= $minImportance\");\n params.minImportance = filter.minImportance;\n }\n\n const where = conditions.length > 0 ? `WHERE ${conditions.join(\" AND \")}` : \"\";\n const result = await session.run(\n `MATCH (m:Memory) ${where} RETURN count(m) as count`,\n params\n );\n const rawCount = result.records[0].get(\"count\");\n return typeof rawCount === \"number\" ? rawCount : Number(rawCount);\n } finally {\n await session.close();\n }\n }\n\n async graphQuery(cypher: string, params?: Record<string, unknown>): Promise<Memory[]> {\n const session = this.driver.session({ database: this.database });\n try {\n const result = await session.run(cypher, params);\n return result.records.map((r) => {\n const obj = r.toObject();\n const mKey = Object.keys(obj).find((k) => obj[k] && typeof obj[k] === \"object\" && \"properties\" in (obj[k] as object));\n if (mKey) {\n const raw = obj[mKey] as Record<string, unknown>;\n const node = (raw.properties ?? raw) as Neo4jMemoryNode;\n return this._nodeToMemory(node);\n }\n return this._nodeToMemory(obj as unknown as Neo4jMemoryNode);\n });\n } finally {\n await session.close();\n }\n }\n\n async close(): Promise<void> {\n await this.driver.close();\n }\n\n private async _semanticRetrieve(\n session: Neo4jSession,\n embedding: number[],\n query: MemoryRetrieveQuery,\n limit: number\n ): Promise<Memory[]> {\n const hasActor = query.actorId !== undefined;\n const strLimit = String(limit);\n const cypher = hasActor\n ? `CALL db.index.vector.queryNodes('memory_embedding', ${strLimit}, $embedding) YIELD node, score\n MATCH (node) WHERE node.actorId = $actorId\n RETURN node ORDER BY score LIMIT ${strLimit}`\n : `CALL db.index.vector.queryNodes('memory_embedding', ${strLimit}, $embedding) YIELD node, score\n RETURN node ORDER BY score LIMIT ${strLimit}`;\n const params: Record<string, unknown> = { embedding };\n if (hasActor) params.actorId = query.actorId;\n\n const result = await session.run(cypher, params);\n const memories = result.records.map((r) => {\n const raw = r.get(\"node\") as Record<string, unknown>;\n const node = (raw.properties ?? raw) as Neo4jMemoryNode;\n return this._nodeToMemory(node);\n });\n\n return this._postFilter(memories, query);\n }\n\n private _postFilter(memories: Memory[], query: MemoryRetrieveQuery): Memory[] {\n const now = new Date();\n let results = memories.filter((m) => !m.expiresAt || m.expiresAt > now);\n\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n results = results.filter((m) => query.memoryTypes!.includes(m.memoryType));\n }\n if (query.tags && query.tags.length > 0) {\n results = results.filter((m) => m.tags?.some((t) => query.tags!.includes(t)));\n }\n if (query.query) {\n const q = query.query.toLowerCase();\n results = results.filter((m) => m.content.toLowerCase().includes(q));\n }\n\n return results;\n }\n\n private _nodeToMemory(node: Neo4jMemoryNode): Memory {\n return {\n id: node.id,\n actorId: node.actorId,\n memoryType: (node.memoryType ?? \"interaction\") as MemoryType,\n content: node.content,\n importance: node.importance ?? 0.5,\n emotionalValence: node.emotionalValence ?? 0,\n tags: Array.isArray(node.tags) ? node.tags : [],\n embedding: node.embedding ?? undefined,\n sourceId: node.sourceId ?? undefined,\n metadata: typeof node.metadata === \"string\" ? JSON.parse(node.metadata) : (node.metadata ?? {}),\n expiresAt: node.expiresAt ? new Date(node.expiresAt) : undefined,\n createdAt: new Date(node.createdAt),\n };\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { notFound } from \"../../errors.js\";\n\ntype WeaviateClient = {\n collections: {\n create(opts: { name: string; properties: { name: string; dataType: string }[]; vectorizers?: unknown }): Promise<unknown>;\n get(name: string): WeaviateCollection;\n delete(name: string): Promise<void>;\n exists(name: string): Promise<boolean>;\n listAll(): Promise<string[]>;\n };\n};\n\ntype WeaviateCollection = {\n data: {\n insert(opts: { properties: Record<string, unknown>; vectors: number[]; id?: string }): Promise<string>;\n deleteById(id: string): Promise<void>;\n };\n query: {\n fetchObjectById(id: string, opts?: { includeVector?: boolean }): Promise<{ properties: Record<string, unknown>; vectors?: { default?: number[] } } | null>;\n fetchObjects(opts: { limit: number; filters?: unknown; includeVector?: boolean }): Promise<{ objects: { uuid: string; properties: Record<string, unknown>; vectors?: { default?: number[] }; metadata?: { creationTimeUnix: number } }[] }>;\n nearVector(vector: number[], opts: { limit: number; returnProperties?: string[]; returnMetadata?: string[]; filters?: unknown; includeVector?: boolean }): Promise<{ objects: { uuid: string; properties: Record<string, unknown>; vectors?: { default?: number[] }; metadata?: { creationTimeUnix: number } }[] }>;\n };\n config: {\n get(): Promise<{ name: string }>;\n update(opts: { vectorIndexConfig: Record<string, unknown> }): Promise<void>;\n };\n};\n\nexport interface WeaviateStorageConfig {\n client: WeaviateClient;\n className?: string;\n}\n\nexport class WeaviateStorageAdapter implements StorageProvider {\n private client: WeaviateClient;\n private className: string;\n private _collection: WeaviateCollection | null = null;\n private _idToWv = new Map<string, string>();\n\n constructor(config: WeaviateStorageConfig) {\n this.client = config.client;\n this.className = config.className ?? \"MemstackMemory\";\n }\n\n async initialize(): Promise<void> {\n this._collection = this.client.collections.get(this.className);\n }\n\n private collection(): WeaviateCollection {\n if (!this._collection) {\n this._collection = this.client.collections.get(this.className);\n }\n return this._collection;\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const memory: Memory = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n };\n\n const wvId = await this.collection().data.insert({\n id: crypto.randomUUID(),\n properties: this._toProperties(memory),\n vectors: input.embedding ?? new Array(1536).fill(0),\n });\n this._idToWv.set(memory.id, wvId);\n\n return memory;\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const wvId = this._idToWv.get(id);\n if (!wvId) return null;\n\n const obj = await this.collection().query.fetchObjectById(wvId, { includeVector: true });\n if (!obj) return null;\n\n const memory = this._fromProperties(obj.properties, obj.vectors?.default ?? undefined);\n if (memory.expiresAt && memory.expiresAt <= new Date()) return null;\n return memory;\n }\n\n async delete(id: string): Promise<void> {\n const wvId = this._idToWv.get(id);\n if (!wvId) throw notFound(\"Memory\", id);\n await this.collection().data.deleteById(wvId);\n this._idToWv.delete(id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n let count = 0;\n for (const id of ids) {\n try {\n await this.delete(id);\n count++;\n } catch {\n //\n }\n }\n return count;\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n const strategy = query.strategy ?? \"recent\";\n const limit = query.limit ?? 10;\n\n if ((strategy === \"semantic\" || strategy === \"hybrid\") && embedding) {\n const filters = this._buildFilter(query);\n const result = await this.collection().query.nearVector(embedding, {\n limit: 100,\n filters,\n includeVector: true,\n });\n\n let objects = result.objects.map((o) => ({\n ...this._fromProperties(o.properties, o.vectors?.default),\n _score: o.metadata?.creationTimeUnix ?? 0,\n }));\n\n objects = objects.filter((o) => !o.expiresAt || o.expiresAt > new Date());\n\n if (query.actorId) {\n objects = objects.filter((o) => o.actorId === query.actorId);\n }\n\n if (strategy === \"hybrid\") {\n objects.sort((a, b) => (b._score + b.importance) - (a._score + a.importance));\n }\n\n return objects.slice(0, limit);\n }\n\n const filters = this._buildFilter(query);\n const result = await this.collection().query.fetchObjects({\n limit: 10000,\n filters,\n });\n\n let objects = result.objects.map((o) => ({\n ...this._fromProperties(o.properties, o.vectors?.default),\n _createdAt: o.properties.createdAt as string,\n _importance: (o.properties.importance as number) ?? 0.5,\n }));\n\n objects = objects.filter((o) => !o.expiresAt || o.expiresAt > new Date());\n\n if (query.actorId) {\n objects = objects.filter((o) => o.actorId === query.actorId);\n }\n\n switch (strategy) {\n case \"recent\":\n objects.sort((a, b) => new Date(b._createdAt).getTime() - new Date(a._createdAt).getTime());\n break;\n case \"important\":\n objects.sort((a, b) => b._importance - a._importance);\n break;\n case \"hybrid\":\n case \"semantic\":\n default:\n objects.sort((a, b) => b._importance - a._importance || new Date(b._createdAt).getTime() - new Date(a._createdAt).getTime());\n break;\n }\n\n return objects.slice(0, limit);\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const and: unknown[] = [];\n if (filter?.actorId) {\n and.push({ operator: \"Equal\", target: { property: \"actorId\" }, value: filter.actorId });\n }\n if (filter?.memoryType) {\n and.push({ operator: \"Equal\", target: { property: \"memoryType\" }, value: filter.memoryType });\n }\n if (filter?.minImportance !== undefined) {\n and.push({ operator: \"GreaterThanEqual\", target: { property: \"importance\" }, value: filter.minImportance });\n }\n\n const finalFilter = and.length === 0 ? undefined : and.length === 1 ? and[0] : { operator: \"And\", filters: and };\n const result = await this.collection().query.fetchObjects({\n limit: 10000,\n filters: finalFilter,\n });\n return result.objects.length;\n }\n\n async close(): Promise<void> {\n //\n }\n\n private _buildFilter(query: MemoryRetrieveQuery): unknown {\n const and: unknown[] = [];\n\n if (query.actorId) {\n and.push({ operator: \"Equal\", target: { property: \"actorId\" }, value: query.actorId });\n }\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n if (query.memoryTypes.length === 1) {\n and.push({ operator: \"Equal\", target: { property: \"memoryType\" }, value: query.memoryTypes[0] });\n } else {\n and.push({\n operator: \"Or\",\n filters: query.memoryTypes.map((t) => ({ operator: \"Equal\", target: { property: \"memoryType\" }, value: t })),\n });\n }\n }\n if (query.tags && query.tags.length > 0) {\n if (query.tags.length === 1) {\n and.push({ operator: \"ContainsAny\", target: { property: \"tags\" }, values: query.tags });\n } else {\n and.push({\n operator: \"Or\",\n filters: query.tags.map((t) => ({ operator: \"ContainsAny\", target: { property: \"tags\" }, values: [t] })),\n });\n }\n }\n if (query.query) {\n and.push({ operator: \"Like\", target: { property: \"content\" }, value: `*${query.query}*` });\n }\n\n return and.length === 0 ? undefined : and.length === 1 ? and[0] : { operator: \"And\", filters: and };\n }\n\n private _toProperties(memory: Memory): Record<string, unknown> {\n return {\n _memstackId: memory.id,\n actorId: memory.actorId,\n memoryType: memory.memoryType,\n content: memory.content,\n importance: memory.importance,\n emotionalValence: memory.emotionalValence,\n tags: memory.tags,\n metadata: JSON.stringify(memory.metadata ?? {}),\n sourceId: memory.sourceId ?? null,\n expiresAt: memory.expiresAt?.toISOString() ?? null,\n createdAt: memory.createdAt.toISOString(),\n };\n }\n\n private _fromProperties(props: Record<string, unknown>, vectors?: number[]): Memory {\n return {\n id: (props._memstackId as string) ?? \"\",\n actorId: (props.actorId as string) ?? \"\",\n memoryType: (props.memoryType as MemoryType) ?? \"interaction\",\n content: (props.content as string) ?? \"\",\n importance: (props.importance as number) ?? 0.5,\n emotionalValence: (props.emotionalValence as number) ?? 0,\n tags: Array.isArray(props.tags) ? (props.tags as string[]) : [],\n embedding: vectors,\n sourceId: (props.sourceId as string) ?? undefined,\n metadata: typeof props.metadata === \"string\" ? JSON.parse(props.metadata as string) : (props.metadata ?? {}),\n expiresAt: props.expiresAt ? new Date(props.expiresAt as string) : undefined,\n createdAt: new Date((props.createdAt as string) ?? new Date().toISOString()),\n };\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { storageError, notFound, configError } from \"../../errors.js\";\n\ntype LanceDBConnection = {\n createTable(name: string, data: { id: string; vector: number[]; actor_id: string; memory_type: string; content: string; importance: number; emotional_valence: number; tags: string; source_id: string; metadata: string; expires_at: string; created_at: string }[]): Promise<LanceDBTable>;\n openTable(name: string): Promise<LanceDBTable>;\n tableNames(): Promise<string[]>;\n};\n\ntype LanceDBTable = {\n add(data: { id: string; vector: number[]; actor_id: string; memory_type: string; content: string; importance: number; emotional_valence: number; tags: string; source_id: string; metadata: string; expires_at: string; created_at: string }[]): Promise<void>;\n search(vector: number[]): { limit(n: number): { where(predicate: string): { execute(): Promise<LanceDBMemoryRow[]>; prefilter(value: boolean): { execute(): Promise<LanceDBMemoryRow[]> } } } };\n delete(predicate: string): Promise<void>;\n countRows(predicate?: string): Promise<number>;\n};\n\nexport interface LanceDBStorageConfig {\n connection: LanceDBConnection;\n tableName?: string;\n}\n\ninterface LanceDBMemoryRow {\n id: string;\n vector: number[];\n actor_id: string;\n memory_type: string;\n content: string;\n importance: number;\n emotional_valence: number;\n tags: string;\n source_id: string;\n metadata: string;\n expires_at: string;\n created_at: string;\n _distance?: number;\n}\n\nexport class LanceDBStorageAdapter implements StorageProvider {\n private connection: LanceDBConnection;\n private table!: LanceDBTable;\n private tableName: string;\n private _zeroVector: number[];\n\n constructor(config: LanceDBStorageConfig) {\n if (!config.connection) {\n throw configError(\"LanceDBStorageAdapter requires a LanceDB connection instance\");\n }\n this.connection = config.connection;\n this.tableName = config.tableName ?? \"memstack\";\n this._zeroVector = new Array(1536).fill(0);\n }\n\n async initialize(): Promise<void> {\n const tables = await this.connection.tableNames();\n if (!tables.includes(this.tableName)) {\n this.table = await this.connection.createTable(this.tableName, []);\n } else {\n this.table = await this.connection.openTable(this.tableName);\n }\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const id = input.id ?? this.generateId();\n\n const row = {\n id,\n vector: input.embedding ?? this._zeroVector,\n actor_id: input.actorId,\n memory_type: input.memoryType ?? \"interaction\",\n content: input.content,\n importance: input.importance ?? 0.5,\n emotional_valence: input.emotionalValence ?? 0,\n tags: JSON.stringify(input.tags ?? []),\n source_id: input.sourceId ?? \"\",\n metadata: JSON.stringify(input.metadata ?? {}),\n expires_at: input.expiresAt?.toISOString() ?? \"\",\n created_at: now.toISOString(),\n };\n\n await this.table.add([row]);\n\n return {\n id,\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n };\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const results = await this.table.search(this._zeroVector).limit(1).where(`id = \"${id}\"`).prefilter(true).execute();\n if (results.length === 0) return null;\n\n const row = results[0];\n if (row.expires_at) {\n const expiresAt = new Date(row.expires_at);\n if (expiresAt <= new Date()) {\n await this.table.delete(`id = \"${id}\"`);\n return null;\n }\n }\n\n return this._rowToMemory(row);\n }\n\n async delete(id: string): Promise<void> {\n const existing = await this.get(id);\n if (!existing) throw notFound(\"Memory\", id);\n await this.table.delete(`id = \"${id}\"`);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const before = await this.table.countRows();\n const inClause = ids.map((id) => `\"${id}\"`).join(\", \");\n await this.table.delete(`id IN (${inClause})`);\n const after = await this.table.countRows();\n return before - after;\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n const conditions: string[] = [];\n if (query.actorId) {\n conditions.push(`actor_id = \"${query.actorId}\"`);\n }\n\n const where = conditions.length > 0 ? conditions.join(\" AND \") : \"\";\n\n const isSemantic = (query.strategy === \"semantic\" || query.strategy === \"hybrid\") && embedding && embedding.length > 0;\n const searchVec = isSemantic ? embedding! : this._zeroVector;\n const scanLimit = isSemantic ? (query.limit ?? 10) : 10000;\n\n const results = await this.table\n .search(searchVec)\n .limit(scanLimit)\n .where(where)\n .execute();\n\n let rows = results as LanceDBMemoryRow[];\n\n const now = new Date();\n rows = rows.filter((r) => !r.expires_at || new Date(r.expires_at) > now);\n\n if (query.actorId) {\n rows = rows.filter((r) => r.actor_id === query.actorId);\n }\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n rows = rows.filter((r) => query.memoryTypes!.includes(r.memory_type as MemoryType));\n }\n if (query.tags && query.tags.length > 0) {\n rows = rows.filter((r) => {\n const tags: string[] = JSON.parse(r.tags);\n return tags.some((t) => query.tags!.includes(t));\n });\n }\n if (query.query) {\n const q = query.query.toLowerCase();\n rows = rows.filter((r) => r.content.toLowerCase().includes(q));\n }\n\n const limit = query.limit ?? 10;\n\n if (isSemantic && query.strategy === \"hybrid\") {\n rows.sort((a, b) => {\n const scoreA = (a._distance ?? 0) + a.importance;\n const scoreB = (b._distance ?? 0) + b.importance;\n return scoreB - scoreA;\n });\n } else if (query.strategy === \"recent\") {\n rows.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());\n } else if (query.strategy === \"important\") {\n rows.sort((a, b) => b.importance - a.importance);\n } else if (!isSemantic) {\n rows.sort((a, b) => b.importance - a.importance || new Date(b.created_at).getTime() - new Date(a.created_at).getTime());\n }\n\n return rows.slice(0, limit).map((r) => this._rowToMemory(r));\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const conditions: string[] = [];\n if (filter?.actorId) {\n conditions.push(`actor_id = \"${filter.actorId}\"`);\n }\n\n const where = conditions.length > 0 ? conditions.join(\" AND \") : \"\";\n\n const results = await this.table\n .search(this._zeroVector)\n .limit(10000)\n .where(where)\n .execute();\n\n const now = new Date();\n let rows = results.filter((r) => !r.expires_at || new Date(r.expires_at) > now);\n\n if (filter?.actorId) {\n rows = rows.filter((r) => r.actor_id === filter.actorId);\n }\n if (filter?.memoryType) {\n rows = rows.filter((r) => r.memory_type === filter.memoryType);\n }\n if (filter?.minImportance !== undefined) {\n rows = rows.filter((r) => r.importance >= filter.minImportance!);\n }\n\n return rows.length;\n }\n\n async close(): Promise<void> {\n }\n\n private _rowToMemory(row: LanceDBMemoryRow): Memory {\n return {\n id: row.id,\n actorId: row.actor_id,\n memoryType: row.memory_type as MemoryType,\n content: row.content,\n importance: row.importance,\n emotionalValence: row.emotional_valence,\n tags: row.tags ? JSON.parse(row.tags) : [],\n embedding: row.vector && row.vector.length > 0 ? row.vector : undefined,\n sourceId: row.source_id || undefined,\n metadata: row.metadata ? JSON.parse(row.metadata) : {},\n expiresAt: row.expires_at ? new Date(row.expires_at) : undefined,\n createdAt: new Date(row.created_at),\n };\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { storageError, notFound } from \"../../errors.js\";\n\ntype MongoCollection = {\n insertOne(doc: Record<string, unknown>): Promise<{ insertedId: string }>;\n findOne(filter: Record<string, unknown>): Promise<Record<string, unknown> | null>;\n updateOne(filter: Record<string, unknown>, update: Record<string, unknown>, opts?: { upsert?: boolean }): Promise<{ upsertedId?: string }>;\n deleteOne(filter: Record<string, unknown>): Promise<{ deletedCount: number }>;\n deleteMany(filter: Record<string, unknown>): Promise<{ deletedCount: number }>;\n find(filter: Record<string, unknown>): { sort(sort: Record<string, number>): { limit(n: number): { toArray(): Promise<Record<string, unknown>[]> } } };\n countDocuments(filter?: Record<string, unknown>): Promise<number>;\n aggregate(pipeline: Record<string, unknown>[]): { toArray(): Promise<Record<string, unknown>[]> };\n};\n\nexport interface MongoDBStorageConfig {\n collection: MongoCollection;\n vectorDimensions?: number;\n}\n\ninterface MongoDoc {\n _id: string;\n actorId: string;\n memoryType: MemoryType;\n content: string;\n importance: number;\n emotionalValence: number;\n tags: string[];\n embedding?: number[];\n sourceId?: string;\n metadata?: Record<string, unknown>;\n expiresAt?: Date;\n createdAt: Date;\n}\n\nexport class MongoDBStorageAdapter implements StorageProvider {\n private collection: MongoCollection;\n private vectorDimensions: number;\n\n constructor(config: MongoDBStorageConfig) {\n this.collection = config.collection;\n this.vectorDimensions = config.vectorDimensions ?? 1536;\n }\n\n async initialize(): Promise<void> {\n try {\n const col = this.collection as MongoCollection & { createSearchIndex?: (def: Record<string, unknown>) => Promise<unknown> };\n if (col.createSearchIndex) {\n await col.createSearchIndex({\n name: \"memstack_vector\",\n definition: {\n mappings: {\n dynamic: false,\n fields: {\n embedding: {\n type: \"knnVector\",\n dimensions: this.vectorDimensions,\n similarity: \"cosine\",\n },\n },\n },\n },\n });\n }\n } catch {}\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const memory: Memory = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n };\n await this.collection.insertOne(this.toDoc(memory) as unknown as Record<string, unknown>);\n return memory;\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const doc = await this.collection.findOne({ _id: id });\n if (!doc) return null;\n const memory = this.toMemory(doc as unknown as MongoDoc);\n if (memory.expiresAt && memory.expiresAt <= new Date()) return null;\n return memory;\n }\n\n async delete(id: string): Promise<void> {\n const result = await this.collection.deleteOne({ _id: id });\n if (result.deletedCount === 0) throw notFound(\"Memory\", id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const result = await this.collection.deleteMany({ _id: { $in: ids } });\n return result.deletedCount;\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n if (query.strategy === \"semantic\" && embedding) {\n return this.retrieveSemantic(query, embedding);\n }\n return this.retrieveStandard(query);\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const mongoFilter: Record<string, unknown> = {};\n if (filter?.actorId) mongoFilter.actorId = filter.actorId;\n if (filter?.memoryType) mongoFilter.memoryType = filter.memoryType;\n if (filter?.minImportance !== undefined) {\n mongoFilter.importance = { $gte: filter.minImportance };\n }\n return this.collection.countDocuments(mongoFilter);\n }\n\n async close(): Promise<void> {}\n\n private async retrieveStandard(query: MemoryRetrieveQuery): Promise<Memory[]> {\n const filter: Record<string, unknown> = {};\n if (query.actorId) filter.actorId = query.actorId;\n\n if (query.tags && query.tags.length > 0) {\n filter.tags = { $in: query.tags };\n }\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n filter.memoryType = { $in: query.memoryTypes };\n }\n\n let sortObj: Record<string, number>;\n switch (query.strategy) {\n case \"recent\":\n sortObj = { createdAt: -1 };\n break;\n case \"important\":\n sortObj = { importance: -1 };\n break;\n default:\n sortObj = { importance: -1, createdAt: -1 };\n break;\n }\n\n const docs = await this.collection\n .find(filter)\n .sort(sortObj)\n .limit(10000)\n .toArray();\n\n const now = new Date();\n let results = docs\n .map((doc) => this.toMemory(doc as unknown as MongoDoc))\n .filter((m) => !m.expiresAt || m.expiresAt > now);\n\n if (query.query) {\n const q = query.query.toLowerCase();\n results = results.filter((m) => m.content.toLowerCase().includes(q));\n }\n\n return results.slice(0, query.limit ?? 10);\n }\n\n private async retrieveSemantic(query: MemoryRetrieveQuery, embedding: number[]): Promise<Memory[]> {\n try {\n const filter: Record<string, unknown> = {};\n if (query.actorId) filter.actorId = query.actorId;\n\n const pipeline: Record<string, unknown>[] = [\n {\n $vectorSearch: {\n index: \"memstack_vector\",\n path: \"embedding\",\n queryVector: embedding,\n numCandidates: 100,\n limit: query.limit ?? 10,\n filter: filter,\n },\n },\n ];\n\n const docs = await this.collection.aggregate(pipeline).toArray();\n const now = new Date();\n return docs\n .map((doc) => this.toMemory(doc as unknown as MongoDoc))\n .filter((m) => !m.expiresAt || m.expiresAt > now);\n } catch {\n return this.retrieveStandard(query);\n }\n }\n\n private toMemory(doc: MongoDoc): Memory {\n return {\n id: doc._id,\n actorId: doc.actorId,\n memoryType: doc.memoryType,\n content: doc.content,\n importance: doc.importance,\n emotionalValence: doc.emotionalValence,\n tags: doc.tags,\n embedding: doc.embedding,\n sourceId: doc.sourceId,\n metadata: doc.metadata,\n expiresAt: doc.expiresAt,\n createdAt: doc.createdAt,\n };\n }\n\n private toDoc(memory: Memory): MongoDoc {\n return {\n _id: memory.id,\n actorId: memory.actorId,\n memoryType: memory.memoryType,\n content: memory.content,\n importance: memory.importance,\n emotionalValence: memory.emotionalValence,\n tags: memory.tags,\n embedding: memory.embedding,\n sourceId: memory.sourceId,\n metadata: memory.metadata,\n expiresAt: memory.expiresAt,\n createdAt: memory.createdAt,\n };\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { notFound, configError } from \"../../errors.js\";\n\ntype BetterSqlite3Db = {\n exec(sql: string): void;\n prepare(sql: string): {\n run(...params: unknown[]): { changes: number; lastInsertRowid: number | bigint };\n get(...params: unknown[]): unknown | undefined;\n all(...params: unknown[]): unknown[];\n };\n close(): void;\n};\n\ninterface SqliteMemoryRow {\n id: string;\n actor_id: string;\n memory_type: string;\n content: string;\n importance: number;\n emotional_valence: number;\n tags: string;\n embedding: string | null;\n source_id: string | null;\n metadata: string;\n expires_at: string | null;\n created_at: string;\n touched_at: string;\n}\n\nexport interface SQLiteStorageConfig {\n db: BetterSqlite3Db;\n tableName?: string;\n vectorDimensions?: number;\n}\n\nfunction cosineSimilarity(a: number[], b: number[]): number {\n if (a.length === 0 || b.length === 0) return 0;\n const dims = Math.min(a.length, b.length);\n let dot = 0;\n let magA = 0;\n let magB = 0;\n for (let i = 0; i < dims; i++) {\n dot += a[i] * b[i];\n magA += a[i] * a[i];\n magB += b[i] * b[i];\n }\n const mag = Math.sqrt(magA) * Math.sqrt(magB);\n return mag === 0 ? 0 : dot / mag;\n}\n\nexport class SQLiteStorageAdapter implements StorageProvider {\n private db: BetterSqlite3Db;\n private table: string;\n private vectorDimensions: number;\n\n constructor(config: SQLiteStorageConfig) {\n if (!config.db) {\n throw configError(\"SQLiteStorageAdapter requires a better-sqlite3 database instance\");\n }\n this.db = config.db;\n this.table = config.tableName ?? \"memstack_memories\";\n if (!/^[a-zA-Z0-9_]+$/.test(this.table)) {\n throw configError(`Invalid table name: \"${this.table}\". Use only alphanumeric characters and underscores.`);\n }\n this.vectorDimensions = config.vectorDimensions ?? 1536;\n }\n\n async initialize(): Promise<void> {\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS ${this.table} (\n id TEXT PRIMARY KEY,\n actor_id TEXT NOT NULL,\n memory_type TEXT NOT NULL DEFAULT 'interaction',\n content TEXT NOT NULL,\n importance REAL NOT NULL DEFAULT 0.5,\n emotional_valence REAL NOT NULL DEFAULT 0,\n tags TEXT NOT NULL DEFAULT '[]',\n embedding TEXT,\n source_id TEXT,\n metadata TEXT NOT NULL DEFAULT '{}',\n expires_at TEXT,\n created_at TEXT NOT NULL,\n touched_at TEXT NOT NULL\n )\n `);\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_${this.table}_actor ON ${this.table}(actor_id)`);\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_${this.table}_created ON ${this.table}(created_at DESC)`);\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_${this.table}_importance ON ${this.table}(importance DESC)`);\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date().toISOString();\n const id = input.id ?? this.generateId();\n\n this.db.prepare(\n `INSERT INTO ${this.table} (id, actor_id, memory_type, content, importance, emotional_valence, tags, embedding, source_id, metadata, expires_at, created_at, touched_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(id) DO UPDATE SET\n content = excluded.content,\n importance = excluded.importance,\n emotional_valence = excluded.emotional_valence,\n tags = excluded.tags,\n embedding = excluded.embedding,\n source_id = excluded.source_id,\n metadata = excluded.metadata,\n expires_at = excluded.expires_at,\n touched_at = excluded.touched_at`\n ).run(\n id,\n input.actorId,\n input.memoryType ?? \"interaction\",\n input.content,\n input.importance ?? 0.5,\n input.emotionalValence ?? 0,\n JSON.stringify(input.tags ?? []),\n input.embedding ? JSON.stringify(input.embedding) : null,\n input.sourceId ?? null,\n JSON.stringify(input.metadata ?? {}),\n input.expiresAt?.toISOString() ?? null,\n now,\n now\n );\n\n return {\n id,\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? new Date(now),\n };\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const row = this.db.prepare(\n `SELECT * FROM ${this.table} WHERE id = ? AND (expires_at IS NULL OR expires_at > ?)`\n ).get(id, new Date().toISOString()) as SqliteMemoryRow | undefined;\n\n if (!row) return null;\n return this._rowToMemory(row);\n }\n\n async delete(id: string): Promise<void> {\n const row = this.db.prepare(`SELECT id FROM ${this.table} WHERE id = ?`).get(id) as { id: string } | undefined;\n if (!row) throw notFound(\"Memory\", id);\n this.db.prepare(`DELETE FROM ${this.table} WHERE id = ?`).run(id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const placeholders = ids.map(() => \"?\").join(\", \");\n const result = this.db.prepare(\n `DELETE FROM ${this.table} WHERE id IN (${placeholders})`\n ).run(...ids);\n return result.changes;\n }\n\n async touch(id: string): Promise<void> {\n const row = this.db.prepare(`SELECT id FROM ${this.table} WHERE id = ?`).get(id) as { id: string } | undefined;\n if (!row) throw notFound(\"Memory\", id);\n this.db.prepare(`UPDATE ${this.table} SET touched_at = ? WHERE id = ?`).run(new Date().toISOString(), id);\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n const conditions: string[] = [\"(expires_at IS NULL OR expires_at > ?)\"];\n const params: unknown[] = [new Date().toISOString()];\n\n if (query.actorId) {\n conditions.push(\"actor_id = ?\");\n params.push(query.actorId);\n }\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n const placeholders = query.memoryTypes.map(() => \"?\").join(\", \");\n conditions.push(`memory_type IN (${placeholders})`);\n params.push(...query.memoryTypes);\n }\n if (query.createdAfter) {\n conditions.push(\"created_at >= ?\");\n params.push(query.createdAfter.toISOString());\n }\n if (query.createdBefore) {\n conditions.push(\"created_at <= ?\");\n params.push(query.createdBefore.toISOString());\n }\n\n const where = `WHERE ${conditions.join(\" AND \")}`;\n\n const hasSemantic = (query.strategy === \"semantic\" || query.strategy === \"hybrid\") && embedding && embedding.length > 0;\n\n let orderBy: string;\n switch (query.strategy) {\n case \"recent\":\n orderBy = \"touched_at DESC\";\n break;\n case \"important\":\n orderBy = \"importance DESC\";\n break;\n case \"hybrid\":\n case \"semantic\":\n default:\n if (hasSemantic) {\n orderBy = \"touched_at DESC\";\n } else {\n orderBy = \"importance DESC, touched_at DESC\";\n }\n break;\n }\n\n const limit = query.limit ?? 10;\n const sql = `SELECT * FROM ${this.table} ${where} ORDER BY ${orderBy}`;\n const rows = this.db.prepare(sql).all(...params) as SqliteMemoryRow[];\n\n let results: SqliteMemoryRow[] = rows;\n\n if (query.query) {\n const q = query.query.toLowerCase();\n results = results.filter((r) => r.content.toLowerCase().includes(q));\n }\n\n if (query.tags && query.tags.length > 0) {\n results = results.filter((r) => {\n const tags: string[] = JSON.parse(r.tags);\n return tags.some((t) => query.tags!.includes(t));\n });\n }\n\n if (hasSemantic && embedding) {\n const scored = results\n .filter((r) => r.embedding !== null)\n .map((r) => {\n const emb: number[] = JSON.parse(r.embedding!);\n const score = cosineSimilarity(embedding, emb);\n return { row: r, score };\n })\n .sort((a, b) => b.score - a.score);\n\n if (query.strategy === \"hybrid\") {\n scored.sort((a, b) => (b.score + b.row.importance) - (a.score + a.row.importance));\n }\n\n const topK = scored.slice(0, limit);\n for (const { row } of topK) {\n this.db.prepare(`UPDATE ${this.table} SET touched_at = ? WHERE id = ?`).run(new Date().toISOString(), row.id);\n }\n return topK.map(({ row }) => this._rowToMemory(row));\n }\n\n const now = new Date().toISOString();\n const limited = results.slice(0, limit);\n for (const row of limited) {\n this.db.prepare(`UPDATE ${this.table} SET touched_at = ? WHERE id = ?`).run(now, row.id);\n }\n\n return limited.map((r) => this._rowToMemory(r));\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const conditions: string[] = [\"(expires_at IS NULL OR expires_at > ?)\"];\n const params: unknown[] = [new Date().toISOString()];\n\n if (filter?.actorId) {\n conditions.push(\"actor_id = ?\");\n params.push(filter.actorId);\n }\n if (filter?.memoryType) {\n conditions.push(\"memory_type = ?\");\n params.push(filter.memoryType);\n }\n if (filter?.minImportance !== undefined) {\n conditions.push(\"importance >= ?\");\n params.push(filter.minImportance);\n }\n if (filter?.createdAfter) {\n conditions.push(\"created_at >= ?\");\n params.push(filter.createdAfter.toISOString());\n }\n if (filter?.createdBefore) {\n conditions.push(\"created_at <= ?\");\n params.push(filter.createdBefore.toISOString());\n }\n\n const where = conditions.join(\" AND \");\n const row = this.db.prepare(\n `SELECT COUNT(*) as count FROM ${this.table} WHERE ${where}`\n ).get(...params) as { count: number } | undefined;\n\n return row?.count ?? 0;\n }\n\n async close(): Promise<void> {\n this.db.close();\n }\n\n private _rowToMemory(row: SqliteMemoryRow): Memory {\n return {\n id: row.id,\n actorId: row.actor_id,\n memoryType: row.memory_type as MemoryType,\n content: row.content,\n importance: row.importance,\n emotionalValence: row.emotional_valence,\n tags: JSON.parse(row.tags),\n embedding: row.embedding ? JSON.parse(row.embedding) : undefined,\n sourceId: row.source_id ?? undefined,\n metadata: JSON.parse(row.metadata),\n expiresAt: row.expires_at ? new Date(row.expires_at) : undefined,\n createdAt: new Date(row.created_at),\n };\n }\n}\n","import type { LLMProvider } from \"../../interfaces.js\";\nimport { MemStackError } from \"../../errors.js\";\n\nexport interface OpenAILLMConfig {\n apiKey: string;\n baseURL?: string;\n defaultModel?: string;\n defaultTemperature?: number;\n defaultMaxTokens?: number;\n}\n\nexport class OpenAILLMAdapter implements LLMProvider {\n private apiKey: string;\n private baseURL: string;\n private defaultModel: string;\n private defaultTemperature: number;\n private defaultMaxTokens: number;\n\n constructor(config: OpenAILLMConfig) {\n this.apiKey = config.apiKey;\n this.baseURL = config.baseURL ?? \"https://api.openai.com/v1\";\n this.defaultModel = config.defaultModel ?? \"gpt-4o-mini\";\n this.defaultTemperature = config.defaultTemperature ?? 0.7;\n this.defaultMaxTokens = config.defaultMaxTokens ?? 1024;\n }\n\n async complete(request: {\n system: string;\n user: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n }): Promise<{ text: string; tokens: { prompt: number; completion: number; total: number } }> {\n const model = request.model ?? this.defaultModel;\n const temperature = request.temperature ?? this.defaultTemperature;\n const maxTokens = request.maxTokens ?? this.defaultMaxTokens;\n\n try {\n const response = await fetch(`${this.baseURL}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model,\n messages: [\n { role: \"system\", content: request.system },\n { role: \"user\", content: request.user },\n ],\n temperature,\n max_tokens: maxTokens,\n }),\n });\n\n if (!response.ok) {\n const err = await response.text();\n throw new MemStackError(\"LLM_ERROR\", `OpenAI API error: ${response.status} ${err}`, {\n retryable: response.status >= 500,\n });\n }\n\n const data = (await response.json()) as {\n choices: { message: { content: string } }[];\n usage?: { prompt_tokens: number; completion_tokens: number; total_tokens: number };\n };\n\n return {\n text: data.choices[0]?.message?.content ?? \"\",\n tokens: {\n prompt: data.usage?.prompt_tokens ?? 0,\n completion: data.usage?.completion_tokens ?? 0,\n total: data.usage?.total_tokens ?? 0,\n },\n };\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n throw new MemStackError(\"LLM_ERROR\", `LLM request failed: ${err instanceof Error ? err.message : String(err)}`, {\n retryable: true,\n });\n }\n }\n\n async *completeStream(request: {\n system: string;\n user: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n }): AsyncIterable<{ text: string; tokens: { prompt: number; completion: number; total: number } }> {\n const model = request.model ?? this.defaultModel;\n const temperature = request.temperature ?? this.defaultTemperature;\n const maxTokens = request.maxTokens ?? this.defaultMaxTokens;\n\n let response: Response;\n try {\n response = await fetch(`${this.baseURL}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model,\n messages: [\n { role: \"system\", content: request.system },\n { role: \"user\", content: request.user },\n ],\n temperature,\n max_tokens: maxTokens,\n stream: true,\n stream_options: { include_usage: true },\n }),\n });\n } catch (err) {\n throw new MemStackError(\"LLM_ERROR\", `OpenAI streaming request failed: ${err instanceof Error ? err.message : String(err)}`, {\n retryable: true,\n });\n }\n\n if (!response.ok) {\n const err = await response.text();\n throw new MemStackError(\"LLM_ERROR\", `OpenAI streaming error: ${response.status} ${err}`, {\n retryable: response.status >= 500,\n });\n }\n\n const reader = response.body?.getReader();\n if (!reader) throw new MemStackError(\"LLM_ERROR\", \"No response body for streaming\");\n\n const decoder = new TextDecoder();\n let buffer = \"\";\n let promptTokens = 0;\n let completionTokens = 0;\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || !trimmed.startsWith(\"data: \")) continue;\n const data = trimmed.slice(6);\n if (data === \"[DONE]\") continue;\n\n try {\n const parsed = JSON.parse(data) as {\n choices?: { delta?: { content?: string } }[];\n usage?: { prompt_tokens: number; completion_tokens: number; total_tokens: number };\n };\n\n const content = parsed.choices?.[0]?.delta?.content ?? \"\";\n const usage = parsed.usage;\n if (usage) {\n promptTokens = usage.prompt_tokens;\n completionTokens = usage.completion_tokens;\n }\n\n if (content || usage) {\n yield {\n text: content,\n tokens: { prompt: promptTokens, completion: completionTokens, total: promptTokens + completionTokens },\n };\n }\n } catch {\n // Skip unparseable chunks\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n}\n","import type { LLMProvider } from \"../../interfaces.js\";\nimport { MemStackError } from \"../../errors.js\";\n\ninterface AnthropicSDK {\n messages: {\n create(params: {\n model: string;\n max_tokens: number;\n temperature?: number;\n system: string;\n messages: { role: string; content: string }[];\n }): Promise<{ content: { text: string }[]; usage?: { input_tokens: number; output_tokens: number } }>;\n };\n}\n\nexport interface AnthropicLLMConfig {\n apiKey: string;\n baseURL?: string;\n defaultModel?: string;\n defaultMaxTokens?: number;\n}\n\nexport class AnthropicLLMAdapter implements LLMProvider {\n private apiKey: string;\n private baseURL: string;\n private defaultModel: string;\n private defaultMaxTokens: number;\n private sdk?: AnthropicSDK;\n\n constructor(config: AnthropicLLMConfig) {\n this.apiKey = config.apiKey;\n this.baseURL = config.baseURL ?? \"https://api.anthropic.com\";\n this.defaultModel = config.defaultModel ?? \"claude-sonnet-4-5-20250929\";\n this.defaultMaxTokens = config.defaultMaxTokens ?? 1024;\n }\n\n async complete(request: {\n system: string;\n user: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n }): Promise<{ text: string; tokens: { prompt: number; completion: number; total: number } }> {\n const model = request.model ?? this.defaultModel;\n const maxTokens = request.maxTokens ?? this.defaultMaxTokens;\n\n try {\n if (!this.sdk) {\n // @ts-expect-error — optional peer dep\n const { default: Anthropic } = await import(\"@anthropic-ai/sdk\");\n this.sdk = new Anthropic({ apiKey: this.apiKey, baseURL: this.baseURL }) as AnthropicSDK;\n }\n\n const sdk = this.sdk;\n const response = await sdk.messages.create({\n model,\n system: request.system,\n messages: [{ role: \"user\", content: request.user }],\n max_tokens: maxTokens,\n ...(request.temperature !== undefined ? { temperature: request.temperature } : {}),\n });\n\n const text = response.content.length > 0 && \"text\" in response.content[0]\n ? (response.content[0] as { text: string }).text\n : \"\";\n\n return {\n text,\n tokens: {\n prompt: response.usage?.input_tokens ?? 0,\n completion: response.usage?.output_tokens ?? 0,\n total: (response.usage?.input_tokens ?? 0) + (response.usage?.output_tokens ?? 0),\n },\n };\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n const msg = err instanceof Error ? err.message : String(err);\n // Node's ERR_MODULE_NOT_FOUND/MODULE_NOT_FOUND codes are the stable\n // signal for a real \"package isn't installed\" failure; the message-text\n // fallback covers bundler/dev-server module loaders (e.g. Vite, used\n // under this project's own test runner) that don't set `code` at all.\n // Either way, requiring the package name in the message keeps this\n // from misattributing an unrelated failure to a missing SDK.\n const code = (err as { code?: string } | undefined)?.code;\n const isMissingSdk =\n msg.includes(\"@anthropic-ai/sdk\") &&\n (code === \"ERR_MODULE_NOT_FOUND\" ||\n code === \"MODULE_NOT_FOUND\" ||\n /cannot find (package|module)/i.test(msg) ||\n /failed to (load|resolve)/i.test(msg));\n if (isMissingSdk) {\n throw new MemStackError(\"LLM_ERROR\", \"Anthropic adapter requires @anthropic-ai/sdk. Install it: npm install @anthropic-ai/sdk\", {\n retryable: false,\n });\n }\n throw new MemStackError(\"LLM_ERROR\", `Anthropic request failed: ${msg}`, {\n retryable: true,\n });\n }\n }\n}\n","import type { EmbeddingProvider } from \"../../interfaces.js\";\nimport { MemStackError } from \"../../errors.js\";\n\nexport interface OpenAIEmbeddingConfig {\n apiKey: string;\n baseURL?: string;\n model?: string;\n}\n\nexport class OpenAIEmbeddingAdapter implements EmbeddingProvider {\n private apiKey: string;\n private baseURL: string;\n private model: string;\n readonly dimensions: number;\n readonly maxBatchSize = 2048;\n\n constructor(config: OpenAIEmbeddingConfig) {\n this.apiKey = config.apiKey;\n this.baseURL = config.baseURL ?? \"https://api.openai.com/v1\";\n this.model = config.model ?? \"text-embedding-3-small\";\n this.dimensions = this.model === \"text-embedding-3-large\" ? 3072 : 1536;\n }\n\n async embed(texts: string[]): Promise<number[][]> {\n if (texts.length === 0) return [];\n if (texts.length > this.maxBatchSize) {\n throw new MemStackError(\"VALIDATION_ERROR\", `Max ${this.maxBatchSize} texts per batch, got ${texts.length}`);\n }\n\n try {\n const response = await fetch(`${this.baseURL}/embeddings`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model: this.model,\n input: texts,\n }),\n });\n\n if (!response.ok) {\n const err = await response.text();\n throw new MemStackError(\"EMBEDDING_ERROR\", `OpenAI Embedding error: ${response.status} ${err}`, {\n retryable: response.status >= 500,\n });\n }\n\n const data = (await response.json()) as {\n data: { embedding: number[]; index: number }[];\n };\n\n return data.data\n .sort((a, b) => a.index - b.index)\n .map((item) => item.embedding);\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n throw new MemStackError(\n \"EMBEDDING_ERROR\",\n `Embedding request failed: ${err instanceof Error ? err.message : String(err)}`,\n { retryable: true }\n );\n }\n }\n}\n","import type { EmbeddingProvider } from \"../../interfaces.js\";\nimport { MemStackError } from \"../../errors.js\";\n\nexport interface CohereEmbeddingConfig {\n /** Cohere API key */\n apiKey: string;\n /** Model name. Default: \"embed-english-v3.0\" (1024 dims) */\n model?: string;\n /** Base URL. Default: \"https://api.cohere.ai/v1\" */\n baseURL?: string;\n}\n\nconst DIMENSIONS: Record<string, number> = {\n \"embed-english-v3.0\": 1024,\n \"embed-multilingual-v3.0\": 1024,\n \"embed-english-light-v3.0\": 384,\n \"embed-multilingual-light-v3.0\": 384,\n \"embed-english-v2.0\": 4096,\n \"embed-multilingual-v2.0\": 768,\n};\n\nexport class CohereEmbeddingAdapter implements EmbeddingProvider {\n private apiKey: string;\n private baseURL: string;\n private model: string;\n readonly dimensions: number;\n readonly maxBatchSize = 96;\n\n constructor(config: CohereEmbeddingConfig) {\n this.apiKey = config.apiKey;\n this.baseURL = config.baseURL ?? \"https://api.cohere.ai/v1\";\n this.model = config.model ?? \"embed-english-v3.0\";\n this.dimensions = DIMENSIONS[this.model] ?? 1024;\n }\n\n async embed(texts: string[]): Promise<number[][]> {\n if (texts.length === 0) return [];\n if (texts.length > this.maxBatchSize) {\n throw new MemStackError(\"VALIDATION_ERROR\", `Cohere max ${this.maxBatchSize} texts per batch, got ${texts.length}`);\n }\n\n try {\n const response = await fetch(`${this.baseURL}/embed`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model: this.model,\n texts,\n input_type: \"search_document\",\n embedding_types: [\"float\"],\n }),\n });\n\n if (!response.ok) {\n const err = await response.text();\n throw new MemStackError(\"EMBEDDING_ERROR\", `Cohere Embedding error: ${response.status} ${err}`, {\n retryable: response.status >= 500,\n });\n }\n\n const data = (await response.json()) as {\n embeddings: { float?: number[][] };\n };\n\n return data.embeddings?.float ?? [];\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n throw new MemStackError(\n \"EMBEDDING_ERROR\",\n `Cohere embedding request failed: ${err instanceof Error ? err.message : String(err)}`,\n { retryable: true }\n );\n }\n }\n}\n","import type { LLMProvider } from \"../../interfaces.js\";\nimport { MemStackError } from \"../../errors.js\";\n\nexport interface OllamaLLMConfig {\n /** Ollama server URL. Default: \"http://localhost:11434\" */\n baseURL?: string;\n /** Default model name. Default: \"llama3.2\" */\n defaultModel?: string;\n /** Default temperature. Default: 0.7 */\n defaultTemperature?: number;\n /** Default max tokens. Default: 1024 */\n defaultMaxTokens?: number;\n}\n\nexport class OllamaLLMAdapter implements LLMProvider {\n private baseURL: string;\n private defaultModel: string;\n private defaultTemperature: number;\n private defaultMaxTokens: number;\n\n constructor(config: OllamaLLMConfig = {}) {\n this.baseURL = config.baseURL ?? \"http://localhost:11434\";\n this.defaultModel = config.defaultModel ?? \"llama3.2\";\n this.defaultTemperature = config.defaultTemperature ?? 0.7;\n this.defaultMaxTokens = config.defaultMaxTokens ?? 1024;\n }\n\n async complete(request: {\n system: string;\n user: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n }): Promise<{ text: string; tokens: { prompt: number; completion: number; total: number } }> {\n const model = request.model ?? this.defaultModel;\n const temperature = request.temperature ?? this.defaultTemperature;\n const maxTokens = request.maxTokens ?? this.defaultMaxTokens;\n\n try {\n const response = await fetch(`${this.baseURL}/api/chat`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n model,\n messages: [\n { role: \"system\", content: request.system },\n { role: \"user\", content: request.user },\n ],\n options: { temperature, num_predict: maxTokens },\n stream: false,\n }),\n });\n\n if (!response.ok) {\n const err = await response.text();\n throw new MemStackError(\"LLM_ERROR\", `Ollama API error: ${response.status} ${err}`, {\n retryable: response.status >= 500,\n });\n }\n\n const data = (await response.json()) as {\n message?: { content: string };\n prompt_eval_count?: number;\n eval_count?: number;\n };\n\n const promptTokens = data.prompt_eval_count ?? 0;\n const completionTokens = data.eval_count ?? 0;\n\n return {\n text: data.message?.content ?? \"\",\n tokens: {\n prompt: promptTokens,\n completion: completionTokens,\n total: promptTokens + completionTokens,\n },\n };\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n throw new MemStackError(\"LLM_ERROR\", `Ollama request failed: ${err instanceof Error ? err.message : String(err)}`, {\n retryable: true,\n });\n }\n }\n}\n","import type { LLMProvider } from \"../../interfaces.js\";\nimport { MemStackError } from \"../../errors.js\";\n\nexport interface GroqLLMConfig {\n /** Groq API key */\n apiKey: string;\n /** Base URL. Default: \"https://api.groq.com/openai/v1\" */\n baseURL?: string;\n /** Default model. Default: \"llama-3.3-70b-versatile\" */\n defaultModel?: string;\n /** Default temperature. Default: 0.7 */\n defaultTemperature?: number;\n /** Default max tokens. Default: 1024 */\n defaultMaxTokens?: number;\n}\n\nexport class GroqLLMAdapter implements LLMProvider {\n private apiKey: string;\n private baseURL: string;\n private defaultModel: string;\n private defaultTemperature: number;\n private defaultMaxTokens: number;\n\n constructor(config: GroqLLMConfig) {\n this.apiKey = config.apiKey;\n this.baseURL = config.baseURL ?? \"https://api.groq.com/openai/v1\";\n this.defaultModel = config.defaultModel ?? \"llama-3.3-70b-versatile\";\n this.defaultTemperature = config.defaultTemperature ?? 0.7;\n this.defaultMaxTokens = config.defaultMaxTokens ?? 1024;\n }\n\n async complete(request: {\n system: string;\n user: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n }): Promise<{ text: string; tokens: { prompt: number; completion: number; total: number } }> {\n const model = request.model ?? this.defaultModel;\n const temperature = request.temperature ?? this.defaultTemperature;\n const maxTokens = request.maxTokens ?? this.defaultMaxTokens;\n\n try {\n const response = await fetch(`${this.baseURL}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model,\n messages: [\n { role: \"system\", content: request.system },\n { role: \"user\", content: request.user },\n ],\n temperature,\n max_tokens: maxTokens,\n }),\n });\n\n if (!response.ok) {\n const err = await response.text();\n throw new MemStackError(\"LLM_ERROR\", `Groq API error: ${response.status} ${err}`, {\n retryable: response.status >= 500,\n });\n }\n\n const data = (await response.json()) as {\n choices: { message: { content: string } }[];\n usage?: { prompt_tokens: number; completion_tokens: number; total_tokens: number };\n };\n\n return {\n text: data.choices[0]?.message?.content ?? \"\",\n tokens: {\n prompt: data.usage?.prompt_tokens ?? 0,\n completion: data.usage?.completion_tokens ?? 0,\n total: data.usage?.total_tokens ?? 0,\n },\n };\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n throw new MemStackError(\"LLM_ERROR\", `Groq request failed: ${err instanceof Error ? err.message : String(err)}`, {\n retryable: true,\n });\n }\n }\n\n async *completeStream(request: {\n system: string;\n user: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n }): AsyncIterable<{ text: string; tokens: { prompt: number; completion: number; total: number } }> {\n const model = request.model ?? this.defaultModel;\n const temperature = request.temperature ?? this.defaultTemperature;\n const maxTokens = request.maxTokens ?? this.defaultMaxTokens;\n\n let response: Response;\n try {\n response = await fetch(`${this.baseURL}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model,\n messages: [\n { role: \"system\", content: request.system },\n { role: \"user\", content: request.user },\n ],\n temperature,\n max_tokens: maxTokens,\n stream: true,\n stream_options: { include_usage: true },\n }),\n });\n } catch (err) {\n throw new MemStackError(\"LLM_ERROR\", `Groq streaming request failed: ${err instanceof Error ? err.message : String(err)}`, {\n retryable: true,\n });\n }\n\n if (!response.ok) {\n const err = await response.text();\n throw new MemStackError(\"LLM_ERROR\", `Groq streaming error: ${response.status} ${err}`, {\n retryable: response.status >= 500,\n });\n }\n\n const reader = response.body?.getReader();\n if (!reader) throw new MemStackError(\"LLM_ERROR\", \"No response body for streaming\");\n\n const decoder = new TextDecoder();\n let buffer = \"\";\n let promptTokens = 0;\n let completionTokens = 0;\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || !trimmed.startsWith(\"data: \")) continue;\n const data = trimmed.slice(6);\n if (data === \"[DONE]\") continue;\n\n try {\n const parsed = JSON.parse(data) as {\n choices?: { delta?: { content?: string } }[];\n usage?: { prompt_tokens: number; completion_tokens: number; total_tokens: number };\n x_groq?: { usage?: { prompt_tokens: number; completion_tokens: number; total_tokens: number } };\n };\n\n const content = parsed.choices?.[0]?.delta?.content ?? \"\";\n const usage = parsed.usage ?? parsed.x_groq?.usage;\n if (usage) {\n promptTokens = usage.prompt_tokens;\n completionTokens = usage.completion_tokens;\n }\n\n if (content || usage) {\n yield {\n text: content,\n tokens: { prompt: promptTokens, completion: completionTokens, total: promptTokens + completionTokens },\n };\n }\n } catch {\n // Skip unparseable chunks\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/memory/Summarizer.ts","../src/memory/Pruner.ts","../src/memory/ContextCompiler.ts","../src/memory/MemoryStore.ts","../src/adapters/storage/memory.ts","../src/client.ts","../src/adapters/storage/disk.ts","../src/adapters/storage/markdown.ts","../src/adapters/storage/hybrid.ts","../src/adapters/storage/postgres.ts","../src/adapters/storage/redis.ts","../src/adapters/storage/qdrant.ts","../src/adapters/storage/neo4j.ts","../src/adapters/storage/weaviate.ts","../src/adapters/storage/lancedb.ts","../src/adapters/storage/mongodb.ts","../src/adapters/storage/sqlite.ts","../src/adapters/llm/openai.ts","../src/adapters/llm/anthropic.ts","../src/adapters/embedding/openai.ts","../src/adapters/embedding/cohere.ts","../src/adapters/llm/ollama.ts","../src/adapters/llm/groq.ts"],"names":["mkdir","join","readFile","writeFile","rename","unlink","open","stat","readdir","appendFile","vector","results","points","filters","result","objects"],"mappings":"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","file":"index.cjs","sourcesContent":["export type MemStackErrorCode =\n | \"STORAGE_ERROR\"\n | \"EMBEDDING_ERROR\"\n | \"LLM_ERROR\"\n | \"VALIDATION_ERROR\"\n | \"NOT_FOUND\"\n | \"CONFIG_ERROR\";\n\nexport class MemStackError extends Error {\n code: MemStackErrorCode;\n retryable: boolean;\n details?: Record<string, unknown>;\n\n constructor(\n code: MemStackErrorCode,\n message: string,\n options: { retryable?: boolean; details?: Record<string, unknown> } = {}\n ) {\n super(message);\n this.name = \"MemStackError\";\n this.code = code;\n this.retryable = options.retryable ?? false;\n this.details = options.details;\n }\n}\n\nexport function notFound(entity: string, id: string): MemStackError {\n return new MemStackError(\"NOT_FOUND\", `${entity} not found: ${id}`, {\n retryable: false,\n details: { entity, id },\n });\n}\n\nexport function validationError(message: string, details?: Record<string, unknown>): MemStackError {\n return new MemStackError(\"VALIDATION_ERROR\", message, { details });\n}\n\nexport function storageError(message: string, cause?: unknown): MemStackError {\n return new MemStackError(\"STORAGE_ERROR\", message, {\n retryable: true,\n details: { cause: cause instanceof Error ? cause.message : String(cause) },\n });\n}\n\nexport function configError(message: string): MemStackError {\n return new MemStackError(\"CONFIG_ERROR\", message, { retryable: false });\n}\n","import type { LLMProvider } from \"../interfaces.js\";\nimport type { Memory } from \"../types.js\";\nimport type { SummarizeOptions } from \"../interfaces.js\";\nimport { MemStackError } from \"../errors.js\";\n\nexport class Summarizer {\n private llm: LLMProvider;\n private defaultPrompt: string;\n\n constructor(llm: LLMProvider, defaultPrompt?: string) {\n this.llm = llm;\n this.defaultPrompt = defaultPrompt ??\n \"You are a memory summarizer. Condense the following list of memories into a single, concise summary paragraph that captures the key events, emotional tone, and important details. Write in third person past tense.\";\n }\n\n async summarize(\n memories: Memory[],\n options: SummarizeOptions = {},\n promptOverride?: string\n ): Promise<{ summaryContent: string; tokenCount: number }> {\n if (memories.length === 0) {\n throw new MemStackError(\"VALIDATION_ERROR\", \"No memories to summarize\");\n }\n\n const chunkSize = options.chunkSize ?? 50;\n if (memories.length > chunkSize) {\n return this._summarizeChunked(memories, options, promptOverride);\n }\n\n const sorted = [...memories].sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n const memoryTexts = sorted.map((m) => `[${m.createdAt.toISOString()}] ${m.content}`);\n\n const system = promptOverride ?? this.defaultPrompt;\n const user = memoryTexts.join(\"\\n\\n\");\n\n try {\n const response = await this.llm.complete({ system, user });\n return {\n summaryContent: response.text.trim(),\n tokenCount: response.tokens.total,\n };\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n throw new MemStackError(\n \"LLM_ERROR\",\n `Summarization failed: ${err instanceof Error ? err.message : String(err)}`,\n { retryable: true, details: { cause: err instanceof Error ? err.message : String(err) } }\n );\n }\n }\n\n private async _summarizeChunked(\n memories: Memory[],\n options: SummarizeOptions,\n promptOverride?: string\n ): Promise<{ summaryContent: string; tokenCount: number }> {\n const chunkSize = options.chunkSize ?? 50;\n const sorted = [...memories].sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n\n const chunks: Memory[][] = [];\n for (let i = 0; i < sorted.length; i += chunkSize) {\n chunks.push(sorted.slice(i, i + chunkSize));\n }\n\n let totalTokens = 0;\n\n const chunkSummaries: string[] = [];\n for (const chunk of chunks) {\n const memoryTexts = chunk.map((m) => `[${m.createdAt.toISOString()}] ${m.content}`);\n const system = promptOverride ?? this.defaultPrompt;\n const user = memoryTexts.join(\"\\n\\n\");\n\n try {\n const response = await this.llm.complete({ system, user });\n chunkSummaries.push(response.text.trim());\n totalTokens += response.tokens.total;\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n throw new MemStackError(\n \"LLM_ERROR\",\n `Chunked summarization failed: ${err instanceof Error ? err.message : String(err)}`,\n { retryable: true, details: { cause: err instanceof Error ? err.message : String(err) } }\n );\n }\n }\n\n if (chunkSummaries.length === 1) {\n return { summaryContent: chunkSummaries[0], tokenCount: totalTokens };\n }\n\n const summaryMemories: Memory[] = chunkSummaries.map((content, i) => ({\n id: `_chunk_summary_${i}`,\n actorId: sorted[0].actorId,\n memoryType: \"summary\" as const,\n content,\n importance: 0.5,\n emotionalValence: 0,\n tags: [\"summary\"],\n createdAt: sorted[sorted.length - 1].createdAt,\n }));\n\n const merged = await this._summarizeChunked(summaryMemories, options, promptOverride);\n return {\n summaryContent: merged.summaryContent,\n tokenCount: totalTokens + merged.tokenCount,\n };\n }\n\n async *summarizeStream(\n memories: Memory[],\n options: SummarizeOptions = {},\n promptOverride?: string\n ): AsyncIterable<{ chunk: string; text: string }> {\n if (memories.length === 0) {\n throw new MemStackError(\"VALIDATION_ERROR\", \"No memories to summarize\");\n }\n if (!this.llm.completeStream) {\n const result = await this.summarize(memories, options, promptOverride);\n yield { chunk: result.summaryContent, text: result.summaryContent };\n return;\n }\n\n const chunkSize = options.chunkSize ?? 50;\n let toSummarize = memories;\n if (memories.length > chunkSize) {\n const chunked = await this._summarizeChunked(memories, options, promptOverride);\n toSummarize = [{ id: \"_chunked\", actorId: \"summarizer\", memoryType: \"summary\", content: chunked.summaryContent, importance: 0.5, emotionalValence: 0, tags: [], createdAt: new Date() }];\n }\n\n const sorted = [...toSummarize].sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n const memoryTexts = sorted.map((m) => `[${m.createdAt.toISOString()}] ${m.content}`);\n const system = promptOverride ?? this.defaultPrompt;\n const user = memoryTexts.join(\"\\n\\n\");\n\n let fullText = \"\";\n for await (const chunk of this.llm.completeStream({ system, user })) {\n fullText += chunk.text;\n yield { chunk: chunk.text, text: fullText };\n }\n }\n}\n","import type { Memory } from \"../types.js\";\nimport type { PruneStrategy } from \"../interfaces.js\";\n\nexport class Pruner {\n /** Returns memories to KEEP after applying the strategy. */\n execute(memories: Memory[], strategy: PruneStrategy): Memory[] {\n switch (strategy.type) {\n case \"byAge\":\n return this.keepByAge(memories, strategy);\n case \"byImportance\":\n return this.keepByImportance(memories, strategy);\n case \"byCount\":\n return this.keepByCount(memories, strategy);\n case \"byType\":\n return this.removeByType(memories, strategy);\n case \"custom\":\n return this.removeCustom(memories, strategy);\n case \"compose\":\n return this.keepCompose(memories, strategy);\n default:\n return memories;\n }\n }\n\n dryRun(memories: Memory[], strategy: PruneStrategy): Memory[] {\n return this.execute(memories, strategy);\n }\n\n private keepByAge(memories: Memory[], strategy: PruneStrategy): Memory[] {\n if (!strategy.maxAge) return memories;\n const cutoff = Date.now() - strategy.maxAge;\n return memories.filter((m) => m.createdAt.getTime() >= cutoff);\n }\n\n private keepByImportance(memories: Memory[], strategy: PruneStrategy): Memory[] {\n const threshold = strategy.minImportance ?? 0.5;\n return memories.filter((m) => m.importance >= threshold);\n }\n\n private keepByCount(memories: Memory[], strategy: PruneStrategy): Memory[] {\n const maxPerActor = strategy.maxPerActor ?? 100;\n const grouped = new Map<string, Memory[]>();\n for (const m of memories) {\n const list = grouped.get(m.actorId) || [];\n list.push(m);\n grouped.set(m.actorId, list);\n }\n\n const kept: Memory[] = [];\n for (const [, actorMemories] of grouped) {\n const sorted = [...actorMemories].sort((a, b) => b.importance - a.importance);\n kept.push(...sorted.slice(0, maxPerActor));\n }\n return kept;\n }\n\n /** Remove memories of specified types. Opposite of filtering — removes the matches. */\n private removeByType(memories: Memory[], strategy: PruneStrategy): Memory[] {\n if (!strategy.memoryTypes || strategy.memoryTypes.length === 0) return memories;\n return memories.filter((m) => !strategy.memoryTypes!.includes(m.memoryType));\n }\n\n /** Remove memories matching the predicate. Predicate returns true = should be removed. */\n private removeCustom(memories: Memory[], strategy: PruneStrategy): Memory[] {\n if (!strategy.shouldRemove) return memories;\n return memories.filter((m) => !strategy.shouldRemove!(m));\n }\n\n /** Apply sub-strategies cumulatively: kept memories must pass ALL. */\n private keepCompose(memories: Memory[], strategy: PruneStrategy): Memory[] {\n if (!strategy.strategies || strategy.strategies.length === 0) {\n return memories;\n }\n\n let kept = memories;\n for (const sub of strategy.strategies) {\n kept = this.execute(kept, sub);\n }\n return kept;\n }\n}\n","import type { Memory, CompiledContext } from \"../types.js\";\nimport type { ContextOptions, TokenCounter } from \"../interfaces.js\";\n\nexport class ContextCompiler {\n private tokenCounter: TokenCounter;\n private importantRatio: number;\n\n constructor(tokenCounter?: TokenCounter, importantRatio?: number) {\n this.tokenCounter = tokenCounter ?? this._heuristicTokens.bind(this);\n this.importantRatio = importantRatio ?? 0.6;\n }\n\n private _heuristicTokens(text: string): number {\n const charEst = Math.ceil(text.length / 4);\n const words = text.split(/\\s+/).filter((w) => w.length > 0);\n const wordEst = Math.ceil(words.length * 1.3);\n return Math.max(charEst, Math.max(1, wordEst));\n }\n\n private estimateTokens(text: string): number {\n return this.tokenCounter(text);\n }\n\n /**\n * Truncate text to fit within a token budget, preserving whole words.\n * Appends \"...\" when content is cut. Falls back to character-based\n * truncation for text with few/no word boundaries.\n */\n private truncateToTokens(text: string, maxTokens: number): string {\n if (this.estimateTokens(text) <= maxTokens) return text;\n\n const words = text.split(/\\s+/);\n const targetWords = Math.max(1, Math.floor(maxTokens / 1.3));\n let currentTokens = 0;\n let i = 0;\n for (; i < words.length && i < targetWords; i++) {\n currentTokens += this.estimateTokens(words[i]);\n if (currentTokens > maxTokens) break;\n }\n if (i >= words.length) return text;\n if (i > 0) return words.slice(0, i).join(\" \") + \"...\";\n\n // Single long word (e.g., JSON): fall back to character-based cut\n const charLimit = maxTokens * 4;\n return text.slice(0, charLimit) + \"...\";\n }\n\n compile(memories: Memory[], options: ContextOptions): CompiledContext {\n const maxTokens = options.maxTokens ?? 2000;\n\n const relevant = memories.filter((m) => {\n if (options.memoryTypes && options.memoryTypes.length > 0) {\n return options.memoryTypes.includes(m.memoryType);\n }\n return true;\n });\n\n const sortedRecent = [...relevant].sort(\n (a, b) => b.createdAt.getTime() - a.createdAt.getTime()\n );\n\n const sortedImportant = this.deduplicate(\n [...relevant]\n .filter((m) => m.importance >= 0.5)\n .sort((a, b) => b.importance - a.importance)\n );\n\n const { recentMemories, importantMemories, systemPrompt } =\n this.assembleTokenBudgeted(sortedRecent, sortedImportant, maxTokens);\n\n const tokenEstimate = this.estimateTokens(systemPrompt);\n\n if (options.format === \"messages\") {\n return {\n systemPrompt,\n messages: [{ role: \"system\", content: systemPrompt }],\n recentMemories,\n importantMemories,\n tokenEstimate,\n };\n }\n\n return { systemPrompt, recentMemories, importantMemories, tokenEstimate };\n }\n\n private assembleTokenBudgeted(\n recent: Memory[],\n important: Memory[],\n maxTokens: number\n ): { recentMemories: Memory[]; importantMemories: Memory[]; systemPrompt: string } {\n const includedImportant: Memory[] = [];\n const includedRecent: Memory[] = [];\n const seen = new Set<string>();\n let usedTokens = 0;\n\n // Add important memories first (signal over recency)\n for (const m of important) {\n if (seen.has(m.id)) continue;\n const prefix = `- `;\n const suffix = ` (${m.memoryType}, importance: ${m.importance.toFixed(2)})\\n`;\n const overhead = this.estimateTokens(prefix + suffix);\n let tokens = this.estimateTokens(m.content) + overhead;\n const remaining = Math.floor(maxTokens * this.importantRatio) - usedTokens;\n if (remaining <= 0) break;\n if (tokens > remaining) {\n const contentBudget = Math.max(0, remaining - overhead);\n if (contentBudget > 0) {\n const truncatedContent = this.truncateToTokens(m.content, contentBudget);\n includedImportant.push({ ...m, content: truncatedContent });\n tokens = this.estimateTokens(truncatedContent) + overhead;\n usedTokens += tokens;\n seen.add(m.id);\n }\n } else {\n includedImportant.push(m);\n usedTokens += tokens;\n seen.add(m.id);\n }\n }\n\n // Add recent memories until budget is full\n for (const m of recent) {\n if (seen.has(m.id)) continue;\n const prefix = `- `;\n const suffix = `\\n`;\n const overhead = this.estimateTokens(prefix + suffix);\n let tokens = this.estimateTokens(m.content) + overhead;\n const remaining = maxTokens - usedTokens;\n if (remaining <= 0) break;\n if (tokens > remaining) {\n const contentBudget = Math.max(0, remaining - overhead);\n if (contentBudget > 0) {\n const truncatedContent = this.truncateToTokens(m.content, contentBudget);\n includedRecent.push({ ...m, content: truncatedContent });\n tokens = this.estimateTokens(truncatedContent) + overhead;\n usedTokens += tokens;\n seen.add(m.id);\n }\n } else {\n includedRecent.push(m);\n usedTokens += tokens;\n seen.add(m.id);\n }\n }\n\n const parts: string[] = [];\n if (includedImportant.length > 0) {\n parts.push(\"## Important Memories\");\n for (const m of includedImportant) {\n parts.push(`- ${m.content} (${m.memoryType}, importance: ${m.importance.toFixed(2)})`);\n }\n }\n if (includedRecent.length > 0) {\n parts.push(\"\\n## Recent Interactions\");\n for (const m of includedRecent) {\n parts.push(`- ${m.content}`);\n }\n }\n\n return { recentMemories: includedRecent, importantMemories: includedImportant, systemPrompt: parts.join(\"\\n\") };\n }\n\n private deduplicate(memories: Memory[]): Memory[] {\n const seen = new Set<string>();\n const result: Memory[] = [];\n for (const m of memories) {\n const key = m.content.toLowerCase().trim();\n if (!seen.has(key)) {\n seen.add(key);\n result.push(m);\n }\n }\n return result;\n }\n}\n","import type { Memory, CompiledContext, MemoryStats } from \"../types.js\";\nimport type {\n StorageProvider,\n EmbeddingProvider,\n LLMProvider,\n MemoryStoreInput,\n MemoryRetrieveQuery,\n MemoryCountFilter,\n ContextOptions,\n SummarizeOptions,\n PruneStrategy,\n TokenCounter,\n} from \"../interfaces.js\";\nimport { Summarizer } from \"./Summarizer.js\";\nimport { Pruner } from \"./Pruner.js\";\nimport { ContextCompiler } from \"./ContextCompiler.js\";\nimport { notFound, validationError } from \"../errors.js\";\n\nexport interface MemoryStoreConfig {\n storage: StorageProvider;\n embedding?: EmbeddingProvider;\n llm?: LLMProvider;\n embedOnStore?: boolean;\n summarizationPrompt?: string;\n tokenCounter?: TokenCounter;\n contextImportantRatio?: number;\n limits?: {\n dedupScan?: number;\n contextScan?: number;\n summarizeScan?: number;\n pruneScan?: number;\n exportScan?: number;\n purgeScan?: number;\n };\n}\n\nexport class MemoryStore {\n private storage: StorageProvider;\n private embedding?: EmbeddingProvider;\n private summarizer?: Summarizer;\n private pruner: Pruner;\n private compiler: ContextCompiler;\n private embedOnStore: boolean;\n private limits: Required<NonNullable<MemoryStoreConfig[\"limits\"]>>;\n private contentHashIndex: Map<string, string> | null = null;\n private initialized = false;\n\n private async _ensureInit(): Promise<void> {\n if (!this.initialized) {\n await this.storage.initialize();\n this.initialized = true;\n }\n }\n\n constructor(config: MemoryStoreConfig) {\n this.storage = config.storage;\n this.embedding = config.embedding;\n this.embedOnStore = config.embedOnStore ?? true;\n if (config.llm) {\n this.summarizer = new Summarizer(config.llm, config.summarizationPrompt);\n }\n this.pruner = new Pruner();\n this.compiler = new ContextCompiler(config.tokenCounter, config.contextImportantRatio);\n this.limits = {\n dedupScan: 1000,\n contextScan: 50,\n summarizeScan: 1000,\n pruneScan: 10000,\n exportScan: 100000,\n purgeScan: 100000,\n ...config.limits,\n };\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n await this._ensureInit();\n if (input.onConflict === \"append\") {\n await this._ensureHashIndex();\n const hash = this._hashContent(input.actorId, input.content);\n const existingId = this.contentHashIndex!.get(hash);\n if (existingId) {\n const match = await this.storage.get(existingId);\n if (match) {\n const mergedTags = [...new Set([...(match.tags ?? []), ...(input.tags ?? [])])];\n const updated = await this.storage.store({\n id: match.id,\n actorId: match.actorId,\n content: match.content,\n memoryType: match.memoryType,\n importance: input.importance ?? match.importance,\n emotionalValence: input.emotionalValence ?? match.emotionalValence,\n tags: mergedTags,\n embedding: match.embedding,\n sourceId: input.sourceId ?? match.sourceId,\n metadata: { ...match.metadata, ...input.metadata },\n expiresAt: input.expiresAt ?? match.expiresAt,\n });\n this.contentHashIndex!.set(hash, updated.id);\n return updated;\n }\n }\n }\n\n let withEmbedding = input;\n if (this.embedding && this.embedOnStore) {\n const embeddings = await this.embedding.embed([input.content]);\n withEmbedding = { ...input, embedding: embeddings[0] };\n }\n const { onConflict: _, ...clean } = withEmbedding;\n const memory = await this.storage.store(clean);\n if (this.contentHashIndex !== null) {\n const hash = this._hashContent(memory.actorId, memory.content);\n this.contentHashIndex.set(hash, memory.id);\n }\n return memory;\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n await this._ensureInit();\n const appendInputs = inputs.filter((i) => i.onConflict === \"append\");\n const normalInputs = inputs.filter((i) => i.onConflict !== \"append\");\n\n const results: Memory[] = [];\n\n for (const input of appendInputs) {\n results.push(await this.store(input));\n }\n\n if (normalInputs.length === 0) return results;\n\n let stored: Memory[];\n if (this.embedding && this.embedOnStore) {\n const enrichedResults: Memory[] = [];\n const batchSize = this.embedding.maxBatchSize ?? 2048;\n for (let i = 0; i < normalInputs.length; i += batchSize) {\n const batch = normalInputs.slice(i, i + batchSize);\n const texts = batch.map((inp) => inp.content);\n const embeddings = await this.embedding!.embed(texts);\n const enriched = batch.map((input, j) => ({ ...input, embedding: embeddings[j] }));\n const batchResults = await this.storage.storeBatch(enriched);\n enrichedResults.push(...batchResults);\n }\n stored = enrichedResults;\n } else {\n stored = await this.storage.storeBatch(normalInputs);\n }\n\n if (this.contentHashIndex !== null) {\n for (const mem of stored) {\n const hash = this._hashContent(mem.actorId, mem.content);\n this.contentHashIndex.set(hash, mem.id);\n }\n }\n\n results.push(...stored);\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n await this._ensureInit();\n return this.storage.get(id);\n }\n\n async delete(id: string): Promise<void> {\n await this._ensureInit();\n return this.storage.delete(id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n await this._ensureInit();\n return this.storage.deleteMany(ids);\n }\n\n async touch(id: string): Promise<void> {\n await this._ensureInit();\n const memory = await this.storage.get(id);\n if (!memory) throw notFound(\"Memory\", id);\n if (this.storage.touch) {\n return this.storage.touch(id);\n }\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n await this._ensureInit();\n return this.storage.count(filter);\n }\n\n async retrieve(query: MemoryRetrieveQuery): Promise<Memory[]> {\n await this._ensureInit();\n let embedding: number[] | undefined;\n if (this.embedding && query.query && (query.strategy === \"semantic\" || query.strategy === \"hybrid\")) {\n const vecs = await this.embedding.embed([query.query]);\n embedding = vecs[0];\n }\n let results = await this.storage.retrieve(query, embedding);\n if (query.createdAfter) {\n results = results.filter((m) => m.createdAt >= query.createdAfter!);\n }\n if (query.createdBefore) {\n results = results.filter((m) => m.createdAt <= query.createdBefore!);\n }\n return results;\n }\n\n async compileContext(options: ContextOptions): Promise<CompiledContext> {\n await this._ensureInit();\n const maxTokens = options.maxTokens ?? 2000;\n const memories = await this.storage.retrieve({\n actorId: options.actorId,\n limit: this.limits.contextScan,\n strategy: options.retrieveStrategy,\n });\n return this.compiler.compile(memories, { ...options, maxTokens });\n }\n\n async summarize(\n options: SummarizeOptions,\n onError?: (err: Error) => void\n ): Promise<{ summary: Memory; deletedCount: number }> {\n await this._ensureInit();\n if (!this.summarizer) {\n throw validationError(\"No LLM configured for summarization\");\n }\n\n const allMemories = await this.storage.retrieve({\n actorId: options.actorId,\n memoryTypes: options.memoryTypes ?? [\"interaction\"],\n limit: this.limits.summarizeScan,\n strategy: \"recent\",\n });\n\n let toSummarize = allMemories;\n if (options.olderThan) {\n toSummarize = toSummarize.filter((m) => m.createdAt < options.olderThan!);\n }\n if (options.skipMostRecent) {\n const sorted = [...toSummarize].sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n toSummarize = sorted.slice(0, Math.max(0, sorted.length - options.skipMostRecent));\n }\n if (options.targetCount && toSummarize.length > options.targetCount) {\n const sorted = [...toSummarize].sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n toSummarize = sorted.slice(0, options.targetCount);\n }\n\n if (toSummarize.length === 0) {\n throw validationError(\"No memories to summarize\");\n }\n\n let summaryContent: string;\n try {\n const result = await this.summarizer.summarize(toSummarize, options, options.prompt);\n summaryContent = result.summaryContent;\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error(String(err)));\n throw err;\n }\n\n const summary: Memory = await this.storage.store({\n actorId: options.actorId ?? toSummarize[0].actorId,\n content: summaryContent,\n memoryType: \"summary\",\n importance: Math.max(...toSummarize.map((m) => m.importance)),\n emotionalValence:\n toSummarize.reduce((sum, m) => sum + m.emotionalValence, 0) / toSummarize.length,\n tags: [\"summary\"],\n sourceId: toSummarize[0].id,\n });\n\n let deletedCount = 0;\n if (!options.keepOriginals) {\n const ids = toSummarize.map((m) => m.id);\n deletedCount = await this.storage.deleteMany(ids);\n }\n\n return { summary, deletedCount };\n }\n\n async *summarizeStream(options: SummarizeOptions): AsyncIterable<{ chunk: string; text: string }> {\n await this._ensureInit();\n if (!this.summarizer) {\n throw validationError(\"No LLM configured for summarization\");\n }\n\n const allMemories = await this.storage.retrieve({\n actorId: options.actorId,\n memoryTypes: options.memoryTypes ?? [\"interaction\"],\n limit: this.limits.summarizeScan,\n strategy: \"recent\",\n });\n\n let toSummarize = allMemories;\n if (options.olderThan) {\n toSummarize = toSummarize.filter((m) => m.createdAt < options.olderThan!);\n }\n if (options.skipMostRecent) {\n const sorted = [...toSummarize].sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n toSummarize = sorted.slice(0, Math.max(0, sorted.length - options.skipMostRecent));\n }\n if (options.targetCount && toSummarize.length > options.targetCount) {\n const sorted = [...toSummarize].sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n toSummarize = sorted.slice(0, options.targetCount);\n }\n\n if (toSummarize.length === 0) {\n throw validationError(\"No memories to summarize\");\n }\n\n yield* this.summarizer.summarizeStream(toSummarize, options, options.prompt);\n }\n\n async prune(strategy: PruneStrategy): Promise<{ pruned: string[]; count: number }> {\n await this._ensureInit();\n const allMemories = await this.storage.retrieve({ actorId: strategy.actorId, limit: this.limits.pruneScan });\n const kept = this.pruner.execute(allMemories, strategy);\n const keptIds = new Set(kept.map((k) => k.id));\n const prunedIds = allMemories.filter((m) => !keptIds.has(m.id)).map((m) => m.id);\n let count = 0;\n if (prunedIds.length > 0) {\n count = await this.storage.deleteMany(prunedIds);\n }\n return { pruned: prunedIds, count };\n }\n\n async dryRunPrune(strategy: PruneStrategy): Promise<{ wouldPrune: string[]; count: number }> {\n await this._ensureInit();\n const allMemories = await this.storage.retrieve({ actorId: strategy.actorId, limit: this.limits.pruneScan });\n const kept = this.pruner.execute(allMemories, strategy);\n const keptIds = new Set(kept.map((k) => k.id));\n const wouldPrune = allMemories.filter((m) => !keptIds.has(m.id)).map((m) => m.id);\n return { wouldPrune, count: wouldPrune.length };\n }\n\n async export(actorId?: string): Promise<Memory[]> {\n await this._ensureInit();\n return this.storage.retrieve({ actorId, limit: this.limits.exportScan });\n }\n\n async stats(actorId?: string): Promise<MemoryStats> {\n await this._ensureInit();\n const memories = await this.storage.retrieve({ actorId, limit: this.limits.exportScan });\n const now = new Date();\n const byType: Record<string, number> = {};\n const byActor: Record<string, { count: number; oldest: Date; newest: Date; totalImportance: number }> = {};\n let totalImportance = 0;\n let expired = 0;\n let oldest: Date | null = null;\n let newest: Date | null = null;\n\n for (const m of memories) {\n totalImportance += m.importance;\n byType[m.memoryType] = (byType[m.memoryType] ?? 0) + 1;\n\n const actor = byActor[m.actorId] ?? { count: 0, oldest: m.createdAt, newest: m.createdAt, totalImportance: 0 };\n actor.count++;\n actor.totalImportance += m.importance;\n if (m.createdAt < actor.oldest) actor.oldest = m.createdAt;\n if (m.createdAt > actor.newest) actor.newest = m.createdAt;\n byActor[m.actorId] = actor;\n\n if (m.expiresAt && m.expiresAt <= now) expired++;\n if (!oldest || m.createdAt < oldest) oldest = m.createdAt;\n if (!newest || m.createdAt > newest) newest = m.createdAt;\n }\n\n const byActorFinal: MemoryStats[\"byActor\"] = {};\n for (const [id, a] of Object.entries(byActor)) {\n byActorFinal[id] = { count: a.count, oldest: a.oldest, newest: a.newest, avgImportance: a.totalImportance / a.count };\n }\n\n return {\n total: memories.length,\n expired,\n oldest,\n newest,\n avgImportance: memories.length > 0 ? totalImportance / memories.length : 0,\n byType: byType as Record<string, number>,\n byActor: byActorFinal,\n };\n }\n\n async purgeActor(actorId: string): Promise<number> {\n await this._ensureInit();\n const memories = await this.storage.retrieve({ actorId, limit: this.limits.purgeScan ?? 100000 });\n if (memories.length === 0) return 0;\n return this.storage.deleteMany(memories.map((m) => m.id));\n }\n\n async merge(ids: string[]): Promise<Memory> {\n await this._ensureInit();\n if (ids.length < 2) throw validationError(\"merge requires at least 2 memory IDs\");\n\n const memories: Memory[] = [];\n for (const id of ids) {\n const m = await this.storage.get(id);\n if (m) memories.push(m);\n }\n if (memories.length < 2) throw validationError(\"At least 2 of the provided IDs must exist\");\n\n const sorted = memories.sort((a, b) => b.importance - a.importance);\n const winner = sorted[0];\n const rest = sorted.slice(1);\n\n const mergedContent = [\n winner.content,\n \"\",\n \"--- merged from \" + rest.length + \" related memories ---\",\n ...rest.map((m) => \"- \" + m.content),\n ].join(\"\\n\");\n\n const mergedTags = [...new Set(memories.flatMap((m) => m.tags))];\n const mergedMetadata = {\n ...winner.metadata,\n mergedFrom: rest.map((m) => m.id),\n };\n\n const updated = await this.storage.store({\n id: winner.id,\n actorId: winner.actorId,\n content: mergedContent,\n memoryType: winner.memoryType,\n importance: winner.importance,\n emotionalValence: winner.emotionalValence,\n tags: mergedTags,\n embedding: winner.embedding,\n sourceId: winner.sourceId,\n metadata: mergedMetadata,\n expiresAt: winner.expiresAt,\n });\n\n await this.storage.deleteMany(rest.map((m) => m.id));\n\n return updated;\n }\n\n private async _ensureHashIndex(): Promise<void> {\n if (this.contentHashIndex !== null) return;\n this.contentHashIndex = new Map();\n const existing = await this.storage.retrieve({ limit: this.limits.dedupScan });\n for (const m of existing) {\n const hash = this._hashContent(m.actorId, m.content);\n this.contentHashIndex.set(hash, m.id);\n }\n }\n\n private _hashContent(actorId: string, content: string): string {\n const normalized = `${actorId}::${content.toLowerCase().trim()}`;\n let hash = 14695981039346656037n;\n for (let i = 0; i < normalized.length; i++) {\n hash ^= BigInt(normalized.charCodeAt(i));\n hash *= 1099511628211n;\n }\n return hash.toString(36);\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { notFound } from \"../../errors.js\";\n\ninterface MemoryRecord extends Memory {\n _touchedAt: Date;\n}\n\nexport class InMemoryStorageAdapter implements StorageProvider {\n private memories: Map<string, MemoryRecord> = new Map();\n\n async initialize(): Promise<void> {}\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const memory: MemoryRecord = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n _touchedAt: now,\n };\n this.memories.set(memory.id, memory);\n return memory;\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const memory = this.memories.get(id);\n if (!memory) return null;\n if (memory.expiresAt && memory.expiresAt <= new Date()) {\n this.memories.delete(id);\n return null;\n }\n return memory;\n }\n\n async delete(id: string): Promise<void> {\n if (!this.memories.has(id)) throw notFound(\"Memory\", id);\n this.memories.delete(id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n let count = 0;\n for (const id of ids) {\n if (this.memories.has(id)) {\n this.memories.delete(id);\n count++;\n }\n }\n return count;\n }\n\n async retrieve(query: MemoryRetrieveQuery, _embedding?: number[]): Promise<Memory[]> {\n let results = Array.from(this.memories.values());\n\n // Filter out expired\n const now = new Date();\n results = results.filter((m) => !m.expiresAt || m.expiresAt > now);\n\n if (query.actorId) {\n results = results.filter((m) => m.actorId === query.actorId);\n }\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n results = results.filter((m) => query.memoryTypes!.includes(m.memoryType));\n }\n if (query.tags && query.tags.length > 0) {\n results = results.filter((m) => m.tags?.some((t) => query.tags!.includes(t)));\n }\n if (query.query) {\n const terms = query.query.toLowerCase().split(/\\s+/).filter(Boolean);\n results = results.filter((m) => {\n const content = m.content.toLowerCase();\n return terms.some((t) => content.includes(t));\n });\n }\n if (query.createdAfter) {\n results = results.filter((m) => m.createdAt >= query.createdAfter!);\n }\n if (query.createdBefore) {\n results = results.filter((m) => m.createdAt <= query.createdBefore!);\n }\n\n switch (query.strategy) {\n case \"recent\":\n results.sort((a, b) => b._touchedAt.getTime() - a._touchedAt.getTime());\n break;\n case \"important\":\n results.sort((a, b) => b.importance - a.importance);\n break;\n case \"hybrid\":\n case \"semantic\":\n default:\n results.sort((a, b) => b.importance - a.importance || b._touchedAt.getTime() - a._touchedAt.getTime());\n break;\n }\n\n // Touch records on retrieval (for recency tracking in context assembly)\n for (const r of results.slice(0, query.limit ?? 10)) {\n r._touchedAt = new Date();\n }\n\n const limit = query.limit ?? 10;\n return results.slice(0, limit);\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const now = new Date();\n let results = Array.from(this.memories.values())\n .filter((m) => !m.expiresAt || m.expiresAt > now);\n\n if (filter?.actorId) {\n results = results.filter((m) => m.actorId === filter.actorId);\n }\n if (filter?.memoryType) {\n results = results.filter((m) => m.memoryType === filter.memoryType);\n }\n if (filter?.minImportance !== undefined) {\n results = results.filter((m) => m.importance >= filter.minImportance!);\n }\n return results.length;\n }\n\n async touch(id: string): Promise<void> {\n const memory = this.memories.get(id);\n if (!memory) throw notFound(\"Memory\", id);\n memory._touchedAt = new Date();\n }\n\n async close(): Promise<void> {\n this.memories.clear();\n }\n\n getAllMemories(): Memory[] {\n return Array.from(this.memories.values());\n }\n}\n","import type { Memory, ProcessResult, MemStackSnapshot, HealthStatus } from \"./types.js\";\nimport type { MemStackConfig, ProcessInput, MemoryStoreInput, StorageProvider } from \"./interfaces.js\";\nimport { MemoryStore } from \"./memory/MemoryStore.js\";\nimport { InMemoryStorageAdapter } from \"./adapters/storage/memory.js\";\nimport { configError, validationError } from \"./errors.js\";\n\nexport class MemStack {\n readonly memory: MemoryStore;\n\n private config: MemStackConfig;\n private storage: StorageProvider;\n private processCounts = new Map<string, number>();\n private pruneCheckCount = 0;\n\n constructor(config: MemStackConfig) {\n if (!config.llm) {\n throw configError(\"LLM provider is required\");\n }\n\n this.config = config;\n this.storage = config.storage ?? new InMemoryStorageAdapter();\n\n this.memory = new MemoryStore({\n storage: this.storage,\n embedding: config.embedding,\n llm: config.llm,\n embedOnStore: config.defaults?.embedOnStore ?? true,\n summarizationPrompt: config.defaults?.summarizationPrompt,\n });\n }\n\n async process(input: ProcessInput): Promise<ProcessResult> {\n // Auto-enrichment: importance + tags via LLM when not provided\n let importance = input.importance;\n let tags = input.tags;\n\n const needImportance = importance === undefined && this.config.defaults?.autoImportance;\n const needTags = (!tags || tags.length === 0) && this.config.defaults?.autoTags;\n\n if (needImportance || needTags) {\n try {\n if (needImportance && needTags) {\n // Batch both into one LLM call\n const result = await this.config.llm.complete({\n system:\n \"Analyze the memory and respond with a JSON object: {\\\"importance\\\": <0.0-1.0>, \\\"tags\\\": [<array of 1-5 lowercase single-word tags>]}. Return ONLY the JSON, nothing else.\",\n user: input.content,\n maxTokens: 100,\n temperature: 0,\n });\n const parsed = this._parseEnrichmentJson(result.text);\n if (parsed.importance !== undefined) importance = parsed.importance;\n if (parsed.tags) tags = parsed.tags;\n } else if (needImportance) {\n const result = await this.config.llm.complete({\n system:\n \"Rate the importance of the following memory for an AI agent on a scale of 0.0 to 1.0, where 0.0 is trivial and 1.0 is critical. Return ONLY a single float number, nothing else.\",\n user: input.content,\n maxTokens: 10,\n temperature: 0,\n });\n const parsed = parseFloat(result.text.trim());\n importance = Number.isFinite(parsed) ? Math.max(0, Math.min(1, parsed)) : 0.5;\n } else if (needTags) {\n const result = await this.config.llm.complete({\n system:\n \"Extract 1-5 concise, lowercase, single-word tags from the following memory. Return ONLY a JSON array of strings, nothing else. Example: [\\\"combat\\\", \\\"goblin\\\", \\\"forest\\\"]\",\n user: input.content,\n maxTokens: 80,\n temperature: 0,\n });\n tags = this._parseTagsJson(result.text);\n }\n } catch (err) {\n this.config.hooks?.onError?.(\n err instanceof Error ? err : new Error(String(err)),\n \"auto-enrich\"\n );\n if (importance === undefined) importance = 0.5;\n if (!tags) tags = [];\n }\n }\n\n const memoryInput: MemoryStoreInput = {\n actorId: input.actorId,\n content: input.content,\n memoryType: input.memoryType ?? \"interaction\",\n importance: importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: tags ?? [],\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n onConflict: input.onConflict,\n };\n\n const memory = await this.memory.store(memoryInput);\n this.config.hooks?.onMemoryStored?.(memory);\n\n const count = (this.processCounts.get(input.actorId) ?? 0) + 1;\n this.processCounts.set(input.actorId, count);\n\n // Auto-summarize if threshold is hit\n let summaryCreated: Memory | undefined;\n const threshold = this.config.defaults?.summarizationThreshold ?? 100;\n if (threshold > 0 && count % threshold === 0) {\n try {\n const result = await this.memory.summarize(\n {\n actorId: input.actorId,\n memoryTypes: [\"interaction\"],\n skipMostRecent: 5,\n targetCount: Math.min(15, count),\n },\n this.config.hooks?.onError\n ? (err) => this.config.hooks!.onError!(err, \"summarize\")\n : undefined\n );\n summaryCreated = result.summary;\n this.config.hooks?.onSummaryCreated?.(result.summary, result.deletedCount);\n } catch (err) {\n this.config.hooks?.onError?.(\n err instanceof Error ? err : new Error(String(err)),\n \"summarize\"\n );\n }\n }\n\n // Auto-prune if configured (throttled)\n this.pruneCheckCount++;\n const pruneStrategy = this.config.defaults?.pruneStrategy;\n const pruneInterval = this.config.defaults?.pruneInterval ?? 100;\n if (pruneStrategy && this.pruneCheckCount % pruneInterval === 0) {\n try {\n const pruneResult = await this.memory.prune(pruneStrategy);\n if (pruneResult.count > 0) {\n this.config.hooks?.onMemoryPruned?.(pruneResult.pruned);\n }\n } catch (err) {\n this.config.hooks?.onError?.(\n err instanceof Error ? err : new Error(String(err)),\n \"prune\"\n );\n }\n }\n\n return { memory, summaryCreated };\n }\n\n async export(actorId?: string): Promise<MemStackSnapshot> {\n const memories = await this.memory.export(actorId);\n return {\n version: 1,\n memories,\n exportedAt: new Date().toISOString(),\n };\n }\n\n async import(snapshot: MemStackSnapshot): Promise<void> {\n if (snapshot.version !== 1) {\n throw validationError(`Unsupported snapshot version: ${snapshot.version}`);\n }\n const memories = snapshot.memories.map((m, i) => {\n const createdAt = typeof m.createdAt === \"string\" ? new Date(m.createdAt) : m.createdAt;\n const expiresAt = typeof m.expiresAt === \"string\" ? new Date(m.expiresAt) : m.expiresAt;\n const label = m.id ? `id: ${m.id}` : `index ${i}`;\n if (createdAt && isNaN(createdAt.getTime())) {\n throw validationError(`Invalid createdAt for memory (${label}): ${String(m.createdAt)}`);\n }\n if (expiresAt && isNaN(expiresAt.getTime())) {\n throw validationError(`Invalid expiresAt for memory (${label}): ${String(m.expiresAt)}`);\n }\n return { ...m, createdAt, expiresAt };\n });\n await this.memory.storeBatch(memories);\n }\n\n async health(): Promise<HealthStatus> {\n const status: HealthStatus = { storage: false, llm: false, embedding: false };\n\n try {\n await this.memory.count();\n status.storage = true;\n } catch { /* storage check failed */ }\n\n try {\n await this.config.llm.complete({ system: \"ok\", user: \"health\", maxTokens: 1 });\n status.llm = true;\n } catch { /* llm check failed */ }\n\n if (this.config.embedding) {\n try {\n await this.config.embedding.embed([\"health check\"]);\n status.embedding = true;\n } catch { /* embedding check failed */ }\n }\n\n return status;\n }\n\n async close(): Promise<void> {\n await this.storage.close();\n }\n\n private _parseEnrichmentJson(\n text: string\n ): { importance?: number; tags?: string[] } {\n try {\n const json = JSON.parse(this._extractJson(text)) as Record<string, unknown>;\n const result: { importance?: number; tags?: string[] } = {};\n if (typeof json.importance === \"number\" && Number.isFinite(json.importance)) {\n result.importance = Math.max(0, Math.min(1, json.importance));\n }\n if (\n Array.isArray(json.tags) &&\n json.tags.every((t: unknown) => typeof t === \"string\")\n ) {\n result.tags = (json.tags as string[]).map((t) => t.toLowerCase().trim()).slice(0, 5);\n }\n return result;\n } catch {\n return {};\n }\n }\n\n private _parseTagsJson(text: string): string[] {\n try {\n const parsed = JSON.parse(this._extractJson(text)) as unknown;\n if (Array.isArray(parsed) && parsed.every((t: unknown) => typeof t === \"string\")) {\n return (parsed as string[]).map((t) => t.toLowerCase().trim()).slice(0, 5);\n }\n } catch {\n // Fallback: try comma-separated\n }\n return text\n .split(\",\")\n .map((t) => t.replace(/[\\[\\]\"]/g, \"\").trim().toLowerCase())\n .filter((t) => t.length > 0)\n .slice(0, 5);\n }\n\n /** Strip markdown code fences and extract the JSON payload from LLM output. */\n private _extractJson(text: string): string {\n let cleaned = text.trim();\n // Remove ```json ... ``` or ``` ... ``` fences\n const fenceMatch = cleaned.match(/```(?:json)?\\s*([\\s\\S]*?)```/);\n if (fenceMatch) cleaned = fenceMatch[1].trim();\n return cleaned;\n }\n}\n","import { mkdir, readFile, writeFile, readdir, open, unlink, rename, stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { storageError, notFound } from \"../../errors.js\";\n\ninterface MemoryRecord extends Memory {\n _touchedAt: string;\n}\n\nexport interface DiskStorageConfig {\n /** Directory to store memory files. Default: \"./memstack-data\" */\n storageDir?: string;\n}\n\nexport class DiskStorageAdapter implements StorageProvider {\n private dir: string;\n private _writeLocks = new Map<string, Promise<void>>();\n private _idIndex = new Map<string, string>();\n\n constructor(config: DiskStorageConfig = {}) {\n this.dir = config.storageDir ?? \"./memstack-data\";\n }\n\n async initialize(): Promise<void> {\n await mkdir(this.dir, { recursive: true });\n await this._buildIndex();\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const memory: MemoryRecord = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n _touchedAt: now.toISOString(),\n };\n\n await this._withWriteLock(input.actorId, async () => {\n const records = await this._readFile(input.actorId);\n const existingIdx = records.findIndex((r) => r.id === memory.id);\n if (existingIdx !== -1) {\n records[existingIdx] = memory;\n } else {\n records.push(memory);\n }\n this._idIndex.set(memory.id, input.actorId);\n await this._writeFile(input.actorId, records);\n });\n\n return this._toExternal(memory);\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const byActor = new Map<string, MemoryRecord[]>();\n const now = new Date();\n const all: MemoryRecord[] = [];\n\n for (const input of inputs) {\n const memory: MemoryRecord = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n _touchedAt: now.toISOString(),\n };\n all.push(memory);\n const group = byActor.get(input.actorId) ?? [];\n group.push(memory);\n byActor.set(input.actorId, group);\n }\n\n for (const [actorId, group] of byActor) {\n await this._withWriteLock(actorId, async () => {\n const existing = await this._readFile(actorId);\n for (const mem of group) {\n const existingIdx = existing.findIndex((r) => r.id === mem.id);\n if (existingIdx !== -1) {\n existing[existingIdx] = mem;\n } else {\n existing.push(mem);\n }\n this._idIndex.set(mem.id, actorId);\n }\n await this._writeFile(actorId, existing);\n });\n }\n\n return all.map((m) => this._toExternal(m));\n }\n\n async get(id: string): Promise<Memory | null> {\n const actorId = this._idIndex.get(id);\n if (actorId) {\n const records = await this._readFile(actorId);\n const record = records.find((r) => r.id === id);\n if (record) {\n if (record.expiresAt && new Date(record.expiresAt) <= new Date()) return null;\n return this._toExternal(record);\n }\n }\n const actorIds = await this._listActors();\n for (const aid of actorIds) {\n const records = await this._readFile(aid);\n const record = records.find((r) => r.id === id);\n if (record) {\n this._idIndex.set(id, aid);\n if (record.expiresAt && new Date(record.expiresAt) <= new Date()) return null;\n return this._toExternal(record);\n }\n }\n return null;\n }\n\n async delete(id: string): Promise<void> {\n let actorId = this._idIndex.get(id);\n if (!actorId) {\n const actorIds = await this._listActors();\n for (const aid of actorIds) {\n const records = await this._readFile(aid);\n if (records.some((r) => r.id === id)) { actorId = aid; break; }\n }\n }\n if (!actorId) throw notFound(\"Memory\", id);\n\n let deleted = false;\n await this._withWriteLock(actorId, async () => {\n const fresh = await this._readFile(actorId);\n const i = fresh.findIndex((r) => r.id === id);\n if (i !== -1) {\n fresh.splice(i, 1);\n this._idIndex.delete(id);\n await this._writeFile(actorId, fresh);\n deleted = true;\n }\n });\n\n if (!deleted) throw notFound(\"Memory\", id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const idSet = new Set(ids);\n let count = 0;\n const actorIds = await this._listActors();\n\n for (const actorId of actorIds) {\n await this._withWriteLock(actorId, async () => {\n const records = await this._readFile(actorId);\n const before = records.length;\n const filtered = records.filter((r) => !idSet.has(r.id));\n count += before - filtered.length;\n if (before !== filtered.length) {\n for (const r of records) {\n if (idSet.has(r.id)) this._idIndex.delete(r.id);\n }\n await this._writeFile(actorId, filtered);\n }\n });\n }\n\n return count;\n }\n\n async retrieve(query: MemoryRetrieveQuery, _embedding?: number[]): Promise<Memory[]> {\n const actorIds = query.actorId ? [query.actorId] : await this._listActors();\n let results: MemoryRecord[] = [];\n\n for (const actorId of actorIds) {\n let records = await this._readFile(actorId);\n const now = new Date();\n records = records.filter((r) => !r.expiresAt || new Date(r.expiresAt) > now);\n\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n records = records.filter((r) => query.memoryTypes!.includes(r.memoryType));\n }\n if (query.tags && query.tags.length > 0) {\n records = records.filter((r) => r.tags?.some((t) => query.tags!.includes(t)));\n }\n if (query.query) {\n const terms = query.query.toLowerCase().split(/\\s+/).filter(Boolean);\n records = records.filter((r) => {\n const content = r.content.toLowerCase();\n return terms.some((t) => content.includes(t));\n });\n }\n\n results.push(...records);\n }\n\n switch (query.strategy) {\n case \"recent\":\n results.sort((a, b) => new Date(b._touchedAt).getTime() - new Date(a._touchedAt).getTime());\n break;\n case \"important\":\n results.sort((a, b) => b.importance - a.importance);\n break;\n case \"hybrid\":\n case \"semantic\":\n default:\n results.sort(\n (a, b) =>\n b.importance - a.importance || new Date(b._touchedAt).getTime() - new Date(a._touchedAt).getTime()\n );\n break;\n }\n\n // Touch records on retrieval\n const nowStr = new Date().toISOString();\n const toTouch = results.slice(0, query.limit ?? 10);\n const touchedActors = new Set<string>();\n for (const r of toTouch) {\n r._touchedAt = nowStr;\n touchedActors.add(r.actorId);\n }\n // Persist touches back to disk\n for (const actorId of touchedActors) {\n await this._withWriteLock(actorId, async () => {\n const records = await this._readFile(actorId);\n let changed = false;\n for (const r of records) {\n const touched = toTouch.find((t) => t.id === r.id);\n if (touched) { r._touchedAt = nowStr; changed = true; }\n }\n if (changed) await this._writeFile(actorId, records);\n });\n }\n\n const limit = query.limit ?? 10;\n return results.slice(0, limit).map((r) => this._toExternal(r));\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const actorIds = filter?.actorId ? [filter.actorId] : await this._listActors();\n let total = 0;\n const now = new Date();\n\n for (const actorId of actorIds) {\n let records = await this._readFile(actorId);\n records = records.filter((r) => !r.expiresAt || new Date(r.expiresAt) > now);\n\n if (filter?.memoryType) {\n records = records.filter((r) => r.memoryType === filter.memoryType);\n }\n if (filter?.minImportance !== undefined) {\n records = records.filter((r) => r.importance >= filter.minImportance!);\n }\n total += records.length;\n }\n\n return total;\n }\n\n async touch(id: string): Promise<void> {\n const actorId = this._idIndex.get(id);\n if (!actorId) throw notFound(\"Memory\", id);\n\n const nowStr = new Date().toISOString();\n await this._withWriteLock(actorId, async () => {\n const fresh = await this._readFile(actorId);\n const match = fresh.find((r) => r.id === id);\n if (!match) throw notFound(\"Memory\", id);\n match._touchedAt = nowStr;\n await this._writeFile(actorId, fresh);\n });\n }\n\n async close(): Promise<void> {\n this._writeLocks.clear();\n }\n\n // ── Internal ──\n\n private _filePath(actorId: string): string {\n const safe = actorId.replace(/[^a-zA-Z0-9_\\-.,@]/g, \"_\");\n return join(this.dir, `${safe}.json`);\n }\n\n private async _readFile(actorId: string): Promise<MemoryRecord[]> {\n try {\n const raw = await readFile(this._filePath(actorId), \"utf-8\");\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed) ? (parsed as MemoryRecord[]) : [];\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return [];\n throw storageError(`Failed to read memories for actor ${actorId}: ${(err as Error).message}`);\n }\n }\n\n private async _writeFile(actorId: string, records: MemoryRecord[]): Promise<void> {\n const filePath = this._filePath(actorId);\n // Write-then-rename instead of an in-place write: `rename` is atomic on\n // POSIX filesystems, so a concurrent reader (get/retrieve, which don't\n // take the write lock) never observes a partially-written file.\n const tmpPath = `${filePath}.${process.pid}.${Date.now().toString(36)}.tmp`;\n try {\n await writeFile(tmpPath, JSON.stringify(records, null, 2), \"utf-8\");\n await rename(tmpPath, filePath);\n } catch (err) {\n await unlink(tmpPath).catch(() => {});\n throw storageError(`Failed to write memories for actor ${actorId}: ${(err as Error).message}`);\n }\n }\n\n private async _withWriteLock(actorId: string, fn: () => Promise<void>): Promise<void> {\n // In-process serialization: cheap, and avoids every same-process caller\n // hitting the cross-process lockfile's retry loop for no reason.\n const prev = this._writeLocks.get(actorId) ?? Promise.resolve();\n let resolve!: () => void;\n const next = new Promise<void>((r) => { resolve = r; });\n this._writeLocks.set(actorId, next);\n await prev;\n // Cross-process serialization: the in-process chain above only protects\n // callers sharing this adapter instance. Separate OS processes (e.g. two\n // `memstack` CLI invocations, or multiple server workers) each have their\n // own instance and their own copy of `_writeLocks`, so without this an\n // interleaved read-modify-write across processes silently loses updates.\n const releaseFileLock = await this._acquireFileLock(actorId);\n try {\n await fn();\n } finally {\n await releaseFileLock();\n resolve();\n // Clean up: only remove this entry if it hasn't been replaced by a newer lock\n if (this._writeLocks.get(actorId) === next) {\n this._writeLocks.delete(actorId);\n }\n }\n }\n\n /**\n * Acquires an exclusive cross-process lock for `actorId` via `open(path, \"wx\")`\n * (atomic create-if-absent). Retries with jittered backoff while the lock is\n * held elsewhere, and steals locks left behind by a crashed process once\n * they're older than `staleMs`.\n */\n private async _acquireFileLock(actorId: string): Promise<() => Promise<void>> {\n const lockPath = `${this._filePath(actorId)}.lock`;\n const staleMs = 10_000;\n const timeoutMs = 30_000;\n const start = Date.now();\n\n while (true) {\n try {\n const handle = await open(lockPath, \"wx\");\n await handle.close();\n return async () => {\n await unlink(lockPath).catch(() => {});\n };\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== \"EEXIST\") {\n throw storageError(`Failed to acquire lock for actor ${actorId}: ${(err as Error).message}`);\n }\n try {\n const st = await stat(lockPath);\n if (Date.now() - st.mtimeMs > staleMs) {\n await unlink(lockPath).catch(() => {});\n continue;\n }\n } catch {\n continue; // lock file disappeared between EEXIST and stat — retry immediately\n }\n if (Date.now() - start > timeoutMs) {\n throw storageError(`Timed out waiting for disk storage lock: ${lockPath}`);\n }\n await new Promise((r) => setTimeout(r, 15 + Math.random() * 35));\n }\n }\n }\n\n private async _listActors(): Promise<string[]> {\n try {\n const entries = await readdir(this.dir);\n return entries.filter((e) => e.endsWith(\".json\")).map((e) => e.slice(0, -5));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return [];\n throw storageError(`Failed to list actors: ${(err as Error).message}`);\n }\n }\n\n private async _buildIndex(): Promise<void> {\n const actorIds = await this._listActors();\n for (const actorId of actorIds) {\n const records = await this._readFile(actorId);\n for (const r of records) {\n this._idIndex.set(r.id, actorId);\n }\n }\n }\n\n private _toExternal(record: MemoryRecord): Memory {\n const { _touchedAt: _, ...rest } = record;\n return {\n ...rest,\n createdAt: new Date(record.createdAt),\n expiresAt: record.expiresAt ? new Date(record.expiresAt) : undefined,\n };\n }\n}\n","import { mkdir, readFile, writeFile, appendFile, readdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { storageError, notFound } from \"../../errors.js\";\n\nexport interface MarkdownStorageConfig {\n dir: string;\n oneFilePerActor?: boolean;\n}\n\nexport class MarkdownStorageAdapter implements StorageProvider {\n private dir: string;\n private oneFilePerActor: boolean;\n private _cache: Map<string, Memory> | null = null;\n private _deletedIds: Set<string> = new Set();\n private _cacheDirty: boolean = true;\n\n constructor(config: MarkdownStorageConfig) {\n this.dir = config.dir;\n this.oneFilePerActor = config.oneFilePerActor ?? true;\n }\n\n async initialize(): Promise<void> {\n await mkdir(this.dir, { recursive: true });\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const memory: Memory = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n };\n\n const filePath = this._filePath(input.actorId);\n const block = this._formatBlock(memory);\n await appendFile(filePath, block, \"utf-8\");\n this._cacheDirty = true;\n return memory;\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n await this._ensureCache();\n const memory = this._cache!.get(id);\n if (!memory) return null;\n if (memory.expiresAt && memory.expiresAt <= new Date()) return null;\n if (this._deletedIds.has(id)) return null;\n return memory;\n }\n\n async delete(id: string): Promise<void> {\n await this._ensureCache();\n const memory = this._cache!.get(id);\n if (!memory || this._deletedIds.has(id)) {\n throw notFound(\"Memory\", id);\n }\n if (memory.expiresAt && memory.expiresAt <= new Date()) {\n throw notFound(\"Memory\", id);\n }\n\n const filePath = this._filePath(memory.actorId);\n const tombstone = this._formatTombstone(id);\n await appendFile(filePath, tombstone, \"utf-8\");\n this._cacheDirty = true;\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n await this._ensureCache();\n const idSet = new Set(ids);\n \n const toDelete: { id: string; actorId: string }[] = [];\n for (const id of ids) {\n const memory = this._cache!.get(id);\n if (memory && !this._deletedIds.has(id)) {\n if (!memory.expiresAt || memory.expiresAt > new Date()) {\n toDelete.push({ id, actorId: memory.actorId });\n }\n }\n }\n\n const byActor = new Map<string, string[]>();\n for (const { id, actorId } of toDelete) {\n const group = byActor.get(actorId) ?? [];\n group.push(id);\n byActor.set(actorId, group);\n }\n\n for (const [actorId, groupIds] of byActor) {\n const filePath = this._filePath(actorId);\n const blocks = groupIds.map((gid) => this._formatTombstone(gid)).join(\"\");\n await appendFile(filePath, blocks, \"utf-8\");\n }\n\n this._cacheDirty = true;\n return toDelete.length;\n }\n\n async retrieve(query: MemoryRetrieveQuery, _embedding?: number[]): Promise<Memory[]> {\n await this._ensureCache();\n const now = new Date();\n let results = Array.from(this._cache!.values())\n .filter((m) => !this._deletedIds.has(m.id))\n .filter((m) => !m.expiresAt || m.expiresAt > now);\n\n if (query.actorId) {\n results = results.filter((m) => m.actorId === query.actorId);\n }\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n results = results.filter((m) => query.memoryTypes!.includes(m.memoryType));\n }\n if (query.tags && query.tags.length > 0) {\n results = results.filter((m) => m.tags?.some((t) => query.tags!.includes(t)));\n }\n if (query.query) {\n const terms = query.query.toLowerCase().split(/\\s+/).filter(Boolean);\n results = results.filter((m) => {\n const content = m.content.toLowerCase();\n return terms.some((t) => content.includes(t));\n });\n }\n\n switch (query.strategy) {\n case \"recent\":\n results.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\n break;\n case \"important\":\n results.sort((a, b) => b.importance - a.importance);\n break;\n case \"hybrid\":\n case \"semantic\":\n default:\n results.sort(\n (a, b) => b.importance - a.importance || b.createdAt.getTime() - a.createdAt.getTime()\n );\n break;\n }\n\n const limit = query.limit ?? 10;\n return results.slice(0, limit);\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n await this._ensureCache();\n const now = new Date();\n let results = Array.from(this._cache!.values())\n .filter((m) => !this._deletedIds.has(m.id))\n .filter((m) => !m.expiresAt || m.expiresAt > now);\n\n if (filter?.actorId) {\n results = results.filter((m) => m.actorId === filter.actorId);\n }\n if (filter?.memoryType) {\n results = results.filter((m) => m.memoryType === filter.memoryType);\n }\n if (filter?.minImportance !== undefined) {\n results = results.filter((m) => m.importance >= filter.minImportance!);\n }\n return results.length;\n }\n\n async close(): Promise<void> {\n this._cache = null;\n this._deletedIds.clear();\n this._cacheDirty = true;\n }\n\n async vacuum(): Promise<void> {\n if (this.oneFilePerActor) {\n const actorIds = await this._listActors();\n for (const actorId of actorIds) {\n await this._vacuumFile(this._filePath(actorId));\n }\n } else {\n await this._vacuumFile(this._filePath(\"\"));\n }\n this._cacheDirty = true;\n }\n\n // ── Internal ──\n\n private _filePath(actorId: string): string {\n if (!this.oneFilePerActor) {\n return join(this.dir, \"memories.md\");\n }\n const safe = actorId.replace(/[^a-zA-Z0-9_\\-.,@]/g, \"_\");\n return join(this.dir, `${safe}.md`);\n }\n\n private _formatBlock(memory: Memory): string {\n const iso = memory.createdAt.toISOString();\n const meta = JSON.stringify({\n id: memory.id,\n actorId: memory.actorId,\n memoryType: memory.memoryType,\n importance: memory.importance,\n emotionalValence: memory.emotionalValence,\n tags: memory.tags,\n embedding: memory.embedding,\n sourceId: memory.sourceId ?? null,\n metadata: memory.metadata ?? {},\n createdAt: memory.createdAt.toISOString(),\n expiresAt: memory.expiresAt?.toISOString() ?? null,\n });\n return `## ${iso}\\n\\n~~~json\\n${meta}\\n~~~\\n\\n${memory.content}\\n\\n---\\n`;\n }\n\n private _formatTombstone(id: string): string {\n const iso = new Date().toISOString();\n return `## ${iso}\\n\\n<!-- deleted: ${id} -->\\n\\n---\\n`;\n }\n\n private async _ensureCache(): Promise<void> {\n if (!this._cacheDirty) return;\n\n const allMemories = new Map<string, Memory>();\n const allDeletedIds = new Set<string>();\n\n if (this.oneFilePerActor) {\n const actorIds = await this._listActors();\n for (const actorId of actorIds) {\n const { memories, deletedIds } = await this._parseFile(this._filePath(actorId));\n for (const mem of memories) {\n allMemories.set(mem.id, mem);\n }\n for (const did of deletedIds) {\n allDeletedIds.add(did);\n }\n }\n } else {\n const { memories, deletedIds } = await this._parseFile(this._filePath(\"\"));\n for (const mem of memories) {\n allMemories.set(mem.id, mem);\n }\n for (const did of deletedIds) {\n allDeletedIds.add(did);\n }\n }\n\n this._cache = allMemories;\n this._deletedIds = allDeletedIds;\n this._cacheDirty = false;\n }\n\n private async _parseFile(filePath: string): Promise<{ memories: Memory[]; deletedIds: string[] }> {\n let raw: string;\n try {\n raw = await readFile(filePath, \"utf-8\");\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") {\n return { memories: [], deletedIds: [] };\n }\n throw storageError(`Failed to read file ${filePath}: ${(err as Error).message}`);\n }\n\n const memories: Memory[] = [];\n const deletedIds: string[] = [];\n\n const sections = raw.split(\"\\n---\\n\");\n\n for (const section of sections) {\n const trimmed = section.trim();\n if (!trimmed) continue;\n\n const cleanBlock = trimmed.replace(/\\n---$/, \"\");\n const lines = cleanBlock.split(\"\\n\");\n let i = 0;\n\n if (!lines[i]?.startsWith(\"## \")) continue;\n i++;\n\n while (i < lines.length && lines[i].trim() === \"\") i++;\n if (i >= lines.length) continue;\n\n const tombstoneMatch = lines[i].trim().match(/^<!-- deleted:\\s*(\\S+)\\s*-->/);\n if (tombstoneMatch) {\n deletedIds.push(tombstoneMatch[1]);\n continue;\n }\n\n if (lines[i].trim() !== \"~~~json\") continue;\n i++;\n\n const jsonLines: string[] = [];\n while (i < lines.length && lines[i].trim() !== \"~~~\") {\n jsonLines.push(lines[i]);\n i++;\n }\n i++;\n\n let metadata: Record<string, unknown> | null = null;\n try {\n metadata = JSON.parse(jsonLines.join(\"\\n\"));\n } catch {\n continue;\n }\n\n while (i < lines.length && lines[i].trim() === \"\") i++;\n\n const contentLines: string[] = [];\n while (i < lines.length) {\n contentLines.push(lines[i]);\n i++;\n }\n const content = contentLines.join(\"\\n\").trim();\n\n if (metadata && typeof metadata.id === \"string\") {\n memories.push({\n id: metadata.id,\n actorId: metadata.actorId as string,\n memoryType: (metadata.memoryType as MemoryType) ?? \"interaction\",\n content,\n importance: (metadata.importance as number) ?? 0.5,\n emotionalValence: (metadata.emotionalValence as number) ?? 0,\n tags: (metadata.tags as string[]) ?? [],\n embedding: metadata.embedding as number[] | undefined,\n sourceId: (metadata.sourceId as string | undefined) ?? undefined,\n metadata: (metadata.metadata as Record<string, unknown>) ?? {},\n createdAt: new Date(metadata.createdAt as string),\n expiresAt: metadata.expiresAt ? new Date(metadata.expiresAt as string) : undefined,\n });\n }\n }\n\n return { memories, deletedIds };\n }\n\n private async _vacuumFile(filePath: string): Promise<void> {\n await this._ensureCache();\n\n let raw: string;\n try {\n raw = await readFile(filePath, \"utf-8\");\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return;\n throw storageError(`Failed to read file for vacuum: ${(err as Error).message}`);\n }\n\n const sections = raw.split(\"\\n---\\n\");\n const kept: string[] = [];\n\n for (const section of sections) {\n const trimmed = section.trim();\n if (!trimmed) continue;\n\n const cleanBlock = trimmed.replace(/\\n---$/, \"\");\n const lines = cleanBlock.split(\"\\n\");\n let i = 0;\n\n if (!lines[i]?.startsWith(\"## \")) {\n kept.push(trimmed);\n continue;\n }\n i++;\n\n while (i < lines.length && lines[i].trim() === \"\") i++;\n if (i >= lines.length) {\n kept.push(trimmed);\n continue;\n }\n\n const tombstoneMatch = lines[i].trim().match(/^<!-- deleted:\\s*(\\S+)\\s*-->/);\n if (tombstoneMatch) continue;\n\n if (lines[i].trim() !== \"~~~json\") {\n kept.push(trimmed);\n continue;\n }\n i++;\n\n while (i < lines.length && lines[i].trim() !== \"~~~\") i++;\n i++;\n\n while (i < lines.length && lines[i].trim() === \"\") i++;\n\n const contentLines: string[] = [];\n while (i < lines.length) {\n contentLines.push(lines[i]);\n i++;\n }\n\n try {\n const jsonStartIdx = lines.findIndex((l) => l.trim() === \"~~~json\");\n const jsonEndIdx = lines.findIndex((l, idx) => idx > jsonStartIdx && l.trim() === \"~~~\");\n const jsonText = lines.slice(jsonStartIdx + 1, jsonEndIdx).join(\"\\n\");\n const meta = JSON.parse(jsonText);\n if (this._deletedIds.has(meta.id)) continue;\n } catch {\n // Keep block if we can't parse its metadata\n }\n\n const content = contentLines.join(\"\\n\").trim();\n if (content || trimmed.includes(\"~~~json\")) {\n kept.push(trimmed);\n }\n }\n\n const output = kept.length > 0 ? kept.join(\"\\n---\\n\") + \"\\n---\\n\" : \"\";\n await writeFile(filePath, output, \"utf-8\");\n }\n\n private async _listActors(): Promise<string[]> {\n try {\n const entries = await readdir(this.dir);\n return entries.filter((e) => e.endsWith(\".md\")).map((e) => e.slice(0, -3));\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") return [];\n throw storageError(`Failed to list actors: ${(err as Error).message}`);\n }\n }\n}\n","import type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport type { Memory } from \"../../types.js\";\nexport interface HybridStorageConfig {\n cache: StorageProvider;\n durable: StorageProvider;\n writeBoth?: boolean;\n readFromCache?: boolean;\n syncOnInit?: boolean;\n}\n\nexport class HybridStorageAdapter implements StorageProvider {\n private cache: StorageProvider;\n private durable: StorageProvider;\n private writeBoth: boolean;\n private readFromCache: boolean;\n private syncOnInit: boolean;\n\n constructor(config: HybridStorageConfig) {\n this.cache = config.cache;\n this.durable = config.durable;\n this.writeBoth = config.writeBoth ?? true;\n this.readFromCache = config.readFromCache ?? true;\n this.syncOnInit = config.syncOnInit ?? false;\n }\n\n async initialize(): Promise<void> {\n await Promise.all([this.cache.initialize(), this.durable.initialize()]);\n\n if (this.syncOnInit) {\n const results = await this.durable.retrieve({ limit: 100000 });\n if (results.length > 0) {\n await this.cache.storeBatch(results.map((m) => ({\n actorId: m.actorId,\n content: m.content,\n memoryType: m.memoryType,\n importance: m.importance,\n emotionalValence: m.emotionalValence,\n tags: m.tags,\n embedding: m.embedding,\n sourceId: m.sourceId,\n metadata: m.metadata,\n expiresAt: m.expiresAt,\n id: m.id,\n }))).catch(() => {});\n }\n }\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const result = await this.durable.store(input);\n\n if (this.writeBoth) {\n try {\n await this.cache.store({ ...input, id: result.id });\n } catch {}\n }\n\n return result;\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results = await this.durable.storeBatch(inputs);\n\n if (this.writeBoth) {\n const cacheInputs: MemoryStoreInput[] = results.map((r, i) => ({\n ...inputs[i],\n id: r.id,\n }));\n try {\n await this.cache.storeBatch(cacheInputs);\n } catch {}\n }\n\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n if (this.readFromCache) {\n const cached = await this.cache.get(id);\n if (cached) return cached;\n\n const result = await this.durable.get(id);\n if (result) {\n try { await this.cache.store({\n actorId: result.actorId,\n content: result.content,\n memoryType: result.memoryType,\n importance: result.importance,\n emotionalValence: result.emotionalValence,\n tags: result.tags,\n embedding: result.embedding,\n sourceId: result.sourceId,\n metadata: result.metadata,\n expiresAt: result.expiresAt,\n id: result.id,\n }); } catch {}\n }\n return result;\n }\n\n return this.durable.get(id);\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n if (this.readFromCache) {\n const cached = await this.cache.retrieve(query, embedding);\n if (cached.length > 0) return cached;\n\n const results = await this.durable.retrieve(query, embedding);\n if (results.length > 0) {\n const inputs: MemoryStoreInput[] = results.map((r) => ({\n actorId: r.actorId,\n content: r.content,\n memoryType: r.memoryType,\n importance: r.importance,\n emotionalValence: r.emotionalValence,\n tags: r.tags,\n embedding: r.embedding,\n sourceId: r.sourceId,\n metadata: r.metadata,\n expiresAt: r.expiresAt,\n id: r.id,\n }));\n try { await this.cache.storeBatch(inputs); } catch {}\n }\n return results;\n }\n\n return this.durable.retrieve(query, embedding);\n }\n\n async delete(id: string): Promise<void> {\n const results = await Promise.allSettled([\n this.cache.delete(id),\n this.durable.delete(id),\n ]);\n\n const durableResult = results[1];\n if (durableResult.status === \"rejected\") {\n throw durableResult.reason;\n }\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const [cacheResult, durableCount] = await Promise.all([\n this.cache.deleteMany(ids).catch(() => 0),\n this.durable.deleteMany(ids),\n ]);\n\n return durableCount;\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n return this.durable.count(filter);\n }\n\n async touch(id: string): Promise<void> {\n if (this.durable.touch) {\n await this.durable.touch(id);\n }\n }\n\n async close(): Promise<void> {\n await Promise.all([this.cache.close(), this.durable.close()]);\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { notFound, configError } from \"../../errors.js\";\n\ntype PgPool = {\n query(text: string, params?: unknown[]): Promise<{ rows: unknown[] }>;\n end?: () => Promise<void>;\n};\n\ninterface PgMemoryRow {\n id: string;\n actor_id: string;\n memory_type: string;\n content: string;\n importance: number;\n emotional_valence: number;\n tags: string[];\n embedding: number[] | null;\n source_id: string | null;\n metadata: Record<string, unknown>;\n expires_at: string | null;\n created_at: string;\n touched_at: string;\n}\n\nexport interface PostgresStorageConfig {\n pool?: PgPool;\n connectionString?: string;\n host?: string; port?: number; database?: string; user?: string; password?: string;\n tableName?: string;\n vectorDimensions?: number;\n ssl?: boolean | object;\n}\n\nexport class PostgresStorageAdapter implements StorageProvider {\n private pool!: PgPool;\n private table: string;\n private vectorDimensions: number;\n private _ownsPool = false;\n\n constructor(config: PostgresStorageConfig) {\n this.table = config.tableName ?? \"memstack_memories\";\n if (!/^[a-zA-Z0-9_]+$/.test(this.table)) {\n throw configError(`Invalid table name: \"${this.table}\". Use only alphanumeric characters and underscores.`);\n }\n this.vectorDimensions = config.vectorDimensions ?? 1536;\n\n if (config.pool) {\n this.pool = config.pool;\n } else if (config.connectionString) {\n this._connectionString = config.connectionString;\n this._ssl = config.ssl;\n } else if (config.host || config.database || config.user) {\n this._connParts = { host: config.host, port: config.port, database: config.database, user: config.user, password: config.password, ssl: config.ssl };\n } else {\n throw configError(\"PostgresStorageAdapter requires a pool, connectionString, or connection details\");\n }\n }\n\n private _connectionString?: string;\n private _connParts?: { host?: string; port?: number; database?: string; user?: string; password?: string; ssl?: boolean | object };\n private _ssl?: boolean | object;\n\n async initialize(): Promise<void> {\n if (this._connectionString || this._connParts) {\n this.pool = await this._createPool();\n this._ownsPool = true;\n }\n\n await this._runMigration();\n }\n\n private async _createPool(): Promise<PgPool> {\n const connStr = this._connectionString ?? this._buildConnString();\n\n try {\n const { default: createPostgres } = await import(\"postgres\");\n const options: Record<string, unknown> = {};\n if (this._ssl) {\n options.ssl = typeof this._ssl === \"object\" ? this._ssl : \"require\";\n }\n const sql = createPostgres(connStr, options) as { unsafe: (t: string, p: unknown[]) => Promise<unknown[]>; end: () => Promise<void> };\n return {\n query: (text: string, params?: unknown[]) =>\n sql.unsafe(text, params as never[]).then((r: unknown[]) => ({ rows: r })),\n end: () => sql.end(),\n };\n } catch {\n try {\n // @ts-expect-error — optional peer dep without bundled declarations\n const { Pool } = await import(\"pg\");\n const pool = new Pool({ connectionString: connStr, ssl: this._ssl }) as PgPool & { end: () => Promise<void> };\n return { query: (text: string, params?: unknown[]) => pool.query(text, params), end: () => pool.end() };\n } catch {\n throw configError(\"connectionString requires 'postgres' (postgres.js) or 'pg' (node-postgres) to be installed\");\n }\n }\n }\n\n private _buildConnString(): string {\n const p = this._connParts!;\n const host = p.host ?? \"localhost\";\n const port = p.port ?? 5432;\n const db = p.database ?? \"postgres\";\n const user = encodeURIComponent(p.user ?? \"postgres\");\n const pw = p.password ? `:${encodeURIComponent(p.password)}` : \"\";\n let connStr = `postgres://${user}${pw}@${host}:${port}/${db}`;\n if (this._ssl) {\n const sslmode = typeof this._ssl === \"object\" ? \"no-verify\" : \"require\";\n connStr += `?sslmode=${sslmode}`;\n }\n return connStr;\n }\n\n private async _runMigration(): Promise<void> {\n try { await this.pool.query(\"CREATE EXTENSION IF NOT EXISTS vector\"); } catch { /* pgvector may not be available */ }\n await this.pool.query(`\n CREATE TABLE IF NOT EXISTS ${this.table} (\n id TEXT PRIMARY KEY,\n actor_id TEXT NOT NULL,\n memory_type TEXT NOT NULL DEFAULT 'interaction',\n content TEXT NOT NULL,\n importance REAL NOT NULL DEFAULT 0.5,\n emotional_valence REAL NOT NULL DEFAULT 0,\n tags JSONB NOT NULL DEFAULT '[]',\n embedding vector(${this.vectorDimensions}),\n source_id TEXT,\n metadata JSONB NOT NULL DEFAULT '{}',\n expires_at TIMESTAMPTZ,\n created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n touched_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n )\n `);\n try {\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_${this.table}_actor ON ${this.table} (actor_id)`);\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_${this.table}_created ON ${this.table} (created_at DESC)`);\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_${this.table}_importance ON ${this.table} (importance DESC)`);\n await this.pool.query(`CREATE INDEX IF NOT EXISTS idx_${this.table}_embedding ON ${this.table} USING hnsw (embedding vector_cosine_ops) WITH (m = 16, ef_construction = 64)`);\n } catch { /* index creation may fail; non-critical */ }\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date().toISOString();\n const id = input.id ?? this.generateId();\n\n await this.pool.query(\n `INSERT INTO ${this.table} (id, actor_id, memory_type, content, importance, emotional_valence, tags, embedding, source_id, metadata, expires_at, created_at, touched_at)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8::float8[]::vector, $9, $10, $11, $12, $13)\n ON CONFLICT (id) DO UPDATE SET\n content = EXCLUDED.content,\n importance = EXCLUDED.importance,\n emotional_valence = EXCLUDED.emotional_valence,\n tags = EXCLUDED.tags,\n embedding = EXCLUDED.embedding,\n source_id = EXCLUDED.source_id,\n metadata = EXCLUDED.metadata,\n expires_at = EXCLUDED.expires_at,\n touched_at = EXCLUDED.touched_at`,\n [\n id,\n input.actorId,\n input.memoryType ?? \"interaction\",\n input.content,\n input.importance ?? 0.5,\n input.emotionalValence ?? 0,\n JSON.stringify(input.tags ?? []),\n input.embedding ? `{${input.embedding.join(\",\")}}` : null,\n input.sourceId ?? null,\n JSON.stringify(input.metadata ?? {}),\n input.expiresAt?.toISOString() ?? null,\n now,\n now,\n ]\n );\n\n return {\n id,\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? new Date(now),\n };\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const { rows } = await this.pool.query(\n `SELECT * FROM ${this.table} WHERE id = $1 AND (expires_at IS NULL OR expires_at > NOW())`,\n [id]\n );\n if (rows.length === 0) return null;\n return this._rowToMemory(rows[0] as PgMemoryRow);\n }\n\n async delete(id: string): Promise<void> {\n const { rows } = await this.pool.query(`SELECT id FROM ${this.table} WHERE id = $1`, [id]);\n if (rows.length === 0) throw notFound(\"Memory\", id);\n await this.pool.query(`DELETE FROM ${this.table} WHERE id = $1`, [id]);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const placeholders = ids.map((_, i) => `$${i + 1}`).join(\", \");\n const { rows } = await this.pool.query(\n `DELETE FROM ${this.table} WHERE id IN (${placeholders}) RETURNING id`,\n ids\n );\n return rows.length;\n }\n\n async touch(id: string): Promise<void> {\n const { rows } = await this.pool.query(`SELECT id FROM ${this.table} WHERE id = $1`, [id]);\n if (rows.length === 0) throw notFound(\"Memory\", id);\n await this.pool.query(`UPDATE ${this.table} SET touched_at = NOW() WHERE id = $1`, [id]);\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n const conditions: string[] = [\"(expires_at IS NULL OR expires_at > NOW())\"];\n const params: unknown[] = [];\n let paramIdx = 1;\n\n if (query.actorId) {\n conditions.push(`actor_id = $${paramIdx++}`);\n params.push(query.actorId);\n }\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n conditions.push(`memory_type = ANY($${paramIdx++})`);\n params.push(query.memoryTypes);\n }\n if (query.tags && query.tags.length > 0) {\n conditions.push(`tags ?| $${paramIdx++}`);\n params.push(query.tags);\n }\n if (query.query) {\n conditions.push(`content ILIKE $${paramIdx++}`);\n params.push(`%${query.query}%`);\n }\n if (query.createdAfter) {\n conditions.push(`created_at >= $${paramIdx++}`);\n params.push(query.createdAfter.toISOString());\n }\n if (query.createdBefore) {\n conditions.push(`created_at <= $${paramIdx++}`);\n params.push(query.createdBefore.toISOString());\n }\n\n const where = conditions.length > 0 ? `WHERE ${conditions.join(\" AND \")}` : \"\";\n\n let orderBy: string;\n switch (query.strategy) {\n case \"recent\":\n orderBy = \"touched_at DESC\";\n break;\n case \"important\":\n orderBy = \"importance DESC\";\n break;\n case \"hybrid\":\n case \"semantic\":\n default:\n if (embedding) {\n return this._semanticRetrieve(embedding, query, params, where, paramIdx);\n }\n orderBy = \"importance DESC, touched_at DESC\";\n break;\n }\n\n const limit = query.limit ?? 10;\n const sql = `SELECT * FROM ${this.table} ${where} ORDER BY ${orderBy} LIMIT $${paramIdx}`;\n params.push(limit);\n\n const { rows } = await this.pool.query(sql, params);\n\n for (const row of rows.slice(0, limit)) {\n const r = row as PgMemoryRow;\n await this.pool.query(`UPDATE ${this.table} SET touched_at = NOW() WHERE id = $1`, [r.id]);\n }\n\n return (rows as PgMemoryRow[]).map((r) => this._rowToMemory(r));\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const conditions: string[] = [\"(expires_at IS NULL OR expires_at > NOW())\"];\n const params: unknown[] = [];\n let paramIdx = 1;\n\n if (filter?.actorId) {\n conditions.push(`actor_id = $${paramIdx++}`);\n params.push(filter.actorId);\n }\n if (filter?.memoryType) {\n conditions.push(`memory_type = $${paramIdx++}`);\n params.push(filter.memoryType);\n }\n if (filter?.minImportance !== undefined) {\n conditions.push(`importance >= $${paramIdx++}`);\n params.push(filter.minImportance);\n }\n if (filter?.createdAfter) {\n conditions.push(`created_at >= $${paramIdx++}`);\n params.push(filter.createdAfter.toISOString());\n }\n if (filter?.createdBefore) {\n conditions.push(`created_at <= $${paramIdx++}`);\n params.push(filter.createdBefore.toISOString());\n }\n\n const where = conditions.join(\" AND \");\n const { rows } = await this.pool.query(\n `SELECT COUNT(*) as count FROM ${this.table} WHERE ${where}`,\n params\n );\n return Number((rows[0] as { count: string }).count);\n }\n\n async close(): Promise<void> {\n if (this._ownsPool && this.pool?.end) {\n await this.pool.end();\n }\n }\n\n private async _semanticRetrieve(\n embedding: number[],\n query: MemoryRetrieveQuery,\n params: unknown[],\n baseWhere: string,\n paramIdx: number\n ): Promise<Memory[]> {\n const limit = query.limit ?? 10;\n const conditions = baseWhere.replace(/^WHERE\\s+/i, \"\");\n const whereClause = conditions\n ? `WHERE ${conditions} AND embedding IS NOT NULL`\n : `WHERE embedding IS NOT NULL`;\n const isHybrid = query.strategy === \"hybrid\";\n const sql = isHybrid ? `\n SELECT *,\n (embedding <-> $${paramIdx}::float8[]::vector) AS distance,\n (1.0 - (embedding <-> $${paramIdx}::float8[]::vector) / 2.0 + importance) AS score\n FROM ${this.table}\n ${whereClause}\n ORDER BY score DESC\n LIMIT $${paramIdx + 1}\n ` : `\n SELECT *,\n (embedding <-> $${paramIdx}::float8[]::vector) AS distance\n FROM ${this.table}\n ${whereClause}\n ORDER BY distance ASC\n LIMIT $${paramIdx + 1}\n `;\n params.push(embedding);\n params.push(limit);\n\n const { rows } = await this.pool.query(sql, params);\n\n for (const row of rows.slice(0, limit)) {\n const r = row as PgMemoryRow;\n await this.pool.query(`UPDATE ${this.table} SET touched_at = NOW() WHERE id = $1`, [r.id]);\n }\n\n return (rows as PgMemoryRow[]).map((r) => this._rowToMemory(r));\n }\n\n private _rowToMemory(row: PgMemoryRow): Memory {\n return {\n id: row.id,\n actorId: row.actor_id,\n memoryType: row.memory_type as MemoryType,\n content: row.content,\n importance: row.importance,\n emotionalValence: row.emotional_valence,\n tags: Array.isArray(row.tags) ? row.tags : [],\n embedding: row.embedding ?? undefined,\n sourceId: row.source_id ?? undefined,\n metadata: row.metadata ?? {},\n expiresAt: row.expires_at ? new Date(row.expires_at) : undefined,\n createdAt: new Date(row.created_at),\n };\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { notFound } from \"../../errors.js\";\n\ntype RedisClient = {\n set(key: string, value: string): Promise<unknown>;\n get(key: string): Promise<string | null>;\n del(key: string | string[]): Promise<number>;\n sadd(key: string, ...members: string[]): Promise<number>;\n srem(key: string, ...members: string[]): Promise<number>;\n smembers(key: string): Promise<string[]>;\n mget(...keys: string[]): Promise<(string | null)[]>;\n};\n\ninterface MemoryRecord extends Memory {\n _touchedAt: string;\n}\n\nexport interface RedisStorageConfig {\n redis: RedisClient;\n keyPrefix?: string;\n}\n\nexport class RedisStorageAdapter implements StorageProvider {\n private redis: RedisClient;\n private prefix: string;\n constructor(config: RedisStorageConfig) {\n this.redis = config.redis;\n this.prefix = config.keyPrefix ?? \"memstack\";\n }\n\n async initialize(): Promise<void> {\n // Connection is user-managed; no-op\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const memory: MemoryRecord = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n _touchedAt: now.toISOString(),\n };\n\n await this.redis.set(this._memKey(memory.id), JSON.stringify(memory));\n await this.redis.sadd(this._actorKey(memory.actorId), memory.id);\n await this.redis.sadd(this._actorsSetKey(), memory.actorId);\n\n return this._toExternal(memory);\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n const now = new Date();\n\n for (const input of inputs) {\n const memory: MemoryRecord = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n _touchedAt: now.toISOString(),\n };\n\n await this.redis.set(this._memKey(memory.id), JSON.stringify(memory));\n await this.redis.sadd(this._actorKey(memory.actorId), memory.id);\n await this.redis.sadd(this._actorsSetKey(), memory.actorId);\n results.push(this._toExternal(memory));\n }\n\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const raw = await this.redis.get(this._memKey(id));\n if (!raw) return null;\n\n const record = JSON.parse(raw) as MemoryRecord;\n if (record.expiresAt && new Date(record.expiresAt) <= new Date()) return null;\n return this._toExternal(record);\n }\n\n async delete(id: string): Promise<void> {\n const raw = await this.redis.get(this._memKey(id));\n if (!raw) throw notFound(\"Memory\", id);\n\n const record = JSON.parse(raw) as MemoryRecord;\n await this.redis.del(this._memKey(id));\n await this.redis.srem(this._actorKey(record.actorId), id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n let count = 0;\n const byActor = new Map<string, string[]>();\n\n for (const id of ids) {\n const raw = await this.redis.get(this._memKey(id));\n if (raw) {\n const record = JSON.parse(raw) as MemoryRecord;\n const list = byActor.get(record.actorId) ?? [];\n list.push(id);\n byActor.set(record.actorId, list);\n }\n }\n\n for (const [actorId, memIds] of byActor) {\n await this.redis.del(memIds.map((id) => this._memKey(id)));\n await this.redis.srem(this._actorKey(actorId), ...memIds);\n count += memIds.length;\n }\n\n return count;\n }\n\n async touch(id: string): Promise<void> {\n const raw = await this.redis.get(this._memKey(id));\n if (!raw) throw notFound(\"Memory\", id);\n\n const record = JSON.parse(raw) as MemoryRecord;\n record._touchedAt = new Date().toISOString();\n await this.redis.set(this._memKey(id), JSON.stringify(record));\n }\n\n async retrieve(query: MemoryRetrieveQuery, _embedding?: number[]): Promise<Memory[]> {\n let allRecords: MemoryRecord[] = [];\n\n if (query.actorId) {\n allRecords = await this._getActorRecords(query.actorId);\n } else {\n const actorIds = await this._listActors();\n for (const actorId of actorIds) {\n const records = await this._getActorRecords(actorId);\n allRecords.push(...records);\n }\n }\n\n const now = new Date();\n let results = allRecords.filter((r) => !r.expiresAt || new Date(r.expiresAt) > now);\n\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n results = results.filter((r) => query.memoryTypes!.includes(r.memoryType));\n }\n if (query.tags && query.tags.length > 0) {\n results = results.filter((r) => r.tags?.some((t) => query.tags!.includes(t)));\n }\n if (query.query) {\n const q = query.query.toLowerCase();\n results = results.filter((r) => r.content.toLowerCase().includes(q));\n }\n\n switch (query.strategy) {\n case \"recent\":\n results.sort((a, b) => new Date(b._touchedAt).getTime() - new Date(a._touchedAt).getTime());\n break;\n case \"important\":\n results.sort((a, b) => b.importance - a.importance);\n break;\n case \"hybrid\":\n case \"semantic\":\n default:\n results.sort(\n (a, b) =>\n b.importance - a.importance || new Date(b._touchedAt).getTime() - new Date(a._touchedAt).getTime()\n );\n break;\n }\n\n const nowStr = new Date().toISOString();\n const toTouch = results.slice(0, query.limit ?? 10);\n for (const r of toTouch) {\n r._touchedAt = nowStr;\n await this.redis.set(this._memKey(r.id), JSON.stringify(r));\n }\n\n const limit = query.limit ?? 10;\n return results.slice(0, limit).map((r) => this._toExternal(r));\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n let allRecords: MemoryRecord[] = [];\n\n if (filter?.actorId) {\n allRecords = await this._getActorRecords(filter.actorId);\n } else {\n const actorIds = await this._listActors();\n for (const actorId of actorIds) {\n const records = await this._getActorRecords(actorId);\n allRecords.push(...records);\n }\n }\n\n const now = new Date();\n let results = allRecords.filter((r) => !r.expiresAt || new Date(r.expiresAt) > now);\n\n if (filter?.memoryType) {\n results = results.filter((r) => r.memoryType === filter.memoryType);\n }\n if (filter?.minImportance !== undefined) {\n results = results.filter((r) => r.importance >= filter.minImportance!);\n }\n\n return results.length;\n }\n\n async close(): Promise<void> {\n }\n\n private _actorsSetKey(): string {\n return `${this.prefix}:actors`;\n }\n\n private _actorKey(actorId: string): string {\n const safe = actorId.replace(/[^a-zA-Z0-9_\\-.,@]/g, \"_\");\n return `${this.prefix}:a:${safe}`;\n }\n\n private _memKey(id: string): string {\n return `${this.prefix}:m:${id}`;\n }\n\n private async _getActorRecords(actorId: string): Promise<MemoryRecord[]> {\n const ids = await this.redis.smembers(this._actorKey(actorId));\n if (ids.length === 0) return [];\n\n const keys = ids.map((id) => this._memKey(id));\n const raws = await this.redis.mget(...keys);\n\n const records: MemoryRecord[] = [];\n for (const raw of raws) {\n if (raw) {\n try {\n records.push(JSON.parse(raw) as MemoryRecord);\n } catch {\n // Skip corrupted records\n }\n }\n }\n\n return records;\n }\n\n private async _listActors(): Promise<string[]> {\n return this.redis.smembers(this._actorsSetKey());\n }\n\n private _toExternal(record: MemoryRecord): Memory {\n const { _touchedAt: _, ...rest } = record;\n return {\n ...rest,\n createdAt: new Date(record.createdAt),\n expiresAt: record.expiresAt ? new Date(record.expiresAt) : undefined,\n };\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { storageError, notFound } from \"../../errors.js\";\n\ntype QdrantClient = {\n createCollection(name: string, config: { vectors: { size: number; distance: string } }): Promise<unknown>;\n getCollection(name: string): Promise<unknown>;\n upsert(name: string, opts: { points: { id: string; vector: number[]; payload: Record<string, unknown> }[] }): Promise<unknown>;\n retrieve(name: string, opts: { ids: string[] }): Promise<unknown[]>;\n search(name: string, opts: { vector: number[]; limit: number; filter?: { must: unknown[] } }): Promise<unknown[]>;\n delete(name: string, opts: { points: string[] }): Promise<unknown>;\n count(name: string, opts?: { filter?: { must: unknown[] } }): Promise<{ count: number }>;\n scroll(name: string, opts?: { filter?: { must: unknown[] }; limit?: number }): Promise<{ points: unknown[] }>;\n};\n\nexport interface QdrantStorageConfig {\n client: QdrantClient;\n collectionName?: string;\n vectorSize?: number;\n}\n\ninterface QdrantPoint {\n id: string;\n payload: Record<string, unknown>;\n vector?: number[];\n}\n\nexport class QdrantStorageAdapter implements StorageProvider {\n private client: QdrantClient;\n private collectionName: string;\n private vectorSize: number;\n private _idToQdrant = new Map<string, string>();\n\n constructor(config: QdrantStorageConfig) {\n this.client = config.client;\n this.collectionName = config.collectionName ?? \"memstack\";\n this.vectorSize = config.vectorSize ?? 1536;\n }\n\n async initialize(): Promise<void> {\n try {\n await this.client.getCollection(this.collectionName);\n } catch {\n await this.client.createCollection(this.collectionName, {\n vectors: { size: this.vectorSize, distance: \"Cosine\" },\n });\n }\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const memory: Memory = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n };\n\n const qdrantId = crypto.randomUUID();\n await this.client.upsert(this.collectionName, {\n points: [\n {\n id: qdrantId,\n vector: input.embedding ?? new Array(this.vectorSize).fill(0),\n payload: this._toPayload(memory),\n },\n ],\n });\n\n this._idToQdrant.set(memory.id, qdrantId);\n return memory;\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n const now = new Date();\n const points: { id: string; vector: number[]; payload: Record<string, unknown> }[] = [];\n\n for (const input of inputs) {\n const memory: Memory = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n };\n results.push(memory);\n const qid = crypto.randomUUID();\n points.push({\n id: qid,\n vector: input.embedding ?? new Array(this.vectorSize).fill(0),\n payload: this._toPayload(memory),\n });\n this._idToQdrant.set(memory.id, qid);\n }\n\n await this.client.upsert(this.collectionName, { points });\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const qdrantId = this._idToQdrant.get(id);\n if (qdrantId) {\n const points = await this.client.retrieve(this.collectionName, { ids: [qdrantId] });\n if (points && points.length > 0) {\n const point = points[0] as QdrantPoint;\n if (point.payload.expiresAt && new Date(point.payload.expiresAt as string) <= new Date()) return null;\n return this._fromPoint(point);\n }\n }\n return null;\n }\n\n async delete(id: string): Promise<void> {\n const qdrantId = this._idToQdrant.get(id);\n if (!qdrantId) throw notFound(\"Memory\", id);\n await this.client.delete(this.collectionName, { points: [qdrantId] });\n this._idToQdrant.delete(id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const qdrantIds: string[] = [];\n for (const id of ids) {\n const qid = this._idToQdrant.get(id);\n if (qid) { qdrantIds.push(qid); this._idToQdrant.delete(id); }\n }\n if (qdrantIds.length === 0) return 0;\n await this.client.delete(this.collectionName, { points: qdrantIds });\n return qdrantIds.length;\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n const must: unknown[] = [];\n\n if (query.actorId) {\n must.push({ key: \"actorId\", match: { value: query.actorId } });\n }\n\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n must.push({ key: \"memoryType\", match: { any: query.memoryTypes } });\n }\n\n if (query.tags && query.tags.length > 0) {\n must.push({ key: \"tags\", match: { any: query.tags } });\n }\n\n const filter = must.length > 0 ? { must } : undefined;\n const limit = query.limit ?? 10;\n\n if (query.strategy === \"semantic\" || query.strategy === \"hybrid\") {\n const vector = embedding ?? new Array(this.vectorSize).fill(0);\n const results = await this.client.search(this.collectionName, {\n vector,\n limit,\n filter: filter as { must: unknown[] } | undefined,\n });\n const points = results as QdrantPoint[];\n return points.map((p) => this._fromPoint(p));\n }\n\n const vector = new Array(this.vectorSize).fill(0);\n const results = await this.client.search(this.collectionName, {\n vector,\n limit: 10000,\n filter: filter as { must: unknown[] } | undefined,\n });\n let points = results as QdrantPoint[];\n\n switch (query.strategy) {\n case \"recent\":\n points.sort((a, b) => {\n const aTime = new Date(a.payload.createdAt as string).getTime();\n const bTime = new Date(b.payload.createdAt as string).getTime();\n return bTime - aTime;\n });\n break;\n case \"important\":\n points.sort((a, b) => (b.payload.importance as number) - (a.payload.importance as number));\n break;\n }\n\n return points.slice(0, limit).map((p) => this._fromPoint(p));\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const must: unknown[] = [];\n\n if (filter?.actorId) {\n must.push({ key: \"actorId\", match: { value: filter.actorId } });\n }\n\n if (filter?.memoryType) {\n must.push({ key: \"memoryType\", match: { value: filter.memoryType } });\n }\n\n if (filter?.minImportance !== undefined) {\n must.push({ key: \"importance\", range: { gte: filter.minImportance } });\n }\n\n const filterObj = must.length > 0 ? { must } : undefined;\n const result = await this.client.count(this.collectionName, filterObj ? { filter: filterObj } : undefined);\n return result.count;\n }\n\n async close(): Promise<void> {}\n\n private _toPayload(memory: Memory): Record<string, unknown> {\n return {\n _id: memory.id,\n actorId: memory.actorId,\n memoryType: memory.memoryType,\n importance: memory.importance,\n emotionalValence: memory.emotionalValence,\n tags: memory.tags,\n content: memory.content,\n metadata: memory.metadata ?? {},\n createdAt: memory.createdAt.toISOString(),\n sourceId: memory.sourceId ?? null,\n expiresAt: memory.expiresAt?.toISOString() ?? null,\n };\n }\n\n private _fromPoint(point: QdrantPoint): Memory {\n const p = point.payload;\n return {\n id: (p._id as string) ?? point.id,\n actorId: p.actorId as string,\n memoryType: p.memoryType as MemoryType,\n content: p.content as string,\n importance: p.importance as number,\n emotionalValence: (p.emotionalValence as number) ?? 0,\n tags: (p.tags as string[]) ?? [],\n embedding: point.vector as number[] | undefined,\n sourceId: (p.sourceId as string | undefined) ?? undefined,\n metadata: (p.metadata as Record<string, unknown>) ?? {},\n expiresAt: p.expiresAt ? new Date(p.expiresAt as string) : undefined,\n createdAt: new Date(p.createdAt as string),\n };\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { storageError, notFound } from \"../../errors.js\";\n\ntype Neo4jDriver = {\n session(opts?: { database?: string }): Neo4jSession;\n close(): Promise<void>;\n};\n\ntype Neo4jSession = {\n run(query: string, params?: Record<string, unknown>): Promise<{ records: { get(key: string): unknown; toObject(): Record<string, unknown> }[] }>;\n close(): Promise<void>;\n};\n\ninterface Neo4jMemoryNode {\n id: string;\n actorId: string;\n memoryType: string;\n content: string;\n importance: number;\n emotionalValence: number;\n tags: string[];\n sourceId: string | null;\n metadata: string;\n expiresAt: string | null;\n createdAt: string;\n embedding: number[] | null;\n}\n\nexport interface Neo4jStorageConfig {\n driver: Neo4jDriver;\n database?: string;\n}\n\nexport class Neo4jStorageAdapter implements StorageProvider {\n private driver: Neo4jDriver;\n private database: string;\n\n constructor(config: Neo4jStorageConfig) {\n this.driver = config.driver;\n this.database = config.database ?? \"neo4j\";\n }\n\n async initialize(): Promise<void> {\n const session = this.driver.session({ database: this.database });\n try {\n await session.run(\n \"CREATE CONSTRAINT memory_id IF NOT EXISTS FOR (m:Memory) REQUIRE m.id IS UNIQUE\"\n );\n await session.run(\n `CREATE VECTOR INDEX memory_embedding IF NOT EXISTS FOR (m:Memory) ON m.embedding\n OPTIONS { indexConfig: { \\`vector.dimensions\\`: 1536, \\`vector.similarity_function\\`: \"cosine\" } }`\n );\n } finally {\n await session.close();\n }\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date().toISOString();\n const id = input.id ?? this.generateId();\n\n const props: Record<string, unknown> = {\n actorId: input.actorId,\n memoryType: input.memoryType ?? \"interaction\",\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n sourceId: input.sourceId ?? null,\n metadata: JSON.stringify(input.metadata ?? {}),\n expiresAt: input.expiresAt?.toISOString() ?? null,\n createdAt: input.createdAt?.toISOString() ?? now,\n embedding: input.embedding ?? null,\n };\n\n const updateProps = { ...props };\n if (!input.createdAt) {\n delete updateProps.createdAt;\n }\n\n const session = this.driver.session({ database: this.database });\n try {\n await session.run(\n \"MERGE (m:Memory {id: $id}) ON CREATE SET m += $props ON MATCH SET m += $updateProps\",\n { id, props, updateProps }\n );\n } finally {\n await session.close();\n }\n\n return {\n id,\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? new Date(now),\n };\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const session = this.driver.session({ database: this.database });\n try {\n const result = await session.run(\n \"MATCH (m:Memory {id: $id}) WHERE m.expiresAt IS NULL OR m.expiresAt > datetime() RETURN m\",\n { id }\n );\n if (result.records.length === 0) return null;\n const raw = result.records[0].get(\"m\") as Record<string, unknown>;\n const node = (raw.properties ?? raw) as Neo4jMemoryNode;\n return this._nodeToMemory(node);\n } finally {\n await session.close();\n }\n }\n\n async delete(id: string): Promise<void> {\n const session = this.driver.session({ database: this.database });\n try {\n const check = await session.run(\"MATCH (m:Memory {id: $id}) RETURN m.id as id\", { id });\n if (check.records.length === 0) throw notFound(\"Memory\", id);\n await session.run(\"MATCH (m:Memory {id: $id}) DETACH DELETE m\", { id });\n } finally {\n await session.close();\n }\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const session = this.driver.session({ database: this.database });\n try {\n const result = await session.run(\n \"UNWIND $ids AS mid MATCH (m:Memory {id: mid}) DETACH DELETE m RETURN count(m) as deleted\",\n { ids }\n );\n const record = result.records[0];\n if (!record) return 0;\n return record.get(\"deleted\") as number;\n } finally {\n await session.close();\n }\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n const session = this.driver.session({ database: this.database });\n try {\n const limit = Math.floor(query.limit ?? 10);\n const strategy = query.strategy ?? \"hybrid\";\n\n if (strategy === \"semantic\" && embedding) {\n return this._semanticRetrieve(session, embedding, query, limit);\n }\n\n const strLimit = String(limit);\n let cypher: string;\n const params: Record<string, unknown> = {};\n\n const hasActor = query.actorId !== undefined;\n\n switch (strategy) {\n case \"recent\":\n if (hasActor) {\n cypher = \"MATCH (m:Memory) WHERE m.actorId = $actorId RETURN m ORDER BY m.createdAt DESC LIMIT \" + strLimit;\n params.actorId = query.actorId;\n } else {\n cypher = \"MATCH (m:Memory) RETURN m ORDER BY m.createdAt DESC LIMIT \" + strLimit;\n }\n break;\n case \"important\":\n if (hasActor) {\n cypher = \"MATCH (m:Memory) WHERE m.actorId = $actorId RETURN m ORDER BY m.importance DESC LIMIT \" + strLimit;\n params.actorId = query.actorId;\n } else {\n cypher = \"MATCH (m:Memory) RETURN m ORDER BY m.importance DESC LIMIT \" + strLimit;\n }\n break;\n case \"hybrid\":\n default:\n if (embedding) {\n return this._semanticRetrieve(session, embedding, query, limit);\n }\n if (hasActor) {\n cypher = \"MATCH (m:Memory) WHERE m.actorId = $actorId RETURN m ORDER BY m.importance DESC, m.createdAt DESC LIMIT \" + strLimit;\n params.actorId = query.actorId;\n } else {\n cypher = \"MATCH (m:Memory) RETURN m ORDER BY m.importance DESC, m.createdAt DESC LIMIT \" + strLimit;\n }\n break;\n }\n\n const result = await session.run(cypher, params);\n const memories = result.records.map((r) => {\n const raw = r.get(\"m\") as Record<string, unknown>;\n const node = (raw.properties ?? raw) as Neo4jMemoryNode;\n return this._nodeToMemory(node);\n });\n\n return this._postFilter(memories, query);\n } finally {\n await session.close();\n }\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const session = this.driver.session({ database: this.database });\n try {\n const conditions: string[] = [];\n const params: Record<string, unknown> = {};\n\n if (filter?.actorId) {\n conditions.push(\"m.actorId = $actorId\");\n params.actorId = filter.actorId;\n }\n if (filter?.memoryType) {\n conditions.push(\"m.memoryType = $memoryType\");\n params.memoryType = filter.memoryType;\n }\n if (filter?.minImportance !== undefined) {\n conditions.push(\"m.importance >= $minImportance\");\n params.minImportance = filter.minImportance;\n }\n\n const where = conditions.length > 0 ? `WHERE ${conditions.join(\" AND \")}` : \"\";\n const result = await session.run(\n `MATCH (m:Memory) ${where} RETURN count(m) as count`,\n params\n );\n const rawCount = result.records[0].get(\"count\");\n return typeof rawCount === \"number\" ? rawCount : Number(rawCount);\n } finally {\n await session.close();\n }\n }\n\n async graphQuery(cypher: string, params?: Record<string, unknown>): Promise<Memory[]> {\n const session = this.driver.session({ database: this.database });\n try {\n const result = await session.run(cypher, params);\n return result.records.map((r) => {\n const obj = r.toObject();\n const mKey = Object.keys(obj).find((k) => obj[k] && typeof obj[k] === \"object\" && \"properties\" in (obj[k] as object));\n if (mKey) {\n const raw = obj[mKey] as Record<string, unknown>;\n const node = (raw.properties ?? raw) as Neo4jMemoryNode;\n return this._nodeToMemory(node);\n }\n return this._nodeToMemory(obj as unknown as Neo4jMemoryNode);\n });\n } finally {\n await session.close();\n }\n }\n\n async close(): Promise<void> {\n await this.driver.close();\n }\n\n private async _semanticRetrieve(\n session: Neo4jSession,\n embedding: number[],\n query: MemoryRetrieveQuery,\n limit: number\n ): Promise<Memory[]> {\n const hasActor = query.actorId !== undefined;\n const strLimit = String(limit);\n const cypher = hasActor\n ? `CALL db.index.vector.queryNodes('memory_embedding', ${strLimit}, $embedding) YIELD node, score\n MATCH (node) WHERE node.actorId = $actorId\n RETURN node ORDER BY score LIMIT ${strLimit}`\n : `CALL db.index.vector.queryNodes('memory_embedding', ${strLimit}, $embedding) YIELD node, score\n RETURN node ORDER BY score LIMIT ${strLimit}`;\n const params: Record<string, unknown> = { embedding };\n if (hasActor) params.actorId = query.actorId;\n\n const result = await session.run(cypher, params);\n const memories = result.records.map((r) => {\n const raw = r.get(\"node\") as Record<string, unknown>;\n const node = (raw.properties ?? raw) as Neo4jMemoryNode;\n return this._nodeToMemory(node);\n });\n\n return this._postFilter(memories, query);\n }\n\n private _postFilter(memories: Memory[], query: MemoryRetrieveQuery): Memory[] {\n const now = new Date();\n let results = memories.filter((m) => !m.expiresAt || m.expiresAt > now);\n\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n results = results.filter((m) => query.memoryTypes!.includes(m.memoryType));\n }\n if (query.tags && query.tags.length > 0) {\n results = results.filter((m) => m.tags?.some((t) => query.tags!.includes(t)));\n }\n if (query.query) {\n const q = query.query.toLowerCase();\n results = results.filter((m) => m.content.toLowerCase().includes(q));\n }\n\n return results;\n }\n\n private _nodeToMemory(node: Neo4jMemoryNode): Memory {\n return {\n id: node.id,\n actorId: node.actorId,\n memoryType: (node.memoryType ?? \"interaction\") as MemoryType,\n content: node.content,\n importance: node.importance ?? 0.5,\n emotionalValence: node.emotionalValence ?? 0,\n tags: Array.isArray(node.tags) ? node.tags : [],\n embedding: node.embedding ?? undefined,\n sourceId: node.sourceId ?? undefined,\n metadata: typeof node.metadata === \"string\" ? JSON.parse(node.metadata) : (node.metadata ?? {}),\n expiresAt: node.expiresAt ? new Date(node.expiresAt) : undefined,\n createdAt: new Date(node.createdAt),\n };\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { notFound } from \"../../errors.js\";\n\ntype WeaviateClient = {\n collections: {\n create(opts: { name: string; properties: { name: string; dataType: string }[]; vectorizers?: unknown }): Promise<unknown>;\n get(name: string): WeaviateCollection;\n delete(name: string): Promise<void>;\n exists(name: string): Promise<boolean>;\n listAll(): Promise<string[]>;\n };\n};\n\ntype WeaviateCollection = {\n data: {\n insert(opts: { properties: Record<string, unknown>; vectors: number[]; id?: string }): Promise<string>;\n deleteById(id: string): Promise<void>;\n };\n query: {\n fetchObjectById(id: string, opts?: { includeVector?: boolean }): Promise<{ properties: Record<string, unknown>; vectors?: { default?: number[] } } | null>;\n fetchObjects(opts: { limit: number; filters?: unknown; includeVector?: boolean }): Promise<{ objects: { uuid: string; properties: Record<string, unknown>; vectors?: { default?: number[] }; metadata?: { creationTimeUnix: number } }[] }>;\n nearVector(vector: number[], opts: { limit: number; returnProperties?: string[]; returnMetadata?: string[]; filters?: unknown; includeVector?: boolean }): Promise<{ objects: { uuid: string; properties: Record<string, unknown>; vectors?: { default?: number[] }; metadata?: { creationTimeUnix: number } }[] }>;\n };\n config: {\n get(): Promise<{ name: string }>;\n update(opts: { vectorIndexConfig: Record<string, unknown> }): Promise<void>;\n };\n};\n\nexport interface WeaviateStorageConfig {\n client: WeaviateClient;\n className?: string;\n}\n\nexport class WeaviateStorageAdapter implements StorageProvider {\n private client: WeaviateClient;\n private className: string;\n private _collection: WeaviateCollection | null = null;\n private _idToWv = new Map<string, string>();\n\n constructor(config: WeaviateStorageConfig) {\n this.client = config.client;\n this.className = config.className ?? \"MemstackMemory\";\n }\n\n async initialize(): Promise<void> {\n this._collection = this.client.collections.get(this.className);\n }\n\n private collection(): WeaviateCollection {\n if (!this._collection) {\n this._collection = this.client.collections.get(this.className);\n }\n return this._collection;\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const memory: Memory = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n };\n\n const wvId = await this.collection().data.insert({\n id: crypto.randomUUID(),\n properties: this._toProperties(memory),\n vectors: input.embedding ?? new Array(1536).fill(0),\n });\n this._idToWv.set(memory.id, wvId);\n\n return memory;\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const wvId = this._idToWv.get(id);\n if (!wvId) return null;\n\n const obj = await this.collection().query.fetchObjectById(wvId, { includeVector: true });\n if (!obj) return null;\n\n const memory = this._fromProperties(obj.properties, obj.vectors?.default ?? undefined);\n if (memory.expiresAt && memory.expiresAt <= new Date()) return null;\n return memory;\n }\n\n async delete(id: string): Promise<void> {\n const wvId = this._idToWv.get(id);\n if (!wvId) throw notFound(\"Memory\", id);\n await this.collection().data.deleteById(wvId);\n this._idToWv.delete(id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n let count = 0;\n for (const id of ids) {\n try {\n await this.delete(id);\n count++;\n } catch {\n //\n }\n }\n return count;\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n const strategy = query.strategy ?? \"recent\";\n const limit = query.limit ?? 10;\n\n if ((strategy === \"semantic\" || strategy === \"hybrid\") && embedding) {\n const filters = this._buildFilter(query);\n const result = await this.collection().query.nearVector(embedding, {\n limit: 100,\n filters,\n includeVector: true,\n });\n\n let objects = result.objects.map((o) => ({\n ...this._fromProperties(o.properties, o.vectors?.default),\n _score: o.metadata?.creationTimeUnix ?? 0,\n }));\n\n objects = objects.filter((o) => !o.expiresAt || o.expiresAt > new Date());\n\n if (query.actorId) {\n objects = objects.filter((o) => o.actorId === query.actorId);\n }\n\n if (strategy === \"hybrid\") {\n objects.sort((a, b) => (b._score + b.importance) - (a._score + a.importance));\n }\n\n return objects.slice(0, limit);\n }\n\n const filters = this._buildFilter(query);\n const result = await this.collection().query.fetchObjects({\n limit: 10000,\n filters,\n });\n\n let objects = result.objects.map((o) => ({\n ...this._fromProperties(o.properties, o.vectors?.default),\n _createdAt: o.properties.createdAt as string,\n _importance: (o.properties.importance as number) ?? 0.5,\n }));\n\n objects = objects.filter((o) => !o.expiresAt || o.expiresAt > new Date());\n\n if (query.actorId) {\n objects = objects.filter((o) => o.actorId === query.actorId);\n }\n\n switch (strategy) {\n case \"recent\":\n objects.sort((a, b) => new Date(b._createdAt).getTime() - new Date(a._createdAt).getTime());\n break;\n case \"important\":\n objects.sort((a, b) => b._importance - a._importance);\n break;\n case \"hybrid\":\n case \"semantic\":\n default:\n objects.sort((a, b) => b._importance - a._importance || new Date(b._createdAt).getTime() - new Date(a._createdAt).getTime());\n break;\n }\n\n return objects.slice(0, limit);\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const and: unknown[] = [];\n if (filter?.actorId) {\n and.push({ operator: \"Equal\", target: { property: \"actorId\" }, value: filter.actorId });\n }\n if (filter?.memoryType) {\n and.push({ operator: \"Equal\", target: { property: \"memoryType\" }, value: filter.memoryType });\n }\n if (filter?.minImportance !== undefined) {\n and.push({ operator: \"GreaterThanEqual\", target: { property: \"importance\" }, value: filter.minImportance });\n }\n\n const finalFilter = and.length === 0 ? undefined : and.length === 1 ? and[0] : { operator: \"And\", filters: and };\n const result = await this.collection().query.fetchObjects({\n limit: 10000,\n filters: finalFilter,\n });\n return result.objects.length;\n }\n\n async close(): Promise<void> {\n //\n }\n\n private _buildFilter(query: MemoryRetrieveQuery): unknown {\n const and: unknown[] = [];\n\n if (query.actorId) {\n and.push({ operator: \"Equal\", target: { property: \"actorId\" }, value: query.actorId });\n }\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n if (query.memoryTypes.length === 1) {\n and.push({ operator: \"Equal\", target: { property: \"memoryType\" }, value: query.memoryTypes[0] });\n } else {\n and.push({\n operator: \"Or\",\n filters: query.memoryTypes.map((t) => ({ operator: \"Equal\", target: { property: \"memoryType\" }, value: t })),\n });\n }\n }\n if (query.tags && query.tags.length > 0) {\n if (query.tags.length === 1) {\n and.push({ operator: \"ContainsAny\", target: { property: \"tags\" }, values: query.tags });\n } else {\n and.push({\n operator: \"Or\",\n filters: query.tags.map((t) => ({ operator: \"ContainsAny\", target: { property: \"tags\" }, values: [t] })),\n });\n }\n }\n if (query.query) {\n and.push({ operator: \"Like\", target: { property: \"content\" }, value: `*${query.query}*` });\n }\n\n return and.length === 0 ? undefined : and.length === 1 ? and[0] : { operator: \"And\", filters: and };\n }\n\n private _toProperties(memory: Memory): Record<string, unknown> {\n return {\n _memstackId: memory.id,\n actorId: memory.actorId,\n memoryType: memory.memoryType,\n content: memory.content,\n importance: memory.importance,\n emotionalValence: memory.emotionalValence,\n tags: memory.tags,\n metadata: JSON.stringify(memory.metadata ?? {}),\n sourceId: memory.sourceId ?? null,\n expiresAt: memory.expiresAt?.toISOString() ?? null,\n createdAt: memory.createdAt.toISOString(),\n };\n }\n\n private _fromProperties(props: Record<string, unknown>, vectors?: number[]): Memory {\n return {\n id: (props._memstackId as string) ?? \"\",\n actorId: (props.actorId as string) ?? \"\",\n memoryType: (props.memoryType as MemoryType) ?? \"interaction\",\n content: (props.content as string) ?? \"\",\n importance: (props.importance as number) ?? 0.5,\n emotionalValence: (props.emotionalValence as number) ?? 0,\n tags: Array.isArray(props.tags) ? (props.tags as string[]) : [],\n embedding: vectors,\n sourceId: (props.sourceId as string) ?? undefined,\n metadata: typeof props.metadata === \"string\" ? JSON.parse(props.metadata as string) : (props.metadata ?? {}),\n expiresAt: props.expiresAt ? new Date(props.expiresAt as string) : undefined,\n createdAt: new Date((props.createdAt as string) ?? new Date().toISOString()),\n };\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { storageError, notFound, configError } from \"../../errors.js\";\n\ntype LanceDBConnection = {\n createTable(name: string, data: { id: string; vector: number[]; actor_id: string; memory_type: string; content: string; importance: number; emotional_valence: number; tags: string; source_id: string; metadata: string; expires_at: string; created_at: string }[]): Promise<LanceDBTable>;\n openTable(name: string): Promise<LanceDBTable>;\n tableNames(): Promise<string[]>;\n};\n\ntype LanceDBTable = {\n add(data: { id: string; vector: number[]; actor_id: string; memory_type: string; content: string; importance: number; emotional_valence: number; tags: string; source_id: string; metadata: string; expires_at: string; created_at: string }[]): Promise<void>;\n search(vector: number[]): { limit(n: number): { where(predicate: string): { execute(): Promise<LanceDBMemoryRow[]>; prefilter(value: boolean): { execute(): Promise<LanceDBMemoryRow[]> } } } };\n delete(predicate: string): Promise<void>;\n countRows(predicate?: string): Promise<number>;\n};\n\nexport interface LanceDBStorageConfig {\n connection: LanceDBConnection;\n tableName?: string;\n}\n\ninterface LanceDBMemoryRow {\n id: string;\n vector: number[];\n actor_id: string;\n memory_type: string;\n content: string;\n importance: number;\n emotional_valence: number;\n tags: string;\n source_id: string;\n metadata: string;\n expires_at: string;\n created_at: string;\n _distance?: number;\n}\n\nexport class LanceDBStorageAdapter implements StorageProvider {\n private connection: LanceDBConnection;\n private table!: LanceDBTable;\n private tableName: string;\n private _zeroVector: number[];\n\n constructor(config: LanceDBStorageConfig) {\n if (!config.connection) {\n throw configError(\"LanceDBStorageAdapter requires a LanceDB connection instance\");\n }\n this.connection = config.connection;\n this.tableName = config.tableName ?? \"memstack\";\n this._zeroVector = new Array(1536).fill(0);\n }\n\n async initialize(): Promise<void> {\n const tables = await this.connection.tableNames();\n if (!tables.includes(this.tableName)) {\n this.table = await this.connection.createTable(this.tableName, []);\n } else {\n this.table = await this.connection.openTable(this.tableName);\n }\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const id = input.id ?? this.generateId();\n\n const row = {\n id,\n vector: input.embedding ?? this._zeroVector,\n actor_id: input.actorId,\n memory_type: input.memoryType ?? \"interaction\",\n content: input.content,\n importance: input.importance ?? 0.5,\n emotional_valence: input.emotionalValence ?? 0,\n tags: JSON.stringify(input.tags ?? []),\n source_id: input.sourceId ?? \"\",\n metadata: JSON.stringify(input.metadata ?? {}),\n expires_at: input.expiresAt?.toISOString() ?? \"\",\n created_at: now.toISOString(),\n };\n\n await this.table.add([row]);\n\n return {\n id,\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n };\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const results = await this.table.search(this._zeroVector).limit(1).where(`id = \"${id}\"`).prefilter(true).execute();\n if (results.length === 0) return null;\n\n const row = results[0];\n if (row.expires_at) {\n const expiresAt = new Date(row.expires_at);\n if (expiresAt <= new Date()) {\n await this.table.delete(`id = \"${id}\"`);\n return null;\n }\n }\n\n return this._rowToMemory(row);\n }\n\n async delete(id: string): Promise<void> {\n const existing = await this.get(id);\n if (!existing) throw notFound(\"Memory\", id);\n await this.table.delete(`id = \"${id}\"`);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const before = await this.table.countRows();\n const inClause = ids.map((id) => `\"${id}\"`).join(\", \");\n await this.table.delete(`id IN (${inClause})`);\n const after = await this.table.countRows();\n return before - after;\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n const conditions: string[] = [];\n if (query.actorId) {\n conditions.push(`actor_id = \"${query.actorId}\"`);\n }\n\n const where = conditions.length > 0 ? conditions.join(\" AND \") : \"\";\n\n const isSemantic = (query.strategy === \"semantic\" || query.strategy === \"hybrid\") && embedding && embedding.length > 0;\n const searchVec = isSemantic ? embedding! : this._zeroVector;\n const scanLimit = isSemantic ? (query.limit ?? 10) : 10000;\n\n const results = await this.table\n .search(searchVec)\n .limit(scanLimit)\n .where(where)\n .execute();\n\n let rows = results as LanceDBMemoryRow[];\n\n const now = new Date();\n rows = rows.filter((r) => !r.expires_at || new Date(r.expires_at) > now);\n\n if (query.actorId) {\n rows = rows.filter((r) => r.actor_id === query.actorId);\n }\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n rows = rows.filter((r) => query.memoryTypes!.includes(r.memory_type as MemoryType));\n }\n if (query.tags && query.tags.length > 0) {\n rows = rows.filter((r) => {\n const tags: string[] = JSON.parse(r.tags);\n return tags.some((t) => query.tags!.includes(t));\n });\n }\n if (query.query) {\n const q = query.query.toLowerCase();\n rows = rows.filter((r) => r.content.toLowerCase().includes(q));\n }\n\n const limit = query.limit ?? 10;\n\n if (isSemantic && query.strategy === \"hybrid\") {\n rows.sort((a, b) => {\n const scoreA = (a._distance ?? 0) + a.importance;\n const scoreB = (b._distance ?? 0) + b.importance;\n return scoreB - scoreA;\n });\n } else if (query.strategy === \"recent\") {\n rows.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());\n } else if (query.strategy === \"important\") {\n rows.sort((a, b) => b.importance - a.importance);\n } else if (!isSemantic) {\n rows.sort((a, b) => b.importance - a.importance || new Date(b.created_at).getTime() - new Date(a.created_at).getTime());\n }\n\n return rows.slice(0, limit).map((r) => this._rowToMemory(r));\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const conditions: string[] = [];\n if (filter?.actorId) {\n conditions.push(`actor_id = \"${filter.actorId}\"`);\n }\n\n const where = conditions.length > 0 ? conditions.join(\" AND \") : \"\";\n\n const results = await this.table\n .search(this._zeroVector)\n .limit(10000)\n .where(where)\n .execute();\n\n const now = new Date();\n let rows = results.filter((r) => !r.expires_at || new Date(r.expires_at) > now);\n\n if (filter?.actorId) {\n rows = rows.filter((r) => r.actor_id === filter.actorId);\n }\n if (filter?.memoryType) {\n rows = rows.filter((r) => r.memory_type === filter.memoryType);\n }\n if (filter?.minImportance !== undefined) {\n rows = rows.filter((r) => r.importance >= filter.minImportance!);\n }\n\n return rows.length;\n }\n\n async close(): Promise<void> {\n }\n\n private _rowToMemory(row: LanceDBMemoryRow): Memory {\n return {\n id: row.id,\n actorId: row.actor_id,\n memoryType: row.memory_type as MemoryType,\n content: row.content,\n importance: row.importance,\n emotionalValence: row.emotional_valence,\n tags: row.tags ? JSON.parse(row.tags) : [],\n embedding: row.vector && row.vector.length > 0 ? row.vector : undefined,\n sourceId: row.source_id || undefined,\n metadata: row.metadata ? JSON.parse(row.metadata) : {},\n expiresAt: row.expires_at ? new Date(row.expires_at) : undefined,\n createdAt: new Date(row.created_at),\n };\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { storageError, notFound } from \"../../errors.js\";\n\ntype MongoCollection = {\n insertOne(doc: Record<string, unknown>): Promise<{ insertedId: string }>;\n findOne(filter: Record<string, unknown>): Promise<Record<string, unknown> | null>;\n updateOne(filter: Record<string, unknown>, update: Record<string, unknown>, opts?: { upsert?: boolean }): Promise<{ upsertedId?: string }>;\n deleteOne(filter: Record<string, unknown>): Promise<{ deletedCount: number }>;\n deleteMany(filter: Record<string, unknown>): Promise<{ deletedCount: number }>;\n find(filter: Record<string, unknown>): { sort(sort: Record<string, number>): { limit(n: number): { toArray(): Promise<Record<string, unknown>[]> } } };\n countDocuments(filter?: Record<string, unknown>): Promise<number>;\n aggregate(pipeline: Record<string, unknown>[]): { toArray(): Promise<Record<string, unknown>[]> };\n};\n\nexport interface MongoDBStorageConfig {\n collection: MongoCollection;\n vectorDimensions?: number;\n}\n\ninterface MongoDoc {\n _id: string;\n actorId: string;\n memoryType: MemoryType;\n content: string;\n importance: number;\n emotionalValence: number;\n tags: string[];\n embedding?: number[];\n sourceId?: string;\n metadata?: Record<string, unknown>;\n expiresAt?: Date;\n createdAt: Date;\n}\n\nexport class MongoDBStorageAdapter implements StorageProvider {\n private collection: MongoCollection;\n private vectorDimensions: number;\n\n constructor(config: MongoDBStorageConfig) {\n this.collection = config.collection;\n this.vectorDimensions = config.vectorDimensions ?? 1536;\n }\n\n async initialize(): Promise<void> {\n try {\n const col = this.collection as MongoCollection & { createSearchIndex?: (def: Record<string, unknown>) => Promise<unknown> };\n if (col.createSearchIndex) {\n await col.createSearchIndex({\n name: \"memstack_vector\",\n definition: {\n mappings: {\n dynamic: false,\n fields: {\n embedding: {\n type: \"knnVector\",\n dimensions: this.vectorDimensions,\n similarity: \"cosine\",\n },\n },\n },\n },\n });\n }\n } catch {}\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date();\n const memory: Memory = {\n id: input.id ?? this.generateId(),\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? now,\n };\n await this.collection.insertOne(this.toDoc(memory) as unknown as Record<string, unknown>);\n return memory;\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const doc = await this.collection.findOne({ _id: id });\n if (!doc) return null;\n const memory = this.toMemory(doc as unknown as MongoDoc);\n if (memory.expiresAt && memory.expiresAt <= new Date()) return null;\n return memory;\n }\n\n async delete(id: string): Promise<void> {\n const result = await this.collection.deleteOne({ _id: id });\n if (result.deletedCount === 0) throw notFound(\"Memory\", id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const result = await this.collection.deleteMany({ _id: { $in: ids } });\n return result.deletedCount;\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n if (query.strategy === \"semantic\" && embedding) {\n return this.retrieveSemantic(query, embedding);\n }\n return this.retrieveStandard(query);\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const mongoFilter: Record<string, unknown> = {};\n if (filter?.actorId) mongoFilter.actorId = filter.actorId;\n if (filter?.memoryType) mongoFilter.memoryType = filter.memoryType;\n if (filter?.minImportance !== undefined) {\n mongoFilter.importance = { $gte: filter.minImportance };\n }\n return this.collection.countDocuments(mongoFilter);\n }\n\n async close(): Promise<void> {}\n\n private async retrieveStandard(query: MemoryRetrieveQuery): Promise<Memory[]> {\n const filter: Record<string, unknown> = {};\n if (query.actorId) filter.actorId = query.actorId;\n\n if (query.tags && query.tags.length > 0) {\n filter.tags = { $in: query.tags };\n }\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n filter.memoryType = { $in: query.memoryTypes };\n }\n\n let sortObj: Record<string, number>;\n switch (query.strategy) {\n case \"recent\":\n sortObj = { createdAt: -1 };\n break;\n case \"important\":\n sortObj = { importance: -1 };\n break;\n default:\n sortObj = { importance: -1, createdAt: -1 };\n break;\n }\n\n const docs = await this.collection\n .find(filter)\n .sort(sortObj)\n .limit(10000)\n .toArray();\n\n const now = new Date();\n let results = docs\n .map((doc) => this.toMemory(doc as unknown as MongoDoc))\n .filter((m) => !m.expiresAt || m.expiresAt > now);\n\n if (query.query) {\n const q = query.query.toLowerCase();\n results = results.filter((m) => m.content.toLowerCase().includes(q));\n }\n\n return results.slice(0, query.limit ?? 10);\n }\n\n private async retrieveSemantic(query: MemoryRetrieveQuery, embedding: number[]): Promise<Memory[]> {\n try {\n const filter: Record<string, unknown> = {};\n if (query.actorId) filter.actorId = query.actorId;\n\n const pipeline: Record<string, unknown>[] = [\n {\n $vectorSearch: {\n index: \"memstack_vector\",\n path: \"embedding\",\n queryVector: embedding,\n numCandidates: 100,\n limit: query.limit ?? 10,\n filter: filter,\n },\n },\n ];\n\n const docs = await this.collection.aggregate(pipeline).toArray();\n const now = new Date();\n return docs\n .map((doc) => this.toMemory(doc as unknown as MongoDoc))\n .filter((m) => !m.expiresAt || m.expiresAt > now);\n } catch {\n return this.retrieveStandard(query);\n }\n }\n\n private toMemory(doc: MongoDoc): Memory {\n return {\n id: doc._id,\n actorId: doc.actorId,\n memoryType: doc.memoryType,\n content: doc.content,\n importance: doc.importance,\n emotionalValence: doc.emotionalValence,\n tags: doc.tags,\n embedding: doc.embedding,\n sourceId: doc.sourceId,\n metadata: doc.metadata,\n expiresAt: doc.expiresAt,\n createdAt: doc.createdAt,\n };\n }\n\n private toDoc(memory: Memory): MongoDoc {\n return {\n _id: memory.id,\n actorId: memory.actorId,\n memoryType: memory.memoryType,\n content: memory.content,\n importance: memory.importance,\n emotionalValence: memory.emotionalValence,\n tags: memory.tags,\n embedding: memory.embedding,\n sourceId: memory.sourceId,\n metadata: memory.metadata,\n expiresAt: memory.expiresAt,\n createdAt: memory.createdAt,\n };\n }\n}\n","import type { Memory, MemoryType } from \"../../types.js\";\nimport type { StorageProvider, MemoryStoreInput, MemoryRetrieveQuery, MemoryCountFilter } from \"../../interfaces.js\";\nimport { notFound, configError } from \"../../errors.js\";\n\ntype BetterSqlite3Db = {\n exec(sql: string): void;\n prepare(sql: string): {\n run(...params: unknown[]): { changes: number; lastInsertRowid: number | bigint };\n get(...params: unknown[]): unknown | undefined;\n all(...params: unknown[]): unknown[];\n };\n close(): void;\n};\n\ninterface SqliteMemoryRow {\n id: string;\n actor_id: string;\n memory_type: string;\n content: string;\n importance: number;\n emotional_valence: number;\n tags: string;\n embedding: string | null;\n source_id: string | null;\n metadata: string;\n expires_at: string | null;\n created_at: string;\n touched_at: string;\n}\n\nexport interface SQLiteStorageConfig {\n db: BetterSqlite3Db;\n tableName?: string;\n vectorDimensions?: number;\n}\n\nfunction cosineSimilarity(a: number[], b: number[]): number {\n if (a.length === 0 || b.length === 0) return 0;\n const dims = Math.min(a.length, b.length);\n let dot = 0;\n let magA = 0;\n let magB = 0;\n for (let i = 0; i < dims; i++) {\n dot += a[i] * b[i];\n magA += a[i] * a[i];\n magB += b[i] * b[i];\n }\n const mag = Math.sqrt(magA) * Math.sqrt(magB);\n return mag === 0 ? 0 : dot / mag;\n}\n\nexport class SQLiteStorageAdapter implements StorageProvider {\n private db: BetterSqlite3Db;\n private table: string;\n private vectorDimensions: number;\n\n constructor(config: SQLiteStorageConfig) {\n if (!config.db) {\n throw configError(\"SQLiteStorageAdapter requires a better-sqlite3 database instance\");\n }\n this.db = config.db;\n this.table = config.tableName ?? \"memstack_memories\";\n if (!/^[a-zA-Z0-9_]+$/.test(this.table)) {\n throw configError(`Invalid table name: \"${this.table}\". Use only alphanumeric characters and underscores.`);\n }\n this.vectorDimensions = config.vectorDimensions ?? 1536;\n }\n\n async initialize(): Promise<void> {\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS ${this.table} (\n id TEXT PRIMARY KEY,\n actor_id TEXT NOT NULL,\n memory_type TEXT NOT NULL DEFAULT 'interaction',\n content TEXT NOT NULL,\n importance REAL NOT NULL DEFAULT 0.5,\n emotional_valence REAL NOT NULL DEFAULT 0,\n tags TEXT NOT NULL DEFAULT '[]',\n embedding TEXT,\n source_id TEXT,\n metadata TEXT NOT NULL DEFAULT '{}',\n expires_at TEXT,\n created_at TEXT NOT NULL,\n touched_at TEXT NOT NULL\n )\n `);\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_${this.table}_actor ON ${this.table}(actor_id)`);\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_${this.table}_created ON ${this.table}(created_at DESC)`);\n this.db.exec(`CREATE INDEX IF NOT EXISTS idx_${this.table}_importance ON ${this.table}(importance DESC)`);\n }\n\n generateId(): string {\n return `mem_${Date.now().toString(36)}_${crypto.randomUUID().slice(0, 8)}`;\n }\n\n async store(input: MemoryStoreInput): Promise<Memory> {\n const now = new Date().toISOString();\n const id = input.id ?? this.generateId();\n\n this.db.prepare(\n `INSERT INTO ${this.table} (id, actor_id, memory_type, content, importance, emotional_valence, tags, embedding, source_id, metadata, expires_at, created_at, touched_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(id) DO UPDATE SET\n content = excluded.content,\n importance = excluded.importance,\n emotional_valence = excluded.emotional_valence,\n tags = excluded.tags,\n embedding = excluded.embedding,\n source_id = excluded.source_id,\n metadata = excluded.metadata,\n expires_at = excluded.expires_at,\n touched_at = excluded.touched_at`\n ).run(\n id,\n input.actorId,\n input.memoryType ?? \"interaction\",\n input.content,\n input.importance ?? 0.5,\n input.emotionalValence ?? 0,\n JSON.stringify(input.tags ?? []),\n input.embedding ? JSON.stringify(input.embedding) : null,\n input.sourceId ?? null,\n JSON.stringify(input.metadata ?? {}),\n input.expiresAt?.toISOString() ?? null,\n now,\n now\n );\n\n return {\n id,\n actorId: input.actorId,\n memoryType: (input.memoryType ?? \"interaction\") as MemoryType,\n content: input.content,\n importance: input.importance ?? 0.5,\n emotionalValence: input.emotionalValence ?? 0,\n tags: input.tags ?? [],\n embedding: input.embedding,\n sourceId: input.sourceId,\n metadata: input.metadata ?? {},\n expiresAt: input.expiresAt,\n createdAt: input.createdAt ?? new Date(now),\n };\n }\n\n async storeBatch(inputs: MemoryStoreInput[]): Promise<Memory[]> {\n const results: Memory[] = [];\n for (const input of inputs) {\n results.push(await this.store(input));\n }\n return results;\n }\n\n async get(id: string): Promise<Memory | null> {\n const row = this.db.prepare(\n `SELECT * FROM ${this.table} WHERE id = ? AND (expires_at IS NULL OR expires_at > ?)`\n ).get(id, new Date().toISOString()) as SqliteMemoryRow | undefined;\n\n if (!row) return null;\n return this._rowToMemory(row);\n }\n\n async delete(id: string): Promise<void> {\n const row = this.db.prepare(`SELECT id FROM ${this.table} WHERE id = ?`).get(id) as { id: string } | undefined;\n if (!row) throw notFound(\"Memory\", id);\n this.db.prepare(`DELETE FROM ${this.table} WHERE id = ?`).run(id);\n }\n\n async deleteMany(ids: string[]): Promise<number> {\n const placeholders = ids.map(() => \"?\").join(\", \");\n const result = this.db.prepare(\n `DELETE FROM ${this.table} WHERE id IN (${placeholders})`\n ).run(...ids);\n return result.changes;\n }\n\n async touch(id: string): Promise<void> {\n const row = this.db.prepare(`SELECT id FROM ${this.table} WHERE id = ?`).get(id) as { id: string } | undefined;\n if (!row) throw notFound(\"Memory\", id);\n this.db.prepare(`UPDATE ${this.table} SET touched_at = ? WHERE id = ?`).run(new Date().toISOString(), id);\n }\n\n async retrieve(query: MemoryRetrieveQuery, embedding?: number[]): Promise<Memory[]> {\n const conditions: string[] = [\"(expires_at IS NULL OR expires_at > ?)\"];\n const params: unknown[] = [new Date().toISOString()];\n\n if (query.actorId) {\n conditions.push(\"actor_id = ?\");\n params.push(query.actorId);\n }\n if (query.memoryTypes && query.memoryTypes.length > 0) {\n const placeholders = query.memoryTypes.map(() => \"?\").join(\", \");\n conditions.push(`memory_type IN (${placeholders})`);\n params.push(...query.memoryTypes);\n }\n if (query.createdAfter) {\n conditions.push(\"created_at >= ?\");\n params.push(query.createdAfter.toISOString());\n }\n if (query.createdBefore) {\n conditions.push(\"created_at <= ?\");\n params.push(query.createdBefore.toISOString());\n }\n\n const where = `WHERE ${conditions.join(\" AND \")}`;\n\n const hasSemantic = (query.strategy === \"semantic\" || query.strategy === \"hybrid\") && embedding && embedding.length > 0;\n\n let orderBy: string;\n switch (query.strategy) {\n case \"recent\":\n orderBy = \"touched_at DESC\";\n break;\n case \"important\":\n orderBy = \"importance DESC\";\n break;\n case \"hybrid\":\n case \"semantic\":\n default:\n if (hasSemantic) {\n orderBy = \"touched_at DESC\";\n } else {\n orderBy = \"importance DESC, touched_at DESC\";\n }\n break;\n }\n\n const limit = query.limit ?? 10;\n const sql = `SELECT * FROM ${this.table} ${where} ORDER BY ${orderBy}`;\n const rows = this.db.prepare(sql).all(...params) as SqliteMemoryRow[];\n\n let results: SqliteMemoryRow[] = rows;\n\n if (query.query) {\n const q = query.query.toLowerCase();\n results = results.filter((r) => r.content.toLowerCase().includes(q));\n }\n\n if (query.tags && query.tags.length > 0) {\n results = results.filter((r) => {\n const tags: string[] = JSON.parse(r.tags);\n return tags.some((t) => query.tags!.includes(t));\n });\n }\n\n if (hasSemantic && embedding) {\n const scored = results\n .filter((r) => r.embedding !== null)\n .map((r) => {\n const emb: number[] = JSON.parse(r.embedding!);\n const score = cosineSimilarity(embedding, emb);\n return { row: r, score };\n })\n .sort((a, b) => b.score - a.score);\n\n if (query.strategy === \"hybrid\") {\n scored.sort((a, b) => (b.score + b.row.importance) - (a.score + a.row.importance));\n }\n\n const topK = scored.slice(0, limit);\n for (const { row } of topK) {\n this.db.prepare(`UPDATE ${this.table} SET touched_at = ? WHERE id = ?`).run(new Date().toISOString(), row.id);\n }\n return topK.map(({ row }) => this._rowToMemory(row));\n }\n\n const now = new Date().toISOString();\n const limited = results.slice(0, limit);\n for (const row of limited) {\n this.db.prepare(`UPDATE ${this.table} SET touched_at = ? WHERE id = ?`).run(now, row.id);\n }\n\n return limited.map((r) => this._rowToMemory(r));\n }\n\n async count(filter?: MemoryCountFilter): Promise<number> {\n const conditions: string[] = [\"(expires_at IS NULL OR expires_at > ?)\"];\n const params: unknown[] = [new Date().toISOString()];\n\n if (filter?.actorId) {\n conditions.push(\"actor_id = ?\");\n params.push(filter.actorId);\n }\n if (filter?.memoryType) {\n conditions.push(\"memory_type = ?\");\n params.push(filter.memoryType);\n }\n if (filter?.minImportance !== undefined) {\n conditions.push(\"importance >= ?\");\n params.push(filter.minImportance);\n }\n if (filter?.createdAfter) {\n conditions.push(\"created_at >= ?\");\n params.push(filter.createdAfter.toISOString());\n }\n if (filter?.createdBefore) {\n conditions.push(\"created_at <= ?\");\n params.push(filter.createdBefore.toISOString());\n }\n\n const where = conditions.join(\" AND \");\n const row = this.db.prepare(\n `SELECT COUNT(*) as count FROM ${this.table} WHERE ${where}`\n ).get(...params) as { count: number } | undefined;\n\n return row?.count ?? 0;\n }\n\n async close(): Promise<void> {\n this.db.close();\n }\n\n private _rowToMemory(row: SqliteMemoryRow): Memory {\n return {\n id: row.id,\n actorId: row.actor_id,\n memoryType: row.memory_type as MemoryType,\n content: row.content,\n importance: row.importance,\n emotionalValence: row.emotional_valence,\n tags: JSON.parse(row.tags),\n embedding: row.embedding ? JSON.parse(row.embedding) : undefined,\n sourceId: row.source_id ?? undefined,\n metadata: JSON.parse(row.metadata),\n expiresAt: row.expires_at ? new Date(row.expires_at) : undefined,\n createdAt: new Date(row.created_at),\n };\n }\n}\n","import type { LLMProvider } from \"../../interfaces.js\";\nimport { MemStackError } from \"../../errors.js\";\n\nexport interface OpenAILLMConfig {\n apiKey: string;\n baseURL?: string;\n defaultModel?: string;\n defaultTemperature?: number;\n defaultMaxTokens?: number;\n}\n\nexport class OpenAILLMAdapter implements LLMProvider {\n private apiKey: string;\n private baseURL: string;\n private defaultModel: string;\n private defaultTemperature: number;\n private defaultMaxTokens: number;\n\n constructor(config: OpenAILLMConfig) {\n this.apiKey = config.apiKey;\n this.baseURL = config.baseURL ?? \"https://api.openai.com/v1\";\n this.defaultModel = config.defaultModel ?? \"gpt-4o-mini\";\n this.defaultTemperature = config.defaultTemperature ?? 0.7;\n this.defaultMaxTokens = config.defaultMaxTokens ?? 1024;\n }\n\n async complete(request: {\n system: string;\n user: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n }): Promise<{ text: string; tokens: { prompt: number; completion: number; total: number } }> {\n const model = request.model ?? this.defaultModel;\n const temperature = request.temperature ?? this.defaultTemperature;\n const maxTokens = request.maxTokens ?? this.defaultMaxTokens;\n\n try {\n const response = await fetch(`${this.baseURL}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model,\n messages: [\n { role: \"system\", content: request.system },\n { role: \"user\", content: request.user },\n ],\n temperature,\n max_tokens: maxTokens,\n }),\n });\n\n if (!response.ok) {\n const err = await response.text();\n throw new MemStackError(\"LLM_ERROR\", `OpenAI API error: ${response.status} ${err}`, {\n retryable: response.status >= 500,\n });\n }\n\n const data = (await response.json()) as {\n choices: { message: { content: string } }[];\n usage?: { prompt_tokens: number; completion_tokens: number; total_tokens: number };\n };\n\n return {\n text: data.choices[0]?.message?.content ?? \"\",\n tokens: {\n prompt: data.usage?.prompt_tokens ?? 0,\n completion: data.usage?.completion_tokens ?? 0,\n total: data.usage?.total_tokens ?? 0,\n },\n };\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n throw new MemStackError(\"LLM_ERROR\", `LLM request failed: ${err instanceof Error ? err.message : String(err)}`, {\n retryable: true,\n });\n }\n }\n\n async *completeStream(request: {\n system: string;\n user: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n }): AsyncIterable<{ text: string; tokens: { prompt: number; completion: number; total: number } }> {\n const model = request.model ?? this.defaultModel;\n const temperature = request.temperature ?? this.defaultTemperature;\n const maxTokens = request.maxTokens ?? this.defaultMaxTokens;\n\n let response: Response;\n try {\n response = await fetch(`${this.baseURL}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model,\n messages: [\n { role: \"system\", content: request.system },\n { role: \"user\", content: request.user },\n ],\n temperature,\n max_tokens: maxTokens,\n stream: true,\n stream_options: { include_usage: true },\n }),\n });\n } catch (err) {\n throw new MemStackError(\"LLM_ERROR\", `OpenAI streaming request failed: ${err instanceof Error ? err.message : String(err)}`, {\n retryable: true,\n });\n }\n\n if (!response.ok) {\n const err = await response.text();\n throw new MemStackError(\"LLM_ERROR\", `OpenAI streaming error: ${response.status} ${err}`, {\n retryable: response.status >= 500,\n });\n }\n\n const reader = response.body?.getReader();\n if (!reader) throw new MemStackError(\"LLM_ERROR\", \"No response body for streaming\");\n\n const decoder = new TextDecoder();\n let buffer = \"\";\n let promptTokens = 0;\n let completionTokens = 0;\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || !trimmed.startsWith(\"data: \")) continue;\n const data = trimmed.slice(6);\n if (data === \"[DONE]\") continue;\n\n try {\n const parsed = JSON.parse(data) as {\n choices?: { delta?: { content?: string } }[];\n usage?: { prompt_tokens: number; completion_tokens: number; total_tokens: number };\n };\n\n const content = parsed.choices?.[0]?.delta?.content ?? \"\";\n const usage = parsed.usage;\n if (usage) {\n promptTokens = usage.prompt_tokens;\n completionTokens = usage.completion_tokens;\n }\n\n if (content || usage) {\n yield {\n text: content,\n tokens: { prompt: promptTokens, completion: completionTokens, total: promptTokens + completionTokens },\n };\n }\n } catch {\n // Skip unparseable chunks\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n}\n","import type { LLMProvider } from \"../../interfaces.js\";\nimport { MemStackError } from \"../../errors.js\";\n\ninterface AnthropicSDK {\n messages: {\n create(params: {\n model: string;\n max_tokens: number;\n temperature?: number;\n system: string;\n messages: { role: string; content: string }[];\n }): Promise<{ content: { text: string }[]; usage?: { input_tokens: number; output_tokens: number } }>;\n };\n}\n\nexport interface AnthropicLLMConfig {\n apiKey: string;\n baseURL?: string;\n defaultModel?: string;\n defaultMaxTokens?: number;\n}\n\nexport class AnthropicLLMAdapter implements LLMProvider {\n private apiKey: string;\n private baseURL: string;\n private defaultModel: string;\n private defaultMaxTokens: number;\n private sdk?: AnthropicSDK;\n\n constructor(config: AnthropicLLMConfig) {\n this.apiKey = config.apiKey;\n this.baseURL = config.baseURL ?? \"https://api.anthropic.com\";\n this.defaultModel = config.defaultModel ?? \"claude-sonnet-4-5-20250929\";\n this.defaultMaxTokens = config.defaultMaxTokens ?? 1024;\n }\n\n async complete(request: {\n system: string;\n user: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n }): Promise<{ text: string; tokens: { prompt: number; completion: number; total: number } }> {\n const model = request.model ?? this.defaultModel;\n const maxTokens = request.maxTokens ?? this.defaultMaxTokens;\n\n try {\n if (!this.sdk) {\n // @ts-expect-error — optional peer dep\n const { default: Anthropic } = await import(\"@anthropic-ai/sdk\");\n this.sdk = new Anthropic({ apiKey: this.apiKey, baseURL: this.baseURL }) as AnthropicSDK;\n }\n\n const sdk = this.sdk;\n const response = await sdk.messages.create({\n model,\n system: request.system,\n messages: [{ role: \"user\", content: request.user }],\n max_tokens: maxTokens,\n ...(request.temperature !== undefined ? { temperature: request.temperature } : {}),\n });\n\n const text = response.content.length > 0 && \"text\" in response.content[0]\n ? (response.content[0] as { text: string }).text\n : \"\";\n\n return {\n text,\n tokens: {\n prompt: response.usage?.input_tokens ?? 0,\n completion: response.usage?.output_tokens ?? 0,\n total: (response.usage?.input_tokens ?? 0) + (response.usage?.output_tokens ?? 0),\n },\n };\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n const msg = err instanceof Error ? err.message : String(err);\n // Node's ERR_MODULE_NOT_FOUND/MODULE_NOT_FOUND codes are the stable\n // signal for a real \"package isn't installed\" failure; the message-text\n // fallback covers bundler/dev-server module loaders (e.g. Vite, used\n // under this project's own test runner) that don't set `code` at all.\n // Either way, requiring the package name in the message keeps this\n // from misattributing an unrelated failure to a missing SDK.\n const code = (err as { code?: string } | undefined)?.code;\n const isMissingSdk =\n msg.includes(\"@anthropic-ai/sdk\") &&\n (code === \"ERR_MODULE_NOT_FOUND\" ||\n code === \"MODULE_NOT_FOUND\" ||\n /cannot find (package|module)/i.test(msg) ||\n /failed to (load|resolve)/i.test(msg));\n if (isMissingSdk) {\n throw new MemStackError(\"LLM_ERROR\", \"Anthropic adapter requires @anthropic-ai/sdk. Install it: npm install @anthropic-ai/sdk\", {\n retryable: false,\n });\n }\n throw new MemStackError(\"LLM_ERROR\", `Anthropic request failed: ${msg}`, {\n retryable: true,\n });\n }\n }\n}\n","import type { EmbeddingProvider } from \"../../interfaces.js\";\nimport { MemStackError } from \"../../errors.js\";\n\nexport interface OpenAIEmbeddingConfig {\n apiKey: string;\n baseURL?: string;\n model?: string;\n}\n\nexport class OpenAIEmbeddingAdapter implements EmbeddingProvider {\n private apiKey: string;\n private baseURL: string;\n private model: string;\n readonly dimensions: number;\n readonly maxBatchSize = 2048;\n\n constructor(config: OpenAIEmbeddingConfig) {\n this.apiKey = config.apiKey;\n this.baseURL = config.baseURL ?? \"https://api.openai.com/v1\";\n this.model = config.model ?? \"text-embedding-3-small\";\n this.dimensions = this.model === \"text-embedding-3-large\" ? 3072 : 1536;\n }\n\n async embed(texts: string[]): Promise<number[][]> {\n if (texts.length === 0) return [];\n if (texts.length > this.maxBatchSize) {\n throw new MemStackError(\"VALIDATION_ERROR\", `Max ${this.maxBatchSize} texts per batch, got ${texts.length}`);\n }\n\n try {\n const response = await fetch(`${this.baseURL}/embeddings`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model: this.model,\n input: texts,\n }),\n });\n\n if (!response.ok) {\n const err = await response.text();\n throw new MemStackError(\"EMBEDDING_ERROR\", `OpenAI Embedding error: ${response.status} ${err}`, {\n retryable: response.status >= 500,\n });\n }\n\n const data = (await response.json()) as {\n data: { embedding: number[]; index: number }[];\n };\n\n return data.data\n .sort((a, b) => a.index - b.index)\n .map((item) => item.embedding);\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n throw new MemStackError(\n \"EMBEDDING_ERROR\",\n `Embedding request failed: ${err instanceof Error ? err.message : String(err)}`,\n { retryable: true }\n );\n }\n }\n}\n","import type { EmbeddingProvider } from \"../../interfaces.js\";\nimport { MemStackError } from \"../../errors.js\";\n\nexport interface CohereEmbeddingConfig {\n /** Cohere API key */\n apiKey: string;\n /** Model name. Default: \"embed-english-v3.0\" (1024 dims) */\n model?: string;\n /** Base URL. Default: \"https://api.cohere.ai/v1\" */\n baseURL?: string;\n}\n\nconst DIMENSIONS: Record<string, number> = {\n \"embed-english-v3.0\": 1024,\n \"embed-multilingual-v3.0\": 1024,\n \"embed-english-light-v3.0\": 384,\n \"embed-multilingual-light-v3.0\": 384,\n \"embed-english-v2.0\": 4096,\n \"embed-multilingual-v2.0\": 768,\n};\n\nexport class CohereEmbeddingAdapter implements EmbeddingProvider {\n private apiKey: string;\n private baseURL: string;\n private model: string;\n readonly dimensions: number;\n readonly maxBatchSize = 96;\n\n constructor(config: CohereEmbeddingConfig) {\n this.apiKey = config.apiKey;\n this.baseURL = config.baseURL ?? \"https://api.cohere.ai/v1\";\n this.model = config.model ?? \"embed-english-v3.0\";\n this.dimensions = DIMENSIONS[this.model] ?? 1024;\n }\n\n async embed(texts: string[]): Promise<number[][]> {\n if (texts.length === 0) return [];\n if (texts.length > this.maxBatchSize) {\n throw new MemStackError(\"VALIDATION_ERROR\", `Cohere max ${this.maxBatchSize} texts per batch, got ${texts.length}`);\n }\n\n try {\n const response = await fetch(`${this.baseURL}/embed`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model: this.model,\n texts,\n input_type: \"search_document\",\n embedding_types: [\"float\"],\n }),\n });\n\n if (!response.ok) {\n const err = await response.text();\n throw new MemStackError(\"EMBEDDING_ERROR\", `Cohere Embedding error: ${response.status} ${err}`, {\n retryable: response.status >= 500,\n });\n }\n\n const data = (await response.json()) as {\n embeddings: { float?: number[][] };\n };\n\n return data.embeddings?.float ?? [];\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n throw new MemStackError(\n \"EMBEDDING_ERROR\",\n `Cohere embedding request failed: ${err instanceof Error ? err.message : String(err)}`,\n { retryable: true }\n );\n }\n }\n}\n","import type { LLMProvider } from \"../../interfaces.js\";\nimport { MemStackError } from \"../../errors.js\";\n\nexport interface OllamaLLMConfig {\n /** Ollama server URL. Default: \"http://localhost:11434\" */\n baseURL?: string;\n /** Default model name. Default: \"llama3.2\" */\n defaultModel?: string;\n /** Default temperature. Default: 0.7 */\n defaultTemperature?: number;\n /** Default max tokens. Default: 1024 */\n defaultMaxTokens?: number;\n}\n\nexport class OllamaLLMAdapter implements LLMProvider {\n private baseURL: string;\n private defaultModel: string;\n private defaultTemperature: number;\n private defaultMaxTokens: number;\n\n constructor(config: OllamaLLMConfig = {}) {\n this.baseURL = config.baseURL ?? \"http://localhost:11434\";\n this.defaultModel = config.defaultModel ?? \"llama3.2\";\n this.defaultTemperature = config.defaultTemperature ?? 0.7;\n this.defaultMaxTokens = config.defaultMaxTokens ?? 1024;\n }\n\n async complete(request: {\n system: string;\n user: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n }): Promise<{ text: string; tokens: { prompt: number; completion: number; total: number } }> {\n const model = request.model ?? this.defaultModel;\n const temperature = request.temperature ?? this.defaultTemperature;\n const maxTokens = request.maxTokens ?? this.defaultMaxTokens;\n\n try {\n const response = await fetch(`${this.baseURL}/api/chat`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n model,\n messages: [\n { role: \"system\", content: request.system },\n { role: \"user\", content: request.user },\n ],\n options: { temperature, num_predict: maxTokens },\n stream: false,\n }),\n });\n\n if (!response.ok) {\n const err = await response.text();\n throw new MemStackError(\"LLM_ERROR\", `Ollama API error: ${response.status} ${err}`, {\n retryable: response.status >= 500,\n });\n }\n\n const data = (await response.json()) as {\n message?: { content: string };\n prompt_eval_count?: number;\n eval_count?: number;\n };\n\n const promptTokens = data.prompt_eval_count ?? 0;\n const completionTokens = data.eval_count ?? 0;\n\n return {\n text: data.message?.content ?? \"\",\n tokens: {\n prompt: promptTokens,\n completion: completionTokens,\n total: promptTokens + completionTokens,\n },\n };\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n throw new MemStackError(\"LLM_ERROR\", `Ollama request failed: ${err instanceof Error ? err.message : String(err)}`, {\n retryable: true,\n });\n }\n }\n}\n","import type { LLMProvider } from \"../../interfaces.js\";\nimport { MemStackError } from \"../../errors.js\";\n\nexport interface GroqLLMConfig {\n /** Groq API key */\n apiKey: string;\n /** Base URL. Default: \"https://api.groq.com/openai/v1\" */\n baseURL?: string;\n /** Default model. Default: \"llama-3.3-70b-versatile\" */\n defaultModel?: string;\n /** Default temperature. Default: 0.7 */\n defaultTemperature?: number;\n /** Default max tokens. Default: 1024 */\n defaultMaxTokens?: number;\n}\n\nexport class GroqLLMAdapter implements LLMProvider {\n private apiKey: string;\n private baseURL: string;\n private defaultModel: string;\n private defaultTemperature: number;\n private defaultMaxTokens: number;\n\n constructor(config: GroqLLMConfig) {\n this.apiKey = config.apiKey;\n this.baseURL = config.baseURL ?? \"https://api.groq.com/openai/v1\";\n this.defaultModel = config.defaultModel ?? \"llama-3.3-70b-versatile\";\n this.defaultTemperature = config.defaultTemperature ?? 0.7;\n this.defaultMaxTokens = config.defaultMaxTokens ?? 1024;\n }\n\n async complete(request: {\n system: string;\n user: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n }): Promise<{ text: string; tokens: { prompt: number; completion: number; total: number } }> {\n const model = request.model ?? this.defaultModel;\n const temperature = request.temperature ?? this.defaultTemperature;\n const maxTokens = request.maxTokens ?? this.defaultMaxTokens;\n\n try {\n const response = await fetch(`${this.baseURL}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model,\n messages: [\n { role: \"system\", content: request.system },\n { role: \"user\", content: request.user },\n ],\n temperature,\n max_tokens: maxTokens,\n }),\n });\n\n if (!response.ok) {\n const err = await response.text();\n throw new MemStackError(\"LLM_ERROR\", `Groq API error: ${response.status} ${err}`, {\n retryable: response.status >= 500,\n });\n }\n\n const data = (await response.json()) as {\n choices: { message: { content: string } }[];\n usage?: { prompt_tokens: number; completion_tokens: number; total_tokens: number };\n };\n\n return {\n text: data.choices[0]?.message?.content ?? \"\",\n tokens: {\n prompt: data.usage?.prompt_tokens ?? 0,\n completion: data.usage?.completion_tokens ?? 0,\n total: data.usage?.total_tokens ?? 0,\n },\n };\n } catch (err) {\n if (err instanceof MemStackError) throw err;\n throw new MemStackError(\"LLM_ERROR\", `Groq request failed: ${err instanceof Error ? err.message : String(err)}`, {\n retryable: true,\n });\n }\n }\n\n async *completeStream(request: {\n system: string;\n user: string;\n model?: string;\n temperature?: number;\n maxTokens?: number;\n }): AsyncIterable<{ text: string; tokens: { prompt: number; completion: number; total: number } }> {\n const model = request.model ?? this.defaultModel;\n const temperature = request.temperature ?? this.defaultTemperature;\n const maxTokens = request.maxTokens ?? this.defaultMaxTokens;\n\n let response: Response;\n try {\n response = await fetch(`${this.baseURL}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model,\n messages: [\n { role: \"system\", content: request.system },\n { role: \"user\", content: request.user },\n ],\n temperature,\n max_tokens: maxTokens,\n stream: true,\n stream_options: { include_usage: true },\n }),\n });\n } catch (err) {\n throw new MemStackError(\"LLM_ERROR\", `Groq streaming request failed: ${err instanceof Error ? err.message : String(err)}`, {\n retryable: true,\n });\n }\n\n if (!response.ok) {\n const err = await response.text();\n throw new MemStackError(\"LLM_ERROR\", `Groq streaming error: ${response.status} ${err}`, {\n retryable: response.status >= 500,\n });\n }\n\n const reader = response.body?.getReader();\n if (!reader) throw new MemStackError(\"LLM_ERROR\", \"No response body for streaming\");\n\n const decoder = new TextDecoder();\n let buffer = \"\";\n let promptTokens = 0;\n let completionTokens = 0;\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || !trimmed.startsWith(\"data: \")) continue;\n const data = trimmed.slice(6);\n if (data === \"[DONE]\") continue;\n\n try {\n const parsed = JSON.parse(data) as {\n choices?: { delta?: { content?: string } }[];\n usage?: { prompt_tokens: number; completion_tokens: number; total_tokens: number };\n x_groq?: { usage?: { prompt_tokens: number; completion_tokens: number; total_tokens: number } };\n };\n\n const content = parsed.choices?.[0]?.delta?.content ?? \"\";\n const usage = parsed.usage ?? parsed.x_groq?.usage;\n if (usage) {\n promptTokens = usage.prompt_tokens;\n completionTokens = usage.completion_tokens;\n }\n\n if (content || usage) {\n yield {\n text: content,\n tokens: { prompt: promptTokens, completion: completionTokens, total: promptTokens + completionTokens },\n };\n }\n } catch {\n // Skip unparseable chunks\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n}\n"]}