@oracle-agent/oracle 0.35.7 → 0.35.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
- package/dist/cli/commands/chat.mjs +144 -144
- package/dist/cli/commands/doctor.mjs +3 -3
- package/dist/cli/commands/eval.mjs +72 -72
- package/dist/cli/commands/model.mjs +147 -147
- package/dist/cli/commands/receipt.mjs +15 -5
- package/dist/cli/commands/sign.mjs +8 -8
- package/dist/cli/commands/signer.mjs +17 -17
- package/dist/cli/commands/venues.mjs +2 -2
- package/dist/local-signer/anvil-attestation-worker.mjs +1 -1
- package/dist/local-signer/runtime.mjs +14 -14
- package/dist/public-control/session-orchestrator.mjs +2 -0
- package/package.json +2 -1
|
@@ -1,8 +1,8 @@
|
|
|
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)}
|
|
1
|
+
var Wt=Object.defineProperty;var o=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};var Me=(e,r)=>{for(var t in r)Wt(e,t,{get:r[t],enumerable:!0})};import G from"node:fs";import Gt from"node:os";import N from"node:path";import{fileURLToPath as Jt}from"node:url";function ae(){return process.env.ORACLE_FAKE_HOME||Gt.homedir()}function Kt(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function R(){return Kt()?process.env.ORACLE_CONFIG_DIR||N.join(ae(),".config","oracle"):N.join(ae(),".config","oracle")}function Yt(){return N.join(R(),"desk.json")}function Xt(){return N.join(R(),"env")}function C({force:e=!1}={}){if(C._done&&!e)return C._result||null;C._done=!0;let r={},t=(i,s)=>{if(s==null)return;let a=String(s).trim();a&&(process.env[i]!=null&&String(process.env[i]).trim()!==""||(process.env[i]=a,r[i]=a))};try{let i=Xt();if(G.existsSync(i))for(let s of G.readFileSync(i,"utf8").split(/\r?\n/)){let a=s.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!a||a[2].startsWith("#"))continue;let u=a[2];(u.startsWith('"')&&u.endsWith('"')||u.startsWith("'")&&u.endsWith("'"))&&(u=u.slice(1,-1)),t(a[1],u)}}catch{}try{let i=Yt();if(G.existsSync(i)){let s=JSON.parse(G.readFileSync(i,"utf8"));s&&typeof s=="object"&&(t("ORACLE_DESK_URL",s.deskUrl||s.dataUrl||s.url),t("ORACLE_DATA_URL",s.dataUrl||s.deskUrl||s.url),t("ORACLE_API_URL",s.apiUrl||s.dataUrl||s.deskUrl),t("ORACLE_PUBLIC_URL",s.publicUrl||s.deskUrl||s.dataUrl),t("ORACLE_EXEC_URL",s.execUrl),t("MAD_DESK_URL",s.deskUrl||s.dataUrl))}}catch{}let n=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return n&&(t("ORACLE_DESK_URL",n),t("ORACLE_DATA_URL",n),t("ORACLE_API_URL",n),t("ORACLE_PUBLIC_URL",n),t("MAD_DESK_URL",n)),C._result=Object.keys(r).length?r:null,C._result}var Vt,l,J=o(()=>{Vt=N.dirname(Jt(import.meta.url)),l=N.resolve(Vt,"../..");try{C()}catch{}});var me,Yn,Ve=o(()=>{me={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},Yn=new Map(Object.values(me).map(e=>[e.chainId,e]))});function j(e){let r=e?.transactionHash||e?.hash||e?.txid||null;return r?{happened:!0,hash:String(r),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}var he=o(()=>{});var Ke=o(()=>{});var Ye=o(()=>{});var U=o(()=>{});var $=o(()=>{});var Y=o(()=>{U();$()});import{isAddress as ao}from"ethers";var ge=o(()=>{Y();U();$()});import{Interface as Ar,isAddress as mo}from"ethers";var yo,Xe=o(()=>{ge();U();$();yo=new Ar(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as vr,isAddress as xo}from"ethers";var ko,Io,Qe=o(()=>{ge();U();$();ko=new vr(["function approve(address spender,uint256 amount) returns (bool)"]),Io=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var _=o(()=>{});import{Interface as kr,MaxUint256 as Lo,isAddress as Po,keccak256 as $o,toUtf8Bytes as Bo}from"ethers";var Uo,B=o(()=>{Ye();Xe();Qe();_();$();Uo=new kr(["function approve(address spender,uint256 amount) returns (bool)"])});var Ho,Wo,X=o(()=>{Ho=300*1e3,Wo=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var Z=o(()=>{B()});import{Address as Yo,NETWORK as Xo,OutScript as Qo,RawTx as Zo,SigHash as ei,TEST_NETWORK as ti,Transaction as ri}from"@scure/btc-signer";var be=o(()=>{});import{createHash as Ir}from"node:crypto";import{base58 as si}from"@scure/base";import{getCompiledTransactionMessageDecoder as ci}from"@solana/transaction-messages";var et,ui,Ee=o(()=>{et=e=>Ir("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),ui=new Map([[et("route"),{name:"route",prefixBytes:0}],[et("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});var tt=o(()=>{});var gi,xe=o(()=>{tt();gi=64*1024});var rt=o(()=>{xe()});var nt=o(()=>{rt()});var Oi,_i,Ae=o(()=>{_();nt();Oi=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"leverage","perp-isolated-margin":"margin","builder-fee-approval":"approveBuilder","hype-stake-deposit":"stake","hype-stake-withdraw":"unstake","hype-delegate":"delegate","hype-undelegate":"delegate"}),_i=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"updateLeverage","perp-isolated-margin":"updateIsolatedMargin","builder-fee-approval":"approveBuilderFee","hype-stake-deposit":"cDeposit","hype-stake-withdraw":"cWithdraw","hype-delegate":"tokenDelegate","hype-undelegate":"tokenDelegate"})});var Ri,ve=o(()=>{_();Ri="0x"+"00".repeat(32)});var Or,Di,ke=o(()=>{ve();_();Or=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Di=Object.freeze(Or.map(e=>e[0]))});var ee=o(()=>{_()});import{TypedDataEncoder as Ui,getAddress as zi,isAddress as Hi}from"ethers";var Cr,Nr,at=o(()=>{X();Cr=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Nr=Object.freeze({Order:[{name:"salt",type:"uint256"},{name:"maker",type:"address"},{name:"receiver",type:"address"},{name:"makerAsset",type:"address"},{name:"takerAsset",type:"address"},{name:"makingAmount",type:"uint256"},{name:"takingAmount",type:"uint256"},{name:"makerTraits",type:"uint256"}]})});var Ji,ct=o(()=>{Ji=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var ut=o(()=>{});import{TypedDataEncoder as ts,getAddress as rs,isAddress as ns}from"ethers";var Rr,ls,Lr,ds,lt=o(()=>{xe();Y();ct();ut();X();Rr=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),ls=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),Lr=Object.freeze({Order:[{name:"sellToken",type:"address"},{name:"buyToken",type:"address"},{name:"receiver",type:"address"},{name:"sellAmount",type:"uint256"},{name:"buyAmount",type:"uint256"},{name:"validTo",type:"uint32"},{name:"appData",type:"bytes32"},{name:"feeAmount",type:"uint256"},{name:"kind",type:"string"},{name:"partiallyFillable",type:"bool"},{name:"sellTokenBalance",type:"string"},{name:"buyTokenBalance",type:"string"}]}),ds=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as ms,getAddress as hs}from"ethers";var ys,Ie=o(()=>{at();lt();ys=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as ft}from"ethers";var Fr,$s,qr,Bs,Ds,Ms,Fs,jr,qs,te=o(()=>{B();Y();X();Z();be();Ee();Ae();ke();ee();Ie();Fr=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),$s=Object.freeze({swap:5,bridge:5,perps:0,nft:0,mint:0,transfer:0,approve:0,delegate:0,identity:0,order:0,cancel:0,leverage:0,margin:0,approveBuilder:0,stake:0,unstake:0}),qr=Object.freeze({"0x04e45aaf":{provider:"uniswap-v3",action:"swap",layout:"router02-exact-input-single"},"0x414bf389":{provider:"uniswap-v3",action:"swap",layout:"swap-router-exact-input-single"},"0xc04b8d59":{provider:"uniswap-v3",action:"swap",layout:"exact-input-deadline"},"0xb858183f":{provider:"uniswap-v3",action:"swap",layout:"exact-input"},"0x5ae401dc":{provider:"uniswap-v3",action:"swap",layout:"multicall-deadline"},"0xa026383e":{provider:"aerodrome",action:"swap",layout:"aerodrome-exact-input-single"},"0x7b939232":{provider:"across-v3",action:"bridge",layout:"across-deposit-v3"}}),Bs=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Ds=new ft(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Ms=new ft(["function mintAllowList(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity,(uint80 mintPrice,uint48 maxTotalMintableByWallet,uint48 startTime,uint48 endTime,uint48 dropStageIndex,uint32 maxTokenSupplyForStage,uint16 feeBps,bool restrictFeeRecipients) mintParams,bytes32[] proof) payable"]),Fs=Object.freeze({"0xa0712d68":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0x1249c58b":{provider:"nft-mint",action:"mint",layout:"mint-no-args"},"0x2db11544":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xefef39a1":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xa6f2ae3a":{provider:"nft-mint",action:"mint",layout:"mint-no-args"}}),jr=Object.freeze([...Fr]),qs=Object.freeze({...qr})});import{encode as zs}from"@msgpack/msgpack";import{keccak256 as Ws,verifyTypedData as Gs}from"ethers";var Js,Vs,Te=o(()=>{Js=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Vs=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var Oe=o(()=>{ee()});import{ed25519 as ra}from"@noble/curves/ed25519.js";import{base58 as oa}from"@scure/base";import{RawTx as sa,SigHash as aa,Transaction as ca}from"@scure/btc-signer";import{Transaction as la,keccak256 as da,verifyTypedData as fa}from"ethers";var _e=o(()=>{Te();Oe()});import{base58 as ba}from"@scure/base";var re=o(()=>{te();Z();B();_e()});var mt=o(()=>{re();te()});var Na,Ra,La,D=o(()=>{Na=Object.freeze({N:1<<17,r:8,p:1}),Ra=256*1024*1024,La=16*1024});var $a,ht=o(()=>{$a=Object.freeze({1:{name:"ethereum",mode:"mempool-private",endpoints:["https://rpc.flashbots.net/fast","https://rpc.mevblocker.io"]},8453:{name:"base",mode:"sequencer",endpoints:["https://mainnet-sequencer.base.org"]},10:{name:"optimism",mode:"sequencer",endpoints:["https://mainnet-sequencer.optimism.io"]},42161:{name:"arbitrum",mode:"sequencer",endpoints:["https://arb1-sequencer.arbitrum.io/rpc"]},56:{name:"bsc",mode:"mempool-private",endpoints:["https://rpc.48.club","https://bsc.rpc.blxrbdn.com"]},137:{name:"polygon",mode:"mempool-private",endpoints:["https://polygon-bor-rpc.publicnode.com"]},43114:{name:"avalanche",mode:"public-only",endpoints:[]},999:{name:"hyperevm",mode:"public-only",endpoints:[]}})});import{homedir as Ce}from"node:os";import{join as Ne}from"node:path";var wt,Hr,Fa,gt=o(()=>{wt=process.env.ORACLE_PUBLIC_DESKTOP==="1",Hr=wt?process.env.ORACLE_CONFIG_DIR||Ne(Ce(),".config","oracle"):Ne(Ce(),".config","oracle"),Fa=wt?Hr:Ne(Ce(),".config","mad-desk")});var Ha,Wa,Ga,yt=o(()=>{gt();Ha="0".repeat(64),Wa=Object.freeze({PREPARE:"exec.prepare",SIGN:"exec.sign",BROADCAST:"exec.broadcast",POLICY_REJECT:"policy.reject",AUTH_GRANT:"auth.grant",AUTH_OK:"auth.verify.ok",AUTH_FAIL:"auth.verify.fail"}),Ga=Promise.resolve()});var Re=o(()=>{yt();_();D();re()});var Et=o(()=>{});var xt=o(()=>{});var St=o(()=>{xt();B()});import{Wallet as ac}from"ethers";import{base58 as uc}from"@scure/base";import{ed25519 as dc}from"@noble/curves/ed25519.js";import{NETWORK as pc,TEST_NETWORK as mc,WIF as hc,p2wpkh as wc}from"@scure/btc-signer";import{pubECDSA as yc}from"@scure/btc-signer/utils.js";var At=o(()=>{});var xc,Sc,Ac,vc,kc,Ic,Tc,Oc,_c,Cc,Nc,vt=o(()=>{Re();xc=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),Sc=Object.freeze(["binance","bybit","okx","coinbase"]),Ac=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),vc=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),kc=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Ic=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Tc=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Oc=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),_c=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),Cc=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),Nc=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var kt=o(()=>{D()});var Jr,It,oe=o(()=>{Jr=Object.freeze({binance:Object.freeze({create:["POST","/api/v3/order"],cancel:["DELETE","/api/v3/order"],status:["GET","/api/v3/order"]}),bybit:Object.freeze({create:["POST","/v5/order/create"],cancel:["POST","/v5/order/cancel"],status:["GET","/v5/order/realtime"]}),okx:Object.freeze({create:["POST","/api/v5/trade/order"],cancel:["POST","/api/v5/trade/cancel-order"],status:["GET","/api/v5/trade/order"]}),coinbase:Object.freeze({create:["POST","/orders"],cancel:["DELETE","/orders/{order_id}"],status:["GET","/orders/{order_id}"]})}),It=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var Tt=o(()=>{oe()});var jc,Ot=o(()=>{oe();Tt();jc=256*1024});var _t=o(()=>{oe();Ot()});var Ct=o(()=>{D()});import w from"node:path";import Vr from"node:os";import{createHash as Kr,randomBytes as Nu}from"node:crypto";import{Interface as Le,keccak256 as Lu}from"ethers";import{Transaction as $u}from"@scure/btc-signer";import{ed25519 as Du}from"@noble/curves/ed25519.js";function Nt(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||w.join(process.env.XDG_STATE_HOME||w.join(Vr.homedir(),".local","state"),"oracle"),t=Kr("sha256").update(w.resolve(e)).digest("hex").slice(0,16);return{vault:w.join(e,"vault.json"),policy:w.join(e,"signer-policy.json"),policyKey:w.join(e,"policy-integrity-key"),policyAnchor:w.join(r,`signer-policy-${t}.high-water`),ledger:w.join(e,"signer-ledger.json"),ledgerAnchor:w.join(r,`signer-ledger-${t}.high-water`),cexOrders:w.join(e,"cex-orders.json"),cexOrdersAnchor:w.join(r,`cex-orders-${t}.high-water`),token:w.join(e,"signer-token"),lock:w.join(r,`signer-${t}.lock`)}}var dl,fl,pl,Rt=o(()=>{mt();re();D();ht();Re();Et();B();St();te();Z();_e();Ae();ke();ee();Oe();ve();Te();be();Ee();Ie();At();vt();kt();_t();Ct();dl=new Le(["function collection() view returns (address)","function token() view returns (address)","function robinhoodSwapFeeWei() view returns (uint256)","function quoteSpecificBuy(uint256 tokenId) view returns (uint256 totalCost,uint256 baseCost,uint256 fee,uint256 protocolFee,bool available)","function quoteSellNFT() view returns (uint256 netPayout,uint256 grossPayout,uint256 fee,uint256 protocolFee)","function inventory(uint256 tokenId) view returns (bool)","function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),fl=new Le(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),pl=new Le(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import Pe from"node:fs";import Lt from"node:path";import{homedir as Yr}from"node:os";function Xr(){return process.env.ORACLE_CONFIG_DIR||Lt.join(Yr(),".config","oracle")}function z(){let e=Nt(Lt.join(Xr(),"signer")),r=Pe.existsSync(e.vault),t=Pe.existsSync(e.lock),n=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:Pe.existsSync(e.policy),armed:r&&!t,disarmed:t,capabilities:{swap:n,bridge:n},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var vl,$e=o(()=>{he();Ke();Rt();D();vl=Object.freeze([{type:"function",function:{name:"vault_status",description:"Read local Oracle vault/signer readiness. Never returns key material.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_status",description:"Ping the loopback signer. Fails closed if it is not running.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_pending",description:"List pending local-signer artifacts. Read-only. Does not approve, sign, or broadcast.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_queue",description:"Queue a prepared unsigned artifact on the loopback signer. Does not broadcast.",parameters:{type:"object",properties:{artifact:{type:"object"}},required:["artifact"],additionalProperties:!1}}},{type:"function",function:{name:"signer_ack",description:"Execute one pending artifact through the armed local signer (same path as Telegram Allow). Fails if the signer is not running or disarmed. Never holds keys.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_deny",description:"Drop one pending local-signer artifact. Nothing signed.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_execute",description:"Broadcast one already-confirmed local artifact. Requires a one-use confirmationNonce from the local signer TTY confirm. Cannot mint confirmation itself.",parameters:{type:"object",properties:{artifact:{type:"object"},confirmationNonce:{type:"string",minLength:32,maxLength:128}},required:["artifact","confirmationNonce"],additionalProperties:!1}}},{type:"function",function:{name:"signer_disarm",description:"Global kill switch. Stops the local signer from broadcasting.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"receipt_report",description:"Receipt or it did not happen. Requires transactionHash/hash/txid.",parameters:{type:"object",properties:{receipt:{type:"object"},transactionHash:{type:"string"},hash:{type:"string"},txid:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"watch_create",description:"Create an alert-only watch. Never execute.",parameters:{type:"object",properties:{chain:{type:"string"},token:{type:"string"},condition:{type:"string"},note:{type:"string"}},required:["chain","token","condition"],additionalProperties:!1}}},{type:"function",function:{name:"watch_list",description:"List local alert-only watches.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"portfolio_snapshot",description:"How to read the one portfolio snapshot. knownUsd is incomplete if a provider is missing.",parameters:{type:"object",properties:{},additionalProperties:!1}}}])});function ie(e){return String(e||"").trim()||void 0}function Zr(e,{required:r=!1}={}){let t=ie(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!Qr.has(t))throw new Error(`unsupported provider: ${t}`);return t}function en(e,{required:r=!1}={}){let t=ie(e);if(!t){if(r)throw new Error("model is required");return}if(t.includes("..")||t.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(t))throw new Error("invalid model id");return t}function tn(e){let r=ie(e);if(!r||r.length>2048)throw new Error("invalid custom base URL");let t;try{t=new URL(r)}catch{throw new Error("invalid custom base URL")}let n=t.hostname.toLowerCase().replace(/^\[|\]$/g,""),i=n==="localhost"||n==="127.0.0.1"||n==="::1";if(t.protocol!=="https:"&&!(t.protocol==="http:"&&i)||t.username||t.password||t.search||t.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return t.toString().replace(/\/+$/,"")}function Pt({provider:e,model:r,baseUrl:t}={},{requireModel:n=!1}={}){let i=Zr(e),s=en(r,{required:n});if(i==="custom")return{provider:i,...s?{model:s}:{},baseUrl:tn(t)};if(ie(t))throw new Error("baseUrl is only supported for the custom provider");return{...i?{provider:i}:{},...s?{model:s}:{}}}var Qr,$t=o(()=>{Qr=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"])});import Bt from"node:fs";import rn from"node:path";function on(){return rn.join(R(),"model.json")}function M(e){return String(e||"").trim()||void 0}function sn(e={}){let r=M(e.backend)?.toLowerCase()||"auto",t=Pt({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),n=M(e.apiKeyEnv),i=Number.parseInt(String(e.contextLength||""),10),s=M(e.reasoningEffort),a=M(e.computeHost||e.remoteHost),u=M(e.computeUser||e.remoteUser),f=M(e.computePath||e.remotePath);if(!nn.has(r))throw new Error(`unsupported backend: ${r}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(r))throw new Error("remote compute backends are disabled in the public desktop");if(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))throw new Error("api key env must be an uppercase environment variable name");if(r==="remote"&&!a)throw new Error("remote backend requires computeHost");return{backend:r,...t,...n?{apiKeyEnv:n}:{},...Number.isFinite(i)&&i>0?{contextLength:i}:{},...s?{reasoningEffort:s}:{},...a?{computeHost:a}:{},...u?{computeUser:u}:{},...f?{computePath:f}:{}}}function Dt(){let e=on();if(!Bt.existsSync(e))return null;try{return sn(JSON.parse(Bt.readFileSync(e,"utf8")))}catch{return null}}var nn,Mt=o(()=>{J();$t();nn=new Set(["auto","standalone","hermes","remote","arch"])});var Ft={};Me(Ft,{classifyReceipt:()=>j,configDir:()=>ln,firstHourReport:()=>Be,venueMap:()=>se});import an from"node:path";import{homedir as cn}from"node:os";function ln(e=process.env){return e.ORACLE_CONFIG_DIR||an.join(cn(),".config","oracle")}function se({env:e=process.env,vault:r=null}={}){let t=r||z(),n=[];for(let[i,s]of Object.entries(me)){let a=(s.rpcEnv||[]).some(f=>String(e[f]||"").trim()),u="prepare";s.evm?a&&(u="live"):u="unavailable",n.push({key:i,chainId:s.chainId,name:s.name,family:"evm",status:u,execute:!!(t.vaultExists&&t.armed&&!t.disarmed),note:a?"rpc configured":"public read/prepare; set RPC for live reads"})}return n.push({key:"solana",chainId:null,name:"Solana",family:"sol",status:"prepare",execute:!1,note:"Jupiter quote/prepare; local sol signer"},{key:"bitcoin",chainId:null,name:"Bitcoin",family:"btc",status:"prepare",execute:!1,note:"Esplora read; local btc signer"},{key:"hyperliquid-l1",chainId:null,name:"Hyperliquid L1",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not an EVM signer family"},{key:"polymarket",chainId:null,name:"Polymarket",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not a signer family"}),n}function Be({env:e=process.env,model:r=Dt(),vault:t=z(),signerReachable:n=!1,quote:i=null}={}){let s=[],a=(p,g,T,S=null)=>s.push({id:p,status:g,detail:T,fix:S}),u=(()=>{let[p,g]=process.versions.node.split(".").map(Number);return p>20||p===20&&g>=19})();a("node",u?"ok":"fail",`node ${process.versions.node}`,u?null:"install node >= 20.19"),r?r.backend==="hermes"?a("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):a("model","ok",`${r.backend||"auto"} ${r.provider||""} ${r.model||""}`.trim()):a("model","fail","no model.json","oracle setup model"),t.vaultExists?t.disarmed?a("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):a("vault",t.armed?"ok":"warn",t.armed?"present, armed":"present, not armed"):a("vault","fail","no local vault","oracle sign init");let f=e.ORACLE_SIGNER_HOST||"127.0.0.1";return un.has(f)?a("signer",n?"ok":"warn",n?`loopback ${f}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):a("signer","fail",`signer host ${f} is not loopback`,"unset ORACLE_SIGNER_HOST"),i?i.ok?a("quote","ok",i.detail||"net quote returned"):a("quote","warn",i.detail||"quote unavailable","check network / oracle data serve"):a("quote","warn","quote not probed",null),{ok:!s.some(p=>p.status==="fail"),checks:s,venues:se({env:e,vault:t})}}var un,De=o(()=>{Ve();$e();Mt();he();un=new Set(["127.0.0.1","::1","localhost"])});var qt={};Me(qt,{classifyReceipt:()=>j,default:()=>pn,firstHourReport:()=>Be,probeQuote:()=>fn,probeSigner:()=>dn,vaultStatus:()=>z});async function dn(e=process.env){let r=e.ORACLE_SIGNER_HOST||"127.0.0.1",t=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${r}:${t}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}async function fn(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let t=(await e.json())?.pairs?.[0];return!t?.chainId||!t?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${t.chainId} ${t.baseToken?.symbol}/${t.quoteToken?.symbol} $${t.priceUsd}`}}catch(e){return{ok:!1,detail:e instanceof Error?e.message:"quote failed"}}}var pn,jt=o(()=>{De();$e();pn={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let r=e.argv.includes("--json"),t=se();if(r)return process.stdout.write(`${JSON.stringify({venues:t},null,2)}
|
|
2
2
|
`),0;for(let n of t)process.stdout.write(`${n.status.padEnd(12)} ${n.key.padEnd(16)} ${n.name} exec=${n.execute?"local":"no"}
|
|
3
|
-
`);return 0}}});import F from"node:fs";import 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)+`
|
|
3
|
+
`);return 0}}});import F from"node:fs";import Ut from"node:path";import qe from"node:fs";import L from"node:path";J();var Zt="0.19.0",kn=`hermes-agent==${Zt}`;var Fe="0.12.1",In=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Fe}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Fe}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function er(){return L.join(R(),"runtime")}function tr(){return L.join(er(),"venv")}function rr(e){let r=process.platform==="win32"?"Scripts":"bin",t=process.platform==="win32"?`${e}.exe`:e;return L.join(tr(),r,t)}function nr(){return rr("hermes")}function or(e){let r=process.platform==="win32"&&!L.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let t of(process.env.PATH||"").split(L.delimiter))if(t)for(let n of r){let i=L.join(t,`${e}${n}`);try{if(qe.existsSync(i))return i}catch{}}return null}function je(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=nr();if(qe.existsSync(e))return{ok:!0,bin:e,source:"managed"};let r=or("hermes");return r?{ok:!0,bin:r,source:"path"}:{ok:!1,bin:null,source:null}}import O from"node:fs";import d from"node:path";J();import{existsSync as ze,readFileSync as ir}from"node:fs";import{dirname as Ue,join as ce}from"node:path";import{fileURLToPath as sr}from"node:url";function ar(e){let r=Ue(sr(e));for(let t=0;t<8;t+=1){let n=ce(r,"package.json");if(ze(n))try{let s=JSON.parse(ir(n,"utf8"));if(s&&typeof s.version=="string")return r}catch{}let i=Ue(r);if(i===r)break;r=i}throw new Error(`oracle: could not resolve package root from ${e}`)}function He(e,r){let t=ar(r),n=ce(t,e);return ze(n)?n:ce(t,"dist","assets",e)}var cr=Object.freeze([{id:"oracle",label:"Oracle Native",kind:"oracle",bins:["oracle"],website:!0,detect:!0},{id:"hermes",label:"Hermes Agent",kind:"mcp",bins:["hermes"],mcpTarget:"generic",configKey:"hermes",website:!0,detect:!0},{id:"claude",label:"Claude Code",kind:"mcp",bins:["claude"],mcpTarget:"claude-code",configKey:"claudeCode",website:!0,detect:!0},{id:"claude-desktop",label:"Claude Desktop",kind:"mcp",bins:[],mcpTarget:"claude-desktop",configKey:"claudeDesktop",website:!0,detect:!1},{id:"chatgpt",label:"ChatGPT",kind:"mcp",bins:[],mcpTarget:"chatgpt",configKey:"chatgpt",website:!0,detect:!1},{id:"codex",label:"OpenAI Codex",kind:"mcp",bins:["codex"],mcpTarget:"codex",configKey:"codex",website:!0,detect:!0},{id:"cursor",label:"Cursor",kind:"mcp",bins:["cursor","cursor-agent"],mcpTarget:"cursor",configKey:"cursor",website:!0,detect:!0},{id:"windsurf",label:"Windsurf",kind:"mcp",bins:["windsurf"],mcpTarget:"vscode",configKey:"windsurf",website:!0,detect:!0},{id:"vscode",label:"VS Code / Copilot",kind:"mcp",bins:["code","code-insiders"],mcpTarget:"vscode",configKey:"vscode",website:!0,detect:!0},{id:"openclaw",label:"OpenClaw",kind:"mcp",bins:["openclaw","claw"],mcpTarget:"generic",configKey:"openclaw",website:!0,detect:!0},{id:"perplexity",label:"Perplexity",kind:"mcp",bins:["perplexity","pplx"],mcpTarget:"generic",configKey:"perplexity",website:!0,detect:!0},{id:"manus",label:"Manus",kind:"mcp",bins:["manus"],mcpTarget:"generic",configKey:"manus",website:!0,detect:!0},{id:"prime",label:"Prime Intellect Agent",kind:"mcp",bins:["prime-agent","prime"],mcpTarget:"generic",configKey:"prime",website:!1,detect:!0},{id:"opencode",label:"OpenCode",kind:"mcp",bins:["opencode"],mcpTarget:"generic",configKey:"opencode",website:!1,detect:!0},{id:"aider",label:"Aider",kind:"mcp",bins:["aider"],mcpTarget:"generic",configKey:"aider",website:!1,detect:!0},{id:"continue",label:"Continue",kind:"mcp",bins:["continue"],mcpTarget:"vscode",configKey:"continue",website:!1,detect:!0},{id:"goose",label:"Goose",kind:"mcp",bins:["goose"],mcpTarget:"generic",configKey:"goose",website:!1,detect:!0},{id:"amp",label:"Amp",kind:"mcp",bins:["amp"],mcpTarget:"generic",configKey:"amp",website:!1,detect:!0},{id:"generic",label:"Generic MCP",kind:"mcp",bins:[],mcpTarget:"generic",configKey:"genericMcp",website:!0,detect:!1}]);function We(){return cr.filter(e=>e.website)}var ue=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function le(e=process.env){let r=String(e?.ORACLE_RESEARCH_MODE??e?.ORACLE_RLM_MODE??"").trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"||r==="research"}var P=Object.freeze(["oracle_cli","memory_add","memory_remove","memory_search","skill_load","skill_create","skill_list","cron_add","cron_list","cron_remove","meta_analyze","web_fetch","web_search","file_read","file_write","mcp_list","mcp_call","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","learn_skill","workspace_artifact","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vault_status","signer_status","signer_execute","signer_disarm","receipt_report","watch_create","watch_list","portfolio_snapshot","vision_analyze","browser_exec","xurl","knowledge_search"]),ur="deny",Pn=256*1024;var $n=Object.freeze({version:1,source:"default",defaultDecision:ur,allow:P,deny:Object.freeze([])});var lr=Object.freeze(["oracle_cli","memory_search","skill_load","skill_list","web_fetch","web_search","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vault_status","signer_status","receipt_report","watch_list","portfolio_snapshot","vision_analyze","knowledge_search"]),Bn=new Set(lr);var de=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),Mn=Object.freeze({wallets:"wallet",smart_wallet:"wallet",pools:"pool",new_pool:"pool",nft:"nft_floor",nft_floors:"nft_floor",hyperliquid:"hl_flow",prediction:"prediction_market",prediction_markets:"prediction_market"}),x=(e,r=0,t=1)=>Math.min(t,Math.max(r,e)),b=e=>Number.isFinite(Number(e))?Number(e):null,dr=e=>Math.round(e*1e4)/1e4;function E(e,r,t,n=!0){!n||t===null||!Number.isFinite(t)||e.push({feature:r,value:dr(t)})}function fr(e,r){let t=b(e.repeatBuys??e.repeat_buys??e.buyCount),n=b(e.walletWinRate??e.winRate);E(r,"repeat_buys",t===null?null:x((t-1)/4)*.38),E(r,"wallet_win_rate",n===null?null:(x(n)-.5)*.5)}function pr(e,r){let t=b(e.ageHours??e.poolAgeHours),n=b(e.liquidityUsd??e.liquidity),i=e.liquidityLocked??e.locked;E(r,"pool_age",t===null?null:t<24?-.42:x(t/720)*.12),E(r,"liquidity",n===null?null:(x(Math.log10(Math.max(1,n))/7)-.5)*.28),E(r,"liquidity_lock",i==null?null:i?.12:-.28)}function mr(e,r){let t=b(e.floorChange??e.floorChangePct),n=b(e.sales??e.saleCount);E(r,"floor_change",t===null?null:x(t,-1,1)*.35),E(r,"sales_depth",n===null?null:x(n/50)*.18)}function hr(e,r){let t=b(e.flowImbalance??e.imbalance),n=b(e.fundingRate??e.funding);E(r,"flow_imbalance",t===null?null:x(t,-1,1)*.42),E(r,"funding",n===null?null:-x(n*100,-1,1)*.12)}function wr(e,r){let t=b(e.marketProbability??e.marketPrice??e.probability),n=b(e.fairProbability??e.referenceProbability??e.fairValue);E(r,"probability_mispricing",t===null||n===null?null:x(n-t,-1,1)*.65);let i=b(e.liquidityUsd??e.liquidity);E(r,"market_liquidity",i===null?null:x(Math.log10(Math.max(1,i))/6)*.12)}var Fn=Object.freeze({wallet:fr,pool:pr,nft_floor:mr,hl_flow:hr,prediction_market:wr});function fe(e){try{return O.existsSync(e)}catch{return!1}}function V(e){for(let r of e)if(r&&fe(r))return r;return null}function pe(e){try{return He(e,import.meta.url)}catch{return null}}function gr(){let e=[d.join(l,"dist/data/desk-data.mjs"),d.join(l,"data/desk-data.mjs"),d.join(l,"src/data/desk-data.mjs")];for(let n of e)if(fe(n))try{let s=O.readFileSync(n,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],a=new Set(s.map(u=>u.toLowerCase()));if(a.size>=20)return{count:a.size,detail:`${a.size} provider ids (bundled desk-data)`}}catch{}let r=[d.join(l,"src/data/providers"),d.join(l,"dist/data/providers"),d.join(l,"data/providers")],t=V(r);if(!t)return{count:0,detail:"providers dir missing"};try{let n=O.readdirSync(t).filter(i=>i.endsWith(".mjs"));return{count:n.length,detail:`${n.length} provider modules`}}catch(n){return{count:0,detail:n instanceof Error?n.message:String(n)}}}function Ge(){let e=V([pe("skills"),d.join(l,"skills"),d.join(l,"dist/assets/skills"),d.join(l,"assets/skills")]);if(!e)return{count:0,trading:[],building:[]};let r=O.readdirSync(e),t=r.filter(i=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(i)),n=r.filter(i=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(i));return{count:r.length,trading:t,building:n}}function yr(){let e=V([pe("protocols/templates"),d.join(l,"protocols/templates"),d.join(l,"dist/assets/protocols/templates"),d.join(l,"assets/protocols/templates")]);return e?O.readdirSync(e).filter(t=>!t.startsWith(".")):Ge().building.some(t=>/protocol-builder|dex-launch|token-launch/i.test(t))?["(via skills: protocol-builder / launch packs)"]:[]}function br(){let e=V([pe("profiles"),d.join(l,"profiles"),d.join(l,"dist/assets/profiles"),d.join(l,"assets/profiles")]);return e?O.readdirSync(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&!r.name.startsWith("_")).map(r=>r.name):[]}function Er(){try{if(P.includes("trade_lifecycle")&&!P.some(r=>/broadcast|wallet_sign/.test(r)))return!0}catch{}let e=[d.join(l,"src/capability-posture.mjs"),d.join(l,"dist/capability-posture.mjs"),d.join(l,"capability-posture.mjs"),d.join(l,"dist/public-control/policy-schema.mjs"),d.join(l,"README.md"),d.join(l,"package.json")];for(let r of e)if(fe(r))try{let t=O.readFileSync(r,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(t))return!0}catch{}return!1}function Je(e=process.env){let r=[],t=(c,h,v,q=1)=>{r.push({id:c,status:h,detail:v,weight:q})},[n,i]=process.versions.node.split(".").map(Number),s=n>20||n===20&&i>=19;t("node",s?"ok":"fail",`node ${process.versions.node}`,2);let u=["oracle_cli","research_delegate","trade_lifecycle","signal_score","skill_load","learn_skill","code_eval","cron_add","web_fetch"].filter(c=>!P.includes(c));t("agent_tools",u.length===0?"ok":"warn",u.length===0?`safe tools ${P.length}; signal_score present`:`missing tools: ${u.join(",")}`,3),t("research_attributes","ok",`attrs [${ue.join(", ")}]; mode=${le(e)?"ON":"off"}`,2);let f=gr();t("providers",f.count>=40?"ok":f.count>=10?"warn":"fail",f.detail,3);let y=Ge();t("skills_trading_build",y.trading.length>=5&&y.building.length>=4?"ok":y.count>=10?"warn":"fail",`${y.count} skills; trading=${y.trading.length} building=${y.building.length}`,3);let p=yr();t("protocol_templates",p.length>=2?"ok":"warn",p.length?p.join(", "):"none",2);let g=br();t("profiles",g.includes("protocol-builder")&&g.includes("oracle")?"ok":g.length>=1?"warn":"fail",g.join(", ")||"none",2),t("signals_engine",de.length>=4?"ok":"fail",`types: ${de.join(", ")} (cold / no hot exec)`,2);let T=We();t("harness_roster",T.length>=8?"ok":"warn",`${T.length} supported harnesses; Oracle native default; MCP inbound only`,2),t("custody_prepare_only",Er()?"ok":"fail","public plane prepare-only",4);let S=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";t("data_url","ok",S,1);let k=0,I=0;for(let c of r)I+=c.weight,c.status==="ok"?k+=c.weight:c.status==="warn"&&(k+=c.weight*.5);let m=I?Math.round(k/I*100):0,A=!r.some(c=>c.status==="fail")&&m>=70,H=A?`AGENTIC READY ${m}% \u2014 Oracle is the crypto control plane (prepare-only); pair coding harnesses via MCP for build.`:`AGENTIC GAPS ${m}% \u2014 fix fail/warn checks before calling Oracle the default crypto harness.`;return{ok:A,score:k,max:I,pct:m,summary:H,researchMode:le(e),attributes:[...ue],packageRoot:l,checks:r}}function zt(){let[e,r]=process.versions.node.split(".").map(Number);return e>20||e===20&&r>=19}function mn(e){if(!F.existsSync(e))return{};let r={};for(let t of F.readFileSync(e,"utf8").split(/\r?\n/)){let n=t.match(/^([A-Z0-9_]+)=(.*)$/);n&&(r[n[1]]=n[2])}return r}async function hn(e){let r=e.replace(/\/$/,"");return(await Promise.all(["/health","/public/health"].map(async n=>{try{return(await fetch(r+n)).ok}catch{return!1}}))).some(Boolean)}var Hl={name:"doctor",summary:"check the read plane (+ optional --agentic readiness score)",group:"read",usage:"oracle doctor [--json] [--agentic] [--first-hour]",async run(e){let r=e.argv.includes("--json"),t=e.argv.includes("--agentic"),n=e.argv.includes("--first-hour"),i=[],s=!1,a=(c,h,v,q=null)=>{i.push({id:c,status:h,detail:v,fix:q}),h==="fail"&&(s=!0)};a("node",zt()?"ok":"fail",`node ${process.versions.node}`,zt()?null:"install node >= 20.19");let u=e.paths.oracleExecEnvPath(),f=mn(u),y=process.env.ORACLE_ROUTE_ATTESTATION_SECRET||process.env.MAD_ROUTE_ATTESTATION_SECRET||process.env.ORACLE_ATTESTATION_SECRET||process.env.ORACLE_STAMP_HMAC_SECRET||f.ORACLE_ROUTE_ATTESTATION_SECRET||f.MAD_ROUTE_ATTESTATION_SECRET||f.ORACLE_ATTESTATION_SECRET||f.ORACLE_STAMP_HMAC_SECRET;a("attestation_secret",y?"ok":"warn",y?"present":"missing",y?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let p=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",g=await hn(p),T=e.paths.loadDeskRouting&&(process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL)?`desk ${process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL}`:null;a("data_server",g?"ok":"warn",g?`reachable ${p}${T?` (${T})`:""}`:`down ${p}`,g?null:p.includes("127.0.0.1")||p.includes("localhost")?"oracle data serve OR set ~/.config/oracle/desk.json to YOUR_DESK_HOST":"check the desk URL in ~/.config/oracle/desk.json (/public/health)");let S=je();a("harness_model","ok","Oracle native harness is default; external harnesses are inbound MCP only (oracle harness detect)",null),a("hermes_opt_in","ok",S.ok?`detected ${S.bin} (${S.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let k=Ut.join(e.paths.hermesRoot(),"profiles"),I=0;F.existsSync(k)&&(I=F.readdirSync(k,{withFileTypes:!0}).filter(c=>c.isDirectory()).length),a("hermes_lanes","ok",I>0?`${I} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);{let c=Ut.join(k,"oracle",".env"),h=[];if(F.existsSync(c)){let v=F.readFileSync(c,"utf8");/^TELEGRAM_BOT_TOKEN=.+/m.test(v)&&h.push("telegram"),/^DISCORD_BOT_TOKEN=.+/m.test(v)&&h.push("discord"),/^SLACK_BOT_TOKEN=.+/m.test(v)&&h.push("slack")}h.length?S.ok?a("messaging","ok",`${h.join("/")} configured \xB7 runtime ${S.source}`,null):a("messaging","warn",`${h.join("/")} token set but messaging runtime missing \u2014 bot cannot answer`,"oracle bootstrap, then oracle setup gateway restart"):a("messaging","ok","no channel tokens configured (optional \u2014 oracle setup)",null)}let m=null;if(t){m=Je(process.env);for(let c of m.checks)a(`agentic_${c.id}`,c.status,c.detail,null)}let A=null;if(n){let{firstHourReport:c}=await Promise.resolve().then(()=>(De(),Ft)),{probeSigner:h,probeQuote:v}=await Promise.resolve().then(()=>(jt(),qt)),[q,Ht]=await Promise.all([h(process.env),v()]);A=c({signerReachable:q,quote:Ht});for(let W of A.checks)a(`hour_${W.id}`,W.status,W.detail,W.fix)}let H={ok:!s&&(m?m.ok:!0)&&(A?A.ok:!0),checks:i,...A?{firstHour:A}:{},...m?{agentic:{pct:m.pct,summary:m.summary,attributes:m.attributes,researchMode:m.researchMode}}:{}};if(r)process.stdout.write(JSON.stringify(H,null,2)+`
|
|
4
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{
|
|
8
|
+
`)}return H.ok?0:1}};export{Hl as default};
|