@oracle-agent/oracle 0.25.1 → 0.25.3
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/README.md +33 -1
- package/dist/assets/graphics/fonts/CormorantGaramond-Bold.ttf +0 -0
- package/dist/assets/graphics/fonts/RobotoMono-Bold.ttf +0 -0
- package/dist/assets/graphics/fonts/dmmono-Medium.ttf +0 -0
- package/dist/assets/graphics/oracle_card.py +242 -39
- package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
- package/dist/bin/desk-server.mjs +53 -53
- package/dist/bin/oracle-data-mcp.mjs +12 -12
- package/dist/bin/oracle-public-server.mjs +11 -11
- package/dist/bin/oracle-route.mjs +14 -14
- package/dist/cli/commands/chat.mjs +96 -96
- package/dist/cli/commands/doctor.mjs +3 -3
- package/dist/cli/commands/eval.mjs +414 -85
- package/dist/cli/commands/farm.mjs +56 -56
- package/dist/cli/commands/model.mjs +102 -102
- package/dist/cli/commands/receipt.mjs +2 -2
- package/dist/cli/commands/sign.mjs +13 -13
- package/dist/cli/commands/signer.mjs +13 -13
- package/dist/cli/commands/strategy.mjs +11 -11
- package/dist/cli/commands/swap.mjs +10 -10
- package/dist/cli/commands/venues.mjs +2 -2
- package/dist/data/desk-data.mjs +51 -51
- package/dist/data/providers/universal-evm-nft-transfer.mjs +1 -0
- package/dist/data/providers/universal-ordinals-transfer.mjs +1 -0
- package/dist/data/providers/universal-solana-nft-transfer.mjs +1 -0
- package/dist/index.mjs +56 -56
- package/dist/local-signer/index.mjs +3 -3
- package/dist/nft/index.mjs +1 -1
- package/dist/nft/universal-mint-router.mjs +47 -0
- package/dist/nft/universal-nft-lifecycle.mjs +1 -0
- package/dist/prepare-envelope.mjs +1 -1
- package/dist/public-api/agent-grants.mjs +3 -3
- package/dist/router/index.mjs +11 -11
- package/dist/router/prepare-bridge.mjs +18 -18
- package/dist/strategy/index.mjs +11 -11
- package/package.json +6 -1
- package/public/oracle-splash/downloads/index.html +4 -4
- package/public/oracle-splash/index.html +1 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var b={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}},ke=new Map(Object.values(b).map(e=>[e.chainId,e]));import I from"node:fs";import R from"node:path";import{homedir as ce}from"node:os";function S(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"}}import c from"node:path";import ae from"node:os";import{createHash as se,randomBytes as go}from"node:crypto";import{Transaction as Eo}from"@scure/btc-signer";import{ed25519 as So}from"@noble/curves/ed25519.js";import{base58 as Vt}from"@scure/base";import{Interface as H,MaxUint256 as lr,isAddress as dr,keccak256 as fr,toUtf8Bytes as pr}from"ethers";import{Interface as D,isAddress as He}from"ethers";import{isAddress as qe}from"ethers";var ze=new D(["function approve(address spender,uint256 amount) returns (bool)"]);import{Interface as W,isAddress as Xe}from"ethers";var rr=new W(["function approve(address spender,uint256 amount) returns (bool)"]),tr=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"});var Er=new H(["function approve(address spender,uint256 amount) returns (bool)"]);var Sr=300*1e3,xr=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})();import{Address as kr,NETWORK as Or,OutScript as Lr,RawTx as _r,SigHash as Nr,TEST_NETWORK as Cr,Transaction as Rr}from"@scure/btc-signer";import{createHash as G}from"node:crypto";import{base58 as $r}from"@scure/base";import{getCompiledTransactionMessageDecoder as Fr}from"@solana/transaction-messages";var O=e=>G("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),Ur=new Map([[O("route"),{name:"route",prefixBytes:0}],[O("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]]);var Dr=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"}),Wr=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 Jr="0x"+"00".repeat(32);var V=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Kr=Object.freeze(V.map(e=>e[0]));var Z=new Set(["evm","evm-swap","evm-bridge","evm-nft","btc","sol","hl","poly","lighter"]);var dt=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});var Q=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"}}),ft=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"}}),pt=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"}});var ee=Object.freeze([...Z]),mt=Object.freeze({...Q});import{ed25519 as _t}from"@noble/curves/ed25519.js";import{base58 as Ct}from"@scure/base";import{RawTx as Bt,SigHash as Pt,Transaction as Mt}from"@scure/btc-signer";import{Transaction as qt,keccak256 as Ft,verifyTypedData as Ut}from"ethers";import{encode as gt}from"@msgpack/msgpack";import{keccak256 as Et,verifyTypedData as bt}from"ethers";var St=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),xt=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]});var an=Object.freeze({N:1<<17,r:8,p:1}),sn=256*1024*1024,cn=16*1024;import{homedir as v}from"node:os";import{join as T}from"node:path";var _=process.env.ORACLE_PUBLIC_DESKTOP==="1",oe=_?process.env.ORACLE_CONFIG_DIR||T(v(),".config","oracle"):T(v(),".config","oracle"),fn=_?oe:T(v(),".config","mad-desk");var gn="0".repeat(64),yn=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"});var En=Promise.resolve();import{Wallet as On}from"ethers";import{base58 as _n}from"@scure/base";import{ed25519 as Cn}from"@noble/curves/ed25519.js";import{NETWORK as Bn,TEST_NETWORK as Pn,WIF as Mn,p2wpkh as $n}from"@scure/btc-signer";import{pubECDSA as Fn}from"@scure/btc-signer/utils.js";function C(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||c.join(process.env.XDG_STATE_HOME||c.join(ae.homedir(),".local","state"),"oracle"),r=se("sha256").update(c.resolve(e)).digest("hex").slice(0,16);return{vault:c.join(e,"vault.json"),policy:c.join(e,"signer-policy.json"),policyKey:c.join(e,"policy-integrity-key"),policyAnchor:c.join(t,`signer-policy-${r}.high-water`),ledger:c.join(e,"signer-ledger.json"),ledgerAnchor:c.join(t,`signer-ledger-${r}.high-water`),token:c.join(e,"signer-token"),lock:c.join(t,`signer-${r}.lock`)}}function ue(){return process.env.ORACLE_CONFIG_DIR||R.join(ce(),".config","oracle")}function h(){let e=C(R.join(ue(),"signer")),t=I.existsSync(e.vault),r=I.existsSync(e.lock),o=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:I.existsSync(e.policy),armed:t&&!r,disarmed:r,capabilities:{swap:o,bridge:o},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var Xo=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}}}]);import M from"node:fs";import be from"node:path";import w from"node:fs";import le from"node:os";import f from"node:path";import{fileURLToPath as de}from"node:url";var fe=f.dirname(de(import.meta.url)),ni=f.resolve(fe,"../..");function B(){return process.env.ORACLE_FAKE_HOME||le.homedir()}function pe(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function g(){return pe()?process.env.ORACLE_CONFIG_DIR||f.join(B(),".config","oracle"):f.join(B(),".config","oracle")}function me(){return f.join(g(),"desk.json")}function he(){return f.join(g(),"env")}function d({force:e=!1}={}){if(d._done&&!e)return d._result||null;d._done=!0;let t={},r=(i,n)=>{if(n==null)return;let a=String(n).trim();a&&(process.env[i]!=null&&String(process.env[i]).trim()!==""||(process.env[i]=a,t[i]=a))};try{let i=he();if(w.existsSync(i))for(let n of w.readFileSync(i,"utf8").split(/\r?\n/)){let a=n.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!a||a[2].startsWith("#"))continue;let s=a[2];(s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'"))&&(s=s.slice(1,-1)),r(a[1],s)}}catch{}try{let i=me();if(w.existsSync(i)){let n=JSON.parse(w.readFileSync(i,"utf8"));n&&typeof n=="object"&&(r("ORACLE_DESK_URL",n.deskUrl||n.dataUrl||n.url),r("ORACLE_DATA_URL",n.dataUrl||n.deskUrl||n.url),r("ORACLE_API_URL",n.apiUrl||n.dataUrl||n.deskUrl),r("ORACLE_PUBLIC_URL",n.publicUrl||n.deskUrl||n.dataUrl),r("ORACLE_EXEC_URL",n.execUrl),r("MAD_DESK_URL",n.deskUrl||n.dataUrl))}}catch{}let o=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return o&&(r("ORACLE_DESK_URL",o),r("ORACLE_DATA_URL",o),r("ORACLE_API_URL",o),r("ORACLE_PUBLIC_URL",o),r("MAD_DESK_URL",o)),d._result=Object.keys(t).length?t:null,d._result}try{d()}catch{}var we=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","custom","anthropic-oauth","openai-codex","xai-oauth"]);function y(e){return String(e||"").trim()||void 0}function ge(e,{required:t=!1}={}){let r=y(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!we.has(r))throw new Error(`unsupported provider: ${r}`);return r}function ye(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 Ee(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 o=r.hostname.toLowerCase().replace(/^\[|\]$/g,""),i=o==="localhost"||o==="127.0.0.1"||o==="::1";if(r.protocol!=="https:"&&!(r.protocol==="http:"&&i)||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 P({provider:e,model:t,baseUrl:r}={},{requireModel:o=!1}={}){let i=ge(e),n=ye(t,{required:o});if(i==="custom")return{provider:i,...n?{model:n}:{},baseUrl:Ee(r)};if(y(r))throw new Error("baseUrl is only supported for the custom provider");return{...i?{provider:i}:{},...n?{model:n}:{}}}var Se=new Set(["auto","standalone","hermes","remote","arch"]);function xe(){return be.join(g(),"model.json")}function p(e){return String(e||"").trim()||void 0}function Ae(e={}){let t=p(e.backend)?.toLowerCase()||"auto",r=P({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),o=p(e.apiKeyEnv),i=Number.parseInt(String(e.contextLength||""),10),n=p(e.reasoningEffort),a=p(e.computeHost||e.remoteHost),s=p(e.computeUser||e.remoteUser),u=p(e.computePath||e.remotePath);if(!Se.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(o&&!/^[A-Z][A-Z0-9_]*$/.test(o))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,...o?{apiKeyEnv:o}:{},...Number.isFinite(i)&&i>0?{contextLength:i}:{},...n?{reasoningEffort:n}:{},...a?{computeHost:a}:{},...s?{computeUser:s}:{},...u?{computePath:u}:{}}}function $(){let e=xe();if(!M.existsSync(e))return null;try{return Ae(JSON.parse(M.readFileSync(e,"utf8")))}catch{return null}}var ve=new Set(["127.0.0.1","::1","localhost"]);function k({env:e=process.env,vault:t=null}={}){let r=t||h(),o=[];for(let[i,n]of Object.entries(b)){let a=(n.rpcEnv||[]).some(u=>String(e[u]||"").trim()),s="prepare";n.evm?a&&(s="live"):s="unavailable",o.push({key:i,chainId:n.chainId,name:n.name,family:"evm",status:s,execute:!!(r.vaultExists&&r.armed&&!r.disarmed),note:a?"rpc configured":"public read/prepare; set RPC for live reads"})}return o.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"}),o}function Te({env:e=process.env,model:t=$(),vault:r=h(),signerReachable:o=!1,quote:i=null}={}){let n=[],a=(l,E,q,F=null)=>n.push({id:l,status:E,detail:q,fix:F}),s=(()=>{let[l,E]=process.versions.node.split(".").map(Number);return l>20||l===20&&E>=19})();a("node",s?"ok":"fail",`node ${process.versions.node}`,s?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 u=e.ORACLE_SIGNER_HOST||"127.0.0.1";return ve.has(u)?a("signer",o?"ok":"warn",o?`loopback ${u}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",o?null:"oracle signer"):a("signer","fail",`signer host ${u} is not loopback`,"unset ORACLE_SIGNER_HOST"),i?i.ok?a("quote","ok",i.detail||"net quote returned"):a("quote","warn",i.detail||"quote unavailable","check network / oracle data serve"):a("quote","warn","quote not probed",null),{ok:!n.some(l=>l.status==="fail"),checks:n,venues:k({env:e,vault:r})}}async function Ei(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 bi(){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 Si={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=k();if(t)return process.stdout.write(`${JSON.stringify({venues:r},null,2)}
|
|
1
|
+
var x={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}},Ce=new Map(Object.values(x).map(e=>[e.chainId,e]));import T from"node:fs";import M from"node:path";import{homedir as pe}from"node:os";function b(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"}}import c from"node:path";import de from"node:os";import{createHash as fe,randomBytes as jo}from"node:crypto";import{Transaction as Ho}from"@scure/btc-signer";import{ed25519 as Go}from"@noble/curves/ed25519.js";import{base58 as En}from"@scure/base";import{Interface as te}from"ethers";import{Interface as V,MaxUint256 as mr,isAddress as hr,keccak256 as wr,toUtf8Bytes as gr}from"ethers";import{Interface as G,isAddress as Ke}from"ethers";import{isAddress as We}from"ethers";var Qe=new G(["function approve(address spender,uint256 amount) returns (bool)"]);import{Interface as z,isAddress as tr}from"ethers";var sr=new z(["function approve(address spender,uint256 amount) returns (bool)"]),ar=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"});var Ar=new V(["function approve(address spender,uint256 amount) returns (bool)"]);var Ir=300*1e3,Tr=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})();import{Address as _r,NETWORK as Cr,OutScript as Pr,RawTx as Br,SigHash as Rr,TEST_NETWORK as $r,Transaction as Mr}from"@scure/btc-signer";import{createHash as Y}from"node:crypto";import{base58 as Dr}from"@scure/base";import{getCompiledTransactionMessageDecoder as Wr}from"@solana/transaction-messages";var L=e=>Y("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),Hr=new Map([[L("route"),{name:"route",prefixBytes:0}],[L("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]]);var at=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"}),ct=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 dt="0x"+"00".repeat(32);var X=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),wt=Object.freeze(X.map(e=>e[0]));var ne=new Set(["evm","evm-swap","evm-bridge","evm-nft","btc","sol","hl","poly","lighter"]);var Rt=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});var oe=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"}}),$t=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Mt=new te(["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"]),Ft=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"}});var ie=Object.freeze([...ne]),qt=Object.freeze({...oe});import{ed25519 as rn}from"@noble/curves/ed25519.js";import{base58 as nn}from"@scure/base";import{RawTx as sn,SigHash as an,Transaction as cn}from"@scure/btc-signer";import{Transaction as ln,keccak256 as dn,verifyTypedData as fn}from"ethers";import{encode as jt}from"@msgpack/msgpack";import{keccak256 as Ht,verifyTypedData as Jt}from"ethers";var Gt=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),zt=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]});var _n=Object.freeze({N:1<<17,r:8,p:1}),Cn=256*1024*1024,Pn=16*1024;import{homedir as v}from"node:os";import{join as I}from"node:path";var B=process.env.ORACLE_PUBLIC_DESKTOP==="1",ue=B?process.env.ORACLE_CONFIG_DIR||I(v(),".config","oracle"):I(v(),".config","oracle"),Mn=B?ue:I(v(),".config","mad-desk");var jn="0".repeat(64),Wn=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"});var Hn=Promise.resolve();import{Wallet as Qn}from"ethers";import{base58 as ro}from"@scure/base";import{ed25519 as no}from"@noble/curves/ed25519.js";import{NETWORK as io,TEST_NETWORK as so,WIF as ao,p2wpkh as co}from"@scure/btc-signer";import{pubECDSA as lo}from"@scure/btc-signer/utils.js";function $(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||c.join(process.env.XDG_STATE_HOME||c.join(de.homedir(),".local","state"),"oracle"),r=fe("sha256").update(c.resolve(e)).digest("hex").slice(0,16);return{vault:c.join(e,"vault.json"),policy:c.join(e,"signer-policy.json"),policyKey:c.join(e,"policy-integrity-key"),policyAnchor:c.join(t,`signer-policy-${r}.high-water`),ledger:c.join(e,"signer-ledger.json"),ledgerAnchor:c.join(t,`signer-ledger-${r}.high-water`),token:c.join(e,"signer-token"),lock:c.join(t,`signer-${r}.lock`)}}function me(){return process.env.ORACLE_CONFIG_DIR||M.join(pe(),".config","oracle")}function h(){let e=$(M.join(me(),"signer")),t=T.existsSync(e.vault),r=T.existsSync(e.lock),o=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:T.existsSync(e.policy),armed:t&&!r,disarmed:r,capabilities:{swap:o,bridge:o},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var Si=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}}}]);import U from"node:fs";import Ie from"node:path";import w from"node:fs";import he from"node:os";import f from"node:path";import{fileURLToPath as we}from"node:url";var ge=f.dirname(we(import.meta.url)),Oi=f.resolve(ge,"../..");function F(){return process.env.ORACLE_FAKE_HOME||he.homedir()}function ye(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function g(){return ye()?process.env.ORACLE_CONFIG_DIR||f.join(F(),".config","oracle"):f.join(F(),".config","oracle")}function Ee(){return f.join(g(),"desk.json")}function xe(){return f.join(g(),"env")}function d({force:e=!1}={}){if(d._done&&!e)return d._result||null;d._done=!0;let t={},r=(i,n)=>{if(n==null)return;let s=String(n).trim();s&&(process.env[i]!=null&&String(process.env[i]).trim()!==""||(process.env[i]=s,t[i]=s))};try{let i=xe();if(w.existsSync(i))for(let n of w.readFileSync(i,"utf8").split(/\r?\n/)){let s=n.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let a=s[2];(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),r(s[1],a)}}catch{}try{let i=Ee();if(w.existsSync(i)){let n=JSON.parse(w.readFileSync(i,"utf8"));n&&typeof n=="object"&&(r("ORACLE_DESK_URL",n.deskUrl||n.dataUrl||n.url),r("ORACLE_DATA_URL",n.dataUrl||n.deskUrl||n.url),r("ORACLE_API_URL",n.apiUrl||n.dataUrl||n.deskUrl),r("ORACLE_PUBLIC_URL",n.publicUrl||n.deskUrl||n.dataUrl),r("ORACLE_EXEC_URL",n.execUrl),r("MAD_DESK_URL",n.deskUrl||n.dataUrl))}}catch{}let o=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return o&&(r("ORACLE_DESK_URL",o),r("ORACLE_DATA_URL",o),r("ORACLE_API_URL",o),r("ORACLE_PUBLIC_URL",o),r("MAD_DESK_URL",o)),d._result=Object.keys(t).length?t:null,d._result}try{d()}catch{}var be=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","custom","anthropic-oauth","openai-codex","xai-oauth"]);function y(e){return String(e||"").trim()||void 0}function Se(e,{required:t=!1}={}){let r=y(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!be.has(r))throw new Error(`unsupported provider: ${r}`);return r}function Ae(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 ve(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 o=r.hostname.toLowerCase().replace(/^\[|\]$/g,""),i=o==="localhost"||o==="127.0.0.1"||o==="::1";if(r.protocol!=="https:"&&!(r.protocol==="http:"&&i)||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 q({provider:e,model:t,baseUrl:r}={},{requireModel:o=!1}={}){let i=Se(e),n=Ae(t,{required:o});if(i==="custom")return{provider:i,...n?{model:n}:{},baseUrl:ve(r)};if(y(r))throw new Error("baseUrl is only supported for the custom provider");return{...i?{provider:i}:{},...n?{model:n}:{}}}var Te=new Set(["auto","standalone","hermes","remote","arch"]);function ke(){return Ie.join(g(),"model.json")}function p(e){return String(e||"").trim()||void 0}function Oe(e={}){let t=p(e.backend)?.toLowerCase()||"auto",r=q({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),o=p(e.apiKeyEnv),i=Number.parseInt(String(e.contextLength||""),10),n=p(e.reasoningEffort),s=p(e.computeHost||e.remoteHost),a=p(e.computeUser||e.remoteUser),u=p(e.computePath||e.remotePath);if(!Te.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(o&&!/^[A-Z][A-Z0-9_]*$/.test(o))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,...o?{apiKeyEnv:o}:{},...Number.isFinite(i)&&i>0?{contextLength:i}:{},...n?{reasoningEffort:n}:{},...s?{computeHost:s}:{},...a?{computeUser:a}:{},...u?{computePath:u}:{}}}function D(){let e=ke();if(!U.existsSync(e))return null;try{return Oe(JSON.parse(U.readFileSync(e,"utf8")))}catch{return null}}var Le=new Set(["127.0.0.1","::1","localhost"]);function k({env:e=process.env,vault:t=null}={}){let r=t||h(),o=[];for(let[i,n]of Object.entries(x)){let s=(n.rpcEnv||[]).some(u=>String(e[u]||"").trim()),a="prepare";n.evm?s&&(a="live"):a="unavailable",o.push({key:i,chainId:n.chainId,name:n.name,family:"evm",status:a,execute:!!(r.vaultExists&&r.armed&&!r.disarmed),note:s?"rpc configured":"public read/prepare; set RPC for live reads"})}return o.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"}),o}function Ne({env:e=process.env,model:t=D(),vault:r=h(),signerReachable:o=!1,quote:i=null}={}){let n=[],s=(l,E,j,W=null)=>n.push({id:l,status:E,detail:j,fix:W}),a=(()=>{let[l,E]=process.versions.node.split(".").map(Number);return l>20||l===20&&E>=19})();s("node",a?"ok":"fail",`node ${process.versions.node}`,a?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 u=e.ORACLE_SIGNER_HOST||"127.0.0.1";return Le.has(u)?s("signer",o?"ok":"warn",o?`loopback ${u}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",o?null:"oracle signer"):s("signer","fail",`signer host ${u} is not loopback`,"unset ORACLE_SIGNER_HOST"),i?i.ok?s("quote","ok",i.detail||"net quote returned"):s("quote","warn",i.detail||"quote unavailable","check network / oracle data serve"):s("quote","warn","quote not probed",null),{ok:!n.some(l=>l.status==="fail"),checks:n,venues:k({env:e,vault:r})}}async function Hi(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 Ji(){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 Gi={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=k();if(t)return process.stdout.write(`${JSON.stringify({venues:r},null,2)}
|
|
2
2
|
`),0;for(let o of r)process.stdout.write(`${o.status.padEnd(12)} ${o.key.padEnd(16)} ${o.name} exec=${o.execute?"local":"no"}
|
|
3
|
-
`);return 0}};export{
|
|
3
|
+
`);return 0}};export{b as classifyReceipt,Gi as default,Ne as firstHourReport,Ji as probeQuote,Hi as probeSigner,h as vaultStatus};
|