@oracle-agent/oracle 0.35.15 → 0.35.16
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.
|
@@ -97,7 +97,7 @@ does not prove npm users receive it. A locally hosted model/data/policy loop doe
|
|
|
97
97
|
a bundled signer. A merged feature is not public until the npm artifact containing it is
|
|
98
98
|
published and inspected.
|
|
99
99
|
|
|
100
|
-
**Candidate release in this source tree:** public package `@oracle-agent/oracle@0.35.
|
|
100
|
+
**Candidate release in this source tree:** public package `@oracle-agent/oracle@0.35.16`
|
|
101
101
|
ships the encrypted local vault + short-lived loopback signer. Hosted/keyless
|
|
102
102
|
Oracle cannot hold keys or move funds. Self-host after `oracle sign init|import` is **auto-armed**
|
|
103
103
|
for user-initiated actions. Public still charges the disclosed fee card; Administrator
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
var On=Object.defineProperty;var l=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var xe=(e,t)=>{for(var r in t)On(e,r,{get:t[r],enumerable:!0})};import Se from"node:fs";import _n from"node:os";import X from"node:path";import{fileURLToPath as Cn}from"node:url";function qe(){return process.env.ORACLE_FAKE_HOME||_n.homedir()}function Rn(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function Q(){return Rn()?process.env.ORACLE_CONFIG_DIR||X.join(qe(),".config","oracle"):X.join(qe(),".config","oracle")}function Ln(){return X.join(Q(),"desk.json")}function $n(){return X.join(Q(),"env")}function Y({force:e=!1}={}){if(Y._done&&!e)return Y._result||null;Y._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=$n();if(Se.existsSync(o))for(let i of Se.readFileSync(o,"utf8").split(/\r?\n/)){let s=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let d=s[2];(d.startsWith('"')&&d.endsWith('"')||d.startsWith("'")&&d.endsWith("'"))&&(d=d.slice(1,-1)),r(s[1],d)}}catch{}try{let o=Ln();if(Se.existsSync(o)){let i=JSON.parse(Se.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)),Y._result=Object.keys(t).length?t:null,Y._result}var Nn,S,Ae=l(()=>{Nn=X.dirname(Cn(import.meta.url)),S=X.resolve(Nn,"../..");try{Y()}catch{}});function Xt(e){return oo.get(Number(e))||null}function Qt(e,t=process.env){let r=Xt(e);if(!r)return null;for(let n of r.rpcEnv){let o=(t[n]||"").trim();if(o)return o}return null}var ke,oo,Ve=l(()=>{ke={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}},oo=new Map(Object.values(ke).map(e=>[e.chainId,e]))});function se(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 Ke=l(()=>{});var Zt=l(()=>{});var er=l(()=>{});var ae=l(()=>{});var te=l(()=>{});var Te=l(()=>{ae();te()});import{isAddress as da}from"ethers";var Xe=l(()=>{Te();ae();te()});import{Interface as ao,isAddress as ga}from"ethers";var xa,tr=l(()=>{Xe();ae();te();xa=new ao(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as co,isAddress as va}from"ethers";var Oa,_a,rr=l(()=>{Xe();ae();te();Oa=new co(["function approve(address spender,uint256 amount) returns (bool)"]),_a=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var z=l(()=>{});import{Interface as uo,MaxUint256 as Ba,isAddress as Da,keccak256 as Fa,toUtf8Bytes as Ma}from"ethers";var Wa,H=l(()=>{er();tr();rr();z();te();Wa=new uo(["function approve(address spender,uint256 amount) returns (bool)"])});var Ja,Va,Oe=l(()=>{Ja=300*1e3,Va=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var _e=l(()=>{H()});import{Address as Za,NETWORK as ec,OutScript as tc,RawTx as rc,SigHash as nc,TEST_NETWORK as oc,Transaction as ic}from"@scure/btc-signer";var et=l(()=>{});import{createHash as lo}from"node:crypto";import{base58 as uc}from"@scure/base";import{getCompiledTransactionMessageDecoder as dc}from"@solana/transaction-messages";var nr,fc,tt=l(()=>{nr=e=>lo("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),fc=new Map([[nr("route"),{name:"route",prefixBytes:0}],[nr("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});import W from"node:net";import fo from"node:dns";function Ce(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let r=m=>{if(!m)return[];let c=m.split(":"),f=c.at(-1);if(f?.includes(".")){let u=f.split(".").map(Number);if(u.length!==4||u.some(b=>!Number.isInteger(b)||b<0||b>255))return null;c.splice(c.length-1,1,(u[0]<<8|u[1]).toString(16),(u[2]<<8|u[3]).toString(16))}return c.some(u=>!/^[0-9a-f]{1,4}$/.test(u))?null:c.map(u=>Number.parseInt(u,16))},[n,o]=t.split("::"),i=r(n),s=r(o);if(!i||!s)return null;let d=t.includes("::"),a=8-i.length-s.length;if(!d&&a!==0||d&&a<1)return null;let p=[...i,...Array(Math.max(0,a)).fill(0),...s];return p.length!==8?null:Uint8Array.from(p.flatMap(m=>[m>>8,m&255]))}function rt(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 nt(e){if(W.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(W.isIPv6(e)){let t=Ce(e);if(!t)return!1;let r=Ce("::ffff:0:0");return rt(t,r,96)?nt([...t.slice(12)].join(".")):rt(t,Ce("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,i])=>rt(t,Ce(o),i)):!1}return!1}function mo(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(po.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=W.isIP(r);return n!==0&&!nt(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:n!==0}}async function ot(e,{lookupFn:t=fo.promises.lookup}={}){let r=mo(e);if(!r.ok)return r;if(r.isLiteralIp)return{ok:!0,url:r.url,addresses:[{address:r.host,family:W.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=>!nt(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function it({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let r,n;try{let c=await t();r=c.Agent,n=c.fetch}catch(c){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${c?.message||c}`);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=c=>String(c).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),i=new Map,s=c=>(Array.isArray(c)?c:[c]).map(f=>typeof f=="string"?{address:f}:f).filter(f=>f&&f.address).map(f=>({address:f.address,family:f.family||(W.isIPv6(f.address)?6:4)})),d=(c,f,u)=>{i.set(o(c),s(typeof f=="string"?[{address:f,family:u}]:f))},a=c=>{let f=o(c);if(W.isIP(f))return[{address:f,family:W.isIPv6(f)?6:4}];let u=i.get(f);if(!u||!u.length)throw new Error(`refused: unpinned host ${c} during pinned fetch`);return u},p=new r({connect:{lookup(c,f,u){let b;try{b=a(c)}catch(w){return u(w)}return f?.all?u(null,b):u(null,b[0].address,b[0].family)}}}),m=ho((c,f={})=>n(c,{...f,dispatcher:p}),d);return{dispatcher:p,fetch:m,pin:d,resolve:a,async close(){try{await p.destroy()}catch{}}}}function ho(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[st]=Object.freeze({pin:t}),e}function at(e){return typeof e=="function"&&typeof e[st]?.pin=="function"}function or(e,t,r){if(!at(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[st].pin(t,r)}var po,st,ir=l(()=>{po=new Set(["localhost","metadata.google.internal","metadata.goog"]);st=Symbol.for("oracle.egressGuard.pinCapableFetch")});import{createHash as sr}from"node:crypto";function Eo(e){let t=String(e||"").toLowerCase();return pr.includes(t)||/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(t)}function xo(e){let t={};for(let[r,n]of Object.entries(e||{}))Eo(r)||(t[r]=n);return t}function So(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 Ao(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function lr(e){let t=String(e?.method||"");return t?!vo.test(t):!1}function Io(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}return Array.isArray(r)?r.length>0&&r.every(lr):!r||typeof r!="object"?!1:r.jsonrpc&&r.method?lr(r):typeof r.type=="string"&&ko.has(r.type)&&r.action==null&&r.signature==null&&r.nonce==null}function To(e,t,r,n={},o=null){let i={};for(let[f,u]of Object.entries(r||{}))i[f.toLowerCase()]=u;let s=Object.keys(i).filter(f=>/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(f)),a=[...new Set([...pr,...s])].sort().map(f=>`${f}=${i[f]??""}`).join(`
|
|
2
|
-
`),p=sr("sha256").update(a).digest("hex").slice(0,32),m=`${n.untrustedUrl?"untrusted":"trusted"}:${n.maxResponseBytes??"unbounded"}`,c=o==null?"-":sr("sha256").update(String(o)).digest("hex").slice(0,32);return`${e} ${t} ${m} ${p} ${c}`}function Oo(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,cr):Math.min(250*2**e,cr)+Math.floor(Math.random()*100)}function ue(e,t={}){let r=new Error(e);return r.retryable=!1,Object.assign(r,t),r}function ut(e,t,r){return ue(`HTTP response from ${e} exceeded maxResponseBytes ${r} (${t})`,{oversize:!0})}function le(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function Co(e){return e?e.byteLength??e.length??0:0}async function dr(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&&(le(e),!n))throw ut(r,`content-length ${i}`,t);let s=e.body?.getReader?.();if(!s){let c=await e.text(),f=Buffer.byteLength(c,"utf8");if(f>t){if(!n)throw ut(r,`body ${f} bytes`,t);return Buffer.from(c,"utf8").subarray(0,t).toString("utf8")}return c}let d=[],a=0,p=!1;try{for(;;){let{value:c,done:f}=await s.read();if(f)break;if(c&&(d.push(Buffer.from(c)),a+=Co(c),a>t)){p=!0;break}}}finally{if(p)try{await s.cancel()}catch{}try{s.releaseLock?.()}catch{}}if(p&&(typeof o=="function"&&o(),!n))throw ut(r,`streamed ${a} bytes`,t);let m=Buffer.concat(d);return(p?m.subarray(0,t):m).toString("utf8")}function fr(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function No(e,{fetchImpl:t,method:r,headers:n,body:o,timeoutMs:i,lookupFn:s,realFetch:d,untrustedUrl:a=!1,maxResponseBytes:p=null,importUndici:m,validateResponse:c,signal:f}){let u=new AbortController,b=setTimeout(()=>u.abort(),i),w=f?typeof AbortSignal.any=="function"?AbortSignal.any([f,u.signal]):f:u.signal,h=null,I=t,O=s?{lookupFn:s}:{};if(a&&!d&&!at(I))throw ue(`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 g=async(y,{status:x=null}={})=>{let v=await ot(y,O);if(!v.ok)throw ue(x==null?`HTTP refused ${y}: ${v.error}`:`HTTP redirect to ${y} ${v.error}`,x==null?{}:{status:x});let E=new URL(y).hostname;if(d){if(h&&(await h.close(),h=null),!h)try{h=await it({requireUndici:!0,...m?{importUndici:m}:{}})}catch(_){throw ue(x==null?`HTTP refused ${y}: ${_?.message||_}`:`HTTP redirect to ${y} refused: ${_?.message||_}`,x==null?{}:{status:x})}h.pin(E,v.addresses),I=h.fetch}else or(I,E,v.addresses);return v};try{let y=String(e),x={...n||{}};a&&await g(y);for(let v=0;v<=ur;v+=1){let E=await I(y,{method:r,headers:x,body:o,signal:w,redirect:"manual"});if(yo.has(E.status)){if(r!=="GET"&&r!=="HEAD"){let L=await dr(E,p??bo,{url:y,truncate:!0}),M=new Error(`HTTP ${E.status} ${r} ${y} redirected non-idempotent request`);throw M.status=E.status,M.body=fr(L)??L.slice(0,300),M}if(v===ur)throw le(E),new Error(`HTTP redirect loop for ${e}`);let C=E.headers?.get?.("location"),B;try{B=So(C,y)}catch(L){throw le(E),L}let D=!Ao(B,y);if(le(E),D&&(x=xo(x)),a)await g(B,{status:E.status});else if(D){let L=await ot(B,O);if(!L.ok){let M=new Error(`HTTP redirect from ${y} ${L.error}`);throw M.status=E.status,M.retryable=!1,M}d&&L.addresses?.length&&(h||(h=await it(m?{importUndici:m}:{})),h&&(h.pin(new URL(B).hostname,L.addresses),I=h.fetch))}y=B;continue}if(typeof c=="function")try{await c(E,{url:y})}catch(C){throw le(E),ue(C?.message||String(C))}let _=await dr(E,p,{url:y,onOversize:()=>u.abort()}),K=fr(_);if(!E.ok){let C=new Error(`HTTP ${E.status} ${r} ${y}`);throw C.status=E.status,C.retryAfter=E.headers?.get?.("retry-after")??null,C.body=K??_.slice(0,300),C}return K??_}throw new Error(`HTTP redirect loop for ${e}`)}finally{clearTimeout(b),h&&await h.close()}}async function Ne(e,t={}){let r=t.fetchImpl||globalThis.fetch;if(typeof r!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let n=t.timeoutMs??12e3,o=(t.method||"GET").toUpperCase(),i={Accept:"application/json",...t.headers||{}},s=t.body;s!=null&&typeof s!="string"&&(i["Content-Type"]=i["Content-Type"]||"application/json",s=JSON.stringify(s));let d=Number.isInteger(t.retries)?Math.max(t.retries,0):go,a=t.lookupFn,p=!t.fetchImpl,m=t.untrustedUrl===!0,c=t.importUndici,f=t.validateResponse,u=t.signal,b=Number(t.maxResponseBytes),w=Number.isFinite(b)&&b>0?Math.floor(b):null,h=async()=>{let x;for(let v=0;v<=d;v++){u?.throwIfAborted?.();try{return await No(e,{fetchImpl:r,method:o,headers:i,body:s,timeoutMs:n,lookupFn:a,realFetch:p,untrustedUrl:m,maxResponseBytes:w,importUndici:c,validateResponse:f,signal:u})}catch(E){x=E;let _=E?.status,K=E?.name==="AbortError"||E?.name==="TimeoutError"||u?.aborted,C=new Set([408,425,429]),B=E?.retryable===!1?!1:_!=null?C.has(_)||wo.has(_)&&ar.has(o):!K&&ar.has(o);if(v===d||!B)throw E;let D=Oo(v,E?.retryAfter);u?await new Promise((L,M)=>{let Tn=setTimeout(L,D);u.addEventListener("abort",()=>{clearTimeout(Tn),M(u.reason||new DOMException("Aborted","AbortError"))},{once:!0})}):await _o(D)}}throw x};if(!(t.dedupe!==!1&&!u&&Io(o,s)))return h();let O=To(o,e,i,{untrustedUrl:m,maxResponseBytes:w},s),g=ct.get(O);if(g)return g;let y=h().finally(()=>ct.delete(O));return ct.set(O,y),y}var wo,ar,go,cr,pr,yo,ur,bo,ct,vo,ko,_o,Re=l(()=>{ir();wo=new Set([408,425,429,500,502,503,504]),ar=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),go=2,cr=4e3,pr=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],yo=new Set([301,302,303,307,308]),ur=3,bo=64*1024;ct=new Map,vo=/(?:^|_)(send|submit|broadcast|sign|requestAirdrop)(?=[A-Z_]|$)/i,ko=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 mr=l(()=>{Re()});var hr=l(()=>{mr()});var _c,Cc,dt=l(()=>{z();hr();_c=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,ft=l(()=>{z();Lc="0x"+"00".repeat(32)});var Ro,Fc,pt=l(()=>{ft();z();Ro=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(Ro.map(e=>e[0]))});var Le=l(()=>{z()});import{TypedDataEncoder as zc,getAddress as Hc,isAddress as Wc}from"ethers";var $o,Po,br=l(()=>{Oe();$o=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Po=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 Vc,Er=l(()=>{Vc=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var xr=l(()=>{});import{TypedDataEncoder as ru,getAddress as nu,isAddress as ou}from"ethers";var Bo,du,Do,fu,Sr=l(()=>{Re();Te();Er();xr();Oe();Bo=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),du=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),Do=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 hu,getAddress as wu}from"ethers";var bu,mt=l(()=>{br();Sr();bu=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as vr}from"ethers";var zo,Bu,Ho,Du,Fu,Mu,ju,Wo,qu,$e=l(()=>{H();Te();Oe();_e();et();tt();dt();pt();Le();mt();zo=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}),Ho=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"}}),Fu=new vr(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Mu=new vr(["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"]),ju=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"}}),Wo=Object.freeze([...zo]),qu=Object.freeze({...Ho})});import{encode as Hu}from"@msgpack/msgpack";import{keccak256 as Gu,verifyTypedData as Ju}from"ethers";var Vu,Ku,ht=l(()=>{Vu=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Ku=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var wt=l(()=>{Le()});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 gt=l(()=>{ht();wt()});import{base58 as El}from"@scure/base";var Pe=l(()=>{$e();_e();H();gt()});var Ir=l(()=>{Pe();$e()});var Rl,Ll,$l,re=l(()=>{Rl=Object.freeze({N:1<<17,r:8,p:1}),Ll=256*1024*1024,$l=16*1024});var Bl,Tr=l(()=>{Bl=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 yt}from"node:os";import{join as bt}from"node:path";var Or,Vo,jl,_r=l(()=>{Or=process.env.ORACLE_PUBLIC_DESKTOP==="1",Vo=Or?process.env.ORACLE_CONFIG_DIR||bt(yt(),".config","oracle"):bt(yt(),".config","oracle"),jl=Or?Vo:bt(yt(),".config","mad-desk")});var Wl,Gl,Jl,Cr=l(()=>{_r();Wl="0".repeat(64),Gl=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"}),Jl=Promise.resolve()});var Et=l(()=>{Cr();z();re();Pe()});var Rr=l(()=>{});var Pr={};xe(Pr,{SIGN_TIME_REVIEW_VERSION:()=>Ko,SignTimeReviewSecretError:()=>de,createSignTimeReview:()=>$r});function xt(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string"){let o=e.trim().split(/\s+/);if(ei.test(e)||ti.has(o.length)&&o.every(i=>/^[a-z]+$/i.test(i)))throw new de(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)=>xt(o,`${t}[${i}]`,r));G(e,t);let n={};for(let o of Object.keys(e).sort()){let i=o.replace(/[^a-z0-9]/gi,"");if(Zo.test(i))throw new de(`${t}.${o}`);e[o]!==void 0&&(n[o]=xt(e[o],`${t}.${o}`,o))}return n}function G(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 fe(e,t){if(e==null||e==="")throw new TypeError(`sign-time review: ${t} required`);return e}function ne(e,t){let r=String(fe(e,t)).toLowerCase();if(!Yo.test(r))throw new TypeError(`sign-time review: ${t} must be an EVM address`);return r}function j(e,t,{positive:r=!1}={}){try{let n=BigInt(fe(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 St(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 Lr(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))Lr(t);Object.freeze(e)}return e}function ri(e,t){if(typeof e=="boolean")return{passed:e,reason:e?"passed":"failed"};G(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:St(String(n),`${t}.reason`)}}function ni(e){if(!Array.isArray(e))throw new TypeError("sign-time review: policyChecks must be an array");let t=e.map((n,o)=>ri(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 oi(e){if(e==null)return null;if(G(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:St(String(e.summary??"simulation result recorded"),"simulation.summary")};return e.gasEstimate!=null&&(t.gasEstimate=j(e.gasEstimate,"simulation.gasEstimate")),e.gasLimit!=null&&(t.gasLimit=j(e.gasLimit,"simulation.gasLimit")),t}function ii(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)=>{G(t,`assetDeltas[${r}]`);let n=j(t.before,`assetDeltas[${r}].before`),o=j(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:St(String(fe(t.asset??t.token,`assetDeltas[${r}].asset`)),`assetDeltas[${r}].asset`),before:n,after:o,delta:s}})}function si(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)=>{G(t,`approvalDeltas[${r}]`);let n=j(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 $r(e={}){G(e,"input");let t=xt(e),r=t.tx==null?t:G(t.tx,"tx"),n=j(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(fe(t.prepareHash,"prepareHash")).toLowerCase();if(!Qo.test(s))throw new TypeError("sign-time review: prepareHash must be a 32-byte hash");let d=t.route??t.venue;if(d==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 p=String(fe(t.calldata??t.data??r.data,"calldata/data")).toLowerCase();if(!Xo.test(p))throw new TypeError("sign-time review: calldata/data must be even-length hex");let m=t.policyChecks!==void 0&&t.policyChecks!==null,c=ni(m?t.policyChecks:[]),f=oi(t.simulation),u=ii(t.assetDeltas),b=si(t.approvalDeltas),w=t.allowlistHits??[];if(!Array.isArray(w))throw new TypeError("sign-time review: allowlistHits must be an array");let h=f?.willRevert===!0||["failed","error"].includes(f?.status),I=f!=null&&f.willRevert===!1&&["ok","success"].includes(f.status),O=h||c.failed>0?"BLOCKED":I&&m&&c.checks.length>0&&u!=null?"READY":"UNKNOWN",g=typeof a=="string"?a:a.method??a.action??a.type??"transaction",y=`${O}: review ${g} on chain ${n}; policy ${c.passed} passed, ${c.failed} failed; ${u?.length??0} asset delta${u?.length===1?"":"s"}; local signature required`,x={reviewVersion:1,status:O,requiresLocalSignature:!0,signingLocal:!0,custody:"none",execution:"review-only",chainId:n,account:o,from:o,route:d,venue:t.venue??(typeof d=="string"?d:d.venue??d.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:p,data:p,selector:p.length>=10?p.slice(0,10):null,value:j(t.value??r.value??0,"value"),...(t.gasEstimate??r.gasEstimate)==null?{}:{gasEstimate:j(t.gasEstimate??r.gasEstimate,"gasEstimate")},...(t.gasLimit??r.gasLimit)==null?{}:{gasLimit:j(t.gasLimit??r.gasLimit,"gasLimit")},simulation:f,policyChecks:c,allowlistHits:w,assetDeltas:u,approvalDeltas:b,summary:y};return Lr(x)}var Ko,Yo,Xo,Qo,Zo,ei,ti,de,At=l(()=>{Ko=1,Yo=/^0x[0-9a-f]{40}$/,Xo=/^0x(?:[0-9a-f]{2})*$/,Qo=/^(?:0x)?[0-9a-f]{64}$/,Zo=/(privatekey|privkey|secretkey|seedphrase|mnemonic|passphrase|password|keystore|keymaterial|wif|xprv|xpriv|bearer|authorization|signature|apikey|credential)/i,ei=/\b(?:[5KL][1-9A-HJ-NP-Za-km-z]{50,51}|xprv[0-9A-Za-z]{50,})\b/,ti=new Set([12,15,18,21,24]),de=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 nd,readdirSync as od,existsSync as ai}from"node:fs";import{dirname as ci,join as pe}from"node:path";import{fileURLToPath as ui}from"node:url";function li(){let e=[pe(me,"descriptors"),pe(me,"clear-sign","descriptors"),pe(me,"..","clear-sign","descriptors"),pe(me,"..","..","clear-sign","descriptors"),pe(me,"..","..","..","clear-sign","descriptors")];for(let t of e)if(ai(t))return t;return e[0]}var me,cd,ud,Br=l(()=>{H();me=ci(ui(import.meta.url));cd=li(),ud=(1n<<256n)-1n});var Dr=l(()=>{At();H();Br()});import{Wallet as gd}from"ethers";import{base58 as bd}from"@scure/base";import{ed25519 as xd}from"@noble/curves/ed25519.js";import{NETWORK as Ad,TEST_NETWORK as vd,WIF as kd,p2wpkh as Id}from"@scure/btc-signer";import{pubECDSA as Od}from"@scure/btc-signer/utils.js";var Fr=l(()=>{});var Nd,Rd,Ld,$d,Pd,Bd,Dd,Fd,Md,jd,qd,Mr=l(()=>{Et();Nd=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),Rd=Object.freeze(["binance","bybit","okx","coinbase"]),Ld=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),$d=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),Pd=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Bd=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Dd=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Fd=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),Md=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),jd=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),qd=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var jr=l(()=>{re()});var pi,qr,De=l(()=>{pi=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}"]})}),qr=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var Ur=l(()=>{De()});var Xd,zr=l(()=>{De();Ur();Xd=256*1024});var Hr=l(()=>{De();zr()});var Wr=l(()=>{re()});import N from"node:path";import mi from"node:os";import{createHash as hi,randomBytes as Uf}from"node:crypto";import{Interface as vt,keccak256 as Hf}from"ethers";import{Transaction as Gf}from"@scure/btc-signer";import{ed25519 as Vf}from"@noble/curves/ed25519.js";function Gr(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||N.join(process.env.XDG_STATE_HOME||N.join(mi.homedir(),".local","state"),"oracle"),r=hi("sha256").update(N.resolve(e)).digest("hex").slice(0,16);return{vault:N.join(e,"vault.json"),policy:N.join(e,"signer-policy.json"),policyKey:N.join(e,"policy-integrity-key"),policyAnchor:N.join(t,`signer-policy-${r}.high-water`),ledger:N.join(e,"signer-ledger.json"),ledgerAnchor:N.join(t,`signer-ledger-${r}.high-water`),cexOrders:N.join(e,"cex-orders.json"),cexOrdersAnchor:N.join(t,`cex-orders-${r}.high-water`),token:N.join(e,"signer-token"),lock:N.join(t,`signer-${r}.lock`)}}var Sp,Ap,vp,Jr=l(()=>{Ir();Pe();re();Tr();Et();Rr();H();Dr();$e();_e();gt();dt();pt();Le();wt();ft();ht();et();tt();mt();Fr();Mr();jr();Hr();Wr();Sp=new vt(["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"]),Ap=new vt(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),vp=new vt(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import kt from"node:fs";import Vr from"node:path";import{homedir as wi}from"node:os";function gi(){return process.env.ORACLE_CONFIG_DIR||Vr.join(wi(),".config","oracle")}function he(){let e=Gr(Vr.join(gi(),"signer")),t=kt.existsSync(e.vault),r=kt.existsSync(e.lock),n=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:kt.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 Pp,It=l(()=>{Ke();Zt();Jr();re();Pp=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_ack",description:"Execute one pending artifact through the armed local signer (same path as Telegram Allow). Fails if the signer is not running or disarmed. Never holds keys.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},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}}}])});function Fe(e){return String(e||"").trim()||void 0}function bi(e,{required:t=!1}={}){let r=Fe(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!yi.has(r))throw new Error(`unsupported provider: ${r}`);return r}function Ei(e,{required:t=!1}={}){let r=Fe(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 xi(e){let t=Fe(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 Kr({provider:e,model:t,baseUrl:r}={},{requireModel:n=!1}={}){let o=bi(e),i=Ei(t,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:xi(r)};if(Fe(r))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var yi,Yr=l(()=>{yi=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"])});import Xr from"node:fs";import Si from"node:path";function vi(){return Si.join(Q(),"model.json")}function oe(e){return String(e||"").trim()||void 0}function ki(e={}){let t=oe(e.backend)?.toLowerCase()||"auto",r=Kr({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),n=oe(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=oe(e.reasoningEffort),s=oe(e.computeHost||e.remoteHost),d=oe(e.computeUser||e.remoteUser),a=oe(e.computePath||e.remotePath);if(!Ai.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}:{},...d?{computeUser:d}:{},...a?{computePath:a}:{}}}function Qr(){let e=vi();if(!Xr.existsSync(e))return null;try{return ki(JSON.parse(Xr.readFileSync(e,"utf8")))}catch{return null}}var Ai,Zr=l(()=>{Ae();Yr();Ai=new Set(["auto","standalone","hermes","remote","arch"])});import{Interface as Ii,getAddress as Ti}from"ethers";function Tt(e,t){try{return Ti(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function Oi(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 Ot(e){return e==null?null:Number.parseInt(String(e),16)}function Ci(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let n=Qt(e,r);return n||_i[Number(e)]||null}function Ri(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!Ni.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 Li(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function $i(e){if(e?.error)throw Li(e.error);return e?.result}function Pi(e,t,r){return`${e}
|
|
1
|
+
var Cn=Object.defineProperty;var l=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var Se=(e,t)=>{for(var r in t)Cn(e,r,{get:t[r],enumerable:!0})};import Ae from"node:fs";import Nn from"node:os";import X from"node:path";import{fileURLToPath as Rn}from"node:url";function Ue(){return process.env.ORACLE_FAKE_HOME||Nn.homedir()}function Ln(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function Q(){return Ln()?process.env.ORACLE_CONFIG_DIR||X.join(Ue(),".config","oracle"):X.join(Ue(),".config","oracle")}function Pn(){return X.join(Q(),"desk.json")}function Bn(){return X.join(Q(),"env")}function Y({force:e=!1}={}){if(Y._done&&!e)return Y._result||null;Y._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=Bn();if(Ae.existsSync(o))for(let i of Ae.readFileSync(o,"utf8").split(/\r?\n/)){let s=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let d=s[2];(d.startsWith('"')&&d.endsWith('"')||d.startsWith("'")&&d.endsWith("'"))&&(d=d.slice(1,-1)),r(s[1],d)}}catch{}try{let o=Pn();if(Ae.existsSync(o)){let i=JSON.parse(Ae.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)),Y._result=Object.keys(t).length?t:null,Y._result}var $n,S,ve=l(()=>{$n=X.dirname(Rn(import.meta.url)),S=X.resolve($n,"../..");try{Y()}catch{}});function Qt(e){return so.get(Number(e))||null}function Zt(e,t=process.env){let r=Qt(e);if(!r)return null;for(let n of r.rpcEnv){let o=(t[n]||"").trim();if(o)return o}return null}var Ie,so,Ke=l(()=>{Ie={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}},so=new Map(Object.values(Ie).map(e=>[e.chainId,e]))});function se(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 Ye=l(()=>{});var er=l(()=>{});var tr=l(()=>{});var ae=l(()=>{});var te=l(()=>{});var Oe=l(()=>{ae();te()});import{isAddress as pa}from"ethers";var Qe=l(()=>{Oe();ae();te()});import{Interface as uo,isAddress as ba}from"ethers";var Aa,rr=l(()=>{Qe();ae();te();Aa=new uo(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as lo,isAddress as Ia}from"ethers";var Ca,Na,nr=l(()=>{Qe();ae();te();Ca=new lo(["function approve(address spender,uint256 amount) returns (bool)"]),Na=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var z=l(()=>{});import{Interface as fo,MaxUint256 as Fa,isAddress as Ma,keccak256 as ja,toUtf8Bytes as qa}from"ethers";var Ja,H=l(()=>{tr();rr();nr();z();te();Ja=new fo(["function approve(address spender,uint256 amount) returns (bool)"])});var Ka,Ya,_e=l(()=>{Ka=300*1e3,Ya=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var Ce=l(()=>{H()});import{Address as tc,NETWORK as rc,OutScript as nc,RawTx as oc,SigHash as ic,TEST_NETWORK as sc,Transaction as ac}from"@scure/btc-signer";var tt=l(()=>{});import{createHash as po}from"node:crypto";import{base58 as dc}from"@scure/base";import{getCompiledTransactionMessageDecoder as pc}from"@solana/transaction-messages";var or,mc,rt=l(()=>{or=e=>po("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),mc=new Map([[or("route"),{name:"route",prefixBytes:0}],[or("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});import W from"node:net";import mo from"node:dns";function Ne(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let r=m=>{if(!m)return[];let c=m.split(":"),f=c.at(-1);if(f?.includes(".")){let u=f.split(".").map(Number);if(u.length!==4||u.some(b=>!Number.isInteger(b)||b<0||b>255))return null;c.splice(c.length-1,1,(u[0]<<8|u[1]).toString(16),(u[2]<<8|u[3]).toString(16))}return c.some(u=>!/^[0-9a-f]{1,4}$/.test(u))?null:c.map(u=>Number.parseInt(u,16))},[n,o]=t.split("::"),i=r(n),s=r(o);if(!i||!s)return null;let d=t.includes("::"),a=8-i.length-s.length;if(!d&&a!==0||d&&a<1)return null;let p=[...i,...Array(Math.max(0,a)).fill(0),...s];return p.length!==8?null:Uint8Array.from(p.flatMap(m=>[m>>8,m&255]))}function nt(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 ot(e){if(W.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(W.isIPv6(e)){let t=Ne(e);if(!t)return!1;let r=Ne("::ffff:0:0");return nt(t,r,96)?ot([...t.slice(12)].join(".")):nt(t,Ne("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,i])=>nt(t,Ne(o),i)):!1}return!1}function wo(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(ho.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=W.isIP(r);return n!==0&&!ot(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:n!==0}}async function it(e,{lookupFn:t=mo.promises.lookup}={}){let r=wo(e);if(!r.ok)return r;if(r.isLiteralIp)return{ok:!0,url:r.url,addresses:[{address:r.host,family:W.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=>!ot(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function st({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let r,n;try{let c=await t();r=c.Agent,n=c.fetch}catch(c){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${c?.message||c}`);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=c=>String(c).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),i=new Map,s=c=>(Array.isArray(c)?c:[c]).map(f=>typeof f=="string"?{address:f}:f).filter(f=>f&&f.address).map(f=>({address:f.address,family:f.family||(W.isIPv6(f.address)?6:4)})),d=(c,f,u)=>{i.set(o(c),s(typeof f=="string"?[{address:f,family:u}]:f))},a=c=>{let f=o(c);if(W.isIP(f))return[{address:f,family:W.isIPv6(f)?6:4}];let u=i.get(f);if(!u||!u.length)throw new Error(`refused: unpinned host ${c} during pinned fetch`);return u},p=new r({connect:{lookup(c,f,u){let b;try{b=a(c)}catch(w){return u(w)}return f?.all?u(null,b):u(null,b[0].address,b[0].family)}}}),m=go((c,f={})=>n(c,{...f,dispatcher:p}),d);return{dispatcher:p,fetch:m,pin:d,resolve:a,async close(){try{await p.destroy()}catch{}}}}function go(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[at]=Object.freeze({pin:t}),e}function ct(e){return typeof e=="function"&&typeof e[at]?.pin=="function"}function ir(e,t,r){if(!ct(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[at].pin(t,r)}var ho,at,sr=l(()=>{ho=new Set(["localhost","metadata.google.internal","metadata.goog"]);at=Symbol.for("oracle.egressGuard.pinCapableFetch")});import{createHash as ar}from"node:crypto";function So(e){let t=String(e||"").toLowerCase();return mr.includes(t)||/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(t)}function Ao(e){let t={};for(let[r,n]of Object.entries(e||{}))So(r)||(t[r]=n);return t}function vo(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 dr(e){let t=String(e?.method||"");return t?!Io.test(t):!1}function Oo(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}return Array.isArray(r)?r.length>0&&r.every(dr):!r||typeof r!="object"?!1:r.jsonrpc&&r.method?dr(r):typeof r.type=="string"&&To.has(r.type)&&r.action==null&&r.signature==null&&r.nonce==null}function _o(e,t,r,n={},o=null){let i={};for(let[f,u]of Object.entries(r||{}))i[f.toLowerCase()]=u;let s=Object.keys(i).filter(f=>/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(f)),a=[...new Set([...mr,...s])].sort().map(f=>`${f}=${i[f]??""}`).join(`
|
|
2
|
+
`),p=ar("sha256").update(a).digest("hex").slice(0,32),m=`${n.untrustedUrl?"untrusted":"trusted"}:${n.maxResponseBytes??"unbounded"}`,c=o==null?"-":ar("sha256").update(String(o)).digest("hex").slice(0,32);return`${e} ${t} ${m} ${p} ${c}`}function Co(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,ur):Math.min(250*2**e,ur)+Math.floor(Math.random()*100)}function ue(e,t={}){let r=new Error(e);return r.retryable=!1,Object.assign(r,t),r}function lt(e,t,r){return ue(`HTTP response from ${e} exceeded maxResponseBytes ${r} (${t})`,{oversize:!0})}function le(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 fr(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&&(le(e),!n))throw lt(r,`content-length ${i}`,t);let s=e.body?.getReader?.();if(!s){let c=await e.text(),f=Buffer.byteLength(c,"utf8");if(f>t){if(!n)throw lt(r,`body ${f} bytes`,t);return Buffer.from(c,"utf8").subarray(0,t).toString("utf8")}return c}let d=[],a=0,p=!1;try{for(;;){let{value:c,done:f}=await s.read();if(f)break;if(c&&(d.push(Buffer.from(c)),a+=Ro(c),a>t)){p=!0;break}}}finally{if(p)try{await s.cancel()}catch{}try{s.releaseLock?.()}catch{}}if(p&&(typeof o=="function"&&o(),!n))throw lt(r,`streamed ${a} bytes`,t);let m=Buffer.concat(d);return(p?m.subarray(0,t):m).toString("utf8")}function pr(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function $o(e,{fetchImpl:t,method:r,headers:n,body:o,timeoutMs:i,lookupFn:s,realFetch:d,untrustedUrl:a=!1,maxResponseBytes:p=null,importUndici:m,validateResponse:c,signal:f}){let u=new AbortController,b=setTimeout(()=>u.abort(),i),w=f?typeof AbortSignal.any=="function"?AbortSignal.any([f,u.signal]):f:u.signal,h=null,I=t,O=s?{lookupFn:s}:{};if(a&&!d&&!ct(I))throw ue(`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 g=async(y,{status:x=null}={})=>{let v=await it(y,O);if(!v.ok)throw ue(x==null?`HTTP refused ${y}: ${v.error}`:`HTTP redirect to ${y} ${v.error}`,x==null?{}:{status:x});let E=new URL(y).hostname;if(d){if(h&&(await h.close(),h=null),!h)try{h=await st({requireUndici:!0,...m?{importUndici:m}:{}})}catch(_){throw ue(x==null?`HTTP refused ${y}: ${_?.message||_}`:`HTTP redirect to ${y} refused: ${_?.message||_}`,x==null?{}:{status:x})}h.pin(E,v.addresses),I=h.fetch}else ir(I,E,v.addresses);return v};try{let y=String(e),x={...n||{}};a&&await g(y);for(let v=0;v<=lr;v+=1){let E=await I(y,{method:r,headers:x,body:o,signal:w,redirect:"manual"});if(Eo.has(E.status)){if(r!=="GET"&&r!=="HEAD"){let $=await fr(E,p??xo,{url:y,truncate:!0}),M=new Error(`HTTP ${E.status} ${r} ${y} redirected non-idempotent request`);throw M.status=E.status,M.body=pr($)??$.slice(0,300),M}if(v===lr)throw le(E),new Error(`HTTP redirect loop for ${e}`);let C=E.headers?.get?.("location"),B;try{B=vo(C,y)}catch($){throw le(E),$}let D=!ko(B,y);if(le(E),D&&(x=Ao(x)),a)await g(B,{status:E.status});else if(D){let $=await it(B,O);if(!$.ok){let M=new Error(`HTTP redirect from ${y} ${$.error}`);throw M.status=E.status,M.retryable=!1,M}d&&$.addresses?.length&&(h||(h=await st(m?{importUndici:m}:{})),h&&(h.pin(new URL(B).hostname,$.addresses),I=h.fetch))}y=B;continue}if(typeof c=="function")try{await c(E,{url:y})}catch(C){throw le(E),ue(C?.message||String(C))}let _=await fr(E,p,{url:y,onOversize:()=>u.abort()}),K=pr(_);if(!E.ok){let C=new Error(`HTTP ${E.status} ${r} ${y}`);throw C.status=E.status,C.retryAfter=E.headers?.get?.("retry-after")??null,C.body=K??_.slice(0,300),C}return K??_}throw new Error(`HTTP redirect loop for ${e}`)}finally{clearTimeout(b),h&&await h.close()}}async function Re(e,t={}){let r=t.fetchImpl||globalThis.fetch;if(typeof r!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let n=t.timeoutMs??12e3,o=(t.method||"GET").toUpperCase(),i={Accept:"application/json",...t.headers||{}},s=t.body;s!=null&&typeof s!="string"&&(i["Content-Type"]=i["Content-Type"]||"application/json",s=JSON.stringify(s));let d=Number.isInteger(t.retries)?Math.max(t.retries,0):bo,a=t.lookupFn,p=!t.fetchImpl,m=t.untrustedUrl===!0,c=t.importUndici,f=t.validateResponse,u=t.signal,b=Number(t.maxResponseBytes),w=Number.isFinite(b)&&b>0?Math.floor(b):null,h=async()=>{let x;for(let v=0;v<=d;v++){u?.throwIfAborted?.();try{return await $o(e,{fetchImpl:r,method:o,headers:i,body:s,timeoutMs:n,lookupFn:a,realFetch:p,untrustedUrl:m,maxResponseBytes:w,importUndici:c,validateResponse:f,signal:u})}catch(E){x=E;let _=E?.status,K=E?.name==="AbortError"||E?.name==="TimeoutError"||u?.aborted,C=new Set([408,425,429]),B=E?.retryable===!1?!1:_!=null?C.has(_)||yo.has(_)&&cr.has(o):!K&&cr.has(o);if(v===d||!B)throw E;let D=Co(v,E?.retryAfter);u?await new Promise(($,M)=>{let _n=setTimeout($,D);u.addEventListener("abort",()=>{clearTimeout(_n),M(u.reason||new DOMException("Aborted","AbortError"))},{once:!0})}):await No(D)}}throw x};if(!(t.dedupe!==!1&&!u&&Oo(o,s)))return h();let O=_o(o,e,i,{untrustedUrl:m,maxResponseBytes:w},s),g=ut.get(O);if(g)return g;let y=h().finally(()=>ut.delete(O));return ut.set(O,y),y}var yo,cr,bo,ur,mr,Eo,lr,xo,ut,Io,To,No,$e=l(()=>{sr();yo=new Set([408,425,429,500,502,503,504]),cr=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),bo=2,ur=4e3,mr=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],Eo=new Set([301,302,303,307,308]),lr=3,xo=64*1024;ut=new Map,Io=/(?:^|_)(send|submit|broadcast|sign|requestAirdrop)(?=[A-Z_]|$)/i,To=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);No=e=>new Promise(t=>setTimeout(t,e))});var hr=l(()=>{$e()});var wr=l(()=>{hr()});var Nc,Rc,ft=l(()=>{z();wr();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"}),Rc=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 Pc,pt=l(()=>{z();Pc="0x"+"00".repeat(32)});var Lo,jc,mt=l(()=>{pt();z();Lo=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(Lo.map(e=>e[0]))});var Le=l(()=>{z()});import{TypedDataEncoder as Wc,getAddress as Gc,isAddress as Jc}from"ethers";var Bo,Do,Er=l(()=>{_e();Bo=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Do=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 Yc,xr=l(()=>{Yc=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var Sr=l(()=>{});import{TypedDataEncoder as ou,getAddress as iu,isAddress as su}from"ethers";var Fo,pu,Mo,mu,Ar=l(()=>{$e();Oe();xr();Sr();_e();Fo=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),pu=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"}]}),mu=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as gu,getAddress as yu}from"ethers";var xu,ht=l(()=>{Er();Ar();xu=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as kr}from"ethers";var Wo,Fu,Go,Mu,ju,qu,Uu,Jo,zu,Pe=l(()=>{H();Oe();_e();Ce();tt();rt();ft();mt();Le();ht();Wo=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),Fu=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}),Go=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"}}),Mu=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),ju=new kr(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),qu=new kr(["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"]),Uu=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"}}),Jo=Object.freeze([...Wo]),zu=Object.freeze({...Go})});import{encode as Gu}from"@msgpack/msgpack";import{keccak256 as Vu,verifyTypedData as Ku}from"ethers";var Yu,Xu,wt=l(()=>{Yu=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Xu=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var gt=l(()=>{Le()});import{ed25519 as il}from"@noble/curves/ed25519.js";import{base58 as al}from"@scure/base";import{RawTx as ul,SigHash as ll,Transaction as dl}from"@scure/btc-signer";import{Transaction as pl,keccak256 as ml,verifyTypedData as hl}from"ethers";var yt=l(()=>{wt();gt()});import{base58 as Sl}from"@scure/base";var Be=l(()=>{Pe();Ce();H();yt()});var Tr=l(()=>{Be();Pe()});var Ll,Pl,Bl,re=l(()=>{Ll=Object.freeze({N:1<<17,r:8,p:1}),Pl=256*1024*1024,Bl=16*1024});var Fl,Or=l(()=>{Fl=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 bt}from"node:os";import{join as Et}from"node:path";var _r,Yo,Ul,Cr=l(()=>{_r=process.env.ORACLE_PUBLIC_DESKTOP==="1",Yo=_r?process.env.ORACLE_CONFIG_DIR||Et(bt(),".config","oracle"):Et(bt(),".config","oracle"),Ul=_r?Yo:Et(bt(),".config","mad-desk")});var Jl,Vl,Kl,Nr=l(()=>{Cr();Jl="0".repeat(64),Vl=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"}),Kl=Promise.resolve()});var xt=l(()=>{Nr();z();re();Be()});var $r=l(()=>{});var Br={};Se(Br,{SIGN_TIME_REVIEW_VERSION:()=>Xo,SignTimeReviewSecretError:()=>de,createSignTimeReview:()=>Pr});function St(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string"){let o=e.trim().split(/\s+/);if(ri.test(e)||ni.has(o.length)&&o.every(i=>/^[a-z]+$/i.test(i)))throw new de(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)=>St(o,`${t}[${i}]`,r));G(e,t);let n={};for(let o of Object.keys(e).sort()){let i=o.replace(/[^a-z0-9]/gi,"");if(ti.test(i))throw new de(`${t}.${o}`);e[o]!==void 0&&(n[o]=St(e[o],`${t}.${o}`,o))}return n}function G(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 fe(e,t){if(e==null||e==="")throw new TypeError(`sign-time review: ${t} required`);return e}function ne(e,t){let r=String(fe(e,t)).toLowerCase();if(!Qo.test(r))throw new TypeError(`sign-time review: ${t} must be an EVM address`);return r}function j(e,t,{positive:r=!1}={}){try{let n=BigInt(fe(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 At(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 Lr(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))Lr(t);Object.freeze(e)}return e}function oi(e,t){if(typeof e=="boolean")return{passed:e,reason:e?"passed":"failed"};G(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:At(String(n),`${t}.reason`)}}function ii(e){if(!Array.isArray(e))throw new TypeError("sign-time review: policyChecks must be an array");let t=e.map((n,o)=>oi(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 si(e){if(e==null)return null;if(G(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:At(String(e.summary??"simulation result recorded"),"simulation.summary")};return e.gasEstimate!=null&&(t.gasEstimate=j(e.gasEstimate,"simulation.gasEstimate")),e.gasLimit!=null&&(t.gasLimit=j(e.gasLimit,"simulation.gasLimit")),t}function ai(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)=>{G(t,`assetDeltas[${r}]`);let n=j(t.before,`assetDeltas[${r}].before`),o=j(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:At(String(fe(t.asset??t.token,`assetDeltas[${r}].asset`)),`assetDeltas[${r}].asset`),before:n,after:o,delta:s}})}function ci(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)=>{G(t,`approvalDeltas[${r}]`);let n=j(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 Pr(e={}){G(e,"input");let t=St(e),r=t.tx==null?t:G(t.tx,"tx"),n=j(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(fe(t.prepareHash,"prepareHash")).toLowerCase();if(!ei.test(s))throw new TypeError("sign-time review: prepareHash must be a 32-byte hash");let d=t.route??t.venue;if(d==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 p=String(fe(t.calldata??t.data??r.data,"calldata/data")).toLowerCase();if(!Zo.test(p))throw new TypeError("sign-time review: calldata/data must be even-length hex");let m=t.policyChecks!==void 0&&t.policyChecks!==null,c=ii(m?t.policyChecks:[]),f=si(t.simulation),u=ai(t.assetDeltas),b=ci(t.approvalDeltas),w=t.allowlistHits??[];if(!Array.isArray(w))throw new TypeError("sign-time review: allowlistHits must be an array");let h=f?.willRevert===!0||["failed","error"].includes(f?.status),I=f!=null&&f.willRevert===!1&&["ok","success"].includes(f.status),O=h||c.failed>0?"BLOCKED":I&&m&&c.checks.length>0&&u!=null?"READY":"UNKNOWN",g=typeof a=="string"?a:a.method??a.action??a.type??"transaction",y=`${O}: review ${g} on chain ${n}; policy ${c.passed} passed, ${c.failed} failed; ${u?.length??0} asset delta${u?.length===1?"":"s"}; local signature required`,x={reviewVersion:1,status:O,requiresLocalSignature:!0,signingLocal:!0,custody:"none",execution:"review-only",chainId:n,account:o,from:o,route:d,venue:t.venue??(typeof d=="string"?d:d.venue??d.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:p,data:p,selector:p.length>=10?p.slice(0,10):null,value:j(t.value??r.value??0,"value"),...(t.gasEstimate??r.gasEstimate)==null?{}:{gasEstimate:j(t.gasEstimate??r.gasEstimate,"gasEstimate")},...(t.gasLimit??r.gasLimit)==null?{}:{gasLimit:j(t.gasLimit??r.gasLimit,"gasLimit")},simulation:f,policyChecks:c,allowlistHits:w,assetDeltas:u,approvalDeltas:b,summary:y};return Lr(x)}var Xo,Qo,Zo,ei,ti,ri,ni,de,vt=l(()=>{Xo=1,Qo=/^0x[0-9a-f]{40}$/,Zo=/^0x(?:[0-9a-f]{2})*$/,ei=/^(?:0x)?[0-9a-f]{64}$/,ti=/(privatekey|privkey|secretkey|seedphrase|mnemonic|passphrase|password|keystore|keymaterial|wif|xprv|xpriv|bearer|authorization|signature|apikey|credential)/i,ri=/\b(?:[5KL][1-9A-HJ-NP-Za-km-z]{50,51}|xprv[0-9A-Za-z]{50,})\b/,ni=new Set([12,15,18,21,24]),de=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 id,readdirSync as sd,existsSync as ui}from"node:fs";import{dirname as li,join as pe}from"node:path";import{fileURLToPath as di}from"node:url";function fi(){let e=[pe(me,"descriptors"),pe(me,"clear-sign","descriptors"),pe(me,"..","clear-sign","descriptors"),pe(me,"..","..","clear-sign","descriptors"),pe(me,"..","..","..","clear-sign","descriptors")];for(let t of e)if(ui(t))return t;return e[0]}var me,ld,dd,Dr=l(()=>{H();me=li(di(import.meta.url));ld=fi(),dd=(1n<<256n)-1n});var Fr=l(()=>{vt();H();Dr()});import{Wallet as bd}from"ethers";import{base58 as xd}from"@scure/base";import{ed25519 as Ad}from"@noble/curves/ed25519.js";import{NETWORK as kd,TEST_NETWORK as Id,WIF as Td,p2wpkh as Od}from"@scure/btc-signer";import{pubECDSA as Cd}from"@scure/btc-signer/utils.js";var Mr=l(()=>{});var $d,Ld,Pd,Bd,Dd,Fd,Md,jd,qd,Ud,zd,jr=l(()=>{xt();$d=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),Ld=Object.freeze(["binance","bybit","okx","coinbase"]),Pd=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),Bd=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),Dd=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Fd=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Md=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),jd=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),qd=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),Ud=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),zd=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var qr=l(()=>{re()});var hi,Ur,Fe=l(()=>{hi=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}"]})}),Ur=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var zr=l(()=>{Fe()});var Zd,Hr=l(()=>{Fe();zr();Zd=256*1024});var Wr=l(()=>{Fe();Hr()});var Gr=l(()=>{re()});import N from"node:path";import wi from"node:os";import{createHash as gi,randomBytes as Hf}from"node:crypto";import{Interface as kt,keccak256 as Gf}from"ethers";import{Transaction as Vf}from"@scure/btc-signer";import{ed25519 as Yf}from"@noble/curves/ed25519.js";function Jr(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||N.join(process.env.XDG_STATE_HOME||N.join(wi.homedir(),".local","state"),"oracle"),r=gi("sha256").update(N.resolve(e)).digest("hex").slice(0,16);return{vault:N.join(e,"vault.json"),policy:N.join(e,"signer-policy.json"),policyKey:N.join(e,"policy-integrity-key"),policyAnchor:N.join(t,`signer-policy-${r}.high-water`),ledger:N.join(e,"signer-ledger.json"),ledgerAnchor:N.join(t,`signer-ledger-${r}.high-water`),cexOrders:N.join(e,"cex-orders.json"),cexOrdersAnchor:N.join(t,`cex-orders-${r}.high-water`),token:N.join(e,"signer-token"),lock:N.join(t,`signer-${r}.lock`)}}var vp,kp,Ip,Vr=l(()=>{Tr();Be();re();Or();xt();$r();H();Fr();Pe();Ce();yt();ft();mt();Le();gt();pt();wt();tt();rt();ht();Mr();jr();qr();Wr();Gr();vp=new kt(["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"]),kp=new kt(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),Ip=new kt(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import It from"node:fs";import Kr from"node:path";import{homedir as yi}from"node:os";function bi(){return process.env.ORACLE_CONFIG_DIR||Kr.join(yi(),".config","oracle")}function he(){let e=Jr(Kr.join(bi(),"signer")),t=It.existsSync(e.vault),r=It.existsSync(e.lock),n=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:It.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 Dp,Tt=l(()=>{Ye();er();Vr();re();Dp=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_ack",description:"Execute one pending artifact through the armed local signer (same path as Telegram Allow). Fails if the signer is not running or disarmed. Never holds keys.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},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}}}])});function Me(e){return String(e||"").trim()||void 0}function xi(e,{required:t=!1}={}){let r=Me(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!Ei.has(r))throw new Error(`unsupported provider: ${r}`);return r}function Si(e,{required:t=!1}={}){let r=Me(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 Ai(e){let t=Me(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 Yr({provider:e,model:t,baseUrl:r}={},{requireModel:n=!1}={}){let o=xi(e),i=Si(t,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:Ai(r)};if(Me(r))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var Ei,Xr=l(()=>{Ei=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"])});import Qr from"node:fs";import vi from"node:path";function Ii(){return vi.join(Q(),"model.json")}function oe(e){return String(e||"").trim()||void 0}function Ti(e={}){let t=oe(e.backend)?.toLowerCase()||"auto",r=Yr({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),n=oe(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=oe(e.reasoningEffort),s=oe(e.computeHost||e.remoteHost),d=oe(e.computeUser||e.remoteUser),a=oe(e.computePath||e.remotePath);if(!ki.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}:{},...d?{computeUser:d}:{},...a?{computePath:a}:{}}}function Zr(){let e=Ii();if(!Qr.existsSync(e))return null;try{return Ti(JSON.parse(Qr.readFileSync(e,"utf8")))}catch{return null}}var ki,en=l(()=>{ve();Xr();ki=new Set(["auto","standalone","hermes","remote","arch"])});import{Interface as Oi,getAddress as _i}from"ethers";function Ot(e,t){try{return _i(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function Ci(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 _t(e){return e==null?null:Number.parseInt(String(e),16)}function Ri(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let n=Zt(e,r);return n||Ni[Number(e)]||null}function Li(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!$i.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 Pi(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function Bi(e){if(e?.error)throw Pi(e.error);return e?.result}function Di(e,t,r){return`${e}
|
|
3
3
|
${t}
|
|
4
|
-
${JSON.stringify(r??[])}`}async function Bi(e,t,r){return Ne(e,{method:"POST",body:t,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function _t(e,t,r=[],n={}){let o=String(t||""),i=Ri(o),s=Ci(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 m=en.get(s);if(m!=null)return m}let a=n.dedupe!==!1&&!n.signal?Pi(s,o,r):null;if(a&&we.has(a))return we.get(a);let p=(async()=>{let m=await Bi(s,{jsonrpc:"2.0",id:1,method:t,params:r},n),c=$i(m);return i==="eth_chainid"&&typeof c=="string"&&en.set(s,c),c})();return a&&(we.set(a,p),p.finally(()=>{we.get(a)===p&&we.delete(a)}).catch(()=>{})),p}async function tn(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=Oi(e.txHash||e.hash||e.transactionHash),o=await _t(r,"eth_getTransactionReceipt",[n],t);if(!o)return{ok:!1,chainId:r,txHash:n,status:"pending",receipt:null,reason:"receipt pending"};let i=Ot(o.status),s=i===1,d=i===1?"success":i===0?"reverted":"unknown",a=s?null:d==="reverted"?"transaction reverted":"unknown receipt status",p=e.expectedTo?Tt(e.expectedTo,"expectedTo"):null,m=o.to?Tt(o.to,"receipt.to"):null;return p&&m!==p&&(s=!1,a=`to mismatch: expected ${p}, got ${m||"null"}`),{ok:s,chainId:r,txHash:n,status:d,reason:a,statusCode:i,to:m,from:o.from?Tt(o.from,"receipt.from"):null,blockNumber:Ot(o.blockNumber),transactionIndex:Ot(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}var Jp,_i,Ni,we,en,rn=l(()=>{Re();Ve();Jp=new Ii(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);_i={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"};Ni=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;we=new Map,en=new Map});import{wordlists as Di}from"ethers";function qi(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return ji.has(t.length)&&t.every(r=>Di.en.getWordIndex(r)>=0)}function Wi(e){let t=nn(e);return Hi.has(t)||zi.test(t)}function nn(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function Gi(e){let t=nn(e);return[...Fi].some(r=>t.includes(r))}function Ji(e,t,r){if(typeof t=="string"){if(Mi.some(n=>n.test(t))||qi(t))throw new ge(r);if(Ui.test(t)&&!Wi(e))throw new ge(r)}}function Ct(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return Ji(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)=>Ct(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(Gi(o))throw new ge(i);e[o]!==void 0&&(n[o]=Ct(e[o],i,o))}return n}function on(e){return Ct(e)}var Fi,Mi,ji,Ui,zi,Hi,ge,Nt=l(()=>{Fi=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),Mi=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],ji=new Set([12,15,18,21,24]);Ui=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,zi=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,Hi=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);ge=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}}});var Xp,Qp,Zp,sn=l(()=>{Xp=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Qp=Object.freeze(["read","simulate"]),Zp=1440*60});function Rt(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return Vi.test(t)||Ki.includes(r)}function Yi(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>cn.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function un(e){let t;try{t=JSON.stringify(e)}catch(o){throw new q("$",`unserializable-payload: ${String(o?.message||o)}`)}if(t===void 0)return"null";let r=Yi(t);for(let{rule:o,re:i}of an)if(i.test(r))throw new q("$<serialized>",o);if(/(?:^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{64}(?![0-9a-fA-F])/.test(r))throw new q("$<serialized>","raw-32-byte-hex-embedded");return JSON.parse(t,(o,i)=>{if(o&&Rt(o))throw new q(`$<serialized>.${o}`,"forbidden-key-name");return i}),t}function J(e,t="$",r=new Set,n=""){if(e==null)return e;if(typeof e=="string"){let o=cn.includes(String(n).toLowerCase().replace(/[_-]/g,""));for(let{rule:i,re:s}of an)if(!(o&&i.startsWith("raw-32-byte-hex"))&&s.test(e))throw new q(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"&&Rt(o))throw new q(`${t}[${JSON.stringify(o)}]`,"forbidden-key-name");J(o,`${t}[key]`,r),J(i,`${t}[${String(o)}]`,r)}return e}if(e instanceof Set){let o=0;for(let i of e.values())J(i,`${t}[${o++}]`,r);return e}if(Array.isArray(e))return e.forEach((o,i)=>J(o,`${t}[${i}]`,r)),e;for(let[o,i]of Object.entries(e)){if(Rt(o))throw new q(`${t}.${o}`,"forbidden-key-name");J(i,`${t}.${o}`,r,o)}return e}var q,Vi,Ki,an,cn,ln=l(()=>{sn();q=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}},Vi=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,Ki=Object.freeze(["privkey","wif","xprv","seed"]);an=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}]),cn=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"])});function Lt(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 $t(e,t="control input"){try{J(e,t),un(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function ye(e,{required:t=[],optional:r=[]}={},n="object"){Lt(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 Pt(e,t,r=200,{lower:n=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||Xi.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 be(e,t,r=80){let n=Pt(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 Me(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 R(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))R(t);Object.freeze(e)}return e}var Xi,Bt=l(()=>{Nt();ln();Xi=/[\u0000-\u001f\u007f]/});function dn({family:e,chainId:t},r="chain"){let n=be(e,`${r}.family`,40),o;if(n==="evm"){if(typeof t=="number")o=String(Me(t,`${r}.chainId`,{positive:!0}));else if(o=Pt(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=be(t,`${r}.chainId`,80);return{family:n,chainId:o}}function es(e,t="chain"){return ye(e,{required:["family","chainId"]},t),R(dn(e,t))}function fn(e,t="finality rule"){$t(e,t),Lt(e,t);let r=e.rule;if(!Qi.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let n=r==="confirmations"?"confirmations":r;ye(e,{required:["family","chainId","rule",n]},t);let o=dn(e,t);return r==="confirmations"?{...o,rule:r,confirmations:Me(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...o,rule:r,[n]:be(e[n],`${t}.${n}`,80)}}function Dt(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((n,o)=>fn(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 R({policyVersion:1,rules:t})}function ts(e){if(ye(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return Dt(e.rules)}function pn(e,t){let r=es(t,"finality query"),o=ts(e).rules.find(i=>i.family===r.family&&i.chainId===r.chainId);return o?R({status:"KNOWN",...r,rule:o}):R({status:V.UNKNOWN,reason:"MISSING_FINALITY_RULE",...r,rule:null})}function rs(e,t){if(e==null)return null;$t(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(ye(e,{required:["status"],optional:[r]},"finality evidence"),!Zi.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"?Me(e.confirmations,"finality evidence.confirmations",{positive:!0}):be(e[r],`finality evidence.${r}`,80)),n}function mn(e,t){if(!e||e.status===V.UNKNOWN||e.rule==null)return R({status:V.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=fn(e.rule??e,"resolved finality rule"),n=rs(t,r);if(n==null)return R({status:V.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(n.status!=="LIVE")return R({status:V.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,R({status:o?V.FINAL:V.INCLUDED,final:o,reason:o?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:r})}var Qi,V,Zi,hn=l(()=>{Bt();Qi=Object.freeze(["confirmations","finalizedTag","checkpoint"]),V=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),Zi=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"])});function os(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 wn(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function Mt(e){return e==null?e:Array.isArray(e)?e.map(Mt):Ee(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,Mt(e[t])])):String(e)}function is(e,t,r,n){let o=A(e.finalityEvidence,n?.finality,e.evidence),i=A(e.finalityPolicy,e.policy);try{return i==null&&Ee(e.finalityRule)&&(i=Dt([{family:t,chainId:r,...e.finalityRule}])),i==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:mn(pn(i,{family:t,chainId:r}),o)}catch{return{status:"UNKNOWN",final:!1,reason:"MALFORMED_FINALITY_EVIDENCE"}}}function T(e,t,r){r!=null&&(e[t]=r)}function ss(e){return e==null?null:String(e).trim().toLowerCase()}function Ft(...e){let t=e.map(ss).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function gn(e={}){if(!Ee(e))throw new TypeError("verified receipt: input object required");let t=on(e),r=A(t.actionReceipt,t.receipt),n=Ee(r)?r:t,o=A(t.observation,t.chainObservation,t.observedReceipt),i=Ee(o),s=A(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash),d=A(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family),a=A(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),p=!Ft(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash)||!Ft(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family)||!Ft(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),m=is(t,d,a,i&&!p?o:null),c=os(A(o?.receiptStatus,o?.executionStatus,o?.status)),f=A(t.reconciliationStatus,t.reconciliation?.status,o?.reconciliationStatus),u=A(t.finalityState,t.finalityEvidence?.status,t.evidence?.status,o?.finalityState),b="UNKNOWN";wn(f)||!p&&(i&&c==="FAIL"||wn(u))?b="FAIL":!p&&s&&i&&c==="SUCCESS"&&["INCLUDED","FINAL"].includes(m.status)&&(b="SUCCESS");let w={verifiedReceiptVersion:ns,status:b};p&&(w.reason="REFERENCE_MISMATCH"),T(w,"txHash",s),T(w,"chain",A(t.chain,n.chain,o?.chain)),T(w,"family",d),T(w,"chainId",a),T(w,"block",A(o?.block,t.block)),T(w,"blockState",A(o?.blockState,o?.inclusionState)),w.finalityState=m.status,T(w,"confirmations",A(o?.confirmations,o?.finality?.confirmations,t.finalityEvidence?.confirmations,t.evidence?.confirmations)),T(w,"observedAt",A(o?.observedAt,t.observedAt)),T(w,"route",A(t.route,n.route)),T(w,"prepareHash",A(t.prepareHash,n.prepareHash)),T(w,"policyOutcome",A(t.policyOutcome,n.policyOutcome,n.policyChecks));let h=A(t.balanceChanges,o?.balanceChanges,o?.balances,n.balanceChanges,n.balances);return h!=null&&(w.balanceChanges=Mt(h)),T(w,"createdAt",A(t.createdAt,n.createdAt)),T(w,"submittedAt",A(t.submittedAt,n.submittedAt)),T(w,"finalizedAt",A(t.finalizedAt,o?.finalizedAt)),T(w,"timestamps",A(t.timestamps,n.timestamps,o?.timestamps)),R(w)}var ns,ym,A,Ee,yn=l(()=>{Nt();hn();Bt();ns=1,ym=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),A=(...e)=>e.find(t=>t!=null),Ee=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype});var En={};xe(En,{observeEvmReceipt:()=>bn,verifyEvmReceipt:()=>us});function cs(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 bn({txHash:e,chainId:t,rpcUrl:r},n={}){let o=String(e||"").trim().toLowerCase();if(!as.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||tn,d=n.rpcCall||_t,a={...n.rpcOptions||{},...r?{rpcUrl:r}:{}},p;try{p=await s({txHash:o,chainId:i},a)}catch(u){return{observation:null,reason:`RPC_UNAVAILABLE: ${u.message}`}}if(!p||p.receipt==null)return{observation:null,reason:p?.reason||"receipt pending"};let m=null,c=p.blockNumber;if(Number.isSafeInteger(c))try{let u=cs(await d(i,"eth_blockNumber",[],a));u!=null&&u>=c&&(m=u-c+1)}catch{}let f={txHash:o,family:"evm",chainId:String(i),receiptStatus:p.status==="success"?"SUCCESS":p.status==="reverted"?"FAIL":"UNKNOWN",block:c==null?void 0:String(c),observedAt:new Date().toISOString(),finality:{status:"LIVE",...m==null?{}:{confirmations:m}}};return m!=null&&(f.confirmations=m),{observation:f,reason:null}}async function us({txHash:e,chainId:t,confirmations:r=1,rpcUrl:n},o={}){let{observation:i,reason:s}=await bn({txHash:e,chainId:t,rpcUrl:n},o),d=gn({txHash:String(e).trim().toLowerCase(),family:"evm",chainId:String(Number(t)),finalityRule:{rule:"confirmations",confirmations:r},...i?{observation:i}:{}});return{receipt:d,observed:!!i,final:d.finalityState==="FINAL",requiredConfirmations:r,reason:s}}var as,xn=l(()=>{rn();yn();as=/^0x[0-9a-f]{64}$/});var Sn={};xe(Sn,{classifyReceipt:()=>se,configDir:()=>ps,firstHourReport:()=>jt,probeReceiptModule:()=>hs,probeReviewModule:()=>ms,venueMap:()=>je});import ls from"node:path";import{homedir as ds}from"node:os";function ps(e=process.env){return e.ORACLE_CONFIG_DIR||ls.join(ds(),".config","oracle")}function je({env:e=process.env,vault:t=null}={}){let r=t||he(),n=[];for(let[o,i]of Object.entries(ke)){let s=(i.rpcEnv||[]).some(a=>String(e[a]||"").trim()),d="prepare";i.evm?s&&(d="live"):d="unavailable",n.push({key:o,chainId:i.chainId,name:i.name,family:"evm",status:d,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 jt({env:e=process.env,model:t=Qr(),vault:r=he(),signerReachable:n=!1,quote:o=null,reviewAvailable:i=!1,receiptAvailable:s=!1}={}){let d=[],a=(u,b,w,h=null)=>d.push({id:u,status:b,detail:w,fix:h}),p=(()=>{let[u,b]=process.versions.node.split(".").map(Number);return u>20||u===20&&b>=19})();a("node",p?"ok":"fail",`node ${process.versions.node}`,p?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 m=e.ORACLE_SIGNER_HOST||"127.0.0.1";if(fs.has(m)?a("signer",n?"ok":"warn",n?`loopback ${m}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):a("signer","fail",`signer host ${m} is not loopback`,"unset ORACLE_SIGNER_HOST"),!o)a("quote","warn","quote not probed",null);else if(o.ok){let u=String(o.detail||"net quote returned");a("quote","ok",u.length>140?`${u.slice(0,140)}\u2026`:u)}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 c=d.some(u=>u.status==="fail"),f=d.filter(u=>u.status==="ok").length;return{ok:!c,checks:d,firstRunScore:{ok:f,total:d.length,label:`${f}/${d.length} first-run hops green`},venues:je({env:e,vault:r})}}async function ms(){try{return typeof(await Promise.resolve().then(()=>(At(),Pr))).createSignTimeReview=="function"}catch{return!1}}async function hs(){try{let e=await Promise.resolve().then(()=>(xn(),En));return typeof e.observeReceipt=="function"||typeof e.default=="function"||Object.values(e).some(t=>typeof t=="function")}catch{return!1}}var fs,qt=l(()=>{Ve();It();Zr();Ke();fs=new Set(["127.0.0.1","::1","localhost"])});var An={};xe(An,{classifyReceipt:()=>se,default:()=>ys,firstHourReport:()=>jt,probeQuote:()=>gs,probeSigner:()=>ws,vaultStatus:()=>he});async function ws(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}}async function gs(){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:`${r.chainId} ${r.baseToken?.symbol}/${r.quoteToken?.symbol} $${r.priceUsd}`}}catch(e){return{ok:!1,detail:e instanceof Error?e.message:"quote failed"}}}var ys,vn=l(()=>{qt();It();ys={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=je();if(t)return process.stdout.write(`${JSON.stringify({venues:r},null,2)}
|
|
4
|
+
${JSON.stringify(r??[])}`}async function Fi(e,t,r){return Re(e,{method:"POST",body:t,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function Ct(e,t,r=[],n={}){let o=String(t||""),i=Li(o),s=Ri(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 m=tn.get(s);if(m!=null)return m}let a=n.dedupe!==!1&&!n.signal?Di(s,o,r):null;if(a&&we.has(a))return we.get(a);let p=(async()=>{let m=await Fi(s,{jsonrpc:"2.0",id:1,method:t,params:r},n),c=Bi(m);return i==="eth_chainid"&&typeof c=="string"&&tn.set(s,c),c})();return a&&(we.set(a,p),p.finally(()=>{we.get(a)===p&&we.delete(a)}).catch(()=>{})),p}async function rn(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=Ci(e.txHash||e.hash||e.transactionHash),o=await Ct(r,"eth_getTransactionReceipt",[n],t);if(!o)return{ok:!1,chainId:r,txHash:n,status:"pending",receipt:null,reason:"receipt pending"};let i=_t(o.status),s=i===1,d=i===1?"success":i===0?"reverted":"unknown",a=s?null:d==="reverted"?"transaction reverted":"unknown receipt status",p=e.expectedTo?Ot(e.expectedTo,"expectedTo"):null,m=o.to?Ot(o.to,"receipt.to"):null;return p&&m!==p&&(s=!1,a=`to mismatch: expected ${p}, got ${m||"null"}`),{ok:s,chainId:r,txHash:n,status:d,reason:a,statusCode:i,to:m,from:o.from?Ot(o.from,"receipt.from"):null,blockNumber:_t(o.blockNumber),transactionIndex:_t(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}var Kp,Ni,$i,we,tn,nn=l(()=>{$e();Ke();Kp=new Oi(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);Ni={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"};$i=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;we=new Map,tn=new Map});import{wordlists as Mi}from"ethers";function zi(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return Ui.has(t.length)&&t.every(r=>Mi.en.getWordIndex(r)>=0)}function Ji(e){let t=on(e);return Gi.has(t)||Wi.test(t)}function on(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function Vi(e){let t=on(e);return[...ji].some(r=>t.includes(r))}function Ki(e,t,r){if(typeof t=="string"){if(qi.some(n=>n.test(t))||zi(t))throw new ge(r);if(Hi.test(t)&&!Ji(e))throw new ge(r)}}function Nt(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return Ki(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)=>Nt(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(Vi(o))throw new ge(i);e[o]!==void 0&&(n[o]=Nt(e[o],i,o))}return n}function sn(e){return Nt(e)}var ji,qi,Ui,Hi,Wi,Gi,ge,Rt=l(()=>{ji=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),qi=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],Ui=new Set([12,15,18,21,24]);Hi=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,Wi=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,Gi=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);ge=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}}});var Zp,em,tm,an=l(()=>{Zp=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),em=Object.freeze(["read","simulate"]),tm=1440*60});function $t(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return Yi.test(t)||Xi.includes(r)}function Qi(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>un.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function ln(e){let t;try{t=JSON.stringify(e)}catch(o){throw new q("$",`unserializable-payload: ${String(o?.message||o)}`)}if(t===void 0)return"null";let r=Qi(t);for(let{rule:o,re:i}of cn)if(i.test(r))throw new q("$<serialized>",o);if(/(?:^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{64}(?![0-9a-fA-F])/.test(r))throw new q("$<serialized>","raw-32-byte-hex-embedded");return JSON.parse(t,(o,i)=>{if(o&&$t(o))throw new q(`$<serialized>.${o}`,"forbidden-key-name");return i}),t}function J(e,t="$",r=new Set,n=""){if(e==null)return e;if(typeof e=="string"){let o=un.includes(String(n).toLowerCase().replace(/[_-]/g,""));for(let{rule:i,re:s}of cn)if(!(o&&i.startsWith("raw-32-byte-hex"))&&s.test(e))throw new q(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 q(`${t}[${JSON.stringify(o)}]`,"forbidden-key-name");J(o,`${t}[key]`,r),J(i,`${t}[${String(o)}]`,r)}return e}if(e instanceof Set){let o=0;for(let i of e.values())J(i,`${t}[${o++}]`,r);return e}if(Array.isArray(e))return e.forEach((o,i)=>J(o,`${t}[${i}]`,r)),e;for(let[o,i]of Object.entries(e)){if($t(o))throw new q(`${t}.${o}`,"forbidden-key-name");J(i,`${t}.${o}`,r,o)}return e}var q,Yi,Xi,cn,un,dn=l(()=>{an();q=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}},Yi=/(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"]);cn=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}]),un=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"])});function Lt(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 Pt(e,t="control input"){try{J(e,t),ln(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function ye(e,{required:t=[],optional:r=[]}={},n="object"){Lt(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 Bt(e,t,r=200,{lower:n=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||Zi.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 be(e,t,r=80){let n=Bt(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 R(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))R(t);Object.freeze(e)}return e}var Zi,Dt=l(()=>{Rt();dn();Zi=/[\u0000-\u001f\u007f]/});function fn({family:e,chainId:t},r="chain"){let n=be(e,`${r}.family`,40),o;if(n==="evm"){if(typeof t=="number")o=String(je(t,`${r}.chainId`,{positive:!0}));else if(o=Bt(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=be(t,`${r}.chainId`,80);return{family:n,chainId:o}}function rs(e,t="chain"){return ye(e,{required:["family","chainId"]},t),R(fn(e,t))}function pn(e,t="finality rule"){Pt(e,t),Lt(e,t);let r=e.rule;if(!es.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let n=r==="confirmations"?"confirmations":r;ye(e,{required:["family","chainId","rule",n]},t);let o=fn(e,t);return r==="confirmations"?{...o,rule:r,confirmations:je(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...o,rule:r,[n]:be(e[n],`${t}.${n}`,80)}}function Ft(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((n,o)=>pn(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 R({policyVersion:1,rules:t})}function ns(e){if(ye(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return Ft(e.rules)}function mn(e,t){let r=rs(t,"finality query"),o=ns(e).rules.find(i=>i.family===r.family&&i.chainId===r.chainId);return o?R({status:"KNOWN",...r,rule:o}):R({status:V.UNKNOWN,reason:"MISSING_FINALITY_RULE",...r,rule:null})}function os(e,t){if(e==null)return null;Pt(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(ye(e,{required:["status"],optional:[r]},"finality evidence"),!ts.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}):be(e[r],`finality evidence.${r}`,80)),n}function hn(e,t){if(!e||e.status===V.UNKNOWN||e.rule==null)return R({status:V.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=pn(e.rule??e,"resolved finality rule"),n=os(t,r);if(n==null)return R({status:V.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(n.status!=="LIVE")return R({status:V.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,R({status:o?V.FINAL:V.INCLUDED,final:o,reason:o?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:r})}var es,V,ts,wn=l(()=>{Dt();es=Object.freeze(["confirmations","finalizedTag","checkpoint"]),V=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),ts=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"])});function ss(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 gn(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function jt(e){return e==null?e:Array.isArray(e)?e.map(jt):Ee(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,jt(e[t])])):String(e)}function as(e,t,r,n){let o=A(e.finalityEvidence,n?.finality,e.evidence),i=A(e.finalityPolicy,e.policy);try{return i==null&&Ee(e.finalityRule)&&(i=Ft([{family:t,chainId:r,...e.finalityRule}])),i==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:hn(mn(i,{family:t,chainId:r}),o)}catch{return{status:"UNKNOWN",final:!1,reason:"MALFORMED_FINALITY_EVIDENCE"}}}function T(e,t,r){r!=null&&(e[t]=r)}function cs(e){return e==null?null:String(e).trim().toLowerCase()}function Mt(...e){let t=e.map(cs).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function yn(e={}){if(!Ee(e))throw new TypeError("verified receipt: input object required");let t=sn(e),r=A(t.actionReceipt,t.receipt),n=Ee(r)?r:t,o=A(t.observation,t.chainObservation,t.observedReceipt),i=Ee(o),s=A(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash),d=A(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family),a=A(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),p=!Mt(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash)||!Mt(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family)||!Mt(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),m=as(t,d,a,i&&!p?o:null),c=ss(A(o?.receiptStatus,o?.executionStatus,o?.status)),f=A(t.reconciliationStatus,t.reconciliation?.status,o?.reconciliationStatus),u=A(t.finalityState,t.finalityEvidence?.status,t.evidence?.status,o?.finalityState),b="UNKNOWN";gn(f)||!p&&(i&&c==="FAIL"||gn(u))?b="FAIL":!p&&s&&i&&c==="SUCCESS"&&["INCLUDED","FINAL"].includes(m.status)&&(b="SUCCESS");let w={verifiedReceiptVersion:is,status:b};p&&(w.reason="REFERENCE_MISMATCH"),T(w,"txHash",s),T(w,"chain",A(t.chain,n.chain,o?.chain)),T(w,"family",d),T(w,"chainId",a),T(w,"block",A(o?.block,t.block)),T(w,"blockState",A(o?.blockState,o?.inclusionState)),w.finalityState=m.status,T(w,"confirmations",A(o?.confirmations,o?.finality?.confirmations,t.finalityEvidence?.confirmations,t.evidence?.confirmations)),T(w,"observedAt",A(o?.observedAt,t.observedAt)),T(w,"route",A(t.route,n.route)),T(w,"prepareHash",A(t.prepareHash,n.prepareHash)),T(w,"policyOutcome",A(t.policyOutcome,n.policyOutcome,n.policyChecks));let h=A(t.balanceChanges,o?.balanceChanges,o?.balances,n.balanceChanges,n.balances);return h!=null&&(w.balanceChanges=jt(h)),T(w,"createdAt",A(t.createdAt,n.createdAt)),T(w,"submittedAt",A(t.submittedAt,n.submittedAt)),T(w,"finalizedAt",A(t.finalizedAt,o?.finalizedAt)),T(w,"timestamps",A(t.timestamps,n.timestamps,o?.timestamps)),R(w)}var is,Em,A,Ee,bn=l(()=>{Rt();wn();Dt();is=1,Em=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),A=(...e)=>e.find(t=>t!=null),Ee=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype});var xn={};Se(xn,{observeEvmReceipt:()=>En,verifyEvmReceipt:()=>ds});function ls(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 En({txHash:e,chainId:t,rpcUrl:r},n={}){let o=String(e||"").trim().toLowerCase();if(!us.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||rn,d=n.rpcCall||Ct,a={...n.rpcOptions||{},...r?{rpcUrl:r}:{}},p;try{p=await s({txHash:o,chainId:i},a)}catch(u){return{observation:null,reason:`RPC_UNAVAILABLE: ${u.message}`}}if(!p||p.receipt==null)return{observation:null,reason:p?.reason||"receipt pending"};let m=null,c=p.blockNumber;if(Number.isSafeInteger(c))try{let u=ls(await d(i,"eth_blockNumber",[],a));u!=null&&u>=c&&(m=u-c+1)}catch{}let f={txHash:o,family:"evm",chainId:String(i),receiptStatus:p.status==="success"?"SUCCESS":p.status==="reverted"?"FAIL":"UNKNOWN",block:c==null?void 0:String(c),observedAt:new Date().toISOString(),finality:{status:"LIVE",...m==null?{}:{confirmations:m}}};return m!=null&&(f.confirmations=m),{observation:f,reason:null}}async function ds({txHash:e,chainId:t,confirmations:r=1,rpcUrl:n},o={}){let{observation:i,reason:s}=await En({txHash:e,chainId:t,rpcUrl:n},o),d=yn({txHash:String(e).trim().toLowerCase(),family:"evm",chainId:String(Number(t)),finalityRule:{rule:"confirmations",confirmations:r},...i?{observation:i}:{}});return{receipt:d,observed:!!i,final:d.finalityState==="FINAL",requiredConfirmations:r,reason:s}}var us,Sn=l(()=>{nn();bn();us=/^0x[0-9a-f]{64}$/});var An={};Se(An,{classifyReceipt:()=>se,configDir:()=>hs,firstHourReport:()=>qt,probeReceiptModule:()=>gs,probeReviewModule:()=>ws,venueMap:()=>qe});import fs from"node:path";import{homedir as ps}from"node:os";function hs(e=process.env){return e.ORACLE_CONFIG_DIR||fs.join(ps(),".config","oracle")}function qe({env:e=process.env,vault:t=null}={}){let r=t||he(),n=[];for(let[o,i]of Object.entries(Ie)){let s=(i.rpcEnv||[]).some(a=>String(e[a]||"").trim()),d="prepare";i.evm?s&&(d="live"):d="unavailable",n.push({key:o,chainId:i.chainId,name:i.name,family:"evm",status:d,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 qt({env:e=process.env,model:t=Zr(),vault:r=he(),signerReachable:n=!1,quote:o=null,reviewAvailable:i=!1,receiptAvailable:s=!1}={}){let d=[],a=(u,b,w,h=null)=>d.push({id:u,status:b,detail:w,fix:h}),p=(()=>{let[u,b]=process.versions.node.split(".").map(Number);return u>20||u===20&&b>=19})();a("node",p?"ok":"fail",`node ${process.versions.node}`,p?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 m=e.ORACLE_SIGNER_HOST||"127.0.0.1";if(ms.has(m)?a("signer",n?"ok":"warn",n?`loopback ${m}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):a("signer","fail",`signer host ${m} is not loopback`,"unset ORACLE_SIGNER_HOST"),!o)a("quote","warn","quote not probed",null);else if(o.ok){let u=String(o.detail||"net quote returned");a("quote","ok",u.length>140?`${u.slice(0,140)}\u2026`:u)}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 c=d.some(u=>u.status==="fail"),f=d.filter(u=>u.status==="ok").length;return{ok:!c,checks:d,firstRunScore:{ok:f,total:d.length,label:`${f}/${d.length} first-run hops green`},venues:qe({env:e,vault:r})}}async function ws(){try{return typeof(await Promise.resolve().then(()=>(vt(),Br))).createSignTimeReview=="function"}catch{return!1}}async function gs(){try{let e=await Promise.resolve().then(()=>(Sn(),xn));return typeof e.observeReceipt=="function"||typeof e.default=="function"||Object.values(e).some(t=>typeof t=="function")}catch{return!1}}var ms,Ut=l(()=>{Ke();Tt();en();Ye();ms=new Set(["127.0.0.1","::1","localhost"])});var kn={};Se(kn,{classifyReceipt:()=>se,default:()=>Es,detailText:()=>vn,firstHourReport:()=>qt,probeQuote:()=>bs,probeSigner:()=>ys,symbol:()=>xe,vaultStatus:()=>he});async function ys(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 xe(e){let t=String(e??"?").replace(/[^\w.$-]/g,"");return t.length>12?`${t.slice(0,12)}...`:t||"?"}function vn(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 bs(){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:`${xe(r.chainId)} ${xe(r.baseToken?.symbol)}/${xe(r.quoteToken?.symbol)} $${xe(r.priceUsd)}`}}catch(e){return{ok:!1,detail:vn(e instanceof Error?e.message:"quote failed")}}}var Es,In=l(()=>{Ut();Tt();Es={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=qe();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}}});import ie from"node:fs";import kn from"node:path";import zt from"node:fs";import Z from"node:path";Ae();var Bn="0.19.0",Cs=`hermes-agent==${Bn}`;var Ut="0.12.1",Ns=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Ut}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Ut}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function Dn(){return Z.join(Q(),"runtime")}function Fn(){return Z.join(Dn(),"venv")}function Mn(e){let t=process.platform==="win32"?"Scripts":"bin",r=process.platform==="win32"?`${e}.exe`:e;return Z.join(Fn(),t,r)}function jn(){return Mn("hermes")}function qn(e){let t=process.platform==="win32"&&!Z.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let r of(process.env.PATH||"").split(Z.delimiter))if(r)for(let n of t){let o=Z.join(r,`${e}${n}`);try{if(zt.existsSync(o))return o}catch{}}return null}function Ht(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=jn();if(zt.existsSync(e))return{ok:!0,bin:e,source:"managed"};let t=qn("hermes");return t?{ok:!0,bin:t,source:"path"}:{ok:!1,bin:null,source:null}}import U from"node:fs";import k from"node:path";Ae();import{existsSync as Gt,readFileSync as Un}from"node:fs";import{dirname as Wt,join as Ue}from"node:path";import{fileURLToPath as zn}from"node:url";function Hn(e){let t=Wt(zn(e));for(let r=0;r<8;r+=1){let n=Ue(t,"package.json");if(Gt(n))try{let i=JSON.parse(Un(n,"utf8"));if(i&&typeof i.version=="string")return t}catch{}let o=Wt(t);if(o===t)break;t=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function Jt(e,t){let r=Hn(t),n=Ue(r,e);return Gt(n)?n:Ue(r,"dist","assets",e)}var Wn=Object.freeze([{id:"oracle",label:"Oracle Native",kind:"oracle",bins:["oracle"],website:!0,detect:!0},{id:"hermes",label:"Hermes Agent",kind:"mcp",bins:["hermes"],mcpTarget:"generic",configKey:"hermes",website:!0,detect:!0},{id:"claude",label:"Claude Code",kind:"mcp",bins:["claude"],mcpTarget:"claude-code",configKey:"claudeCode",website:!0,detect:!0},{id:"claude-desktop",label:"Claude Desktop",kind:"mcp",bins:[],mcpTarget:"claude-desktop",configKey:"claudeDesktop",website:!0,detect:!1},{id:"chatgpt",label:"ChatGPT",kind:"mcp",bins:[],mcpTarget:"chatgpt",configKey:"chatgpt",website:!0,detect:!1},{id:"codex",label:"OpenAI Codex",kind:"mcp",bins:["codex"],mcpTarget:"codex",configKey:"codex",website:!0,detect:!0},{id:"cursor",label:"Cursor",kind:"mcp",bins:["cursor","cursor-agent"],mcpTarget:"cursor",configKey:"cursor",website:!0,detect:!0},{id:"windsurf",label:"Windsurf",kind:"mcp",bins:["windsurf"],mcpTarget:"vscode",configKey:"windsurf",website:!0,detect:!0},{id:"vscode",label:"VS Code / Copilot",kind:"mcp",bins:["code","code-insiders"],mcpTarget:"vscode",configKey:"vscode",website:!0,detect:!0},{id:"openclaw",label:"OpenClaw",kind:"mcp",bins:["openclaw","claw"],mcpTarget:"generic",configKey:"openclaw",website:!0,detect:!0},{id:"perplexity",label:"Perplexity",kind:"mcp",bins:["perplexity","pplx"],mcpTarget:"generic",configKey:"perplexity",website:!0,detect:!0},{id:"manus",label:"Manus",kind:"mcp",bins:["manus"],mcpTarget:"generic",configKey:"manus",website:!0,detect:!0},{id:"prime",label:"Prime Intellect Agent",kind:"mcp",bins:["prime-agent","prime"],mcpTarget:"generic",configKey:"prime",website:!1,detect:!0},{id:"opencode",label:"OpenCode",kind:"mcp",bins:["opencode"],mcpTarget:"generic",configKey:"opencode",website:!1,detect:!0},{id:"aider",label:"Aider",kind:"mcp",bins:["aider"],mcpTarget:"generic",configKey:"aider",website:!1,detect:!0},{id:"continue",label:"Continue",kind:"mcp",bins:["continue"],mcpTarget:"vscode",configKey:"continue",website:!1,detect:!0},{id:"goose",label:"Goose",kind:"mcp",bins:["goose"],mcpTarget:"generic",configKey:"goose",website:!1,detect:!0},{id:"amp",label:"Amp",kind:"mcp",bins:["amp"],mcpTarget:"generic",configKey:"amp",website:!1,detect:!0},{id:"generic",label:"Generic MCP",kind:"mcp",bins:[],mcpTarget:"generic",configKey:"genericMcp",website:!0,detect:!1}]);function Vt(){return Wn.filter(e=>e.website)}var ze=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function He(e=process.env){let t=String(e?.ORACLE_RESEARCH_MODE??e?.ORACLE_RLM_MODE??"").trim().toLowerCase();return t==="1"||t==="true"||t==="yes"||t==="on"||t==="research"}var ee=Object.freeze(["oracle_cli","memory_add","memory_remove","memory_search","skill_load","skill_create","skill_list","cron_add","cron_list","cron_remove","meta_analyze","web_fetch","web_search","file_read","file_write","mcp_list","mcp_call","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","learn_skill","workspace_artifact","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vault_status","signer_status","signer_execute","signer_disarm","receipt_report","watch_create","watch_list","portfolio_snapshot","vision_analyze","browser_exec","xurl","knowledge_search"]),Gn="deny",Ms=256*1024;var js=Object.freeze({version:1,source:"default",defaultDecision:Gn,allow:ee,deny:Object.freeze([])});var Jn=Object.freeze(["oracle_cli","memory_search","skill_load","skill_list","web_fetch","web_search","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vault_status","signer_status","receipt_report","watch_list","portfolio_snapshot","vision_analyze","knowledge_search"]),qs=new Set(Jn);var We=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),zs=Object.freeze({wallets:"wallet",smart_wallet:"wallet",pools:"pool",new_pool:"pool",nft:"nft_floor",nft_floors:"nft_floor",hyperliquid:"hl_flow",prediction:"prediction_market",prediction_markets:"prediction_market"}),F=(e,t=0,r=1)=>Math.min(r,Math.max(t,e)),$=e=>Number.isFinite(Number(e))?Number(e):null,Vn=e=>Math.round(e*1e4)/1e4;function P(e,t,r,n=!0){!n||r===null||!Number.isFinite(r)||e.push({feature:t,value:Vn(r)})}function Kn(e,t){let r=$(e.repeatBuys??e.repeat_buys??e.buyCount),n=$(e.walletWinRate??e.winRate);P(t,"repeat_buys",r===null?null:F((r-1)/4)*.38),P(t,"wallet_win_rate",n===null?null:(F(n)-.5)*.5)}function Yn(e,t){let r=$(e.ageHours??e.poolAgeHours),n=$(e.liquidityUsd??e.liquidity),o=e.liquidityLocked??e.locked;P(t,"pool_age",r===null?null:r<24?-.42:F(r/720)*.12),P(t,"liquidity",n===null?null:(F(Math.log10(Math.max(1,n))/7)-.5)*.28),P(t,"liquidity_lock",o==null?null:o?.12:-.28)}function Xn(e,t){let r=$(e.floorChange??e.floorChangePct),n=$(e.sales??e.saleCount);P(t,"floor_change",r===null?null:F(r,-1,1)*.35),P(t,"sales_depth",n===null?null:F(n/50)*.18)}function Qn(e,t){let r=$(e.flowImbalance??e.imbalance),n=$(e.fundingRate??e.funding);P(t,"flow_imbalance",r===null?null:F(r,-1,1)*.42),P(t,"funding",n===null?null:-F(n*100,-1,1)*.12)}function Zn(e,t){let r=$(e.marketProbability??e.marketPrice??e.probability),n=$(e.fairProbability??e.referenceProbability??e.fairValue);P(t,"probability_mispricing",r===null||n===null?null:F(n-r,-1,1)*.65);let o=$(e.liquidityUsd??e.liquidity);P(t,"market_liquidity",o===null?null:F(Math.log10(Math.max(1,o))/6)*.12)}var Hs=Object.freeze({wallet:Kn,pool:Yn,nft_floor:Xn,hl_flow:Qn,prediction_market:Zn});function Ge(e){try{return U.existsSync(e)}catch{return!1}}function ve(e){for(let t of e)if(t&&Ge(t))return t;return null}function Je(e){try{return Jt(e,import.meta.url)}catch{return null}}function eo(){let e=[k.join(S,"dist/data/desk-data.mjs"),k.join(S,"data/desk-data.mjs"),k.join(S,"src/data/desk-data.mjs")];for(let n of e)if(Ge(n))try{let i=U.readFileSync(n,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],s=new Set(i.map(d=>d.toLowerCase()));if(s.size>=20)return{count:s.size,detail:`${s.size} provider ids (bundled desk-data)`}}catch{}let t=[k.join(S,"src/data/providers"),k.join(S,"dist/data/providers"),k.join(S,"data/providers")],r=ve(t);if(!r)return{count:0,detail:"providers dir missing"};try{let n=U.readdirSync(r).filter(o=>o.endsWith(".mjs"));return{count:n.length,detail:`${n.length} provider modules`}}catch(n){return{count:0,detail:n instanceof Error?n.message:String(n)}}}function Kt(){let e=ve([Je("skills"),k.join(S,"skills"),k.join(S,"dist/assets/skills"),k.join(S,"assets/skills")]);if(!e)return{count:0,trading:[],building:[]};let t=U.readdirSync(e),r=t.filter(o=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(o)),n=t.filter(o=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(o));return{count:t.length,trading:r,building:n}}function to(){let e=ve([Je("protocols/templates"),k.join(S,"protocols/templates"),k.join(S,"dist/assets/protocols/templates"),k.join(S,"assets/protocols/templates")]);return e?U.readdirSync(e).filter(r=>!r.startsWith(".")):Kt().building.some(r=>/protocol-builder|dex-launch|token-launch/i.test(r))?["(via skills: protocol-builder / launch packs)"]:[]}function ro(){let e=ve([Je("profiles"),k.join(S,"profiles"),k.join(S,"dist/assets/profiles"),k.join(S,"assets/profiles")]);return e?U.readdirSync(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&!t.name.startsWith("_")).map(t=>t.name):[]}function no(){try{if(ee.includes("trade_lifecycle")&&!ee.some(t=>/broadcast|wallet_sign/.test(t)))return!0}catch{}let e=[k.join(S,"src/capability-posture.mjs"),k.join(S,"dist/capability-posture.mjs"),k.join(S,"capability-posture.mjs"),k.join(S,"dist/public-control/policy-schema.mjs"),k.join(S,"README.md"),k.join(S,"package.json")];for(let t of e)if(Ge(t))try{let r=U.readFileSync(t,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(r))return!0}catch{}return!1}function Yt(e=process.env){let t=[],r=(g,y,x,v=1)=>{t.push({id:g,status:y,detail:x,weight:v})},[n,o]=process.versions.node.split(".").map(Number),i=n>20||n===20&&o>=19;r("node",i?"ok":"fail",`node ${process.versions.node}`,2);let d=["oracle_cli","research_delegate","trade_lifecycle","signal_score","skill_load","learn_skill","code_eval","cron_add","web_fetch"].filter(g=>!ee.includes(g));r("agent_tools",d.length===0?"ok":"warn",d.length===0?`safe tools ${ee.length}; signal_score present`:`missing tools: ${d.join(",")}`,3),r("research_attributes","ok",`attrs [${ze.join(", ")}]; mode=${He(e)?"ON":"off"}`,2);let a=eo();r("providers",a.count>=40?"ok":a.count>=10?"warn":"fail",a.detail,3);let p=Kt();r("skills_trading_build",p.trading.length>=5&&p.building.length>=4?"ok":p.count>=10?"warn":"fail",`${p.count} skills; trading=${p.trading.length} building=${p.building.length}`,3);let m=to();r("protocol_templates",m.length>=2?"ok":"warn",m.length?m.join(", "):"none",2);let c=ro();r("profiles",c.includes("protocol-builder")&&c.includes("oracle")?"ok":c.length>=1?"warn":"fail",c.join(", ")||"none",2),r("signals_engine",We.length>=4?"ok":"fail",`types: ${We.join(", ")} (cold / no hot exec)`,2);let f=Vt();r("harness_roster",f.length>=8?"ok":"warn",`${f.length} supported harnesses; Oracle native default; MCP inbound only`,2),r("custody_prepare_only",no()?"ok":"fail","public plane prepare-only",4);let u=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";r("data_url","ok",u,1);let b=0,w=0;for(let g of t)w+=g.weight,g.status==="ok"?b+=g.weight:g.status==="warn"&&(b+=g.weight*.5);let h=w?Math.round(b/w*100):0,I=!t.some(g=>g.status==="fail")&&h>=70,O=I?`AGENTIC READY ${h}% \u2014 Oracle is the crypto control plane (prepare-only); pair coding harnesses via MCP for build.`:`AGENTIC GAPS ${h}% \u2014 fix fail/warn checks before calling Oracle the default crypto harness.`;return{ok:I,score:b,max:w,pct:h,summary:O,researchMode:He(e),attributes:[...ze],packageRoot:S,checks:t}}function In(){let[e,t]=process.versions.node.split(".").map(Number);return e>20||e===20&&t>=19}function bs(e){if(!ie.existsSync(e))return{};let t={};for(let r of ie.readFileSync(e,"utf8").split(/\r?\n/)){let n=r.match(/^([A-Z0-9_]+)=(.*)$/);n&&(t[n[1]]=n[2])}return t}async function Es(e){let t=e.replace(/\/$/,"");return(await Promise.all(["/health","/public/health"].map(async n=>{try{return(await fetch(t+n)).ok}catch{return!1}}))).some(Boolean)}var $m={name:"doctor",summary:"check the read plane (+ optional --agentic readiness score)",group:"read",usage:"oracle doctor [--json] [--agentic] [--first-hour]",async run(e){let t=e.argv.includes("--json"),r=e.argv.includes("--agentic"),n=e.argv.includes("--first-hour"),o=[],i=!1,s=(g,y,x,v=null)=>{o.push({id:g,status:y,detail:x,fix:v}),y==="fail"&&(i=!0)};s("node",In()?"ok":"fail",`node ${process.versions.node}`,In()?null:"install node >= 20.19");let d=e.paths.oracleExecEnvPath(),a=bs(d),p=process.env.ORACLE_ROUTE_ATTESTATION_SECRET||process.env.MAD_ROUTE_ATTESTATION_SECRET||process.env.ORACLE_ATTESTATION_SECRET||process.env.ORACLE_STAMP_HMAC_SECRET||a.ORACLE_ROUTE_ATTESTATION_SECRET||a.MAD_ROUTE_ATTESTATION_SECRET||a.ORACLE_ATTESTATION_SECRET||a.ORACLE_STAMP_HMAC_SECRET;s("attestation_secret",p?"ok":"warn",p?"present":"missing",p?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let m=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",c=await Es(m),f=e.paths.loadDeskRouting&&(process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL)?`desk ${process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL}`:null;s("data_server",c?"ok":"warn",c?`reachable ${m}${f?` (${f})`:""}`:`down ${m}`,c?null:m.includes("127.0.0.1")||m.includes("localhost")?"oracle data serve OR set ~/.config/oracle/desk.json to YOUR_DESK_HOST":"check the desk URL in ~/.config/oracle/desk.json (/public/health)");let u=Ht();s("harness_model","ok","Oracle native harness is default; external harnesses are inbound MCP only (oracle harness detect)",null),s("hermes_opt_in","ok",u.ok?`detected ${u.bin} (${u.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let b=kn.join(e.paths.hermesRoot(),"profiles"),w=0;ie.existsSync(b)&&(w=ie.readdirSync(b,{withFileTypes:!0}).filter(g=>g.isDirectory()).length),s("hermes_lanes","ok",w>0?`${w} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);{let g=kn.join(b,"oracle",".env"),y=[];if(ie.existsSync(g)){let x=ie.readFileSync(g,"utf8");/^TELEGRAM_BOT_TOKEN=.+/m.test(x)&&y.push("telegram"),/^DISCORD_BOT_TOKEN=.+/m.test(x)&&y.push("discord"),/^SLACK_BOT_TOKEN=.+/m.test(x)&&y.push("slack")}y.length?u.ok?s("messaging","ok",`${y.join("/")} configured \xB7 runtime ${u.source}`,null):s("messaging","warn",`${y.join("/")} token set but messaging runtime missing \u2014 bot cannot answer`,"oracle bootstrap, then oracle setup gateway restart"):s("messaging","ok","no channel tokens configured (optional \u2014 oracle setup)",null)}let h=null;if(r){h=Yt(process.env);for(let g of h.checks)s(`agentic_${g.id}`,g.status,g.detail,null)}let I=null;if(n){let{firstHourReport:g,probeReviewModule:y,probeReceiptModule:x}=await Promise.resolve().then(()=>(qt(),Sn)),{probeSigner:v,probeQuote:E}=await Promise.resolve().then(()=>(vn(),An)),[_,K,C,B]=await Promise.all([v(process.env),E(),y(),x()]);I=g({signerReachable:_,quote:K,reviewAvailable:C,receiptAvailable:B});for(let D of I.checks)s(`hour_${D.id}`,D.status,D.detail,D.fix);s("hour_score",I.ok?"ok":"warn",I.firstRunScore.label,null)}let O={ok:!i&&(h?h.ok:!0)&&(I?I.ok:!0),checks:o,...I?{firstHour:I}:{},...h?{agentic:{pct:h.pct,summary:h.summary,attributes:h.attributes,researchMode:h.researchMode}}:{}};if(t)process.stdout.write(JSON.stringify(O,null,2)+`
|
|
6
|
+
`);return 0}}});import ie from"node:fs";import Tn from"node:path";import Ht from"node:fs";import Z from"node:path";ve();var Fn="0.19.0",Rs=`hermes-agent==${Fn}`;var zt="0.12.1",$s=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${zt}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${zt}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function Mn(){return Z.join(Q(),"runtime")}function jn(){return Z.join(Mn(),"venv")}function qn(e){let t=process.platform==="win32"?"Scripts":"bin",r=process.platform==="win32"?`${e}.exe`:e;return Z.join(jn(),t,r)}function Un(){return qn("hermes")}function zn(e){let t=process.platform==="win32"&&!Z.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let r of(process.env.PATH||"").split(Z.delimiter))if(r)for(let n of t){let o=Z.join(r,`${e}${n}`);try{if(Ht.existsSync(o))return o}catch{}}return null}function Wt(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=Un();if(Ht.existsSync(e))return{ok:!0,bin:e,source:"managed"};let t=zn("hermes");return t?{ok:!0,bin:t,source:"path"}:{ok:!1,bin:null,source:null}}import U from"node:fs";import k from"node:path";ve();import{existsSync as Jt,readFileSync as Hn}from"node:fs";import{dirname as Gt,join as ze}from"node:path";import{fileURLToPath as Wn}from"node:url";function Gn(e){let t=Gt(Wn(e));for(let r=0;r<8;r+=1){let n=ze(t,"package.json");if(Jt(n))try{let i=JSON.parse(Hn(n,"utf8"));if(i&&typeof i.version=="string")return t}catch{}let o=Gt(t);if(o===t)break;t=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function Vt(e,t){let r=Gn(t),n=ze(r,e);return Jt(n)?n:ze(r,"dist","assets",e)}var Jn=Object.freeze([{id:"oracle",label:"Oracle Native",kind:"oracle",bins:["oracle"],website:!0,detect:!0},{id:"hermes",label:"Hermes Agent",kind:"mcp",bins:["hermes"],mcpTarget:"generic",configKey:"hermes",website:!0,detect:!0},{id:"claude",label:"Claude Code",kind:"mcp",bins:["claude"],mcpTarget:"claude-code",configKey:"claudeCode",website:!0,detect:!0},{id:"claude-desktop",label:"Claude Desktop",kind:"mcp",bins:[],mcpTarget:"claude-desktop",configKey:"claudeDesktop",website:!0,detect:!1},{id:"chatgpt",label:"ChatGPT",kind:"mcp",bins:[],mcpTarget:"chatgpt",configKey:"chatgpt",website:!0,detect:!1},{id:"codex",label:"OpenAI Codex",kind:"mcp",bins:["codex"],mcpTarget:"codex",configKey:"codex",website:!0,detect:!0},{id:"cursor",label:"Cursor",kind:"mcp",bins:["cursor","cursor-agent"],mcpTarget:"cursor",configKey:"cursor",website:!0,detect:!0},{id:"windsurf",label:"Windsurf",kind:"mcp",bins:["windsurf"],mcpTarget:"vscode",configKey:"windsurf",website:!0,detect:!0},{id:"vscode",label:"VS Code / Copilot",kind:"mcp",bins:["code","code-insiders"],mcpTarget:"vscode",configKey:"vscode",website:!0,detect:!0},{id:"openclaw",label:"OpenClaw",kind:"mcp",bins:["openclaw","claw"],mcpTarget:"generic",configKey:"openclaw",website:!0,detect:!0},{id:"perplexity",label:"Perplexity",kind:"mcp",bins:["perplexity","pplx"],mcpTarget:"generic",configKey:"perplexity",website:!0,detect:!0},{id:"manus",label:"Manus",kind:"mcp",bins:["manus"],mcpTarget:"generic",configKey:"manus",website:!0,detect:!0},{id:"prime",label:"Prime Intellect Agent",kind:"mcp",bins:["prime-agent","prime"],mcpTarget:"generic",configKey:"prime",website:!1,detect:!0},{id:"opencode",label:"OpenCode",kind:"mcp",bins:["opencode"],mcpTarget:"generic",configKey:"opencode",website:!1,detect:!0},{id:"aider",label:"Aider",kind:"mcp",bins:["aider"],mcpTarget:"generic",configKey:"aider",website:!1,detect:!0},{id:"continue",label:"Continue",kind:"mcp",bins:["continue"],mcpTarget:"vscode",configKey:"continue",website:!1,detect:!0},{id:"goose",label:"Goose",kind:"mcp",bins:["goose"],mcpTarget:"generic",configKey:"goose",website:!1,detect:!0},{id:"amp",label:"Amp",kind:"mcp",bins:["amp"],mcpTarget:"generic",configKey:"amp",website:!1,detect:!0},{id:"generic",label:"Generic MCP",kind:"mcp",bins:[],mcpTarget:"generic",configKey:"genericMcp",website:!0,detect:!1}]);function Kt(){return Jn.filter(e=>e.website)}var He=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function We(e=process.env){let t=String(e?.ORACLE_RESEARCH_MODE??e?.ORACLE_RLM_MODE??"").trim().toLowerCase();return t==="1"||t==="true"||t==="yes"||t==="on"||t==="research"}var ee=Object.freeze(["oracle_cli","memory_add","memory_remove","memory_search","skill_load","skill_create","skill_list","cron_add","cron_list","cron_remove","meta_analyze","web_fetch","web_search","file_read","file_write","mcp_list","mcp_call","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","learn_skill","workspace_artifact","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vault_status","signer_status","signer_execute","signer_disarm","receipt_report","watch_create","watch_list","portfolio_snapshot","vision_analyze","browser_exec","xurl","knowledge_search"]),Vn="deny",qs=256*1024;var Us=Object.freeze({version:1,source:"default",defaultDecision:Vn,allow:ee,deny:Object.freeze([])});var Kn=Object.freeze(["oracle_cli","memory_search","skill_load","skill_list","web_fetch","web_search","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vault_status","signer_status","receipt_report","watch_list","portfolio_snapshot","vision_analyze","knowledge_search"]),zs=new Set(Kn);var Ge=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),Ws=Object.freeze({wallets:"wallet",smart_wallet:"wallet",pools:"pool",new_pool:"pool",nft:"nft_floor",nft_floors:"nft_floor",hyperliquid:"hl_flow",prediction:"prediction_market",prediction_markets:"prediction_market"}),F=(e,t=0,r=1)=>Math.min(r,Math.max(t,e)),L=e=>Number.isFinite(Number(e))?Number(e):null,Yn=e=>Math.round(e*1e4)/1e4;function P(e,t,r,n=!0){!n||r===null||!Number.isFinite(r)||e.push({feature:t,value:Yn(r)})}function Xn(e,t){let r=L(e.repeatBuys??e.repeat_buys??e.buyCount),n=L(e.walletWinRate??e.winRate);P(t,"repeat_buys",r===null?null:F((r-1)/4)*.38),P(t,"wallet_win_rate",n===null?null:(F(n)-.5)*.5)}function Qn(e,t){let r=L(e.ageHours??e.poolAgeHours),n=L(e.liquidityUsd??e.liquidity),o=e.liquidityLocked??e.locked;P(t,"pool_age",r===null?null:r<24?-.42:F(r/720)*.12),P(t,"liquidity",n===null?null:(F(Math.log10(Math.max(1,n))/7)-.5)*.28),P(t,"liquidity_lock",o==null?null:o?.12:-.28)}function Zn(e,t){let r=L(e.floorChange??e.floorChangePct),n=L(e.sales??e.saleCount);P(t,"floor_change",r===null?null:F(r,-1,1)*.35),P(t,"sales_depth",n===null?null:F(n/50)*.18)}function eo(e,t){let r=L(e.flowImbalance??e.imbalance),n=L(e.fundingRate??e.funding);P(t,"flow_imbalance",r===null?null:F(r,-1,1)*.42),P(t,"funding",n===null?null:-F(n*100,-1,1)*.12)}function to(e,t){let r=L(e.marketProbability??e.marketPrice??e.probability),n=L(e.fairProbability??e.referenceProbability??e.fairValue);P(t,"probability_mispricing",r===null||n===null?null:F(n-r,-1,1)*.65);let o=L(e.liquidityUsd??e.liquidity);P(t,"market_liquidity",o===null?null:F(Math.log10(Math.max(1,o))/6)*.12)}var Gs=Object.freeze({wallet:Xn,pool:Qn,nft_floor:Zn,hl_flow:eo,prediction_market:to});function Je(e){try{return U.existsSync(e)}catch{return!1}}function ke(e){for(let t of e)if(t&&Je(t))return t;return null}function Ve(e){try{return Vt(e,import.meta.url)}catch{return null}}function ro(){let e=[k.join(S,"dist/data/desk-data.mjs"),k.join(S,"data/desk-data.mjs"),k.join(S,"src/data/desk-data.mjs")];for(let n of e)if(Je(n))try{let i=U.readFileSync(n,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],s=new Set(i.map(d=>d.toLowerCase()));if(s.size>=20)return{count:s.size,detail:`${s.size} provider ids (bundled desk-data)`}}catch{}let t=[k.join(S,"src/data/providers"),k.join(S,"dist/data/providers"),k.join(S,"data/providers")],r=ke(t);if(!r)return{count:0,detail:"providers dir missing"};try{let n=U.readdirSync(r).filter(o=>o.endsWith(".mjs"));return{count:n.length,detail:`${n.length} provider modules`}}catch(n){return{count:0,detail:n instanceof Error?n.message:String(n)}}}function Yt(){let e=ke([Ve("skills"),k.join(S,"skills"),k.join(S,"dist/assets/skills"),k.join(S,"assets/skills")]);if(!e)return{count:0,trading:[],building:[]};let t=U.readdirSync(e),r=t.filter(o=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(o)),n=t.filter(o=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(o));return{count:t.length,trading:r,building:n}}function no(){let e=ke([Ve("protocols/templates"),k.join(S,"protocols/templates"),k.join(S,"dist/assets/protocols/templates"),k.join(S,"assets/protocols/templates")]);return e?U.readdirSync(e).filter(r=>!r.startsWith(".")):Yt().building.some(r=>/protocol-builder|dex-launch|token-launch/i.test(r))?["(via skills: protocol-builder / launch packs)"]:[]}function oo(){let e=ke([Ve("profiles"),k.join(S,"profiles"),k.join(S,"dist/assets/profiles"),k.join(S,"assets/profiles")]);return e?U.readdirSync(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&!t.name.startsWith("_")).map(t=>t.name):[]}function io(){try{if(ee.includes("trade_lifecycle")&&!ee.some(t=>/broadcast|wallet_sign/.test(t)))return!0}catch{}let e=[k.join(S,"src/capability-posture.mjs"),k.join(S,"dist/capability-posture.mjs"),k.join(S,"capability-posture.mjs"),k.join(S,"dist/public-control/policy-schema.mjs"),k.join(S,"README.md"),k.join(S,"package.json")];for(let t of e)if(Je(t))try{let r=U.readFileSync(t,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(r))return!0}catch{}return!1}function Xt(e=process.env){let t=[],r=(g,y,x,v=1)=>{t.push({id:g,status:y,detail:x,weight:v})},[n,o]=process.versions.node.split(".").map(Number),i=n>20||n===20&&o>=19;r("node",i?"ok":"fail",`node ${process.versions.node}`,2);let d=["oracle_cli","research_delegate","trade_lifecycle","signal_score","skill_load","learn_skill","code_eval","cron_add","web_fetch"].filter(g=>!ee.includes(g));r("agent_tools",d.length===0?"ok":"warn",d.length===0?`safe tools ${ee.length}; signal_score present`:`missing tools: ${d.join(",")}`,3),r("research_attributes","ok",`attrs [${He.join(", ")}]; mode=${We(e)?"ON":"off"}`,2);let a=ro();r("providers",a.count>=40?"ok":a.count>=10?"warn":"fail",a.detail,3);let p=Yt();r("skills_trading_build",p.trading.length>=5&&p.building.length>=4?"ok":p.count>=10?"warn":"fail",`${p.count} skills; trading=${p.trading.length} building=${p.building.length}`,3);let m=no();r("protocol_templates",m.length>=2?"ok":"warn",m.length?m.join(", "):"none",2);let c=oo();r("profiles",c.includes("protocol-builder")&&c.includes("oracle")?"ok":c.length>=1?"warn":"fail",c.join(", ")||"none",2),r("signals_engine",Ge.length>=4?"ok":"fail",`types: ${Ge.join(", ")} (cold / no hot exec)`,2);let f=Kt();r("harness_roster",f.length>=8?"ok":"warn",`${f.length} supported harnesses; Oracle native default; MCP inbound only`,2),r("custody_prepare_only",io()?"ok":"fail","public plane prepare-only",4);let u=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";r("data_url","ok",u,1);let b=0,w=0;for(let g of t)w+=g.weight,g.status==="ok"?b+=g.weight:g.status==="warn"&&(b+=g.weight*.5);let h=w?Math.round(b/w*100):0,I=!t.some(g=>g.status==="fail")&&h>=70,O=I?`AGENTIC READY ${h}% \u2014 Oracle is the crypto control plane (prepare-only); pair coding harnesses via MCP for build.`:`AGENTIC GAPS ${h}% \u2014 fix fail/warn checks before calling Oracle the default crypto harness.`;return{ok:I,score:b,max:w,pct:h,summary:O,researchMode:We(e),attributes:[...He],packageRoot:S,checks:t}}function On(){let[e,t]=process.versions.node.split(".").map(Number);return e>20||e===20&&t>=19}function xs(e){if(!ie.existsSync(e))return{};let t={};for(let r of ie.readFileSync(e,"utf8").split(/\r?\n/)){let n=r.match(/^([A-Z0-9_]+)=(.*)$/);n&&(t[n[1]]=n[2])}return t}async function Ss(e){let t=e.replace(/\/$/,"");return(await Promise.all(["/health","/public/health"].map(async n=>{try{return(await fetch(t+n)).ok}catch{return!1}}))).some(Boolean)}var Bm={name:"doctor",summary:"check the read plane (+ optional --agentic readiness score)",group:"read",usage:"oracle doctor [--json] [--agentic] [--first-hour]",async run(e){let t=e.argv.includes("--json"),r=e.argv.includes("--agentic"),n=e.argv.includes("--first-hour"),o=[],i=!1,s=(g,y,x,v=null)=>{o.push({id:g,status:y,detail:x,fix:v}),y==="fail"&&(i=!0)};s("node",On()?"ok":"fail",`node ${process.versions.node}`,On()?null:"install node >= 20.19");let d=e.paths.oracleExecEnvPath(),a=xs(d),p=process.env.ORACLE_ROUTE_ATTESTATION_SECRET||process.env.MAD_ROUTE_ATTESTATION_SECRET||process.env.ORACLE_ATTESTATION_SECRET||process.env.ORACLE_STAMP_HMAC_SECRET||a.ORACLE_ROUTE_ATTESTATION_SECRET||a.MAD_ROUTE_ATTESTATION_SECRET||a.ORACLE_ATTESTATION_SECRET||a.ORACLE_STAMP_HMAC_SECRET;s("attestation_secret",p?"ok":"warn",p?"present":"missing",p?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let m=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",c=await Ss(m),f=e.paths.loadDeskRouting&&(process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL)?`desk ${process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL}`:null;s("data_server",c?"ok":"warn",c?`reachable ${m}${f?` (${f})`:""}`:`down ${m}`,c?null:m.includes("127.0.0.1")||m.includes("localhost")?"oracle data serve OR set ~/.config/oracle/desk.json to YOUR_DESK_HOST":"check the desk URL in ~/.config/oracle/desk.json (/public/health)");let u=Wt();s("harness_model","ok","Oracle native harness is default; external harnesses are inbound MCP only (oracle harness detect)",null),s("hermes_opt_in","ok",u.ok?`detected ${u.bin} (${u.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let b=Tn.join(e.paths.hermesRoot(),"profiles"),w=0;ie.existsSync(b)&&(w=ie.readdirSync(b,{withFileTypes:!0}).filter(g=>g.isDirectory()).length),s("hermes_lanes","ok",w>0?`${w} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);{let g=Tn.join(b,"oracle",".env"),y=[];if(ie.existsSync(g)){let x=ie.readFileSync(g,"utf8");/^TELEGRAM_BOT_TOKEN=.+/m.test(x)&&y.push("telegram"),/^DISCORD_BOT_TOKEN=.+/m.test(x)&&y.push("discord"),/^SLACK_BOT_TOKEN=.+/m.test(x)&&y.push("slack")}y.length?u.ok?s("messaging","ok",`${y.join("/")} configured \xB7 runtime ${u.source}`,null):s("messaging","warn",`${y.join("/")} token set but messaging runtime missing \u2014 bot cannot answer`,"oracle bootstrap, then oracle setup gateway restart"):s("messaging","ok","no channel tokens configured (optional \u2014 oracle setup)",null)}let h=null;if(r){h=Xt(process.env);for(let g of h.checks)s(`agentic_${g.id}`,g.status,g.detail,null)}let I=null;if(n){let{firstHourReport:g,probeReviewModule:y,probeReceiptModule:x}=await Promise.resolve().then(()=>(Ut(),An)),{probeSigner:v,probeQuote:E}=await Promise.resolve().then(()=>(In(),kn)),[_,K,C,B]=await Promise.all([v(process.env),E(),y(),x()]);I=g({signerReachable:_,quote:K,reviewAvailable:C,receiptAvailable:B});for(let D of I.checks)s(`hour_${D.id}`,D.status,D.detail,D.fix);s("hour_score",I.ok?"ok":"warn",I.firstRunScore.label,null)}let O={ok:!i&&(h?h.ok:!0)&&(I?I.ok:!0),checks:o,...I?{firstHour:I}:{},...h?{agentic:{pct:h.pct,summary:h.summary,attributes:h.attributes,researchMode:h.researchMode}}:{}};if(t)process.stdout.write(JSON.stringify(O,null,2)+`
|
|
7
7
|
`);else{for(let g of o)process.stdout.write(`${g.status.toUpperCase().padEnd(4)} ${g.id}: ${g.detail}
|
|
8
8
|
`),g.fix&&process.stdout.write(` fix: ${g.fix}
|
|
9
9
|
`);h&&process.stdout.write(`
|
|
10
10
|
${h.summary}
|
|
11
|
-
`)}return O.ok?0:1}};export{
|
|
11
|
+
`)}return O.ok?0:1}};export{Bm as default};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
var nn=Object.defineProperty;var a=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(o){throw r=[o],o}};var pe=(e,t)=>{for(var r in t)nn(e,r,{get:t[r],enumerable:!0})};function It(e){return on.get(Number(e))||null}function kt(e,t=process.env){let r=It(e);if(!r)return null;for(let o of r.rpcEnv){let n=(t[o]||"").trim();if(n)return n}return null}var me,on,_e=a(()=>{me={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}},on=new Map(Object.values(me).map(e=>[e.chainId,e]))});function K(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 Le=a(()=>{});var Tt=a(()=>{});var Ot=a(()=>{});var Y=a(()=>{});var U=a(()=>{});var we=a(()=>{Y();U()});import{isAddress as Fi}from"ethers";var Be=a(()=>{we();Y();U()});import{Interface as cn,isAddress as zi}from"ethers";var Ji,Nt=a(()=>{Be();Y();U();Ji=new cn(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as un,isAddress as Yi}from"ethers";var es,ts,Ct=a(()=>{Be();Y();U();es=new un(["function approve(address spender,uint256 amount) returns (bool)"]),ts=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var B=a(()=>{});import{Interface as ln,MaxUint256 as cs,isAddress as us,keccak256 as ls,toUtf8Bytes as ds}from"ethers";var gs,F=a(()=>{Ot();Nt();Ct();B();U();gs=new ln(["function approve(address spender,uint256 amount) returns (bool)"])});var bs,Es,ge=a(()=>{bs=300*1e3,Es=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var ye=a(()=>{F()});import{Address as Is,NETWORK as ks,OutScript as Ts,RawTx as Os,SigHash as Ns,TEST_NETWORK as Cs,Transaction as $s}from"@scure/btc-signer";var Me=a(()=>{});import{createHash as dn}from"node:crypto";import{base58 as Ps}from"@scure/base";import{getCompiledTransactionMessageDecoder as Fs}from"@solana/transaction-messages";var $t,Ds,qe=a(()=>{$t=e=>dn("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),Ds=new Map([[$t("route"),{name:"route",prefixBytes:0}],[$t("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});import D from"node:net";import fn from"node:dns";function be(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let r=m=>{if(!m)return[];let u=m.split(":"),f=u.at(-1);if(f?.includes(".")){let l=f.split(".").map(Number);if(l.length!==4||l.some(g=>!Number.isInteger(g)||g<0||g>255))return null;u.splice(u.length-1,1,(l[0]<<8|l[1]).toString(16),(l[2]<<8|l[3]).toString(16))}return u.some(l=>!/^[0-9a-f]{1,4}$/.test(l))?null:u.map(l=>Number.parseInt(l,16))},[o,n]=t.split("::"),i=r(o),s=r(n);if(!i||!s)return null;let d=t.includes("::"),c=8-i.length-s.length;if(!d&&c!==0||d&&c<1)return null;let p=[...i,...Array(Math.max(0,c)).fill(0),...s];return p.length!==8?null:Uint8Array.from(p.flatMap(m=>[m>>8,m&255]))}function je(e,t,r){let o=Math.floor(r/8),n=r%8;for(let s=0;s<o;s+=1)if(e[s]!==t[s])return!1;if(!n)return!0;let i=255<<8-n;return(e[o]&i)===(t[o]&i)}function Ue(e){if(D.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(D.isIPv6(e)){let t=be(e);if(!t)return!1;let r=be("::ffff:0:0");return je(t,r,96)?Ue([...t.slice(12)].join(".")):je(t,be("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([n,i])=>je(t,be(n),i)):!1}return!1}function mn(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(pn.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let o=D.isIP(r);return o!==0&&!Ue(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:o!==0}}async function ze(e,{lookupFn:t=fn.promises.lookup}={}){let r=mn(e);if(!r.ok)return r;if(r.isLiteralIp)return{ok:!0,url:r.url,addresses:[{address:r.host,family:D.isIPv6(r.host)?6:4}]};let o;try{o=await t(r.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${r.host} did not resolve`}}return!Array.isArray(o)||o.length===0||o.some(n=>!Ue(n.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:o}}async function He({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let r,o;try{let u=await t();r=u.Agent,o=u.fetch}catch(u){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${u?.message||u}`);return null}if(typeof r!="function"||typeof o!="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 n=u=>String(u).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),i=new Map,s=u=>(Array.isArray(u)?u:[u]).map(f=>typeof f=="string"?{address:f}:f).filter(f=>f&&f.address).map(f=>({address:f.address,family:f.family||(D.isIPv6(f.address)?6:4)})),d=(u,f,l)=>{i.set(n(u),s(typeof f=="string"?[{address:f,family:l}]:f))},c=u=>{let f=n(u);if(D.isIP(f))return[{address:f,family:D.isIPv6(f)?6:4}];let l=i.get(f);if(!l||!l.length)throw new Error(`refused: unpinned host ${u} during pinned fetch`);return l},p=new r({connect:{lookup(u,f,l){let g;try{g=c(u)}catch(h){return l(h)}return f?.all?l(null,g):l(null,g[0].address,g[0].family)}}}),m=hn((u,f={})=>o(u,{...f,dispatcher:p}),d);return{dispatcher:p,fetch:m,pin:d,resolve:c,async close(){try{await p.destroy()}catch{}}}}function hn(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[We]=Object.freeze({pin:t}),e}function Ge(e){return typeof e=="function"&&typeof e[We]?.pin=="function"}function Rt(e,t,r){if(!Ge(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[We].pin(t,r)}var pn,We,_t=a(()=>{pn=new Set(["localhost","metadata.google.internal","metadata.goog"]);We=Symbol.for("oracle.egressGuard.pinCapableFetch")});import{createHash as Lt}from"node:crypto";function En(e){let t=String(e||"").toLowerCase();return jt.includes(t)||/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(t)}function xn(e){let t={};for(let[r,o]of Object.entries(e||{}))En(r)||(t[r]=o);return t}function Sn(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 An(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function Dt(e){let t=String(e?.method||"");return t?!vn.test(t):!1}function kn(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}return Array.isArray(r)?r.length>0&&r.every(Dt):!r||typeof r!="object"?!1:r.jsonrpc&&r.method?Dt(r):typeof r.type=="string"&&In.has(r.type)&&r.action==null&&r.signature==null&&r.nonce==null}function Tn(e,t,r,o={},n=null){let i={};for(let[f,l]of Object.entries(r||{}))i[f.toLowerCase()]=l;let s=Object.keys(i).filter(f=>/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(f)),c=[...new Set([...jt,...s])].sort().map(f=>`${f}=${i[f]??""}`).join(`
|
|
2
|
+
`),p=Lt("sha256").update(c).digest("hex").slice(0,32),m=`${o.untrustedUrl?"untrusted":"trusted"}:${o.maxResponseBytes??"unbounded"}`,u=n==null?"-":Lt("sha256").update(String(n)).digest("hex").slice(0,32);return`${e} ${t} ${m} ${p} ${u}`}function On(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,Bt):Math.min(250*2**e,Bt)+Math.floor(Math.random()*100)}function Q(e,t={}){let r=new Error(e);return r.retryable=!1,Object.assign(r,t),r}function Ve(e,t,r){return Q(`HTTP response from ${e} exceeded maxResponseBytes ${r} (${t})`,{oversize:!0})}function Z(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function Cn(e){return e?e.byteLength??e.length??0:0}async function Mt(e,t,{url:r,truncate:o=!1,onOversize:n}={}){if(t==null)return await e.text();let i=Number(e.headers?.get?.("content-length"));if(Number.isFinite(i)&&i>t&&(Z(e),!o))throw Ve(r,`content-length ${i}`,t);let s=e.body?.getReader?.();if(!s){let u=await e.text(),f=Buffer.byteLength(u,"utf8");if(f>t){if(!o)throw Ve(r,`body ${f} bytes`,t);return Buffer.from(u,"utf8").subarray(0,t).toString("utf8")}return u}let d=[],c=0,p=!1;try{for(;;){let{value:u,done:f}=await s.read();if(f)break;if(u&&(d.push(Buffer.from(u)),c+=Cn(u),c>t)){p=!0;break}}}finally{if(p)try{await s.cancel()}catch{}try{s.releaseLock?.()}catch{}}if(p&&(typeof n=="function"&&n(),!o))throw Ve(r,`streamed ${c} bytes`,t);let m=Buffer.concat(d);return(p?m.subarray(0,t):m).toString("utf8")}function qt(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function $n(e,{fetchImpl:t,method:r,headers:o,body:n,timeoutMs:i,lookupFn:s,realFetch:d,untrustedUrl:c=!1,maxResponseBytes:p=null,importUndici:m,validateResponse:u,signal:f}){let l=new AbortController,g=setTimeout(()=>l.abort(),i),h=f?typeof AbortSignal.any=="function"?AbortSignal.any([f,l.signal]):f:l.signal,y=null,_=t,N=s?{lookupFn:s}:{};if(c&&!d&&!Ge(_))throw Q(`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 P=async(b,{status:x=null}={})=>{let S=await ze(b,N);if(!S.ok)throw Q(x==null?`HTTP refused ${b}: ${S.error}`:`HTTP redirect to ${b} ${S.error}`,x==null?{}:{status:x});let w=new URL(b).hostname;if(d){if(y&&(await y.close(),y=null),!y)try{y=await He({requireUndici:!0,...m?{importUndici:m}:{}})}catch(I){throw Q(x==null?`HTTP refused ${b}: ${I?.message||I}`:`HTTP redirect to ${b} refused: ${I?.message||I}`,x==null?{}:{status:x})}y.pin(w,S.addresses),_=y.fetch}else Rt(_,w,S.addresses);return S};try{let b=String(e),x={...o||{}};c&&await P(b);for(let S=0;S<=Ft;S+=1){let w=await _(b,{method:r,headers:x,body:n,signal:h,redirect:"manual"});if(yn.has(w.status)){if(r!=="GET"&&r!=="HEAD"){let O=await Mt(w,p??bn,{url:b,truncate:!0}),C=new Error(`HTTP ${w.status} ${r} ${b} redirected non-idempotent request`);throw C.status=w.status,C.body=qt(O)??O.slice(0,300),C}if(S===Ft)throw Z(w),new Error(`HTTP redirect loop for ${e}`);let T=w.headers?.get?.("location"),L;try{L=Sn(T,b)}catch(O){throw Z(w),O}let V=!An(L,b);if(Z(w),V&&(x=xn(x)),c)await P(L,{status:w.status});else if(V){let O=await ze(L,N);if(!O.ok){let C=new Error(`HTTP redirect from ${b} ${O.error}`);throw C.status=w.status,C.retryable=!1,C}d&&O.addresses?.length&&(y||(y=await He(m?{importUndici:m}:{})),y&&(y.pin(new URL(L).hostname,O.addresses),_=y.fetch))}b=L;continue}if(typeof u=="function")try{await u(w,{url:b})}catch(T){throw Z(w),Q(T?.message||String(T))}let I=await Mt(w,p,{url:b,onOversize:()=>l.abort()}),fe=qt(I);if(!w.ok){let T=new Error(`HTTP ${w.status} ${r} ${b}`);throw T.status=w.status,T.retryAfter=w.headers?.get?.("retry-after")??null,T.body=fe??I.slice(0,300),T}return fe??I}throw new Error(`HTTP redirect loop for ${e}`)}finally{clearTimeout(g),y&&await y.close()}}async function Ee(e,t={}){let r=t.fetchImpl||globalThis.fetch;if(typeof r!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let o=t.timeoutMs??12e3,n=(t.method||"GET").toUpperCase(),i={Accept:"application/json",...t.headers||{}},s=t.body;s!=null&&typeof s!="string"&&(i["Content-Type"]=i["Content-Type"]||"application/json",s=JSON.stringify(s));let d=Number.isInteger(t.retries)?Math.max(t.retries,0):gn,c=t.lookupFn,p=!t.fetchImpl,m=t.untrustedUrl===!0,u=t.importUndici,f=t.validateResponse,l=t.signal,g=Number(t.maxResponseBytes),h=Number.isFinite(g)&&g>0?Math.floor(g):null,y=async()=>{let x;for(let S=0;S<=d;S++){l?.throwIfAborted?.();try{return await $n(e,{fetchImpl:r,method:n,headers:i,body:s,timeoutMs:o,lookupFn:c,realFetch:p,untrustedUrl:m,maxResponseBytes:h,importUndici:u,validateResponse:f,signal:l})}catch(w){x=w;let I=w?.status,fe=w?.name==="AbortError"||w?.name==="TimeoutError"||l?.aborted,T=new Set([408,425,429]),L=w?.retryable===!1?!1:I!=null?T.has(I)||wn.has(I)&&Pt.has(n):!fe&&Pt.has(n);if(S===d||!L)throw w;let V=On(S,w?.retryAfter);l?await new Promise((O,C)=>{let rn=setTimeout(O,V);l.addEventListener("abort",()=>{clearTimeout(rn),C(l.reason||new DOMException("Aborted","AbortError"))},{once:!0})}):await Nn(V)}}throw x};if(!(t.dedupe!==!1&&!l&&kn(n,s)))return y();let N=Tn(n,e,i,{untrustedUrl:m,maxResponseBytes:h},s),P=Je.get(N);if(P)return P;let b=y().finally(()=>Je.delete(N));return Je.set(N,b),b}var wn,Pt,gn,Bt,jt,yn,Ft,bn,Je,vn,In,Nn,xe=a(()=>{_t();wn=new Set([408,425,429,500,502,503,504]),Pt=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),gn=2,Bt=4e3,jt=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],yn=new Set([301,302,303,307,308]),Ft=3,bn=64*1024;Je=new Map,vn=/(?:^|_)(send|submit|broadcast|sign|requestAirdrop)(?=[A-Z_]|$)/i,In=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);Nn=e=>new Promise(t=>setTimeout(t,e))});var Ut=a(()=>{xe()});var zt=a(()=>{Ut()});var ta,ra,Ye=a(()=>{B();zt();ta=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"}),ra=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 ia,Xe=a(()=>{B();ia="0x"+"00".repeat(32)});var Rn,la,Qe=a(()=>{Xe();B();Rn=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),la=Object.freeze(Rn.map(e=>e[0]))});var Se=a(()=>{B()});import{TypedDataEncoder as ha,getAddress as wa,isAddress as ga}from"ethers";var Ln,Pn,Jt=a(()=>{ge();Ln=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Pn=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 Ea,Vt=a(()=>{Ea=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var Kt=a(()=>{});import{TypedDataEncoder as Oa,getAddress as Na,isAddress as Ca}from"ethers";var Bn,Fa,Fn,Da,Yt=a(()=>{xe();we();Vt();Kt();ge();Bn=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),Fa=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),Fn=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"}]}),Da=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as ja,getAddress as Ua}from"ethers";var Wa,Ze=a(()=>{Jt();Yt();Wa=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as Qt}from"ethers";var zn,cc,Hn,uc,lc,dc,fc,Wn,pc,Ae=a(()=>{F();we();ge();ye();Me();qe();Ye();Qe();Se();Ze();zn=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),cc=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}),Hn=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"}}),uc=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),lc=new Qt(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),dc=new Qt(["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"]),fc=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"}}),Wn=Object.freeze([...zn]),pc=Object.freeze({...Hn})});import{encode as wc}from"@msgpack/msgpack";import{keccak256 as yc,verifyTypedData as bc}from"ethers";var Ec,xc,et=a(()=>{Ec=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),xc=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var tt=a(()=>{Se()});import{ed25519 as Nc}from"@noble/curves/ed25519.js";import{base58 as $c}from"@scure/base";import{RawTx as _c,SigHash as Lc,Transaction as Pc}from"@scure/btc-signer";import{Transaction as Fc,keccak256 as Dc,verifyTypedData as Mc}from"ethers";var rt=a(()=>{et();tt()});import{base58 as Gc}from"@scure/base";var ve=a(()=>{Ae();ye();F();rt()});var er=a(()=>{ve();Ae()});var ou,iu,su,z=a(()=>{ou=Object.freeze({N:1<<17,r:8,p:1}),iu=256*1024*1024,su=16*1024});var cu,tr=a(()=>{cu=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 nt}from"node:os";import{join as ot}from"node:path";var rr,Vn,fu,nr=a(()=>{rr=process.env.ORACLE_PUBLIC_DESKTOP==="1",Vn=rr?process.env.ORACLE_CONFIG_DIR||ot(nt(),".config","oracle"):ot(nt(),".config","oracle"),fu=rr?Vn:ot(nt(),".config","mad-desk")});var gu,yu,bu,or=a(()=>{nr();gu="0".repeat(64),yu=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"}),bu=Promise.resolve()});var it=a(()=>{or();B();z();ve()});var sr=a(()=>{});var ur={};pe(ur,{SIGN_TIME_REVIEW_VERSION:()=>Kn,SignTimeReviewSecretError:()=>ee,createSignTimeReview:()=>cr});function st(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string"){let n=e.trim().split(/\s+/);if(eo.test(e)||to.has(n.length)&&n.every(i=>/^[a-z]+$/i.test(i)))throw new ee(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((n,i)=>st(n,`${t}[${i}]`,r));M(e,t);let o={};for(let n of Object.keys(e).sort()){let i=n.replace(/[^a-z0-9]/gi,"");if(Zn.test(i))throw new ee(`${t}.${n}`);e[n]!==void 0&&(o[n]=st(e[n],`${t}.${n}`,n))}return o}function M(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 te(e,t){if(e==null||e==="")throw new TypeError(`sign-time review: ${t} required`);return e}function H(e,t){let r=String(te(e,t)).toLowerCase();if(!Yn.test(r))throw new TypeError(`sign-time review: ${t} must be an EVM address`);return r}function $(e,t,{positive:r=!1}={}){try{let o=BigInt(te(e,t));if(o<0n||r&&o===0n)throw new Error;return o.toString()}catch{throw new TypeError(`sign-time review: ${t} must be an unsigned integer`)}}function at(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 ar(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))ar(t);Object.freeze(e)}return e}function ro(e,t){if(typeof e=="boolean")return{passed:e,reason:e?"passed":"failed"};M(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 o=e.reason??e.message??e.name??(r?"passed":"failed");return{...e,passed:r,reason:at(String(o),`${t}.reason`)}}function no(e){if(!Array.isArray(e))throw new TypeError("sign-time review: policyChecks must be an array");let t=e.map((o,n)=>ro(o,`policyChecks[${n}]`)),r=t.filter(o=>!o.passed);return{checks:t,passed:t.length-r.length,failed:r.length,reasons:r.map(o=>o.reason)}}function oo(e){if(e==null)return null;if(M(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:at(String(e.summary??"simulation result recorded"),"simulation.summary")};return e.gasEstimate!=null&&(t.gasEstimate=$(e.gasEstimate,"simulation.gasEstimate")),e.gasLimit!=null&&(t.gasLimit=$(e.gasLimit,"simulation.gasLimit")),t}function io(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)=>{M(t,`assetDeltas[${r}]`);let o=$(t.before,`assetDeltas[${r}].before`),n=$(t.after,`assetDeltas[${r}].after`),i=(BigInt(n)-BigInt(o)).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:at(String(te(t.asset??t.token,`assetDeltas[${r}].asset`)),`assetDeltas[${r}].asset`),before:o,after:n,delta:s}})}function so(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)=>{M(t,`approvalDeltas[${r}]`);let o=$(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:H(t.token,`approvalDeltas[${r}].token`),spender:H(t.spender,`approvalDeltas[${r}].spender`),owner:H(t.owner,`approvalDeltas[${r}].owner`),amount:o,revokeLike:t.revokeLike??BigInt(o)===0n}})}function cr(e={}){M(e,"input");let t=st(e),r=t.tx==null?t:M(t.tx,"tx"),o=$(t.chainId??r.chainId,"chainId",{positive:!0}),n=H(t.account??t.from??r.from,"account/from"),i=H(t.destination??t.to??r.to,"destination/to"),s=String(te(t.prepareHash,"prepareHash")).toLowerCase();if(!Qn.test(s))throw new TypeError("sign-time review: prepareHash must be a 32-byte hash");let d=t.route??t.venue;if(d==null)throw new TypeError("sign-time review: route/venue required");let c=t.decodedCalldata??t.decodedAction;if(c==null)throw new TypeError("sign-time review: decodedCalldata or decodedAction required");let p=String(te(t.calldata??t.data??r.data,"calldata/data")).toLowerCase();if(!Xn.test(p))throw new TypeError("sign-time review: calldata/data must be even-length hex");let m=t.policyChecks!==void 0&&t.policyChecks!==null,u=no(m?t.policyChecks:[]),f=oo(t.simulation),l=io(t.assetDeltas),g=so(t.approvalDeltas),h=t.allowlistHits??[];if(!Array.isArray(h))throw new TypeError("sign-time review: allowlistHits must be an array");let y=f?.willRevert===!0||["failed","error"].includes(f?.status),_=f!=null&&f.willRevert===!1&&["ok","success"].includes(f.status),N=y||u.failed>0?"BLOCKED":_&&m&&u.checks.length>0&&l!=null?"READY":"UNKNOWN",P=typeof c=="string"?c:c.method??c.action??c.type??"transaction",b=`${N}: review ${P} on chain ${o}; policy ${u.passed} passed, ${u.failed} failed; ${l?.length??0} asset delta${l?.length===1?"":"s"}; local signature required`,x={reviewVersion:1,status:N,requiresLocalSignature:!0,signingLocal:!0,custody:"none",execution:"review-only",chainId:o,account:n,from:n,route:d,venue:t.venue??(typeof d=="string"?d:d.venue??d.provider??null),destination:i,to:i,...t.spender==null?{}:{spender:H(t.spender,"spender")},prepareHash:s,...t.decodedCalldata!==void 0?{decodedCalldata:t.decodedCalldata}:{decodedAction:t.decodedAction},calldata:p,data:p,selector:p.length>=10?p.slice(0,10):null,value:$(t.value??r.value??0,"value"),...(t.gasEstimate??r.gasEstimate)==null?{}:{gasEstimate:$(t.gasEstimate??r.gasEstimate,"gasEstimate")},...(t.gasLimit??r.gasLimit)==null?{}:{gasLimit:$(t.gasLimit??r.gasLimit,"gasLimit")},simulation:f,policyChecks:u,allowlistHits:h,assetDeltas:l,approvalDeltas:g,summary:b};return ar(x)}var Kn,Yn,Xn,Qn,Zn,eo,to,ee,ct=a(()=>{Kn=1,Yn=/^0x[0-9a-f]{40}$/,Xn=/^0x(?:[0-9a-f]{2})*$/,Qn=/^(?:0x)?[0-9a-f]{64}$/,Zn=/(privatekey|privkey|secretkey|seedphrase|mnemonic|passphrase|password|keystore|keymaterial|wif|xprv|xpriv|bearer|authorization|signature|apikey|credential)/i,eo=/\b(?:[5KL][1-9A-HJ-NP-Za-km-z]{50,51}|xprv[0-9A-Za-z]{50,})\b/,to=new Set([12,15,18,21,24]),ee=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 Nu,readdirSync as Cu,existsSync as ao}from"node:fs";import{dirname as co,join as re}from"node:path";import{fileURLToPath as uo}from"node:url";function lo(){let e=[re(ne,"descriptors"),re(ne,"clear-sign","descriptors"),re(ne,"..","clear-sign","descriptors"),re(ne,"..","..","clear-sign","descriptors"),re(ne,"..","..","..","clear-sign","descriptors")];for(let t of e)if(ao(t))return t;return e[0]}var ne,Lu,Pu,lr=a(()=>{F();ne=co(uo(import.meta.url));Lu=lo(),Pu=(1n<<256n)-1n});var dr=a(()=>{ct();F();lr()});import{Wallet as zu}from"ethers";import{base58 as Wu}from"@scure/base";import{ed25519 as Ju}from"@noble/curves/ed25519.js";import{NETWORK as Ku,TEST_NETWORK as Yu,WIF as Xu,p2wpkh as Qu}from"@scure/btc-signer";import{pubECDSA as el}from"@scure/btc-signer/utils.js";var fr=a(()=>{});var nl,ol,il,sl,al,cl,ul,ll,dl,fl,pl,pr=a(()=>{it();nl=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),ol=Object.freeze(["binance","bybit","okx","coinbase"]),il=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),sl=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),al=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),cl=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),ul=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),ll=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),dl=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),fl=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),pl=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var mr=a(()=>{z()});var mo,hr,ke=a(()=>{mo=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}"]})}),hr=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var wr=a(()=>{ke()});var Al,gr=a(()=>{ke();wr();Al=256*1024});var yr=a(()=>{ke();gr()});var br=a(()=>{z()});import v from"node:path";import ho from"node:os";import{createHash as wo,randomBytes as pd}from"node:crypto";import{Interface as ut,keccak256 as hd}from"ethers";import{Transaction as gd}from"@scure/btc-signer";import{ed25519 as bd}from"@noble/curves/ed25519.js";function Er(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||v.join(process.env.XDG_STATE_HOME||v.join(ho.homedir(),".local","state"),"oracle"),r=wo("sha256").update(v.resolve(e)).digest("hex").slice(0,16);return{vault:v.join(e,"vault.json"),policy:v.join(e,"signer-policy.json"),policyKey:v.join(e,"policy-integrity-key"),policyAnchor:v.join(t,`signer-policy-${r}.high-water`),ledger:v.join(e,"signer-ledger.json"),ledgerAnchor:v.join(t,`signer-ledger-${r}.high-water`),cexOrders:v.join(e,"cex-orders.json"),cexOrdersAnchor:v.join(t,`cex-orders-${r}.high-water`),token:v.join(e,"signer-token"),lock:v.join(t,`signer-${r}.lock`)}}var Jd,Vd,Kd,xr=a(()=>{er();ve();z();tr();it();sr();F();dr();Ae();ye();rt();Ye();Qe();Se();tt();Xe();et();Me();qe();Ze();fr();pr();mr();yr();br();Jd=new ut(["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"]),Vd=new ut(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),Kd=new ut(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import lt from"node:fs";import Sr from"node:path";import{homedir as go}from"node:os";function yo(){return process.env.ORACLE_CONFIG_DIR||Sr.join(go(),".config","oracle")}function oe(){let e=Er(Sr.join(yo(),"signer")),t=lt.existsSync(e.vault),r=lt.existsSync(e.lock),o=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:lt.existsSync(e.policy),armed:t&&!r,disarmed:r,capabilities:{swap:o,bridge:o},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var af,dt=a(()=>{Le();Tt();xr();z();af=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_ack",description:"Execute one pending artifact through the armed local signer (same path as Telegram Allow). Fails if the signer is not running or disarmed. Never holds keys.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},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 Te from"node:fs";import bo from"node:os";import G from"node:path";import{fileURLToPath as Eo}from"node:url";function Ar(){return process.env.ORACLE_FAKE_HOME||bo.homedir()}function So(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function Oe(){return So()?process.env.ORACLE_CONFIG_DIR||G.join(Ar(),".config","oracle"):G.join(Ar(),".config","oracle")}function Ao(){return G.join(Oe(),"desk.json")}function vo(){return G.join(Oe(),"env")}function W({force:e=!1}={}){if(W._done&&!e)return W._result||null;W._done=!0;let t={},r=(n,i)=>{if(i==null)return;let s=String(i).trim();s&&(process.env[n]!=null&&String(process.env[n]).trim()!==""||(process.env[n]=s,t[n]=s))};try{let n=vo();if(Te.existsSync(n))for(let i of Te.readFileSync(n,"utf8").split(/\r?\n/)){let s=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let d=s[2];(d.startsWith('"')&&d.endsWith('"')||d.startsWith("'")&&d.endsWith("'"))&&(d=d.slice(1,-1)),r(s[1],d)}}catch{}try{let n=Ao();if(Te.existsSync(n)){let i=JSON.parse(Te.readFileSync(n,"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 o=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return o&&(r("ORACLE_DESK_URL",o),r("ORACLE_DATA_URL",o),r("ORACLE_API_URL",o),r("ORACLE_PUBLIC_URL",o),r("MAD_DESK_URL",o)),W._result=Object.keys(t).length?t:null,W._result}var xo,pf,vr=a(()=>{xo=G.dirname(Eo(import.meta.url)),pf=G.resolve(xo,"../..");try{W()}catch{}});function Ne(e){return String(e||"").trim()||void 0}function ko(e,{required:t=!1}={}){let r=Ne(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!Io.has(r))throw new Error(`unsupported provider: ${r}`);return r}function To(e,{required:t=!1}={}){let r=Ne(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 Oo(e){let t=Ne(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 o=r.hostname.toLowerCase().replace(/^\[|\]$/g,""),n=o==="localhost"||o==="127.0.0.1"||o==="::1";if(r.protocol!=="https:"&&!(r.protocol==="http:"&&n)||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 Ir({provider:e,model:t,baseUrl:r}={},{requireModel:o=!1}={}){let n=ko(e),i=To(t,{required:o});if(n==="custom")return{provider:n,...i?{model:i}:{},baseUrl:Oo(r)};if(Ne(r))throw new Error("baseUrl is only supported for the custom provider");return{...n?{provider:n}:{},...i?{model:i}:{}}}var Io,kr=a(()=>{Io=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"])});import Tr from"node:fs";import No from"node:path";function $o(){return No.join(Oe(),"model.json")}function J(e){return String(e||"").trim()||void 0}function Ro(e={}){let t=J(e.backend)?.toLowerCase()||"auto",r=Ir({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),o=J(e.apiKeyEnv),n=Number.parseInt(String(e.contextLength||""),10),i=J(e.reasoningEffort),s=J(e.computeHost||e.remoteHost),d=J(e.computeUser||e.remoteUser),c=J(e.computePath||e.remotePath);if(!Co.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(o&&!/^[A-Z][A-Z0-9_]*$/.test(o))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,...o?{apiKeyEnv:o}:{},...Number.isFinite(n)&&n>0?{contextLength:n}:{},...i?{reasoningEffort:i}:{},...s?{computeHost:s}:{},...d?{computeUser:d}:{},...c?{computePath:c}:{}}}function Or(){let e=$o();if(!Tr.existsSync(e))return null;try{return Ro(JSON.parse(Tr.readFileSync(e,"utf8")))}catch{return null}}var Co,Nr=a(()=>{vr();kr();Co=new Set(["auto","standalone","hermes","remote","arch"])});import{Interface as _o,getAddress as Lo}from"ethers";function ft(e,t){try{return Lo(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function Po(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 pt(e){return e==null?null:Number.parseInt(String(e),16)}function Fo(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let o=kt(e,r);return o||Bo[Number(e)]||null}function Mo(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!Do.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 qo(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function jo(e){if(e?.error)throw qo(e.error);return e?.result}function Uo(e,t,r){return`${e}
|
|
3
|
+
${t}
|
|
4
|
+
${JSON.stringify(r??[])}`}async function zo(e,t,r){return Ee(e,{method:"POST",body:t,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function mt(e,t,r=[],o={}){let n=String(t||""),i=Mo(n),s=Fo(e,o);if(!s)throw new Error(`No RPC URL for chainId ${e} (set env from chain registry rpcEnv or pass rpcUrl)`);if(i==="eth_chainid"&&o.cacheChainId!==!1){let m=Cr.get(s);if(m!=null)return m}let c=o.dedupe!==!1&&!o.signal?Uo(s,n,r):null;if(c&&ie.has(c))return ie.get(c);let p=(async()=>{let m=await zo(s,{jsonrpc:"2.0",id:1,method:t,params:r},o),u=jo(m);return i==="eth_chainid"&&typeof u=="string"&&Cr.set(s,u),u})();return c&&(ie.set(c,p),p.finally(()=>{ie.get(c)===p&&ie.delete(c)}).catch(()=>{})),p}async function $r(e={},t={}){let r=Number(e.chainId??t.chainId??1),o=Po(e.txHash||e.hash||e.transactionHash),n=await mt(r,"eth_getTransactionReceipt",[o],t);if(!n)return{ok:!1,chainId:r,txHash:o,status:"pending",receipt:null,reason:"receipt pending"};let i=pt(n.status),s=i===1,d=i===1?"success":i===0?"reverted":"unknown",c=s?null:d==="reverted"?"transaction reverted":"unknown receipt status",p=e.expectedTo?ft(e.expectedTo,"expectedTo"):null,m=n.to?ft(n.to,"receipt.to"):null;return p&&m!==p&&(s=!1,c=`to mismatch: expected ${p}, got ${m||"null"}`),{ok:s,chainId:r,txHash:o,status:d,reason:c,statusCode:i,to:m,from:n.from?ft(n.from,"receipt.from"):null,blockNumber:pt(n.blockNumber),transactionIndex:pt(n.transactionIndex),logs:Array.isArray(n.logs)?n.logs:[],receipt:n}}var kf,Bo,Do,ie,Cr,Rr=a(()=>{xe();_e();kf=new _o(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);Bo={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"};Do=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;ie=new Map,Cr=new Map});import{wordlists as Ho}from"ethers";function Vo(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return Jo.has(t.length)&&t.every(r=>Ho.en.getWordIndex(r)>=0)}function Qo(e){let t=_r(e);return Xo.has(t)||Yo.test(t)}function _r(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function Zo(e){let t=_r(e);return[...Wo].some(r=>t.includes(r))}function ei(e,t,r){if(typeof t=="string"){if(Go.some(o=>o.test(t))||Vo(t))throw new se(r);if(Ko.test(t)&&!Qo(e))throw new se(r)}}function ht(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return ei(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((n,i)=>ht(n,`${t}[${i}]`,r));if(typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`action receipt: JSON-like value required at ${t}`);let o={};for(let n of Object.keys(e).sort()){let i=`${t}.${n}`;if(Zo(n))throw new se(i);e[n]!==void 0&&(o[n]=ht(e[n],i,n))}return o}function Lr(e){return ht(e)}var Wo,Go,Jo,Ko,Yo,Xo,se,wt=a(()=>{Wo=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),Go=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],Jo=new Set([12,15,18,21,24]);Ko=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,Yo=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,Xo=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);se=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}}});var Cf,$f,Rf,Pr=a(()=>{Cf=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),$f=Object.freeze(["read","simulate"]),Rf=1440*60});function gt(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return ti.test(t)||ri.includes(r)}function ni(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>Fr.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function Dr(e){let t;try{t=JSON.stringify(e)}catch(n){throw new R("$",`unserializable-payload: ${String(n?.message||n)}`)}if(t===void 0)return"null";let r=ni(t);for(let{rule:n,re:i}of Br)if(i.test(r))throw new R("$<serialized>",n);if(/(?:^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{64}(?![0-9a-fA-F])/.test(r))throw new R("$<serialized>","raw-32-byte-hex-embedded");return JSON.parse(t,(n,i)=>{if(n&>(n))throw new R(`$<serialized>.${n}`,"forbidden-key-name");return i}),t}function q(e,t="$",r=new Set,o=""){if(e==null)return e;if(typeof e=="string"){let n=Fr.includes(String(o).toLowerCase().replace(/[_-]/g,""));for(let{rule:i,re:s}of Br)if(!(n&&i.startsWith("raw-32-byte-hex"))&&s.test(e))throw new R(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[n,i]of e.entries()){if(typeof n=="string"&>(n))throw new R(`${t}[${JSON.stringify(n)}]`,"forbidden-key-name");q(n,`${t}[key]`,r),q(i,`${t}[${String(n)}]`,r)}return e}if(e instanceof Set){let n=0;for(let i of e.values())q(i,`${t}[${n++}]`,r);return e}if(Array.isArray(e))return e.forEach((n,i)=>q(n,`${t}[${i}]`,r)),e;for(let[n,i]of Object.entries(e)){if(gt(n))throw new R(`${t}.${n}`,"forbidden-key-name");q(i,`${t}.${n}`,r,n)}return e}var R,ti,ri,Br,Fr,Mr=a(()=>{Pr();R=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}},ti=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,ri=Object.freeze(["privkey","wif","xprv","seed"]);Br=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}]),Fr=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"])});function yt(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 bt(e,t="control input"){try{q(e,t),Dr(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function ae(e,{required:t=[],optional:r=[]}={},o="object"){yt(e,o);let n=new Set([...t,...r]),i=Object.keys(e).filter(s=>!n.has(s));if(i.length)throw new TypeError(`${o} has unknown field ${i[0]}`);for(let s of t)if(!Object.hasOwn(e,s))throw new TypeError(`${o}.${s} is required`);return e}function Et(e,t,r=200,{lower:o=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||oi.test(e))throw new TypeError(`${t} must be non-empty control-free text up to ${r} characters`);let n=e.trim();return o?n.toLowerCase():n}function ce(e,t,r=80){let o=Et(e,t,r,{lower:!0});if(!/^[a-z0-9][a-z0-9._:-]*$/.test(o))throw new TypeError(`${t} must be a lowercase identifier`);return o}function Ce(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 k(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))k(t);Object.freeze(e)}return e}var oi,xt=a(()=>{wt();Mr();oi=/[\u0000-\u001f\u007f]/});function qr({family:e,chainId:t},r="chain"){let o=ce(e,`${r}.family`,40),n;if(o==="evm"){if(typeof t=="number")n=String(Ce(t,`${r}.chainId`,{positive:!0}));else if(n=Et(t,`${r}.chainId`,40),!/^[1-9][0-9]*$/.test(n))throw new TypeError(`${r}.chainId must be a positive decimal EVM chain id`)}else n=ce(t,`${r}.chainId`,80);return{family:o,chainId:n}}function ai(e,t="chain"){return ae(e,{required:["family","chainId"]},t),k(qr(e,t))}function jr(e,t="finality rule"){bt(e,t),yt(e,t);let r=e.rule;if(!ii.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let o=r==="confirmations"?"confirmations":r;ae(e,{required:["family","chainId","rule",o]},t);let n=qr(e,t);return r==="confirmations"?{...n,rule:r,confirmations:Ce(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...n,rule:r,[o]:ce(e[o],`${t}.${o}`,80)}}function St(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((o,n)=>jr(o,`finality policy rule ${n}`)),r=new Set;for(let o of t){let n=`${o.family}\0${o.chainId}`;if(r.has(n))throw new TypeError(`duplicate finality rule for ${o.family}:${o.chainId}`);r.add(n)}return k({policyVersion:1,rules:t})}function ci(e){if(ae(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return St(e.rules)}function Ur(e,t){let r=ai(t,"finality query"),n=ci(e).rules.find(i=>i.family===r.family&&i.chainId===r.chainId);return n?k({status:"KNOWN",...r,rule:n}):k({status:j.UNKNOWN,reason:"MISSING_FINALITY_RULE",...r,rule:null})}function ui(e,t){if(e==null)return null;bt(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(ae(e,{required:["status"],optional:[r]},"finality evidence"),!si.includes(e.status))throw new TypeError("finality evidence.status is unknown");let o={status:e.status};return e[r]!=null&&(o[r]=t.rule==="confirmations"?Ce(e.confirmations,"finality evidence.confirmations",{positive:!0}):ce(e[r],`finality evidence.${r}`,80)),o}function zr(e,t){if(!e||e.status===j.UNKNOWN||e.rule==null)return k({status:j.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=jr(e.rule??e,"resolved finality rule"),o=ui(t,r);if(o==null)return k({status:j.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(o.status!=="LIVE")return k({status:j.UNKNOWN,final:!1,reason:`${o.status}_EVIDENCE`});let n=!1;return r.rule==="confirmations"?n=o.confirmations!=null&&o.confirmations>=r.confirmations:r.rule==="finalizedTag"?n=o.finalizedTag===r.finalizedTag:n=o.checkpoint===r.checkpoint,k({status:n?j.FINAL:j.INCLUDED,final:n,reason:n?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:r})}var ii,j,si,Hr=a(()=>{xt();ii=Object.freeze(["confirmations","finalizedTag","checkpoint"]),j=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),si=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"])});function di(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 Wr(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function vt(e){return e==null?e:Array.isArray(e)?e.map(vt):ue(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,vt(e[t])])):String(e)}function fi(e,t,r,o){let n=E(e.finalityEvidence,o?.finality,e.evidence),i=E(e.finalityPolicy,e.policy);try{return i==null&&ue(e.finalityRule)&&(i=St([{family:t,chainId:r,...e.finalityRule}])),i==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:zr(Ur(i,{family:t,chainId:r}),n)}catch{return{status:"UNKNOWN",final:!1,reason:"MALFORMED_FINALITY_EVIDENCE"}}}function A(e,t,r){r!=null&&(e[t]=r)}function pi(e){return e==null?null:String(e).trim().toLowerCase()}function At(...e){let t=e.map(pi).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function Gr(e={}){if(!ue(e))throw new TypeError("verified receipt: input object required");let t=Lr(e),r=E(t.actionReceipt,t.receipt),o=ue(r)?r:t,n=E(t.observation,t.chainObservation,t.observedReceipt),i=ue(n),s=E(t.txHash,o.txHash,o.transactionHash,n?.txHash,n?.transactionHash),d=E(t.family,o.family,o.chain?.family,n?.family,n?.chain?.family),c=E(t.chainId,o.chainId,o.chain?.chainId,n?.chainId,n?.chain?.chainId),p=!At(t.txHash,o.txHash,o.transactionHash,n?.txHash,n?.transactionHash)||!At(t.family,o.family,o.chain?.family,n?.family,n?.chain?.family)||!At(t.chainId,o.chainId,o.chain?.chainId,n?.chainId,n?.chain?.chainId),m=fi(t,d,c,i&&!p?n:null),u=di(E(n?.receiptStatus,n?.executionStatus,n?.status)),f=E(t.reconciliationStatus,t.reconciliation?.status,n?.reconciliationStatus),l=E(t.finalityState,t.finalityEvidence?.status,t.evidence?.status,n?.finalityState),g="UNKNOWN";Wr(f)||!p&&(i&&u==="FAIL"||Wr(l))?g="FAIL":!p&&s&&i&&u==="SUCCESS"&&["INCLUDED","FINAL"].includes(m.status)&&(g="SUCCESS");let h={verifiedReceiptVersion:li,status:g};p&&(h.reason="REFERENCE_MISMATCH"),A(h,"txHash",s),A(h,"chain",E(t.chain,o.chain,n?.chain)),A(h,"family",d),A(h,"chainId",c),A(h,"block",E(n?.block,t.block)),A(h,"blockState",E(n?.blockState,n?.inclusionState)),h.finalityState=m.status,A(h,"confirmations",E(n?.confirmations,n?.finality?.confirmations,t.finalityEvidence?.confirmations,t.evidence?.confirmations)),A(h,"observedAt",E(n?.observedAt,t.observedAt)),A(h,"route",E(t.route,o.route)),A(h,"prepareHash",E(t.prepareHash,o.prepareHash)),A(h,"policyOutcome",E(t.policyOutcome,o.policyOutcome,o.policyChecks));let y=E(t.balanceChanges,n?.balanceChanges,n?.balances,o.balanceChanges,o.balances);return y!=null&&(h.balanceChanges=vt(y)),A(h,"createdAt",E(t.createdAt,o.createdAt)),A(h,"submittedAt",E(t.submittedAt,o.submittedAt)),A(h,"finalizedAt",E(t.finalizedAt,n?.finalizedAt)),A(h,"timestamps",E(t.timestamps,o.timestamps,n?.timestamps)),k(h)}var li,Xf,E,ue,Jr=a(()=>{wt();Hr();xt();li=1,Xf=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),E=(...e)=>e.find(t=>t!=null),ue=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype});var Kr={};pe(Kr,{observeEvmReceipt:()=>Vr,verifyEvmReceipt:()=>wi});function hi(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 Vr({txHash:e,chainId:t,rpcUrl:r},o={}){let n=String(e||"").trim().toLowerCase();if(!mi.test(n))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=o.transactionReceipt||$r,d=o.rpcCall||mt,c={...o.rpcOptions||{},...r?{rpcUrl:r}:{}},p;try{p=await s({txHash:n,chainId:i},c)}catch(l){return{observation:null,reason:`RPC_UNAVAILABLE: ${l.message}`}}if(!p||p.receipt==null)return{observation:null,reason:p?.reason||"receipt pending"};let m=null,u=p.blockNumber;if(Number.isSafeInteger(u))try{let l=hi(await d(i,"eth_blockNumber",[],c));l!=null&&l>=u&&(m=l-u+1)}catch{}let f={txHash:n,family:"evm",chainId:String(i),receiptStatus:p.status==="success"?"SUCCESS":p.status==="reverted"?"FAIL":"UNKNOWN",block:u==null?void 0:String(u),observedAt:new Date().toISOString(),finality:{status:"LIVE",...m==null?{}:{confirmations:m}}};return m!=null&&(f.confirmations=m),{observation:f,reason:null}}async function wi({txHash:e,chainId:t,confirmations:r=1,rpcUrl:o},n={}){let{observation:i,reason:s}=await Vr({txHash:e,chainId:t,rpcUrl:o},n),d=Gr({txHash:String(e).trim().toLowerCase(),family:"evm",chainId:String(Number(t)),finalityRule:{rule:"confirmations",confirmations:r},...i?{observation:i}:{}});return{receipt:d,observed:!!i,final:d.finalityState==="FINAL",requiredConfirmations:r,reason:s}}var mi,Yr=a(()=>{Rr();Jr();mi=/^0x[0-9a-f]{64}$/});var Xr={};pe(Xr,{classifyReceipt:()=>K,configDir:()=>Ei,firstHourReport:()=>le,probeReceiptModule:()=>Si,probeReviewModule:()=>xi,venueMap:()=>$e});import gi from"node:path";import{homedir as yi}from"node:os";function Ei(e=process.env){return e.ORACLE_CONFIG_DIR||gi.join(yi(),".config","oracle")}function $e({env:e=process.env,vault:t=null}={}){let r=t||oe(),o=[];for(let[n,i]of Object.entries(me)){let s=(i.rpcEnv||[]).some(c=>String(e[c]||"").trim()),d="prepare";i.evm?s&&(d="live"):d="unavailable",o.push({key:n,chainId:i.chainId,name:i.name,family:"evm",status:d,execute:!!(r.vaultExists&&r.armed&&!r.disarmed),note:s?"rpc configured":"public read/prepare; set RPC for live reads"})}return o.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"}),o}function le({env:e=process.env,model:t=Or(),vault:r=oe(),signerReachable:o=!1,quote:n=null,reviewAvailable:i=!1,receiptAvailable:s=!1}={}){let d=[],c=(l,g,h,y=null)=>d.push({id:l,status:g,detail:h,fix:y}),p=(()=>{let[l,g]=process.versions.node.split(".").map(Number);return l>20||l===20&&g>=19})();c("node",p?"ok":"fail",`node ${process.versions.node}`,p?null:"install node >= 20.19"),t?t.backend==="hermes"?c("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):c("model","ok",`${t.backend||"auto"} ${t.provider||""} ${t.model||""}`.trim()):c("model","fail","no model.json","oracle setup model"),r.vaultExists?r.disarmed?c("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):c("vault",r.armed?"ok":"warn",r.armed?"present, armed":"present, not armed"):c("vault","fail","no local vault","oracle sign init");let m=e.ORACLE_SIGNER_HOST||"127.0.0.1";if(bi.has(m)?c("signer",o?"ok":"warn",o?`loopback ${m}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",o?null:"oracle signer"):c("signer","fail",`signer host ${m} is not loopback`,"unset ORACLE_SIGNER_HOST"),!n)c("quote","warn","quote not probed",null);else if(n.ok){let l=String(n.detail||"net quote returned");c("quote","ok",l.length>140?`${l.slice(0,140)}\u2026`:l)}else c("quote","warn",n.detail||"quote unavailable","check network / oracle data serve");c("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)"),c("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 u=d.some(l=>l.status==="fail"),f=d.filter(l=>l.status==="ok").length;return{ok:!u,checks:d,firstRunScore:{ok:f,total:d.length,label:`${f}/${d.length} first-run hops green`},venues:$e({env:e,vault:r})}}async function xi(){try{return typeof(await Promise.resolve().then(()=>(ct(),ur))).createSignTimeReview=="function"}catch{return!1}}async function Si(){try{let e=await Promise.resolve().then(()=>(Yr(),Kr));return typeof e.observeReceipt=="function"||typeof e.default=="function"||Object.values(e).some(t=>typeof t=="function")}catch{return!1}}var bi,Re=a(()=>{_e();dt();Nr();Le();bi=new Set(["127.0.0.1","::1","localhost"])});var Zr={};pe(Zr,{classifyReceipt:()=>K,default:()=>Ii,detailText:()=>Qr,firstHourReport:()=>le,probeQuote:()=>vi,probeSigner:()=>Ai,symbol:()=>de,vaultStatus:()=>oe});async function Ai(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 de(e){let t=String(e??"?").replace(/[^\w.$-]/g,"");return t.length>12?`${t.slice(0,12)}...`:t||"?"}function Qr(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 vi(){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:`${de(r.chainId)} ${de(r.baseToken?.symbol)}/${de(r.quoteToken?.symbol)} $${de(r.priceUsd)}`}}catch(e){return{ok:!1,detail:Qr(e instanceof Error?e.message:"quote failed")}}}var Ii,en=a(()=>{Re();dt();Ii={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=$e();if(t)return process.stdout.write(`${JSON.stringify({venues:r},null,2)}
|
|
5
|
+
`),0;for(let o of r)process.stdout.write(`${o.status.padEnd(12)} ${o.key.padEnd(16)} ${o.name} exec=${o.execute?"local":"no"}
|
|
6
|
+
`);return 0}}});Re();var tn=[{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."}],lp={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"),o=t.includes("--check"),n=null;if(o){let{probeSigner:s,probeQuote:d}=await Promise.resolve().then(()=>(en(),Zr)),{probeReviewModule:c,probeReceiptModule:p}=await Promise.resolve().then(()=>(Re(),Xr)),[m,u,f,l]=await Promise.all([s(process.env),d(),c(),p()]);n=le({signerReachable:m,quote:u,reviewAvailable:f,receiptAvailable:l})}if(r)return process.stdout.write(`${JSON.stringify({steps:tn,...n?{readiness:n}:{}},null,2)}
|
|
7
|
+
`),n&&!n.ok?1:0;let i=["","Oracle first run \u2014 what actually happens to your money",""];for(let s of tn)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(""),n){i.push("Readiness:");for(let s of n.checks){let d=s.status==="ok"?"ok ":s.status==="warn"?"warn":"FAIL";i.push(` ${d} ${s.id.padEnd(9)} ${s.detail}${s.fix?` -> ${s.fix}`:""}`)}i.push("")}return process.stdout.write(i.join(`
|
|
8
|
+
`)),n&&!n.ok?1:0}};export{lp as default};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var m=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(o){throw t=[o],o}};var k,st,M=m(()=>{k={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}},st=new Map(Object.values(k).map(e=>[e.chainId,e]))});var U=m(()=>{});var Tr,L=m(()=>{U();Tr=64*1024});var X=m(()=>{});import x from"node:fs";import We from"node:os";import f from"node:path";import{fileURLToPath as He}from"node:url";function te(){return process.env.ORACLE_FAKE_HOME||We.homedir()}function Ge(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function S(){return Ge()?process.env.ORACLE_CONFIG_DIR||f.join(te(),".config","oracle"):f.join(te(),".config","oracle")}function Ve(){return f.join(S(),"desk.json")}function Ke(){return f.join(S(),"env")}function d({force:e=!1}={}){if(d._done&&!e)return d._result||null;d._done=!0;let r={},t=(i,n)=>{if(n==null)return;let s=String(n).trim();s&&(process.env[i]!=null&&String(process.env[i]).trim()!==""||(process.env[i]=s,r[i]=s))};try{let i=Ke();if(x.existsSync(i))for(let n of x.readFileSync(i,"utf8").split(/\r?\n/)){let s=n.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let a=s[2];(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),t(s[1],a)}}catch{}try{let i=Ve();if(x.existsSync(i)){let n=JSON.parse(x.readFileSync(i,"utf8"));n&&typeof n=="object"&&(t("ORACLE_DESK_URL",n.deskUrl||n.dataUrl||n.url),t("ORACLE_DATA_URL",n.dataUrl||n.deskUrl||n.url),t("ORACLE_API_URL",n.apiUrl||n.dataUrl||n.deskUrl),t("ORACLE_PUBLIC_URL",n.publicUrl||n.deskUrl||n.dataUrl),t("ORACLE_EXEC_URL",n.execUrl),t("MAD_DESK_URL",n.deskUrl||n.dataUrl))}}catch{}let o=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return o&&(t("ORACLE_DESK_URL",o),t("ORACLE_DATA_URL",o),t("ORACLE_API_URL",o),t("ORACLE_PUBLIC_URL",o),t("MAD_DESK_URL",o)),d._result=Object.keys(r).length?r:null,d._result}var Je,Zs,re=m(()=>{Je=f.dirname(He(import.meta.url)),Zs=f.resolve(Je,"../..");try{d()}catch{}});M();import B from"node:fs";import ee from"node:path";import{homedir as Ue}from"node:os";function T(e){let r=e?.transactionHash||e?.hash||e?.txid||null;return r?{happened:!0,hash:String(r),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}import u from"node:path";import Me from"node:os";import{createHash as je,randomBytes as es}from"node:crypto";import{Interface as P,keccak256 as rs}from"ethers";import{Transaction as os}from"@scure/btc-signer";import{ed25519 as as}from"@noble/curves/ed25519.js";import{base58 as Lo}from"@scure/base";import{Interface as G}from"ethers";import{Interface as pe,MaxUint256 as zt,isAddress as Wt,keccak256 as Ht,toUtf8Bytes as Jt}from"ethers";import{Interface as de,isAddress as vt}from"ethers";import{isAddress as yt}from"ethers";var Ot=new de(["function approve(address spender,uint256 amount) returns (bool)"]);import{Interface as fe,isAddress as Lt}from"ethers";var Pt=new fe(["function approve(address spender,uint256 amount) returns (bool)"]),Bt=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"});var Qt=new pe(["function approve(address spender,uint256 amount) returns (bool)"]);var er=300*1e3,tr=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})();import{Address as ar,NETWORK as sr,OutScript as cr,RawTx as ur,SigHash as lr,TEST_NETWORK as dr,Transaction as fr}from"@scure/btc-signer";import{createHash as me}from"node:crypto";import{base58 as hr}from"@scure/base";import{getCompiledTransactionMessageDecoder as yr}from"@solana/transaction-messages";var j=e=>me("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),Er=new Map([[j("route"),{name:"route",prefixBytes:0}],[j("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]]);L();var Dr=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"}),qr=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 Ur="0x"+"00".repeat(32);var he=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Gr=Object.freeze(he.map(e=>e[0]));import{TypedDataEncoder as In,getAddress as kn}from"ethers";import{TypedDataEncoder as Qr,getAddress as Zr,isAddress as en}from"ethers";var ye=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Ee=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"}]});L();import{TypedDataEncoder as fn,getAddress as pn,isAddress as mn}from"ethers";var nn=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"});var be=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),xn=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"});var xe=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"}]}),Sn=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]});var Cn=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"]);var Te=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]);var Jn=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});var Oe=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"}}),Gn=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Vn=new G(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Kn=new G(["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"]),Yn=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"}});var Ce=Object.freeze([...Te]),Xn=Object.freeze({...Oe});import{ed25519 as mo}from"@noble/curves/ed25519.js";import{base58 as ho}from"@scure/base";import{RawTx as yo,SigHash as Eo,Transaction as bo}from"@scure/btc-signer";import{Transaction as So,keccak256 as Ao,verifyTypedData as vo}from"ethers";import{encode as eo}from"@msgpack/msgpack";import{keccak256 as ro,verifyTypedData as no}from"ethers";var oo=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),io=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]});var zo=Object.freeze({N:1<<17,r:8,p:1}),Wo=256*1024*1024,Ho=16*1024;var Go=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 _}from"node:os";import{join as $}from"node:path";var K=process.env.ORACLE_PUBLIC_DESKTOP==="1",Re=K?process.env.ORACLE_CONFIG_DIR||$(_(),".config","oracle"):$(_(),".config","oracle"),Xo=K?Re:$(_(),".config","mad-desk");var ri="0".repeat(64),ni=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"});var oi=Promise.resolve();X();import{readFileSync as wi,readdirSync as hi,existsSync as _e}from"node:fs";import{dirname as $e,join as h}from"node:path";import{fileURLToPath as Pe}from"node:url";var g=$e(Pe(import.meta.url));function Be(){let e=[h(g,"descriptors"),h(g,"clear-sign","descriptors"),h(g,"..","clear-sign","descriptors"),h(g,"..","..","clear-sign","descriptors"),h(g,"..","..","..","clear-sign","descriptors")];for(let r of e)if(_e(r))return r;return e[0]}var bi=Be();var xi=(1n<<256n)-1n;import{Wallet as Ni}from"ethers";import{base58 as Ri}from"@scure/base";import{ed25519 as $i}from"@noble/curves/ed25519.js";import{NETWORK as Bi,TEST_NETWORK as Fi,WIF as Di,p2wpkh as qi}from"@scure/btc-signer";import{pubECDSA as ji}from"@scure/btc-signer/utils.js";var Wi=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),Hi=Object.freeze(["binance","bybit","okx","coinbase"]),Ji=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),Gi=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),Vi=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Ki=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Yi=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Xi=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),Qi=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),Zi=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),ea=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"});var qe=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}"]})}),Q=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"});var la=256*1024;var $s=new P(["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"]),Ps=new P(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),Bs=new P(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"]);function Z(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||u.join(process.env.XDG_STATE_HOME||u.join(Me.homedir(),".local","state"),"oracle"),t=je("sha256").update(u.resolve(e)).digest("hex").slice(0,16);return{vault:u.join(e,"vault.json"),policy:u.join(e,"signer-policy.json"),policyKey:u.join(e,"policy-integrity-key"),policyAnchor:u.join(r,`signer-policy-${t}.high-water`),ledger:u.join(e,"signer-ledger.json"),ledgerAnchor:u.join(r,`signer-ledger-${t}.high-water`),cexOrders:u.join(e,"cex-orders.json"),cexOrdersAnchor:u.join(r,`cex-orders-${t}.high-water`),token:u.join(e,"signer-token"),lock:u.join(r,`signer-${t}.lock`)}}function ze(){return process.env.ORACLE_CONFIG_DIR||ee.join(Ue(),".config","oracle")}function b(){let e=Z(ee.join(ze(),"signer")),r=B.existsSync(e.vault),t=B.existsSync(e.lock),o=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:B.existsSync(e.policy),armed:r&&!t,disarmed:t,capabilities:{swap:o,bridge:o},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var Gs=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_ack",description:"Execute one pending artifact through the armed local signer (same path as Telegram Allow). Fails if the signer is not running or disarmed. Never holds keys.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},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}}}]);re();import oe from"node:fs";import et from"node:path";var Ye=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"]);function A(e){return String(e||"").trim()||void 0}function Xe(e,{required:r=!1}={}){let t=A(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!Ye.has(t))throw new Error(`unsupported provider: ${t}`);return t}function Qe(e,{required:r=!1}={}){let t=A(e);if(!t){if(r)throw new Error("model is required");return}if(t.includes("..")||t.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(t))throw new Error("invalid model id");return t}function Ze(e){let r=A(e);if(!r||r.length>2048)throw new Error("invalid custom base URL");let t;try{t=new URL(r)}catch{throw new Error("invalid custom base URL")}let o=t.hostname.toLowerCase().replace(/^\[|\]$/g,""),i=o==="localhost"||o==="127.0.0.1"||o==="::1";if(t.protocol!=="https:"&&!(t.protocol==="http:"&&i)||t.username||t.password||t.search||t.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return t.toString().replace(/\/+$/,"")}function ne({provider:e,model:r,baseUrl:t}={},{requireModel:o=!1}={}){let i=Xe(e),n=Qe(r,{required:o});if(i==="custom")return{provider:i,...n?{model:n}:{},baseUrl:Ze(t)};if(A(t))throw new Error("baseUrl is only supported for the custom provider");return{...i?{provider:i}:{},...n?{model:n}:{}}}var tt=new Set(["auto","standalone","hermes","remote","arch"]);function rt(){return et.join(S(),"model.json")}function p(e){return String(e||"").trim()||void 0}function nt(e={}){let r=p(e.backend)?.toLowerCase()||"auto",t=ne({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),o=p(e.apiKeyEnv),i=Number.parseInt(String(e.contextLength||""),10),n=p(e.reasoningEffort),s=p(e.computeHost||e.remoteHost),a=p(e.computeUser||e.remoteUser),c=p(e.computePath||e.remotePath);if(!tt.has(r))throw new Error(`unsupported backend: ${r}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(r))throw new Error("remote compute backends are disabled in the public desktop");if(o&&!/^[A-Z][A-Z0-9_]*$/.test(o))throw new Error("api key env must be an uppercase environment variable name");if(r==="remote"&&!s)throw new Error("remote backend requires computeHost");return{backend:r,...t,...o?{apiKeyEnv:o}:{},...Number.isFinite(i)&&i>0?{contextLength:i}:{},...n?{reasoningEffort:n}:{},...s?{computeHost:s}:{},...a?{computeUser:a}:{},...c?{computePath:c}:{}}}function ie(){let e=rt();if(!oe.existsSync(e))return null;try{return nt(JSON.parse(oe.readFileSync(e,"utf8")))}catch{return null}}var ot=new Set(["127.0.0.1","::1","localhost"]);function F({env:e=process.env,vault:r=null}={}){let t=r||b(),o=[];for(let[i,n]of Object.entries(k)){let s=(n.rpcEnv||[]).some(c=>String(e[c]||"").trim()),a="prepare";n.evm?s&&(a="live"):a="unavailable",o.push({key:i,chainId:n.chainId,name:n.name,family:"evm",status:a,execute:!!(t.vaultExists&&t.armed&&!t.disarmed),note:s?"rpc configured":"public read/prepare; set RPC for live reads"})}return o.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"}),o}function it({env:e=process.env,model:r=ie(),vault:t=b(),signerReachable:o=!1,quote:i=null,reviewAvailable:n=!1,receiptAvailable:s=!1}={}){let a=[],c=(l,I,se,ce=null)=>a.push({id:l,status:I,detail:se,fix:ce}),D=(()=>{let[l,I]=process.versions.node.split(".").map(Number);return l>20||l===20&&I>=19})();c("node",D?"ok":"fail",`node ${process.versions.node}`,D?null:"install node >= 20.19"),r?r.backend==="hermes"?c("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):c("model","ok",`${r.backend||"auto"} ${r.provider||""} ${r.model||""}`.trim()):c("model","fail","no model.json","oracle setup model"),t.vaultExists?t.disarmed?c("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):c("vault",t.armed?"ok":"warn",t.armed?"present, armed":"present, not armed"):c("vault","fail","no local vault","oracle sign init");let v=e.ORACLE_SIGNER_HOST||"127.0.0.1";if(ot.has(v)?c("signer",o?"ok":"warn",o?`loopback ${v}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",o?null:"oracle signer"):c("signer","fail",`signer host ${v} is not loopback`,"unset ORACLE_SIGNER_HOST"),!i)c("quote","warn","quote not probed",null);else if(i.ok){let l=String(i.detail||"net quote returned");c("quote","ok",l.length>140?`${l.slice(0,140)}\u2026`:l)}else c("quote","warn",i.detail||"quote unavailable","check network / oracle data serve");c("review",n?"ok":"fail",n?"sign-time review renders decoded action, policy hits, approval deltas":"sign-time review module missing from this build",n?null:"reinstall @oracle-agent/oracle (src/control/sign-time-review.mjs)"),c("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 ae=a.some(l=>l.status==="fail"),q=a.filter(l=>l.status==="ok").length;return{ok:!ae,checks:a,firstRunScore:{ok:q,total:a.length,label:`${q}/${a.length} first-run hops green`},venues:F({env:e,vault:t})}}async function wc(e=process.env){let r=e.ORACLE_SIGNER_HOST||"127.0.0.1",t=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${r}:${t}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}async function hc(){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 t=(await e.json())?.pairs?.[0];return!t?.chainId||!t?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${t.chainId} ${t.baseToken?.symbol}/${t.quoteToken?.symbol} $${t.priceUsd}`}}catch(e){return{ok:!1,detail:e instanceof Error?e.message:"quote failed"}}}var gc={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let r=e.argv.includes("--json"),t=F();if(r)return process.stdout.write(`${JSON.stringify({venues:t},null,2)}
|
|
1
|
+
var m=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(o){throw t=[o],o}};var T,ut,j=m(()=>{T={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}},ut=new Map(Object.values(T).map(e=>[e.chainId,e]))});var z=m(()=>{});var Cr,R=m(()=>{z();Cr=64*1024});var Q=m(()=>{});import x from"node:fs";import He from"node:os";import f from"node:path";import{fileURLToPath as Je}from"node:url";function re(){return process.env.ORACLE_FAKE_HOME||He.homedir()}function Ve(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function S(){return Ve()?process.env.ORACLE_CONFIG_DIR||f.join(re(),".config","oracle"):f.join(re(),".config","oracle")}function Ke(){return f.join(S(),"desk.json")}function Ye(){return f.join(S(),"env")}function d({force:e=!1}={}){if(d._done&&!e)return d._result||null;d._done=!0;let r={},t=(i,n)=>{if(n==null)return;let s=String(n).trim();s&&(process.env[i]!=null&&String(process.env[i]).trim()!==""||(process.env[i]=s,r[i]=s))};try{let i=Ye();if(x.existsSync(i))for(let n of x.readFileSync(i,"utf8").split(/\r?\n/)){let s=n.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let a=s[2];(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),t(s[1],a)}}catch{}try{let i=Ke();if(x.existsSync(i)){let n=JSON.parse(x.readFileSync(i,"utf8"));n&&typeof n=="object"&&(t("ORACLE_DESK_URL",n.deskUrl||n.dataUrl||n.url),t("ORACLE_DATA_URL",n.dataUrl||n.deskUrl||n.url),t("ORACLE_API_URL",n.apiUrl||n.dataUrl||n.deskUrl),t("ORACLE_PUBLIC_URL",n.publicUrl||n.deskUrl||n.dataUrl),t("ORACLE_EXEC_URL",n.execUrl),t("MAD_DESK_URL",n.deskUrl||n.dataUrl))}}catch{}let o=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return o&&(t("ORACLE_DESK_URL",o),t("ORACLE_DATA_URL",o),t("ORACLE_API_URL",o),t("ORACLE_PUBLIC_URL",o),t("MAD_DESK_URL",o)),d._result=Object.keys(r).length?r:null,d._result}var Ge,tc,ne=m(()=>{Ge=f.dirname(Je(import.meta.url)),tc=f.resolve(Ge,"../..");try{d()}catch{}});j();import F from"node:fs";import te from"node:path";import{homedir as ze}from"node:os";function O(e){let r=e?.transactionHash||e?.hash||e?.txid||null;return r?{happened:!0,hash:String(r),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}import u from"node:path";import je from"node:os";import{createHash as Ue,randomBytes as rs}from"node:crypto";import{Interface as B,keccak256 as os}from"ethers";import{Transaction as as}from"@scure/btc-signer";import{ed25519 as cs}from"@noble/curves/ed25519.js";import{base58 as _o}from"@scure/base";import{Interface as V}from"ethers";import{Interface as me,MaxUint256 as Ht,isAddress as Jt,keccak256 as Gt,toUtf8Bytes as Vt}from"ethers";import{Interface as fe,isAddress as kt}from"ethers";import{isAddress as bt}from"ethers";var Nt=new fe(["function approve(address spender,uint256 amount) returns (bool)"]);import{Interface as pe,isAddress as _t}from"ethers";var Ft=new pe(["function approve(address spender,uint256 amount) returns (bool)"]),Dt=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"});var er=new me(["function approve(address spender,uint256 amount) returns (bool)"]);var rr=300*1e3,nr=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})();import{Address as cr,NETWORK as ur,OutScript as lr,RawTx as dr,SigHash as fr,TEST_NETWORK as pr,Transaction as mr}from"@scure/btc-signer";import{createHash as we}from"node:crypto";import{base58 as yr}from"@scure/base";import{getCompiledTransactionMessageDecoder as br}from"@solana/transaction-messages";var U=e=>we("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),xr=new Map([[U("route"),{name:"route",prefixBytes:0}],[U("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]]);R();var Mr=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"}),jr=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 Wr="0x"+"00".repeat(32);var ge=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Kr=Object.freeze(ge.map(e=>e[0]));import{TypedDataEncoder as Tn,getAddress as On}from"ethers";import{TypedDataEncoder as en,getAddress as tn,isAddress as rn}from"ethers";var Ee=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),be=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"}]});R();import{TypedDataEncoder as mn,getAddress as wn,isAddress as hn}from"ethers";var an=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"});var xe=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),An=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"});var Se=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"}]}),vn=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]});var Ln=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"]);var Oe=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]);var Vn=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});var Ce=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"}}),Kn=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Yn=new V(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Xn=new V(["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"]),Qn=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"}});var Ne=Object.freeze([...Oe]),Zn=Object.freeze({...Ce});import{ed25519 as ho}from"@noble/curves/ed25519.js";import{base58 as yo}from"@scure/base";import{RawTx as bo,SigHash as xo,Transaction as So}from"@scure/btc-signer";import{Transaction as vo,keccak256 as Io,verifyTypedData as ko}from"ethers";import{encode as ro}from"@msgpack/msgpack";import{keccak256 as oo,verifyTypedData as io}from"ethers";var ao=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),so=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]});var Ho=Object.freeze({N:1<<17,r:8,p:1}),Jo=256*1024*1024,Go=16*1024;var Ko=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 $}from"node:os";import{join as P}from"node:path";var Y=process.env.ORACLE_PUBLIC_DESKTOP==="1",_e=Y?process.env.ORACLE_CONFIG_DIR||P($(),".config","oracle"):P($(),".config","oracle"),Zo=Y?_e:P($(),".config","mad-desk");var oi="0".repeat(64),ii=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"});var ai=Promise.resolve();Q();import{readFileSync as gi,readdirSync as yi,existsSync as $e}from"node:fs";import{dirname as Pe,join as h}from"node:path";import{fileURLToPath as Be}from"node:url";var g=Pe(Be(import.meta.url));function Fe(){let e=[h(g,"descriptors"),h(g,"clear-sign","descriptors"),h(g,"..","clear-sign","descriptors"),h(g,"..","..","clear-sign","descriptors"),h(g,"..","..","..","clear-sign","descriptors")];for(let r of e)if($e(r))return r;return e[0]}var Si=Fe();var Ai=(1n<<256n)-1n;import{Wallet as Ri}from"ethers";import{base58 as $i}from"@scure/base";import{ed25519 as Bi}from"@noble/curves/ed25519.js";import{NETWORK as Di,TEST_NETWORK as qi,WIF as Mi,p2wpkh as ji}from"@scure/btc-signer";import{pubECDSA as zi}from"@scure/btc-signer/utils.js";var Ji=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),Gi=Object.freeze(["binance","bybit","okx","coinbase"]),Vi=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),Ki=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),Yi=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Xi=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Qi=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Zi=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),ea=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),ta=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),ra=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"});var Me=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}"]})}),Z=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"});var fa=256*1024;var Bs=new B(["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"]),Fs=new B(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),Ds=new B(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"]);function ee(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||u.join(process.env.XDG_STATE_HOME||u.join(je.homedir(),".local","state"),"oracle"),t=Ue("sha256").update(u.resolve(e)).digest("hex").slice(0,16);return{vault:u.join(e,"vault.json"),policy:u.join(e,"signer-policy.json"),policyKey:u.join(e,"policy-integrity-key"),policyAnchor:u.join(r,`signer-policy-${t}.high-water`),ledger:u.join(e,"signer-ledger.json"),ledgerAnchor:u.join(r,`signer-ledger-${t}.high-water`),cexOrders:u.join(e,"cex-orders.json"),cexOrdersAnchor:u.join(r,`cex-orders-${t}.high-water`),token:u.join(e,"signer-token"),lock:u.join(r,`signer-${t}.lock`)}}function We(){return process.env.ORACLE_CONFIG_DIR||te.join(ze(),".config","oracle")}function b(){let e=ee(te.join(We(),"signer")),r=F.existsSync(e.vault),t=F.existsSync(e.lock),o=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:F.existsSync(e.policy),armed:r&&!t,disarmed:t,capabilities:{swap:o,bridge:o},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var Ks=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_ack",description:"Execute one pending artifact through the armed local signer (same path as Telegram Allow). Fails if the signer is not running or disarmed. Never holds keys.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},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}}}]);ne();import ie from"node:fs";import tt from"node:path";var Xe=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"]);function A(e){return String(e||"").trim()||void 0}function Qe(e,{required:r=!1}={}){let t=A(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!Xe.has(t))throw new Error(`unsupported provider: ${t}`);return t}function Ze(e,{required:r=!1}={}){let t=A(e);if(!t){if(r)throw new Error("model is required");return}if(t.includes("..")||t.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(t))throw new Error("invalid model id");return t}function et(e){let r=A(e);if(!r||r.length>2048)throw new Error("invalid custom base URL");let t;try{t=new URL(r)}catch{throw new Error("invalid custom base URL")}let o=t.hostname.toLowerCase().replace(/^\[|\]$/g,""),i=o==="localhost"||o==="127.0.0.1"||o==="::1";if(t.protocol!=="https:"&&!(t.protocol==="http:"&&i)||t.username||t.password||t.search||t.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return t.toString().replace(/\/+$/,"")}function oe({provider:e,model:r,baseUrl:t}={},{requireModel:o=!1}={}){let i=Qe(e),n=Ze(r,{required:o});if(i==="custom")return{provider:i,...n?{model:n}:{},baseUrl:et(t)};if(A(t))throw new Error("baseUrl is only supported for the custom provider");return{...i?{provider:i}:{},...n?{model:n}:{}}}var rt=new Set(["auto","standalone","hermes","remote","arch"]);function nt(){return tt.join(S(),"model.json")}function p(e){return String(e||"").trim()||void 0}function ot(e={}){let r=p(e.backend)?.toLowerCase()||"auto",t=oe({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),o=p(e.apiKeyEnv),i=Number.parseInt(String(e.contextLength||""),10),n=p(e.reasoningEffort),s=p(e.computeHost||e.remoteHost),a=p(e.computeUser||e.remoteUser),c=p(e.computePath||e.remotePath);if(!rt.has(r))throw new Error(`unsupported backend: ${r}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(r))throw new Error("remote compute backends are disabled in the public desktop");if(o&&!/^[A-Z][A-Z0-9_]*$/.test(o))throw new Error("api key env must be an uppercase environment variable name");if(r==="remote"&&!s)throw new Error("remote backend requires computeHost");return{backend:r,...t,...o?{apiKeyEnv:o}:{},...Number.isFinite(i)&&i>0?{contextLength:i}:{},...n?{reasoningEffort:n}:{},...s?{computeHost:s}:{},...a?{computeUser:a}:{},...c?{computePath:c}:{}}}function ae(){let e=nt();if(!ie.existsSync(e))return null;try{return ot(JSON.parse(ie.readFileSync(e,"utf8")))}catch{return null}}var it=new Set(["127.0.0.1","::1","localhost"]);function D({env:e=process.env,vault:r=null}={}){let t=r||b(),o=[];for(let[i,n]of Object.entries(T)){let s=(n.rpcEnv||[]).some(c=>String(e[c]||"").trim()),a="prepare";n.evm?s&&(a="live"):a="unavailable",o.push({key:i,chainId:n.chainId,name:n.name,family:"evm",status:a,execute:!!(t.vaultExists&&t.armed&&!t.disarmed),note:s?"rpc configured":"public read/prepare; set RPC for live reads"})}return o.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"}),o}function at({env:e=process.env,model:r=ae(),vault:t=b(),signerReachable:o=!1,quote:i=null,reviewAvailable:n=!1,receiptAvailable:s=!1}={}){let a=[],c=(l,k,ce,ue=null)=>a.push({id:l,status:k,detail:ce,fix:ue}),q=(()=>{let[l,k]=process.versions.node.split(".").map(Number);return l>20||l===20&&k>=19})();c("node",q?"ok":"fail",`node ${process.versions.node}`,q?null:"install node >= 20.19"),r?r.backend==="hermes"?c("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):c("model","ok",`${r.backend||"auto"} ${r.provider||""} ${r.model||""}`.trim()):c("model","fail","no model.json","oracle setup model"),t.vaultExists?t.disarmed?c("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):c("vault",t.armed?"ok":"warn",t.armed?"present, armed":"present, not armed"):c("vault","fail","no local vault","oracle sign init");let I=e.ORACLE_SIGNER_HOST||"127.0.0.1";if(it.has(I)?c("signer",o?"ok":"warn",o?`loopback ${I}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",o?null:"oracle signer"):c("signer","fail",`signer host ${I} is not loopback`,"unset ORACLE_SIGNER_HOST"),!i)c("quote","warn","quote not probed",null);else if(i.ok){let l=String(i.detail||"net quote returned");c("quote","ok",l.length>140?`${l.slice(0,140)}\u2026`:l)}else c("quote","warn",i.detail||"quote unavailable","check network / oracle data serve");c("review",n?"ok":"fail",n?"sign-time review renders decoded action, policy hits, approval deltas":"sign-time review module missing from this build",n?null:"reinstall @oracle-agent/oracle (src/control/sign-time-review.mjs)"),c("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 se=a.some(l=>l.status==="fail"),M=a.filter(l=>l.status==="ok").length;return{ok:!se,checks:a,firstRunScore:{ok:M,total:a.length,label:`${M}/${a.length} first-run hops green`},venues:D({env:e,vault:t})}}async function gc(e=process.env){let r=e.ORACLE_SIGNER_HOST||"127.0.0.1",t=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${r}:${t}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}function v(e){let r=String(e??"?").replace(/[^\w.$-]/g,"");return r.length>12?`${r.slice(0,12)}...`:r||"?"}function st(e,r=120){let t=String(e??"").replace(/[\u0000-\u001f\u007f-\u009f]/g," ").replace(/\s+/g," ").trim();return t?t.length>r?`${t.slice(0,r)}...`:t:"quote failed"}async function yc(){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 t=(await e.json())?.pairs?.[0];return!t?.chainId||!t?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${v(t.chainId)} ${v(t.baseToken?.symbol)}/${v(t.quoteToken?.symbol)} $${v(t.priceUsd)}`}}catch(e){return{ok:!1,detail:st(e instanceof Error?e.message:"quote failed")}}}var Ec={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let r=e.argv.includes("--json"),t=D();if(r)return process.stdout.write(`${JSON.stringify({venues:t},null,2)}
|
|
2
2
|
`),0;for(let o of t)process.stdout.write(`${o.status.padEnd(12)} ${o.key.padEnd(16)} ${o.name} exec=${o.execute?"local":"no"}
|
|
3
|
-
`);return 0}};export{
|
|
3
|
+
`);return 0}};export{O as classifyReceipt,Ec as default,st as detailText,at as firstHourReport,yc as probeQuote,gc as probeSigner,v as symbol,b as vaultStatus};
|
package/package.json
CHANGED
package/public/eval-report.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"surface": "oracle-public-eval",
|
|
3
3
|
"version": 1,
|
|
4
|
-
"generatedAt": "2026-08-
|
|
4
|
+
"generatedAt": "2026-08-25T08:21:15.968244+00:00",
|
|
5
5
|
"source": {
|
|
6
|
-
"commit": "
|
|
6
|
+
"commit": "2ee403614e48e11763a6927bdf9df2a74e34817b",
|
|
7
7
|
"dirty": false,
|
|
8
8
|
"node": "v26.7.0"
|
|
9
9
|
},
|
|
10
10
|
"package": "@oracle-agent/oracle",
|
|
11
|
-
"packageVersion": "0.35.
|
|
11
|
+
"packageVersion": "0.35.16",
|
|
12
12
|
"methodology": "Reproduce locally: npx @oracle-agent/oracle eval guards|adversarial|fidelity --json. Dated, commit-stamped output; no chain state or live keys involved. A report is evidence of the pinned commit only.",
|
|
13
13
|
"suites": {
|
|
14
14
|
"guards": {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
{
|
|
21
21
|
"name": "version",
|
|
22
22
|
"ok": true,
|
|
23
|
-
"detail": "oracle 0.35.
|
|
23
|
+
"detail": "oracle 0.35.16"
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
26
|
"name": "help-loads",
|
|
@@ -51,19 +51,26 @@
|
|
|
51
51
|
"total": 159,
|
|
52
52
|
"pass": 159,
|
|
53
53
|
"fail": 0,
|
|
54
|
-
"skipped": 0
|
|
54
|
+
"skipped": 0,
|
|
55
|
+
"cancelled": 0,
|
|
56
|
+
"todo": 0,
|
|
57
|
+
"code": 0,
|
|
58
|
+
"ok": true,
|
|
59
|
+
"files": [
|
|
60
|
+
"test/local-signer-hardening.test.mjs",
|
|
61
|
+
"test/local-signer-final-blockers.test.mjs",
|
|
62
|
+
"test/local-signer-runtime-red-review.test.mjs",
|
|
63
|
+
"test/local-signer-http.test.mjs",
|
|
64
|
+
"test/action-receipts.test.mjs",
|
|
65
|
+
"test/opensea-evm-prepare.test.mjs",
|
|
66
|
+
"test/mancer-os-mint.test.mjs",
|
|
67
|
+
"test/mint-trigger.test.mjs",
|
|
68
|
+
"test/hl-entry-state.test.mjs"
|
|
69
|
+
],
|
|
70
|
+
"expectedFiles": 9,
|
|
71
|
+
"failures": []
|
|
55
72
|
},
|
|
56
|
-
"files": [
|
|
57
|
-
"test/local-signer-hardening.test.mjs",
|
|
58
|
-
"test/local-signer-final-blockers.test.mjs",
|
|
59
|
-
"test/local-signer-runtime-red-review.test.mjs",
|
|
60
|
-
"test/local-signer-http.test.mjs",
|
|
61
|
-
"test/action-receipts.test.mjs",
|
|
62
|
-
"test/opensea-evm-prepare.test.mjs",
|
|
63
|
-
"test/mancer-os-mint.test.mjs",
|
|
64
|
-
"test/mint-trigger.test.mjs",
|
|
65
|
-
"test/hl-entry-state.test.mjs"
|
|
66
|
-
],
|
|
73
|
+
"files": [],
|
|
67
74
|
"cases": []
|
|
68
75
|
},
|
|
69
76
|
"fidelity": {
|