@oracle-agent/oracle 0.22.14 → 0.22.15

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
- import P from"node:fs";import Oe from"node:path";import z from"node:fs";import S from"node:path";import T from"node:fs";import ee from"node:os";import w from"node:path";import{fileURLToPath as te}from"node:url";var ne=w.dirname(te(import.meta.url)),i=w.resolve(ne,"../..");function D(){return process.env.ORACLE_FAKE_HOME||ee.homedir()}function re(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function j(){return re()?process.env.ORACLE_CONFIG_DIR||w.join(D(),".config","oracle"):w.join(D(),".config","oracle")}function oe(){return w.join(j(),"desk.json")}function se(){return w.join(j(),"env")}function x({force:e=!1}={}){if(x._done&&!e)return x._result||null;x._done=!0;let t={},n=(s,o)=>{if(o==null)return;let d=String(o).trim();d&&(process.env[s]!=null&&String(process.env[s]).trim()!==""||(process.env[s]=d,t[s]=d))};try{let s=se();if(T.existsSync(s))for(let o of T.readFileSync(s,"utf8").split(/\r?\n/)){let d=o.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!d||d[2].startsWith("#"))continue;let a=d[2];(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),n(d[1],a)}}catch{}try{let s=oe();if(T.existsSync(s)){let o=JSON.parse(T.readFileSync(s,"utf8"));o&&typeof o=="object"&&(n("ORACLE_DESK_URL",o.deskUrl||o.dataUrl||o.url),n("ORACLE_DATA_URL",o.dataUrl||o.deskUrl||o.url),n("ORACLE_API_URL",o.apiUrl||o.dataUrl||o.deskUrl),n("ORACLE_PUBLIC_URL",o.publicUrl||o.deskUrl||o.dataUrl),n("ORACLE_EXEC_URL",o.execUrl),n("MAD_DESK_URL",o.deskUrl||o.dataUrl))}}catch{}let r=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return r&&(n("ORACLE_DESK_URL",r),n("ORACLE_DATA_URL",r),n("ORACLE_API_URL",r),n("ORACLE_PUBLIC_URL",r),n("MAD_DESK_URL",r)),x._result=Object.keys(t).length?t:null,x._result}try{x()}catch{}var ie="0.19.0",Me=`hermes-agent==${ie}`;var K="0.12.1",He=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${K}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${K}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function ce(){return S.join(j(),"runtime")}function ae(){return S.join(ce(),"venv")}function le(e){let t=process.platform==="win32"?"Scripts":"bin",n=process.platform==="win32"?`${e}.exe`:e;return S.join(ae(),t,n)}function ue(){return le("hermes")}function de(e){let t=process.platform==="win32"&&!S.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let n of(process.env.PATH||"").split(S.delimiter))if(n)for(let r of t){let s=S.join(n,`${e}${r}`);try{if(z.existsSync(s))return s}catch{}}return null}function B(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=de("hermes");if(e)return{ok:!0,bin:e,source:"path"};let t=ue();return z.existsSync(t)?{ok:!0,bin:t,source:"managed"}:{ok:!1,bin:null,source:null}}import A from"node:fs";import c from"node:path";import{existsSync as V,readFileSync as fe}from"node:fs";import{dirname as G,join as N}from"node:path";import{fileURLToPath as pe}from"node:url";function me(e){let t=G(pe(e));for(let n=0;n<8;n+=1){let r=N(t,"package.json");if(V(r))try{let o=JSON.parse(fe(r,"utf8"));if(o&&typeof o.version=="string")return t}catch{}let s=G(t);if(s===t)break;t=s}throw new Error(`oracle: could not resolve package root from ${e}`)}function Y(e,t){let n=me(t),r=N(n,"dist","assets",e);return V(r)?r:N(n,e)}var he=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 W(){return he.filter(e=>e.website)}var I=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function $(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 O=Object.freeze(["oracle_cli","memory_add","memory_remove","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","clarify","code_eval","learn_skill","workspace_artifact","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vision_analyze","browser_exec","xurl"]),_e="deny",We=256*1024;var qe=Object.freeze({version:1,source:"default",defaultDecision:_e,allow:O,deny:Object.freeze([])});var M=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),Je=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,t=0,n=1)=>Math.min(n,Math.max(t,e)),m=e=>Number.isFinite(Number(e))?Number(e):null,ge=e=>Math.round(e*1e4)/1e4;function h(e,t,n,r=!0){!r||n===null||!Number.isFinite(n)||e.push({feature:t,value:ge(n)})}function ye(e,t){let n=m(e.repeatBuys??e.repeat_buys??e.buyCount),r=m(e.walletWinRate??e.winRate);h(t,"repeat_buys",n===null?null:_((n-1)/4)*.38),h(t,"wallet_win_rate",r===null?null:(_(r)-.5)*.5)}function be(e,t){let n=m(e.ageHours??e.poolAgeHours),r=m(e.liquidityUsd??e.liquidity),s=e.liquidityLocked??e.locked;h(t,"pool_age",n===null?null:n<24?-.42:_(n/720)*.12),h(t,"liquidity",r===null?null:(_(Math.log10(Math.max(1,r))/7)-.5)*.28),h(t,"liquidity_lock",s==null?null:s?.12:-.28)}function Ee(e,t){let n=m(e.floorChange??e.floorChangePct),r=m(e.sales??e.saleCount);h(t,"floor_change",n===null?null:_(n,-1,1)*.35),h(t,"sales_depth",r===null?null:_(r/50)*.18)}function ke(e,t){let n=m(e.flowImbalance??e.imbalance),r=m(e.fundingRate??e.funding);h(t,"flow_imbalance",n===null?null:_(n,-1,1)*.42),h(t,"funding",r===null?null:-_(r*100,-1,1)*.12)}function Ae(e,t){let n=m(e.marketProbability??e.marketPrice??e.probability),r=m(e.fairProbability??e.referenceProbability??e.fairValue);h(t,"probability_mispricing",n===null||r===null?null:_(r-n,-1,1)*.65);let s=m(e.liquidityUsd??e.liquidity);h(t,"market_liquidity",s===null?null:_(Math.log10(Math.max(1,s))/6)*.12)}var Ze=Object.freeze({wallet:ye,pool:be,nft_floor:Ee,hl_flow:ke,prediction_market:Ae});function H(e){try{return A.existsSync(e)}catch{return!1}}function L(e){for(let t of e)if(t&&H(t))return t;return null}function F(e){try{return Y(e,import.meta.url)}catch{return null}}function ve(){let e=[c.join(i,"dist/data/desk-data.mjs"),c.join(i,"data/desk-data.mjs"),c.join(i,"src/data/desk-data.mjs")];for(let r of e)if(H(r))try{let o=A.readFileSync(r,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],d=new Set(o.map(a=>a.toLowerCase()));if(d.size>=20)return{count:d.size,detail:`${d.size} provider ids (bundled desk-data)`}}catch{}let t=[c.join(i,"src/data/providers"),c.join(i,"dist/data/providers"),c.join(i,"data/providers")],n=L(t);if(!n)return{count:0,detail:"providers dir missing"};try{let r=A.readdirSync(n).filter(s=>s.endsWith(".mjs"));return{count:r.length,detail:`${r.length} provider modules`}}catch(r){return{count:0,detail:r instanceof Error?r.message:String(r)}}}function q(){let e=L([F("skills"),c.join(i,"skills"),c.join(i,"dist/assets/skills"),c.join(i,"assets/skills")]);if(!e)return{count:0,trading:[],building:[]};let t=A.readdirSync(e),n=t.filter(s=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(s)),r=t.filter(s=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(s));return{count:t.length,trading:n,building:r}}function xe(){let e=L([F("protocols/templates"),c.join(i,"protocols/templates"),c.join(i,"dist/assets/protocols/templates"),c.join(i,"assets/protocols/templates")]);return e?A.readdirSync(e).filter(n=>!n.startsWith(".")):q().building.some(n=>/protocol-builder|dex-launch|token-launch/i.test(n))?["(via skills: protocol-builder / launch packs)"]:[]}function we(){let e=L([F("profiles"),c.join(i,"profiles"),c.join(i,"dist/assets/profiles"),c.join(i,"assets/profiles")]);return e?A.readdirSync(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&!t.name.startsWith("_")).map(t=>t.name):[]}function Se(){try{if(O.includes("trade_lifecycle")&&!O.some(t=>/broadcast|wallet_sign/.test(t)))return!0}catch{}let e=[c.join(i,"src/capability-posture.mjs"),c.join(i,"dist/capability-posture.mjs"),c.join(i,"capability-posture.mjs"),c.join(i,"dist/public-control/policy-schema.mjs"),c.join(i,"README.md"),c.join(i,"package.json")];for(let t of e)if(H(t))try{let n=A.readFileSync(t,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(n))return!0}catch{}return!1}function X(e=process.env){let t=[],n=(f,U,Z,Q=1)=>{t.push({id:f,status:U,detail:Z,weight:Q})},[r,s]=process.versions.node.split(".").map(Number),o=r>20||r===20&&s>=19;n("node",o?"ok":"fail",`node ${process.versions.node}`,2);let a=["oracle_cli","research_delegate","trade_lifecycle","signal_score","skill_load","learn_skill","code_eval","cron_add","web_fetch"].filter(f=>!O.includes(f));n("agent_tools",a.length===0?"ok":"warn",a.length===0?`safe tools ${O.length}; signal_score present`:`missing tools: ${a.join(",")}`,3),n("research_attributes","ok",`attrs [${I.join(", ")}]; mode=${$(e)?"ON":"off"}`,2);let y=ve();n("providers",y.count>=40?"ok":y.count>=10?"warn":"fail",y.detail,3);let p=q();n("skills_trading_build",p.trading.length>=5&&p.building.length>=4?"ok":p.count>=10?"warn":"fail",`${p.count} skills; trading=${p.trading.length} building=${p.building.length}`,3);let b=xe();n("protocol_templates",b.length>=2?"ok":"warn",b.length?b.join(", "):"none",2);let E=we();n("profiles",E.includes("protocol-builder")&&E.includes("oracle")?"ok":E.length>=1?"warn":"fail",E.join(", ")||"none",2),n("signals_engine",M.length>=4?"ok":"fail",`types: ${M.join(", ")} (cold / no hot exec)`,2);let v=W();n("harness_roster",v.length>=8?"ok":"warn",`${v.length} website harnesses; native default; MCP inbound only`,2),n("custody_prepare_only",Se()?"ok":"fail","public plane prepare-only",4);let R=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";n("data_url","ok",R,1);let g=0,l=0;for(let f of t)l+=f.weight,f.status==="ok"?g+=f.weight:f.status==="warn"&&(g+=f.weight*.5);let k=l?Math.round(g/l*100):0,u=!t.some(f=>f.status==="fail")&&k>=70,C=u?`AGENTIC READY ${k}% \u2014 Oracle is the crypto control plane (prepare-only); pair coding harnesses via MCP for build.`:`AGENTIC GAPS ${k}% \u2014 fix fail/warn checks before calling Oracle the default crypto harness.`;return{ok:u,score:g,max:l,pct:k,summary:C,researchMode:$(e),attributes:[...I],packageRoot:i,checks:t}}function J(){let[e,t]=process.versions.node.split(".").map(Number);return e>20||e===20&&t>=19}function Re(e){if(!P.existsSync(e))return{};let t={};for(let n of P.readFileSync(e,"utf8").split(/\r?\n/)){let r=n.match(/^([A-Z0-9_]+)=(.*)$/);r&&(t[r[1]]=r[2])}return t}async function Ce(e){let t=e.replace(/\/$/,"");for(let n of["/health","/public/health"])try{if((await fetch(t+n)).ok)return!0}catch{}return!1}var pt={name:"doctor",summary:"check the read plane (+ optional --agentic crypto harness score)",group:"read",usage:"oracle doctor [--json] [--agentic]",async run(e){let t=e.argv.includes("--json"),n=e.argv.includes("--agentic"),r=[],s=!1,o=(u,C,f,U=null)=>{r.push({id:u,status:C,detail:f,fix:U}),C==="fail"&&(s=!0)};o("node",J()?"ok":"fail",`node ${process.versions.node}`,J()?null:"install node >= 20.19");let d=e.paths.oracleExecEnvPath(),a=Re(d),y=process.env.ORACLE_ROUTE_ATTESTATION_SECRET||process.env.MAD_ROUTE_ATTESTATION_SECRET||process.env.ORACLE_ATTESTATION_SECRET||process.env.ORACLE_STAMP_HMAC_SECRET||a.ORACLE_ROUTE_ATTESTATION_SECRET||a.MAD_ROUTE_ATTESTATION_SECRET||a.ORACLE_ATTESTATION_SECRET||a.ORACLE_STAMP_HMAC_SECRET;o("attestation_secret",y?"ok":"warn",y?"present":"missing",y?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let p=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",b=await Ce(p),E=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;o("data_server",b?"ok":"warn",b?`reachable ${p}${E?` (${E})`:""}`:`down ${p}`,b?null:p.includes("127.0.0.1")||p.includes("localhost")?"oracle data serve OR set ~/.config/oracle/desk.json \u2192 Arch :8799":"check Arch desk is up (curl $ORACLE_DESK_URL/public/health)");let v=B();o("harness_model","ok","Oracle native is default; external clients are inbound MCP only (oracle harness detect)",null),o("hermes_opt_in","ok",v.ok?`detected ${v.bin} (${v.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let R=Oe.join(e.paths.hermesRoot(),"profiles"),g=0;P.existsSync(R)&&(g=P.readdirSync(R,{withFileTypes:!0}).filter(u=>u.isDirectory()).length),o("hermes_lanes","ok",g>0?`${g} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);let l=null;if(n){l=X(process.env);for(let u of l.checks)o(`agentic_${u.id}`,u.status,u.detail,null)}let k={ok:!s&&(l?l.ok:!0),checks:r,...l?{agentic:{pct:l.pct,summary:l.summary,attributes:l.attributes,researchMode:l.researchMode}}:{}};if(t)process.stdout.write(JSON.stringify(k,null,2)+`
1
+ import P from"node:fs";import Oe from"node:path";import z from"node:fs";import S from"node:path";import T from"node:fs";import ee from"node:os";import x from"node:path";import{fileURLToPath as te}from"node:url";var ne=x.dirname(te(import.meta.url)),i=x.resolve(ne,"../..");function D(){return process.env.ORACLE_FAKE_HOME||ee.homedir()}function re(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function j(){return re()?process.env.ORACLE_CONFIG_DIR||x.join(D(),".config","oracle"):x.join(D(),".config","oracle")}function oe(){return x.join(j(),"desk.json")}function se(){return x.join(j(),"env")}function w({force:e=!1}={}){if(w._done&&!e)return w._result||null;w._done=!0;let t={},n=(s,o)=>{if(o==null)return;let d=String(o).trim();d&&(process.env[s]!=null&&String(process.env[s]).trim()!==""||(process.env[s]=d,t[s]=d))};try{let s=se();if(T.existsSync(s))for(let o of T.readFileSync(s,"utf8").split(/\r?\n/)){let d=o.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!d||d[2].startsWith("#"))continue;let a=d[2];(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),n(d[1],a)}}catch{}try{let s=oe();if(T.existsSync(s)){let o=JSON.parse(T.readFileSync(s,"utf8"));o&&typeof o=="object"&&(n("ORACLE_DESK_URL",o.deskUrl||o.dataUrl||o.url),n("ORACLE_DATA_URL",o.dataUrl||o.deskUrl||o.url),n("ORACLE_API_URL",o.apiUrl||o.dataUrl||o.deskUrl),n("ORACLE_PUBLIC_URL",o.publicUrl||o.deskUrl||o.dataUrl),n("ORACLE_EXEC_URL",o.execUrl),n("MAD_DESK_URL",o.deskUrl||o.dataUrl))}}catch{}let r=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return r&&(n("ORACLE_DESK_URL",r),n("ORACLE_DATA_URL",r),n("ORACLE_API_URL",r),n("ORACLE_PUBLIC_URL",r),n("MAD_DESK_URL",r)),w._result=Object.keys(t).length?t:null,w._result}try{w()}catch{}var ie="0.19.0",Me=`hermes-agent==${ie}`;var K="0.12.1",He=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${K}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${K}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function ce(){return S.join(j(),"runtime")}function ae(){return S.join(ce(),"venv")}function le(e){let t=process.platform==="win32"?"Scripts":"bin",n=process.platform==="win32"?`${e}.exe`:e;return S.join(ae(),t,n)}function ue(){return le("hermes")}function de(e){let t=process.platform==="win32"&&!S.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let n of(process.env.PATH||"").split(S.delimiter))if(n)for(let r of t){let s=S.join(n,`${e}${r}`);try{if(z.existsSync(s))return s}catch{}}return null}function B(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=de("hermes");if(e)return{ok:!0,bin:e,source:"path"};let t=ue();return z.existsSync(t)?{ok:!0,bin:t,source:"managed"}:{ok:!1,bin:null,source:null}}import A from"node:fs";import c from"node:path";import{existsSync as V,readFileSync as fe}from"node:fs";import{dirname as G,join as N}from"node:path";import{fileURLToPath as pe}from"node:url";function me(e){let t=G(pe(e));for(let n=0;n<8;n+=1){let r=N(t,"package.json");if(V(r))try{let o=JSON.parse(fe(r,"utf8"));if(o&&typeof o.version=="string")return t}catch{}let s=G(t);if(s===t)break;t=s}throw new Error(`oracle: could not resolve package root from ${e}`)}function Y(e,t){let n=me(t),r=N(n,"dist","assets",e);return V(r)?r:N(n,e)}var he=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 W(){return he.filter(e=>e.website)}var I=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function $(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 O=Object.freeze(["oracle_cli","memory_add","memory_remove","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","clarify","code_eval","learn_skill","workspace_artifact","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vision_analyze","browser_exec","xurl","knowledge_search"]),_e="deny",We=256*1024;var qe=Object.freeze({version:1,source:"default",defaultDecision:_e,allow:O,deny:Object.freeze([])});var M=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),Je=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,t=0,n=1)=>Math.min(n,Math.max(t,e)),m=e=>Number.isFinite(Number(e))?Number(e):null,ge=e=>Math.round(e*1e4)/1e4;function h(e,t,n,r=!0){!r||n===null||!Number.isFinite(n)||e.push({feature:t,value:ge(n)})}function ye(e,t){let n=m(e.repeatBuys??e.repeat_buys??e.buyCount),r=m(e.walletWinRate??e.winRate);h(t,"repeat_buys",n===null?null:_((n-1)/4)*.38),h(t,"wallet_win_rate",r===null?null:(_(r)-.5)*.5)}function be(e,t){let n=m(e.ageHours??e.poolAgeHours),r=m(e.liquidityUsd??e.liquidity),s=e.liquidityLocked??e.locked;h(t,"pool_age",n===null?null:n<24?-.42:_(n/720)*.12),h(t,"liquidity",r===null?null:(_(Math.log10(Math.max(1,r))/7)-.5)*.28),h(t,"liquidity_lock",s==null?null:s?.12:-.28)}function Ee(e,t){let n=m(e.floorChange??e.floorChangePct),r=m(e.sales??e.saleCount);h(t,"floor_change",n===null?null:_(n,-1,1)*.35),h(t,"sales_depth",r===null?null:_(r/50)*.18)}function ke(e,t){let n=m(e.flowImbalance??e.imbalance),r=m(e.fundingRate??e.funding);h(t,"flow_imbalance",n===null?null:_(n,-1,1)*.42),h(t,"funding",r===null?null:-_(r*100,-1,1)*.12)}function Ae(e,t){let n=m(e.marketProbability??e.marketPrice??e.probability),r=m(e.fairProbability??e.referenceProbability??e.fairValue);h(t,"probability_mispricing",n===null||r===null?null:_(r-n,-1,1)*.65);let s=m(e.liquidityUsd??e.liquidity);h(t,"market_liquidity",s===null?null:_(Math.log10(Math.max(1,s))/6)*.12)}var Ze=Object.freeze({wallet:ye,pool:be,nft_floor:Ee,hl_flow:ke,prediction_market:Ae});function H(e){try{return A.existsSync(e)}catch{return!1}}function L(e){for(let t of e)if(t&&H(t))return t;return null}function F(e){try{return Y(e,import.meta.url)}catch{return null}}function ve(){let e=[c.join(i,"dist/data/desk-data.mjs"),c.join(i,"data/desk-data.mjs"),c.join(i,"src/data/desk-data.mjs")];for(let r of e)if(H(r))try{let o=A.readFileSync(r,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],d=new Set(o.map(a=>a.toLowerCase()));if(d.size>=20)return{count:d.size,detail:`${d.size} provider ids (bundled desk-data)`}}catch{}let t=[c.join(i,"src/data/providers"),c.join(i,"dist/data/providers"),c.join(i,"data/providers")],n=L(t);if(!n)return{count:0,detail:"providers dir missing"};try{let r=A.readdirSync(n).filter(s=>s.endsWith(".mjs"));return{count:r.length,detail:`${r.length} provider modules`}}catch(r){return{count:0,detail:r instanceof Error?r.message:String(r)}}}function q(){let e=L([F("skills"),c.join(i,"skills"),c.join(i,"dist/assets/skills"),c.join(i,"assets/skills")]);if(!e)return{count:0,trading:[],building:[]};let t=A.readdirSync(e),n=t.filter(s=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(s)),r=t.filter(s=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(s));return{count:t.length,trading:n,building:r}}function we(){let e=L([F("protocols/templates"),c.join(i,"protocols/templates"),c.join(i,"dist/assets/protocols/templates"),c.join(i,"assets/protocols/templates")]);return e?A.readdirSync(e).filter(n=>!n.startsWith(".")):q().building.some(n=>/protocol-builder|dex-launch|token-launch/i.test(n))?["(via skills: protocol-builder / launch packs)"]:[]}function xe(){let e=L([F("profiles"),c.join(i,"profiles"),c.join(i,"dist/assets/profiles"),c.join(i,"assets/profiles")]);return e?A.readdirSync(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&!t.name.startsWith("_")).map(t=>t.name):[]}function Se(){try{if(O.includes("trade_lifecycle")&&!O.some(t=>/broadcast|wallet_sign/.test(t)))return!0}catch{}let e=[c.join(i,"src/capability-posture.mjs"),c.join(i,"dist/capability-posture.mjs"),c.join(i,"capability-posture.mjs"),c.join(i,"dist/public-control/policy-schema.mjs"),c.join(i,"README.md"),c.join(i,"package.json")];for(let t of e)if(H(t))try{let n=A.readFileSync(t,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(n))return!0}catch{}return!1}function X(e=process.env){let t=[],n=(f,U,Z,Q=1)=>{t.push({id:f,status:U,detail:Z,weight:Q})},[r,s]=process.versions.node.split(".").map(Number),o=r>20||r===20&&s>=19;n("node",o?"ok":"fail",`node ${process.versions.node}`,2);let a=["oracle_cli","research_delegate","trade_lifecycle","signal_score","skill_load","learn_skill","code_eval","cron_add","web_fetch"].filter(f=>!O.includes(f));n("agent_tools",a.length===0?"ok":"warn",a.length===0?`safe tools ${O.length}; signal_score present`:`missing tools: ${a.join(",")}`,3),n("research_attributes","ok",`attrs [${I.join(", ")}]; mode=${$(e)?"ON":"off"}`,2);let y=ve();n("providers",y.count>=40?"ok":y.count>=10?"warn":"fail",y.detail,3);let p=q();n("skills_trading_build",p.trading.length>=5&&p.building.length>=4?"ok":p.count>=10?"warn":"fail",`${p.count} skills; trading=${p.trading.length} building=${p.building.length}`,3);let b=we();n("protocol_templates",b.length>=2?"ok":"warn",b.length?b.join(", "):"none",2);let E=xe();n("profiles",E.includes("protocol-builder")&&E.includes("oracle")?"ok":E.length>=1?"warn":"fail",E.join(", ")||"none",2),n("signals_engine",M.length>=4?"ok":"fail",`types: ${M.join(", ")} (cold / no hot exec)`,2);let v=W();n("harness_roster",v.length>=8?"ok":"warn",`${v.length} website harnesses; native default; MCP inbound only`,2),n("custody_prepare_only",Se()?"ok":"fail","public plane prepare-only",4);let R=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";n("data_url","ok",R,1);let g=0,l=0;for(let f of t)l+=f.weight,f.status==="ok"?g+=f.weight:f.status==="warn"&&(g+=f.weight*.5);let k=l?Math.round(g/l*100):0,u=!t.some(f=>f.status==="fail")&&k>=70,C=u?`AGENTIC READY ${k}% \u2014 Oracle is the crypto control plane (prepare-only); pair coding harnesses via MCP for build.`:`AGENTIC GAPS ${k}% \u2014 fix fail/warn checks before calling Oracle the default crypto harness.`;return{ok:u,score:g,max:l,pct:k,summary:C,researchMode:$(e),attributes:[...I],packageRoot:i,checks:t}}function J(){let[e,t]=process.versions.node.split(".").map(Number);return e>20||e===20&&t>=19}function Re(e){if(!P.existsSync(e))return{};let t={};for(let n of P.readFileSync(e,"utf8").split(/\r?\n/)){let r=n.match(/^([A-Z0-9_]+)=(.*)$/);r&&(t[r[1]]=r[2])}return t}async function Ce(e){let t=e.replace(/\/$/,"");for(let n of["/health","/public/health"])try{if((await fetch(t+n)).ok)return!0}catch{}return!1}var pt={name:"doctor",summary:"check the read plane (+ optional --agentic crypto harness score)",group:"read",usage:"oracle doctor [--json] [--agentic]",async run(e){let t=e.argv.includes("--json"),n=e.argv.includes("--agentic"),r=[],s=!1,o=(u,C,f,U=null)=>{r.push({id:u,status:C,detail:f,fix:U}),C==="fail"&&(s=!0)};o("node",J()?"ok":"fail",`node ${process.versions.node}`,J()?null:"install node >= 20.19");let d=e.paths.oracleExecEnvPath(),a=Re(d),y=process.env.ORACLE_ROUTE_ATTESTATION_SECRET||process.env.MAD_ROUTE_ATTESTATION_SECRET||process.env.ORACLE_ATTESTATION_SECRET||process.env.ORACLE_STAMP_HMAC_SECRET||a.ORACLE_ROUTE_ATTESTATION_SECRET||a.MAD_ROUTE_ATTESTATION_SECRET||a.ORACLE_ATTESTATION_SECRET||a.ORACLE_STAMP_HMAC_SECRET;o("attestation_secret",y?"ok":"warn",y?"present":"missing",y?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let p=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",b=await Ce(p),E=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;o("data_server",b?"ok":"warn",b?`reachable ${p}${E?` (${E})`:""}`:`down ${p}`,b?null:p.includes("127.0.0.1")||p.includes("localhost")?"oracle data serve OR set ~/.config/oracle/desk.json \u2192 Arch :8799":"check Arch desk is up (curl $ORACLE_DESK_URL/public/health)");let v=B();o("harness_model","ok","Oracle native is default; external clients are inbound MCP only (oracle harness detect)",null),o("hermes_opt_in","ok",v.ok?`detected ${v.bin} (${v.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let R=Oe.join(e.paths.hermesRoot(),"profiles"),g=0;P.existsSync(R)&&(g=P.readdirSync(R,{withFileTypes:!0}).filter(u=>u.isDirectory()).length),o("hermes_lanes","ok",g>0?`${g} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);let l=null;if(n){l=X(process.env);for(let u of l.checks)o(`agentic_${u.id}`,u.status,u.detail,null)}let k={ok:!s&&(l?l.ok:!0),checks:r,...l?{agentic:{pct:l.pct,summary:l.summary,attributes:l.attributes,researchMode:l.researchMode}}:{}};if(t)process.stdout.write(JSON.stringify(k,null,2)+`
2
2
  `);else{for(let u of r)process.stdout.write(`${u.status.toUpperCase().padEnd(4)} ${u.id}: ${u.detail}
3
3
  `),u.fix&&process.stdout.write(` fix: ${u.fix}
4
4
  `);l&&process.stdout.write(`