@oracle-agent/oracle 0.35.35 → 0.35.36

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.
Files changed (42) hide show
  1. package/README.md +34 -1
  2. package/dist/address-book.mjs +2 -2
  3. package/dist/agent-sessions.mjs +8 -8
  4. package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
  5. package/dist/bin/desk-server.mjs +35 -35
  6. package/dist/bin/oracle-data-mcp.mjs +17 -17
  7. package/dist/bin/oracle.mjs +8 -6
  8. package/dist/cli/commands/agent-session.mjs +10 -10
  9. package/dist/cli/commands/airdrop.mjs +16 -0
  10. package/dist/cli/commands/chat.mjs +215 -205
  11. package/dist/cli/commands/doctor.mjs +3 -3
  12. package/dist/cli/commands/eval.mjs +151 -142
  13. package/dist/cli/commands/extension-policy.mjs +3 -3
  14. package/dist/cli/commands/farm.mjs +9 -9
  15. package/dist/cli/commands/mint.mjs +22 -0
  16. package/dist/cli/commands/model.mjs +219 -209
  17. package/dist/cli/commands/quickstart.mjs +4 -4
  18. package/dist/cli/commands/session-vault.mjs +1 -1
  19. package/dist/cli/commands/sign.mjs +4 -4
  20. package/dist/cli/commands/signer.mjs +14 -14
  21. package/dist/cli/commands/venues.mjs +2 -2
  22. package/dist/control/receipt-lineage.mjs +1 -0
  23. package/dist/data/desk-data.mjs +33 -33
  24. package/dist/data/providers/farming.mjs +2 -2
  25. package/dist/index.mjs +50 -50
  26. package/dist/local-signer/anvil-attestation-worker.mjs +1 -1
  27. package/dist/local-signer/index.mjs +2 -2
  28. package/dist/local-signer/runtime.mjs +8 -8
  29. package/dist/teams/index.mjs +3 -3
  30. package/dist/tui/standalone-client.mjs +86 -77
  31. package/package.json +2 -1
  32. package/public/eval-report.json +2 -2
  33. package/public/oracle-splash/assets/desktop-app.jpg +0 -0
  34. package/public/oracle-splash/assets/hero/agent-session-poster.jpg +0 -0
  35. package/public/oracle-splash/assets/hero/agent-session.mp4 +0 -0
  36. package/public/oracle-splash/assets/hero/agent-session.webm +0 -0
  37. package/public/oracle-splash/assets/oracle-cli-v03535-poster.jpg +0 -0
  38. package/public/oracle-splash/assets/oracle-cli-v03535.gif +0 -0
  39. package/public/oracle-splash/assets/protocol-build-time.jpg +0 -0
  40. package/public/oracle-splash/downloads/index.html +2 -2
  41. package/public/oracle-splash/index.html +129 -51
  42. package/server.json +2 -2
@@ -1,8 +1,8 @@
1
1
  var Qn=Object.defineProperty;var u=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var Oe=(e,t)=>{for(var r in t)Qn(e,r,{get:t[r],enumerable:!0})};function rr(e){return eo.get(Number(e))||null}function nr(e,t=process.env){let r=rr(e);if(!r)return null;for(let n of r.rpcEnv){let o=(t[n]||"").trim();if(o)return o}return null}var Te,eo,Qe=u(()=>{Te={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},eo=new Map(Object.values(Te).map(e=>[e.chainId,e]))});function le(e){let t=e?.transactionHash||e?.hash||e?.txid||null;return t?{happened:!0,hash:String(t),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}var et=u(()=>{});var or=u(()=>{});var ir=u(()=>{});var de=u(()=>{});var ee=u(()=>{});var Ce=u(()=>{de();ee()});import{isAddress as sa}from"ethers";var rt=u(()=>{Ce();de();ee()});import{Interface as no,isAddress as fa}from"ethers";var ha,sr=u(()=>{rt();de();ee();ha=new no(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as oo,isAddress as ba}from"ethers";var Aa,va,ar=u(()=>{rt();de();ee();Aa=new oo(["function approve(address spender,uint256 amount) returns (bool)"]),va=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var K=u(()=>{});import{Interface as io,MaxUint256 as _a,isAddress as Ra,keccak256 as La,toUtf8Bytes as $a}from"ethers";var qa,J=u(()=>{ir();sr();ar();K();ee();qa=new io(["function approve(address spender,uint256 amount) returns (bool)"])});var Ha,za,_e=u(()=>{Ha=300*1e3,za=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var Re=u(()=>{J()});import{Address as Ja,NETWORK as Ga,OutScript as Ya,RawTx as Xa,SigHash as Za,TEST_NETWORK as Qa,Transaction as ec}from"@scure/btc-signer";var it=u(()=>{});import{createHash as so}from"node:crypto";import{base58 as oc}from"@scure/base";import{getCompiledTransactionMessageDecoder as sc}from"@solana/transaction-messages";var cr,ac,st=u(()=>{cr=e=>so("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),ac=new Map([[cr("route"),{name:"route",prefixBytes:0}],[cr("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});import G from"node:net";import ao from"node:dns";function Le(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let r=c=>{if(!c)return[];let d=c.split(":"),m=d.at(-1);if(m?.includes(".")){let p=m.split(".").map(Number);if(p.length!==4||p.some(h=>!Number.isInteger(h)||h<0||h>255))return null;d.splice(d.length-1,1,(p[0]<<8|p[1]).toString(16),(p[2]<<8|p[3]).toString(16))}return d.some(p=>!/^[0-9a-f]{1,4}$/.test(p))?null:d.map(p=>Number.parseInt(p,16))},[n,o]=t.split("::"),i=r(n),s=r(o);if(!i||!s)return null;let l=t.includes("::"),a=8-i.length-s.length;if(!l&&a!==0||l&&a<1)return null;let f=[...i,...Array(Math.max(0,a)).fill(0),...s];return f.length!==8?null:Uint8Array.from(f.flatMap(c=>[c>>8,c&255]))}function at(e,t,r){let n=Math.floor(r/8),o=r%8;for(let s=0;s<n;s+=1)if(e[s]!==t[s])return!1;if(!o)return!0;let i=255<<8-o;return(e[n]&i)===(t[n]&i)}function ct(e){if(G.isIPv4(e)){let t=e.split(".").map(Number);return!(t[0]===0||t[0]===10||t[0]===127||t[0]>=224||t[0]===100&&t[1]>=64&&t[1]<=127||t[0]===169&&t[1]===254||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&(t[1]===0||t[1]===2||t[1]===168)||t[0]===192&&t[1]===88&&t[2]===99||t[0]===198&&(t[1]===18||t[1]===19||t[1]===51)||t[0]===203&&t[1]===0&&t[2]===113)}if(G.isIPv6(e)){let t=Le(e);if(!t)return!1;let r=Le("::ffff:0:0");return at(t,r,96)?ct([...t.slice(12)].join(".")):at(t,Le("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,i])=>at(t,Le(o),i)):!1}return!1}function uo(e){let t;try{t=new URL(String(e))}catch{return{ok:!1,error:`not a valid URL: ${String(e).slice(0,120)}`}}if(t.protocol!=="http:"&&t.protocol!=="https:")return{ok:!1,error:`refused protocol ${t.protocol} (only http/https)`};let r=t.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,"");if(co.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=G.isIP(r);return n!==0&&!ct(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:n!==0}}async function ut(e,{lookupFn:t=ao.promises.lookup}={}){let r=uo(e);if(!r.ok)return r;if(r.isLiteralIp)return{ok:!0,url:r.url,addresses:[{address:r.host,family:G.isIPv6(r.host)?6:4}]};let n;try{n=await t(r.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${r.host} did not resolve`}}return!Array.isArray(n)||n.length===0||n.some(o=>!ct(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function lt({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let r,n;try{let d=await t();r=d.Agent,n=d.fetch}catch(d){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${d?.message||d}`);return null}if(typeof r!="function"||typeof n!="function"){if(e)throw new Error("egress-guard: untrustedUrl pinning requires undici's Agent and fetch exports, which were not found on the imported module");return null}let o=d=>String(d).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),i=new Map,s=d=>(Array.isArray(d)?d:[d]).map(m=>typeof m=="string"?{address:m}:m).filter(m=>m&&m.address).map(m=>({address:m.address,family:m.family||(G.isIPv6(m.address)?6:4)})),l=(d,m,p)=>{i.set(o(d),s(typeof m=="string"?[{address:m,family:p}]:m))},a=d=>{let m=o(d);if(G.isIP(m))return[{address:m,family:G.isIPv6(m)?6:4}];let p=i.get(m);if(!p||!p.length)throw new Error(`refused: unpinned host ${d} during pinned fetch`);return p},f=new r({connect:{lookup(d,m,p){let h;try{h=a(d)}catch(w){return p(w)}return m?.all?p(null,h):p(null,h[0].address,h[0].family)}}}),c=lo((d,m={})=>n(d,{...m,dispatcher:f}),l);return{dispatcher:f,fetch:c,pin:l,resolve:a,async close(){try{await f.destroy()}catch{}}}}function lo(e,t){if(typeof e!="function")throw new Error("markPinCapableFetch: fetchImpl must be a function");if(typeof t!="function")throw new Error("markPinCapableFetch: pin must be a function");return e[dt]=Object.freeze({pin:t}),e}function ft(e){return typeof e=="function"&&typeof e[dt]?.pin=="function"}function ur(e,t,r){if(!ft(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[dt].pin(t,r)}var co,dt,lr=u(()=>{co=new Set(["localhost","metadata.google.internal","metadata.goog"]);dt=Symbol.for("oracle.egressGuard.pinCapableFetch")});import{createHash as fo}from"node:crypto";import{types as j}from"node:util";function v(e){return z(`HTTP JSON body refused: ${e}`)}function xo(e){return["isArgumentsObject","isArrayBuffer","isAnyArrayBuffer","isArrayBufferView","isBoxedPrimitive","isDataView","isDate","isExternal","isGeneratorObject","isKeyObject","isCryptoKey","isMap","isMapIterator","isModuleNamespaceObject","isNativeError","isPromise","isRegExp","isSet","isSetIterator","isTypedArray","isWeakMap","isWeakSet"].some(t=>typeof j[t]=="function"&&j[t](e))}function So(e){let t=[],r=0,n=0,o=0,i=0,s=new WeakSet,l=c=>{if(r+=Buffer.byteLength(c,"utf8"),r>D.bytes)throw v("serialized byte limit exceeded");t.push(c)},a=c=>{if(Buffer.byteLength(c,"utf8")>D.bytes)throw v("serialized byte limit exceeded");return JSON.stringify(c)},f=(c,d)=>{if(n+=1,n>D.nodes)throw v("node limit exceeded");if(d>D.depth)throw v("depth limit exceeded");if(c===null){l("null");return}if(typeof c=="string"){l(a(c));return}if(typeof c=="boolean"){l(c?"true":"false");return}if(typeof c=="number"){if(!Number.isFinite(c))throw v("non-finite number");l(Object.is(c,-0)?"0":String(c));return}if(typeof c!="object")throw v("unsupported non-JSON value");if(j.isProxy(c))throw v("proxy value");if(xo(c))throw v("unsupported exotic object");if(s.has(c))throw v("cyclic value");s.add(c);try{if(Object.getOwnPropertySymbols(c).length>0)throw v("symbol-keyed fields are unsupported");if(Array.isArray(c)){let h=Object.getPrototypeOf(c),w=0;for(;h!==null;){if(j.isProxy(h))throw v("proxy array prototype");if(w+=1,w>D.depth)throw v("array prototype depth limit exceeded");h=Object.getPrototypeOf(h)}if(c.length>D.arrayLength)throw v("array length limit exceeded");for(let T=0;T<c.length;T+=1){let P=Object.getOwnPropertyDescriptor(c,String(T));if(!P||!Object.hasOwn(P,"value")||P.enumerable!==!0)throw v("array entries must be dense enumerable own data")}let S=0;for(let T in c){if(i+=1,i>D.fields)throw v("enumeration limit exceeded");if(Object.hasOwn(c,T)&&(S+=1,S>c.length))throw v("named array fields are unsupported")}if(S!==c.length)throw v("array entries must be dense enumerable own data");l("[");for(let T=0;T<c.length;T+=1)T&&l(","),f(Object.getOwnPropertyDescriptor(c,String(T)).value,d+1);l("]");return}let m=Object.getPrototypeOf(c);if(m!==Object.prototype&&m!==null)throw v("non-plain object");let p=[];for(let h in c){if(i+=1,i>D.fields)throw v("enumeration limit exceeded");if(!Object.hasOwn(c,h))continue;if(o+=1,o>D.fields)throw v("field limit exceeded");let w=Object.getOwnPropertyDescriptor(c,h);if(!w||!Object.hasOwn(w,"value")||w.enumerable!==!0)throw v("object fields must be enumerable own data");p.push([h,w.value])}l("{");for(let h=0;h<p.length;h+=1)h&&l(","),l(a(p[h][0])),l(":"),f(p[h][1],d+1);l("}")}finally{s.delete(c)}};return f(e,0),t.join("")}function Ao(e){let t=Object.create(null);if(e==null)return t;if(typeof e!="object"&&typeof e!="function")throw new TypeError("HTTP headers must be an object");if(j.isProxy(e))throw new TypeError("HTTP headers must not be a proxy");if(Object.getOwnPropertySymbols(e).length>0)throw new TypeError("HTTP headers must not contain symbol fields");let r=new Set;for(let n of Object.keys(e)){if(!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(n))throw new TypeError("HTTP header names must be valid tokens");let o=n.toLowerCase();if(r.has(o))throw new TypeError("HTTP headers contain a duplicate canonical name");r.add(o);let i=Object.getOwnPropertyDescriptor(e,n);if(!i||!Object.hasOwn(i,"value"))throw new TypeError("HTTP headers must contain own data properties");let s=i.value;if(s==null||["object","function","symbol"].includes(typeof s))throw new TypeError("HTTP header values must be scalar");t[n]=String(s)}return t}function vo(){return Object.assign(Object.create(null),{Accept:"application/json"})}function Io(e,t){if(!e)throw new Error(`HTTP redirect from ${t} missing Location`);let r=new URL(String(e),String(t));if(r.protocol!=="http:"&&r.protocol!=="https:")throw new Error(`HTTP redirect from ${t} used unsupported protocol ${r.protocol}`);return r.toString()}function ko(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function $e(e){if((typeof e!="object"||e===null)&&typeof e!="function")return`${typeof e}:${String(e)}`;let t=mr.get(e);return t||(t=wr,wr+=1,mr.set(e,t)),`reference:${t}`}function hr(e){if(!e||typeof e!="object"||Array.isArray(e)||!Object.hasOwn(e,"jsonrpc")||!Object.hasOwn(e,"method")||e.jsonrpc!=="2.0")return!1;let t=typeof e.method=="string"?e.method:"";return t?Oo.has(t)||/^get[A-Z0-9_]/u.test(t)||/^is[A-Z0-9_]/u.test(t)||/^eth_get[A-Z0-9_]/u.test(t):!1}function gr(e,t){if(e==="GET"&&t==null)return!0;if(e!=="POST"||t==null)return!1;let r=t;if(typeof t=="string")try{r=JSON.parse(t)}catch{return!1}if(Array.isArray(r))return r.length>0&&r.every(hr);if(!r||typeof r!="object")return!1;if(Object.hasOwn(r,"jsonrpc")||Object.hasOwn(r,"method"))return hr(r);let n=Object.hasOwn(r,"type")?r.type:null;return typeof n=="string"&&To.has(n)&&(!Object.hasOwn(r,"action")||r.action==null)&&(!Object.hasOwn(r,"signature")||r.signature==null)&&(!Object.hasOwn(r,"nonce")||r.nonce==null)}function No(e,t,r,n={},o=null){let i=fo("sha256"),s=(a,f)=>{let c=String(f);i.update(String(Buffer.byteLength(a,"utf8"))).update(":").update(a),i.update("=").update(String(Buffer.byteLength(c,"utf8"))).update(":").update(c).update(`
2
- `)};s("method",e),s("url",t),Object.keys(r||{}).map((a,f)=>({name:a.toLowerCase(),order:f,value:String(r[a])})).sort((a,f)=>a.name.localeCompare(f.name)||a.order-f.order).forEach((a,f)=>{s(`header-name-${f}`,a.name),s(`header-value-${f}`,a.value)}),s("body",o??"-");for(let a of["untrustedUrl","maxResponseBytes","sameOriginRedirectsOnly","redirectPolicy","maxRedirects","timeoutMs","retries","fetchImpl","realFetch","lookupFn","importUndici","validateResponse"])s(`context-${a}`,n[a]??"-");return i.digest("hex")}function Co(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,fr):Math.min(250*2**e,fr)+Math.floor(Math.random()*100)}function z(e,t={}){let r=new Error(e);return r.retryable=!1,Object.assign(r,t),r}function mt(e,t,r){return z(`HTTP response from ${e} exceeded maxResponseBytes ${r} (${t})`,{oversize:!0})}function Y(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function Ro(e){return e?e.byteLength??e.length??0:0}async function Lo(e,t,{url:r,truncate:n=!1,onOversize:o}={}){if(t==null)return await e.text();let i=Number(e.headers?.get?.("content-length"));if(Number.isFinite(i)&&i>t&&(Y(e),!n))throw mt(r,`content-length ${i}`,t);let s=e.body?.getReader?.();if(!s){let d=await e.text(),m=Buffer.byteLength(d,"utf8");if(m>t){if(!n)throw mt(r,`body ${m} bytes`,t);return Buffer.from(d,"utf8").subarray(0,t).toString("utf8")}return d}let l=[],a=0,f=!1;try{for(;;){let{value:d,done:m}=await s.read();if(m)break;if(d&&(l.push(Buffer.from(d)),a+=Ro(d),a>t)){f=!0;break}}}finally{if(f)try{await s.cancel()}catch{}try{s.releaseLock?.()}catch{}}if(f&&(typeof o=="function"&&o(),!n))throw mt(r,`streamed ${a} bytes`,t);let c=Buffer.concat(l);return(f?c.subarray(0,t):c).toString("utf8")}function $o(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function Po(e,{fetchImpl:t,method:r,headers:n,body:o,timeoutMs:i,lookupFn:s,realFetch:l,untrustedUrl:a=!1,maxResponseBytes:f=null,sameOriginRedirectsOnly:c=!1,importUndici:d,validateResponse:m,signal:p,redirectPolicy:h="follow",maxRedirects:w=Pe}){let S=new AbortController,T=setTimeout(()=>S.abort(),i),P=p?pr?pr([p,S.signal]):p:S.signal,b=null,N=t,M=s?{lookupFn:s}:{};if(a&&!l&&!ft(N))throw z(`HTTP refused ${e}: untrustedUrl requires a pin-capable fetchImpl (see markPinCapableFetch in egress-guard.mjs) or no fetchImpl override so Oracle can pin the connection itself`);let ae=async(y,{status:k=null}={})=>{let O=await ut(y,M);if(!O.ok)throw z(k==null?`HTTP refused ${y}: ${O.error}`:`HTTP redirect to ${y} ${O.error}`,k==null?{}:{status:k});let H=new URL(y).hostname;if(l){if(b&&(await b.close(),b=null),!b)try{b=await lt({requireUndici:!0,...d?{importUndici:d}:{}})}catch(g){throw z(k==null?`HTTP refused ${y}: ${g?.message||g}`:`HTTP redirect to ${y} refused: ${g?.message||g}`,k==null?{}:{status:k})}b.pin(H,O.addresses),N=b.fetch}else ur(N,H,O.addresses);return O};try{let y=String(e),k=Object.assign(Object.create(null),n||{});a&&await ae(y);for(let O=0;O<=w;O+=1){let H=Object.assign(Object.create(null),{method:r,headers:k,body:o,signal:P,redirect:"manual",dispatcher:void 0}),g=await N(y,H);if((h==="error"||w===0)&&g.status>=300&&g.status<400)throw Y(g),z(`HTTP ${g.status} ${r} redirect refused`,{status:g.status,redirectRefused:!0});if(Eo.has(g.status)){let L=c===!0&&r==="POST"&&[307,308].includes(g.status)&&gr(r,o);if(r!=="GET"&&r!=="HEAD"&&!L){Y(g);let I=new Error(`HTTP ${g.status} ${r} ${y} redirected non-idempotent request`);throw I.status=g.status,I}if(O===w)throw Y(g),z(`HTTP ${g.status} ${r} redirect budget exhausted`,{status:g.status,redirectRefused:!0});let er=g.headers?.get?.("location"),B;try{B=Io(er,y)}catch(I){throw Y(g),I}let W=!ko(B,y);if(Y(g),W&&r==="POST"){let I=new Error(`HTTP ${g.status} ${r} cross-origin redirect refused`);throw I.status=g.status,I}if(W&&c){let I=new Error(`HTTP ${g.status} ${r} cross-origin redirect refused`);throw I.status=g.status,I.retryable=!1,I}if(W&&(k=vo(k)),a)await ae(B,{status:g.status});else if(W){let I=await ut(B,M);if(!I.ok){let A=new Error(`HTTP redirect from ${y} ${I.error}`);throw A.status=g.status,A.retryable=!1,A}l&&I.addresses?.length&&(b||(b=await lt(d?{importUndici:d}:{})),b&&(b.pin(new URL(B).hostname,I.addresses),N=b.fetch))}y=B;continue}if(typeof m=="function")try{await m(g,{url:y})}catch(L){throw Y(g),z(L?.message||String(L))}let R=await Lo(g,f,{url:y,onOversize:()=>S.abort()}),ce=$o(R);if(!g.ok){let L=new Error(`HTTP ${g.status} ${r} ${y}`);throw L.status=g.status,L.retryAfter=g.headers?.get?.("retry-after")??null,L.body=ce??R.slice(0,300),L}return ce??R}throw new Error(`HTTP redirect loop for ${e}`)}catch(y){if(S.signal.aborted&&!wt(p)){let k=y&&(typeof y=="object"||typeof y=="function")&&!j.isProxy(y)?y:null,O=k?Object.getOwnPropertyDescriptor(k,"oversize"):null;if(!(O&&Object.hasOwn(O,"value")&&O.value===!0))try{if(!k)throw new TypeError("unsafe rejection");Object.defineProperties(k,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}})}catch{let g=new Error("HTTP request timed out");throw Object.defineProperties(g,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}}),g}}throw y}finally{clearTimeout(T),b&&await b.close()}}async function Be(e,t={}){if(t!=null&&typeof t!="object"&&typeof t!="function")throw new TypeError("HTTP options must be an object");if(t!=null&&j.isProxy(t))throw new TypeError("HTTP options must not be a proxy");let r=new Set(["body","dedupe","fetchImpl","headers","importUndici","lookupFn","maxRedirects","maxResponseBytes","method","redirectPolicy","retries","sameOriginRedirectsOnly","signal","timeoutMs","untrustedUrl","validateResponse"]);if(t!=null){if(Object.getOwnPropertySymbols(t).length>0)throw new TypeError("HTTP options contain unknown fields");for(let A of Object.getOwnPropertyNames(t)){let E=Object.getOwnPropertyDescriptor(t,A);if(!(A==="toJSON"&&E&&Object.hasOwn(E,"value")&&E.value===void 0)){if(!r.has(A))throw new TypeError("HTTP options contain unknown fields");if(!E||!E.enumerable||!Object.hasOwn(E,"value"))throw new TypeError("HTTP options must contain enumerable own data properties")}}}let n=A=>{if(t==null||!Object.hasOwn(t,A))return;let E=Object.getOwnPropertyDescriptor(t,A);if(!E||!Object.hasOwn(E,"value"))throw new TypeError("HTTP options must contain own data properties");return E.value};if(typeof e!="string"||e.length===0||e.length>8192)throw new TypeError("HTTP URL must be a bounded string");let o=n("method");if(o!==void 0&&(typeof o!="string"||!/^[A-Za-z]+$/u.test(o)))throw new TypeError("HTTP method must be a string token");let i=n("timeoutMs");if(i!==void 0&&(!Number.isInteger(i)||i<1||i>12e4))throw new TypeError("HTTP timeoutMs must be a bounded integer");let s=n("retries");if(s!==void 0&&(!Number.isInteger(s)||s<0||s>10))throw new TypeError("HTTP retries must be a bounded integer");let l=n("redirectPolicy");if(l!==void 0&&l!=="follow"&&l!=="error")throw new TypeError('HTTP redirectPolicy must be "follow" or "error"');let a=n("maxRedirects");if(a!==void 0&&(!Number.isInteger(a)||a<0||a>Pe))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${Pe}`);if(l==="error"&&a!==void 0&&a!==0)throw new TypeError('HTTP redirectPolicy "error" requires maxRedirects 0 when supplied');let f=l??"follow",c=f==="error"?0:a??Pe;for(let A of["dedupe","untrustedUrl","sameOriginRedirectsOnly"]){let E=n(A);if(E!==void 0&&typeof E!="boolean")throw new TypeError(`HTTP ${A} must be boolean`)}let d=n("maxResponseBytes");if(d!==void 0&&(!Number.isInteger(d)||d<1||d>64*1024*1024))throw new TypeError("HTTP maxResponseBytes must be a bounded integer");let m=n("signal");if(m!==void 0){if(j.isProxy(m)||!(m instanceof AbortSignal))throw new TypeError("HTTP signal must be a native AbortSignal");try{wt(m)}catch{throw new TypeError("HTTP signal must be a native AbortSignal")}}for(let A of["importUndici","lookupFn","validateResponse"]){let E=n(A);if(E!==void 0&&typeof E!="function")throw new TypeError(`HTTP ${A} must be a function`)}let p=n("fetchImpl"),h=p||globalThis.fetch;if(typeof h!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let w=i??12e3,S=(o||"GET").toUpperCase(),T=n("headers"),P=Ao(T),b=Object.assign(Object.create(null),P);Object.keys(b).some(A=>A.toLowerCase()==="accept")||(b.Accept="application/json");let N=n("body");N!=null&&typeof N!="string"&&(Object.keys(b).find(E=>E.toLowerCase()==="content-type")||(b["Content-Type"]="application/json"),N=So(N));let M=s??mo,ae=n("lookupFn"),y=!p,k=n("untrustedUrl")===!0,O=n("sameOriginRedirectsOnly")===!0,H=n("importUndici"),g=n("validateResponse"),R=m,ce=d??null,L=async()=>{let A;for(let E=0;E<=M;E++){R&&go.call(R);try{return await Po(e,{fetchImpl:h,method:S,headers:b,body:N,timeoutMs:w,lookupFn:ae,realFetch:y,untrustedUrl:k,maxResponseBytes:ce,sameOriginRedirectsOnly:O,importUndici:H,validateResponse:g,signal:R,redirectPolicy:f,maxRedirects:c})}catch(V){A=V;let Q=Ze=>{if(!V||typeof V!="object"&&typeof V!="function"||j.isProxy(V))return;let ue=Object.getOwnPropertyDescriptor(V,Ze);return ue&&Object.hasOwn(ue,"value")?ue.value:void 0},Xe=Q("status"),Gn=Q("oracleTimeout")===!0||Q("name")==="AbortError"||Q("name")==="TimeoutError"||wt(R),Yn=new Set([408,425,429]),Xn=Q("retryable")===!1?!1:Xe!=null?Yn.has(Xe)||po.has(Xe)&&dr.has(S):!Gn&&dr.has(S);if(E===M||!Xn)throw V;let tr=Co(E,Q("retryAfter"));R?await new Promise((Ze,ue)=>{let Zn=setTimeout(Ze,tr);yo.call(R,"abort",()=>{clearTimeout(Zn),ue(bo(R)||new DOMException("Aborted","AbortError"))},{once:!0})}):await _o(tr)}}throw A};if(!(n("dedupe")!==!1&&!R&&gr(S,N)))return L();let B=No(S,e,b,{untrustedUrl:k,maxResponseBytes:ce,sameOriginRedirectsOnly:O,redirectPolicy:f,maxRedirects:c,timeoutMs:w,retries:M,fetchImpl:$e(h),realFetch:y,lookupFn:$e(ae),importUndici:$e(H),validateResponse:$e(g)},N),W=pt.get(B);if(W)return W;let I=L().finally(()=>pt.delete(B));return pt.set(B,I),I}var po,dr,mo,fr,wo,ho,go,yo,pr,wt,bo,Eo,Pe,wc,D,pt,mr,wr,Oo,To,_o,De=u(()=>{lr();po=new Set([408,425,429,500,502,503,504]),dr=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),mo=2,fr=4e3,wo=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,ho=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,go=AbortSignal.prototype.throwIfAborted,yo=EventTarget.prototype.addEventListener,pr=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,wt=e=>e?wo.call(e):!1,bo=e=>e?ho.call(e):void 0,Eo=new Set([301,302,303,307,308]),Pe=3,wc=64*1024,D=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});pt=new Map,mr=new WeakMap,wr=1;Oo=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),To=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);_o=e=>new Promise(t=>setTimeout(t,e))});var yr=u(()=>{});var br=u(()=>{De();yr()});var Er=u(()=>{br()});var Nc,Cc,gt=u(()=>{K();Er();Nc=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"leverage","perp-isolated-margin":"margin","builder-fee-approval":"approveBuilder","hype-stake-deposit":"stake","hype-stake-withdraw":"unstake","hype-delegate":"delegate","hype-undelegate":"delegate"}),Cc=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"updateLeverage","perp-isolated-margin":"updateIsolatedMargin","builder-fee-approval":"approveBuilderFee","hype-stake-deposit":"cDeposit","hype-stake-withdraw":"cWithdraw","hype-delegate":"tokenDelegate","hype-undelegate":"tokenDelegate"})});var Lc,yt=u(()=>{K();Lc="0x"+"00".repeat(32)});var Bo,jc,bt=u(()=>{yt();K();Bo=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),jc=Object.freeze(Bo.map(e=>e[0]))});var je=u(()=>{K()});import{TypedDataEncoder as zc,getAddress as Uc,isAddress as Wc}from"ethers";var jo,Fo,vr=u(()=>{_e();jo=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Fo=Object.freeze({Order:[{name:"salt",type:"uint256"},{name:"maker",type:"address"},{name:"receiver",type:"address"},{name:"makerAsset",type:"address"},{name:"takerAsset",type:"address"},{name:"makingAmount",type:"uint256"},{name:"takingAmount",type:"uint256"},{name:"makerTraits",type:"uint256"}]})});var Jc,Ir=u(()=>{Jc=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var kr=u(()=>{});import{TypedDataEncoder as ru,getAddress as nu,isAddress as ou}from"ethers";var qo,du,Mo,fu,Or=u(()=>{De();Ce();Ir();kr();_e();qo=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),du=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),Mo=Object.freeze({Order:[{name:"sellToken",type:"address"},{name:"buyToken",type:"address"},{name:"receiver",type:"address"},{name:"sellAmount",type:"uint256"},{name:"buyAmount",type:"uint256"},{name:"validTo",type:"uint32"},{name:"appData",type:"bytes32"},{name:"feeAmount",type:"uint256"},{name:"kind",type:"string"},{name:"partiallyFillable",type:"bool"},{name:"sellTokenBalance",type:"string"},{name:"buyTokenBalance",type:"string"}]}),fu=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as wu,getAddress as hu}from"ethers";var bu,Et=u(()=>{vr();Or();bu=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as Nr}from"ethers";var Ko,Bu,Jo,Du,ju,Fu,qu,Go,Mu,Fe=u(()=>{J();Ce();_e();Re();it();st();gt();bt();je();Et();Ko=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),Bu=Object.freeze({swap:5,bridge:5,perps:0,nft:0,mint:0,transfer:0,approve:0,delegate:0,identity:0,order:0,cancel:0,leverage:0,margin:0,approveBuilder:0,stake:0,unstake:0}),Jo=Object.freeze({"0x04e45aaf":{provider:"uniswap-v3",action:"swap",layout:"router02-exact-input-single"},"0x414bf389":{provider:"uniswap-v3",action:"swap",layout:"swap-router-exact-input-single"},"0xc04b8d59":{provider:"uniswap-v3",action:"swap",layout:"exact-input-deadline"},"0xb858183f":{provider:"uniswap-v3",action:"swap",layout:"exact-input"},"0x5ae401dc":{provider:"uniswap-v3",action:"swap",layout:"multicall-deadline"},"0xa026383e":{provider:"aerodrome",action:"swap",layout:"aerodrome-exact-input-single"},"0x7b939232":{provider:"across-v3",action:"bridge",layout:"across-deposit-v3"}}),Du=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),ju=new Nr(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Fu=new Nr(["function mintAllowList(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity,(uint80 mintPrice,uint48 maxTotalMintableByWallet,uint48 startTime,uint48 endTime,uint48 dropStageIndex,uint32 maxTokenSupplyForStage,uint16 feeBps,bool restrictFeeRecipients) mintParams,bytes32[] proof) payable"]),qu=Object.freeze({"0xa0712d68":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0x1249c58b":{provider:"nft-mint",action:"mint",layout:"mint-no-args"},"0x2db11544":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xefef39a1":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xa6f2ae3a":{provider:"nft-mint",action:"mint",layout:"mint-no-args"}}),Go=Object.freeze([...Ko]),Mu=Object.freeze({...Jo})});import{encode as Uu}from"@msgpack/msgpack";import{keccak256 as Vu,verifyTypedData as Ku}from"ethers";var Ju,Gu,xt=u(()=>{Ju=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Gu=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var St=u(()=>{je()});import{ed25519 as nl}from"@noble/curves/ed25519.js";import{base58 as il}from"@scure/base";import{RawTx as al,SigHash as cl,Transaction as ul}from"@scure/btc-signer";import{Transaction as dl,keccak256 as fl,verifyTypedData as pl}from"ethers";var At=u(()=>{xt();St()});import{base58 as El}from"@scure/base";var pe=u(()=>{Fe();Re();J();At()});var Cr=u(()=>{pe();Fe()});import{wordlists as Zo}from"ethers";function ri(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return ti.has(t.length)&&t.every(r=>Zo.en.getWordIndex(r)>=0)}function si(e){let t=_r(e);return ii.has(t)||oi.test(t)}function _r(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function ai(e){let t=_r(e);return[...Qo].some(r=>t.includes(r))}function ci(e,t,r){if(typeof t=="string"){if(ei.some(n=>n.test(t))||ri(t))throw new me(r);if(ni.test(t)&&!si(e))throw new me(r)}}function It(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return ci(r,e,t),e;if(typeof e=="number"){if(!Number.isFinite(e))throw new TypeError(`action receipt: non-finite number at ${t}`);return e}if(typeof e=="bigint")return e.toString();if(Array.isArray(e))return e.map((o,i)=>It(o,`${t}[${i}]`,r));if(typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`action receipt: JSON-like value required at ${t}`);let n={};for(let o of Object.keys(e).sort()){let i=`${t}.${o}`;if(ai(o))throw new me(i);e[o]!==void 0&&(n[o]=It(e[o],i,o))}return n}function qe(e){return It(e)}var Qo,ei,ti,ni,oi,ii,me,we=u(()=>{Qo=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),ei=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],ti=new Set([12,15,18,21,24]);ni=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,oi=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,ii=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);me=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}}});import{closeSync as Pl,constants as ui,fchmodSync as Bl,fsyncSync as Dl,lstatSync as jl,mkdirSync as Fl,openSync as ql,readFileSync as Ml,renameSync as Hl,rmSync as zl,writeFileSync as Ul}from"node:fs";var Kl,Rr=u(()=>{we();pe();Kl=ui.O_NOFOLLOW??0});import{wordlists as Yl}from"ethers";var Lr,Zl,te=u(()=>{we();Lr=64*1024,Zl=32*1024});var fi,td,rd,He=u(()=>{te();fi=["schemaVersion","buildVersion","recordType","execution","custody"],td=[...fi,"recordHash"],rd=Object.freeze({signed:new Set(["workflow.signed","legacy.signed"]),submitted:new Set(["workflow.submitted","legacy.broadcast"]),finalized:new Set(["workflow.finalized"]),reorged:new Set(["workflow.reorged"]),orphaned:new Set(["workflow.orphaned"]),compensating:new Set(["workflow.compensating"]),compensated:new Set(["workflow.compensated"])})});var pi,Hr,ad,Ct=u(()=>{te();He();pi=Object.freeze(["draft","checked","approval","signed","submitted","finalized","reorged","orphaned","compensating","compensated","failed","cancelled"]),Hr=Object.freeze(["workflow.drafted","workflow.checked","workflow.approval_requested","workflow.approval_granted","workflow.signed","workflow.submitted","workflow.finalized","workflow.reorged","workflow.orphaned","workflow.compensating","workflow.compensated","workflow.failed","workflow.cancelled","workflow.annotated"]),ad=new Set(Hr)});var bi,zr=u(()=>{te();Ct();bi=64*1024*1024});var md,wd,hd,Ur=u(()=>{md=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),wd=Object.freeze(["read","simulate"]),hd=1440*60});function _t(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return Ei.test(t)||xi.includes(r)}function Si(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>Vr.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function Kr(e){let t;try{t=JSON.stringify(e)}catch(o){throw new F("$",`unserializable-payload: ${String(o?.message||o)}`)}if(t===void 0)return"null";let r=Si(t);for(let{rule:o,re:i}of Wr)if(i.test(r))throw new F("$<serialized>",o);if(/(?:^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{64}(?![0-9a-fA-F])/.test(r))throw new F("$<serialized>","raw-32-byte-hex-embedded");return JSON.parse(t,(o,i)=>{if(o&&_t(o))throw new F(`$<serialized>.${o}`,"forbidden-key-name");return i}),t}function U(e,t="$",r=new Set,n=""){if(e==null)return e;if(typeof e=="string"){let o=Vr.includes(String(n).toLowerCase().replace(/[_-]/g,""));for(let{rule:i,re:s}of Wr)if(!(o&&i.startsWith("raw-32-byte-hex"))&&s.test(e))throw new F(t,i);return e}if(typeof e!="object"||r.has(e)||(r.add(e),ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e;if(e instanceof Map){for(let[o,i]of e.entries()){if(typeof o=="string"&&_t(o))throw new F(`${t}[${JSON.stringify(o)}]`,"forbidden-key-name");U(o,`${t}[key]`,r),U(i,`${t}[${String(o)}]`,r)}return e}if(e instanceof Set){let o=0;for(let i of e.values())U(i,`${t}[${o++}]`,r);return e}if(Array.isArray(e))return e.forEach((o,i)=>U(o,`${t}[${i}]`,r)),e;for(let[o,i]of Object.entries(e)){if(_t(o))throw new F(`${t}.${o}`,"forbidden-key-name");U(i,`${t}.${o}`,r,o)}return e}var F,Ei,xi,Wr,Vr,Rt=u(()=>{Ur();F=class extends Error{constructor(t,r){super(`secret material must never appear in a public API object (at ${t}, rule: ${r})`),this.name="SecretLeakError",this.path=t,this.rule=r}},Ei=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,xi=Object.freeze(["privkey","wif","xprv","seed"]);Wr=Object.freeze([{rule:"raw-32-byte-hex-key",re:/^0x[0-9a-fA-F]{64}$/},{rule:"raw-32-byte-hex-bare",re:/^[0-9a-fA-F]{64}$/},{rule:"extended-private-key",re:/\b(?:xprv|tprv|yprv|zprv)[1-9A-HJ-NP-Za-km-z]{107}\b/},{rule:"bitcoin-wif",re:/\b[59KLc][1-9A-HJ-NP-Za-km-z]{50,51}\b/},{rule:"bip39-mnemonic",re:/\b(?:[a-z]{3,8}\s+){11,23}[a-z]{3,8}\b/},{rule:"bearer-token",re:/bearer\s+[A-Za-z0-9._~+/=-]+/i},{rule:"pem-private-key",re:/-----BEGIN[A-Z ]*PRIVATE KEY-----/},{rule:"keystore-path",re:/keystore/i},{rule:"signer-url",re:/https?:\/\/\S*sign/i},{rule:"authorization-header",re:/authorization\s*:/i}]),Vr=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"])});var Lt,Od,Jr=u(()=>{Rt();Lt=Object.freeze(["intent","quote_comparison","simulation","prepared","approval","signed","broadcast","settlement","balance_delta","position"]),Od=Object.freeze(Object.fromEntries(Lt.map((e,t)=>[e,Object.freeze(t+1<Lt.length?[Lt[t+1]]:[])])))});var Ai,Gr=u(()=>{Jr();te();He();Ai=Object.freeze({intent:"draft",quote_comparison:"draft",simulation:"draft",prepared:"checked",approval:"approval",signed:"signed",broadcast:"submitted",settlement:"finalized",balance_delta:"compensated",position:"compensated"})});var Yr=u(()=>{te();He();Ct();zr();Gr()});var Ii,ki,Oi,ff,pf,mf,wf,hf,Ti,gf,Xr=u(()=>{Ii=Object.freeze(["owner","operator","agent","viewer"]),ki=Object.freeze(["tenant","config","policy","grant","workflow","trade","receipt","audit","telemetry","context","lifecycle"]),Oi=Object.freeze({read:"read",create:"create",update:"update",delete:"delete",manage:"manage",prepare:"prepare",cancel:"cancel",export:"export",approve:"approve"}),ff=Object.freeze(["owner"]),pf=Object.freeze({ALLOW_ROLE_PERMISSION:"allow.role_permission",DENY_MISSING_CONTEXT:"deny.missing_context",DENY_INVALID_CONTEXT:"deny.invalid_context",DENY_INVALID_REQUEST:"deny.invalid_request",DENY_UNKNOWN_RESOURCE:"deny.unknown_resource",DENY_UNKNOWN_ACTION:"deny.unknown_action",DENY_UNBOUND_OBJECT:"deny.unbound_object",DENY_TENANT_MISMATCH:"deny.tenant_mismatch",DENY_RESOURCE_MISMATCH:"deny.resource_mismatch",DENY_ROLE_PERMISSION:"deny.role_permission",DENY_POLICY_NOT_APPROVER:"deny.policy_not_approver"}),mf=new Set(Ii),wf=new Set(ki),hf=new Set(Object.values(Oi)),Ti=Object.freeze({owner:Object.freeze(["tenant:read","tenant:manage","config:read","config:manage","policy:read","policy:manage","grant:read","grant:create","grant:update","grant:delete","grant:manage","workflow:read","workflow:create","workflow:update","workflow:delete","workflow:cancel","workflow:approve","trade:read","trade:prepare","receipt:read","receipt:export","audit:read","audit:export","telemetry:read","telemetry:create","telemetry:export","context:read","context:create","context:update","context:delete","context:manage","context:export","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:delete","lifecycle:manage","lifecycle:approve","lifecycle:export"]),operator:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","workflow:cancel","trade:read","trade:prepare","receipt:read","audit:read","telemetry:read","telemetry:create","context:read","context:create","context:update","context:delete","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:manage"]),agent:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","trade:read","trade:prepare","receipt:read","telemetry:create","context:read","context:create","context:update","lifecycle:read"]),viewer:Object.freeze(["tenant:read","config:read","grant:read","workflow:read","trade:read","receipt:read","audit:read","telemetry:read","context:read","lifecycle:read"])}),gf=Object.freeze(Object.fromEntries(Object.entries(Ti).map(([e,t])=>[e,Object.freeze([...t])])))});var Ni,Ci,_i,xf,Sf,Af,vf,If,kf,$t=u(()=>{Xr();Ni=Object.freeze(["succeeded","denied","invalid","failed","cancelled","timed_out","unavailable","skipped"]),Ci=Object.freeze(["workflow","task","intent","plan","run","event","eval"]),_i=Object.freeze(["taskId","intentId","planId","runId","eventId"]),xf=Object.freeze({maxAttributes:24,maxKeyLength:48,maxStringLength:256,maxArrayLength:8}),Sf=new Set(Ni),Af=new Set(Ci),vf=new Set(_i),If=Object.freeze(["authorization","bearer","cookie","credential","password","passphrase","secret","token","privatekey","privkey","seed","mnemonic","keystore","signature","prompt","systemmessage","usermessage","assistantmessage","rawtransaction","signedtransaction","serializedtransaction","transactionbytes","calldata","callbytes","inputdata"]),kf=Object.freeze({taskId:"x-oracle-task-id",intentId:"x-oracle-intent-id",planId:"x-oracle-plan-id",runId:"x-oracle-run-id",eventId:"x-oracle-event-id"})});var Rf,Zr=u(()=>{Yr();$t();Rf=Object.freeze({"workflow.cancelled":"cancelled","workflow.failed":"failed"})});var jf,Qr=u(()=>{$t();jf=32*1024*1024});var qf,Mf,Hf,re=u(()=>{qf=Object.freeze({N:1<<17,r:8,p:1}),Mf=256*1024*1024,Hf=16*1024});var Uf,en=u(()=>{Uf=Object.freeze({1:{name:"ethereum",mode:"mempool-private",endpoints:["https://rpc.flashbots.net/fast","https://rpc.mevblocker.io"]},8453:{name:"base",mode:"sequencer",endpoints:["https://mainnet-sequencer.base.org"]},10:{name:"optimism",mode:"sequencer",endpoints:["https://mainnet-sequencer.optimism.io"]},42161:{name:"arbitrum",mode:"sequencer",endpoints:["https://arb1-sequencer.arbitrum.io/rpc"]},56:{name:"bsc",mode:"mempool-private",endpoints:["https://rpc.48.club","https://bsc.rpc.blxrbdn.com"]},137:{name:"polygon",mode:"mempool-private",endpoints:["https://polygon-bor-rpc.publicnode.com"]},43114:{name:"avalanche",mode:"public-only",endpoints:[]},999:{name:"hyperevm",mode:"public-only",endpoints:[]}})});import{homedir as Pt}from"node:os";import{join as Bt}from"node:path";var tn,Ri,Jf,rn=u(()=>{tn=process.env.ORACLE_PUBLIC_DESKTOP==="1",Ri=tn?process.env.ORACLE_CONFIG_DIR||Bt(Pt(),".config","oracle"):Bt(Pt(),".config","oracle"),Jf=tn?Ri:Bt(Pt(),".config","mad-desk")});var Qf,ep,tp,nn=u(()=>{rn();Qf="0".repeat(64),ep=Object.freeze({PREPARE:"exec.prepare",SIGN:"exec.sign",BROADCAST:"exec.broadcast",POLICY_REJECT:"policy.reject",AUTH_GRANT:"auth.grant",AUTH_OK:"auth.verify.ok",AUTH_FAIL:"auth.verify.fail"}),tp=Promise.resolve()});var Dt=u(()=>{nn();K();re();pe()});var sn=u(()=>{});var un={};Oe(un,{SIGN_TIME_REVIEW_VERSION:()=>Li,SignTimeReviewSecretError:()=>he,createSignTimeReview:()=>cn});function jt(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string"){let o=e.trim().split(/\s+/);if(ji.test(e)||Fi.has(o.length)&&o.every(i=>/^[a-z]+$/i.test(i)))throw new he(t);return e}if(typeof e=="bigint")return e.toString();if(typeof e=="number"){if(!Number.isSafeInteger(e))throw new TypeError(`sign-time review: safe integer required at ${t}`);return e}if(Array.isArray(e))return e.map((o,i)=>jt(o,`${t}[${i}]`,r));X(e,t);let n={};for(let o of Object.keys(e).sort()){let i=o.replace(/[^a-z0-9]/gi,"");if(Di.test(i))throw new he(`${t}.${o}`);e[o]!==void 0&&(n[o]=jt(e[o],`${t}.${o}`,o))}return n}function X(e,t){if(e==null||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`sign-time review: ${t} must be a plain object`);return e}function ge(e,t){if(e==null||e==="")throw new TypeError(`sign-time review: ${t} required`);return e}function ne(e,t){let r=String(ge(e,t)).toLowerCase();if(!$i.test(r))throw new TypeError(`sign-time review: ${t} must be an EVM address`);return r}function q(e,t,{positive:r=!1}={}){try{let n=BigInt(ge(e,t));if(n<0n||r&&n===0n)throw new Error;return n.toString()}catch{throw new TypeError(`sign-time review: ${t} must be an unsigned integer`)}}function Ft(e,t){if(typeof e!="string"||e.length===0||e.length>500||e!==e.trim())throw new TypeError(`sign-time review: ${t} must be non-empty text`);return e}function an(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))an(t);Object.freeze(e)}return e}function qi(e,t){if(typeof e=="boolean")return{passed:e,reason:e?"passed":"failed"};X(e,t);let r=e.passed??e.ok??e.allowed;if(typeof r!="boolean")throw new TypeError(`sign-time review: ${t} needs a boolean result`);let n=e.reason??e.message??e.name??(r?"passed":"failed");return{...e,passed:r,reason:Ft(String(n),`${t}.reason`)}}function Mi(e){if(!Array.isArray(e))throw new TypeError("sign-time review: policyChecks must be an array");let t=e.map((n,o)=>qi(n,`policyChecks[${o}]`)),r=t.filter(n=>!n.passed);return{checks:t,passed:t.length-r.length,failed:r.length,reasons:r.map(n=>n.reason)}}function Hi(e){if(e==null)return null;if(X(e,"simulation"),typeof e.status!="string"||!["ok","success","failed","error","unavailable","unknown"].includes(e.status))throw new TypeError("sign-time review: simulation.status is invalid");if(e.willRevert!==!0&&e.willRevert!==!1&&e.willRevert!==null)throw new TypeError("sign-time review: simulation.willRevert must be boolean or null");let t={status:e.status,willRevert:e.willRevert??null,summary:Ft(String(e.summary??"simulation result recorded"),"simulation.summary")};return e.gasEstimate!=null&&(t.gasEstimate=q(e.gasEstimate,"simulation.gasEstimate")),e.gasLimit!=null&&(t.gasLimit=q(e.gasLimit,"simulation.gasLimit")),t}function zi(e){if(e==null)return null;if(!Array.isArray(e)||e.length===0)throw new TypeError("sign-time review: assetDeltas must be a non-empty array");return e.map((t,r)=>{X(t,`assetDeltas[${r}]`);let n=q(t.before,`assetDeltas[${r}].before`),o=q(t.after,`assetDeltas[${r}].after`),i=(BigInt(o)-BigInt(n)).toString(),s;try{s=t.delta==null?i:BigInt(t.delta).toString()}catch{throw new TypeError(`sign-time review: assetDeltas[${r}].delta must be an integer`)}if(s!==i)throw new TypeError(`sign-time review: assetDeltas[${r}].delta does not match before/after`);return{...t,asset:Ft(String(ge(t.asset??t.token,`assetDeltas[${r}].asset`)),`assetDeltas[${r}].asset`),before:n,after:o,delta:s}})}function Ui(e){if(e==null)return[];if(!Array.isArray(e))throw new TypeError("sign-time review: approvalDeltas must be an array");return e.map((t,r)=>{X(t,`approvalDeltas[${r}]`);let n=q(t.amount??t.after,`approvalDeltas[${r}].amount`);if(t.revokeLike!=null&&typeof t.revokeLike!="boolean")throw new TypeError(`sign-time review: approvalDeltas[${r}].revokeLike must be boolean`);return{token:ne(t.token,`approvalDeltas[${r}].token`),spender:ne(t.spender,`approvalDeltas[${r}].spender`),owner:ne(t.owner,`approvalDeltas[${r}].owner`),amount:n,revokeLike:t.revokeLike??BigInt(n)===0n}})}function cn(e={}){X(e,"input");let t=jt(e),r=t.tx==null?t:X(t.tx,"tx"),n=q(t.chainId??r.chainId,"chainId",{positive:!0}),o=ne(t.account??t.from??r.from,"account/from"),i=ne(t.destination??t.to??r.to,"destination/to"),s=String(ge(t.prepareHash,"prepareHash")).toLowerCase();if(!Bi.test(s))throw new TypeError("sign-time review: prepareHash must be a 32-byte hash");let l=t.route??t.venue;if(l==null)throw new TypeError("sign-time review: route/venue required");let a=t.decodedCalldata??t.decodedAction;if(a==null)throw new TypeError("sign-time review: decodedCalldata or decodedAction required");let f=String(ge(t.calldata??t.data??r.data,"calldata/data")).toLowerCase();if(!Pi.test(f))throw new TypeError("sign-time review: calldata/data must be even-length hex");let c=t.policyChecks!==void 0&&t.policyChecks!==null,d=Mi(c?t.policyChecks:[]),m=Hi(t.simulation),p=zi(t.assetDeltas),h=Ui(t.approvalDeltas),w=t.allowlistHits??[];if(!Array.isArray(w))throw new TypeError("sign-time review: allowlistHits must be an array");let S=m?.willRevert===!0||["failed","error"].includes(m?.status),T=m!=null&&m.willRevert===!1&&["ok","success"].includes(m.status),P=S||d.failed>0?"BLOCKED":T&&c&&d.checks.length>0&&p!=null?"READY":"UNKNOWN",b=typeof a=="string"?a:a.method??a.action??a.type??"transaction",N=`${P}: review ${b} on chain ${n}; policy ${d.passed} passed, ${d.failed} failed; ${p?.length??0} asset delta${p?.length===1?"":"s"}; local signature required`,M={reviewVersion:1,status:P,requiresLocalSignature:!0,signingLocal:!0,custody:"none",execution:"review-only",chainId:n,account:o,from:o,route:l,venue:t.venue??(typeof l=="string"?l:l.venue??l.provider??null),destination:i,to:i,...t.spender==null?{}:{spender:ne(t.spender,"spender")},prepareHash:s,...t.decodedCalldata!==void 0?{decodedCalldata:t.decodedCalldata}:{decodedAction:t.decodedAction},calldata:f,data:f,selector:f.length>=10?f.slice(0,10):null,value:q(t.value??r.value??0,"value"),...(t.gasEstimate??r.gasEstimate)==null?{}:{gasEstimate:q(t.gasEstimate??r.gasEstimate,"gasEstimate")},...(t.gasLimit??r.gasLimit)==null?{}:{gasLimit:q(t.gasLimit??r.gasLimit,"gasLimit")},simulation:m,policyChecks:d,allowlistHits:w,assetDeltas:p,approvalDeltas:h,summary:N};return an(M)}var Li,$i,Pi,Bi,Di,ji,Fi,he,qt=u(()=>{Li=1,$i=/^0x[0-9a-f]{40}$/,Pi=/^0x(?:[0-9a-f]{2})*$/,Bi=/^(?:0x)?[0-9a-f]{64}$/,Di=/(privatekey|privkey|secretkey|seedphrase|mnemonic|passphrase|password|keystore|keymaterial|wif|xprv|xpriv|bearer|authorization|signature|apikey|credential)/i,ji=/\b(?:[5KL][1-9A-HJ-NP-Za-km-z]{50,51}|xprv[0-9A-Za-z]{50,})\b/,Fi=new Set([12,15,18,21,24]),he=class extends Error{constructor(t){super(`sign-time review refused: secret-bearing field at ${t}`),this.name="SignTimeReviewSecretError",this.code="SIGN_TIME_REVIEW_SECRET"}}});import{readFileSync as dp,readdirSync as fp,existsSync as Wi}from"node:fs";import{dirname as Vi,join as ye}from"node:path";import{fileURLToPath as Ki}from"node:url";function Ji(){let e=[ye(be,"descriptors"),ye(be,"clear-sign","descriptors"),ye(be,"..","clear-sign","descriptors"),ye(be,"..","..","clear-sign","descriptors"),ye(be,"..","..","..","clear-sign","descriptors")];for(let t of e)if(Wi(t))return t;return e[0]}var be,hp,gp,ln=u(()=>{J();be=Vi(Ki(import.meta.url));hp=Ji(),gp=(1n<<256n)-1n});var dn=u(()=>{qt();J();ln()});import{Wallet as Ip}from"ethers";import{base58 as Op}from"@scure/base";import{ed25519 as Np}from"@noble/curves/ed25519.js";import{NETWORK as _p,TEST_NETWORK as Rp,WIF as Lp,p2wpkh as $p}from"@scure/btc-signer";import{pubECDSA as Bp}from"@scure/btc-signer/utils.js";var fn=u(()=>{});var Fp,qp,Mp,Hp,zp,Up,Wp,Vp,Kp,Jp,Gp,pn=u(()=>{Dt();Fp=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),qp=Object.freeze(["binance","bybit","okx","coinbase"]),Mp=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),Hp=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),zp=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Up=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Wp=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Vp=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),Kp=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),Jp=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),Gp=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var mn=u(()=>{re()});var Xi,wn,Ue=u(()=>{Xi=Object.freeze({binance:Object.freeze({create:["POST","/api/v3/order"],cancel:["DELETE","/api/v3/order"],status:["GET","/api/v3/order"]}),bybit:Object.freeze({create:["POST","/v5/order/create"],cancel:["POST","/v5/order/cancel"],status:["GET","/v5/order/realtime"]}),okx:Object.freeze({create:["POST","/api/v5/trade/order"],cancel:["POST","/api/v5/trade/cancel-order"],status:["GET","/api/v5/trade/order"]}),coinbase:Object.freeze({create:["POST","/orders"],cancel:["DELETE","/orders/{order_id}"],status:["GET","/orders/{order_id}"]})}),wn=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var hn=u(()=>{Ue()});var im,gn=u(()=>{Ue();hn();im=256*1024});var yn=u(()=>{Ue();gn()});var bn=u(()=>{re()});import C from"node:path";import Zi from"node:os";import{createHash as Qi,randomBytes as Qm}from"node:crypto";import{Interface as Mt,keccak256 as tw}from"ethers";import{Transaction as nw}from"@scure/btc-signer";import{ed25519 as iw}from"@noble/curves/ed25519.js";function En(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||C.join(process.env.XDG_STATE_HOME||C.join(Zi.homedir(),".local","state"),"oracle"),r=Qi("sha256").update(C.resolve(e)).digest("hex").slice(0,16);return{vault:C.join(e,"vault.json"),policy:C.join(e,"signer-policy.json"),policyKey:C.join(e,"policy-integrity-key"),policyAnchor:C.join(t,`signer-policy-${r}.high-water`),ledger:C.join(e,"signer-ledger.json"),ledgerAnchor:C.join(t,`signer-ledger-${r}.high-water`),executionOutbox:C.join(e,"signer-execution-outbox.json"),cexOrders:C.join(e,"cex-orders.json"),cexOrdersAnchor:C.join(t,`cex-orders-${r}.high-water`),token:C.join(e,"signer-token"),lock:C.join(t,`signer-${r}.lock`),workflowLedger:C.join(e,"workflow-events.jsonl")}}var Bw,Dw,jw,xn=u(()=>{Cr();Rr();Zr();Qr();pe();re();en();Dt();sn();J();dn();Fe();Re();At();gt();bt();je();St();yt();xt();it();st();Et();fn();pn();mn();yn();bn();Bw=new Mt(["function collection() view returns (address)","function token() view returns (address)","function robinhoodSwapFeeWei() view returns (uint256)","function quoteSpecificBuy(uint256 tokenId) view returns (uint256 totalCost,uint256 baseCost,uint256 fee,uint256 protocolFee,bool available)","function quoteSellNFT() view returns (uint256 netPayout,uint256 grossPayout,uint256 fee,uint256 protocolFee)","function inventory(uint256 tokenId) view returns (bool)","function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Dw=new Mt(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),jw=new Mt(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import Ht from"node:fs";import Sn from"node:path";import{homedir as es}from"node:os";function ts(){return process.env.ORACLE_CONFIG_DIR||Sn.join(es(),".config","oracle")}function Ee(){let e=En(Sn.join(ts(),"signer")),t=Ht.existsSync(e.vault),r=Ht.existsSync(e.lock),n=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:Ht.existsSync(e.policy),armed:t&&!r,disarmed:r,capabilities:{swap:n,bridge:n},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var Gw,zt=u(()=>{et();or();xn();re();Gw=Object.freeze([{type:"function",function:{name:"vault_status",description:"Read local Oracle vault/signer readiness. Never returns key material.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_status",description:"Ping the loopback signer. Fails closed if it is not running.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_pending",description:"List pending local-signer artifacts. Read-only. Does not approve, sign, or broadcast.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_queue",description:"Queue a prepared unsigned artifact on the loopback signer. Does not broadcast.",parameters:{type:"object",properties:{artifact:{type:"object"}},required:["artifact"],additionalProperties:!1}}},{type:"function",function:{name:"signer_deny",description:"Drop one pending local-signer artifact. Nothing signed.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_execute",description:"Broadcast one already-confirmed local artifact. Requires a one-use confirmationNonce from the local signer TTY confirm. Cannot mint confirmation itself.",parameters:{type:"object",properties:{artifact:{type:"object"},confirmationNonce:{type:"string",minLength:32,maxLength:128}},required:["artifact","confirmationNonce"],additionalProperties:!1}}},{type:"function",function:{name:"signer_disarm",description:"Global kill switch. Stops the local signer from broadcasting.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"receipt_report",description:"Receipt or it did not happen. Requires transactionHash/hash/txid.",parameters:{type:"object",properties:{receipt:{type:"object"},transactionHash:{type:"string"},hash:{type:"string"},txid:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"watch_create",description:"Create an alert-only watch. Never execute.",parameters:{type:"object",properties:{chain:{type:"string"},token:{type:"string"},condition:{type:"string"},note:{type:"string"}},required:["chain","token","condition"],additionalProperties:!1}}},{type:"function",function:{name:"watch_list",description:"List local alert-only watches.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"portfolio_snapshot",description:"How to read the one portfolio snapshot. knownUsd is incomplete if a provider is missing.",parameters:{type:"object",properties:{},additionalProperties:!1}}}])});import We from"node:fs";import rs from"node:os";import ie from"node:path";import{fileURLToPath as ns}from"node:url";function An(){return process.env.ORACLE_FAKE_HOME||rs.homedir()}function is(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function Ve(){return is()?process.env.ORACLE_CONFIG_DIR||ie.join(An(),".config","oracle"):ie.join(An(),".config","oracle")}function ss(){return ie.join(Ve(),"desk.json")}function as(){return ie.join(Ve(),"env")}function oe({force:e=!1}={}){if(oe._done&&!e)return oe._result||null;oe._done=!0;let t={},r=(o,i)=>{if(i==null)return;let s=String(i).trim();s&&(process.env[o]!=null&&String(process.env[o]).trim()!==""||(process.env[o]=s,t[o]=s))};try{let o=as();if(We.existsSync(o))for(let i of We.readFileSync(o,"utf8").split(/\r?\n/)){let s=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let l=s[2];(l.startsWith('"')&&l.endsWith('"')||l.startsWith("'")&&l.endsWith("'"))&&(l=l.slice(1,-1)),r(s[1],l)}}catch{}try{let o=ss();if(We.existsSync(o)){let i=JSON.parse(We.readFileSync(o,"utf8"));i&&typeof i=="object"&&(r("ORACLE_DESK_URL",i.deskUrl||i.dataUrl||i.url),r("ORACLE_DATA_URL",i.dataUrl||i.deskUrl||i.url),r("ORACLE_API_URL",i.apiUrl||i.dataUrl||i.deskUrl),r("ORACLE_PUBLIC_URL",i.publicUrl||i.deskUrl||i.dataUrl),r("ORACLE_EXEC_URL",i.execUrl),r("MAD_DESK_URL",i.deskUrl||i.dataUrl))}}catch{}let n=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return n&&(r("ORACLE_DESK_URL",n),r("ORACLE_DATA_URL",n),r("ORACLE_API_URL",n),r("ORACLE_PUBLIC_URL",n),r("MAD_DESK_URL",n)),oe._result=Object.keys(t).length?t:null,oe._result}var os,th,vn=u(()=>{os=ie.dirname(ns(import.meta.url)),th=ie.resolve(os,"../..");try{oe()}catch{}});function Ke(e){return String(e||"").trim()||void 0}function us(e,{required:t=!1}={}){let r=Ke(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!cs.has(r))throw new Error(`unsupported provider: ${r}`);return r}function ls(e,{required:t=!1}={}){let r=Ke(e);if(!r){if(t)throw new Error("model is required");return}if(r.includes("..")||r.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(r))throw new Error("invalid model id");return r}function ds(e){let t=Ke(e);if(!t||t.length>2048)throw new Error("invalid custom base URL");let r;try{r=new URL(t)}catch{throw new Error("invalid custom base URL")}let n=r.hostname.toLowerCase().replace(/^\[|\]$/g,""),o=n==="localhost"||n==="127.0.0.1"||n==="::1";if(r.protocol!=="https:"&&!(r.protocol==="http:"&&o)||r.username||r.password||r.search||r.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return r.toString().replace(/\/+$/,"")}function In({provider:e,model:t,baseUrl:r}={},{requireModel:n=!1}={}){let o=us(e),i=ls(t,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:ds(r)};if(Ke(r))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var cs,kn=u(()=>{cs=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"])});import On from"node:fs";import fs from"node:path";function ms(){return fs.join(Ve(),"model.json")}function se(e){return String(e||"").trim()||void 0}function ws(e={}){let t=se(e.backend)?.toLowerCase()||"auto",r=In({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),n=se(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=se(e.reasoningEffort),s=se(e.computeHost||e.remoteHost),l=se(e.computeUser||e.remoteUser),a=se(e.computePath||e.remotePath);if(!ps.has(t))throw new Error(`unsupported backend: ${t}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(t))throw new Error("remote compute backends are disabled in the public desktop");if(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))throw new Error("api key env must be an uppercase environment variable name");if(t==="remote"&&!s)throw new Error("remote backend requires computeHost");return{backend:t,...r,...n?{apiKeyEnv:n}:{},...Number.isFinite(o)&&o>0?{contextLength:o}:{},...i?{reasoningEffort:i}:{},...s?{computeHost:s}:{},...l?{computeUser:l}:{},...a?{computePath:a}:{}}}function Tn(){let e=ms();if(!On.existsSync(e))return null;try{return ws(JSON.parse(On.readFileSync(e,"utf8")))}catch{return null}}var ps,Nn=u(()=>{vn();kn();ps=new Set(["auto","standalone","hermes","remote","arch"])});import{Interface as hs,getAddress as gs}from"ethers";function Ut(e,t){try{return gs(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function ys(e){let t=String(e||"").trim();if(!/^0x[0-9a-fA-F]{64}$/.test(t))throw new Error("txHash must be a 32-byte hex transaction hash");return t.toLowerCase()}function Wt(e){return e==null?null:Number.parseInt(String(e),16)}function Es(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let n=nr(e,r);return n||bs[Number(e)]||null}function Ss(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!xs.test(r))throw new Error(`evm-rpc: ${t} refused \u2014 @oracle-agent/oracle is prepare-only (read RPC only; no broadcast/sign)`);return r}function As(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function vs(e){if(e?.error)throw As(e.error);return e?.result}function Is(e,t,r){return`${e}
2
+ `)};s("method",e),s("url",t),Object.keys(r||{}).map((a,f)=>({name:a.toLowerCase(),order:f,value:String(r[a])})).sort((a,f)=>a.name.localeCompare(f.name)||a.order-f.order).forEach((a,f)=>{s(`header-name-${f}`,a.name),s(`header-value-${f}`,a.value)}),s("body",o??"-");for(let a of["untrustedUrl","maxResponseBytes","sameOriginRedirectsOnly","redirectPolicy","maxRedirects","timeoutMs","retries","fetchImpl","realFetch","lookupFn","importUndici","validateResponse"])s(`context-${a}`,n[a]??"-");return i.digest("hex")}function Co(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,fr):Math.min(250*2**e,fr)+Math.floor(Math.random()*100)}function z(e,t={}){let r=new Error(e);return r.retryable=!1,Object.assign(r,t),r}function mt(e,t,r){return z(`HTTP response from ${e} exceeded maxResponseBytes ${r} (${t})`,{oversize:!0})}function Y(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function Ro(e){return e?e.byteLength??e.length??0:0}async function Lo(e,t,{url:r,truncate:n=!1,onOversize:o}={}){if(t==null)return await e.text();let i=Number(e.headers?.get?.("content-length"));if(Number.isFinite(i)&&i>t&&(Y(e),!n))throw mt(r,`content-length ${i}`,t);let s=e.body?.getReader?.();if(!s){let d=await e.text(),m=Buffer.byteLength(d,"utf8");if(m>t){if(!n)throw mt(r,`body ${m} bytes`,t);return Buffer.from(d,"utf8").subarray(0,t).toString("utf8")}return d}let l=[],a=0,f=!1;try{for(;;){let{value:d,done:m}=await s.read();if(m)break;if(d&&(l.push(Buffer.from(d)),a+=Ro(d),a>t)){f=!0;break}}}finally{if(f)try{await s.cancel()}catch{}try{s.releaseLock?.()}catch{}}if(f&&(typeof o=="function"&&o(),!n))throw mt(r,`streamed ${a} bytes`,t);let c=Buffer.concat(l);return(f?c.subarray(0,t):c).toString("utf8")}function $o(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function Po(e,{fetchImpl:t,method:r,headers:n,body:o,timeoutMs:i,lookupFn:s,realFetch:l,untrustedUrl:a=!1,maxResponseBytes:f=null,sameOriginRedirectsOnly:c=!1,importUndici:d,validateResponse:m,signal:p,redirectPolicy:h="follow",maxRedirects:w=Pe}){let S=new AbortController,T=setTimeout(()=>S.abort(),i),P=p?pr?pr([p,S.signal]):p:S.signal,b=null,N=t,M=s?{lookupFn:s}:{};if(a&&!l&&!ft(N))throw z(`HTTP refused ${e}: untrustedUrl requires a pin-capable fetchImpl (see markPinCapableFetch in egress-guard.mjs) or no fetchImpl override so Oracle can pin the connection itself`);let ae=async(y,{status:k=null}={})=>{let O=await ut(y,M);if(!O.ok)throw z(k==null?`HTTP refused ${y}: ${O.error}`:`HTTP redirect to ${y} ${O.error}`,k==null?{}:{status:k});let H=new URL(y).hostname;if(l){if(b&&(await b.close(),b=null),!b)try{b=await lt({requireUndici:!0,...d?{importUndici:d}:{}})}catch(g){throw z(k==null?`HTTP refused ${y}: ${g?.message||g}`:`HTTP redirect to ${y} refused: ${g?.message||g}`,k==null?{}:{status:k})}b.pin(H,O.addresses),N=b.fetch}else ur(N,H,O.addresses);return O};try{let y=String(e),k=Object.assign(Object.create(null),n||{});a&&await ae(y);for(let O=0;O<=w;O+=1){let H=Object.assign(Object.create(null),{method:r,headers:k,body:o,signal:P,redirect:"manual",dispatcher:void 0}),g=await N(y,H);if((h==="error"||w===0)&&g.status>=300&&g.status<400)throw Y(g),z(`HTTP ${g.status} ${r} redirect refused`,{status:g.status,redirectRefused:!0});if(Eo.has(g.status)){let L=c===!0&&r==="POST"&&[307,308].includes(g.status)&&gr(r,o);if(r!=="GET"&&r!=="HEAD"&&!L){Y(g);let I=new Error(`HTTP ${g.status} ${r} ${y} redirected non-idempotent request`);throw I.status=g.status,I}if(O===w)throw Y(g),z(`HTTP ${g.status} ${r} redirect budget exhausted`,{status:g.status,redirectRefused:!0});let er=g.headers?.get?.("location"),B;try{B=Io(er,y)}catch(I){throw Y(g),I}let W=!ko(B,y);if(Y(g),W&&r==="POST"){let I=new Error(`HTTP ${g.status} ${r} cross-origin redirect refused`);throw I.status=g.status,I}if(W&&c){let I=new Error(`HTTP ${g.status} ${r} cross-origin redirect refused`);throw I.status=g.status,I.retryable=!1,I}if(W&&(k=vo(k)),a)await ae(B,{status:g.status});else if(W){let I=await ut(B,M);if(!I.ok){let A=new Error(`HTTP redirect from ${y} ${I.error}`);throw A.status=g.status,A.retryable=!1,A}l&&I.addresses?.length&&(b||(b=await lt(d?{importUndici:d}:{})),b&&(b.pin(new URL(B).hostname,I.addresses),N=b.fetch))}y=B;continue}if(typeof m=="function")try{await m(g,{url:y})}catch(L){throw Y(g),z(L?.message||String(L))}let R=await Lo(g,f,{url:y,onOversize:()=>S.abort()}),ce=$o(R);if(!g.ok){let L=new Error(`HTTP ${g.status} ${r} ${y}`);throw L.status=g.status,L.retryAfter=g.headers?.get?.("retry-after")??null,L.body=ce??R.slice(0,300),L}return ce??R}throw new Error(`HTTP redirect loop for ${e}`)}catch(y){if(S.signal.aborted&&!wt(p)){let k=y&&(typeof y=="object"||typeof y=="function")&&!j.isProxy(y)?y:null,O=k?Object.getOwnPropertyDescriptor(k,"oversize"):null;if(!(O&&Object.hasOwn(O,"value")&&O.value===!0))try{if(!k)throw new TypeError("unsafe rejection");Object.defineProperties(k,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}})}catch{let g=new Error("HTTP request timed out");throw Object.defineProperties(g,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}}),g}}throw y}finally{clearTimeout(T),b&&await b.close()}}async function Be(e,t={}){if(t!=null&&typeof t!="object"&&typeof t!="function")throw new TypeError("HTTP options must be an object");if(t!=null&&j.isProxy(t))throw new TypeError("HTTP options must not be a proxy");let r=new Set(["body","dedupe","fetchImpl","headers","importUndici","lookupFn","maxRedirects","maxResponseBytes","method","redirectPolicy","retries","sameOriginRedirectsOnly","signal","timeoutMs","untrustedUrl","validateResponse"]);if(t!=null){if(Object.getOwnPropertySymbols(t).length>0)throw new TypeError("HTTP options contain unknown fields");for(let A of Object.getOwnPropertyNames(t)){let E=Object.getOwnPropertyDescriptor(t,A);if(!(A==="toJSON"&&E&&Object.hasOwn(E,"value")&&E.value===void 0)){if(!r.has(A))throw new TypeError("HTTP options contain unknown fields");if(!E||!E.enumerable||!Object.hasOwn(E,"value"))throw new TypeError("HTTP options must contain enumerable own data properties")}}}let n=A=>{if(t==null||!Object.hasOwn(t,A))return;let E=Object.getOwnPropertyDescriptor(t,A);if(!E||!Object.hasOwn(E,"value"))throw new TypeError("HTTP options must contain own data properties");return E.value};if(typeof e!="string"||e.length===0||e.length>8192)throw new TypeError("HTTP URL must be a bounded string");let o=n("method");if(o!==void 0&&(typeof o!="string"||!/^[A-Za-z]+$/u.test(o)))throw new TypeError("HTTP method must be a string token");let i=n("timeoutMs");if(i!==void 0&&(!Number.isInteger(i)||i<1||i>12e4))throw new TypeError("HTTP timeoutMs must be a bounded integer");let s=n("retries");if(s!==void 0&&(!Number.isInteger(s)||s<0||s>10))throw new TypeError("HTTP retries must be a bounded integer");let l=n("redirectPolicy");if(l!==void 0&&l!=="follow"&&l!=="error")throw new TypeError('HTTP redirectPolicy must be "follow" or "error"');let a=n("maxRedirects");if(a!==void 0&&(!Number.isInteger(a)||a<0||a>Pe))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${Pe}`);if(l==="error"&&a!==void 0&&a!==0)throw new TypeError('HTTP redirectPolicy "error" requires maxRedirects 0 when supplied');let f=l??"follow",c=f==="error"?0:a??Pe;for(let A of["dedupe","untrustedUrl","sameOriginRedirectsOnly"]){let E=n(A);if(E!==void 0&&typeof E!="boolean")throw new TypeError(`HTTP ${A} must be boolean`)}let d=n("maxResponseBytes");if(d!==void 0&&(!Number.isInteger(d)||d<1||d>64*1024*1024))throw new TypeError("HTTP maxResponseBytes must be a bounded integer");let m=n("signal");if(m!==void 0){if(j.isProxy(m)||!(m instanceof AbortSignal))throw new TypeError("HTTP signal must be a native AbortSignal");try{wt(m)}catch{throw new TypeError("HTTP signal must be a native AbortSignal")}}for(let A of["importUndici","lookupFn","validateResponse"]){let E=n(A);if(E!==void 0&&typeof E!="function")throw new TypeError(`HTTP ${A} must be a function`)}let p=n("fetchImpl"),h=p||globalThis.fetch;if(typeof h!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let w=i??12e3,S=(o||"GET").toUpperCase(),T=n("headers"),P=Ao(T),b=Object.assign(Object.create(null),P);Object.keys(b).some(A=>A.toLowerCase()==="accept")||(b.Accept="application/json");let N=n("body");N!=null&&typeof N!="string"&&(Object.keys(b).find(E=>E.toLowerCase()==="content-type")||(b["Content-Type"]="application/json"),N=So(N));let M=s??mo,ae=n("lookupFn"),y=!p,k=n("untrustedUrl")===!0,O=n("sameOriginRedirectsOnly")===!0,H=n("importUndici"),g=n("validateResponse"),R=m,ce=d??null,L=async()=>{let A;for(let E=0;E<=M;E++){R&&go.call(R);try{return await Po(e,{fetchImpl:h,method:S,headers:b,body:N,timeoutMs:w,lookupFn:ae,realFetch:y,untrustedUrl:k,maxResponseBytes:ce,sameOriginRedirectsOnly:O,importUndici:H,validateResponse:g,signal:R,redirectPolicy:f,maxRedirects:c})}catch(V){A=V;let Q=Ze=>{if(!V||typeof V!="object"&&typeof V!="function"||j.isProxy(V))return;let ue=Object.getOwnPropertyDescriptor(V,Ze);return ue&&Object.hasOwn(ue,"value")?ue.value:void 0},Xe=Q("status"),Gn=Q("oracleTimeout")===!0||Q("name")==="AbortError"||Q("name")==="TimeoutError"||wt(R),Yn=new Set([408,425,429]),Xn=Q("retryable")===!1?!1:Xe!=null?Yn.has(Xe)||po.has(Xe)&&dr.has(S):!Gn&&dr.has(S);if(E===M||!Xn)throw V;let tr=Co(E,Q("retryAfter"));R?await new Promise((Ze,ue)=>{let Zn=setTimeout(Ze,tr);yo.call(R,"abort",()=>{clearTimeout(Zn),ue(bo(R)||new DOMException("Aborted","AbortError"))},{once:!0})}):await _o(tr)}}throw A};if(!(n("dedupe")!==!1&&!R&&gr(S,N)))return L();let B=No(S,e,b,{untrustedUrl:k,maxResponseBytes:ce,sameOriginRedirectsOnly:O,redirectPolicy:f,maxRedirects:c,timeoutMs:w,retries:M,fetchImpl:$e(h),realFetch:y,lookupFn:$e(ae),importUndici:$e(H),validateResponse:$e(g)},N),W=pt.get(B);if(W)return W;let I=L().finally(()=>pt.delete(B));return pt.set(B,I),I}var po,dr,mo,fr,wo,ho,go,yo,pr,wt,bo,Eo,Pe,wc,D,pt,mr,wr,Oo,To,_o,De=u(()=>{lr();po=new Set([408,425,429,500,502,503,504]),dr=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),mo=2,fr=4e3,wo=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,ho=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,go=AbortSignal.prototype.throwIfAborted,yo=EventTarget.prototype.addEventListener,pr=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,wt=e=>e?wo.call(e):!1,bo=e=>e?ho.call(e):void 0,Eo=new Set([301,302,303,307,308]),Pe=3,wc=64*1024,D=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});pt=new Map,mr=new WeakMap,wr=1;Oo=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),To=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);_o=e=>new Promise(t=>setTimeout(t,e))});var yr=u(()=>{});var br=u(()=>{De();yr()});var Ic,Er=u(()=>{br();Ic=Object.freeze({tradexyz:"xyz",ventuals:"vntl",hypernova:"hyna",paradex:"para"})});var Cc,_c,gt=u(()=>{K();Er();Cc=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"leverage","perp-isolated-margin":"margin","builder-fee-approval":"approveBuilder","hype-stake-deposit":"stake","hype-stake-withdraw":"unstake","hype-delegate":"delegate","hype-undelegate":"delegate"}),_c=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"updateLeverage","perp-isolated-margin":"updateIsolatedMargin","builder-fee-approval":"approveBuilderFee","hype-stake-deposit":"cDeposit","hype-stake-withdraw":"cWithdraw","hype-delegate":"tokenDelegate","hype-undelegate":"tokenDelegate"})});var $c,yt=u(()=>{K();$c="0x"+"00".repeat(32)});var Bo,Fc,bt=u(()=>{yt();K();Bo=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Fc=Object.freeze(Bo.map(e=>e[0]))});var je=u(()=>{K()});import{TypedDataEncoder as Uc,getAddress as Wc,isAddress as Vc}from"ethers";var jo,Fo,vr=u(()=>{_e();jo=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Fo=Object.freeze({Order:[{name:"salt",type:"uint256"},{name:"maker",type:"address"},{name:"receiver",type:"address"},{name:"makerAsset",type:"address"},{name:"takerAsset",type:"address"},{name:"makingAmount",type:"uint256"},{name:"takingAmount",type:"uint256"},{name:"makerTraits",type:"uint256"}]})});var Gc,Ir=u(()=>{Gc=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var kr=u(()=>{});import{TypedDataEncoder as nu,getAddress as ou,isAddress as iu}from"ethers";var qo,fu,Mo,pu,Or=u(()=>{De();Ce();Ir();kr();_e();qo=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),fu=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),Mo=Object.freeze({Order:[{name:"sellToken",type:"address"},{name:"buyToken",type:"address"},{name:"receiver",type:"address"},{name:"sellAmount",type:"uint256"},{name:"buyAmount",type:"uint256"},{name:"validTo",type:"uint32"},{name:"appData",type:"bytes32"},{name:"feeAmount",type:"uint256"},{name:"kind",type:"string"},{name:"partiallyFillable",type:"bool"},{name:"sellTokenBalance",type:"string"},{name:"buyTokenBalance",type:"string"}]}),pu=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as hu,getAddress as gu}from"ethers";var Eu,Et=u(()=>{vr();Or();Eu=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as Nr}from"ethers";var Ko,Du,Jo,ju,Fu,qu,Mu,Go,Hu,Fe=u(()=>{J();Ce();_e();Re();it();st();gt();bt();je();Et();Ko=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),Du=Object.freeze({swap:5,bridge:5,perps:0,nft:0,mint:0,transfer:0,approve:0,delegate:0,identity:0,order:0,cancel:0,leverage:0,margin:0,approveBuilder:0,stake:0,unstake:0}),Jo=Object.freeze({"0x04e45aaf":{provider:"uniswap-v3",action:"swap",layout:"router02-exact-input-single"},"0x414bf389":{provider:"uniswap-v3",action:"swap",layout:"swap-router-exact-input-single"},"0xc04b8d59":{provider:"uniswap-v3",action:"swap",layout:"exact-input-deadline"},"0xb858183f":{provider:"uniswap-v3",action:"swap",layout:"exact-input"},"0x5ae401dc":{provider:"uniswap-v3",action:"swap",layout:"multicall-deadline"},"0xa026383e":{provider:"aerodrome",action:"swap",layout:"aerodrome-exact-input-single"},"0x7b939232":{provider:"across-v3",action:"bridge",layout:"across-deposit-v3"}}),ju=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Fu=new Nr(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),qu=new Nr(["function mintAllowList(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity,(uint80 mintPrice,uint48 maxTotalMintableByWallet,uint48 startTime,uint48 endTime,uint48 dropStageIndex,uint32 maxTokenSupplyForStage,uint16 feeBps,bool restrictFeeRecipients) mintParams,bytes32[] proof) payable"]),Mu=Object.freeze({"0xa0712d68":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0x1249c58b":{provider:"nft-mint",action:"mint",layout:"mint-no-args"},"0x2db11544":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xefef39a1":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xa6f2ae3a":{provider:"nft-mint",action:"mint",layout:"mint-no-args"}}),Go=Object.freeze([...Ko]),Hu=Object.freeze({...Jo})});import{encode as Wu}from"@msgpack/msgpack";import{keccak256 as Ku,verifyTypedData as Ju}from"ethers";var Gu,Yu,xt=u(()=>{Gu=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Yu=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var St=u(()=>{je()});import{ed25519 as ol}from"@noble/curves/ed25519.js";import{base58 as sl}from"@scure/base";import{RawTx as cl,SigHash as ul,Transaction as ll}from"@scure/btc-signer";import{Transaction as fl,keccak256 as pl,verifyTypedData as ml}from"ethers";var At=u(()=>{xt();St()});import{base58 as xl}from"@scure/base";var pe=u(()=>{Fe();Re();J();At()});var Cr=u(()=>{pe();Fe()});import{wordlists as Zo}from"ethers";function ri(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return ti.has(t.length)&&t.every(r=>Zo.en.getWordIndex(r)>=0)}function si(e){let t=_r(e);return ii.has(t)||oi.test(t)}function _r(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function ai(e){let t=_r(e);return[...Qo].some(r=>t.includes(r))}function ci(e,t,r){if(typeof t=="string"){if(ei.some(n=>n.test(t))||ri(t))throw new me(r);if(ni.test(t)&&!si(e))throw new me(r)}}function It(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return ci(r,e,t),e;if(typeof e=="number"){if(!Number.isFinite(e))throw new TypeError(`action receipt: non-finite number at ${t}`);return e}if(typeof e=="bigint")return e.toString();if(Array.isArray(e))return e.map((o,i)=>It(o,`${t}[${i}]`,r));if(typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`action receipt: JSON-like value required at ${t}`);let n={};for(let o of Object.keys(e).sort()){let i=`${t}.${o}`;if(ai(o))throw new me(i);e[o]!==void 0&&(n[o]=It(e[o],i,o))}return n}function qe(e){return It(e)}var Qo,ei,ti,ni,oi,ii,me,we=u(()=>{Qo=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),ei=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],ti=new Set([12,15,18,21,24]);ni=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,oi=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,ii=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);me=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}}});import{closeSync as Bl,constants as ui,fchmodSync as Dl,fsyncSync as jl,lstatSync as Fl,mkdirSync as ql,openSync as Ml,readFileSync as Hl,renameSync as zl,rmSync as Ul,writeFileSync as Wl}from"node:fs";var Jl,Rr=u(()=>{we();pe();Jl=ui.O_NOFOLLOW??0});import{wordlists as Xl}from"ethers";var Lr,Ql,te=u(()=>{we();Lr=64*1024,Ql=32*1024});var fi,rd,nd,He=u(()=>{te();fi=["schemaVersion","buildVersion","recordType","execution","custody"],rd=[...fi,"recordHash"],nd=Object.freeze({signed:new Set(["workflow.signed","legacy.signed"]),submitted:new Set(["workflow.submitted","legacy.broadcast"]),finalized:new Set(["workflow.finalized"]),reorged:new Set(["workflow.reorged"]),orphaned:new Set(["workflow.orphaned"]),compensating:new Set(["workflow.compensating"]),compensated:new Set(["workflow.compensated"])})});var pi,Hr,cd,Ct=u(()=>{te();He();pi=Object.freeze(["draft","checked","approval","signed","submitted","finalized","reorged","orphaned","compensating","compensated","failed","cancelled"]),Hr=Object.freeze(["workflow.drafted","workflow.checked","workflow.approval_requested","workflow.approval_granted","workflow.signed","workflow.submitted","workflow.finalized","workflow.reorged","workflow.orphaned","workflow.compensating","workflow.compensated","workflow.failed","workflow.cancelled","workflow.annotated"]),cd=new Set(Hr)});var bi,zr=u(()=>{te();Ct();bi=64*1024*1024});var wd,hd,gd,Ur=u(()=>{wd=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),hd=Object.freeze(["read","simulate"]),gd=1440*60});function _t(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return Ei.test(t)||xi.includes(r)}function Si(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>Vr.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function Kr(e){let t;try{t=JSON.stringify(e)}catch(o){throw new F("$",`unserializable-payload: ${String(o?.message||o)}`)}if(t===void 0)return"null";let r=Si(t);for(let{rule:o,re:i}of Wr)if(i.test(r))throw new F("$<serialized>",o);if(/(?:^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{64}(?![0-9a-fA-F])/.test(r))throw new F("$<serialized>","raw-32-byte-hex-embedded");return JSON.parse(t,(o,i)=>{if(o&&_t(o))throw new F(`$<serialized>.${o}`,"forbidden-key-name");return i}),t}function U(e,t="$",r=new Set,n=""){if(e==null)return e;if(typeof e=="string"){let o=Vr.includes(String(n).toLowerCase().replace(/[_-]/g,""));for(let{rule:i,re:s}of Wr)if(!(o&&i.startsWith("raw-32-byte-hex"))&&s.test(e))throw new F(t,i);return e}if(typeof e!="object"||r.has(e)||(r.add(e),ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e;if(e instanceof Map){for(let[o,i]of e.entries()){if(typeof o=="string"&&_t(o))throw new F(`${t}[${JSON.stringify(o)}]`,"forbidden-key-name");U(o,`${t}[key]`,r),U(i,`${t}[${String(o)}]`,r)}return e}if(e instanceof Set){let o=0;for(let i of e.values())U(i,`${t}[${o++}]`,r);return e}if(Array.isArray(e))return e.forEach((o,i)=>U(o,`${t}[${i}]`,r)),e;for(let[o,i]of Object.entries(e)){if(_t(o))throw new F(`${t}.${o}`,"forbidden-key-name");U(i,`${t}.${o}`,r,o)}return e}var F,Ei,xi,Wr,Vr,Rt=u(()=>{Ur();F=class extends Error{constructor(t,r){super(`secret material must never appear in a public API object (at ${t}, rule: ${r})`),this.name="SecretLeakError",this.path=t,this.rule=r}},Ei=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,xi=Object.freeze(["privkey","wif","xprv","seed"]);Wr=Object.freeze([{rule:"raw-32-byte-hex-key",re:/^0x[0-9a-fA-F]{64}$/},{rule:"raw-32-byte-hex-bare",re:/^[0-9a-fA-F]{64}$/},{rule:"extended-private-key",re:/\b(?:xprv|tprv|yprv|zprv)[1-9A-HJ-NP-Za-km-z]{107}\b/},{rule:"bitcoin-wif",re:/\b[59KLc][1-9A-HJ-NP-Za-km-z]{50,51}\b/},{rule:"bip39-mnemonic",re:/\b(?:[a-z]{3,8}\s+){11,23}[a-z]{3,8}\b/},{rule:"bearer-token",re:/bearer\s+[A-Za-z0-9._~+/=-]+/i},{rule:"pem-private-key",re:/-----BEGIN[A-Z ]*PRIVATE KEY-----/},{rule:"keystore-path",re:/keystore/i},{rule:"signer-url",re:/https?:\/\/\S*sign/i},{rule:"authorization-header",re:/authorization\s*:/i}]),Vr=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"])});var Lt,Td,Jr=u(()=>{Rt();Lt=Object.freeze(["intent","quote_comparison","simulation","prepared","approval","signed","broadcast","settlement","balance_delta","position"]),Td=Object.freeze(Object.fromEntries(Lt.map((e,t)=>[e,Object.freeze(t+1<Lt.length?[Lt[t+1]]:[])])))});var Ai,Gr=u(()=>{Jr();te();He();Ai=Object.freeze({intent:"draft",quote_comparison:"draft",simulation:"draft",prepared:"checked",approval:"approval",signed:"signed",broadcast:"submitted",settlement:"finalized",balance_delta:"compensated",position:"compensated"})});var Yr=u(()=>{te();He();Ct();zr();Gr()});var Ii,ki,Oi,pf,mf,wf,hf,gf,Ti,yf,Xr=u(()=>{Ii=Object.freeze(["owner","operator","agent","viewer"]),ki=Object.freeze(["tenant","config","policy","grant","workflow","trade","receipt","audit","telemetry","context","lifecycle"]),Oi=Object.freeze({read:"read",create:"create",update:"update",delete:"delete",manage:"manage",prepare:"prepare",cancel:"cancel",export:"export",approve:"approve"}),pf=Object.freeze(["owner"]),mf=Object.freeze({ALLOW_ROLE_PERMISSION:"allow.role_permission",DENY_MISSING_CONTEXT:"deny.missing_context",DENY_INVALID_CONTEXT:"deny.invalid_context",DENY_INVALID_REQUEST:"deny.invalid_request",DENY_UNKNOWN_RESOURCE:"deny.unknown_resource",DENY_UNKNOWN_ACTION:"deny.unknown_action",DENY_UNBOUND_OBJECT:"deny.unbound_object",DENY_TENANT_MISMATCH:"deny.tenant_mismatch",DENY_RESOURCE_MISMATCH:"deny.resource_mismatch",DENY_ROLE_PERMISSION:"deny.role_permission",DENY_POLICY_NOT_APPROVER:"deny.policy_not_approver"}),wf=new Set(Ii),hf=new Set(ki),gf=new Set(Object.values(Oi)),Ti=Object.freeze({owner:Object.freeze(["tenant:read","tenant:manage","config:read","config:manage","policy:read","policy:manage","grant:read","grant:create","grant:update","grant:delete","grant:manage","workflow:read","workflow:create","workflow:update","workflow:delete","workflow:cancel","workflow:approve","trade:read","trade:prepare","receipt:read","receipt:export","audit:read","audit:export","telemetry:read","telemetry:create","telemetry:export","context:read","context:create","context:update","context:delete","context:manage","context:export","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:delete","lifecycle:manage","lifecycle:approve","lifecycle:export"]),operator:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","workflow:cancel","trade:read","trade:prepare","receipt:read","audit:read","telemetry:read","telemetry:create","context:read","context:create","context:update","context:delete","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:manage"]),agent:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","trade:read","trade:prepare","receipt:read","telemetry:create","context:read","context:create","context:update","lifecycle:read"]),viewer:Object.freeze(["tenant:read","config:read","grant:read","workflow:read","trade:read","receipt:read","audit:read","telemetry:read","context:read","lifecycle:read"])}),yf=Object.freeze(Object.fromEntries(Object.entries(Ti).map(([e,t])=>[e,Object.freeze([...t])])))});var Ni,Ci,_i,Sf,Af,vf,If,kf,Of,$t=u(()=>{Xr();Ni=Object.freeze(["succeeded","denied","invalid","failed","cancelled","timed_out","unavailable","skipped"]),Ci=Object.freeze(["workflow","task","intent","plan","run","event","eval"]),_i=Object.freeze(["taskId","intentId","planId","runId","eventId"]),Sf=Object.freeze({maxAttributes:24,maxKeyLength:48,maxStringLength:256,maxArrayLength:8}),Af=new Set(Ni),vf=new Set(Ci),If=new Set(_i),kf=Object.freeze(["authorization","bearer","cookie","credential","password","passphrase","secret","token","privatekey","privkey","seed","mnemonic","keystore","signature","prompt","systemmessage","usermessage","assistantmessage","rawtransaction","signedtransaction","serializedtransaction","transactionbytes","calldata","callbytes","inputdata"]),Of=Object.freeze({taskId:"x-oracle-task-id",intentId:"x-oracle-intent-id",planId:"x-oracle-plan-id",runId:"x-oracle-run-id",eventId:"x-oracle-event-id"})});var Lf,Zr=u(()=>{Yr();$t();Lf=Object.freeze({"workflow.cancelled":"cancelled","workflow.failed":"failed"})});var Ff,Qr=u(()=>{$t();Ff=32*1024*1024});var Mf,Hf,zf,re=u(()=>{Mf=Object.freeze({N:1<<17,r:8,p:1}),Hf=256*1024*1024,zf=16*1024});var Wf,en=u(()=>{Wf=Object.freeze({1:{name:"ethereum",mode:"mempool-private",endpoints:["https://rpc.flashbots.net/fast","https://rpc.mevblocker.io"]},8453:{name:"base",mode:"sequencer",endpoints:["https://mainnet-sequencer.base.org"]},10:{name:"optimism",mode:"sequencer",endpoints:["https://mainnet-sequencer.optimism.io"]},42161:{name:"arbitrum",mode:"sequencer",endpoints:["https://arb1-sequencer.arbitrum.io/rpc"]},56:{name:"bsc",mode:"mempool-private",endpoints:["https://rpc.48.club","https://bsc.rpc.blxrbdn.com"]},137:{name:"polygon",mode:"mempool-private",endpoints:["https://polygon-bor-rpc.publicnode.com"]},43114:{name:"avalanche",mode:"public-only",endpoints:[]},999:{name:"hyperevm",mode:"public-only",endpoints:[]}})});import{homedir as Pt}from"node:os";import{join as Bt}from"node:path";var tn,Ri,Gf,rn=u(()=>{tn=process.env.ORACLE_PUBLIC_DESKTOP==="1",Ri=tn?process.env.ORACLE_CONFIG_DIR||Bt(Pt(),".config","oracle"):Bt(Pt(),".config","oracle"),Gf=tn?Ri:Bt(Pt(),".config","mad-desk")});var ep,tp,rp,nn=u(()=>{rn();ep="0".repeat(64),tp=Object.freeze({PREPARE:"exec.prepare",SIGN:"exec.sign",BROADCAST:"exec.broadcast",POLICY_REJECT:"policy.reject",AUTH_GRANT:"auth.grant",AUTH_OK:"auth.verify.ok",AUTH_FAIL:"auth.verify.fail"}),rp=Promise.resolve()});var Dt=u(()=>{nn();K();re();pe()});var sn=u(()=>{});var un={};Oe(un,{SIGN_TIME_REVIEW_VERSION:()=>Li,SignTimeReviewSecretError:()=>he,createSignTimeReview:()=>cn});function jt(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string"){let o=e.trim().split(/\s+/);if(ji.test(e)||Fi.has(o.length)&&o.every(i=>/^[a-z]+$/i.test(i)))throw new he(t);return e}if(typeof e=="bigint")return e.toString();if(typeof e=="number"){if(!Number.isSafeInteger(e))throw new TypeError(`sign-time review: safe integer required at ${t}`);return e}if(Array.isArray(e))return e.map((o,i)=>jt(o,`${t}[${i}]`,r));X(e,t);let n={};for(let o of Object.keys(e).sort()){let i=o.replace(/[^a-z0-9]/gi,"");if(Di.test(i))throw new he(`${t}.${o}`);e[o]!==void 0&&(n[o]=jt(e[o],`${t}.${o}`,o))}return n}function X(e,t){if(e==null||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`sign-time review: ${t} must be a plain object`);return e}function ge(e,t){if(e==null||e==="")throw new TypeError(`sign-time review: ${t} required`);return e}function ne(e,t){let r=String(ge(e,t)).toLowerCase();if(!$i.test(r))throw new TypeError(`sign-time review: ${t} must be an EVM address`);return r}function q(e,t,{positive:r=!1}={}){try{let n=BigInt(ge(e,t));if(n<0n||r&&n===0n)throw new Error;return n.toString()}catch{throw new TypeError(`sign-time review: ${t} must be an unsigned integer`)}}function Ft(e,t){if(typeof e!="string"||e.length===0||e.length>500||e!==e.trim())throw new TypeError(`sign-time review: ${t} must be non-empty text`);return e}function an(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))an(t);Object.freeze(e)}return e}function qi(e,t){if(typeof e=="boolean")return{passed:e,reason:e?"passed":"failed"};X(e,t);let r=e.passed??e.ok??e.allowed;if(typeof r!="boolean")throw new TypeError(`sign-time review: ${t} needs a boolean result`);let n=e.reason??e.message??e.name??(r?"passed":"failed");return{...e,passed:r,reason:Ft(String(n),`${t}.reason`)}}function Mi(e){if(!Array.isArray(e))throw new TypeError("sign-time review: policyChecks must be an array");let t=e.map((n,o)=>qi(n,`policyChecks[${o}]`)),r=t.filter(n=>!n.passed);return{checks:t,passed:t.length-r.length,failed:r.length,reasons:r.map(n=>n.reason)}}function Hi(e){if(e==null)return null;if(X(e,"simulation"),typeof e.status!="string"||!["ok","success","failed","error","unavailable","unknown"].includes(e.status))throw new TypeError("sign-time review: simulation.status is invalid");if(e.willRevert!==!0&&e.willRevert!==!1&&e.willRevert!==null)throw new TypeError("sign-time review: simulation.willRevert must be boolean or null");let t={status:e.status,willRevert:e.willRevert??null,summary:Ft(String(e.summary??"simulation result recorded"),"simulation.summary")};return e.gasEstimate!=null&&(t.gasEstimate=q(e.gasEstimate,"simulation.gasEstimate")),e.gasLimit!=null&&(t.gasLimit=q(e.gasLimit,"simulation.gasLimit")),t}function zi(e){if(e==null)return null;if(!Array.isArray(e)||e.length===0)throw new TypeError("sign-time review: assetDeltas must be a non-empty array");return e.map((t,r)=>{X(t,`assetDeltas[${r}]`);let n=q(t.before,`assetDeltas[${r}].before`),o=q(t.after,`assetDeltas[${r}].after`),i=(BigInt(o)-BigInt(n)).toString(),s;try{s=t.delta==null?i:BigInt(t.delta).toString()}catch{throw new TypeError(`sign-time review: assetDeltas[${r}].delta must be an integer`)}if(s!==i)throw new TypeError(`sign-time review: assetDeltas[${r}].delta does not match before/after`);return{...t,asset:Ft(String(ge(t.asset??t.token,`assetDeltas[${r}].asset`)),`assetDeltas[${r}].asset`),before:n,after:o,delta:s}})}function Ui(e){if(e==null)return[];if(!Array.isArray(e))throw new TypeError("sign-time review: approvalDeltas must be an array");return e.map((t,r)=>{X(t,`approvalDeltas[${r}]`);let n=q(t.amount??t.after,`approvalDeltas[${r}].amount`);if(t.revokeLike!=null&&typeof t.revokeLike!="boolean")throw new TypeError(`sign-time review: approvalDeltas[${r}].revokeLike must be boolean`);return{token:ne(t.token,`approvalDeltas[${r}].token`),spender:ne(t.spender,`approvalDeltas[${r}].spender`),owner:ne(t.owner,`approvalDeltas[${r}].owner`),amount:n,revokeLike:t.revokeLike??BigInt(n)===0n}})}function cn(e={}){X(e,"input");let t=jt(e),r=t.tx==null?t:X(t.tx,"tx"),n=q(t.chainId??r.chainId,"chainId",{positive:!0}),o=ne(t.account??t.from??r.from,"account/from"),i=ne(t.destination??t.to??r.to,"destination/to"),s=String(ge(t.prepareHash,"prepareHash")).toLowerCase();if(!Bi.test(s))throw new TypeError("sign-time review: prepareHash must be a 32-byte hash");let l=t.route??t.venue;if(l==null)throw new TypeError("sign-time review: route/venue required");let a=t.decodedCalldata??t.decodedAction;if(a==null)throw new TypeError("sign-time review: decodedCalldata or decodedAction required");let f=String(ge(t.calldata??t.data??r.data,"calldata/data")).toLowerCase();if(!Pi.test(f))throw new TypeError("sign-time review: calldata/data must be even-length hex");let c=t.policyChecks!==void 0&&t.policyChecks!==null,d=Mi(c?t.policyChecks:[]),m=Hi(t.simulation),p=zi(t.assetDeltas),h=Ui(t.approvalDeltas),w=t.allowlistHits??[];if(!Array.isArray(w))throw new TypeError("sign-time review: allowlistHits must be an array");let S=m?.willRevert===!0||["failed","error"].includes(m?.status),T=m!=null&&m.willRevert===!1&&["ok","success"].includes(m.status),P=S||d.failed>0?"BLOCKED":T&&c&&d.checks.length>0&&p!=null?"READY":"UNKNOWN",b=typeof a=="string"?a:a.method??a.action??a.type??"transaction",N=`${P}: review ${b} on chain ${n}; policy ${d.passed} passed, ${d.failed} failed; ${p?.length??0} asset delta${p?.length===1?"":"s"}; local signature required`,M={reviewVersion:1,status:P,requiresLocalSignature:!0,signingLocal:!0,custody:"none",execution:"review-only",chainId:n,account:o,from:o,route:l,venue:t.venue??(typeof l=="string"?l:l.venue??l.provider??null),destination:i,to:i,...t.spender==null?{}:{spender:ne(t.spender,"spender")},prepareHash:s,...t.decodedCalldata!==void 0?{decodedCalldata:t.decodedCalldata}:{decodedAction:t.decodedAction},calldata:f,data:f,selector:f.length>=10?f.slice(0,10):null,value:q(t.value??r.value??0,"value"),...(t.gasEstimate??r.gasEstimate)==null?{}:{gasEstimate:q(t.gasEstimate??r.gasEstimate,"gasEstimate")},...(t.gasLimit??r.gasLimit)==null?{}:{gasLimit:q(t.gasLimit??r.gasLimit,"gasLimit")},simulation:m,policyChecks:d,allowlistHits:w,assetDeltas:p,approvalDeltas:h,summary:N};return an(M)}var Li,$i,Pi,Bi,Di,ji,Fi,he,qt=u(()=>{Li=1,$i=/^0x[0-9a-f]{40}$/,Pi=/^0x(?:[0-9a-f]{2})*$/,Bi=/^(?:0x)?[0-9a-f]{64}$/,Di=/(privatekey|privkey|secretkey|seedphrase|mnemonic|passphrase|password|keystore|keymaterial|wif|xprv|xpriv|bearer|authorization|signature|apikey|credential)/i,ji=/\b(?:[5KL][1-9A-HJ-NP-Za-km-z]{50,51}|xprv[0-9A-Za-z]{50,})\b/,Fi=new Set([12,15,18,21,24]),he=class extends Error{constructor(t){super(`sign-time review refused: secret-bearing field at ${t}`),this.name="SignTimeReviewSecretError",this.code="SIGN_TIME_REVIEW_SECRET"}}});import{readFileSync as fp,readdirSync as pp,existsSync as Wi}from"node:fs";import{dirname as Vi,join as ye}from"node:path";import{fileURLToPath as Ki}from"node:url";function Ji(){let e=[ye(be,"descriptors"),ye(be,"clear-sign","descriptors"),ye(be,"..","clear-sign","descriptors"),ye(be,"..","..","clear-sign","descriptors"),ye(be,"..","..","..","clear-sign","descriptors")];for(let t of e)if(Wi(t))return t;return e[0]}var be,gp,yp,ln=u(()=>{J();be=Vi(Ki(import.meta.url));gp=Ji(),yp=(1n<<256n)-1n});var dn=u(()=>{qt();J();ln()});import{Wallet as kp}from"ethers";import{base58 as Tp}from"@scure/base";import{ed25519 as Cp}from"@noble/curves/ed25519.js";import{NETWORK as Rp,TEST_NETWORK as Lp,WIF as $p,p2wpkh as Pp}from"@scure/btc-signer";import{pubECDSA as Dp}from"@scure/btc-signer/utils.js";var fn=u(()=>{});var qp,Mp,Hp,zp,Up,Wp,Vp,Kp,Jp,Gp,Yp,pn=u(()=>{Dt();qp=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),Mp=Object.freeze(["binance","bybit","okx","coinbase"]),Hp=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),zp=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),Up=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Wp=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Vp=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Kp=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),Jp=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),Gp=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),Yp=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var mn=u(()=>{re()});var Xi,wn,Ue=u(()=>{Xi=Object.freeze({binance:Object.freeze({create:["POST","/api/v3/order"],cancel:["DELETE","/api/v3/order"],status:["GET","/api/v3/order"]}),bybit:Object.freeze({create:["POST","/v5/order/create"],cancel:["POST","/v5/order/cancel"],status:["GET","/v5/order/realtime"]}),okx:Object.freeze({create:["POST","/api/v5/trade/order"],cancel:["POST","/api/v5/trade/cancel-order"],status:["GET","/api/v5/trade/order"]}),coinbase:Object.freeze({create:["POST","/orders"],cancel:["DELETE","/orders/{order_id}"],status:["GET","/orders/{order_id}"]})}),wn=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var hn=u(()=>{Ue()});var sm,gn=u(()=>{Ue();hn();sm=256*1024});var yn=u(()=>{Ue();gn()});var bn=u(()=>{re()});import C from"node:path";import Zi from"node:os";import{createHash as Qi,randomBytes as ew}from"node:crypto";import{Interface as Mt,keccak256 as rw}from"ethers";import{Transaction as ow}from"@scure/btc-signer";import{ed25519 as sw}from"@noble/curves/ed25519.js";function En(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||C.join(process.env.XDG_STATE_HOME||C.join(Zi.homedir(),".local","state"),"oracle"),r=Qi("sha256").update(C.resolve(e)).digest("hex").slice(0,16);return{vault:C.join(e,"vault.json"),policy:C.join(e,"signer-policy.json"),policyKey:C.join(e,"policy-integrity-key"),policyAnchor:C.join(t,`signer-policy-${r}.high-water`),ledger:C.join(e,"signer-ledger.json"),ledgerAnchor:C.join(t,`signer-ledger-${r}.high-water`),executionOutbox:C.join(e,"signer-execution-outbox.json"),cexOrders:C.join(e,"cex-orders.json"),cexOrdersAnchor:C.join(t,`cex-orders-${r}.high-water`),token:C.join(e,"signer-token"),lock:C.join(t,`signer-${r}.lock`),workflowLedger:C.join(e,"workflow-events.jsonl")}}var Dw,jw,Fw,xn=u(()=>{Cr();Rr();Zr();Qr();pe();re();en();Dt();sn();J();dn();Fe();Re();At();gt();bt();je();St();yt();xt();it();st();Et();fn();pn();mn();yn();bn();Dw=new Mt(["function collection() view returns (address)","function token() view returns (address)","function robinhoodSwapFeeWei() view returns (uint256)","function quoteSpecificBuy(uint256 tokenId) view returns (uint256 totalCost,uint256 baseCost,uint256 fee,uint256 protocolFee,bool available)","function quoteSellNFT() view returns (uint256 netPayout,uint256 grossPayout,uint256 fee,uint256 protocolFee)","function inventory(uint256 tokenId) view returns (bool)","function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),jw=new Mt(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),Fw=new Mt(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import Ht from"node:fs";import Sn from"node:path";import{homedir as es}from"node:os";function ts(){return process.env.ORACLE_CONFIG_DIR||Sn.join(es(),".config","oracle")}function Ee(){let e=En(Sn.join(ts(),"signer")),t=Ht.existsSync(e.vault),r=Ht.existsSync(e.lock),n=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:Ht.existsSync(e.policy),armed:t&&!r,disarmed:r,capabilities:{swap:n,bridge:n},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var Yw,zt=u(()=>{et();or();xn();re();Yw=Object.freeze([{type:"function",function:{name:"vault_status",description:"Read local Oracle vault/signer readiness. Never returns key material.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_status",description:"Ping the loopback signer. Fails closed if it is not running.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_pending",description:"List pending local-signer artifacts. Read-only. Does not approve, sign, or broadcast.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_queue",description:"Queue a prepared unsigned artifact on the loopback signer. Does not broadcast.",parameters:{type:"object",properties:{artifact:{type:"object"}},required:["artifact"],additionalProperties:!1}}},{type:"function",function:{name:"signer_deny",description:"Drop one pending local-signer artifact. Nothing signed.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_execute",description:"Broadcast one already-confirmed local artifact. Requires a one-use confirmationNonce from the local signer TTY confirm. Cannot mint confirmation itself.",parameters:{type:"object",properties:{artifact:{type:"object"},confirmationNonce:{type:"string",minLength:32,maxLength:128}},required:["artifact","confirmationNonce"],additionalProperties:!1}}},{type:"function",function:{name:"signer_disarm",description:"Global kill switch. Stops the local signer from broadcasting.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"receipt_report",description:"Receipt or it did not happen. Requires transactionHash/hash/txid.",parameters:{type:"object",properties:{receipt:{type:"object"},transactionHash:{type:"string"},hash:{type:"string"},txid:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"watch_create",description:"Create an alert-only watch. Never execute.",parameters:{type:"object",properties:{chain:{type:"string"},token:{type:"string"},condition:{type:"string"},note:{type:"string"}},required:["chain","token","condition"],additionalProperties:!1}}},{type:"function",function:{name:"watch_list",description:"List local alert-only watches.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"portfolio_snapshot",description:"How to read the one portfolio snapshot. knownUsd is incomplete if a provider is missing.",parameters:{type:"object",properties:{},additionalProperties:!1}}}])});import We from"node:fs";import rs from"node:os";import ie from"node:path";import{fileURLToPath as ns}from"node:url";function An(){return process.env.ORACLE_FAKE_HOME||rs.homedir()}function is(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function Ve(){return is()?process.env.ORACLE_CONFIG_DIR||ie.join(An(),".config","oracle"):ie.join(An(),".config","oracle")}function ss(){return ie.join(Ve(),"desk.json")}function as(){return ie.join(Ve(),"env")}function oe({force:e=!1}={}){if(oe._done&&!e)return oe._result||null;oe._done=!0;let t={},r=(o,i)=>{if(i==null)return;let s=String(i).trim();s&&(process.env[o]!=null&&String(process.env[o]).trim()!==""||(process.env[o]=s,t[o]=s))};try{let o=as();if(We.existsSync(o))for(let i of We.readFileSync(o,"utf8").split(/\r?\n/)){let s=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let l=s[2];(l.startsWith('"')&&l.endsWith('"')||l.startsWith("'")&&l.endsWith("'"))&&(l=l.slice(1,-1)),r(s[1],l)}}catch{}try{let o=ss();if(We.existsSync(o)){let i=JSON.parse(We.readFileSync(o,"utf8"));i&&typeof i=="object"&&(r("ORACLE_DESK_URL",i.deskUrl||i.dataUrl||i.url),r("ORACLE_DATA_URL",i.dataUrl||i.deskUrl||i.url),r("ORACLE_API_URL",i.apiUrl||i.dataUrl||i.deskUrl),r("ORACLE_PUBLIC_URL",i.publicUrl||i.deskUrl||i.dataUrl),r("ORACLE_EXEC_URL",i.execUrl),r("MAD_DESK_URL",i.deskUrl||i.dataUrl))}}catch{}let n=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return n&&(r("ORACLE_DESK_URL",n),r("ORACLE_DATA_URL",n),r("ORACLE_API_URL",n),r("ORACLE_PUBLIC_URL",n),r("MAD_DESK_URL",n)),oe._result=Object.keys(t).length?t:null,oe._result}var os,rh,vn=u(()=>{os=ie.dirname(ns(import.meta.url)),rh=ie.resolve(os,"../..");try{oe()}catch{}});function Ke(e){return String(e||"").trim()||void 0}function us(e,{required:t=!1}={}){let r=Ke(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!cs.has(r))throw new Error(`unsupported provider: ${r}`);return r}function ls(e,{required:t=!1}={}){let r=Ke(e);if(!r){if(t)throw new Error("model is required");return}if(r.includes("..")||r.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(r))throw new Error("invalid model id");return r}function ds(e){let t=Ke(e);if(!t||t.length>2048)throw new Error("invalid custom base URL");let r;try{r=new URL(t)}catch{throw new Error("invalid custom base URL")}let n=r.hostname.toLowerCase().replace(/^\[|\]$/g,""),o=n==="localhost"||n==="127.0.0.1"||n==="::1";if(r.protocol!=="https:"&&!(r.protocol==="http:"&&o)||r.username||r.password||r.search||r.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return r.toString().replace(/\/+$/,"")}function In({provider:e,model:t,baseUrl:r}={},{requireModel:n=!1}={}){let o=us(e),i=ls(t,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:ds(r)};if(Ke(r))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var cs,kn=u(()=>{cs=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"])});import On from"node:fs";import fs from"node:path";function ms(){return fs.join(Ve(),"model.json")}function se(e){return String(e||"").trim()||void 0}function ws(e={}){let t=se(e.backend)?.toLowerCase()||"auto",r=In({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),n=se(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=se(e.reasoningEffort),s=se(e.computeHost||e.remoteHost),l=se(e.computeUser||e.remoteUser),a=se(e.computePath||e.remotePath);if(!ps.has(t))throw new Error(`unsupported backend: ${t}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(t))throw new Error("remote compute backends are disabled in the public desktop");if(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))throw new Error("api key env must be an uppercase environment variable name");if(t==="remote"&&!s)throw new Error("remote backend requires computeHost");return{backend:t,...r,...n?{apiKeyEnv:n}:{},...Number.isFinite(o)&&o>0?{contextLength:o}:{},...i?{reasoningEffort:i}:{},...s?{computeHost:s}:{},...l?{computeUser:l}:{},...a?{computePath:a}:{}}}function Tn(){let e=ms();if(!On.existsSync(e))return null;try{return ws(JSON.parse(On.readFileSync(e,"utf8")))}catch{return null}}var ps,Nn=u(()=>{vn();kn();ps=new Set(["auto","standalone","hermes","remote","arch"])});import{Interface as hs,getAddress as gs}from"ethers";function Ut(e,t){try{return gs(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function ys(e){let t=String(e||"").trim();if(!/^0x[0-9a-fA-F]{64}$/.test(t))throw new Error("txHash must be a 32-byte hex transaction hash");return t.toLowerCase()}function Wt(e){return e==null?null:Number.parseInt(String(e),16)}function Es(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let n=nr(e,r);return n||bs[Number(e)]||null}function Ss(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!xs.test(r))throw new Error(`evm-rpc: ${t} refused \u2014 @oracle-agent/oracle is prepare-only (read RPC only; no broadcast/sign)`);return r}function As(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function vs(e){if(e?.error)throw As(e.error);return e?.result}function Is(e,t,r){return`${e}
3
3
  ${t}
4
- ${JSON.stringify(r??[])}`}async function ks(e,t,r){return Be(e,{method:"POST",body:t,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function Vt(e,t,r=[],n={}){let o=String(t||""),i=Ss(o),s=Es(e,n);if(!s)throw new Error(`No RPC URL for chainId ${e} (set env from chain registry rpcEnv or pass rpcUrl)`);if(i==="eth_chainid"&&n.cacheChainId!==!1){let c=Cn.get(s);if(c!=null)return c}let a=n.dedupe!==!1&&!n.signal?Is(s,o,r):null;if(a&&xe.has(a))return xe.get(a);let f=(async()=>{let c=await ks(s,{jsonrpc:"2.0",id:1,method:t,params:r},n),d=vs(c);return i==="eth_chainid"&&typeof d=="string"&&Cn.set(s,d),d})();return a&&(xe.set(a,f),f.finally(()=>{xe.get(a)===f&&xe.delete(a)}).catch(()=>{})),f}async function _n(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=ys(e.txHash||e.hash||e.transactionHash),o=await Vt(r,"eth_getTransactionReceipt",[n],t);if(!o)return{ok:!1,chainId:r,txHash:n,status:"pending",receipt:null,reason:"receipt pending"};let i=Wt(o.status),s=i===1,l=i===1?"success":i===0?"reverted":"unknown",a=s?null:l==="reverted"?"transaction reverted":"unknown receipt status",f=e.expectedTo?Ut(e.expectedTo,"expectedTo"):null,c=o.to?Ut(o.to,"receipt.to"):null;return f&&c!==f&&(s=!1,a=`to mismatch: expected ${f}, got ${c||"null"}`),{ok:s,chainId:r,txHash:n,status:l,reason:a,statusCode:i,to:c,from:o.from?Ut(o.from,"receipt.from"):null,blockNumber:Wt(o.blockNumber),transactionIndex:Wt(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}var mh,bs,xs,xe,Cn,Rn=u(()=>{De();Qe();mh=new hs(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);bs={1:"https://ethereum.publicnode.com",137:"https://polygon-bor-rpc.publicnode.com",42161:"https://arbitrum-one-rpc.publicnode.com",8453:"https://base-rpc.publicnode.com",10:"https://optimism-rpc.publicnode.com",988:"https://rpc.stable.xyz",56:"https://bsc-rpc.publicnode.com",43114:"https://avalanche-c-chain-rpc.publicnode.com",999:"https://rpc.hyperliquid.xyz/evm",2741:"https://api.mainnet.abs.xyz",4663:"https://rpc.mainnet.chain.robinhood.com"};xs=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;xe=new Map,Cn=new Map});function Kt(e,t){if(!e||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`${t} must be a plain object`);return e}function Jt(e,t="control input"){try{U(e,t),Kr(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function Se(e,{required:t=[],optional:r=[]}={},n="object"){Kt(e,n);let o=new Set([...t,...r]),i=Object.keys(e).filter(s=>!o.has(s));if(i.length)throw new TypeError(`${n} has unknown field ${i[0]}`);for(let s of t)if(!Object.hasOwn(e,s))throw new TypeError(`${n}.${s} is required`);return e}function Gt(e,t,r=200,{lower:n=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||Os.test(e))throw new TypeError(`${t} must be non-empty control-free text up to ${r} characters`);let o=e.trim();return n?o.toLowerCase():o}function Ae(e,t,r=80){let n=Gt(e,t,r,{lower:!0});if(!/^[a-z0-9][a-z0-9._:-]*$/.test(n))throw new TypeError(`${t} must be a lowercase identifier`);return n}function Je(e,t,{positive:r=!1}={}){if(!Number.isSafeInteger(e)||e<0||r&&e===0)throw new TypeError(`${t} must be a ${r?"positive":"non-negative"} safe integer`);return e}function $(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))$(t);Object.freeze(e)}return e}var Os,Yt=u(()=>{we();Rt();Os=/[\u0000-\u001f\u007f]/});function Ln({family:e,chainId:t},r="chain"){let n=Ae(e,`${r}.family`,40),o;if(n==="evm"){if(typeof t=="number")o=String(Je(t,`${r}.chainId`,{positive:!0}));else if(o=Gt(t,`${r}.chainId`,40),!/^[1-9][0-9]*$/.test(o))throw new TypeError(`${r}.chainId must be a positive decimal EVM chain id`)}else o=Ae(t,`${r}.chainId`,80);return{family:n,chainId:o}}function Cs(e,t="chain"){return Se(e,{required:["family","chainId"]},t),$(Ln(e,t))}function $n(e,t="finality rule"){Jt(e,t),Kt(e,t);let r=e.rule;if(!Ts.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let n=r==="confirmations"?"confirmations":r;Se(e,{required:["family","chainId","rule",n]},t);let o=Ln(e,t);return r==="confirmations"?{...o,rule:r,confirmations:Je(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...o,rule:r,[n]:Ae(e[n],`${t}.${n}`,80)}}function Xt(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((n,o)=>$n(n,`finality policy rule ${o}`)),r=new Set;for(let n of t){let o=`${n.family}\0${n.chainId}`;if(r.has(o))throw new TypeError(`duplicate finality rule for ${n.family}:${n.chainId}`);r.add(o)}return $({policyVersion:1,rules:t})}function _s(e){if(Se(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return Xt(e.rules)}function Pn(e,t){let r=Cs(t,"finality query"),o=_s(e).rules.find(i=>i.family===r.family&&i.chainId===r.chainId);return o?$({status:"KNOWN",...r,rule:o}):$({status:Z.UNKNOWN,reason:"MISSING_FINALITY_RULE",...r,rule:null})}function Rs(e,t){if(e==null)return null;Jt(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(Se(e,{required:["status"],optional:[r]},"finality evidence"),!Ns.includes(e.status))throw new TypeError("finality evidence.status is unknown");let n={status:e.status};return e[r]!=null&&(n[r]=t.rule==="confirmations"?Je(e.confirmations,"finality evidence.confirmations",{positive:!0}):Ae(e[r],`finality evidence.${r}`,80)),n}function Bn(e,t){if(!e||e.status===Z.UNKNOWN||e.rule==null)return $({status:Z.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=$n(e.rule??e,"resolved finality rule"),n=Rs(t,r);if(n==null)return $({status:Z.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(n.status!=="LIVE")return $({status:Z.UNKNOWN,final:!1,reason:`${n.status}_EVIDENCE`});let o=!1;return r.rule==="confirmations"?o=n.confirmations!=null&&n.confirmations>=r.confirmations:r.rule==="finalizedTag"?o=n.finalizedTag===r.finalizedTag:o=n.checkpoint===r.checkpoint,$({status:o?Z.FINAL:Z.INCLUDED,final:o,reason:o?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:r})}var Ts,Z,Ns,Dn=u(()=>{Yt();Ts=Object.freeze(["confirmations","finalizedTag","checkpoint"]),Z=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),Ns=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"])});function $s(e){if(e===!0||e===1||e==="1")return"SUCCESS";if(e===!1||e===0||e==="0")return"FAIL";if(typeof e!="string")return"UNKNOWN";let t=e.trim().toUpperCase();return["SUCCESS","SUCCEEDED","OK","EXECUTED"].includes(t)?"SUCCESS":["FAIL","FAILED","FAILURE","REVERTED","REJECTED"].includes(t)?"FAIL":"UNKNOWN"}function jn(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function Qt(e){return e==null?e:Array.isArray(e)?e.map(Qt):ve(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,Qt(e[t])])):String(e)}function Ps(e,t,r,n){let o=x(e.finalityEvidence,n?.finality,e.evidence),i=x(e.finalityPolicy,e.policy);try{return i==null&&ve(e.finalityRule)&&(i=Xt([{family:t,chainId:r,...e.finalityRule}])),i==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:Bn(Pn(i,{family:t,chainId:r}),o)}catch{return{status:"UNKNOWN",final:!1,reason:"MALFORMED_FINALITY_EVIDENCE"}}}function _(e,t,r){r!=null&&(e[t]=r)}function Bs(e){return e==null?null:String(e).trim().toLowerCase()}function Zt(...e){let t=e.map(Bs).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function Fn(e={}){if(!ve(e))throw new TypeError("verified receipt: input object required");let t=qe(e),r=x(t.actionReceipt,t.receipt),n=ve(r)?r:t,o=x(t.observation,t.chainObservation,t.observedReceipt),i=ve(o),s=x(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash),l=x(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family),a=x(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),f=!Zt(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash)||!Zt(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family)||!Zt(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),c=Ps(t,l,a,i&&!f?o:null),d=$s(x(o?.receiptStatus,o?.executionStatus,o?.status)),m=x(t.reconciliationStatus,t.reconciliation?.status,o?.reconciliationStatus),p=x(t.finalityState,t.finalityEvidence?.status,t.evidence?.status,o?.finalityState),h="UNKNOWN";jn(m)||!f&&(i&&d==="FAIL"||jn(p))?h="FAIL":!f&&s&&i&&d==="SUCCESS"&&["INCLUDED","FINAL"].includes(c.status)&&(h="SUCCESS");let w={verifiedReceiptVersion:Ls,status:h};f&&(w.reason="REFERENCE_MISMATCH"),_(w,"txHash",s),_(w,"chain",x(t.chain,n.chain,o?.chain)),_(w,"family",l),_(w,"chainId",a),_(w,"block",x(o?.block,t.block)),_(w,"blockState",x(o?.blockState,o?.inclusionState)),w.finalityState=c.status,_(w,"confirmations",x(o?.confirmations,o?.finality?.confirmations,t.finalityEvidence?.confirmations,t.evidence?.confirmations)),_(w,"observedAt",x(o?.observedAt,t.observedAt)),_(w,"route",x(t.route,n.route)),_(w,"prepareHash",x(t.prepareHash,n.prepareHash)),_(w,"policyOutcome",x(t.policyOutcome,n.policyOutcome,n.policyChecks));let S=x(t.balanceChanges,o?.balanceChanges,o?.balances,n.balanceChanges,n.balances);return S!=null&&(w.balanceChanges=Qt(S)),_(w,"createdAt",x(t.createdAt,n.createdAt)),_(w,"submittedAt",x(t.submittedAt,n.submittedAt)),_(w,"finalizedAt",x(t.finalizedAt,o?.finalizedAt)),_(w,"timestamps",x(t.timestamps,n.timestamps,o?.timestamps)),$(w)}var Ls,Ih,x,ve,qn=u(()=>{we();Dn();Yt();Ls=1,Ih=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),x=(...e)=>e.find(t=>t!=null),ve=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype});var Hn={};Oe(Hn,{observeEvmReceipt:()=>Mn,verifyEvmReceipt:()=>Fs});function js(e){if(e==null)return null;let t=typeof e=="number"?e:Number.parseInt(String(e),16);return Number.isSafeInteger(t)?t:null}async function Mn({txHash:e,chainId:t,rpcUrl:r},n={}){let o=String(e||"").trim().toLowerCase();if(!Ds.test(o))throw new TypeError("observe receipt: txHash must be a 32-byte hash");let i=Number(t);if(!Number.isSafeInteger(i)||i<=0)throw new TypeError("observe receipt: chainId required");let s=n.transactionReceipt||_n,l=n.rpcCall||Vt,a={...n.rpcOptions||{},...r?{rpcUrl:r}:{}},f;try{f=await s({txHash:o,chainId:i},a)}catch(p){return{observation:null,reason:`RPC_UNAVAILABLE: ${p.message}`}}if(!f||f.receipt==null)return{observation:null,reason:f?.reason||"receipt pending"};let c=null,d=f.blockNumber;if(Number.isSafeInteger(d))try{let p=js(await l(i,"eth_blockNumber",[],a));p!=null&&p>=d&&(c=p-d+1)}catch{}let m={txHash:o,family:"evm",chainId:String(i),receiptStatus:f.status==="success"?"SUCCESS":f.status==="reverted"?"FAIL":"UNKNOWN",block:d==null?void 0:String(d),observedAt:new Date().toISOString(),finality:{status:"LIVE",...c==null?{}:{confirmations:c}}};return c!=null&&(m.confirmations=c),{observation:m,reason:null}}async function Fs({txHash:e,chainId:t,confirmations:r=1,rpcUrl:n},o={}){let{observation:i,reason:s}=await Mn({txHash:e,chainId:t,rpcUrl:n},o),l=Fn({txHash:String(e).trim().toLowerCase(),family:"evm",chainId:String(Number(t)),finalityRule:{rule:"confirmations",confirmations:r},...i?{observation:i}:{}});return{receipt:l,observed:!!i,final:l.finalityState==="FINAL",requiredConfirmations:r,reason:s}}var Ds,zn=u(()=>{Rn();qn();Ds=/^0x[0-9a-f]{64}$/});var Un={};Oe(Un,{classifyReceipt:()=>le,configDir:()=>zs,firstHourReport:()=>Ie,probeReceiptModule:()=>Ws,probeReviewModule:()=>Us,venueMap:()=>Ge});import qs from"node:path";import{homedir as Ms}from"node:os";function zs(e=process.env){return e.ORACLE_CONFIG_DIR||qs.join(Ms(),".config","oracle")}function Ge({env:e=process.env,vault:t=null}={}){let r=t||Ee(),n=[];for(let[o,i]of Object.entries(Te)){let s=(i.rpcEnv||[]).some(a=>String(e[a]||"").trim()),l="prepare";i.evm?s&&(l="live"):l="unavailable",n.push({key:o,chainId:i.chainId,name:i.name,family:"evm",status:l,execute:!!(r.vaultExists&&r.armed&&!r.disarmed),note:s?"rpc configured":"public read/prepare; set RPC for live reads"})}return n.push({key:"solana",chainId:null,name:"Solana",family:"sol",status:"prepare",execute:!1,note:"Jupiter quote/prepare; local sol signer"},{key:"bitcoin",chainId:null,name:"Bitcoin",family:"btc",status:"prepare",execute:!1,note:"Esplora read; local btc signer"},{key:"hyperliquid-l1",chainId:null,name:"Hyperliquid L1",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not an EVM signer family"},{key:"polymarket",chainId:null,name:"Polymarket",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not a signer family"}),n}function Ie({env:e=process.env,model:t=Tn(),vault:r=Ee(),signerReachable:n=!1,quote:o=null,reviewAvailable:i=!1,receiptAvailable:s=!1}={}){let l=[],a=(p,h,w,S=null)=>l.push({id:p,status:h,detail:w,fix:S}),f=(()=>{let[p,h]=process.versions.node.split(".").map(Number);return p>20||p===20&&h>=19})();a("node",f?"ok":"fail",`node ${process.versions.node}`,f?null:"install node >= 20.19"),t?t.backend==="hermes"?a("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):a("model","ok",`${t.backend||"auto"} ${t.provider||""} ${t.model||""}`.trim()):a("model","fail","no model.json","oracle setup model"),r.vaultExists?r.disarmed?a("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):a("vault",r.armed?"ok":"warn",r.armed?"present, armed":"present, not armed"):a("vault","fail","no local vault","oracle sign init");let c=e.ORACLE_SIGNER_HOST||"127.0.0.1";if(Hs.has(c)?a("signer",n?"ok":"warn",n?`loopback ${c}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):a("signer","fail",`signer host ${c} is not loopback`,"unset ORACLE_SIGNER_HOST"),!o)a("quote","warn","quote not probed",null);else if(o.ok){let p=String(o.detail||"net quote returned");a("quote","ok",p.length>140?`${p.slice(0,140)}\u2026`:p)}else a("quote","warn",o.detail||"quote unavailable","check network / oracle data serve");a("review",i?"ok":"fail",i?"sign-time review renders decoded action, policy hits, approval deltas":"sign-time review module missing from this build",i?null:"reinstall @oracle-agent/oracle (src/control/sign-time-review.mjs)"),a("receipt",s?"ok":"fail",s?"oracle receipt verifies on-chain state (SUCCESS/FAIL/UNKNOWN, finality-pinned)":"verified-receipt observer missing from this build",s?null:"reinstall @oracle-agent/oracle (src/desk/observe-receipt.mjs)");let d=l.some(p=>p.status==="fail"),m=l.filter(p=>p.status==="ok").length;return{ok:!d,checks:l,firstRunScore:{ok:m,total:l.length,label:`${m}/${l.length} first-run hops green`},venues:Ge({env:e,vault:r})}}async function Us(){try{return typeof(await Promise.resolve().then(()=>(qt(),un))).createSignTimeReview=="function"}catch{return!1}}async function Ws(){try{let e=await Promise.resolve().then(()=>(zn(),Hn));return typeof e.observeReceipt=="function"||typeof e.default=="function"||Object.values(e).some(t=>typeof t=="function")}catch{return!1}}var Hs,Ye=u(()=>{Qe();zt();Nn();et();Hs=new Set(["127.0.0.1","::1","localhost"])});var Vn={};Oe(Vn,{classifyReceipt:()=>le,default:()=>Js,detailText:()=>Wn,firstHourReport:()=>Ie,probeQuote:()=>Ks,probeSigner:()=>Vs,symbol:()=>ke,vaultStatus:()=>Ee});async function Vs(e=process.env){let t=e.ORACLE_SIGNER_HOST||"127.0.0.1",r=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${t}:${r}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}function ke(e){let t=String(e??"?").replace(/[^\w.$-]/g,"");return t.length>12?`${t.slice(0,12)}...`:t||"?"}function Wn(e,t=120){let r=String(e??"").replace(/[\u0000-\u001f\u007f-\u009f]/g," ").replace(/\s+/g," ").trim();return r?r.length>t?`${r.slice(0,t)}...`:r:"quote failed"}async function Ks(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let r=(await e.json())?.pairs?.[0];return!r?.chainId||!r?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${ke(r.chainId)} ${ke(r.baseToken?.symbol)}/${ke(r.quoteToken?.symbol)} $${ke(r.priceUsd)}`}}catch(e){return{ok:!1,detail:Wn(e instanceof Error?e.message:"quote failed")}}}var Js,Kn=u(()=>{Ye();zt();Js={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let t=e.argv.includes("--json"),r=Ge();if(t)return process.stdout.write(`${JSON.stringify({venues:r},null,2)}
4
+ ${JSON.stringify(r??[])}`}async function ks(e,t,r){return Be(e,{method:"POST",body:t,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function Vt(e,t,r=[],n={}){let o=String(t||""),i=Ss(o),s=Es(e,n);if(!s)throw new Error(`No RPC URL for chainId ${e} (set env from chain registry rpcEnv or pass rpcUrl)`);if(i==="eth_chainid"&&n.cacheChainId!==!1){let c=Cn.get(s);if(c!=null)return c}let a=n.dedupe!==!1&&!n.signal?Is(s,o,r):null;if(a&&xe.has(a))return xe.get(a);let f=(async()=>{let c=await ks(s,{jsonrpc:"2.0",id:1,method:t,params:r},n),d=vs(c);return i==="eth_chainid"&&typeof d=="string"&&Cn.set(s,d),d})();return a&&(xe.set(a,f),f.finally(()=>{xe.get(a)===f&&xe.delete(a)}).catch(()=>{})),f}async function _n(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=ys(e.txHash||e.hash||e.transactionHash),o=await Vt(r,"eth_getTransactionReceipt",[n],t);if(!o)return{ok:!1,chainId:r,txHash:n,status:"pending",receipt:null,reason:"receipt pending"};let i=Wt(o.status),s=i===1,l=i===1?"success":i===0?"reverted":"unknown",a=s?null:l==="reverted"?"transaction reverted":"unknown receipt status",f=e.expectedTo?Ut(e.expectedTo,"expectedTo"):null,c=o.to?Ut(o.to,"receipt.to"):null;return f&&c!==f&&(s=!1,a=`to mismatch: expected ${f}, got ${c||"null"}`),{ok:s,chainId:r,txHash:n,status:l,reason:a,statusCode:i,to:c,from:o.from?Ut(o.from,"receipt.from"):null,blockNumber:Wt(o.blockNumber),transactionIndex:Wt(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}var wh,bs,xs,xe,Cn,Rn=u(()=>{De();Qe();wh=new hs(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);bs={1:"https://ethereum.publicnode.com",137:"https://polygon-bor-rpc.publicnode.com",42161:"https://arbitrum-one-rpc.publicnode.com",8453:"https://base-rpc.publicnode.com",10:"https://optimism-rpc.publicnode.com",988:"https://rpc.stable.xyz",56:"https://bsc-rpc.publicnode.com",43114:"https://avalanche-c-chain-rpc.publicnode.com",999:"https://rpc.hyperliquid.xyz/evm",2741:"https://api.mainnet.abs.xyz",4663:"https://rpc.mainnet.chain.robinhood.com"};xs=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;xe=new Map,Cn=new Map});function Kt(e,t){if(!e||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`${t} must be a plain object`);return e}function Jt(e,t="control input"){try{U(e,t),Kr(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function Se(e,{required:t=[],optional:r=[]}={},n="object"){Kt(e,n);let o=new Set([...t,...r]),i=Object.keys(e).filter(s=>!o.has(s));if(i.length)throw new TypeError(`${n} has unknown field ${i[0]}`);for(let s of t)if(!Object.hasOwn(e,s))throw new TypeError(`${n}.${s} is required`);return e}function Gt(e,t,r=200,{lower:n=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||Os.test(e))throw new TypeError(`${t} must be non-empty control-free text up to ${r} characters`);let o=e.trim();return n?o.toLowerCase():o}function Ae(e,t,r=80){let n=Gt(e,t,r,{lower:!0});if(!/^[a-z0-9][a-z0-9._:-]*$/.test(n))throw new TypeError(`${t} must be a lowercase identifier`);return n}function Je(e,t,{positive:r=!1}={}){if(!Number.isSafeInteger(e)||e<0||r&&e===0)throw new TypeError(`${t} must be a ${r?"positive":"non-negative"} safe integer`);return e}function $(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))$(t);Object.freeze(e)}return e}var Os,Yt=u(()=>{we();Rt();Os=/[\u0000-\u001f\u007f]/});function Ln({family:e,chainId:t},r="chain"){let n=Ae(e,`${r}.family`,40),o;if(n==="evm"){if(typeof t=="number")o=String(Je(t,`${r}.chainId`,{positive:!0}));else if(o=Gt(t,`${r}.chainId`,40),!/^[1-9][0-9]*$/.test(o))throw new TypeError(`${r}.chainId must be a positive decimal EVM chain id`)}else o=Ae(t,`${r}.chainId`,80);return{family:n,chainId:o}}function Cs(e,t="chain"){return Se(e,{required:["family","chainId"]},t),$(Ln(e,t))}function $n(e,t="finality rule"){Jt(e,t),Kt(e,t);let r=e.rule;if(!Ts.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let n=r==="confirmations"?"confirmations":r;Se(e,{required:["family","chainId","rule",n]},t);let o=Ln(e,t);return r==="confirmations"?{...o,rule:r,confirmations:Je(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...o,rule:r,[n]:Ae(e[n],`${t}.${n}`,80)}}function Xt(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((n,o)=>$n(n,`finality policy rule ${o}`)),r=new Set;for(let n of t){let o=`${n.family}\0${n.chainId}`;if(r.has(o))throw new TypeError(`duplicate finality rule for ${n.family}:${n.chainId}`);r.add(o)}return $({policyVersion:1,rules:t})}function _s(e){if(Se(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return Xt(e.rules)}function Pn(e,t){let r=Cs(t,"finality query"),o=_s(e).rules.find(i=>i.family===r.family&&i.chainId===r.chainId);return o?$({status:"KNOWN",...r,rule:o}):$({status:Z.UNKNOWN,reason:"MISSING_FINALITY_RULE",...r,rule:null})}function Rs(e,t){if(e==null)return null;Jt(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(Se(e,{required:["status"],optional:[r]},"finality evidence"),!Ns.includes(e.status))throw new TypeError("finality evidence.status is unknown");let n={status:e.status};return e[r]!=null&&(n[r]=t.rule==="confirmations"?Je(e.confirmations,"finality evidence.confirmations",{positive:!0}):Ae(e[r],`finality evidence.${r}`,80)),n}function Bn(e,t){if(!e||e.status===Z.UNKNOWN||e.rule==null)return $({status:Z.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=$n(e.rule??e,"resolved finality rule"),n=Rs(t,r);if(n==null)return $({status:Z.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(n.status!=="LIVE")return $({status:Z.UNKNOWN,final:!1,reason:`${n.status}_EVIDENCE`});let o=!1;return r.rule==="confirmations"?o=n.confirmations!=null&&n.confirmations>=r.confirmations:r.rule==="finalizedTag"?o=n.finalizedTag===r.finalizedTag:o=n.checkpoint===r.checkpoint,$({status:o?Z.FINAL:Z.INCLUDED,final:o,reason:o?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:r})}var Ts,Z,Ns,Dn=u(()=>{Yt();Ts=Object.freeze(["confirmations","finalizedTag","checkpoint"]),Z=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),Ns=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"])});function $s(e){if(e===!0||e===1||e==="1")return"SUCCESS";if(e===!1||e===0||e==="0")return"FAIL";if(typeof e!="string")return"UNKNOWN";let t=e.trim().toUpperCase();return["SUCCESS","SUCCEEDED","OK","EXECUTED"].includes(t)?"SUCCESS":["FAIL","FAILED","FAILURE","REVERTED","REJECTED"].includes(t)?"FAIL":"UNKNOWN"}function jn(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function Qt(e){return e==null?e:Array.isArray(e)?e.map(Qt):ve(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,Qt(e[t])])):String(e)}function Ps(e,t,r,n){let o=x(e.finalityEvidence,n?.finality,e.evidence),i=x(e.finalityPolicy,e.policy);try{return i==null&&ve(e.finalityRule)&&(i=Xt([{family:t,chainId:r,...e.finalityRule}])),i==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:Bn(Pn(i,{family:t,chainId:r}),o)}catch{return{status:"UNKNOWN",final:!1,reason:"MALFORMED_FINALITY_EVIDENCE"}}}function _(e,t,r){r!=null&&(e[t]=r)}function Bs(e){return e==null?null:String(e).trim().toLowerCase()}function Zt(...e){let t=e.map(Bs).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function Fn(e={}){if(!ve(e))throw new TypeError("verified receipt: input object required");let t=qe(e),r=x(t.actionReceipt,t.receipt),n=ve(r)?r:t,o=x(t.observation,t.chainObservation,t.observedReceipt),i=ve(o),s=x(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash),l=x(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family),a=x(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),f=!Zt(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash)||!Zt(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family)||!Zt(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),c=Ps(t,l,a,i&&!f?o:null),d=$s(x(o?.receiptStatus,o?.executionStatus,o?.status)),m=x(t.reconciliationStatus,t.reconciliation?.status,o?.reconciliationStatus),p=x(t.finalityState,t.finalityEvidence?.status,t.evidence?.status,o?.finalityState),h="UNKNOWN";jn(m)||!f&&(i&&d==="FAIL"||jn(p))?h="FAIL":!f&&s&&i&&d==="SUCCESS"&&["INCLUDED","FINAL"].includes(c.status)&&(h="SUCCESS");let w={verifiedReceiptVersion:Ls,status:h};f&&(w.reason="REFERENCE_MISMATCH"),_(w,"txHash",s),_(w,"chain",x(t.chain,n.chain,o?.chain)),_(w,"family",l),_(w,"chainId",a),_(w,"block",x(o?.block,t.block)),_(w,"blockState",x(o?.blockState,o?.inclusionState)),w.finalityState=c.status,_(w,"confirmations",x(o?.confirmations,o?.finality?.confirmations,t.finalityEvidence?.confirmations,t.evidence?.confirmations)),_(w,"observedAt",x(o?.observedAt,t.observedAt)),_(w,"route",x(t.route,n.route)),_(w,"prepareHash",x(t.prepareHash,n.prepareHash)),_(w,"policyOutcome",x(t.policyOutcome,n.policyOutcome,n.policyChecks));let S=x(t.balanceChanges,o?.balanceChanges,o?.balances,n.balanceChanges,n.balances);return S!=null&&(w.balanceChanges=Qt(S)),_(w,"createdAt",x(t.createdAt,n.createdAt)),_(w,"submittedAt",x(t.submittedAt,n.submittedAt)),_(w,"finalizedAt",x(t.finalizedAt,o?.finalizedAt)),_(w,"timestamps",x(t.timestamps,n.timestamps,o?.timestamps)),$(w)}var Ls,kh,x,ve,qn=u(()=>{we();Dn();Yt();Ls=1,kh=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),x=(...e)=>e.find(t=>t!=null),ve=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype});var Hn={};Oe(Hn,{observeEvmReceipt:()=>Mn,verifyEvmReceipt:()=>Fs});function js(e){if(e==null)return null;let t=typeof e=="number"?e:Number.parseInt(String(e),16);return Number.isSafeInteger(t)?t:null}async function Mn({txHash:e,chainId:t,rpcUrl:r},n={}){let o=String(e||"").trim().toLowerCase();if(!Ds.test(o))throw new TypeError("observe receipt: txHash must be a 32-byte hash");let i=Number(t);if(!Number.isSafeInteger(i)||i<=0)throw new TypeError("observe receipt: chainId required");let s=n.transactionReceipt||_n,l=n.rpcCall||Vt,a={...n.rpcOptions||{},...r?{rpcUrl:r}:{}},f;try{f=await s({txHash:o,chainId:i},a)}catch(p){return{observation:null,reason:`RPC_UNAVAILABLE: ${p.message}`}}if(!f||f.receipt==null)return{observation:null,reason:f?.reason||"receipt pending"};let c=null,d=f.blockNumber;if(Number.isSafeInteger(d))try{let p=js(await l(i,"eth_blockNumber",[],a));p!=null&&p>=d&&(c=p-d+1)}catch{}let m={txHash:o,family:"evm",chainId:String(i),receiptStatus:f.status==="success"?"SUCCESS":f.status==="reverted"?"FAIL":"UNKNOWN",block:d==null?void 0:String(d),observedAt:new Date().toISOString(),finality:{status:"LIVE",...c==null?{}:{confirmations:c}}};return c!=null&&(m.confirmations=c),{observation:m,reason:null}}async function Fs({txHash:e,chainId:t,confirmations:r=1,rpcUrl:n},o={}){let{observation:i,reason:s}=await Mn({txHash:e,chainId:t,rpcUrl:n},o),l=Fn({txHash:String(e).trim().toLowerCase(),family:"evm",chainId:String(Number(t)),finalityRule:{rule:"confirmations",confirmations:r},...i?{observation:i}:{}});return{receipt:l,observed:!!i,final:l.finalityState==="FINAL",requiredConfirmations:r,reason:s}}var Ds,zn=u(()=>{Rn();qn();Ds=/^0x[0-9a-f]{64}$/});var Un={};Oe(Un,{classifyReceipt:()=>le,configDir:()=>zs,firstHourReport:()=>Ie,probeReceiptModule:()=>Ws,probeReviewModule:()=>Us,venueMap:()=>Ge});import qs from"node:path";import{homedir as Ms}from"node:os";function zs(e=process.env){return e.ORACLE_CONFIG_DIR||qs.join(Ms(),".config","oracle")}function Ge({env:e=process.env,vault:t=null}={}){let r=t||Ee(),n=[];for(let[o,i]of Object.entries(Te)){let s=(i.rpcEnv||[]).some(a=>String(e[a]||"").trim()),l="prepare";i.evm?s&&(l="live"):l="unavailable",n.push({key:o,chainId:i.chainId,name:i.name,family:"evm",status:l,execute:!!(r.vaultExists&&r.armed&&!r.disarmed),note:s?"rpc configured":"public read/prepare; set RPC for live reads"})}return n.push({key:"solana",chainId:null,name:"Solana",family:"sol",status:"prepare",execute:!1,note:"Jupiter quote/prepare; local sol signer"},{key:"bitcoin",chainId:null,name:"Bitcoin",family:"btc",status:"prepare",execute:!1,note:"Esplora read; local btc signer"},{key:"hyperliquid-l1",chainId:null,name:"Hyperliquid L1",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not an EVM signer family"},{key:"polymarket",chainId:null,name:"Polymarket",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not a signer family"}),n}function Ie({env:e=process.env,model:t=Tn(),vault:r=Ee(),signerReachable:n=!1,quote:o=null,reviewAvailable:i=!1,receiptAvailable:s=!1}={}){let l=[],a=(p,h,w,S=null)=>l.push({id:p,status:h,detail:w,fix:S}),f=(()=>{let[p,h]=process.versions.node.split(".").map(Number);return p>20||p===20&&h>=19})();a("node",f?"ok":"fail",`node ${process.versions.node}`,f?null:"install node >= 20.19"),t?t.backend==="hermes"?a("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):a("model","ok",`${t.backend||"auto"} ${t.provider||""} ${t.model||""}`.trim()):a("model","fail","no model.json","oracle setup model"),r.vaultExists?r.disarmed?a("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):a("vault",r.armed?"ok":"warn",r.armed?"present, armed":"present, not armed"):a("vault","fail","no local vault","oracle sign init");let c=e.ORACLE_SIGNER_HOST||"127.0.0.1";if(Hs.has(c)?a("signer",n?"ok":"warn",n?`loopback ${c}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):a("signer","fail",`signer host ${c} is not loopback`,"unset ORACLE_SIGNER_HOST"),!o)a("quote","warn","quote not probed",null);else if(o.ok){let p=String(o.detail||"net quote returned");a("quote","ok",p.length>140?`${p.slice(0,140)}\u2026`:p)}else a("quote","warn",o.detail||"quote unavailable","check network / oracle data serve");a("review",i?"ok":"fail",i?"sign-time review renders decoded action, policy hits, approval deltas":"sign-time review module missing from this build",i?null:"reinstall @oracle-agent/oracle (src/control/sign-time-review.mjs)"),a("receipt",s?"ok":"fail",s?"oracle receipt verifies on-chain state (SUCCESS/FAIL/UNKNOWN, finality-pinned)":"verified-receipt observer missing from this build",s?null:"reinstall @oracle-agent/oracle (src/desk/observe-receipt.mjs)");let d=l.some(p=>p.status==="fail"),m=l.filter(p=>p.status==="ok").length;return{ok:!d,checks:l,firstRunScore:{ok:m,total:l.length,label:`${m}/${l.length} first-run hops green`},venues:Ge({env:e,vault:r})}}async function Us(){try{return typeof(await Promise.resolve().then(()=>(qt(),un))).createSignTimeReview=="function"}catch{return!1}}async function Ws(){try{let e=await Promise.resolve().then(()=>(zn(),Hn));return typeof e.observeReceipt=="function"||typeof e.default=="function"||Object.values(e).some(t=>typeof t=="function")}catch{return!1}}var Hs,Ye=u(()=>{Qe();zt();Nn();et();Hs=new Set(["127.0.0.1","::1","localhost"])});var Vn={};Oe(Vn,{classifyReceipt:()=>le,default:()=>Js,detailText:()=>Wn,firstHourReport:()=>Ie,probeQuote:()=>Ks,probeSigner:()=>Vs,symbol:()=>ke,vaultStatus:()=>Ee});async function Vs(e=process.env){let t=e.ORACLE_SIGNER_HOST||"127.0.0.1",r=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${t}:${r}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}function ke(e){let t=String(e??"?").replace(/[^\w.$-]/g,"");return t.length>12?`${t.slice(0,12)}...`:t||"?"}function Wn(e,t=120){let r=String(e??"").replace(/[\u0000-\u001f\u007f-\u009f]/g," ").replace(/\s+/g," ").trim();return r?r.length>t?`${r.slice(0,t)}...`:r:"quote failed"}async function Ks(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let r=(await e.json())?.pairs?.[0];return!r?.chainId||!r?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${ke(r.chainId)} ${ke(r.baseToken?.symbol)}/${ke(r.quoteToken?.symbol)} $${ke(r.priceUsd)}`}}catch(e){return{ok:!1,detail:Wn(e instanceof Error?e.message:"quote failed")}}}var Js,Kn=u(()=>{Ye();zt();Js={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let t=e.argv.includes("--json"),r=Ge();if(t)return process.stdout.write(`${JSON.stringify({venues:r},null,2)}
5
5
  `),0;for(let n of r)process.stdout.write(`${n.status.padEnd(12)} ${n.key.padEnd(16)} ${n.name} exec=${n.execute?"local":"no"}
6
- `);return 0}}});Ye();var Jn=[{n:1,title:"quote",cmd:"oracle swap quote 8453 <tokenIn> <tokenOut> <amount> --json",note:"read-only. No wallet, no keys."},{n:2,title:"prepare",cmd:"oracle swap prepare ... --taker <yourWallet>",note:"returns an UNSIGNED transaction. Oracle never holds a key."},{n:3,title:"review",cmd:"shown before any signature",note:"decoded action, route, policy pass/fail, approval deltas, prepare hash."},{n:4,title:"sign",cmd:"your wallet, or oracle signer (local encrypted vault)",note:"you type the exact digest. Nothing signs on your behalf."},{n:5,title:"receipt",cmd:"oracle receipt --hash <txid> --chain <chainId>",note:"observed chain state only. No evidence reads UNKNOWN, never success."}],jh={name:"quickstart",summary:"walk the first-run path: quote -> review -> sign locally -> verified receipt",group:"read",usage:"oracle quickstart [--json] [--check]",async run(e){let t=e.argv||[],r=t.includes("--json"),n=t.includes("--check"),o=null;if(n){let{probeSigner:s,probeQuote:l}=await Promise.resolve().then(()=>(Kn(),Vn)),{probeReviewModule:a,probeReceiptModule:f}=await Promise.resolve().then(()=>(Ye(),Un)),[c,d,m,p]=await Promise.all([s(process.env),l(),a(),f()]);o=Ie({signerReachable:c,quote:d,reviewAvailable:m,receiptAvailable:p})}if(r)return process.stdout.write(`${JSON.stringify({steps:Jn,...o?{readiness:o}:{}},null,2)}
6
+ `);return 0}}});Ye();var Jn=[{n:1,title:"quote",cmd:"oracle swap quote 8453 <tokenIn> <tokenOut> <amount> --json",note:"read-only. No wallet, no keys."},{n:2,title:"prepare",cmd:"oracle swap prepare ... --taker <yourWallet>",note:"returns an UNSIGNED transaction. Oracle never holds a key."},{n:3,title:"review",cmd:"shown before any signature",note:"decoded action, route, policy pass/fail, approval deltas, prepare hash."},{n:4,title:"sign",cmd:"your wallet, or oracle signer (local encrypted vault)",note:"you type the exact digest. Nothing signs on your behalf."},{n:5,title:"receipt",cmd:"oracle receipt --hash <txid> --chain <chainId>",note:"observed chain state only. No evidence reads UNKNOWN, never success."}],Fh={name:"quickstart",summary:"walk the first-run path: quote -> review -> sign locally -> verified receipt",group:"read",usage:"oracle quickstart [--json] [--check]",async run(e){let t=e.argv||[],r=t.includes("--json"),n=t.includes("--check"),o=null;if(n){let{probeSigner:s,probeQuote:l}=await Promise.resolve().then(()=>(Kn(),Vn)),{probeReviewModule:a,probeReceiptModule:f}=await Promise.resolve().then(()=>(Ye(),Un)),[c,d,m,p]=await Promise.all([s(process.env),l(),a(),f()]);o=Ie({signerReachable:c,quote:d,reviewAvailable:m,receiptAvailable:p})}if(r)return process.stdout.write(`${JSON.stringify({steps:Jn,...o?{readiness:o}:{}},null,2)}
7
7
  `),o&&!o.ok?1:0;let i=["","Oracle first run \u2014 what actually happens to your money",""];for(let s of Jn)i.push(` ${s.n}. ${s.title}`),i.push(` ${s.cmd}`),i.push(` ${s.note}`),i.push("");if(i.push(" Oracle prepares. You sign. Oracle verifies what happened on chain."),i.push(""),o){i.push("Readiness:");for(let s of o.checks){let l=s.status==="ok"?"ok ":s.status==="warn"?"warn":"FAIL";i.push(` ${l} ${s.id.padEnd(9)} ${s.detail}${s.fix?` -> ${s.fix}`:""}`)}i.push("")}return process.stdout.write(i.join(`
8
- `)),o&&!o.ok?1:0}};export{jh as default};
8
+ `)),o&&!o.ok?1:0}};export{Fh as default};
@@ -1,4 +1,4 @@
1
- import{homedir as E}from"node:os";import{join as w}from"node:path";var v=process.env.ORACLE_PUBLIC_DESKTOP==="1",X=v?process.env.ORACLE_CONFIG_DIR||w(E(),".config","oracle"):w(E(),".config","oracle"),xe=v?X:w(E(),".config","mad-desk");var A={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},ge=new Map(Object.values(A).map(e=>[e.chainId,e]));function K(e,t="value"){if(typeof e=="number"){if(!Number.isFinite(e))throw new Error(`${t} must be a finite number`);if(Math.abs(e)>Number.MAX_SAFE_INTEGER)throw new Error(`${t} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);if(Number.isInteger(e)&&!Number.isSafeInteger(e))throw new Error(`${t} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);return String(e)}if(typeof e=="string"){if(e!==e.trim())throw new Error(`${t} must be a number or decimal string`);return e}throw new Error(`${t} must be a number or decimal string`)}function p(e,t="amount"){if(typeof e=="bigint")return e;if(typeof e=="number"){if(!Number.isInteger(e))throw new Error(`${t} must be an integer`);if(!Number.isSafeInteger(e))throw new Error(`${t} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);return BigInt(e)}let n=K(e,t);if(n==="")throw new Error(`${t} is required`);if(!/^-?\d+$/.test(n)&&!/^0x[0-9a-fA-F]+$/.test(n))throw new Error(`${t} must be an integer in decimal or 0x-hex form, got ${JSON.stringify(n)}`);try{return BigInt(n)}catch{throw new Error(`${t} must be an integer, got ${JSON.stringify(n)}`)}}var _=Object.freeze({SAFE:"safe",KERNEL_ZERODEV:"kernel-zerodev",BICONOMY_NEXUS:"biconomy-nexus",PERMISSIONLESS_VIEM:"permissionless-viem"}),Ae=Object.freeze(Object.values(_)),_e=Object.freeze({ACTIVE:"active",EXPIRED:"expired",REVOKED:"revoked"}),Ne=1440*60*1e3;var N=["0x000000000022d473030f116ddee9f6b43ac78ba3"],O={4663:["0xcaf681a66d020601342297493863e78c959e5cb2","0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7","0x1f7d7550b1b028f7571e69a784071f0205fd2efa","0x0bd7d308f8e1639fab988df18a8011f41eacad73","0x5fc5360d0400a0fd4f2af552add042d716f1d168","0xb477751b76cf82d00a686a1232f5fcd772414af3","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1"],8453:["0x2626664c2603336e57b271c5c0b26f421741e481","0x6ff5693b99212da76ad316178a184ab56d299b43","0x3d4e44eb1374240ce5f1b871ab261cd16335b76a","0x33128a8fc17869897dce68ed026d694621f6fdfd","0x4200000000000000000000000000000000000006","0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","0xbe6d8f0d05cc4be24d5167a3ef062215be6d18a5","0x254cf9e1e6e233aa1ac962cb9b05b2cfeaae15b0","0x5e7bb104d84c7cb9b682aac2f3d509f5f406809a","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x888888888889758f76e7103c6cbf23abbf58f946","0x3f170631ed9821ca51a59d996ab095162438dc10","0x4f37a9d177470499a2dd084621020b023fcffc1f","0xc92e8bdf79f0507f65a392b0ab4667716bfe0110"],42161:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x61ffe014ba17989e743c5f6cb21bf9697530b21e","0x82af49447d8a07e3bd95bd0d56f35241523fbab1","0xaf88d065e77c8cc2239327c5edb3a432268e5831","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9","0x888888888889758f76e7103c6cbf23abbf58f946","0xeaedc32a51c510d35ebc11088fd5ff2b47aacf2e","0x2191718cd32d02b8e60badffea33e4b5dd9a0a0d","0xc92e8bdf79f0507f65a392b0ab4667716bfe0110","0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41","0x7452c558d45f8afc8c83dae62c3f8a5be19c71f6"],1:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x4cd00e387622c35bddb9b4c962c136462338bc31","0x6a000f20005980200259b80c5102003040001068","0xae563e3f8219521950555f5962419c8919758ea2","0x45312ea0eff7e09c83cbe249fa1d7598c4c8cd4e","0xc92e8bdf79f0507f65a392b0ab4667716bfe0110"],137:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x0dcded3545d565ba3b19e683431381007245d983"],10:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xe2fa4e1d17725e72dcdafe943ecf45df4b9e285b","0x0dcded3545d565ba3b19e683431381007245d983"],56:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xa72c85c258a81761433b4e8da60505fe3dd551cc"],43114:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xf39ca6ede9bf7820a952b52f3c94af526bab9015","0x0dcded3545d565ba3b19e683431381007245d983","0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2","0x820f5ffc5b525cd4d88cd91acf2c28f16530cc68"],999:["0x0a0758d937d1059c356d4714e57f5df0239bce1a","0xd2002373543ce3527023c75e7518c274a51ce712"],2741:["0x4f8c9056bb8a3616693a76922fa35d53c056e5b3"],988:["0x026f252016a7c47cdef1f05a3fc9e20c92a49c37","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1","0x817997ca8394e26cce3de3a076a4889b27dbf9de","0x3dea4be5615974f31624404ef288ba3b36dfeb83","0xeaf7ac0fdf150cdd89340fb762d83848de6a7b83","0x779ded0c9e1022225f8e0630b35a9b54be713736","0xbc6f7725f08232c151b528bdfcaaf89993ca86ee"]},R={1:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x4cd00e387622c35bddb9b4c962c136462338bc31","0x6a000f20005980200259b80c5102003040001068","0xae563e3f8219521950555f5962419c8919758ea2","0x45312ea0eff7e09c83cbe249fa1d7598c4c8cd4e"],10:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xe2fa4e1d17725e72dcdafe943ecf45df4b9e285b","0x0dcded3545d565ba3b19e683431381007245d983"],56:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xa72c85c258a81761433b4e8da60505fe3dd551cc"],137:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x0dcded3545d565ba3b19e683431381007245d983"],988:["0x026f252016a7c47cdef1f05a3fc9e20c92a49c37","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1","0x3dea4be5615974f31624404ef288ba3b36dfeb83","0xbc6f7725f08232c151b528bdfcaaf89993ca86ee"],999:["0x0a0758d937d1059c356d4714e57f5df0239bce1a","0xd2002373543ce3527023c75e7518c274a51ce712"],2741:["0x4f8c9056bb8a3616693a76922fa35d53c056e5b3"],4663:["0xcaf681a66d020601342297493863e78c959e5cb2","0xb477751b76cf82d00a686a1232f5fcd772414af3","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1"],8453:["0x2626664c2603336e57b271c5c0b26f421741e481","0x6ff5693b99212da76ad316178a184ab56d299b43","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x888888888889758f76e7103c6cbf23abbf58f946","0x3f170631ed9821ca51a59d996ab095162438dc10","0x4f37a9d177470499a2dd084621020b023fcffc1f"],42161:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x888888888889758f76e7103c6cbf23abbf58f946","0xeaedc32a51c510d35ebc11088fd5ff2b47aacf2e","0x2191718cd32d02b8e60badffea33e4b5dd9a0a0d"],43114:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xf39ca6ede9bf7820a952b52f3c94af526bab9015","0x0dcded3545d565ba3b19e683431381007245d983"]};import{encodeFunctionData as V}from"viem";import{keccak256 as C,concat as P,getContractAddress as J}from"viem";import{readFileSync as Z}from"node:fs";import{dirname as Q,join as ee}from"node:path";import{fileURLToPath as te}from"node:url";var S="0x4e59b44847b379578588920ca78fbf26c0b4956c";var L="0x365dc643926d7084c9e2f1ad68eb1a944b3aac8abe83c933aaf40c014579414f",m="0xe776361e49a5ba2c978483b2e2717e45f6fe8577172e6c5e2c1d5b0c7bd34e26",D="0x4360b0c758245b325bea83328c6444f8f4b06355388708bc9ee1dc12092d3c52",ne=Object.freeze({1:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Ethereum Pectra (2025-05-07) activated EIP-7702. https://ethereum.org/roadmap/pectra/7702/"}),10:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Live RPC mainnet.optimism.io 2026-08-25: eth_estimateGas type=0x4 \u2192 'EIP-7702 authorization list has invalid fields' (type-4 parsed)."}),56:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Live RPC bsc-dataseed.binance.org 2026-08-25: type=0x4 \u2192 'EIP-7702 transaction with empty auth list'."}),137:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Coinbase Developer Docs: EIP-7702 sponsored delegations on Polygon mainnet. https://docs.cdp.coinbase.com/wallets/using-wallets/eip-7702"}),988:Object.freeze({status:"ready",path:"session-vault",evidence:"No EIP-7702 (type-4 == type-2 21000). Nick factory present. Vault stack."}),999:Object.freeze({status:"ready",path:"session-vault",evidence:"Live RPC: EIP-7702 authorization list not supported. Nick factory present. Vault stack."}),2741:Object.freeze({status:"ready",path:"session-vault",evidence:"No 7702-specific RPC behavior; zkSync-family AA. Vault is the portable EVM lock."}),4663:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Live RPC rpc.mainnet.chain.robinhood.com 2026-08-25: type-4 empty-auth \u2192 EIP-7702 empty auth list. Nick factory present."}),8453:Object.freeze({status:"draft",path:"eip7702-delegate",evidence:"Foundry 9/9 Prague + committed deployedBytecodeHash. No on-chain module address yet."}),42161:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Coinbase Developer Docs: EIP-7702 sponsored delegations on Arbitrum. https://docs.cdp.coinbase.com/wallets/using-wallets/eip-7702"}),43114:Object.freeze({status:"ready",path:"session-vault",evidence:"No 7702 activation (type-4 ignored as 21000). Nick factory present. Vault stack."})});function x(e){return ne[Number(e)]||null}function M(e){return x(e)?.path==="eip7702-delegate"}function T(e){return x(e)?.path==="session-vault"}function z(e){return M(e)||T(e)}var re=/^0x[0-9a-fA-F]{40}$/;function h(e){let t=String(e||"").trim().toLowerCase();if(!re.test(t))throw new Error("session-chain-plan: owner must be a 20-byte address");return C(P([L,t]))}function y(e){return J({opcode:"CREATE2",from:S,salt:h(e),bytecodeHash:m}).toLowerCase()}var b;function se(){if(b)return b;let e=ee(Q(te(import.meta.url)),"../../contracts/session-delegate/vault-creation.hex"),t=Z(e,"utf8").trim().toLowerCase();if(!t.startsWith("0x")||t.length<10)throw new Error("session-chain-plan: vault creation bytecode missing");if(C(t)!==m)throw new Error("session-chain-plan: vault creation bytecode does not match VAULT_INIT_CODE_HASH");return b=t,b}function $(e){let t=h(e);return P([t,se()])}var ae=/^0x[0-9a-fA-F]{40}$/;var k=!0;var Ye=Object.freeze({});function g(e){let t=Number(e);if(!z(t)){let r=x(t)?.evidence||"no session path";throw new Error(`pinned-session-module: chain ${t} refused \u2014 ${r}`)}return t}function oe(e,t){let n=g(e),r=h(t),s=y(t),a=$(t);return Object.freeze({ok:!0,exec:!1,requiresUserSignature:!0,signingReady:!1,userCanSign:!0,broadcastReady:!1,executionReady:!1,chainId:n,stack:"session-vault",from:String(t).trim().toLowerCase(),to:S,value:"0",data:a,salt:r,saltScheme:"keccak256(oracle.session.vault.v1 || owner)",initCodeHash:m,predictedModule:s,bytecodeHash:D,initialize:Object.freeze({status:"blocked",reason:"recovery address not bound \u2014 name a cold key that is not the owner"}),note:"Unsigned CREATE2. Oracle will not broadcast. Fuse still off."})}var ie=(1n<<128n)-1n,ce=720*60*60*1e3;function de({capWei:e,expiresAtMs:t,nowMs:n=Date.now()}={}){let r=p(e??"0","capWei");if(r<=0n||r===ie)throw new Error("pinned-session-module: cap cannot be zero or limitless");let s=Number(t),a=Number(n);if(!Number.isFinite(s)||!Number.isFinite(a)||s<=a)throw new Error("pinned-session-module: expiry must be in the future");if(s-a>ce)throw new Error("pinned-session-module: expiry cannot exceed 30 days");return Object.freeze({ok:!0,capWei:r.toString(),expiresAtMs:s})}var fe=[{type:"function",name:"initialize",stateMutability:"nonpayable",inputs:[{name:"sessionOwner",type:"address"},{name:"sessionAgent",type:"address"},{name:"sessionRecovery",type:"address"},{name:"sessionGuardian",type:"address"},{name:"sessionExpiry",type:"uint48"},{name:"sessionCapWei",type:"uint128"},{name:"sessionDelay",type:"uint48"},{name:"targets",type:"address[]"}],outputs:[]}];function I(e,t){return e==null||String(e).trim()===""?null:c(e,t)}function U(e={}){let t=g(e.chainId),n=I(e.owner,"owner"),r=I(e.recovery,"recovery"),s=I(e.agent,"agent");if(!n)throw new Error("pinned-session-module: owner is required (the user's wallet)");if(!r)throw new Error("pinned-session-module: recovery is required (the user's spare key, never a house default)");if(n===r)throw new Error("pinned-session-module: recovery cannot be the owner");if(s&&(s===n||s===r))throw new Error("pinned-session-module: agent cannot be owner or recovery");let a=e.delaySeconds==null?3600:Number(e.delaySeconds);if(!Number.isFinite(a)||a<3600||a>720*3600)throw new Error("pinned-session-module: delay must be 1 hour\u201330 days");let i=oe(t,n),l=e.guardian?c(e.guardian,"guardian"):null,d=[];Array.isArray(e.targets)&&e.targets.length&&(d=e.targets.map(Y=>W(Y,{chainId:t,banned:[n,r,s,l]})));let f={ok:!0,optional:!0,defaultOn:!1,exec:!1,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,executionReady:!1,chainId:t,owner:n,recovery:r,agent:s||null,guardian:l,predictedModule:i.predictedModule,deploy:i};if(!s||e.capWei==null||e.expiresAtMs==null)return Object.freeze({...f,initialize:Object.freeze({status:"blocked",reason:"agent, cap, and expiry are required \u2014 no house defaults",targets:d}),note:"Optional. Unsigned. User signs. Fuse off."});if(de({capWei:e.capWei,expiresAtMs:e.expiresAtMs,nowMs:e.nowMs}),d.length===0)throw new Error("pinned-session-module: native pay targets required \u2014 no router default");let u=Math.floor(Number(e.expiresAtMs)/1e3),q=V({abi:fe,functionName:"initialize",args:[n,s,r,f.guardian||"0x0000000000000000000000000000000000000000",u,BigInt(e.capWei),a,d]});return Object.freeze({...f,initialize:Object.freeze({status:"ready",exec:!1,requiresUserSignature:!0,userCanSign:!0,to:i.predictedModule,data:q,value:"0",targets:d,capWei:String(e.capWei),expiresAtMs:Number(e.expiresAtMs),delaySeconds:a}),userCanSign:!0,note:"Optional. Unsigned deploy + initialize. User wallet signs. Oracle does not broadcast. Fuse off."})}function c(e,t){let n=String(e||"").trim().toLowerCase();if(!ae.test(n))throw new Error(`pinned-session-module: ${t} must be a 20-byte address`);return n}function W(e,{chainId:t,banned:n=[]}={}){let r=c(e,"target");if(r==="0x0000000000000000000000000000000000000000"||n.map(i=>String(i||"").toLowerCase()).includes(r))throw new Error("pinned-session-module: target cannot be owner, recovery, agent, guardian, or zero");if(new Set([...R[Number(t)]||[],...O[Number(t)]||[],...N].map(i=>String(i).toLowerCase())).has(r))throw new Error("pinned-session-module: swap routers are not native-pay targets");return r}var ue=[{type:"function",name:"execute",stateMutability:"payable",inputs:[{name:"target",type:"address"},{name:"value",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function j(e,t){return`${Number(e)}:${c(t,"owner")}`}function F(e={}){if(!k)throw new Error("pinned-session-module: optional vault spend is off");let t=g(e.chainId),n=c(e.owner,"owner"),r=c(e.recovery,"recovery"),s=c(e.agent,"agent");if(n===r)throw new Error("pinned-session-module: recovery cannot be the owner");if(s===n||s===r)throw new Error("pinned-session-module: agent cannot be owner or recovery");let a=(e.targets||[]).map(u=>c(u,"target"));if(!a.length)throw new Error("pinned-session-module: native pay targets required \u2014 no router default");let i=e.guardian?c(e.guardian,"guardian"):null;for(let u of a)W(u,{chainId:t,banned:[n,r,s,i]});let l=y(n),d=Object.freeze({optIn:!0,chainId:t,owner:n,recovery:r,agent:s,vault:l,targets:Object.freeze([...a])}),f=e.store;return f&&typeof f.set=="function"&&f.set(j(t,n),d),d}function le(e={}){let t=e.store;if(!t||typeof t.get!="function")return null;let n=g(e.chainId),r=c(e.owner,"owner");return t.get(j(n,r))||null}function B(e={}){if(!k)throw new Error("pinned-session-module: optional vault spend is off");let t=le(e);if(!t)throw new Error("pinned-session-module: not opted in");let n=c(e.target,"target");if(!t.targets.includes(n))throw new Error("pinned-session-module: target not permitted");let r=p(e.valueWei??"0","valueWei");if(r<0n)throw new Error("pinned-session-module: valueWei must not be negative");let s=V({abi:ue,functionName:"execute",args:[n,r,"0x"]});return Object.freeze({ok:!0,optIn:!0,exec:!1,requiresUserSignature:!0,userCanSign:!0,signingReady:!1,broadcastReady:!1,executionReady:!1,chainId:t.chainId,from:t.agent,to:t.vault,value:"0",data:s,target:n,valueWei:r.toString(),note:"Unsigned vault.execute. Agent key signs. Oracle does not broadcast."})}var pe=`oracle session-vault \u2014 optional per-user vault (unsigned)
1
+ import{homedir as E}from"node:os";import{join as w}from"node:path";var I=process.env.ORACLE_PUBLIC_DESKTOP==="1",X=I?process.env.ORACLE_CONFIG_DIR||w(E(),".config","oracle"):w(E(),".config","oracle"),xe=I?X:w(E(),".config","mad-desk");var A={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},ge=new Map(Object.values(A).map(e=>[e.chainId,e]));function K(e,t="value"){if(typeof e=="number"){if(!Number.isFinite(e))throw new Error(`${t} must be a finite number`);if(Math.abs(e)>Number.MAX_SAFE_INTEGER)throw new Error(`${t} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);if(Number.isInteger(e)&&!Number.isSafeInteger(e))throw new Error(`${t} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);return String(e)}if(typeof e=="string"){if(e!==e.trim())throw new Error(`${t} must be a number or decimal string`);return e}throw new Error(`${t} must be a number or decimal string`)}function p(e,t="amount"){if(typeof e=="bigint")return e;if(typeof e=="number"){if(!Number.isInteger(e))throw new Error(`${t} must be an integer`);if(!Number.isSafeInteger(e))throw new Error(`${t} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);return BigInt(e)}let n=K(e,t);if(n==="")throw new Error(`${t} is required`);if(!/^-?\d+$/.test(n)&&!/^0x[0-9a-fA-F]+$/.test(n))throw new Error(`${t} must be an integer in decimal or 0x-hex form, got ${JSON.stringify(n)}`);try{return BigInt(n)}catch{throw new Error(`${t} must be an integer, got ${JSON.stringify(n)}`)}}var _=Object.freeze({SAFE:"safe",KERNEL_ZERODEV:"kernel-zerodev",BICONOMY_NEXUS:"biconomy-nexus",PERMISSIONLESS_VIEM:"permissionless-viem"}),Ae=Object.freeze(Object.values(_)),_e=Object.freeze({ACTIVE:"active",EXPIRED:"expired",REVOKED:"revoked"}),Ne=1440*60*1e3;var N=["0x000000000022d473030f116ddee9f6b43ac78ba3"],O={4663:["0xcaf681a66d020601342297493863e78c959e5cb2","0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7","0x1f7d7550b1b028f7571e69a784071f0205fd2efa","0x0bd7d308f8e1639fab988df18a8011f41eacad73","0x5fc5360d0400a0fd4f2af552add042d716f1d168","0xb477751b76cf82d00a686a1232f5fcd772414af3","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1"],8453:["0x2626664c2603336e57b271c5c0b26f421741e481","0x6ff5693b99212da76ad316178a184ab56d299b43","0x3d4e44eb1374240ce5f1b871ab261cd16335b76a","0x33128a8fc17869897dce68ed026d694621f6fdfd","0x4200000000000000000000000000000000000006","0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","0xbe6d8f0d05cc4be24d5167a3ef062215be6d18a5","0x254cf9e1e6e233aa1ac962cb9b05b2cfeaae15b0","0x5e7bb104d84c7cb9b682aac2f3d509f5f406809a","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x888888888889758f76e7103c6cbf23abbf58f946","0x3f170631ed9821ca51a59d996ab095162438dc10","0x4f37a9d177470499a2dd084621020b023fcffc1f","0xc92e8bdf79f0507f65a392b0ab4667716bfe0110"],42161:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x61ffe014ba17989e743c5f6cb21bf9697530b21e","0x82af49447d8a07e3bd95bd0d56f35241523fbab1","0xaf88d065e77c8cc2239327c5edb3a432268e5831","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9","0x888888888889758f76e7103c6cbf23abbf58f946","0xeaedc32a51c510d35ebc11088fd5ff2b47aacf2e","0x2191718cd32d02b8e60badffea33e4b5dd9a0a0d","0xc92e8bdf79f0507f65a392b0ab4667716bfe0110","0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41","0x7452c558d45f8afc8c83dae62c3f8a5be19c71f6"],1:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x4cd00e387622c35bddb9b4c962c136462338bc31","0x6a000f20005980200259b80c5102003040001068","0xae563e3f8219521950555f5962419c8919758ea2","0x45312ea0eff7e09c83cbe249fa1d7598c4c8cd4e","0xc92e8bdf79f0507f65a392b0ab4667716bfe0110"],137:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x0dcded3545d565ba3b19e683431381007245d983"],10:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xe2fa4e1d17725e72dcdafe943ecf45df4b9e285b","0x0dcded3545d565ba3b19e683431381007245d983"],56:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xa72c85c258a81761433b4e8da60505fe3dd551cc"],43114:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xf39ca6ede9bf7820a952b52f3c94af526bab9015","0x0dcded3545d565ba3b19e683431381007245d983","0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2","0x820f5ffc5b525cd4d88cd91acf2c28f16530cc68"],999:["0x0a0758d937d1059c356d4714e57f5df0239bce1a","0xd2002373543ce3527023c75e7518c274a51ce712"],2741:["0x4f8c9056bb8a3616693a76922fa35d53c056e5b3"],988:["0x026f252016a7c47cdef1f05a3fc9e20c92a49c37","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1","0x817997ca8394e26cce3de3a076a4889b27dbf9de","0x3dea4be5615974f31624404ef288ba3b36dfeb83","0xeaf7ac0fdf150cdd89340fb762d83848de6a7b83","0x779ded0c9e1022225f8e0630b35a9b54be713736","0xbc6f7725f08232c151b528bdfcaaf89993ca86ee"]},R={1:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x4cd00e387622c35bddb9b4c962c136462338bc31","0x6a000f20005980200259b80c5102003040001068","0xae563e3f8219521950555f5962419c8919758ea2","0x45312ea0eff7e09c83cbe249fa1d7598c4c8cd4e"],10:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xe2fa4e1d17725e72dcdafe943ecf45df4b9e285b","0x0dcded3545d565ba3b19e683431381007245d983"],56:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xa72c85c258a81761433b4e8da60505fe3dd551cc"],137:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x0dcded3545d565ba3b19e683431381007245d983"],988:["0x026f252016a7c47cdef1f05a3fc9e20c92a49c37","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1","0x3dea4be5615974f31624404ef288ba3b36dfeb83","0xbc6f7725f08232c151b528bdfcaaf89993ca86ee"],999:["0x0a0758d937d1059c356d4714e57f5df0239bce1a","0xd2002373543ce3527023c75e7518c274a51ce712"],2741:["0x4f8c9056bb8a3616693a76922fa35d53c056e5b3"],4663:["0xcaf681a66d020601342297493863e78c959e5cb2","0xb477751b76cf82d00a686a1232f5fcd772414af3","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1"],8453:["0x2626664c2603336e57b271c5c0b26f421741e481","0x6ff5693b99212da76ad316178a184ab56d299b43","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x888888888889758f76e7103c6cbf23abbf58f946","0x3f170631ed9821ca51a59d996ab095162438dc10","0x4f37a9d177470499a2dd084621020b023fcffc1f"],42161:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x888888888889758f76e7103c6cbf23abbf58f946","0xeaedc32a51c510d35ebc11088fd5ff2b47aacf2e","0x2191718cd32d02b8e60badffea33e4b5dd9a0a0d"],43114:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xf39ca6ede9bf7820a952b52f3c94af526bab9015","0x0dcded3545d565ba3b19e683431381007245d983"]};import{encodeFunctionData as V}from"viem";import{keccak256 as C,concat as P,getContractAddress as J}from"viem";import{readFileSync as Z}from"node:fs";import{dirname as Q,join as ee}from"node:path";import{fileURLToPath as te}from"node:url";var S="0x4e59b44847b379578588920ca78fbf26c0b4956c";var L="0x365dc643926d7084c9e2f1ad68eb1a944b3aac8abe83c933aaf40c014579414f",m="0xe776361e49a5ba2c978483b2e2717e45f6fe8577172e6c5e2c1d5b0c7bd34e26",D="0x4360b0c758245b325bea83328c6444f8f4b06355388708bc9ee1dc12092d3c52",ne=Object.freeze({1:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Ethereum Pectra (2025-05-07) activated EIP-7702. https://ethereum.org/roadmap/pectra/7702/"}),10:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Live RPC mainnet.optimism.io 2026-08-25: eth_estimateGas type=0x4 \u2192 'EIP-7702 authorization list has invalid fields' (type-4 parsed)."}),56:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Live RPC bsc-dataseed.binance.org 2026-08-25: type=0x4 \u2192 'EIP-7702 transaction with empty auth list'."}),137:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Coinbase Developer Docs: EIP-7702 sponsored delegations on Polygon mainnet. https://docs.cdp.coinbase.com/wallets/using-wallets/eip-7702"}),988:Object.freeze({status:"ready",path:"session-vault",evidence:"No EIP-7702 (type-4 == type-2 21000). Nick factory present. Vault stack."}),999:Object.freeze({status:"ready",path:"session-vault",evidence:"Live RPC: EIP-7702 authorization list not supported. Nick factory present. Vault stack."}),2741:Object.freeze({status:"ready",path:"session-vault",evidence:"No 7702-specific RPC behavior; zkSync-family AA. Vault is the portable EVM lock."}),4663:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Live RPC rpc.mainnet.chain.robinhood.com 2026-08-25: type-4 empty-auth \u2192 EIP-7702 empty auth list. Nick factory present."}),8453:Object.freeze({status:"draft",path:"eip7702-delegate",evidence:"Foundry 9/9 Prague + committed deployedBytecodeHash. No on-chain module address yet."}),42161:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Coinbase Developer Docs: EIP-7702 sponsored delegations on Arbitrum. https://docs.cdp.coinbase.com/wallets/using-wallets/eip-7702"}),43114:Object.freeze({status:"ready",path:"session-vault",evidence:"No 7702 activation (type-4 ignored as 21000). Nick factory present. Vault stack."})});function x(e){return ne[Number(e)]||null}function M(e){return x(e)?.path==="eip7702-delegate"}function T(e){return x(e)?.path==="session-vault"}function z(e){return M(e)||T(e)}var re=/^0x[0-9a-fA-F]{40}$/;function h(e){let t=String(e||"").trim().toLowerCase();if(!re.test(t))throw new Error("session-chain-plan: owner must be a 20-byte address");return C(P([L,t]))}function y(e){return J({opcode:"CREATE2",from:S,salt:h(e),bytecodeHash:m}).toLowerCase()}var b;function se(){if(b)return b;let e=ee(Q(te(import.meta.url)),"../../contracts/session-delegate/vault-creation.hex"),t=Z(e,"utf8").trim().toLowerCase();if(!t.startsWith("0x")||t.length<10)throw new Error("session-chain-plan: vault creation bytecode missing");if(C(t)!==m)throw new Error("session-chain-plan: vault creation bytecode does not match VAULT_INIT_CODE_HASH");return b=t,b}function $(e){let t=h(e);return P([t,se()])}var ae=/^0x[0-9a-fA-F]{40}$/;var k=!0;var Ye=Object.freeze({});function g(e){let t=Number(e);if(!z(t)){let r=x(t)?.evidence||"no session path";throw new Error(`pinned-session-module: chain ${t} refused \u2014 ${r}`)}return t}function oe(e,t){let n=g(e),r=h(t),s=y(t),a=$(t);return Object.freeze({ok:!0,exec:!1,requiresUserSignature:!0,signingReady:!1,userCanSign:!0,broadcastReady:!1,executionReady:!1,chainId:n,stack:"session-vault",from:String(t).trim().toLowerCase(),to:S,value:"0",data:a,salt:r,saltScheme:"keccak256(oracle.session.vault.v1 || owner)",initCodeHash:m,predictedModule:s,bytecodeHash:D,initialize:Object.freeze({status:"blocked",reason:"recovery address not bound \u2014 name a cold key that is not the owner"}),note:"Unsigned CREATE2. Oracle will not broadcast. Fuse still off."})}var ie=(1n<<128n)-1n,ce=720*60*60*1e3;function de({capWei:e,expiresAtMs:t,nowMs:n=Date.now()}={}){let r=p(e??"0","capWei");if(r<=0n||r===ie)throw new Error("pinned-session-module: cap cannot be zero or limitless");let s=Number(t),a=Number(n);if(!Number.isFinite(s)||!Number.isFinite(a)||s<=a)throw new Error("pinned-session-module: expiry must be in the future");if(s-a>ce)throw new Error("pinned-session-module: expiry cannot exceed 30 days");return Object.freeze({ok:!0,capWei:r.toString(),expiresAtMs:s})}var fe=[{type:"function",name:"initialize",stateMutability:"nonpayable",inputs:[{name:"sessionOwner",type:"address"},{name:"sessionAgent",type:"address"},{name:"sessionRecovery",type:"address"},{name:"sessionGuardian",type:"address"},{name:"sessionExpiry",type:"uint48"},{name:"sessionCapWei",type:"uint128"},{name:"sessionDelay",type:"uint48"},{name:"targets",type:"address[]"}],outputs:[]}];function v(e,t){return e==null||String(e).trim()===""?null:c(e,t)}function U(e={}){let t=g(e.chainId),n=v(e.owner,"owner"),r=v(e.recovery,"recovery"),s=v(e.agent,"agent");if(!n)throw new Error("pinned-session-module: owner is required (the user's wallet)");if(!r)throw new Error("pinned-session-module: recovery is required (the user's spare key, never a house default)");if(n===r)throw new Error("pinned-session-module: recovery cannot be the owner");if(s&&(s===n||s===r))throw new Error("pinned-session-module: agent cannot be owner or recovery");let a=e.delaySeconds==null?3600:Number(e.delaySeconds);if(!Number.isFinite(a)||a<3600||a>720*3600)throw new Error("pinned-session-module: delay must be 1 hour\u201330 days");let i=oe(t,n),l=e.guardian?c(e.guardian,"guardian"):null,d=[];Array.isArray(e.targets)&&e.targets.length&&(d=e.targets.map(Y=>W(Y,{chainId:t,banned:[n,r,s,l]})));let f={ok:!0,optional:!0,defaultOn:!1,exec:!1,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,executionReady:!1,chainId:t,owner:n,recovery:r,agent:s||null,guardian:l,predictedModule:i.predictedModule,deploy:i};if(!s||e.capWei==null||e.expiresAtMs==null)return Object.freeze({...f,initialize:Object.freeze({status:"blocked",reason:"agent, cap, and expiry are required \u2014 no house defaults",targets:d}),note:"Optional. Unsigned. User signs. Fuse off."});if(de({capWei:e.capWei,expiresAtMs:e.expiresAtMs,nowMs:e.nowMs}),d.length===0)throw new Error("pinned-session-module: native pay targets required \u2014 no router default");let u=Math.floor(Number(e.expiresAtMs)/1e3),q=V({abi:fe,functionName:"initialize",args:[n,s,r,f.guardian||"0x0000000000000000000000000000000000000000",u,BigInt(e.capWei),a,d]});return Object.freeze({...f,initialize:Object.freeze({status:"ready",exec:!1,requiresUserSignature:!0,userCanSign:!0,to:i.predictedModule,data:q,value:"0",targets:d,capWei:String(e.capWei),expiresAtMs:Number(e.expiresAtMs),delaySeconds:a}),userCanSign:!0,note:"Optional. Unsigned deploy + initialize. User wallet signs. Oracle does not broadcast. Fuse off."})}function c(e,t){let n=String(e||"").trim().toLowerCase();if(!ae.test(n))throw new Error(`pinned-session-module: ${t} must be a 20-byte address`);return n}function W(e,{chainId:t,banned:n=[]}={}){let r=c(e,"target");if(r==="0x0000000000000000000000000000000000000000"||n.map(i=>String(i||"").toLowerCase()).includes(r))throw new Error("pinned-session-module: target cannot be owner, recovery, agent, guardian, or zero");if(new Set([...R[Number(t)]||[],...O[Number(t)]||[],...N].map(i=>String(i).toLowerCase())).has(r))throw new Error("pinned-session-module: swap routers are not native-pay targets");return r}var ue=[{type:"function",name:"execute",stateMutability:"payable",inputs:[{name:"target",type:"address"},{name:"value",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function j(e,t){return`${Number(e)}:${c(t,"owner")}`}function F(e={}){if(!k)throw new Error("pinned-session-module: optional vault spend is off");let t=g(e.chainId),n=c(e.owner,"owner"),r=c(e.recovery,"recovery"),s=c(e.agent,"agent");if(n===r)throw new Error("pinned-session-module: recovery cannot be the owner");if(s===n||s===r)throw new Error("pinned-session-module: agent cannot be owner or recovery");let a=(e.targets||[]).map(u=>c(u,"target"));if(!a.length)throw new Error("pinned-session-module: native pay targets required \u2014 no router default");let i=e.guardian?c(e.guardian,"guardian"):null;for(let u of a)W(u,{chainId:t,banned:[n,r,s,i]});let l=y(n),d=Object.freeze({optIn:!0,chainId:t,owner:n,recovery:r,agent:s,vault:l,targets:Object.freeze([...a])}),f=e.store;return f&&typeof f.set=="function"&&f.set(j(t,n),d),d}function le(e={}){let t=e.store;if(!t||typeof t.get!="function")return null;let n=g(e.chainId),r=c(e.owner,"owner");return t.get(j(n,r))||null}function B(e={}){if(!k)throw new Error("pinned-session-module: optional vault spend is off");let t=le(e);if(!t)throw new Error("pinned-session-module: not opted in");let n=c(e.target,"target");if(!t.targets.includes(n))throw new Error("pinned-session-module: target not permitted");let r=p(e.valueWei??"0","valueWei");if(r<0n)throw new Error("pinned-session-module: valueWei must not be negative");let s=V({abi:ue,functionName:"execute",args:[n,r,"0x"]});return Object.freeze({ok:!0,optIn:!0,exec:!1,requiresUserSignature:!0,userCanSign:!0,signingReady:!1,broadcastReady:!1,executionReady:!1,chainId:t.chainId,from:t.agent,to:t.vault,value:"0",data:s,target:n,valueWei:r.toString(),note:"Unsigned vault.execute. Agent key signs. Oracle does not broadcast."})}var pe=`oracle session-vault \u2014 optional per-user vault (unsigned)
2
2
 
3
3
  oracle session-vault prepare ...
4
4
  oracle session-vault spend --chain <id> --owner 0x --recovery 0x --agent 0x \\