@oracle-agent/oracle 0.22.5 → 0.22.7
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/dist/assets/profiles/oracle/SOUL.md +4 -3
- package/dist/bin/oracle.mjs +10 -9
- package/dist/cli/commands/bootstrap.mjs +3 -3
- package/dist/cli/commands/chat.mjs +61 -61
- package/dist/cli/commands/doctor.mjs +1 -1
- package/dist/cli/commands/harness.mjs +7 -9
- package/dist/cli/commands/model.mjs +67 -67
- package/dist/cli/commands/setup.mjs +38 -38
- package/dist/index.mjs +20 -19
- package/dist/onboarding/harness-configs.mjs +5 -4
- package/package.json +1 -1
- package/public/agent-connect/app.js +54 -22
- package/public/agent-connect/index.html +8 -3
- package/public/oracle-splash/index.html +5 -0
|
@@ -1,4 +1,4 @@
|
|
|
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
|
|
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 D(){return l.join(_(),"desk.json")}function w(){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=w();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=D();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 S="0.12.1",te=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${S}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${S}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function I(){return f.join(_(),"runtime")}function H(){return f.join(I(),"venv")}function N(t){let o=process.platform==="win32"?"Scripts":"bin",e=process.platform==="win32"?`${t}.exe`:t;return f.join(H(),o,e)}function M(){return N("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 O(){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 L(){let[t,o]=process.versions.node.split(".").map(Number);return t>20||t===20&&o>=19}function K(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 F(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,y,U,b=null)=>{e.push({id:a,status:y,detail:U,fix:b}),y==="fail"&&(s=!0)};r("node",L()?"ok":"fail",`node ${process.versions.node}`,L()?null:"install node >= 20.19");let n=t.paths.oracleExecEnvPath(),i=K(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 F(p),A=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}${A?` (${A})`:""}`:`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=O();r("hermes_opt_in","ok",d.ok?`detected ${d.bin} (${d.source}) \u2014 unused unless ORACLE_CHAT_BACKEND=hermes`:"not detected \u2014 native-only OK",d.ok?"detection only; opt in with ORACLE_CHAT_BACKEND=hermes or oracle harness detect":null);let R=V.join(t.paths.hermesRoot(),"profiles"),h=0;m.existsSync(R)&&(h=m.readdirSync(R,{withFileTypes:!0}).filter(a=>a.isDirectory()).length),r("hermes_lanes","ok",h>0?`${h} profile dir(s) (optional Hermes opt-in surface)`:"no Hermes lane profiles (native-only OK)",(h>0,null));let k={ok:!s,checks:e};if(o)process.stdout.write(JSON.stringify(k,null,2)+`
|
|
2
2
|
`);else for(let a of e)process.stdout.write(`${a.status.toUpperCase().padEnd(4)} ${a.id}: ${a.detail}
|
|
3
3
|
`),a.fix&&process.stdout.write(` fix: ${a.fix}
|
|
4
4
|
`);return s?1:0}};export{ce as default};
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
`)}function
|
|
3
|
-
`)}var
|
|
4
|
-
`),0;if(
|
|
5
|
-
`),process.stderr.write(
|
|
6
|
-
`),1;let
|
|
7
|
-
`),
|
|
8
|
-
`),0):(process.stdout.write(f(i)+`
|
|
9
|
-
`),0)}};export{h as classifyHarness,y as default,f as renderHarnessReport};
|
|
1
|
+
import k from"node:fs";import m from"node:path";var a=Object.freeze([{id:"oracle",label:"Oracle Native",kind:"oracle",bins:["oracle"],website:!0,detect:!0},{id:"hermes",label:"Hermes Agent",kind:"mcp",bins:["hermes"],mcpTarget:"generic",configKey:"hermes",website:!0,detect:!0},{id:"claude",label:"Claude Code",kind:"mcp",bins:["claude"],mcpTarget:"claude-code",configKey:"claudeCode",website:!0,detect:!0},{id:"claude-desktop",label:"Claude Desktop",kind:"mcp",bins:[],mcpTarget:"claude-desktop",configKey:"claudeDesktop",website:!0,detect:!1},{id:"chatgpt",label:"ChatGPT",kind:"mcp",bins:[],mcpTarget:"chatgpt",configKey:"chatgpt",website:!0,detect:!1},{id:"codex",label:"OpenAI Codex",kind:"mcp",bins:["codex"],mcpTarget:"codex",configKey:"codex",website:!0,detect:!0},{id:"cursor",label:"Cursor",kind:"mcp",bins:["cursor","cursor-agent"],mcpTarget:"cursor",configKey:"cursor",website:!0,detect:!0},{id:"windsurf",label:"Windsurf",kind:"mcp",bins:["windsurf"],mcpTarget:"vscode",configKey:"windsurf",website:!0,detect:!0},{id:"vscode",label:"VS Code / Copilot",kind:"mcp",bins:["code","code-insiders"],mcpTarget:"vscode",configKey:"vscode",website:!0,detect:!0},{id:"openclaw",label:"OpenClaw",kind:"mcp",bins:["openclaw","claw"],mcpTarget:"generic",configKey:"openclaw",website:!0,detect:!0},{id:"perplexity",label:"Perplexity",kind:"mcp",bins:["perplexity","pplx"],mcpTarget:"generic",configKey:"perplexity",website:!0,detect:!0},{id:"manus",label:"Manus",kind:"mcp",bins:["manus"],mcpTarget:"generic",configKey:"manus",website:!0,detect:!0},{id:"prime",label:"Prime Intellect Agent",kind:"mcp",bins:["prime-agent","prime"],mcpTarget:"generic",configKey:"prime",website:!1,detect:!0},{id:"opencode",label:"OpenCode",kind:"mcp",bins:["opencode"],mcpTarget:"generic",configKey:"opencode",website:!1,detect:!0},{id:"aider",label:"Aider",kind:"mcp",bins:["aider"],mcpTarget:"generic",configKey:"aider",website:!1,detect:!0},{id:"continue",label:"Continue",kind:"mcp",bins:["continue"],mcpTarget:"vscode",configKey:"continue",website:!1,detect:!0},{id:"goose",label:"Goose",kind:"mcp",bins:["goose"],mcpTarget:"generic",configKey:"goose",website:!1,detect:!0},{id:"amp",label:"Amp",kind:"mcp",bins:["amp"],mcpTarget:"generic",configKey:"amp",website:!1,detect:!0},{id:"generic",label:"Generic MCP",kind:"mcp",bins:[],mcpTarget:"generic",configKey:"genericMcp",website:!0,detect:!1}]);function c(){return a.filter(e=>e.website)}function p(){return a.filter(e=>e.detect!==!1&&(e.bins?.length||e.kind==="oracle"))}function l(e){return a.find(o=>o.id===e)?.mcpTarget||"generic"}function d(e){return e==="oracle"?"oracle chat":`oracle mcp install ${l(e)}`}var I=Object.freeze({openrouter:{key:"OPENROUTER_API_KEY",baseUrl:"https://openrouter.ai/api/v1",model:"openrouter/auto"},openai:{key:"OPENAI_API_KEY",baseUrl:"https://api.openai.com/v1",model:"gpt-4.1-mini"},anthropic:{key:"ANTHROPIC_API_KEY",baseUrl:"https://api.anthropic.com/v1",model:"claude-sonnet-4-6",protocol:"anthropic-messages"},xai:{key:"XAI_API_KEY",baseUrl:"https://api.x.ai/v1",model:"grok-4.5"},deepseek:{key:"DEEPSEEK_API_KEY",baseUrl:"https://api.deepseek.com/v1",model:"deepseek-chat"},gemini:{key:"GEMINI_API_KEY",alternateKey:"GOOGLE_API_KEY",baseUrl:"https://generativelanguage.googleapis.com/v1beta/openai",model:"gemini-2.5-flash"},kimi:{key:"MOONSHOT_API_KEY",alternateKey:"KIMI_API_KEY",baseUrl:"https://api.moonshot.ai/v1",model:"kimi-k3",protocol:"openai-chat"},mistral:{key:"MISTRAL_API_KEY",baseUrl:"https://api.mistral.ai/v1",model:"mistral-large-latest",protocol:"openai-chat"}}),L=Object.freeze({"anthropic-oauth":{key:"ANTHROPIC_API_KEY",baseUrl:"https://api.anthropic.com/v1",model:"claude-sonnet-4-20250514",protocol:"anthropic-messages"},"openai-codex":{key:"OPENAI_API_KEY",baseUrl:"https://chatgpt.com/backend-api/codex",model:"gpt-5.4",protocol:"responses"},"xai-oauth":{key:"XAI_API_KEY",baseUrl:"https://api.x.ai/v1",model:"grok-4-latest",protocol:"responses"}});function A(){return p().map(e=>({name:e.id,bin:e.bins?.[0]||e.id,label:e.label,kind:e.kind,altBins:(e.bins||[]).slice(1)}))}function f(e){for(let n of(process.env.PATH||"").split(m.delimiter)){let o=m.join(n,e);try{if(k.existsSync(o))return o}catch{}}return null}function w(e){let n=[e.bin,...e.altBins||[]].filter(Boolean);for(let o of n){let r=f(o);if(r)return r}return null}function h(e=process.env){let n=[];for(let r of A()){if(r.kind==="oracle"||r.name==="oracle"){n.push({...r,path:process.argv[1]||"oracle"});continue}let s=w(r);s&&n.push({name:r.name,bin:r.bin,label:r.label,kind:r.kind,path:s})}let o=String(e.ORACLE_HARNESS_EXTRA||"").split(",").map(r=>r.trim()).filter(Boolean);for(let r of o){if(n.some(t=>t.bin===r||t.name===r))continue;let s=f(r);s&&n.push({name:r,bin:r,label:r,kind:"mcp",path:s})}return n}function O(e){if(e.kind==="oracle"||e.name==="oracle")return{...e,direction:"native",integrate:"oracle chat",plugins:null,backendEnv:null,note:"Oracle native harness. Default. No external client required."};let n=l(e.name)||"generic";return{...e,direction:"inbound",integrate:`oracle mcp install ${n}`,plugins:"oracle plugins install <path|git-url>",backendEnv:null,note:"Use this client harness with Oracle as MCP/plugin. Or skip it and use Oracle native (`oracle chat`). Detection never auto-selects."}}function _(e){let n=e.map(O),o=n.find(i=>i.direction==="native"),r=n.filter(i=>i.direction==="inbound"),s=c().filter(i=>i.kind==="mcp"),t=[];if(t.push(""),t.push("Two ways to run Oracle (pick one):"),t.push(` 1) Oracle native harness ${o?o.path:"oracle"}`),t.push(" oracle setup model && oracle chat"),t.push(" 2) Your client harness wire Oracle INTO the agent you already use"),t.push(" oracle mcp install <target> | oracle plugins install <path>"),t.push(""),t.push("No external harness is auto-selected. Detection never changes the backend."),t.push(""),t.push("Detected on this machine:"),r.length===0)t.push(" (none \u2014 Oracle native is enough)");else for(let i of r)t.push(` ${i.label.padEnd(22)} ${i.path}`),t.push(` ${" ".repeat(22)} \u2192 ${i.integrate}`),t.push(` ${" ".repeat(22)} or stay native: oracle chat`);t.push(""),t.push("Website harness roster (MCP install targets):");for(let i of s){let g=d(i.id),b=r.find(E=>E.name===i.id);t.push(` ${i.label.padEnd(22)} ${g}${b?" [detected]":""}`)}return t.push(""),t.push("Also:"),t.push(" oracle mcp print --target generic"),t.push(" oracle plugins list"),t.push(" ORACLE_HARNESS_EXTRA=foo,bar # detect extra bins"),t.push(""),t.push("Models on the site (Grok, Gemini, DeepSeek, Qwen, Kimi) are providers for"),t.push("Oracle native \u2014 configure with oracle setup model / oracle auth, not as harnesses."),t.join(`
|
|
2
|
+
`)}function u(){return["oracle harness \u2014 detect installed agent clients",""," oracle harness detect scan PATH + show website harness roster"," oracle harness list alias of detect","","Modes:"," Oracle native oracle chat"," Client harness oracle mcp install <target> (Hermes, Claude, Codex, Cursor, OpenClaw, Perplexity, \u2026)","",`Website roster: ${c().map(n=>n.id).join(", ")}`,"Extra bins: ORACLE_HARNESS_EXTRA=foo,bar","","Detection never selects a backend."].join(`
|
|
3
|
+
`)}var M={name:"harness",summary:"detect agent clients; use Oracle native or wire MCP into them",usage:u,async run(e,n){let o=e[0];if(o==="help"||o==="--help"||o==="-h")return process.stdout.write(u()+`
|
|
4
|
+
`),0;if(o&&o!=="detect"&&o!=="list")return process.stderr.write(`oracle harness: unknown subcommand '${o}'
|
|
5
|
+
`),process.stderr.write(u()+`
|
|
6
|
+
`),1;let r=h();return process.stdout.write(_(r)+`
|
|
7
|
+
`),0}};export{a as HARNESS_ROSTER,O as classifyHarness,M as default,_ as renderHarnessReport,c as websiteHarnesses};
|