@okxweb3/a2a-openclaw 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  var __importMetaUrl=require('url').pathToFileURL(__filename).href;
2
- "use strict";var Fr=Object.create;var me=Object.defineProperty;var Br=Object.getOwnPropertyDescriptor;var qr=Object.getOwnPropertyNames;var Hr=Object.getPrototypeOf,Xr=Object.prototype.hasOwnProperty;var y=(e,n)=>()=>(e&&(n=e(e=0)),n);var Ee=(e,n)=>{for(var t in n)me(e,t,{get:n[t],enumerable:!0})},tt=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of qr(n))!Xr.call(e,s)&&s!==t&&me(e,s,{get:()=>n[s],enumerable:!(r=Br(n,s))||r.enumerable});return e};var Yr=(e,n,t)=>(t=e!=null?Fr(Hr(e)):{},tt(n||!e||!e.__esModule?me(t,"default",{value:e,enumerable:!0}):t,e)),Wr=e=>tt(me({},"__esModule",{value:!0}),e);function Vr(e=new Date){return e.toISOString()}function rt(e){return[`[${Vr()}]`,...e]}function u(...e){console.error(...rt(e))}function st(...e){console.warn(...rt(e))}var I=y(()=>{"use strict"});function ot(e){We=e}function _e(){if(!We)throw new Error("[xmtp] PluginRuntime not initialized \u2014 ensure setXmtpRuntime is called in register()");return We}var We,Ie=y(()=>{"use strict";We=null});var a,Se=y(()=>{"use strict";a={GATEWAY_STARTED:"Gateway started",GATEWAY_STOPPED:"Gateway stopped",BOOTSTRAP_APPLIED:"Bootstrap applied",CHANNEL_READY:"Channel ready",CONVERSATION_STARTED:"Conversation started",EVALUATE_CONVERSATION_STARTED:"Evaluate conversation started",CONVERSATION_DELETED:"Conversation deleted",PENDING_CONVERSATION_DENIED:"Pending conversation denied",AGENTS_REFRESHED:"Agents refreshed",USER_DISPATCHED:"User dispatched",SESSION_DISPATCHED:"Session dispatched",SYNC_TICK_COMPLETED:"Sync tick completed",INBOUND_HANDLER_ENTERED:"Inbound handler entered",MESSAGE_RECEIVED:"Message received",MESSAGE_SENT:"Message sent",INBOUND_BUYER_PENDING:"Inbound buyer: no session, group still Unknown (pending)",INBOUND_BUYER_SESSION_AUTO_RECOVERED:"Inbound buyer: session missing for Allowed group, auto-recovered",INBOUND_BLOCKED_SENSITIVE:"Inbound blocked: sensitive word; reply sent",INBOUND_BLOCKED_ADDRESS_MISMATCH:"Inbound blocked: address mismatch",INBOUND_BLOCKED_INELIGIBLE:"Inbound blocked: message-eligible check failed",INBOUND_DROP_EMPTY_CONTENT:"Inbound drop: empty content",INBOUND_DROP_MISSING_JOBID:"Inbound drop: missing jobId",INBOUND_DROP_UNSUPPORTED_MSGTYPE:"Inbound drop: unsupported msgType",INBOUND_DROP_DM_NON_SYSTEM:"Inbound drop: DM sender not in system whitelist",INBOUND_DROP_DM_INVALID_PAYLOAD:"Inbound drop: DM payload invalid",INBOUND_DROP_DM_UNKNOWN_AGENT:"Inbound drop: DM target agent not local",DM_FALLBACK_TO_BACKUP:"DM fallback to backup session",DM_WHITELIST_FAIL_OPEN:"DM whitelist fail-open (empty system accounts)",FILE_UPLOADED:"File uploaded",FILE_DOWNLOADED:"File downloaded",PENDING_LIST_QUERIED:"Pending list queried",AGENT_LIST_QUERIED:"Agent list queried",SESSION_KEY_DERIVED:"Session key derived",CONVERSATION_HISTORY_QUERIED:"Conversation history queried",SESSIONS_QUERIED:"Sessions queried",GROUP_CONSENT_CHANGED:"Group consent changed",SESSION_CREATED:"Session created",SESSION_DELETED:"Session deleted",SESSION_AUTO_RECOVERED:"Session auto-recovered",INBOUND_DELIVERED:"Inbound delivered to session",DM_DELIVERED:"DM delivered to session",OUTBOUND_ELIGIBILITY_CHECKED:"Outbound eligibility checked",MESSAGE_ELIGIBILITY_CHECKED:"Message eligibility checked",AGENT_CLIENT_CREATED:"Agent client created",AGENT_INSTALLATION_SUMMARY:"Agent installation summary",XMTP_HISTORY_SYNC_REQUESTED:"XMTP history sync requested",XMTP_DEBUG_SYNC_REQUESTED:"XMTP debug sync requested",XMTP_DEBUG_SYNC_COMPLETED:"XMTP debug sync completed",AGENT_CLIENT_REMOVED:"Agent client removed",AGENT_STREAM_RECOVERED:"Agent stream recovered",AGENT_STREAM_RECOVERY_REPLAY_COMPLETED:"Agent stream recovery replay completed",ADDRESS_SYNC_COMPLETED:"Address sync completed",AGENT_REFRESH_SESSION_EXPIRED:"Agent refresh aborted: onchainos session expired, local clients taken offline",OFFLINE_REPLAY_MESSAGE_REPLAYED:"Offline replay message replayed",AGENTS_WAKEUP_NOTIFIED:"Agents wakeup notified",CONFIG_SENSITIVE_WORDS_REFRESHED:"Sensitive words config refreshed",CONFIG_SYSTEM_REFRESHED:"System config refreshed",GATEWAY_DISCONNECTED:"Gateway disconnected",GATEWAY_REQUEST:"Gateway request",GATEWAY_DELIVERY_BUFFERED:"Gateway delivery buffered",DAEMON_LIFECYCLE_SKIPPED:"Daemon lifecycle skipped",DAEMON_LIFECYCLE_REQUESTED:"Daemon lifecycle requested",PROMPT_USER_CHECKPOINT:"Prompt user checkpoint",USER_WATCH_STARTED:"User watch started",USER_WATCH_EVENT_DELIVERED:"User watch event delivered",INBOUND_DM_RAW:"Inbound DM raw",INBOUND_GROUP_RAW:"Inbound group raw",INBOUND_IGNORED_DUPLICATE:"Inbound ignored: duplicate message",INBOUND_IGNORED_NON_BUSINESS:"Inbound ignored: non-business message",AI_RUN_STARTED:"AI run started",AI_RUN_COMPLETED:"AI run completed",AI_RUN_SKIPPED:"AI run skipped",USER_CHANNEL_MESSAGE_DELIVERED:"User channel message delivered",SYSTEM_NOTIFICATION_RECEIVED:"System notification received",SYSTEM_NOTIFICATION_ROUTED:"System notification routed",HERMES_SESSION_ROUTE_BINDING:"Hermes session route binding",DOCTOR_REPORT:"Doctor report",XMTP_CONNECTION_FAILED:"XMTP connection failed",CONVERSATIONS_STREAM_FAILED:"conversations.stream failed",AGENT_START_FAILED:"agent.start failed",AGENT_STREAM_ERROR:"agent stream error",AGENT_UNHANDLED_ERROR:"Agent unhandled error",AGENT_STREAM_RECOVERY_TIMEOUT:"Agent stream recovery timeout",BOOTSTRAP_FAILED:"Bootstrap failed",ONCHAINOS_SESSION_EXPIRED:"Onchainos session expired",ONCHAINOS_CLI_ERROR:"Onchainos CLI error",HEARTBEAT_FAILED:"Heartbeat failed",HEARTBEAT_SKIPPED:"Heartbeat skipped",HEARTBEAT_GATEWAY_CHECK_FAILED:"Heartbeat gateway check failed",MESSAGE_PARSE_FAILED:"Message parse failed",MESSAGE_HANDLER_ERROR:"Message handler error",INBOUND_DISPATCH_FAILED:"Inbound dispatch failed",INBOUND_REPLAY_GATE_DRAIN_FAILED:"Inbound replay gate drain failed",FATAL_UNCAUGHT:"Fatal uncaught error",OFFLINE_REPLAY_FAILED:"Offline replay failed",INBOUND_ROUTING_FAILED:"Inbound routing failed",CONVERSATION_NOT_FOUND:"Conversation not found for send",XMTP_SEND_FAILED:"XMTP send failed",AGENT_REFRESH_FAILED:"Agent refresh failed",GROUP_CONSENT_UPDATE_FAILED:"Group consent update failed",TOOL_EXECUTE_FAILED:"Tool execute failed",AGENT_RESOLUTION_FAILED:"Agent resolution failed",USER_DISPATCH_FAILED:"User dispatch failed",INBOUND_ELIGIBILITY_BYPASSED:"Inbound eligibility bypassed",INBOUND_ADDRESS_CHECK_FAILED:"Inbound address check failed",INBOUND_ADDRESS_CHECK_BYPASSED:"Inbound address check bypassed",INBOUND_SENSITIVE_CHECK_FAILED:"Inbound sensitive check failed",FILE_UPLOAD_FAILED:"File upload failed",FILE_DOWNLOAD_FAILED:"File download failed",OFFLINE_REPLAY_MESSAGE_FAILED:"Offline replay message failed",PENDING_NOTIFICATION_FAILED:"Pending notification failed",GATEWAY_CONNECT_FAILED:"Gateway connect failed",GATEWAY_REQUEST_FAILED:"Gateway request failed",PROMPT_USER_FAILED:"Prompt user failed",DAEMON_COMMAND_FAILED:"Daemon command failed",DAEMON_COMMAND_TIMEOUT:"Daemon command timeout",DAEMON_COMMAND_STALE:"Daemon command stale",DAEMON_LIFECYCLE_FAILED:"Daemon lifecycle failed",DAEMON_TICK_FAILED:"Daemon tick failed",DIRECT_CLI_FAILED:"Direct CLI failed",DOCTOR_NOT_READY:"Doctor not ready",DOCTOR_CRASHED:"Doctor crashed",AI_RUN_FAILED:"AI run failed",AI_RUN_TIMEOUT:"AI run timeout",AI_RUN_TOOL_FAILED:"AI run tool failed",IPC_FAILED:"IPC failed",NOTIFY_AGENTS_WAKEUP_FAILED:"Notify agents wakeup failed",OUTBOUND_AGENT_LOOKUP_FAILED:"Outbound agent lookup failed",OUTBOUND_ELIGIBILITY_CHECK_FAILED:"Outbound eligibility check failed",OUTBOUND_ELIGIBILITY_BYPASSED:"Outbound eligibility bypassed",OUTBOUND_BLOCKED_INELIGIBLE:"Outbound blocked: message-eligible check failed",CACHE_LOAD_FAILED:"Cache load failed",CACHE_WRITE_FAILED:"Cache write failed",CONFIG_LOAD_FAILED:"Config load failed",SENTRY_INIT_SKIPPED:"Sentry init skipped",AGENT_DB_DIR_CREATE_FAILED:"Agent DB dir create failed",AGENT_INSTALLATION_LIMIT_NEAR:"Agent installation limit near",XMTP_HISTORY_SYNC_REQUEST_FAILED:"XMTP history sync request failed",XMTP_DEBUG_SYNC_FAILED:"XMTP debug sync failed"}});function V(e){return typeof e=="string"&&e.trim().length>0}function at(e){let n=V(e.messageId)?e.messageId.trim():"";if(n&&zr.test(n))return n;let t=[n,e.jobId,e.sessionKey,e.attentionId].map(s=>V(s)?s.trim():"");if(t.every(s=>s===""))return U;let r=(0,it.createHash)("sha256").update(t.join("|")).digest("hex");return`${Jr}${r.slice(0,Qr)}`}function dt(e){if(!V(e))return{...Ve};let[n,...t]=e.trim().split("-"),r=n.split(".");if(r.length<3)return{...Ve};let[s,o,i]=r.map(d=>Number(d));return[s,o,i].every(d=>Number.isInteger(d)&&d>=0)?{releaseBase:n,releaseChannel:ns(t[0]),releaseCode:s*Zr+o*es+i}:{...Ve}}function ns(e){if(!V(e))return"release";let n=e.toLowerCase().replace(/[^a-z0-9]/g,"");return n?n.startsWith("beta")?"beta":n:"release"}function z(e){return[["checkpoint",e.checkpoint],["outcome",e.outcome],["transport",e.transport],["eventFamily",e.eventFamily],["workloadClass",e.workloadClass],["taskMode",e.taskMode],["originPlatform",e.originPlatform],["deliveryId",e.deliveryId]].reduce((t,[r,s])=>(V(s)&&(t[r]=s.trim()),t),{})}function he(e){if(typeof e!="string")return;let n=e.trim();if(!(!n||n===U||n==="*"))return n}function Ae(...e){return e.map(he).find(n=>!!n)}function ze(e){let n={...e},t=Ae(e.jobId,e.taskId);t&&(n.jobId=t,n.taskId=t);let r=he(e.stage)??"",s=r.startsWith("inbound/"),o=r.startsWith("outbound/"),i=Ae(e.onchainosAgentId,e.myAgentId,e.agentId),d=[e.peerAgentId,e.providerAgentId,e.clientAgentId].map(he).find(_=>!!_&&_!==i),c=Ae(e.fromAgentId,e.senderAgentId,s?d:void 0,o?i:void 0),l=Ae(e.toAgentId,e.receiverAgentId,s?i:void 0,o?d:void 0);c&&(n.fromAgentId=c),l&&(n.toAgentId=l);let g=[c,l,e.agentId,e.onchainosAgentId,e.peerAgentId,e.providerAgentId,e.clientAgentId,e.sessionAgentId,e.myAgentId].map(he).filter(_=>!!_),p=[...new Set(g)].sort();return p.length>0&&(n.participantAgentIds=p.join(",")),n}var it,zr,Jr,Qr,Zr,es,U,Ve,Te=y(()=>{"use strict";it=require("node:crypto"),zr=/^[0-9a-f]{16,}$/i,Jr="dlv",Qr=24,Zr=1e6,es=1e3,U="unknown";Ve={releaseBase:U,releaseChannel:U,releaseCode:0}});function J(){return M||(process.env.OKX_AGENT_TASK_HOME?(M=Re(process.env.OKX_AGENT_TASK_HOME),M):(M=Re((0,we.join)(rs(),".okx-agent-task")),M))}function Re(e){return ts(e)}function ts(e){(0,Ne.mkdirSync)(e,{recursive:!0,mode:ct});try{(0,Ne.chmodSync)(e,ct)}catch(n){let t=n.code;if(t!=="EPERM"&&t!=="EACCES")throw n}return e}function rs(){try{let e=(0,ut.homedir)();if(e)return e}catch(e){}return(0,we.resolve)(process.cwd())}var ut,we,Ne,M,ct,Je=y(()=>{"use strict";ut=require("node:os"),we=require("node:path"),Ne=require("node:fs"),M=null,ct=448});function Qe(e,n,t){if(os.has(n))try{let r=J(),s=(0,b.join)(r,"xmtp-tests"),o=(0,b.join)(s,"active.json");if(!(0,$.existsSync)(o))return;let i=JSON.parse((0,$.readFileSync)(o,"utf8")),d=typeof i.runId=="string"?i.runId:"";if(!ss.test(d))return;let c=(0,b.resolve)(s,d),l=`${(0,b.resolve)(s)}${b.sep}`;if(!c.startsWith(l))return;(0,$.appendFileSync)((0,b.join)(c,"events.jsonl"),`${JSON.stringify({timestamp:new Date().toISOString(),level:e,eventName:n,runId:d,...t})}
3
- `,{encoding:"utf8",mode:384})}catch{}}var $,b,ss,os,lt=y(()=>{"use strict";$=require("node:fs"),b=require("node:path");Je();ss=/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/,os=new Set(["Address sync completed","Agent client created","Agent client removed","agent stream error","Agent stream recovered","Agent stream recovery replay completed","Agent stream recovery timeout","conversations.stream failed","Inbound delivered to session","Inbound dispatch failed","Inbound handler entered","Inbound ignored: duplicate message","Message handler error","Message received","Message sent","Offline replay failed","Offline replay message failed","Offline replay message replayed","System notification received","System notification routed","XMTP connection failed"])});function At(e){return e instanceof Error?e:void 0}function Ze(e){if(typeof e!="string"&&typeof e!="number")return;let n=String(e).trim();if(!(!n||/^(?:null|undefined|unknown)$/i.test(n))&&/^[A-Za-z0-9_.:-]+$/.test(n))return n.slice(0,is)}function gt(e){if(typeof e!="string")return;let n=Ze(e.trim().split(/\s+/,1)[0])?.toLowerCase();return n&&cs.has(n)?n:void 0}function ft(e){let n=Ze(e)?.toUpperCase();return n&&ds.has(n)?n:void 0}function pt(e){return ft(e?.code)??ft(e?.errno)}function yt(e,n){let t=n?.toUpperCase(),r=e?.name.toLowerCase()??"",s=e?.message.toLowerCase()??"";return t&&mt.has(t)?"resource_exhausted":t&&Et.has(t)?"connection_interrupted":t&&_t.has(t)?"network_unavailable":t&&It.has(t)?"timeout":t&&St.has(t)?"permission_denied":t==="ENOENT"?"missing_dependency":t==="ABORT_ERR"||r==="aborterror"?"cancelled":r==="syntaxerror"||/(?:json|response).*(?:parse|invalid)/.test(s)?"invalid_response":/session\s+(?:is\s+)?expired|login\s+expired/.test(s)?"session_expired":/timed?\s*out|timeout/.test(s)?"timeout":"unknown"}function us(e){switch(e){case"connection_interrupted":case"network_unavailable":case"resource_exhausted":case"timeout":return"retryable";case"invalid_response":case"missing_dependency":case"permission_denied":case"session_expired":return"non_retryable";default:return"unknown"}}function ls(e){let n=[],t=new Set,r=e;for(;r&&n.length<as&&!t.has(r);)n.push(r),t.add(r),r=At(r.cause);return n}function ht(e,n,t){let r=At(n),s={};if(r&&(s.errorName=r.name,s.errorMessageLength=String(r.message.length)),!r||e===a.AGENT_STREAM_ERROR)return s;let o=ls(r),i=o[0],d=o.length>1?o[o.length-1]:void 0,c=Ze(t.exitCode),l=pt(i),g=yt(i,l),p=gt(i.syscall),_=pt(d),L=d?yt(d,_):void 0,Ye=gt(d?.syscall),Qn=g==="unknown"&&L?L:g,Zn=Qn==="unknown"&&c&&c!=="0"?"process_exit":Qn,et=l??_,nt=p??Ye;return{...s,errorCategory:Zn,errorRetryability:us(Zn),errorCauseDepth:String(Math.max(0,o.length-1)),...et?{errorCode:et}:{},...nt?{errorSyscall:nt}:{},...d?{causeErrorMessageLength:String(d.message.length),causeErrorCategory:L??"unknown",..._?{causeErrorCode:_}:{},...Ye?{causeErrorSyscall:Ye}:{}}:{}}}var is,as,mt,Et,_t,It,St,ds,cs,Tt=y(()=>{"use strict";Se();is=64,as=4,mt=new Set(["EAGAIN","EMFILE","ENFILE","ENOMEM"]),Et=new Set(["ECONNRESET","EPIPE"]),_t=new Set(["EAI_AGAIN","ECONNREFUSED","EHOSTUNREACH","ENETDOWN","ENETUNREACH","ENOTFOUND"]),It=new Set(["ETIMEDOUT","ESOCKETTIMEDOUT"]),St=new Set(["EACCES","EPERM"]),ds=new Set([...mt,...Et,..._t,...It,...St,"ABORT_ERR","ENOENT"]),cs=new Set(["access","bind","close","connect","getaddrinfo","kill","listen","mkdir","open","read","readdir","readlink","rename","rmdir","spawn","stat","unlink","write"])});function Es(e){try{let n=e?.extra?.eventName??e?.tags?.eventName;if(typeof n=="string"&&n.trim().length>0)return e;let t=e;t.extra={...be,...t.extra??{},eventName:a.FATAL_UNCAUGHT,eventFamily:"diagnostics",outcome:"failed",transport:"local"},t.tags={...t.tags??{},eventName:a.FATAL_UNCAUGHT,eventFamily:"diagnostics",outcome:"failed"},t.fingerprint=["a2a",a.FATAL_UNCAUGHT]}catch{}return e}var m,Ot,Rt,wt,gs,fs,ps,ys,ms,Oe,Nt,be,en,f,bt,Dt,k=y(()=>{"use strict";I();m=Yr(require("@sentry/node")),Ot=require("node:crypto");Se();Te();lt();Tt();Se();Te();Rt=(0,Ot.randomUUID)(),wt=new Set(["args","apikey","argv","auth","authorization","authtoken","bearer","body","cache","command","content","credential","credentials","cwd","data","error","failures","filename","file_name","filepath","file_path","headers","input","logpath","message","output","password","params","path","payload","privatekey","prompt","raw","rawevent","rawtext","request","response","accesstoken","refreshtoken","digest","nonce","salt","secret","token","stderr","stdout","title","tooloutput"]),gs=["accesstoken","apikey","authorization","authtoken","content","credential","filepath","logpath","outputpath","password","payload","privatekey","prompt","rawevent","rawtext","refreshtoken","requestbody","responsebody","secret","stderr","stdout","token","tooloutput"],fs=new Set(["onchainosagentlistresultjson","onchainosagentlistdiagnostictext","systemconfigjson"]),ps=new Set(["agentId","agentPlatform","cacheName","causeCode","causeType","causeVariant","checkpoint","code","communicationClass","component","eventFamily","eventName","endpoint","errorCategory","errorCode","errorRetryability","errorSyscall","exitCode","fromAgentId","grpcMethod","jobId","kind","method","onchainosAgentId","operation","originPlatform","outcome","participantAgentIds","peerAgentId","phase","platform","provider","reason","releaseBase","releaseChannel","releaseCode","role","runId","runtimeContainer","senderAgentId","source","stage","status","streamErrorCode","streamType","subcommand","systemEvent","taskId","taskMode","toAgentId","transport","transportFailure","transportProtocol","type","workloadClass"]),ys=["eventName","errorCategory","errorCode","errorSyscall","cacheName","component","method","operation","phase","reason","code","provider","type","kind","status","subcommand"],ms=new Set([a.GATEWAY_STARTED,a.GATEWAY_STOPPED,a.GATEWAY_DISCONNECTED,a.GATEWAY_REQUEST,a.GATEWAY_DELIVERY_BUFFERED,a.DAEMON_LIFECYCLE_SKIPPED,a.DAEMON_LIFECYCLE_REQUESTED,a.PROMPT_USER_CHECKPOINT,a.USER_WATCH_STARTED,a.USER_WATCH_EVENT_DELIVERED,a.CHANNEL_READY,a.CONVERSATION_STARTED,a.EVALUATE_CONVERSATION_STARTED,a.CONVERSATION_DELETED,a.USER_DISPATCHED,a.SESSION_DISPATCHED,a.SESSION_CREATED,a.SESSION_DELETED,a.SESSION_AUTO_RECOVERED,a.INBOUND_DELIVERED,a.INBOUND_DM_RAW,a.INBOUND_GROUP_RAW,a.INBOUND_IGNORED_DUPLICATE,a.INBOUND_IGNORED_NON_BUSINESS,a.AI_RUN_STARTED,a.AI_RUN_COMPLETED,a.AI_RUN_SKIPPED,a.USER_CHANNEL_MESSAGE_DELIVERED,a.SYSTEM_NOTIFICATION_RECEIVED,a.SYSTEM_NOTIFICATION_ROUTED,a.HERMES_SESSION_ROUTE_BINDING,a.INBOUND_BLOCKED_ADDRESS_MISMATCH,a.INBOUND_BLOCKED_INELIGIBLE,a.MESSAGE_ELIGIBILITY_CHECKED,a.INBOUND_BLOCKED_SENSITIVE,a.INBOUND_DROP_DM_INVALID_PAYLOAD,a.INBOUND_DROP_DM_NON_SYSTEM,a.INBOUND_DROP_DM_UNKNOWN_AGENT,a.INBOUND_DROP_EMPTY_CONTENT,a.INBOUND_DROP_MISSING_JOBID,a.INBOUND_DROP_UNSUPPORTED_MSGTYPE,a.DM_DELIVERED,a.DM_FALLBACK_TO_BACKUP,a.DM_WHITELIST_FAIL_OPEN,a.INBOUND_BUYER_PENDING,a.INBOUND_BUYER_SESSION_AUTO_RECOVERED,a.MESSAGE_SENT,a.AGENT_CLIENT_CREATED,a.AGENT_CLIENT_REMOVED,a.AGENT_STREAM_ERROR,a.AGENT_STREAM_RECOVERED,a.AGENT_STREAM_RECOVERY_REPLAY_COMPLETED,a.ADDRESS_SYNC_COMPLETED,a.AGENTS_REFRESHED,a.AGENTS_WAKEUP_NOTIFIED,a.AGENT_LIST_QUERIED,a.BOOTSTRAP_APPLIED,a.CONFIG_SENSITIVE_WORDS_REFRESHED,a.CONFIG_SYSTEM_REFRESHED,a.CONVERSATION_HISTORY_QUERIED,a.FILE_DOWNLOADED,a.FILE_UPLOADED,a.GROUP_CONSENT_CHANGED,a.INBOUND_HANDLER_ENTERED,a.MESSAGE_RECEIVED,a.OFFLINE_REPLAY_MESSAGE_REPLAYED,a.AGENT_REFRESH_SESSION_EXPIRED,a.OUTBOUND_ELIGIBILITY_CHECKED,a.OUTBOUND_BLOCKED_INELIGIBLE,a.AGENT_INSTALLATION_SUMMARY,a.XMTP_HISTORY_SYNC_REQUESTED,a.XMTP_DEBUG_SYNC_REQUESTED,a.XMTP_DEBUG_SYNC_COMPLETED,a.PENDING_CONVERSATION_DENIED,a.PENDING_LIST_QUERIED,a.SESSION_KEY_DERIVED,a.SESSIONS_QUERIED,a.SYNC_TICK_COMPLETED]),Oe=256,Nt=128,be={},en=class e{static instance;initialized=!1;buffer=[];constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}init(n){if(this.initialized){st("[logger] Already initialized, skipping.");return}try{be=dt(n.release),m.init({dsn:n.dsn,release:n.release,environment:n.environment,maxBreadcrumbs:0,beforeBreadcrumb:()=>null,beforeSend:r=>Es(r),isInner:!1});let t={projectName:n.projectName,agentPlatform:n.agentPlatform};n.runtimeContainer&&(t.runtimeContainer=n.runtimeContainer),m.setTags(t)}catch{return}this.initialized=!0,this.flush()}info(n,t){let r=e.sanitizeExtra(ze({flowId:Rt,...be,...t??{}}));if(Qe("info",n,r),!!ms.has(n)){if(!this.initialized){this.buffer.push({level:"info",message:n,extra:r});return}this.captureInfo(n,r)}}captureInfo(n,t){try{m.withScope(r=>{e.applyDiagnostics(r,n,t),m.captureEvent({level:"info",message:n,extra:{...t,eventName:n}})})}catch{}}error(n,t,r){let s=e.sanitizeExtra(ze({flowId:Rt,...be,...r??{}}));if(Qe("error",n,s),!this.initialized){this.buffer.push({level:"error",message:n,error:t,extra:s});return}this.captureError(n,t,s)}captureError(n,t,r){try{let s=ht(n,t,r),o={...r,...s};m.withScope(i=>{i.setLevel("error"),e.applyDiagnostics(i,n,o),m.captureException(e.createSentryEvent(n),{extra:{...o,eventName:n}})})}catch{}}async shutdown(){try{await m.close(5e3)}catch{await m.flush(5e3)}}flush(){for(;this.buffer.length>0;){let n=this.buffer.shift();n.level==="info"?this.captureInfo(n.message,n.extra??{}):this.captureError(n.message,n.error,n.extra??{})}}static sanitizeExtra(n){return Object.fromEntries(Object.entries(n).filter(([,t])=>t!==void 0).filter(([t])=>!e.isBlockedExtraKey(t)).map(([t,r])=>[t,e.safeValueForKey(t,r)]))}static isBlockedExtraKey(n){let t=n.toLowerCase(),r=e.normalizeSensitiveKey(n);return wt.has(t)||wt.has(r)?!0:e.isSafeMetricKey(r)?!1:gs.some(s=>r.includes(s))}static isSafeMetricKey(n){return/(bytes|count|length|ms|size)$/.test(n)}static safeValueForKey(n,t){return typeof t=="string"&&fs.has(e.normalizeSensitiveKey(n))?t:e.safeValue(t)}static normalizeSensitiveKey(n){return n.toLowerCase().replace(/[^a-z0-9]/g,"")}static safeValue(n){if(typeof n=="string")return n.length<=Oe?n:`${n.slice(0,Oe)}...`;if(n==null||typeof n=="number"||typeof n=="boolean")return n;if(typeof n=="bigint")return n.toString();if(n instanceof Error)return{name:n.name,messageLength:n.message.length};if(Array.isArray(n))return n.slice(0,20).map(r=>e.safeValue(r));if(typeof n=="object")return Object.fromEntries(Object.entries(n).slice(0,50).filter(([,r])=>r!==void 0).filter(([r])=>!e.isBlockedExtraKey(r)).map(([r,s])=>[r,e.safeValueForKey(r,s)]));let t=String(n);return t.length<=Oe?t:`${t.slice(0,Oe)}...`}static tagValue(n){let t=String(n);return t.length<=Nt?t:`${t.slice(0,Nt)}...`}static normalizeTagKey(n){return n.replace(/[^A-Za-z0-9_.:-]+/g,"_").slice(0,32)||"unknown"}static applyDiagnostics(n,t,r){let s={eventName:t,...r};for(let[i,d]of Object.entries(s))ps.has(i)&&n.setTag(e.normalizeTagKey(i),e.tagValue(d));let o=["a2a",t];for(let i of ys){let d=s[i];d&&o.push(`${i}:${e.tagValue(d)}`)}n.setFingerprint(o)}static toPascalCase(n){return n.split(/[\s:]+/).filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}static createSentryEvent(n){let t=new Error(n);return t.name=e.toPascalCase(n),t.stack=`${t.name}: ${n}`,t}},f=en.getInstance(),bt=e=>f.init(e),Dt=()=>f.shutdown()});function De(){return _e()}function Kt(e){kt.has(e)||(kt.add(e),u(`[okx-a2a:runtime] using legacy OpenClaw PluginRuntime API api=${e}`))}function Ce(){let e=De().config;if(typeof e.current=="function")return e.current();if(typeof e.loadConfig=="function")return Kt("config.loadConfig"),e.loadConfig();throw new Error("Unsupported OpenClaw PluginRuntime: neither config.current nor config.loadConfig is available")}function vt(){let e=De().agent.session;if(typeof e.resolveStorePath!="function"||typeof e.loadSessionStore!="function")throw new Error("Unsupported OpenClaw PluginRuntime: no row-level or legacy session reader is available");Kt("agent.session.loadSessionStore");let n=e.resolveStorePath(void 0,{agentId:"main"});return e.loadSessionStore(n,{skipCache:!0})}function Pt(e){let n=De().agent.session;return typeof n.getSessionEntry=="function"?n.getSessionEntry({agentId:"main",sessionKey:e,readConsistency:"latest"}):vt()[e]}function nn(){let e=De().agent.session;return typeof e.listSessionEntries=="function"?e.listSessionEntries({agentId:"main",readConsistency:"latest",readOnly:!0}):Object.entries(vt()).map(([n,t])=>({sessionKey:n,entry:t}))}function xt(){return Object.fromEntries(nn().map(({sessionKey:e,entry:n})=>[e,n]))}var kt,tn=y(()=>{"use strict";I();Ie();kt=new Set});function Is(e=J()){return(0,Lt.join)(e,"openclaw-gateway.json")}function Ut(e,n=J()){let t=Re(n),r=Is(t),s=`${r}.${process.pid}.tmp`,o={version:1,url:e.url,...e.password?{password:e.password}:{},...e.token?{token:e.token}:{},updatedAt:new Date().toISOString(),source:"openclaw-plugin"};(0,D.writeFileSync)(s,`${JSON.stringify(o,null,2)}
4
- `,{encoding:"utf8",mode:384});try{(0,D.chmodSync)(s,384)}catch{}(0,D.renameSync)(s,r);try{(0,D.chmodSync)(r,384)}catch{}return r}var D,Lt,Mt=y(()=>{"use strict";D=require("node:fs"),Lt=require("node:path");Je()});function ne(e){return e.includes(Z)||e.includes(`:${ee}:`)}function ke(e){if(!(!e||e==="direct"||e==="@direct"))return e.startsWith("telegram:")||e.startsWith("@")?e:`telegram:${e}`}function Q(e){if(typeof e=="number"&&Number.isFinite(e))return String(Math.trunc(e));if(typeof e=="string")return e.trim()||void 0}function $t(e){if(e.length!==0)return e[0]==="topic"?Q(e[1]):e[0]==="thread"?e.length>=3?Q(e.slice(2).join(":")):Q(e[1]):Q(e[0])}function rn(e,n){return!e||!n||!e.startsWith("telegram:")||/:topic:\d+$/.test(e)?e:`${e}:topic:${n}`}function Ss(e,n){let t=e.split(":");if(n==="telegram"){let r=t.indexOf("telegram"),s=r>=0?t.slice(r+1):t.slice(3),o=s.findIndex(d=>d==="direct"||d==="dm");if(o>=0){let d=o>0?s[o-1]:void 0,c=s[o+1]==="telegram"&&s[o+2]?`telegram:${s[o+2]}`:s[o+1],l=$t(s.slice(o+2));return{to:rn(ke(c),l),accountId:d,threadId:l}}let i=s.indexOf("group");if(i>=0){let d=i>0?s[i-1]:void 0,c=s[i+1]==="telegram"&&s[i+2]?`telegram:${s[i+2]}`:s[i+1],l=$t(s.slice(i+2));return{to:rn(ke(c),l),accountId:d,threadId:l}}if(s[0]==="telegram"&&s[1])return{to:`telegram:${s[1]}`,accountId:void 0};if(s[1]==="telegram"&&s[2])return{to:`telegram:${s[2]}`,accountId:s[0]};if(s.length>=2)return{to:ke(s[1]),accountId:s[0]};if(s.length===1)return{to:ke(s[0]),accountId:void 0}}return{to:t[4],accountId:void 0}}function Gt(e,n){return typeof e!="string"||e==="direct"||e==="@direct"?n:e}function jt(e){return As[e]??e}function Ft(e){let n=[e],t=e.split(":");if(t.length<6||t[0]!=="agent"||t[2]!=="telegram"||t[3]!=="direct"&&t[3]!=="dm"||!t[4])return n;let r=t[4],s=t.slice(5),o;if(s[0]==="topic"&&s[1])o=`agent:${t[1]}:telegram:direct:${r}:thread:${r}:${s.slice(1).join(":")}`;else if(s[0]==="thread"){let i=s.length>=3?s.slice(2).join(":"):s[1];i&&(o=`agent:${t[1]}:telegram:direct:${r}:topic:${i}`)}return o&&o!==e&&n.push(o),n}function hs(e){if(e==="agent:main")return"main";let n=e.split(":");return n.length<4||n[0]!=="agent"||!n[1]||!n[2]||ne(e)||n[2]==="backup"?null:n[2]}function sn(e,n){if(!qt(n))return null;let t=n,r=t.deliveryContext?.channel??t.lastChannel??t.origin?.provider??hs(e);if(!r)return null;let s=jt(r),o=Ss(e,s),i=Gt(t.deliveryContext?.to,o.to)??Gt(t.lastTo,o.to)??o.to,d=t.deliveryContext?.accountId??o.accountId,c=Q(t.deliveryContext?.threadId??t.origin?.threadId??t.lastThreadId??o.threadId);return{channel:s,target:{sessionKey:e,to:s==="telegram"?rn(i,c):i,accountId:d,threadId:c,updatedAt:t.lastInteractionAt??t.updatedAt??Date.now()}}}function Bt(e){let n=new Map,t=new Map;for(let[r,s]of Object.entries(e)){if(ne(r)||!qt(s))continue;let o=s;if(o.spawnedBy||o.subagentRole)continue;let i=sn(r,s);if(!i)continue;let{channel:d,target:c}=i,{to:l,updatedAt:g}=c;l&&(!t.get(d)||g>(n.get(d)?.updatedAt??0))&&t.set(d,l);let p=n.get(d);(!p||g>p.updatedAt)&&n.set(d,c)}for(let[r,s]of n)if(!s.to){let o=t.get(r);o&&(s.to=o)}for(let[r,s]of n)u(`[findLatestUserSessions] channel=${r} winner=${s.sessionKey} to=${s.to??"(none)"} accountId=${s.accountId??"(none)"} interactedAt=${s.updatedAt}`);return n}function qt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var Z,ee,As,Ht=y(()=>{"use strict";I();Z="okx-xmtp",ee="okx-a2a";As={dashboard:"webchat"}});function Yt(e){if(ne(e))return null;try{for(let n of Ft(e)){let t=sn(n,Pt(n));if(t)return t}return null}catch(n){return Wt("find_user_session_target",n),null}}function Xt(e){return e.toLowerCase().startsWith("0x")}function Ts(e){if(typeof e=="string")return`${Z}:${e}`;let n="myAgentId"in e&&"toAgentId"in e?new URLSearchParams({my:e.myAgentId,to:e.toAgentId,job:e.jobId}):new URLSearchParams({my:e.myXmtpAddress,to:e.toXmtpAddress,job:e.jobId});return`${Z}:${n.toString()}`}function on(e){let n=`${Z}:`,t=e.indexOf(n);if(t===-1)return null;let r=new URLSearchParams(e.slice(t+n.length)),s=r.get("myAgentId")||r.get("myagentid"),o=r.get("toAgentId")||r.get("toagentid"),i=r.get("my"),d=r.get("to"),c=r.get("job"),l=r.get("gid");return s&&o&&c?{format:"agent",myAgentId:s,toAgentId:o,jobId:c,xmtpGroupId:l??""}:!i||!d||!c?null:!Xt(i)&&(d==="_"||!Xt(d))?{format:"agent",myAgentId:i,toAgentId:d,jobId:c,xmtpGroupId:l??""}:{format:"address",myXmtpAddress:i,toXmtpAddress:d,jobId:c,xmtpGroupId:l??""}}function te(e){if(!e)return"";let n=on(e);return n?.jobId?n.jobId:/(?:^|:)backup:([^:&]+)/.exec(e)?.[1]??""}function se(e){let n=e.taskId?.trim()||te(e.scopeKey)||te(e.sessionKey);return n?{taskId:n}:{}}function Wt(e,n){u(`[okx-a2a:session] session-store lookup failed; continuing phase=${e} error=${n instanceof Error?n.message:String(n)}`)}function Rs(e){let n=typeof e=="string"?e:Ts(e);return(0,re.buildAgentSessionKey)({agentId:"main",channel:ee,peer:{kind:"group",id:n}})}function Vt(){let e=Ce().agents?.list;if(e&&e.length>0){let n=e.find(t=>t.id==="main");return n?n.id:e[0].id}return"main"}function zt(){return(0,re.buildAgentSessionKey)({agentId:Vt(),channel:ee,peer:{kind:"group",id:"backup"}})}function ws(e){return(0,re.buildAgentSessionKey)({agentId:Vt(),channel:ee,peer:{kind:"group",id:`backup:${e}`}})}function K(){try{return Bt(xt())}catch(e){return Wt("find_latest_user_sessions",e),new Map}}function Jt(e){let n=new Set,t=[...e.sessionKey?[e.sessionKey]:[],...Array.isArray(e.sessionKeys)?e.sessionKeys:[]].filter(s=>s.trim()),r=[];e.jobId&&r.push({jobId:e.jobId,myAgentId:e.myAgentId,toAgentId:e.toAgentId,myXmtpAddress:e.myXmtpAddress,toXmtpAddress:e.toXmtpAddress});for(let s of t){if(s.startsWith("agent:")){n.add(s);continue}let o=Ds(s);if(o){n.add(ws(o));continue}let i=Qt(s);if(i){r.push(i);continue}let d=on(s);if(d){r.push(bs(d));continue}n.add(Rs(s))}for(let s of Ns())for(let o of r)if(Os(s,o)){n.add(s);break}return[...n].sort()}function Ns(){return nn().map(({sessionKey:e})=>e).filter(ne)}function Os(e,n){let t=on(e);if(t)return Cs(t,n);let r=Qt(e);return r?!(n.jobId&&r.jobId!==n.jobId||n.myAgentId&&r.myAgentId!==n.myAgentId||n.toAgentId&&r.toAgentId!==n.toAgentId||n.myXmtpAddress&&!n.myAgentId||n.toXmtpAddress&&!n.toAgentId):!n.jobId||n.myAgentId||n.toAgentId||n.myXmtpAddress||n.toXmtpAddress?!1:te(e)===n.jobId}function bs(e){return"myAgentId"in e?{myAgentId:e.myAgentId,toAgentId:e.toAgentId,jobId:e.jobId}:{myXmtpAddress:e.myXmtpAddress,toXmtpAddress:e.toXmtpAddress,jobId:e.jobId}}function Qt(e){let n=e.split(":"),t=n.indexOf("job");return t<0||n[t+2]!=="my"||n[t+4]!=="to"||!n[t+1]||!n[t+3]||!n[t+5]?null:{jobId:Ke(n[t+1]),myAgentId:Ke(n[t+3]),toAgentId:Ke(n[t+5])}}function Ds(e){return e.startsWith("backup:")?Ke(e.slice(7)):null}function Cs(e,n){return n.jobId&&e.jobId!==n.jobId?!1:"myAgentId"in e?!(n.myAgentId&&e.myAgentId!==n.myAgentId||n.toAgentId&&e.toAgentId!==n.toAgentId||n.myXmtpAddress&&!n.myAgentId||n.toXmtpAddress&&!n.toAgentId):!(n.myXmtpAddress&&e.myXmtpAddress.toLowerCase()!==n.myXmtpAddress.toLowerCase()||n.toXmtpAddress&&e.toXmtpAddress.toLowerCase()!==n.toXmtpAddress.toLowerCase()||n.myAgentId&&!n.myXmtpAddress||n.toAgentId&&!n.toXmtpAddress)}function Ke(e){try{return decodeURIComponent(e)}catch{return e}}var re,G=y(()=>{"use strict";I();re=require("openclaw/plugin-sdk/routing");tn();Ht()});function Zt(e){return e.reduce((n,[t,r])=>(r!=null&&(n[t]=String(r)),n),{})}function er(e){let n=at({jobId:e.jobId,sessionKey:e.sessionKey});return n===U?null:n}function C(e){return{...z({checkpoint:e.checkpoint,outcome:e.outcome,transport:"user_channel",eventFamily:"user_channel",deliveryId:er(e)}),...Zt([["component",ks],["source",e.source],["channel",e.channel],["sessionKey",e.sessionKey],["jobId",e.jobId],["direction",e.direction],["senderAgentId",e.senderAgentId],["receiverAgentId",e.receiverAgentId],["hasTo",e.hasTo===void 0?void 0:e.hasTo?"1":"0"]])}}function ve(e,n="success"){let t={};for(let[s,o]of Object.entries(e))o!=null&&(t[s]=String(o));let r=t.phase?.trim()??"";return{...z({checkpoint:r?`${Ps}${r}`:null,outcome:n,transport:"gateway_rpc",eventFamily:"lifecycle"}),...t}}function T(e){let n=Object.entries({component:Ks,operation:vs,checkpoint:e.checkpoint,sessionKey:e.sessionKey,channel:e.channel??"",taskId:e.taskId??"",runId:e.runId??"",reason:e.reason??"",status:e.status??"",queued:e.queued??"",delayMs:e.delayMs??"",durationMs:e.durationMs??"",running:e.running??"",processing:e.processing??""}).filter(([,t])=>t!=="");return{...z({outcome:Us[e.checkpoint],transport:"user_channel",eventFamily:"user_channel",deliveryId:er({jobId:e.taskId,sessionKey:e.sessionKey})}),...n.reduce((t,[r,s])=>(t[r]=String(s),t),{})}}function an(e){let{delivered:n,failed:t,abandoned:r}=e,s=n>0||t>0||r>0;return t===0&&r===0?{shouldEmit:s,outcome:"success"}:{shouldEmit:s,outcome:n>0?"partial":"failed"}}function nr(e){return{...z({checkpoint:xs,outcome:an(e).outcome,transport:"gateway_rpc",eventFamily:"outbound"}),...Zt([["onchainosAgentId","*"],["source",Ls],["deliveredCount",e.delivered],["failedCount",e.failed],["abandonedCount",e.abandoned],["batchSize",e.batchSize]])}}var ks,Ks,vs,Ps,xs,Ls,Us,oe=y(()=>{"use strict";Te();ks="openclaw_user_dispatch",Ks="openclaw_prompt_user_queue",vs="xmtp_prompt_user",Ps="gateway/",xs="outbound/outbox_drained",Ls="gateway_outbox_drain";Us={fallback_scheduled:"pending",queued:"pending",run_pending:"pending",dispatch_started:"pending",dispatch_completed:"success",run_completed:"success",dispatch_failed:"failed",fallback_fired:"timeout"}});var dr={};Ee(dr,{callChatInject:()=>ae,callGateway:()=>A,callSessionsCreate:()=>ie,callSessionsDelete:()=>mn,callSessionsSend:()=>En,formatPairingErrorHint:()=>Le,gatewayExtra:()=>ve,onGatewayEvent:()=>gn,resolveGatewayRuntimeConfig:()=>fn,stopGatewayClient:()=>yn,syncGatewayConfigForNodeDaemon:()=>pn});function dn(e){if(e){if(typeof e=="string")return e;if(typeof e=="object"&&e!==null&&"env"in e)return process.env[e.env]||void 0}}function js(e){return e&&(typeof e=="string"?{type:"string",configured:!0}:typeof e=="object"&&e!==null&&"env"in e?{type:"env",env:String(e.env),configured:!!dn(e)}:{type:typeof e,configured:!0})}function cn(e){if(!e||typeof e!="object")return e??null;if(Array.isArray(e))return e.map(t=>cn(t));let n={};for(let[t,r]of Object.entries(e)){if(/password|token|secret/i.test(t)){n[t]=js(r);continue}n[t]=cn(r)}return n}function Fs(e){try{return JSON.stringify(e)}catch{return"[unserializable]"}}function Bs(e){let n=e.params;if(!n||typeof n!="object"||Array.isArray(n))return se({taskId:e.taskId});let t=n;return se({taskId:e.taskId,sessionKey:typeof t.sessionKey=="string"?t.sessionKey:typeof t.key=="string"?t.key:""})}function S(e,n={}){let t=ve({phase:e,...n});u(`[gateway] ${e}: ${JSON.stringify(t)}`),f.info(e.startsWith("request_")?a.GATEWAY_REQUEST:a.GATEWAY_STARTED,{component:"openclaw_gateway",...t})}function F(e,n,t={},r=a.GATEWAY_CONNECT_FAILED){let s=ve({phase:e,component:"openclaw_gateway",...t},"failed");u(`[gateway] ${e}:`,n),f.error(r,n instanceof Error?n:new Error(String(n)),s)}function qs(e){for(let n of un)try{n(e)}catch(t){u("[gateway] event handler failed:",t)}}function gn(e){return un.add(e),()=>{un.delete(e)}}function rr(){S("ready_gate_reset",{hasSharedClient:!!w,hasConnected:R}),j=new Promise((e,n)=>{Pe=e,xe=n})}function sr(e,n,t){if(w!==e){S(`${n}_skip_clear_noncurrent`,t);return}try{e.stop?.()}catch(r){F(`${n}_stop_failed`,r,t)}w=null,R=!1,j=null,Pe=null,xe=null,S(`${n}_cleared_client`,t)}function Hs(){if(w)return S("reuse_client",{hasConnected:R,hasReadyPromise:!!j}),{client:w,ready:j};let e=fn(),{url:n,password:t,token:r}=e,s=(0,ln.randomUUID)(),o=++Gs;rr(),S("init_client",{clientSeq:o,instanceId:s,url:n,hasGatewayConfig:!!e.rawGatewayConfig,gatewayConfig:Fs(cn(e.rawGatewayConfig)),passwordConfigured:!!t,tokenConfigured:!!r,scopes:tr.join(",")});let i=new ar.GatewayClient({url:n,password:t,token:r,instanceId:s,clientName:"gateway-client",clientDisplayName:"okx-a2a-plugin",mode:"backend",role:"operator",scopes:[...tr],onHelloOk:()=>{S("hello_ok",{clientSeq:o,instanceId:s,url:n}),R=!0,Pe?.()},onEvent:qs,onClose:(d,c)=>{if(u(`[gateway] closed (${d}): ${c||"no reason"}`),f.info(a.GATEWAY_DISCONNECTED,{clientSeq:String(o),instanceId:s,url:n,code:String(d),reason:c||"no-reason",hadConnected:String(R)}),R){R=!1,rr();return}sr(i,"close_before_connect",{clientSeq:o,instanceId:s,url:n,code:d,reason:c||"no-reason"})},onConnectError:d=>{let c=d;if(c?.retryable){F("connect_error_retryable",d,{clientSeq:o,instanceId:s,url:n,retryable:"true",reason:c?.details?.reason??"retryable",code:c?.gatewayCode??c?.details?.code});return}F("connect_error",d,{clientSeq:o,instanceId:s,url:n,retryable:"false",code:c?.gatewayCode??c?.details?.code}),xe?.(d instanceof Error?d:new Error(String(d))),sr(i,"connect_error",{clientSeq:o,instanceId:s,url:n,code:c?.gatewayCode??c?.details?.code,reason:c?.details?.reason})}});return w=i,S("start_client",{clientSeq:o,instanceId:s,url:n}),i.start(),{client:i,ready:j}}function fn(){let n=Ce().gateway;return{url:`ws://127.0.0.1:${or(process.env.OPENCLAW_GATEWAY_PORT)??or(n?.port)??$s}`,password:dn(n?.auth?.password),token:dn(n?.auth?.token),rawGatewayConfig:n}}function or(e){if(typeof e=="number"&&Number.isFinite(e)){let r=Math.trunc(e);return r>0&&r<=65535?r:null}if(typeof e!="string")return null;let n=e.trim();if(!/^\d+$/.test(n))return null;let t=Number.parseInt(n,10);return t>0&&t<=65535?t:null}function pn(){let e=fn();try{let n=Ut({url:e.url,password:e.password,token:e.token});return S("synced_node_gateway_config",{path:n,url:e.url,passwordConfigured:!!e.password,tokenConfigured:!!e.token}),n}catch(n){return F("sync_node_gateway_config_failed",n,{url:e.url,passwordConfigured:!!e.password,tokenConfigured:!!e.token},a.GATEWAY_CONNECT_FAILED),null}}function yn(){if(w){try{w.stop()}catch{}w=null,j=null,Pe=null,xe=null,R=!1}}function Le(e){let n=e,t=n?.gatewayCode??n?.details?.code;if(!t)return null;let r=n?.details??{},s=[`code=${t}`];r.reason&&s.push(`reason=${r.reason}`),r.authReason&&s.push(`authReason=${r.authReason}`),Array.isArray(r.requestedScopes)&&r.requestedScopes.length&&s.push(`requestedScopes=${r.requestedScopes.join(",")}`),r.deviceId&&s.push(`deviceId=${r.deviceId}`),r.requestId&&s.push(`requestId=${r.requestId}`);let o=` (${s.join(", ")})`;switch(t){case"NOT_PAIRED":case"PAIRING_REQUIRED":return`Device pairing approval pending${o}. On the openclaw host run \`openclaw devices approve --latest\` to review and approve the pending request, then retry.`;case"AUTH_SCOPE_MISMATCH":return`Existing device token lacks the required scope${o}. On the openclaw host run \`openclaw devices list\` to find the operator deviceId, then \`openclaw devices rotate --device <id> --role operator --scope operator.admin\` to reissue a token with operator.admin, and restart openclaw.`;case"AUTH_TOKEN_MISSING":case"AUTH_TOKEN_MISMATCH":case"AUTH_DEVICE_TOKEN_MISMATCH":return`Gateway device token is missing or stale${o}. On the openclaw host run \`openclaw devices list\`, then \`openclaw devices remove <deviceId>\`, then restart openclaw to re-pair.`;default:return null}}async function A(e){let n=e.timeoutMs??Ms,t=Date.now(),r=Bs(e);S("request_start",{method:e.method,timeoutMs:n,hasSharedClient:!!w,hasConnected:R,...r});let{client:s,ready:o}=Hs();try{await o}catch(d){let c=Date.now()-t;throw F("request_ready_failed",d,{method:e.method,durationMs:c,timeoutMs:n,...r,code:d?.gatewayCode??d?.code??d?.details?.code,reason:"gateway_ready_failed",communicationClass:"openclaw_gateway_connect"},a.GATEWAY_REQUEST_FAILED),d}let i=Date.now()-t;S("request_ready",{method:e.method,readyWaitMs:i,timeoutMs:n,hasConnected:R,...r});try{let d=await s.request(e.method,e.params,{timeoutMs:n});return S("request_done",{method:e.method,durationMs:Date.now()-t,timeoutMs:n,...r}),d}catch(d){let c=Date.now()-t,l=/timeout|timed out/i.test(String(d?.message??d??""));F("request_error",d,{method:e.method,durationMs:c,timeoutMs:n,readyWaitMs:i,...r,isTimeout:l,code:d?.gatewayCode??d?.code??d?.details?.code,reason:l?"gateway_request_timeout":"gateway_request_error",communicationClass:"openclaw_gateway_rpc"},a.GATEWAY_REQUEST_FAILED);let g=Le(d);if(g){let p=d?.message??String(d);try{d.message=`${p}
5
- ${g}`}catch{}}throw d}}async function ie(e){return A({method:"sessions.create",params:e})}async function mn(e){return A({method:"sessions.delete",params:e})}async function En(e){let n=e.idempotencyKey??(0,ln.randomUUID)(),t={key:e.key,message:e.message,idempotencyKey:n};try{let r=await A({method:"sessions.send",params:t});return{runId:ir(r),raw:r}}catch(r){let s=r?.gatewayCode??r?.code,o=String(r?.message??"");if(s==="INVALID_REQUEST"&&o.includes("session not found")){await ie({key:e.key}),f.info(a.SESSION_AUTO_RECOVERED,{sessionKey:e.key,trigger:"sessions.send"});let i=await A({method:"sessions.send",params:t});return{runId:ir(i),raw:i}}throw r}}function ir(e){if(!e||typeof e!="object")return;let n=e.runId;return typeof n=="string"&&n.trim()?n:void 0}async function ae(e){try{return await A({method:"chat.inject",params:e})}catch(n){let t=n?.gatewayCode??n?.code,r=String(n?.message??"");if(t==="INVALID_REQUEST"&&r.includes("session not found"))return await ie({key:e.sessionKey}),f.info(a.SESSION_AUTO_RECOVERED,{sessionKey:e.sessionKey,trigger:"chat.inject"}),await A({method:"chat.inject",params:e});throw n}}var ar,ln,Ms,$s,tr,Gs,w,j,Pe,xe,R,un,B=y(()=>{"use strict";I();ar=require("openclaw/plugin-sdk/gateway-runtime"),ln=require("node:crypto");tn();k();Mt();G();oe();Ms=2e4,$s=18789,tr=["operator.admin"],Gs=0;w=null,j=null,Pe=null,xe=null,R=!1,un=new Set});function gr(e){if(e.toolName!=="exec")return null;let n=e.sessionKey?.trim(),t=new Set;for(let o of e.routeSessionKeys??[]){let i=o?.trim();i&&t.add(i)}if(n&&t.add(n),t.size===0)return null;In(n);let r=e.params??{},s=oo(r.env)?r.env:{};return{...r,env:{...s,[Ws]:"openclaw",[Vs]:"openclaw-gateway",[zs]:"1",[Xs]:n??[...t][0],[Ys]:JSON.stringify([...t])}}}function fr(e){let n=e.runId?.trim(),t=e.sessionKey?.trim();if(!t||!le(t))return!1;Sn();let r=ro([t,...e.routeSessionKeys??[]]);return eo(t,r),n&&ue.set(n,{sessionKeys:r,updatedAt:Date.now()}),!0}function pr(e){let n=typeof e=="string"?e.trim():e?.runId?.trim(),t=typeof e=="string"?null:e?.sessionKey?.trim();n&&ue.delete(n),t&&le(t)&&no(t)}function Ue(e){let n=new Set,t=e.sessionKey?.trim();t&&le(t)&&n.add(t);let r=e.runId?.trim();if(r){Sn(e.now??Date.now());let s=ue.get(r);for(let o of s?.sessionKeys??[])n.add(o)}else if(!t||!le(t))for(let s of to(e.now??Date.now()))n.add(s);return[...n]}function In(e){let n=e?.trim();!n||!Zs(n)||(de={sessionKey:n,updatedAt:Date.now()})}function yr(e=Date.now()){return de?e-de.updatedAt>Js?(de=null,null):de.sessionKey:null}function Zs(e){return e.startsWith("job:")||e.startsWith("backup:")||/(?:^|[?&:])job=([^:&]+)/.test(e)}function le(e){if(e==="agent:main")return!0;let n=e.split(":");if(n.length<4||n[0]!=="agent"||!n[1])return!1;let t=n[2];return!!(t&&t!=="okx-a2a"&&!Qs.has(t))}function Sn(e=Date.now()){for(let[n,t]of ue)e-t.updatedAt>ur&&ue.delete(n);for(let[n,t]of N)e-t.updatedAt>ur&&N.delete(n)}function eo(e,n){let t=N.get(e);N.set(e,{count:(t?.count??0)+1,updatedAt:Date.now(),routeSessionKeys:n}),_n()}function no(e){let n=N.get(e);if(n){if(n.count<=1){N.delete(e),_n();return}N.set(e,{count:n.count-1,updatedAt:Date.now(),routeSessionKeys:n.routeSessionKeys}),_n()}}function to(e=Date.now()){Sn(e);let n=[...N.keys()];return n.length!==1?[]:N.get(n[0])?.routeSessionKeys??[]}function ro(e){let n=new Set;for(let t of e){let r=t?.trim();r&&le(r)&&n.add(r)}return[...n]}function _n(){try{let e=so();(0,q.mkdirSync)((0,ce.dirname)(e),{recursive:!0,mode:448});let t={version:1,updatedAt:Date.now(),origins:[...N.entries()].map(([s,o])=>({sessionKey:s,count:o.count,updatedAt:o.updatedAt,routeSessionKeys:o.routeSessionKeys}))},r=`${e}.${process.pid}.tmp`;(0,q.writeFileSync)(r,`${JSON.stringify(t)}
6
- `,{encoding:"utf8",mode:384}),(0,q.renameSync)(r,e)}catch(e){console.log(`[okx-a2a:hook] failed to persist gateway route origins: ${e instanceof Error?e.message:String(e)}`)}}function so(e=process.env){let n=e.OKX_AGENT_TASK_HOME?.trim()||(0,ce.join)((0,lr.homedir)(),".okx-agent-task");return(0,ce.join)(n,"run","gateway-route-origins.json")}function oo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var q,lr,ce,Xs,Ys,Ws,Vs,zs,Js,ur,Qs,de,ue,N,An=y(()=>{"use strict";q=require("node:fs"),lr=require("node:os"),ce=require("node:path"),Xs="OKX_A2A_CURRENT_GATEWAY_SESSION_KEY",Ys="OKX_A2A_CURRENT_GATEWAY_SESSION_KEYS",Ws="OKX_A2A_GATEWAY_PROVIDER",Vs="OKX_A2A_RUNTIME_CONTEXT",zs="OKX_A2A_IN_GATEWAY",Js=12e4,ur=30*6e4,Qs=new Set(["heartbeat","cron","webhook","voice"]),de=null,ue=new Map,N=new Map});function ao(e=process.env){return e.OKX_AGENT_TASK_HOME?.trim()||(0,Tn.join)((0,Er.homedir)(),".okx-agent-task")}function co(e=process.env){return e.OKX_A2A_SESSION_STORE_DB_PATH?.trim()||(0,Tn.join)(ao(e),"sqlite","session-store.sqlite")}function Me(e){let n=h(e.jobId)??te(e.sessionKey);return n?uo(lo(n,e.dbPath??co())):[]}function uo(e){let n=new Set,t=[];for(let r of e){let s=hn(h(r.gatewaySessionKey)??h(r.sessionKey)??""),o=po(s);!s||!o||n.has(o)||(n.add(o),t.push(s))}return t}function lo(e,n){if(!(0,mr.existsSync)(n))return[];let{DatabaseSync:t}=go(),r=new t(n,{readOnly:!0});try{if(r.exec("PRAGMA busy_timeout=5000"),!r.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='job_provider_bindings'").get())return[];let o=r.prepare("SELECT provider, gateway_routes_json FROM job_provider_bindings WHERE job_id = ?").get(e);return o?.provider!=="openclaw"||typeof o.gateway_routes_json!="string"?[]:fo(o.gateway_routes_json)}catch(s){return console.log(`[okx-a2a:stored-routes] failed to resolve job route jobId=${e}: ${s instanceof Error?s.message:String(s)}`),[]}finally{r.close()}}function go(){let e=process.emitWarning;process.emitWarning=((n,...t)=>{if(!((typeof n=="string"?n:n.message).includes("SQLite is an experimental feature")&&t.some(s=>s==="ExperimentalWarning")))return e.call(process,n,...t)});try{return require("node:sqlite")}finally{process.emitWarning=e}}function fo(e){try{let n=JSON.parse(e);if(!Array.isArray(n))return[];let t=[];for(let r of n){if(!mo(r))continue;let s=h(typeof r.platform=="string"?r.platform:null),o=hn(h(typeof r.sessionKey=="string"?r.sessionKey:null)??"");if(!s||!o)continue;let i=hn(h(typeof r.gatewaySessionKey=="string"?r.gatewaySessionKey:null)??""),d=h(typeof r.chatId=="string"?r.chatId:null),c=h(typeof r.threadId=="string"?r.threadId:null),l=h(typeof r.updatedAt=="string"?r.updatedAt:null);t.push({platform:s,sessionKey:o,...i?{gatewaySessionKey:i}:{},...d?{chatId:d}:{},...c?{threadId:c}:{},...l?{updatedAt:l}:{}})}return t}catch{return[]}}function po(e){let n=h(e);if(!n)return null;if(n==="agent:main")return"main";if(n.startsWith("backup:"))return null;let t=n.split(":");if(t.length<4||t[0]!=="agent"||!t[1])return null;let r=t[2];return!r||r==="okx-a2a"||r==="backup"||io.has(r)?null:r}function hn(e){let n=h(e);if(!n)return"";let t=n.split(":");if(t.length<4||t[0]!=="agent")return n;let r=t[2],s=t[3];if(r!=="telegram")return n;if((s==="direct"||s==="dm")&&t[4]){if(t[5]==="thread")return n;let o=yo(t.slice(5));return o?`agent:${t[1]}:telegram:direct:${t[4]}:topic:${o}`:`agent:${t[1]}:telegram:direct:${t[4]}`}if(s==="group"&&t[4]){let o=t[5]==="topic"?t[6]:t[5];return o?`agent:${t[1]}:telegram:group:${t[4]}:topic:${o}`:`agent:${t[1]}:telegram:group:${t[4]}`}return n}function yo(e){if(e.length!==0)return e[0]==="topic"?e[1]||void 0:e[0]==="thread"?e.length>=3?e.slice(2).join(":")||void 0:e[1]||void 0:e[0]||void 0}function mo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function h(e){let n=e?.trim();return n||null}var mr,Er,Tn,io,Rn=y(()=>{"use strict";mr=require("node:fs"),Er=require("node:os"),Tn=require("node:path");G();io=new Set(["heartbeat","cron","webhook","voice"])});function On(e){let n=v(e.jobId)??Ao([e.content,...e.contents??[]]);if(!n)return console.log("[okx-a2a:stored-routes] skipped delivered route bind reason=missing_job_id"),[];let t=e.sessionKeys.map(i=>_o(i)).filter(i=>!!i);if(t.length===0)return[];let r=e.dbPath??To(),{DatabaseSync:s}=Ro(),o=new s(r);try{o.exec("PRAGMA busy_timeout=5000"),o.exec(`
2
+ "use strict";var Fr=Object.create;var me=Object.defineProperty;var Br=Object.getOwnPropertyDescriptor;var Hr=Object.getOwnPropertyNames;var qr=Object.getPrototypeOf,Xr=Object.prototype.hasOwnProperty;var y=(e,n)=>()=>(e&&(n=e(e=0)),n);var Ee=(e,n)=>{for(var t in n)me(e,t,{get:n[t],enumerable:!0})},tt=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of Hr(n))!Xr.call(e,s)&&s!==t&&me(e,s,{get:()=>n[s],enumerable:!(r=Br(n,s))||r.enumerable});return e};var Yr=(e,n,t)=>(t=e!=null?Fr(qr(e)):{},tt(n||!e||!e.__esModule?me(t,"default",{value:e,enumerable:!0}):t,e)),Wr=e=>tt(me({},"__esModule",{value:!0}),e);function Vr(e=new Date){return e.toISOString()}function rt(e){return[`[${Vr()}]`,...e]}function u(...e){console.error(...rt(e))}function st(...e){console.warn(...rt(e))}var I=y(()=>{"use strict"});function ot(e){We=e}function _e(){if(!We)throw new Error("[xmtp] PluginRuntime not initialized \u2014 ensure setXmtpRuntime is called in register()");return We}var We,Ie=y(()=>{"use strict";We=null});var a,Se=y(()=>{"use strict";a={GATEWAY_STARTED:"Gateway started",GATEWAY_STOPPED:"Gateway stopped",BOOTSTRAP_APPLIED:"Bootstrap applied",CHANNEL_READY:"Channel ready",CONVERSATION_STARTED:"Conversation started",EVALUATE_CONVERSATION_STARTED:"Evaluate conversation started",CONVERSATION_DELETED:"Conversation deleted",PENDING_CONVERSATION_DENIED:"Pending conversation denied",AGENTS_REFRESHED:"Agents refreshed",USER_DISPATCHED:"User dispatched",SESSION_DISPATCHED:"Session dispatched",SYNC_TICK_COMPLETED:"Sync tick completed",INBOUND_HANDLER_ENTERED:"Inbound handler entered",MESSAGE_RECEIVED:"Message received",MESSAGE_SENT:"Message sent",INBOUND_BUYER_PENDING:"Inbound buyer: no session, group still Unknown (pending)",INBOUND_BUYER_SESSION_AUTO_RECOVERED:"Inbound buyer: session missing for Allowed group, auto-recovered",INBOUND_BLOCKED_SENSITIVE:"Inbound blocked: sensitive word; reply sent",INBOUND_BLOCKED_ADDRESS_MISMATCH:"Inbound blocked: address mismatch",INBOUND_BLOCKED_INELIGIBLE:"Inbound blocked: message-eligible check failed",INBOUND_DROP_EMPTY_CONTENT:"Inbound drop: empty content",INBOUND_DROP_MISSING_JOBID:"Inbound drop: missing jobId",INBOUND_DROP_UNSUPPORTED_MSGTYPE:"Inbound drop: unsupported msgType",INBOUND_DROP_DM_NON_SYSTEM:"Inbound drop: DM sender not in system whitelist",INBOUND_DROP_DM_INVALID_PAYLOAD:"Inbound drop: DM payload invalid",INBOUND_DROP_DM_UNKNOWN_AGENT:"Inbound drop: DM target agent not local",DM_FALLBACK_TO_BACKUP:"DM fallback to backup session",DM_WHITELIST_FAIL_OPEN:"DM whitelist fail-open (empty system accounts)",FILE_UPLOADED:"File uploaded",FILE_DOWNLOADED:"File downloaded",PENDING_LIST_QUERIED:"Pending list queried",AGENT_LIST_QUERIED:"Agent list queried",SESSION_KEY_DERIVED:"Session key derived",CONVERSATION_HISTORY_QUERIED:"Conversation history queried",SESSIONS_QUERIED:"Sessions queried",GROUP_CONSENT_CHANGED:"Group consent changed",SESSION_CREATED:"Session created",SESSION_DELETED:"Session deleted",SESSION_AUTO_RECOVERED:"Session auto-recovered",INBOUND_DELIVERED:"Inbound delivered to session",DM_DELIVERED:"DM delivered to session",OUTBOUND_ELIGIBILITY_CHECKED:"Outbound eligibility checked",MESSAGE_ELIGIBILITY_CHECKED:"Message eligibility checked",AGENT_CLIENT_CREATED:"Agent client created",AGENT_INSTALLATION_SUMMARY:"Agent installation summary",XMTP_HISTORY_SYNC_REQUESTED:"XMTP history sync requested",XMTP_DEBUG_SYNC_REQUESTED:"XMTP debug sync requested",XMTP_DEBUG_SYNC_COMPLETED:"XMTP debug sync completed",AGENT_CLIENT_REMOVED:"Agent client removed",AGENT_STREAM_RECOVERED:"Agent stream recovered",AGENT_STREAM_RECOVERY_REPLAY_COMPLETED:"Agent stream recovery replay completed",ADDRESS_SYNC_COMPLETED:"Address sync completed",AGENT_REFRESH_SESSION_EXPIRED:"Agent refresh aborted: onchainos session expired, local clients taken offline",OFFLINE_REPLAY_MESSAGE_REPLAYED:"Offline replay message replayed",AGENTS_WAKEUP_NOTIFIED:"Agents wakeup notified",CONFIG_SENSITIVE_WORDS_REFRESHED:"Sensitive words config refreshed",CONFIG_SYSTEM_REFRESHED:"System config refreshed",GATEWAY_DISCONNECTED:"Gateway disconnected",GATEWAY_REQUEST:"Gateway request",GATEWAY_DELIVERY_BUFFERED:"Gateway delivery buffered",DAEMON_LIFECYCLE_SKIPPED:"Daemon lifecycle skipped",DAEMON_LIFECYCLE_REQUESTED:"Daemon lifecycle requested",PROMPT_USER_CHECKPOINT:"Prompt user checkpoint",USER_WATCH_STARTED:"User watch started",USER_WATCH_EVENT_DELIVERED:"User watch event delivered",INBOUND_DM_RAW:"Inbound DM raw",INBOUND_GROUP_RAW:"Inbound group raw",INBOUND_IGNORED_DUPLICATE:"Inbound ignored: duplicate message",INBOUND_IGNORED_NON_BUSINESS:"Inbound ignored: non-business message",AI_RUN_STARTED:"AI run started",AI_RUN_COMPLETED:"AI run completed",AI_RUN_SKIPPED:"AI run skipped",RUNTIME_DETECTED:"Runtime detected",PROVIDER_READINESS_CHECKED:"Provider readiness checked",PROVIDER_SWITCHED:"Provider switched",JOB_PROVIDER_BOUND:"Job provider bound",USER_CHANNEL_MESSAGE_DELIVERED:"User channel message delivered",SYSTEM_NOTIFICATION_RECEIVED:"System notification received",SYSTEM_NOTIFICATION_ROUTED:"System notification routed",HERMES_SESSION_ROUTE_BINDING:"Hermes session route binding",DOCTOR_REPORT:"Doctor report",XMTP_CONNECTION_FAILED:"XMTP connection failed",CONVERSATIONS_STREAM_FAILED:"conversations.stream failed",AGENT_START_FAILED:"agent.start failed",AGENT_STREAM_ERROR:"agent stream error",AGENT_UNHANDLED_ERROR:"Agent unhandled error",AGENT_STREAM_RECOVERY_TIMEOUT:"Agent stream recovery timeout",BOOTSTRAP_FAILED:"Bootstrap failed",ONCHAINOS_SESSION_EXPIRED:"Onchainos session expired",ONCHAINOS_CLI_ERROR:"Onchainos CLI error",HEARTBEAT_FAILED:"Heartbeat failed",HEARTBEAT_SKIPPED:"Heartbeat skipped",HEARTBEAT_GATEWAY_CHECK_FAILED:"Heartbeat gateway check failed",MESSAGE_PARSE_FAILED:"Message parse failed",MESSAGE_HANDLER_ERROR:"Message handler error",INBOUND_DISPATCH_FAILED:"Inbound dispatch failed",INBOUND_REPLAY_GATE_DRAIN_FAILED:"Inbound replay gate drain failed",FATAL_UNCAUGHT:"Fatal uncaught error",OFFLINE_REPLAY_FAILED:"Offline replay failed",INBOUND_ROUTING_FAILED:"Inbound routing failed",CONVERSATION_NOT_FOUND:"Conversation not found for send",XMTP_SEND_FAILED:"XMTP send failed",AGENT_REFRESH_FAILED:"Agent refresh failed",GROUP_CONSENT_UPDATE_FAILED:"Group consent update failed",TOOL_EXECUTE_FAILED:"Tool execute failed",AGENT_RESOLUTION_FAILED:"Agent resolution failed",USER_DISPATCH_FAILED:"User dispatch failed",INBOUND_ELIGIBILITY_BYPASSED:"Inbound eligibility bypassed",INBOUND_ADDRESS_CHECK_FAILED:"Inbound address check failed",INBOUND_ADDRESS_CHECK_BYPASSED:"Inbound address check bypassed",INBOUND_SENSITIVE_CHECK_FAILED:"Inbound sensitive check failed",FILE_UPLOAD_FAILED:"File upload failed",FILE_DOWNLOAD_FAILED:"File download failed",OFFLINE_REPLAY_MESSAGE_FAILED:"Offline replay message failed",PENDING_NOTIFICATION_FAILED:"Pending notification failed",GATEWAY_CONNECT_FAILED:"Gateway connect failed",GATEWAY_REQUEST_FAILED:"Gateway request failed",PROMPT_USER_FAILED:"Prompt user failed",DAEMON_COMMAND_FAILED:"Daemon command failed",DAEMON_COMMAND_TIMEOUT:"Daemon command timeout",DAEMON_COMMAND_STALE:"Daemon command stale",DAEMON_LIFECYCLE_FAILED:"Daemon lifecycle failed",DAEMON_TICK_FAILED:"Daemon tick failed",DIRECT_CLI_FAILED:"Direct CLI failed",DOCTOR_NOT_READY:"Doctor not ready",DOCTOR_CRASHED:"Doctor crashed",AI_RUN_FAILED:"AI run failed",AI_RUN_TIMEOUT:"AI run timeout",AI_RUN_TOOL_FAILED:"AI run tool failed",IPC_FAILED:"IPC failed",NOTIFY_AGENTS_WAKEUP_FAILED:"Notify agents wakeup failed",OUTBOUND_AGENT_LOOKUP_FAILED:"Outbound agent lookup failed",OUTBOUND_ELIGIBILITY_CHECK_FAILED:"Outbound eligibility check failed",OUTBOUND_ELIGIBILITY_BYPASSED:"Outbound eligibility bypassed",OUTBOUND_BLOCKED_INELIGIBLE:"Outbound blocked: message-eligible check failed",CACHE_LOAD_FAILED:"Cache load failed",CACHE_WRITE_FAILED:"Cache write failed",CONFIG_LOAD_FAILED:"Config load failed",SENTRY_INIT_SKIPPED:"Sentry init skipped",AGENT_DB_DIR_CREATE_FAILED:"Agent DB dir create failed",AGENT_INSTALLATION_LIMIT_NEAR:"Agent installation limit near",XMTP_HISTORY_SYNC_REQUEST_FAILED:"XMTP history sync request failed",XMTP_DEBUG_SYNC_FAILED:"XMTP debug sync failed"}});function V(e){return typeof e=="string"&&e.trim().length>0}function at(e){let n=V(e.messageId)?e.messageId.trim():"";if(n&&zr.test(n))return n;let t=[n,e.jobId,e.sessionKey,e.attentionId].map(s=>V(s)?s.trim():"");if(t.every(s=>s===""))return U;let r=(0,it.createHash)("sha256").update(t.join("|")).digest("hex");return`${Jr}${r.slice(0,Qr)}`}function dt(e){if(!V(e))return{...Ve};let[n,...t]=e.trim().split("-"),r=n.split(".");if(r.length<3)return{...Ve};let[s,o,i]=r.map(d=>Number(d));return[s,o,i].every(d=>Number.isInteger(d)&&d>=0)?{releaseBase:n,releaseChannel:ns(t[0]),releaseCode:s*Zr+o*es+i}:{...Ve}}function ns(e){if(!V(e))return"release";let n=e.toLowerCase().replace(/[^a-z0-9]/g,"");return n?n.startsWith("beta")?"beta":n:"release"}function z(e){return[["checkpoint",e.checkpoint],["outcome",e.outcome],["transport",e.transport],["eventFamily",e.eventFamily],["workloadClass",e.workloadClass],["taskMode",e.taskMode],["originPlatform",e.originPlatform],["deliveryId",e.deliveryId]].reduce((t,[r,s])=>(V(s)&&(t[r]=s.trim()),t),{})}function he(e){if(typeof e!="string")return;let n=e.trim();if(!(!n||n===U||n==="*"))return n}function Ae(...e){return e.map(he).find(n=>!!n)}function ze(e){let n={...e},t=Ae(e.jobId,e.taskId);t&&(n.jobId=t,n.taskId=t);let r=he(e.stage)??"",s=r.startsWith("inbound/"),o=r.startsWith("outbound/"),i=Ae(e.onchainosAgentId,e.myAgentId,e.agentId),d=[e.peerAgentId,e.providerAgentId,e.clientAgentId].map(he).find(_=>!!_&&_!==i),c=Ae(e.fromAgentId,e.senderAgentId,s?d:void 0,o?i:void 0),l=Ae(e.toAgentId,e.receiverAgentId,s?i:void 0,o?d:void 0);c&&(n.fromAgentId=c),l&&(n.toAgentId=l);let g=[c,l,e.agentId,e.onchainosAgentId,e.peerAgentId,e.providerAgentId,e.clientAgentId,e.sessionAgentId,e.myAgentId].map(he).filter(_=>!!_),p=[...new Set(g)].sort();return p.length>0&&(n.participantAgentIds=p.join(",")),n}var it,zr,Jr,Qr,Zr,es,U,Ve,Te=y(()=>{"use strict";it=require("node:crypto"),zr=/^[0-9a-f]{16,}$/i,Jr="dlv",Qr=24,Zr=1e6,es=1e3,U="unknown";Ve={releaseBase:U,releaseChannel:U,releaseCode:0}});function J(){return M||(process.env.OKX_AGENT_TASK_HOME?(M=Re(process.env.OKX_AGENT_TASK_HOME),M):(M=Re((0,we.join)(rs(),".okx-agent-task")),M))}function Re(e){return ts(e)}function ts(e){(0,Ne.mkdirSync)(e,{recursive:!0,mode:ct});try{(0,Ne.chmodSync)(e,ct)}catch(n){let t=n.code;if(t!=="EPERM"&&t!=="EACCES")throw n}return e}function rs(){try{let e=(0,ut.homedir)();if(e)return e}catch(e){}return(0,we.resolve)(process.cwd())}var ut,we,Ne,M,ct,Je=y(()=>{"use strict";ut=require("node:os"),we=require("node:path"),Ne=require("node:fs"),M=null,ct=448});function Qe(e,n,t){if(os.has(n))try{let r=J(),s=(0,D.join)(r,"xmtp-tests"),o=(0,D.join)(s,"active.json");if(!(0,$.existsSync)(o))return;let i=JSON.parse((0,$.readFileSync)(o,"utf8")),d=typeof i.runId=="string"?i.runId:"";if(!ss.test(d))return;let c=(0,D.resolve)(s,d),l=`${(0,D.resolve)(s)}${D.sep}`;if(!c.startsWith(l))return;(0,$.appendFileSync)((0,D.join)(c,"events.jsonl"),`${JSON.stringify({timestamp:new Date().toISOString(),level:e,eventName:n,runId:d,...t})}
3
+ `,{encoding:"utf8",mode:384})}catch{}}var $,D,ss,os,lt=y(()=>{"use strict";$=require("node:fs"),D=require("node:path");Je();ss=/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/,os=new Set(["Address sync completed","Agent client created","Agent client removed","agent stream error","Agent stream recovered","Agent stream recovery replay completed","Agent stream recovery timeout","conversations.stream failed","Inbound delivered to session","Inbound dispatch failed","Inbound handler entered","Inbound ignored: duplicate message","Message handler error","Message received","Message sent","Offline replay failed","Offline replay message failed","Offline replay message replayed","System notification received","System notification routed","XMTP connection failed"])});function At(e){return e instanceof Error?e:void 0}function Ze(e){if(typeof e!="string"&&typeof e!="number")return;let n=String(e).trim();if(!(!n||/^(?:null|undefined|unknown)$/i.test(n))&&/^[A-Za-z0-9_.:-]+$/.test(n))return n.slice(0,is)}function gt(e){if(typeof e!="string")return;let n=Ze(e.trim().split(/\s+/,1)[0])?.toLowerCase();return n&&cs.has(n)?n:void 0}function ft(e){let n=Ze(e)?.toUpperCase();return n&&ds.has(n)?n:void 0}function pt(e){return ft(e?.code)??ft(e?.errno)}function yt(e,n){let t=n?.toUpperCase(),r=e?.name.toLowerCase()??"",s=e?.message.toLowerCase()??"";return t&&mt.has(t)?"resource_exhausted":t&&Et.has(t)?"connection_interrupted":t&&_t.has(t)?"network_unavailable":t&&It.has(t)?"timeout":t&&St.has(t)?"permission_denied":t==="ENOENT"?"missing_dependency":t==="ABORT_ERR"||r==="aborterror"?"cancelled":r==="syntaxerror"?"invalid_response":/connection\s+(?:reset|closed|interrupted)|broken\s+pipe|unexpected\s+eof/.test(s)?"connection_interrupted":/(?:json|response).*(?:parse|invalid)/.test(s)?"invalid_response":/session\s+(?:is\s+)?expired|login\s+expired/.test(s)?"session_expired":/timed?\s*out|timeout/.test(s)?"timeout":"unknown"}function us(e){switch(e){case"connection_interrupted":case"network_unavailable":case"resource_exhausted":case"timeout":return"retryable";case"invalid_response":case"missing_dependency":case"permission_denied":case"session_expired":return"non_retryable";default:return"unknown"}}function ls(e){let n=[],t=new Set,r=e;for(;r&&n.length<as&&!t.has(r);)n.push(r),t.add(r),r=At(r.cause);return n}function ht(e,n,t){let r=At(n),s={};if(r&&(s.errorName=r.name,s.errorMessageLength=String(r.message.length)),!r||e===a.AGENT_STREAM_ERROR)return s;let o=ls(r),i=o[0],d=o.length>1?o[o.length-1]:void 0,c=Ze(t.exitCode),l=pt(i),g=yt(i,l),p=gt(i.syscall),_=pt(d),L=d?yt(d,_):void 0,Ye=gt(d?.syscall),Qn=g==="unknown"&&L?L:g,Zn=Qn==="unknown"&&c&&c!=="0"?"process_exit":Qn,et=l??_,nt=p??Ye;return{...s,errorCategory:Zn,errorRetryability:us(Zn),errorCauseDepth:String(Math.max(0,o.length-1)),...et?{errorCode:et}:{},...nt?{errorSyscall:nt}:{},...d?{causeErrorMessageLength:String(d.message.length),causeErrorCategory:L??"unknown",..._?{causeErrorCode:_}:{},...Ye?{causeErrorSyscall:Ye}:{}}:{}}}var is,as,mt,Et,_t,It,St,ds,cs,Tt=y(()=>{"use strict";Se();is=64,as=4,mt=new Set(["EAGAIN","EMFILE","ENFILE","ENOMEM"]),Et=new Set(["ECONNRESET","EPIPE"]),_t=new Set(["EAI_AGAIN","ECONNREFUSED","EHOSTUNREACH","ENETDOWN","ENETUNREACH","ENOTFOUND"]),It=new Set(["ETIMEDOUT","ESOCKETTIMEDOUT"]),St=new Set(["EACCES","EPERM"]),ds=new Set([...mt,...Et,..._t,...It,...St,"ABORT_ERR","ENOENT"]),cs=new Set(["access","bind","close","connect","getaddrinfo","kill","listen","mkdir","open","read","readdir","readlink","rename","rmdir","spawn","stat","unlink","write"])});function Es(e){try{let n=e?.extra?.eventName??e?.tags?.eventName;if(typeof n=="string"&&n.trim().length>0)return e;let t=e;t.extra={...De,...t.extra??{},eventName:a.FATAL_UNCAUGHT,eventFamily:"diagnostics",outcome:"failed",transport:"local"},t.tags={...t.tags??{},eventName:a.FATAL_UNCAUGHT,eventFamily:"diagnostics",outcome:"failed"},t.fingerprint=["a2a",a.FATAL_UNCAUGHT]}catch{}return e}var m,Ot,Rt,wt,gs,fs,ps,ys,ms,Oe,Nt,De,en,f,Dt,bt,k=y(()=>{"use strict";I();m=Yr(require("@sentry/node")),Ot=require("node:crypto");Se();Te();lt();Tt();Se();Te();Rt=(0,Ot.randomUUID)(),wt=new Set(["args","apikey","argv","auth","authorization","authtoken","bearer","body","cache","command","content","credential","credentials","cwd","data","error","failures","filename","file_name","filepath","file_path","headers","input","logpath","message","output","password","params","path","payload","privatekey","prompt","raw","rawevent","rawtext","request","response","accesstoken","refreshtoken","digest","nonce","salt","secret","token","stderr","stdout","title","tooloutput"]),gs=["accesstoken","apikey","authorization","authtoken","content","credential","filepath","logpath","outputpath","password","payload","privatekey","prompt","rawevent","rawtext","refreshtoken","requestbody","responsebody","secret","stderr","stdout","token","tooloutput"],fs=new Set(["onchainosagentlistresultjson","onchainosagentlistdiagnostictext","systemconfigjson"]),ps=new Set(["agentId","agentPlatform","cacheName","causeCode","causeType","causeVariant","checkpoint","code","communicationClass","component","eventFamily","eventName","endpoint","errorCategory","errorCode","errorRetryability","errorSyscall","exitCode","fromAgentId","grpcMethod","jobId","kind","method","onchainosAgentId","operation","originPlatform","outcome","participantAgentIds","peerAgentId","phase","platform","provider","reason","releaseBase","releaseChannel","releaseCode","replayOutcome","role","runId","runtimeContainer","senderAgentId","source","stage","status","streamErrorCode","streamType","subcommand","systemEvent","taskId","taskMode","toAgentId","transport","transportFailure","transportProtocol","type","workloadClass"]),ys=["eventName","errorCategory","errorCode","errorSyscall","cacheName","component","method","operation","phase","reason","code","provider","type","kind","status","subcommand"],ms=new Set([a.GATEWAY_STARTED,a.GATEWAY_STOPPED,a.GATEWAY_DISCONNECTED,a.GATEWAY_REQUEST,a.GATEWAY_DELIVERY_BUFFERED,a.DAEMON_LIFECYCLE_SKIPPED,a.DAEMON_LIFECYCLE_REQUESTED,a.PROMPT_USER_CHECKPOINT,a.USER_WATCH_STARTED,a.USER_WATCH_EVENT_DELIVERED,a.CHANNEL_READY,a.CONVERSATION_STARTED,a.EVALUATE_CONVERSATION_STARTED,a.CONVERSATION_DELETED,a.USER_DISPATCHED,a.SESSION_DISPATCHED,a.SESSION_CREATED,a.SESSION_DELETED,a.SESSION_AUTO_RECOVERED,a.INBOUND_DELIVERED,a.INBOUND_DM_RAW,a.INBOUND_GROUP_RAW,a.INBOUND_IGNORED_DUPLICATE,a.INBOUND_IGNORED_NON_BUSINESS,a.AI_RUN_STARTED,a.AI_RUN_COMPLETED,a.AI_RUN_SKIPPED,a.RUNTIME_DETECTED,a.PROVIDER_READINESS_CHECKED,a.PROVIDER_SWITCHED,a.JOB_PROVIDER_BOUND,a.USER_CHANNEL_MESSAGE_DELIVERED,a.SYSTEM_NOTIFICATION_RECEIVED,a.SYSTEM_NOTIFICATION_ROUTED,a.HERMES_SESSION_ROUTE_BINDING,a.INBOUND_BLOCKED_ADDRESS_MISMATCH,a.INBOUND_BLOCKED_INELIGIBLE,a.MESSAGE_ELIGIBILITY_CHECKED,a.INBOUND_BLOCKED_SENSITIVE,a.INBOUND_DROP_DM_INVALID_PAYLOAD,a.INBOUND_DROP_DM_NON_SYSTEM,a.INBOUND_DROP_DM_UNKNOWN_AGENT,a.INBOUND_DROP_EMPTY_CONTENT,a.INBOUND_DROP_MISSING_JOBID,a.INBOUND_DROP_UNSUPPORTED_MSGTYPE,a.DM_DELIVERED,a.DM_FALLBACK_TO_BACKUP,a.DM_WHITELIST_FAIL_OPEN,a.INBOUND_BUYER_PENDING,a.INBOUND_BUYER_SESSION_AUTO_RECOVERED,a.MESSAGE_SENT,a.AGENT_CLIENT_CREATED,a.AGENT_CLIENT_REMOVED,a.AGENT_STREAM_ERROR,a.AGENT_STREAM_RECOVERED,a.AGENT_STREAM_RECOVERY_REPLAY_COMPLETED,a.ADDRESS_SYNC_COMPLETED,a.AGENTS_REFRESHED,a.AGENTS_WAKEUP_NOTIFIED,a.AGENT_LIST_QUERIED,a.BOOTSTRAP_APPLIED,a.CONFIG_SENSITIVE_WORDS_REFRESHED,a.CONFIG_SYSTEM_REFRESHED,a.CONVERSATION_HISTORY_QUERIED,a.FILE_DOWNLOADED,a.FILE_UPLOADED,a.GROUP_CONSENT_CHANGED,a.INBOUND_HANDLER_ENTERED,a.MESSAGE_RECEIVED,a.OFFLINE_REPLAY_MESSAGE_REPLAYED,a.AGENT_REFRESH_SESSION_EXPIRED,a.OUTBOUND_ELIGIBILITY_CHECKED,a.OUTBOUND_BLOCKED_INELIGIBLE,a.AGENT_INSTALLATION_SUMMARY,a.XMTP_HISTORY_SYNC_REQUESTED,a.XMTP_DEBUG_SYNC_REQUESTED,a.XMTP_DEBUG_SYNC_COMPLETED,a.PENDING_CONVERSATION_DENIED,a.PENDING_LIST_QUERIED,a.SESSION_KEY_DERIVED,a.SESSIONS_QUERIED,a.SYNC_TICK_COMPLETED]),Oe=256,Nt=128,De={},en=class e{static instance;initialized=!1;buffer=[];constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}init(n){if(this.initialized){st("[logger] Already initialized, skipping.");return}try{De=dt(n.release),m.init({dsn:n.dsn,release:n.release,environment:n.environment,maxBreadcrumbs:0,beforeBreadcrumb:()=>null,beforeSend:r=>Es(r),isInner:!1});let t={projectName:n.projectName,agentPlatform:n.agentPlatform};n.runtimeContainer&&(t.runtimeContainer=n.runtimeContainer),m.setTags(t)}catch{return}this.initialized=!0,this.flush()}info(n,t){let r=e.sanitizeExtra(ze({flowId:Rt,...De,...t??{}}));if(Qe("info",n,r),!!ms.has(n)){if(!this.initialized){this.buffer.push({level:"info",message:n,extra:r});return}this.captureInfo(n,r)}}captureInfo(n,t){try{m.withScope(r=>{e.applyDiagnostics(r,n,t),m.captureEvent({level:"info",message:n,extra:{...t,eventName:n}})})}catch{}}error(n,t,r){let s=e.sanitizeExtra(ze({flowId:Rt,...De,...r??{}}));if(Qe("error",n,s),!this.initialized){this.buffer.push({level:"error",message:n,error:t,extra:s});return}this.captureError(n,t,s)}captureError(n,t,r){try{let s=ht(n,t,r),o={...r,...s};m.withScope(i=>{i.setLevel("error"),e.applyDiagnostics(i,n,o),m.captureException(e.createSentryEvent(n),{extra:{...o,eventName:n}})})}catch{}}async shutdown(){try{await m.close(5e3)}catch{await m.flush(5e3)}}flush(){for(;this.buffer.length>0;){let n=this.buffer.shift();n.level==="info"?this.captureInfo(n.message,n.extra??{}):this.captureError(n.message,n.error,n.extra??{})}}static sanitizeExtra(n){return Object.fromEntries(Object.entries(n).filter(([,t])=>t!==void 0).filter(([t])=>!e.isBlockedExtraKey(t)).map(([t,r])=>[t,e.safeValueForKey(t,r)]))}static isBlockedExtraKey(n){let t=n.toLowerCase(),r=e.normalizeSensitiveKey(n);return wt.has(t)||wt.has(r)?!0:e.isSafeMetricKey(r)?!1:gs.some(s=>r.includes(s))}static isSafeMetricKey(n){return/(bytes|count|length|ms|size)$/.test(n)}static safeValueForKey(n,t){return typeof t=="string"&&fs.has(e.normalizeSensitiveKey(n))?t:e.safeValue(t)}static normalizeSensitiveKey(n){return n.toLowerCase().replace(/[^a-z0-9]/g,"")}static safeValue(n){if(typeof n=="string")return n.length<=Oe?n:`${n.slice(0,Oe)}...`;if(n==null||typeof n=="number"||typeof n=="boolean")return n;if(typeof n=="bigint")return n.toString();if(n instanceof Error)return{name:n.name,messageLength:n.message.length};if(Array.isArray(n))return n.slice(0,20).map(r=>e.safeValue(r));if(typeof n=="object")return Object.fromEntries(Object.entries(n).slice(0,50).filter(([,r])=>r!==void 0).filter(([r])=>!e.isBlockedExtraKey(r)).map(([r,s])=>[r,e.safeValueForKey(r,s)]));let t=String(n);return t.length<=Oe?t:`${t.slice(0,Oe)}...`}static tagValue(n){let t=String(n);return t.length<=Nt?t:`${t.slice(0,Nt)}...`}static normalizeTagKey(n){return n.replace(/[^A-Za-z0-9_.:-]+/g,"_").slice(0,32)||"unknown"}static applyDiagnostics(n,t,r){let s={eventName:t,...r};for(let[i,d]of Object.entries(s))ps.has(i)&&n.setTag(e.normalizeTagKey(i),e.tagValue(d));let o=["a2a",t];for(let i of ys){let d=s[i];d&&o.push(`${i}:${e.tagValue(d)}`)}n.setFingerprint(o)}static toPascalCase(n){return n.split(/[\s:]+/).filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}static createSentryEvent(n){let t=new Error(n);return t.name=e.toPascalCase(n),t.stack=`${t.name}: ${n}`,t}},f=en.getInstance(),Dt=e=>f.init(e),bt=()=>f.shutdown()});function be(){return _e()}function Kt(e){kt.has(e)||(kt.add(e),u(`[okx-a2a:runtime] using legacy OpenClaw PluginRuntime API api=${e}`))}function Ce(){let e=be().config;if(typeof e.current=="function")return e.current();if(typeof e.loadConfig=="function")return Kt("config.loadConfig"),e.loadConfig();throw new Error("Unsupported OpenClaw PluginRuntime: neither config.current nor config.loadConfig is available")}function vt(){let e=be().agent.session;if(typeof e.resolveStorePath!="function"||typeof e.loadSessionStore!="function")throw new Error("Unsupported OpenClaw PluginRuntime: no row-level or legacy session reader is available");Kt("agent.session.loadSessionStore");let n=e.resolveStorePath(void 0,{agentId:"main"});return e.loadSessionStore(n,{skipCache:!0})}function Pt(e){let n=be().agent.session;return typeof n.getSessionEntry=="function"?n.getSessionEntry({agentId:"main",sessionKey:e,readConsistency:"latest"}):vt()[e]}function nn(){let e=be().agent.session;return typeof e.listSessionEntries=="function"?e.listSessionEntries({agentId:"main",readConsistency:"latest",readOnly:!0}):Object.entries(vt()).map(([n,t])=>({sessionKey:n,entry:t}))}function xt(){return Object.fromEntries(nn().map(({sessionKey:e,entry:n})=>[e,n]))}var kt,tn=y(()=>{"use strict";I();Ie();kt=new Set});function Is(e=J()){return(0,Lt.join)(e,"openclaw-gateway.json")}function Ut(e,n=J()){let t=Re(n),r=Is(t),s=`${r}.${process.pid}.tmp`,o={version:1,url:e.url,...e.password?{password:e.password}:{},...e.token?{token:e.token}:{},updatedAt:new Date().toISOString(),source:"openclaw-plugin"};(0,b.writeFileSync)(s,`${JSON.stringify(o,null,2)}
4
+ `,{encoding:"utf8",mode:384});try{(0,b.chmodSync)(s,384)}catch{}(0,b.renameSync)(s,r);try{(0,b.chmodSync)(r,384)}catch{}return r}var b,Lt,Mt=y(()=>{"use strict";b=require("node:fs"),Lt=require("node:path");Je()});function ne(e){return e.includes(Z)||e.includes(`:${ee}:`)}function ke(e){if(!(!e||e==="direct"||e==="@direct"))return e.startsWith("telegram:")||e.startsWith("@")?e:`telegram:${e}`}function Q(e){if(typeof e=="number"&&Number.isFinite(e))return String(Math.trunc(e));if(typeof e=="string")return e.trim()||void 0}function $t(e){if(e.length!==0)return e[0]==="topic"?Q(e[1]):e[0]==="thread"?e.length>=3?Q(e.slice(2).join(":")):Q(e[1]):Q(e[0])}function rn(e,n){return!e||!n||!e.startsWith("telegram:")||/:topic:\d+$/.test(e)?e:`${e}:topic:${n}`}function Ss(e,n){let t=e.split(":");if(n==="telegram"){let r=t.indexOf("telegram"),s=r>=0?t.slice(r+1):t.slice(3),o=s.findIndex(d=>d==="direct"||d==="dm");if(o>=0){let d=o>0?s[o-1]:void 0,c=s[o+1]==="telegram"&&s[o+2]?`telegram:${s[o+2]}`:s[o+1],l=$t(s.slice(o+2));return{to:rn(ke(c),l),accountId:d,threadId:l}}let i=s.indexOf("group");if(i>=0){let d=i>0?s[i-1]:void 0,c=s[i+1]==="telegram"&&s[i+2]?`telegram:${s[i+2]}`:s[i+1],l=$t(s.slice(i+2));return{to:rn(ke(c),l),accountId:d,threadId:l}}if(s[0]==="telegram"&&s[1])return{to:`telegram:${s[1]}`,accountId:void 0};if(s[1]==="telegram"&&s[2])return{to:`telegram:${s[2]}`,accountId:s[0]};if(s.length>=2)return{to:ke(s[1]),accountId:s[0]};if(s.length===1)return{to:ke(s[0]),accountId:void 0}}return{to:t[4],accountId:void 0}}function Gt(e,n){return typeof e!="string"||e==="direct"||e==="@direct"?n:e}function jt(e){return As[e]??e}function Ft(e){let n=[e],t=e.split(":");if(t.length<6||t[0]!=="agent"||t[2]!=="telegram"||t[3]!=="direct"&&t[3]!=="dm"||!t[4])return n;let r=t[4],s=t.slice(5),o;if(s[0]==="topic"&&s[1])o=`agent:${t[1]}:telegram:direct:${r}:thread:${r}:${s.slice(1).join(":")}`;else if(s[0]==="thread"){let i=s.length>=3?s.slice(2).join(":"):s[1];i&&(o=`agent:${t[1]}:telegram:direct:${r}:topic:${i}`)}return o&&o!==e&&n.push(o),n}function hs(e){if(e==="agent:main")return"main";let n=e.split(":");return n.length<4||n[0]!=="agent"||!n[1]||!n[2]||ne(e)||n[2]==="backup"?null:n[2]}function sn(e,n){if(!Ht(n))return null;let t=n,r=t.deliveryContext?.channel??t.lastChannel??t.origin?.provider??hs(e);if(!r)return null;let s=jt(r),o=Ss(e,s),i=Gt(t.deliveryContext?.to,o.to)??Gt(t.lastTo,o.to)??o.to,d=t.deliveryContext?.accountId??o.accountId,c=Q(t.deliveryContext?.threadId??t.origin?.threadId??t.lastThreadId??o.threadId);return{channel:s,target:{sessionKey:e,to:s==="telegram"?rn(i,c):i,accountId:d,threadId:c,updatedAt:t.lastInteractionAt??t.updatedAt??Date.now()}}}function Bt(e){let n=new Map,t=new Map;for(let[r,s]of Object.entries(e)){if(ne(r)||!Ht(s))continue;let o=s;if(o.spawnedBy||o.subagentRole)continue;let i=sn(r,s);if(!i)continue;let{channel:d,target:c}=i,{to:l,updatedAt:g}=c;l&&(!t.get(d)||g>(n.get(d)?.updatedAt??0))&&t.set(d,l);let p=n.get(d);(!p||g>p.updatedAt)&&n.set(d,c)}for(let[r,s]of n)if(!s.to){let o=t.get(r);o&&(s.to=o)}for(let[r,s]of n)u(`[findLatestUserSessions] channel=${r} winner=${s.sessionKey} to=${s.to??"(none)"} accountId=${s.accountId??"(none)"} interactedAt=${s.updatedAt}`);return n}function Ht(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var Z,ee,As,qt=y(()=>{"use strict";I();Z="okx-xmtp",ee="okx-a2a";As={dashboard:"webchat"}});function Yt(e){if(ne(e))return null;try{for(let n of Ft(e)){let t=sn(n,Pt(n));if(t)return t}return null}catch(n){return Wt("find_user_session_target",n),null}}function Xt(e){return e.toLowerCase().startsWith("0x")}function Ts(e){if(typeof e=="string")return`${Z}:${e}`;let n="myAgentId"in e&&"toAgentId"in e?new URLSearchParams({my:e.myAgentId,to:e.toAgentId,job:e.jobId}):new URLSearchParams({my:e.myXmtpAddress,to:e.toXmtpAddress,job:e.jobId});return`${Z}:${n.toString()}`}function on(e){let n=`${Z}:`,t=e.indexOf(n);if(t===-1)return null;let r=new URLSearchParams(e.slice(t+n.length)),s=r.get("myAgentId")||r.get("myagentid"),o=r.get("toAgentId")||r.get("toagentid"),i=r.get("my"),d=r.get("to"),c=r.get("job"),l=r.get("gid");return s&&o&&c?{format:"agent",myAgentId:s,toAgentId:o,jobId:c,xmtpGroupId:l??""}:!i||!d||!c?null:!Xt(i)&&(d==="_"||!Xt(d))?{format:"agent",myAgentId:i,toAgentId:d,jobId:c,xmtpGroupId:l??""}:{format:"address",myXmtpAddress:i,toXmtpAddress:d,jobId:c,xmtpGroupId:l??""}}function te(e){if(!e)return"";let n=on(e);return n?.jobId?n.jobId:/(?:^|:)backup:([^:&]+)/.exec(e)?.[1]??""}function se(e){let n=e.taskId?.trim()||te(e.scopeKey)||te(e.sessionKey);return n?{taskId:n}:{}}function Wt(e,n){u(`[okx-a2a:session] session-store lookup failed; continuing phase=${e} error=${n instanceof Error?n.message:String(n)}`)}function Rs(e){let n=typeof e=="string"?e:Ts(e);return(0,re.buildAgentSessionKey)({agentId:"main",channel:ee,peer:{kind:"group",id:n}})}function Vt(){let e=Ce().agents?.list;if(e&&e.length>0){let n=e.find(t=>t.id==="main");return n?n.id:e[0].id}return"main"}function zt(){return(0,re.buildAgentSessionKey)({agentId:Vt(),channel:ee,peer:{kind:"group",id:"backup"}})}function ws(e){return(0,re.buildAgentSessionKey)({agentId:Vt(),channel:ee,peer:{kind:"group",id:`backup:${e}`}})}function K(){try{return Bt(xt())}catch(e){return Wt("find_latest_user_sessions",e),new Map}}function Jt(e){let n=new Set,t=[...e.sessionKey?[e.sessionKey]:[],...Array.isArray(e.sessionKeys)?e.sessionKeys:[]].filter(s=>s.trim()),r=[];e.jobId&&r.push({jobId:e.jobId,myAgentId:e.myAgentId,toAgentId:e.toAgentId,myXmtpAddress:e.myXmtpAddress,toXmtpAddress:e.toXmtpAddress});for(let s of t){if(s.startsWith("agent:")){n.add(s);continue}let o=bs(s);if(o){n.add(ws(o));continue}let i=Qt(s);if(i){r.push(i);continue}let d=on(s);if(d){r.push(Ds(d));continue}n.add(Rs(s))}for(let s of Ns())for(let o of r)if(Os(s,o)){n.add(s);break}return[...n].sort()}function Ns(){return nn().map(({sessionKey:e})=>e).filter(ne)}function Os(e,n){let t=on(e);if(t)return Cs(t,n);let r=Qt(e);return r?!(n.jobId&&r.jobId!==n.jobId||n.myAgentId&&r.myAgentId!==n.myAgentId||n.toAgentId&&r.toAgentId!==n.toAgentId||n.myXmtpAddress&&!n.myAgentId||n.toXmtpAddress&&!n.toAgentId):!n.jobId||n.myAgentId||n.toAgentId||n.myXmtpAddress||n.toXmtpAddress?!1:te(e)===n.jobId}function Ds(e){return"myAgentId"in e?{myAgentId:e.myAgentId,toAgentId:e.toAgentId,jobId:e.jobId}:{myXmtpAddress:e.myXmtpAddress,toXmtpAddress:e.toXmtpAddress,jobId:e.jobId}}function Qt(e){let n=e.split(":"),t=n.indexOf("job");return t<0||n[t+2]!=="my"||n[t+4]!=="to"||!n[t+1]||!n[t+3]||!n[t+5]?null:{jobId:Ke(n[t+1]),myAgentId:Ke(n[t+3]),toAgentId:Ke(n[t+5])}}function bs(e){return e.startsWith("backup:")?Ke(e.slice(7)):null}function Cs(e,n){return n.jobId&&e.jobId!==n.jobId?!1:"myAgentId"in e?!(n.myAgentId&&e.myAgentId!==n.myAgentId||n.toAgentId&&e.toAgentId!==n.toAgentId||n.myXmtpAddress&&!n.myAgentId||n.toXmtpAddress&&!n.toAgentId):!(n.myXmtpAddress&&e.myXmtpAddress.toLowerCase()!==n.myXmtpAddress.toLowerCase()||n.toXmtpAddress&&e.toXmtpAddress.toLowerCase()!==n.toXmtpAddress.toLowerCase()||n.myAgentId&&!n.myXmtpAddress||n.toAgentId&&!n.toXmtpAddress)}function Ke(e){try{return decodeURIComponent(e)}catch{return e}}var re,G=y(()=>{"use strict";I();re=require("openclaw/plugin-sdk/routing");tn();qt()});function Zt(e){return e.reduce((n,[t,r])=>(r!=null&&(n[t]=String(r)),n),{})}function er(e){let n=at({jobId:e.jobId,sessionKey:e.sessionKey});return n===U?null:n}function C(e){return{...z({checkpoint:e.checkpoint,outcome:e.outcome,transport:"user_channel",eventFamily:"user_channel",deliveryId:er(e)}),...Zt([["component",ks],["source",e.source],["channel",e.channel],["sessionKey",e.sessionKey],["jobId",e.jobId],["direction",e.direction],["senderAgentId",e.senderAgentId],["receiverAgentId",e.receiverAgentId],["hasTo",e.hasTo===void 0?void 0:e.hasTo?"1":"0"]])}}function ve(e,n="success"){let t={};for(let[s,o]of Object.entries(e))o!=null&&(t[s]=String(o));let r=t.phase?.trim()??"";return{...z({checkpoint:r?`${Ps}${r}`:null,outcome:n,transport:"gateway_rpc",eventFamily:"lifecycle"}),...t}}function T(e){let n=Object.entries({component:Ks,operation:vs,checkpoint:e.checkpoint,sessionKey:e.sessionKey,channel:e.channel??"",taskId:e.taskId??"",runId:e.runId??"",reason:e.reason??"",status:e.status??"",queued:e.queued??"",delayMs:e.delayMs??"",durationMs:e.durationMs??"",running:e.running??"",processing:e.processing??""}).filter(([,t])=>t!=="");return{...z({outcome:Us[e.checkpoint],transport:"user_channel",eventFamily:"user_channel",deliveryId:er({jobId:e.taskId,sessionKey:e.sessionKey})}),...n.reduce((t,[r,s])=>(t[r]=String(s),t),{})}}function an(e){let{delivered:n,failed:t,abandoned:r}=e,s=n>0||t>0||r>0;return t===0&&r===0?{shouldEmit:s,outcome:"success"}:{shouldEmit:s,outcome:n>0?"partial":"failed"}}function nr(e){return{...z({checkpoint:xs,outcome:an(e).outcome,transport:"gateway_rpc",eventFamily:"outbound"}),...Zt([["onchainosAgentId","*"],["source",Ls],["deliveredCount",e.delivered],["failedCount",e.failed],["abandonedCount",e.abandoned],["batchSize",e.batchSize]])}}var ks,Ks,vs,Ps,xs,Ls,Us,oe=y(()=>{"use strict";Te();ks="openclaw_user_dispatch",Ks="openclaw_prompt_user_queue",vs="xmtp_prompt_user",Ps="gateway/",xs="outbound/outbox_drained",Ls="gateway_outbox_drain";Us={fallback_scheduled:"pending",queued:"pending",run_pending:"pending",dispatch_started:"pending",dispatch_completed:"success",run_completed:"success",dispatch_failed:"failed",fallback_fired:"timeout"}});var dr={};Ee(dr,{callChatInject:()=>ae,callGateway:()=>A,callSessionsCreate:()=>ie,callSessionsDelete:()=>mn,callSessionsSend:()=>En,formatPairingErrorHint:()=>Le,gatewayExtra:()=>ve,onGatewayEvent:()=>gn,resolveGatewayRuntimeConfig:()=>fn,stopGatewayClient:()=>yn,syncGatewayConfigForNodeDaemon:()=>pn});function dn(e){if(e){if(typeof e=="string")return e;if(typeof e=="object"&&e!==null&&"env"in e)return process.env[e.env]||void 0}}function js(e){return e&&(typeof e=="string"?{type:"string",configured:!0}:typeof e=="object"&&e!==null&&"env"in e?{type:"env",env:String(e.env),configured:!!dn(e)}:{type:typeof e,configured:!0})}function cn(e){if(!e||typeof e!="object")return e??null;if(Array.isArray(e))return e.map(t=>cn(t));let n={};for(let[t,r]of Object.entries(e)){if(/password|token|secret/i.test(t)){n[t]=js(r);continue}n[t]=cn(r)}return n}function Fs(e){try{return JSON.stringify(e)}catch{return"[unserializable]"}}function Bs(e){let n=e.params;if(!n||typeof n!="object"||Array.isArray(n))return se({taskId:e.taskId});let t=n;return se({taskId:e.taskId,sessionKey:typeof t.sessionKey=="string"?t.sessionKey:typeof t.key=="string"?t.key:""})}function S(e,n={}){let t=ve({phase:e,...n});u(`[gateway] ${e}: ${JSON.stringify(t)}`),f.info(e.startsWith("request_")?a.GATEWAY_REQUEST:a.GATEWAY_STARTED,{component:"openclaw_gateway",...t})}function F(e,n,t={},r=a.GATEWAY_CONNECT_FAILED){let s=ve({phase:e,component:"openclaw_gateway",...t},"failed");u(`[gateway] ${e}:`,n),f.error(r,n instanceof Error?n:new Error(String(n)),s)}function Hs(e){for(let n of un)try{n(e)}catch(t){u("[gateway] event handler failed:",t)}}function gn(e){return un.add(e),()=>{un.delete(e)}}function rr(){S("ready_gate_reset",{hasSharedClient:!!w,hasConnected:R}),j=new Promise((e,n)=>{Pe=e,xe=n})}function sr(e,n,t){if(w!==e){S(`${n}_skip_clear_noncurrent`,t);return}try{e.stop?.()}catch(r){F(`${n}_stop_failed`,r,t)}w=null,R=!1,j=null,Pe=null,xe=null,S(`${n}_cleared_client`,t)}function qs(){if(w)return S("reuse_client",{hasConnected:R,hasReadyPromise:!!j}),{client:w,ready:j};let e=fn(),{url:n,password:t,token:r}=e,s=(0,ln.randomUUID)(),o=++Gs;rr(),S("init_client",{clientSeq:o,instanceId:s,url:n,hasGatewayConfig:!!e.rawGatewayConfig,gatewayConfig:Fs(cn(e.rawGatewayConfig)),passwordConfigured:!!t,tokenConfigured:!!r,scopes:tr.join(",")});let i=new ar.GatewayClient({url:n,password:t,token:r,instanceId:s,clientName:"gateway-client",clientDisplayName:"okx-a2a-plugin",mode:"backend",role:"operator",scopes:[...tr],onHelloOk:()=>{S("hello_ok",{clientSeq:o,instanceId:s,url:n}),R=!0,Pe?.()},onEvent:Hs,onClose:(d,c)=>{if(u(`[gateway] closed (${d}): ${c||"no reason"}`),f.info(a.GATEWAY_DISCONNECTED,{clientSeq:String(o),instanceId:s,url:n,code:String(d),reason:c||"no-reason",hadConnected:String(R)}),R){R=!1,rr();return}sr(i,"close_before_connect",{clientSeq:o,instanceId:s,url:n,code:d,reason:c||"no-reason"})},onConnectError:d=>{let c=d;if(c?.retryable){F("connect_error_retryable",d,{clientSeq:o,instanceId:s,url:n,retryable:"true",reason:c?.details?.reason??"retryable",code:c?.gatewayCode??c?.details?.code});return}F("connect_error",d,{clientSeq:o,instanceId:s,url:n,retryable:"false",code:c?.gatewayCode??c?.details?.code}),xe?.(d instanceof Error?d:new Error(String(d))),sr(i,"connect_error",{clientSeq:o,instanceId:s,url:n,code:c?.gatewayCode??c?.details?.code,reason:c?.details?.reason})}});return w=i,S("start_client",{clientSeq:o,instanceId:s,url:n}),i.start(),{client:i,ready:j}}function fn(){let n=Ce().gateway;return{url:`ws://127.0.0.1:${or(process.env.OPENCLAW_GATEWAY_PORT)??or(n?.port)??$s}`,password:dn(n?.auth?.password),token:dn(n?.auth?.token),rawGatewayConfig:n}}function or(e){if(typeof e=="number"&&Number.isFinite(e)){let r=Math.trunc(e);return r>0&&r<=65535?r:null}if(typeof e!="string")return null;let n=e.trim();if(!/^\d+$/.test(n))return null;let t=Number.parseInt(n,10);return t>0&&t<=65535?t:null}function pn(){let e=fn();try{let n=Ut({url:e.url,password:e.password,token:e.token});return S("synced_node_gateway_config",{path:n,url:e.url,passwordConfigured:!!e.password,tokenConfigured:!!e.token}),n}catch(n){return F("sync_node_gateway_config_failed",n,{url:e.url,passwordConfigured:!!e.password,tokenConfigured:!!e.token},a.GATEWAY_CONNECT_FAILED),null}}function yn(){if(w){try{w.stop()}catch{}w=null,j=null,Pe=null,xe=null,R=!1}}function Le(e){let n=e,t=n?.gatewayCode??n?.details?.code;if(!t)return null;let r=n?.details??{},s=[`code=${t}`];r.reason&&s.push(`reason=${r.reason}`),r.authReason&&s.push(`authReason=${r.authReason}`),Array.isArray(r.requestedScopes)&&r.requestedScopes.length&&s.push(`requestedScopes=${r.requestedScopes.join(",")}`),r.deviceId&&s.push(`deviceId=${r.deviceId}`),r.requestId&&s.push(`requestId=${r.requestId}`);let o=` (${s.join(", ")})`;switch(t){case"NOT_PAIRED":case"PAIRING_REQUIRED":return`Device pairing approval pending${o}. On the openclaw host run \`openclaw devices approve --latest\` to review and approve the pending request, then retry.`;case"AUTH_SCOPE_MISMATCH":return`Existing device token lacks the required scope${o}. On the openclaw host run \`openclaw devices list\` to find the operator deviceId, then \`openclaw devices rotate --device <id> --role operator --scope operator.admin\` to reissue a token with operator.admin, and restart openclaw.`;case"AUTH_TOKEN_MISSING":case"AUTH_TOKEN_MISMATCH":case"AUTH_DEVICE_TOKEN_MISMATCH":return`Gateway device token is missing or stale${o}. On the openclaw host run \`openclaw devices list\`, then \`openclaw devices remove <deviceId>\`, then restart openclaw to re-pair.`;default:return null}}async function A(e){let n=e.timeoutMs??Ms,t=Date.now(),r=Bs(e);S("request_start",{method:e.method,timeoutMs:n,hasSharedClient:!!w,hasConnected:R,...r});let{client:s,ready:o}=qs();try{await o}catch(d){let c=Date.now()-t;throw F("request_ready_failed",d,{method:e.method,durationMs:c,timeoutMs:n,...r,code:d?.gatewayCode??d?.code??d?.details?.code,reason:"gateway_ready_failed",communicationClass:"openclaw_gateway_connect"},a.GATEWAY_REQUEST_FAILED),d}let i=Date.now()-t;S("request_ready",{method:e.method,readyWaitMs:i,timeoutMs:n,hasConnected:R,...r});try{let d=await s.request(e.method,e.params,{timeoutMs:n});return S("request_done",{method:e.method,durationMs:Date.now()-t,timeoutMs:n,...r}),d}catch(d){let c=Date.now()-t,l=/timeout|timed out/i.test(String(d?.message??d??""));F("request_error",d,{method:e.method,durationMs:c,timeoutMs:n,readyWaitMs:i,...r,isTimeout:l,code:d?.gatewayCode??d?.code??d?.details?.code,reason:l?"gateway_request_timeout":"gateway_request_error",communicationClass:"openclaw_gateway_rpc"},a.GATEWAY_REQUEST_FAILED);let g=Le(d);if(g){let p=d?.message??String(d);try{d.message=`${p}
5
+ ${g}`}catch{}}throw d}}async function ie(e){return A({method:"sessions.create",params:e})}async function mn(e){return A({method:"sessions.delete",params:e})}async function En(e){let n=e.idempotencyKey??(0,ln.randomUUID)(),t={key:e.key,message:e.message,idempotencyKey:n};try{let r=await A({method:"sessions.send",params:t});return{runId:ir(r),raw:r}}catch(r){let s=r?.gatewayCode??r?.code,o=String(r?.message??"");if(s==="INVALID_REQUEST"&&o.includes("session not found")){await ie({key:e.key}),f.info(a.SESSION_AUTO_RECOVERED,{sessionKey:e.key,trigger:"sessions.send"});let i=await A({method:"sessions.send",params:t});return{runId:ir(i),raw:i}}throw r}}function ir(e){if(!e||typeof e!="object")return;let n=e.runId;return typeof n=="string"&&n.trim()?n:void 0}async function ae(e){try{return await A({method:"chat.inject",params:e})}catch(n){let t=n?.gatewayCode??n?.code,r=String(n?.message??"");if(t==="INVALID_REQUEST"&&r.includes("session not found"))return await ie({key:e.sessionKey}),f.info(a.SESSION_AUTO_RECOVERED,{sessionKey:e.sessionKey,trigger:"chat.inject"}),await A({method:"chat.inject",params:e});throw n}}var ar,ln,Ms,$s,tr,Gs,w,j,Pe,xe,R,un,B=y(()=>{"use strict";I();ar=require("openclaw/plugin-sdk/gateway-runtime"),ln=require("node:crypto");tn();k();Mt();G();oe();Ms=2e4,$s=18789,tr=["operator.admin"],Gs=0;w=null,j=null,Pe=null,xe=null,R=!1,un=new Set});function gr(e){if(e.toolName!=="exec")return null;let n=e.sessionKey?.trim(),t=new Set;for(let o of e.routeSessionKeys??[]){let i=o?.trim();i&&t.add(i)}if(n&&t.add(n),t.size===0)return null;In(n);let r=e.params??{},s=oo(r.env)?r.env:{};return{...r,env:{...s,[Ws]:"openclaw",[Vs]:"openclaw-gateway",[zs]:"1",[Xs]:n??[...t][0],[Ys]:JSON.stringify([...t])}}}function fr(e){let n=e.runId?.trim(),t=e.sessionKey?.trim();if(!t||!le(t))return!1;Sn();let r=ro([t,...e.routeSessionKeys??[]]);return eo(t,r),n&&ue.set(n,{sessionKeys:r,updatedAt:Date.now()}),!0}function pr(e){let n=typeof e=="string"?e.trim():e?.runId?.trim(),t=typeof e=="string"?null:e?.sessionKey?.trim();n&&ue.delete(n),t&&le(t)&&no(t)}function Ue(e){let n=new Set,t=e.sessionKey?.trim();t&&le(t)&&n.add(t);let r=e.runId?.trim();if(r){Sn(e.now??Date.now());let s=ue.get(r);for(let o of s?.sessionKeys??[])n.add(o)}else if(!t||!le(t))for(let s of to(e.now??Date.now()))n.add(s);return[...n]}function In(e){let n=e?.trim();!n||!Zs(n)||(de={sessionKey:n,updatedAt:Date.now()})}function yr(e=Date.now()){return de?e-de.updatedAt>Js?(de=null,null):de.sessionKey:null}function Zs(e){return e.startsWith("job:")||e.startsWith("backup:")||/(?:^|[?&:])job=([^:&]+)/.test(e)}function le(e){if(e==="agent:main")return!0;let n=e.split(":");if(n.length<4||n[0]!=="agent"||!n[1])return!1;let t=n[2];return!!(t&&t!=="okx-a2a"&&!Qs.has(t))}function Sn(e=Date.now()){for(let[n,t]of ue)e-t.updatedAt>ur&&ue.delete(n);for(let[n,t]of N)e-t.updatedAt>ur&&N.delete(n)}function eo(e,n){let t=N.get(e);N.set(e,{count:(t?.count??0)+1,updatedAt:Date.now(),routeSessionKeys:n}),_n()}function no(e){let n=N.get(e);if(n){if(n.count<=1){N.delete(e),_n();return}N.set(e,{count:n.count-1,updatedAt:Date.now(),routeSessionKeys:n.routeSessionKeys}),_n()}}function to(e=Date.now()){Sn(e);let n=[...N.keys()];return n.length!==1?[]:N.get(n[0])?.routeSessionKeys??[]}function ro(e){let n=new Set;for(let t of e){let r=t?.trim();r&&le(r)&&n.add(r)}return[...n]}function _n(){try{let e=so();(0,H.mkdirSync)((0,ce.dirname)(e),{recursive:!0,mode:448});let t={version:1,updatedAt:Date.now(),origins:[...N.entries()].map(([s,o])=>({sessionKey:s,count:o.count,updatedAt:o.updatedAt,routeSessionKeys:o.routeSessionKeys}))},r=`${e}.${process.pid}.tmp`;(0,H.writeFileSync)(r,`${JSON.stringify(t)}
6
+ `,{encoding:"utf8",mode:384}),(0,H.renameSync)(r,e)}catch(e){console.log(`[okx-a2a:hook] failed to persist gateway route origins: ${e instanceof Error?e.message:String(e)}`)}}function so(e=process.env){let n=e.OKX_AGENT_TASK_HOME?.trim()||(0,ce.join)((0,lr.homedir)(),".okx-agent-task");return(0,ce.join)(n,"run","gateway-route-origins.json")}function oo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var H,lr,ce,Xs,Ys,Ws,Vs,zs,Js,ur,Qs,de,ue,N,An=y(()=>{"use strict";H=require("node:fs"),lr=require("node:os"),ce=require("node:path"),Xs="OKX_A2A_CURRENT_GATEWAY_SESSION_KEY",Ys="OKX_A2A_CURRENT_GATEWAY_SESSION_KEYS",Ws="OKX_A2A_GATEWAY_PROVIDER",Vs="OKX_A2A_RUNTIME_CONTEXT",zs="OKX_A2A_IN_GATEWAY",Js=12e4,ur=30*6e4,Qs=new Set(["heartbeat","cron","webhook","voice"]),de=null,ue=new Map,N=new Map});function ao(e=process.env){return e.OKX_AGENT_TASK_HOME?.trim()||(0,Tn.join)((0,Er.homedir)(),".okx-agent-task")}function co(e=process.env){return e.OKX_A2A_SESSION_STORE_DB_PATH?.trim()||(0,Tn.join)(ao(e),"sqlite","session-store.sqlite")}function Me(e){let n=h(e.jobId)??te(e.sessionKey);return n?uo(lo(n,e.dbPath??co())):[]}function uo(e){let n=new Set,t=[];for(let r of e){let s=hn(h(r.gatewaySessionKey)??h(r.sessionKey)??""),o=po(s);!s||!o||n.has(o)||(n.add(o),t.push(s))}return t}function lo(e,n){if(!(0,mr.existsSync)(n))return[];let{DatabaseSync:t}=go(),r=new t(n,{readOnly:!0});try{if(r.exec("PRAGMA busy_timeout=5000"),!r.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='job_provider_bindings'").get())return[];let o=r.prepare("SELECT provider, gateway_routes_json FROM job_provider_bindings WHERE job_id = ?").get(e);return o?.provider!=="openclaw"||typeof o.gateway_routes_json!="string"?[]:fo(o.gateway_routes_json)}catch(s){return console.log(`[okx-a2a:stored-routes] failed to resolve job route jobId=${e}: ${s instanceof Error?s.message:String(s)}`),[]}finally{r.close()}}function go(){let e=process.emitWarning;process.emitWarning=((n,...t)=>{if(!((typeof n=="string"?n:n.message).includes("SQLite is an experimental feature")&&t.some(s=>s==="ExperimentalWarning")))return e.call(process,n,...t)});try{return require("node:sqlite")}finally{process.emitWarning=e}}function fo(e){try{let n=JSON.parse(e);if(!Array.isArray(n))return[];let t=[];for(let r of n){if(!mo(r))continue;let s=h(typeof r.platform=="string"?r.platform:null),o=hn(h(typeof r.sessionKey=="string"?r.sessionKey:null)??"");if(!s||!o)continue;let i=hn(h(typeof r.gatewaySessionKey=="string"?r.gatewaySessionKey:null)??""),d=h(typeof r.chatId=="string"?r.chatId:null),c=h(typeof r.threadId=="string"?r.threadId:null),l=h(typeof r.updatedAt=="string"?r.updatedAt:null);t.push({platform:s,sessionKey:o,...i?{gatewaySessionKey:i}:{},...d?{chatId:d}:{},...c?{threadId:c}:{},...l?{updatedAt:l}:{}})}return t}catch{return[]}}function po(e){let n=h(e);if(!n)return null;if(n==="agent:main")return"main";if(n.startsWith("backup:"))return null;let t=n.split(":");if(t.length<4||t[0]!=="agent"||!t[1])return null;let r=t[2];return!r||r==="okx-a2a"||r==="backup"||io.has(r)?null:r}function hn(e){let n=h(e);if(!n)return"";let t=n.split(":");if(t.length<4||t[0]!=="agent")return n;let r=t[2],s=t[3];if(r!=="telegram")return n;if((s==="direct"||s==="dm")&&t[4]){if(t[5]==="thread")return n;let o=yo(t.slice(5));return o?`agent:${t[1]}:telegram:direct:${t[4]}:topic:${o}`:`agent:${t[1]}:telegram:direct:${t[4]}`}if(s==="group"&&t[4]){let o=t[5]==="topic"?t[6]:t[5];return o?`agent:${t[1]}:telegram:group:${t[4]}:topic:${o}`:`agent:${t[1]}:telegram:group:${t[4]}`}return n}function yo(e){if(e.length!==0)return e[0]==="topic"?e[1]||void 0:e[0]==="thread"?e.length>=3?e.slice(2).join(":")||void 0:e[1]||void 0:e[0]||void 0}function mo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function h(e){let n=e?.trim();return n||null}var mr,Er,Tn,io,Rn=y(()=>{"use strict";mr=require("node:fs"),Er=require("node:os"),Tn=require("node:path");G();io=new Set(["heartbeat","cron","webhook","voice"])});function On(e){let n=v(e.jobId)??Ao([e.content,...e.contents??[]]);if(!n)return console.log("[okx-a2a:stored-routes] skipped delivered route bind reason=missing_job_id"),[];let t=e.sessionKeys.map(i=>_o(i)).filter(i=>!!i);if(t.length===0)return[];let r=e.dbPath??To(),{DatabaseSync:s}=Ro(),o=new s(r);try{o.exec("PRAGMA busy_timeout=5000"),o.exec(`
7
7
  CREATE TABLE IF NOT EXISTS job_provider_bindings (
8
8
  job_id TEXT PRIMARY KEY,
9
9
  provider TEXT NOT NULL CHECK (provider IN ('codex', 'claude', 'hermes', 'openclaw')),
@@ -11,11 +11,11 @@ ${g}`}catch{}}throw d}}async function ie(e){return A({method:"sessions.create",p
11
11
  created_at TEXT NOT NULL,
12
12
  updated_at TEXT NOT NULL
13
13
  )
14
- `);let i=new Date().toISOString();o.prepare("INSERT OR IGNORE INTO job_provider_bindings(job_id, provider, created_at, updated_at) VALUES (?, 'openclaw', ?, ?)").run(n,i,i);let d=o.prepare("SELECT provider, gateway_routes_json FROM job_provider_bindings WHERE job_id = ?").get(n);if(d?.provider!=="openclaw")return[];let c=Io(d.gateway_routes_json),l=new Set(c.map(p=>p.platform)),g=[];for(let p of t)l.has(p.platform)||(c.push(p),l.add(p.platform),g.push(p.gatewaySessionKey));return g.length===0?[]:(o.prepare("UPDATE job_provider_bindings SET gateway_routes_json = ?, updated_at = ? WHERE job_id = ? AND provider = 'openclaw'").run(JSON.stringify(c),i,n),console.log(`[okx-a2a:stored-routes] bound delivered route jobId=${n} sessionKeys=${g.join(",")}`),g)}catch(i){return console.log(`[okx-a2a:stored-routes] failed to bind delivered route jobId=${n}: ${i instanceof Error?i.message:String(i)}`),[]}finally{o.close()}}function _o(e){let n=Ir(v(e)??"");if(!n)return null;let t=Sr(n);if(!t)return null;let r=So(n);return{platform:t,sessionKey:n,gatewaySessionKey:n,...r.chatId?{chatId:r.chatId}:{},...r.threadId?{threadId:r.threadId}:{},updatedAt:new Date().toISOString()}}function Io(e){if(typeof e!="string"||!e.trim())return[];try{let n=JSON.parse(e);if(!Array.isArray(n))return[];let t=[];for(let r of n){if(!wo(r))continue;let s=Ir(v(typeof r.gatewaySessionKey=="string"?r.gatewaySessionKey:null)??v(typeof r.sessionKey=="string"?r.sessionKey:null)??""),o=Sr(s);!s||!o||t.push({platform:o,sessionKey:s,gatewaySessionKey:s,...typeof r.chatId=="string"&&r.chatId.trim()?{chatId:r.chatId.trim()}:{},...typeof r.threadId=="string"&&r.threadId.trim()?{threadId:r.threadId.trim()}:{},...typeof r.updatedAt=="string"&&r.updatedAt.trim()?{updatedAt:r.updatedAt.trim()}:{updatedAt:new Date().toISOString()}})}return t}catch{return[]}}function So(e){let n=e.split(":");if(n.length<4||n[0]!=="agent")return{};let t=n[2],r=n[3];if(t==="discord"&&r==="thread")return{...n[4]?{chatId:n[4]}:{},...n[5]?{threadId:n[5]}:{}};if(t==="discord"&&(r==="channel"||r==="dm"))return n[4]?{chatId:n[4]}:{};if(t==="telegram"&&r==="direct"){let s=wn(n.slice(5));return{...n[4]?{chatId:n[4]}:{},...s?{threadId:s}:{}}}if(t==="telegram"&&r==="dm"){let s=wn(n.slice(5));return{...n[4]?{chatId:n[4]}:{},...s?{threadId:s}:{}}}if(t==="telegram"&&r==="group"){let s=n[5]==="topic"?n[6]:n[5];return{...n[4]?{chatId:n[4]}:{},...s?{threadId:s}:{}}}return{}}function Ir(e){let n=v(e);if(!n)return"";let t=n.split(":");if(t.length<4||t[0]!=="agent")return n;let r=t[2],s=t[3];if(r!=="telegram")return n;if((s==="direct"||s==="dm")&&t[4]){if(t[5]==="thread")return n;let o=wn(t.slice(5));return o?`agent:${t[1]}:telegram:direct:${t[4]}:topic:${o}`:`agent:${t[1]}:telegram:direct:${t[4]}`}if(s==="group"&&t[4]){let o=t[5]==="topic"?t[6]:t[5];return o?`agent:${t[1]}:telegram:group:${t[4]}:topic:${o}`:`agent:${t[1]}:telegram:group:${t[4]}`}return n}function wn(e){if(e.length!==0)return e[0]==="topic"?e[1]||void 0:e[0]==="thread"?e.length>=3?e.slice(2).join(":")||void 0:e[1]||void 0:e[0]||void 0}function Ao(e){for(let n of e){let t=v(n);if(!t)continue;let r=/\b0x[a-fA-F0-9]{64}\b/.exec(t);if(r?.[0])return r[0]}return null}function Sr(e){let n=v(e);if(!n)return null;if(n==="agent:main")return"main";if(n.startsWith("backup:"))return null;let t=n.split(":");if(t.length<4||t[0]!=="agent"||!t[1])return null;let r=t[2];return!r||r==="okx-a2a"||r==="backup"||Eo.has(r)?null:r}function ho(e=process.env){return e.OKX_AGENT_TASK_HOME?.trim()||(0,Nn.join)((0,_r.homedir)(),".okx-agent-task")}function To(e=process.env){return e.OKX_A2A_SESSION_STORE_DB_PATH?.trim()||(0,Nn.join)(ho(e),"sqlite","session-store.sqlite")}function Ro(){let e=process.emitWarning;process.emitWarning=((n,...t)=>{if(!((typeof n=="string"?n:n.message).includes("SQLite is an experimental feature")&&t.some(s=>s==="ExperimentalWarning")))return e.call(process,n,...t)});try{return require("node:sqlite")}finally{process.emitWarning=e}}function wo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function v(e){let n=e?.trim();return n||null}var _r,Nn,Eo,Ar=y(()=>{"use strict";_r=require("node:os"),Nn=require("node:path"),Eo=new Set(["heartbeat","cron","webhook","voice"])});var Ge={};Ee(Ge,{isPromptUserSessionRunning:()=>No,markPromptUserSessionEnded:()=>kn,markPromptUserSessionRunning:()=>Cn,promptUserSentryExtra:()=>T,queuePromptUserAction:()=>Oo});function P(e){let n=hr.get(e);return n||(n={running:!1,processing:!1,queue:[]},hr.set(e,n)),n}function bn(e,n,t){e.fallbackTimer&&(clearTimeout(e.fallbackTimer),e.fallbackTimer=void 0,n&&u(`[xmtp_prompt_user:queue] fallback cleared sessionKey=${n}${t?` reason=${t}`:""}`))}function Dn(e,n){bn(n,e,"reschedule");let t=n.queue[0];if(!t||n.processing)return;let r=Math.max(0,t.deadlineAt-Date.now());u(`[xmtp_prompt_user:queue] fallback scheduled sessionKey=${e} channel=${t.channel} delayMs=${r} queued=${n.queue.length}`),f.info(a.PROMPT_USER_CHECKPOINT,T({checkpoint:"fallback_scheduled",sessionKey:e,channel:t.channel,taskId:t.taskId,delayMs:r,queued:n.queue.length})),n.fallbackTimer=setTimeout(()=>{let s=P(e);s.fallbackTimer=void 0,u(`[xmtp_prompt_user:queue] fallback fired sessionKey=${e} queued=${s.queue.length}`),f.info(a.PROMPT_USER_CHECKPOINT,T({checkpoint:"fallback_fired",sessionKey:e,taskId:s.queue[0]?.taskId,queued:s.queue.length,reason:"fallback_timeout"})),fe(e,"fallback_timeout")},r)}async function fe(e,n){let t=P(e);if(t.processing)return;let r=t.queue.shift();if(!r){bn(t,e,"empty_queue"),u(`[xmtp_prompt_user:queue] dispatch skipped empty sessionKey=${e} reason=${n}`);return}bn(t,e,n),t.processing=!0;try{u(`[xmtp_prompt_user:queue] dispatch sessionKey=${e} channel=${r.channel} reason=${n} remaining=${t.queue.length}`),f.info(a.PROMPT_USER_CHECKPOINT,T({checkpoint:"dispatch_started",sessionKey:e,channel:r.channel,taskId:r.taskId,reason:n,queued:t.queue.length}));let s=await Kn({...r,onRunStarted:o=>{let i=$e.get(o);if(i){u(`[xmtp_prompt_user:queue] run already completed sessionKey=${e} channel=${r.channel} runId=${o} state=${i.state} completedAt=${i.completedAt}`),$e.delete(o);return}ge.set(o,{sessionKey:e,channel:r.channel,taskId:r.taskId,startedAt:Date.now()}),u(`[xmtp_prompt_user:queue] run pending sessionKey=${e} channel=${r.channel} runId=${o}`),f.info(a.PROMPT_USER_CHECKPOINT,T({checkpoint:"run_pending",sessionKey:e,channel:r.channel,taskId:r.taskId,runId:o}))}});t.running=!s.runId||ge.has(s.runId),u(`[xmtp_prompt_user:queue] dispatch completed sessionKey=${e} channel=${r.channel} reason=${n} running=${t.running?1:0} runId=${s.runId??"(none)"}`),f.info(a.PROMPT_USER_CHECKPOINT,T({checkpoint:"dispatch_completed",sessionKey:e,channel:r.channel,taskId:r.taskId,reason:n,running:t.running?1:0,runId:s.runId,queued:t.queue.length}))}catch(s){u(`[xmtp_prompt_user:queue] dispatch failed sessionKey=${e} channel=${r.channel} reason=${n}:`,s),f.error(a.PROMPT_USER_FAILED,s instanceof Error?s:new Error(String(s)),T({checkpoint:"dispatch_failed",sessionKey:e,channel:r.channel,taskId:r.taskId,reason:n,queued:t.queue.length}))}finally{t.processing=!1}if(t.queue.length===0){u(`[xmtp_prompt_user:queue] queue drained sessionKey=${e}`);return}if(t.running){u(`[xmtp_prompt_user:queue] queue waiting sessionKey=${e} queued=${t.queue.length} running=1`),Dn(e,t);return}u(`[xmtp_prompt_user:queue] queue continues sessionKey=${e} queued=${t.queue.length} running=0`),fe(e,"session_idle")}function No(e){return P(e).running}async function Oo(e){let n=e.target.sessionKey,t=P(n);return t.queue.push({...e,deadlineAt:Date.now()+Rr}),t.running||t.processing||t.queue.length>1?(t.queue.length===1&&Dn(n,t),u(`[xmtp_prompt_user:queue] queued sessionKey=${n} channel=${e.channel} size=${t.queue.length}`),f.info(a.PROMPT_USER_CHECKPOINT,T({checkpoint:"queued",sessionKey:n,channel:e.channel,taskId:e.taskId,queued:t.queue.length,running:t.running?1:0,processing:t.processing?1:0})),{status:"queued",size:t.queue.length}):(await fe(n,"session_idle"),{status:"dispatched",size:t.queue.length})}function Cn(e){let n=P(e);n.running=!0;let t=n.queue[0];t&&(t.deadlineAt=Date.now()+Rr,u(`[xmtp_prompt_user:queue] fallback reset sessionKey=${e} channel=${t.channel} queued=${n.queue.length}`),Dn(e,n)),u(`[xmtp_prompt_user:queue] agent_start sessionKey=${e} queued=${n.queue.length}`)}function kn(e){let n=P(e),t=bo(e);if(t.length>0){u(`[xmtp_prompt_user:queue] agent_end sessionKey=${e} queued=${n.queue.length} pendingRunIds=${t.join(",")} waiting=run_final`);return}n.running=!1,u(`[xmtp_prompt_user:queue] agent_end sessionKey=${e} queued=${n.queue.length}`),n.queue.length>0&&fe(e,"agent_end")}function bo(e){let n=[];for(let[t,r]of ge)r.sessionKey===e&&n.push(t);return n}function Tr(e,n,t){$e.set(e,{state:n,sessionKey:t,completedAt:Date.now()}),setTimeout(()=>{$e.delete(e)},60*1e3)}function Do(e,n,t,r,s){let o=P(e);o.running=!1,u(`[xmtp_prompt_user:queue] run completed sessionKey=${e} runId=${n} state=${t} durationMs=${r} queued=${o.queue.length}`),f.info(a.PROMPT_USER_CHECKPOINT,T({checkpoint:"run_completed",sessionKey:e,taskId:s,runId:n,status:t,durationMs:r,queued:o.queue.length})),o.queue.length>0&&fe(e,`run_${t}`)}var Rr,hr,ge,$e,pe=y(()=>{"use strict";I();ye();B();k();oe();Rr=300*1e3,hr=new Map,ge=new Map,$e=new Map;gn(e=>{let n=e;if(n.event!=="chat"||!n.payload||typeof n.payload!="object")return;let t=n.payload,r=typeof t.runId=="string"?t.runId:"";if(!r)return;let s=typeof t.state=="string"?t.state:"",o=ge.get(r);if(!o){(s==="final"||s==="error")&&Tr(r,s,String(t.sessionKey??""));return}u(`[xmtp_prompt_user:queue] observed chat event runId=${r} state=${s||"(none)"} sessionKey=${String(t.sessionKey??"")}`),!(s!=="final"&&s!=="error")&&(ge.delete(r),Tr(r,s,String(t.sessionKey??"")),Do(o.sessionKey,r,s,Date.now()-o.startedAt,o.taskId))})});var Xn={};Ee(Xn,{AgentMessageDirection:()=>Cr,INJECT_ONLY_CHANNELS:()=>He,NON_DELIVERY_CHANNELS:()=>X,buildAgentMessageNotice:()=>kr,buildSystemMessageNotice:()=>Kr,buildUserDispatchExtra:()=>C,dispatchPromptToUserSession:()=>Kn,dispatchToUser:()=>Un,dispatchUserToLatestSessions:()=>Mn,dispatchUserToRoutedSessions:()=>Gn,dispatchUserToSession:()=>jn,notifyAgentMessageToUser:()=>Po,notifySystemMessageToUser:()=>Lo,promptUserToLatestSessions:()=>Fn,promptUserToRoutedSessions:()=>Bn,promptUserToSession:()=>qn,sendLlmToLatestUserSessions:()=>Hn});function ko(e){return e?e.length<=wr+Nr+1?e:`${e.slice(0,wr)}\u2026${e.slice(-Nr)}`:""}function Ko(e){return e.length<=Or+br+vn.length?e:`${e.slice(0,Or)}${vn}${e.slice(-br)}`}function Dr(e){return e.name?e.agentId?`${e.name}#${e.agentId}`:e.name:e.walletAddress?ko(e.walletAddress):"unknown"}function vo(e){let n=e.split(`
14
+ `);let i=new Date().toISOString();o.prepare("INSERT OR IGNORE INTO job_provider_bindings(job_id, provider, created_at, updated_at) VALUES (?, 'openclaw', ?, ?)").run(n,i,i);let d=o.prepare("SELECT provider, gateway_routes_json FROM job_provider_bindings WHERE job_id = ?").get(n);if(d?.provider!=="openclaw")return[];let c=Io(d.gateway_routes_json),l=new Set(c.map(p=>p.platform)),g=[];for(let p of t)l.has(p.platform)||(c.push(p),l.add(p.platform),g.push(p.gatewaySessionKey));return g.length===0?[]:(o.prepare("UPDATE job_provider_bindings SET gateway_routes_json = ?, updated_at = ? WHERE job_id = ? AND provider = 'openclaw'").run(JSON.stringify(c),i,n),console.log(`[okx-a2a:stored-routes] bound delivered route jobId=${n} sessionKeys=${g.join(",")}`),g)}catch(i){return console.log(`[okx-a2a:stored-routes] failed to bind delivered route jobId=${n}: ${i instanceof Error?i.message:String(i)}`),[]}finally{o.close()}}function _o(e){let n=Ir(v(e)??"");if(!n)return null;let t=Sr(n);if(!t)return null;let r=So(n);return{platform:t,sessionKey:n,gatewaySessionKey:n,...r.chatId?{chatId:r.chatId}:{},...r.threadId?{threadId:r.threadId}:{},updatedAt:new Date().toISOString()}}function Io(e){if(typeof e!="string"||!e.trim())return[];try{let n=JSON.parse(e);if(!Array.isArray(n))return[];let t=[];for(let r of n){if(!wo(r))continue;let s=Ir(v(typeof r.gatewaySessionKey=="string"?r.gatewaySessionKey:null)??v(typeof r.sessionKey=="string"?r.sessionKey:null)??""),o=Sr(s);!s||!o||t.push({platform:o,sessionKey:s,gatewaySessionKey:s,...typeof r.chatId=="string"&&r.chatId.trim()?{chatId:r.chatId.trim()}:{},...typeof r.threadId=="string"&&r.threadId.trim()?{threadId:r.threadId.trim()}:{},...typeof r.updatedAt=="string"&&r.updatedAt.trim()?{updatedAt:r.updatedAt.trim()}:{updatedAt:new Date().toISOString()}})}return t}catch{return[]}}function So(e){let n=e.split(":");if(n.length<4||n[0]!=="agent")return{};let t=n[2],r=n[3];if(t==="discord"&&r==="thread")return{...n[4]?{chatId:n[4]}:{},...n[5]?{threadId:n[5]}:{}};if(t==="discord"&&(r==="channel"||r==="dm"))return n[4]?{chatId:n[4]}:{};if(t==="telegram"&&r==="direct"){let s=wn(n.slice(5));return{...n[4]?{chatId:n[4]}:{},...s?{threadId:s}:{}}}if(t==="telegram"&&r==="dm"){let s=wn(n.slice(5));return{...n[4]?{chatId:n[4]}:{},...s?{threadId:s}:{}}}if(t==="telegram"&&r==="group"){let s=n[5]==="topic"?n[6]:n[5];return{...n[4]?{chatId:n[4]}:{},...s?{threadId:s}:{}}}return{}}function Ir(e){let n=v(e);if(!n)return"";let t=n.split(":");if(t.length<4||t[0]!=="agent")return n;let r=t[2],s=t[3];if(r!=="telegram")return n;if((s==="direct"||s==="dm")&&t[4]){if(t[5]==="thread")return n;let o=wn(t.slice(5));return o?`agent:${t[1]}:telegram:direct:${t[4]}:topic:${o}`:`agent:${t[1]}:telegram:direct:${t[4]}`}if(s==="group"&&t[4]){let o=t[5]==="topic"?t[6]:t[5];return o?`agent:${t[1]}:telegram:group:${t[4]}:topic:${o}`:`agent:${t[1]}:telegram:group:${t[4]}`}return n}function wn(e){if(e.length!==0)return e[0]==="topic"?e[1]||void 0:e[0]==="thread"?e.length>=3?e.slice(2).join(":")||void 0:e[1]||void 0:e[0]||void 0}function Ao(e){for(let n of e){let t=v(n);if(!t)continue;let r=/\b0x[a-fA-F0-9]{64}\b/.exec(t);if(r?.[0])return r[0]}return null}function Sr(e){let n=v(e);if(!n)return null;if(n==="agent:main")return"main";if(n.startsWith("backup:"))return null;let t=n.split(":");if(t.length<4||t[0]!=="agent"||!t[1])return null;let r=t[2];return!r||r==="okx-a2a"||r==="backup"||Eo.has(r)?null:r}function ho(e=process.env){return e.OKX_AGENT_TASK_HOME?.trim()||(0,Nn.join)((0,_r.homedir)(),".okx-agent-task")}function To(e=process.env){return e.OKX_A2A_SESSION_STORE_DB_PATH?.trim()||(0,Nn.join)(ho(e),"sqlite","session-store.sqlite")}function Ro(){let e=process.emitWarning;process.emitWarning=((n,...t)=>{if(!((typeof n=="string"?n:n.message).includes("SQLite is an experimental feature")&&t.some(s=>s==="ExperimentalWarning")))return e.call(process,n,...t)});try{return require("node:sqlite")}finally{process.emitWarning=e}}function wo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function v(e){let n=e?.trim();return n||null}var _r,Nn,Eo,Ar=y(()=>{"use strict";_r=require("node:os"),Nn=require("node:path"),Eo=new Set(["heartbeat","cron","webhook","voice"])});var Ge={};Ee(Ge,{isPromptUserSessionRunning:()=>No,markPromptUserSessionEnded:()=>kn,markPromptUserSessionRunning:()=>Cn,promptUserSentryExtra:()=>T,queuePromptUserAction:()=>Oo});function P(e){let n=hr.get(e);return n||(n={running:!1,processing:!1,queue:[]},hr.set(e,n)),n}function Dn(e,n,t){e.fallbackTimer&&(clearTimeout(e.fallbackTimer),e.fallbackTimer=void 0,n&&u(`[xmtp_prompt_user:queue] fallback cleared sessionKey=${n}${t?` reason=${t}`:""}`))}function bn(e,n){Dn(n,e,"reschedule");let t=n.queue[0];if(!t||n.processing)return;let r=Math.max(0,t.deadlineAt-Date.now());u(`[xmtp_prompt_user:queue] fallback scheduled sessionKey=${e} channel=${t.channel} delayMs=${r} queued=${n.queue.length}`),f.info(a.PROMPT_USER_CHECKPOINT,T({checkpoint:"fallback_scheduled",sessionKey:e,channel:t.channel,taskId:t.taskId,delayMs:r,queued:n.queue.length})),n.fallbackTimer=setTimeout(()=>{let s=P(e);s.fallbackTimer=void 0,u(`[xmtp_prompt_user:queue] fallback fired sessionKey=${e} queued=${s.queue.length}`),f.info(a.PROMPT_USER_CHECKPOINT,T({checkpoint:"fallback_fired",sessionKey:e,taskId:s.queue[0]?.taskId,queued:s.queue.length,reason:"fallback_timeout"})),fe(e,"fallback_timeout")},r)}async function fe(e,n){let t=P(e);if(t.processing)return;let r=t.queue.shift();if(!r){Dn(t,e,"empty_queue"),u(`[xmtp_prompt_user:queue] dispatch skipped empty sessionKey=${e} reason=${n}`);return}Dn(t,e,n),t.processing=!0;try{u(`[xmtp_prompt_user:queue] dispatch sessionKey=${e} channel=${r.channel} reason=${n} remaining=${t.queue.length}`),f.info(a.PROMPT_USER_CHECKPOINT,T({checkpoint:"dispatch_started",sessionKey:e,channel:r.channel,taskId:r.taskId,reason:n,queued:t.queue.length}));let s=await Kn({...r,onRunStarted:o=>{let i=$e.get(o);if(i){u(`[xmtp_prompt_user:queue] run already completed sessionKey=${e} channel=${r.channel} runId=${o} state=${i.state} completedAt=${i.completedAt}`),$e.delete(o);return}ge.set(o,{sessionKey:e,channel:r.channel,taskId:r.taskId,startedAt:Date.now()}),u(`[xmtp_prompt_user:queue] run pending sessionKey=${e} channel=${r.channel} runId=${o}`),f.info(a.PROMPT_USER_CHECKPOINT,T({checkpoint:"run_pending",sessionKey:e,channel:r.channel,taskId:r.taskId,runId:o}))}});t.running=!s.runId||ge.has(s.runId),u(`[xmtp_prompt_user:queue] dispatch completed sessionKey=${e} channel=${r.channel} reason=${n} running=${t.running?1:0} runId=${s.runId??"(none)"}`),f.info(a.PROMPT_USER_CHECKPOINT,T({checkpoint:"dispatch_completed",sessionKey:e,channel:r.channel,taskId:r.taskId,reason:n,running:t.running?1:0,runId:s.runId,queued:t.queue.length}))}catch(s){u(`[xmtp_prompt_user:queue] dispatch failed sessionKey=${e} channel=${r.channel} reason=${n}:`,s),f.error(a.PROMPT_USER_FAILED,s instanceof Error?s:new Error(String(s)),T({checkpoint:"dispatch_failed",sessionKey:e,channel:r.channel,taskId:r.taskId,reason:n,queued:t.queue.length}))}finally{t.processing=!1}if(t.queue.length===0){u(`[xmtp_prompt_user:queue] queue drained sessionKey=${e}`);return}if(t.running){u(`[xmtp_prompt_user:queue] queue waiting sessionKey=${e} queued=${t.queue.length} running=1`),bn(e,t);return}u(`[xmtp_prompt_user:queue] queue continues sessionKey=${e} queued=${t.queue.length} running=0`),fe(e,"session_idle")}function No(e){return P(e).running}async function Oo(e){let n=e.target.sessionKey,t=P(n);return t.queue.push({...e,deadlineAt:Date.now()+Rr}),t.running||t.processing||t.queue.length>1?(t.queue.length===1&&bn(n,t),u(`[xmtp_prompt_user:queue] queued sessionKey=${n} channel=${e.channel} size=${t.queue.length}`),f.info(a.PROMPT_USER_CHECKPOINT,T({checkpoint:"queued",sessionKey:n,channel:e.channel,taskId:e.taskId,queued:t.queue.length,running:t.running?1:0,processing:t.processing?1:0})),{status:"queued",size:t.queue.length}):(await fe(n,"session_idle"),{status:"dispatched",size:t.queue.length})}function Cn(e){let n=P(e);n.running=!0;let t=n.queue[0];t&&(t.deadlineAt=Date.now()+Rr,u(`[xmtp_prompt_user:queue] fallback reset sessionKey=${e} channel=${t.channel} queued=${n.queue.length}`),bn(e,n)),u(`[xmtp_prompt_user:queue] agent_start sessionKey=${e} queued=${n.queue.length}`)}function kn(e){let n=P(e),t=Do(e);if(t.length>0){u(`[xmtp_prompt_user:queue] agent_end sessionKey=${e} queued=${n.queue.length} pendingRunIds=${t.join(",")} waiting=run_final`);return}n.running=!1,u(`[xmtp_prompt_user:queue] agent_end sessionKey=${e} queued=${n.queue.length}`),n.queue.length>0&&fe(e,"agent_end")}function Do(e){let n=[];for(let[t,r]of ge)r.sessionKey===e&&n.push(t);return n}function Tr(e,n,t){$e.set(e,{state:n,sessionKey:t,completedAt:Date.now()}),setTimeout(()=>{$e.delete(e)},60*1e3)}function bo(e,n,t,r,s){let o=P(e);o.running=!1,u(`[xmtp_prompt_user:queue] run completed sessionKey=${e} runId=${n} state=${t} durationMs=${r} queued=${o.queue.length}`),f.info(a.PROMPT_USER_CHECKPOINT,T({checkpoint:"run_completed",sessionKey:e,taskId:s,runId:n,status:t,durationMs:r,queued:o.queue.length})),o.queue.length>0&&fe(e,`run_${t}`)}var Rr,hr,ge,$e,pe=y(()=>{"use strict";I();ye();B();k();oe();Rr=300*1e3,hr=new Map,ge=new Map,$e=new Map;gn(e=>{let n=e;if(n.event!=="chat"||!n.payload||typeof n.payload!="object")return;let t=n.payload,r=typeof t.runId=="string"?t.runId:"";if(!r)return;let s=typeof t.state=="string"?t.state:"",o=ge.get(r);if(!o){(s==="final"||s==="error")&&Tr(r,s,String(t.sessionKey??""));return}u(`[xmtp_prompt_user:queue] observed chat event runId=${r} state=${s||"(none)"} sessionKey=${String(t.sessionKey??"")}`),!(s!=="final"&&s!=="error")&&(ge.delete(r),Tr(r,s,String(t.sessionKey??"")),bo(o.sessionKey,r,s,Date.now()-o.startedAt,o.taskId))})});var Xn={};Ee(Xn,{AgentMessageDirection:()=>Cr,INJECT_ONLY_CHANNELS:()=>qe,NON_DELIVERY_CHANNELS:()=>X,buildAgentMessageNotice:()=>kr,buildSystemMessageNotice:()=>Kr,buildUserDispatchExtra:()=>C,dispatchPromptToUserSession:()=>Kn,dispatchToUser:()=>Un,dispatchUserToLatestSessions:()=>Mn,dispatchUserToRoutedSessions:()=>Gn,dispatchUserToSession:()=>jn,notifyAgentMessageToUser:()=>Po,notifySystemMessageToUser:()=>Lo,promptUserToLatestSessions:()=>Fn,promptUserToRoutedSessions:()=>Bn,promptUserToSession:()=>Hn,sendLlmToLatestUserSessions:()=>qn});function ko(e){return e?e.length<=wr+Nr+1?e:`${e.slice(0,wr)}\u2026${e.slice(-Nr)}`:""}function Ko(e){return e.length<=Or+Dr+vn.length?e:`${e.slice(0,Or)}${vn}${e.slice(-Dr)}`}function br(e){return e.name?e.agentId?`${e.name}#${e.agentId}`:e.name:e.walletAddress?ko(e.walletAddress):"unknown"}function vo(e){let n=e.split(`
15
15
  `);if(n.length<=je)return e;let t=n.slice(0,je);return t[je-1]=`${t[je-1]}${vn}`,t.join(`
16
- `)}function kr(e){let n=Dr(e.sender),t=Dr(e.receiver),r=e.direction==="outbound"?`${n} (you) \u2192 ${t}`:`${n} \u2192 ${t} (you)`;return[`${Co[e.direction]} ${r}`,`Job: ${Ko(e.jobId)}`,qe,`\u300C${vo(e.content)}\u300D`,qe].join(`
17
- `)}function Po(e){let n=kr(e),t="[notifyAgentMessageToUser]";Un(n,{jobId:e.jobId}).then(r=>{u(`${t} direction=${e.direction} senderAgentId=${e.sender.agentId??""} senderName=${e.sender.name??""} senderWalletAddress=${e.sender.walletAddress??""} receiverAgentId=${e.receiver.agentId??""} receiverName=${e.receiver.name??""} receiverWalletAddress=${e.receiver.walletAddress??""} jobId=${e.jobId} delivered=${r.dispatched.join(",")} failed=${r.failed.join(",")}`)},r=>{u(`${t} error direction=${e.direction} senderAgentId=${e.sender.agentId??""} receiverAgentId=${e.receiver.agentId??""} jobId=${e.jobId} err=${r instanceof Error?r.message:String(r)}`),f.error(a.USER_DISPATCH_FAILED,r instanceof Error?r:new Error(String(r)),C({checkpoint:"user_channel/agent_message_notify_failed",outcome:"failed",source:"notifyAgentMessageToUser",direction:e.direction,jobId:e.jobId,senderAgentId:e.sender.agentId??"",receiverAgentId:e.receiver.agentId??""}))})}function xo(e){try{return JSON.stringify(e,null,2)??String(e)}catch{return JSON.stringify(e,(n,t)=>typeof t=="bigint"?t.toString():t instanceof Uint8Array?Buffer.from(t).toString("hex"):t,2)??String(e)}}function Kr(e){return["System Message",qe,"```json",xo(e),"```",qe].join(`
18
- `)}function Lo(e){let n=Kr(e),t="[notifySystemMessageToUser]";Un(n).then(r=>{u(`${t} delivered=${r.dispatched.join(",")} failed=${r.failed.join(",")}`)},r=>{u(`${t} error err=${r instanceof Error?r.message:String(r)}`),f.error(a.USER_DISPATCH_FAILED,r instanceof Error?r:new Error(String(r)),C({checkpoint:"user_channel/system_message_notify_failed",outcome:"failed",source:"notifySystemMessageToUser"}))})}function Pn(e){let n=e.base?.trim();if(!n)return(0,H.randomUUID)();let t=(0,H.createHash)("sha256").update(n).update("\0").update(e.purpose).update("\0").update(e.channel).update("\0").update(e.sessionKey).digest("hex");return`okx-a2a:${e.purpose}:${t}`}function xn(e){let n=Yt(e);return!n||X.has(n.channel)?null:n}function Ln(e,n){let t=n.threadId?.trim();t&&(e.threadId=t)}async function vr(e){let n=e.label?`[${e.label}] ${e.content}`:e.content;if(e.target.to&&!He.has(e.channel)){let t={to:e.target.to,message:n,channel:e.channel,sessionKey:e.target.sessionKey,idempotencyKey:Pn({base:e.idempotencyKey,purpose:"dispatch-user",channel:e.channel,sessionKey:e.target.sessionKey})};e.target.accountId&&(t.accountId=e.target.accountId),Ln(t,e.target),await A({method:"send",params:t});return}await ae({sessionKey:e.target.sessionKey,message:e.content,label:e.label})}async function Kn(e){let{channel:n,target:t,llmContent:r,userContent:s}=e,o=await En({key:t.sessionKey,message:r,idempotencyKey:Pn({base:e.idempotencyKey,purpose:"prompt-llm",channel:n,sessionKey:t.sessionKey})});if(o.runId?e.onRunStarted?.(o.runId):u(`[xmtp_prompt_user:queue] sessions.send returned without runId sessionKey=${t.sessionKey} channel=${n}`),t.to&&!He.has(n)){let i={to:t.to,message:s,channel:n,sessionKey:t.sessionKey,idempotencyKey:Pn({base:e.idempotencyKey,purpose:"prompt-user",channel:n,sessionKey:t.sessionKey})};return t.accountId&&(i.accountId=t.accountId),Ln(i,t),await A({method:"send",params:i}),{runId:o.runId}}return await ae({sessionKey:t.sessionKey,message:s}),{runId:o.runId}}async function Un(e,n){let r=Xe({jobId:n?.jobId,currentSessionKey:n?.currentSessionKey})?.targets??K();if(r.size===0)return u("[dispatchToUser] no deliverable user session found"),{dispatched:[],failed:[]};let s=[],o=[],i=n?.label,d=i?`[${i}] ${e}`:e;for(let[c,l]of r)if(!X.has(c))try{if(l.to&&!He.has(c)){let g={to:l.to,message:d,channel:c,sessionKey:l.sessionKey,idempotencyKey:(0,H.randomUUID)()};l.accountId&&(g.accountId=l.accountId),Ln(g,l),await A({method:"send",params:g})}else await ae({sessionKey:l.sessionKey,message:e,label:i});s.push(c),u(`[dispatchToUser] delivered to ${c}${l.to?` \u2192 ${l.to}`:" (inject)"} sessionKey=${l.sessionKey} accountId=${l.accountId??"(none)"}`),f.info(a.USER_DISPATCHED,C({checkpoint:"user_channel/dispatch_delivered",outcome:"success",source:"dispatchToUser",channel:c,sessionKey:l.sessionKey,jobId:n?.jobId,hasTo:!!l.to}))}catch(g){o.push(c),u(`[dispatchToUser] delivery to ${c} failed:`,g),f.error(a.USER_DISPATCH_FAILED,g instanceof Error?g:new Error(String(g)),C({checkpoint:"user_channel/dispatch_failed",outcome:"failed",source:"dispatchToUser",channel:c,sessionKey:l.sessionKey,jobId:n?.jobId,hasTo:!!l.to}))}return{dispatched:s,failed:o}}async function Mn(e){let n=Xe({jobId:e.jobId,currentSessionKey:e.currentSessionKey});if(n)return console.log(`[okx-a2a:gateway-method] dispatch_user stored routes jobId=${e.jobId??"(none)"} currentSessionKey=${e.currentSessionKey??"(none)"} routeCount=${n.targets.size} failed=${n.failed.length}`),Fe(n.targets,e,n.failed);let t=Pr({jobId:e.jobId,currentSessionKey:e.currentSessionKey,contents:[e.content]});if(t)return console.log(`[okx-a2a:gateway-method] dispatch_user rebound remembered route jobId=${e.jobId??"(none)"} routeCount=${t.targets.size} failed=${t.failed.length}`),Fe(t.targets,e,t.failed);let r=await Fe(K(),e);return xr(e.jobId,r.dispatched,[e.content]),r}function $n(e){let n=new Map,t=[];for(let r of e){let s=xn(r);if(!s){t.push({channel:"",sessionKey:r,error:"invalid user gateway session"});continue}n.set(s.channel,s.target)}return{targets:n,failed:t}}function Xe(e){let n=e.currentSessionKey?.trim()||yr(),t=Me({jobId:e.jobId,sessionKey:n});return t.length>0?$n(t):null}async function Fe(e,n,t=[]){if(e.size===0)return u("[okx-a2a:gateway-method] dispatch_user no deliverable user session found"),{ok:!1,dispatched:[],failed:t};let r=[],s=[...t];for(let[o,i]of e)if(!X.has(o))try{await vr({channel:o,target:i,content:n.content,label:n.label,idempotencyKey:n.idempotencyKey}),r.push({channel:o,sessionKey:i.sessionKey}),u(`[okx-a2a:gateway-method] dispatch_user delivered channel=${o} sessionKey=${i.sessionKey}`)}catch(d){let c=d instanceof Error?d.message:String(d);s.push({channel:o,sessionKey:i.sessionKey,error:c}),u(`[okx-a2a:gateway-method] dispatch_user failed channel=${o} sessionKey=${i.sessionKey}: ${c}`),f.error(a.USER_DISPATCH_FAILED,d instanceof Error?d:new Error(String(d)),C({checkpoint:"user_channel/fanout_dispatch_failed",outcome:"failed",source:"okx-a2a.dispatch_user",channel:o,sessionKey:i.sessionKey,hasTo:!!i.to}))}return{ok:r.length>0&&s.length===0,dispatched:r,failed:s}}async function Gn(e){let{targets:n,failed:t}=$n(e.sessionKeys);return Fe(n,{content:e.content,label:e.label,idempotencyKey:e.idempotencyKey},t)}async function jn(e){let n=xn(e.sessionKey);if(!n)return{ok:!1,dispatched:[],failed:[{channel:"",sessionKey:e.sessionKey,error:"invalid user gateway session"}]};try{return await vr({channel:n.channel,target:n.target,content:e.content,label:e.label,idempotencyKey:e.idempotencyKey}),console.log(`[okx-a2a:gateway-method] dispatch_user delivered routed channel=${n.channel} sessionKey=${e.sessionKey}`),{ok:!0,dispatched:[{channel:n.channel,sessionKey:e.sessionKey}],failed:[]}}catch(t){let r=t instanceof Error?t.message:String(t);return f.error(a.USER_DISPATCH_FAILED,t instanceof Error?t:new Error(String(t)),C({checkpoint:"user_channel/routed_dispatch_failed",outcome:"failed",source:"okx-a2a.dispatch_user",channel:n.channel,sessionKey:e.sessionKey,hasTo:!!n.target.to})),{ok:!1,dispatched:[],failed:[{channel:n.channel,sessionKey:e.sessionKey,error:r}]}}}async function Fn(e){let{queuePromptUserAction:n}=await Promise.resolve().then(()=>(pe(),Ge)),t=Xe({jobId:e.jobId,currentSessionKey:e.currentSessionKey});if(t)return console.log(`[okx-a2a:gateway-method] prompt_user stored routes jobId=${e.jobId??"(none)"} currentSessionKey=${e.currentSessionKey??"(none)"} routeCount=${t.targets.size} failed=${t.failed.length}`),Be(t.targets,e,t.failed,n);let r=Pr({jobId:e.jobId,currentSessionKey:e.currentSessionKey,contents:[e.userContent,e.llmContent]});if(r)return console.log(`[okx-a2a:gateway-method] prompt_user rebound remembered route jobId=${e.jobId??"(none)"} routeCount=${r.targets.size} failed=${r.failed.length}`),Be(r.targets,e,r.failed,n);let s=await Be(K(),e,[],n);return xr(e.jobId,s.dispatched,[e.userContent,e.llmContent]),s}function Pr(e){let n=Ue({sessionKey:e.currentSessionKey});return n.length===0||On({jobId:e.jobId,contents:e.contents,sessionKeys:n}).length===0?null:Xe({jobId:e.jobId,currentSessionKey:e.currentSessionKey})}function xr(e,n,t){let r=n.map(s=>s.sessionKey).filter(Boolean);r.length!==0&&On({jobId:e,contents:t,sessionKeys:r})}async function Be(e,n,t=[],r){if(e.size===0)return u("[okx-a2a:gateway-method] prompt_user no deliverable user session found"),{ok:!1,dispatched:[],failed:t};let s=[],o=[...t];for(let[i,d]of e)if(!X.has(i))try{let c=await r({channel:i,target:d,llmContent:n.llmContent,userContent:n.userContent,idempotencyKey:n.idempotencyKey});s.push({channel:i,sessionKey:d.sessionKey,status:c.status,size:c.size}),u(`[okx-a2a:gateway-method] prompt_user ${c.status} channel=${i} sessionKey=${d.sessionKey} size=${c.size}`)}catch(c){let l=c instanceof Error?c.message:String(c);o.push({channel:i,sessionKey:d.sessionKey,error:l}),u(`[okx-a2a:gateway-method] prompt_user failed channel=${i} sessionKey=${d.sessionKey}: ${l}`),f.error(a.PROMPT_USER_FAILED,c instanceof Error?c:new Error(String(c)),{source:"okx-a2a.prompt_user",channel:i,sessionKey:d.sessionKey})}return{ok:s.length>0&&o.length===0,dispatched:s,failed:o}}async function Bn(e){let{queuePromptUserAction:n}=await Promise.resolve().then(()=>(pe(),Ge)),{targets:t,failed:r}=$n(e.sessionKeys);return Be(t,{llmContent:e.llmContent,userContent:e.userContent,idempotencyKey:e.idempotencyKey},r,n)}async function qn(e){let{queuePromptUserAction:n}=await Promise.resolve().then(()=>(pe(),Ge)),t=xn(e.sessionKey);if(!t)return{ok:!1,dispatched:[],failed:[{channel:"",sessionKey:e.sessionKey,error:"invalid user gateway session"}]};try{let r=await n({channel:t.channel,target:t.target,llmContent:e.llmContent,userContent:e.userContent,idempotencyKey:e.idempotencyKey});return console.log(`[okx-a2a:gateway-method] prompt_user ${r.status} routed channel=${t.channel} sessionKey=${e.sessionKey} size=${r.size}`),{ok:!0,dispatched:[{channel:t.channel,sessionKey:e.sessionKey,status:r.status,size:r.size}],failed:[]}}catch(r){let s=r instanceof Error?r.message:String(r);return f.error(a.PROMPT_USER_FAILED,r instanceof Error?r:new Error(String(r)),{source:"okx-a2a.prompt_user",channel:t.channel,sessionKey:e.sessionKey}),{ok:!1,dispatched:[],failed:[{channel:t.channel,sessionKey:e.sessionKey,error:s}]}}}async function Hn(e,n){let t=K();if(t.size===0)return u("[sendLlmToLatestUserSessions] no latest user session found"),{dispatched:[],failed:[]};let r=[],s=[];for(let[o,i]of t)if(!X.has(o))try{await _e().subagent.run({sessionKey:i.sessionKey,message:e,deliver:!0,idempotencyKey:(0,H.randomUUID)()}),r.push(o),u(`[sendLlmToLatestUserSessions] sent to ${o} sessionKey=${i.sessionKey}`)}catch(d){s.push(o),u(`[sendLlmToLatestUserSessions] send to ${o} failed:`,d),f.error(a.USER_DISPATCH_FAILED,d instanceof Error?d:new Error(String(d)),C({checkpoint:"user_channel/llm_send_failed",outcome:"failed",source:n?.source??"sendLlmToLatestUserSessions",channel:o,sessionKey:i.sessionKey}))}return{dispatched:r,failed:s}}var H,Cr,Co,qe,wr,Nr,Or,br,vn,je,X,He,ye=y(()=>{"use strict";I();H=require("node:crypto");B();G();An();Rn();Ar();k();Ie();oe();Cr=(t=>(t.OUTBOUND="outbound",t.INBOUND="inbound",t))(Cr||{}),Co={outbound:"\u{1F4E4} [Sent]",inbound:"\u{1F4E5} [Received]"},qe="\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",wr=6,Nr=4,Or=6,br=4,vn="...",je=8;X=new Set(["heartbeat","cron","webhook","voice"]),He=new Set(["webchat","tui"])});var ni={};Ee(ni,{default:()=>ei});module.exports=Wr(ni);I();Ie();I();k();var _s="main",Ct={id:"okx-a2a",meta:{id:"okx-a2a",label:"OKX A2A",selectionLabel:"OKX A2A",docsPath:"channels/okx-a2a",blurb:"E2E encrypted communication (wallet-to-agent)",order:101},capabilities:{chatTypes:["group"],media:!1,reply:!0},reload:{configPrefixes:["channels.okx-a2a"]},config:{resolveAccount:async()=>({}),listAccountIds:()=>[_s]},outbound:{deliveryMode:"direct"},gateway:{startAccount:async e=>{e.setStatus({accountId:e.accountId,connected:!0,lastConnectedAt:Date.now(),lastEventAt:Date.now()}),u(`[okx-a2a:${e.accountId}] startAccount activated`),await new Promise(n=>{e.abortSignal.addEventListener("abort",()=>n(),{once:!0})}),u(`[okx-a2a:${e.accountId}] received abort signal, cleaning up...`)},stopAccount:async()=>{u("[okx-a2a] stopAccount"),await Dt()}}};I();B();G();k();var cr=async e=>{let n=Jt(e),t=[];for(let r of n)await mn({key:r,...e.deleteTranscript!==void 0?{deleteTranscript:e.deleteTranscript}:{}}),t.push(r),u(`[okx-a2a] session deleted: ${r}`),f.info(a.SESSION_DELETED,{sessionKey:r,...se({sessionKey:r})});return{ok:!0,deleted:t.length,deletedSessionKeys:t,matched:n.length}};B();G();ye();pe();An();Rn();I();var Ur=require("node:os"),Yn=require("node:path"),Mr=require("node:fs");k();oe();var Uo=15e3,Mo=50,$o=1;function Go(e=process.env){return e.OKX_AGENT_TASK_HOME?.trim()||(0,Yn.join)((0,Ur.homedir)(),".okx-agent-task")}function jo(e=process.env){return e.OKX_A2A_OUTBOX_DB_PATH?.trim()||(0,Yn.join)(Go(e),"sqlite","session-store.sqlite")}function Fo(){let e=process.emitWarning;process.emitWarning=((n,...t)=>{if(!((typeof n=="string"?n:n.message).includes("SQLite is an experimental feature")&&t.some(s=>s==="ExperimentalWarning")))return e.call(process,n,...t)});try{return require("node:sqlite")}finally{process.emitWarning=e}}function Lr(e,n){let t=Array.isArray(n.dispatched)?n.dispatched.length:0,r=Array.isArray(n.failed)?n.failed.length:0,s=`${e} delivered=${t} failed=${r}`;return{delivered:t>0,message:s,partial:t>0&&r>0}}async function Bo(e){let n=e.message_id??void 0;if(e.kind==="dispatch_user_latest"){let{dispatchUserToLatestSessions:s}=await Promise.resolve().then(()=>(ye(),Xn)),o=await s({content:e.content,jobId:e.job_id,idempotencyKey:n});return Lr(e.kind,o)}if(e.kind==="prompt_user_latest"){if(!e.llm_content)throw new Error("prompt_user_latest missing llm_content");let{promptUserToLatestSessions:s}=await Promise.resolve().then(()=>(ye(),Xn)),o=await s({userContent:e.content,llmContent:e.llm_content,jobId:e.job_id,idempotencyKey:n});return Lr(e.kind,o)}let{callChatInject:t,callSessionsSend:r}=await Promise.resolve().then(()=>(B(),dr));return e.kind==="chat_inject"?(e.llm_content&&await r({key:e.session_key,message:e.llm_content,idempotencyKey:n}),await t({sessionKey:e.session_key,message:e.content}),{delivered:!0}):(await r({key:e.session_key,message:e.content,idempotencyKey:n}),{delivered:!0})}async function qo(e={}){let n=e.dbPath??jo();if(!(0,Mr.existsSync)(n))return{delivered:0,failed:0,abandoned:0,skipped:!0};let{DatabaseSync:t}=Fo(),r=new t(n);try{if(r.exec("PRAGMA busy_timeout=5000"),r.exec("PRAGMA journal_mode=WAL"),!r.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='pending_gateway_deliveries'").get())return{delivered:0,failed:0,abandoned:0,skipped:!0};let o=r.prepare(`
16
+ `)}function kr(e){let n=br(e.sender),t=br(e.receiver),r=e.direction==="outbound"?`${n} (you) \u2192 ${t}`:`${n} \u2192 ${t} (you)`;return[`${Co[e.direction]} ${r}`,`Job: ${Ko(e.jobId)}`,He,`\u300C${vo(e.content)}\u300D`,He].join(`
17
+ `)}function Po(e){let n=kr(e),t="[notifyAgentMessageToUser]";Un(n,{jobId:e.jobId}).then(r=>{u(`${t} direction=${e.direction} senderAgentId=${e.sender.agentId??""} senderName=${e.sender.name??""} senderWalletAddress=${e.sender.walletAddress??""} receiverAgentId=${e.receiver.agentId??""} receiverName=${e.receiver.name??""} receiverWalletAddress=${e.receiver.walletAddress??""} jobId=${e.jobId} delivered=${r.dispatched.join(",")} failed=${r.failed.join(",")}`)},r=>{u(`${t} error direction=${e.direction} senderAgentId=${e.sender.agentId??""} receiverAgentId=${e.receiver.agentId??""} jobId=${e.jobId} err=${r instanceof Error?r.message:String(r)}`),f.error(a.USER_DISPATCH_FAILED,r instanceof Error?r:new Error(String(r)),C({checkpoint:"user_channel/agent_message_notify_failed",outcome:"failed",source:"notifyAgentMessageToUser",direction:e.direction,jobId:e.jobId,senderAgentId:e.sender.agentId??"",receiverAgentId:e.receiver.agentId??""}))})}function xo(e){try{return JSON.stringify(e,null,2)??String(e)}catch{return JSON.stringify(e,(n,t)=>typeof t=="bigint"?t.toString():t instanceof Uint8Array?Buffer.from(t).toString("hex"):t,2)??String(e)}}function Kr(e){return["System Message",He,"```json",xo(e),"```",He].join(`
18
+ `)}function Lo(e){let n=Kr(e),t="[notifySystemMessageToUser]";Un(n).then(r=>{u(`${t} delivered=${r.dispatched.join(",")} failed=${r.failed.join(",")}`)},r=>{u(`${t} error err=${r instanceof Error?r.message:String(r)}`),f.error(a.USER_DISPATCH_FAILED,r instanceof Error?r:new Error(String(r)),C({checkpoint:"user_channel/system_message_notify_failed",outcome:"failed",source:"notifySystemMessageToUser"}))})}function Pn(e){let n=e.base?.trim();if(!n)return(0,q.randomUUID)();let t=(0,q.createHash)("sha256").update(n).update("\0").update(e.purpose).update("\0").update(e.channel).update("\0").update(e.sessionKey).digest("hex");return`okx-a2a:${e.purpose}:${t}`}function xn(e){let n=Yt(e);return!n||X.has(n.channel)?null:n}function Ln(e,n){let t=n.threadId?.trim();t&&(e.threadId=t)}async function vr(e){let n=e.label?`[${e.label}] ${e.content}`:e.content;if(e.target.to&&!qe.has(e.channel)){let t={to:e.target.to,message:n,channel:e.channel,sessionKey:e.target.sessionKey,idempotencyKey:Pn({base:e.idempotencyKey,purpose:"dispatch-user",channel:e.channel,sessionKey:e.target.sessionKey})};e.target.accountId&&(t.accountId=e.target.accountId),Ln(t,e.target),await A({method:"send",params:t});return}await ae({sessionKey:e.target.sessionKey,message:e.content,label:e.label})}async function Kn(e){let{channel:n,target:t,llmContent:r,userContent:s}=e,o=await En({key:t.sessionKey,message:r,idempotencyKey:Pn({base:e.idempotencyKey,purpose:"prompt-llm",channel:n,sessionKey:t.sessionKey})});if(o.runId?e.onRunStarted?.(o.runId):u(`[xmtp_prompt_user:queue] sessions.send returned without runId sessionKey=${t.sessionKey} channel=${n}`),t.to&&!qe.has(n)){let i={to:t.to,message:s,channel:n,sessionKey:t.sessionKey,idempotencyKey:Pn({base:e.idempotencyKey,purpose:"prompt-user",channel:n,sessionKey:t.sessionKey})};return t.accountId&&(i.accountId=t.accountId),Ln(i,t),await A({method:"send",params:i}),{runId:o.runId}}return await ae({sessionKey:t.sessionKey,message:s}),{runId:o.runId}}async function Un(e,n){let r=Xe({jobId:n?.jobId,currentSessionKey:n?.currentSessionKey})?.targets??K();if(r.size===0)return u("[dispatchToUser] no deliverable user session found"),{dispatched:[],failed:[]};let s=[],o=[],i=n?.label,d=i?`[${i}] ${e}`:e;for(let[c,l]of r)if(!X.has(c))try{if(l.to&&!qe.has(c)){let g={to:l.to,message:d,channel:c,sessionKey:l.sessionKey,idempotencyKey:(0,q.randomUUID)()};l.accountId&&(g.accountId=l.accountId),Ln(g,l),await A({method:"send",params:g})}else await ae({sessionKey:l.sessionKey,message:e,label:i});s.push(c),u(`[dispatchToUser] delivered to ${c}${l.to?` \u2192 ${l.to}`:" (inject)"} sessionKey=${l.sessionKey} accountId=${l.accountId??"(none)"}`),f.info(a.USER_DISPATCHED,C({checkpoint:"user_channel/dispatch_delivered",outcome:"success",source:"dispatchToUser",channel:c,sessionKey:l.sessionKey,jobId:n?.jobId,hasTo:!!l.to}))}catch(g){o.push(c),u(`[dispatchToUser] delivery to ${c} failed:`,g),f.error(a.USER_DISPATCH_FAILED,g instanceof Error?g:new Error(String(g)),C({checkpoint:"user_channel/dispatch_failed",outcome:"failed",source:"dispatchToUser",channel:c,sessionKey:l.sessionKey,jobId:n?.jobId,hasTo:!!l.to}))}return{dispatched:s,failed:o}}async function Mn(e){let n=Xe({jobId:e.jobId,currentSessionKey:e.currentSessionKey});if(n)return console.log(`[okx-a2a:gateway-method] dispatch_user stored routes jobId=${e.jobId??"(none)"} currentSessionKey=${e.currentSessionKey??"(none)"} routeCount=${n.targets.size} failed=${n.failed.length}`),Fe(n.targets,e,n.failed);let t=Pr({jobId:e.jobId,currentSessionKey:e.currentSessionKey,contents:[e.content]});if(t)return console.log(`[okx-a2a:gateway-method] dispatch_user rebound remembered route jobId=${e.jobId??"(none)"} routeCount=${t.targets.size} failed=${t.failed.length}`),Fe(t.targets,e,t.failed);let r=await Fe(K(),e);return xr(e.jobId,r.dispatched,[e.content]),r}function $n(e){let n=new Map,t=[];for(let r of e){let s=xn(r);if(!s){t.push({channel:"",sessionKey:r,error:"invalid user gateway session"});continue}n.set(s.channel,s.target)}return{targets:n,failed:t}}function Xe(e){let n=e.currentSessionKey?.trim()||yr(),t=Me({jobId:e.jobId,sessionKey:n});return t.length>0?$n(t):null}async function Fe(e,n,t=[]){if(e.size===0)return u("[okx-a2a:gateway-method] dispatch_user no deliverable user session found"),{ok:!1,dispatched:[],failed:t};let r=[],s=[...t];for(let[o,i]of e)if(!X.has(o))try{await vr({channel:o,target:i,content:n.content,label:n.label,idempotencyKey:n.idempotencyKey}),r.push({channel:o,sessionKey:i.sessionKey}),u(`[okx-a2a:gateway-method] dispatch_user delivered channel=${o} sessionKey=${i.sessionKey}`)}catch(d){let c=d instanceof Error?d.message:String(d);s.push({channel:o,sessionKey:i.sessionKey,error:c}),u(`[okx-a2a:gateway-method] dispatch_user failed channel=${o} sessionKey=${i.sessionKey}: ${c}`),f.error(a.USER_DISPATCH_FAILED,d instanceof Error?d:new Error(String(d)),C({checkpoint:"user_channel/fanout_dispatch_failed",outcome:"failed",source:"okx-a2a.dispatch_user",channel:o,sessionKey:i.sessionKey,hasTo:!!i.to}))}return{ok:r.length>0&&s.length===0,dispatched:r,failed:s}}async function Gn(e){let{targets:n,failed:t}=$n(e.sessionKeys);return Fe(n,{content:e.content,label:e.label,idempotencyKey:e.idempotencyKey},t)}async function jn(e){let n=xn(e.sessionKey);if(!n)return{ok:!1,dispatched:[],failed:[{channel:"",sessionKey:e.sessionKey,error:"invalid user gateway session"}]};try{return await vr({channel:n.channel,target:n.target,content:e.content,label:e.label,idempotencyKey:e.idempotencyKey}),console.log(`[okx-a2a:gateway-method] dispatch_user delivered routed channel=${n.channel} sessionKey=${e.sessionKey}`),{ok:!0,dispatched:[{channel:n.channel,sessionKey:e.sessionKey}],failed:[]}}catch(t){let r=t instanceof Error?t.message:String(t);return f.error(a.USER_DISPATCH_FAILED,t instanceof Error?t:new Error(String(t)),C({checkpoint:"user_channel/routed_dispatch_failed",outcome:"failed",source:"okx-a2a.dispatch_user",channel:n.channel,sessionKey:e.sessionKey,hasTo:!!n.target.to})),{ok:!1,dispatched:[],failed:[{channel:n.channel,sessionKey:e.sessionKey,error:r}]}}}async function Fn(e){let{queuePromptUserAction:n}=await Promise.resolve().then(()=>(pe(),Ge)),t=Xe({jobId:e.jobId,currentSessionKey:e.currentSessionKey});if(t)return console.log(`[okx-a2a:gateway-method] prompt_user stored routes jobId=${e.jobId??"(none)"} currentSessionKey=${e.currentSessionKey??"(none)"} routeCount=${t.targets.size} failed=${t.failed.length}`),Be(t.targets,e,t.failed,n);let r=Pr({jobId:e.jobId,currentSessionKey:e.currentSessionKey,contents:[e.userContent,e.llmContent]});if(r)return console.log(`[okx-a2a:gateway-method] prompt_user rebound remembered route jobId=${e.jobId??"(none)"} routeCount=${r.targets.size} failed=${r.failed.length}`),Be(r.targets,e,r.failed,n);let s=await Be(K(),e,[],n);return xr(e.jobId,s.dispatched,[e.userContent,e.llmContent]),s}function Pr(e){let n=Ue({sessionKey:e.currentSessionKey});return n.length===0||On({jobId:e.jobId,contents:e.contents,sessionKeys:n}).length===0?null:Xe({jobId:e.jobId,currentSessionKey:e.currentSessionKey})}function xr(e,n,t){let r=n.map(s=>s.sessionKey).filter(Boolean);r.length!==0&&On({jobId:e,contents:t,sessionKeys:r})}async function Be(e,n,t=[],r){if(e.size===0)return u("[okx-a2a:gateway-method] prompt_user no deliverable user session found"),{ok:!1,dispatched:[],failed:t};let s=[],o=[...t];for(let[i,d]of e)if(!X.has(i))try{let c=await r({channel:i,target:d,llmContent:n.llmContent,userContent:n.userContent,idempotencyKey:n.idempotencyKey});s.push({channel:i,sessionKey:d.sessionKey,status:c.status,size:c.size}),u(`[okx-a2a:gateway-method] prompt_user ${c.status} channel=${i} sessionKey=${d.sessionKey} size=${c.size}`)}catch(c){let l=c instanceof Error?c.message:String(c);o.push({channel:i,sessionKey:d.sessionKey,error:l}),u(`[okx-a2a:gateway-method] prompt_user failed channel=${i} sessionKey=${d.sessionKey}: ${l}`),f.error(a.PROMPT_USER_FAILED,c instanceof Error?c:new Error(String(c)),{source:"okx-a2a.prompt_user",channel:i,sessionKey:d.sessionKey})}return{ok:s.length>0&&o.length===0,dispatched:s,failed:o}}async function Bn(e){let{queuePromptUserAction:n}=await Promise.resolve().then(()=>(pe(),Ge)),{targets:t,failed:r}=$n(e.sessionKeys);return Be(t,{llmContent:e.llmContent,userContent:e.userContent,idempotencyKey:e.idempotencyKey},r,n)}async function Hn(e){let{queuePromptUserAction:n}=await Promise.resolve().then(()=>(pe(),Ge)),t=xn(e.sessionKey);if(!t)return{ok:!1,dispatched:[],failed:[{channel:"",sessionKey:e.sessionKey,error:"invalid user gateway session"}]};try{let r=await n({channel:t.channel,target:t.target,llmContent:e.llmContent,userContent:e.userContent,idempotencyKey:e.idempotencyKey});return console.log(`[okx-a2a:gateway-method] prompt_user ${r.status} routed channel=${t.channel} sessionKey=${e.sessionKey} size=${r.size}`),{ok:!0,dispatched:[{channel:t.channel,sessionKey:e.sessionKey,status:r.status,size:r.size}],failed:[]}}catch(r){let s=r instanceof Error?r.message:String(r);return f.error(a.PROMPT_USER_FAILED,r instanceof Error?r:new Error(String(r)),{source:"okx-a2a.prompt_user",channel:t.channel,sessionKey:e.sessionKey}),{ok:!1,dispatched:[],failed:[{channel:t.channel,sessionKey:e.sessionKey,error:s}]}}}async function qn(e,n){let t=K();if(t.size===0)return u("[sendLlmToLatestUserSessions] no latest user session found"),{dispatched:[],failed:[]};let r=[],s=[];for(let[o,i]of t)if(!X.has(o))try{await _e().subagent.run({sessionKey:i.sessionKey,message:e,deliver:!0,idempotencyKey:(0,q.randomUUID)()}),r.push(o),u(`[sendLlmToLatestUserSessions] sent to ${o} sessionKey=${i.sessionKey}`)}catch(d){s.push(o),u(`[sendLlmToLatestUserSessions] send to ${o} failed:`,d),f.error(a.USER_DISPATCH_FAILED,d instanceof Error?d:new Error(String(d)),C({checkpoint:"user_channel/llm_send_failed",outcome:"failed",source:n?.source??"sendLlmToLatestUserSessions",channel:o,sessionKey:i.sessionKey}))}return{dispatched:r,failed:s}}var q,Cr,Co,He,wr,Nr,Or,Dr,vn,je,X,qe,ye=y(()=>{"use strict";I();q=require("node:crypto");B();G();An();Rn();Ar();k();Ie();oe();Cr=(t=>(t.OUTBOUND="outbound",t.INBOUND="inbound",t))(Cr||{}),Co={outbound:"\u{1F4E4} [Sent]",inbound:"\u{1F4E5} [Received]"},He="\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",wr=6,Nr=4,Or=6,Dr=4,vn="...",je=8;X=new Set(["heartbeat","cron","webhook","voice"]),qe=new Set(["webchat","tui"])});var ni={};Ee(ni,{default:()=>ei});module.exports=Wr(ni);I();Ie();I();k();var _s="main",Ct={id:"okx-a2a",meta:{id:"okx-a2a",label:"OKX A2A",selectionLabel:"OKX A2A",docsPath:"channels/okx-a2a",blurb:"E2E encrypted communication (wallet-to-agent)",order:101},capabilities:{chatTypes:["group"],media:!1,reply:!0},reload:{configPrefixes:["channels.okx-a2a"]},config:{resolveAccount:async()=>({}),listAccountIds:()=>[_s]},outbound:{deliveryMode:"direct"},gateway:{startAccount:async e=>{e.setStatus({accountId:e.accountId,connected:!0,lastConnectedAt:Date.now(),lastEventAt:Date.now()}),u(`[okx-a2a:${e.accountId}] startAccount activated`),await new Promise(n=>{e.abortSignal.addEventListener("abort",()=>n(),{once:!0})}),u(`[okx-a2a:${e.accountId}] received abort signal, cleaning up...`)},stopAccount:async()=>{u("[okx-a2a] stopAccount"),await bt()}}};I();B();G();k();var cr=async e=>{let n=Jt(e),t=[];for(let r of n)await mn({key:r,...e.deleteTranscript!==void 0?{deleteTranscript:e.deleteTranscript}:{}}),t.push(r),u(`[okx-a2a] session deleted: ${r}`),f.info(a.SESSION_DELETED,{sessionKey:r,...se({sessionKey:r})});return{ok:!0,deleted:t.length,deletedSessionKeys:t,matched:n.length}};B();G();ye();pe();An();Rn();I();var Ur=require("node:os"),Yn=require("node:path"),Mr=require("node:fs");k();oe();var Uo=15e3,Mo=50,$o=1;function Go(e=process.env){return e.OKX_AGENT_TASK_HOME?.trim()||(0,Yn.join)((0,Ur.homedir)(),".okx-agent-task")}function jo(e=process.env){return e.OKX_A2A_OUTBOX_DB_PATH?.trim()||(0,Yn.join)(Go(e),"sqlite","session-store.sqlite")}function Fo(){let e=process.emitWarning;process.emitWarning=((n,...t)=>{if(!((typeof n=="string"?n:n.message).includes("SQLite is an experimental feature")&&t.some(s=>s==="ExperimentalWarning")))return e.call(process,n,...t)});try{return require("node:sqlite")}finally{process.emitWarning=e}}function Lr(e,n){let t=Array.isArray(n.dispatched)?n.dispatched.length:0,r=Array.isArray(n.failed)?n.failed.length:0,s=`${e} delivered=${t} failed=${r}`;return{delivered:t>0,message:s,partial:t>0&&r>0}}async function Bo(e){let n=e.message_id??void 0;if(e.kind==="dispatch_user_latest"){let{dispatchUserToLatestSessions:s}=await Promise.resolve().then(()=>(ye(),Xn)),o=await s({content:e.content,jobId:e.job_id,idempotencyKey:n});return Lr(e.kind,o)}if(e.kind==="prompt_user_latest"){if(!e.llm_content)throw new Error("prompt_user_latest missing llm_content");let{promptUserToLatestSessions:s}=await Promise.resolve().then(()=>(ye(),Xn)),o=await s({userContent:e.content,llmContent:e.llm_content,jobId:e.job_id,idempotencyKey:n});return Lr(e.kind,o)}let{callChatInject:t,callSessionsSend:r}=await Promise.resolve().then(()=>(B(),dr));return e.kind==="chat_inject"?(e.llm_content&&await r({key:e.session_key,message:e.llm_content,idempotencyKey:n}),await t({sessionKey:e.session_key,message:e.content}),{delivered:!0}):(await r({key:e.session_key,message:e.content,idempotencyKey:n}),{delivered:!0})}async function Ho(e={}){let n=e.dbPath??jo();if(!(0,Mr.existsSync)(n))return{delivered:0,failed:0,abandoned:0,skipped:!0};let{DatabaseSync:t}=Fo(),r=new t(n);try{if(r.exec("PRAGMA busy_timeout=5000"),r.exec("PRAGMA journal_mode=WAL"),!r.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='pending_gateway_deliveries'").get())return{delivered:0,failed:0,abandoned:0,skipped:!0};let o=r.prepare(`
19
19
  SELECT id, kind, provider, session_key, job_id, content, llm_content, message_id, attempts
20
20
  FROM pending_gateway_deliveries
21
21
  WHERE provider = 'openclaw'
@@ -25,6 +25,6 @@ ${g}`}catch{}}throw d}}async function ie(e){return A({method:"sessions.create",p
25
25
  UPDATE pending_gateway_deliveries
26
26
  SET attempts = attempts + 1, last_error = ?, last_attempt_at = ?
27
27
  WHERE id = ?
28
- `).run(_,new Date().toISOString(),g.id),u(`[okx-a2a:outbox-drain] delivery failed id=${g.id} kind=${g.kind} attempts=${L}: ${_}`))}return an({delivered:i,failed:d,abandoned:c}).shouldEmit&&f.info(a.SESSION_DISPATCHED,nr({delivered:i,failed:d,abandoned:c,batchSize:o.length})),{delivered:i,failed:d,abandoned:c,skipped:!1}}finally{r.close()}}function $r(e={}){let n=e.intervalMs??Uo,t=!1,r=async()=>{if(!t){t=!0;try{await qo({...e.dbPath!==void 0?{dbPath:e.dbPath}:{},...e.limit!==void 0?{limit:e.limit}:{}})}catch(o){u("[okx-a2a:outbox-drain] tick failed:",o)}finally{t=!1}}},s=setInterval(()=>{r()},n);return s.unref?.(),r(),()=>{clearInterval(s)}}k();var Ho=process.env.SENTRY_ENV==="dev"?"dev":"prod";function Xo(e){return e?.trim().toLowerCase().replace(/[^a-z0-9_.:-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,128)||void 0}var Gr={projectName:"okx/openclaw-okx-a2a-extension",release:"0.2.2",environment:Ho,runtimeContainer:Xo(process.env.OKX_A2A_RUNTIME_CONTAINER)};var Y,W,Yo="https://e20ff987c945887733de9ec6cca87aba@sentry.coinall.ltd/apmfe/70295";function Wo(e){let n=e?.details?.requestId;return typeof n=="string"&&n.trim()?`openclaw devices approve ${n}`:"openclaw devices approve --latest"}function Vo(e){let n=e?.details??{},t=Le(e);return["OKX A2A plugin needs OpenClaw gateway `operator.admin` scope before it can create sessions, inject chat messages, and route XMTP conversations.","","Ask the user whether they approve granting this scope to the OKX A2A plugin.","","If the user approves, ask them to run this command on the OpenClaw host:","","```bash",Wo(e),"```","",`requestId: ${n.requestId??""}`,`deviceId: ${n.deviceId??""}`,`requestedScopes: ${Array.isArray(n.requestedScopes)?n.requestedScopes.join(","):""}`,`approvedScopes: ${Array.isArray(n.approvedScopes)?n.approvedScopes.join(","):""}`,t?`hint: ${t}`:""].filter(Boolean).join(`
29
- `)}function zo(){ie({key:zt()}).then(()=>{u("[okx-a2a:service] gateway client admin precheck succeeded"),f.info(a.GATEWAY_STARTED,{source:"gateway_preconnect",outcome:"ok"})},e=>{u("[okx-a2a:service] gateway client admin precheck failed:",e),f.error(a.GATEWAY_CONNECT_FAILED,e instanceof Error?e:new Error(String(e)),{source:"gateway_preconnect",code:String(e?.gatewayCode??e?.details?.code??""),reason:String(e?.details?.reason??""),requestId:String(e?.details?.requestId??"")}),Hn(Vo(e),{source:"gateway_preconnect"}).then(({dispatched:n,failed:t})=>{f.info(a.USER_DISPATCHED,{source:"gateway_preconnect",outcome:t.length===0?"all_ok":"partial",dispatchedChannels:n.join(","),failedChannels:t.join(","),dispatchedCount:String(n.length),failedCount:String(t.length)})},n=>{f.error(a.USER_DISPATCH_FAILED,n instanceof Error?n:new Error(String(n)),{source:"gateway_preconnect"})})})}function Jo(){let e=process.env.OKX_A2A_SENTRY_DSN?.trim()||process.env.SENTRY_DSN?.trim()||Yo;bt({dsn:e,...Gr,agentPlatform:"openclaw"})}function Wn(e,n){let t=[e?.sessionKey,e?.context?.sessionKey,e?.ctx?.sessionKey,e?.hookContext?.sessionKey,n?.sessionKey];for(let r of t)if(typeof r=="string"&&r.trim())return r;return null}function Vn(e,n){let t=[e?.runId,e?.agentRunId,e?.context?.runId,e?.context?.agentRunId,e?.ctx?.runId,e?.ctx?.agentRunId,e?.hookContext?.runId,e?.hookContext?.agentRunId,n?.runId,n?.agentRunId];for(let r of t)if(typeof r=="string"&&r.trim())return r;return null}function Qo(e){let n=jr(e),t=new Set([e]);for(let[r,s]of K())r&&r!==n&&s.sessionKey&&t.add(s.sessionKey);return[...t]}function jr(e){let n=e.split(":");return n.length>=4&&n[0]==="agent"?n[2]??null:null}function O(e,n,t,r){let s="0.2.2",o=r.sessionKey?jr(r.sessionKey)??"unknown":"missing",i=t instanceof Error?t.message:String(t);u(`[okx-a2a:hook] ${e} bookkeeping failed; continuing phase=${n} pluginVersion=${s} channel=${o} hasRunId=${r.runId?"true":"false"} error=${i}`)}function zn(e,n){let t=e[n];if(typeof t!="string"||!t.trim())throw new Error(`Missing required param ${n}`);return t}function E(e,n){let t=e[n];return typeof t=="string"&&t.trim()?t:void 0}function Jn(e,n){let t=e[n];if(!Array.isArray(t))return;let r=t.filter(s=>typeof s=="string"&&s.trim().length>0).map(s=>s.trim());return r.length>0?r:void 0}function Zo(e,n){let t=e[n];return typeof t=="boolean"?t:void 0}var x={id:"okx-a2a",name:"OKX A2A Plugin",version:"0.2.2",register(e){ot(e.runtime),e.registerChannel({plugin:Ct}),e.registerGatewayMethod("okx-a2a.health",async({respond:n})=>{n(!0,{ok:!0,provider:"openclaw",pluginId:x.id,pluginVersion:x.version,startedAt:W??null})},{scope:"operator.admin"}),e.registerGatewayMethod("okx-a2a.dispatch_user",async({params:n,respond:t})=>{try{let r=zn(n,"content"),s=E(n,"label"),o=E(n,"sessionKey"),i=Jn(n,"sessionKeys"),d=E(n,"jobId"),c=E(n,"currentSessionKey"),l=E(n,"idempotencyKey");t(!0,i?await Gn({sessionKeys:i,content:r,label:s,idempotencyKey:l}):o?await jn({sessionKey:o,content:r,label:s,idempotencyKey:l}):await Mn({content:r,label:s,jobId:d,currentSessionKey:c,idempotencyKey:l}))}catch(r){t(!1,void 0,{code:"INVALID_REQUEST",message:r instanceof Error?r.message:String(r)})}},{scope:"operator.admin"}),e.registerGatewayMethod("okx-a2a.prompt_user",async({params:n,respond:t})=>{try{let r=zn(n,"userContent"),s=zn(n,"llmContent"),o=E(n,"sessionKey"),i=Jn(n,"sessionKeys"),d=E(n,"jobId"),c=E(n,"currentSessionKey"),l=E(n,"idempotencyKey");t(!0,i?await Bn({sessionKeys:i,userContent:r,llmContent:s,idempotencyKey:l}):o?await qn({sessionKey:o,userContent:r,llmContent:s,idempotencyKey:l}):await Fn({userContent:r,llmContent:s,jobId:d,currentSessionKey:c,idempotencyKey:l}))}catch(r){t(!1,void 0,{code:"INVALID_REQUEST",message:r instanceof Error?r.message:String(r)})}},{scope:"operator.admin"}),e.registerGatewayMethod("okx-a2a.delete_sessions",async({params:n,respond:t})=>{try{let r=E(n,"sessionKey"),s=Jn(n,"sessionKeys"),o=E(n,"jobId");if(!r&&!s&&!o)throw new Error("Missing required selector: sessionKey, sessionKeys, or jobId");let i=E(n,"myAgentId"),d=E(n,"toAgentId"),c=E(n,"myXmtpAddress"),l=E(n,"toXmtpAddress"),g=Zo(n,"deleteTranscript");t(!0,await cr({...r?{sessionKey:r}:{},...s?{sessionKeys:s}:{},...o?{jobId:o}:{},...i?{myAgentId:i}:{},...d?{toAgentId:d}:{},...c?{myXmtpAddress:c}:{},...l?{toXmtpAddress:l}:{},...g!==void 0?{deleteTranscript:g}:{}}))}catch(r){t(!1,void 0,{code:"INVALID_REQUEST",message:r instanceof Error?r.message:String(r)})}},{scope:"operator.admin"}),e.registerHook("agent:bootstrap",async n=>{let t=n.context,r=t.bootstrapFiles;if(Array.isArray(r))try{let s=r.map(i=>`${i.name}(${i.missing?"missing":`${i.content?.length??0}b`})`).join(", ");u(`[okx-a2a:hook] agent:bootstrap agentId=${t.agentId??"?"} files=[${s}]`);let o=r.reduce((i,d)=>i+(d.content?.length??0),0);f.info(a.BOOTSTRAP_APPLIED,{openclawAgentId:t.agentId??"",promptSize:String(o),fileCount:String(r.length),missingCount:String(r.filter(i=>i.missing).length)})}catch(s){f.error(a.BOOTSTRAP_FAILED,s instanceof Error?s:void 0,{openclawAgentId:t.agentId??""})}},{name:"okx-a2a-agent-bootstrap"}),e.on("before_agent_run",async(n,t)=>{let r=Wn(n,t),s=Vn(n,t);if(!r){u("[xmtp_prompt_user:queue] before_agent_run ignored: missing sessionKey");return}let o=[r];try{o=Qo(r)}catch(i){O("before_agent_run","route_discovery",i,{runId:s,sessionKey:r})}try{fr({runId:s,sessionKey:r,routeSessionKeys:o})&&console.log(`[okx-a2a:hook] remembered gateway route origin runId=${s} sessionKey=${r} routeSessionKeys=${o.join(",")}`)}catch(i){O("before_agent_run","route_origin",i,{runId:s,sessionKey:r})}try{Cn(r)}catch(i){O("before_agent_run","prompt_user_running",i,{runId:s,sessionKey:r})}}),e.on("before_tool_call",async(n,t)=>{let r=null,s=null;try{r=Wn(n,t),s=Vn(n,t)}catch(i){O("before_tool_call","context",i,{runId:s,sessionKey:r});return}try{In(r)}catch(i){O("before_tool_call","remember_recent_session",i,{runId:s,sessionKey:r})}let o=r?[r]:[];try{o=[...new Set([...Me({sessionKey:r}),...Ue({runId:s,sessionKey:r})])]}catch(i){O("before_tool_call","route_discovery",i,{runId:s,sessionKey:r})}try{let i=gr({toolName:n?.toolName,params:n?.params,sessionKey:r,routeSessionKeys:o});return i?(console.log(`[okx-a2a:hook] injected gateway session env tool=${n?.toolName??"?"} sessionKey=${r} routeSessionKeys=${o.join(",")}`),{params:i}):void 0}catch(i){O("before_tool_call","env_injection",i,{runId:s,sessionKey:r});return}},{priority:50}),e.on("agent_end",async(n,t)=>{let r=null,s=null;try{r=Wn(n,t),s=Vn(n,t)}catch(o){O("agent_end","context",o,{runId:s,sessionKey:r});return}try{pr({runId:s,sessionKey:r})}catch(o){O("agent_end","route_origin_cleanup",o,{runId:s,sessionKey:r})}if(!r){u("[xmtp_prompt_user:queue] agent_end ignored: missing sessionKey");return}try{kn(r)}catch(o){O("agent_end","prompt_user_ended",o,{runId:s,sessionKey:r})}}),e.registerService({id:"okx-a2a:core",start:async()=>{u("[okx-a2a:service] okx-a2a:core starting (multi-identity mode); initializing communication identities..."),W=Date.now(),Jo(),f.info(a.GATEWAY_STARTED,{onchainosAgentId:"*",pid:String(process.pid),pluginId:x.id,pluginVersion:x.version,nodeVersion:process.version,startedAt:String(W)}),pn(),zo(),Y&&Y(),Y=$r(),u("[okx-a2a:service] OpenClaw lightweight gateway initialized; node daemon owns XMTP receive/send/agent sync.")},stop:async()=>{Y&&(Y(),Y=void 0),yn(),u("[okx-a2a:service] okx-a2a:core stopped");let n=Date.now();f.info(a.GATEWAY_STOPPED,{onchainosAgentId:"*",pid:String(process.pid),pluginId:x.id,pluginVersion:x.version,stoppedAt:String(n),uptimeMs:W?String(n-W):"unknown"}),W=void 0}})}},ei=x;
28
+ `).run(_,new Date().toISOString(),g.id),u(`[okx-a2a:outbox-drain] delivery failed id=${g.id} kind=${g.kind} attempts=${L}: ${_}`))}return an({delivered:i,failed:d,abandoned:c}).shouldEmit&&f.info(a.SESSION_DISPATCHED,nr({delivered:i,failed:d,abandoned:c,batchSize:o.length})),{delivered:i,failed:d,abandoned:c,skipped:!1}}finally{r.close()}}function $r(e={}){let n=e.intervalMs??Uo,t=!1,r=async()=>{if(!t){t=!0;try{await Ho({...e.dbPath!==void 0?{dbPath:e.dbPath}:{},...e.limit!==void 0?{limit:e.limit}:{}})}catch(o){u("[okx-a2a:outbox-drain] tick failed:",o)}finally{t=!1}}},s=setInterval(()=>{r()},n);return s.unref?.(),r(),()=>{clearInterval(s)}}k();var qo=process.env.SENTRY_ENV==="dev"?"dev":"prod";function Xo(e){return e?.trim().toLowerCase().replace(/[^a-z0-9_.:-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,128)||void 0}var Gr={projectName:"okx/openclaw-okx-a2a-extension",release:"0.2.3",environment:qo,runtimeContainer:Xo(process.env.OKX_A2A_RUNTIME_CONTAINER)};var Y,W,Yo="https://e20ff987c945887733de9ec6cca87aba@sentry.coinall.ltd/apmfe/70295";function Wo(e){let n=e?.details?.requestId;return typeof n=="string"&&n.trim()?`openclaw devices approve ${n}`:"openclaw devices approve --latest"}function Vo(e){let n=e?.details??{},t=Le(e);return["OKX A2A plugin needs OpenClaw gateway `operator.admin` scope before it can create sessions, inject chat messages, and route XMTP conversations.","","Ask the user whether they approve granting this scope to the OKX A2A plugin.","","If the user approves, ask them to run this command on the OpenClaw host:","","```bash",Wo(e),"```","",`requestId: ${n.requestId??""}`,`deviceId: ${n.deviceId??""}`,`requestedScopes: ${Array.isArray(n.requestedScopes)?n.requestedScopes.join(","):""}`,`approvedScopes: ${Array.isArray(n.approvedScopes)?n.approvedScopes.join(","):""}`,t?`hint: ${t}`:""].filter(Boolean).join(`
29
+ `)}function zo(){ie({key:zt()}).then(()=>{u("[okx-a2a:service] gateway client admin precheck succeeded"),f.info(a.GATEWAY_STARTED,{source:"gateway_preconnect",outcome:"ok"})},e=>{u("[okx-a2a:service] gateway client admin precheck failed:",e),f.error(a.GATEWAY_CONNECT_FAILED,e instanceof Error?e:new Error(String(e)),{source:"gateway_preconnect",code:String(e?.gatewayCode??e?.details?.code??""),reason:String(e?.details?.reason??""),requestId:String(e?.details?.requestId??"")}),qn(Vo(e),{source:"gateway_preconnect"}).then(({dispatched:n,failed:t})=>{f.info(a.USER_DISPATCHED,{source:"gateway_preconnect",outcome:t.length===0?"all_ok":"partial",dispatchedChannels:n.join(","),failedChannels:t.join(","),dispatchedCount:String(n.length),failedCount:String(t.length)})},n=>{f.error(a.USER_DISPATCH_FAILED,n instanceof Error?n:new Error(String(n)),{source:"gateway_preconnect"})})})}function Jo(){let e=process.env.OKX_A2A_SENTRY_DSN?.trim()||process.env.SENTRY_DSN?.trim()||Yo;Dt({dsn:e,...Gr,agentPlatform:"openclaw"})}function Wn(e,n){let t=[e?.sessionKey,e?.context?.sessionKey,e?.ctx?.sessionKey,e?.hookContext?.sessionKey,n?.sessionKey];for(let r of t)if(typeof r=="string"&&r.trim())return r;return null}function Vn(e,n){let t=[e?.runId,e?.agentRunId,e?.context?.runId,e?.context?.agentRunId,e?.ctx?.runId,e?.ctx?.agentRunId,e?.hookContext?.runId,e?.hookContext?.agentRunId,n?.runId,n?.agentRunId];for(let r of t)if(typeof r=="string"&&r.trim())return r;return null}function Qo(e){let n=jr(e),t=new Set([e]);for(let[r,s]of K())r&&r!==n&&s.sessionKey&&t.add(s.sessionKey);return[...t]}function jr(e){let n=e.split(":");return n.length>=4&&n[0]==="agent"?n[2]??null:null}function O(e,n,t,r){let s="0.2.3",o=r.sessionKey?jr(r.sessionKey)??"unknown":"missing",i=t instanceof Error?t.message:String(t);u(`[okx-a2a:hook] ${e} bookkeeping failed; continuing phase=${n} pluginVersion=${s} channel=${o} hasRunId=${r.runId?"true":"false"} error=${i}`)}function zn(e,n){let t=e[n];if(typeof t!="string"||!t.trim())throw new Error(`Missing required param ${n}`);return t}function E(e,n){let t=e[n];return typeof t=="string"&&t.trim()?t:void 0}function Jn(e,n){let t=e[n];if(!Array.isArray(t))return;let r=t.filter(s=>typeof s=="string"&&s.trim().length>0).map(s=>s.trim());return r.length>0?r:void 0}function Zo(e,n){let t=e[n];return typeof t=="boolean"?t:void 0}var x={id:"okx-a2a",name:"OKX A2A Plugin",version:"0.2.3",register(e){ot(e.runtime),e.registerChannel({plugin:Ct}),e.registerGatewayMethod("okx-a2a.health",async({respond:n})=>{n(!0,{ok:!0,provider:"openclaw",pluginId:x.id,pluginVersion:x.version,startedAt:W??null})},{scope:"operator.admin"}),e.registerGatewayMethod("okx-a2a.dispatch_user",async({params:n,respond:t})=>{try{let r=zn(n,"content"),s=E(n,"label"),o=E(n,"sessionKey"),i=Jn(n,"sessionKeys"),d=E(n,"jobId"),c=E(n,"currentSessionKey"),l=E(n,"idempotencyKey");t(!0,i?await Gn({sessionKeys:i,content:r,label:s,idempotencyKey:l}):o?await jn({sessionKey:o,content:r,label:s,idempotencyKey:l}):await Mn({content:r,label:s,jobId:d,currentSessionKey:c,idempotencyKey:l}))}catch(r){t(!1,void 0,{code:"INVALID_REQUEST",message:r instanceof Error?r.message:String(r)})}},{scope:"operator.admin"}),e.registerGatewayMethod("okx-a2a.prompt_user",async({params:n,respond:t})=>{try{let r=zn(n,"userContent"),s=zn(n,"llmContent"),o=E(n,"sessionKey"),i=Jn(n,"sessionKeys"),d=E(n,"jobId"),c=E(n,"currentSessionKey"),l=E(n,"idempotencyKey");t(!0,i?await Bn({sessionKeys:i,userContent:r,llmContent:s,idempotencyKey:l}):o?await Hn({sessionKey:o,userContent:r,llmContent:s,idempotencyKey:l}):await Fn({userContent:r,llmContent:s,jobId:d,currentSessionKey:c,idempotencyKey:l}))}catch(r){t(!1,void 0,{code:"INVALID_REQUEST",message:r instanceof Error?r.message:String(r)})}},{scope:"operator.admin"}),e.registerGatewayMethod("okx-a2a.delete_sessions",async({params:n,respond:t})=>{try{let r=E(n,"sessionKey"),s=Jn(n,"sessionKeys"),o=E(n,"jobId");if(!r&&!s&&!o)throw new Error("Missing required selector: sessionKey, sessionKeys, or jobId");let i=E(n,"myAgentId"),d=E(n,"toAgentId"),c=E(n,"myXmtpAddress"),l=E(n,"toXmtpAddress"),g=Zo(n,"deleteTranscript");t(!0,await cr({...r?{sessionKey:r}:{},...s?{sessionKeys:s}:{},...o?{jobId:o}:{},...i?{myAgentId:i}:{},...d?{toAgentId:d}:{},...c?{myXmtpAddress:c}:{},...l?{toXmtpAddress:l}:{},...g!==void 0?{deleteTranscript:g}:{}}))}catch(r){t(!1,void 0,{code:"INVALID_REQUEST",message:r instanceof Error?r.message:String(r)})}},{scope:"operator.admin"}),e.registerHook("agent:bootstrap",async n=>{let t=n.context,r=t.bootstrapFiles;if(Array.isArray(r))try{let s=r.map(i=>`${i.name}(${i.missing?"missing":`${i.content?.length??0}b`})`).join(", ");u(`[okx-a2a:hook] agent:bootstrap agentId=${t.agentId??"?"} files=[${s}]`);let o=r.reduce((i,d)=>i+(d.content?.length??0),0);f.info(a.BOOTSTRAP_APPLIED,{openclawAgentId:t.agentId??"",promptSize:String(o),fileCount:String(r.length),missingCount:String(r.filter(i=>i.missing).length)})}catch(s){f.error(a.BOOTSTRAP_FAILED,s instanceof Error?s:void 0,{openclawAgentId:t.agentId??""})}},{name:"okx-a2a-agent-bootstrap"}),e.on("before_agent_run",async(n,t)=>{let r=Wn(n,t),s=Vn(n,t);if(!r){u("[xmtp_prompt_user:queue] before_agent_run ignored: missing sessionKey");return}let o=[r];try{o=Qo(r)}catch(i){O("before_agent_run","route_discovery",i,{runId:s,sessionKey:r})}try{fr({runId:s,sessionKey:r,routeSessionKeys:o})&&console.log(`[okx-a2a:hook] remembered gateway route origin runId=${s} sessionKey=${r} routeSessionKeys=${o.join(",")}`)}catch(i){O("before_agent_run","route_origin",i,{runId:s,sessionKey:r})}try{Cn(r)}catch(i){O("before_agent_run","prompt_user_running",i,{runId:s,sessionKey:r})}}),e.on("before_tool_call",async(n,t)=>{let r=null,s=null;try{r=Wn(n,t),s=Vn(n,t)}catch(i){O("before_tool_call","context",i,{runId:s,sessionKey:r});return}try{In(r)}catch(i){O("before_tool_call","remember_recent_session",i,{runId:s,sessionKey:r})}let o=r?[r]:[];try{o=[...new Set([...Me({sessionKey:r}),...Ue({runId:s,sessionKey:r})])]}catch(i){O("before_tool_call","route_discovery",i,{runId:s,sessionKey:r})}try{let i=gr({toolName:n?.toolName,params:n?.params,sessionKey:r,routeSessionKeys:o});return i?(console.log(`[okx-a2a:hook] injected gateway session env tool=${n?.toolName??"?"} sessionKey=${r} routeSessionKeys=${o.join(",")}`),{params:i}):void 0}catch(i){O("before_tool_call","env_injection",i,{runId:s,sessionKey:r});return}},{priority:50}),e.on("agent_end",async(n,t)=>{let r=null,s=null;try{r=Wn(n,t),s=Vn(n,t)}catch(o){O("agent_end","context",o,{runId:s,sessionKey:r});return}try{pr({runId:s,sessionKey:r})}catch(o){O("agent_end","route_origin_cleanup",o,{runId:s,sessionKey:r})}if(!r){u("[xmtp_prompt_user:queue] agent_end ignored: missing sessionKey");return}try{kn(r)}catch(o){O("agent_end","prompt_user_ended",o,{runId:s,sessionKey:r})}}),e.registerService({id:"okx-a2a:core",start:async()=>{u("[okx-a2a:service] okx-a2a:core starting (multi-identity mode); initializing communication identities..."),W=Date.now(),Jo(),f.info(a.GATEWAY_STARTED,{onchainosAgentId:"*",pid:String(process.pid),pluginId:x.id,pluginVersion:x.version,nodeVersion:process.version,startedAt:String(W)}),pn(),zo(),Y&&Y(),Y=$r(),u("[okx-a2a:service] OpenClaw lightweight gateway initialized; node daemon owns XMTP receive/send/agent sync.")},stop:async()=>{Y&&(Y(),Y=void 0),yn(),u("[okx-a2a:service] okx-a2a:core stopped");let n=Date.now();f.info(a.GATEWAY_STOPPED,{onchainosAgentId:"*",pid:String(process.pid),pluginId:x.id,pluginVersion:x.version,stoppedAt:String(n),uptimeMs:W?String(n-W):"unknown"}),W=void 0}})}},ei=x;
30
30
  if(module.exports&&module.exports.__esModule&&module.exports.default){module.exports=module.exports.default;}
@@ -2,7 +2,7 @@
2
2
  "id": "okx-a2a",
3
3
  "name": "OKX A2A",
4
4
  "description": "E2E encrypted wallet-to-agent communication via A2A protocol",
5
- "version": "0.2.2",
5
+ "version": "0.2.3",
6
6
  "activation": {
7
7
  "onStartup": true
8
8
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@okxweb3/a2a-openclaw",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "OpenClaw plugin for E2E encrypted agent-to-agent communication via XMTP",
5
5
  "main": "dist/index.js",
6
6
  "files": [