@oracle-agent/oracle 0.35.17 → 0.35.19

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.
@@ -1,3 +1,3 @@
1
- var m=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(o){throw t=[o],o}};var T,ut,j=m(()=>{T={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}},ut=new Map(Object.values(T).map(e=>[e.chainId,e]))});var z=m(()=>{});var Cr,R=m(()=>{z();Cr=64*1024});var Q=m(()=>{});import x from"node:fs";import He from"node:os";import f from"node:path";import{fileURLToPath as Je}from"node:url";function re(){return process.env.ORACLE_FAKE_HOME||He.homedir()}function Ve(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function S(){return Ve()?process.env.ORACLE_CONFIG_DIR||f.join(re(),".config","oracle"):f.join(re(),".config","oracle")}function Ke(){return f.join(S(),"desk.json")}function Ye(){return f.join(S(),"env")}function d({force:e=!1}={}){if(d._done&&!e)return d._result||null;d._done=!0;let r={},t=(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,r[i]=s))};try{let i=Ye();if(x.existsSync(i))for(let n of x.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)),t(s[1],a)}}catch{}try{let i=Ke();if(x.existsSync(i)){let n=JSON.parse(x.readFileSync(i,"utf8"));n&&typeof n=="object"&&(t("ORACLE_DESK_URL",n.deskUrl||n.dataUrl||n.url),t("ORACLE_DATA_URL",n.dataUrl||n.deskUrl||n.url),t("ORACLE_API_URL",n.apiUrl||n.dataUrl||n.deskUrl),t("ORACLE_PUBLIC_URL",n.publicUrl||n.deskUrl||n.dataUrl),t("ORACLE_EXEC_URL",n.execUrl),t("MAD_DESK_URL",n.deskUrl||n.dataUrl))}}catch{}let o=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return o&&(t("ORACLE_DESK_URL",o),t("ORACLE_DATA_URL",o),t("ORACLE_API_URL",o),t("ORACLE_PUBLIC_URL",o),t("MAD_DESK_URL",o)),d._result=Object.keys(r).length?r:null,d._result}var Ge,tc,ne=m(()=>{Ge=f.dirname(Je(import.meta.url)),tc=f.resolve(Ge,"../..");try{d()}catch{}});j();import F from"node:fs";import te from"node:path";import{homedir as ze}from"node:os";function O(e){let r=e?.transactionHash||e?.hash||e?.txid||null;return r?{happened:!0,hash:String(r),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}import u from"node:path";import je from"node:os";import{createHash as Ue,randomBytes as rs}from"node:crypto";import{Interface as B,keccak256 as os}from"ethers";import{Transaction as as}from"@scure/btc-signer";import{ed25519 as cs}from"@noble/curves/ed25519.js";import{base58 as _o}from"@scure/base";import{Interface as V}from"ethers";import{Interface as me,MaxUint256 as Ht,isAddress as Jt,keccak256 as Gt,toUtf8Bytes as Vt}from"ethers";import{Interface as fe,isAddress as kt}from"ethers";import{isAddress as bt}from"ethers";var Nt=new fe(["function approve(address spender,uint256 amount) returns (bool)"]);import{Interface as pe,isAddress as _t}from"ethers";var Ft=new pe(["function approve(address spender,uint256 amount) returns (bool)"]),Dt=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"});var er=new me(["function approve(address spender,uint256 amount) returns (bool)"]);var rr=300*1e3,nr=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})();import{Address as cr,NETWORK as ur,OutScript as lr,RawTx as dr,SigHash as fr,TEST_NETWORK as pr,Transaction as mr}from"@scure/btc-signer";import{createHash as we}from"node:crypto";import{base58 as yr}from"@scure/base";import{getCompiledTransactionMessageDecoder as br}from"@solana/transaction-messages";var U=e=>we("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),xr=new Map([[U("route"),{name:"route",prefixBytes:0}],[U("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]]);R();var Mr=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"}),jr=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 Wr="0x"+"00".repeat(32);var ge=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(ge.map(e=>e[0]));import{TypedDataEncoder as Tn,getAddress as On}from"ethers";import{TypedDataEncoder as en,getAddress as tn,isAddress as rn}from"ethers";var Ee=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),be=Object.freeze({Order:[{name:"salt",type:"uint256"},{name:"maker",type:"address"},{name:"receiver",type:"address"},{name:"makerAsset",type:"address"},{name:"takerAsset",type:"address"},{name:"makingAmount",type:"uint256"},{name:"takingAmount",type:"uint256"},{name:"makerTraits",type:"uint256"}]});R();import{TypedDataEncoder as mn,getAddress as wn,isAddress as hn}from"ethers";var an=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"});var xe=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),An=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"});var Se=Object.freeze({Order:[{name:"sellToken",type:"address"},{name:"buyToken",type:"address"},{name:"receiver",type:"address"},{name:"sellAmount",type:"uint256"},{name:"buyAmount",type:"uint256"},{name:"validTo",type:"uint32"},{name:"appData",type:"bytes32"},{name:"feeAmount",type:"uint256"},{name:"kind",type:"string"},{name:"partiallyFillable",type:"bool"},{name:"sellTokenBalance",type:"string"},{name:"buyTokenBalance",type:"string"}]}),vn=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]});var Ln=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"]);var Oe=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]);var Vn=Object.freeze({swap:5,bridge:5,perps:0,nft:0,mint:0,transfer:0,approve:0,delegate:0,identity:0,order:0,cancel:0,leverage:0,margin:0,approveBuilder:0,stake:0,unstake:0});var Ce=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"}}),Kn=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Yn=new V(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Xn=new V(["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"]),Qn=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 Ne=Object.freeze([...Oe]),Zn=Object.freeze({...Ce});import{ed25519 as ho}from"@noble/curves/ed25519.js";import{base58 as yo}from"@scure/base";import{RawTx as bo,SigHash as xo,Transaction as So}from"@scure/btc-signer";import{Transaction as vo,keccak256 as Io,verifyTypedData as ko}from"ethers";import{encode as ro}from"@msgpack/msgpack";import{keccak256 as oo,verifyTypedData as io}from"ethers";var ao=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),so=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]});var Ho=Object.freeze({N:1<<17,r:8,p:1}),Jo=256*1024*1024,Go=16*1024;var Ko=Object.freeze({1:{name:"ethereum",mode:"mempool-private",endpoints:["https://rpc.flashbots.net/fast","https://rpc.mevblocker.io"]},8453:{name:"base",mode:"sequencer",endpoints:["https://mainnet-sequencer.base.org"]},10:{name:"optimism",mode:"sequencer",endpoints:["https://mainnet-sequencer.optimism.io"]},42161:{name:"arbitrum",mode:"sequencer",endpoints:["https://arb1-sequencer.arbitrum.io/rpc"]},56:{name:"bsc",mode:"mempool-private",endpoints:["https://rpc.48.club","https://bsc.rpc.blxrbdn.com"]},137:{name:"polygon",mode:"mempool-private",endpoints:["https://polygon-bor-rpc.publicnode.com"]},43114:{name:"avalanche",mode:"public-only",endpoints:[]},999:{name:"hyperevm",mode:"public-only",endpoints:[]}});import{homedir as $}from"node:os";import{join as P}from"node:path";var Y=process.env.ORACLE_PUBLIC_DESKTOP==="1",_e=Y?process.env.ORACLE_CONFIG_DIR||P($(),".config","oracle"):P($(),".config","oracle"),Zo=Y?_e:P($(),".config","mad-desk");var oi="0".repeat(64),ii=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 ai=Promise.resolve();Q();import{readFileSync as gi,readdirSync as yi,existsSync as $e}from"node:fs";import{dirname as Pe,join as h}from"node:path";import{fileURLToPath as Be}from"node:url";var g=Pe(Be(import.meta.url));function Fe(){let e=[h(g,"descriptors"),h(g,"clear-sign","descriptors"),h(g,"..","clear-sign","descriptors"),h(g,"..","..","clear-sign","descriptors"),h(g,"..","..","..","clear-sign","descriptors")];for(let r of e)if($e(r))return r;return e[0]}var Si=Fe();var Ai=(1n<<256n)-1n;import{Wallet as Ri}from"ethers";import{base58 as $i}from"@scure/base";import{ed25519 as Bi}from"@noble/curves/ed25519.js";import{NETWORK as Di,TEST_NETWORK as qi,WIF as Mi,p2wpkh as ji}from"@scure/btc-signer";import{pubECDSA as zi}from"@scure/btc-signer/utils.js";var Ji=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),Gi=Object.freeze(["binance","bybit","okx","coinbase"]),Vi=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),Ki=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),Yi=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Xi=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Qi=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Zi=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),ea=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),ta=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),ra=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"});var Me=Object.freeze({binance:Object.freeze({create:["POST","/api/v3/order"],cancel:["DELETE","/api/v3/order"],status:["GET","/api/v3/order"]}),bybit:Object.freeze({create:["POST","/v5/order/create"],cancel:["POST","/v5/order/cancel"],status:["GET","/v5/order/realtime"]}),okx:Object.freeze({create:["POST","/api/v5/trade/order"],cancel:["POST","/api/v5/trade/cancel-order"],status:["GET","/api/v5/trade/order"]}),coinbase:Object.freeze({create:["POST","/orders"],cancel:["DELETE","/orders/{order_id}"],status:["GET","/orders/{order_id}"]})}),Z=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"});var fa=256*1024;var Bs=new B(["function collection() view returns (address)","function token() view returns (address)","function robinhoodSwapFeeWei() view returns (uint256)","function quoteSpecificBuy(uint256 tokenId) view returns (uint256 totalCost,uint256 baseCost,uint256 fee,uint256 protocolFee,bool available)","function quoteSellNFT() view returns (uint256 netPayout,uint256 grossPayout,uint256 fee,uint256 protocolFee)","function inventory(uint256 tokenId) view returns (bool)","function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Fs=new B(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),Ds=new B(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"]);function ee(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||u.join(process.env.XDG_STATE_HOME||u.join(je.homedir(),".local","state"),"oracle"),t=Ue("sha256").update(u.resolve(e)).digest("hex").slice(0,16);return{vault:u.join(e,"vault.json"),policy:u.join(e,"signer-policy.json"),policyKey:u.join(e,"policy-integrity-key"),policyAnchor:u.join(r,`signer-policy-${t}.high-water`),ledger:u.join(e,"signer-ledger.json"),ledgerAnchor:u.join(r,`signer-ledger-${t}.high-water`),cexOrders:u.join(e,"cex-orders.json"),cexOrdersAnchor:u.join(r,`cex-orders-${t}.high-water`),token:u.join(e,"signer-token"),lock:u.join(r,`signer-${t}.lock`)}}function We(){return process.env.ORACLE_CONFIG_DIR||te.join(ze(),".config","oracle")}function b(){let e=ee(te.join(We(),"signer")),r=F.existsSync(e.vault),t=F.existsSync(e.lock),o=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:F.existsSync(e.policy),armed:r&&!t,disarmed:t,capabilities:{swap:o,bridge:o},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var Ks=Object.freeze([{type:"function",function:{name:"vault_status",description:"Read local Oracle vault/signer readiness. Never returns key material.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_status",description:"Ping the loopback signer. Fails closed if it is not running.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_pending",description:"List pending local-signer artifacts. Read-only. Does not approve, sign, or broadcast.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_queue",description:"Queue a prepared unsigned artifact on the loopback signer. Does not broadcast.",parameters:{type:"object",properties:{artifact:{type:"object"}},required:["artifact"],additionalProperties:!1}}},{type:"function",function:{name:"signer_ack",description:"Execute one pending artifact through the armed local signer (same path as Telegram Allow). Fails if the signer is not running or disarmed. Never holds keys.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_deny",description:"Drop one pending local-signer artifact. Nothing signed.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_execute",description:"Broadcast one already-confirmed local artifact. Requires a one-use confirmationNonce from the local signer TTY confirm. Cannot mint confirmation itself.",parameters:{type:"object",properties:{artifact:{type:"object"},confirmationNonce:{type:"string",minLength:32,maxLength:128}},required:["artifact","confirmationNonce"],additionalProperties:!1}}},{type:"function",function:{name:"signer_disarm",description:"Global kill switch. Stops the local signer from broadcasting.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"receipt_report",description:"Receipt or it did not happen. Requires transactionHash/hash/txid.",parameters:{type:"object",properties:{receipt:{type:"object"},transactionHash:{type:"string"},hash:{type:"string"},txid:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"watch_create",description:"Create an alert-only watch. Never execute.",parameters:{type:"object",properties:{chain:{type:"string"},token:{type:"string"},condition:{type:"string"},note:{type:"string"}},required:["chain","token","condition"],additionalProperties:!1}}},{type:"function",function:{name:"watch_list",description:"List local alert-only watches.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"portfolio_snapshot",description:"How to read the one portfolio snapshot. knownUsd is incomplete if a provider is missing.",parameters:{type:"object",properties:{},additionalProperties:!1}}}]);ne();import ie from"node:fs";import tt from"node:path";var Xe=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"]);function A(e){return String(e||"").trim()||void 0}function Qe(e,{required:r=!1}={}){let t=A(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!Xe.has(t))throw new Error(`unsupported provider: ${t}`);return t}function Ze(e,{required:r=!1}={}){let t=A(e);if(!t){if(r)throw new Error("model is required");return}if(t.includes("..")||t.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(t))throw new Error("invalid model id");return t}function et(e){let r=A(e);if(!r||r.length>2048)throw new Error("invalid custom base URL");let t;try{t=new URL(r)}catch{throw new Error("invalid custom base URL")}let o=t.hostname.toLowerCase().replace(/^\[|\]$/g,""),i=o==="localhost"||o==="127.0.0.1"||o==="::1";if(t.protocol!=="https:"&&!(t.protocol==="http:"&&i)||t.username||t.password||t.search||t.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return t.toString().replace(/\/+$/,"")}function oe({provider:e,model:r,baseUrl:t}={},{requireModel:o=!1}={}){let i=Qe(e),n=Ze(r,{required:o});if(i==="custom")return{provider:i,...n?{model:n}:{},baseUrl:et(t)};if(A(t))throw new Error("baseUrl is only supported for the custom provider");return{...i?{provider:i}:{},...n?{model:n}:{}}}var rt=new Set(["auto","standalone","hermes","remote","arch"]);function nt(){return tt.join(S(),"model.json")}function p(e){return String(e||"").trim()||void 0}function ot(e={}){let r=p(e.backend)?.toLowerCase()||"auto",t=oe({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="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),c=p(e.computePath||e.remotePath);if(!rt.has(r))throw new Error(`unsupported backend: ${r}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(r))throw new Error("remote compute backends are disabled in the public desktop");if(o&&!/^[A-Z][A-Z0-9_]*$/.test(o))throw new Error("api key env must be an uppercase environment variable name");if(r==="remote"&&!s)throw new Error("remote backend requires computeHost");return{backend:r,...t,...o?{apiKeyEnv:o}:{},...Number.isFinite(i)&&i>0?{contextLength:i}:{},...n?{reasoningEffort:n}:{},...s?{computeHost:s}:{},...a?{computeUser:a}:{},...c?{computePath:c}:{}}}function ae(){let e=nt();if(!ie.existsSync(e))return null;try{return ot(JSON.parse(ie.readFileSync(e,"utf8")))}catch{return null}}var it=new Set(["127.0.0.1","::1","localhost"]);function D({env:e=process.env,vault:r=null}={}){let t=r||b(),o=[];for(let[i,n]of Object.entries(T)){let s=(n.rpcEnv||[]).some(c=>String(e[c]||"").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:!!(t.vaultExists&&t.armed&&!t.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 at({env:e=process.env,model:r=ae(),vault:t=b(),signerReachable:o=!1,quote:i=null,reviewAvailable:n=!1,receiptAvailable:s=!1}={}){let a=[],c=(l,k,ce,ue=null)=>a.push({id:l,status:k,detail:ce,fix:ue}),q=(()=>{let[l,k]=process.versions.node.split(".").map(Number);return l>20||l===20&&k>=19})();c("node",q?"ok":"fail",`node ${process.versions.node}`,q?null:"install node >= 20.19"),r?r.backend==="hermes"?c("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):c("model","ok",`${r.backend||"auto"} ${r.provider||""} ${r.model||""}`.trim()):c("model","fail","no model.json","oracle setup model"),t.vaultExists?t.disarmed?c("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):c("vault",t.armed?"ok":"warn",t.armed?"present, armed":"present, not armed"):c("vault","fail","no local vault","oracle sign init");let I=e.ORACLE_SIGNER_HOST||"127.0.0.1";if(it.has(I)?c("signer",o?"ok":"warn",o?`loopback ${I}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",o?null:"oracle signer"):c("signer","fail",`signer host ${I} is not loopback`,"unset ORACLE_SIGNER_HOST"),!i)c("quote","warn","quote not probed",null);else if(i.ok){let l=String(i.detail||"net quote returned");c("quote","ok",l.length>140?`${l.slice(0,140)}\u2026`:l)}else c("quote","warn",i.detail||"quote unavailable","check network / oracle data serve");c("review",n?"ok":"fail",n?"sign-time review renders decoded action, policy hits, approval deltas":"sign-time review module missing from this build",n?null:"reinstall @oracle-agent/oracle (src/control/sign-time-review.mjs)"),c("receipt",s?"ok":"fail",s?"oracle receipt verifies on-chain state (SUCCESS/FAIL/UNKNOWN, finality-pinned)":"verified-receipt observer missing from this build",s?null:"reinstall @oracle-agent/oracle (src/desk/observe-receipt.mjs)");let se=a.some(l=>l.status==="fail"),M=a.filter(l=>l.status==="ok").length;return{ok:!se,checks:a,firstRunScore:{ok:M,total:a.length,label:`${M}/${a.length} first-run hops green`},venues:D({env:e,vault:t})}}async function gc(e=process.env){let r=e.ORACLE_SIGNER_HOST||"127.0.0.1",t=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${r}:${t}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}function v(e){let r=String(e??"?").replace(/[^\w.$-]/g,"");return r.length>12?`${r.slice(0,12)}...`:r||"?"}function st(e,r=120){let t=String(e??"").replace(/[\u0000-\u001f\u007f-\u009f]/g," ").replace(/\s+/g," ").trim();return t?t.length>r?`${t.slice(0,r)}...`:t:"quote failed"}async function yc(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let t=(await e.json())?.pairs?.[0];return!t?.chainId||!t?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${v(t.chainId)} ${v(t.baseToken?.symbol)}/${v(t.quoteToken?.symbol)} $${v(t.priceUsd)}`}}catch(e){return{ok:!1,detail:st(e instanceof Error?e.message:"quote failed")}}}var Ec={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let r=e.argv.includes("--json"),t=D();if(r)return process.stdout.write(`${JSON.stringify({venues:t},null,2)}
1
+ var d=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(o){throw t=[o],o}};var T,Jt,J=d(()=>{T={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}},Jt=new Map(Object.values(T).map(e=>[e.chainId,e]))});var G=d(()=>{});var mn,L=d(()=>{G();mn=64*1024});import{wordlists as _i}from"ethers";var re=d(()=>{});var Zi,Qi,ea,pe=d(()=>{Zi=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Qi=Object.freeze(["read","simulate"]),ea=1440*60});var la,ua,da,me=d(()=>{pe();la=Object.freeze(["privkey","wif","xprv","seed"]),ua=Object.freeze([{rule:"raw-32-byte-hex-key",re:/^0x[0-9a-fA-F]{64}$/},{rule:"raw-32-byte-hex-bare",re:/^[0-9a-fA-F]{64}$/},{rule:"extended-private-key",re:/\b(?:xprv|tprv|yprv|zprv)[1-9A-HJ-NP-Za-km-z]{107}\b/},{rule:"bitcoin-wif",re:/\b[59KLc][1-9A-HJ-NP-Za-km-z]{50,51}\b/},{rule:"bip39-mnemonic",re:/\b(?:[a-z]{3,8}\s+){11,23}[a-z]{3,8}\b/},{rule:"bearer-token",re:/bearer\s+[A-Za-z0-9._~+/=-]+/i},{rule:"pem-private-key",re:/-----BEGIN[A-Z ]*PRIVATE KEY-----/},{rule:"keystore-path",re:/keystore/i},{rule:"signer-url",re:/https?:\/\/\S*sign/i},{rule:"authorization-header",re:/authorization\s*:/i}]),da=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"])});var ge=d(()=>{});import S from"node:fs";import Nt from"node:os";import p from"node:path";import{fileURLToPath as _t}from"node:url";function xe(){return process.env.ORACLE_FAKE_HOME||Nt.homedir()}function Rt(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function A(){return Rt()?process.env.ORACLE_CONFIG_DIR||p.join(xe(),".config","oracle"):p.join(xe(),".config","oracle")}function Lt(){return p.join(A(),"desk.json")}function $t(){return p.join(A(),"env")}function f({force:e=!1}={}){if(f._done&&!e)return f._result||null;f._done=!0;let r={},t=(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,r[i]=s))};try{let i=$t();if(S.existsSync(i))for(let n of S.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)),t(s[1],a)}}catch{}try{let i=Lt();if(S.existsSync(i)){let n=JSON.parse(S.readFileSync(i,"utf8"));n&&typeof n=="object"&&(t("ORACLE_DESK_URL",n.deskUrl||n.dataUrl||n.url),t("ORACLE_DATA_URL",n.dataUrl||n.deskUrl||n.url),t("ORACLE_API_URL",n.apiUrl||n.dataUrl||n.deskUrl),t("ORACLE_PUBLIC_URL",n.publicUrl||n.deskUrl||n.dataUrl),t("ORACLE_EXEC_URL",n.execUrl),t("MAD_DESK_URL",n.deskUrl||n.dataUrl))}}catch{}let o=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return o&&(t("ORACLE_DESK_URL",o),t("ORACLE_DATA_URL",o),t("ORACLE_API_URL",o),t("ORACLE_PUBLIC_URL",o),t("MAD_DESK_URL",o)),f._result=Object.keys(r).length?r:null,f._result}var Ct,Hu,Se=d(()=>{Ct=p.dirname(_t(import.meta.url)),Hu=p.resolve(Ct,"../..");try{f()}catch{}});J();import z from"node:fs";import be from"node:path";import{homedir as Ot}from"node:os";function N(e){let r=e?.transactionHash||e?.hash||e?.txid||null;return r?{happened:!0,hash:String(r),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}import l from"node:path";import kt from"node:os";import{createHash as It,randomBytes as Ml}from"node:crypto";import{Interface as H,keccak256 as zl}from"ethers";import{Transaction as Wl}from"@scure/btc-signer";import{ed25519 as Jl}from"@noble/curves/ed25519.js";import{base58 as gi}from"@scure/base";import{Interface as ee}from"ethers";import{Interface as Le,MaxUint256 as Nr,isAddress as _r,keccak256 as Cr,toUtf8Bytes as Rr}from"ethers";import{Interface as Ce,isAddress as ur}from"ethers";import{isAddress as or}from"ethers";var mr=new Ce(["function approve(address spender,uint256 amount) returns (bool)"]);import{Interface as Re,isAddress as gr}from"ethers";var xr=new Re(["function approve(address spender,uint256 amount) returns (bool)"]),Sr=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"});var Fr=new Le(["function approve(address spender,uint256 amount) returns (bool)"]);var jr=300*1e3,Mr=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})();import{Address as Vr,NETWORK as Jr,OutScript as Kr,RawTx as Gr,SigHash as Yr,TEST_NETWORK as Xr,Transaction as Zr}from"@scure/btc-signer";import{createHash as $e}from"node:crypto";import{base58 as rn}from"@scure/base";import{getCompiledTransactionMessageDecoder as on}from"@solana/transaction-messages";var K=e=>$e("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),an=new Map([[K("route"),{name:"route",prefixBytes:0}],[K("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]]);L();var kn=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"}),In=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 Nn="0x"+"00".repeat(32);var Be=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),$n=Object.freeze(Be.map(e=>e[0]));import{TypedDataEncoder as fo,getAddress as po}from"ethers";import{TypedDataEncoder as qn,getAddress as jn,isAddress as Mn}from"ethers";var Fe=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),qe=Object.freeze({Order:[{name:"salt",type:"uint256"},{name:"maker",type:"address"},{name:"receiver",type:"address"},{name:"makerAsset",type:"address"},{name:"takerAsset",type:"address"},{name:"makingAmount",type:"uint256"},{name:"takingAmount",type:"uint256"},{name:"makerTraits",type:"uint256"}]});L();import{TypedDataEncoder as Zn,getAddress as Qn,isAddress as eo}from"ethers";var Un=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"});var je=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),so=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"});var Me=Object.freeze({Order:[{name:"sellToken",type:"address"},{name:"buyToken",type:"address"},{name:"receiver",type:"address"},{name:"sellAmount",type:"uint256"},{name:"buyAmount",type:"uint256"},{name:"validTo",type:"uint32"},{name:"appData",type:"bytes32"},{name:"feeAmount",type:"uint256"},{name:"kind",type:"string"},{name:"partiallyFillable",type:"bool"},{name:"sellTokenBalance",type:"string"},{name:"buyTokenBalance",type:"string"}]}),co=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]});var ho=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"]);var Je=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]);var Lo=Object.freeze({swap:5,bridge:5,perps:0,nft:0,mint:0,transfer:0,approve:0,delegate:0,identity:0,order:0,cancel:0,leverage:0,margin:0,approveBuilder:0,stake:0,unstake:0});var Ke=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"}}),$o=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Po=new ee(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Bo=new ee(["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"]),Do=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 Ge=Object.freeze([...Je]),Fo=Object.freeze({...Ke});import{ed25519 as ei}from"@noble/curves/ed25519.js";import{base58 as ri}from"@scure/base";import{RawTx as oi,SigHash as ii,Transaction as ai}from"@scure/btc-signer";import{Transaction as ci,keccak256 as li,verifyTypedData as ui}from"ethers";import{encode as Mo}from"@msgpack/msgpack";import{keccak256 as zo,verifyTypedData as Uo}from"ethers";var Wo=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Vo=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]});re();import{wordlists as $i}from"ethers";var ne=64*1024;var Bi=32*1024;var et=["schemaVersion","buildVersion","recordType","execution","custody"],qi=[...et,"recordHash"];var ji=Object.freeze({signed:new Set(["workflow.signed","legacy.signed"]),submitted:new Set(["workflow.submitted","legacy.broadcast"]),finalized:new Set(["workflow.finalized"]),reorged:new Set(["workflow.reorged"]),orphaned:new Set(["workflow.orphaned"]),compensating:new Set(["workflow.compensating"]),compensated:new Set(["workflow.compensated"])});var tt=Object.freeze(["draft","checked","approval","signed","submitted","finalized","reorged","orphaned","compensating","compensated","failed","cancelled"]),fe=Object.freeze(["workflow.drafted","workflow.checked","workflow.approval_requested","workflow.approval_granted","workflow.signed","workflow.submitted","workflow.finalized","workflow.reorged","workflow.orphaned","workflow.compensating","workflow.compensated","workflow.failed","workflow.cancelled","workflow.annotated"]),Wi=new Set(fe);var st=64*1024*1024;me();var q=Object.freeze(["intent","quote_comparison","simulation","prepared","approval","signed","broadcast","settlement","balance_delta","position"]),wa=Object.freeze(Object.fromEntries(q.map((e,r)=>[e,Object.freeze(r+1<q.length?[q[r+1]]:[])])));var ct=Object.freeze({intent:"draft",quote_comparison:"draft",simulation:"draft",prepared:"checked",approval:"approval",signed:"signed",broadcast:"submitted",settlement:"finalized",balance_delta:"compensated",position:"compensated"});var ut=Object.freeze(["owner","operator","agent","viewer"]),dt=Object.freeze(["tenant","config","policy","grant","workflow","trade","receipt","audit","telemetry"]),ft=Object.freeze({read:"read",create:"create",update:"update",delete:"delete",manage:"manage",prepare:"prepare",cancel:"cancel",export:"export",approve:"approve"}),Qa=Object.freeze(["owner"]),es=Object.freeze({ALLOW_ROLE_PERMISSION:"allow.role_permission",DENY_MISSING_CONTEXT:"deny.missing_context",DENY_INVALID_CONTEXT:"deny.invalid_context",DENY_INVALID_REQUEST:"deny.invalid_request",DENY_UNKNOWN_RESOURCE:"deny.unknown_resource",DENY_UNKNOWN_ACTION:"deny.unknown_action",DENY_UNBOUND_OBJECT:"deny.unbound_object",DENY_TENANT_MISMATCH:"deny.tenant_mismatch",DENY_RESOURCE_MISMATCH:"deny.resource_mismatch",DENY_ROLE_PERMISSION:"deny.role_permission",DENY_POLICY_NOT_APPROVER:"deny.policy_not_approver"}),ts=new Set(ut),rs=new Set(dt),ns=new Set(Object.values(ft));var pt=Object.freeze({owner:Object.freeze(["tenant:read","tenant:manage","config:read","config:manage","policy:read","policy:manage","grant:read","grant:create","grant:update","grant:delete","grant:manage","workflow:read","workflow:create","workflow:update","workflow:delete","workflow:cancel","workflow:approve","trade:read","trade:prepare","receipt:read","receipt:export","audit:read","audit:export","telemetry:read","telemetry:create","telemetry:export"]),operator:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","workflow:cancel","trade:read","trade:prepare","receipt:read","audit:read","telemetry:read","telemetry:create"]),agent:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","trade:read","trade:prepare","receipt:read","telemetry:create"]),viewer:Object.freeze(["tenant:read","config:read","grant:read","workflow:read","trade:read","receipt:read","audit:read","telemetry:read"])}),os=Object.freeze(Object.fromEntries(Object.entries(pt).map(([e,r])=>[e,Object.freeze([...r])])));var mt=Object.freeze(["succeeded","denied","invalid","failed","cancelled","timed_out","unavailable","skipped"]),wt=Object.freeze(["workflow","task","intent","plan","run","event","eval"]),ht=Object.freeze(["taskId","intentId","planId","runId","eventId"]);var cs=Object.freeze({maxAttributes:24,maxKeyLength:48,maxStringLength:256,maxArrayLength:8}),ls=new Set(mt),us=new Set(wt),ds=new Set(ht);var fs=Object.freeze(["authorization","bearer","cookie","credential","password","passphrase","secret","token","privatekey","privkey","seed","mnemonic","keystore","signature","prompt","systemmessage","usermessage","assistantmessage","rawtransaction","signedtransaction","serializedtransaction","transactionbytes","calldata","callbytes","inputdata"]);var ps=Object.freeze({taskId:"x-oracle-task-id",intentId:"x-oracle-intent-id",planId:"x-oracle-plan-id",runId:"x-oracle-run-id",eventId:"x-oracle-event-id"});var Es=Object.freeze({"workflow.cancelled":"cancelled","workflow.failed":"failed"});var ks=32*1024*1024;var Os=Object.freeze({N:1<<17,r:8,p:1}),Ts=256*1024*1024,Ns=16*1024;var Cs=Object.freeze({1:{name:"ethereum",mode:"mempool-private",endpoints:["https://rpc.flashbots.net/fast","https://rpc.mevblocker.io"]},8453:{name:"base",mode:"sequencer",endpoints:["https://mainnet-sequencer.base.org"]},10:{name:"optimism",mode:"sequencer",endpoints:["https://mainnet-sequencer.optimism.io"]},42161:{name:"arbitrum",mode:"sequencer",endpoints:["https://arb1-sequencer.arbitrum.io/rpc"]},56:{name:"bsc",mode:"mempool-private",endpoints:["https://rpc.48.club","https://bsc.rpc.blxrbdn.com"]},137:{name:"polygon",mode:"mempool-private",endpoints:["https://polygon-bor-rpc.publicnode.com"]},43114:{name:"avalanche",mode:"public-only",endpoints:[]},999:{name:"hyperevm",mode:"public-only",endpoints:[]}});import{homedir as j}from"node:os";import{join as M}from"node:path";var we=process.env.ORACLE_PUBLIC_DESKTOP==="1",gt=we?process.env.ORACLE_CONFIG_DIR||M(j(),".config","oracle"):M(j(),".config","oracle"),Ps=we?gt:M(j(),".config","mad-desk");var js="0".repeat(64),Ms=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 Hs=Promise.resolve();ge();import{readFileSync as Qs,readdirSync as ec,existsSync as yt}from"node:fs";import{dirname as Et,join as h}from"node:path";import{fileURLToPath as bt}from"node:url";var g=Et(bt(import.meta.url));function xt(){let e=[h(g,"descriptors"),h(g,"clear-sign","descriptors"),h(g,"..","clear-sign","descriptors"),h(g,"..","..","clear-sign","descriptors"),h(g,"..","..","..","clear-sign","descriptors")];for(let r of e)if(yt(r))return r;return e[0]}var oc=xt();var ic=(1n<<256n)-1n;import{Wallet as mc}from"ethers";import{base58 as hc}from"@scure/base";import{ed25519 as yc}from"@noble/curves/ed25519.js";import{NETWORK as bc,TEST_NETWORK as xc,WIF as Sc,p2wpkh as Ac}from"@scure/btc-signer";import{pubECDSA as kc}from"@scure/btc-signer/utils.js";var Tc=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),Nc=Object.freeze(["binance","bybit","okx","coinbase"]),_c=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),Cc=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),Rc=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Lc=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),$c=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Pc=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),Bc=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),Dc=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),Fc=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"});var vt=Object.freeze({binance:Object.freeze({create:["POST","/api/v3/order"],cancel:["DELETE","/api/v3/order"],status:["GET","/api/v3/order"]}),bybit:Object.freeze({create:["POST","/v5/order/create"],cancel:["POST","/v5/order/cancel"],status:["GET","/v5/order/realtime"]}),okx:Object.freeze({create:["POST","/api/v5/trade/order"],cancel:["POST","/api/v5/trade/cancel-order"],status:["GET","/api/v5/trade/order"]}),coinbase:Object.freeze({create:["POST","/orders"],cancel:["DELETE","/orders/{order_id}"],status:["GET","/orders/{order_id}"]})}),ye=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"});var Kc=256*1024;var Au=new H(["function collection() view returns (address)","function token() view returns (address)","function robinhoodSwapFeeWei() view returns (uint256)","function quoteSpecificBuy(uint256 tokenId) view returns (uint256 totalCost,uint256 baseCost,uint256 fee,uint256 protocolFee,bool available)","function quoteSellNFT() view returns (uint256 netPayout,uint256 grossPayout,uint256 fee,uint256 protocolFee)","function inventory(uint256 tokenId) view returns (bool)","function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),vu=new H(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),ku=new H(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"]);function Ee(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||l.join(process.env.XDG_STATE_HOME||l.join(kt.homedir(),".local","state"),"oracle"),t=It("sha256").update(l.resolve(e)).digest("hex").slice(0,16);return{vault:l.join(e,"vault.json"),policy:l.join(e,"signer-policy.json"),policyKey:l.join(e,"policy-integrity-key"),policyAnchor:l.join(r,`signer-policy-${t}.high-water`),ledger:l.join(e,"signer-ledger.json"),ledgerAnchor:l.join(r,`signer-ledger-${t}.high-water`),cexOrders:l.join(e,"cex-orders.json"),cexOrdersAnchor:l.join(r,`cex-orders-${t}.high-water`),token:l.join(e,"signer-token"),lock:l.join(r,`signer-${t}.lock`),workflowLedger:l.join(e,"workflow-events.jsonl")}}function Tt(){return process.env.ORACLE_CONFIG_DIR||be.join(Ot(),".config","oracle")}function x(){let e=Ee(be.join(Tt(),"signer")),r=z.existsSync(e.vault),t=z.existsSync(e.lock),o=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:z.existsSync(e.policy),armed:r&&!t,disarmed:t,capabilities:{swap:o,bridge:o},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var Bu=Object.freeze([{type:"function",function:{name:"vault_status",description:"Read local Oracle vault/signer readiness. Never returns key material.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_status",description:"Ping the loopback signer. Fails closed if it is not running.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_pending",description:"List pending local-signer artifacts. Read-only. Does not approve, sign, or broadcast.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_queue",description:"Queue a prepared unsigned artifact on the loopback signer. Does not broadcast.",parameters:{type:"object",properties:{artifact:{type:"object"}},required:["artifact"],additionalProperties:!1}}},{type:"function",function:{name:"signer_ack",description:"Execute one pending artifact through the armed local signer (same path as Telegram Allow). Fails if the signer is not running or disarmed. Never holds keys.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_deny",description:"Drop one pending local-signer artifact. Nothing signed.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_execute",description:"Broadcast one already-confirmed local artifact. Requires a one-use confirmationNonce from the local signer TTY confirm. Cannot mint confirmation itself.",parameters:{type:"object",properties:{artifact:{type:"object"},confirmationNonce:{type:"string",minLength:32,maxLength:128}},required:["artifact","confirmationNonce"],additionalProperties:!1}}},{type:"function",function:{name:"signer_disarm",description:"Global kill switch. Stops the local signer from broadcasting.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"receipt_report",description:"Receipt or it did not happen. Requires transactionHash/hash/txid.",parameters:{type:"object",properties:{receipt:{type:"object"},transactionHash:{type:"string"},hash:{type:"string"},txid:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"watch_create",description:"Create an alert-only watch. Never execute.",parameters:{type:"object",properties:{chain:{type:"string"},token:{type:"string"},condition:{type:"string"},note:{type:"string"}},required:["chain","token","condition"],additionalProperties:!1}}},{type:"function",function:{name:"watch_list",description:"List local alert-only watches.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"portfolio_snapshot",description:"How to read the one portfolio snapshot. knownUsd is incomplete if a provider is missing.",parameters:{type:"object",properties:{},additionalProperties:!1}}}]);Se();import ve from"node:fs";import qt from"node:path";var Pt=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"]);function v(e){return String(e||"").trim()||void 0}function Bt(e,{required:r=!1}={}){let t=v(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!Pt.has(t))throw new Error(`unsupported provider: ${t}`);return t}function Dt(e,{required:r=!1}={}){let t=v(e);if(!t){if(r)throw new Error("model is required");return}if(t.includes("..")||t.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(t))throw new Error("invalid model id");return t}function Ft(e){let r=v(e);if(!r||r.length>2048)throw new Error("invalid custom base URL");let t;try{t=new URL(r)}catch{throw new Error("invalid custom base URL")}let o=t.hostname.toLowerCase().replace(/^\[|\]$/g,""),i=o==="localhost"||o==="127.0.0.1"||o==="::1";if(t.protocol!=="https:"&&!(t.protocol==="http:"&&i)||t.username||t.password||t.search||t.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return t.toString().replace(/\/+$/,"")}function Ae({provider:e,model:r,baseUrl:t}={},{requireModel:o=!1}={}){let i=Bt(e),n=Dt(r,{required:o});if(i==="custom")return{provider:i,...n?{model:n}:{},baseUrl:Ft(t)};if(v(t))throw new Error("baseUrl is only supported for the custom provider");return{...i?{provider:i}:{},...n?{model:n}:{}}}var jt=new Set(["auto","standalone","hermes","remote","arch"]);function Mt(){return qt.join(A(),"model.json")}function m(e){return String(e||"").trim()||void 0}function Ht(e={}){let r=m(e.backend)?.toLowerCase()||"auto",t=Ae({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),o=m(e.apiKeyEnv),i=Number.parseInt(String(e.contextLength||""),10),n=m(e.reasoningEffort),s=m(e.computeHost||e.remoteHost),a=m(e.computeUser||e.remoteUser),c=m(e.computePath||e.remotePath);if(!jt.has(r))throw new Error(`unsupported backend: ${r}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(r))throw new Error("remote compute backends are disabled in the public desktop");if(o&&!/^[A-Z][A-Z0-9_]*$/.test(o))throw new Error("api key env must be an uppercase environment variable name");if(r==="remote"&&!s)throw new Error("remote backend requires computeHost");return{backend:r,...t,...o?{apiKeyEnv:o}:{},...Number.isFinite(i)&&i>0?{contextLength:i}:{},...n?{reasoningEffort:n}:{},...s?{computeHost:s}:{},...a?{computeUser:a}:{},...c?{computePath:c}:{}}}function ke(){let e=Mt();if(!ve.existsSync(e))return null;try{return Ht(JSON.parse(ve.readFileSync(e,"utf8")))}catch{return null}}var zt=new Set(["127.0.0.1","::1","localhost"]);function U({env:e=process.env,vault:r=null}={}){let t=r||x(),o=[];for(let[i,n]of Object.entries(T)){let s=(n.rpcEnv||[]).some(c=>String(e[c]||"").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:!!(t.vaultExists&&t.armed&&!t.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 Ut({env:e=process.env,model:r=ke(),vault:t=x(),signerReachable:o=!1,quote:i=null,reviewAvailable:n=!1,receiptAvailable:s=!1}={}){let a=[],c=(u,O,Oe,Te=null)=>a.push({id:u,status:O,detail:Oe,fix:Te}),W=(()=>{let[u,O]=process.versions.node.split(".").map(Number);return u>20||u===20&&O>=19})();c("node",W?"ok":"fail",`node ${process.versions.node}`,W?null:"install node >= 20.19"),r?r.backend==="hermes"?c("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):c("model","ok",`${r.backend||"auto"} ${r.provider||""} ${r.model||""}`.trim()):c("model","fail","no model.json","oracle setup model"),t.vaultExists?t.disarmed?c("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):c("vault",t.armed?"ok":"warn",t.armed?"present, armed":"present, not armed"):c("vault","fail","no local vault","oracle sign init");let I=e.ORACLE_SIGNER_HOST||"127.0.0.1";if(zt.has(I)?c("signer",o?"ok":"warn",o?`loopback ${I}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",o?null:"oracle signer"):c("signer","fail",`signer host ${I} is not loopback`,"unset ORACLE_SIGNER_HOST"),!i)c("quote","warn","quote not probed",null);else if(i.ok){let u=String(i.detail||"net quote returned");c("quote","ok",u.length>140?`${u.slice(0,140)}\u2026`:u)}else c("quote","warn",i.detail||"quote unavailable","check network / oracle data serve");c("review",n?"ok":"fail",n?"sign-time review renders decoded action, policy hits, approval deltas":"sign-time review module missing from this build",n?null:"reinstall @oracle-agent/oracle (src/control/sign-time-review.mjs)"),c("receipt",s?"ok":"fail",s?"oracle receipt verifies on-chain state (SUCCESS/FAIL/UNKNOWN, finality-pinned)":"verified-receipt observer missing from this build",s?null:"reinstall @oracle-agent/oracle (src/desk/observe-receipt.mjs)");let Ie=a.some(u=>u.status==="fail"),V=a.filter(u=>u.status==="ok").length;return{ok:!Ie,checks:a,firstRunScore:{ok:V,total:a.length,label:`${V}/${a.length} first-run hops green`},venues:U({env:e,vault:t})}}async function od(e=process.env){let r=e.ORACLE_SIGNER_HOST||"127.0.0.1",t=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${r}:${t}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}function k(e){let r=String(e??"?").replace(/[^\w.$-]/g,"");return r.length>12?`${r.slice(0,12)}...`:r||"?"}function Wt(e,r=120){let t=String(e??"").replace(/[\u0000-\u001f\u007f-\u009f]/g," ").replace(/\s+/g," ").trim();return t?t.length>r?`${t.slice(0,r)}...`:t:"quote failed"}async function id(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let t=(await e.json())?.pairs?.[0];return!t?.chainId||!t?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${k(t.chainId)} ${k(t.baseToken?.symbol)}/${k(t.quoteToken?.symbol)} $${k(t.priceUsd)}`}}catch(e){return{ok:!1,detail:Wt(e instanceof Error?e.message:"quote failed")}}}var ad={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let r=e.argv.includes("--json"),t=U();if(r)return process.stdout.write(`${JSON.stringify({venues:t},null,2)}
2
2
  `),0;for(let o of t)process.stdout.write(`${o.status.padEnd(12)} ${o.key.padEnd(16)} ${o.name} exec=${o.execute?"local":"no"}
3
- `);return 0}};export{O as classifyReceipt,Ec as default,st as detailText,at as firstHourReport,yc as probeQuote,gc as probeSigner,v as symbol,b as vaultStatus};
3
+ `);return 0}};export{N as classifyReceipt,ad as default,Wt as detailText,Ut as firstHourReport,id as probeQuote,od as probeSigner,k as symbol,x as vaultStatus};