@okxweb3/a2a-openclaw 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  var __importMetaUrl=require('url').pathToFileURL(__filename).href;
2
- "use strict";var vr=Object.create;var _e=Object.defineProperty;var Pr=Object.getOwnPropertyDescriptor;var xr=Object.getOwnPropertyNames;var Lr=Object.getPrototypeOf,Ur=Object.prototype.hasOwnProperty;var y=(e,n)=>()=>(e&&(n=e(e=0)),n);var Ie=(e,n)=>{for(var t in n)_e(e,t,{get:n[t],enumerable:!0})},Qn=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of xr(n))!Ur.call(e,s)&&s!==t&&_e(e,s,{get:()=>n[s],enumerable:!(r=Pr(n,s))||r.enumerable});return e};var Mr=(e,n,t)=>(t=e!=null?vr(Lr(e)):{},Qn(n||!e||!e.__esModule?_e(t,"default",{value:e,enumerable:!0}):t,e)),$r=e=>Qn(_e({},"__esModule",{value:!0}),e);function Gr(e=new Date){return e.toISOString()}function Zn(e){return[`[${Gr()}]`,...e]}function u(...e){console.error(...Zn(e))}function et(...e){console.warn(...Zn(e))}var I=y(()=>{"use strict"});function nt(e){Xe=e}function D(){if(!Xe)throw new Error("[xmtp] PluginRuntime not initialized \u2014 ensure setXmtpRuntime is called in register()");return Xe}var Xe,z=y(()=>{"use strict";Xe=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 J(e){return typeof e=="string"&&e.trim().length>0}function rt(e){let n=J(e.messageId)?e.messageId.trim():"";if(n&&jr.test(n))return n;let t=[n,e.jobId,e.sessionKey,e.attentionId].map(s=>J(s)?s.trim():"");if(t.every(s=>s===""))return M;let r=(0,tt.createHash)("sha256").update(t.join("|")).digest("hex");return`${Fr}${r.slice(0,Br)}`}function st(e){if(!J(e))return{...Ye};let[n,...t]=e.trim().split("-"),r=n.split(".");if(r.length<3)return{...Ye};let[s,o,i]=r.map(d=>Number(d));return[s,o,i].every(d=>Number.isInteger(d)&&d>=0)?{releaseBase:n,releaseChannel:Xr(t[0]),releaseCode:s*qr+o*Hr+i}:{...Ye}}function Xr(e){if(!J(e))return"release";let n=e.toLowerCase().replace(/[^a-z0-9]/g,"");return n?n.startsWith("beta")?"beta":n:"release"}function Q(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])=>(J(s)&&(t[r]=s.trim()),t),{})}function he(e){if(typeof e!="string")return;let n=e.trim();if(!(!n||n===M||n==="*"))return n}function Ae(...e){return e.map(he).find(n=>!!n)}function We(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 tt,jr,Fr,Br,qr,Hr,M,Ye,Te=y(()=>{"use strict";tt=require("node:crypto"),jr=/^[0-9a-f]{16,}$/i,Fr="dlv",Br=24,qr=1e6,Hr=1e3,M="unknown";Ye={releaseBase:M,releaseChannel:M,releaseCode:0}});function Z(){return $||(process.env.OKX_AGENT_TASK_HOME?($=Re(process.env.OKX_AGENT_TASK_HOME),$):($=Re((0,we.join)(Wr(),".okx-agent-task")),$))}function Re(e){return Yr(e)}function Yr(e){(0,Ne.mkdirSync)(e,{recursive:!0,mode:ot});try{(0,Ne.chmodSync)(e,ot)}catch(n){let t=n.code;if(t!=="EPERM"&&t!=="EACCES")throw n}return e}function Wr(){try{let e=(0,it.homedir)();if(e)return e}catch(e){}return(0,we.resolve)(process.cwd())}var it,we,Ne,$,ot,Ve=y(()=>{"use strict";it=require("node:os"),we=require("node:path"),Ne=require("node:fs"),$=null,ot=448});function ze(e,n,t){if(zr.has(n))try{let r=Z(),s=(0,b.join)(r,"xmtp-tests"),o=(0,b.join)(s,"active.json");if(!(0,G.existsSync)(o))return;let i=JSON.parse((0,G.readFileSync)(o,"utf8")),d=typeof i.runId=="string"?i.runId:"";if(!Vr.test(d))return;let c=(0,b.resolve)(s,d),l=`${(0,b.resolve)(s)}${b.sep}`;if(!c.startsWith(l))return;(0,G.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 G,b,Vr,zr,at=y(()=>{"use strict";G=require("node:fs"),b=require("node:path");Ve();Vr=/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/,zr=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 Et(e){return e instanceof Error?e:void 0}function Je(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,Jr)}function dt(e){if(typeof e!="string")return;let n=Je(e.trim().split(/\s+/,1)[0])?.toLowerCase();return n&&es.has(n)?n:void 0}function ct(e){let n=Je(e)?.toUpperCase();return n&&Zr.has(n)?n:void 0}function ut(e){return ct(e?.code)??ct(e?.errno)}function lt(e,n){let t=n?.toUpperCase(),r=e?.name.toLowerCase()??"",s=e?.message.toLowerCase()??"";return t&&gt.has(t)?"resource_exhausted":t&&ft.has(t)?"connection_interrupted":t&&pt.has(t)?"network_unavailable":t&&yt.has(t)?"timeout":t&&mt.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 ns(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 ts(e){let n=[],t=new Set,r=e;for(;r&&n.length<Qr&&!t.has(r);)n.push(r),t.add(r),r=Et(r.cause);return n}function _t(e,n,t){let r=Et(n),s={};if(r&&(s.errorName=r.name,s.errorMessageLength=String(r.message.length)),!r||e===a.AGENT_STREAM_ERROR)return s;let o=ts(r),i=o[0],d=o.length>1?o[o.length-1]:void 0,c=Je(t.exitCode),l=ut(i),g=lt(i,l),p=dt(i.syscall),_=ut(d),U=d?lt(d,_):void 0,He=dt(d?.syscall),Wn=g==="unknown"&&U?U:g,Vn=Wn==="unknown"&&c&&c!=="0"?"process_exit":Wn,zn=l??_,Jn=p??He;return{...s,errorCategory:Vn,errorRetryability:ns(Vn),errorCauseDepth:String(Math.max(0,o.length-1)),...zn?{errorCode:zn}:{},...Jn?{errorSyscall:Jn}:{},...d?{causeErrorMessageLength:String(d.message.length),causeErrorCategory:U??"unknown",..._?{causeErrorCode:_}:{},...He?{causeErrorSyscall:He}:{}}:{}}}var Jr,Qr,gt,ft,pt,yt,mt,Zr,es,It=y(()=>{"use strict";Se();Jr=64,Qr=4,gt=new Set(["EAGAIN","EMFILE","ENFILE","ENOMEM"]),ft=new Set(["ECONNRESET","EPIPE"]),pt=new Set(["EAI_AGAIN","ECONNREFUSED","EHOSTUNREACH","ENETDOWN","ENETUNREACH","ENOTFOUND"]),yt=new Set(["ETIMEDOUT","ESOCKETTIMEDOUT"]),mt=new Set(["EACCES","EPERM"]),Zr=new Set([...gt,...ft,...pt,...yt,...mt,"ABORT_ERR","ENOENT"]),es=new Set(["access","bind","close","connect","getaddrinfo","kill","listen","mkdir","open","read","readdir","readlink","rename","rmdir","spawn","stat","unlink","write"])});function ds(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,Tt,St,At,rs,ss,os,is,as,Oe,ht,De,Qe,f,Rt,wt,K=y(()=>{"use strict";I();m=Mr(require("@sentry/node")),Tt=require("node:crypto");Se();Te();at();It();Se();Te();St=(0,Tt.randomUUID)(),At=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"]),rs=["accesstoken","apikey","authorization","authtoken","content","credential","filepath","logpath","outputpath","password","payload","privatekey","prompt","rawevent","rawtext","refreshtoken","requestbody","responsebody","secret","stderr","stdout","token","tooloutput"],ss=new Set(["onchainosagentlistresultjson","onchainosagentlistdiagnostictext","systemconfigjson"]),os=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"]),is=["eventName","errorCategory","errorCode","errorSyscall","cacheName","component","method","operation","phase","reason","code","provider","type","kind","status","subcommand"],as=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,ht=128,De={},Qe=class e{static instance;initialized=!1;buffer=[];constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}init(n){if(this.initialized){et("[logger] Already initialized, skipping.");return}try{De=st(n.release),m.init({dsn:n.dsn,release:n.release,environment:n.environment,maxBreadcrumbs:0,beforeBreadcrumb:()=>null,beforeSend:r=>ds(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(We({flowId:St,...De,...t??{}}));if(ze("info",n,r),!!as.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(We({flowId:St,...De,...r??{}}));if(ze("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=_t(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 At.has(t)||At.has(r)?!0:e.isSafeMetricKey(r)?!1:rs.some(s=>r.includes(s))}static isSafeMetricKey(n){return/(bytes|count|length|ms|size)$/.test(n)}static safeValueForKey(n,t){return typeof t=="string"&&ss.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<=ht?t:`${t.slice(0,ht)}...`}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))os.has(i)&&n.setTag(e.normalizeTagKey(i),e.tagValue(d));let o=["a2a",t];for(let i of is){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=Qe.getInstance(),Rt=e=>f.init(e),wt=()=>f.shutdown()});function us(e=Z()){return(0,Ot.join)(e,"openclaw-gateway.json")}function Dt(e,n=Z()){let t=Re(n),r=us(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,k.writeFileSync)(s,`${JSON.stringify(o,null,2)}
4
- `,{encoding:"utf8",mode:384});try{(0,k.chmodSync)(s,384)}catch{}(0,k.renameSync)(s,r);try{(0,k.chmodSync)(r,384)}catch{}return r}var k,Ot,bt=y(()=>{"use strict";k=require("node:fs"),Ot=require("node:path");Ve()});function re(e){return e.includes(ne)||e.includes(`:${te}:`)}function be(e){if(!(!e||e==="direct"||e==="@direct"))return e.startsWith("telegram:")||e.startsWith("@")?e:`telegram:${e}`}function ee(e){if(typeof e=="number"&&Number.isFinite(e))return String(Math.trunc(e));if(typeof e=="string")return e.trim()||void 0}function kt(e){if(e.length!==0)return e[0]==="topic"?ee(e[1]):e[0]==="thread"?e.length>=3?ee(e.slice(2).join(":")):ee(e[1]):ee(e[0])}function Ze(e,n){return!e||!n||!e.startsWith("telegram:")||/:topic:\d+$/.test(e)?e:`${e}:topic:${n}`}function ls(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=kt(s.slice(o+2));return{to:Ze(be(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=kt(s.slice(i+2));return{to:Ze(be(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:be(s[1]),accountId:s[0]};if(s.length===1)return{to:be(s[0]),accountId:void 0}}return{to:t[4],accountId:void 0}}function Ct(e,n){return typeof e!="string"||e==="direct"||e==="@direct"?n:e}function Kt(e){return gs[e]??e}function vt(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 fs(e){if(e==="agent:main")return"main";let n=e.split(":");return n.length<4||n[0]!=="agent"||!n[1]||!n[2]||re(e)||n[2]==="backup"?null:n[2]}function en(e,n){if(!xt(n))return null;let t=n,r=t.deliveryContext?.channel??t.lastChannel??t.origin?.provider??fs(e);if(!r)return null;let s=Kt(r),o=ls(e,s),i=Ct(t.deliveryContext?.to,o.to)??Ct(t.lastTo,o.to)??o.to,d=t.deliveryContext?.accountId??o.accountId,c=ee(t.deliveryContext?.threadId??t.origin?.threadId??t.lastThreadId??o.threadId);return{channel:s,target:{sessionKey:e,to:s==="telegram"?Ze(i,c):i,accountId:d,threadId:c,updatedAt:t.lastInteractionAt??t.updatedAt??Date.now()}}}function Pt(e){let n=new Map,t=new Map;for(let[r,s]of Object.entries(e)){if(re(r)||!xt(s))continue;let o=s;if(o.spawnedBy||o.subagentRole)continue;let i=en(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 xt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var ne,te,gs,Lt=y(()=>{"use strict";I();ne="okx-xmtp",te="okx-a2a";gs={dashboard:"webchat"}});function Mt(e){if(re(e))return null;try{let n=D(),t=n.agent.session.resolveStorePath(void 0,{agentId:"main"}),s=n.agent.session.loadSessionStore(t,{skipCache:!0});for(let o of vt(e)){let i=en(o,s[o]);if(i)return i}return null}catch(n){return $t("find_user_session_target",n),null}}function Ut(e){return e.toLowerCase().startsWith("0x")}function ps(e){if(typeof e=="string")return`${ne}:${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`${ne}:${n.toString()}`}function nn(e){let n=`${ne}:`,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:!Ut(i)&&(d==="_"||!Ut(d))?{format:"agent",myAgentId:i,toAgentId:d,jobId:c,xmtpGroupId:l??""}:{format:"address",myXmtpAddress:i,toXmtpAddress:d,jobId:c,xmtpGroupId:l??""}}function se(e){if(!e)return"";let n=nn(e);return n?.jobId?n.jobId:/(?:^|:)backup:([^:&]+)/.exec(e)?.[1]??""}function ie(e){let n=e.taskId?.trim()||se(e.scopeKey)||se(e.sessionKey);return n?{taskId:n}:{}}function $t(e,n){u(`[okx-a2a:session] session-store lookup failed; continuing phase=${e} error=${n instanceof Error?n.message:String(n)}`)}function ys(e){let n=typeof e=="string"?e:ps(e);return(0,oe.buildAgentSessionKey)({agentId:"main",channel:te,peer:{kind:"group",id:n}})}function Gt(){let t=D().config.loadConfig().agents?.list;if(t&&t.length>0){let r=t.find(s=>s.id==="main");return r?r.id:t[0].id}return"main"}function jt(){return(0,oe.buildAgentSessionKey)({agentId:Gt(),channel:te,peer:{kind:"group",id:"backup"}})}function ms(e){return(0,oe.buildAgentSessionKey)({agentId:Gt(),channel:te,peer:{kind:"group",id:`backup:${e}`}})}function v(){try{let e=D(),n=e.agent.session.resolveStorePath(void 0,{agentId:"main"}),t=e.agent.session.loadSessionStore(n,{skipCache:!0});return Pt(t)}catch(e){return $t("find_latest_user_sessions",e),new Map}}function Ft(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=Ss(s);if(o){n.add(ms(o));continue}let i=Bt(s);if(i){r.push(i);continue}let d=nn(s);if(d){r.push(Is(d));continue}n.add(ys(s))}for(let s of Es())for(let o of r)if(_s(s,o)){n.add(s);break}return[...n].sort()}function Es(){let e=D(),n=e.agent.session.resolveStorePath(void 0,{agentId:"main"}),t=e.agent.session.loadSessionStore(n,{skipCache:!0});return Object.keys(t).filter(re)}function _s(e,n){let t=nn(e);if(t)return As(t,n);let r=Bt(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:se(e)===n.jobId}function Is(e){return"myAgentId"in e?{myAgentId:e.myAgentId,toAgentId:e.toAgentId,jobId:e.jobId}:{myXmtpAddress:e.myXmtpAddress,toXmtpAddress:e.toXmtpAddress,jobId:e.jobId}}function Bt(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 Ss(e){return e.startsWith("backup:")?ke(e.slice(7)):null}function As(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 oe,j=y(()=>{"use strict";I();oe=require("openclaw/plugin-sdk/routing");z();Lt()});function qt(e){return e.reduce((n,[t,r])=>(r!=null&&(n[t]=String(r)),n),{})}function Ht(e){let n=rt({jobId:e.jobId,sessionKey:e.sessionKey});return n===M?null:n}function C(e){return{...Q({checkpoint:e.checkpoint,outcome:e.outcome,transport:"user_channel",eventFamily:"user_channel",deliveryId:Ht(e)}),...qt([["component",hs],["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 Ce(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{...Q({checkpoint:r?`${ws}${r}`:null,outcome:n,transport:"gateway_rpc",eventFamily:"lifecycle"}),...t}}function T(e){let n=Object.entries({component:Ts,operation:Rs,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{...Q({outcome:Ds[e.checkpoint],transport:"user_channel",eventFamily:"user_channel",deliveryId:Ht({jobId:e.taskId,sessionKey:e.sessionKey})}),...n.reduce((t,[r,s])=>(t[r]=String(s),t),{})}}function tn(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 Xt(e){return{...Q({checkpoint:Ns,outcome:tn(e).outcome,transport:"gateway_rpc",eventFamily:"outbound"}),...qt([["onchainosAgentId","*"],["source",Os],["deliveredCount",e.delivered],["failedCount",e.failed],["abandonedCount",e.abandoned],["batchSize",e.batchSize]])}}var hs,Ts,Rs,ws,Ns,Os,Ds,ae=y(()=>{"use strict";Te();hs="openclaw_user_dispatch",Ts="openclaw_prompt_user_queue",Rs="xmtp_prompt_user",ws="gateway/",Ns="outbound/outbox_drained",Os="gateway_outbox_drain";Ds={fallback_scheduled:"pending",queued:"pending",run_pending:"pending",dispatch_started:"pending",dispatch_completed:"success",run_completed:"success",dispatch_failed:"failed",fallback_fired:"timeout"}});var Zt={};Ie(Zt,{callChatInject:()=>ce,callGateway:()=>A,callSessionsCreate:()=>de,callSessionsDelete:()=>gn,callSessionsSend:()=>fn,formatPairingErrorHint:()=>Pe,gatewayExtra:()=>Ce,onGatewayEvent:()=>dn,resolveGatewayRuntimeConfig:()=>cn,stopGatewayClient:()=>ln,syncGatewayConfigForNodeDaemon:()=>un});function rn(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 Ks(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:!!rn(e)}:{type:typeof e,configured:!0})}function sn(e){if(!e||typeof e!="object")return e??null;if(Array.isArray(e))return e.map(t=>sn(t));let n={};for(let[t,r]of Object.entries(e)){if(/password|token|secret/i.test(t)){n[t]=Ks(r);continue}n[t]=sn(r)}return n}function vs(e){try{return JSON.stringify(e)}catch{return"[unserializable]"}}function Ps(e){let n=e.params;if(!n||typeof n!="object"||Array.isArray(n))return ie({taskId:e.taskId});let t=n;return ie({taskId:e.taskId,sessionKey:typeof t.sessionKey=="string"?t.sessionKey:typeof t.key=="string"?t.key:""})}function S(e,n={}){let t=Ce({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 B(e,n,t={},r=a.GATEWAY_CONNECT_FAILED){let s=Ce({phase:e,component:"openclaw_gateway",...t},"failed");u(`[gateway] ${e}:`,n),f.error(r,n instanceof Error?n:new Error(String(n)),s)}function xs(e){for(let n of on)try{n(e)}catch(t){u("[gateway] event handler failed:",t)}}function dn(e){return on.add(e),()=>{on.delete(e)}}function Wt(){S("ready_gate_reset",{hasSharedClient:!!w,hasConnected:R}),F=new Promise((e,n)=>{Ke=e,ve=n})}function Vt(e,n,t){if(w!==e){S(`${n}_skip_clear_noncurrent`,t);return}try{e.stop?.()}catch(r){B(`${n}_stop_failed`,r,t)}w=null,R=!1,F=null,Ke=null,ve=null,S(`${n}_cleared_client`,t)}function Ls(){if(w)return S("reuse_client",{hasConnected:R,hasReadyPromise:!!F}),{client:w,ready:F};let e=cn(),{url:n,password:t,token:r}=e,s=(0,an.randomUUID)(),o=++Cs;Wt(),S("init_client",{clientSeq:o,instanceId:s,url:n,hasGatewayConfig:!!e.rawGatewayConfig,gatewayConfig:vs(sn(e.rawGatewayConfig)),passwordConfigured:!!t,tokenConfigured:!!r,scopes:Yt.join(",")});let i=new Qt.GatewayClient({url:n,password:t,token:r,instanceId:s,clientName:"gateway-client",clientDisplayName:"okx-a2a-plugin",mode:"backend",role:"operator",scopes:[...Yt],onHelloOk:()=>{S("hello_ok",{clientSeq:o,instanceId:s,url:n}),R=!0,Ke?.()},onEvent:xs,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,Wt();return}Vt(i,"close_before_connect",{clientSeq:o,instanceId:s,url:n,code:d,reason:c||"no-reason"})},onConnectError:d=>{let c=d;if(c?.retryable){B("connect_error_retryable",d,{clientSeq:o,instanceId:s,url:n,retryable:"true",reason:c?.details?.reason??"retryable",code:c?.gatewayCode??c?.details?.code});return}B("connect_error",d,{clientSeq:o,instanceId:s,url:n,retryable:"false",code:c?.gatewayCode??c?.details?.code}),ve?.(d instanceof Error?d:new Error(String(d))),Vt(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:F}}function cn(){let n=D().config.loadConfig().gateway;return{url:`ws://127.0.0.1:${zt(process.env.OPENCLAW_GATEWAY_PORT)??zt(n?.port)??ks}`,password:rn(n?.auth?.password),token:rn(n?.auth?.token),rawGatewayConfig:n}}function zt(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 un(){let e=cn();try{let n=Dt({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 B("sync_node_gateway_config_failed",n,{url:e.url,passwordConfigured:!!e.password,tokenConfigured:!!e.token},a.GATEWAY_CONNECT_FAILED),null}}function ln(){if(w){try{w.stop()}catch{}w=null,F=null,Ke=null,ve=null,R=!1}}function Pe(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??bs,t=Date.now(),r=Ps(e);S("request_start",{method:e.method,timeoutMs:n,hasSharedClient:!!w,hasConnected:R,...r});let{client:s,ready:o}=Ls();try{await o}catch(d){let c=Date.now()-t;throw B("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??""));B("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=Pe(d);if(g){let p=d?.message??String(d);try{d.message=`${p}
5
- ${g}`}catch{}}throw d}}async function de(e){return A({method:"sessions.create",params:e})}async function gn(e){return A({method:"sessions.delete",params:e})}async function fn(e){let n=e.idempotencyKey??(0,an.randomUUID)(),t={key:e.key,message:e.message,idempotencyKey:n};try{let r=await A({method:"sessions.send",params:t});return{runId:Jt(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 de({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:Jt(i),raw:i}}throw r}}function Jt(e){if(!e||typeof e!="object")return;let n=e.runId;return typeof n=="string"&&n.trim()?n:void 0}async function ce(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 de({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 Qt,an,bs,ks,Yt,Cs,w,F,Ke,ve,R,on,q=y(()=>{"use strict";I();Qt=require("openclaw/plugin-sdk/gateway-runtime"),an=require("node:crypto");z();K();bt();j();ae();bs=2e4,ks=18789,Yt=["operator.admin"],Cs=0;w=null,F=null,Ke=null,ve=null,R=!1,on=new Set});function rr(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;yn(n);let r=e.params??{},s=zs(r.env)?r.env:{};return{...r,env:{...s,[$s]:"openclaw",[Gs]:"openclaw-gateway",[js]:"1",[Us]:n??[...t][0],[Ms]:JSON.stringify([...t])}}}function sr(e){let n=e.runId?.trim(),t=e.sessionKey?.trim();if(!t||!fe(t))return!1;mn();let r=Ws([t,...e.routeSessionKeys??[]]);return Hs(t,r),n&&ge.set(n,{sessionKeys:r,updatedAt:Date.now()}),!0}function or(e){let n=typeof e=="string"?e.trim():e?.runId?.trim(),t=typeof e=="string"?null:e?.sessionKey?.trim();n&&ge.delete(n),t&&fe(t)&&Xs(t)}function xe(e){let n=new Set,t=e.sessionKey?.trim();t&&fe(t)&&n.add(t);let r=e.runId?.trim();if(r){mn(e.now??Date.now());let s=ge.get(r);for(let o of s?.sessionKeys??[])n.add(o)}else if(!t||!fe(t))for(let s of Ys(e.now??Date.now()))n.add(s);return[...n]}function yn(e){let n=e?.trim();!n||!qs(n)||(ue={sessionKey:n,updatedAt:Date.now()})}function ir(e=Date.now()){return ue?e-ue.updatedAt>Fs?(ue=null,null):ue.sessionKey:null}function qs(e){return e.startsWith("job:")||e.startsWith("backup:")||/(?:^|[?&:])job=([^:&]+)/.test(e)}function fe(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"&&!Bs.has(t))}function mn(e=Date.now()){for(let[n,t]of ge)e-t.updatedAt>nr&&ge.delete(n);for(let[n,t]of N)e-t.updatedAt>nr&&N.delete(n)}function Hs(e,n){let t=N.get(e);N.set(e,{count:(t?.count??0)+1,updatedAt:Date.now(),routeSessionKeys:n}),pn()}function Xs(e){let n=N.get(e);if(n){if(n.count<=1){N.delete(e),pn();return}N.set(e,{count:n.count-1,updatedAt:Date.now(),routeSessionKeys:n.routeSessionKeys}),pn()}}function Ys(e=Date.now()){mn(e);let n=[...N.keys()];return n.length!==1?[]:N.get(n[0])?.routeSessionKeys??[]}function Ws(e){let n=new Set;for(let t of e){let r=t?.trim();r&&fe(r)&&n.add(r)}return[...n]}function pn(){try{let e=Vs();(0,H.mkdirSync)((0,le.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 Vs(e=process.env){let n=e.OKX_AGENT_TASK_HOME?.trim()||(0,le.join)((0,tr.homedir)(),".okx-agent-task");return(0,le.join)(n,"run","gateway-route-origins.json")}function zs(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var H,tr,le,Us,Ms,$s,Gs,js,Fs,nr,Bs,ue,ge,N,En=y(()=>{"use strict";H=require("node:fs"),tr=require("node:os"),le=require("node:path"),Us="OKX_A2A_CURRENT_GATEWAY_SESSION_KEY",Ms="OKX_A2A_CURRENT_GATEWAY_SESSION_KEYS",$s="OKX_A2A_GATEWAY_PROVIDER",Gs="OKX_A2A_RUNTIME_CONTEXT",js="OKX_A2A_IN_GATEWAY",Fs=12e4,nr=30*6e4,Bs=new Set(["heartbeat","cron","webhook","voice"]),ue=null,ge=new Map,N=new Map});function Qs(e=process.env){return e.OKX_AGENT_TASK_HOME?.trim()||(0,In.join)((0,dr.homedir)(),".okx-agent-task")}function Zs(e=process.env){return e.OKX_A2A_SESSION_STORE_DB_PATH?.trim()||(0,In.join)(Qs(e),"sqlite","session-store.sqlite")}function Le(e){let n=h(e.jobId)??se(e.sessionKey);return n?eo(no(n,e.dbPath??Zs())):[]}function eo(e){let n=new Set,t=[];for(let r of e){let s=_n(h(r.gatewaySessionKey)??h(r.sessionKey)??""),o=so(s);!s||!o||n.has(o)||(n.add(o),t.push(s))}return t}function no(e,n){if(!(0,ar.existsSync)(n))return[];let{DatabaseSync:t}=to(),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"?[]:ro(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 to(){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 ro(e){try{let n=JSON.parse(e);if(!Array.isArray(n))return[];let t=[];for(let r of n){if(!io(r))continue;let s=h(typeof r.platform=="string"?r.platform:null),o=_n(h(typeof r.sessionKey=="string"?r.sessionKey:null)??"");if(!s||!o)continue;let i=_n(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 so(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"||Js.has(r)?null:r}function _n(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=oo(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 oo(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 io(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function h(e){let n=e?.trim();return n||null}var ar,dr,In,Js,Sn=y(()=>{"use strict";ar=require("node:fs"),dr=require("node:os"),In=require("node:path");j();Js=new Set(["heartbeat","cron","webhook","voice"])});function Tn(e){let n=P(e.jobId)??go([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=>co(i)).filter(i=>!!i);if(t.length===0)return[];let r=e.dbPath??po(),{DatabaseSync:s}=yo(),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 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(`
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,20 +11,20 @@ ${g}`}catch{}}throw d}}async function de(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=uo(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 co(e){let n=ur(P(e)??"");if(!n)return null;let t=lr(n);if(!t)return null;let r=lo(n);return{platform:t,sessionKey:n,gatewaySessionKey:n,...r.chatId?{chatId:r.chatId}:{},...r.threadId?{threadId:r.threadId}:{},updatedAt:new Date().toISOString()}}function uo(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(!mo(r))continue;let s=ur(P(typeof r.gatewaySessionKey=="string"?r.gatewaySessionKey:null)??P(typeof r.sessionKey=="string"?r.sessionKey:null)??""),o=lr(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 lo(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=An(n.slice(5));return{...n[4]?{chatId:n[4]}:{},...s?{threadId:s}:{}}}if(t==="telegram"&&r==="dm"){let s=An(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 ur(e){let n=P(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=An(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 An(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 go(e){for(let n of e){let t=P(n);if(!t)continue;let r=/\b0x[a-fA-F0-9]{64}\b/.exec(t);if(r?.[0])return r[0]}return null}function lr(e){let n=P(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"||ao.has(r)?null:r}function fo(e=process.env){return e.OKX_AGENT_TASK_HOME?.trim()||(0,hn.join)((0,cr.homedir)(),".okx-agent-task")}function po(e=process.env){return e.OKX_A2A_SESSION_STORE_DB_PATH?.trim()||(0,hn.join)(fo(e),"sqlite","session-store.sqlite")}function yo(){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 mo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function P(e){let n=e?.trim();return n||null}var cr,hn,ao,gr=y(()=>{"use strict";cr=require("node:os"),hn=require("node:path"),ao=new Set(["heartbeat","cron","webhook","voice"])});var Me={};Ie(Me,{isPromptUserSessionRunning:()=>Eo,markPromptUserSessionEnded:()=>On,markPromptUserSessionRunning:()=>Nn,promptUserSentryExtra:()=>T,queuePromptUserAction:()=>_o});function x(e){let n=fr.get(e);return n||(n={running:!1,processing:!1,queue:[]},fr.set(e,n)),n}function Rn(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 wn(e,n){Rn(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=x(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"})),ye(e,"fallback_timeout")},r)}async function ye(e,n){let t=x(e);if(t.processing)return;let r=t.queue.shift();if(!r){Rn(t,e,"empty_queue"),u(`[xmtp_prompt_user:queue] dispatch skipped empty sessionKey=${e} reason=${n}`);return}Rn(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 Dn({...r,onRunStarted:o=>{let i=Ue.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}`),Ue.delete(o);return}pe.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||pe.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`),wn(e,t);return}u(`[xmtp_prompt_user:queue] queue continues sessionKey=${e} queued=${t.queue.length} running=0`),ye(e,"session_idle")}function Eo(e){return x(e).running}async function _o(e){let n=e.target.sessionKey,t=x(n);return t.queue.push({...e,deadlineAt:Date.now()+yr}),t.running||t.processing||t.queue.length>1?(t.queue.length===1&&wn(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 ye(n,"session_idle"),{status:"dispatched",size:t.queue.length})}function Nn(e){let n=x(e);n.running=!0;let t=n.queue[0];t&&(t.deadlineAt=Date.now()+yr,u(`[xmtp_prompt_user:queue] fallback reset sessionKey=${e} channel=${t.channel} queued=${n.queue.length}`),wn(e,n)),u(`[xmtp_prompt_user:queue] agent_start sessionKey=${e} queued=${n.queue.length}`)}function On(e){let n=x(e),t=Io(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&&ye(e,"agent_end")}function Io(e){let n=[];for(let[t,r]of pe)r.sessionKey===e&&n.push(t);return n}function pr(e,n,t){Ue.set(e,{state:n,sessionKey:t,completedAt:Date.now()}),setTimeout(()=>{Ue.delete(e)},60*1e3)}function So(e,n,t,r,s){let o=x(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&&ye(e,`run_${t}`)}var yr,fr,pe,Ue,me=y(()=>{"use strict";I();Ee();q();K();ae();yr=300*1e3,fr=new Map,pe=new Map,Ue=new Map;dn(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=pe.get(r);if(!o){(s==="final"||s==="error")&&pr(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")&&(pe.delete(r),pr(r,s,String(t.sessionKey??"")),So(o.sessionKey,r,s,Date.now()-o.startedAt,o.taskId))})});var Fn={};Ie(Fn,{AgentMessageDirection:()=>Ar,INJECT_ONLY_CHANNELS:()=>Be,NON_DELIVERY_CHANNELS:()=>Y,buildAgentMessageNotice:()=>hr,buildSystemMessageNotice:()=>Tr,buildUserDispatchExtra:()=>C,dispatchPromptToUserSession:()=>Dn,dispatchToUser:()=>vn,dispatchUserToLatestSessions:()=>Pn,dispatchUserToRoutedSessions:()=>Ln,dispatchUserToSession:()=>Un,notifyAgentMessageToUser:()=>wo,notifySystemMessageToUser:()=>Oo,promptUserToLatestSessions:()=>Mn,promptUserToRoutedSessions:()=>$n,promptUserToSession:()=>Gn,sendLlmToLatestUserSessions:()=>jn});function ho(e){return e?e.length<=mr+Er+1?e:`${e.slice(0,mr)}\u2026${e.slice(-Er)}`:""}function To(e){return e.length<=_r+Ir+bn.length?e:`${e.slice(0,_r)}${bn}${e.slice(-Ir)}`}function Sr(e){return e.name?e.agentId?`${e.name}#${e.agentId}`:e.name:e.walletAddress?ho(e.walletAddress):"unknown"}function Ro(e){let n=e.split(`
15
- `);if(n.length<=$e)return e;let t=n.slice(0,$e);return t[$e-1]=`${t[$e-1]}${bn}`,t.join(`
16
- `)}function hr(e){let n=Sr(e.sender),t=Sr(e.receiver),r=e.direction==="outbound"?`${n} (you) \u2192 ${t}`:`${n} \u2192 ${t} (you)`;return[`${Ao[e.direction]} ${r}`,`Job: ${To(e.jobId)}`,Fe,`\u300C${Ro(e.content)}\u300D`,Fe].join(`
17
- `)}function wo(e){let n=hr(e),t="[notifyAgentMessageToUser]";vn(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 No(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 Tr(e){return["System Message",Fe,"```json",No(e),"```",Fe].join(`
18
- `)}function Oo(e){let n=Tr(e),t="[notifySystemMessageToUser]";vn(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 kn(e){let n=e.base?.trim();if(!n)return(0,X.randomUUID)();let t=(0,X.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 Cn(e){let n=Mt(e);return!n||Y.has(n.channel)?null:n}function Kn(e,n){let t=n.threadId?.trim();t&&(e.threadId=t)}async function Rr(e){let n=e.label?`[${e.label}] ${e.content}`:e.content;if(e.target.to&&!Be.has(e.channel)){let t={to:e.target.to,message:n,channel:e.channel,sessionKey:e.target.sessionKey,idempotencyKey:kn({base:e.idempotencyKey,purpose:"dispatch-user",channel:e.channel,sessionKey:e.target.sessionKey})};e.target.accountId&&(t.accountId=e.target.accountId),Kn(t,e.target),await A({method:"send",params:t});return}await ce({sessionKey:e.target.sessionKey,message:e.content,label:e.label})}async function Dn(e){let{channel:n,target:t,llmContent:r,userContent:s}=e,o=await fn({key:t.sessionKey,message:r,idempotencyKey:kn({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&&!Be.has(n)){let i={to:t.to,message:s,channel:n,sessionKey:t.sessionKey,idempotencyKey:kn({base:e.idempotencyKey,purpose:"prompt-user",channel:n,sessionKey:t.sessionKey})};return t.accountId&&(i.accountId=t.accountId),Kn(i,t),await A({method:"send",params:i}),{runId:o.runId}}return await ce({sessionKey:t.sessionKey,message:s}),{runId:o.runId}}async function vn(e,n){let r=qe({jobId:n?.jobId,currentSessionKey:n?.currentSessionKey})?.targets??v();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(!Y.has(c))try{if(l.to&&!Be.has(c)){let g={to:l.to,message:d,channel:c,sessionKey:l.sessionKey,idempotencyKey:(0,X.randomUUID)()};l.accountId&&(g.accountId=l.accountId),Kn(g,l),await A({method:"send",params:g})}else await ce({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 Pn(e){let n=qe({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}`),Ge(n.targets,e,n.failed);let t=wr({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}`),Ge(t.targets,e,t.failed);let r=await Ge(v(),e);return Nr(e.jobId,r.dispatched,[e.content]),r}function xn(e){let n=new Map,t=[];for(let r of e){let s=Cn(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 qe(e){let n=e.currentSessionKey?.trim()||ir(),t=Le({jobId:e.jobId,sessionKey:n});return t.length>0?xn(t):null}async function Ge(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(!Y.has(o))try{await Rr({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 Ln(e){let{targets:n,failed:t}=xn(e.sessionKeys);return Ge(n,{content:e.content,label:e.label,idempotencyKey:e.idempotencyKey},t)}async function Un(e){let n=Cn(e.sessionKey);if(!n)return{ok:!1,dispatched:[],failed:[{channel:"",sessionKey:e.sessionKey,error:"invalid user gateway session"}]};try{return await Rr({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 Mn(e){let{queuePromptUserAction:n}=await Promise.resolve().then(()=>(me(),Me)),t=qe({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}`),je(t.targets,e,t.failed,n);let r=wr({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}`),je(r.targets,e,r.failed,n);let s=await je(v(),e,[],n);return Nr(e.jobId,s.dispatched,[e.userContent,e.llmContent]),s}function wr(e){let n=xe({sessionKey:e.currentSessionKey});return n.length===0||Tn({jobId:e.jobId,contents:e.contents,sessionKeys:n}).length===0?null:qe({jobId:e.jobId,currentSessionKey:e.currentSessionKey})}function Nr(e,n,t){let r=n.map(s=>s.sessionKey).filter(Boolean);r.length!==0&&Tn({jobId:e,contents:t,sessionKeys:r})}async function je(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(!Y.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 $n(e){let{queuePromptUserAction:n}=await Promise.resolve().then(()=>(me(),Me)),{targets:t,failed:r}=xn(e.sessionKeys);return je(t,{llmContent:e.llmContent,userContent:e.userContent,idempotencyKey:e.idempotencyKey},r,n)}async function Gn(e){let{queuePromptUserAction:n}=await Promise.resolve().then(()=>(me(),Me)),t=Cn(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 jn(e,n){let t=v();if(t.size===0)return u("[sendLlmToLatestUserSessions] no latest user session found"),{dispatched:[],failed:[]};let r=[],s=[];for(let[o,i]of t)if(!Y.has(o))try{await D().subagent.run({sessionKey:i.sessionKey,message:e,deliver:!0,idempotencyKey:(0,X.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 X,Ar,Ao,Fe,mr,Er,_r,Ir,bn,$e,Y,Be,Ee=y(()=>{"use strict";I();X=require("node:crypto");q();j();En();Sn();gr();K();z();ae();Ar=(t=>(t.OUTBOUND="outbound",t.INBOUND="inbound",t))(Ar||{}),Ao={outbound:"\u{1F4E4} [Sent]",inbound:"\u{1F4E5} [Received]"},Fe="\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",mr=6,Er=4,_r=6,Ir=4,bn="...",$e=8;Y=new Set(["heartbeat","cron","webhook","voice"]),Be=new Set(["webchat","tui"])});var Xo={};Ie(Xo,{default:()=>Ho});module.exports=$r(Xo);I();z();I();K();var cs="main",Nt={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:()=>[cs]},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 wt()}}};I();q();j();K();var er=async e=>{let n=Ft(e),t=[];for(let r of n)await gn({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,...ie({sessionKey:r})});return{ok:!0,deleted:t.length,deletedSessionKeys:t,matched:n.length}};q();j();Ee();me();En();Sn();I();var Dr=require("node:os"),Bn=require("node:path"),br=require("node:fs");K();ae();var Do=15e3,bo=50,ko=1;function Co(e=process.env){return e.OKX_AGENT_TASK_HOME?.trim()||(0,Bn.join)((0,Dr.homedir)(),".okx-agent-task")}function Ko(e=process.env){return e.OKX_A2A_OUTBOX_DB_PATH?.trim()||(0,Bn.join)(Co(e),"sqlite","session-store.sqlite")}function vo(){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 Or(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 Po(e){let n=e.message_id??void 0;if(e.kind==="dispatch_user_latest"){let{dispatchUserToLatestSessions:s}=await Promise.resolve().then(()=>(Ee(),Fn)),o=await s({content:e.content,jobId:e.job_id,idempotencyKey:n});return Or(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(()=>(Ee(),Fn)),o=await s({userContent:e.content,llmContent:e.llm_content,jobId:e.job_id,idempotencyKey:n});return Or(e.kind,o)}let{callChatInject:t,callSessionsSend:r}=await Promise.resolve().then(()=>(q(),Zt));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 xo(e={}){let n=e.dbPath??Ko();if(!(0,br.existsSync)(n))return{delivered:0,failed:0,abandoned:0,skipped:!0};let{DatabaseSync:t}=vo(),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(`
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(`
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(`
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'
22
22
  ORDER BY created_at ASC, id ASC
23
23
  LIMIT ?
24
- `).all(e.limit??bo),i=0,d=0,c=0,l=e.deliver??Po;for(let g of o)try{let p=await l(g);if(!p.delivered)throw new Error(p.message??`${g.kind} did not deliver to any user session`);r.prepare("DELETE FROM pending_gateway_deliveries WHERE id = ?").run(g.id),i+=1,p.partial&&u(`[okx-a2a:outbox-drain] delivery partially delivered id=${g.id} kind=${g.kind}: ${p.message??""}`)}catch(p){d+=1;let _=p instanceof Error?p.message:String(p),U=g.attempts+1;g.attempts>=ko?(r.prepare("DELETE FROM pending_gateway_deliveries WHERE id = ?").run(g.id),c+=1,u(`[okx-a2a:outbox-drain] delivery abandoned id=${g.id} kind=${g.kind} attempts=${U}: ${_}`)):(r.prepare(`
24
+ `).all(e.limit??Mo),i=0,d=0,c=0,l=e.deliver??Bo;for(let g of o)try{let p=await l(g);if(!p.delivered)throw new Error(p.message??`${g.kind} did not deliver to any user session`);r.prepare("DELETE FROM pending_gateway_deliveries WHERE id = ?").run(g.id),i+=1,p.partial&&u(`[okx-a2a:outbox-drain] delivery partially delivered id=${g.id} kind=${g.kind}: ${p.message??""}`)}catch(p){d+=1;let _=p instanceof Error?p.message:String(p),L=g.attempts+1;g.attempts>=$o?(r.prepare("DELETE FROM pending_gateway_deliveries WHERE id = ?").run(g.id),c+=1,u(`[okx-a2a:outbox-drain] delivery abandoned id=${g.id} kind=${g.kind} attempts=${L}: ${_}`)):(r.prepare(`
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=${U}: ${_}`))}return tn({delivered:i,failed:d,abandoned:c}).shouldEmit&&f.info(a.SESSION_DISPATCHED,Xt({delivered:i,failed:d,abandoned:c,batchSize:o.length})),{delivered:i,failed:d,abandoned:c,skipped:!1}}finally{r.close()}}function kr(e={}){let n=e.intervalMs??Do,t=!1,r=async()=>{if(!t){t=!0;try{await xo({...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 Lo=process.env.SENTRY_ENV==="dev"?"dev":"prod";function Uo(e){return e?.trim().toLowerCase().replace(/[^a-z0-9_.:-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,128)||void 0}var Cr={projectName:"okx/openclaw-okx-a2a-extension",release:"0.2.1",environment:Lo,runtimeContainer:Uo(process.env.OKX_A2A_RUNTIME_CONTAINER)};var W,V,Mo="https://e20ff987c945887733de9ec6cca87aba@sentry.coinall.ltd/apmfe/70295";function $o(e){let n=e?.details?.requestId;return typeof n=="string"&&n.trim()?`openclaw devices approve ${n}`:"openclaw devices approve --latest"}function Go(e){let n=e?.details??{},t=Pe(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",$o(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 jo(){de({key:jt()}).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??"")}),jn(Go(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 Fo(){let e=process.env.OKX_A2A_SENTRY_DSN?.trim()||process.env.SENTRY_DSN?.trim()||Mo;Rt({dsn:e,...Cr,agentPlatform:"openclaw"})}function qn(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 Hn(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 Bo(e){let n=Kr(e),t=new Set([e]);for(let[r,s]of v())r&&r!==n&&s.sessionKey&&t.add(s.sessionKey);return[...t]}function Kr(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.1",o=r.sessionKey?Kr(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 Xn(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 Yn(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 qo(e,n){let t=e[n];return typeof t=="boolean"?t:void 0}var L={id:"okx-a2a",name:"OKX A2A Plugin",version:"0.2.1",register(e){nt(e.runtime),e.registerChannel({plugin:Nt}),e.registerGatewayMethod("okx-a2a.health",async({respond:n})=>{n(!0,{ok:!0,provider:"openclaw",pluginId:L.id,pluginVersion:L.version,startedAt:V??null})},{scope:"operator.admin"}),e.registerGatewayMethod("okx-a2a.dispatch_user",async({params:n,respond:t})=>{try{let r=Xn(n,"content"),s=E(n,"label"),o=E(n,"sessionKey"),i=Yn(n,"sessionKeys"),d=E(n,"jobId"),c=E(n,"currentSessionKey"),l=E(n,"idempotencyKey");t(!0,i?await Ln({sessionKeys:i,content:r,label:s,idempotencyKey:l}):o?await Un({sessionKey:o,content:r,label:s,idempotencyKey:l}):await Pn({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=Xn(n,"userContent"),s=Xn(n,"llmContent"),o=E(n,"sessionKey"),i=Yn(n,"sessionKeys"),d=E(n,"jobId"),c=E(n,"currentSessionKey"),l=E(n,"idempotencyKey");t(!0,i?await $n({sessionKeys:i,userContent:r,llmContent:s,idempotencyKey:l}):o?await Gn({sessionKey:o,userContent:r,llmContent:s,idempotencyKey:l}):await Mn({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=Yn(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=qo(n,"deleteTranscript");t(!0,await er({...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=qn(n,t),s=Hn(n,t);if(!r){u("[xmtp_prompt_user:queue] before_agent_run ignored: missing sessionKey");return}let o=[r];try{o=Bo(r)}catch(i){O("before_agent_run","route_discovery",i,{runId:s,sessionKey:r})}try{sr({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{Nn(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=qn(n,t),s=Hn(n,t)}catch(i){O("before_tool_call","context",i,{runId:s,sessionKey:r});return}try{yn(r)}catch(i){O("before_tool_call","remember_recent_session",i,{runId:s,sessionKey:r})}let o=r?[r]:[];try{o=[...new Set([...Le({sessionKey:r}),...xe({runId:s,sessionKey:r})])]}catch(i){O("before_tool_call","route_discovery",i,{runId:s,sessionKey:r})}try{let i=rr({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=qn(n,t),s=Hn(n,t)}catch(o){O("agent_end","context",o,{runId:s,sessionKey:r});return}try{or({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{On(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..."),V=Date.now(),Fo(),f.info(a.GATEWAY_STARTED,{onchainosAgentId:"*",pid:String(process.pid),pluginId:L.id,pluginVersion:L.version,nodeVersion:process.version,startedAt:String(V)}),un(),jo(),W&&W(),W=kr(),u("[okx-a2a:service] OpenClaw lightweight gateway initialized; node daemon owns XMTP receive/send/agent sync.")},stop:async()=>{W&&(W(),W=void 0),ln(),u("[okx-a2a:service] okx-a2a:core stopped");let n=Date.now();f.info(a.GATEWAY_STOPPED,{onchainosAgentId:"*",pid:String(process.pid),pluginId:L.id,pluginVersion:L.version,stoppedAt:String(n),uptimeMs:V?String(n-V):"unknown"}),V=void 0}})}},Ho=L;
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;
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.1",
5
+ "version": "0.2.2",
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.1",
3
+ "version": "0.2.2",
4
4
  "description": "OpenClaw plugin for E2E encrypted agent-to-agent communication via XMTP",
5
5
  "main": "dist/index.js",
6
6
  "files": [