@oracle-agent/oracle 0.32.0 → 0.34.0

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.
@@ -1,4 +1,4 @@
1
- var qt=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)qt(e,t,{get:r[t],enumerable:!0})};import W from"node:fs";import jt from"node:os";import L from"node:path";import{fileURLToPath as Ut}from"node:url";function ie(){return process.env.ORACLE_FAKE_HOME||jt.homedir()}function Ht(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function R(){return Ht()?process.env.ORACLE_CONFIG_DIR||L.join(ie(),".config","oracle"):L.join(ie(),".config","oracle")}function Wt(){return L.join(R(),"desk.json")}function Gt(){return L.join(R(),"env")}function N({force:e=!1}={}){if(N._done&&!e)return N._result||null;N._done=!0;let r={},t=(i,a)=>{if(a==null)return;let s=String(a).trim();s&&(process.env[i]!=null&&String(process.env[i]).trim()!==""||(process.env[i]=s,r[i]=s))};try{let i=Gt();if(W.existsSync(i))for(let a of W.readFileSync(i,"utf8").split(/\r?\n/)){let s=a.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let u=s[2];(u.startsWith('"')&&u.endsWith('"')||u.startsWith("'")&&u.endsWith("'"))&&(u=u.slice(1,-1)),t(s[1],u)}}catch{}try{let i=Wt();if(W.existsSync(i)){let a=JSON.parse(W.readFileSync(i,"utf8"));a&&typeof a=="object"&&(t("ORACLE_DESK_URL",a.deskUrl||a.dataUrl||a.url),t("ORACLE_DATA_URL",a.dataUrl||a.deskUrl||a.url),t("ORACLE_API_URL",a.apiUrl||a.dataUrl||a.deskUrl),t("ORACLE_PUBLIC_URL",a.publicUrl||a.deskUrl||a.dataUrl),t("ORACLE_EXEC_URL",a.execUrl),t("MAD_DESK_URL",a.deskUrl||a.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)),N._result=Object.keys(r).length?r:null,N._result}var zt,l,G=o(()=>{zt=L.dirname(Ut(import.meta.url)),l=L.resolve(zt,"../..");try{N()}catch{}});var fe,Gn,Je=o(()=>{fe={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}},Gn=new Map(Object.values(fe).map(e=>[e.chainId,e]))});function q(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 pe=o(()=>{});var Ve=o(()=>{});var Ke=o(()=>{});var j=o(()=>{});var B=o(()=>{});var K=o(()=>{j();B()});import{isAddress as no}from"ethers";var he=o(()=>{K();j();B()});import{Interface as yr,isAddress as uo}from"ethers";var mo,Ye=o(()=>{he();j();B();mo=new yr(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as br,isAddress as go}from"ethers";var xo,So,Xe=o(()=>{he();j();B();xo=new br(["function approve(address spender,uint256 amount) returns (bool)"]),So=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var C=o(()=>{});import{Interface as Er,MaxUint256 as _o,isAddress as Co,keccak256 as No,toUtf8Bytes as Lo}from"ethers";var Fo,U=o(()=>{Ke();Ye();Xe();C();B();Fo=new Er(["function approve(address spender,uint256 amount) returns (bool)"])});var qo,jo,Y=o(()=>{qo=300*1e3,jo=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var X=o(()=>{U()});import{Address as Go,NETWORK as Jo,OutScript as Vo,RawTx as Ko,SigHash as Yo,TEST_NETWORK as Xo,Transaction as Qo}from"@scure/btc-signer";var ye=o(()=>{});import{createHash as Sr}from"node:crypto";import{base58 as ri}from"@scure/base";import{getCompiledTransactionMessageDecoder as oi}from"@solana/transaction-messages";var Qe,ii,be=o(()=>{Qe=e=>Sr("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),ii=new Map([[Qe("route"),{name:"route",prefixBytes:0}],[Qe("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});var Ze=o(()=>{});var pi,Ee=o(()=>{Ze();pi=64*1024});var et=o(()=>{Ee()});var tt=o(()=>{et()});var vi,ki,Se=o(()=>{C();tt();vi=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"}),ki=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 Oi,Ae=o(()=>{C();Oi="0x"+"00".repeat(32)});var vr,Ri,ve=o(()=>{Ae();C();vr=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Ri=Object.freeze(vr.map(e=>e[0]))});var Q=o(()=>{C()});import{TypedDataEncoder as Fi,getAddress as Di,isAddress as qi}from"ethers";var Ir,Tr,it=o(()=>{Y();Ir=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Tr=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 zi,at=o(()=>{zi=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var st=o(()=>{});import{TypedDataEncoder as Xi,getAddress as Qi,isAddress as Zi}from"ethers";var Or,aa,_r,sa,ct=o(()=>{Ee();K();at();st();Y();Or=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),aa=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),_r=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"}]}),sa=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as la,getAddress as da}from"ethers";var ma,ke=o(()=>{it();ct();ma=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as lt}from"ethers";var $r,Na,Br,La,Ra,Pa,$a,Mr,Ba,Z=o(()=>{U();K();Y();X();ye();be();Se();ve();Q();ke();$r=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),Na=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}),Br=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"}}),La=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Ra=new lt(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Pa=new lt(["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"]),$a=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"}}),Mr=Object.freeze([...$r]),Ba=Object.freeze({...Br})});import{encode as Da}from"@msgpack/msgpack";import{keccak256 as ja,verifyTypedData as Ua}from"ethers";var za,Ha,Ie=o(()=>{za=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Ha=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var Te=o(()=>{Q()});import{ed25519 as Qa}from"@noble/curves/ed25519.js";import{base58 as es}from"@scure/base";import{RawTx as rs,SigHash as ns,Transaction as os}from"@scure/btc-signer";import{Transaction as as,keccak256 as ss,verifyTypedData as cs}from"ethers";var Oe=o(()=>{Ie();Te()});import{base58 as hs}from"@scure/base";var ee=o(()=>{Z();X();U();Oe()});var ft=o(()=>{ee();Z()});var Ts,Os,_s,M=o(()=>{Ts=Object.freeze({N:1<<17,r:8,p:1}),Os=256*1024*1024,_s=16*1024});var Ns,pt=o(()=>{Ns=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 _e}from"node:os";import{join as Ce}from"node:path";var mt,qr,$s,ht=o(()=>{mt=process.env.ORACLE_PUBLIC_DESKTOP==="1",qr=mt?process.env.ORACLE_CONFIG_DIR||Ce(_e(),".config","oracle"):Ce(_e(),".config","oracle"),$s=mt?qr:Ce(_e(),".config","mad-desk")});var qs,js,Us,wt=o(()=>{ht();qs="0".repeat(64),js=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"}),Us=Promise.resolve()});var Ne=o(()=>{wt();C();M();ee()});var yt=o(()=>{});import{Wallet as Qs}from"ethers";import{base58 as ec}from"@scure/base";import{ed25519 as rc}from"@noble/curves/ed25519.js";import{NETWORK as oc,TEST_NETWORK as ic,WIF as ac,p2wpkh as sc}from"@scure/btc-signer";import{pubECDSA as uc}from"@scure/btc-signer/utils.js";var bt=o(()=>{});var fc,pc,mc,hc,wc,gc,yc,bc,Ec,xc,Sc,Et=o(()=>{Ne();fc=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),pc=Object.freeze(["binance","bybit","okx","coinbase"]),mc=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),hc=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),wc=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),gc=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),yc=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),bc=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),Ec=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),xc=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),Sc=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var xt=o(()=>{M()});var zr,St,re=o(()=>{zr=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}"]})}),St=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var At=o(()=>{re()});var Lc,vt=o(()=>{re();At();Lc=256*1024});var kt=o(()=>{re();vt()});var It=o(()=>{M()});import w from"node:path";import Hr from"node:os";import{createHash as Wr,randomBytes as xu}from"node:crypto";import{Interface as Le,keccak256 as Au}from"ethers";import{Transaction as ku}from"@scure/btc-signer";import{ed25519 as Tu}from"@noble/curves/ed25519.js";function Tt(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||w.join(process.env.XDG_STATE_HOME||w.join(Hr.homedir(),".local","state"),"oracle"),t=Wr("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 el,tl,rl,Ot=o(()=>{ft();ee();M();pt();Ne();yt();U();Z();X();Oe();Se();ve();Q();Te();Ae();Ie();ye();be();ke();bt();Et();xt();kt();It();el=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"]),tl=new Le(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),rl=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 Re from"node:fs";import _t from"node:path";import{homedir as Gr}from"node:os";function Jr(){return process.env.ORACLE_CONFIG_DIR||_t.join(Gr(),".config","oracle")}function z(){let e=Tt(_t.join(Jr(),"signer")),r=Re.existsSync(e.vault),t=Re.existsSync(e.lock),n=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:Re.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 pl,Pe=o(()=>{pe();Ve();Ot();M();pl=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 ne(e){return String(e||"").trim()||void 0}function Kr(e,{required:r=!1}={}){let t=ne(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!Vr.has(t))throw new Error(`unsupported provider: ${t}`);return t}function Yr(e,{required:r=!1}={}){let t=ne(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 Xr(e){let r=ne(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 Ct({provider:e,model:r,baseUrl:t}={},{requireModel:n=!1}={}){let i=Kr(e),a=Yr(r,{required:n});if(i==="custom")return{provider:i,...a?{model:a}:{},baseUrl:Xr(t)};if(ne(t))throw new Error("baseUrl is only supported for the custom provider");return{...i?{provider:i}:{},...a?{model:a}:{}}}var Vr,Nt=o(()=>{Vr=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","custom","anthropic-oauth","openai-codex","xai-oauth"])});import Lt from"node:fs";import Qr from"node:path";function en(){return Qr.join(R(),"model.json")}function F(e){return String(e||"").trim()||void 0}function tn(e={}){let r=F(e.backend)?.toLowerCase()||"auto",t=Ct({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),n=F(e.apiKeyEnv),i=Number.parseInt(String(e.contextLength||""),10),a=F(e.reasoningEffort),s=F(e.computeHost||e.remoteHost),u=F(e.computeUser||e.remoteUser),f=F(e.computePath||e.remotePath);if(!Zr.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"&&!s)throw new Error("remote backend requires computeHost");return{backend:r,...t,...n?{apiKeyEnv:n}:{},...Number.isFinite(i)&&i>0?{contextLength:i}:{},...a?{reasoningEffort:a}:{},...s?{computeHost:s}:{},...u?{computeUser:u}:{},...f?{computePath:f}:{}}}function Rt(){let e=en();if(!Lt.existsSync(e))return null;try{return tn(JSON.parse(Lt.readFileSync(e,"utf8")))}catch{return null}}var Zr,Pt=o(()=>{G();Nt();Zr=new Set(["auto","standalone","hermes","remote","arch"])});var $t={};Me($t,{classifyReceipt:()=>q,configDir:()=>an,firstHourReport:()=>$e,venueMap:()=>oe});import rn from"node:path";import{homedir as nn}from"node:os";function an(e=process.env){return e.ORACLE_CONFIG_DIR||rn.join(nn(),".config","oracle")}function oe({env:e=process.env,vault:r=null}={}){let t=r||z(),n=[];for(let[i,a]of Object.entries(fe)){let s=(a.rpcEnv||[]).some(f=>String(e[f]||"").trim()),u="prepare";a.evm?s&&(u="live"):u="unavailable",n.push({key:i,chainId:a.chainId,name:a.name,family:"evm",status:u,execute:!!(t.vaultExists&&t.armed&&!t.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 $e({env:e=process.env,model:r=Rt(),vault:t=z(),signerReachable:n=!1,quote:i=null}={}){let a=[],s=(p,g,O,S=null)=>a.push({id:p,status:g,detail:O,fix:S}),u=(()=>{let[p,g]=process.versions.node.split(".").map(Number);return p>20||p===20&&g>=19})();s("node",u?"ok":"fail",`node ${process.versions.node}`,u?null:"install node >= 20.19"),r?r.backend==="hermes"?s("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):s("model","ok",`${r.backend||"auto"} ${r.provider||""} ${r.model||""}`.trim()):s("model","fail","no model.json","oracle setup model"),t.vaultExists?t.disarmed?s("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):s("vault",t.armed?"ok":"warn",t.armed?"present, armed":"present, not armed"):s("vault","fail","no local vault","oracle sign init");let f=e.ORACLE_SIGNER_HOST||"127.0.0.1";return on.has(f)?s("signer",n?"ok":"warn",n?`loopback ${f}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):s("signer","fail",`signer host ${f} is not loopback`,"unset ORACLE_SIGNER_HOST"),i?i.ok?s("quote","ok",i.detail||"net quote returned"):s("quote","warn",i.detail||"quote unavailable","check network / oracle data serve"):s("quote","warn","quote not probed",null),{ok:!a.some(p=>p.status==="fail"),checks:a,venues:oe({env:e,vault:t})}}var on,Be=o(()=>{Je();Pe();Pt();pe();on=new Set(["127.0.0.1","::1","localhost"])});var Bt={};Me(Bt,{classifyReceipt:()=>q,default:()=>un,firstHourReport:()=>$e,probeQuote:()=>cn,probeSigner:()=>sn,vaultStatus:()=>z});async function sn(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 cn(){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 un,Mt=o(()=>{Be();Pe();un={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=oe();if(r)return process.stdout.write(`${JSON.stringify({venues:t},null,2)}
1
+ var qt=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)qt(e,t,{get:r[t],enumerable:!0})};import W from"node:fs";import jt from"node:os";import L from"node:path";import{fileURLToPath as Ut}from"node:url";function ie(){return process.env.ORACLE_FAKE_HOME||jt.homedir()}function Ht(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function R(){return Ht()?process.env.ORACLE_CONFIG_DIR||L.join(ie(),".config","oracle"):L.join(ie(),".config","oracle")}function Wt(){return L.join(R(),"desk.json")}function Gt(){return L.join(R(),"env")}function N({force:e=!1}={}){if(N._done&&!e)return N._result||null;N._done=!0;let r={},t=(i,a)=>{if(a==null)return;let s=String(a).trim();s&&(process.env[i]!=null&&String(process.env[i]).trim()!==""||(process.env[i]=s,r[i]=s))};try{let i=Gt();if(W.existsSync(i))for(let a of W.readFileSync(i,"utf8").split(/\r?\n/)){let s=a.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let u=s[2];(u.startsWith('"')&&u.endsWith('"')||u.startsWith("'")&&u.endsWith("'"))&&(u=u.slice(1,-1)),t(s[1],u)}}catch{}try{let i=Wt();if(W.existsSync(i)){let a=JSON.parse(W.readFileSync(i,"utf8"));a&&typeof a=="object"&&(t("ORACLE_DESK_URL",a.deskUrl||a.dataUrl||a.url),t("ORACLE_DATA_URL",a.dataUrl||a.deskUrl||a.url),t("ORACLE_API_URL",a.apiUrl||a.dataUrl||a.deskUrl),t("ORACLE_PUBLIC_URL",a.publicUrl||a.deskUrl||a.dataUrl),t("ORACLE_EXEC_URL",a.execUrl),t("MAD_DESK_URL",a.deskUrl||a.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)),N._result=Object.keys(r).length?r:null,N._result}var zt,l,G=o(()=>{zt=L.dirname(Ut(import.meta.url)),l=L.resolve(zt,"../..");try{N()}catch{}});var fe,Gn,Je=o(()=>{fe={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}},Gn=new Map(Object.values(fe).map(e=>[e.chainId,e]))});function q(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 pe=o(()=>{});var Ve=o(()=>{});var Ke=o(()=>{});var j=o(()=>{});var B=o(()=>{});var K=o(()=>{j();B()});import{isAddress as no}from"ethers";var he=o(()=>{K();j();B()});import{Interface as yr,isAddress as uo}from"ethers";var mo,Ye=o(()=>{he();j();B();mo=new yr(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as br,isAddress as go}from"ethers";var xo,So,Xe=o(()=>{he();j();B();xo=new br(["function approve(address spender,uint256 amount) returns (bool)"]),So=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var C=o(()=>{});import{Interface as Er,MaxUint256 as _o,isAddress as Co,keccak256 as No,toUtf8Bytes as Lo}from"ethers";var Fo,U=o(()=>{Ke();Ye();Xe();C();B();Fo=new Er(["function approve(address spender,uint256 amount) returns (bool)"])});var qo,jo,Y=o(()=>{qo=300*1e3,jo=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var X=o(()=>{U()});import{Address as Go,NETWORK as Jo,OutScript as Vo,RawTx as Ko,SigHash as Yo,TEST_NETWORK as Xo,Transaction as Qo}from"@scure/btc-signer";var ye=o(()=>{});import{createHash as Sr}from"node:crypto";import{base58 as ri}from"@scure/base";import{getCompiledTransactionMessageDecoder as oi}from"@solana/transaction-messages";var Qe,ii,be=o(()=>{Qe=e=>Sr("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),ii=new Map([[Qe("route"),{name:"route",prefixBytes:0}],[Qe("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});var Ze=o(()=>{});var pi,Ee=o(()=>{Ze();pi=64*1024});var et=o(()=>{Ee()});var tt=o(()=>{et()});var vi,ki,Se=o(()=>{C();tt();vi=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"}),ki=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 Oi,Ae=o(()=>{C();Oi="0x"+"00".repeat(32)});var vr,Ri,ve=o(()=>{Ae();C();vr=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Ri=Object.freeze(vr.map(e=>e[0]))});var Q=o(()=>{C()});import{TypedDataEncoder as Fi,getAddress as Di,isAddress as qi}from"ethers";var Ir,Tr,it=o(()=>{Y();Ir=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Tr=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 zi,at=o(()=>{zi=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var st=o(()=>{});import{TypedDataEncoder as Xi,getAddress as Qi,isAddress as Zi}from"ethers";var Or,aa,_r,sa,ct=o(()=>{Ee();K();at();st();Y();Or=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),aa=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),_r=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"}]}),sa=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as la,getAddress as da}from"ethers";var ma,ke=o(()=>{it();ct();ma=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as lt}from"ethers";var $r,Na,Br,La,Ra,Pa,$a,Mr,Ba,Z=o(()=>{U();K();Y();X();ye();be();Se();ve();Q();ke();$r=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),Na=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}),Br=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"}}),La=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Ra=new lt(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Pa=new lt(["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"]),$a=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"}}),Mr=Object.freeze([...$r]),Ba=Object.freeze({...Br})});import{encode as Da}from"@msgpack/msgpack";import{keccak256 as ja,verifyTypedData as Ua}from"ethers";var za,Ha,Ie=o(()=>{za=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Ha=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var Te=o(()=>{Q()});import{ed25519 as Qa}from"@noble/curves/ed25519.js";import{base58 as es}from"@scure/base";import{RawTx as rs,SigHash as ns,Transaction as os}from"@scure/btc-signer";import{Transaction as as,keccak256 as ss,verifyTypedData as cs}from"ethers";var Oe=o(()=>{Ie();Te()});import{base58 as hs}from"@scure/base";var ee=o(()=>{Z();X();U();Oe()});var ft=o(()=>{ee();Z()});var Ts,Os,_s,M=o(()=>{Ts=Object.freeze({N:1<<17,r:8,p:1}),Os=256*1024*1024,_s=16*1024});var Ns,pt=o(()=>{Ns=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 _e}from"node:os";import{join as Ce}from"node:path";var mt,qr,$s,ht=o(()=>{mt=process.env.ORACLE_PUBLIC_DESKTOP==="1",qr=mt?process.env.ORACLE_CONFIG_DIR||Ce(_e(),".config","oracle"):Ce(_e(),".config","oracle"),$s=mt?qr:Ce(_e(),".config","mad-desk")});var qs,js,Us,wt=o(()=>{ht();qs="0".repeat(64),js=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"}),Us=Promise.resolve()});var Ne=o(()=>{wt();C();M();ee()});var yt=o(()=>{});import{Wallet as Qs}from"ethers";import{base58 as ec}from"@scure/base";import{ed25519 as rc}from"@noble/curves/ed25519.js";import{NETWORK as oc,TEST_NETWORK as ic,WIF as ac,p2wpkh as sc}from"@scure/btc-signer";import{pubECDSA as uc}from"@scure/btc-signer/utils.js";var bt=o(()=>{});var fc,pc,mc,hc,wc,gc,yc,bc,Ec,xc,Sc,Et=o(()=>{Ne();fc=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),pc=Object.freeze(["binance","bybit","okx","coinbase"]),mc=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),hc=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),wc=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),gc=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),yc=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),bc=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),Ec=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),xc=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),Sc=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var xt=o(()=>{M()});var zr,St,re=o(()=>{zr=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}"]})}),St=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var At=o(()=>{re()});var Lc,vt=o(()=>{re();At();Lc=256*1024});var kt=o(()=>{re();vt()});var It=o(()=>{M()});import w from"node:path";import Hr from"node:os";import{createHash as Wr,randomBytes as xu}from"node:crypto";import{Interface as Le,keccak256 as Au}from"ethers";import{Transaction as ku}from"@scure/btc-signer";import{ed25519 as Tu}from"@noble/curves/ed25519.js";function Tt(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||w.join(process.env.XDG_STATE_HOME||w.join(Hr.homedir(),".local","state"),"oracle"),t=Wr("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 el,tl,rl,Ot=o(()=>{ft();ee();M();pt();Ne();yt();U();Z();X();Oe();Se();ve();Q();Te();Ae();Ie();ye();be();ke();bt();Et();xt();kt();It();el=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"]),tl=new Le(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),rl=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 Re from"node:fs";import _t from"node:path";import{homedir as Gr}from"node:os";function Jr(){return process.env.ORACLE_CONFIG_DIR||_t.join(Gr(),".config","oracle")}function z(){let e=Tt(_t.join(Jr(),"signer")),r=Re.existsSync(e.vault),t=Re.existsSync(e.lock),n=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:Re.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 pl,Pe=o(()=>{pe();Ve();Ot();M();pl=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 ne(e){return String(e||"").trim()||void 0}function Kr(e,{required:r=!1}={}){let t=ne(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!Vr.has(t))throw new Error(`unsupported provider: ${t}`);return t}function Yr(e,{required:r=!1}={}){let t=ne(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 Xr(e){let r=ne(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 Ct({provider:e,model:r,baseUrl:t}={},{requireModel:n=!1}={}){let i=Kr(e),a=Yr(r,{required:n});if(i==="custom")return{provider:i,...a?{model:a}:{},baseUrl:Xr(t)};if(ne(t))throw new Error("baseUrl is only supported for the custom provider");return{...i?{provider:i}:{},...a?{model:a}:{}}}var Vr,Nt=o(()=>{Vr=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"])});import Lt from"node:fs";import Qr from"node:path";function en(){return Qr.join(R(),"model.json")}function F(e){return String(e||"").trim()||void 0}function tn(e={}){let r=F(e.backend)?.toLowerCase()||"auto",t=Ct({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),n=F(e.apiKeyEnv),i=Number.parseInt(String(e.contextLength||""),10),a=F(e.reasoningEffort),s=F(e.computeHost||e.remoteHost),u=F(e.computeUser||e.remoteUser),f=F(e.computePath||e.remotePath);if(!Zr.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"&&!s)throw new Error("remote backend requires computeHost");return{backend:r,...t,...n?{apiKeyEnv:n}:{},...Number.isFinite(i)&&i>0?{contextLength:i}:{},...a?{reasoningEffort:a}:{},...s?{computeHost:s}:{},...u?{computeUser:u}:{},...f?{computePath:f}:{}}}function Rt(){let e=en();if(!Lt.existsSync(e))return null;try{return tn(JSON.parse(Lt.readFileSync(e,"utf8")))}catch{return null}}var Zr,Pt=o(()=>{G();Nt();Zr=new Set(["auto","standalone","hermes","remote","arch"])});var $t={};Me($t,{classifyReceipt:()=>q,configDir:()=>an,firstHourReport:()=>$e,venueMap:()=>oe});import rn from"node:path";import{homedir as nn}from"node:os";function an(e=process.env){return e.ORACLE_CONFIG_DIR||rn.join(nn(),".config","oracle")}function oe({env:e=process.env,vault:r=null}={}){let t=r||z(),n=[];for(let[i,a]of Object.entries(fe)){let s=(a.rpcEnv||[]).some(f=>String(e[f]||"").trim()),u="prepare";a.evm?s&&(u="live"):u="unavailable",n.push({key:i,chainId:a.chainId,name:a.name,family:"evm",status:u,execute:!!(t.vaultExists&&t.armed&&!t.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 $e({env:e=process.env,model:r=Rt(),vault:t=z(),signerReachable:n=!1,quote:i=null}={}){let a=[],s=(p,g,O,S=null)=>a.push({id:p,status:g,detail:O,fix:S}),u=(()=>{let[p,g]=process.versions.node.split(".").map(Number);return p>20||p===20&&g>=19})();s("node",u?"ok":"fail",`node ${process.versions.node}`,u?null:"install node >= 20.19"),r?r.backend==="hermes"?s("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):s("model","ok",`${r.backend||"auto"} ${r.provider||""} ${r.model||""}`.trim()):s("model","fail","no model.json","oracle setup model"),t.vaultExists?t.disarmed?s("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):s("vault",t.armed?"ok":"warn",t.armed?"present, armed":"present, not armed"):s("vault","fail","no local vault","oracle sign init");let f=e.ORACLE_SIGNER_HOST||"127.0.0.1";return on.has(f)?s("signer",n?"ok":"warn",n?`loopback ${f}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):s("signer","fail",`signer host ${f} is not loopback`,"unset ORACLE_SIGNER_HOST"),i?i.ok?s("quote","ok",i.detail||"net quote returned"):s("quote","warn",i.detail||"quote unavailable","check network / oracle data serve"):s("quote","warn","quote not probed",null),{ok:!a.some(p=>p.status==="fail"),checks:a,venues:oe({env:e,vault:t})}}var on,Be=o(()=>{Je();Pe();Pt();pe();on=new Set(["127.0.0.1","::1","localhost"])});var Bt={};Me(Bt,{classifyReceipt:()=>q,default:()=>un,firstHourReport:()=>$e,probeQuote:()=>cn,probeSigner:()=>sn,vaultStatus:()=>z});async function sn(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 cn(){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 un,Mt=o(()=>{Be();Pe();un={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=oe();if(r)return process.stdout.write(`${JSON.stringify({venues:t},null,2)}
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
3
  `);return 0}}});import D from"node:fs";import Ft from"node:path";import De from"node:fs";import P from"node:path";G();var Vt="0.19.0",xn=`hermes-agent==${Vt}`;var Fe="0.12.1",Sn=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 Kt(){return P.join(R(),"runtime")}function Yt(){return P.join(Kt(),"venv")}function Xt(e){let r=process.platform==="win32"?"Scripts":"bin",t=process.platform==="win32"?`${e}.exe`:e;return P.join(Yt(),r,t)}function Qt(){return Xt("hermes")}function Zt(e){let r=process.platform==="win32"&&!P.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let t of(process.env.PATH||"").split(P.delimiter))if(t)for(let n of r){let i=P.join(t,`${e}${n}`);try{if(De.existsSync(i))return i}catch{}}return null}function qe(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=Qt();if(De.existsSync(e))return{ok:!0,bin:e,source:"managed"};let r=Zt("hermes");return r?{ok:!0,bin:r,source:"path"}:{ok:!1,bin:null,source:null}}import _ from"node:fs";import d from"node:path";G();import{existsSync as Ue,readFileSync as er}from"node:fs";import{dirname as je,join as ae}from"node:path";import{fileURLToPath as tr}from"node:url";function rr(e){let r=je(tr(e));for(let t=0;t<8;t+=1){let n=ae(r,"package.json");if(Ue(n))try{let a=JSON.parse(er(n,"utf8"));if(a&&typeof a.version=="string")return r}catch{}let i=je(r);if(i===r)break;r=i}throw new Error(`oracle: could not resolve package root from ${e}`)}function ze(e,r){let t=rr(r),n=ae(t,e);return Ue(n)?n:ae(t,"dist","assets",e)}var nr=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 He(){return nr.filter(e=>e.website)}var se=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function ce(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 $=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"]),or="deny",Cn=256*1024;var Nn=Object.freeze({version:1,source:"default",defaultDecision:or,allow:$,deny:Object.freeze([])});var ir=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"]),Ln=new Set(ir);var ue=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),Pn=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,ar=e=>Math.round(e*1e4)/1e4;function E(e,r,t,n=!0){!n||t===null||!Number.isFinite(t)||e.push({feature:r,value:ar(t)})}function sr(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 cr(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 ur(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 lr(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 dr(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 $n=Object.freeze({wallet:sr,pool:cr,nft_floor:ur,hl_flow:lr,prediction_market:dr});function le(e){try{return _.existsSync(e)}catch{return!1}}function J(e){for(let r of e)if(r&&le(r))return r;return null}function de(e){try{return ze(e,import.meta.url)}catch{return null}}function fr(){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(le(n))try{let a=_.readFileSync(n,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],s=new Set(a.map(u=>u.toLowerCase()));if(s.size>=20)return{count:s.size,detail:`${s.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=J(r);if(!t)return{count:0,detail:"providers dir missing"};try{let n=_.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 We(){let e=J([de("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=_.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 pr(){let e=J([de("protocols/templates"),d.join(l,"protocols/templates"),d.join(l,"dist/assets/protocols/templates"),d.join(l,"assets/protocols/templates")]);return e?_.readdirSync(e).filter(t=>!t.startsWith(".")):We().building.some(t=>/protocol-builder|dex-launch|token-launch/i.test(t))?["(via skills: protocol-builder / launch packs)"]:[]}function mr(){let e=J([de("profiles"),d.join(l,"profiles"),d.join(l,"dist/assets/profiles"),d.join(l,"assets/profiles")]);return e?_.readdirSync(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&!r.name.startsWith("_")).map(r=>r.name):[]}function hr(){try{if($.includes("trade_lifecycle")&&!$.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(le(r))try{let t=_.readFileSync(r,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(t))return!0}catch{}return!1}function Ge(e=process.env){let r=[],t=(c,h,v,T=1)=>{r.push({id:c,status:h,detail:v,weight:T})},[n,i]=process.versions.node.split(".").map(Number),a=n>20||n===20&&i>=19;t("node",a?"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=>!$.includes(c));t("agent_tools",u.length===0?"ok":"warn",u.length===0?`safe tools ${$.length}; signal_score present`:`missing tools: ${u.join(",")}`,3),t("research_attributes","ok",`attrs [${se.join(", ")}]; mode=${ce(e)?"ON":"off"}`,2);let f=fr();t("providers",f.count>=40?"ok":f.count>=10?"warn":"fail",f.detail,3);let y=We();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=pr();t("protocol_templates",p.length>=2?"ok":"warn",p.length?p.join(", "):"none",2);let g=mr();t("profiles",g.includes("protocol-builder")&&g.includes("oracle")?"ok":g.length>=1?"warn":"fail",g.join(", ")||"none",2),t("signals_engine",ue.length>=4?"ok":"fail",`types: ${ue.join(", ")} (cold / no hot exec)`,2);let O=He();t("harness_roster",O.length>=8?"ok":"warn",`${O.length} supported harnesses; Oracle native default; MCP inbound only`,2),t("custody_prepare_only",hr()?"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:ce(e),attributes:[...se],packageRoot:l,checks:r}}function Dt(){let[e,r]=process.versions.node.split(".").map(Number);return e>20||e===20&&r>=19}function ln(e){if(!D.existsSync(e))return{};let r={};for(let t of D.readFileSync(e,"utf8").split(/\r?\n/)){let n=t.match(/^([A-Z0-9_]+)=(.*)$/);n&&(r[n[1]]=n[2])}return r}async function dn(e){let r=e.replace(/\/$/,"");for(let t of["/health","/public/health"])try{if((await fetch(r+t)).ok)return!0}catch{}return!1}var Rl={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=[],a=!1,s=(c,h,v,T=null)=>{i.push({id:c,status:h,detail:v,fix:T}),h==="fail"&&(a=!0)};s("node",Dt()?"ok":"fail",`node ${process.versions.node}`,Dt()?null:"install node >= 20.19");let u=e.paths.oracleExecEnvPath(),f=ln(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;s("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 dn(p),O=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",g?"ok":"warn",g?`reachable ${p}${O?` (${O})`:""}`:`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=qe();s("harness_model","ok","Oracle native harness is default; external harnesses are inbound MCP only (oracle harness detect)",null),s("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=Ft.join(e.paths.hermesRoot(),"profiles"),I=0;D.existsSync(k)&&(I=D.readdirSync(k,{withFileTypes:!0}).filter(c=>c.isDirectory()).length),s("hermes_lanes","ok",I>0?`${I} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);{let c=Ft.join(k,"oracle",".env"),h=[];if(D.existsSync(c)){let v=D.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?s("messaging","ok",`${h.join("/")} configured \xB7 runtime ${S.source}`,null):s("messaging","warn",`${h.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 m=null;if(t){m=Ge(process.env);for(let c of m.checks)s(`agentic_${c.id}`,c.status,c.detail,null)}let A=null;if(n){let{firstHourReport:c}=await Promise.resolve().then(()=>(Be(),$t)),{probeSigner:h,probeQuote:v}=await Promise.resolve().then(()=>(Mt(),Bt));A=c({signerReachable:await h(process.env),quote:await v()});for(let T of A.checks)s(`hour_${T.id}`,T.status,T.detail,T.fix)}let H={ok:!a&&(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
4
  `);else{for(let c of i)process.stdout.write(`${c.status.toUpperCase().padEnd(4)} ${c.id}: ${c.detail}