@oracle-agent/oracle 0.25.0 → 0.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/assets/graphics/assets/arbitrum-lockup.png +0 -0
  2. package/dist/assets/graphics/assets/avalanche-lockup.png +0 -0
  3. package/dist/assets/graphics/assets/base-lockup.png +0 -0
  4. package/dist/assets/graphics/assets/bitcoin-lockup.png +0 -0
  5. package/dist/assets/graphics/assets/bnb-lockup.png +0 -0
  6. package/dist/assets/graphics/assets/ethereum-lockup.png +0 -0
  7. package/dist/assets/graphics/assets/hyperliquid-lockup.png +0 -0
  8. package/dist/assets/graphics/assets/optimism-lockup.png +0 -0
  9. package/dist/assets/graphics/assets/oracle-globe.png +0 -0
  10. package/dist/assets/graphics/assets/polygon-lockup.png +0 -0
  11. package/dist/assets/graphics/assets/polymarket-lockup.png +0 -0
  12. package/dist/assets/graphics/assets/polymarket.png +0 -0
  13. package/dist/assets/graphics/assets/robinhood-lockup.png +0 -0
  14. package/dist/assets/graphics/assets/solana-lockup.png +0 -0
  15. package/dist/assets/graphics/assets/stable-lockup.png +0 -0
  16. package/dist/assets/graphics/fonts/CormorantGaramond-Bold.ttf +0 -0
  17. package/dist/assets/graphics/fonts/RobotoMono-Bold.ttf +0 -0
  18. package/dist/assets/graphics/fonts/dmmono-Medium.ttf +0 -0
  19. package/dist/assets/graphics/oracle_card.py +1165 -0
  20. package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
  21. package/dist/bin/desk-server.mjs +44 -44
  22. package/dist/bin/oracle-data-mcp.mjs +68 -27
  23. package/dist/bin/oracle-public-server.mjs +15 -15
  24. package/dist/bin/oracle-route.mjs +1 -1
  25. package/dist/cli/commands/chat.mjs +94 -94
  26. package/dist/cli/commands/doctor.mjs +3 -3
  27. package/dist/cli/commands/eval.mjs +27 -27
  28. package/dist/cli/commands/farm.mjs +57 -57
  29. package/dist/cli/commands/model.mjs +98 -98
  30. package/dist/cli/commands/receipt.mjs +2 -2
  31. package/dist/cli/commands/sign.mjs +13 -13
  32. package/dist/cli/commands/signer.mjs +13 -13
  33. package/dist/cli/commands/strategy.mjs +1 -1
  34. package/dist/cli/commands/swap.mjs +1 -1
  35. package/dist/cli/commands/venues.mjs +2 -2
  36. package/dist/data/desk-data.mjs +42 -42
  37. package/dist/index.mjs +51 -51
  38. package/dist/local-signer/index.mjs +3 -3
  39. package/dist/nft/index.mjs +1 -1
  40. package/dist/prepare-envelope.mjs +1 -1
  41. package/dist/public-api/agent-grants.mjs +3 -3
  42. package/dist/router/index.mjs +10 -10
  43. package/dist/router/prepare-bridge.mjs +1 -1
  44. package/dist/strategy/index.mjs +1 -1
  45. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
- var fr=Object.defineProperty;var a=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var Te=(e,t)=>{for(var r in t)fr(e,r,{get:t[r],enumerable:!0})};import D from"node:fs";import pr from"node:os";import L from"node:path";import{fileURLToPath as mr}from"node:url";function Q(){return process.env.ORACLE_FAKE_HOME||pr.homedir()}function wr(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function N(){return wr()?process.env.ORACLE_CONFIG_DIR||L.join(Q(),".config","oracle"):L.join(Q(),".config","oracle")}function gr(){return L.join(N(),"desk.json")}function yr(){return L.join(N(),"env")}function I({force:e=!1}={}){if(I._done&&!e)return I._result||null;I._done=!0;let t={},r=(o,i)=>{if(i==null)return;let s=String(i).trim();s&&(process.env[o]!=null&&String(process.env[o]).trim()!==""||(process.env[o]=s,t[o]=s))};try{let o=yr();if(D.existsSync(o))for(let i of D.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)),r(s[1],u)}}catch{}try{let o=gr();if(D.existsSync(o)){let i=JSON.parse(D.readFileSync(o,"utf8"));i&&typeof i=="object"&&(r("ORACLE_DESK_URL",i.deskUrl||i.dataUrl||i.url),r("ORACLE_DATA_URL",i.dataUrl||i.deskUrl||i.url),r("ORACLE_API_URL",i.apiUrl||i.dataUrl||i.deskUrl),r("ORACLE_PUBLIC_URL",i.publicUrl||i.deskUrl||i.dataUrl),r("ORACLE_EXEC_URL",i.execUrl),r("MAD_DESK_URL",i.deskUrl||i.dataUrl))}}catch{}let n=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return n&&(r("ORACLE_DESK_URL",n),r("ORACLE_DATA_URL",n),r("ORACLE_API_URL",n),r("ORACLE_PUBLIC_URL",n),r("MAD_DESK_URL",n)),I._result=Object.keys(t).length?t:null,I._result}var hr,l,H=a(()=>{hr=L.dirname(mr(import.meta.url)),l=L.resolve(hr,"../..");try{I()}catch{}});var se,un,Me=a(()=>{se={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}},un=new Map(Object.values(se).map(e=>[e.chainId,e]))});function M(e){let t=e?.transactionHash||e?.hash||e?.txid||null;return t?{happened:!0,hash:String(t),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}var ae=a(()=>{});var Fe=a(()=>{});var qe=a(()=>{});var F=a(()=>{});var P=a(()=>{});var ue=a(()=>{F();P()});import{isAddress as bn}from"ethers";var le=a(()=>{ue();F();P()});import{Interface as Hr,isAddress as kn}from"ethers";var Ln,je=a(()=>{le();F();P();Ln=new Hr(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as Wr,isAddress as Rn}from"ethers";var Mn,Fn,Ue=a(()=>{le();F();P();Mn=new Wr(["function approve(address spender,uint256 amount) returns (bool)"]),Fn=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var De=a(()=>{});import{Interface as Jr,MaxUint256 as Gn,isAddress as Vn,keccak256 as zn,toUtf8Bytes as Kn}from"ethers";var ro,q=a(()=>{qe();je();Ue();De();P();ro=new Jr(["function approve(address spender,uint256 amount) returns (bool)"])});var no,oo,He=a(()=>{no=300*1e3,oo=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var G=a(()=>{q()});import{Address as uo,NETWORK as lo,OutScript as fo,RawTx as po,SigHash as mo,TEST_NETWORK as ho,Transaction as wo}from"@scure/btc-signer";var fe=a(()=>{});import{createHash as Vr}from"node:crypto";import{base58 as bo}from"@scure/base";import{getCompiledTransactionMessageDecoder as xo}from"@solana/transaction-messages";var We,Ao,pe=a(()=>{We=e=>Vr("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),Ao=new Map([[We("route"),{name:"route",prefixBytes:0}],[We("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});var _o,ko,me=a(()=>{_o=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-stake-delegate":"delegate"}),ko=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-stake-delegate":"tokenDelegate"})});var Oo,he=a(()=>{Oo="0x"+"00".repeat(32)});var zr,Co,we=a(()=>{he();zr=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Co=Object.freeze(zr.map(e=>e[0]))});var V=a(()=>{});var Qr,zo,et,Ko,Yo,rt,Xo,z=a(()=>{q();ue();He();G();fe();pe();me();we();V();Qr=new Set(["evm","evm-swap","evm-bridge","evm-nft","btc","sol","hl","poly","lighter"]),zo=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}),et=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"}}),Ko=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"}}),Yo=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"}}),rt=Object.freeze([...Qr]),Xo=Object.freeze({...et})});import{encode as ei}from"@msgpack/msgpack";import{keccak256 as ti,verifyTypedData as ni}from"ethers";var oi,ii,ge=a(()=>{oi=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),ii=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var ye=a(()=>{V()});import{ed25519 as pi}from"@noble/curves/ed25519.js";import{base58 as hi}from"@scure/base";import{RawTx as gi,SigHash as yi,Transaction as Ei}from"@scure/btc-signer";import{Transaction as Si,keccak256 as xi,verifyTypedData as Ai}from"ethers";var Ee=a(()=>{ge();ye()});import{base58 as Li}from"@scure/base";var be=a(()=>{z();G();q();Ee()});var Ge=a(()=>{be();z()});var Di,Hi,Wi,K=a(()=>{Di=Object.freeze({N:1<<17,r:8,p:1}),Hi=256*1024*1024,Wi=16*1024});import{homedir as Se}from"node:os";import{join as xe}from"node:path";var Ve,it,zi,ze=a(()=>{Ve=process.env.ORACLE_PUBLIC_DESKTOP==="1",it=Ve?process.env.ORACLE_CONFIG_DIR||xe(Se(),".config","oracle"):xe(Se(),".config","oracle"),zi=Ve?it:xe(Se(),".config","mad-desk")});var Qi,es,rs,Ke=a(()=>{ze();Qi="0".repeat(64),es=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"}),rs=Promise.resolve()});var Xe=a(()=>{Ke();K();be()});var Ze=a(()=>{});import{Wallet as ls}from"ethers";import{base58 as fs}from"@scure/base";import{ed25519 as ms}from"@noble/curves/ed25519.js";import{NETWORK as ws,TEST_NETWORK as gs,WIF as ys,p2wpkh as Es}from"@scure/btc-signer";import{pubECDSA as Ss}from"@scure/btc-signer/utils.js";var Qe=a(()=>{});import E from"node:path";import at from"node:os";import{createHash as ct,randomBytes as Zs}from"node:crypto";import{Transaction as ea}from"@scure/btc-signer";import{ed25519 as ta}from"@noble/curves/ed25519.js";function er(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||E.join(process.env.XDG_STATE_HOME||E.join(at.homedir(),".local","state"),"oracle"),r=ct("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(t,`signer-policy-${r}.high-water`),ledger:E.join(e,"signer-ledger.json"),ledgerAnchor:E.join(t,`signer-ledger-${r}.high-water`),token:E.join(e,"signer-token"),lock:E.join(t,`signer-${r}.lock`)}}var rr=a(()=>{Ge();K();Xe();Ze();q();z();G();Ee();me();we();V();ye();he();ge();fe();pe();Qe()});import Ae from"node:fs";import tr from"node:path";import{homedir as ut}from"node:os";function lt(){return process.env.ORACLE_CONFIG_DIR||tr.join(ut(),".config","oracle")}function j(){let e=er(tr.join(lt(),"signer")),t=Ae.existsSync(e.vault),r=Ae.existsSync(e.lock),n=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:Ae.existsSync(e.policy),armed:t&&!r,disarmed:r,capabilities:{swap:n,bridge:n},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var Ca,ve=a(()=>{ae();Fe();rr();K();Ca=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 Y(e){return String(e||"").trim()||void 0}function ft(e,{required:t=!1}={}){let r=Y(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!dt.has(r))throw new Error(`unsupported provider: ${r}`);return r}function pt(e,{required:t=!1}={}){let r=Y(e);if(!r){if(t)throw new Error("model is required");return}if(r.includes("..")||r.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(r))throw new Error("invalid model id");return r}function mt(e){let t=Y(e);if(!t||t.length>2048)throw new Error("invalid custom base URL");let r;try{r=new URL(t)}catch{throw new Error("invalid custom base URL")}let n=r.hostname.toLowerCase().replace(/^\[|\]$/g,""),o=n==="localhost"||n==="127.0.0.1"||n==="::1";if(r.protocol!=="https:"&&!(r.protocol==="http:"&&o)||r.username||r.password||r.search||r.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return r.toString().replace(/\/+$/,"")}function nr({provider:e,model:t,baseUrl:r}={},{requireModel:n=!1}={}){let o=ft(e),i=pt(t,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:mt(r)};if(Y(r))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var dt,or=a(()=>{dt=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","custom","anthropic-oauth","openai-codex","xai-oauth"])});import ir from"node:fs";import ht from"node:path";function gt(){return ht.join(N(),"model.json")}function B(e){return String(e||"").trim()||void 0}function yt(e={}){let t=B(e.backend)?.toLowerCase()||"auto",r=nr({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="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(!wt.has(t))throw new Error(`unsupported backend: ${t}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(t))throw new Error("remote compute backends are disabled in the public desktop");if(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))throw new Error("api key env must be an uppercase environment variable name");if(t==="remote"&&!s)throw new Error("remote backend requires computeHost");return{backend:t,...r,...n?{apiKeyEnv:n}:{},...Number.isFinite(o)&&o>0?{contextLength:o}:{},...i?{reasoningEffort:i}:{},...s?{computeHost:s}:{},...u?{computeUser:u}:{},...f?{computePath:f}:{}}}function sr(){let e=gt();if(!ir.existsSync(e))return null;try{return yt(JSON.parse(ir.readFileSync(e,"utf8")))}catch{return null}}var wt,ar=a(()=>{H();or();wt=new Set(["auto","standalone","hermes","remote","arch"])});var cr={};Te(cr,{classifyReceipt:()=>M,configDir:()=>xt,firstHourReport:()=>_e,venueMap:()=>X});import Et from"node:path";import{homedir as bt}from"node:os";function xt(e=process.env){return e.ORACLE_CONFIG_DIR||Et.join(bt(),".config","oracle")}function X({env:e=process.env,vault:t=null}={}){let r=t||j(),n=[];for(let[o,i]of Object.entries(se)){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:!!(r.vaultExists&&r.armed&&!r.disarmed),note:s?"rpc configured":"public read/prepare; set RPC for live reads"})}return n.push({key:"solana",chainId:null,name:"Solana",family:"sol",status:"prepare",execute:!1,note:"Jupiter quote/prepare; local sol signer"},{key:"bitcoin",chainId:null,name:"Bitcoin",family:"btc",status:"prepare",execute:!1,note:"Esplora read; local btc signer"},{key:"hyperliquid-l1",chainId:null,name:"Hyperliquid L1",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not an EVM signer family"},{key:"polymarket",chainId:null,name:"Polymarket",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not a signer family"}),n}function _e({env:e=process.env,model:t=sr(),vault:r=j(),signerReachable:n=!1,quote:o=null}={}){let i=[],s=(p,h,v,_=null)=>i.push({id:p,status:h,detail:v,fix:_}),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"),t?t.backend==="hermes"?s("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):s("model","ok",`${t.backend||"auto"} ${t.provider||""} ${t.model||""}`.trim()):s("model","fail","no model.json","oracle setup model"),r.vaultExists?r.disarmed?s("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):s("vault",r.armed?"ok":"warn",r.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 St.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:X({env:e,vault:r})}}var St,ke=a(()=>{Me();ve();ar();ae();St=new Set(["127.0.0.1","::1","localhost"])});var ur={};Te(ur,{classifyReceipt:()=>M,default:()=>_t,firstHourReport:()=>_e,probeQuote:()=>vt,probeSigner:()=>At,vaultStatus:()=>j});async function At(e=process.env){let t=e.ORACLE_SIGNER_HOST||"127.0.0.1",r=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${t}:${r}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}async function vt(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let r=(await e.json())?.pairs?.[0];return!r?.chainId||!r?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${r.chainId} ${r.baseToken?.symbol}/${r.quoteToken?.symbol} $${r.priceUsd}`}}catch(e){return{ok:!1,detail:e instanceof Error?e.message:"quote failed"}}}var _t,lr=a(()=>{ke();ve();_t={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let t=e.argv.includes("--json"),r=X();if(t)return process.stdout.write(`${JSON.stringify({venues:r},null,2)}
1
+ var br=Object.defineProperty;var s=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var Te=(e,t)=>{for(var r in t)br(e,r,{get:t[r],enumerable:!0})};import H from"node:fs";import xr from"node:os";import L from"node:path";import{fileURLToPath as Sr}from"node:url";function ee(){return process.env.ORACLE_FAKE_HOME||xr.homedir()}function vr(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function N(){return vr()?process.env.ORACLE_CONFIG_DIR||L.join(ee(),".config","oracle"):L.join(ee(),".config","oracle")}function kr(){return L.join(N(),"desk.json")}function _r(){return L.join(N(),"env")}function O({force:e=!1}={}){if(O._done&&!e)return O._result||null;O._done=!0;let t={},r=(o,i)=>{if(i==null)return;let a=String(i).trim();a&&(process.env[o]!=null&&String(process.env[o]).trim()!==""||(process.env[o]=a,t[o]=a))};try{let o=_r();if(H.existsSync(o))for(let i of H.readFileSync(o,"utf8").split(/\r?\n/)){let a=i.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)),r(a[1],u)}}catch{}try{let o=kr();if(H.existsSync(o)){let i=JSON.parse(H.readFileSync(o,"utf8"));i&&typeof i=="object"&&(r("ORACLE_DESK_URL",i.deskUrl||i.dataUrl||i.url),r("ORACLE_DATA_URL",i.dataUrl||i.deskUrl||i.url),r("ORACLE_API_URL",i.apiUrl||i.dataUrl||i.deskUrl),r("ORACLE_PUBLIC_URL",i.publicUrl||i.deskUrl||i.dataUrl),r("ORACLE_EXEC_URL",i.execUrl),r("MAD_DESK_URL",i.deskUrl||i.dataUrl))}}catch{}let n=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return n&&(r("ORACLE_DESK_URL",n),r("ORACLE_DATA_URL",n),r("ORACLE_API_URL",n),r("ORACLE_PUBLIC_URL",n),r("MAD_DESK_URL",n)),O._result=Object.keys(t).length?t:null,O._result}var Ar,l,W=s(()=>{Ar=L.dirname(Sr(import.meta.url)),l=L.resolve(Ar,"../..");try{O()}catch{}});var ae,gn,Fe=s(()=>{ae={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},gn=new Map(Object.values(ae).map(e=>[e.chainId,e]))});function F(e){let t=e?.transactionHash||e?.hash||e?.txid||null;return t?{happened:!0,hash:String(t),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}var ce=s(()=>{});var qe=s(()=>{});var je=s(()=>{});var q=s(()=>{});var P=s(()=>{});var le=s(()=>{q();P()});import{isAddress as Tn}from"ethers";var de=s(()=>{le();q();P()});import{Interface as Xr,isAddress as Pn}from"ethers";var Fn,Ue=s(()=>{de();q();P();Fn=new Xr(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as Zr,isAddress as Un}from"ethers";var Jn,Gn,De=s(()=>{de();q();P();Jn=new Zr(["function approve(address spender,uint256 amount) returns (bool)"]),Gn=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var $=s(()=>{});import{Interface as Qr,MaxUint256 as Qn,isAddress as eo,keccak256 as ro,toUtf8Bytes as to}from"ethers";var co,j=s(()=>{je();Ue();De();$();P();co=new Qr(["function approve(address spender,uint256 amount) returns (bool)"])});var lo,fo,We=s(()=>{lo=300*1e3,fo=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var z=s(()=>{j()});import{Address as go,NETWORK as yo,OutScript as Eo,RawTx as bo,SigHash as xo,TEST_NETWORK as So,Transaction as Ao}from"@scure/btc-signer";var pe=s(()=>{});import{createHash as rt}from"node:crypto";import{base58 as Io}from"@scure/base";import{getCompiledTransactionMessageDecoder as Oo}from"@solana/transaction-messages";var Je,Lo,me=s(()=>{Je=e=>rt("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),Lo=new Map([[Je("route"),{name:"route",prefixBytes:0}],[Je("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});var Ge=s(()=>{});var ze=s(()=>{Ge()});var Ve=s(()=>{ze()});var Ke=s(()=>{Ve()});var zo,Vo,he=s(()=>{$();Ke();zo=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"}),Vo=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 Xo,we=s(()=>{$();Xo="0x"+"00".repeat(32)});var tt,ti,ge=s(()=>{we();$();tt=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),ti=Object.freeze(tt.map(e=>e[0]))});var V=s(()=>{$()});var at,bi,ct,xi,Si,ut,Ai,K=s(()=>{j();le();We();z();pe();me();he();ge();V();at=new Set(["evm","evm-swap","evm-bridge","evm-nft","btc","sol","hl","poly","lighter"]),bi=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}),ct=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"}}),xi=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"}}),Si=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"}}),ut=Object.freeze([...at]),Ai=Object.freeze({...ct})});import{encode as _i}from"@msgpack/msgpack";import{keccak256 as Ti,verifyTypedData as Oi}from"ethers";var Li,Ni,ye=s(()=>{Li=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Ni=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var Ee=s(()=>{V()});import{ed25519 as qi}from"@noble/curves/ed25519.js";import{base58 as Ui}from"@scure/base";import{RawTx as Hi,SigHash as Wi,Transaction as Ji}from"@scure/btc-signer";import{Transaction as zi,keccak256 as Vi,verifyTypedData as Ki}from"ethers";var be=s(()=>{ye();Ee()});import{base58 as ts}from"@scure/base";var xe=s(()=>{K();z();j();be()});var er=s(()=>{xe();K()});var ms,hs,ws,Y=s(()=>{ms=Object.freeze({N:1<<17,r:8,p:1}),hs=256*1024*1024,ws=16*1024});import{homedir as Se}from"node:os";import{join as Ae}from"node:path";var rr,pt,bs,tr=s(()=>{rr=process.env.ORACLE_PUBLIC_DESKTOP==="1",pt=rr?process.env.ORACLE_CONFIG_DIR||Ae(Se(),".config","oracle"):Ae(Se(),".config","oracle"),bs=rr?pt:Ae(Se(),".config","mad-desk")});var ks,_s,Is,nr=s(()=>{tr();ks="0".repeat(64),_s=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"}),Is=Promise.resolve()});var ir=s(()=>{nr();Y();xe()});var sr=s(()=>{});import{Wallet as Bs}from"ethers";import{base58 as Fs}from"@scure/base";import{ed25519 as js}from"@noble/curves/ed25519.js";import{NETWORK as Ds,TEST_NETWORK as Hs,WIF as Ws,p2wpkh as Js}from"@scure/btc-signer";import{pubECDSA as zs}from"@scure/btc-signer/utils.js";var ar=s(()=>{});import E from"node:path";import ht from"node:os";import{createHash as wt,randomBytes as va}from"node:crypto";import{Transaction as _a}from"@scure/btc-signer";import{ed25519 as Ta}from"@noble/curves/ed25519.js";function cr(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||E.join(process.env.XDG_STATE_HOME||E.join(ht.homedir(),".local","state"),"oracle"),r=wt("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(t,`signer-policy-${r}.high-water`),ledger:E.join(e,"signer-ledger.json"),ledgerAnchor:E.join(t,`signer-ledger-${r}.high-water`),token:E.join(e,"signer-token"),lock:E.join(t,`signer-${r}.lock`)}}var ur=s(()=>{er();Y();ir();sr();j();K();z();be();he();ge();V();Ee();we();ye();pe();me();ar()});import ve from"node:fs";import lr from"node:path";import{homedir as gt}from"node:os";function yt(){return process.env.ORACLE_CONFIG_DIR||lr.join(gt(),".config","oracle")}function U(){let e=cr(lr.join(yt(),"signer")),t=ve.existsSync(e.vault),r=ve.existsSync(e.lock),n=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:ve.existsSync(e.policy),armed:t&&!r,disarmed:r,capabilities:{swap:n,bridge:n},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var oc,ke=s(()=>{ce();qe();ur();Y();oc=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 X(e){return String(e||"").trim()||void 0}function bt(e,{required:t=!1}={}){let r=X(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!Et.has(r))throw new Error(`unsupported provider: ${r}`);return r}function xt(e,{required:t=!1}={}){let r=X(e);if(!r){if(t)throw new Error("model is required");return}if(r.includes("..")||r.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(r))throw new Error("invalid model id");return r}function St(e){let t=X(e);if(!t||t.length>2048)throw new Error("invalid custom base URL");let r;try{r=new URL(t)}catch{throw new Error("invalid custom base URL")}let n=r.hostname.toLowerCase().replace(/^\[|\]$/g,""),o=n==="localhost"||n==="127.0.0.1"||n==="::1";if(r.protocol!=="https:"&&!(r.protocol==="http:"&&o)||r.username||r.password||r.search||r.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return r.toString().replace(/\/+$/,"")}function dr({provider:e,model:t,baseUrl:r}={},{requireModel:n=!1}={}){let o=bt(e),i=xt(t,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:St(r)};if(X(r))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var Et,fr=s(()=>{Et=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","custom","anthropic-oauth","openai-codex","xai-oauth"])});import pr from"node:fs";import At from"node:path";function kt(){return At.join(N(),"model.json")}function B(e){return String(e||"").trim()||void 0}function _t(e={}){let t=B(e.backend)?.toLowerCase()||"auto",r=dr({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),n=B(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=B(e.reasoningEffort),a=B(e.computeHost||e.remoteHost),u=B(e.computeUser||e.remoteUser),f=B(e.computePath||e.remotePath);if(!vt.has(t))throw new Error(`unsupported backend: ${t}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(t))throw new Error("remote compute backends are disabled in the public desktop");if(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))throw new Error("api key env must be an uppercase environment variable name");if(t==="remote"&&!a)throw new Error("remote backend requires computeHost");return{backend:t,...r,...n?{apiKeyEnv:n}:{},...Number.isFinite(o)&&o>0?{contextLength:o}:{},...i?{reasoningEffort:i}:{},...a?{computeHost:a}:{},...u?{computeUser:u}:{},...f?{computePath:f}:{}}}function mr(){let e=kt();if(!pr.existsSync(e))return null;try{return _t(JSON.parse(pr.readFileSync(e,"utf8")))}catch{return null}}var vt,hr=s(()=>{W();fr();vt=new Set(["auto","standalone","hermes","remote","arch"])});var wr={};Te(wr,{classifyReceipt:()=>F,configDir:()=>Lt,firstHourReport:()=>_e,venueMap:()=>Z});import It from"node:path";import{homedir as Tt}from"node:os";function Lt(e=process.env){return e.ORACLE_CONFIG_DIR||It.join(Tt(),".config","oracle")}function Z({env:e=process.env,vault:t=null}={}){let r=t||U(),n=[];for(let[o,i]of Object.entries(ae)){let a=(i.rpcEnv||[]).some(f=>String(e[f]||"").trim()),u="prepare";i.evm?a&&(u="live"):u="unavailable",n.push({key:o,chainId:i.chainId,name:i.name,family:"evm",status:u,execute:!!(r.vaultExists&&r.armed&&!r.disarmed),note:a?"rpc configured":"public read/prepare; set RPC for live reads"})}return n.push({key:"solana",chainId:null,name:"Solana",family:"sol",status:"prepare",execute:!1,note:"Jupiter quote/prepare; local sol signer"},{key:"bitcoin",chainId:null,name:"Bitcoin",family:"btc",status:"prepare",execute:!1,note:"Esplora read; local btc signer"},{key:"hyperliquid-l1",chainId:null,name:"Hyperliquid L1",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not an EVM signer family"},{key:"polymarket",chainId:null,name:"Polymarket",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not a signer family"}),n}function _e({env:e=process.env,model:t=mr(),vault:r=U(),signerReachable:n=!1,quote:o=null}={}){let i=[],a=(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})();a("node",u?"ok":"fail",`node ${process.versions.node}`,u?null:"install node >= 20.19"),t?t.backend==="hermes"?a("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):a("model","ok",`${t.backend||"auto"} ${t.provider||""} ${t.model||""}`.trim()):a("model","fail","no model.json","oracle setup model"),r.vaultExists?r.disarmed?a("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):a("vault",r.armed?"ok":"warn",r.armed?"present, armed":"present, not armed"):a("vault","fail","no local vault","oracle sign init");let f=e.ORACLE_SIGNER_HOST||"127.0.0.1";return Ot.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"),o?o.ok?a("quote","ok",o.detail||"net quote returned"):a("quote","warn",o.detail||"quote unavailable","check network / oracle data serve"):a("quote","warn","quote not probed",null),{ok:!i.some(p=>p.status==="fail"),checks:i,venues:Z({env:e,vault:r})}}var Ot,Ie=s(()=>{Fe();ke();hr();ce();Ot=new Set(["127.0.0.1","::1","localhost"])});var gr={};Te(gr,{classifyReceipt:()=>F,default:()=>Rt,firstHourReport:()=>_e,probeQuote:()=>Ct,probeSigner:()=>Nt,vaultStatus:()=>U});async function Nt(e=process.env){let t=e.ORACLE_SIGNER_HOST||"127.0.0.1",r=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${t}:${r}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}async function Ct(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let r=(await e.json())?.pairs?.[0];return!r?.chainId||!r?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${r.chainId} ${r.baseToken?.symbol}/${r.quoteToken?.symbol} $${r.priceUsd}`}}catch(e){return{ok:!1,detail:e instanceof Error?e.message:"quote failed"}}}var Rt,yr=s(()=>{Ie();ke();Rt={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let t=e.argv.includes("--json"),r=Z();if(t)return process.stdout.write(`${JSON.stringify({venues:r},null,2)}
2
2
  `),0;for(let n of r)process.stdout.write(`${n.status.padEnd(12)} ${n.key.padEnd(16)} ${n.name} exec=${n.execute?"local":"no"}
3
- `);return 0}}});import Z from"node:fs";import kt from"node:path";import Ie from"node:fs";import C from"node:path";H();var br="0.19.0",Ft=`hermes-agent==${br}`;var Oe="0.12.1",qt=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Oe}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Oe}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function Sr(){return C.join(N(),"runtime")}function xr(){return C.join(Sr(),"venv")}function Ar(e){let t=process.platform==="win32"?"Scripts":"bin",r=process.platform==="win32"?`${e}.exe`:e;return C.join(xr(),t,r)}function vr(){return Ar("hermes")}function _r(e){let t=process.platform==="win32"&&!C.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let r of(process.env.PATH||"").split(C.delimiter))if(r)for(let n of t){let o=C.join(r,`${e}${n}`);try{if(Ie.existsSync(o))return o}catch{}}return null}function Le(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=vr();if(Ie.existsSync(e))return{ok:!0,bin:e,source:"managed"};let t=_r("hermes");return t?{ok:!0,bin:t,source:"path"}:{ok:!1,bin:null,source:null}}import T from"node:fs";import d from"node:path";H();import{existsSync as Ce,readFileSync as kr}from"node:fs";import{dirname as Ne,join as ee}from"node:path";import{fileURLToPath as Tr}from"node:url";function Or(e){let t=Ne(Tr(e));for(let r=0;r<8;r+=1){let n=ee(t,"package.json");if(Ce(n))try{let i=JSON.parse(kr(n,"utf8"));if(i&&typeof i.version=="string")return t}catch{}let o=Ne(t);if(o===t)break;t=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function Re(e,t){let r=Or(t),n=ee(r,e);return Ce(n)?n:ee(r,"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 Pe(){return Ir.filter(e=>e.website)}var re=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function te(e=process.env){let t=String(e?.ORACLE_RESEARCH_MODE??e?.ORACLE_RLM_MODE??"").trim().toLowerCase();return t==="1"||t==="true"||t==="yes"||t==="on"||t==="research"}var R=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"]),Lr="deny",Vt=256*1024;var zt=Object.freeze({version:1,source:"default",defaultDecision:Lr,allow:R,deny:Object.freeze([])});var ne=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),Yt=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,t=0,r=1)=>Math.min(r,Math.max(t,e)),g=e=>Number.isFinite(Number(e))?Number(e):null,Nr=e=>Math.round(e*1e4)/1e4;function y(e,t,r,n=!0){!n||r===null||!Number.isFinite(r)||e.push({feature:t,value:Nr(r)})}function Cr(e,t){let r=g(e.repeatBuys??e.repeat_buys??e.buyCount),n=g(e.walletWinRate??e.winRate);y(t,"repeat_buys",r===null?null:b((r-1)/4)*.38),y(t,"wallet_win_rate",n===null?null:(b(n)-.5)*.5)}function Rr(e,t){let r=g(e.ageHours??e.poolAgeHours),n=g(e.liquidityUsd??e.liquidity),o=e.liquidityLocked??e.locked;y(t,"pool_age",r===null?null:r<24?-.42:b(r/720)*.12),y(t,"liquidity",n===null?null:(b(Math.log10(Math.max(1,n))/7)-.5)*.28),y(t,"liquidity_lock",o==null?null:o?.12:-.28)}function Pr(e,t){let r=g(e.floorChange??e.floorChangePct),n=g(e.sales??e.saleCount);y(t,"floor_change",r===null?null:b(r,-1,1)*.35),y(t,"sales_depth",n===null?null:b(n/50)*.18)}function Br(e,t){let r=g(e.flowImbalance??e.imbalance),n=g(e.fundingRate??e.funding);y(t,"flow_imbalance",r===null?null:b(r,-1,1)*.42),y(t,"funding",n===null?null:-b(n*100,-1,1)*.12)}function $r(e,t){let r=g(e.marketProbability??e.marketPrice??e.probability),n=g(e.fairProbability??e.referenceProbability??e.fairValue);y(t,"probability_mispricing",r===null||n===null?null:b(n-r,-1,1)*.65);let o=g(e.liquidityUsd??e.liquidity);y(t,"market_liquidity",o===null?null:b(Math.log10(Math.max(1,o))/6)*.12)}var Xt=Object.freeze({wallet:Cr,pool:Rr,nft_floor:Pr,hl_flow:Br,prediction_market:$r});function oe(e){try{return T.existsSync(e)}catch{return!1}}function W(e){for(let t of e)if(t&&oe(t))return t;return null}function ie(e){try{return Re(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(oe(n))try{let i=T.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 t=[d.join(l,"src/data/providers"),d.join(l,"dist/data/providers"),d.join(l,"data/providers")],r=W(t);if(!r)return{count:0,detail:"providers dir missing"};try{let n=T.readdirSync(r).filter(o=>o.endsWith(".mjs"));return{count:n.length,detail:`${n.length} provider modules`}}catch(n){return{count:0,detail:n instanceof Error?n.message:String(n)}}}function Be(){let e=W([ie("skills"),d.join(l,"skills"),d.join(l,"dist/assets/skills"),d.join(l,"assets/skills")]);if(!e)return{count:0,trading:[],building:[]};let t=T.readdirSync(e),r=t.filter(o=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(o)),n=t.filter(o=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(o));return{count:t.length,trading:r,building:n}}function Fr(){let e=W([ie("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(r=>!r.startsWith(".")):Be().building.some(r=>/protocol-builder|dex-launch|token-launch/i.test(r))?["(via skills: protocol-builder / launch packs)"]:[]}function qr(){let e=W([ie("profiles"),d.join(l,"profiles"),d.join(l,"dist/assets/profiles"),d.join(l,"assets/profiles")]);return e?T.readdirSync(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&!t.name.startsWith("_")).map(t=>t.name):[]}function jr(){try{if(R.includes("trade_lifecycle")&&!R.some(t=>/broadcast|wallet_sign/.test(t)))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 t of e)if(oe(t))try{let r=T.readFileSync(t,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(r))return!0}catch{}return!1}function $e(e=process.env){let t=[],r=(c,O,$,A=1)=>{t.push({id:c,status:O,detail:$,weight:A})},[n,o]=process.versions.node.split(".").map(Number),i=n>20||n===20&&o>=19;r("node",i?"ok":"fail",`node ${process.versions.node}`,2);let u=["oracle_cli","research_delegate","trade_lifecycle","signal_score","skill_load","learn_skill","code_eval","cron_add","web_fetch"].filter(c=>!R.includes(c));r("agent_tools",u.length===0?"ok":"warn",u.length===0?`safe tools ${R.length}; signal_score present`:`missing tools: ${u.join(",")}`,3),r("research_attributes","ok",`attrs [${re.join(", ")}]; mode=${te(e)?"ON":"off"}`,2);let f=Mr();r("providers",f.count>=40?"ok":f.count>=10?"warn":"fail",f.detail,3);let w=Be();r("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=Fr();r("protocol_templates",p.length>=2?"ok":"warn",p.length?p.join(", "):"none",2);let h=qr();r("profiles",h.includes("protocol-builder")&&h.includes("oracle")?"ok":h.length>=1?"warn":"fail",h.join(", ")||"none",2),r("signals_engine",ne.length>=4?"ok":"fail",`types: ${ne.join(", ")} (cold / no hot exec)`,2);let v=Pe();r("harness_roster",v.length>=8?"ok":"warn",`${v.length} website harnesses; native default; MCP inbound only`,2),r("custody_prepare_only",jr()?"ok":"fail","public plane prepare-only",4);let _=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";r("data_url","ok",_,1);let k=0,x=0;for(let c of t)x+=c.weight,c.status==="ok"?k+=c.weight:c.status==="warn"&&(k+=c.weight*.5);let m=x?Math.round(k/x*100):0,S=!t.some(c=>c.status==="fail")&&m>=70,U=S?`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:S,score:k,max:x,pct:m,summary:U,researchMode:te(e),attributes:[...re],packageRoot:l,checks:t}}function dr(){let[e,t]=process.versions.node.split(".").map(Number);return e>20||e===20&&t>=19}function Tt(e){if(!Z.existsSync(e))return{};let t={};for(let r of Z.readFileSync(e,"utf8").split(/\r?\n/)){let n=r.match(/^([A-Z0-9_]+)=(.*)$/);n&&(t[n[1]]=n[2])}return t}async function Ot(e){let t=e.replace(/\/$/,"");for(let r of["/health","/public/health"])try{if((await fetch(t+r)).ok)return!0}catch{}return!1}var Za={name:"doctor",summary:"check the read plane (+ optional --agentic crypto harness score)",group:"read",usage:"oracle doctor [--json] [--agentic] [--first-hour]",async run(e){let t=e.argv.includes("--json"),r=e.argv.includes("--agentic"),n=e.argv.includes("--first-hour"),o=[],i=!1,s=(c,O,$,A=null)=>{o.push({id:c,status:O,detail:$,fix:A}),O==="fail"&&(i=!0)};s("node",dr()?"ok":"fail",`node ${process.versions.node}`,dr()?null:"install node >= 20.19");let u=e.paths.oracleExecEnvPath(),f=Tt(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 Ot(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 _=Le();s("harness_model","ok","Oracle native is default; external clients are inbound MCP only (oracle harness detect)",null),s("hermes_opt_in","ok",_.ok?`detected ${_.bin} (${_.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let k=kt.join(e.paths.hermesRoot(),"profiles"),x=0;Z.existsSync(k)&&(x=Z.readdirSync(k,{withFileTypes:!0}).filter(c=>c.isDirectory()).length),s("hermes_lanes","ok",x>0?`${x} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);let m=null;if(r){m=$e(process.env);for(let c of m.checks)s(`agentic_${c.id}`,c.status,c.detail,null)}let S=null;if(n){let{firstHourReport:c}=await Promise.resolve().then(()=>(ke(),cr)),{probeSigner:O,probeQuote:$}=await Promise.resolve().then(()=>(lr(),ur));S=c({signerReachable:await O(process.env),quote:await $()});for(let A of S.checks)s(`hour_${A.id}`,A.status,A.detail,A.fix)}let U={ok:!i&&(m?m.ok:!0)&&(S?S.ok:!0),checks:o,...S?{firstHour:S}:{},...m?{agentic:{pct:m.pct,summary:m.summary,attributes:m.attributes,researchMode:m.researchMode}}:{}};if(t)process.stdout.write(JSON.stringify(U,null,2)+`
3
+ `);return 0}}});import Q from"node:fs";import Pt from"node:path";import Le from"node:fs";import C from"node:path";W();var Tr="0.19.0",Gt=`hermes-agent==${Tr}`;var Oe="0.12.1",zt=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Oe}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Oe}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function Or(){return C.join(N(),"runtime")}function Lr(){return C.join(Or(),"venv")}function Nr(e){let t=process.platform==="win32"?"Scripts":"bin",r=process.platform==="win32"?`${e}.exe`:e;return C.join(Lr(),t,r)}function Cr(){return Nr("hermes")}function Rr(e){let t=process.platform==="win32"&&!C.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let r of(process.env.PATH||"").split(C.delimiter))if(r)for(let n of t){let o=C.join(r,`${e}${n}`);try{if(Le.existsSync(o))return o}catch{}}return null}function Ne(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=Cr();if(Le.existsSync(e))return{ok:!0,bin:e,source:"managed"};let t=Rr("hermes");return t?{ok:!0,bin:t,source:"path"}:{ok:!1,bin:null,source:null}}import I from"node:fs";import d from"node:path";W();import{existsSync as Re,readFileSync as Pr}from"node:fs";import{dirname as Ce,join as re}from"node:path";import{fileURLToPath as $r}from"node:url";function Br(e){let t=Ce($r(e));for(let r=0;r<8;r+=1){let n=re(t,"package.json");if(Re(n))try{let i=JSON.parse(Pr(n,"utf8"));if(i&&typeof i.version=="string")return t}catch{}let o=Ce(t);if(o===t)break;t=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function Pe(e,t){let r=Br(t),n=re(r,e);return Re(n)?n:re(r,"dist","assets",e)}var Mr=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 $e(){return Mr.filter(e=>e.website)}var te=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function ne(e=process.env){let t=String(e?.ORACLE_RESEARCH_MODE??e?.ORACLE_RLM_MODE??"").trim().toLowerCase();return t==="1"||t==="true"||t==="yes"||t==="on"||t==="research"}var R=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"]),Fr="deny",rn=256*1024;var tn=Object.freeze({version:1,source:"default",defaultDecision:Fr,allow:R,deny:Object.freeze([])});var oe=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),on=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,t=0,r=1)=>Math.min(r,Math.max(t,e)),g=e=>Number.isFinite(Number(e))?Number(e):null,qr=e=>Math.round(e*1e4)/1e4;function y(e,t,r,n=!0){!n||r===null||!Number.isFinite(r)||e.push({feature:t,value:qr(r)})}function jr(e,t){let r=g(e.repeatBuys??e.repeat_buys??e.buyCount),n=g(e.walletWinRate??e.winRate);y(t,"repeat_buys",r===null?null:b((r-1)/4)*.38),y(t,"wallet_win_rate",n===null?null:(b(n)-.5)*.5)}function Ur(e,t){let r=g(e.ageHours??e.poolAgeHours),n=g(e.liquidityUsd??e.liquidity),o=e.liquidityLocked??e.locked;y(t,"pool_age",r===null?null:r<24?-.42:b(r/720)*.12),y(t,"liquidity",n===null?null:(b(Math.log10(Math.max(1,n))/7)-.5)*.28),y(t,"liquidity_lock",o==null?null:o?.12:-.28)}function Dr(e,t){let r=g(e.floorChange??e.floorChangePct),n=g(e.sales??e.saleCount);y(t,"floor_change",r===null?null:b(r,-1,1)*.35),y(t,"sales_depth",n===null?null:b(n/50)*.18)}function Hr(e,t){let r=g(e.flowImbalance??e.imbalance),n=g(e.fundingRate??e.funding);y(t,"flow_imbalance",r===null?null:b(r,-1,1)*.42),y(t,"funding",n===null?null:-b(n*100,-1,1)*.12)}function Wr(e,t){let r=g(e.marketProbability??e.marketPrice??e.probability),n=g(e.fairProbability??e.referenceProbability??e.fairValue);y(t,"probability_mispricing",r===null||n===null?null:b(n-r,-1,1)*.65);let o=g(e.liquidityUsd??e.liquidity);y(t,"market_liquidity",o===null?null:b(Math.log10(Math.max(1,o))/6)*.12)}var sn=Object.freeze({wallet:jr,pool:Ur,nft_floor:Dr,hl_flow:Hr,prediction_market:Wr});function ie(e){try{return I.existsSync(e)}catch{return!1}}function J(e){for(let t of e)if(t&&ie(t))return t;return null}function se(e){try{return Pe(e,import.meta.url)}catch{return null}}function Jr(){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(ie(n))try{let i=I.readFileSync(n,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],a=new Set(i.map(u=>u.toLowerCase()));if(a.size>=20)return{count:a.size,detail:`${a.size} provider ids (bundled desk-data)`}}catch{}let t=[d.join(l,"src/data/providers"),d.join(l,"dist/data/providers"),d.join(l,"data/providers")],r=J(t);if(!r)return{count:0,detail:"providers dir missing"};try{let n=I.readdirSync(r).filter(o=>o.endsWith(".mjs"));return{count:n.length,detail:`${n.length} provider modules`}}catch(n){return{count:0,detail:n instanceof Error?n.message:String(n)}}}function Be(){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 t=I.readdirSync(e),r=t.filter(o=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(o)),n=t.filter(o=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(o));return{count:t.length,trading:r,building:n}}function Gr(){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(r=>!r.startsWith(".")):Be().building.some(r=>/protocol-builder|dex-launch|token-launch/i.test(r))?["(via skills: protocol-builder / launch packs)"]:[]}function zr(){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(t=>t.isDirectory()&&!t.name.startsWith("_")).map(t=>t.name):[]}function Vr(){try{if(R.includes("trade_lifecycle")&&!R.some(t=>/broadcast|wallet_sign/.test(t)))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 t of e)if(ie(t))try{let r=I.readFileSync(t,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(r))return!0}catch{}return!1}function Me(e=process.env){let t=[],r=(c,T,M,A=1)=>{t.push({id:c,status:T,detail:M,weight:A})},[n,o]=process.versions.node.split(".").map(Number),i=n>20||n===20&&o>=19;r("node",i?"ok":"fail",`node ${process.versions.node}`,2);let u=["oracle_cli","research_delegate","trade_lifecycle","signal_score","skill_load","learn_skill","code_eval","cron_add","web_fetch"].filter(c=>!R.includes(c));r("agent_tools",u.length===0?"ok":"warn",u.length===0?`safe tools ${R.length}; signal_score present`:`missing tools: ${u.join(",")}`,3),r("research_attributes","ok",`attrs [${te.join(", ")}]; mode=${ne(e)?"ON":"off"}`,2);let f=Jr();r("providers",f.count>=40?"ok":f.count>=10?"warn":"fail",f.detail,3);let w=Be();r("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=Gr();r("protocol_templates",p.length>=2?"ok":"warn",p.length?p.join(", "):"none",2);let h=zr();r("profiles",h.includes("protocol-builder")&&h.includes("oracle")?"ok":h.length>=1?"warn":"fail",h.join(", ")||"none",2),r("signals_engine",oe.length>=4?"ok":"fail",`types: ${oe.join(", ")} (cold / no hot exec)`,2);let v=$e();r("harness_roster",v.length>=8?"ok":"warn",`${v.length} website harnesses; native default; MCP inbound only`,2),r("custody_prepare_only",Vr()?"ok":"fail","public plane prepare-only",4);let k=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";r("data_url","ok",k,1);let _=0,S=0;for(let c of t)S+=c.weight,c.status==="ok"?_+=c.weight:c.status==="warn"&&(_+=c.weight*.5);let m=S?Math.round(_/S*100):0,x=!t.some(c=>c.status==="fail")&&m>=70,D=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:_,max:S,pct:m,summary:D,researchMode:ne(e),attributes:[...te],packageRoot:l,checks:t}}function Er(){let[e,t]=process.versions.node.split(".").map(Number);return e>20||e===20&&t>=19}function $t(e){if(!Q.existsSync(e))return{};let t={};for(let r of Q.readFileSync(e,"utf8").split(/\r?\n/)){let n=r.match(/^([A-Z0-9_]+)=(.*)$/);n&&(t[n[1]]=n[2])}return t}async function Bt(e){let t=e.replace(/\/$/,"");for(let r of["/health","/public/health"])try{if((await fetch(t+r)).ok)return!0}catch{}return!1}var vc={name:"doctor",summary:"check the read plane (+ optional --agentic crypto harness score)",group:"read",usage:"oracle doctor [--json] [--agentic] [--first-hour]",async run(e){let t=e.argv.includes("--json"),r=e.argv.includes("--agentic"),n=e.argv.includes("--first-hour"),o=[],i=!1,a=(c,T,M,A=null)=>{o.push({id:c,status:T,detail:M,fix:A}),T==="fail"&&(i=!0)};a("node",Er()?"ok":"fail",`node ${process.versions.node}`,Er()?null:"install node >= 20.19");let u=e.paths.oracleExecEnvPath(),f=$t(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;a("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 Bt(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;a("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=Ne();a("harness_model","ok","Oracle native is default; external clients are inbound MCP only (oracle harness detect)",null),a("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 _=Pt.join(e.paths.hermesRoot(),"profiles"),S=0;Q.existsSync(_)&&(S=Q.readdirSync(_,{withFileTypes:!0}).filter(c=>c.isDirectory()).length),a("hermes_lanes","ok",S>0?`${S} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);let m=null;if(r){m=Me(process.env);for(let c of m.checks)a(`agentic_${c.id}`,c.status,c.detail,null)}let x=null;if(n){let{firstHourReport:c}=await Promise.resolve().then(()=>(Ie(),wr)),{probeSigner:T,probeQuote:M}=await Promise.resolve().then(()=>(yr(),gr));x=c({signerReachable:await T(process.env),quote:await M()});for(let A of x.checks)a(`hour_${A.id}`,A.status,A.detail,A.fix)}let D={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(t)process.stdout.write(JSON.stringify(D,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{Za as default};
8
+ `)}return D.ok?0:1}};export{vc as default};