@elizaos/core 1.6.5-alpha.2 → 1.6.5-alpha.4
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.
- package/dist/browser/index.browser.js +3 -3
- package/dist/browser/index.browser.js.map +4 -4
- package/dist/elizaos.d.ts +2 -49
- package/dist/elizaos.d.ts.map +1 -1
- package/dist/node/index.node.js +8 -1
- package/dist/node/index.node.js.map +4 -4
- package/dist/runtime.d.ts +10 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/types/elizaos.d.ts +131 -0
- package/dist/types/elizaos.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/runtime.d.ts +7 -1
- package/dist/types/runtime.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -592,7 +592,7 @@ Here are the actions taken by the assistant to fulfill the request:
|
|
|
592
592
|
</response>
|
|
593
593
|
</output>
|
|
594
594
|
`;async function nP$($,q,K){let P=Q8($,K),_=await $.getWorld(P);if(!_||!_.metadata?.roles)return"NONE";if(_.metadata.roles[q])return _.metadata.roles[q];if(_.metadata.roles[q])return _.metadata.roles[q];return"NONE"}async function iP$($,q){if(!q)return j6.error("User ID is required to find server"),null;let K=await $.getAllWorlds();if(!K||K.length===0)return j6.info("No worlds found for this agent"),null;let P=[];for(let _ of K)if(_.metadata?.ownership?.ownerId===q)P.push(_);return P.length?P:null}var Gq=[];for(let $=0;$<256;++$)Gq.push(($+256).toString(16).slice(1));function FM($,q=0){return(Gq[$[q+0]]+Gq[$[q+1]]+Gq[$[q+2]]+Gq[$[q+3]]+"-"+Gq[$[q+4]]+Gq[$[q+5]]+"-"+Gq[$[q+6]]+Gq[$[q+7]]+"-"+Gq[$[q+8]]+Gq[$[q+9]]+"-"+Gq[$[q+10]]+Gq[$[q+11]]+Gq[$[q+12]]+Gq[$[q+13]]+Gq[$[q+14]]+Gq[$[q+15]]).toLowerCase()}var iH,bn=new Uint8Array(16);function BH(){if(!iH){if(typeof crypto>"u"||!crypto.getRandomValues)throw Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");iH=crypto.getRandomValues.bind(crypto)}return iH(bn)}var gn=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),tH={randomUUID:gn};function yn($,q,K){$=$||{};let P=$.random??$.rng?.()??BH();if(P.length<16)throw Error("Random bytes length must be >= 16");if(P[6]=P[6]&15|64,P[8]=P[8]&63|128,q){if(K=K||0,K<0||K+16>q.length)throw RangeError(`UUID byte range ${K}:${K+15} is out of buffer bounds`);for(let _=0;_<16;++_)q[K+_]=P[_];return q}return FM(P)}function un($,q,K){if(tH.randomUUID&&!q&&!$)return tH.randomUUID();return yn($,q,K)}var hq=un;var F7=new Map;class UH{async handleMessage($,q,K,P){let _={maxRetries:P?.maxRetries??3,timeoutDuration:P?.timeoutDuration??3600000,useMultiStep:P?.useMultiStep??YO($.getSetting("USE_MULTI_STEP")),maxMultiStepIterations:P?.maxMultiStepIterations??parseInt($.getSetting("MAX_MULTISTEP_ITERATIONS")||"6")},O=void 0,j=hq();try{if($.logger.info(`[MessageService] Message received from ${q.entityId} in room ${q.roomId}`),!F7.has($.agentId))F7.set($.agentId,new Map);let z=F7.get($.agentId);if(!z)throw Error("Agent responses map not found");let J=z.get(q.roomId);if(J)j6.warn(`[MessageService] Updating response ID for room ${q.roomId} from ${J} to ${j}`);z.set(q.roomId,j);let T=$.startRun(),X=Date.now();await $.emitEvent("RUN_STARTED",{runtime:$,runId:T,messageId:q.id,roomId:q.roomId,entityId:q.entityId,startTime:X,status:"started",source:"messageHandler",metadata:q.content});let w=new Promise((N,E)=>{O=setTimeout(async()=>{await $.emitEvent("RUN_TIMEOUT",{runtime:$,runId:T,messageId:q.id,roomId:q.roomId,entityId:q.entityId,startTime:X,status:"timeout",endTime:Date.now(),duration:Date.now()-X,error:"Run exceeded timeout",source:"messageHandler"}),E(Error("Run exceeded timeout"))},_.timeoutDuration)}),V=this.processMessage($,q,K,j,T,X,_),S=await Promise.race([V,w]);return clearTimeout(O),S}catch(z){throw clearTimeout(O),$.logger.error({error:z},"[MessageService] Error in handleMessage:"),z}}async processMessage($,q,K,P,_,O,j){try{let z=F7.get($.agentId);if(!z)throw Error("Agent responses map not found");if(q.entityId===$.agentId)return $.logger.debug(`[MessageService] Skipping message from self (${$.agentId})`),await this.emitRunEnded($,_,q,O,"self"),{didRespond:!1,responseContent:null,responseMessages:[],state:{},mode:"none"};$.logger.debug(`[MessageService] Processing message: ${cM(q.content.text||"",50)}...`),$.logger.debug("[MessageService] Saving message to memory and queueing embeddings");let J;if(q.id){let q$=await $.getMemoryById(q.id);if(q$)$.logger.debug("[MessageService] Memory already exists, skipping creation"),J=q$;else{let p=await $.createMemory(q,"messages");J={...q,id:p}}await $.queueEmbeddingGeneration(J,"high")}else{let q$=await $.createMemory(q,"messages");q.id=q$,J={...q,id:q$},await $.queueEmbeddingGeneration(J,"normal")}let T=await $.getParticipantUserState(q.roomId,$.agentId);if(YO($.getSetting("BOOTSTRAP_DEFLLMOFF"))&&T===null)return $.logger.debug("[MessageService] LLM is off by default"),await this.emitRunEnded($,_,q,O,"off"),{didRespond:!1,responseContent:null,responseMessages:[],state:{},mode:"none"};if(T==="MUTED"&&!q.content.text?.toLowerCase().includes($.character.name.toLowerCase()))return $.logger.debug(`[MessageService] Ignoring muted room ${q.roomId}`),await this.emitRunEnded($,_,q,O,"muted"),{didRespond:!1,responseContent:null,responseMessages:[],state:{},mode:"none"};let w=await $.composeState(q,["ANXIETY","ENTITIES","CHARACTER","RECENT_MESSAGES","ACTIONS"],!0),V=q.content.mentionContext,S=await $.getRoom(q.roomId);if(q.content.attachments&&q.content.attachments.length>0){if(q.content.attachments=await this.processAttachments($,q.content.attachments),q.id)await $.updateMemory({id:q.id,content:q.content})}let N=this.shouldRespond($,q,S??void 0,V);$.logger.debug(`[MessageService] Response decision: ${JSON.stringify(N)}`);let E=!0;if(N.skipEvaluation)$.logger.debug(`[MessageService] Skipping evaluation for ${$.character.name} (${N.reason})`),E=N.shouldRespond;else{let q$=U7({state:w,template:$.character.templates?.shouldRespondTemplate||nM});$.logger.debug(`[MessageService] Using LLM evaluation for ${$.character.name} (${N.reason})`);let p=await $.useModel(R6.TEXT_SMALL,{prompt:q$});$.logger.debug(`[MessageService] LLM evaluation result:
|
|
595
|
-
${p}`);let B=BK(p);$.logger.debug({responseObject:B},"[MessageService] Parsed evaluation result:");let Y=["IGNORE","NONE"];E=B?.action&&!Y.includes(B.action.toUpperCase())}let h=null,I=[],D="none";if(E){let q$=j.useMultiStep?await this.runMultiStepCore($,q,w,K,j):await this.runSingleShotCore($,q,w,j);if(h=q$.responseContent,I=q$.responseMessages,w=q$.state,D=q$.mode,z.get(q.roomId)!==P)return $.logger.info(`Response discarded - newer message being processed for agent: ${$.agentId}, room: ${q.roomId}`),{didRespond:!1,responseContent:null,responseMessages:[],state:w,mode:"none"};if(h&&q.id)h.inReplyTo=Q8($,q.id);if(h?.providers?.length&&h.providers.length>0)w=await $.composeState(q,h.providers||[]);if(h){if(D==="simple"){if(h.providers&&h.providers.length>0)$.logger.debug({providers:h.providers},"[MessageService] Simple response used providers");if(K)await K(h)}else if(D==="actions")await $.processActions(q,I,w,async(B)=>{if($.logger.debug({content:B},"action callback"),h.actionCallbacks=B,K)return K(B);return[]})}}else{$.logger.debug("[MessageService] Agent decided not to respond (shouldRespond is false).");let q$=z.get(q.roomId),p=YO($.getSetting("BOOTSTRAP_KEEP_RESP"));if(q$!==P&&!p)return $.logger.info(`Ignore response discarded - newer message being processed for agent: ${$.agentId}, room: ${q.roomId}`),await this.emitRunEnded($,_,q,O,"replaced"),{didRespond:!1,responseContent:null,responseMessages:[],state:w,mode:"none"};if(!q.id)return $.logger.error("[MessageService] Message ID is missing, cannot create ignore response."),await this.emitRunEnded($,_,q,O,"noMessageId"),{didRespond:!1,responseContent:null,responseMessages:[],state:w,mode:"none"};let B={thought:"Agent decided not to respond to this message.",actions:["IGNORE"],simple:!0,inReplyTo:Q8($,q.id)};if(K)await K(B);let Y={id:Q7(hq()),entityId:$.agentId,agentId:$.agentId,content:B,roomId:q.roomId,createdAt:Date.now()};await $.createMemory(Y,"messages"),$.logger.debug("[MessageService] Saved ignore response to memory",`memoryId: ${Y.id}`)}if(z.delete(q.roomId),z.size===0)F7.delete($.agentId);await $.evaluate(q,w,E,async(q$)=>{if($.logger.debug({content:q$},"evaluate callback"),h)h.evalCallbacks=q$;if(K)return K(q$);return[]},I);let L="noname";if(q.metadata&&"entityName"in q.metadata)L=q.metadata.entityName;let g=q.content?.channelType==="DM",y=L;if(!g){let q$=await $.getRoomsByIds([q.roomId]);if(q$?.length){let p=q$[0];if(p.name)y=p.name;if(p.worldId){let B=await $.getWorld(p.worldId);if(B)y=B.name+"-"+y}}}let c=new Date,n=w.data?.providers?.ACTIONS?.data?.actionsData?.map((q$)=>q$.name)||[-1],e={at:c.toString(),timestamp:parseInt(""+c.getTime()/1000),messageId:q.id,userEntityId:q.entityId,input:q.content.text,thought:h?.thought,simple:h?.simple,availableActions:n,actions:h?.actions,providers:h?.providers,irt:h?.inReplyTo,output:h?.text,entityName:L,source:q.content.source,channelType:q.content.channelType,roomName:y};return await $.emitEvent("RUN_ENDED",{runtime:$,runId:_,messageId:q.id,roomId:q.roomId,entityId:q.entityId,startTime:O,status:"completed",endTime:Date.now(),duration:Date.now()-O,source:"messageHandler",entityName:L,responseContent:h,metadata:e}),{didRespond:E,responseContent:h,responseMessages:I,state:w,mode:D}}catch(z){throw console.error("error is",z),await $.emitEvent("RUN_ENDED",{runtime:$,runId:_,messageId:q.id,roomId:q.roomId,entityId:q.entityId,startTime:O,status:"error",endTime:Date.now(),duration:Date.now()-O,error:z.message,source:"messageHandler"}),z}}shouldRespond($,q,K,P){if(!K)return{shouldRespond:!1,skipEvaluation:!0,reason:"no room context"};function _(N){if(!N||typeof N!=="string")return[];return N.trim().replace(/^\[|\]$/g,"").split(",").map((h)=>h.trim()).filter(Boolean)}let O=["DM","VOICE_DM","SELF","API"],j=["client_chat"],z=_($.getSetting("ALWAYS_RESPOND_CHANNELS")||$.getSetting("SHOULD_RESPOND_BYPASS_TYPES")),J=_($.getSetting("ALWAYS_RESPOND_SOURCES")||$.getSetting("SHOULD_RESPOND_BYPASS_SOURCES")),T=new Set([...O.map((N)=>N.toString()),...z].map((N)=>N.trim().toLowerCase())),X=[...j,...J].map((N)=>N.trim().toLowerCase()),w=K.type?.toString().toLowerCase(),V=q.content.source?.toLowerCase()||"";if(T.has(w))return{shouldRespond:!0,skipEvaluation:!0,reason:`private channel: ${w}`};if(X.some((N)=>V.includes(N)))return{shouldRespond:!0,skipEvaluation:!0,reason:`whitelisted source: ${V}`};if(!!(P?.isMention||P?.isReply))return{shouldRespond:!0,skipEvaluation:!0,reason:`platform ${P?.isMention?"mention":"reply"}`};return{shouldRespond:!1,skipEvaluation:!1,reason:"needs LLM evaluation"}}async processAttachments($,q){if(!q||q.length===0)return[];$.logger.debug(`[MessageService] Processing ${q.length} attachment(s)`);let K=[];for(let P of q)try{let _={...P},O=/^(http|https):\/\//.test(P.url),j=O?P.url:dM(P.url);if(P.contentType==="image"&&!P.description){$.logger.debug(`[MessageService] Generating description for image: ${P.url}`);let z=j;if(!O){let J=await fetch(j);if(!J.ok)throw Error(`Failed to fetch image: ${J.statusText}`);let T=await J.arrayBuffer(),X=Buffer.from(T);z=`data:${J.headers.get("content-type")||"application/octet-stream"};base64,${X.toString("base64")}`}try{let J=await $.useModel(R6.IMAGE_DESCRIPTION,{prompt:BM,imageUrl:z});if(typeof J==="string"){let T=BK(J);if(T&&(T.description||T.text))_.description=T.description||"",_.title=T.title||"Image",_.text=T.text||T.description||"",$.logger.debug(`[MessageService] Generated description: ${_.description?.substring(0,100)}...`);else{let X=J,w=X.match(/<title>([^<]+)<\/title>/),V=X.match(/<description>([^<]+)<\/description>/),S=X.match(/<text>([^<]+)<\/text>/);if(w||V||S)_.title=w?.[1]||"Image",_.description=V?.[1]||"",_.text=S?.[1]||V?.[1]||"",$.logger.debug(`[MessageService] Used fallback XML parsing - description: ${_.description?.substring(0,100)}...`);else $.logger.warn("[MessageService] Failed to parse XML response for image description")}}else if(J&&typeof J==="object"&&"description"in J)_.description=J.description,_.title=J.title||"Image",_.text=J.description,$.logger.debug(`[MessageService] Generated description: ${_.description?.substring(0,100)}...`);else $.logger.warn("[MessageService] Unexpected response format for image description")}catch(J){$.logger.error({error:J},"[MessageService] Error generating image description:")}}else if(P.contentType==="document"&&!P.text){let z=await fetch(j);if(!z.ok)throw Error(`Failed to fetch document: ${z.statusText}`);let J=z.headers.get("content-type")||"";if(J.startsWith("text/plain")){$.logger.debug(`[MessageService] Processing plain text document: ${P.url}`);let X=await z.text();_.text=X,_.title=_.title||"Text File",$.logger.debug(`[MessageService] Extracted text content (first 100 chars): ${_.text?.substring(0,100)}...`)}else $.logger.warn(`[MessageService] Skipping non-plain-text document: ${J}`)}K.push(_)}catch(_){$.logger.error({error:_,attachmentUrl:P.url},`[MessageService] Failed to process attachment ${P.url}:`),K.push(P)}return K}async runSingleShotCore($,q,K,P){if(K=await $.composeState(q,["ACTIONS"]),!K.values?.actionNames)$.logger.warn("actionNames data missing from state, even though it was requested");let _=U7({state:K,template:$.character.templates?.messageHandlerTemplate||iM}),O=null,j=0;while(j<P.maxRetries&&(!O?.thought||!O?.actions)){let T=await $.useModel(R6.TEXT_LARGE,{prompt:_});$.logger.debug({response:T},"[MessageService] *** Raw LLM Response ***");let X=BK(T);if($.logger.debug({parsedXml:X},"[MessageService] *** Parsed XML Content ***"),X)O={...X,thought:X.thought||"",actions:X.actions||["IGNORE"],providers:X.providers||[],text:X.text||"",simple:X.simple||!1};else O=null;if(j++,!O?.thought||!O?.actions)$.logger.warn({response:T,parsedXml:X,responseContent:O},"[MessageService] *** Missing required fields (thought or actions), retrying... ***")}if(!O)return{responseContent:null,responseMessages:[],state:K,mode:"none"};if(O.actions&&O.actions.length>1){let T=(w)=>typeof w==="string"&&w.toUpperCase()==="IGNORE";if(O.actions.some(T))if(!O.text||O.text.trim()==="")O.actions=["IGNORE"];else{let w=O.actions.filter((V)=>!T(V));O.actions=w.length?w:["REPLY"]}}let z=O.actions?.length===1&&typeof O.actions[0]==="string"&&O.actions[0].toUpperCase()==="REPLY"&&(!O.providers||O.providers.length===0);O.simple=z;let J=[{id:Q7(hq()),entityId:$.agentId,agentId:$.agentId,content:O,roomId:q.roomId,createdAt:Date.now()}];return{responseContent:O,responseMessages:J,state:K,mode:z&&O.text?"simple":"actions"}}async runMultiStepCore($,q,K,P,_){let O=[],j=K,z=0;while(z<_.maxMultiStepIterations){z++,$.logger.debug(`[MultiStep] Starting iteration ${z}/${_.maxMultiStepIterations}`),j=await $.composeState(q,["RECENT_MESSAGES","ACTION_STATE"]),j.data.actionResults=O;let S=U7({state:j,template:$.character.templates?.multiStepDecisionTemplate||tM}),N=await $.useModel(R6.TEXT_LARGE,{prompt:S}),E=BK(N);if(!E){$.logger.warn(`[MultiStep] Failed to parse step result at iteration ${z}`),O.push({data:{actionName:"parse_error"},success:!1,error:"Failed to parse step result"});break}let{thought:h,providers:I=[],action:D,isFinish:L}=E;if(L==="true"||L===!0){if($.logger.info(`[MultiStep] Task marked as complete at iteration ${z}`),P)await P({text:"",thought:h??""});break}if((!I||I.length===0)&&!D){$.logger.warn(`[MultiStep] No providers or action specified at iteration ${z}, forcing completion`);break}try{for(let g of I){let y=$.providers.find((e)=>e.name===g);if(!y){$.logger.warn(`[MultiStep] Provider not found: ${g}`),O.push({data:{actionName:g},success:!1,error:`Provider not found: ${g}`});continue}let c=await y.get($,q,K);if(!c){$.logger.warn(`[MultiStep] Provider returned no result: ${g}`),O.push({data:{actionName:g},success:!1,error:"Provider returned no result"});continue}let n=!!c.text;if(O.push({data:{actionName:g},success:n,text:n?c.text:void 0,error:n?void 0:"Provider returned no result"}),P)await P({text:`\uD83D\uDD0E Provider executed: ${g}`,actions:[g],thought:h??""})}if(D){let g={text:`\uD83D\uDD0E Executing action: ${D}`,actions:[D],thought:h??""};await $.processActions(q,[{id:hq(),entityId:$.agentId,roomId:q.roomId,createdAt:Date.now(),content:g}],K,async()=>{return[]});let c=$.stateCache?.get(`${q.id}_action_results`)?.values?.actionResults||[],n=c.length>0?c[0]:null,e=n?.success??!1;O.push({data:{actionName:D},success:e,text:n?.text,values:n?.values,error:e?void 0:n?.text})}}catch(g){$.logger.error({err:g},"[MultiStep] Error executing step"),O.push({data:{actionName:D||"unknown"},success:!1,error:g instanceof Error?g.message:String(g)})}}if(z>=_.maxMultiStepIterations)$.logger.warn(`[MultiStep] Reached maximum iterations (${_.maxMultiStepIterations}), forcing completion`);j=await $.composeState(q,["RECENT_MESSAGES","ACTION_STATE"]);let J=U7({state:j,template:$.character.templates?.multiStepSummaryTemplate||UM}),T=await $.useModel(R6.TEXT_LARGE,{prompt:J}),X=BK(T),w=null;if(X?.text)w={actions:["MULTI_STEP_SUMMARY"],text:X.text,thought:X.thought||"Final user-facing message after task completion.",simple:!0};let V=w?[{id:Q7(hq()),entityId:$.agentId,agentId:$.agentId,content:w,roomId:q.roomId,createdAt:Date.now()}]:[];return{responseContent:w,responseMessages:V,state:j,mode:w?"simple":"none"}}async emitRunEnded($,q,K,P,_){await $.emitEvent("RUN_ENDED",{runtime:$,runId:q,messageId:K.id,roomId:K.roomId,entityId:K.entityId,startTime:P,status:_,endTime:Date.now(),duration:Date.now()-P,source:"messageHandler"})}async deleteMessage($,q){try{if(!q.id){$.logger.error("[MessageService] Cannot delete memory: message ID is missing");return}$.logger.info("[MessageService] Deleting memory for message",q.id,"from room",q.roomId),await $.deleteMemory(q.id),$.logger.debug({messageId:q.id},"[MessageService] Successfully deleted memory for message")}catch(K){throw $.logger.error({error:K},"[MessageService] Error in deleteMessage:"),K}}async clearChannel($,q,K){try{$.logger.info(`[MessageService] Clearing message memories from channel ${K} -> room ${q}`);let P=await $.getMemoriesByRoomIds({tableName:"messages",roomIds:[q]});$.logger.info(`[MessageService] Found ${P.length} message memories to delete from channel ${K}`);let _=0;for(let O of P)if(O.id)try{await $.deleteMemory(O.id),_++}catch(j){$.logger.warn({error:j,memoryId:O.id},`[MessageService] Failed to delete message memory ${O.id}:`)}$.logger.info(`[MessageService] Successfully cleared ${_}/${P.length} message memories from channel ${K}`)}catch(P){throw $.logger.error({error:P},"[MessageService] Error in clearChannel:"),P}}}var SK=($)=>{switch($){case 97:case 101:case 105:case 111:case 117:case 121:return!0;default:return!1}},xn=($)=>{switch($){case 97:case 101:case 105:case 111:case 117:case 121:case 119:case 120:case 89:return!0;default:return!1}},cn=($)=>{switch($){case 99:case 100:case 101:case 103:case 104:case 107:case 109:case 110:case 114:case 116:return!0;default:return!1}},pn=($)=>{switch($){case 98:case 100:case 102:case 103:case 109:case 110:case 112:case 114:case 116:return!0;default:return!1}},QM=($,q)=>{return q>=2&&SK($[q-2])&&(q===2&&!SK($[q-1])||q>=3&&!SK($[q-3])&&!xn($[q-1]))},mn=($)=>{if($.length<3)return $;if($.length<=6)switch($){case"ski":return"ski";case"skies":return"sky";case"dying":return"die";case"lying":return"lie";case"tying":return"tie";case"idly":return"idl";case"gently":return"gentl";case"ugly":return"ugli";case"early":return"earli";case"only":return"onli";case"singly":return"singl";case"sky":case"news":case"howe":case"atlas":case"cosmos":case"bias":case"andes":return $}let q=$.charCodeAt(0)===39?1:0,K=$.length-q,P=Array(K),_=!1;for(let X=0;X<K;++X){let w=$.charCodeAt(X+q);if(w===121&&(X===0||SK(P[X-1]))){_=!0,P[X]=89;continue}P[X]=w}if(P[K-1]===39)--K;if(K>=2&&P[K-2]===39&&P[K-1]===115)K-=2;let O=0;while(O<K&&!SK(P[O]))++O;if(O<K)++O;let j=O;if(K>=5&&(P[0]===103&&P[1]===101&&P[2]===110&&P[3]===101&&P[4]===114||P[0]===97&&P[1]===114&&P[2]===115&&P[3]===101&&P[4]===110))j=5;else if(K>=6&&P[0]===99&&P[1]===111&&P[2]===109&&P[3]===109&&P[4]===117&&P[5]===110)j=6;else{while(j<K&&SK(P[j]))++j;if(j<K)++j}let z=j;while(z<K&&!SK(P[z]))++z;while(z<K&&SK(P[z]))++z;if(z<K)++z;if(K>=3){if(P[K-1]===115){if(K>=4&&P[K-2]===101&&P[K-3]===115&&P[K-4]===115)K-=2;else if(P[K-2]===101&&P[K-3]===105)K-=K>=5?2:1;else if(P[K-2]!==117&&P[K-2]!==115&&O<K-1)K-=1}else if(P[K-1]===100&&P[K-2]===101&&P[K-3]===105)K-=K>=5?2:1}if(K===6&&(P[0]===105&&P[1]===110&&P[2]===110&&P[3]===105&&P[4]===110&&P[5]===103||P[0]===111&&P[1]===117&&P[2]===116&&P[3]===105&&P[4]===110&&P[5]===103||P[0]===101&&P[1]===120&&P[2]===99&&P[3]===101&&P[4]===101&&P[5]===100)||K===7&&(P[0]===99&&P[1]===97&&P[2]===110&&P[3]===110&&P[4]===105&&P[5]===110&&P[6]===103||P[0]===104&&P[1]===101&&P[2]===114&&P[3]===114&&P[4]===105&&P[5]===110&&P[6]===103||P[0]===101&&P[1]===97&&P[2]===114&&P[3]===114&&P[4]===105&&P[5]===110&&P[6]===103||P[0]===112&&P[1]===114&&P[2]===111&&P[3]===99&&P[4]===101&&P[5]===101&&P[6]===100||P[0]===115&&P[1]===117&&P[2]===99&&P[3]===99&&P[4]===101&&P[5]===101&&P[6]===100)){let X="";for(let w=0;w<K;++w)X+=String.fromCharCode(P[w]);return X}let J=K>=2&&P[K-1]===121&&P[K-2]===108?K-2:K;if(J>=3)if(P[J-3]===101&&P[J-2]===101&&P[J-1]===100){if(J>=j+3)K=J-1}else{if(P[J-2]===101&&P[J-1]===100)J-=2;else if(P[J-3]===105&&P[J-2]===110&&P[J-1]===103)J-=3;else J=-1;if(J>=0&&O<=J){if(K=J,K>=2){if(P[K-1]===116&&P[K-2]===97||P[K-1]===108&&P[K-2]===98||P[K-1]===122&&P[K-2]===105)P[K]=101,++K;else if(P[K-2]===P[K-1]&&pn(P[K-1]))--K;else if(j>=K&&QM(P,K))P[K]=101,++K}}}if(K>=3&&(P[K-1]===89||P[K-1]===121)&&!SK(P[K-2]))P[K-1]=105;if(K>=j+2)switch(P[K-1]){case 108:if(K>=j+6&&P[K-2]===97&&P[K-3]===110&&P[K-4]===111&&P[K-5]===105&&P[K-6]===116)if(K>=7&&P[K-7]===97){if(K>=j+7)K-=4,P[K-1]=101}else K-=2;break;case 110:if(K>=j+5&&P[K-2]===111&&P[K-3]===105&&P[K-4]===116&&P[K-5]===97)if(K>=7&&P[K-6]===122&&P[K-7]===105){if(K>=j+7)K-=4,P[K-1]=101}else K-=2,P[K-1]=101;break;case 114:if(K>=j+4){if(P[K-2]===101){if(P[K-3]===122&&P[K-4]===105)--K}else if(P[K-2]===111){if(P[K-3]===116&&P[K-4]===97)--K,P[K-1]=101}}break;case 115:if(K>=j+7&&P[K-2]===115&&P[K-3]===101&&P[K-4]===110&&(P[K-5]===108&&P[K-6]===117&&P[K-7]===102||P[K-5]===115&&P[K-6]===117&&P[K-7]===111||P[K-5]===101&&P[K-6]===118&&P[K-7]===105))K-=4;break;case 109:if(K>=j+5&&P[K-2]===115&&P[K-3]===105&&P[K-4]===108&&P[K-5]===97)K-=3;break;case 105:if(P[K-2]===99){if(K>=j+4&&(P[K-4]===101||P[K-4]===97)&&P[K-3]===110)P[K-1]=101}else if(P[K-2]===103){if(K>=j+3&&K>=4&&P[K-2]===103&&P[K-3]===111&&P[K-4]===108)--K}else if(P[K-2]===116){if(K>=j+5&&P[K-3]===105){if(P[K-4]===108){if(K>=6&&P[K-5]===105&&P[K-6]===98){if(K>=j+6)K-=3,P[K-2]=108,P[K-1]=101}else if(P[K-4]===108&&P[K-5]===97)K-=3}else if(P[K-4]===118&&P[K-5]===105)K-=2,P[K-1]=101}}else if(P[K-2]===108&&K>=3){if(P[K-3]===98){if(K>=4&&P[K-4]===97){if(K>=j+4)P[K-1]=101}else if(K>=j+3)P[K-1]=101}else if(P[K-3]===108){if(K>=5&&P[K-4]===117&&P[K-5]===102){if(K>=j+5)K-=2}else if(K>=j+4&&P[K-4]===97)K-=2}else if(P[K-3]===115){if(K>=6&&P[K-4]===115&&P[K-5]===101&&P[K-6]===108){if(K>=j+6)K-=2}else if(K>=j+5&&P[K-4]===117&&P[K-5]===111)K-=2}else if(K>=5&&P[K-3]===116&&P[K-4]===110&&P[K-5]===101){if(K>=j+5)K-=2}else if(cn(P[K-3]))K-=2}}if(K>=j+3)switch(P[K-1]){case 108:if(P[K-3]===99){if(K>=j+4&&P[K-4]===105&&P[K-2]===97)K-=2}else if(P[K-3]===102){if(P[K-2]===117)K-=3}else if(P[K-3]===110){if(K>=j+6&&P[K-2]===97&&P[K-4]===111&&P[K-5]===105&&P[K-6]===116)if(K>=7&&P[K-7]===97){if(K>=j+7)K-=4,P[K-1]=101}else K-=2}break;case 101:if(P[K-2]===122){if(K>=j+5&&P[K-3]===105&&P[K-4]===108&&P[K-5]===97)K-=3}else if(P[K-2]===116){if(K>=j+5&&P[K-3]===97&&P[K-4]===99&&P[K-5]===105)K-=3}else if(P[K-2]===118){if(K>=z+5&&P[K-3]===105&&P[K-4]===116&&P[K-5]===97)K-=5}break;case 105:if(K>=j+5&&P[K-2]===116&&P[K-3]===105&&P[K-4]===99&&P[K-5]===105)K-=3;break;case 115:if(K>=j+4&&P[K-2]===115&&P[K-3]===101&&P[K-4]===110)K-=4}if(K>=z+2)switch(P[K-1]){case 110:if(K>=z+3&&P[K-2]===111&&P[K-3]===105&&(P[K-4]===115||P[K-4]===116))K-=3;break;case 108:if(P[K-2]===97)K-=2;break;case 114:if(P[K-2]===101)K-=2;break;case 99:if(P[K-2]===105)K-=2;break;case 109:if(K>=z+3&&P[K-2]===115&&P[K-3]===105)K-=3;break;case 105:if(K>=z+3&&P[K-2]===116&&P[K-3]===105)K-=3;break;case 115:if(K>=z+3&&P[K-2]===117&&P[K-3]===111)K-=3;break;case 116:if(K>=z+3&&P[K-2]===110){if(P[K-3]===97)K-=3;else if(P[K-3]===101)if(K>=4&&P[K-4]===109){if(K>=5&&P[K-5]===101){if(K>=z+5)K-=5}else if(K>=z+4)K-=4}else K-=3}break;case 101:if(P[K-2]===99){if(K>=z+4&&P[K-3]===110&&(P[K-4]===97||P[K-4]===101))K-=4}else if(P[K-2]===108){if(K>=z+4&&P[K-3]===98&&(P[K-4]===97||P[K-4]===105))K-=4}else if(P[K-2]===116){if(K>=z+3&&P[K-3]===97)K-=3}else if(K>=z+3&&(P[K-2]===118||P[K-2]===122)&&P[K-3]===105)K-=3}if(K>=j+1&&(K>=z+1&&P[K-1]===108&&P[K-2]===108||P[K-1]===101&&(K>=z+1||!QM(P,K-1))))--K;let T="";if(_)for(let X=0;X<K;++X)T+=String.fromCharCode(P[X]===89?121:P[X]);else for(let X=0;X<K;++X)T+=String.fromCharCode(P[X]);return T},dn={k1:1.2,b:0.75,minLength:2,stopWords:new Set(["a","an","and","are","as","at","be","by","for","from","has","he","in","is","it","its","of","on","that","the","to","was","were","will","with"]),stemming:!1,stemWords:($)=>$};class FH{stopWords;minLength;stemming;stemmingRules;static DEFAULT_OPTIONS={stopWords:new Set,minLength:2,stemming:!1,stemmingRules:[]};constructor($={}){let q={...FH.DEFAULT_OPTIONS,...$};this.stopWords=q.stopWords,this.minLength=q.minLength,this.stemming=q.stemming,this.stemmingRules=q.stemmingRules.map((K)=>({...K,pattern:typeof K.pattern==="string"?new RegExp(K.pattern):K.pattern}))}tokenize($,q=!1){if(!$)throw Error("Input text cannot be null or empty");let K=Date.now(),P=$.split(/\s+/).filter((z)=>z.length>0),O=this.cleanText($).split(/\s+/).filter((z)=>this.isValidToken(z)).map((z)=>this.stemming?this.stemWord(z):z),j=q?{originalWordCount:P.length,stopWordsRemoved:P.length-O.length,stemmedWords:this.stemming?O.length:0,processingTimeMs:Date.now()-K}:{originalWordCount:0,stopWordsRemoved:0,stemmedWords:0,processingTimeMs:0};return{tokens:O,stats:j}}cleanText($){return $.toLowerCase().normalize("NFKD").replace(/[\u0000-\u001F\u007F-\u009F\u200B-\u200D\uFEFF]/g,"").replace(/[\u0300-\u036f]/g,"").replace(/[\p{Emoji_Presentation}\p{Extended_Pictographic}]/gu,"").replace(/[™®©℠‼]/g,"").replace(/[\p{P}]/gu," ").replace(/[^a-z0-9\u3040-\u30FF\u3400-\u4DBF\u4E00-\u9FFF\uAC00-\uD7AF\s]/gu," ").replace(/\s+/g," ").trim()}isValidToken($){let q=/^\d+$/.test($);return($.length>=this.minLength||q)&&!this.stopWords.has($)}stemWord($){if($.length<3)return $;let q=!1,K=$;for(let P of this.stemmingRules){let _=K.match(P.pattern);if(_){if(!P.minMeasure||this.measure(K.substring(0,_.index))>=P.minMeasure){if(typeof P.replacement==="string")K=K.replace(P.pattern,P.replacement);else K=K.replace(P.pattern,(...O)=>P.replacement(...O));q=!0}}}if(q&&K!==$)return K;return mn(K)}isConsonant($,q){let K=$[q];if("aeiou".includes(K))return!1;return K!=="y"||(q===0?!0:!this.isConsonant($,q-1))}measure($){let q=0,K=!1;for(let P=0;P<$.length;P++)if(this.isConsonant($,P)){if(K)q++,K=!1}else K=!0;return q}}class QH{termFrequencySaturation;lengthNormalizationFactor;tokenizer;documentLengths;averageDocLength;termToIndex;documentFrequency;termFrequencies;fieldBoosts;documents;constructor($,q={}){let K={...dn,...q};if(this.termFrequencySaturation=K.k1,this.lengthNormalizationFactor=K.b,this.tokenizer=new FH(K),this.fieldBoosts=K.fieldBoosts||{},this.documents=[],this.documentLengths=new Uint32Array(0),this.termToIndex=new Map,this.documentFrequency=new Uint32Array(0),this.averageDocLength=0,this.termFrequencies=new Map,$&&$.length>0){this.documents=[...$];let{documentLengths:P,termToIndex:_,documentFrequency:O,averageDocLength:j,termFrequencies:z}=this.processDocuments($);this.documentLengths=P,this.termToIndex=_,this.documentFrequency=O,this.averageDocLength=j,this.termFrequencies=z}}processDocuments($){let q=$.length,K=new Uint32Array(q),P=new Map,_=new Map,O=new Map,j=0,z=0;$.forEach((T,X)=>{let w=0,V=new Map;Object.entries(T).forEach(([S,N])=>{if(typeof N!=="string")return;let E=this.fieldBoosts[S]||1,{tokens:h}=this.tokenizer.tokenize(N),I=h.length*E;w+=I,h.forEach((D)=>{if(!P.has(D))P.set(D,z++);let L=P.get(D);if(!_.has(D))_.set(D,new Set);_.get(D).add(X);let g=V.get(L)||0;V.set(L,g+E)})}),K[X]=w,j+=w,V.forEach((S,N)=>{if(!O.has(N))O.set(N,new Map);O.get(N).set(X,S)})});let J=new Uint32Array(P.size);return _.forEach((T,X)=>{let w=P.get(X);J[w]=T.size}),{documentLengths:K,termToIndex:P,documentFrequency:J,averageDocLength:q>0?j/q:0,termFrequencies:O}}recalculateAverageLength(){if(this.documentLengths.length===0){this.averageDocLength=0;return}let $=this.documentLengths.reduce((q,K)=>q+K,0);this.averageDocLength=$/this.documentLengths.length}search($,q=10){let{tokens:K}=this.tokenizer.tokenize($),P=new Float32Array(this.documentLengths.length).fill(0);return K.forEach((_)=>{let O=this.termToIndex.get(_);if(O===void 0)return;let j=this.calculateIdf(O);if(j<=0)return;let z=this.termFrequencies.get(O);if(!z)return;z.forEach((J,T)=>{let X=this.documentLengths[T],w=J*(this.termFrequencySaturation+1),V=J+this.termFrequencySaturation*(1-this.lengthNormalizationFactor+this.lengthNormalizationFactor*X/this.averageDocLength);P[T]+=j*(w/V)})}),Array.from({length:P.length},(_,O)=>({index:O,score:P[O]})).filter((_)=>_.score>0).sort((_,O)=>O.score-_.score).slice(0,q)}searchPhrase($,q=10){let{tokens:K}=this.tokenizer.tokenize($);if(K.length===0)return[];let P=null;for(let O of K){let j=this.termToIndex.get(O);if(j===void 0)return[];let z=this.termFrequencies.get(j)?.keys();if(!z)return[];let J=new Set(z);if(P===null)P=J;else P=new Set([...P].filter((T)=>J.has(T)));if(P.size===0)return[]}if(P===null||P.size===0)return[];let _=new Map;return P.forEach((O)=>{let j=this.getDocument(O),z=!1;Object.entries(j).forEach(([J,T])=>{if(typeof T!=="string"||z)return;let X=this.fieldBoosts[J]||1,{tokens:w}=this.tokenizer.tokenize(T);for(let V=0;V<=w.length-K.length;V++){let S=!0;for(let N=0;N<K.length;N++)if(w[V+N]!==K[N]){S=!1;break}if(S){let N=this.calculatePhraseScore(K,O)*X;_.set(O,(_.get(O)||0)+N),z=!0;break}}})}),Array.from(_.entries()).map(([O,j])=>({index:O,score:j})).sort((O,j)=>j.score-O.score).slice(0,q)}calculatePhraseScore($,q){return $.reduce((K,P)=>{let _=this.termToIndex.get(P);if(_===void 0)return K;let O=this.calculateIdf(_),j=this.termFrequencies.get(_)?.get(q)||0,z=this.documentLengths[q],J=j*(this.termFrequencySaturation+1),T=j+this.termFrequencySaturation*(1-this.lengthNormalizationFactor+this.lengthNormalizationFactor*z/this.averageDocLength);return K+O*(J/T)},0)}async addDocument($){if(!$)throw Error("Document cannot be null");let q=this.documentLengths.length;this.documents.push($);let K=new Uint32Array(q+1);K.set(this.documentLengths,0),this.documentLengths=K;let P=0,_=new Map;Object.entries($).forEach(([O,j])=>{if(typeof j!=="string")return;let z=this.fieldBoosts[O]||1,{tokens:J}=this.tokenizer.tokenize(j);P+=J.length*z,J.forEach((T)=>{let X;if(!this.termToIndex.has(T)){if(X=this.termToIndex.size,this.termToIndex.set(T,X),this.documentFrequency.length<=X){let V=this.documentFrequency,S=Math.max(X+1,V.length*2||1);this.documentFrequency=new Uint32Array(S),this.documentFrequency.set(V,0)}this.documentFrequency[X]=0}else X=this.termToIndex.get(T);let w=_.get(X)||0;_.set(X,w+z)})}),this.documentLengths[q]=P,_.forEach((O,j)=>{if(!this.termFrequencies.has(j))this.termFrequencies.set(j,new Map);if(this.termFrequencies.get(j).set(q,O),j<this.documentFrequency.length)this.documentFrequency[j]++;else console.error(`Error: termIndexVal ${j} is out of bounds for documentFrequency (length ${this.documentFrequency.length}). This indicates an issue with array resizing or term indexing.`)}),this.recalculateAverageLength()}calculateIdf($){if($<0||$>=this.documentFrequency.length)return 0;let q=this.documentFrequency[$];if(q<=0||q>this.documentLengths.length)return 0;let P=this.documentLengths.length-q+0.5,_=q+0.5;return Math.log(1+P/_)}getTermFrequency($,q){return this.termFrequencies.get($)?.get(q)||0}getDocument($){if($<0||$>=this.documents.length)throw Error(`Document index ${$} out of bounds (0-${this.documents.length-1})`);return this.documents[$]}clearDocuments(){this.documents=[],this.documentLengths=new Uint32Array(0),this.termToIndex.clear(),this.documentFrequency=new Uint32Array(0),this.averageDocLength=0,this.termFrequencies.clear()}getDocumentCount(){return this.documents.length}async addDocuments($){return Promise.all($.map((q)=>this.addDocument(q)))}}var ln={};class on{permits;waiting=[];constructor($){this.permits=$}async acquire(){if(this.permits>0)return this.permits-=1,Promise.resolve();return new Promise(($)=>{this.waiting.push($)})}release(){this.permits+=1;let $=this.waiting.shift();if($&&this.permits>0)this.permits-=1,$()}}class aH{#$=32;agentId;character;adapter;actions=[];evaluators=[];providers=[];plugins=[];events={};stateCache=new Map;fetch=fetch;services=new Map;serviceTypes=new Map;models=new Map;routes=[];taskWorkers=new Map;sendHandlers=new Map;eventHandlers=new Map;allAvailablePlugins=new Map;characterPlugins=[];logger;settings;servicePromiseHandlers=new Map;servicePromises=new Map;serviceRegistrationStatus=new Map;initPromise;initResolver;initRejecter;migratedPlugins=new Set;currentRunId;currentActionContext;maxWorkingMemoryEntries=50;messageService=null;constructor($){if(this.agentId=$.character?.id??$?.agentId??vO($.character?.name??hq()),this.character=$.character,this.initPromise=new Promise((q,K)=>{this.initResolver=q,this.initRejecter=K}),this.logger=t7({namespace:this.character?.name}),this.#$=$.conversationLength??this.#$,$.adapter)this.registerDatabaseAdapter($.adapter);if(this.fetch=$.fetch??this.fetch,this.settings=$.settings??ln,this.plugins=[],this.characterPlugins=$?.plugins??[],$.allAvailablePlugins){for(let q of $.allAvailablePlugins)if(q?.name)this.allAvailablePlugins.set(q.name,q)}if(this.logger.debug(`Success: Agent ID: ${this.agentId}`),this.currentRunId=void 0,$.settings?.MAX_WORKING_MEMORY_ENTRIES)this.maxWorkingMemoryEntries=parseInt($.settings.MAX_WORKING_MEMORY_ENTRIES,10)||50;else this.maxWorkingMemoryEntries=qM("MAX_WORKING_MEMORY_ENTRIES",50)}createRunId(){return hq()}startRun(){return this.currentRunId=this.createRunId(),this.currentRunId}endRun(){this.currentRunId=void 0}getCurrentRunId(){if(!this.currentRunId)this.currentRunId=this.createRunId();return this.currentRunId}async registerPlugin($){if(!$?.name)throw this.logger.error("*** registerPlugin: Plugin or plugin name is undefined"),Error("*** registerPlugin: Plugin or plugin name is undefined");if(this.plugins.find((K)=>K.name===$.name)){this.logger.warn(`${this.character.name}(${this.agentId}) - Plugin ${$.name} is already registered. Skipping re-registration.`);return}if(this.plugins.push($),this.logger.debug(`Success: Plugin ${$.name} added to active plugins for ${this.character.name}(${this.agentId}).`),$.init)try{await $.init($.config||{},this),this.logger.debug(`Success: Plugin ${$.name} initialized successfully`)}catch(K){let P=K instanceof Error?K.message:String(K);if(P.includes("API key")||P.includes("environment variables")||P.includes("Invalid plugin configuration"))console.warn(`Plugin ${$.name} requires configuration. ${P}`),console.warn("Please check your environment variables and ensure all required API keys are set."),console.warn("You can set these in your .env file.");else throw K}if($.adapter)this.logger.debug(`Registering database adapter for plugin ${$.name}`),this.registerDatabaseAdapter($.adapter);if($.actions)for(let K of $.actions)this.registerAction(K);if($.evaluators)for(let K of $.evaluators)this.registerEvaluator(K);if($.providers)for(let K of $.providers)this.registerProvider(K);if($.models)for(let[K,P]of Object.entries($.models))this.registerModel(K,P,$.name,$?.priority);if($.routes)for(let K of $.routes){let P=K.path.startsWith("/")?K.path:`/${K.path}`;this.routes.push({...K,path:"/"+$.name+P})}if($.events)for(let[K,P]of Object.entries($.events))for(let _ of P)this.registerEvent(K,_);if($.services)for(let K of $.services){if(!this.servicePromises.has(K.serviceType))this._createServiceResolver(K.serviceType);this.serviceRegistrationStatus.set(K.serviceType,"pending"),this.registerService(K).catch((P)=>{this.logger.error(`Service registration failed for ${K.serviceType}: ${P instanceof Error?P.message:String(P)}`);let _=this.servicePromiseHandlers.get(K.serviceType);if(_){let O=Error(`Service ${K.serviceType} failed to register: ${P instanceof Error?P.message:String(P)}`);_.reject(O),this.servicePromiseHandlers.delete(K.serviceType),this.servicePromises.delete(K.serviceType)}this.serviceRegistrationStatus.set(K.serviceType,"failed")})}}getAllServices(){return this.services}async stop(){this.logger.debug(`runtime::stop - character ${this.character.name}`);for(let[$,q]of this.services){this.logger.debug(`runtime::stop - requesting service stop for ${$}`);for(let K of q)await K.stop()}}async initialize($){try{let q=[],K=this.characterPlugins;for(let T of K)if(T)q.push(this.registerPlugin(T));if(await Promise.all(q),!this.adapter)throw this.logger.error("Database adapter not initialized. Make sure @elizaos/plugin-sql is included in your plugins."),Error("Database adapter not initialized. The SQL plugin (@elizaos/plugin-sql) is required for agent initialization. Please ensure it is included in your character configuration.");if(!await this.adapter.isReady())await this.adapter.init();if(this.messageService=new UH,$?.skipMigrations??!1)this.logger.info("Skipping plugin migrations (skipMigrations=true)");else this.logger.info("Running plugin migrations..."),await this.runPluginMigrations(),this.logger.info("Plugin migrations completed.");let _=await this.ensureAgentExists({...this.character,id:this.agentId});if(!_){let T=`Agent ${this.agentId} does not exist in database after ensureAgentExists call`;throw Error(T)}if(_.settings){this.character.settings={..._.settings,...this.character.settings};let T=_.settings.secrets&&typeof _.settings.secrets==="object"?_.settings.secrets:{},X=this.character.settings.secrets&&typeof this.character.settings.secrets==="object"?this.character.settings.secrets:{},w=this.character.secrets&&typeof this.character.secrets==="object"?this.character.secrets:{},V={...T,...w,...X};if(Object.keys(V).length>0)this.character.secrets=V,this.character.settings.secrets=V}let O=await this.getEntityById(this.agentId);if(!O){if(!await this.createEntity({id:this.agentId,names:[this.character.name],metadata:{},agentId:_.id})){let X=`Failed to create entity for agent ${this.agentId}`;throw Error(X)}if(O=await this.getEntityById(this.agentId),!O)throw Error(`Agent entity not found for ${this.agentId}`);this.logger.debug(`Success: Agent entity created successfully for ${this.character.name}`)}if(!await this.getRoom(this.agentId))await this.createRoom({id:this.agentId,name:this.character.name,source:"elizaos",type:"SELF",channelId:this.agentId,serverId:this.agentId,worldId:this.agentId});if(!(await this.adapter.getParticipantsForRoom(this.agentId)).includes(this.agentId)){if(!await this.addParticipant(this.agentId,this.agentId)){let X=`Failed to add agent ${this.agentId} as participant to its own room`;throw Error(X)}this.logger.debug(`Agent ${this.character.name} linked to its own room successfully`)}if(!this.getModel(R6.TEXT_EMBEDDING))this.logger.warn(`[AgentRuntime][${this.character.name}] No TEXT_EMBEDDING model registered. Skipping embedding dimension setup.`);else await this.ensureEmbeddingDimension();if(this.initResolver)this.initResolver(),this.initResolver=void 0}catch(q){let K=q instanceof Error?q.message:String(q);if(this.logger.error(`Runtime initialization failed: ${K}`),this.initRejecter)this.initRejecter(q),this.initRejecter=void 0;for(let[P,_]of this.servicePromises){let O=this.servicePromiseHandlers.get(P);if(O){let j=Error(`Service ${P} failed to start due to runtime initialization failure: ${K}`);O.reject(j),this.servicePromiseHandlers.delete(P),this.servicePromises.delete(P),this.serviceRegistrationStatus.set(P,"failed")}}throw q}}async runPluginMigrations(){if(!this.adapter){this.logger.warn("Database adapter not found, skipping plugin migrations.");return}if(typeof this.adapter.runPluginMigrations!=="function"){this.logger.warn("Database adapter does not support plugin migrations.");return}let $=this.plugins.filter((q)=>q.schema).map((q)=>({name:q.name,schema:q.schema}));if($.length===0){this.logger.info("No plugins with schemas found, skipping migrations.");return}this.logger.info(`Found ${$.length} plugins with schemas to migrate.`);try{let P={verbose:!0,force:process.env.ELIZA_ALLOW_DESTRUCTIVE_MIGRATIONS==="true",dryRun:!1};await this.adapter.runPluginMigrations($,P),this.logger.info("Plugin migrations completed successfully.")}catch(q){throw this.logger.error(q instanceof Error?q:Error(String(q)),"Failed to run plugin migrations"),q}}async getConnection(){if(!this.adapter)throw Error("Database adapter not registered");return this.adapter.getConnection()}setSetting($,q,K=!1){if(K){if(!this.character.secrets)this.character.secrets={};this.character.secrets[$]=q}else{if(!this.character.settings)this.character.settings={};this.character.settings[$]=q}}getSetting($){let q=this.character.secrets?.[$]||this.character.settings?.[$]||typeof this.character.settings==="object"&&this.character.settings!==null&&"secrets"in this.character.settings&&this.character.settings.secrets?.[$]||this.settings[$],K=zO(q,I_());if(K==="true")return!0;if(K==="false")return!1;return K||null}getConversationLength(){return this.#$}registerDatabaseAdapter($){if(this.adapter)this.logger.warn("Database adapter already registered. Additional adapters will be ignored. This may lead to unexpected behavior.");else this.adapter=$,this.logger.debug("Success: Database adapter registered successfully.")}registerProvider($){this.providers.push($),this.logger.debug(`Success: Provider ${$.name} registered successfully.`)}registerAction($){if(this.actions.find((q)=>q.name===$.name))this.logger.warn(`${this.character.name}(${this.agentId}) - Action ${$.name} already exists. Skipping registration.`);else try{this.actions.push($),this.logger.success(`${this.character.name}(${this.agentId}) - Action ${$.name} registered successfully.`)}catch(q){console.error("Error registering action",q)}}registerEvaluator($){this.evaluators.push($)}updateActionPlan($,q){return{...$,...q}}updateActionStep($,q,K){if(!$.steps||q<0||q>=$.steps.length)return this.logger.warn(`Invalid step index: ${q} for plan with ${$.steps?.length||0} steps`),$;return{...$,steps:$.steps.map((P,_)=>_===q?{...P,...K}:P)}}async processActions($,q,K,P){let _=[];for(let w of q)if(w.content?.actions&&w.content.actions.length>0)_.push(...w.content.actions);let O=_.length>1,j=this.getCurrentRunId(),z=this.createRunId(),J=null,T=q[0]?.content?.thought||`Executing ${_.length} actions: ${_.join(", ")}`;if(O)J={runId:z,totalSteps:_.length,currentStep:0,steps:_.map((w)=>({action:w,status:"pending"})),thought:T,startTime:Date.now()};let X=0;for(let w of q){let E=function(h){return h.toLowerCase().replace(/_/g,"")};if(!w.content?.actions||w.content.actions.length===0){this.logger.warn("No action found in the response content.");continue}let V=w.content.actions,S=[],N=K;this.logger.debug(`Found actions: ${this.actions.map((h)=>E(h.name))}`);for(let h of V){if(J)J=this.updateActionPlan(J,{currentStep:X+1});if(N=await this.composeState($,["RECENT_MESSAGES","ACTION_STATE"]),J&&N.data)N.data.actionPlan=J,N.data.actionResults=S;this.logger.debug(`Success: Calling action: ${h}`);let I=E(h),D=this.actions.find((L)=>E(L.name)===I);if(!D)D=this.actions.find((L)=>E(L.name).includes(I)||I.includes(E(L.name)));if(D)this.logger.debug(`Success: Found action: ${D?.name}`);else{this.logger.debug("Attempting to find action in similes.");for(let L of this.actions){if(L.similes?.find((c)=>E(c)===I)){D=L,this.logger.debug(`Success: Action found in similes (exact match): ${D.name}`);break}if(L.similes?.find((c)=>E(c).includes(I)||I.includes(E(c)))){D=L,this.logger.debug(`Success: Action found in similes (fuzzy match): ${D.name}`);break}}}if(!D){let L=`No action found for: ${h}`;if(this.logger.error(L),J&&J.steps[X])J=this.updateActionStep(J,X,{status:"failed",error:L});let g={id:hq(),entityId:$.entityId,roomId:$.roomId,worldId:$.worldId,content:{thought:L,source:"auto",type:"action_result",actionName:h,actionStatus:"failed",runId:z}};await this.createMemory(g,"messages"),X++;continue}if(!D.handler){if(this.logger.error(`Action ${D.name} has no handler.`),J&&J.steps[X])J=this.updateActionStep(J,X,{status:"failed",error:"No handler"});X++;continue}try{this.logger.debug(`Executing handler for action: ${D.name}`);let L=hq();this.currentActionContext={actionName:D.name,actionId:L,prompts:[]};let y={actionContext:{previousResults:S,getPreviousResult:(Y)=>{return S.find((H)=>H.data?.actionName===Y)}}};if(J)y.actionPlan={totalSteps:J.totalSteps,currentStep:J.currentStep,steps:J.steps,thought:J.thought};try{this.logger.debug(`Creating action start message for: ${D.name}`),await this.emitEvent("ACTION_STARTED",{messageId:L,roomId:$.roomId,world:$.worldId,content:{text:`Executing action: ${D.name}`,actions:[D.name],actionStatus:"executing",actionId:L,runId:z,type:"agent_action",thought:T,source:$.content?.source}})}catch(Y){this.logger.error("Failed to create action start message:",String(Y))}let c=[],n=async(Y)=>{return c.push(Y),[]},e=await D.handler(this,$,N,y,n,q),q$=e===void 0||e===null||typeof e==="boolean",p=null;if(!q$){if(typeof e==="object"&&e!==null&&(("values"in e)||("data"in e)||("text"in e)))p={...e,success:"success"in e?e.success:!0};else p={success:!0,data:{actionName:D.name,legacyResult:e}};if(S.push(p),p.values)N={...N,values:{...N.values,...p.values},data:{...N.data||{},actionResults:[...N.data?.actionResults||[],p],actionPlan:J}};if(p&&N.data){if(!N.data.workingMemory)N.data.workingMemory={};let Y=`action_${h}_${hq()}`,H={actionName:D.name,result:p,timestamp:Date.now()};N.data.workingMemory[Y]=H;let f=Object.entries(N.data.workingMemory);if(f.length>this.maxWorkingMemoryEntries){let W=f.sort((Z,G)=>{let M=Z[1],k=G[1],v=M?.timestamp??0;return(k?.timestamp??0)-v});N.data.workingMemory=Object.fromEntries(W.slice(0,this.maxWorkingMemoryEntries))}}if(J&&J.steps[X])J=this.updateActionStep(J,X,{status:"completed",result:p})}try{let H=p?.success!==!1?"completed":"failed";await this.emitEvent("ACTION_COMPLETED",{messageId:L,roomId:$.roomId,world:$.worldId,content:{text:`Action ${D.name} ${H}`,actions:[D.name],actionStatus:H,actionId:L,type:"agent_action",thought:T,actionResult:p,source:$.content?.source}})}catch(Y){let H=Y instanceof Error?Y.message:String(Y);this.logger.error(`Failed to emit ACTION_COMPLETED event for action ${D.name} (${L}): ${H}`)}if(P)for(let Y of c)await P(Y);let B={id:L,entityId:this.agentId,roomId:$.roomId,worldId:$.worldId,content:{text:p?.text||`Executed action: ${D.name}`,source:"action",type:"action_result",actionName:D.name,actionStatus:p?.success?"completed":"failed",actionResult:q$?{legacy:e}:p,runId:z,...J&&{planStep:`${J.currentStep}/${J.totalSteps}`,planThought:J.thought}},metadata:{type:"action_result",actionName:D.name,runId:z,parentRunId:j,actionId:L,...J&&{totalSteps:J.totalSteps,currentStep:J.currentStep}}};await this.createMemory(B,"messages"),this.logger.debug(`Action ${D.name} completed`,JSON.stringify({isLegacyReturn:q$,result:q$?e:void 0,hasValues:p?!!p.values:!1,hasData:p?!!p.data:!1,hasText:p?!!p.text:!1})),await this.adapter.log({entityId:$.entityId,roomId:$.roomId,type:"action",body:{action:D.name,actionId:L,message:$.content.text,messageId:$.id,state:N,responses:q,result:q$?{legacy:e}:p,isLegacyReturn:q$,prompts:this.currentActionContext?.prompts||[],promptCount:this.currentActionContext?.prompts.length||0,runId:z,parentRunId:j,...J&&{planStep:`${J.currentStep}/${J.totalSteps}`,planThought:J.thought}}}),this.currentActionContext=void 0}catch(L){let g=L instanceof Error?L.message:String(L);if(this.logger.error(L),J&&J.steps[X])J=this.updateActionStep(J,X,{status:"failed",error:g});this.currentActionContext=void 0;let y={success:!1,data:{actionName:D.name,error:g,errorObject:L}};S.push(y);let c={id:hq(),content:{thought:g,source:"auto",type:"action_result",actionName:D.name,actionStatus:"failed",error:g,runId:z,...J&&{planStep:`${J.currentStep}/${J.totalSteps}`,planThought:J.thought}},entityId:this.agentId,roomId:$.roomId,worldId:$.worldId,metadata:{type:"action_result",actionName:D.name,runId:z,parentRunId:j,error:!0,...J&&{totalSteps:J.totalSteps,currentStep:J.currentStep}}};if(await this.createMemory(c,"messages"),L?.critical||L?.code==="CRITICAL_ERROR")throw L}X++}if($.id)this.stateCache.set(`${$.id}_action_results`,{values:{actionResults:S},data:{actionResults:S,actionPlan:J},text:JSON.stringify(S)})}}getActionResults($){return this.stateCache?.get(`${$}_action_results`)?.data?.actionResults||[]}async evaluate($,q,K,P,_){try{let O=this.evaluators.map(async(z)=>{try{if(!z.handler)return null;if(!K&&!z.alwaysRun)return null;if(await z.validate(this,$,q))return z;return null}catch(J){return this.logger.error({error:J,evaluatorName:z.name},`Error validating evaluator ${z.name}`),null}}),j=(await Promise.all(O)).filter(Boolean);if(j.length===0)return[];return q=await this.composeState($,["RECENT_MESSAGES","EVALUATORS"]),await Promise.all(j.map(async(z)=>{try{if(z.handler)await z.handler(this,$,q,{},P,_),this.adapter.log({entityId:$.entityId,roomId:$.roomId,type:"evaluator",body:{evaluator:z.name,messageId:$.id,message:$.content.text,state:q,runId:this.getCurrentRunId()}})}catch(J){this.logger.error({error:J,evaluatorName:z.name},`Error executing evaluator ${z.name}`)}})),j}catch(O){return this.logger.error({error:O,messageId:$.id,roomId:$.roomId},"Error in evaluate method"),[]}}async ensureConnections($,q,K,P){if(!$){console.trace(),this.logger.error("ensureConnections - no entities");return}if(!q||q.length===0){console.trace(),this.logger.error("ensureConnections - no rooms");return}await this.ensureWorldExists({...P,agentId:this.agentId});let _=q[0],O=(g,y)=>g.reduce((c,n,e)=>{if(e%y===0)c.push([]);return c[c.length-1].push(n),c},[]),j=q.map((g)=>g.id),J=(await this.getRoomsByIds(j))?.map((g)=>g.id),T=j.filter((g)=>!J?.includes(g)),X={worldId:P.id,serverId:P.serverId,source:K,agentId:this.agentId};if(T.length){this.logger.debug("runtime/ensureConnections - create",T.length.toLocaleString(),"rooms");let g=q.filter((y)=>T.includes(y.id)).map((y)=>({...y,...X}));await this.createRooms(g)}let w=$.map((g)=>g.id),S=(await this.adapter.getEntitiesByIds(w))?.map((g)=>g.id),N=$.filter((g)=>!S?.includes(g.id)),E={roomId:_.id,channelId:_.channelId,type:_.type},h={worldId:P.id,serverId:P.serverId};if(N.length){this.logger.debug("runtime/ensureConnections - creating",N.length.toLocaleString(),"entities...");let g={...E,...h,source:K,agentId:this.agentId},y=N.map((n)=>({...n,...g})),c=O(y,5000);for(let n of c)await this.createEntities(n)}await this.ensureParticipantInRoom(this.agentId,_.id);let D=(await this.getParticipantsForRoom(_.id)).filter(Boolean),L=w.filter((g)=>!D.includes(g));if(L.length){this.logger.debug("runtime/ensureConnections - Missing",L.length.toLocaleString(),"connections in",_.id);let g=O(L,5000);for(let y of g)await this.addParticipantsRoom(y,_.id)}this.logger.success("Success: Successfully connected world")}async ensureConnection({entityId:$,roomId:q,worldId:K,worldName:P,userName:_,name:O,source:j,type:z,channelId:J,serverId:T,userId:X,metadata:w}){if(!K&&T)K=Q8(this,T);let V=[O,_].filter(Boolean),S={[j]:{id:X,name:O,userName:_}};try{let N=await this.getEntityById($);if(!N)try{if(await this.createEntity({id:$,names:V,metadata:S,agentId:this.agentId}))this.logger.debug(`Created new entity ${$} for user ${O||_||"unknown"}`);else throw Error(`Failed to create entity ${$}`)}catch(E){if(E.message?.includes("duplicate key")||E.code==="23505")this.logger.debug(`Entity ${$} exists in database but not for this agent. This is normal in multi-agent setups.`);else throw E}else await this.adapter.updateEntity({id:$,names:[...new Set([...N.names||[],...V])].filter(Boolean),metadata:{...N.metadata,[j]:{...N.metadata?.[j],id:X,name:O,userName:_}},agentId:this.agentId});await this.ensureWorldExists({id:K,name:P||T?`World for server ${T}`:`World for room ${q}`,agentId:this.agentId,serverId:T||"default",metadata:w}),await this.ensureRoomExists({id:q,name:O||"default",source:j||"default",type:z||"DM",channelId:J,serverId:T,worldId:K});try{await this.ensureParticipantInRoom($,q)}catch(E){if(E.message?.includes("not found")){if(!await this.addParticipant($,q))throw Error(`Failed to add participant ${$} to room ${q}`);this.logger.debug(`Added participant ${$} to room ${q} directly`)}else throw E}await this.ensureParticipantInRoom(this.agentId,q),this.logger.debug(`Success: Successfully connected entity ${$} in room ${q}`)}catch(N){throw this.logger.error(`Failed to ensure connection: ${N instanceof Error?N.message:String(N)}`),N}}async ensureParticipantInRoom($,q){let K=await this.getEntityById($);if(!K&&$!==this.agentId)this.logger.warn(`Entity ${$} not directly accessible to agent ${this.agentId}. Will attempt to add as participant anyway.`);else if(!K&&$===this.agentId)throw Error(`Agent entity ${$} not found, cannot add as participant.`);else if(!K)throw Error(`User entity ${$} not found, cannot add as participant.`);if(!(await this.adapter.getParticipantsForRoom(q)).includes($)){if(!await this.addParticipant($,q))throw Error(`Failed to add participant ${$} to room ${q}`);if($===this.agentId)this.logger.debug(`Agent ${this.character.name} linked to room ${q} successfully.`);else this.logger.debug(`User ${$} linked to room ${q} successfully.`)}}async removeParticipant($,q){return await this.adapter.removeParticipant($,q)}async getParticipantsForEntity($){return await this.adapter.getParticipantsForEntity($)}async getParticipantsForRoom($){return await this.adapter.getParticipantsForRoom($)}async addParticipant($,q){return await this.adapter.addParticipantsRoom([$],q)}async addParticipantsRoom($,q){return await this.adapter.addParticipantsRoom($,q)}async ensureWorldExists({id:$,name:q,serverId:K,metadata:P}){if(!await this.getWorld($))this.logger.debug("Creating world:",JSON.stringify({id:$,name:q,serverId:K,agentId:this.agentId})),await this.adapter.createWorld({id:$,name:q,agentId:this.agentId,serverId:K||"default",metadata:P}),this.logger.debug(`World ${$} created successfully.`)}async ensureRoomExists({id:$,name:q,source:K,type:P,channelId:_,serverId:O,worldId:j,metadata:z}){if(!j)throw Error("worldId is required");if(!await this.getRoom($))await this.createRoom({id:$,name:q,agentId:this.agentId,source:K,type:P,channelId:_,serverId:O,worldId:j,metadata:z}),this.logger.debug(`Room ${$} created successfully.`)}async composeState($,q=null,K=!1,P=!1){let _=K?q:null,O={values:{},data:{},text:""},j=P||!$.id?O:await this.stateCache.get($.id)||O,z=new Set;if(_&&_.length>0)_.forEach((E)=>z.add(E));else this.providers.filter((E)=>!E.private&&!E.dynamic).forEach((E)=>z.add(E.name));if(!_&&q&&q.length>0)q.forEach((E)=>z.add(E));let J=Array.from(new Set(this.providers.filter((E)=>z.has(E.name)))).sort((E,h)=>(E.position||0)-(h.position||0)),T=await Promise.all(J.map(async(E)=>{let h=Date.now();try{let I=await E.get(this,$,j),D=Date.now()-h;if(D>100)this.logger.debug(`${E.name} Provider took ${D}ms to respond`);return{...I,providerName:E.name}}catch(I){return console.error("provider error",E.name,I),{values:{},text:"",data:{},providerName:E.name}}})),X={...j.data?.providers||{}};for(let E of T)X[E.providerName]=E;let w=[];for(let E of J){let h=X[E.name];if(h&&h.text&&h.text.trim()!=="")w.push(h.text)}let V=w.join(`
|
|
595
|
+
${p}`);let B=BK(p);$.logger.debug({responseObject:B},"[MessageService] Parsed evaluation result:");let Y=["IGNORE","NONE"];E=B?.action&&!Y.includes(B.action.toUpperCase())}let h=null,I=[],D="none";if(E){let q$=j.useMultiStep?await this.runMultiStepCore($,q,w,K,j):await this.runSingleShotCore($,q,w,j);if(h=q$.responseContent,I=q$.responseMessages,w=q$.state,D=q$.mode,z.get(q.roomId)!==P)return $.logger.info(`Response discarded - newer message being processed for agent: ${$.agentId}, room: ${q.roomId}`),{didRespond:!1,responseContent:null,responseMessages:[],state:w,mode:"none"};if(h&&q.id)h.inReplyTo=Q8($,q.id);if(h?.providers?.length&&h.providers.length>0)w=await $.composeState(q,h.providers||[]);if(h){if(D==="simple"){if(h.providers&&h.providers.length>0)$.logger.debug({providers:h.providers},"[MessageService] Simple response used providers");if(K)await K(h)}else if(D==="actions")await $.processActions(q,I,w,async(B)=>{if($.logger.debug({content:B},"action callback"),h.actionCallbacks=B,K)return K(B);return[]})}}else{$.logger.debug("[MessageService] Agent decided not to respond (shouldRespond is false).");let q$=z.get(q.roomId),p=YO($.getSetting("BOOTSTRAP_KEEP_RESP"));if(q$!==P&&!p)return $.logger.info(`Ignore response discarded - newer message being processed for agent: ${$.agentId}, room: ${q.roomId}`),await this.emitRunEnded($,_,q,O,"replaced"),{didRespond:!1,responseContent:null,responseMessages:[],state:w,mode:"none"};if(!q.id)return $.logger.error("[MessageService] Message ID is missing, cannot create ignore response."),await this.emitRunEnded($,_,q,O,"noMessageId"),{didRespond:!1,responseContent:null,responseMessages:[],state:w,mode:"none"};let B={thought:"Agent decided not to respond to this message.",actions:["IGNORE"],simple:!0,inReplyTo:Q8($,q.id)};if(K)await K(B);let Y={id:Q7(hq()),entityId:$.agentId,agentId:$.agentId,content:B,roomId:q.roomId,createdAt:Date.now()};await $.createMemory(Y,"messages"),$.logger.debug("[MessageService] Saved ignore response to memory",`memoryId: ${Y.id}`)}if(z.delete(q.roomId),z.size===0)F7.delete($.agentId);await $.evaluate(q,w,E,async(q$)=>{if($.logger.debug({content:q$},"evaluate callback"),h)h.evalCallbacks=q$;if(K)return K(q$);return[]},I);let L="noname";if(q.metadata&&"entityName"in q.metadata)L=q.metadata.entityName;let g=q.content?.channelType==="DM",y=L;if(!g){let q$=await $.getRoomsByIds([q.roomId]);if(q$?.length){let p=q$[0];if(p.name)y=p.name;if(p.worldId){let B=await $.getWorld(p.worldId);if(B)y=B.name+"-"+y}}}let c=new Date,n=w.data?.providers?.ACTIONS?.data?.actionsData?.map((q$)=>q$.name)||[-1],e={at:c.toString(),timestamp:parseInt(""+c.getTime()/1000),messageId:q.id,userEntityId:q.entityId,input:q.content.text,thought:h?.thought,simple:h?.simple,availableActions:n,actions:h?.actions,providers:h?.providers,irt:h?.inReplyTo,output:h?.text,entityName:L,source:q.content.source,channelType:q.content.channelType,roomName:y};return await $.emitEvent("RUN_ENDED",{runtime:$,runId:_,messageId:q.id,roomId:q.roomId,entityId:q.entityId,startTime:O,status:"completed",endTime:Date.now(),duration:Date.now()-O,source:"messageHandler",entityName:L,responseContent:h,metadata:e}),{didRespond:E,responseContent:h,responseMessages:I,state:w,mode:D}}catch(z){throw console.error("error is",z),await $.emitEvent("RUN_ENDED",{runtime:$,runId:_,messageId:q.id,roomId:q.roomId,entityId:q.entityId,startTime:O,status:"error",endTime:Date.now(),duration:Date.now()-O,error:z.message,source:"messageHandler"}),z}}shouldRespond($,q,K,P){if(!K)return{shouldRespond:!1,skipEvaluation:!0,reason:"no room context"};function _(N){if(!N||typeof N!=="string")return[];return N.trim().replace(/^\[|\]$/g,"").split(",").map((h)=>h.trim()).filter(Boolean)}let O=["DM","VOICE_DM","SELF","API"],j=["client_chat"],z=_($.getSetting("ALWAYS_RESPOND_CHANNELS")||$.getSetting("SHOULD_RESPOND_BYPASS_TYPES")),J=_($.getSetting("ALWAYS_RESPOND_SOURCES")||$.getSetting("SHOULD_RESPOND_BYPASS_SOURCES")),T=new Set([...O.map((N)=>N.toString()),...z].map((N)=>N.trim().toLowerCase())),X=[...j,...J].map((N)=>N.trim().toLowerCase()),w=K.type?.toString().toLowerCase(),V=q.content.source?.toLowerCase()||"";if(T.has(w))return{shouldRespond:!0,skipEvaluation:!0,reason:`private channel: ${w}`};if(X.some((N)=>V.includes(N)))return{shouldRespond:!0,skipEvaluation:!0,reason:`whitelisted source: ${V}`};if(!!(P?.isMention||P?.isReply))return{shouldRespond:!0,skipEvaluation:!0,reason:`platform ${P?.isMention?"mention":"reply"}`};return{shouldRespond:!1,skipEvaluation:!1,reason:"needs LLM evaluation"}}async processAttachments($,q){if(!q||q.length===0)return[];$.logger.debug(`[MessageService] Processing ${q.length} attachment(s)`);let K=[];for(let P of q)try{let _={...P},O=/^(http|https):\/\//.test(P.url),j=O?P.url:dM(P.url);if(P.contentType==="image"&&!P.description){$.logger.debug(`[MessageService] Generating description for image: ${P.url}`);let z=j;if(!O){let J=await fetch(j);if(!J.ok)throw Error(`Failed to fetch image: ${J.statusText}`);let T=await J.arrayBuffer(),X=Buffer.from(T);z=`data:${J.headers.get("content-type")||"application/octet-stream"};base64,${X.toString("base64")}`}try{let J=await $.useModel(R6.IMAGE_DESCRIPTION,{prompt:BM,imageUrl:z});if(typeof J==="string"){let T=BK(J);if(T&&(T.description||T.text))_.description=T.description||"",_.title=T.title||"Image",_.text=T.text||T.description||"",$.logger.debug(`[MessageService] Generated description: ${_.description?.substring(0,100)}...`);else{let X=J,w=X.match(/<title>([^<]+)<\/title>/),V=X.match(/<description>([^<]+)<\/description>/),S=X.match(/<text>([^<]+)<\/text>/);if(w||V||S)_.title=w?.[1]||"Image",_.description=V?.[1]||"",_.text=S?.[1]||V?.[1]||"",$.logger.debug(`[MessageService] Used fallback XML parsing - description: ${_.description?.substring(0,100)}...`);else $.logger.warn("[MessageService] Failed to parse XML response for image description")}}else if(J&&typeof J==="object"&&"description"in J)_.description=J.description,_.title=J.title||"Image",_.text=J.description,$.logger.debug(`[MessageService] Generated description: ${_.description?.substring(0,100)}...`);else $.logger.warn("[MessageService] Unexpected response format for image description")}catch(J){$.logger.error({error:J},"[MessageService] Error generating image description:")}}else if(P.contentType==="document"&&!P.text){let z=await fetch(j);if(!z.ok)throw Error(`Failed to fetch document: ${z.statusText}`);let J=z.headers.get("content-type")||"";if(J.startsWith("text/plain")){$.logger.debug(`[MessageService] Processing plain text document: ${P.url}`);let X=await z.text();_.text=X,_.title=_.title||"Text File",$.logger.debug(`[MessageService] Extracted text content (first 100 chars): ${_.text?.substring(0,100)}...`)}else $.logger.warn(`[MessageService] Skipping non-plain-text document: ${J}`)}K.push(_)}catch(_){$.logger.error({error:_,attachmentUrl:P.url},`[MessageService] Failed to process attachment ${P.url}:`),K.push(P)}return K}async runSingleShotCore($,q,K,P){if(K=await $.composeState(q,["ACTIONS"]),!K.values?.actionNames)$.logger.warn("actionNames data missing from state, even though it was requested");let _=U7({state:K,template:$.character.templates?.messageHandlerTemplate||iM}),O=null,j=0;while(j<P.maxRetries&&(!O?.thought||!O?.actions)){let T=await $.useModel(R6.TEXT_LARGE,{prompt:_});$.logger.debug({response:T},"[MessageService] *** Raw LLM Response ***");let X=BK(T);if($.logger.debug({parsedXml:X},"[MessageService] *** Parsed XML Content ***"),X)O={...X,thought:X.thought||"",actions:X.actions||["IGNORE"],providers:X.providers||[],text:X.text||"",simple:X.simple||!1};else O=null;if(j++,!O?.thought||!O?.actions)$.logger.warn({response:T,parsedXml:X,responseContent:O},"[MessageService] *** Missing required fields (thought or actions), retrying... ***")}if(!O)return{responseContent:null,responseMessages:[],state:K,mode:"none"};if(O.actions&&O.actions.length>1){let T=(w)=>typeof w==="string"&&w.toUpperCase()==="IGNORE";if(O.actions.some(T))if(!O.text||O.text.trim()==="")O.actions=["IGNORE"];else{let w=O.actions.filter((V)=>!T(V));O.actions=w.length?w:["REPLY"]}}let z=O.actions?.length===1&&typeof O.actions[0]==="string"&&O.actions[0].toUpperCase()==="REPLY"&&(!O.providers||O.providers.length===0);O.simple=z;let J=[{id:Q7(hq()),entityId:$.agentId,agentId:$.agentId,content:O,roomId:q.roomId,createdAt:Date.now()}];return{responseContent:O,responseMessages:J,state:K,mode:z&&O.text?"simple":"actions"}}async runMultiStepCore($,q,K,P,_){let O=[],j=K,z=0;while(z<_.maxMultiStepIterations){z++,$.logger.debug(`[MultiStep] Starting iteration ${z}/${_.maxMultiStepIterations}`),j=await $.composeState(q,["RECENT_MESSAGES","ACTION_STATE"]),j.data.actionResults=O;let S=U7({state:j,template:$.character.templates?.multiStepDecisionTemplate||tM}),N=await $.useModel(R6.TEXT_LARGE,{prompt:S}),E=BK(N);if(!E){$.logger.warn(`[MultiStep] Failed to parse step result at iteration ${z}`),O.push({data:{actionName:"parse_error"},success:!1,error:"Failed to parse step result"});break}let{thought:h,providers:I=[],action:D,isFinish:L}=E;if(L==="true"||L===!0){if($.logger.info(`[MultiStep] Task marked as complete at iteration ${z}`),P)await P({text:"",thought:h??""});break}if((!I||I.length===0)&&!D){$.logger.warn(`[MultiStep] No providers or action specified at iteration ${z}, forcing completion`);break}try{for(let g of I){let y=$.providers.find((e)=>e.name===g);if(!y){$.logger.warn(`[MultiStep] Provider not found: ${g}`),O.push({data:{actionName:g},success:!1,error:`Provider not found: ${g}`});continue}let c=await y.get($,q,K);if(!c){$.logger.warn(`[MultiStep] Provider returned no result: ${g}`),O.push({data:{actionName:g},success:!1,error:"Provider returned no result"});continue}let n=!!c.text;if(O.push({data:{actionName:g},success:n,text:n?c.text:void 0,error:n?void 0:"Provider returned no result"}),P)await P({text:`\uD83D\uDD0E Provider executed: ${g}`,actions:[g],thought:h??""})}if(D){let g={text:`\uD83D\uDD0E Executing action: ${D}`,actions:[D],thought:h??""};await $.processActions(q,[{id:hq(),entityId:$.agentId,roomId:q.roomId,createdAt:Date.now(),content:g}],K,async()=>{return[]});let c=$.stateCache?.get(`${q.id}_action_results`)?.values?.actionResults||[],n=c.length>0?c[0]:null,e=n?.success??!1;O.push({data:{actionName:D},success:e,text:n?.text,values:n?.values,error:e?void 0:n?.text})}}catch(g){$.logger.error({err:g},"[MultiStep] Error executing step"),O.push({data:{actionName:D||"unknown"},success:!1,error:g instanceof Error?g.message:String(g)})}}if(z>=_.maxMultiStepIterations)$.logger.warn(`[MultiStep] Reached maximum iterations (${_.maxMultiStepIterations}), forcing completion`);j=await $.composeState(q,["RECENT_MESSAGES","ACTION_STATE"]);let J=U7({state:j,template:$.character.templates?.multiStepSummaryTemplate||UM}),T=await $.useModel(R6.TEXT_LARGE,{prompt:J}),X=BK(T),w=null;if(X?.text)w={actions:["MULTI_STEP_SUMMARY"],text:X.text,thought:X.thought||"Final user-facing message after task completion.",simple:!0};let V=w?[{id:Q7(hq()),entityId:$.agentId,agentId:$.agentId,content:w,roomId:q.roomId,createdAt:Date.now()}]:[];return{responseContent:w,responseMessages:V,state:j,mode:w?"simple":"none"}}async emitRunEnded($,q,K,P,_){await $.emitEvent("RUN_ENDED",{runtime:$,runId:q,messageId:K.id,roomId:K.roomId,entityId:K.entityId,startTime:P,status:_,endTime:Date.now(),duration:Date.now()-P,source:"messageHandler"})}async deleteMessage($,q){try{if(!q.id){$.logger.error("[MessageService] Cannot delete memory: message ID is missing");return}$.logger.info("[MessageService] Deleting memory for message",q.id,"from room",q.roomId),await $.deleteMemory(q.id),$.logger.debug({messageId:q.id},"[MessageService] Successfully deleted memory for message")}catch(K){throw $.logger.error({error:K},"[MessageService] Error in deleteMessage:"),K}}async clearChannel($,q,K){try{$.logger.info(`[MessageService] Clearing message memories from channel ${K} -> room ${q}`);let P=await $.getMemoriesByRoomIds({tableName:"messages",roomIds:[q]});$.logger.info(`[MessageService] Found ${P.length} message memories to delete from channel ${K}`);let _=0;for(let O of P)if(O.id)try{await $.deleteMemory(O.id),_++}catch(j){$.logger.warn({error:j,memoryId:O.id},`[MessageService] Failed to delete message memory ${O.id}:`)}$.logger.info(`[MessageService] Successfully cleared ${_}/${P.length} message memories from channel ${K}`)}catch(P){throw $.logger.error({error:P},"[MessageService] Error in clearChannel:"),P}}}var SK=($)=>{switch($){case 97:case 101:case 105:case 111:case 117:case 121:return!0;default:return!1}},xn=($)=>{switch($){case 97:case 101:case 105:case 111:case 117:case 121:case 119:case 120:case 89:return!0;default:return!1}},cn=($)=>{switch($){case 99:case 100:case 101:case 103:case 104:case 107:case 109:case 110:case 114:case 116:return!0;default:return!1}},pn=($)=>{switch($){case 98:case 100:case 102:case 103:case 109:case 110:case 112:case 114:case 116:return!0;default:return!1}},QM=($,q)=>{return q>=2&&SK($[q-2])&&(q===2&&!SK($[q-1])||q>=3&&!SK($[q-3])&&!xn($[q-1]))},mn=($)=>{if($.length<3)return $;if($.length<=6)switch($){case"ski":return"ski";case"skies":return"sky";case"dying":return"die";case"lying":return"lie";case"tying":return"tie";case"idly":return"idl";case"gently":return"gentl";case"ugly":return"ugli";case"early":return"earli";case"only":return"onli";case"singly":return"singl";case"sky":case"news":case"howe":case"atlas":case"cosmos":case"bias":case"andes":return $}let q=$.charCodeAt(0)===39?1:0,K=$.length-q,P=Array(K),_=!1;for(let X=0;X<K;++X){let w=$.charCodeAt(X+q);if(w===121&&(X===0||SK(P[X-1]))){_=!0,P[X]=89;continue}P[X]=w}if(P[K-1]===39)--K;if(K>=2&&P[K-2]===39&&P[K-1]===115)K-=2;let O=0;while(O<K&&!SK(P[O]))++O;if(O<K)++O;let j=O;if(K>=5&&(P[0]===103&&P[1]===101&&P[2]===110&&P[3]===101&&P[4]===114||P[0]===97&&P[1]===114&&P[2]===115&&P[3]===101&&P[4]===110))j=5;else if(K>=6&&P[0]===99&&P[1]===111&&P[2]===109&&P[3]===109&&P[4]===117&&P[5]===110)j=6;else{while(j<K&&SK(P[j]))++j;if(j<K)++j}let z=j;while(z<K&&!SK(P[z]))++z;while(z<K&&SK(P[z]))++z;if(z<K)++z;if(K>=3){if(P[K-1]===115){if(K>=4&&P[K-2]===101&&P[K-3]===115&&P[K-4]===115)K-=2;else if(P[K-2]===101&&P[K-3]===105)K-=K>=5?2:1;else if(P[K-2]!==117&&P[K-2]!==115&&O<K-1)K-=1}else if(P[K-1]===100&&P[K-2]===101&&P[K-3]===105)K-=K>=5?2:1}if(K===6&&(P[0]===105&&P[1]===110&&P[2]===110&&P[3]===105&&P[4]===110&&P[5]===103||P[0]===111&&P[1]===117&&P[2]===116&&P[3]===105&&P[4]===110&&P[5]===103||P[0]===101&&P[1]===120&&P[2]===99&&P[3]===101&&P[4]===101&&P[5]===100)||K===7&&(P[0]===99&&P[1]===97&&P[2]===110&&P[3]===110&&P[4]===105&&P[5]===110&&P[6]===103||P[0]===104&&P[1]===101&&P[2]===114&&P[3]===114&&P[4]===105&&P[5]===110&&P[6]===103||P[0]===101&&P[1]===97&&P[2]===114&&P[3]===114&&P[4]===105&&P[5]===110&&P[6]===103||P[0]===112&&P[1]===114&&P[2]===111&&P[3]===99&&P[4]===101&&P[5]===101&&P[6]===100||P[0]===115&&P[1]===117&&P[2]===99&&P[3]===99&&P[4]===101&&P[5]===101&&P[6]===100)){let X="";for(let w=0;w<K;++w)X+=String.fromCharCode(P[w]);return X}let J=K>=2&&P[K-1]===121&&P[K-2]===108?K-2:K;if(J>=3)if(P[J-3]===101&&P[J-2]===101&&P[J-1]===100){if(J>=j+3)K=J-1}else{if(P[J-2]===101&&P[J-1]===100)J-=2;else if(P[J-3]===105&&P[J-2]===110&&P[J-1]===103)J-=3;else J=-1;if(J>=0&&O<=J){if(K=J,K>=2){if(P[K-1]===116&&P[K-2]===97||P[K-1]===108&&P[K-2]===98||P[K-1]===122&&P[K-2]===105)P[K]=101,++K;else if(P[K-2]===P[K-1]&&pn(P[K-1]))--K;else if(j>=K&&QM(P,K))P[K]=101,++K}}}if(K>=3&&(P[K-1]===89||P[K-1]===121)&&!SK(P[K-2]))P[K-1]=105;if(K>=j+2)switch(P[K-1]){case 108:if(K>=j+6&&P[K-2]===97&&P[K-3]===110&&P[K-4]===111&&P[K-5]===105&&P[K-6]===116)if(K>=7&&P[K-7]===97){if(K>=j+7)K-=4,P[K-1]=101}else K-=2;break;case 110:if(K>=j+5&&P[K-2]===111&&P[K-3]===105&&P[K-4]===116&&P[K-5]===97)if(K>=7&&P[K-6]===122&&P[K-7]===105){if(K>=j+7)K-=4,P[K-1]=101}else K-=2,P[K-1]=101;break;case 114:if(K>=j+4){if(P[K-2]===101){if(P[K-3]===122&&P[K-4]===105)--K}else if(P[K-2]===111){if(P[K-3]===116&&P[K-4]===97)--K,P[K-1]=101}}break;case 115:if(K>=j+7&&P[K-2]===115&&P[K-3]===101&&P[K-4]===110&&(P[K-5]===108&&P[K-6]===117&&P[K-7]===102||P[K-5]===115&&P[K-6]===117&&P[K-7]===111||P[K-5]===101&&P[K-6]===118&&P[K-7]===105))K-=4;break;case 109:if(K>=j+5&&P[K-2]===115&&P[K-3]===105&&P[K-4]===108&&P[K-5]===97)K-=3;break;case 105:if(P[K-2]===99){if(K>=j+4&&(P[K-4]===101||P[K-4]===97)&&P[K-3]===110)P[K-1]=101}else if(P[K-2]===103){if(K>=j+3&&K>=4&&P[K-2]===103&&P[K-3]===111&&P[K-4]===108)--K}else if(P[K-2]===116){if(K>=j+5&&P[K-3]===105){if(P[K-4]===108){if(K>=6&&P[K-5]===105&&P[K-6]===98){if(K>=j+6)K-=3,P[K-2]=108,P[K-1]=101}else if(P[K-4]===108&&P[K-5]===97)K-=3}else if(P[K-4]===118&&P[K-5]===105)K-=2,P[K-1]=101}}else if(P[K-2]===108&&K>=3){if(P[K-3]===98){if(K>=4&&P[K-4]===97){if(K>=j+4)P[K-1]=101}else if(K>=j+3)P[K-1]=101}else if(P[K-3]===108){if(K>=5&&P[K-4]===117&&P[K-5]===102){if(K>=j+5)K-=2}else if(K>=j+4&&P[K-4]===97)K-=2}else if(P[K-3]===115){if(K>=6&&P[K-4]===115&&P[K-5]===101&&P[K-6]===108){if(K>=j+6)K-=2}else if(K>=j+5&&P[K-4]===117&&P[K-5]===111)K-=2}else if(K>=5&&P[K-3]===116&&P[K-4]===110&&P[K-5]===101){if(K>=j+5)K-=2}else if(cn(P[K-3]))K-=2}}if(K>=j+3)switch(P[K-1]){case 108:if(P[K-3]===99){if(K>=j+4&&P[K-4]===105&&P[K-2]===97)K-=2}else if(P[K-3]===102){if(P[K-2]===117)K-=3}else if(P[K-3]===110){if(K>=j+6&&P[K-2]===97&&P[K-4]===111&&P[K-5]===105&&P[K-6]===116)if(K>=7&&P[K-7]===97){if(K>=j+7)K-=4,P[K-1]=101}else K-=2}break;case 101:if(P[K-2]===122){if(K>=j+5&&P[K-3]===105&&P[K-4]===108&&P[K-5]===97)K-=3}else if(P[K-2]===116){if(K>=j+5&&P[K-3]===97&&P[K-4]===99&&P[K-5]===105)K-=3}else if(P[K-2]===118){if(K>=z+5&&P[K-3]===105&&P[K-4]===116&&P[K-5]===97)K-=5}break;case 105:if(K>=j+5&&P[K-2]===116&&P[K-3]===105&&P[K-4]===99&&P[K-5]===105)K-=3;break;case 115:if(K>=j+4&&P[K-2]===115&&P[K-3]===101&&P[K-4]===110)K-=4}if(K>=z+2)switch(P[K-1]){case 110:if(K>=z+3&&P[K-2]===111&&P[K-3]===105&&(P[K-4]===115||P[K-4]===116))K-=3;break;case 108:if(P[K-2]===97)K-=2;break;case 114:if(P[K-2]===101)K-=2;break;case 99:if(P[K-2]===105)K-=2;break;case 109:if(K>=z+3&&P[K-2]===115&&P[K-3]===105)K-=3;break;case 105:if(K>=z+3&&P[K-2]===116&&P[K-3]===105)K-=3;break;case 115:if(K>=z+3&&P[K-2]===117&&P[K-3]===111)K-=3;break;case 116:if(K>=z+3&&P[K-2]===110){if(P[K-3]===97)K-=3;else if(P[K-3]===101)if(K>=4&&P[K-4]===109){if(K>=5&&P[K-5]===101){if(K>=z+5)K-=5}else if(K>=z+4)K-=4}else K-=3}break;case 101:if(P[K-2]===99){if(K>=z+4&&P[K-3]===110&&(P[K-4]===97||P[K-4]===101))K-=4}else if(P[K-2]===108){if(K>=z+4&&P[K-3]===98&&(P[K-4]===97||P[K-4]===105))K-=4}else if(P[K-2]===116){if(K>=z+3&&P[K-3]===97)K-=3}else if(K>=z+3&&(P[K-2]===118||P[K-2]===122)&&P[K-3]===105)K-=3}if(K>=j+1&&(K>=z+1&&P[K-1]===108&&P[K-2]===108||P[K-1]===101&&(K>=z+1||!QM(P,K-1))))--K;let T="";if(_)for(let X=0;X<K;++X)T+=String.fromCharCode(P[X]===89?121:P[X]);else for(let X=0;X<K;++X)T+=String.fromCharCode(P[X]);return T},dn={k1:1.2,b:0.75,minLength:2,stopWords:new Set(["a","an","and","are","as","at","be","by","for","from","has","he","in","is","it","its","of","on","that","the","to","was","were","will","with"]),stemming:!1,stemWords:($)=>$};class FH{stopWords;minLength;stemming;stemmingRules;static DEFAULT_OPTIONS={stopWords:new Set,minLength:2,stemming:!1,stemmingRules:[]};constructor($={}){let q={...FH.DEFAULT_OPTIONS,...$};this.stopWords=q.stopWords,this.minLength=q.minLength,this.stemming=q.stemming,this.stemmingRules=q.stemmingRules.map((K)=>({...K,pattern:typeof K.pattern==="string"?new RegExp(K.pattern):K.pattern}))}tokenize($,q=!1){if(!$)throw Error("Input text cannot be null or empty");let K=Date.now(),P=$.split(/\s+/).filter((z)=>z.length>0),O=this.cleanText($).split(/\s+/).filter((z)=>this.isValidToken(z)).map((z)=>this.stemming?this.stemWord(z):z),j=q?{originalWordCount:P.length,stopWordsRemoved:P.length-O.length,stemmedWords:this.stemming?O.length:0,processingTimeMs:Date.now()-K}:{originalWordCount:0,stopWordsRemoved:0,stemmedWords:0,processingTimeMs:0};return{tokens:O,stats:j}}cleanText($){return $.toLowerCase().normalize("NFKD").replace(/[\u0000-\u001F\u007F-\u009F\u200B-\u200D\uFEFF]/g,"").replace(/[\u0300-\u036f]/g,"").replace(/[\p{Emoji_Presentation}\p{Extended_Pictographic}]/gu,"").replace(/[™®©℠‼]/g,"").replace(/[\p{P}]/gu," ").replace(/[^a-z0-9\u3040-\u30FF\u3400-\u4DBF\u4E00-\u9FFF\uAC00-\uD7AF\s]/gu," ").replace(/\s+/g," ").trim()}isValidToken($){let q=/^\d+$/.test($);return($.length>=this.minLength||q)&&!this.stopWords.has($)}stemWord($){if($.length<3)return $;let q=!1,K=$;for(let P of this.stemmingRules){let _=K.match(P.pattern);if(_){if(!P.minMeasure||this.measure(K.substring(0,_.index))>=P.minMeasure){if(typeof P.replacement==="string")K=K.replace(P.pattern,P.replacement);else K=K.replace(P.pattern,(...O)=>P.replacement(...O));q=!0}}}if(q&&K!==$)return K;return mn(K)}isConsonant($,q){let K=$[q];if("aeiou".includes(K))return!1;return K!=="y"||(q===0?!0:!this.isConsonant($,q-1))}measure($){let q=0,K=!1;for(let P=0;P<$.length;P++)if(this.isConsonant($,P)){if(K)q++,K=!1}else K=!0;return q}}class QH{termFrequencySaturation;lengthNormalizationFactor;tokenizer;documentLengths;averageDocLength;termToIndex;documentFrequency;termFrequencies;fieldBoosts;documents;constructor($,q={}){let K={...dn,...q};if(this.termFrequencySaturation=K.k1,this.lengthNormalizationFactor=K.b,this.tokenizer=new FH(K),this.fieldBoosts=K.fieldBoosts||{},this.documents=[],this.documentLengths=new Uint32Array(0),this.termToIndex=new Map,this.documentFrequency=new Uint32Array(0),this.averageDocLength=0,this.termFrequencies=new Map,$&&$.length>0){this.documents=[...$];let{documentLengths:P,termToIndex:_,documentFrequency:O,averageDocLength:j,termFrequencies:z}=this.processDocuments($);this.documentLengths=P,this.termToIndex=_,this.documentFrequency=O,this.averageDocLength=j,this.termFrequencies=z}}processDocuments($){let q=$.length,K=new Uint32Array(q),P=new Map,_=new Map,O=new Map,j=0,z=0;$.forEach((T,X)=>{let w=0,V=new Map;Object.entries(T).forEach(([S,N])=>{if(typeof N!=="string")return;let E=this.fieldBoosts[S]||1,{tokens:h}=this.tokenizer.tokenize(N),I=h.length*E;w+=I,h.forEach((D)=>{if(!P.has(D))P.set(D,z++);let L=P.get(D);if(!_.has(D))_.set(D,new Set);_.get(D).add(X);let g=V.get(L)||0;V.set(L,g+E)})}),K[X]=w,j+=w,V.forEach((S,N)=>{if(!O.has(N))O.set(N,new Map);O.get(N).set(X,S)})});let J=new Uint32Array(P.size);return _.forEach((T,X)=>{let w=P.get(X);J[w]=T.size}),{documentLengths:K,termToIndex:P,documentFrequency:J,averageDocLength:q>0?j/q:0,termFrequencies:O}}recalculateAverageLength(){if(this.documentLengths.length===0){this.averageDocLength=0;return}let $=this.documentLengths.reduce((q,K)=>q+K,0);this.averageDocLength=$/this.documentLengths.length}search($,q=10){let{tokens:K}=this.tokenizer.tokenize($),P=new Float32Array(this.documentLengths.length).fill(0);return K.forEach((_)=>{let O=this.termToIndex.get(_);if(O===void 0)return;let j=this.calculateIdf(O);if(j<=0)return;let z=this.termFrequencies.get(O);if(!z)return;z.forEach((J,T)=>{let X=this.documentLengths[T],w=J*(this.termFrequencySaturation+1),V=J+this.termFrequencySaturation*(1-this.lengthNormalizationFactor+this.lengthNormalizationFactor*X/this.averageDocLength);P[T]+=j*(w/V)})}),Array.from({length:P.length},(_,O)=>({index:O,score:P[O]})).filter((_)=>_.score>0).sort((_,O)=>O.score-_.score).slice(0,q)}searchPhrase($,q=10){let{tokens:K}=this.tokenizer.tokenize($);if(K.length===0)return[];let P=null;for(let O of K){let j=this.termToIndex.get(O);if(j===void 0)return[];let z=this.termFrequencies.get(j)?.keys();if(!z)return[];let J=new Set(z);if(P===null)P=J;else P=new Set([...P].filter((T)=>J.has(T)));if(P.size===0)return[]}if(P===null||P.size===0)return[];let _=new Map;return P.forEach((O)=>{let j=this.getDocument(O),z=!1;Object.entries(j).forEach(([J,T])=>{if(typeof T!=="string"||z)return;let X=this.fieldBoosts[J]||1,{tokens:w}=this.tokenizer.tokenize(T);for(let V=0;V<=w.length-K.length;V++){let S=!0;for(let N=0;N<K.length;N++)if(w[V+N]!==K[N]){S=!1;break}if(S){let N=this.calculatePhraseScore(K,O)*X;_.set(O,(_.get(O)||0)+N),z=!0;break}}})}),Array.from(_.entries()).map(([O,j])=>({index:O,score:j})).sort((O,j)=>j.score-O.score).slice(0,q)}calculatePhraseScore($,q){return $.reduce((K,P)=>{let _=this.termToIndex.get(P);if(_===void 0)return K;let O=this.calculateIdf(_),j=this.termFrequencies.get(_)?.get(q)||0,z=this.documentLengths[q],J=j*(this.termFrequencySaturation+1),T=j+this.termFrequencySaturation*(1-this.lengthNormalizationFactor+this.lengthNormalizationFactor*z/this.averageDocLength);return K+O*(J/T)},0)}async addDocument($){if(!$)throw Error("Document cannot be null");let q=this.documentLengths.length;this.documents.push($);let K=new Uint32Array(q+1);K.set(this.documentLengths,0),this.documentLengths=K;let P=0,_=new Map;Object.entries($).forEach(([O,j])=>{if(typeof j!=="string")return;let z=this.fieldBoosts[O]||1,{tokens:J}=this.tokenizer.tokenize(j);P+=J.length*z,J.forEach((T)=>{let X;if(!this.termToIndex.has(T)){if(X=this.termToIndex.size,this.termToIndex.set(T,X),this.documentFrequency.length<=X){let V=this.documentFrequency,S=Math.max(X+1,V.length*2||1);this.documentFrequency=new Uint32Array(S),this.documentFrequency.set(V,0)}this.documentFrequency[X]=0}else X=this.termToIndex.get(T);let w=_.get(X)||0;_.set(X,w+z)})}),this.documentLengths[q]=P,_.forEach((O,j)=>{if(!this.termFrequencies.has(j))this.termFrequencies.set(j,new Map);if(this.termFrequencies.get(j).set(q,O),j<this.documentFrequency.length)this.documentFrequency[j]++;else console.error(`Error: termIndexVal ${j} is out of bounds for documentFrequency (length ${this.documentFrequency.length}). This indicates an issue with array resizing or term indexing.`)}),this.recalculateAverageLength()}calculateIdf($){if($<0||$>=this.documentFrequency.length)return 0;let q=this.documentFrequency[$];if(q<=0||q>this.documentLengths.length)return 0;let P=this.documentLengths.length-q+0.5,_=q+0.5;return Math.log(1+P/_)}getTermFrequency($,q){return this.termFrequencies.get($)?.get(q)||0}getDocument($){if($<0||$>=this.documents.length)throw Error(`Document index ${$} out of bounds (0-${this.documents.length-1})`);return this.documents[$]}clearDocuments(){this.documents=[],this.documentLengths=new Uint32Array(0),this.termToIndex.clear(),this.documentFrequency=new Uint32Array(0),this.averageDocLength=0,this.termFrequencies.clear()}getDocumentCount(){return this.documents.length}async addDocuments($){return Promise.all($.map((q)=>this.addDocument(q)))}}var ln={};class on{permits;waiting=[];constructor($){this.permits=$}async acquire(){if(this.permits>0)return this.permits-=1,Promise.resolve();return new Promise(($)=>{this.waiting.push($)})}release(){this.permits+=1;let $=this.waiting.shift();if($&&this.permits>0)this.permits-=1,$()}}class aH{#$=32;agentId;character;adapter;actions=[];evaluators=[];providers=[];plugins=[];events={};stateCache=new Map;fetch=fetch;services=new Map;serviceTypes=new Map;models=new Map;routes=[];taskWorkers=new Map;sendHandlers=new Map;eventHandlers=new Map;elizaOS;allAvailablePlugins=new Map;characterPlugins=[];logger;settings;servicePromiseHandlers=new Map;servicePromises=new Map;serviceRegistrationStatus=new Map;initPromise;initResolver;initRejecter;migratedPlugins=new Set;currentRunId;currentActionContext;maxWorkingMemoryEntries=50;messageService=null;constructor($){if(this.agentId=$.character?.id??$?.agentId??vO($.character?.name??hq()),this.character=$.character,this.initPromise=new Promise((q,K)=>{this.initResolver=q,this.initRejecter=K}),this.logger=t7({namespace:this.character?.name}),this.#$=$.conversationLength??this.#$,$.adapter)this.registerDatabaseAdapter($.adapter);if(this.fetch=$.fetch??this.fetch,this.settings=$.settings??ln,this.plugins=[],this.characterPlugins=$?.plugins??[],$.allAvailablePlugins){for(let q of $.allAvailablePlugins)if(q?.name)this.allAvailablePlugins.set(q.name,q)}if(this.logger.debug(`Success: Agent ID: ${this.agentId}`),this.currentRunId=void 0,$.settings?.MAX_WORKING_MEMORY_ENTRIES)this.maxWorkingMemoryEntries=parseInt($.settings.MAX_WORKING_MEMORY_ENTRIES,10)||50;else this.maxWorkingMemoryEntries=qM("MAX_WORKING_MEMORY_ENTRIES",50)}createRunId(){return hq()}startRun(){return this.currentRunId=this.createRunId(),this.currentRunId}endRun(){this.currentRunId=void 0}getCurrentRunId(){if(!this.currentRunId)this.currentRunId=this.createRunId();return this.currentRunId}async registerPlugin($){if(!$?.name)throw this.logger.error("*** registerPlugin: Plugin or plugin name is undefined"),Error("*** registerPlugin: Plugin or plugin name is undefined");if(this.plugins.find((K)=>K.name===$.name)){this.logger.warn(`${this.character.name}(${this.agentId}) - Plugin ${$.name} is already registered. Skipping re-registration.`);return}if(this.plugins.push($),this.logger.debug(`Success: Plugin ${$.name} added to active plugins for ${this.character.name}(${this.agentId}).`),$.init)try{await $.init($.config||{},this),this.logger.debug(`Success: Plugin ${$.name} initialized successfully`)}catch(K){let P=K instanceof Error?K.message:String(K);if(P.includes("API key")||P.includes("environment variables")||P.includes("Invalid plugin configuration"))console.warn(`Plugin ${$.name} requires configuration. ${P}`),console.warn("Please check your environment variables and ensure all required API keys are set."),console.warn("You can set these in your .env file.");else throw K}if($.adapter)this.logger.debug(`Registering database adapter for plugin ${$.name}`),this.registerDatabaseAdapter($.adapter);if($.actions)for(let K of $.actions)this.registerAction(K);if($.evaluators)for(let K of $.evaluators)this.registerEvaluator(K);if($.providers)for(let K of $.providers)this.registerProvider(K);if($.models)for(let[K,P]of Object.entries($.models))this.registerModel(K,P,$.name,$?.priority);if($.routes)for(let K of $.routes){let P=K.path.startsWith("/")?K.path:`/${K.path}`;this.routes.push({...K,path:"/"+$.name+P})}if($.events)for(let[K,P]of Object.entries($.events))for(let _ of P)this.registerEvent(K,_);if($.services)for(let K of $.services){if(!this.servicePromises.has(K.serviceType))this._createServiceResolver(K.serviceType);this.serviceRegistrationStatus.set(K.serviceType,"pending"),this.registerService(K).catch((P)=>{this.logger.error(`Service registration failed for ${K.serviceType}: ${P instanceof Error?P.message:String(P)}`);let _=this.servicePromiseHandlers.get(K.serviceType);if(_){let O=Error(`Service ${K.serviceType} failed to register: ${P instanceof Error?P.message:String(P)}`);_.reject(O),this.servicePromiseHandlers.delete(K.serviceType),this.servicePromises.delete(K.serviceType)}this.serviceRegistrationStatus.set(K.serviceType,"failed")})}}getAllServices(){return this.services}async stop(){this.logger.debug(`runtime::stop - character ${this.character.name}`);for(let[$,q]of this.services){this.logger.debug(`runtime::stop - requesting service stop for ${$}`);for(let K of q)await K.stop()}this.elizaOS=void 0}async initialize($){try{let q=[],K=this.characterPlugins;for(let T of K)if(T)q.push(this.registerPlugin(T));if(await Promise.all(q),!this.adapter)throw this.logger.error("Database adapter not initialized. Make sure @elizaos/plugin-sql is included in your plugins."),Error("Database adapter not initialized. The SQL plugin (@elizaos/plugin-sql) is required for agent initialization. Please ensure it is included in your character configuration.");if(!await this.adapter.isReady())await this.adapter.init();if(this.messageService=new UH,$?.skipMigrations??!1)this.logger.info("Skipping plugin migrations (skipMigrations=true)");else this.logger.info("Running plugin migrations..."),await this.runPluginMigrations(),this.logger.info("Plugin migrations completed.");let _=await this.ensureAgentExists({...this.character,id:this.agentId});if(!_){let T=`Agent ${this.agentId} does not exist in database after ensureAgentExists call`;throw Error(T)}if(_.settings){this.character.settings={..._.settings,...this.character.settings};let T=_.settings.secrets&&typeof _.settings.secrets==="object"?_.settings.secrets:{},X=this.character.settings.secrets&&typeof this.character.settings.secrets==="object"?this.character.settings.secrets:{},w=this.character.secrets&&typeof this.character.secrets==="object"?this.character.secrets:{},V={...T,...w,...X};if(Object.keys(V).length>0)this.character.secrets=V,this.character.settings.secrets=V}let O=await this.getEntityById(this.agentId);if(!O){if(!await this.createEntity({id:this.agentId,names:[this.character.name],metadata:{},agentId:_.id})){let X=`Failed to create entity for agent ${this.agentId}`;throw Error(X)}if(O=await this.getEntityById(this.agentId),!O)throw Error(`Agent entity not found for ${this.agentId}`);this.logger.debug(`Success: Agent entity created successfully for ${this.character.name}`)}if(!await this.getRoom(this.agentId))await this.createRoom({id:this.agentId,name:this.character.name,source:"elizaos",type:"SELF",channelId:this.agentId,serverId:this.agentId,worldId:this.agentId});if(!(await this.adapter.getParticipantsForRoom(this.agentId)).includes(this.agentId)){if(!await this.addParticipant(this.agentId,this.agentId)){let X=`Failed to add agent ${this.agentId} as participant to its own room`;throw Error(X)}this.logger.debug(`Agent ${this.character.name} linked to its own room successfully`)}if(!this.getModel(R6.TEXT_EMBEDDING))this.logger.warn(`[AgentRuntime][${this.character.name}] No TEXT_EMBEDDING model registered. Skipping embedding dimension setup.`);else await this.ensureEmbeddingDimension();if(this.initResolver)this.initResolver(),this.initResolver=void 0}catch(q){let K=q instanceof Error?q.message:String(q);if(this.logger.error(`Runtime initialization failed: ${K}`),this.initRejecter)this.initRejecter(q),this.initRejecter=void 0;for(let[P,_]of this.servicePromises){let O=this.servicePromiseHandlers.get(P);if(O){let j=Error(`Service ${P} failed to start due to runtime initialization failure: ${K}`);O.reject(j),this.servicePromiseHandlers.delete(P),this.servicePromises.delete(P),this.serviceRegistrationStatus.set(P,"failed")}}throw q}}async runPluginMigrations(){if(!this.adapter){this.logger.warn("Database adapter not found, skipping plugin migrations.");return}if(typeof this.adapter.runPluginMigrations!=="function"){this.logger.warn("Database adapter does not support plugin migrations.");return}let $=this.plugins.filter((q)=>q.schema).map((q)=>({name:q.name,schema:q.schema}));if($.length===0){this.logger.info("No plugins with schemas found, skipping migrations.");return}this.logger.info(`Found ${$.length} plugins with schemas to migrate.`);try{let P={verbose:!0,force:process.env.ELIZA_ALLOW_DESTRUCTIVE_MIGRATIONS==="true",dryRun:!1};await this.adapter.runPluginMigrations($,P),this.logger.info("Plugin migrations completed successfully.")}catch(q){throw this.logger.error(q instanceof Error?q:Error(String(q)),"Failed to run plugin migrations"),q}}async getConnection(){if(!this.adapter)throw Error("Database adapter not registered");return this.adapter.getConnection()}setSetting($,q,K=!1){if(K){if(!this.character.secrets)this.character.secrets={};this.character.secrets[$]=q}else{if(!this.character.settings)this.character.settings={};this.character.settings[$]=q}}getSetting($){let q=this.character.secrets?.[$]||this.character.settings?.[$]||typeof this.character.settings==="object"&&this.character.settings!==null&&"secrets"in this.character.settings&&this.character.settings.secrets?.[$]||this.settings[$],K=zO(q,I_());if(K==="true")return!0;if(K==="false")return!1;return K||null}getConversationLength(){return this.#$}registerDatabaseAdapter($){if(this.adapter)this.logger.warn("Database adapter already registered. Additional adapters will be ignored. This may lead to unexpected behavior.");else this.adapter=$,this.logger.debug("Success: Database adapter registered successfully.")}registerProvider($){this.providers.push($),this.logger.debug(`Success: Provider ${$.name} registered successfully.`)}registerAction($){if(this.actions.find((q)=>q.name===$.name))this.logger.warn(`${this.character.name}(${this.agentId}) - Action ${$.name} already exists. Skipping registration.`);else try{this.actions.push($),this.logger.success(`${this.character.name}(${this.agentId}) - Action ${$.name} registered successfully.`)}catch(q){console.error("Error registering action",q)}}registerEvaluator($){this.evaluators.push($)}updateActionPlan($,q){return{...$,...q}}updateActionStep($,q,K){if(!$.steps||q<0||q>=$.steps.length)return this.logger.warn(`Invalid step index: ${q} for plan with ${$.steps?.length||0} steps`),$;return{...$,steps:$.steps.map((P,_)=>_===q?{...P,...K}:P)}}async processActions($,q,K,P){let _=[];for(let w of q)if(w.content?.actions&&w.content.actions.length>0)_.push(...w.content.actions);let O=_.length>1,j=this.getCurrentRunId(),z=this.createRunId(),J=null,T=q[0]?.content?.thought||`Executing ${_.length} actions: ${_.join(", ")}`;if(O)J={runId:z,totalSteps:_.length,currentStep:0,steps:_.map((w)=>({action:w,status:"pending"})),thought:T,startTime:Date.now()};let X=0;for(let w of q){let E=function(h){return h.toLowerCase().replace(/_/g,"")};if(!w.content?.actions||w.content.actions.length===0){this.logger.warn("No action found in the response content.");continue}let V=w.content.actions,S=[],N=K;this.logger.debug(`Found actions: ${this.actions.map((h)=>E(h.name))}`);for(let h of V){if(J)J=this.updateActionPlan(J,{currentStep:X+1});if(N=await this.composeState($,["RECENT_MESSAGES","ACTION_STATE"]),J&&N.data)N.data.actionPlan=J,N.data.actionResults=S;this.logger.debug(`Success: Calling action: ${h}`);let I=E(h),D=this.actions.find((L)=>E(L.name)===I);if(!D)D=this.actions.find((L)=>E(L.name).includes(I)||I.includes(E(L.name)));if(D)this.logger.debug(`Success: Found action: ${D?.name}`);else{this.logger.debug("Attempting to find action in similes.");for(let L of this.actions){if(L.similes?.find((c)=>E(c)===I)){D=L,this.logger.debug(`Success: Action found in similes (exact match): ${D.name}`);break}if(L.similes?.find((c)=>E(c).includes(I)||I.includes(E(c)))){D=L,this.logger.debug(`Success: Action found in similes (fuzzy match): ${D.name}`);break}}}if(!D){let L=`No action found for: ${h}`;if(this.logger.error(L),J&&J.steps[X])J=this.updateActionStep(J,X,{status:"failed",error:L});let g={id:hq(),entityId:$.entityId,roomId:$.roomId,worldId:$.worldId,content:{thought:L,source:"auto",type:"action_result",actionName:h,actionStatus:"failed",runId:z}};await this.createMemory(g,"messages"),X++;continue}if(!D.handler){if(this.logger.error(`Action ${D.name} has no handler.`),J&&J.steps[X])J=this.updateActionStep(J,X,{status:"failed",error:"No handler"});X++;continue}try{this.logger.debug(`Executing handler for action: ${D.name}`);let L=hq();this.currentActionContext={actionName:D.name,actionId:L,prompts:[]};let y={actionContext:{previousResults:S,getPreviousResult:(Y)=>{return S.find((H)=>H.data?.actionName===Y)}}};if(J)y.actionPlan={totalSteps:J.totalSteps,currentStep:J.currentStep,steps:J.steps,thought:J.thought};try{this.logger.debug(`Creating action start message for: ${D.name}`),await this.emitEvent("ACTION_STARTED",{messageId:L,roomId:$.roomId,world:$.worldId,content:{text:`Executing action: ${D.name}`,actions:[D.name],actionStatus:"executing",actionId:L,runId:z,type:"agent_action",thought:T,source:$.content?.source}})}catch(Y){this.logger.error("Failed to create action start message:",String(Y))}let c=[],n=async(Y)=>{return c.push(Y),[]},e=await D.handler(this,$,N,y,n,q),q$=e===void 0||e===null||typeof e==="boolean",p=null;if(!q$){if(typeof e==="object"&&e!==null&&(("values"in e)||("data"in e)||("text"in e)))p={...e,success:"success"in e?e.success:!0};else p={success:!0,data:{actionName:D.name,legacyResult:e}};if(S.push(p),p.values)N={...N,values:{...N.values,...p.values},data:{...N.data||{},actionResults:[...N.data?.actionResults||[],p],actionPlan:J}};if(p&&N.data){if(!N.data.workingMemory)N.data.workingMemory={};let Y=`action_${h}_${hq()}`,H={actionName:D.name,result:p,timestamp:Date.now()};N.data.workingMemory[Y]=H;let f=Object.entries(N.data.workingMemory);if(f.length>this.maxWorkingMemoryEntries){let W=f.sort((Z,G)=>{let M=Z[1],k=G[1],v=M?.timestamp??0;return(k?.timestamp??0)-v});N.data.workingMemory=Object.fromEntries(W.slice(0,this.maxWorkingMemoryEntries))}}if(J&&J.steps[X])J=this.updateActionStep(J,X,{status:"completed",result:p})}try{let H=p?.success!==!1?"completed":"failed";await this.emitEvent("ACTION_COMPLETED",{messageId:L,roomId:$.roomId,world:$.worldId,content:{text:`Action ${D.name} ${H}`,actions:[D.name],actionStatus:H,actionId:L,type:"agent_action",thought:T,actionResult:p,source:$.content?.source}})}catch(Y){let H=Y instanceof Error?Y.message:String(Y);this.logger.error(`Failed to emit ACTION_COMPLETED event for action ${D.name} (${L}): ${H}`)}if(P)for(let Y of c)await P(Y);let B={id:L,entityId:this.agentId,roomId:$.roomId,worldId:$.worldId,content:{text:p?.text||`Executed action: ${D.name}`,source:"action",type:"action_result",actionName:D.name,actionStatus:p?.success?"completed":"failed",actionResult:q$?{legacy:e}:p,runId:z,...J&&{planStep:`${J.currentStep}/${J.totalSteps}`,planThought:J.thought}},metadata:{type:"action_result",actionName:D.name,runId:z,parentRunId:j,actionId:L,...J&&{totalSteps:J.totalSteps,currentStep:J.currentStep}}};await this.createMemory(B,"messages"),this.logger.debug(`Action ${D.name} completed`,JSON.stringify({isLegacyReturn:q$,result:q$?e:void 0,hasValues:p?!!p.values:!1,hasData:p?!!p.data:!1,hasText:p?!!p.text:!1})),await this.adapter.log({entityId:$.entityId,roomId:$.roomId,type:"action",body:{action:D.name,actionId:L,message:$.content.text,messageId:$.id,state:N,responses:q,result:q$?{legacy:e}:p,isLegacyReturn:q$,prompts:this.currentActionContext?.prompts||[],promptCount:this.currentActionContext?.prompts.length||0,runId:z,parentRunId:j,...J&&{planStep:`${J.currentStep}/${J.totalSteps}`,planThought:J.thought}}}),this.currentActionContext=void 0}catch(L){let g=L instanceof Error?L.message:String(L);if(this.logger.error(L),J&&J.steps[X])J=this.updateActionStep(J,X,{status:"failed",error:g});this.currentActionContext=void 0;let y={success:!1,data:{actionName:D.name,error:g,errorObject:L}};S.push(y);let c={id:hq(),content:{thought:g,source:"auto",type:"action_result",actionName:D.name,actionStatus:"failed",error:g,runId:z,...J&&{planStep:`${J.currentStep}/${J.totalSteps}`,planThought:J.thought}},entityId:this.agentId,roomId:$.roomId,worldId:$.worldId,metadata:{type:"action_result",actionName:D.name,runId:z,parentRunId:j,error:!0,...J&&{totalSteps:J.totalSteps,currentStep:J.currentStep}}};if(await this.createMemory(c,"messages"),L?.critical||L?.code==="CRITICAL_ERROR")throw L}X++}if($.id)this.stateCache.set(`${$.id}_action_results`,{values:{actionResults:S},data:{actionResults:S,actionPlan:J},text:JSON.stringify(S)})}}getActionResults($){return this.stateCache?.get(`${$}_action_results`)?.data?.actionResults||[]}async evaluate($,q,K,P,_){try{let O=this.evaluators.map(async(z)=>{try{if(!z.handler)return null;if(!K&&!z.alwaysRun)return null;if(await z.validate(this,$,q))return z;return null}catch(J){return this.logger.error({error:J,evaluatorName:z.name},`Error validating evaluator ${z.name}`),null}}),j=(await Promise.all(O)).filter(Boolean);if(j.length===0)return[];return q=await this.composeState($,["RECENT_MESSAGES","EVALUATORS"]),await Promise.all(j.map(async(z)=>{try{if(z.handler)await z.handler(this,$,q,{},P,_),this.adapter.log({entityId:$.entityId,roomId:$.roomId,type:"evaluator",body:{evaluator:z.name,messageId:$.id,message:$.content.text,state:q,runId:this.getCurrentRunId()}})}catch(J){this.logger.error({error:J,evaluatorName:z.name},`Error executing evaluator ${z.name}`)}})),j}catch(O){return this.logger.error({error:O,messageId:$.id,roomId:$.roomId},"Error in evaluate method"),[]}}async ensureConnections($,q,K,P){if(!$){console.trace(),this.logger.error("ensureConnections - no entities");return}if(!q||q.length===0){console.trace(),this.logger.error("ensureConnections - no rooms");return}await this.ensureWorldExists({...P,agentId:this.agentId});let _=q[0],O=(g,y)=>g.reduce((c,n,e)=>{if(e%y===0)c.push([]);return c[c.length-1].push(n),c},[]),j=q.map((g)=>g.id),J=(await this.getRoomsByIds(j))?.map((g)=>g.id),T=j.filter((g)=>!J?.includes(g)),X={worldId:P.id,serverId:P.serverId,source:K,agentId:this.agentId};if(T.length){this.logger.debug("runtime/ensureConnections - create",T.length.toLocaleString(),"rooms");let g=q.filter((y)=>T.includes(y.id)).map((y)=>({...y,...X}));await this.createRooms(g)}let w=$.map((g)=>g.id),S=(await this.adapter.getEntitiesByIds(w))?.map((g)=>g.id),N=$.filter((g)=>!S?.includes(g.id)),E={roomId:_.id,channelId:_.channelId,type:_.type},h={worldId:P.id,serverId:P.serverId};if(N.length){this.logger.debug("runtime/ensureConnections - creating",N.length.toLocaleString(),"entities...");let g={...E,...h,source:K,agentId:this.agentId},y=N.map((n)=>({...n,...g})),c=O(y,5000);for(let n of c)await this.createEntities(n)}await this.ensureParticipantInRoom(this.agentId,_.id);let D=(await this.getParticipantsForRoom(_.id)).filter(Boolean),L=w.filter((g)=>!D.includes(g));if(L.length){this.logger.debug("runtime/ensureConnections - Missing",L.length.toLocaleString(),"connections in",_.id);let g=O(L,5000);for(let y of g)await this.addParticipantsRoom(y,_.id)}this.logger.success("Success: Successfully connected world")}async ensureConnection({entityId:$,roomId:q,worldId:K,worldName:P,userName:_,name:O,source:j,type:z,channelId:J,serverId:T,userId:X,metadata:w}){if(!K&&T)K=Q8(this,T);let V=[O,_].filter(Boolean),S={[j]:{id:X,name:O,userName:_}};try{let N=await this.getEntityById($);if(!N)try{if(await this.createEntity({id:$,names:V,metadata:S,agentId:this.agentId}))this.logger.debug(`Created new entity ${$} for user ${O||_||"unknown"}`);else throw Error(`Failed to create entity ${$}`)}catch(E){if(E.message?.includes("duplicate key")||E.code==="23505")this.logger.debug(`Entity ${$} exists in database but not for this agent. This is normal in multi-agent setups.`);else throw E}else await this.adapter.updateEntity({id:$,names:[...new Set([...N.names||[],...V])].filter(Boolean),metadata:{...N.metadata,[j]:{...N.metadata?.[j],id:X,name:O,userName:_}},agentId:this.agentId});await this.ensureWorldExists({id:K,name:P||T?`World for server ${T}`:`World for room ${q}`,agentId:this.agentId,serverId:T||"default",metadata:w}),await this.ensureRoomExists({id:q,name:O||"default",source:j||"default",type:z||"DM",channelId:J,serverId:T,worldId:K});try{await this.ensureParticipantInRoom($,q)}catch(E){if(E.message?.includes("not found")){if(!await this.addParticipant($,q))throw Error(`Failed to add participant ${$} to room ${q}`);this.logger.debug(`Added participant ${$} to room ${q} directly`)}else throw E}await this.ensureParticipantInRoom(this.agentId,q),this.logger.debug(`Success: Successfully connected entity ${$} in room ${q}`)}catch(N){throw this.logger.error(`Failed to ensure connection: ${N instanceof Error?N.message:String(N)}`),N}}async ensureParticipantInRoom($,q){let K=await this.getEntityById($);if(!K&&$!==this.agentId)this.logger.warn(`Entity ${$} not directly accessible to agent ${this.agentId}. Will attempt to add as participant anyway.`);else if(!K&&$===this.agentId)throw Error(`Agent entity ${$} not found, cannot add as participant.`);else if(!K)throw Error(`User entity ${$} not found, cannot add as participant.`);if(!(await this.adapter.getParticipantsForRoom(q)).includes($)){if(!await this.addParticipant($,q))throw Error(`Failed to add participant ${$} to room ${q}`);if($===this.agentId)this.logger.debug(`Agent ${this.character.name} linked to room ${q} successfully.`);else this.logger.debug(`User ${$} linked to room ${q} successfully.`)}}async removeParticipant($,q){return await this.adapter.removeParticipant($,q)}async getParticipantsForEntity($){return await this.adapter.getParticipantsForEntity($)}async getParticipantsForRoom($){return await this.adapter.getParticipantsForRoom($)}async addParticipant($,q){return await this.adapter.addParticipantsRoom([$],q)}async addParticipantsRoom($,q){return await this.adapter.addParticipantsRoom($,q)}async ensureWorldExists({id:$,name:q,serverId:K,metadata:P}){if(!await this.getWorld($))this.logger.debug("Creating world:",JSON.stringify({id:$,name:q,serverId:K,agentId:this.agentId})),await this.adapter.createWorld({id:$,name:q,agentId:this.agentId,serverId:K||"default",metadata:P}),this.logger.debug(`World ${$} created successfully.`)}async ensureRoomExists({id:$,name:q,source:K,type:P,channelId:_,serverId:O,worldId:j,metadata:z}){if(!j)throw Error("worldId is required");if(!await this.getRoom($))await this.createRoom({id:$,name:q,agentId:this.agentId,source:K,type:P,channelId:_,serverId:O,worldId:j,metadata:z}),this.logger.debug(`Room ${$} created successfully.`)}async composeState($,q=null,K=!1,P=!1){let _=K?q:null,O={values:{},data:{},text:""},j=P||!$.id?O:await this.stateCache.get($.id)||O,z=new Set;if(_&&_.length>0)_.forEach((E)=>z.add(E));else this.providers.filter((E)=>!E.private&&!E.dynamic).forEach((E)=>z.add(E.name));if(!_&&q&&q.length>0)q.forEach((E)=>z.add(E));let J=Array.from(new Set(this.providers.filter((E)=>z.has(E.name)))).sort((E,h)=>(E.position||0)-(h.position||0)),T=await Promise.all(J.map(async(E)=>{let h=Date.now();try{let I=await E.get(this,$,j),D=Date.now()-h;if(D>100)this.logger.debug(`${E.name} Provider took ${D}ms to respond`);return{...I,providerName:E.name}}catch(I){return console.error("provider error",E.name,I),{values:{},text:"",data:{},providerName:E.name}}})),X={...j.data?.providers||{}};for(let E of T)X[E.providerName]=E;let w=[];for(let E of J){let h=X[E.name];if(h&&h.text&&h.text.trim()!=="")w.push(h.text)}let V=w.join(`
|
|
596
596
|
`),S={...j.values||{}};for(let E of J){let h=X[E.name];if(h&&h.values&&typeof h.values==="object")Object.assign(S,h.values)}for(let E in X)if(!J.some((h)=>h.name===E)){let h=X[E];if(h&&h.values&&typeof h.values==="object")Object.assign(S,h.values)}let N={values:{...S,providers:V},data:{...j.data||{},providers:X},text:V};if($.id)this.stateCache.set($.id,N);return N}getService($){let q=this.services.get($);if(!q||q.length===0)return this.logger.debug(`Service ${$} not found`),null;return q[0]}getTypedService($){return this.getService($)}getServicesByType($){let q=this.services.get($);if(!q||q.length===0)return this.logger.debug(`No services found for type ${$}`),[];return q}getRegisteredServiceTypes(){return Array.from(this.services.keys())}hasService($){let q=this.services.get($);return q!==void 0&&q.length>0}getServiceRegistrationStatus($){return this.serviceRegistrationStatus.get($)||"unknown"}getServiceHealth(){let $={};for(let[q,K]of this.services)$[q]={status:this.getServiceRegistrationStatus(q),instances:K.length,hasPromise:this.servicePromises.has(q)};for(let[q,K]of this.serviceRegistrationStatus)if(!$[q])$[q]={status:K,instances:0,hasPromise:this.servicePromises.has(q)};return $}async registerService($){let q=$.serviceType;if(!q){this.logger.warn(`Service ${$.name} is missing serviceType. Please define a static serviceType property.`);return}this.logger.debug(`${this.character.name}(${this.agentId}) - Registering service:`,q),this.serviceRegistrationStatus.set(q,"registering");try{this.logger.debug(`Service ${q} waiting for initialization...`);let K=new Promise((O,j)=>{setTimeout(()=>{j(Error(`Service ${q} registration timed out waiting for runtime initialization (30s timeout)`))},30000)});await Promise.race([this.initPromise,K]),this.logger.debug(`Service ${q} proceeding - initialization complete`);let P=await $.start(this);if(!this.services.has(q))this.services.set(q,[]);if(!this.serviceTypes.has(q))this.serviceTypes.set(q,[]);this.services.get(q).push(P),this.serviceTypes.get(q).push($);let _=this.servicePromiseHandlers.get(q);if(_)_.resolve(P),this.servicePromiseHandlers.delete(q);else this.logger.debug(`${this.character.name} - Service ${q} has no servicePromiseHandler`);if(typeof $.registerSendHandlers==="function")$.registerSendHandlers(this,P);this.serviceRegistrationStatus.set(q,"registered"),this.logger.debug(`${this.character.name}(${this.agentId}) - Service ${q} registered successfully`)}catch(K){let P=K instanceof Error?K.message:String(K);if(this.logger.error(`${this.character.name}(${this.agentId}) - Failed to register service ${q}: ${P}`),K?.message?.includes("timed out waiting for runtime initialization"))this.logger.error(`Service ${q} failed due to runtime initialization timeout. Check if runtime.initialize() is being called and completing successfully.`);else if(K?.message?.includes("Service")&&K?.message?.includes("failed to start"))this.logger.error(`Service ${q} failed to start. Check service implementation and dependencies.`);this.serviceRegistrationStatus.set(q,"failed");let _=this.servicePromiseHandlers.get(q);if(_)_.reject(K),this.servicePromiseHandlers.delete(q),this.servicePromises.delete(q);throw K}}_createServiceResolver($){let q,K;if(this.servicePromises.set($,new Promise((P,_)=>{q=P,K=_})),!q)throw Error(`Failed to create resolver for service ${$}`);if(!K)throw Error(`Failed to create rejecter for service ${$}`);return this.servicePromiseHandlers.set($,{resolve:q,reject:K}),this.servicePromises.get($)}getServiceLoadPromise($){let q=this.servicePromises.get($);if(!q)q=this._createServiceResolver($);return q}registerModel($,q,K,P){let _=typeof $==="string"?$:R6[$];if(!this.models.has(_))this.models.set(_,[]);let O=Date.now();this.models.get(_)?.push({handler:q,provider:K,priority:P||0,registrationOrder:O}),this.models.get(_)?.sort((j,z)=>{if((z.priority||0)!==(j.priority||0))return(z.priority||0)-(j.priority||0);return(j.registrationOrder||0)-(z.registrationOrder||0)})}getModel($,q){let K=typeof $==="string"?$:R6[$],P=this.models.get(K);if(!P?.length)return;if(q){let _=P.find((O)=>O.provider===q);if(_)return this.logger.debug(`[AgentRuntime][${this.character.name}] Using model ${K} from provider ${q}`),_.handler;else this.logger.warn(`[AgentRuntime][${this.character.name}] No model found for provider ${q}`)}return this.logger.debug(`[AgentRuntime][${this.character.name}] Using model ${K} from provider ${P[0].provider}`),P[0].handler}getModelSettings($){let q={},K=(z,J)=>{if($){let V=`${$}_${z}`,S=this.getSetting(V);if(S!==null&&S!==void 0){let N=Number(S);if(!isNaN(N))return N}}let T=`DEFAULT_${z}`,X=this.getSetting(T);if(X!==null&&X!==void 0){let V=Number(X);if(!isNaN(V))return V}let w=this.getSetting(J);if(w!==null&&w!==void 0){let V=Number(w);if(!isNaN(V))return V}return null},P=K("MAX_TOKENS",F4.MODEL_MAX_TOKEN),_=K("TEMPERATURE",F4.MODEL_TEMPERATURE),O=K("FREQUENCY_PENALTY",F4.MODEL_FREQ_PENALTY),j=K("PRESENCE_PENALTY",F4.MODEL_PRESENCE_PENALTY);if(P!==null)q.maxTokens=P;if(_!==null)q.temperature=_;if(O!==null)q.frequencyPenalty=O;if(j!==null)q.presencePenalty=j;return Object.keys(q).length>0?q:null}async useModel($,q,K){let P=typeof $==="string"?$:R6[$],_=q?.prompt||q?.input||(Array.isArray(q?.messages)?JSON.stringify(q.messages):null),O=this.getModel(P,K);if(!O){let J=`No handler found for delegate type: ${P}`;throw Error(J)}this.logger.debug(`[useModel] ${P} input: `+JSON.stringify(q,rH(),2).replace(/\\n/g,`
|
|
597
597
|
`));let j;if(q===null||q===void 0||typeof q!=="object"||Array.isArray(q)||tK.isBuffer(q))j=q;else{let J=this.getModelSettings(P);if(J)j={...J,...q};else j=q}let z=typeof performance<"u"&&typeof performance.now==="function"?performance.now():Date.now();try{let J=await O(this,j),T=(typeof performance<"u"&&typeof performance.now==="function"?performance.now():Date.now())-z;if(this.logger.debug(`[useModel] ${P} output (took ${Number(T.toFixed(2)).toLocaleString()}ms):`,Array.isArray(J)?`${JSON.stringify(J.slice(0,5))}...${JSON.stringify(J.slice(-5))} (${J.length} items)`:JSON.stringify(J,rH(),2).replace(/\\n/g,`
|
|
598
598
|
`)),P!==R6.TEXT_EMBEDDING&&_){if(this.currentActionContext)this.currentActionContext.prompts.push({modelType:P,prompt:_,timestamp:Date.now()})}return this.adapter.log({entityId:this.agentId,roomId:this.agentId,body:{modelType:$,modelKey:P,params:{...typeof q==="object"&&!Array.isArray(q)&&q?q:{},prompt:_},prompt:_,runId:this.getCurrentRunId(),timestamp:Date.now(),executionTime:T,provider:K||this.models.get(P)?.[0]?.provider||"unknown",actionContext:this.currentActionContext?{actionName:this.currentActionContext.actionName,actionId:this.currentActionContext.actionId}:void 0,response:Array.isArray(J)&&J.every((X)=>typeof X==="number")?"[array]":J},type:`useModel:${P}`}),J}catch(J){throw J}}async generateText($,q){if(!$?.trim())throw Error("Input cannot be empty");let K=q?.includeCharacter??!0,P=q?.modelType??R6.TEXT_LARGE,_=$;if(K&&this.character){let z=this.character,J=[],T=Array.isArray(z.bio)?z.bio.join(" "):z.bio;if(T)J.push(`# About ${z.name}
|
|
@@ -602,7 +602,7 @@ ${X.map((w)=>`- ${w}`).join(`
|
|
|
602
602
|
|
|
603
603
|
`)}
|
|
604
604
|
|
|
605
|
-
${$}`}let O={prompt:_,maxTokens:q?.maxTokens,temperature:q?.temperature,frequencyPenalty:q?.frequencyPenalty,presencePenalty:q?.presencePenalty,stopSequences:q?.stopSequences};return{text:await this.useModel(P,O)}}registerEvent($,q){if(!this.events[$])this.events[$]=[];this.events[$].push(q)}getEvent($){return this.events[$]}async emitEvent($,q){let K=Array.isArray($)?$:[$];for(let P of K){let _=this.events[P];if(!_)continue;try{let O={runtime:this};if(typeof q==="object"&&q)O={...q,...O};await Promise.all(_.map((j)=>j(O)))}catch(O){this.logger.error(`Error during emitEvent for ${P} (handler execution): ${O}`)}}}async ensureEmbeddingDimension(){if(this.logger.debug(`[AgentRuntime][${this.character.name}] Starting ensureEmbeddingDimension`),!this.adapter)throw Error(`[AgentRuntime][${this.character.name}] Database adapter not initialized before ensureEmbeddingDimension`);try{if(!this.getModel(R6.TEXT_EMBEDDING))throw Error(`[AgentRuntime][${this.character.name}] No TEXT_EMBEDDING model registered`);this.logger.debug(`[AgentRuntime][${this.character.name}] Getting embedding dimensions`);let q=await this.useModel(R6.TEXT_EMBEDDING,null);if(!q||!q.length)throw Error(`[AgentRuntime][${this.character.name}] Invalid embedding received`);this.logger.debug(`[AgentRuntime][${this.character.name}] Setting embedding dimension: ${q.length}`),await this.adapter.ensureEmbeddingDimension(q.length),this.logger.debug(`[AgentRuntime][${this.character.name}] Successfully set embedding dimension`)}catch($){throw this.logger.debug(`[AgentRuntime][${this.character.name}] Error in ensureEmbeddingDimension: ${$}`),$}}registerTaskWorker($){if(this.taskWorkers.has($.name))this.logger.warn(`Task definition ${$.name} already registered. Will be overwritten.`);this.taskWorkers.set($.name,$)}getTaskWorker($){return this.taskWorkers.get($)}get db(){return this.adapter.db}async init(){await this.adapter.init()}async close(){if(this.adapter)await this.adapter.close()}async getAgent($){return await this.adapter.getAgent($)}async getAgents(){return await this.adapter.getAgents()}async createAgent($){return await this.adapter.createAgent($)}async updateAgent($,q){return await this.adapter.updateAgent($,q)}async deleteAgent($){return await this.adapter.deleteAgent($)}async ensureAgentExists($){if(!$.id)throw Error("Agent id is required");let q=await this.adapter.getAgent($.id);if(q){let _={...q.settings,...$.settings},O=typeof q.settings?.secrets==="object"||typeof $.settings?.secrets==="object"?{...typeof q.settings?.secrets==="object"?q.settings.secrets:{},...typeof $.settings?.secrets==="object"?$.settings.secrets:{}}:void 0;if(O)_.secrets=O;let j={...q,...$,settings:_,id:$.id,updatedAt:Date.now()};await this.adapter.updateAgent($.id,j);let z=await this.adapter.getAgent($.id);if(!z)throw Error(`Failed to retrieve agent after update: ${$.id}`);return this.logger.debug(`Updated existing agent ${$.id} on restart (merged ${Object.keys(q.settings||{}).length} DB settings with ${Object.keys($.settings||{}).length} character settings)`),z}let K={...$,id:$.id};if(!await this.adapter.createAgent(K))throw Error(`Failed to create agent: ${$.id}`);return this.logger.debug(`Created new agent ${$.id}`),K}async getEntityById($){let q=await this.adapter.getEntitiesByIds([$]);if(!q?.length)return null;return q[0]}async getEntitiesByIds($){return await this.adapter.getEntitiesByIds($)}async getEntitiesForRoom($,q){return await this.adapter.getEntitiesForRoom($,q)}async createEntity($){if(!$.agentId)$.agentId=this.agentId;return await this.createEntities([$])}async createEntities($){return $.forEach((q)=>{q.agentId=this.agentId}),await this.adapter.createEntities($)}async updateEntity($){await this.adapter.updateEntity($)}async getComponent($,q,K,P){return await this.adapter.getComponent($,q,K,P)}async getComponents($,q,K){return await this.adapter.getComponents($,q,K)}async createComponent($){return await this.adapter.createComponent($)}async updateComponent($){await this.adapter.updateComponent($)}async deleteComponent($){await this.adapter.deleteComponent($)}async addEmbeddingToMemory($){if($.embedding)return $;let q=$.content.text;if(!q)throw Error("Cannot generate embedding: Memory content is empty");try{$.embedding=await this.useModel(R6.TEXT_EMBEDDING,{text:q})}catch(K){this.logger.error("Failed to generate embedding:",K),$.embedding=await this.useModel(R6.TEXT_EMBEDDING,null)}return $}async queueEmbeddingGeneration($,q){if(q=q||"normal",!$)return;if($.embedding)return;if(!$.content?.text){this.logger.debug("Skipping embedding generation for memory without text content");return}await this.emitEvent("EMBEDDING_GENERATION_REQUESTED",{runtime:this,memory:$,priority:q,source:"runtime",retryCount:0,maxRetries:3,runId:this.getCurrentRunId()})}async getMemories($){return await this.adapter.getMemories($)}async getAllMemories(){let $=["memories","messages","facts","documents"],q=[];for(let K of $)try{let P=await this.adapter.getMemories({agentId:this.agentId,tableName:K,count:1e4});q.push(...P)}catch(P){this.logger.debug(`Failed to get memories from table ${K}: ${P}`)}return q}async getMemoryById($){return await this.adapter.getMemoryById($)}async getMemoriesByIds($,q){return await this.adapter.getMemoriesByIds($,q)}async getMemoriesByRoomIds($){return await this.adapter.getMemoriesByRoomIds($)}async getCachedEmbeddings($){return await this.adapter.getCachedEmbeddings($)}async log($){await this.adapter.log($)}async searchMemories($){let q=await this.adapter.searchMemories($);if($.query)return await this.rerankMemories($.query,q);return q}async rerankMemories($,q){let K=q.map((O)=>({title:O.id,content:O.content.text}));return new QH(K).search($,q.length).map((O)=>q[O.index])}async createMemory($,q,K){if(K!==void 0)$.unique=K;return await this.adapter.createMemory($,q,K)}async updateMemory($){return await this.adapter.updateMemory($)}async deleteMemory($){await this.adapter.deleteMemory($)}async deleteManyMemories($){await this.adapter.deleteManyMemories($)}async clearAllAgentMemories(){this.logger.info(`Clearing all memories for agent ${this.character.name} (${this.agentId})`);let q=(await this.getAllMemories()).map((K)=>K.id).filter((K)=>K!==void 0);if(q.length===0){this.logger.info("No memories found to delete");return}this.logger.info(`Found ${q.length} memories to delete`),await this.adapter.deleteManyMemories(q),this.logger.info(`Successfully cleared all ${q.length} memories for agent`)}async deleteAllMemories($,q){await this.adapter.deleteAllMemories($,q)}async countMemories($,q,K){return await this.adapter.countMemories($,q,K)}async getLogs($){return await this.adapter.getLogs($)}async deleteLog($){await this.adapter.deleteLog($)}async createWorld($){return await this.adapter.createWorld($)}async getWorld($){return await this.adapter.getWorld($)}async removeWorld($){await this.adapter.removeWorld($)}async getAllWorlds(){return await this.adapter.getAllWorlds()}async updateWorld($){await this.adapter.updateWorld($)}async getRoom($){let q=await this.adapter.getRoomsByIds([$]);if(!q?.length)return null;return q[0]}async getRoomsByIds($){return await this.adapter.getRoomsByIds($)}async createRoom({id:$,name:q,source:K,type:P,channelId:_,serverId:O,worldId:j}){if(!j)throw Error("worldId is required");let z=await this.adapter.createRooms([{id:$,name:q,source:K,type:P,channelId:_,serverId:O,worldId:j}]);if(!z.length)throw Error("Failed to create room");return z[0]}async createRooms($){return await this.adapter.createRooms($)}async deleteRoom($){await this.adapter.deleteRoom($)}async deleteRoomsByWorldId($){await this.adapter.deleteRoomsByWorldId($)}async updateRoom($){await this.adapter.updateRoom($)}async getRoomsForParticipant($){return await this.adapter.getRoomsForParticipant($)}async getRoomsForParticipants($){return await this.adapter.getRoomsForParticipants($)}async getRooms($){return await this.adapter.getRoomsByWorld($)}async getRoomsByWorld($){return await this.adapter.getRoomsByWorld($)}async getParticipantUserState($,q){return await this.adapter.getParticipantUserState($,q)}async setParticipantUserState($,q,K){await this.adapter.setParticipantUserState($,q,K)}async createRelationship($){return await this.adapter.createRelationship($)}async updateRelationship($){await this.adapter.updateRelationship($)}async getRelationship($){return await this.adapter.getRelationship($)}async getRelationships($){return await this.adapter.getRelationships($)}async getCache($){return await this.adapter.getCache($)}async setCache($,q){return await this.adapter.setCache($,q)}async deleteCache($){return await this.adapter.deleteCache($)}async createTask($){return await this.adapter.createTask($)}async getTasks($){return await this.adapter.getTasks($)}async getTask($){return await this.adapter.getTask($)}async getTasksByName($){return await this.adapter.getTasksByName($)}async updateTask($,q){await this.adapter.updateTask($,q)}async deleteTask($){await this.adapter.deleteTask($)}on($,q){if(!this.eventHandlers.has($))this.eventHandlers.set($,[]);this.eventHandlers.get($)?.push(q)}off($,q){if(!this.eventHandlers.has($))return;let K=this.eventHandlers.get($),P=K.indexOf(q);if(P!==-1)K.splice(P,1)}emit($,q){if(!this.eventHandlers.has($))return;for(let K of this.eventHandlers.get($))K(q)}async sendControlMessage($){try{let{roomId:q,action:K,target:P}=$,_={type:"control",payload:{action:K,target:P},roomId:q};await this.emitEvent("CONTROL_MESSAGE",{runtime:this,message:_,source:"agent"}),this.logger.debug(`Sent control message: ${K} to room ${q}`)}catch(q){this.logger.error(`Error sending control message: ${q}`)}}registerSendHandler($,q){if(this.sendHandlers.has($))this.logger.warn(`Send handler for source '${$}' already registered. Overwriting.`);this.sendHandlers.set($,q),this.logger.info(`Registered send handler for source: ${$}`)}async sendMessageToTarget($,q){let K=this.sendHandlers.get($.source);if(!K){let P=`No send handler registered for source: ${$.source}`;throw this.logger.error(P),Error(P)}try{await K(this,$,q)}catch(P){throw this.logger.error(`Error executing send handler for source ${$.source}:`,P),P}}async getMemoriesByWorldId($){return await this.adapter.getMemoriesByWorldId($)}async runMigrations($){if(this.adapter&&"runMigrations"in this.adapter)await this.adapter.runMigrations($);else this.logger.warn("Database adapter does not support migrations.")}async isReady(){if(!this.adapter)throw Error("Database adapter not registered");return await this.adapter.isReady()}}async function rn($){let q={};for(let[_,O]of Object.entries(process.env))if(O!==void 0)q[_]=O;if(!$.settings)$.settings={};let K={...$.settings},P=$.settings.secrets&&typeof $.settings.secrets==="object"?{...$.settings.secrets}:{};return $.settings={...q,...K},$.settings.secrets={...q,...P},!0}async function aM($){if(g4()!=="node")return!1;return rn($)}function nn(){try{return typeof process<"u"&&(process.versions?.node!==void 0||process.versions?.bun!==void 0)}catch{return!1}}function eH(){if(nn())return pq(),W6(cq);return R8("crypto-browserify")}function sH($){let K=eH().createHash($);return{update(P){return K.update(P),this},digest(){return new Uint8Array(K.digest())}}}function eM($,q,K){if($!=="aes-256-cbc")throw Error(`Unsupported algorithm: ${$}. Only 'aes-256-cbc' is currently supported.`);return eH().createCipheriv($,q,K)}function sM($,q,K){if($!=="aes-256-cbc")throw Error(`Unsupported algorithm: ${$}. Only 'aes-256-cbc' is currently supported.`);return eH().createDecipheriv($,q,K)}function tn($){return{name:$.name,description:$.description,usageDescription:$.usageDescription||"",value:null,required:$.required,validation:$.validation||void 0,public:$.public||!1,secret:$.secret||!1,dependsOn:$.dependsOn||[],onSetAction:$.onSetAction||void 0,visibleIf:$.visibleIf||void 0}}var i4=null,$J=!1,Un=300000;function I_(){let $=iK("SECRET_SALT","secretsalt")||"secretsalt",q=Date.now();if(i4!==null){if(q-i4.timestamp<Un&&i4.value===$)return i4.value}if($==="secretsalt"&&!$J)j6.warn("SECRET_SALT is not set or using default value"),$J=!0;return i4={value:$,timestamp:q},$}function E7$(){i4=null,$J=!1}function K0($,q){if($===void 0||$===null)return j6.debug("Attempted to encrypt undefined or null value"),$;if(typeof $==="boolean"||typeof $==="number")return j6.debug("Value is a boolean or number, returning as is"),$;if(typeof $!=="string")return j6.debug(`Value is not a string (type: ${typeof $}), returning as is`),$;let K=$.split(":");if(K.length===2)try{if(tK.fromHex(K[0]).length===16)return j6.debug("Value appears to be already encrypted, skipping re-encryption"),$}catch(z){}let P=sH("sha256").update(q).digest().slice(0,32),_=tK.randomBytes(16),O=eM("aes-256-cbc",P,_),j=O.update($,"utf8","hex");return j+=O.final("hex"),`${tK.toHex(_)}:${j}`}function zO($,q){try{if($===void 0||$===null)return $;if(typeof $==="boolean"||typeof $==="number")return $;if(typeof $!=="string")return j6.debug(`Value is not a string (type: ${typeof $}), returning as is`),$;let K=$.split(":");if(K.length!==2)return $;let P=tK.fromHex(K[0]),_=K[1];if(P.length!==16){if(P.length)j6.debug(`Invalid IV length (${P.length}) - expected 16 bytes`);return $}let O=sH("sha256").update(q).digest().slice(0,32),j=sM("aes-256-cbc",O,P),z=j.update(_,"hex","utf8");return z+=j.final("utf8"),z}catch(K){return j6.error(`Error decrypting value: ${K}`),$}}function Fn($,q){let K={...$};if($.secret===!0&&typeof $.value==="string"&&$.value)K.value=K0($.value,q);return K}function Qn($,q){let K={...$};if($.secret===!0&&typeof $.value==="string"&&$.value)K.value=zO($.value,q);return K}function an($,q){let K={};for(let[P,_]of Object.entries($))K[P]=Fn(_,q);return K}function _0($,q){let K={};for(let[P,_]of Object.entries($))K[P]=Qn(_,q);return K}async function h7$($,q,K){let P=Q8($,q),_=await $.getWorld(P);if(!_)return j6.error(`No world found for server ${q}`),!1;if(!_.metadata)_.metadata={};let O=I_(),j=an(K,O);return _.metadata.settings=j,await $.updateWorld(_),!0}async function R7$($,q){let K=Q8($,q),P=await $.getWorld(K);if(!P||!P.metadata?.settings)return null;let _=P.metadata.settings,O=I_();return _0(_,O)}async function I7$($,q,K){if(q.metadata?.settings){j6.info(`Onboarding state already exists for server ${q.serverId}`);let _=q.metadata.settings,O=I_();return _0(_,O)}let P={};if(K.settings)for(let[_,O]of Object.entries(K.settings))P[_]=tn(O);if(!q.metadata)q.metadata={};return q.metadata.settings=P,await $.updateWorld(q),j6.info(`Initialized settings config for server ${q.serverId}`),P}function D7$($){let q=JSON.parse(JSON.stringify($)),K=I_();if(q.settings?.secrets)q.settings.secrets=$0(q.settings.secrets,K);if(q.secrets)q.secrets=$0(q.secrets,K);return q}function L7$($,q){let K=JSON.parse(JSON.stringify($)),P=I_();if(K.settings?.secrets)K.settings.secrets=q0(K.settings.secrets,P);if(K.secrets)K.secrets=q0(K.secrets,P);return K}function $0($,q){let K={};for(let[P,_]of Object.entries($))if(typeof _==="string"&&_)K[P]=K0(_,q);else K[P]=_;return K}function q0($,q){let K={};for(let[P,_]of Object.entries($))if(typeof _==="string"&&_)K[P]=zO(_,q);else K[P]=_;return K}class P0{serviceType;startFn;stopFn;description;constructor($){this.serviceType=$,this.description=""}withDescription($){return this.description=$,this}withStart($){return this.startFn=$,this}withStop($){return this.stopFn=$,this}build(){let $=this.serviceType,q=this.description,K=this.startFn,P=this.stopFn;return class extends TO{static serviceType=$;capabilityDescription=q;static async start(_){if(!K)throw Error(`Start function not defined for service ${$}`);return K(_)}async stop(){if(P)await P()}}}}function en($){return new P0($)}function y7$($){return en($.serviceType).withDescription($.description).withStart($.start).withStop($.stop||(()=>Promise.resolve())).build()}var j0=new Set;function sn(){if(process.env.ELIZA_NO_AUTO_INSTALL==="true")return!1;if(process.env.ELIZA_NO_PLUGIN_AUTO_INSTALL==="true")return!1;if(process.env.CI==="true")return!1;if(process.env.ELIZA_TEST_MODE==="true")return!1;return!0}async function $i($){try{if(!sn())return j6.debug(`Auto-install disabled or not allowed in this environment. Skipping install for ${$}.`),!1;if(j0.has($))return j6.debug(`Auto-install already attempted for ${$}. Skipping.`),!1;if(j0.add($),typeof Bun>"u"||typeof Bun.spawn!=="function")return j6.warn(`Bun runtime not available. Cannot auto-install ${$}. Please run: bun add ${$}`),!1;try{if(await Bun.spawn(["bun","--version"],{stdout:"pipe",stderr:"pipe"}).exited!==0)return j6.warn(`Bun not available on PATH. Cannot auto-install ${$}. Please run: bun add ${$}`),!1}catch{return j6.warn(`Bun not available on PATH. Cannot auto-install ${$}. Please run: bun add ${$}`),!1}j6.info(`Attempting to auto-install missing plugin: ${$}`);let K=await Bun.spawn(["bun","add",$],{cwd:process.cwd(),env:process.env,stdout:"inherit",stderr:"inherit"}).exited;if(K===0)return j6.info(`Successfully installed ${$}. Retrying import...`),!0;return j6.error(`bun add ${$} failed with exit code ${K}. Please install manually.`),!1}catch(q){let K=q instanceof Error?q.message:String(q);return j6.error(`Unexpected error during auto-install of ${$}: ${K}`),!1}}function O0($){if(!$||typeof $!=="object")return!1;let q=$;if(!q.name)return!1;return!!(q.init||q.services||q.providers||q.actions||q.evaluators||q.description)}function qi($){let q=[];if(!$)return q.push("Plugin is null or undefined"),{isValid:!1,errors:q};let K=$;if(!K.name)q.push("Plugin must have a name");if(K.actions){if(!Array.isArray(K.actions))q.push("Plugin actions must be an array");else if(K.actions.filter((_)=>typeof _!=="object"||!_).length>0)q.push("Plugin actions must be an array of action objects")}if(K.services){if(!Array.isArray(K.services))q.push("Plugin services must be an array");else if(K.services.filter((_)=>typeof _!=="function"&&(typeof _!=="object"||!_)).length>0)q.push("Plugin services must be an array of service classes or objects")}if(K.providers&&!Array.isArray(K.providers))q.push("Plugin providers must be an array");if(K.evaluators&&!Array.isArray(K.evaluators))q.push("Plugin evaluators must be an array");return{isValid:q.length===0,errors:q}}async function Ki($){try{let q;try{q=await import($)}catch(O){if(j6.warn(`Failed to load plugin ${$}: ${O}`),!await $i($))return null;try{q=await import($)}catch(z){return j6.error(`Auto-install attempted for ${$} but import still failed: ${z}`),null}}if(!q)return j6.error(`Failed to load module for plugin ${$}.`),null;let K=`${$.replace(/^@elizaos\/plugin-/,"").replace(/^@elizaos\//,"").replace(/-./g,(O)=>O[1].toUpperCase())}Plugin`,P=q,_=[P[K],P.default,...Object.values(P)];for(let O of _){if(O0(O))return O;if(typeof O==="function"&&O.length===0)try{let j=O();if(O0(j))return j}catch(j){j6.debug(`Factory export threw for ${$}: ${j}`)}}return j6.warn(`Could not find a valid plugin export in ${$}.`),null}catch(q){return j6.error(`Error loading plugin ${$}: ${q}`),null}}function Y0($,q=!1){let K=[],P=new Set,_=new Set;function O(z){if(!$.has(z)){j6.warn(`Plugin dependency "${z}" not found and will be skipped.`);return}if(P.has(z))return;if(_.has(z)){j6.error(`Circular dependency detected involving plugin: ${z}`);return}_.add(z);let J=$.get(z);if(J){let T=[...J.dependencies||[]];if(q)T.push(...J.testDependencies||[]);for(let X of T)O(X)}_.delete(z),P.add(z),K.push(z)}for(let z of $.keys())if(!P.has(z))O(z);let j=K.map((z)=>$.get(z)).filter((z)=>Boolean(z));return j6.info({plugins:j.map((z)=>z.name)},"Final plugins being loaded:"),j}async function _i($){if(typeof $==="string")return Ki($);let q=qi($);if(!q.isValid)return j6.error(`Invalid plugin provided: ${q.errors.join(", ")}`),null;return $}async function Pi($,q=!1){let K=new Map,P=[...$];while(P.length>0){let _=P.shift(),O=await _i(_);if(!O)continue;if(!K.has(O.name)){K.set(O.name,O);for(let j of O.dependencies??[])if(!K.has(j))P.push(j);if(q){for(let j of O.testDependencies??[])if(!K.has(j))P.push(j)}}}return Y0(K,q)}async function v0($,q=!1){if(g4()==="node")return Pi($,q);let P=$.filter((O)=>typeof O!=="string");if($.some((O)=>typeof O==="string"))j6.warn("Browser environment: String plugin references are not supported. Only Plugin objects will be used. Skipped plugins: "+$.filter((O)=>typeof O==="string").join(", "));let _=new Map;for(let O of P)_.set(O.name,O);return Y0(_,q)}class ji extends EventTarget{runtimes=new Map;initFunctions=new Map;editableMode=!1;async addAgents($,q){let K=$.map(async(_)=>{let O=_.character;await aM(O);let j=_.plugins?await v0(_.plugins,q?.isTestMode||!1):[],z=new aH({character:O,plugins:j,settings:_.settings||{}});if(this.runtimes.set(z.agentId,z),typeof _.init==="function")this.initFunctions.set(z.agentId,_.init);let{settings:J,...T}=O,{secrets:X,...w}=J||{};return this.dispatchEvent(new CustomEvent("agent:added",{detail:{agentId:z.agentId,character:{...T,settings:w}}})),z.agentId}),P=await Promise.all(K);return this.dispatchEvent(new CustomEvent("agents:added",{detail:{agentIds:P,count:P.length}})),P}registerAgent($){if(this.runtimes.has($.agentId))throw Error(`Agent ${$.agentId} already registered`);this.runtimes.set($.agentId,$),this.dispatchEvent(new CustomEvent("agent:registered",{detail:{agentId:$.agentId,runtime:$}}))}async updateAgent($,q){if(!this.editableMode)throw Error("Editable mode not enabled");let K=this.runtimes.get($);if(!K)throw Error(`Agent ${$} not found`);Object.assign(K.character,q),this.dispatchEvent(new CustomEvent("agent:updated",{detail:{agentId:$,updates:q}}))}async deleteAgents($){await this.stopAgents($);for(let q of $)this.runtimes.delete(q),this.initFunctions.delete(q);this.dispatchEvent(new CustomEvent("agents:deleted",{detail:{agentIds:$,count:$.length}}))}async startAgents($){let q=$||Array.from(this.runtimes.keys());await Promise.all(q.map(async(K)=>{let P=this.runtimes.get(K);if(!P)throw Error(`Agent ${K} not found`);await P.initialize(),this.dispatchEvent(new CustomEvent("agent:started",{detail:{agentId:K}}))}));for(let K of q){let P=this.initFunctions.get(K);if(P){let _=this.runtimes.get(K);if(_)await P(_),this.initFunctions.delete(K)}}this.dispatchEvent(new CustomEvent("agents:started",{detail:{agentIds:q,count:q.length}}))}async stopAgents($){let q=$||Array.from(this.runtimes.keys());await Promise.all(q.map(async(K)=>{let P=this.runtimes.get(K);if(P)await P.stop()})),this.dispatchEvent(new CustomEvent("agents:stopped",{detail:{agentIds:q,count:q.length}}))}getAgent($){return this.runtimes.get($)}getAgents(){return Array.from(this.runtimes.values())}getAgentsByIds($){return $.map((q)=>this.runtimes.get(q)).filter((q)=>q!==void 0)}getAgentsByNames($){let q=new Set($.map((K)=>K.toLowerCase()));return this.getAgents().filter((K)=>q.has(K.character.name.toLowerCase()))}getAgentById($){return this.getAgent($)}getAgentByName($){let q=$.toLowerCase();return this.getAgents().find((K)=>K.character.name.toLowerCase()===q)}getAgentByCharacterName($){return this.getAgentByName($)}getAgentByCharacterId($){return this.getAgents().find((q)=>q.character.id===$)}async sendMessage($,q,K){let P=this.runtimes.get($);if(!P)throw Error(`Agent ${$} not found`);if(!P.messageService)throw Error("messageService is not initialized on runtime");let _=q.id||hq(),O={...q,id:_,agentId:q.agentId||P.agentId,createdAt:q.createdAt||Date.now(),entityId:q.entityId,roomId:q.roomId,content:q.content};await P.ensureConnection({entityId:O.entityId,roomId:O.roomId,worldId:q.worldId||O.roomId,source:O.content.source||"unknown",channelId:O.roomId});let j={maxRetries:K?.maxRetries,timeoutDuration:K?.timeoutDuration,useMultiStep:K?.useMultiStep,maxMultiStepIterations:K?.maxMultiStepIterations};if(!!K?.onResponse){let J=async(T)=>{try{if(K.onResponse)await K.onResponse(T)}catch(X){if(K.onError)await K.onError(X instanceof Error?X:Error(String(X)))}return[]};return P.messageService.handleMessage(P,O,J,j).then(()=>{if(K.onComplete)K.onComplete()}).catch((T)=>{if(K.onError)K.onError(T)}),this.dispatchEvent(new CustomEvent("message:sent",{detail:{agentId:$,messageId:_,mode:"async"}})),{messageId:_,userMessage:O}}else{let J=await P.messageService.handleMessage(P,O,void 0,j);if(K?.onComplete)await K.onComplete();return this.dispatchEvent(new CustomEvent("message:sent",{detail:{agentId:$,messageId:_,mode:"sync",result:J}})),{messageId:_,userMessage:O,result:J}}}async sendMessages($){let q=await Promise.all($.map(async({agentId:K,message:P,options:_})=>{try{let O=await this.sendMessage(K,P,_);return{agentId:K,result:O}}catch(O){return{agentId:K,result:{messageId:P.id||"",userMessage:P},error:O instanceof Error?O:Error(String(O))}}}));return this.dispatchEvent(new CustomEvent("messages:sent",{detail:{results:q,count:$.length}})),q}async validateApiKeys($){let q=new Map,K=$||Array.from(this.runtimes.keys());for(let P of K){let _=this.runtimes.get(P);if(_){let O=!!(_.getSetting("OPENAI_API_KEY")||_.getSetting("ANTHROPIC_API_KEY"));q.set(P,O)}}return q}async healthCheck($){let q=new Map,K=$||Array.from(this.runtimes.keys());for(let P of K){let O={alive:!!this.runtimes.get(P),responsive:!0};if(typeof process<"u")O.memoryUsage=process.memoryUsage().heapUsed,O.uptime=process.uptime();q.set(P,O)}return q}getRuntimeAccessor(){return{getAgent:($)=>this.getAgent($),getAgents:()=>this.getAgents(),getState:($)=>{let q=this.getAgent($);if(!q)return;let K=q;if(K.stateCache&&K.stateCache.size>0){let P=Array.from(K.stateCache.values());return P[P.length-1]}return}}}enableEditableMode(){this.editableMode=!0,this.dispatchEvent(new CustomEvent("mode:editable",{detail:{editable:!0}}))}}var Oi=`# Task: Resolve Entity Name
|
|
605
|
+
${$}`}let O={prompt:_,maxTokens:q?.maxTokens,temperature:q?.temperature,frequencyPenalty:q?.frequencyPenalty,presencePenalty:q?.presencePenalty,stopSequences:q?.stopSequences};return{text:await this.useModel(P,O)}}registerEvent($,q){if(!this.events[$])this.events[$]=[];this.events[$].push(q)}getEvent($){return this.events[$]}async emitEvent($,q){let K=Array.isArray($)?$:[$];for(let P of K){let _=this.events[P];if(!_)continue;try{let O={runtime:this};if(typeof q==="object"&&q)O={...q,...O};await Promise.all(_.map((j)=>j(O)))}catch(O){this.logger.error(`Error during emitEvent for ${P} (handler execution): ${O}`)}}}async ensureEmbeddingDimension(){if(this.logger.debug(`[AgentRuntime][${this.character.name}] Starting ensureEmbeddingDimension`),!this.adapter)throw Error(`[AgentRuntime][${this.character.name}] Database adapter not initialized before ensureEmbeddingDimension`);try{if(!this.getModel(R6.TEXT_EMBEDDING))throw Error(`[AgentRuntime][${this.character.name}] No TEXT_EMBEDDING model registered`);this.logger.debug(`[AgentRuntime][${this.character.name}] Getting embedding dimensions`);let q=await this.useModel(R6.TEXT_EMBEDDING,null);if(!q||!q.length)throw Error(`[AgentRuntime][${this.character.name}] Invalid embedding received`);this.logger.debug(`[AgentRuntime][${this.character.name}] Setting embedding dimension: ${q.length}`),await this.adapter.ensureEmbeddingDimension(q.length),this.logger.debug(`[AgentRuntime][${this.character.name}] Successfully set embedding dimension`)}catch($){throw this.logger.debug(`[AgentRuntime][${this.character.name}] Error in ensureEmbeddingDimension: ${$}`),$}}registerTaskWorker($){if(this.taskWorkers.has($.name))this.logger.warn(`Task definition ${$.name} already registered. Will be overwritten.`);this.taskWorkers.set($.name,$)}getTaskWorker($){return this.taskWorkers.get($)}get db(){return this.adapter.db}async init(){await this.adapter.init()}async close(){if(this.adapter)await this.adapter.close()}async getAgent($){return await this.adapter.getAgent($)}async getAgents(){return await this.adapter.getAgents()}async createAgent($){return await this.adapter.createAgent($)}async updateAgent($,q){return await this.adapter.updateAgent($,q)}async deleteAgent($){return await this.adapter.deleteAgent($)}async ensureAgentExists($){if(!$.id)throw Error("Agent id is required");let q=await this.adapter.getAgent($.id);if(q){let _={...q.settings,...$.settings},O=typeof q.settings?.secrets==="object"||typeof $.settings?.secrets==="object"?{...typeof q.settings?.secrets==="object"?q.settings.secrets:{},...typeof $.settings?.secrets==="object"?$.settings.secrets:{}}:void 0;if(O)_.secrets=O;let j={...q,...$,settings:_,id:$.id,updatedAt:Date.now()};await this.adapter.updateAgent($.id,j);let z=await this.adapter.getAgent($.id);if(!z)throw Error(`Failed to retrieve agent after update: ${$.id}`);return this.logger.debug(`Updated existing agent ${$.id} on restart (merged ${Object.keys(q.settings||{}).length} DB settings with ${Object.keys($.settings||{}).length} character settings)`),z}let K={...$,id:$.id};if(!await this.adapter.createAgent(K))throw Error(`Failed to create agent: ${$.id}`);return this.logger.debug(`Created new agent ${$.id}`),K}async getEntityById($){let q=await this.adapter.getEntitiesByIds([$]);if(!q?.length)return null;return q[0]}async getEntitiesByIds($){return await this.adapter.getEntitiesByIds($)}async getEntitiesForRoom($,q){return await this.adapter.getEntitiesForRoom($,q)}async createEntity($){if(!$.agentId)$.agentId=this.agentId;return await this.createEntities([$])}async createEntities($){return $.forEach((q)=>{q.agentId=this.agentId}),await this.adapter.createEntities($)}async updateEntity($){await this.adapter.updateEntity($)}async getComponent($,q,K,P){return await this.adapter.getComponent($,q,K,P)}async getComponents($,q,K){return await this.adapter.getComponents($,q,K)}async createComponent($){return await this.adapter.createComponent($)}async updateComponent($){await this.adapter.updateComponent($)}async deleteComponent($){await this.adapter.deleteComponent($)}async addEmbeddingToMemory($){if($.embedding)return $;let q=$.content.text;if(!q)throw Error("Cannot generate embedding: Memory content is empty");try{$.embedding=await this.useModel(R6.TEXT_EMBEDDING,{text:q})}catch(K){this.logger.error("Failed to generate embedding:",K),$.embedding=await this.useModel(R6.TEXT_EMBEDDING,null)}return $}async queueEmbeddingGeneration($,q){if(q=q||"normal",!$)return;if($.embedding)return;if(!$.content?.text){this.logger.debug("Skipping embedding generation for memory without text content");return}await this.emitEvent("EMBEDDING_GENERATION_REQUESTED",{runtime:this,memory:$,priority:q,source:"runtime",retryCount:0,maxRetries:3,runId:this.getCurrentRunId()})}async getMemories($){return await this.adapter.getMemories($)}async getAllMemories(){let $=["memories","messages","facts","documents"],q=[];for(let K of $)try{let P=await this.adapter.getMemories({agentId:this.agentId,tableName:K,count:1e4});q.push(...P)}catch(P){this.logger.debug(`Failed to get memories from table ${K}: ${P}`)}return q}async getMemoryById($){return await this.adapter.getMemoryById($)}async getMemoriesByIds($,q){return await this.adapter.getMemoriesByIds($,q)}async getMemoriesByRoomIds($){return await this.adapter.getMemoriesByRoomIds($)}async getCachedEmbeddings($){return await this.adapter.getCachedEmbeddings($)}async log($){await this.adapter.log($)}async searchMemories($){let q=await this.adapter.searchMemories($);if($.query)return await this.rerankMemories($.query,q);return q}async rerankMemories($,q){let K=q.map((O)=>({title:O.id,content:O.content.text}));return new QH(K).search($,q.length).map((O)=>q[O.index])}async createMemory($,q,K){if(K!==void 0)$.unique=K;return await this.adapter.createMemory($,q,K)}async updateMemory($){return await this.adapter.updateMemory($)}async deleteMemory($){await this.adapter.deleteMemory($)}async deleteManyMemories($){await this.adapter.deleteManyMemories($)}async clearAllAgentMemories(){this.logger.info(`Clearing all memories for agent ${this.character.name} (${this.agentId})`);let q=(await this.getAllMemories()).map((K)=>K.id).filter((K)=>K!==void 0);if(q.length===0){this.logger.info("No memories found to delete");return}this.logger.info(`Found ${q.length} memories to delete`),await this.adapter.deleteManyMemories(q),this.logger.info(`Successfully cleared all ${q.length} memories for agent`)}async deleteAllMemories($,q){await this.adapter.deleteAllMemories($,q)}async countMemories($,q,K){return await this.adapter.countMemories($,q,K)}async getLogs($){return await this.adapter.getLogs($)}async deleteLog($){await this.adapter.deleteLog($)}async createWorld($){return await this.adapter.createWorld($)}async getWorld($){return await this.adapter.getWorld($)}async removeWorld($){await this.adapter.removeWorld($)}async getAllWorlds(){return await this.adapter.getAllWorlds()}async updateWorld($){await this.adapter.updateWorld($)}async getRoom($){let q=await this.adapter.getRoomsByIds([$]);if(!q?.length)return null;return q[0]}async getRoomsByIds($){return await this.adapter.getRoomsByIds($)}async createRoom({id:$,name:q,source:K,type:P,channelId:_,serverId:O,worldId:j}){if(!j)throw Error("worldId is required");let z=await this.adapter.createRooms([{id:$,name:q,source:K,type:P,channelId:_,serverId:O,worldId:j}]);if(!z.length)throw Error("Failed to create room");return z[0]}async createRooms($){return await this.adapter.createRooms($)}async deleteRoom($){await this.adapter.deleteRoom($)}async deleteRoomsByWorldId($){await this.adapter.deleteRoomsByWorldId($)}async updateRoom($){await this.adapter.updateRoom($)}async getRoomsForParticipant($){return await this.adapter.getRoomsForParticipant($)}async getRoomsForParticipants($){return await this.adapter.getRoomsForParticipants($)}async getRooms($){return await this.adapter.getRoomsByWorld($)}async getRoomsByWorld($){return await this.adapter.getRoomsByWorld($)}async getParticipantUserState($,q){return await this.adapter.getParticipantUserState($,q)}async setParticipantUserState($,q,K){await this.adapter.setParticipantUserState($,q,K)}async createRelationship($){return await this.adapter.createRelationship($)}async updateRelationship($){await this.adapter.updateRelationship($)}async getRelationship($){return await this.adapter.getRelationship($)}async getRelationships($){return await this.adapter.getRelationships($)}async getCache($){return await this.adapter.getCache($)}async setCache($,q){return await this.adapter.setCache($,q)}async deleteCache($){return await this.adapter.deleteCache($)}async createTask($){return await this.adapter.createTask($)}async getTasks($){return await this.adapter.getTasks($)}async getTask($){return await this.adapter.getTask($)}async getTasksByName($){return await this.adapter.getTasksByName($)}async updateTask($,q){await this.adapter.updateTask($,q)}async deleteTask($){await this.adapter.deleteTask($)}on($,q){if(!this.eventHandlers.has($))this.eventHandlers.set($,[]);this.eventHandlers.get($)?.push(q)}off($,q){if(!this.eventHandlers.has($))return;let K=this.eventHandlers.get($),P=K.indexOf(q);if(P!==-1)K.splice(P,1)}emit($,q){if(!this.eventHandlers.has($))return;for(let K of this.eventHandlers.get($))K(q)}async sendControlMessage($){try{let{roomId:q,action:K,target:P}=$,_={type:"control",payload:{action:K,target:P},roomId:q};await this.emitEvent("CONTROL_MESSAGE",{runtime:this,message:_,source:"agent"}),this.logger.debug(`Sent control message: ${K} to room ${q}`)}catch(q){this.logger.error(`Error sending control message: ${q}`)}}registerSendHandler($,q){if(this.sendHandlers.has($))this.logger.warn(`Send handler for source '${$}' already registered. Overwriting.`);this.sendHandlers.set($,q),this.logger.info(`Registered send handler for source: ${$}`)}async sendMessageToTarget($,q){let K=this.sendHandlers.get($.source);if(!K){let P=`No send handler registered for source: ${$.source}`;throw this.logger.error(P),Error(P)}try{await K(this,$,q)}catch(P){throw this.logger.error(`Error executing send handler for source ${$.source}:`,P),P}}async getMemoriesByWorldId($){return await this.adapter.getMemoriesByWorldId($)}async runMigrations($){if(this.adapter&&"runMigrations"in this.adapter)await this.adapter.runMigrations($);else this.logger.warn("Database adapter does not support migrations.")}async isReady(){if(!this.adapter)throw Error("Database adapter not registered");return await this.adapter.isReady()}hasElizaOS(){return this.elizaOS!==void 0}}async function rn($){let q={};for(let[_,O]of Object.entries(process.env))if(O!==void 0)q[_]=O;if(!$.settings)$.settings={};let K={...$.settings},P=$.settings.secrets&&typeof $.settings.secrets==="object"?{...$.settings.secrets}:{};return $.settings={...q,...K},$.settings.secrets={...q,...P},!0}async function aM($){if(g4()!=="node")return!1;return rn($)}function nn(){try{return typeof process<"u"&&(process.versions?.node!==void 0||process.versions?.bun!==void 0)}catch{return!1}}function eH(){if(nn())return pq(),W6(cq);return R8("crypto-browserify")}function sH($){let K=eH().createHash($);return{update(P){return K.update(P),this},digest(){return new Uint8Array(K.digest())}}}function eM($,q,K){if($!=="aes-256-cbc")throw Error(`Unsupported algorithm: ${$}. Only 'aes-256-cbc' is currently supported.`);return eH().createCipheriv($,q,K)}function sM($,q,K){if($!=="aes-256-cbc")throw Error(`Unsupported algorithm: ${$}. Only 'aes-256-cbc' is currently supported.`);return eH().createDecipheriv($,q,K)}function tn($){return{name:$.name,description:$.description,usageDescription:$.usageDescription||"",value:null,required:$.required,validation:$.validation||void 0,public:$.public||!1,secret:$.secret||!1,dependsOn:$.dependsOn||[],onSetAction:$.onSetAction||void 0,visibleIf:$.visibleIf||void 0}}var i4=null,$J=!1,Un=300000;function I_(){let $=iK("SECRET_SALT","secretsalt")||"secretsalt",q=Date.now();if(i4!==null){if(q-i4.timestamp<Un&&i4.value===$)return i4.value}if($==="secretsalt"&&!$J)j6.warn("SECRET_SALT is not set or using default value"),$J=!0;return i4={value:$,timestamp:q},$}function E7$(){i4=null,$J=!1}function K0($,q){if($===void 0||$===null)return j6.debug("Attempted to encrypt undefined or null value"),$;if(typeof $==="boolean"||typeof $==="number")return j6.debug("Value is a boolean or number, returning as is"),$;if(typeof $!=="string")return j6.debug(`Value is not a string (type: ${typeof $}), returning as is`),$;let K=$.split(":");if(K.length===2)try{if(tK.fromHex(K[0]).length===16)return j6.debug("Value appears to be already encrypted, skipping re-encryption"),$}catch(z){}let P=sH("sha256").update(q).digest().slice(0,32),_=tK.randomBytes(16),O=eM("aes-256-cbc",P,_),j=O.update($,"utf8","hex");return j+=O.final("hex"),`${tK.toHex(_)}:${j}`}function zO($,q){try{if($===void 0||$===null)return $;if(typeof $==="boolean"||typeof $==="number")return $;if(typeof $!=="string")return j6.debug(`Value is not a string (type: ${typeof $}), returning as is`),$;let K=$.split(":");if(K.length!==2)return $;let P=tK.fromHex(K[0]),_=K[1];if(P.length!==16){if(P.length)j6.debug(`Invalid IV length (${P.length}) - expected 16 bytes`);return $}let O=sH("sha256").update(q).digest().slice(0,32),j=sM("aes-256-cbc",O,P),z=j.update(_,"hex","utf8");return z+=j.final("utf8"),z}catch(K){return j6.error(`Error decrypting value: ${K}`),$}}function Fn($,q){let K={...$};if($.secret===!0&&typeof $.value==="string"&&$.value)K.value=K0($.value,q);return K}function Qn($,q){let K={...$};if($.secret===!0&&typeof $.value==="string"&&$.value)K.value=zO($.value,q);return K}function an($,q){let K={};for(let[P,_]of Object.entries($))K[P]=Fn(_,q);return K}function _0($,q){let K={};for(let[P,_]of Object.entries($))K[P]=Qn(_,q);return K}async function h7$($,q,K){let P=Q8($,q),_=await $.getWorld(P);if(!_)return j6.error(`No world found for server ${q}`),!1;if(!_.metadata)_.metadata={};let O=I_(),j=an(K,O);return _.metadata.settings=j,await $.updateWorld(_),!0}async function R7$($,q){let K=Q8($,q),P=await $.getWorld(K);if(!P||!P.metadata?.settings)return null;let _=P.metadata.settings,O=I_();return _0(_,O)}async function I7$($,q,K){if(q.metadata?.settings){j6.info(`Onboarding state already exists for server ${q.serverId}`);let _=q.metadata.settings,O=I_();return _0(_,O)}let P={};if(K.settings)for(let[_,O]of Object.entries(K.settings))P[_]=tn(O);if(!q.metadata)q.metadata={};return q.metadata.settings=P,await $.updateWorld(q),j6.info(`Initialized settings config for server ${q.serverId}`),P}function D7$($){let q=JSON.parse(JSON.stringify($)),K=I_();if(q.settings?.secrets)q.settings.secrets=$0(q.settings.secrets,K);if(q.secrets)q.secrets=$0(q.secrets,K);return q}function L7$($,q){let K=JSON.parse(JSON.stringify($)),P=I_();if(K.settings?.secrets)K.settings.secrets=q0(K.settings.secrets,P);if(K.secrets)K.secrets=q0(K.secrets,P);return K}function $0($,q){let K={};for(let[P,_]of Object.entries($))if(typeof _==="string"&&_)K[P]=K0(_,q);else K[P]=_;return K}function q0($,q){let K={};for(let[P,_]of Object.entries($))if(typeof _==="string"&&_)K[P]=zO(_,q);else K[P]=_;return K}class P0{serviceType;startFn;stopFn;description;constructor($){this.serviceType=$,this.description=""}withDescription($){return this.description=$,this}withStart($){return this.startFn=$,this}withStop($){return this.stopFn=$,this}build(){let $=this.serviceType,q=this.description,K=this.startFn,P=this.stopFn;return class extends TO{static serviceType=$;capabilityDescription=q;static async start(_){if(!K)throw Error(`Start function not defined for service ${$}`);return K(_)}async stop(){if(P)await P()}}}}function en($){return new P0($)}function y7$($){return en($.serviceType).withDescription($.description).withStart($.start).withStop($.stop||(()=>Promise.resolve())).build()}var j0=new Set;function sn(){if(process.env.ELIZA_NO_AUTO_INSTALL==="true")return!1;if(process.env.ELIZA_NO_PLUGIN_AUTO_INSTALL==="true")return!1;if(process.env.CI==="true")return!1;if(process.env.ELIZA_TEST_MODE==="true")return!1;return!0}async function $i($){try{if(!sn())return j6.debug(`Auto-install disabled or not allowed in this environment. Skipping install for ${$}.`),!1;if(j0.has($))return j6.debug(`Auto-install already attempted for ${$}. Skipping.`),!1;if(j0.add($),typeof Bun>"u"||typeof Bun.spawn!=="function")return j6.warn(`Bun runtime not available. Cannot auto-install ${$}. Please run: bun add ${$}`),!1;try{if(await Bun.spawn(["bun","--version"],{stdout:"pipe",stderr:"pipe"}).exited!==0)return j6.warn(`Bun not available on PATH. Cannot auto-install ${$}. Please run: bun add ${$}`),!1}catch{return j6.warn(`Bun not available on PATH. Cannot auto-install ${$}. Please run: bun add ${$}`),!1}j6.info(`Attempting to auto-install missing plugin: ${$}`);let K=await Bun.spawn(["bun","add",$],{cwd:process.cwd(),env:process.env,stdout:"inherit",stderr:"inherit"}).exited;if(K===0)return j6.info(`Successfully installed ${$}. Retrying import...`),!0;return j6.error(`bun add ${$} failed with exit code ${K}. Please install manually.`),!1}catch(q){let K=q instanceof Error?q.message:String(q);return j6.error(`Unexpected error during auto-install of ${$}: ${K}`),!1}}function O0($){if(!$||typeof $!=="object")return!1;let q=$;if(!q.name)return!1;return!!(q.init||q.services||q.providers||q.actions||q.evaluators||q.description)}function qi($){let q=[];if(!$)return q.push("Plugin is null or undefined"),{isValid:!1,errors:q};let K=$;if(!K.name)q.push("Plugin must have a name");if(K.actions){if(!Array.isArray(K.actions))q.push("Plugin actions must be an array");else if(K.actions.filter((_)=>typeof _!=="object"||!_).length>0)q.push("Plugin actions must be an array of action objects")}if(K.services){if(!Array.isArray(K.services))q.push("Plugin services must be an array");else if(K.services.filter((_)=>typeof _!=="function"&&(typeof _!=="object"||!_)).length>0)q.push("Plugin services must be an array of service classes or objects")}if(K.providers&&!Array.isArray(K.providers))q.push("Plugin providers must be an array");if(K.evaluators&&!Array.isArray(K.evaluators))q.push("Plugin evaluators must be an array");return{isValid:q.length===0,errors:q}}async function Ki($){try{let q;try{q=await import($)}catch(O){if(j6.warn(`Failed to load plugin ${$}: ${O}`),!await $i($))return null;try{q=await import($)}catch(z){return j6.error(`Auto-install attempted for ${$} but import still failed: ${z}`),null}}if(!q)return j6.error(`Failed to load module for plugin ${$}.`),null;let K=`${$.replace(/^@elizaos\/plugin-/,"").replace(/^@elizaos\//,"").replace(/-./g,(O)=>O[1].toUpperCase())}Plugin`,P=q,_=[P[K],P.default,...Object.values(P)];for(let O of _){if(O0(O))return O;if(typeof O==="function"&&O.length===0)try{let j=O();if(O0(j))return j}catch(j){j6.debug(`Factory export threw for ${$}: ${j}`)}}return j6.warn(`Could not find a valid plugin export in ${$}.`),null}catch(q){return j6.error(`Error loading plugin ${$}: ${q}`),null}}function Y0($,q=!1){let K=[],P=new Set,_=new Set;function O(z){if(!$.has(z)){j6.warn(`Plugin dependency "${z}" not found and will be skipped.`);return}if(P.has(z))return;if(_.has(z)){j6.error(`Circular dependency detected involving plugin: ${z}`);return}_.add(z);let J=$.get(z);if(J){let T=[...J.dependencies||[]];if(q)T.push(...J.testDependencies||[]);for(let X of T)O(X)}_.delete(z),P.add(z),K.push(z)}for(let z of $.keys())if(!P.has(z))O(z);let j=K.map((z)=>$.get(z)).filter((z)=>Boolean(z));return j6.info({plugins:j.map((z)=>z.name)},"Final plugins being loaded:"),j}async function _i($){if(typeof $==="string")return Ki($);let q=qi($);if(!q.isValid)return j6.error(`Invalid plugin provided: ${q.errors.join(", ")}`),null;return $}async function Pi($,q=!1){let K=new Map,P=[...$];while(P.length>0){let _=P.shift(),O=await _i(_);if(!O)continue;if(!K.has(O.name)){K.set(O.name,O);for(let j of O.dependencies??[])if(!K.has(j))P.push(j);if(q){for(let j of O.testDependencies??[])if(!K.has(j))P.push(j)}}}return Y0(K,q)}async function v0($,q=!1){if(g4()==="node")return Pi($,q);let P=$.filter((O)=>typeof O!=="string");if($.some((O)=>typeof O==="string"))j6.warn("Browser environment: String plugin references are not supported. Only Plugin objects will be used. Skipped plugins: "+$.filter((O)=>typeof O==="string").join(", "));let _=new Map;for(let O of P)_.set(O.name,O);return Y0(_,q)}class ji extends EventTarget{runtimes=new Map;initFunctions=new Map;editableMode=!1;async addAgents($,q){let K=$.map(async(_)=>{let O=_.character;await aM(O);let j=_.plugins?await v0(_.plugins,q?.isTestMode||!1):[],z=new aH({character:O,plugins:j,settings:_.settings||{}});if(z.elizaOS=this,this.runtimes.set(z.agentId,z),typeof _.init==="function")this.initFunctions.set(z.agentId,_.init);let{settings:J,...T}=O,{secrets:X,...w}=J||{};return this.dispatchEvent(new CustomEvent("agent:added",{detail:{agentId:z.agentId,character:{...T,settings:w}}})),z.agentId}),P=await Promise.all(K);return this.dispatchEvent(new CustomEvent("agents:added",{detail:{agentIds:P,count:P.length}})),P}registerAgent($){if(this.runtimes.has($.agentId))throw Error(`Agent ${$.agentId} already registered`);$.elizaOS=this,this.runtimes.set($.agentId,$),this.dispatchEvent(new CustomEvent("agent:registered",{detail:{agentId:$.agentId,runtime:$}}))}async updateAgent($,q){if(!this.editableMode)throw Error("Editable mode not enabled");let K=this.runtimes.get($);if(!K)throw Error(`Agent ${$} not found`);Object.assign(K.character,q),this.dispatchEvent(new CustomEvent("agent:updated",{detail:{agentId:$,updates:q}}))}async deleteAgents($){await this.stopAgents($);for(let q of $)this.runtimes.delete(q),this.initFunctions.delete(q);this.dispatchEvent(new CustomEvent("agents:deleted",{detail:{agentIds:$,count:$.length}}))}async startAgents($){let q=$||Array.from(this.runtimes.keys());await Promise.all(q.map(async(K)=>{let P=this.runtimes.get(K);if(!P)throw Error(`Agent ${K} not found`);await P.initialize(),this.dispatchEvent(new CustomEvent("agent:started",{detail:{agentId:K}}))}));for(let K of q){let P=this.initFunctions.get(K);if(P){let _=this.runtimes.get(K);if(_)await P(_),this.initFunctions.delete(K)}}this.dispatchEvent(new CustomEvent("agents:started",{detail:{agentIds:q,count:q.length}}))}async stopAgents($){let q=$||Array.from(this.runtimes.keys());await Promise.all(q.map(async(K)=>{let P=this.runtimes.get(K);if(P)await P.stop()})),this.dispatchEvent(new CustomEvent("agents:stopped",{detail:{agentIds:q,count:q.length}}))}getAgent($){return this.runtimes.get($)}getAgents(){return Array.from(this.runtimes.values())}getAgentsByIds($){return $.map((q)=>this.runtimes.get(q)).filter((q)=>q!==void 0)}getAgentsByNames($){let q=new Set($.map((K)=>K.toLowerCase()));return this.getAgents().filter((K)=>q.has(K.character.name.toLowerCase()))}getAgentById($){return this.getAgent($)}getAgentByName($){let q=$.toLowerCase();return this.getAgents().find((K)=>K.character.name.toLowerCase()===q)}getAgentByCharacterName($){return this.getAgentByName($)}getAgentByCharacterId($){return this.getAgents().find((q)=>q.character.id===$)}async sendMessage($,q,K){let P=this.runtimes.get($);if(!P)throw Error(`Agent ${$} not found`);if(!P.messageService)throw Error("messageService is not initialized on runtime");let _=q.id||hq(),O={...q,id:_,agentId:q.agentId||P.agentId,createdAt:q.createdAt||Date.now(),entityId:q.entityId,roomId:q.roomId,content:q.content};await P.ensureConnection({entityId:O.entityId,roomId:O.roomId,worldId:q.worldId||O.roomId,source:O.content.source||"unknown",channelId:O.roomId});let j={maxRetries:K?.maxRetries,timeoutDuration:K?.timeoutDuration,useMultiStep:K?.useMultiStep,maxMultiStepIterations:K?.maxMultiStepIterations};if(!!K?.onResponse){let J=async(T)=>{try{if(K.onResponse)await K.onResponse(T)}catch(X){if(K.onError)await K.onError(X instanceof Error?X:Error(String(X)))}return[]};return P.messageService.handleMessage(P,O,J,j).then(()=>{if(K.onComplete)K.onComplete()}).catch((T)=>{if(K.onError)K.onError(T)}),this.dispatchEvent(new CustomEvent("message:sent",{detail:{agentId:$,messageId:_,mode:"async"}})),{messageId:_,userMessage:O}}else{let J=await P.messageService.handleMessage(P,O,void 0,j);if(K?.onComplete)await K.onComplete();return this.dispatchEvent(new CustomEvent("message:sent",{detail:{agentId:$,messageId:_,mode:"sync",result:J}})),{messageId:_,userMessage:O,result:J}}}async sendMessages($){let q=await Promise.all($.map(async({agentId:K,message:P,options:_})=>{try{let O=await this.sendMessage(K,P,_);return{agentId:K,result:O}}catch(O){return{agentId:K,result:{messageId:P.id||"",userMessage:P},error:O instanceof Error?O:Error(String(O))}}}));return this.dispatchEvent(new CustomEvent("messages:sent",{detail:{results:q,count:$.length}})),q}async validateApiKeys($){let q=new Map,K=$||Array.from(this.runtimes.keys());for(let P of K){let _=this.runtimes.get(P);if(_){let O=!!(_.getSetting("OPENAI_API_KEY")||_.getSetting("ANTHROPIC_API_KEY"));q.set(P,O)}}return q}async healthCheck($){let q=new Map,K=$||Array.from(this.runtimes.keys());for(let P of K){let O={alive:!!this.runtimes.get(P),responsive:!0};if(typeof process<"u")O.memoryUsage=process.memoryUsage().heapUsed,O.uptime=process.uptime();q.set(P,O)}return q}getRuntimeAccessor(){return{getAgent:($)=>this.getAgent($),getAgents:()=>this.getAgents(),getState:($)=>{let q=this.getAgent($);if(!q)return;let K=q;if(K.stateCache&&K.stateCache.size>0){let P=Array.from(K.stateCache.values());return P[P.length-1]}return}}}enableEditableMode(){this.editableMode=!0,this.dispatchEvent(new CustomEvent("mode:editable",{detail:{editable:!0}}))}}var Oi=`# Task: Resolve Entity Name
|
|
606
606
|
Message Sender: {{senderName}} (ID: {{senderId}})
|
|
607
607
|
Agent: {{agentName}} (ID: {{agentId}})
|
|
608
608
|
|
|
@@ -643,5 +643,5 @@ Data: ${JSON.stringify(K.metadata)}
|
|
|
643
643
|
`}`}).join(`
|
|
644
644
|
`)}var s7$=!0,$1$=!1,q1$={check:async()=>({status:"not-applicable",environment:"browser"}),isHealthy:()=>!0};export{jn as validateUuid,oM as validateCharacter,lM as uuidSchema,h7$ as updateWorldSettings,_0 as unsaltWorldSettings,Qn as unsaltSettingValue,cM as truncateToCompleteSentence,JP$ as trimTokens,Vn as toString,rM as toHex,wn as templateTypeSchema,Zn as styleSchema,vO as stringToUuid,HP$ as splitChunks,En as slice,nM as shouldRespondTemplate,fn as settingsSchema,iK$ as setEnv,q1$ as serverHealth,Xn as secretsSchema,an as saltWorldSettings,Fn as saltSettingValue,rH as safeReplacer,e4$ as recentLogs,In as randomBytes,TP$ as prewarmUuidCache,mP$ as postCreationTemplate,BK as parseKeyValueXml,WP$ as parseJSONObjectFromText,YO as parseBooleanFromText,AP$ as parseAndValidateCharacter,bM as normalizeJsonString,UM as multiStepSummaryTemplate,tM as multiStepDecisionTemplate,iM as messageHandlerTemplate,Hn as messageExampleSchema,zn as mediaSchema,j6 as logger,QK$ as loadEnvFile,Tn as knowledgeItemSchema,GP$ as isValidCharacter,$1$ as isNode,bP$ as isMessageMetadata,LP$ as isFragmentMetadata,xP$ as isFragmentMemory,DP$ as isDocumentMetadata,uP$ as isDocumentMemory,gP$ as isDescriptionMetadata,yP$ as isCustomMetadata,Sn as isBuffer,s7$ as isBrowser,I7$ as initializeOnboarding,UK$ as initBrowserEnvironment,BM as imageDescriptionTemplate,BK$ as hasEnv,R7$ as getWorldSettings,nP$ as getUserServerRole,wi as getTypedService,I_ as getSalt,qM as getNumberEnv,cP$ as getMemoryText,dM as getLocalServerUrl,y4 as getEnvironment,iK as getEnv,Q7$ as getEntityDetails,wP$ as getContentTypeFromMimeType,tK$ as getBooleanEnv,Gn as fromString,An as fromHex,Nn as fromBytes,xM as formatTimestamp,vP$ as formatPosts,zP$ as formatMessages,a7$ as formatEntities,EP$ as formatActions,CP$ as formatActionNames,iP$ as findWorldsForOwner,Lr as findEnvFile,F7$ as findEntityByName,hn as equals,D7$ as encryptedCharacter,K0 as encryptStringValue,$0 as encryptObjectValues,a4$ as elizaLogger,Jn as directoryItemSchema,g4 as detectEnvironment,y7$ as defineService,L7$ as decryptedCharacter,zO as decryptStringValue,zO as decryptSecret,q0 as decryptObjectValues,Q4$ as customLevels,FK$ as currentRuntime,Q8 as createUniqueUuid,tn as createSettingFromConfig,Zi as createServiceError,en as createService,IP$ as createMessageMemory,t7 as createLogger,Wn as contentSchema,Cn as concat,U7 as composePromptFromState,yM as composePrompt,NP$ as composeActionExamples,E7$ as clearSaltCache,kn as characterSchema,Rn as byteLength,dP$ as booleanFooter,Q7 as asUUID,Mn as alloc,YP$ as addHeader,t4$ as __loggerTestHooks,ki as VECTOR_DIMS,X0 as TeeType,f0 as TEEMode,Ti as ServiceType,P0 as ServiceBuilder,TO as Service,on as Semaphore,k0 as SOCKET_MESSAGE_TYPE,T0 as Role,Z0 as PlatformPrefix,R6 as ModelType,J0 as MemoryType,F4 as MODEL_SETTINGS,wO as EventType,$M as Environment,ji as ElizaOS,UH as DefaultMessageService,Ln as DatabaseAdapter,t4 as ContentType,U4 as ChannelType,tK as BufferUtils,QH as BM25,w0 as AgentStatus,aH as AgentRuntime};
|
|
645
645
|
|
|
646
|
-
//# debugId=
|
|
646
|
+
//# debugId=CD0EF16469FC479064756E2164756E21
|
|
647
647
|
//# sourceMappingURL=index.browser.js.map
|