@oracle-agent/oracle 0.35.4 → 0.35.6

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.
Files changed (40) hide show
  1. package/README.md +1 -1
  2. package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
  3. package/dist/bin/desk-server.mjs +25 -23
  4. package/dist/bin/oracle-data-mcp.mjs +13 -11
  5. package/dist/bin/oracle-gateway.mjs +35 -35
  6. package/dist/bin/oracle-mev-arb-shadow.mjs +7 -5
  7. package/dist/bin/oracle-mev-shadow.mjs +7 -5
  8. package/dist/bin/oracle-public-server.mjs +6 -4
  9. package/dist/bin/oracle-route.mjs +22 -20
  10. package/dist/bin/oracle-scan.mjs +14 -12
  11. package/dist/bin/oracle-telegram-mcp.mjs +10 -10
  12. package/dist/bin/oracle.mjs +7 -5
  13. package/dist/cli/commands/chat.mjs +166 -164
  14. package/dist/cli/commands/doctor.mjs +3 -3
  15. package/dist/cli/commands/eval.mjs +113 -113
  16. package/dist/cli/commands/farm.mjs +14 -14
  17. package/dist/cli/commands/follow.mjs +16 -14
  18. package/dist/cli/commands/model.mjs +170 -168
  19. package/dist/cli/commands/project.mjs +17 -0
  20. package/dist/cli/commands/resolve.mjs +8 -6
  21. package/dist/cli/commands/shadow.mjs +21 -0
  22. package/dist/cli/commands/signer.mjs +10 -10
  23. package/dist/cli/commands/snipe.mjs +10 -8
  24. package/dist/cli/commands/strategy.mjs +5 -5
  25. package/dist/cli/commands/swap.mjs +27 -25
  26. package/dist/cli/commands/telegram.mjs +10 -10
  27. package/dist/cli/commands/venues.mjs +2 -2
  28. package/dist/data/desk-data.mjs +23 -21
  29. package/dist/data/names.mjs +4 -2
  30. package/dist/data/providers/farming.mjs +2 -2
  31. package/dist/index.mjs +37 -35
  32. package/dist/local-signer/index.mjs +3 -3
  33. package/dist/local-signer/runtime.mjs +9 -9
  34. package/dist/nft/universal-mint-router.mjs +5 -3
  35. package/dist/router/index.mjs +4 -2
  36. package/dist/router/prepare-bridge.mjs +2 -2
  37. package/dist/scanner/index.mjs +5 -3
  38. package/dist/strategy/index.mjs +3 -3
  39. package/package.json +1 -1
  40. package/public/oracle-splash/index.html +2 -2
@@ -1,11 +1,12 @@
1
1
  #!/usr/bin/env node
2
- import{realpathSync as T}from"node:fs";import{fileURLToPath as oe}from"node:url";import h from"node:fs";import g from"node:path";import{pathToFileURL as z}from"node:url";import d from"node:fs";import P from"node:os";import i from"node:path";import{fileURLToPath as $}from"node:url";var M=i.dirname($(import.meta.url)),l=i.resolve(M,"../..");function u(){return process.env.ORACLE_FAKE_HOME||P.homedir()}function v(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function f(){return v()?process.env.ORACLE_CONFIG_DIR||i.join(u(),".config","oracle"):i.join(u(),".config","oracle")}function I(){return i.join(f(),"exec.env")}function R(){return i.join(f(),"desk.json")}function k(){return i.join(f(),"env")}function p({force:e=!1}={}){if(p._done&&!e)return p._result||null;p._done=!0;let o={},n=(c,t)=>{if(t==null)return;let r=String(t).trim();r&&(process.env[c]!=null&&String(process.env[c]).trim()!==""||(process.env[c]=r,o[c]=r))};try{let c=k();if(d.existsSync(c))for(let t of d.readFileSync(c,"utf8").split(/\r?\n/)){let r=t.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!r||r[2].startsWith("#"))continue;let a=r[2];(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),n(r[1],a)}}catch{}try{let c=R();if(d.existsSync(c)){let t=JSON.parse(d.readFileSync(c,"utf8"));t&&typeof t=="object"&&(n("ORACLE_DESK_URL",t.deskUrl||t.dataUrl||t.url),n("ORACLE_DATA_URL",t.dataUrl||t.deskUrl||t.url),n("ORACLE_API_URL",t.apiUrl||t.dataUrl||t.deskUrl),n("ORACLE_PUBLIC_URL",t.publicUrl||t.deskUrl||t.dataUrl),n("ORACLE_EXEC_URL",t.execUrl),n("MAD_DESK_URL",t.deskUrl||t.dataUrl))}}catch{}let s=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return s&&(n("ORACLE_DESK_URL",s),n("ORACLE_DATA_URL",s),n("ORACLE_API_URL",s),n("ORACLE_PUBLIC_URL",s),n("MAD_DESK_URL",s)),p._result=Object.keys(o).length?o:null,p._result}try{p()}catch{}function H(){return process.env.HERMES_HOME?i.resolve(process.env.HERMES_HOME):i.join(u(),".hermes")}function N(){return i.join(u(),".claude.json")}function F(e=process.cwd()){return i.join(e,".mcp.json")}function q(){return process.platform==="darwin"?i.join(u(),"Library","Application Support","Claude","claude_desktop_config.json"):i.join(u(),".config","Claude","claude_desktop_config.json")}function K(){return i.join(u(),".codex","config.toml")}function C(){return i.join(f(),"connectors")}function B(){return i.join(C(),"chatgpt-openapi.json")}function G(){return i.join(f(),"active-chain.json")}function y(e){let o=[i.join(l,"bin",e),i.join(l,"dist","bin",e),i.join(l,"..","bin",e)];return o.find(n=>d.existsSync(n))||o[0]}function V(e){return d.mkdirSync(e,{recursive:!0}),e}var j={homeDir:u,isPublicDesktop:v,oracleConfigDir:f,oracleExecEnvPath:I,oracleDeskJsonPath:R,oracleEnvFilePath:k,loadDeskRouting:p,hermesRoot:H,activeChainPath:G,claudeCodeUserConfigPath:N,claudeCodeProjectMcpPath:F,claudeDesktopConfigPath:q,codexConfigPath:K,chatgptConnectorDir:C,chatgptOpenApiPath:B,packageBin:y,ensureDir:V,PACKAGE_ROOT:l};import{execFile as J}from"node:child_process";import{existsSync as me,mkdirSync as he,readFileSync as W,realpathSync as ge,writeFileSync as ye}from"node:fs";import w from"node:path";import{promisify as Y}from"node:util";var Ae=Y(J);var _e=1440*60*1e3;function L(e,o){let n=t=>String(t).replace(/^v/,"").split("-")[0].split(".").map(r=>Number.parseInt(r,10)||0),s=n(e),c=n(o);for(let t=0;t<Math.max(s.length,c.length);t+=1){let r=s[t]??0,a=c[t]??0;if(r>a)return 1;if(r<a)return-1}return 0}function X(e){let o=e?.stateDir||w.join(process.env.HOME||".",".oracle");return w.join(o,"update-check.json")}function O(e){try{return JSON.parse(W(X(e),"utf8"))}catch{return null}}var Q="\u25C7 ORACLE // self-custody multichain agent control plane",Z=`START
2
+ import{realpathSync as T}from"node:fs";import{fileURLToPath as oe}from"node:url";import h from"node:fs";import g from"node:path";import{pathToFileURL as z}from"node:url";import d from"node:fs";import P from"node:os";import i from"node:path";import{fileURLToPath as $}from"node:url";var M=i.dirname($(import.meta.url)),l=i.resolve(M,"../..");function u(){return process.env.ORACLE_FAKE_HOME||P.homedir()}function v(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function m(){return v()?process.env.ORACLE_CONFIG_DIR||i.join(u(),".config","oracle"):i.join(u(),".config","oracle")}function I(){return i.join(m(),"exec.env")}function R(){return i.join(m(),"desk.json")}function k(){return i.join(m(),"env")}function p({force:e=!1}={}){if(p._done&&!e)return p._result||null;p._done=!0;let o={},n=(c,t)=>{if(t==null)return;let r=String(t).trim();r&&(process.env[c]!=null&&String(process.env[c]).trim()!==""||(process.env[c]=r,o[c]=r))};try{let c=k();if(d.existsSync(c))for(let t of d.readFileSync(c,"utf8").split(/\r?\n/)){let r=t.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!r||r[2].startsWith("#"))continue;let a=r[2];(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),n(r[1],a)}}catch{}try{let c=R();if(d.existsSync(c)){let t=JSON.parse(d.readFileSync(c,"utf8"));t&&typeof t=="object"&&(n("ORACLE_DESK_URL",t.deskUrl||t.dataUrl||t.url),n("ORACLE_DATA_URL",t.dataUrl||t.deskUrl||t.url),n("ORACLE_API_URL",t.apiUrl||t.dataUrl||t.deskUrl),n("ORACLE_PUBLIC_URL",t.publicUrl||t.deskUrl||t.dataUrl),n("ORACLE_EXEC_URL",t.execUrl),n("MAD_DESK_URL",t.deskUrl||t.dataUrl))}}catch{}let s=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return s&&(n("ORACLE_DESK_URL",s),n("ORACLE_DATA_URL",s),n("ORACLE_API_URL",s),n("ORACLE_PUBLIC_URL",s),n("MAD_DESK_URL",s)),p._result=Object.keys(o).length?o:null,p._result}try{p()}catch{}function H(){return process.env.HERMES_HOME?i.resolve(process.env.HERMES_HOME):i.join(u(),".hermes")}function N(){return i.join(u(),".claude.json")}function F(e=process.cwd()){return i.join(e,".mcp.json")}function q(){return process.platform==="darwin"?i.join(u(),"Library","Application Support","Claude","claude_desktop_config.json"):i.join(u(),".config","Claude","claude_desktop_config.json")}function K(){return i.join(u(),".codex","config.toml")}function C(){return i.join(m(),"connectors")}function B(){return i.join(C(),"chatgpt-openapi.json")}function G(){return i.join(m(),"active-chain.json")}function y(e){let o=[i.join(l,"bin",e),i.join(l,"dist","bin",e),i.join(l,"..","bin",e)];return o.find(n=>d.existsSync(n))||o[0]}function V(e){return d.mkdirSync(e,{recursive:!0}),e}var w={homeDir:u,isPublicDesktop:v,oracleConfigDir:m,oracleExecEnvPath:I,oracleDeskJsonPath:R,oracleEnvFilePath:k,loadDeskRouting:p,hermesRoot:H,activeChainPath:G,claudeCodeUserConfigPath:N,claudeCodeProjectMcpPath:F,claudeDesktopConfigPath:q,codexConfigPath:K,chatgptConnectorDir:C,chatgptOpenApiPath:B,packageBin:y,ensureDir:V,PACKAGE_ROOT:l};import{execFile as J}from"node:child_process";import{existsSync as fe,mkdirSync as he,readFileSync as W,realpathSync as ge,writeFileSync as ye}from"node:fs";import j from"node:path";import{promisify as Y}from"node:util";var Ae=Y(J);var _e=1440*60*1e3;function L(e,o){let n=t=>String(t).replace(/^v/,"").split("-")[0].split(".").map(r=>Number.parseInt(r,10)||0),s=n(e),c=n(o);for(let t=0;t<Math.max(s.length,c.length);t+=1){let r=s[t]??0,a=c[t]??0;if(r>a)return 1;if(r<a)return-1}return 0}function X(e){let o=e?.stateDir||j.join(process.env.HOME||".",".oracle");return j.join(o,"update-check.json")}function O(e){try{return JSON.parse(W(X(e),"utf8"))}catch{return null}}var Q="\u25C7 ORACLE // self-custody multichain agent control plane",Z=`START
3
3
  oracle open the native Oracle chat (TTY)
4
4
  oracle chat open chat explicitly
5
5
  oracle setup connect a model and optional messaging
6
6
  oracle model switch provider or model
7
7
  oracle auth manage Claude, Codex, Grok, or API-key auth
8
8
  oracle chain list/select working chains (hyperliquid, base, ...)
9
+ oracle project allow|deny|list folders chat may read/write
9
10
 
10
11
  READ / RESEARCH
11
12
  oracle doctor check the read plane
@@ -19,6 +20,7 @@ PREPARE
19
20
  oracle swap unsigned route and wallet-signable calldata
20
21
  oracle prepare build an unsigned swap (alias of route prepare)
21
22
  oracle strategy draft|validate|backtest|optimize|evidence \xB7 shadow \xB7 prepare
23
+ oracle shadow record|mark|summary prepare and NO_TRADE outcomes
22
24
  oracle mev observe \xB7 status \xB7 control \xB7 operator (execute needs --execute)
23
25
  oracle snipe twitter CA watch \u2192 USD-book prepare (no broadcast)
24
26
 
@@ -48,15 +50,15 @@ BOUNDARY
48
50
  MEV observe is read-only. Flash-loan execute needs ORACLE_MEV_EXECUTE_ENABLED=1
49
51
  and literal --execute. There is no autonomous MEV loop.
50
52
  Use oracle <command> --help for command details.
51
- `;function U(){try{return JSON.parse(h.readFileSync(g.join(l,"package.json"),"utf8")).version||"0.0.0"}catch{return"0.0.0"}}function ee(){let e=g.join(l,"src","cli","commands");return h.existsSync(e)?e:g.join(l,"dist","cli","commands")}async function m(){let e=ee(),o=new Map;if(!h.existsSync(e))return o;let n=h.readdirSync(e).filter(s=>s.endsWith(".mjs")).sort();for(let s of n){let c=g.join(e,s);try{let r=(await import(z(c).href+`?t=${Date.now()}`)).default;if(!r||typeof r!="object"||typeof r.run!="function")continue;let a=r.name||s.replace(/\.mjs$/,""),A={...r,name:a,__file:c};o.set(a,A);for(let _ of Array.isArray(r.aliases)?r.aliases:[])o.set(_,{...A,name:_,aliasFor:a})}catch(t){process.env.ORACLE_CLI_DEBUG&&console.error(`oracle: failed loading command ${s}: ${t.message}`)}}return o}function te(e,o=O()){return!o?.latest||!e||L(o.latest,e)<=0?"":`
53
+ `;function U(){try{return JSON.parse(h.readFileSync(g.join(l,"package.json"),"utf8")).version||"0.0.0"}catch{return"0.0.0"}}function ee(){let e=g.join(l,"src","cli","commands");return h.existsSync(e)?e:g.join(l,"dist","cli","commands")}async function f(){let e=ee(),o=new Map;if(!h.existsSync(e))return o;let n=h.readdirSync(e).filter(s=>s.endsWith(".mjs")).sort();for(let s of n){let c=g.join(e,s);try{let r=(await import(z(c).href+`?t=${Date.now()}`)).default;if(!r||typeof r!="object"||typeof r.run!="function")continue;let a=r.name||s.replace(/\.mjs$/,""),A={...r,name:a,__file:c};o.set(a,A);for(let _ of Array.isArray(r.aliases)?r.aliases:[])o.set(_,{...A,name:_,aliasFor:a})}catch(t){process.env.ORACLE_CLI_DEBUG&&console.error(`oracle: failed loading command ${s}: ${t.message}`)}}return o}function te(e,o=O()){return!o?.latest||!e||L(o.latest,e)<=0?"":`
52
54
  Update available: ${e} \u2192 ${o.latest}. Run 'oracle update'.
53
- `}function E(e,o){let n=[];n.push(`${Q} (v${e})`),n.push(""),n.push(Z.trimEnd());let s=[];for(let c of o.values()){if(["help","version"].includes(c.name))continue;!new Set(["init","doctor","chat","model","auth","chain","setup","data","data-mcp","scan","route","prepare","swap","farm","follow","equities","strategy","mev","snipe","public","mcp","plugins","harness","clients","upgrade","bootstrap","eval","fees","sign","signer"]).has(c.name)&&c.summary&&s.push(` oracle ${c.name.padEnd(20)} ${c.summary}`)}return s.length&&(n.push(""),n.push("ADDITIONAL"),n.push(...s)),n.join(`
55
+ `}function E(e,o){let n=[];n.push(`${Q} (v${e})`),n.push(""),n.push(Z.trimEnd());let s=[];for(let c of o.values()){if(["help","version"].includes(c.name))continue;!new Set(["init","doctor","chat","model","auth","chain","setup","data","data-mcp","scan","route","prepare","swap","farm","follow","equities","strategy","shadow","mev","snipe","public","mcp","plugins","harness","clients","upgrade","bootstrap","eval","fees","sign","signer","project"]).has(c.name)&&c.summary&&s.push(` oracle ${c.name.padEnd(20)} ${c.summary}`)}return s.length&&(n.push(""),n.push("ADDITIONAL"),n.push(...s)),n.join(`
54
56
  `)+`
55
57
  `+te(e)}function S(e,o){let n=[...o.keys()].sort(),s=n.length?n.join(", "):"(none loaded yet)";return`oracle: unknown command '${e}'. Known: ${s}
56
58
  Try: oracle --help
57
- `}function x(e){return{argv:e,root:l,bin:y,paths:j}}async function D(e=[]){let o=U();if(e.includes("--version")||e.includes("-V"))return b();if(e[0]==="--help"||e[0]==="-h"){let r=await m();return process.stdout.write(E(o,r)),0}if(e.length===0){let r=await m();if(re(e)){let a=r.get("chat");if(a)return a.run(x([]))}return process.stdout.write(E(o,r)),0}if(ne(e[0])){let a=(await m()).get("chat");if(a)return a.run(x(e))}let n=e[0],s=e.slice(1);if(n==="version")return b();if(n==="help"){let r=await m();if(s[0]){let a=r.get(s[0]);return a?(process.stdout.write((a.usage||`oracle ${a.name}`)+`
59
+ `}function x(e){return{argv:e,root:l,bin:y,paths:w}}async function D(e=[]){let o=U();if(e.includes("--version")||e.includes("-V"))return b();if(e[0]==="--help"||e[0]==="-h"){let r=await f();return process.stdout.write(E(o,r)),0}if(e.length===0){let r=await f();if(re(e)){let a=r.get("chat");if(a)return a.run(x([]))}return process.stdout.write(E(o,r)),0}if(ne(e[0])){let a=(await f()).get("chat");if(a)return a.run(x(e))}let n=e[0],s=e.slice(1);if(n==="version")return b();if(n==="help"){let r=await f();if(s[0]){let a=r.get(s[0]);return a?(process.stdout.write((a.usage||`oracle ${a.name}`)+`
58
60
  `),a.summary&&process.stdout.write(a.summary+`
59
- `),0):(process.stderr.write(S(s[0],r)),1)}return process.stdout.write(E(o,r)),0}let c=await m(),t=c.get(n);if(t){if(s[0]==="--help"||s[0]==="-h")return process.stdout.write((t.usage||`oracle ${t.name}`)+`
61
+ `),0):(process.stderr.write(S(s[0],r)),1)}return process.stdout.write(E(o,r)),0}let c=await f(),t=c.get(n);if(t){if(s[0]==="--help"||s[0]==="-h")return process.stdout.write((t.usage||`oracle ${t.name}`)+`
60
62
  `),t.summary&&process.stdout.write(t.summary+`
61
63
  `),0;try{let r=await t.run(x(s));return typeof r=="number"?r:0}catch(r){return process.stderr.write(`oracle ${n}: ${r?.message||r}
62
64
  `),1}}return process.stderr.write(S(n,c)),1}async function b(){let e=U();return process.stdout.write(`oracle ${e}