@oracle-agent/oracle 0.28.29 → 0.29.0
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 +1 -1
- package/dist/assets/skills/oracle-action-semantics/SKILL.md +1 -1
- package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
- package/dist/bin/desk-server.mjs +28 -28
- package/dist/bin/oracle-data-mcp.mjs +15 -21
- package/dist/bin/oracle-gateway.mjs +39 -39
- 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 +10 -10
- package/dist/bin/oracle-scan.mjs +10 -10
- package/dist/cli/commands/chat.mjs +161 -161
- package/dist/cli/commands/doctor.mjs +3 -3
- 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/model.mjs +165 -165
- package/dist/cli/commands/receipt.mjs +3 -3
- package/dist/cli/commands/resolve.mjs +6 -6
- package/dist/cli/commands/sign.mjs +14 -14
- package/dist/cli/commands/signer.mjs +13 -13
- package/dist/cli/commands/snipe.mjs +8 -8
- package/dist/cli/commands/strategy.mjs +3 -3
- package/dist/cli/commands/swap.mjs +17 -17
- package/dist/cli/commands/venues.mjs +3 -3
- package/dist/data/desk-data.mjs +21 -21
- package/dist/data/names.mjs +2 -2
- package/dist/data/providers/farming.mjs +2 -2
- package/dist/index.mjs +32 -32
- package/dist/local-signer/anvil-attestation-worker.mjs +1 -1
- package/dist/local-signer/index.mjs +3 -3
- package/dist/local-signer/runtime.mjs +10 -10
- package/dist/nft/universal-mint-router.mjs +3 -3
- package/dist/router/index.mjs +2 -2
- package/dist/router/prepare-bridge.mjs +2 -2
- package/dist/scanner/index.mjs +3 -3
- package/dist/strategy/index.mjs +3 -3
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var Tt=Object.defineProperty;var s=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};var Re=(e,r)=>{for(var t in r)Tt(e,t,{get:r[t],enumerable:!0})};import W from"node:fs";import It from"node:os";import C from"node:path";import{fileURLToPath as _t}from"node:url";function te(){return process.env.ORACLE_FAKE_HOME||It.homedir()}function Nt(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function L(){return Nt()?process.env.ORACLE_CONFIG_DIR||C.join(te(),".config","oracle"):C.join(te(),".config","oracle")}function Rt(){return C.join(L(),"desk.json")}function Ct(){return C.join(L(),"env")}function R({force:e=!1}={}){if(R._done&&!e)return R._result||null;R._done=!0;let r={},t=(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,r[o]=a))};try{let o=Ct();if(W.existsSync(o))for(let i of W.readFileSync(o,"utf8").split(/\r?\n/)){let a=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!a||a[2].startsWith("#"))continue;let u=a[2];(u.startsWith('"')&&u.endsWith('"')||u.startsWith("'")&&u.endsWith("'"))&&(u=u.slice(1,-1)),t(a[1],u)}}catch{}try{let o=Rt();if(W.existsSync(o)){let i=JSON.parse(W.readFileSync(o,"utf8"));i&&typeof i=="object"&&(t("ORACLE_DESK_URL",i.deskUrl||i.dataUrl||i.url),t("ORACLE_DATA_URL",i.dataUrl||i.deskUrl||i.url),t("ORACLE_API_URL",i.apiUrl||i.dataUrl||i.deskUrl),t("ORACLE_PUBLIC_URL",i.publicUrl||i.deskUrl||i.dataUrl),t("ORACLE_EXEC_URL",i.execUrl),t("MAD_DESK_URL",i.deskUrl||i.dataUrl))}}catch{}let n=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return n&&(t("ORACLE_DESK_URL",n),t("ORACLE_DATA_URL",n),t("ORACLE_API_URL",n),t("ORACLE_PUBLIC_URL",n),t("MAD_DESK_URL",n)),R._result=Object.keys(r).length?r:null,R._result}var Ot,l,J=s(()=>{Ot=C.dirname(_t(import.meta.url)),l=C.resolve(Ot,"../..");try{R()}catch{}});var ce,vn,je=s(()=>{ce={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}},vn=new Map(Object.values(ce).map(e=>[e.chainId,e]))});function q(e){let r=e?.transactionHash||e?.hash||e?.txid||null;return r?{happened:!0,hash:String(r),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}var ue=s(()=>{});var Ue=s(()=>{});var He=s(()=>{});var D=s(()=>{});var B=s(()=>{});var de=s(()=>{D();B()});import{isAddress as Pn}from"ethers";var fe=s(()=>{de();D();B()});import{Interface as or,isAddress as Dn}from"ethers";var Wn,We=s(()=>{fe();D();B();Wn=new or(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as ir,isAddress as Gn}from"ethers";var Xn,Qn,Je=s(()=>{fe();D();B();Xn=new ir(["function approve(address spender,uint256 amount) returns (bool)"]),Qn=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var N=s(()=>{});import{Interface as ar,MaxUint256 as io,isAddress as ao,keccak256 as so,toUtf8Bytes as co}from"ethers";var ho,j=s(()=>{He();We();Je();N();B();ho=new ar(["function approve(address spender,uint256 amount) returns (bool)"])});var go,yo,ze=s(()=>{go=300*1e3,yo=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var V=s(()=>{j()});import{Address as vo,NETWORK as Ao,OutScript as ko,RawTx as To,SigHash as Io,TEST_NETWORK as _o,Transaction as Oo}from"@scure/btc-signer";var he=s(()=>{});import{createHash as cr}from"node:crypto";import{base58 as Lo}from"@scure/base";import{getCompiledTransactionMessageDecoder as $o}from"@solana/transaction-messages";var Ge,Bo,we=s(()=>{Ge=e=>cr("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),Bo=new Map([[Ge("route"),{name:"route",prefixBytes:0}],[Ge("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});var Ve=s(()=>{});var Wo,Ke=s(()=>{Ve();Wo=64*1024});var Ye=s(()=>{Ke()});var Xe=s(()=>{Ye()});var ri,ni,ye=s(()=>{N();Xe();ri=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"}),ni=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 ai,Ee=s(()=>{N();ai="0x"+"00".repeat(32)});var ur,di,be=s(()=>{Ee();N();ur=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),di=Object.freeze(ur.map(e=>e[0]))});var K=s(()=>{N()});import{Interface as rt}from"ethers";var mr,Oi,hr,Ni,Ri,Ci,Li,wr,Pi,Y=s(()=>{j();de();ze();V();he();we();ye();be();K();mr=new Set(["evm","evm-swap","evm-bridge","evm-nft","btc","sol","hl","poly","lighter"]),Oi=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}),hr=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"}}),Ni=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Ri=new rt(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Ci=new rt(["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"]),Li=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"}}),wr=Object.freeze([...mr]),Pi=Object.freeze({...hr})});import{encode as Fi}from"@msgpack/msgpack";import{keccak256 as qi,verifyTypedData as Di}from"ethers";var ji,Ui,xe=s(()=>{ji=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Ui=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var Se=s(()=>{K()});import{ed25519 as Yi}from"@noble/curves/ed25519.js";import{base58 as Qi}from"@scure/base";import{RawTx as ea,SigHash as ta,Transaction as ra}from"@scure/btc-signer";import{Transaction as oa,keccak256 as ia,verifyTypedData as aa}from"ethers";var ve=s(()=>{xe();Se()});import{base58 as pa}from"@scure/base";var X=s(()=>{Y();V();j();ve()});var ot=s(()=>{X();Y()});var ka,Ta,Ia,Q=s(()=>{ka=Object.freeze({N:1<<17,r:8,p:1}),Ta=256*1024*1024,Ia=16*1024});var Oa,it=s(()=>{Oa=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 Ae}from"node:os";import{join as ke}from"node:path";var at,Er,La,st=s(()=>{at=process.env.ORACLE_PUBLIC_DESKTOP==="1",Er=at?process.env.ORACLE_CONFIG_DIR||ke(Ae(),".config","oracle"):ke(Ae(),".config","oracle"),La=at?Er:ke(Ae(),".config","mad-desk")});var Ma,qa,Da,ct=s(()=>{st();Ma="0".repeat(64),qa=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"}),Da=Promise.resolve()});var lt=s(()=>{ct();N();Q();X()});var dt=s(()=>{});import{Wallet as Ya}from"ethers";import{base58 as Qa}from"@scure/base";import{ed25519 as es}from"@noble/curves/ed25519.js";import{NETWORK as rs,TEST_NETWORK as ns,WIF as os,p2wpkh as is}from"@scure/btc-signer";import{pubECDSA as ss}from"@scure/btc-signer/utils.js";var ft=s(()=>{});import b from"node:path";import xr from"node:os";import{createHash as Sr,randomBytes as qs}from"node:crypto";import{Interface as Te,keccak256 as js}from"ethers";import{Transaction as Hs}from"@scure/btc-signer";import{ed25519 as Js}from"@noble/curves/ed25519.js";function pt(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||b.join(process.env.XDG_STATE_HOME||b.join(xr.homedir(),".local","state"),"oracle"),t=Sr("sha256").update(b.resolve(e)).digest("hex").slice(0,16);return{vault:b.join(e,"vault.json"),policy:b.join(e,"signer-policy.json"),policyKey:b.join(e,"policy-integrity-key"),policyAnchor:b.join(r,`signer-policy-${t}.high-water`),ledger:b.join(e,"signer-ledger.json"),ledgerAnchor:b.join(r,`signer-ledger-${t}.high-water`),token:b.join(e,"signer-token"),lock:b.join(r,`signer-${t}.lock`)}}var pc,mc,hc,mt=s(()=>{ot();X();Q();it();lt();dt();j();Y();V();ve();ye();be();K();Se();Ee();xe();he();we();ft();pc=new Te(["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"]),mc=new Te(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),hc=new Te(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import Ie from"node:fs";import ht from"node:path";import{homedir as vr}from"node:os";function Ar(){return process.env.ORACLE_CONFIG_DIR||ht.join(vr(),".config","oracle")}function U(){let e=pt(ht.join(Ar(),"signer")),r=Ie.existsSync(e.vault),t=Ie.existsSync(e.lock),n=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:Ie.existsSync(e.policy),armed:r&&!t,disarmed:t,capabilities:{swap:n,bridge:n},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var Tc,_e=s(()=>{ue();Ue();mt();Q();Tc=Object.freeze([{type:"function",function:{name:"vault_status",description:"Read local Oracle vault/signer readiness. Never returns key material.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_status",description:"Ping the loopback signer. Fails closed if it is not running.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_pending",description:"List pending local-signer artifacts. Read-only. Does not approve, sign, or broadcast.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_queue",description:"Queue a prepared unsigned artifact on the loopback signer. Does not broadcast.",parameters:{type:"object",properties:{artifact:{type:"object"}},required:["artifact"],additionalProperties:!1}}},{type:"function",function:{name:"signer_ack",description:"Execute one pending artifact through the armed local signer (same path as Telegram Allow). Fails if the signer is not running or disarmed. Never holds keys.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_deny",description:"Drop one pending local-signer artifact. Nothing signed.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_execute",description:"Broadcast one already-confirmed local artifact. Requires a one-use confirmationNonce from the local signer TTY confirm. Cannot mint confirmation itself.",parameters:{type:"object",properties:{artifact:{type:"object"},confirmationNonce:{type:"string",minLength:32,maxLength:128}},required:["artifact","confirmationNonce"],additionalProperties:!1}}},{type:"function",function:{name:"signer_disarm",description:"Global kill switch. Stops the local signer from broadcasting.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"receipt_report",description:"Receipt or it did not happen. Requires transactionHash/hash/txid.",parameters:{type:"object",properties:{receipt:{type:"object"},transactionHash:{type:"string"},hash:{type:"string"},txid:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"watch_create",description:"Create an alert-only watch. Never execute.",parameters:{type:"object",properties:{chain:{type:"string"},token:{type:"string"},condition:{type:"string"},note:{type:"string"}},required:["chain","token","condition"],additionalProperties:!1}}},{type:"function",function:{name:"watch_list",description:"List local alert-only watches.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"portfolio_snapshot",description:"How to read the one portfolio snapshot. knownUsd is incomplete if a provider is missing.",parameters:{type:"object",properties:{},additionalProperties:!1}}}])});function Z(e){return String(e||"").trim()||void 0}function Tr(e,{required:r=!1}={}){let t=Z(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!kr.has(t))throw new Error(`unsupported provider: ${t}`);return t}function Ir(e,{required:r=!1}={}){let t=Z(e);if(!t){if(r)throw new Error("model is required");return}if(t.includes("..")||t.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(t))throw new Error("invalid model id");return t}function _r(e){let r=Z(e);if(!r||r.length>2048)throw new Error("invalid custom base URL");let t;try{t=new URL(r)}catch{throw new Error("invalid custom base URL")}let n=t.hostname.toLowerCase().replace(/^\[|\]$/g,""),o=n==="localhost"||n==="127.0.0.1"||n==="::1";if(t.protocol!=="https:"&&!(t.protocol==="http:"&&o)||t.username||t.password||t.search||t.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return t.toString().replace(/\/+$/,"")}function wt({provider:e,model:r,baseUrl:t}={},{requireModel:n=!1}={}){let o=Tr(e),i=Ir(r,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:_r(t)};if(Z(t))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var kr,gt=s(()=>{kr=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","custom","anthropic-oauth","openai-codex","xai-oauth"])});import yt from"node:fs";import Or from"node:path";function Rr(){return Or.join(L(),"model.json")}function F(e){return String(e||"").trim()||void 0}function Cr(e={}){let r=F(e.backend)?.toLowerCase()||"auto",t=wt({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),n=F(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=F(e.reasoningEffort),a=F(e.computeHost||e.remoteHost),u=F(e.computeUser||e.remoteUser),f=F(e.computePath||e.remotePath);if(!Nr.has(r))throw new Error(`unsupported backend: ${r}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(r))throw new Error("remote compute backends are disabled in the public desktop");if(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))throw new Error("api key env must be an uppercase environment variable name");if(r==="remote"&&!a)throw new Error("remote backend requires computeHost");return{backend:r,...t,...n?{apiKeyEnv:n}:{},...Number.isFinite(o)&&o>0?{contextLength:o}:{},...i?{reasoningEffort:i}:{},...a?{computeHost:a}:{},...u?{computeUser:u}:{},...f?{computePath:f}:{}}}function Et(){let e=Rr();if(!yt.existsSync(e))return null;try{return Cr(JSON.parse(yt.readFileSync(e,"utf8")))}catch{return null}}var Nr,bt=s(()=>{J();gt();Nr=new Set(["auto","standalone","hermes","remote","arch"])});var xt={};Re(xt,{classifyReceipt:()=>q,configDir:()=>Br,firstHourReport:()=>Oe,venueMap:()=>ee});import Lr from"node:path";import{homedir as Pr}from"node:os";function Br(e=process.env){return e.ORACLE_CONFIG_DIR||Lr.join(Pr(),".config","oracle")}function ee({env:e=process.env,vault:r=null}={}){let t=r||U(),n=[];for(let[o,i]of Object.entries(ce)){let a=(i.rpcEnv||[]).some(f=>String(e[f]||"").trim()),u="prepare";i.evm?a&&(u="live"):u="unavailable",n.push({key:o,chainId:i.chainId,name:i.name,family:"evm",status:u,execute:!!(t.vaultExists&&t.armed&&!t.disarmed),note:a?"rpc configured":"public read/prepare; set RPC for live reads"})}return n.push({key:"solana",chainId:null,name:"Solana",family:"sol",status:"prepare",execute:!1,note:"Jupiter quote/prepare; local sol signer"},{key:"bitcoin",chainId:null,name:"Bitcoin",family:"btc",status:"prepare",execute:!1,note:"Esplora read; local btc signer"},{key:"hyperliquid-l1",chainId:null,name:"Hyperliquid L1",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not an EVM signer family"},{key:"polymarket",chainId:null,name:"Polymarket",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not a signer family"}),n}function Oe({env:e=process.env,model:r=Et(),vault:t=U(),signerReachable:n=!1,quote:o=null}={}){let i=[],a=(p,w,_,S=null)=>i.push({id:p,status:w,detail:_,fix:S}),u=(()=>{let[p,w]=process.versions.node.split(".").map(Number);return p>20||p===20&&w>=19})();a("node",u?"ok":"fail",`node ${process.versions.node}`,u?null:"install node >= 20.19"),r?r.backend==="hermes"?a("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):a("model","ok",`${r.backend||"auto"} ${r.provider||""} ${r.model||""}`.trim()):a("model","fail","no model.json","oracle setup model"),t.vaultExists?t.disarmed?a("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):a("vault",t.armed?"ok":"warn",t.armed?"present, armed":"present, not armed"):a("vault","fail","no local vault","oracle sign init");let f=e.ORACLE_SIGNER_HOST||"127.0.0.1";return $r.has(f)?a("signer",n?"ok":"warn",n?`loopback ${f}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):a("signer","fail",`signer host ${f} is not loopback`,"unset ORACLE_SIGNER_HOST"),o?o.ok?a("quote","ok",o.detail||"net quote returned"):a("quote","warn",o.detail||"quote unavailable","check network / oracle data serve"):a("quote","warn","quote not probed",null),{ok:!i.some(p=>p.status==="fail"),checks:i,venues:ee({env:e,vault:t})}}var $r,Ne=s(()=>{je();_e();bt();ue();$r=new Set(["127.0.0.1","::1","localhost"])});var St={};Re(St,{classifyReceipt:()=>q,default:()=>qr,firstHourReport:()=>Oe,probeQuote:()=>Mr,probeSigner:()=>Fr,vaultStatus:()=>U});async function Fr(e=process.env){let r=e.ORACLE_SIGNER_HOST||"127.0.0.1",t=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${r}:${t}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}async function Mr(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let t=(await e.json())?.pairs?.[0];return!t?.chainId||!t?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${t.chainId} ${t.baseToken?.symbol}/${t.quoteToken?.symbol} $${t.priceUsd}`}}catch(e){return{ok:!1,detail:e instanceof Error?e.message:"quote failed"}}}var qr,vt=s(()=>{Ne();_e();qr={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let r=e.argv.includes("--json"),t=ee();if(r)return process.stdout.write(`${JSON.stringify({venues:t},null,2)}
|
|
1
|
+
var Nt=Object.defineProperty;var a=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};var Pe=(e,r)=>{for(var t in r)Nt(e,t,{get:r[t],enumerable:!0})};import W from"node:fs";import Lt from"node:os";import L from"node:path";import{fileURLToPath as Rt}from"node:url";function ne(){return process.env.ORACLE_FAKE_HOME||Lt.homedir()}function Bt(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function R(){return Bt()?process.env.ORACLE_CONFIG_DIR||L.join(ne(),".config","oracle"):L.join(ne(),".config","oracle")}function $t(){return L.join(R(),"desk.json")}function Ft(){return L.join(R(),"env")}function N({force:e=!1}={}){if(N._done&&!e)return N._result||null;N._done=!0;let r={},t=(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,r[o]=s))};try{let o=Ft();if(W.existsSync(o))for(let i of W.readFileSync(o,"utf8").split(/\r?\n/)){let s=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let u=s[2];(u.startsWith('"')&&u.endsWith('"')||u.startsWith("'")&&u.endsWith("'"))&&(u=u.slice(1,-1)),t(s[1],u)}}catch{}try{let o=$t();if(W.existsSync(o)){let i=JSON.parse(W.readFileSync(o,"utf8"));i&&typeof i=="object"&&(t("ORACLE_DESK_URL",i.deskUrl||i.dataUrl||i.url),t("ORACLE_DATA_URL",i.dataUrl||i.deskUrl||i.url),t("ORACLE_API_URL",i.apiUrl||i.dataUrl||i.deskUrl),t("ORACLE_PUBLIC_URL",i.publicUrl||i.deskUrl||i.dataUrl),t("ORACLE_EXEC_URL",i.execUrl),t("MAD_DESK_URL",i.deskUrl||i.dataUrl))}}catch{}let n=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return n&&(t("ORACLE_DESK_URL",n),t("ORACLE_DATA_URL",n),t("ORACLE_API_URL",n),t("ORACLE_PUBLIC_URL",n),t("MAD_DESK_URL",n)),N._result=Object.keys(r).length?r:null,N._result}var Pt,l,z=a(()=>{Pt=L.dirname(Rt(import.meta.url)),l=L.resolve(Pt,"../..");try{N()}catch{}});var le,Bn,We=a(()=>{le={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}},Bn=new Map(Object.values(le).map(e=>[e.chainId,e]))});function D(e){let r=e?.transactionHash||e?.hash||e?.txid||null;return r?{happened:!0,hash:String(r),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}var de=a(()=>{});var ze=a(()=>{});var Je=a(()=>{});var q=a(()=>{});var $=a(()=>{});var V=a(()=>{q();$()});import{isAddress as Jn}from"ethers";var pe=a(()=>{V();q();$()});import{Interface as ur,isAddress as Qn}from"ethers";var ro,Ge=a(()=>{pe();q();$();ro=new ur(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as lr,isAddress as io}from"ethers";var uo,lo,Ve=a(()=>{pe();q();$();uo=new lr(["function approve(address spender,uint256 amount) returns (bool)"]),lo=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var C=a(()=>{});import{Interface as dr,MaxUint256 as yo,isAddress as bo,keccak256 as Eo,toUtf8Bytes as xo}from"ethers";var Io,j=a(()=>{Je();Ge();Ve();C();$();Io=new dr(["function approve(address spender,uint256 amount) returns (bool)"])});var _o,Co,K=a(()=>{_o=300*1e3,Co=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var Y=a(()=>{j()});import{Address as Bo,NETWORK as $o,OutScript as Fo,RawTx as Mo,SigHash as Do,TEST_NETWORK as qo,Transaction as jo}from"@scure/btc-signer";var we=a(()=>{});import{createHash as pr}from"node:crypto";import{base58 as zo}from"@scure/base";import{getCompiledTransactionMessageDecoder as Go}from"@solana/transaction-messages";var Ke,Vo,ge=a(()=>{Ke=e=>pr("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),Vo=new Map([[Ke("route"),{name:"route",prefixBytes:0}],[Ke("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});var Ye=a(()=>{});var ri,ye=a(()=>{Ye();ri=64*1024});var Xe=a(()=>{ye()});var Qe=a(()=>{Xe()});var pi,mi,Ee=a(()=>{C();Qe();pi=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"}),mi=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 gi,xe=a(()=>{C();gi="0x"+"00".repeat(32)});var hr,Si,Se=a(()=>{xe();C();hr=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Si=Object.freeze(hr.map(e=>e[0]))});var X=a(()=>{C()});import{TypedDataEncoder as Ii,getAddress as Oi,isAddress as _i}from"ethers";var gr,yr,rt=a(()=>{K();gr=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),yr=Object.freeze({Order:[{name:"salt",type:"uint256"},{name:"maker",type:"address"},{name:"receiver",type:"address"},{name:"makerAsset",type:"address"},{name:"takerAsset",type:"address"},{name:"makingAmount",type:"uint256"},{name:"takingAmount",type:"uint256"},{name:"makerTraits",type:"uint256"}]})});var Li,nt=a(()=>{Li=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var ot=a(()=>{});import{TypedDataEncoder as qi,getAddress as ji,isAddress as Ui}from"ethers";var br,Ki,Er,Yi,it=a(()=>{ye();V();nt();ot();K();br=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),Ki=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),Er=Object.freeze({Order:[{name:"sellToken",type:"address"},{name:"buyToken",type:"address"},{name:"receiver",type:"address"},{name:"sellAmount",type:"uint256"},{name:"buyAmount",type:"uint256"},{name:"validTo",type:"uint32"},{name:"appData",type:"bytes32"},{name:"feeAmount",type:"uint256"},{name:"kind",type:"string"},{name:"partiallyFillable",type:"bool"},{name:"sellTokenBalance",type:"string"},{name:"buyTokenBalance",type:"string"}]}),Yi=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as Zi,getAddress as ea}from"ethers";var na,Ae=a(()=>{rt();it();na=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as st}from"ethers";var Tr,Ea,Ir,xa,Sa,Aa,va,Or,ka,Q=a(()=>{j();V();K();Y();we();ge();Ee();Se();X();Ae();Tr=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),Ea=Object.freeze({swap:5,bridge:5,perps:0,nft:0,mint:0,transfer:0,approve:0,delegate:0,identity:0,order:0,cancel:0,leverage:0,margin:0,approveBuilder:0,stake:0,unstake:0}),Ir=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"}}),xa=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Sa=new st(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Aa=new st(["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"]),va=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"}}),Or=Object.freeze([...Tr]),ka=Object.freeze({...Ir})});import{encode as Oa}from"@msgpack/msgpack";import{keccak256 as Ca,verifyTypedData as Na}from"ethers";var La,Ra,ve=a(()=>{La=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Ra=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var ke=a(()=>{X()});import{ed25519 as ja}from"@noble/curves/ed25519.js";import{base58 as Ha}from"@scure/base";import{RawTx as za,SigHash as Ja,Transaction as Ga}from"@scure/btc-signer";import{Transaction as Ka,keccak256 as Ya,verifyTypedData as Xa}from"ethers";var Te=a(()=>{ve();ke()});import{base58 as os}from"@scure/base";var Z=a(()=>{Q();Y();j();Te()});var ut=a(()=>{Z();Q()});var ws,gs,ys,ee=a(()=>{ws=Object.freeze({N:1<<17,r:8,p:1}),gs=256*1024*1024,ys=16*1024});var Es,lt=a(()=>{Es=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 Ie}from"node:os";import{join as Oe}from"node:path";var dt,Nr,vs,ft=a(()=>{dt=process.env.ORACLE_PUBLIC_DESKTOP==="1",Nr=dt?process.env.ORACLE_CONFIG_DIR||Oe(Ie(),".config","oracle"):Oe(Ie(),".config","oracle"),vs=dt?Nr:Oe(Ie(),".config","mad-desk")});var _s,Cs,Ns,pt=a(()=>{ft();_s="0".repeat(64),Cs=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"}),Ns=Promise.resolve()});var ht=a(()=>{pt();C();ee();Z()});var wt=a(()=>{});import{Wallet as js}from"ethers";import{base58 as Hs}from"@scure/base";import{ed25519 as zs}from"@noble/curves/ed25519.js";import{NETWORK as Gs,TEST_NETWORK as Vs,WIF as Ks,p2wpkh as Ys}from"@scure/btc-signer";import{pubECDSA as Qs}from"@scure/btc-signer/utils.js";var gt=a(()=>{});import E from"node:path";import Rr from"node:os";import{createHash as Pr,randomBytes as Cc}from"node:crypto";import{Interface as _e,keccak256 as Lc}from"ethers";import{Transaction as Pc}from"@scure/btc-signer";import{ed25519 as $c}from"@noble/curves/ed25519.js";function yt(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||E.join(process.env.XDG_STATE_HOME||E.join(Rr.homedir(),".local","state"),"oracle"),t=Pr("sha256").update(E.resolve(e)).digest("hex").slice(0,16);return{vault:E.join(e,"vault.json"),policy:E.join(e,"signer-policy.json"),policyKey:E.join(e,"policy-integrity-key"),policyAnchor:E.join(r,`signer-policy-${t}.high-water`),ledger:E.join(e,"signer-ledger.json"),ledgerAnchor:E.join(r,`signer-ledger-${t}.high-water`),token:E.join(e,"signer-token"),lock:E.join(r,`signer-${t}.lock`)}}var iu,au,su,bt=a(()=>{ut();Z();ee();lt();ht();wt();j();Q();Y();Te();Ee();Se();X();ke();xe();ve();we();ge();Ae();gt();iu=new _e(["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"]),au=new _e(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),su=new _e(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import Ce from"node:fs";import Et from"node:path";import{homedir as Br}from"node:os";function $r(){return process.env.ORACLE_CONFIG_DIR||Et.join(Br(),".config","oracle")}function U(){let e=yt(Et.join($r(),"signer")),r=Ce.existsSync(e.vault),t=Ce.existsSync(e.lock),n=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:Ce.existsSync(e.policy),armed:r&&!t,disarmed:t,capabilities:{swap:n,bridge:n},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var yu,Ne=a(()=>{de();ze();bt();ee();yu=Object.freeze([{type:"function",function:{name:"vault_status",description:"Read local Oracle vault/signer readiness. Never returns key material.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_status",description:"Ping the loopback signer. Fails closed if it is not running.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_pending",description:"List pending local-signer artifacts. Read-only. Does not approve, sign, or broadcast.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_queue",description:"Queue a prepared unsigned artifact on the loopback signer. Does not broadcast.",parameters:{type:"object",properties:{artifact:{type:"object"}},required:["artifact"],additionalProperties:!1}}},{type:"function",function:{name:"signer_ack",description:"Execute one pending artifact through the armed local signer (same path as Telegram Allow). Fails if the signer is not running or disarmed. Never holds keys.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_deny",description:"Drop one pending local-signer artifact. Nothing signed.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_execute",description:"Broadcast one already-confirmed local artifact. Requires a one-use confirmationNonce from the local signer TTY confirm. Cannot mint confirmation itself.",parameters:{type:"object",properties:{artifact:{type:"object"},confirmationNonce:{type:"string",minLength:32,maxLength:128}},required:["artifact","confirmationNonce"],additionalProperties:!1}}},{type:"function",function:{name:"signer_disarm",description:"Global kill switch. Stops the local signer from broadcasting.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"receipt_report",description:"Receipt or it did not happen. Requires transactionHash/hash/txid.",parameters:{type:"object",properties:{receipt:{type:"object"},transactionHash:{type:"string"},hash:{type:"string"},txid:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"watch_create",description:"Create an alert-only watch. Never execute.",parameters:{type:"object",properties:{chain:{type:"string"},token:{type:"string"},condition:{type:"string"},note:{type:"string"}},required:["chain","token","condition"],additionalProperties:!1}}},{type:"function",function:{name:"watch_list",description:"List local alert-only watches.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"portfolio_snapshot",description:"How to read the one portfolio snapshot. knownUsd is incomplete if a provider is missing.",parameters:{type:"object",properties:{},additionalProperties:!1}}}])});function te(e){return String(e||"").trim()||void 0}function Mr(e,{required:r=!1}={}){let t=te(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!Fr.has(t))throw new Error(`unsupported provider: ${t}`);return t}function Dr(e,{required:r=!1}={}){let t=te(e);if(!t){if(r)throw new Error("model is required");return}if(t.includes("..")||t.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(t))throw new Error("invalid model id");return t}function qr(e){let r=te(e);if(!r||r.length>2048)throw new Error("invalid custom base URL");let t;try{t=new URL(r)}catch{throw new Error("invalid custom base URL")}let n=t.hostname.toLowerCase().replace(/^\[|\]$/g,""),o=n==="localhost"||n==="127.0.0.1"||n==="::1";if(t.protocol!=="https:"&&!(t.protocol==="http:"&&o)||t.username||t.password||t.search||t.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return t.toString().replace(/\/+$/,"")}function xt({provider:e,model:r,baseUrl:t}={},{requireModel:n=!1}={}){let o=Mr(e),i=Dr(r,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:qr(t)};if(te(t))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var Fr,St=a(()=>{Fr=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","custom","anthropic-oauth","openai-codex","xai-oauth"])});import At from"node:fs";import jr from"node:path";function Hr(){return jr.join(R(),"model.json")}function F(e){return String(e||"").trim()||void 0}function Wr(e={}){let r=F(e.backend)?.toLowerCase()||"auto",t=xt({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),n=F(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=F(e.reasoningEffort),s=F(e.computeHost||e.remoteHost),u=F(e.computeUser||e.remoteUser),f=F(e.computePath||e.remotePath);if(!Ur.has(r))throw new Error(`unsupported backend: ${r}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(r))throw new Error("remote compute backends are disabled in the public desktop");if(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))throw new Error("api key env must be an uppercase environment variable name");if(r==="remote"&&!s)throw new Error("remote backend requires computeHost");return{backend:r,...t,...n?{apiKeyEnv:n}:{},...Number.isFinite(o)&&o>0?{contextLength:o}:{},...i?{reasoningEffort:i}:{},...s?{computeHost:s}:{},...u?{computeUser:u}:{},...f?{computePath:f}:{}}}function vt(){let e=Hr();if(!At.existsSync(e))return null;try{return Wr(JSON.parse(At.readFileSync(e,"utf8")))}catch{return null}}var Ur,kt=a(()=>{z();St();Ur=new Set(["auto","standalone","hermes","remote","arch"])});var Tt={};Pe(Tt,{classifyReceipt:()=>D,configDir:()=>Vr,firstHourReport:()=>Le,venueMap:()=>re});import zr from"node:path";import{homedir as Jr}from"node:os";function Vr(e=process.env){return e.ORACLE_CONFIG_DIR||zr.join(Jr(),".config","oracle")}function re({env:e=process.env,vault:r=null}={}){let t=r||U(),n=[];for(let[o,i]of Object.entries(le)){let s=(i.rpcEnv||[]).some(f=>String(e[f]||"").trim()),u="prepare";i.evm?s&&(u="live"):u="unavailable",n.push({key:o,chainId:i.chainId,name:i.name,family:"evm",status:u,execute:!!(t.vaultExists&&t.armed&&!t.disarmed),note:s?"rpc configured":"public read/prepare; set RPC for live reads"})}return n.push({key:"solana",chainId:null,name:"Solana",family:"sol",status:"prepare",execute:!1,note:"Jupiter quote/prepare; local sol signer"},{key:"bitcoin",chainId:null,name:"Bitcoin",family:"btc",status:"prepare",execute:!1,note:"Esplora read; local btc signer"},{key:"hyperliquid-l1",chainId:null,name:"Hyperliquid L1",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not an EVM signer family"},{key:"polymarket",chainId:null,name:"Polymarket",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not a signer family"}),n}function Le({env:e=process.env,model:r=vt(),vault:t=U(),signerReachable:n=!1,quote:o=null}={}){let i=[],s=(p,w,O,S=null)=>i.push({id:p,status:w,detail:O,fix:S}),u=(()=>{let[p,w]=process.versions.node.split(".").map(Number);return p>20||p===20&&w>=19})();s("node",u?"ok":"fail",`node ${process.versions.node}`,u?null:"install node >= 20.19"),r?r.backend==="hermes"?s("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):s("model","ok",`${r.backend||"auto"} ${r.provider||""} ${r.model||""}`.trim()):s("model","fail","no model.json","oracle setup model"),t.vaultExists?t.disarmed?s("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):s("vault",t.armed?"ok":"warn",t.armed?"present, armed":"present, not armed"):s("vault","fail","no local vault","oracle sign init");let f=e.ORACLE_SIGNER_HOST||"127.0.0.1";return Gr.has(f)?s("signer",n?"ok":"warn",n?`loopback ${f}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):s("signer","fail",`signer host ${f} is not loopback`,"unset ORACLE_SIGNER_HOST"),o?o.ok?s("quote","ok",o.detail||"net quote returned"):s("quote","warn",o.detail||"quote unavailable","check network / oracle data serve"):s("quote","warn","quote not probed",null),{ok:!i.some(p=>p.status==="fail"),checks:i,venues:re({env:e,vault:t})}}var Gr,Re=a(()=>{We();Ne();kt();de();Gr=new Set(["127.0.0.1","::1","localhost"])});var It={};Pe(It,{classifyReceipt:()=>D,default:()=>Xr,firstHourReport:()=>Le,probeQuote:()=>Yr,probeSigner:()=>Kr,vaultStatus:()=>U});async function Kr(e=process.env){let r=e.ORACLE_SIGNER_HOST||"127.0.0.1",t=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${r}:${t}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}async function Yr(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let t=(await e.json())?.pairs?.[0];return!t?.chainId||!t?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${t.chainId} ${t.baseToken?.symbol}/${t.quoteToken?.symbol} $${t.priceUsd}`}}catch(e){return{ok:!1,detail:e instanceof Error?e.message:"quote failed"}}}var Xr,Ot=a(()=>{Re();Ne();Xr={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let r=e.argv.includes("--json"),t=re();if(r)return process.stdout.write(`${JSON.stringify({venues:t},null,2)}
|
|
2
2
|
`),0;for(let n of t)process.stdout.write(`${n.status.padEnd(12)} ${n.key.padEnd(16)} ${n.name} exec=${n.execute?"local":"no"}
|
|
3
|
-
`);return 0}}});import M from"node:fs";import At from"node:path";import Le from"node:fs";import P from"node:path";J();var Pt="0.19.0",Xr=`hermes-agent==${Pt}`;var Ce="0.12.1",Qr=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Ce}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Ce}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function $t(){return P.join(L(),"runtime")}function Bt(){return P.join($t(),"venv")}function Ft(e){let r=process.platform==="win32"?"Scripts":"bin",t=process.platform==="win32"?`${e}.exe`:e;return P.join(Bt(),r,t)}function Mt(){return Ft("hermes")}function qt(e){let r=process.platform==="win32"&&!P.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let t of(process.env.PATH||"").split(P.delimiter))if(t)for(let n of r){let o=P.join(t,`${e}${n}`);try{if(Le.existsSync(o))return o}catch{}}return null}function Pe(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=Mt();if(Le.existsSync(e))return{ok:!0,bin:e,source:"managed"};let r=qt("hermes");return r?{ok:!0,bin:r,source:"path"}:{ok:!1,bin:null,source:null}}import O from"node:fs";import d from"node:path";J();import{existsSync as Be,readFileSync as Dt}from"node:fs";import{dirname as $e,join as re}from"node:path";import{fileURLToPath as jt}from"node:url";function Ut(e){let r=$e(jt(e));for(let t=0;t<8;t+=1){let n=re(r,"package.json");if(Be(n))try{let i=JSON.parse(Dt(n,"utf8"));if(i&&typeof i.version=="string")return r}catch{}let o=$e(r);if(o===r)break;r=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function Fe(e,r){let t=Ut(r),n=re(t,e);return Be(n)?n:re(t,"dist","assets",e)}var Ht=Object.freeze([{id:"oracle",label:"Oracle Native",kind:"oracle",bins:["oracle"],website:!0,detect:!0},{id:"hermes",label:"Hermes Agent",kind:"mcp",bins:["hermes"],mcpTarget:"generic",configKey:"hermes",website:!0,detect:!0},{id:"claude",label:"Claude Code",kind:"mcp",bins:["claude"],mcpTarget:"claude-code",configKey:"claudeCode",website:!0,detect:!0},{id:"claude-desktop",label:"Claude Desktop",kind:"mcp",bins:[],mcpTarget:"claude-desktop",configKey:"claudeDesktop",website:!0,detect:!1},{id:"chatgpt",label:"ChatGPT",kind:"mcp",bins:[],mcpTarget:"chatgpt",configKey:"chatgpt",website:!0,detect:!1},{id:"codex",label:"OpenAI Codex",kind:"mcp",bins:["codex"],mcpTarget:"codex",configKey:"codex",website:!0,detect:!0},{id:"cursor",label:"Cursor",kind:"mcp",bins:["cursor","cursor-agent"],mcpTarget:"cursor",configKey:"cursor",website:!0,detect:!0},{id:"windsurf",label:"Windsurf",kind:"mcp",bins:["windsurf"],mcpTarget:"vscode",configKey:"windsurf",website:!0,detect:!0},{id:"vscode",label:"VS Code / Copilot",kind:"mcp",bins:["code","code-insiders"],mcpTarget:"vscode",configKey:"vscode",website:!0,detect:!0},{id:"openclaw",label:"OpenClaw",kind:"mcp",bins:["openclaw","claw"],mcpTarget:"generic",configKey:"openclaw",website:!0,detect:!0},{id:"perplexity",label:"Perplexity",kind:"mcp",bins:["perplexity","pplx"],mcpTarget:"generic",configKey:"perplexity",website:!0,detect:!0},{id:"manus",label:"Manus",kind:"mcp",bins:["manus"],mcpTarget:"generic",configKey:"manus",website:!0,detect:!0},{id:"prime",label:"Prime Intellect Agent",kind:"mcp",bins:["prime-agent","prime"],mcpTarget:"generic",configKey:"prime",website:!1,detect:!0},{id:"opencode",label:"OpenCode",kind:"mcp",bins:["opencode"],mcpTarget:"generic",configKey:"opencode",website:!1,detect:!0},{id:"aider",label:"Aider",kind:"mcp",bins:["aider"],mcpTarget:"generic",configKey:"aider",website:!1,detect:!0},{id:"continue",label:"Continue",kind:"mcp",bins:["continue"],mcpTarget:"vscode",configKey:"continue",website:!1,detect:!0},{id:"goose",label:"Goose",kind:"mcp",bins:["goose"],mcpTarget:"generic",configKey:"goose",website:!1,detect:!0},{id:"amp",label:"Amp",kind:"mcp",bins:["amp"],mcpTarget:"generic",configKey:"amp",website:!1,detect:!0},{id:"generic",label:"Generic MCP",kind:"mcp",bins:[],mcpTarget:"generic",configKey:"genericMcp",website:!0,detect:!1}]);function Me(){return Ht.filter(e=>e.website)}var ne=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function oe(e=process.env){let r=String(e?.ORACLE_RESEARCH_MODE??e?.ORACLE_RLM_MODE??"").trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"||r==="research"}var $=Object.freeze(["oracle_cli","memory_add","memory_remove","memory_search","skill_load","skill_create","skill_list","cron_add","cron_list","cron_remove","meta_analyze","web_fetch","web_search","file_read","file_write","mcp_list","mcp_call","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","learn_skill","workspace_artifact","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vault_status","signer_status","signer_execute","signer_disarm","receipt_report","watch_create","watch_list","portfolio_snapshot","vision_analyze","browser_exec","xurl","knowledge_search"]),Wt="deny",sn=256*1024;var cn=Object.freeze({version:1,source:"default",defaultDecision:Wt,allow:$,deny:Object.freeze([])});var Jt=Object.freeze(["oracle_cli","memory_search","skill_load","skill_list","web_fetch","web_search","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vault_status","signer_status","receipt_report","watch_list","portfolio_snapshot","vision_analyze","knowledge_search"]),un=new Set(Jt);var ie=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),dn=Object.freeze({wallets:"wallet",smart_wallet:"wallet",pools:"pool",new_pool:"pool",nft:"nft_floor",nft_floors:"nft_floor",hyperliquid:"hl_flow",prediction:"prediction_market",prediction_markets:"prediction_market"}),x=(e,r=0,t=1)=>Math.min(t,Math.max(r,e)),y=e=>Number.isFinite(Number(e))?Number(e):null,zt=e=>Math.round(e*1e4)/1e4;function E(e,r,t,n=!0){!n||t===null||!Number.isFinite(t)||e.push({feature:r,value:zt(t)})}function Gt(e,r){let t=y(e.repeatBuys??e.repeat_buys??e.buyCount),n=y(e.walletWinRate??e.winRate);E(r,"repeat_buys",t===null?null:x((t-1)/4)*.38),E(r,"wallet_win_rate",n===null?null:(x(n)-.5)*.5)}function Vt(e,r){let t=y(e.ageHours??e.poolAgeHours),n=y(e.liquidityUsd??e.liquidity),o=e.liquidityLocked??e.locked;E(r,"pool_age",t===null?null:t<24?-.42:x(t/720)*.12),E(r,"liquidity",n===null?null:(x(Math.log10(Math.max(1,n))/7)-.5)*.28),E(r,"liquidity_lock",o==null?null:o?.12:-.28)}function Kt(e,r){let t=y(e.floorChange??e.floorChangePct),n=y(e.sales??e.saleCount);E(r,"floor_change",t===null?null:x(t,-1,1)*.35),E(r,"sales_depth",n===null?null:x(n/50)*.18)}function Yt(e,r){let t=y(e.flowImbalance??e.imbalance),n=y(e.fundingRate??e.funding);E(r,"flow_imbalance",t===null?null:x(t,-1,1)*.42),E(r,"funding",n===null?null:-x(n*100,-1,1)*.12)}function Xt(e,r){let t=y(e.marketProbability??e.marketPrice??e.probability),n=y(e.fairProbability??e.referenceProbability??e.fairValue);E(r,"probability_mispricing",t===null||n===null?null:x(n-t,-1,1)*.65);let o=y(e.liquidityUsd??e.liquidity);E(r,"market_liquidity",o===null?null:x(Math.log10(Math.max(1,o))/6)*.12)}var fn=Object.freeze({wallet:Gt,pool:Vt,nft_floor:Kt,hl_flow:Yt,prediction_market:Xt});function ae(e){try{return O.existsSync(e)}catch{return!1}}function z(e){for(let r of e)if(r&&ae(r))return r;return null}function se(e){try{return Fe(e,import.meta.url)}catch{return null}}function Qt(){let e=[d.join(l,"dist/data/desk-data.mjs"),d.join(l,"data/desk-data.mjs"),d.join(l,"src/data/desk-data.mjs")];for(let n of e)if(ae(n))try{let i=O.readFileSync(n,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],a=new Set(i.map(u=>u.toLowerCase()));if(a.size>=20)return{count:a.size,detail:`${a.size} provider ids (bundled desk-data)`}}catch{}let r=[d.join(l,"src/data/providers"),d.join(l,"dist/data/providers"),d.join(l,"data/providers")],t=z(r);if(!t)return{count:0,detail:"providers dir missing"};try{let n=O.readdirSync(t).filter(o=>o.endsWith(".mjs"));return{count:n.length,detail:`${n.length} provider modules`}}catch(n){return{count:0,detail:n instanceof Error?n.message:String(n)}}}function qe(){let e=z([se("skills"),d.join(l,"skills"),d.join(l,"dist/assets/skills"),d.join(l,"assets/skills")]);if(!e)return{count:0,trading:[],building:[]};let r=O.readdirSync(e),t=r.filter(o=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(o)),n=r.filter(o=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(o));return{count:r.length,trading:t,building:n}}function Zt(){let e=z([se("protocols/templates"),d.join(l,"protocols/templates"),d.join(l,"dist/assets/protocols/templates"),d.join(l,"assets/protocols/templates")]);return e?O.readdirSync(e).filter(t=>!t.startsWith(".")):qe().building.some(t=>/protocol-builder|dex-launch|token-launch/i.test(t))?["(via skills: protocol-builder / launch packs)"]:[]}function er(){let e=z([se("profiles"),d.join(l,"profiles"),d.join(l,"dist/assets/profiles"),d.join(l,"assets/profiles")]);return e?O.readdirSync(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&!r.name.startsWith("_")).map(r=>r.name):[]}function tr(){try{if($.includes("trade_lifecycle")&&!$.some(r=>/broadcast|wallet_sign/.test(r)))return!0}catch{}let e=[d.join(l,"src/capability-posture.mjs"),d.join(l,"dist/capability-posture.mjs"),d.join(l,"capability-posture.mjs"),d.join(l,"dist/public-control/policy-schema.mjs"),d.join(l,"README.md"),d.join(l,"package.json")];for(let r of e)if(ae(r))try{let t=O.readFileSync(r,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(t))return!0}catch{}return!1}function De(e=process.env){let r=[],t=(c,h,A,I=1)=>{r.push({id:c,status:h,detail:A,weight:I})},[n,o]=process.versions.node.split(".").map(Number),i=n>20||n===20&&o>=19;t("node",i?"ok":"fail",`node ${process.versions.node}`,2);let u=["oracle_cli","research_delegate","trade_lifecycle","signal_score","skill_load","learn_skill","code_eval","cron_add","web_fetch"].filter(c=>!$.includes(c));t("agent_tools",u.length===0?"ok":"warn",u.length===0?`safe tools ${$.length}; signal_score present`:`missing tools: ${u.join(",")}`,3),t("research_attributes","ok",`attrs [${ne.join(", ")}]; mode=${oe(e)?"ON":"off"}`,2);let f=Qt();t("providers",f.count>=40?"ok":f.count>=10?"warn":"fail",f.detail,3);let g=qe();t("skills_trading_build",g.trading.length>=5&&g.building.length>=4?"ok":g.count>=10?"warn":"fail",`${g.count} skills; trading=${g.trading.length} building=${g.building.length}`,3);let p=Zt();t("protocol_templates",p.length>=2?"ok":"warn",p.length?p.join(", "):"none",2);let w=er();t("profiles",w.includes("protocol-builder")&&w.includes("oracle")?"ok":w.length>=1?"warn":"fail",w.join(", ")||"none",2),t("signals_engine",ie.length>=4?"ok":"fail",`types: ${ie.join(", ")} (cold / no hot exec)`,2);let _=Me();t("harness_roster",_.length>=8?"ok":"warn",`${_.length} supported harnesses; Oracle native default; MCP inbound only`,2),t("custody_prepare_only",tr()?"ok":"fail","public plane prepare-only",4);let S=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";t("data_url","ok",S,1);let k=0,T=0;for(let c of r)T+=c.weight,c.status==="ok"?k+=c.weight:c.status==="warn"&&(k+=c.weight*.5);let m=T?Math.round(k/T*100):0,v=!r.some(c=>c.status==="fail")&&m>=70,H=v?`AGENTIC READY ${m}% \u2014 Oracle is the crypto control plane (prepare-only); pair coding harnesses via MCP for build.`:`AGENTIC GAPS ${m}% \u2014 fix fail/warn checks before calling Oracle the default crypto harness.`;return{ok:v,score:k,max:T,pct:m,summary:H,researchMode:oe(e),attributes:[...ne],packageRoot:l,checks:r}}function kt(){let[e,r]=process.versions.node.split(".").map(Number);return e>20||e===20&&r>=19}function Dr(e){if(!M.existsSync(e))return{};let r={};for(let t of M.readFileSync(e,"utf8").split(/\r?\n/)){let n=t.match(/^([A-Z0-9_]+)=(.*)$/);n&&(r[n[1]]=n[2])}return r}async function jr(e){let r=e.replace(/\/$/,"");for(let t of["/health","/public/health"])try{if((await fetch(r+t)).ok)return!0}catch{}return!1}var zc={name:"doctor",summary:"check the read plane (+ optional --agentic readiness score)",group:"read",usage:"oracle doctor [--json] [--agentic] [--first-hour]",async run(e){let r=e.argv.includes("--json"),t=e.argv.includes("--agentic"),n=e.argv.includes("--first-hour"),o=[],i=!1,a=(c,h,A,I=null)=>{o.push({id:c,status:h,detail:A,fix:I}),h==="fail"&&(i=!0)};a("node",kt()?"ok":"fail",`node ${process.versions.node}`,kt()?null:"install node >= 20.19");let u=e.paths.oracleExecEnvPath(),f=Dr(u),g=process.env.ORACLE_ROUTE_ATTESTATION_SECRET||process.env.MAD_ROUTE_ATTESTATION_SECRET||process.env.ORACLE_ATTESTATION_SECRET||process.env.ORACLE_STAMP_HMAC_SECRET||f.ORACLE_ROUTE_ATTESTATION_SECRET||f.MAD_ROUTE_ATTESTATION_SECRET||f.ORACLE_ATTESTATION_SECRET||f.ORACLE_STAMP_HMAC_SECRET;a("attestation_secret",g?"ok":"warn",g?"present":"missing",g?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let p=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",w=await jr(p),_=e.paths.loadDeskRouting&&(process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL)?`desk ${process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL}`:null;a("data_server",w?"ok":"warn",w?`reachable ${p}${_?` (${_})`:""}`:`down ${p}`,w?null:p.includes("127.0.0.1")||p.includes("localhost")?"oracle data serve OR set ~/.config/oracle/desk.json to YOUR_DESK_HOST":"check the desk URL in ~/.config/oracle/desk.json (/public/health)");let S=Pe();a("harness_model","ok","Oracle native harness is default; external harnesses are inbound MCP only (oracle harness detect)",null),a("hermes_opt_in","ok",S.ok?`detected ${S.bin} (${S.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let k=At.join(e.paths.hermesRoot(),"profiles"),T=0;M.existsSync(k)&&(T=M.readdirSync(k,{withFileTypes:!0}).filter(c=>c.isDirectory()).length),a("hermes_lanes","ok",T>0?`${T} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);{let c=At.join(k,"oracle",".env"),h=[];if(M.existsSync(c)){let A=M.readFileSync(c,"utf8");/^TELEGRAM_BOT_TOKEN=.+/m.test(A)&&h.push("telegram"),/^DISCORD_BOT_TOKEN=.+/m.test(A)&&h.push("discord"),/^SLACK_BOT_TOKEN=.+/m.test(A)&&h.push("slack")}h.length?S.ok?a("messaging","ok",`${h.join("/")} configured \xB7 runtime ${S.source}`,null):a("messaging","warn",`${h.join("/")} token set but messaging runtime missing \u2014 bot cannot answer`,"oracle bootstrap, then oracle setup gateway restart"):a("messaging","ok","no channel tokens configured (optional \u2014 oracle setup)",null)}let m=null;if(t){m=De(process.env);for(let c of m.checks)a(`agentic_${c.id}`,c.status,c.detail,null)}let v=null;if(n){let{firstHourReport:c}=await Promise.resolve().then(()=>(Ne(),xt)),{probeSigner:h,probeQuote:A}=await Promise.resolve().then(()=>(vt(),St));v=c({signerReachable:await h(process.env),quote:await A()});for(let I of v.checks)a(`hour_${I.id}`,I.status,I.detail,I.fix)}let H={ok:!i&&(m?m.ok:!0)&&(v?v.ok:!0),checks:o,...v?{firstHour:v}:{},...m?{agentic:{pct:m.pct,summary:m.summary,attributes:m.attributes,researchMode:m.researchMode}}:{}};if(r)process.stdout.write(JSON.stringify(H,null,2)+`
|
|
3
|
+
`);return 0}}});import M from"node:fs";import _t from"node:path";import $e from"node:fs";import P from"node:path";z();var Dt="0.19.0",ln=`hermes-agent==${Dt}`;var Be="0.12.1",dn=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Be}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Be}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function qt(){return P.join(R(),"runtime")}function jt(){return P.join(qt(),"venv")}function Ut(e){let r=process.platform==="win32"?"Scripts":"bin",t=process.platform==="win32"?`${e}.exe`:e;return P.join(jt(),r,t)}function Ht(){return Ut("hermes")}function Wt(e){let r=process.platform==="win32"&&!P.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let t of(process.env.PATH||"").split(P.delimiter))if(t)for(let n of r){let o=P.join(t,`${e}${n}`);try{if($e.existsSync(o))return o}catch{}}return null}function Fe(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=Ht();if($e.existsSync(e))return{ok:!0,bin:e,source:"managed"};let r=Wt("hermes");return r?{ok:!0,bin:r,source:"path"}:{ok:!1,bin:null,source:null}}import _ from"node:fs";import d from"node:path";z();import{existsSync as De,readFileSync as zt}from"node:fs";import{dirname as Me,join as oe}from"node:path";import{fileURLToPath as Jt}from"node:url";function Gt(e){let r=Me(Jt(e));for(let t=0;t<8;t+=1){let n=oe(r,"package.json");if(De(n))try{let i=JSON.parse(zt(n,"utf8"));if(i&&typeof i.version=="string")return r}catch{}let o=Me(r);if(o===r)break;r=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function qe(e,r){let t=Gt(r),n=oe(t,e);return De(n)?n:oe(t,"dist","assets",e)}var Vt=Object.freeze([{id:"oracle",label:"Oracle Native",kind:"oracle",bins:["oracle"],website:!0,detect:!0},{id:"hermes",label:"Hermes Agent",kind:"mcp",bins:["hermes"],mcpTarget:"generic",configKey:"hermes",website:!0,detect:!0},{id:"claude",label:"Claude Code",kind:"mcp",bins:["claude"],mcpTarget:"claude-code",configKey:"claudeCode",website:!0,detect:!0},{id:"claude-desktop",label:"Claude Desktop",kind:"mcp",bins:[],mcpTarget:"claude-desktop",configKey:"claudeDesktop",website:!0,detect:!1},{id:"chatgpt",label:"ChatGPT",kind:"mcp",bins:[],mcpTarget:"chatgpt",configKey:"chatgpt",website:!0,detect:!1},{id:"codex",label:"OpenAI Codex",kind:"mcp",bins:["codex"],mcpTarget:"codex",configKey:"codex",website:!0,detect:!0},{id:"cursor",label:"Cursor",kind:"mcp",bins:["cursor","cursor-agent"],mcpTarget:"cursor",configKey:"cursor",website:!0,detect:!0},{id:"windsurf",label:"Windsurf",kind:"mcp",bins:["windsurf"],mcpTarget:"vscode",configKey:"windsurf",website:!0,detect:!0},{id:"vscode",label:"VS Code / Copilot",kind:"mcp",bins:["code","code-insiders"],mcpTarget:"vscode",configKey:"vscode",website:!0,detect:!0},{id:"openclaw",label:"OpenClaw",kind:"mcp",bins:["openclaw","claw"],mcpTarget:"generic",configKey:"openclaw",website:!0,detect:!0},{id:"perplexity",label:"Perplexity",kind:"mcp",bins:["perplexity","pplx"],mcpTarget:"generic",configKey:"perplexity",website:!0,detect:!0},{id:"manus",label:"Manus",kind:"mcp",bins:["manus"],mcpTarget:"generic",configKey:"manus",website:!0,detect:!0},{id:"prime",label:"Prime Intellect Agent",kind:"mcp",bins:["prime-agent","prime"],mcpTarget:"generic",configKey:"prime",website:!1,detect:!0},{id:"opencode",label:"OpenCode",kind:"mcp",bins:["opencode"],mcpTarget:"generic",configKey:"opencode",website:!1,detect:!0},{id:"aider",label:"Aider",kind:"mcp",bins:["aider"],mcpTarget:"generic",configKey:"aider",website:!1,detect:!0},{id:"continue",label:"Continue",kind:"mcp",bins:["continue"],mcpTarget:"vscode",configKey:"continue",website:!1,detect:!0},{id:"goose",label:"Goose",kind:"mcp",bins:["goose"],mcpTarget:"generic",configKey:"goose",website:!1,detect:!0},{id:"amp",label:"Amp",kind:"mcp",bins:["amp"],mcpTarget:"generic",configKey:"amp",website:!1,detect:!0},{id:"generic",label:"Generic MCP",kind:"mcp",bins:[],mcpTarget:"generic",configKey:"genericMcp",website:!0,detect:!1}]);function je(){return Vt.filter(e=>e.website)}var ie=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function ae(e=process.env){let r=String(e?.ORACLE_RESEARCH_MODE??e?.ORACLE_RLM_MODE??"").trim().toLowerCase();return r==="1"||r==="true"||r==="yes"||r==="on"||r==="research"}var B=Object.freeze(["oracle_cli","memory_add","memory_remove","memory_search","skill_load","skill_create","skill_list","cron_add","cron_list","cron_remove","meta_analyze","web_fetch","web_search","file_read","file_write","mcp_list","mcp_call","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","learn_skill","workspace_artifact","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vault_status","signer_status","signer_execute","signer_disarm","receipt_report","watch_create","watch_list","portfolio_snapshot","vision_analyze","browser_exec","xurl","knowledge_search"]),Kt="deny",bn=256*1024;var En=Object.freeze({version:1,source:"default",defaultDecision:Kt,allow:B,deny:Object.freeze([])});var Yt=Object.freeze(["oracle_cli","memory_search","skill_load","skill_list","web_fetch","web_search","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vault_status","signer_status","receipt_report","watch_list","portfolio_snapshot","vision_analyze","knowledge_search"]),xn=new Set(Yt);var se=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),An=Object.freeze({wallets:"wallet",smart_wallet:"wallet",pools:"pool",new_pool:"pool",nft:"nft_floor",nft_floors:"nft_floor",hyperliquid:"hl_flow",prediction:"prediction_market",prediction_markets:"prediction_market"}),x=(e,r=0,t=1)=>Math.min(t,Math.max(r,e)),y=e=>Number.isFinite(Number(e))?Number(e):null,Xt=e=>Math.round(e*1e4)/1e4;function b(e,r,t,n=!0){!n||t===null||!Number.isFinite(t)||e.push({feature:r,value:Xt(t)})}function Qt(e,r){let t=y(e.repeatBuys??e.repeat_buys??e.buyCount),n=y(e.walletWinRate??e.winRate);b(r,"repeat_buys",t===null?null:x((t-1)/4)*.38),b(r,"wallet_win_rate",n===null?null:(x(n)-.5)*.5)}function Zt(e,r){let t=y(e.ageHours??e.poolAgeHours),n=y(e.liquidityUsd??e.liquidity),o=e.liquidityLocked??e.locked;b(r,"pool_age",t===null?null:t<24?-.42:x(t/720)*.12),b(r,"liquidity",n===null?null:(x(Math.log10(Math.max(1,n))/7)-.5)*.28),b(r,"liquidity_lock",o==null?null:o?.12:-.28)}function er(e,r){let t=y(e.floorChange??e.floorChangePct),n=y(e.sales??e.saleCount);b(r,"floor_change",t===null?null:x(t,-1,1)*.35),b(r,"sales_depth",n===null?null:x(n/50)*.18)}function tr(e,r){let t=y(e.flowImbalance??e.imbalance),n=y(e.fundingRate??e.funding);b(r,"flow_imbalance",t===null?null:x(t,-1,1)*.42),b(r,"funding",n===null?null:-x(n*100,-1,1)*.12)}function rr(e,r){let t=y(e.marketProbability??e.marketPrice??e.probability),n=y(e.fairProbability??e.referenceProbability??e.fairValue);b(r,"probability_mispricing",t===null||n===null?null:x(n-t,-1,1)*.65);let o=y(e.liquidityUsd??e.liquidity);b(r,"market_liquidity",o===null?null:x(Math.log10(Math.max(1,o))/6)*.12)}var vn=Object.freeze({wallet:Qt,pool:Zt,nft_floor:er,hl_flow:tr,prediction_market:rr});function ce(e){try{return _.existsSync(e)}catch{return!1}}function J(e){for(let r of e)if(r&&ce(r))return r;return null}function ue(e){try{return qe(e,import.meta.url)}catch{return null}}function nr(){let e=[d.join(l,"dist/data/desk-data.mjs"),d.join(l,"data/desk-data.mjs"),d.join(l,"src/data/desk-data.mjs")];for(let n of e)if(ce(n))try{let i=_.readFileSync(n,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],s=new Set(i.map(u=>u.toLowerCase()));if(s.size>=20)return{count:s.size,detail:`${s.size} provider ids (bundled desk-data)`}}catch{}let r=[d.join(l,"src/data/providers"),d.join(l,"dist/data/providers"),d.join(l,"data/providers")],t=J(r);if(!t)return{count:0,detail:"providers dir missing"};try{let n=_.readdirSync(t).filter(o=>o.endsWith(".mjs"));return{count:n.length,detail:`${n.length} provider modules`}}catch(n){return{count:0,detail:n instanceof Error?n.message:String(n)}}}function Ue(){let e=J([ue("skills"),d.join(l,"skills"),d.join(l,"dist/assets/skills"),d.join(l,"assets/skills")]);if(!e)return{count:0,trading:[],building:[]};let r=_.readdirSync(e),t=r.filter(o=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(o)),n=r.filter(o=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(o));return{count:r.length,trading:t,building:n}}function or(){let e=J([ue("protocols/templates"),d.join(l,"protocols/templates"),d.join(l,"dist/assets/protocols/templates"),d.join(l,"assets/protocols/templates")]);return e?_.readdirSync(e).filter(t=>!t.startsWith(".")):Ue().building.some(t=>/protocol-builder|dex-launch|token-launch/i.test(t))?["(via skills: protocol-builder / launch packs)"]:[]}function ir(){let e=J([ue("profiles"),d.join(l,"profiles"),d.join(l,"dist/assets/profiles"),d.join(l,"assets/profiles")]);return e?_.readdirSync(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&!r.name.startsWith("_")).map(r=>r.name):[]}function ar(){try{if(B.includes("trade_lifecycle")&&!B.some(r=>/broadcast|wallet_sign/.test(r)))return!0}catch{}let e=[d.join(l,"src/capability-posture.mjs"),d.join(l,"dist/capability-posture.mjs"),d.join(l,"capability-posture.mjs"),d.join(l,"dist/public-control/policy-schema.mjs"),d.join(l,"README.md"),d.join(l,"package.json")];for(let r of e)if(ce(r))try{let t=_.readFileSync(r,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(t))return!0}catch{}return!1}function He(e=process.env){let r=[],t=(c,h,v,I=1)=>{r.push({id:c,status:h,detail:v,weight:I})},[n,o]=process.versions.node.split(".").map(Number),i=n>20||n===20&&o>=19;t("node",i?"ok":"fail",`node ${process.versions.node}`,2);let u=["oracle_cli","research_delegate","trade_lifecycle","signal_score","skill_load","learn_skill","code_eval","cron_add","web_fetch"].filter(c=>!B.includes(c));t("agent_tools",u.length===0?"ok":"warn",u.length===0?`safe tools ${B.length}; signal_score present`:`missing tools: ${u.join(",")}`,3),t("research_attributes","ok",`attrs [${ie.join(", ")}]; mode=${ae(e)?"ON":"off"}`,2);let f=nr();t("providers",f.count>=40?"ok":f.count>=10?"warn":"fail",f.detail,3);let g=Ue();t("skills_trading_build",g.trading.length>=5&&g.building.length>=4?"ok":g.count>=10?"warn":"fail",`${g.count} skills; trading=${g.trading.length} building=${g.building.length}`,3);let p=or();t("protocol_templates",p.length>=2?"ok":"warn",p.length?p.join(", "):"none",2);let w=ir();t("profiles",w.includes("protocol-builder")&&w.includes("oracle")?"ok":w.length>=1?"warn":"fail",w.join(", ")||"none",2),t("signals_engine",se.length>=4?"ok":"fail",`types: ${se.join(", ")} (cold / no hot exec)`,2);let O=je();t("harness_roster",O.length>=8?"ok":"warn",`${O.length} supported harnesses; Oracle native default; MCP inbound only`,2),t("custody_prepare_only",ar()?"ok":"fail","public plane prepare-only",4);let S=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";t("data_url","ok",S,1);let k=0,T=0;for(let c of r)T+=c.weight,c.status==="ok"?k+=c.weight:c.status==="warn"&&(k+=c.weight*.5);let m=T?Math.round(k/T*100):0,A=!r.some(c=>c.status==="fail")&&m>=70,H=A?`AGENTIC READY ${m}% \u2014 Oracle is the crypto control plane (prepare-only); pair coding harnesses via MCP for build.`:`AGENTIC GAPS ${m}% \u2014 fix fail/warn checks before calling Oracle the default crypto harness.`;return{ok:A,score:k,max:T,pct:m,summary:H,researchMode:ae(e),attributes:[...ie],packageRoot:l,checks:r}}function Ct(){let[e,r]=process.versions.node.split(".").map(Number);return e>20||e===20&&r>=19}function Qr(e){if(!M.existsSync(e))return{};let r={};for(let t of M.readFileSync(e,"utf8").split(/\r?\n/)){let n=t.match(/^([A-Z0-9_]+)=(.*)$/);n&&(r[n[1]]=n[2])}return r}async function Zr(e){let r=e.replace(/\/$/,"");for(let t of["/health","/public/health"])try{if((await fetch(r+t)).ok)return!0}catch{}return!1}var Mu={name:"doctor",summary:"check the read plane (+ optional --agentic readiness score)",group:"read",usage:"oracle doctor [--json] [--agentic] [--first-hour]",async run(e){let r=e.argv.includes("--json"),t=e.argv.includes("--agentic"),n=e.argv.includes("--first-hour"),o=[],i=!1,s=(c,h,v,I=null)=>{o.push({id:c,status:h,detail:v,fix:I}),h==="fail"&&(i=!0)};s("node",Ct()?"ok":"fail",`node ${process.versions.node}`,Ct()?null:"install node >= 20.19");let u=e.paths.oracleExecEnvPath(),f=Qr(u),g=process.env.ORACLE_ROUTE_ATTESTATION_SECRET||process.env.MAD_ROUTE_ATTESTATION_SECRET||process.env.ORACLE_ATTESTATION_SECRET||process.env.ORACLE_STAMP_HMAC_SECRET||f.ORACLE_ROUTE_ATTESTATION_SECRET||f.MAD_ROUTE_ATTESTATION_SECRET||f.ORACLE_ATTESTATION_SECRET||f.ORACLE_STAMP_HMAC_SECRET;s("attestation_secret",g?"ok":"warn",g?"present":"missing",g?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let p=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",w=await Zr(p),O=e.paths.loadDeskRouting&&(process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL)?`desk ${process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL}`:null;s("data_server",w?"ok":"warn",w?`reachable ${p}${O?` (${O})`:""}`:`down ${p}`,w?null:p.includes("127.0.0.1")||p.includes("localhost")?"oracle data serve OR set ~/.config/oracle/desk.json to YOUR_DESK_HOST":"check the desk URL in ~/.config/oracle/desk.json (/public/health)");let S=Fe();s("harness_model","ok","Oracle native harness is default; external harnesses are inbound MCP only (oracle harness detect)",null),s("hermes_opt_in","ok",S.ok?`detected ${S.bin} (${S.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let k=_t.join(e.paths.hermesRoot(),"profiles"),T=0;M.existsSync(k)&&(T=M.readdirSync(k,{withFileTypes:!0}).filter(c=>c.isDirectory()).length),s("hermes_lanes","ok",T>0?`${T} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);{let c=_t.join(k,"oracle",".env"),h=[];if(M.existsSync(c)){let v=M.readFileSync(c,"utf8");/^TELEGRAM_BOT_TOKEN=.+/m.test(v)&&h.push("telegram"),/^DISCORD_BOT_TOKEN=.+/m.test(v)&&h.push("discord"),/^SLACK_BOT_TOKEN=.+/m.test(v)&&h.push("slack")}h.length?S.ok?s("messaging","ok",`${h.join("/")} configured \xB7 runtime ${S.source}`,null):s("messaging","warn",`${h.join("/")} token set but messaging runtime missing \u2014 bot cannot answer`,"oracle bootstrap, then oracle setup gateway restart"):s("messaging","ok","no channel tokens configured (optional \u2014 oracle setup)",null)}let m=null;if(t){m=He(process.env);for(let c of m.checks)s(`agentic_${c.id}`,c.status,c.detail,null)}let A=null;if(n){let{firstHourReport:c}=await Promise.resolve().then(()=>(Re(),Tt)),{probeSigner:h,probeQuote:v}=await Promise.resolve().then(()=>(Ot(),It));A=c({signerReachable:await h(process.env),quote:await v()});for(let I of A.checks)s(`hour_${I.id}`,I.status,I.detail,I.fix)}let H={ok:!i&&(m?m.ok:!0)&&(A?A.ok:!0),checks:o,...A?{firstHour:A}:{},...m?{agentic:{pct:m.pct,summary:m.summary,attributes:m.attributes,researchMode:m.researchMode}}:{}};if(r)process.stdout.write(JSON.stringify(H,null,2)+`
|
|
4
4
|
`);else{for(let c of o)process.stdout.write(`${c.status.toUpperCase().padEnd(4)} ${c.id}: ${c.detail}
|
|
5
5
|
`),c.fix&&process.stdout.write(` fix: ${c.fix}
|
|
6
6
|
`);m&&process.stdout.write(`
|
|
7
7
|
${m.summary}
|
|
8
|
-
`)}return H.ok?0:1}};export{
|
|
8
|
+
`)}return H.ok?0:1}};export{Mu as default};
|