@oracle-agent/oracle 0.35.17 → 0.35.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
- package/dist/bin/desk-server.mjs +69 -29
- package/dist/bin/oracle-data-mcp.mjs +17 -16
- package/dist/cli/commands/chat.mjs +177 -177
- package/dist/cli/commands/doctor.mjs +7 -7
- package/dist/cli/commands/eval.mjs +110 -110
- package/dist/cli/commands/model.mjs +183 -183
- package/dist/cli/commands/quickstart.mjs +6 -6
- package/dist/cli/commands/sign.mjs +12 -12
- package/dist/cli/commands/signer.mjs +23 -17
- package/dist/cli/commands/venues.mjs +2 -2
- package/dist/data/desk-data.mjs +67 -27
- package/dist/index.mjs +81 -41
- package/dist/local-signer/anvil-attestation-worker.mjs +1 -1
- package/dist/local-signer/index.mjs +3 -3
- package/dist/local-signer/runtime.mjs +20 -14
- package/package.json +1 -1
- package/public/eval-report.json +4 -4
- package/public/oracle-splash/index.html +2 -2
- package/server.json +2 -2
|
@@ -1,11 +1,11 @@
|
|
|
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}
|
|
1
|
+
var no=Object.defineProperty;var a=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var Ae=(e,t)=>{for(var r in t)no(e,r,{get:t[r],enumerable:!0})};import ve from"node:fs";import oo from"node:os";import X from"node:path";import{fileURLToPath as io}from"node:url";function Ve(){return process.env.ORACLE_FAKE_HOME||oo.homedir()}function ao(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function Z(){return ao()?process.env.ORACLE_CONFIG_DIR||X.join(Ve(),".config","oracle"):X.join(Ve(),".config","oracle")}function co(){return X.join(Z(),"desk.json")}function lo(){return X.join(Z(),"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=lo();if(ve.existsSync(o))for(let i of ve.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=co();if(ve.existsSync(o)){let i=JSON.parse(ve.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 so,S,ke=a(()=>{so=X.dirname(io(import.meta.url)),S=X.resolve(so,"../..");try{Y()}catch{}});function ur(e){return $o.get(Number(e))||null}function dr(e,t=process.env){let r=ur(e);if(!r)return null;for(let n of r.rpcEnv){let o=(t[n]||"").trim();if(o)return o}return null}var Oe,$o,Qe=a(()=>{Oe={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}},$o=new Map(Object.values(Oe).map(e=>[e.chainId,e]))});function ae(e){let t=e?.transactionHash||e?.hash||e?.txid||null;return t?{happened:!0,hash:String(t),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}var et=a(()=>{});var fr=a(()=>{});var pr=a(()=>{});var ce=a(()=>{});var te=a(()=>{});var _e=a(()=>{ce();te()});import{isAddress as ic}from"ethers";var rt=a(()=>{_e();ce();te()});import{Interface as Do,isAddress as dc}from"ethers";var wc,mr=a(()=>{rt();ce();te();wc=new Do(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as Fo,isAddress as yc}from"ethers";var Sc,Ac,wr=a(()=>{rt();ce();te();Sc=new Fo(["function approve(address spender,uint256 amount) returns (bool)"]),Ac=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var z=a(()=>{});import{Interface as jo,MaxUint256 as Nc,isAddress as Cc,keccak256 as Rc,toUtf8Bytes as Lc}from"ethers";var jc,W=a(()=>{pr();mr();wr();z();te();jc=new jo(["function approve(address spender,uint256 amount) returns (bool)"])});var qc,Hc,Ne=a(()=>{qc=300*1e3,Hc=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var Ce=a(()=>{W()});import{Address as Kc,NETWORK as Gc,OutScript as Jc,RawTx as Yc,SigHash as Xc,TEST_NETWORK as Zc,Transaction as Qc}from"@scure/btc-signer";var it=a(()=>{});import{createHash as Mo}from"node:crypto";import{base58 as nl}from"@scure/base";import{getCompiledTransactionMessageDecoder as il}from"@solana/transaction-messages";var hr,sl,st=a(()=>{hr=e=>Mo("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),sl=new Map([[hr("route"),{name:"route",prefixBytes:0}],[hr("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});import V from"node:net";import qo from"node:dns";function Re(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let r=m=>{if(!m)return[];let l=m.split(":"),f=l.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;l.splice(l.length-1,1,(u[0]<<8|u[1]).toString(16),(u[2]<<8|u[3]).toString(16))}return l.some(u=>!/^[0-9a-f]{1,4}$/.test(u))?null:l.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("::"),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 at(e,t,r){let n=Math.floor(r/8),o=r%8;for(let s=0;s<n;s+=1)if(e[s]!==t[s])return!1;if(!o)return!0;let i=255<<8-o;return(e[n]&i)===(t[n]&i)}function ct(e){if(V.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(V.isIPv6(e)){let t=Re(e);if(!t)return!1;let r=Re("::ffff:0:0");return at(t,r,96)?ct([...t.slice(12)].join(".")):at(t,Re("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,i])=>at(t,Re(o),i)):!1}return!1}function Uo(e){let t;try{t=new URL(String(e))}catch{return{ok:!1,error:`not a valid URL: ${String(e).slice(0,120)}`}}if(t.protocol!=="http:"&&t.protocol!=="https:")return{ok:!1,error:`refused protocol ${t.protocol} (only http/https)`};let r=t.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,"");if(Ho.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=V.isIP(r);return n!==0&&!ct(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:n!==0}}async function lt(e,{lookupFn:t=qo.promises.lookup}={}){let r=Uo(e);if(!r.ok)return r;if(r.isLiteralIp)return{ok:!0,url:r.url,addresses:[{address:r.host,family:V.isIPv6(r.host)?6:4}]};let n;try{n=await t(r.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${r.host} did not resolve`}}return!Array.isArray(n)||n.length===0||n.some(o=>!ct(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function ut({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let r,n;try{let l=await t();r=l.Agent,n=l.fetch}catch(l){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${l?.message||l}`);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=l=>String(l).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),i=new Map,s=l=>(Array.isArray(l)?l:[l]).map(f=>typeof f=="string"?{address:f}:f).filter(f=>f&&f.address).map(f=>({address:f.address,family:f.family||(V.isIPv6(f.address)?6:4)})),d=(l,f,u)=>{i.set(o(l),s(typeof f=="string"?[{address:f,family:u}]:f))},c=l=>{let f=o(l);if(V.isIP(f))return[{address:f,family:V.isIPv6(f)?6:4}];let u=i.get(f);if(!u||!u.length)throw new Error(`refused: unpinned host ${l} during pinned fetch`);return u},p=new r({connect:{lookup(l,f,u){let b;try{b=c(l)}catch(h){return u(h)}return f?.all?u(null,b):u(null,b[0].address,b[0].family)}}}),m=zo((l,f={})=>n(l,{...f,dispatcher:p}),d);return{dispatcher:p,fetch:m,pin:d,resolve:c,async close(){try{await p.destroy()}catch{}}}}function zo(e,t){if(typeof e!="function")throw new Error("markPinCapableFetch: fetchImpl must be a function");if(typeof t!="function")throw new Error("markPinCapableFetch: pin must be a function");return e[dt]=Object.freeze({pin:t}),e}function ft(e){return typeof e=="function"&&typeof e[dt]?.pin=="function"}function gr(e,t,r){if(!ft(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[dt].pin(t,r)}var Ho,dt,yr=a(()=>{Ho=new Set(["localhost","metadata.google.internal","metadata.goog"]);dt=Symbol.for("oracle.egressGuard.pinCapableFetch")});import{createHash as br}from"node:crypto";function Jo(e){let t=String(e||"").toLowerCase();return Ir.includes(t)||/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(t)}function Yo(e){let t={};for(let[r,n]of Object.entries(e||{}))Jo(r)||(t[r]=n);return t}function Xo(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 Zo(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function Ar(e){let t=String(e?.method||"");return t?!Qo.test(t):!1}function ti(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(Ar):!r||typeof r!="object"?!1:r.jsonrpc&&r.method?Ar(r):typeof r.type=="string"&&ei.has(r.type)&&r.action==null&&r.signature==null&&r.nonce==null}function ri(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)),c=[...new Set([...Ir,...s])].sort().map(f=>`${f}=${i[f]??""}`).join(`
|
|
2
|
+
`),p=br("sha256").update(c).digest("hex").slice(0,32),m=`${n.untrustedUrl?"untrusted":"trusted"}:${n.maxResponseBytes??"unbounded"}`,l=o==null?"-":br("sha256").update(String(o)).digest("hex").slice(0,32);return`${e} ${t} ${m} ${p} ${l}`}function ni(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,xr):Math.min(250*2**e,xr)+Math.floor(Math.random()*100)}function ue(e,t={}){let r=new Error(e);return r.retryable=!1,Object.assign(r,t),r}function mt(e,t,r){return ue(`HTTP response from ${e} exceeded maxResponseBytes ${r} (${t})`,{oversize:!0})}function de(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function ii(e){return e?e.byteLength??e.length??0:0}async function vr(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&&(de(e),!n))throw mt(r,`content-length ${i}`,t);let s=e.body?.getReader?.();if(!s){let l=await e.text(),f=Buffer.byteLength(l,"utf8");if(f>t){if(!n)throw mt(r,`body ${f} bytes`,t);return Buffer.from(l,"utf8").subarray(0,t).toString("utf8")}return l}let d=[],c=0,p=!1;try{for(;;){let{value:l,done:f}=await s.read();if(f)break;if(l&&(d.push(Buffer.from(l)),c+=ii(l),c>t)){p=!0;break}}}finally{if(p)try{await s.cancel()}catch{}try{s.releaseLock?.()}catch{}}if(p&&(typeof o=="function"&&o(),!n))throw mt(r,`streamed ${c} bytes`,t);let m=Buffer.concat(d);return(p?m.subarray(0,t):m).toString("utf8")}function kr(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function si(e,{fetchImpl:t,method:r,headers:n,body:o,timeoutMs:i,lookupFn:s,realFetch:d,untrustedUrl:c=!1,maxResponseBytes:p=null,importUndici:m,validateResponse:l,signal:f}){let u=new AbortController,b=setTimeout(()=>u.abort(),i),h=f?typeof AbortSignal.any=="function"?AbortSignal.any([f,u.signal]):f:u.signal,w=null,I=t,T=s?{lookupFn:s}:{};if(c&&!d&&!ft(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 lt(y,T);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(w&&(await w.close(),w=null),!w)try{w=await ut({requireUndici:!0,...m?{importUndici:m}:{}})}catch(_){throw ue(x==null?`HTTP refused ${y}: ${_?.message||_}`:`HTTP redirect to ${y} refused: ${_?.message||_}`,x==null?{}:{status:x})}w.pin(E,v.addresses),I=w.fetch}else gr(I,E,v.addresses);return v};try{let y=String(e),x={...n||{}};c&&await g(y);for(let v=0;v<=Sr;v+=1){let E=await I(y,{method:r,headers:x,body:o,signal:h,redirect:"manual"});if(Ko.has(E.status)){if(r!=="GET"&&r!=="HEAD"){let L=await vr(E,p??Go,{url:y,truncate:!0}),j=new Error(`HTTP ${E.status} ${r} ${y} redirected non-idempotent request`);throw j.status=E.status,j.body=kr(L)??L.slice(0,300),j}if(v===Sr)throw de(E),new Error(`HTTP redirect loop for ${e}`);let C=E.headers?.get?.("location"),B;try{B=Xo(C,y)}catch(L){throw de(E),L}let D=!Zo(B,y);if(de(E),D&&(x=Yo(x)),c)await g(B,{status:E.status});else if(D){let L=await lt(B,T);if(!L.ok){let j=new Error(`HTTP redirect from ${y} ${L.error}`);throw j.status=E.status,j.retryable=!1,j}d&&L.addresses?.length&&(w||(w=await ut(m?{importUndici:m}:{})),w&&(w.pin(new URL(B).hostname,L.addresses),I=w.fetch))}y=B;continue}if(typeof l=="function")try{await l(E,{url:y})}catch(C){throw de(E),ue(C?.message||String(C))}let _=await vr(E,p,{url:y,onOversize:()=>u.abort()}),J=kr(_);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=J??_.slice(0,300),C}return J??_}throw new Error(`HTTP redirect loop for ${e}`)}finally{clearTimeout(b),w&&await w.close()}}async function Le(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):Vo,c=t.lookupFn,p=!t.fetchImpl,m=t.untrustedUrl===!0,l=t.importUndici,f=t.validateResponse,u=t.signal,b=Number(t.maxResponseBytes),h=Number.isFinite(b)&&b>0?Math.floor(b):null,w=async()=>{let x;for(let v=0;v<=d;v++){u?.throwIfAborted?.();try{return await si(e,{fetchImpl:r,method:o,headers:i,body:s,timeoutMs:n,lookupFn:c,realFetch:p,untrustedUrl:m,maxResponseBytes:h,importUndici:l,validateResponse:f,signal:u})}catch(E){x=E;let _=E?.status,J=E?.name==="AbortError"||E?.name==="TimeoutError"||u?.aborted,C=new Set([408,425,429]),B=E?.retryable===!1?!1:_!=null?C.has(_)||Wo.has(_)&&Er.has(o):!J&&Er.has(o);if(v===d||!B)throw E;let D=ni(v,E?.retryAfter);u?await new Promise((L,j)=>{let ro=setTimeout(L,D);u.addEventListener("abort",()=>{clearTimeout(ro),j(u.reason||new DOMException("Aborted","AbortError"))},{once:!0})}):await oi(D)}}throw x};if(!(t.dedupe!==!1&&!u&&ti(o,s)))return w();let T=ri(o,e,i,{untrustedUrl:m,maxResponseBytes:h},s),g=pt.get(T);if(g)return g;let y=w().finally(()=>pt.delete(T));return pt.set(T,y),y}var Wo,Er,Vo,xr,Ir,Ko,Sr,Go,pt,Qo,ei,oi,$e=a(()=>{yr();Wo=new Set([408,425,429,500,502,503,504]),Er=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),Vo=2,xr=4e3,Ir=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],Ko=new Set([301,302,303,307,308]),Sr=3,Go=64*1024;pt=new Map,Qo=/(?:^|_)(send|submit|broadcast|sign|requestAirdrop)(?=[A-Z_]|$)/i,ei=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);oi=e=>new Promise(t=>setTimeout(t,e))});var Or=a(()=>{$e()});var Tr=a(()=>{Or()});var Al,vl,ht=a(()=>{z();Tr();Al=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"}),vl=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 Ol,gt=a(()=>{z();Ol="0x"+"00".repeat(32)});var ai,Rl,yt=a(()=>{gt();z();ai=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Rl=Object.freeze(ai.map(e=>e[0]))});var Pe=a(()=>{z()});import{TypedDataEncoder as Dl,getAddress as Fl,isAddress as jl}from"ethers";var li,ui,Rr=a(()=>{Ne();li=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),ui=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 Hl,Lr=a(()=>{Hl=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var $r=a(()=>{});import{TypedDataEncoder as Yl,getAddress as Xl,isAddress as Zl}from"ethers";var di,iu,fi,su,Pr=a(()=>{$e();_e();Lr();$r();Ne();di=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),iu=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),fi=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"}]}),su=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as lu,getAddress as uu}from"ethers";var pu,bt=a(()=>{Rr();Pr();pu=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as Dr}from"ethers";var yi,Nu,bi,Cu,Ru,Lu,$u,Ei,Pu,Be=a(()=>{W();_e();Ne();Ce();it();st();ht();yt();Pe();bt();yi=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),Nu=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}),bi=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"}}),Cu=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Ru=new Dr(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Lu=new Dr(["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"]),$u=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"}}),Ei=Object.freeze([...yi]),Pu=Object.freeze({...bi})});import{encode as Fu}from"@msgpack/msgpack";import{keccak256 as Mu,verifyTypedData as qu}from"ethers";var Hu,Uu,Et=a(()=>{Hu=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Uu=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var xt=a(()=>{Pe()});import{ed25519 as Xu}from"@noble/curves/ed25519.js";import{base58 as Qu}from"@scure/base";import{RawTx as td,SigHash as rd,Transaction as nd}from"@scure/btc-signer";import{Transaction as id,keccak256 as sd,verifyTypedData as ad}from"ethers";var St=a(()=>{Et();xt()});import{base58 as md}from"@scure/base";var De=a(()=>{Be();Ce();W();St()});var jr=a(()=>{De();Be()});import{wordlists as Ai}from"ethers";function Oi(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return Ii.has(t.length)&&t.every(r=>Ai.en.getWordIndex(r)>=0)}function Ci(e){let t=Mr(e);return Ni.has(t)||_i.test(t)}function Mr(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function Ri(e){let t=Mr(e);return[...vi].some(r=>t.includes(r))}function Li(e,t,r){if(typeof t=="string"){if(ki.some(n=>n.test(t))||Oi(t))throw new fe(r);if(Ti.test(t)&&!Ci(e))throw new fe(r)}}function At(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return Li(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)=>At(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(Ri(o))throw new fe(i);e[o]!==void 0&&(n[o]=At(e[o],i,o))}return n}function vt(e){return At(e)}var vi,ki,Ii,Ti,_i,Ni,fe,Fe=a(()=>{vi=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),ki=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],Ii=new Set([12,15,18,21,24]);Ti=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,_i=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,Ni=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);fe=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}}});import{wordlists as _d}from"ethers";var qr,Cd,re=a(()=>{Fe();qr=64*1024,Cd=32*1024});var Bi,$d,Pd,Me=a(()=>{re();Bi=["schemaVersion","buildVersion","recordType","execution","custody"],$d=[...Bi,"recordHash"],Pd=Object.freeze({signed:new Set(["workflow.signed","legacy.signed"]),submitted:new Set(["workflow.submitted","legacy.broadcast"]),finalized:new Set(["workflow.finalized"]),reorged:new Set(["workflow.reorged"]),orphaned:new Set(["workflow.orphaned"]),compensating:new Set(["workflow.compensating"]),compensated:new Set(["workflow.compensated"])})});var Di,Yr,Md,_t=a(()=>{re();Me();Di=Object.freeze(["draft","checked","approval","signed","submitted","finalized","reorged","orphaned","compensating","compensated","failed","cancelled"]),Yr=Object.freeze(["workflow.drafted","workflow.checked","workflow.approval_requested","workflow.approval_granted","workflow.signed","workflow.submitted","workflow.finalized","workflow.reorged","workflow.orphaned","workflow.compensating","workflow.compensated","workflow.failed","workflow.cancelled","workflow.annotated"]),Md=new Set(Yr)});var Ui,Xr=a(()=>{re();_t();Ui=64*1024*1024});var Kd,Gd,Jd,Zr=a(()=>{Kd=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Gd=Object.freeze(["read","simulate"]),Jd=1440*60});function Nt(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return zi.test(t)||Wi.includes(r)}function Vi(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>en.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function tn(e){let t;try{t=JSON.stringify(e)}catch(o){throw new M("$",`unserializable-payload: ${String(o?.message||o)}`)}if(t===void 0)return"null";let r=Vi(t);for(let{rule:o,re:i}of Qr)if(i.test(r))throw new M("$<serialized>",o);if(/(?:^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{64}(?![0-9a-fA-F])/.test(r))throw new M("$<serialized>","raw-32-byte-hex-embedded");return JSON.parse(t,(o,i)=>{if(o&&Nt(o))throw new M(`$<serialized>.${o}`,"forbidden-key-name");return i}),t}function H(e,t="$",r=new Set,n=""){if(e==null)return e;if(typeof e=="string"){let o=en.includes(String(n).toLowerCase().replace(/[_-]/g,""));for(let{rule:i,re:s}of Qr)if(!(o&&i.startsWith("raw-32-byte-hex"))&&s.test(e))throw new M(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"&&Nt(o))throw new M(`${t}[${JSON.stringify(o)}]`,"forbidden-key-name");H(o,`${t}[key]`,r),H(i,`${t}[${String(o)}]`,r)}return e}if(e instanceof Set){let o=0;for(let i of e.values())H(i,`${t}[${o++}]`,r);return e}if(Array.isArray(e))return e.forEach((o,i)=>H(o,`${t}[${i}]`,r)),e;for(let[o,i]of Object.entries(e)){if(Nt(o))throw new M(`${t}.${o}`,"forbidden-key-name");H(i,`${t}.${o}`,r,o)}return e}var M,zi,Wi,Qr,en,Ct=a(()=>{Zr();M=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}},zi=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,Wi=Object.freeze(["privkey","wif","xprv","seed"]);Qr=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}]),en=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"])});var Rt,af,rn=a(()=>{Ct();Rt=Object.freeze(["intent","quote_comparison","simulation","prepared","approval","signed","broadcast","settlement","balance_delta","position"]),af=Object.freeze(Object.fromEntries(Rt.map((e,t)=>[e,Object.freeze(t+1<Rt.length?[Rt[t+1]]:[])])))});var Ki,nn=a(()=>{rn();re();Me();Ki=Object.freeze({intent:"draft",quote_comparison:"draft",simulation:"draft",prepared:"checked",approval:"approval",signed:"signed",broadcast:"submitted",settlement:"finalized",balance_delta:"compensated",position:"compensated"})});var on=a(()=>{re();Me();_t();Xr();nn()});var Ji,Yi,Xi,Wf,Vf,Kf,Gf,Jf,Zi,Yf,sn=a(()=>{Ji=Object.freeze(["owner","operator","agent","viewer"]),Yi=Object.freeze(["tenant","config","policy","grant","workflow","trade","receipt","audit","telemetry"]),Xi=Object.freeze({read:"read",create:"create",update:"update",delete:"delete",manage:"manage",prepare:"prepare",cancel:"cancel",export:"export",approve:"approve"}),Wf=Object.freeze(["owner"]),Vf=Object.freeze({ALLOW_ROLE_PERMISSION:"allow.role_permission",DENY_MISSING_CONTEXT:"deny.missing_context",DENY_INVALID_CONTEXT:"deny.invalid_context",DENY_INVALID_REQUEST:"deny.invalid_request",DENY_UNKNOWN_RESOURCE:"deny.unknown_resource",DENY_UNKNOWN_ACTION:"deny.unknown_action",DENY_UNBOUND_OBJECT:"deny.unbound_object",DENY_TENANT_MISMATCH:"deny.tenant_mismatch",DENY_RESOURCE_MISMATCH:"deny.resource_mismatch",DENY_ROLE_PERMISSION:"deny.role_permission",DENY_POLICY_NOT_APPROVER:"deny.policy_not_approver"}),Kf=new Set(Ji),Gf=new Set(Yi),Jf=new Set(Object.values(Xi)),Zi=Object.freeze({owner:Object.freeze(["tenant:read","tenant:manage","config:read","config:manage","policy:read","policy:manage","grant:read","grant:create","grant:update","grant:delete","grant:manage","workflow:read","workflow:create","workflow:update","workflow:delete","workflow:cancel","workflow:approve","trade:read","trade:prepare","receipt:read","receipt:export","audit:read","audit:export","telemetry:read","telemetry:create","telemetry:export"]),operator:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","workflow:cancel","trade:read","trade:prepare","receipt:read","audit:read","telemetry:read","telemetry:create"]),agent:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","trade:read","trade:prepare","receipt:read","telemetry:create"]),viewer:Object.freeze(["tenant:read","config:read","grant:read","workflow:read","trade:read","receipt:read","audit:read","telemetry:read"])}),Yf=Object.freeze(Object.fromEntries(Object.entries(Zi).map(([e,t])=>[e,Object.freeze([...t])])))});var Qi,es,ts,ep,tp,rp,np,op,ip,Lt=a(()=>{sn();Qi=Object.freeze(["succeeded","denied","invalid","failed","cancelled","timed_out","unavailable","skipped"]),es=Object.freeze(["workflow","task","intent","plan","run","event","eval"]),ts=Object.freeze(["taskId","intentId","planId","runId","eventId"]),ep=Object.freeze({maxAttributes:24,maxKeyLength:48,maxStringLength:256,maxArrayLength:8}),tp=new Set(Qi),rp=new Set(es),np=new Set(ts),op=Object.freeze(["authorization","bearer","cookie","credential","password","passphrase","secret","token","privatekey","privkey","seed","mnemonic","keystore","signature","prompt","systemmessage","usermessage","assistantmessage","rawtransaction","signedtransaction","serializedtransaction","transactionbytes","calldata","callbytes","inputdata"]),ip=Object.freeze({taskId:"x-oracle-task-id",intentId:"x-oracle-intent-id",planId:"x-oracle-plan-id",runId:"x-oracle-run-id",eventId:"x-oracle-event-id"})});var dp,an=a(()=>{on();Lt();dp=Object.freeze({"workflow.cancelled":"cancelled","workflow.failed":"failed"})});var gp,cn=a(()=>{Lt();gp=32*1024*1024});var bp,Ep,xp,ne=a(()=>{bp=Object.freeze({N:1<<17,r:8,p:1}),Ep=256*1024*1024,xp=16*1024});var Ap,ln=a(()=>{Ap=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 $t}from"node:os";import{join as Pt}from"node:path";var un,rs,Op,dn=a(()=>{un=process.env.ORACLE_PUBLIC_DESKTOP==="1",rs=un?process.env.ORACLE_CONFIG_DIR||Pt($t(),".config","oracle"):Pt($t(),".config","oracle"),Op=un?rs:Pt($t(),".config","mad-desk")});var Rp,Lp,$p,fn=a(()=>{dn();Rp="0".repeat(64),Lp=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"}),$p=Promise.resolve()});var Bt=a(()=>{fn();z();ne();De()});var mn=a(()=>{});var gn={};Ae(gn,{SIGN_TIME_REVIEW_VERSION:()=>ns,SignTimeReviewSecretError:()=>pe,createSignTimeReview:()=>hn});function Dt(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string"){let o=e.trim().split(/\s+/);if(cs.test(e)||ls.has(o.length)&&o.every(i=>/^[a-z]+$/i.test(i)))throw new pe(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)=>Dt(o,`${t}[${i}]`,r));K(e,t);let n={};for(let o of Object.keys(e).sort()){let i=o.replace(/[^a-z0-9]/gi,"");if(as.test(i))throw new pe(`${t}.${o}`);e[o]!==void 0&&(n[o]=Dt(e[o],`${t}.${o}`,o))}return n}function K(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 me(e,t){if(e==null||e==="")throw new TypeError(`sign-time review: ${t} required`);return e}function oe(e,t){let r=String(me(e,t)).toLowerCase();if(!os.test(r))throw new TypeError(`sign-time review: ${t} must be an EVM address`);return r}function q(e,t,{positive:r=!1}={}){try{let n=BigInt(me(e,t));if(n<0n||r&&n===0n)throw new Error;return n.toString()}catch{throw new TypeError(`sign-time review: ${t} must be an unsigned integer`)}}function Ft(e,t){if(typeof e!="string"||e.length===0||e.length>500||e!==e.trim())throw new TypeError(`sign-time review: ${t} must be non-empty text`);return e}function wn(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))wn(t);Object.freeze(e)}return e}function us(e,t){if(typeof e=="boolean")return{passed:e,reason:e?"passed":"failed"};K(e,t);let r=e.passed??e.ok??e.allowed;if(typeof r!="boolean")throw new TypeError(`sign-time review: ${t} needs a boolean result`);let n=e.reason??e.message??e.name??(r?"passed":"failed");return{...e,passed:r,reason:Ft(String(n),`${t}.reason`)}}function ds(e){if(!Array.isArray(e))throw new TypeError("sign-time review: policyChecks must be an array");let t=e.map((n,o)=>us(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 fs(e){if(e==null)return null;if(K(e,"simulation"),typeof e.status!="string"||!["ok","success","failed","error","unavailable","unknown"].includes(e.status))throw new TypeError("sign-time review: simulation.status is invalid");if(e.willRevert!==!0&&e.willRevert!==!1&&e.willRevert!==null)throw new TypeError("sign-time review: simulation.willRevert must be boolean or null");let t={status:e.status,willRevert:e.willRevert??null,summary:Ft(String(e.summary??"simulation result recorded"),"simulation.summary")};return e.gasEstimate!=null&&(t.gasEstimate=q(e.gasEstimate,"simulation.gasEstimate")),e.gasLimit!=null&&(t.gasLimit=q(e.gasLimit,"simulation.gasLimit")),t}function ps(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)=>{K(t,`assetDeltas[${r}]`);let n=q(t.before,`assetDeltas[${r}].before`),o=q(t.after,`assetDeltas[${r}].after`),i=(BigInt(o)-BigInt(n)).toString(),s;try{s=t.delta==null?i:BigInt(t.delta).toString()}catch{throw new TypeError(`sign-time review: assetDeltas[${r}].delta must be an integer`)}if(s!==i)throw new TypeError(`sign-time review: assetDeltas[${r}].delta does not match before/after`);return{...t,asset:Ft(String(me(t.asset??t.token,`assetDeltas[${r}].asset`)),`assetDeltas[${r}].asset`),before:n,after:o,delta:s}})}function ms(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)=>{K(t,`approvalDeltas[${r}]`);let n=q(t.amount??t.after,`approvalDeltas[${r}].amount`);if(t.revokeLike!=null&&typeof t.revokeLike!="boolean")throw new TypeError(`sign-time review: approvalDeltas[${r}].revokeLike must be boolean`);return{token:oe(t.token,`approvalDeltas[${r}].token`),spender:oe(t.spender,`approvalDeltas[${r}].spender`),owner:oe(t.owner,`approvalDeltas[${r}].owner`),amount:n,revokeLike:t.revokeLike??BigInt(n)===0n}})}function hn(e={}){K(e,"input");let t=Dt(e),r=t.tx==null?t:K(t.tx,"tx"),n=q(t.chainId??r.chainId,"chainId",{positive:!0}),o=oe(t.account??t.from??r.from,"account/from"),i=oe(t.destination??t.to??r.to,"destination/to"),s=String(me(t.prepareHash,"prepareHash")).toLowerCase();if(!ss.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(me(t.calldata??t.data??r.data,"calldata/data")).toLowerCase();if(!is.test(p))throw new TypeError("sign-time review: calldata/data must be even-length hex");let m=t.policyChecks!==void 0&&t.policyChecks!==null,l=ds(m?t.policyChecks:[]),f=fs(t.simulation),u=ps(t.assetDeltas),b=ms(t.approvalDeltas),h=t.allowlistHits??[];if(!Array.isArray(h))throw new TypeError("sign-time review: allowlistHits must be an array");let w=f?.willRevert===!0||["failed","error"].includes(f?.status),I=f!=null&&f.willRevert===!1&&["ok","success"].includes(f.status),T=w||l.failed>0?"BLOCKED":I&&m&&l.checks.length>0&&u!=null?"READY":"UNKNOWN",g=typeof c=="string"?c:c.method??c.action??c.type??"transaction",y=`${T}: review ${g} on chain ${n}; policy ${l.passed} passed, ${l.failed} failed; ${u?.length??0} asset delta${u?.length===1?"":"s"}; local signature required`,x={reviewVersion:1,status:T,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:oe(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:q(t.value??r.value??0,"value"),...(t.gasEstimate??r.gasEstimate)==null?{}:{gasEstimate:q(t.gasEstimate??r.gasEstimate,"gasEstimate")},...(t.gasLimit??r.gasLimit)==null?{}:{gasLimit:q(t.gasLimit??r.gasLimit,"gasLimit")},simulation:f,policyChecks:l,allowlistHits:h,assetDeltas:u,approvalDeltas:b,summary:y};return wn(x)}var ns,os,is,ss,as,cs,ls,pe,jt=a(()=>{ns=1,os=/^0x[0-9a-f]{40}$/,is=/^0x(?:[0-9a-f]{2})*$/,ss=/^(?:0x)?[0-9a-f]{64}$/,as=/(privatekey|privkey|secretkey|seedphrase|mnemonic|passphrase|password|keystore|keymaterial|wif|xprv|xpriv|bearer|authorization|signature|apikey|credential)/i,cs=/\b(?:[5KL][1-9A-HJ-NP-Za-km-z]{50,51}|xprv[0-9A-Za-z]{50,})\b/,ls=new Set([12,15,18,21,24]),pe=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 zp,readdirSync as Wp,existsSync as ws}from"node:fs";import{dirname as hs,join as we}from"node:path";import{fileURLToPath as gs}from"node:url";function ys(){let e=[we(he,"descriptors"),we(he,"clear-sign","descriptors"),we(he,"..","clear-sign","descriptors"),we(he,"..","..","clear-sign","descriptors"),we(he,"..","..","..","clear-sign","descriptors")];for(let t of e)if(ws(t))return t;return e[0]}var he,Jp,Yp,yn=a(()=>{W();he=hs(gs(import.meta.url));Jp=ys(),Yp=(1n<<256n)-1n});var bn=a(()=>{jt();W();yn()});import{Wallet as om}from"ethers";import{base58 as sm}from"@scure/base";import{ed25519 as cm}from"@noble/curves/ed25519.js";import{NETWORK as um,TEST_NETWORK as dm,WIF as fm,p2wpkh as pm}from"@scure/btc-signer";import{pubECDSA as wm}from"@scure/btc-signer/utils.js";var En=a(()=>{});var ym,bm,Em,xm,Sm,Am,vm,km,Im,Om,Tm,xn=a(()=>{Bt();ym=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),bm=Object.freeze(["binance","bybit","okx","coinbase"]),Em=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),xm=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),Sm=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Am=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),vm=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),km=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),Im=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),Om=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),Tm=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var Sn=a(()=>{ne()});var xs,An,He=a(()=>{xs=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}"]})}),An=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var vn=a(()=>{He()});var Fm,kn=a(()=>{He();vn();Fm=256*1024});var In=a(()=>{He();kn()});var On=a(()=>{ne()});import N from"node:path";import Ss from"node:os";import{createHash as As,randomBytes as Cw}from"node:crypto";import{Interface as Mt,keccak256 as Lw}from"ethers";import{Transaction as Pw}from"@scure/btc-signer";import{ed25519 as Dw}from"@noble/curves/ed25519.js";function Tn(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||N.join(process.env.XDG_STATE_HOME||N.join(Ss.homedir(),".local","state"),"oracle"),r=As("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`),workflowLedger:N.join(e,"workflow-events.jsonl")}}var ph,mh,wh,_n=a(()=>{jr();an();cn();De();ne();ln();Bt();mn();W();bn();Be();Ce();St();ht();yt();Pe();xt();gt();Et();it();st();bt();En();xn();Sn();In();On();ph=new Mt(["function collection() view returns (address)","function token() view returns (address)","function robinhoodSwapFeeWei() view returns (uint256)","function quoteSpecificBuy(uint256 tokenId) view returns (uint256 totalCost,uint256 baseCost,uint256 fee,uint256 protocolFee,bool available)","function quoteSellNFT() view returns (uint256 netPayout,uint256 grossPayout,uint256 fee,uint256 protocolFee)","function inventory(uint256 tokenId) view returns (bool)","function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),mh=new Mt(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),wh=new Mt(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import qt from"node:fs";import Nn from"node:path";import{homedir as vs}from"node:os";function ks(){return process.env.ORACLE_CONFIG_DIR||Nn.join(vs(),".config","oracle")}function ge(){let e=Tn(Nn.join(ks(),"signer")),t=qt.existsSync(e.vault),r=qt.existsSync(e.lock),n=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:qt.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 Ih,Ht=a(()=>{et();fr();_n();ne();Ih=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 Ue(e){return String(e||"").trim()||void 0}function Os(e,{required:t=!1}={}){let r=Ue(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!Is.has(r))throw new Error(`unsupported provider: ${r}`);return r}function Ts(e,{required:t=!1}={}){let r=Ue(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 _s(e){let t=Ue(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 Cn({provider:e,model:t,baseUrl:r}={},{requireModel:n=!1}={}){let o=Os(e),i=Ts(t,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:_s(r)};if(Ue(r))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var Is,Rn=a(()=>{Is=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"])});import Ln from"node:fs";import Ns from"node:path";function Rs(){return Ns.join(Z(),"model.json")}function ie(e){return String(e||"").trim()||void 0}function Ls(e={}){let t=ie(e.backend)?.toLowerCase()||"auto",r=Cn({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),n=ie(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=ie(e.reasoningEffort),s=ie(e.computeHost||e.remoteHost),d=ie(e.computeUser||e.remoteUser),c=ie(e.computePath||e.remotePath);if(!Cs.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}:{},...c?{computePath:c}:{}}}function $n(){let e=Rs();if(!Ln.existsSync(e))return null;try{return Ls(JSON.parse(Ln.readFileSync(e,"utf8")))}catch{return null}}var Cs,Pn=a(()=>{ke();Rn();Cs=new Set(["auto","standalone","hermes","remote","arch"])});import{Interface as $s,getAddress as Ps}from"ethers";function Ut(e,t){try{return Ps(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function Bs(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 zt(e){return e==null?null:Number.parseInt(String(e),16)}function Fs(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let n=dr(e,r);return n||Ds[Number(e)]||null}function Ms(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!js.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 qs(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function Hs(e){if(e?.error)throw qs(e.error);return e?.result}function Us(e,t,r){return`${e}
|
|
3
3
|
${t}
|
|
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)}
|
|
4
|
+
${JSON.stringify(r??[])}`}async function zs(e,t,r){return Le(e,{method:"POST",body:t,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function Wt(e,t,r=[],n={}){let o=String(t||""),i=Ms(o),s=Fs(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=Bn.get(s);if(m!=null)return m}let c=n.dedupe!==!1&&!n.signal?Us(s,o,r):null;if(c&&ye.has(c))return ye.get(c);let p=(async()=>{let m=await zs(s,{jsonrpc:"2.0",id:1,method:t,params:r},n),l=Hs(m);return i==="eth_chainid"&&typeof l=="string"&&Bn.set(s,l),l})();return c&&(ye.set(c,p),p.finally(()=>{ye.get(c)===p&&ye.delete(c)}).catch(()=>{})),p}async function Dn(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=Bs(e.txHash||e.hash||e.transactionHash),o=await Wt(r,"eth_getTransactionReceipt",[n],t);if(!o)return{ok:!1,chainId:r,txHash:n,status:"pending",receipt:null,reason:"receipt pending"};let i=zt(o.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?Ut(e.expectedTo,"expectedTo"):null,m=o.to?Ut(o.to,"receipt.to"):null;return p&&m!==p&&(s=!1,c=`to mismatch: expected ${p}, got ${m||"null"}`),{ok:s,chainId:r,txHash:n,status:d,reason:c,statusCode:i,to:m,from:o.from?Ut(o.from,"receipt.from"):null,blockNumber:zt(o.blockNumber),transactionIndex:zt(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}var Fh,Ds,js,ye,Bn,Fn=a(()=>{$e();Qe();Fh=new $s(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);Ds={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"};js=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;ye=new Map,Bn=new Map});function Vt(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 Kt(e,t="control input"){try{H(e,t),tn(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function be(e,{required:t=[],optional:r=[]}={},n="object"){Vt(e,n);let o=new Set([...t,...r]),i=Object.keys(e).filter(s=>!o.has(s));if(i.length)throw new TypeError(`${n} has unknown field ${i[0]}`);for(let s of t)if(!Object.hasOwn(e,s))throw new TypeError(`${n}.${s} is required`);return e}function Gt(e,t,r=200,{lower:n=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||Ws.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 Ee(e,t,r=80){let n=Gt(e,t,r,{lower:!0});if(!/^[a-z0-9][a-z0-9._:-]*$/.test(n))throw new TypeError(`${t} must be a lowercase identifier`);return n}function ze(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 Ws,Jt=a(()=>{Fe();Ct();Ws=/[\u0000-\u001f\u007f]/});function jn({family:e,chainId:t},r="chain"){let n=Ee(e,`${r}.family`,40),o;if(n==="evm"){if(typeof t=="number")o=String(ze(t,`${r}.chainId`,{positive:!0}));else if(o=Gt(t,`${r}.chainId`,40),!/^[1-9][0-9]*$/.test(o))throw new TypeError(`${r}.chainId must be a positive decimal EVM chain id`)}else o=Ee(t,`${r}.chainId`,80);return{family:n,chainId:o}}function Gs(e,t="chain"){return be(e,{required:["family","chainId"]},t),R(jn(e,t))}function Mn(e,t="finality rule"){Kt(e,t),Vt(e,t);let r=e.rule;if(!Vs.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let n=r==="confirmations"?"confirmations":r;be(e,{required:["family","chainId","rule",n]},t);let o=jn(e,t);return r==="confirmations"?{...o,rule:r,confirmations:ze(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...o,rule:r,[n]:Ee(e[n],`${t}.${n}`,80)}}function Yt(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((n,o)=>Mn(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 Js(e){if(be(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return Yt(e.rules)}function qn(e,t){let r=Gs(t,"finality query"),o=Js(e).rules.find(i=>i.family===r.family&&i.chainId===r.chainId);return o?R({status:"KNOWN",...r,rule:o}):R({status:G.UNKNOWN,reason:"MISSING_FINALITY_RULE",...r,rule:null})}function Ys(e,t){if(e==null)return null;Kt(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(be(e,{required:["status"],optional:[r]},"finality evidence"),!Ks.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"?ze(e.confirmations,"finality evidence.confirmations",{positive:!0}):Ee(e[r],`finality evidence.${r}`,80)),n}function Hn(e,t){if(!e||e.status===G.UNKNOWN||e.rule==null)return R({status:G.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=Mn(e.rule??e,"resolved finality rule"),n=Ys(t,r);if(n==null)return R({status:G.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(n.status!=="LIVE")return R({status:G.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?G.FINAL:G.INCLUDED,final:o,reason:o?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:r})}var Vs,G,Ks,Un=a(()=>{Jt();Vs=Object.freeze(["confirmations","finalizedTag","checkpoint"]),G=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),Ks=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"])});function Zs(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 zn(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function Zt(e){return e==null?e:Array.isArray(e)?e.map(Zt):xe(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,Zt(e[t])])):String(e)}function Qs(e,t,r,n){let o=A(e.finalityEvidence,n?.finality,e.evidence),i=A(e.finalityPolicy,e.policy);try{return i==null&&xe(e.finalityRule)&&(i=Yt([{family:t,chainId:r,...e.finalityRule}])),i==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:Hn(qn(i,{family:t,chainId:r}),o)}catch{return{status:"UNKNOWN",final:!1,reason:"MALFORMED_FINALITY_EVIDENCE"}}}function O(e,t,r){r!=null&&(e[t]=r)}function ea(e){return e==null?null:String(e).trim().toLowerCase()}function Xt(...e){let t=e.map(ea).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function Wn(e={}){if(!xe(e))throw new TypeError("verified receipt: input object required");let t=vt(e),r=A(t.actionReceipt,t.receipt),n=xe(r)?r:t,o=A(t.observation,t.chainObservation,t.observedReceipt),i=xe(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),c=A(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),p=!Xt(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash)||!Xt(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family)||!Xt(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),m=Qs(t,d,c,i&&!p?o:null),l=Zs(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";zn(f)||!p&&(i&&l==="FAIL"||zn(u))?b="FAIL":!p&&s&&i&&l==="SUCCESS"&&["INCLUDED","FINAL"].includes(m.status)&&(b="SUCCESS");let h={verifiedReceiptVersion:Xs,status:b};p&&(h.reason="REFERENCE_MISMATCH"),O(h,"txHash",s),O(h,"chain",A(t.chain,n.chain,o?.chain)),O(h,"family",d),O(h,"chainId",c),O(h,"block",A(o?.block,t.block)),O(h,"blockState",A(o?.blockState,o?.inclusionState)),h.finalityState=m.status,O(h,"confirmations",A(o?.confirmations,o?.finality?.confirmations,t.finalityEvidence?.confirmations,t.evidence?.confirmations)),O(h,"observedAt",A(o?.observedAt,t.observedAt)),O(h,"route",A(t.route,n.route)),O(h,"prepareHash",A(t.prepareHash,n.prepareHash)),O(h,"policyOutcome",A(t.policyOutcome,n.policyOutcome,n.policyChecks));let w=A(t.balanceChanges,o?.balanceChanges,o?.balances,n.balanceChanges,n.balances);return w!=null&&(h.balanceChanges=Zt(w)),O(h,"createdAt",A(t.createdAt,n.createdAt)),O(h,"submittedAt",A(t.submittedAt,n.submittedAt)),O(h,"finalizedAt",A(t.finalizedAt,o?.finalizedAt)),O(h,"timestamps",A(t.timestamps,n.timestamps,o?.timestamps)),R(h)}var Xs,Jh,A,xe,Vn=a(()=>{Fe();Un();Jt();Xs=1,Jh=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),A=(...e)=>e.find(t=>t!=null),xe=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype});var Gn={};Ae(Gn,{observeEvmReceipt:()=>Kn,verifyEvmReceipt:()=>na});function ra(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 Kn({txHash:e,chainId:t,rpcUrl:r},n={}){let o=String(e||"").trim().toLowerCase();if(!ta.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||Dn,d=n.rpcCall||Wt,c={...n.rpcOptions||{},...r?{rpcUrl:r}:{}},p;try{p=await s({txHash:o,chainId:i},c)}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,l=p.blockNumber;if(Number.isSafeInteger(l))try{let u=ra(await d(i,"eth_blockNumber",[],c));u!=null&&u>=l&&(m=u-l+1)}catch{}let f={txHash:o,family:"evm",chainId:String(i),receiptStatus:p.status==="success"?"SUCCESS":p.status==="reverted"?"FAIL":"UNKNOWN",block:l==null?void 0:String(l),observedAt:new Date().toISOString(),finality:{status:"LIVE",...m==null?{}:{confirmations:m}}};return m!=null&&(f.confirmations=m),{observation:f,reason:null}}async function na({txHash:e,chainId:t,confirmations:r=1,rpcUrl:n},o={}){let{observation:i,reason:s}=await Kn({txHash:e,chainId:t,rpcUrl:n},o),d=Wn({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 ta,Jn=a(()=>{Fn();Vn();ta=/^0x[0-9a-f]{64}$/});var Yn={};Ae(Yn,{classifyReceipt:()=>ae,configDir:()=>aa,firstHourReport:()=>Qt,probeReceiptModule:()=>la,probeReviewModule:()=>ca,venueMap:()=>We});import oa from"node:path";import{homedir as ia}from"node:os";function aa(e=process.env){return e.ORACLE_CONFIG_DIR||oa.join(ia(),".config","oracle")}function We({env:e=process.env,vault:t=null}={}){let r=t||ge(),n=[];for(let[o,i]of Object.entries(Oe)){let s=(i.rpcEnv||[]).some(c=>String(e[c]||"").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=$n(),vault:r=ge(),signerReachable:n=!1,quote:o=null,reviewAvailable:i=!1,receiptAvailable:s=!1}={}){let d=[],c=(u,b,h,w=null)=>d.push({id:u,status:b,detail:h,fix:w}),p=(()=>{let[u,b]=process.versions.node.split(".").map(Number);return u>20||u===20&&b>=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(sa.has(m)?c("signer",n?"ok":"warn",n?`loopback ${m}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):c("signer","fail",`signer host ${m} is not loopback`,"unset ORACLE_SIGNER_HOST"),!o)c("quote","warn","quote not probed",null);else if(o.ok){let u=String(o.detail||"net quote returned");c("quote","ok",u.length>140?`${u.slice(0,140)}\u2026`:u)}else c("quote","warn",o.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 l=d.some(u=>u.status==="fail"),f=d.filter(u=>u.status==="ok").length;return{ok:!l,checks:d,firstRunScore:{ok:f,total:d.length,label:`${f}/${d.length} first-run hops green`},venues:We({env:e,vault:r})}}async function ca(){try{return typeof(await Promise.resolve().then(()=>(jt(),gn))).createSignTimeReview=="function"}catch{return!1}}async function la(){try{let e=await Promise.resolve().then(()=>(Jn(),Gn));return typeof e.observeReceipt=="function"||typeof e.default=="function"||Object.values(e).some(t=>typeof t=="function")}catch{return!1}}var sa,er=a(()=>{Qe();Ht();Pn();et();sa=new Set(["127.0.0.1","::1","localhost"])});var Zn={};Ae(Zn,{classifyReceipt:()=>ae,default:()=>fa,detailText:()=>Xn,firstHourReport:()=>Qt,probeQuote:()=>da,probeSigner:()=>ua,symbol:()=>Se,vaultStatus:()=>ge});async function ua(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 Se(e){let t=String(e??"?").replace(/[^\w.$-]/g,"");return t.length>12?`${t.slice(0,12)}...`:t||"?"}function Xn(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 da(){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:`${Se(r.chainId)} ${Se(r.baseToken?.symbol)}/${Se(r.quoteToken?.symbol)} $${Se(r.priceUsd)}`}}catch(e){return{ok:!1,detail:Xn(e instanceof Error?e.message:"quote failed")}}}var fa,Qn=a(()=>{er();Ht();fa={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=We();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 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)+`
|
|
6
|
+
`);return 0}}});import se from"node:fs";import eo from"node:path";import rr from"node:fs";import Q from"node:path";ke();var fo="0.19.0",va=`hermes-agent==${fo}`;var tr="0.12.1",ka=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${tr}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${tr}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function po(){return Q.join(Z(),"runtime")}function mo(){return Q.join(po(),"venv")}function wo(e){let t=process.platform==="win32"?"Scripts":"bin",r=process.platform==="win32"?`${e}.exe`:e;return Q.join(mo(),t,r)}function ho(){return wo("hermes")}function go(e){let t=process.platform==="win32"&&!Q.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let r of(process.env.PATH||"").split(Q.delimiter))if(r)for(let n of t){let o=Q.join(r,`${e}${n}`);try{if(rr.existsSync(o))return o}catch{}}return null}function nr(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=ho();if(rr.existsSync(e))return{ok:!0,bin:e,source:"managed"};let t=go("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";ke();import{existsSync as ir,readFileSync as yo}from"node:fs";import{dirname as or,join as Ke}from"node:path";import{fileURLToPath as bo}from"node:url";function Eo(e){let t=or(bo(e));for(let r=0;r<8;r+=1){let n=Ke(t,"package.json");if(ir(n))try{let i=JSON.parse(yo(n,"utf8"));if(i&&typeof i.version=="string")return t}catch{}let o=or(t);if(o===t)break;t=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function sr(e,t){let r=Eo(t),n=Ke(r,e);return ir(n)?n:Ke(r,"dist","assets",e)}var xo=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 ar(){return xo.filter(e=>e.website)}var Ge=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function Je(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"]),So="deny",La=256*1024;var $a=Object.freeze({version:1,source:"default",defaultDecision:So,allow:ee,deny:Object.freeze([])});var Ao=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"]),Pa=new Set(Ao);var Ye=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),Da=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,vo=e=>Math.round(e*1e4)/1e4;function P(e,t,r,n=!0){!n||r===null||!Number.isFinite(r)||e.push({feature:t,value:vo(r)})}function ko(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 Io(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 Oo(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 To(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 _o(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 Fa=Object.freeze({wallet:ko,pool:Io,nft_floor:Oo,hl_flow:To,prediction_market:_o});function Xe(e){try{return U.existsSync(e)}catch{return!1}}function Ie(e){for(let t of e)if(t&&Xe(t))return t;return null}function Ze(e){try{return sr(e,import.meta.url)}catch{return null}}function No(){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(Xe(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=Ie(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 cr(){let e=Ie([Ze("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 Co(){let e=Ie([Ze("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(".")):cr().building.some(r=>/protocol-builder|dex-launch|token-launch/i.test(r))?["(via skills: protocol-builder / launch packs)"]:[]}function Ro(){let e=Ie([Ze("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 Lo(){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(Xe(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 lr(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 [${Ge.join(", ")}]; mode=${Je(e)?"ON":"off"}`,2);let c=No();r("providers",c.count>=40?"ok":c.count>=10?"warn":"fail",c.detail,3);let p=cr();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=Co();r("protocol_templates",m.length>=2?"ok":"warn",m.length?m.join(", "):"none",2);let l=Ro();r("profiles",l.includes("protocol-builder")&&l.includes("oracle")?"ok":l.length>=1?"warn":"fail",l.join(", ")||"none",2),r("signals_engine",Ye.length>=4?"ok":"fail",`types: ${Ye.join(", ")} (cold / no hot exec)`,2);let f=ar();r("harness_roster",f.length>=8?"ok":"warn",`${f.length} supported harnesses; Oracle native default; MCP inbound only`,2),r("custody_prepare_only",Lo()?"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,h=0;for(let g of t)h+=g.weight,g.status==="ok"?b+=g.weight:g.status==="warn"&&(b+=g.weight*.5);let w=h?Math.round(b/h*100):0,I=!t.some(g=>g.status==="fail")&&w>=70,T=I?`AGENTIC READY ${w}% \u2014 Oracle is the crypto control plane (prepare-only); pair coding harnesses via MCP for build.`:`AGENTIC GAPS ${w}% \u2014 fix fail/warn checks before calling Oracle the default crypto harness.`;return{ok:I,score:b,max:h,pct:w,summary:T,researchMode:Je(e),attributes:[...Ge],packageRoot:S,checks:t}}function to(){let[e,t]=process.versions.node.split(".").map(Number);return e>20||e===20&&t>=19}function pa(e){if(!se.existsSync(e))return{};let t={};for(let r of se.readFileSync(e,"utf8").split(/\r?\n/)){let n=r.match(/^([A-Z0-9_]+)=(.*)$/);n&&(t[n[1]]=n[2])}return t}async function ma(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 dg={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",to()?"ok":"fail",`node ${process.versions.node}`,to()?null:"install node >= 20.19");let d=e.paths.oracleExecEnvPath(),c=pa(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||c.ORACLE_ROUTE_ATTESTATION_SECRET||c.MAD_ROUTE_ATTESTATION_SECRET||c.ORACLE_ATTESTATION_SECRET||c.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",l=await ma(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",l?"ok":"warn",l?`reachable ${m}${f?` (${f})`:""}`:`down ${m}`,l?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=nr();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=eo.join(e.paths.hermesRoot(),"profiles"),h=0;se.existsSync(b)&&(h=se.readdirSync(b,{withFileTypes:!0}).filter(g=>g.isDirectory()).length),s("hermes_lanes","ok",h>0?`${h} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);{let g=eo.join(b,"oracle",".env"),y=[];if(se.existsSync(g)){let x=se.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 w=null;if(r){w=lr(process.env);for(let g of w.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(()=>(er(),Yn)),{probeSigner:v,probeQuote:E}=await Promise.resolve().then(()=>(Qn(),Zn)),[_,J,C,B]=await Promise.all([v(process.env),E(),y(),x()]);I=g({signerReachable:_,quote:J,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 T={ok:!i&&(w?w.ok:!0)&&(I?I.ok:!0),checks:o,...I?{firstHour:I}:{},...w?{agentic:{pct:w.pct,summary:w.summary,attributes:w.attributes,researchMode:w.researchMode}}:{}};if(t)process.stdout.write(JSON.stringify(T,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
|
-
`);
|
|
10
|
-
${
|
|
11
|
-
`)}return
|
|
9
|
+
`);w&&process.stdout.write(`
|
|
10
|
+
${w.summary}
|
|
11
|
+
`)}return T.ok?0:1}};export{dg as default};
|