@oracle-agent/oracle 0.28.28 → 0.28.30
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 +10 -3
- package/SETUP.md +3 -0
- package/dist/assets/skills/bankrbot/SKILL.md +24 -0
- package/dist/assets/skills/oracle-agentic-crypto/SKILL.md +39 -0
- package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
- package/dist/assets/skills/oracle-uniswap-v4-hooks/SKILL.md +31 -0
- package/dist/assets/skills/oracle-x402/SKILL.md +30 -0
- package/dist/bin/desk-server.mjs +28 -26
- package/dist/bin/oracle-data-mcp.mjs +26 -12
- package/dist/bin/oracle-gateway.mjs +39 -27
- package/dist/bin/oracle-mev-arb-shadow.mjs +5 -5
- package/dist/bin/oracle-mev-shadow.mjs +5 -5
- package/dist/bin/oracle-public-server.mjs +4 -4
- package/dist/bin/oracle-route.mjs +15 -15
- package/dist/bin/oracle-scan.mjs +11 -11
- package/dist/bin/oracle.mjs +4 -3
- package/dist/cli/commands/auth.mjs +6 -6
- package/dist/cli/commands/chat.mjs +161 -161
- package/dist/cli/commands/doctor.mjs +1 -1
- package/dist/cli/commands/eval.mjs +138 -139
- package/dist/cli/commands/farm.mjs +22 -22
- package/dist/cli/commands/follow.mjs +14 -14
- package/dist/cli/commands/harness.mjs +4 -4
- package/dist/cli/commands/model.mjs +163 -163
- package/dist/cli/commands/receipt.mjs +1 -1
- package/dist/cli/commands/resolve.mjs +6 -6
- package/dist/cli/commands/setup.mjs +23 -23
- package/dist/cli/commands/snipe.mjs +24 -0
- package/dist/cli/commands/strategy.mjs +3 -3
- package/dist/cli/commands/swap.mjs +25 -25
- package/dist/cli/commands/venues.mjs +1 -1
- package/dist/control/approval-binding.mjs +1 -0
- package/dist/control/finality.mjs +1 -0
- package/dist/control-plane/index.mjs +6 -0
- package/dist/data/desk-data.mjs +27 -25
- package/dist/data/names.mjs +2 -2
- package/dist/data/providers/farming.mjs +2 -2
- package/dist/governance-prepare.mjs +2 -0
- package/dist/index.mjs +44 -31
- package/dist/local-marketplace.mjs +3 -0
- package/dist/local-pack-registry.mjs +3 -0
- package/dist/local-signer/runtime.mjs +7 -7
- package/dist/local-x402.mjs +3 -0
- package/dist/nft/universal-mint-router.mjs +3 -3
- package/dist/notifications/index.mjs +3 -0
- package/dist/position-health.mjs +2 -0
- package/dist/router/index.mjs +2 -2
- package/dist/router/prepare-bridge.mjs +2 -2
- package/dist/safety-intelligence.mjs +1 -0
- package/dist/scanner/index.mjs +3 -3
- package/dist/strategy/index.mjs +3 -3
- package/dist/task.d.mts +130 -0
- package/dist/task.mjs +2 -0
- package/dist/tax-lots.mjs +5 -0
- package/dist/tenant-rbac.mjs +1 -0
- package/dist/workflow-telemetry.mjs +1 -0
- package/package.json +17 -2
- package/public/agent-connect/index.html +2 -2
- package/public/install.sh +2 -2
- package/public/oracle-splash/index.html +2 -2
- package/public/oracle-splash/install.sh +2 -2
|
@@ -1,38 +1,50 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var tr=Object.defineProperty;var l=(t,e,r)=>()=>{if(r)throw r[0];try{return t&&(e=t(t=0)),e}catch(n){throw r=[n],n}};var L=(t,e)=>{for(var r in e)tr(t,r,{get:e[r],enumerable:!0})};var Re={};L(Re,{A2ABus:()=>re,normalizeName:()=>W});function W(t){return String(t||"").trim().toLowerCase().replace(/^@/,"")}var re,Pe=l(()=>{re=class{constructor({maxHops:e=4,historyCap:r=200}={}){this.maxHops=e,this.historyCap=r,this.agents=new Map,this.history=[],this.seq=0}register(e,{role:r="",chains:n=[],handler:o}={}){let i=W(e);if(!i)throw new Error("a2a: agent name required");if(this.agents.has(i))throw new Error(`a2a: agent '${i}' already registered`);if(typeof o!="function")throw new Error(`a2a: agent '${i}' needs a handler`);return this.agents.set(i,{name:i,role:String(r),chains:n.map(String),handler:o}),this.agents.get(i)}unregister(e){this.agents.delete(W(e))}roster(){return[...this.agents.values()].map(({name:e,role:r,chains:n})=>({name:e,role:r,chains:n}))}async send({from:e,to:r,text:n,kind:o="consult",hops:i=0}={}){let s=W(e),a=W(r);if(!s||!this.agents.has(s))return{ok:!1,error:`a2a: unknown sender '${e}'`};if(!a||!this.agents.has(a))return{ok:!1,error:`a2a: unknown recipient '${r}' (roster: ${[...this.agents.keys()].join(", ")||"empty"})`};if(a===s)return{ok:!1,error:"a2a: self-send refused"};let u=String(n||"").trim().slice(0,8e3);if(!u)return{ok:!1,error:"a2a: empty message"};let f=Number(i)+1;if(f>this.maxHops)return this.record({from:s,to:a,kind:o,dropped:"hop-limit"}),{ok:!1,error:`a2a: hop limit ${this.maxHops} reached \u2014 dropped`};let d={id:`a2a-${Date.now()}-${++this.seq}`,from:s,to:a,kind:String(o),text:u,hops:f,ts:new Date().toISOString()};this.record(d);try{let m=await this.agents.get(a).handler(d);return m&&this.record({id:`${d.id}-reply`,from:a,to:s,kind:"reply",text:String(m).slice(0,8e3),hops:f,ts:new Date().toISOString()}),{ok:!0,reply:m||null,id:d.id}}catch(m){return{ok:!1,error:`a2a: '${a}' handler failed: ${m.message}`}}}record(e){this.history.push(e),this.history.length>this.historyCap&&this.history.splice(0,this.history.length-this.historyCap)}recent(e=20){return this.history.slice(-e)}}});import z from"node:fs";import rr from"node:os";import R from"node:path";import{fileURLToPath as nr}from"node:url";function Be(){return process.env.ORACLE_FAKE_HOME||rr.homedir()}function ir(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function P(){return ir()?process.env.ORACLE_CONFIG_DIR||R.join(Be(),".config","oracle"):R.join(Be(),".config","oracle")}function ar(){return R.join(P(),"desk.json")}function sr(){return R.join(P(),"env")}function _({force:t=!1}={}){if(_._done&&!t)return _._result||null;_._done=!0;let e={},r=(o,i)=>{if(i==null)return;let s=String(i).trim();s&&(process.env[o]!=null&&String(process.env[o]).trim()!==""||(process.env[o]=s,e[o]=s))};try{let o=sr();if(z.existsSync(o))for(let i of z.readFileSync(o,"utf8").split(/\r?\n/)){let s=i.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 o=ar();if(z.existsSync(o)){let i=JSON.parse(z.readFileSync(o,"utf8"));i&&typeof i=="object"&&(r("ORACLE_DESK_URL",i.deskUrl||i.dataUrl||i.url),r("ORACLE_DATA_URL",i.dataUrl||i.deskUrl||i.url),r("ORACLE_API_URL",i.apiUrl||i.dataUrl||i.deskUrl),r("ORACLE_PUBLIC_URL",i.publicUrl||i.deskUrl||i.dataUrl),r("ORACLE_EXEC_URL",i.execUrl),r("MAD_DESK_URL",i.deskUrl||i.dataUrl))}}catch{}let n=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return n&&(r("ORACLE_DESK_URL",n),r("ORACLE_DATA_URL",n),r("ORACLE_API_URL",n),r("ORACLE_PUBLIC_URL",n),r("MAD_DESK_URL",n)),_._result=Object.keys(e).length?e:null,_._result}var or,ro,ne=l(()=>{or=R.dirname(nr(import.meta.url)),ro=R.resolve(or,"../..");try{_()}catch{}});function V(t){return String(t||"").trim()||void 0}function ur(t,{required:e=!1}={}){let r=V(t)?.toLowerCase();if(!r){if(e)throw new Error("model provider is required");return}if(!cr.has(r))throw new Error(`unsupported provider: ${r}`);return r}function lr(t,{required:e=!1}={}){let r=V(t);if(!r){if(e)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 dr(t){let e=V(t);if(!e||e.length>2048)throw new Error("invalid custom base URL");let r;try{r=new URL(e)}catch{throw new Error("invalid custom base URL")}let n=r.hostname.toLowerCase().replace(/^\[|\]$/g,""),o=n==="localhost"||n==="127.0.0.1"||n==="::1";if(r.protocol!=="https:"&&!(r.protocol==="http:"&&o)||r.username||r.password||r.search||r.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return r.toString().replace(/\/+$/,"")}function Fe({provider:t,model:e,baseUrl:r}={},{requireModel:n=!1}={}){let o=ur(t),i=lr(e,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:dr(r)};if(V(r))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var cr,Me=l(()=>{cr=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","custom","anthropic-oauth","openai-codex","xai-oauth"])});import qe from"node:fs";import fr from"node:path";function mr(){return fr.join(P(),"model.json")}function B(t){return String(t||"").trim()||void 0}function hr(t={}){let e=B(t.backend)?.toLowerCase()||"auto",r=Fe({provider:t.provider,model:t.model,baseUrl:t.baseUrl},{requireModel:e==="standalone"}),n=B(t.apiKeyEnv),o=Number.parseInt(String(t.contextLength||""),10),i=B(t.reasoningEffort),s=B(t.computeHost||t.remoteHost),a=B(t.computeUser||t.remoteUser),u=B(t.computePath||t.remotePath);if(!pr.has(e))throw new Error(`unsupported backend: ${e}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(e))throw new Error("remote compute backends are disabled in the public desktop");if(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))throw new Error("api key env must be an uppercase environment variable name");if(e==="remote"&&!s)throw new Error("remote backend requires computeHost");return{backend:e,...r,...n?{apiKeyEnv:n}:{},...Number.isFinite(o)&&o>0?{contextLength:o}:{},...i?{reasoningEffort:i}:{},...s?{computeHost:s}:{},...a?{computeUser:a}:{},...u?{computePath:u}:{}}}function De(){let t=mr();if(!qe.existsSync(t))return null;try{return hr(JSON.parse(qe.readFileSync(t,"utf8")))}catch{return null}}var pr,Ue=l(()=>{ne();Me();pr=new Set(["auto","standalone","hermes","remote","arch"])});var je=l(()=>{});var H=l(()=>{});var F=l(()=>{});var ie=l(()=>{H();F()});import{isAddress as bo}from"ethers";var ae=l(()=>{ie();H();F()});import{Interface as yr,isAddress as ko}from"ethers";var No,We=l(()=>{ae();H();F();No=new yr(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as br,isAddress as Lo}from"ethers";var Bo,Fo,He=l(()=>{ae();H();F();Bo=new br(["function approve(address spender,uint256 amount) returns (bool)"]),Fo=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var N=l(()=>{});import{Interface as Er,MaxUint256 as Ho,isAddress as Jo,keccak256 as Go,toUtf8Bytes as zo}from"ethers";var Zo,J=l(()=>{je();We();He();N();F();Zo=new Er(["function approve(address spender,uint256 amount) returns (bool)"])});var ti,ri,Je=l(()=>{ti=300*1e3,ri=(()=>{let t=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(t)&&t>0?t:1800*1e3})()});var Y=l(()=>{J()});import{Address as si,NETWORK as ci,OutScript as ui,RawTx as li,SigHash as di,TEST_NETWORK as fi,Transaction as pi}from"@scure/btc-signer";var ue=l(()=>{});import{createHash as Sr}from"node:crypto";import{base58 as gi}from"@scure/base";import{getCompiledTransactionMessageDecoder as bi}from"@solana/transaction-messages";var Ge,Ei,le=l(()=>{Ge=t=>Sr("sha256").update(`global:${t}`).digest().subarray(0,8).toString("hex"),Ei=new Map([[Ge("route"),{name:"route",prefixBytes:0}],[Ge("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});var ze=l(()=>{});var Oi,Ve=l(()=>{ze();Oi=64*1024});var Ke=l(()=>{Ve()});var Ye=l(()=>{Ke()});var Di,Ui,fe=l(()=>{N();Ye();Di=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"}),Ui=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 Hi,pe=l(()=>{N();Hi="0x"+"00".repeat(32)});var Ar,Ki,me=l(()=>{pe();N();Ar=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Ki=Object.freeze(Ar.map(t=>t[0]))});var X=l(()=>{N()});import{Interface as tt}from"ethers";var Or,pa,Nr,ma,ha,wa,ga,Cr,ya,Q=l(()=>{J();ie();Je();Y();ue();le();fe();me();X();Or=new Set(["evm","evm-swap","evm-bridge","evm-nft","btc","sol","hl","poly","lighter"]),pa=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}),Nr=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"}}),ma=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),ha=new tt(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),wa=new tt(["function mintAllowList(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity,(uint80 mintPrice,uint48 maxTotalMintableByWallet,uint48 startTime,uint48 endTime,uint48 dropStageIndex,uint32 maxTokenSupplyForStage,uint16 feeBps,bool restrictFeeRecipients) mintParams,bytes32[] proof) payable"]),ga=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"}}),Cr=Object.freeze([...Or]),ya=Object.freeze({...Nr})});import{encode as xa}from"@msgpack/msgpack";import{keccak256 as Aa,verifyTypedData as va}from"ethers";var ka,Ia,he=l(()=>{ka=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Ia=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var we=l(()=>{X()});import{ed25519 as Ra}from"@noble/curves/ed25519.js";import{base58 as Ba}from"@scure/base";import{RawTx as Ma,SigHash as qa,Transaction as Da}from"@scure/btc-signer";import{Transaction as ja,keccak256 as Wa,verifyTypedData as Ha}from"ethers";var ge=l(()=>{he();we()});import{base58 as Xa}from"@scure/base";var Z=l(()=>{Q();Y();J();ge()});var nt=l(()=>{Z();Q()});var us,ls,ds,ye=l(()=>{us=Object.freeze({N:1<<17,r:8,p:1}),ls=256*1024*1024,ds=16*1024});var ps,ot=l(()=>{ps=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 be}from"node:os";import{join as Ee}from"node:path";var it,_r,gs,at=l(()=>{it=process.env.ORACLE_PUBLIC_DESKTOP==="1",_r=it?process.env.ORACLE_CONFIG_DIR||Ee(be(),".config","oracle"):Ee(be(),".config","oracle"),gs=it?_r:Ee(be(),".config","mad-desk")});var Ss,As,vs,st=l(()=>{at();Ss="0".repeat(64),As=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"}),vs=Promise.resolve()});var ct=l(()=>{st();N();ye();Z()});var ut=l(()=>{});import{Wallet as Rs}from"ethers";import{base58 as Bs}from"@scure/base";import{ed25519 as Ms}from"@noble/curves/ed25519.js";import{NETWORK as Ds,TEST_NETWORK as Us,WIF as js,p2wpkh as Ws}from"@scure/btc-signer";import{pubECDSA as Js}from"@scure/btc-signer/utils.js";var lt=l(()=>{});import x from"node:path";import Br from"node:os";import{createHash as Fr,randomBytes as Ac}from"node:crypto";import{Interface as xe,keccak256 as kc}from"ethers";import{Transaction as Tc}from"@scure/btc-signer";import{ed25519 as Nc}from"@noble/curves/ed25519.js";function dt(t){let e=process.env.ORACLE_SIGNER_STATE_DIR||x.join(process.env.XDG_STATE_HOME||x.join(Br.homedir(),".local","state"),"oracle"),r=Fr("sha256").update(x.resolve(t)).digest("hex").slice(0,16);return{vault:x.join(t,"vault.json"),policy:x.join(t,"signer-policy.json"),policyKey:x.join(t,"policy-integrity-key"),policyAnchor:x.join(e,`signer-policy-${r}.high-water`),ledger:x.join(t,"signer-ledger.json"),ledgerAnchor:x.join(e,`signer-ledger-${r}.high-water`),token:x.join(t,"signer-token"),lock:x.join(e,`signer-${r}.lock`)}}var Xc,Qc,Zc,ft=l(()=>{nt();Z();ye();ot();ct();ut();J();Q();Y();ge();fe();me();X();we();pe();he();ue();le();lt();Xc=new xe(["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"]),Qc=new xe(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),Zc=new xe(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});function pt(t){return qr.get(Number(t))||null}var Mr,qr,mt=l(()=>{Mr={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}},qr=new Map(Object.values(Mr).map(t=>[t.chainId,t]))});function c(t){return h(t)?String(t).replace(Dr,e=>`\\${e}`):p}function h(t){return t==null?!1:typeof t=="number"?Number.isFinite(t):typeof t=="string"?t.trim()!=="":!0}function S(t){if(!h(t))return p;let e=String(t).replace(/`/g,"");return e===""?p:`\`${e}\``}function C(t,{decimals:e=2}={}){if(!h(t))return p;let r=Number(t);return Number.isFinite(r)?r.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:e}):p}function w(t,{decimals:e=2}={}){let r=C(t,{decimals:e});return r===p?p:`${r} USD`}function Se(t,{decimals:e=2}={}){let r=C(t,{decimals:e});return r===p?p:`${r}%`}function ee(t){let e=C(t,{decimals:0});return e===p?p:`${e} bps`}function $(t,e){if(!h(t))return p;let r=Number(e);if(!Number.isInteger(r)||r<0||r>77)return p;let n;try{n=BigInt(typeof t=="string"?t.trim():t)}catch{return p}let o=n<0n,i=o?-n:n,s=10n**BigInt(r),a=(i/s).toString(),u=(i%s).toString().padStart(r,"0").replace(/0+$/,"");return`${o?"-":""}${a}${u?`.${u}`:""}`}function Ur(t){if(typeof t=="number"&&Number.isFinite(t))return t<0||t>1?p:t>=.75?"HIGH":t>=.4?"MEDIUM":"LOW";if(typeof t=="string"){let e=t.trim().toUpperCase();if(e==="HIGH"||e==="MEDIUM"||e==="LOW")return e}return p}function k(t={}){let e=t.chainId;if(!h(e)||!Number.isFinite(Number(e)))return h(t.chain)?c(t.chain):p;let n=pt(e)?.name||(h(t.chain)?String(t.chain):p);return`${c(n)} (chainId ${Number(e)})`}function ht(t={}){return c(t.venue??t.dex??t.pool?.venue)}function jr(t){return t==null?"NONE (text card only)":typeof t=="string"?t.trim()?S(t):"NONE (text card only)":t.error||t.ok===!1||t.available===!1?`UNAVAILABLE${h(t.error)?` \u2014 ${c(t.error)}`:""} (text card stands)`:h(t.url)?S(t.url):"NONE (text card only)"}function Ae(t={},{now:e=Date.now()}={}){let r=t.grant??t.session??null;if(!r||typeof r!="object")return{allowed:!1,reason:"no local grant/session",actions:[]};if(r.local===!1)return{allowed:!1,reason:"grant is not local",actions:[]};if(r.revoked===!0)return{allowed:!1,reason:"grant revoked",actions:[]};let n=r.expiresAt??r.expiry;if(h(n)){let i=typeof n=="number"?n:Date.parse(n);if(!Number.isFinite(i))return{allowed:!1,reason:"grant expiry unreadable",actions:[]};if(i<=e)return{allowed:!1,reason:"grant expired",actions:[]}}return{allowed:!0,reason:"valid local grant",actions:Array.isArray(r.actions)&&r.actions.length?r.actions.slice():["BUY","SELL"]}}function Wr(t){let e=Ae(t);return e.allowed?`${e.actions.map(r=>c(r)).join(" / ")} (${c(e.reason)})`:`prepare-only \u2014 ${c(e.reason)}`}function A(t,e,r={}){let n=[`*${t}*`];for(let[o,i]of e)n.push(`${o}: ${i==null||i===""?p:i}`);return n.push(`Chart: ${jr(r.chart)}`),n.push(`Actions: ${Wr(r)}`),Array.isArray(r.warnings)&&r.warnings.length&&n.push(`Warnings: ${r.warnings.map(o=>c(o)).join("; ")}`),(h(r.source)||h(r.fetchedAt))&&n.push(`Source: ${c(r.source)} at ${c(r.fetchedAt)}`),n.join(`
|
|
3
|
-
`)}function v(t){return["Confidence",Ur(t.confidence)]}function Hr(t){let e=t.quote;if(!e||typeof e!="object")return[];let r=h(e.decimals)?$(e.amountOutRaw??e.out??e.raw,e.decimals):p;return[["Quote out (raw)",S(e.amountOutRaw??e.out??e.raw)],["Quote out",r===p?p:`${c(r)} ${c(e.symbol??"")}`.trim()]]}function wt(t){let e=t.autoSlippage;if(!e||typeof e!="object")return["Auto-slippage",p];let r=ee(e.selectedBps),n=ee(e.capBps);return["Auto-slippage",r===p&&n===p?p:`${r} selected, cap ${n}`]}function Jr(t={}){let e=t||{};return A(`ORACLE TOKEN \u2014 ${c(e.symbol??e.token??e.name)}`,[["Chain",k(e)],["Venue",ht(e)],["Name",c(e.name)],["Address",S(e.address??e.mint??e.contract)],["Price",w(e.priceUsd,{decimals:8})],["Market cap",w(e.marketCapUsd)],["Liquidity",w(e.liquidityUsd)],["Volume 24h",w(e.volume24hUsd)],["Change 24h",Se(e.priceChange24h)],["Fee tier",h(e.feeTier)?`${ee(Number(e.feeTier)/100)} (${C(e.feeTier,{decimals:0})})`:p],["Age",c(e.age)],...Hr(e),wt(e),v(e)],e)}function Gr(t={}){let e=t||{};return A(`ORACLE LAUNCH \u2014 ${c(e.symbol??e.token??e.name)}`,[["Chain",k(e)],["Venue",ht(e)],["Address",S(e.address??e.mint??e.contract)],["Pool",S(e.pool?.address??e.poolAddress??e.pool)],["Liquidity",w(e.liquidityUsd)],["Route ready",c(e.routeReady)],["Sellable",c(e.sellable)],["Sell sim",c(e.sellSimulation??e.sellSim)],["Smart wallets",c(e.smartWalletOverlap)],["Risk",c(e.risk??e.riskStatus)],["Prepared ticket",c(e.preparedTicket??e.ticketStatus)],wt(e),v(e)],e)}function zr(t={}){let e=t||{};return A(`ORACLE HIP-3 \u2014 ${c(e.market??e.coin??e.name)}`,[["Venue",`Hyperliquid builder-dex ${c(e.dex)}`],["Market",c(e.market??e.coin)],["Mark",w(e.markPx,{decimals:6})],["Oracle",w(e.oraclePx,{decimals:6})],["Funding",Se(e.funding,{decimals:6})],["Open interest",w(e.openInterestUsd)],["Depth",c(e.depth)],["Liquidation notes",c(e.liquidationNotes??e.riskNotes)],["Account context",c(e.accountContext)],v(e)],e)}function Vr(t={}){let e=t||{};return A(`ORACLE HIP-4 \u2014 ${c(e.event??e.market??e.name)}`,[["Venue",`Hyperliquid HIP-4 ${c(e.dex??"outcome")}`],["Event",c(e.event)],["Outcome",c(e.outcome)],["Market id",S(e.marketId??e.market)],["Bid",w(e.bid,{decimals:6})],["Ask",w(e.ask,{decimals:6})],["Depth",c(e.depth)],["Edge",Se(e.edge)],["Position",c(e.position)],v(e)],e)}function Kr(t={}){let e=t||{};return A(`ORACLE POLYMARKET \u2014 ${c(e.event??e.market??e.name)}`,[["Venue","Polymarket CLOB"],["Event",c(e.event)],["Market",c(e.market)],["Market id",S(e.marketId??e.conditionId??e.tokenId)],["Yes",w(e.yesPrice,{decimals:4})],["No",w(e.noPrice,{decimals:4})],["Best bid / ask",`${w(e.bestBid,{decimals:4})} / ${w(e.bestAsk,{decimals:4})}`],["Volume",w(e.volumeUsd)],["Resolution risk",c(e.resolutionRisk)],["Order intent",c(e.orderIntent)],v(e)],e)}function Yr(t={}){let e=t||{},r=h(e.completedSplits)&&h(e.totalSplits)?`${C(e.completedSplits,{decimals:0})} / ${C(e.totalSplits,{decimals:0})}`:p;return A(`ORACLE TWAP \u2014 ${c(e.pair??e.symbol??e.name)}`,[["Chain",k(e)],["Side",c(e.side??e.direction)],["Amount",`${c($(e.amountTotal??e.amount,e.decimals??18))} ${c(e.symbol??"")}`.trim()],["Splits",`${C(e.totalSplits,{decimals:0})} over ${c(e.window)}`],["Progress",r],["Avg price",w(e.averagePrice,{decimals:6})],["Next split",c(e.nextSplitAt)],["Slippage cap",ee(e.slippageBps)],["Status",c(e.status)],v(e)],e)}function Xr(t={}){let e=t||{},r=e.approval??e.revokeCheck??{},n=r.needsRevoke&&r.spender?`revoke.cash \u2014 ${c(r.spender)}`:r.needsRevoke===!1?"revoke.cash \u2014 clean":"revoke.cash \u2014 unchecked";return A(`ORACLE BRIDGE \u2014 ${c(e.pair??e.fromSymbol)} \u2192 ${c(e.toSymbol??"")}`.replace(/→ $/,""),[["Bridging","deBridge \xB7 LI.FI \u2014 best route wins"],["From chain",k({chainId:e.fromChainId,chain:e.fromChain})],["To chain",k({chainId:e.toChainId,chain:e.toChain})],["Amount",`${c($(e.amount,e.fromDecimals??18))} ${c(e.fromSymbol??"")}`.trim()],["Best route",c(e.bestRoute??e.winner)],["Est. received",`${c($(e.amountOut,e.toDecimals??18))} ${c(e.toSymbol??"")}`.trim()],["Fee",w(e.feeUsd)],["Est. time",c(e.estimatedTime)],["Revoke check",n],["All providers",c(e.providers?.join(", "))],["Preparable",c(e.preparable)],v(e)],e)}function Qr(t){let r=(Array.isArray(t)?t:[]).slice(1,4).map(n=>{let o=c(n.source??n.venue??n.name),i=n.improvementBps==null&&n.deltaBps==null?null:Number(n.improvementBps??n.deltaBps),s=Number.isFinite(i)?`${Math.abs(i).toFixed(0)} bps behind`:"spread UNKNOWN";return`${o} (${s})`});return r.length?r.join("; "):p}function Zr(t){let e=t.rankedOn??t.swap?.rankedOn??t.best?.rankedOn;return h(e)?c(e):p}function en(t={}){let e=t||{},r=e.swap&&typeof e.swap=="object"?e.swap:e,n=e.bridge&&typeof e.bridge=="object"?e.bridge:null,o=r.best??r.winner??{},i=`${c(e.tokenInSymbol??e.fromSymbol??"IN")} \u2192 ${c(e.tokenOutSymbol??e.toSymbol??"OUT")}`,s=[["Intent",c(e.intent??"swap")],["Chain",k({chainId:e.chainId??r.chainId,chain:e.chain??r.chain})],["Pair",i],["Amount in",`${c($(e.amountIn??r.amountIn,e.decimalsIn??18))} ${c(e.tokenInSymbol??"")}`.trim()],["Best swap",c(o.source??o.venue??r.bestRoute??e.bestRoute)],["Net out",`${c($(o.netOut??o.amountOut??r.amountOut,e.decimalsOut??18))} ${c(e.tokenOutSymbol??"")}`.trim()],["Ranked on",Zr(r)],["Gas accounted",c(o.costAccounted===!0?"yes":o.costAccounted===!1?"no \u2014 gross ranking may flatter this route":null)],["Spread vs next",h(r.improvementBps)?`${c(r.improvementBps)} bps`:p],["Runners-up",Qr(r.routes??e.routes)]];if(n){let a=n.best??n.winner??{};s.push(["Best bridge",c(a.source??n.bestRoute??e.bestBridge)],["Bridge out",`${c($(a.netOut??a.amountOut??n.amountOut,e.bridgeDecimalsOut??e.decimalsOut??18))} ${c(e.bridgeOutSymbol??e.tokenOutSymbol??"")}`.trim()],["Bridge to",k({chainId:n.toChainId??e.toChainId,chain:n.toChain??e.toChain})],["Est. time",c(n.estimatedTime??a.meta?.durationSeconds)])}else s.push(["Best bridge","same-chain \u2014 use Best swap"]);return s.push(["Preparable",c(e.preparable??o.executionReady)],v(e)),A(`ORACLE SWAP \u2014 ${i}`,s,e)}function ve(t={}){let e=t||{};return A("ORACLE APPROVE \u2014 local signer",[["Pending id",S(e.id??(typeof e.digest=="string"?e.digest.slice(0,8):null))],["Surface",c(e.surface)],["Action",c(e.action)],["Chain",k({chainId:e.chain??e.chainId,chain:e.chainName})],["To",S(e.to??e.destination)],["Value",h(e.value)?c(e.value):p],["Signer",c(e.armed===!0?"running + armed":e.armed===!1?"running, disarmed":"not running")],v({confidence:e.confidence??(e.armed===!0?"high":"low")})],e)}function ke({platform:t="telegram",id:e,digest:r,hasGrant:n=!1}={}){let o=String(e||(typeof r=="string"?r.slice(0,8):"")||"").trim();return n?o?String(t)==="telegram"?{kind:"inline_keyboard",replyMarkup:{inline_keyboard:[[{text:"Allow",callback_data:`oracle:approve:${o}`},{text:"Deny",callback_data:`oracle:deny:${o}`}]]},cancelHint:"Allow signs with the local signer. Deny drops the pending artifact."}:{kind:"text_menu",text:["1. Allow \u2014 reply /approve "+o,"2. Deny \u2014 reply /deny "+o].join(`
|
|
4
|
-
`),
|
|
2
|
+
var Ur=Object.defineProperty;var f=(t,e,r)=>()=>{if(r)throw r[0];try{return t&&(e=t(t=0)),e}catch(n){throw r=[n],n}};var _=(t,e)=>{for(var r in e)Ur(t,r,{get:e[r],enumerable:!0})};var tt={};_(tt,{A2ABus:()=>me,normalizeName:()=>z});function z(t){return String(t||"").trim().toLowerCase().replace(/^@/,"")}var me,rt=f(()=>{me=class{constructor({maxHops:e=4,historyCap:r=200}={}){this.maxHops=e,this.historyCap=r,this.agents=new Map,this.history=[],this.seq=0}register(e,{role:r="",chains:n=[],handler:o}={}){let i=z(e);if(!i)throw new Error("a2a: agent name required");if(this.agents.has(i))throw new Error(`a2a: agent '${i}' already registered`);if(typeof o!="function")throw new Error(`a2a: agent '${i}' needs a handler`);return this.agents.set(i,{name:i,role:String(r),chains:n.map(String),handler:o}),this.agents.get(i)}unregister(e){this.agents.delete(z(e))}roster(){return[...this.agents.values()].map(({name:e,role:r,chains:n})=>({name:e,role:r,chains:n}))}async send({from:e,to:r,text:n,kind:o="consult",hops:i=0}={}){let a=z(e),s=z(r);if(!a||!this.agents.has(a))return{ok:!1,error:`a2a: unknown sender '${e}'`};if(!s||!this.agents.has(s))return{ok:!1,error:`a2a: unknown recipient '${r}' (roster: ${[...this.agents.keys()].join(", ")||"empty"})`};if(s===a)return{ok:!1,error:"a2a: self-send refused"};let l=String(n||"").trim().slice(0,8e3);if(!l)return{ok:!1,error:"a2a: empty message"};let c=Number(i)+1;if(c>this.maxHops)return this.record({from:a,to:s,kind:o,dropped:"hop-limit"}),{ok:!1,error:`a2a: hop limit ${this.maxHops} reached \u2014 dropped`};let d={id:`a2a-${Date.now()}-${++this.seq}`,from:a,to:s,kind:String(o),text:l,hops:c,ts:new Date().toISOString()};this.record(d);try{let p=await this.agents.get(s).handler(d);return p&&this.record({id:`${d.id}-reply`,from:s,to:a,kind:"reply",text:String(p).slice(0,8e3),hops:c,ts:new Date().toISOString()}),{ok:!0,reply:p||null,id:d.id}}catch(p){return{ok:!1,error:`a2a: '${s}' handler failed: ${p.message}`}}}record(e){this.history.push(e),this.history.length>this.historyCap&&this.history.splice(0,this.history.length-this.historyCap)}recent(e=20){return this.history.slice(-e)}}});import V from"node:fs";import jr from"node:os";import P from"node:path";import{fileURLToPath as Wr}from"node:url";function he(){return process.env.ORACLE_FAKE_HOME||jr.homedir()}function Gr(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function A(){return Gr()?process.env.ORACLE_CONFIG_DIR||P.join(he(),".config","oracle"):P.join(he(),".config","oracle")}function Jr(){return P.join(A(),"desk.json")}function zr(){return P.join(A(),"env")}function R({force:t=!1}={}){if(R._done&&!t)return R._result||null;R._done=!0;let e={},r=(o,i)=>{if(i==null)return;let a=String(i).trim();a&&(process.env[o]!=null&&String(process.env[o]).trim()!==""||(process.env[o]=a,e[o]=a))};try{let o=zr();if(V.existsSync(o))for(let i of V.readFileSync(o,"utf8").split(/\r?\n/)){let a=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!a||a[2].startsWith("#"))continue;let s=a[2];(s.startsWith('"')&&s.endsWith('"')||s.startsWith("'")&&s.endsWith("'"))&&(s=s.slice(1,-1)),r(a[1],s)}}catch{}try{let o=Jr();if(V.existsSync(o)){let i=JSON.parse(V.readFileSync(o,"utf8"));i&&typeof i=="object"&&(r("ORACLE_DESK_URL",i.deskUrl||i.dataUrl||i.url),r("ORACLE_DATA_URL",i.dataUrl||i.deskUrl||i.url),r("ORACLE_API_URL",i.apiUrl||i.dataUrl||i.deskUrl),r("ORACLE_PUBLIC_URL",i.publicUrl||i.deskUrl||i.dataUrl),r("ORACLE_EXEC_URL",i.execUrl),r("MAD_DESK_URL",i.deskUrl||i.dataUrl))}}catch{}let n=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return n&&(r("ORACLE_DESK_URL",n),r("ORACLE_DATA_URL",n),r("ORACLE_API_URL",n),r("ORACLE_PUBLIC_URL",n),r("MAD_DESK_URL",n)),R._result=Object.keys(e).length?e:null,R._result}function te(t){return V.mkdirSync(t,{recursive:!0}),t}var Hr,ci,re=f(()=>{Hr=P.dirname(Wr(import.meta.url)),ci=P.resolve(Hr,"../..");try{R()}catch{}});function ne(t){return String(t||"").trim()||void 0}function Kr(t,{required:e=!1}={}){let r=ne(t)?.toLowerCase();if(!r){if(e)throw new Error("model provider is required");return}if(!Vr.has(r))throw new Error(`unsupported provider: ${r}`);return r}function Yr(t,{required:e=!1}={}){let r=ne(t);if(!r){if(e)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 Xr(t){let e=ne(t);if(!e||e.length>2048)throw new Error("invalid custom base URL");let r;try{r=new URL(e)}catch{throw new Error("invalid custom base URL")}let n=r.hostname.toLowerCase().replace(/^\[|\]$/g,""),o=n==="localhost"||n==="127.0.0.1"||n==="::1";if(r.protocol!=="https:"&&!(r.protocol==="http:"&&o)||r.username||r.password||r.search||r.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return r.toString().replace(/\/+$/,"")}function nt({provider:t,model:e,baseUrl:r}={},{requireModel:n=!1}={}){let o=Kr(t),i=Yr(e,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:Xr(r)};if(ne(r))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var Vr,ot=f(()=>{Vr=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","custom","anthropic-oauth","openai-codex","xai-oauth"])});import F from"node:fs";import we from"node:path";function it(){return we.join(A(),"model.json")}function B(t){return String(t||"").trim()||void 0}function at(t={}){let e=B(t.backend)?.toLowerCase()||"auto",r=nt({provider:t.provider,model:t.model,baseUrl:t.baseUrl},{requireModel:e==="standalone"}),n=B(t.apiKeyEnv),o=Number.parseInt(String(t.contextLength||""),10),i=B(t.reasoningEffort),a=B(t.computeHost||t.remoteHost),s=B(t.computeUser||t.remoteUser),l=B(t.computePath||t.remotePath);if(!Qr.has(e))throw new Error(`unsupported backend: ${e}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(e))throw new Error("remote compute backends are disabled in the public desktop");if(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))throw new Error("api key env must be an uppercase environment variable name");if(e==="remote"&&!a)throw new Error("remote backend requires computeHost");return{backend:e,...r,...n?{apiKeyEnv:n}:{},...Number.isFinite(o)&&o>0?{contextLength:o}:{},...i?{reasoningEffort:i}:{},...a?{computeHost:a}:{},...s?{computeUser:s}:{},...l?{computePath:l}:{}}}function M(){let t=it();if(!F.existsSync(t))return null;try{return at(JSON.parse(F.readFileSync(t,"utf8")))}catch{return null}}function ge(t){let e=at(t),r=it();te(we.dirname(r)),process.platform!=="win32"&&F.chmodSync(we.dirname(r),448);let n=`${r}.${process.pid}.tmp`;return F.writeFileSync(n,`${JSON.stringify(e,null,2)}
|
|
3
|
+
`,{mode:384}),F.renameSync(n,r),process.platform!=="win32"&&F.chmodSync(r,384),e}var Qr,st=f(()=>{re();ot();Qr=new Set(["auto","standalone","hermes","remote","arch"])});var ct=f(()=>{});var K=f(()=>{});var q=f(()=>{});var be=f(()=>{K();q()});import{isAddress as Ai}from"ethers";var Ee=f(()=>{be();K();q()});import{Interface as tn,isAddress as Oi}from"ethers";var _i,ut=f(()=>{Ee();K();q();_i=new tn(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as rn,isAddress as Bi}from"ethers";var Di,Ui,lt=f(()=>{Ee();K();q();Di=new rn(["function approve(address spender,uint256 amount) returns (bool)"]),Ui=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var N=f(()=>{});import{Interface as nn,MaxUint256 as Vi,isAddress as Ki,keccak256 as Yi,toUtf8Bytes as Xi}from"ethers";var na,Y=f(()=>{ct();ut();lt();N();q();na=new nn(["function approve(address spender,uint256 amount) returns (bool)"])});var ia,aa,dt=f(()=>{ia=300*1e3,aa=(()=>{let t=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(t)&&t>0?t:1800*1e3})()});var ie=f(()=>{Y()});import{Address as da,NETWORK as fa,OutScript as pa,RawTx as ma,SigHash as ha,TEST_NETWORK as wa,Transaction as ga}from"@scure/btc-signer";var Ae=f(()=>{});import{createHash as an}from"node:crypto";import{base58 as xa}from"@scure/base";import{getCompiledTransactionMessageDecoder as Aa}from"@solana/transaction-messages";var ft,va,ve=f(()=>{ft=t=>an("sha256").update(`global:${t}`).digest().subarray(0,8).toString("hex"),va=new Map([[ft("route"),{name:"route",prefixBytes:0}],[ft("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});var pt=f(()=>{});var La,mt=f(()=>{pt();La=64*1024});var ht=f(()=>{mt()});var wt=f(()=>{ht()});var Ha,Ga,Ie=f(()=>{N();wt();Ha=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"}),Ga=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 Va,Te=f(()=>{N();Va="0x"+"00".repeat(32)});var sn,Za,Ce=f(()=>{Te();N();sn=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Za=Object.freeze(sn.map(t=>t[0]))});var ae=f(()=>{N()});import{Interface as xt}from"ethers";var fn,gs,pn,ys,bs,Es,xs,mn,Ss,se=f(()=>{Y();be();dt();ie();Ae();ve();Ie();Ce();ae();fn=new Set(["evm","evm-swap","evm-bridge","evm-nft","btc","sol","hl","poly","lighter"]),gs=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}),pn=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"}}),ys=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),bs=new xt(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Es=new xt(["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"]),xs=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"}}),mn=Object.freeze([...fn]),Ss=Object.freeze({...pn})});import{encode as ks}from"@msgpack/msgpack";import{keccak256 as Ts,verifyTypedData as Cs}from"ethers";var Os,Ns,Oe=f(()=>{Os=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Ns=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var Ne=f(()=>{ae()});import{ed25519 as Ms}from"@noble/curves/ed25519.js";import{base58 as Ds}from"@scure/base";import{RawTx as js,SigHash as Ws,Transaction as Hs}from"@scure/btc-signer";import{Transaction as Js,keccak256 as zs,verifyTypedData as Vs}from"ethers";var $e=f(()=>{Oe();Ne()});import{base58 as tc}from"@scure/base";var ce=f(()=>{se();ie();Y();$e()});var At=f(()=>{ce();se()});var pc,mc,hc,Le=f(()=>{pc=Object.freeze({N:1<<17,r:8,p:1}),mc=256*1024*1024,hc=16*1024});var gc,vt=f(()=>{gc=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 _e}from"node:os";import{join as Re}from"node:path";var kt,gn,xc,It=f(()=>{kt=process.env.ORACLE_PUBLIC_DESKTOP==="1",gn=kt?process.env.ORACLE_CONFIG_DIR||Re(_e(),".config","oracle"):Re(_e(),".config","oracle"),xc=kt?gn:Re(_e(),".config","mad-desk")});var Ic,Tc,Cc,Tt=f(()=>{It();Ic="0".repeat(64),Tc=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"}),Cc=Promise.resolve()});var Ct=f(()=>{Tt();N();Le();ce()});var Ot=f(()=>{});import{Wallet as Mc}from"ethers";import{base58 as Dc}from"@scure/base";import{ed25519 as jc}from"@noble/curves/ed25519.js";import{NETWORK as Hc,TEST_NETWORK as Gc,WIF as Jc,p2wpkh as zc}from"@scure/btc-signer";import{pubECDSA as Kc}from"@scure/btc-signer/utils.js";var Nt=f(()=>{});import x from"node:path";import En from"node:os";import{createHash as xn,randomBytes as Tu}from"node:crypto";import{Interface as Pe,keccak256 as Ou}from"ethers";import{Transaction as $u}from"@scure/btc-signer";import{ed25519 as _u}from"@noble/curves/ed25519.js";function $t(t){let e=process.env.ORACLE_SIGNER_STATE_DIR||x.join(process.env.XDG_STATE_HOME||x.join(En.homedir(),".local","state"),"oracle"),r=xn("sha256").update(x.resolve(t)).digest("hex").slice(0,16);return{vault:x.join(t,"vault.json"),policy:x.join(t,"signer-policy.json"),policyKey:x.join(t,"policy-integrity-key"),policyAnchor:x.join(e,`signer-policy-${r}.high-water`),ledger:x.join(t,"signer-ledger.json"),ledgerAnchor:x.join(e,`signer-ledger-${r}.high-water`),token:x.join(t,"signer-token"),lock:x.join(e,`signer-${r}.lock`)}}var tl,rl,nl,Lt=f(()=>{At();ce();Le();vt();Ct();Ot();Y();se();ie();$e();Ie();Ce();ae();Ne();Te();Oe();Ae();ve();Nt();tl=new Pe(["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"]),rl=new Pe(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),nl=new Pe(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});function _t(t){return An.get(Number(t))||null}var Sn,An,Rt=f(()=>{Sn={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}},An=new Map(Object.values(Sn).map(t=>[t.chainId,t]))});function u(t){return b(t)?String(t).replace(vn,e=>`\\${e}`):m}function b(t){return t==null?!1:typeof t=="number"?Number.isFinite(t):typeof t=="string"?t.trim()!=="":!0}function S(t){if(!b(t))return m;let e=String(t).replace(/`/g,"");return e===""?m:`\`${e}\``}function $(t,{decimals:e=2}={}){if(!b(t))return m;let r=Number(t);return Number.isFinite(r)?r.toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:e}):m}function E(t,{decimals:e=2}={}){let r=$(t,{decimals:e});return r===m?m:`${r} USD`}function Be(t,{decimals:e=2}={}){let r=$(t,{decimals:e});return r===m?m:`${r}%`}function ue(t){let e=$(t,{decimals:0});return e===m?m:`${e} bps`}function L(t,e){if(!b(t))return m;let r=Number(e);if(!Number.isInteger(r)||r<0||r>77)return m;let n;try{n=BigInt(typeof t=="string"?t.trim():t)}catch{return m}let o=n<0n,i=o?-n:n,a=10n**BigInt(r),s=(i/a).toString(),l=(i%a).toString().padStart(r,"0").replace(/0+$/,"");return`${o?"-":""}${s}${l?`.${l}`:""}`}function kn(t){if(typeof t=="number"&&Number.isFinite(t))return t<0||t>1?m:t>=.75?"HIGH":t>=.4?"MEDIUM":"LOW";if(typeof t=="string"){let e=t.trim().toUpperCase();if(e==="HIGH"||e==="MEDIUM"||e==="LOW")return e}return m}function I(t={}){let e=t.chainId;if(!b(e)||!Number.isFinite(Number(e)))return b(t.chain)?u(t.chain):m;let n=_t(e)?.name||(b(t.chain)?String(t.chain):m);return`${u(n)} (chainId ${Number(e)})`}function Pt(t={}){return u(t.venue??t.dex??t.pool?.venue)}function In(t){return t==null?"NONE (text card only)":typeof t=="string"?t.trim()?S(t):"NONE (text card only)":t.error||t.ok===!1||t.available===!1?`UNAVAILABLE${b(t.error)?` \u2014 ${u(t.error)}`:""} (text card stands)`:b(t.url)?S(t.url):"NONE (text card only)"}function Fe(t={},{now:e=Date.now()}={}){let r=t.grant??t.session??null;if(!r||typeof r!="object")return{allowed:!1,reason:"no local grant/session",actions:[]};if(r.local===!1)return{allowed:!1,reason:"grant is not local",actions:[]};if(r.revoked===!0)return{allowed:!1,reason:"grant revoked",actions:[]};let n=r.expiresAt??r.expiry;if(b(n)){let i=typeof n=="number"?n:Date.parse(n);if(!Number.isFinite(i))return{allowed:!1,reason:"grant expiry unreadable",actions:[]};if(i<=e)return{allowed:!1,reason:"grant expired",actions:[]}}return{allowed:!0,reason:"valid local grant",actions:Array.isArray(r.actions)&&r.actions.length?r.actions.slice():["BUY","SELL"]}}function Tn(t){let e=Fe(t);return e.allowed?`${e.actions.map(r=>u(r)).join(" / ")} (${u(e.reason)})`:`prepare-only \u2014 ${u(e.reason)}`}function v(t,e,r={}){let n=[`*${t}*`];for(let[o,i]of e)n.push(`${o}: ${i==null||i===""?m:i}`);return n.push(`Chart: ${In(r.chart)}`),n.push(`Actions: ${Tn(r)}`),Array.isArray(r.warnings)&&r.warnings.length&&n.push(`Warnings: ${r.warnings.map(o=>u(o)).join("; ")}`),(b(r.source)||b(r.fetchedAt))&&n.push(`Source: ${u(r.source)} at ${u(r.fetchedAt)}`),n.join(`
|
|
4
|
+
`)}function k(t){return["Confidence",kn(t.confidence)]}function Cn(t){let e=t.quote;if(!e||typeof e!="object")return[];let r=b(e.decimals)?L(e.amountOutRaw??e.out??e.raw,e.decimals):m;return[["Quote out (raw)",S(e.amountOutRaw??e.out??e.raw)],["Quote out",r===m?m:`${u(r)} ${u(e.symbol??"")}`.trim()]]}function Bt(t){let e=t.autoSlippage;if(!e||typeof e!="object")return["Auto-slippage",m];let r=ue(e.selectedBps),n=ue(e.capBps);return["Auto-slippage",r===m&&n===m?m:`${r} selected, cap ${n}`]}function On(t={}){let e=t||{};return v(`ORACLE TOKEN \u2014 ${u(e.symbol??e.token??e.name)}`,[["Chain",I(e)],["Venue",Pt(e)],["Name",u(e.name)],["Address",S(e.address??e.mint??e.contract)],["Price",E(e.priceUsd,{decimals:8})],["Market cap",E(e.marketCapUsd)],["Liquidity",E(e.liquidityUsd)],["Volume 24h",E(e.volume24hUsd)],["Change 24h",Be(e.priceChange24h)],["Fee tier",b(e.feeTier)?`${ue(Number(e.feeTier)/100)} (${$(e.feeTier,{decimals:0})})`:m],["Age",u(e.age)],...Cn(e),Bt(e),k(e)],e)}function Nn(t={}){let e=t||{};return v(`ORACLE LAUNCH \u2014 ${u(e.symbol??e.token??e.name)}`,[["Chain",I(e)],["Venue",Pt(e)],["Address",S(e.address??e.mint??e.contract)],["Pool",S(e.pool?.address??e.poolAddress??e.pool)],["Liquidity",E(e.liquidityUsd)],["Route ready",u(e.routeReady)],["Sellable",u(e.sellable)],["Sell sim",u(e.sellSimulation??e.sellSim)],["Smart wallets",u(e.smartWalletOverlap)],["Risk",u(e.risk??e.riskStatus)],["Prepared ticket",u(e.preparedTicket??e.ticketStatus)],Bt(e),k(e)],e)}function $n(t={}){let e=t||{};return v(`ORACLE HIP-3 \u2014 ${u(e.market??e.coin??e.name)}`,[["Venue",`Hyperliquid builder-dex ${u(e.dex)}`],["Market",u(e.market??e.coin)],["Mark",E(e.markPx,{decimals:6})],["Oracle",E(e.oraclePx,{decimals:6})],["Funding",Be(e.funding,{decimals:6})],["Open interest",E(e.openInterestUsd)],["Depth",u(e.depth)],["Liquidation notes",u(e.liquidationNotes??e.riskNotes)],["Account context",u(e.accountContext)],k(e)],e)}function Ln(t={}){let e=t||{};return v(`ORACLE HIP-4 \u2014 ${u(e.event??e.market??e.name)}`,[["Venue",`Hyperliquid HIP-4 ${u(e.dex??"outcome")}`],["Event",u(e.event)],["Outcome",u(e.outcome)],["Market id",S(e.marketId??e.market)],["Bid",E(e.bid,{decimals:6})],["Ask",E(e.ask,{decimals:6})],["Depth",u(e.depth)],["Edge",Be(e.edge)],["Position",u(e.position)],k(e)],e)}function _n(t={}){let e=t||{};return v(`ORACLE POLYMARKET \u2014 ${u(e.event??e.market??e.name)}`,[["Venue","Polymarket CLOB"],["Event",u(e.event)],["Market",u(e.market)],["Market id",S(e.marketId??e.conditionId??e.tokenId)],["Yes",E(e.yesPrice,{decimals:4})],["No",E(e.noPrice,{decimals:4})],["Best bid / ask",`${E(e.bestBid,{decimals:4})} / ${E(e.bestAsk,{decimals:4})}`],["Volume",E(e.volumeUsd)],["Resolution risk",u(e.resolutionRisk)],["Order intent",u(e.orderIntent)],k(e)],e)}function Rn(t={}){let e=t||{},r=b(e.completedSplits)&&b(e.totalSplits)?`${$(e.completedSplits,{decimals:0})} / ${$(e.totalSplits,{decimals:0})}`:m;return v(`ORACLE TWAP \u2014 ${u(e.pair??e.symbol??e.name)}`,[["Chain",I(e)],["Side",u(e.side??e.direction)],["Amount",`${u(L(e.amountTotal??e.amount,e.decimals??18))} ${u(e.symbol??"")}`.trim()],["Splits",`${$(e.totalSplits,{decimals:0})} over ${u(e.window)}`],["Progress",r],["Avg price",E(e.averagePrice,{decimals:6})],["Next split",u(e.nextSplitAt)],["Slippage cap",ue(e.slippageBps)],["Status",u(e.status)],k(e)],e)}function Pn(t={}){let e=t||{},r=e.approval??e.revokeCheck??{},n=r.needsRevoke&&r.spender?`revoke.cash \u2014 ${u(r.spender)}`:r.needsRevoke===!1?"revoke.cash \u2014 clean":"revoke.cash \u2014 unchecked";return v(`ORACLE BRIDGE \u2014 ${u(e.pair??e.fromSymbol)} \u2192 ${u(e.toSymbol??"")}`.replace(/→ $/,""),[["Bridging","deBridge \xB7 LI.FI \u2014 best route wins"],["From chain",I({chainId:e.fromChainId,chain:e.fromChain})],["To chain",I({chainId:e.toChainId,chain:e.toChain})],["Amount",`${u(L(e.amount,e.fromDecimals??18))} ${u(e.fromSymbol??"")}`.trim()],["Best route",u(e.bestRoute??e.winner)],["Est. received",`${u(L(e.amountOut,e.toDecimals??18))} ${u(e.toSymbol??"")}`.trim()],["Fee",E(e.feeUsd)],["Est. time",u(e.estimatedTime)],["Revoke check",n],["All providers",u(e.providers?.join(", "))],["Preparable",u(e.preparable)],k(e)],e)}function Bn(t){let r=(Array.isArray(t)?t:[]).slice(1,4).map(n=>{let o=u(n.source??n.venue??n.name),i=n.improvementBps==null&&n.deltaBps==null?null:Number(n.improvementBps??n.deltaBps),a=Number.isFinite(i)?`${Math.abs(i).toFixed(0)} bps behind`:"spread UNKNOWN";return`${o} (${a})`});return r.length?r.join("; "):m}function Fn(t){let e=t.rankedOn??t.swap?.rankedOn??t.best?.rankedOn;return b(e)?u(e):m}function Mn(t={}){let e=t||{},r=e.swap&&typeof e.swap=="object"?e.swap:e,n=e.bridge&&typeof e.bridge=="object"?e.bridge:null,o=r.best??r.winner??{},i=`${u(e.tokenInSymbol??e.fromSymbol??"IN")} \u2192 ${u(e.tokenOutSymbol??e.toSymbol??"OUT")}`,a=[["Intent",u(e.intent??"swap")],["Chain",I({chainId:e.chainId??r.chainId,chain:e.chain??r.chain})],["Pair",i],["Amount in",`${u(L(e.amountIn??r.amountIn,e.decimalsIn??18))} ${u(e.tokenInSymbol??"")}`.trim()],["Best swap",u(o.source??o.venue??r.bestRoute??e.bestRoute)],["Net out",`${u(L(o.netOut??o.amountOut??r.amountOut,e.decimalsOut??18))} ${u(e.tokenOutSymbol??"")}`.trim()],["Ranked on",Fn(r)],["Gas accounted",u(o.costAccounted===!0?"yes":o.costAccounted===!1?"no \u2014 gross ranking may flatter this route":null)],["Spread vs next",b(r.improvementBps)?`${u(r.improvementBps)} bps`:m],["Runners-up",Bn(r.routes??e.routes)]];if(n){let s=n.best??n.winner??{};a.push(["Best bridge",u(s.source??n.bestRoute??e.bestBridge)],["Bridge out",`${u(L(s.netOut??s.amountOut??n.amountOut,e.bridgeDecimalsOut??e.decimalsOut??18))} ${u(e.bridgeOutSymbol??e.tokenOutSymbol??"")}`.trim()],["Bridge to",I({chainId:n.toChainId??e.toChainId,chain:n.toChain??e.toChain})],["Est. time",u(n.estimatedTime??s.meta?.durationSeconds)])}else a.push(["Best bridge","same-chain \u2014 use Best swap"]);return a.push(["Preparable",u(e.preparable??o.executionReady)],k(e)),v(`ORACLE SWAP \u2014 ${i}`,a,e)}function Me(t={}){let e=t||{};return v("ORACLE APPROVE \u2014 local signer",[["Pending id",S(e.id??(typeof e.digest=="string"?e.digest.slice(0,8):null))],["Surface",u(e.surface)],["Action",u(e.action)],["Chain",I({chainId:e.chain??e.chainId,chain:e.chainName})],["To",S(e.to??e.destination)],["Value",b(e.value)?u(e.value):m],["Signer",u(e.armed===!0?"running + armed":e.armed===!1?"running, disarmed":"not running")],k({confidence:e.confidence??(e.armed===!0?"high":"low")})],e)}function qe({platform:t="telegram",id:e,digest:r,hasGrant:n=!1}={}){let o=String(e||(typeof r=="string"?r.slice(0,8):"")||"").trim();return n?o?String(t)==="telegram"?{kind:"inline_keyboard",replyMarkup:{inline_keyboard:[[{text:"Allow",callback_data:`oracle:approve:${o}`},{text:"Deny",callback_data:`oracle:deny:${o}`}]]},cancelHint:"Allow signs with the local signer. Deny drops the pending artifact."}:{kind:"text_menu",text:["1. Allow \u2014 reply /approve "+o,"2. Deny \u2014 reply /deny "+o].join(`
|
|
5
|
+
`),cancelHint:"Cards are not available on this chat. Use /approve or /deny."}:{kind:"text_menu",text:"nothing to approve",cancelHint:""}:String(t)==="telegram"?{kind:"inline_keyboard",replyMarkup:{inline_keyboard:[]},cancelHint:"prepare-only \u2014 no local grant/session"}:{kind:"text_menu",text:"prepare-only \u2014 no local grant/session",cancelHint:""}}var m,sl,vn,cl,Ft=f(()=>{Rt();m="UNKNOWN",sl=Object.freeze(["token","launch","hip3","hip4","polymarket","twap","bridge","swap","approve"]),vn=/[_*[\]`]/g;cl=Object.freeze({token:On,launch:Nn,hip3:$n,hip4:Ln,polymarket:_n,twap:Rn,bridge:Pn,swap:Mn,approve:Me})});import{readFileSync as qn,existsSync as Dn}from"node:fs";import{request as Un}from"node:http";function Wn(t=process.env){let e=String(t.ORACLE_SIGNER_URL||jn).replace(/\/$/,""),r;try{r=new URL(e)}catch{return null}return r.hostname!=="127.0.0.1"&&r.hostname!=="localhost"&&r.hostname!=="::1"?null:r.origin}function Hn(t=process.env){if(t.ORACLE_SIGNER_TOKEN)return String(t.ORACLE_SIGNER_TOKEN);let e=$t(`${A()}/signer`).token;return Dn(e)?qn(e,"utf8").trim():null}function le(t,{method:e="GET",body:r=null,env:n=process.env,timeoutMs:o=4e3}={}){let i=Wn(n),a=Hn(n);return!i||!a?Promise.resolve({ok:!1,error:"local signer is not running"}):new Promise(s=>{let l=new URL(t,i),c=r?Buffer.from(JSON.stringify(r)):null,d=Un({hostname:l.hostname,port:l.port||80,path:l.pathname,method:e,timeout:o,headers:{authorization:`Bearer ${a}`,origin:i,...c?{"content-type":"application/json","content-length":c.length}:{}}},p=>{let h=[];p.on("data",g=>h.push(g)),p.on("end",()=>{let g=Buffer.concat(h).toString("utf8"),y={};try{y=g?JSON.parse(g):{}}catch{y={error:"signer refused"}}s({httpStatus:p.statusCode,...y})})});d.on("timeout",()=>{d.destroy(),s({ok:!1,error:"local signer timed out"})}),d.on("error",()=>s({ok:!1,error:"local signer is not running"})),c&&d.write(c),d.end()})}function De(t){let r=String(t||"").trim().match(/^\/(approve|deny|pending)(?:@[\w_]+)?(?:\s+([0-9a-fA-F]{4,64}))?\s*$/i);return r?{verb:r[1].toLowerCase(),id:r[2]?r[2].toLowerCase():null}:null}function Ue(t,{platform:e,grant:r,armed:n}){if(!t.length)return{text:"No pending local-signer artifacts.",buttons:qe({platform:e,hasGrant:!1})};let o=t[0];return{text:t.map(a=>Me({...a,armed:n,grant:r,confidence:n?"high":"medium"})).join(`
|
|
5
6
|
|
|
6
|
-
`),buttons:
|
|
7
|
-
`),buttons:null}}let
|
|
8
|
-
Tx: \`${
|
|
9
|
-
`)}catch{}}async function
|
|
10
|
-
Update it the same way you installed it \u2014 git pull, or npm install -g @oracle-agent/oracle@latest.`};let o=`${
|
|
11
|
-
`)
|
|
12
|
-
`
|
|
13
|
-
`),
|
|
14
|
-
`)
|
|
7
|
+
`),buttons:qe({platform:e,id:o.id,digest:o.digest,hasGrant:Fe({grant:r}).allowed})}}async function je({platform:t,text:e,grant:r={local:!0},env:n=process.env}={}){let o=De(e);if(!o)return null;let i=String(t)==="telegram";if(i&&o.verb!=="pending"&&!o.id)return{text:"On Telegram, tap Allow or Deny on the approve card. /approve is only for chats without cards.",buttons:null};if(o.verb==="pending"){let d=await le("/pending",{env:n});if(d.ok===!1||d.error)return{text:`Local signer: ${d.error||"not running"}. Start \`oracle signer\` on this machine first.`,buttons:null};let p=Array.isArray(d.items)?d.items:[],h=Ue(p,{platform:t,grant:r,armed:d.armed===!0});if(i)return h;if(!p.length)return{text:"No pending local-signer artifacts. /approve is only needed when cards are unavailable.",buttons:null};let g=p.map(y=>`\u2022 ${y.id} ${y.surface}/${y.action} to ${y.to||"n/a"}`);return g.push("Cards are not available here. Reply /approve <id> or /deny <id>."),{text:g.join(`
|
|
8
|
+
`),buttons:null}}let a=o.verb==="approve"?"/ack":"/deny";if(!o.id)return{text:"Usage: /approve <id> (only when approve cards are not available)",buttons:null};let s=await le(a,{method:"POST",body:{id:o.id},env:n});if(s.httpStatus===404||s.error==="no pending artifact")return{text:"Nothing pending with that id. It may have expired or already been decided.",buttons:null};if(s.ok===!1||s.httpStatus&&s.httpStatus>=400)return{text:`Local signer refused: ${s.error||"not running"}`,buttons:null};if(o.verb==="deny")return{text:`Denied ${s.id||o.id}. Artifact dropped. Nothing signed.`,buttons:null};let l=s.result?.hash||s.result?.txHash||s.result?.transactionHash||s.hash,c=s.id||o.id;return l?{text:`Bought. Local signer executed ${c}.
|
|
9
|
+
Tx: \`${l}\``,buttons:null,executed:!0,hash:l}:{text:`Local signer executed ${c}. Check the signer receipt if no hash was returned.`,buttons:null,executed:!0,result:s.result||null}}async function Mt({platform:t,data:e,grant:r={local:!0},env:n=process.env}={}){let i=String(e||"").match(/^oracle:(approve|deny):([0-9a-fA-F]{4,64})$/i);if(!i)return null;let a=i[1].toLowerCase()==="approve"?"approve":"deny";return je({platform:t,text:`/${a} ${i[2]}`,grant:r,env:n})}var jn,de=f(()=>{re();Lt();Ft();jn="http://127.0.0.1:9462"});import{execFile as Gn}from"node:child_process";import{existsSync as Jn,mkdirSync as zn,readFileSync as qt,realpathSync as Vn,writeFileSync as Kn}from"node:fs";import T from"node:path";import{promisify as Yn}from"node:util";import{fileURLToPath as Dt}from"node:url";function eo(t=import.meta.url){try{let e=Vn(Dt(t)),r=`${T.sep}node_modules${T.sep}`,n=e.lastIndexOf(r);if(n>0)return{root:e.slice(0,n),managed:!0}}catch{}return{root:null,managed:!1}}function He(t=import.meta.url){try{let e=T.dirname(Dt(t));for(let r=0;r<8;r+=1){let n=T.join(e,"package.json");if(Jn(n)){let i=JSON.parse(qt(n,"utf8"));if(i?.name===We&&i.version)return i.version}let o=T.dirname(e);if(o===e)break;e=o}}catch{return null}return null}function to(t,e){let r=i=>String(i).replace(/^v/,"").split("-")[0].split(".").map(a=>Number.parseInt(a,10)||0),n=r(t),o=r(e);for(let i=0;i<Math.max(n.length,o.length);i+=1){let a=n[i]??0,s=o[i]??0;if(a>s)return 1;if(a<s)return-1}return 0}function Ut(t){let e=t?.stateDir||T.join(process.env.HOME||".",".oracle");return T.join(e,"update-check.json")}function ro(t){try{return JSON.parse(qt(Ut(t),"utf8"))}catch{return null}}function no(t,e){try{let r=Ut(t);zn(T.dirname(r),{recursive:!0}),Kn(r,`${JSON.stringify(e,null,2)}
|
|
10
|
+
`)}catch{}}async function oo({timeoutMs:t=4e3}={}){try{let e=new AbortController,r=setTimeout(()=>e.abort(),t),n=await fetch(`${Qn}/${encodeURIComponent(We)}/latest`,{signal:e.signal});return clearTimeout(r),n.ok&&(await n.json())?.version||null}catch{return null}}async function jt({paths:t,force:e=!1,timeoutMs:r=4e3}={}){let n=He(),o=e?null:ro(t),a=o&&Date.now()-(o.checkedAt||0)<Zn?o.latest:null;return a||(a=await oo({timeoutMs:r}),a&&no(t,{latest:a,checkedAt:Date.now()})),!n||!a?{current:n,latest:a,updateAvailable:!1,checked:!!a}:{current:n,latest:a,updateAvailable:to(a,n)>0,checked:!0}}async function Wt({version:t="latest",dryRun:e=!1}={}){let{root:r,managed:n}=eo();if(!n||!r)return{ok:!1,reason:"unmanaged",message:`oracle is not running from a resolvable node_modules tree (source checkout or linked dev install).
|
|
11
|
+
Update it the same way you installed it \u2014 git pull, or npm install -g @oracle-agent/oracle@latest.`};let o=`${We}@${t}`,i=["install","--prefix",r,"--no-audit","--no-fund",o];if(e)return{ok:!0,dryRun:!0,root:r,command:`npm ${i.join(" ")}`};try{let{stdout:a,stderr:s}=await Xn("npm",i,{timeout:3e5,maxBuffer:16777216});return{ok:!0,root:r,stdout:a,stderr:s}}catch(a){return{ok:!1,reason:"npm-failed",root:r,message:a?.stderr||a?.message||"npm install failed"}}}var Xn,We,Qn,Zn,Ht=f(()=>{Xn=Yn(Gn),We="@oracle-agent/oracle",Qn="https://registry.npmjs.org",Zn=1440*60*1e3});import io from"node:fs";import ao from"node:os";import Gt from"node:path";function D(t){return String(t||"").trim().toLowerCase().replace(/^\/+/,"").replace(/\s+/g,"-")}function so(){let t=process.env.ORACLE_CONFIG_DIR||Gt.join(ao.homedir(),".config","oracle");return Gt.join(t,"chains.json")}function co(t){if(!t||typeof t!="object")return null;let e=String(t.key??"").trim();if(!e||/[/\\.]/.test(e))return null;let r=D(e);if(!zt.test(r))return null;let n=typeof t.chainId=="string"?t.chainId.trim():Number(t.chainId);if(n===""||n===null||n===void 0||typeof n=="number"&&!Number.isFinite(n))return null;let o=typeof t.agent=="string"&&zt.test(t.agent.trim())?t.agent.trim():"oracle";return{key:r,aliases:Array.isArray(t.aliases)?t.aliases.map(D).filter(Boolean).slice(0,8):[],chainId:n,name:String(t.name||r).slice(0,60),kind:["evm","svm","utxo","venue"].includes(t.kind)?t.kind:"evm",family:D(t.family)||r,agent:o,note:String(t.note||"user-defined").slice(0,80),build:t.build!==!1,source:"user"}}function uo(t=io.readFileSync){try{let e=JSON.parse(t(so(),"utf8")),r=Array.isArray(e?.chains)?e.chains:[],n=[],o=new Set;for(let i of r){let a=co(i);!a||o.has(a.key)||(o.add(a.key),n.push(a))}return n}catch{return[]}}function Vt(){let t=uo();if(t.length===0)return Jt;let e=new Map(Jt.map(r=>[r.key,r]));for(let r of t)e.set(r.key,r);return[...e.values()]}function lo({buildOnly:t=!1}={}){return Vt().filter(e=>t?e.build:!0)}function X(t){let e=D(t);if(!e)return null;for(let r of Vt())if(r.key===e||String(r.chainId).toLowerCase()===e||(r.aliases||[]).map(D).includes(e)||D(r.name)===e)return r;return null}function Kt({selectedKey:t=null,buildOnly:e=!1}={}){let r=lo({buildOnly:e}),n=["oracle chains","","pick a build/trade surface:",""];for(let o of r){let i=t&&t===o.key?"*":" ",a=String(o.chainId).padEnd(6),s=o.key.padEnd(12);n.push(`${i} ${s} ${a} ${o.note}`)}return n.push(""),n.push("usage:"),n.push(" /chain list"),n.push(" /chain hyperliquid select"),n.push(" /chain show current"),n.push(" /chain clear unset"),n.push(" oracle chain use base same from shell"),t&&n.push("",`active: ${t}`),n.join(`
|
|
12
|
+
`)+`
|
|
13
|
+
`}var Jt,zt,Ge=f(()=>{Jt=Object.freeze([{key:"hyperliquid",aliases:["hl","hyperevm","hype","999"],chainId:999,name:"hyperliquid",kind:"evm",family:"hyperliquid",agent:"hyperliquid-agent",note:"perps \xB7 hip-3/4 \xB7 hyperevm 999",build:!0},{key:"ethereum",aliases:["eth","mainnet","1"],chainId:1,name:"ethereum",kind:"evm",family:"evm",agent:"oracle",note:"l1 \xB7 bridge hub",build:!0},{key:"base",aliases:["8453"],chainId:8453,name:"base",kind:"evm",family:"evm",agent:"oracle",note:"evm l2",build:!0},{key:"arbitrum",aliases:["arb","42161"],chainId:42161,name:"arbitrum",kind:"evm",family:"evm",agent:"oracle",note:"evm l2",build:!0},{key:"optimism",aliases:["op","10"],chainId:10,name:"optimism",kind:"evm",family:"evm",agent:"oracle",note:"op mainnet",build:!0},{key:"polygon",aliases:["matic","137"],chainId:137,name:"polygon",kind:"evm",family:"evm",agent:"oracle",note:"evm l2",build:!0},{key:"bsc",aliases:["bnb","56"],chainId:56,name:"bnb chain",kind:"evm",family:"evm",agent:"oracle",note:"bsc",build:!0},{key:"avalanche",aliases:["avax","43114"],chainId:43114,name:"avalanche",kind:"evm",family:"evm",agent:"oracle",note:"c-chain",build:!0},{key:"abstract",aliases:["abs","2741"],chainId:2741,name:"abstract",kind:"evm",family:"evm",agent:"oracle",note:"open / add agent",build:!0},{key:"stable",aliases:["988"],chainId:988,name:"stable",kind:"evm",family:"stable",agent:"stable-agent",note:"usdt0 gas \xB7 stable agent",build:!0},{key:"robinhood",aliases:["rh","4663"],chainId:4663,name:"robinhood",kind:"evm",family:"robinhood",agent:"robinhood-agent",note:"rh chain 4663",build:!0},{key:"solana",aliases:["sol"],chainId:"SOL",name:"solana",kind:"svm",family:"solana",agent:"solana-agent",note:"jup \xB7 nfts \xB7 dexs",build:!0},{key:"bitcoin",aliases:["btc"],chainId:"BTC",name:"bitcoin",kind:"utxo",family:"bitcoin",agent:"bitcoin-agent",note:"ord \xB7 runes \xB7 l1",build:!0},{key:"polymarket",aliases:["poly","polygon-poly"],chainId:137,name:"polymarket",kind:"venue",family:"polymarket",agent:"polymarket-agent",note:"prediction markets (polygon venue)",build:!1}]);zt=/^[a-z0-9][a-z0-9-]*$/});import Je from"node:fs";import fo from"node:path";function Yt(){return fo.join(A(),"active-chain.json")}function ze(){let t=Yt();if(!Je.existsSync(t))return null;try{let e=JSON.parse(Je.readFileSync(t,"utf8"));if(!e||typeof e!="object"||!e.key)return null;let r=X(e.key);return r?{key:r.key,chainId:r.chainId,name:r.name,agent:r.agent,selectedAt:e.selectedAt||null}:null}catch{return null}}function Xt(t){let e=X(t);if(!e){let n=new Error(`unknown chain '${t}'`);throw n.code="UNKNOWN_CHAIN",n}te(A());let r={key:e.key,chainId:e.chainId,name:e.name,agent:e.agent,selectedAt:new Date().toISOString()};return Je.writeFileSync(Yt(),JSON.stringify(r,null,2)+`
|
|
14
|
+
`,{mode:384}),r}var Qt=f(()=>{Ge();re()});var xr={};_(xr,{NON_OWNER_REPLY:()=>j,buildPersona:()=>W,handleSelfUpdate:()=>ir,isForwarded:()=>ar,isOwnerSender:()=>U,ownerIdsFor:()=>nr,parseGatewayChainCommand:()=>hr,parseGatewayCompactCommand:()=>mr,parseGatewayEffortCommand:()=>lr,parseGatewayGoalCommand:()=>pr,parseGatewayHelpCommand:()=>dr,parseGatewayModelCommand:()=>ur,parseGatewaySetupModelCommand:()=>vo,parseGatewayStatusCommand:()=>fr,parsePeerAsk:()=>gr,parseSelfUpdate:()=>or,resolveBackendArgv:()=>yr,resolveGatewayModel:()=>sr,resolveOracleBin:()=>rr,routePeerConsult:()=>Q,routeToAgent:()=>C});import{spawn as tr}from"node:child_process";import{dirname as po,join as Ke}from"node:path";import{homedir as mo}from"node:os";import{mkdirSync as ho,readFileSync as wo,writeFileSync as go,unlinkSync as yo}from"node:fs";import{fileURLToPath as bo}from"node:url";function rr({env:t=process.env,moduleUrl:e=import.meta.url}={}){return t.ORACLE_CLI_ENTRY||Ke(po(bo(e)),"oracle.mjs")}function nr(t,e=process.env){let r=String(e[`ORACLE_OWNER_${String(t).toUpperCase()}`]||""),n=String(e.ORACLE_OWNER_IDS||"");return new Set(`${r},${n}`.split(",").map(o=>o.trim()).filter(Boolean))}function U({platform:t,senderId:e,extraOwners:r},n=process.env){let o=String(e||"").trim();return o?nr(t,n).has(o)?!0:Array.isArray(r)?r.map(i=>String(i).trim()).filter(Boolean).includes(o):!1:!1}function or(t){let e=String(t||"").trim();if(!e)return null;let r=e.replace(/^\/update(?:@[\w_]+)?\b/i,"update");return/^(?:oracle\s+)?update\s+--check\s*$/i.test(r)?{checkOnly:!0}:/^(?:oracle\s+)?update\s*$/i.test(r)?{checkOnly:!1}:null}async function ir(t,{check:e=jt,update:r=Wt,versionOf:n=He}={}){let o=await e({force:!0});if(t.checkOnly)return o.checked?o.updateAvailable?`oracle ${o.current} \u2192 ${o.latest} available. Send /update to install.`:`oracle ${o.current} is up to date`:`oracle ${o.current||"?"} \u2014 could not reach npm`;if(o.checked&&!o.updateAvailable)return`oracle ${o.current} is already up to date`;let i=o.latest||"latest",a=await r({version:i==="latest"?"latest":i});if(!a.ok)return`oracle update failed: ${a.message}`;let s=n();return[`oracle ${o.current||"?"} \u2192 ${s||i}`,"Restart the gateway to load it: oracle gateway"].join(`
|
|
15
|
+
`)}function ar(t={}){return!!(t.forwarded||t.forward_from||t.forward_from_chat||t.forward_origin||t.forward_sender_name||t.forward_date)}function sr({readConfig:t=M}={}){let e=t();return e?e.backend==="hermes"?{ok:!1,error:"model config delegates to hermes; the gateway runs Oracle's native loop. Set a standalone backend: oracle model --backend standalone"}:e.model?{ok:!0,provider:e.provider,model:e.model,reasoningEffort:e.reasoningEffort||null}:{ok:!1,error:"model config has no model \u2014 run: oracle model --backend standalone --provider <p> --model <m>"}:{ok:!1,error:"gateway has no model configured \u2014 run: oracle model --backend standalone --provider <p> --model <m>"}}function ur(t){let r=String(t||"").trim().match(/^\/model(?:\s+(.+))?$/i);if(!r)return null;let n=String(r[1]||"").trim();if(!n)return{action:"list"};if(n.toLowerCase()==="show"||n==="?")return{action:"show"};if(n.toLowerCase()==="list")return{action:"list"};let o=n.split(/\s+/),i=cr[o[0].toLowerCase()];if(i&&o.length===1)return{action:"set",provider:i.provider,model:i.model};if(i&&o.length>=2)return{action:"set",provider:i.provider,model:o.slice(1).join(" ")};if(o.length>=2)return{action:"set",provider:o[0],model:o.slice(1).join(" ")};if(o[0]?.includes(":")){let[a,s]=o[0].split(":");if(a&&s)return{action:"set",provider:a,model:s}}return{action:"usage"}}function lr(t){let r=String(t||"").trim().match(/^\/(?:effort|reasoning)(?:\s+(.+))?$/i);if(!r)return null;let n=String(r[1]||"").trim().toLowerCase();return!n||n==="show"||n==="?"?{action:"show"}:xo.includes(n)?{action:"set",reasoningEffort:n}:{action:"usage"}}function So({provider:t,model:e}){let r=M()||{},n=ge({...r,backend:r.backend&&r.backend!=="auto"?r.backend:"standalone",provider:t,model:e});return`model ${n.provider} / ${n.model}
|
|
16
|
+
Oracle persona unchanged. Native harness only \u2014 Hermes Telegram uses its own /model.`}function Ao(t){let e=M();if(!e)throw new Error("no model configured \u2014 run /model first");return`effort ${ge({...e,reasoningEffort:t}).reasoningEffort||t}
|
|
17
|
+
Native harness only.`}function Zt(){let t=M(),e=["Oracle native models (tap /model <id> to switch):"];for(let[r,n]of Object.entries(cr)){let o=t?.provider===n.provider&&t?.model===n.model?" \u2190 current":"";e.push(`/model ${r} ${n.provider} / ${n.model}${o}`)}return e.push(""),e.push("Add another provider: /setup model"),e.push("Or set exact id: /model <provider> <model-id>"),e.push("/effort low|medium|high"),t?.provider&&(e.push(""),e.push(`current ${t.provider} / ${t.model||"unset"} \xB7 effort ${t.reasoningEffort||"default"}`)),e.join(`
|
|
18
|
+
`)}function Ve(){let t=M();return t?[`backend ${t.backend||"auto"}`,`provider ${t.provider||"unset"}`,`model ${t.model||"unset"}`,`effort ${t.reasoningEffort||"default"}`,"Aliases: claude, codex, grok, openrouter, nous, qwen, glm, deepseek, gemini, kimi, mistral","/effort low|medium|high"].join(`
|
|
19
|
+
`):["No standalone model configured.","Use /model openrouter","or /model qwen","or /model glm","or /model nous","or /model <provider> <model-id>"].join(`
|
|
20
|
+
`)}function vo(t){let r=String(t||"").trim().match(/^\/setup(?:\s+model(?:\s+(.+))?)?$/i);if(!r)return null;let n=String(r[1]||"").trim();return n?{action:"hint",provider:n.split(/\s+/)[0]}:{action:"menu"}}function dr(t){let e=String(t||"").trim();return/^\/(?:help|commands|\?)$/i.test(e)?{action:"help"}:null}function fr(t){let e=String(t||"").trim();return/^\/(?:status|usage)$/i.test(e)?{action:"status"}:null}function pr(t){let r=String(t||"").trim().match(/^\/goal(?:\s+(.+))?$/i);if(!r)return null;let n=String(r[1]||"").trim();return!n||n.toLowerCase()==="show"?{action:"show"}:/^(clear|done|complete)$/i.test(n)?{action:"clear"}:{action:"set",goal:n}}function mr(t){let r=String(t||"").trim().match(/^\/(?:compact|compress)(?:\s+(.+))?$/i);return r?{action:"compact",focus:String(r[1]||"").trim()}:null}function hr(t){let r=String(t||"").trim().match(/^\/chain(?:\s+(.+))?$/i);if(!r)return null;let n=String(r[1]||"").trim();return!n||n.toLowerCase()==="list"?{action:"list"}:{action:"set",chain:n}}function Xe(){return Ke(Ye,"gateway-goal.json")}function wr(){try{let t=JSON.parse(wo(Xe(),"utf8"));return t&&typeof t.goal=="string"?t:null}catch{return null}}function ko(t){ho(Ye,{recursive:!0,mode:448});let e={schemaVersion:1,goal:String(t),updatedAt:new Date().toISOString()};return go(Xe(),`${JSON.stringify(e,null,2)}
|
|
21
|
+
`,{mode:384}),e}function Io(){try{yo(Xe())}catch{}}function To(){return["Oracle native Telegram \u2014 owner commands","","Start here","/help this list","/commands same as /help","/status model, effort, chain, goal","","Models (like TUI /model)","/model list models you can use now","/model <id> switch: openrouter, nous, qwen, glm, claude, codex, grok, deepseek, gemini, kimi, mistral","/model <provider> <id> set an exact model id","/setup model how to add OpenRouter, Nous Portal, Qwen, GLM, ...","/setup model <id> TTY command to add that provider (never paste keys here)","/effort show current reasoning effort","/effort low|medium|high set effort like Hermes","","Session (like TUI / Hermes)","/goal show pinned objective","/goal <text> pin the session objective","/goal clear clear the objective","/compact [focus] compact context","/compress [focus] alias for /compact","/chain list working chains","/chain <name> switch chain","","Trading / signer","/update install latest Oracle","/approve Allow pending local-signer action","/deny Deny pending local-signer action","","Do not paste API keys into Telegram. Hermes Telegram keeps its own /model."].join(`
|
|
22
|
+
`)}function Co(){let t=Ve(),e=ze(),r=wr();return[t,`chain ${e?.key||e?.name||"default"}`,`goal ${r?.goal||"unset"}`].join(`
|
|
23
|
+
`)}function gr(t){let e=String(t||"").trim();if(!e)return null;let r=e.match(/^\/ask(?:@[\w_]+)?\s+([\w-]+)\s+([\s\S]+)$/i);return r||(r=e.match(/^@([\w-]+)\s+([\s\S]+)$/)),r?{peer:r[1].toLowerCase(),text:r[2].trim()}:null}function W(t={}){let e=[];return t.role&&e.push(String(t.role)),Array.isArray(t.chains)&&t.chains.length&&e.push(`chains: ${t.chains.join(", ")}`),t.persona&&e.push(String(t.persona)),e.join(" \xB7 ")}function yr(t,e,{profile:r}={}){let n=String(t||"oracle").toLowerCase(),o=String(e||"");if(n==="oracle")return{ok:!0,bin:null,args:["chat","-q",o]};if(n==="grok")return{ok:!0,bin:"grok",args:["-p",o]};if(n==="hermes"){let i=[];return r&&i.push("-p",String(r)),i.push("-z",o),{ok:!0,bin:"hermes",args:i}}return n==="claude"?{ok:!0,bin:"claude",args:["-p",o]}:{ok:!1,error:`unknown backend '${t}' (allowed: oracle, grok, hermes, claude)`}}async function Q({from:t,text:e,persona:r="",backend:n,profile:o}={}){let i=[`[a2a consult from agent '${t}' \u2014 answer with information only; do not prepare, arm, or execute anything]`,r?`[your role: ${r}]`:"",String(e||"").trim()].filter(Boolean).join(`
|
|
24
|
+
`);return Er({text:i,backend:n,profile:o,unconfiguredPrefix:"unconfigured: "})}async function C({platform:t,chatId:e,senderId:r,text:n,userName:o,meta:i={},updater:a,extraOwners:s,bus:l,agentName:c,persona:d,backend:p,profile:h}={}){if(!U({platform:t,senderId:r,extraOwners:s}))return process.stderr.write(`gateway: denied non-owner sender ${t}:${String(r||"unknown")}
|
|
25
|
+
`),j;if(ar(i))return process.stderr.write(`gateway: dropped forwarded message on ${t}
|
|
26
|
+
`),null;let g=or(n);if(g)return ir(g,a);let y=ur(n);if(y)try{return y.action==="list"?Zt():y.action==="show"?Ve():y.action==="usage"?Zt():So(y)}catch(w){return`model not saved: ${w.message}`}let Z=lr(n);if(Z)try{return Z.action==="show"?Ve():Z.action==="usage"?"usage: /effort low|medium|high":Ao(Z.reasoningEffort)}catch(w){return`effort not saved: ${w.message}`}if(dr(n))return To();if(fr(n))return Co();let G=pr(n);if(G){if(G.action==="show"){let w=wr();return w?.goal?`goal ${w.goal}`:"goal unset \u2014 /goal <objective>"}return G.action==="clear"?(Io(),"goal cleared"):(ko(G.goal),`goal pinned: ${G.goal}`)}let pe=mr(n);if(pe){let w=pe.focus?` Focus: ${pe.focus}.`:"";return er({platform:t,chatId:e,senderId:r,text:`Compact this session context now.${w} Summarize older turns, keep the current goal, model, chain, and any pending unsigned prepare artifacts. Do not sign or broadcast.`,userName:o,persona:d,backend:p,profile:h})}let ee=hr(n);if(ee){if(ee.action==="list")return Kt({selectedKey:ze()?.key||null});let w=X(ee.chain);return w?(Xt(w.key),`chain ${w.key}`):`unknown chain '${ee.chain}' \u2014 /chain list`}if(De(n)){let w=await je({platform:t,text:n,grant:{local:!0}});return w?w.buttons?.kind==="inline_keyboard"?{text:w.text,replyMarkup:w.buttons.replyMarkup}:w.text:null}if(l){let w=gr(n);if(w){let O=await l.send({from:c||"oracle",to:w.peer,text:w.text,kind:"consult"});return O.ok?O.reply?`[${w.peer}] ${O.reply}`:`[${w.peer}] (no reply)`:O.error}if(/^\/(agents|roster)\b/i.test(String(n||"").trim())){let O=l.roster().map(J=>`\u2022 ${J.name}${J.role?` \u2014 ${J.role}`:""}${J.chains.length?` (${J.chains.join(", ")})`:""}`);return O.length?`Agents on the bus:
|
|
15
27
|
${O.join(`
|
|
16
|
-
`)}`:"No peer agents registered."}}let
|
|
17
|
-
${t}`:t;return
|
|
18
|
-
Sign and broadcast from your own wallet.`:t.quote?`\u{1F4B1} ${t.quote}`:t.portfolio?`\u{1F4CA} ${t.portfolio}`:JSON.stringify(t,null,2)}var
|
|
19
|
-
`),await
|
|
20
|
-
`)}}),await n.login(t.token),{platform:"discord",name:o,client:n}}var
|
|
28
|
+
`)}`:"No peer agents registered."}}let Dr=n.toLowerCase().trim();return/\b(buy|sell|swap|bridge|send|transfer|balance|portfolio|watch|quote|price)\b/.test(Dr)?No({platform:t,chatId:e,senderId:r,text:n,userName:o}):er({platform:t,chatId:e,senderId:r,text:n,userName:o,persona:d,backend:p,profile:h})}function br(t,{timeout:e=12e4}={}){return new Promise(r=>{let n=tr(process.execPath,[Eo,...t],{stdio:["ignore","pipe","pipe"],timeout:e,env:{...process.env,ORACLE_CONFIG_DIR:Ye}}),o="",i="";n.stdout.on("data",a=>o+=a.toString()),n.stderr.on("data",a=>i+=a.toString()),n.on("close",a=>r({code:a,out:o.trim(),err:i.trim()}))})}function Oo(t,e,{timeout:r=18e4}={}){return new Promise(n=>{let o=tr(t,e,{stdio:["ignore","pipe","pipe"],timeout:r,env:{...process.env}}),i="",a="";o.on("error",s=>n({code:127,out:"",err:String(s.message)})),o.stdout.on("data",s=>i+=s.toString()),o.stderr.on("data",s=>a+=s.toString()),o.on("close",s=>n({code:s,out:i.trim(),err:a.trim()}))})}async function No({text:t}){let e=await br(["route","swap","--text",t],{timeout:3e4});if(e.code===0&&e.out)try{return $o(JSON.parse(e.out))}catch{return e.out}return`Trade routing failed. Try: \`${t}\` again.`}async function er({text:t,persona:e,backend:r,profile:n}){let o=e?`[your role: ${e}]
|
|
29
|
+
${t}`:t;return Er({text:o,backend:r,profile:n,unconfiguredPrefix:"Oracle is not configured yet: "})}async function Er({text:t,backend:e,profile:r,unconfiguredPrefix:n}){let o=yr(e,t,{profile:r});if(!o.ok)return`${n}${o.error}`;if(!o.bin){let a=sr();if(!a.ok)return`${n}${a.error}`;let s=await br(o.args);return s.code===0&&s.out?s.out:s.err||"Oracle could not answer that. Try again."}let i=await Oo(o.bin,o.args);return i.code===0&&i.out?i.out:/ENOENT/.test(i.err)?`${n}backend '${o.bin}' is not installed on this machine`:i.err||`${o.bin} could not answer that. Try again.`}function $o(t){return t.error?`\u274C ${t.error}`:t.tx?`\u2705 Trade prepared: \`${t.tx.slice(0,20)}...\`
|
|
30
|
+
Sign and broadcast from your own wallet.`:t.quote?`\u{1F4B1} ${t.quote}`:t.portfolio?`\u{1F4CA} ${t.portfolio}`:JSON.stringify(t,null,2)}var Ye,Eo,j,cr,xo,H=f(()=>{st();de();Ht();Ge();Qt();Ye=process.env.ORACLE_CONFIG_DIR||Ke(mo(),".config","oracle");Eo=rr();j="Oracle is self-hostable. Install your own instance: npm install -g @oracle-agent/oracle";cr=Object.freeze({claude:{provider:"anthropic-oauth",model:"claude-sonnet-4-20250514"},anthropic:{provider:"anthropic",model:"claude-sonnet-4-6"},codex:{provider:"openai-codex",model:"gpt-5.4"},openai:{provider:"openai",model:"gpt-4.1-mini"},grok:{provider:"xai-oauth",model:"grok-4.6"},xai:{provider:"xai",model:"grok-4.6"},openrouter:{provider:"openrouter",model:"openrouter/auto"},nous:{provider:"nous",model:"moonshotai/kimi-k3"},deepseek:{provider:"deepseek",model:"deepseek-chat"},gemini:{provider:"gemini",model:"gemini-2.5-flash"},kimi:{provider:"kimi",model:"kimi-k3"},mistral:{provider:"mistral",model:"mistral-large-latest"},qwen:{provider:"qwen",model:"qwen-plus"},glm:{provider:"glm",model:"glm-4.5"}}),xo=Object.freeze(["low","medium","high"])});function _o(t,e){let r=new Set,n=[];for(let o of Array.isArray(t)?t:[]){let i=typeof o?.digest=="string"?o.digest:null;i&&(r.add(i),e.has(i)||n.push(o))}e.clear();for(let o of r)e.add(o);return n}function Sr({onNew:t,intervalMs:e=Lo,env:r=process.env,signerCall:n=le,setIntervalFn:o=setInterval,clearIntervalFn:i=clearInterval}={}){if(typeof t!="function")throw new Error("pending-watch: onNew callback required");let a=new Set,s=!1,l=!1;async function c(){if(!l){l=!0;try{let p=await n("/pending",{env:r});if(!p||p.ok===!1||p.error||!Array.isArray(p.items))return;let h=_o(p.items,a);if(!s){s=!0;return}if(h.length===0)return;try{await t(h,{armed:p.armed===!0})}catch{}}catch{}finally{l=!1}}}let d=o(c,e);return typeof d?.unref=="function"&&d.unref(),{stop(){i(d)},tick:c}}var Lo,Ar=f(()=>{de();Lo=4e3});var Ir={};_(Ir,{buildPersona:()=>W,telegram:()=>Ro,telegramPendingRecipients:()=>kr});function kr({extraOwners:t,env:e=process.env}={}){let r=String(e.ORACLE_OWNER_TELEGRAM||"").split(",").map(o=>o.trim()).filter(Boolean),n=Array.isArray(t)?t.map(o=>String(o).trim()):[];return[...new Set([...r,...n])].filter(o=>/^\d+$/.test(o))}function vr(t,e){if(!e)return;if(typeof e=="string")return t.reply(e,{parse_mode:"Markdown"});let r=e.replyMarkup?{reply_markup:e.replyMarkup}:{};return t.reply(e.text,{parse_mode:"Markdown",...r})}async function Ro(t){let{Bot:e}=await import("grammy"),r=new e(t.token),n=String(t.name||"oracle").toLowerCase(),o=W(t),i=Array.isArray(t.owners)?t.owners:void 0,a=t.bus;a&&a.register(n,{role:t.role||"",chains:t.chains||[],handler:c=>Q({from:c.from,text:c.text,persona:o,backend:t.backend,profile:t.hermesProfile})}),r.command("start",c=>{let d=String(c.from?.id||c.chat.id);return U({platform:"telegram",senderId:d,extraOwners:i})?c.reply(`${n} ready. /help lists every native command. /model lists models. /setup model adds OpenRouter, Nous Portal, Qwen, GLM. /effort sets reasoning. /update installs latest.${a?" /agents lists peers.":""}`):c.reply(j)}),r.command("update",async c=>{let d=String(c.from?.id||c.chat.id),p=String(c.chat.id);if(!U({platform:"telegram",senderId:d,extraOwners:i}))return c.reply(j);if(c.message.forward_origin||c.message.forward_from||c.message.forward_date)return;c.replyWithChatAction("typing").catch(()=>{});let h=await C({platform:"telegram",chatId:p,senderId:d,text:c.match?`update ${c.match}`.trim():"update",userName:c.from?.username||c.from?.first_name||"user"});if(h)return vr(c,h)}),r.on("message:text",async c=>{let d=String(c.chat.id),p=String(c.from?.id||d),h=c.message.text;try{c.replyWithChatAction("typing").catch(()=>{});let g=await C({platform:"telegram",chatId:d,senderId:p,text:h,userName:c.from?.username||c.from?.first_name||"user",extraOwners:i,bus:a,agentName:n,persona:o,backend:t.backend,profile:t.hermesProfile,meta:{forward_origin:c.message.forward_origin,forward_from:c.message.forward_from,forward_from_chat:c.message.forward_from_chat,forward_sender_name:c.message.forward_sender_name,forward_date:c.message.forward_date}});g&&await vr(c,g)}catch(g){process.stderr.write(`telegram-gateway[${n}]: ${g.message}
|
|
31
|
+
`),await c.reply("Something went wrong. Try again.").catch(()=>{})}}),r.on("callback_query:data",async c=>{let d=String(c.from?.id||"");if(!U({platform:"telegram",senderId:d,extraOwners:i})){await c.answerCallbackQuery({text:j.slice(0,180),show_alert:!0}).catch(()=>{});return}let p=String(c.callbackQuery?.data||""),h=await Mt({platform:"telegram",data:p,grant:{local:!0}});if(!h){await c.answerCallbackQuery().catch(()=>{});return}await c.answerCallbackQuery({text:"ok"}).catch(()=>{}),h.text&&await c.reply(h.text,{parse_mode:"Markdown"}).catch(()=>{})}),r.start();let s=kr({extraOwners:i}),l=null;return s.length>0&&t.pendingWatch!==!1&&(l=Sr({intervalMs:t.pendingWatchIntervalMs,onNew:async(c,{armed:d})=>{let p=Ue(c,{platform:"telegram",grant:{local:!0},armed:d}),h=p.buttons?.replyMarkup?{reply_markup:p.buttons.replyMarkup}:{};for(let g of s)await r.api.sendMessage(g,p.text,{parse_mode:"Markdown",...h}).catch(()=>{})}})),{platform:"telegram",name:n,bot:r,stopPendingWatch:()=>l?.stop()}}var Tr=f(()=>{H();de();Ar()});var Cr={};_(Cr,{discord:()=>Po});async function Po(t){let{Client:e,GatewayIntentBits:r}=await import("discord.js"),n=new e({intents:[r.Guilds,r.GuildMessages,r.MessageContent,r.DirectMessages]}),o=String(t.name||"oracle").toLowerCase(),i=W(t),a=Array.isArray(t.owners)?t.owners:void 0,s=t.bus;return s&&s.register(o,{role:t.role||"",chains:t.chains||[],handler:l=>Q({from:l.from,text:l.text,persona:i,backend:t.backend,profile:t.hermesProfile})}),n.on("messageCreate",async l=>{if(l.author.bot)return;let c=l.channel.id,d=l.author.id,p=l.content;try{let h=!l.guild,g=l.mentions.has(n.user.id);if(!h&&!g)return;l.channel.sendTyping().catch(()=>{});let y=await C({platform:"discord",chatId:c,senderId:d,text:p.replace(`<@${n.user.id}>`,"").trim(),userName:l.author.username,extraOwners:a,bus:s,agentName:o,persona:i,backend:t.backend,profile:t.hermesProfile,meta:{forwarded:l.reference?.type===1||Array.isArray(l.messageSnapshots)&&l.messageSnapshots.length>0}});y&&await l.reply(typeof y=="string"?y:y.text).catch(()=>{})}catch(h){process.stderr.write(`discord-gateway[${o}]: ${h.message}
|
|
32
|
+
`)}}),await n.login(t.token),{platform:"discord",name:o,client:n}}var Or=f(()=>{H()});var $r={};_($r,{whatsapp:()=>Mo});import{join as Nr}from"node:path";import{homedir as Bo}from"node:os";async function Mo(t){let[{Client:e,LocalAuth:r},{generate:n}]=await Promise.all([import("whatsapp-web.js"),import("qrcode-terminal")]),o=new e({authStrategy:new r({dataPath:Nr(Fo,".wwebjs_auth")}),puppeteer:{headless:!0,args:["--no-sandbox"]}});return o.on("qr",i=>{process.stderr.write(`
|
|
21
33
|
WhatsApp: scan this QR code in WhatsApp \u2192 Linked Devices:
|
|
22
34
|
|
|
23
35
|
`),n(i,{small:!0}),process.stderr.write(`
|
|
24
36
|
`)}),o.on("ready",()=>{process.stderr.write(`whatsapp-gateway: connected
|
|
25
|
-
`)}),o.on("message",async i=>{if(i.fromMe)return;let
|
|
26
|
-
`)}}),await o.initialize(),{platform:"whatsapp",client:o}}var
|
|
37
|
+
`)}),o.on("message",async i=>{if(i.fromMe)return;let a=i.from,s=i.author||i.from,l=i.body;try{let c=await C({platform:"whatsapp",chatId:a,senderId:s,text:l,userName:i._data?.notifyName||"user",meta:{forwarded:i.isForwarded||i._data?.isForwarded,forward_date:i._data?.forwardingScore?!0:void 0}});if(c){let p=(typeof c=="string"?c:c.text).replace(/\*\*/g,"*").replace(/```[\s\S]*?```/g,"[code]").replace(/`/g,"");await i.reply(p)}}catch(c){process.stderr.write(`whatsapp-gateway: ${c.message}
|
|
38
|
+
`)}}),await o.initialize(),{platform:"whatsapp",client:o}}var Fo,Lr=f(()=>{H();Fo=process.env.ORACLE_CONFIG_DIR||Nr(Bo(),".config","oracle")});var _r={};_(_r,{signal_:()=>qo});async function qo(t){return process.stderr.write(`signal-gateway: requires signal-cli binary
|
|
27
39
|
`),process.stderr.write(`signal-gateway: not built yet \u2014 use Telegram or Discord for now
|
|
28
|
-
`),{platform:"signal",status:"stub"}}var
|
|
40
|
+
`),{platform:"signal",status:"stub"}}var Rr=f(()=>{H()});import{createServer as Do}from"node:http";import{env as Fr}from"node:process";import{join as et}from"node:path";import{homedir as Uo}from"node:os";import{readFileSync as Mr,existsSync as jo,mkdirSync as Wo,writeFileSync as Ho}from"node:fs";import{randomBytes as Go}from"node:crypto";var qr=Fr.ORACLE_CONFIG_DIR||et(Uo(),".config","oracle"),Pr=et(qr,"gateway.json");function Jo(){return jo(Pr)?JSON.parse(Mr(Pr,"utf8")):{platforms:{}}}function Qe(t){return t?Array.isArray(t)?t.filter(Boolean):[t]:[]}var zo=Object.freeze({telegram:"grammy",discord:"discord.js",whatsapp:"whatsapp-web.js"});async function fe(t,e,r,n){try{n.push(await e(r))}catch(o){let i=zo[t];if(i&&/Cannot find (module|package)|ERR_MODULE_NOT_FOUND/.test(String(o.message))){process.stderr.write(`oracle-gateway: ${t} needs an optional dependency. Install it first:
|
|
29
41
|
npm install -g ${i}
|
|
30
42
|
`);return}process.stderr.write(`oracle-gateway: ${t} failed to start: ${o.message}
|
|
31
|
-
`)}}async function
|
|
32
|
-
`)}catch(
|
|
33
|
-
`)}}for(let
|
|
43
|
+
`)}}async function Vo(){let t=Jo(),e=[],r=Qe(t.platforms?.telegram),n=Qe(t.platforms?.discord),o=Qe(t.agents),a=r.length+n.length+o.length>1?new(await Promise.resolve().then(()=>(rt(),tt))).A2ABus:null;if(a&&o.length){let{routePeerConsult:l,buildPersona:c}=await Promise.resolve().then(()=>(H(),xr));for(let d of o)try{let p=c(d);a.register(d.name,{role:d.role||"",chains:d.chains||[],handler:h=>l({from:h.from,text:h.text,persona:p,backend:d.backend,profile:d.hermesProfile})}),process.stderr.write(`oracle-gateway: headless agent '${d.name}' on bus (backend: ${d.backend||"oracle"})
|
|
44
|
+
`)}catch(p){process.stderr.write(`oracle-gateway: headless agent '${d.name||"?"}' skipped: ${p.message}
|
|
45
|
+
`)}}for(let l of r)await fe("telegram",async()=>(await Promise.resolve().then(()=>(Tr(),Ir))).telegram({...l,bus:a}),t,e);for(let l of n)await fe("discord",async()=>(await Promise.resolve().then(()=>(Or(),Cr))).discord({...l,bus:a}),t,e);t.platforms?.whatsapp&&await fe("whatsapp",async l=>(await Promise.resolve().then(()=>(Lr(),$r))).whatsapp(l.platforms.whatsapp),t,e),t.platforms?.signal&&await fe("signal",async l=>(await Promise.resolve().then(()=>(Rr(),_r))).signal_(l.platforms.signal),t,e),e.length===0&&process.stderr.write(`oracle-gateway: no platforms configured. Run 'oracle setup telegram' first.
|
|
34
46
|
`),process.stderr.write(`oracle-gateway: ${e.length} platform(s) connected
|
|
35
|
-
`);let a
|
|
36
|
-
`)}var
|
|
37
|
-
`,{mode:384}),r}var{pathToFileURL:
|
|
38
|
-
`),process.exit(1)});export{
|
|
47
|
+
`);let s=a?Qo():null;Do((l,c)=>Yo(l,c,{config:t,bus:a,a2aToken:s})).listen(Fr.ORACLE_GATEWAY_PORT||9270,"127.0.0.1"),a&&process.stderr.write(`oracle-gateway: a2a loopback contract at GET /a2a (token: a2a-token in config dir)
|
|
48
|
+
`)}var Ko=16384;async function Yo(t,e,{config:r,bus:n,a2aToken:o}){let i=new URL(t.url||"/","http://127.0.0.1"),a=(l,c)=>{e.writeHead(l,{"Content-Type":"application/json"}),e.end(JSON.stringify(c))};if(t.method==="GET"&&(i.pathname==="/"||i.pathname==="/health"))return a(200,{status:"ok",platforms:Object.keys(r.platforms||{}),a2a:!!n});if(!i.pathname.startsWith("/a2a"))return a(404,{error:"not found"});if(!n)return a(404,{error:"a2a bus not running (fewer than 2 agents configured)"});if(t.method==="GET"&&i.pathname==="/a2a")return a(200,{contract:"oracle-a2a/1",auth:"Authorization: Bearer <contents of a2a-token in the oracle config dir>",endpoints:["GET /a2a","GET /a2a/agents","POST /a2a/ask {to,text,from?}"],note:"consult-only; loopback-only; peers answer with information, never actions"});let s=String(t.headers.authorization||"");if(!o||s!==`Bearer ${o}`)return a(401,{error:"bad or missing bearer token (read a2a-token in the oracle config dir)"});if(t.method==="GET"&&i.pathname==="/a2a/agents")return a(200,{agents:n.roster()});if(t.method==="POST"&&i.pathname==="/a2a/ask"){let l="";t.on("data",c=>{l+=c,l.length>Ko&&t.destroy()}),t.on("end",async()=>{try{let c=JSON.parse(l||"{}"),d=Xo(c.from);n.agents.has(d)||n.register(d,{role:"loopback client",handler:async()=>null});let p=await n.send({from:d,to:c.to,text:c.text,kind:"consult"});return a(p.ok?200:400,p)}catch(c){return a(400,{ok:!1,error:`bad request: ${c.message}`})}});return}return a(404,{error:"not found"})}function Xo(t){return String(t||"local").trim().toLowerCase().replace(/[^a-z0-9_-]/g,"").slice(0,32)||"local"}function Qo(t=qr){let e=et(t,"a2a-token");try{let n=Mr(e,"utf8").trim();if(n)return n}catch{}let r=Go(24).toString("hex");return Wo(t,{recursive:!0}),Ho(e,`${r}
|
|
49
|
+
`,{mode:384}),r}var{pathToFileURL:Zo}=await import("node:url"),{realpathSync:ei}=await import("node:fs"),Br=process.argv[1],Ze=!1;if(Br)try{Ze=import.meta.url===Zo(ei(Br)).href}catch{Ze=!1}Ze&&Vo().catch(t=>{process.stderr.write(`oracle-gateway: ${t.message}
|
|
50
|
+
`),process.exit(1)});export{Qo as ensureA2AToken,Yo as serveHttp,Qe as toEntries};
|