@oracle-agent/oracle 0.22.2 → 0.22.4
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.
- package/README.md +4 -4
- package/artifacts/specialist-packs/oracle-full-crypto.json +1 -1
- package/dist/assets/profiles/oracle/SOUL.md +18 -21
- package/dist/assets/skills/multichain-prepare-desk.md +29 -0
- package/dist/assets/skills/oracle-chat/SKILL.md +9 -13
- package/dist/assets/skills/oracle-desk.md +1 -1
- package/dist/assets/skills/oracle-prime-research/SKILL.md +40 -0
- package/dist/bin/desk-server.mjs +11 -11
- package/dist/bin/oracle-data-mcp.mjs +5 -5
- package/dist/bin/oracle-gateway.mjs +16 -16
- package/dist/bin/oracle-route.mjs +12 -12
- package/dist/bin/oracle-upgrade.mjs +7 -15
- package/dist/bin/oracle.mjs +16 -33
- package/dist/cli/commands/doctor.mjs +4 -5
- package/dist/cli/commands/eval.mjs +100 -16
- package/dist/cli/commands/init.mjs +3 -3
- package/dist/cli/commands/mcp.mjs +36 -45
- package/dist/cli/commands/prime.mjs +26 -0
- package/dist/cli/commands/swap.mjs +4 -4
- package/dist/cli/commands/version.mjs +2 -2
- package/dist/data/desk-data.mjs +5 -5
- package/dist/index.mjs +16 -16
- package/dist/router/index.mjs +1 -1
- package/dist/router/prepare-bridge.mjs +1 -1
- package/package.json +12 -5
- package/public/oracle-console/app.js +1 -1
- package/public/oracle-console/bitcoin-wallets.js +48 -111
- package/public/oracle-console/index.html +1 -1
- package/dist/assets/skills/multichain-exec-desk.md +0 -33
- package/dist/cli/commands/credential.mjs +0 -1
- package/dist/cli/commands/runner.mjs +0 -1
- package/dist/cli/commands/sign.mjs +0 -5
- package/dist/cli/commands/signer.mjs +0 -1
- package/dist/cli/commands/vault.mjs +0 -1
- package/dist/gateway/telegram-exact-action-callbacks.mjs +0 -1
|
@@ -1,21 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
3
|
-
`)]),
|
|
4
|
-
`,s)+1;if(!
|
|
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(`
|
|
5
5
|
`)}
|
|
6
|
-
`}function
|
|
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(`
|
|
7
7
|
`)?`
|
|
8
8
|
`:"";return`${e}${s}mcp_servers:
|
|
9
|
-
${[...
|
|
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(`
|
|
10
10
|
`)?`
|
|
11
|
-
`:""}${
|
|
12
|
-
|
|
13
|
-
`)?`
|
|
14
|
-
`:"";return`${e}${t}plugins:
|
|
15
|
-
enabled:
|
|
16
|
-
${c}`}let s=o.body,r=/^ enabled:\s*\[([^\]]*)\](.*)$/m.exec(s);if(r){if(!r[1].split(",").map(i=>i.trim().replace(/^["']|["']$/g,"")).includes(n)){let i=r[1].trim()?`${r[1].trimEnd()}, ${w(n)}`:w(n);s=s.replace(r[0],` enabled: [${i}]${r[2]}`)}}else{let t=/^ enabled:\s*(?:#.*)?\r?\n((?:^ {4}-.*\r?\n?)*)/m.exec(s);t?t[1].split(/\r?\n/).map(l=>l.replace(/^\s*-\s*/,"").trim().replace(/^["']|["']$/g,"")).includes(n)||(s=s.replace(t[0],`${t[0]}${c}`)):s=`${s}${s&&!s.endsWith(`
|
|
17
|
-
`)?`
|
|
18
|
-
`:""} enabled:
|
|
19
|
-
${c}`}return`${e.slice(0,o.bodyStart)}${s}${e.slice(o.end)}`}function D(e,n,c){let o=p(e);if((o?u.readFileSync(e,"utf8"):null)===n){c.unchanged.push(e);return}if((o?c.updated:c.created).push(e),!c.applied)return;if(u.mkdirSync(a.dirname(e),{recursive:!0}),o){let t=O(e);u.copyFileSync(e,t),c.backups.push({path:t,original:e})}let r=P(e);try{u.writeFileSync(r,n,{mode:o?u.statSync(e).mode:384}),u.renameSync(r,e)}catch(t){throw p(r)&&u.rmSync(r,{force:!0}),t}}function J(e,n){if(n){let[o,...s]=n;return{command:o,args:s}}let c=[a.join(e,"bin","oracle-control-mcp.mjs"),a.join(e,"plugins","oracle-owner-gate","bin","oracle-control-mcp.mjs"),a.join(e,"plugins","oracle-owner-gate","oracle-control-mcp.mjs"),a.join(e,"..","@oracle-agent","operator","bin","oracle-control-mcp.mjs"),a.join(e,"..","..","@oracle-agent","operator","bin","oracle-control-mcp.mjs")];for(let o of c)if(p(o)&&u.statSync(o).isFile())return{command:"node",script:a.resolve(o)};try{let o=N(a.join(e,"package.json")),s=a.dirname(o.resolve("@oracle-agent/operator/package.json")),r=a.join(s,"bin","oracle-control-mcp.mjs");if(p(r)&&u.statSync(r).isFile())return{command:"node",script:a.resolve(r)}}catch{}return null}function q({hermesHome:e,packageRoot:n,only:c=null,apply:o=!1,controlCommand:s=null}){let r=a.join(e,"profiles"),t={ok:!0,applied:o,version:k,hermesHome:e,packageRoot:n,profiles:[],created:[],updated:[],unchanged:[],backups:[]},i=p(r)?u.readdirSync(r,{withFileTypes:!0}).filter(m=>m.isDirectory()).map(m=>m.name).sort():[];if(c&&(i=i.filter(m=>m===c)),c&&i.length===0)throw new Error(`profile not found: ${c}`);t.profiles=i;let l=new Map;for(let m of i){let $=a.join(r,m,"config.yaml"),y=p($)?u.readFileSync($,"utf8"):"";A(y,$),l.set(m,y)}let h=a.join(n,"skills","oracle-action-semantics");if(!p(h))throw new Error(`required Oracle skill is missing: ${h}`);let d=a.join(n,"plugins","oracle-owner-gate"),g=J(n,s),b=a.join(n,"bin","oracle-data-mcp.mjs");if(!p(b))throw new Error(`oracle-data MCP command is missing: ${b}`);for(let m of i){let $=a.join(r,m);F(h,a.join($,"skills","oracle-action-semantics"),o,t),p(d)&&F(d,a.join($,"plugins","oracle-owner-gate"),o,t);let y=new Map([["oracle-data",{command:"node",script:b}]]);g&&y.set("oracle-control",g);let v=B(l.get(m),y);p(d)&&(v=L(v,"oracle-owner-gate")),D(a.join($,"config.yaml"),v,t)}return t}var f=process.argv.slice(2),j=e=>{let n=f.indexOf(e);if(n<0)return null;if(!f[n+1]||f[n+1].startsWith("--"))throw new Error(`${e} requires a value`);return f[n+1]};try{let e=new Set(["--apply","--json","--only","--hermes-home","--package-root","--control-command"]);for(let r=0;r<f.length;r+=1){if(!e.has(f[r]))throw new Error(`unknown option: ${f[r]}`);["--only","--hermes-home","--package-root","--control-command"].includes(f[r])&&(r+=1)}let n=S.resolve(j("--package-root")||S.join(S.dirname(H(import.meta.url)),"..")),c=S.resolve(j("--hermes-home")||process.env.HERMES_HOME||S.join(Y.homedir(),".hermes")),o=j("--control-command"),s=q({hermesHome:c,packageRoot:n,only:j("--only"),apply:f.includes("--apply"),controlCommand:o?o.trim().split(/\s+/):null});if(f.includes("--json"))process.stdout.write(`${JSON.stringify(s,null,2)}
|
|
20
|
-
`);else{console.log(`oracle-upgrade ${s.applied?"applied":"dry run"}: ${s.profiles.length} profile(s)`);for(let r of["created","updated","unchanged","backups"])console.log(`${r}: ${s[r].length}`);s.applied||console.log("Re-run with --apply to make these changes.")}}catch(e){let n={ok:!1,error:e.message};f.includes("--json")?process.stdout.write(`${JSON.stringify(n,null,2)}
|
|
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)}
|
|
21
13
|
`):console.error(`oracle-upgrade: ${e.message}`),process.exitCode=1}
|
package/dist/bin/oracle.mjs
CHANGED
|
@@ -1,21 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{realpathSync as
|
|
3
|
-
|
|
4
|
-
The public 'oracle' package is prepare-only and never handles keys.
|
|
5
|
-
Owner-operated signing is private infrastructure and has no public npm install.
|
|
6
|
-
Review and sign prepared artifacts in your own wallet instead.
|
|
7
|
-
|
|
8
|
-
Nothing about your read/research/prepare setup is affected.
|
|
9
|
-
`,fe="hint: run 'oracle sign init' to provision keys, or 'oracle sign doctor --json' for detail.";function N(e){let n={};for(let r of de){let s=[u.join(e,r),u.join(e,`${r}.mjs`),u.join(e,`${r}.js`)];for(let a of s)if(f.existsSync(a)&&f.statSync(a).isFile()){n[r]=a;break}}return n}function me(e){let n=u.dirname(e);for(;n!==u.dirname(n);){let r=u.join(n,"package.json");if(f.existsSync(r))try{let s=JSON.parse(f.readFileSync(r,"utf8"));if(s.name==="@oracle-agent/operator")return{root:n,pkg:s}}catch{}n=u.dirname(n)}return null}function he(e){for(let n of e)try{let r=ie(u.join(n,"package.json")),s;try{let l=r.resolve("@oracle-agent/operator/package.json");s={root:u.dirname(l),pkg:JSON.parse(f.readFileSync(l,"utf8"))}}catch{let l=r.resolve("@oracle-agent/operator");s=me(l)}if(!s)continue;let{root:a,pkg:t}=s,o=t.bin||{},c={};for(let[l,m]of Object.entries(o))c[l]=u.resolve(a,m);let j=N(u.join(a,"bin"));for(let[l,m]of Object.entries(j))c[l]||(c[l]=m);return{ok:!0,binDir:u.join(a,"bin"),version:t.version||"unknown",bins:c,source:`require:${n}`}}catch{}return null}function k(){if(process.env.ORACLE_PUBLIC_DESKTOP==="1")return{ok:!1,source:"public-desktop"};let e=process.env.ORACLE_OPERATOR_BIN_DIR;if(e){let r=u.resolve(e);if(!f.existsSync(r))return{ok:!1};let s=N(r);if(!Object.keys(s).length)return{ok:!1};let a="unknown",t=u.resolve(r,"../package.json");if(f.existsSync(t))try{a=JSON.parse(f.readFileSync(t,"utf8")).version||a}catch{}return{ok:!0,binDir:r,version:a,bins:s,source:"env:ORACLE_OPERATOR_BIN_DIR"}}return he([process.cwd(),pe])||{ok:!1}}function E(e=process.stderr){e.write(I),I.endsWith(`
|
|
10
|
-
`)||e.write(`
|
|
11
|
-
`)}function H(e,n=[],r={}){let s=k();if(!s.ok)return E(r.stderr||process.stderr),3;let a=s.bins[e];if(!a)return(r.stderr||process.stderr).write(`oracle: operator bin '${e}' not found in resolved operator (${s.source})
|
|
12
|
-
`),3;let t=r.stdio||"inherit",o=/\.(mjs|cjs|js)$/.test(a),c=o?process.execPath:a,j=o?[a,...n]:[...n],l=ce(c,j,{stdio:t,env:r.env||process.env,cwd:r.cwd||process.cwd(),encoding:t==="pipe"?"utf8":void 0});if(l.error)return(r.stderr||process.stderr).write(`oracle: failed to spawn ${e}: ${l.error.message}
|
|
13
|
-
`),1;let m=typeof l.status=="number"?l.status:1;return m!==0&&r.appendHintOnError&&(r.stderr||process.stderr).write(fe+`
|
|
14
|
-
`),t==="pipe"?{code:m,stdout:l.stdout||"",stderr:l.stderr||""}:m}var ye="oracle \u2014 self-custody multichain agent control plane",ke=`READ / RESEARCH (no keys, this package)
|
|
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 P from"node:os";import i from"node:path";import{fileURLToPath as D}from"node:url";var T=i.dirname(D(import.meta.url)),l=i.resolve(T,"../..");function u(){return process.env.ORACLE_FAKE_HOME||P.homedir()}function _(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function f(){return _()?process.env.ORACLE_CONFIG_DIR||i.join(u(),".config","oracle"):i.join(u(),".config","oracle")}function $(){return i.join(f(),"exec.env")}function v(){return i.join(f(),"desk.json")}function A(){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=A();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=v();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 H(){return process.env.HERMES_HOME?i.resolve(process.env.HERMES_HOME):i.join(u(),".hermes")}function I(){return i.join(u(),".claude.json")}function M(e=process.cwd()){return i.join(e,".mcp.json")}function F(){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 N(){return i.join(u(),".codex","config.toml")}function C(){return i.join(f(),"connectors")}function q(){return i.join(C(),"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 B(e){return d.mkdirSync(e,{recursive:!0}),e}var E={homeDir:u,isPublicDesktop:_,oracleConfigDir:f,oracleExecEnvPath:$,oracleDeskJsonPath:v,oracleEnvFilePath:A,loadDeskRouting:p,hermesRoot:H,activeChainPath:K,claudeCodeUserConfigPath:I,claudeCodeProjectMcpPath:M,claudeDesktopConfigPath:F,codexConfigPath:N,chatgptConnectorDir:C,chatgptOpenApiPath:q,packageBin:y,ensureDir:B,PACKAGE_ROOT:l};import{execFile as G}from"node:child_process";import{existsSync as de,mkdirSync as fe,readFileSync as V,realpathSync as me,writeFileSync as he}from"node:fs";import R from"node:path";import{promisify as J}from"node:util";var xe=J(G);var ke=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||R.join(process.env.HOME||".",".oracle");return R.join(o,"update-check.json")}function b(e){try{return JSON.parse(V(W(e),"utf8"))}catch{return null}}var z="oracle \u2014 self-custody multichain agent control plane",Q=`READ / RESEARCH (no keys, this package)
|
|
15
3
|
oracle open the native Oracle chat (TTY)
|
|
16
4
|
oracle bootstrap optional: install an isolated Hermes compatibility runtime
|
|
17
5
|
oracle init install agent lanes + read plane (dry-run by default)
|
|
18
|
-
oracle doctor check read plane
|
|
6
|
+
oracle doctor check the read plane
|
|
19
7
|
oracle eval desk run desk harness eval (critical tests + parse smoke)
|
|
20
8
|
oracle chat premium boxed oracle chat (multi-model)
|
|
21
9
|
oracle model choose standalone/Hermes provider and any compatible model
|
|
@@ -40,28 +28,23 @@ import{realpathSync as K}from"node:fs";import{fileURLToPath as je}from"node:url"
|
|
|
40
28
|
manage Agent Plugins (open-standard portable agent tooling)
|
|
41
29
|
oracle harness detect|list scan PATH for installed agent harnesses (opencode, claude, codex, cursor\u2026)
|
|
42
30
|
oracle fees status|check check Locals Only 0% fee eligibility
|
|
31
|
+
oracle prime doctor|-p Prime Intellect RLM research lane (public only)
|
|
32
|
+
oracle eval desk|fidelity|hybrid|guards|prime|all
|
|
33
|
+
harness eval battery (unsigned / research only)
|
|
43
34
|
oracle upgrade upgrade installed agent lanes
|
|
44
35
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
oracle
|
|
50
|
-
|
|
51
|
-
oracle <noun> --help for details. Keys never leave your machine; this package
|
|
52
|
-
cannot sign \u2014 signing commands run the locally installed operator package.
|
|
53
|
-
`;function G(){try{return JSON.parse(O.readFileSync(b.join(p,"package.json"),"utf8")).version||"0.0.0"}catch{return"0.0.0"}}function ve(){let e=b.join(p,"src","cli","commands");return O.existsSync(e)?e:b.join(p,"dist","cli","commands")}async function v(){let e=ve(),n=new Map;if(!O.existsSync(e))return n;let r=O.readdirSync(e).filter(s=>s.endsWith(".mjs")).sort();for(let s of r){let a=b.join(e,s);try{let o=(await import(ge(a).href+`?t=${Date.now()}`)).default;if(!o||typeof o!="object"||typeof o.run!="function")continue;let c=o.name||s.replace(/\.mjs$/,"");n.set(c,{...o,name:c,__file:a})}catch(t){process.env.ORACLE_CLI_DEBUG&&console.error(`oracle: failed loading command ${s}: ${t.message}`)}}return n}function xe(e,n=$()){return!n?.latest||!e||D(n.latest,e)<=0?"":`
|
|
54
|
-
Update available: ${e} \u2192 ${n.latest}. Run 'oracle update'.
|
|
55
|
-
`}function w(e,n){let r=[];r.push(`${ye} (v${e})`),r.push(""),r.push(ke.trimEnd());let s=[];for(let a of n.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","sign","vault","signer","runner","credential"]).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(`
|
|
36
|
+
oracle <noun> --help for details. This package prepares unsigned actions and
|
|
37
|
+
never handles keys, signs, or broadcasts transactions.
|
|
38
|
+
`;function O(){try{return JSON.parse(h.readFileSync(g.join(l,"package.json"),"utf8")).version||"0.0.0"}catch{return"0.0.0"}}function X(){let e=g.join(l,"src","cli","commands");return h.existsSync(e)?e:g.join(l,"dist","cli","commands")}async function m(){let e=X(),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=b()){return!o?.latest||!e||j(o.latest,e)<=0?"":`
|
|
39
|
+
Update available: ${e} \u2192 ${o.latest}. Run 'oracle update'.
|
|
40
|
+
`}function x(e,o){let r=[];r.push(`${z} (v${e})`),r.push(""),r.push(Q.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","prime","fees"]).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(`
|
|
56
41
|
`)+`
|
|
57
|
-
`+
|
|
42
|
+
`+Z(e)}function w(e,o){let r=[...o.keys()].sort(),s=r.length?r.join(", "):"(none loaded yet)";return`oracle: unknown command '${e}'. Known: ${s}
|
|
58
43
|
Try: oracle --help
|
|
59
|
-
`}function
|
|
44
|
+
`}function k(e){return{argv:e,root:l,bin:y,paths:E}}async function S(e=[]){let o=O();if(e.includes("--version")||e.includes("-V"))return L();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(k([]))}return process.stdout.write(x(o,n)),0}if(te(e[0])){let c=(await m()).get("chat");if(c)return c.run(k(e))}let r=e[0],s=e.slice(1);if(r==="version")return L();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}`)+`
|
|
60
45
|
`),c.summary&&process.stdout.write(c.summary+`
|
|
61
|
-
`),0):(process.stderr.write(
|
|
46
|
+
`),0):(process.stderr.write(w(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}`)+`
|
|
62
47
|
`),t.summary&&process.stdout.write(t.summary+`
|
|
63
|
-
`),0;
|
|
64
|
-
`),1}
|
|
65
|
-
`),
|
|
66
|
-
`),1):(E(process.stderr),3):(process.stderr.write(M(r,a)),1)}async function F(){let n=`oracle ${G()}`,r=k();return r.ok&&(n+=` operator ${r.version}`),process.stdout.write(n+`
|
|
67
|
-
`),0}function Oe(e=[],n={stdin:process.stdin,stdout:process.stdout}){return e.length!==0?!1:process.env.ORACLE_FORCE_CHAT==="1"?!0:n.stdin?.isTTY===!0&&n.stdout?.isTTY===!0}function be(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 or=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 _e(){if(!process.argv[1])return!1;try{return K(je(import.meta.url))===K(process.argv[1])}catch{return!1}}async function Re(e=process.argv.slice(2)){return q(e)}if(_e()){let e=await Re();process.exit(typeof e=="number"?e:0)}export{or as COMMANDS,Re as main};
|
|
48
|
+
`),0;try{let n=await t.run(k(s));return typeof n=="number"?n:0}catch(n){return process.stderr.write(`oracle ${r}: ${n?.message||n}
|
|
49
|
+
`),1}}return process.stderr.write(w(r,a)),1}async function L(){let e=O();return process.stdout.write(`oracle ${e}
|
|
50
|
+
`),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 Oe=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 S(e)}if(ne()){let e=await oe();process.exit(typeof e=="number"?e:0)}export{Oe as COMMANDS,oe as main};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
`);else
|
|
3
|
-
`),
|
|
4
|
-
`);
|
|
5
|
-
`)}return s?1:0}};export{fe as default};
|
|
1
|
+
import m from"node:fs";import V from"node:path";import C from"node:fs";import f from"node:path";import v from"node:fs";import g from"node:os";import l from"node:path";import{fileURLToPath as T}from"node:url";var j=l.dirname(T(import.meta.url)),X=l.resolve(j,"../..");function x(){return process.env.ORACLE_FAKE_HOME||g.homedir()}function P(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function _(){return P()?process.env.ORACLE_CONFIG_DIR||l.join(x(),".config","oracle"):l.join(x(),".config","oracle")}function w(){return l.join(_(),"desk.json")}function D(){return l.join(_(),"env")}function u({force:t=!1}={}){if(u._done&&!t)return u._result||null;u._done=!0;let o={},e=(r,n)=>{if(n==null)return;let i=String(n).trim();i&&(process.env[r]!=null&&String(process.env[r]).trim()!==""||(process.env[r]=i,o[r]=i))};try{let r=D();if(v.existsSync(r))for(let n of v.readFileSync(r,"utf8").split(/\r?\n/)){let i=n.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!i||i[2].startsWith("#"))continue;let c=i[2];(c.startsWith('"')&&c.endsWith('"')||c.startsWith("'")&&c.endsWith("'"))&&(c=c.slice(1,-1)),e(i[1],c)}}catch{}try{let r=w();if(v.existsSync(r)){let n=JSON.parse(v.readFileSync(r,"utf8"));n&&typeof n=="object"&&(e("ORACLE_DESK_URL",n.deskUrl||n.dataUrl||n.url),e("ORACLE_DATA_URL",n.dataUrl||n.deskUrl||n.url),e("ORACLE_API_URL",n.apiUrl||n.dataUrl||n.deskUrl),e("ORACLE_PUBLIC_URL",n.publicUrl||n.deskUrl||n.dataUrl),e("ORACLE_EXEC_URL",n.execUrl),e("MAD_DESK_URL",n.deskUrl||n.dataUrl))}}catch{}let s=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return s&&(e("ORACLE_DESK_URL",s),e("ORACLE_DATA_URL",s),e("ORACLE_API_URL",s),e("ORACLE_PUBLIC_URL",s),e("MAD_DESK_URL",s)),u._result=Object.keys(o).length?o:null,u._result}try{u()}catch{}var $="0.19.0",ne=`hermes-agent==${$}`;var y="0.12.1",te=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${y}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${y}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function I(){return f.join(_(),"runtime")}function N(){return f.join(I(),"venv")}function H(t){let o=process.platform==="win32"?"Scripts":"bin",e=process.platform==="win32"?`${t}.exe`:t;return f.join(N(),o,e)}function M(){return H("hermes")}function B(t){let o=process.platform==="win32"&&!f.extname(t)?["",".exe",".cmd",".bat"]:[""];for(let e of(process.env.PATH||"").split(f.delimiter))if(e)for(let s of o){let r=f.join(e,`${t}${s}`);try{if(C.existsSync(r))return r}catch{}}return null}function L(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let t=B("hermes");if(t)return{ok:!0,bin:t,source:"path"};let o=M();return C.existsSync(o)?{ok:!0,bin:o,source:"managed"}:{ok:!1,bin:null,source:null}}function O(){let[t,o]=process.versions.node.split(".").map(Number);return t>20||t===20&&o>=19}function F(t){if(!m.existsSync(t))return{};let o={};for(let e of m.readFileSync(t,"utf8").split(/\r?\n/)){let s=e.match(/^([A-Z0-9_]+)=(.*)$/);s&&(o[s[1]]=s[2])}return o}async function K(t){let o=t.replace(/\/$/,"");for(let e of["/health","/public/health"])try{if((await fetch(o+e)).ok)return!0}catch{}return!1}var ce={name:"doctor",summary:"check the read plane",group:"read",usage:"oracle doctor [--json]",async run(t){let o=t.argv.includes("--json"),e=[],s=!1,r=(a,S,b,U=null)=>{e.push({id:a,status:S,detail:b,fix:U}),S==="fail"&&(s=!0)};r("node",O()?"ok":"fail",`node ${process.versions.node}`,O()?null:"install node >= 20.19");let n=t.paths.oracleExecEnvPath(),i=F(n),c=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;r("attestation_secret",c?"ok":"warn",c?"present":"missing",c?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let p=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",E=await K(p),R=t.paths.loadDeskRouting&&(process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL)?`desk ${process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL}`:null;r("data_server",E?"ok":"warn",E?`reachable ${p}${R?` (${R})`:""}`:`down ${p}`,E?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 d=L();r("agent_runtime",d.ok?"ok":"warn",d.ok?`present ${d.bin} (${d.source})`:"not installed",d.ok?null:"oracle bootstrap");let A=V.join(t.paths.hermesRoot(),"profiles"),h=0;m.existsSync(A)&&(h=m.readdirSync(A,{withFileTypes:!0}).filter(a=>a.isDirectory()).length),r("hermes_lanes",h>0?"ok":"warn",h>0?`${h} profile dir(s)`:"no lane profiles found",h>0?null:"oracle init --apply");let k={ok:!s,checks:e};if(o)process.stdout.write(JSON.stringify(k,null,2)+`
|
|
2
|
+
`);else for(let a of e)process.stdout.write(`${a.status.toUpperCase().padEnd(4)} ${a.id}: ${a.detail}
|
|
3
|
+
`),a.fix&&process.stdout.write(` fix: ${a.fix}
|
|
4
|
+
`);return s?1:0}};export{ce as default};
|