@oracle-agent/oracle 0.35.35 → 0.35.36

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 (42) hide show
  1. package/README.md +34 -1
  2. package/dist/address-book.mjs +2 -2
  3. package/dist/agent-sessions.mjs +8 -8
  4. package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
  5. package/dist/bin/desk-server.mjs +35 -35
  6. package/dist/bin/oracle-data-mcp.mjs +17 -17
  7. package/dist/bin/oracle.mjs +8 -6
  8. package/dist/cli/commands/agent-session.mjs +10 -10
  9. package/dist/cli/commands/airdrop.mjs +16 -0
  10. package/dist/cli/commands/chat.mjs +215 -205
  11. package/dist/cli/commands/doctor.mjs +3 -3
  12. package/dist/cli/commands/eval.mjs +151 -142
  13. package/dist/cli/commands/extension-policy.mjs +3 -3
  14. package/dist/cli/commands/farm.mjs +9 -9
  15. package/dist/cli/commands/mint.mjs +22 -0
  16. package/dist/cli/commands/model.mjs +219 -209
  17. package/dist/cli/commands/quickstart.mjs +4 -4
  18. package/dist/cli/commands/session-vault.mjs +1 -1
  19. package/dist/cli/commands/sign.mjs +4 -4
  20. package/dist/cli/commands/signer.mjs +14 -14
  21. package/dist/cli/commands/venues.mjs +2 -2
  22. package/dist/control/receipt-lineage.mjs +1 -0
  23. package/dist/data/desk-data.mjs +33 -33
  24. package/dist/data/providers/farming.mjs +2 -2
  25. package/dist/index.mjs +50 -50
  26. package/dist/local-signer/anvil-attestation-worker.mjs +1 -1
  27. package/dist/local-signer/index.mjs +2 -2
  28. package/dist/local-signer/runtime.mjs +8 -8
  29. package/dist/teams/index.mjs +3 -3
  30. package/dist/tui/standalone-client.mjs +86 -77
  31. package/package.json +2 -1
  32. package/public/eval-report.json +2 -2
  33. package/public/oracle-splash/assets/desktop-app.jpg +0 -0
  34. package/public/oracle-splash/assets/hero/agent-session-poster.jpg +0 -0
  35. package/public/oracle-splash/assets/hero/agent-session.mp4 +0 -0
  36. package/public/oracle-splash/assets/hero/agent-session.webm +0 -0
  37. package/public/oracle-splash/assets/oracle-cli-v03535-poster.jpg +0 -0
  38. package/public/oracle-splash/assets/oracle-cli-v03535.gif +0 -0
  39. package/public/oracle-splash/assets/protocol-build-time.jpg +0 -0
  40. package/public/oracle-splash/downloads/index.html +2 -2
  41. package/public/oracle-splash/index.html +129 -51
  42. package/server.json +2 -2
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{realpathSync as N}from"node:fs";import{fileURLToPath as ie}from"node:url";import m from"node:fs";import h from"node:path";import{pathToFileURL as D}from"node:url";import d from"node:fs";import F from"node:os";import c from"node:path";import{fileURLToPath as H}from"node:url";var q=c.dirname(H(import.meta.url)),l=c.resolve(q,"../..");function u(){return process.env.ORACLE_FAKE_HOME||F.homedir()}function w(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function f(){return w()?process.env.ORACLE_CONFIG_DIR||c.join(u(),".config","oracle"):c.join(u(),".config","oracle")}function B(){return c.join(f(),"exec.env")}function k(){return c.join(f(),"desk.json")}function C(){return c.join(f(),"env")}function p({force:e=!1}={}){if(p._done&&!e)return p._result||null;p._done=!0;let r={},o=(n,t)=>{if(t==null)return;let s=String(t).trim();s&&(process.env[n]!=null&&String(process.env[n]).trim()!==""||(process.env[n]=s,r[n]=s))};try{let n=C();if(d.existsSync(n))for(let t of d.readFileSync(n,"utf8").split(/\r?\n/)){let s=t.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let i=s[2];(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),o(s[1],i)}}catch{}try{let n=k();if(d.existsSync(n)){let t=JSON.parse(d.readFileSync(n,"utf8"));t&&typeof t=="object"&&(o("ORACLE_DESK_URL",t.deskUrl||t.dataUrl||t.url),o("ORACLE_DATA_URL",t.dataUrl||t.deskUrl||t.url),o("ORACLE_API_URL",t.apiUrl||t.dataUrl||t.deskUrl),o("ORACLE_PUBLIC_URL",t.publicUrl||t.deskUrl||t.dataUrl),o("ORACLE_EXEC_URL",t.execUrl),o("MAD_DESK_URL",t.deskUrl||t.dataUrl))}}catch{}let a=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return a&&(o("ORACLE_DESK_URL",a),o("ORACLE_DATA_URL",a),o("ORACLE_API_URL",a),o("ORACLE_PUBLIC_URL",a),o("MAD_DESK_URL",a)),p._result=Object.keys(r).length?r:null,p._result}try{p()}catch{}function G(){return process.env.HERMES_HOME?c.resolve(process.env.HERMES_HOME):c.join(u(),".hermes")}function K(){return c.join(u(),".claude.json")}function V(e=process.cwd()){return c.join(e,".mcp.json")}function W(){return process.platform==="darwin"?c.join(u(),"Library","Application Support","Claude","claude_desktop_config.json"):c.join(u(),".config","Claude","claude_desktop_config.json")}function J(){return c.join(u(),".codex","config.toml")}function R(){return c.join(f(),"connectors")}function Y(){return c.join(R(),"chatgpt-openapi.json")}function z(){return c.join(f(),"active-chain.json")}function g(e){let r=[c.join(l,"bin",e),c.join(l,"dist","bin",e),c.join(l,"..","bin",e)];return r.find(o=>d.existsSync(o))||r[0]}function X(e){return d.mkdirSync(e,{recursive:!0}),e}var j={homeDir:u,isPublicDesktop:w,oracleConfigDir:f,oracleExecEnvPath:B,oracleDeskJsonPath:k,oracleEnvFilePath:C,loadDeskRouting:p,hermesRoot:G,activeChainPath:z,claudeCodeUserConfigPath:K,claudeCodeProjectMcpPath:V,claudeDesktopConfigPath:W,codexConfigPath:J,chatgptConnectorDir:R,chatgptOpenApiPath:Y,packageBin:g,ensureDir:X,PACKAGE_ROOT:l};import{execFile as Q}from"node:child_process";import{existsSync as xe,mkdirSync as Ee,readFileSync as Z,realpathSync as ve,writeFileSync as Ae}from"node:fs";import O from"node:path";import{promisify as ee}from"node:util";var ke=ee(Q);var Ce=1440*60*1e3;function L(e,r){let o=t=>String(t).replace(/^v/,"").split("-")[0].split(".").map(s=>Number.parseInt(s,10)||0),a=o(e),n=o(r);for(let t=0;t<Math.max(a.length,n.length);t+=1){let s=a[t]??0,i=n[t]??0;if(s>i)return 1;if(s<i)return-1}return 0}function te(e){let r=e?.stateDir||O.join(process.env.HOME||".",".oracle");return O.join(r,"update-check.json")}function S(e){try{return JSON.parse(Z(te(e),"utf8"))}catch{return null}}var re="\u25C7 ORACLE // self-custody multichain agent control plane",oe=`START
2
+ import{realpathSync as N}from"node:fs";import{fileURLToPath as ie}from"node:url";import m from"node:fs";import h from"node:path";import{pathToFileURL as D}from"node:url";import d from"node:fs";import F from"node:os";import c from"node:path";import{fileURLToPath as H}from"node:url";var q=c.dirname(H(import.meta.url)),l=c.resolve(q,"../..");function u(){return process.env.ORACLE_FAKE_HOME||F.homedir()}function _(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function f(){return _()?process.env.ORACLE_CONFIG_DIR||c.join(u(),".config","oracle"):c.join(u(),".config","oracle")}function B(){return c.join(f(),"exec.env")}function k(){return c.join(f(),"desk.json")}function C(){return c.join(f(),"env")}function p({force:e=!1}={}){if(p._done&&!e)return p._result||null;p._done=!0;let r={},o=(n,t)=>{if(t==null)return;let s=String(t).trim();s&&(process.env[n]!=null&&String(process.env[n]).trim()!==""||(process.env[n]=s,r[n]=s))};try{let n=C();if(d.existsSync(n))for(let t of d.readFileSync(n,"utf8").split(/\r?\n/)){let s=t.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let i=s[2];(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),o(s[1],i)}}catch{}try{let n=k();if(d.existsSync(n)){let t=JSON.parse(d.readFileSync(n,"utf8"));t&&typeof t=="object"&&(o("ORACLE_DESK_URL",t.deskUrl||t.dataUrl||t.url),o("ORACLE_DATA_URL",t.dataUrl||t.deskUrl||t.url),o("ORACLE_API_URL",t.apiUrl||t.dataUrl||t.deskUrl),o("ORACLE_PUBLIC_URL",t.publicUrl||t.deskUrl||t.dataUrl),o("ORACLE_EXEC_URL",t.execUrl),o("MAD_DESK_URL",t.deskUrl||t.dataUrl))}}catch{}let a=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return a&&(o("ORACLE_DESK_URL",a),o("ORACLE_DATA_URL",a),o("ORACLE_API_URL",a),o("ORACLE_PUBLIC_URL",a),o("MAD_DESK_URL",a)),p._result=Object.keys(r).length?r:null,p._result}try{p()}catch{}function G(){return process.env.HERMES_HOME?c.resolve(process.env.HERMES_HOME):c.join(u(),".hermes")}function K(){return c.join(u(),".claude.json")}function V(e=process.cwd()){return c.join(e,".mcp.json")}function W(){return process.platform==="darwin"?c.join(u(),"Library","Application Support","Claude","claude_desktop_config.json"):c.join(u(),".config","Claude","claude_desktop_config.json")}function J(){return c.join(u(),".codex","config.toml")}function R(){return c.join(f(),"connectors")}function Y(){return c.join(R(),"chatgpt-openapi.json")}function z(){return c.join(f(),"active-chain.json")}function g(e){let r=[c.join(l,"bin",e),c.join(l,"dist","bin",e),c.join(l,"..","bin",e)];return r.find(o=>d.existsSync(o))||r[0]}function X(e){return d.mkdirSync(e,{recursive:!0}),e}var j={homeDir:u,isPublicDesktop:_,oracleConfigDir:f,oracleExecEnvPath:B,oracleDeskJsonPath:k,oracleEnvFilePath:C,loadDeskRouting:p,hermesRoot:G,activeChainPath:z,claudeCodeUserConfigPath:K,claudeCodeProjectMcpPath:V,claudeDesktopConfigPath:W,codexConfigPath:J,chatgptConnectorDir:R,chatgptOpenApiPath:Y,packageBin:g,ensureDir:X,PACKAGE_ROOT:l};import{execFile as Q}from"node:child_process";import{existsSync as xe,mkdirSync as Ee,readFileSync as Z,realpathSync as ve,writeFileSync as Ae}from"node:fs";import O from"node:path";import{promisify as ee}from"node:util";var ke=ee(Q);var Ce=1440*60*1e3;function L(e,r){let o=t=>String(t).replace(/^v/,"").split("-")[0].split(".").map(s=>Number.parseInt(s,10)||0),a=o(e),n=o(r);for(let t=0;t<Math.max(a.length,n.length);t+=1){let s=a[t]??0,i=n[t]??0;if(s>i)return 1;if(s<i)return-1}return 0}function te(e){let r=e?.stateDir||O.join(process.env.HOME||".",".oracle");return O.join(r,"update-check.json")}function b(e){try{return JSON.parse(Z(te(e),"utf8"))}catch{return null}}var re="\u25C7 ORACLE // self-custody multichain agent control plane",oe=`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
@@ -13,6 +13,7 @@ READ / RESEARCH
13
13
  oracle data serve|call|catalog|health
14
14
  oracle scan chains|head|token|pools|risk|quote|sell
15
15
  oracle farm methods \xB7 discover \xB7 airdrop
16
+ oracle airdrop <address> verify official airdrop eligibility
16
17
  oracle equities venues \xB7 quote \xB7 prepare
17
18
  oracle tax-lots FIFO/LIFO/HIFO cost-basis records
18
19
  oracle position-health lending/yield health over a snapshot
@@ -30,6 +31,7 @@ PREPARE
30
31
  oracle session-vault unsigned optional vault prepare (no broadcast)
31
32
  oracle strategy draft|validate|backtest|optimize|evidence \xB7 shadow \xB7 prepare
32
33
  oracle shadow record|mark|summary prepare and NO_TRADE outcomes
34
+ oracle mint check|prepare|watch; --queue needs local owner approval
33
35
  oracle mev observe \xB7 status \xB7 control \xB7 operator (execute needs --execute)
34
36
  oracle snipe twitter CA watch \u2192 USD-book prepare (no broadcast)
35
37
 
@@ -60,16 +62,16 @@ BOUNDARY
60
62
  MEV observe is read-only. Flash-loan execute needs ORACLE_MEV_EXECUTE_ENABLED=1
61
63
  and literal --execute. There is no autonomous MEV loop.
62
64
  Use oracle <command> --help for command details.
63
- `;function T(){try{return JSON.parse(m.readFileSync(h.join(l,"package.json"),"utf8")).version||"0.0.0"}catch{return"0.0.0"}}function P(){let e=h.join(l,"src","cli","commands");return m.existsSync(e)?e:h.join(l,"dist","cli","commands")}var $=Object.freeze({clients:"harness"});function M(){let e=P();return m.existsSync(e)?new Map(m.readdirSync(e).filter(r=>r.endsWith(".mjs")).map(r=>[r.replace(/\.mjs$/,""),h.join(e,r)])):new Map}function ne(){return[...new Set([...M().keys(),...Object.keys($)])].sort()}async function y(e){let r=$[e]||e,o=M().get(r);if(!o)return null;try{let n=(await import(D(o).href)).default;if(!n||typeof n!="object"||typeof n.run!="function")return null;let t=n.name||r,s={...n,name:t,__file:o};return e!==r?{...s,name:e,aliasFor:t}:s}catch(a){return process.env.ORACLE_CLI_DEBUG&&console.error(`oracle: failed loading command ${r}: ${a.message}`),null}}async function x(){let e=P(),r=new Map;if(!m.existsSync(e))return r;let o=m.readdirSync(e).filter(a=>a.endsWith(".mjs")).sort();for(let a of o){let n=h.join(e,a);try{let s=(await import(D(n).href+`?t=${Date.now()}`)).default;if(!s||typeof s!="object"||typeof s.run!="function")continue;let i=s.name||a.replace(/\.mjs$/,""),A={...s,name:i,__file:n};r.set(i,A);for(let _ of Array.isArray(s.aliases)?s.aliases:[])r.set(_,{...A,name:_,aliasFor:i})}catch(t){process.env.ORACLE_CLI_DEBUG&&console.error(`oracle: failed loading command ${a}: ${t.message}`)}}return r}function se(e,r=S()){return!r?.latest||!e||L(r.latest,e)<=0?"":`
65
+ `;function T(){try{return JSON.parse(m.readFileSync(h.join(l,"package.json"),"utf8")).version||"0.0.0"}catch{return"0.0.0"}}function P(){let e=h.join(l,"src","cli","commands");return m.existsSync(e)?e:h.join(l,"dist","cli","commands")}var $=Object.freeze({clients:"harness"});function M(){let e=P();return m.existsSync(e)?new Map(m.readdirSync(e).filter(r=>r.endsWith(".mjs")).map(r=>[r.replace(/\.mjs$/,""),h.join(e,r)])):new Map}function ne(){return[...new Set([...M().keys(),...Object.keys($)])].sort()}async function y(e){let r=$[e]||e,o=M().get(r);if(!o)return null;try{let n=(await import(D(o).href)).default;if(!n||typeof n!="object"||typeof n.run!="function")return null;let t=n.name||r,s={...n,name:t,__file:o};return e!==r?{...s,name:e,aliasFor:t}:s}catch(a){return process.env.ORACLE_CLI_DEBUG&&console.error(`oracle: failed loading command ${r}: ${a.message}`),null}}async function x(){let e=P(),r=new Map;if(!m.existsSync(e))return r;let o=m.readdirSync(e).filter(a=>a.endsWith(".mjs")).sort();for(let a of o){let n=h.join(e,a);try{let s=(await import(D(n).href+`?t=${Date.now()}`)).default;if(!s||typeof s!="object"||typeof s.run!="function")continue;let i=s.name||a.replace(/\.mjs$/,""),A={...s,name:i,__file:n};r.set(i,A);for(let w of Array.isArray(s.aliases)?s.aliases:[])r.set(w,{...A,name:w,aliasFor:i})}catch(t){process.env.ORACLE_CLI_DEBUG&&console.error(`oracle: failed loading command ${a}: ${t.message}`)}}return r}function se(e,r=b()){return!r?.latest||!e||L(r.latest,e)<=0?"":`
64
66
  Update available: ${e} \u2192 ${r.latest}. Run 'oracle update'.
65
- `}function E(e,r){let o=[];o.push(`${re} (v${e})`),o.push(""),o.push(oe.trimEnd());let a=[];for(let n of r.values()){if(["help","version"].includes(n.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","context","lifecycle"]).has(n.name)&&n.summary&&a.push(` oracle ${n.name.padEnd(20)} ${n.summary}`)}return a.length&&(o.push(""),o.push("ADDITIONAL"),o.push(...a)),o.join(`
67
+ `}function E(e,r){let o=[];o.push(`${re} (v${e})`),o.push(""),o.push(oe.trimEnd());let a=[];for(let n of r.values()){if(["help","version"].includes(n.name))continue;!new Set(["init","doctor","chat","model","auth","chain","setup","data","data-mcp","scan","route","prepare","swap","farm","airdrop","follow","equities","strategy","shadow","mint","mev","snipe","public","mcp","plugins","harness","clients","upgrade","bootstrap","eval","fees","sign","signer","project","context","lifecycle"]).has(n.name)&&n.summary&&a.push(` oracle ${n.name.padEnd(20)} ${n.summary}`)}return a.length&&(o.push(""),o.push("ADDITIONAL"),o.push(...a)),o.join(`
66
68
  `)+`
67
- `+se(e)}function b(e,r){let o=r?[...r.keys()].sort():ne(),a=o.length?o.join(", "):"(none loaded yet)";return`oracle: unknown command '${e}'. Known: ${a}
69
+ `+se(e)}function S(e,r){let o=r?[...r.keys()].sort():ne(),a=o.length?o.join(", "):"(none loaded yet)";return`oracle: unknown command '${e}'. Known: ${a}
68
70
  Try: oracle --help
69
71
  `}function v(e){return{argv:e,root:l,bin:g,paths:j}}async function I(e=[]){let r=T();if(e.includes("--version")||e.includes("-V"))return U();if(e[0]==="--help"||e[0]==="-h"){let t=await x();return process.stdout.write(E(r,t)),0}if(e.length===0){if(ae(e)){let s=await y("chat");if(s)return s.run(v([]))}let t=await x();return process.stdout.write(E(r,t)),0}if(ce(e[0])){let t=await y("chat");if(t)return t.run(v(e))}let o=e[0],a=e.slice(1);if(o==="version")return U();if(o==="help"){if(a[0]){let s=await y(a[0]);return s?(process.stdout.write((s.usage||`oracle ${s.name}`)+`
70
72
  `),s.summary&&process.stdout.write(s.summary+`
71
- `),0):(process.stderr.write(b(a[0])),1)}let t=await x();return process.stdout.write(E(r,t)),0}let n=await y(o);if(n){if(a[0]==="--help"||a[0]==="-h")return process.stdout.write((n.usage||`oracle ${n.name}`)+`
73
+ `),0):(process.stderr.write(S(a[0])),1)}let t=await x();return process.stdout.write(E(r,t)),0}let n=await y(o);if(n){if(a[0]==="--help"||a[0]==="-h")return process.stdout.write((n.usage||`oracle ${n.name}`)+`
72
74
  `),n.summary&&process.stdout.write(n.summary+`
73
75
  `),0;try{let t=await n.run(v(a));return typeof t=="number"?t:0}catch(t){return process.stderr.write(`oracle ${o}: ${t?.message||t}
74
- `),1}}return process.stderr.write(b(o)),1}async function U(){let e=T();return process.stdout.write(`oracle ${e}
76
+ `),1}}return process.stderr.write(S(o)),1}async function U(){let e=T();return process.stdout.write(`oracle ${e}
75
77
  `),0}function ae(e=[],r={stdin:process.stdin,stdout:process.stdout}){return e.length!==0?!1:process.env.ORACLE_FORCE_CHAT==="1"?!0:r.stdin?.isTTY===!0&&r.stdout?.isTTY===!0}function ce(e){return["-m","--model","--provider","-q","--query","-Q","--quiet","-c","--continue","-r","--resume","-s","--skills","-t","--toolsets","--reasoning","--tui","--cli","--yolo","--checkpoints","--source","--max-turns"].includes(String(e||""))}var $e=Object.freeze({data:"./desk-server.mjs",public:"./oracle-public-server.mjs","data-mcp":"./oracle-data-mcp.mjs",init:"./oracle-init.mjs",upgrade:"./oracle-upgrade.mjs",scan:"./oracle-scan.mjs",route:"./oracle-route.mjs",equities:"./oracle-equities.mjs"});function le(){if(!process.argv[1])return!1;try{return N(ie(import.meta.url))===N(process.argv[1])}catch{return!1}}async function ue(e=process.argv.slice(2)){return I(e)}if(le()){let e=await ue();process.exit(typeof e=="number"?e:0)}export{$e as COMMANDS,ue as main};