@oracle-agent/oracle 0.24.8 → 0.24.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.
Files changed (53) hide show
  1. package/README.md +57 -49
  2. package/SECURITY.md +1 -1
  3. package/SETUP.md +16 -13
  4. package/dist/assets/profiles/_template/SOUL.md +2 -2
  5. package/dist/assets/profiles/oracle/SOUL.md +11 -13
  6. package/dist/assets/profiles/profile.schema.json +1 -1
  7. package/dist/assets/profiles/robinhood-agent/SOUL.md +5 -5
  8. package/dist/assets/skills/multi-venue-prepare-only-ranking/SKILL.md +1 -1
  9. package/dist/assets/skills/oracle-action-semantics/SKILL.md +5 -5
  10. package/dist/assets/skills/oracle-chat/SKILL.md +8 -8
  11. package/dist/assets/skills/oracle-desk-product/SKILL.md +3 -3
  12. package/dist/assets/skills/oracle-receipts/SKILL.md +2 -2
  13. package/dist/bin/desk-server.mjs +78 -34
  14. package/dist/bin/oracle-data-mcp.mjs +51 -7
  15. package/dist/bin/oracle-gateway.mjs +13 -15
  16. package/dist/bin/oracle-init.mjs +9 -9
  17. package/dist/bin/oracle-public-server.mjs +48 -4
  18. package/dist/bin/oracle-route.mjs +66 -22
  19. package/dist/bin/oracle-scan.mjs +58 -14
  20. package/dist/bin/oracle-upgrade.mjs +9 -9
  21. package/dist/bin/oracle.mjs +6 -6
  22. package/dist/cli/commands/chat.mjs +140 -96
  23. package/dist/cli/commands/doctor.mjs +5 -5
  24. package/dist/cli/commands/eval.mjs +17 -17
  25. package/dist/cli/commands/farm.mjs +72 -28
  26. package/dist/cli/commands/follow.mjs +61 -17
  27. package/dist/cli/commands/model.mjs +147 -103
  28. package/dist/cli/commands/receipt.mjs +3 -3
  29. package/dist/cli/commands/resolve.mjs +55 -11
  30. package/dist/cli/commands/setup.mjs +27 -27
  31. package/dist/cli/commands/sign.mjs +14 -13
  32. package/dist/cli/commands/signer.mjs +14 -17
  33. package/dist/cli/commands/strategy.mjs +50 -6
  34. package/dist/cli/commands/swap.mjs +72 -29
  35. package/dist/cli/commands/venues.mjs +3 -3
  36. package/dist/data/desk-data.mjs +78 -34
  37. package/dist/data/names.mjs +46 -2
  38. package/dist/data/providers/farming.mjs +46 -2
  39. package/dist/index.mjs +80 -36
  40. package/dist/local-signer/index.mjs +3 -1
  41. package/dist/router/index.mjs +46 -2
  42. package/dist/router/prepare-bridge.mjs +46 -2
  43. package/dist/scanner/index.mjs +48 -4
  44. package/dist/strategy/index.mjs +47 -3
  45. package/package.json +6 -3
  46. package/public/install.ps1 +1 -1
  47. package/public/install.sh +5 -4
  48. package/public/oracle-splash/_variants/ice.html +3 -3
  49. package/public/oracle-splash/_variants/ivory.html +3 -3
  50. package/public/oracle-splash/downloads/index.html +5 -5
  51. package/public/oracle-splash/index.html +7 -7
  52. package/public/oracle-splash/install.ps1 +1 -1
  53. package/public/oracle-splash/install.sh +5 -4
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
- import B from"node:os";import g from"node:path";import{fileURLToPath as L}from"node:url";import a from"node:fs";import u from"node:path";import{randomBytes as O}from"node:crypto";var w="oracle-profile-upgrade/v1";function m(e){try{return a.accessSync(e),!0}catch{return!1}}function v(e){return m(e)?a.readdirSync(e,{recursive:!0,withFileTypes:!0}).filter(r=>r.isFile()).map(r=>u.join(r.parentPath||r.path,r.name)).sort().map(r=>[u.relative(e,r),a.readFileSync(r)]):[]}function P(e){let r=v(e);return r.push([".oracle-upgrade-version",Buffer.from(`${w}
3
- `)]),r.sort(([t],[n])=>t.localeCompare(n))}function R(e,r){let t=v(e);return t.length===r.length&&t.every(([n,s],c)=>n===r[c][0]&&s.equals(r[c][1]))}function E(e){return`${e}.tmp-oracle-upgrade-${process.pid}-${O(6).toString("hex")}`}function j(e){let r=`${e}.bak-oracle-upgrade`;for(let t=1;m(r);t+=1)r=`${e}.bak-oracle-upgrade-${t}`;return r}function N(e,r,t,n){if(!m(e)||!a.statSync(e).isDirectory())return;let s=P(e);if(R(r,s)){n.unchanged.push(r);return}let c=m(r);if((c?n.updated:n.created).push(r),!t)return;a.mkdirSync(u.dirname(r),{recursive:!0});let o=E(r),l=null;a.mkdirSync(o);try{for(let[p,h]of s){let i=u.join(o,p);a.mkdirSync(u.dirname(i),{recursive:!0}),a.writeFileSync(i,h)}c&&(l=j(r),a.renameSync(r,l),n.backups.push({path:l,original:r})),a.renameSync(o,r)}catch(p){throw m(o)&&a.rmSync(o,{recursive:!0,force:!0}),l&&!m(r)&&m(l)&&a.renameSync(l,r),p}}function T(e,r){if(/^mcp_servers:[ \t]*(?!\{\}[ \t]*(?:#.*)?$)\S+/m.test(e))throw new Error(`${r}: mcp_servers must be a block mapping`);let t=[],n=new Map,s=e.split(/\r?\n/),c=0;for(let o=0;o<s.length;o+=1){let l=s[o];if(/^\s*#/.test(l))continue;if(/^\s*\t|^ +\t/.test(l))throw new Error(`${r}:${o+1}: tabs are not supported in YAML indentation`);let p=l.replace(/\s+#.*$/,"");if(!p.trim()||/^\s*(?:---|\.\.\.)\s*$/.test(p))continue;let h=p.replace(/'(?:[^']|'')*'|"(?:[^"\\]|\\.)*"/g,"");for(let i of h)if("[{".includes(i)&&(c+=1),"]}".includes(i)&&(c-=1),c<0)throw new Error(`${r}:${o+1}: unbalanced flow collection`);if(/^\s*[^#\-][^:]*:\s*(?:.*)?$/.test(p)){let i=p.match(/^ */)[0].length,d=p.trimStart().match(/^([^:]+):/)[1].trim();for(;t.length&&t.at(-1).indent>=i;)t.pop();let y=`${t.map(_=>_.key).join("/")}|${i}|${d}`;if(n.has(y))throw new Error(`${r}:${o+1}: duplicate mapping key ${d}`);n.set(y,!0),/^[^:]+:\s*(?:#.*)?$/.test(p.trimStart())&&t.push({indent:i,key:d})}else if(!/^\s*-\s+/.test(p)&&c===0)throw new Error(`${r}:${o+1}: unsupported or malformed YAML`)}if(c!==0)throw new Error(`${r}: unbalanced flow collection`);if(/^\s*[^#\n]*:\s*[>|][+-]?\s*$/m.test(e)){let o=F(e,"mcp_servers");if(o&&/:\s*[>|][+-]?\s*$/m.test(o.body))throw new Error(`${r}: block scalars inside mcp_servers are unsupported`)}}function F(e,r){let n=new RegExp(`^${r}:[^\\S\\r\\n]*(?:#.*)?$`,"m").exec(e);if(!n)return null;let s=n.index,c=e.indexOf(`
4
- `,s)+1;if(!c)return{start:s,end:e.length,bodyStart:e.length,body:""};let o=e.slice(c),l=/^(?=\S[^\r\n]*:)/m.exec(o),p=l?c+l.index:e.length;return{start:s,bodyStart:c,end:p,body:e.slice(c,p)}}function k(e){return JSON.stringify(e)}function b(e,r){let t=r.command==="node"?[r.script]:r.args,n=[` ${e}:`,` command: ${k(r.command)}`];return t?.length&&n.push(" args:",...t.map(s=>` - ${k(s)}`)),n.push(" enabled: true",` # ${w}`),`${n.join(`
2
+ import B from"node:os";import g from"node:path";import{fileURLToPath as L}from"node:url";import a from"node:fs";import p from"node:path";import{randomBytes as O}from"node:crypto";var w="oracle-profile-upgrade/v1";function m(r){try{return a.accessSync(r),!0}catch{return!1}}function v(r){return m(r)?a.readdirSync(r,{recursive:!0,withFileTypes:!0}).filter(e=>e.isFile()).map(e=>p.join(e.parentPath||e.path,e.name)).sort().map(e=>[p.relative(r,e),a.readFileSync(e)]):[]}function P(r){let e=v(r);return e.push([".oracle-upgrade-version",Buffer.from(`${w}
3
+ `)]),e.sort(([t],[n])=>t.localeCompare(n))}function N(r,e){let t=v(r);return t.length===e.length&&t.every(([n,s],c)=>n===e[c][0]&&s.equals(e[c][1]))}function j(r){return`${r}.tmp-oracle-upgrade-${process.pid}-${O(6).toString("hex")}`}function E(r){let e=`${r}.bak-oracle-upgrade`;for(let t=1;m(e);t+=1)e=`${r}.bak-oracle-upgrade-${t}`;return e}function R(r,e,t,n){if(!m(r)||!a.statSync(r).isDirectory())return;let s=P(r);if(N(e,s)){n.unchanged.push(e);return}let c=m(e);if((c?n.updated:n.created).push(e),!t)return;a.mkdirSync(p.dirname(e),{recursive:!0});let o=j(e),l=null;a.mkdirSync(o);try{for(let[u,h]of s){let i=p.join(o,u);a.mkdirSync(p.dirname(i),{recursive:!0}),a.writeFileSync(i,h)}c&&(l=E(e),a.renameSync(e,l),n.backups.push({path:l,original:e})),a.renameSync(o,e)}catch(u){throw m(o)&&a.rmSync(o,{recursive:!0,force:!0}),l&&!m(e)&&m(l)&&a.renameSync(l,e),u}}function T(r,e){if(/^mcp_servers:[ \t]*(?!\{\}[ \t]*(?:#.*)?$)\S+/m.test(r))throw new Error(`${e}: mcp_servers must be a block mapping`);let t=[],n=new Map,s=r.split(/\r?\n/),c=0;for(let o=0;o<s.length;o+=1){let l=s[o];if(/^\s*#/.test(l))continue;if(/^\s*\t|^ +\t/.test(l))throw new Error(`${e}:${o+1}: tabs are not supported in YAML indentation`);let u=l.replace(/\s+#.*$/,"");if(!u.trim()||/^\s*(?:---|\.\.\.)\s*$/.test(u))continue;let h=u.replace(/'(?:[^']|'')*'|"(?:[^"\\]|\\.)*"/g,"");for(let i of h)if("[{".includes(i)&&(c+=1),"]}".includes(i)&&(c-=1),c<0)throw new Error(`${e}:${o+1}: unbalanced flow collection`);if(/^\s*[^#\-][^:]*:\s*(?:.*)?$/.test(u)){let i=u.match(/^ */)[0].length,d=u.trimStart().match(/^([^:]+):/)[1].trim();for(;t.length&&t.at(-1).indent>=i;)t.pop();let y=`${t.map(_=>_.key).join("/")}|${i}|${d}`;if(n.has(y))throw new Error(`${e}:${o+1}: duplicate mapping key ${d}`);n.set(y,!0),/^[^:]+:\s*(?:#.*)?$/.test(u.trimStart())&&t.push({indent:i,key:d})}else if(!/^\s*-\s+/.test(u)&&c===0)throw new Error(`${e}:${o+1}: unsupported or malformed YAML`)}if(c!==0)throw new Error(`${e}: unbalanced flow collection`);if(/^\s*[^#\n]*:\s*[>|][+-]?\s*$/m.test(r)){let o=F(r,"mcp_servers");if(o&&/:\s*[>|][+-]?\s*$/m.test(o.body))throw new Error(`${e}: block scalars inside mcp_servers are unsupported`)}}function F(r,e){let n=new RegExp(`^${e}:[^\\S\\r\\n]*(?:#.*)?$`,"m").exec(r);if(!n)return null;let s=n.index,c=r.indexOf(`
4
+ `,s)+1;if(!c)return{start:s,end:r.length,bodyStart:r.length,body:""};let o=r.slice(c),l=/^(?=\S[^\r\n]*:)/m.exec(o),u=l?c+l.index:r.length;return{start:s,bodyStart:c,end:u,body:r.slice(c,u)}}function k(r){return JSON.stringify(r)}function b(r,e){let t=e.command==="node"?[e.script]:e.args,n=[` ${r}:`,` command: ${k(e.command)}`];return t?.length&&n.push(" args:",...t.map(s=>` - ${k(s)}`)),n.push(" enabled: true",` # ${w}`),`${n.join(`
5
5
  `)}
6
- `}function q(e,r){e=e.replace(/^(mcp_servers:)\s*\{\}\s*(#.*)?$/m,(s,c,o)=>`${c}${o?` ${o}`:""}`);let t=F(e,"mcp_servers");if(!t){let s=e.length&&!e.endsWith(`
6
+ `}function q(r,e){r=r.replace(/^(mcp_servers:)\s*\{\}\s*(#.*)?$/m,(s,c,o)=>`${c}${o?` ${o}`:""}`);let t=F(r,"mcp_servers");if(!t){let s=r.length&&!r.endsWith(`
7
7
  `)?`
8
- `:"";return`${e}${s}mcp_servers:
9
- ${[...r].map(([c,o])=>b(c,o)).join("")}`}let n=t.body;for(let[s,c]of r){let o=new RegExp(`^ ${s}:[^\\S\\r\\n]*(?:#.*)?\\r?\\n(?:^(?: {3,}|\\s*$).*\\r?\\n?)*`,"m"),l=b(s,c);n=o.test(n)?n.replace(o,l):`${n}${n&&!n.endsWith(`
8
+ `:"";return`${r}${s}mcp_servers:
9
+ ${[...e].map(([c,o])=>b(c,o)).join("")}`}let n=t.body;for(let[s,c]of e){let o=new RegExp(`^ ${s}:[^\\S\\r\\n]*(?:#.*)?\\r?\\n(?:^(?: {3,}|\\s*$).*\\r?\\n?)*`,"m"),l=b(s,c);n=o.test(n)?n.replace(o,l):`${n}${n&&!n.endsWith(`
10
10
  `)?`
11
- `:""}${l}`}return`${e.slice(0,t.bodyStart)}${n}${e.slice(t.end)}`}function A(e,r,t){let n=m(e);if((n?a.readFileSync(e,"utf8"):null)===r){t.unchanged.push(e);return}if((n?t.updated:t.created).push(e),!t.applied)return;if(a.mkdirSync(u.dirname(e),{recursive:!0}),n){let o=j(e);a.copyFileSync(e,o),t.backups.push({path:o,original:e})}let c=E(e);try{a.writeFileSync(c,r,{mode:n?a.statSync(e).mode:384}),a.renameSync(c,e)}catch(o){throw m(c)&&a.rmSync(c,{force:!0}),o}}function M({hermesHome:e,packageRoot:r,only:t=null,apply:n=!1}){let s=u.join(e,"profiles"),c={ok:!0,applied:n,version:w,hermesHome:e,packageRoot:r,profiles:[],created:[],updated:[],unchanged:[],backups:[]},o=m(s)?a.readdirSync(s,{withFileTypes:!0}).filter(i=>i.isDirectory()).map(i=>i.name).sort():[];if(t&&(o=o.filter(i=>i===t)),t&&o.length===0)throw new Error(`profile not found: ${t}`);c.profiles=o;let l=new Map;for(let i of o){let d=u.join(s,i,"config.yaml"),$=m(d)?a.readFileSync(d,"utf8"):"";T($,d),l.set(i,$)}let p=u.join(r,"skills","oracle-action-semantics");if(!m(p))throw new Error(`required Oracle skill is missing: ${p}`);let h=u.join(r,"bin","oracle-data-mcp.mjs");if(!m(h))throw new Error(`oracle-data MCP command is missing: ${h}`);for(let i of o){let d=u.join(s,i);N(p,u.join(d,"skills","oracle-action-semantics"),n,c);let $=new Map([["oracle-data",{command:"node",script:h}]]),y=q(l.get(i),$);A(u.join(d,"config.yaml"),y,c)}return c}var f=process.argv.slice(2),S=e=>{let r=f.indexOf(e);if(r<0)return null;if(!f[r+1]||f[r+1].startsWith("--"))throw new Error(`${e} requires a value`);return f[r+1]};try{let e=new Set(["--apply","--json","--only","--hermes-home","--package-root"]);for(let s=0;s<f.length;s+=1){if(!e.has(f[s]))throw new Error(`unknown option: ${f[s]}`);["--only","--hermes-home","--package-root"].includes(f[s])&&(s+=1)}let r=g.resolve(S("--package-root")||g.join(g.dirname(L(import.meta.url)),"..")),t=g.resolve(S("--hermes-home")||process.env.HERMES_HOME||g.join(B.homedir(),".hermes")),n=M({hermesHome:t,packageRoot:r,only:S("--only"),apply:f.includes("--apply")});if(f.includes("--json"))process.stdout.write(`${JSON.stringify(n,null,2)}
12
- `);else{console.log(`oracle-upgrade ${n.applied?"applied":"dry run"}: ${n.profiles.length} profile(s)`);for(let s of["created","updated","unchanged","backups"])console.log(`${s}: ${n[s].length}`);n.applied||console.log("Re-run with --apply to make these changes.")}}catch(e){let r={ok:!1,error:e.message};f.includes("--json")?process.stdout.write(`${JSON.stringify(r,null,2)}
13
- `):console.error(`oracle-upgrade: ${e.message}`),process.exitCode=1}
11
+ `:""}${l}`}return`${r.slice(0,t.bodyStart)}${n}${r.slice(t.end)}`}function A(r,e,t){let n=m(r);if((n?a.readFileSync(r,"utf8"):null)===e){t.unchanged.push(r);return}if((n?t.updated:t.created).push(r),!t.applied)return;if(a.mkdirSync(p.dirname(r),{recursive:!0}),n){let o=E(r);a.copyFileSync(r,o),t.backups.push({path:o,original:r})}let c=j(r);try{a.writeFileSync(c,e,{mode:n?a.statSync(r).mode:384}),a.renameSync(c,r)}catch(o){throw m(c)&&a.rmSync(c,{force:!0}),o}}function M({hermesHome:r,packageRoot:e,only:t=null,apply:n=!1}){let s=p.join(r,"profiles"),c={ok:!0,applied:n,version:w,hermesHome:r,packageRoot:e,profiles:[],created:[],updated:[],unchanged:[],backups:[]},o=m(s)?a.readdirSync(s,{withFileTypes:!0}).filter(i=>i.isDirectory()).map(i=>i.name).sort():[];if(t&&(o=o.filter(i=>i===t)),t&&o.length===0)throw new Error(`profile not found: ${t}`);c.profiles=o;let l=new Map;for(let i of o){let d=p.join(s,i,"config.yaml"),$=m(d)?a.readFileSync(d,"utf8"):"";T($,d),l.set(i,$)}let u=[p.join(e,"skills","oracle-action-semantics"),p.join(e,"assets","skills","oracle-action-semantics")].find(i=>m(i));if(!u)throw new Error(`required Oracle skill is missing: ${p.join(e,"skills","oracle-action-semantics")}`);let h=p.join(e,"bin","oracle-data-mcp.mjs");if(!m(h))throw new Error(`oracle-data MCP command is missing: ${h}`);for(let i of o){let d=p.join(s,i);R(u,p.join(d,"skills","oracle-action-semantics"),n,c);let $=new Map([["oracle-data",{command:"node",script:h}]]),y=q(l.get(i),$);A(p.join(d,"config.yaml"),y,c)}return c}var f=process.argv.slice(2),S=r=>{let e=f.indexOf(r);if(e<0)return null;if(!f[e+1]||f[e+1].startsWith("--"))throw new Error(`${r} requires a value`);return f[e+1]};try{let r=new Set(["--apply","--json","--only","--hermes-home","--package-root"]);for(let s=0;s<f.length;s+=1){if(!r.has(f[s]))throw new Error(`unknown option: ${f[s]}`);["--only","--hermes-home","--package-root"].includes(f[s])&&(s+=1)}let e=g.resolve(S("--package-root")||g.join(g.dirname(L(import.meta.url)),"..")),t=g.resolve(S("--hermes-home")||process.env.HERMES_HOME||g.join(B.homedir(),".hermes")),n=M({hermesHome:t,packageRoot:e,only:S("--only"),apply:f.includes("--apply")});if(f.includes("--json"))process.stdout.write(`${JSON.stringify(n,null,2)}
12
+ `);else{console.log(`oracle-upgrade ${n.applied?"applied":"dry run"}: ${n.profiles.length} profile(s)`);for(let s of["created","updated","unchanged","backups"])console.log(`${s}: ${n[s].length}`);n.applied||console.log("Re-run with --apply to make these changes.")}}catch(r){let e={ok:!1,error:r.message};f.includes("--json")?process.stdout.write(`${JSON.stringify(e,null,2)}
13
+ `):console.error(`oracle-upgrade: ${r.message}`),process.exitCode=1}
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{realpathSync as U}from"node:fs";import{fileURLToPath as re}from"node:url";import h from"node:fs";import g from"node:path";import{pathToFileURL as Y}from"node:url";import d from"node:fs";import D from"node:os";import i from"node:path";import{fileURLToPath as T}from"node:url";var P=i.dirname(T(import.meta.url)),l=i.resolve(P,"../..");function u(){return process.env.ORACLE_FAKE_HOME||D.homedir()}function A(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function f(){return A()?process.env.ORACLE_CONFIG_DIR||i.join(u(),".config","oracle"):i.join(u(),".config","oracle")}function $(){return i.join(f(),"exec.env")}function _(){return i.join(f(),"desk.json")}function R(){return i.join(f(),"env")}function p({force:e=!1}={}){if(p._done&&!e)return p._result||null;p._done=!0;let o={},r=(a,t)=>{if(t==null)return;let n=String(t).trim();n&&(process.env[a]!=null&&String(process.env[a]).trim()!==""||(process.env[a]=n,o[a]=n))};try{let a=R();if(d.existsSync(a))for(let t of d.readFileSync(a,"utf8").split(/\r?\n/)){let n=t.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!n||n[2].startsWith("#"))continue;let c=n[2];(c.startsWith('"')&&c.endsWith('"')||c.startsWith("'")&&c.endsWith("'"))&&(c=c.slice(1,-1)),r(n[1],c)}}catch{}try{let a=_();if(d.existsSync(a)){let t=JSON.parse(d.readFileSync(a,"utf8"));t&&typeof t=="object"&&(r("ORACLE_DESK_URL",t.deskUrl||t.dataUrl||t.url),r("ORACLE_DATA_URL",t.dataUrl||t.deskUrl||t.url),r("ORACLE_API_URL",t.apiUrl||t.dataUrl||t.deskUrl),r("ORACLE_PUBLIC_URL",t.publicUrl||t.deskUrl||t.dataUrl),r("ORACLE_EXEC_URL",t.execUrl),r("MAD_DESK_URL",t.deskUrl||t.dataUrl))}}catch{}let s=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return s&&(r("ORACLE_DESK_URL",s),r("ORACLE_DATA_URL",s),r("ORACLE_API_URL",s),r("ORACLE_PUBLIC_URL",s),r("MAD_DESK_URL",s)),p._result=Object.keys(o).length?o:null,p._result}try{p()}catch{}function I(){return process.env.HERMES_HOME?i.resolve(process.env.HERMES_HOME):i.join(u(),".hermes")}function M(){return i.join(u(),".claude.json")}function H(e=process.cwd()){return i.join(e,".mcp.json")}function N(){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 F(){return i.join(u(),".codex","config.toml")}function k(){return i.join(f(),"connectors")}function q(){return i.join(k(),"chatgpt-openapi.json")}function K(){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(r=>d.existsSync(r))||o[0]}function G(e){return d.mkdirSync(e,{recursive:!0}),e}var C={homeDir:u,isPublicDesktop:A,oracleConfigDir:f,oracleExecEnvPath:$,oracleDeskJsonPath:_,oracleEnvFilePath:R,loadDeskRouting:p,hermesRoot:I,activeChainPath:K,claudeCodeUserConfigPath:M,claudeCodeProjectMcpPath:H,claudeDesktopConfigPath:N,codexConfigPath:F,chatgptConnectorDir:k,chatgptOpenApiPath:q,packageBin:y,ensureDir:G,PACKAGE_ROOT:l};import{execFile as B}from"node:child_process";import{existsSync as de,mkdirSync as fe,readFileSync as V,realpathSync as me,writeFileSync as he}from"node:fs";import j from"node:path";import{promisify as J}from"node:util";var xe=J(B);var Ee=1440*60*1e3;function v(e,o){let r=t=>String(t).replace(/^v/,"").split("-")[0].split(".").map(n=>Number.parseInt(n,10)||0),s=r(e),a=r(o);for(let t=0;t<Math.max(s.length,a.length);t+=1){let n=s[t]??0,c=a[t]??0;if(n>c)return 1;if(n<c)return-1}return 0}function W(e){let o=e?.stateDir||j.join(process.env.HOME||".",".oracle");return j.join(o,"update-check.json")}function w(e){try{return JSON.parse(V(W(e),"utf8"))}catch{return null}}var z="\u25C7 ORACLE // self-custody multichain agent control plane",X=`START
2
+ import{realpathSync as b}from"node:fs";import{fileURLToPath as re}from"node:url";import h from"node:fs";import g from"node:path";import{pathToFileURL as Y}from"node:url";import d from"node:fs";import D from"node:os";import i from"node:path";import{fileURLToPath as T}from"node:url";var P=i.dirname(T(import.meta.url)),l=i.resolve(P,"../..");function u(){return process.env.ORACLE_FAKE_HOME||D.homedir()}function A(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function f(){return A()?process.env.ORACLE_CONFIG_DIR||i.join(u(),".config","oracle"):i.join(u(),".config","oracle")}function $(){return i.join(f(),"exec.env")}function _(){return i.join(f(),"desk.json")}function R(){return i.join(f(),"env")}function p({force:e=!1}={}){if(p._done&&!e)return p._result||null;p._done=!0;let o={},r=(a,t)=>{if(t==null)return;let n=String(t).trim();n&&(process.env[a]!=null&&String(process.env[a]).trim()!==""||(process.env[a]=n,o[a]=n))};try{let a=R();if(d.existsSync(a))for(let t of d.readFileSync(a,"utf8").split(/\r?\n/)){let n=t.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!n||n[2].startsWith("#"))continue;let c=n[2];(c.startsWith('"')&&c.endsWith('"')||c.startsWith("'")&&c.endsWith("'"))&&(c=c.slice(1,-1)),r(n[1],c)}}catch{}try{let a=_();if(d.existsSync(a)){let t=JSON.parse(d.readFileSync(a,"utf8"));t&&typeof t=="object"&&(r("ORACLE_DESK_URL",t.deskUrl||t.dataUrl||t.url),r("ORACLE_DATA_URL",t.dataUrl||t.deskUrl||t.url),r("ORACLE_API_URL",t.apiUrl||t.dataUrl||t.deskUrl),r("ORACLE_PUBLIC_URL",t.publicUrl||t.deskUrl||t.dataUrl),r("ORACLE_EXEC_URL",t.execUrl),r("MAD_DESK_URL",t.deskUrl||t.dataUrl))}}catch{}let s=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return s&&(r("ORACLE_DESK_URL",s),r("ORACLE_DATA_URL",s),r("ORACLE_API_URL",s),r("ORACLE_PUBLIC_URL",s),r("MAD_DESK_URL",s)),p._result=Object.keys(o).length?o:null,p._result}try{p()}catch{}function I(){return process.env.HERMES_HOME?i.resolve(process.env.HERMES_HOME):i.join(u(),".hermes")}function M(){return i.join(u(),".claude.json")}function H(e=process.cwd()){return i.join(e,".mcp.json")}function N(){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 F(){return i.join(u(),".codex","config.toml")}function k(){return i.join(f(),"connectors")}function q(){return i.join(k(),"chatgpt-openapi.json")}function K(){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(r=>d.existsSync(r))||o[0]}function G(e){return d.mkdirSync(e,{recursive:!0}),e}var C={homeDir:u,isPublicDesktop:A,oracleConfigDir:f,oracleExecEnvPath:$,oracleDeskJsonPath:_,oracleEnvFilePath:R,loadDeskRouting:p,hermesRoot:I,activeChainPath:K,claudeCodeUserConfigPath:M,claudeCodeProjectMcpPath:H,claudeDesktopConfigPath:N,codexConfigPath:F,chatgptConnectorDir:k,chatgptOpenApiPath:q,packageBin:y,ensureDir:G,PACKAGE_ROOT:l};import{execFile as B}from"node:child_process";import{existsSync as de,mkdirSync as fe,readFileSync as V,realpathSync as me,writeFileSync as he}from"node:fs";import v from"node:path";import{promisify as J}from"node:util";var xe=J(B);var Ee=1440*60*1e3;function j(e,o){let r=t=>String(t).replace(/^v/,"").split("-")[0].split(".").map(n=>Number.parseInt(n,10)||0),s=r(e),a=r(o);for(let t=0;t<Math.max(s.length,a.length);t+=1){let n=s[t]??0,c=a[t]??0;if(n>c)return 1;if(n<c)return-1}return 0}function W(e){let o=e?.stateDir||v.join(process.env.HOME||".",".oracle");return v.join(o,"update-check.json")}function w(e){try{return JSON.parse(V(W(e),"utf8"))}catch{return null}}var z="\u25C7 ORACLE // self-custody multichain agent control plane",X=`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
@@ -39,20 +39,20 @@ SYSTEM
39
39
  oracle upgrade update installed agent lanes
40
40
 
41
41
  BOUNDARY
42
- Default and hosted Oracle remain prepare-only. Self-hosters may explicitly
43
- enable the encrypted local signer with exact confirmation and policy rails.
42
+ Oracle ships armed local-signer surfaces for self-hosters. Hosted/keyless
43
+ access cannot move value without the operator's encrypted local signer.
44
44
  Autonomous execution additionally requires ORACLE_AUTONOMOUS_TRADING=1.
45
45
  Use oracle <command> --help for command details.
46
- `;function S(){try{return JSON.parse(h.readFileSync(g.join(l,"package.json"),"utf8")).version||"0.0.0"}catch{return"0.0.0"}}function Q(){let e=g.join(l,"src","cli","commands");return h.existsSync(e)?e:g.join(l,"dist","cli","commands")}async function m(){let e=Q(),o=new Map;if(!h.existsSync(e))return o;let r=h.readdirSync(e).filter(s=>s.endsWith(".mjs")).sort();for(let s of r){let a=g.join(e,s);try{let n=(await import(Y(a).href+`?t=${Date.now()}`)).default;if(!n||typeof n!="object"||typeof n.run!="function")continue;let c=n.name||s.replace(/\.mjs$/,"");o.set(c,{...n,name:c,__file:a})}catch(t){process.env.ORACLE_CLI_DEBUG&&console.error(`oracle: failed loading command ${s}: ${t.message}`)}}return o}function Z(e,o=w()){return!o?.latest||!e||v(o.latest,e)<=0?"":`
46
+ `;function S(){try{return JSON.parse(h.readFileSync(g.join(l,"package.json"),"utf8")).version||"0.0.0"}catch{return"0.0.0"}}function Q(){let e=g.join(l,"src","cli","commands");return h.existsSync(e)?e:g.join(l,"dist","cli","commands")}async function m(){let e=Q(),o=new Map;if(!h.existsSync(e))return o;let r=h.readdirSync(e).filter(s=>s.endsWith(".mjs")).sort();for(let s of r){let a=g.join(e,s);try{let n=(await import(Y(a).href+`?t=${Date.now()}`)).default;if(!n||typeof n!="object"||typeof n.run!="function")continue;let c=n.name||s.replace(/\.mjs$/,"");o.set(c,{...n,name:c,__file:a})}catch(t){process.env.ORACLE_CLI_DEBUG&&console.error(`oracle: failed loading command ${s}: ${t.message}`)}}return o}function Z(e,o=w()){return!o?.latest||!e||j(o.latest,e)<=0?"":`
47
47
  Update available: ${e} \u2192 ${o.latest}. Run 'oracle update'.
48
48
  `}function x(e,o){let r=[];r.push(`${z} (v${e})`),r.push(""),r.push(X.trimEnd());let s=[];for(let a of o.values()){if(["help","version"].includes(a.name))continue;!new Set(["init","doctor","chat","model","auth","chain","setup","data","data-mcp","scan","route","prepare","swap","farm","follow","equities","strategy","public","mcp","plugins","harness","upgrade","bootstrap","eval","fees","sign","signer"]).has(a.name)&&a.summary&&s.push(` oracle ${a.name.padEnd(20)} ${a.summary}`)}return s.length&&(r.push(""),r.push("ADDITIONAL"),r.push(...s)),r.join(`
49
49
  `)+`
50
50
  `+Z(e)}function L(e,o){let r=[...o.keys()].sort(),s=r.length?r.join(", "):"(none loaded yet)";return`oracle: unknown command '${e}'. Known: ${s}
51
51
  Try: oracle --help
52
- `}function E(e){return{argv:e,root:l,bin:y,paths:C}}async function b(e=[]){let o=S();if(e.includes("--version")||e.includes("-V"))return O();if(e[0]==="--help"||e[0]==="-h"){let n=await m();return process.stdout.write(x(o,n)),0}if(e.length===0){let n=await m();if(ee(e)){let c=n.get("chat");if(c)return c.run(E([]))}return process.stdout.write(x(o,n)),0}if(te(e[0])){let c=(await m()).get("chat");if(c)return c.run(E(e))}let r=e[0],s=e.slice(1);if(r==="version")return O();if(r==="help"){let n=await m();if(s[0]){let c=n.get(s[0]);return c?(process.stdout.write((c.usage||`oracle ${c.name}`)+`
52
+ `}function E(e){return{argv:e,root:l,bin:y,paths:C}}async function U(e=[]){let o=S();if(e.includes("--version")||e.includes("-V"))return O();if(e[0]==="--help"||e[0]==="-h"){let n=await m();return process.stdout.write(x(o,n)),0}if(e.length===0){let n=await m();if(ee(e)){let c=n.get("chat");if(c)return c.run(E([]))}return process.stdout.write(x(o,n)),0}if(te(e[0])){let c=(await m()).get("chat");if(c)return c.run(E(e))}let r=e[0],s=e.slice(1);if(r==="version")return O();if(r==="help"){let n=await m();if(s[0]){let c=n.get(s[0]);return c?(process.stdout.write((c.usage||`oracle ${c.name}`)+`
53
53
  `),c.summary&&process.stdout.write(c.summary+`
54
54
  `),0):(process.stderr.write(L(s[0],n)),1)}return process.stdout.write(x(o,n)),0}let a=await m(),t=a.get(r);if(t){if(s[0]==="--help"||s[0]==="-h")return process.stdout.write((t.usage||`oracle ${t.name}`)+`
55
55
  `),t.summary&&process.stdout.write(t.summary+`
56
56
  `),0;try{let n=await t.run(E(s));return typeof n=="number"?n:0}catch(n){return process.stderr.write(`oracle ${r}: ${n?.message||n}
57
57
  `),1}}return process.stderr.write(L(r,a)),1}async function O(){let e=S();return process.stdout.write(`oracle ${e}
58
- `),0}function ee(e=[],o={stdin:process.stdin,stdout:process.stdout}){return e.length!==0?!1:process.env.ORACLE_FORCE_CHAT==="1"?!0:o.stdin?.isTTY===!0&&o.stdout?.isTTY===!0}function te(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 Se=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 ne(){if(!process.argv[1])return!1;try{return U(re(import.meta.url))===U(process.argv[1])}catch{return!1}}async function oe(e=process.argv.slice(2)){return b(e)}if(ne()){let e=await oe();process.exit(typeof e=="number"?e:0)}export{Se as COMMANDS,oe as main};
58
+ `),0}function ee(e=[],o={stdin:process.stdin,stdout:process.stdout}){return e.length!==0?!1:process.env.ORACLE_FORCE_CHAT==="1"?!0:o.stdin?.isTTY===!0&&o.stdout?.isTTY===!0}function te(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 Se=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 ne(){if(!process.argv[1])return!1;try{return b(re(import.meta.url))===b(process.argv[1])}catch{return!1}}async function oe(e=process.argv.slice(2)){return U(e)}if(ne()){let e=await oe();process.exit(typeof e=="number"?e:0)}export{Se as COMMANDS,oe as main};