@okxweb3/a2a-openclaw 0.0.8 → 0.0.9
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 +2 -2
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -151,8 +151,8 @@ agent to continue this conversation.`;function Pre(e){return hP(e)}var rr=class
|
|
|
151
151
|
UPDATE pending_gateway_deliveries
|
|
152
152
|
SET attempts = attempts + 1, last_error = ?, last_attempt_at = ?
|
|
153
153
|
WHERE id = ?
|
|
154
|
-
`).run(u,new Date().toISOString(),A.id),console.log(`[okx-a2a:outbox-drain] delivery failed id=${A.id} kind=${A.kind}: ${u}`)}return(s>0||a>0)&&N.info(Q.SESSION_DISPATCHED,{onchainosAgentId:"*",source:"gateway_outbox_drain",deliveredCount:String(s),failedCount:String(a),batchSize:String(i.length)}),{delivered:s,failed:a,skipped:!1}}finally{r.close()}}function loe(e={}){let t=e.intervalMs??WJe,n=!1,r=async()=>{if(!n){n=!0;try{await jJe({...e.dbPath!==void 0?{dbPath:e.dbPath}:{},...e.limit!==void 0?{limit:e.limit}:{}})}catch(i){console.log("[okx-a2a:outbox-drain] tick failed:",i)}finally{n=!1}}},o=setInterval(()=>{r()},t);return o.unref?.(),r(),()=>{clearInterval(o)}}var Pm=require("node:child_process"),QP=require("node:fs"),$v=require("node:os"),lp=require("node:path"),foe=require("node:util");ar();var goe=(0,foe.promisify)(Pm.execFile),eYe=12e4,SP=3e4,poe=5e3,hoe=[(0,lp.join)((0,$v.homedir)(),".local","bin"),(0,lp.join)((0,$v.homedir)(),"Library","pnpm"),(0,lp.join)((0,$v.homedir)(),".npm-global","bin"),"/opt/homebrew/bin","/usr/local/bin"];function Nr(e,t){return{source:"openclaw_gateway",provider:"openclaw",action:e,...t??{}}}async function Zv(e,t=SP){let n=process.env.OKX_A2A_BIN?.trim();if(n)return Eoe(`${n} ${e.map(Coe).join(" ")}`,t,Xv());let r=await tYe();if(!r)return{ok:!1,stdout:"",stderr:"okx-a2a binary not found"};try{let{stdout:o,stderr:i}=await goe(r,e,{timeout:t,env:Xv()});return{ok:!0,stdout:o,stderr:i}}catch(o){let i=o;return{ok:!1,stdout:String(i.stdout??""),stderr:String(i.stderr??i.message??o)}}}async function tYe(){let e=await Eoe("command -v okx-a2a",SP),t=e.stdout.trim().split(/\r?\n/)[0]?.trim();if(e.ok&&t)return t;for(let n of hoe){let r=(0,lp.join)(n,"okx-a2a");if((0,QP.existsSync)(r))return r}return null}function nYe(){let e=yoe("command -v okx-a2a",SP),t=e.stdout.trim().split(/\r?\n/)[0]?.trim();if(e.ok&&t)return t;for(let n of hoe){let r=(0,lp.join)(n,"okx-a2a");if((0,QP.existsSync)(r))return r}return null}async function Eoe(e,t,n=process.env){try{let{stdout:r,stderr:o}=await goe(Ioe(),["-lc",e],{timeout:t,env:n});return{ok:!0,stdout:r,stderr:o}}catch(r){let o=r;return{ok:!1,stdout:String(o.stdout??""),stderr:String(o.stderr??o.message??r)}}}function moe(e,t=poe){let n=process.env.OKX_A2A_BIN?.trim();if(n)return yoe(`${n} ${e.map(Coe).join(" ")}`,t,Xv());let r=nYe();if(!r)return{ok:!1,stdout:"",stderr:"okx-a2a binary not found"};try{return{ok:!0,stdout:(0,Pm.execFileSync)(r,e,{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t,env:Xv()}),stderr:""}}catch(o){let i=o;return{ok:!1,stdout:String(i.stdout??""),stderr:String(i.stderr??i.message??o)}}}function yoe(e,t,n=process.env){try{return{ok:!0,stdout:(0,Pm.execFileSync)(Ioe(),["-lc",e],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t,env:n}),stderr:""}}catch(r){let o=r;return{ok:!1,stdout:String(o.stdout??""),stderr:String(o.stderr??o.message??r)}}}function Ioe(){return process.env.SHELL||"/bin/sh"}function Xv(){return{...process.env,OKX_A2A_RUNTIME_CONTEXT:"openclaw-gateway",OKX_A2A_IN_GATEWAY:"1",OKX_A2A_GATEWAY_PROVIDER:"openclaw"}}function Coe(e){return`'${e.replace(/'/g,"'\\''")}'`}function rYe(e){let t=e.trim();return t.startsWith("running ")?"running":t.startsWith("stale ")?"stale":t==="stopped"?"stopped":"unknown"}function Boe(e){let t=e.trim().split(/\r?\n/).reverse();for(let n of t){let r=n.trim();if(r.startsWith("{"))try{let o=JSON.parse(r);if(o&&typeof o=="object"&&!Array.isArray(o))return o}catch{}}return null}async function oYe(){let e=await Zv(["ai-provider","status","--json"]);if(!e.ok)return console.log("[okx-a2a:daemon] ai-provider status failed:",(e.stderr||e.stdout).trim()),N.error(Q.DAEMON_LIFECYCLE_FAILED,new Error("okx-a2a ai-provider status failed"),Nr("provider_status",{status:"failed",stderr:e.stderr,stdout:e.stdout})),null;let n=Boe(e.stdout)?.provider;return typeof n!="string"&&N.info(Q.DAEMON_LIFECYCLE_SKIPPED,Nr("provider_status",{reason:"invalid_provider_status_output",status:"skipped",stdout:e.stdout})),typeof n=="string"?n:null}function iYe(){let e=moe(["ai-provider","status","--json"]);if(!e.ok)return console.log("[okx-a2a:daemon] ai-provider status failed during gateway signal:",(e.stderr||e.stdout).trim()),N.error(Q.DAEMON_LIFECYCLE_FAILED,new Error("okx-a2a ai-provider status failed during gateway signal"),Nr("provider_status_signal",{status:"failed",stderr:e.stderr,stdout:e.stdout})),null;let n=Boe(e.stdout)?.provider;return typeof n!="string"&&N.info(Q.DAEMON_LIFECYCLE_SKIPPED,Nr("provider_status_signal",{reason:"invalid_provider_status_output",status:"skipped",stdout:e.stdout})),typeof n=="string"?n:null}async function boe(){let e=await oYe();return e!=="openclaw"?(console.log(`[okx-a2a:daemon] provider=${e??"(not set)"}; skipping OpenClaw-owned daemon lifecycle`),N.info(Q.DAEMON_LIFECYCLE_SKIPPED,Nr("provider_mismatch",{selectedProvider:e??"",reason:"provider_not_openclaw",status:"skipped"})),!1):!0}function sYe(){let e=iYe();return e!=="openclaw"?(console.log(`[okx-a2a:daemon] provider=${e??"(not set)"}; skipping OpenClaw-owned daemon lifecycle during gateway signal`),N.info(Q.DAEMON_LIFECYCLE_SKIPPED,Nr("provider_mismatch_signal",{selectedProvider:e??"",reason:"provider_not_openclaw",status:"skipped"})),!1):!0}async function Qoe(){if(!await boe())return;let e=await Zv(["daemon","status"]),t=e.ok?rYe(e.stdout):"unknown";e.ok||console.log("[okx-a2a:daemon] status failed:",(e.stderr||e.stdout).trim()),N.info(Q.DAEMON_LIFECYCLE_REQUESTED,Nr("restart",{previousStatus:t,status:"requested"}));let n=await Zv(["daemon","restart"],eYe);if(!n.ok){console.log("[okx-a2a:daemon] restart failed:",(n.stderr||n.stdout).trim()),N.error(Q.DAEMON_LIFECYCLE_FAILED,new Error("okx-a2a daemon restart failed"),Nr("restart",{previousStatus:t,status:"failed",stderr:n.stderr,stdout:n.stdout}));return}let r=n.stdout.trim();console.log(`[okx-a2a:daemon] ${r||"restart ok"} selectedProvider=openclaw previousStatus=${t}`),N.info(Q.DAEMON_LIFECYCLE_REQUESTED,Nr("restart",{previousStatus:t,status:"ok"}))}async function Soe(){if(!await boe())return;N.info(Q.DAEMON_LIFECYCLE_REQUESTED,Nr("stop",{status:"requested"}));let e=await Zv(["daemon","stop"]);if(!e.ok){console.log("[okx-a2a:daemon] stop failed:",(e.stderr||e.stdout).trim()),N.error(Q.DAEMON_LIFECYCLE_FAILED,new Error("okx-a2a daemon stop failed"),Nr("stop",{status:"failed",stderr:e.stderr,stdout:e.stdout}));return}console.log(`[okx-a2a:daemon] ${e.stdout.trim()||"stop ok"}`),N.info(Q.DAEMON_LIFECYCLE_REQUESTED,Nr("stop",{status:"ok"}))}function aYe(e){if(!sYe())return;N.info(Q.DAEMON_LIFECYCLE_REQUESTED,Nr("stop_signal",{reason:e,status:"requested"}));let t=moe(["daemon","stop"],poe);if(!t.ok){console.log(`[okx-a2a:daemon] stop failed during ${e}:`,(t.stderr||t.stdout).trim()),N.error(Q.DAEMON_LIFECYCLE_FAILED,new Error("okx-a2a daemon stop failed during gateway signal"),Nr("stop_signal",{reason:e,status:"failed",stderr:t.stderr,stdout:t.stdout}));return}console.log(`[okx-a2a:daemon] ${t.stdout.trim()||"stop ok"} reason=${e}`),N.info(Q.DAEMON_LIFECYCLE_REQUESTED,Nr("stop_signal",{reason:e,status:"ok"}))}function _oe(){let e=t=>{aYe(t)};return process.on("SIGTERM",e),process.on("SIGINT",e),()=>{process.off("SIGTERM",e),process.off("SIGINT",e)}}ar();async function AYe(e,t,n,r){console.log(`[onchainos-signer] executing: onchainos agent xmtp-sign --key-uuid ${t} --message <${r.length} chars>`);let o,i;try{({stdout:o,stderr:i}=await La(["agent","xmtp-sign","--key-uuid",t,"--message",r]))}catch(a){let A=String(a?.stdout??"");throw A&&Dm(A)&&Tm("xmtp-sign"),a}i&&console.log(`[onchainos-signer] stderr: ${i}`);let s=up(o,"xmtp-sign",{onchainosAgentId:e,keyUuid:t,walletAddress:n,messageLength:String(r.length)});if(!s.ok){Dm(o)&&Tm("xmtp-sign");let a=new Error("onchainos xmtp-sign failed");throw N.error(Q.ONCHAINOS_CLI_ERROR,a,cp(o,"xmtp-sign",{onchainosAgentId:e,keyUuid:t,walletAddress:n,messageLength:String(r.length)})),a}return console.log(`[onchainos-signer] sign success, signature=${s.data.signature.slice(0,20)}...`),Bi(s.data.signature)}function voe(e){let t=e.communicationAddress.toLowerCase(),n=e.keyUuid,r=e.agentId;return console.log(`[onchainos-signer] creating signer for ${t} (keyUuid=${n})`),{type:"EOA",getIdentifier:()=>({identifier:t,identifierKind:0}),signMessage:async o=>(console.log(`[onchainos-signer] signing message for ${t}`),await AYe(r,n,t,o))}}ar();var cYe=process.env.SENTRY_ENV==="dev"?"dev":"prod",_P={projectName:"okx/openclaw-okx-a2a-extension",release:"0.0.
|
|
155
|
-
`)}function fYe(){nA({key:ll()}).then(()=>{console.log("[okx-a2a:service] gateway client admin precheck succeeded"),N.info(Q.GATEWAY_STARTED,{source:"gateway_preconnect",outcome:"ok"})},e=>{console.log("[okx-a2a:service] gateway client admin precheck failed:",e),N.error(Q.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??"")}),pG(lYe(e),{source:"gateway_preconnect"}).then(({dispatched:t,failed:n})=>{N.info(Q.USER_DISPATCHED,{source:"gateway_preconnect",outcome:n.length===0?"all_ok":"partial",dispatchedChannels:t.join(","),failedChannels:n.join(","),dispatchedCount:String(t.length),failedCount:String(n.length)})},t=>{N.error(Q.USER_DISPATCH_FAILED,t instanceof Error?t:new Error(String(t)),{source:"gateway_preconnect"})})})}async function gYe(e){try{let t=await IP();if(typeof t.sentryDsn=="string"&&t.sentryDsn){ok({dsn:t.sentryDsn,..._P,agentPlatform:"openclaw"});return}console.error("[okx-a2a] system-config did not return sentryDsn; Sentry not initialized \u2014 no further events will be reported to SLS"),N.error(Q.SENTRY_INIT_SKIPPED,void 0,{onchainosAgentId:"*",reason:"system-config missing sentryDsn",pluginId:qa.id,pluginVersion:qa.version,source:e})}catch(t){console.log(`[okx-a2a:service] system-config fetch failed in ${e}:`,t),N.error(Q.CONFIG_LOAD_FAILED,t instanceof Error?t:new Error(String(t)),{source:e})}}function Roe(e,t){let n=[e?.sessionKey,e?.context?.sessionKey,e?.ctx?.sessionKey,e?.hookContext?.sessionKey,t?.sessionKey];for(let r of n)if(typeof r=="string"&&r.trim())return r;return null}function vP(e,t){let n=e[t];if(typeof n!="string"||!n.trim())throw new Error(`Missing required param ${t}`);return n}function pYe(e,t){let n=e[t];return typeof n=="string"&&n.trim()?n:void 0}var qa={id:"okx-a2a",name:"OKX A2A Plugin",version:"0.0.
|
|
154
|
+
`).run(u,new Date().toISOString(),A.id),console.log(`[okx-a2a:outbox-drain] delivery failed id=${A.id} kind=${A.kind}: ${u}`)}return(s>0||a>0)&&N.info(Q.SESSION_DISPATCHED,{onchainosAgentId:"*",source:"gateway_outbox_drain",deliveredCount:String(s),failedCount:String(a),batchSize:String(i.length)}),{delivered:s,failed:a,skipped:!1}}finally{r.close()}}function loe(e={}){let t=e.intervalMs??WJe,n=!1,r=async()=>{if(!n){n=!0;try{await jJe({...e.dbPath!==void 0?{dbPath:e.dbPath}:{},...e.limit!==void 0?{limit:e.limit}:{}})}catch(i){console.log("[okx-a2a:outbox-drain] tick failed:",i)}finally{n=!1}}},o=setInterval(()=>{r()},t);return o.unref?.(),r(),()=>{clearInterval(o)}}var Pm=require("node:child_process"),QP=require("node:fs"),$v=require("node:os"),lp=require("node:path"),foe=require("node:util");ar();var goe=(0,foe.promisify)(Pm.execFile),eYe=12e4,SP=3e4,poe=5e3,hoe=[(0,lp.join)((0,$v.homedir)(),".local","bin"),(0,lp.join)((0,$v.homedir)(),"Library","pnpm"),(0,lp.join)((0,$v.homedir)(),".npm-global","bin"),"/opt/homebrew/bin","/usr/local/bin"];function Nr(e,t){return{source:"openclaw_gateway",provider:"openclaw",action:e,...t??{}}}async function Zv(e,t=SP){let n=process.env.OKX_A2A_BIN?.trim();if(n)return Eoe(`${n} ${e.map(Coe).join(" ")}`,t,Xv());let r=await tYe();if(!r)return{ok:!1,stdout:"",stderr:"okx-a2a binary not found"};try{let{stdout:o,stderr:i}=await goe(r,e,{timeout:t,env:Xv()});return{ok:!0,stdout:o,stderr:i}}catch(o){let i=o;return{ok:!1,stdout:String(i.stdout??""),stderr:String(i.stderr??i.message??o)}}}async function tYe(){let e=await Eoe("command -v okx-a2a",SP),t=e.stdout.trim().split(/\r?\n/)[0]?.trim();if(e.ok&&t)return t;for(let n of hoe){let r=(0,lp.join)(n,"okx-a2a");if((0,QP.existsSync)(r))return r}return null}function nYe(){let e=yoe("command -v okx-a2a",SP),t=e.stdout.trim().split(/\r?\n/)[0]?.trim();if(e.ok&&t)return t;for(let n of hoe){let r=(0,lp.join)(n,"okx-a2a");if((0,QP.existsSync)(r))return r}return null}async function Eoe(e,t,n=process.env){try{let{stdout:r,stderr:o}=await goe(Ioe(),["-lc",e],{timeout:t,env:n});return{ok:!0,stdout:r,stderr:o}}catch(r){let o=r;return{ok:!1,stdout:String(o.stdout??""),stderr:String(o.stderr??o.message??r)}}}function moe(e,t=poe){let n=process.env.OKX_A2A_BIN?.trim();if(n)return yoe(`${n} ${e.map(Coe).join(" ")}`,t,Xv());let r=nYe();if(!r)return{ok:!1,stdout:"",stderr:"okx-a2a binary not found"};try{return{ok:!0,stdout:(0,Pm.execFileSync)(r,e,{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t,env:Xv()}),stderr:""}}catch(o){let i=o;return{ok:!1,stdout:String(i.stdout??""),stderr:String(i.stderr??i.message??o)}}}function yoe(e,t,n=process.env){try{return{ok:!0,stdout:(0,Pm.execFileSync)(Ioe(),["-lc",e],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:t,env:n}),stderr:""}}catch(r){let o=r;return{ok:!1,stdout:String(o.stdout??""),stderr:String(o.stderr??o.message??r)}}}function Ioe(){return process.env.SHELL||"/bin/sh"}function Xv(){return{...process.env,OKX_A2A_RUNTIME_CONTEXT:"openclaw-gateway",OKX_A2A_IN_GATEWAY:"1",OKX_A2A_GATEWAY_PROVIDER:"openclaw"}}function Coe(e){return`'${e.replace(/'/g,"'\\''")}'`}function rYe(e){let t=e.trim();return t.startsWith("running ")?"running":t.startsWith("stale ")?"stale":t==="stopped"?"stopped":"unknown"}function Boe(e){let t=e.trim().split(/\r?\n/).reverse();for(let n of t){let r=n.trim();if(r.startsWith("{"))try{let o=JSON.parse(r);if(o&&typeof o=="object"&&!Array.isArray(o))return o}catch{}}return null}async function oYe(){let e=await Zv(["ai-provider","status","--json"]);if(!e.ok)return console.log("[okx-a2a:daemon] ai-provider status failed:",(e.stderr||e.stdout).trim()),N.error(Q.DAEMON_LIFECYCLE_FAILED,new Error("okx-a2a ai-provider status failed"),Nr("provider_status",{status:"failed",stderr:e.stderr,stdout:e.stdout})),null;let n=Boe(e.stdout)?.provider;return typeof n!="string"&&N.info(Q.DAEMON_LIFECYCLE_SKIPPED,Nr("provider_status",{reason:"invalid_provider_status_output",status:"skipped",stdout:e.stdout})),typeof n=="string"?n:null}function iYe(){let e=moe(["ai-provider","status","--json"]);if(!e.ok)return console.log("[okx-a2a:daemon] ai-provider status failed during gateway signal:",(e.stderr||e.stdout).trim()),N.error(Q.DAEMON_LIFECYCLE_FAILED,new Error("okx-a2a ai-provider status failed during gateway signal"),Nr("provider_status_signal",{status:"failed",stderr:e.stderr,stdout:e.stdout})),null;let n=Boe(e.stdout)?.provider;return typeof n!="string"&&N.info(Q.DAEMON_LIFECYCLE_SKIPPED,Nr("provider_status_signal",{reason:"invalid_provider_status_output",status:"skipped",stdout:e.stdout})),typeof n=="string"?n:null}async function boe(){let e=await oYe();return e!=="openclaw"?(console.log(`[okx-a2a:daemon] provider=${e??"(not set)"}; skipping OpenClaw-owned daemon lifecycle`),N.info(Q.DAEMON_LIFECYCLE_SKIPPED,Nr("provider_mismatch",{selectedProvider:e??"",reason:"provider_not_openclaw",status:"skipped"})),!1):!0}function sYe(){let e=iYe();return e!=="openclaw"?(console.log(`[okx-a2a:daemon] provider=${e??"(not set)"}; skipping OpenClaw-owned daemon lifecycle during gateway signal`),N.info(Q.DAEMON_LIFECYCLE_SKIPPED,Nr("provider_mismatch_signal",{selectedProvider:e??"",reason:"provider_not_openclaw",status:"skipped"})),!1):!0}async function Qoe(){if(!await boe())return;let e=await Zv(["daemon","status"]),t=e.ok?rYe(e.stdout):"unknown";e.ok||console.log("[okx-a2a:daemon] status failed:",(e.stderr||e.stdout).trim()),N.info(Q.DAEMON_LIFECYCLE_REQUESTED,Nr("restart",{previousStatus:t,status:"requested"}));let n=await Zv(["daemon","restart"],eYe);if(!n.ok){console.log("[okx-a2a:daemon] restart failed:",(n.stderr||n.stdout).trim()),N.error(Q.DAEMON_LIFECYCLE_FAILED,new Error("okx-a2a daemon restart failed"),Nr("restart",{previousStatus:t,status:"failed",stderr:n.stderr,stdout:n.stdout}));return}let r=n.stdout.trim();console.log(`[okx-a2a:daemon] ${r||"restart ok"} selectedProvider=openclaw previousStatus=${t}`),N.info(Q.DAEMON_LIFECYCLE_REQUESTED,Nr("restart",{previousStatus:t,status:"ok"}))}async function Soe(){if(!await boe())return;N.info(Q.DAEMON_LIFECYCLE_REQUESTED,Nr("stop",{status:"requested"}));let e=await Zv(["daemon","stop"]);if(!e.ok){console.log("[okx-a2a:daemon] stop failed:",(e.stderr||e.stdout).trim()),N.error(Q.DAEMON_LIFECYCLE_FAILED,new Error("okx-a2a daemon stop failed"),Nr("stop",{status:"failed",stderr:e.stderr,stdout:e.stdout}));return}console.log(`[okx-a2a:daemon] ${e.stdout.trim()||"stop ok"}`),N.info(Q.DAEMON_LIFECYCLE_REQUESTED,Nr("stop",{status:"ok"}))}function aYe(e){if(!sYe())return;N.info(Q.DAEMON_LIFECYCLE_REQUESTED,Nr("stop_signal",{reason:e,status:"requested"}));let t=moe(["daemon","stop"],poe);if(!t.ok){console.log(`[okx-a2a:daemon] stop failed during ${e}:`,(t.stderr||t.stdout).trim()),N.error(Q.DAEMON_LIFECYCLE_FAILED,new Error("okx-a2a daemon stop failed during gateway signal"),Nr("stop_signal",{reason:e,status:"failed",stderr:t.stderr,stdout:t.stdout}));return}console.log(`[okx-a2a:daemon] ${t.stdout.trim()||"stop ok"} reason=${e}`),N.info(Q.DAEMON_LIFECYCLE_REQUESTED,Nr("stop_signal",{reason:e,status:"ok"}))}function _oe(){let e=t=>{aYe(t)};return process.on("SIGTERM",e),process.on("SIGINT",e),()=>{process.off("SIGTERM",e),process.off("SIGINT",e)}}ar();async function AYe(e,t,n,r){console.log(`[onchainos-signer] executing: onchainos agent xmtp-sign --key-uuid ${t} --message <${r.length} chars>`);let o,i;try{({stdout:o,stderr:i}=await La(["agent","xmtp-sign","--key-uuid",t,"--message",r]))}catch(a){let A=String(a?.stdout??"");throw A&&Dm(A)&&Tm("xmtp-sign"),a}i&&console.log(`[onchainos-signer] stderr: ${i}`);let s=up(o,"xmtp-sign",{onchainosAgentId:e,keyUuid:t,walletAddress:n,messageLength:String(r.length)});if(!s.ok){Dm(o)&&Tm("xmtp-sign");let a=new Error("onchainos xmtp-sign failed");throw N.error(Q.ONCHAINOS_CLI_ERROR,a,cp(o,"xmtp-sign",{onchainosAgentId:e,keyUuid:t,walletAddress:n,messageLength:String(r.length)})),a}return console.log(`[onchainos-signer] sign success, signature=${s.data.signature.slice(0,20)}...`),Bi(s.data.signature)}function voe(e){let t=e.communicationAddress.toLowerCase(),n=e.keyUuid,r=e.agentId;return console.log(`[onchainos-signer] creating signer for ${t} (keyUuid=${n})`),{type:"EOA",getIdentifier:()=>({identifier:t,identifierKind:0}),signMessage:async o=>(console.log(`[onchainos-signer] signing message for ${t}`),await AYe(r,n,t,o))}}ar();var cYe=process.env.SENTRY_ENV==="dev"?"dev":"prod",_P={projectName:"okx/openclaw-okx-a2a-extension",release:"0.0.9",environment:cYe};var woe=5,uYe=!1,Vc,fp,gp=!0,pp=0,hp,Ep,Um;function dYe(e){let t=e?.details?.requestId;return typeof t=="string"&&t.trim()?`openclaw devices approve ${t}`:"openclaw devices approve --latest"}function lYe(e){let t=e?.details??{},n=uk(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",dYe(e),"```","",`requestId: ${t.requestId??""}`,`deviceId: ${t.deviceId??""}`,`requestedScopes: ${Array.isArray(t.requestedScopes)?t.requestedScopes.join(","):""}`,`approvedScopes: ${Array.isArray(t.approvedScopes)?t.approvedScopes.join(","):""}`,n?`hint: ${n}`:""].filter(Boolean).join(`
|
|
155
|
+
`)}function fYe(){nA({key:ll()}).then(()=>{console.log("[okx-a2a:service] gateway client admin precheck succeeded"),N.info(Q.GATEWAY_STARTED,{source:"gateway_preconnect",outcome:"ok"})},e=>{console.log("[okx-a2a:service] gateway client admin precheck failed:",e),N.error(Q.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??"")}),pG(lYe(e),{source:"gateway_preconnect"}).then(({dispatched:t,failed:n})=>{N.info(Q.USER_DISPATCHED,{source:"gateway_preconnect",outcome:n.length===0?"all_ok":"partial",dispatchedChannels:t.join(","),failedChannels:n.join(","),dispatchedCount:String(t.length),failedCount:String(n.length)})},t=>{N.error(Q.USER_DISPATCH_FAILED,t instanceof Error?t:new Error(String(t)),{source:"gateway_preconnect"})})})}async function gYe(e){try{let t=await IP();if(typeof t.sentryDsn=="string"&&t.sentryDsn){ok({dsn:t.sentryDsn,..._P,agentPlatform:"openclaw"});return}console.error("[okx-a2a] system-config did not return sentryDsn; Sentry not initialized \u2014 no further events will be reported to SLS"),N.error(Q.SENTRY_INIT_SKIPPED,void 0,{onchainosAgentId:"*",reason:"system-config missing sentryDsn",pluginId:qa.id,pluginVersion:qa.version,source:e})}catch(t){console.log(`[okx-a2a:service] system-config fetch failed in ${e}:`,t),N.error(Q.CONFIG_LOAD_FAILED,t instanceof Error?t:new Error(String(t)),{source:e})}}function Roe(e,t){let n=[e?.sessionKey,e?.context?.sessionKey,e?.ctx?.sessionKey,e?.hookContext?.sessionKey,t?.sessionKey];for(let r of n)if(typeof r=="string"&&r.trim())return r;return null}function vP(e,t){let n=e[t];if(typeof n!="string"||!n.trim())throw new Error(`Missing required param ${t}`);return n}function pYe(e,t){let n=e[t];return typeof n=="string"&&n.trim()?n:void 0}var qa={id:"okx-a2a",name:"OKX A2A Plugin",version:"0.0.9",register(e){xP(e.runtime),e.registerChannel({plugin:xq}),e.registerGatewayMethod("okx-a2a.dispatch_user",async({params:n,respond:r})=>{try{let o=vP(n,"content"),i=pYe(n,"label");r(!0,await UI({content:o,label:i}))}catch(o){r(!1,void 0,{code:"INVALID_REQUEST",message:o instanceof Error?o.message:String(o)})}},{scope:"operator.admin"}),e.registerGatewayMethod("okx-a2a.prompt_user",async({params:n,respond:r})=>{try{let o=vP(n,"userContent"),i=vP(n,"llmContent");r(!0,await MI({userContent:o,llmContent:i}))}catch(o){r(!1,void 0,{code:"INVALID_REQUEST",message:o instanceof Error?o.message:String(o)})}},{scope:"operator.admin"});let t=rr.getInstance();e.registerHook("agent:bootstrap",async n=>{let r=n.context,o=r.bootstrapFiles;if(Array.isArray(o))try{let i=o.map(a=>`${a.name}(${a.missing?"missing":`${a.content?.length??0}b`})`).join(", ");console.log(`[okx-a2a:hook] agent:bootstrap agentId=${r.agentId??"?"} files=[${i}]`);let s=o.reduce((a,A)=>a+(A.content?.length??0),0);N.info(Q.BOOTSTRAP_APPLIED,{openclawAgentId:r.agentId??"",promptSize:String(s),fileCount:String(o.length),missingCount:String(o.filter(a=>a.missing).length)})}catch(i){N.error(Q.BOOTSTRAP_FAILED,i instanceof Error?i:void 0,{openclawAgentId:r.agentId??""})}},{name:"okx-a2a-agent-bootstrap"}),e.on("before_agent_run",async(n,r)=>{let o=Roe(n,r);if(!o){console.log("[xmtp_prompt_user:queue] before_agent_run ignored: missing sessionKey");return}fk(o)}),e.on("agent_end",async(n,r)=>{let o=Roe(n,r);if(!o){console.log("[xmtp_prompt_user:queue] agent_end ignored: missing sessionKey");return}gk(o)}),e.registerService({id:"okx-a2a:core",start:async()=>{if(console.log("[okx-a2a:service] okx-a2a:core starting (multi-identity mode); initializing communication identities..."),Um=Date.now(),N.info(Q.GATEWAY_STARTED,{onchainosAgentId:"*",pid:String(process.pid),pluginId:qa.id,pluginVersion:qa.version,nodeVersion:process.version,startedAt:String(Um)}),Ep&&Ep(),Ep=_oe(),eG(),await Qoe(),fYe(),hp&&hp(),hp=loe(),!uYe){await gYe("openclaw_lightweight_gateway_service"),console.log("[okx-a2a:service] legacy OpenClaw XMTP runtime disabled; daemon owns XMTP receive/send/agent sync.");return}t.setTools({listAllAgentsWithMetadata:async p=>toe(p),fetchSensitiveWords:async()=>ioe(),fetchSystemConfig:async()=>IP(),notifyAgentsWakeup:async p=>noe(p),createSigner:p=>voe(p),sendMessageToSession:async p=>Os(p),sendToMainSession:async p=>Yre(p),deleteSession:async p=>Gre(p),createSession:async p=>Jre(p),notifySessionExpired:p=>{let E="[System Notice] The onchainos login session has expired. Agent management, message verification, file transfer, etc. are temporarily unavailable. Run `onchainos wallet login` on the server to re-authenticate, then run `openclaw gateway restart` to restart the gateway.";PI(E).then(({dispatched:m})=>{if(!(m.length>0))return console.log("[onchainos] no user session; falling back session-expired notice to backup session"),No({key:ll(),message:E})}).catch(m=>{console.log("[onchainos] failed to send session-expired notice:",m),N.error(Q.USER_DISPATCH_FAILED,m instanceof Error?m:new Error(String(m)),{source:"notifySessionExpired",onchainosAgentId:"*"})})},createInboundMiddleware:p=>coe(p),processOfflineMessage:async(p,E,m)=>BP(p,E,m)}),t.setPluginVersion("0.0.9"),await t.init();let n=t.pluginVersionStatus;if(n.unavailable){console.error(`[okx-a2a:service] okx-a2a:core start aborted: plugin v0.0.9 is below the required minimum v${n.minVersion}. Run \`openclaw plugins update okx-a2a\` to upgrade.`);return}console.log(`[okx-a2a:service] okx-a2a:core initialized, ${t.getClients().size} clients ready`);let r=t.getSystemConfig();r.sentryDsn?ok({dsn:r.sentryDsn,..._P,agentPlatform:"openclaw"}):(console.error("[okx-a2a] system-config did not return sentryDsn; Sentry not initialized \u2014 no further events will be reported to SLS"),N.error(Q.SENTRY_INIT_SKIPPED,void 0,{onchainosAgentId:"*",reason:"system-config missing sentryDsn",pluginId:qa.id,pluginVersion:qa.version})),Vc&&clearInterval(Vc),fp&&clearInterval(fp);let o=t.getSystemConfig().heartbeatInterval,i=p=>({onchainosAgentId:"*",stage:p,clientCount:String(t.getClients().size),onchainosAgentIds:t.getAllAgents().map(E=>E.agentId).join(",")}),s=t.getAllAgents().length,a=0,A=0;gp=!1;let c=++pp,u=async()=>{console.log("[okx-a2a:sync] scheduled sync starting");let p=Date.now(),E=!1,m=0;try{let D=Date.now();await t.refreshAgents(),m=Date.now()-D,E=!0,a+=1}catch(D){m=Date.now()-p,console.log(`[okx-a2a:sync] refreshAgents failed duration=${m}ms (continuing with the old agent list):`,D),N.error(Q.AGENT_REFRESH_FAILED,D instanceof Error?D:new Error(String(D)),i("syncTick/refreshAgents"))}let I=t.getAllAgents().length;s===0&&I>0&&(console.log(`[okx-a2a:sync] agent list went 0 \u2192 ${I}; retrying fail-soft init resources`),t.retryFailedInit().catch(D=>{console.log("[okx-a2a:sync] retryFailedInit threw:",D)}),t.ensureSensitiveWordsLoaded(!0).catch(D=>{console.log("[okx-a2a:sync] ensureSensitiveWordsLoaded threw:",D)})),s=I;let C=I>0;C||console.log("[okx-a2a:sync] no active agents, skipping heartbeat");let b=E&&A===0;b||console.log(`[okx-a2a:sync] skipping replayOfflineMessages until ${woe} successful agent syncs after last replay (count=${A})`);let _={durationMs:0},[w,U]=await Promise.all([C?xoe(()=>roe(yP)):Promise.resolve(_),b?xoe(()=>t.replayOfflineMessages()):Promise.resolve(_)]),L=C&&!w.error;if(C&&w.error){let D=w.error;console.log(`[okx-a2a:sync] heartbeat failed duration=${w.durationMs}ms:`,D),N.error(Q.HEARTBEAT_FAILED,D instanceof Error?D:new Error(String(D)),{...i("syncTick/heartbeat"),chainIndex:yP})}let M=!b||!U.error;if(E&&(A=b?1:(A+1)%woe),!M){let D=U.error;console.log(`[okx-a2a:sync] replayOfflineMessages failed duration=${U.durationMs}ms:`,D),N.error(Q.OFFLINE_REPLAY_FAILED,D instanceof Error?D:new Error(String(D)),i("syncTick/replayOfflineMessages"))}console.log(`[okx-a2a:sync] scheduled sync done (refreshOk=${E}, heartbeatOk=${L}, heartbeatSkipped=${!C}, replayOk=${M}, replaySkipped=${!b}, total=${Date.now()-p}ms, refresh=${m}ms, heartbeat=${C?`${w.durationMs}ms`:"skipped"}, replay=${b?`${U.durationMs}ms`:"skipped"})`),N.info(Q.SYNC_TICK_COMPLETED,{...i("syncTick"),refreshOk:E?"1":"0",heartbeatOk:L?"1":"0",heartbeatSkipped:C?"0":"1",replayOk:M?"1":"0",replaySkipped:b?"0":"1",agentSyncCount:String(a),agentSyncsSinceOfflineReplay:String(A),durationMs:String(Date.now()-p)})},d=!1,l=async()=>{if(!(gp||c!==pp)){if(d){console.log("[okx-a2a:sync] previous tick still running, skipping this fire");return}d=!0;try{await u()}finally{d=!1}}},f=p=>{gp||c!==pp||(Vc&&clearInterval(Vc),o=p,console.log(`[okx-a2a:sync] scheduled sync interval ${o}s (aligned with heartbeat)`),Vc=setInterval(()=>{l()},o*1e3))},g=async()=>{if(gp||c!==pp)return;let p=o;try{if(await t.refreshSystemConfig(),gp||c!==pp)return;let E=t.getSystemConfig().heartbeatInterval;E!==p&&(console.log(`[okx-a2a:sync] heartbeat interval changed from ${p}s to ${E}s; rescheduling sync timer`),f(E))}catch(E){console.log("[okx-a2a:sync] system-config refresh failed:",E),N.error(Q.CONFIG_LOAD_FAILED,E instanceof Error?E:new Error(String(E)),i("systemConfigRefresh"))}};l(),f(o),fp=setInterval(()=>{g()},3600*1e3)},stop:async()=>{gp=!0,pp+=1,hp&&(hp(),hp=void 0),Ep&&(Ep(),Ep=void 0),Vc&&(clearInterval(Vc),Vc=void 0),fp&&(clearInterval(fp),fp=void 0),tG(),await Soe(),console.log("[okx-a2a:service] okx-a2a:core stopped");let n=Date.now();N.info(Q.GATEWAY_STOPPED,{onchainosAgentId:"*",pid:String(process.pid),pluginId:qa.id,pluginVersion:qa.version,stoppedAt:String(n),uptimeMs:Um?String(n-Um):"unknown"}),Um=void 0}})}},hYe=qa;async function xoe(e){let t=Date.now();try{return await e(),{durationMs:Date.now()-t}}catch(n){return{durationMs:Date.now()-t,error:n}}}
|
|
156
156
|
/*! Bundled license information:
|
|
157
157
|
|
|
158
158
|
cookie/index.js:
|
package/openclaw.plugin.json
CHANGED