@oracle-agent/oracle 0.25.2 → 0.25.4
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/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 +15 -15
- 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 +21 -21
- package/dist/cli/commands/model.mjs +101 -101
- package/dist/cli/commands/receipt.mjs +2 -2
- package/dist/cli/commands/sign.mjs +9 -9
- package/dist/cli/commands/signer.mjs +12 -12
- 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 +53 -53
- 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/router/index.mjs +9 -9
- 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 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}},_e=new Map(Object.values(x).map(e=>[e.chainId,e]));import k from"node:fs";import M from"node:path";import{homedir as fe}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 le from"node:os";import{createHash as de,randomBytes as qo}from"node:crypto";import{Transaction as Do}from"@scure/btc-signer";import{ed25519 as Wo}from"@noble/curves/ed25519.js";import{base58 as wn}from"@scure/base";import{Interface as V,MaxUint256 as pr,isAddress as mr,keccak256 as hr,toUtf8Bytes as wr}from"ethers";import{Interface as G,isAddress as Ve}from"ethers";import{isAddress as je}from"ethers";var Ze=new G(["function approve(address spender,uint256 amount) returns (bool)"]);import{Interface as z,isAddress as rr}from"ethers";var ir=new z(["function approve(address spender,uint256 amount) returns (bool)"]),sr=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"});var Sr=new V(["function approve(address spender,uint256 amount) returns (bool)"]);var vr=300*1e3,Ir=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})();import{Address as Nr,NETWORK as _r,OutScript as Cr,RawTx as Pr,SigHash as Rr,TEST_NETWORK as Br,Transaction as $r}from"@scure/btc-signer";import{createHash as Y}from"node:crypto";import{base58 as Ur}from"@scure/base";import{getCompiledTransactionMessageDecoder as jr}from"@solana/transaction-messages";var L=e=>Y("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),Wr=new Map([[L("route"),{name:"route",prefixBytes:0}],[L("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]]);var st=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"}),at=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 lt="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"]]),ht=Object.freeze(X.map(e=>e[0]));var te=new Set(["evm","evm-swap","evm-bridge","evm-nft","btc","sol","hl","poly","lighter"]);var Pt=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 ne=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"}}),Rt=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"}}),Bt=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 oe=Object.freeze([...te]),$t=Object.freeze({...ne});import{ed25519 as Zt}from"@noble/curves/ed25519.js";import{base58 as en}from"@scure/base";import{RawTx as tn,SigHash as nn,Transaction as on}from"@scure/btc-signer";import{Transaction as an,keccak256 as cn,verifyTypedData as un}from"ethers";import{encode as qt}from"@msgpack/msgpack";import{keccak256 as Dt,verifyTypedData as jt}from"ethers";var Wt=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Ht=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]});var On=Object.freeze({N:1<<17,r:8,p:1}),Ln=256*1024*1024,Nn=16*1024;import{homedir as v}from"node:os";import{join as I}from"node:path";var R=process.env.ORACLE_PUBLIC_DESKTOP==="1",ce=R?process.env.ORACLE_CONFIG_DIR||I(v(),".config","oracle"):I(v(),".config","oracle"),Rn=R?ce:I(v(),".config","mad-desk");var qn="0".repeat(64),Un=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 Dn=Promise.resolve();import{Wallet as Yn}from"ethers";import{base58 as Zn}from"@scure/base";import{ed25519 as eo}from"@noble/curves/ed25519.js";import{NETWORK as to,TEST_NETWORK as no,WIF as oo,p2wpkh as io}from"@scure/btc-signer";import{pubECDSA as ao}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(le.homedir(),".local","state"),"oracle"),r=de("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 pe(){return process.env.ORACLE_CONFIG_DIR||M.join(fe(),".config","oracle")}function h(){let e=$(M.join(pe(),"signer")),t=k.existsSync(e.vault),r=k.existsSync(e.lock),o=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:k.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 Ei=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 ve from"node:path";import w from"node:fs";import me from"node:os";import f from"node:path";import{fileURLToPath as he}from"node:url";var we=f.dirname(he(import.meta.url)),Ii=f.resolve(we,"../..");function F(){return process.env.ORACLE_FAKE_HOME||me.homedir()}function ge(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function g(){return ge()?process.env.ORACLE_CONFIG_DIR||f.join(F(),".config","oracle"):f.join(F(),".config","oracle")}function ye(){return f.join(g(),"desk.json")}function Ee(){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=Ee();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=ye();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 xe=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 be(e,{required:t=!1}={}){let r=y(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!xe.has(r))throw new Error(`unsupported provider: ${r}`);return r}function Se(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 Ae(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=be(e),n=Se(t,{required:o});if(i==="custom")return{provider:i,...n?{model:n}:{},baseUrl:Ae(r)};if(y(r))throw new Error("baseUrl is only supported for the custom provider");return{...i?{provider:i}:{},...n?{model:n}:{}}}var Ie=new Set(["auto","standalone","hermes","remote","arch"]);function ke(){return ve.join(g(),"model.json")}function p(e){return String(e||"").trim()||void 0}function Te(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(!Ie.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 Te(JSON.parse(U.readFileSync(e,"utf8")))}catch{return null}}var Oe=new Set(["127.0.0.1","::1","localhost"]);function T({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 Le({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 Oe.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:T({env:e,vault:r})}}async function Di(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 Wi={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=T();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{b as classifyReceipt,
|
|
3
|
+
`);return 0}};export{b as classifyReceipt,Gi as default,Ne as firstHourReport,Ji as probeQuote,Hi as probeSigner,h as vaultStatus};
|