@oracle-agent/oracle 0.24.7 → 0.24.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -45
- package/SECURITY.md +1 -1
- package/SETUP.md +16 -13
- package/dist/assets/profiles/_template/SOUL.md +2 -2
- package/dist/assets/profiles/oracle/SOUL.md +11 -13
- package/dist/assets/profiles/profile.schema.json +1 -1
- package/dist/assets/profiles/robinhood-agent/SOUL.md +5 -5
- package/dist/assets/skills/multi-venue-prepare-only-ranking/SKILL.md +2 -2
- package/dist/assets/skills/oracle-action-semantics/SKILL.md +5 -5
- package/dist/assets/skills/oracle-chat/SKILL.md +8 -8
- package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
- package/dist/assets/skills/oracle-receipts/SKILL.md +2 -2
- package/dist/bin/desk-server.mjs +80 -36
- package/dist/bin/oracle-data-mcp.mjs +51 -7
- package/dist/bin/oracle-gateway.mjs +13 -15
- package/dist/bin/oracle-init.mjs +9 -9
- package/dist/bin/oracle-public-server.mjs +48 -4
- package/dist/bin/oracle-route.mjs +66 -22
- package/dist/bin/oracle-scan.mjs +58 -14
- package/dist/cli/commands/chat.mjs +140 -96
- package/dist/cli/commands/doctor.mjs +6 -6
- package/dist/cli/commands/eval.mjs +17 -17
- package/dist/cli/commands/farm.mjs +72 -28
- package/dist/cli/commands/follow.mjs +61 -17
- package/dist/cli/commands/model.mjs +147 -103
- package/dist/cli/commands/receipt.mjs +3 -3
- package/dist/cli/commands/resolve.mjs +55 -11
- package/dist/cli/commands/setup.mjs +27 -27
- package/dist/cli/commands/sign.mjs +14 -13
- package/dist/cli/commands/signer.mjs +12 -17
- package/dist/cli/commands/strategy.mjs +50 -6
- package/dist/cli/commands/swap.mjs +72 -29
- package/dist/cli/commands/venues.mjs +3 -3
- package/dist/data/desk-data.mjs +78 -34
- package/dist/data/names.mjs +46 -2
- package/dist/data/providers/farming.mjs +46 -2
- package/dist/index.mjs +83 -39
- package/dist/local-signer/index.mjs +1 -1
- package/dist/router/index.mjs +46 -2
- package/dist/router/prepare-bridge.mjs +46 -2
- package/dist/scanner/index.mjs +48 -4
- package/dist/strategy/index.mjs +47 -3
- package/package.json +5 -3
- package/public/install.ps1 +1 -1
- package/public/install.sh +5 -4
- package/public/oracle-splash/_variants/ice.html +3 -3
- package/public/oracle-splash/_variants/ivory.html +3 -3
- package/public/oracle-splash/downloads/index.html +5 -5
- package/public/oracle-splash/index.html +7 -7
- package/public/oracle-splash/install.ps1 +1 -1
- package/public/oracle-splash/install.sh +5 -4
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var Xe=Object.defineProperty;var c=(e,r,t)=>()=>{if(t)throw t[0];try{return e&&(r=e(e=0)),r}catch(n){throw t=[n],n}};var me=(e,r)=>{for(var t in r)Xe(e,t,{get:r[t],enumerable:!0})};import F from"node:fs";import Ze from"node:os";import R from"node:path";import{fileURLToPath as Qe}from"node:url";function J(){return process.env.ORACLE_FAKE_HOME||Ze.homedir()}function tt(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function N(){return tt()?process.env.ORACLE_CONFIG_DIR||R.join(J(),".config","oracle"):R.join(J(),".config","oracle")}function rt(){return R.join(N(),"desk.json")}function nt(){return R.join(N(),"env")}function C({force:e=!1}={}){if(C._done&&!e)return C._result||null;C._done=!0;let r={},t=(o,i)=>{if(i==null)return;let a=String(i).trim();a&&(process.env[o]!=null&&String(process.env[o]).trim()!==""||(process.env[o]=a,r[o]=a))};try{let o=nt();if(F.existsSync(o))for(let i of F.readFileSync(o,"utf8").split(/\r?\n/)){let a=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!a||a[2].startsWith("#"))continue;let u=a[2];(u.startsWith('"')&&u.endsWith('"')||u.startsWith("'")&&u.endsWith("'"))&&(u=u.slice(1,-1)),t(a[1],u)}}catch{}try{let o=rt();if(F.existsSync(o)){let i=JSON.parse(F.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)),C._result=Object.keys(r).length?r:null,C._result}var et,l,q=c(()=>{et=R.dirname(Qe(import.meta.url)),l=R.resolve(et,"../..");try{C()}catch{}});var re,Pr,Ae=c(()=>{re={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}},Pr=new Map(Object.values(re).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 ne=c(()=>{});var _e=c(()=>{});var Oe=c(()=>{});var D=c(()=>{});var $=c(()=>{});var ie=c(()=>{D();$()});import{isAddress as zr}from"ethers";var ae=c(()=>{ie();D();$()});import{Interface as Tt,isAddress as Zr}from"ethers";var rn,ke=c(()=>{ae();D();$();rn=new Tt(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as Ct,isAddress as an}from"ethers";var ln,dn,Te=c(()=>{ae();D();$();ln=new Ct(["function approve(address spender,uint256 amount) returns (bool)"]),dn=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var Ce=c(()=>{});import{Interface as Rt,MaxUint256 as xn,isAddress as En,keccak256 as yn,toUtf8Bytes as Sn}from"ethers";var Tn,Re=c(()=>{Oe();ke();Te();Ce();$();Tn=new Rt(["function approve(address spender,uint256 amount) returns (bool)"])});var Nt,Ln,It,$n,Pn,se=c(()=>{Re();ie();Nt=new Set(["evm","evm-swap","evm-bridge","btc","sol"]),Ln=Object.freeze({swap:5,bridge:5,perps:0,nft:0}),It=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"},"0x7b939232":{provider:"across-v3",action:"bridge",layout:"across-deposit-v3"}}),$n=Object.freeze([...Nt]),Pn=Object.freeze({...It})});var Ne=c(()=>{se()});var Ie=c(()=>{Ne()});var Jn,Yn,Xn,V=c(()=>{Jn=Object.freeze({N:1<<17,r:8,p:1}),Yn=256*1024*1024,Xn=16*1024});import{homedir as ce}from"node:os";import{join as ue}from"node:path";var Le,$t,to,$e=c(()=>{Le=process.env.ORACLE_PUBLIC_DESKTOP==="1",$t=Le?process.env.ORACLE_CONFIG_DIR||ue(ce(),".config","oracle"):ue(ce(),".config","oracle"),to=Le?$t:ue(ce(),".config","mad-desk")});var ao,so,co,Pe=c(()=>{$e();ao="0".repeat(64),so=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"}),co=Promise.resolve()});var Me=c(()=>{Pe();V()});var De=c(()=>{});import k from"node:path";function Be(e){return{vault:k.join(e,"vault.json"),policy:k.join(e,"signer-policy.json"),policyKey:k.join(e,"policy-integrity-key"),triggerAuthorityPublicKey:k.join(e,"trigger-attestation-authority.pub"),ledger:k.join(e,"signer-ledger.json"),token:k.join(e,"signer-token"),lock:k.join(e,"signer.lock")}}var Ue=c(()=>{Ie();V();Me();De();se()});import le from"node:fs";import Fe from"node:path";import{homedir as jt}from"node:os";function Mt(){return process.env.ORACLE_CONFIG_DIR||Fe.join(jt(),".config","oracle")}function B(){let e=Be(Fe.join(Mt(),"signer")),r=le.existsSync(e.vault),t=le.existsSync(e.lock),n=r?t?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:r,policyConfigured:le.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 Fo,de=c(()=>{ne();_e();Ue();V();Fo=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 z(e){return String(e||"").trim()||void 0}function Bt(e,{required:r=!1}={}){let t=z(e)?.toLowerCase();if(!t){if(r)throw new Error("model provider is required");return}if(!Dt.has(t))throw new Error(`unsupported provider: ${t}`);return t}function Ut(e,{required:r=!1}={}){let t=z(e);if(!t){if(r)throw new Error("model is required");return}if(t.includes("..")||t.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(t))throw new Error("invalid model id");return t}function Ft(e){let r=z(e);if(!r||r.length>2048)throw new Error("invalid custom base URL");let t;try{t=new URL(r)}catch{throw new Error("invalid custom base URL")}let n=t.hostname.toLowerCase().replace(/^\[|\]$/g,""),o=n==="localhost"||n==="127.0.0.1"||n==="::1";if(t.protocol!=="https:"&&!(t.protocol==="http:"&&o)||t.username||t.password||t.search||t.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return t.toString().replace(/\/+$/,"")}function qe({provider:e,model:r,baseUrl:t}={},{requireModel:n=!1}={}){let o=Bt(e),i=Ut(r,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:Ft(t)};if(z(t))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var Dt,He=c(()=>{Dt=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","custom","anthropic-oauth","openai-codex","xai-oauth"])});import Ge from"node:fs";import qt from"node:path";function Gt(){return qt.join(N(),"model.json")}function P(e){return String(e||"").trim()||void 0}function Vt(e={}){let r=P(e.backend)?.toLowerCase()||"auto",t=qe({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:r==="standalone"}),n=P(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=P(e.reasoningEffort),a=P(e.computeHost||e.remoteHost),u=P(e.computeUser||e.remoteUser),f=P(e.computePath||e.remotePath);if(!Ht.has(r))throw new Error(`unsupported backend: ${r}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(r))throw new Error("remote compute backends are disabled in the public desktop");if(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))throw new Error("api key env must be an uppercase environment variable name");if(r==="remote"&&!a)throw new Error("remote backend requires computeHost");return{backend:r,...t,...n?{apiKeyEnv:n}:{},...Number.isFinite(o)&&o>0?{contextLength:o}:{},...i?{reasoningEffort:i}:{},...a?{computeHost:a}:{},...u?{computeUser:u}:{},...f?{computePath:f}:{}}}function Ve(){let e=Gt();if(!Ge.existsSync(e))return null;try{return Vt(JSON.parse(Ge.readFileSync(e,"utf8")))}catch{return null}}var Ht,ze=c(()=>{q();He();Ht=new Set(["auto","standalone","hermes","remote","arch"])});var We={};me(We,{classifyReceipt:()=>M,configDir:()=>Jt,firstHourReport:()=>fe,venueMap:()=>W});import zt from"node:path";import{homedir as Wt}from"node:os";function Jt(e=process.env){return e.ORACLE_CONFIG_DIR||zt.join(Wt(),".config","oracle")}function W({env:e=process.env,vault:r=null}={}){let t=r||B(),n=[];for(let[o,i]of Object.entries(re)){let a=(i.rpcEnv||[]).some(f=>String(e[f]||"").trim()),u="prepare";i.evm?a&&(u="live"):u="unavailable",n.push({key:o,chainId:i.chainId,name:i.name,family:"evm",status:u,execute:!!(t.vaultExists&&t.armed&&!t.disarmed),note:a?"rpc configured":"public read/prepare; set RPC for live reads"})}return n.push({key:"solana",chainId:null,name:"Solana",family:"sol",status:"prepare",execute:!1,note:"Jupiter quote/prepare; local sol signer"},{key:"bitcoin",chainId:null,name:"Bitcoin",family:"btc",status:"prepare",execute:!1,note:"Esplora read; local btc signer"},{key:"hyperliquid-l1",chainId:null,name:"Hyperliquid L1",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not an EVM signer family"},{key:"polymarket",chainId:null,name:"Polymarket",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not a signer family"}),n}function fe({env:e=process.env,model:r=Ve(),vault:t=B(),signerReachable:n=!1,quote:o=null}={}){let i=[],a=(p,h,v,A=null)=>i.push({id:p,status:h,detail:v,fix:A}),u=(()=>{let[p,h]=process.versions.node.split(".").map(Number);return p>20||p===20&&h>=19})();a("node",u?"ok":"fail",`node ${process.versions.node}`,u?null:"install node >= 20.19"),r?r.backend==="hermes"?a("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):a("model","ok",`${r.backend||"auto"} ${r.provider||""} ${r.model||""}`.trim()):a("model","fail","no model.json","oracle setup model"),t.vaultExists?t.disarmed?a("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):a("vault",t.armed?"ok":"warn",t.armed?"present, armed":"present, not armed"):a("vault","fail","no local vault","oracle sign init");let f=e.ORACLE_SIGNER_HOST||"127.0.0.1";return Kt.has(f)?a("signer",n?"ok":"warn",n?`loopback ${f}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):a("signer","fail",`signer host ${f} is not loopback`,"unset ORACLE_SIGNER_HOST"),o?o.ok?a("quote","ok",o.detail||"net quote returned"):a("quote","warn",o.detail||"quote unavailable","check network / oracle data serve"):a("quote","warn","quote not probed",null),{ok:!i.some(p=>p.status==="fail"),checks:i,venues:W({env:e,vault:t})}}var Kt,pe=c(()=>{Ae();de();ze();ne();Kt=new Set(["127.0.0.1","::1","localhost"])});var Ke={};me(Ke,{classifyReceipt:()=>M,default:()=>Zt,firstHourReport:()=>fe,probeQuote:()=>Xt,probeSigner:()=>Yt,vaultStatus:()=>B});async function Yt(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 Xt(){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 Zt,Je=c(()=>{pe();de();Zt={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=W();if(r)return process.stdout.write(`${JSON.stringify({venues:t},null,2)}
|
|
2
|
-
`),0;for(let n of
|
|
3
|
-
`);return 0}}});import K from"node:fs";import Qt from"node:path";import ge from"node:fs";import I from"node:path";q();var it="0.19.0",dr=`hermes-agent==${it}`;var he="0.12.1",fr=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${he}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${he}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function at(){return I.join(N(),"runtime")}function st(){return I.join(at(),"venv")}function ct(e){let r=process.platform==="win32"?"Scripts":"bin",t=process.platform==="win32"?`${e}.exe`:e;return I.join(st(),r,t)}function ut(){return ct("hermes")}function lt(e){let r=process.platform==="win32"&&!I.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let t of(process.env.PATH||"").split(I.delimiter))if(t)for(let n of r){let o=I.join(t,`${e}${n}`);try{if(ge.existsSync(o))return o}catch{}}return null}function we(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=ut();if(ge.existsSync(e))return{ok:!0,bin:e,source:"managed"};let r=lt("hermes");return r?{ok:!0,bin:r,source:"path"}:{ok:!1,bin:null,source:null}}import O from"node:fs";import d from"node:path";q();import{existsSync as xe,readFileSync as dt}from"node:fs";import{dirname as be,join as Y}from"node:path";import{fileURLToPath as ft}from"node:url";function pt(e){let r=be(ft(e));for(let t=0;t<8;t+=1){let n=Y(r,"package.json");if(xe(n))try{let i=JSON.parse(dt(n,"utf8"));if(i&&typeof i.version=="string")return r}catch{}let o=be(r);if(o===r)break;r=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function Ee(e,r){let t=pt(r),n=Y(t,e);return xe(n)?n:Y(t,"dist","assets",e)}var mt=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 ye(){return mt.filter(e=>e.website)}var X=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function Z(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"]),ht="deny",Er=256*1024;var yr=Object.freeze({version:1,source:"default",defaultDecision:ht,allow:L,deny:Object.freeze([])});var Q=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),vr=Object.freeze({wallets:"wallet",smart_wallet:"wallet",pools:"pool",new_pool:"pool",nft:"nft_floor",nft_floors:"nft_floor",hyperliquid:"hl_flow",prediction:"prediction_market",prediction_markets:"prediction_market"}),x=(e,r=0,t=1)=>Math.min(t,Math.max(r,e)),w=e=>Number.isFinite(Number(e))?Number(e):null,gt=e=>Math.round(e*1e4)/1e4;function b(e,r,t,n=!0){!n||t===null||!Number.isFinite(t)||e.push({feature:r,value:gt(t)})}function wt(e,r){let t=w(e.repeatBuys??e.repeat_buys??e.buyCount),n=w(e.walletWinRate??e.winRate);b(r,"repeat_buys",t===null?null:x((t-1)/4)*.38),b(r,"wallet_win_rate",n===null?null:(x(n)-.5)*.5)}function bt(e,r){let t=w(e.ageHours??e.poolAgeHours),n=w(e.liquidityUsd??e.liquidity),o=e.liquidityLocked??e.locked;b(r,"pool_age",t===null?null:t<24?-.42:x(t/720)*.12),b(r,"liquidity",n===null?null:(x(Math.log10(Math.max(1,n))/7)-.5)*.28),b(r,"liquidity_lock",o==null?null:o?.12:-.28)}function xt(e,r){let t=w(e.floorChange??e.floorChangePct),n=w(e.sales??e.saleCount);b(r,"floor_change",t===null?null:x(t,-1,1)*.35),b(r,"sales_depth",n===null?null:x(n/50)*.18)}function Et(e,r){let t=w(e.flowImbalance??e.imbalance),n=w(e.fundingRate??e.funding);b(r,"flow_imbalance",t===null?null:x(t,-1,1)*.42),b(r,"funding",n===null?null:-x(n*100,-1,1)*.12)}function yt(e,r){let t=w(e.marketProbability??e.marketPrice??e.probability),n=w(e.fairProbability??e.referenceProbability??e.fairValue);b(r,"probability_mispricing",t===null||n===null?null:x(n-t,-1,1)*.65);let o=w(e.liquidityUsd??e.liquidity);b(r,"market_liquidity",o===null?null:x(Math.log10(Math.max(1,o))/6)*.12)}var Ar=Object.freeze({wallet:wt,pool:bt,nft_floor:xt,hl_flow:Et,prediction_market:yt});function ee(e){try{return O.existsSync(e)}catch{return!1}}function H(e){for(let r of e)if(r&&ee(r))return r;return null}function te(e){try{return Ee(e,import.meta.url)}catch{return null}}function St(){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(ee(n))try{let i=O.readFileSync(n,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],a=new Set(i.map(u=>u.toLowerCase()));if(a.size>=20)return{count:a.size,detail:`${a.size} provider ids (bundled desk-data)`}}catch{}let r=[d.join(l,"src/data/providers"),d.join(l,"dist/data/providers"),d.join(l,"data/providers")],t=H(r);if(!t)return{count:0,detail:"providers dir missing"};try{let n=O.readdirSync(t).filter(o=>o.endsWith(".mjs"));return{count:n.length,detail:`${n.length} provider modules`}}catch(n){return{count:0,detail:n instanceof Error?n.message:String(n)}}}function Se(){let e=H([te("skills"),d.join(l,"skills"),d.join(l,"dist/assets/skills"),d.join(l,"assets/skills")]);if(!e)return{count:0,trading:[],building:[]};let r=O.readdirSync(e),t=r.filter(o=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(o)),n=r.filter(o=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(o));return{count:r.length,trading:t,building:n}}function vt(){let e=H([te("protocols/templates"),d.join(l,"protocols/templates"),d.join(l,"dist/assets/protocols/templates"),d.join(l,"assets/protocols/templates")]);return e?O.readdirSync(e).filter(t=>!t.startsWith(".")):Se().building.some(t=>/protocol-builder|dex-launch|token-launch/i.test(t))?["(via skills: protocol-builder / launch packs)"]:[]}function At(){let e=H([te("profiles"),d.join(l,"profiles"),d.join(l,"dist/assets/profiles"),d.join(l,"assets/profiles")]);return e?O.readdirSync(e,{withFileTypes:!0}).filter(r=>r.isDirectory()&&!r.name.startsWith("_")).map(r=>r.name):[]}function _t(){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(ee(r))try{let t=O.readFileSync(r,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(t))return!0}catch{}return!1}function ve(e=process.env){let r=[],t=(s,T,j,S=1)=>{r.push({id:s,status:T,detail:j,weight:S})},[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(s=>!L.includes(s));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 [${X.join(", ")}]; mode=${Z(e)?"ON":"off"}`,2);let f=St();t("providers",f.count>=40?"ok":f.count>=10?"warn":"fail",f.detail,3);let g=Se();t("skills_trading_build",g.trading.length>=5&&g.building.length>=4?"ok":g.count>=10?"warn":"fail",`${g.count} skills; trading=${g.trading.length} building=${g.building.length}`,3);let p=vt();t("protocol_templates",p.length>=2?"ok":"warn",p.length?p.join(", "):"none",2);let h=At();t("profiles",h.includes("protocol-builder")&&h.includes("oracle")?"ok":h.length>=1?"warn":"fail",h.join(", ")||"none",2),t("signals_engine",Q.length>=4?"ok":"fail",`types: ${Q.join(", ")} (cold / no hot exec)`,2);let v=ye();t("harness_roster",v.length>=8?"ok":"warn",`${v.length} website harnesses; native default; MCP inbound only`,2),t("custody_prepare_only",_t()?"ok":"fail","public plane prepare-only",4);let A=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";t("data_url","ok",A,1);let _=0,y=0;for(let s of r)y+=s.weight,s.status==="ok"?_+=s.weight:s.status==="warn"&&(_+=s.weight*.5);let m=y?Math.round(_/y*100):0,E=!r.some(s=>s.status==="fail")&&m>=70,U=E?`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:E,score:_,max:y,pct:m,summary:U,researchMode:Z(e),attributes:[...X],packageRoot:l,checks:r}}function Ye(){let[e,r]=process.versions.node.split(".").map(Number);return e>20||e===20&&r>=19}function er(e){if(!K.existsSync(e))return{};let r={};for(let t of K.readFileSync(e,"utf8").split(/\r?\n/)){let n=t.match(/^([A-Z0-9_]+)=(.*)$/);n&&(r[n[1]]=n[2])}return r}async function tr(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 si={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,a=(s,T,j,S=null)=>{o.push({id:s,status:T,detail:j,fix:S}),T==="fail"&&(i=!0)};a("node",Ye()?"ok":"fail",`node ${process.versions.node}`,Ye()?null:"install node >= 20.19");let u=e.paths.oracleExecEnvPath(),f=er(u),g=process.env.ORACLE_ROUTE_ATTESTATION_SECRET||process.env.MAD_ROUTE_ATTESTATION_SECRET||process.env.ORACLE_ATTESTATION_SECRET||process.env.ORACLE_STAMP_HMAC_SECRET||f.ORACLE_ROUTE_ATTESTATION_SECRET||f.MAD_ROUTE_ATTESTATION_SECRET||f.ORACLE_ATTESTATION_SECRET||f.ORACLE_STAMP_HMAC_SECRET;a("attestation_secret",g?"ok":"warn",g?"present":"missing",g?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let p=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",h=await tr(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;a("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 A=we();a("harness_model","ok","Oracle native is default; external clients are inbound MCP only (oracle harness detect)",null),a("hermes_opt_in","ok",A.ok?`detected ${A.bin} (${A.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let _=Qt.join(e.paths.hermesRoot(),"profiles"),y=0;K.existsSync(_)&&(y=K.readdirSync(_,{withFileTypes:!0}).filter(s=>s.isDirectory()).length),a("hermes_lanes","ok",y>0?`${y} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);let m=null;if(t){m=ve(process.env);for(let s of m.checks)a(`agentic_${s.id}`,s.status,s.detail,null)}let E=null;if(n){let{firstHourReport:s}=await Promise.resolve().then(()=>(pe(),We)),{probeSigner:T,probeQuote:j}=await Promise.resolve().then(()=>(Je(),Ke));E=s({signerReachable:await T(process.env),quote:await j()});for(let S of E.checks)a(`hour_${S.id}`,S.status,S.detail,S.fix)}let U={ok:!i&&(m?m.ok:!0)&&(E?E.ok:!0),checks:o,...E?{firstHour:E}:{},...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
|
-
`);else{for(let
|
|
5
|
-
`),
|
|
1
|
+
var ir=Object.defineProperty;var s=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var Se=(e,t)=>{for(var r in t)ir(e,r,{get:t[r],enumerable:!0})};import D from"node:fs";import ar from"node:os";import I from"node:path";import{fileURLToPath as sr}from"node:url";function Z(){return process.env.ORACLE_FAKE_HOME||ar.homedir()}function ur(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function L(){return ur()?process.env.ORACLE_CONFIG_DIR||I.join(Z(),".config","oracle"):I.join(Z(),".config","oracle")}function lr(){return I.join(L(),"desk.json")}function fr(){return I.join(L(),"env")}function R({force:e=!1}={}){if(R._done&&!e)return R._result||null;R._done=!0;let t={},r=(o,i)=>{if(i==null)return;let a=String(i).trim();a&&(process.env[o]!=null&&String(process.env[o]).trim()!==""||(process.env[o]=a,t[o]=a))};try{let o=fr();if(D.existsSync(o))for(let i of D.readFileSync(o,"utf8").split(/\r?\n/)){let a=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!a||a[2].startsWith("#"))continue;let u=a[2];(u.startsWith('"')&&u.endsWith('"')||u.startsWith("'")&&u.endsWith("'"))&&(u=u.slice(1,-1)),r(a[1],u)}}catch{}try{let o=lr();if(D.existsSync(o)){let i=JSON.parse(D.readFileSync(o,"utf8"));i&&typeof i=="object"&&(r("ORACLE_DESK_URL",i.deskUrl||i.dataUrl||i.url),r("ORACLE_DATA_URL",i.dataUrl||i.deskUrl||i.url),r("ORACLE_API_URL",i.apiUrl||i.dataUrl||i.deskUrl),r("ORACLE_PUBLIC_URL",i.publicUrl||i.deskUrl||i.dataUrl),r("ORACLE_EXEC_URL",i.execUrl),r("MAD_DESK_URL",i.deskUrl||i.dataUrl))}}catch{}let n=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return n&&(r("ORACLE_DESK_URL",n),r("ORACLE_DATA_URL",n),r("ORACLE_API_URL",n),r("ORACLE_PUBLIC_URL",n),r("MAD_DESK_URL",n)),R._result=Object.keys(t).length?t:null,R._result}var cr,l,W=s(()=>{cr=I.dirname(sr(import.meta.url)),l=I.resolve(cr,"../..");try{R()}catch{}});var ie,Jt,Le=s(()=>{ie={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},Jt=new Map(Object.values(ie).map(e=>[e.chainId,e]))});function M(e){let t=e?.transactionHash||e?.hash||e?.txid||null;return t?{happened:!0,hash:String(t),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}var ae=s(()=>{});var Ce=s(()=>{});var Ne=s(()=>{});var F=s(()=>{});var P=s(()=>{});var ce=s(()=>{F();P()});import{isAddress as sn}from"ethers";var ue=s(()=>{ce();F();P()});import{Interface as Br,isAddress as pn}from"ethers";var wn,Pe=s(()=>{ue();F();P();wn=new Br(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as Mr,isAddress as En}from"ethers";var An,_n,$e=s(()=>{ue();F();P();An=new Mr(["function approve(address spender,uint256 amount) returns (bool)"]),_n=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var Be=s(()=>{});import{Interface as Fr,MaxUint256 as Nn,isAddress as Pn,keccak256 as $n,toUtf8Bytes as Bn}from"ethers";var Dn,j=s(()=>{Ne();Pe();$e();Be();P();Dn=new Fr(["function approve(address spender,uint256 amount) returns (bool)"])});var Hn,Vn,Me=s(()=>{Hn=300*1e3,Vn=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var G=s(()=>{j()});import{Address as Yn,NETWORK as Xn,OutScript as Zn,RawTx as Qn,SigHash as eo,TEST_NETWORK as ro,Transaction as to}from"@scure/btc-signer";var fe=s(()=>{});import{getCompiledTransactionMessageDecoder as io}from"@solana/transaction-messages";var de=s(()=>{});var Ur,yo,Dr,bo,Wr,Eo,z=s(()=>{j();ce();Me();G();fe();de();Ur=new Set(["evm","evm-swap","evm-bridge","evm-nft","btc","sol"]),yo=Object.freeze({swap:5,bridge:5,perps:0,nft:0,mint:0,transfer:0,approve: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"},"0x7b939232":{provider:"across-v3",action:"bridge",layout:"across-deposit-v3"}}),bo=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"}}),Wr=Object.freeze([...Ur]),Eo=Object.freeze({...Dr})});import{ed25519 as vo}from"@noble/curves/ed25519.js";import{base58 as _o}from"@scure/base";import{RawTx as ko,SigHash as To,Transaction as Ro}from"@scure/btc-signer";import{Transaction as Lo}from"ethers";var pe=s(()=>{});import{base58 as Bo}from"@scure/base";var me=s(()=>{z();G();j();pe()});var je=s(()=>{me();z()});var Ko,Jo,Yo,K=s(()=>{Ko=Object.freeze({N:1<<17,r:8,p:1}),Jo=256*1024*1024,Yo=16*1024});import{homedir as he}from"node:os";import{join as ge}from"node:path";var qe,Gr,ei,Ue=s(()=>{qe=process.env.ORACLE_PUBLIC_DESKTOP==="1",Gr=qe?process.env.ORACLE_CONFIG_DIR||ge(he(),".config","oracle"):ge(he(),".config","oracle"),ei=qe?Gr:ge(he(),".config","mad-desk")});var ii,ai,si,De=s(()=>{Ue();ii="0".repeat(64),ai=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"}),si=Promise.resolve()});var He=s(()=>{De();K();me()});var Ve=s(()=>{});import{Wallet as gi}from"ethers";import{base58 as yi}from"@scure/base";import{ed25519 as Ei}from"@noble/curves/ed25519.js";import{NETWORK as xi,TEST_NETWORK as vi,WIF as Ai,p2wpkh as _i}from"@scure/btc-signer";import{pubECDSA as ki}from"@scure/btc-signer/utils.js";var Ge=s(()=>{});import b from"node:path";import Kr from"node:os";import{createHash as Jr,randomBytes as Zi}from"node:crypto";import{Transaction as ea}from"@scure/btc-signer";import{ed25519 as ta}from"@noble/curves/ed25519.js";function ze(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||b.join(process.env.XDG_STATE_HOME||b.join(Kr.homedir(),".local","state"),"oracle"),r=Jr("sha256").update(b.resolve(e)).digest("hex").slice(0,16);return{vault:b.join(e,"vault.json"),policy:b.join(e,"signer-policy.json"),policyKey:b.join(e,"policy-integrity-key"),policyAnchor:b.join(t,`signer-policy-${r}.high-water`),ledger:b.join(e,"signer-ledger.json"),ledgerAnchor:b.join(t,`signer-ledger-${r}.high-water`),token:b.join(e,"signer-token"),lock:b.join(t,`signer-${r}.lock`)}}var Ke=s(()=>{je();K();He();Ve();j();z();G();pe();fe();de();Ge()});import we from"node:fs";import Je from"node:path";import{homedir as Yr}from"node:os";function Xr(){return process.env.ORACLE_CONFIG_DIR||Je.join(Yr(),".config","oracle")}function q(){let e=ze(Je.join(Xr(),"signer")),t=we.existsSync(e.vault),r=we.existsSync(e.lock),n=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:we.existsSync(e.policy),armed:t&&!r,disarmed:r,capabilities:{swap:n,bridge:n},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var _a,ye=s(()=>{ae();Ce();Ke();K();_a=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 J(e){return String(e||"").trim()||void 0}function Qr(e,{required:t=!1}={}){let r=J(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!Zr.has(r))throw new Error(`unsupported provider: ${r}`);return r}function et(e,{required:t=!1}={}){let r=J(e);if(!r){if(t)throw new Error("model is required");return}if(r.includes("..")||r.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(r))throw new Error("invalid model id");return r}function rt(e){let t=J(e);if(!t||t.length>2048)throw new Error("invalid custom base URL");let r;try{r=new URL(t)}catch{throw new Error("invalid custom base URL")}let n=r.hostname.toLowerCase().replace(/^\[|\]$/g,""),o=n==="localhost"||n==="127.0.0.1"||n==="::1";if(r.protocol!=="https:"&&!(r.protocol==="http:"&&o)||r.username||r.password||r.search||r.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return r.toString().replace(/\/+$/,"")}function Ye({provider:e,model:t,baseUrl:r}={},{requireModel:n=!1}={}){let o=Qr(e),i=et(t,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:rt(r)};if(J(r))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var Zr,Xe=s(()=>{Zr=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","custom","anthropic-oauth","openai-codex","xai-oauth"])});import Ze from"node:fs";import tt from"node:path";function ot(){return tt.join(L(),"model.json")}function $(e){return String(e||"").trim()||void 0}function it(e={}){let t=$(e.backend)?.toLowerCase()||"auto",r=Ye({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),n=$(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=$(e.reasoningEffort),a=$(e.computeHost||e.remoteHost),u=$(e.computeUser||e.remoteUser),d=$(e.computePath||e.remotePath);if(!nt.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(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))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,...r,...n?{apiKeyEnv:n}:{},...Number.isFinite(o)&&o>0?{contextLength:o}:{},...i?{reasoningEffort:i}:{},...a?{computeHost:a}:{},...u?{computeUser:u}:{},...d?{computePath:d}:{}}}function Qe(){let e=ot();if(!Ze.existsSync(e))return null;try{return it(JSON.parse(Ze.readFileSync(e,"utf8")))}catch{return null}}var nt,er=s(()=>{W();Xe();nt=new Set(["auto","standalone","hermes","remote","arch"])});var rr={};Se(rr,{classifyReceipt:()=>M,configDir:()=>ut,firstHourReport:()=>be,venueMap:()=>Y});import at from"node:path";import{homedir as st}from"node:os";function ut(e=process.env){return e.ORACLE_CONFIG_DIR||at.join(st(),".config","oracle")}function Y({env:e=process.env,vault:t=null}={}){let r=t||q(),n=[];for(let[o,i]of Object.entries(ie)){let a=(i.rpcEnv||[]).some(d=>String(e[d]||"").trim()),u="prepare";i.evm?a&&(u="live"):u="unavailable",n.push({key:o,chainId:i.chainId,name:i.name,family:"evm",status:u,execute:!!(r.vaultExists&&r.armed&&!r.disarmed),note:a?"rpc configured":"public read/prepare; set RPC for live reads"})}return n.push({key:"solana",chainId:null,name:"Solana",family:"sol",status:"prepare",execute:!1,note:"Jupiter quote/prepare; local sol signer"},{key:"bitcoin",chainId:null,name:"Bitcoin",family:"btc",status:"prepare",execute:!1,note:"Esplora read; local btc signer"},{key:"hyperliquid-l1",chainId:null,name:"Hyperliquid L1",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not an EVM signer family"},{key:"polymarket",chainId:null,name:"Polymarket",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not a signer family"}),n}function be({env:e=process.env,model:t=Qe(),vault:r=q(),signerReachable:n=!1,quote:o=null}={}){let i=[],a=(p,h,A,_=null)=>i.push({id:p,status:h,detail:A,fix:_}),u=(()=>{let[p,h]=process.versions.node.split(".").map(Number);return p>20||p===20&&h>=19})();a("node",u?"ok":"fail",`node ${process.versions.node}`,u?null:"install node >= 20.19"),t?t.backend==="hermes"?a("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):a("model","ok",`${t.backend||"auto"} ${t.provider||""} ${t.model||""}`.trim()):a("model","fail","no model.json","oracle setup model"),r.vaultExists?r.disarmed?a("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):a("vault",r.armed?"ok":"warn",r.armed?"present, armed":"present, not armed"):a("vault","fail","no local vault","oracle sign init");let d=e.ORACLE_SIGNER_HOST||"127.0.0.1";return ct.has(d)?a("signer",n?"ok":"warn",n?`loopback ${d}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):a("signer","fail",`signer host ${d} is not loopback`,"unset ORACLE_SIGNER_HOST"),o?o.ok?a("quote","ok",o.detail||"net quote returned"):a("quote","warn",o.detail||"quote unavailable","check network / oracle data serve"):a("quote","warn","quote not probed",null),{ok:!i.some(p=>p.status==="fail"),checks:i,venues:Y({env:e,vault:r})}}var ct,Ee=s(()=>{Le();ye();er();ae();ct=new Set(["127.0.0.1","::1","localhost"])});var tr={};Se(tr,{classifyReceipt:()=>M,default:()=>dt,firstHourReport:()=>be,probeQuote:()=>ft,probeSigner:()=>lt,vaultStatus:()=>q});async function lt(e=process.env){let t=e.ORACLE_SIGNER_HOST||"127.0.0.1",r=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${t}:${r}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}async function ft(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let r=(await e.json())?.pairs?.[0];return!r?.chainId||!r?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${r.chainId} ${r.baseToken?.symbol}/${r.quoteToken?.symbol} $${r.priceUsd}`}}catch(e){return{ok:!1,detail:e instanceof Error?e.message:"quote failed"}}}var dt,nr=s(()=>{Ee();ye();dt={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let t=e.argv.includes("--json"),r=Y();if(t)return process.stdout.write(`${JSON.stringify({venues:r},null,2)}
|
|
2
|
+
`),0;for(let n of r)process.stdout.write(`${n.status.padEnd(12)} ${n.key.padEnd(16)} ${n.name} exec=${n.execute?"local":"no"}
|
|
3
|
+
`);return 0}}});import X from"node:fs";import pt from"node:path";import ve from"node:fs";import C from"node:path";W();var pr="0.19.0",_t=`hermes-agent==${pr}`;var xe="0.12.1",Ot=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${xe}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${xe}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function mr(){return C.join(L(),"runtime")}function hr(){return C.join(mr(),"venv")}function gr(e){let t=process.platform==="win32"?"Scripts":"bin",r=process.platform==="win32"?`${e}.exe`:e;return C.join(hr(),t,r)}function wr(){return gr("hermes")}function yr(e){let t=process.platform==="win32"&&!C.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let r of(process.env.PATH||"").split(C.delimiter))if(r)for(let n of t){let o=C.join(r,`${e}${n}`);try{if(ve.existsSync(o))return o}catch{}}return null}function Ae(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=wr();if(ve.existsSync(e))return{ok:!0,bin:e,source:"managed"};let t=yr("hermes");return t?{ok:!0,bin:t,source:"path"}:{ok:!1,bin:null,source:null}}import k from"node:fs";import f from"node:path";W();import{existsSync as Oe,readFileSync as br}from"node:fs";import{dirname as _e,join as Q}from"node:path";import{fileURLToPath as Er}from"node:url";function Sr(e){let t=_e(Er(e));for(let r=0;r<8;r+=1){let n=Q(t,"package.json");if(Oe(n))try{let i=JSON.parse(br(n,"utf8"));if(i&&typeof i.version=="string")return t}catch{}let o=_e(t);if(o===t)break;t=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function ke(e,t){let r=Sr(t),n=Q(r,e);return Oe(n)?n:Q(r,"dist","assets",e)}var xr=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 Te(){return xr.filter(e=>e.website)}var ee=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function re(e=process.env){let t=String(e?.ORACLE_RESEARCH_MODE??e?.ORACLE_RLM_MODE??"").trim().toLowerCase();return t==="1"||t==="true"||t==="yes"||t==="on"||t==="research"}var N=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"]),vr="deny",Pt=256*1024;var $t=Object.freeze({version:1,source:"default",defaultDecision:vr,allow:N,deny:Object.freeze([])});var te=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),Mt=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"}),E=(e,t=0,r=1)=>Math.min(r,Math.max(t,e)),w=e=>Number.isFinite(Number(e))?Number(e):null,Ar=e=>Math.round(e*1e4)/1e4;function y(e,t,r,n=!0){!n||r===null||!Number.isFinite(r)||e.push({feature:t,value:Ar(r)})}function _r(e,t){let r=w(e.repeatBuys??e.repeat_buys??e.buyCount),n=w(e.walletWinRate??e.winRate);y(t,"repeat_buys",r===null?null:E((r-1)/4)*.38),y(t,"wallet_win_rate",n===null?null:(E(n)-.5)*.5)}function Or(e,t){let r=w(e.ageHours??e.poolAgeHours),n=w(e.liquidityUsd??e.liquidity),o=e.liquidityLocked??e.locked;y(t,"pool_age",r===null?null:r<24?-.42:E(r/720)*.12),y(t,"liquidity",n===null?null:(E(Math.log10(Math.max(1,n))/7)-.5)*.28),y(t,"liquidity_lock",o==null?null:o?.12:-.28)}function kr(e,t){let r=w(e.floorChange??e.floorChangePct),n=w(e.sales??e.saleCount);y(t,"floor_change",r===null?null:E(r,-1,1)*.35),y(t,"sales_depth",n===null?null:E(n/50)*.18)}function Tr(e,t){let r=w(e.flowImbalance??e.imbalance),n=w(e.fundingRate??e.funding);y(t,"flow_imbalance",r===null?null:E(r,-1,1)*.42),y(t,"funding",n===null?null:-E(n*100,-1,1)*.12)}function Rr(e,t){let r=w(e.marketProbability??e.marketPrice??e.probability),n=w(e.fairProbability??e.referenceProbability??e.fairValue);y(t,"probability_mispricing",r===null||n===null?null:E(n-r,-1,1)*.65);let o=w(e.liquidityUsd??e.liquidity);y(t,"market_liquidity",o===null?null:E(Math.log10(Math.max(1,o))/6)*.12)}var Ft=Object.freeze({wallet:_r,pool:Or,nft_floor:kr,hl_flow:Tr,prediction_market:Rr});function ne(e){try{return k.existsSync(e)}catch{return!1}}function H(e){for(let t of e)if(t&&ne(t))return t;return null}function oe(e){try{return ke(e,import.meta.url)}catch{return null}}function Ir(){let e=[f.join(l,"dist/data/desk-data.mjs"),f.join(l,"data/desk-data.mjs"),f.join(l,"src/data/desk-data.mjs")];for(let n of e)if(ne(n))try{let i=k.readFileSync(n,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],a=new Set(i.map(u=>u.toLowerCase()));if(a.size>=20)return{count:a.size,detail:`${a.size} provider ids (bundled desk-data)`}}catch{}let t=[f.join(l,"src/data/providers"),f.join(l,"dist/data/providers"),f.join(l,"data/providers")],r=H(t);if(!r)return{count:0,detail:"providers dir missing"};try{let n=k.readdirSync(r).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 Re(){let e=H([oe("skills"),f.join(l,"skills"),f.join(l,"dist/assets/skills"),f.join(l,"assets/skills")]);if(!e)return{count:0,trading:[],building:[]};let t=k.readdirSync(e),r=t.filter(o=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(o)),n=t.filter(o=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(o));return{count:t.length,trading:r,building:n}}function Lr(){let e=H([oe("protocols/templates"),f.join(l,"protocols/templates"),f.join(l,"dist/assets/protocols/templates"),f.join(l,"assets/protocols/templates")]);return e?k.readdirSync(e).filter(r=>!r.startsWith(".")):Re().building.some(r=>/protocol-builder|dex-launch|token-launch/i.test(r))?["(via skills: protocol-builder / launch packs)"]:[]}function Cr(){let e=H([oe("profiles"),f.join(l,"profiles"),f.join(l,"dist/assets/profiles"),f.join(l,"assets/profiles")]);return e?k.readdirSync(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&!t.name.startsWith("_")).map(t=>t.name):[]}function Nr(){try{if(N.includes("trade_lifecycle")&&!N.some(t=>/broadcast|wallet_sign/.test(t)))return!0}catch{}let e=[f.join(l,"src/capability-posture.mjs"),f.join(l,"dist/capability-posture.mjs"),f.join(l,"capability-posture.mjs"),f.join(l,"dist/public-control/policy-schema.mjs"),f.join(l,"README.md"),f.join(l,"package.json")];for(let t of e)if(ne(t))try{let r=k.readFileSync(t,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(r))return!0}catch{}return!1}function Ie(e=process.env){let t=[],r=(c,T,B,v=1)=>{t.push({id:c,status:T,detail:B,weight:v})},[n,o]=process.versions.node.split(".").map(Number),i=n>20||n===20&&o>=19;r("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=>!N.includes(c));r("agent_tools",u.length===0?"ok":"warn",u.length===0?`safe tools ${N.length}; signal_score present`:`missing tools: ${u.join(",")}`,3),r("research_attributes","ok",`attrs [${ee.join(", ")}]; mode=${re(e)?"ON":"off"}`,2);let d=Ir();r("providers",d.count>=40?"ok":d.count>=10?"warn":"fail",d.detail,3);let g=Re();r("skills_trading_build",g.trading.length>=5&&g.building.length>=4?"ok":g.count>=10?"warn":"fail",`${g.count} skills; trading=${g.trading.length} building=${g.building.length}`,3);let p=Lr();r("protocol_templates",p.length>=2?"ok":"warn",p.length?p.join(", "):"none",2);let h=Cr();r("profiles",h.includes("protocol-builder")&&h.includes("oracle")?"ok":h.length>=1?"warn":"fail",h.join(", ")||"none",2),r("signals_engine",te.length>=4?"ok":"fail",`types: ${te.join(", ")} (cold / no hot exec)`,2);let A=Te();r("harness_roster",A.length>=8?"ok":"warn",`${A.length} website harnesses; native default; MCP inbound only`,2),r("custody_prepare_only",Nr()?"ok":"fail","public plane prepare-only",4);let _=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";r("data_url","ok",_,1);let O=0,x=0;for(let c of t)x+=c.weight,c.status==="ok"?O+=c.weight:c.status==="warn"&&(O+=c.weight*.5);let m=x?Math.round(O/x*100):0,S=!t.some(c=>c.status==="fail")&&m>=70,U=S?`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:S,score:O,max:x,pct:m,summary:U,researchMode:re(e),attributes:[...ee],packageRoot:l,checks:t}}function or(){let[e,t]=process.versions.node.split(".").map(Number);return e>20||e===20&&t>=19}function mt(e){if(!X.existsSync(e))return{};let t={};for(let r of X.readFileSync(e,"utf8").split(/\r?\n/)){let n=r.match(/^([A-Z0-9_]+)=(.*)$/);n&&(t[n[1]]=n[2])}return t}async function ht(e){let t=e.replace(/\/$/,"");for(let r of["/health","/public/health"])try{if((await fetch(t+r)).ok)return!0}catch{}return!1}var Va={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 t=e.argv.includes("--json"),r=e.argv.includes("--agentic"),n=e.argv.includes("--first-hour"),o=[],i=!1,a=(c,T,B,v=null)=>{o.push({id:c,status:T,detail:B,fix:v}),T==="fail"&&(i=!0)};a("node",or()?"ok":"fail",`node ${process.versions.node}`,or()?null:"install node >= 20.19");let u=e.paths.oracleExecEnvPath(),d=mt(u),g=process.env.ORACLE_ROUTE_ATTESTATION_SECRET||process.env.MAD_ROUTE_ATTESTATION_SECRET||process.env.ORACLE_ATTESTATION_SECRET||process.env.ORACLE_STAMP_HMAC_SECRET||d.ORACLE_ROUTE_ATTESTATION_SECRET||d.MAD_ROUTE_ATTESTATION_SECRET||d.ORACLE_ATTESTATION_SECRET||d.ORACLE_STAMP_HMAC_SECRET;a("attestation_secret",g?"ok":"warn",g?"present":"missing",g?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let p=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",h=await ht(p),A=e.paths.loadDeskRouting&&(process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL)?`desk ${process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL}`:null;a("data_server",h?"ok":"warn",h?`reachable ${p}${A?` (${A})`:""}`:`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 _=Ae();a("harness_model","ok","Oracle native is default; external clients are inbound MCP only (oracle harness detect)",null),a("hermes_opt_in","ok",_.ok?`detected ${_.bin} (${_.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let O=pt.join(e.paths.hermesRoot(),"profiles"),x=0;X.existsSync(O)&&(x=X.readdirSync(O,{withFileTypes:!0}).filter(c=>c.isDirectory()).length),a("hermes_lanes","ok",x>0?`${x} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);let m=null;if(r){m=Ie(process.env);for(let c of m.checks)a(`agentic_${c.id}`,c.status,c.detail,null)}let S=null;if(n){let{firstHourReport:c}=await Promise.resolve().then(()=>(Ee(),rr)),{probeSigner:T,probeQuote:B}=await Promise.resolve().then(()=>(nr(),tr));S=c({signerReachable:await T(process.env),quote:await B()});for(let v of S.checks)a(`hour_${v.id}`,v.status,v.detail,v.fix)}let U={ok:!i&&(m?m.ok:!0)&&(S?S.ok:!0),checks:o,...S?{firstHour:S}:{},...m?{agentic:{pct:m.pct,summary:m.summary,attributes:m.attributes,researchMode:m.researchMode}}:{}};if(t)process.stdout.write(JSON.stringify(U,null,2)+`
|
|
4
|
+
`);else{for(let c of o)process.stdout.write(`${c.status.toUpperCase().padEnd(4)} ${c.id}: ${c.detail}
|
|
5
|
+
`),c.fix&&process.stdout.write(` fix: ${c.fix}
|
|
6
6
|
`);m&&process.stdout.write(`
|
|
7
7
|
${m.summary}
|
|
8
|
-
`)}return U.ok?0:1}};export{
|
|
8
|
+
`)}return U.ok?0:1}};export{Va as default};
|