@okxweb3/a2a-openclaw 0.1.5 → 0.1.6
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 +3 -3
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var __importMetaUrl=require('url').pathToFileURL(__filename).href;
|
|
2
|
-
"use strict";var Ft=Object.create;var de=Object.defineProperty;var qt=Object.getOwnPropertyDescriptor;var Bt=Object.getOwnPropertyNames;var Ht=Object.getPrototypeOf,Wt=Object.prototype.hasOwnProperty;var E=(e,n)=>()=>(e&&(n=e(e=0)),n);var ce=(e,n)=>{for(var t in n)de(e,t,{get:n[t],enumerable:!0})},On=(e,n,t,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of Bt(n))!Wt.call(e,r)&&r!==t&&de(e,r,{get:()=>n[r],enumerable:!(s=qt(n,r))||s.enumerable});return e};var Xt=(e,n,t)=>(t=e!=null?Ft(Ht(e)):{},On(n||!e||!e.__esModule?de(t,"default",{value:e,enumerable:!0}):t,e)),Yt=e=>On(de({},"__esModule",{value:!0}),e);function Vt(e=new Date){return e.toLocaleString(void 0,{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3,hour12:!1})}function bn(e){return[`[${Vt()}]`,...e]}function u(...e){console.error(...bn(e))}function kn(...e){console.warn(...bn(e))}var I=E(()=>{"use strict"});function Kn(e){be=e}function R(){if(!be)throw new Error("[xmtp] PluginRuntime not initialized \u2014 ensure setXmtpRuntime is called in register()");return be}var be,q=E(()=>{"use strict";be=null});var a,ke=E(()=>{"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",AGENT_CLIENT_CREATED:"Agent client created",AGENT_CLIENT_REMOVED:"Agent client removed",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",SYSTEM_NOTIFICATION_RECEIVED:"System notification received",SYSTEM_NOTIFICATION_ROUTED:"System notification routed",HERMES_SESSION_ROUTE_BINDING:"Hermes session route binding",XMTP_CONNECTION_FAILED:"XMTP connection failed",CONVERSATIONS_STREAM_FAILED:"conversations.stream failed",AGENT_START_FAILED:"agent.start failed",AGENT_STREAM_ERROR:"agent stream error",BOOTSTRAP_FAILED:"Bootstrap failed",ONCHAINOS_SESSION_EXPIRED:"Onchainos session expired",ONCHAINOS_CLI_ERROR:"Onchainos CLI error",HEARTBEAT_FAILED:"Heartbeat failed",HEARTBEAT_SKIPPED:"Heartbeat skipped",MESSAGE_PARSE_FAILED:"Message parse failed",MESSAGE_HANDLER_ERROR:"Message handler 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",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"}});var y,xn,Cn,vn,zt,Jt,Qt,Zt,es,ue,Pn,Ke,g,Ln,Un,D=E(()=>{"use strict";I();y=Xt(require("@sentry/node")),xn=require("node:crypto");ke();ke();Cn=(0,xn.randomUUID)(),vn=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"]),zt=["accesstoken","apikey","authorization","authtoken","content","credential","filepath","logpath","outputpath","password","payload","privatekey","prompt","rawevent","rawtext","refreshtoken","requestbody","responsebody","secret","stderr","stdout","token","tooloutput"],Jt=new Set(["onchainosagentlistresultjson","onchainosagentlistdiagnostictext"]),Qt=new Set(["agentPlatform","cacheName","checkpoint","code","communicationClass","component","eventName","exitCode","kind","method","onchainosAgentId","operation","phase","platform","provider","reason","role","source","stage","status","subcommand","taskId","type"]),Zt=["eventName","cacheName","checkpoint","component","method","operation","phase","reason","code","provider","type","kind","status","subcommand"],es=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.SYSTEM_NOTIFICATION_RECEIVED,a.SYSTEM_NOTIFICATION_ROUTED,a.HERMES_SESSION_ROUTE_BINDING,a.INBOUND_BLOCKED_ADDRESS_MISMATCH,a.INBOUND_BLOCKED_INELIGIBLE,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.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.PENDING_CONVERSATION_DENIED,a.PENDING_LIST_QUERIED,a.SESSION_KEY_DERIVED,a.SESSIONS_QUERIED,a.SYNC_TICK_COMPLETED]),ue=256,Pn=128,Ke=class e{static instance;initialized=!1;buffer=[];constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}init(n){if(this.initialized){kn("[logger] Already initialized, skipping.");return}try{y.init({dsn:n.dsn,release:n.release,environment:n.environment,maxBreadcrumbs:0,beforeBreadcrumb:()=>null,isInner:!1}),y.setTags({projectName:n.projectName,agentPlatform:n.agentPlatform})}catch{return}this.initialized=!0,this.flush()}info(n,t){let s=e.sanitizeExtra({flowId:Cn,...t??{}});if(es.has(n)){if(!this.initialized){this.buffer.push({level:"info",message:n,extra:s});return}try{y.withScope(r=>{e.applyDiagnostics(r,n,s),y.captureEvent({level:"info",message:n,extra:{...s,eventName:n}})})}catch{}}}error(n,t,s){let r=e.sanitizeExtra({flowId:Cn,...s??{}});if(!this.initialized){this.buffer.push({level:"error",message:n,error:t,extra:r});return}try{y.withScope(o=>{o.setLevel("error"),e.applyDiagnostics(o,n,r),y.captureException(e.createSentryEvent(n),{extra:t?{...r,eventName:n,errorName:t.name,errorMessageLength:String(t.message.length)}:r})})}catch{}}async shutdown(){try{await y.close(5e3)}catch{await y.flush(5e3)}}flush(){for(;this.buffer.length>0;){let n=this.buffer.shift();n.level==="info"?this.info(n.message,n.extra):this.error(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,s])=>[t,e.safeValueForKey(t,s)]))}static isBlockedExtraKey(n){let t=n.toLowerCase(),s=e.normalizeSensitiveKey(n);return vn.has(t)||vn.has(s)?!0:e.isSafeMetricKey(s)?!1:zt.some(r=>s.includes(r))}static isSafeMetricKey(n){return/(bytes|count|length|ms|size)$/.test(n)}static safeValueForKey(n,t){return typeof t=="string"&&Jt.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<=ue?n:`${n.slice(0,ue)}...`;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(s=>e.safeValue(s));if(typeof n=="object")return Object.fromEntries(Object.entries(n).slice(0,50).filter(([,s])=>s!==void 0).filter(([s])=>!e.isBlockedExtraKey(s)).map(([s,r])=>[s,e.safeValueForKey(s,r)]));let t=String(n);return t.length<=ue?t:`${t.slice(0,ue)}...`}static tagValue(n){let t=String(n);return t.length<=Pn?t:`${t.slice(0,Pn)}...`}static normalizeTagKey(n){return n.replace(/[^A-Za-z0-9_.:-]+/g,"_").slice(0,32)||"unknown"}static applyDiagnostics(n,t,s){let r={eventName:t,...s};for(let[i,d]of Object.entries(r))Qt.has(i)&&n.setTag(e.normalizeTagKey(i),e.tagValue(d));let o=["a2a",t];for(let i of Zt){let d=r[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}},g=Ke.getInstance(),Ln=e=>g.init(e),Un=()=>g.shutdown()});function Ce(){return v||(process.env.OKX_AGENT_TASK_HOME?(v=le(process.env.OKX_AGENT_TASK_HOME),v):(v=le((0,ge.join)(ss(),".okx-agent-task")),v))}function le(e){return ts(e)}function ts(e){(0,fe.mkdirSync)(e,{recursive:!0,mode:Mn});try{(0,fe.chmodSync)(e,Mn)}catch(n){let t=n.code;if(t!=="EPERM"&&t!=="EACCES")throw n}return e}function ss(){try{let e=(0,Gn.homedir)();if(e)return e}catch(e){}return(0,ge.resolve)(process.cwd())}var Gn,ge,fe,v,Mn,jn=E(()=>{"use strict";Gn=require("node:os"),ge=require("node:path"),fe=require("node:fs"),v=null,Mn=448});function rs(e=Ce()){return(0,Fn.join)(e,"openclaw-gateway.json")}function qn(e,n=Ce()){let t=le(n),s=rs(t),r=`${s}.${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,N.writeFileSync)(r,`${JSON.stringify(o,null,2)}
|
|
2
|
+
"use strict";var Ft=Object.create;var de=Object.defineProperty;var qt=Object.getOwnPropertyDescriptor;var Bt=Object.getOwnPropertyNames;var Ht=Object.getPrototypeOf,Wt=Object.prototype.hasOwnProperty;var E=(e,n)=>()=>(e&&(n=e(e=0)),n);var ce=(e,n)=>{for(var t in n)de(e,t,{get:n[t],enumerable:!0})},On=(e,n,t,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of Bt(n))!Wt.call(e,r)&&r!==t&&de(e,r,{get:()=>n[r],enumerable:!(s=qt(n,r))||s.enumerable});return e};var Xt=(e,n,t)=>(t=e!=null?Ft(Ht(e)):{},On(n||!e||!e.__esModule?de(t,"default",{value:e,enumerable:!0}):t,e)),Yt=e=>On(de({},"__esModule",{value:!0}),e);function Vt(e=new Date){return e.toLocaleString(void 0,{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",fractionalSecondDigits:3,hour12:!1})}function bn(e){return[`[${Vt()}]`,...e]}function u(...e){console.error(...bn(e))}function kn(...e){console.warn(...bn(e))}var I=E(()=>{"use strict"});function Kn(e){be=e}function R(){if(!be)throw new Error("[xmtp] PluginRuntime not initialized \u2014 ensure setXmtpRuntime is called in register()");return be}var be,q=E(()=>{"use strict";be=null});var a,ke=E(()=>{"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",AGENT_CLIENT_CREATED:"Agent client created",AGENT_CLIENT_REMOVED:"Agent client removed",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",SYSTEM_NOTIFICATION_RECEIVED:"System notification received",SYSTEM_NOTIFICATION_ROUTED:"System notification routed",HERMES_SESSION_ROUTE_BINDING:"Hermes session route binding",XMTP_CONNECTION_FAILED:"XMTP connection failed",CONVERSATIONS_STREAM_FAILED:"conversations.stream failed",AGENT_START_FAILED:"agent.start failed",AGENT_STREAM_ERROR:"agent stream error",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",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",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"}});var y,xn,Cn,vn,zt,Jt,Qt,Zt,es,ue,Pn,Ke,g,Ln,Un,D=E(()=>{"use strict";I();y=Xt(require("@sentry/node")),xn=require("node:crypto");ke();ke();Cn=(0,xn.randomUUID)(),vn=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"]),zt=["accesstoken","apikey","authorization","authtoken","content","credential","filepath","logpath","outputpath","password","payload","privatekey","prompt","rawevent","rawtext","refreshtoken","requestbody","responsebody","secret","stderr","stdout","token","tooloutput"],Jt=new Set(["onchainosagentlistresultjson","onchainosagentlistdiagnostictext"]),Qt=new Set(["agentPlatform","cacheName","checkpoint","code","communicationClass","component","eventName","exitCode","kind","method","onchainosAgentId","operation","phase","platform","provider","reason","role","source","stage","status","subcommand","taskId","type"]),Zt=["eventName","cacheName","checkpoint","component","method","operation","phase","reason","code","provider","type","kind","status","subcommand"],es=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.SYSTEM_NOTIFICATION_RECEIVED,a.SYSTEM_NOTIFICATION_ROUTED,a.HERMES_SESSION_ROUTE_BINDING,a.INBOUND_BLOCKED_ADDRESS_MISMATCH,a.INBOUND_BLOCKED_INELIGIBLE,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.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.PENDING_CONVERSATION_DENIED,a.PENDING_LIST_QUERIED,a.SESSION_KEY_DERIVED,a.SESSIONS_QUERIED,a.SYNC_TICK_COMPLETED]),ue=256,Pn=128,Ke=class e{static instance;initialized=!1;buffer=[];constructor(){}static getInstance(){return e.instance||(e.instance=new e),e.instance}init(n){if(this.initialized){kn("[logger] Already initialized, skipping.");return}try{y.init({dsn:n.dsn,release:n.release,environment:n.environment,maxBreadcrumbs:0,beforeBreadcrumb:()=>null,isInner:!1}),y.setTags({projectName:n.projectName,agentPlatform:n.agentPlatform})}catch{return}this.initialized=!0,this.flush()}info(n,t){let s=e.sanitizeExtra({flowId:Cn,...t??{}});if(es.has(n)){if(!this.initialized){this.buffer.push({level:"info",message:n,extra:s});return}try{y.withScope(r=>{e.applyDiagnostics(r,n,s),y.captureEvent({level:"info",message:n,extra:{...s,eventName:n}})})}catch{}}}error(n,t,s){let r=e.sanitizeExtra({flowId:Cn,...s??{}});if(!this.initialized){this.buffer.push({level:"error",message:n,error:t,extra:r});return}try{y.withScope(o=>{o.setLevel("error"),e.applyDiagnostics(o,n,r),y.captureException(e.createSentryEvent(n),{extra:t?{...r,eventName:n,errorName:t.name,errorMessageLength:String(t.message.length)}:r})})}catch{}}async shutdown(){try{await y.close(5e3)}catch{await y.flush(5e3)}}flush(){for(;this.buffer.length>0;){let n=this.buffer.shift();n.level==="info"?this.info(n.message,n.extra):this.error(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,s])=>[t,e.safeValueForKey(t,s)]))}static isBlockedExtraKey(n){let t=n.toLowerCase(),s=e.normalizeSensitiveKey(n);return vn.has(t)||vn.has(s)?!0:e.isSafeMetricKey(s)?!1:zt.some(r=>s.includes(r))}static isSafeMetricKey(n){return/(bytes|count|length|ms|size)$/.test(n)}static safeValueForKey(n,t){return typeof t=="string"&&Jt.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<=ue?n:`${n.slice(0,ue)}...`;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(s=>e.safeValue(s));if(typeof n=="object")return Object.fromEntries(Object.entries(n).slice(0,50).filter(([,s])=>s!==void 0).filter(([s])=>!e.isBlockedExtraKey(s)).map(([s,r])=>[s,e.safeValueForKey(s,r)]));let t=String(n);return t.length<=ue?t:`${t.slice(0,ue)}...`}static tagValue(n){let t=String(n);return t.length<=Pn?t:`${t.slice(0,Pn)}...`}static normalizeTagKey(n){return n.replace(/[^A-Za-z0-9_.:-]+/g,"_").slice(0,32)||"unknown"}static applyDiagnostics(n,t,s){let r={eventName:t,...s};for(let[i,d]of Object.entries(r))Qt.has(i)&&n.setTag(e.normalizeTagKey(i),e.tagValue(d));let o=["a2a",t];for(let i of Zt){let d=r[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}},g=Ke.getInstance(),Ln=e=>g.init(e),Un=()=>g.shutdown()});function Ce(){return v||(process.env.OKX_AGENT_TASK_HOME?(v=le(process.env.OKX_AGENT_TASK_HOME),v):(v=le((0,ge.join)(ss(),".okx-agent-task")),v))}function le(e){return ts(e)}function ts(e){(0,fe.mkdirSync)(e,{recursive:!0,mode:Mn});try{(0,fe.chmodSync)(e,Mn)}catch(n){let t=n.code;if(t!=="EPERM"&&t!=="EACCES")throw n}return e}function ss(){try{let e=(0,Gn.homedir)();if(e)return e}catch(e){}return(0,ge.resolve)(process.cwd())}var Gn,ge,fe,v,Mn,jn=E(()=>{"use strict";Gn=require("node:os"),ge=require("node:path"),fe=require("node:fs"),v=null,Mn=448});function rs(e=Ce()){return(0,Fn.join)(e,"openclaw-gateway.json")}function qn(e,n=Ce()){let t=le(n),s=rs(t),r=`${s}.${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,N.writeFileSync)(r,`${JSON.stringify(o,null,2)}
|
|
3
3
|
`,{encoding:"utf8",mode:384});try{(0,N.chmodSync)(r,384)}catch{}(0,N.renameSync)(r,s);try{(0,N.chmodSync)(s,384)}catch{}return s}var N,Fn,Bn=E(()=>{"use strict";N=require("node:fs"),Fn=require("node:path");jn()});function X(e){return e.includes(H)||e.includes(`:${W}:`)}function pe(e){if(!(!e||e==="direct"||e==="@direct"))return e.startsWith("telegram:")||e.startsWith("@")?e:`telegram:${e}`}function B(e){if(typeof e=="number"&&Number.isFinite(e))return String(Math.trunc(e));if(typeof e=="string")return e.trim()||void 0}function Hn(e){if(e.length!==0)return e[0]==="topic"?B(e[1]):e[0]==="thread"?e.length>=3?B(e.slice(2).join(":")):B(e[1]):B(e[0])}function ve(e,n){return!e||!n||!e.startsWith("telegram:")||/:topic:\d+$/.test(e)?e:`${e}:topic:${n}`}function os(e,n){let t=e.split(":");if(n==="telegram"){let s=t.indexOf("telegram"),r=s>=0?t.slice(s+1):t.slice(3),o=r.findIndex(d=>d==="direct"||d==="dm");if(o>=0){let d=o>0?r[o-1]:void 0,c=r[o+1]==="telegram"&&r[o+2]?`telegram:${r[o+2]}`:r[o+1],l=Hn(r.slice(o+2));return{to:ve(pe(c),l),accountId:d,threadId:l}}let i=r.indexOf("group");if(i>=0){let d=i>0?r[i-1]:void 0,c=r[i+1]==="telegram"&&r[i+2]?`telegram:${r[i+2]}`:r[i+1],l=Hn(r.slice(i+2));return{to:ve(pe(c),l),accountId:d,threadId:l}}if(r[0]==="telegram"&&r[1])return{to:`telegram:${r[1]}`,accountId:void 0};if(r[1]==="telegram"&&r[2])return{to:`telegram:${r[2]}`,accountId:r[0]};if(r.length>=2)return{to:pe(r[1]),accountId:r[0]};if(r.length===1)return{to:pe(r[0]),accountId:void 0}}return{to:t[4],accountId:void 0}}function Wn(e,n){return typeof e!="string"||e==="direct"||e==="@direct"?n:e}function Xn(e){return is[e]??e}function as(e){if(e==="agent:main")return"main";let n=e.split(":");return n.length<4||n[0]!=="agent"||!n[1]||!n[2]||X(e)||n[2]==="backup"?null:n[2]}function Pe(e,n){let t=n??{},s=t.deliveryContext?.channel??t.lastChannel??t.origin?.provider??as(e);if(!s)return null;let r=Xn(s),o=os(e,r),i=Wn(t.deliveryContext?.to,o.to)??Wn(t.lastTo,o.to)??o.to,d=t.deliveryContext?.accountId??o.accountId,c=B(t.deliveryContext?.threadId??t.origin?.threadId??t.lastThreadId??o.threadId);return{channel:r,target:{sessionKey:e,to:r==="telegram"?ve(i,c):i,accountId:d,threadId:c,updatedAt:t.lastInteractionAt??t.updatedAt??Date.now()}}}function Yn(e){let n=new Map,t=new Map;for(let[s,r]of Object.entries(e)){if(X(s))continue;let o=r;if(o.spawnedBy||o.subagentRole)continue;let i=Pe(s,r);if(!i)continue;let{channel:d,target:c}=i,{to:l,updatedAt:f}=c;l&&(!t.get(d)||f>(n.get(d)?.updatedAt??0))&&t.set(d,l);let p=n.get(d);(!p||f>p.updatedAt)&&n.set(d,c)}for(let[s,r]of n)if(!r.to){let o=t.get(s);o&&(r.to=o)}for(let[s,r]of n)u(`[findLatestUserSessions] channel=${s} winner=${r.sessionKey} to=${r.to??"(none)"} accountId=${r.accountId??"(none)"} interactedAt=${r.updatedAt}`);return n}var H,W,is,Vn=E(()=>{"use strict";I();H="okx-xmtp",W="okx-a2a";is={dashboard:"webchat"}});function Jn(e){if(X(e))return null;let n=R(),t=n.agent.session.resolveStorePath(void 0,{agentId:"main"}),s=n.agent.session.loadSessionStore(t,{skipCache:!0});return Pe(e,s[e])}function zn(e){return e.toLowerCase().startsWith("0x")}function ds(e){if(typeof e=="string")return`${H}:${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`${H}:${n.toString()}`}function xe(e){let n=`${H}:`,t=e.indexOf(n);if(t===-1)return null;let s=new URLSearchParams(e.slice(t+n.length)),r=s.get("myAgentId")||s.get("myagentid"),o=s.get("toAgentId")||s.get("toagentid"),i=s.get("my"),d=s.get("to"),c=s.get("job"),l=s.get("gid");return r&&o&&c?{format:"agent",myAgentId:r,toAgentId:o,jobId:c,xmtpGroupId:l??""}:!i||!d||!c?null:!zn(i)&&(d==="_"||!zn(d))?{format:"agent",myAgentId:i,toAgentId:d,jobId:c,xmtpGroupId:l??""}:{format:"address",myXmtpAddress:i,toXmtpAddress:d,jobId:c,xmtpGroupId:l??""}}function Y(e){if(!e)return"";let n=xe(e);return n?.jobId?n.jobId:/(?:^|:)backup:([^:&]+)/.exec(e)?.[1]??""}function z(e){let n=e.taskId?.trim()||Y(e.scopeKey)||Y(e.sessionKey);return n?{taskId:n}:{}}function cs(e){let n=typeof e=="string"?e:ds(e);return(0,V.buildAgentSessionKey)({agentId:"main",channel:W,peer:{kind:"group",id:n}})}function Qn(){let t=R().config.loadConfig().agents?.list;if(t&&t.length>0){let s=t.find(r=>r.id==="main");return s?s.id:t[0].id}return"main"}function Zn(){return(0,V.buildAgentSessionKey)({agentId:Qn(),channel:W,peer:{kind:"group",id:"backup"}})}function us(e){return(0,V.buildAgentSessionKey)({agentId:Qn(),channel:W,peer:{kind:"group",id:`backup:${e}`}})}function b(){let e=R(),n=e.agent.session.resolveStorePath(void 0,{agentId:"main"}),t=e.agent.session.loadSessionStore(n,{skipCache:!0});return Yn(t)}function et(e){let n=new Set,t=[...e.sessionKey?[e.sessionKey]:[],...Array.isArray(e.sessionKeys)?e.sessionKeys:[]].filter(r=>r.trim()),s=[];e.jobId&&s.push({jobId:e.jobId,myAgentId:e.myAgentId,toAgentId:e.toAgentId,myXmtpAddress:e.myXmtpAddress,toXmtpAddress:e.toXmtpAddress});for(let r of t){if(r.startsWith("agent:")){n.add(r);continue}let o=ps(r);if(o){n.add(us(o));continue}let i=nt(r);if(i){s.push(i);continue}let d=xe(r);if(d){s.push(fs(d));continue}n.add(cs(r))}for(let r of ls())for(let o of s)if(gs(r,o)){n.add(r);break}return[...n].sort()}function ls(){let e=R(),n=e.agent.session.resolveStorePath(void 0,{agentId:"main"}),t=e.agent.session.loadSessionStore(n,{skipCache:!0});return Object.keys(t).filter(X)}function gs(e,n){let t=xe(e);if(t)return ys(t,n);let s=nt(e);return s?!(n.jobId&&s.jobId!==n.jobId||n.myAgentId&&s.myAgentId!==n.myAgentId||n.toAgentId&&s.toAgentId!==n.toAgentId||n.myXmtpAddress&&!n.myAgentId||n.toXmtpAddress&&!n.toAgentId):!n.jobId||n.myAgentId||n.toAgentId||n.myXmtpAddress||n.toXmtpAddress?!1:Y(e)===n.jobId}function fs(e){return"myAgentId"in e?{myAgentId:e.myAgentId,toAgentId:e.toAgentId,jobId:e.jobId}:{myXmtpAddress:e.myXmtpAddress,toXmtpAddress:e.toXmtpAddress,jobId:e.jobId}}function nt(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:ye(n[t+1]),myAgentId:ye(n[t+3]),toAgentId:ye(n[t+5])}}function ps(e){return e.startsWith("backup:")?ye(e.slice(7)):null}function ys(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 ye(e){try{return decodeURIComponent(e)}catch{return e}}var V,P=E(()=>{"use strict";I();V=require("openclaw/plugin-sdk/routing");q();Vn()});var ct={};ce(ct,{callChatInject:()=>Q,callGateway:()=>_,callSessionsCreate:()=>J,callSessionsDelete:()=>Be,callSessionsSend:()=>He,formatPairingErrorHint:()=>Ie,onGatewayEvent:()=>Ge,resolveGatewayRuntimeConfig:()=>je,stopGatewayClient:()=>qe,syncGatewayConfigForNodeDaemon:()=>Fe});function Le(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 Ss(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:!!Le(e)}:{type:typeof e,configured:!0})}function Ue(e){if(!e||typeof e!="object")return e??null;if(Array.isArray(e))return e.map(t=>Ue(t));let n={};for(let[t,s]of Object.entries(e)){if(/password|token|secret/i.test(t)){n[t]=Ss(s);continue}n[t]=Ue(s)}return n}function _s(e){try{return JSON.stringify(e)}catch{return"[unserializable]"}}function As(e){let n=e.params;if(!n||typeof n!="object"||Array.isArray(n))return z({taskId:e.taskId});let t=n;return z({taskId:e.taskId,sessionKey:typeof t.sessionKey=="string"?t.sessionKey:typeof t.key=="string"?t.key:""})}function dt(e){let n={};for(let[t,s]of Object.entries(e))s!=null&&(n[t]=String(s));return n}function S(e,n={}){let t=dt({phase:e,...n});u(`[gateway] ${e}: ${JSON.stringify(t)}`),g.info(e.startsWith("request_")?a.GATEWAY_REQUEST:a.GATEWAY_STARTED,{component:"openclaw_gateway",...t})}function L(e,n,t={},s=a.GATEWAY_CONNECT_FAILED){let r=dt({phase:e,component:"openclaw_gateway",...t});u(`[gateway] ${e}:`,n),g.error(s,n instanceof Error?n:new Error(String(n)),r)}function hs(e){for(let n of $e)try{n(e)}catch(t){u("[gateway] event handler failed:",t)}}function Ge(e){return $e.add(e),()=>{$e.delete(e)}}function st(){S("ready_gate_reset",{hasSharedClient:!!T,hasConnected:h}),x=new Promise((e,n)=>{me=e,Ee=n})}function rt(e,n,t){if(T!==e){S(`${n}_skip_clear_noncurrent`,t);return}try{e.stop?.()}catch(s){L(`${n}_stop_failed`,s,t)}T=null,h=!1,x=null,me=null,Ee=null,S(`${n}_cleared_client`,t)}function Ts(){if(T)return S("reuse_client",{hasConnected:h,hasReadyPromise:!!x}),{client:T,ready:x};let e=je(),{url:n,password:t,token:s}=e,r=(0,Me.randomUUID)(),o=++Is;st(),S("init_client",{clientSeq:o,instanceId:r,url:n,hasGatewayConfig:!!e.rawGatewayConfig,gatewayConfig:_s(Ue(e.rawGatewayConfig)),passwordConfigured:!!t,tokenConfigured:!!s,scopes:tt.join(",")});let i=new at.GatewayClient({url:n,password:t,token:s,instanceId:r,clientName:"gateway-client",clientDisplayName:"okx-a2a-plugin",mode:"backend",role:"operator",scopes:[...tt],onHelloOk:()=>{S("hello_ok",{clientSeq:o,instanceId:r,url:n}),h=!0,me?.()},onEvent:hs,onClose:(d,c)=>{if(u(`[gateway] closed (${d}): ${c||"no reason"}`),g.info(a.GATEWAY_DISCONNECTED,{clientSeq:String(o),instanceId:r,url:n,code:String(d),reason:c||"no-reason",hadConnected:String(h)}),h){h=!1,st();return}rt(i,"close_before_connect",{clientSeq:o,instanceId:r,url:n,code:d,reason:c||"no-reason"})},onConnectError:d=>{let c=d;if(c?.retryable){L("connect_error_retryable",d,{clientSeq:o,instanceId:r,url:n,retryable:"true",reason:c?.details?.reason??"retryable",code:c?.gatewayCode??c?.details?.code});return}L("connect_error",d,{clientSeq:o,instanceId:r,url:n,retryable:"false",code:c?.gatewayCode??c?.details?.code}),Ee?.(d instanceof Error?d:new Error(String(d))),rt(i,"connect_error",{clientSeq:o,instanceId:r,url:n,code:c?.gatewayCode??c?.details?.code,reason:c?.details?.reason})}});return T=i,S("start_client",{clientSeq:o,instanceId:r,url:n}),i.start(),{client:i,ready:x}}function je(){let n=R().config.loadConfig().gateway;return{url:`ws://127.0.0.1:${ot(process.env.OPENCLAW_GATEWAY_PORT)??ot(n?.port)??Es}`,password:Le(n?.auth?.password),token:Le(n?.auth?.token),rawGatewayConfig:n}}function ot(e){if(typeof e=="number"&&Number.isFinite(e)){let s=Math.trunc(e);return s>0&&s<=65535?s: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 Fe(){let e=je();try{let n=qn({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 L("sync_node_gateway_config_failed",n,{url:e.url,passwordConfigured:!!e.password,tokenConfigured:!!e.token},a.GATEWAY_CONNECT_FAILED),null}}function qe(){if(T){try{T.stop()}catch{}T=null,x=null,me=null,Ee=null,h=!1}}function Ie(e){let n=e,t=n?.gatewayCode??n?.details?.code;if(!t)return null;let s=n?.details??{},r=[`code=${t}`];s.reason&&r.push(`reason=${s.reason}`),s.authReason&&r.push(`authReason=${s.authReason}`),Array.isArray(s.requestedScopes)&&s.requestedScopes.length&&r.push(`requestedScopes=${s.requestedScopes.join(",")}`),s.deviceId&&r.push(`deviceId=${s.deviceId}`),s.requestId&&r.push(`requestId=${s.requestId}`);let o=` (${r.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 _(e){let n=e.timeoutMs??ms,t=Date.now(),s=As(e);S("request_start",{method:e.method,timeoutMs:n,hasSharedClient:!!T,hasConnected:h,...s});let{client:r,ready:o}=Ts();try{await o}catch(d){let c=Date.now()-t;throw L("request_ready_failed",d,{method:e.method,durationMs:c,timeoutMs:n,...s,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:h,...s});try{let d=await r.request(e.method,e.params,{timeoutMs:n});return S("request_done",{method:e.method,durationMs:Date.now()-t,timeoutMs:n,...s}),d}catch(d){let c=Date.now()-t,l=/timeout|timed out/i.test(String(d?.message??d??""));L("request_error",d,{method:e.method,durationMs:c,timeoutMs:n,readyWaitMs:i,...s,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 f=Ie(d);if(f){let p=d?.message??String(d);try{d.message=`${p}
|
|
4
4
|
${f}`}catch{}}throw d}}async function J(e){return _({method:"sessions.create",params:e})}async function Be(e){return _({method:"sessions.delete",params:e})}async function He(e){let n=e.idempotencyKey??(0,Me.randomUUID)(),t={key:e.key,message:e.message,idempotencyKey:n};try{let s=await _({method:"sessions.send",params:t});return{runId:it(s),raw:s}}catch(s){let r=s?.gatewayCode??s?.code,o=String(s?.message??"");if(r==="INVALID_REQUEST"&&o.includes("session not found")){await J({key:e.key}),g.info(a.SESSION_AUTO_RECOVERED,{sessionKey:e.key,trigger:"sessions.send"});let i=await _({method:"sessions.send",params:t});return{runId:it(i),raw:i}}throw s}}function it(e){if(!e||typeof e!="object")return;let n=e.runId;return typeof n=="string"&&n.trim()?n:void 0}async function Q(e){try{return await _({method:"chat.inject",params:e})}catch(n){let t=n?.gatewayCode??n?.code,s=String(n?.message??"");if(t==="INVALID_REQUEST"&&s.includes("session not found"))return await J({key:e.sessionKey}),g.info(a.SESSION_AUTO_RECOVERED,{sessionKey:e.sessionKey,trigger:"chat.inject"}),await _({method:"chat.inject",params:e});throw n}}var at,Me,ms,Es,tt,Is,T,x,me,Ee,h,$e,U=E(()=>{"use strict";I();at=require("openclaw/plugin-sdk/gateway-runtime"),Me=require("node:crypto");q();D();Bn();P();ms=2e4,Es=18789,tt=["operator.admin"],Is=0;T=null,x=null,me=null,Ee=null,h=!1,$e=new Set});function ft(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;Xe(n);let s=e.params??{},r=Us(s.env)?s.env:{};return{...s,env:{...r,[Ns]:"openclaw",[Ds]:"openclaw-gateway",[Os]:"1",[ws]:n??[...t][0],[Rs]:JSON.stringify([...t])}}}function pt(e){let n=e.runId?.trim(),t=e.sessionKey?.trim();if(!t||!te(t))return!1;Ye();let s=xs([t,...e.routeSessionKeys??[]]);return Cs(t,s),n&&ne.set(n,{sessionKeys:s,updatedAt:Date.now()}),!0}function yt(e){let n=typeof e=="string"?e.trim():e?.runId?.trim(),t=typeof e=="string"?null:e?.sessionKey?.trim();n&&ne.delete(n),t&&te(t)&&vs(t)}function Se(e){let n=new Set,t=e.sessionKey?.trim();t&&te(t)&&n.add(t);let s=e.runId?.trim();if(s){Ye(e.now??Date.now());let r=ne.get(s);for(let o of r?.sessionKeys??[])n.add(o)}else if(!t||!te(t))for(let r of Ps(e.now??Date.now()))n.add(r);return[...n]}function Xe(e){let n=e?.trim();!n||!Ks(n)||(Z={sessionKey:n,updatedAt:Date.now()})}function mt(e=Date.now()){return Z?e-Z.updatedAt>bs?(Z=null,null):Z.sessionKey:null}function Ks(e){return e.startsWith("job:")||e.startsWith("backup:")||/(?:^|[?&:])job=([^:&]+)/.test(e)}function te(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"&&!ks.has(t))}function Ye(e=Date.now()){for(let[n,t]of ne)e-t.updatedAt>lt&&ne.delete(n);for(let[n,t]of w)e-t.updatedAt>lt&&w.delete(n)}function Cs(e,n){let t=w.get(e);w.set(e,{count:(t?.count??0)+1,updatedAt:Date.now(),routeSessionKeys:n}),We()}function vs(e){let n=w.get(e);if(n){if(n.count<=1){w.delete(e),We();return}w.set(e,{count:n.count-1,updatedAt:Date.now(),routeSessionKeys:n.routeSessionKeys}),We()}}function Ps(e=Date.now()){Ye(e);let n=[...w.keys()];return n.length!==1?[]:w.get(n[0])?.routeSessionKeys??[]}function xs(e){let n=new Set;for(let t of e){let s=t?.trim();s&&te(s)&&n.add(s)}return[...n]}function We(){try{let e=Ls();(0,$.mkdirSync)((0,ee.dirname)(e),{recursive:!0,mode:448});let t={version:1,updatedAt:Date.now(),origins:[...w.entries()].map(([r,o])=>({sessionKey:r,count:o.count,updatedAt:o.updatedAt,routeSessionKeys:o.routeSessionKeys}))},s=`${e}.${process.pid}.tmp`;(0,$.writeFileSync)(s,`${JSON.stringify(t)}
|
|
5
5
|
`,{encoding:"utf8",mode:384}),(0,$.renameSync)(s,e)}catch(e){console.log(`[okx-a2a:hook] failed to persist gateway route origins: ${e instanceof Error?e.message:String(e)}`)}}function Ls(e=process.env){let n=e.OKX_AGENT_TASK_HOME?.trim()||(0,ee.join)((0,gt.homedir)(),".okx-agent-task");return(0,ee.join)(n,"run","gateway-route-origins.json")}function Us(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var $,gt,ee,ws,Rs,Ns,Ds,Os,bs,lt,ks,Z,ne,w,Ve=E(()=>{"use strict";$=require("node:fs"),gt=require("node:os"),ee=require("node:path"),ws="OKX_A2A_CURRENT_GATEWAY_SESSION_KEY",Rs="OKX_A2A_CURRENT_GATEWAY_SESSION_KEYS",Ns="OKX_A2A_GATEWAY_PROVIDER",Ds="OKX_A2A_RUNTIME_CONTEXT",Os="OKX_A2A_IN_GATEWAY",bs=12e4,lt=30*6e4,ks=new Set(["heartbeat","cron","webhook","voice"]),Z=null,ne=new Map,w=new Map});function Ms(e=process.env){return e.OKX_AGENT_TASK_HOME?.trim()||(0,Je.join)((0,It.homedir)(),".okx-agent-task")}function Gs(e=process.env){return e.OKX_A2A_SESSION_STORE_DB_PATH?.trim()||(0,Je.join)(Ms(e),"sqlite","session-store.sqlite")}function _e(e){let n=A(e.jobId)??Y(e.sessionKey);return n?js(Fs(n,e.dbPath??Gs())):[]}function js(e){let n=new Set,t=[];for(let s of e){let r=ze(A(s.gatewaySessionKey)??A(s.sessionKey)??""),o=Hs(r);!r||!o||n.has(o)||(n.add(o),t.push(r))}return t}function Fs(e,n){if(!(0,Et.existsSync)(n))return[];let{DatabaseSync:t}=qs(),s=new t(n,{readOnly:!0});try{if(s.exec("PRAGMA busy_timeout=5000"),!s.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='job_provider_bindings'").get())return[];let o=s.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"?[]:Bs(o.gateway_routes_json)}catch(r){return console.log(`[okx-a2a:stored-routes] failed to resolve job route jobId=${e}: ${r instanceof Error?r.message:String(r)}`),[]}finally{s.close()}}function qs(){let e=process.emitWarning;process.emitWarning=((n,...t)=>{if(!((typeof n=="string"?n:n.message).includes("SQLite is an experimental feature")&&t.some(r=>r==="ExperimentalWarning")))return e.call(process,n,...t)});try{return require("node:sqlite")}finally{process.emitWarning=e}}function Bs(e){try{let n=JSON.parse(e);if(!Array.isArray(n))return[];let t=[];for(let s of n){if(!Xs(s))continue;let r=A(typeof s.platform=="string"?s.platform:null),o=ze(A(typeof s.sessionKey=="string"?s.sessionKey:null)??"");if(!r||!o)continue;let i=ze(A(typeof s.gatewaySessionKey=="string"?s.gatewaySessionKey:null)??""),d=A(typeof s.chatId=="string"?s.chatId:null),c=A(typeof s.threadId=="string"?s.threadId:null),l=A(typeof s.updatedAt=="string"?s.updatedAt:null);t.push({platform:r,sessionKey:o,...i?{gatewaySessionKey:i}:{},...d?{chatId:d}:{},...c?{threadId:c}:{},...l?{updatedAt:l}:{}})}return t}catch{return[]}}function Hs(e){let n=A(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 s=t[2];return!s||s==="okx-a2a"||s==="backup"||$s.has(s)?null:s}function ze(e){let n=A(e);if(!n)return"";let t=n.split(":");if(t.length<4||t[0]!=="agent")return n;let s=t[2],r=t[3];if(s!=="telegram")return n;if((r==="direct"||r==="dm")&&t[4]){let o=Ws(t.slice(5));return o?`agent:${t[1]}:telegram:direct:${t[4]}:topic:${o}`:`agent:${t[1]}:telegram:direct:${t[4]}`}if(r==="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 Ws(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 Xs(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function A(e){let n=e?.trim();return n||null}var Et,It,Je,$s,Qe=E(()=>{"use strict";Et=require("node:fs"),It=require("node:os"),Je=require("node:path");P();$s=new Set(["heartbeat","cron","webhook","voice"])});function nn(e){let n=k(e.jobId)??Qs([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=>Vs(i)).filter(i=>!!i);if(t.length===0)return[];let s=e.dbPath??er(),{DatabaseSync:r}=nr(),o=new r(s);try{o.exec("PRAGMA busy_timeout=5000"),o.exec(`
|
|
@@ -24,6 +24,6 @@ ${f}`}catch{}}throw d}}async function J(e){return _({method:"sessions.create",pa
|
|
|
24
24
|
UPDATE pending_gateway_deliveries
|
|
25
25
|
SET attempts = attempts + 1, last_error = ?, last_attempt_at = ?
|
|
26
26
|
WHERE id = ?
|
|
27
|
-
`).run(ae,new Date().toISOString(),f.id),u(`[okx-a2a:outbox-drain] delivery failed id=${f.id} kind=${f.kind} attempts=${Dn}: ${ae}`))}return(i>0||d>0)&&g.info(a.SESSION_DISPATCHED,{onchainosAgentId:"*",source:"gateway_outbox_drain",deliveredCount:String(i),failedCount:String(d),abandonedCount:String(c),batchSize:String(o.length)}),{delivered:i,failed:d,abandoned:c,skipped:!1}}finally{s.close()}}function Gt(e={}){let n=e.intervalMs??pr,t=!1,s=async()=>{if(!t){t=!0;try{await Ar({...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}}},r=setInterval(()=>{s()},n);return r.unref?.(),s(),()=>{clearInterval(r)}}D();var hr=process.env.SENTRY_ENV==="dev"?"dev":"prod",jt={projectName:"okx/openclaw-okx-a2a-extension",release:"0.1.
|
|
28
|
-
`)}function Nr(){J({key:Zn()}).then(()=>{u("[okx-a2a:service] gateway client admin precheck succeeded"),g.info(a.GATEWAY_STARTED,{source:"gateway_preconnect",outcome:"ok"})},e=>{u("[okx-a2a:service] gateway client admin precheck failed:",e),g.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??"")}),_n(Rr(e),{source:"gateway_preconnect"}).then(({dispatched:n,failed:t})=>{g.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=>{g.error(a.USER_DISPATCH_FAILED,n instanceof Error?n:new Error(String(n)),{source:"gateway_preconnect"})})})}function Dr(){let e=process.env.OKX_A2A_SENTRY_DSN?.trim()||process.env.SENTRY_DSN?.trim()||Tr;Ln({dsn:e,...jt,agentPlatform:"openclaw"})}function Tn(e,n){let t=[e?.sessionKey,e?.context?.sessionKey,e?.ctx?.sessionKey,e?.hookContext?.sessionKey,n?.sessionKey];for(let s of t)if(typeof s=="string"&&s.trim())return s;return null}function wn(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 s of t)if(typeof s=="string"&&s.trim())return s;return null}function Or(e){let n=br(e),t=new Set([e]);for(let[s,r]of b())s&&s!==n&&r.sessionKey&&t.add(r.sessionKey);return[...t]}function br(e){let n=e.split(":");return n.length>=4&&n[0]==="agent"?n[2]??null:null}function Rn(e,n){let t=e[n];if(typeof t!="string"||!t.trim())throw new Error(`Missing required param ${n}`);return t}function m(e,n){let t=e[n];return typeof t=="string"&&t.trim()?t:void 0}function Nn(e,n){let t=e[n];if(!Array.isArray(t))return;let s=t.filter(r=>typeof r=="string"&&r.trim().length>0).map(r=>r.trim());return s.length>0?s:void 0}function kr(e,n){let t=e[n];return typeof t=="boolean"?t:void 0}var C={id:"okx-a2a",name:"OKX A2A Plugin",version:"0.1.
|
|
27
|
+
`).run(ae,new Date().toISOString(),f.id),u(`[okx-a2a:outbox-drain] delivery failed id=${f.id} kind=${f.kind} attempts=${Dn}: ${ae}`))}return(i>0||d>0)&&g.info(a.SESSION_DISPATCHED,{onchainosAgentId:"*",source:"gateway_outbox_drain",deliveredCount:String(i),failedCount:String(d),abandonedCount:String(c),batchSize:String(o.length)}),{delivered:i,failed:d,abandoned:c,skipped:!1}}finally{s.close()}}function Gt(e={}){let n=e.intervalMs??pr,t=!1,s=async()=>{if(!t){t=!0;try{await Ar({...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}}},r=setInterval(()=>{s()},n);return r.unref?.(),s(),()=>{clearInterval(r)}}D();var hr=process.env.SENTRY_ENV==="dev"?"dev":"prod",jt={projectName:"okx/openclaw-okx-a2a-extension",release:"0.1.6",environment:hr};var j,F,Tr="https://e20ff987c945887733de9ec6cca87aba@sentry.coinall.ltd/apmfe/70295";function wr(e){let n=e?.details?.requestId;return typeof n=="string"&&n.trim()?`openclaw devices approve ${n}`:"openclaw devices approve --latest"}function Rr(e){let n=e?.details??{},t=Ie(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",wr(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(`
|
|
28
|
+
`)}function Nr(){J({key:Zn()}).then(()=>{u("[okx-a2a:service] gateway client admin precheck succeeded"),g.info(a.GATEWAY_STARTED,{source:"gateway_preconnect",outcome:"ok"})},e=>{u("[okx-a2a:service] gateway client admin precheck failed:",e),g.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??"")}),_n(Rr(e),{source:"gateway_preconnect"}).then(({dispatched:n,failed:t})=>{g.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=>{g.error(a.USER_DISPATCH_FAILED,n instanceof Error?n:new Error(String(n)),{source:"gateway_preconnect"})})})}function Dr(){let e=process.env.OKX_A2A_SENTRY_DSN?.trim()||process.env.SENTRY_DSN?.trim()||Tr;Ln({dsn:e,...jt,agentPlatform:"openclaw"})}function Tn(e,n){let t=[e?.sessionKey,e?.context?.sessionKey,e?.ctx?.sessionKey,e?.hookContext?.sessionKey,n?.sessionKey];for(let s of t)if(typeof s=="string"&&s.trim())return s;return null}function wn(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 s of t)if(typeof s=="string"&&s.trim())return s;return null}function Or(e){let n=br(e),t=new Set([e]);for(let[s,r]of b())s&&s!==n&&r.sessionKey&&t.add(r.sessionKey);return[...t]}function br(e){let n=e.split(":");return n.length>=4&&n[0]==="agent"?n[2]??null:null}function Rn(e,n){let t=e[n];if(typeof t!="string"||!t.trim())throw new Error(`Missing required param ${n}`);return t}function m(e,n){let t=e[n];return typeof t=="string"&&t.trim()?t:void 0}function Nn(e,n){let t=e[n];if(!Array.isArray(t))return;let s=t.filter(r=>typeof r=="string"&&r.trim().length>0).map(r=>r.trim());return s.length>0?s:void 0}function kr(e,n){let t=e[n];return typeof t=="boolean"?t:void 0}var C={id:"okx-a2a",name:"OKX A2A Plugin",version:"0.1.6",register(e){Kn(e.runtime),e.registerChannel({plugin:$n}),e.registerGatewayMethod("okx-a2a.health",async({respond:n})=>{n(!0,{ok:!0,provider:"openclaw",pluginId:C.id,pluginVersion:C.version,startedAt:F??null})},{scope:"operator.admin"}),e.registerGatewayMethod("okx-a2a.dispatch_user",async({params:n,respond:t})=>{try{let s=Rn(n,"content"),r=m(n,"label"),o=m(n,"sessionKey"),i=Nn(n,"sessionKeys"),d=m(n,"jobId"),c=m(n,"currentSessionKey"),l=m(n,"idempotencyKey");t(!0,i?await yn({sessionKeys:i,content:s,label:r,idempotencyKey:l}):o?await mn({sessionKey:o,content:s,label:r,idempotencyKey:l}):await fn({content:s,label:r,jobId:d,currentSessionKey:c,idempotencyKey:l}))}catch(s){t(!1,void 0,{code:"INVALID_REQUEST",message:s instanceof Error?s.message:String(s)})}},{scope:"operator.admin"}),e.registerGatewayMethod("okx-a2a.prompt_user",async({params:n,respond:t})=>{try{let s=Rn(n,"userContent"),r=Rn(n,"llmContent"),o=m(n,"sessionKey"),i=Nn(n,"sessionKeys"),d=m(n,"jobId"),c=m(n,"currentSessionKey"),l=m(n,"idempotencyKey");t(!0,i?await In({sessionKeys:i,userContent:s,llmContent:r,idempotencyKey:l}):o?await Sn({sessionKey:o,userContent:s,llmContent:r,idempotencyKey:l}):await En({userContent:s,llmContent:r,jobId:d,currentSessionKey:c,idempotencyKey:l}))}catch(s){t(!1,void 0,{code:"INVALID_REQUEST",message:s instanceof Error?s.message:String(s)})}},{scope:"operator.admin"}),e.registerGatewayMethod("okx-a2a.delete_sessions",async({params:n,respond:t})=>{try{let s=m(n,"sessionKey"),r=Nn(n,"sessionKeys"),o=m(n,"jobId");if(!s&&!r&&!o)throw new Error("Missing required selector: sessionKey, sessionKeys, or jobId");let i=m(n,"myAgentId"),d=m(n,"toAgentId"),c=m(n,"myXmtpAddress"),l=m(n,"toXmtpAddress"),f=kr(n,"deleteTranscript");t(!0,await ut({...s?{sessionKey:s}:{},...r?{sessionKeys:r}:{},...o?{jobId:o}:{},...i?{myAgentId:i}:{},...d?{toAgentId:d}:{},...c?{myXmtpAddress:c}:{},...l?{toXmtpAddress:l}:{},...f!==void 0?{deleteTranscript:f}:{}}))}catch(s){t(!1,void 0,{code:"INVALID_REQUEST",message:s instanceof Error?s.message:String(s)})}},{scope:"operator.admin"}),e.registerHook("agent:bootstrap",async n=>{let t=n.context,s=t.bootstrapFiles;if(Array.isArray(s))try{let r=s.map(i=>`${i.name}(${i.missing?"missing":`${i.content?.length??0}b`})`).join(", ");u(`[okx-a2a:hook] agent:bootstrap agentId=${t.agentId??"?"} files=[${r}]`);let o=s.reduce((i,d)=>i+(d.content?.length??0),0);g.info(a.BOOTSTRAP_APPLIED,{openclawAgentId:t.agentId??"",promptSize:String(o),fileCount:String(s.length),missingCount:String(s.filter(i=>i.missing).length)})}catch(r){g.error(a.BOOTSTRAP_FAILED,r instanceof Error?r:void 0,{openclawAgentId:t.agentId??""})}},{name:"okx-a2a-agent-bootstrap"}),e.on("before_agent_run",async(n,t)=>{let s=Tn(n,t),r=wn(n,t);if(!s){u("[xmtp_prompt_user:queue] before_agent_run ignored: missing sessionKey");return}let o=Or(s);pt({runId:r,sessionKey:s,routeSessionKeys:o})&&console.log(`[okx-a2a:hook] remembered gateway route origin runId=${r} sessionKey=${s} routeSessionKeys=${o.join(",")}`),rn(s)}),e.on("before_tool_call",async(n,t)=>{let s=Tn(n,t),r=wn(n,t);Xe(s);let o=[...new Set([..._e({sessionKey:s}),...Se({runId:r,sessionKey:s})])],i=ft({toolName:n?.toolName,params:n?.params,sessionKey:s,routeSessionKeys:o});if(i)return console.log(`[okx-a2a:hook] injected gateway session env tool=${n?.toolName??"?"} sessionKey=${s} routeSessionKeys=${o.join(",")}`),{params:i}},{priority:50}),e.on("agent_end",async(n,t)=>{let s=Tn(n,t),r=wn(n,t);if(yt({runId:r,sessionKey:s}),!s){u("[xmtp_prompt_user:queue] agent_end ignored: missing sessionKey");return}on(s)}),e.registerService({id:"okx-a2a:core",start:async()=>{u("[okx-a2a:service] okx-a2a:core starting (multi-identity mode); initializing communication identities..."),F=Date.now(),Dr(),g.info(a.GATEWAY_STARTED,{onchainosAgentId:"*",pid:String(process.pid),pluginId:C.id,pluginVersion:C.version,nodeVersion:process.version,startedAt:String(F)}),Fe(),Nr(),j&&j(),j=Gt(),u("[okx-a2a:service] OpenClaw lightweight gateway initialized; node daemon owns XMTP receive/send/agent sync.")},stop:async()=>{j&&(j(),j=void 0),qe(),u("[okx-a2a:service] okx-a2a:core stopped");let n=Date.now();g.info(a.GATEWAY_STOPPED,{onchainosAgentId:"*",pid:String(process.pid),pluginId:C.id,pluginVersion:C.version,stoppedAt:String(n),uptimeMs:F?String(n-F):"unknown"}),F=void 0}})}},Kr=C;
|
|
29
29
|
if(module.exports&&module.exports.__esModule&&module.exports.default){module.exports=module.exports.default;}
|
package/openclaw.plugin.json
CHANGED