@elizaos/plugin-memory 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
- var EB=Object.defineProperty;var NB=(B,Q)=>{for(var J in Q)EB(B,J,{get:Q[J],enumerable:!0,configurable:!0,set:(K)=>Q[J]=()=>K})};import{Service as vB,logger as O}from"@elizaos/core";import{eq as W,and as D,desc as S,sql as ZB,cosineDistance as xB,gte as hB}from"drizzle-orm";var s={};NB(s,{sessionSummaries:()=>E,memoryAccessLogs:()=>YB,longTermMemories:()=>X});import{sql as BB}from"drizzle-orm";import{pgTable as OB,text as g,integer as PB,jsonb as LB,real as AB,index as w,varchar as u,timestamp as n}from"drizzle-orm/pg-core";var X=OB("long_term_memories",{id:u("id",{length:36}).primaryKey(),agentId:u("agent_id",{length:36}).notNull(),entityId:u("entity_id",{length:36}).notNull(),category:g("category").notNull(),content:g("content").notNull(),metadata:LB("metadata"),embedding:AB("embedding").array(),confidence:AB("confidence").default(1),source:g("source"),createdAt:n("created_at").default(BB`now()`).notNull(),updatedAt:n("updated_at").default(BB`now()`).notNull(),lastAccessedAt:n("last_accessed_at"),accessCount:PB("access_count").default(0)},(B)=>({agentEntityIdx:w("long_term_memories_agent_entity_idx").on(B.agentId,B.entityId),categoryIdx:w("long_term_memories_category_idx").on(B.category),confidenceIdx:w("long_term_memories_confidence_idx").on(B.confidence),createdAtIdx:w("long_term_memories_created_at_idx").on(B.createdAt)}));import{sql as JB}from"drizzle-orm";import{pgTable as RB,text as kB,integer as KB,jsonb as QB,real as zB,index as i,varchar as y,timestamp as c}from"drizzle-orm/pg-core";var E=RB("session_summaries",{id:y("id",{length:36}).primaryKey(),agentId:y("agent_id",{length:36}).notNull(),roomId:y("room_id",{length:36}).notNull(),entityId:y("entity_id",{length:36}),summary:kB("summary").notNull(),messageCount:KB("message_count").notNull(),lastMessageOffset:KB("last_message_offset").notNull().default(0),startTime:c("start_time").notNull(),endTime:c("end_time").notNull(),topics:QB("topics"),metadata:QB("metadata"),embedding:zB("embedding").array(),createdAt:c("created_at").default(JB`now()`).notNull(),updatedAt:c("updated_at").default(JB`now()`).notNull()},(B)=>({agentRoomIdx:i("session_summaries_agent_room_idx").on(B.agentId,B.roomId),entityIdx:i("session_summaries_entity_idx").on(B.entityId),startTimeIdx:i("session_summaries_start_time_idx").on(B.startTime)}));import{sql as qB}from"drizzle-orm";import{pgTable as fB,text as DB,integer as bB,real as CB,index as a,varchar as l,timestamp as TB}from"drizzle-orm/pg-core";var YB=fB("memory_access_logs",{id:l("id",{length:36}).primaryKey(),agentId:l("agent_id",{length:36}).notNull(),memoryId:l("memory_id",{length:36}).notNull(),memoryType:DB("memory_type").notNull(),accessedAt:TB("accessed_at").default(qB`now()`).notNull(),roomId:l("room_id",{length:36}),relevanceScore:CB("relevance_score"),wasUseful:bB("was_useful")},(B)=>({memoryIdx:a("memory_access_logs_memory_idx").on(B.memoryId),agentIdx:a("memory_access_logs_agent_idx").on(B.agentId),accessedAtIdx:a("memory_access_logs_accessed_at_idx").on(B.accessedAt)}));class I extends vB{static serviceType="memory";sessionMessageCounts;memoryConfig;lastExtractionCheckpoints;capabilityDescription="Advanced memory management with short-term summarization and long-term persistent facts";constructor(B){super(B);this.sessionMessageCounts=new Map,this.lastExtractionCheckpoints=new Map,this.memoryConfig={shortTermSummarizationThreshold:16,shortTermRetainRecent:6,shortTermSummarizationInterval:10,longTermExtractionEnabled:!0,longTermVectorSearchEnabled:!1,longTermConfidenceThreshold:0.85,longTermExtractionThreshold:30,longTermExtractionInterval:10,summaryModelType:"TEXT_LARGE",summaryMaxTokens:2500,summaryMaxNewMessages:20}}static async start(B){let Q=new I(B);return await Q.initialize(B),Q}async stop(){O.info("MemoryService stopped")}async initialize(B){this.runtime=B;let Q=B.getSetting("MEMORY_SUMMARIZATION_THRESHOLD");if(Q)this.memoryConfig.shortTermSummarizationThreshold=parseInt(Q,10);let J=B.getSetting("MEMORY_RETAIN_RECENT");if(J)this.memoryConfig.shortTermRetainRecent=parseInt(J,10);let K=B.getSetting("MEMORY_SUMMARIZATION_INTERVAL");if(K)this.memoryConfig.shortTermSummarizationInterval=parseInt(K,10);let A=B.getSetting("MEMORY_MAX_NEW_MESSAGES");if(A)this.memoryConfig.summaryMaxNewMessages=parseInt(A,10);let Y=B.getSetting("MEMORY_LONG_TERM_ENABLED");if(Y==="false")this.memoryConfig.longTermExtractionEnabled=!1;else if(Y==="true")this.memoryConfig.longTermExtractionEnabled=!0;let Z=B.getSetting("MEMORY_CONFIDENCE_THRESHOLD");if(Z)this.memoryConfig.longTermConfidenceThreshold=parseFloat(Z);let U=B.getSetting("MEMORY_EXTRACTION_THRESHOLD");if(U)this.memoryConfig.longTermExtractionThreshold=parseInt(U,10);let V=B.getSetting("MEMORY_EXTRACTION_INTERVAL");if(V)this.memoryConfig.longTermExtractionInterval=parseInt(V,10);O.debug({summarizationThreshold:this.memoryConfig.shortTermSummarizationThreshold,summarizationInterval:this.memoryConfig.shortTermSummarizationInterval,maxNewMessages:this.memoryConfig.summaryMaxNewMessages,retainRecent:this.memoryConfig.shortTermRetainRecent,longTermEnabled:this.memoryConfig.longTermExtractionEnabled,extractionThreshold:this.memoryConfig.longTermExtractionThreshold,extractionInterval:this.memoryConfig.longTermExtractionInterval,confidenceThreshold:this.memoryConfig.longTermConfidenceThreshold},"MemoryService initialized")}getDb(){let B=this.runtime.db;if(!B)throw Error("Database not available");return B}getConfig(){return{...this.memoryConfig}}updateConfig(B){this.memoryConfig={...this.memoryConfig,...B}}incrementMessageCount(B){let J=(this.sessionMessageCounts.get(B)||0)+1;return this.sessionMessageCounts.set(B,J),J}resetMessageCount(B){this.sessionMessageCounts.set(B,0)}async shouldSummarize(B){return await this.runtime.countMemories(B,!1,"messages")>=this.memoryConfig.shortTermSummarizationThreshold}getExtractionKey(B,Q){return`memory:extraction:${B}:${Q}`}async getLastExtractionCheckpoint(B,Q){let J=this.getExtractionKey(B,Q),K=this.lastExtractionCheckpoints.get(J);if(K!==void 0)return K;try{let Y=await this.runtime.getCache(J)??0;return this.lastExtractionCheckpoints.set(J,Y),Y}catch(A){return O.warn({error:A},"Failed to get extraction checkpoint from cache"),0}}async setLastExtractionCheckpoint(B,Q,J){let K=this.getExtractionKey(B,Q);this.lastExtractionCheckpoints.set(K,J);try{await this.runtime.setCache(K,J),O.debug(`Set extraction checkpoint for ${B} in room ${Q} at message count ${J}`)}catch(A){O.error({error:A},"Failed to persist extraction checkpoint to cache")}}async shouldRunExtraction(B,Q,J){let K=this.memoryConfig.longTermExtractionThreshold,A=this.memoryConfig.longTermExtractionInterval;if(J<K)return!1;let Y=await this.getLastExtractionCheckpoint(B,Q),Z=Math.floor(J/A)*A,U=J>=K&&Z>Y;return O.debug({entityId:B,roomId:Q,currentMessageCount:J,threshold:K,interval:A,lastCheckpoint:Y,currentCheckpoint:Z,shouldRun:U},"Extraction check"),U}async storeLongTermMemory(B){let Q=this.getDb(),J=crypto.randomUUID(),K=new Date,A={id:J,createdAt:K,updatedAt:K,accessCount:0,...B};try{await Q.insert(X).values({id:A.id,agentId:A.agentId,entityId:A.entityId,category:A.category,content:A.content,metadata:A.metadata||{},embedding:A.embedding,confidence:A.confidence,source:A.source,accessCount:A.accessCount,createdAt:K,updatedAt:K,lastAccessedAt:A.lastAccessedAt})}catch(Y){throw O.error({error:Y},"Failed to store long-term memory"),Y}return O.info(`Stored long-term memory: ${A.category} for entity ${A.entityId}`),A}async getLongTermMemories(B,Q,J=10){let K=this.getDb(),A=[W(X.agentId,this.runtime.agentId),W(X.entityId,B)];if(Q)A.push(W(X.category,Q));return(await K.select().from(X).where(D(...A)).orderBy(S(X.confidence),S(X.updatedAt)).limit(J)).map((Z)=>({id:Z.id,agentId:Z.agentId,entityId:Z.entityId,category:Z.category,content:Z.content,metadata:Z.metadata,embedding:Z.embedding,confidence:Z.confidence,source:Z.source,createdAt:Z.createdAt,updatedAt:Z.updatedAt,lastAccessedAt:Z.lastAccessedAt,accessCount:Z.accessCount}))}async updateLongTermMemory(B,Q,J){let K=this.getDb(),A={updatedAt:new Date};if(J.content!==void 0)A.content=J.content;if(J.metadata!==void 0)A.metadata=J.metadata;if(J.confidence!==void 0)A.confidence=J.confidence;if(J.embedding!==void 0)A.embedding=J.embedding;if(J.lastAccessedAt!==void 0)A.lastAccessedAt=J.lastAccessedAt;if(J.accessCount!==void 0)A.accessCount=J.accessCount;await K.update(X).set(A).where(D(W(X.id,B),W(X.agentId,this.runtime.agentId),W(X.entityId,Q))),O.info(`Updated long-term memory: ${B} for entity ${Q}`)}async deleteLongTermMemory(B,Q){await this.getDb().delete(X).where(D(W(X.id,B),W(X.agentId,this.runtime.agentId),W(X.entityId,Q))),O.info(`Deleted long-term memory: ${B} for entity ${Q}`)}async getCurrentSessionSummary(B){let J=await this.getDb().select().from(E).where(D(W(E.agentId,this.runtime.agentId),W(E.roomId,B))).orderBy(S(E.updatedAt)).limit(1);if(J.length===0)return null;let K=J[0];return{id:K.id,agentId:K.agentId,roomId:K.roomId,entityId:K.entityId,summary:K.summary,messageCount:K.messageCount,lastMessageOffset:K.lastMessageOffset,startTime:K.startTime,endTime:K.endTime,topics:K.topics||[],metadata:K.metadata,embedding:K.embedding,createdAt:K.createdAt,updatedAt:K.updatedAt}}async storeSessionSummary(B){let Q=this.getDb(),J=crypto.randomUUID(),K=new Date,A={id:J,createdAt:K,updatedAt:K,...B};return await Q.insert(E).values({id:A.id,agentId:A.agentId,roomId:A.roomId,entityId:A.entityId||null,summary:A.summary,messageCount:A.messageCount,lastMessageOffset:A.lastMessageOffset,startTime:A.startTime,endTime:A.endTime,topics:A.topics||[],metadata:A.metadata||{},embedding:A.embedding,createdAt:K,updatedAt:K}),O.info(`Stored session summary for room ${A.roomId}`),A}async updateSessionSummary(B,Q,J){let K=this.getDb(),A={updatedAt:new Date};if(J.summary!==void 0)A.summary=J.summary;if(J.messageCount!==void 0)A.messageCount=J.messageCount;if(J.lastMessageOffset!==void 0)A.lastMessageOffset=J.lastMessageOffset;if(J.endTime!==void 0)A.endTime=J.endTime;if(J.topics!==void 0)A.topics=J.topics;if(J.metadata!==void 0)A.metadata=J.metadata;if(J.embedding!==void 0)A.embedding=J.embedding;await K.update(E).set(A).where(D(W(E.id,B),W(E.agentId,this.runtime.agentId),W(E.roomId,Q))),O.info(`Updated session summary: ${B} for room ${Q}`)}async getSessionSummaries(B,Q=5){return(await this.getDb().select().from(E).where(D(W(E.agentId,this.runtime.agentId),W(E.roomId,B))).orderBy(S(E.updatedAt)).limit(Q)).map((A)=>({id:A.id,agentId:A.agentId,roomId:A.roomId,entityId:A.entityId,summary:A.summary,messageCount:A.messageCount,lastMessageOffset:A.lastMessageOffset,startTime:A.startTime,endTime:A.endTime,topics:A.topics||[],metadata:A.metadata,embedding:A.embedding,createdAt:A.createdAt,updatedAt:A.updatedAt}))}async searchLongTermMemories(B,Q,J=5,K=0.7){if(!this.memoryConfig.longTermVectorSearchEnabled)return O.warn("Vector search is not enabled, falling back to recent memories"),this.getLongTermMemories(B,void 0,J);let A=this.getDb();try{let Y=Q.map((_)=>Number.isFinite(_)?Number(_.toFixed(6)):0),Z=ZB`1 - (${xB(X.embedding,Y)})`,U=[W(X.agentId,this.runtime.agentId),W(X.entityId,B),ZB`${X.embedding} IS NOT NULL`];if(K>0)U.push(hB(Z,K));return(await A.select({memory:X,similarity:Z}).from(X).where(D(...U)).orderBy(S(Z)).limit(J)).map((_)=>({id:_.memory.id,agentId:_.memory.agentId,entityId:_.memory.entityId,category:_.memory.category,content:_.memory.content,metadata:_.memory.metadata,embedding:_.memory.embedding,confidence:_.memory.confidence,source:_.memory.source,createdAt:_.memory.createdAt,updatedAt:_.memory.updatedAt,lastAccessedAt:_.memory.lastAccessedAt,accessCount:_.memory.accessCount,similarity:_.similarity}))}catch(Y){return O.warn({error:Y},"Vector search failed, falling back to recent memories"),this.getLongTermMemories(B,void 0,J)}}async getFormattedLongTermMemories(B){let Q=await this.getLongTermMemories(B,void 0,20);if(Q.length===0)return"";let J=new Map;for(let A of Q){if(!J.has(A.category))J.set(A.category,[]);J.get(A.category)?.push(A)}let K=[];for(let[A,Y]of J.entries()){let Z=A.split("_").map((V)=>V.charAt(0).toUpperCase()+V.slice(1)).join(" "),U=Y.map((V)=>`- ${V.content}`).join(`
1
+ var _A=Object.defineProperty;var $A=(B,Q)=>{for(var J in Q)_A(B,J,{get:Q[J],enumerable:!0,configurable:!0,set:(K)=>Q[J]=()=>K})};import{Service as OA,logger as H}from"@elizaos/core";import{eq as X,and as R,desc as f,sql as AA,cosineDistance as RA,gte as kA}from"drizzle-orm";var d={};$A(d,{sessionSummaries:()=>j,memoryAccessLogs:()=>e,longTermMemories:()=>$});import{sql as s}from"drizzle-orm";import{pgTable as UA,text as p,integer as VA,jsonb as GA,real as m,index as C,varchar as w,timestamp as y}from"drizzle-orm/pg-core";var $=UA("long_term_memories",{id:w("id",{length:36}).primaryKey(),agentId:w("agent_id",{length:36}).notNull(),entityId:w("entity_id",{length:36}).notNull(),category:p("category").notNull(),content:p("content").notNull(),metadata:GA("metadata"),embedding:m("embedding").array(),confidence:m("confidence").default(1),source:p("source"),createdAt:y("created_at").default(s`now()`).notNull(),updatedAt:y("updated_at").default(s`now()`).notNull(),lastAccessedAt:y("last_accessed_at"),accessCount:VA("access_count").default(0)},(B)=>({agentEntityIdx:C("long_term_memories_agent_entity_idx").on(B.agentId,B.entityId),categoryIdx:C("long_term_memories_category_idx").on(B.category),confidenceIdx:C("long_term_memories_confidence_idx").on(B.confidence),createdAtIdx:C("long_term_memories_created_at_idx").on(B.createdAt)}));import{sql as o}from"drizzle-orm";import{pgTable as XA,text as jA,integer as t,jsonb as r,real as HA,index as c,varchar as T,timestamp as v}from"drizzle-orm/pg-core";var j=XA("session_summaries",{id:T("id",{length:36}).primaryKey(),agentId:T("agent_id",{length:36}).notNull(),roomId:T("room_id",{length:36}).notNull(),entityId:T("entity_id",{length:36}),summary:jA("summary").notNull(),messageCount:t("message_count").notNull(),lastMessageOffset:t("last_message_offset").notNull().default(0),startTime:v("start_time").notNull(),endTime:v("end_time").notNull(),topics:r("topics"),metadata:r("metadata"),embedding:HA("embedding").array(),createdAt:v("created_at").default(o`now()`).notNull(),updatedAt:v("updated_at").default(o`now()`).notNull()},(B)=>({agentRoomIdx:c("session_summaries_agent_room_idx").on(B.agentId,B.roomId),entityIdx:c("session_summaries_entity_idx").on(B.entityId),startTimeIdx:c("session_summaries_start_time_idx").on(B.startTime)}));import{sql as WA}from"drizzle-orm";import{pgTable as FA,text as NA,integer as EA,real as LA,index as l,varchar as h,timestamp as PA}from"drizzle-orm/pg-core";var e=FA("memory_access_logs",{id:h("id",{length:36}).primaryKey(),agentId:h("agent_id",{length:36}).notNull(),memoryId:h("memory_id",{length:36}).notNull(),memoryType:NA("memory_type").notNull(),accessedAt:PA("accessed_at").default(WA`now()`).notNull(),roomId:h("room_id",{length:36}),relevanceScore:LA("relevance_score"),wasUseful:EA("was_useful")},(B)=>({memoryIdx:l("memory_access_logs_memory_idx").on(B.memoryId),agentIdx:l("memory_access_logs_agent_idx").on(B.agentId),accessedAtIdx:l("memory_access_logs_accessed_at_idx").on(B.accessedAt)}));class D extends OA{static serviceType="memory";sessionMessageCounts;memoryConfig;lastExtractionCheckpoints;capabilityDescription="Advanced memory management with short-term summarization and long-term persistent facts";constructor(B){super(B);this.sessionMessageCounts=new Map,this.lastExtractionCheckpoints=new Map,this.memoryConfig={shortTermSummarizationThreshold:16,shortTermRetainRecent:6,shortTermSummarizationInterval:10,longTermExtractionEnabled:!0,longTermVectorSearchEnabled:!1,longTermConfidenceThreshold:0.85,longTermExtractionThreshold:30,longTermExtractionInterval:10,summaryModelType:"TEXT_LARGE",summaryMaxTokens:2500,summaryMaxNewMessages:20}}static async start(B){let Q=new D(B);return await Q.initialize(B),Q}async stop(){H.info("MemoryService stopped")}async initialize(B){this.runtime=B;let Q=B.getSetting("MEMORY_SUMMARIZATION_THRESHOLD");if(Q)this.memoryConfig.shortTermSummarizationThreshold=parseInt(Q,10);let J=B.getSetting("MEMORY_RETAIN_RECENT");if(J)this.memoryConfig.shortTermRetainRecent=parseInt(J,10);let K=B.getSetting("MEMORY_SUMMARIZATION_INTERVAL");if(K)this.memoryConfig.shortTermSummarizationInterval=parseInt(K,10);let A=B.getSetting("MEMORY_MAX_NEW_MESSAGES");if(A)this.memoryConfig.summaryMaxNewMessages=parseInt(A,10);let Y=B.getSetting("MEMORY_LONG_TERM_ENABLED");if(Y==="false")this.memoryConfig.longTermExtractionEnabled=!1;else if(Y==="true")this.memoryConfig.longTermExtractionEnabled=!0;let Z=B.getSetting("MEMORY_CONFIDENCE_THRESHOLD");if(Z)this.memoryConfig.longTermConfidenceThreshold=parseFloat(Z);let U=B.getSetting("MEMORY_EXTRACTION_THRESHOLD");if(U)this.memoryConfig.longTermExtractionThreshold=parseInt(U,10);let V=B.getSetting("MEMORY_EXTRACTION_INTERVAL");if(V)this.memoryConfig.longTermExtractionInterval=parseInt(V,10);H.debug({summarizationThreshold:this.memoryConfig.shortTermSummarizationThreshold,summarizationInterval:this.memoryConfig.shortTermSummarizationInterval,maxNewMessages:this.memoryConfig.summaryMaxNewMessages,retainRecent:this.memoryConfig.shortTermRetainRecent,longTermEnabled:this.memoryConfig.longTermExtractionEnabled,extractionThreshold:this.memoryConfig.longTermExtractionThreshold,extractionInterval:this.memoryConfig.longTermExtractionInterval,confidenceThreshold:this.memoryConfig.longTermConfidenceThreshold},"MemoryService initialized")}getDb(){let B=this.runtime.db;if(!B)throw Error("Database not available");return B}getConfig(){return{...this.memoryConfig}}updateConfig(B){this.memoryConfig={...this.memoryConfig,...B}}incrementMessageCount(B){let J=(this.sessionMessageCounts.get(B)||0)+1;return this.sessionMessageCounts.set(B,J),J}resetMessageCount(B){this.sessionMessageCounts.set(B,0)}async shouldSummarize(B){return await this.runtime.countMemories(B,!1,"messages")>=this.memoryConfig.shortTermSummarizationThreshold}getExtractionKey(B,Q){return`memory:extraction:${B}:${Q}`}async getLastExtractionCheckpoint(B,Q){let J=this.getExtractionKey(B,Q),K=this.lastExtractionCheckpoints.get(J);if(K!==void 0)return K;try{let Y=await this.runtime.getCache(J)??0;return this.lastExtractionCheckpoints.set(J,Y),Y}catch(A){return H.warn({error:A},"Failed to get extraction checkpoint from cache"),0}}async setLastExtractionCheckpoint(B,Q,J){let K=this.getExtractionKey(B,Q);this.lastExtractionCheckpoints.set(K,J);try{await this.runtime.setCache(K,J),H.debug(`Set extraction checkpoint for ${B} in room ${Q} at message count ${J}`)}catch(A){H.error({error:A},"Failed to persist extraction checkpoint to cache")}}async shouldRunExtraction(B,Q,J){let K=this.memoryConfig.longTermExtractionThreshold,A=this.memoryConfig.longTermExtractionInterval;if(J<K)return!1;let Y=await this.getLastExtractionCheckpoint(B,Q),Z=Math.floor(J/A)*A,U=J>=K&&Z>Y;return H.debug({entityId:B,roomId:Q,currentMessageCount:J,threshold:K,interval:A,lastCheckpoint:Y,currentCheckpoint:Z,shouldRun:U},"Extraction check"),U}async storeLongTermMemory(B){let Q=this.getDb(),J=crypto.randomUUID(),K=new Date,A={id:J,createdAt:K,updatedAt:K,accessCount:0,...B};try{await Q.insert($).values({id:A.id,agentId:A.agentId,entityId:A.entityId,category:A.category,content:A.content,metadata:A.metadata||{},embedding:A.embedding,confidence:A.confidence,source:A.source,accessCount:A.accessCount,createdAt:K,updatedAt:K,lastAccessedAt:A.lastAccessedAt})}catch(Y){throw H.error({error:Y},"Failed to store long-term memory"),Y}return H.info(`Stored long-term memory: ${A.category} for entity ${A.entityId}`),A}async getLongTermMemories(B,Q,J=10){let K=this.getDb(),A=[X($.agentId,this.runtime.agentId),X($.entityId,B)];if(Q)A.push(X($.category,Q));return(await K.select().from($).where(R(...A)).orderBy(f($.confidence),f($.updatedAt)).limit(J)).map((Z)=>({id:Z.id,agentId:Z.agentId,entityId:Z.entityId,category:Z.category,content:Z.content,metadata:Z.metadata,embedding:Z.embedding,confidence:Z.confidence,source:Z.source,createdAt:Z.createdAt,updatedAt:Z.updatedAt,lastAccessedAt:Z.lastAccessedAt,accessCount:Z.accessCount}))}async updateLongTermMemory(B,Q,J){let K=this.getDb(),A={updatedAt:new Date};if(J.content!==void 0)A.content=J.content;if(J.metadata!==void 0)A.metadata=J.metadata;if(J.confidence!==void 0)A.confidence=J.confidence;if(J.embedding!==void 0)A.embedding=J.embedding;if(J.lastAccessedAt!==void 0)A.lastAccessedAt=J.lastAccessedAt;if(J.accessCount!==void 0)A.accessCount=J.accessCount;await K.update($).set(A).where(R(X($.id,B),X($.agentId,this.runtime.agentId),X($.entityId,Q))),H.info(`Updated long-term memory: ${B} for entity ${Q}`)}async deleteLongTermMemory(B,Q){await this.getDb().delete($).where(R(X($.id,B),X($.agentId,this.runtime.agentId),X($.entityId,Q))),H.info(`Deleted long-term memory: ${B} for entity ${Q}`)}async getCurrentSessionSummary(B){let J=await this.getDb().select().from(j).where(R(X(j.agentId,this.runtime.agentId),X(j.roomId,B))).orderBy(f(j.updatedAt)).limit(1);if(J.length===0)return null;let K=J[0];return{id:K.id,agentId:K.agentId,roomId:K.roomId,entityId:K.entityId,summary:K.summary,messageCount:K.messageCount,lastMessageOffset:K.lastMessageOffset,startTime:K.startTime,endTime:K.endTime,topics:K.topics||[],metadata:K.metadata,embedding:K.embedding,createdAt:K.createdAt,updatedAt:K.updatedAt}}async storeSessionSummary(B){let Q=this.getDb(),J=crypto.randomUUID(),K=new Date,A={id:J,createdAt:K,updatedAt:K,...B};return await Q.insert(j).values({id:A.id,agentId:A.agentId,roomId:A.roomId,entityId:A.entityId||null,summary:A.summary,messageCount:A.messageCount,lastMessageOffset:A.lastMessageOffset,startTime:A.startTime,endTime:A.endTime,topics:A.topics||[],metadata:A.metadata||{},embedding:A.embedding,createdAt:K,updatedAt:K}),H.info(`Stored session summary for room ${A.roomId}`),A}async updateSessionSummary(B,Q,J){let K=this.getDb(),A={updatedAt:new Date};if(J.summary!==void 0)A.summary=J.summary;if(J.messageCount!==void 0)A.messageCount=J.messageCount;if(J.lastMessageOffset!==void 0)A.lastMessageOffset=J.lastMessageOffset;if(J.endTime!==void 0)A.endTime=J.endTime;if(J.topics!==void 0)A.topics=J.topics;if(J.metadata!==void 0)A.metadata=J.metadata;if(J.embedding!==void 0)A.embedding=J.embedding;await K.update(j).set(A).where(R(X(j.id,B),X(j.agentId,this.runtime.agentId),X(j.roomId,Q))),H.info(`Updated session summary: ${B} for room ${Q}`)}async getSessionSummaries(B,Q=5){return(await this.getDb().select().from(j).where(R(X(j.agentId,this.runtime.agentId),X(j.roomId,B))).orderBy(f(j.updatedAt)).limit(Q)).map((A)=>({id:A.id,agentId:A.agentId,roomId:A.roomId,entityId:A.entityId,summary:A.summary,messageCount:A.messageCount,lastMessageOffset:A.lastMessageOffset,startTime:A.startTime,endTime:A.endTime,topics:A.topics||[],metadata:A.metadata,embedding:A.embedding,createdAt:A.createdAt,updatedAt:A.updatedAt}))}async searchLongTermMemories(B,Q,J=5,K=0.7){if(!this.memoryConfig.longTermVectorSearchEnabled)return H.warn("Vector search is not enabled, falling back to recent memories"),this.getLongTermMemories(B,void 0,J);let A=this.getDb();try{let Y=Q.map((_)=>Number.isFinite(_)?Number(_.toFixed(6)):0),Z=AA`1 - (${RA($.embedding,Y)})`,U=[X($.agentId,this.runtime.agentId),X($.entityId,B),AA`${$.embedding} IS NOT NULL`];if(K>0)U.push(kA(Z,K));return(await A.select({memory:$,similarity:Z}).from($).where(R(...U)).orderBy(f(Z)).limit(J)).map((_)=>({id:_.memory.id,agentId:_.memory.agentId,entityId:_.memory.entityId,category:_.memory.category,content:_.memory.content,metadata:_.memory.metadata,embedding:_.memory.embedding,confidence:_.memory.confidence,source:_.memory.source,createdAt:_.memory.createdAt,updatedAt:_.memory.updatedAt,lastAccessedAt:_.memory.lastAccessedAt,accessCount:_.memory.accessCount,similarity:_.similarity}))}catch(Y){return H.warn({error:Y},"Vector search failed, falling back to recent memories"),this.getLongTermMemories(B,void 0,J)}}async getFormattedLongTermMemories(B){let Q=await this.getLongTermMemories(B,void 0,20);if(Q.length===0)return"";let J=new Map;for(let A of Q){if(!J.has(A.category))J.set(A.category,[]);J.get(A.category)?.push(A)}let K=[];for(let[A,Y]of J.entries()){let Z=A.split("_").map((V)=>V.charAt(0).toUpperCase()+V.slice(1)).join(" "),U=Y.map((V)=>`- ${V.content}`).join(`
2
2
  `);K.push(`**${Z}**:
3
3
  ${U}`)}return K.join(`
4
4
 
5
- `)}}import{logger as L,ModelType as SB,composePromptFromState as _B}from"@elizaos/core";async function IB(B,Q){return(await B.getMemories({tableName:"messages",roomId:Q,count:100,unique:!1})).filter((A)=>!(A.content?.type==="action_result"&&A.metadata?.type==="action_result")&&(A.metadata?.type==="agent_response_message"||A.metadata?.type==="user_message")).length}var MB=`# Task: Summarize Conversation
5
+ `)}}import{logger as L,ModelType as zA,composePromptFromState as BA}from"@elizaos/core";async function qA(B,Q){return(await B.getMemories({tableName:"messages",roomId:Q,count:100,unique:!1})).filter((A)=>!(A.content?.type==="action_result"&&A.metadata?.type==="action_result")&&(A.metadata?.type==="agent_response_message"||A.metadata?.type==="user_message")).length}var fA=`# Task: Summarize Conversation
6
6
 
7
7
  You are analyzing a conversation to create a concise summary that captures the key points, topics, and important details.
8
8
 
@@ -31,7 +31,7 @@ Respond in this XML format:
31
31
  <point>First key point</point>
32
32
  <point>Second key point</point>
33
33
  </keyPoints>
34
- </summary>`,pB=`# Task: Update and Condense Conversation Summary
34
+ </summary>`,DA=`# Task: Update and Condense Conversation Summary
35
35
 
36
36
  You are updating an existing conversation summary with new messages, while keeping the total summary concise.
37
37
 
@@ -62,9 +62,9 @@ Respond in this XML format:
62
62
  <point>First key point</point>
63
63
  <point>Second key point</point>
64
64
  </keyPoints>
65
- </summary>`;function wB(B){let Q=B.match(/<text>([\s\S]*?)<\/text>/),J=B.match(/<topics>([\s\S]*?)<\/topics>/),K=B.matchAll(/<point>([\s\S]*?)<\/point>/g),A=Q?Q[1].trim():"Summary not available",Y=J?J[1].split(",").map((U)=>U.trim()).filter(Boolean):[],Z=Array.from(K).map((U)=>U[1].trim());return{summary:A,topics:Y,keyPoints:Z}}var $B={name:"MEMORY_SUMMARIZATION",description:"Automatically summarizes conversations to optimize context usage",similes:["CONVERSATION_SUMMARY","CONTEXT_COMPRESSION","MEMORY_OPTIMIZATION"],alwaysRun:!0,validate:async(B,Q)=>{if(!Q.content?.text)return!1;let J=B.getService("memory");if(!J)return!1;let K=J.getConfig(),A=await IB(B,Q.roomId),Y=await J.getCurrentSessionSummary(Q.roomId);if(!Y)return A>=K.shortTermSummarizationThreshold;else return A-Y.lastMessageOffset>=K.shortTermSummarizationInterval},handler:async(B,Q)=>{let J=B.getService("memory");if(!J){L.error("MemoryService not found");return}let K=J.getConfig(),{roomId:A}=Q;try{L.info(`Starting summarization for room ${A}`);let Y=await J.getCurrentSessionSummary(A),Z=Y?.lastMessageOffset||0,V=(await B.getMemories({tableName:"messages",roomId:A,count:1000,unique:!1})).filter((G)=>!(G.content?.type==="action_result"&&G.metadata?.type==="action_result")&&(G.metadata?.type==="agent_response_message"||G.metadata?.type==="user_message")),_=V.length,j=_-Z;if(j===0){L.debug("No new dialogue messages to summarize");return}let F=K.summaryMaxNewMessages||50,T=Math.min(j,F);if(j>F)L.warn(`Capping new dialogue messages at ${F} (${j} available). Oldest messages will be skipped.`);let q=V.sort((G,z)=>(G.createdAt||0)-(z.createdAt||0)),H=q.slice(Z,Z+T);if(H.length===0){L.debug("No new dialogue messages retrieved after filtering");return}let $=H.map((G)=>{return`${G.entityId===B.agentId?B.character.name:"User"}: ${G.content.text||"[non-text message]"}`}).join(`
66
- `),k=await B.composeState(Q),v,b;if(Y)b=pB,v=_B({state:{...k,existingSummary:Y.summary,existingTopics:Y.topics?.join(", ")||"None",newMessages:$},template:b});else{let G=q.map((z)=>{return`${z.entityId===B.agentId?B.character.name:"User"}: ${z.content.text||"[non-text message]"}`}).join(`
67
- `);b=MB,v=_B({state:{...k,recentMessages:G},template:b})}let d=await B.useModel(SB.TEXT_LARGE,{prompt:v,maxTokens:K.summaryMaxTokens||2500}),P=wB(d);L.info(`${Y?"Updated":"Generated"} summary: ${P.summary.substring(0,100)}...`);let x=Z+H.length,C=H[0],f=H[H.length-1],h=Y?Y.startTime:C?.createdAt&&C.createdAt>0?new Date(C.createdAt):new Date,p=f?.createdAt&&f.createdAt>0?new Date(f.createdAt):new Date;if(Y)await J.updateSessionSummary(Y.id,A,{summary:P.summary,messageCount:Y.messageCount+H.length,lastMessageOffset:x,endTime:p,topics:P.topics,metadata:{keyPoints:P.keyPoints}}),L.info(`Updated summary for room ${A}: ${H.length} new dialogue messages processed (offset: ${Z} → ${x})`);else await J.storeSessionSummary({agentId:B.agentId,roomId:A,entityId:Q.entityId!==B.agentId?Q.entityId:void 0,summary:P.summary,messageCount:_,lastMessageOffset:_,startTime:h,endTime:p,topics:P.topics,metadata:{keyPoints:P.keyPoints}}),L.info(`Created new summary for room ${A}: ${_} dialogue messages summarized (offset: 0 → ${_})`)}catch(Y){L.error({error:Y},"Error during summarization:")}},examples:[]};import{logger as R,ModelType as yB,composePromptFromState as cB}from"@elizaos/core";var o;((K)=>{K.EPISODIC="episodic";K.SEMANTIC="semantic";K.PROCEDURAL="procedural"})(o||={});var lB=`# Task: Extract Long-Term Memory (Strict Criteria)
65
+ </summary>`;function bA(B){let Q=B.match(/<text>([\s\S]*?)<\/text>/),J=B.match(/<topics>([\s\S]*?)<\/topics>/),K=B.matchAll(/<point>([\s\S]*?)<\/point>/g),A=Q?Q[1].trim():"Summary not available",Y=J?J[1].split(",").map((U)=>U.trim()).filter(Boolean):[],Z=Array.from(K).map((U)=>U[1].trim());return{summary:A,topics:Y,keyPoints:Z}}var JA={name:"MEMORY_SUMMARIZATION",description:"Automatically summarizes conversations to optimize context usage",similes:["CONVERSATION_SUMMARY","CONTEXT_COMPRESSION","MEMORY_OPTIMIZATION"],alwaysRun:!0,validate:async(B,Q)=>{if(!Q.content?.text)return!1;let J=B.getService("memory");if(!J)return!1;let K=J.getConfig(),A=await qA(B,Q.roomId),Y=await J.getCurrentSessionSummary(Q.roomId);if(!Y)return A>=K.shortTermSummarizationThreshold;else return A-Y.lastMessageOffset>=K.shortTermSummarizationInterval},handler:async(B,Q)=>{let J=B.getService("memory");if(!J){L.error("MemoryService not found");return}let K=J.getConfig(),{roomId:A}=Q;try{L.info(`Starting summarization for room ${A}`);let Y=await J.getCurrentSessionSummary(A),Z=Y?.lastMessageOffset||0,V=(await B.getMemories({tableName:"messages",roomId:A,count:1000,unique:!1})).filter((E)=>!(E.content?.type==="action_result"&&E.metadata?.type==="action_result")&&(E.metadata?.type==="agent_response_message"||E.metadata?.type==="user_message")),_=V.length,W=_-Z;if(W===0){L.debug("No new dialogue messages to summarize");return}let F=K.summaryMaxNewMessages||50,x=Math.min(W,F);if(W>F)L.warn(`Capping new dialogue messages at ${F} (${W} available). Oldest messages will be skipped.`);let k=V.sort((E,q)=>(E.createdAt||0)-(q.createdAt||0)),N=k.slice(Z,Z+x);if(N.length===0){L.debug("No new dialogue messages retrieved after filtering");return}let G=N.map((E)=>{return`${E.entityId===B.agentId?B.character.name:"User"}: ${E.content.text||"[non-text message]"}`}).join(`
66
+ `),z=await B.composeState(Q),S,b;if(Y)b=DA,S=BA({state:{...z,existingSummary:Y.summary,existingTopics:Y.topics?.join(", ")||"None",newMessages:G},template:b});else{let E=k.map((q)=>{return`${q.entityId===B.agentId?B.character.name:"User"}: ${q.content.text||"[non-text message]"}`}).join(`
67
+ `);b=fA,S=BA({state:{...z,recentMessages:E},template:b})}let YA=await B.useModel(zA.TEXT_LARGE,{prompt:S,maxTokens:K.summaryMaxTokens||2500}),O=bA(YA);L.info(`${Y?"Updated":"Generated"} summary: ${O.summary.substring(0,100)}...`);let i=Z+N.length,I=N[0],M=N[N.length-1],ZA=Y?Y.startTime:I?.createdAt&&I.createdAt>0?new Date(I.createdAt):new Date,a=M?.createdAt&&M.createdAt>0?new Date(M.createdAt):new Date;if(Y)await J.updateSessionSummary(Y.id,A,{summary:O.summary,messageCount:Y.messageCount+N.length,lastMessageOffset:i,endTime:a,topics:O.topics,metadata:{keyPoints:O.keyPoints}}),L.info(`Updated summary for room ${A}: ${N.length} new dialogue messages processed (offset: ${Z} → ${i})`);else await J.storeSessionSummary({agentId:B.agentId,roomId:A,entityId:Q.entityId!==B.agentId?Q.entityId:void 0,summary:O.summary,messageCount:_,lastMessageOffset:_,startTime:ZA,endTime:a,topics:O.topics,metadata:{keyPoints:O.keyPoints}}),L.info(`Created new summary for room ${A}: ${_} dialogue messages summarized (offset: 0 → ${_})`)}catch(Y){L.error({error:Y},"Error during summarization:")}},examples:[]};import{logger as P,ModelType as CA,composePromptFromState as TA}from"@elizaos/core";var g;((K)=>{K.EPISODIC="episodic";K.SEMANTIC="semantic";K.PROCEDURAL="procedural"})(g||={});var vA=`# Task: Extract Long-Term Memory (Strict Criteria)
68
68
 
69
69
  You are analyzing a conversation to extract ONLY the most critical, persistent information about the user using cognitive science memory categories.
70
70
 
@@ -196,14 +196,10 @@ Skills, workflows, methodologies, and how-to knowledge.
196
196
  <content>User led database migration from MongoDB to PostgreSQL for payment system in Q2 2024</content>
197
197
  <confidence>0.92</confidence>
198
198
  </memory>
199
- </memories>`;function dB(B){let Q=B.matchAll(/<memory>[\s\S]*?<category>(.*?)<\/category>[\s\S]*?<content>(.*?)<\/content>[\s\S]*?<confidence>(.*?)<\/confidence>[\s\S]*?<\/memory>/g),J=[];for(let K of Q){let A=K[1].trim(),Y=K[2].trim(),Z=parseFloat(K[3].trim());if(!Object.values(o).includes(A)){R.warn(`Invalid memory category: ${A}`);continue}if(Y&&!isNaN(Z))J.push({category:A,content:Y,confidence:Z})}return J}var UB={name:"LONG_TERM_MEMORY_EXTRACTION",description:"Extracts long-term facts about users from conversations",similes:["MEMORY_EXTRACTION","FACT_LEARNING","USER_PROFILING"],alwaysRun:!0,validate:async(B,Q)=>{if(Q.entityId===B.agentId)return!1;if(!Q.content?.text)return!1;let J=B.getService("memory");if(!J)return!1;if(!J.getConfig().longTermExtractionEnabled)return R.debug("Long-term memory extraction is disabled"),!1;let A=await B.countMemories(Q.roomId,!1,"messages");return await J.shouldRunExtraction(Q.entityId,Q.roomId,A)},handler:async(B,Q)=>{let J=B.getService("memory");if(!J){R.error("MemoryService not found");return}let K=J.getConfig(),{entityId:A,roomId:Y}=Q;try{R.info(`Extracting long-term memories for entity ${A}`);let U=(await B.getMemories({tableName:"messages",roomId:Y,count:20,unique:!1})).sort(($,k)=>($.createdAt||0)-(k.createdAt||0)).map(($)=>{return`${$.entityId===B.agentId?B.character.name:"User"}: ${$.content.text||"[non-text message]"}`}).join(`
200
- `),V=await J.getLongTermMemories(A,void 0,30),_=V.length>0?V.map(($)=>`[${$.category}] ${$.content} (confidence: ${$.confidence})`).join(`
201
- `):"None yet",j=await B.composeState(Q),F=cB({state:{...j,recentMessages:U,existingMemories:_},template:lB}),T=await B.useModel(yB.TEXT_LARGE,{prompt:F}),q=dB(T);R.info(`Extracted ${q.length} long-term memories`);for(let $ of q)if($.confidence>=Math.max(K.longTermConfidenceThreshold,0.85))await J.storeLongTermMemory({agentId:B.agentId,entityId:A,category:$.category,content:$.content,confidence:$.confidence,source:"conversation",metadata:{roomId:Y,extractedAt:new Date().toISOString()}}),R.info(`Stored long-term memory: [${$.category}] ${$.content.substring(0,50)}...`);else R.debug(`Skipped low-confidence memory: ${$.content} (confidence: ${$.confidence}, threshold: ${Math.max(K.longTermConfidenceThreshold,0.85)})`);let H=await B.countMemories(Y,!1,"messages");await J.setLastExtractionCheckpoint(A,Y,H),R.debug(`Updated extraction checkpoint to ${H} for entity ${A} in room ${Y}`)}catch(Z){R.error({error:Z},"Error during long-term memory extraction:")}},examples:[]};import{logger as gB,addHeader as uB}from"@elizaos/core";var m={name:"LONG_TERM_MEMORY",description:"Persistent facts and preferences about the user",position:50,get:async(B,Q,J)=>{try{let K=B.getService("memory");if(!K)return{data:{memories:[]},values:{longTermMemories:""},text:""};let{entityId:A}=Q;if(A===B.agentId)return{data:{memories:[]},values:{longTermMemories:""},text:""};let Y=await K.getLongTermMemories(A,void 0,25);if(Y.length===0)return{data:{memories:[]},values:{longTermMemories:""},text:""};let Z=await K.getFormattedLongTermMemories(A),U=uB("# What I Know About You",Z),V=new Map;for(let j of Y){let F=V.get(j.category)||0;V.set(j.category,F+1)}let _=Array.from(V.entries()).map(([j,F])=>`${j}: ${F}`).join(", ");return{data:{memories:Y,categoryCounts:Object.fromEntries(V)},values:{longTermMemories:U,memoryCategories:_},text:U}}catch(K){return gB.error({error:K},"Error in longTermMemoryProvider:"),{data:{memories:[]},values:{longTermMemories:""},text:""}}}};import{addHeader as VB,logger as nB}from"@elizaos/core";var t={name:"SUMMARIZED_CONTEXT",description:"Provides summarized context from previous conversations",position:96,get:async(B,Q,J)=>{try{let K=B.getService("memory"),{roomId:A}=Q;if(!K)return{data:{summary:null},values:{sessionSummaries:"",sessionSummariesWithTopics:""},text:""};let Y=await K.getCurrentSessionSummary(A);if(!Y)return{data:{summary:null},values:{sessionSummaries:"",sessionSummariesWithTopics:""},text:""};let Z=`${Y.messageCount} messages`,U=new Date(Y.startTime).toLocaleDateString(),V=`**Previous Conversation** (${Z}, ${U})
199
+ </memories>`;function hA(B){let Q=B.matchAll(/<memory>[\s\S]*?<category>(.*?)<\/category>[\s\S]*?<content>(.*?)<\/content>[\s\S]*?<confidence>(.*?)<\/confidence>[\s\S]*?<\/memory>/g),J=[];for(let K of Q){let A=K[1].trim(),Y=K[2].trim(),Z=parseFloat(K[3].trim());if(!Object.values(g).includes(A)){P.warn(`Invalid memory category: ${A}`);continue}if(Y&&!isNaN(Z))J.push({category:A,content:Y,confidence:Z})}return J}var KA={name:"LONG_TERM_MEMORY_EXTRACTION",description:"Extracts long-term facts about users from conversations",similes:["MEMORY_EXTRACTION","FACT_LEARNING","USER_PROFILING"],alwaysRun:!0,validate:async(B,Q)=>{if(Q.entityId===B.agentId)return!1;if(!Q.content?.text)return!1;let J=B.getService("memory");if(!J)return!1;if(!J.getConfig().longTermExtractionEnabled)return P.debug("Long-term memory extraction is disabled"),!1;let A=await B.countMemories(Q.roomId,!1,"messages");return await J.shouldRunExtraction(Q.entityId,Q.roomId,A)},handler:async(B,Q)=>{let J=B.getService("memory");if(!J){P.error("MemoryService not found");return}let K=J.getConfig(),{entityId:A,roomId:Y}=Q;try{P.info(`Extracting long-term memories for entity ${A}`);let U=(await B.getMemories({tableName:"messages",roomId:Y,count:20,unique:!1})).sort((G,z)=>(G.createdAt||0)-(z.createdAt||0)).map((G)=>{return`${G.entityId===B.agentId?B.character.name:"User"}: ${G.content.text||"[non-text message]"}`}).join(`
200
+ `),V=await J.getLongTermMemories(A,void 0,30),_=V.length>0?V.map((G)=>`[${G.category}] ${G.content} (confidence: ${G.confidence})`).join(`
201
+ `):"None yet",W=await B.composeState(Q),F=TA({state:{...W,recentMessages:U,existingMemories:_},template:vA}),x=await B.useModel(CA.TEXT_LARGE,{prompt:F}),k=hA(x);P.info(`Extracted ${k.length} long-term memories`);for(let G of k)if(G.confidence>=Math.max(K.longTermConfidenceThreshold,0.85))await J.storeLongTermMemory({agentId:B.agentId,entityId:A,category:G.category,content:G.content,confidence:G.confidence,source:"conversation",metadata:{roomId:Y,extractedAt:new Date().toISOString()}}),P.info(`Stored long-term memory: [${G.category}] ${G.content.substring(0,50)}...`);else P.debug(`Skipped low-confidence memory: ${G.content} (confidence: ${G.confidence}, threshold: ${Math.max(K.longTermConfidenceThreshold,0.85)})`);let N=await B.countMemories(Y,!1,"messages");await J.setLastExtractionCheckpoint(A,Y,N),P.debug(`Updated extraction checkpoint to ${N} for entity ${A} in room ${Y}`)}catch(Z){P.error({error:Z},"Error during long-term memory extraction:")}},examples:[]};import{logger as xA,addHeader as SA}from"@elizaos/core";var u={name:"LONG_TERM_MEMORY",description:"Persistent facts and preferences about the user",position:50,get:async(B,Q,J)=>{try{let K=B.getService("memory");if(!K)return{data:{memories:[]},values:{longTermMemories:""},text:""};let{entityId:A}=Q;if(A===B.agentId)return{data:{memories:[]},values:{longTermMemories:""},text:""};let Y=await K.getLongTermMemories(A,void 0,25);if(Y.length===0)return{data:{memories:[]},values:{longTermMemories:""},text:""};let Z=await K.getFormattedLongTermMemories(A),U=SA("# What I Know About You",Z),V=new Map;for(let W of Y){let F=V.get(W.category)||0;V.set(W.category,F+1)}let _=Array.from(V.entries()).map(([W,F])=>`${W}: ${F}`).join(", ");return{data:{memories:Y,categoryCounts:Object.fromEntries(V)},values:{longTermMemories:U,memoryCategories:_},text:U}}catch(K){return xA.error({error:K},"Error in longTermMemoryProvider:"),{data:{memories:[]},values:{longTermMemories:""},text:""}}}};import{addHeader as QA,logger as IA}from"@elizaos/core";var n={name:"SUMMARIZED_CONTEXT",description:"Provides summarized context from previous conversations",position:96,get:async(B,Q,J)=>{try{let K=B.getService("memory"),{roomId:A}=Q;if(!K)return{data:{summary:null},values:{sessionSummaries:"",sessionSummariesWithTopics:""},text:""};let Y=await K.getCurrentSessionSummary(A);if(!Y)return{data:{summary:null},values:{sessionSummaries:"",sessionSummariesWithTopics:""},text:""};let Z=`${Y.messageCount} messages`,U=new Date(Y.startTime).toLocaleDateString(),V=`**Previous Conversation** (${Z}, ${U})
202
202
  `;V+=Y.summary;let _=V;if(Y.topics&&Y.topics.length>0)_+=`
203
- *Topics: ${Y.topics.join(", ")}*`;let j=VB("# Conversation Summary",V),F=VB("# Conversation Summary",_);return{data:{summary:Y},values:{sessionSummaries:j,sessionSummariesWithTopics:F},text:F}}catch(K){return nB.error({error:K},"Error in contextSummaryProvider:"),{data:{summary:null},values:{sessionSummaries:"",sessionSummariesWithTopics:""},text:""}}}};import{addHeader as M,ChannelType as GB,formatMessages as iB,formatPosts as aB,getEntityDetails as sB,logger as oB}from"@elizaos/core";var r={name:"RECENT_MESSAGES",description:"Provides recent conversation messages with detailed context",position:94,get:async(B,Q,J)=>{try{let K=B.getService("memory"),{roomId:A}=Q,Y=K?.getConfig()||{shortTermSummarizationThreshold:16,shortTermRetainRecent:6},Z=B.getConversationLength(),U=Y.shortTermRetainRecent,V=0,_=!1;if(K){let G=await K.getCurrentSessionSummary(A);if(G)_=!0,V=G.lastMessageOffset||0}if(!_){if((await B.getMemories({tableName:"messages",roomId:A,count:Z,unique:!1})).filter((N)=>!(N.content?.type==="action_result"&&N.metadata?.type==="action_result")&&(N.metadata?.type==="agent_response_message"||N.metadata?.type==="user_message")).length<Y.shortTermSummarizationThreshold)U=Z}let[j,F,T]=await Promise.all([sB({runtime:B,roomId:A}),B.getRoom(A),B.getMemories({tableName:"messages",roomId:A,count:U,unique:!1,start:V})]),q=F?.type?F.type===GB.FEED||F.type===GB.THREAD:!1,H=T.filter((G)=>!(G.content?.type==="action_result"&&G.metadata?.type==="action_result")&&(G.metadata?.type==="agent_response_message"||G.metadata?.type==="user_message")),$="";if(H.length>0){if(q)$=aB({messages:H,entities:j,conversationHeader:!1});else $=iB({messages:H,entities:j});if($)$=M("# Recent Messages",$)}let k=(G,z)=>{return G.sort((N,e)=>(N.createdAt||0)-(e.createdAt||0)).map((N)=>{let XB=j.find((FB)=>FB.id===N.entityId)?.names[0]||(N.entityId===B.agentId?B.character.name:"Unknown"),jB=N.createdAt?new Date(N.createdAt).toLocaleString():"Unknown time",HB=N.content.text||"",WB=z&&N.content.thought?`
204
- [Internal thought: ${N.content.thought}]`:"";return`[${jB}] ${XB}: ${HB}${WB}`}).join(`
205
- `)},v=M("# Conversation Messages",k(H,!1)),b=M("# Conversation Messages",k(H,!0)),d=Q.metadata,P=j.find((G)=>G.id===Q.entityId)?.names[0]||d?.entityName||"Unknown User",x=Q.content.text,C=!!x?.trim(),f=C?M("# Received Message",`${P}: ${x}`):"",h=C?M("# Focus your response",`You are replying to the above message from **${P}**. Keep your answer relevant to that message.`):"",p=[$,f,h].filter(Boolean).join(`
203
+ *Topics: ${Y.topics.join(", ")}*`;let W=QA("# Conversation Summary",V),F=QA("# Conversation Summary",_);return{data:{summary:Y},values:{sessionSummaries:W,sessionSummariesWithTopics:F},text:F}}catch(K){return IA.error({error:K},"Error in contextSummaryProvider:"),{data:{summary:null},values:{sessionSummaries:"",sessionSummariesWithTopics:""},text:""}}}};var MA={name:"memory",description:"Advanced memory management with conversation summarization and long-term persistent memory",services:[D],evaluators:[JA,KA],providers:[u,n],schema:d},pA=MA;export{j as sessionSummaries,MA as memoryPlugin,e as memoryAccessLogs,u as longTermMemoryProvider,$ as longTermMemories,pA as default,n as contextSummaryProvider,D as MemoryService,g as LongTermMemoryCategory};
206
204
 
207
- `);return{data:{messages:H},values:{recentMessages:$,conversationLog:v,conversationLogWithAgentThoughts:b,...f&&{receivedMessageHeader:f},...h&&{focusHeader:h}},text:p}}catch(K){return oB.error({error:K},"Error in recentMessagesProvider:"),{data:{messages:[]},values:{recentMessages:"",conversationLog:"",conversationLogWithAgentThoughts:"",receivedMessageHeader:"",focusHeader:""},text:""}}}};var mB={name:"memory",description:"Advanced memory management with conversation summarization and long-term persistent memory",services:[I],evaluators:[$B,UB],providers:[m,t,r],schema:s},tB=mB;export{E as sessionSummaries,r as recentMessagesProvider,mB as memoryPlugin,YB as memoryAccessLogs,m as longTermMemoryProvider,X as longTermMemories,tB as default,t as contextSummaryProvider,I as MemoryService,o as LongTermMemoryCategory};
208
-
209
- //# debugId=BD2BA8E6D3119D2064756E2164756E21
205
+ //# debugId=63795FFE83D49E7A64756E2164756E21
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/services/memory-service.ts", "../../src/schemas/long-term-memories.ts", "../../src/schemas/session-summaries.ts", "../../src/schemas/memory-access-logs.ts", "../../src/evaluators/summarization.ts", "../../src/evaluators/long-term-extraction.ts", "../../src/types/index.ts", "../../src/providers/long-term-memory.ts", "../../src/providers/context-summary.ts", "../../src/providers/recent-messages.ts", "../../src/index.ts"],
3
+ "sources": ["../../src/services/memory-service.ts", "../../src/schemas/long-term-memories.ts", "../../src/schemas/session-summaries.ts", "../../src/schemas/memory-access-logs.ts", "../../src/evaluators/summarization.ts", "../../src/evaluators/long-term-extraction.ts", "../../src/types/index.ts", "../../src/providers/long-term-memory.ts", "../../src/providers/context-summary.ts", "../../src/index.ts"],
4
4
  "sourcesContent": [
5
5
  "import {\n type IAgentRuntime,\n Service,\n type UUID,\n logger,\n type ServiceTypeName,\n} from '@elizaos/core';\nimport { eq, and, desc, sql, cosineDistance, gte } from 'drizzle-orm';\nimport {\n type LongTermMemory,\n type SessionSummary,\n type MemoryConfig,\n LongTermMemoryCategory,\n} from '../types/index';\nimport { longTermMemories, sessionSummaries } from '../schemas/index';\n\n/**\n * Memory Service\n * Manages both short-term (session summaries) and long-term (persistent facts) memory\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>; // Track last extraction per entity-room pair\n\n capabilityDescription =\n 'Advanced 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, // Start summarization at 16 messages\n shortTermRetainRecent: 6, // Show last 6 messages when summarization is active\n shortTermSummarizationInterval: 10, // Update summary every 10 new messages\n longTermExtractionEnabled: true,\n longTermVectorSearchEnabled: false,\n longTermConfidenceThreshold: 0.85, // Stricter threshold - only high-confidence extractions\n longTermExtractionThreshold: 30, // Increased from 20 - need more context before extraction\n longTermExtractionInterval: 10, // Increased from 5 - extract less frequently\n summaryModelType: 'TEXT_LARGE',\n summaryMaxTokens: 2500,\n summaryMaxNewMessages: 20, // Cap new messages in update to prevent context bloat\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 // No cleanup needed for this service\n logger.info('MemoryService stopped');\n }\n\n async initialize(runtime: IAgentRuntime): Promise<void> {\n this.runtime = runtime;\n\n // Load configuration from runtime settings\n const threshold = runtime.getSetting('MEMORY_SUMMARIZATION_THRESHOLD');\n if (threshold) {\n this.memoryConfig.shortTermSummarizationThreshold = parseInt(threshold, 10);\n }\n\n const retainRecent = runtime.getSetting('MEMORY_RETAIN_RECENT');\n if (retainRecent) {\n this.memoryConfig.shortTermRetainRecent = parseInt(retainRecent, 10);\n }\n\n const summarizationInterval = runtime.getSetting('MEMORY_SUMMARIZATION_INTERVAL');\n if (summarizationInterval) {\n this.memoryConfig.shortTermSummarizationInterval = parseInt(summarizationInterval, 10);\n }\n\n const maxNewMessages = runtime.getSetting('MEMORY_MAX_NEW_MESSAGES');\n if (maxNewMessages) {\n this.memoryConfig.summaryMaxNewMessages = parseInt(maxNewMessages, 10);\n }\n\n const longTermEnabled = runtime.getSetting('MEMORY_LONG_TERM_ENABLED');\n // Only override default if explicitly set to 'false'\n if (longTermEnabled === 'false') {\n this.memoryConfig.longTermExtractionEnabled = false;\n } else if (longTermEnabled === 'true') {\n this.memoryConfig.longTermExtractionEnabled = true;\n }\n // Otherwise keep the default value (true)\n\n const confidenceThreshold = runtime.getSetting('MEMORY_CONFIDENCE_THRESHOLD');\n if (confidenceThreshold) {\n this.memoryConfig.longTermConfidenceThreshold = parseFloat(confidenceThreshold);\n }\n\n const extractionThreshold = runtime.getSetting('MEMORY_EXTRACTION_THRESHOLD');\n if (extractionThreshold) {\n this.memoryConfig.longTermExtractionThreshold = parseInt(extractionThreshold, 10);\n }\n\n const extractionInterval = runtime.getSetting('MEMORY_EXTRACTION_INTERVAL');\n if (extractionInterval) {\n this.memoryConfig.longTermExtractionInterval = parseInt(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 /**\n * Get the Drizzle database instance\n */\n private getDb(): any {\n const db = (this.runtime as any).db;\n if (!db) {\n throw new Error('Database not available');\n }\n return db;\n }\n\n /**\n * Get configuration\n */\n getConfig(): MemoryConfig {\n return { ...this.memoryConfig };\n }\n\n /**\n * Update configuration\n */\n updateConfig(updates: Partial<MemoryConfig>): void {\n this.memoryConfig = { ...this.memoryConfig, ...updates };\n }\n\n /**\n * Track message count for a room\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 /**\n * Reset message count for a room\n */\n resetMessageCount(roomId: UUID): void {\n this.sessionMessageCounts.set(roomId, 0);\n }\n\n /**\n * Check if summarization is needed for a room\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 /**\n * Generate cache key for tracking extraction checkpoints per entity-room pair\n */\n private getExtractionKey(entityId: UUID, roomId: UUID): string {\n return `memory:extraction:${entityId}:${roomId}`;\n }\n\n /**\n * Get the last extraction checkpoint for an entity in a room\n * Uses the cache table via adapter\n */\n async getLastExtractionCheckpoint(entityId: UUID, roomId: UUID): Promise<number> {\n const key = this.getExtractionKey(entityId, roomId);\n\n // Check in-memory cache first\n const cached = this.lastExtractionCheckpoints.get(key);\n if (cached !== undefined) {\n return cached;\n }\n\n // Check database cache table via adapter\n try {\n const checkpoint = await this.runtime.getCache<number>(key);\n const messageCount = checkpoint ?? 0;\n\n // Cache it in memory for faster access\n this.lastExtractionCheckpoints.set(key, messageCount);\n\n return messageCount;\n } catch (error) {\n logger.warn({ error }, 'Failed to get extraction checkpoint from cache');\n return 0;\n }\n }\n\n /**\n * Set the last extraction checkpoint for an entity in a room\n * Uses the cache table via adapter\n */\n async setLastExtractionCheckpoint(\n entityId: UUID,\n roomId: UUID,\n messageCount: number\n ): Promise<void> {\n const key = this.getExtractionKey(entityId, roomId);\n\n // Update in-memory cache\n this.lastExtractionCheckpoints.set(key, messageCount);\n\n // Persist to database cache table via adapter\n try {\n await this.runtime.setCache(key, messageCount);\n logger.debug(\n `Set extraction checkpoint for ${entityId} in room ${roomId} at message count ${messageCount}`\n );\n } catch (error) {\n logger.error({ error }, 'Failed to persist extraction checkpoint to cache');\n }\n }\n\n /**\n * Check if long-term extraction should run based on message count and interval\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 // Don't run extraction until we reach the minimum threshold\n if (currentMessageCount < threshold) {\n return false;\n }\n\n const lastCheckpoint = await this.getLastExtractionCheckpoint(entityId, roomId);\n\n // Calculate the current checkpoint (e.g., if interval=5: 20, 25, 30, 35...)\n const currentCheckpoint = Math.floor(currentMessageCount / interval) * interval;\n\n // Run if we're at or past a checkpoint and haven't processed this checkpoint yet\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 /**\n * Store a long-term memory\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 /**\n * Retrieve long-term memories for an entity\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,\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,\n updatedAt: row.updatedAt,\n lastAccessedAt: row.lastAccessedAt,\n accessCount: row.accessCount as number,\n }));\n }\n\n /**\n * Update a long-term memory\n * Enforces multi-tenancy by verifying agentId and entityId\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: any = {\n updatedAt: new Date(),\n };\n\n if (updates.content !== undefined) {\n updateData.content = updates.content;\n }\n\n if (updates.metadata !== undefined) {\n updateData.metadata = updates.metadata;\n }\n\n if (updates.confidence !== undefined) {\n updateData.confidence = updates.confidence;\n }\n\n if (updates.embedding !== undefined) {\n updateData.embedding = updates.embedding;\n }\n\n if (updates.lastAccessedAt !== undefined) {\n updateData.lastAccessedAt = updates.lastAccessedAt;\n }\n\n if (updates.accessCount !== undefined) {\n updateData.accessCount = updates.accessCount;\n }\n\n // Enforce multi-tenancy: only update if agentId and entityId match\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 /**\n * Delete a long-term memory\n * Enforces multi-tenancy by verifying agentId and entityId\n */\n async deleteLongTermMemory(id: UUID, entityId: UUID): Promise<void> {\n const db = this.getDb();\n\n // Enforce multi-tenancy: only delete if agentId and entityId match\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 /**\n * Get the current session summary for a room (latest one)\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,\n messageCount: row.messageCount,\n lastMessageOffset: row.lastMessageOffset,\n startTime: row.startTime,\n endTime: row.endTime,\n topics: (row.topics as string[]) || [],\n metadata: row.metadata as Record<string, unknown>,\n embedding: row.embedding as number[],\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n }\n\n /**\n * Store a session summary (initial creation)\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 /**\n * Update an existing session summary\n * Enforces multi-tenancy by verifying agentId\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: any = {\n updatedAt: new Date(),\n };\n\n if (updates.summary !== undefined) {\n updateData.summary = updates.summary;\n }\n\n if (updates.messageCount !== undefined) {\n updateData.messageCount = updates.messageCount;\n }\n\n if (updates.lastMessageOffset !== undefined) {\n updateData.lastMessageOffset = updates.lastMessageOffset;\n }\n\n if (updates.endTime !== undefined) {\n updateData.endTime = updates.endTime;\n }\n\n if (updates.topics !== undefined) {\n updateData.topics = updates.topics;\n }\n\n if (updates.metadata !== undefined) {\n updateData.metadata = updates.metadata;\n }\n\n if (updates.embedding !== undefined) {\n updateData.embedding = updates.embedding;\n }\n\n // Enforce multi-tenancy: only update if agentId and roomId match\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 /**\n * Get session summaries for a room\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,\n messageCount: row.messageCount,\n lastMessageOffset: row.lastMessageOffset,\n startTime: row.startTime,\n endTime: row.endTime,\n topics: (row.topics as string[]) || [],\n metadata: row.metadata as Record<string, unknown>,\n embedding: row.embedding as number[],\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n }));\n }\n\n /**\n * Search long-term memories by semantic similarity (if embeddings are available)\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 // Clean the vector to ensure all numbers are finite and properly formatted\n const cleanVector = queryEmbedding.map((n) =>\n Number.isFinite(n) ? Number(n.toFixed(6)) : 0\n );\n\n // Calculate similarity using Drizzle's cosineDistance\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 // Add similarity threshold if specified\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);\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 as Record<string, unknown>,\n embedding: row.memory.embedding as number[],\n confidence: row.memory.confidence as number,\n source: row.memory.source as string,\n createdAt: row.memory.createdAt,\n updatedAt: row.memory.updatedAt,\n lastAccessedAt: row.memory.lastAccessedAt,\n accessCount: row.memory.accessCount as number,\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 /**\n * Get all long-term memories formatted for context\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 // Group by category\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 // Format each category\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",
6
6
  "import { sql } from 'drizzle-orm';\nimport {\n pgTable,\n text,\n integer,\n jsonb,\n real,\n index,\n varchar,\n timestamp,\n} from 'drizzle-orm/pg-core';\n\n/**\n * Long-term memory storage table\n * Stores persistent facts about users across all conversations\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')\n .default(sql`now()`)\n .notNull(),\n updatedAt: timestamp('updated_at')\n .default(sql`now()`)\n .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",
@@ -11,10 +11,9 @@
11
11
  "import type { UUID } from '@elizaos/core';\n\n/**\n * Categories of long-term memory based on cognitive science\n * \n * Following the widely accepted classification of human long-term memory:\n * - EPISODIC: Personal experiences and events (what happened, when, where)\n * - SEMANTIC: Facts, concepts, and knowledge (what things mean)\n * - PROCEDURAL: Skills and how-to knowledge (how to do things)\n */\nexport enum LongTermMemoryCategory {\n EPISODIC = 'episodic', // Specific events, experiences, and interactions (e.g., \"User worked on bug #123 last Tuesday\")\n SEMANTIC = 'semantic', // General facts, concepts, and knowledge (e.g., \"User is a Python developer\", \"User prefers async/await\")\n PROCEDURAL = 'procedural', // Skills, workflows, and how-to knowledge (e.g., \"User follows TDD workflow\", \"User uses git rebase instead of merge\")\n}\n\n/**\n * Long-term memory entry\n */\nexport interface LongTermMemory {\n id: UUID;\n agentId: UUID;\n entityId: UUID; // The user/entity this memory is about\n category: LongTermMemoryCategory;\n content: string; // The actual memory content\n metadata?: Record<string, unknown>; // Additional structured data\n embedding?: number[]; // Vector embedding for semantic search\n confidence?: number; // Confidence score (0-1)\n source?: string; // Where this memory came from (conversation, manual, etc.)\n createdAt: Date;\n updatedAt: Date;\n lastAccessedAt?: Date;\n accessCount?: number;\n similarity?: number; // Optional similarity score from vector search\n}\n\n/**\n * Short-term memory session summary\n */\nexport interface SessionSummary {\n id: UUID;\n agentId: UUID;\n roomId: UUID;\n entityId?: UUID; // Optional: specific user in the session\n summary: string; // The summarized conversation\n messageCount: number; // Number of messages summarized\n lastMessageOffset: number; // Index of last summarized message (for pagination)\n startTime: Date; // Timestamp of first message\n endTime: Date; // Timestamp of last message\n topics?: string[]; // Main topics discussed\n metadata?: Record<string, unknown>;\n embedding?: number[]; // Vector embedding of the summary\n createdAt: Date;\n updatedAt: Date; // Track when summary was last updated\n}\n\n/**\n * Configuration for memory plugin\n */\nexport interface MemoryConfig {\n // Short-term memory settings\n shortTermSummarizationThreshold: number; // Messages count before summarization\n shortTermRetainRecent: number; // Number of recent messages to keep after summarization\n shortTermSummarizationInterval: number; // Update summary every N messages after threshold (e.g., 10)\n\n // Long-term memory settings\n longTermExtractionEnabled: boolean;\n longTermVectorSearchEnabled: boolean;\n longTermConfidenceThreshold: number; // Minimum confidence to store\n longTermExtractionThreshold: number; // Minimum messages before starting extraction (default 20)\n longTermExtractionInterval: number; // Run extraction every N messages after threshold (e.g., 5, 10, 15...)\n\n // Summarization settings\n summaryModelType?: string;\n summaryMaxTokens?: number;\n summaryMaxNewMessages?: number; // Max new messages to include in update (prevents context bloat)\n}\n\n/**\n * Memory extraction result from evaluator\n */\nexport interface MemoryExtraction {\n category: LongTermMemoryCategory;\n content: string;\n confidence: number;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Summary generation result\n */\nexport interface SummaryResult {\n summary: string;\n topics: string[];\n keyPoints: string[];\n}\n",
12
12
  "import {\n type IAgentRuntime,\n type Memory,\n type Provider,\n type State,\n logger,\n addHeader,\n} from '@elizaos/core';\nimport { MemoryService } from '../services/memory-service';\n\n/**\n * Long-term Memory Provider\n *\n * Provides persistent facts about the user that have been learned across\n * all conversations. This includes:\n * - User identity and roles\n * - Domain expertise\n * - Preferences\n * - Goals and projects\n * - Custom definitions\n * - Behavioral patterns\n *\n * This provider enriches the context with relevant long-term information\n * to make the agent's responses more personalized and contextually aware.\n */\nexport const longTermMemoryProvider: Provider = {\n name: 'LONG_TERM_MEMORY',\n description: 'Persistent facts and preferences about the user',\n position: 50, // Run early to establish user context\n\n get: async (runtime: IAgentRuntime, message: Memory, _state: State) => {\n try {\n const memoryService = runtime.getService('memory') as MemoryService | null;\n if (!memoryService) {\n return {\n data: { memories: [] },\n values: { longTermMemories: '' },\n text: '',\n };\n }\n\n const { entityId } = message;\n\n // Skip for agent's own messages\n if (entityId === runtime.agentId) {\n return {\n data: { memories: [] },\n values: { longTermMemories: '' },\n text: '',\n };\n }\n\n // Get long-term memories for this entity\n const memories = await memoryService.getLongTermMemories(entityId, undefined, 25);\n\n if (memories.length === 0) {\n return {\n data: { memories: [] },\n values: { longTermMemories: '' },\n text: '',\n };\n }\n\n // Format memories using the service's built-in formatter\n const formattedMemories = await memoryService.getFormattedLongTermMemories(entityId);\n\n const text = addHeader('# What I Know About You', formattedMemories);\n\n // Create a summary of memory categories for quick reference\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 memories,\n categoryCounts: Object.fromEntries(categoryCounts),\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: { memories: [] },\n values: { longTermMemories: '' },\n text: '',\n };\n }\n },\n};\n",
13
13
  "import {\n type IAgentRuntime,\n type Memory,\n type Provider,\n type State,\n addHeader,\n logger,\n} from '@elizaos/core';\nimport { MemoryService } from '../services/memory-service';\n\n/**\n * Context Summary Provider\n *\n * Provides summarized context from previous conversations.\n * Returns session summaries with and without topics for flexible usage.\n *\n * Values returned:\n * - sessionSummaries: Summary text only (without topics)\n * - sessionSummariesWithTopics: Summary text with topics included\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) => {\n try {\n const memoryService = runtime.getService('memory') as MemoryService | null;\n const { roomId } = message;\n\n // If no memory service, return empty\n if (!memoryService) {\n return {\n data: {\n summary: null,\n },\n values: {\n sessionSummaries: '',\n sessionSummariesWithTopics: '',\n },\n text: '',\n };\n }\n\n // Get current session summary\n const currentSummary = await memoryService.getCurrentSessionSummary(roomId);\n\n if (!currentSummary) {\n return {\n data: {\n summary: null,\n },\n values: {\n sessionSummaries: '',\n sessionSummariesWithTopics: '',\n },\n text: '',\n };\n }\n\n // Format summary without topics\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 // Format summary with topics\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 summary: currentSummary,\n },\n values: {\n sessionSummaries,\n sessionSummariesWithTopics,\n },\n text: sessionSummariesWithTopics,\n };\n } catch (error) {\n logger.error({ error }, 'Error in contextSummaryProvider:');\n return {\n data: {\n summary: null,\n },\n values: {\n sessionSummaries: '',\n sessionSummariesWithTopics: '',\n },\n text: '',\n };\n }\n },\n};\n",
14
- "import {\n addHeader,\n ChannelType,\n CustomMetadata,\n formatMessages,\n formatPosts,\n getEntityDetails,\n type Entity,\n type IAgentRuntime,\n type Memory,\n type Provider,\n type State,\n logger,\n} from \"@elizaos/core\";\nimport { MemoryService } from \"../services/memory-service\";\n\n/**\n * Recent Messages Provider\n *\n * Provides recent conversation messages with detailed context.\n * Fetches the most recent unsummarized messages from the conversation.\n *\n * Values returned:\n * - recentMessages: Formatted recent messages\n * - conversationLog: Simple timestamped conversation log\n * - conversationLogWithAgentThoughts: Conversation log including agent's internal thoughts\n * - receivedMessageHeader: Header showing the current message being responded to\n * - focusHeader: Instruction to focus response on the received message\n */\nexport const recentMessagesProvider: Provider = {\n name: \"RECENT_MESSAGES\",\n description: \"Provides recent conversation messages with detailed context\",\n position: 94,\n\n get: async (runtime: IAgentRuntime, message: Memory, _state: State) => {\n try {\n const memoryService = runtime.getService(\n \"memory\"\n ) as MemoryService | null;\n const { roomId } = message;\n\n // Get configuration\n const config = memoryService?.getConfig() || {\n shortTermSummarizationThreshold: 16,\n shortTermRetainRecent: 6,\n };\n\n // Get conversation length setting\n const conversationLength = runtime.getConversationLength();\n\n // Determine how many messages to fetch and from where\n let messagesToFetch = config.shortTermRetainRecent;\n let startOffset = 0;\n\n // Check if we have a summary to determine offset and whether to use summarization mode\n let hasSummary = false;\n if (memoryService) {\n const currentSummary = await memoryService.getCurrentSessionSummary(\n roomId\n );\n if (currentSummary) {\n hasSummary = true;\n // When we have a summary, fetch recent messages after the summary offset\n startOffset = currentSummary.lastMessageOffset || 0;\n }\n }\n\n // If no summary exists, check if we should show all messages or just recent ones\n if (!hasSummary) {\n // Get all messages to count dialogue messages\n const allMessages = await runtime.getMemories({\n tableName: \"messages\",\n roomId,\n count: conversationLength,\n unique: false,\n });\n\n const dialogueMessageCount = allMessages.filter(\n (msg) =>\n !(\n msg.content?.type === \"action_result\" &&\n msg.metadata?.type === \"action_result\"\n ) &&\n (msg.metadata?.type === \"agent_response_message\" ||\n msg.metadata?.type === \"user_message\")\n ).length;\n\n // If below threshold, show all messages; otherwise show recent only\n if (dialogueMessageCount < config.shortTermSummarizationThreshold) {\n messagesToFetch = conversationLength;\n }\n }\n\n // Parallelize data fetching\n const [entitiesData, room, recentMessagesData] = await Promise.all([\n getEntityDetails({ runtime, roomId }),\n runtime.getRoom(roomId),\n runtime.getMemories({\n tableName: \"messages\",\n roomId,\n count: messagesToFetch,\n unique: false,\n start: startOffset,\n }),\n ]);\n\n // Determine format based on room type\n const isPostFormat = room?.type\n ? room.type === ChannelType.FEED || room.type === ChannelType.THREAD\n : false;\n\n // Filter to dialogue messages only (exclude action results)\n const dialogueMessages = recentMessagesData.filter(\n (msg) =>\n !(\n msg.content?.type === \"action_result\" &&\n msg.metadata?.type === \"action_result\"\n ) &&\n (msg.metadata?.type === \"agent_response_message\" ||\n msg.metadata?.type === \"user_message\")\n );\n\n // Format recent messages\n let recentMessagesText = \"\";\n if (dialogueMessages.length > 0) {\n if (isPostFormat) {\n recentMessagesText = formatPosts({\n messages: dialogueMessages,\n entities: entitiesData,\n conversationHeader: false,\n });\n } else {\n recentMessagesText = formatMessages({\n messages: dialogueMessages,\n entities: entitiesData,\n });\n }\n\n if (recentMessagesText) {\n recentMessagesText = addHeader(\n \"# Recent Messages\",\n recentMessagesText\n );\n }\n }\n\n // Format conversation logs (simple format without IDs)\n const formatConversationLog = (\n messages: Memory[],\n includeThoughts: boolean\n ): string => {\n return messages\n .sort((a, b) => (a.createdAt || 0) - (b.createdAt || 0))\n .map((msg) => {\n const entity = entitiesData.find(\n (e: Entity) => e.id === msg.entityId\n );\n const entityName =\n entity?.names[0] ||\n (msg.entityId === runtime.agentId\n ? runtime.character.name\n : \"Unknown\");\n const timestamp = msg.createdAt\n ? new Date(msg.createdAt).toLocaleString()\n : \"Unknown time\";\n\n const text = msg.content.text || \"\";\n const thought =\n includeThoughts && msg.content.thought\n ? `\\n [Internal thought: ${msg.content.thought}]`\n : \"\";\n\n return `[${timestamp}] ${entityName}: ${text}${thought}`;\n })\n .join(\"\\n\");\n };\n\n const conversationLog = addHeader(\n \"# Conversation Messages\",\n formatConversationLog(dialogueMessages, false)\n );\n const conversationLogWithAgentThoughts = addHeader(\n \"# Conversation Messages\",\n formatConversationLog(dialogueMessages, true)\n );\n\n // Build received message header\n const metaData = message.metadata as CustomMetadata;\n const senderName =\n entitiesData.find((entity: Entity) => entity.id === message.entityId)\n ?.names[0] ||\n metaData?.entityName ||\n \"Unknown User\";\n const receivedMessageContent = message.content.text;\n const hasReceivedMessage = !!receivedMessageContent?.trim();\n\n const receivedMessageHeader = hasReceivedMessage\n ? addHeader(\n \"# Received Message\",\n `${senderName}: ${receivedMessageContent}`\n )\n : \"\";\n\n const focusHeader = hasReceivedMessage\n ? addHeader(\n \"# Focus your response\",\n `You are replying to the above message from **${senderName}**. Keep your answer relevant to that message.`\n )\n : \"\";\n\n // Combine sections for text output\n const text = [recentMessagesText, receivedMessageHeader, focusHeader]\n .filter(Boolean)\n .join(\"\\n\\n\");\n\n return {\n data: {\n messages: dialogueMessages,\n },\n values: {\n recentMessages: recentMessagesText,\n conversationLog,\n conversationLogWithAgentThoughts,\n ...(receivedMessageHeader && { receivedMessageHeader }),\n ...(focusHeader && { focusHeader }),\n },\n text,\n };\n } catch (error) {\n logger.error({ error }, \"Error in recentMessagesProvider:\");\n return {\n data: {\n messages: [],\n },\n values: {\n recentMessages: \"\",\n conversationLog: \"\",\n conversationLogWithAgentThoughts: \"\",\n receivedMessageHeader: \"\",\n focusHeader: \"\",\n },\n text: \"\",\n };\n }\n },\n};\n",
15
- "import type { Plugin } from '@elizaos/core';\nimport { MemoryService } from './services/memory-service';\nimport { summarizationEvaluator } from './evaluators/summarization';\nimport { longTermExtractionEvaluator } from './evaluators/long-term-extraction';\n// import { shortTermMemoryProvider } from './providers/short-term-memory';\nimport { longTermMemoryProvider } from './providers/long-term-memory';\nimport { contextSummaryProvider } from './providers/context-summary';\nimport { recentMessagesProvider } from './providers/recent-messages';\n// import { rememberAction } from './actions/remember';\nimport * as schema from './schemas/index';\n\nexport * from './types/index';\nexport * from './schemas/index';\nexport { MemoryService } from './services/memory-service';\nexport { contextSummaryProvider } from './providers/context-summary';\nexport { recentMessagesProvider } from './providers/recent-messages';\nexport { longTermMemoryProvider } from './providers/long-term-memory';\n\n/**\n * Memory Plugin\n *\n * Advanced memory management plugin that provides:\n *\n * **Short-term Memory (Conversation Summarization)**:\n * - Automatically summarizes long conversations to reduce context size\n * - Retains recent messages while archiving older ones as summaries\n * - Configurable thresholds for when to summarize\n *\n * **Long-term Memory (Persistent Facts)**:\n * - Extracts and stores persistent facts about users\n * - Categorizes information (identity, expertise, preferences, etc.)\n * - Provides context-aware user profiles across all conversations\n *\n * **Components**:\n * - `MemoryService`: Manages all memory operations\n * - Evaluators: Process conversations to create summaries and extract facts\n * - Providers: Inject memory context into conversations\n * - Actions: Allow manual memory storage via user commands\n *\n * **Configuration** (via environment variables):\n * - `MEMORY_SUMMARIZATION_THRESHOLD`: Messages before summarization (default: 50)\n * - `MEMORY_RETAIN_RECENT`: Recent messages to keep (default: 10)\n * - `MEMORY_LONG_TERM_ENABLED`: Enable long-term extraction (default: true)\n * - `MEMORY_CONFIDENCE_THRESHOLD`: Minimum confidence to store (default: 0.7)\n *\n * **Database Tables**:\n * - `long_term_memories`: Persistent user facts\n * - `session_summaries`: Conversation summaries\n * - `memory_access_logs`: Optional usage tracking\n */\nexport const memoryPlugin: Plugin = {\n name: 'memory',\n description:\n 'Advanced memory management with conversation summarization and long-term persistent memory',\n\n services: [MemoryService],\n\n evaluators: [summarizationEvaluator, longTermExtractionEvaluator],\n\n providers: [\n longTermMemoryProvider, \n // shortTermMemoryProvider, \n contextSummaryProvider, \n recentMessagesProvider\n ],\n\n // actions: [rememberAction],\n\n // Export schema for dynamic migrations\n schema,\n};\n\nexport default memoryPlugin;\n"
14
+ "import type { Plugin } from '@elizaos/core';\nimport { MemoryService } from './services/memory-service';\nimport { summarizationEvaluator } from './evaluators/summarization';\nimport { longTermExtractionEvaluator } from './evaluators/long-term-extraction';\n// import { shortTermMemoryProvider } from './providers/short-term-memory';\nimport { longTermMemoryProvider } from './providers/long-term-memory';\nimport { contextSummaryProvider } from './providers/context-summary';\n// import { rememberAction } from './actions/remember';\nimport * as schema from './schemas/index';\n\nexport * from './types/index';\nexport * from './schemas/index';\nexport { MemoryService } from './services/memory-service';\nexport { contextSummaryProvider } from './providers/context-summary';\nexport { longTermMemoryProvider } from './providers/long-term-memory';\n\n/**\n * Memory Plugin\n *\n * Advanced memory management plugin that provides:\n *\n * **Short-term Memory (Conversation Summarization)**:\n * - Automatically summarizes long conversations to reduce context size\n * - Retains recent messages while archiving older ones as summaries\n * - Configurable thresholds for when to summarize\n *\n * **Long-term Memory (Persistent Facts)**:\n * - Extracts and stores persistent facts about users\n * - Categorizes information (identity, expertise, preferences, etc.)\n * - Provides context-aware user profiles across all conversations\n *\n * **Components**:\n * - `MemoryService`: Manages all memory operations\n * - Evaluators: Process conversations to create summaries and extract facts\n * - Providers: Inject memory context into conversations\n * - Actions: Allow manual memory storage via user commands\n *\n * **Configuration** (via environment variables):\n * - `MEMORY_SUMMARIZATION_THRESHOLD`: Messages before summarization (default: 50)\n * - `MEMORY_RETAIN_RECENT`: Recent messages to keep (default: 10)\n * - `MEMORY_LONG_TERM_ENABLED`: Enable long-term extraction (default: true)\n * - `MEMORY_CONFIDENCE_THRESHOLD`: Minimum confidence to store (default: 0.7)\n *\n * **Database Tables**:\n * - `long_term_memories`: Persistent user facts\n * - `session_summaries`: Conversation summaries\n * - `memory_access_logs`: Optional usage tracking\n */\nexport const memoryPlugin: Plugin = {\n name: 'memory',\n description:\n 'Advanced memory management with conversation summarization and long-term persistent memory',\n\n services: [MemoryService],\n\n evaluators: [summarizationEvaluator, longTermExtractionEvaluator],\n\n providers: [\n longTermMemoryProvider,\n contextSummaryProvider,\n ],\n\n // actions: [rememberAction],\n\n // Export schema for dynamic migrations\n schema,\n};\n\nexport default memoryPlugin;\n"
16
15
  ],
17
- "mappings": "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",
18
- "debugId": "BD2BA8E6D3119D2064756E2164756E21",
16
+ "mappings": "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",
17
+ "debugId": "63795FFE83D49E7A64756E2164756E21",
19
18
  "names": []
20
19
  }
@@ -30,7 +30,6 @@ var __export = (target, all) => {
30
30
  var exports_index_node = {};
31
31
  __export(exports_index_node, {
32
32
  sessionSummaries: () => sessionSummaries,
33
- recentMessagesProvider: () => recentMessagesProvider,
34
33
  memoryPlugin: () => memoryPlugin,
35
34
  memoryAccessLogs: () => memoryAccessLogs,
36
35
  longTermMemoryProvider: () => longTermMemoryProvider,
@@ -1152,129 +1151,6 @@ var contextSummaryProvider = {
1152
1151
  }
1153
1152
  };
1154
1153
 
1155
- // src/providers/recent-messages.ts
1156
- var import_core6 = require("@elizaos/core");
1157
- var recentMessagesProvider = {
1158
- name: "RECENT_MESSAGES",
1159
- description: "Provides recent conversation messages with detailed context",
1160
- position: 94,
1161
- get: async (runtime, message, _state) => {
1162
- try {
1163
- const memoryService = runtime.getService("memory");
1164
- const { roomId } = message;
1165
- const config = memoryService?.getConfig() || {
1166
- shortTermSummarizationThreshold: 16,
1167
- shortTermRetainRecent: 6
1168
- };
1169
- const conversationLength = runtime.getConversationLength();
1170
- let messagesToFetch = config.shortTermRetainRecent;
1171
- let startOffset = 0;
1172
- let hasSummary = false;
1173
- if (memoryService) {
1174
- const currentSummary = await memoryService.getCurrentSessionSummary(roomId);
1175
- if (currentSummary) {
1176
- hasSummary = true;
1177
- startOffset = currentSummary.lastMessageOffset || 0;
1178
- }
1179
- }
1180
- if (!hasSummary) {
1181
- const allMessages = await runtime.getMemories({
1182
- tableName: "messages",
1183
- roomId,
1184
- count: conversationLength,
1185
- unique: false
1186
- });
1187
- const dialogueMessageCount = allMessages.filter((msg) => !(msg.content?.type === "action_result" && msg.metadata?.type === "action_result") && (msg.metadata?.type === "agent_response_message" || msg.metadata?.type === "user_message")).length;
1188
- if (dialogueMessageCount < config.shortTermSummarizationThreshold) {
1189
- messagesToFetch = conversationLength;
1190
- }
1191
- }
1192
- const [entitiesData, room, recentMessagesData] = await Promise.all([
1193
- import_core6.getEntityDetails({ runtime, roomId }),
1194
- runtime.getRoom(roomId),
1195
- runtime.getMemories({
1196
- tableName: "messages",
1197
- roomId,
1198
- count: messagesToFetch,
1199
- unique: false,
1200
- start: startOffset
1201
- })
1202
- ]);
1203
- const isPostFormat = room?.type ? room.type === import_core6.ChannelType.FEED || room.type === import_core6.ChannelType.THREAD : false;
1204
- const dialogueMessages = recentMessagesData.filter((msg) => !(msg.content?.type === "action_result" && msg.metadata?.type === "action_result") && (msg.metadata?.type === "agent_response_message" || msg.metadata?.type === "user_message"));
1205
- let recentMessagesText = "";
1206
- if (dialogueMessages.length > 0) {
1207
- if (isPostFormat) {
1208
- recentMessagesText = import_core6.formatPosts({
1209
- messages: dialogueMessages,
1210
- entities: entitiesData,
1211
- conversationHeader: false
1212
- });
1213
- } else {
1214
- recentMessagesText = import_core6.formatMessages({
1215
- messages: dialogueMessages,
1216
- entities: entitiesData
1217
- });
1218
- }
1219
- if (recentMessagesText) {
1220
- recentMessagesText = import_core6.addHeader("# Recent Messages", recentMessagesText);
1221
- }
1222
- }
1223
- const formatConversationLog = (messages, includeThoughts) => {
1224
- return messages.sort((a, b) => (a.createdAt || 0) - (b.createdAt || 0)).map((msg) => {
1225
- const entity = entitiesData.find((e) => e.id === msg.entityId);
1226
- const entityName = entity?.names[0] || (msg.entityId === runtime.agentId ? runtime.character.name : "Unknown");
1227
- const timestamp4 = msg.createdAt ? new Date(msg.createdAt).toLocaleString() : "Unknown time";
1228
- const text5 = msg.content.text || "";
1229
- const thought = includeThoughts && msg.content.thought ? `
1230
- [Internal thought: ${msg.content.thought}]` : "";
1231
- return `[${timestamp4}] ${entityName}: ${text5}${thought}`;
1232
- }).join(`
1233
- `);
1234
- };
1235
- const conversationLog = import_core6.addHeader("# Conversation Messages", formatConversationLog(dialogueMessages, false));
1236
- const conversationLogWithAgentThoughts = import_core6.addHeader("# Conversation Messages", formatConversationLog(dialogueMessages, true));
1237
- const metaData = message.metadata;
1238
- const senderName = entitiesData.find((entity) => entity.id === message.entityId)?.names[0] || metaData?.entityName || "Unknown User";
1239
- const receivedMessageContent = message.content.text;
1240
- const hasReceivedMessage = !!receivedMessageContent?.trim();
1241
- const receivedMessageHeader = hasReceivedMessage ? import_core6.addHeader("# Received Message", `${senderName}: ${receivedMessageContent}`) : "";
1242
- const focusHeader = hasReceivedMessage ? import_core6.addHeader("# Focus your response", `You are replying to the above message from **${senderName}**. Keep your answer relevant to that message.`) : "";
1243
- const text4 = [recentMessagesText, receivedMessageHeader, focusHeader].filter(Boolean).join(`
1244
-
1245
- `);
1246
- return {
1247
- data: {
1248
- messages: dialogueMessages
1249
- },
1250
- values: {
1251
- recentMessages: recentMessagesText,
1252
- conversationLog,
1253
- conversationLogWithAgentThoughts,
1254
- ...receivedMessageHeader && { receivedMessageHeader },
1255
- ...focusHeader && { focusHeader }
1256
- },
1257
- text: text4
1258
- };
1259
- } catch (error) {
1260
- import_core6.logger.error({ error }, "Error in recentMessagesProvider:");
1261
- return {
1262
- data: {
1263
- messages: []
1264
- },
1265
- values: {
1266
- recentMessages: "",
1267
- conversationLog: "",
1268
- conversationLogWithAgentThoughts: "",
1269
- receivedMessageHeader: "",
1270
- focusHeader: ""
1271
- },
1272
- text: ""
1273
- };
1274
- }
1275
- }
1276
- };
1277
-
1278
1154
  // src/index.ts
1279
1155
  var memoryPlugin = {
1280
1156
  name: "memory",
@@ -1283,11 +1159,10 @@ var memoryPlugin = {
1283
1159
  evaluators: [summarizationEvaluator, longTermExtractionEvaluator],
1284
1160
  providers: [
1285
1161
  longTermMemoryProvider,
1286
- contextSummaryProvider,
1287
- recentMessagesProvider
1162
+ contextSummaryProvider
1288
1163
  ],
1289
1164
  schema: exports_schemas
1290
1165
  };
1291
1166
  var src_default = memoryPlugin;
1292
1167
 
1293
- //# debugId=38CF5E9664327F8064756E2164756E21
1168
+ //# debugId=F9F8FE6AD7DE8BD864756E2164756E21