@oracle-agent/oracle 0.27.0 → 0.28.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.
@@ -1,4 +1,4 @@
1
- var At=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 Oe=(e,r)=>{for(var t in r)At(e,t,{get:r[t],enumerable:!0})};import H from"node:fs";import vt from"node:os";import N from"node:path";import{fileURLToPath as kt}from"node:url";function te(){return process.env.ORACLE_FAKE_HOME||vt.homedir()}function It(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function C(){return It()?process.env.ORACLE_CONFIG_DIR||N.join(te(),".config","oracle"):N.join(te(),".config","oracle")}function _t(){return N.join(C(),"desk.json")}function Ot(){return N.join(C(),"env")}function O({force:e=!1}={}){if(O._done&&!e)return O._result||null;O._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=Ot();if(H.existsSync(o))for(let i of H.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(H.existsSync(o)){let i=JSON.parse(H.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)),O._result=Object.keys(r).length?r:null,O._result}var Tt,l,W=a(()=>{Tt=N.dirname(kt(import.meta.url)),l=N.resolve(Tt,"../..");try{O()}catch{}});var ce,En,qe=a(()=>{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}},En=new Map(Object.values(ce).map(e=>[e.chainId,e]))});function M(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=a(()=>{});var De=a(()=>{});var je=a(()=>{});var q=a(()=>{});var P=a(()=>{});var de=a(()=>{q();P()});import{isAddress as Nn}from"ethers";var fe=a(()=>{de();q();P()});import{Interface as er,isAddress as $n}from"ethers";var Dn,Ue=a(()=>{fe();q();P();Dn=new er(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as tr,isAddress as Hn}from"ethers";var Gn,Vn,He=a(()=>{fe();q();P();Gn=new tr(["function approve(address spender,uint256 amount) returns (bool)"]),Vn=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var B=a(()=>{});import{Interface as rr,MaxUint256 as to,isAddress as ro,keccak256 as no,toUtf8Bytes as oo}from"ethers";var lo,D=a(()=>{je();Ue();He();B();P();lo=new rr(["function approve(address spender,uint256 amount) returns (bool)"])});var po,mo,Je=a(()=>{po=300*1e3,mo=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var G=a(()=>{D()});import{Address as Eo,NETWORK as bo,OutScript as xo,RawTx as So,SigHash as Ao,TEST_NETWORK as vo,Transaction as ko}from"@scure/btc-signer";var me=a(()=>{});import{createHash as or}from"node:crypto";import{base58 as Oo}from"@scure/base";import{getCompiledTransactionMessageDecoder as Co}from"@solana/transaction-messages";var ze,Ro,he=a(()=>{ze=e=>or("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),Ro=new Map([[ze("route"),{name:"route",prefixBytes:0}],[ze("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});var Ge=a(()=>{});var Do,Ve=a(()=>{Ge();Do=64*1024});var Ke=a(()=>{Ve()});var Ye=a(()=>{Ke()});var Qo,Zo,we=a(()=>{B();Ye();Qo=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"}),Zo=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 ri,ge=a(()=>{B();ri="0x"+"00".repeat(32)});var ir,si,ye=a(()=>{ge();B();ir=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(ir.map(e=>e[0]))});var V=a(()=>{B()});import{Interface as tt}from"ethers";var lr,Ti,dr,Ii,_i,Oi,Ni,fr,Ci,K=a(()=>{D();de();Je();G();me();he();we();ye();V();lr=new Set(["evm","evm-swap","evm-bridge","evm-nft","btc","sol","hl","poly","lighter"]),Ti=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}),dr=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"}}),Ii=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),_i=new tt(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Oi=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"]),Ni=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"}}),fr=Object.freeze([...lr]),Ci=Object.freeze({...dr})});import{encode as Pi}from"@msgpack/msgpack";import{keccak256 as $i,verifyTypedData as Fi}from"ethers";var Mi,qi,Ee=a(()=>{Mi=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),qi=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var be=a(()=>{V()});import{ed25519 as Gi}from"@noble/curves/ed25519.js";import{base58 as Ki}from"@scure/base";import{RawTx as Xi,SigHash as Qi,Transaction as Zi}from"@scure/btc-signer";import{Transaction as ta,keccak256 as ra,verifyTypedData as na}from"ethers";var xe=a(()=>{Ee();be()});import{base58 as la}from"@scure/base";var Y=a(()=>{K();G();D();xe()});var nt=a(()=>{Y();K()});var Sa,Aa,va,X=a(()=>{Sa=Object.freeze({N:1<<17,r:8,p:1}),Aa=256*1024*1024,va=16*1024});import{homedir as Se}from"node:os";import{join as Ae}from"node:path";var ot,hr,_a,it=a(()=>{ot=process.env.ORACLE_PUBLIC_DESKTOP==="1",hr=ot?process.env.ORACLE_CONFIG_DIR||Ae(Se(),".config","oracle"):Ae(Se(),".config","oracle"),_a=ot?hr:Ae(Se(),".config","mad-desk")});var La,Pa,Ba,at=a(()=>{it();La="0".repeat(64),Pa=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"}),Ba=Promise.resolve()});var ct=a(()=>{at();X();Y()});var ut=a(()=>{});import{Wallet as Wa}from"ethers";import{base58 as za}from"@scure/base";import{ed25519 as Va}from"@noble/curves/ed25519.js";import{NETWORK as Ya,TEST_NETWORK as Xa,WIF as Qa,p2wpkh as Za}from"@scure/btc-signer";import{pubECDSA as ts}from"@scure/btc-signer/utils.js";var lt=a(()=>{});import E from"node:path";import gr from"node:os";import{createHash as yr,randomBytes as Rs}from"node:crypto";import{Interface as ve,keccak256 as Ps}from"ethers";import{Transaction as $s}from"@scure/btc-signer";import{ed25519 as Ms}from"@noble/curves/ed25519.js";function dt(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||E.join(process.env.XDG_STATE_HOME||E.join(gr.homedir(),".local","state"),"oracle"),t=yr("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 ic,ac,sc,ft=a(()=>{nt();Y();X();ct();ut();D();K();G();xe();we();ye();V();be();ge();Ee();me();he();lt();ic=new ve(["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"]),ac=new ve(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),sc=new ve(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import ke from"node:fs";import pt from"node:path";import{homedir as Er}from"node:os";function br(){return process.env.ORACLE_CONFIG_DIR||pt.join(Er(),".config","oracle")}function j(){let e=dt(pt.join(br(),"signer")),r=ke.existsSync(e.vault),t=ke.existsSync(e.lock),n=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:ke.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 yc,Te=a(()=>{ue();De();ft();X();yc=Object.freeze([{type:"function",function:{name:"vault_status",description:"Read local Oracle vault/signer readiness. Never returns key material.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_status",description:"Ping the loopback signer. Fails closed if it is not running.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_execute",description:"Broadcast one already-confirmed local artifact. Requires a one-use confirmationNonce from the local signer TTY confirm. Cannot mint confirmation itself.",parameters:{type:"object",properties:{artifact:{type:"object"},confirmationNonce:{type:"string",minLength:32,maxLength:128}},required:["artifact","confirmationNonce"],additionalProperties:!1}}},{type:"function",function:{name:"signer_disarm",description:"Global kill switch. Stops the local signer from broadcasting.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"receipt_report",description:"Receipt or it did not happen. Requires transactionHash/hash/txid.",parameters:{type:"object",properties:{receipt:{type:"object"},transactionHash:{type:"string"},hash:{type:"string"},txid:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"watch_create",description:"Create an alert-only watch. Never execute.",parameters:{type:"object",properties:{chain:{type:"string"},token:{type:"string"},condition:{type:"string"},note:{type:"string"}},required:["chain","token","condition"],additionalProperties:!1}}},{type:"function",function:{name:"watch_list",description:"List local alert-only watches.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"portfolio_snapshot",description:"How to read the one portfolio snapshot. knownUsd is incomplete if a provider is missing.",parameters:{type:"object",properties:{},additionalProperties:!1}}}])});function Q(e){return String(e||"").trim()||void 0}function Sr(e,{required:r=!1}={}){let t=Q(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!xr.has(t))throw new Error(`unsupported provider: ${t}`);return t}function Ar(e,{required:r=!1}={}){let t=Q(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 vr(e){let r=Q(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 mt({provider:e,model:r,baseUrl:t}={},{requireModel:n=!1}={}){let o=Sr(e),i=Ar(r,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:vr(t)};if(Q(t))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var xr,ht=a(()=>{xr=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","custom","anthropic-oauth","openai-codex","xai-oauth"])});import wt from"node:fs";import kr from"node:path";function Ir(){return kr.join(C(),"model.json")}function $(e){return String(e||"").trim()||void 0}function _r(e={}){let r=$(e.backend)?.toLowerCase()||"auto",t=mt({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),n=$(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=$(e.reasoningEffort),s=$(e.computeHost||e.remoteHost),u=$(e.computeUser||e.remoteUser),f=$(e.computePath||e.remotePath);if(!Tr.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 gt(){let e=Ir();if(!wt.existsSync(e))return null;try{return _r(JSON.parse(wt.readFileSync(e,"utf8")))}catch{return null}}var Tr,yt=a(()=>{W();ht();Tr=new Set(["auto","standalone","hermes","remote","arch"])});var Et={};Oe(Et,{classifyReceipt:()=>M,configDir:()=>Rr,firstHourReport:()=>Ie,venueMap:()=>Z});import Or from"node:path";import{homedir as Nr}from"node:os";function Rr(e=process.env){return e.ORACLE_CONFIG_DIR||Or.join(Nr(),".config","oracle")}function Z({env:e=process.env,vault:r=null}={}){let t=r||j(),n=[];for(let[o,i]of Object.entries(ce)){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 Ie({env:e=process.env,model:r=gt(),vault:t=j(),signerReachable:n=!1,quote:o=null}={}){let i=[],s=(p,h,v,k=null)=>i.push({id:p,status:h,detail:v,fix:k}),u=(()=>{let[p,h]=process.versions.node.split(".").map(Number);return p>20||p===20&&h>=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 Cr.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:Z({env:e,vault:t})}}var Cr,_e=a(()=>{qe();Te();yt();ue();Cr=new Set(["127.0.0.1","::1","localhost"])});var bt={};Oe(bt,{classifyReceipt:()=>M,default:()=>Br,firstHourReport:()=>Ie,probeQuote:()=>Pr,probeSigner:()=>Lr,vaultStatus:()=>j});async function Lr(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 Pr(){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 Br,xt=a(()=>{_e();Te();Br={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=Z();if(r)return process.stdout.write(`${JSON.stringify({venues:t},null,2)}
1
+ var At=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 Oe=(e,r)=>{for(var t in r)At(e,t,{get:r[t],enumerable:!0})};import H from"node:fs";import vt from"node:os";import N from"node:path";import{fileURLToPath as kt}from"node:url";function te(){return process.env.ORACLE_FAKE_HOME||vt.homedir()}function It(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function C(){return It()?process.env.ORACLE_CONFIG_DIR||N.join(te(),".config","oracle"):N.join(te(),".config","oracle")}function _t(){return N.join(C(),"desk.json")}function Ot(){return N.join(C(),"env")}function O({force:e=!1}={}){if(O._done&&!e)return O._result||null;O._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=Ot();if(H.existsSync(o))for(let i of H.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(H.existsSync(o)){let i=JSON.parse(H.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)),O._result=Object.keys(r).length?r:null,O._result}var Tt,l,W=a(()=>{Tt=N.dirname(kt(import.meta.url)),l=N.resolve(Tt,"../..");try{O()}catch{}});var ce,En,qe=a(()=>{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}},En=new Map(Object.values(ce).map(e=>[e.chainId,e]))});function M(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=a(()=>{});var De=a(()=>{});var je=a(()=>{});var q=a(()=>{});var P=a(()=>{});var de=a(()=>{q();P()});import{isAddress as Nn}from"ethers";var fe=a(()=>{de();q();P()});import{Interface as er,isAddress as $n}from"ethers";var Dn,Ue=a(()=>{fe();q();P();Dn=new er(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as tr,isAddress as Hn}from"ethers";var Gn,Vn,He=a(()=>{fe();q();P();Gn=new tr(["function approve(address spender,uint256 amount) returns (bool)"]),Vn=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var B=a(()=>{});import{Interface as rr,MaxUint256 as to,isAddress as ro,keccak256 as no,toUtf8Bytes as oo}from"ethers";var lo,D=a(()=>{je();Ue();He();B();P();lo=new rr(["function approve(address spender,uint256 amount) returns (bool)"])});var po,mo,Je=a(()=>{po=300*1e3,mo=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var G=a(()=>{D()});import{Address as Eo,NETWORK as bo,OutScript as xo,RawTx as So,SigHash as Ao,TEST_NETWORK as vo,Transaction as ko}from"@scure/btc-signer";var me=a(()=>{});import{createHash as or}from"node:crypto";import{base58 as Oo}from"@scure/base";import{getCompiledTransactionMessageDecoder as Co}from"@solana/transaction-messages";var ze,Ro,he=a(()=>{ze=e=>or("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),Ro=new Map([[ze("route"),{name:"route",prefixBytes:0}],[ze("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});var Ge=a(()=>{});var Do,Ve=a(()=>{Ge();Do=64*1024});var Ke=a(()=>{Ve()});var Ye=a(()=>{Ke()});var Qo,Zo,we=a(()=>{B();Ye();Qo=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"}),Zo=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 ri,ge=a(()=>{B();ri="0x"+"00".repeat(32)});var ir,si,ye=a(()=>{ge();B();ir=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(ir.map(e=>e[0]))});var V=a(()=>{B()});import{Interface as tt}from"ethers";var lr,Ti,dr,Ii,_i,Oi,Ni,fr,Ci,K=a(()=>{D();de();Je();G();me();he();we();ye();V();lr=new Set(["evm","evm-swap","evm-bridge","evm-nft","btc","sol","hl","poly","lighter"]),Ti=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}),dr=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"}}),Ii=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),_i=new tt(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Oi=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"]),Ni=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"}}),fr=Object.freeze([...lr]),Ci=Object.freeze({...dr})});import{encode as Pi}from"@msgpack/msgpack";import{keccak256 as $i,verifyTypedData as Fi}from"ethers";var Mi,qi,Ee=a(()=>{Mi=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),qi=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var be=a(()=>{V()});import{ed25519 as Gi}from"@noble/curves/ed25519.js";import{base58 as Ki}from"@scure/base";import{RawTx as Xi,SigHash as Qi,Transaction as Zi}from"@scure/btc-signer";import{Transaction as ta,keccak256 as ra,verifyTypedData as na}from"ethers";var xe=a(()=>{Ee();be()});import{base58 as la}from"@scure/base";var Y=a(()=>{K();G();D();xe()});var nt=a(()=>{Y();K()});var Sa,Aa,va,X=a(()=>{Sa=Object.freeze({N:1<<17,r:8,p:1}),Aa=256*1024*1024,va=16*1024});import{homedir as Se}from"node:os";import{join as Ae}from"node:path";var ot,hr,_a,it=a(()=>{ot=process.env.ORACLE_PUBLIC_DESKTOP==="1",hr=ot?process.env.ORACLE_CONFIG_DIR||Ae(Se(),".config","oracle"):Ae(Se(),".config","oracle"),_a=ot?hr:Ae(Se(),".config","mad-desk")});var La,Pa,Ba,at=a(()=>{it();La="0".repeat(64),Pa=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"}),Ba=Promise.resolve()});var ct=a(()=>{at();X();Y()});var ut=a(()=>{});import{Wallet as Wa}from"ethers";import{base58 as za}from"@scure/base";import{ed25519 as Va}from"@noble/curves/ed25519.js";import{NETWORK as Ya,TEST_NETWORK as Xa,WIF as Qa,p2wpkh as Za}from"@scure/btc-signer";import{pubECDSA as ts}from"@scure/btc-signer/utils.js";var lt=a(()=>{});import E from"node:path";import gr from"node:os";import{createHash as yr,randomBytes as Rs}from"node:crypto";import{Interface as ve,keccak256 as Ps}from"ethers";import{Transaction as $s}from"@scure/btc-signer";import{ed25519 as Ms}from"@noble/curves/ed25519.js";function dt(e){let r=process.env.ORACLE_SIGNER_STATE_DIR||E.join(process.env.XDG_STATE_HOME||E.join(gr.homedir(),".local","state"),"oracle"),t=yr("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 ic,ac,sc,ft=a(()=>{nt();Y();X();ct();ut();D();K();G();xe();we();ye();V();be();ge();Ee();me();he();lt();ic=new ve(["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"]),ac=new ve(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),sc=new ve(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import ke from"node:fs";import pt from"node:path";import{homedir as Er}from"node:os";function br(){return process.env.ORACLE_CONFIG_DIR||pt.join(Er(),".config","oracle")}function j(){let e=dt(pt.join(br(),"signer")),r=ke.existsSync(e.vault),t=ke.existsSync(e.lock),n=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:ke.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 yc,Te=a(()=>{ue();De();ft();X();yc=Object.freeze([{type:"function",function:{name:"vault_status",description:"Read local Oracle vault/signer readiness. Never returns key material.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_status",description:"Ping the loopback signer. Fails closed if it is not running.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_execute",description:"Broadcast one already-confirmed local artifact. Requires a one-use confirmationNonce from the local signer TTY confirm. Cannot mint confirmation itself.",parameters:{type:"object",properties:{artifact:{type:"object"},confirmationNonce:{type:"string",minLength:32,maxLength:128}},required:["artifact","confirmationNonce"],additionalProperties:!1}}},{type:"function",function:{name:"signer_disarm",description:"Global kill switch. Stops the local signer from broadcasting.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"receipt_report",description:"Receipt or it did not happen. Requires transactionHash/hash/txid.",parameters:{type:"object",properties:{receipt:{type:"object"},transactionHash:{type:"string"},hash:{type:"string"},txid:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"watch_create",description:"Create an alert-only watch. Never execute.",parameters:{type:"object",properties:{chain:{type:"string"},token:{type:"string"},condition:{type:"string"},note:{type:"string"}},required:["chain","token","condition"],additionalProperties:!1}}},{type:"function",function:{name:"watch_list",description:"List local alert-only watches.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"portfolio_snapshot",description:"How to read the one portfolio snapshot. knownUsd is incomplete if a provider is missing.",parameters:{type:"object",properties:{},additionalProperties:!1}}}])});function Q(e){return String(e||"").trim()||void 0}function Sr(e,{required:r=!1}={}){let t=Q(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!xr.has(t))throw new Error(`unsupported provider: ${t}`);return t}function Ar(e,{required:r=!1}={}){let t=Q(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 vr(e){let r=Q(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 mt({provider:e,model:r,baseUrl:t}={},{requireModel:n=!1}={}){let o=Sr(e),i=Ar(r,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:vr(t)};if(Q(t))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var xr,ht=a(()=>{xr=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","custom","anthropic-oauth","openai-codex","xai-oauth"])});import wt from"node:fs";import kr from"node:path";function Ir(){return kr.join(C(),"model.json")}function $(e){return String(e||"").trim()||void 0}function _r(e={}){let r=$(e.backend)?.toLowerCase()||"auto",t=mt({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),n=$(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=$(e.reasoningEffort),s=$(e.computeHost||e.remoteHost),u=$(e.computeUser||e.remoteUser),f=$(e.computePath||e.remotePath);if(!Tr.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 gt(){let e=Ir();if(!wt.existsSync(e))return null;try{return _r(JSON.parse(wt.readFileSync(e,"utf8")))}catch{return null}}var Tr,yt=a(()=>{W();ht();Tr=new Set(["auto","standalone","hermes","remote","arch"])});var Et={};Oe(Et,{classifyReceipt:()=>M,configDir:()=>Rr,firstHourReport:()=>Ie,venueMap:()=>Z});import Or from"node:path";import{homedir as Nr}from"node:os";function Rr(e=process.env){return e.ORACLE_CONFIG_DIR||Or.join(Nr(),".config","oracle")}function Z({env:e=process.env,vault:r=null}={}){let t=r||j(),n=[];for(let[o,i]of Object.entries(ce)){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 Ie({env:e=process.env,model:r=gt(),vault:t=j(),signerReachable:n=!1,quote:o=null}={}){let i=[],s=(p,h,v,k=null)=>i.push({id:p,status:h,detail:v,fix:k}),u=(()=>{let[p,h]=process.versions.node.split(".").map(Number);return p>20||p===20&&h>=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 Cr.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:Z({env:e,vault:t})}}var Cr,_e=a(()=>{qe();Te();yt();ue();Cr=new Set(["127.0.0.1","::1","localhost"])});var bt={};Oe(bt,{classifyReceipt:()=>M,default:()=>Br,firstHourReport:()=>Ie,probeQuote:()=>Pr,probeSigner:()=>Lr,vaultStatus:()=>j});async function Lr(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 Pr(){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 Br,xt=a(()=>{_e();Te();Br={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=Z();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
3
  `);return 0}}});import ee from"node:fs";import $r from"node:path";import Ce from"node:fs";import R from"node:path";W();var Ct="0.19.0",Vr=`hermes-agent==${Ct}`;var Ne="0.12.1",Kr=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Ne}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Ne}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function Rt(){return R.join(C(),"runtime")}function Lt(){return R.join(Rt(),"venv")}function Pt(e){let r=process.platform==="win32"?"Scripts":"bin",t=process.platform==="win32"?`${e}.exe`:e;return R.join(Lt(),r,t)}function Bt(){return Pt("hermes")}function $t(e){let r=process.platform==="win32"&&!R.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let t of(process.env.PATH||"").split(R.delimiter))if(t)for(let n of r){let o=R.join(t,`${e}${n}`);try{if(Ce.existsSync(o))return o}catch{}}return null}function Re(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=Bt();if(Ce.existsSync(e))return{ok:!0,bin:e,source:"managed"};let r=$t("hermes");return r?{ok:!0,bin:r,source:"path"}:{ok:!1,bin:null,source:null}}import I from"node:fs";import d from"node:path";W();import{existsSync as Pe,readFileSync as Ft}from"node:fs";import{dirname as Le,join as re}from"node:path";import{fileURLToPath as Mt}from"node:url";function qt(e){let r=Le(Mt(e));for(let t=0;t<8;t+=1){let n=re(r,"package.json");if(Pe(n))try{let i=JSON.parse(Ft(n,"utf8"));if(i&&typeof i.version=="string")return r}catch{}let o=Le(r);if(o===r)break;r=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function Be(e,r){let t=qt(r),n=re(t,e);return Pe(n)?n:re(t,"dist","assets",e)}var Dt=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 $e(){return Dt.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 L=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"]),jt="deny",nn=256*1024;var on=Object.freeze({version:1,source:"default",defaultDecision:jt,allow:L,deny:Object.freeze([])});var ie=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),sn=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"}),b=(e,r=0,t=1)=>Math.min(t,Math.max(r,e)),g=e=>Number.isFinite(Number(e))?Number(e):null,Ut=e=>Math.round(e*1e4)/1e4;function y(e,r,t,n=!0){!n||t===null||!Number.isFinite(t)||e.push({feature:r,value:Ut(t)})}function Ht(e,r){let t=g(e.repeatBuys??e.repeat_buys??e.buyCount),n=g(e.walletWinRate??e.winRate);y(r,"repeat_buys",t===null?null:b((t-1)/4)*.38),y(r,"wallet_win_rate",n===null?null:(b(n)-.5)*.5)}function Wt(e,r){let t=g(e.ageHours??e.poolAgeHours),n=g(e.liquidityUsd??e.liquidity),o=e.liquidityLocked??e.locked;y(r,"pool_age",t===null?null:t<24?-.42:b(t/720)*.12),y(r,"liquidity",n===null?null:(b(Math.log10(Math.max(1,n))/7)-.5)*.28),y(r,"liquidity_lock",o==null?null:o?.12:-.28)}function Jt(e,r){let t=g(e.floorChange??e.floorChangePct),n=g(e.sales??e.saleCount);y(r,"floor_change",t===null?null:b(t,-1,1)*.35),y(r,"sales_depth",n===null?null:b(n/50)*.18)}function zt(e,r){let t=g(e.flowImbalance??e.imbalance),n=g(e.fundingRate??e.funding);y(r,"flow_imbalance",t===null?null:b(t,-1,1)*.42),y(r,"funding",n===null?null:-b(n*100,-1,1)*.12)}function Gt(e,r){let t=g(e.marketProbability??e.marketPrice??e.probability),n=g(e.fairProbability??e.referenceProbability??e.fairValue);y(r,"probability_mispricing",t===null||n===null?null:b(n-t,-1,1)*.65);let o=g(e.liquidityUsd??e.liquidity);y(r,"market_liquidity",o===null?null:b(Math.log10(Math.max(1,o))/6)*.12)}var cn=Object.freeze({wallet:Ht,pool:Wt,nft_floor:Jt,hl_flow:zt,prediction_market:Gt});function ae(e){try{return I.existsSync(e)}catch{return!1}}function J(e){for(let r of e)if(r&&ae(r))return r;return null}function se(e){try{return Be(e,import.meta.url)}catch{return null}}function Vt(){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=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=I.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 Fe(){let e=J([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=I.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 Kt(){let e=J([se("protocols/templates"),d.join(l,"protocols/templates"),d.join(l,"dist/assets/protocols/templates"),d.join(l,"assets/protocols/templates")]);return e?I.readdirSync(e).filter(t=>!t.startsWith(".")):Fe().building.some(t=>/protocol-builder|dex-launch|token-launch/i.test(t))?["(via skills: protocol-builder / launch packs)"]:[]}function Yt(){let e=J([se("profiles"),d.join(l,"profiles"),d.join(l,"dist/assets/profiles"),d.join(l,"assets/profiles")]);return e?I.readdirSync(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&!r.name.startsWith("_")).map(r=>r.name):[]}function Xt(){try{if(L.includes("trade_lifecycle")&&!L.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=I.readFileSync(r,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(t))return!0}catch{}return!1}function Me(e=process.env){let r=[],t=(c,_,F,A=1)=>{r.push({id:c,status:_,detail:F,weight:A})},[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=>!L.includes(c));t("agent_tools",u.length===0?"ok":"warn",u.length===0?`safe tools ${L.length}; signal_score present`:`missing tools: ${u.join(",")}`,3),t("research_attributes","ok",`attrs [${ne.join(", ")}]; mode=${oe(e)?"ON":"off"}`,2);let f=Vt();t("providers",f.count>=40?"ok":f.count>=10?"warn":"fail",f.detail,3);let w=Fe();t("skills_trading_build",w.trading.length>=5&&w.building.length>=4?"ok":w.count>=10?"warn":"fail",`${w.count} skills; trading=${w.trading.length} building=${w.building.length}`,3);let p=Kt();t("protocol_templates",p.length>=2?"ok":"warn",p.length?p.join(", "):"none",2);let h=Yt();t("profiles",h.includes("protocol-builder")&&h.includes("oracle")?"ok":h.length>=1?"warn":"fail",h.join(", ")||"none",2),t("signals_engine",ie.length>=4?"ok":"fail",`types: ${ie.join(", ")} (cold / no hot exec)`,2);let v=$e();t("harness_roster",v.length>=8?"ok":"warn",`${v.length} website harnesses; native default; MCP inbound only`,2),t("custody_prepare_only",Xt()?"ok":"fail","public plane prepare-only",4);let k=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";t("data_url","ok",k,1);let T=0,S=0;for(let c of r)S+=c.weight,c.status==="ok"?T+=c.weight:c.status==="warn"&&(T+=c.weight*.5);let m=S?Math.round(T/S*100):0,x=!r.some(c=>c.status==="fail")&&m>=70,U=x?`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:x,score:T,max:S,pct:m,summary:U,researchMode:oe(e),attributes:[...ne],packageRoot:l,checks:r}}function St(){let[e,r]=process.versions.node.split(".").map(Number);return e>20||e===20&&r>=19}function Fr(e){if(!ee.existsSync(e))return{};let r={};for(let t of ee.readFileSync(e,"utf8").split(/\r?\n/)){let n=t.match(/^([A-Z0-9_]+)=(.*)$/);n&&(r[n[1]]=n[2])}return r}async function Mr(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 Mc={name:"doctor",summary:"check the read plane (+ optional --agentic crypto harness 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,_,F,A=null)=>{o.push({id:c,status:_,detail:F,fix:A}),_==="fail"&&(i=!0)};s("node",St()?"ok":"fail",`node ${process.versions.node}`,St()?null:"install node >= 20.19");let u=e.paths.oracleExecEnvPath(),f=Fr(u),w=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",w?"ok":"warn",w?"present":"missing",w?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let p=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",h=await Mr(p),v=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",h?"ok":"warn",h?`reachable ${p}${v?` (${v})`:""}`:`down ${p}`,h?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 k=Re();s("harness_model","ok","Oracle native is default; external clients are inbound MCP only (oracle harness detect)",null),s("hermes_opt_in","ok",k.ok?`detected ${k.bin} (${k.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let T=$r.join(e.paths.hermesRoot(),"profiles"),S=0;ee.existsSync(T)&&(S=ee.readdirSync(T,{withFileTypes:!0}).filter(c=>c.isDirectory()).length),s("hermes_lanes","ok",S>0?`${S} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);let m=null;if(t){m=Me(process.env);for(let c of m.checks)s(`agentic_${c.id}`,c.status,c.detail,null)}let x=null;if(n){let{firstHourReport:c}=await Promise.resolve().then(()=>(_e(),Et)),{probeSigner:_,probeQuote:F}=await Promise.resolve().then(()=>(xt(),bt));x=c({signerReachable:await _(process.env),quote:await F()});for(let A of x.checks)s(`hour_${A.id}`,A.status,A.detail,A.fix)}let U={ok:!i&&(m?m.ok:!0)&&(x?x.ok:!0),checks:o,...x?{firstHour:x}:{},...m?{agentic:{pct:m.pct,summary:m.summary,attributes:m.attributes,researchMode:m.researchMode}}:{}};if(r)process.stdout.write(JSON.stringify(U,null,2)+`
4
4
  `);else{for(let c of o)process.stdout.write(`${c.status.toUpperCase().padEnd(4)} ${c.id}: ${c.detail}
@@ -208,7 +208,7 @@ anchor-lang = "0.31.1"
208
208
  - Recovery path: ${i} after ${a} blocks (BIP68 relative locktime)
209
209
  - This is a policy scaffold, not a funded address, PSBT, signature, or broadcast
210
210
  - Compile and satisfy on regtest/signet with a reviewed Miniscript implementation before mainnet
211
- `)];return{family:"bitcoin",network:n,projectName:t,protocolModel:Wc["bitcoin-tapscript-vault"].protocolModel,policy:{descriptorType:"tr",miniscript:u,cooperativeMiniscript:s,recoveryMiniscript:c,descriptor:m,address:f.address,scriptPubKey:f.scriptPubKey,threshold:r,signerCount:o.length,recoveryDelayBlocks:a.toString()},authorityReport:{cooperativeSigners:o,threshold:r,recoveryPubkey:i,recoveryDelayBlocks:a.toString()},files:_,gate:{sourceChecks:{ok:r<=o.length&&a>0n&&new Set([...o,i]).size===o.length+1,checks:["bounded threshold","unique keys","positive BIP68 delay","separate recovery key"]},compiler:{tool:"rust-miniscript or equivalent",requiredBeforeFunding:!0,run:!1},tests:{tool:"regtest/signet policy satisfaction",requiredBeforeFunding:!0,run:!1},simulation:{network:n==="mainnet"?"signet or regtest required first":n,requiredBeforeFunding:!0,run:!1},firmAudit:!1,disclaimer:nm},psbtPrepared:!1,fundingPrepared:!1}}function mv(){return Object.values(Wc).map(e=>({...e,disclaimer:nm}))}async function im(e={}){let t=String(e.templateId||"").trim(),n=Wc[t];n||Le("protocol-templates",`unknown native template "${t}"`);let o=t==="solana-safe-vault"?fE(e):pE(e),r=dE(o.files);return av({provider:"protocol-templates",kind:"native-protocol-build",templateId:t,supportStatus:n.supportStatus,prepareOnly:!0,firmAudit:!1,artifactHash:r,...o,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,note:"Deterministic native protocol source bundle only. Compile, test, simulate, and separately prepare deployment/funding before user signature."},{provider:"protocol-templates",kind:"native-protocol-build"})}Vt();var gE=be("protocols/templates",import.meta.url),yE=[/\bselfdestruct\s*\(/i,/\bdelegatecall\s*\(/i,/\btx\.origin\b/,/\bassembly\s*\{/],wE="4wBqpZM9xaSheZzJSMawUKKwhdpChKbZ5eu5ky4Vigw",vE="6Ckm2BrZsQhcNZ6AcXjB9UbcK1jTn1nao3HSBKv5qvWY",bE="031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f",xE="024d4b6cd1361032ca9bd2aeb9d900aa4d45d9ead80ac9423374c451a7254d0766",_E="02531fe6068134503d2723133227c867ac8fa6c83c537e9a44c3c5bdbdcb1fe337";function SE(){let e=process.env.HOME||"";for(let t of["forge",Gt.join(e,".foundry/bin/forge")])if(mE(t,["--version"],{encoding:"utf8"}).status===0)return!0;return!1}function hv(e,t=[]){if(!Jc.existsSync(e))return t;for(let n of Jc.readdirSync(e)){let o=Gt.join(e,n);if(Jc.statSync(o).isDirectory()){if(["lib","out","cache","node_modules"].includes(n))continue;hv(o,t)}else n.endsWith(".sol")&&!o.includes(`${Gt.sep}lib${Gt.sep}`)&&t.push(o)}return t}function kE(){let e=[];for(let t of Object.keys(Mn)){let n=Gt.join(gE,t),o=hv(Gt.join(n,"src")),r=[];for(let i of o){let a=Jc.readFileSync(i,"utf8");for(let s of yE)s.test(a)&&r.push(`${Gt.basename(i)}:${s}`)}e.push({language:"Solidity",templateId:t,ok:o.length>0&&r.length===0,files:o.length,hits:r})}return e}function $E(){return SE()?Object.keys(Mn).map(e=>{try{let t=nv(e,{allowSkipStatic:!0});return{language:"Solidity",templateId:e,ok:t.ok===!0&&t.forgeTests?.ok===!0,forge:t.forgeTests,firmAudit:t.firmAudit===!1}}catch(t){return{language:"Solidity",templateId:e,ok:!1,error:String(t?.message||t).slice(0,240)}}}):Object.keys(Mn).map(e=>({language:"Solidity",templateId:e,ok:!0,skipped:!0,reason:"forge-not-installed"}))}async function EE(){let e=[],t=mv();e.push({language:"catalog",ok:t.some(r=>r.family==="solana")&&t.some(r=>r.family==="bitcoin"),templates:t.map(r=>r.id)});let n=await im({templateId:"solana-safe-vault",projectName:"eval_vault",network:"devnet",authority:wE,programId:vE,unlockDelaySlots:1200});e.push({language:"Rust / Anchor",templateId:"solana-safe-vault",ok:n.oraclePrepared===!0&&n.signingReady===!1&&n.broadcastReady===!1&&n.firmAudit===!1,artifactHash:n.artifactHash});let o=await im({templateId:"bitcoin-tapscript-vault",projectName:"eval_treasury",network:"signet",threshold:2,signerPubkeys:[bE,xE],recoveryPubkey:_E,recoveryDelayBlocks:144});return e.push({language:"Miniscript / Tapscript",templateId:"bitcoin-tapscript-vault",ok:o.oraclePrepared===!0&&o.psbtPrepared===!1&&o.broadcastReady===!1&&o.firmAudit===!1,artifactHash:o.artifactHash}),e}async function gv(){let e=kE(),t=$E(),n=await EE(),o=[...e,...t,...n],r=o.filter(a=>a.ok!==!0&&a.skipped!==!0).length,i=o.filter(a=>a.skipped===!0).length;return{ok:r===0,total:o.length,pass:o.length-r-i,fail:r,skipped:i,languages:["Solidity","Rust / Anchor","Miniscript / Tapscript"],firmAudit:!1,cases:o}}var $z=Gt.dirname(hE(import.meta.url));Zr();import wv from"node:fs";import IE from"node:path";var AE=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","custom","anthropic-oauth","openai-codex","xai-oauth"]);function Vc(e){return String(e||"").trim()||void 0}function Ki(e,{required:t=!1}={}){let n=Vc(e)?.toLowerCase();if(!n){if(t)throw new Error("model provider is required");return}if(!AE.has(n))throw new Error(`unsupported provider: ${n}`);return n}function Xi(e,{required:t=!1}={}){let n=Vc(e);if(!n){if(t)throw new Error("model is required");return}if(n.includes("..")||n.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(n))throw new Error("invalid model id");return n}function Yi(e){let t=Vc(e);if(!t||t.length>2048)throw new Error("invalid custom base URL");let n;try{n=new URL(t)}catch{throw new Error("invalid custom base URL")}let o=n.hostname.toLowerCase().replace(/^\[|\]$/g,""),r=o==="localhost"||o==="127.0.0.1"||o==="::1";if(n.protocol!=="https:"&&!(n.protocol==="http:"&&r)||n.username||n.password||n.search||n.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return n.toString().replace(/\/+$/,"")}function yv({provider:e,model:t,baseUrl:n}={},{requireModel:o=!1}={}){let r=Ki(e),i=Xi(t,{required:o});if(r==="custom")return{provider:r,...i?{model:i}:{},baseUrl:Yi(n)};if(Vc(n))throw new Error("baseUrl is only supported for the custom provider");return{...r?{provider:r}:{},...i?{model:i}:{}}}var OE=new Set(["auto","standalone","hermes","remote","arch"]);function TE(){return IE.join(qr(),"model.json")}function qn(e){return String(e||"").trim()||void 0}function PE(e={}){let t=qn(e.backend)?.toLowerCase()||"auto",n=yv({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),o=qn(e.apiKeyEnv),r=Number.parseInt(String(e.contextLength||""),10),i=qn(e.reasoningEffort),a=qn(e.computeHost||e.remoteHost),s=qn(e.computeUser||e.remoteUser),c=qn(e.computePath||e.remotePath);if(!OE.has(t))throw new Error(`unsupported backend: ${t}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(t))throw new Error("remote compute backends are disabled in the public desktop");if(o&&!/^[A-Z][A-Z0-9_]*$/.test(o))throw new Error("api key env must be an uppercase environment variable name");if(t==="remote"&&!a)throw new Error("remote backend requires computeHost");return{backend:t,...n,...o?{apiKeyEnv:o}:{},...Number.isFinite(r)&&r>0?{contextLength:r}:{},...i?{reasoningEffort:i}:{},...a?{computeHost:a}:{},...s?{computeUser:s}:{},...c?{computePath:c}:{}}}function vv(){let e=TE();if(!wv.existsSync(e))return null;try{return PE(JSON.parse(wv.readFileSync(e,"utf8")))}catch{return null}}Yc();import WE from"node:fs";import Ov from"node:path";mm();var Tv=Object.freeze({openrouter:{key:"OPENROUTER_API_KEY",baseUrl:"https://openrouter.ai/api/v1",model:"openrouter/auto"},openai:{key:"OPENAI_API_KEY",baseUrl:"https://api.openai.com/v1",model:"gpt-4.1-mini"},anthropic:{key:"ANTHROPIC_API_KEY",baseUrl:"https://api.anthropic.com/v1",model:"claude-sonnet-4-6",protocol:"anthropic-messages"},xai:{key:"XAI_API_KEY",baseUrl:"https://api.x.ai/v1",model:"grok-4.6"},deepseek:{key:"DEEPSEEK_API_KEY",baseUrl:"https://api.deepseek.com/v1",model:"deepseek-chat"},gemini:{key:"GEMINI_API_KEY",alternateKey:"GOOGLE_API_KEY",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai",model:"gemini-2.5-flash"},kimi:{key:"MOONSHOT_API_KEY",alternateKey:"KIMI_API_KEY",baseUrl:"https://api.moonshot.ai/v1",model:"kimi-k3",protocol:"openai-chat"},mistral:{key:"MISTRAL_API_KEY",baseUrl:"https://api.mistral.ai/v1",model:"mistral-large-latest",protocol:"openai-chat"}}),JE=Object.freeze({"anthropic-oauth":{key:"ANTHROPIC_API_KEY",baseUrl:"https://api.anthropic.com/v1",model:"claude-sonnet-4-20250514",protocol:"anthropic-messages"},"openai-codex":{key:"OPENAI_API_KEY",baseUrl:"https://chatgpt.com/backend-api/codex",model:"gpt-5.4",protocol:"responses"},"xai-oauth":{key:"XAI_API_KEY",baseUrl:"https://api.x.ai/v1",model:"grok-4.6",protocol:"responses"}});function VE(e,t){let n=Number(e);return Number.isSafeInteger(n)&&n>0?n:t}function GE(e,t){let n=String(e.ORACLE_PROVIDER||t.provider||"").trim().toLowerCase();if(n)return n;if(e.ORACLE_BASE_URL||t.baseUrl)return"custom";for(let[o,r]of Object.entries(Tv))if(e[r.key]||r.alternateKey&&e[r.alternateKey])return o;return null}var KE=Object.freeze(["xai-oauth","anthropic-oauth","openai-codex"]);function XE(e={}){return String(e.backend||"").trim().toLowerCase()==="hermes"?{}:e}function YE(e){for(let t of KE)if(e(t))return t;return null}function QE(e=process.env,t={},n=()=>!1,o=()=>""){let r=XE(t),i=GE(e,r)||YE(n);if(!i)return null;let a;try{a=Ki(i,{required:!0})}catch{return null}let s=JE[a],c=Tv[a]||s,u=String(e.ORACLE_API_KEY_ENV||r.apiKeyEnv||""),l=String(e.ORACLE_API_KEY||u&&e[u]||c&&(e[c.key]||c.alternateKey&&e[c.alternateKey])||o(a)||""),d=String(s?s.baseUrl:a==="custom"?e.ORACLE_BASE_URL||r.baseUrl||"":c?.baseUrl||""),p,f;try{p=a==="custom"?Yi(d):d.replace(/\/+$/,""),f=Xi(e.ORACLE_MODEL||r.model||c?.model,{required:!0})}catch{return null}if(!p)return null;let m=!!(s&&n(a));return s&&!m||!s&&!l?null:{kind:"standalone",provider:a,model:f,baseUrl:p,...m?{authType:"oauth",protocol:s.protocol}:{apiKey:l},...!m&&c?.protocol?{protocol:c.protocol}:{},contextLength:VE(e.ORACLE_CONTEXT_LENGTH||r.contextLength,128e3),reasoningEffort:String(e.ORACLE_REASONING_EFFORT||r.reasoningEffort||"high")}}function Hn(e=""){return["Oracle runs its own native chat \u2014 no external harness required.","Run `oracle setup model` to choose OAuth or an API-key provider, or configure a custom OpenAI-compatible endpoint.","`oracle harness detect` finds installed clients for inbound MCP / plugins / skills wiring only.","No external harness is auto-selected. Wire clients with `oracle mcp install <target>` or `oracle plugins install`.",e].filter(Boolean).join(`
211
+ `)];return{family:"bitcoin",network:n,projectName:t,protocolModel:Wc["bitcoin-tapscript-vault"].protocolModel,policy:{descriptorType:"tr",miniscript:u,cooperativeMiniscript:s,recoveryMiniscript:c,descriptor:m,address:f.address,scriptPubKey:f.scriptPubKey,threshold:r,signerCount:o.length,recoveryDelayBlocks:a.toString()},authorityReport:{cooperativeSigners:o,threshold:r,recoveryPubkey:i,recoveryDelayBlocks:a.toString()},files:_,gate:{sourceChecks:{ok:r<=o.length&&a>0n&&new Set([...o,i]).size===o.length+1,checks:["bounded threshold","unique keys","positive BIP68 delay","separate recovery key"]},compiler:{tool:"rust-miniscript or equivalent",requiredBeforeFunding:!0,run:!1},tests:{tool:"regtest/signet policy satisfaction",requiredBeforeFunding:!0,run:!1},simulation:{network:n==="mainnet"?"signet or regtest required first":n,requiredBeforeFunding:!0,run:!1},firmAudit:!1,disclaimer:nm},psbtPrepared:!1,fundingPrepared:!1}}function mv(){return Object.values(Wc).map(e=>({...e,disclaimer:nm}))}async function im(e={}){let t=String(e.templateId||"").trim(),n=Wc[t];n||Le("protocol-templates",`unknown native template "${t}"`);let o=t==="solana-safe-vault"?fE(e):pE(e),r=dE(o.files);return av({provider:"protocol-templates",kind:"native-protocol-build",templateId:t,supportStatus:n.supportStatus,prepareOnly:!0,firmAudit:!1,artifactHash:r,...o,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,note:"Deterministic native protocol source bundle only. Compile, test, simulate, and separately prepare deployment/funding before user signature."},{provider:"protocol-templates",kind:"native-protocol-build"})}Vt();var gE=be("protocols/templates",import.meta.url),yE=[/\bselfdestruct\s*\(/i,/\bdelegatecall\s*\(/i,/\btx\.origin\b/,/\bassembly\s*\{/],wE="4wBqpZM9xaSheZzJSMawUKKwhdpChKbZ5eu5ky4Vigw",vE="6Ckm2BrZsQhcNZ6AcXjB9UbcK1jTn1nao3HSBKv5qvWY",bE="031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f",xE="024d4b6cd1361032ca9bd2aeb9d900aa4d45d9ead80ac9423374c451a7254d0766",_E="02531fe6068134503d2723133227c867ac8fa6c83c537e9a44c3c5bdbdcb1fe337";function SE(){let e=process.env.HOME||"";for(let t of["forge",Gt.join(e,".foundry/bin/forge")])if(mE(t,["--version"],{encoding:"utf8"}).status===0)return!0;return!1}function hv(e,t=[]){if(!Jc.existsSync(e))return t;for(let n of Jc.readdirSync(e)){let o=Gt.join(e,n);if(Jc.statSync(o).isDirectory()){if(["lib","out","cache","node_modules"].includes(n))continue;hv(o,t)}else n.endsWith(".sol")&&!o.includes(`${Gt.sep}lib${Gt.sep}`)&&t.push(o)}return t}function kE(){let e=[];for(let t of Object.keys(Mn)){let n=Gt.join(gE,t),o=hv(Gt.join(n,"src")),r=[];for(let i of o){let a=Jc.readFileSync(i,"utf8");for(let s of yE)s.test(a)&&r.push(`${Gt.basename(i)}:${s}`)}e.push({language:"Solidity",templateId:t,ok:o.length>0&&r.length===0,files:o.length,hits:r})}return e}function $E(){return SE()?Object.keys(Mn).map(e=>{try{let t=nv(e,{allowSkipStatic:!0});return{language:"Solidity",templateId:e,ok:t.ok===!0&&t.forgeTests?.ok===!0,forge:t.forgeTests,firmAudit:t.firmAudit===!1}}catch(t){return{language:"Solidity",templateId:e,ok:!1,error:String(t?.message||t).slice(0,240)}}}):Object.keys(Mn).map(e=>({language:"Solidity",templateId:e,ok:!0,skipped:!0,reason:"forge-not-installed"}))}async function EE(){let e=[],t=mv();e.push({language:"catalog",ok:t.some(r=>r.family==="solana")&&t.some(r=>r.family==="bitcoin"),templates:t.map(r=>r.id)});let n=await im({templateId:"solana-safe-vault",projectName:"eval_vault",network:"devnet",authority:wE,programId:vE,unlockDelaySlots:1200});e.push({language:"Rust / Anchor",templateId:"solana-safe-vault",ok:n.oraclePrepared===!0&&n.signingReady===!1&&n.broadcastReady===!1&&n.firmAudit===!1,artifactHash:n.artifactHash});let o=await im({templateId:"bitcoin-tapscript-vault",projectName:"eval_treasury",network:"signet",threshold:2,signerPubkeys:[bE,xE],recoveryPubkey:_E,recoveryDelayBlocks:144});return e.push({language:"Miniscript / Tapscript",templateId:"bitcoin-tapscript-vault",ok:o.oraclePrepared===!0&&o.psbtPrepared===!1&&o.broadcastReady===!1&&o.firmAudit===!1,artifactHash:o.artifactHash}),e}async function gv(){let e=kE(),t=$E(),n=await EE(),o=[...e,...t,...n],r=o.filter(a=>a.ok!==!0&&a.skipped!==!0).length,i=o.filter(a=>a.skipped===!0).length;return{ok:r===0,total:o.length,pass:o.length-r-i,fail:r,skipped:i,languages:["Solidity","Rust / Anchor","Miniscript / Tapscript"],firmAudit:!1,cases:o}}var $z=Gt.dirname(hE(import.meta.url));Zr();import wv from"node:fs";import IE from"node:path";var AE=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","custom","anthropic-oauth","openai-codex","xai-oauth"]);function Vc(e){return String(e||"").trim()||void 0}function Ki(e,{required:t=!1}={}){let n=Vc(e)?.toLowerCase();if(!n){if(t)throw new Error("model provider is required");return}if(!AE.has(n))throw new Error(`unsupported provider: ${n}`);return n}function Xi(e,{required:t=!1}={}){let n=Vc(e);if(!n){if(t)throw new Error("model is required");return}if(n.includes("..")||n.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(n))throw new Error("invalid model id");return n}function Yi(e){let t=Vc(e);if(!t||t.length>2048)throw new Error("invalid custom base URL");let n;try{n=new URL(t)}catch{throw new Error("invalid custom base URL")}let o=n.hostname.toLowerCase().replace(/^\[|\]$/g,""),r=o==="localhost"||o==="127.0.0.1"||o==="::1";if(n.protocol!=="https:"&&!(n.protocol==="http:"&&r)||n.username||n.password||n.search||n.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return n.toString().replace(/\/+$/,"")}function yv({provider:e,model:t,baseUrl:n}={},{requireModel:o=!1}={}){let r=Ki(e),i=Xi(t,{required:o});if(r==="custom")return{provider:r,...i?{model:i}:{},baseUrl:Yi(n)};if(Vc(n))throw new Error("baseUrl is only supported for the custom provider");return{...r?{provider:r}:{},...i?{model:i}:{}}}var OE=new Set(["auto","standalone","hermes","remote","arch"]);function TE(){return IE.join(qr(),"model.json")}function qn(e){return String(e||"").trim()||void 0}function PE(e={}){let t=qn(e.backend)?.toLowerCase()||"auto",n=yv({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),o=qn(e.apiKeyEnv),r=Number.parseInt(String(e.contextLength||""),10),i=qn(e.reasoningEffort),a=qn(e.computeHost||e.remoteHost),s=qn(e.computeUser||e.remoteUser),c=qn(e.computePath||e.remotePath);if(!OE.has(t))throw new Error(`unsupported backend: ${t}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(t))throw new Error("remote compute backends are disabled in the public desktop");if(o&&!/^[A-Z][A-Z0-9_]*$/.test(o))throw new Error("api key env must be an uppercase environment variable name");if(t==="remote"&&!a)throw new Error("remote backend requires computeHost");return{backend:t,...n,...o?{apiKeyEnv:o}:{},...Number.isFinite(r)&&r>0?{contextLength:r}:{},...i?{reasoningEffort:i}:{},...a?{computeHost:a}:{},...s?{computeUser:s}:{},...c?{computePath:c}:{}}}function vv(){let e=TE();if(!wv.existsSync(e))return null;try{return PE(JSON.parse(wv.readFileSync(e,"utf8")))}catch{return null}}Yc();import WE from"node:fs";import Ov from"node:path";mm();var Tv=Object.freeze({openrouter:{key:"OPENROUTER_API_KEY",baseUrl:"https://openrouter.ai/api/v1",model:"openrouter/auto"},openai:{key:"OPENAI_API_KEY",baseUrl:"https://api.openai.com/v1",model:"gpt-4.1-mini"},anthropic:{key:"ANTHROPIC_API_KEY",baseUrl:"https://api.anthropic.com/v1",model:"claude-sonnet-4-6",protocol:"anthropic-messages"},xai:{key:"XAI_API_KEY",baseUrl:"https://api.x.ai/v1",model:"grok-4.6"},deepseek:{key:"DEEPSEEK_API_KEY",baseUrl:"https://api.deepseek.com/v1",model:"deepseek-chat"},gemini:{key:"GEMINI_API_KEY",alternateKey:"GOOGLE_API_KEY",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai",model:"gemini-2.5-flash"},kimi:{key:"MOONSHOT_API_KEY",alternateKey:"KIMI_API_KEY",baseUrl:"https://api.moonshot.ai/v1",model:"kimi-k3",protocol:"openai-chat"},mistral:{key:"MISTRAL_API_KEY",baseUrl:"https://api.mistral.ai/v1",model:"mistral-large-latest",protocol:"openai-chat"},nous:{key:"NOUS_API_KEY",baseUrl:"https://inference-api.nousresearch.com/v1",model:"moonshotai/kimi-k3",protocol:"openai-chat"}}),JE=Object.freeze({"anthropic-oauth":{key:"ANTHROPIC_API_KEY",baseUrl:"https://api.anthropic.com/v1",model:"claude-sonnet-4-20250514",protocol:"anthropic-messages"},"openai-codex":{key:"OPENAI_API_KEY",baseUrl:"https://chatgpt.com/backend-api/codex",model:"gpt-5.4",protocol:"responses"},"xai-oauth":{key:"XAI_API_KEY",baseUrl:"https://api.x.ai/v1",model:"grok-4.6",protocol:"responses"}});function VE(e,t){let n=Number(e);return Number.isSafeInteger(n)&&n>0?n:t}function GE(e,t){let n=String(e.ORACLE_PROVIDER||t.provider||"").trim().toLowerCase();if(n)return n;if(e.ORACLE_BASE_URL||t.baseUrl)return"custom";for(let[o,r]of Object.entries(Tv))if(e[r.key]||r.alternateKey&&e[r.alternateKey])return o;return null}var KE=Object.freeze(["xai-oauth","anthropic-oauth","openai-codex"]);function XE(e={}){return String(e.backend||"").trim().toLowerCase()==="hermes"?{}:e}function YE(e){for(let t of KE)if(e(t))return t;return null}function QE(e=process.env,t={},n=()=>!1,o=()=>""){let r=XE(t),i=GE(e,r)||YE(n);if(!i)return null;let a;try{a=Ki(i,{required:!0})}catch{return null}let s=JE[a],c=Tv[a]||s,u=String(e.ORACLE_API_KEY_ENV||r.apiKeyEnv||""),l=String(e.ORACLE_API_KEY||u&&e[u]||c&&(e[c.key]||c.alternateKey&&e[c.alternateKey])||o(a)||""),d=String(s?s.baseUrl:a==="custom"?e.ORACLE_BASE_URL||r.baseUrl||"":c?.baseUrl||""),p,f;try{p=a==="custom"?Yi(d):d.replace(/\/+$/,""),f=Xi(e.ORACLE_MODEL||r.model||c?.model,{required:!0})}catch{return null}if(!p)return null;let m=!!(s&&n(a));return s&&!m||!s&&!l?null:{kind:"standalone",provider:a,model:f,baseUrl:p,...m?{authType:"oauth",protocol:s.protocol}:{apiKey:l},...!m&&c?.protocol?{protocol:c.protocol}:{},contextLength:VE(e.ORACLE_CONTEXT_LENGTH||r.contextLength,128e3),reasoningEffort:String(e.ORACLE_REASONING_EFFORT||r.reasoningEffort||"high")}}function Hn(e=""){return["Oracle runs its own native chat \u2014 no external harness required.","Run `oracle setup model` to choose OAuth or an API-key provider, or configure a custom OpenAI-compatible endpoint.","`oracle harness detect` finds installed clients for inbound MCP / plugins / skills wiring only.","No external harness is auto-selected. Wire clients with `oracle mcp install <target>` or `oracle plugins install`.",e].filter(Boolean).join(`
212
212
  `)}function eA(e=process.env,t={}){if(e.ORACLE_PUBLIC_DESKTOP==="1"||e.ORACLE_REMOTE_COMPUTE_DISABLE==="1")return null;let n=String(e.ORACLE_CHAT_BACKEND||t.backend||"auto").trim().toLowerCase(),o=String(e.ORACLE_COMPUTE_HOST||t.computeHost||"").trim();if(!["remote","arch"].includes(n)&&!e.ORACLE_COMPUTE_HOST||!o)return null;let r=String(e.ORACLE_COMPUTE_USER||t.computeUser||"").trim(),i=String(e.ORACLE_COMPUTE_PATH||t.computePath||"$HOME/.local/bin:/usr/local/bin:/usr/bin:/bin:/opt/homebrew/bin").trim();return{kind:"remote",host:o,user:r,path:i}}function tA(){return Iv().map(e=>({name:e.id,bin:e.bins?.[0]||e.id,label:e.label,kind:e.kind,altBins:(e.bins||[]).slice(1)}))}function rA(e){for(let t of(process.env.PATH||"").split(Ov.delimiter)){let n=Ov.join(t,e);try{if(WE.existsSync(n))return n}catch{}}return null}function nA(e){let t=[e.bin,...e.altBins||[]].filter(Boolean);for(let n of t){let o=rA(n);if(o)return o}return null}function Pv({env:e=process.env,hermes:t={ok:!1},storedConfig:n=null,oauthAvailable:o=()=>!1,apiKeyResolver:r=()=>""}={}){let i=String(e.ORACLE_CHAT_BACKEND||n?.backend||"auto").trim().toLowerCase(),a=eA(e,n||{});if(i==="remote"||i==="arch")return a?{kind:"remote",config:a}:{kind:"unconfigured",reason:Hn(`${i} compute backend was requested, but no compute host is configured.`)};let s=QE(e,n||{},o,r);if(i==="standalone")return s?{kind:"standalone",config:s}:{kind:"unconfigured",reason:Hn("ORACLE_CHAT_BACKEND=standalone was requested, but no standalone model is configured.")};if(i==="hermes")return t?.ok?{kind:"hermes",bin:t.bin}:{kind:"unconfigured",reason:Hn("ORACLE_CHAT_BACKEND=hermes was requested, but Hermes was not found.")};if(i!=="auto"){for(let c of tA())if(c.name===i){let u=nA(c);return u?{kind:"harness",harness:{...c,path:u}}:{kind:"unconfigured",reason:Hn(`ORACLE_CHAT_BACKEND=${i} was requested, but ${c.bin} was not found on PATH.`)}}return{kind:"unconfigured",reason:Hn(`Unknown ORACLE_CHAT_BACKEND value: ${i}`)}}return a?{kind:"remote",config:a}:s?{kind:"standalone",config:s}:{kind:"unconfigured",reason:Hn()}}Zr();Vt();import Ch from"node:fs";import Dr from"node:path";import{randomUUID as Nh}from"node:crypto";import{EventEmitter as mP}from"node:events";import{spawnSync as hP}from"node:child_process";Vt();import Qi from"node:fs";import Ir from"node:path";import{homedir as oA}from"node:os";function gm(){return process.env.ORACLE_CONFIG_DIR||Ir.join(oA(),".config","oracle")}var hm=2200,Lv=/^[a-z0-9][a-z0-9-]*$/,Rv="oracle";function iA(e,t=gm()){let n=typeof e=="string"?e.trim():"";if(!n||n===Rv||!Lv.test(n))return Ir.join(t,"memory.json");let o=Ir.join(t,`memory.${n}.json`),r=Ir.relative(t,o);return!r||r.startsWith("..")||Ir.isAbsolute(r)?Ir.join(t,"memory.json"):o}function Cv(){return iA(process.env.ORACLE_ACTIVE_AGENT)}function zv(e){Qi.existsSync(e)||Qi.mkdirSync(e,{recursive:!0})}function Qc(){let e=gm();zv(e);try{let t=Qi.readFileSync(Cv(),"utf8");return JSON.parse(t)}catch{return{version:1,updatedAt:new Date().toISOString(),entries:aA()}}}function aA(e=process.env.ORACLE_ACTIVE_AGENT){let t=typeof e=="string"?e.trim():"";if(!t||t===Rv||!Lv.test(t))return[];try{let n=Ir.join(be("profiles",import.meta.url),t,"memory.json"),o=JSON.parse(Qi.readFileSync(n,"utf8"));return Array.isArray(o?.entries)?o.entries.filter(r=>r&&typeof r.key=="string"&&typeof r.content=="string").map(r=>({key:r.key,content:r.content,addedAt:null,seeded:!0})):[]}catch{return[]}}function jv(e){zv(gm()),e.updatedAt=new Date().toISOString(),Qi.writeFileSync(Cv(),JSON.stringify(e,null,2),{mode:384})}function Dv(e,t){let n=Qc(),o=n.entries.findIndex(r=>r.key===e);for(o>=0?n.entries[o]={key:e,content:t,addedAt:new Date().toISOString()}:n.entries.push({key:e,content:t,addedAt:new Date().toISOString()});JSON.stringify(n.entries).length>hm&&n.entries.length>1;)n.entries.shift();jv(n)}function Uv(e){let t=Qc(),n=t.entries.length;return t.entries=t.entries.filter(o=>o.key!==e),t.entries.length<n?(jv(t),{ok:!0}):{ok:!1}}var sA=new Set(["the","and","for","that","this","with","from","into","your","have","not","are","was","were","but","you","use","using"]);function Nv(e){return String(e||"").toLowerCase().split(/[^a-z0-9]+/).filter(t=>t.length>2&&!sA.has(t))}function cA(e,t){let n=new Set(Nv(t));if(n.size===0)return 0;let o=Nv(`${e?.key||""} ${e?.content||""}`),r=0;for(let i of o)n.has(i)&&(r+=1);return r}function ym(e,{limit:t=5}={}){let n=Qc(),o=Math.min(Math.max(Number(t)||5,1),12);return n.entries.map(r=>({key:r.key,content:r.content,score:cA(r,e)})).filter(r=>r.score>0).sort((r,i)=>i.score-r.score||r.key.localeCompare(i.key)).slice(0,o)}function Fv(e,{limit:t=5}={}){let n=ym(e,{limit:t});return n.length===0?"":["## Auto-recall (matched this turn)",...n.map(o=>`- ${o.key}: ${o.content}`)].join(`
213
213
  `)}function Mv(e=process.env){let t=String(e.ORACLE_AUTO_RECALL??"1").trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="off"&&t!=="no"}function Bv(){let e=Qc();if(e.entries.length===0)return"";let t=JSON.stringify(e.entries).length,n=Math.round(t/hm*100),o=e.entries.map(r=>`${r.key}: ${r.content}`);return["\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550",`MEMORY [${n}% \u2014 ${t}/${hm} chars]`,"\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550",...o].join(`
214
214
  `)}var qv=[{type:"function",function:{name:"memory_add",description:"Save a durable fact to memory for future sessions.",parameters:{type:"object",properties:{key:{type:"string",description:"Short unique key"},content:{type:"string",description:"The fact to remember"}},required:["key","content"],additionalProperties:!1}}},{type:"function",function:{name:"memory_remove",description:"Remove a memory entry by key.",parameters:{type:"object",properties:{key:{type:"string",description:"The key to remove"}},required:["key"],additionalProperties:!1}}},{type:"function",function:{name:"memory_search",description:"Search durable local memory for this turn. Returns ranked key/content hits. Does not write. Prefer this over dumping the whole store.",parameters:{type:"object",properties:{query:{type:"string",description:"Words to match against keys and contents"},limit:{type:"integer",minimum:1,maximum:12,description:"Max hits (default 5)"}},required:["query"],additionalProperties:!1}}}];Vt();import q from"node:fs";import Ce from"node:path";import{homedir as IA}from"node:os";import Wn from"node:fs";import Wv from"node:path";import{homedir as hA}from"node:os";import Ze from"node:fs";import Xt from"node:path";var wm="https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",uA=/^[a-z0-9]+(?:[._-][a-z0-9]+)*(?:\.[a-z0-9]+(?:[._-][a-z0-9]+)*)*$/;function ea(e){try{let t=Ze.lstatSync(e);return t.isDirectory()&&!t.isSymbolicLink()}catch{return!1}}function lA(){return Ze.constants.O_NOFOLLOW||0}function vm(e){try{let t=Ze.lstatSync(e);return t.isFile()&&!t.isSymbolicLink()}catch{return!1}}function Zv(e){if(!vm(e))return null;let t=Ze.openSync(e,Ze.constants.O_RDONLY|lA());try{return Ze.readFileSync(t,"utf8")}finally{Ze.closeSync(t)}}function dA(e){let t=[],n=[];if(!e||typeof e!="object"||Array.isArray(e))return t.push("plugin.json must be a JSON object"),{valid:!1,errors:t,warnings:n};e.$schema!==wm&&(e.$schema?t.push(`unsupported $schema: ${e.$schema} (expected ${wm})`):t.push("$schema is required \u2014 must be "+wm)),!e.name||typeof e.name!="string"?t.push("name is required (string)"):uA.test(e.name)||t.push(`name "${e.name}" must be kebab-case dot-separated (e.g. deployment.tools)`),(e.version===void 0||e.version===null||e.version==="")&&n.push("version is missing \u2014 semantic versioning recommended"),e.description!==void 0&&typeof e.description!="string"&&n.push("description must be a string"),e.author!==void 0&&(typeof e.author!="object"||Array.isArray(e.author))&&n.push("author must be an object with optional name, email, url"),e.keywords!==void 0&&(Array.isArray(e.keywords)||n.push("keywords must be an array")),e.license!==void 0&&typeof e.license!="string"&&n.push("license must be a string");let o=new Set(["$schema","name","version","description","author","homepage","repository","license","keywords","extensions"]);for(let r of Object.keys(e))o.has(r)||n.push(`unknown field "${r}" \u2014 will be ignored (use extensions.<namespace> for client data)`);return{valid:t.length===0,errors:t,warnings:n}}function fA(e){let t=Xt.join(e,"skills"),n=[];if(!ea(t))return n;function o(r,i=""){for(let a of Ze.readdirSync(r,{withFileTypes:!0})){let s=Xt.join(r,a.name);if(a.isDirectory()){if(!ea(s))continue;o(s,i?`${i}/${a.name}`:a.name)}else if(a.name.endsWith(".md")){if(!vm(s))continue;let c=i?`${i}/${a.name.replace(/\.md$/,"")}`:a.name.replace(/\.md$/,"");n.push({name:c,path:s,relativePath:Xt.relative(t,s)})}}}return o(t),n}function pA(e){let t=Xt.join(e,"mcp"),n=[];if(!ea(t))return n;for(let o of Ze.readdirSync(t,{withFileTypes:!0})){if(!o.isFile()||!o.name.endsWith(".json"))continue;let r=Xt.join(t,o.name);if(vm(r))try{let i=Zv(r);if(i===null)continue;let a=JSON.parse(i);n.push({name:o.name.replace(/\.json$/,""),path:r,config:a})}catch(i){n.push({name:o.name.replace(/\.json$/,""),path:r,error:`invalid JSON: ${i.message}`})}}return n}function mA(e){let t=Xt.resolve(e);if(!ea(t))return{ok:!1,error:`plugin directory not found: ${t}`};let n=Xt.join(t,"plugin.json");if(!Ze.existsSync(n))return{ok:!1,error:`missing plugin.json in ${t}`};let o;try{let s=Zv(n);if(s===null)return{ok:!1,error:`plugin.json must be a regular file in ${t}`};o=JSON.parse(s)}catch(s){return{ok:!1,error:`invalid plugin.json: ${s.message}`}}let r=dA(o);if(!r.valid)return{ok:!1,error:"manifest validation failed",errors:r.errors};let i=fA(t),a=pA(t);return{ok:!0,plugin:{name:o.name,version:o.version||"0.0.0",description:o.description||"",author:o.author||{},license:o.license||"UNLICENSED",root:t,manifest:o,skills:i,mcpServers:a,warnings:[...r.warnings]}}}function Hv(e){let t=[];if(!ea(e))return t;for(let n of Ze.readdirSync(e,{withFileTypes:!0})){if(!n.isDirectory())continue;let o=Xt.join(e,n.name),r=mA(o);r.ok&&t.push(r.plugin)}return t}var gA=/^[a-z0-9][a-z0-9_-]{0,63}$/,yA=/^[a-z0-9][a-z0-9-]*$/,wA=128,vA=16,bA=64*1024;function xA(e=process.env){return e&&e.ORACLE_CONFIG_DIR||Wv.join(hA(),".config","oracle")}function _A(e=process.env){return Wv.join(xA(e),"plugins")}function SA(e,t){let n=String(e||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,32),o=String(t||"").toLowerCase().replace(/\.md$/i,"").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,24);if(!n||!o)return null;let r=`p-${n}-${o}`.slice(0,64);return gA.test(r)?r:null}function kA(e,t){let n=String(e||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,24),o=String(t||"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,16);if(!n||!o)return null;let r=`p-${n}-${o}`.slice(0,40);return yA.test(r)?r:null}function $A(e,t){let n=String(t||"").match(/^description:\s*(.+)$/m);return n?n[1].trim().slice(0,200):(String(t||"").split(`
@@ -1,7 +1,7 @@
1
- import k from"node:fs";import m from"node:path";var s=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 c(){return s.filter(e=>e.website)}function d(){return s.filter(e=>e.detect!==!1&&(e.bins?.length||e.kind==="oracle"))}function l(e){return s.find(n=>n.id===e)?.mcpTarget||"generic"}function p(e){return e==="oracle"?"oracle chat":`oracle mcp install ${l(e)}`}var I=Object.freeze({openrouter:{key:"OPENROUTER_API_KEY",baseUrl:"https://openrouter.ai/api/v1",model:"openrouter/auto"},openai:{key:"OPENAI_API_KEY",baseUrl:"https://api.openai.com/v1",model:"gpt-4.1-mini"},anthropic:{key:"ANTHROPIC_API_KEY",baseUrl:"https://api.anthropic.com/v1",model:"claude-sonnet-4-6",protocol:"anthropic-messages"},xai:{key:"XAI_API_KEY",baseUrl:"https://api.x.ai/v1",model:"grok-4.6"},deepseek:{key:"DEEPSEEK_API_KEY",baseUrl:"https://api.deepseek.com/v1",model:"deepseek-chat"},gemini:{key:"GEMINI_API_KEY",alternateKey:"GOOGLE_API_KEY",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai",model:"gemini-2.5-flash"},kimi:{key:"MOONSHOT_API_KEY",alternateKey:"KIMI_API_KEY",baseUrl:"https://api.moonshot.ai/v1",model:"kimi-k3",protocol:"openai-chat"},mistral:{key:"MISTRAL_API_KEY",baseUrl:"https://api.mistral.ai/v1",model:"mistral-large-latest",protocol:"openai-chat"}}),L=Object.freeze({"anthropic-oauth":{key:"ANTHROPIC_API_KEY",baseUrl:"https://api.anthropic.com/v1",model:"claude-sonnet-4-20250514",protocol:"anthropic-messages"},"openai-codex":{key:"OPENAI_API_KEY",baseUrl:"https://chatgpt.com/backend-api/codex",model:"gpt-5.4",protocol:"responses"},"xai-oauth":{key:"XAI_API_KEY",baseUrl:"https://api.x.ai/v1",model:"grok-4.6",protocol:"responses"}});var H=Object.freeze(["xai-oauth","anthropic-oauth","openai-codex"]);function A(){return d().map(e=>({name:e.id,bin:e.bins?.[0]||e.id,label:e.label,kind:e.kind,altBins:(e.bins||[]).slice(1)}))}function f(e){for(let o of(process.env.PATH||"").split(m.delimiter)){let n=m.join(o,e);try{if(k.existsSync(n))return n}catch{}}return null}function O(e){let o=[e.bin,...e.altBins||[]].filter(Boolean);for(let n of o){let r=f(n);if(r)return r}return null}function h(e=process.env){let o=[];for(let r of A()){if(r.kind==="oracle"||r.name==="oracle"){o.push({...r,path:process.argv[1]||"oracle"});continue}let a=O(r);a&&o.push({name:r.name,bin:r.bin,label:r.label,kind:r.kind,path:a})}let n=String(e.ORACLE_HARNESS_EXTRA||"").split(",").map(r=>r.trim()).filter(Boolean);for(let r of n){if(o.some(t=>t.bin===r||t.name===r))continue;let a=f(r);a&&o.push({name:r,bin:r,label:r,kind:"mcp",path:a})}return o}function w(e){if(e.kind==="oracle"||e.name==="oracle")return{...e,direction:"native",integrate:"oracle chat",outbound:"oracle chat",inbound:null,plugins:null,backendEnv:null,note:"Oracle native harness. Default. No external client required."};let o=l(e.name)||"generic",n=e.name==="hermes"?"hermes":e.name;return{...e,direction:"client",integrate:`oracle mcp install ${o}`,outbound:`oracle chat --backend ${n}`,inbound:`oracle mcp install ${o}`,plugins:"oracle plugins install <path|git-url>",backendEnv:`ORACLE_CHAT_BACKEND=${n}`,note:"Use through Oracle (`oracle chat --backend \u2026`) or wire Oracle into this client (`oracle mcp install`). Detection never auto-selects."}}function _(e){let o=e.map(w),n=o.find(i=>i.direction==="native"),r=o.filter(i=>i.direction!=="native"),a=c().filter(i=>i.kind==="mcp"),t=[];if(t.push(""),t.push("Three ways to run Oracle:"),t.push(` 1) Oracle native ${n?n.path:"oracle"}`),t.push(" oracle setup model && oracle chat"),t.push(" 2) Through Oracle attach Hermes / Claude / Codex as the engine"),t.push(" oracle chat --backend hermes"),t.push(" 3) Into your client wire Oracle MCP into the agent you already use"),t.push(" oracle mcp install <target> | oracle plugins install <path>"),t.push(""),t.push("Native is default. Detection never auto-selects another harness."),t.push(""),t.push("Detected on this machine:"),r.length===0)t.push(" (none \u2014 Oracle native is enough)");else for(let i of r)t.push(` ${i.label.padEnd(22)} ${i.path}`),t.push(` ${" ".repeat(22)} \u2192 through Oracle: ${i.outbound}`),t.push(` ${" ".repeat(22)} into client: ${i.inbound}`);t.push(""),t.push("Website harness roster (MCP install targets):");for(let i of a){let b=p(i.id),g=r.find(E=>E.name===i.id);t.push(` ${i.label.padEnd(22)} ${b}${g?" [detected]":""}`)}return t.push(""),t.push("Also:"),t.push(" oracle mcp print --target generic"),t.push(" oracle plugins list"),t.push(" ORACLE_HARNESS_EXTRA=foo,bar # detect extra bins"),t.push(""),t.push("Models on the site (Grok, Gemini, DeepSeek, Qwen, Kimi) are providers for"),t.push("Oracle native \u2014 configure with oracle setup model / oracle auth, not as harnesses."),t.join(`
1
+ import k from"node:fs";import m from"node:path";var s=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 c(){return s.filter(e=>e.website)}function d(){return s.filter(e=>e.detect!==!1&&(e.bins?.length||e.kind==="oracle"))}function l(e){return s.find(n=>n.id===e)?.mcpTarget||"generic"}function p(e){return e==="oracle"?"oracle chat":`oracle mcp install ${l(e)}`}var I=Object.freeze({openrouter:{key:"OPENROUTER_API_KEY",baseUrl:"https://openrouter.ai/api/v1",model:"openrouter/auto"},openai:{key:"OPENAI_API_KEY",baseUrl:"https://api.openai.com/v1",model:"gpt-4.1-mini"},anthropic:{key:"ANTHROPIC_API_KEY",baseUrl:"https://api.anthropic.com/v1",model:"claude-sonnet-4-6",protocol:"anthropic-messages"},xai:{key:"XAI_API_KEY",baseUrl:"https://api.x.ai/v1",model:"grok-4.6"},deepseek:{key:"DEEPSEEK_API_KEY",baseUrl:"https://api.deepseek.com/v1",model:"deepseek-chat"},gemini:{key:"GEMINI_API_KEY",alternateKey:"GOOGLE_API_KEY",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai",model:"gemini-2.5-flash"},kimi:{key:"MOONSHOT_API_KEY",alternateKey:"KIMI_API_KEY",baseUrl:"https://api.moonshot.ai/v1",model:"kimi-k3",protocol:"openai-chat"},mistral:{key:"MISTRAL_API_KEY",baseUrl:"https://api.mistral.ai/v1",model:"mistral-large-latest",protocol:"openai-chat"},nous:{key:"NOUS_API_KEY",baseUrl:"https://inference-api.nousresearch.com/v1",model:"moonshotai/kimi-k3",protocol:"openai-chat"}}),L=Object.freeze({"anthropic-oauth":{key:"ANTHROPIC_API_KEY",baseUrl:"https://api.anthropic.com/v1",model:"claude-sonnet-4-20250514",protocol:"anthropic-messages"},"openai-codex":{key:"OPENAI_API_KEY",baseUrl:"https://chatgpt.com/backend-api/codex",model:"gpt-5.4",protocol:"responses"},"xai-oauth":{key:"XAI_API_KEY",baseUrl:"https://api.x.ai/v1",model:"grok-4.6",protocol:"responses"}});var U=Object.freeze(["xai-oauth","anthropic-oauth","openai-codex"]);function A(){return d().map(e=>({name:e.id,bin:e.bins?.[0]||e.id,label:e.label,kind:e.kind,altBins:(e.bins||[]).slice(1)}))}function f(e){for(let o of(process.env.PATH||"").split(m.delimiter)){let n=m.join(o,e);try{if(k.existsSync(n))return n}catch{}}return null}function O(e){let o=[e.bin,...e.altBins||[]].filter(Boolean);for(let n of o){let r=f(n);if(r)return r}return null}function h(e=process.env){let o=[];for(let r of A()){if(r.kind==="oracle"||r.name==="oracle"){o.push({...r,path:process.argv[1]||"oracle"});continue}let a=O(r);a&&o.push({name:r.name,bin:r.bin,label:r.label,kind:r.kind,path:a})}let n=String(e.ORACLE_HARNESS_EXTRA||"").split(",").map(r=>r.trim()).filter(Boolean);for(let r of n){if(o.some(t=>t.bin===r||t.name===r))continue;let a=f(r);a&&o.push({name:r,bin:r,label:r,kind:"mcp",path:a})}return o}function _(e){if(e.kind==="oracle"||e.name==="oracle")return{...e,direction:"native",integrate:"oracle chat",outbound:"oracle chat",inbound:null,plugins:null,backendEnv:null,note:"Oracle native harness. Default. No external client required."};let o=l(e.name)||"generic",n=e.name==="hermes"?"hermes":e.name;return{...e,direction:"client",integrate:`oracle mcp install ${o}`,outbound:`oracle chat --backend ${n}`,inbound:`oracle mcp install ${o}`,plugins:"oracle plugins install <path|git-url>",backendEnv:`ORACLE_CHAT_BACKEND=${n}`,note:"Use through Oracle (`oracle chat --backend \u2026`) or wire Oracle into this client (`oracle mcp install`). Detection never auto-selects."}}function w(e){let o=e.map(_),n=o.find(i=>i.direction==="native"),r=o.filter(i=>i.direction!=="native"),a=c().filter(i=>i.kind==="mcp"),t=[];if(t.push(""),t.push("Three ways to run Oracle:"),t.push(` 1) Oracle native ${n?n.path:"oracle"}`),t.push(" oracle setup model && oracle chat"),t.push(" 2) Through Oracle attach Hermes / Claude / Codex as the engine"),t.push(" oracle chat --backend hermes"),t.push(" 3) Into your client wire Oracle MCP into the agent you already use"),t.push(" oracle mcp install <target> | oracle plugins install <path>"),t.push(""),t.push("Native is default. Detection never auto-selects another harness."),t.push(""),t.push("Detected on this machine:"),r.length===0)t.push(" (none \u2014 Oracle native is enough)");else for(let i of r)t.push(` ${i.label.padEnd(22)} ${i.path}`),t.push(` ${" ".repeat(22)} \u2192 through Oracle: ${i.outbound}`),t.push(` ${" ".repeat(22)} into client: ${i.inbound}`);t.push(""),t.push("Website harness roster (MCP install targets):");for(let i of a){let b=p(i.id),g=r.find(E=>E.name===i.id);t.push(` ${i.label.padEnd(22)} ${b}${g?" [detected]":""}`)}return t.push(""),t.push("Also:"),t.push(" oracle mcp print --target generic"),t.push(" oracle plugins list"),t.push(" ORACLE_HARNESS_EXTRA=foo,bar # detect extra bins"),t.push(""),t.push("Models on the site (Grok, Gemini, DeepSeek, Qwen, Kimi) are providers for"),t.push("Oracle native \u2014 configure with oracle setup model / oracle auth, not as harnesses."),t.join(`
2
2
  `)}function u(){return["oracle harness \u2014 detect installed agent clients",""," oracle harness detect scan PATH + show website harness roster"," oracle harness list alias of detect","","Modes:"," Oracle native oracle chat"," Through Oracle oracle chat --backend hermes|claude|codex|\u2026"," Into the client oracle mcp install <target>","",`Website roster: ${c().map(o=>o.id).join(", ")}`,"Extra bins: ORACLE_HARNESS_EXTRA=foo,bar","","Detection never selects a backend."].join(`
3
3
  `)}var $={name:"harness",summary:"detect agent clients; use Oracle native or wire MCP into them",usage:u,async run(e,o){let n=e[0];if(n==="help"||n==="--help"||n==="-h")return process.stdout.write(u()+`
4
4
  `),0;if(n&&n!=="detect"&&n!=="list")return process.stderr.write(`oracle harness: unknown subcommand '${n}'
5
5
  `),process.stderr.write(u()+`
6
- `),1;let r=h();return process.stdout.write(_(r)+`
7
- `),0}};export{s as HARNESS_ROSTER,w as classifyHarness,$ as default,_ as renderHarnessReport,c as websiteHarnesses};
6
+ `),1;let r=h();return process.stdout.write(w(r)+`
7
+ `),0}};export{s as HARNESS_ROSTER,_ as classifyHarness,$ as default,w as renderHarnessReport,c as websiteHarnesses};
@@ -1,3 +1,3 @@
1
1
  import{spawnSync as c}from"node:child_process";var n=["oracle data serve # loopback read/prepare plane on 127.0.0.1:8787","oracle doctor # verify","oracle setup model # choose Claude, Codex, or Grok subscription OAuth","oracle chat # premium oracle chat surface","oracle chain list # pick hyperliquid/base/solana/...","oracle setup # telegram/discord/slack messaging","oracle mcp install claude-code"];function t(){return["","Next:",...n.map(s=>" "+s),""].join(`
2
- `)}var d={name:"init",summary:"install agent lanes + read plane (dry-run by default)",group:"read",usage:"oracle init [--apply --force --only <lane> --json --yes]",async run(s){let r=[...s.argv];r.includes("--yes")&&!r.includes("--apply")&&r.push("--apply");let a=s.bin("oracle-init.mjs"),e=c(process.execPath,[a,...r],{encoding:"utf8",env:process.env});if(e.error)return process.stderr.write(`oracle: failed to spawn oracle-init: ${e.error.message}
3
- `),1;e.stdout&&process.stdout.write(e.stdout),e.stderr&&process.stderr.write(e.stderr);let o=typeof e.status=="number"?e.status:1;return o===0&&r.includes("--apply")&&!r.includes("--json")&&process.stdout.write(t()),o}};export{d as default};
2
+ `)}var u={name:"init",summary:"install agent lanes + read plane (dry-run by default)",group:"read",usage:"oracle init [--apply --force --only <lane> --json --yes]",async run(s){let r=[...s.argv];r.includes("--yes")&&!r.includes("--apply")&&r.push("--apply");let a=s.bin("oracle-init.mjs"),e=c(process.execPath,[a,...r],{encoding:"utf8",env:process.env});if(e.error)return process.stderr.write(`oracle: failed to spawn oracle-init: ${e.error.message}
3
+ `),1;e.stdout&&process.stdout.write(e.stdout),e.stderr&&process.stderr.write(e.stderr);let o=typeof e.status=="number"?e.status:1;return o===0&&r.includes("--apply")&&!r.includes("--json")&&process.stdout.write(t()),o}};export{u as default};