@oracle-agent/oracle 0.35.5 → 0.35.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +1 -1
  2. package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
  3. package/dist/bin/desk-server.mjs +25 -23
  4. package/dist/bin/oracle-data-mcp.mjs +13 -11
  5. package/dist/bin/oracle-mev-arb-shadow.mjs +7 -5
  6. package/dist/bin/oracle-mev-shadow.mjs +7 -5
  7. package/dist/bin/oracle-public-server.mjs +6 -4
  8. package/dist/bin/oracle-route.mjs +22 -20
  9. package/dist/bin/oracle-scan.mjs +14 -12
  10. package/dist/bin/oracle.mjs +2 -1
  11. package/dist/cli/commands/chat.mjs +166 -164
  12. package/dist/cli/commands/doctor.mjs +3 -3
  13. package/dist/cli/commands/eval.mjs +113 -113
  14. package/dist/cli/commands/farm.mjs +14 -14
  15. package/dist/cli/commands/follow.mjs +16 -14
  16. package/dist/cli/commands/model.mjs +170 -168
  17. package/dist/cli/commands/project.mjs +17 -0
  18. package/dist/cli/commands/resolve.mjs +8 -6
  19. package/dist/cli/commands/shadow.mjs +10 -8
  20. package/dist/cli/commands/signer.mjs +10 -10
  21. package/dist/cli/commands/snipe.mjs +10 -8
  22. package/dist/cli/commands/strategy.mjs +5 -5
  23. package/dist/cli/commands/swap.mjs +27 -25
  24. package/dist/cli/commands/venues.mjs +2 -2
  25. package/dist/data/desk-data.mjs +23 -21
  26. package/dist/data/names.mjs +4 -2
  27. package/dist/data/providers/farming.mjs +2 -2
  28. package/dist/index.mjs +37 -35
  29. package/dist/local-signer/index.mjs +3 -3
  30. package/dist/local-signer/runtime.mjs +9 -9
  31. package/dist/nft/universal-mint-router.mjs +5 -3
  32. package/dist/router/index.mjs +4 -2
  33. package/dist/router/prepare-bridge.mjs +2 -2
  34. package/dist/scanner/index.mjs +5 -3
  35. package/dist/strategy/index.mjs +3 -3
  36. package/package.json +1 -1
  37. package/public/oracle-splash/index.html +2 -2
@@ -1,8 +1,8 @@
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 R 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 L(){return Ht()?process.env.ORACLE_CONFIG_DIR||R.join(ie(),".config","oracle"):R.join(ie(),".config","oracle")}function Wt(){return R.join(L(),"desk.json")}function Gt(){return R.join(L(),"env")}function N({force:e=!1}={}){if(N._done&&!e)return N._result||null;N._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=Gt();if(W.existsSync(i))for(let s of W.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=Wt();if(W.existsSync(i)){let s=JSON.parse(W.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)),N._result=Object.keys(r).length?r:null,N._result}var zt,l,G=o(()=>{zt=R.dirname(Ut(import.meta.url)),l=R.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 Ro}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,Li,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"]]),Li=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,st=o(()=>{zi=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var at=o(()=>{});import{TypedDataEncoder as Xi,getAddress as Qi,isAddress as Zi}from"ethers";var Or,ss,_r,as,ct=o(()=>{Ee();K();st();at();Y();Or=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),ss=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"}]}),as=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as ls,getAddress as ds}from"ethers";var ms,ke=o(()=>{it();ct();ms=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as lt}from"ethers";var $r,Ns,Br,Rs,Ls,Ps,$s,Mr,Bs,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"]),Ns=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"}}),Rs=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Ls=new lt(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Ps=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"]),$s=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]),Bs=Object.freeze({...Br})});import{encode as Ds}from"@msgpack/msgpack";import{keccak256 as js,verifyTypedData as Us}from"ethers";var zs,Hs,Ie=o(()=>{zs=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Hs=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var Te=o(()=>{Q()});import{ed25519 as Qs}from"@noble/curves/ed25519.js";import{base58 as ea}from"@scure/base";import{RawTx as ra,SigHash as na,Transaction as oa}from"@scure/btc-signer";import{Transaction as sa,keccak256 as aa,verifyTypedData as ca}from"ethers";var Oe=o(()=>{Ie();Te()});import{base58 as ha}from"@scure/base";var ee=o(()=>{Z();X();U();Oe()});var ft=o(()=>{ee();Z()});var Ta,Oa,_a,M=o(()=>{Ta=Object.freeze({N:1<<17,r:8,p:1}),Oa=256*1024*1024,_a=16*1024});var Na,pt=o(()=>{Na=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,$a,ht=o(()=>{mt=process.env.ORACLE_PUBLIC_DESKTOP==="1",qr=mt?process.env.ORACLE_CONFIG_DIR||Ce(_e(),".config","oracle"):Ce(_e(),".config","oracle"),$a=mt?qr:Ce(_e(),".config","mad-desk")});var qa,ja,Ua,wt=o(()=>{ht();qa="0".repeat(64),ja=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"}),Ua=Promise.resolve()});var Ne=o(()=>{wt();C();M();ee()});var yt=o(()=>{});import{Wallet as Qa}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 sc,p2wpkh as ac}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 Rc,vt=o(()=>{re();At();Rc=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 Re,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 Re(["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 Re(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),rl=new Re(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import Le 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=Le.existsSync(e.vault),t=Le.existsSync(e.lock),n=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:Le.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),s=Yr(r,{required:n});if(i==="custom")return{provider:i,...s?{model:s}:{},baseUrl:Xr(t)};if(ne(t))throw new Error("baseUrl is only supported for the custom provider");return{...i?{provider:i}:{},...s?{model:s}:{}}}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 Rt from"node:fs";import Qr from"node:path";function en(){return Qr.join(L(),"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),s=F(e.reasoningEffort),a=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"&&!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 Lt(){let e=en();if(!Rt.existsSync(e))return null;try{return tn(JSON.parse(Rt.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:()=>sn,firstHourReport:()=>$e,venueMap:()=>oe});import rn from"node:path";import{homedir as nn}from"node:os";function sn(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,s]of Object.entries(fe)){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 $e({env:e=process.env,model:r=Lt(),vault:t=z(),signerReachable:n=!1,quote:i=null}={}){let s=[],a=(p,g,O,S=null)=>s.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})();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 on.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: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:()=>an,vaultStatus:()=>z});async function an(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 Ut=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 Fe=(e,r)=>{for(var t in r)Ut(e,t,{get:r[t],enumerable:!0})};import G from"node:fs";import zt from"node:os";import N from"node:path";import{fileURLToPath as Ht}from"node:url";function se(){return process.env.ORACLE_FAKE_HOME||zt.homedir()}function Gt(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function R(){return Gt()?process.env.ORACLE_CONFIG_DIR||N.join(se(),".config","oracle"):N.join(se(),".config","oracle")}function Jt(){return N.join(R(),"desk.json")}function Vt(){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=Vt();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=Jt();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 Wt,l,J=o(()=>{Wt=N.dirname(Ht(import.meta.url)),l=N.resolve(Wt,"../..");try{C()}catch{}});var pe,Vn,Ve=o(()=>{pe={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}},Vn=new Map(Object.values(pe).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 me=o(()=>{});var Ke=o(()=>{});var Ye=o(()=>{});var j=o(()=>{});var $=o(()=>{});var Y=o(()=>{j();$()});import{isAddress as io}from"ethers";var we=o(()=>{Y();j();$()});import{Interface as Er,isAddress as fo}from"ethers";var wo,Xe=o(()=>{we();j();$();wo=new Er(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as xr,isAddress as bo}from"ethers";var Ao,vo,Qe=o(()=>{we();j();$();Ao=new xr(["function approve(address spender,uint256 amount) returns (bool)"]),vo=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var _=o(()=>{});import{Interface as Sr,MaxUint256 as No,isAddress as Ro,keccak256 as Lo,toUtf8Bytes as Po}from"ethers";var qo,U=o(()=>{Ye();Xe();Qe();_();$();qo=new Sr(["function approve(address spender,uint256 amount) returns (bool)"])});var Uo,zo,X=o(()=>{Uo=300*1e3,zo=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var Q=o(()=>{U()});import{Address as Vo,NETWORK as Ko,OutScript as Yo,RawTx as Xo,SigHash as Qo,TEST_NETWORK as Zo,Transaction as ei}from"@scure/btc-signer";var be=o(()=>{});import{createHash as vr}from"node:crypto";import{base58 as oi}from"@scure/base";import{getCompiledTransactionMessageDecoder as si}from"@solana/transaction-messages";var Ze,ai,Ee=o(()=>{Ze=e=>vr("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),ai=new Map([[Ze("route"),{name:"route",prefixBytes:0}],[Ze("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});var et=o(()=>{});var hi,xe=o(()=>{et();hi=64*1024});var tt=o(()=>{xe()});var rt=o(()=>{tt()});var Ii,Oi,Ae=o(()=>{_();rt();Ii=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"}),Oi=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 Ci,ve=o(()=>{_();Ci="0x"+"00".repeat(32)});var Ir,$i,ke=o(()=>{ve();_();Ir=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),$i=Object.freeze(Ir.map(e=>e[0]))});var Z=o(()=>{_()});import{TypedDataEncoder as qi,getAddress as ji,isAddress as Ui}from"ethers";var Tr,_r,st=o(()=>{X();Tr=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),_r=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 Wi,at=o(()=>{Wi=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var ct=o(()=>{});import{TypedDataEncoder as Zi,getAddress as es,isAddress as ts}from"ethers";var Cr,cs,Nr,us,ut=o(()=>{xe();Y();at();ct();X();Cr=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),cs=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),Nr=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"}]}),us=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as fs,getAddress as ps}from"ethers";var ws,Ie=o(()=>{st();ut();ws=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as dt}from"ethers";var Mr,Ls,Fr,Ps,$s,Bs,Ms,Dr,Fs,ee=o(()=>{U();Y();X();Q();be();Ee();Ae();ke();Z();Ie();Mr=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),Ls=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}),Fr=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"}}),Ps=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),$s=new dt(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Bs=new dt(["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"]),Ms=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"}}),Dr=Object.freeze([...Mr]),Fs=Object.freeze({...Fr})});import{encode as js}from"@msgpack/msgpack";import{keccak256 as zs,verifyTypedData as Hs}from"ethers";var Ws,Gs,Oe=o(()=>{Ws=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Gs=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var Te=o(()=>{Z()});import{ed25519 as ea}from"@noble/curves/ed25519.js";import{base58 as ra}from"@scure/base";import{RawTx as oa,SigHash as ia,Transaction as sa}from"@scure/btc-signer";import{Transaction as ca,keccak256 as ua,verifyTypedData as la}from"ethers";var _e=o(()=>{Oe();Te()});import{base58 as ga}from"@scure/base";var te=o(()=>{ee();Q();U();_e()});var pt=o(()=>{te();ee()});var _a,Ca,Na,B=o(()=>{_a=Object.freeze({N:1<<17,r:8,p:1}),Ca=256*1024*1024,Na=16*1024});var La,mt=o(()=>{La=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 ht,Ur,Ma,wt=o(()=>{ht=process.env.ORACLE_PUBLIC_DESKTOP==="1",Ur=ht?process.env.ORACLE_CONFIG_DIR||Ne(Ce(),".config","oracle"):Ne(Ce(),".config","oracle"),Ma=ht?Ur:Ne(Ce(),".config","mad-desk")});var Ua,za,Ha,gt=o(()=>{wt();Ua="0".repeat(64),za=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"}),Ha=Promise.resolve()});var Re=o(()=>{gt();_();B();te()});var bt=o(()=>{});import{Wallet as ec}from"ethers";import{base58 as rc}from"@scure/base";import{ed25519 as oc}from"@noble/curves/ed25519.js";import{NETWORK as sc,TEST_NETWORK as ac,WIF as cc,p2wpkh as uc}from"@scure/btc-signer";import{pubECDSA as dc}from"@scure/btc-signer/utils.js";var Et=o(()=>{});var mc,hc,wc,gc,yc,bc,Ec,xc,Sc,Ac,vc,xt=o(()=>{Re();mc=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),hc=Object.freeze(["binance","bybit","okx","coinbase"]),wc=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),gc=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),yc=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),bc=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Ec=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),xc=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),Sc=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),Ac=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),vc=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var St=o(()=>{B()});var Wr,At,ne=o(()=>{Wr=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}"]})}),At=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var vt=o(()=>{ne()});var Pc,kt=o(()=>{ne();vt();Pc=256*1024});var It=o(()=>{ne();kt()});var Ot=o(()=>{B()});import w from"node:path";import Gr from"node:os";import{createHash as Jr,randomBytes as Au}from"node:crypto";import{Interface as Le,keccak256 as ku}from"ethers";import{Transaction as Ou}from"@scure/btc-signer";import{ed25519 as _u}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(Gr.homedir(),".local","state"),"oracle"),t=Jr("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 rl,nl,ol,_t=o(()=>{pt();te();B();mt();Re();bt();U();ee();Q();_e();Ae();ke();Z();Te();ve();Oe();be();Ee();Ie();Et();xt();St();It();Ot();rl=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"]),nl=new Le(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),ol=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 Ct from"node:path";import{homedir as Vr}from"node:os";function Kr(){return process.env.ORACLE_CONFIG_DIR||Ct.join(Vr(),".config","oracle")}function z(){let e=Tt(Ct.join(Kr(),"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 hl,$e=o(()=>{me();Ke();_t();B();hl=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 oe(e){return String(e||"").trim()||void 0}function Xr(e,{required:r=!1}={}){let t=oe(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!Yr.has(t))throw new Error(`unsupported provider: ${t}`);return t}function Qr(e,{required:r=!1}={}){let t=oe(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 Zr(e){let r=oe(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 Nt({provider:e,model:r,baseUrl:t}={},{requireModel:n=!1}={}){let i=Xr(e),s=Qr(r,{required:n});if(i==="custom")return{provider:i,...s?{model:s}:{},baseUrl:Zr(t)};if(oe(t))throw new Error("baseUrl is only supported for the custom provider");return{...i?{provider:i}:{},...s?{model:s}:{}}}var Yr,Rt=o(()=>{Yr=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 en from"node:path";function rn(){return en.join(R(),"model.json")}function M(e){return String(e||"").trim()||void 0}function nn(e={}){let r=M(e.backend)?.toLowerCase()||"auto",t=Nt({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(!tn.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 Pt(){let e=rn();if(!Lt.existsSync(e))return null;try{return nn(JSON.parse(Lt.readFileSync(e,"utf8")))}catch{return null}}var tn,$t=o(()=>{J();Rt();tn=new Set(["auto","standalone","hermes","remote","arch"])});var Bt={};Fe(Bt,{classifyReceipt:()=>q,configDir:()=>cn,firstHourReport:()=>Be,venueMap:()=>ie});import on from"node:path";import{homedir as sn}from"node:os";function cn(e=process.env){return e.ORACLE_CONFIG_DIR||on.join(sn(),".config","oracle")}function ie({env:e=process.env,vault:r=null}={}){let t=r||z(),n=[];for(let[i,s]of Object.entries(pe)){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=Pt(),vault:t=z(),signerReachable:n=!1,quote:i=null}={}){let s=[],a=(p,g,O,S=null)=>s.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})();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 an.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:ie({env:e,vault:t})}}var an,Me=o(()=>{Ve();$e();$t();me();an=new Set(["127.0.0.1","::1","localhost"])});var Mt={};Fe(Mt,{classifyReceipt:()=>q,default:()=>dn,firstHourReport:()=>Be,probeQuote:()=>ln,probeSigner:()=>un,vaultStatus:()=>z});async function un(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 ln(){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 dn,Ft=o(()=>{Me();$e();dn={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=ie();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
- `);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(L(),"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 se}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=se(r,"package.json");if(Ue(n))try{let s=JSON.parse(er(n,"utf8"));if(s&&typeof s.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=se(t,e);return Ue(n)?n:se(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 ae=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"]),Rn=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,sr=e=>Math.round(e*1e4)/1e4;function E(e,r,t,n=!0){!n||t===null||!Number.isFinite(t)||e.push({feature:r,value:sr(t)})}function ar(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:ar,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 s=_.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=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),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=>!$.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 [${ae.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:[...ae],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 Ll={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,T=null)=>{i.push({id:c,status:h,detail:v,fix:T}),h==="fail"&&(s=!0)};a("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;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 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;a("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();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=Ft.join(e.paths.hermesRoot(),"profiles"),I=0;D.existsSync(k)&&(I=D.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=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?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=Ge(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(()=>(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)a(`hour_${T.id}`,T.status,T.detail,T.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)+`
3
+ `);return 0}}});import F from"node:fs";import Dt from"node:path";import qe from"node:fs";import L from"node:path";J();var Yt="0.19.0",An=`hermes-agent==${Yt}`;var De="0.12.1",vn=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${De}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${De}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function Xt(){return L.join(R(),"runtime")}function Qt(){return L.join(Xt(),"venv")}function Zt(e){let r=process.platform==="win32"?"Scripts":"bin",t=process.platform==="win32"?`${e}.exe`:e;return L.join(Qt(),r,t)}function er(){return Zt("hermes")}function tr(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=er();if(qe.existsSync(e))return{ok:!0,bin:e,source:"managed"};let r=tr("hermes");return r?{ok:!0,bin:r,source:"path"}:{ok:!1,bin:null,source:null}}import T from"node:fs";import d from"node:path";J();import{existsSync as ze,readFileSync as rr}from"node:fs";import{dirname as Ue,join as ae}from"node:path";import{fileURLToPath as nr}from"node:url";function or(e){let r=Ue(nr(e));for(let t=0;t<8;t+=1){let n=ae(r,"package.json");if(ze(n))try{let s=JSON.parse(rr(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=or(r),n=ae(t,e);return ze(n)?n:ae(t,"dist","assets",e)}var ir=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 ir.filter(e=>e.website)}var ce=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function ue(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"]),sr="deny",Rn=256*1024;var Ln=Object.freeze({version:1,source:"default",defaultDecision:sr,allow:P,deny:Object.freeze([])});var ar=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"]),Pn=new Set(ar);var le=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),Bn=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,cr=e=>Math.round(e*1e4)/1e4;function E(e,r,t,n=!0){!n||t===null||!Number.isFinite(t)||e.push({feature:r,value:cr(t)})}function ur(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 lr(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 dr(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 fr(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 pr(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 Mn=Object.freeze({wallet:ur,pool:lr,nft_floor:dr,hl_flow:fr,prediction_market:pr});function de(e){try{return T.existsSync(e)}catch{return!1}}function V(e){for(let r of e)if(r&&de(r))return r;return null}function fe(e){try{return He(e,import.meta.url)}catch{return null}}function mr(){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(de(n))try{let s=T.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=T.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([fe("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=T.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 hr(){let e=V([fe("protocols/templates"),d.join(l,"protocols/templates"),d.join(l,"dist/assets/protocols/templates"),d.join(l,"assets/protocols/templates")]);return e?T.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 wr(){let e=V([fe("profiles"),d.join(l,"profiles"),d.join(l,"dist/assets/profiles"),d.join(l,"assets/profiles")]);return e?T.readdirSync(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&!r.name.startsWith("_")).map(r=>r.name):[]}function gr(){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(de(r))try{let t=T.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,D=1)=>{r.push({id:c,status:h,detail:v,weight:D})},[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 [${ce.join(", ")}]; mode=${ue(e)?"ON":"off"}`,2);let f=mr();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=hr();t("protocol_templates",p.length>=2?"ok":"warn",p.length?p.join(", "):"none",2);let g=wr();t("profiles",g.includes("protocol-builder")&&g.includes("oracle")?"ok":g.length>=1?"warn":"fail",g.join(", ")||"none",2),t("signals_engine",le.length>=4?"ok":"fail",`types: ${le.join(", ")} (cold / no hot exec)`,2);let O=We();t("harness_roster",O.length>=8?"ok":"warn",`${O.length} supported harnesses; Oracle native default; MCP inbound only`,2),t("custody_prepare_only",gr()?"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:ue(e),attributes:[...ce],packageRoot:l,checks:r}}function qt(){let[e,r]=process.versions.node.split(".").map(Number);return e>20||e===20&&r>=19}function fn(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 pn(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 $l={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,D=null)=>{i.push({id:c,status:h,detail:v,fix:D}),h==="fail"&&(s=!0)};a("node",qt()?"ok":"fail",`node ${process.versions.node}`,qt()?null:"install node >= 20.19");let u=e.paths.oracleExecEnvPath(),f=fn(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 pn(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;a("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=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=Dt.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=Dt.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(()=>(Me(),Bt)),{probeSigner:h,probeQuote:v}=await Promise.resolve().then(()=>(Ft(),Mt)),[D,jt]=await Promise.all([h(process.env),v()]);A=c({signerReachable:D,quote:jt});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
4
  `);else{for(let c of i)process.stdout.write(`${c.status.toUpperCase().padEnd(4)} ${c.id}: ${c.detail}
5
5
  `),c.fix&&process.stdout.write(` fix: ${c.fix}
6
6
  `);m&&process.stdout.write(`
7
7
  ${m.summary}
8
- `)}return H.ok?0:1}};export{Ll as default};
8
+ `)}return H.ok?0:1}};export{$l as default};