@oracle-agent/oracle 0.35.9 → 0.35.11

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.
@@ -0,0 +1,10 @@
1
+ var j=Object.defineProperty;var l=(t,e,r)=>()=>{if(r)throw r[0];try{return t&&(e=t(t=0)),e}catch(a){throw r=[a],a}};var P=(t,e)=>{for(var r in e)j(t,r,{get:e[r],enumerable:!0})};var A=l(()=>{});var b=l(()=>{});var m=l(()=>{});var N=l(()=>{b();m()});import{isAddress as Se}from"ethers";var E=l(()=>{N();b();m()});import{Interface as G,isAddress as Te}from"ethers";var Ce,I=l(()=>{E();b();m();Ce=new G(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as J,isAddress as Le}from"ethers";var Me,Fe,$=l(()=>{E();b();m();Me=new J(["function approve(address spender,uint256 amount) returns (bool)"]),Fe=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});function V(t,e="value"){if(typeof t=="number"){if(!Number.isFinite(t))throw new Error(`${e} must be a finite number`);if(Math.abs(t)>Number.MAX_SAFE_INTEGER)throw new Error(`${e} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);if(Number.isInteger(t)&&!Number.isSafeInteger(t))throw new Error(`${e} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);return String(t)}if(typeof t=="string"){if(t!==t.trim())throw new Error(`${e} must be a number or decimal string`);return t}throw new Error(`${e} must be a number or decimal string`)}function T(t,e="amount"){if(typeof t=="bigint")return t;if(typeof t=="number"){if(!Number.isInteger(t))throw new Error(`${e} must be an integer`);if(!Number.isSafeInteger(t))throw new Error(`${e} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);return BigInt(t)}let r=V(t,e);if(r==="")throw new Error(`${e} is required`);if(!/^-?\d+$/.test(r)&&!/^0x[0-9a-fA-F]+$/.test(r))throw new Error(`${e} must be an integer in decimal or 0x-hex form, got ${JSON.stringify(r)}`);try{return BigInt(r)}catch{throw new Error(`${e} must be an integer, got ${JSON.stringify(r)}`)}}var _=l(()=>{});import{Interface as W,MaxUint256 as X,isAddress as z,keccak256 as Ve,toUtf8Bytes as We}from"ethers";function O(t,e){let r=String(t||"").trim();if(!z(r))throw new Error(`${e} must be an address`);return r.toLowerCase()}function Z(t,e="approval amount",{allowZero:r=!1}={}){let a=T(t,e);if(r?a<0n:a<=0n)throw new Error(`${e} must be positive`);if(a>=X)throw new Error("unlimited approvals are refused; use an exact bounded amount");return a.toString()}function S(t){let e=String(t||"").toLowerCase();return e.length<10?!1:K.has(e.slice(0,10))}function y(t){if(!S(t))throw new Error("approval calldata required");let e=String(t||"").toLowerCase(),r=e.slice(0,10),a=e.slice(10).match(/.{1,64}/g)||[],n=i=>a[i]?"0x"+a[i].slice(24):null,o=i=>a[i]?BigInt("0x"+a[i]):null,s=null,c=null,u=null;switch(r){case"0x095ea7b3":case"0x39509351":s=n(0),c=o(1);break;case"0x61f49ed6":case"0xeb5625d9":case"0xf9255c1f":u=n(0),s=n(1),c=o(2);break;case"0xd505accf":s=n(1),c=o(2);break;case"0x8fcbaf0c":{s=n(1),c=o(4)===0n?0n:(1n<<256n)-1n;break}case"0x87517c45":u=n(0),s=n(1),c=o(2);break;default:throw new Error(`approval selector ${r} is recognised but not decodable; refusing to bound it`)}if(s==null||c==null)throw new Error("invalid approve calldata");return{spender:O(s,"approval spender"),token:u==null?null:O(u,"approval token"),amount:Z(c,"approval amount",{allowZero:!0}),selector:r,additive:Y.has(r)}}var Qe,K,Y,C=l(()=>{A();I();$();_();m();Qe=new W(["function approve(address spender,uint256 amount) returns (bool)"]);K=new Set(["0x095ea7b3","0x39509351","0x61f49ed6","0xeb5625d9","0xf9255c1f","0x87517c45","0xd505accf","0x8fcbaf0c","0x2b67b570","0x2a2d80d1"]),Y=new Set(["0x39509351","0xf9255c1f"])});var F={};P(F,{CLEAR_SIGN_VERSION:()=>oe,DESCRIPTOR_DIR:()=>k,clearSignPreview:()=>fe,loadBundledDescriptors:()=>q,matchDescriptor:()=>D});import{readFileSync as Q,readdirSync as ee,existsSync as te}from"node:fs";import{dirname as re,join as L}from"node:path";import{fileURLToPath as ne}from"node:url";function q(t=k){if(!te(t))return[];let e=[];for(let r of ee(t).filter(a=>a.endsWith(".json")).sort()){let a=Q(L(t,r),"utf8"),n;try{n=JSON.parse(a)}catch(o){throw new Error(`clear-sign descriptor ${r} is not valid JSON: ${o.message}`)}e.push({file:r,doc:n})}return e}function D(t,{to:e=null,chainId:r=null}={},a=q()){let n=String(t||"").toLowerCase(),o=ie.test(n)?n.slice(0,10):null;if(!o)return null;let s=e&&se.test(String(e))?String(e).toLowerCase():null;for(let{file:c,doc:u}of a){let i=u?.display?.formats||{};for(let[d,f]of Object.entries(i)){if(String(f?.$selector||"").toLowerCase()!==o)continue;let p=u?.context?.contract?.deployments||[],g=p.length===0,h=p.some(v=>(r==null||Number(v.chainId)===Number(r))&&s&&String(v.address||"").toLowerCase()===s);if(g||h)return{file:c,signature:d,format:f,doc:u,selector:o,generic:g}}}return null}function M(t,e){let r=t.slice(e*64,e*64+64);return r.length===64?r:null}function ce(t,e){let r=M(t,e);return r?`0x${r.slice(24)}`:null}function R(t,e){let r=M(t,e);return r?BigInt(`0x${r}`).toString():null}function B(t){if(t==null)return"unknown";let e=BigInt(t);return e>=ue/2n?"UNLIMITED":e.toString()}function fe(t,{to:e=null,chainId:r=null}={},a=void 0){let n=D(t,{to:e,chainId:r},a);if(!n)return null;let o=String(t||"").toLowerCase(),s=o.slice(10),c=[],u=[];for(let i of n.format.fields||[]){if(i.visible==="never")continue;let d=i.$wordIndex,f=null;Number.isInteger(d)&&(f=i.format==="addressName"||i.format==="raw-address"?ce(s,d):i.format==="amount"||i.format==="tokenAmount"?B(R(s,d)):R(s,d)),f!=null&&(u.push({label:i.label,value:f}),c.push(`${i.label}: ${f}`))}if(S(o)){let i=null,d=null;try{i=y(o)}catch(f){let p=String(f?.message||f);if(/unlimited approvals are refused/i.test(p))d="ORACLE POLICY: unlimited approval \u2014 Oracle refuses to prepare this; bound the amount";else return{ok:!1,refused:`descriptor matched but reviewed decoder refused: ${p}`,intent:n.format.intent}}if(i){let f=u.find(h=>/spender/i.test(h.label))?.value?.toLowerCase();if(f&&i.spender&&f!==i.spender.toLowerCase())return{ok:!1,refused:"descriptor spender disagrees with reviewed decoder",intent:n.format.intent};let p=u.find(h=>/amount|allowance/i.test(h.label))?.value,g=B(i.amount);if(p!=null&&i.amount!=null&&String(p)!==g)return{ok:!1,refused:"descriptor amount disagrees with reviewed decoder",intent:n.format.intent}}return d&&c.push(d),{ok:!0,intent:n.format.intent,signature:n.signature,selector:n.selector,descriptor:n.file,generic:n.generic,fields:u,lines:c,...d?{policyNote:d}:{}}}return{ok:!0,intent:n.format.intent,signature:n.signature,selector:n.selector,descriptor:n.file,generic:n.generic,fields:u,lines:c}}var oe,ae,k,ie,se,ue,U=l(()=>{C();oe=1,ae=re(ne(import.meta.url)),k=L(ae,"descriptors"),ie=/^0x[0-9a-f]{8}/,se=/^0x[0-9a-fA-F]{40}$/;ue=(1n<<256n)-1n});import{parseArgs as de}from"node:util";var it={name:"clear-sign",summary:"ERC-7730 clear-sign preview for calldata",group:"read",usage:"oracle clear-sign <calldata> [--to 0x\u2026] [--chain-id N] [--json]",async run(t){let{values:e,positionals:r}=de({args:t.argv,options:{to:{type:"string"},"chain-id":{type:"string"},json:{type:"boolean"}},allowPositionals:!0,strict:!1}),a=r[0];if(!a||!/^0x[0-9a-fA-F]{8,}$/.test(a))return process.stderr.write(`oracle clear-sign: calldata (0x\u2026) required
2
+ `),1;let{clearSignPreview:n}=await Promise.resolve().then(()=>(U(),F)),o=n(a,{to:e.to||null,chainId:e["chain-id"]?Number(e["chain-id"]):null});if(!o){let s={ok:!1,match:!1,reason:"no bundled ERC-7730 descriptor covers this selector/destination"};return process.stdout.write(e.json?JSON.stringify(s)+`
3
+ `:`NO DESCRIPTOR \u2014 falls back to sign-time review
4
+ `),3}if(!o.ok){let s={ok:!1,match:!0,refused:o.refused,intent:o.intent};return process.stdout.write(e.json?JSON.stringify(s)+`
5
+ `:`REFUSED \u2014 ${o.refused}
6
+ `),2}if(e.json)process.stdout.write(JSON.stringify(o,null,1)+`
7
+ `);else{process.stdout.write(`${o.intent}${o.generic?" (token-generic)":""}
8
+ `);for(let s of o.lines)process.stdout.write(` ${s}
9
+ `);process.stdout.write(` [${o.descriptor} \xB7 ${o.selector}]
10
+ `)}return 0}};export{it as default};
@@ -1,8 +1,11 @@
1
- var Wt=Object.defineProperty;var o=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};var Me=(e,r)=>{for(var t in r)Wt(e,t,{get:r[t],enumerable:!0})};import G from"node:fs";import Gt from"node:os";import N from"node:path";import{fileURLToPath as Jt}from"node:url";function ae(){return process.env.ORACLE_FAKE_HOME||Gt.homedir()}function Kt(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function R(){return Kt()?process.env.ORACLE_CONFIG_DIR||N.join(ae(),".config","oracle"):N.join(ae(),".config","oracle")}function Yt(){return N.join(R(),"desk.json")}function Xt(){return N.join(R(),"env")}function C({force:e=!1}={}){if(C._done&&!e)return C._result||null;C._done=!0;let r={},t=(i,s)=>{if(s==null)return;let a=String(s).trim();a&&(process.env[i]!=null&&String(process.env[i]).trim()!==""||(process.env[i]=a,r[i]=a))};try{let i=Xt();if(G.existsSync(i))for(let s of G.readFileSync(i,"utf8").split(/\r?\n/)){let a=s.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!a||a[2].startsWith("#"))continue;let u=a[2];(u.startsWith('"')&&u.endsWith('"')||u.startsWith("'")&&u.endsWith("'"))&&(u=u.slice(1,-1)),t(a[1],u)}}catch{}try{let i=Yt();if(G.existsSync(i)){let s=JSON.parse(G.readFileSync(i,"utf8"));s&&typeof s=="object"&&(t("ORACLE_DESK_URL",s.deskUrl||s.dataUrl||s.url),t("ORACLE_DATA_URL",s.dataUrl||s.deskUrl||s.url),t("ORACLE_API_URL",s.apiUrl||s.dataUrl||s.deskUrl),t("ORACLE_PUBLIC_URL",s.publicUrl||s.deskUrl||s.dataUrl),t("ORACLE_EXEC_URL",s.execUrl),t("MAD_DESK_URL",s.deskUrl||s.dataUrl))}}catch{}let n=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return n&&(t("ORACLE_DESK_URL",n),t("ORACLE_DATA_URL",n),t("ORACLE_API_URL",n),t("ORACLE_PUBLIC_URL",n),t("MAD_DESK_URL",n)),C._result=Object.keys(r).length?r:null,C._result}var Vt,l,J=o(()=>{Vt=N.dirname(Jt(import.meta.url)),l=N.resolve(Vt,"../..");try{C()}catch{}});var me,Yn,Ve=o(()=>{me={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},Yn=new Map(Object.values(me).map(e=>[e.chainId,e]))});function j(e){let r=e?.transactionHash||e?.hash||e?.txid||null;return r?{happened:!0,hash:String(r),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}var he=o(()=>{});var Ke=o(()=>{});var Ye=o(()=>{});var U=o(()=>{});var $=o(()=>{});var Y=o(()=>{U();$()});import{isAddress as ao}from"ethers";var ge=o(()=>{Y();U();$()});import{Interface as Ar,isAddress as mo}from"ethers";var yo,Xe=o(()=>{ge();U();$();yo=new Ar(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as vr,isAddress as xo}from"ethers";var ko,Io,Qe=o(()=>{ge();U();$();ko=new vr(["function approve(address spender,uint256 amount) returns (bool)"]),Io=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var _=o(()=>{});import{Interface as kr,MaxUint256 as Lo,isAddress as Po,keccak256 as $o,toUtf8Bytes as Bo}from"ethers";var Uo,B=o(()=>{Ye();Xe();Qe();_();$();Uo=new kr(["function approve(address spender,uint256 amount) returns (bool)"])});var Ho,Wo,X=o(()=>{Ho=300*1e3,Wo=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var Z=o(()=>{B()});import{Address as Yo,NETWORK as Xo,OutScript as Qo,RawTx as Zo,SigHash as ei,TEST_NETWORK as ti,Transaction as ri}from"@scure/btc-signer";var be=o(()=>{});import{createHash as Ir}from"node:crypto";import{base58 as si}from"@scure/base";import{getCompiledTransactionMessageDecoder as ci}from"@solana/transaction-messages";var et,ui,Ee=o(()=>{et=e=>Ir("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),ui=new Map([[et("route"),{name:"route",prefixBytes:0}],[et("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});var tt=o(()=>{});var gi,xe=o(()=>{tt();gi=64*1024});var rt=o(()=>{xe()});var nt=o(()=>{rt()});var Oi,_i,Ae=o(()=>{_();nt();Oi=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"}),_i=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 Ri,ve=o(()=>{_();Ri="0x"+"00".repeat(32)});var Or,Di,ke=o(()=>{ve();_();Or=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Di=Object.freeze(Or.map(e=>e[0]))});var ee=o(()=>{_()});import{TypedDataEncoder as Ui,getAddress as zi,isAddress as Hi}from"ethers";var Cr,Nr,at=o(()=>{X();Cr=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Nr=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 Ji,ct=o(()=>{Ji=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var ut=o(()=>{});import{TypedDataEncoder as ts,getAddress as rs,isAddress as ns}from"ethers";var Rr,ls,Lr,ds,lt=o(()=>{xe();Y();ct();ut();X();Rr=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),ls=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),Lr=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"}]}),ds=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as ms,getAddress as hs}from"ethers";var ys,Ie=o(()=>{at();lt();ys=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as ft}from"ethers";var Fr,$s,qr,Bs,Ds,Ms,Fs,jr,qs,te=o(()=>{B();Y();X();Z();be();Ee();Ae();ke();ee();Ie();Fr=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),$s=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}),qr=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"}}),Bs=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Ds=new ft(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Ms=new ft(["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"]),Fs=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"}}),jr=Object.freeze([...Fr]),qs=Object.freeze({...qr})});import{encode as zs}from"@msgpack/msgpack";import{keccak256 as Ws,verifyTypedData as Gs}from"ethers";var Js,Vs,Te=o(()=>{Js=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Vs=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var Oe=o(()=>{ee()});import{ed25519 as ra}from"@noble/curves/ed25519.js";import{base58 as oa}from"@scure/base";import{RawTx as sa,SigHash as aa,Transaction as ca}from"@scure/btc-signer";import{Transaction as la,keccak256 as da,verifyTypedData as fa}from"ethers";var _e=o(()=>{Te();Oe()});import{base58 as ba}from"@scure/base";var re=o(()=>{te();Z();B();_e()});var mt=o(()=>{re();te()});var Na,Ra,La,D=o(()=>{Na=Object.freeze({N:1<<17,r:8,p:1}),Ra=256*1024*1024,La=16*1024});var $a,ht=o(()=>{$a=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 Ce}from"node:os";import{join as Ne}from"node:path";var wt,Hr,Fa,gt=o(()=>{wt=process.env.ORACLE_PUBLIC_DESKTOP==="1",Hr=wt?process.env.ORACLE_CONFIG_DIR||Ne(Ce(),".config","oracle"):Ne(Ce(),".config","oracle"),Fa=wt?Hr:Ne(Ce(),".config","mad-desk")});var Ha,Wa,Ga,yt=o(()=>{gt();Ha="0".repeat(64),Wa=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"}),Ga=Promise.resolve()});var Re=o(()=>{yt();_();D();re()});var Et=o(()=>{});var xt=o(()=>{});var St=o(()=>{xt();B()});import{Wallet as ac}from"ethers";import{base58 as uc}from"@scure/base";import{ed25519 as dc}from"@noble/curves/ed25519.js";import{NETWORK as pc,TEST_NETWORK as mc,WIF as hc,p2wpkh as wc}from"@scure/btc-signer";import{pubECDSA as yc}from"@scure/btc-signer/utils.js";var At=o(()=>{});var xc,Sc,Ac,vc,kc,Ic,Tc,Oc,_c,Cc,Nc,vt=o(()=>{Re();xc=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),Sc=Object.freeze(["binance","bybit","okx","coinbase"]),Ac=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),vc=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),kc=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Ic=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Tc=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Oc=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),_c=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),Cc=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),Nc=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var kt=o(()=>{D()});var Jr,It,oe=o(()=>{Jr=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}"]})}),It=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var Tt=o(()=>{oe()});var jc,Ot=o(()=>{oe();Tt();jc=256*1024});var _t=o(()=>{oe();Ot()});var Ct=o(()=>{D()});import w from"node:path";import Vr from"node:os";import{createHash as Kr,randomBytes as Nu}from"node:crypto";import{Interface as Le,keccak256 as Lu}from"ethers";import{Transaction as $u}from"@scure/btc-signer";import{ed25519 as Du}from"@noble/curves/ed25519.js";function Nt(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||w.join(process.env.XDG_STATE_HOME||w.join(Vr.homedir(),".local","state"),"oracle"),t=Kr("sha256").update(w.resolve(e)).digest("hex").slice(0,16);return{vault:w.join(e,"vault.json"),policy:w.join(e,"signer-policy.json"),policyKey:w.join(e,"policy-integrity-key"),policyAnchor:w.join(r,`signer-policy-${t}.high-water`),ledger:w.join(e,"signer-ledger.json"),ledgerAnchor:w.join(r,`signer-ledger-${t}.high-water`),cexOrders:w.join(e,"cex-orders.json"),cexOrdersAnchor:w.join(r,`cex-orders-${t}.high-water`),token:w.join(e,"signer-token"),lock:w.join(r,`signer-${t}.lock`)}}var dl,fl,pl,Rt=o(()=>{mt();re();D();ht();Re();Et();B();St();te();Z();_e();Ae();ke();ee();Oe();ve();Te();be();Ee();Ie();At();vt();kt();_t();Ct();dl=new Le(["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"]),fl=new Le(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),pl=new Le(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import Pe from"node:fs";import Lt from"node:path";import{homedir as Yr}from"node:os";function Xr(){return process.env.ORACLE_CONFIG_DIR||Lt.join(Yr(),".config","oracle")}function z(){let e=Nt(Lt.join(Xr(),"signer")),r=Pe.existsSync(e.vault),t=Pe.existsSync(e.lock),n=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:Pe.existsSync(e.policy),armed:r&&!t,disarmed:t,capabilities:{swap:n,bridge:n},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var vl,$e=o(()=>{he();Ke();Rt();D();vl=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 ie(e){return String(e||"").trim()||void 0}function Zr(e,{required:r=!1}={}){let t=ie(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!Qr.has(t))throw new Error(`unsupported provider: ${t}`);return t}function en(e,{required:r=!1}={}){let t=ie(e);if(!t){if(r)throw new Error("model is required");return}if(t.includes("..")||t.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(t))throw new Error("invalid model id");return t}function tn(e){let r=ie(e);if(!r||r.length>2048)throw new Error("invalid custom base URL");let t;try{t=new URL(r)}catch{throw new Error("invalid custom base URL")}let n=t.hostname.toLowerCase().replace(/^\[|\]$/g,""),i=n==="localhost"||n==="127.0.0.1"||n==="::1";if(t.protocol!=="https:"&&!(t.protocol==="http:"&&i)||t.username||t.password||t.search||t.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return t.toString().replace(/\/+$/,"")}function Pt({provider:e,model:r,baseUrl:t}={},{requireModel:n=!1}={}){let i=Zr(e),s=en(r,{required:n});if(i==="custom")return{provider:i,...s?{model:s}:{},baseUrl:tn(t)};if(ie(t))throw new Error("baseUrl is only supported for the custom provider");return{...i?{provider:i}:{},...s?{model:s}:{}}}var Qr,$t=o(()=>{Qr=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"])});import Bt from"node:fs";import rn from"node:path";function on(){return rn.join(R(),"model.json")}function M(e){return String(e||"").trim()||void 0}function sn(e={}){let r=M(e.backend)?.toLowerCase()||"auto",t=Pt({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),n=M(e.apiKeyEnv),i=Number.parseInt(String(e.contextLength||""),10),s=M(e.reasoningEffort),a=M(e.computeHost||e.remoteHost),u=M(e.computeUser||e.remoteUser),f=M(e.computePath||e.remotePath);if(!nn.has(r))throw new Error(`unsupported backend: ${r}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(r))throw new Error("remote compute backends are disabled in the public desktop");if(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))throw new Error("api key env must be an uppercase environment variable name");if(r==="remote"&&!a)throw new Error("remote backend requires computeHost");return{backend:r,...t,...n?{apiKeyEnv:n}:{},...Number.isFinite(i)&&i>0?{contextLength:i}:{},...s?{reasoningEffort:s}:{},...a?{computeHost:a}:{},...u?{computeUser:u}:{},...f?{computePath:f}:{}}}function Dt(){let e=on();if(!Bt.existsSync(e))return null;try{return sn(JSON.parse(Bt.readFileSync(e,"utf8")))}catch{return null}}var nn,Mt=o(()=>{J();$t();nn=new Set(["auto","standalone","hermes","remote","arch"])});var Ft={};Me(Ft,{classifyReceipt:()=>j,configDir:()=>ln,firstHourReport:()=>Be,venueMap:()=>se});import an from"node:path";import{homedir as cn}from"node:os";function ln(e=process.env){return e.ORACLE_CONFIG_DIR||an.join(cn(),".config","oracle")}function se({env:e=process.env,vault:r=null}={}){let t=r||z(),n=[];for(let[i,s]of Object.entries(me)){let a=(s.rpcEnv||[]).some(f=>String(e[f]||"").trim()),u="prepare";s.evm?a&&(u="live"):u="unavailable",n.push({key:i,chainId:s.chainId,name:s.name,family:"evm",status:u,execute:!!(t.vaultExists&&t.armed&&!t.disarmed),note:a?"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 Be({env:e=process.env,model:r=Dt(),vault:t=z(),signerReachable:n=!1,quote:i=null}={}){let s=[],a=(p,g,T,S=null)=>s.push({id:p,status:g,detail:T,fix:S}),u=(()=>{let[p,g]=process.versions.node.split(".").map(Number);return p>20||p===20&&g>=19})();a("node",u?"ok":"fail",`node ${process.versions.node}`,u?null:"install node >= 20.19"),r?r.backend==="hermes"?a("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):a("model","ok",`${r.backend||"auto"} ${r.provider||""} ${r.model||""}`.trim()):a("model","fail","no model.json","oracle setup model"),t.vaultExists?t.disarmed?a("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):a("vault",t.armed?"ok":"warn",t.armed?"present, armed":"present, not armed"):a("vault","fail","no local vault","oracle sign init");let f=e.ORACLE_SIGNER_HOST||"127.0.0.1";return un.has(f)?a("signer",n?"ok":"warn",n?`loopback ${f}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):a("signer","fail",`signer host ${f} is not loopback`,"unset ORACLE_SIGNER_HOST"),i?i.ok?a("quote","ok",i.detail||"net quote returned"):a("quote","warn",i.detail||"quote unavailable","check network / oracle data serve"):a("quote","warn","quote not probed",null),{ok:!s.some(p=>p.status==="fail"),checks:s,venues:se({env:e,vault:t})}}var un,De=o(()=>{Ve();$e();Mt();he();un=new Set(["127.0.0.1","::1","localhost"])});var qt={};Me(qt,{classifyReceipt:()=>j,default:()=>pn,firstHourReport:()=>Be,probeQuote:()=>fn,probeSigner:()=>dn,vaultStatus:()=>z});async function dn(e=process.env){let r=e.ORACLE_SIGNER_HOST||"127.0.0.1",t=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${r}:${t}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}async function fn(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let t=(await e.json())?.pairs?.[0];return!t?.chainId||!t?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${t.chainId} ${t.baseToken?.symbol}/${t.quoteToken?.symbol} $${t.priceUsd}`}}catch(e){return{ok:!1,detail:e instanceof Error?e.message:"quote failed"}}}var pn,jt=o(()=>{De();$e();pn={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let r=e.argv.includes("--json"),t=se();if(r)return process.stdout.write(`${JSON.stringify({venues:t},null,2)}
2
- `),0;for(let n of t)process.stdout.write(`${n.status.padEnd(12)} ${n.key.padEnd(16)} ${n.name} exec=${n.execute?"local":"no"}
3
- `);return 0}}});import F from"node:fs";import Ut from"node:path";import qe from"node:fs";import L from"node:path";J();var Zt="0.19.0",kn=`hermes-agent==${Zt}`;var Fe="0.12.1",In=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Fe}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Fe}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function er(){return L.join(R(),"runtime")}function tr(){return L.join(er(),"venv")}function rr(e){let r=process.platform==="win32"?"Scripts":"bin",t=process.platform==="win32"?`${e}.exe`:e;return L.join(tr(),r,t)}function nr(){return rr("hermes")}function or(e){let r=process.platform==="win32"&&!L.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let t of(process.env.PATH||"").split(L.delimiter))if(t)for(let n of r){let i=L.join(t,`${e}${n}`);try{if(qe.existsSync(i))return i}catch{}}return null}function je(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=nr();if(qe.existsSync(e))return{ok:!0,bin:e,source:"managed"};let r=or("hermes");return r?{ok:!0,bin:r,source:"path"}:{ok:!1,bin:null,source:null}}import O from"node:fs";import d from"node:path";J();import{existsSync as ze,readFileSync as ir}from"node:fs";import{dirname as Ue,join as ce}from"node:path";import{fileURLToPath as sr}from"node:url";function ar(e){let r=Ue(sr(e));for(let t=0;t<8;t+=1){let n=ce(r,"package.json");if(ze(n))try{let s=JSON.parse(ir(n,"utf8"));if(s&&typeof s.version=="string")return r}catch{}let i=Ue(r);if(i===r)break;r=i}throw new Error(`oracle: could not resolve package root from ${e}`)}function He(e,r){let t=ar(r),n=ce(t,e);return ze(n)?n:ce(t,"dist","assets",e)}var cr=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 We(){return cr.filter(e=>e.website)}var ue=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function le(e=process.env){let r=String(e?.ORACLE_RESEARCH_MODE??e?.ORACLE_RLM_MODE??"").trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"||r==="research"}var P=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"]),ur="deny",Pn=256*1024;var $n=Object.freeze({version:1,source:"default",defaultDecision:ur,allow:P,deny:Object.freeze([])});var lr=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"]),Bn=new Set(lr);var de=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),Mn=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"}),x=(e,r=0,t=1)=>Math.min(t,Math.max(r,e)),b=e=>Number.isFinite(Number(e))?Number(e):null,dr=e=>Math.round(e*1e4)/1e4;function E(e,r,t,n=!0){!n||t===null||!Number.isFinite(t)||e.push({feature:r,value:dr(t)})}function fr(e,r){let t=b(e.repeatBuys??e.repeat_buys??e.buyCount),n=b(e.walletWinRate??e.winRate);E(r,"repeat_buys",t===null?null:x((t-1)/4)*.38),E(r,"wallet_win_rate",n===null?null:(x(n)-.5)*.5)}function pr(e,r){let t=b(e.ageHours??e.poolAgeHours),n=b(e.liquidityUsd??e.liquidity),i=e.liquidityLocked??e.locked;E(r,"pool_age",t===null?null:t<24?-.42:x(t/720)*.12),E(r,"liquidity",n===null?null:(x(Math.log10(Math.max(1,n))/7)-.5)*.28),E(r,"liquidity_lock",i==null?null:i?.12:-.28)}function mr(e,r){let t=b(e.floorChange??e.floorChangePct),n=b(e.sales??e.saleCount);E(r,"floor_change",t===null?null:x(t,-1,1)*.35),E(r,"sales_depth",n===null?null:x(n/50)*.18)}function hr(e,r){let t=b(e.flowImbalance??e.imbalance),n=b(e.fundingRate??e.funding);E(r,"flow_imbalance",t===null?null:x(t,-1,1)*.42),E(r,"funding",n===null?null:-x(n*100,-1,1)*.12)}function wr(e,r){let t=b(e.marketProbability??e.marketPrice??e.probability),n=b(e.fairProbability??e.referenceProbability??e.fairValue);E(r,"probability_mispricing",t===null||n===null?null:x(n-t,-1,1)*.65);let i=b(e.liquidityUsd??e.liquidity);E(r,"market_liquidity",i===null?null:x(Math.log10(Math.max(1,i))/6)*.12)}var Fn=Object.freeze({wallet:fr,pool:pr,nft_floor:mr,hl_flow:hr,prediction_market:wr});function fe(e){try{return O.existsSync(e)}catch{return!1}}function V(e){for(let r of e)if(r&&fe(r))return r;return null}function pe(e){try{return He(e,import.meta.url)}catch{return null}}function gr(){let e=[d.join(l,"dist/data/desk-data.mjs"),d.join(l,"data/desk-data.mjs"),d.join(l,"src/data/desk-data.mjs")];for(let n of e)if(fe(n))try{let s=O.readFileSync(n,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],a=new Set(s.map(u=>u.toLowerCase()));if(a.size>=20)return{count:a.size,detail:`${a.size} provider ids (bundled desk-data)`}}catch{}let r=[d.join(l,"src/data/providers"),d.join(l,"dist/data/providers"),d.join(l,"data/providers")],t=V(r);if(!t)return{count:0,detail:"providers dir missing"};try{let n=O.readdirSync(t).filter(i=>i.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 Ge(){let e=V([pe("skills"),d.join(l,"skills"),d.join(l,"dist/assets/skills"),d.join(l,"assets/skills")]);if(!e)return{count:0,trading:[],building:[]};let r=O.readdirSync(e),t=r.filter(i=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(i)),n=r.filter(i=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(i));return{count:r.length,trading:t,building:n}}function yr(){let e=V([pe("protocols/templates"),d.join(l,"protocols/templates"),d.join(l,"dist/assets/protocols/templates"),d.join(l,"assets/protocols/templates")]);return e?O.readdirSync(e).filter(t=>!t.startsWith(".")):Ge().building.some(t=>/protocol-builder|dex-launch|token-launch/i.test(t))?["(via skills: protocol-builder / launch packs)"]:[]}function br(){let e=V([pe("profiles"),d.join(l,"profiles"),d.join(l,"dist/assets/profiles"),d.join(l,"assets/profiles")]);return e?O.readdirSync(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&!r.name.startsWith("_")).map(r=>r.name):[]}function Er(){try{if(P.includes("trade_lifecycle")&&!P.some(r=>/broadcast|wallet_sign/.test(r)))return!0}catch{}let e=[d.join(l,"src/capability-posture.mjs"),d.join(l,"dist/capability-posture.mjs"),d.join(l,"capability-posture.mjs"),d.join(l,"dist/public-control/policy-schema.mjs"),d.join(l,"README.md"),d.join(l,"package.json")];for(let r of e)if(fe(r))try{let t=O.readFileSync(r,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(t))return!0}catch{}return!1}function Je(e=process.env){let r=[],t=(c,h,v,q=1)=>{r.push({id:c,status:h,detail:v,weight:q})},[n,i]=process.versions.node.split(".").map(Number),s=n>20||n===20&&i>=19;t("node",s?"ok":"fail",`node ${process.versions.node}`,2);let u=["oracle_cli","research_delegate","trade_lifecycle","signal_score","skill_load","learn_skill","code_eval","cron_add","web_fetch"].filter(c=>!P.includes(c));t("agent_tools",u.length===0?"ok":"warn",u.length===0?`safe tools ${P.length}; signal_score present`:`missing tools: ${u.join(",")}`,3),t("research_attributes","ok",`attrs [${ue.join(", ")}]; mode=${le(e)?"ON":"off"}`,2);let f=gr();t("providers",f.count>=40?"ok":f.count>=10?"warn":"fail",f.detail,3);let y=Ge();t("skills_trading_build",y.trading.length>=5&&y.building.length>=4?"ok":y.count>=10?"warn":"fail",`${y.count} skills; trading=${y.trading.length} building=${y.building.length}`,3);let p=yr();t("protocol_templates",p.length>=2?"ok":"warn",p.length?p.join(", "):"none",2);let g=br();t("profiles",g.includes("protocol-builder")&&g.includes("oracle")?"ok":g.length>=1?"warn":"fail",g.join(", ")||"none",2),t("signals_engine",de.length>=4?"ok":"fail",`types: ${de.join(", ")} (cold / no hot exec)`,2);let T=We();t("harness_roster",T.length>=8?"ok":"warn",`${T.length} supported harnesses; Oracle native default; MCP inbound only`,2),t("custody_prepare_only",Er()?"ok":"fail","public plane prepare-only",4);let S=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";t("data_url","ok",S,1);let k=0,I=0;for(let c of r)I+=c.weight,c.status==="ok"?k+=c.weight:c.status==="warn"&&(k+=c.weight*.5);let m=I?Math.round(k/I*100):0,A=!r.some(c=>c.status==="fail")&&m>=70,H=A?`AGENTIC READY ${m}% \u2014 Oracle is the crypto control plane (prepare-only); pair coding harnesses via MCP for build.`:`AGENTIC GAPS ${m}% \u2014 fix fail/warn checks before calling Oracle the default crypto harness.`;return{ok:A,score:k,max:I,pct:m,summary:H,researchMode:le(e),attributes:[...ue],packageRoot:l,checks:r}}function zt(){let[e,r]=process.versions.node.split(".").map(Number);return e>20||e===20&&r>=19}function mn(e){if(!F.existsSync(e))return{};let r={};for(let t of F.readFileSync(e,"utf8").split(/\r?\n/)){let n=t.match(/^([A-Z0-9_]+)=(.*)$/);n&&(r[n[1]]=n[2])}return r}async function hn(e){let r=e.replace(/\/$/,"");return(await Promise.all(["/health","/public/health"].map(async n=>{try{return(await fetch(r+n)).ok}catch{return!1}}))).some(Boolean)}var Hl={name:"doctor",summary:"check the read plane (+ optional --agentic readiness score)",group:"read",usage:"oracle doctor [--json] [--agentic] [--first-hour]",async run(e){let r=e.argv.includes("--json"),t=e.argv.includes("--agentic"),n=e.argv.includes("--first-hour"),i=[],s=!1,a=(c,h,v,q=null)=>{i.push({id:c,status:h,detail:v,fix:q}),h==="fail"&&(s=!0)};a("node",zt()?"ok":"fail",`node ${process.versions.node}`,zt()?null:"install node >= 20.19");let u=e.paths.oracleExecEnvPath(),f=mn(u),y=process.env.ORACLE_ROUTE_ATTESTATION_SECRET||process.env.MAD_ROUTE_ATTESTATION_SECRET||process.env.ORACLE_ATTESTATION_SECRET||process.env.ORACLE_STAMP_HMAC_SECRET||f.ORACLE_ROUTE_ATTESTATION_SECRET||f.MAD_ROUTE_ATTESTATION_SECRET||f.ORACLE_ATTESTATION_SECRET||f.ORACLE_STAMP_HMAC_SECRET;a("attestation_secret",y?"ok":"warn",y?"present":"missing",y?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let p=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",g=await hn(p),T=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;a("data_server",g?"ok":"warn",g?`reachable ${p}${T?` (${T})`:""}`:`down ${p}`,g?null:p.includes("127.0.0.1")||p.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 S=je();a("harness_model","ok","Oracle native harness is default; external harnesses are inbound MCP only (oracle harness detect)",null),a("hermes_opt_in","ok",S.ok?`detected ${S.bin} (${S.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let k=Ut.join(e.paths.hermesRoot(),"profiles"),I=0;F.existsSync(k)&&(I=F.readdirSync(k,{withFileTypes:!0}).filter(c=>c.isDirectory()).length),a("hermes_lanes","ok",I>0?`${I} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);{let c=Ut.join(k,"oracle",".env"),h=[];if(F.existsSync(c)){let v=F.readFileSync(c,"utf8");/^TELEGRAM_BOT_TOKEN=.+/m.test(v)&&h.push("telegram"),/^DISCORD_BOT_TOKEN=.+/m.test(v)&&h.push("discord"),/^SLACK_BOT_TOKEN=.+/m.test(v)&&h.push("slack")}h.length?S.ok?a("messaging","ok",`${h.join("/")} configured \xB7 runtime ${S.source}`,null):a("messaging","warn",`${h.join("/")} token set but messaging runtime missing \u2014 bot cannot answer`,"oracle bootstrap, then oracle setup gateway restart"):a("messaging","ok","no channel tokens configured (optional \u2014 oracle setup)",null)}let m=null;if(t){m=Je(process.env);for(let c of m.checks)a(`agentic_${c.id}`,c.status,c.detail,null)}let A=null;if(n){let{firstHourReport:c}=await Promise.resolve().then(()=>(De(),Ft)),{probeSigner:h,probeQuote:v}=await Promise.resolve().then(()=>(jt(),qt)),[q,Ht]=await Promise.all([h(process.env),v()]);A=c({signerReachable:q,quote:Ht});for(let W of A.checks)a(`hour_${W.id}`,W.status,W.detail,W.fix)}let H={ok:!s&&(m?m.ok:!0)&&(A?A.ok:!0),checks:i,...A?{firstHour:A}:{},...m?{agentic:{pct:m.pct,summary:m.summary,attributes:m.attributes,researchMode:m.researchMode}}:{}};if(r)process.stdout.write(JSON.stringify(H,null,2)+`
4
- `);else{for(let c of i)process.stdout.write(`${c.status.toUpperCase().padEnd(4)} ${c.id}: ${c.detail}
5
- `),c.fix&&process.stdout.write(` fix: ${c.fix}
6
- `);m&&process.stdout.write(`
7
- ${m.summary}
8
- `)}return H.ok?0:1}};export{Hl as default};
1
+ var In=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 be=(e,t)=>{for(var r in t)In(e,r,{get:t[r],enumerable:!0})};import Ee from"node:fs";import Tn from"node:os";import X from"node:path";import{fileURLToPath as On}from"node:url";function Me(){return process.env.ORACLE_FAKE_HOME||Tn.homedir()}function Cn(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function Q(){return Cn()?process.env.ORACLE_CONFIG_DIR||X.join(Me(),".config","oracle"):X.join(Me(),".config","oracle")}function Nn(){return X.join(Q(),"desk.json")}function Rn(){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=Rn();if(Ee.existsSync(o))for(let i of Ee.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=Nn();if(Ee.existsSync(o)){let i=JSON.parse(Ee.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,xe=l(()=>{_n=X.dirname(On(import.meta.url)),S=X.resolve(_n,"../..");try{Y()}catch{}});function Kt(e){return ro.get(Number(e))||null}function Yt(e,t=process.env){let r=Kt(e);if(!r)return null;for(let n of r.rpcEnv){let o=(t[n]||"").trim();if(o)return o}return null}var Ae,ro,Ge=l(()=>{Ae={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}},ro=new Map(Object.values(Ae).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 Je=l(()=>{});var Xt=l(()=>{});var Qt=l(()=>{});var ae=l(()=>{});var te=l(()=>{});var ke=l(()=>{ae();te()});import{isAddress as ua}from"ethers";var Ke=l(()=>{ke();ae();te()});import{Interface as io,isAddress as ha}from"ethers";var ba,Zt=l(()=>{Ke();ae();te();ba=new io(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as so,isAddress as Sa}from"ethers";var Ia,Ta,er=l(()=>{Ke();ae();te();Ia=new so(["function approve(address spender,uint256 amount) returns (bool)"]),Ta=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var z=l(()=>{});import{Interface as ao,MaxUint256 as $a,isAddress as Pa,keccak256 as Ba,toUtf8Bytes as Fa}from"ethers";var za,H=l(()=>{Qt();Zt();er();z();te();za=new ao(["function approve(address spender,uint256 amount) returns (bool)"])});var Wa,Ga,Ie=l(()=>{Wa=300*1e3,Ga=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var Te=l(()=>{H()});import{Address as Xa,NETWORK as Qa,OutScript as Za,RawTx as ec,SigHash as tc,TEST_NETWORK as rc,Transaction as nc}from"@scure/btc-signer";var Qe=l(()=>{});import{createHash as co}from"node:crypto";import{base58 as ac}from"@scure/base";import{getCompiledTransactionMessageDecoder as uc}from"@solana/transaction-messages";var tr,lc,Ze=l(()=>{tr=e=>co("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),lc=new Map([[tr("route"),{name:"route",prefixBytes:0}],[tr("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});import W from"node:net";import uo from"node:dns";function Oe(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 et(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 tt(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=Oe(e);if(!t)return!1;let r=Oe("::ffff:0:0");return et(t,r,96)?tt([...t.slice(12)].join(".")):et(t,Oe("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,i])=>et(t,Oe(o),i)):!1}return!1}function fo(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(lo.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=W.isIP(r);return n!==0&&!tt(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:n!==0}}async function rt(e,{lookupFn:t=uo.promises.lookup}={}){let r=fo(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=>!tt(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function nt({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=po((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 po(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[ot]=Object.freeze({pin:t}),e}function it(e){return typeof e=="function"&&typeof e[ot]?.pin=="function"}function rr(e,t,r){if(!it(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[ot].pin(t,r)}var lo,ot,nr=l(()=>{lo=new Set(["localhost","metadata.google.internal","metadata.goog"]);ot=Symbol.for("oracle.egressGuard.pinCapableFetch")});import{createHash as or}from"node:crypto";function yo(e){let t=String(e||"").toLowerCase();return dr.includes(t)||/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(t)}function bo(e){let t={};for(let[r,n]of Object.entries(e||{}))yo(r)||(t[r]=n);return t}function Eo(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 xo(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function cr(e){let t=String(e?.method||"");return t?!So.test(t):!1}function vo(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(cr):!r||typeof r!="object"?!1:r.jsonrpc&&r.method?cr(r):typeof r.type=="string"&&Ao.has(r.type)&&r.action==null&&r.signature==null&&r.nonce==null}function ko(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([...dr,...s])].sort().map(f=>`${f}=${i[f]??""}`).join(`
2
+ `),p=or("sha256").update(a).digest("hex").slice(0,32),m=`${n.untrustedUrl?"untrusted":"trusted"}:${n.maxResponseBytes??"unbounded"}`,c=o==null?"-":or("sha256").update(String(o)).digest("hex").slice(0,32);return`${e} ${t} ${m} ${p} ${c}`}function Io(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,sr):Math.min(250*2**e,sr)+Math.floor(Math.random()*100)}function ue(e,t={}){let r=new Error(e);return r.retryable=!1,Object.assign(r,t),r}function at(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 Oo(e){return e?e.byteLength??e.length??0:0}async function ur(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 at(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 at(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+=Oo(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 at(r,`streamed ${a} bytes`,t);let m=Buffer.concat(d);return(p?m.subarray(0,t):m).toString("utf8")}function lr(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&&!it(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 rt(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 nt({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 rr(I,E,v.addresses);return v};try{let y=String(e),x={...n||{}};a&&await g(y);for(let v=0;v<=ar;v+=1){let E=await I(y,{method:r,headers:x,body:o,signal:w,redirect:"manual"});if(wo.has(E.status)){if(r!=="GET"&&r!=="HEAD"){let L=await ur(E,p??go,{url:y,truncate:!0}),M=new Error(`HTTP ${E.status} ${r} ${y} redirected non-idempotent request`);throw M.status=E.status,M.body=lr(L)??L.slice(0,300),M}if(v===ar)throw le(E),new Error(`HTTP redirect loop for ${e}`);let C=E.headers?.get?.("location"),B;try{B=Eo(C,y)}catch(L){throw le(E),L}let F=!xo(B,y);if(le(E),F&&(x=bo(x)),a)await g(B,{status:E.status});else if(F){let L=await rt(B,O);if(!L.ok){let M=new Error(`HTTP redirect from ${y} ${L.error}`);throw M.status=E.status,M.retryable=!1,M}d&&L.addresses?.length&&(h||(h=await nt(m?{importUndici:m}:{})),h&&(h.pin(new URL(B).hostname,L.addresses),I=h.fetch))}y=B;continue}if(typeof c=="function")try{await c(E,{url:y})}catch(C){throw le(E),ue(C?.message||String(C))}let _=await ur(E,p,{url:y,onOversize:()=>u.abort()}),K=lr(_);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 _e(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):ho,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(_)||mo.has(_)&&ir.has(o):!K&&ir.has(o);if(v===d||!B)throw E;let F=Io(v,E?.retryAfter);u?await new Promise((L,M)=>{let kn=setTimeout(L,F);u.addEventListener("abort",()=>{clearTimeout(kn),M(u.reason||new DOMException("Aborted","AbortError"))},{once:!0})}):await To(F)}}throw x};if(!(t.dedupe!==!1&&!u&&vo(o,s)))return h();let O=ko(o,e,i,{untrustedUrl:m,maxResponseBytes:w},s),g=st.get(O);if(g)return g;let y=h().finally(()=>st.delete(O));return st.set(O,y),y}var mo,ir,ho,sr,dr,wo,ar,go,st,So,Ao,To,Ce=l(()=>{nr();mo=new Set([408,425,429,500,502,503,504]),ir=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),ho=2,sr=4e3,dr=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],wo=new Set([301,302,303,307,308]),ar=3,go=64*1024;st=new Map,So=/(?:^|_)(send|submit|broadcast|sign|requestAirdrop)(?=[A-Z_]|$)/i,Ao=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);To=e=>new Promise(t=>setTimeout(t,e))});var fr=l(()=>{Ce()});var pr=l(()=>{fr()});var Tc,Oc,ut=l(()=>{z();pr();Tc=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"}),Oc=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 Nc,lt=l(()=>{z();Nc="0x"+"00".repeat(32)});var Co,Bc,dt=l(()=>{lt();z();Co=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Bc=Object.freeze(Co.map(e=>e[0]))});var Ne=l(()=>{z()});import{TypedDataEncoder as qc,getAddress as Uc,isAddress as zc}from"ethers";var Ro,Lo,gr=l(()=>{Ie();Ro=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Lo=Object.freeze({Order:[{name:"salt",type:"uint256"},{name:"maker",type:"address"},{name:"receiver",type:"address"},{name:"makerAsset",type:"address"},{name:"takerAsset",type:"address"},{name:"makingAmount",type:"uint256"},{name:"takingAmount",type:"uint256"},{name:"makerTraits",type:"uint256"}]})});var Gc,yr=l(()=>{Gc=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var br=l(()=>{});import{TypedDataEncoder as eu,getAddress as tu,isAddress as ru}from"ethers";var $o,uu,Po,lu,Er=l(()=>{Ce();ke();yr();br();Ie();$o=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),uu=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),Po=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"}]}),lu=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as pu,getAddress as mu}from"ethers";var gu,ft=l(()=>{gr();Er();gu=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as Sr}from"ethers";var qo,$u,Uo,Pu,Bu,Fu,Du,zo,Mu,Re=l(()=>{H();ke();Ie();Te();Qe();Ze();ut();dt();Ne();ft();qo=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),$u=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}),Uo=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"}}),Pu=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Bu=new Sr(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Fu=new Sr(["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"]),Du=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"}}),zo=Object.freeze([...qo]),Mu=Object.freeze({...Uo})});import{encode as Uu}from"@msgpack/msgpack";import{keccak256 as Hu,verifyTypedData as Wu}from"ethers";var Gu,Ju,pt=l(()=>{Gu=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Ju=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var mt=l(()=>{Ne()});import{ed25519 as tl}from"@noble/curves/ed25519.js";import{base58 as nl}from"@scure/base";import{RawTx as il,SigHash as sl,Transaction as al}from"@scure/btc-signer";import{Transaction as ul,keccak256 as ll,verifyTypedData as dl}from"ethers";var ht=l(()=>{pt();mt()});import{base58 as yl}from"@scure/base";var Le=l(()=>{Re();Te();H();ht()});var vr=l(()=>{Le();Re()});var Cl,Nl,Rl,re=l(()=>{Cl=Object.freeze({N:1<<17,r:8,p:1}),Nl=256*1024*1024,Rl=16*1024});var $l,kr=l(()=>{$l=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 wt}from"node:os";import{join as gt}from"node:path";var Ir,Go,Dl,Tr=l(()=>{Ir=process.env.ORACLE_PUBLIC_DESKTOP==="1",Go=Ir?process.env.ORACLE_CONFIG_DIR||gt(wt(),".config","oracle"):gt(wt(),".config","oracle"),Dl=Ir?Go:gt(wt(),".config","mad-desk")});var zl,Hl,Wl,Or=l(()=>{Tr();zl="0".repeat(64),Hl=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"}),Wl=Promise.resolve()});var yt=l(()=>{Or();z();re();Le()});var Cr=l(()=>{});var Lr={};be(Lr,{SIGN_TIME_REVIEW_VERSION:()=>Jo,SignTimeReviewSecretError:()=>de,createSignTimeReview:()=>Rr});function bt(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string"){let o=e.trim().split(/\s+/);if(Qo.test(e)||Zo.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)=>bt(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(Xo.test(i))throw new de(`${t}.${o}`);e[o]!==void 0&&(n[o]=bt(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(!Vo.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 Et(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 Nr(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))Nr(t);Object.freeze(e)}return e}function ei(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:Et(String(n),`${t}.reason`)}}function ti(e){if(!Array.isArray(e))throw new TypeError("sign-time review: policyChecks must be an array");let t=e.map((n,o)=>ei(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 ri(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:Et(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 ni(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:Et(String(fe(t.asset??t.token,`assetDeltas[${r}].asset`)),`assetDeltas[${r}].asset`),before:n,after:o,delta:s}})}function oi(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 Rr(e={}){G(e,"input");let t=bt(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(!Yo.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(!Ko.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=ti(m?t.policyChecks:[]),f=ri(t.simulation),u=ni(t.assetDeltas),b=oi(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 Nr(x)}var Jo,Vo,Ko,Yo,Xo,Qo,Zo,de,xt=l(()=>{Jo=1,Vo=/^0x[0-9a-f]{40}$/,Ko=/^0x(?:[0-9a-f]{2})*$/,Yo=/^(?:0x)?[0-9a-f]{64}$/,Xo=/(privatekey|privkey|secretkey|seedphrase|mnemonic|passphrase|password|keystore|keymaterial|wif|xprv|xpriv|bearer|authorization|signature|apikey|credential)/i,Qo=/\b(?:[5KL][1-9A-HJ-NP-Za-km-z]{50,51}|xprv[0-9A-Za-z]{50,})\b/,Zo=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{dirname as ii,join as si}from"node:path";import{fileURLToPath as ai}from"node:url";var ci,nd,od,$r=l(()=>{H();ci=ii(ai(import.meta.url)),nd=si(ci,"descriptors"),od=(1n<<256n)-1n});var Pr=l(()=>{xt();H();$r()});import{Wallet as fd}from"ethers";import{base58 as md}from"@scure/base";import{ed25519 as wd}from"@noble/curves/ed25519.js";import{NETWORK as yd,TEST_NETWORK as bd,WIF as Ed,p2wpkh as xd}from"@scure/btc-signer";import{pubECDSA as Ad}from"@scure/btc-signer/utils.js";var Br=l(()=>{});var Id,Td,Od,_d,Cd,Nd,Rd,Ld,$d,Pd,Bd,Fr=l(()=>{yt();Id=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),Td=Object.freeze(["binance","bybit","okx","coinbase"]),Od=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),_d=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),Cd=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Nd=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Rd=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Ld=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),$d=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),Pd=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),Bd=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var Dr=l(()=>{re()});var di,Mr,Pe=l(()=>{di=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}"]})}),Mr=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var jr=l(()=>{Pe()});var Gd,qr=l(()=>{Pe();jr();Gd=256*1024});var Ur=l(()=>{Pe();qr()});var zr=l(()=>{re()});import N from"node:path";import fi from"node:os";import{createHash as pi,randomBytes as Ff}from"node:crypto";import{Interface as St,keccak256 as Mf}from"ethers";import{Transaction as qf}from"@scure/btc-signer";import{ed25519 as zf}from"@noble/curves/ed25519.js";function Hr(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||N.join(process.env.XDG_STATE_HOME||N.join(fi.homedir(),".local","state"),"oracle"),r=pi("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 gp,yp,bp,Wr=l(()=>{vr();Le();re();kr();yt();Cr();H();Pr();Re();Te();ht();ut();dt();Ne();mt();lt();pt();Qe();Ze();ft();Br();Fr();Dr();Ur();zr();gp=new St(["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"]),yp=new St(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),bp=new St(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import At from"node:fs";import Gr from"node:path";import{homedir as mi}from"node:os";function hi(){return process.env.ORACLE_CONFIG_DIR||Gr.join(mi(),".config","oracle")}function pe(){let e=Hr(Gr.join(hi(),"signer")),t=At.existsSync(e.vault),r=At.existsSync(e.lock),n=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:At.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 Cp,vt=l(()=>{Je();Xt();Wr();re();Cp=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 Be(e){return String(e||"").trim()||void 0}function gi(e,{required:t=!1}={}){let r=Be(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!wi.has(r))throw new Error(`unsupported provider: ${r}`);return r}function yi(e,{required:t=!1}={}){let r=Be(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 bi(e){let t=Be(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 Jr({provider:e,model:t,baseUrl:r}={},{requireModel:n=!1}={}){let o=gi(e),i=yi(t,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:bi(r)};if(Be(r))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var wi,Vr=l(()=>{wi=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"])});import Kr from"node:fs";import Ei from"node:path";function Si(){return Ei.join(Q(),"model.json")}function oe(e){return String(e||"").trim()||void 0}function Ai(e={}){let t=oe(e.backend)?.toLowerCase()||"auto",r=Jr({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(!xi.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 Yr(){let e=Si();if(!Kr.existsSync(e))return null;try{return Ai(JSON.parse(Kr.readFileSync(e,"utf8")))}catch{return null}}var xi,Xr=l(()=>{xe();Vr();xi=new Set(["auto","standalone","hermes","remote","arch"])});import{Interface as vi,getAddress as ki}from"ethers";function kt(e,t){try{return ki(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function Ii(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 It(e){return e==null?null:Number.parseInt(String(e),16)}function Oi(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let n=Yt(e,r);return n||Ti[Number(e)]||null}function Ci(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 Ni(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function Ri(e){if(e?.error)throw Ni(e.error);return e?.result}function Li(e,t,r){return`${e}
3
+ ${t}
4
+ ${JSON.stringify(r??[])}`}async function $i(e,t,r){return _e(e,{method:"POST",body:t,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function Tt(e,t,r=[],n={}){let o=String(t||""),i=Ci(o),s=Oi(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=Qr.get(s);if(m!=null)return m}let a=n.dedupe!==!1&&!n.signal?Li(s,o,r):null;if(a&&me.has(a))return me.get(a);let p=(async()=>{let m=await $i(s,{jsonrpc:"2.0",id:1,method:t,params:r},n),c=Ri(m);return i==="eth_chainid"&&typeof c=="string"&&Qr.set(s,c),c})();return a&&(me.set(a,p),p.finally(()=>{me.get(a)===p&&me.delete(a)}).catch(()=>{})),p}async function Zr(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=Ii(e.txHash||e.hash||e.transactionHash),o=await Tt(r,"eth_getTransactionReceipt",[n],t);if(!o)return{ok:!1,chainId:r,txHash:n,status:"pending",receipt:null,reason:"receipt pending"};let i=It(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?kt(e.expectedTo,"expectedTo"):null,m=o.to?kt(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?kt(o.from,"receipt.from"):null,blockNumber:It(o.blockNumber),transactionIndex:It(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}var Up,Ti,_i,me,Qr,en=l(()=>{Ce();Ge();Up=new vi(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);Ti={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))$/;me=new Map,Qr=new Map});import{wordlists as Pi}from"ethers";function Mi(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return Di.has(t.length)&&t.every(r=>Pi.en.getWordIndex(r)>=0)}function zi(e){let t=tn(e);return Ui.has(t)||qi.test(t)}function tn(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function Hi(e){let t=tn(e);return[...Bi].some(r=>t.includes(r))}function Wi(e,t,r){if(typeof t=="string"){if(Fi.some(n=>n.test(t))||Mi(t))throw new he(r);if(ji.test(t)&&!zi(e))throw new he(r)}}function Ot(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return Wi(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)=>Ot(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(Hi(o))throw new he(i);e[o]!==void 0&&(n[o]=Ot(e[o],i,o))}return n}function rn(e){return Ot(e)}var Bi,Fi,Di,ji,qi,Ui,he,_t=l(()=>{Bi=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),Fi=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],Di=new Set([12,15,18,21,24]);ji=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,qi=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,Ui=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);he=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}}});var Gp,Jp,Vp,nn=l(()=>{Gp=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Jp=Object.freeze(["read","simulate"]),Vp=1440*60});function Ct(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return Gi.test(t)||Ji.includes(r)}function Vi(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>sn.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function an(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=Vi(t);for(let{rule:o,re:i}of on)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&&Ct(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=sn.includes(String(n).toLowerCase().replace(/[_-]/g,""));for(let{rule:i,re:s}of on)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"&&Ct(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(Ct(o))throw new q(`${t}.${o}`,"forbidden-key-name");J(i,`${t}.${o}`,r,o)}return e}var q,Gi,Ji,on,sn,cn=l(()=>{nn();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}},Gi=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,Ji=Object.freeze(["privkey","wif","xprv","seed"]);on=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}]),sn=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"])});function Nt(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 Rt(e,t="control input"){try{J(e,t),an(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function we(e,{required:t=[],optional:r=[]}={},n="object"){Nt(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 Lt(e,t,r=200,{lower:n=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||Ki.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 ge(e,t,r=80){let n=Lt(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 Fe(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 Ki,$t=l(()=>{_t();cn();Ki=/[\u0000-\u001f\u007f]/});function un({family:e,chainId:t},r="chain"){let n=ge(e,`${r}.family`,40),o;if(n==="evm"){if(typeof t=="number")o=String(Fe(t,`${r}.chainId`,{positive:!0}));else if(o=Lt(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=ge(t,`${r}.chainId`,80);return{family:n,chainId:o}}function Qi(e,t="chain"){return we(e,{required:["family","chainId"]},t),R(un(e,t))}function ln(e,t="finality rule"){Rt(e,t),Nt(e,t);let r=e.rule;if(!Yi.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let n=r==="confirmations"?"confirmations":r;we(e,{required:["family","chainId","rule",n]},t);let o=un(e,t);return r==="confirmations"?{...o,rule:r,confirmations:Fe(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...o,rule:r,[n]:ge(e[n],`${t}.${n}`,80)}}function Pt(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((n,o)=>ln(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 Zi(e){if(we(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return Pt(e.rules)}function dn(e,t){let r=Qi(t,"finality query"),o=Zi(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 es(e,t){if(e==null)return null;Rt(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(we(e,{required:["status"],optional:[r]},"finality evidence"),!Xi.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"?Fe(e.confirmations,"finality evidence.confirmations",{positive:!0}):ge(e[r],`finality evidence.${r}`,80)),n}function fn(e,t){if(!e||e.status===V.UNKNOWN||e.rule==null)return R({status:V.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=ln(e.rule??e,"resolved finality rule"),n=es(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 Yi,V,Xi,pn=l(()=>{$t();Yi=Object.freeze(["confirmations","finalizedTag","checkpoint"]),V=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),Xi=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"])});function rs(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 mn(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function Ft(e){return e==null?e:Array.isArray(e)?e.map(Ft):ye(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,Ft(e[t])])):String(e)}function ns(e,t,r,n){let o=A(e.finalityEvidence,n?.finality,e.evidence),i=A(e.finalityPolicy,e.policy);try{return i==null&&ye(e.finalityRule)&&(i=Pt([{family:t,chainId:r,...e.finalityRule}])),i==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:fn(dn(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 os(e){return e==null?null:String(e).trim().toLowerCase()}function Bt(...e){let t=e.map(os).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function hn(e={}){if(!ye(e))throw new TypeError("verified receipt: input object required");let t=rn(e),r=A(t.actionReceipt,t.receipt),n=ye(r)?r:t,o=A(t.observation,t.chainObservation,t.observedReceipt),i=ye(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=!Bt(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash)||!Bt(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family)||!Bt(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),m=ns(t,d,a,i&&!p?o:null),c=rs(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";mn(f)||!p&&(i&&c==="FAIL"||mn(u))?b="FAIL":!p&&s&&i&&c==="SUCCESS"&&["INCLUDED","FINAL"].includes(m.status)&&(b="SUCCESS");let w={verifiedReceiptVersion:ts,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=Ft(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 ts,pm,A,ye,wn=l(()=>{_t();pn();$t();ts=1,pm=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),A=(...e)=>e.find(t=>t!=null),ye=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype});var yn={};be(yn,{observeEvmReceipt:()=>gn,verifyEvmReceipt:()=>as});function ss(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 gn({txHash:e,chainId:t,rpcUrl:r},n={}){let o=String(e||"").trim().toLowerCase();if(!is.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||Zr,d=n.rpcCall||Tt,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=ss(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 as({txHash:e,chainId:t,confirmations:r=1,rpcUrl:n},o={}){let{observation:i,reason:s}=await gn({txHash:e,chainId:t,rpcUrl:n},o),d=hn({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 is,bn=l(()=>{en();wn();is=/^0x[0-9a-f]{64}$/});var En={};be(En,{classifyReceipt:()=>se,configDir:()=>ds,firstHourReport:()=>Dt,probeReceiptModule:()=>ps,probeReviewModule:()=>fs,venueMap:()=>De});import cs from"node:path";import{homedir as us}from"node:os";function ds(e=process.env){return e.ORACLE_CONFIG_DIR||cs.join(us(),".config","oracle")}function De({env:e=process.env,vault:t=null}={}){let r=t||pe(),n=[];for(let[o,i]of Object.entries(Ae)){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 Dt({env:e=process.env,model:t=Yr(),vault:r=pe(),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(ls.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:De({env:e,vault:r})}}async function fs(){try{return typeof(await Promise.resolve().then(()=>(xt(),Lr))).createSignTimeReview=="function"}catch{return!1}}async function ps(){try{let e=await Promise.resolve().then(()=>(bn(),yn));return typeof e.observeReceipt=="function"||typeof e.default=="function"||Object.values(e).some(t=>typeof t=="function")}catch{return!1}}var ls,Mt=l(()=>{Ge();vt();Xr();Je();ls=new Set(["127.0.0.1","::1","localhost"])});var xn={};be(xn,{classifyReceipt:()=>se,default:()=>ws,firstHourReport:()=>Dt,probeQuote:()=>hs,probeSigner:()=>ms,vaultStatus:()=>pe});async function ms(e=process.env){let t=e.ORACLE_SIGNER_HOST||"127.0.0.1",r=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${t}:${r}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}async function hs(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let r=(await e.json())?.pairs?.[0];return!r?.chainId||!r?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${r.chainId} ${r.baseToken?.symbol}/${r.quoteToken?.symbol} $${r.priceUsd}`}}catch(e){return{ok:!1,detail:e instanceof Error?e.message:"quote failed"}}}var ws,Sn=l(()=>{Mt();vt();ws={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=De();if(t)return process.stdout.write(`${JSON.stringify({venues:r},null,2)}
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 An from"node:path";import qt from"node:fs";import Z from"node:path";xe();var $n="0.19.0",Os=`hermes-agent==${$n}`;var jt="0.12.1",_s=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${jt}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${jt}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function Pn(){return Z.join(Q(),"runtime")}function Bn(){return Z.join(Pn(),"venv")}function Fn(e){let t=process.platform==="win32"?"Scripts":"bin",r=process.platform==="win32"?`${e}.exe`:e;return Z.join(Bn(),t,r)}function Dn(){return Fn("hermes")}function Mn(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(qt.existsSync(o))return o}catch{}}return null}function Ut(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=Dn();if(qt.existsSync(e))return{ok:!0,bin:e,source:"managed"};let t=Mn("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";xe();import{existsSync as Ht,readFileSync as jn}from"node:fs";import{dirname as zt,join as je}from"node:path";import{fileURLToPath as qn}from"node:url";function Un(e){let t=zt(qn(e));for(let r=0;r<8;r+=1){let n=je(t,"package.json");if(Ht(n))try{let i=JSON.parse(jn(n,"utf8"));if(i&&typeof i.version=="string")return t}catch{}let o=zt(t);if(o===t)break;t=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function Wt(e,t){let r=Un(t),n=je(r,e);return Ht(n)?n:je(r,"dist","assets",e)}var zn=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 Gt(){return zn.filter(e=>e.website)}var qe=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function Ue(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"]),Hn="deny",Fs=256*1024;var Ds=Object.freeze({version:1,source:"default",defaultDecision:Hn,allow:ee,deny:Object.freeze([])});var Wn=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"]),Ms=new Set(Wn);var ze=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),qs=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"}),D=(e,t=0,r=1)=>Math.min(r,Math.max(t,e)),$=e=>Number.isFinite(Number(e))?Number(e):null,Gn=e=>Math.round(e*1e4)/1e4;function P(e,t,r,n=!0){!n||r===null||!Number.isFinite(r)||e.push({feature:t,value:Gn(r)})}function Jn(e,t){let r=$(e.repeatBuys??e.repeat_buys??e.buyCount),n=$(e.walletWinRate??e.winRate);P(t,"repeat_buys",r===null?null:D((r-1)/4)*.38),P(t,"wallet_win_rate",n===null?null:(D(n)-.5)*.5)}function Vn(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:D(r/720)*.12),P(t,"liquidity",n===null?null:(D(Math.log10(Math.max(1,n))/7)-.5)*.28),P(t,"liquidity_lock",o==null?null:o?.12:-.28)}function Kn(e,t){let r=$(e.floorChange??e.floorChangePct),n=$(e.sales??e.saleCount);P(t,"floor_change",r===null?null:D(r,-1,1)*.35),P(t,"sales_depth",n===null?null:D(n/50)*.18)}function Yn(e,t){let r=$(e.flowImbalance??e.imbalance),n=$(e.fundingRate??e.funding);P(t,"flow_imbalance",r===null?null:D(r,-1,1)*.42),P(t,"funding",n===null?null:-D(n*100,-1,1)*.12)}function Xn(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:D(n-r,-1,1)*.65);let o=$(e.liquidityUsd??e.liquidity);P(t,"market_liquidity",o===null?null:D(Math.log10(Math.max(1,o))/6)*.12)}var Us=Object.freeze({wallet:Jn,pool:Vn,nft_floor:Kn,hl_flow:Yn,prediction_market:Xn});function He(e){try{return U.existsSync(e)}catch{return!1}}function Se(e){for(let t of e)if(t&&He(t))return t;return null}function We(e){try{return Wt(e,import.meta.url)}catch{return null}}function Qn(){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(He(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=Se(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 Jt(){let e=Se([We("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 Zn(){let e=Se([We("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(".")):Jt().building.some(r=>/protocol-builder|dex-launch|token-launch/i.test(r))?["(via skills: protocol-builder / launch packs)"]:[]}function eo(){let e=Se([We("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 to(){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(He(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 Vt(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 [${qe.join(", ")}]; mode=${Ue(e)?"ON":"off"}`,2);let a=Qn();r("providers",a.count>=40?"ok":a.count>=10?"warn":"fail",a.detail,3);let p=Jt();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=Zn();r("protocol_templates",m.length>=2?"ok":"warn",m.length?m.join(", "):"none",2);let c=eo();r("profiles",c.includes("protocol-builder")&&c.includes("oracle")?"ok":c.length>=1?"warn":"fail",c.join(", ")||"none",2),r("signals_engine",ze.length>=4?"ok":"fail",`types: ${ze.join(", ")} (cold / no hot exec)`,2);let f=Gt();r("harness_roster",f.length>=8?"ok":"warn",`${f.length} supported harnesses; Oracle native default; MCP inbound only`,2),r("custody_prepare_only",to()?"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:Ue(e),attributes:[...qe],packageRoot:S,checks:t}}function vn(){let[e,t]=process.versions.node.split(".").map(Number);return e>20||e===20&&t>=19}function gs(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 ys(e){let t=e.replace(/\/$/,"");return(await Promise.all(["/health","/public/health"].map(async n=>{try{return(await fetch(t+n)).ok}catch{return!1}}))).some(Boolean)}var _m={name:"doctor",summary:"check the read plane (+ optional --agentic readiness score)",group:"read",usage:"oracle doctor [--json] [--agentic] [--first-hour]",async run(e){let t=e.argv.includes("--json"),r=e.argv.includes("--agentic"),n=e.argv.includes("--first-hour"),o=[],i=!1,s=(g,y,x,v=null)=>{o.push({id:g,status:y,detail:x,fix:v}),y==="fail"&&(i=!0)};s("node",vn()?"ok":"fail",`node ${process.versions.node}`,vn()?null:"install node >= 20.19");let d=e.paths.oracleExecEnvPath(),a=gs(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 ys(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=Ut();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=An.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=An.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=Vt(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(()=>(Mt(),En)),{probeSigner:v,probeQuote:E}=await Promise.resolve().then(()=>(Sn(),xn)),[_,K,C,B]=await Promise.all([v(process.env),E(),y(),x()]);I=g({signerReachable:_,quote:K,reviewAvailable:C,receiptAvailable:B});for(let F of I.checks)s(`hour_${F.id}`,F.status,F.detail,F.fix);s("hour_score",I.ok?"ok":"warn",I.firstRunScore.label,null)}let O={ok:!i&&(h?h.ok:!0)&&(I?I.ok:!0),checks:o,...I?{firstHour:I}:{},...h?{agentic:{pct:h.pct,summary:h.summary,attributes:h.attributes,researchMode:h.researchMode}}:{}};if(t)process.stdout.write(JSON.stringify(O,null,2)+`
7
+ `);else{for(let g of o)process.stdout.write(`${g.status.toUpperCase().padEnd(4)} ${g.id}: ${g.detail}
8
+ `),g.fix&&process.stdout.write(` fix: ${g.fix}
9
+ `);h&&process.stdout.write(`
10
+ ${h.summary}
11
+ `)}return O.ok?0:1}};export{_m as default};