@oracle-agent/oracle 0.22.8 → 0.22.10

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,6 +1,6 @@
1
- import D from"node:fs";import ve from"node:path";import B from"node:fs";import R from"node:path";import U from"node:fs";import Z from"node:os";import O from"node:path";import{fileURLToPath as Q}from"node:url";var ee=O.dirname(Q(import.meta.url)),g=O.resolve(ee,"../..");function N(){return process.env.ORACLE_FAKE_HOME||Z.homedir()}function te(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function I(){return te()?process.env.ORACLE_CONFIG_DIR||O.join(N(),".config","oracle"):O.join(N(),".config","oracle")}function ne(){return O.join(I(),"desk.json")}function re(){return O.join(I(),"env")}function S({force:e=!1}={}){if(S._done&&!e)return S._result||null;S._done=!0;let t={},n=(s,o)=>{if(o==null)return;let u=String(o).trim();u&&(process.env[s]!=null&&String(process.env[s]).trim()!==""||(process.env[s]=u,t[s]=u))};try{let s=re();if(U.existsSync(s))for(let o of U.readFileSync(s,"utf8").split(/\r?\n/)){let u=o.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!u||u[2].startsWith("#"))continue;let i=u[2];(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),n(u[1],i)}}catch{}try{let s=ne();if(U.existsSync(s)){let o=JSON.parse(U.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)),S._result=Object.keys(t).length?t:null,S._result}try{S()}catch{}var oe="0.19.0",Ie=`hermes-agent==${oe}`;var K="0.12.1",De=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 se(){return R.join(I(),"runtime")}function ie(){return R.join(se(),"venv")}function ce(e){let t=process.platform==="win32"?"Scripts":"bin",n=process.platform==="win32"?`${e}.exe`:e;return R.join(ie(),t,n)}function ae(){return ce("hermes")}function le(e){let t=process.platform==="win32"&&!R.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let n of(process.env.PATH||"").split(R.delimiter))if(n)for(let r of t){let s=R.join(n,`${e}${r}`);try{if(B.existsSync(s))return s}catch{}}return null}function z(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=le("hermes");if(e)return{ok:!0,bin:e,source:"path"};let t=ae();return B.existsSync(t)?{ok:!0,bin:t,source:"managed"}:{ok:!1,bin:null,source:null}}import y from"node:fs";import b from"node:path";import{fileURLToPath as ye}from"node:url";var ue=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 G(){return ue.filter(e=>e.website)}var $=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function M(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 L=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_navigate","browser_snapshot","browser_click","browser_type","browser_press","browser_close","browser_exec","xurl"]),de="deny",He=256*1024;var Fe=Object.freeze({version:1,source:"default",defaultDecision:de,allow:L,deny:Object.freeze([])});var H=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),Be=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"}),p=(e,t=0,n=1)=>Math.min(n,Math.max(t,e)),d=e=>Number.isFinite(Number(e))?Number(e):null,fe=e=>Math.round(e*1e4)/1e4;function f(e,t,n,r=!0){!r||n===null||!Number.isFinite(n)||e.push({feature:t,value:fe(n)})}function pe(e,t){let n=d(e.repeatBuys??e.repeat_buys??e.buyCount),r=d(e.walletWinRate??e.winRate);f(t,"repeat_buys",n===null?null:p((n-1)/4)*.38),f(t,"wallet_win_rate",r===null?null:(p(r)-.5)*.5)}function me(e,t){let n=d(e.ageHours??e.poolAgeHours),r=d(e.liquidityUsd??e.liquidity),s=e.liquidityLocked??e.locked;f(t,"pool_age",n===null?null:n<24?-.42:p(n/720)*.12),f(t,"liquidity",r===null?null:(p(Math.log10(Math.max(1,r))/7)-.5)*.28),f(t,"liquidity_lock",s==null?null:s?.12:-.28)}function he(e,t){let n=d(e.floorChange??e.floorChangePct),r=d(e.sales??e.saleCount);f(t,"floor_change",n===null?null:p(n,-1,1)*.35),f(t,"sales_depth",r===null?null:p(r/50)*.18)}function _e(e,t){let n=d(e.flowImbalance??e.imbalance),r=d(e.fundingRate??e.funding);f(t,"flow_imbalance",n===null?null:p(n,-1,1)*.42),f(t,"funding",r===null?null:-p(r*100,-1,1)*.12)}function ge(e,t){let n=d(e.marketProbability??e.marketPrice??e.probability),r=d(e.fairProbability??e.referenceProbability??e.fairValue);f(t,"probability_mispricing",n===null||r===null?null:p(r-n,-1,1)*.65);let s=d(e.liquidityUsd??e.liquidity);f(t,"market_liquidity",s===null?null:p(Math.log10(Math.max(1,s))/6)*.12)}var ze=Object.freeze({wallet:pe,pool:me,nft_floor:he,hl_flow:_e,prediction_market:ge});var et=b.dirname(ye(import.meta.url));function T(e){try{return y.existsSync(e)}catch{return!1}}function be(){try{let e=b.join(g,"src/data/providers");if(!T(e))return{count:0,detail:"providers dir missing"};let t=y.readdirSync(e).filter(n=>n.endsWith(".mjs"));return{count:t.length,detail:`${t.length} provider modules`}}catch(e){return{count:0,detail:e instanceof Error?e.message:String(e)}}}function Ee(){let e=b.join(g,"skills");if(!T(e))return{count:0,trading:[],building:[]};let t=y.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 ke(){let e=b.join(g,"protocols/templates");return T(e)?y.readdirSync(e).filter(t=>!t.startsWith(".")):[]}function Ae(){let e=b.join(g,"profiles");return T(e)?y.readdirSync(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&!t.name.startsWith("_")).map(t=>t.name):[]}function V(e=process.env){let t=[],n=(l,q,X,J=1)=>{t.push({id:l,status:q,detail:X,weight:J})},[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 i=["oracle_cli","research_delegate","trade_lifecycle","signal_score","skill_load","learn_skill","code_eval","cron_add","web_fetch"].filter(l=>!L.includes(l)&&l!=="signal_score"),E=b.join(g,"src/tui/desk-tools.mjs"),h=T(E)?y.readFileSync(E,"utf8"):"",k=/signal_score/.test(h)||L.includes("signal_score");n("agent_tools",i.length===0&&k?"ok":"warn",k?`safe tools ${L.length}; signal_score present`:`missing signal_score or tools: ${i.join(",")||"signal_score"}`,3),n("research_attributes","ok",`attrs [${$.join(", ")}]; mode=${M(e)?"ON":"off"}`,2);let A=be();n("providers",A.count>=40?"ok":A.count>=20?"warn":"fail",A.detail,3);let m=Ee();n("skills_trading_build",m.trading.length>=5&&m.building.length>=4?"ok":"warn",`${m.count} skills; trading=${m.trading.length} building=${m.building.length}`,3);let v=ke();n("protocol_templates",v.length>=2?"ok":"warn",v.length?v.join(", "):"none",2);let _=Ae();n("profiles",_.includes("protocol-builder")&&_.includes("oracle")?"ok":"warn",_.join(", ")||"none",2),n("signals_engine",H.length>=4?"ok":"fail",`types: ${H.join(", ")} (cold / no hot exec)`,2);let a=G();n("harness_roster",a.length>=8?"ok":"warn",`${a.length} website harnesses; native default; MCP inbound only`,2);let C=b.join(g,"src/capability-posture.mjs"),c=T(C)&&/prepare-only/i.test(y.readFileSync(C,"utf8"));n("custody_prepare_only",c?"ok":"fail","public plane prepare-only",4);let P=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";n("data_url","ok",P,1);let w=0,x=0;for(let l of t)x+=l.weight,l.status==="ok"?w+=l.weight:l.status==="warn"&&(w+=l.weight*.5);let j=x?Math.round(w/x*100):0,F=!t.some(l=>l.status==="fail")&&j>=70,W=F?`AGENTIC READY ${j}% \u2014 Oracle is the crypto control plane (prepare-only); pair coding harnesses via MCP for build.`:`AGENTIC GAPS ${j}% \u2014 fix fail/warn checks before calling Oracle the default crypto harness.`;return{ok:F,score:w,max:x,pct:j,summary:W,researchMode:M(e),attributes:[...$],checks:t}}function Y(){let[e,t]=process.versions.node.split(".").map(Number);return e>20||e===20&&t>=19}function we(e){if(!D.existsSync(e))return{};let t={};for(let n of D.readFileSync(e,"utf8").split(/\r?\n/)){let r=n.match(/^([A-Z0-9_]+)=(.*)$/);r&&(t[r[1]]=r[2])}return t}async function xe(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 it={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=(c,P,w,x=null)=>{r.push({id:c,status:P,detail:w,fix:x}),P==="fail"&&(s=!0)};o("node",Y()?"ok":"fail",`node ${process.versions.node}`,Y()?null:"install node >= 20.19");let u=e.paths.oracleExecEnvPath(),i=we(u),E=process.env.ORACLE_ROUTE_ATTESTATION_SECRET||process.env.MAD_ROUTE_ATTESTATION_SECRET||process.env.ORACLE_ATTESTATION_SECRET||process.env.ORACLE_STAMP_HMAC_SECRET||i.ORACLE_ROUTE_ATTESTATION_SECRET||i.MAD_ROUTE_ATTESTATION_SECRET||i.ORACLE_ATTESTATION_SECRET||i.ORACLE_STAMP_HMAC_SECRET;o("attestation_secret",E?"ok":"warn",E?"present":"missing",E?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let h=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",k=await xe(h),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;o("data_server",k?"ok":"warn",k?`reachable ${h}${A?` (${A})`:""}`:`down ${h}`,k?null:h.includes("127.0.0.1")||h.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 m=z();o("harness_model","ok","Oracle native is default; external clients are inbound MCP only (oracle harness detect)",null),o("hermes_opt_in","ok",m.ok?`detected ${m.bin} (${m.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let v=ve.join(e.paths.hermesRoot(),"profiles"),_=0;D.existsSync(v)&&(_=D.readdirSync(v,{withFileTypes:!0}).filter(c=>c.isDirectory()).length),o("hermes_lanes","ok",_>0?`${_} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);let a=null;if(n){a=V(process.env);for(let c of a.checks)o(`agentic_${c.id}`,c.status,c.detail,null)}let C={ok:!s&&(a?a.ok:!0),checks:r,...a?{agentic:{pct:a.pct,summary:a.summary,attributes:a.attributes,researchMode:a.researchMode}}:{}};if(t)process.stdout.write(JSON.stringify(C,null,2)+`
2
- `);else{for(let c of r)process.stdout.write(`${c.status.toUpperCase().padEnd(4)} ${c.id}: ${c.detail}
3
- `),c.fix&&process.stdout.write(` fix: ${c.fix}
4
- `);a&&process.stdout.write(`
5
- ${a.summary}
6
- `)}return C.ok?0:1}};export{it as default};
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_navigate","browser_snapshot","browser_click","browser_type","browser_press","browser_close","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 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
+ `);else{for(let u of r)process.stdout.write(`${u.status.toUpperCase().padEnd(4)} ${u.id}: ${u.detail}
3
+ `),u.fix&&process.stdout.write(` fix: ${u.fix}
4
+ `);l&&process.stdout.write(`
5
+ ${l.summary}
6
+ `)}return k.ok?0:1}};export{pt as default};