@oracle-agent/oracle 0.28.13 → 0.28.15
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-action-semantics/SKILL.md +3 -1
- package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
- package/dist/bin/desk-server.mjs +26 -26
- package/dist/cli/commands/chat.mjs +140 -140
- package/dist/cli/commands/doctor.mjs +3 -3
- package/dist/cli/commands/eval.mjs +73 -74
- package/dist/cli/commands/model.mjs +143 -143
- package/dist/cli/commands/receipt.mjs +2 -2
- package/dist/cli/commands/setup.mjs +7 -7
- package/dist/cli/commands/sign.mjs +11 -11
- package/dist/cli/commands/signer.mjs +13 -13
- package/dist/cli/commands/venues.mjs +2 -2
- package/dist/data/desk-data.mjs +24 -24
- package/dist/index.mjs +29 -29
- package/dist/local-signer/anvil-attestation-worker.mjs +1 -1
- package/dist/local-signer/index.mjs +3 -3
- package/dist/local-signer/runtime.mjs +10 -10
- package/dist/public-api/agent-grants.mjs +2 -2
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var At=Object.defineProperty;var a=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};var Oe=(e,r)=>{for(var t in r)At(e,t,{get:r[t],enumerable:!0})};import H from"node:fs";import vt from"node:os";import N from"node:path";import{fileURLToPath as kt}from"node:url";function te(){return process.env.ORACLE_FAKE_HOME||vt.homedir()}function It(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function C(){return It()?process.env.ORACLE_CONFIG_DIR||N.join(te(),".config","oracle"):N.join(te(),".config","oracle")}function _t(){return N.join(C(),"desk.json")}function Ot(){return N.join(C(),"env")}function O({force:e=!1}={}){if(O._done&&!e)return O._result||null;O._done=!0;let r={},t=(o,i)=>{if(i==null)return;let s=String(i).trim();s&&(process.env[o]!=null&&String(process.env[o]).trim()!==""||(process.env[o]=s,r[o]=s))};try{let o=Ot();if(H.existsSync(o))for(let i of H.readFileSync(o,"utf8").split(/\r?\n/)){let s=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let u=s[2];(u.startsWith('"')&&u.endsWith('"')||u.startsWith("'")&&u.endsWith("'"))&&(u=u.slice(1,-1)),t(s[1],u)}}catch{}try{let o=_t();if(H.existsSync(o)){let i=JSON.parse(H.readFileSync(o,"utf8"));i&&typeof i=="object"&&(t("ORACLE_DESK_URL",i.deskUrl||i.dataUrl||i.url),t("ORACLE_DATA_URL",i.dataUrl||i.deskUrl||i.url),t("ORACLE_API_URL",i.apiUrl||i.dataUrl||i.deskUrl),t("ORACLE_PUBLIC_URL",i.publicUrl||i.deskUrl||i.dataUrl),t("ORACLE_EXEC_URL",i.execUrl),t("MAD_DESK_URL",i.deskUrl||i.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)),O._result=Object.keys(r).length?r:null,O._result}var Tt,l,W=a(()=>{Tt=N.dirname(kt(import.meta.url)),l=N.resolve(Tt,"../..");try{O()}catch{}});var ce,xn,qe=a(()=>{ce={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}},xn=new Map(Object.values(ce).map(e=>[e.chainId,e]))});function M(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 ue=a(()=>{});var De=a(()=>{});var je=a(()=>{});var q=a(()=>{});var P=a(()=>{});var de=a(()=>{q();P()});import{isAddress as Rn}from"ethers";var fe=a(()=>{de();q();P()});import{Interface as tr,isAddress as Mn}from"ethers";var Un,Ue=a(()=>{fe();q();P();Un=new tr(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as rr,isAddress as Jn}from"ethers";var Kn,Yn,He=a(()=>{fe();q();P();Kn=new rr(["function approve(address spender,uint256 amount) returns (bool)"]),Yn=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var $=a(()=>{});import{Interface as nr,MaxUint256 as no,isAddress as oo,keccak256 as io,toUtf8Bytes as ao}from"ethers";var po,D=a(()=>{je();Ue();He();$();P();po=new nr(["function approve(address spender,uint256 amount) returns (bool)"])});var ho,wo,Je=a(()=>{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 G=a(()=>{D()});import{Address as xo,NETWORK as So,OutScript as Ao,RawTx as vo,SigHash as ko,TEST_NETWORK as To,Transaction as Io}from"@scure/btc-signer";var me=a(()=>{});import{createHash as ir}from"node:crypto";import{base58 as Co}from"@scure/base";import{getCompiledTransactionMessageDecoder as Lo}from"@solana/transaction-messages";var ze,Po,he=a(()=>{ze=e=>ir("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),Po=new Map([[ze("route"),{name:"route",prefixBytes:0}],[ze("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});var Ge=a(()=>{});var Uo,Ve=a(()=>{Ge();Uo=64*1024});var Ke=a(()=>{Ve()});var Ye=a(()=>{Ke()});var ei,ti,we=a(()=>{$();Ye();ei=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"}),ti=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,ge=a(()=>{$();oi="0x"+"00".repeat(32)});var ar,ui,ye=a(()=>{ge();$();ar=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),ui=Object.freeze(ar.map(e=>e[0]))});var V=a(()=>{$()});import{Interface as tt}from"ethers";var dr,_i,fr,Oi,Ni,Ci,Ri,pr,Li,K=a(()=>{D();de();Je();G();me();he();we();ye();V();dr=new Set(["evm","evm-swap","evm-bridge","evm-nft","btc","sol","hl","poly","lighter"]),_i=Object.freeze({swap:5,bridge:5,perps:0,nft:0,mint:0,transfer:0,approve:0,order:0,cancel:0,leverage:0,margin:0,approveBuilder:0,stake:0,unstake:0,delegate: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"}}),Oi=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Ni=new tt(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Ci=new tt(["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"]),Ri=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"}}),pr=Object.freeze([...dr]),Li=Object.freeze({...fr})});import{encode as Bi}from"@msgpack/msgpack";import{keccak256 as Mi,verifyTypedData as qi}from"ethers";var Di,ji,Ee=a(()=>{Di=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),ji=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var be=a(()=>{V()});import{ed25519 as Ki}from"@noble/curves/ed25519.js";import{base58 as Xi}from"@scure/base";import{RawTx as Zi,SigHash as ea,Transaction as ta}from"@scure/btc-signer";import{Transaction as na,keccak256 as oa,verifyTypedData as ia}from"ethers";var xe=a(()=>{Ee();be()});import{base58 as fa}from"@scure/base";var Y=a(()=>{K();G();D();xe()});var nt=a(()=>{Y();K()});var va,ka,Ta,X=a(()=>{va=Object.freeze({N:1<<17,r:8,p:1}),ka=256*1024*1024,Ta=16*1024});import{homedir as Se}from"node:os";import{join as Ae}from"node:path";var ot,wr,Na,it=a(()=>{ot=process.env.ORACLE_PUBLIC_DESKTOP==="1",wr=ot?process.env.ORACLE_CONFIG_DIR||Ae(Se(),".config","oracle"):Ae(Se(),".config","oracle"),Na=ot?wr:Ae(Se(),".config","mad-desk")});var $a,Ba,Fa,at=a(()=>{it();$a="0".repeat(64),Ba=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"}),Fa=Promise.resolve()});var ct=a(()=>{at();X();Y()});var ut=a(()=>{});import{Wallet as za}from"ethers";import{base58 as Va}from"@scure/base";import{ed25519 as Ya}from"@noble/curves/ed25519.js";import{NETWORK as Qa,TEST_NETWORK as Za,WIF as es,p2wpkh as ts}from"@scure/btc-signer";import{pubECDSA as ns}from"@scure/btc-signer/utils.js";var lt=a(()=>{});import E from"node:path";import yr from"node:os";import{createHash as Er,randomBytes as Ps}from"node:crypto";import{Interface as ve,keccak256 as Bs}from"ethers";import{Transaction as Ms}from"@scure/btc-signer";import{ed25519 as Ds}from"@noble/curves/ed25519.js";function dt(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||E.join(process.env.XDG_STATE_HOME||E.join(yr.homedir(),".local","state"),"oracle"),t=Er("sha256").update(E.resolve(e)).digest("hex").slice(0,16);return{vault:E.join(e,"vault.json"),policy:E.join(e,"signer-policy.json"),policyKey:E.join(e,"policy-integrity-key"),policyAnchor:E.join(r,`signer-policy-${t}.high-water`),ledger:E.join(e,"signer-ledger.json"),ledgerAnchor:E.join(r,`signer-ledger-${t}.high-water`),token:E.join(e,"signer-token"),lock:E.join(r,`signer-${t}.lock`)}}var sc,cc,uc,ft=a(()=>{nt();Y();X();ct();ut();D();K();G();xe();we();ye();V();be();ge();Ee();me();he();lt();sc=new ve(["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"]),cc=new ve(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),uc=new ve(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import ke from"node:fs";import pt from"node:path";import{homedir as br}from"node:os";function xr(){return process.env.ORACLE_CONFIG_DIR||pt.join(br(),".config","oracle")}function j(){let e=dt(pt.join(xr(),"signer")),r=ke.existsSync(e.vault),t=ke.existsSync(e.lock),n=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:ke.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 bc,Te=a(()=>{ue();De();ft();X();bc=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_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 Q(e){return String(e||"").trim()||void 0}function Ar(e,{required:r=!1}={}){let t=Q(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!Sr.has(t))throw new Error(`unsupported provider: ${t}`);return t}function vr(e,{required:r=!1}={}){let t=Q(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 kr(e){let r=Q(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,""),o=n==="localhost"||n==="127.0.0.1"||n==="::1";if(t.protocol!=="https:"&&!(t.protocol==="http:"&&o)||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 mt({provider:e,model:r,baseUrl:t}={},{requireModel:n=!1}={}){let o=Ar(e),i=vr(r,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:kr(t)};if(Q(t))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var Sr,ht=a(()=>{Sr=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","custom","anthropic-oauth","openai-codex","xai-oauth"])});import wt from"node:fs";import Tr from"node:path";function _r(){return Tr.join(C(),"model.json")}function B(e){return String(e||"").trim()||void 0}function Or(e={}){let r=B(e.backend)?.toLowerCase()||"auto",t=mt({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),n=B(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=B(e.reasoningEffort),s=B(e.computeHost||e.remoteHost),u=B(e.computeUser||e.remoteUser),f=B(e.computePath||e.remotePath);if(!Ir.has(r))throw new Error(`unsupported backend: ${r}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(r))throw new Error("remote compute backends are disabled in the public desktop");if(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))throw new Error("api key env must be an uppercase environment variable name");if(r==="remote"&&!s)throw new Error("remote backend requires computeHost");return{backend:r,...t,...n?{apiKeyEnv:n}:{},...Number.isFinite(o)&&o>0?{contextLength:o}:{},...i?{reasoningEffort:i}:{},...s?{computeHost:s}:{},...u?{computeUser:u}:{},...f?{computePath:f}:{}}}function gt(){let e=_r();if(!wt.existsSync(e))return null;try{return Or(JSON.parse(wt.readFileSync(e,"utf8")))}catch{return null}}var Ir,yt=a(()=>{W();ht();Ir=new Set(["auto","standalone","hermes","remote","arch"])});var Et={};Oe(Et,{classifyReceipt:()=>M,configDir:()=>Lr,firstHourReport:()=>Ie,venueMap:()=>Z});import Nr from"node:path";import{homedir as Cr}from"node:os";function Lr(e=process.env){return e.ORACLE_CONFIG_DIR||Nr.join(Cr(),".config","oracle")}function Z({env:e=process.env,vault:r=null}={}){let t=r||j(),n=[];for(let[o,i]of Object.entries(ce)){let s=(i.rpcEnv||[]).some(f=>String(e[f]||"").trim()),u="prepare";i.evm?s&&(u="live"):u="unavailable",n.push({key:o,chainId:i.chainId,name:i.name,family:"evm",status:u,execute:!!(t.vaultExists&&t.armed&&!t.disarmed),note:s?"rpc configured":"public read/prepare; set RPC for live reads"})}return n.push({key:"solana",chainId:null,name:"Solana",family:"sol",status:"prepare",execute:!1,note:"Jupiter quote/prepare; local sol signer"},{key:"bitcoin",chainId:null,name:"Bitcoin",family:"btc",status:"prepare",execute:!1,note:"Esplora read; local btc signer"},{key:"hyperliquid-l1",chainId:null,name:"Hyperliquid L1",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not an EVM signer family"},{key:"polymarket",chainId:null,name:"Polymarket",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not a signer family"}),n}function Ie({env:e=process.env,model:r=gt(),vault:t=j(),signerReachable:n=!1,quote:o=null}={}){let i=[],s=(p,h,v,k=null)=>i.push({id:p,status:h,detail:v,fix:k}),u=(()=>{let[p,h]=process.versions.node.split(".").map(Number);return p>20||p===20&&h>=19})();s("node",u?"ok":"fail",`node ${process.versions.node}`,u?null:"install node >= 20.19"),r?r.backend==="hermes"?s("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):s("model","ok",`${r.backend||"auto"} ${r.provider||""} ${r.model||""}`.trim()):s("model","fail","no model.json","oracle setup model"),t.vaultExists?t.disarmed?s("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):s("vault",t.armed?"ok":"warn",t.armed?"present, armed":"present, not armed"):s("vault","fail","no local vault","oracle sign init");let f=e.ORACLE_SIGNER_HOST||"127.0.0.1";return Rr.has(f)?s("signer",n?"ok":"warn",n?`loopback ${f}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):s("signer","fail",`signer host ${f} is not loopback`,"unset ORACLE_SIGNER_HOST"),o?o.ok?s("quote","ok",o.detail||"net quote returned"):s("quote","warn",o.detail||"quote unavailable","check network / oracle data serve"):s("quote","warn","quote not probed",null),{ok:!i.some(p=>p.status==="fail"),checks:i,venues:Z({env:e,vault:t})}}var Rr,_e=a(()=>{qe();Te();yt();ue();Rr=new Set(["127.0.0.1","::1","localhost"])});var bt={};Oe(bt,{classifyReceipt:()=>M,default:()=>Br,firstHourReport:()=>Ie,probeQuote:()=>$r,probeSigner:()=>Pr,vaultStatus:()=>j});async function Pr(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 $r(){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 Br,xt=a(()=>{_e();Te();Br={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=Z();if(r)return process.stdout.write(`${JSON.stringify({venues:t},null,2)}
|
|
1
|
+
var vt=Object.defineProperty;var a=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};var Ce=(e,r)=>{for(var t in r)vt(e,t,{get:r[t],enumerable:!0})};import H from"node:fs";import kt from"node:os";import C from"node:path";import{fileURLToPath as Tt}from"node:url";function te(){return process.env.ORACLE_FAKE_HOME||kt.homedir()}function _t(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function R(){return _t()?process.env.ORACLE_CONFIG_DIR||C.join(te(),".config","oracle"):C.join(te(),".config","oracle")}function Ot(){return C.join(R(),"desk.json")}function Nt(){return C.join(R(),"env")}function N({force:e=!1}={}){if(N._done&&!e)return N._result||null;N._done=!0;let r={},t=(o,i)=>{if(i==null)return;let s=String(i).trim();s&&(process.env[o]!=null&&String(process.env[o]).trim()!==""||(process.env[o]=s,r[o]=s))};try{let o=Nt();if(H.existsSync(o))for(let i of H.readFileSync(o,"utf8").split(/\r?\n/)){let s=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let u=s[2];(u.startsWith('"')&&u.endsWith('"')||u.startsWith("'")&&u.endsWith("'"))&&(u=u.slice(1,-1)),t(s[1],u)}}catch{}try{let o=Ot();if(H.existsSync(o)){let i=JSON.parse(H.readFileSync(o,"utf8"));i&&typeof i=="object"&&(t("ORACLE_DESK_URL",i.deskUrl||i.dataUrl||i.url),t("ORACLE_DATA_URL",i.dataUrl||i.deskUrl||i.url),t("ORACLE_API_URL",i.apiUrl||i.dataUrl||i.deskUrl),t("ORACLE_PUBLIC_URL",i.publicUrl||i.deskUrl||i.dataUrl),t("ORACLE_EXEC_URL",i.execUrl),t("MAD_DESK_URL",i.deskUrl||i.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 It,l,W=a(()=>{It=C.dirname(Tt(import.meta.url)),l=C.resolve(It,"../..");try{N()}catch{}});var ce,Sn,je=a(()=>{ce={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}},Sn=new Map(Object.values(ce).map(e=>[e.chainId,e]))});function M(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 ue=a(()=>{});var Ue=a(()=>{});var He=a(()=>{});var q=a(()=>{});var B=a(()=>{});var de=a(()=>{q();B()});import{isAddress as Ln}from"ethers";var fe=a(()=>{de();q();B()});import{Interface as rr,isAddress as qn}from"ethers";var Hn,We=a(()=>{fe();q();B();Hn=new rr(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as nr,isAddress as zn}from"ethers";var Yn,Xn,Je=a(()=>{fe();q();B();Yn=new nr(["function approve(address spender,uint256 amount) returns (bool)"]),Xn=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var _=a(()=>{});import{Interface as or,MaxUint256 as oo,isAddress as io,keccak256 as ao,toUtf8Bytes as so}from"ethers";var mo,D=a(()=>{He();We();Je();_();B();mo=new or(["function approve(address spender,uint256 amount) returns (bool)"])});var wo,go,ze=a(()=>{wo=300*1e3,go=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var G=a(()=>{D()});import{Address as So,NETWORK as Ao,OutScript as vo,RawTx as ko,SigHash as To,TEST_NETWORK as Io,Transaction as _o}from"@scure/btc-signer";var he=a(()=>{});import{createHash as ar}from"node:crypto";import{base58 as Ro}from"@scure/base";import{getCompiledTransactionMessageDecoder as Po}from"@solana/transaction-messages";var Ge,Bo,we=a(()=>{Ge=e=>ar("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),Bo=new Map([[Ge("route"),{name:"route",prefixBytes:0}],[Ge("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});var Ve=a(()=>{});var Ho,Ke=a(()=>{Ve();Ho=64*1024});var Ye=a(()=>{Ke()});var Xe=a(()=>{Ye()});var ti,ri,ye=a(()=>{_();Xe();ti=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"}),ri=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 ii,Ee=a(()=>{_();ii="0x"+"00".repeat(32)});var sr,li,be=a(()=>{Ee();_();sr=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(sr.map(e=>e[0]))});var V=a(()=>{_()});import{Interface as rt}from"ethers";var fr,_i,pr,Oi,Ni,Ci,Ri,mr,Li,K=a(()=>{D();de();ze();G();he();we();ye();be();V();fr=new Set(["evm","evm-swap","evm-bridge","evm-nft","btc","sol","hl","poly","lighter"]),_i=Object.freeze({swap:5,bridge:5,perps:0,nft:0,mint:0,transfer:0,approve:0,order:0,cancel:0,leverage:0,margin:0,approveBuilder:0,stake:0,unstake:0,delegate:0}),pr=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"}}),Oi=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Ni=new rt(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Ci=new rt(["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"]),Ri=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([...fr]),Li=Object.freeze({...pr})});import{encode as $i}from"@msgpack/msgpack";import{keccak256 as Mi,verifyTypedData as qi}from"ethers";var Di,ji,xe=a(()=>{Di=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),ji=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var Se=a(()=>{V()});import{ed25519 as Ki}from"@noble/curves/ed25519.js";import{base58 as Xi}from"@scure/base";import{RawTx as Zi,SigHash as ea,Transaction as ta}from"@scure/btc-signer";import{Transaction as na,keccak256 as oa,verifyTypedData as ia}from"ethers";var Ae=a(()=>{xe();Se()});import{base58 as fa}from"@scure/base";var Y=a(()=>{K();G();D();Ae()});var ot=a(()=>{Y();K()});var va,ka,Ta,X=a(()=>{va=Object.freeze({N:1<<17,r:8,p:1}),ka=256*1024*1024,Ta=16*1024});import{homedir as ve}from"node:os";import{join as ke}from"node:path";var it,gr,Na,at=a(()=>{it=process.env.ORACLE_PUBLIC_DESKTOP==="1",gr=it?process.env.ORACLE_CONFIG_DIR||ke(ve(),".config","oracle"):ke(ve(),".config","oracle"),Na=it?gr:ke(ve(),".config","mad-desk")});var Ba,$a,Fa,st=a(()=>{at();Ba="0".repeat(64),$a=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"}),Fa=Promise.resolve()});var ut=a(()=>{st();_();X();Y()});var lt=a(()=>{});import{Wallet as Ga}from"ethers";import{base58 as Ka}from"@scure/base";import{ed25519 as Xa}from"@noble/curves/ed25519.js";import{NETWORK as Za,TEST_NETWORK as es,WIF as ts,p2wpkh as rs}from"@scure/btc-signer";import{pubECDSA as os}from"@scure/btc-signer/utils.js";var dt=a(()=>{});import E from"node:path";import Er from"node:os";import{createHash as br,randomBytes as Bs}from"node:crypto";import{Interface as Te,keccak256 as Fs}from"ethers";import{Transaction as qs}from"@scure/btc-signer";import{ed25519 as js}from"@noble/curves/ed25519.js";function ft(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||E.join(process.env.XDG_STATE_HOME||E.join(Er.homedir(),".local","state"),"oracle"),t=br("sha256").update(E.resolve(e)).digest("hex").slice(0,16);return{vault:E.join(e,"vault.json"),policy:E.join(e,"signer-policy.json"),policyKey:E.join(e,"policy-integrity-key"),policyAnchor:E.join(r,`signer-policy-${t}.high-water`),ledger:E.join(e,"signer-ledger.json"),ledgerAnchor:E.join(r,`signer-ledger-${t}.high-water`),token:E.join(e,"signer-token"),lock:E.join(r,`signer-${t}.lock`)}}var cc,uc,lc,pt=a(()=>{ot();Y();X();ut();lt();D();K();G();Ae();ye();be();V();Se();Ee();xe();he();we();dt();cc=new Te(["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"]),uc=new Te(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),lc=new Te(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import Ie from"node:fs";import mt from"node:path";import{homedir as xr}from"node:os";function Sr(){return process.env.ORACLE_CONFIG_DIR||mt.join(xr(),".config","oracle")}function j(){let e=ft(mt.join(Sr(),"signer")),r=Ie.existsSync(e.vault),t=Ie.existsSync(e.lock),n=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:Ie.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 xc,_e=a(()=>{ue();Ue();pt();X();xc=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_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 Q(e){return String(e||"").trim()||void 0}function vr(e,{required:r=!1}={}){let t=Q(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!Ar.has(t))throw new Error(`unsupported provider: ${t}`);return t}function kr(e,{required:r=!1}={}){let t=Q(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 Tr(e){let r=Q(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,""),o=n==="localhost"||n==="127.0.0.1"||n==="::1";if(t.protocol!=="https:"&&!(t.protocol==="http:"&&o)||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 ht({provider:e,model:r,baseUrl:t}={},{requireModel:n=!1}={}){let o=vr(e),i=kr(r,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:Tr(t)};if(Q(t))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var Ar,wt=a(()=>{Ar=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","custom","anthropic-oauth","openai-codex","xai-oauth"])});import gt from"node:fs";import Ir from"node:path";function Or(){return Ir.join(R(),"model.json")}function $(e){return String(e||"").trim()||void 0}function Nr(e={}){let r=$(e.backend)?.toLowerCase()||"auto",t=ht({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),n=$(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=$(e.reasoningEffort),s=$(e.computeHost||e.remoteHost),u=$(e.computeUser||e.remoteUser),f=$(e.computePath||e.remotePath);if(!_r.has(r))throw new Error(`unsupported backend: ${r}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(r))throw new Error("remote compute backends are disabled in the public desktop");if(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))throw new Error("api key env must be an uppercase environment variable name");if(r==="remote"&&!s)throw new Error("remote backend requires computeHost");return{backend:r,...t,...n?{apiKeyEnv:n}:{},...Number.isFinite(o)&&o>0?{contextLength:o}:{},...i?{reasoningEffort:i}:{},...s?{computeHost:s}:{},...u?{computeUser:u}:{},...f?{computePath:f}:{}}}function yt(){let e=Or();if(!gt.existsSync(e))return null;try{return Nr(JSON.parse(gt.readFileSync(e,"utf8")))}catch{return null}}var _r,Et=a(()=>{W();wt();_r=new Set(["auto","standalone","hermes","remote","arch"])});var bt={};Ce(bt,{classifyReceipt:()=>M,configDir:()=>Pr,firstHourReport:()=>Oe,venueMap:()=>Z});import Cr from"node:path";import{homedir as Rr}from"node:os";function Pr(e=process.env){return e.ORACLE_CONFIG_DIR||Cr.join(Rr(),".config","oracle")}function Z({env:e=process.env,vault:r=null}={}){let t=r||j(),n=[];for(let[o,i]of Object.entries(ce)){let s=(i.rpcEnv||[]).some(f=>String(e[f]||"").trim()),u="prepare";i.evm?s&&(u="live"):u="unavailable",n.push({key:o,chainId:i.chainId,name:i.name,family:"evm",status:u,execute:!!(t.vaultExists&&t.armed&&!t.disarmed),note:s?"rpc configured":"public read/prepare; set RPC for live reads"})}return n.push({key:"solana",chainId:null,name:"Solana",family:"sol",status:"prepare",execute:!1,note:"Jupiter quote/prepare; local sol signer"},{key:"bitcoin",chainId:null,name:"Bitcoin",family:"btc",status:"prepare",execute:!1,note:"Esplora read; local btc signer"},{key:"hyperliquid-l1",chainId:null,name:"Hyperliquid L1",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not an EVM signer family"},{key:"polymarket",chainId:null,name:"Polymarket",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not a signer family"}),n}function Oe({env:e=process.env,model:r=yt(),vault:t=j(),signerReachable:n=!1,quote:o=null}={}){let i=[],s=(p,h,v,k=null)=>i.push({id:p,status:h,detail:v,fix:k}),u=(()=>{let[p,h]=process.versions.node.split(".").map(Number);return p>20||p===20&&h>=19})();s("node",u?"ok":"fail",`node ${process.versions.node}`,u?null:"install node >= 20.19"),r?r.backend==="hermes"?s("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):s("model","ok",`${r.backend||"auto"} ${r.provider||""} ${r.model||""}`.trim()):s("model","fail","no model.json","oracle setup model"),t.vaultExists?t.disarmed?s("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):s("vault",t.armed?"ok":"warn",t.armed?"present, armed":"present, not armed"):s("vault","fail","no local vault","oracle sign init");let f=e.ORACLE_SIGNER_HOST||"127.0.0.1";return Lr.has(f)?s("signer",n?"ok":"warn",n?`loopback ${f}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):s("signer","fail",`signer host ${f} is not loopback`,"unset ORACLE_SIGNER_HOST"),o?o.ok?s("quote","ok",o.detail||"net quote returned"):s("quote","warn",o.detail||"quote unavailable","check network / oracle data serve"):s("quote","warn","quote not probed",null),{ok:!i.some(p=>p.status==="fail"),checks:i,venues:Z({env:e,vault:t})}}var Lr,Ne=a(()=>{je();_e();Et();ue();Lr=new Set(["127.0.0.1","::1","localhost"])});var xt={};Ce(xt,{classifyReceipt:()=>M,default:()=>Fr,firstHourReport:()=>Oe,probeQuote:()=>$r,probeSigner:()=>Br,vaultStatus:()=>j});async function Br(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 $r(){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 Fr,St=a(()=>{Ne();_e();Fr={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=Z();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 ee from"node:fs";import Fr from"node:path";import Ce from"node:fs";import R from"node:path";W();var Ct="0.19.0",Kr=`hermes-agent==${Ct}`;var Ne="0.12.1",Yr=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Ne}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Ne}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function Rt(){return R.join(C(),"runtime")}function Lt(){return R.join(Rt(),"venv")}function Pt(e){let r=process.platform==="win32"?"Scripts":"bin",t=process.platform==="win32"?`${e}.exe`:e;return R.join(Lt(),r,t)}function $t(){return Pt("hermes")}function Bt(e){let r=process.platform==="win32"&&!R.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let t of(process.env.PATH||"").split(R.delimiter))if(t)for(let n of r){let o=R.join(t,`${e}${n}`);try{if(Ce.existsSync(o))return o}catch{}}return null}function Re(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=$t();if(Ce.existsSync(e))return{ok:!0,bin:e,source:"managed"};let r=Bt("hermes");return r?{ok:!0,bin:r,source:"path"}:{ok:!1,bin:null,source:null}}import I from"node:fs";import d from"node:path";W();import{existsSync as Pe,readFileSync as Ft}from"node:fs";import{dirname as Le,join as re}from"node:path";import{fileURLToPath as Mt}from"node:url";function qt(e){let r=Le(Mt(e));for(let t=0;t<8;t+=1){let n=re(r,"package.json");if(Pe(n))try{let i=JSON.parse(Ft(n,"utf8"));if(i&&typeof i.version=="string")return r}catch{}let o=Le(r);if(o===r)break;r=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function $e(e,r){let t=qt(r),n=re(t,e);return Pe(n)?n:re(t,"dist","assets",e)}var Dt=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 Be(){return Dt.filter(e=>e.website)}var ne=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function oe(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 L=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"]),jt="deny",on=256*1024;var an=Object.freeze({version:1,source:"default",defaultDecision:jt,allow:L,deny:Object.freeze([])});var Ut=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"]),sn=new Set(Ut);var ie=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),un=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"}),b=(e,r=0,t=1)=>Math.min(t,Math.max(r,e)),g=e=>Number.isFinite(Number(e))?Number(e):null,Ht=e=>Math.round(e*1e4)/1e4;function y(e,r,t,n=!0){!n||t===null||!Number.isFinite(t)||e.push({feature:r,value:Ht(t)})}function Wt(e,r){let t=g(e.repeatBuys??e.repeat_buys??e.buyCount),n=g(e.walletWinRate??e.winRate);y(r,"repeat_buys",t===null?null:b((t-1)/4)*.38),y(r,"wallet_win_rate",n===null?null:(b(n)-.5)*.5)}function Jt(e,r){let t=g(e.ageHours??e.poolAgeHours),n=g(e.liquidityUsd??e.liquidity),o=e.liquidityLocked??e.locked;y(r,"pool_age",t===null?null:t<24?-.42:b(t/720)*.12),y(r,"liquidity",n===null?null:(b(Math.log10(Math.max(1,n))/7)-.5)*.28),y(r,"liquidity_lock",o==null?null:o?.12:-.28)}function zt(e,r){let t=g(e.floorChange??e.floorChangePct),n=g(e.sales??e.saleCount);y(r,"floor_change",t===null?null:b(t,-1,1)*.35),y(r,"sales_depth",n===null?null:b(n/50)*.18)}function Gt(e,r){let t=g(e.flowImbalance??e.imbalance),n=g(e.fundingRate??e.funding);y(r,"flow_imbalance",t===null?null:b(t,-1,1)*.42),y(r,"funding",n===null?null:-b(n*100,-1,1)*.12)}function Vt(e,r){let t=g(e.marketProbability??e.marketPrice??e.probability),n=g(e.fairProbability??e.referenceProbability??e.fairValue);y(r,"probability_mispricing",t===null||n===null?null:b(n-t,-1,1)*.65);let o=g(e.liquidityUsd??e.liquidity);y(r,"market_liquidity",o===null?null:b(Math.log10(Math.max(1,o))/6)*.12)}var ln=Object.freeze({wallet:Wt,pool:Jt,nft_floor:zt,hl_flow:Gt,prediction_market:Vt});function ae(e){try{return I.existsSync(e)}catch{return!1}}function J(e){for(let r of e)if(r&&ae(r))return r;return null}function se(e){try{return $e(e,import.meta.url)}catch{return null}}function Kt(){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(ae(n))try{let i=I.readFileSync(n,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],s=new Set(i.map(u=>u.toLowerCase()));if(s.size>=20)return{count:s.size,detail:`${s.size} provider ids (bundled desk-data)`}}catch{}let r=[d.join(l,"src/data/providers"),d.join(l,"dist/data/providers"),d.join(l,"data/providers")],t=J(r);if(!t)return{count:0,detail:"providers dir missing"};try{let n=I.readdirSync(t).filter(o=>o.endsWith(".mjs"));return{count:n.length,detail:`${n.length} provider modules`}}catch(n){return{count:0,detail:n instanceof Error?n.message:String(n)}}}function Fe(){let e=J([se("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=I.readdirSync(e),t=r.filter(o=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(o)),n=r.filter(o=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(o));return{count:r.length,trading:t,building:n}}function Yt(){let e=J([se("protocols/templates"),d.join(l,"protocols/templates"),d.join(l,"dist/assets/protocols/templates"),d.join(l,"assets/protocols/templates")]);return e?I.readdirSync(e).filter(t=>!t.startsWith(".")):Fe().building.some(t=>/protocol-builder|dex-launch|token-launch/i.test(t))?["(via skills: protocol-builder / launch packs)"]:[]}function Xt(){let e=J([se("profiles"),d.join(l,"profiles"),d.join(l,"dist/assets/profiles"),d.join(l,"assets/profiles")]);return e?I.readdirSync(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&!r.name.startsWith("_")).map(r=>r.name):[]}function Qt(){try{if(L.includes("trade_lifecycle")&&!L.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(ae(r))try{let t=I.readFileSync(r,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(t))return!0}catch{}return!1}function Me(e=process.env){let r=[],t=(c,_,F,A=1)=>{r.push({id:c,status:_,detail:F,weight:A})},[n,o]=process.versions.node.split(".").map(Number),i=n>20||n===20&&o>=19;t("node",i?"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=>!L.includes(c));t("agent_tools",u.length===0?"ok":"warn",u.length===0?`safe tools ${L.length}; signal_score present`:`missing tools: ${u.join(",")}`,3),t("research_attributes","ok",`attrs [${ne.join(", ")}]; mode=${oe(e)?"ON":"off"}`,2);let f=Kt();t("providers",f.count>=40?"ok":f.count>=10?"warn":"fail",f.detail,3);let w=Fe();t("skills_trading_build",w.trading.length>=5&&w.building.length>=4?"ok":w.count>=10?"warn":"fail",`${w.count} skills; trading=${w.trading.length} building=${w.building.length}`,3);let p=Yt();t("protocol_templates",p.length>=2?"ok":"warn",p.length?p.join(", "):"none",2);let h=Xt();t("profiles",h.includes("protocol-builder")&&h.includes("oracle")?"ok":h.length>=1?"warn":"fail",h.join(", ")||"none",2),t("signals_engine",ie.length>=4?"ok":"fail",`types: ${ie.join(", ")} (cold / no hot exec)`,2);let v=Be();t("harness_roster",v.length>=8?"ok":"warn",`${v.length} supported harnesses; Oracle native default; MCP inbound only`,2),t("custody_prepare_only",Qt()?"ok":"fail","public plane prepare-only",4);let k=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";t("data_url","ok",k,1);let T=0,S=0;for(let c of r)S+=c.weight,c.status==="ok"?T+=c.weight:c.status==="warn"&&(T+=c.weight*.5);let m=S?Math.round(T/S*100):0,x=!r.some(c=>c.status==="fail")&&m>=70,U=x?`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:x,score:T,max:S,pct:m,summary:U,researchMode:oe(e),attributes:[...ne],packageRoot:l,checks:r}}function St(){let[e,r]=process.versions.node.split(".").map(Number);return e>20||e===20&&r>=19}function Mr(e){if(!ee.existsSync(e))return{};let r={};for(let t of ee.readFileSync(e,"utf8").split(/\r?\n/)){let n=t.match(/^([A-Z0-9_]+)=(.*)$/);n&&(r[n[1]]=n[2])}return r}async function qr(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 Dc={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"),o=[],i=!1,s=(c,_,F,A=null)=>{o.push({id:c,status:_,detail:F,fix:A}),_==="fail"&&(i=!0)};s("node",St()?"ok":"fail",`node ${process.versions.node}`,St()?null:"install node >= 20.19");let u=e.paths.oracleExecEnvPath(),f=Mr(u),w=process.env.ORACLE_ROUTE_ATTESTATION_SECRET||process.env.MAD_ROUTE_ATTESTATION_SECRET||process.env.ORACLE_ATTESTATION_SECRET||process.env.ORACLE_STAMP_HMAC_SECRET||f.ORACLE_ROUTE_ATTESTATION_SECRET||f.MAD_ROUTE_ATTESTATION_SECRET||f.ORACLE_ATTESTATION_SECRET||f.ORACLE_STAMP_HMAC_SECRET;s("attestation_secret",w?"ok":"warn",w?"present":"missing",w?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let p=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",h=await qr(p),v=e.paths.loadDeskRouting&&(process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL)?`desk ${process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL}`:null;s("data_server",h?"ok":"warn",h?`reachable ${p}${v?` (${v})`:""}`:`down ${p}`,h?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 k=Re();s("harness_model","ok","Oracle native harness is default; external harnesses are inbound MCP only (oracle harness detect)",null),s("hermes_opt_in","ok",k.ok?`detected ${k.bin} (${k.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let T=Fr.join(e.paths.hermesRoot(),"profiles"),S=0;ee.existsSync(T)&&(S=ee.readdirSync(T,{withFileTypes:!0}).filter(c=>c.isDirectory()).length),s("hermes_lanes","ok",S>0?`${S} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);let m=null;if(t){m=Me(process.env);for(let c of m.checks)s(`agentic_${c.id}`,c.status,c.detail,null)}let x=null;if(n){let{firstHourReport:c}=await Promise.resolve().then(()=>(_e(),Et)),{probeSigner:_,probeQuote:F}=await Promise.resolve().then(()=>(xt(),bt));x=c({signerReachable:await _(process.env),quote:await F()});for(let A of x.checks)s(`hour_${A.id}`,A.status,A.detail,A.fix)}let U={ok:!i&&(m?m.ok:!0)&&(x?x.ok:!0),checks:o,...x?{firstHour:x}:{},...m?{agentic:{pct:m.pct,summary:m.summary,attributes:m.attributes,researchMode:m.researchMode}}:{}};if(r)process.stdout.write(JSON.stringify(U,null,2)+`
|
|
3
|
+
`);return 0}}});import ee from"node:fs";import Mr from"node:path";import Le from"node:fs";import L from"node:path";W();var Rt="0.19.0",Yr=`hermes-agent==${Rt}`;var Re="0.12.1",Xr=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Re}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Re}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function Lt(){return L.join(R(),"runtime")}function Pt(){return L.join(Lt(),"venv")}function Bt(e){let r=process.platform==="win32"?"Scripts":"bin",t=process.platform==="win32"?`${e}.exe`:e;return L.join(Pt(),r,t)}function $t(){return Bt("hermes")}function Ft(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 o=L.join(t,`${e}${n}`);try{if(Le.existsSync(o))return o}catch{}}return null}function Pe(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=$t();if(Le.existsSync(e))return{ok:!0,bin:e,source:"managed"};let r=Ft("hermes");return r?{ok:!0,bin:r,source:"path"}:{ok:!1,bin:null,source:null}}import I from"node:fs";import d from"node:path";W();import{existsSync as $e,readFileSync as Mt}from"node:fs";import{dirname as Be,join as re}from"node:path";import{fileURLToPath as qt}from"node:url";function Dt(e){let r=Be(qt(e));for(let t=0;t<8;t+=1){let n=re(r,"package.json");if($e(n))try{let i=JSON.parse(Mt(n,"utf8"));if(i&&typeof i.version=="string")return r}catch{}let o=Be(r);if(o===r)break;r=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function Fe(e,r){let t=Dt(r),n=re(t,e);return $e(n)?n:re(t,"dist","assets",e)}var jt=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 Me(){return jt.filter(e=>e.website)}var ne=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function oe(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"]),Ut="deny",an=256*1024;var sn=Object.freeze({version:1,source:"default",defaultDecision:Ut,allow:P,deny:Object.freeze([])});var Ht=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"]),cn=new Set(Ht);var ie=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),ln=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"}),b=(e,r=0,t=1)=>Math.min(t,Math.max(r,e)),g=e=>Number.isFinite(Number(e))?Number(e):null,Wt=e=>Math.round(e*1e4)/1e4;function y(e,r,t,n=!0){!n||t===null||!Number.isFinite(t)||e.push({feature:r,value:Wt(t)})}function Jt(e,r){let t=g(e.repeatBuys??e.repeat_buys??e.buyCount),n=g(e.walletWinRate??e.winRate);y(r,"repeat_buys",t===null?null:b((t-1)/4)*.38),y(r,"wallet_win_rate",n===null?null:(b(n)-.5)*.5)}function zt(e,r){let t=g(e.ageHours??e.poolAgeHours),n=g(e.liquidityUsd??e.liquidity),o=e.liquidityLocked??e.locked;y(r,"pool_age",t===null?null:t<24?-.42:b(t/720)*.12),y(r,"liquidity",n===null?null:(b(Math.log10(Math.max(1,n))/7)-.5)*.28),y(r,"liquidity_lock",o==null?null:o?.12:-.28)}function Gt(e,r){let t=g(e.floorChange??e.floorChangePct),n=g(e.sales??e.saleCount);y(r,"floor_change",t===null?null:b(t,-1,1)*.35),y(r,"sales_depth",n===null?null:b(n/50)*.18)}function Vt(e,r){let t=g(e.flowImbalance??e.imbalance),n=g(e.fundingRate??e.funding);y(r,"flow_imbalance",t===null?null:b(t,-1,1)*.42),y(r,"funding",n===null?null:-b(n*100,-1,1)*.12)}function Kt(e,r){let t=g(e.marketProbability??e.marketPrice??e.probability),n=g(e.fairProbability??e.referenceProbability??e.fairValue);y(r,"probability_mispricing",t===null||n===null?null:b(n-t,-1,1)*.65);let o=g(e.liquidityUsd??e.liquidity);y(r,"market_liquidity",o===null?null:b(Math.log10(Math.max(1,o))/6)*.12)}var dn=Object.freeze({wallet:Jt,pool:zt,nft_floor:Gt,hl_flow:Vt,prediction_market:Kt});function ae(e){try{return I.existsSync(e)}catch{return!1}}function J(e){for(let r of e)if(r&&ae(r))return r;return null}function se(e){try{return Fe(e,import.meta.url)}catch{return null}}function Yt(){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(ae(n))try{let i=I.readFileSync(n,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],s=new Set(i.map(u=>u.toLowerCase()));if(s.size>=20)return{count:s.size,detail:`${s.size} provider ids (bundled desk-data)`}}catch{}let r=[d.join(l,"src/data/providers"),d.join(l,"dist/data/providers"),d.join(l,"data/providers")],t=J(r);if(!t)return{count:0,detail:"providers dir missing"};try{let n=I.readdirSync(t).filter(o=>o.endsWith(".mjs"));return{count:n.length,detail:`${n.length} provider modules`}}catch(n){return{count:0,detail:n instanceof Error?n.message:String(n)}}}function qe(){let e=J([se("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=I.readdirSync(e),t=r.filter(o=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(o)),n=r.filter(o=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(o));return{count:r.length,trading:t,building:n}}function Xt(){let e=J([se("protocols/templates"),d.join(l,"protocols/templates"),d.join(l,"dist/assets/protocols/templates"),d.join(l,"assets/protocols/templates")]);return e?I.readdirSync(e).filter(t=>!t.startsWith(".")):qe().building.some(t=>/protocol-builder|dex-launch|token-launch/i.test(t))?["(via skills: protocol-builder / launch packs)"]:[]}function Qt(){let e=J([se("profiles"),d.join(l,"profiles"),d.join(l,"dist/assets/profiles"),d.join(l,"assets/profiles")]);return e?I.readdirSync(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&!r.name.startsWith("_")).map(r=>r.name):[]}function Zt(){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(ae(r))try{let t=I.readFileSync(r,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(t))return!0}catch{}return!1}function De(e=process.env){let r=[],t=(c,O,F,A=1)=>{r.push({id:c,status:O,detail:F,weight:A})},[n,o]=process.versions.node.split(".").map(Number),i=n>20||n===20&&o>=19;t("node",i?"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 [${ne.join(", ")}]; mode=${oe(e)?"ON":"off"}`,2);let f=Yt();t("providers",f.count>=40?"ok":f.count>=10?"warn":"fail",f.detail,3);let w=qe();t("skills_trading_build",w.trading.length>=5&&w.building.length>=4?"ok":w.count>=10?"warn":"fail",`${w.count} skills; trading=${w.trading.length} building=${w.building.length}`,3);let p=Xt();t("protocol_templates",p.length>=2?"ok":"warn",p.length?p.join(", "):"none",2);let h=Qt();t("profiles",h.includes("protocol-builder")&&h.includes("oracle")?"ok":h.length>=1?"warn":"fail",h.join(", ")||"none",2),t("signals_engine",ie.length>=4?"ok":"fail",`types: ${ie.join(", ")} (cold / no hot exec)`,2);let v=Me();t("harness_roster",v.length>=8?"ok":"warn",`${v.length} supported harnesses; Oracle native default; MCP inbound only`,2),t("custody_prepare_only",Zt()?"ok":"fail","public plane prepare-only",4);let k=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";t("data_url","ok",k,1);let T=0,S=0;for(let c of r)S+=c.weight,c.status==="ok"?T+=c.weight:c.status==="warn"&&(T+=c.weight*.5);let m=S?Math.round(T/S*100):0,x=!r.some(c=>c.status==="fail")&&m>=70,U=x?`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:x,score:T,max:S,pct:m,summary:U,researchMode:oe(e),attributes:[...ne],packageRoot:l,checks:r}}function At(){let[e,r]=process.versions.node.split(".").map(Number);return e>20||e===20&&r>=19}function qr(e){if(!ee.existsSync(e))return{};let r={};for(let t of ee.readFileSync(e,"utf8").split(/\r?\n/)){let n=t.match(/^([A-Z0-9_]+)=(.*)$/);n&&(r[n[1]]=n[2])}return r}async function Dr(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 jc={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"),o=[],i=!1,s=(c,O,F,A=null)=>{o.push({id:c,status:O,detail:F,fix:A}),O==="fail"&&(i=!0)};s("node",At()?"ok":"fail",`node ${process.versions.node}`,At()?null:"install node >= 20.19");let u=e.paths.oracleExecEnvPath(),f=qr(u),w=process.env.ORACLE_ROUTE_ATTESTATION_SECRET||process.env.MAD_ROUTE_ATTESTATION_SECRET||process.env.ORACLE_ATTESTATION_SECRET||process.env.ORACLE_STAMP_HMAC_SECRET||f.ORACLE_ROUTE_ATTESTATION_SECRET||f.MAD_ROUTE_ATTESTATION_SECRET||f.ORACLE_ATTESTATION_SECRET||f.ORACLE_STAMP_HMAC_SECRET;s("attestation_secret",w?"ok":"warn",w?"present":"missing",w?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let p=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",h=await Dr(p),v=e.paths.loadDeskRouting&&(process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL)?`desk ${process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL}`:null;s("data_server",h?"ok":"warn",h?`reachable ${p}${v?` (${v})`:""}`:`down ${p}`,h?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 k=Pe();s("harness_model","ok","Oracle native harness is default; external harnesses are inbound MCP only (oracle harness detect)",null),s("hermes_opt_in","ok",k.ok?`detected ${k.bin} (${k.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let T=Mr.join(e.paths.hermesRoot(),"profiles"),S=0;ee.existsSync(T)&&(S=ee.readdirSync(T,{withFileTypes:!0}).filter(c=>c.isDirectory()).length),s("hermes_lanes","ok",S>0?`${S} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);let m=null;if(t){m=De(process.env);for(let c of m.checks)s(`agentic_${c.id}`,c.status,c.detail,null)}let x=null;if(n){let{firstHourReport:c}=await Promise.resolve().then(()=>(Ne(),bt)),{probeSigner:O,probeQuote:F}=await Promise.resolve().then(()=>(St(),xt));x=c({signerReachable:await O(process.env),quote:await F()});for(let A of x.checks)s(`hour_${A.id}`,A.status,A.detail,A.fix)}let U={ok:!i&&(m?m.ok:!0)&&(x?x.ok:!0),checks:o,...x?{firstHour:x}:{},...m?{agentic:{pct:m.pct,summary:m.summary,attributes:m.attributes,researchMode:m.researchMode}}:{}};if(r)process.stdout.write(JSON.stringify(U,null,2)+`
|
|
4
4
|
`);else{for(let c of o)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 U.ok?0:1}};export{
|
|
8
|
+
`)}return U.ok?0:1}};export{jc as default};
|