@elizaos/plugin-memory 1.1.1 → 2.0.0-alpha

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.
Files changed (44) hide show
  1. package/dist/evaluators/index.d.ts +3 -0
  2. package/dist/evaluators/index.d.ts.map +1 -0
  3. package/dist/evaluators/long-term-extraction.d.ts +1 -6
  4. package/dist/evaluators/long-term-extraction.d.ts.map +1 -0
  5. package/dist/evaluators/summarization.d.ts +1 -28
  6. package/dist/evaluators/summarization.d.ts.map +1 -0
  7. package/dist/generated/prompts/typescript/prompts.d.ts +16 -0
  8. package/dist/generated/prompts/typescript/prompts.d.ts.map +1 -0
  9. package/dist/index.d.ts +7 -39
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/{node/index.node.js → index.js} +800 -981
  12. package/dist/index.js.map +20 -0
  13. package/dist/providers/context-summary.d.ts +2 -11
  14. package/dist/providers/context-summary.d.ts.map +1 -0
  15. package/dist/providers/index.d.ts +3 -0
  16. package/dist/providers/index.d.ts.map +1 -0
  17. package/dist/providers/long-term-memory.d.ts +2 -16
  18. package/dist/providers/long-term-memory.d.ts.map +1 -0
  19. package/dist/schemas/index.d.ts +4 -9
  20. package/dist/schemas/index.d.ts.map +1 -0
  21. package/dist/schemas/long-term-memories.d.ts +1 -4
  22. package/dist/schemas/long-term-memories.d.ts.map +1 -0
  23. package/dist/schemas/memory-access-logs.d.ts +20 -58
  24. package/dist/schemas/memory-access-logs.d.ts.map +1 -0
  25. package/dist/schemas/session-summaries.d.ts +1 -4
  26. package/dist/schemas/session-summaries.d.ts.map +1 -0
  27. package/dist/services/memory-service.d.ts +7 -75
  28. package/dist/services/memory-service.d.ts.map +1 -0
  29. package/dist/types/index.d.ts +5 -26
  30. package/dist/types/index.d.ts.map +1 -0
  31. package/package.json +45 -48
  32. package/README.md +0 -335
  33. package/dist/actions/remember.d.ts +0 -11
  34. package/dist/browser/index.browser.js +0 -209
  35. package/dist/browser/index.browser.js.map +0 -20
  36. package/dist/browser/index.d.ts +0 -2
  37. package/dist/cjs/index.d.ts +0 -2
  38. package/dist/cjs/index.node.cjs +0 -1293
  39. package/dist/cjs/index.node.js.map +0 -20
  40. package/dist/index.browser.d.ts +0 -2
  41. package/dist/index.node.d.ts +0 -2
  42. package/dist/node/index.d.ts +0 -2
  43. package/dist/node/index.node.js.map +0 -20
  44. package/dist/providers/recent-messages.d.ts +0 -15
@@ -0,0 +1,20 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/evaluators/long-term-extraction.ts", "../src/generated/prompts/typescript/prompts.ts", "../src/types/index.ts", "../src/evaluators/summarization.ts", "../src/providers/context-summary.ts", "../src/providers/long-term-memory.ts", "../src/schemas/long-term-memories.ts", "../src/schemas/memory-access-logs.ts", "../src/schemas/session-summaries.ts", "../src/services/memory-service.ts", "../src/index.ts"],
4
+ "sourcesContent": [
5
+ "import {\n composePromptFromState,\n type Evaluator,\n type IAgentRuntime,\n logger,\n type Memory,\n ModelType,\n} from \"@elizaos/core\";\nimport { longTermExtractionTemplate } from \"../generated/prompts/typescript/prompts.js\";\nimport type { MemoryService } from \"../services/memory-service\";\nimport { LongTermMemoryCategory, type MemoryExtraction } from \"../types\";\n\nconst extractionTemplate = longTermExtractionTemplate;\n\nfunction parseMemoryExtractionXML(xml: string): MemoryExtraction[] {\n const memoryMatches = xml.matchAll(\n /<memory>[\\s\\S]*?<category>(.*?)<\\/category>[\\s\\S]*?<content>(.*?)<\\/content>[\\s\\S]*?<confidence>(.*?)<\\/confidence>[\\s\\S]*?<\\/memory>/g\n );\n\n const extractions: MemoryExtraction[] = [];\n\n for (const match of memoryMatches) {\n const category = match[1].trim() as LongTermMemoryCategory;\n const content = match[2].trim();\n const confidence = parseFloat(match[3].trim());\n\n if (!Object.values(LongTermMemoryCategory).includes(category)) {\n logger.warn(`Invalid memory category: ${category}`);\n continue;\n }\n\n if (content && !Number.isNaN(confidence)) {\n extractions.push({ category, content, confidence });\n }\n }\n\n return extractions;\n}\n\nexport const longTermExtractionEvaluator: Evaluator = {\n name: \"LONG_TERM_MEMORY_EXTRACTION\",\n description: \"Extracts long-term facts about users from conversations\",\n similes: [\"MEMORY_EXTRACTION\", \"FACT_LEARNING\", \"USER_PROFILING\"],\n alwaysRun: true,\n\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n if (message.entityId === runtime.agentId) {\n return false;\n }\n\n if (!message.content?.text) {\n return false;\n }\n\n const memoryService = runtime.getService(\"memory\") as MemoryService | null;\n if (!memoryService) {\n return false;\n }\n\n const config = memoryService.getConfig();\n if (!config.longTermExtractionEnabled) {\n logger.debug(\"Long-term memory extraction is disabled\");\n return false;\n }\n\n const currentMessageCount = await runtime.countMemories(message.roomId, false, \"messages\");\n\n return memoryService.shouldRunExtraction(message.entityId, message.roomId, currentMessageCount);\n },\n\n handler: async (runtime: IAgentRuntime, message: Memory) => {\n const memoryService = runtime.getService(\"memory\") as MemoryService;\n if (!memoryService) {\n logger.error(\"MemoryService not found\");\n return undefined;\n }\n\n const config = memoryService.getConfig();\n const { entityId, roomId } = message;\n\n try {\n logger.info(`Extracting long-term memories for entity ${entityId}`);\n\n const recentMessages = await runtime.getMemories({\n tableName: \"messages\",\n roomId,\n count: 20,\n unique: false,\n });\n\n const formattedMessages = recentMessages\n .sort((a, b) => (a.createdAt || 0) - (b.createdAt || 0))\n .map((msg) => {\n const sender = msg.entityId === runtime.agentId ? runtime.character.name : \"User\";\n return `${sender}: ${msg.content.text || \"[non-text message]\"}`;\n })\n .join(\"\\n\");\n\n const existingMemories = await memoryService.getLongTermMemories(entityId, undefined, 30);\n const formattedExisting =\n existingMemories.length > 0\n ? existingMemories\n .map((m) => `[${m.category}] ${m.content} (confidence: ${m.confidence})`)\n .join(\"\\n\")\n : \"None yet\";\n\n const state = await runtime.composeState(message);\n const prompt = composePromptFromState({\n state: {\n ...state,\n recentMessages: formattedMessages,\n existingMemories: formattedExisting,\n },\n template: extractionTemplate,\n });\n\n const response = await runtime.useModel(ModelType.TEXT_LARGE, { prompt });\n\n const extractions = parseMemoryExtractionXML(response);\n\n logger.info(`Extracted ${extractions.length} long-term memories`);\n\n for (const extraction of extractions) {\n if (extraction.confidence >= Math.max(config.longTermConfidenceThreshold, 0.85)) {\n await memoryService.storeLongTermMemory({\n agentId: runtime.agentId,\n entityId,\n category: extraction.category,\n content: extraction.content,\n confidence: extraction.confidence,\n source: \"conversation\",\n metadata: {\n roomId,\n extractedAt: new Date().toISOString(),\n },\n });\n\n logger.info(\n `Stored long-term memory: [${extraction.category}] ${extraction.content.substring(0, 50)}...`\n );\n } else {\n logger.debug(\n `Skipped low-confidence memory: ${extraction.content} (confidence: ${extraction.confidence})`\n );\n }\n }\n\n const currentMessageCount = await runtime.countMemories(roomId, false, \"messages\");\n await memoryService.setLastExtractionCheckpoint(entityId, roomId, currentMessageCount);\n logger.debug(`Updated checkpoint to ${currentMessageCount} for entity ${entityId}`);\n } catch (error) {\n logger.error({ error }, \"Error during long-term memory extraction:\");\n }\n return undefined;\n },\n\n examples: [],\n};\n",
6
+ "/**\n * Auto-generated prompt templates\n * DO NOT EDIT - Generated from ../../../../../prompts/*.txt\n *\n * These prompts use Handlebars-style template syntax:\n * - {{variableName}} for simple substitution\n * - {{#each items}}...{{/each}} for iteration\n * - {{#if condition}}...{{/if}} for conditionals\n */\n\nexport const initialSummarizationTemplate = `# Task: Summarize Conversation\n\nYou are analyzing a conversation to create a concise summary that captures the key points, topics, and important details.\n\n# Recent Messages\n{{recentMessages}}\n\n# Instructions\nGenerate a summary that:\n1. Captures the main topics discussed\n2. Highlights key information shared\n3. Notes any decisions made or questions asked\n4. Maintains context for future reference\n5. Is concise but comprehensive\n\n**IMPORTANT**: Keep the summary under 2500 tokens. Be comprehensive but concise.\n\nAlso extract:\n- **Topics**: List of main topics discussed (comma-separated)\n- **Key Points**: Important facts or decisions (bullet points)\n\nRespond in this XML format:\n<summary>\n <text>Your comprehensive summary here</text>\n <topics>topic1, topic2, topic3</topics>\n <keyPoints>\n <point>First key point</point>\n <point>Second key point</point>\n </keyPoints>\n</summary>`;\n\nexport const INITIAL_SUMMARIZATION_TEMPLATE = initialSummarizationTemplate;\n\nexport const longTermExtractionTemplate = `# Task: Extract Long-Term Memory (Strict Criteria)\n\nYou are analyzing a conversation to extract ONLY the most critical, persistent information about the user using cognitive science memory categories.\n\n# Recent Messages\n{{recentMessages}}\n\n# Current Long-Term Memories\n{{existingMemories}}\n\n# Memory Categories (Based on Cognitive Science)\n\n## 1. EPISODIC Memory\nPersonal experiences and specific events with temporal/spatial context.\n**Examples:**\n- \"User completed migration project from MongoDB to PostgreSQL in Q2 2024\"\n- \"User encountered authentication bug in production on March 15th\"\n- \"User had a negative experience with Docker networking in previous job\"\n\n**Requirements:**\n- Must include WHO did WHAT, WHEN/WHERE\n- Must be a specific, concrete event (not a pattern)\n- Must have significant impact or relevance to future work\n\n## 2. SEMANTIC Memory\nGeneral facts, concepts, knowledge, and established truths about the user.\n**Examples:**\n- \"User is a senior backend engineer with 8 years experience\"\n- \"User specializes in distributed systems and microservices architecture\"\n- \"User's primary programming language is TypeScript\"\n- \"User works at Acme Corp as technical lead\"\n\n**Requirements:**\n- Must be factual, timeless information\n- Must be explicitly stated or demonstrated conclusively\n- No speculation or inference from single instances\n- Core identity, expertise, or knowledge only\n\n## 3. PROCEDURAL Memory\nSkills, workflows, methodologies, and how-to knowledge.\n**Examples:**\n- \"User follows strict TDD workflow: write tests first, then implementation\"\n- \"User prefers git rebase over merge to maintain linear history\"\n- \"User's debugging process: check logs → reproduce locally → binary search\"\n- \"User always writes JSDoc comments before implementing functions\"\n\n**Requirements:**\n- Must describe HOW user does something\n- Must be a repeated, consistent pattern (seen 3+ times or explicitly stated as standard practice)\n- Must be a workflow, methodology, or skill application\n- Not one-off preferences\n\n# ULTRA-STRICT EXTRACTION CRITERIA\n\n## ✅ DO EXTRACT (Only These):\n\n**EPISODIC:**\n- Significant completed projects or milestones\n- Important bugs, incidents, or problems encountered\n- Major decisions made with lasting impact\n- Formative experiences that shape future work\n\n**SEMANTIC:**\n- Professional identity (role, title, company)\n- Core expertise and specializations (stated explicitly or demonstrated conclusively)\n- Primary languages, frameworks, or tools (not exploratory use)\n- Established facts about their work context\n\n**PROCEDURAL:**\n- Consistent workflows demonstrated 3+ times or explicitly stated\n- Standard practices user always follows\n- Methodology preferences with clear rationale\n- Debugging, testing, or development processes\n\n## ❌ NEVER EXTRACT:\n\n- **One-time requests or tasks** (e.g., \"can you generate an image\", \"help me debug this\")\n- **Casual conversations** without lasting significance\n- **Exploratory questions** (e.g., \"how does X work?\")\n- **Temporary context** (current bug, today's task)\n- **Preferences from single occurrence** (e.g., user asked for code once)\n- **Social pleasantries** (thank you, greetings)\n- **Testing or experimentation** (trying out a feature)\n- **Common patterns everyone has** (likes clear explanations)\n- **Situational information** (working on feature X today)\n- **Opinions without persistence** (single complaint, isolated praise)\n- **General knowledge** (not specific to user)\n\n# Quality Gates (ALL Must Pass)\n\n1. **Significance Test**: Will this matter in 3+ months?\n2. **Specificity Test**: Is this concrete and actionable?\n3. **Evidence Test**: Is there strong evidence (3+ instances OR explicit self-identification)?\n4. **Uniqueness Test**: Is this specific to THIS user (not generic)?\n5. **Confidence Test**: Confidence must be >= 0.85 (be VERY conservative)\n6. **Non-Redundancy Test**: Does this add NEW information not in existing memories?\n\n# Confidence Scoring (Be Conservative)\n\n- **0.95-1.0**: User explicitly stated as core identity/practice AND demonstrated multiple times\n- **0.85-0.94**: User explicitly stated OR consistently demonstrated 5+ times\n- **0.75-0.84**: Strong pattern (3-4 instances) with supporting context\n- **Below 0.75**: DO NOT EXTRACT (insufficient evidence)\n\n# Critical Instructions\n\n1. **Default to NOT extracting** - When in doubt, skip it\n2. **Require overwhelming evidence** - One or two mentions is NOT enough\n3. **Focus on what's PERSISTENT** - Not what's temporary or situational\n4. **Verify against existing memories** - Don't duplicate or contradict\n5. **Maximum 2-3 extractions per run** - Quality over quantity\n\n**If there are no qualifying facts (which is common), respond with <memories></memories>**\n\n# Response Format\n\n<memories>\n <memory>\n <category>semantic</category>\n <content>User is a senior TypeScript developer with 8 years of backend experience</content>\n <confidence>0.95</confidence>\n </memory>\n <memory>\n <category>procedural</category>\n <content>User follows TDD workflow: writes tests before implementation, runs tests after each change</content>\n <confidence>0.88</confidence>\n </memory>\n <memory>\n <category>episodic</category>\n <content>User led database migration from MongoDB to PostgreSQL for payment system in Q2 2024</content>\n <confidence>0.92</confidence>\n </memory>\n</memories>`;\n\nexport const LONG_TERM_EXTRACTION_TEMPLATE = longTermExtractionTemplate;\n\nexport const updateSummarizationTemplate = `# Task: Update and Condense Conversation Summary\n\nYou are updating an existing conversation summary with new messages, while keeping the total summary concise.\n\n# Existing Summary\n{{existingSummary}}\n\n# Existing Topics\n{{existingTopics}}\n\n# New Messages Since Last Summary\n{{newMessages}}\n\n# Instructions\nUpdate the summary by:\n1. Merging the existing summary with insights from the new messages\n2. Removing redundant or less important details to stay under the token limit\n3. Keeping the most important context and decisions\n4. Adding new topics if they emerge\n5. **CRITICAL**: Keep the ENTIRE updated summary under 2500 tokens\n\nThe goal is a rolling summary that captures the essence of the conversation without growing indefinitely.\n\nRespond in this XML format:\n<summary>\n <text>Your updated and condensed summary here</text>\n <topics>topic1, topic2, topic3</topics>\n <keyPoints>\n <point>First key point</point>\n <point>Second key point</point>\n </keyPoints>\n</summary>`;\n\nexport const UPDATE_SUMMARIZATION_TEMPLATE = updateSummarizationTemplate;\n",
7
+ "import type { UUID } from \"@elizaos/core\";\n\nexport enum LongTermMemoryCategory {\n EPISODIC = \"episodic\",\n SEMANTIC = \"semantic\",\n PROCEDURAL = \"procedural\",\n}\n\nexport interface LongTermMemory {\n id: UUID;\n agentId: UUID;\n entityId: UUID;\n category: LongTermMemoryCategory;\n content: string;\n metadata?: Record<string, unknown>;\n embedding?: number[];\n confidence?: number;\n source?: string;\n createdAt: Date;\n updatedAt: Date;\n lastAccessedAt?: Date;\n accessCount?: number;\n similarity?: number;\n}\n\nexport interface SessionSummary {\n id: UUID;\n agentId: UUID;\n roomId: UUID;\n entityId?: UUID;\n summary: string;\n messageCount: number;\n lastMessageOffset: number;\n startTime: Date;\n endTime: Date;\n topics?: string[];\n metadata?: Record<string, unknown>;\n embedding?: number[];\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface MemoryConfig {\n shortTermSummarizationThreshold: number;\n shortTermRetainRecent: number;\n shortTermSummarizationInterval: number;\n longTermExtractionEnabled: boolean;\n longTermVectorSearchEnabled: boolean;\n longTermConfidenceThreshold: number;\n longTermExtractionThreshold: number;\n longTermExtractionInterval: number;\n summaryModelType?: string;\n summaryMaxTokens?: number;\n summaryMaxNewMessages?: number;\n}\n\nexport interface MemoryExtraction {\n category: LongTermMemoryCategory;\n content: string;\n confidence: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface SummaryResult {\n summary: string;\n topics: string[];\n keyPoints: string[];\n}\n\nexport type MemoryServiceTypeName = \"memory\";\n",
8
+ "import {\n composePromptFromState,\n type Evaluator,\n type IAgentRuntime,\n logger,\n type Memory,\n ModelType,\n type UUID,\n} from \"@elizaos/core\";\nimport type { MemoryService } from \"../services/memory-service\";\nimport type { SummaryResult } from \"../types\";\n\nasync function getDialogueMessageCount(runtime: IAgentRuntime, roomId: UUID): Promise<number> {\n const messages = await runtime.getMemories({\n tableName: \"messages\",\n roomId,\n count: 100,\n unique: false,\n });\n\n const dialogueMessages = messages.filter(\n (msg) =>\n !(\n (msg.content?.type as string) === \"action_result\" &&\n (msg.metadata?.type as string) === \"action_result\"\n ) &&\n ((msg.metadata?.type as string) === \"agent_response_message\" ||\n (msg.metadata?.type as string) === \"user_message\")\n );\n\n return dialogueMessages.length;\n}\n\nimport {\n initialSummarizationTemplate,\n updateSummarizationTemplate,\n} from \"../generated/prompts/typescript/prompts.js\";\n\nfunction parseSummaryXML(xml: string): SummaryResult {\n const summaryMatch = xml.match(/<text>([\\s\\S]*?)<\\/text>/);\n const topicsMatch = xml.match(/<topics>([\\s\\S]*?)<\\/topics>/);\n const keyPointsMatches = xml.matchAll(/<point>([\\s\\S]*?)<\\/point>/g);\n\n const summary = summaryMatch ? summaryMatch[1].trim() : \"Summary not available\";\n const topics = topicsMatch\n ? topicsMatch[1]\n .split(\",\")\n .map((t) => t.trim())\n .filter(Boolean)\n : [];\n const keyPoints = Array.from(keyPointsMatches).map((match) => match[1].trim());\n\n return { summary, topics, keyPoints };\n}\n\nexport const summarizationEvaluator: Evaluator = {\n name: \"MEMORY_SUMMARIZATION\",\n description: \"Automatically summarizes conversations to optimize context usage\",\n similes: [\"CONVERSATION_SUMMARY\", \"CONTEXT_COMPRESSION\", \"MEMORY_OPTIMIZATION\"],\n alwaysRun: true,\n\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n if (!message.content?.text) {\n return false;\n }\n\n const memoryService = runtime.getService(\"memory\") as MemoryService | null;\n if (!memoryService) {\n return false;\n }\n\n const config = memoryService.getConfig();\n const currentDialogueCount = await getDialogueMessageCount(runtime, message.roomId);\n const existingSummary = await memoryService.getCurrentSessionSummary(message.roomId);\n\n if (!existingSummary) {\n return currentDialogueCount >= config.shortTermSummarizationThreshold;\n } else {\n const newDialogueCount = currentDialogueCount - existingSummary.lastMessageOffset;\n return newDialogueCount >= config.shortTermSummarizationInterval;\n }\n },\n\n handler: async (runtime: IAgentRuntime, message: Memory) => {\n const memoryService = runtime.getService(\"memory\") as MemoryService;\n if (!memoryService) {\n logger.error(\"MemoryService not found\");\n return undefined;\n }\n\n const config = memoryService.getConfig();\n const { roomId } = message;\n\n try {\n logger.info(`Starting summarization for room ${roomId}`);\n\n const existingSummary = await memoryService.getCurrentSessionSummary(roomId);\n const lastOffset = existingSummary?.lastMessageOffset || 0;\n\n const allMessages = await runtime.getMemories({\n tableName: \"messages\",\n roomId,\n count: 1000,\n unique: false,\n });\n\n const allDialogueMessages = allMessages.filter(\n (msg) =>\n !(\n (msg.content?.type as string) === \"action_result\" &&\n (msg.metadata?.type as string) === \"action_result\"\n ) &&\n ((msg.metadata?.type as string) === \"agent_response_message\" ||\n (msg.metadata?.type as string) === \"user_message\")\n );\n\n const totalDialogueCount = allDialogueMessages.length;\n const newDialogueCount = totalDialogueCount - lastOffset;\n\n if (newDialogueCount === 0) {\n logger.debug(\"No new dialogue messages to summarize\");\n return undefined;\n }\n\n const maxNewMessages = config.summaryMaxNewMessages || 50;\n const messagesToProcess = Math.min(newDialogueCount, maxNewMessages);\n\n if (newDialogueCount > maxNewMessages) {\n logger.warn(\n `Capping new dialogue messages at ${maxNewMessages} (${newDialogueCount} available)`\n );\n }\n\n const sortedDialogueMessages = allDialogueMessages.sort(\n (a, b) => (a.createdAt || 0) - (b.createdAt || 0)\n );\n\n const newDialogueMessages = sortedDialogueMessages.slice(\n lastOffset,\n lastOffset + messagesToProcess\n );\n\n if (newDialogueMessages.length === 0) {\n logger.debug(\"No new dialogue messages retrieved after filtering\");\n return undefined;\n }\n\n const formattedMessages = newDialogueMessages\n .map((msg) => {\n const sender = msg.entityId === runtime.agentId ? runtime.character.name : \"User\";\n return `${sender}: ${msg.content.text || \"[non-text message]\"}`;\n })\n .join(\"\\n\");\n\n const state = await runtime.composeState(message);\n let prompt: string;\n let template: string;\n\n if (existingSummary) {\n template = updateSummarizationTemplate;\n prompt = composePromptFromState({\n state: {\n ...state,\n existingSummary: existingSummary.summary,\n existingTopics: existingSummary.topics?.join(\", \") || \"None\",\n newMessages: formattedMessages,\n },\n template,\n });\n } else {\n const initialMessages = sortedDialogueMessages\n .map((msg) => {\n const sender = msg.entityId === runtime.agentId ? runtime.character.name : \"User\";\n return `${sender}: ${msg.content.text || \"[non-text message]\"}`;\n })\n .join(\"\\n\");\n\n template = initialSummarizationTemplate;\n prompt = composePromptFromState({\n state: { ...state, recentMessages: initialMessages },\n template,\n });\n }\n\n const response = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt,\n maxTokens: config.summaryMaxTokens || 2500,\n });\n\n const summaryResult = parseSummaryXML(response);\n\n logger.info(\n `${existingSummary ? \"Updated\" : \"Generated\"} summary: ${summaryResult.summary.substring(0, 100)}...`\n );\n\n const newOffset = lastOffset + newDialogueMessages.length;\n const firstMessage = newDialogueMessages[0];\n const lastMessage = newDialogueMessages[newDialogueMessages.length - 1];\n\n const startTime = existingSummary\n ? existingSummary.startTime\n : firstMessage?.createdAt && firstMessage.createdAt > 0\n ? new Date(firstMessage.createdAt)\n : new Date();\n const endTime =\n lastMessage?.createdAt && lastMessage.createdAt > 0\n ? new Date(lastMessage.createdAt)\n : new Date();\n\n if (existingSummary) {\n await memoryService.updateSessionSummary(existingSummary.id, roomId, {\n summary: summaryResult.summary,\n messageCount: existingSummary.messageCount + newDialogueMessages.length,\n lastMessageOffset: newOffset,\n endTime,\n topics: summaryResult.topics,\n metadata: { keyPoints: summaryResult.keyPoints },\n });\n\n logger.info(\n `Updated summary for room ${roomId}: ${newDialogueMessages.length} messages processed`\n );\n } else {\n await memoryService.storeSessionSummary({\n agentId: runtime.agentId,\n roomId,\n entityId: message.entityId !== runtime.agentId ? message.entityId : undefined,\n summary: summaryResult.summary,\n messageCount: totalDialogueCount,\n lastMessageOffset: totalDialogueCount,\n startTime,\n endTime,\n topics: summaryResult.topics,\n metadata: { keyPoints: summaryResult.keyPoints },\n });\n\n logger.info(\n `Created summary for room ${roomId}: ${totalDialogueCount} messages summarized`\n );\n }\n } catch (error) {\n logger.error({ error }, \"Error during summarization:\");\n }\n return undefined;\n },\n\n examples: [],\n};\n",
9
+ "import {\n addHeader,\n type IAgentRuntime,\n logger,\n type Memory,\n type Provider,\n type ProviderResult,\n type State,\n} from \"@elizaos/core\";\nimport type { MemoryService } from \"../services/memory-service\";\n\nexport const contextSummaryProvider: Provider = {\n name: \"SUMMARIZED_CONTEXT\",\n description: \"Provides summarized context from previous conversations\",\n position: 96,\n\n get: async (runtime: IAgentRuntime, message: Memory, _state: State): Promise<ProviderResult> => {\n try {\n const memoryService = runtime.getService(\"memory\") as MemoryService | null;\n const { roomId } = message;\n\n if (!memoryService) {\n return {\n data: {},\n values: { sessionSummaries: \"\", sessionSummariesWithTopics: \"\" },\n text: \"\",\n };\n }\n\n const currentSummary = await memoryService.getCurrentSessionSummary(roomId);\n\n if (!currentSummary) {\n return {\n data: {},\n values: { sessionSummaries: \"\", sessionSummariesWithTopics: \"\" },\n text: \"\",\n };\n }\n\n const messageRange = `${currentSummary.messageCount} messages`;\n const timeRange = new Date(currentSummary.startTime).toLocaleDateString();\n\n let summaryOnly = `**Previous Conversation** (${messageRange}, ${timeRange})\\n`;\n summaryOnly += currentSummary.summary;\n\n let summaryWithTopics = summaryOnly;\n if (currentSummary.topics && currentSummary.topics.length > 0) {\n summaryWithTopics += `\\n*Topics: ${currentSummary.topics.join(\", \")}*`;\n }\n\n const sessionSummaries = addHeader(\"# Conversation Summary\", summaryOnly);\n const sessionSummariesWithTopics = addHeader(\"# Conversation Summary\", summaryWithTopics);\n\n return {\n data: {\n summaryText: currentSummary.summary,\n messageCount: currentSummary.messageCount,\n topics: currentSummary.topics?.join(\", \") || \"\",\n },\n values: { sessionSummaries, sessionSummariesWithTopics },\n text: sessionSummariesWithTopics,\n };\n } catch (error) {\n logger.error({ error }, \"Error in contextSummaryProvider:\");\n return {\n data: {},\n values: { sessionSummaries: \"\", sessionSummariesWithTopics: \"\" },\n text: \"\",\n };\n }\n },\n};\n",
10
+ "import {\n addHeader,\n type IAgentRuntime,\n logger,\n type Memory,\n type Provider,\n type ProviderResult,\n type State,\n} from \"@elizaos/core\";\nimport type { MemoryService } from \"../services/memory-service\";\n\nexport const longTermMemoryProvider: Provider = {\n name: \"LONG_TERM_MEMORY\",\n description: \"Persistent facts and preferences about the user\",\n position: 50,\n\n get: async (runtime: IAgentRuntime, message: Memory, _state: State): Promise<ProviderResult> => {\n try {\n const memoryService = runtime.getService(\"memory\") as MemoryService | null;\n if (!memoryService) {\n return {\n data: { memoryCount: 0 },\n values: { longTermMemories: \"\" },\n text: \"\",\n };\n }\n\n const { entityId } = message;\n\n if (entityId === runtime.agentId) {\n return {\n data: { memoryCount: 0 },\n values: { longTermMemories: \"\" },\n text: \"\",\n };\n }\n\n const memories = await memoryService.getLongTermMemories(entityId, undefined, 25);\n\n if (memories.length === 0) {\n return {\n data: { memoryCount: 0 },\n values: { longTermMemories: \"\" },\n text: \"\",\n };\n }\n\n const formattedMemories = await memoryService.getFormattedLongTermMemories(entityId);\n const text = addHeader(\"# What I Know About You\", formattedMemories);\n\n const categoryCounts = new Map<string, number>();\n for (const memory of memories) {\n const count = categoryCounts.get(memory.category) || 0;\n categoryCounts.set(memory.category, count + 1);\n }\n\n const categoryList = Array.from(categoryCounts.entries())\n .map(([cat, count]) => `${cat}: ${count}`)\n .join(\", \");\n\n return {\n data: {\n memoryCount: memories.length,\n categories: categoryList,\n },\n values: {\n longTermMemories: text,\n memoryCategories: categoryList,\n },\n text,\n };\n } catch (error) {\n logger.error({ error }, \"Error in longTermMemoryProvider:\");\n return {\n data: { memoryCount: 0 },\n values: { longTermMemories: \"\" },\n text: \"\",\n };\n }\n },\n};\n",
11
+ "import { sql } from \"drizzle-orm\";\nimport {\n index,\n integer,\n jsonb,\n pgTable,\n real,\n text,\n timestamp,\n varchar,\n} from \"drizzle-orm/pg-core\";\n\nexport const longTermMemories = pgTable(\n \"long_term_memories\",\n {\n id: varchar(\"id\", { length: 36 }).primaryKey(),\n agentId: varchar(\"agent_id\", { length: 36 }).notNull(),\n entityId: varchar(\"entity_id\", { length: 36 }).notNull(),\n category: text(\"category\").notNull(),\n content: text(\"content\").notNull(),\n metadata: jsonb(\"metadata\"),\n embedding: real(\"embedding\").array(),\n confidence: real(\"confidence\").default(1.0),\n source: text(\"source\"),\n createdAt: timestamp(\"created_at\").default(sql`now()`).notNull(),\n updatedAt: timestamp(\"updated_at\").default(sql`now()`).notNull(),\n lastAccessedAt: timestamp(\"last_accessed_at\"),\n accessCount: integer(\"access_count\").default(0),\n },\n (table) => ({\n agentEntityIdx: index(\"long_term_memories_agent_entity_idx\").on(table.agentId, table.entityId),\n categoryIdx: index(\"long_term_memories_category_idx\").on(table.category),\n confidenceIdx: index(\"long_term_memories_confidence_idx\").on(table.confidence),\n createdAtIdx: index(\"long_term_memories_created_at_idx\").on(table.createdAt),\n })\n);\n",
12
+ "import { sql } from \"drizzle-orm\";\nimport { index, pgTable, text, timestamp, varchar } from \"drizzle-orm/pg-core\";\n\nexport const memoryAccessLogs = pgTable(\n \"memory_access_logs\",\n {\n id: varchar(\"id\", { length: 36 }).primaryKey(),\n memoryId: varchar(\"memory_id\", { length: 36 }).notNull(),\n memoryType: text(\"memory_type\").notNull(),\n agentId: varchar(\"agent_id\", { length: 36 }).notNull(),\n accessType: text(\"access_type\").notNull(),\n accessedAt: timestamp(\"accessed_at\").default(sql`now()`).notNull(),\n },\n (table) => ({\n memoryIdIdx: index(\"memory_access_logs_memory_id_idx\").on(table.memoryId),\n agentIdIdx: index(\"memory_access_logs_agent_id_idx\").on(table.agentId),\n accessedAtIdx: index(\"memory_access_logs_accessed_at_idx\").on(table.accessedAt),\n })\n);\n",
13
+ "import { sql } from \"drizzle-orm\";\nimport {\n index,\n integer,\n jsonb,\n pgTable,\n real,\n text,\n timestamp,\n varchar,\n} from \"drizzle-orm/pg-core\";\n\nexport const sessionSummaries = pgTable(\n \"session_summaries\",\n {\n id: varchar(\"id\", { length: 36 }).primaryKey(),\n agentId: varchar(\"agent_id\", { length: 36 }).notNull(),\n roomId: varchar(\"room_id\", { length: 36 }).notNull(),\n entityId: varchar(\"entity_id\", { length: 36 }),\n summary: text(\"summary\").notNull(),\n messageCount: integer(\"message_count\").notNull(),\n lastMessageOffset: integer(\"last_message_offset\").notNull().default(0),\n startTime: timestamp(\"start_time\").notNull(),\n endTime: timestamp(\"end_time\").notNull(),\n topics: jsonb(\"topics\"),\n metadata: jsonb(\"metadata\"),\n embedding: real(\"embedding\").array(),\n createdAt: timestamp(\"created_at\").default(sql`now()`).notNull(),\n updatedAt: timestamp(\"updated_at\").default(sql`now()`).notNull(),\n },\n (table) => ({\n agentRoomIdx: index(\"session_summaries_agent_room_idx\").on(table.agentId, table.roomId),\n entityIdx: index(\"session_summaries_entity_idx\").on(table.entityId),\n startTimeIdx: index(\"session_summaries_start_time_idx\").on(table.startTime),\n })\n);\n",
14
+ "import {\n type IAgentRuntime,\n logger,\n Service,\n type ServiceTypeName,\n type UUID,\n} from \"@elizaos/core\";\nimport { and, cosineDistance, desc, eq, gte, type SQL, sql } from \"drizzle-orm\";\nimport type { PgTable, TableConfig } from \"drizzle-orm/pg-core\";\nimport { longTermMemories, sessionSummaries } from \"../schemas\";\nimport type {\n LongTermMemory,\n LongTermMemoryCategory,\n MemoryConfig,\n SessionSummary,\n} from \"../types\";\n\ninterface LongTermMemoryRow {\n id: string;\n agentId: string;\n entityId: string;\n category: string;\n content: string;\n metadata: Record<string, unknown> | null;\n embedding: number[] | null;\n confidence: number | null;\n source: string | null;\n createdAt: Date;\n updatedAt: Date;\n lastAccessedAt: Date | null;\n accessCount: number | null;\n}\n\ninterface DrizzleDb {\n insert<T extends PgTable<TableConfig>>(\n table: T\n ): {\n values(data: Record<string, unknown>): Promise<void>;\n };\n select<T extends Record<string, unknown>>(\n columns?: T\n ): {\n from<TTable extends PgTable<TableConfig>>(\n table: TTable\n ): {\n where(condition: SQL): {\n orderBy(...args: SQL[]): {\n limit(n: number): Promise<Array<Record<string, unknown>>>;\n };\n };\n };\n };\n update<T extends PgTable<TableConfig>>(\n table: T\n ): {\n set(data: Record<string, unknown>): {\n where(condition: SQL): Promise<void>;\n };\n };\n delete<T extends PgTable<TableConfig>>(\n table: T\n ): {\n where(condition: SQL): Promise<void>;\n };\n}\n\nexport class MemoryService extends Service {\n static serviceType: ServiceTypeName = \"memory\" as ServiceTypeName;\n\n private sessionMessageCounts: Map<UUID, number>;\n private memoryConfig: MemoryConfig;\n private lastExtractionCheckpoints: Map<string, number>;\n\n capabilityDescription =\n \"Memory management with short-term summarization and long-term persistent facts\";\n\n constructor(runtime?: IAgentRuntime) {\n super(runtime);\n this.sessionMessageCounts = new Map();\n this.lastExtractionCheckpoints = new Map();\n this.memoryConfig = {\n shortTermSummarizationThreshold: 16,\n shortTermRetainRecent: 6,\n shortTermSummarizationInterval: 10,\n longTermExtractionEnabled: true,\n longTermVectorSearchEnabled: false,\n longTermConfidenceThreshold: 0.85,\n longTermExtractionThreshold: 30,\n longTermExtractionInterval: 10,\n summaryModelType: \"TEXT_LARGE\",\n summaryMaxTokens: 2500,\n summaryMaxNewMessages: 20,\n };\n }\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new MemoryService(runtime);\n await service.initialize(runtime);\n return service;\n }\n\n async stop(): Promise<void> {\n logger.info(\"MemoryService stopped\");\n }\n\n async initialize(runtime: IAgentRuntime): Promise<void> {\n this.runtime = runtime;\n\n const threshold = runtime.getSetting(\"MEMORY_SUMMARIZATION_THRESHOLD\");\n if (threshold) {\n this.memoryConfig.shortTermSummarizationThreshold = parseInt(String(threshold), 10);\n }\n\n const retainRecent = runtime.getSetting(\"MEMORY_RETAIN_RECENT\");\n if (retainRecent) {\n this.memoryConfig.shortTermRetainRecent = parseInt(String(retainRecent), 10);\n }\n\n const summarizationInterval = runtime.getSetting(\"MEMORY_SUMMARIZATION_INTERVAL\");\n if (summarizationInterval) {\n this.memoryConfig.shortTermSummarizationInterval = parseInt(\n String(summarizationInterval),\n 10\n );\n }\n\n const maxNewMessages = runtime.getSetting(\"MEMORY_MAX_NEW_MESSAGES\");\n if (maxNewMessages) {\n this.memoryConfig.summaryMaxNewMessages = parseInt(String(maxNewMessages), 10);\n }\n\n const longTermEnabled = runtime.getSetting(\"MEMORY_LONG_TERM_ENABLED\");\n if (longTermEnabled === \"false\" || longTermEnabled === false) {\n this.memoryConfig.longTermExtractionEnabled = false;\n } else if (longTermEnabled === \"true\" || longTermEnabled === true) {\n this.memoryConfig.longTermExtractionEnabled = true;\n }\n\n const confidenceThreshold = runtime.getSetting(\"MEMORY_CONFIDENCE_THRESHOLD\");\n if (confidenceThreshold) {\n this.memoryConfig.longTermConfidenceThreshold = parseFloat(String(confidenceThreshold));\n }\n\n const extractionThreshold = runtime.getSetting(\"MEMORY_EXTRACTION_THRESHOLD\");\n if (extractionThreshold) {\n this.memoryConfig.longTermExtractionThreshold = parseInt(String(extractionThreshold), 10);\n }\n\n const extractionInterval = runtime.getSetting(\"MEMORY_EXTRACTION_INTERVAL\");\n if (extractionInterval) {\n this.memoryConfig.longTermExtractionInterval = parseInt(String(extractionInterval), 10);\n }\n\n logger.debug(\n {\n summarizationThreshold: this.memoryConfig.shortTermSummarizationThreshold,\n summarizationInterval: this.memoryConfig.shortTermSummarizationInterval,\n maxNewMessages: this.memoryConfig.summaryMaxNewMessages,\n retainRecent: this.memoryConfig.shortTermRetainRecent,\n longTermEnabled: this.memoryConfig.longTermExtractionEnabled,\n extractionThreshold: this.memoryConfig.longTermExtractionThreshold,\n extractionInterval: this.memoryConfig.longTermExtractionInterval,\n confidenceThreshold: this.memoryConfig.longTermConfidenceThreshold,\n },\n \"MemoryService initialized\"\n );\n }\n\n private getDb(): DrizzleDb {\n const db = (this.runtime as IAgentRuntime & { db: DrizzleDb }).db;\n if (!db) {\n throw new Error(\"Database not available\");\n }\n return db;\n }\n\n getConfig(): MemoryConfig {\n return { ...this.memoryConfig };\n }\n\n updateConfig(updates: Partial<MemoryConfig>): void {\n this.memoryConfig = { ...this.memoryConfig, ...updates };\n }\n\n incrementMessageCount(roomId: UUID): number {\n const current = this.sessionMessageCounts.get(roomId) || 0;\n const newCount = current + 1;\n this.sessionMessageCounts.set(roomId, newCount);\n return newCount;\n }\n\n resetMessageCount(roomId: UUID): void {\n this.sessionMessageCounts.set(roomId, 0);\n }\n\n async shouldSummarize(roomId: UUID): Promise<boolean> {\n const count = await this.runtime.countMemories(roomId, false, \"messages\");\n return count >= this.memoryConfig.shortTermSummarizationThreshold;\n }\n\n private getExtractionKey(entityId: UUID, roomId: UUID): string {\n return `memory:extraction:${entityId}:${roomId}`;\n }\n\n async getLastExtractionCheckpoint(entityId: UUID, roomId: UUID): Promise<number> {\n const key = this.getExtractionKey(entityId, roomId);\n\n const cached = this.lastExtractionCheckpoints.get(key);\n if (cached !== undefined) {\n return cached;\n }\n\n try {\n const checkpoint = await this.runtime.getCache<number>(key);\n const messageCount = checkpoint ?? 0;\n this.lastExtractionCheckpoints.set(key, messageCount);\n return messageCount;\n } catch (error) {\n logger.warn({ error }, \"Failed to get extraction checkpoint from cache\");\n return 0;\n }\n }\n\n async setLastExtractionCheckpoint(\n entityId: UUID,\n roomId: UUID,\n messageCount: number\n ): Promise<void> {\n const key = this.getExtractionKey(entityId, roomId);\n this.lastExtractionCheckpoints.set(key, messageCount);\n\n try {\n await this.runtime.setCache(key, messageCount);\n logger.debug(\n `Set extraction checkpoint for ${entityId} in room ${roomId} at count ${messageCount}`\n );\n } catch (error) {\n logger.error({ error }, \"Failed to persist extraction checkpoint to cache\");\n }\n }\n\n async shouldRunExtraction(\n entityId: UUID,\n roomId: UUID,\n currentMessageCount: number\n ): Promise<boolean> {\n const threshold = this.memoryConfig.longTermExtractionThreshold;\n const interval = this.memoryConfig.longTermExtractionInterval;\n\n if (currentMessageCount < threshold) {\n return false;\n }\n\n const lastCheckpoint = await this.getLastExtractionCheckpoint(entityId, roomId);\n const currentCheckpoint = Math.floor(currentMessageCount / interval) * interval;\n const shouldRun = currentMessageCount >= threshold && currentCheckpoint > lastCheckpoint;\n\n logger.debug(\n {\n entityId,\n roomId,\n currentMessageCount,\n threshold,\n interval,\n lastCheckpoint,\n currentCheckpoint,\n shouldRun,\n },\n \"Extraction check\"\n );\n\n return shouldRun;\n }\n\n async storeLongTermMemory(\n memory: Omit<LongTermMemory, \"id\" | \"createdAt\" | \"updatedAt\">\n ): Promise<LongTermMemory> {\n const db = this.getDb();\n\n const id = crypto.randomUUID() as UUID;\n const now = new Date();\n\n const newMemory: LongTermMemory = {\n id,\n createdAt: now,\n updatedAt: now,\n accessCount: 0,\n ...memory,\n };\n\n try {\n await db.insert(longTermMemories).values({\n id: newMemory.id,\n agentId: newMemory.agentId,\n entityId: newMemory.entityId,\n category: newMemory.category,\n content: newMemory.content,\n metadata: newMemory.metadata || {},\n embedding: newMemory.embedding,\n confidence: newMemory.confidence,\n source: newMemory.source,\n accessCount: newMemory.accessCount,\n createdAt: now,\n updatedAt: now,\n lastAccessedAt: newMemory.lastAccessedAt,\n });\n } catch (error) {\n logger.error({ error }, \"Failed to store long-term memory\");\n throw error;\n }\n\n logger.info(`Stored long-term memory: ${newMemory.category} for entity ${newMemory.entityId}`);\n return newMemory;\n }\n\n async getLongTermMemories(\n entityId: UUID,\n category?: LongTermMemoryCategory,\n limit: number = 10\n ): Promise<LongTermMemory[]> {\n const db = this.getDb();\n\n const conditions = [\n eq(longTermMemories.agentId, this.runtime.agentId),\n eq(longTermMemories.entityId, entityId),\n ];\n\n if (category) {\n conditions.push(eq(longTermMemories.category, category));\n }\n\n const results = await db\n .select()\n .from(longTermMemories)\n .where(and(...conditions))\n .orderBy(desc(longTermMemories.confidence), desc(longTermMemories.updatedAt))\n .limit(limit);\n\n return results.map((row) => ({\n id: row.id as UUID,\n agentId: row.agentId as UUID,\n entityId: row.entityId as UUID,\n category: row.category as LongTermMemoryCategory,\n content: row.content as string,\n metadata: row.metadata as Record<string, unknown>,\n embedding: row.embedding as number[],\n confidence: row.confidence as number,\n source: row.source as string,\n createdAt: row.createdAt as Date,\n updatedAt: row.updatedAt as Date,\n lastAccessedAt: row.lastAccessedAt as Date,\n accessCount: row.accessCount as number,\n }));\n }\n\n async updateLongTermMemory(\n id: UUID,\n entityId: UUID,\n updates: Partial<Omit<LongTermMemory, \"id\" | \"agentId\" | \"entityId\" | \"createdAt\">>\n ): Promise<void> {\n const db = this.getDb();\n\n const updateData: Record<string, unknown> = {\n updatedAt: new Date(),\n };\n\n if (updates.content !== undefined) updateData.content = updates.content;\n if (updates.metadata !== undefined) updateData.metadata = updates.metadata;\n if (updates.confidence !== undefined) updateData.confidence = updates.confidence;\n if (updates.embedding !== undefined) updateData.embedding = updates.embedding;\n if (updates.lastAccessedAt !== undefined) updateData.lastAccessedAt = updates.lastAccessedAt;\n if (updates.accessCount !== undefined) updateData.accessCount = updates.accessCount;\n\n await db\n .update(longTermMemories)\n .set(updateData)\n .where(\n and(\n eq(longTermMemories.id, id),\n eq(longTermMemories.agentId, this.runtime.agentId),\n eq(longTermMemories.entityId, entityId)\n )\n );\n\n logger.info(`Updated long-term memory: ${id} for entity ${entityId}`);\n }\n\n async deleteLongTermMemory(id: UUID, entityId: UUID): Promise<void> {\n const db = this.getDb();\n\n await db\n .delete(longTermMemories)\n .where(\n and(\n eq(longTermMemories.id, id),\n eq(longTermMemories.agentId, this.runtime.agentId),\n eq(longTermMemories.entityId, entityId)\n )\n );\n\n logger.info(`Deleted long-term memory: ${id} for entity ${entityId}`);\n }\n\n async getCurrentSessionSummary(roomId: UUID): Promise<SessionSummary | null> {\n const db = this.getDb();\n\n const results = await db\n .select()\n .from(sessionSummaries)\n .where(\n and(eq(sessionSummaries.agentId, this.runtime.agentId), eq(sessionSummaries.roomId, roomId))\n )\n .orderBy(desc(sessionSummaries.updatedAt))\n .limit(1);\n\n if (results.length === 0) {\n return null;\n }\n\n const row = results[0];\n return {\n id: row.id as UUID,\n agentId: row.agentId as UUID,\n roomId: row.roomId as UUID,\n entityId: row.entityId as UUID | undefined,\n summary: row.summary as string,\n messageCount: row.messageCount as number,\n lastMessageOffset: row.lastMessageOffset as number,\n startTime: row.startTime as Date,\n endTime: row.endTime as Date,\n topics: (row.topics as string[]) || [],\n metadata: row.metadata as Record<string, unknown>,\n embedding: row.embedding as number[],\n createdAt: row.createdAt as Date,\n updatedAt: row.updatedAt as Date,\n };\n }\n\n async storeSessionSummary(\n summary: Omit<SessionSummary, \"id\" | \"createdAt\" | \"updatedAt\">\n ): Promise<SessionSummary> {\n const db = this.getDb();\n\n const id = crypto.randomUUID() as UUID;\n const now = new Date();\n\n const newSummary: SessionSummary = {\n id,\n createdAt: now,\n updatedAt: now,\n ...summary,\n };\n\n await db.insert(sessionSummaries).values({\n id: newSummary.id,\n agentId: newSummary.agentId,\n roomId: newSummary.roomId,\n entityId: newSummary.entityId || null,\n summary: newSummary.summary,\n messageCount: newSummary.messageCount,\n lastMessageOffset: newSummary.lastMessageOffset,\n startTime: newSummary.startTime,\n endTime: newSummary.endTime,\n topics: newSummary.topics || [],\n metadata: newSummary.metadata || {},\n embedding: newSummary.embedding,\n createdAt: now,\n updatedAt: now,\n });\n\n logger.info(`Stored session summary for room ${newSummary.roomId}`);\n return newSummary;\n }\n\n async updateSessionSummary(\n id: UUID,\n roomId: UUID,\n updates: Partial<Omit<SessionSummary, \"id\" | \"agentId\" | \"roomId\" | \"createdAt\" | \"updatedAt\">>\n ): Promise<void> {\n const db = this.getDb();\n\n const updateData: Record<string, unknown> = {\n updatedAt: new Date(),\n };\n\n if (updates.summary !== undefined) updateData.summary = updates.summary;\n if (updates.messageCount !== undefined) updateData.messageCount = updates.messageCount;\n if (updates.lastMessageOffset !== undefined)\n updateData.lastMessageOffset = updates.lastMessageOffset;\n if (updates.endTime !== undefined) updateData.endTime = updates.endTime;\n if (updates.topics !== undefined) updateData.topics = updates.topics;\n if (updates.metadata !== undefined) updateData.metadata = updates.metadata;\n if (updates.embedding !== undefined) updateData.embedding = updates.embedding;\n\n await db\n .update(sessionSummaries)\n .set(updateData)\n .where(\n and(\n eq(sessionSummaries.id, id),\n eq(sessionSummaries.agentId, this.runtime.agentId),\n eq(sessionSummaries.roomId, roomId)\n )\n );\n\n logger.info(`Updated session summary: ${id} for room ${roomId}`);\n }\n\n async getSessionSummaries(roomId: UUID, limit: number = 5): Promise<SessionSummary[]> {\n const db = this.getDb();\n\n const results = await db\n .select()\n .from(sessionSummaries)\n .where(\n and(eq(sessionSummaries.agentId, this.runtime.agentId), eq(sessionSummaries.roomId, roomId))\n )\n .orderBy(desc(sessionSummaries.updatedAt))\n .limit(limit);\n\n return results.map((row) => ({\n id: row.id as UUID,\n agentId: row.agentId as UUID,\n roomId: row.roomId as UUID,\n entityId: row.entityId as UUID | undefined,\n summary: row.summary as string,\n messageCount: row.messageCount as number,\n lastMessageOffset: row.lastMessageOffset as number,\n startTime: row.startTime as Date,\n endTime: row.endTime as Date,\n topics: (row.topics as string[]) || [],\n metadata: row.metadata as Record<string, unknown>,\n embedding: row.embedding as number[],\n createdAt: row.createdAt as Date,\n updatedAt: row.updatedAt as Date,\n }));\n }\n\n async searchLongTermMemories(\n entityId: UUID,\n queryEmbedding: number[],\n limit: number = 5,\n matchThreshold: number = 0.7\n ): Promise<LongTermMemory[]> {\n if (!this.memoryConfig.longTermVectorSearchEnabled) {\n logger.warn(\"Vector search is not enabled, falling back to recent memories\");\n return this.getLongTermMemories(entityId, undefined, limit);\n }\n\n const db = this.getDb();\n\n try {\n const cleanVector = queryEmbedding.map((n) =>\n Number.isFinite(n) ? Number(n.toFixed(6)) : 0\n );\n\n const similarity = sql<number>`1 - (${cosineDistance(\n longTermMemories.embedding,\n cleanVector\n )})`;\n\n const conditions = [\n eq(longTermMemories.agentId, this.runtime.agentId),\n eq(longTermMemories.entityId, entityId),\n sql`${longTermMemories.embedding} IS NOT NULL`,\n ];\n\n if (matchThreshold > 0) {\n conditions.push(gte(similarity, matchThreshold));\n }\n\n const results = (await db\n .select({\n memory: longTermMemories,\n similarity,\n })\n .from(longTermMemories)\n .where(and(...conditions))\n .orderBy(desc(similarity))\n .limit(limit)) as Array<{ memory: LongTermMemoryRow; similarity: number }>;\n\n return results.map((row) => ({\n id: row.memory.id as UUID,\n agentId: row.memory.agentId as UUID,\n entityId: row.memory.entityId as UUID,\n category: row.memory.category as LongTermMemoryCategory,\n content: row.memory.content,\n metadata: row.memory.metadata ?? {},\n embedding: row.memory.embedding ?? [],\n confidence: row.memory.confidence ?? 1.0,\n source: row.memory.source ?? \"\",\n createdAt: row.memory.createdAt,\n updatedAt: row.memory.updatedAt,\n lastAccessedAt: row.memory.lastAccessedAt ?? row.memory.updatedAt,\n accessCount: row.memory.accessCount ?? 0,\n similarity: row.similarity,\n }));\n } catch (error) {\n logger.warn({ error }, \"Vector search failed, falling back to recent memories\");\n return this.getLongTermMemories(entityId, undefined, limit);\n }\n }\n\n async getFormattedLongTermMemories(entityId: UUID): Promise<string> {\n const memories = await this.getLongTermMemories(entityId, undefined, 20);\n\n if (memories.length === 0) {\n return \"\";\n }\n\n const grouped = new Map<LongTermMemoryCategory, LongTermMemory[]>();\n\n for (const memory of memories) {\n if (!grouped.has(memory.category)) {\n grouped.set(memory.category, []);\n }\n grouped.get(memory.category)?.push(memory);\n }\n\n const sections: string[] = [];\n\n for (const [category, categoryMemories] of grouped.entries()) {\n const categoryName = category\n .split(\"_\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n\n const items = categoryMemories.map((m) => `- ${m.content}`).join(\"\\n\");\n sections.push(`**${categoryName}**:\\n${items}`);\n }\n\n return sections.join(\"\\n\\n\");\n }\n}\n",
15
+ "import type { Plugin } from \"@elizaos/core\";\nimport { longTermExtractionEvaluator, summarizationEvaluator } from \"./evaluators\";\nimport { contextSummaryProvider, longTermMemoryProvider } from \"./providers\";\nimport * as schema from \"./schemas\";\nimport { MemoryService } from \"./services/memory-service\";\n\nexport {\n longTermExtractionEvaluator,\n summarizationEvaluator,\n} from \"./evaluators\";\nexport { contextSummaryProvider, longTermMemoryProvider } from \"./providers\";\nexport * from \"./schemas\";\nexport { MemoryService } from \"./services/memory-service\";\nexport * from \"./types\";\n\nexport const memoryPlugin: Plugin = {\n name: \"memory\",\n description: \"Memory management with conversation summarization and long-term persistent memory\",\n\n services: [MemoryService],\n\n evaluators: [summarizationEvaluator, longTermExtractionEvaluator],\n\n providers: [longTermMemoryProvider, contextSummaryProvider],\n\n schema,\n};\n\nexport default memoryPlugin;\n"
16
+ ],
17
+ "mappings": ";;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACUO,IAAM,+BAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCrC,IAAM,6BAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwInC,IAAM,8BAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACjLpC,IAAK;AAAA,CAAL,CAAK,4BAAL;AAAA,EACL,sCAAW;AAAA,EACX,sCAAW;AAAA,EACX,wCAAa;AAAA,GAHH;;;AFUZ,IAAM,qBAAqB;AAE3B,SAAS,wBAAwB,CAAC,KAAiC;AAAA,EACjE,MAAM,gBAAgB,IAAI,SACxB,wIACF;AAAA,EAEA,MAAM,cAAkC,CAAC;AAAA,EAEzC,WAAW,SAAS,eAAe;AAAA,IACjC,MAAM,WAAW,MAAM,GAAG,KAAK;AAAA,IAC/B,MAAM,UAAU,MAAM,GAAG,KAAK;AAAA,IAC9B,MAAM,aAAa,WAAW,MAAM,GAAG,KAAK,CAAC;AAAA,IAE7C,IAAI,CAAC,OAAO,OAAO,sBAAsB,EAAE,SAAS,QAAQ,GAAG;AAAA,MAC7D,OAAO,KAAK,4BAA4B,UAAU;AAAA,MAClD;AAAA,IACF;AAAA,IAEA,IAAI,WAAW,CAAC,OAAO,MAAM,UAAU,GAAG;AAAA,MACxC,YAAY,KAAK,EAAE,UAAU,SAAS,WAAW,CAAC;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGF,IAAM,8BAAyC;AAAA,EACpD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS,CAAC,qBAAqB,iBAAiB,gBAAgB;AAAA,EAChE,WAAW;AAAA,EAEX,UAAU,OAAO,SAAwB,YAAsC;AAAA,IAC7E,IAAI,QAAQ,aAAa,QAAQ,SAAS;AAAA,MACxC,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,CAAC,QAAQ,SAAS,MAAM;AAAA,MAC1B,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,gBAAgB,QAAQ,WAAW,QAAQ;AAAA,IACjD,IAAI,CAAC,eAAe;AAAA,MAClB,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,SAAS,cAAc,UAAU;AAAA,IACvC,IAAI,CAAC,OAAO,2BAA2B;AAAA,MACrC,OAAO,MAAM,yCAAyC;AAAA,MACtD,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,sBAAsB,MAAM,QAAQ,cAAc,QAAQ,QAAQ,OAAO,UAAU;AAAA,IAEzF,OAAO,cAAc,oBAAoB,QAAQ,UAAU,QAAQ,QAAQ,mBAAmB;AAAA;AAAA,EAGhG,SAAS,OAAO,SAAwB,YAAoB;AAAA,IAC1D,MAAM,gBAAgB,QAAQ,WAAW,QAAQ;AAAA,IACjD,IAAI,CAAC,eAAe;AAAA,MAClB,OAAO,MAAM,yBAAyB;AAAA,MACtC;AAAA,IACF;AAAA,IAEA,MAAM,SAAS,cAAc,UAAU;AAAA,IACvC,QAAQ,UAAU,WAAW;AAAA,IAE7B,IAAI;AAAA,MACF,OAAO,KAAK,4CAA4C,UAAU;AAAA,MAElE,MAAM,iBAAiB,MAAM,QAAQ,YAAY;AAAA,QAC/C,WAAW;AAAA,QACX;AAAA,QACA,OAAO;AAAA,QACP,QAAQ;AAAA,MACV,CAAC;AAAA,MAED,MAAM,oBAAoB,eACvB,KAAK,CAAC,GAAG,OAAO,EAAE,aAAa,MAAM,EAAE,aAAa,EAAE,EACtD,IAAI,CAAC,QAAQ;AAAA,QACZ,MAAM,SAAS,IAAI,aAAa,QAAQ,UAAU,QAAQ,UAAU,OAAO;AAAA,QAC3E,OAAO,GAAG,WAAW,IAAI,QAAQ,QAAQ;AAAA,OAC1C,EACA,KAAK;AAAA,CAAI;AAAA,MAEZ,MAAM,mBAAmB,MAAM,cAAc,oBAAoB,UAAU,WAAW,EAAE;AAAA,MACxF,MAAM,oBACJ,iBAAiB,SAAS,IACtB,iBACG,IAAI,CAAC,MAAM,IAAI,EAAE,aAAa,EAAE,wBAAwB,EAAE,aAAa,EACvE,KAAK;AAAA,CAAI,IACZ;AAAA,MAEN,MAAM,QAAQ,MAAM,QAAQ,aAAa,OAAO;AAAA,MAChD,MAAM,SAAS,uBAAuB;AAAA,QACpC,OAAO;AAAA,aACF;AAAA,UACH,gBAAgB;AAAA,UAChB,kBAAkB;AAAA,QACpB;AAAA,QACA,UAAU;AAAA,MACZ,CAAC;AAAA,MAED,MAAM,WAAW,MAAM,QAAQ,SAAS,UAAU,YAAY,EAAE,OAAO,CAAC;AAAA,MAExE,MAAM,cAAc,yBAAyB,QAAQ;AAAA,MAErD,OAAO,KAAK,aAAa,YAAY,2BAA2B;AAAA,MAEhE,WAAW,cAAc,aAAa;AAAA,QACpC,IAAI,WAAW,cAAc,KAAK,IAAI,OAAO,6BAA6B,IAAI,GAAG;AAAA,UAC/E,MAAM,cAAc,oBAAoB;AAAA,YACtC,SAAS,QAAQ;AAAA,YACjB;AAAA,YACA,UAAU,WAAW;AAAA,YACrB,SAAS,WAAW;AAAA,YACpB,YAAY,WAAW;AAAA,YACvB,QAAQ;AAAA,YACR,UAAU;AAAA,cACR;AAAA,cACA,aAAa,IAAI,KAAK,EAAE,YAAY;AAAA,YACtC;AAAA,UACF,CAAC;AAAA,UAED,OAAO,KACL,6BAA6B,WAAW,aAAa,WAAW,QAAQ,UAAU,GAAG,EAAE,MACzF;AAAA,QACF,EAAO;AAAA,UACL,OAAO,MACL,kCAAkC,WAAW,wBAAwB,WAAW,aAClF;AAAA;AAAA,MAEJ;AAAA,MAEA,MAAM,sBAAsB,MAAM,QAAQ,cAAc,QAAQ,OAAO,UAAU;AAAA,MACjF,MAAM,cAAc,4BAA4B,UAAU,QAAQ,mBAAmB;AAAA,MACrF,OAAO,MAAM,yBAAyB,kCAAkC,UAAU;AAAA,MAClF,OAAO,OAAO;AAAA,MACd,OAAO,MAAM,EAAE,MAAM,GAAG,2CAA2C;AAAA;AAAA,IAErE;AAAA;AAAA,EAGF,UAAU,CAAC;AACb;;AG7JA;AAAA,4BACE;AAAA,YAGA;AAAA,eAEA;AAAA;AAMF,eAAe,uBAAuB,CAAC,SAAwB,QAA+B;AAAA,EAC5F,MAAM,WAAW,MAAM,QAAQ,YAAY;AAAA,IACzC,WAAW;AAAA,IACX;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA,EACV,CAAC;AAAA,EAED,MAAM,mBAAmB,SAAS,OAChC,CAAC,QACC,EACG,IAAI,SAAS,SAAoB,mBACjC,IAAI,UAAU,SAAoB,qBAEnC,IAAI,UAAU,SAAoB,4BACjC,IAAI,UAAU,SAAoB,eACzC;AAAA,EAEA,OAAO,iBAAiB;AAAA;AAQ1B,SAAS,eAAe,CAAC,KAA4B;AAAA,EACnD,MAAM,eAAe,IAAI,MAAM,0BAA0B;AAAA,EACzD,MAAM,cAAc,IAAI,MAAM,8BAA8B;AAAA,EAC5D,MAAM,mBAAmB,IAAI,SAAS,6BAA6B;AAAA,EAEnE,MAAM,UAAU,eAAe,aAAa,GAAG,KAAK,IAAI;AAAA,EACxD,MAAM,SAAS,cACX,YAAY,GACT,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO,IACjB,CAAC;AAAA,EACL,MAAM,YAAY,MAAM,KAAK,gBAAgB,EAAE,IAAI,CAAC,UAAU,MAAM,GAAG,KAAK,CAAC;AAAA,EAE7E,OAAO,EAAE,SAAS,QAAQ,UAAU;AAAA;AAG/B,IAAM,yBAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS,CAAC,wBAAwB,uBAAuB,qBAAqB;AAAA,EAC9E,WAAW;AAAA,EAEX,UAAU,OAAO,SAAwB,YAAsC;AAAA,IAC7E,IAAI,CAAC,QAAQ,SAAS,MAAM;AAAA,MAC1B,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,gBAAgB,QAAQ,WAAW,QAAQ;AAAA,IACjD,IAAI,CAAC,eAAe;AAAA,MAClB,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,SAAS,cAAc,UAAU;AAAA,IACvC,MAAM,uBAAuB,MAAM,wBAAwB,SAAS,QAAQ,MAAM;AAAA,IAClF,MAAM,kBAAkB,MAAM,cAAc,yBAAyB,QAAQ,MAAM;AAAA,IAEnF,IAAI,CAAC,iBAAiB;AAAA,MACpB,OAAO,wBAAwB,OAAO;AAAA,IACxC,EAAO;AAAA,MACL,MAAM,mBAAmB,uBAAuB,gBAAgB;AAAA,MAChE,OAAO,oBAAoB,OAAO;AAAA;AAAA;AAAA,EAItC,SAAS,OAAO,SAAwB,YAAoB;AAAA,IAC1D,MAAM,gBAAgB,QAAQ,WAAW,QAAQ;AAAA,IACjD,IAAI,CAAC,eAAe;AAAA,MAClB,QAAO,MAAM,yBAAyB;AAAA,MACtC;AAAA,IACF;AAAA,IAEA,MAAM,SAAS,cAAc,UAAU;AAAA,IACvC,QAAQ,WAAW;AAAA,IAEnB,IAAI;AAAA,MACF,QAAO,KAAK,mCAAmC,QAAQ;AAAA,MAEvD,MAAM,kBAAkB,MAAM,cAAc,yBAAyB,MAAM;AAAA,MAC3E,MAAM,aAAa,iBAAiB,qBAAqB;AAAA,MAEzD,MAAM,cAAc,MAAM,QAAQ,YAAY;AAAA,QAC5C,WAAW;AAAA,QACX;AAAA,QACA,OAAO;AAAA,QACP,QAAQ;AAAA,MACV,CAAC;AAAA,MAED,MAAM,sBAAsB,YAAY,OACtC,CAAC,QACC,EACG,IAAI,SAAS,SAAoB,mBACjC,IAAI,UAAU,SAAoB,qBAEnC,IAAI,UAAU,SAAoB,4BACjC,IAAI,UAAU,SAAoB,eACzC;AAAA,MAEA,MAAM,qBAAqB,oBAAoB;AAAA,MAC/C,MAAM,mBAAmB,qBAAqB;AAAA,MAE9C,IAAI,qBAAqB,GAAG;AAAA,QAC1B,QAAO,MAAM,uCAAuC;AAAA,QACpD;AAAA,MACF;AAAA,MAEA,MAAM,iBAAiB,OAAO,yBAAyB;AAAA,MACvD,MAAM,oBAAoB,KAAK,IAAI,kBAAkB,cAAc;AAAA,MAEnE,IAAI,mBAAmB,gBAAgB;AAAA,QACrC,QAAO,KACL,oCAAoC,mBAAmB,6BACzD;AAAA,MACF;AAAA,MAEA,MAAM,yBAAyB,oBAAoB,KACjD,CAAC,GAAG,OAAO,EAAE,aAAa,MAAM,EAAE,aAAa,EACjD;AAAA,MAEA,MAAM,sBAAsB,uBAAuB,MACjD,YACA,aAAa,iBACf;AAAA,MAEA,IAAI,oBAAoB,WAAW,GAAG;AAAA,QACpC,QAAO,MAAM,oDAAoD;AAAA,QACjE;AAAA,MACF;AAAA,MAEA,MAAM,oBAAoB,oBACvB,IAAI,CAAC,QAAQ;AAAA,QACZ,MAAM,SAAS,IAAI,aAAa,QAAQ,UAAU,QAAQ,UAAU,OAAO;AAAA,QAC3E,OAAO,GAAG,WAAW,IAAI,QAAQ,QAAQ;AAAA,OAC1C,EACA,KAAK;AAAA,CAAI;AAAA,MAEZ,MAAM,QAAQ,MAAM,QAAQ,aAAa,OAAO;AAAA,MAChD,IAAI;AAAA,MACJ,IAAI;AAAA,MAEJ,IAAI,iBAAiB;AAAA,QACnB,WAAW;AAAA,QACX,SAAS,wBAAuB;AAAA,UAC9B,OAAO;AAAA,eACF;AAAA,YACH,iBAAiB,gBAAgB;AAAA,YACjC,gBAAgB,gBAAgB,QAAQ,KAAK,IAAI,KAAK;AAAA,YACtD,aAAa;AAAA,UACf;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,EAAO;AAAA,QACL,MAAM,kBAAkB,uBACrB,IAAI,CAAC,QAAQ;AAAA,UACZ,MAAM,SAAS,IAAI,aAAa,QAAQ,UAAU,QAAQ,UAAU,OAAO;AAAA,UAC3E,OAAO,GAAG,WAAW,IAAI,QAAQ,QAAQ;AAAA,SAC1C,EACA,KAAK;AAAA,CAAI;AAAA,QAEZ,WAAW;AAAA,QACX,SAAS,wBAAuB;AAAA,UAC9B,OAAO,KAAK,OAAO,gBAAgB,gBAAgB;AAAA,UACnD;AAAA,QACF,CAAC;AAAA;AAAA,MAGH,MAAM,WAAW,MAAM,QAAQ,SAAS,WAAU,YAAY;AAAA,QAC5D;AAAA,QACA,WAAW,OAAO,oBAAoB;AAAA,MACxC,CAAC;AAAA,MAED,MAAM,gBAAgB,gBAAgB,QAAQ;AAAA,MAE9C,QAAO,KACL,GAAG,kBAAkB,YAAY,wBAAwB,cAAc,QAAQ,UAAU,GAAG,GAAG,MACjG;AAAA,MAEA,MAAM,YAAY,aAAa,oBAAoB;AAAA,MACnD,MAAM,eAAe,oBAAoB;AAAA,MACzC,MAAM,cAAc,oBAAoB,oBAAoB,SAAS;AAAA,MAErE,MAAM,YAAY,kBACd,gBAAgB,YAChB,cAAc,aAAa,aAAa,YAAY,IAClD,IAAI,KAAK,aAAa,SAAS,IAC/B,IAAI;AAAA,MACV,MAAM,UACJ,aAAa,aAAa,YAAY,YAAY,IAC9C,IAAI,KAAK,YAAY,SAAS,IAC9B,IAAI;AAAA,MAEV,IAAI,iBAAiB;AAAA,QACnB,MAAM,cAAc,qBAAqB,gBAAgB,IAAI,QAAQ;AAAA,UACnE,SAAS,cAAc;AAAA,UACvB,cAAc,gBAAgB,eAAe,oBAAoB;AAAA,UACjE,mBAAmB;AAAA,UACnB;AAAA,UACA,QAAQ,cAAc;AAAA,UACtB,UAAU,EAAE,WAAW,cAAc,UAAU;AAAA,QACjD,CAAC;AAAA,QAED,QAAO,KACL,4BAA4B,WAAW,oBAAoB,2BAC7D;AAAA,MACF,EAAO;AAAA,QACL,MAAM,cAAc,oBAAoB;AAAA,UACtC,SAAS,QAAQ;AAAA,UACjB;AAAA,UACA,UAAU,QAAQ,aAAa,QAAQ,UAAU,QAAQ,WAAW;AAAA,UACpE,SAAS,cAAc;AAAA,UACvB,cAAc;AAAA,UACd,mBAAmB;AAAA,UACnB;AAAA,UACA;AAAA,UACA,QAAQ,cAAc;AAAA,UACtB,UAAU,EAAE,WAAW,cAAc,UAAU;AAAA,QACjD,CAAC;AAAA,QAED,QAAO,KACL,4BAA4B,WAAW,wCACzC;AAAA;AAAA,MAEF,OAAO,OAAO;AAAA,MACd,QAAO,MAAM,EAAE,MAAM,GAAG,6BAA6B;AAAA;AAAA,IAEvD;AAAA;AAAA,EAGF,UAAU,CAAC;AACb;;ACvPA;AAAA;AAAA,YAGE;AAAA;AAQK,IAAM,yBAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,EAEV,KAAK,OAAO,SAAwB,SAAiB,WAA2C;AAAA,IAC9F,IAAI;AAAA,MACF,MAAM,gBAAgB,QAAQ,WAAW,QAAQ;AAAA,MACjD,QAAQ,WAAW;AAAA,MAEnB,IAAI,CAAC,eAAe;AAAA,QAClB,OAAO;AAAA,UACL,MAAM,CAAC;AAAA,UACP,QAAQ,EAAE,kBAAkB,IAAI,4BAA4B,GAAG;AAAA,UAC/D,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MAEA,MAAM,iBAAiB,MAAM,cAAc,yBAAyB,MAAM;AAAA,MAE1E,IAAI,CAAC,gBAAgB;AAAA,QACnB,OAAO;AAAA,UACL,MAAM,CAAC;AAAA,UACP,QAAQ,EAAE,kBAAkB,IAAI,4BAA4B,GAAG;AAAA,UAC/D,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MAEA,MAAM,eAAe,GAAG,eAAe;AAAA,MACvC,MAAM,YAAY,IAAI,KAAK,eAAe,SAAS,EAAE,mBAAmB;AAAA,MAExE,IAAI,cAAc,8BAA8B,iBAAiB;AAAA;AAAA,MACjE,eAAe,eAAe;AAAA,MAE9B,IAAI,oBAAoB;AAAA,MACxB,IAAI,eAAe,UAAU,eAAe,OAAO,SAAS,GAAG;AAAA,QAC7D,qBAAqB;AAAA,WAAc,eAAe,OAAO,KAAK,IAAI;AAAA,MACpE;AAAA,MAEA,MAAM,mBAAmB,UAAU,0BAA0B,WAAW;AAAA,MACxE,MAAM,6BAA6B,UAAU,0BAA0B,iBAAiB;AAAA,MAExF,OAAO;AAAA,QACL,MAAM;AAAA,UACJ,aAAa,eAAe;AAAA,UAC5B,cAAc,eAAe;AAAA,UAC7B,QAAQ,eAAe,QAAQ,KAAK,IAAI,KAAK;AAAA,QAC/C;AAAA,QACA,QAAQ,EAAE,kBAAkB,2BAA2B;AAAA,QACvD,MAAM;AAAA,MACR;AAAA,MACA,OAAO,OAAO;AAAA,MACd,QAAO,MAAM,EAAE,MAAM,GAAG,kCAAkC;AAAA,MAC1D,OAAO;AAAA,QACL,MAAM,CAAC;AAAA,QACP,QAAQ,EAAE,kBAAkB,IAAI,4BAA4B,GAAG;AAAA,QAC/D,MAAM;AAAA,MACR;AAAA;AAAA;AAGN;;ACvEA;AAAA,eACE;AAAA,YAEA;AAAA;AAQK,IAAM,yBAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,EAEV,KAAK,OAAO,SAAwB,SAAiB,WAA2C;AAAA,IAC9F,IAAI;AAAA,MACF,MAAM,gBAAgB,QAAQ,WAAW,QAAQ;AAAA,MACjD,IAAI,CAAC,eAAe;AAAA,QAClB,OAAO;AAAA,UACL,MAAM,EAAE,aAAa,EAAE;AAAA,UACvB,QAAQ,EAAE,kBAAkB,GAAG;AAAA,UAC/B,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MAEA,QAAQ,aAAa;AAAA,MAErB,IAAI,aAAa,QAAQ,SAAS;AAAA,QAChC,OAAO;AAAA,UACL,MAAM,EAAE,aAAa,EAAE;AAAA,UACvB,QAAQ,EAAE,kBAAkB,GAAG;AAAA,UAC/B,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MAEA,MAAM,WAAW,MAAM,cAAc,oBAAoB,UAAU,WAAW,EAAE;AAAA,MAEhF,IAAI,SAAS,WAAW,GAAG;AAAA,QACzB,OAAO;AAAA,UACL,MAAM,EAAE,aAAa,EAAE;AAAA,UACvB,QAAQ,EAAE,kBAAkB,GAAG;AAAA,UAC/B,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MAEA,MAAM,oBAAoB,MAAM,cAAc,6BAA6B,QAAQ;AAAA,MACnF,MAAM,OAAO,WAAU,2BAA2B,iBAAiB;AAAA,MAEnE,MAAM,iBAAiB,IAAI;AAAA,MAC3B,WAAW,UAAU,UAAU;AAAA,QAC7B,MAAM,QAAQ,eAAe,IAAI,OAAO,QAAQ,KAAK;AAAA,QACrD,eAAe,IAAI,OAAO,UAAU,QAAQ,CAAC;AAAA,MAC/C;AAAA,MAEA,MAAM,eAAe,MAAM,KAAK,eAAe,QAAQ,CAAC,EACrD,IAAI,EAAE,KAAK,WAAW,GAAG,QAAQ,OAAO,EACxC,KAAK,IAAI;AAAA,MAEZ,OAAO;AAAA,QACL,MAAM;AAAA,UACJ,aAAa,SAAS;AAAA,UACtB,YAAY;AAAA,QACd;AAAA,QACA,QAAQ;AAAA,UACN,kBAAkB;AAAA,UAClB,kBAAkB;AAAA,QACpB;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO,OAAO;AAAA,MACd,QAAO,MAAM,EAAE,MAAM,GAAG,kCAAkC;AAAA,MAC1D,OAAO;AAAA,QACL,MAAM,EAAE,aAAa,EAAE;AAAA,QACvB,QAAQ,EAAE,kBAAkB,GAAG;AAAA,QAC/B,MAAM;AAAA,MACR;AAAA;AAAA;AAGN;;;;;;;;;;AChFA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWO,IAAM,mBAAmB,QAC9B,sBACA;AAAA,EACE,IAAI,QAAQ,MAAM,EAAE,QAAQ,GAAG,CAAC,EAAE,WAAW;AAAA,EAC7C,SAAS,QAAQ,YAAY,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EACrD,UAAU,QAAQ,aAAa,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EACvD,UAAU,KAAK,UAAU,EAAE,QAAQ;AAAA,EACnC,SAAS,KAAK,SAAS,EAAE,QAAQ;AAAA,EACjC,UAAU,MAAM,UAAU;AAAA,EAC1B,WAAW,KAAK,WAAW,EAAE,MAAM;AAAA,EACnC,YAAY,KAAK,YAAY,EAAE,QAAQ,CAAG;AAAA,EAC1C,QAAQ,KAAK,QAAQ;AAAA,EACrB,WAAW,UAAU,YAAY,EAAE,QAAQ,UAAU,EAAE,QAAQ;AAAA,EAC/D,WAAW,UAAU,YAAY,EAAE,QAAQ,UAAU,EAAE,QAAQ;AAAA,EAC/D,gBAAgB,UAAU,kBAAkB;AAAA,EAC5C,aAAa,QAAQ,cAAc,EAAE,QAAQ,CAAC;AAChD,GACA,CAAC,WAAW;AAAA,EACV,gBAAgB,MAAM,qCAAqC,EAAE,GAAG,MAAM,SAAS,MAAM,QAAQ;AAAA,EAC7F,aAAa,MAAM,iCAAiC,EAAE,GAAG,MAAM,QAAQ;AAAA,EACvE,eAAe,MAAM,mCAAmC,EAAE,GAAG,MAAM,UAAU;AAAA,EAC7E,cAAc,MAAM,mCAAmC,EAAE,GAAG,MAAM,SAAS;AAC7E,EACF;;ACnCA,gBAAS;AACT,kBAAS,mBAAO,kBAAS,oBAAM,uBAAW;AAEnC,IAAM,mBAAmB,SAC9B,sBACA;AAAA,EACE,IAAI,SAAQ,MAAM,EAAE,QAAQ,GAAG,CAAC,EAAE,WAAW;AAAA,EAC7C,UAAU,SAAQ,aAAa,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EACvD,YAAY,MAAK,aAAa,EAAE,QAAQ;AAAA,EACxC,SAAS,SAAQ,YAAY,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EACrD,YAAY,MAAK,aAAa,EAAE,QAAQ;AAAA,EACxC,YAAY,WAAU,aAAa,EAAE,QAAQ,WAAU,EAAE,QAAQ;AACnE,GACA,CAAC,WAAW;AAAA,EACV,aAAa,OAAM,kCAAkC,EAAE,GAAG,MAAM,QAAQ;AAAA,EACxE,YAAY,OAAM,iCAAiC,EAAE,GAAG,MAAM,OAAO;AAAA,EACrE,eAAe,OAAM,oCAAoC,EAAE,GAAG,MAAM,UAAU;AAChF,EACF;;AClBA,gBAAS;AACT;AAAA,WACE;AAAA,aACA;AAAA,WACA;AAAA,aACA;AAAA,UACA;AAAA,UACA;AAAA,eACA;AAAA,aACA;AAAA;AAGK,IAAM,mBAAmB,SAC9B,qBACA;AAAA,EACE,IAAI,SAAQ,MAAM,EAAE,QAAQ,GAAG,CAAC,EAAE,WAAW;AAAA,EAC7C,SAAS,SAAQ,YAAY,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EACrD,QAAQ,SAAQ,WAAW,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EACnD,UAAU,SAAQ,aAAa,EAAE,QAAQ,GAAG,CAAC;AAAA,EAC7C,SAAS,MAAK,SAAS,EAAE,QAAQ;AAAA,EACjC,cAAc,SAAQ,eAAe,EAAE,QAAQ;AAAA,EAC/C,mBAAmB,SAAQ,qBAAqB,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,EACrE,WAAW,WAAU,YAAY,EAAE,QAAQ;AAAA,EAC3C,SAAS,WAAU,UAAU,EAAE,QAAQ;AAAA,EACvC,QAAQ,OAAM,QAAQ;AAAA,EACtB,UAAU,OAAM,UAAU;AAAA,EAC1B,WAAW,MAAK,WAAW,EAAE,MAAM;AAAA,EACnC,WAAW,WAAU,YAAY,EAAE,QAAQ,WAAU,EAAE,QAAQ;AAAA,EAC/D,WAAW,WAAU,YAAY,EAAE,QAAQ,WAAU,EAAE,QAAQ;AACjE,GACA,CAAC,WAAW;AAAA,EACV,cAAc,OAAM,kCAAkC,EAAE,GAAG,MAAM,SAAS,MAAM,MAAM;AAAA,EACtF,WAAW,OAAM,8BAA8B,EAAE,GAAG,MAAM,QAAQ;AAAA,EAClE,cAAc,OAAM,kCAAkC,EAAE,GAAG,MAAM,SAAS;AAC5E,EACF;;ACnCA;AAAA,YAEE;AAAA;AAAA;AAKF,oDAAuD;AA2DhD,MAAM,sBAAsB,QAAQ;AAAA,SAClC,cAA+B;AAAA,EAE9B;AAAA,EACA;AAAA,EACA;AAAA,EAER,wBACE;AAAA,EAEF,WAAW,CAAC,SAAyB;AAAA,IACnC,MAAM,OAAO;AAAA,IACb,KAAK,uBAAuB,IAAI;AAAA,IAChC,KAAK,4BAA4B,IAAI;AAAA,IACrC,KAAK,eAAe;AAAA,MAClB,iCAAiC;AAAA,MACjC,uBAAuB;AAAA,MACvB,gCAAgC;AAAA,MAChC,2BAA2B;AAAA,MAC3B,6BAA6B;AAAA,MAC7B,6BAA6B;AAAA,MAC7B,6BAA6B;AAAA,MAC7B,4BAA4B;AAAA,MAC5B,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,uBAAuB;AAAA,IACzB;AAAA;AAAA,cAGW,MAAK,CAAC,SAA0C;AAAA,IAC3D,MAAM,UAAU,IAAI,cAAc,OAAO;AAAA,IACzC,MAAM,QAAQ,WAAW,OAAO;AAAA,IAChC,OAAO;AAAA;AAAA,OAGH,KAAI,GAAkB;AAAA,IAC1B,QAAO,KAAK,uBAAuB;AAAA;AAAA,OAG/B,WAAU,CAAC,SAAuC;AAAA,IACtD,KAAK,UAAU;AAAA,IAEf,MAAM,YAAY,QAAQ,WAAW,gCAAgC;AAAA,IACrE,IAAI,WAAW;AAAA,MACb,KAAK,aAAa,kCAAkC,SAAS,OAAO,SAAS,GAAG,EAAE;AAAA,IACpF;AAAA,IAEA,MAAM,eAAe,QAAQ,WAAW,sBAAsB;AAAA,IAC9D,IAAI,cAAc;AAAA,MAChB,KAAK,aAAa,wBAAwB,SAAS,OAAO,YAAY,GAAG,EAAE;AAAA,IAC7E;AAAA,IAEA,MAAM,wBAAwB,QAAQ,WAAW,+BAA+B;AAAA,IAChF,IAAI,uBAAuB;AAAA,MACzB,KAAK,aAAa,iCAAiC,SACjD,OAAO,qBAAqB,GAC5B,EACF;AAAA,IACF;AAAA,IAEA,MAAM,iBAAiB,QAAQ,WAAW,yBAAyB;AAAA,IACnE,IAAI,gBAAgB;AAAA,MAClB,KAAK,aAAa,wBAAwB,SAAS,OAAO,cAAc,GAAG,EAAE;AAAA,IAC/E;AAAA,IAEA,MAAM,kBAAkB,QAAQ,WAAW,0BAA0B;AAAA,IACrE,IAAI,oBAAoB,WAAW,oBAAoB,OAAO;AAAA,MAC5D,KAAK,aAAa,4BAA4B;AAAA,IAChD,EAAO,SAAI,oBAAoB,UAAU,oBAAoB,MAAM;AAAA,MACjE,KAAK,aAAa,4BAA4B;AAAA,IAChD;AAAA,IAEA,MAAM,sBAAsB,QAAQ,WAAW,6BAA6B;AAAA,IAC5E,IAAI,qBAAqB;AAAA,MACvB,KAAK,aAAa,8BAA8B,WAAW,OAAO,mBAAmB,CAAC;AAAA,IACxF;AAAA,IAEA,MAAM,sBAAsB,QAAQ,WAAW,6BAA6B;AAAA,IAC5E,IAAI,qBAAqB;AAAA,MACvB,KAAK,aAAa,8BAA8B,SAAS,OAAO,mBAAmB,GAAG,EAAE;AAAA,IAC1F;AAAA,IAEA,MAAM,qBAAqB,QAAQ,WAAW,4BAA4B;AAAA,IAC1E,IAAI,oBAAoB;AAAA,MACtB,KAAK,aAAa,6BAA6B,SAAS,OAAO,kBAAkB,GAAG,EAAE;AAAA,IACxF;AAAA,IAEA,QAAO,MACL;AAAA,MACE,wBAAwB,KAAK,aAAa;AAAA,MAC1C,uBAAuB,KAAK,aAAa;AAAA,MACzC,gBAAgB,KAAK,aAAa;AAAA,MAClC,cAAc,KAAK,aAAa;AAAA,MAChC,iBAAiB,KAAK,aAAa;AAAA,MACnC,qBAAqB,KAAK,aAAa;AAAA,MACvC,oBAAoB,KAAK,aAAa;AAAA,MACtC,qBAAqB,KAAK,aAAa;AAAA,IACzC,GACA,2BACF;AAAA;AAAA,EAGM,KAAK,GAAc;AAAA,IACzB,MAAM,KAAM,KAAK,QAA8C;AAAA,IAC/D,IAAI,CAAC,IAAI;AAAA,MACP,MAAM,IAAI,MAAM,wBAAwB;AAAA,IAC1C;AAAA,IACA,OAAO;AAAA;AAAA,EAGT,SAAS,GAAiB;AAAA,IACxB,OAAO,KAAK,KAAK,aAAa;AAAA;AAAA,EAGhC,YAAY,CAAC,SAAsC;AAAA,IACjD,KAAK,eAAe,KAAK,KAAK,iBAAiB,QAAQ;AAAA;AAAA,EAGzD,qBAAqB,CAAC,QAAsB;AAAA,IAC1C,MAAM,UAAU,KAAK,qBAAqB,IAAI,MAAM,KAAK;AAAA,IACzD,MAAM,WAAW,UAAU;AAAA,IAC3B,KAAK,qBAAqB,IAAI,QAAQ,QAAQ;AAAA,IAC9C,OAAO;AAAA;AAAA,EAGT,iBAAiB,CAAC,QAAoB;AAAA,IACpC,KAAK,qBAAqB,IAAI,QAAQ,CAAC;AAAA;AAAA,OAGnC,gBAAe,CAAC,QAAgC;AAAA,IACpD,MAAM,QAAQ,MAAM,KAAK,QAAQ,cAAc,QAAQ,OAAO,UAAU;AAAA,IACxE,OAAO,SAAS,KAAK,aAAa;AAAA;AAAA,EAG5B,gBAAgB,CAAC,UAAgB,QAAsB;AAAA,IAC7D,OAAO,qBAAqB,YAAY;AAAA;AAAA,OAGpC,4BAA2B,CAAC,UAAgB,QAA+B;AAAA,IAC/E,MAAM,MAAM,KAAK,iBAAiB,UAAU,MAAM;AAAA,IAElD,MAAM,SAAS,KAAK,0BAA0B,IAAI,GAAG;AAAA,IACrD,IAAI,WAAW,WAAW;AAAA,MACxB,OAAO;AAAA,IACT;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,aAAa,MAAM,KAAK,QAAQ,SAAiB,GAAG;AAAA,MAC1D,MAAM,eAAe,cAAc;AAAA,MACnC,KAAK,0BAA0B,IAAI,KAAK,YAAY;AAAA,MACpD,OAAO;AAAA,MACP,OAAO,OAAO;AAAA,MACd,QAAO,KAAK,EAAE,MAAM,GAAG,gDAAgD;AAAA,MACvE,OAAO;AAAA;AAAA;AAAA,OAIL,4BAA2B,CAC/B,UACA,QACA,cACe;AAAA,IACf,MAAM,MAAM,KAAK,iBAAiB,UAAU,MAAM;AAAA,IAClD,KAAK,0BAA0B,IAAI,KAAK,YAAY;AAAA,IAEpD,IAAI;AAAA,MACF,MAAM,KAAK,QAAQ,SAAS,KAAK,YAAY;AAAA,MAC7C,QAAO,MACL,iCAAiC,oBAAoB,mBAAmB,cAC1E;AAAA,MACA,OAAO,OAAO;AAAA,MACd,QAAO,MAAM,EAAE,MAAM,GAAG,kDAAkD;AAAA;AAAA;AAAA,OAIxE,oBAAmB,CACvB,UACA,QACA,qBACkB;AAAA,IAClB,MAAM,YAAY,KAAK,aAAa;AAAA,IACpC,MAAM,WAAW,KAAK,aAAa;AAAA,IAEnC,IAAI,sBAAsB,WAAW;AAAA,MACnC,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,iBAAiB,MAAM,KAAK,4BAA4B,UAAU,MAAM;AAAA,IAC9E,MAAM,oBAAoB,KAAK,MAAM,sBAAsB,QAAQ,IAAI;AAAA,IACvE,MAAM,YAAY,uBAAuB,aAAa,oBAAoB;AAAA,IAE1E,QAAO,MACL;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,GACA,kBACF;AAAA,IAEA,OAAO;AAAA;AAAA,OAGH,oBAAmB,CACvB,QACyB;AAAA,IACzB,MAAM,KAAK,KAAK,MAAM;AAAA,IAEtB,MAAM,KAAK,OAAO,WAAW;AAAA,IAC7B,MAAM,MAAM,IAAI;AAAA,IAEhB,MAAM,YAA4B;AAAA,MAChC;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,MACX,aAAa;AAAA,SACV;AAAA,IACL;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,GAAG,OAAO,gBAAgB,EAAE,OAAO;AAAA,QACvC,IAAI,UAAU;AAAA,QACd,SAAS,UAAU;AAAA,QACnB,UAAU,UAAU;AAAA,QACpB,UAAU,UAAU;AAAA,QACpB,SAAS,UAAU;AAAA,QACnB,UAAU,UAAU,YAAY,CAAC;AAAA,QACjC,WAAW,UAAU;AAAA,QACrB,YAAY,UAAU;AAAA,QACtB,QAAQ,UAAU;AAAA,QAClB,aAAa,UAAU;AAAA,QACvB,WAAW;AAAA,QACX,WAAW;AAAA,QACX,gBAAgB,UAAU;AAAA,MAC5B,CAAC;AAAA,MACD,OAAO,OAAO;AAAA,MACd,QAAO,MAAM,EAAE,MAAM,GAAG,kCAAkC;AAAA,MAC1D,MAAM;AAAA;AAAA,IAGR,QAAO,KAAK,4BAA4B,UAAU,uBAAuB,UAAU,UAAU;AAAA,IAC7F,OAAO;AAAA;AAAA,OAGH,oBAAmB,CACvB,UACA,UACA,QAAgB,IACW;AAAA,IAC3B,MAAM,KAAK,KAAK,MAAM;AAAA,IAEtB,MAAM,aAAa;AAAA,MACjB,GAAG,iBAAiB,SAAS,KAAK,QAAQ,OAAO;AAAA,MACjD,GAAG,iBAAiB,UAAU,QAAQ;AAAA,IACxC;AAAA,IAEA,IAAI,UAAU;AAAA,MACZ,WAAW,KAAK,GAAG,iBAAiB,UAAU,QAAQ,CAAC;AAAA,IACzD;AAAA,IAEA,MAAM,UAAU,MAAM,GACnB,OAAO,EACP,KAAK,gBAAgB,EACrB,MAAM,IAAI,GAAG,UAAU,CAAC,EACxB,QAAQ,KAAK,iBAAiB,UAAU,GAAG,KAAK,iBAAiB,SAAS,CAAC,EAC3E,MAAM,KAAK;AAAA,IAEd,OAAO,QAAQ,IAAI,CAAC,SAAS;AAAA,MAC3B,IAAI,IAAI;AAAA,MACR,SAAS,IAAI;AAAA,MACb,UAAU,IAAI;AAAA,MACd,UAAU,IAAI;AAAA,MACd,SAAS,IAAI;AAAA,MACb,UAAU,IAAI;AAAA,MACd,WAAW,IAAI;AAAA,MACf,YAAY,IAAI;AAAA,MAChB,QAAQ,IAAI;AAAA,MACZ,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,MACf,gBAAgB,IAAI;AAAA,MACpB,aAAa,IAAI;AAAA,IACnB,EAAE;AAAA;AAAA,OAGE,qBAAoB,CACxB,IACA,UACA,SACe;AAAA,IACf,MAAM,KAAK,KAAK,MAAM;AAAA,IAEtB,MAAM,aAAsC;AAAA,MAC1C,WAAW,IAAI;AAAA,IACjB;AAAA,IAEA,IAAI,QAAQ,YAAY;AAAA,MAAW,WAAW,UAAU,QAAQ;AAAA,IAChE,IAAI,QAAQ,aAAa;AAAA,MAAW,WAAW,WAAW,QAAQ;AAAA,IAClE,IAAI,QAAQ,eAAe;AAAA,MAAW,WAAW,aAAa,QAAQ;AAAA,IACtE,IAAI,QAAQ,cAAc;AAAA,MAAW,WAAW,YAAY,QAAQ;AAAA,IACpE,IAAI,QAAQ,mBAAmB;AAAA,MAAW,WAAW,iBAAiB,QAAQ;AAAA,IAC9E,IAAI,QAAQ,gBAAgB;AAAA,MAAW,WAAW,cAAc,QAAQ;AAAA,IAExE,MAAM,GACH,OAAO,gBAAgB,EACvB,IAAI,UAAU,EACd,MACC,IACE,GAAG,iBAAiB,IAAI,EAAE,GAC1B,GAAG,iBAAiB,SAAS,KAAK,QAAQ,OAAO,GACjD,GAAG,iBAAiB,UAAU,QAAQ,CACxC,CACF;AAAA,IAEF,QAAO,KAAK,6BAA6B,iBAAiB,UAAU;AAAA;AAAA,OAGhE,qBAAoB,CAAC,IAAU,UAA+B;AAAA,IAClE,MAAM,KAAK,KAAK,MAAM;AAAA,IAEtB,MAAM,GACH,OAAO,gBAAgB,EACvB,MACC,IACE,GAAG,iBAAiB,IAAI,EAAE,GAC1B,GAAG,iBAAiB,SAAS,KAAK,QAAQ,OAAO,GACjD,GAAG,iBAAiB,UAAU,QAAQ,CACxC,CACF;AAAA,IAEF,QAAO,KAAK,6BAA6B,iBAAiB,UAAU;AAAA;AAAA,OAGhE,yBAAwB,CAAC,QAA8C;AAAA,IAC3E,MAAM,KAAK,KAAK,MAAM;AAAA,IAEtB,MAAM,UAAU,MAAM,GACnB,OAAO,EACP,KAAK,gBAAgB,EACrB,MACC,IAAI,GAAG,iBAAiB,SAAS,KAAK,QAAQ,OAAO,GAAG,GAAG,iBAAiB,QAAQ,MAAM,CAAC,CAC7F,EACC,QAAQ,KAAK,iBAAiB,SAAS,CAAC,EACxC,MAAM,CAAC;AAAA,IAEV,IAAI,QAAQ,WAAW,GAAG;AAAA,MACxB,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,MAAM,QAAQ;AAAA,IACpB,OAAO;AAAA,MACL,IAAI,IAAI;AAAA,MACR,SAAS,IAAI;AAAA,MACb,QAAQ,IAAI;AAAA,MACZ,UAAU,IAAI;AAAA,MACd,SAAS,IAAI;AAAA,MACb,cAAc,IAAI;AAAA,MAClB,mBAAmB,IAAI;AAAA,MACvB,WAAW,IAAI;AAAA,MACf,SAAS,IAAI;AAAA,MACb,QAAS,IAAI,UAAuB,CAAC;AAAA,MACrC,UAAU,IAAI;AAAA,MACd,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,IACjB;AAAA;AAAA,OAGI,oBAAmB,CACvB,SACyB;AAAA,IACzB,MAAM,KAAK,KAAK,MAAM;AAAA,IAEtB,MAAM,KAAK,OAAO,WAAW;AAAA,IAC7B,MAAM,MAAM,IAAI;AAAA,IAEhB,MAAM,aAA6B;AAAA,MACjC;AAAA,MACA,WAAW;AAAA,MACX,WAAW;AAAA,SACR;AAAA,IACL;AAAA,IAEA,MAAM,GAAG,OAAO,gBAAgB,EAAE,OAAO;AAAA,MACvC,IAAI,WAAW;AAAA,MACf,SAAS,WAAW;AAAA,MACpB,QAAQ,WAAW;AAAA,MACnB,UAAU,WAAW,YAAY;AAAA,MACjC,SAAS,WAAW;AAAA,MACpB,cAAc,WAAW;AAAA,MACzB,mBAAmB,WAAW;AAAA,MAC9B,WAAW,WAAW;AAAA,MACtB,SAAS,WAAW;AAAA,MACpB,QAAQ,WAAW,UAAU,CAAC;AAAA,MAC9B,UAAU,WAAW,YAAY,CAAC;AAAA,MAClC,WAAW,WAAW;AAAA,MACtB,WAAW;AAAA,MACX,WAAW;AAAA,IACb,CAAC;AAAA,IAED,QAAO,KAAK,mCAAmC,WAAW,QAAQ;AAAA,IAClE,OAAO;AAAA;AAAA,OAGH,qBAAoB,CACxB,IACA,QACA,SACe;AAAA,IACf,MAAM,KAAK,KAAK,MAAM;AAAA,IAEtB,MAAM,aAAsC;AAAA,MAC1C,WAAW,IAAI;AAAA,IACjB;AAAA,IAEA,IAAI,QAAQ,YAAY;AAAA,MAAW,WAAW,UAAU,QAAQ;AAAA,IAChE,IAAI,QAAQ,iBAAiB;AAAA,MAAW,WAAW,eAAe,QAAQ;AAAA,IAC1E,IAAI,QAAQ,sBAAsB;AAAA,MAChC,WAAW,oBAAoB,QAAQ;AAAA,IACzC,IAAI,QAAQ,YAAY;AAAA,MAAW,WAAW,UAAU,QAAQ;AAAA,IAChE,IAAI,QAAQ,WAAW;AAAA,MAAW,WAAW,SAAS,QAAQ;AAAA,IAC9D,IAAI,QAAQ,aAAa;AAAA,MAAW,WAAW,WAAW,QAAQ;AAAA,IAClE,IAAI,QAAQ,cAAc;AAAA,MAAW,WAAW,YAAY,QAAQ;AAAA,IAEpE,MAAM,GACH,OAAO,gBAAgB,EACvB,IAAI,UAAU,EACd,MACC,IACE,GAAG,iBAAiB,IAAI,EAAE,GAC1B,GAAG,iBAAiB,SAAS,KAAK,QAAQ,OAAO,GACjD,GAAG,iBAAiB,QAAQ,MAAM,CACpC,CACF;AAAA,IAEF,QAAO,KAAK,4BAA4B,eAAe,QAAQ;AAAA;AAAA,OAG3D,oBAAmB,CAAC,QAAc,QAAgB,GAA8B;AAAA,IACpF,MAAM,KAAK,KAAK,MAAM;AAAA,IAEtB,MAAM,UAAU,MAAM,GACnB,OAAO,EACP,KAAK,gBAAgB,EACrB,MACC,IAAI,GAAG,iBAAiB,SAAS,KAAK,QAAQ,OAAO,GAAG,GAAG,iBAAiB,QAAQ,MAAM,CAAC,CAC7F,EACC,QAAQ,KAAK,iBAAiB,SAAS,CAAC,EACxC,MAAM,KAAK;AAAA,IAEd,OAAO,QAAQ,IAAI,CAAC,SAAS;AAAA,MAC3B,IAAI,IAAI;AAAA,MACR,SAAS,IAAI;AAAA,MACb,QAAQ,IAAI;AAAA,MACZ,UAAU,IAAI;AAAA,MACd,SAAS,IAAI;AAAA,MACb,cAAc,IAAI;AAAA,MAClB,mBAAmB,IAAI;AAAA,MACvB,WAAW,IAAI;AAAA,MACf,SAAS,IAAI;AAAA,MACb,QAAS,IAAI,UAAuB,CAAC;AAAA,MACrC,UAAU,IAAI;AAAA,MACd,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,MACf,WAAW,IAAI;AAAA,IACjB,EAAE;AAAA;AAAA,OAGE,uBAAsB,CAC1B,UACA,gBACA,QAAgB,GAChB,iBAAyB,KACE;AAAA,IAC3B,IAAI,CAAC,KAAK,aAAa,6BAA6B;AAAA,MAClD,QAAO,KAAK,+DAA+D;AAAA,MAC3E,OAAO,KAAK,oBAAoB,UAAU,WAAW,KAAK;AAAA,IAC5D;AAAA,IAEA,MAAM,KAAK,KAAK,MAAM;AAAA,IAEtB,IAAI;AAAA,MACF,MAAM,cAAc,eAAe,IAAI,CAAC,MACtC,OAAO,SAAS,CAAC,IAAI,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAC9C;AAAA,MAEA,MAAM,aAAa,YAAmB,eACpC,iBAAiB,WACjB,WACF;AAAA,MAEA,MAAM,aAAa;AAAA,QACjB,GAAG,iBAAiB,SAAS,KAAK,QAAQ,OAAO;AAAA,QACjD,GAAG,iBAAiB,UAAU,QAAQ;AAAA,QACtC,OAAM,iBAAiB;AAAA,MACzB;AAAA,MAEA,IAAI,iBAAiB,GAAG;AAAA,QACtB,WAAW,KAAK,IAAI,YAAY,cAAc,CAAC;AAAA,MACjD;AAAA,MAEA,MAAM,UAAW,MAAM,GACpB,OAAO;AAAA,QACN,QAAQ;AAAA,QACR;AAAA,MACF,CAAC,EACA,KAAK,gBAAgB,EACrB,MAAM,IAAI,GAAG,UAAU,CAAC,EACxB,QAAQ,KAAK,UAAU,CAAC,EACxB,MAAM,KAAK;AAAA,MAEd,OAAO,QAAQ,IAAI,CAAC,SAAS;AAAA,QAC3B,IAAI,IAAI,OAAO;AAAA,QACf,SAAS,IAAI,OAAO;AAAA,QACpB,UAAU,IAAI,OAAO;AAAA,QACrB,UAAU,IAAI,OAAO;AAAA,QACrB,SAAS,IAAI,OAAO;AAAA,QACpB,UAAU,IAAI,OAAO,YAAY,CAAC;AAAA,QAClC,WAAW,IAAI,OAAO,aAAa,CAAC;AAAA,QACpC,YAAY,IAAI,OAAO,cAAc;AAAA,QACrC,QAAQ,IAAI,OAAO,UAAU;AAAA,QAC7B,WAAW,IAAI,OAAO;AAAA,QACtB,WAAW,IAAI,OAAO;AAAA,QACtB,gBAAgB,IAAI,OAAO,kBAAkB,IAAI,OAAO;AAAA,QACxD,aAAa,IAAI,OAAO,eAAe;AAAA,QACvC,YAAY,IAAI;AAAA,MAClB,EAAE;AAAA,MACF,OAAO,OAAO;AAAA,MACd,QAAO,KAAK,EAAE,MAAM,GAAG,uDAAuD;AAAA,MAC9E,OAAO,KAAK,oBAAoB,UAAU,WAAW,KAAK;AAAA;AAAA;AAAA,OAIxD,6BAA4B,CAAC,UAAiC;AAAA,IAClE,MAAM,WAAW,MAAM,KAAK,oBAAoB,UAAU,WAAW,EAAE;AAAA,IAEvE,IAAI,SAAS,WAAW,GAAG;AAAA,MACzB,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,UAAU,IAAI;AAAA,IAEpB,WAAW,UAAU,UAAU;AAAA,MAC7B,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,GAAG;AAAA,QACjC,QAAQ,IAAI,OAAO,UAAU,CAAC,CAAC;AAAA,MACjC;AAAA,MACA,QAAQ,IAAI,OAAO,QAAQ,GAAG,KAAK,MAAM;AAAA,IAC3C;AAAA,IAEA,MAAM,WAAqB,CAAC;AAAA,IAE5B,YAAY,UAAU,qBAAqB,QAAQ,QAAQ,GAAG;AAAA,MAC5D,MAAM,eAAe,SAClB,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,GAAG;AAAA,MAEX,MAAM,QAAQ,iBAAiB,IAAI,CAAC,MAAM,KAAK,EAAE,SAAS,EAAE,KAAK;AAAA,CAAI;AAAA,MACrE,SAAS,KAAK,KAAK;AAAA,EAAoB,OAAO;AAAA,IAChD;AAAA,IAEA,OAAO,SAAS,KAAK;AAAA;AAAA,CAAM;AAAA;AAE/B;;;AC1mBO,IAAM,eAAuB;AAAA,EAClC,MAAM;AAAA,EACN,aAAa;AAAA,EAEb,UAAU,CAAC,aAAa;AAAA,EAExB,YAAY,CAAC,wBAAwB,2BAA2B;AAAA,EAEhE,WAAW,CAAC,wBAAwB,sBAAsB;AAAA,EAE1D;AACF;AAEA,IAAe;",
18
+ "debugId": "FC048A8C8739D95E64756E2164756E21",
19
+ "names": []
20
+ }
@@ -1,12 +1,3 @@
1
- import { type Provider } from '@elizaos/core';
2
- /**
3
- * Context Summary Provider
4
- *
5
- * Provides summarized context from previous conversations.
6
- * Returns session summaries with and without topics for flexible usage.
7
- *
8
- * Values returned:
9
- * - sessionSummaries: Summary text only (without topics)
10
- * - sessionSummariesWithTopics: Summary text with topics included
11
- */
1
+ import { type Provider } from "@elizaos/core";
12
2
  export declare const contextSummaryProvider: Provider;
3
+ //# sourceMappingURL=context-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-summary.d.ts","sourceRoot":"","sources":["../../src/providers/context-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,QAAQ,EAGd,MAAM,eAAe,CAAC;AAGvB,eAAO,MAAM,sBAAsB,EAAE,QA4DpC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { contextSummaryProvider } from "./context-summary";
2
+ export { longTermMemoryProvider } from "./long-term-memory";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,17 +1,3 @@
1
- import { type Provider } from '@elizaos/core';
2
- /**
3
- * Long-term Memory Provider
4
- *
5
- * Provides persistent facts about the user that have been learned across
6
- * all conversations. This includes:
7
- * - User identity and roles
8
- * - Domain expertise
9
- * - Preferences
10
- * - Goals and projects
11
- * - Custom definitions
12
- * - Behavioral patterns
13
- *
14
- * This provider enriches the context with relevant long-term information
15
- * to make the agent's responses more personalized and contextually aware.
16
- */
1
+ import { type Provider } from "@elizaos/core";
17
2
  export declare const longTermMemoryProvider: Provider;
3
+ //# sourceMappingURL=long-term-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"long-term-memory.d.ts","sourceRoot":"","sources":["../../src/providers/long-term-memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,QAAQ,EAGd,MAAM,eAAe,CAAC;AAGvB,eAAO,MAAM,sBAAsB,EAAE,QAqEpC,CAAC"}
@@ -1,9 +1,4 @@
1
- /**
2
- * Database schemas for the Memory Plugin
3
- *
4
- * This module exports all database table schemas used by the plugin.
5
- * These schemas are automatically migrated by ElizaOS's dynamic migration system.
6
- */
7
- export { longTermMemories } from './long-term-memories';
8
- export { sessionSummaries } from './session-summaries';
9
- export { memoryAccessLogs } from './memory-access-logs';
1
+ export { longTermMemories } from "./long-term-memories";
2
+ export { memoryAccessLogs } from "./memory-access-logs";
3
+ export { sessionSummaries } from "./session-summaries";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,7 +1,3 @@
1
- /**
2
- * Long-term memory storage table
3
- * Stores persistent facts about users across all conversations
4
- */
5
1
  export declare const longTermMemories: import("drizzle-orm/pg-core").PgTableWithColumns<{
6
2
  name: "long_term_memories";
7
3
  schema: undefined;
@@ -262,3 +258,4 @@ export declare const longTermMemories: import("drizzle-orm/pg-core").PgTableWith
262
258
  };
263
259
  dialect: "pg";
264
260
  }>;
261
+ //# sourceMappingURL=long-term-memories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"long-term-memories.d.ts","sourceRoot":"","sources":["../../src/schemas/long-term-memories.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuB5B,CAAC"}
@@ -1,6 +1,3 @@
1
- /**
2
- * Memory access logs (optional - for tracking and improving memory retrieval)
3
- */
4
1
  export declare const memoryAccessLogs: import("drizzle-orm/pg-core").PgTableWithColumns<{
5
2
  name: "memory_access_logs";
6
3
  schema: undefined;
@@ -24,25 +21,6 @@ export declare const memoryAccessLogs: import("drizzle-orm/pg-core").PgTableWith
24
21
  }, {}, {
25
22
  length: 36;
26
23
  }>;
27
- agentId: import("drizzle-orm/pg-core").PgColumn<{
28
- name: "agent_id";
29
- tableName: "memory_access_logs";
30
- dataType: "string";
31
- columnType: "PgVarchar";
32
- data: string;
33
- driverParam: string;
34
- notNull: true;
35
- hasDefault: false;
36
- isPrimaryKey: false;
37
- isAutoincrement: false;
38
- hasRuntimeDefault: false;
39
- enumValues: [string, ...string[]];
40
- baseColumn: never;
41
- identity: undefined;
42
- generated: undefined;
43
- }, {}, {
44
- length: 36;
45
- }>;
46
24
  memoryId: import("drizzle-orm/pg-core").PgColumn<{
47
25
  name: "memory_id";
48
26
  tableName: "memory_access_logs";
@@ -79,31 +57,14 @@ export declare const memoryAccessLogs: import("drizzle-orm/pg-core").PgTableWith
79
57
  identity: undefined;
80
58
  generated: undefined;
81
59
  }, {}, {}>;
82
- accessedAt: import("drizzle-orm/pg-core").PgColumn<{
83
- name: "accessed_at";
84
- tableName: "memory_access_logs";
85
- dataType: "date";
86
- columnType: "PgTimestamp";
87
- data: Date;
88
- driverParam: string;
89
- notNull: true;
90
- hasDefault: true;
91
- isPrimaryKey: false;
92
- isAutoincrement: false;
93
- hasRuntimeDefault: false;
94
- enumValues: undefined;
95
- baseColumn: never;
96
- identity: undefined;
97
- generated: undefined;
98
- }, {}, {}>;
99
- roomId: import("drizzle-orm/pg-core").PgColumn<{
100
- name: "room_id";
60
+ agentId: import("drizzle-orm/pg-core").PgColumn<{
61
+ name: "agent_id";
101
62
  tableName: "memory_access_logs";
102
63
  dataType: "string";
103
64
  columnType: "PgVarchar";
104
65
  data: string;
105
66
  driverParam: string;
106
- notNull: false;
67
+ notNull: true;
107
68
  hasDefault: false;
108
69
  isPrimaryKey: false;
109
70
  isAutoincrement: false;
@@ -115,32 +76,32 @@ export declare const memoryAccessLogs: import("drizzle-orm/pg-core").PgTableWith
115
76
  }, {}, {
116
77
  length: 36;
117
78
  }>;
118
- relevanceScore: import("drizzle-orm/pg-core").PgColumn<{
119
- name: "relevance_score";
79
+ accessType: import("drizzle-orm/pg-core").PgColumn<{
80
+ name: "access_type";
120
81
  tableName: "memory_access_logs";
121
- dataType: "number";
122
- columnType: "PgReal";
123
- data: number;
124
- driverParam: string | number;
125
- notNull: false;
82
+ dataType: "string";
83
+ columnType: "PgText";
84
+ data: string;
85
+ driverParam: string;
86
+ notNull: true;
126
87
  hasDefault: false;
127
88
  isPrimaryKey: false;
128
89
  isAutoincrement: false;
129
90
  hasRuntimeDefault: false;
130
- enumValues: undefined;
91
+ enumValues: [string, ...string[]];
131
92
  baseColumn: never;
132
93
  identity: undefined;
133
94
  generated: undefined;
134
95
  }, {}, {}>;
135
- wasUseful: import("drizzle-orm/pg-core").PgColumn<{
136
- name: "was_useful";
96
+ accessedAt: import("drizzle-orm/pg-core").PgColumn<{
97
+ name: "accessed_at";
137
98
  tableName: "memory_access_logs";
138
- dataType: "number";
139
- columnType: "PgInteger";
140
- data: number;
141
- driverParam: string | number;
142
- notNull: false;
143
- hasDefault: false;
99
+ dataType: "date";
100
+ columnType: "PgTimestamp";
101
+ data: Date;
102
+ driverParam: string;
103
+ notNull: true;
104
+ hasDefault: true;
144
105
  isPrimaryKey: false;
145
106
  isAutoincrement: false;
146
107
  hasRuntimeDefault: false;
@@ -152,3 +113,4 @@ export declare const memoryAccessLogs: import("drizzle-orm/pg-core").PgTableWith
152
113
  };
153
114
  dialect: "pg";
154
115
  }>;
116
+ //# sourceMappingURL=memory-access-logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-access-logs.d.ts","sourceRoot":"","sources":["../../src/schemas/memory-access-logs.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAe5B,CAAC"}
@@ -1,7 +1,3 @@
1
- /**
2
- * Session summaries table
3
- * Stores condensed summaries of conversation sessions
4
- */
5
1
  export declare const sessionSummaries: import("drizzle-orm/pg-core").PgTableWithColumns<{
6
2
  name: "session_summaries";
7
3
  schema: undefined;
@@ -281,3 +277,4 @@ export declare const sessionSummaries: import("drizzle-orm/pg-core").PgTableWith
281
277
  };
282
278
  dialect: "pg";
283
279
  }>;
280
+ //# sourceMappingURL=session-summaries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-summaries.d.ts","sourceRoot":"","sources":["../../src/schemas/session-summaries.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuB5B,CAAC"}
@@ -1,9 +1,5 @@
1
- import { type IAgentRuntime, Service, type UUID, type ServiceTypeName } from '@elizaos/core';
2
- import { type LongTermMemory, type SessionSummary, type MemoryConfig, LongTermMemoryCategory } from '../types/index';
3
- /**
4
- * Memory Service
5
- * Manages both short-term (session summaries) and long-term (persistent facts) memory
6
- */
1
+ import { type IAgentRuntime, Service, type ServiceTypeName, type UUID } from "@elizaos/core";
2
+ import type { LongTermMemory, LongTermMemoryCategory, MemoryConfig, SessionSummary } from "../types";
7
3
  export declare class MemoryService extends Service {
8
4
  static serviceType: ServiceTypeName;
9
5
  private sessionMessageCounts;
@@ -14,89 +10,25 @@ export declare class MemoryService extends Service {
14
10
  static start(runtime: IAgentRuntime): Promise<Service>;
15
11
  stop(): Promise<void>;
16
12
  initialize(runtime: IAgentRuntime): Promise<void>;
17
- /**
18
- * Get the Drizzle database instance
19
- */
20
13
  private getDb;
21
- /**
22
- * Get configuration
23
- */
24
14
  getConfig(): MemoryConfig;
25
- /**
26
- * Update configuration
27
- */
28
15
  updateConfig(updates: Partial<MemoryConfig>): void;
29
- /**
30
- * Track message count for a room
31
- */
32
16
  incrementMessageCount(roomId: UUID): number;
33
- /**
34
- * Reset message count for a room
35
- */
36
17
  resetMessageCount(roomId: UUID): void;
37
- /**
38
- * Check if summarization is needed for a room
39
- */
40
18
  shouldSummarize(roomId: UUID): Promise<boolean>;
41
- /**
42
- * Generate cache key for tracking extraction checkpoints per entity-room pair
43
- */
44
19
  private getExtractionKey;
45
- /**
46
- * Get the last extraction checkpoint for an entity in a room
47
- * Uses the cache table via adapter
48
- */
49
20
  getLastExtractionCheckpoint(entityId: UUID, roomId: UUID): Promise<number>;
50
- /**
51
- * Set the last extraction checkpoint for an entity in a room
52
- * Uses the cache table via adapter
53
- */
54
21
  setLastExtractionCheckpoint(entityId: UUID, roomId: UUID, messageCount: number): Promise<void>;
55
- /**
56
- * Check if long-term extraction should run based on message count and interval
57
- */
58
22
  shouldRunExtraction(entityId: UUID, roomId: UUID, currentMessageCount: number): Promise<boolean>;
59
- /**
60
- * Store a long-term memory
61
- */
62
- storeLongTermMemory(memory: Omit<LongTermMemory, 'id' | 'createdAt' | 'updatedAt'>): Promise<LongTermMemory>;
63
- /**
64
- * Retrieve long-term memories for an entity
65
- */
23
+ storeLongTermMemory(memory: Omit<LongTermMemory, "id" | "createdAt" | "updatedAt">): Promise<LongTermMemory>;
66
24
  getLongTermMemories(entityId: UUID, category?: LongTermMemoryCategory, limit?: number): Promise<LongTermMemory[]>;
67
- /**
68
- * Update a long-term memory
69
- * Enforces multi-tenancy by verifying agentId and entityId
70
- */
71
- updateLongTermMemory(id: UUID, entityId: UUID, updates: Partial<Omit<LongTermMemory, 'id' | 'agentId' | 'entityId' | 'createdAt'>>): Promise<void>;
72
- /**
73
- * Delete a long-term memory
74
- * Enforces multi-tenancy by verifying agentId and entityId
75
- */
25
+ updateLongTermMemory(id: UUID, entityId: UUID, updates: Partial<Omit<LongTermMemory, "id" | "agentId" | "entityId" | "createdAt">>): Promise<void>;
76
26
  deleteLongTermMemory(id: UUID, entityId: UUID): Promise<void>;
77
- /**
78
- * Get the current session summary for a room (latest one)
79
- */
80
27
  getCurrentSessionSummary(roomId: UUID): Promise<SessionSummary | null>;
81
- /**
82
- * Store a session summary (initial creation)
83
- */
84
- storeSessionSummary(summary: Omit<SessionSummary, 'id' | 'createdAt' | 'updatedAt'>): Promise<SessionSummary>;
85
- /**
86
- * Update an existing session summary
87
- * Enforces multi-tenancy by verifying agentId
88
- */
89
- updateSessionSummary(id: UUID, roomId: UUID, updates: Partial<Omit<SessionSummary, 'id' | 'agentId' | 'roomId' | 'createdAt' | 'updatedAt'>>): Promise<void>;
90
- /**
91
- * Get session summaries for a room
92
- */
28
+ storeSessionSummary(summary: Omit<SessionSummary, "id" | "createdAt" | "updatedAt">): Promise<SessionSummary>;
29
+ updateSessionSummary(id: UUID, roomId: UUID, updates: Partial<Omit<SessionSummary, "id" | "agentId" | "roomId" | "createdAt" | "updatedAt">>): Promise<void>;
93
30
  getSessionSummaries(roomId: UUID, limit?: number): Promise<SessionSummary[]>;
94
- /**
95
- * Search long-term memories by semantic similarity (if embeddings are available)
96
- */
97
31
  searchLongTermMemories(entityId: UUID, queryEmbedding: number[], limit?: number, matchThreshold?: number): Promise<LongTermMemory[]>;
98
- /**
99
- * Get all long-term memories formatted for context
100
- */
101
32
  getFormattedLongTermMemories(entityId: UUID): Promise<string>;
102
33
  }
34
+ //# sourceMappingURL=memory-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-service.d.ts","sourceRoot":"","sources":["../../src/services/memory-service.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,9 @@
1
- import type { UUID } from '@elizaos/core';
2
- /**
3
- * Categories of long-term memory based on cognitive science
4
- *
5
- * Following the widely accepted classification of human long-term memory:
6
- * - EPISODIC: Personal experiences and events (what happened, when, where)
7
- * - SEMANTIC: Facts, concepts, and knowledge (what things mean)
8
- * - PROCEDURAL: Skills and how-to knowledge (how to do things)
9
- */
1
+ import type { UUID } from "@elizaos/core";
10
2
  export declare enum LongTermMemoryCategory {
11
- EPISODIC = "episodic",// Specific events, experiences, and interactions (e.g., "User worked on bug #123 last Tuesday")
12
- SEMANTIC = "semantic",// General facts, concepts, and knowledge (e.g., "User is a Python developer", "User prefers async/await")
3
+ EPISODIC = "episodic",
4
+ SEMANTIC = "semantic",
13
5
  PROCEDURAL = "procedural"
14
6
  }
15
- /**
16
- * Long-term memory entry
17
- */
18
7
  export interface LongTermMemory {
19
8
  id: UUID;
20
9
  agentId: UUID;
@@ -31,9 +20,6 @@ export interface LongTermMemory {
31
20
  accessCount?: number;
32
21
  similarity?: number;
33
22
  }
34
- /**
35
- * Short-term memory session summary
36
- */
37
23
  export interface SessionSummary {
38
24
  id: UUID;
39
25
  agentId: UUID;
@@ -50,9 +36,6 @@ export interface SessionSummary {
50
36
  createdAt: Date;
51
37
  updatedAt: Date;
52
38
  }
53
- /**
54
- * Configuration for memory plugin
55
- */
56
39
  export interface MemoryConfig {
57
40
  shortTermSummarizationThreshold: number;
58
41
  shortTermRetainRecent: number;
@@ -66,20 +49,16 @@ export interface MemoryConfig {
66
49
  summaryMaxTokens?: number;
67
50
  summaryMaxNewMessages?: number;
68
51
  }
69
- /**
70
- * Memory extraction result from evaluator
71
- */
72
52
  export interface MemoryExtraction {
73
53
  category: LongTermMemoryCategory;
74
54
  content: string;
75
55
  confidence: number;
76
56
  metadata?: Record<string, unknown>;
77
57
  }
78
- /**
79
- * Summary generation result
80
- */
81
58
  export interface SummaryResult {
82
59
  summary: string;
83
60
  topics: string[];
84
61
  keyPoints: string[];
85
62
  }
63
+ export type MemoryServiceTypeName = "memory";
64
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,oBAAY,sBAAsB;IAChC,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,UAAU,eAAe;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,sBAAsB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,IAAI,CAAC;IACT,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,+BAA+B,EAAE,MAAM,CAAC;IACxC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,8BAA8B,EAAE,MAAM,CAAC;IACvC,yBAAyB,EAAE,OAAO,CAAC;IACnC,2BAA2B,EAAE,OAAO,CAAC;IACrC,2BAA2B,EAAE,MAAM,CAAC;IACpC,2BAA2B,EAAE,MAAM,CAAC;IACpC,0BAA0B,EAAE,MAAM,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC"}